unsigned long get_new_mail_number(const char *name) { long a; user_t *user; user = readuser(name); if (!user) { mono_errno = E_NOUSER; return -1; } user->mailnum++; a = user->mailnum; if (writeuser(user, 0) == -1) { xfree(user); return -1; } xfree(user); if (mono_return_pid(name) != -1) { if ((kill(mono_return_pid(name), SIGUSR2)) == -1) { return -1; } } return a; }
void SaveCurrentUser(int inloggad, int nodnr) { long tid; time(&tid); Servermem->inne[nodnr].senast_in=tid; writeuser(inloggad,&Servermem->inne[nodnr]); WriteUnreadTexts(&Servermem->unreadTexts[nodnr], inloggad); }
int change_QL(unsigned int quad_num, const char *QLname, int how) { user_t *QL; int i, has_ql_flag; if ( quad_num > MAXQUADS) { mono_errno = E_NOQUAD; return -1; } if (mono_sql_u_check_user(QLname) == FALSE && how == 1) { mono_errno = E_NOUSER; return -1; } if ((QL = readuser(QLname)) == NULL) return -1; if (how > 0) { for (i = 0; i < 5; i++) { /* if we're already marked */ if (QL->RA_rooms[i] == quad_num) break; mono_sql_uf_add_host(QL->usernum, quad_num); if (QL->RA_rooms[i] < 0) { QL->RA_rooms[i] = quad_num; break; } } QL->flags |= US_ROOMAIDE; } else { has_ql_flag = 0; mono_sql_uf_remove_host(QL->usernum, quad_num); for (i = 0; i < 5; i++) { if (QL->RA_rooms[i] == quad_num) QL->RA_rooms[i] = -1; if (QL->RA_rooms[i] > 0) has_ql_flag++; } if (has_ql_flag == 0) QL->flags &= ~US_ROOMAIDE; else QL->flags |= US_ROOMAIDE; } if (writeuser(QL, 0) != 0) { xfree(QL); return -1; } xfree(QL); if (mono_return_pid(QLname) != -1) (void) kill(mono_return_pid(QLname), SIGUSR2); return 0; }
void SaveCurrentUser(int inloggad, int nodnr) { long tid; time(&tid); Servermem->inne[nodnr].senast_in=tid; writeuser(inloggad,&Servermem->inne[nodnr]); writeuserbitmap(inloggad,Servermem->bitmaps[nodnr],0,temppek); SaveProgramCategory(inloggad); }
void usergoto(int new_rm, int old_rm, int destructive_jump) { /* used by <G>oto and <j>ump - actually does the work */ room_t here; curr_rm = new_rm; here = readquad(curr_rm); gotocurr(); if (old_rm != curr_rm) { if (here.highest <= usersupp->lastseen[curr_rm]) { skipping[curr_rm] = 0; usersupp->lastseen[curr_rm] = here.highest; mono_sql_ut_update_lastseen(usersupp->usernum, curr_rm, here.highest); display_short_prompt(); cprintf(_("\1f\1w(\1g%ld messages\1w)\1a\n"), here.highest - here.lowest ); } else { if (usersupp->lastseen[curr_rm] < here.lowest) { usersupp->lastseen[curr_rm] = here.lowest; mono_sql_ut_update_lastseen(usersupp->usernum, curr_rm, here.lowest); } if (curr_rm && !skipping[curr_rm]) /* looks ugly at Docking Bay, don't bother */ cprintf(_("\1f\1gRead next %s with unread messages.\n"), config.forum ); display_short_prompt(); if (skipping[curr_rm]) { cprintf(_("\1f\1w (\1gpreviously skipped\1w)")); skipping[curr_rm] = 0; } cprintf(_("\n\1f\1w(\1g%ld messages, %ld unread\1w)\1g Read new messages.\1a\n"), here.highest - here.lowest, here.highest - usersupp->lastseen[curr_rm] ); } if (new_quadinfo()) { cprintf(_("\1f\1b*** \1gThe %s\1w<\1rI\1w>\1gnfo has changed\1b ***\1a\n"), config.forum); writeuser(usersupp, 0); } } if ((skipping[old_rm] != 1) && (destructive_jump)) mark_as_read(old_rm); usersupp->forget[curr_rm] = (-1); if (usersupp->generation[curr_rm] != quickroom.generation) { /* print the desc if the room has regenerated. */ display_message(curr_rm, 0, DISPLAY_INFO); usersupp->generation[curr_rm] = quickroom.generation; } unseen = here.maxmsg - (here.highest - usersupp->lastseen[curr_rm]); if (here.highest == usersupp->lastseen[curr_rm]) skipping[curr_rm] = 0; return; }
/************************************************* * kickout() * returns 1 on successfull kickout *************************************************/ int kickout(const char *user, unsigned int room) { user_t *userP; room_t scratch; if (mono_sql_u_check_user(user) == FALSE) { mono_errno = E_NOUSER; return -1; } if ( room > MAXQUADS ) { mono_errno = E_NOQUAD; return -1; } read_forum( room, &scratch ); userP = readuser(user); if (!userP) { mono_errno = E_NOUSER; return -1; } if (userP->priv & PRIV_WIZARD) { xfree(userP); return -1; } if (userP->generation[room] == (-5)) { xfree(userP); return -1; } userP->generation[room] = (-5); userP->forget[room] = scratch.generation; mono_sql_uf_add_kicked( room, userP->usernum ); if (writeuser(userP, 0) != 0) { xfree(userP); return -1; } if (mono_return_pid(user) != -1) (void) kill(mono_return_pid(user), SIGUSR2); /* READSELF-signal */ (void) log_it("rooms", "kicked %s out of %s>", userP->username, scratch.name); xfree(userP); return 1; }
void forget() { if (quickroom.flags & QR_NOZAP) { cprintf("\1f\1rCan not zap (forget) this %s.\1a\n", config.forum); return; } cprintf("\1f\1gAre you \1rsure \1gyou want to zap (forget) this %s?\1c ", config.forum); if (yesno() == NO) return; /* the actual zapping: * backup the old generation number, so we get noticed if the room * changes to something completely new */ usersupp->forget[curr_rm] = quickroom.generation; usersupp->generation[curr_rm] = (-1); writeuser(usersupp, 0); gotonext(); }
int invite(const char *name, unsigned int room) { user_t *user; room_t scratch; if (mono_sql_u_check_user(name) == FALSE) return -1; if ( (room > MAXQUADS) ) return -1; user = readuser(name); if (user == NULL) return -1; read_forum( room, &scratch ); if (user->generation[room] == scratch.generation) { xfree(user); return -1; } user->generation[room] = scratch.generation; user->forget[room] = -1; mono_sql_uf_add_invited( room, user->usernum ); (void) writeuser(user, 0); if (mono_return_pid(name) != -1) (void) kill(mono_return_pid(name), SIGUSR2); (void) log_it("rooms", "someone invited %s to %s>", user->username, scratch.name); xfree(user); return 0; }
void zap_all() { int i; room_t room; cprintf("\1f\1gAre you \1rsure \1gyou want to zap (forget) \1rALL\1g %s? (y/N) \1c ", config.forum_pl); if (yesno_default(NO) == NO) return; for (i = 0; i < MAXQUADS; i++) { if (i == 1) continue; /* mail */ room = readquad(i); if (i_may_read_forum(i) && !(room.flags & QR_NOZAP)) { usersupp->forget[i] = room.generation; usersupp->generation[i] = -1; } } cprintf("\1g\1fZapped all quadrants.\n"); writeuser(usersupp, 0); return; }
int __saveds __asm LIBEditUser(register __d0 LONG usernumber, register __a0 struct TagItem *taglist, register __a6 struct NiKomBase *NiKomBase) { int i, userloggedin = -1, cacheduser = -1; ULONG tmp; struct User user; for(i=0;i<MAXNOD;i++) if(usernumber==NiKomBase->Servermem->inloggad[i]) break; if(i<MAXNOD) { memcpy(&user,&NiKomBase->Servermem->inne[i],sizeof(struct User)); userloggedin = i; } else { /* for(i=0;i<MAXUSERSCACHED;i++) if(NiKomBase->Servermem->UserCache[i].usernumber != -1) break; if(i<MAXUSERSCACHED) { memcpy(&user,&NiKomBase->Servermem->UserCache[i].Usercached,sizeof(struct User)); userloggedin = i; } else */ if(readuser(usernumber,&user)) return(-2); } if(GetTagData(US_Name,NULL,taglist)) if(parsenamn((char *)GetTagData(US_Name,NULL,taglist),NiKomBase) == -1) strcpy(user.namn,(char *)GetTagData(US_Name,NULL,taglist)); if(GetTagData(US_Street,NULL,taglist)) strcpy(user.gata,(char *)GetTagData(US_Street,NULL,taglist)); if(GetTagData(US_Address,NULL,taglist)) strcpy(user.postadress,(char *)GetTagData(US_Address,NULL,taglist)); if(GetTagData(US_Country,NULL,taglist)) strcpy(user.land,(char *)GetTagData(US_Country,NULL,taglist)); if(GetTagData(US_Phonenumber,NULL,taglist)) strcpy(user.telefon,(char *)GetTagData(US_Phonenumber,NULL,taglist)); if(GetTagData(US_OtherInfo,NULL,taglist)) strcpy(user.annan_info,(char *)GetTagData(US_OtherInfo,NULL,taglist)); if(GetTagData(US_Password,NULL,taglist)) strcpy(user.losen,(char *)GetTagData(US_Password,NULL,taglist)); if(GetTagData(US_Prompt,NULL,taglist)) strcpy(user.prompt,(char *)GetTagData(US_Prompt,NULL,taglist)); tmp = GetTagData(US_Status,-1L,taglist); if(tmp != -1L) user.status = tmp; tmp = GetTagData(US_Rader,-1L,taglist); if(tmp != -1L) user.rader = tmp; tmp = GetTagData(US_Protocol,-1L,taglist); if(tmp != -1L) user.protokoll = tmp; tmp = GetTagData(US_Tottid,-1L,taglist); if(tmp != -1L) user.tot_tid = tmp; tmp = GetTagData(US_FirstLogin,-1L,taglist); if(tmp != -1L) user.forst_in = tmp; tmp = GetTagData(US_LastLogin,-1L,taglist); if(tmp != -1L) user.senast_in = tmp; tmp = GetTagData(US_Read,-1L,taglist); if(tmp != -1L) user.read = tmp; GetTagData(US_Written,-1L,taglist); if(tmp != -1L) user.skrivit = tmp; tmp = GetTagData(US_Flags,-1L,taglist); if(tmp != -1L) user.flaggor = tmp; tmp = GetTagData(US_Defarea,-1L,taglist); if(tmp != -1L) user.defarea = tmp; tmp = GetTagData(US_Charset,-1L,taglist); if(tmp != -1L) user.chrset = tmp; tmp = GetTagData(US_Uploads,-1L,taglist); if(tmp != -1L) user.upload = tmp; tmp = GetTagData(US_Downloads,-1L,taglist); if(tmp != -1L) user.download = tmp; tmp = GetTagData(US_Loggin,-1L,taglist); if(tmp != -1L) user.loggin = tmp; tmp = GetTagData(US_Shell,-1L,taglist); if(tmp != -1L) user.shell = tmp; /* struct User { long tot_tid,forst_in,senast_in,read,skrivit,flaggor,textpek,brevpek, grupper,defarea,reserv2,chrset,reserv4,reserv5,upload,download, loggin,shell; char namn[41],gata[41],postadress[41],land[41],telefon[21], annan_info[61],losen[16],status,rader,protokoll, prompt[6],motratt[MAXMOTE/8],motmed[MAXMOTE/8],vote[MAXVOTE]; }; */ if(i<MAXNOD) memcpy(&NiKomBase->Servermem->inne[i],&user,sizeof(struct User)); else { if(writeuser(usernumber,&user)) return(-3); } return(usernumber); }
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); }
void main(int argc,char *argv[]) { int x; long tid; char tellstr[100],*tmppscreen, titel[80], configname[50] = "NiKom:DatoCfg/SerNode.cfg"; if(argc>1) for(x=1;x<argc;x++) { if(argv[x][0]=='-') { if(argv[x][1]=='B') dtespeed=atoi(&argv[x][2]); else if(argv[x][1]=='N') nodnr = atoi(&argv[x][2]); } else strcpy(configname,argv[x]); } if(nodnr==-1) { printf("NiKomSer måste startas från prenoden.\n"); exit(10); } NewList((struct List *)&aliaslist); NewList((struct List *)&edit_list); if(!(IntuitionBase=(struct IntuitionBase *)OpenLibrary("intuition.library",0))) cleanup(EXIT_ERROR,"Kunde inte öppna intuition.library\n"); if(!(UtilityBase=OpenLibrary("utility.library",37L))) cleanup(EXIT_ERROR,"Kunde inte öppna utility.library\n"); if(!(LocaleBase=OpenLibrary("locale.library",38L))) cleanup(EXIT_ERROR,"Kunde inte öppna locale.library\n"); if(!(NiKomBase=OpenLibrary("nikom.library",0L))) cleanup(EXIT_ERROR,"Kunde inte öppna nikom.library\n"); initnode(NODSPAWNED); if(!(nikomnodeport = CreateMsgPort())) cleanup(EXIT_ERROR,"Kunde inte skapa NiKomNode-porten"); sprintf(nikomnodeportnamn,"NiKomNode%d",nodnr); nikomnodeport->mp_Node.ln_Name = nikomnodeportnamn; nikomnodeport->mp_Node.ln_Pri = 1; AddPort(nikomnodeport); sprintf(rexxportnamn,"NiKomRexx%d",nodnr); if(!(rexxport=(struct MsgPort *)CreateMsgPort())) cleanup(EXIT_ERROR,"Kunde inte öppna RexxPort\n"); rexxport->mp_Node.ln_Name=rexxportnamn; rexxport->mp_Node.ln_Pri = 50; AddPort(rexxport); if(!(RexxSysBase=(struct RsxLib *)OpenLibrary("rexxsyslib.library",0L))) cleanup(EXIT_ERROR,"Kunde inte öppna rexxsyslib.library\n"); getnodeconfig(configname); if(pubscreen[0]=='-') tmppscreen=NULL; else tmppscreen=pubscreen; if(!(NiKwind=(struct Window *)OpenWindowTags(NULL,WA_Left,xpos, WA_Top,ypos, WA_Width,xsize, WA_Height,ysize, WA_IDCMP,IDCMP_CLOSEWINDOW, WA_MinWidth,50, WA_MinHeight,10, WA_MaxWidth,~0, WA_MaxHeight,~0, WA_SizeGadget,TRUE, WA_SizeBBottom, TRUE, WA_DragBar,TRUE, WA_DepthGadget,TRUE, WA_CloseGadget,TRUE, WA_SimpleRefresh,TRUE, WA_ScreenTitle,"NiKomSer", WA_AutoAdjust,TRUE, WA_PubScreenName,tmppscreen, TAG_DONE))) cleanup(EXIT_ERROR,"Kunde inte öppna fönstret\n"); if(!OpenIO(NiKwind)) cleanup(EXIT_ERROR,"Kunde inte öppna IO\n"); inloggad=Servermem->inloggad[nodnr]; conreqtkn(); serreqtkn(); UpdateInactive(); sprintf(titel,"Nod #%d SER: %s #%d",nodnr,Servermem->inne[nodnr].namn,inloggad); SetWindowTitles(NiKwind,titel,(char *)-1L); if(!ReadUnreadTexts(&Servermem->unreadTexts[nodnr], inloggad)) { puttekn("Error reading unread text info.\r\n", -1); LogEvent(SYSTEM_LOG, ERROR, "Can't read unread text info for user %d", inloggad); cleanup(EXIT_ERROR, "Error reading unread text info.\n"); } if(getft("NiKom:Texter/Bulletin.txt")>Servermem->inne[nodnr].senast_in) { sendfile("NiKom:Texter/Bulletin.txt"); } connection(); if(nodestate & NIKSTATE_NOCARRIER) { conputtekn("\nCarrier dropped\n",-1); if(Servermem->cfg.logmask & LOG_CARDROPPED) { LogEvent(USAGE_LOG, WARN, "%s släpper carriern (nod %d)", getusername(inloggad), nodnr); } if(Servermem->cfg.ar.cardropped) sendautorexx(Servermem->cfg.ar.cardropped); } else { if(nodestate & NIKSTATE_AUTOLOGOUT) { puttekn("\n\n\r*** Automagisk utloggning ***\n\n\r",-1); } else if(nodestate & NIKSTATE_INACTIVITY) { puttekn("\n\n\r*** Utloggning p.g.a inaktivitet ***\n\n\r",-1); } radcnt=-174711; if(Servermem->say[nodnr]) displaysay(); if(Servermem->cfg.ar.utlogg) sendautorexx(Servermem->cfg.ar.utlogg); sendfile("NiKom:Texter/Utlogg.txt"); } Servermem->inloggad[nodnr]=-1; if(Servermem->cfg.logmask & LOG_UTLOGG) { LogEvent(USAGE_LOG, INFO, "%s loggar ut från nod %d", getusername(inloggad), nodnr); } Servermem->action[nodnr]=0; time(&tid); Servermem->inne[nodnr].senast_in=tid; Servermem->inne[nodnr].tot_tid+=(tid-logintime); Servermem->inne[nodnr].loggin++; Servermem->info.inloggningar++; Servermem->inne[nodnr].defarea=area2; writeuser(inloggad,&Servermem->inne[nodnr]); WriteUnreadTexts(&Servermem->unreadTexts[nodnr], inloggad); writesenaste(); AbortInactive(); freealiasmem(); sprintf(tellstr,"loggade just ut från nod %d",nodnr); tellallnodes(tellstr); if(nodestate & NIKSTATE_NOCARRIER) { nodestate &= ~NIKSTATE_RELOGIN; } nodestate &= (NIKSTATE_RELOGIN | NIKSTATE_CLOSESER | NIKSTATE_NOANSWER); cleanup(nodestate,""); }
void main(int argc, char **argv) { int going = TRUE, forsok = 2,car = 1, tmp, ch; long tid; char tellstr[100],*tmppscreen, titel[80]; NewList((struct List *)&aliaslist); NewList((struct List *)&edit_list); if(!(IntuitionBase=(struct IntuitionBase *)OpenLibrary("intuition.library",0))) cleanup(EXIT_ERROR,"Kunde inte öppna intuition.library\n"); if(!(UtilityBase=OpenLibrary("utility.library",37L))) cleanup(EXIT_ERROR,"Kunde inte öppna utility.library\n"); if(!(LocaleBase=OpenLibrary("locale.library",38L))) cleanup(EXIT_ERROR,"Kunde inte öppna locale.library\n"); if(!(NiKomBase=OpenLibrary("nikom.library",0L))) cleanup(EXIT_ERROR,"Kunde inte öppna nikom.linbrary"); getnodeconfig("NiKom:Datocfg/ConNode.cfg"); if(!(initnode(NODCON))) cleanup(EXIT_ERROR,"Kunde inte registrera noden i Servern\n"); if(!(nikomnodeport = CreateMsgPort())) cleanup(EXIT_ERROR,"Kunde inte skapa NiKomNode-porten"); sprintf(nikomnodeportnamn,"NiKomNode%d",nodnr); nikomnodeport->mp_Node.ln_Name = nikomnodeportnamn; nikomnodeport->mp_Node.ln_Pri = 1; AddPort(nikomnodeport); sprintf(rexxportnamn,"NiKomRexx%d",nodnr); if(!(rexxport=(struct MsgPort *)CreateMsgPort())) cleanup(EXIT_ERROR,"Kunde inte öppna RexxPort\n"); rexxport->mp_Node.ln_Name=rexxportnamn; rexxport->mp_Node.ln_Pri=50; AddPort(rexxport); if(!(RexxSysBase=(struct RsxLib *)OpenLibrary("rexxsyslib.library",0L))) cleanup(EXIT_ERROR,"Kunde inte öppna rexxsyslib.library\n"); if(pubscreen[0]=='-') tmppscreen=NULL; else tmppscreen=pubscreen; if(!(NiKwind=(struct Window *)OpenWindowTags(NULL,WA_Left,xpos, WA_Top,ypos, WA_Width,xsize, WA_Height,ysize, WA_IDCMP,IDCMP_CLOSEWINDOW, WA_MinWidth,50, WA_MinHeight,10, WA_MaxWidth,~0, WA_MaxHeight,~0, WA_SizeGadget,TRUE, WA_SizeBBottom, TRUE, WA_DragBar,TRUE, WA_DepthGadget,TRUE, WA_CloseGadget,TRUE, WA_SimpleRefresh,TRUE, WA_ScreenTitle,"NiKomCon", WA_AutoAdjust,TRUE, WA_PubScreenName,tmppscreen, TAG_DONE))) cleanup(EXIT_ERROR,"Kunde inte öppna fönstret\n"); if(!OpenIO(NiKwind)) cleanup(EXIT_ERROR,"Kunde inte öppna IO\n"); strcpy(Servermem->nodid[nodnr],nodid); sprintf(titel,"Nod #%d CON: <Ingen inloggad>",nodnr); SetWindowTitles(NiKwind,titel,(UBYTE *)-1L); Servermem->connectbps[nodnr] = -1; conreqtkn(); do { Servermem->idletime[nodnr] = time(NULL); memset(commandhistory,0,1024); Servermem->inne[nodnr].rader=0; sendfile("NiKom:Texter/Inlogg.txt"); if(Servermem->cfg.ar.preinlogg) sendautorexx(Servermem->cfg.ar.preinlogg); going=TRUE; while(going) { Servermem->idletime[nodnr] = time(NULL); puttekn("\r\nNamn: ",-1); getstring(EKO,40,NULL); if(!stricmp(inmat,Servermem->cfg.ny)) { tmp = RegisterNewUser(); if(tmp == 2) { goto panik; } car = tmp ? 0 : 1; going=FALSE; } else if((inloggad=parsenamn(inmat))>=0) { if(readuser(inloggad,&Servermem->inne[nodnr])) { puttekn("Error reading user data.\r\n", -1); goto panik; } // TODO: Extract password loop. Should be identical to in PreNode/Ser.c forsok=2; while(forsok) { puttekn("\r\nLösen: ",-1); if(Servermem->inne[nodnr].flaggor & STAREKOFLAG) getstring(STAREKO,15,NULL); else getstring(EJEKO,15,NULL); if(CheckPassword(inmat, Servermem->inne[nodnr].losen)) { forsok=FALSE; going=FALSE; } else { forsok--; } } } else if(inloggad==-1) puttekn("\r\nHittar ej namnet\r\n",-1); } sprintf(titel,"Nod #%d CON: %s #%d",nodnr,Servermem->inne[nodnr].namn,inloggad); SetWindowTitles(NiKwind,titel,(UBYTE *)-1L); if(!ReadUnreadTexts(&Servermem->unreadTexts[nodnr], inloggad)) { puttekn("Error reading unread text info.\r\n", -1); LogEvent(SYSTEM_LOG, ERROR, "Can't read unread text info for user %d", inloggad); goto panik; } Servermem->inloggad[nodnr]=inloggad; Servermem->idletime[nodnr] = time(NULL); if(getft("NiKom:Texter/Bulletin.txt")>Servermem->inne[nodnr].senast_in) sendfile("NiKom:Texter/Bulletin.txt"); connection(); if(Servermem->cfg.logmask & LOG_UTLOGG) { LogEvent(USAGE_LOG, INFO, "%s loggar ut från nod %d", getusername(inloggad), nodnr); } if(Servermem->say[nodnr]) displaysay(); if(Servermem->cfg.ar.utlogg) sendautorexx(Servermem->cfg.ar.utlogg); sendfile("NiKom:Texter/Utlogg.txt"); sprintf(titel,"Nod #%d CON: <Ingen inloggad>",nodnr); SetWindowTitles(NiKwind,titel,(UBYTE *)-1L); Servermem->inloggad[nodnr]=-1; Servermem->action[nodnr]=0; time(&tid); Servermem->inne[nodnr].senast_in=tid; Servermem->inne[nodnr].tot_tid+=(tid-logintime); Servermem->inne[nodnr].loggin++; Servermem->info.inloggningar++; Servermem->inne[nodnr].defarea=area2; writeuser(inloggad,&Servermem->inne[nodnr]); WriteUnreadTexts(&Servermem->unreadTexts[nodnr], inloggad); writesenaste(); freealiasmem(); sprintf(tellstr,"loggade just ut från nod %d",nodnr); tellallnodes(tellstr); panik: nodestate = 0; puttekn("\r\n\nEn inloggning till? (J/n)",-1); } while((ch = GetChar()) != 'n' && ch != 'N'); cleanup(EXIT_OK,""); }
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; }
void main(int argc, char **argv) { int going=TRUE,forsok=2,car=1; long tid; char tellstr[100],*tmppscreen, titel[80]; UBYTE tillftkn; NewList((struct List *)&aliaslist); NewList((struct List *)&edit_list); if(!(IntuitionBase=(struct IntuitionBase *)OpenLibrary("intuition.library",0))) cleanup(ERROR,"Kunde inte öppna intuition.library\n"); if(!(UtilityBase=OpenLibrary("utility.library",37L))) cleanup(ERROR,"Kunde inte öppna utility.library\n"); if(!(NiKomBase=OpenLibrary("nikom.library",0L))) cleanup(ERROR,"Kunde inte öppna nikom.linbrary"); getnodeconfig("NiKom:Datocfg/ConNode.cfg"); if(!(initnode(NODCON))) cleanup(ERROR,"Kunde inte registrera noden i Servern\n"); if(!(nikomnodeport = CreateMsgPort())) cleanup(ERROR,"Kunde inte skapa NiKomNode-porten"); sprintf(nikomnodeportnamn,"NiKomNode%d",nodnr); nikomnodeport->mp_Node.ln_Name = nikomnodeportnamn; nikomnodeport->mp_Node.ln_Pri = 1; AddPort(nikomnodeport); sprintf(rexxportnamn,"NiKomRexx%d",nodnr); if(!(rexxport=(struct MsgPort *)CreateMsgPort())) cleanup(ERROR,"Kunde inte öppna RexxPort\n"); rexxport->mp_Node.ln_Name=rexxportnamn; rexxport->mp_Node.ln_Pri=50; AddPort(rexxport); if(!(RexxSysBase=(struct RsxLib *)OpenLibrary("rexxsyslib.library",0L))) cleanup(ERROR,"Kunde inte öppna rexxsyslib.library\n"); if(pubscreen[0]=='-') tmppscreen=NULL; else tmppscreen=pubscreen; if(!(NiKwind=(struct Window *)OpenWindowTags(NULL,WA_Left,xpos, WA_Top,ypos, WA_Width,xsize, WA_Height,ysize, WA_IDCMP,IDCMP_CLOSEWINDOW, WA_MinWidth,50, WA_MinHeight,10, WA_MaxWidth,~0, WA_MaxHeight,~0, WA_SizeGadget,TRUE, WA_SizeBBottom, TRUE, WA_DragBar,TRUE, WA_DepthGadget,TRUE, WA_CloseGadget,TRUE, WA_SimpleRefresh,TRUE, WA_ScreenTitle,"NiKom © Tomas Kärki 1996-1998", WA_AutoAdjust,TRUE, WA_PubScreenName,tmppscreen, TAG_DONE))) cleanup(ERROR,"Kunde inte öppna fönstret\n"); if(!OpenIO(NiKwind)) cleanup(ERROR,"Kunde inte öppna IO\n"); if(!getkeyfile()) cleanup(ERROR,"Korrupt nyckelfil\n"); strcpy(Servermem->nodid[nodnr],nodid); sprintf(titel,"Nod #%d CON: <Ingen inloggad>",nodnr); SetWindowTitles(NiKwind,titel,(UBYTE *)-1L); Servermem->connectbps[nodnr] = -1; conreqtkn(); do { memset(commandhistory,0,1024); Servermem->inne[nodnr].rader=0; sendfile("NiKom:Texter/Inlogg.txt"); if(Servermem->cfg.ar.preinlogg) sendrexx(Servermem->cfg.ar.preinlogg); going=TRUE; while(going) { puttekn("\r\nNamn: ",-1); getstring(EKO,40,NULL); if(!stricmp(inmat,Servermem->cfg.ny)) { /* if(!reggadnamn[0] && ((struct ShortUser *)Servermem->user_list.mlh_TailPred)->nummer >= 4) puttekn("\n\n\rDenna demoversion av NiKom kan hantera maximalt 5 användare.\n\r",-1); else { Versionen är nu obegränsad 970930! */ if((car=nyanv())==2) goto panik; going=FALSE; /* } */ } else if((inloggad=parsenamn(inmat))>=0) { readuser(inloggad,&Servermem->inne[nodnr]); forsok=2; while(forsok) { puttekn("\r\nLösen: ",-1); if(Servermem->inne[nodnr].flaggor & STAREKOFLAG) getstring(STAREKO,15,NULL); else getstring(EJEKO,15,NULL); if(CheckPassword(inloggad, inmat)) { forsok=FALSE; going=FALSE; } else forsok--; } } else if(inloggad==-1) puttekn("\r\nHittar ej namnet\r\n",-1); } sprintf(titel,"Nod #%d CON: %s #%d",nodnr,Servermem->inne[nodnr].namn,inloggad); SetWindowTitles(NiKwind,titel,(UBYTE *)-1L); readuserbitmap(inloggad,Servermem->bitmaps[nodnr],0,temppek); Servermem->inloggad[nodnr]=inloggad; Servermem->idletime[nodnr] = time(NULL); if(getft("NiKom:Texter/Bulletin.txt")>Servermem->inne[nodnr].senast_in) sendfile("NiKom:Texter/Bulletin.txt"); connection(); if(Servermem->cfg.logmask & LOG_UTLOGG) { sprintf(outbuffer,"%s loggar ut från nod %d",getusername(inloggad),nodnr); logevent(outbuffer); } if(Servermem->say[nodnr]) displaysay(); if(Servermem->cfg.ar.utlogg) sendrexx(Servermem->cfg.ar.utlogg); sendfile("NiKom:Texter/Utlogg.txt"); sprintf(titel,"Nod #%d CON: <Ingen inloggad>",nodnr); SetWindowTitles(NiKwind,titel,(UBYTE *)-1L); SaveProgramCategory(inloggad); Servermem->inloggad[nodnr]=-1; Servermem->action[nodnr]=0; Servermem->inne[nodnr].textpek=textpek; time(&tid); Servermem->inne[nodnr].senast_in=tid; Servermem->inne[nodnr].tot_tid+=(tid-logintime); Servermem->inne[nodnr].loggin++; Servermem->info.inloggningar++; Servermem->inne[nodnr].defarea=area2; writeuser(inloggad,&Servermem->inne[nodnr]); writeuserbitmap(inloggad,Servermem->bitmaps[nodnr],0,temppek); writesenaste(); freealiasmem(); sprintf(tellstr,"loggade just ut från nod %d",nodnr); tellallnodes(tellstr); panik: puttekn("\r\n\nEn inloggning till? (J/n)",-1); } while((tillftkn=gettekn())!='n' && tillftkn!='N'); cleanup(OK,""); }
pullmenu() { char scr[1200],s[80]; int x,y,i,goon,c; goon=1; onwait(); x=wherex(); y=wherey(); hidemouse(); gettext(13,5,61,16,scr); puttext(13,5,61,16,USERED); showmouse(); while(goon) { gotoxy(23,12); cprintf(" "); gotoxy(23,12); textcolor(LIGHTCYAN); inputlocal(s,30); strupr(s); switch(s[0]) { case 'Q': goon=0; break; case '1': gotoxy(15,14); textcolor(LIGHTBLUE); cprintf("Old Name: "); textcolor(LIGHTGRAY); cprintf("%s",user.name); gotoxy(15,15); textcolor(LIGHTGREEN); cprintf("New Name: "); inputlocal(s,40); gotoxy(15,14); cprintf(" "); gotoxy(15,15); cprintf(" "); if(s[0]!=0 || stricmp(user.name,s)==0) { if(!ver_user(s)) strcpy(user.name,s); } break; case '2': gotoxy(15,14); textcolor(LIGHTBLUE); cprintf("Old User SL: "); textcolor(LIGHTGRAY); cprintf("%d",user.sl); gotoxy(15,15); textcolor(LIGHTGREEN); cprintf("New User SL: "); textcolor(LIGHTGRAY); inputlocal(s,20); gotoxy(15,14); cprintf(" "); gotoxy(15,15); cprintf(" "); i=atoi(s); if(i >= 0 || i <= 255) user.sl=i; break; case '3': gotoxy(15,14); textcolor(LIGHTBLUE); cprintf("Old File SL: "); textcolor(LIGHTGRAY); cprintf("%d",user.filesl); gotoxy(15,15); textcolor(LIGHTGREEN); cprintf("New File SL: "); textcolor(LIGHTGRAY); inputlocal(s,20); gotoxy(15,14); cprintf(" "); gotoxy(15,15); cprintf(" "); i=atoi(s); if(i >= 0 || i <= 255) user.filesl=i; break; case '4': gotoxy(15,14); textcolor(LIGHTBLUE); cprintf("Old Note: "); textcolor(LIGHTGRAY); cprintf("\"%s\"",user.note); gotoxy(15,15); textcolor(LIGHTGREEN); cprintf("New Note: "); textcolor(LIGHTGRAY); inputlocal(s,40); gotoxy(15,14); cprintf(" "); gotoxy(15,15); cprintf(" "); if(s[0]!=0) strcpy(user.note,s); break; case '5': gotoxy(15,14); textcolor(LIGHTBLUE); cprintf("Old Time: "); textcolor(LIGHTGRAY); cprintf("%d",print_time()/60); gotoxy(15,15); textcolor(LIGHTGREEN); cprintf("New Time: "); textcolor(LIGHTGRAY); inputlocal(s,20); gotoxy(15,14); cprintf(" "); gotoxy(15,15); cprintf(" "); if(s[0]!=0) { user.timeall=atoi(s)*60; timeleft=atoi(s)*60; } break; case '6': i=1; gotoxy(15,14); textcolor(LIGHTBLUE); cprintf("User Flags: "); while(i) { goon=0; while(goon < 10) { gotoxy(27+goon,14); if(user.flags[goon]) { textcolor(LIGHTRED); cprintf("%d",goon); } else { textcolor(LIGHTGRAY); cprintf("%d",goon); } goon++; } gotoxy(15,15); textcolor(LIGHTGREEN); cprintf("Enter flag to toggle [Q/Quit]: "); do { c=getch(); if(c=='Q' || c=='q') { gotoxy(15,14); cprintf(" "); gotoxy(15,15); cprintf(" "); i=0; } } while(c < '0' || c > '10'); gotoxy(37,15); cprintf("%c",c); if(user.flags[c-48]) user.flags[c-48]=0; else user.flags[c-48]=1; gotoxy(37,15); cprintf(" "); } break; case '7': gotoxy(15,14); textcolor(LIGHTBLUE); cprintf("Old Password: "******"%s",user.pass); gotoxy(15,15); textcolor(LIGHTGREEN); cprintf("New Password: "******" "); gotoxy(15,15); cprintf(" "); if(s[0]!=0) strcpy(user.pass,s); break; case '8': gotoxy(15,14); textcolor(LIGHTBLUE); cprintf("Old Filepoints: "); textcolor(LIGHTGRAY); cprintf("%d",user.filepoints); gotoxy(15,15); textcolor(LIGHTGREEN); cprintf("New Filepoints: "); inputlocal(s,40); gotoxy(15,14); cprintf(" "); gotoxy(15,15); cprintf(" "); if(s[0]!=0) user.filepoints=atoi(s); break; } } writeuser(); puttext(13,5,61,16,scr); gotoxy(x,y); offwait(); }
checkvalidbatch() { char s[90], bytes[10], code[10], baud[10], bps[10], numcps[10], cps[10], numerror[10], error[10], stops[10], paksize[10], regnum[10],k[80]; char drive[MAXDRIVE],dir[MAXDIR],filename[MAXFILE],ext[MAXEXT]; FILE *bu; int i,totalcps, totalerror,o,totalfiles,oldfps,totalfps; struct userfile tempu; totalcps=totalerror=totalfiles=totalfps=0; bu=fopen("TRANSFER.LOG","r"); if(bu==NULL) { nl(); pl("4Can't find log file!!"); fclose(bu); return; } oldfps=user.filepoints; for(i=0;i < que.files || (feof(bu)==0);i++) { fscanf(bu,"%s %s %s %s %s %s %s %s %s %s %s %s",code,bytes,baud,bps,numcps,cps,numerror,error,stops,paksize,s,regnum); strupr(code); if(code[0] != 'L' && code[0] != 'E' && code[0] != 'Q') { user.filepoints -= fstruct.filepoints; user.num_dl++; user.k_dl+=fstruct.bytes; fstruct.timesdl++; writeuser(); fnsplit(s,drive,dir,filename,ext); strcpy(s,filename); strcat(s,ext); o=read_file(s); writefiles(o); readuser(fstruct.uploader,&tempu); tempu.filepoints=+fstruct.filepoints; writeu(&tempu); totalfiles++; totalcps+=atoi(numcps); totalerror+=atoi(numerror); totalfps+=fstruct.filepoints; } } fclose(bu); put_char(12); title("Transfer Stats"); print("4Average CPS :3 %d",totalcps/totalfiles); nl(); print("4Baud :3 %s",baud); nl(); print("4Total Errors:3 %d",totalerror); nl(); print("4Total Files :3 %d",totalfiles); nl(); nl(); print("4Old FPS: 3%d",oldfps); nl(); print("4Cost : 3%d",totalfps); nl(); print("4 ÄÄÄÄÄÄ"); nl(); print("4New FPS: 3%d",(oldfps-totalfps)); nl(); nl(); }
void new_user(const char *hostname) { int i = 0; unsigned int usernum; if( check_lockout(hostname) == FALSE ) logoff(0); usersupp = newuser_makesupp(); more(BBSDIR "/share/newuser/welcome_about", 0); cprintf("\1f\1gPress a key.."); inkey(); more(BBSDIR "/share/newuser/welcome_commands", 0); cprintf("\1f\1gPress a key.."); inkey(); more(BBSDIR "/share/newuser/welcome_rules", 0); cprintf("\1f\1gPress a key.."); inkey(); more(BBSDIR "/share/newuser/welcome_username", 0); newuser_getname(usersupp->username); /* now we have a name, try to get a number */ get_new_usernum( usersupp->username, &usernum ); usersupp->usernum = usernum; newuser_getpasswd(usersupp->usernum); newuser_registration(usersupp); test_ansi_colours(usersupp); cprintf("\1f\1g"); more(BBSDIR "/share/newuser/hideinfo", 0); usersupp->hidden_info = H_REALNAME | H_ADDRESS | H_CITY | H_COUNTRY | H_PHONE | H_EMAIL | H_URL | H_BIRTHDAY; usersupp->flags |= US_HIDDENHOST; cprintf("\n\1f\1gPress a key to continue.. \1a"); inkey(); toggle_hidden_info(usersupp); config_menu(); cprintf("\1f\1g\nA personal validation key is being generated and sent to the\n"); cprintf("following email address: `%s'.\n\n", usersupp->RGemail); cprintf("Sending... "); fflush(stdout); generate_new_key(usersupp->usernum); i = send_key(usersupp->usernum ); switch (i) { case 0: more(BBSDIR "/share/newuser/key_done", 0); break; case 1: more(BBSDIR "/share/newuser/key_invalid_chars", 0); break; default: more(BBSDIR "/share/newuser/key_unknown_error", 0); break; } fflush(stdout); sleep(1); /* final message to the new user */ cprintf("Press a key to continue.. "); inkey(); more(BBSDIR "/share/newuser/final", 1); log_it("newuserlog", "Created user '%s' from host '%s'", usersupp->username, hname); writeuser(usersupp, 0); mono_sql_u_update_registration( usersupp->usernum, usersupp->RGname, usersupp->RGaddr, usersupp->RGzip, usersupp->RGcity, usersupp->RGstate, usersupp->RGcountry, usersupp->RGphone ); mono_sql_u_update_hidden( usersupp->usernum, usersupp->hidden_info ); mono_sql_u_update_email( usersupp->usernum, usersupp->RGemail ); mono_sql_u_update_url( usersupp->usernum, usersupp->RGurl ); cprintf("Press a key to continue.. \1a"); inkey(); cprintf("\n"); return; }