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); }
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 skaparea(void) { BPTR fh; long tid; char tempdir[101]; int going=TRUE,x,old=Servermem->info.areor,ret=0,y; for(x=0;x<MAXAREA;x++) { if(!Servermem->areor[x].namn[0]) break; } if(x==MAXAREA) { puttekn("\r\n\nFinns ej plats för fler areor!!\r\n",-1); return(0); } if(x==Servermem->info.areor) Servermem->info.areor++; memset(&Servermem->areor[x],0,sizeof(struct Area)); if(argument[0]==0) { puttekn("\r\n\nNamn på arean: ",-1); if(getstring(EKO,40,NULL)) { Servermem->info.areor=old; return(1); } if(parsearea(inmat)!=-1) { Servermem->info.areor=old; return(0); } strcpy(Servermem->areor[x].namn,inmat); } else strcpy(Servermem->areor[x].namn,argument); time(&tid); Servermem->areor[x].skapad_tid=tid; Servermem->areor[x].skapad_av=inloggad; Servermem->areor[x].filer=0; Servermem->areor[x].status=0; NewList((struct List *)&Servermem->areor[x].ar_list); while(going) { puttekn("\r\nTill vilket möte ska arean höra? (<RETURN> för inget) ",-1); if(getstring(EKO,40,NULL)) { Servermem->info.areor=old; Servermem->areor[x].namn[0]=0; return(1); } if((ret=parsemot(inmat))>=0) { Servermem->areor[x].mote=ret; sprintf(outbuffer,"\r\nKopplar arean till mötet %s",getmotnamn(ret)); puttekn(outbuffer,-1); going=FALSE; } else if(ret==-3) { Servermem->areor[x].mote=-1; going=FALSE; } else puttekn("\r\nFinns inget sådant möte!",-1); } puttekn("\n\rSka uploads till arean tillåtas? ",-1); if(!jaellernej('j','n',1)) { Servermem->areor[x].flaggor |= AREA_NOUPLOAD; puttekn("Nej",-1); } else puttekn("Ja",-1); puttekn("\n\rSka downloads från arean tillåtas? ",-1); if(!jaellernej('j','n',1)) { Servermem->areor[x].flaggor |= AREA_NODOWNLOAD; puttekn("Nej",-1); } else puttekn("Ja",-1); puttekn("\r\nVilka grupper ska ha tillgång till arean? (? för lista)\r\n",-1); Servermem->areor[x].grupper=0L; if(editgrupp((char *)&Servermem->areor[x].grupper)) { Servermem->info.areor=old; Servermem->areor[x].namn[0]=0; return(1); } puttekn("\r\nTill vilka directoryn ska arean höra?",-1); for(y=0;y<16;y++) Servermem->areor[x].dir[y][0]=0; for(y=0;y<16;y++) { while(!Servermem->areor[x].dir[y][0]) { sprintf(outbuffer,"\r\nDirectory %d: ",y+1); puttekn(outbuffer,-1); inmat[0] = 0; if(getstring(EKO,39,NULL)) { Servermem->info.areor=old; return(1); } if(!inmat[0]) break; ret=strlen(inmat); if(inmat[ret-1]!='/' && inmat[ret-1]!=':') { inmat[ret]='/'; inmat[ret+1]=0; } strcpy(Servermem->areor[x].dir[y],inmat); strcpy(tempdir, inmat); tempdir[strlen(tempdir)-1] = 0; if(mkdir(tempdir)) { Servermem->areor[x].dir[y][0] = 0; puttekn("\r\nKunde inte skapa biblioteket!", -1); } } if(!inmat[0]) break; sprintf(tempdir,"%slongdesc",Servermem->areor[x].dir[y]); mkdir(tempdir); puttekn("\r\nNycklar till directoryt.\r\n",-1); editkey(Servermem->areor[x].nycklar[y]); } NiKForbid(); if(!(fh=Open("NiKom:DatoCfg/Areor.dat",MODE_OLDFILE))) { puttekn("\r\n\nKunde inte öppna Areor.dat\r\n",-1); Servermem->info.areor=old; Servermem->areor[x].namn[0]=0; NiKPermit(); return(0); } if(Write(fh,(void *)Servermem->areor,sizeof(struct Area)*Servermem->info.areor)==-1) { puttekn("\r\n\nFel vid skrivandet av Möten.dat\r\n",-1); Servermem->info.areor=old; Servermem->areor[x].namn[0]=0; } Close(fh); NiKPermit(); return(0); }
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; }
ITER_EL(conf, Servermem->mot_list, mot_node, struct Mote *) { if(MayBeMemberConf(conf->nummer, inloggad, &Servermem->inne[nodnr]) && !IsMemberConf(conf->nummer, inloggad, &Servermem->inne[nodnr])) { BAMSET(Servermem->inne[nodnr].motmed, conf->nummer); if(conf->type == MOTE_ORGINAL) { unreadTexts->lowestPossibleUnreadText[conf->nummer] = 0; } else if(conf->type == MOTE_FIDO) { unreadTexts->lowestPossibleUnreadText[conf->nummer] = conf->lowtext; } } } return; } confId = parsemot(args); if(confId == -3) { SendString("\r\n\nSkriv: Medlem <mötesnamn>\r\neller: Medlem -a för att bli med i alla möten.\r\n\n"); return; } if(confId == -1) { SendString("\r\n\nFinns inget sådant möte!\r\n\n"); return; } if(!MayBeMemberConf(confId, inloggad, &Servermem->inne[nodnr])) { SendString("\r\n\nDu har inte rätt att vara med i det mötet!\r\n\n"); return; } BAMSET(Servermem->inne[nodnr].motmed, confId); SendString("\r\n\nDu är nu med i mötet %s.\r\n\n", getmotnamn(confId)); conf = getmotpek(confId);