|
|
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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.