Annotation of sbbs/sbbs3/scfgsave.c, revision 1.1

1.1     ! root        1: /* scfgsave.c */
        !             2: 
        !             3: /* Synchronet configuration file save routines */
        !             4: 
        !             5: /* $Id: scfgsave.c,v 1.44 2004/10/21 08:58:25 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 2004 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: 
        !            40: BOOL no_msghdr=FALSE,all_msghdr=FALSE;
        !            41: 
        !            42: static char nulbuf[256]={0};
        !            43: static int  pslen;
        !            44: #define put_int(var,stream) fwrite(&var,1,sizeof(var),stream)
        !            45: #define put_str(var,stream) { pslen=strlen(var); \
        !            46:                                                        fwrite(var,1,pslen > sizeof(var) \
        !            47:                                                                ? sizeof(var) : pslen ,stream); \
        !            48:                                                        fwrite(nulbuf,1,pslen > sizeof(var) \
        !            49:                                                                ? 0 : sizeof(var)-pslen,stream); }
        !            50: 
        !            51: /****************************************************************************/
        !            52: /****************************************************************************/
        !            53: BOOL DLLCALL save_cfg(scfg_t* cfg, int backup_level)
        !            54: {
        !            55:        int i;
        !            56: 
        !            57:        if(cfg->prepped)
        !            58:                return(FALSE);
        !            59: 
        !            60:        for(i=0;i<cfg->sys_nodes;i++) {
        !            61:                if(cfg->node_path[i][0]==0) 
        !            62:                        sprintf(cfg->node_path[i],"../node%d",i+1);
        !            63:                cfg->node_num=i+1;
        !            64:                if(!write_node_cfg(cfg,backup_level))
        !            65:                        return(FALSE);
        !            66:        }
        !            67:        if(!write_main_cfg(cfg,backup_level))
        !            68:                return(FALSE);
        !            69:        if(!write_msgs_cfg(cfg,backup_level))
        !            70:                return(FALSE);
        !            71:        if(!write_file_cfg(cfg,backup_level))
        !            72:                return(FALSE);
        !            73:        if(!write_chat_cfg(cfg,backup_level))
        !            74:                return(FALSE);
        !            75:        if(!write_xtrn_cfg(cfg,backup_level))
        !            76:                return(FALSE);
        !            77: 
        !            78:        return(TRUE);
        !            79: }
        !            80: 
        !            81: BOOL DLLCALL fcopy(char* src, char* dest)
        !            82: {
        !            83:        int             ch;
        !            84:        ulong   count=0;
        !            85:        FILE*   in;
        !            86:        FILE*   out;
        !            87:        BOOL    success=TRUE;
        !            88: 
        !            89:        if((in=fopen(src,"rb"))==NULL)
        !            90:                return(FALSE);
        !            91:        if((out=fopen(dest,"wb"))==NULL) {
        !            92:                fclose(in);
        !            93:                return(FALSE);
        !            94:        }
        !            95: 
        !            96:        while(!feof(in)) {
        !            97:                if((ch=fgetc(in))==EOF)
        !            98:                        break;
        !            99:                if(fputc(ch,out)==EOF) {
        !           100:                        success=FALSE;
        !           101:                        break;
        !           102:                }
        !           103:                if(((count++)%(32*1024))==0)
        !           104:                        YIELD();
        !           105:        }
        !           106: 
        !           107:        fclose(in);
        !           108:        fclose(out);
        !           109: 
        !           110:        return(success);
        !           111: }
        !           112: 
        !           113: /****************************************************************************/
        !           114: /****************************************************************************/
        !           115: BOOL DLLCALL backup(char *fname, int backup_level, BOOL ren)
        !           116: {
        !           117:        char    oldname[MAX_PATH+1];
        !           118:        char    newname[MAX_PATH+1];
        !           119:        char*   ext;
        !           120:        int             i;
        !           121:        int             len;
        !           122: 
        !           123:        if((ext=strrchr(fname,'.'))==NULL)
        !           124:                ext="";
        !           125: 
        !           126:        len=strlen(fname)-strlen(ext);
        !           127: 
        !           128:        for(i=backup_level;i;i--) {
        !           129:                safe_snprintf(newname,sizeof(newname),"%.*s.%d%s",len,fname,i-1,ext);
        !           130:                if(i==backup_level)
        !           131:                        if(fexist(newname) && remove(newname)!=0)
        !           132:                                return(FALSE);
        !           133:                if(i==1) {
        !           134:                        if(ren == TRUE) {
        !           135:                                if(rename(fname,newname)!=0)
        !           136:                                        return(FALSE);
        !           137:                        } else 
        !           138:                                if(!fcopy(fname,newname))
        !           139:                                        return(FALSE);
        !           140:                        continue; 
        !           141:                }
        !           142:                safe_snprintf(oldname,sizeof(oldname),"%.*s.%d%s",len,fname,i-2,ext);
        !           143:                if(fexist(oldname) && rename(oldname,newname)!=0)
        !           144:                        return(FALSE);
        !           145:        }
        !           146: 
        !           147:        return(TRUE);
        !           148: }
        !           149: 
        !           150: /****************************************************************************/
        !           151: /****************************************************************************/
        !           152: BOOL DLLCALL write_node_cfg(scfg_t* cfg, int backup_level)
        !           153: {
        !           154:        char    str[MAX_PATH+1];
        !           155:        int     i,file;
        !           156:        ushort  n;
        !           157:        FILE    *stream;
        !           158: 
        !           159:        if(cfg->prepped)
        !           160:                return(FALSE);
        !           161: 
        !           162:        if(cfg->node_num<1 || cfg->node_num>MAX_NODES)
        !           163:                return(FALSE);
        !           164: 
        !           165:        SAFECOPY(str,cfg->node_path[cfg->node_num-1]);
        !           166:        prep_dir(cfg->ctrl_dir,str,sizeof(str));
        !           167:        md(str);
        !           168:        strcat(str,"node.cnf");
        !           169:        backup(str, backup_level, TRUE);
        !           170: 
        !           171:        if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1
        !           172:                || (stream=fdopen(file,"wb"))==NULL) {
        !           173:                return(FALSE); 
        !           174:        }
        !           175:        setvbuf(stream,NULL,_IOFBF,2048);
        !           176: 
        !           177:        put_int(cfg->node_num,stream);
        !           178:        put_str(cfg->node_name,stream);
        !           179:        put_str(cfg->node_phone,stream);
        !           180:        put_str(cfg->node_comspec,stream);                               /* Was node_logon */
        !           181:        put_int(cfg->node_misc,stream);
        !           182:        put_int(cfg->node_ivt,stream);
        !           183:        put_int(cfg->node_swap,stream);
        !           184: #if 0
        !           185:        if(cfg->node_swapdir[0]) {
        !           186:                backslash(cfg->node_swapdir);
        !           187:                md(cfg->node_swapdir);               /* make sure it's a valid directory */
        !           188:        }
        !           189: #endif
        !           190:        put_str(cfg->node_swapdir,stream);
        !           191:        put_int(cfg->node_valuser,stream);
        !           192:        put_int(cfg->node_minbps,stream);
        !           193:        put_str(cfg->node_arstr,stream);
        !           194:        put_int(cfg->node_dollars_per_call,stream);
        !           195:        put_str(cfg->node_editor,stream);
        !           196:        put_str(cfg->node_viewer,stream);
        !           197:        put_str(cfg->node_daily,stream);
        !           198:        put_int(cfg->node_scrnlen,stream);
        !           199:        put_int(cfg->node_scrnblank,stream);
        !           200:        backslash(cfg->ctrl_dir);
        !           201:        put_str(cfg->ctrl_dir,stream);
        !           202:        backslash(cfg->text_dir);
        !           203:        put_str(cfg->text_dir,stream);
        !           204:        backslash(cfg->temp_dir);
        !           205:        put_str(cfg->temp_dir,stream);
        !           206:        for(i=0;i<10;i++)
        !           207:                put_str(cfg->wfc_cmd[i],stream);
        !           208:        for(i=0;i<12;i++)
        !           209:                put_str(cfg->wfc_scmd[i],stream);
        !           210:        put_str(cfg->mdm_hang,stream);
        !           211:        put_int(cfg->node_sem_check,stream);
        !           212:        put_int(cfg->node_stat_check,stream);
        !           213:        put_str(cfg->scfg_cmd,stream);
        !           214:        put_int(cfg->sec_warn,stream);
        !           215:        put_int(cfg->sec_hangup,stream);
        !           216:        n=0;
        !           217:        for(i=0;i<188;i++)                                      /* unused init to NULL */
        !           218:                fwrite(&n,1,2,stream);
        !           219:        n=0xffff;                                               /* unused init to 0xff */
        !           220:        for(i=0;i<256;i++)
        !           221:                fwrite(&n,1,2,stream);
        !           222:        put_int(cfg->com_port,stream);
        !           223:        put_int(cfg->com_irq,stream);
        !           224:        put_int(cfg->com_base,stream);
        !           225:        put_int(cfg->com_rate,stream);
        !           226:        put_int(cfg->mdm_misc,stream);
        !           227:        put_str(cfg->mdm_init,stream);
        !           228:        put_str(cfg->mdm_spec,stream);
        !           229:        put_str(cfg->mdm_term,stream);
        !           230:        put_str(cfg->mdm_dial,stream);
        !           231:        put_str(cfg->mdm_offh,stream);
        !           232:        put_str(cfg->mdm_answ,stream);
        !           233:        put_int(cfg->mdm_reinit,stream);
        !           234:        put_int(cfg->mdm_ansdelay,stream);
        !           235:        put_int(cfg->mdm_rings,stream);
        !           236:        put_int(cfg->mdm_results,stream);
        !           237:        for(i=0;i<cfg->mdm_results;i++) {
        !           238:                put_int(cfg->mdm_result[i].code,stream);
        !           239:                put_int(cfg->mdm_result[i].rate,stream);
        !           240:                put_int(cfg->mdm_result[i].cps,stream);
        !           241:                put_str(cfg->mdm_result[i].str,stream); 
        !           242:        }
        !           243:        fclose(stream);
        !           244: 
        !           245:        return(TRUE);
        !           246: }
        !           247: 
        !           248: /****************************************************************************/
        !           249: /****************************************************************************/
        !           250: BOOL DLLCALL write_main_cfg(scfg_t* cfg, int backup_level)
        !           251: {
        !           252:        char    str[MAX_PATH+1],c=0;
        !           253:        int     file;
        !           254:        ushort  i,j,n;
        !           255:        FILE    *stream;
        !           256: 
        !           257:        if(cfg->prepped)
        !           258:                return(FALSE);
        !           259: 
        !           260:        SAFEPRINTF(str,"%smain.cnf",cfg->ctrl_dir);
        !           261:        backup(str, backup_level, TRUE);
        !           262: 
        !           263:        if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1
        !           264:                || (stream=fdopen(file,"wb"))==NULL) {
        !           265:                return(FALSE); 
        !           266:        }
        !           267:        setvbuf(stream,NULL,_IOFBF,2048);
        !           268: 
        !           269:        put_str(cfg->sys_name,stream);
        !           270:        put_str(cfg->sys_id,stream);
        !           271:        put_str(cfg->sys_location,stream);
        !           272:        put_str(cfg->sys_phonefmt,stream);
        !           273:        put_str(cfg->sys_op,stream);
        !           274:        put_str(cfg->sys_guru,stream);
        !           275:        put_str(cfg->sys_pass,stream);
        !           276:        put_int(cfg->sys_nodes,stream);
        !           277:        for(i=0;i<cfg->sys_nodes;i++) 
        !           278:                put_str(cfg->node_path[i],stream);
        !           279:        backslash(cfg->data_dir);
        !           280:        put_str(cfg->data_dir,stream);
        !           281: 
        !           282:        backslash(cfg->exec_dir);
        !           283:        put_str(cfg->exec_dir,stream);
        !           284:        put_str(cfg->sys_logon,stream);
        !           285:        put_str(cfg->sys_logout,stream);
        !           286:        put_str(cfg->sys_daily,stream);
        !           287:        put_int(cfg->sys_timezone,stream);
        !           288:        put_int(cfg->sys_misc,stream);
        !           289:        put_int(cfg->sys_lastnode,stream);
        !           290:        put_int(cfg->sys_autonode,stream);
        !           291:        put_int(cfg->uq,stream);
        !           292:        put_int(cfg->sys_pwdays,stream);
        !           293:        put_int(cfg->sys_deldays,stream);
        !           294:        put_int(cfg->sys_exp_warn,stream);
        !           295:        put_int(cfg->sys_autodel,stream);
        !           296:        put_int(cfg->sys_def_stat,stream);
        !           297:        put_str(cfg->sys_chat_arstr,stream);
        !           298:        put_int(cfg->cdt_min_value,stream);
        !           299:        put_int(cfg->max_minutes,stream);
        !           300:        put_int(cfg->cdt_per_dollar,stream);
        !           301:        put_str(cfg->new_pass,stream);
        !           302:        put_str(cfg->new_magic,stream);
        !           303:        put_str(cfg->new_sif,stream);
        !           304:        put_str(cfg->new_sof,stream);
        !           305: 
        !           306:        put_int(cfg->new_level,stream);
        !           307:        put_int(cfg->new_flags1,stream);
        !           308:        put_int(cfg->new_flags2,stream);
        !           309:        put_int(cfg->new_flags3,stream);
        !           310:        put_int(cfg->new_flags4,stream);
        !           311:        put_int(cfg->new_exempt,stream);
        !           312:        put_int(cfg->new_rest,stream);
        !           313:        put_int(cfg->new_cdt,stream);
        !           314:        put_int(cfg->new_min,stream);
        !           315:        put_str(cfg->new_xedit,stream);
        !           316:        put_int(cfg->new_expire,stream);
        !           317:        if(cfg->new_shell>=cfg->total_shells)
        !           318:                cfg->new_shell=0;
        !           319:        put_int(cfg->new_shell,stream);
        !           320:        put_int(cfg->new_misc,stream);
        !           321:        put_int(cfg->new_prot,stream);
        !           322:        put_int(cfg->new_install,stream);
        !           323:        n=0;
        !           324:        for(i=0;i<7;i++)
        !           325:                put_int(n,stream);
        !           326: 
        !           327:        put_int(cfg->expired_level,stream);
        !           328:        put_int(cfg->expired_flags1,stream);
        !           329:        put_int(cfg->expired_flags2,stream);
        !           330:        put_int(cfg->expired_flags3,stream);
        !           331:        put_int(cfg->expired_flags4,stream);
        !           332:        put_int(cfg->expired_exempt,stream);
        !           333:        put_int(cfg->expired_rest,stream);
        !           334: 
        !           335:        put_str(cfg->logon_mod,stream);
        !           336:        put_str(cfg->logoff_mod,stream);
        !           337:        put_str(cfg->newuser_mod,stream);
        !           338:        put_str(cfg->login_mod,stream);
        !           339:        put_str(cfg->logout_mod,stream);
        !           340:        put_str(cfg->sync_mod,stream);
        !           341:        put_str(cfg->expire_mod,stream);
        !           342:        put_int(cfg->ctrlkey_passthru,stream);
        !           343:        put_str(cfg->mods_dir,stream);
        !           344:        put_str(cfg->logs_dir,stream);
        !           345: 
        !           346:        put_int(c,stream);
        !           347:        n=0;
        !           348:        for(i=0;i<158;i++)
        !           349:                put_int(n,stream);
        !           350:        n=0xffff;
        !           351:        for(i=0;i<254;i++)
        !           352:                put_int(n,stream);
        !           353: 
        !           354:        put_int(cfg->user_backup_level,stream);
        !           355:        put_int(cfg->mail_backup_level,stream);
        !           356: 
        !           357:        n=0;
        !           358:        for(i=0;i<10;i++) {
        !           359:                put_int(cfg->val_level[i],stream);
        !           360:                put_int(cfg->val_expire[i],stream);
        !           361:                put_int(cfg->val_flags1[i],stream);
        !           362:                put_int(cfg->val_flags2[i],stream);
        !           363:                put_int(cfg->val_flags3[i],stream);
        !           364:                put_int(cfg->val_flags4[i],stream);
        !           365:                put_int(cfg->val_cdt[i],stream);
        !           366:                put_int(cfg->val_exempt[i],stream);
        !           367:                put_int(cfg->val_rest[i],stream);
        !           368:                for(j=0;j<8;j++)
        !           369:                        put_int(n,stream); }
        !           370: 
        !           371:        c=0;
        !           372:        for(i=0;i<100 && !feof(stream);i++) {
        !           373:                put_int(cfg->level_timeperday[i],stream);
        !           374:                put_int(cfg->level_timepercall[i],stream);
        !           375:                put_int(cfg->level_callsperday[i],stream);
        !           376:                put_int(cfg->level_freecdtperday[i],stream);
        !           377:                put_int(cfg->level_linespermsg[i],stream);
        !           378:                put_int(cfg->level_postsperday[i],stream);
        !           379:                put_int(cfg->level_emailperday[i],stream);
        !           380:                put_int(cfg->level_misc[i],stream);
        !           381:                put_int(cfg->level_expireto[i],stream);
        !           382:                put_int(c,stream);
        !           383:                for(j=0;j<5;j++)
        !           384:                        put_int(n,stream); }
        !           385: 
        !           386:        /* Command Shells */
        !           387: 
        !           388:        put_int(cfg->total_shells,stream);
        !           389:        for(i=0;i<cfg->total_shells;i++) {
        !           390:                put_str(cfg->shell[i]->name,stream);
        !           391:                put_str(cfg->shell[i]->code,stream);
        !           392:                put_str(cfg->shell[i]->arstr,stream);
        !           393:                put_int(cfg->shell[i]->misc,stream);
        !           394:                n=0;
        !           395:                for(j=0;j<8;j++)
        !           396:                        put_int(n,stream); 
        !           397:        }
        !           398: 
        !           399:        fclose(stream);
        !           400: 
        !           401:        return(TRUE);
        !           402: }
        !           403: 
        !           404: /****************************************************************************/
        !           405: /****************************************************************************/
        !           406: BOOL DLLCALL write_msgs_cfg(scfg_t* cfg, int backup_level)
        !           407: {
        !           408:        char    str[MAX_PATH+1],c;
        !           409:        char    dir[LEN_DIR+1]="";
        !           410:        int     i,j,k,file;
        !           411:        ushort  n;
        !           412:        long    l;
        !           413:        FILE    *stream;
        !           414:        smb_t   smb;
        !           415: 
        !           416:        if(cfg->prepped)
        !           417:                return(FALSE);
        !           418: 
        !           419:        SAFEPRINTF(str,"%smsgs.cnf",cfg->ctrl_dir);
        !           420:        backup(str, backup_level, TRUE);
        !           421: 
        !           422:        if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1
        !           423:                || (stream=fdopen(file,"wb"))==NULL) {
        !           424:                return(FALSE); 
        !           425:        }
        !           426:        setvbuf(stream,NULL,_IOFBF,2048);
        !           427: 
        !           428:        put_int(cfg->max_qwkmsgs,stream);
        !           429:        put_int(cfg->mail_maxcrcs,stream);
        !           430:        put_int(cfg->mail_maxage,stream);
        !           431:        put_str(cfg->preqwk_arstr,stream);
        !           432:        put_int(cfg->smb_retry_time,stream);
        !           433:        n=0;
        !           434:        for(i=0;i<235;i++)
        !           435:                put_int(n,stream);
        !           436:        n=0xffff;
        !           437:        for(i=0;i<256;i++)
        !           438:                put_int(n,stream);
        !           439: 
        !           440:        /* Message Groups */
        !           441: 
        !           442:        put_int(cfg->total_grps,stream);
        !           443:        for(i=0;i<cfg->total_grps;i++) {
        !           444:                put_str(cfg->grp[i]->lname,stream);
        !           445:                put_str(cfg->grp[i]->sname,stream);
        !           446:                put_str(cfg->grp[i]->arstr,stream);
        !           447:                put_str(cfg->grp[i]->code_prefix,stream);
        !           448:                c=0;
        !           449:                put_int(c,stream);
        !           450:                n=0;
        !           451:                for(j=0;j<27;j++)
        !           452:                        put_int(n,stream);
        !           453:                n=0xffff;
        !           454:                for(j=0;j<16;j++)
        !           455:                        put_int(n,stream); 
        !           456:        }
        !           457: 
        !           458:        /* Message Sub-boards */
        !           459: 
        !           460:        backslash(cfg->echomail_dir);
        !           461: 
        !           462:        str[0]=0;
        !           463:        for(i=n=0;i<cfg->total_subs;i++)
        !           464:                if(cfg->sub[i]->grp<cfg->total_grps)            /* total VALID sub-boards */
        !           465:                        n++;
        !           466:        put_int(n,stream);
        !           467:        for(i=0;i<cfg->total_subs;i++) {
        !           468:                if(cfg->sub[i]->grp>=cfg->total_grps)   /* skip bogus group numbers */
        !           469:                        continue;
        !           470:                put_int(cfg->sub[i]->grp,stream);
        !           471:                put_str(cfg->sub[i]->lname,stream);
        !           472:                put_str(cfg->sub[i]->sname,stream);
        !           473:                put_str(cfg->sub[i]->qwkname,stream);
        !           474:                put_str(cfg->sub[i]->code_suffix,stream);
        !           475: #if 1
        !           476:                if(cfg->sub[i]->data_dir[0]) {
        !           477:                        backslash(cfg->sub[i]->data_dir);
        !           478:                        md(cfg->sub[i]->data_dir);
        !           479:                }
        !           480: #endif
        !           481:                put_str(cfg->sub[i]->data_dir,stream);
        !           482:                put_str(cfg->sub[i]->arstr,stream);
        !           483:                put_str(cfg->sub[i]->read_arstr,stream);
        !           484:                put_str(cfg->sub[i]->post_arstr,stream);
        !           485:                put_str(cfg->sub[i]->op_arstr,stream);
        !           486:                l=(cfg->sub[i]->misc&(~SUB_HDRMOD));    /* Don't write mod bit */
        !           487:                put_int(l,stream);
        !           488:                put_str(cfg->sub[i]->tagline,stream);
        !           489:                put_str(cfg->sub[i]->origline,stream);
        !           490:                put_str(cfg->sub[i]->post_sem,stream);
        !           491:                put_str(cfg->sub[i]->newsgroup,stream);
        !           492:                put_int(cfg->sub[i]->faddr,stream);
        !           493:                put_int(cfg->sub[i]->maxmsgs,stream);
        !           494:                put_int(cfg->sub[i]->maxcrcs,stream);
        !           495:                put_int(cfg->sub[i]->maxage,stream);
        !           496:                put_int(cfg->sub[i]->ptridx,stream);
        !           497:                put_str(cfg->sub[i]->mod_arstr,stream);
        !           498:                put_int(cfg->sub[i]->qwkconf,stream);
        !           499:                c=0;
        !           500:                put_int(c,stream);
        !           501:                n=0;
        !           502:                for(k=0;k<26;k++)
        !           503:                        put_int(n,stream);
        !           504: 
        !           505:                if(all_msghdr || (cfg->sub[i]->misc&SUB_HDRMOD && !no_msghdr)) {
        !           506:                        if(!cfg->sub[i]->data_dir[0])
        !           507:                                SAFEPRINTF(smb.file,"%ssubs",cfg->data_dir);
        !           508:                        else
        !           509:                                SAFECOPY(smb.file,cfg->sub[i]->data_dir);
        !           510:                        prep_dir(cfg->ctrl_dir,smb.file,sizeof(smb.file));
        !           511:                        SAFEPRINTF2(str,"%s%s"
        !           512:                                ,cfg->grp[cfg->sub[i]->grp]->code_prefix
        !           513:                                ,cfg->sub[i]->code_suffix);
        !           514:                        strlwr(str);
        !           515:                        strcat(smb.file,str);
        !           516:                        if(smb_open(&smb)!=0) {
        !           517:                                /* errormsg(WHERE,ERR_OPEN,smb.file,x); */
        !           518:                                continue; 
        !           519:                        }
        !           520:                        if(!filelength(fileno(smb.shd_fp))) {
        !           521:                                smb.status.max_crcs=cfg->sub[i]->maxcrcs;
        !           522:                                smb.status.max_msgs=cfg->sub[i]->maxmsgs;
        !           523:                                smb.status.max_age=cfg->sub[i]->maxage;
        !           524:                                smb.status.attr=cfg->sub[i]->misc&SUB_HYPER ? SMB_HYPERALLOC :0;
        !           525:                                if(smb_create(&smb)!=0)
        !           526:                                        /* errormsg(WHERE,ERR_CREATE,smb.file,x) */;
        !           527:                                smb_close(&smb);
        !           528:                                continue; 
        !           529:                        }
        !           530:                        if(smb_locksmbhdr(&smb)!=0) {
        !           531:                                smb_close(&smb);
        !           532:                                /* errormsg(WHERE,ERR_LOCK,smb.file,x) */;
        !           533:                                continue; 
        !           534:                        }
        !           535:                        if(smb_getstatus(&smb)!=0) {
        !           536:                                smb_close(&smb);
        !           537:                                /* errormsg(WHERE,ERR_READ,smb.file,x) */;
        !           538:                                continue; 
        !           539:                        }
        !           540:                        if((!(cfg->sub[i]->misc&SUB_HYPER) || smb.status.attr&SMB_HYPERALLOC)
        !           541:                                && smb.status.max_msgs==cfg->sub[i]->maxmsgs
        !           542:                                && smb.status.max_crcs==cfg->sub[i]->maxcrcs
        !           543:                                && smb.status.max_age==cfg->sub[i]->maxage) {   /* No change */
        !           544:                                smb_close(&smb);
        !           545:                                continue; 
        !           546:                        }
        !           547:                        smb.status.max_msgs=cfg->sub[i]->maxmsgs;
        !           548:                        smb.status.max_crcs=cfg->sub[i]->maxcrcs;
        !           549:                        smb.status.max_age=cfg->sub[i]->maxage;
        !           550:                        if(cfg->sub[i]->misc&SUB_HYPER)
        !           551:                                smb.status.attr|=SMB_HYPERALLOC;
        !           552:                        if(smb_putstatus(&smb)!=0) {
        !           553:                                smb_close(&smb);
        !           554:                                /* errormsg(WHERE,ERR_WRITE,smb.file,x); */
        !           555:                                continue; 
        !           556:                        }
        !           557:                        smb_close(&smb); 
        !           558:                }
        !           559:        }
        !           560: 
        !           561:        /* FidoNet */
        !           562: 
        !           563:        put_int(cfg->total_faddrs,stream);
        !           564:        for(i=0;i<cfg->total_faddrs;i++) {
        !           565:                put_int(cfg->faddr[i].zone,stream);
        !           566:                put_int(cfg->faddr[i].net,stream);
        !           567:                put_int(cfg->faddr[i].node,stream);
        !           568:                put_int(cfg->faddr[i].point,stream); }
        !           569: 
        !           570:        put_str(cfg->origline,stream);
        !           571:        put_str(cfg->netmail_sem,stream);
        !           572:        put_str(cfg->echomail_sem,stream);
        !           573:        backslash(cfg->netmail_dir);
        !           574:        put_str(cfg->netmail_dir,stream);
        !           575:        put_str(cfg->echomail_dir,stream);
        !           576:        backslash(cfg->fidofile_dir);
        !           577:        put_str(cfg->fidofile_dir,stream);
        !           578:        put_int(cfg->netmail_misc,stream);
        !           579:        put_int(cfg->netmail_cost,stream);
        !           580:        put_int(cfg->dflt_faddr,stream);
        !           581:        n=0;
        !           582:        for(i=0;i<28;i++)
        !           583:                put_int(n,stream);
        !           584: 
        !           585:        /* QWKnet Config */
        !           586: 
        !           587:        put_str(cfg->qnet_tagline,stream);
        !           588: 
        !           589:        put_int(cfg->total_qhubs,stream);
        !           590:        for(i=0;i<cfg->total_qhubs;i++) {
        !           591:                put_str(cfg->qhub[i]->id,stream);
        !           592:                put_int(cfg->qhub[i]->time,stream);
        !           593:                put_int(cfg->qhub[i]->freq,stream);
        !           594:                put_int(cfg->qhub[i]->days,stream);
        !           595:                put_int(cfg->qhub[i]->node,stream);
        !           596:                put_str(cfg->qhub[i]->call,stream);
        !           597:                put_str(cfg->qhub[i]->pack,stream);
        !           598:                put_str(cfg->qhub[i]->unpack,stream);
        !           599:                put_int(cfg->qhub[i]->subs,stream);
        !           600:                for(j=0;j<cfg->qhub[i]->subs;j++) {
        !           601:                        put_int(cfg->qhub[i]->conf[j],stream);
        !           602:                        put_int(cfg->qhub[i]->sub[j],stream);
        !           603:                        put_int(cfg->qhub[i]->mode[j],stream); }
        !           604:                n=0;
        !           605:                for(j=0;j<32;j++)
        !           606:                        put_int(n,stream); }
        !           607:        n=0;
        !           608:        for(i=0;i<32;i++)
        !           609:                put_int(n,stream);
        !           610: 
        !           611:        /* PostLink Config */
        !           612: 
        !           613:        memset(str,0,11);
        !           614:        fwrite(str,11,1,stream);        /* unused, used to be site name */
        !           615:        put_int(cfg->sys_psnum,stream);
        !           616: 
        !           617:        put_int(cfg->total_phubs,stream);
        !           618:        for(i=0;i<cfg->total_phubs;i++) {
        !           619:                put_str(cfg->phub[i]->name,stream);
        !           620:                put_int(cfg->phub[i]->time,stream);
        !           621:                put_int(cfg->phub[i]->freq,stream);
        !           622:                put_int(cfg->phub[i]->days,stream);
        !           623:                put_int(cfg->phub[i]->node,stream);
        !           624:                put_str(cfg->phub[i]->call,stream);
        !           625:                n=0;
        !           626:                for(j=0;j<32;j++)
        !           627:                        put_int(n,stream); }
        !           628: 
        !           629:        put_str(cfg->sys_psname,stream);
        !           630:        n=0;
        !           631:        for(i=0;i<32;i++)
        !           632:                put_int(n,stream);
        !           633: 
        !           634:        put_str(cfg->sys_inetaddr,stream); /* Internet address */
        !           635:        put_str(cfg->inetmail_sem,stream);
        !           636:        put_int(cfg->inetmail_misc,stream);
        !           637:        put_int(cfg->inetmail_cost,stream);
        !           638:        put_str(cfg->smtpmail_sem,stream);
        !           639: 
        !           640:        fclose(stream);
        !           641: 
        !           642:        /* MUST BE AT END */
        !           643: 
        !           644:        if(!no_msghdr) {
        !           645:                strcpy(dir,cfg->data_dir);
        !           646:                prep_dir(cfg->ctrl_dir,dir,sizeof(dir));
        !           647:                SAFEPRINTF(smb.file,"%smail",dir);
        !           648:                if(smb_open(&smb)!=0) {
        !           649:                        return(FALSE); 
        !           650:                }
        !           651:                if(!filelength(fileno(smb.shd_fp))) {
        !           652:                        smb.status.max_msgs=0;
        !           653:                        smb.status.max_crcs=cfg->mail_maxcrcs;
        !           654:                        smb.status.max_age=cfg->mail_maxage;
        !           655:                        smb.status.attr=SMB_EMAIL;
        !           656:                        i=smb_create(&smb);
        !           657:                        smb_close(&smb);
        !           658:                        return(i==0);
        !           659:                }
        !           660:                if(smb_locksmbhdr(&smb)!=0) {
        !           661:                        smb_close(&smb);
        !           662:                        //errormsg(WHERE,ERR_LOCK,smb.file,x);
        !           663:                        return(FALSE); 
        !           664:                }
        !           665:                if(smb_getstatus(&smb)!=0) {
        !           666:                        smb_close(&smb);
        !           667:                        //errormsg(WHERE,ERR_READ,smb.file,x);
        !           668:                        return(FALSE); 
        !           669:                }
        !           670:                smb.status.max_msgs=0;
        !           671:                smb.status.max_crcs=cfg->mail_maxcrcs;
        !           672:                smb.status.max_age=cfg->mail_maxage;
        !           673:                if(smb_putstatus(&smb)!=0) {
        !           674:                        smb_close(&smb);
        !           675:                        //errormsg(WHERE,ERR_WRITE,smb.file,x);
        !           676:                        return(FALSE); 
        !           677:                }
        !           678:                smb_close(&smb); 
        !           679:        }
        !           680: 
        !           681:        return(TRUE);
        !           682: }
        !           683: 
        !           684: 
        !           685: /****************************************************************************/
        !           686: /****************************************************************************/
        !           687: BOOL DLLCALL write_file_cfg(scfg_t* cfg, int backup_level)
        !           688: {
        !           689:        char    str[MAX_PATH+1],cmd[LEN_CMD+1],c;
        !           690:        char    path[MAX_PATH+1];
        !           691:        int     i,j,k,file;
        !           692:        ushort  n;
        !           693:        long    l=0;
        !           694:        FILE    *stream;
        !           695: 
        !           696:        if(cfg->prepped)
        !           697:                return(FALSE);
        !           698: 
        !           699:        SAFEPRINTF(str,"%sfile.cnf",cfg->ctrl_dir);
        !           700:        backup(str, backup_level, TRUE);
        !           701: 
        !           702:        if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1
        !           703:                || (stream=fdopen(file,"wb"))==NULL) {
        !           704:                return(FALSE); 
        !           705:        }
        !           706:        setvbuf(stream,NULL,_IOFBF,2048);
        !           707: 
        !           708:        put_int(cfg->min_dspace,stream);
        !           709:        put_int(cfg->max_batup,stream);
        !           710:        put_int(cfg->max_batdn,stream);
        !           711:        put_int(cfg->max_userxfer,stream);
        !           712:        put_int(l,stream);                                      /* unused */
        !           713:        put_int(cfg->cdt_up_pct,stream);
        !           714:        put_int(cfg->cdt_dn_pct,stream);
        !           715:        put_int(l,stream);                                      /* unused */
        !           716:        put_str(cmd,stream);
        !           717:        put_int(cfg->leech_pct,stream);
        !           718:        put_int(cfg->leech_sec,stream);
        !           719:        put_int(cfg->file_misc,stream);
        !           720:        n=0;
        !           721:        for(i=0;i<30;i++)
        !           722:                put_int(n,stream);
        !           723: 
        !           724:        /* Extractable File Types */
        !           725: 
        !           726:        put_int(cfg->total_fextrs,stream);
        !           727:        for(i=0;i<cfg->total_fextrs;i++) {
        !           728:                put_str(cfg->fextr[i]->ext,stream);
        !           729:                put_str(cfg->fextr[i]->cmd,stream);
        !           730:                put_str(cfg->fextr[i]->arstr,stream);
        !           731:                n=0;
        !           732:                for(j=0;j<8;j++)
        !           733:                        put_int(n,stream); }
        !           734: 
        !           735:        /* Compressable File Types */
        !           736: 
        !           737:        put_int(cfg->total_fcomps,stream);
        !           738:        for(i=0;i<cfg->total_fcomps;i++) {
        !           739:                put_str(cfg->fcomp[i]->ext,stream);
        !           740:                put_str(cfg->fcomp[i]->cmd,stream);
        !           741:                put_str(cfg->fcomp[i]->arstr,stream);
        !           742:                n=0;
        !           743:                for(j=0;j<8;j++)
        !           744:                        put_int(n,stream); }
        !           745: 
        !           746:        /* Viewable File Types */
        !           747: 
        !           748:        put_int(cfg->total_fviews,stream);
        !           749:        for(i=0;i<cfg->total_fviews;i++) {
        !           750:                put_str(cfg->fview[i]->ext,stream);
        !           751:                put_str(cfg->fview[i]->cmd,stream);
        !           752:                put_str(cfg->fview[i]->arstr,stream);
        !           753:                n=0;
        !           754:                for(j=0;j<8;j++)
        !           755:                        put_int(n,stream); }
        !           756: 
        !           757:        /* Testable File Types */
        !           758: 
        !           759:        put_int(cfg->total_ftests,stream);
        !           760:        for(i=0;i<cfg->total_ftests;i++) {
        !           761:                put_str(cfg->ftest[i]->ext,stream);
        !           762:                put_str(cfg->ftest[i]->cmd,stream);
        !           763:                put_str(cfg->ftest[i]->workstr,stream);
        !           764:                put_str(cfg->ftest[i]->arstr,stream);
        !           765:                n=0;
        !           766:                for(j=0;j<8;j++)
        !           767:                        put_int(n,stream); }
        !           768: 
        !           769:        /* Download Events */
        !           770: 
        !           771:        put_int(cfg->total_dlevents,stream);
        !           772:        for(i=0;i<cfg->total_dlevents;i++) {
        !           773:                put_str(cfg->dlevent[i]->ext,stream);
        !           774:                put_str(cfg->dlevent[i]->cmd,stream);
        !           775:                put_str(cfg->dlevent[i]->workstr,stream);
        !           776:                put_str(cfg->dlevent[i]->arstr,stream);
        !           777:                n=0;
        !           778:                for(j=0;j<8;j++)
        !           779:                        put_int(n,stream); }
        !           780: 
        !           781:        /* File Transfer Protocols */
        !           782: 
        !           783:        put_int(cfg->total_prots,stream);
        !           784:        for(i=0;i<cfg->total_prots;i++) {
        !           785:                put_int(cfg->prot[i]->mnemonic,stream);
        !           786:                put_str(cfg->prot[i]->name,stream);
        !           787:                put_str(cfg->prot[i]->ulcmd,stream);
        !           788:                put_str(cfg->prot[i]->dlcmd,stream);
        !           789:                put_str(cfg->prot[i]->batulcmd,stream);
        !           790:                put_str(cfg->prot[i]->batdlcmd,stream);
        !           791:                put_str(cfg->prot[i]->blindcmd,stream);
        !           792:                put_str(cfg->prot[i]->bicmd,stream);
        !           793:                put_int(cfg->prot[i]->misc,stream);
        !           794:                put_str(cfg->prot[i]->arstr,stream);
        !           795:                n=0;
        !           796:                for(j=0;j<8;j++)
        !           797:                        put_int(n,stream); }
        !           798: 
        !           799:        /* Alternate File Paths */
        !           800: 
        !           801:        put_int(cfg->altpaths,stream);
        !           802:        for(i=0;i<cfg->altpaths;i++) {
        !           803:                backslash(cfg->altpath[i]);
        !           804:                fwrite(cfg->altpath[i],LEN_DIR+1,1,stream);
        !           805:                n=0;
        !           806:                for(j=0;j<8;j++)
        !           807:                        put_int(n,stream); }
        !           808: 
        !           809:        /* File Libraries */
        !           810: 
        !           811:        put_int(cfg->total_libs,stream);
        !           812:        for(i=0;i<cfg->total_libs;i++) {
        !           813:                put_str(cfg->lib[i]->lname,stream);
        !           814:                put_str(cfg->lib[i]->sname,stream);
        !           815:                put_str(cfg->lib[i]->arstr,stream);
        !           816:                put_str(cfg->lib[i]->parent_path,stream);
        !           817:                put_str(cfg->lib[i]->code_prefix,stream);
        !           818: 
        !           819:                c=0;
        !           820:                put_int(c,stream);
        !           821:                n=0x0000;
        !           822:                for(j=0;j<3;j++)
        !           823:                        put_int(n,stream); 
        !           824: 
        !           825:                n=0xffff;
        !           826:                for(j=0;j<16;j++)
        !           827:                        put_int(n,stream); 
        !           828:        }
        !           829: 
        !           830:        /* File Directories */
        !           831: 
        !           832:        put_int(cfg->total_dirs,stream);
        !           833:        for(j=0;j<cfg->total_libs;j++)
        !           834:                for(i=0;i<cfg->total_dirs;i++)
        !           835:                        if(cfg->dir[i]->lib==j) {
        !           836:                                put_int(cfg->dir[i]->lib,stream);
        !           837:                                put_str(cfg->dir[i]->lname,stream);
        !           838:                                put_str(cfg->dir[i]->sname,stream);
        !           839:                                put_str(cfg->dir[i]->code_suffix,stream);
        !           840: #if 1
        !           841:                                if(cfg->dir[i]->data_dir[0]) {
        !           842:                                        backslash(cfg->dir[i]->data_dir);
        !           843:                                        md(cfg->dir[i]->data_dir);
        !           844:                                }
        !           845: #endif
        !           846:                                put_str(cfg->dir[i]->data_dir,stream);
        !           847:                                put_str(cfg->dir[i]->arstr,stream);
        !           848:                                put_str(cfg->dir[i]->ul_arstr,stream);
        !           849:                                put_str(cfg->dir[i]->dl_arstr,stream);
        !           850:                                put_str(cfg->dir[i]->op_arstr,stream);
        !           851:                                backslash(cfg->dir[i]->path);
        !           852:                                put_str(cfg->dir[i]->path,stream);
        !           853: #if 1
        !           854:                                if(cfg->dir[i]->misc&DIR_FCHK) {
        !           855:                                        SAFECOPY(path,cfg->dir[i]->path);
        !           856:                                        if(!path[0]) {          /* no file storage path specified */
        !           857:                                                SAFEPRINTF2(str,"%s%s"
        !           858:                                                        ,cfg->lib[cfg->dir[i]->lib]->code_prefix
        !           859:                                                        ,cfg->dir[i]->code_suffix);
        !           860:                                                strlwr(str);
        !           861:                                                safe_snprintf(path,sizeof(path),"%sdirs/%s/"
        !           862:                                                        ,cfg->data_dir
        !           863:                                                        ,str);
        !           864:                                        }
        !           865:                                        else if(cfg->lib[cfg->dir[i]->lib]->parent_path[0]) {
        !           866:                                                SAFECOPY(path,cfg->lib[cfg->dir[i]->lib]->parent_path);
        !           867:                                                prep_dir(cfg->ctrl_dir,path,sizeof(path));
        !           868:                                                md(path);
        !           869:                                                backslash(path);
        !           870:                                                strcat(path,cfg->dir[i]->path);
        !           871:                                        }
        !           872:                                        else
        !           873:                                                prep_dir(cfg->ctrl_dir, path,sizeof(path));
        !           874:                                        md(path); 
        !           875:                                }
        !           876: #endif
        !           877: 
        !           878:                                put_str(cfg->dir[i]->upload_sem,stream);
        !           879:                                put_int(cfg->dir[i]->maxfiles,stream);
        !           880:                                put_str(cfg->dir[i]->exts,stream);
        !           881:                                put_int(cfg->dir[i]->misc,stream);
        !           882:                                put_int(cfg->dir[i]->seqdev,stream);
        !           883:                                put_int(cfg->dir[i]->sort,stream);
        !           884:                                put_str(cfg->dir[i]->ex_arstr,stream);
        !           885:                                put_int(cfg->dir[i]->maxage,stream);
        !           886:                                put_int(cfg->dir[i]->up_pct,stream);
        !           887:                                put_int(cfg->dir[i]->dn_pct,stream);
        !           888:                                c=0;
        !           889:                                put_int(c,stream);
        !           890:                                n=0;
        !           891:                                for(k=0;k<8;k++)
        !           892:                                        put_int(n,stream);
        !           893:                                n=0xffff;
        !           894:                                for(k=0;k<16;k++)
        !           895:                                        put_int(n,stream);
        !           896:                                }
        !           897: 
        !           898:        /* Text File Sections */
        !           899: 
        !           900:        put_int(cfg->total_txtsecs,stream);
        !           901:        for(i=0;i<cfg->total_txtsecs;i++) {
        !           902: #if 1
        !           903:                SAFECOPY(str,cfg->txtsec[i]->code);
        !           904:                strlwr(str);
        !           905:                safe_snprintf(path,sizeof(path),"%stext/%s",cfg->data_dir,str);
        !           906:                md(path);
        !           907: #endif
        !           908:                put_str(cfg->txtsec[i]->name,stream);
        !           909:                put_str(cfg->txtsec[i]->code,stream);
        !           910:                put_str(cfg->txtsec[i]->arstr,stream);
        !           911:                n=0;
        !           912:                for(j=0;j<8;j++)
        !           913:                        put_int(n,stream); 
        !           914:        }
        !           915: 
        !           916:        fclose(stream);
        !           917: 
        !           918:        return(TRUE);
        !           919: }
        !           920: 
        !           921: 
        !           922: 
        !           923: /****************************************************************************/
        !           924: /****************************************************************************/
        !           925: BOOL DLLCALL write_chat_cfg(scfg_t* cfg, int backup_level)
        !           926: {
        !           927:        char    str[MAX_PATH+1];
        !           928:        int     i,j,file;
        !           929:        ushort  n;
        !           930:        FILE    *stream;
        !           931: 
        !           932:        if(cfg->prepped)
        !           933:                return(FALSE);
        !           934: 
        !           935:        sprintf(str,"%schat.cnf",cfg->ctrl_dir);
        !           936:        backup(str, backup_level, TRUE);
        !           937: 
        !           938:        if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1
        !           939:                || (stream=fdopen(file,"wb"))==NULL) {
        !           940:                return(FALSE); 
        !           941:        }
        !           942:        setvbuf(stream,NULL,_IOFBF,2048);
        !           943: 
        !           944:        put_int(cfg->total_gurus,stream);
        !           945:        for(i=0;i<cfg->total_gurus;i++) {
        !           946:                put_str(cfg->guru[i]->name,stream);
        !           947:                put_str(cfg->guru[i]->code,stream);
        !           948:                put_str(cfg->guru[i]->arstr,stream);
        !           949:                n=0;
        !           950:                for(j=0;j<8;j++)
        !           951:                        put_int(n,stream);
        !           952:                }
        !           953: 
        !           954:        put_int(cfg->total_actsets,stream);
        !           955:        for(i=0;i<cfg->total_actsets;i++)
        !           956:                put_str(cfg->actset[i]->name,stream);
        !           957: 
        !           958:        put_int(cfg->total_chatacts,stream);
        !           959:        for(i=0;i<cfg->total_chatacts;i++) {
        !           960:                put_int(cfg->chatact[i]->actset,stream);
        !           961:                put_str(cfg->chatact[i]->cmd,stream);
        !           962:                put_str(cfg->chatact[i]->out,stream);
        !           963:                n=0;
        !           964:                for(j=0;j<8;j++)
        !           965:                        put_int(n,stream);
        !           966:                }
        !           967: 
        !           968:        put_int(cfg->total_chans,stream);
        !           969:        for(i=0;i<cfg->total_chans;i++) {
        !           970:                put_int(cfg->chan[i]->actset,stream);
        !           971:                put_str(cfg->chan[i]->name,stream);
        !           972:                put_str(cfg->chan[i]->code,stream);
        !           973:                put_str(cfg->chan[i]->arstr,stream);
        !           974:                put_int(cfg->chan[i]->cost,stream);
        !           975:                put_int(cfg->chan[i]->guru,stream);
        !           976:                put_int(cfg->chan[i]->misc,stream);
        !           977:                n=0;
        !           978:                for(j=0;j<8;j++)
        !           979:                        put_int(n,stream);
        !           980:                }
        !           981: 
        !           982:        put_int(cfg->total_pages,stream);
        !           983:        for(i=0;i<cfg->total_pages;i++) {
        !           984:                put_str(cfg->page[i]->cmd,stream);
        !           985:                put_str(cfg->page[i]->arstr,stream);
        !           986:                put_int(cfg->page[i]->misc,stream);
        !           987:                n=0;
        !           988:                for(j=0;j<8;j++)
        !           989:                        put_int(n,stream);
        !           990:                }
        !           991: 
        !           992:        fclose(stream);
        !           993: 
        !           994:        return(TRUE);
        !           995: }
        !           996: 
        !           997: 
        !           998: /****************************************************************************/
        !           999: /****************************************************************************/
        !          1000: BOOL DLLCALL write_xtrn_cfg(scfg_t* cfg, int backup_level)
        !          1001: {
        !          1002:        uchar   str[MAX_PATH+1],c;
        !          1003:        int     i,j,sec,file;
        !          1004:        ushort  n;
        !          1005:        FILE    *stream;
        !          1006: 
        !          1007:        if(cfg->prepped)
        !          1008:                return(FALSE);
        !          1009: 
        !          1010:        sprintf(str,"%sxtrn.cnf",cfg->ctrl_dir);
        !          1011:        backup(str, backup_level, TRUE);
        !          1012: 
        !          1013:        if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1
        !          1014:                || (stream=fdopen(file,"wb"))==NULL) {
        !          1015:                return(FALSE); 
        !          1016:        }
        !          1017:        setvbuf(stream,NULL,_IOFBF,2048);
        !          1018: 
        !          1019:        put_int(cfg->total_swaps,stream);
        !          1020:        for(i=0;i<cfg->total_swaps;i++)
        !          1021:                put_str(cfg->swap[i]->cmd,stream);
        !          1022: 
        !          1023:        put_int(cfg->total_xedits,stream);
        !          1024:        for(i=0;i<cfg->total_xedits;i++) {
        !          1025:                put_str(cfg->xedit[i]->name,stream);
        !          1026:                put_str(cfg->xedit[i]->code,stream);
        !          1027:                put_str(cfg->xedit[i]->lcmd,stream);
        !          1028:                put_str(cfg->xedit[i]->rcmd,stream);
        !          1029:                put_int(cfg->xedit[i]->misc,stream);
        !          1030:                put_str(cfg->xedit[i]->arstr,stream);
        !          1031:                put_int(cfg->xedit[i]->type,stream);
        !          1032:                c=0;
        !          1033:                put_int(c,stream);
        !          1034:                n=0;
        !          1035:                for(j=0;j<7;j++)
        !          1036:                        put_int(n,stream);
        !          1037:                }
        !          1038: 
        !          1039:        put_int(cfg->total_xtrnsecs,stream);
        !          1040:        for(i=0;i<cfg->total_xtrnsecs;i++) {
        !          1041:                put_str(cfg->xtrnsec[i]->name,stream);
        !          1042:                put_str(cfg->xtrnsec[i]->code,stream);
        !          1043:                put_str(cfg->xtrnsec[i]->arstr,stream);
        !          1044:                n=0;
        !          1045:                for(j=0;j<8;j++)
        !          1046:                        put_int(n,stream);
        !          1047:                }
        !          1048: 
        !          1049:        put_int(cfg->total_xtrns,stream);
        !          1050:        for(sec=0;sec<cfg->total_xtrnsecs;sec++)
        !          1051:                for(i=0;i<cfg->total_xtrns;i++) {
        !          1052:                        if(cfg->xtrn[i]->sec!=sec)
        !          1053:                                continue;
        !          1054:                        put_int(cfg->xtrn[i]->sec,stream);
        !          1055:                        put_str(cfg->xtrn[i]->name,stream);
        !          1056:                        put_str(cfg->xtrn[i]->code,stream);
        !          1057:                        put_str(cfg->xtrn[i]->arstr,stream);
        !          1058:                        put_str(cfg->xtrn[i]->run_arstr,stream);
        !          1059:                        put_int(cfg->xtrn[i]->type,stream);
        !          1060:                        put_int(cfg->xtrn[i]->misc,stream);
        !          1061:                        put_int(cfg->xtrn[i]->event,stream);
        !          1062:                        put_int(cfg->xtrn[i]->cost,stream);
        !          1063:                        put_str(cfg->xtrn[i]->cmd,stream);
        !          1064:                        put_str(cfg->xtrn[i]->clean,stream);
        !          1065:                        put_str(cfg->xtrn[i]->path,stream);
        !          1066:                        put_int(cfg->xtrn[i]->textra,stream);
        !          1067:                        put_int(cfg->xtrn[i]->maxtime,stream);
        !          1068:                        n=0;
        !          1069:                        for(j=0;j<7;j++)
        !          1070:                                put_int(n,stream);
        !          1071:                        }
        !          1072: 
        !          1073:        put_int(cfg->total_events,stream);
        !          1074:        for(i=0;i<cfg->total_events;i++) {
        !          1075:                put_str(cfg->event[i]->code,stream);
        !          1076:                put_str(cfg->event[i]->cmd,stream);
        !          1077:                put_int(cfg->event[i]->days,stream);
        !          1078:                put_int(cfg->event[i]->time,stream);
        !          1079:                put_int(cfg->event[i]->node,stream);
        !          1080:                put_int(cfg->event[i]->misc,stream);
        !          1081:                put_str(cfg->event[i]->dir,stream);
        !          1082:                put_int(cfg->event[i]->freq,stream);
        !          1083:                put_int(cfg->event[i]->mdays,stream);
        !          1084:                n=0;
        !          1085:                for(j=0;j<5;j++)
        !          1086:                        put_int(n,stream);
        !          1087:                }
        !          1088: 
        !          1089:        put_int(cfg->total_natvpgms,stream);
        !          1090:        for(i=0;i<cfg->total_natvpgms;i++)
        !          1091:                put_str(cfg->natvpgm[i]->name,stream);
        !          1092:        for(i=0;i<cfg->total_natvpgms;i++)
        !          1093:                put_int(cfg->natvpgm[i]->misc,stream);
        !          1094: 
        !          1095:        put_int(cfg->total_hotkeys,stream);
        !          1096:        for(i=0;i<cfg->total_hotkeys;i++) {
        !          1097:                put_int(cfg->hotkey[i]->key,stream);
        !          1098:                put_str(cfg->hotkey[i]->cmd,stream);
        !          1099:                n=0;
        !          1100:                for(j=0;j<8;j++)
        !          1101:                        put_int(n,stream);
        !          1102:                }
        !          1103: 
        !          1104:        fclose(stream);
        !          1105: 
        !          1106:        return(TRUE);
        !          1107: }
        !          1108: 
        !          1109: void DLLCALL refresh_cfg(scfg_t* cfg)
        !          1110: {
        !          1111:        char    str[MAX_PATH+1];
        !          1112:     int                i;
        !          1113:        int             file;
        !          1114:     node_t     node;
        !          1115:     
        !          1116:     for(i=0;i<cfg->sys_nodes;i++) {
        !          1117:                if(getnodedat(cfg,i+1,&node,&file)!=0)
        !          1118:                        continue;
        !          1119:         node.misc|=NODE_RRUN;
        !          1120:         if(putnodedat(cfg,i+1,&node,file))
        !          1121:             break;
        !          1122:     }
        !          1123: 
        !          1124:        sprintf(str,"%sftpsrvr.rec",cfg->ctrl_dir);
        !          1125:        if((file=open(str,O_WRONLY|O_CREAT|O_TRUNC,S_IWRITE|S_IREAD))!=-1)
        !          1126:                close(file);
        !          1127:        sprintf(str,"%smailsrvr.rec",cfg->ctrl_dir);
        !          1128:        if((file=open(str,O_WRONLY|O_CREAT|O_TRUNC,S_IWRITE|S_IREAD))!=-1)
        !          1129:                close(file);
        !          1130:        sprintf(str,"%sservices.rec",cfg->ctrl_dir);
        !          1131:        if((file=open(str,O_WRONLY|O_CREAT|O_TRUNC,S_IWRITE|S_IREAD))!=-1)
        !          1132:                close(file);
        !          1133: }

unix.superglobalmegacorp.com

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