Annotation of sbbs/sbbs2/scb/scbcfg.c, revision 1.1

1.1     ! root        1: /* SCBCFG.C */
        !             2: 
        !             3: /* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
        !             4: 
        !             5: #include <uifc.h>
        !             6: #include <sys\stat.h>
        !             7: #include "scb.h"
        !             8: 
        !             9: #define MAX_PRFX       500
        !            10: #define LEN_PRFX       20
        !            11: 
        !            12: char **opt;
        !            13: char **prfx;
        !            14: 
        !            15: int add();
        !            16: void bail(int code);
        !            17: void main();
        !            18: char fexist(char *filespec);
        !            19: 
        !            20: unsigned _stklen=16000;                  /* Set stack size in code, not header */
        !            21: 
        !            22: void bail(int code)
        !            23: {
        !            24: 
        !            25: if(code)
        !            26:        getch();
        !            27: uifcbail();
        !            28: exit(code);
        !            29: }
        !            30: 
        !            31: int add()
        !            32: {
        !            33:        int i;
        !            34: 
        !            35: i=0;
        !            36: strcpy(opt[0],"Add these to the user account");
        !            37: strcpy(opt[1],"Remove these from the user account");
        !            38: opt[2][0]=0;
        !            39: /*
        !            40: &Add/Remove Flags/Restricts/Exempts:&
        !            41: 
        !            42: Select &ADD& if you want these flags/restricts/exempts added to the
        !            43: user upon validation, or select &REMOVE& to take them away upon
        !            44: validation.
        !            45: 
        !            46: */
        !            47: i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0,"Add or Remove From Account",opt);
        !            48: return(i);
        !            49: }
        !            50: 
        !            51: void main()
        !            52: {
        !            53:        char str[128],canfile[256],addfile[256],flags1[81]={NULL},
        !            54:                 flags2[81]={NULL},flags3[81]={NULL},flags4[81]={NULL},
        !            55:                 exempt[81]={NULL},restrict[81]={NULL},expiration[81]={NULL},
        !            56:                 credits[81]={NULL},minutes[81]={NULL},level[81]={NULL},
        !            57:                 callout_attempts[81]={NULL},sysop[81]={NULL},bbs_ac[81],*p;
        !            58:        int file,i,j,k,options=0,ldstart[7]={NULL},ldend[7]={NULL},min_phone_len=7,
        !            59:                max_phone_len=11,total_prfxs,dflt,b,hangup_time;
        !            60:        FILE *stream;
        !            61: 
        !            62: savnum=0;
        !            63: if((opt=(char **)MALLOC(sizeof(char *)*300))==NULL) {
        !            64:        cputs("memory allocation error\r\n");
        !            65:        bail(1); }
        !            66: for(i=0;i<300;i++)
        !            67:        if((opt[i]=(char *)MALLOC(MAX_OPLN))==NULL) {
        !            68:                cputs("memory allocation error\r\n");
        !            69:         bail(1); }
        !            70: uifcini();
        !            71: sprintf(str,"Synchronet Callback v%s",VERSION);
        !            72: uscrn(str);
        !            73: 
        !            74: if(!(fexist("SCB.CFG"))) {
        !            75:        strcpy(callout_attempts,"5");
        !            76:        strcpy(canfile,"\\SBBS\\TEXT\\PHONE.CAN");
        !            77:        strcpy(addfile,canfile);
        !            78:        options|=MODIFY_USER_NOTE; }
        !            79: else {
        !            80:        if((file=open("SCB.CFG",O_RDONLY|O_BINARY|O_DENYNONE))==-1) {
        !            81:                textattr(LIGHTGRAY);
        !            82:                clrscr();
        !            83:                lprintf("Error opening SCB.CFG\r\n");
        !            84:                bail(1); }
        !            85:        if((stream=fdopen(file,"rb"))==NULL) {
        !            86:                textattr(LIGHTGRAY);
        !            87:                clrscr();
        !            88:                lprintf("Error fdopen SCB.CFG\r\n");
        !            89:                bail(1); }
        !            90:        fgets(callout_attempts,81,stream); truncsp(callout_attempts);
        !            91:        fgets(str,81,stream); truncsp(str);
        !            92:        if(str[0]=='Y') options|=ALWAYS_VALIDATE;
        !            93:        if(str[1]=='Y') options|=MODIFY_USER_NOTE;
        !            94:        if(str[2]=='Y') options|=START_WITH_0;
        !            95:        if(str[3]=='Y') options|=START_WITH_1;
        !            96:        if(str[4]=='Y') options|=STAY_CONNECTED;
        !            97:        if(str[5]=='Y') options|=SC_LOCAL_ONLY;
        !            98:        if(str[6]=='Y') options|=US_PHONE_FORMAT;
        !            99:        if(str[7]=='Y') options|=ALLOWED_ONLY;
        !           100:        if(str[8]!='N') options|=SAME_AREA_LD;
        !           101:        fgets(canfile,81,stream); truncsp(canfile);
        !           102:        fgets(addfile,81,stream); truncsp(addfile);
        !           103:        fgets(credits,81,stream); truncsp(credits);
        !           104:        fgets(sysop,81,stream); truncsp(sysop);
        !           105:        fgets(level,81,stream); truncsp(level);
        !           106:        fgets(flags1,81,stream); truncsp(flags1);
        !           107:        fgets(flags2,81,stream); truncsp(flags2);
        !           108:        fgets(exempt,81,stream); truncsp(exempt);
        !           109:        fgets(restrict,81,stream); truncsp(restrict);
        !           110:        fgets(expiration,81,stream); truncsp(expiration);
        !           111:        fgets(minutes,81,stream); truncsp(minutes);
        !           112:        fgets(flags3,81,stream); truncsp(flags3);
        !           113:        fgets(flags4,81,stream); truncsp(flags4);
        !           114:        for(i=0;i<7;i++) {
        !           115:                fgets(str,81,stream); ldstart[i]=atoi(str);    /* min since midnight */
        !           116:                fgets(str,81,stream); ldend[i]=atoi(str); }
        !           117:        fgets(str,81,stream); min_phone_len=atoi(str);
        !           118:        fgets(str,81,stream); max_phone_len=atoi(str);
        !           119:        fgets(bbs_ac,81,stream); truncsp(bbs_ac);
        !           120:        if(fgets(str,81,stream)) {
        !           121:                hangup_time=atoi(str);
        !           122:                if(hangup_time>90)
        !           123:                        hangup_time=90; }
        !           124:        else
        !           125:                hangup_time=30;
        !           126:        str[0]=0;
        !           127:        fgets(str,81,stream);   // regnum
        !           128:        fclose(stream); }
        !           129: dflt=0;
        !           130: while(1) {
        !           131:        helpbuf=
        !           132: " Synchronet Callback Configuration \r\n\r\n"
        !           133: "Move through the various options using the arrow keys.  Select the\r\n"
        !           134: "highlighted options by pressing ENTER.\r\n\r\n";
        !           135:        j=0;
        !           136:        sprintf(opt[j++],"Toggle Options...");
        !           137:        sprintf(opt[j++],"Validation Values...");
        !           138:        sprintf(opt[j++],"Allowed Prefix List...");
        !           139:        sprintf(opt[j++],"Long Distance Prefix List...");
        !           140:        sprintf(opt[j++],"Long Distance Calling Times...");
        !           141:        sprintf(opt[j++],"Phone Number Trash Can   %-30.30s",canfile);
        !           142:        sprintf(opt[j++],"Validated Phone List     %-30.30s",addfile);
        !           143:        sprintf(opt[j++],"Callback Attempts        %-2.2s",callout_attempts);
        !           144:        sprintf(opt[j++],"Minimum Phone Length     %u",min_phone_len);
        !           145:        sprintf(opt[j++],"Maximum Phone Length     %u",max_phone_len);
        !           146:        sprintf(opt[j++],"Wait Before Dialing      %u seconds",hangup_time);
        !           147:        sprintf(opt[j++],"BBS Area Code            %-3.3s",bbs_ac);
        !           148:        if(sysop[0])
        !           149:                sprintf(str,"User #%s",sysop);
        !           150:        else
        !           151:                sprintf(str,"Disabled");
        !           152:        sprintf(opt[j++],"Send Message to Sysop    %-30.30s",str);
        !           153:        opt[j][0]=NULL;
        !           154:        switch(ulist(WIN_ORG|WIN_MID|WIN_ACT|WIN_ESC,0,0,60,&dflt,0
        !           155:        ,"Synchronet Callback Configuration",opt)) {
        !           156:                case 0:
        !           157:                        j=0;
        !           158:                        while(1) {
        !           159:                                k=0;
        !           160:                                sprintf(opt[k++],"%-40.40s%-3s","Validate if Unable to Verify"
        !           161:                                        ,options&ALWAYS_VALIDATE ? "Yes":"No");
        !           162:                                sprintf(opt[k++],"%-40.40s%-3s","Put Result in User Note"
        !           163:                                        ,options&MODIFY_USER_NOTE ? "Yes":"No");
        !           164:                                sprintf(opt[k++],"%-40.40s%-3s"
        !           165:                                        ,"Long Distance if not an Allowed Prefix"
        !           166:                                        ,options&ALLOWED_ONLY ? "Yes":"No");
        !           167:                                sprintf(opt[k++],"%-40.40s%-3s"
        !           168:                                        ,"Allow Long Distance (Starting with 0)"
        !           169:                                        ,options&START_WITH_0 ? "Yes":"No");
        !           170:                                sprintf(opt[k++],"%-40.40s%-3s"
        !           171:                                        ,"Allow Long Distance (Starting with 1)"
        !           172:                                        ,options&START_WITH_1 ? "Yes":"No");
        !           173:                                sprintf(opt[k++],"%-40.40s%-3s"
        !           174:                                        ,"Allow Long Distance (Same Area Code)"
        !           175:                                        ,options&SAME_AREA_LD ? "Yes":"No");
        !           176:                                sprintf(opt[k++],"%-40.40s%-3s"
        !           177:                                        ,"U.S. Style Phone Format (AAA-PPP-SSSS)"
        !           178:                                        ,options&US_PHONE_FORMAT ? "Yes":"No");
        !           179:                                sprintf(opt[k++],"%-40.40s%-10s","Stay Connected After Callback"
        !           180:                                        ,options&STAY_CONNECTED && options&SC_LOCAL_ONLY ?
        !           181:                                        "Local Only" : options&STAY_CONNECTED ? "Yes":"No");
        !           182:                                opt[k][0]=NULL;
        !           183: helpbuf=
        !           184: " Toggle Options \r\n\r\n"
        !           185: "&Validate if Unable to Call Back&\r\n"
        !           186: "  Setting this to &Yes& will validate the user even if the board is unable "
        !           187: "\r\n"
        !           188: "  to call the user back.\r\n"
        !           189: "&Put Result in User Note&\r\n"
        !           190: "  When set to &Yes&, this option will place the phone number, and\r\n"
        !           191: "  information pertaining to the call into the user's note.\r\n"
        !           192: "&Allow Numbers that Start with 0 / Allow Numbers that Start with 1&\r\n"
        !           193: "  Set these options to &Yes& to allow SCB to call phone numbers which\r\n"
        !           194: "  start with a 0 or a 1 (respectively).\r\n"
        !           195: "&U.S. Style Phone Format&\r\n"
        !           196: "  Toggle this option to &Yes& if you live in an area that uses a phone\r\n"
        !           197: "  number format of (AAA) PPP-SSSS.\r\n"
        !           198: "&Stay Connected After Callback&\r\n"
        !           199: "  Toggle this option to &Yes& to allow SCB to stay connected after a\r\n"
        !           200: "  callback, &Local Only& for local numbers, or &No& to disconnect.";
        !           201: 
        !           202:                                j=ulist(0,0,0,0,&j,0,"Toggle Options",opt);
        !           203:                                if(j==-1)
        !           204:                                        break;
        !           205:                                switch(j) {
        !           206:                                        case 0:
        !           207:                                                options^=ALWAYS_VALIDATE;
        !           208:                                                break;
        !           209:                                        case 1:
        !           210:                                                options^=MODIFY_USER_NOTE;
        !           211:                                                break;
        !           212:                                        case 2:
        !           213:                                                options^=ALLOWED_ONLY;
        !           214:                                                break;
        !           215:                                        case 3:
        !           216:                                                options^=START_WITH_0;
        !           217:                                                break;
        !           218:                                        case 4:
        !           219:                                                options^=START_WITH_1;
        !           220:                                                break;
        !           221:                                        case 5:
        !           222:                                                options^=SAME_AREA_LD;
        !           223:                         break;
        !           224:                                        case 6:
        !           225:                                                options^=US_PHONE_FORMAT;
        !           226:                                                break;
        !           227:                                        case 7:
        !           228:                                                if(options&STAY_CONNECTED && options&SC_LOCAL_ONLY) {
        !           229:                                                        options^=STAY_CONNECTED;
        !           230:                                                        options^=SC_LOCAL_ONLY;
        !           231:                                                } else if(options&STAY_CONNECTED)
        !           232:                                                        options^=SC_LOCAL_ONLY;
        !           233:                                                else options^=STAY_CONNECTED;
        !           234:                                                break; } }
        !           235:             break;
        !           236:                case 1:
        !           237:                        j=0;
        !           238:                        while(1) {
        !           239:                                k=0;
        !           240:                                sprintf(opt[k++],"%-30.30s  %-27.27s","Security Level"
        !           241:                                        ,level);
        !           242:                                sprintf(opt[k++],"%-30.30s  %-27.27s","Flag Set 1"
        !           243:                                        ,flags1);
        !           244:                                sprintf(opt[k++],"%-30.30s  %-27.27s","Flag Set 2"
        !           245:                                        ,flags2);
        !           246:                                sprintf(opt[k++],"%-30.30s  %-27.27s","Flag Set 3"
        !           247:                                        ,flags3);
        !           248:                                sprintf(opt[k++],"%-30.30s  %-27.27s","Flag Set 4"
        !           249:                                        ,flags4);
        !           250:                                sprintf(opt[k++],"%-30.30s  %-27.27s","Exemptions"
        !           251:                                        ,exempt);
        !           252:                                sprintf(opt[k++],"%-30.30s  %-27.27s","Restrictions"
        !           253:                                        ,restrict);
        !           254:                                sprintf(opt[k++],"%-30.30s  %-27.27s"
        !           255:                                        ,"Days to Extend Expiration"
        !           256:                                        ,expiration);
        !           257:                                sprintf(opt[k++],"%-30.30s  %-27.27s","Credits to Add"
        !           258:                                        ,credits);
        !           259:                                sprintf(opt[k++],"%-30.30s  %-27.27s","Minutes to Add"
        !           260:                                        ,minutes);
        !           261:                                opt[k][0]=NULL;
        !           262: helpbuf=
        !           263: " Validation Values \r\n\r\n"
        !           264: "These are the values that will be placed into user accounts that have\r\n"
        !           265: "been successfully verified through the Synchronet Callback.";
        !           266: 
        !           267: 
        !           268:                                j=ulist(WIN_ACT,0,0,0,&j,0,"Validation Values",opt);
        !           269:                                if(j==-1)
        !           270:                                        break;
        !           271:                                switch(j) {
        !           272:                                        case 0:
        !           273: helpbuf=
        !           274: " Security Level \r\n\r\n"
        !           275: "This is the Security level that will be given to users that are called\r\n"
        !           276: "back successfully.";
        !           277:                                                uinput(WIN_L2R|WIN_MID|WIN_SAV,0,0,
        !           278:                                                        "Security Level",level,2,K_EDIT|K_NUMBER);
        !           279:                                                break;
        !           280:                                        case 1:
        !           281: helpbuf=
        !           282: " Flag Set 1 \r\n\r\n"
        !           283: "These are the different flags to be added to (or removed from) the\r\n"
        !           284: "user account.";
        !           285:                                                p=strstr(flags1,"-");
        !           286:                                                if(p!=NULL) sprintf(str,"%s",p+1);
        !           287:                                                else
        !           288:                                                        sprintf(str,"%s",flags1);
        !           289:                                                if(uinput(WIN_L2R|WIN_MID|WIN_SAV,0,0,"Flag Set 1",str
        !           290:                                                        ,26,K_EDIT|K_UPPER|K_ALPHA)<0)
        !           291:                                                        break;
        !           292:                                                if(str[0] && add()>0) sprintf(flags1,"-%s",str);
        !           293:                                                else
        !           294:                                                        sprintf(flags1,"%s",str);
        !           295:                         break;
        !           296:                                        case 2:
        !           297: helpbuf=
        !           298: " Flag Set 2 \r\n\r\n"
        !           299: "These are the different flags to be added to (or removed from) the\r\n"
        !           300: "user account.";
        !           301:                                                p=strstr(flags2,"-");
        !           302:                                                if(p!=NULL) sprintf(str,"%s",p+1);
        !           303:                                                else
        !           304:                                                        sprintf(str,"%s",flags2);
        !           305:                                                if(uinput(WIN_L2R|WIN_MID|WIN_SAV,0,0,"Flag Set 2",str
        !           306:                                                        ,26,K_EDIT|K_UPPER|K_ALPHA)<0)
        !           307:                                                        break;
        !           308:                                                if(str[0] && add()>0) sprintf(flags2,"-%s",str);
        !           309:                                                else
        !           310:                                                        sprintf(flags2,"%s",str);
        !           311:                         break;
        !           312:                                        case 3:
        !           313: helpbuf=
        !           314: " Flag Set 3 \r\n\r\n"
        !           315: "These are the different flags to be added to (or removed from) the\r\n"
        !           316: "user account.";
        !           317:                                                p=strstr(flags3,"-");
        !           318:                                                if(p!=NULL) sprintf(str,"%s",p+1);
        !           319:                                                else
        !           320:                                                        sprintf(str,"%s",flags3);
        !           321:                                                if(uinput(WIN_L2R|WIN_MID|WIN_SAV,0,0,"Flag Set 3",str
        !           322:                                                        ,26,K_EDIT|K_UPPER|K_ALPHA)<0)
        !           323:                                                        break;
        !           324:                                                if(str[0] && add()>0) sprintf(flags3,"-%s",str);
        !           325:                                                else
        !           326:                                                        sprintf(flags3,"%s",str);
        !           327:                         break;
        !           328:                                        case 4:
        !           329: helpbuf=
        !           330: " Flag Set 4 \r\n\r\n"
        !           331: "These are the different flags to be added to (or removed from) the\r\n"
        !           332: "user account.";
        !           333:                                                p=strstr(flags4,"-");
        !           334:                                                if(p!=NULL) sprintf(str,"%s",p+1);
        !           335:                                                else
        !           336:                                                        sprintf(str,"%s",flags4);
        !           337:                                                if(uinput(WIN_L2R|WIN_MID|WIN_SAV,0,0,"Flag Set 4",str
        !           338:                                                        ,26,K_EDIT|K_UPPER|K_ALPHA)<0)
        !           339:                                                        break;
        !           340:                                                if(str[0] && add()>0) sprintf(flags4,"-%s",str);
        !           341:                                                else
        !           342:                                                        sprintf(flags4,"%s",str);
        !           343:                         break;
        !           344:                                        case 5:
        !           345: helpbuf=
        !           346: " Exemptions \r\n\r\n"
        !           347: "These are the exemption flags that will be added to (or removed from)\r\n"
        !           348: "the user account.";
        !           349:                                                p=strstr(exempt,"-");
        !           350:                                                if(p!=NULL) sprintf(str,"%s",p+1);
        !           351:                                                else
        !           352:                                                        sprintf(str,"%s",exempt);
        !           353:                                                if(uinput(WIN_MID|WIN_SAV,0,0,"Exemptions",str
        !           354:                                                        ,26,K_EDIT|K_UPPER|K_ALPHA)<0)
        !           355:                                                        break;
        !           356:                                                if(str[0] && add()>0) sprintf(exempt,"-%s",str);
        !           357:                                                else
        !           358:                                                        sprintf(exempt,"%s",str);
        !           359:                         break;
        !           360:                                        case 6:
        !           361: helpbuf=
        !           362: " Restrictions \r\n\r\n"
        !           363: "These are the restriction flags that will be added to (or removed\r\n"
        !           364: "from) the user account.";
        !           365:                                                p=strstr(restrict,"-");
        !           366:                                                if(p!=NULL) sprintf(str,"%s",p+1);
        !           367:                                                else
        !           368:                                                        sprintf(str,"%s",restrict);
        !           369:                                                if(uinput(WIN_MID|WIN_SAV,0,0,"Restrictions",str
        !           370:                                                        ,26,K_EDIT|K_UPPER|K_ALPHA)<0)
        !           371:                                                        break;
        !           372:                                                if(str[0] && add()>0) sprintf(restrict,"-%s",str);
        !           373:                                                else
        !           374:                                                        sprintf(restrict,"%s",str);
        !           375:                         break;
        !           376:                                        case 7:
        !           377: helpbuf=
        !           378: " Days to Extend Expiration \r\n\r\n"
        !           379: "This is the number of days to extend the expiration date of a user\r\n"
        !           380: "account.";
        !           381:                                                uinput(WIN_MID|WIN_SAV,0,0,"Expiration"
        !           382:                                                        ,expiration,8,K_EDIT|K_UPPER|K_NUMBER);
        !           383:                         break;
        !           384:                                        case 8:
        !           385: helpbuf=
        !           386: " Credits to Add \r\n\r\n"
        !           387: "This is the number of credits to add to a user account.";
        !           388:                                                uinput(WIN_MID|WIN_SAV,0,0,"Credits",credits
        !           389:                                                        ,10,K_EDIT|K_UPPER|K_NUMBER);
        !           390:                         break;
        !           391:                                        case 9:
        !           392: helpbuf=
        !           393: " Minutes to Add \r\n\r\n"
        !           394: "This is the number of minutes to add to a user account.";
        !           395:                                                uinput(WIN_MID|WIN_SAV,0,0,"Minutes",minutes
        !           396:                                                        ,3,K_EDIT|K_UPPER|K_NUMBER);
        !           397:                                                break; } }
        !           398:             break;
        !           399:                case 2:
        !           400: helpbuf=
        !           401: " Allowed Prefix List \r\n\r\n"
        !           402: "Any phone numbers entered whose prefix matches a number contained\r\n"
        !           403: "in this list, will not be affected by long distance restrictions.\r\n"
        !           404: "For example, if you are in the 714 code, and you wish to SCB to\r\n"
        !           405: "consider all prefixes in the 310 area code local, you would enter 1310\r\n"
        !           406: "in the list.";
        !           407: 
        !           408:                        total_prfxs=0;
        !           409:                        if((prfx=(char **)MALLOC(sizeof(char *)*MAX_PRFX))==NULL) {
        !           410:                                cputs("memory allocation error\r\n");
        !           411:                                bail(1); }
        !           412:                        for(i=0;i<MAX_PRFX;i++)
        !           413:                                if((prfx[i]=(char *)MALLOC(LEN_PRFX+1))==NULL) {
        !           414:                                        cputs("memory allocation error\r\n");
        !           415:                                        bail(1); }
        !           416: 
        !           417:                        if(fexist("ALLOWED.DAT")) {
        !           418:                                if((file=open("ALLOWED.DAT",
        !           419:                                        O_RDONLY|O_BINARY|O_DENYNONE))==-1) {
        !           420:                                        textattr(LIGHTGRAY);
        !           421:                                        clrscr();
        !           422:                                        lprintf("Error opening ALLOWED.DAT\r\n");
        !           423:                                        bail(1); }
        !           424:                                if((stream=fdopen(file,"rb"))==NULL) {
        !           425:                                        textattr(LIGHTGRAY);
        !           426:                                        clrscr();
        !           427:                                        lprintf("Error fdopen ALLOWED.DAT\r\n");
        !           428:                                        bail(1); }
        !           429:                                while(!feof(stream) && total_prfxs<MAX_PRFX) {
        !           430:                                        if(!fgets(str,81,stream))
        !           431:                                                break;
        !           432:                                        truncsp(str);
        !           433:                                        sprintf(prfx[total_prfxs++],"%.*s",LEN_PRFX,str); }
        !           434:                                fclose(stream); }
        !           435:                        i=b=0;
        !           436:             while(1) {
        !           437:                                for(j=0;j<total_prfxs;j++)
        !           438:                                        strcpy(opt[j],prfx[j]);
        !           439:                 opt[j][0]=NULL;
        !           440:                                j=WIN_ACT|WIN_SAV;
        !           441:                                if(total_prfxs)
        !           442:                     j|=WIN_DEL;
        !           443:                                if(total_prfxs<MAX_PRFX)
        !           444:                                        j|=WIN_INS|WIN_INSACT|WIN_XTR;
        !           445:                                i=ulist(j,0,0,30,&i,&b,"Allowed Prefix List",opt);
        !           446:                 if((i&0xf000)==MSK_DEL) {
        !           447:                     i&=0xfff;
        !           448:                                        total_prfxs--;
        !           449:                                        for(j=i;j<total_prfxs;j++)
        !           450:                                                strcpy(prfx[j],prfx[j+1]);
        !           451:                                        strcpy(prfx[j+1],"");
        !           452:                     continue; }
        !           453:                 if((i&0xf000)==MSK_INS) {
        !           454:                     i&=0xfff;
        !           455:                                        if(uinput(WIN_MID|WIN_SAV,0,0,"Enter Prefix",str,LEN_PRFX
        !           456:                         ,K_NUMBER)<1)
        !           457:                         continue;
        !           458:                                        ++total_prfxs;
        !           459:                                        if(total_prfxs)
        !           460:                                                for(j=total_prfxs;j>i;j--)
        !           461:                                                        strcpy(prfx[j],prfx[j-1]);
        !           462:                                        strcpy(prfx[i],str);
        !           463:                     continue; }
        !           464:                 if(i==-1) {
        !           465:                     if((file=open("ALLOWED.DAT",
        !           466:                                                O_WRONLY|O_BINARY|O_CREAT|O_TRUNC|O_DENYALL,
        !           467:                                                S_IREAD|S_IWRITE))==-1) {
        !           468:                                                textattr(LIGHTGRAY);
        !           469:                                                clrscr();
        !           470:                         lprintf("Error opening ALLOWED.DAT\r\n");
        !           471:                         bail(1); }
        !           472:                     if((stream=fdopen(file,"wb"))==NULL) {
        !           473:                                                textattr(LIGHTGRAY);
        !           474:                                                clrscr();
        !           475:                         lprintf("Error fdopen ALLOWED.DAT\r\n");
        !           476:                         bail(1); }
        !           477:                                        for(i=0;i<total_prfxs;i++) {
        !           478:                                                fprintf(stream,"%s\r\n",prfx[i]); }
        !           479:                     fclose(stream);
        !           480:                                        for(i=0;i<MAX_PRFX;i++)
        !           481:                                                FREE(prfx[i]);
        !           482:                                        FREE(prfx);
        !           483:                     break; }
        !           484:                 /* else CR was hit */
        !           485:                 uinput(WIN_MID|WIN_SAV,0,0,"Edit Prefix"
        !           486:                                        ,prfx[i],LEN_PRFX,K_EDIT|K_NUMBER); }
        !           487:             break;
        !           488:                case 3:
        !           489: helpbuf=
        !           490: " Long Distance Prefix List \r\n\r\n"
        !           491: "Any phone numbers entered whose prefixes matches a number contained\r\n"
        !           492: "in this list, will be considered a long distance number.  For example,\r\n"
        !           493: "in the same area code, the phone number 234-5678 is long distance to you,\r\n"
        !           494: "so placing 234 in this list will make SCB view calls to that prefix as\r\n"
        !           495: "long distance.\r\n"
        !           496: "\r\n"
        !           497: "If the &Long Distance if not an Allowed Prefix& toggle option is set to\r\n"
        !           498: "&Yes&, then this list is not used.\r\n";
        !           499: 
        !           500:                        total_prfxs=0;
        !           501:                        if((prfx=(char **)MALLOC(sizeof(char *)*MAX_PRFX))==NULL) {
        !           502:                                cputs("memory allocation error\r\n");
        !           503:                                bail(1); }
        !           504:                        for(i=0;i<MAX_PRFX;i++)
        !           505:                                if((prfx[i]=(char *)MALLOC(LEN_PRFX+1))==NULL) {
        !           506:                                        cputs("memory allocation error\r\n");
        !           507:                                        bail(1); }
        !           508: 
        !           509:                        if(fexist("LDPREFIX.DAT")) {
        !           510:                                if((file=open("LDPREFIX.DAT",
        !           511:                                        O_RDONLY|O_BINARY|O_DENYNONE))==-1) {
        !           512:                                        textattr(LIGHTGRAY);
        !           513:                                        clrscr();
        !           514:                                        lprintf("Error opening LDPREFIX.DAT\r\n");
        !           515:                                        bail(1); }
        !           516:                                if((stream=fdopen(file,"rb"))==NULL) {
        !           517:                                        textattr(LIGHTGRAY);
        !           518:                                        clrscr();
        !           519:                                        lprintf("Error fdopen LDPREFIX.DAT\r\n");
        !           520:                                        bail(1); }
        !           521:                                while(!feof(stream) && total_prfxs<MAX_PRFX) {
        !           522:                                        if(!fgets(str,81,stream))
        !           523:                                                break;
        !           524:                                        truncsp(str);
        !           525:                                        sprintf(prfx[total_prfxs++],"%.*s",LEN_PRFX,str); }
        !           526:                                fclose(stream); }
        !           527:                        i=b=0;
        !           528:             while(1) {
        !           529:                 for(j=0;j<total_prfxs;j++)
        !           530:                     strcpy(opt[j],prfx[j]);
        !           531:                 opt[j][0]=NULL;
        !           532:                                j=WIN_ACT|WIN_SAV;
        !           533:                 if(total_prfxs)
        !           534:                     j|=WIN_DEL;
        !           535:                 if(total_prfxs<MAX_PRFX)
        !           536:                     j|=WIN_INS|WIN_INSACT|WIN_XTR;
        !           537:                                i=ulist(j,0,0,30,&i,&b,"Long Distance Prefix List",opt);
        !           538:                 if((i&0xf000)==MSK_DEL) {
        !           539:                     i&=0xfff;
        !           540:                     total_prfxs--;
        !           541:                     for(j=i;j<total_prfxs;j++)
        !           542:                         strcpy(prfx[j],prfx[j+1]);
        !           543:                     strcpy(prfx[j+1],"");
        !           544:                     continue; }
        !           545:                 if((i&0xf000)==MSK_INS) {
        !           546:                     i&=0xfff;
        !           547:                     if(uinput(WIN_MID|WIN_SAV,0,0,"Enter Prefix",str,LEN_PRFX
        !           548:                         ,K_NUMBER)<1)
        !           549:                         continue;
        !           550:                     ++total_prfxs;
        !           551:                     if(total_prfxs)
        !           552:                         for(j=total_prfxs;j>i;j--)
        !           553:                             strcpy(prfx[j],prfx[j-1]);
        !           554:                     strcpy(prfx[i],str);
        !           555:                     continue; }
        !           556:                 if(i==-1) {
        !           557:                                        if((file=open("LDPREFIX.DAT",
        !           558:                                                O_WRONLY|O_BINARY|O_CREAT|O_TRUNC|O_DENYALL,
        !           559:                                                S_IREAD|S_IWRITE))==-1) {
        !           560:                                                textattr(LIGHTGRAY);
        !           561:                                                clrscr();
        !           562:                                                lprintf("Error opening LDPREFIX.DAT\r\n");
        !           563:                         bail(1); }
        !           564:                     if((stream=fdopen(file,"wb"))==NULL) {
        !           565:                                                textattr(LIGHTGRAY);
        !           566:                                                clrscr();
        !           567:                                                lprintf("Error fdopen LDPREFIX.DAT\r\n");
        !           568:                         bail(1); }
        !           569:                     for(i=0;i<total_prfxs;i++) {
        !           570:                         fprintf(stream,"%s\r\n",prfx[i]); }
        !           571:                     fclose(stream);
        !           572:                     for(i=0;i<MAX_PRFX;i++)
        !           573:                         FREE(prfx[i]);
        !           574:                     FREE(prfx);
        !           575:                     break; }
        !           576:                 /* else CR was hit */
        !           577:                 uinput(WIN_MID|WIN_SAV,0,0,"Edit Prefix"
        !           578:                     ,prfx[i],LEN_PRFX,K_EDIT|K_NUMBER); }
        !           579:             break;
        !           580:                case 4:
        !           581: helpbuf=
        !           582: " Long Distance Calling Times \r\n\r\n"
        !           583: "You are being prompted to specify the beginning and ending times to\r\n"
        !           584: "allow long distance verification calls (in military 24-hour format).\r\n"
        !           585: "If you wish to allow long distance calls continuously, set both times\r\n"
        !           586: "to 00:00.\r\n"
        !           587: "\r\n"
        !           588: "To disable long distance calls entirely, set the &Allow Long Distance&\r\n"
        !           589: "toggle options to &No&.";
        !           590: 
        !           591:             j=0;
        !           592:             while(1) {
        !           593:                 k=0;
        !           594:                                sprintf(opt[k++],"Sunday     From %02d:%02d to %02d:%02d"
        !           595:                                        ,ldstart[0]/60,ldstart[0]%60
        !           596:                                        ,ldend[0]/60,ldend[0]%60);
        !           597:                                sprintf(opt[k++],"Monday     From %02d:%02d to %02d:%02d"
        !           598:                                        ,ldstart[1]/60,ldstart[1]%60
        !           599:                                        ,ldend[1]/60,ldend[1]%60);
        !           600:                                sprintf(opt[k++],"Tuesday    From %02d:%02d to %02d:%02d"
        !           601:                                        ,ldstart[2]/60,ldstart[2]%60
        !           602:                                        ,ldend[2]/60,ldend[2]%60);
        !           603:                                sprintf(opt[k++],"Wednesday  From %02d:%02d to %02d:%02d"
        !           604:                                        ,ldstart[3]/60,ldstart[3]%60
        !           605:                                        ,ldend[3]/60,ldend[3]%60);
        !           606:                                sprintf(opt[k++],"Thursday   From %02d:%02d to %02d:%02d"
        !           607:                                        ,ldstart[4]/60,ldstart[4]%60
        !           608:                                        ,ldend[4]/60,ldend[4]%60);
        !           609:                                sprintf(opt[k++],"Friday     From %02d:%02d to %02d:%02d"
        !           610:                                        ,ldstart[5]/60,ldstart[5]%60
        !           611:                                        ,ldend[5]/60,ldend[5]%60);
        !           612:                                sprintf(opt[k++],"Saturday   From %02d:%02d to %02d:%02d"
        !           613:                                        ,ldstart[6]/60,ldstart[6]%60
        !           614:                                        ,ldend[6]/60,ldend[6]%60);
        !           615:                 opt[k][0]=NULL;
        !           616: 
        !           617:                                j=ulist(WIN_ACT|WIN_SAV,0,0,0,&j,0
        !           618:                                        ,"Long Distance Calling Times",opt);
        !           619:                 if(j==-1)
        !           620:                     break;
        !           621:                                sprintf(str,"%02d:%02d",ldstart[j]/60,ldstart[j]%60);
        !           622:                                if(uinput(WIN_MID|WIN_SAV,0,0,"Long Distance Start "
        !           623:                                        "Time",str,5,K_EDIT|K_UPPER)) {
        !           624:                                        ldstart[j]=atoi(str)*60;
        !           625:                                        p=strchr(str,':');
        !           626:                                        if(p)
        !           627:                                                ldstart[j]+=atoi(p+1); }
        !           628:                                sprintf(str,"%02d:%02d",ldend[j]/60,ldend[j]%60);
        !           629:                                if(uinput(WIN_MID|WIN_SAV,0,0,"Long Distance End Time",
        !           630:                                        str,5,K_EDIT|K_UPPER)) {
        !           631:                                        ldend[j]=atoi(str)*60;
        !           632:                                        p=strchr(str,':');
        !           633:                                        if(p)
        !           634:                                                ldend[j]+=atoi(p+1); } }
        !           635:                        break;
        !           636:                case 5:
        !           637: helpbuf=
        !           638: " Phone Can \r\n\r\n"
        !           639: "This is the complete path (drive, directory, and filename) where a\r\n"
        !           640: "&trashcan& file of phone numbers will be kept. Any numbers inside of this\r\n"
        !           641: "trashcan will not be accepted for callback verification by SCB.";
        !           642:                        uinput(WIN_MID,0,0,"Phone Can",canfile
        !           643:                                ,30,K_EDIT|K_UPPER);
        !           644:             break;
        !           645:                case 6:
        !           646: helpbuf=
        !           647: " Validated Phone List \r\n\r\n"
        !           648: "This is the complete path (drive, directory, and filename) where SCB\r\n"
        !           649: "will write a list of numbers that have been verified.\r\n"
        !           650: "\r\n"
        !           651: "Setting this option to the same file as &Phone Can& will keep users from\r\n"
        !           652: "being validated with an already validated phone number.";
        !           653:                        uinput(WIN_MID|WIN_BOT,0,0,"Phone List",addfile
        !           654:                                ,30,K_EDIT|K_UPPER);
        !           655:                        break;
        !           656:                case 7:
        !           657: helpbuf=
        !           658: " Callback Attempts \r\n\r\n"
        !           659: "This is the number of times SCB will attempt to dial out to a phone\r\n"
        !           660: "number.";
        !           661:                        uinput(WIN_MID|WIN_BOT,0,0,"Callback Attempts",callout_attempts
        !           662:                                ,2,K_EDIT|K_NUMBER);
        !           663:             break;
        !           664:                case 8:
        !           665: helpbuf=
        !           666: " Minimum Phone Number Length \r\n\r\n"
        !           667: "This is the minimum number of digits SCB will allow for a phone number.";
        !           668:                        sprintf(str,"%u",min_phone_len);
        !           669:                        uinput(WIN_MID|WIN_BOT,0,0,"Minimum Phone Length",str
        !           670:                                ,2,K_EDIT|K_NUMBER);
        !           671:                        min_phone_len=atoi(str);
        !           672:             break;
        !           673:                case 9:
        !           674: helpbuf=
        !           675: " Maximum Phone Number Length \r\n\r\n"
        !           676: "This is the maximum number of digits SCB will allow for a phone number.";
        !           677:                        sprintf(str,"%u",max_phone_len);
        !           678:                        uinput(WIN_MID|WIN_BOT,0,0,"Maximum Phone Length",str
        !           679:                                ,2,K_EDIT|K_NUMBER);
        !           680:                        max_phone_len=atoi(str);
        !           681:             break;
        !           682:                case 10:
        !           683: helpbuf=
        !           684: " Wait Before Dialing \r\n\r\n"
        !           685: "When the BBS hangs up prior to calling a user, this is the amount of\r\n"
        !           686: "time (in seconds) that the modem will remain hung up before dialing.\r\n"
        !           687: "This is used to insure that the user has completely disconnected.\r\n"
        !           688: "The default setting here is 30 seconds, maximum is 90 seconds.";
        !           689:                        sprintf(str,"%u",hangup_time);
        !           690:                        uinput(WIN_MID|WIN_BOT,0,0,"Wait Before Dialing (in seconds)",str
        !           691:                                ,3,K_EDIT|K_NUMBER);
        !           692:                        hangup_time=atoi(str);
        !           693:                        if(hangup_time>90)
        !           694:                                hangup_time=90;
        !           695:                        break;
        !           696:                case 11:
        !           697: helpbuf=
        !           698: " BBS Area Code \r\n\r\n"
        !           699: "Enter the area code for YOUR BBS here.  A user enters a phone number\r\n"
        !           700: "with this area code, SCB will strip off the area code before attempting\r\n"
        !           701: "to call the user back (setting this to 0 disables it).";
        !           702:             uinput(WIN_MID|WIN_BOT,0,0,"BBS Area Code",bbs_ac
        !           703:                 ,3,K_EDIT|K_NUMBER);
        !           704:             break;
        !           705:                case 12:
        !           706: helpbuf=
        !           707: " Send Message to Sysop \r\n\r\n"
        !           708: "If you wish for SCB to send a message to a Sysop when a user has been\r\n"
        !           709: "verified, set this to the number of the user who is to receive the\r\n"
        !           710: "messages, or set it to 0 to disable this function.";
        !           711:                        uinput(WIN_MID|WIN_BOT,0,0,"Send Message to Sysop - User #",sysop
        !           712:                                ,4,K_EDIT|K_NUMBER);
        !           713:             break;
        !           714: 
        !           715:                case -1:
        !           716: helpbuf=
        !           717: " Save Configuration File \r\n\r\n"
        !           718: "Select &Yes& to save the config file, &No& to quit without saving,\r\n"
        !           719: "or hit  ESC  to go back to the menu.\r\n\r\n";
        !           720:                        i=0;
        !           721:                        strcpy(opt[0],"Yes");
        !           722:                        strcpy(opt[1],"No");
        !           723:                        opt[2][0]=0;
        !           724:                        i=ulist(WIN_MID,0,0,0,&i,0,"Save Config File",opt);
        !           725:                        if(i==-1) break;
        !           726:                        if(i) bail(0);
        !           727:                        if((file=open("SCB.CFG"
        !           728:                                ,O_WRONLY|O_BINARY|O_CREAT|O_DENYALL|O_TRUNC))==-1) {
        !           729:                                textattr(LIGHTGRAY);
        !           730:                                clrscr();
        !           731:                                lprintf("Error opening SCB.CFG\r\n");
        !           732:                                bail(1); }
        !           733:                        if((stream=fdopen(file,"wb"))==NULL) {
        !           734:                                textattr(LIGHTGRAY);
        !           735:                                clrscr();
        !           736:                                lprintf("Error fdopen SCB.CFG\r\n");
        !           737:                                bail(1); }
        !           738:                        str[0]=0;
        !           739:                        fprintf(stream,"%s\r\n",callout_attempts);
        !           740:                        if(options&ALWAYS_VALIDATE) strcat(str,"Y"); else strcat(str,"N");
        !           741:                        if(options&MODIFY_USER_NOTE) strcat(str,"Y"); else strcat(str,"N");
        !           742:                        if(options&START_WITH_0) strcat(str,"Y"); else strcat(str,"N");
        !           743:                        if(options&START_WITH_1) strcat(str,"Y"); else strcat(str,"N");
        !           744:                        if(options&STAY_CONNECTED) strcat(str,"Y"); else strcat(str,"N");
        !           745:                        if(options&SC_LOCAL_ONLY) strcat(str,"Y"); else strcat(str,"N");
        !           746:                        if(options&US_PHONE_FORMAT) strcat(str,"Y"); else strcat(str,"N");
        !           747:                        if(options&ALLOWED_ONLY) strcat(str,"Y"); else strcat(str,"N");
        !           748:                        if(options&SAME_AREA_LD) strcat(str,"Y"); else strcat(str,"N");
        !           749:                        fprintf(stream,"%s\r\n",str);
        !           750:                        fprintf(stream,"%s\r\n",canfile);
        !           751:                        fprintf(stream,"%s\r\n",addfile);
        !           752:                        fprintf(stream,"%s\r\n",credits);
        !           753:                        fprintf(stream,"%s\r\n",sysop);
        !           754:                        fprintf(stream,"%s\r\n",level);
        !           755:                        fprintf(stream,"%s\r\n",flags1);
        !           756:                        fprintf(stream,"%s\r\n",flags2);
        !           757:                        fprintf(stream,"%s\r\n",exempt);
        !           758:                        fprintf(stream,"%s\r\n",restrict);
        !           759:                        fprintf(stream,"%s\r\n",expiration);
        !           760:                        fprintf(stream,"%s\r\n",minutes);
        !           761:                        fprintf(stream,"%s\r\n",flags3);
        !           762:                        fprintf(stream,"%s\r\n",flags4);
        !           763:                        for(i=0;i<7;i++) {
        !           764:                                fprintf(stream,"%u\r\n",ldstart[i]);
        !           765:                                fprintf(stream,"%u\r\n",ldend[i]); }
        !           766:                        fprintf(stream,"%u\r\n",min_phone_len);
        !           767:                        fprintf(stream,"%u\r\n",max_phone_len);
        !           768:                        fprintf(stream,"%s\r\n",bbs_ac);
        !           769:                        fprintf(stream,"%u\r\n",hangup_time);
        !           770:                        fprintf(stream,"%s\r\n","");    // regnum
        !           771:                        fclose(stream);
        !           772:                        bail(0);
        !           773:        }
        !           774: }
        !           775: }
        !           776: /****************************************************************************/
        !           777: /* Checks the disk drive for the existance of a file. Returns 1 if it          */
        !           778: /* exists, 0 if it doesn't.                                                                                                    */
        !           779: /* Called from upload                                                                                                          */
        !           780: /****************************************************************************/
        !           781: char fexist(char *filespec)
        !           782: {
        !           783:        struct ffblk f;
        !           784: 
        !           785: if(findfirst(filespec,&f,0)==NULL)
        !           786:        return(1);
        !           787: return(0);
        !           788: }

unix.superglobalmegacorp.com

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