|
|
1.1.1.2 ! root 1: /* ECHOCFG.C */ ! 2: ! 3: /* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */ ! 4: ! 5: /* Portions written by Allen Christiansen 1994-1996 */ ! 6: ! 7: #include <uifc.h> ! 8: #include <sys\stat.h> ! 9: #include "gen_defs.h" ! 10: #include "sbbsdefs.h" ! 11: #include "sbbsecho.h" ! 12: ! 13: char **opt; ! 14: ! 15: void bail(int code); ! 16: void main(); ! 17: char fexist(char *filespec); ! 18: char *faddrtoa(faddr_t addr); ! 19: ! 20: uchar node_swap=1; ! 21: long misc=0; ! 22: config_t cfg; ! 23: ! 24: unsigned _stklen=16000; ! 25: ! 26: void bail(int code) ! 27: { ! 28: ! 29: if(code) ! 30: getch(); ! 31: uifcbail(); ! 32: exit(code); ! 33: } ! 34: ! 35: #define lprintf cprintf ! 36: ! 37: void main(int argc, char **argv) ! 38: { ! 39: char str[256],*p; ! 40: int i,j,k,x,file,dflt,nodeop=0; ! 41: FILE *stream; ! 42: echolist_t savlistcfg; ! 43: nodecfg_t savnodecfg; ! 44: arcdef_t savarcdef; ! 45: ! 46: fprintf(stderr,"\nSBBSecho Configuration Version %s Developed 1995-1997 " ! 47: "Rob Swindell\n\n",SBBSECHO_VER); ! 48: ! 49: memset(&cfg,0,sizeof(config_t)); ! 50: if(argc>1) ! 51: strcpy(str,argv[1]); ! 52: else { ! 53: p=getenv("SBBSCTRL"); ! 54: if(!p) { ! 55: p=getenv("SBBSNODE"); ! 56: if(!p) { ! 57: printf("usage: echocfg [cfg_file]\n"); ! 58: exit(1); } ! 59: strcpy(str,p); ! 60: if(str[strlen(str)-1]!='\\') ! 61: strcat(str,"\\"); ! 62: strcat(str,"..\\CTRL\\SBBSECHO.CFG"); } ! 63: else { ! 64: strcpy(str,p); ! 65: if(str[strlen(str)-1]!='\\') ! 66: strcat(str,"\\"); ! 67: strcat(str,"SBBSECHO.CFG"); } } ! 68: strcpy(cfg.cfgfile,str); ! 69: strupr(cfg.cfgfile); ! 70: ! 71: read_cfg(); ! 72: ! 73: savnum=0; ! 74: if((opt=(char **)MALLOC(sizeof(char *)*300))==NULL) { ! 75: cputs("memory allocation error\r\n"); ! 76: bail(1); } ! 77: for(i=0;i<300;i++) ! 78: if((opt[i]=(char *)MALLOC(MAX_OPLN))==NULL) { ! 79: cputs("memory allocation error\r\n"); ! 80: bail(1); } ! 81: uifcini(); ! 82: sprintf(str,"SBBSecho Configuration v%s",SBBSECHO_VER); ! 83: uscrn(str); ! 84: ! 85: dflt=0; ! 86: while(1) { ! 87: helpbuf= ! 88: " SBBSecho Configuration \r\n\r\n" ! 89: "Move through the various options using the arrow keys. Select the\r\n" ! 90: "highlighted options by pressing ENTER.\r\n\r\n"; ! 91: i=0; ! 92: sprintf(opt[i++],"%-30.30s %s","Mailer Type" ! 93: ,misc&FLO_MAILER ? "Binkley/FLO":"FrontDoor/Attach"); ! 94: sprintf(opt[i++],"%-30.30s %luK","Maximum Packet Size" ! 95: ,cfg.maxpktsize/1024UL); ! 96: sprintf(opt[i++],"%-30.30s %luK","Maximum Bundle Size" ! 97: ,cfg.maxbdlsize/1024UL); ! 98: if(cfg.notify) ! 99: sprintf(str,"User #%u",cfg.notify); ! 100: else ! 101: strcpy(str,"Disabled"); ! 102: sprintf(opt[i++],"%-30.30s %s","Areafix Failure Notification",str); ! 103: sprintf(opt[i++],"Nodes..."); ! 104: sprintf(opt[i++],"Paths..."); ! 105: sprintf(opt[i++],"Log Options..."); ! 106: sprintf(opt[i++],"Toggle Options..."); ! 107: sprintf(opt[i++],"Archive Programs..."); ! 108: sprintf(opt[i++],"Additional Echo Lists..."); ! 109: opt[i][0]=NULL; ! 110: switch(ulist(WIN_ORG|WIN_MID|WIN_ACT|WIN_ESC,0,0,52,&dflt,0 ! 111: ,cfg.cfgfile,opt)) { ! 112: ! 113: case 0: ! 114: misc^=FLO_MAILER; ! 115: break; ! 116: ! 117: case 1: ! 118: helpbuf= ! 119: " Maximum Packet Size \r\n\r\n" ! 120: "This is the maximum file size that SBBSecho will create when placing\r\n" ! 121: "outgoing messages into packets. The default size is 250k.\r\n"; ! 122: sprintf(str,"%lu",cfg.maxpktsize); ! 123: uinput(WIN_MID|WIN_BOT,0,0,"Maximum Packet Size",str ! 124: ,9,K_EDIT|K_NUMBER); ! 125: cfg.maxpktsize=atol(str); ! 126: break; ! 127: ! 128: case 2: ! 129: helpbuf= ! 130: " Maximum Bundle Size \r\n\r\n" ! 131: "This is the maximum file size that SBBSecho will create when placing\r\n" ! 132: "outgoing packets into bundles. The default size is 250k.\r\n"; ! 133: sprintf(str,"%lu",cfg.maxbdlsize); ! 134: uinput(WIN_MID|WIN_BOT,0,0,"Maximum Bundle Size",str ! 135: ,9,K_EDIT|K_NUMBER); ! 136: cfg.maxbdlsize=atol(str); ! 137: break; ! 138: ! 139: case 3: ! 140: helpbuf= ! 141: " Areafix Failure Notification \r\n\r\n" ! 142: "Setting this option to a user number (usually #1), enables the\r\n" ! 143: "automatic notification of that user, via e-mail, of failed areafix\r\n" ! 144: "attempts. Setting this option to 0, disables this feature.\r\n"; ! 145: sprintf(str,"%u",cfg.notify); ! 146: uinput(WIN_MID|WIN_BOT,0,0,"Areafix Notification User Number",str ! 147: ,5,K_EDIT|K_NUMBER); ! 148: cfg.notify=atoi(str); ! 149: break; ! 150: ! 151: case 4: ! 152: helpbuf= ! 153: " Nodes... \r\n\r\n" ! 154: "From this menu you can configure the area manager options for your\r\n" ! 155: "uplink nodes.\r\n"; ! 156: i=0; ! 157: while(1) { ! 158: for(j=0;j<cfg.nodecfgs;j++) ! 159: strcpy(opt[j],faddrtoa(cfg.nodecfg[j].faddr)); ! 160: opt[j][0]=0; ! 161: i=ulist(WIN_ORG|WIN_INS|WIN_DEL|WIN_ACT|WIN_GET|WIN_PUT ! 162: |WIN_INSACT|WIN_DELACT|WIN_XTR ! 163: ,0,0,0,&i,0,"Nodes",opt); ! 164: if(i==-1) ! 165: break; ! 166: if((i&MSK_ON)==MSK_INS) { ! 167: i&=MSK_OFF; ! 168: str[0]=0; ! 169: helpbuf= ! 170: " Address \r\n\r\n" ! 171: "This is the FidoNet style address of the node you wish to add\r\n"; ! 172: if(uinput(WIN_MID,0,0 ! 173: ,"Node Address (ALL wildcard allowed)",str ! 174: ,25,K_EDIT)<1) ! 175: continue; ! 176: if((cfg.nodecfg=(nodecfg_t *)REALLOC(cfg.nodecfg ! 177: ,sizeof(nodecfg_t)*(cfg.nodecfgs+1)))==NULL) { ! 178: printf("\nMemory Allocation Error\n"); ! 179: exit(1); } ! 180: for(j=cfg.nodecfgs;j>i;j--) ! 181: memcpy(&cfg.nodecfg[j],&cfg.nodecfg[j-1] ! 182: ,sizeof(nodecfg_t)); ! 183: cfg.nodecfgs++; ! 184: memset(&cfg.nodecfg[i],0,sizeof(nodecfg_t)); ! 185: cfg.nodecfg[i].faddr=atofaddr(str); ! 186: continue; } ! 187: ! 188: if((i&MSK_ON)==MSK_DEL) { ! 189: i&=MSK_OFF; ! 190: cfg.nodecfgs--; ! 191: if(cfg.nodecfgs<=0) { ! 192: cfg.nodecfgs=0; ! 193: continue; } ! 194: for(j=i;j<cfg.nodecfgs;j++) ! 195: memcpy(&cfg.nodecfg[j],&cfg.nodecfg[j+1] ! 196: ,sizeof(nodecfg_t)); ! 197: if((cfg.nodecfg=(nodecfg_t *)REALLOC(cfg.nodecfg ! 198: ,sizeof(nodecfg_t)*(cfg.nodecfgs)))==NULL) { ! 199: printf("\nMemory Allocation Error\n"); ! 200: exit(1); } ! 201: continue; } ! 202: if((i&MSK_ON)==MSK_GET) { ! 203: i&=MSK_OFF; ! 204: memcpy(&savnodecfg,&cfg.nodecfg[i],sizeof(nodecfg_t)); ! 205: continue; } ! 206: if((i&MSK_ON)==MSK_PUT) { ! 207: i&=MSK_OFF; ! 208: memcpy(&cfg.nodecfg[i],&savnodecfg,sizeof(nodecfg_t)); ! 209: continue; } ! 210: while(1) { ! 211: helpbuf= ! 212: " Node Options \r\n\r\n" ! 213: "These are the configurable options available for this node.\r\n"; ! 214: j=0; ! 215: sprintf(opt[j++],"%-20.20s %s","Address" ! 216: ,faddrtoa(cfg.nodecfg[i].faddr)); ! 217: sprintf(opt[j++],"%-20.20s %s","Archive Type" ! 218: ,cfg.nodecfg[i].arctype>cfg.arcdefs ? ! 219: "None":cfg.arcdef[cfg.nodecfg[i].arctype].name); ! 220: sprintf(opt[j++],"%-20.20s %s","Packet Type" ! 221: ,cfg.nodecfg[i].pkt_type==PKT_TWO ? "2" ! 222: :cfg.nodecfg[i].pkt_type==PKT_TWO_TWO ? "2.2":"2+"); ! 223: sprintf(opt[j++],"%-20.20s %s","Packet Password" ! 224: ,cfg.nodecfg[i].pktpwd); ! 225: sprintf(opt[j++],"%-20.20s %s","Areafix Password" ! 226: ,cfg.nodecfg[i].password); ! 227: str[0]=0; ! 228: for(k=0;k<cfg.nodecfg[i].numflags;k++) { ! 229: strcat(str,cfg.nodecfg[i].flag[k].flag); ! 230: strcat(str," "); } ! 231: sprintf(opt[j++],"%-20.20s %s","Areafix Flags",str); ! 232: sprintf(opt[j++],"%-20.20s %s","Status" ! 233: ,cfg.nodecfg[i].attr&ATTR_CRASH ? "Crash" ! 234: :cfg.nodecfg[i].attr&ATTR_HOLD ? "Hold" : "None"); ! 235: sprintf(opt[j++],"%-20.20s %s","Direct" ! 236: ,cfg.nodecfg[i].attr&ATTR_DIRECT ? "Yes":"No"); ! 237: sprintf(opt[j++],"%-20.20s %s","Passive" ! 238: ,cfg.nodecfg[i].attr&ATTR_PASSIVE ? "Yes":"No"); ! 239: sprintf(opt[j++],"%-20.20s %s","Send Notify List" ! 240: ,cfg.nodecfg[i].attr&SEND_NOTIFY ? "Yes" : "No"); ! 241: if(misc&FLO_MAILER) ! 242: sprintf(opt[j++],"%-20.20s %s","Route To" ! 243: ,cfg.nodecfg[i].route.zone ! 244: ? faddrtoa(cfg.nodecfg[i].route) : "Disabled"); ! 245: opt[j][0]=0; ! 246: k=ulist(WIN_MID|WIN_ACT,0,0,40,&nodeop,0 ! 247: ,faddrtoa(cfg.nodecfg[i].faddr),opt); ! 248: if(k==-1) ! 249: break; ! 250: switch(k) { ! 251: case 0: ! 252: helpbuf= ! 253: " Address \r\n\r\n" ! 254: "This is the FidoNet style address of this node.\r\n"; ! 255: strcpy(str,faddrtoa(cfg.nodecfg[i].faddr)); ! 256: uinput(WIN_MID|WIN_SAV,0,0 ! 257: ,"Node Address (ALL wildcard allowed)",str ! 258: ,25,K_EDIT|K_UPPER); ! 259: cfg.nodecfg[i].faddr=atofaddr(str); ! 260: break; ! 261: case 1: ! 262: helpbuf= ! 263: " Archive Type \r\n\r\n" ! 264: "This is the compression type that will be used for compressing packets\r\n" ! 265: "to and decompressing packets from this node.\r\n"; ! 266: for(j=0;j<cfg.arcdefs;j++) ! 267: strcpy(opt[j],cfg.arcdef[j].name); ! 268: strcpy(opt[j++],"None"); ! 269: opt[j][0]=0; ! 270: if(cfg.nodecfg[i].arctype<j) ! 271: j=cfg.nodecfg[i].arctype; ! 272: k=ulist(WIN_RHT|WIN_SAV,0,0,0,&j,0 ! 273: ,"Archive Type",opt); ! 274: if(k==-1) ! 275: break; ! 276: if(k>=cfg.arcdefs) ! 277: cfg.nodecfg[i].arctype=0xffff; ! 278: else ! 279: cfg.nodecfg[i].arctype=k; ! 280: break; ! 281: case 2: ! 282: helpbuf= ! 283: " Packet Type \r\n\r\n" ! 284: "This is the packet header type that will be used in mail packets to\r\n" ! 285: "this node. SBBSecho defaults to using type 2.2.\r\n"; ! 286: j=0; ! 287: strcpy(opt[j++],"2+"); ! 288: strcpy(opt[j++],"2.2"); ! 289: strcpy(opt[j++],"2"); ! 290: opt[j][0]=0; ! 291: j=cfg.nodecfg[i].pkt_type; ! 292: k=ulist(WIN_RHT|WIN_SAV,0,0,0,&j,0,"Packet Type" ! 293: ,opt); ! 294: if(k==-1) ! 295: break; ! 296: cfg.nodecfg[i].pkt_type=k; ! 297: break; ! 298: case 3: ! 299: helpbuf= ! 300: " Packet Password \r\n\r\n" ! 301: "This is an optional password that SBBSecho will place into packets\r\n" ! 302: "destined for this node.\r\n"; ! 303: uinput(WIN_MID|WIN_SAV,0,0 ! 304: ,"Packet Password (optional)" ! 305: ,cfg.nodecfg[i].pktpwd,8,K_EDIT|K_UPPER); ! 306: break; ! 307: case 4: ! 308: helpbuf= ! 309: " Areafix Password \r\n\r\n" ! 310: "This is the password that will be used by this node when doing remote\r\n" ! 311: "areamanager functions.\r\n"; ! 312: uinput(WIN_MID|WIN_SAV,0,0 ! 313: ,"Areafix Password" ! 314: ,cfg.nodecfg[i].password,8,K_EDIT|K_UPPER); ! 315: break; ! 316: case 5: ! 317: helpbuf= ! 318: " Areafix Flag \r\n\r\n" ! 319: "This is a flag to to be given to this node allowing access to one or\r\n" ! 320: "more of the configured echo lists\r\n"; ! 321: while(1) { ! 322: for(j=0;j<cfg.nodecfg[i].numflags;j++) ! 323: strcpy(opt[j],cfg.nodecfg[i].flag[j].flag); ! 324: opt[j][0]=0; ! 325: k=ulist(WIN_SAV|WIN_INS|WIN_DEL|WIN_ACT| ! 326: WIN_XTR|WIN_INSACT|WIN_DELACT|WIN_RHT ! 327: ,0,0,0,&k,0,"Areafix Flags",opt); ! 328: if(k==-1) ! 329: break; ! 330: if((k&MSK_ON)==MSK_INS) { ! 331: k&=MSK_OFF; ! 332: str[0]=0; ! 333: if(uinput(WIN_MID|WIN_SAV,0,0 ! 334: ,"Areafix Flag",str,4 ! 335: ,K_EDIT|K_UPPER)<1) ! 336: continue; ! 337: if((cfg.nodecfg[i].flag=(flag_t *) ! 338: REALLOC(cfg.nodecfg[i].flag ! 339: ,sizeof(flag_t)* ! 340: (cfg.nodecfg[i].numflags+1)))==NULL) { ! 341: printf("\nMemory Allocation Error\n"); ! 342: exit(1); } ! 343: for(j=cfg.nodecfg[i].numflags;j>i;j--) ! 344: memcpy(&cfg.nodecfg[i].flag[j] ! 345: ,&cfg.nodecfg[i].flag[j-1] ! 346: ,sizeof(flag_t)); ! 347: cfg.nodecfg[i].numflags++; ! 348: memset(&cfg.nodecfg[i].flag[k].flag ! 349: ,0,sizeof(flag_t)); ! 350: strcpy(cfg.nodecfg[i].flag[k].flag,str); ! 351: continue; } ! 352: ! 353: if((k&MSK_ON)==MSK_DEL) { ! 354: k&=MSK_OFF; ! 355: cfg.nodecfg[i].numflags--; ! 356: if(cfg.nodecfg[i].numflags<=0) { ! 357: cfg.nodecfg[i].numflags=0; ! 358: continue; } ! 359: for(j=k;j<cfg.nodecfg[i].numflags;j++) ! 360: strcpy(cfg.nodecfg[i].flag[j].flag ! 361: ,cfg.nodecfg[i].flag[j+1].flag); ! 362: if((cfg.nodecfg[i].flag=(flag_t *) ! 363: REALLOC(cfg.nodecfg[i].flag ! 364: ,sizeof(flag_t)* ! 365: (cfg.nodecfg[i].numflags)))==NULL) { ! 366: printf("\nMemory Allocation Error\n"); ! 367: exit(1); } ! 368: continue; } ! 369: strcpy(str,cfg.nodecfg[i].flag[k].flag); ! 370: uinput(WIN_MID|WIN_SAV,0,0,"Areafix Flag" ! 371: ,str,4,K_EDIT|K_UPPER); ! 372: strcpy(cfg.nodecfg[i].flag[k].flag,str); ! 373: continue; } ! 374: break; ! 375: case 6: ! 376: if(cfg.nodecfg[i].attr&ATTR_CRASH) { ! 377: cfg.nodecfg[i].attr^=ATTR_CRASH; ! 378: cfg.nodecfg[i].attr|=ATTR_HOLD; ! 379: break; } ! 380: if(cfg.nodecfg[i].attr&ATTR_HOLD) { ! 381: cfg.nodecfg[i].attr^=ATTR_HOLD; ! 382: break; } ! 383: cfg.nodecfg[i].attr|=ATTR_CRASH; ! 384: break; ! 385: case 7: ! 386: cfg.nodecfg[i].attr^=ATTR_DIRECT; ! 387: break; ! 388: case 8: ! 389: cfg.nodecfg[i].attr^=ATTR_PASSIVE; ! 390: break; ! 391: case 9: ! 392: cfg.nodecfg[i].attr^=SEND_NOTIFY; ! 393: break; ! 394: case 10: ! 395: helpbuf= ! 396: " Route To \r\n\r\n" ! 397: "When using a FLO type mailer, this is the node number of an address\r\n" ! 398: "to route mail to for this node.\r\n"; ! 399: strcpy(str,faddrtoa(cfg.nodecfg[i].route)); ! 400: uinput(WIN_MID|WIN_SAV,0,0 ! 401: ,"Node Address to Route To",str ! 402: ,25,K_EDIT); ! 403: if(str[0]) ! 404: cfg.nodecfg[i].route=atofaddr(str); ! 405: break; ! 406: } } } ! 407: break; ! 408: ! 409: case 5: ! 410: helpbuf= ! 411: " Paths... \r\n\r\n" ! 412: "From this menu you can configure the paths that SBBSecho will use\r\n" ! 413: "when importing and exporting.\r\n"; ! 414: j=0; ! 415: while(1) { ! 416: i=0; ! 417: sprintf(opt[i++],"%-30.30s %s","Inbound Directory" ! 418: ,cfg.inbound[0] ? cfg.inbound : "<Specified in SCFG>"); ! 419: sprintf(opt[i++],"%-30.30s %s","Secure Inbound (optional)" ! 420: ,cfg.secure[0] ? cfg.secure : "None Specified"); ! 421: sprintf(opt[i++],"%-30.30s %s","Outbound Directory" ! 422: ,cfg.outbound); ! 423: sprintf(opt[i++],"%-30.30s %s","Area File" ! 424: ,cfg.areafile[0] ? cfg.areafile ! 425: : "SCFG->DATA\\AREAS.BBS"); ! 426: sprintf(opt[i++],"%-30.30s %s","Log File" ! 427: ,cfg.logfile[0] ? cfg.logfile ! 428: : "SCFG->DATA\\SBBSECHO.LOG"); ! 429: opt[i][0]=NULL; ! 430: j=ulist(WIN_MID|WIN_ACT,0,0,60,&j,0 ! 431: ,"Paths and Filenames",opt); ! 432: if(j==-1) ! 433: break; ! 434: switch(j) { ! 435: case 0: ! 436: helpbuf= ! 437: " Inbound Directory \r\n\r\n" ! 438: "This is the complete path (drive and directory) where your front\r\n" ! 439: "end mailer stores, and where SBBSecho will look for, incoming message\r\n" ! 440: "bundles and packets."; ! 441: uinput(WIN_MID|WIN_SAV,0,0,"Inbound",cfg.inbound ! 442: ,50,K_EDIT|K_UPPER); ! 443: break; ! 444: ! 445: case 1: ! 446: helpbuf= ! 447: " Secure Inbound Directory \r\n\r\n" ! 448: "This is the complete path (drive and directory) where your front\r\n" ! 449: "end mailer stores, and where SBBSecho will look for, incoming message\r\n" ! 450: "bundles and packets for SECURE sessions."; ! 451: uinput(WIN_MID|WIN_SAV,0,0,"Secure Inbound",cfg.secure ! 452: ,50,K_EDIT|K_UPPER); ! 453: break; ! 454: ! 455: case 2: ! 456: helpbuf= ! 457: " Outbound Directory \r\n\r\n" ! 458: "This is the complete path (drive and directory) where your front\r\n" ! 459: "end mailer will look for, and where SBBSecho will place, outgoing\r\n" ! 460: "message bundles and packets."; ! 461: uinput(WIN_MID|WIN_SAV,0,0,"Outbound",cfg.outbound ! 462: ,50,K_EDIT|K_UPPER); ! 463: break; ! 464: ! 465: case 3: ! 466: helpbuf= ! 467: " Area File \r\n\r\n" ! 468: "This is the complete path (drive, directory, and filename) of the\r\n" ! 469: "file SBBSecho will use as your AREAS.BBS file."; ! 470: uinput(WIN_MID|WIN_SAV,0,0,"Areafile",cfg.areafile ! 471: ,50,K_EDIT|K_UPPER); ! 472: break; ! 473: ! 474: case 4: ! 475: helpbuf= ! 476: " Log File \r\n\r\n" ! 477: "This is the complete path (drive, directory, and filename) of the\r\n" ! 478: "file SBBSecho will use to log information each time it is run."; ! 479: uinput(WIN_MID|WIN_SAV,0,0,"Logfile",cfg.logfile ! 480: ,50,K_EDIT|K_UPPER); ! 481: break; } } ! 482: break; ! 483: case 6: ! 484: helpbuf= ! 485: " Log Options \r\n" ! 486: "\r\n" ! 487: "Each loggable item can be toggled off or on from this menu. You must run\r\n" ! 488: "&SBBSecho& with the &/L& command line option for any of these items to be\r\n" ! 489: "logged."; ! 490: j=0; ! 491: while(1) { ! 492: i=0; ! 493: strcpy(opt[i++],"ALL"); ! 494: strcpy(opt[i++],"NONE"); ! 495: strcpy(opt[i++],"DEFAULT"); ! 496: sprintf(opt[i++],"%-35.35s%-3.3s","Ignored NetMail Messages" ! 497: ,cfg.log&LOG_IGNORED ? "Yes":"No"); ! 498: sprintf(opt[i++],"%-35.35s%-3.3s","NetMail for Unknown Users" ! 499: ,cfg.log&LOG_UNKNOWN ? "Yes":"No"); ! 500: sprintf(opt[i++],"%-35.35s%-3.3s","Areafix NetMail Messages" ! 501: ,cfg.log&LOG_AREAFIX ? "Yes":"No"); ! 502: sprintf(opt[i++],"%-35.35s%-3.3s","Imported NetMail Messages" ! 503: ,cfg.log&LOG_IMPORTED ? "Yes":"No"); ! 504: sprintf(opt[i++],"%-35.35s%-3.3s","Packing Out-bound NetMail" ! 505: ,cfg.log&LOG_PACKING ? "Yes":"No"); ! 506: sprintf(opt[i++],"%-35.35s%-3.3s","Routing Out-bound NetMail" ! 507: ,cfg.log&LOG_ROUTING ? "Yes":"No"); ! 508: sprintf(opt[i++],"%-35.35s%-3.3s","In-bound Packet Information" ! 509: ,cfg.log&LOG_PACKETS ? "Yes":"No"); ! 510: sprintf(opt[i++],"%-35.35s%-3.3s","In-bound Security Violations" ! 511: ,cfg.log&LOG_SECURITY ? "Yes":"No"); ! 512: sprintf(opt[i++],"%-35.35s%-3.3s","In-bound Grunged Messages" ! 513: ,cfg.log&LOG_GRUNGED ? "Yes":"No"); ! 514: sprintf(opt[i++],"%-35.35s%-3.3s","Disallowed Private EchoMail" ! 515: ,cfg.log&LOG_PRIVATE ? "Yes":"No"); ! 516: sprintf(opt[i++],"%-35.35s%-3.3s","Circular EchoMail Messages" ! 517: ,cfg.log&LOG_CIRCULAR ? "Yes":"No"); ! 518: sprintf(opt[i++],"%-35.35s%-3.3s","Duplicate EchoMail Messages" ! 519: ,cfg.log&LOG_DUPES ? "Yes":"No"); ! 520: sprintf(opt[i++],"%-35.35s%-3.3s","Area Totals" ! 521: ,cfg.log&LOG_AREA_TOTALS ? "Yes":"No"); ! 522: sprintf(opt[i++],"%-35.35s%-3.3s","Over-All Totals" ! 523: ,cfg.log&LOG_TOTALS ? "Yes":"No"); ! 524: opt[i][0]=NULL; ! 525: j=ulist(0,0,0,43,&j,0,"Log Options",opt); ! 526: if(j==-1) ! 527: break; ! 528: switch(j) { ! 529: case 0: ! 530: cfg.log=~0L; ! 531: break; ! 532: case 1: ! 533: cfg.log=0; ! 534: break; ! 535: case 2: ! 536: cfg.log=LOG_DEFAULTS; ! 537: break; ! 538: case 3: ! 539: cfg.log^=LOG_IGNORED; ! 540: break; ! 541: case 4: ! 542: cfg.log^=LOG_UNKNOWN; ! 543: break; ! 544: case 5: ! 545: cfg.log^=LOG_AREAFIX; ! 546: break; ! 547: case 6: ! 548: cfg.log^=LOG_IMPORTED; ! 549: break; ! 550: case 7: ! 551: cfg.log^=LOG_PACKING; ! 552: break; ! 553: case 8: ! 554: cfg.log^=LOG_ROUTING; ! 555: break; ! 556: case 9: ! 557: cfg.log^=LOG_PACKETS; ! 558: break; ! 559: case 10: ! 560: cfg.log^=LOG_SECURITY; ! 561: break; ! 562: case 11: ! 563: cfg.log^=LOG_GRUNGED; ! 564: break; ! 565: case 12: ! 566: cfg.log^=LOG_PRIVATE; ! 567: break; ! 568: case 13: ! 569: cfg.log^=LOG_CIRCULAR; ! 570: break; ! 571: case 14: ! 572: cfg.log^=LOG_DUPES; ! 573: break; ! 574: case 15: ! 575: cfg.log^=LOG_AREA_TOTALS; ! 576: break; ! 577: case 16: ! 578: cfg.log^=LOG_TOTALS; ! 579: break; } } ! 580: break; ! 581: ! 582: ! 583: case 7: ! 584: helpbuf= ! 585: "&Secure Operation& tells SBBSecho to check the AREAS.BBS file to insure\r\n" ! 586: " that the packet origin exists there as well as check the password of\r\n" ! 587: " that node (if configured).\r\n\r\n" ! 588: "&Swap for Executables& tells SBBSecho whether or not it should swap\r\n" ! 589: " out of memory when executing external executables.\r\n\r\n" ! 590: "&Fuzzy Zone Operation& when set to yes if SBBSecho receives an inbound\r\n" ! 591: " netmail with no international zone information, it will compare the\r\n" ! 592: " net/node of the destination to the net/node information in your AKAs\r\n" ! 593: " and assume the zone of a matching AKA.\r\n\r\n" ! 594: "&Store PATH/SEEN-BY/Unkown Kludge Lines in Message Base& allows you to\r\n" ! 595: " determine whether or not SBBSecho will store this information from\r\n" ! 596: " incoming messages in the Synchronet message base.\r\n\r\n" ! 597: "&Allow Nodes to Add Areas in the AREAS.BBS List& when set to YES allows\r\n" ! 598: " uplinks to add areas listed in the AREAS.BBS file\r\n"; ! 599: j=0; ! 600: while(1) { ! 601: i=0; ! 602: sprintf(opt[i++],"%-50.50s%-3.3s","Secure Operation" ! 603: ,misc&SECURE ? "Yes":"No"); ! 604: sprintf(opt[i++],"%-50.50s%-3.3s","Swap for Executables" ! 605: ,node_swap ? "Yes":"No"); ! 606: sprintf(opt[i++],"%-50.50s%-3.3s","Fuzzy Zone Operation" ! 607: ,misc&FUZZY_ZONE ? "Yes":"No"); ! 608: sprintf(opt[i++],"%-50.50s%-3.3s","Store PATH Lines in " ! 609: "Message Base",misc&STORE_SEENBY ? "Yes":"No"); ! 610: sprintf(opt[i++],"%-50.50s%-3.3s","Store SEEN-BY Lines in " ! 611: "Message Base",misc&STORE_PATH ? "Yes":"No"); ! 612: sprintf(opt[i++],"%-50.50s%-3.3s","Store Unknown Kludge Lines " ! 613: "in Message Base",misc&STORE_KLUDGE ? "Yes":"No"); ! 614: sprintf(opt[i++],"%-50.50s%-3.3s","Allow Nodes to Add Areas " ! 615: "in the AREAS.BBS List",misc&ELIST_ONLY?"No":"Yes"); ! 616: sprintf(opt[i++],"%-50.50s%-3.3s","Kill/Ignore Empty NetMail " ! 617: "Messages",misc&KILL_EMPTY_MAIL ? "Yes":"No"); ! 618: opt[i][0]=NULL; ! 619: j=ulist(0,0,0,60,&j,0,"Toggle Options",opt); ! 620: if(j==-1) ! 621: break; ! 622: switch(j) { ! 623: case 0: ! 624: misc^=SECURE; ! 625: break; ! 626: case 1: ! 627: if(node_swap) ! 628: node_swap=0; ! 629: else ! 630: node_swap=1; ! 631: break; ! 632: case 2: ! 633: misc^=FUZZY_ZONE; ! 634: break; ! 635: case 3: ! 636: misc^=STORE_SEENBY; ! 637: break; ! 638: case 4: ! 639: misc^=STORE_PATH; ! 640: break; ! 641: case 5: ! 642: misc^=STORE_KLUDGE; ! 643: break; ! 644: case 6: ! 645: misc^=ELIST_ONLY; ! 646: break; ! 647: case 7: ! 648: misc^=KILL_EMPTY_MAIL; ! 649: } } ! 650: break; ! 651: case 8: ! 652: helpbuf= ! 653: " Archive Programs \r\n\r\n" ! 654: "These are the archiving programs (types) which are available for\r\n" ! 655: "compressing outgoing packets.\r\n"; ! 656: i=0; ! 657: while(1) { ! 658: for(j=0;j<cfg.arcdefs;j++) ! 659: sprintf(opt[j],"%-30.30s",cfg.arcdef[j].name); ! 660: opt[j][0]=0; ! 661: i=ulist(WIN_ORG|WIN_INS|WIN_DEL|WIN_ACT|WIN_GET|WIN_PUT ! 662: |WIN_INSACT|WIN_DELACT|WIN_XTR ! 663: ,0,0,0,&i,0,"Archive Programs",opt); ! 664: if(i==-1) ! 665: break; ! 666: if((i&MSK_ON)==MSK_INS) { ! 667: i&=MSK_OFF; ! 668: str[0]=0; ! 669: helpbuf= ! 670: " Packer Name \r\n\r\n" ! 671: "This is the identifying name of the archiving program\r\n"; ! 672: if(uinput(WIN_MID,0,0 ! 673: ,"Packer Name",str,25,K_EDIT|K_UPPER)<1) ! 674: continue; ! 675: if((cfg.arcdef=(arcdef_t *)REALLOC(cfg.arcdef ! 676: ,sizeof(arcdef_t)*(cfg.arcdefs+1)))==NULL) { ! 677: printf("\nMemory Allocation Error\n"); ! 678: exit(1); } ! 679: for(j=cfg.arcdefs;j>i;j--) ! 680: memcpy(&cfg.arcdef[j],&cfg.arcdef[j-1] ! 681: ,sizeof(arcdef_t)); ! 682: strcpy(cfg.arcdef[j].name ! 683: ,cfg.arcdef[j-1].name); ! 684: cfg.arcdefs++; ! 685: memset(&cfg.arcdef[i],0,sizeof(arcdef_t)); ! 686: strcpy(cfg.arcdef[i].name,str); ! 687: continue; } ! 688: ! 689: if((i&MSK_ON)==MSK_DEL) { ! 690: i&=MSK_OFF; ! 691: cfg.arcdefs--; ! 692: if(cfg.arcdefs<=0) { ! 693: cfg.arcdefs=0; ! 694: continue; } ! 695: for(j=i;j<cfg.arcdefs;j++) ! 696: memcpy(&cfg.arcdef[j],&cfg.arcdef[j+1] ! 697: ,sizeof(arcdef_t)); ! 698: if((cfg.arcdef=(arcdef_t *)REALLOC(cfg.arcdef ! 699: ,sizeof(arcdef_t)*(cfg.arcdefs)))==NULL) { ! 700: printf("\nMemory Allocation Error\n"); ! 701: exit(1); } ! 702: continue; } ! 703: if((i&MSK_ON)==MSK_GET) { ! 704: i&=MSK_OFF; ! 705: memcpy(&savarcdef,&cfg.arcdef[i],sizeof(arcdef_t)); ! 706: continue; } ! 707: if((i&MSK_ON)==MSK_PUT) { ! 708: i&=MSK_OFF; ! 709: memcpy(&cfg.arcdef[i],&savarcdef,sizeof(arcdef_t)); ! 710: continue; } ! 711: while(1) { ! 712: j=0; ! 713: sprintf(opt[j++],"%-20.20s %s","Packer Name" ! 714: ,cfg.arcdef[i].name); ! 715: sprintf(opt[j++],"%-20.20s %s","Hexadecimal ID" ! 716: ,cfg.arcdef[i].hexid); ! 717: sprintf(opt[j++],"%-20.20s %u","Offset to Hex ID" ! 718: ,cfg.arcdef[i].byteloc); ! 719: sprintf(opt[j++],"%-20.20s %s","Pack Command Line" ! 720: ,cfg.arcdef[i].pack); ! 721: sprintf(opt[j++],"%-20.20s %s","Unpack Command Line" ! 722: ,cfg.arcdef[i].unpack); ! 723: opt[j][0]=0; ! 724: sprintf(str,"%.30s",cfg.arcdef[i].name); ! 725: k=ulist(WIN_MID|WIN_ACT,0,0,60,&nodeop,0,str,opt); ! 726: if(k==-1) ! 727: break; ! 728: switch(k) { ! 729: case 0: ! 730: uinput(WIN_MID|WIN_SAV,0,0 ! 731: ,"Packer Name",cfg.arcdef[i].name,25 ! 732: ,K_EDIT|K_UPPER); ! 733: break; ! 734: case 1: ! 735: uinput(WIN_MID|WIN_SAV,0,0 ! 736: ,"Hexadecimal ID",cfg.arcdef[i].hexid,25 ! 737: ,K_EDIT|K_UPPER); ! 738: break; ! 739: case 2: ! 740: sprintf(str,"%u",cfg.arcdef[i].byteloc); ! 741: uinput(WIN_MID|WIN_SAV,0,0 ! 742: ,"Offset to Hex ID",str,5 ! 743: ,K_NUMBER|K_EDIT); ! 744: cfg.arcdef[i].byteloc=atoi(str); ! 745: break; ! 746: case 3: ! 747: uinput(WIN_MID|WIN_SAV,0,0 ! 748: ,"Pack Command Line",cfg.arcdef[i].pack,50 ! 749: ,K_EDIT); ! 750: break; ! 751: case 4: ! 752: uinput(WIN_MID|WIN_SAV,0,0 ! 753: ,"Unpack Command Line",cfg.arcdef[i].unpack,50 ! 754: ,K_EDIT); ! 755: break; ! 756: } } } ! 757: break; ! 758: case 9: ! 759: helpbuf= ! 760: " Additional Echo Lists \r\n\r\n" ! 761: "This feature allows you to specify echo lists (in addition to your\r\n" ! 762: "AREAS.BBS file) for SBBSecho to search for area add requests.\r\n"; ! 763: i=0; ! 764: while(1) { ! 765: for(j=0;j<cfg.listcfgs;j++) ! 766: sprintf(opt[j],"%-50.50s",cfg.listcfg[j].listpath); ! 767: opt[j][0]=0; ! 768: i=ulist(WIN_ORG|WIN_INS|WIN_DEL|WIN_ACT|WIN_GET|WIN_PUT ! 769: |WIN_INSACT|WIN_DELACT|WIN_XTR ! 770: ,0,0,0,&i,0,"Additional Echo Lists",opt); ! 771: if(i==-1) ! 772: break; ! 773: if((i&MSK_ON)==MSK_INS) { ! 774: i&=MSK_OFF; ! 775: str[0]=0; ! 776: helpbuf= ! 777: " Echo List \r\n\r\n" ! 778: "This is the path and filename of the echo list file you wish\r\n" ! 779: "to add.\r\n"; ! 780: if(uinput(WIN_MID|WIN_SAV,0,0 ! 781: ,"Echo List Path/Name",str,50,K_EDIT|K_UPPER)<1) ! 782: continue; ! 783: if((cfg.listcfg=(echolist_t *)REALLOC(cfg.listcfg ! 784: ,sizeof(echolist_t)*(cfg.listcfgs+1)))==NULL) { ! 785: printf("\nMemory Allocation Error\n"); ! 786: exit(1); } ! 787: for(j=cfg.listcfgs;j>i;j--) ! 788: memcpy(&cfg.listcfg[j],&cfg.listcfg[j-1] ! 789: ,sizeof(echolist_t)); ! 790: cfg.listcfgs++; ! 791: memset(&cfg.listcfg[i],0,sizeof(echolist_t)); ! 792: strcpy(cfg.listcfg[i].listpath,str); ! 793: continue; } ! 794: ! 795: if((i&MSK_ON)==MSK_DEL) { ! 796: i&=MSK_OFF; ! 797: cfg.listcfgs--; ! 798: if(cfg.listcfgs<=0) { ! 799: cfg.listcfgs=0; ! 800: continue; } ! 801: for(j=i;j<cfg.listcfgs;j++) ! 802: memcpy(&cfg.listcfg[j],&cfg.listcfg[j+1] ! 803: ,sizeof(echolist_t)); ! 804: if((cfg.listcfg=(echolist_t *)REALLOC(cfg.listcfg ! 805: ,sizeof(echolist_t)*(cfg.listcfgs)))==NULL) { ! 806: printf("\nMemory Allocation Error\n"); ! 807: exit(1); } ! 808: continue; } ! 809: if((i&MSK_ON)==MSK_GET) { ! 810: i&=MSK_OFF; ! 811: memcpy(&savlistcfg,&cfg.listcfg[i],sizeof(echolist_t)); ! 812: continue; } ! 813: if((i&MSK_ON)==MSK_PUT) { ! 814: i&=MSK_OFF; ! 815: memcpy(&cfg.listcfg[i],&savlistcfg,sizeof(echolist_t)); ! 816: continue; } ! 817: while(1) { ! 818: j=0; ! 819: sprintf(opt[j++],"%-20.20s %.19s","Echo List Path/Name" ! 820: ,cfg.listcfg[i].listpath); ! 821: sprintf(opt[j++],"%-20.20s %s","Hub Address" ! 822: ,(cfg.listcfg[i].forward.zone) ? ! 823: faddrtoa(cfg.listcfg[i].forward) : "None"); ! 824: sprintf(opt[j++],"%-20.20s %s","Forward Password" ! 825: ,(cfg.listcfg[i].password[0]) ? ! 826: cfg.listcfg[i].password : "None"); ! 827: sprintf(opt[j++],"%-20.20s %s","Forward Requests" ! 828: ,(cfg.listcfg[i].misc&NOFWD) ? "No" : "Yes"); ! 829: str[0]=0; ! 830: for(k=0;k<cfg.listcfg[i].numflags;k++) { ! 831: strcat(str,cfg.listcfg[i].flag[k].flag); ! 832: strcat(str," "); } ! 833: sprintf(opt[j++],"%-20.20s %s","Echo List Flags",str); ! 834: opt[j][0]=0; ! 835: k=ulist(WIN_MID|WIN_ACT,0,0,60,&nodeop,0,"Echo List",opt); ! 836: if(k==-1) ! 837: break; ! 838: switch(k) { ! 839: case 0: ! 840: strcpy(str,cfg.listcfg[i].listpath); ! 841: if(uinput(WIN_MID|WIN_SAV,0,0 ! 842: ,"Echo List Path/Name",str,50 ! 843: ,K_EDIT|K_UPPER)<1) ! 844: continue; ! 845: strcpy(cfg.listcfg[i].listpath,str); ! 846: break; ! 847: case 1: ! 848: if(cfg.listcfg[i].forward.zone) ! 849: strcpy(str,faddrtoa(cfg.listcfg[i].forward)); ! 850: else ! 851: str[0]=0; ! 852: uinput(WIN_MID|WIN_SAV,0,0 ! 853: ,"Hub Address",str ! 854: ,25,K_EDIT); ! 855: if(str[0]) ! 856: cfg.listcfg[i].forward=atofaddr(str); ! 857: else ! 858: memset(&cfg.listcfg[i].forward,0 ! 859: ,sizeof(faddr_t)); ! 860: break; ! 861: case 2: ! 862: uinput(WIN_MID|WIN_SAV,0,0 ! 863: ,"Password to use when forwarding requests" ! 864: ,cfg.listcfg[i].password,25,K_EDIT|K_UPPER); ! 865: break; ! 866: case 3: ! 867: cfg.listcfg[i].misc^=NOFWD; ! 868: if(cfg.listcfg[i].misc&NOFWD) ! 869: cfg.listcfg[i].password[0]=0; ! 870: break; ! 871: case 4: ! 872: while(1) { ! 873: for(j=0;j<cfg.listcfg[i].numflags;j++) ! 874: strcpy(opt[j],cfg.listcfg[i].flag[j].flag); ! 875: opt[j][0]=0; ! 876: x=ulist(WIN_SAV|WIN_INS|WIN_DEL|WIN_ACT| ! 877: WIN_XTR|WIN_INSACT|WIN_DELACT|WIN_RHT ! 878: ,0,0,0,&x,0,"Echo List Flags",opt); ! 879: if(x==-1) ! 880: break; ! 881: if((x&MSK_ON)==MSK_INS) { ! 882: x&=MSK_OFF; ! 883: str[0]=0; ! 884: helpbuf= ! 885: " Echo List Flag \r\n\r\n" ! 886: "These flags determine which nodes have access to the current\r\n" ! 887: "echolist file\r\n"; ! 888: if(uinput(WIN_MID|WIN_SAV,0,0 ! 889: ,"Echo List Flag",str,4 ! 890: ,K_EDIT|K_UPPER)<1) ! 891: continue; ! 892: if((cfg.listcfg[i].flag=(flag_t *) ! 893: REALLOC(cfg.listcfg[i].flag ! 894: ,sizeof(flag_t)* ! 895: (cfg.listcfg[i].numflags+1)))==NULL) { ! 896: printf("\nMemory Allocation Error\n"); ! 897: exit(1); } ! 898: for(j=cfg.listcfg[i].numflags;j>x;j--) ! 899: memcpy(&cfg.listcfg[i].flag[j] ! 900: ,&cfg.listcfg[i].flag[j-1] ! 901: ,sizeof(flag_t)); ! 902: cfg.listcfg[i].numflags++; ! 903: memset(&cfg.listcfg[i].flag[x].flag ! 904: ,0,sizeof(flag_t)); ! 905: strcpy(cfg.listcfg[i].flag[x].flag,str); ! 906: continue; } ! 907: ! 908: if((x&MSK_ON)==MSK_DEL) { ! 909: x&=MSK_OFF; ! 910: cfg.listcfg[i].numflags--; ! 911: if(cfg.listcfg[i].numflags<=0) { ! 912: cfg.listcfg[i].numflags=0; ! 913: continue; } ! 914: for(j=x;j<cfg.listcfg[i].numflags;j++) ! 915: strcpy(cfg.listcfg[i].flag[j].flag ! 916: ,cfg.listcfg[i].flag[j+1].flag); ! 917: if((cfg.listcfg[i].flag=(flag_t *) ! 918: REALLOC(cfg.listcfg[i].flag ! 919: ,sizeof(flag_t)* ! 920: (cfg.listcfg[i].numflags)))==NULL) { ! 921: printf("\nMemory Allocation Error\n"); ! 922: exit(1); } ! 923: continue; } ! 924: strcpy(str,cfg.listcfg[i].flag[x].flag); ! 925: helpbuf= ! 926: " Echo List Flag \r\n\r\n" ! 927: "These flags determine which nodes have access to the current\r\n" ! 928: "echolist file\r\n"; ! 929: uinput(WIN_MID|WIN_SAV,0,0,"Echo List Flag" ! 930: ,str,4,K_EDIT|K_UPPER); ! 931: strcpy(cfg.listcfg[i].flag[x].flag,str); ! 932: continue; } ! 933: break; ! 934: } } } ! 935: break; ! 936: ! 937: case -1: ! 938: helpbuf= ! 939: " Save Configuration File \r\n\r\n" ! 940: "Select &Yes& to save the config file, &No& to quit without saving,\r\n" ! 941: "or hit ESC to go back to the menu.\r\n\r\n"; ! 942: i=0; ! 943: strcpy(opt[0],"Yes"); ! 944: strcpy(opt[1],"No"); ! 945: opt[2][0]=0; ! 946: i=ulist(WIN_MID,0,0,0,&i,0,"Save Config File",opt); ! 947: if(i==-1) break; ! 948: if(i) bail(0); ! 949: if((file=open(cfg.cfgfile ! 950: ,O_WRONLY|O_BINARY|O_CREAT|O_DENYALL|O_TRUNC,S_IWRITE))==-1) { ! 951: textattr(LIGHTGRAY); ! 952: clrscr(); ! 953: lprintf("Error opening %s\r\n",cfg.cfgfile); ! 954: bail(1); } ! 955: if((stream=fdopen(file,"wb"))==NULL) { ! 956: textattr(LIGHTGRAY); ! 957: clrscr(); ! 958: lprintf("Error fdopen %s\r\n",cfg.cfgfile); ! 959: bail(1); } ! 960: if(!node_swap) ! 961: fprintf(stream,"NOSWAP\r\n"); ! 962: if(cfg.notify) ! 963: fprintf(stream,"NOTIFY %u\r\n",cfg.notify); ! 964: if(misc&SECURE) ! 965: fprintf(stream,"SECURE_ECHOMAIL\r\n"); ! 966: if(misc&KILL_EMPTY_MAIL) ! 967: fprintf(stream,"KILL_EMPTY\r\n"); ! 968: if(misc&STORE_SEENBY) ! 969: fprintf(stream,"STORE_SEENBY\r\n"); ! 970: if(misc&STORE_PATH) ! 971: fprintf(stream,"STORE_PATH\r\n"); ! 972: if(misc&STORE_KLUDGE) ! 973: fprintf(stream,"STORE_KLUDGE\r\n"); ! 974: if(misc&FUZZY_ZONE) ! 975: fprintf(stream,"FUZZY_ZONE\r\n"); ! 976: if(misc&FLO_MAILER) ! 977: fprintf(stream,"FLO_MAILER\r\n"); ! 978: if(misc&ELIST_ONLY) ! 979: fprintf(stream,"ELIST_ONLY\r\n"); ! 980: if(cfg.areafile[0]) ! 981: fprintf(stream,"AREAFILE %s\r\n",cfg.areafile); ! 982: if(cfg.logfile[0]) ! 983: fprintf(stream,"LOGFILE %s\r\n",cfg.logfile); ! 984: if(cfg.log!=LOG_DEFAULTS) { ! 985: if(cfg.log==0xffffffffUL) ! 986: fprintf(stream,"LOG ALL\r\n"); ! 987: else if(cfg.log==0L) ! 988: fprintf(stream,"LOG NONE\r\n"); ! 989: else ! 990: fprintf(stream,"LOG %08lX\r\n",cfg.log); } ! 991: if(cfg.inbound[0]) ! 992: fprintf(stream,"INBOUND %s\r\n",cfg.inbound); ! 993: if(cfg.secure[0]) ! 994: fprintf(stream,"SECURE_INBOUND %s\r\n",cfg.secure); ! 995: if(cfg.outbound[0]) ! 996: fprintf(stream,"OUTBOUND %s\r\n",cfg.outbound); ! 997: if(cfg.maxbdlsize!=DFLT_BDL_SIZE) ! 998: fprintf(stream,"ARCSIZE %lu\r\n",cfg.maxbdlsize); ! 999: if(cfg.maxpktsize!=DFLT_PKT_SIZE) ! 1000: fprintf(stream,"PKTSIZE %lu\r\n",cfg.maxpktsize); ! 1001: for(i=j=0;i<cfg.nodecfgs;i++) ! 1002: if(cfg.nodecfg[i].attr&SEND_NOTIFY) { ! 1003: if(!j) fprintf(stream,"SEND_NOTIFY"); ! 1004: fprintf(stream," %s",faddrtoa(cfg.nodecfg[i].faddr)); ! 1005: j++; } ! 1006: if(j) fprintf(stream,"\r\n"); ! 1007: for(i=j=0;i<cfg.nodecfgs;i++) ! 1008: if(cfg.nodecfg[i].attr&ATTR_HOLD) { ! 1009: if(!j) fprintf(stream,"HOLD"); ! 1010: fprintf(stream," %s",faddrtoa(cfg.nodecfg[i].faddr)); ! 1011: j++; } ! 1012: if(j) fprintf(stream,"\r\n"); ! 1013: for(i=j=0;i<cfg.nodecfgs;i++) ! 1014: if(cfg.nodecfg[i].attr&ATTR_DIRECT) { ! 1015: if(!j) fprintf(stream,"DIRECT"); ! 1016: fprintf(stream," %s",faddrtoa(cfg.nodecfg[i].faddr)); ! 1017: j++; } ! 1018: if(j) fprintf(stream,"\r\n"); ! 1019: for(i=j=0;i<cfg.nodecfgs;i++) ! 1020: if(cfg.nodecfg[i].attr&ATTR_CRASH) { ! 1021: if(!j) fprintf(stream,"CRASH"); ! 1022: fprintf(stream," %s",faddrtoa(cfg.nodecfg[i].faddr)); ! 1023: j++; } ! 1024: if(j) fprintf(stream,"\r\n"); ! 1025: for(i=j=0;i<cfg.nodecfgs;i++) ! 1026: if(cfg.nodecfg[i].attr&ATTR_PASSIVE) { ! 1027: if(!j) fprintf(stream,"PASSIVE"); ! 1028: fprintf(stream," %s",faddrtoa(cfg.nodecfg[i].faddr)); ! 1029: j++; } ! 1030: if(j) fprintf(stream,"\r\n"); ! 1031: ! 1032: for(i=0;i<cfg.nodecfgs;i++) ! 1033: if(cfg.nodecfg[i].pktpwd[0]) ! 1034: fprintf(stream,"PKTPWD %s %s\r\n" ! 1035: ,faddrtoa(cfg.nodecfg[i].faddr),cfg.nodecfg[i].pktpwd); ! 1036: ! 1037: for(i=0;i<cfg.nodecfgs;i++) ! 1038: if(cfg.nodecfg[i].pkt_type) ! 1039: fprintf(stream,"PKTTYPE %s %s\r\n" ! 1040: ,cfg.nodecfg[i].pkt_type==PKT_TWO_TWO ? "2.2":"2" ! 1041: ,faddrtoa(cfg.nodecfg[i].faddr)); ! 1042: ! 1043: for(i=0;i<cfg.arcdefs;i++) ! 1044: fprintf(stream,"PACKER %s %u %s\r\n PACK %s\r\n" ! 1045: " UNPACK %s\r\nEND\r\n" ! 1046: ,cfg.arcdef[i].name ! 1047: ,cfg.arcdef[i].byteloc ! 1048: ,cfg.arcdef[i].hexid ! 1049: ,cfg.arcdef[i].pack ! 1050: ,cfg.arcdef[i].unpack ! 1051: ); ! 1052: for(i=0;i<cfg.arcdefs;i++) { ! 1053: for(j=k=0;j<cfg.nodecfgs;j++) ! 1054: if(cfg.nodecfg[j].arctype==i) { ! 1055: if(!k) ! 1056: fprintf(stream,"%-10s %s","USEPACKER" ! 1057: ,cfg.arcdef[i].name); ! 1058: k++; ! 1059: fprintf(stream," %s",faddrtoa(cfg.nodecfg[j].faddr)); } ! 1060: if(k) ! 1061: fprintf(stream,"\r\n"); } ! 1062: ! 1063: for(i=j=0;i<cfg.nodecfgs;i++) ! 1064: if(cfg.nodecfg[i].arctype==0xffff) { ! 1065: if(!j) ! 1066: fprintf(stream,"%-10s %s","USEPACKER","NONE"); ! 1067: j++; ! 1068: fprintf(stream," %s",faddrtoa(cfg.nodecfg[i].faddr)); } ! 1069: if(j) ! 1070: fprintf(stream,"\r\n"); ! 1071: ! 1072: for(i=0;i<cfg.listcfgs;i++) { ! 1073: fprintf(stream,"%-10s","ECHOLIST"); ! 1074: if(cfg.listcfg[i].password[0]) ! 1075: fprintf(stream," FORWARD %s %s" ! 1076: ,faddrtoa(cfg.listcfg[i].forward) ! 1077: ,cfg.listcfg[i].password); ! 1078: else if(cfg.listcfg[i].misc&NOFWD && ! 1079: cfg.listcfg[i].forward.zone) ! 1080: fprintf(stream," HUB %s" ! 1081: ,faddrtoa(cfg.listcfg[i].forward)); ! 1082: fprintf(stream," %s",cfg.listcfg[i].listpath); ! 1083: for(j=0;j<cfg.listcfg[i].numflags;j++) ! 1084: fprintf(stream," %s",cfg.listcfg[i].flag[j].flag); ! 1085: fprintf(stream,"\r\n"); } ! 1086: ! 1087: for(i=0;i<cfg.nodecfgs;i++) ! 1088: if(cfg.nodecfg[i].password[0]) { ! 1089: fprintf(stream,"%-10s %s %s","AREAFIX" ! 1090: ,faddrtoa(cfg.nodecfg[i].faddr) ! 1091: ,cfg.nodecfg[i].password); ! 1092: for(j=0;j<cfg.nodecfg[i].numflags;j++) ! 1093: fprintf(stream," %s",cfg.nodecfg[i].flag[j].flag); ! 1094: fprintf(stream,"\r\n"); } ! 1095: ! 1096: for(i=0;i<cfg.nodecfgs;i++) ! 1097: if(cfg.nodecfg[i].route.zone) { ! 1098: fprintf(stream,"%-10s %s","ROUTE_TO" ! 1099: ,faddrtoa(cfg.nodecfg[i].route)); ! 1100: fprintf(stream," %s" ! 1101: ,faddrtoa(cfg.nodecfg[i].faddr)); ! 1102: for(j=i+1;j<cfg.nodecfgs;j++) ! 1103: if(!memcmp(&cfg.nodecfg[j].route,&cfg.nodecfg[i].route ! 1104: ,sizeof(faddr_t))) { ! 1105: fprintf(stream," %s" ! 1106: ,faddrtoa(cfg.nodecfg[j].faddr)); ! 1107: cfg.nodecfg[j].route.zone=0; } ! 1108: fprintf(stream,"\r\n"); } ! 1109: ! 1110: fclose(stream); ! 1111: bail(0); ! 1112: } ! 1113: } ! 1114: } ! 1115: /****************************************************************************/ ! 1116: /* Checks the disk drive for the existance of a file. Returns 1 if it */ ! 1117: /* exists, 0 if it doesn't. */ ! 1118: /* Called from upload */ ! 1119: /****************************************************************************/ ! 1120: char fexist(char *filespec) ! 1121: { ! 1122: struct ffblk f; ! 1123: ! 1124: if(findfirst(filespec,&f,0)==NULL) ! 1125: return(1); ! 1126: return(0); ! 1127: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.