|
|
1.1 root 1: #line 1 "SCFGLIB1.C"
2:
3: /* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
4:
5: #include "sbbs.h"
6: #include "scfglib.h"
7:
8: void prep_path(char *path)
9: {
10: char str[LEN_DIR*2];
11: int i;
12:
13: if(!path[0])
14: return;
15: if(path[0]!='\\' && path[1]!=':') /* Relative to NODE directory */
16: sprintf(str,"%s%s",node_dir,path);
17: else
18: strcpy(str,path);
19: i=strlen(str);
20: if(str[i-1]!=':' && str[i-1]!='\\')
21: strcat(str,"\\");
22: strcat(str,"."); // Change C: to C:. and C:\SBBS\ to C:\SBBS\.
23: _fullpath(path,str,LEN_DIR+1); // Change C:\SBBS\NODE1\..\EXEC to C:\SBBS\EXEC
24: i=strlen(path);
25: if(i && path[i-1]!='\\')
26: strcat(path,"\\");
27: }
28:
29: char *get_alloc(long *offset, char *outstr, int maxlen, FILE *instream)
30: {
31:
32: #ifdef SCFG
33: fread(outstr,1,maxlen+1,instream);
34: (*offset)+=maxlen+1;
35: #else
36: char str[257];
37:
38: fread(str,1,maxlen+1,instream);
39: // lprintf("%s %d %p\r\n",__FILE__,__LINE__,offset);
40: (*offset)+=maxlen+1; // this line was commented out (04/12/97) why?
41: if(!str[0]) /* Save memory */
42: return(scfgnulstr);
43: if((outstr=(char *)MALLOC(strlen(str)+1))==NULL)
44: return(NULL);
45: strcpy(outstr,str);
46: #endif
47:
48: return(outstr);
49: }
50:
51: #ifdef SCFG /* SCFG allocate max length */
52: #define readline_alloc(l,s,m,i) readline(l,s,m,i)
53: #else
54: char *readline_alloc(long *offset, char *outstr, int maxline
55: , FILE *instream);
56: #define readline_alloc(l,s,m,i) s=readline_alloc(l,s,m,i)
57: #define get_alloc(o,s,l,i) s=get_alloc(o,s,l,i)
58: #endif
59:
60: /***********************************************************/
61: /* These functions are called from here and must be linked */
62: /***********************************************************/
63: /***
64: nopen()
65: truncsp()
66: ***/
67:
68: void allocerr(read_cfg_text_t txt, long offset, char *fname, uint size)
69: {
70: lprintf(txt.error,offset,fname);
71: lprintf(txt.allocerr,size);
72: bail(1);
73: }
74:
75: #ifndef NO_NODE_CFG
76:
77: /****************************************************************************/
78: /* Reads in NODE.CNF and initializes the associated variables */
79: /****************************************************************************/
80: void read_node_cfg(read_cfg_text_t txt)
81: {
82: char c,str[256],cmd[64],fname[13],*p;
83: int i;
84: short n;
85: long offset=0;
86: FILE *instream;
87:
88: strcpy(fname,"NODE.CNF");
89: sprintf(str,"%s%s",node_dir,fname);
90: if((instream=fnopen(&i,str,O_RDONLY))==NULL) {
91: lprintf(txt.openerr,str);
92: #ifdef SBBS
93: lprintf("\r\nSBBS must be run from a NODE directory (e.g. ");
94: lclatr(WHITE);
95: lprintf("C:\\SBBS\\NODE1");
96: lclatr(LIGHTGRAY);
97: lprintf(").\r\n");
98: #endif
99: bail(1); }
100:
101: lprintf(txt.reading,fname);
102: get_int(node_num,instream);
103: if(!node_num) {
104: lprintf(txt.error,offset,fname);
105: lprintf("Node number must be non-zero\r\n");
106: bail(1); }
107: get_str(node_name,instream);
108: get_str(node_phone,instream);
109: get_str(node_comspec,instream);
110: if(!node_comspec[0])
111: strcpy(node_comspec,"C:\\OS2\\MDOS\\COMMAND.COM");
112: get_int(node_misc,instream);
113: get_int(node_ivt,instream);
114: get_int(node_swap,instream);
115: get_str(node_swapdir,instream);
116: #ifndef SCFG
117: if(!node_swapdir[0])
118: strcpy(node_swapdir,node_dir);
119: else
120: prep_path(node_swapdir);
121: #endif
122: get_int(node_valuser,instream);
123: get_int(node_minbps,instream);
124: #ifdef SCFG
125: get_str(node_ar,instream);
126: #else
127: fread(str,1,LEN_ARSTR+1,instream);
128: offset+=LEN_ARSTR+1;
129: node_ar=arstr(0,str);
130: #endif
131: get_int(node_dollars_per_call,instream);
132: get_str(node_editor,instream);
133: get_str(node_viewer,instream);
134: get_str(node_daily,instream);
135: get_int(c,instream);
136: if(c) node_scrnlen=c;
137: get_int(node_scrnblank,instream);
138: get_str(ctrl_dir,instream); /* ctrl directory */
139: get_str(text_dir,instream); /* text directory */
140: get_str(temp_dir,instream); /* temp directory */
141: if(!temp_dir[0])
142: strcpy(temp_dir,"TEMP");
143:
144: #ifndef SCFG
145: prep_path(ctrl_dir);
146: prep_path(text_dir);
147: prep_path(temp_dir);
148: #endif
149:
150: for(i=0;i<10;i++) { /* WFC 0-9 DOS commands */
151: get_alloc(&offset,wfc_cmd[i],LEN_CMD,instream); }
152: for(i=0;i<12;i++) { /* WFC F1-F12 shrinking DOS cmds */
153: get_alloc(&offset,wfc_scmd[i],LEN_CMD,instream); }
154: get_str(mdm_hang,instream);
155: get_int(node_sem_check,instream);
156: if(!node_sem_check) node_sem_check=60;
157: get_int(node_stat_check,instream);
158: if(!node_stat_check) node_stat_check=10;
159: get_str(scfg_cmd,instream);
160: if(!scfg_cmd[0])
161: strcpy(scfg_cmd,"%!scfg %k");
162: get_int(sec_warn,instream);
163: if(!sec_warn)
164: sec_warn=180;
165: get_int(sec_hangup,instream);
166: if(!sec_hangup)
167: sec_hangup=300;
168: for(i=0;i<188;i++) { /* Unused - initialized to NULL */
169: fread(&n,1,2,instream);
170: offset+=2; }
171: for(i=0;i<256;i++) { /* Unused - initialized to 0xff */
172: fread(&n,1,2,instream);
173: offset+=2; }
174:
175: /***************/
176: /* Modem Stuff */
177: /***************/
178:
179: get_int(com_port,instream);
180: get_int(com_irq,instream);
181: get_int(com_base,instream);
182: get_int(com_rate,instream);
183: get_int(mdm_misc,instream);
184: get_str(mdm_init,instream);
185: get_str(mdm_spec,instream);
186: get_str(mdm_term,instream);
187: get_str(mdm_dial,instream);
188: get_str(mdm_offh,instream);
189: get_str(mdm_answ,instream);
190: get_int(mdm_reinit,instream);
191: get_int(mdm_ansdelay,instream);
192: get_int(mdm_rings,instream);
193:
194: get_int(mdm_results,instream);
195:
196: if(mdm_results) {
197: if((mdm_result=(mdm_result_t *)MALLOC(sizeof(mdm_result_t)*mdm_results))
198: ==NULL)
199: allocerr(txt,offset,fname,sizeof(mdm_result_t *)*mdm_results); }
200: else
201: mdm_result=NULL;
202:
203: for(i=0;i<mdm_results;i++) {
204: if(feof(instream)) break;
205: get_int(mdm_result[i].code,instream);
206: get_int(mdm_result[i].rate,instream);
207: get_int(mdm_result[i].cps,instream);
208: get_alloc(&offset,mdm_result[i].str,LEN_MODEM,instream); }
209: mdm_results=i;
210: fclose(instream);
211: lprintf(txt.readit,fname);
212: }
213:
214: #endif
215:
216: #ifndef NO_MAIN_CFG
217:
218: /****************************************************************************/
219: /* Reads in MAIN.CNF and initializes the associated variables */
220: /****************************************************************************/
221: void read_main_cfg(read_cfg_text_t txt)
222: {
223: char str[256],fname[13],*p,c;
224: int file;
225: short i,j,n;
226: long offset=0;
227: FILE *instream;
228:
229: strcpy(fname,"MAIN.CNF");
230: sprintf(str,"%s%s",ctrl_dir,fname);
231: if((instream=fnopen(&file,str,O_RDONLY))==NULL) {
232: lprintf(txt.openerr,str);
233: bail(1); }
234:
235: lprintf(txt.reading,fname);
236: get_str(sys_name,instream);
237: get_str(sys_id,instream);
238: get_str(sys_location,instream);
239: get_str(sys_phonefmt,instream);
240: get_str(sys_op,instream);
241: get_str(sys_guru,instream);
242: get_str(sys_pass,instream);
243: get_int(sys_nodes,instream);
244:
245: if(!sys_nodes || sys_nodes<node_num || sys_nodes>MAX_NODES) {
246: lprintf(txt.error,offset,fname);
247: if(!sys_nodes)
248: lprintf("Total nodes on system must be non-zero.\r\n");
249: else if(sys_nodes>MAX_NODES)
250: lprintf("Total nodes exceeds %u.\r\n",MAX_NODES);
251: else
252: lprintf("Total nodes (%u) < node number in NODE.CNF (%u)\r\n"
253: ,sys_nodes,node_num);
254: bail(1); }
255:
256: if((node_path=(char **)MALLOC(sizeof(char *)*sys_nodes))==NULL)
257: allocerr(txt,offset,fname,sizeof(char *)*sys_nodes);
258:
259: for(i=0;i<sys_nodes;i++) {
260: if(feof(instream)) break;
261: fread(str,LEN_DIR+1,1,instream);
262: offset+=LEN_DIR+1;
263: if((node_path[i]=(char *)MALLOC(strlen(str)+1))==NULL)
264: allocerr(txt,offset,fname,strlen(str)+1);
265: strcpy(node_path[i],str); }
266:
267: get_str(data_dir,instream); /* data directory */
268: get_str(exec_dir,instream); /* exec directory */
269:
270: #ifndef SCFG
271: prep_path(data_dir);
272: prep_path(exec_dir);
273: #endif
274:
275: get_str(sys_logon,instream);
276: get_str(sys_logout,instream);
277: get_str(sys_daily,instream);
278: get_int(sys_timezone,instream);
279: get_int(sys_misc,instream);
280: get_int(sys_lastnode,instream);
281: get_int(sys_autonode,instream);
282: get_int(uq,instream);
283: get_int(sys_pwdays,instream);
284: get_int(sys_deldays,instream);
285: get_int(sys_exp_warn,instream); /* Days left till expiration warning */
286: get_int(sys_autodel,instream);
287: get_int(sys_def_stat,instream); /* default status line */
288:
289: #ifdef SCFG
290: get_str(sys_chat_ar,instream);
291: #else
292: fread(str,1,LEN_ARSTR+1,instream);
293: offset+=LEN_ARSTR+1;
294: sys_chat_ar=arstr(0,str);
295: #endif
296:
297: get_int(cdt_min_value,instream);
298: get_int(max_minutes,instream);
299: get_int(cdt_per_dollar,instream);
300: get_str(new_pass,instream);
301: get_str(new_magic,instream);
302: get_str(new_sif,instream);
303: get_str(new_sof,instream);
304: if(!new_sof[0]) /* if output not specified, use input file */
305: strcpy(new_sof,new_sif);
306:
307: /*********************/
308: /* New User Settings */
309: /*********************/
310:
311: get_int(new_level,instream);
312: get_int(new_flags1,instream);
313: get_int(new_flags2,instream);
314: get_int(new_flags3,instream);
315: get_int(new_flags4,instream);
316: get_int(new_exempt,instream);
317: get_int(new_rest,instream);
318: get_int(new_cdt,instream);
319: get_int(new_min,instream);
320: get_str(new_xedit,instream);
321: get_int(new_expire,instream);
322: get_int(new_shell,instream);
323: get_int(new_misc,instream);
324: get_int(new_prot,instream);
325: if(new_prot<SP)
326: new_prot=SP;
327: get_int(c,instream);
328: for(i=0;i<7;i++)
329: get_int(n,instream);
330:
331: /*************************/
332: /* Expired User Settings */
333: /*************************/
334:
335: get_int(expired_level,instream);
336: get_int(expired_flags1,instream);
337: get_int(expired_flags2,instream);
338: get_int(expired_flags3,instream);
339: get_int(expired_flags4,instream);
340: get_int(expired_exempt,instream);
341: get_int(expired_rest,instream);
342:
343: get_str(logon_mod,instream);
344: get_str(logoff_mod,instream);
345: get_str(newuser_mod,instream);
346: get_str(login_mod,instream);
347: if(!login_mod[0]) strcpy(login_mod,"LOGIN");
348: get_str(logout_mod,instream);
349: get_str(sync_mod,instream);
350: get_str(expire_mod,instream);
351: get_int(c,instream);
352:
353: for(i=0;i<224;i++) /* unused - initialized to NULL */
354: get_int(n,instream);
355: for(i=0;i<256;i++) /* unused - initialized to 0xff */
356: get_int(n,instream);
357:
358: /*******************/
359: /* Validation Sets */
360: /*******************/
361:
362: for(i=0;i<10 && !feof(instream);i++) {
363: get_int(val_level[i],instream);
364: get_int(val_expire[i],instream);
365: get_int(val_flags1[i],instream);
366: get_int(val_flags2[i],instream);
367: get_int(val_flags3[i],instream);
368: get_int(val_flags4[i],instream);
369: get_int(val_cdt[i],instream);
370: get_int(val_exempt[i],instream);
371: get_int(val_rest[i],instream);
372: for(j=0;j<8;j++)
373: get_int(n,instream); }
374:
375: /***************************/
376: /* Security Level Settings */
377: /***************************/
378:
379: for(i=0;i<100 && !feof(instream);i++) {
380: get_int(level_timeperday[i],instream);
381: if(level_timeperday[i]>500)
382: level_timeperday[i]=500;
383: get_int(level_timepercall[i],instream);
384: if(level_timepercall[i]>500)
385: level_timepercall[i]=500;
386: get_int(level_callsperday[i],instream);
387: get_int(level_freecdtperday[i],instream);
388: get_int(level_linespermsg[i],instream);
389: get_int(level_postsperday[i],instream);
390: get_int(level_emailperday[i],instream);
391: get_int(level_misc[i],instream);
392: get_int(level_expireto[i],instream);
393: get_int(c,instream);
394: for(j=0;j<5;j++)
395: get_int(n,instream); }
396: if(i!=100) {
397: lprintf(txt.error,offset,fname);
398: lprintf("Insufficient User Level Information\r\n"
399: "%d user levels read, 100 needed.\r\n",i);
400: bail(1); }
401:
402: get_int(total_shells,instream);
403: #ifdef SBBS
404: if(!total_shells) {
405: lprintf(txt.error,offset,fname);
406: lprintf("At least one command shell must be configured.\r\n");
407: bail(1); }
408: #endif
409:
410: if(total_shells) {
411: if((shell=(shell_t **)MALLOC(sizeof(shell_t *)*total_shells))==NULL)
412: allocerr(txt,offset,fname,sizeof(shell_t *)*total_shells); }
413: else
414: shell=NULL;
415:
416: for(i=0;i<total_shells;i++) {
417: if(feof(instream)) break;
418: if((shell[i]=(shell_t *)MALLOC(sizeof(shell_t)))==NULL)
419: allocerr(txt,offset,fname,sizeof(shell_t));
420: memset(shell[i],0,sizeof(shell_t));
421:
422: get_alloc(&offset,shell[i]->name,40,instream);
423: get_str(shell[i]->code,instream);
424: #ifdef SCFG
425: get_str(shell[i]->ar,instream);
426: #else
427: fread(str,1,LEN_ARSTR+1,instream);
428: offset+=LEN_ARSTR+1;
429: shell[i]->ar=arstr(0,str);
430: #endif
431: get_int(shell[i]->misc,instream);
432: for(j=0;j<8;j++)
433: get_int(n,instream);
434: }
435: total_shells=i;
436:
437:
438: fclose(instream);
439: lprintf(txt.readit,fname);
440: }
441:
442: #endif
443:
444: #ifndef NO_MSGS_CFG
445:
446:
447: /****************************************************************************/
448: /* Reads in MSGS.CNF and initializes the associated variables */
449: /****************************************************************************/
450: void read_msgs_cfg(read_cfg_text_t txt)
451: {
452: char str[256],fname[13],tmp[128],c;
453: int file;
454: short i,j,k,l,n;
455: long offset=0;
456: FILE *instream;
457:
458: #ifndef SCFG
459:
460: sprintf(data_dir_subs,"%sSUBS\\",data_dir);
461: prep_path(data_dir_subs);
462:
463: #endif
464:
465: strcpy(fname,"MSGS.CNF");
466: sprintf(str,"%s%s",ctrl_dir,fname);
467: if((instream=fnopen(&file,str,O_RDONLY))==NULL) {
468: lprintf(txt.openerr,str);
469: bail(1); }
470:
471: lprintf(txt.reading,fname);
472:
473: /*************************/
474: /* General Message Stuff */
475: /*************************/
476:
477: get_int(max_qwkmsgs,instream);
478: get_int(mail_maxcrcs,instream);
479: get_int(mail_maxage,instream);
480: #ifdef SCFG
481: get_str(preqwk_ar,instream);
482: #else
483: fread(str,1,LEN_ARSTR+1,instream);
484: offset+=LEN_ARSTR+1;
485: preqwk_ar=arstr(0,str);
486: #endif
487: get_int(smb_retry_time,instream); /* odd byte */
488: if(!smb_retry_time)
489: smb_retry_time=30;
490: for(i=0;i<235;i++) /* NULL */
491: get_int(n,instream);
492: for(i=0;i<256;i++) /* 0xff */
493: get_int(n,instream);
494:
495:
496: /******************/
497: /* Message Groups */
498: /******************/
499:
500: get_int(total_grps,instream);
501:
502:
503: if(total_grps) {
504: if((grp=(grp_t **)MALLOC(sizeof(grp_t *)*total_grps))==NULL)
505: allocerr(txt,offset,fname,sizeof(grp_t *)*total_grps); }
506: else
507: grp=NULL;
508:
509:
510: #ifdef SBBS
511:
512: if(total_grps) {
513:
514: if((cursub=(uint *)MALLOC(sizeof(uint)*total_grps))==NULL)
515: allocerr(txt,offset,fname,sizeof(uint)*total_grps);
516:
517: if((usrgrp=(uint *)MALLOC(sizeof(uint)*total_grps))==NULL)
518: allocerr(txt,offset,fname,sizeof(uint)*total_grps);
519:
520: if((usrsubs=(uint *)MALLOC(sizeof(uint)*total_grps))==NULL)
521: allocerr(txt,offset,fname,sizeof(uint)*total_grps);
522:
523: if((usrsub=(uint **)MALLOC(sizeof(uint *)*total_grps))==NULL)
524: allocerr(txt,offset,fname,sizeof(uint *)*total_grps); }
525:
526: #endif
527:
528: for(i=0;i<total_grps;i++) {
529:
530: if(feof(instream)) break;
531: if((grp[i]=(grp_t *)MALLOC(sizeof(grp_t)))==NULL)
532: allocerr(txt,offset,fname,sizeof(grp_t));
533: memset(grp[i],0,sizeof(grp_t));
534:
535: get_alloc(&offset,grp[i]->lname,LEN_GLNAME,instream);
536: get_alloc(&offset,grp[i]->sname,LEN_GSNAME,instream);
537:
538: #if !defined(SCFG) && defined(SAVE_MEMORY) /* Save memory */
539: if(!strcmp(grp[i]->lname,grp[i]->sname) && grp[i]->sname!=scfgnulstr) {
540: FREE(grp[i]->sname);
541: grp[i]->sname=grp[i]->lname; }
542: #endif
543:
544: #ifdef SCFG
545: get_str(grp[i]->ar,instream);
546: #else
547: fread(str,1,LEN_ARSTR+1,instream);
548: offset+=LEN_ARSTR+1;
549: grp[i]->ar=arstr(0,str);
550: #endif
551: for(j=0;j<48;j++)
552: get_int(n,instream);
553: }
554: total_grps=i;
555:
556: /**********************/
557: /* Message Sub-boards */
558: /**********************/
559:
560: get_int(total_subs,instream);
561:
562: if(total_subs) {
563: if((sub=(sub_t **)MALLOC(sizeof(sub_t *)*total_subs))==NULL)
564: allocerr(txt,offset,fname,sizeof(sub_t *)*total_subs); }
565: else
566: sub=NULL;
567:
568: #ifdef SBBS
569:
570: if(total_subs) {
571:
572: if((sub_misc=(char *)MALLOC(sizeof(char)*total_subs))==NULL)
573: allocerr(txt,offset,fname,sizeof(char)*total_subs);
574:
575: if((sub_ptr=(ulong *)MALLOC(sizeof(ulong)*total_subs))==NULL)
576: allocerr(txt,offset,fname,sizeof(ulong)*total_subs);
577:
578: if((sub_last=(ulong *)MALLOC(sizeof(ulong)*total_subs))==NULL)
579: allocerr(txt,offset,fname,sizeof(ulong)*total_subs); }
580:
581: #endif
582:
583: for(i=0;i<total_subs;i++) {
584: if(feof(instream)) break;
585: if((sub[i]=(sub_t *)MALLOC(sizeof(sub_t)))==NULL)
586: allocerr(txt,offset,fname,sizeof(sub_t));
587: memset(sub[i],0,sizeof(sub_t));
588:
589: get_int(sub[i]->grp,instream);
590: get_alloc(&offset,sub[i]->lname,LEN_SLNAME,instream);
591: get_alloc(&offset,sub[i]->sname,LEN_SSNAME,instream);
592:
593: #if !defined(SCFG) && defined(SAVE_MEMORY) /* Save memory */
594: if(!strcmp(sub[i]->lname,sub[i]->sname) && sub[i]->sname!=scfgnulstr) {
595: FREE(sub[i]->sname);
596: sub[i]->sname=sub[i]->lname; }
597: #endif
598:
599: get_alloc(&offset,sub[i]->qwkname,10,instream);
600:
601: #if !defined(SCFG) && defined(SAVE_MEMORY) /* Save memory */
602: if(!strcmp(sub[i]->qwkname,sub[i]->sname) && sub[i]->qwkname!=scfgnulstr) {
603: FREE(sub[i]->qwkname);
604: sub[i]->qwkname=sub[i]->sname; }
605: #endif
606:
607: get_str(sub[i]->code,instream);
608:
609: #ifdef SCFG
610: get_str(sub[i]->data_dir,instream);
611: #else
612: fread(str,LEN_DIR+1,1,instream); /* substitute data dir */
613: offset+=LEN_DIR+1;
614: if(str[0]) {
615: prep_path(str);
616: if((sub[i]->data_dir=(char *)MALLOC(strlen(str)+1))==NULL)
617: allocerr(txt,offset,fname,strlen(str)+1);
618: strcpy(sub[i]->data_dir,str); }
619: else
620: sub[i]->data_dir=data_dir_subs;
621: #endif
622:
623:
624: #ifdef SCFG
625: get_str(sub[i]->ar,instream);
626: get_str(sub[i]->read_ar,instream);
627: get_str(sub[i]->post_ar,instream);
628: get_str(sub[i]->op_ar,instream);
629: #else
630: fread(str,1,LEN_ARSTR+1,instream);
631: offset+=LEN_ARSTR+1;
632: sub[i]->ar=arstr(0,str);
633: fread(str,1,LEN_ARSTR+1,instream);
634: offset+=LEN_ARSTR+1;
635: sub[i]->read_ar=arstr(0,str);
636: fread(str,1,LEN_ARSTR+1,instream);
637: offset+=LEN_ARSTR+1;
638: sub[i]->post_ar=arstr(0,str);
639: fread(str,1,LEN_ARSTR+1,instream);
640: offset+=LEN_ARSTR+1;
641: sub[i]->op_ar=arstr(0,str);
642: #endif
643: get_int(sub[i]->misc,instream);
644:
645:
646: #ifdef SCFG
647: get_str(sub[i]->tagline,instream);
648: #else
649: fread(str,81,1,instream); /* substitute tagline */
650: offset+=81;
651: if(str[0]) {
652: if((sub[i]->tagline=(char *)MALLOC(strlen(str)+1))==NULL)
653: allocerr(txt,offset,fname,strlen(str)+1);
654: strcpy(sub[i]->tagline,str); }
655: else
656: sub[i]->tagline=qnet_tagline;
657: #endif
658:
659: #ifdef SCFG
660: get_str(sub[i]->origline,instream);
661: #else
662: fread(str,1,51,instream); /* substitute origin line */
663: offset+=51;
664: if(str[0]) {
665: if((sub[i]->origline=(char *)MALLOC(strlen(str)+1))==NULL)
666: allocerr(txt,offset,fname,strlen(str)+1);
667: strcpy(sub[i]->origline,str); }
668: else
669: sub[i]->origline=origline;
670: #endif
671:
672: #ifdef SCFG
673: get_str(sub[i]->echomail_sem,instream);
674: #else
675: fread(str,1,LEN_DIR+1,instream); /* substitute echomail semaphore */
676: offset+=LEN_DIR+1;
677: if(str[0]) {
678: if((sub[i]->echomail_sem=(char *)MALLOC(strlen(str)+1))==NULL)
679: allocerr(txt,offset,fname,strlen(str)+1);
680: strcpy(sub[i]->echomail_sem,str); }
681: else
682: sub[i]->echomail_sem=echomail_sem;
683: #endif
684: fread(str,1,LEN_DIR+1,instream); /* substitute EchoMail path */
685: offset+=LEN_DIR+1;
686: #ifndef SBBS
687: backslash(str);
688: strcpy(sub[i]->echopath,str);
689: #endif
690: get_int(sub[i]->faddr,instream); /* FidoNet address */
691:
692: get_int(sub[i]->maxmsgs,instream);
693: get_int(sub[i]->maxcrcs,instream);
694: get_int(sub[i]->maxage,instream);
695: get_int(sub[i]->ptridx,instream);
696: #ifdef SBBS
697: for(j=0;j<i;j++)
698: if(sub[i]->ptridx==sub[j]->ptridx) {
699: lprintf(txt.error,offset,fname);
700: lprintf("Duplicate pointer index for subs #%d and #%d\r\n"
701: ,i+1,j+1);
702: bail(1); }
703: #endif
704:
705: #ifdef SCFG
706: get_str(sub[i]->mod_ar,instream);
707: #else
708: fread(str,1,LEN_ARSTR+1,instream);
709: offset+=LEN_ARSTR+1;
710: sub[i]->mod_ar=arstr(0,str);
711: #endif
712: get_int(sub[i]->qwkconf,instream);
713: get_int(c,instream);
714: for(j=0;j<26;j++)
715: get_int(n,instream);
716: }
717: total_subs=i;
718:
719: #ifdef SBBS
720: for(i=l=0;i<total_grps;i++) {
721: for(j=k=0;j<total_subs;j++)
722: if(sub[j]->grp==i)
723: k++; /* k = number of subs per grp[i] */
724: if(k>l) l=k; } /* l = the largest number of subs per grp */
725: if(l)
726: for(i=0;i<total_grps;i++)
727: if((usrsub[i]=(uint *)MALLOC(sizeof(uint)*l))==NULL)
728: allocerr(txt,offset,fname,sizeof(uint)*l);
729:
730: if(sys_status&SS_INITIAL) {
731: fclose(instream);
732: lprintf(txt.readit,fname);
733: return; }
734: #endif
735:
736: /***********/
737: /* FidoNet */
738: /***********/
739:
740: get_int(total_faddrs,instream);
741:
742: if(total_faddrs) {
743: if((faddr=(faddr_t *)MALLOC(sizeof(faddr_t)*total_faddrs))==NULL)
744: allocerr(txt,offset,fname,sizeof(faddr_t)*total_faddrs); }
745: else
746: faddr=NULL;
747:
748: for(i=0;i<total_faddrs;i++)
749: get_int(faddr[i],instream);
750:
751: get_str(origline,instream);
752: get_str(netmail_sem,instream);
753: get_str(echomail_sem,instream);
754: get_str(netmail_dir,instream);
755: get_str(echomail_dir,instream);
756: get_str(fidofile_dir,instream);
757: get_int(netmail_misc,instream);
758: get_int(netmail_cost,instream);
759: get_int(dflt_faddr,instream);
760: for(i=0;i<28;i++)
761: get_int(n,instream);
762:
763:
764: /**********/
765: /* QWKnet */
766: /**********/
767:
768: get_str(qnet_tagline,instream);
769:
770: get_int(total_qhubs,instream);
771:
772: if(total_qhubs) {
773: if((qhub=(qhub_t **)MALLOC(sizeof(qhub_t *)*total_qhubs))==NULL)
774: allocerr(txt,offset,fname,sizeof(qhub_t*)*total_qhubs); }
775: else
776: qhub=NULL;
777:
778: for(i=0;i<total_qhubs;i++) {
779: if(feof(instream)) break;
780: if((qhub[i]=(qhub_t *)MALLOC(sizeof(qhub_t)))==NULL)
781: allocerr(txt,offset,fname,sizeof(qhub_t));
782: memset(qhub[i],0,sizeof(qhub_t));
783:
784: get_str(qhub[i]->id,instream);
785: get_int(qhub[i]->time,instream);
786: get_int(qhub[i]->freq,instream);
787: get_int(qhub[i]->days,instream);
788: get_int(qhub[i]->node,instream);
789: get_alloc(&offset,qhub[i]->call,LEN_CMD,instream);
790: get_alloc(&offset,qhub[i]->pack,LEN_CMD,instream);
791: get_alloc(&offset,qhub[i]->unpack,LEN_CMD,instream);
792: get_int(k,instream);
793:
794: if(k) {
795: if((qhub[i]->sub=(ushort *)MALLOC(sizeof(ushort)*k))==NULL)
796: allocerr(txt,offset,fname,sizeof(uint)*k);
797: if((qhub[i]->conf=(ushort *)MALLOC(sizeof(ushort)*k))==NULL)
798: allocerr(txt,offset,fname,sizeof(ushort)*k);
799: if((qhub[i]->mode=(uchar *)MALLOC(sizeof(uchar)*k))==NULL)
800: allocerr(txt,offset,fname,sizeof(uchar)*k); }
801:
802: for(j=0;j<k;j++) {
803: if(feof(instream)) break;
804: get_int(qhub[i]->conf[qhub[i]->subs],instream);
805: get_int(qhub[i]->sub[qhub[i]->subs],instream);
806: get_int(qhub[i]->mode[qhub[i]->subs],instream);
807: if(qhub[i]->sub[qhub[i]->subs]<total_subs)
808: sub[qhub[i]->sub[qhub[i]->subs]]->misc|=SUB_QNET;
809: else
810: continue;
811: if(qhub[i]->sub[qhub[i]->subs]!=INVALID_SUB)
812: qhub[i]->subs++; }
813: for(j=0;j<32;j++)
814: get_int(n,instream); }
815:
816: total_qhubs=i;
817:
818: for(j=0;j<32;j++)
819: get_int(n,instream);
820:
821: /************/
822: /* PostLink */
823: /************/
824:
825: fread(str,11,1,instream); /* Unused - used to be Site Name */
826: offset+=11;
827: get_int(sys_psnum,instream); /* Site Number */
828: get_int(total_phubs,instream);
829:
830: if(total_phubs) {
831: if((phub=(phub_t **)MALLOC(sizeof(phub_t *)*total_phubs))==NULL)
832: allocerr(txt,offset,fname,sizeof(phub_t*)*total_phubs); }
833: else
834: phub=NULL;
835:
836: for(i=0;i<total_phubs;i++) {
837: if(feof(instream)) break;
838: if((phub[i]=(phub_t *)MALLOC(sizeof(phub_t)))==NULL)
839: allocerr(txt,offset,fname,sizeof(phub_t));
840: memset(phub[i],0,sizeof(phub_t));
841: #ifdef SCFG
842: get_str(phub[i]->name,instream);
843: #else
844: fread(str,11,1,instream);
845: offset+=11;
846: #endif
847: get_int(phub[i]->time,instream);
848: get_int(phub[i]->freq,instream);
849: get_int(phub[i]->days,instream);
850: get_int(phub[i]->node,instream);
851: get_alloc(&offset,phub[i]->call,LEN_CMD,instream);
852: for(j=0;j<32;j++)
853: get_int(n,instream); }
854:
855: total_phubs=i;
856:
857: get_str(sys_psname,instream); /* Site Name */
858:
859: for(j=0;j<32;j++)
860: get_int(n,instream);
861:
862: /* Internet */
863:
864: get_str(sys_inetaddr,instream); /* Internet address */
865: get_str(inetmail_sem,instream);
866: get_int(inetmail_misc,instream);
867: get_int(inetmail_cost,instream);
868:
869: fclose(instream);
870: lprintf(txt.readit,fname);
871: }
872:
873: #endif
874:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.