Annotation of sbbs/sbbs2/scb/scbcfg.c, revision 1.1.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.