|
|
1.1.1.2 ! root 1: #line 2 "SCFGSYS.C" ! 2: ! 3: /* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */ ! 4: ! 5: #include "scfg.h" ! 6: ! 7: void sys_cfg(void) ! 8: { ! 9: static int sys_dflt,adv_dflt,tog_dflt,new_dflt; ! 10: char str[81],str2[81],done=0,*dupehelp; ! 11: int i,j,k,dflt,bar,savchanges; ! 12: ! 13: while(1) { ! 14: i=0; ! 15: sprintf(opt[i++],"%-33.33s%s","BBS Name",sys_name); ! 16: sprintf(opt[i++],"%-33.33s%s","Location",sys_location); ! 17: sprintf(opt[i++],"%-33.33s%s","Operator",sys_op); ! 18: sprintf(opt[i++],"%-33.33s%s","Password",sys_pass); ! 19: ! 20: sprintf(str,"%s Password" ! 21: ,sys_misc&SM_PWEDIT && sys_pwdays ? "Users Must Change" ! 22: : sys_pwdays ? "Users Get New Random" : "Users Can Change"); ! 23: if(sys_pwdays) ! 24: sprintf(tmp,"Every %u Days",sys_pwdays); ! 25: else if(sys_misc&SM_PWEDIT) ! 26: strcpy(tmp,"Yes"); ! 27: else ! 28: strcpy(tmp,"No"); ! 29: sprintf(opt[i++],"%-33.33s%s",str,tmp); ! 30: ! 31: sprintf(opt[i++],"%-33.33s%u","Days to Preserve Deleted Users" ! 32: ,sys_deldays); ! 33: sprintf(opt[i++],"%-33.33s%s","Maximum Days of Inactivity" ! 34: ,sys_autodel ? itoa(sys_autodel,tmp,10) : "Unlimited"); ! 35: sprintf(opt[i++],"%-33.33s%s","New User Password",new_pass); ! 36: ! 37: strcpy(opt[i++],"Toggle Options..."); ! 38: strcpy(opt[i++],"New User Values..."); ! 39: strcpy(opt[i++],"Advanced Options..."); ! 40: strcpy(opt[i++],"Loadable Modules..."); ! 41: strcpy(opt[i++],"Security Level Values..."); ! 42: strcpy(opt[i++],"Expired Account Values..."); ! 43: strcpy(opt[i++],"Quick-Validation Values..."); ! 44: opt[i][0]=0; ! 45: SETHELP(WHERE); ! 46: /* ! 47: &System Configuration:& ! 48: ! 49: This menu contains options and sub-menus of options that affect the ! 50: entire system. ! 51: */ ! 52: switch(ulist(WIN_ORG|WIN_ACT|WIN_CHE,0,0,72,&sys_dflt,0 ! 53: ,"System Configuration",opt)) { ! 54: case -1: ! 55: i=save_changes(WIN_MID); ! 56: if(i==-1) ! 57: break; ! 58: if(!i) ! 59: write_main_cfg(); ! 60: return; ! 61: case 0: ! 62: SETHELP(WHERE); ! 63: /* ! 64: &BBS Name:& ! 65: ! 66: This is the name of the BBS. ! 67: */ ! 68: uinput(WIN_MID,0,0,"BBS Name",sys_name,40,K_EDIT); ! 69: break; ! 70: case 1: ! 71: SETHELP(WHERE); ! 72: /* ! 73: &System Location:& ! 74: ! 75: This is the location of the BBS. The format is flexible, but it is ! 76: suggested you use the &City, State& format for clarity. ! 77: */ ! 78: uinput(WIN_MID,0,0,"Location",sys_location,40,K_EDIT); ! 79: break; ! 80: case 2: ! 81: SETHELP(WHERE); ! 82: /* ! 83: &System Operator:& ! 84: ! 85: This is the name or alias of the system operator. This does not have to ! 86: be the same as user #1. This field is used for documentary purposes ! 87: only. ! 88: */ ! 89: uinput(WIN_MID,0,0,"System Operator",sys_op,40,K_EDIT); ! 90: break; ! 91: case 3: ! 92: SETHELP(WHERE); ! 93: /* ! 94: &System Password:& ! 95: ! 96: This is an extra security password required for sysop logon and certain ! 97: sysop functions. This password should be something not easily guessed ! 98: and should be kept absolutely confidential. This password must be ! 99: entered at the &SY:& prompt. ! 100: */ ! 101: uinput(WIN_MID,0,0,"System Password",sys_pass,40,K_EDIT|K_UPPER); ! 102: break; ! 103: case 4: ! 104: strcpy(opt[0],"Yes"); ! 105: strcpy(opt[1],"No"); ! 106: opt[2][0]=0; ! 107: i=1; ! 108: SETHELP(WHERE); ! 109: /* ! 110: &Allow Users to Change Their Password:& ! 111: ! 112: If you want the users of your system to have the option of changing ! 113: their password to a string of their choice, set this option to &Yes&. ! 114: For the highest level of security, set this option to &No.& ! 115: */ ! 116: i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0 ! 117: ,"Allow Users to Change Their Password",opt); ! 118: if(!i && !(sys_misc&SM_PWEDIT)) { ! 119: sys_misc|=SM_PWEDIT; ! 120: changes=1; } ! 121: else if(i==1 && sys_misc&SM_PWEDIT) { ! 122: sys_misc&=~SM_PWEDIT; ! 123: changes=1; } ! 124: i=0; ! 125: SETHELP(WHERE); ! 126: /* ! 127: &Force Periodic Password Changes:& ! 128: ! 129: If you want your users to be forced to change their passwords ! 130: periodically, select &Yes&. ! 131: */ ! 132: i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0 ! 133: ,"Force Periodic Password Changes",opt); ! 134: if(!i) { ! 135: itoa(sys_pwdays,str,10); ! 136: SETHELP(WHERE); ! 137: /* ! 138: &Maximum Days Between Password Changes:& ! 139: ! 140: Enter the maximum number of days allowed between password changes. ! 141: If a user has not voluntarily changed his or her password in this ! 142: many days, he or she will be forced to change their password upon ! 143: logon. ! 144: */ ! 145: uinput(WIN_MID,0,0,"Maximum Days Between Password Changes" ! 146: ,str,5,K_NUMBER|K_EDIT); ! 147: sys_pwdays=atoi(str); } ! 148: else if(i==1 && sys_pwdays) { ! 149: sys_pwdays=0; ! 150: changes=1; } ! 151: ! 152: break; ! 153: case 5: ! 154: sprintf(str,"%u",sys_deldays); ! 155: SETHELP(WHERE); ! 156: /* ! 157: &Days Since Last Logon to Preserve Deleted Users:& ! 158: ! 159: Deleted user slots can be &undeleted& until the slot is written over ! 160: by a new user. If you want deleted user slots to be preserved for period ! 161: of time since their last logon, set this value to the number of days to ! 162: keep new users from taking over a deleted user's slot. ! 163: */ ! 164: uinput(WIN_MID,0,0,"Days Since Last Logon to Preserve Deleted Users" ! 165: ,str,5,K_EDIT|K_NUMBER); ! 166: sys_deldays=atoi(str); ! 167: break; ! 168: case 6: ! 169: sprintf(str,"%u",sys_autodel); ! 170: SETHELP(WHERE); ! 171: /* ! 172: &Maximum Days of Inactivity Before Auto-Deletion:& ! 173: ! 174: If you want users that haven't logged on in certain period of time to ! 175: be automatically deleted, set this value to the maximum number of days ! 176: of inactivity before the user is deleted. Setting this value to &0& ! 177: disables this feature. ! 178: ! 179: Users with the &P& exemption will not be deleted due to inactivity. ! 180: */ ! 181: uinput(WIN_MID,0,0,"Maximum Days of Inactivity Before Auto-Deletion" ! 182: ,str,5,K_EDIT|K_NUMBER); ! 183: sys_autodel=atoi(str); ! 184: break; ! 185: case 7: ! 186: SETHELP(WHERE); ! 187: /* ! 188: &New User Password:& ! 189: ! 190: If you want callers to only be able to logon as &New& if they know a ! 191: certain password, enter that password here. If you want any caller to ! 192: be able to logon as New, leave this option blank. ! 193: */ ! 194: uinput(WIN_MID,0,0,"New User Password",new_pass,40 ! 195: ,K_EDIT|K_UPPER); ! 196: break; ! 197: case 8: /* Toggle Options */ ! 198: done=0; ! 199: while(!done) { ! 200: i=0; ! 201: sprintf(opt[i++],"%-33.33s%s","Allow Aliases" ! 202: ,uq&UQ_ALIASES ? "Yes" : "No"); ! 203: sprintf(opt[i++],"%-33.33s%s","Allow Time Banking" ! 204: ,sys_misc&SM_TIMEBANK ? "Yes" : "No"); ! 205: sprintf(opt[i++],"%-33.33s%s","Allow Credit Conversions" ! 206: ,sys_misc&SM_NOCDTCVT ? "No" : "Yes"); ! 207: sprintf(opt[i++],"%-33.33s%s","Allow Local Sysop Access" ! 208: ,sys_misc&SM_L_SYSOP ? "Yes" : "No"); ! 209: sprintf(opt[i++],"%-33.33s%s","Allow Remote Sysop Access" ! 210: ,sys_misc&SM_R_SYSOP ? "Yes" : "No"); ! 211: sprintf(opt[i++],"%-33.33s%s","Echo Passwords Locally" ! 212: ,sys_misc&SM_ECHO_PW ? "Yes" : "No"); ! 213: sprintf(opt[i++],"%-33.33s%s","Require Passwords Locally" ! 214: ,sys_misc&SM_REQ_PW ? "Yes" : "No"); ! 215: sprintf(opt[i++],"%-33.33s%s","Short Sysop Page" ! 216: ,sys_misc&SM_SHRTPAGE ? "Yes" : "No"); ! 217: sprintf(opt[i++],"%-33.33s%s","Sound Alarm on Error" ! 218: ,sys_misc&SM_ERRALARM ? "Yes" : "No"); ! 219: sprintf(opt[i++],"%-33.33s%s","Include Sysop in Statistics" ! 220: ,sys_misc&SM_SYSSTAT ? "Yes" : "No"); ! 221: sprintf(opt[i++],"%-33.33s%s","Closed to New Users" ! 222: ,sys_misc&SM_CLOSED ? "Yes" : "No"); ! 223: sprintf(opt[i++],"%-33.33s%s","Use Location in User Lists" ! 224: ,sys_misc&SM_LISTLOC ? "Yes" : "No"); ! 225: sprintf(opt[i++],"%-33.33s%s","Military (24 hour) Time Format" ! 226: ,sys_misc&SM_MILITARY ? "Yes" : "No"); ! 227: sprintf(opt[i++],"%-33.33s%s","European Date Format (DD/MM/YY)" ! 228: ,sys_misc&SM_EURODATE ? "Yes" : "No"); ! 229: sprintf(opt[i++],"%-33.33s%s","User Expires When Out-of-time" ! 230: ,sys_misc&SM_TIME_EXP ? "Yes" : "No"); ! 231: sprintf(opt[i++],"%-33.33s%s","Quick Validation Hot-Keys" ! 232: ,sys_misc&SM_QVALKEYS ? "Yes" : "No"); ! 233: opt[i][0]=0; ! 234: savnum=0; ! 235: SETHELP(WHERE); ! 236: /* ! 237: &System Toggle Options:& ! 238: ! 239: This is a menu of system related options that can be toggled between ! 240: two or more states, such as &Yes& and &No&. ! 241: */ ! 242: switch(ulist(WIN_ACT|WIN_BOT|WIN_RHT,0,0,41,&tog_dflt,0 ! 243: ,"Toggle Options",opt)) { ! 244: case -1: ! 245: done=1; ! 246: break; ! 247: case 0: ! 248: strcpy(opt[0],"Yes"); ! 249: strcpy(opt[1],"No"); ! 250: opt[2][0]=0; ! 251: i=0; ! 252: SETHELP(WHERE); ! 253: /* ! 254: &Allow Users to Use Aliases:& ! 255: ! 256: If you want the users of your system to be allowed to be known by a ! 257: false name, handle, or alias, set this option to &Yes&. If you want all ! 258: users on your system to be known only by their real names, select &No&. ! 259: */ ! 260: i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0 ! 261: ,"Allow Users to Use Aliases",opt); ! 262: if(!i && !(uq&UQ_ALIASES)) { ! 263: uq|=UQ_ALIASES; ! 264: changes=1; } ! 265: else if(i==1 && uq&UQ_ALIASES) { ! 266: uq&=~UQ_ALIASES; ! 267: changes=1; } ! 268: break; ! 269: case 1: ! 270: strcpy(opt[0],"Yes"); ! 271: strcpy(opt[1],"No"); ! 272: opt[2][0]=0; ! 273: i=0; ! 274: SETHELP(WHERE); ! 275: /* ! 276: &Allow Time Banking:& ! 277: ! 278: If you want the users of your system to be allowed to be deposit ! 279: any extra time they may have left during a call into their minute bank, ! 280: set this option to &Yes&. If this option is set to &No&, then the only ! 281: way a user may get minutes in their minute bank is to purchase them ! 282: with credits. ! 283: */ ! 284: i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0 ! 285: ,"Allow Users to Depost Time in Minute Bank",opt); ! 286: if(!i && !(sys_misc&SM_TIMEBANK)) { ! 287: sys_misc|=SM_TIMEBANK; ! 288: changes=1; } ! 289: else if(i==1 && sys_misc&SM_TIMEBANK) { ! 290: sys_misc&=~SM_TIMEBANK; ! 291: changes=1; } ! 292: break; ! 293: case 2: ! 294: strcpy(opt[0],"Yes"); ! 295: strcpy(opt[1],"No"); ! 296: opt[2][0]=0; ! 297: i=0; ! 298: SETHELP(WHERE); ! 299: /* ! 300: &Allow Credits to be Converted into Minutes:& ! 301: ! 302: If you want the users of your system to be allowed to be convert ! 303: any credits they may have into minutes for their minute bank, ! 304: set this option to &Yes&. ! 305: */ ! 306: i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0 ! 307: ,"Allow Users to Convert Credits into Minutes" ! 308: ,opt); ! 309: if(!i && sys_misc&SM_NOCDTCVT) { ! 310: sys_misc&=~SM_NOCDTCVT; ! 311: changes=1; } ! 312: else if(i==1 && !(sys_misc&SM_NOCDTCVT)) { ! 313: sys_misc|=SM_NOCDTCVT; ! 314: changes=1; } ! 315: break; ! 316: case 3: ! 317: strcpy(opt[0],"Yes"); ! 318: strcpy(opt[1],"No"); ! 319: opt[2][0]=0; ! 320: i=0; ! 321: SETHELP(WHERE); ! 322: /* ! 323: &Allow Local Sysop Access:& ! 324: ! 325: If you want to be able to logon locally with sysop access, set this ! 326: option to &Yes&. ! 327: */ ! 328: i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0 ! 329: ,"Allow Local Sysop Access",opt); ! 330: if(!i && !(sys_misc&SM_L_SYSOP)) { ! 331: sys_misc|=SM_L_SYSOP; ! 332: changes=1; } ! 333: else if(i==1 && sys_misc&SM_L_SYSOP) { ! 334: sys_misc&=~SM_L_SYSOP; ! 335: changes=1; } ! 336: break; ! 337: case 4: ! 338: strcpy(opt[0],"Yes"); ! 339: strcpy(opt[1],"No"); ! 340: opt[2][0]=0; ! 341: i=0; ! 342: SETHELP(WHERE); ! 343: /* ! 344: &Allow Remote Sysop Access:& ! 345: ! 346: If you want to be able to logon remotely with sysop access, set this ! 347: option to &Yes&. ! 348: */ ! 349: i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0 ! 350: ,"Allow Remote Sysop Access",opt); ! 351: if(!i && !(sys_misc&SM_R_SYSOP)) { ! 352: sys_misc|=SM_R_SYSOP; ! 353: changes=1; } ! 354: else if(i==1 && sys_misc&SM_R_SYSOP) { ! 355: sys_misc&=~SM_R_SYSOP; ! 356: changes=1; } ! 357: break; ! 358: case 5: ! 359: strcpy(opt[0],"Yes"); ! 360: strcpy(opt[1],"No"); ! 361: opt[2][0]=0; ! 362: i=0; ! 363: SETHELP(WHERE); ! 364: /* ! 365: &Echo Passwords Locally:& ! 366: ! 367: If you want to passwords to be displayed locally, set this option to ! 368: &Yes&. ! 369: */ ! 370: i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0 ! 371: ,"Echo Passwords Locally",opt); ! 372: if(!i && !(sys_misc&SM_ECHO_PW)) { ! 373: sys_misc|=SM_ECHO_PW; ! 374: changes=1; } ! 375: else if(i==1 && sys_misc&SM_ECHO_PW) { ! 376: sys_misc&=~SM_ECHO_PW; ! 377: changes=1; } ! 378: break; ! 379: case 6: ! 380: strcpy(opt[0],"Yes"); ! 381: strcpy(opt[1],"No"); ! 382: opt[2][0]=0; ! 383: i=0; ! 384: SETHELP(WHERE); ! 385: /* ! 386: &Require Passwords Locally:& ! 387: ! 388: If you want to passwords to be required when logged on locally, set this ! 389: option to &Yes&. ! 390: */ ! 391: i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0 ! 392: ,"Require Passwords Locally",opt); ! 393: if(!i && !(sys_misc&SM_REQ_PW)) { ! 394: sys_misc|=SM_REQ_PW; ! 395: changes=1; } ! 396: else if(i==1 && sys_misc&SM_REQ_PW) { ! 397: sys_misc&=~SM_REQ_PW; ! 398: changes=1; } ! 399: break; ! 400: case 7: ! 401: strcpy(opt[0],"Yes"); ! 402: strcpy(opt[1],"No"); ! 403: opt[2][0]=0; ! 404: i=0; ! 405: SETHELP(WHERE); ! 406: /* ! 407: &Short Sysop Page:& ! 408: ! 409: If you would like the sysop page to be a short series of beeps rather ! 410: than continuous random tones, set this option to &Yes&. ! 411: */ ! 412: i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0,"Short Sysop Page" ! 413: ,opt); ! 414: if(i==1 && sys_misc&SM_SHRTPAGE) { ! 415: sys_misc&=~SM_SHRTPAGE; ! 416: changes=1; } ! 417: else if(!i && !(sys_misc&SM_SHRTPAGE)) { ! 418: sys_misc|=SM_SHRTPAGE; ! 419: changes=1; } ! 420: break; ! 421: case 8: ! 422: strcpy(opt[0],"Yes"); ! 423: strcpy(opt[1],"No"); ! 424: opt[2][0]=0; ! 425: i=0; ! 426: SETHELP(WHERE); ! 427: /* ! 428: &Sound Alarm on Error:& ! 429: ! 430: If you would like to have an alarm sounded locally when a critical ! 431: system error has occured, set this option to &Yes&. ! 432: */ ! 433: i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0 ! 434: ,"Sound Alarm on Error",opt); ! 435: if(i==1 && sys_misc&SM_ERRALARM) { ! 436: sys_misc&=~SM_ERRALARM; ! 437: changes=1; } ! 438: else if(!i && !(sys_misc&SM_ERRALARM)) { ! 439: sys_misc|=SM_ERRALARM; ! 440: changes=1; } ! 441: break; ! 442: case 9: ! 443: strcpy(opt[0],"Yes"); ! 444: strcpy(opt[1],"No"); ! 445: opt[2][0]=0; ! 446: i=1; ! 447: SETHELP(WHERE); ! 448: /* ! 449: &Include Sysop Activity in System Statistics:& ! 450: ! 451: If you want sysops to be included in the statistical data of the BBS, ! 452: set this option to &Yes&. The suggested setting for this option is ! 453: &No& so that statistical data will only reflect user usage and not ! 454: include sysop maintenance activity. ! 455: */ ! 456: i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0 ! 457: ,"Include Sysop Activity in System Statistics" ! 458: ,opt); ! 459: if(!i && !(sys_misc&SM_SYSSTAT)) { ! 460: sys_misc|=SM_SYSSTAT; ! 461: changes=1; } ! 462: else if(i==1 && sys_misc&SM_SYSSTAT) { ! 463: sys_misc&=~SM_SYSSTAT; ! 464: changes=1; } ! 465: break; ! 466: case 10: ! 467: strcpy(opt[0],"Yes"); ! 468: strcpy(opt[1],"No"); ! 469: opt[2][0]=0; ! 470: i=1; ! 471: SETHELP(WHERE); ! 472: /* ! 473: &Closed to New Users:& ! 474: ! 475: If you want callers to be able to logon as &New&, set this option to &No&. ! 476: */ ! 477: i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0 ! 478: ,"Closed to New Users",opt); ! 479: if(!i && !(sys_misc&SM_CLOSED)) { ! 480: sys_misc|=SM_CLOSED; ! 481: changes=1; } ! 482: else if(i==1 && sys_misc&SM_CLOSED) { ! 483: sys_misc&=~SM_CLOSED; ! 484: changes=1; } ! 485: break; ! 486: case 11: ! 487: strcpy(opt[0],"Yes"); ! 488: strcpy(opt[1],"No"); ! 489: opt[2][0]=0; ! 490: i=0; ! 491: SETHELP(WHERE); ! 492: /* ! 493: &User Location in User Lists:& ! 494: ! 495: If you want user locations (city, state) displayed in the user lists, ! 496: set this option to &Yes&. If this option is set to &No&, the user notes ! 497: (if they exist) are displayed in the user lists. ! 498: */ ! 499: i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0 ! 500: ,"User Location (Instead of Note) in User Lists" ! 501: ,opt); ! 502: if(!i && !(sys_misc&SM_LISTLOC)) { ! 503: sys_misc|=SM_LISTLOC; ! 504: changes=1; } ! 505: else if(i==1 && sys_misc&SM_LISTLOC) { ! 506: sys_misc&=~SM_LISTLOC; ! 507: changes=1; } ! 508: break; ! 509: case 12: ! 510: strcpy(opt[0],"Yes"); ! 511: strcpy(opt[1],"No"); ! 512: opt[2][0]=0; ! 513: i=1; ! 514: SETHELP(WHERE); ! 515: /* ! 516: &Military:& ! 517: ! 518: If you would like the time-of-day to be displayed and entered in 24 hour ! 519: format always, set this option to &Yes&. ! 520: */ ! 521: i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0 ! 522: ,"Use Military Time Format",opt); ! 523: if(!i && !(sys_misc&SM_MILITARY)) { ! 524: sys_misc|=SM_MILITARY; ! 525: changes=1; } ! 526: else if(i==1 && sys_misc&SM_MILITARY) { ! 527: sys_misc&=~SM_MILITARY; ! 528: changes=1; } ! 529: break; ! 530: case 13: ! 531: strcpy(opt[0],"Yes"); ! 532: strcpy(opt[1],"No"); ! 533: opt[2][0]=0; ! 534: i=1; ! 535: SETHELP(WHERE); ! 536: /* ! 537: &European Date Format:& ! 538: ! 539: If you would like dates to be displayed and entered in &DD/MM/YY& format ! 540: instead of &MM/DD/YY& format, set this option to &Yes&. ! 541: */ ! 542: i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0 ! 543: ,"European Date Format",opt); ! 544: if(!i && !(sys_misc&SM_EURODATE)) { ! 545: sys_misc|=SM_EURODATE; ! 546: changes=1; } ! 547: else if(i==1 && sys_misc&SM_EURODATE) { ! 548: sys_misc&=~SM_EURODATE; ! 549: changes=1; } ! 550: break; ! 551: ! 552: case 14: ! 553: strcpy(opt[0],"Yes"); ! 554: strcpy(opt[1],"No"); ! 555: opt[2][0]=0; ! 556: i=1; ! 557: SETHELP(WHERE); ! 558: /* ! 559: &User Expires When Out-of-time:& ! 560: ! 561: If you want users to be set to &Expired User Values& if they run out of ! 562: time online, then set this option to &Yes&. ! 563: */ ! 564: i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0 ! 565: ,"User Expires When Out-of-time",opt); ! 566: if(!i && !(sys_misc&SM_TIME_EXP)) { ! 567: sys_misc|=SM_TIME_EXP; ! 568: changes=1; } ! 569: else if(i==1 && sys_misc&SM_TIME_EXP) { ! 570: sys_misc&=~SM_TIME_EXP; ! 571: changes=1; } ! 572: break; ! 573: ! 574: case 15: ! 575: strcpy(opt[0],"Yes"); ! 576: strcpy(opt[1],"No"); ! 577: opt[2][0]=0; ! 578: i=1; ! 579: SETHELP(WHERE); ! 580: /* ! 581: &Quick Validation Hot-Keys:& ! 582: ! 583: If you would like to enable the &Alt-#& hot-keys for quick user ! 584: validation, set this option to &Yes&. ! 585: */ ! 586: i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0 ! 587: ,"Quick Validation Hot-Keys",opt); ! 588: if(!i && !(sys_misc&SM_QVALKEYS)) { ! 589: sys_misc|=SM_QVALKEYS; ! 590: changes=1; } ! 591: else if(i==1 && sys_misc&SM_QVALKEYS) { ! 592: sys_misc&=~SM_QVALKEYS; ! 593: changes=1; } ! 594: break; ! 595: ! 596: } } ! 597: break; ! 598: case 9: /* New User Values */ ! 599: done=0; ! 600: while(!done) { ! 601: i=0; ! 602: sprintf(opt[i++],"%-27.27s%u","Level",new_level); ! 603: sprintf(opt[i++],"%-27.27s%s","Flag Set #1" ! 604: ,ltoaf(new_flags1,str)); ! 605: sprintf(opt[i++],"%-27.27s%s","Flag Set #2" ! 606: ,ltoaf(new_flags2,str)); ! 607: sprintf(opt[i++],"%-27.27s%s","Flag Set #3" ! 608: ,ltoaf(new_flags3,str)); ! 609: sprintf(opt[i++],"%-27.27s%s","Flag Set #4" ! 610: ,ltoaf(new_flags4,str)); ! 611: sprintf(opt[i++],"%-27.27s%s","Exemptions" ! 612: ,ltoaf(new_exempt,str)); ! 613: sprintf(opt[i++],"%-27.27s%s","Restrictions" ! 614: ,ltoaf(new_rest,str)); ! 615: sprintf(opt[i++],"%-27.27s%s","Expiration Days" ! 616: ,itoa(new_expire,str,10)); ! 617: ! 618: ultoac(new_cdt,str); ! 619: sprintf(opt[i++],"%-27.27s%s","Credits",str); ! 620: ultoac(new_min,str); ! 621: sprintf(opt[i++],"%-27.27s%s","Minutes",str); ! 622: sprintf(opt[i++],"%-27.27s%s","Editor" ! 623: ,new_xedit); ! 624: sprintf(opt[i++],"%-27.27s%s","Command Shell" ! 625: ,shell[new_shell]->code); ! 626: if(new_prot!=SP) ! 627: sprintf(str,"%c",new_prot); ! 628: else ! 629: strcpy(str,"None"); ! 630: sprintf(opt[i++],"%-27.27s%s","Download Protocol",str); ! 631: strcpy(opt[i++],"Default Toggles..."); ! 632: strcpy(opt[i++],"Question Toggles..."); ! 633: opt[i][0]=0; ! 634: SETHELP(WHERE); ! 635: /* ! 636: &New User Values:& ! 637: ! 638: This menu allows you to determine the default settings for new users. ! 639: */ ! 640: switch(ulist(WIN_ACT|WIN_BOT|WIN_RHT,0,0,60,&new_dflt,0 ! 641: ,"New User Values",opt)) { ! 642: case -1: ! 643: done=1; ! 644: break; ! 645: case 0: ! 646: itoa(new_level,str,10); ! 647: SETHELP(WHERE); ! 648: /* ! 649: &New User Security Level:& ! 650: ! 651: This is the security level automatically given to new users. ! 652: */ ! 653: uinput(WIN_SAV|WIN_MID,0,0,"Security Level" ! 654: ,str,2,K_EDIT|K_NUMBER); ! 655: new_level=atoi(str); ! 656: break; ! 657: case 1: ! 658: ltoaf(new_flags1,str); ! 659: SETHELP(WHERE); ! 660: /* ! 661: &New User Security Flags:& ! 662: ! 663: These are the security flags automatically given to new users. ! 664: */ ! 665: uinput(WIN_SAV|WIN_MID,0,0,"Flag Set #1" ! 666: ,str,26,K_EDIT|K_UPPER|K_ALPHA); ! 667: new_flags1=aftol(str); ! 668: break; ! 669: case 2: ! 670: ltoaf(new_flags2,str); ! 671: SETHELP(WHERE); ! 672: /* ! 673: &New User Security Flags:& ! 674: ! 675: These are the security flags automatically given to new users. ! 676: */ ! 677: uinput(WIN_SAV|WIN_MID,0,0,"Flag Set #2" ! 678: ,str,26,K_EDIT|K_UPPER|K_ALPHA); ! 679: new_flags2=aftol(str); ! 680: break; ! 681: case 3: ! 682: ltoaf(new_flags3,str); ! 683: SETHELP(WHERE); ! 684: /* ! 685: &New User Security Flags:& ! 686: ! 687: These are the security flags automatically given to new users. ! 688: */ ! 689: uinput(WIN_SAV|WIN_MID,0,0,"Flag Set #3" ! 690: ,str,26,K_EDIT|K_UPPER|K_ALPHA); ! 691: new_flags3=aftol(str); ! 692: break; ! 693: case 4: ! 694: ltoaf(new_flags4,str); ! 695: SETHELP(WHERE); ! 696: /* ! 697: &New User Security Flags:& ! 698: ! 699: These are the security flags automatically given to new users. ! 700: */ ! 701: uinput(WIN_SAV|WIN_MID,0,0,"Flag Set #4" ! 702: ,str,26,K_EDIT|K_UPPER|K_ALPHA); ! 703: new_flags4=aftol(str); ! 704: break; ! 705: case 5: ! 706: ltoaf(new_exempt,str); ! 707: SETHELP(WHERE); ! 708: /* ! 709: &New User Exemption Flags:& ! 710: ! 711: These are the exemptions that are automatically given to new users. ! 712: */ ! 713: uinput(WIN_SAV|WIN_MID,0,0,"Exemption Flags",str,26 ! 714: ,K_EDIT|K_UPPER|K_ALPHA); ! 715: new_exempt=aftol(str); ! 716: break; ! 717: case 6: ! 718: ltoaf(new_rest,str); ! 719: SETHELP(WHERE); ! 720: /* ! 721: &New User Restriction Flags:& ! 722: ! 723: These are the restrictions that are automatically given to new users. ! 724: */ ! 725: uinput(WIN_SAV|WIN_MID,0,0,"Restriction Flags",str,26 ! 726: ,K_EDIT|K_UPPER|K_ALPHA); ! 727: new_rest=aftol(str); ! 728: break; ! 729: case 7: ! 730: itoa(new_expire,str,10); ! 731: SETHELP(WHERE); ! 732: /* ! 733: &New User Expiration Days:& ! 734: ! 735: If you wish new users to have an automatic expiration date, set this ! 736: value to the number of days before the user will expire. To disable ! 737: New User expiration, set this value to &0&. ! 738: */ ! 739: uinput(WIN_SAV|WIN_MID,0,0,"Expiration Days",str,4 ! 740: ,K_EDIT|K_NUMBER); ! 741: new_expire=atoi(str); ! 742: break; ! 743: case 8: ! 744: ultoa(new_cdt,str,10); ! 745: SETHELP(WHERE); ! 746: /* ! 747: &New User Credits:& ! 748: ! 749: This is the amount of credits that are automatically given to new users. ! 750: */ ! 751: uinput(WIN_SAV|WIN_MID,0,0,"Credits",str,10 ! 752: ,K_EDIT|K_NUMBER); ! 753: new_cdt=atol(str); ! 754: break; ! 755: case 9: ! 756: ultoa(new_min,str,10); ! 757: SETHELP(WHERE); ! 758: /* ! 759: &New User Minutes:& ! 760: ! 761: This is the number of extra minutes automatically given to new users. ! 762: */ ! 763: uinput(WIN_SAV|WIN_MID,0,0,"Minutes (Time Credit)" ! 764: ,str,10,K_EDIT|K_NUMBER); ! 765: new_min=atol(str); ! 766: break; ! 767: case 10: ! 768: if(!total_xedits) { ! 769: umsg("No External Editors Configured"); ! 770: break; } ! 771: strcpy(opt[0],"Internal"); ! 772: for(i=1;i<=total_xedits;i++) ! 773: strcpy(opt[i],xedit[i-1]->code); ! 774: opt[i][0]=0; ! 775: i=0; ! 776: savnum=0; ! 777: SETHELP(WHERE); ! 778: /* ! 779: &New User Editor:& ! 780: ! 781: You can use this option to select the default editor for new users. ! 782: */ ! 783: i=ulist(WIN_SAV|WIN_RHT,2,1,13,&i,0,"Editors",opt); ! 784: if(i==-1) ! 785: break; ! 786: changes=1; ! 787: if(i && i<=total_xedits) ! 788: sprintf(new_xedit,"%-.8s",xedit[i-1]->code); ! 789: else ! 790: new_xedit[0]=0; ! 791: break; ! 792: case 11: ! 793: for(i=0;i<total_shells && i<MAX_OPTS;i++) ! 794: sprintf(opt[i],"%-.8s",shell[i]->code); ! 795: opt[i][0]=0; ! 796: i=0; ! 797: savnum=0; ! 798: SETHELP(WHERE); ! 799: /* ! 800: &New User Command Shell:& ! 801: ! 802: You can use this option to select the default command shell for new ! 803: users. ! 804: */ ! 805: i=ulist(WIN_SAV|WIN_RHT,2,1,13,&i,0 ! 806: ,"Command Shells",opt); ! 807: if(i==-1) ! 808: break; ! 809: new_shell=i; ! 810: changes=1; ! 811: break; ! 812: case 12: ! 813: SETHELP(WHERE); ! 814: /* ! 815: &New User Default Download Protocol:& ! 816: ! 817: This option allows you to set the default download protocol of new users ! 818: (protocol command key or &BLANK& for no default). ! 819: */ ! 820: sprintf(str,"%c",new_prot); ! 821: uinput(WIN_SAV|WIN_MID,0,0 ! 822: ,"Default Download Protocol (SPACE=Disabled)" ! 823: ,str,1,K_EDIT|K_UPPER); ! 824: new_prot=str[0]; ! 825: if(new_prot<SP) ! 826: new_prot=SP; ! 827: break; ! 828: case 13: ! 829: SETHELP(WHERE); ! 830: /* ! 831: &New User Default Toggle Options:& ! 832: ! 833: This menu contains the default state of new user toggle options. All new ! 834: users on your system will have their defaults set according to the ! 835: settings on this menu. The user can then change them to his or her ! 836: liking. ! 837: ! 838: See the Synchronet User Manual for more information on the individual ! 839: options available. ! 840: */ ! 841: j=0; ! 842: while(1) { ! 843: i=0; ! 844: sprintf(opt[i++],"%-27.27s %-3.3s" ! 845: ,"Expert Menu Mode" ! 846: ,new_misc&EXPERT ? "Yes":"No"); ! 847: sprintf(opt[i++],"%-27.27s %-3.3s" ! 848: ,"Screen Pause" ! 849: ,new_misc&UPAUSE ? "Yes":"No"); ! 850: sprintf(opt[i++],"%-27.27s %-3.3s" ! 851: ,"Spinning Cursor" ! 852: ,new_misc&SPIN ? "Yes":"No"); ! 853: sprintf(opt[i++],"%-27.27s %-3.3s" ! 854: ,"Clear Screen" ! 855: ,new_misc&CLRSCRN ? "Yes":"No"); ! 856: sprintf(opt[i++],"%-27.27s %-3.3s" ! 857: ,"Ask For New Scan" ! 858: ,new_misc&ASK_NSCAN ? "Yes":"No"); ! 859: sprintf(opt[i++],"%-27.27s %-3.3s" ! 860: ,"Ask For Your Msg Scan" ! 861: ,new_misc&ASK_SSCAN ? "Yes":"No"); ! 862: sprintf(opt[i++],"%-27.27s %-3.3s" ! 863: ,"Automatic New File Scan" ! 864: ,new_misc&ANFSCAN ? "Yes":"No"); ! 865: sprintf(opt[i++],"%-27.27s %-3.3s" ! 866: ,"Remember Current Sub-board" ! 867: ,new_misc&CURSUB ? "Yes":"No"); ! 868: sprintf(opt[i++],"%-27.27s %-3.3s" ! 869: ,"Batch Download File Flag" ! 870: ,new_misc&BATCHFLAG ? "Yes":"No"); ! 871: sprintf(opt[i++],"%-27.27s %-3.3s" ! 872: ,"Extended File Descriptions" ! 873: ,new_misc&EXTDESC ? "Yes":"No"); ! 874: sprintf(opt[i++],"%-27.27s %-3.3s" ! 875: ,"Hot Keys" ! 876: ,new_misc&COLDKEYS ? "No":"Yes"); ! 877: sprintf(opt[i++],"%-27.27s %-3.3s" ! 878: ,"Auto Hang-up After Xfer" ! 879: ,new_misc&AUTOHANG ? "Yes":"No"); ! 880: opt[i][0]=0; ! 881: j=ulist(WIN_BOT|WIN_RHT,2,1,0,&j,0 ! 882: ,"Default Toggle Options",opt); ! 883: if(j==-1) ! 884: break; ! 885: changes=1; ! 886: switch(j) { ! 887: case 0: ! 888: new_misc^=EXPERT; ! 889: break; ! 890: case 1: ! 891: new_misc^=UPAUSE; ! 892: break; ! 893: case 2: ! 894: new_misc^=SPIN; ! 895: break; ! 896: case 3: ! 897: new_misc^=CLRSCRN; ! 898: break; ! 899: case 4: ! 900: new_misc^=ASK_NSCAN; ! 901: break; ! 902: case 5: ! 903: new_misc^=ASK_SSCAN; ! 904: break; ! 905: case 6: ! 906: new_misc^=ANFSCAN; ! 907: break; ! 908: case 7: ! 909: new_misc^=CURSUB; ! 910: break; ! 911: case 8: ! 912: new_misc^=BATCHFLAG; ! 913: break; ! 914: case 9: ! 915: new_misc^=EXTDESC; ! 916: break; ! 917: case 10: ! 918: new_misc^=COLDKEYS; ! 919: break; ! 920: case 11: ! 921: new_misc^=AUTOHANG; ! 922: break; ! 923: } } ! 924: break; ! 925: case 14: ! 926: SETHELP(WHERE); ! 927: /* ! 928: &New User Question Toggle Options:& ! 929: ! 930: This menu allows you to decide which questions will be asked of a new ! 931: user. ! 932: */ ! 933: j=0; ! 934: while(1) { ! 935: i=0; ! 936: sprintf(opt[i++],"%-27.27s %-3.3s" ! 937: ,"Real Name" ! 938: ,uq&UQ_REALNAME ? "Yes":"No"); ! 939: sprintf(opt[i++],"%-27.27s %-3.3s" ! 940: ,"Force Unique Real Name" ! 941: ,uq&UQ_DUPREAL ? "Yes":"No"); ! 942: sprintf(opt[i++],"%-27.27s %-3.3s" ! 943: ,"Company Name" ! 944: ,uq&UQ_COMPANY ? "Yes":"No"); ! 945: sprintf(opt[i++],"%-27.27s %-3.3s" ! 946: ,"Multinode Chat Handle" ! 947: ,uq&UQ_HANDLE ? "Yes":"No"); ! 948: sprintf(opt[i++],"%-27.27s %-3.3s" ! 949: ,"Force Unique Chat Handle" ! 950: ,uq&UQ_DUPHAND ? "Yes":"No"); ! 951: sprintf(opt[i++],"%-27.27s %-3.3s" ! 952: ,"Sex (Gender)" ! 953: ,uq&UQ_SEX ? "Yes":"No"); ! 954: sprintf(opt[i++],"%-27.27s %-3.3s" ! 955: ,"Birthday" ! 956: ,uq&UQ_BIRTH ? "Yes":"No"); ! 957: sprintf(opt[i++],"%-27.27s %-3.3s" ! 958: ,"Address and Zip Code" ! 959: ,uq&UQ_ADDRESS ? "Yes":"No"); ! 960: sprintf(opt[i++],"%-27.27s %-3.3s" ! 961: ,"Location" ! 962: ,uq&UQ_LOCATION ? "Yes":"No"); ! 963: sprintf(opt[i++],"%-27.27s %-3.3s" ! 964: ,"Require Comma in Location" ! 965: ,uq&UQ_NOCOMMAS ? "No":"Yes"); ! 966: sprintf(opt[i++],"%-27.27s %-3.3s" ! 967: ,"Phone Number" ! 968: ,uq&UQ_PHONE ? "Yes":"No"); ! 969: sprintf(opt[i++],"%-27.27s %-3.3s" ! 970: ,"Computer Type" ! 971: ,uq&UQ_COMP ? "Yes":"No"); ! 972: sprintf(opt[i++],"%-27.27s %-3.3s" ! 973: ,"Multiple Choice Computer" ! 974: ,uq&UQ_MC_COMP ? "Yes":"No"); ! 975: sprintf(opt[i++],"%-27.27s %-3.3s" ! 976: ,"Allow EX-ASCII in Answers" ! 977: ,uq&UQ_NOEXASC ? "No":"Yes"); ! 978: sprintf(opt[i++],"%-27.27s %-3.3s" ! 979: ,"External Editor" ! 980: ,uq&UQ_XEDIT ? "Yes":"No"); ! 981: sprintf(opt[i++],"%-27.27s %-3.3s" ! 982: ,"Command Shell" ! 983: ,uq&UQ_CMDSHELL ? "Yes":"No"); ! 984: sprintf(opt[i++],"%-27.27s %-3.3s" ! 985: ,"Default Settings" ! 986: ,uq&UQ_NODEF ? "No":"Yes"); ! 987: opt[i][0]=0; ! 988: j=ulist(WIN_BOT|WIN_RHT|WIN_SAV,2,1,0,&j,0 ! 989: ,"New User Questions",opt); ! 990: if(j==-1) ! 991: break; ! 992: changes=1; ! 993: switch(j) { ! 994: case 0: ! 995: uq^=UQ_REALNAME; ! 996: break; ! 997: case 1: ! 998: uq^=UQ_DUPREAL; ! 999: break; ! 1000: case 2: ! 1001: uq^=UQ_COMPANY; ! 1002: break; ! 1003: case 3: ! 1004: uq^=UQ_HANDLE; ! 1005: break; ! 1006: case 4: ! 1007: uq^=UQ_DUPHAND; ! 1008: break; ! 1009: case 5: ! 1010: uq^=UQ_SEX; ! 1011: break; ! 1012: case 6: ! 1013: uq^=UQ_BIRTH; ! 1014: break; ! 1015: case 7: ! 1016: uq^=UQ_ADDRESS; ! 1017: break; ! 1018: case 8: ! 1019: uq^=UQ_LOCATION; ! 1020: break; ! 1021: case 9: ! 1022: uq^=UQ_NOCOMMAS; ! 1023: break; ! 1024: case 10: ! 1025: uq^=UQ_PHONE; ! 1026: break; ! 1027: case 11: ! 1028: uq^=UQ_COMP; ! 1029: break; ! 1030: case 12: ! 1031: uq^=UQ_MC_COMP; ! 1032: break; ! 1033: case 13: ! 1034: uq^=UQ_NOEXASC; ! 1035: break; ! 1036: case 14: ! 1037: uq^=UQ_XEDIT; ! 1038: break; ! 1039: case 15: ! 1040: uq^=UQ_CMDSHELL; ! 1041: break; ! 1042: case 16: ! 1043: uq^=UQ_NODEF; ! 1044: break; ! 1045: } } ! 1046: break; } } ! 1047: break; ! 1048: case 10: /* Advanced Options */ ! 1049: done=0; ! 1050: while(!done) { ! 1051: i=0; ! 1052: sprintf(opt[i++],"%-27.27s%s","New User Magic Word",new_magic); ! 1053: sprintf(opt[i++],"%-27.27s%.40s","Data Directory",data_dir); ! 1054: sprintf(opt[i++],"%-27.27s%.40s","Executables Directory" ! 1055: ,exec_dir); ! 1056: sprintf(opt[i++],"%-27.27s%s","Input SIF Questionnaire" ! 1057: ,new_sif); ! 1058: sprintf(opt[i++],"%-27.27s%s","Output SIF Questionnaire" ! 1059: ,new_sof); ! 1060: ultoac(cdt_per_dollar,str); ! 1061: sprintf(opt[i++],"%-27.27s%s","Credits Per Dollar",str); ! 1062: sprintf(opt[i++],"%-27.27s%u","Minutes Per 100k Credits" ! 1063: ,cdt_min_value); ! 1064: sprintf(opt[i++],"%-27.27s%s","Maximum Number of Minutes" ! 1065: ,max_minutes ? ltoa(max_minutes,tmp,10) : "Unlimited"); ! 1066: sprintf(opt[i++],"%-27.27s%u","Warning Days Till Expire" ! 1067: ,sys_exp_warn); ! 1068: sprintf(opt[i++],"%-27.27s%u","Default Status Line" ! 1069: ,sys_def_stat); ! 1070: sprintf(opt[i++],"%-27.27s%u","Last Displayable Node" ! 1071: ,sys_lastnode); ! 1072: sprintf(opt[i++],"%-27.27s%u","First Local Auto-Node" ! 1073: ,sys_autonode); ! 1074: sprintf(opt[i++],"%-27.27s%s","Phone Number Format" ! 1075: ,sys_phonefmt); ! 1076: sprintf(opt[i++],"%-27.27s%.40s","Sysop Chat Requirements" ! 1077: ,sys_chat_ar); ! 1078: opt[i][0]=0; ! 1079: savnum=0; ! 1080: SETHELP(WHERE); ! 1081: /* ! 1082: &System Advanced Options:& ! 1083: ! 1084: Care should be taken when modifying any of the options listed here. ! 1085: */ ! 1086: switch(ulist(WIN_ACT|WIN_BOT|WIN_RHT,0,0,60,&adv_dflt,0 ! 1087: ,"Advanced Options",opt)) { ! 1088: case -1: ! 1089: done=1; ! 1090: break; ! 1091: ! 1092: case 0: ! 1093: SETHELP(WHERE); ! 1094: /* ! 1095: &New User Magic Word:& ! 1096: ! 1097: If this field has a value, it is assumed the sysop has placed some ! 1098: reference to this &magic word& in TEXT\NEWUSER.MSG and new users ! 1099: will be prompted for the magic word after they enter their password. ! 1100: If they do not enter it correctly, it is assumed they didn't read the ! 1101: new user information displayed to them and they are disconnected. ! 1102: ! 1103: Think of it as a password to guarantee that new users read the text ! 1104: displayed to them. ! 1105: */ ! 1106: uinput(WIN_MID,0,0,"New User Magic Word",new_magic,20 ! 1107: ,K_EDIT|K_UPPER); ! 1108: break; ! 1109: case 1: ! 1110: SETHELP(WHERE); ! 1111: /* ! 1112: &Data Directory Parent:& ! 1113: ! 1114: The Synchronet data directory contains almost all the data for your BBS. ! 1115: This directory must be located where &ALL& nodes can access it and ! 1116: &MUST NOT& be placed on a RAM disk or other volatile media. ! 1117: ! 1118: This option allows you to change the parent of your data directory. ! 1119: The &\DATA\& suffix (sub-directory) cannot be changed or removed. ! 1120: */ ! 1121: strcpy(str,data_dir); ! 1122: if(strstr(str,"\\DATA\\")!=NULL) ! 1123: *strstr(str,"\\DATA\\")=0; ! 1124: if(uinput(WIN_MID|WIN_SAV,0,9,"Data Dir Parent" ! 1125: ,str,50,K_EDIT|K_UPPER)>0) { ! 1126: if(str[strlen(str)-1]!='\\') ! 1127: strcat(str,"\\"); ! 1128: strcat(str,"DATA\\"); ! 1129: strcpy(data_dir,str); } ! 1130: break; ! 1131: case 2: ! 1132: SETHELP(WHERE); ! 1133: /* ! 1134: &Exec Directory Parent:& ! 1135: ! 1136: The Synchronet exec directory contains executable files that your BBS ! 1137: executes. This directory does ¬& need to be in your DOS search path. ! 1138: If you place programs in this directory for the BBS to execute, you ! 1139: should place the &%!& abreviation for this exec directory at the ! 1140: beginning of the command line. ! 1141: ! 1142: This option allows you to change the parent of your exec directory. ! 1143: The &\EXEC\& suffix (sub-directory) cannot be changed or removed. ! 1144: */ ! 1145: strcpy(str,exec_dir); ! 1146: if(strstr(str,"\\EXEC\\")!=NULL) ! 1147: *strstr(str,"\\EXEC\\")=0; ! 1148: if(uinput(WIN_MID|WIN_SAV,0,9,"Exec Dir Parent" ! 1149: ,str,50,K_EDIT|K_UPPER)>0) { ! 1150: if(str[strlen(str)-1]!='\\') ! 1151: strcat(str,"\\"); ! 1152: strcat(str,"EXEC\\"); ! 1153: strcpy(exec_dir,str); } ! 1154: break; ! 1155: case 3: ! 1156: strcpy(str,new_sif); ! 1157: SETHELP(WHERE); ! 1158: /* ! 1159: &SIF Questionnaire for User Input:& ! 1160: ! 1161: This is the name of a SIF questionnaire file that resides your text ! 1162: directory that all users will be prompted to answer. ! 1163: */ ! 1164: uinput(WIN_MID|WIN_SAV,0,0 ! 1165: ,"SIF Questionnaire for User Input" ! 1166: ,str,8,K_UPPER|K_EDIT); ! 1167: if(!str[0] || code_ok(str)) ! 1168: strcpy(new_sif,str); ! 1169: else ! 1170: umsg("Invalid SIF Name"); ! 1171: break; ! 1172: case 4: ! 1173: strcpy(str,new_sof); ! 1174: SETHELP(WHERE); ! 1175: /* ! 1176: &SIF Questionnaire for Reviewing User Input:& ! 1177: ! 1178: This is the SIF file used to review the input of users from the user ! 1179: edit function. ! 1180: */ ! 1181: uinput(WIN_MID|WIN_SAV,0,0 ! 1182: ,"SIF Questionnaire for Reviewing User Input" ! 1183: ,str,8,K_UPPER|K_EDIT); ! 1184: if(!str[0] || code_ok(str)) ! 1185: strcpy(new_sof,str); ! 1186: else ! 1187: umsg("Invalid SIF Name"); ! 1188: break; ! 1189: case 5: ! 1190: SETHELP(WHERE); ! 1191: /* ! 1192: &Credits Per Dollar:& ! 1193: ! 1194: This is the monetary value of a credit (How many credits per dollar). ! 1195: This value should be a power of 2 (1, 2, 4, 8, 16, 32, 64, 128, etc.) ! 1196: since credits are usually converted by 100 kilobyte (102400) blocks. ! 1197: To make a dollar worth two megabytes of credits, set this value to ! 1198: 2,097,152 (a megabyte is 1024*1024 or 1048576). ! 1199: */ ! 1200: ultoa(cdt_per_dollar,str,10); ! 1201: uinput(WIN_MID|WIN_SAV,0,0 ! 1202: ,"Credits Per Dollar",str,10,K_NUMBER|K_EDIT); ! 1203: cdt_per_dollar=atol(str); ! 1204: break; ! 1205: case 6: ! 1206: SETHELP(WHERE); ! 1207: /* ! 1208: &Minutes Per 100K Credits:& ! 1209: ! 1210: This is the value of a minute of time online. This field is the number ! 1211: of minutes to give the user in exchange for each 100K credit block. ! 1212: */ ! 1213: sprintf(str,"%u",cdt_min_value); ! 1214: uinput(WIN_MID|WIN_SAV,0,0 ! 1215: ,"Minutes Per 100K Credits",str,5,K_NUMBER|K_EDIT); ! 1216: cdt_min_value=atoi(str); ! 1217: break; ! 1218: case 7: ! 1219: SETHELP(WHERE); ! 1220: /* ! 1221: &Maximum Number of Minutes User Can Have:& ! 1222: ! 1223: This value is the maximum total number of minutes a user can have. If a ! 1224: user has this number of minutes or more, they will not be allowed to ! 1225: convert credits into minutes. A sysop can add minutes to a user's ! 1226: account regardless of this maximum. If this value is set to &0&, users ! 1227: will have no limit on the total number of minutes they can have. ! 1228: */ ! 1229: sprintf(str,"%lu",max_minutes); ! 1230: uinput(WIN_MID|WIN_SAV,0,0 ! 1231: ,"Maximum Number of Minutes a User Can Have " ! 1232: "(0=No Limit)" ! 1233: ,str,10,K_NUMBER|K_EDIT); ! 1234: max_minutes=atol(str); ! 1235: break; ! 1236: case 8: ! 1237: SETHELP(WHERE); ! 1238: /* ! 1239: &Warning Days Till Expire:& ! 1240: ! 1241: If a user's account will expire in this many days or less, the user will ! 1242: be notified at logon. Setting this value to &0& disables the warning ! 1243: completely. ! 1244: */ ! 1245: sprintf(str,"%u",sys_exp_warn); ! 1246: uinput(WIN_MID|WIN_SAV,0,0 ! 1247: ,"Warning Days Till Expire",str,5,K_NUMBER|K_EDIT); ! 1248: sys_exp_warn=atoi(str); ! 1249: break; ! 1250: case 9: ! 1251: SETHELP(WHERE); ! 1252: /* ! 1253: &Default Status Line:& ! 1254: ! 1255: This is the number of the status line format that will be the default ! 1256: display on the bottom line of the screen. For explanation of the ! 1257: available status lines, see the sysop documentation. ! 1258: */ ! 1259: sprintf(str,"%u",sys_def_stat); ! 1260: uinput(WIN_MID|WIN_SAV,0,0 ! 1261: ,"Default Status Line",str,5,K_NUMBER|K_EDIT); ! 1262: sys_def_stat=atoi(str); ! 1263: break; ! 1264: case 10: ! 1265: SETHELP(WHERE); ! 1266: /* ! 1267: &Last Displayed Node:& ! 1268: ! 1269: This is the number of the last node to display to users in node lists. ! 1270: This allows the sysop to define the higher numbered nodes as &invisible& ! 1271: to users. ! 1272: */ ! 1273: sprintf(str,"%u",sys_lastnode); ! 1274: uinput(WIN_MID|WIN_SAV,0,0 ! 1275: ,"Last Displayed Node",str,5,K_NUMBER|K_EDIT); ! 1276: sys_lastnode=atoi(str); ! 1277: break; ! 1278: case 11: ! 1279: SETHELP(WHERE); ! 1280: /* ! 1281: &First Local Auto-Node:& ! 1282: ! 1283: This is the number of the first node in the search for an available ! 1284: node for local login using the &AUTONODE& utility. ! 1285: */ ! 1286: sprintf(str,"%u",sys_autonode); ! 1287: uinput(WIN_MID|WIN_SAV,0,0 ! 1288: ,"First Local Auto-Node",str,5,K_NUMBER|K_EDIT); ! 1289: sys_autonode=atoi(str); ! 1290: break; ! 1291: case 12: ! 1292: SETHELP(WHERE); ! 1293: /* ! 1294: &Phone Number Format:& ! 1295: ! 1296: This is the format used for phone numbers in your local calling ! 1297: area. Use &N& for number positions, &A& for alphabetic, or &!& for any ! 1298: character. All other characters will be static in the phone number ! 1299: format. An example for North American phone numbers is &NNN-NNN-NNNN&. ! 1300: */ ! 1301: uinput(WIN_MID|WIN_SAV,0,0 ! 1302: ,"Phone Number Format",sys_phonefmt ! 1303: ,LEN_PHONE,K_UPPER|K_EDIT); ! 1304: break; ! 1305: case 13: ! 1306: getar("Sysop Chat",sys_chat_ar); ! 1307: break; ! 1308: } } ! 1309: break; ! 1310: case 11: /* Loadable Modules */ ! 1311: done=0; ! 1312: k=0; ! 1313: while(!done) { ! 1314: i=0; ! 1315: sprintf(opt[i++],"%-16.16s%s","Login",login_mod); ! 1316: sprintf(opt[i++],"%-16.16s%s","Logon Event",logon_mod); ! 1317: sprintf(opt[i++],"%-16.16s%s","Sync Event",sync_mod); ! 1318: sprintf(opt[i++],"%-16.16s%s","Logoff Event",logoff_mod); ! 1319: sprintf(opt[i++],"%-16.16s%s","Logout Event",logout_mod); ! 1320: sprintf(opt[i++],"%-16.16s%s","New User Event",newuser_mod); ! 1321: sprintf(opt[i++],"%-16.16s%s","Expired User",expire_mod); ! 1322: opt[i][0]=0; ! 1323: savnum=0; ! 1324: SETHELP(WHERE); ! 1325: /* ! 1326: &Loadable Modules:& ! 1327: ! 1328: Baja modules (.BIN files) can be automatically loaded and executed ! 1329: during certain system functions. The name of the module can be specified ! 1330: for each of the available triggers listed here. ! 1331: ! 1332: &Login& Required module for remote and local logins (online) ! 1333: &Logon& Executed as an event during logon procedure (online) ! 1334: &Sync& Executed when nodes are periodically synchronized (online) ! 1335: &Logoff& Executed during logoff procedure (online) ! 1336: &Logout& Executed during logout procedure (offline) ! 1337: &New User& Executed at end of new user procedure (online) ! 1338: &Expired User& Executed during daily event when user expires (offline) ! 1339: */ ! 1340: switch(ulist(WIN_ACT|WIN_T2B|WIN_RHT,0,0,32,&k,0 ! 1341: ,"Loadable Modules",opt)) { ! 1342: ! 1343: case -1: ! 1344: done=1; ! 1345: break; ! 1346: ! 1347: case 0: ! 1348: uinput(WIN_MID|WIN_SAV,0,0,"Login Module",login_mod,8 ! 1349: ,K_EDIT|K_UPPER); ! 1350: break; ! 1351: case 1: ! 1352: uinput(WIN_MID|WIN_SAV,0,0,"Logon Module",logon_mod,8 ! 1353: ,K_EDIT|K_UPPER); ! 1354: break; ! 1355: case 2: ! 1356: uinput(WIN_MID|WIN_SAV,0,0,"Synchronize Module" ! 1357: ,sync_mod,8,K_EDIT|K_UPPER); ! 1358: break; ! 1359: case 3: ! 1360: uinput(WIN_MID|WIN_SAV,0,0,"Logoff Module",logoff_mod,8 ! 1361: ,K_EDIT|K_UPPER); ! 1362: break; ! 1363: case 4: ! 1364: uinput(WIN_MID|WIN_SAV,0,0,"Logout Module",logout_mod,8 ! 1365: ,K_EDIT|K_UPPER); ! 1366: break; ! 1367: case 5: ! 1368: uinput(WIN_MID|WIN_SAV,0,0,"New User Module" ! 1369: ,newuser_mod,8,K_EDIT|K_UPPER); ! 1370: break; ! 1371: case 6: ! 1372: uinput(WIN_MID|WIN_SAV,0,0,"Expired User Module" ! 1373: ,expire_mod,8,K_EDIT|K_UPPER); ! 1374: break; ! 1375: ! 1376: } } ! 1377: break; ! 1378: ! 1379: case 12: /* Security Levels */ ! 1380: dflt=bar=0; ! 1381: k=0; ! 1382: while(1) { ! 1383: for(i=0;i<100;i++) { ! 1384: sprintf(tmp,"%luk",level_freecdtperday[i]/1024L); ! 1385: sprintf(opt[i],"%-2d %5d %5d " ! 1386: "%5d %5d %5d %5d %6s %7s %2u",i ! 1387: ,level_timeperday[i],level_timepercall[i] ! 1388: ,level_callsperday[i],level_emailperday[i] ! 1389: ,level_postsperday[i],level_linespermsg[i] ! 1390: ,tmp ! 1391: ,level_misc[i]&LEVEL_EXPTOVAL ? "Val Set" : "Level" ! 1392: ,level_misc[i]&(LEVEL_EXPTOVAL|LEVEL_EXPTOLVL) ? ! 1393: level_expireto[i] : expired_level); } ! 1394: opt[i][0]=0; ! 1395: i=0; ! 1396: SETHELP(WHERE); ! 1397: /* ! 1398: &Security Level Values:& ! 1399: ! 1400: This menu allows you to change the security options for every possible ! 1401: security level from 0 to 99. The available options for each level are: ! 1402: ! 1403: Time Per Day : Maximum online time per day ! 1404: Time Per Call : Maximum online time per call ! 1405: Calls Per Day : Maximum number of calls per day ! 1406: Email Per Day : Maximum number of email per day ! 1407: Posts Per Day : Maximum number of posts per day ! 1408: Lines Per Message : Maximum number of lines per message ! 1409: Free Credits Per Day : Number of free credits per day ! 1410: Expire To : Level or validation set to Expire to ! 1411: */ ! 1412: i=ulist(WIN_RHT|WIN_ACT,0,3,0,&dflt,&bar ! 1413: ,"Level T/D T/C C/D E/D P/D L/M F/D " ! 1414: "Expire To",opt); ! 1415: if(i==-1) ! 1416: break; ! 1417: while(1) { ! 1418: sprintf(str,"Security Level %d Values",i); ! 1419: j=0; ! 1420: sprintf(opt[j++],"%-22.22s%-5u","Time Per Day" ! 1421: ,level_timeperday[i]); ! 1422: sprintf(opt[j++],"%-22.22s%-5u","Time Per Call" ! 1423: ,level_timepercall[i]); ! 1424: sprintf(opt[j++],"%-22.22s%-5u","Calls Per Day" ! 1425: ,level_callsperday[i]); ! 1426: sprintf(opt[j++],"%-22.22s%-5u","Email Per Day" ! 1427: ,level_emailperday[i]); ! 1428: sprintf(opt[j++],"%-22.22s%-5u","Posts Per Day" ! 1429: ,level_postsperday[i]); ! 1430: sprintf(opt[j++],"%-22.22s%-5u","Lines Per Message" ! 1431: ,level_linespermsg[i]); ! 1432: sprintf(tmp,"%luk",level_freecdtperday[i]/1024L); ! 1433: sprintf(opt[j++],"%-22.22s%-6s","Free Credits Per Day" ! 1434: ,tmp); ! 1435: sprintf(opt[j++],"%-22.22s%s %u","Expire To" ! 1436: ,level_misc[i]&LEVEL_EXPTOVAL ? "Validation Set" ! 1437: : "Level" ! 1438: ,level_misc[i]&(LEVEL_EXPTOVAL|LEVEL_EXPTOLVL) ? ! 1439: level_expireto[i] : expired_level); ! 1440: opt[j][0]=0; ! 1441: savnum=0; ! 1442: j=ulist(WIN_RHT|WIN_SAV|WIN_ACT,2,1,0,&k,0 ! 1443: ,str,opt); ! 1444: if(j==-1) ! 1445: break; ! 1446: switch(j) { ! 1447: case 0: ! 1448: uinput(WIN_MID|WIN_SAV,0,0 ! 1449: ,"Total Time Allowed Per Day" ! 1450: ,itoa(level_timeperday[i],tmp,10),3 ! 1451: ,K_NUMBER|K_EDIT); ! 1452: level_timeperday[i]=atoi(tmp); ! 1453: if(level_timeperday[i]>500) ! 1454: level_timeperday[i]=500; ! 1455: break; ! 1456: case 1: ! 1457: uinput(WIN_MID|WIN_SAV,0,0 ! 1458: ,"Time Allowed Per Call" ! 1459: ,itoa(level_timepercall[i],tmp,10),3 ! 1460: ,K_NUMBER|K_EDIT); ! 1461: level_timepercall[i]=atoi(tmp); ! 1462: if(level_timepercall[i]>500) ! 1463: level_timepercall[i]=500; ! 1464: break; ! 1465: case 2: ! 1466: uinput(WIN_MID|WIN_SAV,0,0 ! 1467: ,"Calls Allowed Per Day" ! 1468: ,itoa(level_callsperday[i],tmp,10),4 ! 1469: ,K_NUMBER|K_EDIT); ! 1470: level_callsperday[i]=atoi(tmp); ! 1471: break; ! 1472: case 3: ! 1473: uinput(WIN_MID|WIN_SAV,0,0 ! 1474: ,"Email Allowed Per Day" ! 1475: ,itoa(level_emailperday[i],tmp,10),4 ! 1476: ,K_NUMBER|K_EDIT); ! 1477: level_emailperday[i]=atoi(tmp); ! 1478: break; ! 1479: case 4: ! 1480: uinput(WIN_MID|WIN_SAV,0,0 ! 1481: ,"Posts Allowed Per Day" ! 1482: ,itoa(level_postsperday[i],tmp,10),4 ! 1483: ,K_NUMBER|K_EDIT); ! 1484: level_postsperday[i]=atoi(tmp); ! 1485: break; ! 1486: case 5: ! 1487: uinput(WIN_MID|WIN_SAV,0,0 ! 1488: ,"Lines Allowed Per Message (Post/E-mail)" ! 1489: ,itoa(level_linespermsg[i],tmp,10),4 ! 1490: ,K_NUMBER|K_EDIT); ! 1491: level_linespermsg[i]=atoi(tmp); ! 1492: break; ! 1493: case 6: ! 1494: uinput(WIN_MID|WIN_SAV,0,0 ! 1495: ,"Free Credits Per Day (in Kilobytes)" ! 1496: ,ultoa(level_freecdtperday[i]/1024L,tmp,10),8 ! 1497: ,K_EDIT|K_UPPER); ! 1498: level_freecdtperday[i]=atol(tmp)*1024L; ! 1499: break; ! 1500: case 7: ! 1501: j=0; ! 1502: sprintf(opt[j++],"Default Expired Level " ! 1503: "(Currently %u)",expired_level); ! 1504: sprintf(opt[j++],"Specific Level"); ! 1505: sprintf(opt[j++],"Quick-Validation Set"); ! 1506: opt[j][0]=0; ! 1507: j=0; ! 1508: sprintf(str,"Level %u Expires To",i); ! 1509: savnum=1; ! 1510: j=ulist(WIN_SAV,2,1,0,&j,0 ! 1511: ,str,opt); ! 1512: if(j==-1) ! 1513: break; ! 1514: if(j==0) { ! 1515: level_misc[i]&= ! 1516: ~(LEVEL_EXPTOLVL|LEVEL_EXPTOVAL); ! 1517: changes=1; ! 1518: break; } ! 1519: if(j==1) { ! 1520: level_misc[i]&=~LEVEL_EXPTOVAL; ! 1521: level_misc[i]|=LEVEL_EXPTOLVL; ! 1522: changes=1; ! 1523: uinput(WIN_MID|WIN_SAV,0,0 ! 1524: ,"Expired Level" ! 1525: ,itoa(level_expireto[i],tmp,10),2 ! 1526: ,K_EDIT|K_NUMBER); ! 1527: level_expireto[i]=atoi(tmp); ! 1528: break; } ! 1529: level_misc[i]&=~LEVEL_EXPTOLVL; ! 1530: level_misc[i]|=LEVEL_EXPTOVAL; ! 1531: uinput(WIN_MID|WIN_SAV,0,0 ! 1532: ,"Quick-Validation Set to Expire To" ! 1533: ,itoa(level_expireto[i],tmp,10),1 ! 1534: ,K_EDIT|K_NUMBER); ! 1535: level_expireto[i]=atoi(tmp); ! 1536: break; ! 1537: } } } ! 1538: break; ! 1539: case 13: /* Expired Acccount Values */ ! 1540: dflt=0; ! 1541: done=0; ! 1542: while(!done) { ! 1543: i=0; ! 1544: sprintf(opt[i++],"%-27.27s%u","Level",expired_level); ! 1545: sprintf(opt[i++],"%-27.27s%s","Flag Set #1 to Remove" ! 1546: ,ltoaf(expired_flags1,str)); ! 1547: sprintf(opt[i++],"%-27.27s%s","Flag Set #2 to Remove" ! 1548: ,ltoaf(expired_flags2,str)); ! 1549: sprintf(opt[i++],"%-27.27s%s","Flag Set #3 to Remove" ! 1550: ,ltoaf(expired_flags3,str)); ! 1551: sprintf(opt[i++],"%-27.27s%s","Flag Set #4 to Remove" ! 1552: ,ltoaf(expired_flags4,str)); ! 1553: sprintf(opt[i++],"%-27.27s%s","Exemptions to Remove" ! 1554: ,ltoaf(expired_exempt,str)); ! 1555: sprintf(opt[i++],"%-27.27s%s","Restrictions to Add" ! 1556: ,ltoaf(expired_rest,str)); ! 1557: opt[i][0]=0; ! 1558: SETHELP(WHERE); ! 1559: /* ! 1560: &Expired Account Values:& ! 1561: ! 1562: If a user's account expires, the security levels for that account will ! 1563: be modified according to the settings of this menu. The &Main Level& and ! 1564: &Transfer Level& will be set to the values listed on this menu. The &Main ! 1565: Flags&, &Transfer Flags&, and &Exemptions& listed on this menu will be ! 1566: removed from the account if they are set. The &Restrictions& listed will ! 1567: be added to the account. ! 1568: */ ! 1569: switch(ulist(WIN_ACT|WIN_BOT|WIN_RHT,0,0,60,&dflt,0 ! 1570: ,"Expired Account Values",opt)) { ! 1571: case -1: ! 1572: done=1; ! 1573: break; ! 1574: case 0: ! 1575: itoa(expired_level,str,10); ! 1576: SETHELP(WHERE); ! 1577: /* ! 1578: &Expired Account Security Level:& ! 1579: ! 1580: This is the security level automatically given to expired user accounts. ! 1581: */ ! 1582: uinput(WIN_SAV|WIN_MID,0,0,"Security Level" ! 1583: ,str,2,K_EDIT|K_NUMBER); ! 1584: expired_level=atoi(str); ! 1585: break; ! 1586: case 1: ! 1587: ltoaf(expired_flags1,str); ! 1588: SETHELP(WHERE); ! 1589: /* ! 1590: &Expired Security Flags to Remove:& ! 1591: ! 1592: These are the security flags automatically removed when a user account ! 1593: has expired. ! 1594: */ ! 1595: uinput(WIN_SAV|WIN_MID,0,0,"Flags Set #1" ! 1596: ,str,26,K_EDIT|K_UPPER|K_ALPHA); ! 1597: expired_flags1=aftol(str); ! 1598: break; ! 1599: case 2: ! 1600: ltoaf(expired_flags2,str); ! 1601: SETHELP(WHERE); ! 1602: /* ! 1603: &Expired Security Flags to Remove:& ! 1604: ! 1605: These are the security flags automatically removed when a user account ! 1606: has expired. ! 1607: */ ! 1608: uinput(WIN_SAV|WIN_MID,0,0,"Flags Set #2" ! 1609: ,str,26,K_EDIT|K_UPPER|K_ALPHA); ! 1610: expired_flags2=aftol(str); ! 1611: break; ! 1612: case 3: ! 1613: ltoaf(expired_flags3,str); ! 1614: SETHELP(WHERE); ! 1615: /* ! 1616: &Expired Security Flags to Remove:& ! 1617: ! 1618: These are the security flags automatically removed when a user account ! 1619: has expired. ! 1620: */ ! 1621: uinput(WIN_SAV|WIN_MID,0,0,"Flags Set #3" ! 1622: ,str,26,K_EDIT|K_UPPER|K_ALPHA); ! 1623: expired_flags3=aftol(str); ! 1624: break; ! 1625: case 4: ! 1626: ltoaf(expired_flags4,str); ! 1627: SETHELP(WHERE); ! 1628: /* ! 1629: &Expired Security Flags to Remove:& ! 1630: ! 1631: These are the security flags automatically removed when a user account ! 1632: has expired. ! 1633: */ ! 1634: uinput(WIN_SAV|WIN_MID,0,0,"Flags Set #4" ! 1635: ,str,26,K_EDIT|K_UPPER|K_ALPHA); ! 1636: expired_flags4=aftol(str); ! 1637: break; ! 1638: case 5: ! 1639: ltoaf(expired_exempt,str); ! 1640: SETHELP(WHERE); ! 1641: /* ! 1642: &Expired Exemption Flags to Remove:& ! 1643: ! 1644: These are the exemptions that are automatically removed from a user ! 1645: account if it expires. ! 1646: */ ! 1647: uinput(WIN_SAV|WIN_MID,0,0,"Exemption Flags",str,26 ! 1648: ,K_EDIT|K_UPPER|K_ALPHA); ! 1649: expired_exempt=aftol(str); ! 1650: break; ! 1651: case 6: ! 1652: ltoaf(expired_rest,str); ! 1653: SETHELP(WHERE); ! 1654: /* ! 1655: &Expired Restriction Flags to Add:& ! 1656: ! 1657: These are the restrictions that are automatically added to a user ! 1658: account if it expires. ! 1659: */ ! 1660: uinput(WIN_SAV|WIN_MID,0,0,"Restriction Flags",str,26 ! 1661: ,K_EDIT|K_UPPER|K_ALPHA); ! 1662: expired_rest=aftol(str); ! 1663: break; } } ! 1664: break; ! 1665: case 14: /* Quick-Validation Values */ ! 1666: dflt=0; ! 1667: k=0; ! 1668: while(1) { ! 1669: for(i=0;i<10;i++) ! 1670: sprintf(opt[i],"%d SL: %-2d F1: %s" ! 1671: ,i,val_level[i],ltoaf(val_flags1[i],str)); ! 1672: opt[i][0]=0; ! 1673: i=0; ! 1674: SETHELP(WHERE); ! 1675: /* ! 1676: &Quick-Validation Values:& ! 1677: ! 1678: This is a list of the ten quick-validation sets. These sets are used to ! 1679: quickly set a user's security values (Level, Flags, Exemptions, ! 1680: Restrictions, Expiration Date, and Credits) with one key stroke. The ! 1681: user's expiration date may be extended and additional credits may also ! 1682: be added using quick-validation sets. ! 1683: ! 1684: Holding down ALT and one of the number keys (&1-9&) while a user ! 1685: is online, automatically sets his or user security values to the ! 1686: quick-validation set for that number key. ! 1687: ! 1688: From within the &User Edit& function, a sysop can use the &V&alidate ! 1689: User command and select from this quick-validation list to change a ! 1690: user's security values with very few key-strokes. ! 1691: */ ! 1692: savnum=0; ! 1693: i=ulist(WIN_RHT|WIN_BOT|WIN_ACT|WIN_SAV,0,0,0,&dflt,0 ! 1694: ,"Quick-Validation Values",opt); ! 1695: if(i==-1) ! 1696: break; ! 1697: sprintf(str,"Quick-Validation Set %d",i); ! 1698: savnum=0; ! 1699: while(1) { ! 1700: j=0; ! 1701: sprintf(opt[j++],"%-22.22s%u","Level",val_level[i]); ! 1702: sprintf(opt[j++],"%-22.22s%s","Flag Set #1" ! 1703: ,ltoaf(val_flags1[i],tmp)); ! 1704: sprintf(opt[j++],"%-22.22s%s","Flag Set #2" ! 1705: ,ltoaf(val_flags2[i],tmp)); ! 1706: sprintf(opt[j++],"%-22.22s%s","Flag Set #3" ! 1707: ,ltoaf(val_flags3[i],tmp)); ! 1708: sprintf(opt[j++],"%-22.22s%s","Flag Set #4" ! 1709: ,ltoaf(val_flags4[i],tmp)); ! 1710: sprintf(opt[j++],"%-22.22s%s","Exemptions" ! 1711: ,ltoaf(val_exempt[i],tmp)); ! 1712: sprintf(opt[j++],"%-22.22s%s","Restrictions" ! 1713: ,ltoaf(val_rest[i],tmp)); ! 1714: sprintf(opt[j++],"%-22.22s%u days","Extend Expiration" ! 1715: ,val_expire[i]); ! 1716: sprintf(opt[j++],"%-22.22s%lu","Additional Credits" ! 1717: ,val_cdt[i]); ! 1718: opt[j][0]=0; ! 1719: savnum=1; ! 1720: j=ulist(WIN_RHT|WIN_SAV|WIN_ACT,2,1,0,&k,0 ! 1721: ,str,opt); ! 1722: if(j==-1) ! 1723: break; ! 1724: switch(j) { ! 1725: case 0: ! 1726: uinput(WIN_MID|WIN_SAV,0,0 ! 1727: ,"Level" ! 1728: ,itoa(val_level[i],tmp,10),2 ! 1729: ,K_NUMBER|K_EDIT); ! 1730: val_level[i]=atoi(tmp); ! 1731: break; ! 1732: case 1: ! 1733: uinput(WIN_MID|WIN_SAV,0,0 ! 1734: ,"Flag Set #1" ! 1735: ,ltoaf(val_flags1[i],tmp),26 ! 1736: ,K_UPPER|K_ALPHA|K_EDIT); ! 1737: val_flags1[i]=aftol(tmp); ! 1738: break; ! 1739: case 2: ! 1740: uinput(WIN_MID|WIN_SAV,0,0 ! 1741: ,"Flag Set #2" ! 1742: ,ltoaf(val_flags2[i],tmp),26 ! 1743: ,K_UPPER|K_ALPHA|K_EDIT); ! 1744: val_flags2[i]=aftol(tmp); ! 1745: break; ! 1746: case 3: ! 1747: uinput(WIN_MID|WIN_SAV,0,0 ! 1748: ,"Flag Set #3" ! 1749: ,ltoaf(val_flags3[i],tmp),26 ! 1750: ,K_UPPER|K_ALPHA|K_EDIT); ! 1751: val_flags3[i]=aftol(tmp); ! 1752: break; ! 1753: case 4: ! 1754: uinput(WIN_MID|WIN_SAV,0,0 ! 1755: ,"Flag Set #4" ! 1756: ,ltoaf(val_flags4[i],tmp),26 ! 1757: ,K_UPPER|K_ALPHA|K_EDIT); ! 1758: val_flags4[i]=aftol(tmp); ! 1759: break; ! 1760: case 5: ! 1761: uinput(WIN_MID|WIN_SAV,0,0 ! 1762: ,"Exemption Flags" ! 1763: ,ltoaf(val_exempt[i],tmp),26 ! 1764: ,K_UPPER|K_ALPHA|K_EDIT); ! 1765: val_exempt[i]=aftol(tmp); ! 1766: break; ! 1767: case 6: ! 1768: uinput(WIN_MID|WIN_SAV,0,0 ! 1769: ,"Restriction Flags" ! 1770: ,ltoaf(val_rest[i],tmp),26 ! 1771: ,K_UPPER|K_ALPHA|K_EDIT); ! 1772: val_rest[i]=aftol(tmp); ! 1773: break; ! 1774: case 7: ! 1775: uinput(WIN_MID|WIN_SAV,0,0 ! 1776: ,"Days to Extend Expiration" ! 1777: ,itoa(val_expire[i],tmp,10),4 ! 1778: ,K_NUMBER|K_EDIT); ! 1779: val_expire[i]=atoi(tmp); ! 1780: break; ! 1781: case 8: ! 1782: uinput(WIN_MID|WIN_SAV,0,0 ! 1783: ,"Additional Credits" ! 1784: ,ultoa(val_cdt[i],tmp,10),10 ! 1785: ,K_NUMBER|K_EDIT); ! 1786: val_cdt[i]=atol(tmp); ! 1787: break; } } } ! 1788: break; } } ! 1789: ! 1790: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.