diff --git a/src/sbbs3/uedit/uedit.c b/src/sbbs3/uedit/uedit.c index 2623e1cf923d85e8afea94b2567caf20e2152526..472ea909f334cecdfb5350f22b56d05d7eed50de 100644 --- a/src/sbbs3/uedit/uedit.c +++ b/src/sbbs3/uedit/uedit.c @@ -1,4 +1,4 @@ -/* umonitor.c */ +/* uedit.c */ /* Synchronet for *nix user editor */ @@ -207,7 +207,7 @@ int edit_security(scfg_t *cfg, user_t *user) { int i,j; char **opt; - char onech[2]; + char str[256]; if((opt=(char **)MALLOC(sizeof(char *)*(MAX_OPTS+1)))==NULL) allocfail(sizeof(char *)*(MAX_OPTS+1)); @@ -215,8 +215,128 @@ int edit_security(scfg_t *cfg, user_t *user) if((opt[i]=(char *)MALLOC(MAX_OPLN))==NULL) allocfail(MAX_OPLN); - - + j=0; + while(1) { + i=0; + 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)); + sprintf(opt[i++],"Flag Set 3: %s",ltoaf(user->flags3,str)); + 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); + opt[i][0]=0; + switch(uifc.list(WIN_MID|WIN_SAV,0,0,0,&j,0,"Security Settings",opt)) { + case -1: + freeopt(opt); + return(0); + break; + case 0: + /* Level */ + sprintf(str,"%d",user->level); + uifc.input(WIN_MID|WIN_SAV,0,0,"Level",str,2,K_EDIT|K_NUMBER); + if(uifc.changes) { + modified=1; + user->level=atoi(str); + } + break; + case 1: + /* Expiration */ + unixtodstr(cfg,user->expire,str); + uifc.input(WIN_MID|WIN_SAV,0,0,"Expiration",str,8,K_EDIT); + if(uifc.changes && dstrtounix(cfg, str)!=user->expire) { + modified=1; + user->expire=dstrtounix(cfg, str); + } + break; + case 2: + /* Flag Set 1 */ + ltoaf(user->flags1,str); + uifc.input(WIN_MID|WIN_SAV,0,0,"Flag Set 1",str,26,K_EDIT|K_UPPER|K_ALPHA); + if(uifc.changes) { + modified=1; + user->flags1=aftol(str); + } + break; + case 3: + /* Flag Set 2 */ + ltoaf(user->flags2,str); + uifc.input(WIN_MID|WIN_SAV,0,0,"Flag Set 2",str,26,K_EDIT|K_UPPER|K_ALPHA); + if(uifc.changes) { + modified=1; + user->flags2=aftol(str); + } + break; + case 4: + /* Flag Set 3 */ + ltoaf(user->flags3,str); + uifc.input(WIN_MID|WIN_SAV,0,0,"Flag Set 3",str,26,K_EDIT|K_UPPER|K_ALPHA); + if(uifc.changes) { + modified=1; + user->flags3=aftol(str); + } + break; + case 5: + /* Flag Set 4 */ + ltoaf(user->flags4,str); + uifc.input(WIN_MID|WIN_SAV,0,0,"Flag Set 4",str,26,K_EDIT|K_UPPER|K_ALPHA); + if(uifc.changes) { + modified=1; + user->flags4=aftol(str); + } + break; + case 6: + /* Exemptions */ + ltoaf(user->exempt,str); + uifc.input(WIN_MID|WIN_SAV,0,0,"Exemptions",str,26,K_EDIT|K_UPPER|K_ALPHA); + if(uifc.changes) { + modified=1; + user->exempt=aftol(str); + } + break; + case 7: + /* Restrictions */ + ltoaf(user->rest,str); + uifc.input(WIN_MID|WIN_SAV,0,0,"Restrictions",str,26,K_EDIT|K_UPPER|K_ALPHA); + if(uifc.changes) { + modified=1; + user->rest=aftol(str); + } + break; + case 8: + /* Credits */ + sprintf(str,"%lu",user->cdt); + uifc.input(WIN_MID|WIN_SAV,0,0,"Credits",str,10,K_EDIT|K_NUMBER); + if(uifc.changes) { + modified=1; + user->cdt=strtoul(str,NULL,10); + } + break; + case 9: + /* Free Credits */ + sprintf(str,"%lu",user->freecdt); + uifc.input(WIN_MID|WIN_SAV,0,0,"Free Credits",str,10,K_EDIT|K_NUMBER); + if(uifc.changes) { + modified=1; + user->freecdt=strtoul(str,NULL,10); + } + break; + case 10: + /* Minutes */ + sprintf(str,"%lu",user->min); + uifc.input(WIN_MID|WIN_SAV,0,0,"Minutes",str,10,K_EDIT|K_NUMBER); + if(uifc.changes) { + modified=1; + user->min=strtoul(str,NULL,10); + } + break; + } + } + return(0); } @@ -266,6 +386,7 @@ int edit_personal(scfg_t *cfg, user_t *user) sprintf(opt[i++],"Location: %s",user->location); sprintf(opt[i++],"Address: %s",user->address); sprintf(opt[i++],"Postal/Zip: %s",user->zipcode); + opt[i][0]=0; uifc.changes=FALSE; switch(uifc.list(WIN_MID|WIN_SAV,0,0,0,&j,0,"Personal Settings",opt)) { case -1: @@ -378,30 +499,34 @@ int edit_user(scfg_t *cfg, int usernum) user.number=usernum; getuserdat(cfg,&user); - i=0; - strcpy(opt[i++],"Reload"); - strcpy(opt[i++],"Delete"); - if (user.misc & INACTIVE) - strcpy(opt[i++],"Activate"); - else - strcpy(opt[i++],"Deactivate"); - strcpy(opt[i++],"Personal"); - strcpy(opt[i++],"Security"); - strcpy(opt[i++],"Statistics"); - strcpy(opt[i++],"Settings"); - strcpy(opt[i++],"MSG/File Settings"); - strcpy(opt[i++],"Extended Comment"); - opt[i][0]=0; - i=0; modified=0; + j=0; while(1) { - switch(uifc.list(WIN_MID|WIN_SAV,0,0,0,&i,0,"Edit User",opt)) { + i=0; + strcpy(opt[i++],"Reload"); + if (user.misc & DELETED) + strcpy(opt[i++],"Undelete"); + else + strcpy(opt[i++],"Delete"); + if (user.misc & INACTIVE) + strcpy(opt[i++],"Activate"); + else + strcpy(opt[i++],"Deactivate"); + strcpy(opt[i++],"Personal"); + strcpy(opt[i++],"Security"); + strcpy(opt[i++],"Statistics"); + strcpy(opt[i++],"Settings"); + strcpy(opt[i++],"MSG/File Settings"); + strcpy(opt[i++],"Extended Comment"); + opt[i][0]=0; + + switch(uifc.list(WIN_MID|WIN_SAV,0,0,0,&j,0,"Edit User",opt)) { case -1: if(modified) { - j=check_save(cfg,&user); + i=check_save(cfg,&user); } - if(j!=-1) { + if(i!=-1) { freeopt(opt); return(0); } @@ -410,10 +535,13 @@ int edit_user(scfg_t *cfg, int usernum) case 0: if(modified && confirm("This will undo any changes you have made. Continue?")==1) { getuserdat(cfg,&user); + modified=0; } + modified=0; + break; case 1: - user.misc |= DELETED; + user.misc ^= DELETED; modified=1; break; @@ -621,7 +749,7 @@ int main(int argc, char** argv) { "\n" "\nIf you want to exit the Synchronet user editor," "\nselect `Yes`. Otherwise, select `No` or hit ~ ESC ~."; - if(confirm("Exit Synchronet Monitor")) + if(confirm("Exit Synchronet User Editor")) bail(0); continue; }