BOOL read_chat_cfg(scfg_t* cfg, char* error) { char str[MAX_PATH+1],fname[13]; short i,j,n; long offset=0; FILE *instream; strcpy(fname,"chat.cnf"); sprintf(str,"%s%s",cfg->ctrl_dir,fname); if((instream=fnopen(NULL,str,O_RDONLY))==NULL) { sprintf(error,"%d (%s) opening %s",errno,STRERROR(errno),str); return(FALSE); } /*********/ /* Gurus */ /*********/ get_int(cfg->total_gurus,instream); if(cfg->total_gurus) { if((cfg->guru=(guru_t **)malloc(sizeof(guru_t *)*cfg->total_gurus))==NULL) return allocerr(instream,error,offset,fname,sizeof(guru_t *)*cfg->total_gurus); } else cfg->guru=NULL; for(i=0;i<cfg->total_gurus;i++) { if(feof(instream)) break; if((cfg->guru[i]=(guru_t *)malloc(sizeof(guru_t)))==NULL) return allocerr(instream,error,offset,fname,sizeof(guru_t)); memset(cfg->guru[i],0,sizeof(guru_t)); get_str(cfg->guru[i]->name,instream); get_str(cfg->guru[i]->code,instream); get_str(cfg->guru[i]->arstr,instream); cfg->guru[i]->ar=ARSTR(cfg->guru[i]->arstr,cfg); for(j=0;j<8;j++) get_int(n,instream); } cfg->total_chans=i; /********************/ /* Chat Action Sets */ /********************/ get_int(cfg->total_actsets,instream); if(cfg->total_actsets) { if((cfg->actset=(actset_t **)malloc(sizeof(actset_t *)*cfg->total_actsets))==NULL) return allocerr(instream,error,offset,fname,sizeof(actset_t *)*cfg->total_actsets); } else cfg->actset=NULL; for(i=0;i<cfg->total_actsets;i++) { if(feof(instream)) break; if((cfg->actset[i]=(actset_t *)malloc(sizeof(actset_t)))==NULL) return allocerr(instream,error,offset,fname,sizeof(actset_t)); get_str(cfg->actset[i]->name,instream); } cfg->total_actsets=i; /****************/ /* Chat Actions */ /****************/ get_int(cfg->total_chatacts,instream); if(cfg->total_chatacts) { if((cfg->chatact=(chatact_t **)malloc(sizeof(chatact_t *)*cfg->total_chatacts)) ==NULL) return allocerr(instream,error,offset,fname,sizeof(chatact_t *)*cfg->total_chatacts); } else cfg->chatact=NULL; for(i=0;i<cfg->total_chatacts;i++) { if(feof(instream)) break; if((cfg->chatact[i]=(chatact_t *)malloc(sizeof(chatact_t)))==NULL) return allocerr(instream,error,offset,fname,sizeof(chatact_t)); memset(cfg->chatact[i],0,sizeof(chatact_t)); get_int(cfg->chatact[i]->actset,instream); get_str(cfg->chatact[i]->cmd,instream); get_str(cfg->chatact[i]->out,instream); for(j=0;j<8;j++) get_int(n,instream); } cfg->total_chatacts=i; /***************************/ /* Multinode Chat Channels */ /***************************/ get_int(cfg->total_chans,instream); if(cfg->total_chans) { if((cfg->chan=(chan_t **)malloc(sizeof(chan_t *)*cfg->total_chans))==NULL) return allocerr(instream,error,offset,fname,sizeof(chan_t *)*cfg->total_chans); } else cfg->chan=NULL; for(i=0;i<cfg->total_chans;i++) { if(feof(instream)) break; if((cfg->chan[i]=(chan_t *)malloc(sizeof(chan_t)))==NULL) return allocerr(instream,error,offset,fname,sizeof(chan_t)); memset(cfg->chan[i],0,sizeof(chan_t)); get_int(cfg->chan[i]->actset,instream); get_str(cfg->chan[i]->name,instream); get_str(cfg->chan[i]->code,instream); get_str(cfg->chan[i]->arstr,instream); cfg->chan[i]->ar=ARSTR(cfg->chan[i]->arstr,cfg); get_int(cfg->chan[i]->cost,instream); get_int(cfg->chan[i]->guru,instream); get_int(cfg->chan[i]->misc,instream); for(j=0;j<8;j++) get_int(n,instream); } cfg->total_chans=i; /**************/ /* Chat Pages */ /**************/ get_int(cfg->total_pages,instream); if(cfg->total_pages) { if((cfg->page=(page_t **)malloc(sizeof(page_t *)*cfg->total_pages))==NULL) return allocerr(instream,error,offset,fname,sizeof(page_t *)*cfg->total_pages); } else cfg->page=NULL; for(i=0;i<cfg->total_pages;i++) { if(feof(instream)) break; if((cfg->page[i]=(page_t *)malloc(sizeof(page_t)))==NULL) return allocerr(instream,error,offset,fname,sizeof(page_t)); memset(cfg->page[i],0,sizeof(page_t)); get_str(cfg->page[i]->cmd,instream); get_str(cfg->page[i]->arstr,instream); cfg->page[i]->ar=ARSTR(cfg->page[i]->arstr,cfg); get_int(cfg->page[i]->misc,instream); for(j=0;j<8;j++) get_int(n,instream); } cfg->total_pages=i; fclose(instream); return(TRUE); }
BOOL read_file_cfg(scfg_t* cfg, char* error) { char str[MAX_PATH+1],fname[13],c,cmd[LEN_CMD+1]; short i,j,n; long offset=0,t; FILE *instream; strcpy(fname,"file.cnf"); sprintf(str,"%s%s",cfg->ctrl_dir,fname); if((instream=fnopen(NULL,str,O_RDONLY))==NULL) { sprintf(error,"%d (%s) opening %s",errno,STRERROR(errno),str); return(FALSE); } get_int(cfg->min_dspace,instream); get_int(cfg->max_batup,instream); get_int(cfg->max_batdn,instream); get_int(cfg->max_userxfer,instream); get_int(t,instream); /* unused - was cdt_byte_value */ get_int(cfg->cdt_up_pct,instream); get_int(cfg->cdt_dn_pct,instream); get_int(t,instream); /* unused - was temp_ext */ get_str(cmd,instream); /* unused - was temp_cmd */ get_int(cfg->leech_pct,instream); get_int(cfg->leech_sec,instream); get_int(cfg->file_misc,instream); for(i=0;i<30;i++) get_int(n,instream); /**************************/ /* Extractable File Types */ /**************************/ get_int(cfg->total_fextrs,instream); if(cfg->total_fextrs) { if((cfg->fextr=(fextr_t **)malloc(sizeof(fextr_t *)*cfg->total_fextrs))==NULL) return allocerr(instream,error,offset,fname,sizeof(fextr_t*)*cfg->total_fextrs); } else cfg->fextr=NULL; for(i=0; i<cfg->total_fextrs; i++) { if(feof(instream)) break; if((cfg->fextr[i]=(fextr_t *)malloc(sizeof(fextr_t)))==NULL) return allocerr(instream,error,offset,fname,sizeof(fextr_t)); memset(cfg->fextr[i],0,sizeof(fextr_t)); get_str(cfg->fextr[i]->ext,instream); get_str(cfg->fextr[i]->cmd,instream); get_str(cfg->fextr[i]->arstr,instream); cfg->fextr[i]->ar=ARSTR(cfg->fextr[i]->arstr,cfg); for(j=0;j<8;j++) get_int(n,instream); } cfg->total_fextrs=i; /***************************/ /* Compressable File Types */ /***************************/ get_int(cfg->total_fcomps,instream); if(cfg->total_fcomps) { if((cfg->fcomp=(fcomp_t **)malloc(sizeof(fcomp_t *)*cfg->total_fcomps))==NULL) return allocerr(instream,error,offset,fname,sizeof(fcomp_t*)*cfg->total_fcomps); } else cfg->fcomp=NULL; for(i=0; i<cfg->total_fcomps; i++) { if(feof(instream)) break; if((cfg->fcomp[i]=(fcomp_t *)malloc(sizeof(fcomp_t)))==NULL) return allocerr(instream,error,offset,fname,sizeof(fcomp_t)); memset(cfg->fcomp[i],0,sizeof(fcomp_t)); get_str(cfg->fcomp[i]->ext,instream); get_str(cfg->fcomp[i]->cmd,instream); get_str(cfg->fcomp[i]->arstr,instream); cfg->fcomp[i]->ar=ARSTR(cfg->fcomp[i]->arstr,cfg); for(j=0;j<8;j++) get_int(n,instream); } cfg->total_fcomps=i; /***********************/ /* Viewable File Types */ /***********************/ get_int(cfg->total_fviews,instream); if(cfg->total_fviews) { if((cfg->fview=(fview_t **)malloc(sizeof(fview_t *)*cfg->total_fviews))==NULL) return allocerr(instream,error,offset,fname,sizeof(fview_t*)*cfg->total_fviews); } else cfg->fview=NULL; for(i=0; i<cfg->total_fviews; i++) { if(feof(instream)) break; if((cfg->fview[i]=(fview_t *)malloc(sizeof(fview_t)))==NULL) return allocerr(instream,error,offset,fname,sizeof(fview_t)); memset(cfg->fview[i],0,sizeof(fview_t)); get_str(cfg->fview[i]->ext,instream); get_str(cfg->fview[i]->cmd,instream); get_str(cfg->fview[i]->arstr,instream); cfg->fview[i]->ar=ARSTR(cfg->fview[i]->arstr,cfg); for(j=0;j<8;j++) get_int(n,instream); } cfg->total_fviews=i; /***********************/ /* Testable File Types */ /***********************/ get_int(cfg->total_ftests,instream); if(cfg->total_ftests) { if((cfg->ftest=(ftest_t **)malloc(sizeof(ftest_t *)*cfg->total_ftests))==NULL) return allocerr(instream,error,offset,fname,sizeof(ftest_t*)*cfg->total_ftests); } else cfg->ftest=NULL; for(i=0; i<cfg->total_ftests; i++) { if(feof(instream)) break; if((cfg->ftest[i]=(ftest_t *)malloc(sizeof(ftest_t)))==NULL) return allocerr(instream,error,offset,fname,sizeof(ftest_t)); memset(cfg->ftest[i],0,sizeof(ftest_t)); get_str(cfg->ftest[i]->ext,instream); get_str(cfg->ftest[i]->cmd,instream); get_str(cfg->ftest[i]->workstr,instream); get_str(cfg->ftest[i]->arstr,instream); cfg->ftest[i]->ar=ARSTR(cfg->ftest[i]->arstr,cfg); for(j=0;j<8;j++) get_int(n,instream); } cfg->total_ftests=i; /*******************/ /* Download events */ /*******************/ get_int(cfg->total_dlevents,instream); if(cfg->total_dlevents) { if((cfg->dlevent=(dlevent_t **)malloc(sizeof(dlevent_t *)*cfg->total_dlevents)) ==NULL) return allocerr(instream,error,offset,fname,sizeof(dlevent_t*)*cfg->total_dlevents); } else cfg->dlevent=NULL; for(i=0; i<cfg->total_dlevents; i++) { if(feof(instream)) break; if((cfg->dlevent[i]=(dlevent_t *)malloc(sizeof(dlevent_t)))==NULL) return allocerr(instream,error,offset,fname,sizeof(dlevent_t)); memset(cfg->dlevent[i],0,sizeof(dlevent_t)); get_str(cfg->dlevent[i]->ext,instream); get_str(cfg->dlevent[i]->cmd,instream); get_str(cfg->dlevent[i]->workstr,instream); get_str(cfg->dlevent[i]->arstr,instream); cfg->dlevent[i]->ar=ARSTR(cfg->dlevent[i]->arstr,cfg); for(j=0;j<8;j++) get_int(n,instream); } cfg->total_dlevents=i; /***************************/ /* File Transfer Protocols */ /***************************/ get_int(cfg->total_prots,instream); if(cfg->total_prots) { if((cfg->prot=(prot_t **)malloc(sizeof(prot_t *)*cfg->total_prots))==NULL) return allocerr(instream,error,offset,fname,sizeof(prot_t*)*cfg->total_prots); } else cfg->prot=NULL; for(i=0;i<cfg->total_prots;i++) { if(feof(instream)) break; if((cfg->prot[i]=(prot_t *)malloc(sizeof(prot_t)))==NULL) return allocerr(instream,error,offset,fname,sizeof(prot_t)); memset(cfg->prot[i],0,sizeof(prot_t)); get_int(cfg->prot[i]->mnemonic,instream); get_str(cfg->prot[i]->name,instream); get_str(cfg->prot[i]->ulcmd,instream); get_str(cfg->prot[i]->dlcmd,instream); get_str(cfg->prot[i]->batulcmd,instream); get_str(cfg->prot[i]->batdlcmd,instream); get_str(cfg->prot[i]->blindcmd,instream); get_str(cfg->prot[i]->bicmd,instream); get_int(cfg->prot[i]->misc,instream); get_str(cfg->prot[i]->arstr,instream); cfg->prot[i]->ar=ARSTR(cfg->prot[i]->arstr,cfg); for(j=0;j<8;j++) get_int(n,instream); } cfg->total_prots=i; /************************/ /* Alternate File Paths */ /************************/ get_int(cfg->altpaths,instream); if(cfg->altpaths) { if((cfg->altpath=(char **)malloc(sizeof(char *)*cfg->altpaths))==NULL) return allocerr(instream,error,offset,fname,sizeof(char *)*cfg->altpaths); } else cfg->altpath=NULL; for(i=0;i<cfg->altpaths;i++) { if(feof(instream)) break; fread(str,LEN_DIR+1,1,instream); offset+=LEN_DIR+1; backslash(str); j=LEN_DIR+1; if((cfg->altpath[i]=(char *)malloc(j))==NULL) return allocerr(instream,error,offset,fname,j); memset(cfg->altpath[i],0,j); strcpy(cfg->altpath[i],str); for(j=0;j<8;j++) get_int(n,instream); } cfg->altpaths=i; /******************/ /* File Libraries */ /******************/ get_int(cfg->total_libs,instream); if(cfg->total_libs) { if((cfg->lib=(lib_t **)malloc(sizeof(lib_t *)*cfg->total_libs))==NULL) return allocerr(instream,error,offset,fname,sizeof(lib_t *)*cfg->total_libs); } else cfg->lib=NULL; for(i=0;i<cfg->total_libs;i++) { if(feof(instream)) break; if((cfg->lib[i]=(lib_t *)malloc(sizeof(lib_t)))==NULL) return allocerr(instream,error,offset,fname,sizeof(lib_t)); memset(cfg->lib[i],0,sizeof(lib_t)); cfg->lib[i]->offline_dir=INVALID_DIR; get_str(cfg->lib[i]->lname,instream); get_str(cfg->lib[i]->sname,instream); get_str(cfg->lib[i]->arstr,instream); cfg->lib[i]->ar=ARSTR(cfg->lib[i]->arstr,cfg); get_str(cfg->lib[i]->parent_path,instream); get_str(cfg->lib[i]->code_prefix,instream); get_int(c,instream); for(j=0;j<3;j++) get_int(n,instream); /* 0x0000 */ for(j=0;j<16;j++) get_int(n,instream); /* 0xffff */ } cfg->total_libs=i; /********************/ /* File Directories */ /********************/ cfg->sysop_dir=cfg->user_dir=cfg->upload_dir=INVALID_DIR; get_int(cfg->total_dirs,instream); if(cfg->total_dirs) { if((cfg->dir=(dir_t **)malloc(sizeof(dir_t *)*(cfg->total_dirs+1)))==NULL) return allocerr(instream,error,offset,fname,sizeof(dir_t *)*(cfg->total_dirs+1)); } else cfg->dir=NULL; for(i=0;i<cfg->total_dirs;i++) { if(feof(instream)) break; if((cfg->dir[i]=(dir_t *)malloc(sizeof(dir_t)))==NULL) return allocerr(instream,error,offset,fname,sizeof(dir_t)); memset(cfg->dir[i],0,sizeof(dir_t)); get_int(cfg->dir[i]->lib,instream); get_str(cfg->dir[i]->lname,instream); get_str(cfg->dir[i]->sname,instream); if(!stricmp(cfg->dir[i]->sname,"SYSOP")) /* Sysop upload directory */ cfg->sysop_dir=i; else if(!stricmp(cfg->dir[i]->sname,"USER")) /* User to User xfer dir */ cfg->user_dir=i; else if(!stricmp(cfg->dir[i]->sname,"UPLOADS")) /* Upload directory */ cfg->upload_dir=i; else if(!stricmp(cfg->dir[i]->sname,"OFFLINE")) /* Offline files dir */ cfg->lib[cfg->dir[i]->lib]->offline_dir=i; get_str(cfg->dir[i]->code_suffix,instream); get_str(cfg->dir[i]->data_dir,instream); get_str(cfg->dir[i]->arstr,instream); get_str(cfg->dir[i]->ul_arstr,instream); get_str(cfg->dir[i]->dl_arstr,instream); get_str(cfg->dir[i]->op_arstr,instream); cfg->dir[i]->ar=ARSTR(cfg->dir[i]->arstr,cfg); cfg->dir[i]->ul_ar=ARSTR(cfg->dir[i]->ul_arstr,cfg); cfg->dir[i]->dl_ar=ARSTR(cfg->dir[i]->dl_arstr,cfg); cfg->dir[i]->op_ar=ARSTR(cfg->dir[i]->op_arstr,cfg); get_str(cfg->dir[i]->path,instream); get_str(cfg->dir[i]->upload_sem,instream); get_int(cfg->dir[i]->maxfiles,instream); if(cfg->dir[i]->maxfiles>MAX_FILES) cfg->dir[i]->maxfiles=MAX_FILES; get_str(cfg->dir[i]->exts,instream); get_int(cfg->dir[i]->misc,instream); get_int(cfg->dir[i]->seqdev,instream); get_int(cfg->dir[i]->sort,instream); get_str(cfg->dir[i]->ex_arstr,instream); cfg->dir[i]->ex_ar=ARSTR(cfg->dir[i]->ex_arstr,cfg); get_int(cfg->dir[i]->maxage,instream); get_int(cfg->dir[i]->up_pct,instream); get_int(cfg->dir[i]->dn_pct,instream); get_int(c,instream); for(j=0;j<24;j++) get_int(n,instream); } cfg->total_dirs=i; /**********************/ /* Text File Sections */ /**********************/ get_int(cfg->total_txtsecs,instream); if(cfg->total_txtsecs) { if((cfg->txtsec=(txtsec_t **)malloc(sizeof(txtsec_t *)*cfg->total_txtsecs))==NULL) return allocerr(instream,error,offset,fname,sizeof(txtsec_t *)*cfg->total_txtsecs); } else cfg->txtsec=NULL; for(i=0;i<cfg->total_txtsecs;i++) { if(feof(instream)) break; if((cfg->txtsec[i]=(txtsec_t *)malloc(sizeof(txtsec_t)))==NULL) return allocerr(instream,error,offset,fname,sizeof(txtsec_t)); memset(cfg->txtsec[i],0,sizeof(txtsec_t)); get_str(cfg->txtsec[i]->name,instream); get_str(cfg->txtsec[i]->code,instream); get_str(cfg->txtsec[i]->arstr,instream); cfg->txtsec[i]->ar=ARSTR(cfg->txtsec[i]->arstr,cfg); for(j=0;j<8;j++) get_int(n,instream); } cfg->total_txtsecs=i; fclose(instream); return(TRUE); }
BOOL read_xtrn_cfg(scfg_t* cfg, char* error) { char str[MAX_PATH+1],fname[13],c; short i,j,n; long offset=0; FILE *instream; strcpy(fname,"xtrn.cnf"); sprintf(str,"%s%s",cfg->ctrl_dir,fname); if((instream=fnopen(NULL,str,O_RDONLY))==NULL) { sprintf(error,"%d (%s) opening %s",errno,STRERROR(errno),str); return(FALSE); } /*************/ /* Swap list */ /*************/ get_int(cfg->total_swaps,instream); if(cfg->total_swaps) { if((cfg->swap=(swap_t **)malloc(sizeof(swap_t *)*cfg->total_swaps))==NULL) return allocerr(instream,error,offset,fname,sizeof(swap_t *)*cfg->total_swaps); } else cfg->swap=NULL; for(i=0;i<cfg->total_swaps;i++) { if(feof(instream)) break; if((cfg->swap[i]=(swap_t *)malloc(sizeof(swap_t)))==NULL) return allocerr(instream,error,offset,fname,sizeof(swap_t)); get_str(cfg->swap[i]->cmd,instream); } cfg->total_swaps=i; /********************/ /* External Editors */ /********************/ get_int(cfg->total_xedits,instream); if(cfg->total_xedits) { if((cfg->xedit=(xedit_t **)malloc(sizeof(xedit_t *)*cfg->total_xedits))==NULL) return allocerr(instream,error,offset,fname,sizeof(xedit_t *)*cfg->total_xedits); } else cfg->xedit=NULL; for(i=0;i<cfg->total_xedits;i++) { if(feof(instream)) break; if((cfg->xedit[i]=(xedit_t *)malloc(sizeof(xedit_t)))==NULL) return allocerr(instream,error,offset,fname,sizeof(xedit_t)); memset(cfg->xedit[i],0,sizeof(xedit_t)); get_str(cfg->xedit[i]->name,instream); get_str(cfg->xedit[i]->code,instream); get_str(cfg->xedit[i]->lcmd,instream); get_str(cfg->xedit[i]->rcmd,instream); get_int(cfg->xedit[i]->misc,instream); get_str(cfg->xedit[i]->arstr,instream); cfg->xedit[i]->ar=ARSTR(cfg->xedit[i]->arstr,cfg); get_int(cfg->xedit[i]->type,instream); get_int(c,instream); for(j=0;j<7;j++) get_int(n,instream); } cfg->total_xedits=i; /*****************************/ /* External Program Sections */ /*****************************/ get_int(cfg->total_xtrnsecs,instream); if(cfg->total_xtrnsecs) { if((cfg->xtrnsec=(xtrnsec_t **)malloc(sizeof(xtrnsec_t *)*cfg->total_xtrnsecs)) ==NULL) return allocerr(instream,error,offset,fname,sizeof(xtrnsec_t *)*cfg->total_xtrnsecs); } else cfg->xtrnsec=NULL; for(i=0;i<cfg->total_xtrnsecs;i++) { if(feof(instream)) break; if((cfg->xtrnsec[i]=(xtrnsec_t *)malloc(sizeof(xtrnsec_t)))==NULL) return allocerr(instream,error,offset,fname,sizeof(xtrnsec_t)); memset(cfg->xtrnsec[i],0,sizeof(xtrnsec_t)); get_str(cfg->xtrnsec[i]->name,instream); get_str(cfg->xtrnsec[i]->code,instream); get_str(cfg->xtrnsec[i]->arstr,instream); cfg->xtrnsec[i]->ar=ARSTR(cfg->xtrnsec[i]->arstr,cfg); for(j=0;j<8;j++) get_int(n,instream); } cfg->total_xtrnsecs=i; /*********************/ /* External Programs */ /*********************/ get_int(cfg->total_xtrns,instream); if(cfg->total_xtrns) { if((cfg->xtrn=(xtrn_t **)malloc(sizeof(xtrn_t *)*cfg->total_xtrns))==NULL) return allocerr(instream,error,offset,fname,sizeof(xtrn_t *)*cfg->total_xtrns); } else cfg->xtrn=NULL; for(i=0;i<cfg->total_xtrns;i++) { if(feof(instream)) break; if((cfg->xtrn[i]=(xtrn_t *)malloc(sizeof(xtrn_t)))==NULL) return allocerr(instream,error,offset,fname,sizeof(xtrn_t)); memset(cfg->xtrn[i],0,sizeof(xtrn_t)); get_int(cfg->xtrn[i]->sec,instream); get_str(cfg->xtrn[i]->name,instream); get_str(cfg->xtrn[i]->code,instream); get_str(cfg->xtrn[i]->arstr,instream); get_str(cfg->xtrn[i]->run_arstr,instream); cfg->xtrn[i]->ar=ARSTR(cfg->xtrn[i]->arstr,cfg); cfg->xtrn[i]->run_ar=ARSTR(cfg->xtrn[i]->run_arstr,cfg); get_int(cfg->xtrn[i]->type,instream); get_int(cfg->xtrn[i]->misc,instream); get_int(cfg->xtrn[i]->event,instream); get_int(cfg->xtrn[i]->cost,instream); get_str(cfg->xtrn[i]->cmd,instream); get_str(cfg->xtrn[i]->clean,instream); get_str(cfg->xtrn[i]->path,instream); get_int(cfg->xtrn[i]->textra,instream); get_int(cfg->xtrn[i]->maxtime,instream); for(j=0;j<7;j++) get_int(n,instream); } cfg->total_xtrns=i; /****************/ /* Timed Events */ /****************/ get_int(cfg->total_events,instream); if(cfg->total_events) { if((cfg->event=(event_t **)malloc(sizeof(event_t *)*cfg->total_events))==NULL) return allocerr(instream,error,offset,fname,sizeof(event_t *)*cfg->total_events); } else cfg->event=NULL; for(i=0;i<cfg->total_events;i++) { if(feof(instream)) break; if((cfg->event[i]=(event_t *)malloc(sizeof(event_t)))==NULL) return allocerr(instream,error,offset,fname,sizeof(event_t)); memset(cfg->event[i],0,sizeof(event_t)); get_str(cfg->event[i]->code,instream); get_str(cfg->event[i]->cmd,instream); get_int(cfg->event[i]->days,instream); get_int(cfg->event[i]->time,instream); get_int(cfg->event[i]->node,instream); get_int(cfg->event[i]->misc,instream); get_str(cfg->event[i]->dir,instream); get_int(cfg->event[i]->freq,instream); get_int(cfg->event[i]->mdays,instream); for(j=0;j<5;j++) get_int(n,instream); } cfg->total_events=i; /********************************/ /* Native (32-bit) Program list */ /********************************/ get_int(cfg->total_natvpgms,instream); if(cfg->total_natvpgms) { if((cfg->natvpgm=(natvpgm_t **)malloc(sizeof(natvpgm_t *)*cfg->total_natvpgms))==NULL) return allocerr(instream,error,offset,fname,sizeof(natvpgm_t *)*cfg->total_natvpgms); } else cfg->natvpgm=NULL; for(i=0;i<cfg->total_natvpgms;i++) { if(feof(instream)) break; if((cfg->natvpgm[i]=(natvpgm_t *)malloc(sizeof(natvpgm_t)))==NULL) return allocerr(instream,error,offset,fname,sizeof(natvpgm_t)); get_str(cfg->natvpgm[i]->name,instream); cfg->natvpgm[i]->misc=0; } cfg->total_natvpgms=i; for(i=0;i<cfg->total_natvpgms;i++) { if(feof(instream)) break; get_int(cfg->natvpgm[i]->misc,instream); } /*******************/ /* Global Hot Keys */ /*******************/ get_int(cfg->total_hotkeys,instream); if(cfg->total_hotkeys) { if((cfg->hotkey=(hotkey_t **)malloc(sizeof(hotkey_t *)*cfg->total_hotkeys))==NULL) return allocerr(instream,error,offset,fname,sizeof(hotkey_t *)*cfg->total_hotkeys); } else cfg->hotkey=NULL; for(i=0;i<cfg->total_hotkeys;i++) { if(feof(instream)) break; if((cfg->hotkey[i]=(hotkey_t *)malloc(sizeof(hotkey_t)))==NULL) return allocerr(instream,error,offset,fname,sizeof(hotkey_t)); memset(cfg->hotkey[i],0,sizeof(hotkey_t)); get_int(cfg->hotkey[i]->key,instream); get_str(cfg->hotkey[i]->cmd,instream); for(j=0;j<8;j++) get_int(n,instream); } cfg->total_hotkeys=i; /************************************/ /* External Program-related Toggles */ /************************************/ get_int(cfg->xtrn_misc,instream); fclose(instream); return(TRUE); }
BOOL read_node_cfg(scfg_t* cfg, char* error) { char c,str[MAX_PATH+1],fname[13]; int i; int16_t n; long offset=0; FILE *instream; strcpy(fname,"node.cnf"); sprintf(str,"%s%s",cfg->node_dir,fname); if((instream=fnopen(NULL,str,O_RDONLY))==NULL) { sprintf(error,"%d (%s) opening %s",errno,STRERROR(errno),str); return(FALSE); } get_int(cfg->node_num,instream); if(!cfg->node_num) { sprintf(error,"offset %ld in %s, Node number must be non-zero" ,offset,fname); fclose(instream); return(FALSE); } get_str(cfg->node_name,instream); get_str(cfg->node_phone,instream); get_str(cfg->node_comspec,instream); #ifdef __OS2__ if(!cfg->node_comspec[0]) strcpy(cfg->node_comspec,"C:\\OS2\\MDOS\\COMMAND.COM"); #endif get_int(cfg->node_misc,instream); get_int(cfg->node_ivt,instream); get_int(cfg->node_swap,instream); get_str(cfg->node_swapdir,instream); get_int(cfg->node_valuser,instream); get_int(cfg->node_minbps,instream); get_str(cfg->node_arstr,instream); cfg->node_ar=ARSTR(cfg->node_arstr, cfg); get_int(cfg->node_dollars_per_call,instream); get_str(cfg->node_editor,instream); get_str(cfg->node_viewer,instream); get_str(cfg->node_daily,instream); get_int(c,instream); if(c) cfg->node_scrnlen=c; get_int(cfg->node_scrnblank,instream); get_str(cfg->text_dir,instream); /* ctrl directory */ get_str(cfg->text_dir,instream); /* text directory */ get_str(cfg->temp_dir,instream); /* temp directory */ #if 0 /* removed Sep-9-2003, always use nodex/temp (rrs) */ if(!cfg->temp_dir[0]) #endif strcpy(cfg->temp_dir,"temp"); for(i=0;i<10;i++) /* WFC 0-9 DOS commands */ get_str(cfg->wfc_cmd[i],instream); for(i=0;i<12;i++) /* WFC F1-F12 shrinking DOS cmds */ get_str(cfg->wfc_scmd[i],instream); get_str(cfg->mdm_hang,instream); get_int(cfg->node_sem_check,instream); if(!cfg->node_sem_check) cfg->node_sem_check=60; get_int(cfg->node_stat_check,instream); if(!cfg->node_stat_check) cfg->node_stat_check=10; get_str(cfg->scfg_cmd,instream); if(!cfg->scfg_cmd[0]) strcpy(cfg->scfg_cmd,"%!scfg %k"); get_int(cfg->sec_warn,instream); if(!cfg->sec_warn) cfg->sec_warn=180; get_int(cfg->sec_hangup,instream); if(!cfg->sec_hangup) cfg->sec_hangup=300; for(i=0;i<188;i++) { /* Unused - initialized to NULL */ fread(&n,1,2,instream); offset+=2; } for(i=0;i<256;i++) { /* Unused - initialized to 0xff */ fread(&n,1,2,instream); offset+=2; } /***************/ /* Modem Stuff */ /***************/ get_int(cfg->com_port,instream); get_int(cfg->com_irq,instream); get_int(cfg->com_base,instream); get_int(cfg->com_rate,instream); get_int(cfg->mdm_misc,instream); get_str(cfg->mdm_init,instream); get_str(cfg->mdm_spec,instream); get_str(cfg->mdm_term,instream); get_str(cfg->mdm_dial,instream); get_str(cfg->mdm_offh,instream); get_str(cfg->mdm_answ,instream); get_int(cfg->mdm_reinit,instream); get_int(cfg->mdm_ansdelay,instream); get_int(cfg->mdm_rings,instream); get_int(cfg->mdm_results,instream); if(cfg->mdm_results) { if((cfg->mdm_result=(mdm_result_t *)malloc(sizeof(mdm_result_t)*cfg->mdm_results)) ==NULL) return allocerr(instream,error,offset,fname,sizeof(mdm_result_t *)*cfg->mdm_results); } else cfg->mdm_result=NULL; for(i=0;i<cfg->mdm_results;i++) { if(feof(instream)) break; get_int(cfg->mdm_result[i].code,instream); get_int(cfg->mdm_result[i].rate,instream); get_int(cfg->mdm_result[i].cps,instream); get_str(cfg->mdm_result[i].str,instream); } cfg->mdm_results=i; fclose(instream); return(TRUE); }
BOOL read_msgs_cfg(scfg_t* cfg, char* error) { char str[MAX_PATH+1],fname[13],c; short i,j; int16_t n,k; long offset=0; FILE *instream; strcpy(fname,"msgs.cnf"); sprintf(str,"%s%s",cfg->ctrl_dir,fname); if((instream=fnopen(NULL,str,O_RDONLY))==NULL) { sprintf(error,"%d (%s) opening %s",errno,STRERROR(errno),str); return(FALSE); } /*************************/ /* General Message Stuff */ /*************************/ get_int(cfg->max_qwkmsgs,instream); get_int(cfg->mail_maxcrcs,instream); get_int(cfg->mail_maxage,instream); get_str(cfg->preqwk_arstr,instream); cfg->preqwk_ar=ARSTR(cfg->preqwk_arstr,cfg); get_int(cfg->smb_retry_time,instream); /* odd byte */ if(!cfg->smb_retry_time) cfg->smb_retry_time=30; get_int(cfg->max_qwkmsgage, instream); for(i=0;i<233;i++) /* NULL */ get_int(n,instream); get_int(cfg->msg_misc,instream); for(i=0;i<255;i++) /* 0xff */ get_int(n,instream); /******************/ /* Message Groups */ /******************/ get_int(cfg->total_grps,instream); if(cfg->total_grps) { if((cfg->grp=(grp_t **)malloc(sizeof(grp_t *)*cfg->total_grps))==NULL) return allocerr(instream,error,offset,fname,sizeof(grp_t *)*cfg->total_grps); } else cfg->grp=NULL; for(i=0;i<cfg->total_grps;i++) { if(feof(instream)) break; if((cfg->grp[i]=(grp_t *)malloc(sizeof(grp_t)))==NULL) return allocerr(instream,error,offset,fname,sizeof(grp_t)); memset(cfg->grp[i],0,sizeof(grp_t)); get_str(cfg->grp[i]->lname,instream); get_str(cfg->grp[i]->sname,instream); get_str(cfg->grp[i]->arstr,instream); cfg->grp[i]->ar=ARSTR(cfg->grp[i]->arstr,cfg); get_str(cfg->grp[i]->code_prefix,instream); get_int(c,instream); for(j=0;j<43;j++) get_int(n,instream); } cfg->total_grps=i; /**********************/ /* Message Sub-boards */ /**********************/ get_int(cfg->total_subs,instream); if(cfg->total_subs) { if((cfg->sub=(sub_t **)malloc(sizeof(sub_t *)*cfg->total_subs))==NULL) return allocerr(instream,error,offset,fname,sizeof(sub_t *)*cfg->total_subs); } else cfg->sub=NULL; for(i=0;i<cfg->total_subs;i++) { if(feof(instream)) break; if((cfg->sub[i]=(sub_t *)malloc(sizeof(sub_t)))==NULL) return allocerr(instream,error,offset,fname,sizeof(sub_t)); memset(cfg->sub[i],0,sizeof(sub_t)); get_int(cfg->sub[i]->grp,instream); get_str(cfg->sub[i]->lname,instream); get_str(cfg->sub[i]->sname,instream); get_str(cfg->sub[i]->qwkname,instream); get_str(cfg->sub[i]->code_suffix,instream); get_str(cfg->sub[i]->data_dir,instream); #ifdef SBBS if(cfg->sub[i]->grp >= cfg->total_grps) { sprintf(error,"offset %ld in %s: invalid group number (%u) for sub-board: %s" ,offset,fname ,cfg->sub[i]->grp ,cfg->sub[i]->code_suffix); fclose(instream); return(FALSE); } #endif get_str(cfg->sub[i]->arstr,instream); get_str(cfg->sub[i]->read_arstr,instream); get_str(cfg->sub[i]->post_arstr,instream); get_str(cfg->sub[i]->op_arstr,instream); cfg->sub[i]->ar=ARSTR(cfg->sub[i]->arstr,cfg); cfg->sub[i]->read_ar=ARSTR(cfg->sub[i]->read_arstr,cfg); cfg->sub[i]->post_ar=ARSTR(cfg->sub[i]->post_arstr,cfg); cfg->sub[i]->op_ar=ARSTR(cfg->sub[i]->op_arstr,cfg); get_int(cfg->sub[i]->misc,instream); get_str(cfg->sub[i]->tagline,instream); get_str(cfg->sub[i]->origline,instream); get_str(cfg->sub[i]->post_sem,instream); #if 0 fread(str,1,LEN_DIR+1,instream); /* skip EchoMail path */ offset+=LEN_DIR+1; #else get_str(cfg->sub[i]->newsgroup,instream); #endif get_int(cfg->sub[i]->faddr,instream); /* FidoNet address */ get_int(cfg->sub[i]->maxmsgs,instream); get_int(cfg->sub[i]->maxcrcs,instream); get_int(cfg->sub[i]->maxage,instream); get_int(cfg->sub[i]->ptridx,instream); #ifdef SBBS for(j=0;j<i;j++) if(cfg->sub[i]->ptridx==cfg->sub[j]->ptridx) { sprintf(error,"offset %ld in %s: Duplicate pointer index for subs %s and %s" ,offset,fname ,cfg->sub[i]->code_suffix,cfg->sub[j]->code_suffix); fclose(instream); return(FALSE); } #endif get_str(cfg->sub[i]->mod_arstr,instream); cfg->sub[i]->mod_ar=ARSTR(cfg->sub[i]->mod_arstr,cfg); get_int(cfg->sub[i]->qwkconf,instream); get_int(c,instream); for(j=0;j<26;j++) get_int(n,instream); } cfg->total_subs=i; /***********/ /* FidoNet */ /***********/ get_int(cfg->total_faddrs,instream); if(cfg->total_faddrs) { if((cfg->faddr=(faddr_t *)malloc(sizeof(faddr_t)*cfg->total_faddrs))==NULL) return allocerr(instream,error,offset,fname,sizeof(faddr_t)*cfg->total_faddrs); } else cfg->faddr=NULL; for(i=0;i<cfg->total_faddrs;i++) get_int(cfg->faddr[i],instream); get_str(cfg->origline,instream); get_str(cfg->netmail_sem,instream); get_str(cfg->echomail_sem,instream); get_str(cfg->netmail_dir,instream); get_str(cfg->echomail_dir,instream); get_str(cfg->fidofile_dir,instream); get_int(cfg->netmail_misc,instream); get_int(cfg->netmail_cost,instream); get_int(cfg->dflt_faddr,instream); for(i=0;i<28;i++) get_int(n,instream); /**********/ /* QWKnet */ /**********/ get_str(cfg->qnet_tagline,instream); get_int(cfg->total_qhubs,instream); if(cfg->total_qhubs) { if((cfg->qhub=(qhub_t **)malloc(sizeof(qhub_t *)*cfg->total_qhubs))==NULL) return allocerr(instream,error,offset,fname,sizeof(qhub_t*)*cfg->total_qhubs); } else cfg->qhub=NULL; for(i=0;i<cfg->total_qhubs;i++) { if(feof(instream)) break; if((cfg->qhub[i]=(qhub_t *)malloc(sizeof(qhub_t)))==NULL) return allocerr(instream,error,offset,fname,sizeof(qhub_t)); memset(cfg->qhub[i],0,sizeof(qhub_t)); get_str(cfg->qhub[i]->id,instream); get_int(cfg->qhub[i]->time,instream); get_int(cfg->qhub[i]->freq,instream); get_int(cfg->qhub[i]->days,instream); get_int(cfg->qhub[i]->node,instream); get_str(cfg->qhub[i]->call,instream); get_str(cfg->qhub[i]->pack,instream); get_str(cfg->qhub[i]->unpack,instream); get_int(k,instream); if(k) { if((cfg->qhub[i]->sub=(ulong *)malloc(sizeof(ulong)*k))==NULL) return allocerr(instream,error,offset,fname,sizeof(ulong)*k); if((cfg->qhub[i]->conf=(ushort *)malloc(sizeof(ushort)*k))==NULL) return allocerr(instream,error,offset,fname,sizeof(ushort)*k); if((cfg->qhub[i]->mode=(char *)malloc(sizeof(char)*k))==NULL) return allocerr(instream,error,offset,fname,sizeof(uchar)*k); } for(j=0;j<k;j++) { uint16_t subnum; if(feof(instream)) break; get_int(cfg->qhub[i]->conf[cfg->qhub[i]->subs],instream); get_int(subnum,instream); cfg->qhub[i]->sub[cfg->qhub[i]->subs]=subnum; get_int(cfg->qhub[i]->mode[cfg->qhub[i]->subs],instream); if(cfg->qhub[i]->sub[cfg->qhub[i]->subs]<cfg->total_subs) cfg->sub[cfg->qhub[i]->sub[cfg->qhub[i]->subs]]->misc|=SUB_QNET; else continue; if(cfg->qhub[i]->sub[cfg->qhub[i]->subs]!=INVALID_SUB) cfg->qhub[i]->subs++; } for(j=0;j<32;j++) get_int(n,instream); } cfg->total_qhubs=i; for(j=0;j<32;j++) get_int(n,instream); /************/ /* PostLink */ /************/ fread(str,11,1,instream); /* Unused - used to be Site Name */ offset+=11; get_int(cfg->sys_psnum,instream); /* Site Number */ get_int(cfg->total_phubs,instream); if(cfg->total_phubs) { if((cfg->phub=(phub_t **)malloc(sizeof(phub_t *)*cfg->total_phubs))==NULL) return allocerr(instream,error,offset,fname,sizeof(phub_t*)*cfg->total_phubs); } else cfg->phub=NULL; for(i=0;i<cfg->total_phubs;i++) { if(feof(instream)) break; if((cfg->phub[i]=(phub_t *)malloc(sizeof(phub_t)))==NULL) return allocerr(instream,error,offset,fname,sizeof(phub_t)); memset(cfg->phub[i],0,sizeof(phub_t)); get_str(cfg->phub[i]->name,instream); get_int(cfg->phub[i]->time,instream); get_int(cfg->phub[i]->freq,instream); get_int(cfg->phub[i]->days,instream); get_int(cfg->phub[i]->node,instream); get_str(cfg->phub[i]->call,instream); for(j=0;j<32;j++) get_int(n,instream); } cfg->total_phubs=i; get_str(cfg->sys_psname,instream); /* Site Name */ for(j=0;j<32;j++) get_int(n,instream); /************/ /* Internet */ /************/ get_str(cfg->sys_inetaddr,instream); /* Internet address */ get_str(cfg->inetmail_sem,instream); get_int(cfg->inetmail_misc,instream); get_int(cfg->inetmail_cost,instream); get_str(cfg->smtpmail_sem,instream); fclose(instream); return(TRUE); }
BOOL read_main_cfg(scfg_t* cfg, char* error) { char str[MAX_PATH+1],fname[13],c; short i,j; int16_t n; long offset=0; FILE *instream; strcpy(fname,"main.cnf"); sprintf(str,"%s%s",cfg->ctrl_dir,fname); if((instream=fnopen(NULL,str,O_RDONLY))==NULL) { sprintf(error,"%d (%s) opening %s",errno,STRERROR(errno),str); return(FALSE); } get_str(cfg->sys_name,instream); get_str(cfg->sys_id,instream); get_str(cfg->sys_location,instream); get_str(cfg->sys_phonefmt,instream); get_str(cfg->sys_op,instream); get_str(cfg->sys_guru,instream); get_str(cfg->sys_pass,instream); get_int(cfg->sys_nodes,instream); #if 0 /* removed Jan-10-2003: cfg->node_num may be old or uninitialized */ if(!cfg->sys_nodes || cfg->sys_nodes<cfg->node_num || cfg->sys_nodes>MAX_NODES) { if(!cfg->sys_nodes) sprintf(error,"Total nodes on system must be non-zero."); else if(cfg->sys_nodes>MAX_NODES) sprintf(error,"Total nodes exceeds %u.",MAX_NODES); else sprintf(error,"Total nodes (%u) < node number in NODE.CNF (%u)" ,cfg->sys_nodes,cfg->node_num); fclose(instream); return(FALSE); } #endif for(i=0;i<cfg->sys_nodes;i++) { get_str(cfg->node_path[i],instream); #if defined(__unix__) strlwr(cfg->node_path[i]); #endif } get_str(cfg->data_dir,instream); /* data directory */ get_str(cfg->exec_dir,instream); /* exec directory */ get_str(cfg->sys_logon,instream); get_str(cfg->sys_logout,instream); get_str(cfg->sys_daily,instream); get_int(cfg->sys_timezone,instream); get_int(cfg->sys_misc,instream); get_int(cfg->sys_lastnode,instream); get_int(cfg->sys_autonode,instream); get_int(cfg->uq,instream); get_int(cfg->sys_pwdays,instream); get_int(cfg->sys_deldays,instream); get_int(cfg->sys_exp_warn,instream); /* Days left till expiration warning */ get_int(cfg->sys_autodel,instream); get_int(cfg->sys_def_stat,instream); /* default status line */ get_str(cfg->sys_chat_arstr,instream); cfg->sys_chat_ar=ARSTR(cfg->sys_chat_arstr,cfg); get_int(cfg->cdt_min_value,instream); get_int(cfg->max_minutes,instream); get_int(cfg->cdt_per_dollar,instream); get_str(cfg->new_pass,instream); get_str(cfg->new_magic,instream); get_str(cfg->new_sif,instream); get_str(cfg->new_sof,instream); if(!cfg->new_sof[0]) /* if output not specified, use input file */ strcpy(cfg->new_sof,cfg->new_sif); /*********************/ /* New User Settings */ /*********************/ get_int(cfg->new_level,instream); get_int(cfg->new_flags1,instream); get_int(cfg->new_flags2,instream); get_int(cfg->new_flags3,instream); get_int(cfg->new_flags4,instream); get_int(cfg->new_exempt,instream); get_int(cfg->new_rest,instream); get_int(cfg->new_cdt,instream); get_int(cfg->new_min,instream); get_str(cfg->new_xedit,instream); get_int(cfg->new_expire,instream); get_int(cfg->new_shell,instream); get_int(cfg->new_misc,instream); get_int(cfg->new_prot,instream); if(cfg->new_prot<' ') cfg->new_prot=' '; get_int(cfg->new_install,instream); for(i=0;i<7;i++) get_int(n,instream); /*************************/ /* Expired User Settings */ /*************************/ get_int(cfg->expired_level,instream); get_int(cfg->expired_flags1,instream); get_int(cfg->expired_flags2,instream); get_int(cfg->expired_flags3,instream); get_int(cfg->expired_flags4,instream); get_int(cfg->expired_exempt,instream); get_int(cfg->expired_rest,instream); get_str(cfg->logon_mod,instream); get_str(cfg->logoff_mod,instream); get_str(cfg->newuser_mod,instream); get_str(cfg->login_mod,instream); if(!cfg->login_mod[0]) SAFECOPY(cfg->login_mod,"login"); get_str(cfg->logout_mod,instream); get_str(cfg->sync_mod,instream); get_str(cfg->expire_mod,instream); get_int(cfg->ctrlkey_passthru,instream); get_str(cfg->mods_dir,instream); get_str(cfg->logs_dir,instream); if(!cfg->logs_dir[0]) SAFECOPY(cfg->logs_dir,cfg->data_dir); get_int(c,instream); for(i=0;i<158;i++) /* unused - initialized to NULL */ get_int(n,instream); for(i=0;i<254;i++) /* unused - initialized to 0xff */ get_int(n,instream); get_int(cfg->user_backup_level,instream); if(cfg->user_backup_level==0xffff) cfg->user_backup_level=5; get_int(cfg->mail_backup_level,instream); if(cfg->mail_backup_level==0xffff) cfg->mail_backup_level=5; /*******************/ /* Validation Sets */ /*******************/ for(i=0;i<10 && !feof(instream);i++) { get_int(cfg->val_level[i],instream); get_int(cfg->val_expire[i],instream); get_int(cfg->val_flags1[i],instream); get_int(cfg->val_flags2[i],instream); get_int(cfg->val_flags3[i],instream); get_int(cfg->val_flags4[i],instream); get_int(cfg->val_cdt[i],instream); get_int(cfg->val_exempt[i],instream); get_int(cfg->val_rest[i],instream); for(j=0;j<8;j++) get_int(n,instream); } /***************************/ /* Security Level Settings */ /***************************/ for(i=0;i<100 && !feof(instream);i++) { get_int(cfg->level_timeperday[i],instream); #if 0 /* removed May 06, 2002 */ if(cfg->level_timeperday[i]>500) cfg->level_timeperday[i]=500; #endif get_int(cfg->level_timepercall[i],instream); #if 0 /* removed May 06, 2002 */ if(cfg->level_timepercall[i]>500) cfg->level_timepercall[i]=500; #endif get_int(cfg->level_callsperday[i],instream); get_int(cfg->level_freecdtperday[i],instream); get_int(cfg->level_linespermsg[i],instream); get_int(cfg->level_postsperday[i],instream); get_int(cfg->level_emailperday[i],instream); get_int(cfg->level_misc[i],instream); get_int(cfg->level_expireto[i],instream); get_int(c,instream); for(j=0;j<5;j++) get_int(n,instream); } if(i!=100) { sprintf(error,"Insufficient User Level Information: " "%d user levels read, 100 needed.",i); fclose(instream); return(FALSE); } get_int(cfg->total_shells,instream); #ifdef SBBS if(!cfg->total_shells) { sprintf(error,"At least one command shell must be configured."); fclose(instream); return(FALSE); } #endif if(cfg->total_shells) { if((cfg->shell=(shell_t **)malloc(sizeof(shell_t *)*cfg->total_shells))==NULL) return allocerr(instream,error,offset,fname,sizeof(shell_t *)*cfg->total_shells); } else cfg->shell=NULL; for(i=0;i<cfg->total_shells;i++) { if(feof(instream)) break; if((cfg->shell[i]=(shell_t *)malloc(sizeof(shell_t)))==NULL) return allocerr(instream,error,offset,fname,sizeof(shell_t)); memset(cfg->shell[i],0,sizeof(shell_t)); get_str(cfg->shell[i]->name,instream); get_str(cfg->shell[i]->code,instream); get_str(cfg->shell[i]->arstr,instream); cfg->shell[i]->ar=ARSTR(cfg->shell[i]->arstr,cfg); get_int(cfg->shell[i]->misc,instream); for(j=0;j<8;j++) get_int(n,instream); } cfg->total_shells=i; if(cfg->new_shell>=cfg->total_shells) cfg->new_shell=0; fclose(instream); return(TRUE); }