|
|
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.