Annotation of sbbs/sbbs2/scfg/scfgnet.c, revision 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.