|
|
1.1.1.2 ! root 1: /* SMMCFG.C */ ! 2: ! 3: /* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */ ! 4: ! 5: #include <uifc.h> ! 6: #include <sys\stat.h> ! 7: #include "gen_defs.h" ! 8: #include "smmdefs.h" ! 9: #include "smmvars.c" ! 10: ! 11: char **opt; ! 12: ! 13: void bail(int code); ! 14: void main(); ! 15: char fexist(char *filespec); ! 16: ! 17: unsigned _stklen=16000; /* Set stack size in code, not header */ ! 18: ! 19: void bail(int code) ! 20: { ! 21: ! 22: if(code) ! 23: getch(); ! 24: uifcbail(); ! 25: exit(code); ! 26: } ! 27: ! 28: void main() ! 29: { ! 30: char str[256]; ! 31: int i,j,k,file,dflt,sysop_level; ! 32: FILE *stream; ! 33: ! 34: savnum=0; ! 35: if((opt=(char **)MALLOC(sizeof(char *)*300))==NULL) { ! 36: cputs("memory allocation error\r\n"); ! 37: bail(1); } ! 38: for(i=0;i<300;i++) ! 39: if((opt[i]=(char *)MALLOC(MAX_OPLN))==NULL) { ! 40: cputs("memory allocation error\r\n"); ! 41: bail(1); } ! 42: uifcini(); ! 43: sprintf(str,"Synchronet Match Maker v%s",SMM_VER); ! 44: uscrn(str); ! 45: ! 46: if((file=open("SMM.CFG",O_RDONLY|O_BINARY|O_DENYNONE))==-1) { ! 47: textattr(LIGHTGRAY); ! 48: clrscr(); ! 49: lprintf("Error opening SMM.CFG\r\n"); ! 50: bail(1); } ! 51: if((stream=fdopen(file,"rb"))==NULL) { ! 52: textattr(LIGHTGRAY); ! 53: clrscr(); ! 54: lprintf("Error fdopen SMM.CFG\r\n"); ! 55: bail(1); } ! 56: ! 57: str[0]=0; ! 58: fgets(str,128,stream); ! 59: purity_age=atoi(str); ! 60: str[0]=0; ! 61: fgets(str,128,stream); ! 62: min_age=atoi(str); ! 63: str[0]=0; ! 64: fgets(str,128,stream); ! 65: min_level=atoi(str); ! 66: ! 67: req_flags1[0]=0; ! 68: fgets(req_flags1,128,stream); ! 69: req_flags1[27]=0; ! 70: truncsp(req_flags1); ! 71: ! 72: req_flags2[0]=0; ! 73: fgets(req_flags2,128,stream); ! 74: req_flags2[27]=0; ! 75: truncsp(req_flags2); ! 76: ! 77: req_flags3[0]=0; ! 78: fgets(req_flags3,128,stream); ! 79: req_flags3[27]=0; ! 80: truncsp(req_flags3); ! 81: ! 82: req_flags4[0]=0; ! 83: fgets(req_flags4,128,stream); ! 84: req_flags4[27]=0; ! 85: truncsp(req_flags4); ! 86: ! 87: str[0]=0; ! 88: fgets(str,128,stream); ! 89: profile_cdt=atol(str); ! 90: str[0]=0; ! 91: fgets(str,128,stream); ! 92: telegram_cdt=atol(str); ! 93: str[0]=0; ! 94: fgets(str,128,stream); ! 95: auto_update=atoi(str); ! 96: str[0]=0; ! 97: fgets(str,128,stream); ! 98: notify_user=atoi(str); ! 99: ! 100: str[0]=0; ! 101: fgets(str,128,stream); // regnum ! 102: ! 103: str[0]=0; ! 104: fgets(str,128,stream); ! 105: telegram_level=atoi(str); ! 106: ! 107: str[0]=0; ! 108: fgets(str,128,stream); ! 109: que_level=atoi(str); ! 110: ! 111: str[0]=0; ! 112: fgets(str,128,stream); ! 113: wall_level=atoi(str); ! 114: ! 115: str[0]=0; ! 116: fgets(str,128,stream); ! 117: wall_cdt=atol(str); ! 118: ! 119: str[0]=0; ! 120: fgets(str,128,stream); ! 121: que_cdt=atol(str); ! 122: ! 123: zmodem_send[0]=0; ! 124: fgets(zmodem_send,128,stream); ! 125: if(!zmodem_send[0]) ! 126: strcpy(zmodem_send,DEFAULT_ZMODEM_SEND); ! 127: truncsp(zmodem_send); ! 128: ! 129: str[0]=0; ! 130: fgets(str,128,stream); ! 131: smm_misc=atol(str); ! 132: ! 133: str[0]=0; ! 134: fgets(str,128,stream); ! 135: sprintf(system_name,"%.25s",str); ! 136: truncsp(system_name); ! 137: ! 138: local_view[0]=0; ! 139: fgets(local_view,128,stream); ! 140: truncsp(local_view); ! 141: ! 142: str[0]=0; ! 143: fgets(str,128,stream); ! 144: sysop_level=atoi(str); ! 145: if(!sysop_level) ! 146: sysop_level=90; ! 147: ! 148: str[0]=0; ! 149: fgets(str,128,stream); ! 150: wall_age=atoi(str); ! 151: ! 152: str[0]=0; ! 153: fgets(str,128,stream); ! 154: age_split=atoi(str); ! 155: ! 156: fclose(stream); ! 157: ! 158: ! 159: dflt=0; ! 160: while(1) { ! 161: helpbuf= ! 162: " Synchronet Match Maker Configuration \r\n\r\n" ! 163: "Move through the various options using the arrow keys. Select the\r\n" ! 164: "highlighted options by pressing ENTER.\r\n\r\n"; ! 165: j=0; ! 166: sprintf(opt[j++],"%-40.40s %s","System Name",system_name); ! 167: sprintf(opt[j++],"Wall Security..."); ! 168: sprintf(opt[j++],"Profile Database Security..."); ! 169: sprintf(str,"Credit %s for Adding Profile" ! 170: ,profile_cdt>0 ? "Bonus":"Cost"); ! 171: sprintf(opt[j++],"%-40.40s %ldk",str ! 172: ,profile_cdt>0 ? profile_cdt/1024L : (-profile_cdt)/1024L); ! 173: sprintf(str,"Credit %s for Sending Telegram" ! 174: ,telegram_cdt>0 ? "Bonus":"Cost"); ! 175: sprintf(opt[j++],"%-40.40s %ldk",str ! 176: ,telegram_cdt>0 ? telegram_cdt/1024L : (-telegram_cdt)/1024L); ! 177: sprintf(str,"Credit %s for Writing on the Wall" ! 178: ,wall_cdt>0 ? "Bonus":"Cost"); ! 179: sprintf(opt[j++],"%-40.40s %ldk",str ! 180: ,wall_cdt>0 ? wall_cdt/1024L : (-wall_cdt)/1024L); ! 181: sprintf(str,"Credit %s for Reading Questionnaire" ! 182: ,que_cdt>0 ? "Bonus":"Cost"); ! 183: sprintf(opt[j++],"%-40.40s %ldk",str ! 184: ,que_cdt>0 ? que_cdt/1024L : (-que_cdt)/1024L); ! 185: sprintf(opt[j++],"%-40.40s %u","Minimum Level to Send Telegrams" ! 186: ,telegram_level); ! 187: sprintf(opt[j++],"%-40.40s %u","Minimum Level to Read Questionnaires" ! 188: ,que_level); ! 189: sprintf(opt[j++],"%-40.40s %s","Minor Segregation (Protection) Age" ! 190: ,age_split ? itoa(age_split,str,10):"Disabled"); ! 191: sprintf(opt[j++],"%-40.40s %u","Sysop Level",sysop_level); ! 192: sprintf(opt[j++],"%-40.40s %s","Auto-Update Profiles" ! 193: ,auto_update ? itoa(auto_update,str,10):"Disabled"); ! 194: sprintf(opt[j++],"%-40.40s %s","Notify User of Activity" ! 195: ,notify_user ? itoa(notify_user,str,10):"Disabled"); ! 196: sprintf(opt[j++],"%-40.40s %s","Use Metric System" ! 197: ,smm_misc&SMM_METRIC ? "Yes":"No"); ! 198: sprintf(opt[j++],"%-40.40s %.25s","Zmodem Send Command" ! 199: ,zmodem_send); ! 200: sprintf(opt[j++],"%-40.40s %.25s","Local Photo Viewer" ! 201: ,local_view); ! 202: opt[j][0]=NULL; ! 203: switch(ulist(WIN_ORG|WIN_MID|WIN_ACT|WIN_ESC,0,0,60,&dflt,0 ! 204: ,"Synchronet Match Maker Configuration",opt)) { ! 205: case 0: ! 206: helpbuf= ! 207: " System Name \r\n\r\n" ! 208: "This is your BBS name. Once you have configured your BBS name here, you\r\n" ! 209: "will not be able to change it, without losing all of your local users'\r\n" ! 210: "profiles in your database.\r\n" ! 211: "\r\n" ! 212: "It is &highly& recommended that you do not change your BBS name here,\r\n" ! 213: "even if you decide to change your actual BBS name in the future.\r\n" ! 214: "\r\n" ! 215: "All BBS names in a match maker network must be unique."; ! 216: uinput(WIN_MID,0,0,"System Name" ! 217: ,system_name,40,K_EDIT|K_UPPER); ! 218: break; ! 219: case 1: ! 220: j=0; ! 221: while(1) { ! 222: k=0; ! 223: sprintf(opt[k++],"%-40.40s %u" ! 224: ,"Minimum User Age to Access Wall" ! 225: ,wall_age); ! 226: sprintf(opt[k++],"%-40.40s %u" ! 227: ,"Minimum Security Level to Write on Wall" ! 228: ,wall_level); ! 229: opt[k][0]=NULL; ! 230: helpbuf= ! 231: " Wall Security \r\n\r\n" ! 232: "This menu allows you to specify which users can access the wall.\r\n"; ! 233: ! 234: j=ulist(WIN_ACT|WIN_SAV|WIN_RHT|WIN_BOT,0,0,0,&j,0 ! 235: ,"Wall Security",opt); ! 236: if(j==-1) ! 237: break; ! 238: switch(j) { ! 239: case 0: ! 240: helpbuf= ! 241: " Minimum User Age \r\n\r\n" ! 242: "This is the minimum user age that will be allowed to access (read or\r\n" ! 243: "write) the wall."; ! 244: sprintf(str,"%u",wall_age); ! 245: uinput(WIN_L2R|WIN_SAV,0,0, ! 246: "Minimum Age to Access Wall" ! 247: ,str,2,K_EDIT|K_NUMBER); ! 248: wall_age=atoi(str); ! 249: break; ! 250: case 1: ! 251: helpbuf= ! 252: " Minimum User Level \r\n\r\n" ! 253: "This is the minimum user level required to write on the wall.\r\n"; ! 254: sprintf(str,"%u",wall_level); ! 255: uinput(WIN_L2R|WIN_SAV,0,0, ! 256: "Minimum Level to Write on Wall" ! 257: ,str,2,K_EDIT|K_NUMBER); ! 258: wall_level=atoi(str); ! 259: break; } } ! 260: break; ! 261: case 2: ! 262: j=0; ! 263: while(1) { ! 264: k=0; ! 265: sprintf(opt[k++],"%-40.40s %u" ! 266: ,"Minimum User Age to Add Profile" ! 267: ,min_age); ! 268: sprintf(opt[k++],"%-40.40s %u" ! 269: ,"Minimum User Age to Take Purity Test" ! 270: ,purity_age); ! 271: sprintf(opt[k++],"%-40.40s %u" ! 272: ,"Minimum Security Level to Add Profile" ! 273: ,min_level); ! 274: sprintf(opt[k++],"%-40.40s %s" ! 275: ,"Required Flags (Set 1) to Add Profile" ! 276: ,req_flags1); ! 277: sprintf(opt[k++],"%-40.40s %s" ! 278: ,"Required Flags (Set 2) to Add Profile" ! 279: ,req_flags2); ! 280: sprintf(opt[k++],"%-40.40s %s" ! 281: ,"Required Flags (Set 3) to Add Profile" ! 282: ,req_flags3); ! 283: sprintf(opt[k++],"%-40.40s %s" ! 284: ,"Required Flags (Set 4) to Add Profile" ! 285: ,req_flags4); ! 286: opt[k][0]=NULL; ! 287: helpbuf= ! 288: " Profile Security \r\n\r\n" ! 289: "This menu allows you to specify which users can create profiles\r\n" ! 290: "and take the purity test."; ! 291: ! 292: j=ulist(WIN_ACT|WIN_SAV|WIN_RHT|WIN_BOT,0,0,0,&j,0 ! 293: ,"Profile Database Security",opt); ! 294: if(j==-1) ! 295: break; ! 296: switch(j) { ! 297: case 0: ! 298: helpbuf= ! 299: " Minimum User Age \r\n\r\n" ! 300: "This is the minimum user age that will be allowed to add a profile to\r\n" ! 301: "the database."; ! 302: sprintf(str,"%u",min_age); ! 303: uinput(WIN_L2R|WIN_SAV,0,0, ! 304: "Minimum Age",str,2,K_EDIT|K_NUMBER); ! 305: min_age=atoi(str); ! 306: break; ! 307: case 1: ! 308: helpbuf= ! 309: " Minimum User Age for Purity Test\r\n\r\n" ! 310: "This is the minimum user age that will be allowed to take the purity\r\n" ! 311: "test."; ! 312: sprintf(str,"%u",purity_age); ! 313: uinput(WIN_L2R|WIN_SAV,0,0, ! 314: "Minimum Age for Purity Test" ! 315: ,str,2,K_EDIT|K_NUMBER); ! 316: purity_age=atoi(str); ! 317: break; ! 318: case 2: ! 319: helpbuf= ! 320: " Minimum Security Level \r\n\r\n" ! 321: "This is the minimum security level that is required to add a profile\r\n" ! 322: "to the database."; ! 323: sprintf(str,"%u",min_level); ! 324: uinput(WIN_L2R|WIN_SAV,0,0, ! 325: "Security Level",str,3,K_EDIT|K_NUMBER); ! 326: min_level=atoi(str); ! 327: break; ! 328: case 3: ! 329: helpbuf= ! 330: " Required Flags from Flag Set 1 \r\n\r\n" ! 331: "These are the flags that a required for the user to add a profile\r\n" ! 332: "to the database."; ! 333: uinput(WIN_L2R|WIN_SAV,0,0,"Flag Set 1" ! 334: ,req_flags1 ! 335: ,26,K_EDIT|K_UPPER|K_ALPHA); ! 336: break; ! 337: case 4: ! 338: helpbuf= ! 339: " Required Flags from Flag Set 2 \r\n\r\n" ! 340: "These are the flags that a required for the user to add a profile\r\n" ! 341: "to the database."; ! 342: uinput(WIN_L2R|WIN_SAV,0,0,"Flag Set 2" ! 343: ,req_flags2 ! 344: ,26,K_EDIT|K_UPPER|K_ALPHA); ! 345: break; ! 346: case 5: ! 347: helpbuf= ! 348: " Required Flags from Flag Set 3 \r\n\r\n" ! 349: "These are the flags that a required for the user to add a profile\r\n" ! 350: "to the database."; ! 351: uinput(WIN_L2R|WIN_SAV,0,0,"Flag Set 3" ! 352: ,req_flags3 ! 353: ,26,K_EDIT|K_UPPER|K_ALPHA); ! 354: break; ! 355: case 6: ! 356: helpbuf= ! 357: " Required Flags from Flag Set 4 \r\n\r\n" ! 358: "These are the flags that a required for the user to add a profile\r\n" ! 359: "to the database."; ! 360: uinput(WIN_L2R|WIN_SAV,0,0,"Flag Set 4" ! 361: ,req_flags4 ! 362: ,26,K_EDIT|K_UPPER|K_ALPHA); ! 363: break; } } ! 364: break; ! 365: case 3: ! 366: helpbuf= ! 367: " Credit Adjustment for Adding Profile \r\n\r\n" ! 368: "You can have &Synchronet Match Maker& either give credits to or take\r\n" ! 369: "credits from the user for adding a profile to the database."; ! 370: strcpy(opt[0],"Add Credits"); ! 371: strcpy(opt[1],"Remove Credits"); ! 372: opt[2][0]=0; ! 373: i=1; ! 374: i=ulist(WIN_L2R|WIN_BOT|WIN_ACT,0,0,0,&i,0 ! 375: ,"Credit Adjustment for Adding Profile",opt); ! 376: if(i==-1) ! 377: break; ! 378: sprintf(str,"%ld",profile_cdt<0 ? -profile_cdt:profile_cdt); ! 379: uinput(WIN_MID,0,0,"Credits (K=1024)" ! 380: ,str,10,K_EDIT|K_UPPER); ! 381: if(strchr(str,'K')) ! 382: profile_cdt=atol(str)*1024L; ! 383: else ! 384: profile_cdt=atol(str); ! 385: if(i==1) ! 386: profile_cdt=-profile_cdt; ! 387: break; ! 388: case 4: ! 389: helpbuf= ! 390: " Credit Adjustment for Sending Telegram \r\n\r\n" ! 391: "You can have &Synchronet Match Maker& either give credits to or take\r\n" ! 392: "credits from the user for sending a telegram to another user in SMM."; ! 393: strcpy(opt[0],"Add Credits"); ! 394: strcpy(opt[1],"Remove Credits"); ! 395: opt[2][0]=0; ! 396: i=1; ! 397: i=ulist(WIN_L2R|WIN_BOT|WIN_ACT,0,0,0,&i,0 ! 398: ,"Credit Adjustment for Sending Telegram",opt); ! 399: if(i==-1) ! 400: break; ! 401: sprintf(str,"%ld",telegram_cdt<0 ? -telegram_cdt:telegram_cdt); ! 402: uinput(WIN_MID,0,0,"Credits (K=1024)" ! 403: ,str,10,K_EDIT|K_UPPER); ! 404: if(strchr(str,'K')) ! 405: telegram_cdt=atol(str)*1024L; ! 406: else ! 407: telegram_cdt=atol(str); ! 408: if(i==1) ! 409: telegram_cdt=-telegram_cdt; ! 410: break; ! 411: case 5: ! 412: helpbuf= ! 413: " Credit Adjustment for Writing on the Wall \r\n\r\n" ! 414: "You can have &Synchronet Match Maker& either give credits to or take\r\n" ! 415: "credits from the user for writing on the wall."; ! 416: strcpy(opt[0],"Add Credits"); ! 417: strcpy(opt[1],"Remove Credits"); ! 418: opt[2][0]=0; ! 419: i=1; ! 420: i=ulist(WIN_L2R|WIN_BOT|WIN_ACT,0,0,0,&i,0 ! 421: ,"Credit Adjustment for Writing on the Wall",opt); ! 422: if(i==-1) ! 423: break; ! 424: sprintf(str,"%ld",wall_cdt<0 ? -wall_cdt:wall_cdt); ! 425: uinput(WIN_MID,0,0,"Credits (K=1024)" ! 426: ,str,10,K_EDIT|K_UPPER); ! 427: if(strchr(str,'K')) ! 428: wall_cdt=atol(str)*1024L; ! 429: else ! 430: wall_cdt=atol(str); ! 431: if(i==1) ! 432: wall_cdt=-wall_cdt; ! 433: break; ! 434: case 6: ! 435: helpbuf= ! 436: " Credit Adjustment for Reading Questionnaire \r\n\r\n" ! 437: "You can have &Synchronet Match Maker& either give credits to or take\r\n" ! 438: "credits from the user when reading another user's questionnaire"; ! 439: strcpy(opt[0],"Add Credits"); ! 440: strcpy(opt[1],"Remove Credits"); ! 441: opt[2][0]=0; ! 442: i=1; ! 443: i=ulist(WIN_L2R|WIN_BOT|WIN_ACT,0,0,0,&i,0 ! 444: ,"Credit Adjustment for Reading Questionnaire",opt); ! 445: if(i==-1) ! 446: break; ! 447: sprintf(str,"%ld",que_cdt<0 ? -que_cdt:que_cdt); ! 448: uinput(WIN_MID,0,0,"Credits (K=1024)" ! 449: ,str,10,K_EDIT|K_UPPER); ! 450: if(strchr(str,'K')) ! 451: que_cdt=atol(str)*1024L; ! 452: else ! 453: que_cdt=atol(str); ! 454: if(i==1) ! 455: que_cdt=-que_cdt; ! 456: break; ! 457: case 7: ! 458: helpbuf= ! 459: " Minimum Level to Send Telegrams \r\n\r\n" ! 460: "Use this option to restrict the sending of telegrams to users of a\r\n" ! 461: "specific security level or higher."; ! 462: sprintf(str,"%u",telegram_level); ! 463: uinput(WIN_MID,0,0,"Minimum Level to Send Telegrams" ! 464: ,str,3,K_EDIT|K_NUMBER); ! 465: telegram_level=atoi(str); ! 466: break; ! 467: case 8: ! 468: helpbuf= ! 469: " Minimum Level to Read Questionnaires \r\n\r\n" ! 470: "Users will only be allowed to read other users' questionnaires if\r\n" ! 471: "their security level is this value or higher."; ! 472: sprintf(str,"%u",que_level); ! 473: uinput(WIN_MID,0,0,"Minimum Level to Read Questionnaires" ! 474: ,str,3,K_EDIT|K_NUMBER); ! 475: que_level=atoi(str); ! 476: break; ! 477: case 9: ! 478: helpbuf= ! 479: " Minor Segregation (Protection) Age \r\n\r\n" ! 480: "This option (if enabled) separates all users into two groups:\r\n" ! 481: "\r\n" ! 482: "&Minors: &Those users below the specified age (normally 18)\r\n" ! 483: "&Adults: &Those users at or above the specified age\r\n" ! 484: "\r\n" ! 485: "If enabled, adults cannot see minors' profiles or send telegrams to\r\n" ! 486: "minors and vice versa.\r\n" ! 487: "\r\n" ! 488: "If disabled, all users can see eachother's profiles regardless of age.\r\n"; ! 489: sprintf(str,"%u",age_split); ! 490: uinput(WIN_MID,0,0,"Minor Segregation Age (0=Disabled)" ! 491: ,str,2,K_EDIT|K_NUMBER); ! 492: age_split=atoi(str); ! 493: break; ! 494: case 10: ! 495: helpbuf= ! 496: " Sysop Level \r\n\r\n" ! 497: "Every user of this level or higher will be given access to sysop\r\n" ! 498: "commands in the match maker."; ! 499: sprintf(str,"%u",sysop_level); ! 500: uinput(WIN_MID,0,0,"Sysop Level",str,3,K_EDIT|K_NUMBER); ! 501: sysop_level=atoi(str); ! 502: break; ! 503: ! 504: case 11: ! 505: helpbuf= ! 506: " Auto-Update Profiles \r\n\r\n" ! 507: "If you would like to have &Synchronet Match Maker& automatically send\r\n" ! 508: "a network update message for a user that is active in SMM, but hasn't\r\n" ! 509: "actually made any changes to his or her profile, set this option to the\r\n" ! 510: "number of days between &Auto-Updates& (e.g. 30 days is a good value).\r\n" ! 511: "\r\n" ! 512: "Setting this option to &0& disables this feature."; ! 513: sprintf(str,"%u",auto_update); ! 514: uinput(WIN_MID,0,0,"Auto-Update Profiles (in Days)" ! 515: ,str,3,K_EDIT|K_NUMBER); ! 516: auto_update=atoi(str); ! 517: break; ! 518: case 12: ! 519: helpbuf= ! 520: " Notify User of Activity \r\n\r\n" ! 521: "If you would like to have &Synchronet Match Maker& automatically send\r\n" ! 522: "a message to a specific user (most commonly the sysop) whenever a user\r\n" ! 523: "adds a profile to the database or sends a telegram from SMM, set this\r\n" ! 524: "option to the number of that user (e.g. &1& would indicate user #1).\r\n" ! 525: "\r\n" ! 526: "Setting this option to &0& disables this feature."; ! 527: sprintf(str,"%u",notify_user); ! 528: uinput(WIN_MID,0,0,"Notify User Number (0=disabled)" ! 529: ,str,5,K_EDIT|K_NUMBER); ! 530: notify_user=atoi(str); ! 531: break; ! 532: case 13: ! 533: helpbuf= ! 534: " Use Metric System \r\n\r\n" ! 535: "If you wish to use centimeters and kilograms instead of inches and\r\n" ! 536: "pounds for height and weight measurements, set this option to &Yes&."; ! 537: strcpy(opt[0],"Yes"); ! 538: strcpy(opt[1],"No"); ! 539: opt[2][0]=0; ! 540: i=1; ! 541: i=ulist(WIN_MID|WIN_ACT,0,0,0,&i,0 ! 542: ,"Use Metric Measurement System",opt); ! 543: if(i==-1) ! 544: break; ! 545: if(i==1) ! 546: smm_misc&=~SMM_METRIC; ! 547: else ! 548: smm_misc|=SMM_METRIC; ! 549: break; ! 550: ! 551: case 14: ! 552: helpbuf= ! 553: " Zmodem Send Command \r\n\r\n" ! 554: "This is the command line to execute to send files to remote user.\r\n"; ! 555: uinput(WIN_MID,0,0,"Zmodem Send" ! 556: ,zmodem_send,50,K_EDIT); ! 557: break; ! 558: case 15: ! 559: helpbuf= ! 560: " Local Photo Viewer \r\n\r\n" ! 561: "This is the command line to execute to view photos when logged on\r\n" ! 562: "locally.\r\n"; ! 563: uinput(WIN_MID,0,0,"Local Viewer" ! 564: ,local_view,50,K_EDIT); ! 565: break; ! 566: case -1: ! 567: helpbuf= ! 568: " Save Configuration File \r\n\r\n" ! 569: "Select &Yes& to save the config file, &No& to quit without saving,\r\n" ! 570: "or hit ESC to go back to the menu.\r\n\r\n"; ! 571: i=0; ! 572: strcpy(opt[0],"Yes"); ! 573: strcpy(opt[1],"No"); ! 574: opt[2][0]=0; ! 575: i=ulist(WIN_MID,0,0,0,&i,0,"Save Config File",opt); ! 576: if(i==-1) break; ! 577: if(i) bail(0); ! 578: if((file=open("SMM.CFG" ! 579: ,O_WRONLY|O_BINARY|O_CREAT|O_DENYALL|O_TRUNC,S_IWRITE))==-1) { ! 580: textattr(LIGHTGRAY); ! 581: clrscr(); ! 582: lprintf("Error opening SMM.CFG\r\n"); ! 583: bail(1); } ! 584: if((stream=fdopen(file,"wb"))==NULL) { ! 585: textattr(LIGHTGRAY); ! 586: clrscr(); ! 587: lprintf("Error fdopen SMM.CFG\r\n"); ! 588: bail(1); } ! 589: fprintf(stream,"%u\r\n%u\r\n%u\r\n%s\r\n%s\r\n%s\r\n%s\r\n" ! 590: ,purity_age,min_age,min_level ! 591: ,req_flags1,req_flags2,req_flags3,req_flags4); ! 592: fprintf(stream,"%ld\r\n%ld\r\n%u\r\n%u\r\n%s\r\n%u\r\n%u\r\n" ! 593: ,profile_cdt,telegram_cdt,auto_update,notify_user,"" ! 594: ,telegram_level,que_level); ! 595: fprintf(stream,"%u\r\n%ld\r\n%ld\r\n%s\r\n%ld\r\n%s\r\n" ! 596: ,wall_level,wall_cdt,que_cdt,zmodem_send,smm_misc,system_name); ! 597: fprintf(stream,"%s\r\n%u\r\n%u\r\n%u\r\n" ! 598: ,local_view,sysop_level,wall_age,age_split); ! 599: fclose(stream); ! 600: bail(0); ! 601: } ! 602: } ! 603: } ! 604: /****************************************************************************/ ! 605: /* Checks the disk drive for the existance of a file. Returns 1 if it */ ! 606: /* exists, 0 if it doesn't. */ ! 607: /* Called from upload */ ! 608: /****************************************************************************/ ! 609: char fexist(char *filespec) ! 610: { ! 611: struct ffblk f; ! 612: ! 613: if(findfirst(filespec,&f,0)==NULL) ! 614: return(1); ! 615: return(0); ! 616: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.