|
|
1.1 ! root 1: #line 2 "SCFGXFR1.C" ! 2: ! 3: /* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */ ! 4: ! 5: #include "scfg.h" ! 6: ! 7: void xfer_opts() ! 8: { ! 9: static int xfr_dflt; ! 10: char str[81],done; ! 11: int i,j,k,l,dflt,bar; ! 12: static fextr_t savfextr; ! 13: static fview_t savfview; ! 14: static ftest_t savftest; ! 15: static fcomp_t savfcomp; ! 16: static prot_t savprot; ! 17: static dlevent_t savdlevent; ! 18: static char savaltpath[LEN_DIR+1]; ! 19: ! 20: while(1) { ! 21: i=0; ! 22: sprintf(opt[i++],"%-33.33s%uk","Min Bytes Free Disk Space",min_dspace); ! 23: sprintf(opt[i++],"%-33.33s%u","Max Files in Batch UL Queue" ! 24: ,max_batup); ! 25: sprintf(opt[i++],"%-33.33s%u","Max Files in Batch DL Queue" ! 26: ,max_batdn); ! 27: sprintf(opt[i++],"%-33.33s%u","Max Users in User Transfers",max_userxfer); ! 28: sprintf(opt[i++],"%-33.33s%u%%","Default Credit on Upload" ! 29: ,cdt_up_pct); ! 30: sprintf(opt[i++],"%-33.33s%u%%","Default Credit on Download" ! 31: ,cdt_dn_pct); ! 32: if(leech_pct) ! 33: sprintf(str,"%u%% after %u seconds",leech_pct,leech_sec); ! 34: else ! 35: strcpy(str,"Disabled"); ! 36: sprintf(opt[i++],"%-33.33s%s","Leech Protocol Detection",str); ! 37: strcpy(opt[i++],"Viewable Files..."); ! 38: strcpy(opt[i++],"Testable Files..."); ! 39: strcpy(opt[i++],"Download Events..."); ! 40: strcpy(opt[i++],"Extractable Files..."); ! 41: strcpy(opt[i++],"Compressable Files..."); ! 42: strcpy(opt[i++],"Transfer Protocols..."); ! 43: strcpy(opt[i++],"Alternate File Paths..."); ! 44: opt[i][0]=0; ! 45: SETHELP(WHERE); ! 46: /* ! 47: &File Transfer Configuration:& ! 48: ! 49: This menu has options and sub-menus that pertain specifically to the ! 50: file transfer section of the BBS. ! 51: */ ! 52: switch(ulist(WIN_ORG|WIN_ACT|WIN_CHE,0,0,72,&xfr_dflt,0 ! 53: ,"File Transfer Configuration",opt)) { ! 54: case -1: ! 55: i=save_changes(WIN_MID); ! 56: if(i==-1) ! 57: break; ! 58: if(!i) ! 59: write_file_cfg(); ! 60: return; ! 61: case 0: ! 62: SETHELP(WHERE); ! 63: /* ! 64: &Minimum Kilobytes Free Disk Space to Allow Uploads:& ! 65: ! 66: This is the minimum free space in a file directory to allow user ! 67: uploads. ! 68: */ ! 69: uinput(WIN_MID,0,0 ! 70: ,"Minimum Kilobytes Free Disk Space to Allow Uploads" ! 71: ,itoa(min_dspace,tmp,10),5,K_EDIT|K_NUMBER); ! 72: min_dspace=atoi(tmp); ! 73: break; ! 74: case 1: ! 75: SETHELP(WHERE); ! 76: /* ! 77: &Maximum Files in Batch Upload Queue:& ! 78: ! 79: This is the maximum number of files that can be placed in the batch ! 80: upload queue. ! 81: */ ! 82: uinput(WIN_MID,0,0,"Maximum Files in Batch Upload Queue" ! 83: ,itoa(max_batup,tmp,10),5,K_EDIT|K_NUMBER); ! 84: max_batup=atoi(tmp); ! 85: break; ! 86: case 2: ! 87: SETHELP(WHERE); ! 88: /* ! 89: &Maximum Files in Batch Download Queue:& ! 90: ! 91: This is the maximum number of files that can be placed in the batch ! 92: download queue. ! 93: */ ! 94: uinput(WIN_MID,0,0,"Maximum Files in Batch Download Queue" ! 95: ,itoa(max_batdn,tmp,10),5,K_EDIT|K_NUMBER); ! 96: max_batdn=atoi(tmp); ! 97: break; ! 98: case 3: ! 99: SETHELP(WHERE); ! 100: /* ! 101: &Maximum Destination Users in User to User Transfer:& ! 102: ! 103: This is the maximum number of users allowed in the destination user list ! 104: of a user to user upload. ! 105: */ ! 106: uinput(WIN_MID,0,0 ! 107: ,"Maximum Destination Users in User to User Transfers" ! 108: ,itoa(max_userxfer,tmp,10),5,K_EDIT|K_NUMBER); ! 109: max_userxfer=atoi(tmp); ! 110: break; ! 111: case 4: ! 112: SETHELP(WHERE); ! 113: /* ! 114: &Default Percentage of Credits to Credit Uploader on Upload:& ! 115: ! 116: This is the default setting that will be used when new file ! 117: directories are created. ! 118: */ ! 119: uinput(WIN_MID,0,0 ! 120: ,"Default Percentage of Credits to Credit Uploader on Upload" ! 121: ,itoa(cdt_up_pct,tmp,10),4,K_EDIT|K_NUMBER); ! 122: cdt_up_pct=atoi(tmp); ! 123: break; ! 124: case 5: ! 125: SETHELP(WHERE); ! 126: /* ! 127: &Default Percentage of Credits to Credit Uploader on Download:& ! 128: ! 129: This is the default setting that will be used when new file ! 130: directories are created. ! 131: */ ! 132: uinput(WIN_MID,0,0 ! 133: ,"Default Percentage of Credits to Credit Uploader on Download" ! 134: ,itoa(cdt_dn_pct,tmp,10),4,K_EDIT|K_NUMBER); ! 135: cdt_dn_pct=atoi(tmp); ! 136: break; ! 137: case 6: ! 138: SETHELP(WHERE); ! 139: /* ! 140: &Leech Protocol Detection Percentage:& ! 141: ! 142: This value is the sensitivity of the leech protocol detection feature of ! 143: Synchronet. If the transfer is apparently unsuccessful, but the transfer ! 144: time was at least this percentage of the estimated transfer time (based ! 145: on the estimated CPS of the connection result code), then a leech ! 146: protocol error is issued and the user's leech download counter is ! 147: incremented. Setting this value to &0& disables leech protocol detection. ! 148: */ ! 149: savnum=0; ! 150: uinput(WIN_MID|WIN_SAV,0,0 ! 151: ,"Leech Protocol Detection Percentage (0=Disabled)" ! 152: ,itoa(leech_pct,tmp,10),3,K_EDIT|K_NUMBER); ! 153: leech_pct=atoi(tmp); ! 154: if(!leech_pct) ! 155: break; ! 156: SETHELP(WHERE); ! 157: /* ! 158: &Leech Protocol Minimum Time (in Seconds):& ! 159: ! 160: This option allows you to adjust the sensitivity of the leech protocol ! 161: detection feature. This value is the minimum length of transfer time ! 162: (in seconds) that must elapse before an aborted tranfser will be ! 163: considered a possible leech attempt. ! 164: */ ! 165: uinput(WIN_MID,0,0 ! 166: ,"Leech Protocol Minimum Time (in Seconds)" ! 167: ,itoa(leech_sec,tmp,10),3,K_EDIT|K_NUMBER); ! 168: leech_sec=atoi(tmp); ! 169: break; ! 170: case 7: /* Viewable file types */ ! 171: dflt=bar=0; ! 172: while(1) { ! 173: for(i=0;i<total_fviews && i<MAX_OPTS;i++) ! 174: sprintf(opt[i],"%-3.3s %-40s",fview[i]->ext,fview[i]->cmd); ! 175: opt[i][0]=0; ! 176: i=WIN_ACT|WIN_SAV; /* save cause size can change */ ! 177: if(total_fviews<MAX_OPTS) ! 178: i|=WIN_INS; ! 179: if(total_fviews) ! 180: i|=WIN_DEL|WIN_GET; ! 181: if(savfview.cmd[0]) ! 182: i|=WIN_PUT; ! 183: savnum=0; ! 184: SETHELP(WHERE); ! 185: /* ! 186: &Viewable File Types:& ! 187: ! 188: This is a list of file types that have content information that can be ! 189: viewed through the execution of an external program. Here are a couple of ! 190: command line examples for a few file types. ! 191: */ ! 192: i=ulist(i,0,0,50,&dflt,&bar,"Viewable File Types",opt); ! 193: if(i==-1) ! 194: break; ! 195: if((i&MSK_ON)==MSK_DEL) { ! 196: i&=MSK_OFF; ! 197: FREE(fview[i]); ! 198: total_fviews--; ! 199: while(i<total_fviews) { ! 200: fview[i]=fview[i+1]; ! 201: i++; } ! 202: changes=1; ! 203: continue; } ! 204: if((i&MSK_ON)==MSK_INS) { ! 205: i&=MSK_OFF; ! 206: if((fview=(fview_t **)REALLOC(fview ! 207: ,sizeof(fview_t *)*(total_fviews+1)))==NULL) { ! 208: errormsg(WHERE,ERR_ALLOC,nulstr,total_fviews+1); ! 209: total_fviews=0; ! 210: bail(1); ! 211: continue; } ! 212: if(!total_fviews) { ! 213: if((fview[0]=(fview_t *)MALLOC( ! 214: sizeof(fview_t)))==NULL) { ! 215: errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(fview_t)); ! 216: continue; } ! 217: memset(fview[0],0,sizeof(fview_t)); ! 218: strcpy(fview[0]->ext,"ZIP"); ! 219: strcpy(fview[0]->cmd,"%!pkunzip -v %f"); } ! 220: else { ! 221: for(j=total_fviews;j>i;j--) ! 222: fview[j]=fview[j-1]; ! 223: if((fview[i]=(fview_t *)MALLOC( ! 224: sizeof(fview_t)))==NULL) { ! 225: errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(fview_t)); ! 226: continue; } ! 227: *fview[i]=*fview[i+1]; } ! 228: total_fviews++; ! 229: changes=1; ! 230: continue; } ! 231: if((i&MSK_ON)==MSK_GET) { ! 232: i&=MSK_OFF; ! 233: savfview=*fview[i]; ! 234: continue; } ! 235: if((i&MSK_ON)==MSK_PUT) { ! 236: i&=MSK_OFF; ! 237: *fview[i]=savfview; ! 238: changes=1; ! 239: continue; } ! 240: k=0; ! 241: done=0; ! 242: while(!done) { ! 243: j=0; ! 244: sprintf(opt[j++],"%-22.22s%s","File Extension" ! 245: ,fview[i]->ext); ! 246: sprintf(opt[j++],"%-22.22s%-40s","Command Line" ! 247: ,fview[i]->cmd); ! 248: sprintf(opt[j++],"%-22.22s%s","Access Requirements" ! 249: ,fview[i]->ar); ! 250: opt[j][0]=0; ! 251: savnum=1; ! 252: switch(ulist(WIN_RHT|WIN_BOT|WIN_SAV|WIN_ACT,0,0,0,&k,0 ! 253: ,"Viewable File Type",opt)) { ! 254: case -1: ! 255: done=1; ! 256: break; ! 257: case 0: ! 258: uinput(WIN_MID|WIN_SAV,0,0 ! 259: ,"Viewable File Type Extension" ! 260: ,fview[i]->ext,3,K_UPPER|K_EDIT); ! 261: break; ! 262: case 1: ! 263: uinput(WIN_MID|WIN_SAV,0,0 ! 264: ,"Command Line" ! 265: ,fview[i]->cmd,50,K_EDIT); ! 266: break; ! 267: case 2: ! 268: savnum=2; ! 269: sprintf(str,"Viewable File Type %s" ! 270: ,fview[i]->ext); ! 271: getar(str,fview[i]->ar); ! 272: break; } } } ! 273: break; ! 274: case 8: /* Testable file types */ ! 275: dflt=bar=0; ! 276: while(1) { ! 277: for(i=0;i<total_ftests && i<MAX_OPTS;i++) ! 278: sprintf(opt[i],"%-3.3s %-40s",ftest[i]->ext,ftest[i]->cmd); ! 279: opt[i][0]=0; ! 280: i=WIN_ACT|WIN_SAV; /* save cause size can change */ ! 281: if(total_ftests<MAX_OPTS) ! 282: i|=WIN_INS; ! 283: if(total_ftests) ! 284: i|=WIN_DEL|WIN_GET; ! 285: if(savftest.cmd[0]) ! 286: i|=WIN_PUT; ! 287: savnum=0; ! 288: SETHELP(WHERE); ! 289: /* ! 290: &Testable File Types:& ! 291: ! 292: This is a list of file types that will have a command line executed to ! 293: test the file integrity upon their upload. The file types are specified ! 294: by &extension& and if one file extension is listed more than once, each ! 295: command line will be executed. The command lines must return a DOS error ! 296: code of 0 (no error) in order for the file to pass the test. This method ! 297: of file testing upon upload is also known as an upload event. This test ! 298: or event, can do more than just test the file, it can perform any ! 299: function that the sysop wishes. Such as adding comments to an archived ! 300: file, or extracting an archive and performing a virus scan. While the ! 301: external program is executing, a text string is displayed to the user. ! 302: This &working string& can be set for each file type and command line ! 303: listed. ! 304: */ ! 305: i=ulist(i,0,0,50,&dflt,&bar,"Testable File Types",opt); ! 306: if(i==-1) ! 307: break; ! 308: if((i&MSK_ON)==MSK_DEL) { ! 309: i&=MSK_OFF; ! 310: FREE(ftest[i]); ! 311: total_ftests--; ! 312: while(i<total_ftests) { ! 313: ftest[i]=ftest[i+1]; ! 314: i++; } ! 315: changes=1; ! 316: continue; } ! 317: if((i&MSK_ON)==MSK_INS) { ! 318: i&=MSK_OFF; ! 319: if((ftest=(ftest_t **)REALLOC(ftest ! 320: ,sizeof(ftest_t *)*(total_ftests+1)))==NULL) { ! 321: errormsg(WHERE,ERR_ALLOC,nulstr,total_ftests+1); ! 322: total_ftests=0; ! 323: bail(1); ! 324: continue; } ! 325: if(!total_ftests) { ! 326: if((ftest[0]=(ftest_t *)MALLOC( ! 327: sizeof(ftest_t)))==NULL) { ! 328: errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(ftest_t)); ! 329: continue; } ! 330: memset(ftest[0],0,sizeof(ftest_t)); ! 331: strcpy(ftest[0]->ext,"ZIP"); ! 332: strcpy(ftest[0]->cmd,"%!pkunzip -t %f"); ! 333: strcpy(ftest[0]->workstr,"Testing ZIP Integrity..."); } ! 334: else { ! 335: ! 336: for(j=total_ftests;j>i;j--) ! 337: ftest[j]=ftest[j-1]; ! 338: if((ftest[i]=(ftest_t *)MALLOC( ! 339: sizeof(ftest_t)))==NULL) { ! 340: errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(ftest_t)); ! 341: continue; } ! 342: *ftest[i]=*ftest[i+1]; } ! 343: total_ftests++; ! 344: changes=1; ! 345: continue; } ! 346: if((i&MSK_ON)==MSK_GET) { ! 347: i&=MSK_OFF; ! 348: savftest=*ftest[i]; ! 349: continue; } ! 350: if((i&MSK_ON)==MSK_PUT) { ! 351: i&=MSK_OFF; ! 352: *ftest[i]=savftest; ! 353: changes=1; ! 354: continue; } ! 355: done=0; ! 356: k=0; ! 357: while(!done) { ! 358: j=0; ! 359: sprintf(opt[j++],"%-22.22s%s","File Extension" ! 360: ,ftest[i]->ext); ! 361: sprintf(opt[j++],"%-22.22s%-40s","Command Line" ! 362: ,ftest[i]->cmd); ! 363: sprintf(opt[j++],"%-22.22s%s","Working String" ! 364: ,ftest[i]->workstr); ! 365: sprintf(opt[j++],"%-22.22s%s","Access Requirements" ! 366: ,ftest[i]->ar); ! 367: opt[j][0]=0; ! 368: savnum=1; ! 369: switch(ulist(WIN_RHT|WIN_BOT|WIN_SAV|WIN_ACT,0,0,0,&k,0 ! 370: ,"Testable File Type",opt)) { ! 371: case -1: ! 372: done=1; ! 373: break; ! 374: case 0: ! 375: uinput(WIN_MID|WIN_SAV,0,0 ! 376: ,"Testable File Type Extension" ! 377: ,ftest[i]->ext,3,K_UPPER|K_EDIT); ! 378: break; ! 379: case 1: ! 380: uinput(WIN_MID|WIN_SAV,0,0 ! 381: ,"Command Line" ! 382: ,ftest[i]->cmd,50,K_EDIT); ! 383: break; ! 384: case 2: ! 385: uinput(WIN_MID|WIN_SAV,0,0 ! 386: ,"Working String" ! 387: ,ftest[i]->workstr,40,K_EDIT|K_MSG); ! 388: break; ! 389: case 3: ! 390: savnum=2; ! 391: sprintf(str,"Testable File Type %s",ftest[i]->ext); ! 392: getar(str,ftest[i]->ar); ! 393: break; } } } ! 394: break; ! 395: case 9: /* Download Events */ ! 396: dflt=bar=0; ! 397: while(1) { ! 398: for(i=0;i<total_dlevents && i<MAX_OPTS;i++) ! 399: sprintf(opt[i],"%-3.3s %-40s",dlevent[i]->ext,dlevent[i]->cmd); ! 400: opt[i][0]=0; ! 401: i=WIN_ACT|WIN_SAV; /* save cause size can change */ ! 402: if(total_dlevents<MAX_OPTS) ! 403: i|=WIN_INS; ! 404: if(total_dlevents) ! 405: i|=WIN_DEL|WIN_GET; ! 406: if(savdlevent.cmd[0]) ! 407: i|=WIN_PUT; ! 408: savnum=0; ! 409: SETHELP(WHERE); ! 410: /* ! 411: &Download Events:& ! 412: ! 413: This is a list of file types that will have a command line executed to ! 414: perform an event upon their download (e.g. trigger a download event). ! 415: The file types are specified by &extension& and if one file extension ! 416: is listed more than once, each command line will be executed. The ! 417: command lines must return a DOS error code of 0 (no error) in order ! 418: for the file to pass the test. This test or event, can do more than ! 419: just test the file, it can perform any function that the sysop wishes. ! 420: Such as adding comments to an archived file, or extracting an archive ! 421: and performing a virus scan. While the external program is executing, ! 422: a text string is displayed to the user. This &working string& can be set ! 423: for each file type and command line listed. ! 424: */ ! 425: i=ulist(i,0,0,50,&dflt,&bar,"Download Events",opt); ! 426: if(i==-1) ! 427: break; ! 428: if((i&MSK_ON)==MSK_DEL) { ! 429: i&=MSK_OFF; ! 430: FREE(dlevent[i]); ! 431: total_dlevents--; ! 432: while(i<total_dlevents) { ! 433: dlevent[i]=dlevent[i+1]; ! 434: i++; } ! 435: changes=1; ! 436: continue; } ! 437: if((i&MSK_ON)==MSK_INS) { ! 438: i&=MSK_OFF; ! 439: if((dlevent=(dlevent_t **)REALLOC(dlevent ! 440: ,sizeof(dlevent_t *)*(total_dlevents+1)))==NULL) { ! 441: errormsg(WHERE,ERR_ALLOC,nulstr,total_dlevents+1); ! 442: total_dlevents=0; ! 443: bail(1); ! 444: continue; } ! 445: if(!total_dlevents) { ! 446: if((dlevent[0]=(dlevent_t *)MALLOC( ! 447: sizeof(dlevent_t)))==NULL) { ! 448: errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(dlevent_t)); ! 449: continue; } ! 450: memset(dlevent[0],0,sizeof(dlevent_t)); ! 451: strcpy(dlevent[0]->ext,"ZIP"); ! 452: strcpy(dlevent[0]->cmd,"%!pkzip -z %f " ! 453: "< ..\\text\\zipmsg.txt"); ! 454: strcpy(dlevent[0]->workstr,"Adding ZIP Comment..."); } ! 455: else { ! 456: ! 457: for(j=total_dlevents;j>i;j--) ! 458: dlevent[j]=dlevent[j-1]; ! 459: if((dlevent[i]=(dlevent_t *)MALLOC( ! 460: sizeof(dlevent_t)))==NULL) { ! 461: errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(dlevent_t)); ! 462: continue; } ! 463: *dlevent[i]=*dlevent[i+1]; } ! 464: total_dlevents++; ! 465: changes=1; ! 466: continue; } ! 467: if((i&MSK_ON)==MSK_GET) { ! 468: i&=MSK_OFF; ! 469: savdlevent=*dlevent[i]; ! 470: continue; } ! 471: if((i&MSK_ON)==MSK_PUT) { ! 472: i&=MSK_OFF; ! 473: *dlevent[i]=savdlevent; ! 474: changes=1; ! 475: continue; } ! 476: done=0; ! 477: k=0; ! 478: while(!done) { ! 479: j=0; ! 480: sprintf(opt[j++],"%-22.22s%s","File Extension" ! 481: ,dlevent[i]->ext); ! 482: sprintf(opt[j++],"%-22.22s%-40s","Command Line" ! 483: ,dlevent[i]->cmd); ! 484: sprintf(opt[j++],"%-22.22s%s","Working String" ! 485: ,dlevent[i]->workstr); ! 486: sprintf(opt[j++],"%-22.22s%s","Access Requirements" ! 487: ,dlevent[i]->ar); ! 488: opt[j][0]=0; ! 489: savnum=1; ! 490: switch(ulist(WIN_RHT|WIN_BOT|WIN_SAV|WIN_ACT,0,0,0,&k,0 ! 491: ,"Download Event",opt)) { ! 492: case -1: ! 493: done=1; ! 494: break; ! 495: case 0: ! 496: uinput(WIN_MID|WIN_SAV,0,0 ! 497: ,"Download Event Extension" ! 498: ,dlevent[i]->ext,3,K_UPPER|K_EDIT); ! 499: break; ! 500: case 1: ! 501: uinput(WIN_MID|WIN_SAV,0,0 ! 502: ,"Command Line" ! 503: ,dlevent[i]->cmd,50,K_EDIT); ! 504: break; ! 505: case 2: ! 506: uinput(WIN_MID|WIN_SAV,0,0 ! 507: ,"Working String" ! 508: ,dlevent[i]->workstr,40,K_EDIT|K_MSG); ! 509: break; ! 510: case 3: ! 511: savnum=2; ! 512: sprintf(str,"Download Event %s",dlevent[i]->ext); ! 513: getar(str,dlevent[i]->ar); ! 514: break; } } } ! 515: break; ! 516: case 10: /* Extractable file types */ ! 517: dflt=bar=0; ! 518: while(1) { ! 519: for(i=0;i<total_fextrs && i<MAX_OPTS;i++) ! 520: sprintf(opt[i],"%-3.3s %-40s" ! 521: ,fextr[i]->ext,fextr[i]->cmd); ! 522: opt[i][0]=0; ! 523: i=WIN_ACT|WIN_SAV; /* save cause size can change */ ! 524: if(total_fextrs<MAX_OPTS) ! 525: i|=WIN_INS; ! 526: if(total_fextrs) ! 527: i|=WIN_DEL|WIN_GET; ! 528: if(savfextr.cmd[0]) ! 529: i|=WIN_PUT; ! 530: savnum=0; ! 531: SETHELP(WHERE); ! 532: /* ! 533: &Extractable File Types:& ! 534: ! 535: This is a list of archive file types that can be extracted to the temp ! 536: directory by an external program. The file types are specified by their ! 537: extension. For each file type you must specify the command line used to ! 538: extract the file(s). ! 539: */ ! 540: i=ulist(i,0,0,50,&dflt,&bar,"Extractable File Types",opt); ! 541: if(i==-1) ! 542: break; ! 543: if((i&MSK_ON)==MSK_DEL) { ! 544: i&=MSK_OFF; ! 545: FREE(fextr[i]); ! 546: total_fextrs--; ! 547: while(i<total_fextrs) { ! 548: fextr[i]=fextr[i+1]; ! 549: i++; } ! 550: changes=1; ! 551: continue; } ! 552: if((i&MSK_ON)==MSK_INS) { ! 553: i&=MSK_OFF; ! 554: if((fextr=(fextr_t **)REALLOC(fextr ! 555: ,sizeof(fextr_t *)*(total_fextrs+1)))==NULL) { ! 556: errormsg(WHERE,ERR_ALLOC,nulstr,total_fextrs+1); ! 557: total_fextrs=0; ! 558: bail(1); ! 559: continue; } ! 560: if(!total_fextrs) { ! 561: if((fextr[0]=(fextr_t *)MALLOC( ! 562: sizeof(fextr_t)))==NULL) { ! 563: errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(fextr_t)); ! 564: continue; } ! 565: memset(fextr[0],0,sizeof(fextr_t)); ! 566: strcpy(fextr[0]->ext,"ZIP"); ! 567: strcpy(fextr[0]->cmd,"%!pkunzip -o %f %g %s"); } ! 568: else { ! 569: ! 570: for(j=total_fextrs;j>i;j--) ! 571: fextr[j]=fextr[j-1]; ! 572: if((fextr[i]=(fextr_t *)MALLOC( ! 573: sizeof(fextr_t)))==NULL) { ! 574: errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(fextr_t)); ! 575: continue; } ! 576: *fextr[i]=*fextr[i+1]; } ! 577: total_fextrs++; ! 578: changes=1; ! 579: continue; } ! 580: if((i&MSK_ON)==MSK_GET) { ! 581: i&=MSK_OFF; ! 582: savfextr=*fextr[i]; ! 583: continue; } ! 584: if((i&MSK_ON)==MSK_PUT) { ! 585: i&=MSK_OFF; ! 586: *fextr[i]=savfextr; ! 587: changes=1; ! 588: continue; } ! 589: k=0; ! 590: done=0; ! 591: while(!done) { ! 592: j=0; ! 593: sprintf(opt[j++],"%-22.22s%s","File Extension" ! 594: ,fextr[i]->ext); ! 595: sprintf(opt[j++],"%-22.22s%-40s","Command Line" ! 596: ,fextr[i]->cmd); ! 597: sprintf(opt[j++],"%-22.22s%s","Access Requirements" ! 598: ,fextr[i]->ar); ! 599: opt[j][0]=0; ! 600: savnum=1; ! 601: switch(ulist(WIN_RHT|WIN_BOT|WIN_SAV|WIN_ACT,0,0,0,&k,0 ! 602: ,"Extractable File Type",opt)) { ! 603: case -1: ! 604: done=1; ! 605: break; ! 606: case 0: ! 607: uinput(WIN_MID|WIN_SAV,0,0 ! 608: ,"Extractable File Type Extension" ! 609: ,fextr[i]->ext,3,K_UPPER|K_EDIT); ! 610: break; ! 611: case 1: ! 612: uinput(WIN_MID|WIN_SAV,0,0 ! 613: ,"Command Line" ! 614: ,fextr[i]->cmd,50,K_EDIT); ! 615: break; ! 616: case 2: ! 617: savnum=2; ! 618: sprintf(str,"Extractable File Type %s" ! 619: ,fextr[i]->ext); ! 620: getar(str,fextr[i]->ar); ! 621: break; } } } ! 622: break; ! 623: case 11: /* Compressable file types */ ! 624: dflt=bar=0; ! 625: while(1) { ! 626: for(i=0;i<total_fcomps && i<MAX_OPTS;i++) ! 627: sprintf(opt[i],"%-3.3s %-40s",fcomp[i]->ext,fcomp[i]->cmd); ! 628: opt[i][0]=0; ! 629: i=WIN_ACT|WIN_SAV; /* save cause size can change */ ! 630: if(total_fcomps<MAX_OPTS) ! 631: i|=WIN_INS; ! 632: if(total_fcomps) ! 633: i|=WIN_DEL|WIN_GET; ! 634: if(savfcomp.cmd[0]) ! 635: i|=WIN_PUT; ! 636: savnum=0; ! 637: SETHELP(WHERE); ! 638: /* ! 639: &Compressable File Types:& ! 640: ! 641: This is a list of compression methods available for different file types. ! 642: These will be used for items such as creating QWK packets, temporary ! 643: files from the transfer section, and more. ! 644: */ ! 645: i=ulist(i,0,0,50,&dflt,&bar,"Compressable File Types",opt); ! 646: if(i==-1) ! 647: break; ! 648: if((i&MSK_ON)==MSK_DEL) { ! 649: i&=MSK_OFF; ! 650: FREE(fcomp[i]); ! 651: total_fcomps--; ! 652: while(i<total_fcomps) { ! 653: fcomp[i]=fcomp[i+1]; ! 654: i++; } ! 655: changes=1; ! 656: continue; } ! 657: if((i&MSK_ON)==MSK_INS) { ! 658: i&=MSK_OFF; ! 659: if((fcomp=(fcomp_t **)REALLOC(fcomp ! 660: ,sizeof(fcomp_t *)*(total_fcomps+1)))==NULL) { ! 661: errormsg(WHERE,ERR_ALLOC,nulstr,total_fcomps+1); ! 662: total_fcomps=0; ! 663: bail(1); ! 664: continue; } ! 665: if(!total_fcomps) { ! 666: if((fcomp[0]=(fcomp_t *)MALLOC( ! 667: sizeof(fcomp_t)))==NULL) { ! 668: errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(fcomp_t)); ! 669: continue; } ! 670: memset(fcomp[0],0,sizeof(fcomp_t)); ! 671: strcpy(fcomp[0]->ext,"ZIP"); ! 672: strcpy(fcomp[0]->cmd,"%!pkzip %f %s"); } ! 673: else { ! 674: for(j=total_fcomps;j>i;j--) ! 675: fcomp[j]=fcomp[j-1]; ! 676: if((fcomp[i]=(fcomp_t *)MALLOC( ! 677: sizeof(fcomp_t)))==NULL) { ! 678: errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(fcomp_t)); ! 679: continue; } ! 680: *fcomp[i]=*fcomp[i+1]; } ! 681: total_fcomps++; ! 682: changes=1; ! 683: continue; } ! 684: if((i&MSK_ON)==MSK_GET) { ! 685: i&=MSK_OFF; ! 686: savfcomp=*fcomp[i]; ! 687: continue; } ! 688: if((i&MSK_ON)==MSK_PUT) { ! 689: i&=MSK_OFF; ! 690: *fcomp[i]=savfcomp; ! 691: changes=1; ! 692: continue; } ! 693: k=0; ! 694: done=0; ! 695: while(!done) { ! 696: j=0; ! 697: sprintf(opt[j++],"%-22.22s%s","File Extension" ! 698: ,fcomp[i]->ext); ! 699: sprintf(opt[j++],"%-22.22s%-40s","Command Line" ! 700: ,fcomp[i]->cmd); ! 701: sprintf(opt[j++],"%-22.22s%s","Access Requirements" ! 702: ,fcomp[i]->ar); ! 703: opt[j][0]=0; ! 704: savnum=1; ! 705: switch(ulist(WIN_RHT|WIN_BOT|WIN_SAV|WIN_ACT,0,0,0,&k,0 ! 706: ,"Compressable File Type",opt)) { ! 707: case -1: ! 708: done=1; ! 709: break; ! 710: case 0: ! 711: uinput(WIN_MID|WIN_SAV,0,0 ! 712: ,"Compressable File Type Extension" ! 713: ,fcomp[i]->ext,3,K_UPPER|K_EDIT); ! 714: break; ! 715: case 1: ! 716: uinput(WIN_MID|WIN_SAV,0,0 ! 717: ,"Command Line" ! 718: ,fcomp[i]->cmd,50,K_EDIT); ! 719: break; ! 720: case 2: ! 721: savnum=2; ! 722: sprintf(str,"Compressable File Type %s" ! 723: ,fcomp[i]->ext); ! 724: getar(str,fcomp[i]->ar); ! 725: break; } } } ! 726: break; ! 727: case 12: /* Transfer protocols */ ! 728: dflt=bar=0; ! 729: while(1) { ! 730: for(i=0;i<total_prots && i<MAX_OPTS;i++) ! 731: sprintf(opt[i],"%c %-40s" ! 732: ,prot[i]->mnemonic,prot[i]->ulcmd); ! 733: opt[i][0]=0; ! 734: i=WIN_ACT|WIN_SAV; /* save cause size can change */ ! 735: if(total_prots<MAX_OPTS) ! 736: i|=WIN_INS; ! 737: if(total_prots) ! 738: i|=WIN_DEL|WIN_GET; ! 739: if(savprot.mnemonic) ! 740: i|=WIN_PUT; ! 741: savnum=0; ! 742: SETHELP(WHERE); ! 743: /* ! 744: &File Transfer Protocols:& ! 745: ! 746: This is a list of file transfer protocols that can be used to transfer ! 747: files either to or from a remote user. For each protocol, you can ! 748: specify the mnemonic (hot-key) to use to specify that protocol, the ! 749: command line to use for uploads, downloads, batch uploads, batch ! 750: downloads, bidirectional file transfers, and the support of DSZLOG. If ! 751: the protocol doesn't support a certain method of transfer, or you don't ! 752: wish it to be available for a certain method of transfer, leave the ! 753: command line for that method blank. Be advised, that if you add or ! 754: remove any transfer protocols, you will need to edit the protocol menus ! 755: (ULPROT, DLPROT, BATUPROT, BATDPROT, and BIPROT) in the TEXT\MENU ! 756: directory accordingly. ! 757: */ ! 758: i=ulist(i,0,0,50,&dflt,&bar,"File Transfer Protocols",opt); ! 759: if(i==-1) ! 760: break; ! 761: if((i&MSK_ON)==MSK_DEL) { ! 762: i&=MSK_OFF; ! 763: FREE(prot[i]); ! 764: total_prots--; ! 765: while(i<total_prots) { ! 766: prot[i]=prot[i+1]; ! 767: i++; } ! 768: changes=1; ! 769: continue; } ! 770: if((i&MSK_ON)==MSK_INS) { ! 771: i&=MSK_OFF; ! 772: if((prot=(prot_t **)REALLOC(prot ! 773: ,sizeof(prot_t *)*(total_prots+1)))==NULL) { ! 774: errormsg(WHERE,ERR_ALLOC,nulstr,total_prots+1); ! 775: total_prots=0; ! 776: bail(1); ! 777: continue; } ! 778: if(!total_prots) { ! 779: if((prot[0]=(prot_t *)MALLOC( ! 780: sizeof(prot_t)))==NULL) { ! 781: errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(prot_t)); ! 782: continue; } ! 783: memset(prot[0],0,sizeof(prot_t)); ! 784: prot[0]->mnemonic='Y'; ! 785: prot[0]->misc=PROT_DSZLOG; ! 786: strcpy(prot[0]->ulcmd ! 787: ,"%!dsz port %p estimate 0 %e rb %f"); ! 788: strcpy(prot[0]->dlcmd ! 789: ,"%!dsz port %p estimate 0 %e sb %f"); ! 790: strcpy(prot[0]->batulcmd ! 791: ,"%!dsz port %p estimate 0 %e rb %f"); ! 792: strcpy(prot[0]->batdlcmd ! 793: ,"%!dsz port %p estimate 0 %e sb @%f"); } ! 794: else { ! 795: ! 796: for(j=total_prots;j>i;j--) ! 797: prot[j]=prot[j-1]; ! 798: if((prot[i]=(prot_t *)MALLOC( ! 799: sizeof(prot_t)))==NULL) { ! 800: errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(prot_t)); ! 801: continue; } ! 802: *prot[i]=*prot[i+1]; } ! 803: total_prots++; ! 804: changes=1; ! 805: continue; } ! 806: if((i&MSK_ON)==MSK_GET) { ! 807: i&=MSK_OFF; ! 808: savprot=*prot[i]; ! 809: continue; } ! 810: if((i&MSK_ON)==MSK_PUT) { ! 811: i&=MSK_OFF; ! 812: *prot[i]=savprot; ! 813: changes=1; ! 814: continue; } ! 815: done=0; ! 816: k=0; ! 817: while(!done) { ! 818: j=0; ! 819: sprintf(opt[j++],"%-25.25s%c","Mnemonic (Command Key)" ! 820: ,prot[i]->mnemonic); ! 821: sprintf(opt[j++],"%-25.25s%-40s","Protocol Name" ! 822: ,prot[i]->name); ! 823: sprintf(opt[j++],"%-25.25s%-40s","Access Requirements" ! 824: ,prot[i]->ar); ! 825: sprintf(opt[j++],"%-25.25s%-40s","Upload Command Line" ! 826: ,prot[i]->ulcmd); ! 827: sprintf(opt[j++],"%-25.25s%-40s","Download Command Line" ! 828: ,prot[i]->dlcmd); ! 829: sprintf(opt[j++],"%-25.25s%-40s","Batch UL Command Line" ! 830: ,prot[i]->batulcmd); ! 831: sprintf(opt[j++],"%-25.25s%-40s","Batch DL Command Line" ! 832: ,prot[i]->batdlcmd); ! 833: sprintf(opt[j++],"%-25.25s%-40s","Bidir Command Line" ! 834: ,prot[i]->bicmd); ! 835: sprintf(opt[j++],"%-25.25s%s","Uses DSZLOG" ! 836: ,prot[i]->misc&PROT_DSZLOG ? "Yes":"No"); ! 837: opt[j][0]=0; ! 838: savnum=1; ! 839: switch(ulist(WIN_RHT|WIN_BOT|WIN_SAV|WIN_ACT,0,0,0,&k,0 ! 840: ,"File Transfer Protocol",opt)) { ! 841: case -1: ! 842: done=1; ! 843: break; ! 844: case 0: ! 845: str[0]=prot[i]->mnemonic; ! 846: str[1]=0; ! 847: uinput(WIN_MID|WIN_SAV,0,0 ! 848: ,"Mnemonic (Command Key)" ! 849: ,str,1,K_UPPER|K_EDIT); ! 850: if(str[0]) ! 851: prot[i]->mnemonic=str[0]; ! 852: break; ! 853: case 1: ! 854: uinput(WIN_MID|WIN_SAV,0,0 ! 855: ,"Protocol Name" ! 856: ,prot[i]->name,25,K_EDIT); ! 857: break; ! 858: case 2: ! 859: savnum=2; ! 860: sprintf(str,"Protocol %s",prot[i]->name); ! 861: getar(str,prot[i]->ar); ! 862: break; ! 863: case 3: ! 864: uinput(WIN_MID|WIN_SAV,0,0 ! 865: ,"Upload Command" ! 866: ,prot[i]->ulcmd,50,K_EDIT); ! 867: break; ! 868: case 4: ! 869: uinput(WIN_MID|WIN_SAV,0,0 ! 870: ,"Download Command" ! 871: ,prot[i]->dlcmd,50,K_EDIT); ! 872: break; ! 873: case 5: ! 874: uinput(WIN_MID|WIN_SAV,0,0 ! 875: ,"Batch UL Command" ! 876: ,prot[i]->batulcmd,50,K_EDIT); ! 877: break; ! 878: case 6: ! 879: uinput(WIN_MID|WIN_SAV,0,0 ! 880: ,"Batch DL Command" ! 881: ,prot[i]->batdlcmd,50,K_EDIT); ! 882: break; ! 883: case 7: ! 884: uinput(WIN_MID|WIN_SAV,0,0 ! 885: ,"Bi-dir Command" ! 886: ,prot[i]->bicmd,50,K_EDIT); ! 887: break; ! 888: case 8: ! 889: strcpy(opt[0],"Yes"); ! 890: strcpy(opt[1],"No"); ! 891: opt[2][0]=0; ! 892: l=0; ! 893: savnum=2; ! 894: l=ulist(WIN_MID|WIN_SAV,0,0,0,&l,0 ! 895: ,"Uses DSZLOG",opt); ! 896: if(!l && !(prot[i]->misc&PROT_DSZLOG)) { ! 897: prot[i]->misc|=PROT_DSZLOG; ! 898: changes=1; } ! 899: else if(l==1 && prot[i]->misc&PROT_DSZLOG) { ! 900: prot[i]->misc&=~PROT_DSZLOG; ! 901: changes=1; } ! 902: break; } } } ! 903: break; ! 904: case 13: /* Alternate file paths */ ! 905: dflt=bar=0; ! 906: while(1) { ! 907: for(i=0;i<altpaths;i++) ! 908: sprintf(opt[i],"%3d: %-40s",i+1,altpath[i]); ! 909: opt[i][0]=0; ! 910: i=WIN_ACT|WIN_SAV; /* save cause size can change */ ! 911: if((int)altpaths<MAX_OPTS) ! 912: i|=WIN_INS; ! 913: if(altpaths) ! 914: i|=WIN_DEL|WIN_GET; ! 915: if(savaltpath[0]) ! 916: i|=WIN_PUT; ! 917: savnum=0; ! 918: SETHELP(WHERE); ! 919: /* ! 920: &Alternate File Paths:& ! 921: ! 922: This option allows the sysop to add and configure alternate file paths ! 923: for files stored on drives and directories other than the configured ! 924: storage path for a file directory. This command is useful for those who ! 925: have file directories where they wish to have files listed from ! 926: multiple CD-ROMs or hard disks. ! 927: */ ! 928: i=ulist(i,0,0,50,&dflt,&bar,"Alternate File Paths",opt); ! 929: if(i==-1) ! 930: break; ! 931: if((i&MSK_ON)==MSK_DEL) { ! 932: i&=MSK_OFF; ! 933: FREE(altpath[i]); ! 934: altpaths--; ! 935: while(i<altpaths) { ! 936: altpath[i]=altpath[i+1]; ! 937: i++; } ! 938: changes=1; ! 939: continue; } ! 940: if((i&MSK_ON)==MSK_INS) { ! 941: i&=MSK_OFF; ! 942: if((altpath=(char **)REALLOC(altpath ! 943: ,sizeof(char *)*(altpaths+1)))==NULL) { ! 944: errormsg(WHERE,ERR_ALLOC,nulstr,altpaths+1); ! 945: altpaths=0; ! 946: bail(1); ! 947: continue; } ! 948: if(!altpaths) { ! 949: if((altpath[0]=(char *)MALLOC(LEN_DIR+1))==NULL) { ! 950: errormsg(WHERE,ERR_ALLOC,nulstr,LEN_DIR+1); ! 951: continue; } ! 952: memset(altpath[0],0,LEN_DIR+1); } ! 953: else { ! 954: for(j=altpaths;j>i;j--) ! 955: altpath[j]=altpath[j-1]; ! 956: if((altpath[i]=(char *)MALLOC(LEN_DIR+1))==NULL) { ! 957: errormsg(WHERE,ERR_ALLOC,nulstr,LEN_DIR+1); ! 958: continue; } ! 959: memcpy(altpath[i],altpath[i+1],LEN_DIR+1); } ! 960: altpaths++; ! 961: changes=1; ! 962: continue; } ! 963: if((i&MSK_ON)==MSK_GET) { ! 964: i&=MSK_OFF; ! 965: memcpy(savaltpath,altpath[i],LEN_DIR+1); ! 966: continue; } ! 967: if((i&MSK_ON)==MSK_PUT) { ! 968: i&=MSK_OFF; ! 969: memcpy(altpath[i],savaltpath,LEN_DIR+1); ! 970: changes=1; ! 971: continue; } ! 972: sprintf(str,"Path %d",i+1); ! 973: uinput(WIN_MID|WIN_SAV,0,0,str,altpath[i],50,K_UPPER|K_EDIT); } ! 974: break; } } ! 975: } ! 976:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.