Annotation of sbbs/sbbs2/scfg/scfgsub.c, revision 1.1

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

unix.superglobalmegacorp.com

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