int personlig(void) { int nummer,editret; struct Mote *motpek; if(argument[0]) { if(mote2==-1) { puttekn("\r\n\nBrev kommenterar du som vanligt med 'kommentera'.\r\n\n",-1); return(0); } nummer=atoi(argument); motpek=getmotpek(mote2); if(motpek->type == MOTE_ORGINAL) { if(nummer<Servermem->info.lowtext || nummer>Servermem->info.hightext) { puttekn("\r\n\nTexten finns inte!\r\n\n",-1); return(0); } if(!MayBeMemberConf(Servermem->texts[nummer%MAXTEXTS], inloggad, &Servermem->inne[nodnr])) { puttekn("\r\n\nDu har inte rätt att kommentera den texten!\r\n\n",-1); return(0); } if(readtexthead(nummer,&readhead)) return(0); senast_text_mote = Servermem->texts[nummer%MAXTEXTS]; } else if(motpek->type == MOTE_FIDO) { if(nummer<motpek->lowtext || nummer>motpek->texter) { puttekn("\r\n\nTexten finns inte!\r\n\n",-1); return(0); } senast_text_mote = motpek->nummer; } senast_text_typ=TEXT; senast_text_nr = nummer; } else { if(senast_text_typ==BREV) { puttekn("\r\n\nBrev kommenterar du som vanligt med 'kommentera'.\r\n\n",-1); return(0); } if(!(motpek=getmotpek(senast_text_mote))) { puttekn("\n\n\rHmm.. Mötet där texten finns existerar inte..\n\r",-1); return(0); } } if(motpek->type == MOTE_FIDO) { nu_skrivs = BREV_FIDO; return(fido_brev(NULL,NULL,motpek)); } nu_skrivs=BREV; initpersheader(); if((editret=edittext(NULL))==1) return(1); if(!editret) sparabrev(); return(0); }
/* * Returns the id of the next conference with unread texts, starting the search * from currentConfId. Returns -2 if there is no conference with unread texts. */ int FindNextUnreadConf(int currentConfId) { struct Mote *conf; int tmpConfId = 0; if(IsListEmpty((struct List *)&Servermem->mot_list)) { return -2; } if(currentConfId == MAILBOX_CONFID) { conf = (struct Mote *)Servermem->mot_list.mlh_Head; } else { conf = getmotpek(currentConfId); conf = (struct Mote *)conf->mot_node.mln_Succ; if(conf->mot_node.mln_Succ == NULL) { conf = (struct Mote *)Servermem->mot_list.mlh_Head; } } tmpConfId = conf->nummer; while(tmpConfId != currentConfId) { if(!(conf->status & SUPERHEMLIGT) && hasUnreadInConf(tmpConfId)) { return tmpConfId; } conf = (struct Mote *)conf->mot_node.mln_Succ; if(conf->mot_node.mln_Succ == NULL) { if(currentConfId == MAILBOX_CONFID) { return -2; } conf = (struct Mote *)Servermem->mot_list.mlh_Head; } tmpConfId = conf->nummer; } return -2; }
void rxvisatext(struct RexxMsg *mess) { struct Mote *motpek; int text,mote,type; char *pek; pek=hittaefter(mess->rm_Args[0]); if(!pek[0]) { mess->rm_Result1=10; mess->rm_Result2=NULL; return; } text=atoi(pek); pek=hittaefter(pek); if(!pek[0]) type=MOTE_ORGINAL; else { mote=atoi(pek); motpek=getmotpek(mote); if(!motpek) { mess->rm_Result1=10; mess->rm_Result2=NULL; return; } type=motpek->type; } if(type==MOTE_ORGINAL) org_visatext(text); mess->rm_Result1=0; mess->rm_Result2=NULL; }
void igen(void) { struct Mote *motpek; if(senast_text_typ==BREV) visabrev(senast_brev_nr,senast_brev_anv); else if(senast_text_typ==TEXT) { motpek=getmotpek(senast_text_mote); if(motpek->type==MOTE_ORGINAL) org_visatext(senast_text_nr, FALSE); else if(motpek->type==MOTE_FIDO) fido_visatext(senast_text_nr,motpek); } else puttekn("\r\n\nDu har inte läst någon text ännu!\r\n\n",-1); }
void rxentermeet(struct RexxMsg *mess) { int motnr; motnr=atoi(hittaefter(mess->rm_Args[0])); if(!getmotpek(motnr)) { mess->rm_Result1=10; mess->rm_Result2=NULL; return; } sendrexxrc=motnr; mess->rm_Result1=0; mess->rm_Result2=NULL; }
int radmot(void) { int motnr,x,words; char lappfile[40]; BPTR fh; struct Mote *motpek; if((motnr=parsemot(argument))==-1) { puttekn("\r\n\nFinns inget möte som heter så!\r\n\n",-1); return(-5); } if(motnr==-3) { puttekn("\r\n\nSkriv: Radera Möte <mötesnamn>\r\n\n",-1); return(-5); } motpek=getmotpek(motnr); if(!motpek) printf("ARRRRGH!! Fel på motpek!\n"); if(!MayAdminConf(motnr, inloggad, &Servermem->inne[nodnr])) { puttekn("\n\n\rDu har ingen rätt att radera det mötet!\n\r",-1); return(-5); } sprintf(outbuffer,"\r\n\nÄr du säker på att du vill radera mötet %s? ",motpek->namn); puttekn(outbuffer,-1); if(!jaellernej('j','n',2)) { puttekn("Nej\n\n\r",-1); return(-5); } puttekn("Ja\r\n\n",-1); Remove((struct Node *)motpek); motpek->namn[0]=0; writemeet(motpek); FreeMem(motpek,sizeof(struct Mote)); sprintf(lappfile,"NiKom:Lappar/%d.motlapp",motnr); DeleteFile(lappfile); for(x=Servermem->info.lowtext;x<=Servermem->info.hightext;x++) { if(Servermem->texts[x%MAXTEXTS]==motnr) Servermem->texts[x%MAXTEXTS]=-1; } NiKForbid(); if(!(fh=Open("NiKom:DatoCfg/Textmot.dat",MODE_OLDFILE))) { puttekn("\r\n\nKunde inte öppna NiKom:DatoCfg/Textmot.dat\r\n\n",-1); NiKPermit(); return(-5); } words=Write(fh,(void *)Servermem->texts,2*MAXTEXTS); if(words==-1) puttekn("\r\n\nFel vid skrivandet av Textmot.dat\r\n\n",-1); Close(fh); NiKPermit(); return(mote2==motnr ? -9 : -5); }
int endast(void) { int antal,foo=TRUE; int motnr, nyttmote = 1; struct Mote *motpek = NULL; if(!isdigit(argument[0])) { puttekn("\r\n\nSkriv: Endast <antal texter> [mötesnamn]\r\n",-1); return(-5); } antal=atoi(argument); argument=hittaefter(argument); if(argument[0]) { if(matchar(argument,Servermem->cfg.brevnamn)) motnr = -1; else { motnr=parsemot(argument); if(motnr==-3) { puttekn("\r\n\nSkriv: Endast <antal texter> [mötesnamn]\r\n\n",-1); return(-5); } if(motnr==-1) { puttekn("\r\n\nFinns inget sådant möte!\r\n\n", -1); return(-5); } } nyttmote = 0; } else motnr = mote2; if(motnr==-1) { Servermem->inne[nodnr].brevpek=getnextletter(inloggad)-antal; foo=getfirstletter(inloggad); if(foo>Servermem->inne[nodnr].brevpek) Servermem->inne[nodnr].brevpek=foo; } else { motpek = getmotpek(motnr); if(motpek->type==MOTE_ORGINAL) org_endast(motnr,antal); else if(motpek->type==MOTE_FIDO) fido_endast(motpek,antal); } if(nyttmote) return(-11); else return(-5); }
void atersekom(void) { struct Mote *motpek; if(senast_text_typ==BREV) { if(!brevread.reply[0]) puttekn("\r\n\nTexten är inte någon kommentar!\r\n\n",-1); else visabrev(atoi(hittaefter(brevread.reply)),atoi(brevread.reply)); } else if(senast_text_typ==TEXT) { motpek=getmotpek(senast_text_mote); if(motpek->type==MOTE_ORGINAL) { if(readhead.kom_till_nr==-1) puttekn("\r\n\nTexten är inte någon kommentar!\r\n\n",-1); else if(readhead.kom_till_nr<Servermem->info.lowtext) puttekn("\r\n\nTexten finns inte!\r\n\n",-1); else org_visatext(readhead.kom_till_nr, FALSE); } else if(motpek->type==MOTE_FIDO) puttekn("\n\n\rÅterse Kommenterade kan inte användas på Fido-texter\n\r",-1); } else puttekn("\r\n\nDu har inte läst någon text ännu!\r\n\n",-1); }
void listaarende(void) { char *nextarg=argument,namn[50],kom[10]; int x,dir=-1,from=-1,baratexter=FALSE; struct Mote *motpek; struct Header lahead; struct tm *ts; if(mote2==-1) { sprintf(outbuffer,"\n\n\rAnvänd 'Lista Brev' i %s\n\r",Servermem->cfg.brevnamn); puttekn(outbuffer,-1); return; } while(nextarg[0]) { if(nextarg[0]=='-') { if(nextarg[1]=='t' || nextarg[1]=='T') baratexter=TRUE; else if(nextarg[1]=='f' || nextarg[1]=='F') { dir=1; if(from<0) from=-2; } } else if(isdigit(nextarg[0])) from=atoi(nextarg); nextarg=hittaefter(nextarg); } motpek=getmotpek(mote2); if(motpek->type==MOTE_FIDO) { fidolistaarende(motpek,dir); return; } puttekn("\r\n\nNamn Text Kom Datum Ärende",-1); puttekn("\r\n-------------------------------------------------------------------------\r\n",-1); if(from==-1) from=Servermem->info.hightext; else if(from==-2) from=Servermem->info.lowtext; for(x=from;x>=Servermem->info.lowtext && x<=Servermem->info.hightext;x+=dir) { if(Servermem->texts[x%MAXTEXTS]!=mote2) continue; if(readtexthead(x,&lahead)) return; if(lahead.kom_till_nr!=-1 && baratexter) continue; strcpy(namn,getusername(lahead.person)); lahead.arende[22]=0; ts=localtime(&lahead.tid); if(lahead.kom_till_nr==-1) strcpy(kom," -"); else sprintf(kom,"%d",lahead.kom_till_nr); sprintf(outbuffer,"%-34s%6d %6s %02d%02d%02d %s\r\n",namn,lahead.nummer,kom,ts->tm_year,ts->tm_mon+1,ts->tm_mday,lahead.arende); if(puttekn(outbuffer,-1)) return; } }
int skriv(void) { struct Mote *motpek; if(mote2==-1) { sprintf(outbuffer,"\r\n\nAnvänd kommandot 'Brev' i %s.\r\n",Servermem->cfg.brevnamn); puttekn(outbuffer,-1); return(0); } motpek=getmotpek(mote2); if(!motpek) { puttekn("\n\n\rHmm.. Mötet du befinner dig i finns inte.\n\r",-1); return(0); } if(!MayWriteConf(motpek->nummer, inloggad, &Servermem->inne[nodnr])) { puttekn("\r\n\nDu får inte skriva i det här mötet!\r\n\n",-1); return(0); } if(motpek->type==MOTE_ORGINAL) return(org_skriv()); else if(motpek->type==MOTE_FIDO) return(fido_skriv(EJKOM,0)); return(0); }
void varmote(int mote) { int cnt; struct Mote *conf; conf = getmotpek(mote); SendStringCat("\r\n\n%s\r\n", CATSTR(MSG_WHERE_YOU_ARE_IN), conf->namn); if(conf->type == MOTE_FIDO) { if(conf->lowtext > conf->texter) { SendString("%s\r\n", CATSTR(MSG_WHERE_NO_TEXTS)); } else { SendStringCat("%s\r\n", CATSTR(MSG_WHERE_TEXTS_NUMBERED), conf->lowtext, conf->texter); } } cnt = countunread(mote); if(cnt == 0) { SendString("%s\r\n", CATSTR(MSG_WHERE_NO_UNREAD_TEXTS)); } else if(cnt == 1) { SendString("%s\r\n", CATSTR(MSG_WHERE_ONE_UNREAD_TEXT)); } else { SendStringCat("%s\r\n", CATSTR(MSG_WHERE_MANY_UNREAD_TEXTS), cnt); } }
void radtext(void) { int nummer; struct Header radhead; struct Mote *motpek; nummer = atoi(argument); motpek=getmotpek(Servermem->texts[nummer%MAXTEXTS]); if(motpek->type != MOTE_ORGINAL) { puttekn("\n\n\rDu kan bara radera texter i interna möten.\n\n\r",-1); return; } if(nummer < Servermem->info.lowtext || nummer > Servermem->info.hightext) { puttekn("\r\n\nTexten finns inte!\r\n\n",-1); return; } if(readtexthead(nummer,&radhead)) return; if(radhead.person!=inloggad && !MayAdminConf(motpek->nummer, inloggad, &Servermem->inne[nodnr])) { puttekn("\r\n\nDu kan bara radera texter av dig själv!\r\n\n",-1); return; } writetextmot(nummer,-1); }
int hasUnreadInConf(int confId) { struct Mote *conf; if(confId == MAILBOX_CONFID) { return HasUnreadMail(); } if(!IsMemberConf(confId, inloggad, &Servermem->inne[nodnr])) { return 0; } if((conf = getmotpek(confId)) == NULL) { LogEvent(SYSTEM_LOG, ERROR, "Can't find struct for confId %d in hasUnreadConf()", confId); return 0; } switch(conf->type) { case MOTE_ORGINAL: return HasUnreadInOrgConf(confId); case MOTE_FIDO: return HasUnreadInFidoConf(conf); default: LogEvent(SYSTEM_LOG, ERROR, "Undefined type %d for conf %d in hasUnreadConf()", conf->type, confId); } return 0; }
void Cmd_Read(void) { int textId; struct Mote *conf; char verbose = FALSE, *flag; if(argument[0] == '\0') { SendString("\r\n\nSkriv: Läsa <textnr>\r\n"); return; } textId = parseTextNumber(argument, mote2 == -1 ? BREV : 0); if(textId == -1) { SendString("\r\n\nFinns ingen sådan text.\r\n"); return; } flag = hittaefter(argument); if(flag[0] == '-' && (flag[1] == 'v' || flag[1] == 'V')) { verbose = TRUE; } if(mote2 == -1) { brev_lasa(textId); } else { conf = getmotpek(mote2); if(conf == NULL) { LogEvent(SYSTEM_LOG, ERROR, "Can't find conference %d in memory in Cmd_Read().", mote2); DisplayInternalError(); return; } if(conf->type == MOTE_ORGINAL) { org_lasa(textId, verbose); } else if(conf->type == MOTE_FIDO) { fido_lasa(textId,conf); } } }
void vilka(void) { int x,verbose=FALSE; long timenow, idle; struct Mote *motpek; char namn[50],bps[15]; if(argument[0]) { if(argument[0] == '-' && (argument[1] == 'v' || argument[1] == 'V')) verbose = TRUE; } puttekn("\r\n\n",-1); timenow = time(NULL); for(x=0;x<MAXNOD;x++) { if(!Servermem->nodtyp[x]) continue; if(Servermem->inloggad[x] == -1) strcpy(namn,"<Ingen inloggad>"); else if(Servermem->inloggad[x] == -2) strcpy(namn,"<Uppringd>"); else strcpy(namn,getusername(Servermem->inloggad[x])); if(Servermem->nodtyp[x]==NODCON) sprintf(outbuffer,"Nod #%-2d CON %-20s %s\n\r",x,Servermem->nodid[x],namn); else if(Servermem->nodtyp[x]==NODSER) sprintf(outbuffer,"Nod #%-2d SER %-20s %s\n\r",x,Servermem->nodid[x],namn); else sprintf(outbuffer,"Nod #%-2d FOO %-20s %s\n\r",x,Servermem->nodid[x],namn); puttekn(outbuffer,-1); if(!verbose) continue; idle = timenow - Servermem->idletime[x]; if(Servermem->inloggad[x] == -1 || Servermem->inloggad[x] == -2) { /* eka('\n'); continue; */ if(Servermem->inloggad[x] == -2) sprintf(bps,"Bps: %-7d%15d:%02d %c\r\n\n",Servermem->connectbps[x],idle/3600,(idle%3600)/60,Servermem->say[x] ? '*' : ' '); else sprintf(bps,"Bps: - %15d:%02d %c\r\n\n",idle/3600,(idle%3600)/60,Servermem->say[x] ? '*' : ' '); puttekn(bps,-1); continue; } if(Servermem->nodtyp[x]==NODCON) sprintf(bps,"Bps: - %15d:%02d %c",idle/3600,(idle%3600)/60,Servermem->say[x] ? '*' : ' '); else sprintf(bps,"Bps: %-7d%15d:%02d %c",Servermem->connectbps[x],idle/3600,(idle%3600)/60,Servermem->say[x] ? '*' : ' '); switch(Servermem->action[x]) { case INGET : sprintf(outbuffer,"%-32s Har inga olästa texter\r\n\n",bps); break; case SKRIVER : if(Servermem->varmote[x]!=-1) { motpek=getmotpek(Servermem->varmote[x]); if(!motpek) continue; if(!MaySeeConf(motpek->nummer, inloggad, &Servermem->inne[nodnr])) sprintf(outbuffer,"%-32s Skriver en text\r\n\n",bps); else sprintf(outbuffer,"%-32s Skriver i %s\r\n\n",bps,motpek->namn); } else sprintf(outbuffer,"%-32s Skriver ett brev\r\n\n",bps); break; case LASER : if(Servermem->varmote[x]!=-1) { motpek=getmotpek(Servermem->varmote[x]); if(!motpek) continue; if(!MaySeeConf(motpek->nummer, inloggad, &Servermem->inne[nodnr])) sprintf(outbuffer,"%-32s Läser texter\r\n",bps); else sprintf(outbuffer,"%-32s Läser i %s\r\n",bps,motpek->namn); } else sprintf(outbuffer,"%-32s Läser i %s\r\n",bps,Servermem->cfg.brevnamn); break; case GORNGTANNAT : sprintf(outbuffer,"%-32s %s\r\n",bps,Servermem->vilkastr[x]); break; case UPLOAD : if(!Servermem->areor[Servermem->varmote[x]].namn[0] || !arearatt(Servermem->varmote[x], inloggad, &Servermem->inne[nodnr])) sprintf(outbuffer,"%-32s Laddar upp\r\n",bps); else { if(Servermem->vilkastr[x]) sprintf(outbuffer,"%-32s Laddar upp %s\r\n",bps,Servermem->vilkastr[x]); else sprintf(outbuffer,"%-32s Ska strax ladda upp en fil\r\n",bps); } break; case DOWNLOAD : if(!Servermem->areor[Servermem->varmote[x]].namn[0] || !arearatt(Servermem->varmote[x], inloggad, &Servermem->inne[nodnr])) sprintf(outbuffer,"%-32s Laddar ner\r\n",bps); else { if(Servermem->vilkastr[x]) sprintf(outbuffer,"%-32s Laddar ner %s\r\n",bps,Servermem->vilkastr[x]); else sprintf(outbuffer,"%-32s Ska strax ladda ner en fil\r\n",bps); } break; default : sprintf(outbuffer,"%-32s <Gör något odefinierat>\r\n",bps); break; } if(Servermem->CallerID[x]) { strcat(outbuffer, Servermem->CallerID[x]); strcat(outbuffer, "\r\n"); } strcat(outbuffer, "\n"); puttekn(outbuffer,-1); } }
int andmot(void) { int motnr,going=TRUE,tillf,chng=FALSE,y,mad,clearmed,setratt,changed,x; struct ShortUser *userletpek; struct FidoDomain *domain; struct User skuser; struct Mote tempmote,*motpek; char tkn; if((motnr=parsemot(argument))==-1) { puttekn("\r\n\nFinns inget möte som heter så!\r\n\n",-1); return(0); } else if(motnr==-3) { puttekn("\r\n\nSkriv: Ändra Möte <mötesnamn>\r\n\n",-1); return(0); } motpek=getmotpek(motnr); if(!MayAdminConf(motnr, inloggad, &Servermem->inne[nodnr])) { puttekn("\r\n\nDu har ingen rätt att ändra på det mötet!\r\n\n",-1); return(0); } memcpy(&tempmote,motpek,sizeof(struct Mote)); while(going) { sprintf(outbuffer,"\r\nNamn : (%s) ",tempmote.namn); puttekn(outbuffer,-1); if(getstring(EKO,40,NULL)) return(1); if(inmat[0]) { if((tillf=parsemot(inmat))!=-1 && tillf!=motnr) puttekn("\r\n\nMötet finns redan!\r\n",-1); else { strncpy(tempmote.namn,inmat,40); tempmote.namn[40] = 0; going=FALSE; } } else going=FALSE; } sprintf(outbuffer,"\r\nMAD (%s) ",getusername(tempmote.mad)); puttekn(outbuffer,-1); if(getstring(EKO,40,NULL)) return(1); if(inmat[0]) { if((mad=parsenamn(inmat))==-1) puttekn("\r\nFinns ingen sådan användare!",-1); else tempmote.mad=mad; } sprintf(outbuffer,"\r\nSorteringsvärde : (%d) ",tempmote.sortpri); puttekn(outbuffer,-1); if(getstring(EKO,10,NULL)) return(1); if(inmat[0]) { tillf=atoi(inmat); if(tillf<0 || tillf>LONG_MAX) { sprintf(outbuffer,"\n\rVärdet måste ligga mellan 0 och %d",LONG_MAX); puttekn(outbuffer,-1); } else tempmote.sortpri=tillf; } puttekn("\r\nSka mötet vara slutet? ",-1); if(!jaellernej('j','n',tempmote.status & SLUTET ? 1 : 2)) { puttekn("Öppet",-1); if(tempmote.status & SLUTET) { chng=TRUE; tempmote.status &= ~SLUTET; } } else { puttekn("Slutet",-1); if(!(tempmote.status & SLUTET)) { chng=TRUE; tempmote.status |= SLUTET; } puttekn("\r\nVilka grupper ska ha tillgång till mötet? (? för lista)\r\n",-1); if(editgrupp((char *)&tempmote.grupper)) return(1); } puttekn("\r\nSka mötet vara skrivskyddat? ",-1); if(!jaellernej('j','n',tempmote.status & SKRIVSKYDD ? 1 : 2)) { puttekn("Oskyddat",-1); tempmote.status &= ~SKRIVSKYDD; } else { tempmote.status |= SKRIVSKYDD; puttekn("Skyddat",-1); } puttekn("\r\nSka mötet vara kommentarsskyddat? ",-1); if(!jaellernej('j','n',tempmote.status & KOMSKYDD ? 1 : 2)) { puttekn("Oskyddat",-1); tempmote.status &= ~KOMSKYDD; } else { tempmote.status |= KOMSKYDD; puttekn("Skyddat",-1); } puttekn("\r\nSka mötet vara hemligt? ",-1); if(!jaellernej('j','n',tempmote.status & HEMLIGT ? 1 : 2)) { puttekn("Ej hemligt",-1); tempmote.status &= ~HEMLIGT; } else { tempmote.status |= HEMLIGT; puttekn("Hemligt",-1); } if(!(tempmote.status & SLUTET)) { puttekn("\n\rSka alla användare bli medlemmar automagiskt? ",-1); if(!jaellernej('j','n',tempmote.status & AUTOMEDLEM ? 1 : 2)) { puttekn("Nej",-1); if(tempmote.status & AUTOMEDLEM) { chng=TRUE; tempmote.status &= ~AUTOMEDLEM; } } else { puttekn("Ja",-1); tempmote.status |= AUTOMEDLEM; } puttekn("\r\nSka rättigheterna styra skrivmöjlighet? ",-1); if(!jaellernej('j','n',tempmote.status & SKRIVSTYRT ? 1 : 2)) { puttekn("Nej",-1); if(tempmote.status & SKRIVSTYRT) chng=TRUE; tempmote.status &= ~SKRIVSTYRT; } else { puttekn("Ja",-1); if(!(tempmote.status & SKRIVSTYRT)) chng=TRUE; tempmote.status |= SKRIVSTYRT; puttekn("\r\nVilka grupper ska ha tillgång till mötet? (? för lista)\r\n",-1); if(editgrupp((char *)&tempmote.grupper)) return(1); } } else tempmote.status &= ~(AUTOMEDLEM | SKRIVSTYRT); puttekn("\r\nSka mötet bara vara åtkomligt från ARexx? ",-1); if(!jaellernej('j','n',tempmote.status & SUPERHEMLIGT ? 1 : 2)) { puttekn("Nej",-1); tempmote.status &= ~SUPERHEMLIGT; } else { tempmote.status |= SUPERHEMLIGT; puttekn("Ja",-1); } if(tempmote.type == MOTE_FIDO) { sprintf(outbuffer,"\n\rKatalog: (%s) ",tempmote.dir); puttekn(outbuffer,-1); getstring(EKO,79,NULL); if(inmat[0]) strcpy(tempmote.dir,inmat); sprintf(outbuffer,"\n\rTag-namn: (%s) ",tempmote.tagnamn); puttekn(outbuffer,-1); getstring(EKO,49,NULL); if(inmat[0]) strcpy(tempmote.tagnamn,inmat); sprintf(outbuffer,"\n\rOrigin: (%s) ",tempmote.origin); puttekn(outbuffer,-1); getstring(EKO,69,NULL); if(inmat[0]) strcpy(tempmote.origin,inmat); sprintf(outbuffer,"\n\n\r%c1: ISO Latin 1 (ISO 8859-1)\n\r",tempmote.charset==CHRS_LATIN1 ? '*' : ' '); puttekn(outbuffer,-1); sprintf(outbuffer,"%c2: SIS-7 (SF7, 'Måsvingar')\n\r",tempmote.charset==CHRS_SIS7 ? '*' : ' '); puttekn(outbuffer,-1); sprintf(outbuffer,"%c3: IBM CodePage\n\r",tempmote.charset==CHRS_CP437 ? '*' : ' '); puttekn(outbuffer,-1); sprintf(outbuffer,"%c4: Mac\n\n\r",tempmote.charset==CHRS_MAC ? '*' : ' '); puttekn(outbuffer,-1); puttekn("Val: ",-1); for(;;) { tkn=gettekn(); if(tkn=='1' || tkn=='2' || tkn=='3' || tkn=='4' || tkn=='\r') break; } switch(tkn) { case '1' : tempmote.charset = CHRS_LATIN1; break; case '2' : tempmote.charset = CHRS_SIS7; break; case '3' : tempmote.charset = CHRS_CP437; break; case '4' : tempmote.charset = CHRS_MAC; break; default: break; } puttekn("\n\n\r",-1); for(x=0;x<10;x++) { if(!Servermem->fidodata.fd[x].domain[0]) break; sprintf(outbuffer,"%c%3d: %s (%d:%d/%d.%d)\n\r",tempmote.domain == Servermem->fidodata.fd[x].nummer ? '*' : ' ', Servermem->fidodata.fd[x].nummer, Servermem->fidodata.fd[x].domain, Servermem->fidodata.fd[x].zone, Servermem->fidodata.fd[x].net, Servermem->fidodata.fd[x].node, Servermem->fidodata.fd[x].point); puttekn(outbuffer,-1); } if(!x) { puttekn("\n\rDu måste definiera en domän i NiKomFido.cfg först!\n\r",-1); return(0); } for(;;) { if(getstring(EKO,10,NULL)) return(1); if(!inmat[0]) break; if(domain=getfidodomain(atoi(inmat),0)) { tempmote.domain=domain->nummer; break; } else puttekn("\n\rFinns ingen sådan domän.\n\r",-1); } } puttekn("\r\n\nÄr allt korrekt? ",-1); if(jaellernej('j','n',1)) puttekn("Ja\n\n\r",-1); else { puttekn("Nej\r\n\n",-1); return(0); } if(chng) { puttekn("Users.dat kommer nu att gås igenom för att nollställa medlemskap\n\r",-1); puttekn("och rättigheter som om mötet var nyskapat.\n\n\r",-1); puttekn("Är ändringarna fortfarande korrekta? ",-1); if(!jaellernej('j','n',1)) { puttekn("Nej\n\r",-1); return(0); } puttekn("Ja\n\r",-1); } memcpy(motpek,&tempmote,sizeof(struct Mote)); writemeet(motpek); if(!chng) return(0); if((tempmote.status & AUTOMEDLEM) && !(tempmote.status & SKRIVSTYRT)) return(0); if(tempmote.status & SUPERHEMLIGT) return(0); if(tempmote.status & AUTOMEDLEM) clearmed=FALSE; else clearmed=TRUE; if(tempmote.status & (SLUTET | SKRIVSTYRT)) setratt=FALSE; else setratt=TRUE; for(y=0;y<MAXNOD;y++) { BAMCLEAR(Servermem->inne[y].motmed,tempmote.nummer); if(setratt) BAMSET(Servermem->inne[y].motratt,tempmote.nummer); else BAMCLEAR(Servermem->inne[y].motratt,tempmote.nummer); } puttekn("\r\nÄndrar i Users.dat..\r\n",-1); for(userletpek=(struct ShortUser *)Servermem->user_list.mlh_Head;userletpek->user_node.mln_Succ;userletpek=(struct ShortUser *)userletpek->user_node.mln_Succ) { if(!(userletpek->nummer%10)) { sprintf(outbuffer,"\r%d",userletpek->nummer); puttekn(outbuffer,-1); } if(readuser(userletpek->nummer,&skuser)) return(0); changed=FALSE; if(setratt!=BAMTEST(skuser.motratt,tempmote.nummer)) { if(setratt) BAMSET(skuser.motratt,tempmote.nummer); else BAMCLEAR(skuser.motratt,tempmote.nummer); changed=TRUE; } if(clearmed && BAMTEST(skuser.motmed,tempmote.nummer)) { BAMCLEAR(skuser.motmed,tempmote.nummer); changed=TRUE; } if(changed && writeuser(userletpek->nummer,&skuser)) return(0); } for(y=0;y<MAXNOD;y++) { BAMCLEAR(Servermem->inne[y].motmed,tempmote.nummer); if(setratt) BAMSET(Servermem->inne[y].motratt,tempmote.nummer); else BAMCLEAR(Servermem->inne[y].motratt,tempmote.nummer); } BAMSET(Servermem->inne[nodnr].motratt,tempmote.nummer); BAMSET(Servermem->inne[nodnr].motmed,tempmote.nummer); return(0); }
int skapmot(void) { struct ShortUser *shortUser; int mad, setPermission, changed, ch, i, fidoDomainId, highestId; struct FidoDomain *fidoDomain; BPTR lock; struct User user; struct Mote tmpConf,*searchConf,*newConf; memset(&tmpConf, 0, sizeof(struct Mote)); if(argument[0] == '\0') { SendString("\r\n\nNamn på mötet: "); if(GetString(40,NULL)) { return 1; } strcpy(tmpConf.namn, inmat); } else { strcpy(tmpConf.namn, argument); } if(parsemot(tmpConf.namn) != -1) { SendString("\r\n\nFinns redan ett sådant möte!\r\n"); return 0; } tmpConf.skapat_tid = time(NULL);; tmpConf.skapat_av = inloggad; for(;;) { SendString("\r\nMötesAdministratör (MAD) : "); if(GetString(5,NULL)) { return 1; } if(inmat[0]) { if((mad = parsenamn(inmat)) == -1) { SendString("\r\nFinns ingen sådan användare!"); } else { tmpConf.mad = mad; break; } } } SendString("\n\rSorteringsvärde: "); tmpConf.sortpri = GetNumber(0, LONG_MAX, NULL); if(EditBitFlagShort("\r\nSka mötet vara slutet?", 'j', 'n', "Slutet", "Öppet", &tmpConf.status, SLUTET)) { return 1; } if(tmpConf.status & SLUTET) { SendString("\r\nVilka grupper ska ha tillgång till mötet? (? för lista)\r\n"); if(editgrupp((char *)&tmpConf.grupper)) { return 1; } } if(EditBitFlagShort("\r\nSka mötet vara skrivskyddat?", 'j', 'n', "Skyddat", "Oskyddat", &tmpConf.status, SKRIVSKYDD)) { return 1; } if(EditBitFlagShort("\r\nSka mötet vara kommentarsskyddat?", 'j', 'n', "Skyddat", "Oskyddat", &tmpConf.status, KOMSKYDD)) { return 1; } if(EditBitFlagShort("\r\nSka mötet vara hemligt?", 'j', 'n', "Hemligt", "Ej hemligt", &tmpConf.status, HEMLIGT)) { return 1; } if(!(tmpConf.status & SLUTET)) { if(EditBitFlagShort("\r\nSka alla användare bli medlemmar automagiskt?", 'j', 'n', "Ja", "Nej", &tmpConf.status, AUTOMEDLEM)) { return 1; } if(EditBitFlagShort("\r\nSka rättigheterna styra skrivmöjlighet?", 'j', 'n', "Ja", "Nej", &tmpConf.status, SKRIVSTYRT)) { return 1; } if(tmpConf.status & SKRIVSTYRT) { SendString("\r\nVilka grupper ska ha tillgång till mötet? (? för lista)\r\n"); if(editgrupp((char *)&tmpConf.grupper)) { return 1; } } } if(EditBitFlagShort("\r\nSka mötet enbart kommas åt från ARexx?", 'j', 'n', "Ja", "Nej", &tmpConf.status, SUPERHEMLIGT)) { return 1; } SendString("\n\n\rVilken typ av möte ska det vara?\n\r"); SendString("1: Lokalt möte\n\r"); SendString("2: Fido-möte\n\n\r"); SendString("Val: "); for(;;) { ch = GetChar(); if(ch == GETCHAR_LOGOUT) { return 1; } if(ch == '1' || ch == '2') { break; } } if(ch == '1') { SendString("Lokalt möte\n\n\r"); tmpConf.type = MOTE_ORGINAL; } else { SendString("Fido-möte\n\n\r"); tmpConf.type = MOTE_FIDO; if(EditString("Katalog for .msg-filerna", tmpConf.dir, 79, TRUE)) { return 1; } if(!(lock = Lock(tmpConf.dir, SHARED_LOCK))) { if(!(lock = CreateDir(tmpConf.dir))) SendString("\n\rKunde inte skapa katalogen\n\r"); } if(lock) { UnLock(lock); } if(EditString("FidoNet tag-namn", tmpConf.tagnamn, 49, TRUE)) { return 1; } strcpy(tmpConf.origin, Servermem->fidodata.defaultorigin); if(MaybeEditString("Origin-rad", tmpConf.origin, 69)) { return 1; } SendString("\n\n\rVilken teckenuppsättning ska användas för utgående texter?\n\r"); SendString("1: ISO Latin 1 (ISO 8859-1)\n\r"); SendString("2: SIS-7 (SF7, 'Måsvingar')\n\r"); SendString("3: IBM CodePage\n\r"); SendString("4: Mac\n\n\r"); SendString("Val: "); for(;;) { ch = GetChar(); if(ch == GETCHAR_LOGOUT) { return 1; } if(ch == '1' || ch == '2' || ch == '3' || ch == '4') { break; } } switch(ch) { case '1': SendString("ISO Latin 1\n\n\r"); tmpConf.charset = CHRS_LATIN1; break; case '2': SendString("SIS-7\n\n\r"); tmpConf.charset = CHRS_SIS7; break; case '3': SendString("IBM CodePage\n\n\r"); tmpConf.charset = CHRS_CP437; break; case '4': SendString("Mac\n\n\r"); tmpConf.charset = CHRS_MAC; break; } SendString("Vilken domän är mötet i?\n\r"); highestId = 0; for(i = 0; i < 10; i++) { if(!Servermem->fidodata.fd[i].domain[0]) { break; } highestId = max(highestId, Servermem->fidodata.fd[i].nummer); SendString("%3d: %s (%d:%d/%d.%d)\n\r", Servermem->fidodata.fd[i].nummer, Servermem->fidodata.fd[i].domain, Servermem->fidodata.fd[i].zone, Servermem->fidodata.fd[i].net, Servermem->fidodata.fd[i].node, Servermem->fidodata.fd[i].point); } if(i == 0) { SendString("\n\rDu måste definiera en domän i NiKomFido.cfg först!\n\r"); return 0; } for(;;) { SendString("\r\nDomän: "); if(GetString(5, NULL)) { return 1; } fidoDomainId = atoi(inmat); if(fidoDomain = getfidodomain(fidoDomainId, 0)) { break; } else { SendString("\n\rFinns ingen sådan domän.\n\r"); } } tmpConf.domain = fidoDomain->nummer; SendString("%s\n\n\r", fidoDomain->domain); } for(i = 0; i < MAXMOTE; i++) { if(getmotpek(i) == NULL) { break; } } if(i >= MAXMOTE) { SendString("\n\n\rDet finns inte plats för fler möten.\n\r"); return 0; } tmpConf.nummer = i; if(!(newConf = (struct Mote *)AllocMem(sizeof(struct Mote), MEMF_CLEAR | MEMF_PUBLIC))) { LogEvent(SYSTEM_LOG, ERROR, "Could not allocate %d bytes.", sizeof(struct Mote)); DisplayInternalError(); return 0; } memcpy(newConf, &tmpConf, sizeof(struct Mote)); ITER_EL(searchConf, Servermem->mot_list, mot_node, struct Mote *) { if(searchConf->sortpri > newConf->sortpri) { break; } } searchConf = (struct Mote *)searchConf->mot_node.mln_Pred; Insert((struct List *)&Servermem->mot_list, (struct Node *)newConf, (struct Node *)searchConf); writemeet(newConf); if((newConf->status & AUTOMEDLEM) && !(newConf->status & SKRIVSTYRT)) { return 0; } if(newConf->status & SUPERHEMLIGT) { return 0; } setPermission = (newConf->status & (SLUTET | SKRIVSTYRT)) ? FALSE : TRUE; for(i = 0; i < MAXNOD; i++) { BAMCLEAR(Servermem->inne[i].motmed, newConf->nummer); if(setPermission) { BAMSET(Servermem->inne[i].motratt, newConf->nummer); } else { BAMCLEAR(Servermem->inne[i].motratt, newConf->nummer); } } SendString("\r\nÄndrar i användardata..\r\n"); ITER_EL(shortUser, Servermem->user_list, user_node, struct ShortUser *) { if(!(shortUser->nummer % 10)) { SendString("\r%d", shortUser->nummer); } if(readuser(shortUser->nummer, &user)) { LogEvent(SYSTEM_LOG, ERROR, "Could not read user %d to set " "membership/permissions for new conference.", shortUser->nummer); DisplayInternalError(); return 0; } changed = FALSE; if(setPermission != BAMTEST(user.motratt, newConf->nummer)) { if(setPermission) { BAMSET(user.motratt, newConf->nummer); } else { BAMCLEAR(user.motratt, newConf->nummer); } changed = TRUE; } if(!(newConf->status & AUTOMEDLEM) && BAMTEST(user.motmed, newConf->nummer)) { BAMCLEAR(user.motmed, newConf->nummer); changed = TRUE; } if(changed && writeuser(shortUser->nummer, &user)) { LogEvent(SYSTEM_LOG, ERROR, "Could not write user %d to set " "membership/permissions for new conference.", shortUser->nummer); DisplayInternalError(); return 0; } } for(i = 0; i < MAXNOD; i++) { BAMCLEAR(Servermem->inne[i].motmed, newConf->nummer); if(setPermission) { BAMSET(Servermem->inne[i].motratt, newConf->nummer); } else { BAMCLEAR(Servermem->inne[i].motratt, newConf->nummer); } } BAMSET(Servermem->inne[nodnr].motratt, newConf->nummer); BAMSET(Servermem->inne[nodnr].motmed, newConf->nummer); if(newConf->type == MOTE_FIDO) { ReScanFidoConf(newConf, 0); } return 0; }
char *getmotnamn(int motnr) { struct Mote *motpek=getmotpek(motnr); if(!motpek) return("<Okänt möte>"); return(motpek->namn); }
void Cmd_Reply(void) { struct Mote *conf; int isCorrect; if(argument[0]) { if(mote2 == -1) { brev_kommentera(); return; } conf = getmotpek(mote2); if(conf->type == MOTE_ORGINAL) { org_kommentera(); return; } if(conf->type == MOTE_FIDO) { if(!MayReplyConf(mote2, inloggad, &Servermem->inne[nodnr])) { SendString("\r\n\nDu får inte kommentera den texten!\r\n\n"); return; } if(conf->status & KOMSKYDD) { if(GetYesOrNo("\r\n\n", "Vill du verkligen kommentera i ett kommentarsskyddat möte?", NULL, NULL, "Ja", "Nej", "\r\n", FALSE, &isCorrect)) { return; } if(!isCorrect) { return; } } fido_skriv(TEXTTYPE_REPLY, atoi(argument)); return; } } if(!senast_text_typ) { SendString("\n\n\rDu har inte läst någon text ännu.\n\r"); return; } if(senast_text_typ == BREV) { brev_kommentera(); return; } conf = getmotpek(senast_text_mote); if(!conf) { LogEvent(SYSTEM_LOG, ERROR, "Conference for last read text (confId = %d) does not exist.", senast_text_mote); DisplayInternalError(); return; } if(!MayReplyConf(senast_text_mote, inloggad, &Servermem->inne[nodnr])) { SendString("\r\n\nDu får inte kommentera den texten!\r\n\n"); return; } if(conf->status & KOMSKYDD) { if(GetYesOrNo("\r\n\n", "Vill du verkligen kommentera i ett kommentarsskyddat möte?", NULL, NULL, "Ja", "Nej", "\r\n", FALSE, &isCorrect)) { return; } if(!isCorrect) { return; } } if(conf->type == MOTE_ORGINAL) { org_kommentera(); } else if(conf->type == MOTE_FIDO) { fido_skriv(TEXTTYPE_REPLY, senast_text_nr); } }