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

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

unix.superglobalmegacorp.com

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