Annotation of sbbs/sbbs2/scfg/scfgnet.c, revision 1.1.1.1

1.1       root        1: #line 2 "SCFGNET.C"
                      2: 
                      3: /* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
                      4: 
                      5: #include "scfg.h"
                      6: 
                      7: char *wday[]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
                      8: 
                      9: char *daystr(char days);
                     10: 
                     11: 
                     12: void qhub_edit(int num);
                     13: void phub_edit(int num);
                     14: char *daystr(char days);
                     15: void qhub_sub_edit(uint num);
                     16: 
                     17: /****************************************************************************/
                     18: /* Returns the FidoNet address kept in str as ASCII.                        */
                     19: /****************************************************************************/
                     20: faddr_t atofaddr(char *str)
                     21: {
                     22:     char *p;
                     23:     faddr_t addr;
                     24: 
                     25: addr.zone=addr.net=addr.node=addr.point=0;
                     26: if((p=strchr(str,':'))!=NULL) {
                     27:     addr.zone=atoi(str);
                     28:     addr.net=atoi(p+1); }
                     29: else {
                     30:     if(total_faddrs)
                     31:                addr.zone=faddr[0].zone;
                     32:     else
                     33:         addr.zone=1;
                     34:     addr.net=atoi(str); }
                     35: if(!addr.zone)              /* no such thing as zone 0 */
                     36:     addr.zone=1;
                     37: if((p=strchr(str,'/'))!=NULL)
                     38:     addr.node=atoi(p+1);
                     39: else {
                     40:     if(total_faddrs)
                     41:                addr.net=faddr[0].net;
                     42:     else
                     43:         addr.net=1;
                     44:     addr.node=atoi(str); }
                     45: if((p=strchr(str,'.'))!=NULL)
                     46:     addr.point=atoi(p+1);
                     47: return(addr);
                     48: }
                     49: 
                     50: /****************************************************************************/
                     51: /* Returns an ASCII string for FidoNet address 'addr'                       */
                     52: /****************************************************************************/
                     53: char *faddrtoa(faddr_t addr)
                     54: {
                     55:     static char str[25];
                     56:     char point[25];
                     57: 
                     58: sprintf(str,"%u:%u/%u",addr.zone,addr.net,addr.node);
                     59: if(addr.point) {
                     60:     sprintf(point,".%u",addr.point);
                     61:     strcat(str,point); }
                     62: return(str);
                     63: }
                     64: 
                     65: 
                     66: uint getsub()
                     67: {
                     68:        static int grp_dflt,sub_dflt,grp_bar,sub_bar;
                     69:        char str[81];
                     70:        int i,j,k;
                     71:        uint subnum[MAX_OPTS+1];
                     72: 
                     73: while(1) {
                     74:        for(i=0;i<total_grps && i<MAX_OPTS;i++)
                     75:                sprintf(opt[i],"%-25s",grp[i]->lname);
                     76:        opt[i][0]=0;
                     77:        i=ulist(WIN_SAV|WIN_RHT|WIN_BOT,0,0,45,&grp_dflt,&grp_bar
                     78:                ,"Message Groups"
                     79:                ,opt);
                     80:        if(i==-1)
                     81:                return(-1);
                     82:        for(j=k=0;j<total_subs && k<MAX_OPTS;j++)
                     83:                if(sub[j]->grp==i) {
                     84:                        sprintf(opt[k],"%-25s",sub[j]->lname);
                     85:                        subnum[k++]=j; }
                     86:        opt[k][0]=0;
                     87:        sprintf(str,"%s Sub-boards",grp[i]->sname);
                     88:        j=ulist(WIN_RHT|WIN_BOT|WIN_SAV,0,0,45,&sub_dflt,&sub_bar,str,opt);
                     89:        if(j==-1)
                     90:                continue;
                     91:        return(subnum[j]); }
                     92: 
                     93: }
                     94: 
                     95: void net_cfg()
                     96: {
                     97:        static  int net_dflt,qnet_dflt,pnet_dflt,fnet_dflt,inet_dflt
                     98:                        ,qhub_dflt,phub_dflt;
                     99:        char    str[81],done,*p;
                    100:        int     i,j,k,l,m,n;
                    101: 
                    102: while(1) {
                    103:        i=0;
                    104:        strcpy(opt[i++],"QWK Packet Networks");
                    105:        strcpy(opt[i++],"FidoNet EchoMail and NetMail");
                    106:        strcpy(opt[i++],"PostLink Networks");
                    107:        strcpy(opt[i++],"Internet NetMail");
                    108:        opt[i][0]=0;
                    109:        SETHELP(WHERE);
                    110: /*
                    111: &Configure Networks:&
                    112: 
                    113: This is the network configuration menu. Select the type of network
                    114: technology that you want to configure.
                    115: */
                    116:        i=ulist(WIN_ORG|WIN_ACT|WIN_CHE,0,0,0,&net_dflt,0,"Networks",opt);
                    117:        if(i==0) {      /* QWK net stuff */
                    118:                done=0;
                    119:                while(!done) {
                    120:                        i=0;
                    121:                        strcpy(opt[i++],"Network Hubs...");
                    122:                        strcpy(opt[i++],"Default Tagline");
                    123:                        opt[i][0]=0;
                    124:                        SETHELP(WHERE);
                    125: /*
                    126: &QWK Packet Networks:&
                    127: 
                    128: From this menu you can configure the default tagline to use for
                    129: outgoing messages on QWK networked sub-boards, or you can select
                    130: &Network Hubs...& to add, delete, or configure QWK hubs that your system
                    131: calls to exchange packets with.
                    132: */
                    133:                        i=ulist(WIN_ACT|WIN_RHT|WIN_BOT|WIN_CHE,0,0,0,&qnet_dflt,0
                    134:                                ,"QWK Packet Networks",opt);
                    135:                        savnum=0;
                    136:                        switch(i) {
                    137:                                case -1:        /* ESC */
                    138:                                        done=1;
                    139:                                        break;
                    140:                                case 1:
                    141:                                        SETHELP(WHERE);
                    142: /*
                    143: &QWK Network Default Tagline:&
                    144: 
                    145: This is the default tagline to use for outgoing messages on QWK
                    146: networked sub-boards. This default can be overridden on a per sub-board
                    147: basis with the sub-board configuration &Network Options...&.
                    148: */
                    149:                                        uinput(WIN_MID|WIN_SAV,0,0,nulstr
                    150:                                                ,qnet_tagline,63,K_MSG|K_EDIT);
                    151:                                        break;
                    152:                                case 0:
                    153:                                        while(1) {
                    154:                                                for(i=0;i<total_qhubs && i<MAX_OPTS;i++)
                    155:                                                        sprintf(opt[i],"%-8.8s",qhub[i]->id);
                    156:                                                opt[i][0]=0;
                    157:                                                i=WIN_ACT|WIN_RHT|WIN_SAV;
                    158:                                                if(total_qhubs<MAX_OPTS)
                    159:                                                        i|=WIN_INS|WIN_INSACT|WIN_XTR;
                    160:                                                if(total_qhubs)
                    161:                                                        i|=WIN_DEL;
                    162:                                                savnum=0;
                    163:                                                SETHELP(WHERE);
                    164: /*
                    165: &QWK Network Hubs:&
                    166: 
                    167: This is a list of QWK network hubs that your system calls to exchange
                    168: packets with.
                    169: 
                    170: To add a hub, select the desired location with the arrow keys and hit
                    171:  INS .
                    172: 
                    173: To delete a hub, select it and hit  DEL .
                    174: 
                    175: To configure a hub, select it and hit  ENTER .
                    176: */
                    177:                                                i=ulist(i,0,0,0,&qhub_dflt,0
                    178:                                                        ,"QWK Network Hubs",opt);
                    179:                                                if(i==-1)
                    180:                                                        break;
                    181:                                                if((i&MSK_ON)==MSK_INS) {
                    182:                                                        i&=MSK_OFF;
                    183:                                                        if((qhub=(qhub_t **)REALLOC(qhub
                    184:                                 ,sizeof(qhub_t *)*(total_qhubs+1)))==NULL) {
                    185:                                 errormsg(WHERE,ERR_ALLOC,nulstr
                    186:                                     ,sizeof(qhub_t *)*(total_qhubs+1));
                    187:                                                                total_qhubs=0;
                    188:                                                                bail(1);
                    189:                                 continue; }
                    190: 
                    191:                                                        savnum=1;
                    192:                                                        SETHELP(WHERE);
                    193: /*
                    194: &QWK Network Hub System ID:&
                    195: 
                    196: This is the QWK System ID of this hub. It is used for incoming and
                    197: outgoing network packets and must be accurate.
                    198: */
                    199:                                                        if(uinput(WIN_MID|WIN_SAV,0,0
                    200:                                                                ,"System ID",str,8,K_UPPER)<1)
                    201:                                                                continue;
                    202: 
                    203:                                                        for(j=total_qhubs;j>i;j--)
                    204:                                 qhub[j]=qhub[j-1];
                    205:                                                        if((qhub[i]=(qhub_t *)MALLOC(sizeof(qhub_t)))
                    206:                                                                ==NULL) {
                    207:                                                                errormsg(WHERE,ERR_ALLOC,nulstr
                    208:                                                                        ,sizeof(qhub_t));
                    209:                                                                continue; }
                    210:                                                        memset(qhub[i],0,sizeof(qhub_t));
                    211:                                                        strcpy(qhub[i]->id,str);
                    212:                                                        strcpy(qhub[i]->pack,"%!pkzip %f %s");
                    213:                                                        strcpy(qhub[i]->unpack,"%!pkunzip -o %f %g %s");
                    214:                                                        strcpy(qhub[i]->call,"%!qnet");
                    215:                                                        qhub[i]->node=1;
                    216:                                                        qhub[i]->days=0xff; /* all days */
                    217:                                                        total_qhubs++;
                    218:                                                        changes=1;
                    219:                                                        continue; }
                    220:                                                if((i&MSK_ON)==MSK_DEL) {
                    221:                                                        i&=MSK_OFF;
                    222:                                                        FREE(qhub[i]->mode);
                    223:                                                        FREE(qhub[i]->conf);
                    224:                                                        FREE(qhub[i]->sub);
                    225:                                                        FREE(qhub[i]);
                    226:                                                        total_qhubs--;
                    227:                                                        while(i<total_qhubs) {
                    228:                                                                qhub[i]=qhub[i+1];
                    229:                                                                i++; }
                    230:                                                        changes=1;
                    231:                                                        continue; }
                    232:                                                qhub_edit(i); }
                    233:                                        break; } } }
                    234: 
                    235:        else if(i==1) {         /* FidoNet Stuff */
                    236:                done=0;
                    237:                while(!done) {
                    238:                        i=0;
                    239:                        sprintf(opt[i++],"%-27.27s%s"
                    240:                                ,"System Addresses",total_faddrs ? faddrtoa(faddr[0])
                    241:                                        : nulstr);
                    242:                        sprintf(opt[i++],"%-27.27s%s"
                    243:                                ,"Default Outbound Address"
                    244:                                ,dflt_faddr.zone ? faddrtoa(dflt_faddr) : "No");
                    245:                        sprintf(opt[i++],"%-27.27s"
                    246:                                ,"Default Origin Line");
                    247:                        sprintf(opt[i++],"%-27.27s%.40s"
                    248:                                ,"NetMail Semaphore",netmail_sem);
                    249:                        sprintf(opt[i++],"%-27.27s%.40s"
                    250:                                ,"EchoMail Semaphore",echomail_sem);
                    251:                        sprintf(opt[i++],"%-27.27s%.40s"
                    252:                                ,"Inbound File Directory",fidofile_dir);
                    253:                        sprintf(opt[i++],"%-27.27s%.40s"
                    254:                                ,"EchoMail Base Directory",echomail_dir);
                    255:                        sprintf(opt[i++],"%-27.27s%.40s"
                    256:                                ,"NetMail Directory",netmail_dir);
                    257:                        sprintf(opt[i++],"%-27.27s%s"
                    258:                                ,"Allow Sending of NetMail"
                    259:                                ,netmail_misc&NMAIL_ALLOW ? "Yes":"No");
                    260:                        sprintf(opt[i++],"%-27.27s%s"
                    261:                                ,"Allow File Attachments"
                    262:                                ,netmail_misc&NMAIL_FILE ? "Yes":"No");
                    263:                        sprintf(opt[i++],"%-27.27s%s"
                    264:                                ,"Send NetMail Using Alias"
                    265:                                ,netmail_misc&NMAIL_ALIAS ? "Yes":"No");
                    266:                        sprintf(opt[i++],"%-27.27s%s"
                    267:                                ,"NetMail Defaults to Crash"
                    268:                                ,netmail_misc&NMAIL_CRASH ? "Yes":"No");
                    269:                        sprintf(opt[i++],"%-27.27s%s"
                    270:                                ,"NetMail Defaults to Direct"
                    271:                                ,netmail_misc&NMAIL_DIRECT ? "Yes":"No");
                    272:                        sprintf(opt[i++],"%-27.27s%s"
                    273:                                ,"NetMail Defaults to Hold"
                    274:                                ,netmail_misc&NMAIL_HOLD ? "Yes":"No");
                    275:                        sprintf(opt[i++],"%-27.27s%s"
                    276:                                ,"Kill NetMail After Sent"
                    277:                                ,netmail_misc&NMAIL_KILL ? "Yes":"No");
                    278:                        sprintf(opt[i++],"%-27.27s%lu"
                    279:                                ,"Cost to Send NetMail",netmail_cost);
                    280:                        opt[i][0]=0;
                    281:                        SETHELP(WHERE);
                    282: /*
                    283: &FidoNet EchoMail and NetMail:&
                    284: 
                    285: This menu contains configuration options that pertain specifically to
                    286: networking E-mail (NetMail) and sub-boards (EchoMail) through networks
                    287: using FidoNet technology.
                    288: */
                    289:                        i=ulist(WIN_ACT|WIN_MID|WIN_CHE,0,0,60,&fnet_dflt,0
                    290:                                ,"FidoNet EchoMail and NetMail",opt);
                    291:                        savnum=0;
                    292:                        switch(i) {
                    293:                                case -1:        /* ESC */
                    294:                                        done=1;
                    295:                                        break;
                    296:                                case 0:
                    297:                                        SETHELP(WHERE);
                    298: /*
                    299: &System FidoNet Addresses:&
                    300: 
                    301: This is the FidoNet address of this system used to receive NetMail.
                    302: The Main address is also used as the default address for sub-boards.
                    303: Format: &Zone:Net/Node[.Point]&
                    304: */
                    305:                                        k=l=0;
                    306:                                        while(1) {
                    307:                                                for(i=0;i<total_faddrs && i<MAX_OPTS;i++) {
                    308:                                                        if(i==0)
                    309:                                                                strcpy(str,"Main");
                    310:                                                        else
                    311:                                                                sprintf(str,"AKA %u",i);
                    312:                                                        sprintf(opt[i],"%-8.8s %-16s"
                    313:                                                                ,str,faddrtoa(faddr[i])); }
                    314:                                                opt[i][0]=0;
                    315:                                                j=WIN_RHT|WIN_SAV|WIN_ACT|WIN_INSACT;
                    316:                                                if(total_faddrs<MAX_OPTS)
                    317:                                                        j|=WIN_INS|WIN_XTR;
                    318:                                                if(total_faddrs)
                    319:                                                        j|=WIN_DEL;
                    320:                                                i=ulist(j,0,0,0,&k,&l
                    321:                                                        ,"System Addresses",opt);
                    322:                                                if(i==-1)
                    323:                                                        break;
                    324:                                                if((i&MSK_ON)==MSK_INS) {
                    325:                                                        i&=MSK_OFF;
                    326: 
                    327:                                                        if(!total_faddrs)
                    328:                                                                strcpy(str,"1:1/0");
                    329:                                                        else
                    330:                                                                strcpy(str,faddrtoa(faddr[0]));
                    331:                                                        if(!uinput(WIN_MID|WIN_SAV,0,0,"Address"
                    332:                                                                ,str,25,K_EDIT|K_UPPER))
                    333:                                                                continue;
                    334: 
                    335:                                                        if((faddr=(faddr_t *)REALLOC(faddr
                    336:                                 ,sizeof(faddr_t)*(total_faddrs+1)))==NULL) {
                    337:                                 errormsg(WHERE,ERR_ALLOC,nulstr
                    338:                                     ,sizeof(faddr_t)*total_faddrs+1);
                    339:                                                                total_faddrs=0;
                    340:                                                                bail(1);
                    341:                                 continue; }
                    342: 
                    343:                                                        for(j=total_faddrs;j>i;j--)
                    344:                                 faddr[j]=faddr[j-1];
                    345: 
                    346:                                                        faddr[i]=atofaddr(str);
                    347:                                                        total_faddrs++;
                    348:                                                        changes=1;
                    349:                                                        continue; }
                    350:                                                if((i&MSK_ON)==MSK_DEL) {
                    351:                                                        i&=MSK_OFF;
                    352:                                                        total_faddrs--;
                    353:                                                        while(i<total_faddrs) {
                    354:                                                                faddr[i]=faddr[i+1];
                    355:                                                                i++; }
                    356:                                                        changes=1;
                    357:                                                        continue; }
                    358:                                                strcpy(str,faddrtoa(faddr[i]));
                    359:                                                uinput(WIN_MID|WIN_SAV,0,0,"Address"
                    360:                                                        ,str,25,K_EDIT);
                    361:                                                faddr[i]=atofaddr(str); }
                    362:                     break;
                    363:                                case 1:
                    364:                                        i=0;
                    365:                                        strcpy(opt[0],"Yes");
                    366:                                        strcpy(opt[1],"No");
                    367:                                        opt[2][0]=0;
                    368:                                        SETHELP(WHERE);
                    369: /*
                    370: &Use Default Outbound NetMail Address:&
                    371: 
                    372: If you would like to have a default FidoNet address adding to outbound
                    373: NetMail mail messages that do not have an address specified, select
                    374: &Yes&.
                    375: */
                    376:                                        i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
                    377:                                                ,"Use Default Outbound NetMail Address",opt);
                    378:                                        if(i==1) {
                    379:                                                if(dflt_faddr.zone)
                    380:                                                        changes=1;
                    381:                                                dflt_faddr.zone=0;
                    382:                                                break; }
                    383:                                        if(i==-1)
                    384:                                                break;
                    385:                                        if(!dflt_faddr.zone) {
                    386:                                                dflt_faddr.zone=1;
                    387:                                                changes=1; }
                    388:                                        strcpy(str,faddrtoa(dflt_faddr));
                    389:                                        SETHELP(WHERE);
                    390: /*
                    391: &Default Outbound FidoNet NetMail Address:&
                    392: 
                    393: If you would like to automatically add a FidoNet address to outbound
                    394: NetMail that does not have an address specified, set this option
                    395: to that address. This is useful for Fido/UUCP gateway mail.
                    396: Format: &Zone:Net/Node[.Point]&
                    397: */
                    398:                                        if(uinput(WIN_MID|WIN_SAV,0,0,"Outbound Address"
                    399:                                                ,str,25,K_EDIT)) {
                    400:                                                dflt_faddr=atofaddr(str);
                    401:                                                changes=1; }
                    402:                     break;
                    403:                                case 2:
                    404:                                        SETHELP(WHERE);
                    405: /*
                    406: &Default Origin Line:&
                    407: 
                    408: This is the default origin line used for sub-boards networked via
                    409: EchoMail. This origin line can be overridden on a per sub-board basis
                    410: with the sub-board configuration &Network Options...&.
                    411: */
                    412:                                        uinput(WIN_MID|WIN_SAV,0,0,"* Origin"
                    413:                                                ,origline,50,K_EDIT);
                    414:                     break;
                    415:                                case 3:
                    416:                                        SETHELP(WHERE);
                    417: /*
                    418: &NetMail Semaphore File:&
                    419: 
                    420: This is a filename that will be used as a semaphore (signal) to your
                    421: FidoNet front-end that new NetMail has been created and the messages
                    422: should be re-scanned.
                    423: */
                    424:                                        uinput(WIN_MID|WIN_SAV,0,0,"NetMail Semaphore"
                    425:                                                ,netmail_sem,50,K_EDIT|K_UPPER);
                    426:                     break;
                    427:                                case 4:
                    428:                                        SETHELP(WHERE);
                    429: /*
                    430: &EchoMail Semaphore File:&
                    431: 
                    432: This is a filename that will be used as a semaphore (signal) to your
                    433: FidoNet front-end that new EchoMail has been created and the messages
                    434: should be re-scanned.
                    435: */
                    436:                                        uinput(WIN_MID|WIN_SAV,0,0,"EchoMail Semaphore"
                    437:                                                ,echomail_sem,50,K_EDIT|K_UPPER);
                    438:                     break;
                    439:                                case 5:
                    440:                                        SETHELP(WHERE);
                    441: /*
                    442: &Inbound File Directory:&
                    443: 
                    444: This directory is where inbound files are placed. This directory is
                    445: only used when an incoming message has a file attached.
                    446: */
                    447:                                        uinput(WIN_MID|WIN_SAV,0,0,"Inbound Files"
                    448:                                                ,fidofile_dir,50,K_EDIT|K_UPPER);
                    449:                     break;
                    450:                                case 6:
                    451:                                        SETHELP(WHERE);
                    452: /*
                    453: &EchoMail Base Directory:&
                    454: 
                    455: This is an optional field used as a base directory for the location
                    456: of EchoMail messages for sub-boards that do not have a specified
                    457: &EchoMail Storage Directory&. If a sub-board does not have a specified
                    458: storage directory for EchoMail, its messages will be imported from and
                    459: exported to a sub-directory off of this base directory. The name of the
                    460: sub-directory is the same as the internal code for the sub-directory.
                    461: 
                    462: If all EchoMail sub-boards have specified EchoMail storage directories,
                    463: this option is not used at all.
                    464: */
                    465:                                        uinput(WIN_MID|WIN_SAV,0,0,"EchoMail Base"
                    466:                                                ,echomail_dir,50,K_EDIT|K_UPPER);
                    467:                     break;
                    468:                                case 7:
                    469:                                        SETHELP(WHERE);
                    470: /*
                    471: &NetMail Directory:&
                    472: 
                    473: This is the directory where NetMail will be imported from and exported
                    474: to.
                    475: */
                    476:                                        uinput(WIN_MID|WIN_SAV,0,0,"NetMail"
                    477:                                                ,netmail_dir,50,K_EDIT|K_UPPER);
                    478:                     break;
                    479:                                case 8:
                    480:                                        i=0;
                    481:                                        strcpy(opt[0],"Yes");
                    482:                                        strcpy(opt[1],"No");
                    483:                                        opt[2][0]=0;
                    484:                                        SETHELP(WHERE);
                    485: /*
                    486: &Allow Users to Send NetMail:&
                    487: 
                    488: If you are on a FidoNet style network and want your users to be allowed
                    489: to send NetMail, set this option to &Yes&.
                    490: */
                    491:                                        i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
                    492:                                                ,"Allow Users to Send NetMail",opt);
                    493:                                        if(!i && !(netmail_misc&NMAIL_ALLOW)) {
                    494:                                                changes=1;
                    495:                                                netmail_misc|=NMAIL_ALLOW; }
                    496:                                        else if(i==1 && netmail_misc&NMAIL_ALLOW) {
                    497:                                                changes=1;
                    498:                                                netmail_misc&=~NMAIL_ALLOW; }
                    499:                                        break;
                    500:                                case 9:
                    501:                                        i=0;
                    502:                                        strcpy(opt[0],"Yes");
                    503:                                        strcpy(opt[1],"No");
                    504:                                        opt[2][0]=0;
                    505:                                        SETHELP(WHERE);
                    506: /*
                    507: &Allow Users to Send NetMail File Attachments:&
                    508: 
                    509: If you are on a FidoNet style network and want your users to be allowed
                    510: to send NetMail file attachments, set this option to &Yes&.
                    511: */
                    512:                                        i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
                    513:                                                ,"Allow Users to Send NetMail File Attachments",opt);
                    514:                                        if(!i && !(netmail_misc&NMAIL_FILE)) {
                    515:                                                changes=1;
                    516:                                                netmail_misc|=NMAIL_FILE; }
                    517:                                        else if(i==1 && netmail_misc&NMAIL_FILE) {
                    518:                                                changes=1;
                    519:                                                netmail_misc&=~NMAIL_FILE; }
                    520:                     break;
                    521:                                case 10:
                    522:                                        i=1;
                    523:                                        strcpy(opt[0],"Yes");
                    524:                                        strcpy(opt[1],"No");
                    525:                                        opt[2][0]=0;
                    526:                                        SETHELP(WHERE);
                    527: /*
                    528: &Use Aliases in NetMail:&
                    529: 
                    530: If you allow aliases on your system and wish users to have their NetMail
                    531: contain their alias as the &From User&, set this option to &Yes&. If you
                    532: want all NetMail to be sent using users' real names, set this option to
                    533: &No&.
                    534: */
                    535:                                        i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
                    536:                                                ,"Use Aliases in NetMail",opt);
                    537:                                        if(!i && !(netmail_misc&NMAIL_ALIAS)) {
                    538:                                                changes=1;
                    539:                                                netmail_misc|=NMAIL_ALIAS; }
                    540:                                        else if(i==1 && netmail_misc&NMAIL_ALIAS) {
                    541:                                                changes=1;
                    542:                                                netmail_misc&=~NMAIL_ALIAS; }
                    543:                     break;
                    544:                                case 11:
                    545:                                        i=1;
                    546:                                        strcpy(opt[0],"Yes");
                    547:                                        strcpy(opt[1],"No");
                    548:                                        opt[2][0]=0;
                    549:                                        SETHELP(WHERE);
                    550: /*
                    551: &NetMail Defaults to Crash Status:&
                    552: 
                    553: If you want all NetMail to default to crash (send immediately) status,
                    554: set this option to &Yes&.
                    555: */
                    556:                                        i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
                    557:                                                ,"NetMail Defaults to Crash Status",opt);
                    558:                                        if(!i && !(netmail_misc&NMAIL_CRASH)) {
                    559:                                                changes=1;
                    560:                                                netmail_misc|=NMAIL_CRASH; }
                    561:                                        else if(i==1 && netmail_misc&NMAIL_CRASH) {
                    562:                                                changes=1;
                    563:                                                netmail_misc&=~NMAIL_CRASH; }
                    564:                     break;
                    565:                                case 12:
                    566:                                        i=1;
                    567:                                        strcpy(opt[0],"Yes");
                    568:                                        strcpy(opt[1],"No");
                    569:                                        opt[2][0]=0;
                    570:                                        SETHELP(WHERE);
                    571: /*
                    572: &NetMail Defaults to Direct Status:&
                    573: 
                    574: If you want all NetMail to default to direct (send directly) status,
                    575: set this option to &Yes&.
                    576: */
                    577:                                        i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
                    578:                                                ,"NetMail Defaults to Direct Status",opt);
                    579:                                        if(!i && !(netmail_misc&NMAIL_DIRECT)) {
                    580:                                                changes=1;
                    581:                                                netmail_misc|=NMAIL_DIRECT; }
                    582:                                        else if(i==1 && netmail_misc&NMAIL_DIRECT) {
                    583:                                                changes=1;
                    584:                                                netmail_misc&=~NMAIL_DIRECT; }
                    585:                     break;
                    586:                                case 13:
                    587:                                        i=1;
                    588:                                        strcpy(opt[0],"Yes");
                    589:                                        strcpy(opt[1],"No");
                    590:                                        opt[2][0]=0;
                    591:                                        SETHELP(WHERE);
                    592: /*
                    593: &NetMail Defaults to Hold Status:&
                    594: 
                    595: If you want all NetMail to default to hold status, set this option to
                    596: &Yes&.
                    597: */
                    598:                                        i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
                    599:                                                ,"NetMail Defaults to Hold Status",opt);
                    600:                                        if(!i && !(netmail_misc&NMAIL_HOLD)) {
                    601:                                                changes=1;
                    602:                                                netmail_misc|=NMAIL_HOLD; }
                    603:                                        else if(i==1 && netmail_misc&NMAIL_HOLD) {
                    604:                                                changes=1;
                    605:                                                netmail_misc&=~NMAIL_HOLD; }
                    606:                     break;
                    607:                                case 14:
                    608:                                        i=0;
                    609:                                        strcpy(opt[0],"Yes");
                    610:                                        strcpy(opt[1],"No");
                    611:                                        opt[2][0]=0;
                    612:                                        SETHELP(WHERE);
                    613: /*
                    614: &Kill NetMail After it is Sent:&
                    615: 
                    616: If you want NetMail messages to be deleted after they are successfully
                    617: sent, set this option to &Yes&.
                    618: */
                    619:                                        i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
                    620:                                                ,"Kill NetMail After it is Sent",opt);
                    621:                                        if(!i && !(netmail_misc&NMAIL_KILL)) {
                    622:                                                changes=1;
                    623:                                                netmail_misc|=NMAIL_KILL; }
                    624:                                        else if(i==1 && netmail_misc&NMAIL_KILL) {
                    625:                                                changes=1;
                    626:                                                netmail_misc&=~NMAIL_KILL; }
                    627:                     break;
                    628:                                case 15:
                    629:                                        ultoa(netmail_cost,str,10);
                    630:                                        SETHELP(WHERE);
                    631: /*
                    632: &Cost in Credits to Send NetMail:&
                    633: 
                    634: This is the number of credits it will cost your users to send NetMail.
                    635: If you want the sending of NetMail to be free, set this value to &0&.
                    636: */
                    637:                                        uinput(WIN_MID|WIN_SAV,0,0
                    638:                                                ,"Cost in Credits to Send NetMail"
                    639:                                                ,str,10,K_EDIT|K_NUMBER);
                    640:                                        netmail_cost=atol(str);
                    641:                                        break; } } }
                    642:        else if(i==2) {
                    643:                done=0;
                    644:                while(!done) {
                    645:                        i=0;
                    646:                        strcpy(opt[i++],"Network Hubs...");
                    647:                        sprintf(opt[i++],"%-20.20s%-12s","Site Name",sys_psname);
                    648:                        sprintf(opt[i++],"%-20.20s%-lu","Site Number",sys_psnum);
                    649:                        opt[i][0]=0;
                    650:                        SETHELP(WHERE);
                    651: /*
                    652: &PostLink Networks:&
                    653: 
                    654: From this menu you can configure the default tagline to use for
                    655: outgoing messages on QWK networked sub-boards, or you can select
                    656: &Network Hubs...& to add, delete, or configure QWK hubs that your system
                    657: calls to exchange packets with.
                    658: */
                    659:                        i=ulist(WIN_ACT|WIN_RHT|WIN_BOT|WIN_CHE,0,0,0,&pnet_dflt,0
                    660:                                ,"PostLink Networks",opt);
                    661:                        savnum=0;
                    662:                        switch(i) {
                    663:                                case -1:        /* ESC */
                    664:                                        done=1;
                    665:                                        break;
                    666:                                case 1:
                    667:                                        SETHELP(WHERE);
                    668: /*
                    669: &PostLink Site Name:&
                    670: 
                    671: If your system is networked via PostLink or PCRelay, this should be the
                    672: Site Name for your BBS.
                    673: */
                    674:                                        uinput(WIN_MID|WIN_SAV,0,0,"Site Name"
                    675:                                                ,sys_psname,12,K_UPPER|K_EDIT);
                    676:                                        break;
                    677:                                case 2:
                    678:                                        SETHELP(WHERE);
                    679: /*
                    680: &PostLink Site Number:&
                    681: 
                    682: If your system is networked via PostLink or PCRelay, this should be the
                    683: Site Number for your BBS.
                    684: */
                    685:                                        ultoa(sys_psnum,str,10);
                    686:                                        uinput(WIN_MID|WIN_SAV,0,0,"Site Number"
                    687:                                                ,str,10,K_NUMBER|K_EDIT);
                    688:                                        sys_psnum=atol(str);
                    689:                     break;
                    690:                                case 0:
                    691:                                        while(1) {
                    692:                                                for(i=0;i<total_phubs && i<MAX_OPTS;i++)
                    693:                                                        sprintf(opt[i],"%-10.10s",phub[i]->name);
                    694:                                                opt[i][0]=0;
                    695:                                                i=WIN_ACT|WIN_RHT|WIN_SAV;
                    696:                                                if(total_phubs<MAX_OPTS)
                    697:                                                        i|=WIN_INS|WIN_INSACT|WIN_XTR;
                    698:                                                if(total_phubs)
                    699:                                                        i|=WIN_DEL;
                    700:                                                savnum=0;
                    701:                                                SETHELP(WHERE);
                    702: /*
                    703: &PostLink Network Hubs:&
                    704: 
                    705: This is a list of PostLink and/or PCRelay network hubs that your system
                    706: calls to exchange packets with.
                    707: 
                    708: To add a hub, select the desired location with the arrow keys and hit
                    709:  INS .
                    710: 
                    711: To delete a hub, select it and hit  DEL .
                    712: 
                    713: To configure a hub, select it and hit  ENTER .
                    714: */
                    715:                                                i=ulist(i,0,0,0,&phub_dflt,0
                    716:                                                        ,"PostLink Hubs",opt);
                    717:                                                if(i==-1)
                    718:                                                        break;
                    719:                                                if((i&MSK_ON)==MSK_INS) {
                    720:                                                        i&=MSK_OFF;
                    721:                                                        if((phub=(phub_t **)REALLOC(phub
                    722:                                 ,sizeof(phub_t *)*(total_phubs+1)))==NULL) {
                    723:                                 errormsg(WHERE,ERR_ALLOC,nulstr
                    724:                                     ,sizeof(phub_t *)*(total_phubs+1));
                    725:                                                                total_phubs=0;
                    726:                                                                bail(1);
                    727:                                 continue; }
                    728: 
                    729:                                                        savnum=1;
                    730:                                                        SETHELP(WHERE);
                    731: /*
                    732: &Network Hub Site Name:&
                    733: 
                    734: This is the Site Name of this hub. It is used for only for reference.
                    735: */
                    736:                                                        if(uinput(WIN_MID|WIN_SAV,0,0
                    737:                                                                ,"Site Name",str,10,K_UPPER)<1)
                    738:                                                                continue;
                    739: 
                    740:                                                        for(j=total_phubs;j>i;j--)
                    741:                                 phub[j]=phub[j-1];
                    742: 
                    743:                                                        if((phub[i]=(phub_t *)MALLOC(sizeof(phub_t)))
                    744:                                                                ==NULL) {
                    745:                                                                errormsg(WHERE,ERR_ALLOC,nulstr
                    746:                                                                        ,sizeof(phub_t));
                    747:                                                                continue; }
                    748:                                                        memset(phub[i],0,sizeof(phub_t));
                    749:                                                        strcpy(phub[i]->name,str);
                    750:                                                        strcpy(phub[i]->call,"%!pnet");
                    751:                                                        phub[i]->node=1;
                    752:                                                        phub[i]->days=0xff; /* all days */
                    753:                                                        total_phubs++;
                    754:                                                        changes=1;
                    755:                                                        continue; }
                    756:                                                if((i&MSK_ON)==MSK_DEL) {
                    757:                                                        i&=MSK_OFF;
                    758:                                                        FREE(phub[i]);
                    759:                                                        total_phubs--;
                    760:                                                        while(i<total_phubs) {
                    761:                                                                phub[i]=phub[i+1];
                    762:                                                                i++; }
                    763:                                                        changes=1;
                    764:                                                        continue; }
                    765:                                                phub_edit(i); }
                    766:                     break; } } }
                    767: 
                    768:        else if(i==3) {         /* Internet */
                    769:                done=0;
                    770:                while(!done) {
                    771:                        i=0;
                    772:                        sprintf(opt[i++],"%-27.27s%s"
                    773:                                ,"System Address",sys_inetaddr);
                    774:                        sprintf(opt[i++],"%-27.27s%.40s"
                    775:                                ,"NetMail Semaphore",inetmail_sem);
                    776:                        sprintf(opt[i++],"%-27.27s%s"
                    777:                                ,"Allow Sending of NetMail"
                    778:                                ,inetmail_misc&NMAIL_ALLOW ? "Yes":"No");
                    779:                        sprintf(opt[i++],"%-27.27s%s"
                    780:                                ,"Allow File Attachments"
                    781:                                ,inetmail_misc&NMAIL_FILE ? "Yes":"No");
                    782:                        sprintf(opt[i++],"%-27.27s%s"
                    783:                                ,"Send NetMail Using Alias"
                    784:                                ,inetmail_misc&NMAIL_ALIAS ? "Yes":"No");
                    785:                        sprintf(opt[i++],"%-27.27s%lu"
                    786:                                ,"Cost to Send NetMail",inetmail_cost);
                    787:                        opt[i][0]=0;
                    788:                        SETHELP(WHERE);
                    789: /*
                    790: &Internet NetMail:&
                    791: 
                    792: This menu contains configuration options that pertain specifically to
                    793: Internet E-mail (NetMail). To utilize these options, you must own
                    794: a Synchronet compatible UUCP/Internet gateway (e.g. &SyncUUCP&).
                    795: */
                    796:                        i=ulist(WIN_ACT|WIN_MID|WIN_CHE,0,0,60,&inet_dflt,0
                    797:                                ,"Internet NetMail",opt);
                    798:                        savnum=0;
                    799:                        switch(i) {
                    800:                                case -1:        /* ESC */
                    801:                                        done=1;
                    802:                                        break;
                    803:                                case 0:
                    804:                                        SETHELP(WHERE);
                    805: /*
                    806: &Sytem Internet Address:&
                    807: 
                    808: If your system has an Internet mail feed, enter your system's Internet
                    809: address here (e.g. &joesbbs.com&).
                    810: */
                    811:                                        uinput(WIN_MID|WIN_SAV,0,0,""
                    812:                                                ,sys_inetaddr,60,K_EDIT);
                    813:                     break;
                    814:                                case 1:
                    815:                                        SETHELP(WHERE);
                    816: /*
                    817: &Internet NetMail Semaphore File:&
                    818: 
                    819: This is a filename that will be used as a semaphore (signal) to your
                    820: Internet gateway (if supported) that new mail has been created and the
                    821: message base should be re-scanned.
                    822: */
                    823:                                        uinput(WIN_MID|WIN_SAV,0,0,"Semaphore File"
                    824:                                                ,inetmail_sem,50,K_EDIT|K_UPPER);
                    825:                     break;
                    826: 
                    827:                                case 2:
                    828:                                        i=0;
                    829:                                        strcpy(opt[0],"Yes");
                    830:                                        strcpy(opt[1],"No");
                    831:                                        opt[2][0]=0;
                    832:                                        SETHELP(WHERE);
                    833: /*
                    834: &Allow Users to Send Internet NetMail:&
                    835: 
                    836: If your system has an Internet uplink and you want your users to be
                    837: allowed to send Internet NetMail, set this option to &Yes&.
                    838: */
                    839:                                        i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
                    840:                                                ,"Allow Users to Send NetMail",opt);
                    841:                                        if(!i && !(inetmail_misc&NMAIL_ALLOW)) {
                    842:                                                changes=1;
                    843:                                                inetmail_misc|=NMAIL_ALLOW; }
                    844:                                        else if(i==1 && inetmail_misc&NMAIL_ALLOW) {
                    845:                                                changes=1;
                    846:                                                inetmail_misc&=~NMAIL_ALLOW; }
                    847:                                        break;
                    848: 
                    849:                                case 3:
                    850:                                        i=0;
                    851:                                        strcpy(opt[0],"Yes");
                    852:                                        strcpy(opt[1],"No");
                    853:                                        opt[2][0]=0;
                    854:                                        SETHELP(WHERE);
                    855: /*
                    856: &Allow Users to Send Internet NetMail File Attachments:&
                    857: 
                    858: If your system has an Internet uplink and you want your users to be
                    859: allowed to send Internet NetMail file attachments, set this option to &Yes&.
                    860: */
                    861:                                        i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
                    862:                                                ,"Allow Users to Send NetMail File Attachments",opt);
                    863:                                        if(!i && !(inetmail_misc&NMAIL_FILE)) {
                    864:                                                changes=1;
                    865:                                                inetmail_misc|=NMAIL_FILE; }
                    866:                                        else if(i==1 && inetmail_misc&NMAIL_FILE) {
                    867:                                                changes=1;
                    868:                                                inetmail_misc&=~NMAIL_FILE; }
                    869:                     break;
                    870:                                case 4:
                    871:                                        i=1;
                    872:                                        strcpy(opt[0],"Yes");
                    873:                                        strcpy(opt[1],"No");
                    874:                                        opt[2][0]=0;
                    875:                                        SETHELP(WHERE);
                    876: /*
                    877: &Use Aliases in NetMail:&
                    878: 
                    879: If you allow aliases on your system and wish users to have their NetMail
                    880: contain their alias as the &From User&, set this option to &Yes&. If you
                    881: want all NetMail to be sent using users' real names, set this option to
                    882: &No&.
                    883: */
                    884:                                        i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
                    885:                                                ,"Use Aliases in NetMail",opt);
                    886:                                        if(!i && !(inetmail_misc&NMAIL_ALIAS)) {
                    887:                                                changes=1;
                    888:                                                inetmail_misc|=NMAIL_ALIAS; }
                    889:                                        else if(i==1 && inetmail_misc&NMAIL_ALIAS) {
                    890:                                                changes=1;
                    891:                                                inetmail_misc&=~NMAIL_ALIAS; }
                    892:                                        break;
                    893:                                case 5:
                    894:                                        ultoa(inetmail_cost,str,10);
                    895:                                        SETHELP(WHERE);
                    896: /*
                    897: &Cost in Credits to Send NetMail:&
                    898: 
                    899: This is the number of credits it will cost your users to send NetMail.
                    900: If you want the sending of NetMail to be free, set this value to &0&.
                    901: */
                    902:                                        uinput(WIN_MID|WIN_SAV,0,0
                    903:                                                ,"Cost in Credits to Send NetMail"
                    904:                                                ,str,10,K_EDIT|K_NUMBER);
                    905:                                        inetmail_cost=atol(str);
                    906:                                        break; } } }
                    907: 
                    908:        else { /* ESC */
                    909:                i=save_changes(WIN_MID|WIN_SAV);
                    910:                if(i==-1)
                    911:                        continue;
                    912:                if(!i)
                    913:                        write_msgs_cfg();
                    914:                break; } }
                    915: }
                    916: 
                    917: void qhub_edit(int num)
                    918: {
                    919:        static int qhub_dflt;
                    920:        char *p,done=0,str[256];
                    921:        int i,j,k,n;
                    922: 
                    923: while(!done) {
                    924:        i=0;
                    925:        sprintf(opt[i++],"%-27.27s%s","Hub System ID",qhub[num]->id);
                    926:        sprintf(opt[i++],"%-27.27s%.40s","Pack Command Line",qhub[num]->pack);
                    927:        sprintf(opt[i++],"%-27.27s%.40s","Unpack Command Line",qhub[num]->unpack);
                    928:        sprintf(opt[i++],"%-27.27s%.40s","Call-out Command Line",qhub[num]->call);
                    929:        sprintf(opt[i++],"%-27.27s%u","Call-out Node",qhub[num]->node);
                    930:        sprintf(opt[i++],"%-27.27s%s","Call-out Days",daystr(qhub[num]->days));
                    931:        if(qhub[num]->freq) {
                    932:                sprintf(str,"%u times a day",1440/qhub[num]->freq);
                    933:                sprintf(opt[i++],"%-27.27s%s","Call-out Frequency",str); }
                    934:        else {
                    935:                sprintf(str,"%2.2d:%2.2d",qhub[num]->time/60,qhub[num]->time%60);
                    936:                sprintf(opt[i++],"%-27.27s%s","Call-out Time",str); }
                    937:        strcpy(opt[i++],"Networked Sub-boards...");
                    938:        opt[i][0]=0;
                    939:        sprintf(str,"%s Network Hub",qhub[num]->id);
                    940:        savnum=1;
                    941:        SETHELP(WHERE);
                    942: /*
                    943: &QWK Network Hub Configuration:&
                    944: 
                    945: This menu allows you to configure options specific to this QWK network
                    946: hub.
                    947: */
                    948:        switch(ulist(WIN_ACT|WIN_MID|WIN_SAV,0,0,0,&qhub_dflt,0
                    949:                ,str,opt)) {
                    950:                case -1:
                    951:                        done=1;
                    952:                        break;
                    953:                case 0:
                    954:                        SETHELP(WHERE);
                    955: /*
                    956: &QWK Network Hub System ID:&
                    957: 
                    958: This is the QWK System ID of this hub. It is used for incoming and
                    959: outgoing network packets and must be accurate.
                    960: */
                    961:                        strcpy(str,qhub[num]->id);      /* save */
                    962:                        if(!uinput(WIN_MID|WIN_SAV,0,0,"QWK Network Hub System ID"
                    963:                                ,qhub[num]->id,8,K_UPPER|K_EDIT))
                    964:                                strcpy(qhub[num]->id,str);
                    965:                        break;
                    966:                case 1:
                    967:                        SETHELP(WHERE);
                    968: /*
                    969: &REP Packet Creation Command:&
                    970: 
                    971: This is the command line to use to create (compress) REP packets for
                    972: this QWK network hub.
                    973: */
                    974:                        uinput(WIN_MID|WIN_SAV,0,0,"Packet Creation"
                    975:                                ,qhub[num]->pack,50,K_EDIT);
                    976:                        break;
                    977:                case 2:
                    978:                        SETHELP(WHERE);
                    979: /*
                    980: &QWK Packet Extraction Command:&
                    981: 
                    982: This is the command line to use to extract (decompress) QWK packets from
                    983: this QWK network hub.
                    984: */
                    985:                        uinput(WIN_MID|WIN_SAV,0,0,"Packet Extraction"
                    986:                                ,qhub[num]->unpack,50,K_EDIT);
                    987:                        break;
                    988:                case 3:
                    989:                        SETHELP(WHERE);
                    990: /*
                    991: &QWK Network Hub Call-out Command Line:&
                    992: 
                    993: This is the command line to use to initiate a call-out to this QWK
                    994: network hub.
                    995: */
                    996:                        uinput(WIN_MID|WIN_SAV,0,0,"Call-out Command"
                    997:                                ,qhub[num]->call,50,K_EDIT);
                    998:                        break;
                    999:                case 4:
                   1000:                        sprintf(str,"%u",qhub[num]->node);
                   1001:                        SETHELP(WHERE);
                   1002: /*
                   1003: &Node to Perform Call-out:&
                   1004: 
                   1005: This is the number of the node to perform the call-out for this QWK
                   1006: network hub.
                   1007: */
                   1008:                        uinput(WIN_MID|WIN_SAV,0,0
                   1009:                                ,"Node to Perform Call-out",str,3,K_EDIT|K_NUMBER);
                   1010:                        qhub[num]->node=atoi(str);
                   1011:                        break;
                   1012:                case 5:
                   1013:                        j=0;
                   1014:                        while(1) {
                   1015:                                for(i=0;i<7;i++)
                   1016:                                        sprintf(opt[i],"%s        %s"
                   1017:                                                ,wday[i],(qhub[num]->days&(1<<i)) ? "Yes":"No");
                   1018:                                opt[i][0]=0;
                   1019:                                savnum=2;
                   1020:                                SETHELP(WHERE);
                   1021: /*
                   1022: &Days to Perform Call-out:&
                   1023: 
                   1024: These are the days that a call-out will be performed for this QWK
                   1025: network hub.
                   1026: */
                   1027:                                i=ulist(WIN_MID,0,0,0,&j,0
                   1028:                                        ,"Days to Perform Call-out",opt);
                   1029:                                if(i==-1)
                   1030:                                        break;
                   1031:                                qhub[num]->days^=(1<<i);
                   1032:                                changes=1; }
                   1033:                        break;
                   1034:                case 6:
                   1035:                        i=1;
                   1036:                        strcpy(opt[0],"Yes");
                   1037:                        strcpy(opt[1],"No");
                   1038:                        opt[2][0]=0;
                   1039:                        savnum=2;
                   1040:                        SETHELP(WHERE);
                   1041: /*
                   1042: &Perform Call-out at a Specific Time:&
                   1043: 
                   1044: If you want the system call this QWK network hub at a specific time,
                   1045: set this option to &Yes&. If you want the system to call this network
                   1046: hub more than once a day at predetermined intervals, set this option to
                   1047: &No&.
                   1048: */
                   1049:                        i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
                   1050:                                ,"Perform Call-out at a Specific Time",opt);
                   1051:                        if(i==0) {
                   1052:                                sprintf(str,"%2.2d:%2.2d",qhub[num]->time/60
                   1053:                                        ,qhub[num]->time%60);
                   1054:                                SETHELP(WHERE);
                   1055: /*
                   1056: &Time to Perform Call-out:&
                   1057: 
                   1058: This is the time (in 24 hour HH:MM format) to perform the call-out to
                   1059: this QWK network hub.
                   1060: */
                   1061:                                if(uinput(WIN_MID|WIN_SAV,0,0
                   1062:                                        ,"Time to Perform Call-out (HH:MM)"
                   1063:                                        ,str,5,K_UPPER|K_EDIT)>0) {
                   1064:                                        qhub[num]->freq=0;
                   1065:                                        qhub[num]->time=atoi(str)*60;
                   1066:                                        if((p=strchr(str,':'))!=NULL)
                   1067:                                                qhub[num]->time+=atoi(p+1); } }
                   1068:                        else if(i==1) {
                   1069:                                sprintf(str,"%u",qhub[num]->freq
                   1070:                                        && qhub[num]->freq<=1440 ? 1440/qhub[num]->freq : 0);
                   1071:                                SETHELP(WHERE);
                   1072: /*
                   1073: &Number of Call-outs Per Day:&
                   1074: 
                   1075: This is the maximum number of times the system will perform a call-out
                   1076: per day to this QWK network hub. This value is actually converted by
                   1077: Synchronet into minutes between call-outs and when the BBS is idle
                   1078: and this number of minutes since the last call-out is reached, it will
                   1079: perform a call-out.
                   1080: */
                   1081:                                if(uinput(WIN_MID|WIN_SAV,0,0
                   1082:                                        ,"Number of Call-outs Per Day"
                   1083:                                        ,str,4,K_NUMBER|K_EDIT)>0) {
                   1084:                                        qhub[num]->time=0;
                   1085:                                        i=atoi(str);
                   1086:                                        if(i && i<=1440)
                   1087:                                                qhub[num]->freq=1440/i;
                   1088:                                        else
                   1089:                                                qhub[num]->freq=0; } }
                   1090:                        break;
                   1091:                case 7:
                   1092:                        qhub_sub_edit(num);
                   1093:                        break; } }
                   1094: }
                   1095: 
                   1096: void qhub_sub_edit(uint num)
                   1097: {
                   1098:        char str[256];
                   1099:        int i,j,k,l,m,n,bar=0;
                   1100: 
                   1101: k=0;
                   1102: while(1) {
                   1103:        for(j=0;j<qhub[num]->subs;j++)
                   1104:                sprintf(opt[j],"%-*.*s %-*.*s"
                   1105:                        ,LEN_GSNAME,LEN_GSNAME
                   1106:                        ,grp[sub[qhub[num]->sub[j]]->grp]->sname
                   1107:                        ,LEN_SSNAME,LEN_SSNAME
                   1108:                        ,sub[qhub[num]->sub[j]]->sname);
                   1109:        opt[j][0]=0;
                   1110:        savnum=2;
                   1111:        j=WIN_BOT|WIN_SAV|WIN_ACT;
                   1112:        if(qhub[num]->subs<MAX_OPTS)
                   1113:                j|=WIN_INS|WIN_INSACT|WIN_XTR;
                   1114:        if(qhub[num]->subs)
                   1115:                j|=WIN_DEL;
                   1116:        SETHELP(WHERE);
                   1117: /*
                   1118: &QWK Networked Sub-boards:&
                   1119: 
                   1120: This is a list of the sub-boards that are networked with this QWK
                   1121: network hub.
                   1122: 
                   1123: To add a sub-board, select the desired location and hit  INS .
                   1124: 
                   1125: To remove a sub-board, select it and hit  DEL .
                   1126: 
                   1127: To configure a sub-board for this QWK network hub, select it and hit
                   1128:  ENTER .
                   1129: */
                   1130:        j=ulist(j,0,0,0,&k,&bar
                   1131:                ,"Networked Sub-boards",opt);
                   1132:        if(j==-1)
                   1133:                break;
                   1134:        if((j&MSK_ON)==MSK_INS) {
                   1135:                j&=MSK_OFF;
                   1136:                savnum=3;
                   1137:                if((l=getsub())==-1)
                   1138:                        continue;
                   1139:                savnum=3;
                   1140:                SETHELP(WHERE);
                   1141: /*
                   1142: &Conference Number on Hub:&
                   1143: 
                   1144: This is the number of the conference on the QWK network hub, that this
                   1145: sub-board is networked with. On Synchronet systems, this number is
                   1146: derived by multiplying the group number by 10 and adding the sub-board
                   1147: number. For example, group 2, sub-board 3, is conference number 203.
                   1148: 
                   1149: It is important to understand that this is &NOT& the conference number of
                   1150: this sub-board on your system. It is the number of the conference this
                   1151: sub-board is networked with on this &QWK network hub&.
                   1152: */
                   1153:                if(uinput(WIN_MID|WIN_SAV,0,0
                   1154:                        ,"Conference Number on Hub"
                   1155:                        ,str,5,K_NUMBER)<1)
                   1156:                        continue;
                   1157:                strcpy(opt[0],"Strip out");
                   1158:                strcpy(opt[1],"Leave in");
                   1159:                strcpy(opt[2],"Expand to ANSI");
                   1160:                opt[3][0]=0;
                   1161:                m=0;
                   1162:                SETHELP(WHERE);
                   1163: /*
                   1164: &Ctrl-A Codes:&
                   1165: 
                   1166: You are being prompted for the method of handling Ctrl-A attribute codes
                   1167: generated by Synchronet. If this QWK network hub is a Synchronet BBS,
                   1168: set this option to &Leave in&. If the QWK network hub is not a Synchronet
                   1169: BBS, but allows ANSI escape sequences in messages, set this option to
                   1170: &Expand to ANSI&. If the QWK network hub is not a Synchronet BBS and does
                   1171: not support ANSI escape sequences in messages (or you're not sure), set
                   1172: this option to &Strip out&.
                   1173: */
                   1174:                if((m=ulist(WIN_MID|WIN_SAV,0,0,0,&m,0
                   1175:                        ,"Ctrl-A Codes",opt))==-1)
                   1176:                        continue;
                   1177:                if((qhub[num]->sub=(ushort *)REALLOC(qhub[num]->sub
                   1178:                        ,sizeof(ushort *)*(qhub[num]->subs+1)))==NULL
                   1179:                || (qhub[num]->conf=(ushort *)REALLOC(qhub[num]->conf
                   1180:             ,sizeof(ushort *)*(qhub[num]->subs+1)))==NULL
                   1181:                || (qhub[num]->mode=(uchar *)REALLOC(qhub[num]->mode
                   1182:                        ,sizeof(uchar *)*(qhub[num]->subs+1)))==NULL) {
                   1183:                        errormsg(WHERE,ERR_ALLOC,nulstr,qhub[num]->subs+1);
                   1184:                        continue; }
                   1185:                if(qhub[num]->subs)                       /* insert */
                   1186:                        for(n=qhub[num]->subs;n>j;n--) {
                   1187:                                qhub[num]->sub[n]=qhub[num]->sub[n-1];
                   1188:                                qhub[num]->conf[n]=qhub[num]->conf[n-1];
                   1189:                                qhub[num]->mode[n]=qhub[num]->mode[n-1]; }
                   1190:                if(!m)
                   1191:                        qhub[num]->mode[j]=A_STRIP;
                   1192:                else if(m==1)
                   1193:                        qhub[num]->mode[j]=A_LEAVE;
                   1194:                else
                   1195:                        qhub[num]->mode[j]=A_EXPAND;
                   1196:                qhub[num]->sub[j]=l;
                   1197:                qhub[num]->conf[j]=atoi(str);
                   1198:                qhub[num]->subs++;
                   1199:                changes=1;
                   1200:                continue; }
                   1201:        if((j&MSK_ON)==MSK_DEL) {
                   1202:                j&=MSK_OFF;
                   1203:                qhub[num]->subs--;
                   1204:                while(j<qhub[num]->subs) {
                   1205:                        qhub[num]->sub[j]=qhub[num]->sub[j+1];
                   1206:                        qhub[num]->mode[j]=qhub[num]->mode[j+1];
                   1207:                        qhub[num]->conf[j]=qhub[num]->conf[j+1];
                   1208:                        j++; }
                   1209:                changes=1;
                   1210:                continue; }
                   1211:        l=0;
                   1212:        while(1) {
                   1213:                n=0;
                   1214:                sprintf(opt[n++],"%-22.22s%.*s %.*s"
                   1215:                        ,"Sub-board"
                   1216:                        ,LEN_GSNAME
                   1217:                        ,grp[sub[qhub[num]->sub[j]]->grp]->sname
                   1218:                        ,LEN_SSNAME
                   1219:                        ,sub[qhub[num]->sub[j]]->sname);
                   1220:                sprintf(opt[n++],"%-22.22s%u"
                   1221:                        ,"Conference Number",qhub[num]->conf[j]);
                   1222:                sprintf(opt[n++],"%-22.22s%s"
                   1223:                        ,"Ctrl-A Codes",qhub[num]->mode[j]==A_STRIP ?
                   1224:                        "Strip out" : qhub[num]->mode[j]==A_LEAVE ?
                   1225:                        "Leave in" : "Expand to ANSI");
                   1226:                opt[n][0]=0;
                   1227:                savnum=3;
                   1228:                SETHELP(WHERE);
                   1229: /*
                   1230: &QWK Netted Sub-board:&
                   1231: 
                   1232: You are configuring the options for this sub-board for this QWK network
                   1233: hub.
                   1234: */
                   1235:                l=ulist(WIN_MID|WIN_SAV|WIN_ACT,0,0,
                   1236:                        22+LEN_GSNAME+LEN_SSNAME,&l,0
                   1237:                        ,"Netted Sub-board",opt);
                   1238:                if(l==-1)
                   1239:                        break;
                   1240:                if(!l) {
                   1241:                        savnum=4;
                   1242:                        m=getsub();
                   1243:                        if(m!=-1) {
                   1244:                                qhub[num]->sub[j]=m;
                   1245:                                changes=1; } }
                   1246:                else if(l==1) {
                   1247:                        savnum=4;
                   1248:                        SETHELP(WHERE);
                   1249: /*
                   1250: &Conference Number on Hub:&
                   1251: 
                   1252: This is the number of the conference on the QWK network hub, that this
                   1253: sub-board is networked with. On Synchronet systems, this number is
                   1254: derived by multiplying the group number by 10 and adding the sub-board
                   1255: number. For example, group 2, sub-board 3, is conference number 203.
                   1256: 
                   1257: It is important to understand that this is &NOT& the conference number of
                   1258: this sub-board on your system. It is the number of the conference this
                   1259: sub-board is networked with on this &QWK network hub&.
                   1260: */
                   1261:                        if(uinput(WIN_MID|WIN_SAV,0,0
                   1262:                                ,"Conference Number on Hub"
                   1263:                                ,str,5,K_NUMBER)>0)
                   1264:                                qhub[num]->conf[j]=atoi(str); }
                   1265:                else if(l==2) {
                   1266:                        strcpy(opt[0],"Strip out");
                   1267:                        strcpy(opt[1],"Leave in");
                   1268:                        strcpy(opt[2],"Expand to ANSI");
                   1269:                        opt[3][0]=0;
                   1270:                        m=0;
                   1271:                        savnum=4;
                   1272:                        SETHELP(WHERE);
                   1273: /*
                   1274: &Ctrl-A Codes:&
                   1275: 
                   1276: You are being prompted for the method of handling Ctrl-A attribute codes
                   1277: generated by Synchronet. If this QWK network hub is a Synchronet BBS,
                   1278: set this option to &Leave in&. If the QWK network hub is not a Synchronet
                   1279: BBS, but allows ANSI escape sequences in messages, set this option to
                   1280: &Expand to ANSI&. If the QWK network hub is not a Synchronet BBS and does
                   1281: not support ANSI escape sequences in messages (or you're not sure), set
                   1282: this option to &Strip out&.
                   1283: */
                   1284:                        m=ulist(WIN_MID|WIN_SAV,0,0,0,&m,0
                   1285:                                ,"Ctrl-A Codes",opt);
                   1286:                        changes=1;
                   1287:                        if(!m)
                   1288:                                qhub[num]->mode[j]=A_STRIP;
                   1289:                        else if(m==1)
                   1290:                                qhub[num]->mode[j]=A_LEAVE;
                   1291:                        else if(m==2)
                   1292:                                qhub[num]->mode[j]=A_EXPAND; } } }
                   1293: }
                   1294: 
                   1295: void phub_edit(int num)
                   1296: {
                   1297:        static int phub_dflt;
                   1298:        char *p,done=0,str[256];
                   1299:        int i,j,k,n;
                   1300: 
                   1301: while(!done) {
                   1302:        i=0;
                   1303:        sprintf(opt[i++],"%-27.27s%s","Hub Site Name",phub[num]->name);
                   1304:        sprintf(opt[i++],"%-27.27s%.40s","Call-out Command Line",phub[num]->call);
                   1305:        sprintf(opt[i++],"%-27.27s%u","Call-out Node",phub[num]->node);
                   1306:        sprintf(opt[i++],"%-27.27s%s","Call-out Days",daystr(phub[num]->days));
                   1307:        if(phub[num]->freq) {
                   1308:                sprintf(str,"%u times a day",1440/phub[num]->freq);
                   1309:                sprintf(opt[i++],"%-27.27s%s","Call-out Frequency",str); }
                   1310:        else {
                   1311:                sprintf(str,"%2.2d:%2.2d",phub[num]->time/60
                   1312:                        ,phub[num]->time%60);
                   1313:                sprintf(opt[i++],"%-27.27s%s","Call-out Time",str); }
                   1314:        opt[i][0]=0;
                   1315:        sprintf(str,"%s Network Hub",phub[num]->name);
                   1316:        savnum=1;
                   1317:        SETHELP(WHERE);
                   1318: /*
                   1319: &PostLink Network Hub Configuration:&
                   1320: 
                   1321: This menu allows you to configure options specific to this network hub.
                   1322: */
                   1323:        switch(ulist(WIN_ACT|WIN_MID|WIN_SAV,0,0,0,&phub_dflt,0
                   1324:                ,str,opt)) {
                   1325:                case -1:
                   1326:                        done=1;
                   1327:                        break;
                   1328:                case 0:
                   1329:                        SETHELP(WHERE);
                   1330: /*
                   1331: &Network Hub Site Name:&
                   1332: 
                   1333: This is the Site Name of this hub. It is used for only for reference.
                   1334: */
                   1335:                        strcpy(str,phub[num]->name);    /* save */
                   1336:                        if(!uinput(WIN_MID|WIN_SAV,0,0,"Hub Site Name"
                   1337:                                ,phub[num]->name,10,K_UPPER|K_EDIT))
                   1338:                                strcpy(phub[num]->name,str);    /* restore */
                   1339:                        break;
                   1340:                case 1:
                   1341:                        SETHELP(WHERE);
                   1342: /*
                   1343: &Network Hub Call-out Command Line:&
                   1344: 
                   1345: This is the command line to use to initiate a call-out to this network
                   1346: hub.
                   1347: */
                   1348:                        uinput(WIN_MID|WIN_SAV,0,0,"Call-out Command"
                   1349:                                ,phub[num]->call,50,K_EDIT);
                   1350:                        break;
                   1351:                case 2:
                   1352:                        sprintf(str,"%u",phub[num]->node);
                   1353:                        SETHELP(WHERE);
                   1354: /*
                   1355: &Node to Perform Call-out:&
                   1356: 
                   1357: This is the number of the node to perform the call-out for this network
                   1358: hub.
                   1359: */
                   1360:                        uinput(WIN_MID|WIN_SAV,0,0
                   1361:                                ,"Node to Perform Call-out",str,3,K_EDIT|K_NUMBER);
                   1362:                        phub[num]->node=atoi(str);
                   1363:                        break;
                   1364:                case 3:
                   1365:                        j=0;
                   1366:                        while(1) {
                   1367:                                for(i=0;i<7;i++)
                   1368:                                        sprintf(opt[i],"%s        %s"
                   1369:                                                ,wday[i],(phub[num]->days&(1<<i)) ? "Yes":"No");
                   1370:                                opt[i][0]=0;
                   1371:                                savnum=2;
                   1372:                                SETHELP(WHERE);
                   1373: /*
                   1374: &Days to Perform Call-out:&
                   1375: 
                   1376: These are the days that a call-out will be performed for this network
                   1377: hub.
                   1378: */
                   1379:                                i=ulist(WIN_MID|WIN_SAV,0,0,0,&j,0
                   1380:                                        ,"Days to Perform Call-out",opt);
                   1381:                                if(i==-1)
                   1382:                                        break;
                   1383:                                phub[num]->days^=(1<<i);
                   1384:                                changes=1; }
                   1385:                        break;
                   1386:                case 4:
                   1387:                        i=1;
                   1388:                        strcpy(opt[0],"Yes");
                   1389:                        strcpy(opt[1],"No");
                   1390:                        opt[2][0]=0;
                   1391:                        savnum=2;
                   1392:                        SETHELP(WHERE);
                   1393: /*
                   1394: &Perform Call-out at a Specific Time:&
                   1395: 
                   1396: If you want the system call this network hub at a specific time, set
                   1397: this option to &Yes&. If you want the system to call this hub more than
                   1398: once a day at predetermined intervals, set this option to &No&.
                   1399: */
                   1400:                        i=ulist(WIN_MID|WIN_SAV,0,0,0,&i,0
                   1401:                                ,"Perform Call-out at a Specific Time",opt);
                   1402:                        if(i==0) {
                   1403:                                sprintf(str,"%2.2d:%2.2d",phub[num]->time/60
                   1404:                                        ,phub[num]->time%60);
                   1405:                                SETHELP(WHERE);
                   1406: /*
                   1407: &Time to Perform Call-out:&
                   1408: 
                   1409: This is the time (in 24 hour HH:MM format) to perform the call-out to
                   1410: this network hub.
                   1411: */
                   1412:                                if(uinput(WIN_MID|WIN_SAV,0,0
                   1413:                                        ,"Time to Perform Call-out (HH:MM)"
                   1414:                                        ,str,5,K_UPPER|K_EDIT)>0) {
                   1415:                                        phub[num]->freq=0;
                   1416:                                        phub[num]->time=atoi(str)*60;
                   1417:                                        if((p=strchr(str,':'))!=NULL)
                   1418:                                                phub[num]->time+=atoi(p+1); } }
                   1419:                        else if(i==1) {
                   1420:                                sprintf(str,"%u",phub[num]->freq
                   1421:                                        && phub[num]->freq<=1440 ? 1440/phub[num]->freq : 0);
                   1422:                                SETHELP(WHERE);
                   1423: /*
                   1424: &Number of Call-outs Per Day:&
                   1425: 
                   1426: This is the maximum number of times the system will perform a call-out
                   1427: per day to this network hub. This value is actually converted by
                   1428: Synchronet into minutes between call-outs and when the BBS is idle
                   1429: and this number of minutes since the last call-out is reached, it will
                   1430: perform a call-out.
                   1431: */
                   1432:                                if(uinput(WIN_MID|WIN_SAV,0,0
                   1433:                                        ,"Number of Call-outs Per Day"
                   1434:                                        ,str,4,K_NUMBER|K_EDIT)>0) {
                   1435:                                        phub[num]->time=0;
                   1436:                                        i=atoi(str);
                   1437:                                        if(i && i<=1440)
                   1438:                                                phub[num]->freq=1440/i;
                   1439:                                        else
                   1440:                                                phub[num]->freq=0; } }
                   1441:                        break; } }
                   1442: }
                   1443: 
                   1444: char *daystr(char days)
                   1445: {
                   1446:        static char str[256];
                   1447:        int i;
                   1448: 
                   1449: str[0]=0;
                   1450: for(i=0;i<7;i++) {
                   1451:        if(days&(1<<i))
                   1452:                strcat(str,wday[i]);
                   1453:        else
                   1454:                strcat(str,"   ");
                   1455:        strcat(str," "); }
                   1456: return(str);
                   1457: }

unix.superglobalmegacorp.com

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