|
|
1.1 ! root 1: /* scfglib2.c */ ! 2: ! 3: /* Synchronet configuration library routines */ ! 4: ! 5: /* $Id: scfglib2.c,v 1.7 2000/12/05 01:04:21 rswindell Exp $ */ ! 6: ! 7: /**************************************************************************** ! 8: * @format.tab-size 4 (Plain Text/Source Code File Header) * ! 9: * @format.use-tabs true (see http://www.synchro.net/ptsc_hdr.html) * ! 10: * * ! 11: * Copyright 2000 Rob Swindell - http://www.synchro.net/copyright.html * ! 12: * * ! 13: * This program is free software; you can redistribute it and/or * ! 14: * modify it under the terms of the GNU General Public License * ! 15: * as published by the Free Software Foundation; either version 2 * ! 16: * of the License, or (at your option) any later version. * ! 17: * See the GNU General Public License for more details: gpl.txt or * ! 18: * http://www.fsf.org/copyleft/gpl.html * ! 19: * * ! 20: * Anonymous FTP access to the most recent released source is available at * ! 21: * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net * ! 22: * * ! 23: * Anonymous CVS access to the development source and modification history * ! 24: * is available at cvs.synchro.net:/cvsroot/sbbs, example: * ! 25: * cvs -d :pserver:[email protected]:/cvsroot/sbbs login * ! 26: * (just hit return, no password is necessary) * ! 27: * cvs -d :pserver:[email protected]:/cvsroot/sbbs checkout src * ! 28: * * ! 29: * For Synchronet coding style and modification guidelines, see * ! 30: * http://www.synchro.net/source.html * ! 31: * * ! 32: * You are encouraged to submit any modifications (preferably in Unix diff * ! 33: * format) via e-mail to [email protected] * ! 34: * * ! 35: * Note: If this box doesn't appear square, then you need to fix your tabs. * ! 36: ****************************************************************************/ ! 37: ! 38: #include "sbbs.h" ! 39: #include "scfglib.h" ! 40: ! 41: #ifdef SCFG /* SCFG allocate max length */ ! 42: #define readline_alloc(l,s,m,i) readline(l,s,m,i) ! 43: #else ! 44: char *readline_alloc(long *offset, char *outstr, int maxline ! 45: , FILE *instream); ! 46: #define readline_alloc(l,s,m,i) s=readline_alloc(l,s,m,i) ! 47: #define get_alloc(o,s,l,i) s=get_alloc(o,s,l,i) ! 48: #endif ! 49: ! 50: extern const char * scfgnulstr; ! 51: ! 52: #ifndef NO_FILE_CFG ! 53: ! 54: /****************************************************************************/ ! 55: /* Reads in LIBS.CNF and initializes the associated variables */ ! 56: /****************************************************************************/ ! 57: BOOL read_file_cfg(scfg_t* cfg, read_cfg_text_t* txt) ! 58: { ! 59: char str[256],fname[13],c,cmd[LEN_CMD+1]; ! 60: short i,j,n; ! 61: long offset=0,t; ! 62: FILE *instream; ! 63: ! 64: #ifndef SCFG ! 65: ! 66: sprintf(cfg->data_dir_dirs,"%sdirs/",cfg->data_dir); ! 67: ! 68: #endif ! 69: ! 70: strcpy(fname,"file.cnf"); ! 71: sprintf(str,"%s%s",cfg->ctrl_dir,fname); ! 72: if((instream=fnopen(NULL,str,O_RDONLY))==NULL) { ! 73: lprintf(txt->openerr,str); ! 74: return(FALSE); } ! 75: ! 76: if(txt->reading && txt->reading[0]) ! 77: lprintf(txt->reading,fname); ! 78: ! 79: get_int(cfg->min_dspace,instream); ! 80: get_int(cfg->max_batup,instream); ! 81: ! 82: get_int(cfg->max_batdn,instream); ! 83: ! 84: get_int(cfg->max_userxfer,instream); ! 85: ! 86: get_int(t,instream); /* unused - was cdt_byte_value */ ! 87: get_int(cfg->cdt_up_pct,instream); ! 88: get_int(cfg->cdt_dn_pct,instream); ! 89: get_int(t,instream); /* unused - was temp_ext */ ! 90: get_str(cmd,instream); /* unused - was temp_cmd */ ! 91: get_int(cfg->leech_pct,instream); ! 92: get_int(cfg->leech_sec,instream); ! 93: ! 94: for(i=0;i<32;i++) ! 95: get_int(n,instream); ! 96: ! 97: /**************************/ ! 98: /* Extractable File Types */ ! 99: /**************************/ ! 100: ! 101: get_int(cfg->total_fextrs,instream); ! 102: ! 103: if(cfg->total_fextrs) { ! 104: if((cfg->fextr=(fextr_t **)MALLOC(sizeof(fextr_t *)*cfg->total_fextrs))==NULL) ! 105: return allocerr(txt,offset,fname,sizeof(fextr_t*)*cfg->total_fextrs); } ! 106: else ! 107: cfg->fextr=NULL; ! 108: ! 109: for(i=0; i<cfg->total_fextrs; i++) { ! 110: if(feof(instream)) ! 111: break; ! 112: if((cfg->fextr[i]=(fextr_t *)MALLOC(sizeof(fextr_t)))==NULL) ! 113: return allocerr(txt,offset,fname,sizeof(fextr_t)); ! 114: memset(cfg->fextr[i],0,sizeof(fextr_t)); ! 115: get_str(cfg->fextr[i]->ext,instream); ! 116: get_alloc(&offset,cfg->fextr[i]->cmd,LEN_CMD,instream); ! 117: #ifdef SCFG ! 118: get_str(cfg->fextr[i]->ar,instream); ! 119: #else ! 120: fread(str,LEN_ARSTR+1,1,instream); ! 121: offset+=LEN_ARSTR+1; ! 122: cfg->fextr[i]->ar=arstr(0,str,cfg); ! 123: #endif ! 124: for(j=0;j<8;j++) ! 125: get_int(n,instream); ! 126: } ! 127: cfg->total_fextrs=i; ! 128: ! 129: /***************************/ ! 130: /* Compressable File Types */ ! 131: /***************************/ ! 132: ! 133: get_int(cfg->total_fcomps,instream); ! 134: ! 135: if(cfg->total_fcomps) { ! 136: if((cfg->fcomp=(fcomp_t **)MALLOC(sizeof(fcomp_t *)*cfg->total_fcomps))==NULL) ! 137: return allocerr(txt,offset,fname,sizeof(fcomp_t*)*cfg->total_fcomps); } ! 138: else ! 139: cfg->fcomp=NULL; ! 140: ! 141: for(i=0; i<cfg->total_fcomps; i++) { ! 142: if(feof(instream)) ! 143: break; ! 144: if((cfg->fcomp[i]=(fcomp_t *)MALLOC(sizeof(fcomp_t)))==NULL) ! 145: return allocerr(txt,offset,fname,sizeof(fcomp_t)); ! 146: memset(cfg->fcomp[i],0,sizeof(fcomp_t)); ! 147: get_str(cfg->fcomp[i]->ext,instream); ! 148: get_alloc(&offset,cfg->fcomp[i]->cmd,LEN_CMD,instream); ! 149: #ifdef SCFG ! 150: get_str(cfg->fcomp[i]->ar,instream); ! 151: #else ! 152: fread(str,LEN_ARSTR+1,1,instream); ! 153: offset+=LEN_ARSTR+1; ! 154: cfg->fcomp[i]->ar=arstr(0,str,cfg); ! 155: #endif ! 156: for(j=0;j<8;j++) ! 157: get_int(n,instream); ! 158: } ! 159: cfg->total_fcomps=i; ! 160: ! 161: /***********************/ ! 162: /* Viewable File Types */ ! 163: /***********************/ ! 164: ! 165: get_int(cfg->total_fviews,instream); ! 166: ! 167: if(cfg->total_fviews) { ! 168: if((cfg->fview=(fview_t **)MALLOC(sizeof(fview_t *)*cfg->total_fviews))==NULL) ! 169: return allocerr(txt,offset,fname,sizeof(fview_t*)*cfg->total_fviews); } ! 170: else ! 171: cfg->fview=NULL; ! 172: ! 173: for(i=0; i<cfg->total_fviews; i++) { ! 174: if(feof(instream)) break; ! 175: if((cfg->fview[i]=(fview_t *)MALLOC(sizeof(fview_t)))==NULL) ! 176: return allocerr(txt,offset,fname,sizeof(fview_t)); ! 177: memset(cfg->fview[i],0,sizeof(fview_t)); ! 178: get_str(cfg->fview[i]->ext,instream); ! 179: get_alloc(&offset,cfg->fview[i]->cmd,LEN_CMD,instream); ! 180: #ifdef SCFG ! 181: get_str(cfg->fview[i]->ar,instream); ! 182: #else ! 183: fread(str,LEN_ARSTR+1,1,instream); ! 184: offset+=LEN_ARSTR+1; ! 185: cfg->fview[i]->ar=arstr(0,str,cfg); ! 186: #endif ! 187: for(j=0;j<8;j++) ! 188: get_int(n,instream); ! 189: } ! 190: cfg->total_fviews=i; ! 191: ! 192: /***********************/ ! 193: /* Testable File Types */ ! 194: /***********************/ ! 195: ! 196: get_int(cfg->total_ftests,instream); ! 197: ! 198: if(cfg->total_ftests) { ! 199: if((cfg->ftest=(ftest_t **)MALLOC(sizeof(ftest_t *)*cfg->total_ftests))==NULL) ! 200: return allocerr(txt,offset,fname,sizeof(ftest_t*)*cfg->total_ftests); } ! 201: else ! 202: cfg->ftest=NULL; ! 203: ! 204: for(i=0; i<cfg->total_ftests; i++) { ! 205: if(feof(instream)) break; ! 206: if((cfg->ftest[i]=(ftest_t *)MALLOC(sizeof(ftest_t)))==NULL) ! 207: return allocerr(txt,offset,fname,sizeof(ftest_t)); ! 208: memset(cfg->ftest[i],0,sizeof(ftest_t)); ! 209: get_str(cfg->ftest[i]->ext,instream); ! 210: get_alloc(&offset,cfg->ftest[i]->cmd,LEN_CMD,instream); ! 211: get_alloc(&offset,cfg->ftest[i]->workstr,40,instream); ! 212: #ifdef SCFG ! 213: get_str(cfg->ftest[i]->ar,instream); ! 214: #else ! 215: fread(str,LEN_ARSTR+1,1,instream); ! 216: offset+=LEN_ARSTR+1; ! 217: cfg->ftest[i]->ar=arstr(0,str,cfg); ! 218: #endif ! 219: for(j=0;j<8;j++) ! 220: get_int(n,instream); ! 221: } ! 222: cfg->total_ftests=i; ! 223: ! 224: /*******************/ ! 225: /* Download events */ ! 226: /*******************/ ! 227: ! 228: get_int(cfg->total_dlevents,instream); ! 229: ! 230: if(cfg->total_dlevents) { ! 231: if((cfg->dlevent=(dlevent_t **)MALLOC(sizeof(dlevent_t *)*cfg->total_dlevents)) ! 232: ==NULL) ! 233: return allocerr(txt,offset,fname,sizeof(dlevent_t*)*cfg->total_dlevents); } ! 234: else ! 235: cfg->dlevent=NULL; ! 236: ! 237: for(i=0; i<cfg->total_dlevents; i++) { ! 238: if(feof(instream)) break; ! 239: if((cfg->dlevent[i]=(dlevent_t *)MALLOC(sizeof(dlevent_t)))==NULL) ! 240: return allocerr(txt,offset,fname,sizeof(dlevent_t)); ! 241: memset(cfg->dlevent[i],0,sizeof(dlevent_t)); ! 242: get_str(cfg->dlevent[i]->ext,instream); ! 243: get_alloc(&offset,cfg->dlevent[i]->cmd,LEN_CMD,instream); ! 244: get_alloc(&offset,cfg->dlevent[i]->workstr,40,instream); ! 245: #ifdef SCFG ! 246: get_str(cfg->dlevent[i]->ar,instream); ! 247: #else ! 248: fread(str,LEN_ARSTR+1,1,instream); ! 249: offset+=LEN_ARSTR+1; ! 250: cfg->dlevent[i]->ar=arstr(0,str,cfg); ! 251: #endif ! 252: for(j=0;j<8;j++) ! 253: get_int(n,instream); ! 254: } ! 255: cfg->total_dlevents=i; ! 256: ! 257: ! 258: /***************************/ ! 259: /* File Transfer Protocols */ ! 260: /***************************/ ! 261: ! 262: get_int(cfg->total_prots,instream); ! 263: ! 264: if(cfg->total_prots) { ! 265: if((cfg->prot=(prot_t **)MALLOC(sizeof(prot_t *)*cfg->total_prots))==NULL) ! 266: return allocerr(txt,offset,fname,sizeof(prot_t*)*cfg->total_prots); } ! 267: else ! 268: cfg->prot=NULL; ! 269: ! 270: for(i=0;i<cfg->total_prots;i++) { ! 271: if(feof(instream)) break; ! 272: if((cfg->prot[i]=(prot_t *)MALLOC(sizeof(prot_t)))==NULL) ! 273: return allocerr(txt,offset,fname,sizeof(prot_t)); ! 274: memset(cfg->prot[i],0,sizeof(prot_t)); ! 275: ! 276: get_int(cfg->prot[i]->mnemonic,instream); ! 277: get_alloc(&offset,cfg->prot[i]->name,25,instream); ! 278: get_alloc(&offset,cfg->prot[i]->ulcmd,LEN_CMD,instream); ! 279: get_alloc(&offset,cfg->prot[i]->dlcmd,LEN_CMD,instream); ! 280: get_alloc(&offset,cfg->prot[i]->batulcmd,LEN_CMD,instream); ! 281: get_alloc(&offset,cfg->prot[i]->batdlcmd,LEN_CMD,instream); ! 282: get_alloc(&offset,cfg->prot[i]->blindcmd,LEN_CMD,instream); ! 283: get_alloc(&offset,cfg->prot[i]->bicmd,LEN_CMD,instream); ! 284: get_int(cfg->prot[i]->misc,instream); ! 285: #ifdef SCFG ! 286: get_str(cfg->prot[i]->ar,instream); ! 287: #else ! 288: fread(str,LEN_ARSTR+1,1,instream); ! 289: offset+=LEN_ARSTR+1; ! 290: cfg->prot[i]->ar=arstr(0,str,cfg); ! 291: #endif ! 292: for(j=0;j<8;j++) ! 293: get_int(n,instream); ! 294: } ! 295: ! 296: /************************/ ! 297: /* Alternate File Paths */ ! 298: /************************/ ! 299: ! 300: get_int(cfg->altpaths,instream); ! 301: ! 302: if(cfg->altpaths) { ! 303: if((cfg->altpath=(char **)MALLOC(sizeof(char *)*cfg->altpaths))==NULL) ! 304: return allocerr(txt,offset,fname,sizeof(char *)*cfg->altpaths); } ! 305: else ! 306: cfg->altpath=NULL; ! 307: ! 308: for(i=0;i<cfg->altpaths;i++) { ! 309: if(feof(instream)) break; ! 310: fread(str,LEN_DIR+1,1,instream); ! 311: offset+=LEN_DIR+1; ! 312: backslash(str); ! 313: #ifdef SCFG ! 314: j=LEN_DIR+1; ! 315: #else ! 316: j=strlen(str)+1; ! 317: #endif ! 318: if((cfg->altpath[i]=(char *)MALLOC(j))==NULL) ! 319: return allocerr(txt,offset,fname,j); ! 320: memset(cfg->altpath[i],0,j); ! 321: strcpy(cfg->altpath[i],str); ! 322: for(j=0;j<8;j++) ! 323: get_int(n,instream); ! 324: } ! 325: ! 326: cfg->altpaths=i; ! 327: ! 328: /******************/ ! 329: /* File Libraries */ ! 330: /******************/ ! 331: ! 332: get_int(cfg->total_libs,instream); ! 333: ! 334: if(cfg->total_libs) { ! 335: if((cfg->lib=(lib_t **)MALLOC(sizeof(lib_t *)*cfg->total_libs))==NULL) ! 336: return allocerr(txt,offset,fname,sizeof(lib_t *)*cfg->total_libs); } ! 337: else ! 338: cfg->lib=NULL; ! 339: ! 340: for(i=0;i<cfg->total_libs;i++) { ! 341: if(feof(instream)) break; ! 342: if((cfg->lib[i]=(lib_t *)MALLOC(sizeof(lib_t)))==NULL) ! 343: return allocerr(txt,offset,fname,sizeof(lib_t)); ! 344: memset(cfg->lib[i],0,sizeof(lib_t)); ! 345: cfg->lib[i]->offline_dir=INVALID_DIR; ! 346: ! 347: get_alloc(&offset,cfg->lib[i]->lname,LEN_GLNAME,instream); ! 348: get_alloc(&offset,cfg->lib[i]->sname,LEN_GSNAME,instream); ! 349: ! 350: #if !defined(SCFG) && defined(SAVE_MEMORY) /* Save memory */ ! 351: if(!strcmp(cfg->lib[i]->lname,cfg->lib[i]->sname) && cfg->lib[i]->sname!=scfgnulstr) { ! 352: FREE(cfg->lib[i]->sname); ! 353: cfg->lib[i]->sname=cfg->lib[i]->lname; } ! 354: #endif ! 355: ! 356: #ifdef SCFG ! 357: get_str(cfg->lib[i]->ar,instream); ! 358: #else ! 359: fread(str,1,LEN_ARSTR+1,instream); ! 360: offset+=LEN_ARSTR+1; ! 361: cfg->lib[i]->ar=arstr(0,str,cfg); ! 362: #endif ! 363: for(j=0;j<48;j++) ! 364: get_int(n,instream); ! 365: } ! 366: cfg->total_libs=i; ! 367: ! 368: /********************/ ! 369: /* File Directories */ ! 370: /********************/ ! 371: ! 372: cfg->sysop_dir=cfg->user_dir=cfg->upload_dir=INVALID_DIR; ! 373: get_int(cfg->total_dirs,instream); ! 374: ! 375: if(cfg->total_dirs) { ! 376: if((cfg->dir=(dir_t **)MALLOC(sizeof(dir_t *)*(cfg->total_dirs+1)))==NULL) ! 377: return allocerr(txt,offset,fname,sizeof(dir_t *)*(cfg->total_dirs+1)); } ! 378: else ! 379: cfg->dir=NULL; ! 380: ! 381: for(i=0;i<cfg->total_dirs;i++) { ! 382: if(feof(instream)) break; ! 383: if((cfg->dir[i]=(dir_t *)MALLOC(sizeof(dir_t)))==NULL) ! 384: return allocerr(txt,offset,fname,sizeof(dir_t)); ! 385: memset(cfg->dir[i],0,sizeof(dir_t)); ! 386: ! 387: get_int(cfg->dir[i]->lib,instream); ! 388: get_alloc(&offset,cfg->dir[i]->lname,LEN_SLNAME,instream); ! 389: get_alloc(&offset,cfg->dir[i]->sname,LEN_SSNAME,instream); ! 390: ! 391: #if !defined(SCFG) && defined(SAVE_MEMORY) /* Save memory */ ! 392: if(!strcmp(cfg->dir[i]->lname,cfg->dir[i]->sname) && cfg->dir[i]->sname!=scfgnulstr) { ! 393: FREE(cfg->dir[i]->sname); ! 394: cfg->dir[i]->sname=cfg->dir[i]->lname; } ! 395: #endif ! 396: ! 397: if(!stricmp(cfg->dir[i]->sname,"SYSOP")) /* Sysop upload directory */ ! 398: cfg->sysop_dir=i; ! 399: else if(!stricmp(cfg->dir[i]->sname,"USER")) /* User to User xfer dir */ ! 400: cfg->user_dir=i; ! 401: else if(!stricmp(cfg->dir[i]->sname,"UPLOADS")) /* Upload directory */ ! 402: cfg->upload_dir=i; ! 403: else if(!stricmp(cfg->dir[i]->sname,"OFFLINE")) /* Offline files dir */ ! 404: cfg->lib[cfg->dir[i]->lib]->offline_dir=i; ! 405: ! 406: get_str(cfg->dir[i]->code,instream); ! 407: strlwr(cfg->dir[i]->code); /* temporary Unix-compatibility hack */ ! 408: ! 409: #ifdef SCFG ! 410: get_str(cfg->dir[i]->data_dir,instream); ! 411: #else ! 412: fread(str,LEN_DIR+1,1,instream); /* substitute data dir */ ! 413: offset+=LEN_DIR+1; ! 414: if(str[0]) { ! 415: prep_dir(cfg->ctrl_dir, str); ! 416: if((cfg->dir[i]->data_dir=(char *)MALLOC(strlen(str)+1))==NULL) ! 417: return allocerr(txt,offset,fname,strlen(str)+1); ! 418: strcpy(cfg->dir[i]->data_dir,str); } ! 419: else ! 420: cfg->dir[i]->data_dir=cfg->data_dir_dirs; ! 421: #endif ! 422: ! 423: #ifdef SCFG ! 424: get_str(cfg->dir[i]->ar,instream); ! 425: get_str(cfg->dir[i]->ul_ar,instream); ! 426: get_str(cfg->dir[i]->dl_ar,instream); ! 427: get_str(cfg->dir[i]->op_ar,instream); ! 428: #else ! 429: fread(str,1,LEN_ARSTR+1,instream); ! 430: offset+=LEN_ARSTR+1; ! 431: cfg->dir[i]->ar=arstr(0,str,cfg); ! 432: fread(str,1,LEN_ARSTR+1,instream); ! 433: offset+=LEN_ARSTR+1; ! 434: cfg->dir[i]->ul_ar=arstr(0,str,cfg); ! 435: fread(str,1,LEN_ARSTR+1,instream); ! 436: offset+=LEN_ARSTR+1; ! 437: cfg->dir[i]->dl_ar=arstr(0,str,cfg); ! 438: fread(str,1,LEN_ARSTR+1,instream); ! 439: offset+=LEN_ARSTR+1; ! 440: cfg->dir[i]->op_ar=arstr(0,str,cfg); ! 441: #endif ! 442: fread(str,1,LEN_DIR+1,instream); ! 443: offset+=LEN_DIR+1; ! 444: if(!str[0]) /* no path specified */ ! 445: sprintf(str,"%sdirs/%s/",cfg->data_dir,cfg->dir[i]->code); ! 446: prep_dir(cfg->ctrl_dir, str); ! 447: ! 448: #ifndef SCFG ! 449: if((cfg->dir[i]->path=(char *)MALLOC(strlen(str)+1))==NULL) ! 450: return allocerr(txt,offset,fname,strlen(str)+1); ! 451: #endif ! 452: strcpy(cfg->dir[i]->path,str); ! 453: get_alloc(&offset,cfg->dir[i]->upload_sem,LEN_DIR,instream); ! 454: prep_path(cfg->dir[i]->upload_sem); ! 455: get_int(cfg->dir[i]->maxfiles,instream); ! 456: if(cfg->dir[i]->maxfiles>MAX_FILES) ! 457: cfg->dir[i]->maxfiles=MAX_FILES; ! 458: get_alloc(&offset,cfg->dir[i]->exts,40,instream); ! 459: get_int(cfg->dir[i]->misc,instream); ! 460: get_int(cfg->dir[i]->seqdev,instream); ! 461: get_int(cfg->dir[i]->sort,instream); ! 462: #ifdef SCFG ! 463: get_str(cfg->dir[i]->ex_ar,instream); ! 464: #else ! 465: fread(str,1,LEN_ARSTR+1,instream); ! 466: offset+=LEN_ARSTR+1; ! 467: cfg->dir[i]->ex_ar=arstr(0,str,cfg); ! 468: #endif ! 469: get_int(cfg->dir[i]->maxage,instream); ! 470: get_int(cfg->dir[i]->up_pct,instream); ! 471: get_int(cfg->dir[i]->dn_pct,instream); ! 472: get_int(c,instream); ! 473: for(j=0;j<24;j++) ! 474: get_int(n,instream); } ! 475: ! 476: cfg->total_dirs=i; ! 477: ! 478: #ifndef NO_TEXT_CFG /* This must be the last section in CFG file */ ! 479: ! 480: /**********************/ ! 481: /* Text File Sections */ ! 482: /**********************/ ! 483: ! 484: get_int(cfg->total_txtsecs,instream); ! 485: ! 486: ! 487: if(cfg->total_txtsecs) { ! 488: if((cfg->txtsec=(txtsec_t **)MALLOC(sizeof(txtsec_t *)*cfg->total_txtsecs))==NULL) ! 489: return allocerr(txt,offset,fname,sizeof(txtsec_t *)*cfg->total_txtsecs); } ! 490: else ! 491: cfg->txtsec=NULL; ! 492: ! 493: for(i=0;i<cfg->total_txtsecs;i++) { ! 494: if(feof(instream)) break; ! 495: if((cfg->txtsec[i]=(txtsec_t *)MALLOC(sizeof(txtsec_t)))==NULL) ! 496: return allocerr(txt,offset,fname,sizeof(txtsec_t)); ! 497: memset(cfg->txtsec[i],0,sizeof(txtsec_t)); ! 498: ! 499: get_alloc(&offset,cfg->txtsec[i]->name,40,instream); ! 500: get_str(cfg->txtsec[i]->code,instream); ! 501: strlwr(cfg->txtsec[i]->code); /* temporary Unix-compatibility hack */ ! 502: #ifdef SCFG ! 503: get_str(cfg->txtsec[i]->ar,instream); ! 504: #else ! 505: fread(str,LEN_ARSTR+1,1,instream); ! 506: offset+=LEN_ARSTR+1; ! 507: cfg->txtsec[i]->ar=arstr(0,str,cfg); ! 508: #endif ! 509: for(j=0;j<8;j++) ! 510: get_int(n,instream); ! 511: } ! 512: cfg->total_txtsecs=i; ! 513: ! 514: #endif ! 515: ! 516: fclose(instream); ! 517: if(txt->readit && txt->readit[0]) ! 518: lprintf(txt->readit,fname); ! 519: ! 520: return (TRUE); ! 521: } ! 522: ! 523: #endif ! 524: ! 525: ! 526: #ifndef NO_XTRN_CFG ! 527: ! 528: /****************************************************************************/ ! 529: /* Reads in XTRN.CNF and initializes the associated variables */ ! 530: /****************************************************************************/ ! 531: BOOL read_xtrn_cfg(scfg_t* cfg, read_cfg_text_t* txt) ! 532: { ! 533: char str[256],fname[13],c; ! 534: short i,j,n; ! 535: long offset=0; ! 536: FILE *instream; ! 537: ! 538: strcpy(fname,"xtrn.cnf"); ! 539: sprintf(str,"%s%s",cfg->ctrl_dir,fname); ! 540: if((instream=fnopen(NULL,str,O_RDONLY))==NULL) { ! 541: lprintf(txt->openerr,str); ! 542: return(FALSE); } ! 543: ! 544: if(txt->reading && txt->reading[0]) ! 545: lprintf(txt->reading,fname); ! 546: ! 547: /*************/ ! 548: /* Swap list */ ! 549: /*************/ ! 550: ! 551: get_int(cfg->total_swaps,instream); ! 552: ! 553: if(cfg->total_swaps) { ! 554: if((cfg->swap=(swap_t **)MALLOC(sizeof(swap_t *)*cfg->total_swaps))==NULL) ! 555: return allocerr(txt,offset,fname,sizeof(swap_t *)*cfg->total_swaps); } ! 556: else ! 557: cfg->swap=NULL; ! 558: ! 559: for(i=0;i<cfg->total_swaps;i++) { ! 560: if(feof(instream)) break; ! 561: if((cfg->swap[i]=(swap_t *)MALLOC(sizeof(swap_t)))==NULL) ! 562: return allocerr(txt,offset,fname,sizeof(swap_t)); ! 563: get_alloc(&offset,cfg->swap[i]->cmd,LEN_CMD,instream); } ! 564: cfg->total_swaps=i; ! 565: ! 566: /********************/ ! 567: /* External Editors */ ! 568: /********************/ ! 569: ! 570: get_int(cfg->total_xedits,instream); ! 571: ! 572: if(cfg->total_xedits) { ! 573: if((cfg->xedit=(xedit_t **)MALLOC(sizeof(xedit_t *)*cfg->total_xedits))==NULL) ! 574: return allocerr(txt,offset,fname,sizeof(xedit_t *)*cfg->total_xedits); } ! 575: else ! 576: cfg->xedit=NULL; ! 577: ! 578: for(i=0;i<cfg->total_xedits;i++) { ! 579: if(feof(instream)) break; ! 580: if((cfg->xedit[i]=(xedit_t *)MALLOC(sizeof(xedit_t)))==NULL) ! 581: return allocerr(txt,offset,fname,sizeof(xedit_t)); ! 582: memset(cfg->xedit[i],0,sizeof(xedit_t)); ! 583: ! 584: get_alloc(&offset,cfg->xedit[i]->name,40,instream); ! 585: get_str(cfg->xedit[i]->code,instream); ! 586: get_alloc(&offset,cfg->xedit[i]->lcmd,LEN_CMD,instream); ! 587: get_alloc(&offset,cfg->xedit[i]->rcmd,LEN_CMD,instream); ! 588: ! 589: #if !defined(SCFG) && defined(SAVE_MEMORY) /* Save memory */ ! 590: if(!strcmp(cfg->xedit[i]->lcmd,cfg->xedit[i]->rcmd) && cfg->xedit[i]->rcmd!=scfgnulstr) { ! 591: FREE(cfg->xedit[i]->rcmd); ! 592: cfg->xedit[i]->rcmd=cfg->xedit[i]->lcmd; } ! 593: #endif ! 594: ! 595: get_int(cfg->xedit[i]->misc,instream); ! 596: #ifdef SCFG ! 597: get_str(cfg->xedit[i]->ar,instream); ! 598: #else ! 599: fread(str,LEN_ARSTR+1,1,instream); ! 600: offset+=LEN_ARSTR+1; ! 601: cfg->xedit[i]->ar=arstr(0,str,cfg); ! 602: #endif ! 603: get_int(cfg->xedit[i]->type,instream); ! 604: get_int(c,instream); ! 605: for(j=0;j<7;j++) ! 606: get_int(n,instream); ! 607: } ! 608: cfg->total_xedits=i; ! 609: ! 610: ! 611: /*****************************/ ! 612: /* External Program Sections */ ! 613: /*****************************/ ! 614: ! 615: get_int(cfg->total_xtrnsecs,instream); ! 616: ! 617: if(cfg->total_xtrnsecs) { ! 618: if((cfg->xtrnsec=(xtrnsec_t **)MALLOC(sizeof(xtrnsec_t *)*cfg->total_xtrnsecs)) ! 619: ==NULL) ! 620: return allocerr(txt,offset,fname,sizeof(xtrnsec_t *)*cfg->total_xtrnsecs); } ! 621: else ! 622: cfg->xtrnsec=NULL; ! 623: ! 624: for(i=0;i<cfg->total_xtrnsecs;i++) { ! 625: if(feof(instream)) break; ! 626: if((cfg->xtrnsec[i]=(xtrnsec_t *)MALLOC(sizeof(xtrnsec_t)))==NULL) ! 627: return allocerr(txt,offset,fname,sizeof(xtrnsec_t)); ! 628: memset(cfg->xtrnsec[i],0,sizeof(xtrnsec_t)); ! 629: ! 630: get_alloc(&offset,cfg->xtrnsec[i]->name,40,instream); ! 631: get_str(cfg->xtrnsec[i]->code,instream); ! 632: strlwr(cfg->xtrnsec[i]->code); /* temporary Unix-compatibility hack */ ! 633: #ifdef SCFG ! 634: get_str(cfg->xtrnsec[i]->ar,instream); ! 635: #else ! 636: fread(str,LEN_ARSTR+1,1,instream); ! 637: offset+=LEN_ARSTR+1; ! 638: cfg->xtrnsec[i]->ar=arstr(0,str,cfg); ! 639: #endif ! 640: for(j=0;j<8;j++) ! 641: get_int(n,instream); ! 642: } ! 643: cfg->total_xtrnsecs=i; ! 644: ! 645: ! 646: /*********************/ ! 647: /* External Programs */ ! 648: /*********************/ ! 649: ! 650: get_int(cfg->total_xtrns,instream); ! 651: ! 652: if(cfg->total_xtrns) { ! 653: if((cfg->xtrn=(xtrn_t **)MALLOC(sizeof(xtrn_t *)*cfg->total_xtrns))==NULL) ! 654: return allocerr(txt,offset,fname,sizeof(xtrn_t *)*cfg->total_xtrns); } ! 655: else ! 656: cfg->xtrn=NULL; ! 657: ! 658: for(i=0;i<cfg->total_xtrns;i++) { ! 659: if(feof(instream)) break; ! 660: if((cfg->xtrn[i]=(xtrn_t *)MALLOC(sizeof(xtrn_t)))==NULL) ! 661: return allocerr(txt,offset,fname,sizeof(xtrn_t)); ! 662: memset(cfg->xtrn[i],0,sizeof(xtrn_t)); ! 663: ! 664: get_int(cfg->xtrn[i]->sec,instream); ! 665: get_alloc(&offset,cfg->xtrn[i]->name,40,instream); ! 666: get_str(cfg->xtrn[i]->code,instream); ! 667: #ifdef SCFG ! 668: get_str(cfg->xtrn[i]->ar,instream); ! 669: get_str(cfg->xtrn[i]->run_ar,instream); ! 670: #else ! 671: fread(str,LEN_ARSTR+1,1,instream); ! 672: offset+=LEN_ARSTR+1; ! 673: cfg->xtrn[i]->ar=arstr(0,str,cfg); ! 674: fread(str,LEN_ARSTR+1,1,instream); ! 675: offset+=LEN_ARSTR+1; ! 676: cfg->xtrn[i]->run_ar=arstr(0,str,cfg); ! 677: #endif ! 678: get_int(cfg->xtrn[i]->type,instream); ! 679: get_int(cfg->xtrn[i]->misc,instream); ! 680: get_int(cfg->xtrn[i]->event,instream); ! 681: get_int(cfg->xtrn[i]->cost,instream); ! 682: get_alloc(&offset,cfg->xtrn[i]->cmd,LEN_CMD,instream); ! 683: get_alloc(&offset,cfg->xtrn[i]->clean,LEN_CMD,instream); ! 684: fread(str,LEN_DIR+1,1,instream); ! 685: offset+=LEN_DIR+1; ! 686: if(strcmp(str+1,":\\") && strcmp(str+1,":/") && ! 687: (str[strlen(str)-1]=='\\' || str[strlen(str)-1]=='/')) // C:\ is valid ! 688: str[strlen(str)-1]=0; // C:\SBBS\XTRN\GAME\ is not ! 689: #ifdef SBBS ! 690: if(!str[0]) /* Minimum path of '.' */ ! 691: strcpy(str,"."); ! 692: prep_dir(cfg->ctrl_dir, str); ! 693: if((cfg->xtrn[i]->path=(char *)MALLOC(strlen(str)+1))==NULL) ! 694: return allocerr(txt,offset,fname,strlen(str)+1); ! 695: #endif ! 696: strcpy(cfg->xtrn[i]->path,str); ! 697: get_int(cfg->xtrn[i]->textra,instream); ! 698: get_int(cfg->xtrn[i]->maxtime,instream); ! 699: for(j=0;j<7;j++) ! 700: get_int(n,instream); ! 701: } ! 702: cfg->total_xtrns=i; ! 703: ! 704: ! 705: /****************/ ! 706: /* Timed Events */ ! 707: /****************/ ! 708: ! 709: get_int(cfg->total_events,instream); ! 710: ! 711: if(cfg->total_events) { ! 712: if((cfg->event=(event_t **)MALLOC(sizeof(event_t *)*cfg->total_events))==NULL) ! 713: return allocerr(txt,offset,fname,sizeof(event_t *)*cfg->total_events); } ! 714: else ! 715: cfg->event=NULL; ! 716: ! 717: for(i=0;i<cfg->total_events;i++) { ! 718: if(feof(instream)) break; ! 719: if((cfg->event[i]=(event_t *)MALLOC(sizeof(event_t)))==NULL) ! 720: return allocerr(txt,offset,fname,sizeof(event_t)); ! 721: memset(cfg->event[i],0,sizeof(event_t)); ! 722: ! 723: get_str(cfg->event[i]->code,instream); ! 724: strlwr (cfg->event[i]->code); /* temporary Unix-compatibility hack */ ! 725: get_alloc(&offset,cfg->event[i]->cmd,LEN_CMD,instream); ! 726: get_int(cfg->event[i]->days,instream); ! 727: get_int(cfg->event[i]->time,instream); ! 728: get_int(cfg->event[i]->node,instream); ! 729: get_int(cfg->event[i]->misc,instream); ! 730: fread(str,LEN_DIR+1,1,instream); ! 731: offset+=LEN_DIR+1; ! 732: #ifdef SBBS ! 733: prep_dir(cfg->ctrl_dir, str); ! 734: if((cfg->event[i]->dir=(char *)MALLOC(strlen(str)+1))==NULL) ! 735: return allocerr(txt,offset,fname,strlen(str)+1); ! 736: #endif ! 737: strcpy(cfg->event[i]->dir,str); ! 738: ! 739: for(j=0;j<8;j++) ! 740: get_int(n,instream); ! 741: } ! 742: cfg->total_events=i; ! 743: ! 744: /********************************/ ! 745: /* Native (32-bit) Program list */ ! 746: /********************************/ ! 747: ! 748: get_int(cfg->total_natvpgms,instream); ! 749: ! 750: if(cfg->total_natvpgms) { ! 751: if((cfg->natvpgm=(natvpgm_t **)MALLOC(sizeof(natvpgm_t *)*cfg->total_natvpgms))==NULL) ! 752: return allocerr(txt,offset,fname,sizeof(natvpgm_t *)*cfg->total_natvpgms); } ! 753: else ! 754: cfg->natvpgm=NULL; ! 755: ! 756: for(i=0;i<cfg->total_natvpgms;i++) { ! 757: if(feof(instream)) break; ! 758: if((cfg->natvpgm[i]=(natvpgm_t *)MALLOC(sizeof(natvpgm_t)))==NULL) ! 759: return allocerr(txt,offset,fname,sizeof(natvpgm_t)); ! 760: get_alloc(&offset,cfg->natvpgm[i]->name,12,instream); ! 761: cfg->natvpgm[i]->misc=0; } ! 762: cfg->total_natvpgms=i; ! 763: for(i=0;i<cfg->total_natvpgms;i++) { ! 764: if(feof(instream)) break; ! 765: get_int(cfg->natvpgm[i]->misc,instream); } ! 766: ! 767: ! 768: fclose(instream); ! 769: if(txt->readit && txt->readit[0]) ! 770: lprintf(txt->readit,fname); ! 771: ! 772: return(TRUE); ! 773: } ! 774: ! 775: #endif ! 776: ! 777: ! 778: #ifndef NO_CHAT_CFG ! 779: ! 780: /****************************************************************************/ ! 781: /* Reads in CHAT.CNF and initializes the associated variables */ ! 782: /****************************************************************************/ ! 783: BOOL read_chat_cfg(scfg_t* cfg, read_cfg_text_t* txt) ! 784: { ! 785: char str[256],fname[13]; ! 786: short i,j,n; ! 787: long offset=0; ! 788: FILE *instream; ! 789: ! 790: strcpy(fname,"chat.cnf"); ! 791: sprintf(str,"%s%s",cfg->ctrl_dir,fname); ! 792: if((instream=fnopen(NULL,str,O_RDONLY))==NULL) { ! 793: lprintf(txt->openerr,str); ! 794: return(FALSE); } ! 795: ! 796: if(txt->reading && txt->reading[0]) ! 797: lprintf(txt->reading,fname); ! 798: ! 799: /*********/ ! 800: /* Gurus */ ! 801: /*********/ ! 802: ! 803: get_int(cfg->total_gurus,instream); ! 804: ! 805: if(cfg->total_gurus) { ! 806: if((cfg->guru=(guru_t **)MALLOC(sizeof(guru_t *)*cfg->total_gurus))==NULL) ! 807: return allocerr(txt,offset,fname,sizeof(guru_t *)*cfg->total_gurus); } ! 808: else ! 809: cfg->guru=NULL; ! 810: ! 811: for(i=0;i<cfg->total_gurus;i++) { ! 812: if(feof(instream)) break; ! 813: if((cfg->guru[i]=(guru_t *)MALLOC(sizeof(guru_t)))==NULL) ! 814: return allocerr(txt,offset,fname,sizeof(guru_t)); ! 815: memset(cfg->guru[i],0,sizeof(guru_t)); ! 816: ! 817: get_alloc(&offset,cfg->guru[i]->name,25,instream); ! 818: get_str(cfg->guru[i]->code,instream); ! 819: strlwr (cfg->guru[i]->code); /* temporary Unix-compatibility hack */ ! 820: ! 821: #ifdef SCFG ! 822: get_str(cfg->guru[i]->ar,instream); ! 823: #else ! 824: fread(str,LEN_ARSTR+1,1,instream); ! 825: offset+=LEN_ARSTR+1; ! 826: cfg->guru[i]->ar=arstr(0,str,cfg); ! 827: #endif ! 828: for(j=0;j<8;j++) ! 829: get_int(n,instream); ! 830: } ! 831: cfg->total_chans=i; ! 832: ! 833: ! 834: /********************/ ! 835: /* Chat Action Sets */ ! 836: /********************/ ! 837: ! 838: get_int(cfg->total_actsets,instream); ! 839: ! 840: if(cfg->total_actsets) { ! 841: if((cfg->actset=(actset_t **)MALLOC(sizeof(actset_t *)*cfg->total_actsets))==NULL) ! 842: return allocerr(txt,offset,fname,sizeof(actset_t *)*cfg->total_actsets); } ! 843: else ! 844: cfg->actset=NULL; ! 845: ! 846: for(i=0;i<cfg->total_actsets;i++) { ! 847: if(feof(instream)) break; ! 848: if((cfg->actset[i]=(actset_t *)MALLOC(sizeof(actset_t)))==NULL) ! 849: return allocerr(txt,offset,fname,sizeof(actset_t)); ! 850: get_alloc(&offset,cfg->actset[i]->name,25,instream); ! 851: } ! 852: cfg->total_actsets=i; ! 853: ! 854: ! 855: /****************/ ! 856: /* Chat Actions */ ! 857: /****************/ ! 858: ! 859: get_int(cfg->total_chatacts,instream); ! 860: ! 861: if(cfg->total_chatacts) { ! 862: if((cfg->chatact=(chatact_t **)MALLOC(sizeof(chatact_t *)*cfg->total_chatacts)) ! 863: ==NULL) ! 864: return allocerr(txt,offset,fname,sizeof(chatact_t *)*cfg->total_chatacts); } ! 865: else ! 866: cfg->chatact=NULL; ! 867: ! 868: for(i=0;i<cfg->total_chatacts;i++) { ! 869: if(feof(instream)) break; ! 870: if((cfg->chatact[i]=(chatact_t *)MALLOC(sizeof(chatact_t)))==NULL) ! 871: return allocerr(txt,offset,fname,sizeof(chatact_t)); ! 872: memset(cfg->chatact[i],0,sizeof(chatact_t)); ! 873: ! 874: get_int(cfg->chatact[i]->actset,instream); ! 875: get_alloc(&offset,cfg->chatact[i]->cmd,LEN_CHATACTCMD,instream); ! 876: get_alloc(&offset,cfg->chatact[i]->out,LEN_CHATACTOUT,instream); ! 877: for(j=0;j<8;j++) ! 878: get_int(n,instream); ! 879: } ! 880: ! 881: cfg->total_chatacts=i; ! 882: ! 883: ! 884: /***************************/ ! 885: /* Multinode Chat Channels */ ! 886: /***************************/ ! 887: ! 888: get_int(cfg->total_chans,instream); ! 889: ! 890: if(cfg->total_chans) { ! 891: if((cfg->chan=(chan_t **)MALLOC(sizeof(chan_t *)*cfg->total_chans))==NULL) ! 892: return allocerr(txt,offset,fname,sizeof(chan_t *)*cfg->total_chans); } ! 893: else ! 894: cfg->chan=NULL; ! 895: ! 896: for(i=0;i<cfg->total_chans;i++) { ! 897: if(feof(instream)) break; ! 898: if((cfg->chan[i]=(chan_t *)MALLOC(sizeof(chan_t)))==NULL) ! 899: return allocerr(txt,offset,fname,sizeof(chan_t)); ! 900: memset(cfg->chan[i],0,sizeof(chan_t)); ! 901: ! 902: get_int(cfg->chan[i]->actset,instream); ! 903: get_alloc(&offset,cfg->chan[i]->name,25,instream); ! 904: ! 905: get_str(cfg->chan[i]->code,instream); ! 906: ! 907: #ifdef SCFG ! 908: get_str(cfg->chan[i]->ar,instream); ! 909: #else ! 910: fread(str,LEN_ARSTR+1,1,instream); ! 911: offset+=LEN_ARSTR+1; ! 912: cfg->chan[i]->ar=arstr(0,str,cfg); ! 913: #endif ! 914: get_int(cfg->chan[i]->cost,instream); ! 915: get_int(cfg->chan[i]->guru,instream); ! 916: get_int(cfg->chan[i]->misc,instream); ! 917: for(j=0;j<8;j++) ! 918: get_int(n,instream); } ! 919: cfg->total_chans=i; ! 920: ! 921: ! 922: /**************/ ! 923: /* Chat Pages */ ! 924: /**************/ ! 925: ! 926: get_int(cfg->total_pages,instream); ! 927: ! 928: if(cfg->total_pages) { ! 929: if((cfg->page=(page_t **)MALLOC(sizeof(page_t *)*cfg->total_pages))==NULL) ! 930: return allocerr(txt,offset,fname,sizeof(page_t *)*cfg->total_pages); } ! 931: else ! 932: cfg->page=NULL; ! 933: ! 934: for(i=0;i<cfg->total_pages;i++) { ! 935: if(feof(instream)) break; ! 936: if((cfg->page[i]=(page_t *)MALLOC(sizeof(page_t)))==NULL) ! 937: return allocerr(txt,offset,fname,sizeof(page_t)); ! 938: memset(cfg->page[i],0,sizeof(page_t)); ! 939: ! 940: get_alloc(&offset,cfg->page[i]->cmd,LEN_CMD,instream); ! 941: ! 942: #ifdef SCFG ! 943: get_str(cfg->page[i]->ar,instream); ! 944: #else ! 945: fread(str,LEN_ARSTR+1,1,instream); ! 946: offset+=LEN_ARSTR+1; ! 947: cfg->page[i]->ar=arstr(0,str,cfg); ! 948: #endif ! 949: get_int(cfg->page[i]->misc,instream); ! 950: for(j=0;j<8;j++) ! 951: get_int(n,instream); ! 952: } ! 953: cfg->total_pages=i; ! 954: ! 955: ! 956: fclose(instream); ! 957: if(txt->readit && txt->readit[0]) ! 958: lprintf(txt->readit,fname); ! 959: ! 960: return(TRUE); ! 961: } ! 962: ! 963: #endif ! 964: ! 965: /****************************************************************************/ ! 966: /* Read one line of up to 256 characters from the file pointed to by */ ! 967: /* 'stream' and put upto 'maxlen' number of character into 'outstr' and */ ! 968: /* truncate spaces off end of 'outstr'. */ ! 969: /****************************************************************************/ ! 970: char *readline(long *offset, char *outstr, int maxlen, FILE *instream) ! 971: { ! 972: char str[257]; ! 973: ! 974: if(fgets(str,256,instream)==NULL) ! 975: return(NULL); ! 976: sprintf(outstr,"%.*s",maxlen,str); ! 977: truncsp(outstr); ! 978: (*offset)+=maxlen; ! 979: return(outstr); ! 980: } ! 981: ! 982: #undef readline_alloc ! 983: ! 984: char *readline_alloc(long *offset, char *outstr, int maxline, FILE *instream) ! 985: { ! 986: char str[257]; ! 987: ! 988: readline(offset,str,maxline,instream); ! 989: if((outstr=(char *)MALLOC(strlen(str)+1))==NULL) ! 990: return(NULL); ! 991: strcpy(outstr,str); ! 992: return(outstr); ! 993: } ! 994: ! 995: /****************************************************************************/ ! 996: /* Turns char string of flags into a long */ ! 997: /****************************************************************************/ ! 998: long aftol(char *str) ! 999: { ! 1000: char c=0; ! 1001: ulong l=0UL; ! 1002: ! 1003: strupr(str); ! 1004: while(str[c]) { ! 1005: if(str[c]>='A' && str[c]<='Z') ! 1006: l|=FLAG(str[c]); ! 1007: c++; } ! 1008: return(l); ! 1009: } ! 1010: ! 1011: /*****************************************************************************/ ! 1012: /* Converts a long into an ASCII Flag string (A-Z) that represents bits 0-25 */ ! 1013: /*****************************************************************************/ ! 1014: char *ltoaf(long l,char *str) ! 1015: { ! 1016: char c=0; ! 1017: ! 1018: while(c<26) { ! 1019: if(l&(long)(1L<<c)) ! 1020: str[c]='A'+c; ! 1021: else str[c]=SP; ! 1022: c++; } ! 1023: str[c]=0; ! 1024: return(str); ! 1025: } ! 1026: ! 1027: /****************************************************************************/ ! 1028: /* Returns the actual attribute code from a string of ATTR characters */ ! 1029: /****************************************************************************/ ! 1030: uchar attrstr(char *str) ! 1031: { ! 1032: uchar atr; ! 1033: ulong l=0; ! 1034: ! 1035: atr=LIGHTGRAY; ! 1036: while(str[l]) { ! 1037: switch(str[l]) { ! 1038: case 'H': /* High intensity */ ! 1039: atr|=HIGH; ! 1040: break; ! 1041: case 'I': /* Blink */ ! 1042: atr|=BLINK; ! 1043: break; ! 1044: case 'K': /* Black */ ! 1045: atr=(atr&0xf8)|BLACK; ! 1046: break; ! 1047: case 'W': /* White */ ! 1048: atr=(atr&0xf8)|LIGHTGRAY; ! 1049: break; ! 1050: case '0': /* Black Background */ ! 1051: atr=(uchar)((atr&0x8f)|(BLACK<<4)); ! 1052: break; ! 1053: case '7': /* White Background */ ! 1054: atr=(uchar)((atr&0x8f)|(LIGHTGRAY<<4)); ! 1055: break; ! 1056: case 'R': ! 1057: atr=(uchar)((atr&0xf8)|RED); ! 1058: break; ! 1059: case 'G': ! 1060: atr=(uchar)((atr&0xf8)|GREEN); ! 1061: break; ! 1062: case 'Y': /* Yellow */ ! 1063: atr=(uchar)((atr&0xf8)|BROWN); ! 1064: break; ! 1065: case 'B': ! 1066: atr=(uchar)((atr&0xf8)|BLUE); ! 1067: break; ! 1068: case 'M': ! 1069: atr=(uchar)((atr&0xf8)|MAGENTA); ! 1070: break; ! 1071: case 'C': ! 1072: atr=(uchar)((atr&0xf8)|CYAN); ! 1073: break; ! 1074: case '1': /* Red Background */ ! 1075: atr=(uchar)((atr&0x8f)|(RED<<4)); ! 1076: break; ! 1077: case '2': /* Green Background */ ! 1078: atr=(uchar)((atr&0x8f)|(GREEN<<4)); ! 1079: break; ! 1080: case '3': /* Yellow Background */ ! 1081: atr=(uchar)((atr&0x8f)|(BROWN<<4)); ! 1082: break; ! 1083: case '4': /* Blue Background */ ! 1084: atr=(uchar)((atr&0x8f)|(BLUE<<4)); ! 1085: break; ! 1086: case '5': /* Magenta Background */ ! 1087: atr=(uchar)((atr&0x8f)|(MAGENTA<<4)); ! 1088: break; ! 1089: case '6': /* Cyan Background */ ! 1090: atr=(uchar)((atr&0x8f)|(CYAN<<4)); ! 1091: break; } ! 1092: l++; } ! 1093: return(atr); ! 1094: } ! 1095: ! 1096: void free_file_cfg(scfg_t* cfg) ! 1097: { ! 1098: uint i; ! 1099: ! 1100: for(i=0;i<cfg->total_fextrs;i++) ! 1101: FREE_AND_NULL(cfg->fextr[i]); ! 1102: FREE_AND_NULL(cfg->fextr); ! 1103: ! 1104: for(i=0;i<cfg->total_fcomps;i++) ! 1105: FREE_AND_NULL(cfg->fcomp[i]); ! 1106: FREE_AND_NULL(cfg->fcomp); ! 1107: ! 1108: for(i=0;i<cfg->total_fviews;i++) ! 1109: FREE_AND_NULL(cfg->fview[i]); ! 1110: FREE_AND_NULL(cfg->fview); ! 1111: ! 1112: for(i=0;i<cfg->total_ftests;i++) ! 1113: FREE_AND_NULL(cfg->ftest[i]); ! 1114: FREE_AND_NULL(cfg->ftest); ! 1115: ! 1116: for(i=0;i<cfg->total_dlevents;i++) ! 1117: FREE_AND_NULL(cfg->dlevent[i]); ! 1118: FREE_AND_NULL(cfg->dlevent); ! 1119: ! 1120: for(i=0;i<cfg->total_prots;i++) ! 1121: FREE_AND_NULL(cfg->prot[i]); ! 1122: FREE_AND_NULL(cfg->prot); ! 1123: ! 1124: for(i=0;i<cfg->altpaths;i++) ! 1125: FREE_AND_NULL(cfg->altpath[i]); ! 1126: FREE_AND_NULL(cfg->altpath); ! 1127: ! 1128: for(i=0;i<cfg->total_libs;i++) ! 1129: FREE_AND_NULL(cfg->lib[i]); ! 1130: FREE_AND_NULL(cfg->lib); ! 1131: ! 1132: for(i=0;i<cfg->total_dirs;i++) ! 1133: FREE_AND_NULL(cfg->dir[i]); ! 1134: FREE_AND_NULL(cfg->dir); ! 1135: ! 1136: for(i=0;i<cfg->total_txtsecs;i++) ! 1137: FREE_AND_NULL(cfg->txtsec[i]); ! 1138: FREE_AND_NULL(cfg->txtsec); ! 1139: } ! 1140: ! 1141: void free_chat_cfg(scfg_t* cfg) ! 1142: { ! 1143: int i; ! 1144: ! 1145: for(i=0;i<cfg->total_actsets;i++) ! 1146: FREE_AND_NULL(cfg->actset[i]); ! 1147: FREE_AND_NULL(cfg->actset); ! 1148: ! 1149: for(i=0;i<cfg->total_chatacts;i++) ! 1150: FREE_AND_NULL(cfg->chatact[i]); ! 1151: FREE_AND_NULL(cfg->chatact); ! 1152: ! 1153: for(i=0;i<cfg->total_chans;i++) ! 1154: FREE_AND_NULL(cfg->chan[i]); ! 1155: FREE_AND_NULL(cfg->chan); ! 1156: ! 1157: for(i=0;i<cfg->total_gurus;i++) ! 1158: FREE_AND_NULL(cfg->guru[i]); ! 1159: FREE_AND_NULL(cfg->guru); ! 1160: ! 1161: for(i=0;i<cfg->total_pages;i++) ! 1162: FREE_AND_NULL(cfg->page[i]); ! 1163: FREE_AND_NULL(cfg->page); ! 1164: ! 1165: } ! 1166: ! 1167: void free_xtrn_cfg(scfg_t* cfg) ! 1168: { ! 1169: int i; ! 1170: ! 1171: for(i=0;i<cfg->total_swaps;i++) ! 1172: FREE_AND_NULL(cfg->swap[i]); ! 1173: FREE_AND_NULL(cfg->swap); ! 1174: ! 1175: for(i=0;i<cfg->total_xedits;i++) ! 1176: FREE_AND_NULL(cfg->xedit[i]); ! 1177: FREE_AND_NULL(cfg->xedit); ! 1178: ! 1179: for(i=0;i<cfg->total_xtrnsecs;i++) ! 1180: FREE_AND_NULL(cfg->xtrnsec[i]); ! 1181: FREE_AND_NULL(cfg->xtrnsec); ! 1182: ! 1183: for(i=0;i<cfg->total_xtrns;i++) ! 1184: FREE_AND_NULL(cfg->xtrn[i]); ! 1185: FREE_AND_NULL(cfg->xtrn); ! 1186: ! 1187: for(i=0;i<cfg->total_events;i++) ! 1188: FREE_AND_NULL(cfg->event[i]); ! 1189: FREE_AND_NULL(cfg->event); ! 1190: ! 1191: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.