Annotation of sbbs/sbbs3/scfg/scfgnode.c, revision 1.1

1.1     ! root        1: /* scfgnode.c */
        !             2: 
        !             3: /* $Id: scfgnode.c,v 1.23 2004/12/21 01:40:04 rswindell Exp $ */
        !             4: 
        !             5: /****************************************************************************
        !             6:  * @format.tab-size 4          (Plain Text/Source Code File Header)                    *
        !             7:  * @format.use-tabs true       (see http://www.synchro.net/ptsc_hdr.html)              *
        !             8:  *                                                                                                                                                     *
        !             9:  * Copyright 2002 Rob Swindell - http://www.synchro.net/copyright.html         *
        !            10:  *                                                                                                                                                     *
        !            11:  * This program is free software; you can redistribute it and/or                       *
        !            12:  * modify it under the terms of the GNU General Public License                         *
        !            13:  * as published by the Free Software Foundation; either version 2                      *
        !            14:  * of the License, or (at your option) any later version.                                      *
        !            15:  * See the GNU General Public License for more details: gpl.txt or                     *
        !            16:  * http://www.fsf.org/copyleft/gpl.html                                                                                *
        !            17:  *                                                                                                                                                     *
        !            18:  * Anonymous FTP access to the most recent released source is available at     *
        !            19:  * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net     *
        !            20:  *                                                                                                                                                     *
        !            21:  * Anonymous CVS access to the development source and modification history     *
        !            22:  * is available at cvs.synchro.net:/cvsroot/sbbs, example:                                     *
        !            23:  * cvs -d :pserver:[email protected]:/cvsroot/sbbs login                       *
        !            24:  *     (just hit return, no password is necessary)                                                     *
        !            25:  * cvs -d :pserver:[email protected]:/cvsroot/sbbs checkout src                *
        !            26:  *                                                                                                                                                     *
        !            27:  * For Synchronet coding style and modification guidelines, see                                *
        !            28:  * http://www.synchro.net/source.html                                                                          *
        !            29:  *                                                                                                                                                     *
        !            30:  * You are encouraged to submit any modifications (preferably in Unix diff     *
        !            31:  * format) via e-mail to [email protected]                                                                      *
        !            32:  *                                                                                                                                                     *
        !            33:  * Note: If this box doesn't appear square, then you need to fix your tabs.    *
        !            34:  ****************************************************************************/
        !            35:  
        !            36: #include "scfg.h"
        !            37: 
        !            38: void node_menu()
        !            39: {
        !            40:        char    str[81],savnode=0;
        !            41:        int     i,j;
        !            42:        static int node_menu_dflt, node_bar;
        !            43: 
        !            44: while(1) {
        !            45:        for(i=0;i<cfg.sys_nodes;i++)
        !            46:                sprintf(opt[i],"Node %d",i+1);
        !            47:        opt[i][0]=0;
        !            48:        j=WIN_ORG|WIN_ACT|WIN_INSACT|WIN_DELACT;
        !            49:        if(cfg.sys_nodes>1)
        !            50:                j|=WIN_DEL|WIN_GET;
        !            51:        if(cfg.sys_nodes<MAX_NODES && cfg.sys_nodes<MAX_OPTS)
        !            52:                j|=WIN_INS;
        !            53:        if(savnode)
        !            54:                j|=WIN_PUT;
        !            55: SETHELP(WHERE);
        !            56: /*
        !            57: &Node List:&
        !            58: 
        !            59: This is the list of configured nodes in your system.
        !            60: 
        !            61: To add a node, hit  INS .
        !            62: 
        !            63: To delete a node, hit  DEL .
        !            64: 
        !            65: To configure a node, select it using the arrow keys and hit  ENTER .
        !            66: 
        !            67: To copy a node's configuration to another node, first select the source
        !            68: node with the arrow keys and hit  F5 . Then select the destination
        !            69: node and hit  F6 .
        !            70: */
        !            71: 
        !            72:        i=uifc.list(j,0,0,13,&node_menu_dflt,&node_bar,"Nodes",opt);
        !            73:        if(i==-1) {
        !            74:                if(savnode) {
        !            75:                        free_node_cfg(&cfg);
        !            76:                        savnode=0; }
        !            77:                return; }
        !            78: 
        !            79:        if((i&MSK_ON)==MSK_DEL) {
        !            80:                strcpy(opt[0],"Yes");
        !            81:                strcpy(opt[1],"No");
        !            82:                opt[2][0]=0;
        !            83:                sprintf(str,"Delete Node %d",cfg.sys_nodes);
        !            84:                i=1;
        !            85: SETHELP(WHERE);
        !            86: /*
        !            87: &Delete Node:&
        !            88: 
        !            89: If you are positive you want to delete this node, select &Yes&. Otherwise,
        !            90: select &No& or hit  ESC .
        !            91: */
        !            92:                i=uifc.list(WIN_MID,0,0,0,&i,0,str,opt);
        !            93:                if(!i) {
        !            94:                        --cfg.sys_nodes;
        !            95: /*                     FREE(cfg.node_path[cfg.sys_nodes]); */
        !            96:                        cfg.new_install=new_install;
        !            97:                        write_main_cfg(&cfg,backup_level);
        !            98:             refresh_cfg(&cfg);
        !            99:         }
        !           100:                continue; }
        !           101:        if((i&MSK_ON)==MSK_INS) {
        !           102:                strcpy(cfg.node_dir,cfg.node_path[cfg.sys_nodes-1]);
        !           103:                i=cfg.sys_nodes+1;
        !           104:                uifc.pop("Reading NODE.CNF...");
        !           105:                read_node_cfg(&cfg,error);
        !           106:                uifc.pop(0);
        !           107:                sprintf(str,"../node%d/",i);
        !           108:                sprintf(tmp,"Node %d Path",i);
        !           109: SETHELP(WHERE);
        !           110: /*
        !           111: &Node Path:&
        !           112: 
        !           113: This is the path to this node's private directory where its separate
        !           114: configuration and data files are stored.
        !           115: 
        !           116: The drive and directory of this path can be set to any valid DOS
        !           117: directory that can be accessed by &ALL& nodes and &MUST NOT& be on a RAM disk
        !           118: or other volatile media.
        !           119: 
        !           120: If you want to abort the creation of this new node, hit  ESC .
        !           121: */
        !           122:                j=uifc.input(WIN_MID,0,0,tmp,str,50,K_EDIT);
        !           123:                uifc.changes=0;
        !           124:                if(j<2)
        !           125:                        continue;
        !           126:                truncsp(str);
        !           127:                strcpy(cfg.node_path[i-1],str);
        !           128:                if(str[strlen(str)-1]=='\\' || str[strlen(str)-1]=='/')
        !           129:                        str[strlen(str)-1]=0;
        !           130:                MKDIR(str);
        !           131:                cfg.node_num=++cfg.sys_nodes;
        !           132:                sprintf(cfg.node_name,"Node %u",cfg.node_num);
        !           133:                cfg.new_install=new_install;
        !           134:                write_node_cfg(&cfg,backup_level);
        !           135:                write_main_cfg(&cfg,backup_level);
        !           136:                free_node_cfg(&cfg);
        !           137:         refresh_cfg(&cfg);
        !           138:                continue;
        !           139:     }
        !           140:        if((i&MSK_ON)==MSK_GET) {
        !           141:                if(savnode)
        !           142:                        free_node_cfg(&cfg);
        !           143:                i&=MSK_OFF;
        !           144:                strcpy(cfg.node_dir,cfg.node_path[i]);
        !           145:                uifc.pop("Reading NODE.CNF...");
        !           146:                read_node_cfg(&cfg,error);
        !           147:                uifc.pop(0);
        !           148:                savnode=1;
        !           149:                continue; }
        !           150:        if((i&MSK_ON)==MSK_PUT) {
        !           151:                i&=MSK_OFF;
        !           152:                strcpy(cfg.node_dir,cfg.node_path[i]);
        !           153:                cfg.node_num=i+1;
        !           154:                write_node_cfg(&cfg,backup_level);
        !           155:         refresh_cfg(&cfg);
        !           156:                uifc.changes=1;
        !           157:                continue;
        !           158:     }
        !           159: 
        !           160:        if(savnode) {
        !           161:                free_node_cfg(&cfg);
        !           162:                savnode=0; }
        !           163:        strcpy(cfg.node_dir,cfg.node_path[i]);
        !           164:        prep_dir(cfg.ctrl_dir, cfg.node_dir, sizeof(cfg.node_dir));
        !           165: 
        !           166:        uifc.pop("Reading NODE.CNF...");
        !           167:        read_node_cfg(&cfg,error);
        !           168:        uifc.pop(0);
        !           169:        if(cfg.node_num!=i+1) {         /* Node number isn't right? */
        !           170:                cfg.node_num=i+1;               /* so fix it */
        !           171:                write_node_cfg(&cfg,backup_level); } /* and write it back */
        !           172:        node_cfg();
        !           173: 
        !           174:        free_node_cfg(&cfg); }
        !           175: }
        !           176: 
        !           177: void node_cfg()
        !           178: {
        !           179:        static  int node_dflt;
        !           180:        char    done,str[81];
        !           181:        static  int adv_dflt,tog_dflt,tog_bar;
        !           182:        int     i;
        !           183: 
        !           184: while(1) {
        !           185:        i=0;
        !           186:        sprintf(opt[i++],"%-27.27s%.40s","Logon Requirements",cfg.node_arstr);
        !           187:        strcpy(opt[i++],"Toggle Options...");
        !           188:        strcpy(opt[i++],"Advanced Options...");
        !           189:        opt[i][0]=0;
        !           190:        sprintf(str,"Node %d Configuration",cfg.node_num);
        !           191: SETHELP(WHERE);
        !           192: /*
        !           193: &Node Configuration Menu:&
        !           194: 
        !           195: This is the node configuration menu. The options available from this
        !           196: menu will only affect the selected node's configuration.
        !           197: 
        !           198: Options with a trailing &...& will produce a sub-menu of more options.
        !           199: */
        !           200:        switch(uifc.list(WIN_ACT|WIN_CHE|WIN_BOT|WIN_RHT,0,0,60,&node_dflt,0
        !           201:                ,str,opt)) {
        !           202:                case -1:
        !           203:                        i=save_changes(WIN_MID|WIN_SAV);
        !           204:                        if(!i) {
        !           205:                                write_node_cfg(&cfg,backup_level);
        !           206:                 refresh_cfg(&cfg);
        !           207:             }
        !           208:                        if(i!=-1)
        !           209:                                return;
        !           210:                        break;
        !           211:                case 0:
        !           212:                        sprintf(str,"Node %u Logon",cfg.node_num);
        !           213:                        getar(str,cfg.node_arstr);
        !           214:                        break;
        !           215:                case 1:
        !           216:                        done=0;
        !           217:                        while(!done) {
        !           218:                                i=0;
        !           219: #if 0  /* no longer used */
        !           220:                                sprintf(opt[i++],"%-27.27s%s","Low Priority String Input"
        !           221:                                        ,cfg.node_misc&NM_LOWPRIO ? "Yes":"No");
        !           222: #endif
        !           223:                                sprintf(opt[i++],"%-27.27s%s","Allow Login by User Number"
        !           224:                                        ,cfg.node_misc&NM_NO_NUM ? "No":"Yes");
        !           225:                                sprintf(opt[i++],"%-27.27s%s","Allow Login by Real Name"
        !           226:                                        ,cfg.node_misc&NM_LOGON_R ? "Yes":"No");
        !           227:                                sprintf(opt[i++],"%-27.27s%s","Always Prompt for Password"
        !           228:                                        ,cfg.node_misc&NM_LOGON_P ? "Yes":"No");
        !           229:                                sprintf(opt[i++],"%-27.27s%s","Allow 8-bit Remote Logins"
        !           230:                                        ,cfg.node_misc&NM_7BITONLY ? "No":"Yes");
        !           231:                                sprintf(opt[i++],"%-27.27s%s","Spinning Pause Prompt"
        !           232:                                        ,cfg.node_misc&NM_NOPAUSESPIN ? "No":"Yes");
        !           233:                                sprintf(opt[i++],"%-27.27s%s","Keep Node File Open"
        !           234:                                        ,cfg.node_misc&NM_CLOSENODEDAB ? "No":"Yes");
        !           235: 
        !           236:                                opt[i][0]=0;
        !           237:                                uifc.savnum=0;
        !           238: SETHELP(WHERE);
        !           239: /*
        !           240: &Node Toggle Options:&
        !           241: 
        !           242: This is the toggle options menu for the selected node's configuration.
        !           243: 
        !           244: The available options from this menu can all be toggled between two or
        !           245: more states, such as &Yes& and &No&.
        !           246: */
        !           247:                                switch(uifc.list(WIN_BOT|WIN_RHT|WIN_ACT|WIN_SAV,3,2,35,&tog_dflt
        !           248:                                        ,&tog_bar,"Toggle Options",opt)) {
        !           249:                                        case -1:
        !           250:                                                done=1;
        !           251:                                                break;
        !           252: #if 0 /* no longer used */
        !           253:                                        case 0:
        !           254:                                                i=cfg.node_misc&NM_LOWPRIO ? 0:1;
        !           255:                                                strcpy(opt[0],"Yes");
        !           256:                                                strcpy(opt[1],"No");
        !           257:                                                opt[2][0]=0;
        !           258:                                                uifc.savnum=1;
        !           259:                                                SETHELP(WHERE);
        !           260: /*
        !           261: &Low Priority String Input:&
        !           262: 
        !           263: Normally, Synchronet will not give up time slices (under a multitasker)
        !           264: when users are prompted for a string of characters. This is considered
        !           265: a high priority task.
        !           266: 
        !           267: Setting this option to &Yes& will force Synchronet to give up time slices
        !           268: during string input, possibly causing jerky keyboard input from the
        !           269: user, but improving aggregate system performance under multitaskers.
        !           270: */
        !           271:                                                i=uifc.list(WIN_MID|WIN_SAV,0,10,0,&i,0
        !           272:                                                        ,"Low Priority String Input",opt);
        !           273:                                                if(i==0 && !(cfg.node_misc&NM_LOWPRIO)) {
        !           274:                                                        cfg.node_misc|=NM_LOWPRIO;
        !           275:                                                        uifc.changes=1; }
        !           276:                                                else if(i==1 && (cfg.node_misc&NM_LOWPRIO)) {
        !           277:                                                        cfg.node_misc&=~NM_LOWPRIO;
        !           278:                                                        uifc.changes=1; }
        !           279:                         break;
        !           280: #endif
        !           281:                                        case 0:
        !           282:                                                i=cfg.node_misc&NM_NO_NUM ? 1:0;
        !           283:                                                strcpy(opt[0],"Yes");
        !           284:                                                strcpy(opt[1],"No");
        !           285:                                                opt[2][0]=0;
        !           286:                                                uifc.savnum=1;
        !           287:                                                SETHELP(WHERE);
        !           288: /*
        !           289: &Allow Login by User Number:&
        !           290: 
        !           291: If you want users to be able login using their user number at the &NN:&
        !           292: set this option to &Yes&.
        !           293: */
        !           294:                                                i=uifc.list(WIN_MID|WIN_SAV,0,10,0,&i,0
        !           295:                                                        ,"Allow Login by User Number",opt);
        !           296:                                                if(i==0 && cfg.node_misc&NM_NO_NUM) {
        !           297:                                                        cfg.node_misc&=~NM_NO_NUM;
        !           298:                                                        uifc.changes=1; }
        !           299:                                                else if(i==1 && !(cfg.node_misc&NM_NO_NUM)) {
        !           300:                                                        cfg.node_misc|=NM_NO_NUM;
        !           301:                                                        uifc.changes=1; }
        !           302:                         break;
        !           303:                                        case 1:
        !           304:                                                i=cfg.node_misc&NM_LOGON_R ? 0:1;
        !           305:                                                strcpy(opt[0],"Yes");
        !           306:                                                strcpy(opt[1],"No");
        !           307:                                                opt[2][0]=0;
        !           308:                                                uifc.savnum=1;
        !           309:                                                SETHELP(WHERE);
        !           310: /*
        !           311: &Allow Login by Real Name:&
        !           312: 
        !           313: If you want users to be able login using their real name as well as
        !           314: their alias, set this option to &Yes&.
        !           315: */
        !           316:                                                i=uifc.list(WIN_MID|WIN_SAV,0,10,0,&i,0
        !           317:                                                        ,"Allow Login by Real Name",opt);
        !           318:                                                if(i==0 && !(cfg.node_misc&NM_LOGON_R)) {
        !           319:                                                        cfg.node_misc|=NM_LOGON_R;
        !           320:                                                        uifc.changes=1; }
        !           321:                                                else if(i==1 && (cfg.node_misc&NM_LOGON_R)) {
        !           322:                                                        cfg.node_misc&=~NM_LOGON_R;
        !           323:                                                        uifc.changes=1; }
        !           324:                         break;
        !           325:                                        case 2:
        !           326:                                                i=cfg.node_misc&NM_LOGON_P ? 0:1;
        !           327:                                                strcpy(opt[0],"Yes");
        !           328:                                                strcpy(opt[1],"No");
        !           329:                                                opt[2][0]=0;
        !           330:                                                uifc.savnum=1;
        !           331:                                                SETHELP(WHERE);
        !           332: /*
        !           333: &Always Prompt for Password:&
        !           334: 
        !           335: If you want to have attempted logins using an unknown user name still
        !           336: prompt for a password, set this option to &Yes&.
        !           337: */
        !           338:                                                i=uifc.list(WIN_MID|WIN_SAV,0,10,0,&i,0
        !           339:                                                        ,"Always Prompt for Password",opt);
        !           340:                                                if(i==0 && !(cfg.node_misc&NM_LOGON_P)) {
        !           341:                                                        cfg.node_misc|=NM_LOGON_P;
        !           342:                                                        uifc.changes=1; }
        !           343:                                                else if(i==1 && (cfg.node_misc&NM_LOGON_P)) {
        !           344:                                                        cfg.node_misc&=~NM_LOGON_P;
        !           345:                                                        uifc.changes=1; }
        !           346:                         break;
        !           347:                                        case 3:
        !           348:                                                i=cfg.node_misc&NM_7BITONLY ? 0:1;
        !           349:                                                strcpy(opt[0],"Yes");
        !           350:                                                strcpy(opt[1],"No");
        !           351:                                                opt[2][0]=0;
        !           352:                                                uifc.savnum=1;
        !           353:                                                SETHELP(WHERE);
        !           354: /*
        !           355: &Allow 8-bit Remote Input During Login:&
        !           356: 
        !           357: If you wish to allow E-7-1 terminals to use this node, you must set this
        !           358: option to &No&. This will also eliminate the ability of 8-bit remote users
        !           359: to send IBM extended ASCII characters during the login sequence.
        !           360: */
        !           361:                                                i=uifc.list(WIN_MID|WIN_SAV,0,10,0,&i,0
        !           362:                                                        ,"Allow 8-bit Remote Input During Login",opt);
        !           363:                                                if(i==1 && !(cfg.node_misc&NM_7BITONLY)) {
        !           364:                                                        cfg.node_misc|=NM_7BITONLY;
        !           365:                                                        uifc.changes=1; }
        !           366:                                                else if(i==0 && (cfg.node_misc&NM_7BITONLY)) {
        !           367:                                                        cfg.node_misc&=~NM_7BITONLY;
        !           368:                                                        uifc.changes=1; }
        !           369:                         break;
        !           370:                                        case 4:
        !           371:                                                i=cfg.node_misc&NM_NOPAUSESPIN ? 1:0;
        !           372:                                                strcpy(opt[0],"Yes");
        !           373:                                                strcpy(opt[1],"No");
        !           374:                                                opt[2][0]=0;
        !           375:                                                uifc.savnum=1;
        !           376:                                                SETHELP(WHERE);
        !           377: /*
        !           378: &Spinning Pause Prompt:&
        !           379: 
        !           380: If you want to have a spinning cursor at the [Hit a key] prompt, set
        !           381: this option to &Yes&.
        !           382: */
        !           383:                                                i=uifc.list(WIN_MID|WIN_SAV,0,10,0,&i,0
        !           384:                                                        ,"Spinning Cursor at Pause Prompt",opt);
        !           385:                                                if(i==0 && cfg.node_misc&NM_NOPAUSESPIN) {
        !           386:                                                        cfg.node_misc&=~NM_NOPAUSESPIN;
        !           387:                                                        uifc.changes=1; }
        !           388:                                                else if(i==1 && !(cfg.node_misc&NM_NOPAUSESPIN)) {
        !           389:                                                        cfg.node_misc|=NM_NOPAUSESPIN;
        !           390:                                                        uifc.changes=1; }
        !           391:                         break;
        !           392:                                        case 5:
        !           393:                                                i=cfg.node_misc&NM_CLOSENODEDAB ? 1:0;
        !           394:                                                strcpy(opt[0],"Yes");
        !           395:                                                strcpy(opt[1],"No");
        !           396:                                                opt[2][0]=0;
        !           397:                                                uifc.savnum=1;
        !           398:                                                SETHELP(WHERE);
        !           399: /*
        !           400: &Keep Node File Open:&
        !           401: 
        !           402: If you want to keep the shared node file (&ctrl/node.dab&) open,
        !           403: (for better performance and reliability) set this option to &Yes&.
        !           404: If want to keep the file closed (for &Samba& compatiblity), set this
        !           405: option to &No&.
        !           406: */
        !           407:                                                i=uifc.list(WIN_MID|WIN_SAV,0,10,0,&i,0
        !           408:                                                        ,"Keep Node File Open",opt);
        !           409:                                                if(i==0 && cfg.node_misc&NM_CLOSENODEDAB) {
        !           410:                                                        cfg.node_misc&=~NM_CLOSENODEDAB;
        !           411:                                                        uifc.changes=1; }
        !           412:                                                else if(i==1 && !(cfg.node_misc&NM_CLOSENODEDAB)) {
        !           413:                                                        cfg.node_misc|=NM_CLOSENODEDAB;
        !           414:                                                        uifc.changes=1; }
        !           415:                         break;
        !           416:                                                } }
        !           417:                        break;
        !           418:                case 2:
        !           419:                        done=0;
        !           420:                        while(!done) {
        !           421:                                i=0;
        !           422:                                sprintf(opt[i++],"%-27.27s%s","Validation User"
        !           423:                                        ,cfg.node_valuser ? ultoa(cfg.node_valuser,tmp,10) : "Nobody");
        !           424:                                sprintf(opt[i++],"%-27.27s%u seconds","Semaphore Frequency"
        !           425:                                        ,cfg.node_sem_check);
        !           426:                                sprintf(opt[i++],"%-27.27s%u seconds","Statistics Frequency"
        !           427:                                        ,cfg.node_stat_check);
        !           428:                                sprintf(opt[i++],"%-27.27s%u seconds","Inactivity Warning"
        !           429:                                        ,cfg.sec_warn);
        !           430:                                sprintf(opt[i++],"%-27.27s%u seconds","Inactivity Disconnection"
        !           431:                                        ,cfg.sec_hangup);
        !           432:                                sprintf(tmp,"$%d.00",cfg.node_dollars_per_call);
        !           433:                                sprintf(opt[i++],"%-27.27s%.40s","Daily Event",cfg.node_daily);
        !           434:                                sprintf(opt[i++],"%-27.27s%.40s","Text Directory",cfg.text_dir);
        !           435:                                opt[i][0]=0;
        !           436:                                uifc.savnum=0;
        !           437: SETHELP(WHERE);
        !           438: /*
        !           439: &Node Advanced Options:&
        !           440: 
        !           441: This is the advanced options menu for the selected node. The available
        !           442: options are of an advanced nature and should not be modified unless you
        !           443: are sure of the consequences and necessary preparation.
        !           444: */
        !           445:                                switch(uifc.list(WIN_T2B|WIN_RHT|WIN_ACT|WIN_SAV,2,0,60,&adv_dflt,0
        !           446:                                        ,"Advanced Options",opt)) {
        !           447:                     case -1:
        !           448:                                                done=1;
        !           449:                         break;
        !           450:                                        case 0:
        !           451:                                                ultoa(cfg.node_valuser,str,10);
        !           452: SETHELP(WHERE);
        !           453: /*
        !           454: &Validation User Number:&
        !           455: 
        !           456: When a caller logs onto the system as &New&, he or she must send
        !           457: validation feedback to the sysop. This feature can be disabled by
        !           458: setting this value to &0&, allowing new users to logon without sending
        !           459: validation feedback. If you want new users on this node to be forced to
        !           460: send validation feedback, set this value to the number of the user to
        !           461: whom the feedback is sent. The normal value of this option is &1& for
        !           462: user number one.
        !           463: */
        !           464:                                                uifc.input(WIN_MID,0,13,"Validation User Number (0=Nobody)"
        !           465:                                                        ,str,4,K_NUMBER|K_EDIT);
        !           466:                                                cfg.node_valuser=atoi(str);
        !           467:                                                break;
        !           468:                                        case 1:
        !           469:                                                ultoa(cfg.node_sem_check,str,10);
        !           470: SETHELP(WHERE);
        !           471: /*
        !           472: &Semaphore Check Frequency While Waiting for Call (in seconds):&
        !           473: 
        !           474: This is the number of seconds between semaphore checks while this node
        !           475: is waiting for a caller. Default is &60& seconds.
        !           476: */
        !           477:                                                uifc.input(WIN_MID|WIN_SAV,0,14
        !           478:                                                        ,"Seconds Between Semaphore Checks"
        !           479:                                                        ,str,3,K_NUMBER|K_EDIT);
        !           480:                                                cfg.node_sem_check=atoi(str);
        !           481:                         break;
        !           482:                                        case 2:
        !           483:                                                ultoa(cfg.node_stat_check,str,10);
        !           484: SETHELP(WHERE);
        !           485: /*
        !           486: &Statistics Check Frequency While Waiting for Call (in seconds):&
        !           487: 
        !           488: This is the number of seconds between static checks while this node
        !           489: is waiting for a caller. Default is &10& seconds.
        !           490: */
        !           491:                                                uifc.input(WIN_MID|WIN_SAV,0,14
        !           492:                                                        ,"Seconds Between Statistic Checks"
        !           493:                                                        ,str,3,K_NUMBER|K_EDIT);
        !           494:                                                cfg.node_stat_check=atoi(str);
        !           495:                         break;
        !           496:                                        case 3:
        !           497:                                                ultoa(cfg.sec_warn,str,10);
        !           498: SETHELP(WHERE);
        !           499: /*
        !           500: &Seconds Before Inactivity Warning:&
        !           501: 
        !           502: This is the number of seconds the user must be inactive before a
        !           503: warning will be given. Default is &180& seconds.
        !           504: */
        !           505:                                                uifc.input(WIN_MID|WIN_SAV,0,14
        !           506:                                                        ,"Seconds Before Inactivity Warning"
        !           507:                                                        ,str,4,K_NUMBER|K_EDIT);
        !           508:                                                cfg.sec_warn=atoi(str);
        !           509:                         break;
        !           510:                                        case 4:
        !           511:                                                ultoa(cfg.sec_hangup,str,10);
        !           512: SETHELP(WHERE);
        !           513: /*
        !           514: &Seconds Before Inactivity Disconnection:&
        !           515: 
        !           516: This is the number of seconds the user must be inactive before they
        !           517: will be automatically disconnected. Default is &300& seconds.
        !           518: */
        !           519:                                                uifc.input(WIN_MID|WIN_SAV,0,14
        !           520:                                                        ,"Seconds Before Inactivity Disconnection"
        !           521:                                                        ,str,4,K_NUMBER|K_EDIT);
        !           522:                                                cfg.sec_hangup=atoi(str);
        !           523:                         break;
        !           524:                                        case 5:
        !           525: SETHELP(WHERE);
        !           526: /*
        !           527: &Daily Event:&
        !           528: 
        !           529: If you have an event that this node should run every day, enter the
        !           530: command line for that event here.
        !           531: 
        !           532: An event can be any valid DOS command line. If multiple programs or
        !           533: commands are required, use a batch file.
        !           534: 
        !           535: Remember: The &%!& command line specifier is an abreviation for your
        !           536:                  configured &EXEC& directory path.
        !           537: */
        !           538:                                                uifc.input(WIN_MID|WIN_SAV,0,10,"Daily Event"
        !           539:                                                        ,cfg.node_daily,sizeof(cfg.node_daily)-1,K_EDIT);
        !           540:                                                break;
        !           541:                                        case 6:
        !           542: SETHELP(WHERE);
        !           543: /*
        !           544: &Text Directory:&
        !           545: 
        !           546: Your text directory contains &read-only& text files. Synchronet never
        !           547: &writes& to any files in this directory so it &CAN& be placed on a RAM
        !           548: disk or other volatile media. This directory contains the system's menus
        !           549: and other important text files, so be sure the files and directories are
        !           550: moved to this directory if you decide to change it.
        !           551: 
        !           552: This option allows you to change the location of your control directory.
        !           553: The &\TEXT\& suffix (sub-directory) cannot be changed or removed.
        !           554: */
        !           555:                                                uifc.input(WIN_MID|WIN_SAV,0,10,"Text Directory"
        !           556:                                                        ,cfg.text_dir,sizeof(cfg.text_dir)-1,K_EDIT);
        !           557:                                                break; 
        !           558:                                } 
        !           559:                        }
        !           560:                        break;
        !           561:                } 
        !           562:        }
        !           563: }

unix.superglobalmegacorp.com

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