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

1.1     ! root        1: #line 2 "SCFGMSG.C"
        !             2: 
        !             3: /* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
        !             4: 
        !             5: #include "scfg.h"
        !             6: 
        !             7: /****************************************************************************/
        !             8: /* Converts when_t.zone into ASCII format                                                                      */
        !             9: /****************************************************************************/
        !            10: char *zonestr(short zone)
        !            11: {
        !            12:        static char str[32];
        !            13: 
        !            14: switch((ushort)zone) {
        !            15:        case 0:         return("UT");
        !            16:        case AST:       return("AST");
        !            17:        case EST:       return("EST");
        !            18:        case CST:       return("CST");
        !            19:        case MST:       return("MST");
        !            20:        case PST:       return("PST");
        !            21:        case YST:       return("YST");
        !            22:        case HST:       return("HST");
        !            23:        case BST:       return("BST");
        !            24:        case ADT:       return("ADT");
        !            25:        case EDT:       return("EDT");
        !            26:        case CDT:       return("CDT");
        !            27:        case MDT:       return("MDT");
        !            28:        case PDT:       return("PDT");
        !            29:        case YDT:       return("YDT");
        !            30:        case HDT:       return("HDT");
        !            31:        case BDT:       return("BDT");
        !            32:        case MID:       return("MID");
        !            33:        case VAN:       return("VAN");
        !            34:        case EDM:       return("EDM");
        !            35:        case WIN:       return("WIN");
        !            36:        case BOG:       return("BOG");
        !            37:        case CAR:       return("CAR");
        !            38:        case RIO:       return("RIO");
        !            39:        case FER:       return("FER");
        !            40:        case AZO:       return("AZO");
        !            41:        case LON:       return("LON");
        !            42:        case BER:       return("BER");
        !            43:        case ATH:       return("ATH");
        !            44:        case MOS:       return("MOS");
        !            45:        case DUB:       return("DUB");
        !            46:        case KAB:       return("KAB");
        !            47:        case KAR:       return("KAR");
        !            48:        case BOM:       return("BOM");
        !            49:        case KAT:       return("KAT");
        !            50:        case DHA:       return("DHA");
        !            51:        case BAN:       return("BAN");
        !            52:        case HON:       return("HON");
        !            53:        case TOK:       return("TOK");
        !            54:        case SYD:       return("SYD");
        !            55:        case NOU:       return("NOU");
        !            56:        case WEL:       return("WEL");
        !            57:        }
        !            58: 
        !            59: sprintf(str,"%02hd:%02hu",zone/60,zone<0 ? (-zone)%60 : zone%60);
        !            60: return(str);
        !            61: }
        !            62: 
        !            63: char *utos(char *str)
        !            64: {
        !            65:        static char out[128];
        !            66:        int i;
        !            67: 
        !            68: for(i=0;str[i];i++)
        !            69:        if(str[i]=='_')
        !            70:                out[i]=SP;
        !            71:        else
        !            72:                out[i]=str[i];
        !            73: out[i]=0;
        !            74: return(out);
        !            75: }
        !            76: 
        !            77: char *stou(char *str)
        !            78: {
        !            79:        static char out[128];
        !            80:        int i;
        !            81: 
        !            82: for(i=0;str[i];i++)
        !            83:        if(str[i]==SP)
        !            84:                out[i]='_';
        !            85:        else
        !            86:                out[i]=str[i];
        !            87: out[i]=0;
        !            88: return(out);
        !            89: }
        !            90: 
        !            91: 
        !            92: 
        !            93: void clearptrs(int subnum)
        !            94: {
        !            95:        char str[256];
        !            96:        ushort idx,ch;
        !            97:        int last,file,i;
        !            98:        long l=0L;
        !            99:        struct ffblk ff;
        !           100: 
        !           101: upop("Clearing Pointers...");
        !           102: sprintf(str,"%sUSER\\PTRS\\*.IXB",data_dir);
        !           103: last=findfirst(str,&ff,0);
        !           104: while(!last) {
        !           105:        if(ff.ff_fsize>=((long)sub[subnum]->ptridx+1L)*10L) {
        !           106:                sprintf(str,"%sUSER\\PTRS\\%s",data_dir,ff.ff_name);
        !           107:                if((file=nopen(str,O_WRONLY))==-1) {
        !           108:                        errormsg(WHERE,ERR_OPEN,str,O_WRONLY);
        !           109:                        bail(1); }
        !           110:                while(filelength(file)<(long)(sub[subnum]->ptridx)*10) {
        !           111:                        lseek(file,0L,SEEK_END);
        !           112:                        idx=tell(file)/10;
        !           113:                        for(i=0;i<total_subs;i++)
        !           114:                                if(sub[i]->ptridx==idx)
        !           115:                                        break;
        !           116:                        write(file,&l,4);
        !           117:                        write(file,&l,4);
        !           118:                        ch=0xff;                        /* default to scan ON for unknown sub */
        !           119:                        if(i<total_subs) {
        !           120:                                if(!(sub[i]->misc&SUB_NSDEF))
        !           121:                                        ch&=~5;
        !           122:                                if(!(sub[i]->misc&SUB_SSDEF))
        !           123:                                        ch&=~2; }
        !           124:                        write(file,&ch,2); }
        !           125:                lseek(file,((long)sub[subnum]->ptridx)*10L,SEEK_SET);
        !           126:                write(file,&l,4);       /* date set to null */
        !           127:                write(file,&l,4);       /* date set to null */
        !           128:                ch=0xff;
        !           129:                if(!(sub[subnum]->misc&SUB_NSDEF))
        !           130:                        ch&=~5;
        !           131:                if(!(sub[subnum]->misc&SUB_SSDEF))
        !           132:                        ch&=~2;
        !           133:                write(file,&ch,2);
        !           134:                close(file); }
        !           135:        last=findnext(&ff); }
        !           136: upop(0);
        !           137: }
        !           138: 
        !           139: void msgs_cfg()
        !           140: {
        !           141:        static int dflt,msgs_dflt,bar;
        !           142:        char str[256],str2[256],done=0,*p;
        !           143:        int j,k,q,s;
        !           144:        int i,file,ptridx,n;
        !           145:        long ported;
        !           146:        sub_t tmpsub;
        !           147:        static grp_t savgrp;
        !           148:        FILE *stream;
        !           149: 
        !           150: while(1) {
        !           151:        for(i=0;i<total_grps && i<MAX_OPTS;i++)
        !           152:                sprintf(opt[i],"%-25s",grp[i]->lname);
        !           153:        opt[i][0]=0;
        !           154:        j=WIN_ORG|WIN_ACT|WIN_CHE;
        !           155:        if(total_grps)
        !           156:                j|=WIN_DEL|WIN_DELACT|WIN_GET;
        !           157:        if(total_grps<MAX_OPTS)
        !           158:                j|=WIN_INS|WIN_INSACT|WIN_XTR;
        !           159:        if(savgrp.sname[0])
        !           160:                j|=WIN_PUT;
        !           161:        SETHELP(WHERE);
        !           162: /*
        !           163: &Message Groups:&
        !           164: 
        !           165: This is a listing of message groups for your BBS. Message groups are
        !           166: used to logically separate your message &sub-boards& into groups. Every
        !           167: sub-board belongs to a message group. You must have at least one message
        !           168: group and one sub-board configured.
        !           169: 
        !           170: One popular use for message groups is to separate local sub-boards and
        !           171: networked sub-boards. One might have a &Local& message group that contains
        !           172: non-networked sub-boards of various topics and also have a &FidoNet&
        !           173: message group that contains sub-boards that are echoed across FidoNet.
        !           174: Some sysops separate sub-boards into more specific areas such as &Main&,
        !           175: &Technical&, or &Adult&. If you have many sub-boards that have a common
        !           176: subject denominator, you may want to have a separate message group for
        !           177: those sub-boards for a more organized message structure.
        !           178: */
        !           179:        i=ulist(j,0,0,45,&msgs_dflt,&bar,"Message Groups",opt);
        !           180:        savnum=0;
        !           181:        if(i==-1) {
        !           182:                j=save_changes(WIN_MID);
        !           183:                if(j==-1)
        !           184:                   continue;
        !           185:                if(!j)
        !           186:                        write_msgs_cfg();
        !           187:                return; }
        !           188:        if((i&MSK_ON)==MSK_INS) {
        !           189:                i&=MSK_OFF;
        !           190:                SETHELP(WHERE);
        !           191: /*
        !           192: &Group Long Name:&
        !           193: 
        !           194: This is a description of the message group which is displayed when a
        !           195: user of the system uses the &/*& command from the main menu.
        !           196: */*/
        !           197:                strcpy(str,"Main");
        !           198:                if(uinput(WIN_MID|WIN_SAV,0,0,"Group Long Name",str,LEN_GLNAME
        !           199:                        ,K_EDIT)<1)
        !           200:                        continue;
        !           201:                SETHELP(WHERE);
        !           202: /*
        !           203: &Group Short Name:&
        !           204: 
        !           205: This is a short description of the message group which is used for the
        !           206: main menu and reading message prompts.
        !           207: */
        !           208:                sprintf(str2,"%.*s",LEN_GSNAME,str);
        !           209:                if(uinput(WIN_MID,0,0,"Group Short Name",str2,LEN_GSNAME,K_EDIT)<1)
        !           210:                        continue;
        !           211:                if((grp=(grp_t **)REALLOC(grp,sizeof(grp_t *)*(total_grps+1)))==NULL) {
        !           212:             errormsg(WHERE,ERR_ALLOC,nulstr,total_grps+1);
        !           213:                        total_grps=0;
        !           214:                        bail(1);
        !           215:             continue; }
        !           216: 
        !           217:                if(total_grps) {        /* was total_subs (?) */
        !           218:             for(j=total_grps;j>i;j--)   /* insert above */
        !           219:                 grp[j]=grp[j-1];
        !           220:             for(j=0;j<total_subs;j++)   /* move sub group numbers */
        !           221:                 if(sub[j]->grp>=i)
        !           222:                     sub[j]->grp++; }
        !           223: 
        !           224:                if((grp[i]=(grp_t *)MALLOC(sizeof(grp_t)))==NULL) {
        !           225:                        errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(grp_t));
        !           226:                        continue; }
        !           227:                memset((grp_t *)grp[i],0,sizeof(grp_t));
        !           228:                strcpy(grp[i]->lname,str);
        !           229:                strcpy(grp[i]->sname,str2);
        !           230:                total_grps++;
        !           231:                changes=1;
        !           232:                continue; }
        !           233:        if((i&MSK_ON)==MSK_DEL) {
        !           234:                i&=MSK_OFF;
        !           235:                SETHELP(WHERE);
        !           236: /*
        !           237: &Delete All Data in Group:&
        !           238: 
        !           239: If you wish to delete the messages in all the sub-boards in this group,
        !           240: select &Yes&.
        !           241: */
        !           242:                j=1;
        !           243:                strcpy(opt[0],"Yes");
        !           244:                strcpy(opt[1],"No");
        !           245:                opt[2][0]=0;
        !           246:                j=ulist(WIN_MID|WIN_SAV,0,0,0,&j,0,"Delete All Data in Group",opt);
        !           247:                if(j==-1)
        !           248:                        continue;
        !           249:                if(j==0)
        !           250:                        for(j=0;j<total_subs;j++)
        !           251:                                if(sub[j]->grp==i) {
        !           252:                                        sprintf(str,"%s.s*",sub[j]->code);
        !           253:                                        if(!sub[j]->data_dir[0])
        !           254:                                                sprintf(tmp,"%sSUBS\\",data_dir);
        !           255:                                        else
        !           256:                                                strcpy(tmp,sub[j]->data_dir);
        !           257:                                        delfiles(tmp,str);
        !           258:                                        clearptrs(j); }
        !           259:                FREE(grp[i]);
        !           260:                for(j=0;j<total_subs;) {
        !           261:                        if(sub[j]->grp==i) {    /* delete subs of this group */
        !           262:                                FREE(sub[j]);
        !           263:                                total_subs--;
        !           264:                                k=j;
        !           265:                                while(k<total_subs) {   /* move all subs down */
        !           266:                                        sub[k]=sub[k+1];
        !           267:                                        for(q=0;q<total_qhubs;q++)
        !           268:                                                for(s=0;s<qhub[q]->subs;s++)
        !           269:                                                        if(qhub[q]->sub[s]==k)
        !           270:                                                                qhub[q]->sub[s]--;
        !           271:                                        k++; } }
        !           272:                        else j++; }
        !           273:                for(j=0;j<total_subs;j++)       /* move sub group numbers down */
        !           274:                        if(sub[j]->grp>i)
        !           275:                                sub[j]->grp--;
        !           276:                total_grps--;
        !           277:                while(i<total_grps) {
        !           278:                        grp[i]=grp[i+1];
        !           279:                        i++; }
        !           280:                changes=1;
        !           281:                continue; }
        !           282:        if((i&MSK_ON)==MSK_GET) {
        !           283:                i&=MSK_OFF;
        !           284:                savgrp=*grp[i];
        !           285:                continue; }
        !           286:        if((i&MSK_ON)==MSK_PUT) {
        !           287:                i&=MSK_OFF;
        !           288:                *grp[i]=savgrp;
        !           289:                changes=1;
        !           290:                continue; }
        !           291:        done=0;
        !           292:        while(!done) {
        !           293:                j=0;
        !           294:                sprintf(opt[j++],"%-27.27s%s","Long Name",grp[i]->lname);
        !           295:                sprintf(opt[j++],"%-27.27s%s","Short Name",grp[i]->sname);
        !           296:                sprintf(opt[j++],"%-27.27s%.40s","Access Requirements"
        !           297:                        ,grp[i]->ar);
        !           298:                strcpy(opt[j++],"Clone Options");
        !           299:                strcpy(opt[j++],"Export Areas...");
        !           300:                strcpy(opt[j++],"Import Areas...");
        !           301:                strcpy(opt[j++],"Message Sub-boards...");
        !           302:                opt[j][0]=0;
        !           303:                sprintf(str,"%s Group",grp[i]->sname);
        !           304:                savnum=0;
        !           305:                SETHELP(WHERE);
        !           306: /*
        !           307: &Message Group Configuration:&
        !           308: 
        !           309: This menu allows you to configure the security requirements for access
        !           310: to this message group. You can also add, delete, and configure the
        !           311: sub-boards of this group by selecting the &Messages Sub-boards...& option.
        !           312: */
        !           313:                switch(ulist(WIN_ACT,6,4,60,&dflt,0,str,opt)) {
        !           314:                        case -1:
        !           315:                                done=1;
        !           316:                                break;
        !           317:                        case 0:
        !           318:                                SETHELP(WHERE);
        !           319: /*
        !           320: &Group Long Name:&
        !           321: 
        !           322: This is a description of the message group which is displayed when a
        !           323: user of the system uses the &/*& command from the main menu.
        !           324: */*/
        !           325:                                strcpy(str,grp[i]->lname);      /* save incase setting to null */
        !           326:                                if(!uinput(WIN_MID|WIN_SAV,0,17,"Name to use for Listings"
        !           327:                                        ,grp[i]->lname,LEN_GLNAME,K_EDIT))
        !           328:                                        strcpy(grp[i]->lname,str);
        !           329:                                break;
        !           330:                        case 1:
        !           331:                                SETHELP(WHERE);
        !           332: /*
        !           333: &Group Short Name:&
        !           334: 
        !           335: This is a short description of the message group which is used for
        !           336: main menu and reading messages prompts.
        !           337: */
        !           338:                                uinput(WIN_MID|WIN_SAV,0,17,"Name to use for Prompts"
        !           339:                                        ,grp[i]->sname,LEN_GSNAME,K_EDIT);
        !           340:                                break;
        !           341:                        case 2:
        !           342:                                sprintf(str,"%s Group",grp[i]->sname);
        !           343:                                getar(str,grp[i]->ar);
        !           344:                                break;
        !           345:                        case 3:         /* Clone Options */
        !           346:                                j=0;
        !           347:                                strcpy(opt[0],"Yes");
        !           348:                                strcpy(opt[1],"No");
        !           349:                                opt[2][0]=0;
        !           350:                                SETHELP(WHERE);
        !           351: /*
        !           352: &Clone Sub-board Options:&
        !           353: 
        !           354: If you want to clone the options of the first sub-board of this group
        !           355: into all sub-boards of this group, select &Yes&.
        !           356: 
        !           357: The options cloned are posting requirements, reading requirements,
        !           358: operator requirments, moderated user requirments, toggle options,
        !           359: network options (including EchoMail origin line, EchoMail address,
        !           360: and QWK Network tagline), maximum number of messages, maximum number
        !           361: of CRCs, maximum age of messages, storage method, and data directory.
        !           362: */
        !           363:                                j=ulist(WIN_MID|WIN_SAV,0,0,0,&j,0
        !           364:                                        ,"Clone Options of First Sub-board into All of Group",opt);
        !           365:                                if(j==0) {
        !           366:                                        k=-1;
        !           367:                                        for(j=0;j<total_subs;j++)
        !           368:                                                if(sub[j]->grp==i) {
        !           369:                                                        if(k==-1)
        !           370:                                                                k=j;
        !           371:                                                        else {
        !           372:                                                                changes=1;
        !           373:                                                                sub[j]->misc=(sub[k]->misc|SUB_HDRMOD);
        !           374:                                                                strcpy(sub[j]->post_ar,sub[k]->post_ar);
        !           375:                                                                strcpy(sub[j]->read_ar,sub[k]->read_ar);
        !           376:                                                                strcpy(sub[j]->op_ar,sub[k]->op_ar);
        !           377:                                                                strcpy(sub[j]->mod_ar,sub[k]->mod_ar);
        !           378:                                                                strcpy(sub[j]->origline,sub[k]->origline);
        !           379:                                                                strcpy(sub[j]->tagline,sub[k]->tagline);
        !           380:                                                                strcpy(sub[j]->data_dir,sub[k]->data_dir);
        !           381:                                                                strcpy(sub[j]->echomail_sem
        !           382:                                                                        ,sub[k]->echomail_sem);
        !           383:                                                                sub[j]->maxmsgs=sub[k]->maxmsgs;
        !           384:                                                                sub[j]->maxcrcs=sub[k]->maxcrcs;
        !           385:                                                                sub[j]->maxage=sub[k]->maxage;
        !           386: 
        !           387:                                                                sub[j]->faddr=sub[k]->faddr; } } }
        !           388:                                break;
        !           389:                        case 4:
        !           390:                                k=0;
        !           391:                                ported=0;
        !           392:                                q=changes;
        !           393:                                strcpy(opt[k++],"SUBS.TXT    (Synchronet)");
        !           394:                                strcpy(opt[k++],"AREAS.BBS   (MSG)");
        !           395:                                strcpy(opt[k++],"AREAS.BBS   (SMB)");
        !           396:                                strcpy(opt[k++],"AREAS.BBS   (SBBSECHO)");
        !           397:                                strcpy(opt[k++],"FIDONET.NA  (Fido)");
        !           398:                                opt[k][0]=0;
        !           399:                                SETHELP(WHERE);
        !           400: /*
        !           401: &Export Area File Format:&
        !           402: 
        !           403: This menu allows you to choose the format of the area file you wish to
        !           404: export the current message group into.
        !           405: */
        !           406:                                k=0;
        !           407:                                k=ulist(WIN_MID|WIN_SAV,0,0,0,&k,0
        !           408:                                        ,"Export Area File Format",opt);
        !           409:                                if(k==-1)
        !           410:                                        break;
        !           411:                                if(k==0)
        !           412:                                        sprintf(str,"%sSUBS.TXT",ctrl_dir);
        !           413:                                else if(k==1 || k==2)
        !           414:                                        sprintf(str,"AREAS.BBS");
        !           415:                                else if(k==3)
        !           416:                                        sprintf(str,"%sAREAS.BBS",data_dir);
        !           417:                                else if(k==4)
        !           418:                                        sprintf(str,"FIDONET.NA");
        !           419:                                strupr(str);
        !           420:                                if(k && k<4)
        !           421:                                        if(uinput(WIN_MID|WIN_SAV,0,0,"Uplinks"
        !           422:                                                ,str2,40,K_UPPER)<=0) {
        !           423:                                                changes=q;
        !           424:                                                break; }
        !           425:                                if(uinput(WIN_MID|WIN_SAV,0,0,"Filename"
        !           426:                                        ,str,40,K_UPPER|K_EDIT)<=0) {
        !           427:                                        changes=q;
        !           428:                                        break; }
        !           429:                                if(fexist(str)) {
        !           430:                                        strcpy(opt[0],"Overwrite");
        !           431:                                        strcpy(opt[1],"Append");
        !           432:                                        opt[2][0]=0;
        !           433:                                        j=0;
        !           434:                                        j=ulist(WIN_MID|WIN_SAV,0,0,0,&j,0
        !           435:                                                ,"File Exists",opt);
        !           436:                                        if(j==-1)
        !           437:                                                break;
        !           438:                                        if(j==0) j=O_WRONLY|O_TRUNC;
        !           439:                                        else     j=O_WRONLY|O_APPEND; }
        !           440:                                else
        !           441:                                        j=O_WRONLY|O_CREAT;
        !           442:                                if((stream=fnopen(&file,str,j))==NULL) {
        !           443:                                        umsg("Open Failure");
        !           444:                                        break; }
        !           445:                                upop("Exporting Areas...");
        !           446:                                for(j=0;j<total_subs;j++) {
        !           447:                                        if(sub[j]->grp!=i)
        !           448:                                                continue;
        !           449:                                        ported++;
        !           450:                                        if(k==1) {              /* AREAS.BBS *.MSG */
        !           451:                                                if(!sub[j]->echopath[0])
        !           452:                                                        sprintf(str,"%s%s\\",echomail_dir,sub[j]->code);
        !           453:                                                else
        !           454:                                                        strcpy(str,sub[j]->echopath);
        !           455:                                                fprintf(stream,"%-30s %-20s %s\r\n"
        !           456:                                                        ,str,stou(sub[j]->sname),str2);
        !           457:                                                continue; }
        !           458:                                        if(k==2) {              /* AREAS.BBS SMB */
        !           459:                                                if(!sub[j]->data_dir[0])
        !           460:                                                        sprintf(str,"%sSUBS\\%s",data_dir,sub[j]->code);
        !           461:                                                else
        !           462:                                                        sprintf(str,"%s%s",sub[j]->data_dir,sub[j]->code);
        !           463:                                                fprintf(stream,"%-30s %-20s %s\r\n"
        !           464:                                                        ,str,stou(sub[j]->sname),str2);
        !           465:                         continue; }
        !           466:                                        if(k==3) {              /* AREAS.BBS SBBSECHO */
        !           467:                                                fprintf(stream,"%-30s %-20s %s\r\n"
        !           468:                                                        ,sub[j]->code,stou(sub[j]->sname),str2);
        !           469:                                                continue; }
        !           470:                                        if(k==4) {              /* FIDONET.NA */
        !           471:                                                fprintf(stream,"%-20s %s\r\n"
        !           472:                                                        ,stou(sub[j]->sname),sub[j]->lname);
        !           473:                                                continue; }
        !           474:                                        fprintf(stream,"%s\r\n%s\r\n%s\r\n%s\r\n%s\r\n%s\r\n"
        !           475:                                                        "%s\r\n%s\r\n%s\r\n"
        !           476:                                                ,sub[j]->lname
        !           477:                                                ,sub[j]->sname
        !           478:                                                ,sub[j]->qwkname
        !           479:                                                ,sub[j]->code
        !           480:                                                ,sub[j]->data_dir
        !           481:                                                ,sub[j]->ar
        !           482:                                                ,sub[j]->read_ar
        !           483:                                                ,sub[j]->post_ar
        !           484:                                                ,sub[j]->op_ar
        !           485:                                                );
        !           486:                                        fprintf(stream,"%lX\r\n%s\r\n%s\r\n%s\r\n%s\r\n%s\r\n"
        !           487:                                                ,sub[j]->misc
        !           488:                                                ,sub[j]->tagline
        !           489:                                                ,sub[j]->origline
        !           490:                                                ,sub[j]->echomail_sem
        !           491:                                                ,sub[j]->echopath
        !           492:                                                ,faddrtoa(sub[j]->faddr)
        !           493:                                                );
        !           494:                                        fprintf(stream,"%lu\r\n%lu\r\n%u\r\n%u\r\n%s\r\n"
        !           495:                                                ,sub[j]->maxmsgs
        !           496:                                                ,sub[j]->maxcrcs
        !           497:                                                ,sub[j]->maxage
        !           498:                                                ,sub[j]->ptridx
        !           499:                                                ,sub[j]->mod_ar
        !           500:                                                );
        !           501:                                        fprintf(stream,"***END-OF-SUB***\r\n\r\n"); }
        !           502:                                fclose(stream);
        !           503:                                upop(0);
        !           504:                                sprintf(str,"%lu Message Areas Exported Successfully",ported);
        !           505:                                umsg(str);
        !           506:                                changes=q;
        !           507:                                break;
        !           508:                        case 5:
        !           509:                                ported=0;
        !           510:                                k=0;
        !           511:                                strcpy(opt[k++],"SUBS.TXT    (Synchronet)");
        !           512:                                strcpy(opt[k++],"AREAS.BBS   (MSG)");
        !           513:                                strcpy(opt[k++],"AREAS.BBS   (SMB)");
        !           514:                                strcpy(opt[k++],"AREAS.BBS   (SBBSECHO)");
        !           515:                                strcpy(opt[k++],"FIDONET.NA  (Fido)");
        !           516:                                opt[k][0]=0;
        !           517:                                SETHELP(WHERE);
        !           518: /*
        !           519: &Import Area File Format:&
        !           520: 
        !           521: This menu allows you to choose the format of the area file you wish to
        !           522: import into the current message group.
        !           523: */
        !           524:                                k=0;
        !           525:                                k=ulist(WIN_MID|WIN_SAV,0,0,0,&k,0
        !           526:                                        ,"Import Area File Format",opt);
        !           527:                                if(k==-1)
        !           528:                                        break;
        !           529:                                if(k==0)
        !           530:                                        sprintf(str,"%sSUBS.TXT",ctrl_dir);
        !           531:                                else if(k==1 || k==2)
        !           532:                                        sprintf(str,"AREAS.BBS");
        !           533:                                else if(k==3)
        !           534:                                        sprintf(str,"%sAREAS.BBS",data_dir);
        !           535:                                else if(k==4)
        !           536:                                        sprintf(str,"FIDONET.NA");
        !           537:                                strupr(str);
        !           538:                                if(uinput(WIN_MID|WIN_SAV,0,0,"Filename"
        !           539:                                        ,str,40,K_UPPER|K_EDIT)<=0)
        !           540:                     break;
        !           541:                                if((stream=fnopen(&file,str,O_RDONLY))==NULL) {
        !           542:                                        umsg("Open Failure");
        !           543:                     break; }
        !           544:                                upop("Importing Areas...");
        !           545:                                while(!feof(stream)) {
        !           546:                                        if(!fgets(str,128,stream)) break;
        !           547:                                        truncsp(str);
        !           548:                                        if(!str[0])
        !           549:                                                continue;
        !           550:                                        if(k) {
        !           551:                                                p=str;
        !           552:                                                while(*p && *p<=SP) p++;
        !           553:                                                if(!*p || *p==';')
        !           554:                                                        continue;
        !           555:                                                memset(&tmpsub,0,sizeof(sub_t));
        !           556:                                                tmpsub.misc|=
        !           557:                                                        (SUB_FIDO|SUB_NAME|SUB_TOUSER|SUB_QUOTE|SUB_HYPER);
        !           558:                                                if(k==1) {              /* AREAS.BBS *.MSG */
        !           559:                                                        p=strrchr(str,'\\');
        !           560:                             if(p) *p=0;
        !           561:                             else p=str;
        !           562:                                                        sprintf(tmpsub.echopath,"%.*s",LEN_DIR,str);
        !           563:                                                        p++;
        !           564:                                                        sprintf(tmpsub.code,"%.8s",p);
        !           565:                                                        while(*p && *p<=SP) p++;
        !           566:                                                        sprintf(tmpsub.sname,"%.*s",LEN_SSNAME,p);
        !           567:                                                        p=strchr(tmpsub.sname,SP);
        !           568:                                                        if(p) *p=0;
        !           569:                                                        strcpy(tmpsub.sname,utos(tmpsub.sname));
        !           570:                                                        sprintf(tmpsub.lname,"%.*s",LEN_SLNAME
        !           571:                                                                ,tmpsub.sname);
        !           572:                                                        sprintf(tmpsub.qwkname,"%.*s",10
        !           573:                                 ,tmpsub.sname);
        !           574:                                                        }
        !           575:                                                if(k==2) {              /* AREAS.BBS SMB */
        !           576:                                                        p=strrchr(str,'\\');
        !           577:                             if(p) *p=0;
        !           578:                             else p=str;
        !           579:                                                        sprintf(tmpsub.data_dir,"%.*s",LEN_DIR,str);
        !           580:                                                        p++;
        !           581:                                                        sprintf(tmpsub.code,"%.8s",p);
        !           582:                                                        while(*p && *p<=SP) p++;
        !           583:                                                        sprintf(tmpsub.sname,"%.*s",LEN_SSNAME,p);
        !           584:                                                        p=strchr(tmpsub.sname,SP);
        !           585:                                                        if(p) *p=0;
        !           586:                                                        strcpy(tmpsub.sname,utos(tmpsub.sname));
        !           587:                                                        sprintf(tmpsub.lname,"%.*s",LEN_SLNAME
        !           588:                                                                ,tmpsub.sname);
        !           589:                                                        sprintf(tmpsub.qwkname,"%.*s",10
        !           590:                                 ,tmpsub.sname);
        !           591:                             }
        !           592:                                                else if(k==3) { /* AREAS.BBS SBBSECHO */
        !           593:                                                        p=str;
        !           594:                                                        while(*p && *p>SP) p++;
        !           595:                                                        *p=0;
        !           596:                                                        sprintf(tmpsub.code,"%.8s",str);
        !           597:                                                        p++;
        !           598:                                                        while(*p && *p<=SP) p++;
        !           599:                                                        sprintf(tmpsub.sname,"%.*s",LEN_SSNAME,p);
        !           600:                                                        p=strchr(tmpsub.sname,SP);
        !           601:                                                        if(p) *p=0;
        !           602:                                                        strcpy(tmpsub.sname,utos(tmpsub.sname));
        !           603:                                                        sprintf(tmpsub.lname,"%.*s",LEN_SLNAME
        !           604:                                                                ,tmpsub.sname);
        !           605:                                                        sprintf(tmpsub.qwkname,"%.*s",10
        !           606:                                 ,tmpsub.sname);
        !           607:                                                        }
        !           608:                                                else if(k==4) { /* FIDONET.NA */
        !           609:                             p=str;
        !           610:                                                        while(*p && *p>SP) p++;
        !           611:                                                        *p=0;
        !           612:                                                        sprintf(tmpsub.code,"%.8s",str);
        !           613:                                                        sprintf(tmpsub.sname,"%.*s",LEN_SSNAME,utos(str));
        !           614:                                                        sprintf(tmpsub.qwkname,"%.10s",tmpsub.sname);
        !           615:                                                        p++;
        !           616:                                                        while(*p && *p<=SP) p++;
        !           617:                                                        sprintf(tmpsub.lname,"%.*s",LEN_SLNAME,p);
        !           618:                                                        }
        !           619:                                                ported++; }
        !           620:                                        else {
        !           621:                                                memset(&tmpsub,0,sizeof(sub_t));
        !           622:                                                tmpsub.grp=i;
        !           623:                                                sprintf(tmpsub.lname,"%.*s",LEN_SLNAME,str);
        !           624:                                                if(!fgets(str,128,stream)) break;
        !           625:                                                truncsp(str);
        !           626:                                                sprintf(tmpsub.sname,"%.*s",LEN_SSNAME,str);
        !           627:                                                if(!fgets(str,128,stream)) break;
        !           628:                                                truncsp(str);
        !           629:                                                sprintf(tmpsub.qwkname,"%.*s",10,str);
        !           630:                                                if(!fgets(str,128,stream)) break;
        !           631:                                                truncsp(str);
        !           632:                                                sprintf(tmpsub.code,"%.*s",8,str);
        !           633:                                                if(!fgets(str,128,stream)) break;
        !           634:                                                truncsp(str);
        !           635:                                                sprintf(tmpsub.data_dir,"%.*s",LEN_DIR,str);
        !           636:                                                if(!fgets(str,128,stream)) break;
        !           637:                                                truncsp(str);
        !           638:                                                sprintf(tmpsub.ar,"%.*s",LEN_ARSTR,str);
        !           639:                                                if(!fgets(str,128,stream)) break;
        !           640:                                                truncsp(str);
        !           641:                                                sprintf(tmpsub.read_ar,"%.*s",LEN_ARSTR,str);
        !           642:                                                if(!fgets(str,128,stream)) break;
        !           643:                                                truncsp(str);
        !           644:                                                sprintf(tmpsub.post_ar,"%.*s",LEN_ARSTR,str);
        !           645:                                                if(!fgets(str,128,stream)) break;
        !           646:                                                truncsp(str);
        !           647:                                                sprintf(tmpsub.op_ar,"%.*s",LEN_ARSTR,str);
        !           648:                                                if(!fgets(str,128,stream)) break;
        !           649:                                                truncsp(str);
        !           650:                                                tmpsub.misc=ahtoul(str);
        !           651:                                                if(!fgets(str,128,stream)) break;
        !           652:                                                truncsp(str);
        !           653:                                                sprintf(tmpsub.tagline,"%.*s",80,str);
        !           654:                                                if(!fgets(str,128,stream)) break;
        !           655:                                                truncsp(str);
        !           656:                                                sprintf(tmpsub.origline,"%.*s",50,str);
        !           657:                                                if(!fgets(str,128,stream)) break;
        !           658:                                                truncsp(str);
        !           659:                                                sprintf(tmpsub.echomail_sem,"%.*s",LEN_DIR,str);
        !           660:                                                if(!fgets(str,128,stream)) break;
        !           661:                                                truncsp(str);
        !           662:                                                sprintf(tmpsub.echopath,"%.*s",LEN_DIR,str);
        !           663:                                                if(!fgets(str,128,stream)) break;
        !           664:                                                truncsp(str);
        !           665:                                                tmpsub.faddr=atofaddr(str);
        !           666:                                                if(!fgets(str,128,stream)) break;
        !           667:                                                truncsp(str);
        !           668:                                                tmpsub.maxmsgs=atol(str);
        !           669:                                                if(!fgets(str,128,stream)) break;
        !           670:                                                truncsp(str);
        !           671:                                                tmpsub.maxcrcs=atol(str);
        !           672:                                                if(!fgets(str,128,stream)) break;
        !           673:                                                truncsp(str);
        !           674:                                                tmpsub.maxage=atoi(str);
        !           675:                                                if(!fgets(str,128,stream)) break;
        !           676:                                                truncsp(str);
        !           677:                                                tmpsub.ptridx=atoi(str);
        !           678:                                                if(!fgets(str,128,stream)) break;
        !           679:                                                truncsp(str);
        !           680:                                                sprintf(tmpsub.mod_ar,"%.*s",LEN_ARSTR,str);
        !           681: 
        !           682:                                                ported++;
        !           683:                                                while(!feof(stream)
        !           684:                                                        && strcmp(str,"***END-OF-SUB***")) {
        !           685:                                                        if(!fgets(str,128,stream)) break;
        !           686:                                                        truncsp(str); } }
        !           687: 
        !           688:                                        truncsp(tmpsub.code);
        !           689:                                        truncsp(tmpsub.sname);
        !           690:                                        truncsp(tmpsub.lname);
        !           691:                                        truncsp(tmpsub.qwkname);
        !           692:                                        for(j=0;j<total_subs;j++) {
        !           693:                                                if(sub[j]->grp!=i)
        !           694:                                                        continue;
        !           695:                                                if(!stricmp(sub[j]->code,tmpsub.code))
        !           696:                                                        break; }
        !           697:                                        if(j==total_subs) {
        !           698: 
        !           699:                                                if((sub=(sub_t **)REALLOC(sub
        !           700:                                                        ,sizeof(sub_t *)*(total_subs+1)))==NULL) {
        !           701:                                                        errormsg(WHERE,ERR_ALLOC,nulstr,total_subs+1);
        !           702:                                                        total_subs=0;
        !           703:                                                        bail(1);
        !           704:                                                        break; }
        !           705: 
        !           706:                                                for(ptridx=0;ptridx>-1;ptridx++) {
        !           707:                                                        for(n=0;n<total_subs;n++)
        !           708:                                                                if(sub[n]->ptridx==ptridx)
        !           709:                                                                        break;
        !           710:                                                        if(n==total_subs)
        !           711:                                                                break; }
        !           712: 
        !           713:                                                if((sub[j]=(sub_t *)MALLOC(sizeof(sub_t)))
        !           714:                                                        ==NULL) {
        !           715:                                                        errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(sub_t));
        !           716:                                                        break; }
        !           717:                                                memset(sub[j],0,sizeof(sub_t)); }
        !           718:                                        if(!k)
        !           719:                                                memcpy(sub[j],&tmpsub,sizeof(sub_t));
        !           720:                                        else {
        !           721:                         sub[j]->grp=i;
        !           722:                                                if(total_faddrs)
        !           723:                                                        sub[j]->faddr=faddr[0];
        !           724:                                                strcpy(sub[j]->code,tmpsub.code);
        !           725:                                                strcpy(sub[j]->sname,tmpsub.sname);
        !           726:                                                strcpy(sub[j]->lname,tmpsub.lname);
        !           727:                                                strcpy(sub[j]->qwkname,tmpsub.qwkname);
        !           728:                                                strcpy(sub[j]->echopath,tmpsub.echopath);
        !           729:                                                strcpy(sub[j]->data_dir,tmpsub.data_dir);
        !           730:                                                if(j==total_subs)
        !           731:                                                        sub[j]->maxmsgs=1000;
        !           732:                                                }
        !           733:                                        if(j==total_subs) {
        !           734:                                                sub[j]->ptridx=ptridx;
        !           735:                                                sub[j]->misc=tmpsub.misc;
        !           736:                                                total_subs++; }
        !           737:                                        changes=1; }
        !           738:                                fclose(stream);
        !           739:                                upop(0);
        !           740:                                sprintf(str,"%lu Message Areas Imported Successfully",ported);
        !           741:                 umsg(str);
        !           742:                                break;
        !           743: 
        !           744:                        case 6:
        !           745:                 sub_cfg(i);
        !           746:                                break; } } }
        !           747: 
        !           748: }
        !           749: 
        !           750: void msg_opts()
        !           751: {
        !           752:        char str[128],*p;
        !           753:        static int msg_dflt;
        !           754:        int i,j;
        !           755: 
        !           756:        while(1) {
        !           757:                i=0;
        !           758:                sprintf(opt[i++],"%-33.33s%s"
        !           759:                        ,"BBS ID for QWK Packets",sys_id);
        !           760:                sprintf(opt[i++],"%-33.33s%s"
        !           761:                        ,"Local Time Zone",zonestr(sys_timezone));
        !           762:                sprintf(opt[i++],"%-33.33s%u seconds"
        !           763:                        ,"Maximum Retry Time",smb_retry_time);
        !           764:                if(max_qwkmsgs)
        !           765:                        sprintf(str,"%lu",max_qwkmsgs);
        !           766:                else
        !           767:                        sprintf(str,"Unlimited");
        !           768:                sprintf(opt[i++],"%-33.33s%s"
        !           769:                        ,"Maximum QWK Messages",str);
        !           770:                sprintf(opt[i++],"%-33.33s%s","Pre-pack QWK Requirements",preqwk_ar);
        !           771:                if(mail_maxage)
        !           772:                        sprintf(str,"Enabled (%u days old)",mail_maxage);
        !           773:         else
        !           774:             strcpy(str,"Disabled");
        !           775:                sprintf(opt[i++],"%-33.33s%s","Purge E-mail by Age",str);
        !           776:                if(sys_misc&SM_DELEMAIL)
        !           777:                        strcpy(str,"Immediately");
        !           778:                else
        !           779:                        strcpy(str,"Daily");
        !           780:                sprintf(opt[i++],"%-33.33s%s","Purge Deleted E-mail",str);
        !           781:                if(mail_maxcrcs)
        !           782:                        sprintf(str,"Enabled (%lu mail CRCs)",mail_maxcrcs);
        !           783:                else
        !           784:                        strcpy(str,"Disabled");
        !           785:                sprintf(opt[i++],"%-33.33s%s","Duplicate E-mail Checking",str);
        !           786:                sprintf(opt[i++],"%-33.33s%s","Allow Anonymous E-mail"
        !           787:                        ,sys_misc&SM_ANON_EM ? "Yes" : "No");
        !           788:                sprintf(opt[i++],"%-33.33s%s","Allow Quoting in E-mail"
        !           789:                        ,sys_misc&SM_QUOTE_EM ? "Yes" : "No");
        !           790:                sprintf(opt[i++],"%-33.33s%s","Allow Uploads in E-mail"
        !           791:                        ,sys_misc&SM_FILE_EM ? "Yes" : "No");
        !           792:                sprintf(opt[i++],"%-33.33s%s","Allow Forwarding to NetMail"
        !           793:                        ,sys_misc&SM_FWDTONET ? "Yes" : "No");
        !           794:                sprintf(opt[i++],"%-33.33s%s","Kill Read E-mail"
        !           795:                        ,sys_misc&SM_DELREADM ? "Yes" : "No");
        !           796:                sprintf(opt[i++],"%-33.33s%s","Users Can View Deleted Messages"
        !           797:                        ,sys_misc&SM_USRVDELM ? "Yes" : sys_misc&SM_SYSVDELM
        !           798:                                ? "Sysops Only":"No");
        !           799:                strcpy(opt[i++],"Extra Attribute Codes...");
        !           800:                opt[i][0]=0;
        !           801:                savnum=0;
        !           802:                SETHELP(WHERE);
        !           803: /*
        !           804: &Message Options:&
        !           805: 
        !           806: This is a menu of system-wide message related options. Messages include
        !           807: E-mail and public posts (on sub-boards).
        !           808: */
        !           809: 
        !           810:                switch(ulist(WIN_ORG|WIN_ACT|WIN_MID|WIN_CHE,0,0,72,&msg_dflt,0
        !           811:                        ,"Message Options",opt)) {
        !           812:                        case -1:
        !           813:                                i=save_changes(WIN_MID);
        !           814:                                if(i==-1)
        !           815:                                   continue;
        !           816:                                if(!i) {
        !           817:                                        write_msgs_cfg();
        !           818:                                        write_main_cfg(); }
        !           819:                                return;
        !           820:                        case 0:
        !           821:                                strcpy(str,sys_id);
        !           822:                                SETHELP(WHERE);
        !           823: /*
        !           824: &BBS ID for QWK Packets:&
        !           825: 
        !           826: This is a short system ID for your BBS that is used for QWK packets.
        !           827: It should be an abbreviation of your BBS name or other related string.
        !           828: This ID will be used for your outgoing and incoming QWK packets. If
        !           829: you plan on networking via QWK packets with another Synchronet BBS,
        !           830: this ID should not begin with a number. The maximum length of the ID
        !           831: is eight characters and cannot contain spaces or other invalid DOS
        !           832: filename characters. In a QWK packet network, each system must have
        !           833: a unique QWK system ID.
        !           834: */
        !           835: 
        !           836:                                uinput(WIN_MID|WIN_SAV,0,0,"BBS ID for QWK Packets"
        !           837:                                        ,str,8,K_EDIT|K_UPPER);
        !           838:                                if(code_ok(str))
        !           839:                                        strcpy(sys_id,str);
        !           840:                                else
        !           841:                                        umsg("Invalid ID");
        !           842:                                break;
        !           843:                        case 1:
        !           844:                                strcpy(opt[0],"Yes");
        !           845:                                strcpy(opt[1],"No");
        !           846:                                opt[2][0]=0;
        !           847:                                i=0;
        !           848:                                SETHELP(WHERE);
        !           849: /*
        !           850: &United States Time Zone:&
        !           851: 
        !           852: If your local time zone is the United States, select &Yes&.
        !           853: */
        !           854: 
        !           855:                                i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
        !           856:                                        ,"United States Time Zone",opt);
        !           857:                                if(i==-1)
        !           858:                                        break;
        !           859:                                if(i==0) {
        !           860:                                        strcpy(opt[i++],"Atlantic");
        !           861:                                        strcpy(opt[i++],"Eastern");
        !           862:                                        strcpy(opt[i++],"Central");
        !           863:                                        strcpy(opt[i++],"Mountain");
        !           864:                                        strcpy(opt[i++],"Pacific");
        !           865:                                        strcpy(opt[i++],"Yukon");
        !           866:                                        strcpy(opt[i++],"Hawaii/Alaska");
        !           867:                                        strcpy(opt[i++],"Bering");
        !           868:                                        opt[i][0]=0;
        !           869:                                        i=0;
        !           870:                                        i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
        !           871:                                                ,"Time Zone",opt);
        !           872:                                        if(i==-1)
        !           873:                                                break;
        !           874:                                        changes=1;
        !           875:                                        switch(i) {
        !           876:                                                case 0:
        !           877:                                                        sys_timezone=AST;
        !           878:                                                        break;
        !           879:                                                case 1:
        !           880:                                                        sys_timezone=EST;
        !           881:                                                        break;
        !           882:                                                case 2:
        !           883:                                                        sys_timezone=CST;
        !           884:                             break;
        !           885:                                                case 3:
        !           886:                                                        sys_timezone=MST;
        !           887:                             break;
        !           888:                                                case 4:
        !           889:                                                        sys_timezone=PST;
        !           890:                             break;
        !           891:                                                case 5:
        !           892:                                                        sys_timezone=YST;
        !           893:                             break;
        !           894:                                                case 6:
        !           895:                                                        sys_timezone=HST;
        !           896:                             break;
        !           897:                                                case 7:
        !           898:                                                        sys_timezone=BST;
        !           899:                                                        break; }
        !           900:                                        strcpy(opt[0],"Yes");
        !           901:                                        strcpy(opt[1],"No");
        !           902:                                        opt[2][0]=0;
        !           903:                                        i=1;
        !           904:                                        i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
        !           905:                                                ,"Daylight Savings",opt);
        !           906:                                        if(i==-1)
        !           907:                         break;
        !           908:                                        if(!i)
        !           909:                                                sys_timezone|=DAYLIGHT;
        !           910:                                        break; }
        !           911:                                i=0;
        !           912:                                strcpy(opt[i++],"Midway");
        !           913:                                strcpy(opt[i++],"Vancouver");
        !           914:                                strcpy(opt[i++],"Edmonton");
        !           915:                                strcpy(opt[i++],"Winnipeg");
        !           916:                                strcpy(opt[i++],"Bogota");
        !           917:                                strcpy(opt[i++],"Caracas");
        !           918:                                strcpy(opt[i++],"Rio de Janeiro");
        !           919:                                strcpy(opt[i++],"Fernando de Noronha");
        !           920:                                strcpy(opt[i++],"Azores");
        !           921:                                strcpy(opt[i++],"London");
        !           922:                                strcpy(opt[i++],"Berlin");
        !           923:                                strcpy(opt[i++],"Athens");
        !           924:                                strcpy(opt[i++],"Moscow");
        !           925:                                strcpy(opt[i++],"Dubai");
        !           926:                                strcpy(opt[i++],"Kabul");
        !           927:                                strcpy(opt[i++],"Karachi");
        !           928:                                strcpy(opt[i++],"Bombay");
        !           929:                                strcpy(opt[i++],"Kathmandu");
        !           930:                                strcpy(opt[i++],"Dhaka");
        !           931:                                strcpy(opt[i++],"Bangkok");
        !           932:                                strcpy(opt[i++],"Hong Kong");
        !           933:                                strcpy(opt[i++],"Tokyo");
        !           934:                                strcpy(opt[i++],"Sydney");
        !           935:                                strcpy(opt[i++],"Noumea");
        !           936:                                strcpy(opt[i++],"Wellington");
        !           937:                                strcpy(opt[i++],"Other...");
        !           938:                                opt[i][0]=0;
        !           939:                                i=0;
        !           940:                                i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
        !           941:                                        ,"Time Zone",opt);
        !           942:                                if(i==-1)
        !           943:                                        break;
        !           944:                                changes=1;
        !           945:                                switch(i) {
        !           946:                                        case 0:
        !           947:                                                sys_timezone=MID;
        !           948:                                                break;
        !           949:                                        case 1:
        !           950:                                                sys_timezone=VAN;
        !           951:                                                break;
        !           952:                                        case 2:
        !           953:                                                sys_timezone=EDM;
        !           954:                                                break;
        !           955:                                        case 3:
        !           956:                                                sys_timezone=WIN;
        !           957:                                                break;
        !           958:                                        case 4:
        !           959:                                                sys_timezone=BOG;
        !           960:                                                break;
        !           961:                                        case 5:
        !           962:                                                sys_timezone=CAR;
        !           963:                                                break;
        !           964:                                        case 6:
        !           965:                                                sys_timezone=RIO;
        !           966:                                                break;
        !           967:                                        case 7:
        !           968:                                                sys_timezone=FER;
        !           969:                                                break;
        !           970:                                        case 8:
        !           971:                                                sys_timezone=AZO;
        !           972:                         break;
        !           973:                                        case 9:
        !           974:                                                sys_timezone=LON;
        !           975:                         break;
        !           976:                                        case 10:
        !           977:                                                sys_timezone=BER;
        !           978:                         break;
        !           979:                                        case 11:
        !           980:                                                sys_timezone=ATH;
        !           981:                         break;
        !           982:                                        case 12:
        !           983:                                                sys_timezone=MOS;
        !           984:                         break;
        !           985:                                        case 13:
        !           986:                                                sys_timezone=DUB;
        !           987:                         break;
        !           988:                                        case 14:
        !           989:                                                sys_timezone=KAB;
        !           990:                         break;
        !           991:                                        case 15:
        !           992:                                                sys_timezone=KAR;
        !           993:                         break;
        !           994:                                        case 16:
        !           995:                                                sys_timezone=BOM;
        !           996:                         break;
        !           997:                                        case 17:
        !           998:                                                sys_timezone=KAT;
        !           999:                         break;
        !          1000:                                        case 18:
        !          1001:                                                sys_timezone=DHA;
        !          1002:                         break;
        !          1003:                                        case 19:
        !          1004:                                                sys_timezone=BAN;
        !          1005:                         break;
        !          1006:                                        case 20:
        !          1007:                                                sys_timezone=HON;
        !          1008:                         break;
        !          1009:                                        case 21:
        !          1010:                                                sys_timezone=TOK;
        !          1011:                         break;
        !          1012:                                        case 22:
        !          1013:                                                sys_timezone=SYD;
        !          1014:                         break;
        !          1015:                                        case 23:
        !          1016:                                                sys_timezone=NOU;
        !          1017:                         break;
        !          1018:                                        case 24:
        !          1019:                                                sys_timezone=WEL;
        !          1020:                         break;
        !          1021:                                        default:
        !          1022:                                                if(sys_timezone>720 || sys_timezone<-720)
        !          1023:                                                        sys_timezone=0;
        !          1024:                                                sprintf(str,"%02d:%02d"
        !          1025:                                                        ,sys_timezone/60,sys_timezone<0
        !          1026:                                                        ? (-sys_timezone)%60 : sys_timezone%60);
        !          1027:                                                uinput(WIN_MID|WIN_SAV,0,0
        !          1028:                                                        ,"Time (HH:MM) East (+) or West (-) of Universal "
        !          1029:                                                                "Time"
        !          1030:                                                        ,str,6,K_EDIT|K_UPPER);
        !          1031:                                                sys_timezone=atoi(str)*60;
        !          1032:                                                p=strchr(str,':');
        !          1033:                                                if(p) {
        !          1034:                                                        if(sys_timezone<0)
        !          1035:                                                                sys_timezone-=atoi(p+1);
        !          1036:                                                        else
        !          1037:                                                                sys_timezone+=atoi(p+1); }
        !          1038:                         break;
        !          1039:                                                }
        !          1040:                 break;
        !          1041:                        case 2:
        !          1042:                                SETHELP(WHERE);
        !          1043: /*
        !          1044: &Maximum Message Base Retry Time:&
        !          1045: 
        !          1046: This is the maximum number of seconds to allow while attempting to open
        !          1047: or lock a message base (a value in the range of 10 to 45 seconds should
        !          1048: be fine).
        !          1049: */
        !          1050:                                itoa(smb_retry_time,str,10);
        !          1051:                                uinput(WIN_MID|WIN_SAV,0,0
        !          1052:                                        ,"Maximum Message Base Retry Time (in seconds)"
        !          1053:                                        ,str,2,K_NUMBER|K_EDIT);
        !          1054:                                smb_retry_time=atoi(str);
        !          1055:                                break;
        !          1056:                        case 3:
        !          1057:                                SETHELP(WHERE);
        !          1058: /*
        !          1059: &Maximum Messages Per QWK Packet:&
        !          1060: 
        !          1061: This is the maximum number of messages (excluding E-mail), that a user
        !          1062: can have in one QWK packet for download. This limit does not effect
        !          1063: QWK network nodes (&Q& restriction). If set to &0&, no limit is imposed.
        !          1064: */
        !          1065: 
        !          1066:                                ultoa(max_qwkmsgs,str,10);
        !          1067:                                uinput(WIN_MID|WIN_SAV,0,0
        !          1068:                                        ,"Maximum Messages Per QWK Packet (0=No Limit)"
        !          1069:                                        ,str,6,K_NUMBER|K_EDIT);
        !          1070:                                max_qwkmsgs=atoi(str);
        !          1071:                 break;
        !          1072:                        case 4:
        !          1073:                                SETHELP(WHERE);
        !          1074: /*
        !          1075: &Pre-pack QWK Requirements:&
        !          1076: 
        !          1077: ALL user accounts on the BBS meeting this requirmenet will have a QWK
        !          1078: packet automatically created for them every day after midnight
        !          1079: (during the internal daily event).
        !          1080: 
        !          1081: This is mainly intended for QWK network nodes that wish to save connect
        !          1082: time by having their packets pre-packed. If a large number of users meet
        !          1083: this requirement, it can take up a large amount of disk space on your
        !          1084: system (in the &DATA\FILE& directory).
        !          1085: */
        !          1086:                                getar("Pre-pack QWK (Use with caution!)",preqwk_ar);
        !          1087:                                break;
        !          1088:                        case 5:
        !          1089:                                sprintf(str,"%u",mail_maxage);
        !          1090:                 SETHELP(WHERE);
        !          1091: /*
        !          1092: &Maximum Age of Mail:&
        !          1093: 
        !          1094: This value is the maximum number of days that mail will be kept.
        !          1095: */
        !          1096:                 uinput(WIN_MID|WIN_SAV,0,17,"Maximum Age of Mail "
        !          1097:                     "(in days)",str,5,K_EDIT|K_NUMBER);
        !          1098:                 mail_maxage=atoi(str);
        !          1099:                 break;
        !          1100:                        case 6:
        !          1101:                                strcpy(opt[0],"Daily");
        !          1102:                                strcpy(opt[1],"Immediately");
        !          1103:                                opt[2][0]=0;
        !          1104:                                i=0;
        !          1105:                                SETHELP(WHERE);
        !          1106: /*
        !          1107: &Purge Deleted E-mail:&
        !          1108: 
        !          1109: If you wish to have deleted e-mail physically (and permanently) removed
        !          1110: from your e-mail database immediately after a users exits the reading
        !          1111: e-mail prompt, set this option to &Immediately&.
        !          1112: 
        !          1113: For the best system performance and to avoid delays when deleting e-mail
        !          1114: from a large e-mail database, set this option to &Daily& (the default).
        !          1115: Your system maintenance will automatically purge deleted e-mail once a
        !          1116: day.
        !          1117: */
        !          1118: 
        !          1119:                                i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
        !          1120:                                        ,"Purge Deleted E-mail",opt);
        !          1121:                                if(!i && sys_misc&SM_DELEMAIL) {
        !          1122:                                        sys_misc&=~SM_DELEMAIL;
        !          1123:                                        changes=1; }
        !          1124:                                else if(i==1 && !(sys_misc&SM_DELEMAIL)) {
        !          1125:                                        sys_misc|=SM_DELEMAIL;
        !          1126:                                        changes=1; }
        !          1127:                 break;
        !          1128:                        case 7:
        !          1129:                                sprintf(str,"%lu",mail_maxcrcs);
        !          1130:                 SETHELP(WHERE);
        !          1131: /*
        !          1132: &Maximum Number of Mail CRCs:&
        !          1133: 
        !          1134: This value is the maximum number of CRCs that will be kept for duplicate
        !          1135: mail checking. Once this maximum number of CRCs is reached, the oldest
        !          1136: CRCs will be automatically purged.
        !          1137: */
        !          1138:                 uinput(WIN_MID|WIN_SAV,0,17,"Maximum Number of Mail "
        !          1139:                     "CRCs",str,5,K_EDIT|K_NUMBER);
        !          1140:                 mail_maxcrcs=atol(str);
        !          1141:                 break;
        !          1142:                        case 8:
        !          1143:                                strcpy(opt[0],"Yes");
        !          1144:                                strcpy(opt[1],"No");
        !          1145:                                opt[2][0]=0;
        !          1146:                                i=1;
        !          1147:                                SETHELP(WHERE);
        !          1148: /*
        !          1149: &Allow Anonymous E-mail:&
        !          1150: 
        !          1151: If you want users with the &A& exemption to be able to send E-mail
        !          1152: anonymously, set this option to &Yes&.
        !          1153: */
        !          1154: 
        !          1155:                                i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
        !          1156:                                        ,"Allow Anonymous E-mail",opt);
        !          1157:                                if(!i && !(sys_misc&SM_ANON_EM)) {
        !          1158:                                        sys_misc|=SM_ANON_EM;
        !          1159:                                        changes=1; }
        !          1160:                                else if(i==1 && sys_misc&SM_ANON_EM) {
        !          1161:                                        sys_misc&=~SM_ANON_EM;
        !          1162:                                        changes=1; }
        !          1163:                                break;
        !          1164:                        case 9:
        !          1165:                                strcpy(opt[0],"Yes");
        !          1166:                                strcpy(opt[1],"No");
        !          1167:                                opt[2][0]=0;
        !          1168:                                i=0;
        !          1169:                                SETHELP(WHERE);
        !          1170: /*
        !          1171: &Allow Quoting in E-mail:&
        !          1172: 
        !          1173: If you want your users to be allowed to use message quoting when
        !          1174: responding in E-mail, set this option to &Yes&.
        !          1175: */
        !          1176: 
        !          1177:                                i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
        !          1178:                                        ,"Allow Quoting in E-mail",opt);
        !          1179:                                if(!i && !(sys_misc&SM_QUOTE_EM)) {
        !          1180:                                        sys_misc|=SM_QUOTE_EM;
        !          1181:                                        changes=1; }
        !          1182:                                else if(i==1 && sys_misc&SM_QUOTE_EM) {
        !          1183:                                        sys_misc&=~SM_QUOTE_EM;
        !          1184:                                        changes=1; }
        !          1185:                                break;
        !          1186:                        case 10:
        !          1187:                                strcpy(opt[0],"Yes");
        !          1188:                                strcpy(opt[1],"No");
        !          1189:                                opt[2][0]=0;
        !          1190:                                i=0;
        !          1191:                                SETHELP(WHERE);
        !          1192: /*
        !          1193: &Allow File Attachment Uploads in E-mail:&
        !          1194: 
        !          1195: If you want your users to be allowed to attach an uploaded file to
        !          1196: an E-mail message, set this option to &Yes&.
        !          1197: */
        !          1198: 
        !          1199:                                i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
        !          1200:                                        ,"Allow File Attachment Uploads in E-mail",opt);
        !          1201:                                if(!i && !(sys_misc&SM_FILE_EM)) {
        !          1202:                                        sys_misc|=SM_FILE_EM;
        !          1203:                                        changes=1; }
        !          1204:                                else if(i==1 && sys_misc&SM_FILE_EM) {
        !          1205:                                        sys_misc&=~SM_FILE_EM;
        !          1206:                                        changes=1; }
        !          1207:                                break;
        !          1208:                        case 11:
        !          1209:                                strcpy(opt[0],"Yes");
        !          1210:                                strcpy(opt[1],"No");
        !          1211:                                opt[2][0]=0;
        !          1212:                                i=0;
        !          1213:                                SETHELP(WHERE);
        !          1214: /*
        !          1215: &Allow Users to Have Their E-mail Forwarded to NetMail:&
        !          1216: 
        !          1217: If you want your users to be able to have any e-mail sent to them
        !          1218: optionally (at the sender's discretion) forwarded to a NetMail address,
        !          1219: set this option to &Yes&.
        !          1220: */
        !          1221: 
        !          1222:                                i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
        !          1223:                                        ,"Allow Forwarding of E-mail to NetMail",opt);
        !          1224:                                if(!i && !(sys_misc&SM_FWDTONET)) {
        !          1225:                                        sys_misc|=SM_FWDTONET;
        !          1226:                                        changes=1; }
        !          1227:                                else if(i==1 && sys_misc&SM_FWDTONET) {
        !          1228:                                        sys_misc&=~SM_FWDTONET;
        !          1229:                                        changes=1; }
        !          1230:                 break;
        !          1231:                        case 12:
        !          1232:                                strcpy(opt[0],"Yes");
        !          1233:                                strcpy(opt[1],"No");
        !          1234:                                opt[2][0]=0;
        !          1235:                                i=1;
        !          1236:                                SETHELP(WHERE);
        !          1237: /*
        !          1238: &Kill Read E-mail Automatically:&
        !          1239: 
        !          1240: If this option is set to &Yes&, e-mail that has been read will be
        !          1241: automatically deleted when message base maintenance is run.
        !          1242: */
        !          1243: 
        !          1244:                                i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
        !          1245:                                        ,"Kill Read E-mail Automatically",opt);
        !          1246:                                if(!i && !(sys_misc&SM_DELREADM)) {
        !          1247:                                        sys_misc|=SM_DELREADM;
        !          1248:                                        changes=1; }
        !          1249:                                else if(i==1 && sys_misc&SM_DELREADM) {
        !          1250:                                        sys_misc&=~SM_DELREADM;
        !          1251:                                        changes=1; }
        !          1252:                 break;
        !          1253:                        case 13:
        !          1254:                                strcpy(opt[0],"Yes");
        !          1255:                                strcpy(opt[1],"No");
        !          1256:                                strcpy(opt[2],"Sysops Only");
        !          1257:                                opt[3][0]=0;
        !          1258:                                i=1;
        !          1259:                                SETHELP(WHERE);
        !          1260: /*
        !          1261: &Users Can View Deleted Messages:&
        !          1262: 
        !          1263: If this option is set to &Yes&, then users will be able to view messages
        !          1264: they've sent and deleted or messages sent to them and they've deleted
        !          1265: with the option of un-deleting the message before the message is
        !          1266: physically purged from the e-mail database.
        !          1267: 
        !          1268: If this option is set to &No&, then when a message is deleted, it is no
        !          1269: longer viewable (with SBBS) by anyone.
        !          1270: 
        !          1271: If this option is set to &Sysops Only&, then only sysops and sub-ops (when
        !          1272: appropriate) can view deleted messages.
        !          1273: */
        !          1274: 
        !          1275:                                i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
        !          1276:                                        ,"Users Can View Deleted Messages",opt);
        !          1277:                                if(!i && (sys_misc&(SM_USRVDELM|SM_SYSVDELM))
        !          1278:                                        !=(SM_USRVDELM|SM_SYSVDELM)) {
        !          1279:                                        sys_misc|=(SM_USRVDELM|SM_SYSVDELM);
        !          1280:                                        changes=1; }
        !          1281:                                else if(i==1 && sys_misc&(SM_USRVDELM|SM_SYSVDELM)) {
        !          1282:                                        sys_misc&=~(SM_USRVDELM|SM_SYSVDELM);
        !          1283:                                        changes=1; }
        !          1284:                                else if(i==2 && (sys_misc&(SM_USRVDELM|SM_SYSVDELM))
        !          1285:                                        !=SM_SYSVDELM) {
        !          1286:                                        sys_misc|=SM_SYSVDELM;
        !          1287:                                        sys_misc&=~SM_USRVDELM;
        !          1288:                                        changes=1; }
        !          1289:                 break;
        !          1290:                        case 14:
        !          1291:                                SETHELP(WHERE);
        !          1292: /*
        !          1293: &Extra Attribute Codes...&
        !          1294: 
        !          1295: Synchronet can suppport the native text attribute codes of other BBS
        !          1296: programs in messages (menus, posts, e-mail, etc.) To enable the extra
        !          1297: attribute codes for another BBS program, set the corresponding option
        !          1298: to &Yes&.
        !          1299: */
        !          1300: 
        !          1301:                                j=0;
        !          1302:                                while(1) {
        !          1303:                                        i=0;
        !          1304:                                        sprintf(opt[i++],"%-15.15s %-3.3s","WWIV"
        !          1305:                                                ,sys_misc&SM_WWIV ? "Yes":"No");
        !          1306:                                        sprintf(opt[i++],"%-15.15s %-3.3s","PCBoard"
        !          1307:                                                ,sys_misc&SM_PCBOARD ? "Yes":"No");
        !          1308:                                        sprintf(opt[i++],"%-15.15s %-3.3s","Wildcat"
        !          1309:                                                ,sys_misc&SM_WILDCAT ? "Yes":"No");
        !          1310:                                        sprintf(opt[i++],"%-15.15s %-3.3s","Celerity"
        !          1311:                                                ,sys_misc&SM_CELERITY ? "Yes":"No");
        !          1312:                                        sprintf(opt[i++],"%-15.15s %-3.3s","Renegade"
        !          1313:                                                ,sys_misc&SM_RENEGADE ? "Yes":"No");
        !          1314:                                        opt[i][0]=0;
        !          1315:                                        j=ulist(WIN_BOT|WIN_RHT|WIN_SAV,2,2,0,&j,0
        !          1316:                                                ,"Extra Attribute Codes",opt);
        !          1317:                                        if(j==-1)
        !          1318:                                                break;
        !          1319: 
        !          1320:                                        changes=1;
        !          1321:                                        switch(j) {
        !          1322:                                                case 0:
        !          1323:                                                        sys_misc^=SM_WWIV;
        !          1324:                                                        break;
        !          1325:                                                case 1:
        !          1326:                                                        sys_misc^=SM_PCBOARD;
        !          1327:                                                        break;
        !          1328:                                                case 2:
        !          1329:                                                        sys_misc^=SM_WILDCAT;
        !          1330:                                                        break;
        !          1331:                                                case 3:
        !          1332:                                                        sys_misc^=SM_CELERITY;
        !          1333:                                                        break;
        !          1334:                                                case 4:
        !          1335:                                                        sys_misc^=SM_RENEGADE;
        !          1336:                                                        break; } } } }
        !          1337: }

unix.superglobalmegacorp.com

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