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

1.1     ! root        1: /* scfgxfr1.c */
        !             2: 
        !             3: /* $Id: scfgxfr1.c,v 1.13 2004/04/21 22:39:41 rswindell Exp $ */
        !             4: 
        !             5: /****************************************************************************
        !             6:  * @format.tab-size 4          (Plain Text/Source Code File Header)                    *
        !             7:  * @format.use-tabs true       (see http://www.synchro.net/ptsc_hdr.html)              *
        !             8:  *                                                                                                                                                     *
        !             9:  * Copyright 2003 Rob Swindell - http://www.synchro.net/copyright.html         *
        !            10:  *                                                                                                                                                     *
        !            11:  * This program is free software; you can redistribute it and/or                       *
        !            12:  * modify it under the terms of the GNU General Public License                         *
        !            13:  * as published by the Free Software Foundation; either version 2                      *
        !            14:  * of the License, or (at your option) any later version.                                      *
        !            15:  * See the GNU General Public License for more details: gpl.txt or                     *
        !            16:  * http://www.fsf.org/copyleft/gpl.html                                                                                *
        !            17:  *                                                                                                                                                     *
        !            18:  * Anonymous FTP access to the most recent released source is available at     *
        !            19:  * ftp://vert.synchro.net, ftp://cvs.synchro.net and ftp://ftp.synchro.net     *
        !            20:  *                                                                                                                                                     *
        !            21:  * Anonymous CVS access to the development source and modification history     *
        !            22:  * is available at cvs.synchro.net:/cvsroot/sbbs, example:                                     *
        !            23:  * cvs -d :pserver:[email protected]:/cvsroot/sbbs login                       *
        !            24:  *     (just hit return, no password is necessary)                                                     *
        !            25:  * cvs -d :pserver:[email protected]:/cvsroot/sbbs checkout src                *
        !            26:  *                                                                                                                                                     *
        !            27:  * For Synchronet coding style and modification guidelines, see                                *
        !            28:  * http://www.synchro.net/source.html                                                                          *
        !            29:  *                                                                                                                                                     *
        !            30:  * You are encouraged to submit any modifications (preferably in Unix diff     *
        !            31:  * format) via e-mail to [email protected]                                                                      *
        !            32:  *                                                                                                                                                     *
        !            33:  * Note: If this box doesn't appear square, then you need to fix your tabs.    *
        !            34:  ****************************************************************************/
        !            35: 
        !            36: #include "scfg.h"
        !            37: 
        !            38: void xfer_opts()
        !            39: {
        !            40:        char    str[128],done;
        !            41:        int             i,j,l;
        !            42:        static int xfr_dflt;
        !            43:        static int fextr_dflt;
        !            44:        static int fextr_opt;
        !            45:        static int fview_dflt;
        !            46:        static int fview_opt;
        !            47:        static int ftest_dflt;
        !            48:        static int ftest_opt;
        !            49:        static int fcomp_dflt;
        !            50:        static int fcomp_opt;
        !            51:        static int prot_dflt;
        !            52:        static int prot_opt;
        !            53:        static int dlevent_dflt;
        !            54:        static int dlevent_opt;
        !            55:        static int altpath_dflt;
        !            56:        static fextr_t savfextr;
        !            57:        static fview_t savfview;
        !            58:        static ftest_t savftest;
        !            59:        static fcomp_t savfcomp;
        !            60:        static prot_t savprot;
        !            61:        static dlevent_t savdlevent;
        !            62:        static char savaltpath[LEN_DIR+1];
        !            63: 
        !            64: while(1) {
        !            65:        i=0;
        !            66:        sprintf(opt[i++],"%-33.33s%uk","Min Bytes Free Disk Space"
        !            67:                ,cfg.min_dspace);
        !            68:        sprintf(opt[i++],"%-33.33s%u","Max Files in Batch UL Queue"
        !            69:                ,cfg.max_batup);
        !            70:        sprintf(opt[i++],"%-33.33s%u","Max Files in Batch DL Queue"
        !            71:                ,cfg.max_batdn);
        !            72:        sprintf(opt[i++],"%-33.33s%u","Max Users in User Transfers"
        !            73:                ,cfg.max_userxfer);
        !            74:        sprintf(opt[i++],"%-33.33s%u%%","Default Credit on Upload"
        !            75:                ,cfg.cdt_up_pct);
        !            76:        sprintf(opt[i++],"%-33.33s%u%%","Default Credit on Download"
        !            77:                ,cfg.cdt_dn_pct);
        !            78:        if(cfg.leech_pct)
        !            79:                sprintf(str,"%u%% after %u seconds"
        !            80:                        ,cfg.leech_pct,cfg.leech_sec);
        !            81:        else
        !            82:                strcpy(str,"Disabled");
        !            83:     sprintf(opt[i++],"%-33.33s%s","Long Filenames in Listings"
        !            84:         ,cfg.file_misc&FM_NO_LFN ? "No":"Yes");
        !            85:        sprintf(opt[i++],"%-33.33s%s","Leech Protocol Detection",str);
        !            86:        strcpy(opt[i++],"Viewable Files...");
        !            87:        strcpy(opt[i++],"Testable Files...");
        !            88:        strcpy(opt[i++],"Download Events...");
        !            89:        strcpy(opt[i++],"Extractable Files...");
        !            90:        strcpy(opt[i++],"Compressable Files...");
        !            91:        strcpy(opt[i++],"Transfer Protocols...");
        !            92:        strcpy(opt[i++],"Alternate File Paths...");
        !            93:        opt[i][0]=0;
        !            94:        SETHELP(WHERE);
        !            95: /*
        !            96: &File Transfer Configuration:&
        !            97: 
        !            98: This menu has options and sub-menus that pertain specifically to the
        !            99: file transfer section of the BBS.
        !           100: */
        !           101:        switch(uifc.list(WIN_ORG|WIN_ACT|WIN_CHE,0,0,72,&xfr_dflt,0
        !           102:                ,"File Transfer Configuration",opt)) {
        !           103:                case -1:
        !           104:                        i=save_changes(WIN_MID);
        !           105:                        if(i==-1)
        !           106:                                break;
        !           107:                        if(!i) {
        !           108:                                write_file_cfg(&cfg,backup_level);
        !           109:                 refresh_cfg(&cfg);
        !           110:             }
        !           111:             return;
        !           112:                case 0:
        !           113:                        SETHELP(WHERE);
        !           114: /*
        !           115: &Minimum Kilobytes Free Disk Space to Allow Uploads:&
        !           116: 
        !           117: This is the minimum free space in a file directory to allow user
        !           118: uploads.
        !           119: */
        !           120:                        uifc.input(WIN_MID,0,0
        !           121:                                ,"Minimum Kilobytes Free Disk Space to Allow Uploads"
        !           122:                                ,ultoa(cfg.min_dspace,tmp,10),5,K_EDIT|K_NUMBER);
        !           123:                        cfg.min_dspace=atoi(tmp);
        !           124:                        break;
        !           125:                case 1:
        !           126:                        SETHELP(WHERE);
        !           127: /*
        !           128: &Maximum Files in Batch Upload Queue:&
        !           129: 
        !           130: This is the maximum number of files that can be placed in the batch
        !           131: upload queue.
        !           132: */
        !           133:                        uifc.input(WIN_MID,0,0,"Maximum Files in Batch Upload Queue"
        !           134:                                ,ultoa(cfg.max_batup,tmp,10),5,K_EDIT|K_NUMBER);
        !           135:                        cfg.max_batup=atoi(tmp);
        !           136:             break;
        !           137:                case 2:
        !           138:                        SETHELP(WHERE);
        !           139: /*
        !           140: &Maximum Files in Batch Download Queue:&
        !           141: 
        !           142: This is the maximum number of files that can be placed in the batch
        !           143: download queue.
        !           144: */
        !           145:                        uifc.input(WIN_MID,0,0,"Maximum Files in Batch Download Queue"
        !           146:                                ,ultoa(cfg.max_batdn,tmp,10),5,K_EDIT|K_NUMBER);
        !           147:                        cfg.max_batdn=atoi(tmp);
        !           148:             break;
        !           149:                case 3:
        !           150:                        SETHELP(WHERE);
        !           151: /*
        !           152: &Maximum Destination Users in User to User Transfer:&
        !           153: 
        !           154: This is the maximum number of users allowed in the destination user list
        !           155: of a user to user upload.
        !           156: */
        !           157:                        uifc.input(WIN_MID,0,0
        !           158:                                ,"Maximum Destination Users in User to User Transfers"
        !           159:                                ,ultoa(cfg.max_userxfer,tmp,10),5,K_EDIT|K_NUMBER);
        !           160:                        cfg.max_userxfer=atoi(tmp);
        !           161:                        break;
        !           162:                case 4:
        !           163: SETHELP(WHERE);
        !           164: /*
        !           165: &Default Percentage of Credits to Credit Uploader on Upload:&
        !           166: 
        !           167: This is the default setting that will be used when new file
        !           168: directories are created.
        !           169: */
        !           170:                        uifc.input(WIN_MID,0,0
        !           171:                                ,"Default Percentage of Credits to Credit Uploader on Upload"
        !           172:                                ,ultoa(cfg.cdt_up_pct,tmp,10),4,K_EDIT|K_NUMBER);
        !           173:                        cfg.cdt_up_pct=atoi(tmp);
        !           174:                        break;
        !           175:                case 5:
        !           176: SETHELP(WHERE);
        !           177: /*
        !           178: &Default Percentage of Credits to Credit Uploader on Download:&
        !           179: 
        !           180: This is the default setting that will be used when new file
        !           181: directories are created.
        !           182: */
        !           183:                        uifc.input(WIN_MID,0,0
        !           184:                                ,"Default Percentage of Credits to Credit Uploader on Download"
        !           185:                                ,ultoa(cfg.cdt_dn_pct,tmp,10),4,K_EDIT|K_NUMBER);
        !           186:                        cfg.cdt_dn_pct=atoi(tmp);
        !           187:                        break;
        !           188:         case 6:
        !           189:             strcpy(opt[0],"Yes");
        !           190:             strcpy(opt[1],"No");
        !           191:             opt[2][0]=0;
        !           192:             i=0;
        !           193:             SETHELP(WHERE);
        !           194: /*
        !           195: &Long Filenames in File Listings:&
        !           196: 
        !           197: If you want long filenames to be displayed in the BBS file listings, set
        !           198: this option to &Yes&. Note: This feature requires Windows 98, Windows 2000
        !           199: or later.
        !           200: */
        !           201:             i=uifc.list(WIN_MID|WIN_SAV,0,0,0,&i,0
        !           202:                 ,"Long Filenames in Listings (Win98/Win2K)",opt);
        !           203:             if(!i && cfg.file_misc&FM_NO_LFN) {
        !           204:                 cfg.file_misc&=~FM_NO_LFN;
        !           205:                 uifc.changes=1;
        !           206:             } else if(i==1 && !(cfg.file_misc&FM_NO_LFN)) {
        !           207:                 cfg.file_misc|=FM_NO_LFN;
        !           208:                 uifc.changes=1;
        !           209:             }
        !           210:             break;
        !           211: 
        !           212:                case 7:
        !           213:                        SETHELP(WHERE);
        !           214: /*
        !           215: &Leech Protocol Detection Percentage:&
        !           216: 
        !           217: This value is the sensitivity of the leech protocol detection feature of
        !           218: Synchronet. If the transfer is apparently unsuccessful, but the transfer
        !           219: time was at least this percentage of the estimated transfer time (based
        !           220: on the estimated CPS of the connection result code), then a leech
        !           221: protocol error is issued and the user's leech download counter is
        !           222: incremented. Setting this value to &0& disables leech protocol detection.
        !           223: */
        !           224:                        uifc.savnum=0;
        !           225:                        uifc.input(WIN_MID|WIN_SAV,0,0
        !           226:                                ,"Leech Protocol Detection Percentage (0=Disabled)"
        !           227:                                ,ultoa(cfg.leech_pct,tmp,10),3,K_EDIT|K_NUMBER);
        !           228:                        cfg.leech_pct=atoi(tmp);
        !           229:                        if(!cfg.leech_pct)
        !           230:                                break;
        !           231:                        SETHELP(WHERE);
        !           232: /*
        !           233: &Leech Protocol Minimum Time (in Seconds):&
        !           234: 
        !           235: This option allows you to adjust the sensitivity of the leech protocol
        !           236: detection feature. This value is the minimum length of transfer time
        !           237: (in seconds) that must elapse before an aborted tranfser will be
        !           238: considered a possible leech attempt.
        !           239: */
        !           240:                        uifc.input(WIN_MID,0,0
        !           241:                                ,"Leech Protocol Minimum Time (in Seconds)"
        !           242:                                ,ultoa(cfg.leech_sec,tmp,10),3,K_EDIT|K_NUMBER);
        !           243:                        cfg.leech_sec=atoi(tmp);
        !           244:                        break;
        !           245:                case 8:         /* Viewable file types */
        !           246:                        while(1) {
        !           247:                                for(i=0;i<cfg.total_fviews && i<MAX_OPTS;i++)
        !           248:                                        sprintf(opt[i],"%-3.3s  %-40s",cfg.fview[i]->ext,cfg.fview[i]->cmd);
        !           249:                                opt[i][0]=0;
        !           250:                                i=WIN_ACT|WIN_SAV;      /* save cause size can change */
        !           251:                                if(cfg.total_fviews<MAX_OPTS)
        !           252:                                        i|=WIN_INS|WIN_XTR;
        !           253:                                if(cfg.total_fviews)
        !           254:                                        i|=WIN_DEL|WIN_GET;
        !           255:                                if(savfview.cmd[0])
        !           256:                                        i|=WIN_PUT;
        !           257:                                uifc.savnum=0;
        !           258:                                SETHELP(WHERE);
        !           259: /*
        !           260: &Viewable File Types:&
        !           261: 
        !           262: This is a list of file types that have content information that can be
        !           263: viewed through the execution of an external program. Here are a couple of
        !           264: command line examples for a few file types.
        !           265: */
        !           266:                                i=uifc.list(i,0,0,50,&fview_dflt,NULL,"Viewable File Types",opt);
        !           267:                                if(i==-1)
        !           268:                                        break;
        !           269:                                if((i&MSK_ON)==MSK_DEL) {
        !           270:                                        i&=MSK_OFF;
        !           271:                                        FREE(cfg.fview[i]);
        !           272:                                        cfg.total_fviews--;
        !           273:                                        while(i<cfg.total_fviews) {
        !           274:                                                cfg.fview[i]=cfg.fview[i+1];
        !           275:                                                i++; }
        !           276:                                        uifc.changes=1;
        !           277:                                        continue; }
        !           278:                                if((i&MSK_ON)==MSK_INS) {
        !           279:                                        i&=MSK_OFF;
        !           280:                                        if((cfg.fview=(fview_t **)REALLOC(cfg.fview
        !           281:                                                ,sizeof(fview_t *)*(cfg.total_fviews+1)))==NULL) {
        !           282:                                                errormsg(WHERE,ERR_ALLOC,nulstr,cfg.total_fviews+1);
        !           283:                                                cfg.total_fviews=0;
        !           284:                                                bail(1);
        !           285:                                                continue; }
        !           286:                                        if(!cfg.total_fviews) {
        !           287:                                                if((cfg.fview[0]=(fview_t *)MALLOC(
        !           288:                                                        sizeof(fview_t)))==NULL) {
        !           289:                                                        errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(fview_t));
        !           290:                                                        continue; }
        !           291:                                                memset(cfg.fview[0],0,sizeof(fview_t));
        !           292:                                                strcpy(cfg.fview[0]->ext,"ZIP");
        !           293:                                                strcpy(cfg.fview[0]->cmd,"%!pkunzip -v %f"); }
        !           294:                                        else {
        !           295:                                                for(j=cfg.total_fviews;j>i;j--)
        !           296:                                                        cfg.fview[j]=cfg.fview[j-1];
        !           297:                                                if((cfg.fview[i]=(fview_t *)MALLOC(
        !           298:                                                        sizeof(fview_t)))==NULL) {
        !           299:                                                        errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(fview_t));
        !           300:                                                        continue; }
        !           301:                                                if(i>=cfg.total_fviews)
        !           302:                                                        j=i-1;
        !           303:                                                else
        !           304:                                                        j=i+1;
        !           305:                                                *cfg.fview[i]=*cfg.fview[j]; }
        !           306:                                        cfg.total_fviews++;
        !           307:                                        uifc.changes=1;
        !           308:                                        continue; }
        !           309:                                if((i&MSK_ON)==MSK_GET) {
        !           310:                                        i&=MSK_OFF;
        !           311:                                        savfview=*cfg.fview[i];
        !           312:                                        continue; }
        !           313:                                if((i&MSK_ON)==MSK_PUT) {
        !           314:                                        i&=MSK_OFF;
        !           315:                                        *cfg.fview[i]=savfview;
        !           316:                                        uifc.changes=1;
        !           317:                                        continue; }
        !           318:                                done=0;
        !           319:                                while(!done) {
        !           320:                                        j=0;
        !           321:                                        sprintf(opt[j++],"%-22.22s%s","File Extension"
        !           322:                                                ,cfg.fview[i]->ext);
        !           323:                                        sprintf(opt[j++],"%-22.22s%-40s","Command Line"
        !           324:                                                ,cfg.fview[i]->cmd);
        !           325:                                        sprintf(opt[j++],"%-22.22s%s","Access Requirements"
        !           326:                                                ,cfg.fview[i]->arstr);
        !           327:                                        opt[j][0]=0;
        !           328:                                        uifc.savnum=1;
        !           329:                                        switch(uifc.list(WIN_RHT|WIN_BOT|WIN_SAV|WIN_ACT,0,0,0,&fview_opt,0
        !           330:                                                ,"Viewable File Type",opt)) {
        !           331:                                                case -1:
        !           332:                                                        done=1;
        !           333:                                                        break;
        !           334:                                                case 0:
        !           335:                                                        uifc.input(WIN_MID|WIN_SAV,0,0
        !           336:                                                                ,"Viewable File Type Extension"
        !           337:                                                                ,cfg.fview[i]->ext,sizeof(cfg.fview[i]->ext)-1,K_EDIT);
        !           338:                                                        break;
        !           339:                                                case 1:
        !           340:                                                        uifc.input(WIN_MID|WIN_SAV,0,0
        !           341:                                                                ,"Command"
        !           342:                                                                ,cfg.fview[i]->cmd,sizeof(cfg.fview[i]->cmd)-1,K_EDIT);
        !           343:                                                        break;
        !           344:                                                case 2:
        !           345:                                                        uifc.savnum=2;
        !           346:                                                        sprintf(str,"Viewable File Type %s"
        !           347:                                                                ,cfg.fview[i]->ext);
        !           348:                                                        getar(str,cfg.fview[i]->arstr);
        !           349:                             break; } } }
        !           350:             break;
        !           351:                case 9:    /* Testable file types */
        !           352:                        while(1) {
        !           353:                                for(i=0;i<cfg.total_ftests && i<MAX_OPTS;i++)
        !           354:                                        sprintf(opt[i],"%-3.3s  %-40s",cfg.ftest[i]->ext,cfg.ftest[i]->cmd);
        !           355:                                opt[i][0]=0;
        !           356:                                i=WIN_ACT|WIN_SAV;      /* save cause size can change */
        !           357:                                if(cfg.total_ftests<MAX_OPTS)
        !           358:                                        i|=WIN_INS|WIN_XTR;
        !           359:                                if(cfg.total_ftests)
        !           360:                                        i|=WIN_DEL|WIN_GET;
        !           361:                                if(savftest.cmd[0])
        !           362:                                        i|=WIN_PUT;
        !           363:                                uifc.savnum=0;
        !           364:                                SETHELP(WHERE);
        !           365: /*
        !           366: &Testable File Types:&
        !           367: 
        !           368: This is a list of file types that will have a command line executed to
        !           369: test the file integrity upon their upload. The file types are specified
        !           370: by &extension& and if one file extension is listed more than once, each
        !           371: command line will be executed. The command lines must return a DOS error
        !           372: code of 0 (no error) in order for the file to pass the test. This method
        !           373: of file testing upon upload is also known as an upload event. This test
        !           374: or event, can do more than just test the file, it can perform any
        !           375: function that the sysop wishes. Such as adding comments to an archived
        !           376: file, or extracting an archive and performing a virus scan. While the
        !           377: external program is executing, a text string is displayed to the user.
        !           378: This &working string& can be set for each file type and command line
        !           379: listed.
        !           380: */
        !           381:                                i=uifc.list(i,0,0,50,&ftest_dflt,NULL,"Testable File Types",opt);
        !           382:                                if(i==-1)
        !           383:                                        break;
        !           384:                                if((i&MSK_ON)==MSK_DEL) {
        !           385:                                        i&=MSK_OFF;
        !           386:                                        FREE(cfg.ftest[i]);
        !           387:                                        cfg.total_ftests--;
        !           388:                                        while(i<cfg.total_ftests) {
        !           389:                                                cfg.ftest[i]=cfg.ftest[i+1];
        !           390:                                                i++; }
        !           391:                                        uifc.changes=1;
        !           392:                                        continue; }
        !           393:                                if((i&MSK_ON)==MSK_INS) {
        !           394:                                        i&=MSK_OFF;
        !           395:                                        if((cfg.ftest=(ftest_t **)REALLOC(cfg.ftest
        !           396:                                                ,sizeof(ftest_t *)*(cfg.total_ftests+1)))==NULL) {
        !           397:                                                errormsg(WHERE,ERR_ALLOC,nulstr,cfg.total_ftests+1);
        !           398:                                                cfg.total_ftests=0;
        !           399:                                                bail(1);
        !           400:                                                continue; }
        !           401:                                        if(!cfg.total_ftests) {
        !           402:                                                if((cfg.ftest[0]=(ftest_t *)MALLOC(
        !           403:                                                        sizeof(ftest_t)))==NULL) {
        !           404:                                                        errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(ftest_t));
        !           405:                                                        continue; }
        !           406:                                                memset(cfg.ftest[0],0,sizeof(ftest_t));
        !           407:                                                strcpy(cfg.ftest[0]->ext,"ZIP");
        !           408:                                                strcpy(cfg.ftest[0]->cmd,"%!pkunzip -t %f");
        !           409:                                                strcpy(cfg.ftest[0]->workstr,"Testing ZIP Integrity..."); }
        !           410:                                        else {
        !           411: 
        !           412:                                                for(j=cfg.total_ftests;j>i;j--)
        !           413:                                                        cfg.ftest[j]=cfg.ftest[j-1];
        !           414:                                                if((cfg.ftest[i]=(ftest_t *)MALLOC(
        !           415:                                                        sizeof(ftest_t)))==NULL) {
        !           416:                                                        errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(ftest_t));
        !           417:                                                        continue; }
        !           418:                                                if(i>=cfg.total_ftests)
        !           419:                                                        j=i-1;
        !           420:                                                else
        !           421:                                                        j=i+1;
        !           422:                                                *cfg.ftest[i]=*cfg.ftest[j]; }
        !           423:                                        cfg.total_ftests++;
        !           424:                                        uifc.changes=1;
        !           425:                                        continue; }
        !           426:                                if((i&MSK_ON)==MSK_GET) {
        !           427:                                        i&=MSK_OFF;
        !           428:                                        savftest=*cfg.ftest[i];
        !           429:                                        continue; }
        !           430:                                if((i&MSK_ON)==MSK_PUT) {
        !           431:                                        i&=MSK_OFF;
        !           432:                                        *cfg.ftest[i]=savftest;
        !           433:                                        uifc.changes=1;
        !           434:                                        continue; }
        !           435:                                done=0;
        !           436:                                while(!done) {
        !           437:                                        j=0;
        !           438:                                        sprintf(opt[j++],"%-22.22s%s","File Extension"
        !           439:                                                ,cfg.ftest[i]->ext);
        !           440:                                        sprintf(opt[j++],"%-22.22s%-40s","Command Line"
        !           441:                                                ,cfg.ftest[i]->cmd);
        !           442:                                        sprintf(opt[j++],"%-22.22s%s","Working String"
        !           443:                                                ,cfg.ftest[i]->workstr);
        !           444:                                        sprintf(opt[j++],"%-22.22s%s","Access Requirements"
        !           445:                                                ,cfg.ftest[i]->arstr);
        !           446:                                        opt[j][0]=0;
        !           447:                                        uifc.savnum=1;
        !           448:                                        switch(uifc.list(WIN_RHT|WIN_BOT|WIN_SAV|WIN_ACT,0,0,0,&ftest_opt,0
        !           449:                                                ,"Testable File Type",opt)) {
        !           450:                                                case -1:
        !           451:                                                        done=1;
        !           452:                                                        break;
        !           453:                                                case 0:
        !           454:                                                        uifc.input(WIN_MID|WIN_SAV,0,0
        !           455:                                                                ,"Testable File Type Extension"
        !           456:                                                                ,cfg.ftest[i]->ext,sizeof(cfg.ftest[i]->ext)-1,K_EDIT);
        !           457:                                                        break;
        !           458:                                                case 1:
        !           459:                                                        uifc.input(WIN_MID|WIN_SAV,0,0
        !           460:                                                                ,"Command"
        !           461:                                                                ,cfg.ftest[i]->cmd,sizeof(cfg.ftest[i]->cmd)-1,K_EDIT);
        !           462:                                                        break;
        !           463:                                                case 2:
        !           464:                                                        uifc.input(WIN_MID|WIN_SAV,0,0
        !           465:                                                                ,"Working String"
        !           466:                                                                ,cfg.ftest[i]->workstr,sizeof(cfg.ftest[i]->workstr)-1,K_EDIT|K_MSG);
        !           467:                                                        break;
        !           468:                                                case 3:
        !           469:                                                        uifc.savnum=2;
        !           470:                                                        sprintf(str,"Testable File Type %s",cfg.ftest[i]->ext);
        !           471:                                                        getar(str,cfg.ftest[i]->arstr);
        !           472:                                                        break; } } }
        !           473:                        break;
        !           474:                case 10:    /* Download Events */
        !           475:                        while(1) {
        !           476:                                for(i=0;i<cfg.total_dlevents && i<MAX_OPTS;i++)
        !           477:                                        sprintf(opt[i],"%-3.3s  %-40s",cfg.dlevent[i]->ext,cfg.dlevent[i]->cmd);
        !           478:                                opt[i][0]=0;
        !           479:                                i=WIN_ACT|WIN_SAV;      /* save cause size can change */
        !           480:                                if(cfg.total_dlevents<MAX_OPTS)
        !           481:                                        i|=WIN_INS|WIN_XTR;
        !           482:                                if(cfg.total_dlevents)
        !           483:                                        i|=WIN_DEL|WIN_GET;
        !           484:                                if(savdlevent.cmd[0])
        !           485:                                        i|=WIN_PUT;
        !           486:                                uifc.savnum=0;
        !           487:                                SETHELP(WHERE);
        !           488: /*
        !           489: &Download Events:&
        !           490: 
        !           491: This is a list of file types that will have a command line executed to
        !           492: perform an event upon their download (e.g. trigger a download event).
        !           493: The file types are specified by &extension& and if one file extension
        !           494: is listed more than once, each command line will be executed. The
        !           495: command lines must return a DOS error code of 0 (no error) in order
        !           496: for the file to pass the test. This test or event, can do more than
        !           497: just test the file, it can perform any function that the sysop wishes.
        !           498: Such as adding comments to an archived file, or extracting an archive
        !           499: and performing a virus scan. While the external program is executing,
        !           500: a text string is displayed to the user. This &working string& can be set
        !           501: for each file type and command line listed.
        !           502: */
        !           503:                                i=uifc.list(i,0,0,50,&dlevent_dflt,NULL,"Download Events",opt);
        !           504:                                if(i==-1)
        !           505:                                        break;
        !           506:                                if((i&MSK_ON)==MSK_DEL) {
        !           507:                                        i&=MSK_OFF;
        !           508:                                        FREE(cfg.dlevent[i]);
        !           509:                                        cfg.total_dlevents--;
        !           510:                                        while(i<cfg.total_dlevents) {
        !           511:                                                cfg.dlevent[i]=cfg.dlevent[i+1];
        !           512:                                                i++; }
        !           513:                                        uifc.changes=1;
        !           514:                                        continue; }
        !           515:                                if((i&MSK_ON)==MSK_INS) {
        !           516:                                        i&=MSK_OFF;
        !           517:                                        if((cfg.dlevent=(dlevent_t **)REALLOC(cfg.dlevent
        !           518:                                                ,sizeof(dlevent_t *)*(cfg.total_dlevents+1)))==NULL) {
        !           519:                                                errormsg(WHERE,ERR_ALLOC,nulstr,cfg.total_dlevents+1);
        !           520:                                                cfg.total_dlevents=0;
        !           521:                                                bail(1);
        !           522:                                                continue; }
        !           523:                                        if(!cfg.total_dlevents) {
        !           524:                                                if((cfg.dlevent[0]=(dlevent_t *)MALLOC(
        !           525:                                                        sizeof(dlevent_t)))==NULL) {
        !           526:                                                        errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(dlevent_t));
        !           527:                                                        continue; }
        !           528:                                                memset(cfg.dlevent[0],0,sizeof(dlevent_t));
        !           529:                                                strcpy(cfg.dlevent[0]->ext,"ZIP");
        !           530:                                                strcpy(cfg.dlevent[0]->cmd,"%!pkzip -z %f "
        !           531:                                                        "< ..\\text\\zipmsg.txt");
        !           532:                                                strcpy(cfg.dlevent[0]->workstr,"Adding ZIP Comment..."); }
        !           533:                                        else {
        !           534: 
        !           535:                                                for(j=cfg.total_dlevents;j>i;j--)
        !           536:                                                        cfg.dlevent[j]=cfg.dlevent[j-1];
        !           537:                                                if((cfg.dlevent[i]=(dlevent_t *)MALLOC(
        !           538:                                                        sizeof(dlevent_t)))==NULL) {
        !           539:                                                        errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(dlevent_t));
        !           540:                                                        continue; }
        !           541:                                                if(i>=cfg.total_dlevents)
        !           542:                                                        j=i-1;
        !           543:                                                else
        !           544:                                                        j=i+1;
        !           545:                                                *cfg.dlevent[i]=*cfg.dlevent[j]; }
        !           546:                                        cfg.total_dlevents++;
        !           547:                                        uifc.changes=1;
        !           548:                                        continue; }
        !           549:                                if((i&MSK_ON)==MSK_GET) {
        !           550:                                        i&=MSK_OFF;
        !           551:                                        savdlevent=*cfg.dlevent[i];
        !           552:                                        continue; }
        !           553:                                if((i&MSK_ON)==MSK_PUT) {
        !           554:                                        i&=MSK_OFF;
        !           555:                                        *cfg.dlevent[i]=savdlevent;
        !           556:                                        uifc.changes=1;
        !           557:                                        continue; }
        !           558:                                done=0;
        !           559:                                while(!done) {
        !           560:                                        j=0;
        !           561:                                        sprintf(opt[j++],"%-22.22s%s","File Extension"
        !           562:                                                ,cfg.dlevent[i]->ext);
        !           563:                                        sprintf(opt[j++],"%-22.22s%-40s","Command Line"
        !           564:                                                ,cfg.dlevent[i]->cmd);
        !           565:                                        sprintf(opt[j++],"%-22.22s%s","Working String"
        !           566:                                                ,cfg.dlevent[i]->workstr);
        !           567:                                        sprintf(opt[j++],"%-22.22s%s","Access Requirements"
        !           568:                                                ,cfg.dlevent[i]->arstr);
        !           569:                                        opt[j][0]=0;
        !           570:                                        uifc.savnum=1;
        !           571:                                        switch(uifc.list(WIN_RHT|WIN_BOT|WIN_SAV|WIN_ACT,0,0,0,&dlevent_opt,0
        !           572:                                                ,"Download Event",opt)) {
        !           573:                                                case -1:
        !           574:                                                        done=1;
        !           575:                                                        break;
        !           576:                                                case 0:
        !           577:                                                        uifc.input(WIN_MID|WIN_SAV,0,0
        !           578:                                                                ,"Download Event Extension"
        !           579:                                                                ,cfg.dlevent[i]->ext,sizeof(cfg.dlevent[i]->ext)-1,K_EDIT);
        !           580:                                                        break;
        !           581:                                                case 1:
        !           582:                                                        uifc.input(WIN_MID|WIN_SAV,0,0
        !           583:                                                                ,"Command"
        !           584:                                                                ,cfg.dlevent[i]->cmd,sizeof(cfg.dlevent[i]->cmd)-1,K_EDIT);
        !           585:                                                        break;
        !           586:                                                case 2:
        !           587:                                                        uifc.input(WIN_MID|WIN_SAV,0,0
        !           588:                                                                ,"Working String"
        !           589:                                                                ,cfg.dlevent[i]->workstr,sizeof(cfg.dlevent[i]->workstr)-1,K_EDIT|K_MSG);
        !           590:                                                        break;
        !           591:                                                case 3:
        !           592:                                                        uifc.savnum=2;
        !           593:                                                        sprintf(str,"Download Event %s",cfg.dlevent[i]->ext);
        !           594:                                                        getar(str,cfg.dlevent[i]->arstr);
        !           595:                                                        break; } } }
        !           596:             break;
        !           597:                case 11:         /* Extractable file types */
        !           598:             while(1) {
        !           599:                                for(i=0;i<cfg.total_fextrs && i<MAX_OPTS;i++)
        !           600:                     sprintf(opt[i],"%-3.3s  %-40s"
        !           601:                         ,cfg.fextr[i]->ext,cfg.fextr[i]->cmd);
        !           602:                                opt[i][0]=0;
        !           603:                 i=WIN_ACT|WIN_SAV;  /* save cause size can change */
        !           604:                                if(cfg.total_fextrs<MAX_OPTS)
        !           605:                     i|=WIN_INS|WIN_XTR;
        !           606:                 if(cfg.total_fextrs)
        !           607:                     i|=WIN_DEL|WIN_GET;
        !           608:                                if(savfextr.cmd[0])
        !           609:                     i|=WIN_PUT;
        !           610:                 uifc.savnum=0;
        !           611:                 SETHELP(WHERE);
        !           612: /*
        !           613: &Extractable File Types:&
        !           614: 
        !           615: This is a list of archive file types that can be extracted to the temp
        !           616: directory by an external program. The file types are specified by their
        !           617: extension. For each file type you must specify the command line used to
        !           618: extract the file(s).
        !           619: */
        !           620:                                i=uifc.list(i,0,0,50,&fextr_dflt,NULL,"Extractable File Types",opt);
        !           621:                 if(i==-1)
        !           622:                     break;
        !           623:                                if((i&MSK_ON)==MSK_DEL) {
        !           624:                                        i&=MSK_OFF;
        !           625:                     FREE(cfg.fextr[i]);
        !           626:                     cfg.total_fextrs--;
        !           627:                     while(i<cfg.total_fextrs) {
        !           628:                         cfg.fextr[i]=cfg.fextr[i+1];
        !           629:                         i++; }
        !           630:                     uifc.changes=1;
        !           631:                     continue; }
        !           632:                                if((i&MSK_ON)==MSK_INS) {
        !           633:                                        i&=MSK_OFF;
        !           634:                                        if((cfg.fextr=(fextr_t **)REALLOC(cfg.fextr
        !           635:                                                ,sizeof(fextr_t *)*(cfg.total_fextrs+1)))==NULL) {
        !           636:                                                errormsg(WHERE,ERR_ALLOC,nulstr,cfg.total_fextrs+1);
        !           637:                                                cfg.total_fextrs=0;
        !           638:                                                bail(1);
        !           639:                                                continue; }
        !           640:                     if(!cfg.total_fextrs) {
        !           641:                         if((cfg.fextr[0]=(fextr_t *)MALLOC(
        !           642:                             sizeof(fextr_t)))==NULL) {
        !           643:                             errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(fextr_t));
        !           644:                             continue; }
        !           645:                                                memset(cfg.fextr[0],0,sizeof(fextr_t));
        !           646:                         strcpy(cfg.fextr[0]->ext,"ZIP");
        !           647:                         strcpy(cfg.fextr[0]->cmd,"%!pkunzip -o %f %g %s"); }
        !           648:                     else {
        !           649: 
        !           650:                         for(j=cfg.total_fextrs;j>i;j--)
        !           651:                             cfg.fextr[j]=cfg.fextr[j-1];
        !           652:                         if((cfg.fextr[i]=(fextr_t *)MALLOC(
        !           653:                             sizeof(fextr_t)))==NULL) {
        !           654:                             errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(fextr_t));
        !           655:                             continue; }
        !           656:                                                if(i>=cfg.total_fextrs)
        !           657:                                                        j=i-1;
        !           658:                                                else
        !           659:                                                        j=i+1;
        !           660:                         *cfg.fextr[i]=*cfg.fextr[j]; }
        !           661:                     cfg.total_fextrs++;
        !           662:                     uifc.changes=1;
        !           663:                     continue; }
        !           664:                                if((i&MSK_ON)==MSK_GET) {
        !           665:                                        i&=MSK_OFF;
        !           666:                     savfextr=*cfg.fextr[i];
        !           667:                     continue; }
        !           668:                                if((i&MSK_ON)==MSK_PUT) {
        !           669:                                        i&=MSK_OFF;
        !           670:                     *cfg.fextr[i]=savfextr;
        !           671:                     uifc.changes=1;
        !           672:                     continue; }
        !           673:                                done=0;
        !           674:                                while(!done) {
        !           675:                                        j=0;
        !           676:                                        sprintf(opt[j++],"%-22.22s%s","File Extension"
        !           677:                                                ,cfg.fextr[i]->ext);
        !           678:                                        sprintf(opt[j++],"%-22.22s%-40s","Command Line"
        !           679:                                                ,cfg.fextr[i]->cmd);
        !           680:                                        sprintf(opt[j++],"%-22.22s%s","Access Requirements"
        !           681:                                                ,cfg.fextr[i]->arstr);
        !           682:                                        opt[j][0]=0;
        !           683:                                        uifc.savnum=1;
        !           684:                                        switch(uifc.list(WIN_RHT|WIN_BOT|WIN_SAV|WIN_ACT,0,0,0,&fextr_opt,0
        !           685:                                                ,"Extractable File Type",opt)) {
        !           686:                                                case -1:
        !           687:                                                        done=1;
        !           688:                                                        break;
        !           689:                                                case 0:
        !           690:                                                        uifc.input(WIN_MID|WIN_SAV,0,0
        !           691:                                                                ,"Extractable File Type Extension"
        !           692:                                                                ,cfg.fextr[i]->ext,sizeof(cfg.fextr[i]->ext)-1,K_EDIT);
        !           693:                                                        break;
        !           694:                                                case 1:
        !           695:                                                        uifc.input(WIN_MID|WIN_SAV,0,0
        !           696:                                                                ,"Command"
        !           697:                                                                ,cfg.fextr[i]->cmd,sizeof(cfg.fextr[i]->cmd)-1,K_EDIT);
        !           698:                                                        break;
        !           699:                                                case 2:
        !           700:                                                        uifc.savnum=2;
        !           701:                                                        sprintf(str,"Extractable File Type %s"
        !           702:                                                                ,cfg.fextr[i]->ext);
        !           703:                                                        getar(str,cfg.fextr[i]->arstr);
        !           704:                             break; } } }
        !           705:             break;
        !           706:                case 12:         /* Compressable file types */
        !           707:                        while(1) {
        !           708:                                for(i=0;i<cfg.total_fcomps && i<MAX_OPTS;i++)
        !           709:                                        sprintf(opt[i],"%-3.3s  %-40s",cfg.fcomp[i]->ext,cfg.fcomp[i]->cmd);
        !           710:                                opt[i][0]=0;
        !           711:                                i=WIN_ACT|WIN_SAV;      /* save cause size can change */
        !           712:                                if(cfg.total_fcomps<MAX_OPTS)
        !           713:                                        i|=WIN_INS|WIN_XTR;
        !           714:                                if(cfg.total_fcomps)
        !           715:                                        i|=WIN_DEL|WIN_GET;
        !           716:                                if(savfcomp.cmd[0])
        !           717:                                        i|=WIN_PUT;
        !           718:                                uifc.savnum=0;
        !           719:                                SETHELP(WHERE);
        !           720: /*
        !           721: &Compressable File Types:&
        !           722: 
        !           723: This is a list of compression methods available for different file types.
        !           724: These will be used for items such as creating QWK packets, temporary
        !           725: files from the transfer section, and more.
        !           726: */
        !           727:                                i=uifc.list(i,0,0,50,&fcomp_dflt,NULL,"Compressable File Types",opt);
        !           728:                                if(i==-1)
        !           729:                                        break;
        !           730:                                if((i&MSK_ON)==MSK_DEL) {
        !           731:                                        i&=MSK_OFF;
        !           732:                                        FREE(cfg.fcomp[i]);
        !           733:                                        cfg.total_fcomps--;
        !           734:                                        while(i<cfg.total_fcomps) {
        !           735:                                                cfg.fcomp[i]=cfg.fcomp[i+1];
        !           736:                                                i++; }
        !           737:                                        uifc.changes=1;
        !           738:                                        continue; }
        !           739:                                if((i&MSK_ON)==MSK_INS) {
        !           740:                                        i&=MSK_OFF;
        !           741:                                        if((cfg.fcomp=(fcomp_t **)REALLOC(cfg.fcomp
        !           742:                                                ,sizeof(fcomp_t *)*(cfg.total_fcomps+1)))==NULL) {
        !           743:                                                errormsg(WHERE,ERR_ALLOC,nulstr,cfg.total_fcomps+1);
        !           744:                                                cfg.total_fcomps=0;
        !           745:                                                bail(1);
        !           746:                                                continue; }
        !           747:                                        if(!cfg.total_fcomps) {
        !           748:                                                if((cfg.fcomp[0]=(fcomp_t *)MALLOC(
        !           749:                                                        sizeof(fcomp_t)))==NULL) {
        !           750:                                                        errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(fcomp_t));
        !           751:                                                        continue; }
        !           752:                                                memset(cfg.fcomp[0],0,sizeof(fcomp_t));
        !           753:                                                strcpy(cfg.fcomp[0]->ext,"ZIP");
        !           754:                                                strcpy(cfg.fcomp[0]->cmd,"%!pkzip %f %s"); }
        !           755:                                        else {
        !           756:                                                for(j=cfg.total_fcomps;j>i;j--)
        !           757:                                                        cfg.fcomp[j]=cfg.fcomp[j-1];
        !           758:                                                if((cfg.fcomp[i]=(fcomp_t *)MALLOC(
        !           759:                                                        sizeof(fcomp_t)))==NULL) {
        !           760:                                                        errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(fcomp_t));
        !           761:                                                        continue; }
        !           762:                                                if(i>=cfg.total_fcomps)
        !           763:                                                        j=i-1;
        !           764:                                                else
        !           765:                                                        j=i+1;
        !           766:                                                *cfg.fcomp[i]=*cfg.fcomp[j]; }
        !           767:                                        cfg.total_fcomps++;
        !           768:                                        uifc.changes=1;
        !           769:                                        continue; }
        !           770:                                if((i&MSK_ON)==MSK_GET) {
        !           771:                                        i&=MSK_OFF;
        !           772:                                        savfcomp=*cfg.fcomp[i];
        !           773:                                        continue; }
        !           774:                                if((i&MSK_ON)==MSK_PUT) {
        !           775:                                        i&=MSK_OFF;
        !           776:                                        *cfg.fcomp[i]=savfcomp;
        !           777:                                        uifc.changes=1;
        !           778:                                        continue; }
        !           779:                                done=0;
        !           780:                                while(!done) {
        !           781:                                        j=0;
        !           782:                                        sprintf(opt[j++],"%-22.22s%s","File Extension"
        !           783:                                                ,cfg.fcomp[i]->ext);
        !           784:                                        sprintf(opt[j++],"%-22.22s%-40s","Command Line"
        !           785:                                                ,cfg.fcomp[i]->cmd);
        !           786:                                        sprintf(opt[j++],"%-22.22s%s","Access Requirements"
        !           787:                                                ,cfg.fcomp[i]->arstr);
        !           788:                                        opt[j][0]=0;
        !           789:                                        uifc.savnum=1;
        !           790:                                        switch(uifc.list(WIN_RHT|WIN_BOT|WIN_SAV|WIN_ACT,0,0,0,&fcomp_opt,0
        !           791:                                                ,"Compressable File Type",opt)) {
        !           792:                                                case -1:
        !           793:                                                        done=1;
        !           794:                                                        break;
        !           795:                                                case 0:
        !           796:                                                        uifc.input(WIN_MID|WIN_SAV,0,0
        !           797:                                                                ,"Compressable File Type Extension"
        !           798:                                                                ,cfg.fcomp[i]->ext,sizeof(cfg.fcomp[i]->ext)-1,K_EDIT);
        !           799:                                                        break;
        !           800:                                                case 1:
        !           801:                                                        uifc.input(WIN_MID|WIN_SAV,0,0
        !           802:                                                                ,"Command"
        !           803:                                                                ,cfg.fcomp[i]->cmd,sizeof(cfg.fcomp[i]->cmd)-1,K_EDIT);
        !           804:                                                        break;
        !           805:                                                case 2:
        !           806:                                                        uifc.savnum=2;
        !           807:                                                        sprintf(str,"Compressable File Type %s"
        !           808:                                                                ,cfg.fcomp[i]->ext);
        !           809:                                                        getar(str,cfg.fcomp[i]->arstr);
        !           810:                             break; } } }
        !           811:             break;
        !           812:                case 13:        /* Transfer protocols */
        !           813:                        while(1) {
        !           814:                                for(i=0;i<cfg.total_prots && i<MAX_OPTS;i++)
        !           815:                                        sprintf(opt[i],"%c  %s"
        !           816:                                                ,cfg.prot[i]->mnemonic,cfg.prot[i]->name);
        !           817:                                opt[i][0]=0;
        !           818:                                i=WIN_ACT|WIN_SAV;      /* save cause size can change */
        !           819:                                if(cfg.total_prots<MAX_OPTS)
        !           820:                                        i|=WIN_INS|WIN_XTR;
        !           821:                                if(cfg.total_prots)
        !           822:                                        i|=WIN_DEL|WIN_GET;
        !           823:                                if(savprot.mnemonic)
        !           824:                                        i|=WIN_PUT;
        !           825:                                uifc.savnum=0;
        !           826:                                SETHELP(WHERE);
        !           827: /*
        !           828: &File Transfer Protocols:&
        !           829: 
        !           830: This is a list of file transfer protocols that can be used to transfer
        !           831: files either to or from a remote user. For each protocol, you can
        !           832: specify the mnemonic (hot-key) to use to specify that protocol, the
        !           833: command line to use for uploads, downloads, batch uploads, batch
        !           834: downloads, bi-directional file transfers, and the support of DSZLOG. If
        !           835: the protocol doesn't support a certain method of transfer, or you don't
        !           836: wish it to be available for a certain method of transfer, leave the
        !           837: command line for that method blank.
        !           838: */
        !           839:                                i=uifc.list(i,0,0,50,&prot_dflt,NULL,"File Transfer Protocols",opt);
        !           840:                                if(i==-1)
        !           841:                                        break;
        !           842:                                if((i&MSK_ON)==MSK_DEL) {
        !           843:                                        i&=MSK_OFF;
        !           844:                                        FREE(cfg.prot[i]);
        !           845:                                        cfg.total_prots--;
        !           846:                                        while(i<cfg.total_prots) {
        !           847:                                                cfg.prot[i]=cfg.prot[i+1];
        !           848:                                                i++; }
        !           849:                                        uifc.changes=1;
        !           850:                                        continue; }
        !           851:                                if((i&MSK_ON)==MSK_INS) {
        !           852:                                        i&=MSK_OFF;
        !           853:                                        if((cfg.prot=(prot_t **)REALLOC(cfg.prot
        !           854:                                                ,sizeof(prot_t *)*(cfg.total_prots+1)))==NULL) {
        !           855:                                                errormsg(WHERE,ERR_ALLOC,nulstr,cfg.total_prots+1);
        !           856:                                                cfg.total_prots=0;
        !           857:                                                bail(1);
        !           858:                                                continue; }
        !           859:                                        if(!cfg.total_prots) {
        !           860:                                                if((cfg.prot[0]=(prot_t *)MALLOC(
        !           861:                                                        sizeof(prot_t)))==NULL) {
        !           862:                                                        errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(prot_t));
        !           863:                                                        continue; }
        !           864:                                                memset(cfg.prot[0],0,sizeof(prot_t));
        !           865:                                                cfg.prot[0]->mnemonic='?';
        !           866:                                        } else {
        !           867:                                                for(j=cfg.total_prots;j>i;j--)
        !           868:                                                        cfg.prot[j]=cfg.prot[j-1];
        !           869:                                                if((cfg.prot[i]=(prot_t *)MALLOC(
        !           870:                                                        sizeof(prot_t)))==NULL) {
        !           871:                                                        errormsg(WHERE,ERR_ALLOC,nulstr,sizeof(prot_t));
        !           872:                                                        continue; }
        !           873:                                                if(i>=cfg.total_prots)
        !           874:                                                        j=i-1;
        !           875:                                                else
        !           876:                                                        j=i+1;
        !           877:                                                *cfg.prot[i]=*cfg.prot[j]; }
        !           878:                                        cfg.total_prots++;
        !           879:                                        uifc.changes=1;
        !           880:                                        continue; }
        !           881:                                if((i&MSK_ON)==MSK_GET) {
        !           882:                                        i&=MSK_OFF;
        !           883:                                        savprot=*cfg.prot[i];
        !           884:                                        continue; }
        !           885:                                if((i&MSK_ON)==MSK_PUT) {
        !           886:                                        i&=MSK_OFF;
        !           887:                                        *cfg.prot[i]=savprot;
        !           888:                                        uifc.changes=1;
        !           889:                                        continue; }
        !           890:                                done=0;
        !           891:                                while(!done) {
        !           892:                                        j=0;
        !           893:                                        sprintf(opt[j++],"%-30.30s%c","Mnemonic (Command Key)"
        !           894:                                                ,cfg.prot[i]->mnemonic);
        !           895:                                        sprintf(opt[j++],"%-30.30s%-40s","Protocol Name"
        !           896:                                                ,cfg.prot[i]->name);
        !           897:                                        sprintf(opt[j++],"%-30.30s%-40s","Access Requirements"
        !           898:                                                ,cfg.prot[i]->arstr);
        !           899:                                        sprintf(opt[j++],"%-30.30s%-40s","Upload Command Line"
        !           900:                                                ,cfg.prot[i]->ulcmd);
        !           901:                                        sprintf(opt[j++],"%-30.30s%-40s","Download Command Line"
        !           902:                                                ,cfg.prot[i]->dlcmd);
        !           903:                                        sprintf(opt[j++],"%-30.30s%-40s","Batch Upload Command Line"
        !           904:                                                ,cfg.prot[i]->batulcmd);
        !           905:                                        sprintf(opt[j++],"%-30.30s%-40s","Batch Download Command Line"
        !           906:                                                ,cfg.prot[i]->batdlcmd);
        !           907:                                        sprintf(opt[j++],"%-30.30s%-40s","Bi-dir Command Line"
        !           908:                                                ,cfg.prot[i]->bicmd);
        !           909:                                        sprintf(opt[j++],"%-30.30s%s",   "Native (32-bit) Executable"
        !           910:                                                ,cfg.prot[i]->misc&PROT_NATIVE ? "Yes" : "No");
        !           911:                                        sprintf(opt[j++],"%-30.30s%s",   "Supports DSZLOG"
        !           912:                                                ,cfg.prot[i]->misc&PROT_DSZLOG ? "Yes":"No");
        !           913:                                        opt[j][0]=0;
        !           914:                                        uifc.savnum=1;
        !           915:                                        switch(uifc.list(WIN_RHT|WIN_BOT|WIN_SAV|WIN_ACT,0,0,70,&prot_opt,0
        !           916:                                                ,"File Transfer Protocol",opt)) {
        !           917:                                                case -1:
        !           918:                                                        done=1;
        !           919:                                                        break;
        !           920:                                                case 0:
        !           921:                                                        str[0]=cfg.prot[i]->mnemonic;
        !           922:                                                        str[1]=0;
        !           923:                                                        uifc.input(WIN_MID|WIN_SAV,0,0
        !           924:                                                                ,"Mnemonic (Command Key)"
        !           925:                                                                ,str,1,K_UPPER|K_EDIT);
        !           926:                                                        if(str[0])
        !           927:                                                                cfg.prot[i]->mnemonic=str[0];
        !           928:                                                        break;
        !           929:                                                case 1:
        !           930:                                                        uifc.input(WIN_MID|WIN_SAV,0,0
        !           931:                                                                ,"Protocol Name"
        !           932:                                                                ,cfg.prot[i]->name,sizeof(cfg.prot[i]->name)-1,K_EDIT);
        !           933:                             break;
        !           934:                                                case 2:
        !           935:                                                        uifc.savnum=2;
        !           936:                                                        sprintf(str,"Protocol %s",cfg.prot[i]->name);
        !           937:                                                        getar(str,cfg.prot[i]->arstr);
        !           938:                                                        break;
        !           939:                                                case 3:
        !           940:                                                        uifc.input(WIN_MID|WIN_SAV,0,0
        !           941:                                                                ,"Command"
        !           942:                                                                ,cfg.prot[i]->ulcmd,sizeof(cfg.prot[i]->ulcmd)-1,K_EDIT);
        !           943:                                                        break;
        !           944:                                                case 4:
        !           945:                                                        uifc.input(WIN_MID|WIN_SAV,0,0
        !           946:                                                                ,"Command"
        !           947:                                                                ,cfg.prot[i]->dlcmd,sizeof(cfg.prot[i]->dlcmd)-1,K_EDIT);
        !           948:                             break;
        !           949:                                                case 5:
        !           950:                                                        uifc.input(WIN_MID|WIN_SAV,0,0
        !           951:                                                                ,"Command"
        !           952:                                                                ,cfg.prot[i]->batulcmd,sizeof(cfg.prot[i]->batulcmd)-1,K_EDIT);
        !           953:                             break;
        !           954:                                                case 6:
        !           955:                                                        uifc.input(WIN_MID|WIN_SAV,0,0
        !           956:                                                                ,"Command"
        !           957:                                                                ,cfg.prot[i]->batdlcmd,sizeof(cfg.prot[i]->batdlcmd)-1,K_EDIT);
        !           958:                             break;
        !           959:                                                case 7:
        !           960:                                                        uifc.input(WIN_MID|WIN_SAV,0,0
        !           961:                                                                ,"Command"
        !           962:                                                                ,cfg.prot[i]->bicmd,sizeof(cfg.prot[i]->bicmd)-1,K_EDIT);
        !           963:                             break;
        !           964:                                                case 8:
        !           965:                                                        l=cfg.prot[i]->misc&PROT_NATIVE ? 0:1;
        !           966:                                                        strcpy(opt[0],"Yes");
        !           967:                                                        strcpy(opt[1],"No");
        !           968:                                                        opt[2][0]=0;
        !           969:                                                        uifc.savnum=2;
        !           970:                                                        l=uifc.list(WIN_MID|WIN_SAV,0,0,0,&l,0
        !           971:                                                                ,"Native (32-bit) Executable",opt);
        !           972:                                                        if((l==0 && !(cfg.prot[i]->misc&PROT_NATIVE))
        !           973:                                                                || (l==1 && cfg.prot[i]->misc&PROT_NATIVE)) {
        !           974:                                                                cfg.prot[i]->misc^=PROT_NATIVE;
        !           975:                                                                uifc.changes=1; 
        !           976:                                                        }
        !           977:                                                        break; 
        !           978:                                                case 9:
        !           979:                                                        l=cfg.prot[i]->misc&PROT_DSZLOG ? 0:1;
        !           980:                                                        strcpy(opt[0],"Yes");
        !           981:                                                        strcpy(opt[1],"No");
        !           982:                                                        opt[2][0]=0;
        !           983:                                                        uifc.savnum=2;
        !           984:                                                        l=uifc.list(WIN_MID|WIN_SAV,0,0,0,&l,0
        !           985:                                                                ,"Uses DSZLOG",opt);
        !           986:                                                        if((l==0 && !(cfg.prot[i]->misc&PROT_DSZLOG))
        !           987:                                                                || (l==1 && cfg.prot[i]->misc&PROT_DSZLOG)) {
        !           988:                                                                cfg.prot[i]->misc^=PROT_DSZLOG;
        !           989:                                                                uifc.changes=1; 
        !           990:                                                        }
        !           991:                                                        break; 
        !           992:                                        } 
        !           993:                                } 
        !           994:                        }
        !           995:                        break;
        !           996:                case 14:        /* Alternate file paths */
        !           997:                        while(1) {
        !           998:                                for(i=0;i<cfg.altpaths;i++)
        !           999:                                        sprintf(opt[i],"%3d: %-40s",i+1,cfg.altpath[i]);
        !          1000:                                opt[i][0]=0;
        !          1001:                                i=WIN_ACT|WIN_SAV;      /* save cause size can change */
        !          1002:                                if((int)cfg.altpaths<MAX_OPTS)
        !          1003:                                        i|=WIN_INS|WIN_XTR;
        !          1004:                                if(cfg.altpaths)
        !          1005:                                        i|=WIN_DEL|WIN_GET;
        !          1006:                                if(savaltpath[0])
        !          1007:                                        i|=WIN_PUT;
        !          1008:                                uifc.savnum=0;
        !          1009:                                SETHELP(WHERE);
        !          1010: /*
        !          1011: &Alternate File Paths:&
        !          1012: 
        !          1013: This option allows the sysop to add and configure alternate file paths
        !          1014: for files stored on drives and directories other than the configured
        !          1015: storage path for a file directory. This command is useful for those who
        !          1016: have file directories where they wish to have files listed from
        !          1017: multiple CD-ROMs or hard disks.
        !          1018: */
        !          1019:                                i=uifc.list(i,0,0,50,&altpath_dflt,NULL,"Alternate File Paths",opt);
        !          1020:                                if(i==-1)
        !          1021:                                        break;
        !          1022:                                if((i&MSK_ON)==MSK_DEL) {
        !          1023:                                        i&=MSK_OFF;
        !          1024:                                        FREE(cfg.altpath[i]);
        !          1025:                                        cfg.altpaths--;
        !          1026:                                        while(i<cfg.altpaths) {
        !          1027:                                                cfg.altpath[i]=cfg.altpath[i+1];
        !          1028:                                                i++; }
        !          1029:                                        uifc.changes=1;
        !          1030:                                        continue; }
        !          1031:                                if((i&MSK_ON)==MSK_INS) {
        !          1032:                                        i&=MSK_OFF;
        !          1033:                                        if((cfg.altpath=(char **)REALLOC(cfg.altpath
        !          1034:                                                ,sizeof(char *)*(cfg.altpaths+1)))==NULL) {
        !          1035:                                                errormsg(WHERE,ERR_ALLOC,nulstr,cfg.altpaths+1);
        !          1036:                                                cfg.altpaths=0;
        !          1037:                                                bail(1);
        !          1038:                         continue; }
        !          1039:                                        if(!cfg.altpaths) {
        !          1040:                                                if((cfg.altpath[0]=(char *)MALLOC(LEN_DIR+1))==NULL) {
        !          1041:                                                        errormsg(WHERE,ERR_ALLOC,nulstr,LEN_DIR+1);
        !          1042:                                                        continue; }
        !          1043:                                                memset(cfg.altpath[0],0,LEN_DIR+1); }
        !          1044:                                        else {
        !          1045:                                                for(j=cfg.altpaths;j>i;j--)
        !          1046:                                                        cfg.altpath[j]=cfg.altpath[j-1];
        !          1047:                                                if((cfg.altpath[i]=(char *)MALLOC(LEN_DIR+1))==NULL) {
        !          1048:                                                        errormsg(WHERE,ERR_ALLOC,nulstr,LEN_DIR+1);
        !          1049:                                                        continue; }
        !          1050:                                                if(i>=cfg.altpaths)
        !          1051:                                                        j=i-1;
        !          1052:                                                else
        !          1053:                                                        j=i+1;
        !          1054:                                                memcpy(cfg.altpath[i],cfg.altpath[j],LEN_DIR+1); }
        !          1055:                                        cfg.altpaths++;
        !          1056:                                        uifc.changes=1;
        !          1057:                                        continue; }
        !          1058:                                if((i&MSK_ON)==MSK_GET) {
        !          1059:                                        i&=MSK_OFF;
        !          1060:                                        memcpy(savaltpath,cfg.altpath[i],LEN_DIR+1);
        !          1061:                                        continue; }
        !          1062:                                if((i&MSK_ON)==MSK_PUT) {
        !          1063:                                        i&=MSK_OFF;
        !          1064:                                        memcpy(cfg.altpath[i],savaltpath,LEN_DIR+1);
        !          1065:                                        uifc.changes=1;
        !          1066:                                        continue; }
        !          1067:                                sprintf(str,"Path %d",i+1);
        !          1068:                                uifc.input(WIN_MID|WIN_SAV,0,0,str,cfg.altpath[i],sizeof(cfg.altpath[i])-1,K_EDIT); 
        !          1069:                        }
        !          1070:                        break; 
        !          1071:                } 
        !          1072:        }
        !          1073: }
        !          1074: 

unix.superglobalmegacorp.com

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