Annotation of sbbs/src/sbbs3/scfg/scfgsub.c, revision 1.1.1.2

1.1.1.2 ! root        1: /* scfgsub.c */
        !             2: 
        !             3: /* $Id: scfgsub.c,v 1.29 2011/06/30 03:07: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 2011 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 sub_cfg(uint grpnum)
        !            39: {
        !            40:        static int dflt,tog_dflt,opt_dflt,net_dflt,adv_dflt,bar;
        !            41:        char str[81],str2[81],done=0,code[9],*p;
        !            42:        char path[MAX_PATH+1];
        !            43:        char data_dir[MAX_PATH+1];
        !            44:        int j,m,n,ptridx,q,s;
        !            45:        uint i,subnum[MAX_OPTS+1];
        !            46:        static sub_t savsub;
        !            47: 
        !            48: while(1) {
        !            49:        for(i=0,j=0;i<cfg.total_subs && j<MAX_OPTS;i++)
        !            50:         if(cfg.sub[i]->grp==grpnum) {
        !            51:                        subnum[j]=i;
        !            52:                        if(cfg.sub[subnum[0]]->qwkconf)
        !            53:                                sprintf(opt[j],"%-5u %s"
        !            54:                                        ,cfg.sub[i]->qwkconf,cfg.sub[i]->lname);
        !            55:                        else
        !            56:                                sprintf(opt[j],"%s"
        !            57:                                        ,cfg.sub[i]->lname);
        !            58:                        j++; }
        !            59:        subnum[j]=cfg.total_subs;
        !            60:        opt[j][0]=0;
        !            61:        sprintf(str,"%s Sub-boards",cfg.grp[grpnum]->sname);
        !            62:        i=WIN_SAV|WIN_ACT;
        !            63:        if(j)
        !            64:                i|=WIN_DEL|WIN_GET|WIN_DELACT;
        !            65:        if(j<MAX_OPTS)
        !            66:                i|=WIN_INS|WIN_XTR|WIN_INSACT;
        !            67:        if(savsub.sname[0])
        !            68:                i|=WIN_PUT;
        !            69:        SETHELP(WHERE);
        !            70: /*
        !            71: `Message Sub-boards:`
        !            72: 
        !            73: This is a list of message sub-boards that have been configured for the
        !            74: selected message group.
        !            75: 
        !            76: To add a sub-board, select the desired position with the arrow keys and
        !            77: hit ~ INS ~.
        !            78: 
        !            79: To delete a sub-board, select it with the arrow keys and hit ~ DEL ~.
        !            80: 
        !            81: To configure a sub-board, select it with the arrow keys and hit ~ ENTER ~.
        !            82: */
        !            83:        i=uifc.list(i,24,1,LEN_SLNAME+5,&dflt,&bar,str,opt);
        !            84:        if((signed)i==-1)
        !            85:                return;
        !            86:        if((i&MSK_ON)==MSK_INS) {
        !            87:                i&=MSK_OFF;
        !            88:                strcpy(str,"General");
        !            89:                SETHELP(WHERE);
        !            90: /*
        !            91: `Sub-board Long Name:`
        !            92: 
        !            93: This is a description of the message sub-board which is displayed in all
        !            94: sub-board listings.
        !            95: */
        !            96:                if(uifc.input(WIN_MID|WIN_SAV,0,0,"Sub-board Long Name",str,LEN_SLNAME
        !            97:                        ,K_EDIT)<1)
        !            98:                        continue;
        !            99:                sprintf(str2,"%.*s",LEN_SSNAME,str);
        !           100:                SETHELP(WHERE);
        !           101: /*
        !           102: `Sub-board Short Name:`
        !           103: 
        !           104: This is a short description of the message sub-board which is displayed
        !           105: at the main and reading messages prompts.
        !           106: */
        !           107:                if(uifc.input(WIN_MID|WIN_SAV,0,0,"Sub-board Short Name",str2,LEN_SSNAME
        !           108:                        ,K_EDIT)<1)
        !           109:                        continue;
        !           110: #if 0
        !           111:                sprintf(str3,"%.10s",str2);
        !           112:                SETHELP(WHERE);
        !           113: /*
        !           114: `Sub-board QWK Name:`
        !           115: 
        !           116: This is the name of the sub-board used for QWK off-line readers.
        !           117: */
        !           118:                if(uifc.input(WIN_MID|WIN_SAV,0,0,"Sub-board QWK Name",str3,10
        !           119:             ,K_EDIT)<1)
        !           120:             continue;
        !           121: #endif
        !           122:                sprintf(code,"%.8s",str2);
        !           123:                p=strchr(code,' ');
        !           124:                if(p) *p=0;
        !           125:                strupr(code);
        !           126:                SETHELP(WHERE);
        !           127: /*
        !           128: `Sub-board Internal Code Suffix:`
        !           129: 
        !           130: Every sub-board must have its own unique code for Synchronet to refer to
        !           131: it internally. This code should be descriptive of the sub-board's topic,
        !           132: usually an abreviation of the sub-board's name.
        !           133: 
        !           134: `Note:` The internal code is constructed from the message group's code
        !           135: prefix (if present) and the sub-board's code suffix.
        !           136: */
        !           137:                if(uifc.input(WIN_MID|WIN_SAV,0,0,"Sub-board Internal Code Suffix",code,LEN_CODE
        !           138:                        ,K_EDIT|K_UPPER)<1)
        !           139:                        continue;
        !           140:                if(!code_ok(code)) {
        !           141:                        uifc.helpbuf=invalid_code;
        !           142:                        uifc.msg("Invalid Code");
        !           143:                        uifc.helpbuf=0;
        !           144:                        continue; 
        !           145:                }
        !           146: 
        !           147:                if((cfg.sub=(sub_t **)realloc(cfg.sub,sizeof(sub_t *)*(cfg.total_subs+1)))==NULL) {
        !           148:             errormsg(WHERE,ERR_ALLOC,nulstr,cfg.total_subs+1);
        !           149:                        cfg.total_subs=0;
        !           150:                        bail(1);
        !           151:             continue; }
        !           152: 
        !           153:                for(ptridx=0;ptridx<USHRT_MAX;ptridx++) { /* Search for unused pointer indx */
        !           154:             for(n=0;n<cfg.total_subs;n++)
        !           155:                                if(cfg.sub[n]->ptridx==ptridx)
        !           156:                     break;
        !           157:             if(n==cfg.total_subs)
        !           158:                 break; }
        !           159: 
        !           160:                if(j) {
        !           161:                        for(n=cfg.total_subs;n>subnum[i];n--)
        !           162:                 cfg.sub[n]=cfg.sub[n-1];
        !           163:                        for(q=0;q<cfg.total_qhubs;q++)
        !           164:                                for(s=0;s<cfg.qhub[q]->subs;s++)
        !           165:                                        if(cfg.qhub[q]->sub[s]>=subnum[i])
        !           166:                                                cfg.qhub[q]->sub[s]++; }
        !           167: 
        !           168:                if((cfg.sub[subnum[i]]=(sub_t *)malloc(sizeof(sub_t)))==NULL) {
        !           169:                        errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(sub_t));
        !           170:                        continue; }
        !           171:                memset((sub_t *)cfg.sub[subnum[i]],0,sizeof(sub_t));
        !           172:                cfg.sub[subnum[i]]->grp=grpnum;
        !           173:                if(cfg.total_faddrs)
        !           174:                        cfg.sub[subnum[i]]->faddr=cfg.faddr[0];
        !           175:                else
        !           176:                        memset(&cfg.sub[subnum[i]]->faddr,0,sizeof(faddr_t));
        !           177:                cfg.sub[subnum[i]]->maxmsgs=500;
        !           178:                strcpy(cfg.sub[subnum[i]]->code_suffix,code);
        !           179:                strcpy(cfg.sub[subnum[i]]->lname,str);
        !           180:                strcpy(cfg.sub[subnum[i]]->sname,str2);
        !           181:                strcpy(cfg.sub[subnum[i]]->qwkname,code);
        !           182:                if(strchr(str,'.') && strchr(str,' ')==NULL)
        !           183:                        strcpy(cfg.sub[subnum[i]]->newsgroup,str);
        !           184:                cfg.sub[subnum[i]]->misc=(SUB_NSDEF|SUB_SSDEF|SUB_QUOTE|SUB_TOUSER
        !           185:                        |SUB_HDRMOD|SUB_FAST);
        !           186:                cfg.sub[subnum[i]]->ptridx=ptridx;
        !           187:                cfg.total_subs++;
        !           188:                uifc.changes=1;
        !           189:                continue; }
        !           190:        if((i&MSK_ON)==MSK_DEL) {
        !           191:                i&=MSK_OFF;
        !           192:                SETHELP(WHERE);
        !           193: /*
        !           194: `Delete Data in Sub-board:`
        !           195: 
        !           196: If you want to delete all the messages for this sub-board, select `Yes`.
        !           197: */
        !           198:                j=1;
        !           199:                strcpy(opt[0],"Yes");
        !           200:                strcpy(opt[1],"No");
        !           201:                opt[2][0]=0;
        !           202:                SAFEPRINTF2(str,"%s%s.*"
        !           203:                        ,cfg.grp[cfg.sub[subnum[i]]->grp]->code_prefix
        !           204:                        ,cfg.sub[subnum[i]]->code_suffix);
        !           205:                strlwr(str);
        !           206:                if(!cfg.sub[subnum[i]]->data_dir[0])
        !           207:                        SAFEPRINTF(data_dir,"%ssubs/",cfg.data_dir);
        !           208:                else
        !           209:                        SAFECOPY(data_dir,cfg.sub[subnum[i]]->data_dir);
        !           210: 
        !           211:                SAFEPRINTF2(path,"%s%s",data_dir,str);
        !           212:                if(fexist(path)) {
        !           213:                        SAFEPRINTF(str2,"Delete %s",path);
        !           214:                        j=uifc.list(WIN_MID|WIN_SAV,0,0,0,&j,0
        !           215:                                ,str2,opt);
        !           216:                        if(j==-1)
        !           217:                                continue;
        !           218:                        if(j==0) {
        !           219:                                        delfiles(data_dir,str);
        !           220:                                        clearptrs(subnum[i]); 
        !           221:                        }
        !           222:                }
        !           223:                free(cfg.sub[subnum[i]]);
        !           224:                cfg.total_subs--;
        !           225:                for(j=subnum[i];j<cfg.total_subs;j++)
        !           226:                        cfg.sub[j]=cfg.sub[j+1];
        !           227:                for(q=0;q<cfg.total_qhubs;q++)
        !           228:                        for(s=0;s<cfg.qhub[q]->subs;s++) {
        !           229:                                if(cfg.qhub[q]->sub[s]==subnum[i])
        !           230:                                        cfg.qhub[q]->sub[s]=INVALID_SUB;
        !           231:                                else if(cfg.qhub[q]->sub[s]>subnum[i])
        !           232:                                        cfg.qhub[q]->sub[s]--; }
        !           233:                uifc.changes=1;
        !           234:                continue; }
        !           235:        if((i&MSK_ON)==MSK_GET) {
        !           236:                i&=MSK_OFF;
        !           237:                savsub=*cfg.sub[subnum[i]];
        !           238:                continue; }
        !           239:        if((i&MSK_ON)==MSK_PUT) {
        !           240:                i&=MSK_OFF;
        !           241:                ptridx=cfg.sub[subnum[i]]->ptridx;
        !           242:                *cfg.sub[subnum[i]]=savsub;
        !           243:                cfg.sub[subnum[i]]->ptridx=ptridx;
        !           244:                cfg.sub[subnum[i]]->grp=grpnum;
        !           245:                uifc.changes=1;
        !           246:         continue; }
        !           247:        i=subnum[i];
        !           248:        j=0;
        !           249:        done=0;
        !           250:        while(!done) {
        !           251:                n=0;
        !           252:                sprintf(opt[n++],"%-27.27s%s","Long Name",cfg.sub[i]->lname);
        !           253:                sprintf(opt[n++],"%-27.27s%s","Short Name",cfg.sub[i]->sname);
        !           254:                sprintf(opt[n++],"%-27.27s%s","QWK Name",cfg.sub[i]->qwkname);
        !           255:                sprintf(opt[n++],"%-27.27s%s%s","Internal Code"
        !           256:                        ,cfg.grp[cfg.sub[i]->grp]->code_prefix, cfg.sub[i]->code_suffix);
        !           257:                sprintf(opt[n++],"%-27.27s%s","Newsgroup Name",cfg.sub[i]->newsgroup);
        !           258:                sprintf(opt[n++],"%-27.27s%.40s","Access Requirements"
        !           259:                        ,cfg.sub[i]->arstr);
        !           260:                sprintf(opt[n++],"%-27.27s%.40s","Reading Requirements"
        !           261:             ,cfg.sub[i]->read_arstr);
        !           262:                sprintf(opt[n++],"%-27.27s%.40s","Posting Requirements"
        !           263:                        ,cfg.sub[i]->post_arstr);
        !           264:                sprintf(opt[n++],"%-27.27s%.40s","Operator Requirements"
        !           265:                        ,cfg.sub[i]->op_arstr);
        !           266:                sprintf(opt[n++],"%-27.27s%.40s","Moderated Posting User"
        !           267:                        ,cfg.sub[i]->mod_arstr);
        !           268:                sprintf(opt[n++],"%-27.27s%lu","Maximum Messages"
        !           269:             ,cfg.sub[i]->maxmsgs);
        !           270:                if(cfg.sub[i]->maxage)
        !           271:             sprintf(str,"Enabled (%u days old)",cfg.sub[i]->maxage);
        !           272:         else
        !           273:             strcpy(str,"Disabled");
        !           274:                sprintf(opt[n++],"%-27.27s%s","Purge by Age",str);
        !           275:                if(cfg.sub[i]->maxcrcs)
        !           276:                        sprintf(str,"Enabled (%lu message CRCs)",cfg.sub[i]->maxcrcs);
        !           277:                else
        !           278:                        strcpy(str,"Disabled");
        !           279:                sprintf(opt[n++],"%-27.27s%s","Duplicate Checking",str);
        !           280: 
        !           281:                strcpy(opt[n++],"Toggle Options...");
        !           282:                strcpy(opt[n++],"Network Options...");
        !           283:                strcpy(opt[n++],"Advanced Options...");
        !           284:                opt[n][0]=0;
        !           285:                sprintf(str,"%s Sub-board",cfg.sub[i]->sname);
        !           286:                SETHELP(WHERE);
        !           287: /*
        !           288: `Sub-board Configuration:`
        !           289: 
        !           290: This menu allows you to configure the individual selected sub-board.
        !           291: Options with a trailing `...` provide a sub-menu of more options.
        !           292: */
        !           293:                switch(uifc.list(WIN_ACT|WIN_SAV|WIN_RHT|WIN_BOT
        !           294:                        ,0,0,60,&opt_dflt,0,str,opt)) {
        !           295:                        case -1:
        !           296:                                done=1;
        !           297:                                break;
        !           298:                        case 0:
        !           299:                                SETHELP(WHERE);
        !           300: /*
        !           301: `Sub-board Long Name:`
        !           302: 
        !           303: This is a description of the message sub-board which is displayed in all
        !           304: sub-board listings.
        !           305: */
        !           306:                                strcpy(str,cfg.sub[i]->lname);  /* save */
        !           307:                                if(!uifc.input(WIN_MID|WIN_SAV,0,17,"Name to use for Listings"
        !           308:                                        ,cfg.sub[i]->lname,LEN_SLNAME,K_EDIT))
        !           309:                                        strcpy(cfg.sub[i]->lname,str);  /* restore */
        !           310:                                break;
        !           311:                        case 1:
        !           312:                                SETHELP(WHERE);
        !           313: /*
        !           314: `Sub-board Short Name:`
        !           315: 
        !           316: This is a short description of the message sub-board which is displayed
        !           317: at the main and reading messages prompts.
        !           318: */
        !           319:                                uifc.input(WIN_MID|WIN_SAV,0,17,"Name to use for Prompts"
        !           320:                                        ,cfg.sub[i]->sname,LEN_SSNAME,K_EDIT);
        !           321:                                break;
        !           322:                        case 2:
        !           323:                                SETHELP(WHERE);
        !           324: /*
        !           325: `Sub-board QWK Name:`
        !           326: 
        !           327: This is the name of the sub-board used for QWK off-line readers.
        !           328: */
        !           329:                                uifc.input(WIN_MID|WIN_SAV,0,17,"Name to use for QWK Packets"
        !           330:                                        ,cfg.sub[i]->qwkname,10,K_EDIT);
        !           331:                 break;
        !           332:                        case 3:
        !           333:                 SETHELP(WHERE);
        !           334: /*
        !           335: `Sub-board Internal Code Suffix:`
        !           336: 
        !           337: Every sub-board must have its own unique code for Synchronet to refer
        !           338: to it internally. This code should be descriptive of the sub-board's
        !           339: topic, usually an abreviation of the sub-board's name.
        !           340: 
        !           341: `Note:` The internal code displayed is the complete internal code
        !           342: constructed from the message group's code prefix and the sub-board's
        !           343: code suffix.
        !           344: */
        !           345:                 strcpy(str,cfg.sub[i]->code_suffix);
        !           346:                 uifc.input(WIN_MID|WIN_SAV,0,17,"Internal Code Suffix (unique)"
        !           347:                     ,str,LEN_CODE,K_EDIT|K_UPPER);
        !           348:                 if(code_ok(str))
        !           349:                     strcpy(cfg.sub[i]->code_suffix,str);
        !           350:                 else {
        !           351:                     uifc.helpbuf=invalid_code;
        !           352:                     uifc.msg("Invalid Code");
        !           353:                     uifc.helpbuf=0; 
        !           354:                                }
        !           355:                 break;
        !           356:                        case 4:
        !           357:                                SETHELP(WHERE);
        !           358: /*
        !           359: Newsgroup Name:
        !           360: 
        !           361: This is the name of the sub-board used for newsgroup readers. If no name
        !           362: is configured here, a name will be automatically generated from the
        !           363: sub-board's name and group name.
        !           364: */
        !           365:                                uifc.input(WIN_MID|WIN_SAV,0,17,""
        !           366:                                        ,cfg.sub[i]->newsgroup,sizeof(cfg.sub[i]->newsgroup)-1,K_EDIT);
        !           367:                 break;
        !           368:                        case 5:
        !           369:                                sprintf(str,"%s Access",cfg.sub[i]->sname);
        !           370:                                getar(str,cfg.sub[i]->arstr);
        !           371:                                break;
        !           372:                        case 6:
        !           373:                                sprintf(str,"%s Reading",cfg.sub[i]->sname);
        !           374:                                getar(str,cfg.sub[i]->read_arstr);
        !           375:                 break;
        !           376:                        case 7:
        !           377:                                sprintf(str,"%s Posting",cfg.sub[i]->sname);
        !           378:                                getar(str,cfg.sub[i]->post_arstr);
        !           379:                 break;
        !           380:                        case 8:
        !           381:                                sprintf(str,"%s Operator",cfg.sub[i]->sname);
        !           382:                                getar(str,cfg.sub[i]->op_arstr);
        !           383:                 break;
        !           384:                        case 9:
        !           385:                                sprintf(str,"%s Moderated Posting User",cfg.sub[i]->sname);
        !           386:                                getar(str,cfg.sub[i]->mod_arstr);
        !           387:                 break;
        !           388:                        case 10:
        !           389:                                sprintf(str,"%lu",cfg.sub[i]->maxmsgs);
        !           390:                 SETHELP(WHERE);
        !           391: /*
        !           392: `Maximum Number of Messages:`
        !           393: 
        !           394: This value is the maximum number of messages that will be kept in the
        !           395: sub-board. Once this maximum number of messages is reached, the oldest
        !           396: messages will be automatically purged. Usually, 100 messages is a
        !           397: sufficient maximum.
        !           398: */
        !           399:                 uifc.input(WIN_MID|WIN_SAV,0,17,"Maximum Number of Messages"
        !           400:                     ,str,9,K_EDIT|K_NUMBER);
        !           401:                 cfg.sub[i]->maxmsgs=atoi(str);
        !           402:                 cfg.sub[i]->misc|=SUB_HDRMOD;
        !           403:                                break;
        !           404:                        case 11:
        !           405:                                sprintf(str,"%u",cfg.sub[i]->maxage);
        !           406:                 SETHELP(WHERE);
        !           407: /*
        !           408: `Maximum Age of Messages:`
        !           409: 
        !           410: This value is the maximum number of days that messages will be kept in
        !           411: the sub-board.
        !           412: */
        !           413:                 uifc.input(WIN_MID|WIN_SAV,0,17,"Maximum Age of Messages (in days)"
        !           414:                     ,str,5,K_EDIT|K_NUMBER);
        !           415:                 cfg.sub[i]->maxage=atoi(str);
        !           416:                 cfg.sub[i]->misc|=SUB_HDRMOD;
        !           417:                                break;
        !           418:                        case 12:
        !           419:                                sprintf(str,"%lu",cfg.sub[i]->maxcrcs);
        !           420:                                SETHELP(WHERE);
        !           421: /*
        !           422: `Maximum Number of CRCs:`
        !           423: 
        !           424: This value is the maximum number of CRCs that will be kept in the
        !           425: sub-board for duplicate message checking. Once this maximum number of
        !           426: CRCs is reached, the oldest CRCs will be automatically purged.
        !           427: */
        !           428:                                uifc.input(WIN_MID|WIN_SAV,0,17,"Maximum Number of CRCs"
        !           429:                                        ,str,9,K_EDIT|K_NUMBER);
        !           430:                                cfg.sub[i]->maxcrcs=atol(str);
        !           431:                                cfg.sub[i]->misc|=SUB_HDRMOD;
        !           432:                 break;
        !           433:                        case 13:
        !           434:                                while(1) {
        !           435:                                        n=0;
        !           436:                                        sprintf(opt[n++],"%-27.27s%s","Allow Private Posts"
        !           437:                                                ,cfg.sub[i]->misc&SUB_PRIV ? cfg.sub[i]->misc&SUB_PONLY
        !           438:                                                ? "Only":"Yes":"No");
        !           439:                                        sprintf(opt[n++],"%-27.27s%s","Allow Anonymous Posts"
        !           440:                                                ,cfg.sub[i]->misc&SUB_ANON ? cfg.sub[i]->misc&SUB_AONLY
        !           441:                                                ? "Only":"Yes":"No");
        !           442:                                        sprintf(opt[n++],"%-27.27s%s","Post Using Real Names"
        !           443:                                                ,cfg.sub[i]->misc&SUB_NAME ? "Yes":"No");
        !           444:                                        sprintf(opt[n++],"%-27.27s%s","Users Can Edit Posts"
        !           445:                                                ,cfg.sub[i]->misc&SUB_EDIT ? cfg.sub[i]->misc&SUB_EDITLAST 
        !           446:                                                ? "Last" : "Yes" : "No");
        !           447:                                        sprintf(opt[n++],"%-27.27s%s","Users Can Delete Posts"
        !           448:                                                ,cfg.sub[i]->misc&SUB_DEL ? cfg.sub[i]->misc&SUB_DELLAST
        !           449:                                                ? "Last" : "Yes" : "No");
        !           450:                                        sprintf(opt[n++],"%-27.27s%s","Default On for New Scan"
        !           451:                                                ,cfg.sub[i]->misc&SUB_NSDEF ? "Yes":"No");
        !           452:                                        sprintf(opt[n++],"%-27.27s%s","Forced On for New Scan"
        !           453:                                                ,cfg.sub[i]->misc&SUB_FORCED ? "Yes":"No");
        !           454:                                        sprintf(opt[n++],"%-27.27s%s","Default On for Your Scan"
        !           455:                                                ,cfg.sub[i]->misc&SUB_SSDEF ? "Yes":"No");
        !           456:                                        sprintf(opt[n++],"%-27.27s%s","Public 'To' User"
        !           457:                                                ,cfg.sub[i]->misc&SUB_TOUSER ? "Yes":"No");
        !           458:                                        sprintf(opt[n++],"%-27.27s%s","Allow Message Quoting"
        !           459:                                                ,cfg.sub[i]->misc&SUB_QUOTE ? "Yes":"No");
        !           460:                                        sprintf(opt[n++],"%-27.27s%s","Suppress User Signatures"
        !           461:                                                ,cfg.sub[i]->misc&SUB_NOUSERSIG ? "Yes":"No");
        !           462:                                        sprintf(opt[n++],"%-27.27s%s","Permanent Operator Msgs"
        !           463:                                                ,cfg.sub[i]->misc&SUB_SYSPERM ? "Yes":"No");
        !           464:                                        sprintf(opt[n++],"%-27.27s%s","Kill Read Messages"
        !           465:                                                ,cfg.sub[i]->misc&SUB_KILL ? "Yes"
        !           466:                                                : (cfg.sub[i]->misc&SUB_KILLP ? "Pvt" : "No"));
        !           467:                                        sprintf(opt[n++],"%-27.27s%s","Compress Messages (LZH)"
        !           468:                                                ,cfg.sub[i]->misc&SUB_LZH ? "Yes" : "No");
        !           469: 
        !           470:                                        opt[n][0]=0;
        !           471:                                        SETHELP(WHERE);
        !           472: /*
        !           473: `Sub-board Toggle Options:`
        !           474: 
        !           475: This menu allows you to toggle certain options for the selected
        !           476: sub-board between two or more settings, such as `Yes` and `No`.
        !           477: */
        !           478:                                        n=uifc.list(WIN_ACT|WIN_SAV|WIN_RHT|WIN_BOT,3,2,36,&tog_dflt,0
        !           479:                                                ,"Toggle Options",opt);
        !           480:                                        if(n==-1)
        !           481:                                                break;
        !           482:                                        switch(n) {
        !           483:                                                case 0:
        !           484:                                                        if(cfg.sub[i]->misc&SUB_PONLY)
        !           485:                                                                n=2;
        !           486:                                                        else 
        !           487:                                                                n=(cfg.sub[i]->misc&SUB_PRIV) ? 0:1;
        !           488:                                                        strcpy(opt[0],"Yes");
        !           489:                                                        strcpy(opt[1],"No");
        !           490:                                                        strcpy(opt[2],"Only");
        !           491:                                                        opt[3][0]=0;
        !           492:                                                        SETHELP(WHERE);
        !           493: /*
        !           494: `Allow Private Posts on Sub-board:`
        !           495: 
        !           496: If you want users to be able to post private messages to other users
        !           497: on this sub-board, set this value to `Yes`. Usually, E-mail is the
        !           498: preferred method of private communication. If you want users to be able
        !           499: to post private messages only on this sub-board, select `Only`.
        !           500: */
        !           501:                                                        n=uifc.list(WIN_SAV|WIN_MID,0,0,0,&n,0
        !           502:                                                                ,"Allow Private Posts",opt);
        !           503:                                                        if(n==-1)
        !           504:                                                                break;
        !           505:                                                        if(!n && (cfg.sub[i]->misc&(SUB_PRIV|SUB_PONLY))
        !           506:                                                                !=SUB_PRIV) {
        !           507:                                                                uifc.changes=1;
        !           508:                                                                cfg.sub[i]->misc&=~SUB_PONLY;
        !           509:                                                                cfg.sub[i]->misc|=SUB_PRIV;
        !           510:                                                                break; }
        !           511:                                                        if(n==1 && cfg.sub[i]->misc&SUB_PRIV) {
        !           512:                                                                uifc.changes=1;
        !           513:                                                                cfg.sub[i]->misc&=~SUB_PRIV;
        !           514:                                                                break; }
        !           515:                                                        if(n==2 && (cfg.sub[i]->misc&(SUB_PRIV|SUB_PONLY))
        !           516:                                                                !=(SUB_PRIV|SUB_PONLY)) {
        !           517:                                                                uifc.changes=1;
        !           518:                                                                cfg.sub[i]->misc|=(SUB_PRIV|SUB_PONLY); }
        !           519:                                                        break;
        !           520:                                                case 1:
        !           521:                                                        if(cfg.sub[i]->misc&SUB_AONLY)
        !           522:                                                                n=2;
        !           523:                                                        else 
        !           524:                                                                n=(cfg.sub[i]->misc&SUB_ANON) ? 0:1;
        !           525:                                                        strcpy(opt[0],"Yes");
        !           526:                                                        strcpy(opt[1],"No");
        !           527:                                                        strcpy(opt[2],"Only");
        !           528:                                                        opt[3][0]=0;
        !           529:                                                        SETHELP(WHERE);
        !           530: /*
        !           531: `Allow Anonymous Posts on Sub-board:`
        !           532: 
        !           533: If you want users with the `A` exemption to be able to post anonymously on
        !           534: this sub-board, select `Yes`. If you want all posts on this sub-board to be
        !           535: forced anonymous, select `Only`. If you do not want anonymous posts allowed
        !           536: on this sub-board at all, select `No`.
        !           537: */
        !           538:                                                        n=uifc.list(WIN_SAV|WIN_MID,0,0,0,&n,0
        !           539:                                                                ,"Allow Anonymous Posts",opt);
        !           540:                                                        if(n==-1)
        !           541:                                                                break;
        !           542:                                                        if(!n && (cfg.sub[i]->misc&(SUB_ANON|SUB_AONLY))
        !           543:                                                                !=SUB_ANON) {
        !           544:                                                                uifc.changes=1;
        !           545:                                                                cfg.sub[i]->misc&=~SUB_AONLY;
        !           546:                                                                cfg.sub[i]->misc|=SUB_ANON;
        !           547:                                                                break; }
        !           548:                                                        if(n==1 && cfg.sub[i]->misc&(SUB_ANON|SUB_AONLY)) {
        !           549:                                                                uifc.changes=1;
        !           550:                                                                cfg.sub[i]->misc&=~(SUB_ANON|SUB_AONLY);
        !           551:                                                                break; }
        !           552:                                                        if(n==2 && (cfg.sub[i]->misc&(SUB_ANON|SUB_AONLY))
        !           553:                                                                !=(SUB_ANON|SUB_AONLY)) {
        !           554:                                                                uifc.changes=1;
        !           555:                                                                cfg.sub[i]->misc|=(SUB_ANON|SUB_AONLY); }
        !           556:                             break;
        !           557:                                                case 2:
        !           558:                                                        n=(cfg.sub[i]->misc&SUB_NAME) ? 0:1;
        !           559:                                                        strcpy(opt[0],"Yes");
        !           560:                                                        strcpy(opt[1],"No");
        !           561:                                                        opt[2][0]=0;
        !           562:                                                        SETHELP(WHERE);
        !           563: /*
        !           564: `User Real Names in Posts on Sub-board:`
        !           565: 
        !           566: If you allow aliases on your system, you can have messages on this
        !           567: sub-board automatically use the real name of the posting user by setting
        !           568: this option to `Yes`.
        !           569: */
        !           570:                                                        n=uifc.list(WIN_SAV|WIN_MID,0,0,0,&n,0
        !           571:                                                                ,"Use Real Names in Posts",opt);
        !           572:                                                        if(n==-1)
        !           573:                                 break;
        !           574:                                                        if(!n && !(cfg.sub[i]->misc&SUB_NAME)) {
        !           575:                                                                uifc.changes=1;
        !           576:                                                                cfg.sub[i]->misc|=SUB_NAME;
        !           577:                                                                break; }
        !           578:                                                        if(n==1 && cfg.sub[i]->misc&SUB_NAME) {
        !           579:                                                                uifc.changes=1;
        !           580:                                                                cfg.sub[i]->misc&=~SUB_NAME; }
        !           581:                                                        break;
        !           582:                                                case 3:
        !           583:                                                        if(cfg.sub[i]->misc&SUB_EDITLAST)
        !           584:                                                                n=2;
        !           585:                                                        else
        !           586:                                                                n=(cfg.sub[i]->misc&SUB_EDIT) ? 0:1;
        !           587:                                                        strcpy(opt[0],"Yes");
        !           588:                                                        strcpy(opt[1],"No");
        !           589:                                                        strcpy(opt[2],"Last Post Only");
        !           590:                                                        opt[3][0]=0;
        !           591:                                                        SETHELP(WHERE);
        !           592: /*
        !           593: `Users Can Edit Posts on Sub-board:`
        !           594: 
        !           595: If you wish to allow users to edit their messages after they have been
        !           596: posted, this option to `Yes`. If you wish to allow users to edit only the
        !           597: last message on a message base, set this option to `Last Post Only`.
        !           598: */
        !           599:                                                        n=uifc.list(WIN_SAV|WIN_MID,0,0,0,&n,0
        !           600:                                                                ,"Users Can Edit Messages",opt);
        !           601:                                                        if(n==-1)
        !           602:                                 break;
        !           603:                                                        if(n==0 /* yes */
        !           604:                                                                && (cfg.sub[i]->misc&(SUB_EDIT|SUB_EDITLAST))
        !           605:                                                                !=SUB_EDIT
        !           606:                                                                ) {
        !           607:                                                                uifc.changes=1;
        !           608:                                                                cfg.sub[i]->misc|=SUB_EDIT;
        !           609:                                                                cfg.sub[i]->misc&=~SUB_EDITLAST;
        !           610:                                                                break; 
        !           611:                                                        }
        !           612:                                                        if(n==1 /* no */
        !           613:                                                                && cfg.sub[i]->misc&(SUB_EDIT|SUB_EDITLAST)
        !           614:                                                                ) {
        !           615:                                                                uifc.changes=1;
        !           616:                                                                cfg.sub[i]->misc&=~(SUB_EDIT|SUB_EDITLAST);
        !           617:                                                                break;
        !           618:                                                        }
        !           619:                                                        if(n==2 /* last only */
        !           620:                                                                && (cfg.sub[i]->misc&(SUB_EDIT|SUB_EDITLAST))
        !           621:                                                                !=(SUB_EDIT|SUB_EDITLAST)
        !           622:                                                                ) {
        !           623:                                                                uifc.changes=1;
        !           624:                                                                cfg.sub[i]->misc|=(SUB_EDIT|SUB_EDITLAST);
        !           625:                                                                break;
        !           626:                                                        }
        !           627:                             break;
        !           628:                                                case 4:
        !           629:                                                        if(cfg.sub[i]->misc&SUB_DELLAST)
        !           630:                                                                n=2;
        !           631:                                                        else 
        !           632:                                                                n=(cfg.sub[i]->misc&SUB_DEL) ? 0:1;
        !           633: 
        !           634:                                                        strcpy(opt[0],"Yes");
        !           635:                                                        strcpy(opt[1],"No");
        !           636:                                                        strcpy(opt[2],"Last Post Only");
        !           637:                                                        opt[3][0]=0;
        !           638:                                                        SETHELP(WHERE);
        !           639: /*
        !           640: `Users Can Delete Posts on Sub-board:`
        !           641: 
        !           642: If you want users to be able to delete any of their own posts on this
        !           643: sub-board, set this option to `Yes`. If you want to allow users the
        !           644: ability to delete their message only if it is the last message on the
        !           645: sub-board, select `Last Post Only`. If you want to disallow users from
        !           646: deleting any of their posts, set this option to `No`.
        !           647: */
        !           648:                                                        n=uifc.list(WIN_SAV|WIN_MID,0,0,0,&n,0
        !           649:                                                                ,"Users Can Delete Posts",opt);
        !           650:                                                        if(n==-1)
        !           651:                                                                break;
        !           652:                                                        if(!n && (cfg.sub[i]->misc&(SUB_DEL|SUB_DELLAST))
        !           653:                                                                !=SUB_DEL) {
        !           654:                                                                uifc.changes=1;
        !           655:                                                                cfg.sub[i]->misc&=~SUB_DELLAST;
        !           656:                                                                cfg.sub[i]->misc|=SUB_DEL;
        !           657:                                                                break; 
        !           658:                                                        }
        !           659:                                                        if(n==1 && cfg.sub[i]->misc&SUB_DEL) {
        !           660:                                                                uifc.changes=1;
        !           661:                                                                cfg.sub[i]->misc&=~SUB_DEL;
        !           662:                                                                break; 
        !           663:                                                        }
        !           664:                                                        if(n==2 && (cfg.sub[i]->misc&(SUB_DEL|SUB_DELLAST))
        !           665:                                                                !=(SUB_DEL|SUB_DELLAST)) {
        !           666:                                                                uifc.changes=1;
        !           667:                                                                cfg.sub[i]->misc|=(SUB_DEL|SUB_DELLAST); 
        !           668:                                                        }
        !           669:                             break;
        !           670:                                                case 5:
        !           671:                                                        n=(cfg.sub[i]->misc&SUB_NSDEF) ? 0:1;
        !           672:                                                        strcpy(opt[0],"Yes");
        !           673:                                                        strcpy(opt[1],"No");
        !           674:                                                        opt[2][0]=0;
        !           675:                                                        SETHELP(WHERE);
        !           676: /*
        !           677: `Default On for New Scan:`
        !           678: 
        !           679: If you want this sub-board to be included in all user new message scans
        !           680: by default, set this option to `Yes`.
        !           681: */
        !           682:                                                        n=uifc.list(WIN_SAV|WIN_MID,0,0,0,&n,0
        !           683:                                                                ,"Default On for New Scan",opt);
        !           684:                                                        if(n==-1)
        !           685:                                 break;
        !           686:                                                        if(!n && !(cfg.sub[i]->misc&SUB_NSDEF)) {
        !           687:                                                                uifc.changes=1;
        !           688:                                                                cfg.sub[i]->misc|=SUB_NSDEF;
        !           689:                                                                break; }
        !           690:                                                        if(n==1 && cfg.sub[i]->misc&SUB_NSDEF) {
        !           691:                                                                uifc.changes=1;
        !           692:                                                                cfg.sub[i]->misc&=~SUB_NSDEF; }
        !           693:                             break;
        !           694:                                                case 6:
        !           695:                                                        n=(cfg.sub[i]->misc&SUB_FORCED) ? 0:1;
        !           696:                                                        strcpy(opt[0],"Yes");
        !           697:                                                        strcpy(opt[1],"No");
        !           698:                                                        opt[2][0]=0;
        !           699:                                                        SETHELP(WHERE);
        !           700: /*
        !           701: `Forced On for New Scan:`
        !           702: 
        !           703: If you want this sub-board to be included in all user new message scans
        !           704: even if the user has removed it from their new scan configuration, set
        !           705: this option to `Yes`.
        !           706: */
        !           707:                                                        n=uifc.list(WIN_SAV|WIN_MID,0,0,0,&n,0
        !           708:                                                                ,"Forced New Scan",opt);
        !           709:                                                        if(n==-1)
        !           710:                                 break;
        !           711:                                                        if(!n && !(cfg.sub[i]->misc&SUB_FORCED)) {
        !           712:                                                                uifc.changes=1;
        !           713:                                                                cfg.sub[i]->misc|=SUB_FORCED;
        !           714:                                                                break; }
        !           715:                                                        if(n==1 && cfg.sub[i]->misc&SUB_FORCED) {
        !           716:                                                                uifc.changes=1;
        !           717:                                                                cfg.sub[i]->misc&=~SUB_FORCED; }
        !           718:                             break;
        !           719:                                                case 7:
        !           720:                                                        n=(cfg.sub[i]->misc&SUB_SSDEF) ? 0:1;
        !           721:                                                        strcpy(opt[0],"Yes");
        !           722:                                                        strcpy(opt[1],"No");
        !           723:                                                        opt[2][0]=0;
        !           724:                                                        SETHELP(WHERE);
        !           725: /*
        !           726: `Default On for Your Scan:`
        !           727: 
        !           728: If you want this sub-board to be included in all user personal message
        !           729: scans by default, set this option to `Yes`.
        !           730: */
        !           731:                                                        n=uifc.list(WIN_SAV|WIN_MID,0,0,0,&n,0
        !           732:                                                                ,"Default On for Your Scan",opt);
        !           733:                                                        if(n==-1)
        !           734:                                 break;
        !           735:                                                        if(!n && !(cfg.sub[i]->misc&SUB_SSDEF)) {
        !           736:                                                                uifc.changes=1;
        !           737:                                                                cfg.sub[i]->misc|=SUB_SSDEF;
        !           738:                                                                break; }
        !           739:                                                        if(n==1 && cfg.sub[i]->misc&SUB_SSDEF) {
        !           740:                                                                uifc.changes=1;
        !           741:                                                                cfg.sub[i]->misc&=~SUB_SSDEF; }
        !           742:                             break;
        !           743:                                                case 8:
        !           744:                                                        n=(cfg.sub[i]->misc&SUB_TOUSER) ? 0:1;
        !           745:                                                        strcpy(opt[0],"Yes");
        !           746:                                                        strcpy(opt[1],"No");
        !           747:                                                        opt[2][0]=0;
        !           748:                                                        SETHELP(WHERE);
        !           749: /*
        !           750: `Prompt for 'To' User on Public Posts:`
        !           751: 
        !           752: If you want all posts on this sub-board to be prompted for a 'To' user,
        !           753: set this option to `Yes`. This is a useful option for sub-boards that
        !           754: are on a network that does not allow private posts.
        !           755: */
        !           756:                                                        n=uifc.list(WIN_SAV|WIN_MID,0,0,0,&n,0
        !           757:                                                                ,"Prompt for 'To' User on Public Posts",opt);
        !           758:                                                        if(n==-1)
        !           759:                                 break;
        !           760:                                                        if(!n && !(cfg.sub[i]->misc&SUB_TOUSER)) {
        !           761:                                                                uifc.changes=1;
        !           762:                                                                cfg.sub[i]->misc|=SUB_TOUSER;
        !           763:                                                                break; }
        !           764:                                                        if(n==1 && cfg.sub[i]->misc&SUB_TOUSER) {
        !           765:                                                                uifc.changes=1;
        !           766:                                                                cfg.sub[i]->misc&=~SUB_TOUSER; }
        !           767:                                                        break;
        !           768:                                                case 9:
        !           769:                                                        n=(cfg.sub[i]->misc&SUB_QUOTE) ? 0:1;
        !           770:                                                        strcpy(opt[0],"Yes");
        !           771:                                                        strcpy(opt[1],"No");
        !           772:                                                        opt[2][0]=0;
        !           773:                                                        SETHELP(WHERE);
        !           774: /*
        !           775: `Allow Message Quoting:`
        !           776: 
        !           777: If you want users to be allowed to quote messages on this sub-board, set
        !           778: this option to `Yes`.
        !           779: */
        !           780:                                                        n=uifc.list(WIN_SAV|WIN_MID,0,0,0,&n,0
        !           781:                                                                ,"Allow Message Quoting",opt);
        !           782:                                                        if(n==-1)
        !           783:                                 break;
        !           784:                                                        if(!n && !(cfg.sub[i]->misc&SUB_QUOTE)) {
        !           785:                                                                uifc.changes=1;
        !           786:                                                                cfg.sub[i]->misc|=SUB_QUOTE;
        !           787:                                                                break; }
        !           788:                                                        if(n==1 && cfg.sub[i]->misc&SUB_QUOTE) {
        !           789:                                                                uifc.changes=1;
        !           790:                                                                cfg.sub[i]->misc&=~SUB_QUOTE; }
        !           791:                             break;
        !           792:                                                case 10:
        !           793:                                                        n=(cfg.sub[i]->misc&SUB_NOUSERSIG) ? 0:1;
        !           794:                                                        strcpy(opt[0],"Yes");
        !           795:                                                        strcpy(opt[1],"No");
        !           796:                                                        opt[2][0]=0;
        !           797:                                                        SETHELP(WHERE);
        !           798: /*
        !           799: Suppress User Signatures:
        !           800: 
        !           801: If you do not wish to have user signatures automatically appended to
        !           802: messages posted in this sub-board, set this option to Yes.
        !           803: */
        !           804:                                                        n=uifc.list(WIN_SAV|WIN_MID,0,0,0,&n,0
        !           805:                                                                ,"Suppress User Signatures",opt);
        !           806:                                                        if(n==-1)
        !           807:                                 break;
        !           808:                                                        if(!n && !(cfg.sub[i]->misc&SUB_NOUSERSIG)) {
        !           809:                                                                uifc.changes=1;
        !           810:                                                                cfg.sub[i]->misc|=SUB_NOUSERSIG;
        !           811:                                                                break; }
        !           812:                                                        if(n==1 && cfg.sub[i]->misc&SUB_NOUSERSIG) {
        !           813:                                                                uifc.changes=1;
        !           814:                                                                cfg.sub[i]->misc&=~SUB_NOUSERSIG; }
        !           815:                             break;
        !           816:                                                case 11:
        !           817:                                                        n=(cfg.sub[i]->misc&SUB_SYSPERM) ? 0:1;
        !           818:                                                        strcpy(opt[0],"Yes");
        !           819:                                                        strcpy(opt[1],"No");
        !           820:                                                        opt[2][0]=0;
        !           821:                                                        SETHELP(WHERE);
        !           822: /*
        !           823: `Operator Messages Automatically Permanent:`
        !           824: 
        !           825: If you want messages posted by `System` and `Sub-board Operators` to be
        !           826: automatically permanent (non-purgable) for this sub-board, set this
        !           827: option to `Yes`.
        !           828: */
        !           829:                                                        n=uifc.list(WIN_SAV|WIN_MID,0,0,0,&n,0
        !           830:                                                                ,"Permanent Operator Messages",opt);
        !           831:                                                        if(n==-1)
        !           832:                                 break;
        !           833:                                                        if(!n && !(cfg.sub[i]->misc&SUB_SYSPERM)) {
        !           834:                                                                uifc.changes=1;
        !           835:                                                                cfg.sub[i]->misc|=SUB_SYSPERM;
        !           836:                                                                break; }
        !           837:                                                        if(n==1 && cfg.sub[i]->misc&SUB_SYSPERM) {
        !           838:                                                                uifc.changes=1;
        !           839:                                                                cfg.sub[i]->misc&=~SUB_SYSPERM; }
        !           840:                             break;
        !           841:                                                case 12:
        !           842:                                                        if(cfg.sub[i]->misc&SUB_KILLP)
        !           843:                                                                n=2;
        !           844:                                                        else
        !           845:                                                                n=(cfg.sub[i]->misc&SUB_KILL) ? 0:1;
        !           846:                                                        strcpy(opt[0],"Yes");
        !           847:                                                        strcpy(opt[1],"No");
        !           848:                                                        strcpy(opt[2],"Private");
        !           849:                                                        opt[3][0]=0;
        !           850:                                                        SETHELP(WHERE);
        !           851: /*
        !           852: `Kill Read Messages Automatically:`
        !           853: 
        !           854: If you want messages that have been read by the intended recipient to
        !           855: be automatically deleted by `SMBUTIL`, set this option to `Yes` or
        !           856: `Private` if you want only private messages to be automatically deleted.
        !           857: */
        !           858:                                                        n=uifc.list(WIN_SAV|WIN_MID,0,0,0,&n,0
        !           859:                                                                ,"Kill Read Messages",opt);
        !           860:                                                        if(n==-1)
        !           861:                                 break;
        !           862:                                                        if(!n && !(cfg.sub[i]->misc&SUB_KILL)) {
        !           863:                                                                uifc.changes=1;
        !           864:                                                                cfg.sub[i]->misc|=SUB_KILL;
        !           865:                                                                cfg.sub[i]->misc&=~SUB_KILLP;
        !           866:                                                                break; }
        !           867:                                                        if(n==1 && cfg.sub[i]->misc&(SUB_KILL|SUB_KILLP)) {
        !           868:                                                                uifc.changes=1;
        !           869:                                                                cfg.sub[i]->misc&=~(SUB_KILL|SUB_KILLP); }
        !           870:                                                        if(n==2 && !(cfg.sub[i]->misc&SUB_KILLP)) {
        !           871:                                                                uifc.changes=1;
        !           872:                                                                cfg.sub[i]->misc|=SUB_KILLP;
        !           873:                                                                cfg.sub[i]->misc&=~SUB_KILL;
        !           874:                                 break; }
        !           875:                             break;
        !           876:                                                case 13:
        !           877:                                                        n=(cfg.sub[i]->misc&SUB_LZH) ? 0:1;
        !           878:                                                        strcpy(opt[0],"Yes");
        !           879:                                                        strcpy(opt[1],"No");
        !           880:                                                        opt[2][0]=0;
        !           881:                                                        SETHELP(WHERE);
        !           882: /*
        !           883: `Compress Messages with LZH Encoding:`
        !           884: 
        !           885: If you want all messages in this sub-board to be automatically
        !           886: compressed via `LZH` (Lempel/Ziv/Huffman algorithm used in LHarc, LHA,
        !           887: and other popular compression and archive programs), this option to `Yes`.
        !           888: 
        !           889: Compression will slow down the reading and writing of messages slightly,
        !           890: but the storage space saved can be as much as `50 percent`.
        !           891: 
        !           892: Before setting this option to `Yes`, make sure that all of the SMB
        !           893: compatible mail programs you use support the `LZH` translation.
        !           894: */
        !           895:                                                        n=uifc.list(WIN_SAV|WIN_MID,0,0,0,&n,0
        !           896:                                                                ,"Compress Messages (LZH)",opt);
        !           897:                                                        if(n==-1)
        !           898:                                 break;
        !           899:                                                        if(!n && !(cfg.sub[i]->misc&SUB_LZH)) {
        !           900:                                                                uifc.changes=1;
        !           901:                                                                cfg.sub[i]->misc|=SUB_LZH;
        !           902:                                                                break; }
        !           903:                                                        if(n==1 && cfg.sub[i]->misc&SUB_LZH) {
        !           904:                                                                uifc.changes=1;
        !           905:                                                                cfg.sub[i]->misc&=~SUB_LZH; }
        !           906:                             break;
        !           907: 
        !           908:                                                        } }
        !           909:                                break;
        !           910:                        case 14:
        !           911:                                while(1) {
        !           912:                                        n=0;
        !           913:                                        sprintf(opt[n++],"%-27.27s%s","Append Tag/Origin Line"
        !           914:                                                ,cfg.sub[i]->misc&SUB_NOTAG ? "No":"Yes");
        !           915:                                        sprintf(opt[n++],"%-27.27s%s","Export ASCII Only"
        !           916:                                                ,cfg.sub[i]->misc&SUB_ASCII ? "Yes":"No");
        !           917:                                        sprintf(opt[n++],"%-27.27s%s","Gate Between Net Types"
        !           918:                                                ,cfg.sub[i]->misc&SUB_GATE ? "Yes":"No");
        !           919:                                        sprintf(opt[n++],"%-27.27s%s","QWK Networked"
        !           920:                                                ,cfg.sub[i]->misc&SUB_QNET ? "Yes":"No");
        !           921:                                        sprintf(opt[n++],"QWK Tagline");
        !           922:                                        sprintf(opt[n++],"%-27.27s%s","Internet (UUCP/NNTP)"
        !           923:                                                ,cfg.sub[i]->misc&SUB_INET ? "Yes":"No");
        !           924:                                        sprintf(opt[n++],"%-27.27s%s","PostLink or PCRelay"
        !           925:                         ,cfg.sub[i]->misc&SUB_PNET ? "Yes":"No");
        !           926:                                        sprintf(opt[n++],"%-27.27s%s","FidoNet EchoMail"
        !           927:                                                ,cfg.sub[i]->misc&SUB_FIDO ? "Yes":"No");
        !           928:                                        sprintf(opt[n++],"%-27.27s%s","FidoNet Address"
        !           929:                         ,smb_faddrtoa(&cfg.sub[i]->faddr,tmp));
        !           930:                                        sprintf(opt[n++],"EchoMail Origin Line");
        !           931:                                        opt[n][0]=0;
        !           932:                                        SETHELP(WHERE);
        !           933: /*
        !           934: `Sub-board Network Options:`
        !           935: 
        !           936: This menu contains options for the selected sub-board that pertain
        !           937: specifically to message networking.
        !           938: */
        !           939:                                        n=uifc.list(WIN_ACT|WIN_SAV|WIN_RHT|WIN_BOT,3,2,60,&net_dflt,0
        !           940:                                                ,"Network Options",opt);
        !           941:                                        if(n==-1)
        !           942:                                                break;
        !           943:                     switch(n) {
        !           944:                                                case 0:
        !           945:                                                        n=0;
        !           946:                                                        strcpy(opt[0],"Yes");
        !           947:                                                        strcpy(opt[1],"No");
        !           948:                                                        opt[2][0]=0;
        !           949:                                                        SETHELP(WHERE);
        !           950: /*
        !           951: `Append Tag/Origin Line to Posts:`
        !           952: 
        !           953: If you want to disable the automatic addition of a network tagline or
        !           954: origin line to the bottom of outgoing networked posts from this
        !           955: sub-board, set this option to `No`.
        !           956: */
        !           957:                                                        n=uifc.list(WIN_SAV|WIN_MID,0,0,0,&n,0
        !           958:                                                                ,"Append Tag/Origin Line to Posts",opt);
        !           959:                                                        if(n==-1)
        !           960:                                 break;
        !           961:                                                        if(!n && cfg.sub[i]->misc&SUB_NOTAG) {
        !           962:                                                                uifc.changes=1;
        !           963:                                                                cfg.sub[i]->misc&=~SUB_NOTAG;
        !           964:                                                                break; }
        !           965:                                                        if(n==1 && !(cfg.sub[i]->misc&SUB_NOTAG)) {
        !           966:                                                                uifc.changes=1;
        !           967:                                                                cfg.sub[i]->misc|=SUB_NOTAG; }
        !           968:                             break;
        !           969:                                                case 1:
        !           970:                                                        n=0;
        !           971:                                                        strcpy(opt[0],"Yes");
        !           972:                                                        strcpy(opt[1],"No");
        !           973:                                                        opt[2][0]=0;
        !           974:                                                        SETHELP(WHERE);
        !           975: /*
        !           976: `Export ASCII Characters Only:`
        !           977: 
        !           978: If the network that this sub-board is echoed on does not allow extended
        !           979: ASCII (>127) or control codes (<20, not including CR), set this option
        !           980: to `Yes`.
        !           981: */
        !           982:                                                        n=uifc.list(WIN_SAV|WIN_MID,0,0,0,&n,0
        !           983:                                                                ,"Export ASCII Characters Only",opt);
        !           984:                                                        if(n==-1)
        !           985:                                 break;
        !           986:                                                        if(n && cfg.sub[i]->misc&SUB_ASCII) {
        !           987:                                                                uifc.changes=1;
        !           988:                                                                cfg.sub[i]->misc&=~SUB_ASCII;
        !           989:                                                                break; }
        !           990:                                                        if(!n && !(cfg.sub[i]->misc&SUB_ASCII)) {
        !           991:                                                                uifc.changes=1;
        !           992:                                                                cfg.sub[i]->misc|=SUB_ASCII; }
        !           993:                             break;
        !           994:                                                case 2:
        !           995:                                                        n=1;
        !           996:                                                        strcpy(opt[0],"Yes");
        !           997:                                                        strcpy(opt[1],"No");
        !           998:                                                        opt[2][0]=0;
        !           999:                                                        SETHELP(WHERE);
        !          1000: /*
        !          1001: `Gate Between Net Types:`
        !          1002: 
        !          1003: If this sub-board is networked using more than one network technology,
        !          1004: and you want messages to be `gated` between the networks, set this
        !          1005: option to `Yes`.
        !          1006: 
        !          1007: If this option is set to `No`, messages imported from one network type
        !          1008: will `not` be exported to another network type. This is the default and
        !          1009: should be used unless you have `specific` permission from both networks
        !          1010: to gate this sub-board. Incorrectly gated sub-boards can cause duplicate
        !          1011: messages loops and cross-posted messages.
        !          1012: 
        !          1013: This option does not affect the exporting of messages created on your
        !          1014: BBS.
        !          1015: */
        !          1016:                                                        n=uifc.list(WIN_SAV|WIN_MID,0,0,0,&n,0
        !          1017:                                                                ,"Gate Between Net Types",opt);
        !          1018:                                                        if(n==-1)
        !          1019:                                 break;
        !          1020:                                                        if(!n && !(cfg.sub[i]->misc&SUB_GATE)) {
        !          1021:                                                                uifc.changes=1;
        !          1022:                                                                cfg.sub[i]->misc|=SUB_GATE;
        !          1023:                                                                break; }
        !          1024:                                                        if(n==1 && cfg.sub[i]->misc&SUB_GATE) {
        !          1025:                                                                uifc.changes=1;
        !          1026:                                                                cfg.sub[i]->misc&=~SUB_GATE; }
        !          1027:                             break;
        !          1028:                                                case 3:
        !          1029:                                                        n=1;
        !          1030:                                                        strcpy(opt[0],"Yes");
        !          1031:                                                        strcpy(opt[1],"No");
        !          1032:                                                        opt[2][0]=0;
        !          1033:                                                        SETHELP(WHERE);
        !          1034: /*
        !          1035: `Sub-board Networked via QWK Packets:`
        !          1036: 
        !          1037: If this sub-board is networked with other BBSs via QWK packets, this
        !          1038: option should be set to `Yes`. With this option set to `Yes`, titles of
        !          1039: posts on this sub-board will be limited to the QWK packet limitation of
        !          1040: 25 characters. It also allows the `N`etwork restriction to function
        !          1041: properly.
        !          1042: */
        !          1043:                                                        n=uifc.list(WIN_SAV|WIN_MID,0,0,0,&n,0
        !          1044:                                                                ,"Networked via QWK Packets",opt);
        !          1045:                                                        if(n==-1)
        !          1046:                                 break;
        !          1047:                                                        if(!n && !(cfg.sub[i]->misc&SUB_QNET)) {
        !          1048:                                                                uifc.changes=1;
        !          1049:                                                                cfg.sub[i]->misc|=SUB_QNET;
        !          1050:                                                                break; }
        !          1051:                                                        if(n==1 && cfg.sub[i]->misc&SUB_QNET) {
        !          1052:                                                                uifc.changes=1;
        !          1053:                                                                cfg.sub[i]->misc&=~SUB_QNET; }
        !          1054:                             break;
        !          1055:                                                case 4:
        !          1056:                                                        SETHELP(WHERE);
        !          1057: /*
        !          1058: `Sub-board QWK Network Tagline:`
        !          1059: 
        !          1060: If you want to use a different QWK tagline than the configured default
        !          1061: tagline in the `Networks` configuration, you should enter that tagline
        !          1062: here. If this option is left blank, the default tagline is used.
        !          1063: */
        !          1064:                                                        uifc.input(WIN_MID|WIN_SAV,0,0,nulstr,cfg.sub[i]->tagline
        !          1065:                                                                ,sizeof(cfg.sub[i]->tagline)-1,K_MSG|K_EDIT);
        !          1066:                                                        break;
        !          1067:                                                case 5:
        !          1068:                                                        n=1;
        !          1069:                                                        strcpy(opt[0],"Yes");
        !          1070:                                                        strcpy(opt[1],"No");
        !          1071:                                                        opt[2][0]=0;
        !          1072:                                                        SETHELP(WHERE);
        !          1073: /*
        !          1074: `Sub-board Networked via Internet:`
        !          1075: 
        !          1076: If this sub-board is networked to the Internet via UUCP or NNTP, this
        !          1077: option should be set to `Yes`.
        !          1078: 
        !          1079: It will allow the `N`etwork user restriction to function properly.
        !          1080: */
        !          1081:                                                        n=uifc.list(WIN_SAV|WIN_MID,0,0,0,&n,0
        !          1082:                                                                ,"Networked via Internet",opt);
        !          1083:                                                        if(n==-1)
        !          1084:                                 break;
        !          1085:                                                        if(!n && !(cfg.sub[i]->misc&SUB_INET)) {
        !          1086:                                                                uifc.changes=1;
        !          1087:                                                                cfg.sub[i]->misc|=SUB_INET;
        !          1088:                                                                break; }
        !          1089:                                                        if(n==1 && cfg.sub[i]->misc&SUB_INET) {
        !          1090:                                                                uifc.changes=1;
        !          1091:                                                                cfg.sub[i]->misc&=~SUB_INET; }
        !          1092:                             break;
        !          1093:                                                case 6:
        !          1094:                             n=1;
        !          1095:                             strcpy(opt[0],"Yes");
        !          1096:                             strcpy(opt[1],"No");
        !          1097:                             opt[2][0]=0;
        !          1098:                             SETHELP(WHERE);
        !          1099: /*
        !          1100: `Sub-board Networked via PostLink or PCRelay:`
        !          1101: 
        !          1102: If this sub-board is networked with other BBSs via PostLink or PCRelay,
        !          1103: this option should be set to `Yes`. With this option set to `Yes`,
        !          1104: titles of posts on this sub-board will be limited to the UTI
        !          1105: specification limitation of 25 characters. It also allows the `N`etwork
        !          1106: restriction to function properly.
        !          1107: */
        !          1108:                             n=uifc.list(WIN_SAV|WIN_MID,0,0,0,&n,0
        !          1109:                                 ,"Networked via PostLink or PCRelay",opt);
        !          1110:                             if(n==-1)
        !          1111:                                 break;
        !          1112:                             if(!n && !(cfg.sub[i]->misc&SUB_PNET)) {
        !          1113:                                 uifc.changes=1;
        !          1114:                                 cfg.sub[i]->misc|=SUB_PNET;
        !          1115:                                 break; }
        !          1116:                             if(n==1 && cfg.sub[i]->misc&SUB_PNET) {
        !          1117:                                 uifc.changes=1;
        !          1118:                                 cfg.sub[i]->misc&=~SUB_PNET; }
        !          1119:                             break;
        !          1120:                                                case 7:
        !          1121:                                                        n=1;
        !          1122:                                                        strcpy(opt[0],"Yes");
        !          1123:                                                        strcpy(opt[1],"No");
        !          1124:                                                        opt[2][0]=0;
        !          1125:                                                        SETHELP(WHERE);
        !          1126: /*
        !          1127: `Sub-board Networked via FidoNet EchoMail:`
        !          1128: 
        !          1129: If this sub-board is part of a FidoNet EchoMail conference, set this
        !          1130: option to `Yes`.
        !          1131: */
        !          1132:                                                        n=uifc.list(WIN_SAV|WIN_MID,0,0,0,&n,0
        !          1133:                                                                ,"Networked via FidoNet EchoMail",opt);
        !          1134:                                                        if(n==-1)
        !          1135:                                 break;
        !          1136:                                                        if(!n && !(cfg.sub[i]->misc&SUB_FIDO)) {
        !          1137:                                                                uifc.changes=1;
        !          1138:                                                                cfg.sub[i]->misc|=SUB_FIDO;
        !          1139:                                                                break; }
        !          1140:                                                        if(n==1 && cfg.sub[i]->misc&SUB_FIDO) {
        !          1141:                                                                uifc.changes=1;
        !          1142:                                                                cfg.sub[i]->misc&=~SUB_FIDO; }
        !          1143:                             break;
        !          1144:                                                case 8:
        !          1145:                                                        smb_faddrtoa(&cfg.sub[i]->faddr,str);
        !          1146:                                                        SETHELP(WHERE);
        !          1147: /*
        !          1148: `Sub-board FidoNet Address:`
        !          1149: 
        !          1150: If this sub-board is part of a FidoNet EchoMail conference, this is
        !          1151: the address used for this sub-board. Format: `Zone:Net/Node[.Point]`
        !          1152: */
        !          1153:                                                        uifc.input(WIN_MID|WIN_SAV,0,0,"FidoNet Address"
        !          1154:                                                                ,str,25,K_EDIT);
        !          1155:                                                        cfg.sub[i]->faddr=atofaddr(str);
        !          1156:                                                        break;
        !          1157:                                                case 9:
        !          1158:                                                        SETHELP(WHERE);
        !          1159: /*
        !          1160: `Sub-board FidoNet Origin Line:`
        !          1161: 
        !          1162: If this sub-board is part of a FidoNet EchoMail conference and you
        !          1163: want to use an origin line other than the default origin line in the
        !          1164: `Networks` configuration, set this value to the desired origin line.
        !          1165: 
        !          1166: If this option is blank, the default origin line is used.
        !          1167: */
        !          1168:                                                        uifc.input(WIN_MID|WIN_SAV,0,0,nulstr,cfg.sub[i]->origline
        !          1169:                                                                ,sizeof(cfg.sub[i]->origline)-1,K_EDIT);
        !          1170:                             break;
        !          1171:                                        } 
        !          1172:                                }
        !          1173:                                break;
        !          1174:                        case 15:
        !          1175:                                while(1) {
        !          1176:                                        n=0;
        !          1177:                                        if(cfg.sub[i]->qwkconf)
        !          1178:                                                sprintf(str,"Static (%u)",cfg.sub[i]->qwkconf);
        !          1179:                                        else
        !          1180:                                                strcpy(str,"Dynamic");
        !          1181:                                        sprintf(opt[n++],"%-27.27s%s","QWK Conference Number"
        !          1182:                                                ,str);
        !          1183:                                        sprintf(opt[n++],"%-27.27s%s","Storage Method"
        !          1184:                                                ,cfg.sub[i]->misc&SUB_HYPER ? "Hyper Allocation"
        !          1185:                                                : cfg.sub[i]->misc&SUB_FAST ? "Fast Allocation"
        !          1186:                                                : "Self-packing");
        !          1187:                                        if(!cfg.sub[i]->data_dir[0])
        !          1188:                                                sprintf(str,"%ssubs/",cfg.data_dir);
        !          1189:                                        else
        !          1190:                                                strcpy(str,cfg.sub[i]->data_dir);
        !          1191:                                        sprintf(opt[n++],"%-27.27s%.40s","Storage Directory",str);
        !          1192:                                        sprintf(opt[n++],"%-27.27s%.40s","Semaphore File",cfg.sub[i]->post_sem);
        !          1193:                                        sprintf(opt[n++],"%-27.27s%u","Pointer File Index",cfg.sub[i]->ptridx);
        !          1194:                                        opt[n][0]=0;
        !          1195:                                        SETHELP(WHERE);
        !          1196: /*
        !          1197: `Sub-board Advanced Options:`
        !          1198: 
        !          1199: This menu contains options for the selected sub-board that are advanced
        !          1200: in nature.
        !          1201: */
        !          1202:                                        n=uifc.list(WIN_ACT|WIN_SAV|WIN_RHT|WIN_BOT,3,2,60,&adv_dflt,0
        !          1203:                                                ,"Advanced Options",opt);
        !          1204:                                        if(n==-1)
        !          1205:                                                break;
        !          1206:                     switch(n) {
        !          1207:                         case 0:
        !          1208:                                                        SETHELP(WHERE);
        !          1209: /*
        !          1210: `Sub-board QWK Conference Number:`
        !          1211: 
        !          1212: If you wish to have the QWK conference number for this sub-board
        !          1213: automatically generated by Synchronet (based on the group number
        !          1214: and sub-board number for the user), set this option to `Dynamic`.
        !          1215: 
        !          1216: If you wish to have the same QWK conference number for this sub-board
        !          1217: regardless of which user access it, set this option to `Static`
        !          1218: by entering the conference number you want to use.
        !          1219: */
        !          1220:                                                        if(cfg.sub[i]->qwkconf)
        !          1221:                                                                sprintf(str,"%u",cfg.sub[i]->qwkconf);
        !          1222:                                                        else
        !          1223:                                                                str[0]=0;
        !          1224:                                                        if(uifc.input(WIN_MID|WIN_SAV,0,17
        !          1225:                                                                ,"QWK Conference Number (0=Dynamic)"
        !          1226:                                                                ,str,5,K_EDIT|K_NUMBER)>=0)
        !          1227:                                                                cfg.sub[i]->qwkconf=atoi(str);
        !          1228:                                                        break;
        !          1229:                                                case 1:
        !          1230:                                                        n=0;
        !          1231:                                                        strcpy(opt[0],"Hyper Allocation");
        !          1232:                                                        strcpy(opt[1],"Fast Allocation");
        !          1233:                                                        strcpy(opt[2],"Self-packing");
        !          1234:                                                        opt[3][0]=0;
        !          1235:                                                        SETHELP(WHERE);
        !          1236: /*
        !          1237: `Self-Packing` is the slowest storage method because it conserves disk
        !          1238:   space as it imports messages by using deleted message header and data
        !          1239:   blocks for new messages automatically. If you use this storage method,
        !          1240:   you will not need to run `SMBUTIL P` on this message base unless you
        !          1241:   accumilate a large number of deleted message blocks and wish to free
        !          1242:   that disk space. You can switch from self-packing to fast allocation
        !          1243:   storage method and back again as you wish.
        !          1244: `Fast Allocation` is faster than self-packing because it does not search
        !          1245:   for deleted message blocks for new messages. It automatically places
        !          1246:   all new message blocks at the end of the header and data files. If you
        !          1247:   use this storage method, you will need to run `SMBUTIL P` on this
        !          1248:   message base periodically or it will continually use up disk space.
        !          1249: `Hyper Allocation` is the fastest storage method because it does not
        !          1250:   maintain allocation files at all. Once a message base is setup to use
        !          1251:   this storage method, it should not be changed without first deleting
        !          1252:   the message base data files in your `DATA\DIRS\SUBS` directory for this
        !          1253:   sub-board. You must use `SMBUTIL P` as with the fast allocation method.
        !          1254: */
        !          1255:                                                        n=uifc.list(WIN_SAV|WIN_MID,0,0,0,&n,0
        !          1256:                                                                ,"Storage Method",opt);
        !          1257:                                                        if(n==-1)
        !          1258:                                                                break;
        !          1259:                                                        if(!n && !(cfg.sub[i]->misc&SUB_HYPER)) {
        !          1260:                                                                uifc.changes=1;
        !          1261:                                                                cfg.sub[i]->misc|=SUB_HYPER;
        !          1262:                                                                cfg.sub[i]->misc&=~SUB_FAST;
        !          1263:                                                                cfg.sub[i]->misc|=SUB_HDRMOD;
        !          1264:                                                                break; }
        !          1265:                                                        if(!n)
        !          1266:                                                                break;
        !          1267:                                                        if(cfg.sub[i]->misc&SUB_HYPER) {        /* Switching from hyper */
        !          1268:                                                                strcpy(opt[0],"Yes");
        !          1269:                                                                strcpy(opt[1],"No, I want to use Hyper Allocation");
        !          1270:                                                                opt[2][0]=0;
        !          1271:                                                                m=0;
        !          1272:                                                                if(uifc.list(WIN_SAV|WIN_MID,0,0,0,&m,0
        !          1273:                                                                        ,"Delete all messages in this sub-board?",opt)!=0)
        !          1274:                                                                        break;
        !          1275:                                                                if(cfg.sub[i]->data_dir[0])
        !          1276:                                                                        sprintf(str,"%s",cfg.sub[i]->data_dir);
        !          1277:                                                                else
        !          1278:                                                                        sprintf(str,"%ssubs/",cfg.data_dir);
        !          1279:                                                                sprintf(str2,"%s%s.*"
        !          1280:                                                                        ,cfg.grp[cfg.sub[i]->grp]->code_prefix
        !          1281:                                                                        ,cfg.sub[i]->code_suffix);
        !          1282:                                                                strlwr(str2);
        !          1283:                                                                delfiles(str,str2); 
        !          1284:                                                        }
        !          1285: 
        !          1286:                                                        if(cfg.sub[i]->misc&SUB_HYPER)
        !          1287:                                                                cfg.sub[i]->misc|=SUB_HDRMOD;
        !          1288:                                                        if(n==1 && !(cfg.sub[i]->misc&SUB_FAST)) {
        !          1289:                                                                uifc.changes=1;
        !          1290:                                                                cfg.sub[i]->misc|=SUB_FAST;
        !          1291:                                                                cfg.sub[i]->misc&=~SUB_HYPER;
        !          1292:                                                                break; 
        !          1293:                                                        }
        !          1294:                                                        if(n==2 && cfg.sub[i]->misc&(SUB_FAST|SUB_HYPER)) {
        !          1295:                                                                uifc.changes=1;
        !          1296:                                                                cfg.sub[i]->misc&=~(SUB_FAST|SUB_HYPER);
        !          1297:                                                                break; 
        !          1298:                                                        }
        !          1299:                                                        break;
        !          1300:                                                case 2:
        !          1301:                                                        SETHELP(WHERE);
        !          1302: /*
        !          1303: `Sub-board Storage Directory:`
        !          1304: 
        !          1305: Use this if you wish to place the data directory for this sub-board on
        !          1306: another drive or in another directory besides the default setting.
        !          1307: */
        !          1308:                                                        uifc.input(WIN_MID|WIN_SAV,0,17,"Directory"
        !          1309:                                                                ,cfg.sub[i]->data_dir,sizeof(cfg.sub[i]->data_dir)-1,K_EDIT);
        !          1310:                                                        break; 
        !          1311:                                                case 3:
        !          1312:                                                        SETHELP(WHERE);
        !          1313: /*
        !          1314: `Sub-board Semaphore File:`
        !          1315: 
        !          1316: This is a filename that will be created as a semaphore (signal) to an
        !          1317: external program or event whenever a message is posted in this sub-board.
        !          1318: */
        !          1319:                                                        uifc.input(WIN_MID|WIN_SAV,0,17,"Semaphore File"
        !          1320:                                                                ,cfg.sub[i]->post_sem,sizeof(cfg.sub[i]->post_sem)-1,K_EDIT);
        !          1321:                                                        break; 
        !          1322:                                                case 4:
        !          1323:                                                        SETHELP(WHERE);
        !          1324: /*
        !          1325: `Sub-board Pointer Index:`
        !          1326: 
        !          1327: You should normally have no reason to modify this value. If you get
        !          1328: crossed-up or duplicate ptridx values, then you may want to adjust
        !          1329: this value, but do so with great care and trepidation.
        !          1330: */
        !          1331:                                                        sprintf(str,"%u",cfg.sub[i]->ptridx);
        !          1332:                                                        if(uifc.input(WIN_MID|WIN_SAV,0,17
        !          1333:                                                                ,"Pointer File Index (Danger!)"
        !          1334:                                                                ,str,5,K_EDIT|K_NUMBER)>=0)
        !          1335:                                                                cfg.sub[i]->ptridx=atoi(str);
        !          1336:                                                        break;
        !          1337: 
        !          1338:                                        } 
        !          1339:                                }
        !          1340:                                break;
        !          1341:                        } 
        !          1342:                } 
        !          1343:        }
        !          1344: }

unix.superglobalmegacorp.com

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