--- sbbs/sbbs2/scfg/scfgsys.c 2018/04/24 16:37:52 1.1.1.1 +++ sbbs/sbbs2/scfg/scfgsys.c 2018/04/24 16:39:19 1.1.1.2 @@ -1,1790 +1,1790 @@ -#line 2 "SCFGSYS.C" - -/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */ - -#include "scfg.h" - -void sys_cfg(void) -{ - static int sys_dflt,adv_dflt,tog_dflt,new_dflt; - char str[81],str2[81],done=0,*dupehelp; - int i,j,k,dflt,bar,savchanges; - -while(1) { - i=0; - sprintf(opt[i++],"%-33.33s%s","BBS Name",sys_name); - sprintf(opt[i++],"%-33.33s%s","Location",sys_location); - sprintf(opt[i++],"%-33.33s%s","Operator",sys_op); - sprintf(opt[i++],"%-33.33s%s","Password",sys_pass); - - sprintf(str,"%s Password" - ,sys_misc&SM_PWEDIT && sys_pwdays ? "Users Must Change" - : sys_pwdays ? "Users Get New Random" : "Users Can Change"); - if(sys_pwdays) - sprintf(tmp,"Every %u Days",sys_pwdays); - else if(sys_misc&SM_PWEDIT) - strcpy(tmp,"Yes"); - else - strcpy(tmp,"No"); - sprintf(opt[i++],"%-33.33s%s",str,tmp); - - sprintf(opt[i++],"%-33.33s%u","Days to Preserve Deleted Users" - ,sys_deldays); - sprintf(opt[i++],"%-33.33s%s","Maximum Days of Inactivity" - ,sys_autodel ? itoa(sys_autodel,tmp,10) : "Unlimited"); - sprintf(opt[i++],"%-33.33s%s","New User Password",new_pass); - - strcpy(opt[i++],"Toggle Options..."); - strcpy(opt[i++],"New User Values..."); - strcpy(opt[i++],"Advanced Options..."); - strcpy(opt[i++],"Loadable Modules..."); - strcpy(opt[i++],"Security Level Values..."); - strcpy(opt[i++],"Expired Account Values..."); - strcpy(opt[i++],"Quick-Validation Values..."); - opt[i][0]=0; - SETHELP(WHERE); -/* -System Configuration: - -This menu contains options and sub-menus of options that affect the -entire system. -*/ - switch(ulist(WIN_ORG|WIN_ACT|WIN_CHE,0,0,72,&sys_dflt,0 - ,"System Configuration",opt)) { - case -1: - i=save_changes(WIN_MID); - if(i==-1) - break; - if(!i) - write_main_cfg(); - return; - case 0: - SETHELP(WHERE); -/* -BBS Name: - -This is the name of the BBS. -*/ - uinput(WIN_MID,0,0,"BBS Name",sys_name,40,K_EDIT); - break; - case 1: - SETHELP(WHERE); -/* -System Location: - -This is the location of the BBS. The format is flexible, but it is -suggested you use the City, State format for clarity. -*/ - uinput(WIN_MID,0,0,"Location",sys_location,40,K_EDIT); - break; - case 2: - SETHELP(WHERE); -/* -System Operator: - -This is the name or alias of the system operator. This does not have to -be the same as user #1. This field is used for documentary purposes -only. -*/ - uinput(WIN_MID,0,0,"System Operator",sys_op,40,K_EDIT); - break; - case 3: - SETHELP(WHERE); -/* -System Password: - -This is an extra security password required for sysop logon and certain -sysop functions. This password should be something not easily guessed -and should be kept absolutely confidential. This password must be -entered at the SY: prompt. -*/ - uinput(WIN_MID,0,0,"System Password",sys_pass,40,K_EDIT|K_UPPER); - break; - case 4: - strcpy(opt[0],"Yes"); - strcpy(opt[1],"No"); - opt[2][0]=0; - i=1; - SETHELP(WHERE); -/* -Allow Users to Change Their Password: - -If you want the users of your system to have the option of changing -their password to a string of their choice, set this option to Yes. -For the highest level of security, set this option to No. -*/ - i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0 - ,"Allow Users to Change Their Password",opt); - if(!i && !(sys_misc&SM_PWEDIT)) { - sys_misc|=SM_PWEDIT; - changes=1; } - else if(i==1 && sys_misc&SM_PWEDIT) { - sys_misc&=~SM_PWEDIT; - changes=1; } - i=0; - SETHELP(WHERE); -/* -Force Periodic Password Changes: - -If you want your users to be forced to change their passwords -periodically, select Yes. -*/ - i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0 - ,"Force Periodic Password Changes",opt); - if(!i) { - itoa(sys_pwdays,str,10); - SETHELP(WHERE); -/* -Maximum Days Between Password Changes: - -Enter the maximum number of days allowed between password changes. -If a user has not voluntarily changed his or her password in this -many days, he or she will be forced to change their password upon -logon. -*/ - uinput(WIN_MID,0,0,"Maximum Days Between Password Changes" - ,str,5,K_NUMBER|K_EDIT); - sys_pwdays=atoi(str); } - else if(i==1 && sys_pwdays) { - sys_pwdays=0; - changes=1; } - - break; - case 5: - sprintf(str,"%u",sys_deldays); - SETHELP(WHERE); -/* -Days Since Last Logon to Preserve Deleted Users: - -Deleted user slots can be undeleted until the slot is written over -by a new user. If you want deleted user slots to be preserved for period -of time since their last logon, set this value to the number of days to -keep new users from taking over a deleted user's slot. -*/ - uinput(WIN_MID,0,0,"Days Since Last Logon to Preserve Deleted Users" - ,str,5,K_EDIT|K_NUMBER); - sys_deldays=atoi(str); - break; - case 6: - sprintf(str,"%u",sys_autodel); - SETHELP(WHERE); -/* -Maximum Days of Inactivity Before Auto-Deletion: - -If you want users that haven't logged on in certain period of time to -be automatically deleted, set this value to the maximum number of days -of inactivity before the user is deleted. Setting this value to 0 -disables this feature. - -Users with the P exemption will not be deleted due to inactivity. -*/ - uinput(WIN_MID,0,0,"Maximum Days of Inactivity Before Auto-Deletion" - ,str,5,K_EDIT|K_NUMBER); - sys_autodel=atoi(str); - break; - case 7: - SETHELP(WHERE); -/* -New User Password: - -If you want callers to only be able to logon as New if they know a -certain password, enter that password here. If you want any caller to -be able to logon as New, leave this option blank. -*/ - uinput(WIN_MID,0,0,"New User Password",new_pass,40 - ,K_EDIT|K_UPPER); - break; - case 8: /* Toggle Options */ - done=0; - while(!done) { - i=0; - sprintf(opt[i++],"%-33.33s%s","Allow Aliases" - ,uq&UQ_ALIASES ? "Yes" : "No"); - sprintf(opt[i++],"%-33.33s%s","Allow Time Banking" - ,sys_misc&SM_TIMEBANK ? "Yes" : "No"); - sprintf(opt[i++],"%-33.33s%s","Allow Credit Conversions" - ,sys_misc&SM_NOCDTCVT ? "No" : "Yes"); - sprintf(opt[i++],"%-33.33s%s","Allow Local Sysop Access" - ,sys_misc&SM_L_SYSOP ? "Yes" : "No"); - sprintf(opt[i++],"%-33.33s%s","Allow Remote Sysop Access" - ,sys_misc&SM_R_SYSOP ? "Yes" : "No"); - sprintf(opt[i++],"%-33.33s%s","Echo Passwords Locally" - ,sys_misc&SM_ECHO_PW ? "Yes" : "No"); - sprintf(opt[i++],"%-33.33s%s","Require Passwords Locally" - ,sys_misc&SM_REQ_PW ? "Yes" : "No"); - sprintf(opt[i++],"%-33.33s%s","Short Sysop Page" - ,sys_misc&SM_SHRTPAGE ? "Yes" : "No"); - sprintf(opt[i++],"%-33.33s%s","Sound Alarm on Error" - ,sys_misc&SM_ERRALARM ? "Yes" : "No"); - sprintf(opt[i++],"%-33.33s%s","Include Sysop in Statistics" - ,sys_misc&SM_SYSSTAT ? "Yes" : "No"); - sprintf(opt[i++],"%-33.33s%s","Closed to New Users" - ,sys_misc&SM_CLOSED ? "Yes" : "No"); - sprintf(opt[i++],"%-33.33s%s","Use Location in User Lists" - ,sys_misc&SM_LISTLOC ? "Yes" : "No"); - sprintf(opt[i++],"%-33.33s%s","Military (24 hour) Time Format" - ,sys_misc&SM_MILITARY ? "Yes" : "No"); - sprintf(opt[i++],"%-33.33s%s","European Date Format (DD/MM/YY)" - ,sys_misc&SM_EURODATE ? "Yes" : "No"); - sprintf(opt[i++],"%-33.33s%s","User Expires When Out-of-time" - ,sys_misc&SM_TIME_EXP ? "Yes" : "No"); - sprintf(opt[i++],"%-33.33s%s","Quick Validation Hot-Keys" - ,sys_misc&SM_QVALKEYS ? "Yes" : "No"); - opt[i][0]=0; - savnum=0; - SETHELP(WHERE); -/* -System Toggle Options: - -This is a menu of system related options that can be toggled between -two or more states, such as Yes and No. -*/ - switch(ulist(WIN_ACT|WIN_BOT|WIN_RHT,0,0,41,&tog_dflt,0 - ,"Toggle Options",opt)) { - case -1: - done=1; - break; - case 0: - strcpy(opt[0],"Yes"); - strcpy(opt[1],"No"); - opt[2][0]=0; - i=0; - SETHELP(WHERE); -/* -Allow Users to Use Aliases: - -If you want the users of your system to be allowed to be known by a -false name, handle, or alias, set this option to Yes. If you want all -users on your system to be known only by their real names, select No. -*/ - i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0 - ,"Allow Users to Use Aliases",opt); - if(!i && !(uq&UQ_ALIASES)) { - uq|=UQ_ALIASES; - changes=1; } - else if(i==1 && uq&UQ_ALIASES) { - uq&=~UQ_ALIASES; - changes=1; } - break; - case 1: - strcpy(opt[0],"Yes"); - strcpy(opt[1],"No"); - opt[2][0]=0; - i=0; - SETHELP(WHERE); -/* -Allow Time Banking: - -If you want the users of your system to be allowed to be deposit -any extra time they may have left during a call into their minute bank, -set this option to Yes. If this option is set to No, then the only -way a user may get minutes in their minute bank is to purchase them -with credits. -*/ - i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0 - ,"Allow Users to Depost Time in Minute Bank",opt); - if(!i && !(sys_misc&SM_TIMEBANK)) { - sys_misc|=SM_TIMEBANK; - changes=1; } - else if(i==1 && sys_misc&SM_TIMEBANK) { - sys_misc&=~SM_TIMEBANK; - changes=1; } - break; - case 2: - strcpy(opt[0],"Yes"); - strcpy(opt[1],"No"); - opt[2][0]=0; - i=0; - SETHELP(WHERE); -/* -Allow Credits to be Converted into Minutes: - -If you want the users of your system to be allowed to be convert -any credits they may have into minutes for their minute bank, -set this option to Yes. -*/ - i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0 - ,"Allow Users to Convert Credits into Minutes" - ,opt); - if(!i && sys_misc&SM_NOCDTCVT) { - sys_misc&=~SM_NOCDTCVT; - changes=1; } - else if(i==1 && !(sys_misc&SM_NOCDTCVT)) { - sys_misc|=SM_NOCDTCVT; - changes=1; } - break; - case 3: - strcpy(opt[0],"Yes"); - strcpy(opt[1],"No"); - opt[2][0]=0; - i=0; - SETHELP(WHERE); -/* -Allow Local Sysop Access: - -If you want to be able to logon locally with sysop access, set this -option to Yes. -*/ - i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0 - ,"Allow Local Sysop Access",opt); - if(!i && !(sys_misc&SM_L_SYSOP)) { - sys_misc|=SM_L_SYSOP; - changes=1; } - else if(i==1 && sys_misc&SM_L_SYSOP) { - sys_misc&=~SM_L_SYSOP; - changes=1; } - break; - case 4: - strcpy(opt[0],"Yes"); - strcpy(opt[1],"No"); - opt[2][0]=0; - i=0; - SETHELP(WHERE); -/* -Allow Remote Sysop Access: - -If you want to be able to logon remotely with sysop access, set this -option to Yes. -*/ - i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0 - ,"Allow Remote Sysop Access",opt); - if(!i && !(sys_misc&SM_R_SYSOP)) { - sys_misc|=SM_R_SYSOP; - changes=1; } - else if(i==1 && sys_misc&SM_R_SYSOP) { - sys_misc&=~SM_R_SYSOP; - changes=1; } - break; - case 5: - strcpy(opt[0],"Yes"); - strcpy(opt[1],"No"); - opt[2][0]=0; - i=0; - SETHELP(WHERE); -/* -Echo Passwords Locally: - -If you want to passwords to be displayed locally, set this option to -Yes. -*/ - i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0 - ,"Echo Passwords Locally",opt); - if(!i && !(sys_misc&SM_ECHO_PW)) { - sys_misc|=SM_ECHO_PW; - changes=1; } - else if(i==1 && sys_misc&SM_ECHO_PW) { - sys_misc&=~SM_ECHO_PW; - changes=1; } - break; - case 6: - strcpy(opt[0],"Yes"); - strcpy(opt[1],"No"); - opt[2][0]=0; - i=0; - SETHELP(WHERE); -/* -Require Passwords Locally: - -If you want to passwords to be required when logged on locally, set this -option to Yes. -*/ - i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0 - ,"Require Passwords Locally",opt); - if(!i && !(sys_misc&SM_REQ_PW)) { - sys_misc|=SM_REQ_PW; - changes=1; } - else if(i==1 && sys_misc&SM_REQ_PW) { - sys_misc&=~SM_REQ_PW; - changes=1; } - break; - case 7: - strcpy(opt[0],"Yes"); - strcpy(opt[1],"No"); - opt[2][0]=0; - i=0; - SETHELP(WHERE); -/* -Short Sysop Page: - -If you would like the sysop page to be a short series of beeps rather -than continuous random tones, set this option to Yes. -*/ - i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0,"Short Sysop Page" - ,opt); - if(i==1 && sys_misc&SM_SHRTPAGE) { - sys_misc&=~SM_SHRTPAGE; - changes=1; } - else if(!i && !(sys_misc&SM_SHRTPAGE)) { - sys_misc|=SM_SHRTPAGE; - changes=1; } - break; - case 8: - strcpy(opt[0],"Yes"); - strcpy(opt[1],"No"); - opt[2][0]=0; - i=0; - SETHELP(WHERE); -/* -Sound Alarm on Error: - -If you would like to have an alarm sounded locally when a critical -system error has occured, set this option to Yes. -*/ - i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0 - ,"Sound Alarm on Error",opt); - if(i==1 && sys_misc&SM_ERRALARM) { - sys_misc&=~SM_ERRALARM; - changes=1; } - else if(!i && !(sys_misc&SM_ERRALARM)) { - sys_misc|=SM_ERRALARM; - changes=1; } - break; - case 9: - strcpy(opt[0],"Yes"); - strcpy(opt[1],"No"); - opt[2][0]=0; - i=1; - SETHELP(WHERE); -/* -Include Sysop Activity in System Statistics: - -If you want sysops to be included in the statistical data of the BBS, -set this option to Yes. The suggested setting for this option is -No so that statistical data will only reflect user usage and not -include sysop maintenance activity. -*/ - i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0 - ,"Include Sysop Activity in System Statistics" - ,opt); - if(!i && !(sys_misc&SM_SYSSTAT)) { - sys_misc|=SM_SYSSTAT; - changes=1; } - else if(i==1 && sys_misc&SM_SYSSTAT) { - sys_misc&=~SM_SYSSTAT; - changes=1; } - break; - case 10: - strcpy(opt[0],"Yes"); - strcpy(opt[1],"No"); - opt[2][0]=0; - i=1; - SETHELP(WHERE); -/* -Closed to New Users: - -If you want callers to be able to logon as New, set this option to No. -*/ - i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0 - ,"Closed to New Users",opt); - if(!i && !(sys_misc&SM_CLOSED)) { - sys_misc|=SM_CLOSED; - changes=1; } - else if(i==1 && sys_misc&SM_CLOSED) { - sys_misc&=~SM_CLOSED; - changes=1; } - break; - case 11: - strcpy(opt[0],"Yes"); - strcpy(opt[1],"No"); - opt[2][0]=0; - i=0; - SETHELP(WHERE); -/* -User Location in User Lists: - -If you want user locations (city, state) displayed in the user lists, -set this option to Yes. If this option is set to No, the user notes -(if they exist) are displayed in the user lists. -*/ - i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0 - ,"User Location (Instead of Note) in User Lists" - ,opt); - if(!i && !(sys_misc&SM_LISTLOC)) { - sys_misc|=SM_LISTLOC; - changes=1; } - else if(i==1 && sys_misc&SM_LISTLOC) { - sys_misc&=~SM_LISTLOC; - changes=1; } - break; - case 12: - strcpy(opt[0],"Yes"); - strcpy(opt[1],"No"); - opt[2][0]=0; - i=1; - SETHELP(WHERE); -/* -Military: - -If you would like the time-of-day to be displayed and entered in 24 hour -format always, set this option to Yes. -*/ - i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0 - ,"Use Military Time Format",opt); - if(!i && !(sys_misc&SM_MILITARY)) { - sys_misc|=SM_MILITARY; - changes=1; } - else if(i==1 && sys_misc&SM_MILITARY) { - sys_misc&=~SM_MILITARY; - changes=1; } - break; - case 13: - strcpy(opt[0],"Yes"); - strcpy(opt[1],"No"); - opt[2][0]=0; - i=1; - SETHELP(WHERE); -/* -European Date Format: - -If you would like dates to be displayed and entered in DD/MM/YY format -instead of MM/DD/YY format, set this option to Yes. -*/ - i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0 - ,"European Date Format",opt); - if(!i && !(sys_misc&SM_EURODATE)) { - sys_misc|=SM_EURODATE; - changes=1; } - else if(i==1 && sys_misc&SM_EURODATE) { - sys_misc&=~SM_EURODATE; - changes=1; } - break; - - case 14: - strcpy(opt[0],"Yes"); - strcpy(opt[1],"No"); - opt[2][0]=0; - i=1; - SETHELP(WHERE); -/* -User Expires When Out-of-time: - -If you want users to be set to Expired User Values if they run out of -time online, then set this option to Yes. -*/ - i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0 - ,"User Expires When Out-of-time",opt); - if(!i && !(sys_misc&SM_TIME_EXP)) { - sys_misc|=SM_TIME_EXP; - changes=1; } - else if(i==1 && sys_misc&SM_TIME_EXP) { - sys_misc&=~SM_TIME_EXP; - changes=1; } - break; - - case 15: - strcpy(opt[0],"Yes"); - strcpy(opt[1],"No"); - opt[2][0]=0; - i=1; - SETHELP(WHERE); -/* -Quick Validation Hot-Keys: - -If you would like to enable the Alt-# hot-keys for quick user -validation, set this option to Yes. -*/ - i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0 - ,"Quick Validation Hot-Keys",opt); - if(!i && !(sys_misc&SM_QVALKEYS)) { - sys_misc|=SM_QVALKEYS; - changes=1; } - else if(i==1 && sys_misc&SM_QVALKEYS) { - sys_misc&=~SM_QVALKEYS; - changes=1; } - break; - - } } - break; - case 9: /* New User Values */ - done=0; - while(!done) { - i=0; - sprintf(opt[i++],"%-27.27s%u","Level",new_level); - sprintf(opt[i++],"%-27.27s%s","Flag Set #1" - ,ltoaf(new_flags1,str)); - sprintf(opt[i++],"%-27.27s%s","Flag Set #2" - ,ltoaf(new_flags2,str)); - sprintf(opt[i++],"%-27.27s%s","Flag Set #3" - ,ltoaf(new_flags3,str)); - sprintf(opt[i++],"%-27.27s%s","Flag Set #4" - ,ltoaf(new_flags4,str)); - sprintf(opt[i++],"%-27.27s%s","Exemptions" - ,ltoaf(new_exempt,str)); - sprintf(opt[i++],"%-27.27s%s","Restrictions" - ,ltoaf(new_rest,str)); - sprintf(opt[i++],"%-27.27s%s","Expiration Days" - ,itoa(new_expire,str,10)); - - ultoac(new_cdt,str); - sprintf(opt[i++],"%-27.27s%s","Credits",str); - ultoac(new_min,str); - sprintf(opt[i++],"%-27.27s%s","Minutes",str); - sprintf(opt[i++],"%-27.27s%s","Editor" - ,new_xedit); - sprintf(opt[i++],"%-27.27s%s","Command Shell" - ,shell[new_shell]->code); - if(new_prot!=SP) - sprintf(str,"%c",new_prot); - else - strcpy(str,"None"); - sprintf(opt[i++],"%-27.27s%s","Download Protocol",str); - strcpy(opt[i++],"Default Toggles..."); - strcpy(opt[i++],"Question Toggles..."); - opt[i][0]=0; - SETHELP(WHERE); -/* -New User Values: - -This menu allows you to determine the default settings for new users. -*/ - switch(ulist(WIN_ACT|WIN_BOT|WIN_RHT,0,0,60,&new_dflt,0 - ,"New User Values",opt)) { - case -1: - done=1; - break; - case 0: - itoa(new_level,str,10); - SETHELP(WHERE); -/* -New User Security Level: - -This is the security level automatically given to new users. -*/ - uinput(WIN_SAV|WIN_MID,0,0,"Security Level" - ,str,2,K_EDIT|K_NUMBER); - new_level=atoi(str); - break; - case 1: - ltoaf(new_flags1,str); - SETHELP(WHERE); -/* -New User Security Flags: - -These are the security flags automatically given to new users. -*/ - uinput(WIN_SAV|WIN_MID,0,0,"Flag Set #1" - ,str,26,K_EDIT|K_UPPER|K_ALPHA); - new_flags1=aftol(str); - break; - case 2: - ltoaf(new_flags2,str); - SETHELP(WHERE); -/* -New User Security Flags: - -These are the security flags automatically given to new users. -*/ - uinput(WIN_SAV|WIN_MID,0,0,"Flag Set #2" - ,str,26,K_EDIT|K_UPPER|K_ALPHA); - new_flags2=aftol(str); - break; - case 3: - ltoaf(new_flags3,str); - SETHELP(WHERE); -/* -New User Security Flags: - -These are the security flags automatically given to new users. -*/ - uinput(WIN_SAV|WIN_MID,0,0,"Flag Set #3" - ,str,26,K_EDIT|K_UPPER|K_ALPHA); - new_flags3=aftol(str); - break; - case 4: - ltoaf(new_flags4,str); - SETHELP(WHERE); -/* -New User Security Flags: - -These are the security flags automatically given to new users. -*/ - uinput(WIN_SAV|WIN_MID,0,0,"Flag Set #4" - ,str,26,K_EDIT|K_UPPER|K_ALPHA); - new_flags4=aftol(str); - break; - case 5: - ltoaf(new_exempt,str); - SETHELP(WHERE); -/* -New User Exemption Flags: - -These are the exemptions that are automatically given to new users. -*/ - uinput(WIN_SAV|WIN_MID,0,0,"Exemption Flags",str,26 - ,K_EDIT|K_UPPER|K_ALPHA); - new_exempt=aftol(str); - break; - case 6: - ltoaf(new_rest,str); - SETHELP(WHERE); -/* -New User Restriction Flags: - -These are the restrictions that are automatically given to new users. -*/ - uinput(WIN_SAV|WIN_MID,0,0,"Restriction Flags",str,26 - ,K_EDIT|K_UPPER|K_ALPHA); - new_rest=aftol(str); - break; - case 7: - itoa(new_expire,str,10); - SETHELP(WHERE); -/* -New User Expiration Days: - -If you wish new users to have an automatic expiration date, set this -value to the number of days before the user will expire. To disable -New User expiration, set this value to 0. -*/ - uinput(WIN_SAV|WIN_MID,0,0,"Expiration Days",str,4 - ,K_EDIT|K_NUMBER); - new_expire=atoi(str); - break; - case 8: - ultoa(new_cdt,str,10); - SETHELP(WHERE); -/* -New User Credits: - -This is the amount of credits that are automatically given to new users. -*/ - uinput(WIN_SAV|WIN_MID,0,0,"Credits",str,10 - ,K_EDIT|K_NUMBER); - new_cdt=atol(str); - break; - case 9: - ultoa(new_min,str,10); - SETHELP(WHERE); -/* -New User Minutes: - -This is the number of extra minutes automatically given to new users. -*/ - uinput(WIN_SAV|WIN_MID,0,0,"Minutes (Time Credit)" - ,str,10,K_EDIT|K_NUMBER); - new_min=atol(str); - break; - case 10: - if(!total_xedits) { - umsg("No External Editors Configured"); - break; } - strcpy(opt[0],"Internal"); - for(i=1;i<=total_xedits;i++) - strcpy(opt[i],xedit[i-1]->code); - opt[i][0]=0; - i=0; - savnum=0; - SETHELP(WHERE); -/* -New User Editor: - -You can use this option to select the default editor for new users. -*/ - i=ulist(WIN_SAV|WIN_RHT,2,1,13,&i,0,"Editors",opt); - if(i==-1) - break; - changes=1; - if(i && i<=total_xedits) - sprintf(new_xedit,"%-.8s",xedit[i-1]->code); - else - new_xedit[0]=0; - break; - case 11: - for(i=0;icode); - opt[i][0]=0; - i=0; - savnum=0; - SETHELP(WHERE); -/* -New User Command Shell: - -You can use this option to select the default command shell for new -users. -*/ - i=ulist(WIN_SAV|WIN_RHT,2,1,13,&i,0 - ,"Command Shells",opt); - if(i==-1) - break; - new_shell=i; - changes=1; - break; - case 12: - SETHELP(WHERE); -/* -New User Default Download Protocol: - -This option allows you to set the default download protocol of new users -(protocol command key or BLANK for no default). -*/ - sprintf(str,"%c",new_prot); - uinput(WIN_SAV|WIN_MID,0,0 - ,"Default Download Protocol (SPACE=Disabled)" - ,str,1,K_EDIT|K_UPPER); - new_prot=str[0]; - if(new_prot0) { - if(str[strlen(str)-1]!='\\') - strcat(str,"\\"); - strcat(str,"DATA\\"); - strcpy(data_dir,str); } - break; - case 2: - SETHELP(WHERE); -/* -Exec Directory Parent: - -The Synchronet exec directory contains executable files that your BBS -executes. This directory does not need to be in your DOS search path. -If you place programs in this directory for the BBS to execute, you -should place the %! abreviation for this exec directory at the -beginning of the command line. - -This option allows you to change the parent of your exec directory. -The \EXEC\ suffix (sub-directory) cannot be changed or removed. -*/ - strcpy(str,exec_dir); - if(strstr(str,"\\EXEC\\")!=NULL) - *strstr(str,"\\EXEC\\")=0; - if(uinput(WIN_MID|WIN_SAV,0,9,"Exec Dir Parent" - ,str,50,K_EDIT|K_UPPER)>0) { - if(str[strlen(str)-1]!='\\') - strcat(str,"\\"); - strcat(str,"EXEC\\"); - strcpy(exec_dir,str); } - break; - case 3: - strcpy(str,new_sif); - SETHELP(WHERE); -/* -SIF Questionnaire for User Input: - -This is the name of a SIF questionnaire file that resides your text -directory that all users will be prompted to answer. -*/ - uinput(WIN_MID|WIN_SAV,0,0 - ,"SIF Questionnaire for User Input" - ,str,8,K_UPPER|K_EDIT); - if(!str[0] || code_ok(str)) - strcpy(new_sif,str); - else - umsg("Invalid SIF Name"); - break; - case 4: - strcpy(str,new_sof); - SETHELP(WHERE); -/* -SIF Questionnaire for Reviewing User Input: - -This is the SIF file used to review the input of users from the user -edit function. -*/ - uinput(WIN_MID|WIN_SAV,0,0 - ,"SIF Questionnaire for Reviewing User Input" - ,str,8,K_UPPER|K_EDIT); - if(!str[0] || code_ok(str)) - strcpy(new_sof,str); - else - umsg("Invalid SIF Name"); - break; - case 5: - SETHELP(WHERE); -/* -Credits Per Dollar: - -This is the monetary value of a credit (How many credits per dollar). -This value should be a power of 2 (1, 2, 4, 8, 16, 32, 64, 128, etc.) -since credits are usually converted by 100 kilobyte (102400) blocks. -To make a dollar worth two megabytes of credits, set this value to -2,097,152 (a megabyte is 1024*1024 or 1048576). -*/ - ultoa(cdt_per_dollar,str,10); - uinput(WIN_MID|WIN_SAV,0,0 - ,"Credits Per Dollar",str,10,K_NUMBER|K_EDIT); - cdt_per_dollar=atol(str); - break; - case 6: - SETHELP(WHERE); -/* -Minutes Per 100K Credits: - -This is the value of a minute of time online. This field is the number -of minutes to give the user in exchange for each 100K credit block. -*/ - sprintf(str,"%u",cdt_min_value); - uinput(WIN_MID|WIN_SAV,0,0 - ,"Minutes Per 100K Credits",str,5,K_NUMBER|K_EDIT); - cdt_min_value=atoi(str); - break; - case 7: - SETHELP(WHERE); -/* -Maximum Number of Minutes User Can Have: - -This value is the maximum total number of minutes a user can have. If a -user has this number of minutes or more, they will not be allowed to -convert credits into minutes. A sysop can add minutes to a user's -account regardless of this maximum. If this value is set to 0, users -will have no limit on the total number of minutes they can have. -*/ - sprintf(str,"%lu",max_minutes); - uinput(WIN_MID|WIN_SAV,0,0 - ,"Maximum Number of Minutes a User Can Have " - "(0=No Limit)" - ,str,10,K_NUMBER|K_EDIT); - max_minutes=atol(str); - break; - case 8: - SETHELP(WHERE); -/* -Warning Days Till Expire: - -If a user's account will expire in this many days or less, the user will -be notified at logon. Setting this value to 0 disables the warning -completely. -*/ - sprintf(str,"%u",sys_exp_warn); - uinput(WIN_MID|WIN_SAV,0,0 - ,"Warning Days Till Expire",str,5,K_NUMBER|K_EDIT); - sys_exp_warn=atoi(str); - break; - case 9: - SETHELP(WHERE); -/* -Default Status Line: - -This is the number of the status line format that will be the default -display on the bottom line of the screen. For explanation of the -available status lines, see the sysop documentation. -*/ - sprintf(str,"%u",sys_def_stat); - uinput(WIN_MID|WIN_SAV,0,0 - ,"Default Status Line",str,5,K_NUMBER|K_EDIT); - sys_def_stat=atoi(str); - break; - case 10: - SETHELP(WHERE); -/* -Last Displayed Node: - -This is the number of the last node to display to users in node lists. -This allows the sysop to define the higher numbered nodes as invisible -to users. -*/ - sprintf(str,"%u",sys_lastnode); - uinput(WIN_MID|WIN_SAV,0,0 - ,"Last Displayed Node",str,5,K_NUMBER|K_EDIT); - sys_lastnode=atoi(str); - break; - case 11: - SETHELP(WHERE); -/* -First Local Auto-Node: - -This is the number of the first node in the search for an available -node for local login using the AUTONODE utility. -*/ - sprintf(str,"%u",sys_autonode); - uinput(WIN_MID|WIN_SAV,0,0 - ,"First Local Auto-Node",str,5,K_NUMBER|K_EDIT); - sys_autonode=atoi(str); - break; - case 12: - SETHELP(WHERE); -/* -Phone Number Format: - -This is the format used for phone numbers in your local calling -area. Use N for number positions, A for alphabetic, or ! for any -character. All other characters will be static in the phone number -format. An example for North American phone numbers is NNN-NNN-NNNN. -*/ - uinput(WIN_MID|WIN_SAV,0,0 - ,"Phone Number Format",sys_phonefmt - ,LEN_PHONE,K_UPPER|K_EDIT); - break; - case 13: - getar("Sysop Chat",sys_chat_ar); - break; - } } - break; - case 11: /* Loadable Modules */ - done=0; - k=0; - while(!done) { - i=0; - sprintf(opt[i++],"%-16.16s%s","Login",login_mod); - sprintf(opt[i++],"%-16.16s%s","Logon Event",logon_mod); - sprintf(opt[i++],"%-16.16s%s","Sync Event",sync_mod); - sprintf(opt[i++],"%-16.16s%s","Logoff Event",logoff_mod); - sprintf(opt[i++],"%-16.16s%s","Logout Event",logout_mod); - sprintf(opt[i++],"%-16.16s%s","New User Event",newuser_mod); - sprintf(opt[i++],"%-16.16s%s","Expired User",expire_mod); - opt[i][0]=0; - savnum=0; - SETHELP(WHERE); -/* -Loadable Modules: - -Baja modules (.BIN files) can be automatically loaded and executed -during certain system functions. The name of the module can be specified -for each of the available triggers listed here. - -Login Required module for remote and local logins (online) -Logon Executed as an event during logon procedure (online) -Sync Executed when nodes are periodically synchronized (online) -Logoff Executed during logoff procedure (online) -Logout Executed during logout procedure (offline) -New User Executed at end of new user procedure (online) -Expired User Executed during daily event when user expires (offline) -*/ - switch(ulist(WIN_ACT|WIN_T2B|WIN_RHT,0,0,32,&k,0 - ,"Loadable Modules",opt)) { - - case -1: - done=1; - break; - - case 0: - uinput(WIN_MID|WIN_SAV,0,0,"Login Module",login_mod,8 - ,K_EDIT|K_UPPER); - break; - case 1: - uinput(WIN_MID|WIN_SAV,0,0,"Logon Module",logon_mod,8 - ,K_EDIT|K_UPPER); - break; - case 2: - uinput(WIN_MID|WIN_SAV,0,0,"Synchronize Module" - ,sync_mod,8,K_EDIT|K_UPPER); - break; - case 3: - uinput(WIN_MID|WIN_SAV,0,0,"Logoff Module",logoff_mod,8 - ,K_EDIT|K_UPPER); - break; - case 4: - uinput(WIN_MID|WIN_SAV,0,0,"Logout Module",logout_mod,8 - ,K_EDIT|K_UPPER); - break; - case 5: - uinput(WIN_MID|WIN_SAV,0,0,"New User Module" - ,newuser_mod,8,K_EDIT|K_UPPER); - break; - case 6: - uinput(WIN_MID|WIN_SAV,0,0,"Expired User Module" - ,expire_mod,8,K_EDIT|K_UPPER); - break; - - } } - break; - - case 12: /* Security Levels */ - dflt=bar=0; - k=0; - while(1) { - for(i=0;i<100;i++) { - sprintf(tmp,"%luk",level_freecdtperday[i]/1024L); - sprintf(opt[i],"%-2d %5d %5d " - "%5d %5d %5d %5d %6s %7s %2u",i - ,level_timeperday[i],level_timepercall[i] - ,level_callsperday[i],level_emailperday[i] - ,level_postsperday[i],level_linespermsg[i] - ,tmp - ,level_misc[i]&LEVEL_EXPTOVAL ? "Val Set" : "Level" - ,level_misc[i]&(LEVEL_EXPTOVAL|LEVEL_EXPTOLVL) ? - level_expireto[i] : expired_level); } - opt[i][0]=0; - i=0; - SETHELP(WHERE); -/* -Security Level Values: - -This menu allows you to change the security options for every possible -security level from 0 to 99. The available options for each level are: - - Time Per Day : Maximum online time per day - Time Per Call : Maximum online time per call - Calls Per Day : Maximum number of calls per day - Email Per Day : Maximum number of email per day - Posts Per Day : Maximum number of posts per day - Lines Per Message : Maximum number of lines per message - Free Credits Per Day : Number of free credits per day - Expire To : Level or validation set to Expire to -*/ - i=ulist(WIN_RHT|WIN_ACT,0,3,0,&dflt,&bar - ,"Level T/D T/C C/D E/D P/D L/M F/D " - "Expire To",opt); - if(i==-1) - break; - while(1) { - sprintf(str,"Security Level %d Values",i); - j=0; - sprintf(opt[j++],"%-22.22s%-5u","Time Per Day" - ,level_timeperday[i]); - sprintf(opt[j++],"%-22.22s%-5u","Time Per Call" - ,level_timepercall[i]); - sprintf(opt[j++],"%-22.22s%-5u","Calls Per Day" - ,level_callsperday[i]); - sprintf(opt[j++],"%-22.22s%-5u","Email Per Day" - ,level_emailperday[i]); - sprintf(opt[j++],"%-22.22s%-5u","Posts Per Day" - ,level_postsperday[i]); - sprintf(opt[j++],"%-22.22s%-5u","Lines Per Message" - ,level_linespermsg[i]); - sprintf(tmp,"%luk",level_freecdtperday[i]/1024L); - sprintf(opt[j++],"%-22.22s%-6s","Free Credits Per Day" - ,tmp); - sprintf(opt[j++],"%-22.22s%s %u","Expire To" - ,level_misc[i]&LEVEL_EXPTOVAL ? "Validation Set" - : "Level" - ,level_misc[i]&(LEVEL_EXPTOVAL|LEVEL_EXPTOLVL) ? - level_expireto[i] : expired_level); - opt[j][0]=0; - savnum=0; - j=ulist(WIN_RHT|WIN_SAV|WIN_ACT,2,1,0,&k,0 - ,str,opt); - if(j==-1) - break; - switch(j) { - case 0: - uinput(WIN_MID|WIN_SAV,0,0 - ,"Total Time Allowed Per Day" - ,itoa(level_timeperday[i],tmp,10),3 - ,K_NUMBER|K_EDIT); - level_timeperday[i]=atoi(tmp); - if(level_timeperday[i]>500) - level_timeperday[i]=500; - break; - case 1: - uinput(WIN_MID|WIN_SAV,0,0 - ,"Time Allowed Per Call" - ,itoa(level_timepercall[i],tmp,10),3 - ,K_NUMBER|K_EDIT); - level_timepercall[i]=atoi(tmp); - if(level_timepercall[i]>500) - level_timepercall[i]=500; - break; - case 2: - uinput(WIN_MID|WIN_SAV,0,0 - ,"Calls Allowed Per Day" - ,itoa(level_callsperday[i],tmp,10),4 - ,K_NUMBER|K_EDIT); - level_callsperday[i]=atoi(tmp); - break; - case 3: - uinput(WIN_MID|WIN_SAV,0,0 - ,"Email Allowed Per Day" - ,itoa(level_emailperday[i],tmp,10),4 - ,K_NUMBER|K_EDIT); - level_emailperday[i]=atoi(tmp); - break; - case 4: - uinput(WIN_MID|WIN_SAV,0,0 - ,"Posts Allowed Per Day" - ,itoa(level_postsperday[i],tmp,10),4 - ,K_NUMBER|K_EDIT); - level_postsperday[i]=atoi(tmp); - break; - case 5: - uinput(WIN_MID|WIN_SAV,0,0 - ,"Lines Allowed Per Message (Post/E-mail)" - ,itoa(level_linespermsg[i],tmp,10),4 - ,K_NUMBER|K_EDIT); - level_linespermsg[i]=atoi(tmp); - break; - case 6: - uinput(WIN_MID|WIN_SAV,0,0 - ,"Free Credits Per Day (in Kilobytes)" - ,ultoa(level_freecdtperday[i]/1024L,tmp,10),8 - ,K_EDIT|K_UPPER); - level_freecdtperday[i]=atol(tmp)*1024L; - break; - case 7: - j=0; - sprintf(opt[j++],"Default Expired Level " - "(Currently %u)",expired_level); - sprintf(opt[j++],"Specific Level"); - sprintf(opt[j++],"Quick-Validation Set"); - opt[j][0]=0; - j=0; - sprintf(str,"Level %u Expires To",i); - savnum=1; - j=ulist(WIN_SAV,2,1,0,&j,0 - ,str,opt); - if(j==-1) - break; - if(j==0) { - level_misc[i]&= - ~(LEVEL_EXPTOLVL|LEVEL_EXPTOVAL); - changes=1; - break; } - if(j==1) { - level_misc[i]&=~LEVEL_EXPTOVAL; - level_misc[i]|=LEVEL_EXPTOLVL; - changes=1; - uinput(WIN_MID|WIN_SAV,0,0 - ,"Expired Level" - ,itoa(level_expireto[i],tmp,10),2 - ,K_EDIT|K_NUMBER); - level_expireto[i]=atoi(tmp); - break; } - level_misc[i]&=~LEVEL_EXPTOLVL; - level_misc[i]|=LEVEL_EXPTOVAL; - uinput(WIN_MID|WIN_SAV,0,0 - ,"Quick-Validation Set to Expire To" - ,itoa(level_expireto[i],tmp,10),1 - ,K_EDIT|K_NUMBER); - level_expireto[i]=atoi(tmp); - break; - } } } - break; - case 13: /* Expired Acccount Values */ - dflt=0; - done=0; - while(!done) { - i=0; - sprintf(opt[i++],"%-27.27s%u","Level",expired_level); - sprintf(opt[i++],"%-27.27s%s","Flag Set #1 to Remove" - ,ltoaf(expired_flags1,str)); - sprintf(opt[i++],"%-27.27s%s","Flag Set #2 to Remove" - ,ltoaf(expired_flags2,str)); - sprintf(opt[i++],"%-27.27s%s","Flag Set #3 to Remove" - ,ltoaf(expired_flags3,str)); - sprintf(opt[i++],"%-27.27s%s","Flag Set #4 to Remove" - ,ltoaf(expired_flags4,str)); - sprintf(opt[i++],"%-27.27s%s","Exemptions to Remove" - ,ltoaf(expired_exempt,str)); - sprintf(opt[i++],"%-27.27s%s","Restrictions to Add" - ,ltoaf(expired_rest,str)); - opt[i][0]=0; - SETHELP(WHERE); -/* -Expired Account Values: - -If a user's account expires, the security levels for that account will -be modified according to the settings of this menu. The Main Level and -Transfer Level will be set to the values listed on this menu. The Main -Flags, Transfer Flags, and Exemptions listed on this menu will be -removed from the account if they are set. The Restrictions listed will -be added to the account. -*/ - switch(ulist(WIN_ACT|WIN_BOT|WIN_RHT,0,0,60,&dflt,0 - ,"Expired Account Values",opt)) { - case -1: - done=1; - break; - case 0: - itoa(expired_level,str,10); - SETHELP(WHERE); -/* -Expired Account Security Level: - -This is the security level automatically given to expired user accounts. -*/ - uinput(WIN_SAV|WIN_MID,0,0,"Security Level" - ,str,2,K_EDIT|K_NUMBER); - expired_level=atoi(str); - break; - case 1: - ltoaf(expired_flags1,str); - SETHELP(WHERE); -/* -Expired Security Flags to Remove: - -These are the security flags automatically removed when a user account -has expired. -*/ - uinput(WIN_SAV|WIN_MID,0,0,"Flags Set #1" - ,str,26,K_EDIT|K_UPPER|K_ALPHA); - expired_flags1=aftol(str); - break; - case 2: - ltoaf(expired_flags2,str); - SETHELP(WHERE); -/* -Expired Security Flags to Remove: - -These are the security flags automatically removed when a user account -has expired. -*/ - uinput(WIN_SAV|WIN_MID,0,0,"Flags Set #2" - ,str,26,K_EDIT|K_UPPER|K_ALPHA); - expired_flags2=aftol(str); - break; - case 3: - ltoaf(expired_flags3,str); - SETHELP(WHERE); -/* -Expired Security Flags to Remove: - -These are the security flags automatically removed when a user account -has expired. -*/ - uinput(WIN_SAV|WIN_MID,0,0,"Flags Set #3" - ,str,26,K_EDIT|K_UPPER|K_ALPHA); - expired_flags3=aftol(str); - break; - case 4: - ltoaf(expired_flags4,str); - SETHELP(WHERE); -/* -Expired Security Flags to Remove: - -These are the security flags automatically removed when a user account -has expired. -*/ - uinput(WIN_SAV|WIN_MID,0,0,"Flags Set #4" - ,str,26,K_EDIT|K_UPPER|K_ALPHA); - expired_flags4=aftol(str); - break; - case 5: - ltoaf(expired_exempt,str); - SETHELP(WHERE); -/* -Expired Exemption Flags to Remove: - -These are the exemptions that are automatically removed from a user -account if it expires. -*/ - uinput(WIN_SAV|WIN_MID,0,0,"Exemption Flags",str,26 - ,K_EDIT|K_UPPER|K_ALPHA); - expired_exempt=aftol(str); - break; - case 6: - ltoaf(expired_rest,str); - SETHELP(WHERE); -/* -Expired Restriction Flags to Add: - -These are the restrictions that are automatically added to a user -account if it expires. -*/ - uinput(WIN_SAV|WIN_MID,0,0,"Restriction Flags",str,26 - ,K_EDIT|K_UPPER|K_ALPHA); - expired_rest=aftol(str); - break; } } - break; - case 14: /* Quick-Validation Values */ - dflt=0; - k=0; - while(1) { - for(i=0;i<10;i++) - sprintf(opt[i],"%d SL: %-2d F1: %s" - ,i,val_level[i],ltoaf(val_flags1[i],str)); - opt[i][0]=0; - i=0; - SETHELP(WHERE); -/* -Quick-Validation Values: - -This is a list of the ten quick-validation sets. These sets are used to -quickly set a user's security values (Level, Flags, Exemptions, -Restrictions, Expiration Date, and Credits) with one key stroke. The -user's expiration date may be extended and additional credits may also -be added using quick-validation sets. - -Holding down  ALT  and one of the number keys (1-9) while a user -is online, automatically sets his or user security values to the -quick-validation set for that number key. - -From within the User Edit function, a sysop can use the Validate -User command and select from this quick-validation list to change a -user's security values with very few key-strokes. -*/ - savnum=0; - i=ulist(WIN_RHT|WIN_BOT|WIN_ACT|WIN_SAV,0,0,0,&dflt,0 - ,"Quick-Validation Values",opt); - if(i==-1) - break; - sprintf(str,"Quick-Validation Set %d",i); - savnum=0; - while(1) { - j=0; - sprintf(opt[j++],"%-22.22s%u","Level",val_level[i]); - sprintf(opt[j++],"%-22.22s%s","Flag Set #1" - ,ltoaf(val_flags1[i],tmp)); - sprintf(opt[j++],"%-22.22s%s","Flag Set #2" - ,ltoaf(val_flags2[i],tmp)); - sprintf(opt[j++],"%-22.22s%s","Flag Set #3" - ,ltoaf(val_flags3[i],tmp)); - sprintf(opt[j++],"%-22.22s%s","Flag Set #4" - ,ltoaf(val_flags4[i],tmp)); - sprintf(opt[j++],"%-22.22s%s","Exemptions" - ,ltoaf(val_exempt[i],tmp)); - sprintf(opt[j++],"%-22.22s%s","Restrictions" - ,ltoaf(val_rest[i],tmp)); - sprintf(opt[j++],"%-22.22s%u days","Extend Expiration" - ,val_expire[i]); - sprintf(opt[j++],"%-22.22s%lu","Additional Credits" - ,val_cdt[i]); - opt[j][0]=0; - savnum=1; - j=ulist(WIN_RHT|WIN_SAV|WIN_ACT,2,1,0,&k,0 - ,str,opt); - if(j==-1) - break; - switch(j) { - case 0: - uinput(WIN_MID|WIN_SAV,0,0 - ,"Level" - ,itoa(val_level[i],tmp,10),2 - ,K_NUMBER|K_EDIT); - val_level[i]=atoi(tmp); - break; - case 1: - uinput(WIN_MID|WIN_SAV,0,0 - ,"Flag Set #1" - ,ltoaf(val_flags1[i],tmp),26 - ,K_UPPER|K_ALPHA|K_EDIT); - val_flags1[i]=aftol(tmp); - break; - case 2: - uinput(WIN_MID|WIN_SAV,0,0 - ,"Flag Set #2" - ,ltoaf(val_flags2[i],tmp),26 - ,K_UPPER|K_ALPHA|K_EDIT); - val_flags2[i]=aftol(tmp); - break; - case 3: - uinput(WIN_MID|WIN_SAV,0,0 - ,"Flag Set #3" - ,ltoaf(val_flags3[i],tmp),26 - ,K_UPPER|K_ALPHA|K_EDIT); - val_flags3[i]=aftol(tmp); - break; - case 4: - uinput(WIN_MID|WIN_SAV,0,0 - ,"Flag Set #4" - ,ltoaf(val_flags4[i],tmp),26 - ,K_UPPER|K_ALPHA|K_EDIT); - val_flags4[i]=aftol(tmp); - break; - case 5: - uinput(WIN_MID|WIN_SAV,0,0 - ,"Exemption Flags" - ,ltoaf(val_exempt[i],tmp),26 - ,K_UPPER|K_ALPHA|K_EDIT); - val_exempt[i]=aftol(tmp); - break; - case 6: - uinput(WIN_MID|WIN_SAV,0,0 - ,"Restriction Flags" - ,ltoaf(val_rest[i],tmp),26 - ,K_UPPER|K_ALPHA|K_EDIT); - val_rest[i]=aftol(tmp); - break; - case 7: - uinput(WIN_MID|WIN_SAV,0,0 - ,"Days to Extend Expiration" - ,itoa(val_expire[i],tmp,10),4 - ,K_NUMBER|K_EDIT); - val_expire[i]=atoi(tmp); - break; - case 8: - uinput(WIN_MID|WIN_SAV,0,0 - ,"Additional Credits" - ,ultoa(val_cdt[i],tmp,10),10 - ,K_NUMBER|K_EDIT); - val_cdt[i]=atol(tmp); - break; } } } - break; } } - -} +#line 2 "SCFGSYS.C" + +/* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */ + +#include "scfg.h" + +void sys_cfg(void) +{ + static int sys_dflt,adv_dflt,tog_dflt,new_dflt; + char str[81],str2[81],done=0,*dupehelp; + int i,j,k,dflt,bar,savchanges; + +while(1) { + i=0; + sprintf(opt[i++],"%-33.33s%s","BBS Name",sys_name); + sprintf(opt[i++],"%-33.33s%s","Location",sys_location); + sprintf(opt[i++],"%-33.33s%s","Operator",sys_op); + sprintf(opt[i++],"%-33.33s%s","Password",sys_pass); + + sprintf(str,"%s Password" + ,sys_misc&SM_PWEDIT && sys_pwdays ? "Users Must Change" + : sys_pwdays ? "Users Get New Random" : "Users Can Change"); + if(sys_pwdays) + sprintf(tmp,"Every %u Days",sys_pwdays); + else if(sys_misc&SM_PWEDIT) + strcpy(tmp,"Yes"); + else + strcpy(tmp,"No"); + sprintf(opt[i++],"%-33.33s%s",str,tmp); + + sprintf(opt[i++],"%-33.33s%u","Days to Preserve Deleted Users" + ,sys_deldays); + sprintf(opt[i++],"%-33.33s%s","Maximum Days of Inactivity" + ,sys_autodel ? itoa(sys_autodel,tmp,10) : "Unlimited"); + sprintf(opt[i++],"%-33.33s%s","New User Password",new_pass); + + strcpy(opt[i++],"Toggle Options..."); + strcpy(opt[i++],"New User Values..."); + strcpy(opt[i++],"Advanced Options..."); + strcpy(opt[i++],"Loadable Modules..."); + strcpy(opt[i++],"Security Level Values..."); + strcpy(opt[i++],"Expired Account Values..."); + strcpy(opt[i++],"Quick-Validation Values..."); + opt[i][0]=0; + SETHELP(WHERE); +/* +System Configuration: + +This menu contains options and sub-menus of options that affect the +entire system. +*/ + switch(ulist(WIN_ORG|WIN_ACT|WIN_CHE,0,0,72,&sys_dflt,0 + ,"System Configuration",opt)) { + case -1: + i=save_changes(WIN_MID); + if(i==-1) + break; + if(!i) + write_main_cfg(); + return; + case 0: + SETHELP(WHERE); +/* +BBS Name: + +This is the name of the BBS. +*/ + uinput(WIN_MID,0,0,"BBS Name",sys_name,40,K_EDIT); + break; + case 1: + SETHELP(WHERE); +/* +System Location: + +This is the location of the BBS. The format is flexible, but it is +suggested you use the City, State format for clarity. +*/ + uinput(WIN_MID,0,0,"Location",sys_location,40,K_EDIT); + break; + case 2: + SETHELP(WHERE); +/* +System Operator: + +This is the name or alias of the system operator. This does not have to +be the same as user #1. This field is used for documentary purposes +only. +*/ + uinput(WIN_MID,0,0,"System Operator",sys_op,40,K_EDIT); + break; + case 3: + SETHELP(WHERE); +/* +System Password: + +This is an extra security password required for sysop logon and certain +sysop functions. This password should be something not easily guessed +and should be kept absolutely confidential. This password must be +entered at the SY: prompt. +*/ + uinput(WIN_MID,0,0,"System Password",sys_pass,40,K_EDIT|K_UPPER); + break; + case 4: + strcpy(opt[0],"Yes"); + strcpy(opt[1],"No"); + opt[2][0]=0; + i=1; + SETHELP(WHERE); +/* +Allow Users to Change Their Password: + +If you want the users of your system to have the option of changing +their password to a string of their choice, set this option to Yes. +For the highest level of security, set this option to No. +*/ + i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0 + ,"Allow Users to Change Their Password",opt); + if(!i && !(sys_misc&SM_PWEDIT)) { + sys_misc|=SM_PWEDIT; + changes=1; } + else if(i==1 && sys_misc&SM_PWEDIT) { + sys_misc&=~SM_PWEDIT; + changes=1; } + i=0; + SETHELP(WHERE); +/* +Force Periodic Password Changes: + +If you want your users to be forced to change their passwords +periodically, select Yes. +*/ + i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0 + ,"Force Periodic Password Changes",opt); + if(!i) { + itoa(sys_pwdays,str,10); + SETHELP(WHERE); +/* +Maximum Days Between Password Changes: + +Enter the maximum number of days allowed between password changes. +If a user has not voluntarily changed his or her password in this +many days, he or she will be forced to change their password upon +logon. +*/ + uinput(WIN_MID,0,0,"Maximum Days Between Password Changes" + ,str,5,K_NUMBER|K_EDIT); + sys_pwdays=atoi(str); } + else if(i==1 && sys_pwdays) { + sys_pwdays=0; + changes=1; } + + break; + case 5: + sprintf(str,"%u",sys_deldays); + SETHELP(WHERE); +/* +Days Since Last Logon to Preserve Deleted Users: + +Deleted user slots can be undeleted until the slot is written over +by a new user. If you want deleted user slots to be preserved for period +of time since their last logon, set this value to the number of days to +keep new users from taking over a deleted user's slot. +*/ + uinput(WIN_MID,0,0,"Days Since Last Logon to Preserve Deleted Users" + ,str,5,K_EDIT|K_NUMBER); + sys_deldays=atoi(str); + break; + case 6: + sprintf(str,"%u",sys_autodel); + SETHELP(WHERE); +/* +Maximum Days of Inactivity Before Auto-Deletion: + +If you want users that haven't logged on in certain period of time to +be automatically deleted, set this value to the maximum number of days +of inactivity before the user is deleted. Setting this value to 0 +disables this feature. + +Users with the P exemption will not be deleted due to inactivity. +*/ + uinput(WIN_MID,0,0,"Maximum Days of Inactivity Before Auto-Deletion" + ,str,5,K_EDIT|K_NUMBER); + sys_autodel=atoi(str); + break; + case 7: + SETHELP(WHERE); +/* +New User Password: + +If you want callers to only be able to logon as New if they know a +certain password, enter that password here. If you want any caller to +be able to logon as New, leave this option blank. +*/ + uinput(WIN_MID,0,0,"New User Password",new_pass,40 + ,K_EDIT|K_UPPER); + break; + case 8: /* Toggle Options */ + done=0; + while(!done) { + i=0; + sprintf(opt[i++],"%-33.33s%s","Allow Aliases" + ,uq&UQ_ALIASES ? "Yes" : "No"); + sprintf(opt[i++],"%-33.33s%s","Allow Time Banking" + ,sys_misc&SM_TIMEBANK ? "Yes" : "No"); + sprintf(opt[i++],"%-33.33s%s","Allow Credit Conversions" + ,sys_misc&SM_NOCDTCVT ? "No" : "Yes"); + sprintf(opt[i++],"%-33.33s%s","Allow Local Sysop Access" + ,sys_misc&SM_L_SYSOP ? "Yes" : "No"); + sprintf(opt[i++],"%-33.33s%s","Allow Remote Sysop Access" + ,sys_misc&SM_R_SYSOP ? "Yes" : "No"); + sprintf(opt[i++],"%-33.33s%s","Echo Passwords Locally" + ,sys_misc&SM_ECHO_PW ? "Yes" : "No"); + sprintf(opt[i++],"%-33.33s%s","Require Passwords Locally" + ,sys_misc&SM_REQ_PW ? "Yes" : "No"); + sprintf(opt[i++],"%-33.33s%s","Short Sysop Page" + ,sys_misc&SM_SHRTPAGE ? "Yes" : "No"); + sprintf(opt[i++],"%-33.33s%s","Sound Alarm on Error" + ,sys_misc&SM_ERRALARM ? "Yes" : "No"); + sprintf(opt[i++],"%-33.33s%s","Include Sysop in Statistics" + ,sys_misc&SM_SYSSTAT ? "Yes" : "No"); + sprintf(opt[i++],"%-33.33s%s","Closed to New Users" + ,sys_misc&SM_CLOSED ? "Yes" : "No"); + sprintf(opt[i++],"%-33.33s%s","Use Location in User Lists" + ,sys_misc&SM_LISTLOC ? "Yes" : "No"); + sprintf(opt[i++],"%-33.33s%s","Military (24 hour) Time Format" + ,sys_misc&SM_MILITARY ? "Yes" : "No"); + sprintf(opt[i++],"%-33.33s%s","European Date Format (DD/MM/YY)" + ,sys_misc&SM_EURODATE ? "Yes" : "No"); + sprintf(opt[i++],"%-33.33s%s","User Expires When Out-of-time" + ,sys_misc&SM_TIME_EXP ? "Yes" : "No"); + sprintf(opt[i++],"%-33.33s%s","Quick Validation Hot-Keys" + ,sys_misc&SM_QVALKEYS ? "Yes" : "No"); + opt[i][0]=0; + savnum=0; + SETHELP(WHERE); +/* +System Toggle Options: + +This is a menu of system related options that can be toggled between +two or more states, such as Yes and No. +*/ + switch(ulist(WIN_ACT|WIN_BOT|WIN_RHT,0,0,41,&tog_dflt,0 + ,"Toggle Options",opt)) { + case -1: + done=1; + break; + case 0: + strcpy(opt[0],"Yes"); + strcpy(opt[1],"No"); + opt[2][0]=0; + i=0; + SETHELP(WHERE); +/* +Allow Users to Use Aliases: + +If you want the users of your system to be allowed to be known by a +false name, handle, or alias, set this option to Yes. If you want all +users on your system to be known only by their real names, select No. +*/ + i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0 + ,"Allow Users to Use Aliases",opt); + if(!i && !(uq&UQ_ALIASES)) { + uq|=UQ_ALIASES; + changes=1; } + else if(i==1 && uq&UQ_ALIASES) { + uq&=~UQ_ALIASES; + changes=1; } + break; + case 1: + strcpy(opt[0],"Yes"); + strcpy(opt[1],"No"); + opt[2][0]=0; + i=0; + SETHELP(WHERE); +/* +Allow Time Banking: + +If you want the users of your system to be allowed to be deposit +any extra time they may have left during a call into their minute bank, +set this option to Yes. If this option is set to No, then the only +way a user may get minutes in their minute bank is to purchase them +with credits. +*/ + i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0 + ,"Allow Users to Depost Time in Minute Bank",opt); + if(!i && !(sys_misc&SM_TIMEBANK)) { + sys_misc|=SM_TIMEBANK; + changes=1; } + else if(i==1 && sys_misc&SM_TIMEBANK) { + sys_misc&=~SM_TIMEBANK; + changes=1; } + break; + case 2: + strcpy(opt[0],"Yes"); + strcpy(opt[1],"No"); + opt[2][0]=0; + i=0; + SETHELP(WHERE); +/* +Allow Credits to be Converted into Minutes: + +If you want the users of your system to be allowed to be convert +any credits they may have into minutes for their minute bank, +set this option to Yes. +*/ + i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0 + ,"Allow Users to Convert Credits into Minutes" + ,opt); + if(!i && sys_misc&SM_NOCDTCVT) { + sys_misc&=~SM_NOCDTCVT; + changes=1; } + else if(i==1 && !(sys_misc&SM_NOCDTCVT)) { + sys_misc|=SM_NOCDTCVT; + changes=1; } + break; + case 3: + strcpy(opt[0],"Yes"); + strcpy(opt[1],"No"); + opt[2][0]=0; + i=0; + SETHELP(WHERE); +/* +Allow Local Sysop Access: + +If you want to be able to logon locally with sysop access, set this +option to Yes. +*/ + i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0 + ,"Allow Local Sysop Access",opt); + if(!i && !(sys_misc&SM_L_SYSOP)) { + sys_misc|=SM_L_SYSOP; + changes=1; } + else if(i==1 && sys_misc&SM_L_SYSOP) { + sys_misc&=~SM_L_SYSOP; + changes=1; } + break; + case 4: + strcpy(opt[0],"Yes"); + strcpy(opt[1],"No"); + opt[2][0]=0; + i=0; + SETHELP(WHERE); +/* +Allow Remote Sysop Access: + +If you want to be able to logon remotely with sysop access, set this +option to Yes. +*/ + i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0 + ,"Allow Remote Sysop Access",opt); + if(!i && !(sys_misc&SM_R_SYSOP)) { + sys_misc|=SM_R_SYSOP; + changes=1; } + else if(i==1 && sys_misc&SM_R_SYSOP) { + sys_misc&=~SM_R_SYSOP; + changes=1; } + break; + case 5: + strcpy(opt[0],"Yes"); + strcpy(opt[1],"No"); + opt[2][0]=0; + i=0; + SETHELP(WHERE); +/* +Echo Passwords Locally: + +If you want to passwords to be displayed locally, set this option to +Yes. +*/ + i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0 + ,"Echo Passwords Locally",opt); + if(!i && !(sys_misc&SM_ECHO_PW)) { + sys_misc|=SM_ECHO_PW; + changes=1; } + else if(i==1 && sys_misc&SM_ECHO_PW) { + sys_misc&=~SM_ECHO_PW; + changes=1; } + break; + case 6: + strcpy(opt[0],"Yes"); + strcpy(opt[1],"No"); + opt[2][0]=0; + i=0; + SETHELP(WHERE); +/* +Require Passwords Locally: + +If you want to passwords to be required when logged on locally, set this +option to Yes. +*/ + i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0 + ,"Require Passwords Locally",opt); + if(!i && !(sys_misc&SM_REQ_PW)) { + sys_misc|=SM_REQ_PW; + changes=1; } + else if(i==1 && sys_misc&SM_REQ_PW) { + sys_misc&=~SM_REQ_PW; + changes=1; } + break; + case 7: + strcpy(opt[0],"Yes"); + strcpy(opt[1],"No"); + opt[2][0]=0; + i=0; + SETHELP(WHERE); +/* +Short Sysop Page: + +If you would like the sysop page to be a short series of beeps rather +than continuous random tones, set this option to Yes. +*/ + i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0,"Short Sysop Page" + ,opt); + if(i==1 && sys_misc&SM_SHRTPAGE) { + sys_misc&=~SM_SHRTPAGE; + changes=1; } + else if(!i && !(sys_misc&SM_SHRTPAGE)) { + sys_misc|=SM_SHRTPAGE; + changes=1; } + break; + case 8: + strcpy(opt[0],"Yes"); + strcpy(opt[1],"No"); + opt[2][0]=0; + i=0; + SETHELP(WHERE); +/* +Sound Alarm on Error: + +If you would like to have an alarm sounded locally when a critical +system error has occured, set this option to Yes. +*/ + i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0 + ,"Sound Alarm on Error",opt); + if(i==1 && sys_misc&SM_ERRALARM) { + sys_misc&=~SM_ERRALARM; + changes=1; } + else if(!i && !(sys_misc&SM_ERRALARM)) { + sys_misc|=SM_ERRALARM; + changes=1; } + break; + case 9: + strcpy(opt[0],"Yes"); + strcpy(opt[1],"No"); + opt[2][0]=0; + i=1; + SETHELP(WHERE); +/* +Include Sysop Activity in System Statistics: + +If you want sysops to be included in the statistical data of the BBS, +set this option to Yes. The suggested setting for this option is +No so that statistical data will only reflect user usage and not +include sysop maintenance activity. +*/ + i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0 + ,"Include Sysop Activity in System Statistics" + ,opt); + if(!i && !(sys_misc&SM_SYSSTAT)) { + sys_misc|=SM_SYSSTAT; + changes=1; } + else if(i==1 && sys_misc&SM_SYSSTAT) { + sys_misc&=~SM_SYSSTAT; + changes=1; } + break; + case 10: + strcpy(opt[0],"Yes"); + strcpy(opt[1],"No"); + opt[2][0]=0; + i=1; + SETHELP(WHERE); +/* +Closed to New Users: + +If you want callers to be able to logon as New, set this option to No. +*/ + i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0 + ,"Closed to New Users",opt); + if(!i && !(sys_misc&SM_CLOSED)) { + sys_misc|=SM_CLOSED; + changes=1; } + else if(i==1 && sys_misc&SM_CLOSED) { + sys_misc&=~SM_CLOSED; + changes=1; } + break; + case 11: + strcpy(opt[0],"Yes"); + strcpy(opt[1],"No"); + opt[2][0]=0; + i=0; + SETHELP(WHERE); +/* +User Location in User Lists: + +If you want user locations (city, state) displayed in the user lists, +set this option to Yes. If this option is set to No, the user notes +(if they exist) are displayed in the user lists. +*/ + i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0 + ,"User Location (Instead of Note) in User Lists" + ,opt); + if(!i && !(sys_misc&SM_LISTLOC)) { + sys_misc|=SM_LISTLOC; + changes=1; } + else if(i==1 && sys_misc&SM_LISTLOC) { + sys_misc&=~SM_LISTLOC; + changes=1; } + break; + case 12: + strcpy(opt[0],"Yes"); + strcpy(opt[1],"No"); + opt[2][0]=0; + i=1; + SETHELP(WHERE); +/* +Military: + +If you would like the time-of-day to be displayed and entered in 24 hour +format always, set this option to Yes. +*/ + i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0 + ,"Use Military Time Format",opt); + if(!i && !(sys_misc&SM_MILITARY)) { + sys_misc|=SM_MILITARY; + changes=1; } + else if(i==1 && sys_misc&SM_MILITARY) { + sys_misc&=~SM_MILITARY; + changes=1; } + break; + case 13: + strcpy(opt[0],"Yes"); + strcpy(opt[1],"No"); + opt[2][0]=0; + i=1; + SETHELP(WHERE); +/* +European Date Format: + +If you would like dates to be displayed and entered in DD/MM/YY format +instead of MM/DD/YY format, set this option to Yes. +*/ + i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0 + ,"European Date Format",opt); + if(!i && !(sys_misc&SM_EURODATE)) { + sys_misc|=SM_EURODATE; + changes=1; } + else if(i==1 && sys_misc&SM_EURODATE) { + sys_misc&=~SM_EURODATE; + changes=1; } + break; + + case 14: + strcpy(opt[0],"Yes"); + strcpy(opt[1],"No"); + opt[2][0]=0; + i=1; + SETHELP(WHERE); +/* +User Expires When Out-of-time: + +If you want users to be set to Expired User Values if they run out of +time online, then set this option to Yes. +*/ + i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0 + ,"User Expires When Out-of-time",opt); + if(!i && !(sys_misc&SM_TIME_EXP)) { + sys_misc|=SM_TIME_EXP; + changes=1; } + else if(i==1 && sys_misc&SM_TIME_EXP) { + sys_misc&=~SM_TIME_EXP; + changes=1; } + break; + + case 15: + strcpy(opt[0],"Yes"); + strcpy(opt[1],"No"); + opt[2][0]=0; + i=1; + SETHELP(WHERE); +/* +Quick Validation Hot-Keys: + +If you would like to enable the Alt-# hot-keys for quick user +validation, set this option to Yes. +*/ + i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0 + ,"Quick Validation Hot-Keys",opt); + if(!i && !(sys_misc&SM_QVALKEYS)) { + sys_misc|=SM_QVALKEYS; + changes=1; } + else if(i==1 && sys_misc&SM_QVALKEYS) { + sys_misc&=~SM_QVALKEYS; + changes=1; } + break; + + } } + break; + case 9: /* New User Values */ + done=0; + while(!done) { + i=0; + sprintf(opt[i++],"%-27.27s%u","Level",new_level); + sprintf(opt[i++],"%-27.27s%s","Flag Set #1" + ,ltoaf(new_flags1,str)); + sprintf(opt[i++],"%-27.27s%s","Flag Set #2" + ,ltoaf(new_flags2,str)); + sprintf(opt[i++],"%-27.27s%s","Flag Set #3" + ,ltoaf(new_flags3,str)); + sprintf(opt[i++],"%-27.27s%s","Flag Set #4" + ,ltoaf(new_flags4,str)); + sprintf(opt[i++],"%-27.27s%s","Exemptions" + ,ltoaf(new_exempt,str)); + sprintf(opt[i++],"%-27.27s%s","Restrictions" + ,ltoaf(new_rest,str)); + sprintf(opt[i++],"%-27.27s%s","Expiration Days" + ,itoa(new_expire,str,10)); + + ultoac(new_cdt,str); + sprintf(opt[i++],"%-27.27s%s","Credits",str); + ultoac(new_min,str); + sprintf(opt[i++],"%-27.27s%s","Minutes",str); + sprintf(opt[i++],"%-27.27s%s","Editor" + ,new_xedit); + sprintf(opt[i++],"%-27.27s%s","Command Shell" + ,shell[new_shell]->code); + if(new_prot!=SP) + sprintf(str,"%c",new_prot); + else + strcpy(str,"None"); + sprintf(opt[i++],"%-27.27s%s","Download Protocol",str); + strcpy(opt[i++],"Default Toggles..."); + strcpy(opt[i++],"Question Toggles..."); + opt[i][0]=0; + SETHELP(WHERE); +/* +New User Values: + +This menu allows you to determine the default settings for new users. +*/ + switch(ulist(WIN_ACT|WIN_BOT|WIN_RHT,0,0,60,&new_dflt,0 + ,"New User Values",opt)) { + case -1: + done=1; + break; + case 0: + itoa(new_level,str,10); + SETHELP(WHERE); +/* +New User Security Level: + +This is the security level automatically given to new users. +*/ + uinput(WIN_SAV|WIN_MID,0,0,"Security Level" + ,str,2,K_EDIT|K_NUMBER); + new_level=atoi(str); + break; + case 1: + ltoaf(new_flags1,str); + SETHELP(WHERE); +/* +New User Security Flags: + +These are the security flags automatically given to new users. +*/ + uinput(WIN_SAV|WIN_MID,0,0,"Flag Set #1" + ,str,26,K_EDIT|K_UPPER|K_ALPHA); + new_flags1=aftol(str); + break; + case 2: + ltoaf(new_flags2,str); + SETHELP(WHERE); +/* +New User Security Flags: + +These are the security flags automatically given to new users. +*/ + uinput(WIN_SAV|WIN_MID,0,0,"Flag Set #2" + ,str,26,K_EDIT|K_UPPER|K_ALPHA); + new_flags2=aftol(str); + break; + case 3: + ltoaf(new_flags3,str); + SETHELP(WHERE); +/* +New User Security Flags: + +These are the security flags automatically given to new users. +*/ + uinput(WIN_SAV|WIN_MID,0,0,"Flag Set #3" + ,str,26,K_EDIT|K_UPPER|K_ALPHA); + new_flags3=aftol(str); + break; + case 4: + ltoaf(new_flags4,str); + SETHELP(WHERE); +/* +New User Security Flags: + +These are the security flags automatically given to new users. +*/ + uinput(WIN_SAV|WIN_MID,0,0,"Flag Set #4" + ,str,26,K_EDIT|K_UPPER|K_ALPHA); + new_flags4=aftol(str); + break; + case 5: + ltoaf(new_exempt,str); + SETHELP(WHERE); +/* +New User Exemption Flags: + +These are the exemptions that are automatically given to new users. +*/ + uinput(WIN_SAV|WIN_MID,0,0,"Exemption Flags",str,26 + ,K_EDIT|K_UPPER|K_ALPHA); + new_exempt=aftol(str); + break; + case 6: + ltoaf(new_rest,str); + SETHELP(WHERE); +/* +New User Restriction Flags: + +These are the restrictions that are automatically given to new users. +*/ + uinput(WIN_SAV|WIN_MID,0,0,"Restriction Flags",str,26 + ,K_EDIT|K_UPPER|K_ALPHA); + new_rest=aftol(str); + break; + case 7: + itoa(new_expire,str,10); + SETHELP(WHERE); +/* +New User Expiration Days: + +If you wish new users to have an automatic expiration date, set this +value to the number of days before the user will expire. To disable +New User expiration, set this value to 0. +*/ + uinput(WIN_SAV|WIN_MID,0,0,"Expiration Days",str,4 + ,K_EDIT|K_NUMBER); + new_expire=atoi(str); + break; + case 8: + ultoa(new_cdt,str,10); + SETHELP(WHERE); +/* +New User Credits: + +This is the amount of credits that are automatically given to new users. +*/ + uinput(WIN_SAV|WIN_MID,0,0,"Credits",str,10 + ,K_EDIT|K_NUMBER); + new_cdt=atol(str); + break; + case 9: + ultoa(new_min,str,10); + SETHELP(WHERE); +/* +New User Minutes: + +This is the number of extra minutes automatically given to new users. +*/ + uinput(WIN_SAV|WIN_MID,0,0,"Minutes (Time Credit)" + ,str,10,K_EDIT|K_NUMBER); + new_min=atol(str); + break; + case 10: + if(!total_xedits) { + umsg("No External Editors Configured"); + break; } + strcpy(opt[0],"Internal"); + for(i=1;i<=total_xedits;i++) + strcpy(opt[i],xedit[i-1]->code); + opt[i][0]=0; + i=0; + savnum=0; + SETHELP(WHERE); +/* +New User Editor: + +You can use this option to select the default editor for new users. +*/ + i=ulist(WIN_SAV|WIN_RHT,2,1,13,&i,0,"Editors",opt); + if(i==-1) + break; + changes=1; + if(i && i<=total_xedits) + sprintf(new_xedit,"%-.8s",xedit[i-1]->code); + else + new_xedit[0]=0; + break; + case 11: + for(i=0;icode); + opt[i][0]=0; + i=0; + savnum=0; + SETHELP(WHERE); +/* +New User Command Shell: + +You can use this option to select the default command shell for new +users. +*/ + i=ulist(WIN_SAV|WIN_RHT,2,1,13,&i,0 + ,"Command Shells",opt); + if(i==-1) + break; + new_shell=i; + changes=1; + break; + case 12: + SETHELP(WHERE); +/* +New User Default Download Protocol: + +This option allows you to set the default download protocol of new users +(protocol command key or BLANK for no default). +*/ + sprintf(str,"%c",new_prot); + uinput(WIN_SAV|WIN_MID,0,0 + ,"Default Download Protocol (SPACE=Disabled)" + ,str,1,K_EDIT|K_UPPER); + new_prot=str[0]; + if(new_prot0) { + if(str[strlen(str)-1]!='\\') + strcat(str,"\\"); + strcat(str,"DATA\\"); + strcpy(data_dir,str); } + break; + case 2: + SETHELP(WHERE); +/* +Exec Directory Parent: + +The Synchronet exec directory contains executable files that your BBS +executes. This directory does not need to be in your DOS search path. +If you place programs in this directory for the BBS to execute, you +should place the %! abreviation for this exec directory at the +beginning of the command line. + +This option allows you to change the parent of your exec directory. +The \EXEC\ suffix (sub-directory) cannot be changed or removed. +*/ + strcpy(str,exec_dir); + if(strstr(str,"\\EXEC\\")!=NULL) + *strstr(str,"\\EXEC\\")=0; + if(uinput(WIN_MID|WIN_SAV,0,9,"Exec Dir Parent" + ,str,50,K_EDIT|K_UPPER)>0) { + if(str[strlen(str)-1]!='\\') + strcat(str,"\\"); + strcat(str,"EXEC\\"); + strcpy(exec_dir,str); } + break; + case 3: + strcpy(str,new_sif); + SETHELP(WHERE); +/* +SIF Questionnaire for User Input: + +This is the name of a SIF questionnaire file that resides your text +directory that all users will be prompted to answer. +*/ + uinput(WIN_MID|WIN_SAV,0,0 + ,"SIF Questionnaire for User Input" + ,str,8,K_UPPER|K_EDIT); + if(!str[0] || code_ok(str)) + strcpy(new_sif,str); + else + umsg("Invalid SIF Name"); + break; + case 4: + strcpy(str,new_sof); + SETHELP(WHERE); +/* +SIF Questionnaire for Reviewing User Input: + +This is the SIF file used to review the input of users from the user +edit function. +*/ + uinput(WIN_MID|WIN_SAV,0,0 + ,"SIF Questionnaire for Reviewing User Input" + ,str,8,K_UPPER|K_EDIT); + if(!str[0] || code_ok(str)) + strcpy(new_sof,str); + else + umsg("Invalid SIF Name"); + break; + case 5: + SETHELP(WHERE); +/* +Credits Per Dollar: + +This is the monetary value of a credit (How many credits per dollar). +This value should be a power of 2 (1, 2, 4, 8, 16, 32, 64, 128, etc.) +since credits are usually converted by 100 kilobyte (102400) blocks. +To make a dollar worth two megabytes of credits, set this value to +2,097,152 (a megabyte is 1024*1024 or 1048576). +*/ + ultoa(cdt_per_dollar,str,10); + uinput(WIN_MID|WIN_SAV,0,0 + ,"Credits Per Dollar",str,10,K_NUMBER|K_EDIT); + cdt_per_dollar=atol(str); + break; + case 6: + SETHELP(WHERE); +/* +Minutes Per 100K Credits: + +This is the value of a minute of time online. This field is the number +of minutes to give the user in exchange for each 100K credit block. +*/ + sprintf(str,"%u",cdt_min_value); + uinput(WIN_MID|WIN_SAV,0,0 + ,"Minutes Per 100K Credits",str,5,K_NUMBER|K_EDIT); + cdt_min_value=atoi(str); + break; + case 7: + SETHELP(WHERE); +/* +Maximum Number of Minutes User Can Have: + +This value is the maximum total number of minutes a user can have. If a +user has this number of minutes or more, they will not be allowed to +convert credits into minutes. A sysop can add minutes to a user's +account regardless of this maximum. If this value is set to 0, users +will have no limit on the total number of minutes they can have. +*/ + sprintf(str,"%lu",max_minutes); + uinput(WIN_MID|WIN_SAV,0,0 + ,"Maximum Number of Minutes a User Can Have " + "(0=No Limit)" + ,str,10,K_NUMBER|K_EDIT); + max_minutes=atol(str); + break; + case 8: + SETHELP(WHERE); +/* +Warning Days Till Expire: + +If a user's account will expire in this many days or less, the user will +be notified at logon. Setting this value to 0 disables the warning +completely. +*/ + sprintf(str,"%u",sys_exp_warn); + uinput(WIN_MID|WIN_SAV,0,0 + ,"Warning Days Till Expire",str,5,K_NUMBER|K_EDIT); + sys_exp_warn=atoi(str); + break; + case 9: + SETHELP(WHERE); +/* +Default Status Line: + +This is the number of the status line format that will be the default +display on the bottom line of the screen. For explanation of the +available status lines, see the sysop documentation. +*/ + sprintf(str,"%u",sys_def_stat); + uinput(WIN_MID|WIN_SAV,0,0 + ,"Default Status Line",str,5,K_NUMBER|K_EDIT); + sys_def_stat=atoi(str); + break; + case 10: + SETHELP(WHERE); +/* +Last Displayed Node: + +This is the number of the last node to display to users in node lists. +This allows the sysop to define the higher numbered nodes as invisible +to users. +*/ + sprintf(str,"%u",sys_lastnode); + uinput(WIN_MID|WIN_SAV,0,0 + ,"Last Displayed Node",str,5,K_NUMBER|K_EDIT); + sys_lastnode=atoi(str); + break; + case 11: + SETHELP(WHERE); +/* +First Local Auto-Node: + +This is the number of the first node in the search for an available +node for local login using the AUTONODE utility. +*/ + sprintf(str,"%u",sys_autonode); + uinput(WIN_MID|WIN_SAV,0,0 + ,"First Local Auto-Node",str,5,K_NUMBER|K_EDIT); + sys_autonode=atoi(str); + break; + case 12: + SETHELP(WHERE); +/* +Phone Number Format: + +This is the format used for phone numbers in your local calling +area. Use N for number positions, A for alphabetic, or ! for any +character. All other characters will be static in the phone number +format. An example for North American phone numbers is NNN-NNN-NNNN. +*/ + uinput(WIN_MID|WIN_SAV,0,0 + ,"Phone Number Format",sys_phonefmt + ,LEN_PHONE,K_UPPER|K_EDIT); + break; + case 13: + getar("Sysop Chat",sys_chat_ar); + break; + } } + break; + case 11: /* Loadable Modules */ + done=0; + k=0; + while(!done) { + i=0; + sprintf(opt[i++],"%-16.16s%s","Login",login_mod); + sprintf(opt[i++],"%-16.16s%s","Logon Event",logon_mod); + sprintf(opt[i++],"%-16.16s%s","Sync Event",sync_mod); + sprintf(opt[i++],"%-16.16s%s","Logoff Event",logoff_mod); + sprintf(opt[i++],"%-16.16s%s","Logout Event",logout_mod); + sprintf(opt[i++],"%-16.16s%s","New User Event",newuser_mod); + sprintf(opt[i++],"%-16.16s%s","Expired User",expire_mod); + opt[i][0]=0; + savnum=0; + SETHELP(WHERE); +/* +Loadable Modules: + +Baja modules (.BIN files) can be automatically loaded and executed +during certain system functions. The name of the module can be specified +for each of the available triggers listed here. + +Login Required module for remote and local logins (online) +Logon Executed as an event during logon procedure (online) +Sync Executed when nodes are periodically synchronized (online) +Logoff Executed during logoff procedure (online) +Logout Executed during logout procedure (offline) +New User Executed at end of new user procedure (online) +Expired User Executed during daily event when user expires (offline) +*/ + switch(ulist(WIN_ACT|WIN_T2B|WIN_RHT,0,0,32,&k,0 + ,"Loadable Modules",opt)) { + + case -1: + done=1; + break; + + case 0: + uinput(WIN_MID|WIN_SAV,0,0,"Login Module",login_mod,8 + ,K_EDIT|K_UPPER); + break; + case 1: + uinput(WIN_MID|WIN_SAV,0,0,"Logon Module",logon_mod,8 + ,K_EDIT|K_UPPER); + break; + case 2: + uinput(WIN_MID|WIN_SAV,0,0,"Synchronize Module" + ,sync_mod,8,K_EDIT|K_UPPER); + break; + case 3: + uinput(WIN_MID|WIN_SAV,0,0,"Logoff Module",logoff_mod,8 + ,K_EDIT|K_UPPER); + break; + case 4: + uinput(WIN_MID|WIN_SAV,0,0,"Logout Module",logout_mod,8 + ,K_EDIT|K_UPPER); + break; + case 5: + uinput(WIN_MID|WIN_SAV,0,0,"New User Module" + ,newuser_mod,8,K_EDIT|K_UPPER); + break; + case 6: + uinput(WIN_MID|WIN_SAV,0,0,"Expired User Module" + ,expire_mod,8,K_EDIT|K_UPPER); + break; + + } } + break; + + case 12: /* Security Levels */ + dflt=bar=0; + k=0; + while(1) { + for(i=0;i<100;i++) { + sprintf(tmp,"%luk",level_freecdtperday[i]/1024L); + sprintf(opt[i],"%-2d %5d %5d " + "%5d %5d %5d %5d %6s %7s %2u",i + ,level_timeperday[i],level_timepercall[i] + ,level_callsperday[i],level_emailperday[i] + ,level_postsperday[i],level_linespermsg[i] + ,tmp + ,level_misc[i]&LEVEL_EXPTOVAL ? "Val Set" : "Level" + ,level_misc[i]&(LEVEL_EXPTOVAL|LEVEL_EXPTOLVL) ? + level_expireto[i] : expired_level); } + opt[i][0]=0; + i=0; + SETHELP(WHERE); +/* +Security Level Values: + +This menu allows you to change the security options for every possible +security level from 0 to 99. The available options for each level are: + + Time Per Day : Maximum online time per day + Time Per Call : Maximum online time per call + Calls Per Day : Maximum number of calls per day + Email Per Day : Maximum number of email per day + Posts Per Day : Maximum number of posts per day + Lines Per Message : Maximum number of lines per message + Free Credits Per Day : Number of free credits per day + Expire To : Level or validation set to Expire to +*/ + i=ulist(WIN_RHT|WIN_ACT,0,3,0,&dflt,&bar + ,"Level T/D T/C C/D E/D P/D L/M F/D " + "Expire To",opt); + if(i==-1) + break; + while(1) { + sprintf(str,"Security Level %d Values",i); + j=0; + sprintf(opt[j++],"%-22.22s%-5u","Time Per Day" + ,level_timeperday[i]); + sprintf(opt[j++],"%-22.22s%-5u","Time Per Call" + ,level_timepercall[i]); + sprintf(opt[j++],"%-22.22s%-5u","Calls Per Day" + ,level_callsperday[i]); + sprintf(opt[j++],"%-22.22s%-5u","Email Per Day" + ,level_emailperday[i]); + sprintf(opt[j++],"%-22.22s%-5u","Posts Per Day" + ,level_postsperday[i]); + sprintf(opt[j++],"%-22.22s%-5u","Lines Per Message" + ,level_linespermsg[i]); + sprintf(tmp,"%luk",level_freecdtperday[i]/1024L); + sprintf(opt[j++],"%-22.22s%-6s","Free Credits Per Day" + ,tmp); + sprintf(opt[j++],"%-22.22s%s %u","Expire To" + ,level_misc[i]&LEVEL_EXPTOVAL ? "Validation Set" + : "Level" + ,level_misc[i]&(LEVEL_EXPTOVAL|LEVEL_EXPTOLVL) ? + level_expireto[i] : expired_level); + opt[j][0]=0; + savnum=0; + j=ulist(WIN_RHT|WIN_SAV|WIN_ACT,2,1,0,&k,0 + ,str,opt); + if(j==-1) + break; + switch(j) { + case 0: + uinput(WIN_MID|WIN_SAV,0,0 + ,"Total Time Allowed Per Day" + ,itoa(level_timeperday[i],tmp,10),3 + ,K_NUMBER|K_EDIT); + level_timeperday[i]=atoi(tmp); + if(level_timeperday[i]>500) + level_timeperday[i]=500; + break; + case 1: + uinput(WIN_MID|WIN_SAV,0,0 + ,"Time Allowed Per Call" + ,itoa(level_timepercall[i],tmp,10),3 + ,K_NUMBER|K_EDIT); + level_timepercall[i]=atoi(tmp); + if(level_timepercall[i]>500) + level_timepercall[i]=500; + break; + case 2: + uinput(WIN_MID|WIN_SAV,0,0 + ,"Calls Allowed Per Day" + ,itoa(level_callsperday[i],tmp,10),4 + ,K_NUMBER|K_EDIT); + level_callsperday[i]=atoi(tmp); + break; + case 3: + uinput(WIN_MID|WIN_SAV,0,0 + ,"Email Allowed Per Day" + ,itoa(level_emailperday[i],tmp,10),4 + ,K_NUMBER|K_EDIT); + level_emailperday[i]=atoi(tmp); + break; + case 4: + uinput(WIN_MID|WIN_SAV,0,0 + ,"Posts Allowed Per Day" + ,itoa(level_postsperday[i],tmp,10),4 + ,K_NUMBER|K_EDIT); + level_postsperday[i]=atoi(tmp); + break; + case 5: + uinput(WIN_MID|WIN_SAV,0,0 + ,"Lines Allowed Per Message (Post/E-mail)" + ,itoa(level_linespermsg[i],tmp,10),4 + ,K_NUMBER|K_EDIT); + level_linespermsg[i]=atoi(tmp); + break; + case 6: + uinput(WIN_MID|WIN_SAV,0,0 + ,"Free Credits Per Day (in Kilobytes)" + ,ultoa(level_freecdtperday[i]/1024L,tmp,10),8 + ,K_EDIT|K_UPPER); + level_freecdtperday[i]=atol(tmp)*1024L; + break; + case 7: + j=0; + sprintf(opt[j++],"Default Expired Level " + "(Currently %u)",expired_level); + sprintf(opt[j++],"Specific Level"); + sprintf(opt[j++],"Quick-Validation Set"); + opt[j][0]=0; + j=0; + sprintf(str,"Level %u Expires To",i); + savnum=1; + j=ulist(WIN_SAV,2,1,0,&j,0 + ,str,opt); + if(j==-1) + break; + if(j==0) { + level_misc[i]&= + ~(LEVEL_EXPTOLVL|LEVEL_EXPTOVAL); + changes=1; + break; } + if(j==1) { + level_misc[i]&=~LEVEL_EXPTOVAL; + level_misc[i]|=LEVEL_EXPTOLVL; + changes=1; + uinput(WIN_MID|WIN_SAV,0,0 + ,"Expired Level" + ,itoa(level_expireto[i],tmp,10),2 + ,K_EDIT|K_NUMBER); + level_expireto[i]=atoi(tmp); + break; } + level_misc[i]&=~LEVEL_EXPTOLVL; + level_misc[i]|=LEVEL_EXPTOVAL; + uinput(WIN_MID|WIN_SAV,0,0 + ,"Quick-Validation Set to Expire To" + ,itoa(level_expireto[i],tmp,10),1 + ,K_EDIT|K_NUMBER); + level_expireto[i]=atoi(tmp); + break; + } } } + break; + case 13: /* Expired Acccount Values */ + dflt=0; + done=0; + while(!done) { + i=0; + sprintf(opt[i++],"%-27.27s%u","Level",expired_level); + sprintf(opt[i++],"%-27.27s%s","Flag Set #1 to Remove" + ,ltoaf(expired_flags1,str)); + sprintf(opt[i++],"%-27.27s%s","Flag Set #2 to Remove" + ,ltoaf(expired_flags2,str)); + sprintf(opt[i++],"%-27.27s%s","Flag Set #3 to Remove" + ,ltoaf(expired_flags3,str)); + sprintf(opt[i++],"%-27.27s%s","Flag Set #4 to Remove" + ,ltoaf(expired_flags4,str)); + sprintf(opt[i++],"%-27.27s%s","Exemptions to Remove" + ,ltoaf(expired_exempt,str)); + sprintf(opt[i++],"%-27.27s%s","Restrictions to Add" + ,ltoaf(expired_rest,str)); + opt[i][0]=0; + SETHELP(WHERE); +/* +Expired Account Values: + +If a user's account expires, the security levels for that account will +be modified according to the settings of this menu. The Main Level and +Transfer Level will be set to the values listed on this menu. The Main +Flags, Transfer Flags, and Exemptions listed on this menu will be +removed from the account if they are set. The Restrictions listed will +be added to the account. +*/ + switch(ulist(WIN_ACT|WIN_BOT|WIN_RHT,0,0,60,&dflt,0 + ,"Expired Account Values",opt)) { + case -1: + done=1; + break; + case 0: + itoa(expired_level,str,10); + SETHELP(WHERE); +/* +Expired Account Security Level: + +This is the security level automatically given to expired user accounts. +*/ + uinput(WIN_SAV|WIN_MID,0,0,"Security Level" + ,str,2,K_EDIT|K_NUMBER); + expired_level=atoi(str); + break; + case 1: + ltoaf(expired_flags1,str); + SETHELP(WHERE); +/* +Expired Security Flags to Remove: + +These are the security flags automatically removed when a user account +has expired. +*/ + uinput(WIN_SAV|WIN_MID,0,0,"Flags Set #1" + ,str,26,K_EDIT|K_UPPER|K_ALPHA); + expired_flags1=aftol(str); + break; + case 2: + ltoaf(expired_flags2,str); + SETHELP(WHERE); +/* +Expired Security Flags to Remove: + +These are the security flags automatically removed when a user account +has expired. +*/ + uinput(WIN_SAV|WIN_MID,0,0,"Flags Set #2" + ,str,26,K_EDIT|K_UPPER|K_ALPHA); + expired_flags2=aftol(str); + break; + case 3: + ltoaf(expired_flags3,str); + SETHELP(WHERE); +/* +Expired Security Flags to Remove: + +These are the security flags automatically removed when a user account +has expired. +*/ + uinput(WIN_SAV|WIN_MID,0,0,"Flags Set #3" + ,str,26,K_EDIT|K_UPPER|K_ALPHA); + expired_flags3=aftol(str); + break; + case 4: + ltoaf(expired_flags4,str); + SETHELP(WHERE); +/* +Expired Security Flags to Remove: + +These are the security flags automatically removed when a user account +has expired. +*/ + uinput(WIN_SAV|WIN_MID,0,0,"Flags Set #4" + ,str,26,K_EDIT|K_UPPER|K_ALPHA); + expired_flags4=aftol(str); + break; + case 5: + ltoaf(expired_exempt,str); + SETHELP(WHERE); +/* +Expired Exemption Flags to Remove: + +These are the exemptions that are automatically removed from a user +account if it expires. +*/ + uinput(WIN_SAV|WIN_MID,0,0,"Exemption Flags",str,26 + ,K_EDIT|K_UPPER|K_ALPHA); + expired_exempt=aftol(str); + break; + case 6: + ltoaf(expired_rest,str); + SETHELP(WHERE); +/* +Expired Restriction Flags to Add: + +These are the restrictions that are automatically added to a user +account if it expires. +*/ + uinput(WIN_SAV|WIN_MID,0,0,"Restriction Flags",str,26 + ,K_EDIT|K_UPPER|K_ALPHA); + expired_rest=aftol(str); + break; } } + break; + case 14: /* Quick-Validation Values */ + dflt=0; + k=0; + while(1) { + for(i=0;i<10;i++) + sprintf(opt[i],"%d SL: %-2d F1: %s" + ,i,val_level[i],ltoaf(val_flags1[i],str)); + opt[i][0]=0; + i=0; + SETHELP(WHERE); +/* +Quick-Validation Values: + +This is a list of the ten quick-validation sets. These sets are used to +quickly set a user's security values (Level, Flags, Exemptions, +Restrictions, Expiration Date, and Credits) with one key stroke. The +user's expiration date may be extended and additional credits may also +be added using quick-validation sets. + +Holding down  ALT  and one of the number keys (1-9) while a user +is online, automatically sets his or user security values to the +quick-validation set for that number key. + +From within the User Edit function, a sysop can use the Validate +User command and select from this quick-validation list to change a +user's security values with very few key-strokes. +*/ + savnum=0; + i=ulist(WIN_RHT|WIN_BOT|WIN_ACT|WIN_SAV,0,0,0,&dflt,0 + ,"Quick-Validation Values",opt); + if(i==-1) + break; + sprintf(str,"Quick-Validation Set %d",i); + savnum=0; + while(1) { + j=0; + sprintf(opt[j++],"%-22.22s%u","Level",val_level[i]); + sprintf(opt[j++],"%-22.22s%s","Flag Set #1" + ,ltoaf(val_flags1[i],tmp)); + sprintf(opt[j++],"%-22.22s%s","Flag Set #2" + ,ltoaf(val_flags2[i],tmp)); + sprintf(opt[j++],"%-22.22s%s","Flag Set #3" + ,ltoaf(val_flags3[i],tmp)); + sprintf(opt[j++],"%-22.22s%s","Flag Set #4" + ,ltoaf(val_flags4[i],tmp)); + sprintf(opt[j++],"%-22.22s%s","Exemptions" + ,ltoaf(val_exempt[i],tmp)); + sprintf(opt[j++],"%-22.22s%s","Restrictions" + ,ltoaf(val_rest[i],tmp)); + sprintf(opt[j++],"%-22.22s%u days","Extend Expiration" + ,val_expire[i]); + sprintf(opt[j++],"%-22.22s%lu","Additional Credits" + ,val_cdt[i]); + opt[j][0]=0; + savnum=1; + j=ulist(WIN_RHT|WIN_SAV|WIN_ACT,2,1,0,&k,0 + ,str,opt); + if(j==-1) + break; + switch(j) { + case 0: + uinput(WIN_MID|WIN_SAV,0,0 + ,"Level" + ,itoa(val_level[i],tmp,10),2 + ,K_NUMBER|K_EDIT); + val_level[i]=atoi(tmp); + break; + case 1: + uinput(WIN_MID|WIN_SAV,0,0 + ,"Flag Set #1" + ,ltoaf(val_flags1[i],tmp),26 + ,K_UPPER|K_ALPHA|K_EDIT); + val_flags1[i]=aftol(tmp); + break; + case 2: + uinput(WIN_MID|WIN_SAV,0,0 + ,"Flag Set #2" + ,ltoaf(val_flags2[i],tmp),26 + ,K_UPPER|K_ALPHA|K_EDIT); + val_flags2[i]=aftol(tmp); + break; + case 3: + uinput(WIN_MID|WIN_SAV,0,0 + ,"Flag Set #3" + ,ltoaf(val_flags3[i],tmp),26 + ,K_UPPER|K_ALPHA|K_EDIT); + val_flags3[i]=aftol(tmp); + break; + case 4: + uinput(WIN_MID|WIN_SAV,0,0 + ,"Flag Set #4" + ,ltoaf(val_flags4[i],tmp),26 + ,K_UPPER|K_ALPHA|K_EDIT); + val_flags4[i]=aftol(tmp); + break; + case 5: + uinput(WIN_MID|WIN_SAV,0,0 + ,"Exemption Flags" + ,ltoaf(val_exempt[i],tmp),26 + ,K_UPPER|K_ALPHA|K_EDIT); + val_exempt[i]=aftol(tmp); + break; + case 6: + uinput(WIN_MID|WIN_SAV,0,0 + ,"Restriction Flags" + ,ltoaf(val_rest[i],tmp),26 + ,K_UPPER|K_ALPHA|K_EDIT); + val_rest[i]=aftol(tmp); + break; + case 7: + uinput(WIN_MID|WIN_SAV,0,0 + ,"Days to Extend Expiration" + ,itoa(val_expire[i],tmp,10),4 + ,K_NUMBER|K_EDIT); + val_expire[i]=atoi(tmp); + break; + case 8: + uinput(WIN_MID|WIN_SAV,0,0 + ,"Additional Credits" + ,ultoa(val_cdt[i],tmp,10),10 + ,K_NUMBER|K_EDIT); + val_cdt[i]=atol(tmp); + break; } } } + break; } } + +}