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