Annotation of sbbs/sbbs2/scfglib1.c, revision 1.1.1.1

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: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.