diff --git a/src/sbbs3/uedit/uedit.c b/src/sbbs3/uedit/uedit.c index 472ea909f334cecdfb5350f22b56d05d7eed50de..69b05ae3d3e5548d01d5839fe2999167566b7a01 100644 --- a/src/sbbs3/uedit/uedit.c +++ b/src/sbbs3/uedit/uedit.c @@ -138,6 +138,40 @@ int check_save(scfg_t *cfg,user_t *user) return(i); } +/****************************************************************************/ +/* Takes a string in the format HH:MM:SS and returns in seconds */ +/****************************************************************************/ +time_t DLLCALL strtosec(char *str) +{ + char *p1; + char *p2; + long int hour=0; + long int min=0; + long int sec2=0; + time_t sec=0; + + hour=strtol(str,&p1,10); + if(hour<0 || hour > 24) + return(-1); + if(*p1==':') { + p1++; + min=strtol(p1,&p2,10); + if(min<0 || min > 59) + return(-1); + if(*p2==':') { + p2++; + sec2=strtol(p2,&p1,10); + if(sec2 < 0 || sec2 > 59) + return(-1); + } + } + + sec=hour*60*60; + sec+=min*60; + sec+=sec2; + return(sec); +} + /* Edit "Extended comment" */ int edit_comment(scfg_t *cfg, user_t *user) { @@ -176,7 +210,7 @@ int edit_settings(scfg_t *cfg, user_t *user) * Todays Uploads * Total Time On * Todays Time On - * Last Call + * Last Call Time On * Extra * Total Downloads * Bytes @@ -187,6 +221,235 @@ int edit_settings(scfg_t *cfg, user_t *user) */ int edit_stats(scfg_t *cfg, user_t *user) { + int i,j; + char **opt; + char str[256]; + time_t temptime,temptime2; + + if((opt=(char **)MALLOC(sizeof(char *)*(MAX_OPTS+1)))==NULL) + allocfail(sizeof(char *)*(MAX_OPTS+1)); + for(i=0;i<(MAX_OPTS+1);i++) + if((opt[i]=(char *)MALLOC(MAX_OPLN))==NULL) + allocfail(MAX_OPLN); + + j=0; + while(1) { + i=0; + sprintf(opt[i++],"First On: %s",user->firston?timestr(cfg, &user->firston, str):"Never"); + sprintf(opt[i++],"Last On: %s",user->laston?timestr(cfg, &user->laston, str):"Never"); + sprintf(opt[i++],"Logon Time: %s",user->laston?timestr(cfg, &user->logontime, str):"Not On"); + sprintf(opt[i++],"Total Logons: %hu",user->logons); + sprintf(opt[i++],"Todays Logons: %hu",user->ltoday); + sprintf(opt[i++],"Total Posts: %hu",user->posts); + sprintf(opt[i++],"Todays Posts: %hu",user->ptoday); + sprintf(opt[i++],"Total Email: %hu",user->emails); + sprintf(opt[i++],"Todays Email: %hu",user->etoday); + sprintf(opt[i++],"Email To Sysop: %hu",user->fbacks); + sprintf(opt[i++],"Total Time On: %hu",user->timeon); + sprintf(opt[i++],"Time On Today: %hu",user->ttoday); + sprintf(opt[i++],"Time On Last Call: %hu",user->tlast); + sprintf(opt[i++],"Extra Time Today: %hu",user->textra); + sprintf(opt[i++],"Total Downloads: %hu",user->dls); + sprintf(opt[i++],"Downloaded Bytes: %lu",user->dlb); + sprintf(opt[i++],"Total Uploads: %hu",user->uls); + sprintf(opt[i++],"Uploaded Bytes: %lu",user->ulb); + sprintf(opt[i++],"Leech: %u",user->leech); + switch(uifc.list(WIN_MID|WIN_SAV,0,0,0,&j,0,"Statistics",opt)) { + case -1: + freeopt(opt); + return(0); + break; + case 0: + /* First On */ + temptime=user->firston; + unixtodstr(cfg,temptime,str); + uifc.input(WIN_MID|WIN_SAV,0,0,"First On Date",str,8,K_EDIT); + user->firston=dstrtounix(cfg, str); + temptime2=temptime-user->firston; + sectostr(temptime2,str); + uifc.input(WIN_MID|WIN_SAV,0,0,"First On Time",str,8,K_EDIT); + temptime2=strtosec(str); + if(temptime2!=-1) + user->firston += temptime2; + if(temptime!=user->firston) + modified=1; + break; + case 1: + /* Last On */ + temptime=user->laston; + unixtodstr(cfg,temptime,str); + uifc.input(WIN_MID|WIN_SAV,0,0,"Last On Date",str,8,K_EDIT); + user->laston=dstrtounix(cfg, str); + temptime2=temptime-user->laston; + sectostr(temptime2,str); + uifc.input(WIN_MID|WIN_SAV,0,0,"Last On Time",str,8,K_EDIT); + temptime2=strtosec(str); + if(temptime2!=-1) + user->laston += temptime2; + if(temptime!=user->laston) + modified=1; + break; + case 2: + /* Logon Time */ + temptime=user->logontime; + unixtodstr(cfg,temptime,str); + uifc.input(WIN_MID|WIN_SAV,0,0,"Logon Date",str,8,K_EDIT); + user->logontime=dstrtounix(cfg, str); + temptime2=temptime-user->logontime; + sectostr(temptime2,str); + uifc.input(WIN_MID|WIN_SAV,0,0,"Logon Time",str,8,K_EDIT); + temptime2=strtosec(str); + if(temptime2!=-1) + user->logontime += temptime2; + if(temptime!=user->logontime) + modified=1; + break; + case 3: + /* Total Logons */ + sprintf(str,"%hu",user->logons); + uifc.input(WIN_MID|WIN_SAV,0,0,"Total Logons",str,5,K_EDIT|K_NUMBER); + if(uifc.changes) { + modified=1; + user->logons=strtoul(str,NULL,10); + } + break; + case 4: + /* Todays Logons */ + sprintf(str,"%hu",user->ltoday); + uifc.input(WIN_MID|WIN_SAV,0,0,"Todays Logons",str,5,K_EDIT|K_NUMBER); + if(uifc.changes) { + modified=1; + user->ltoday=strtoul(str,NULL,10); + } + break; + case 5: + /* Total Posts */ + sprintf(str,"%hu",user->posts); + uifc.input(WIN_MID|WIN_SAV,0,0,"Total Posts",str,5,K_EDIT|K_NUMBER); + if(uifc.changes) { + modified=1; + user->posts=strtoul(str,NULL,10); + } + break; + case 6: + /* Todays Posts */ + sprintf(str,"%hu",user->ptoday); + uifc.input(WIN_MID|WIN_SAV,0,0,"Todays Posts",str,5,K_EDIT|K_NUMBER); + if(uifc.changes) { + modified=1; + user->ptoday=strtoul(str,NULL,10); + } + break; + case 7: + /* Total Emails */ + sprintf(str,"%hu",user->emails); + uifc.input(WIN_MID|WIN_SAV,0,0,"Total Emails",str,5,K_EDIT|K_NUMBER); + if(uifc.changes) { + modified=1; + user->emails=strtoul(str,NULL,10); + } + break; + case 8: + /* Todays Emails */ + sprintf(str,"%hu",user->etoday); + uifc.input(WIN_MID|WIN_SAV,0,0,"Todays Emails",str,5,K_EDIT|K_NUMBER); + if(uifc.changes) { + modified=1; + user->etoday=strtoul(str,NULL,10); + } + break; + case 9: + /* Emails to Sysop */ + sprintf(str,"%hu",user->fbacks); + uifc.input(WIN_MID|WIN_SAV,0,0,"Emails to Sysop",str,5,K_EDIT|K_NUMBER); + if(uifc.changes) { + modified=1; + user->fbacks=strtoul(str,NULL,10); + } + break; + case 10: + /* Total Time On */ + sprintf(str,"%hu",user->timeon); + uifc.input(WIN_MID|WIN_SAV,0,0,"Total Time On",str,5,K_EDIT|K_NUMBER); + if(uifc.changes) { + modified=1; + user->timeon=strtoul(str,NULL,10); + } + break; + case 11: + /* Time On Today */ + sprintf(str,"%hu",user->ttoday); + uifc.input(WIN_MID|WIN_SAV,0,0,"Time On Today",str,5,K_EDIT|K_NUMBER); + if(uifc.changes) { + modified=1; + user->ttoday=strtoul(str,NULL,10); + } + break; + case 12: + /* Time On Last Call */ + sprintf(str,"%hu",user->tlast); + uifc.input(WIN_MID|WIN_SAV,0,0,"Time On Last Call",str,5,K_EDIT|K_NUMBER); + if(uifc.changes) { + modified=1; + user->tlast=strtoul(str,NULL,10); + } + break; + case 13: + /* Extra Time Today */ + sprintf(str,"%hu",user->textra); + uifc.input(WIN_MID|WIN_SAV,0,0,"Extra Time Today",str,5,K_EDIT|K_NUMBER); + if(uifc.changes) { + modified=1; + user->textra=strtoul(str,NULL,10); + } + break; + case 14: + /* Total Downloads */ + sprintf(str,"%hu",user->dls); + uifc.input(WIN_MID|WIN_SAV,0,0,"Total Downloads",str,5,K_EDIT|K_NUMBER); + if(uifc.changes) { + modified=1; + user->dls=strtoul(str,NULL,10); + } + break; + case 15: + /* Downloaded Bytes */ + sprintf(str,"%lu",user->dlb); + uifc.input(WIN_MID|WIN_SAV,0,0,"Downloaded Bytes",str,10,K_EDIT|K_NUMBER); + if(uifc.changes) { + modified=1; + user->dlb=strtoul(str,NULL,10); + } + break; + case 16: + /* Total Uploads */ + sprintf(str,"%hu",user->uls); + uifc.input(WIN_MID|WIN_SAV,0,0,"Total Uploads",str,5,K_EDIT|K_NUMBER); + if(uifc.changes) { + modified=1; + user->uls=strtoul(str,NULL,10); + } + break; + case 17: + /* Uploaded Bytes */ + sprintf(str,"%lu",user->ulb); + uifc.input(WIN_MID|WIN_SAV,0,0,"Uploaded Bytes",str,10,K_EDIT|K_NUMBER); + if(uifc.changes) { + modified=1; + user->ulb=strtoul(str,NULL,10); + } + break; + case 18: + /* Leech Counter */ + sprintf(str,"%u",user->leech); + uifc.input(WIN_MID|WIN_SAV,0,0,"Leech Counter",str,3,K_EDIT|K_NUMBER); + if(uifc.changes) { + modified=1; + user->leech=strtoul(str,NULL,10); + } + break; + } + } return(0); } @@ -218,7 +481,7 @@ int edit_security(scfg_t *cfg, user_t *user) j=0; while(1) { i=0; - sprintf(opt[i++],"Level: %-d",user->level); + sprintf(opt[i++],"Level: %d",user->level); sprintf(opt[i++],"Expiration: %s",user->expire?unixtodstr(cfg, user->expire, str):"Never"); sprintf(opt[i++],"Flag Set 1: %s",ltoaf(user->flags1,str)); sprintf(opt[i++],"Flag Set 2: %s",ltoaf(user->flags2,str)); @@ -226,9 +489,9 @@ int edit_security(scfg_t *cfg, user_t *user) sprintf(opt[i++],"Flag Set 4: %s",ltoaf(user->flags4,str)); sprintf(opt[i++],"Exemptions: %s",ltoaf(user->exempt,str)); sprintf(opt[i++],"Restrictions: %s",ltoaf(user->rest,str)); - sprintf(opt[i++],"Credits: %-lu",user->cdt); - sprintf(opt[i++],"Free Credits: %-lu",user->freecdt); - sprintf(opt[i++],"Minutes: %-lu",user->min); + sprintf(opt[i++],"Credits: %lu",user->cdt); + sprintf(opt[i++],"Free Credits: %lu",user->freecdt); + sprintf(opt[i++],"Minutes: %lu",user->min); opt[i][0]=0; switch(uifc.list(WIN_MID|WIN_SAV,0,0,0,&j,0,"Security Settings",opt)) { case -1: @@ -351,7 +614,6 @@ int edit_security(scfg_t *cfg, user_t *user) * Gender * Connection * Handle - * Bitrate * Password * Address 1 * Address 2 @@ -381,7 +643,6 @@ int edit_personal(scfg_t *cfg, user_t *user) sprintf(opt[i++],"Gender: %c",user->sex); sprintf(opt[i++],"Connection: %s",user->modem); sprintf(opt[i++],"Handle: %s",user->alias); - sprintf(opt[i++],"Bitrate: Hrm..."); sprintf(opt[i++],"Password: %s",user->pass); sprintf(opt[i++],"Location: %s",user->location); sprintf(opt[i++],"Address: %s",user->address); @@ -450,27 +711,24 @@ int edit_personal(scfg_t *cfg, user_t *user) modified=1; break; case 9: - /* Bitrate */ - break; - case 10: /* Password */ uifc.input(WIN_MID|WIN_SAV,0,0,"Password",user->pass,LEN_PASS,K_EDIT); if(uifc.changes) modified=1; break; - case 11: + case 10: /* Location */ uifc.input(WIN_MID|WIN_SAV,0,0,"Location",user->location,LEN_LOCATION,K_EDIT); if(uifc.changes) modified=1; break; - case 12: + case 11: /* Address */ uifc.input(WIN_MID|WIN_SAV,0,0,"Address",user->address,LEN_ADDRESS,K_EDIT); if(uifc.changes) modified=1; break; - case 13: + case 12: /* Postal/Zip */ uifc.input(WIN_MID|WIN_SAV,0,0,"Postal/Zip Code",user->zipcode,LEN_ZIPCODE,K_EDIT); if(uifc.changes)