home *** CD-ROM | disk | FTP | other *** search
/ ProfitPress Mega CDROM2 …eeware (MSDOS)(1992)(Eng) / ProfitPress-MegaCDROM2.B6I / BBS / MISC / XDEV_117.ZIP / XCONFIG.C < prev    next >
Encoding:
C/C++ Source or Header  |  1990-12-10  |  35.0 KB  |  1,361 lines

  1. /*=========================================================================*/
  2. /* XBBS BBS Configuration Editor copyright (c) 1989/90 by M. Kimes           */
  3. /* All rights reserved                                                       */
  4. /*=========================================================================*/
  5.  
  6. #include "msgg.h"
  7. #include "twindow.h"
  8. #include "keys.h"
  9. #include "scrntitl.h"
  10.  
  11.  
  12. /* Function prototypes */
  13.  
  14. extern char * lstrip (char *a);
  15. void readconfig (void);
  16. void configure(void);
  17. void saveconfig(void);
  18. void newuserr(void);
  19. void bbs(void);
  20. void matrix(void);
  21. void setdefaults(void);
  22. void prompts(void);
  23. void miscel(void);
  24. void paths(void);
  25. void prepare_config(void);
  26. extern int window1(void);
  27. extern int window2(void);
  28. extern int window3(void);
  29. extern int window4(void);
  30. int prompt1(void);
  31. int prompt2(void);
  32. int prompt3(void);
  33. int addbackslash(char *,int);
  34. char * rstrip(char *);
  35. void quit(void);
  36. void quitnosave(void);
  37. void quitsave(void);
  38. int elevell(char *,int);
  39. int shltype(char *,int);
  40. int yesorno(char *,int);
  41. void fboardd(void);
  42. void mboardd(void);
  43. void params(void);
  44. void params2(void);
  45. void printscreen(void);
  46. void jumptodos(void);
  47.  
  48. char msk78[]="______________________________________________________________________________";
  49. char mskdate[]="__/__/____";
  50. char mskphone[]="(___)___-____";
  51. #define msk5  "_____"
  52. #define msk35 msk78+43
  53. #define msk36 msk78+42
  54. #define mskst msk35+33
  55. #define mskzip msk35+30
  56. #define mskcit msk35+11
  57. #define msk1 msk78+77
  58. #define msk2 msk78+76
  59. #define msk3 msk35+32
  60. #define msk4 msk35+31
  61. #define msk6 msk35+29
  62. #define msk47 msk78+31
  63. #define msk63 msk78+15
  64. #define msk15 msk78+63
  65. #define msk12 msk78+66
  66. #define msk58 msk78+20
  67. #define msk46 msk78+32
  68.  
  69. /* Global variables */
  70.  
  71. struct _config conf;         /* System configuration read from CONFIG.BBS */
  72. struct _user newuser;
  73. struct _logconfig logconf;
  74. char   nonstop=0;
  75.  
  76. extern unsigned char usemouse;
  77. extern word maxx;
  78. extern word maxy;
  79.  
  80. int VERSION=117;
  81.  
  82.  
  83. void main (int argc,char *argv[]) {
  84.  
  85.   WINDOW *instruct;
  86.   char test;
  87.   int x;
  88.  
  89.   maxx=80;
  90.   maxy=25;
  91.  
  92.   if (argc>1) {
  93.     if (strcmp(strupr(argv[1]),"IN")==0) {
  94.         nonstop=1;
  95.         readconfig();
  96.         conf.sysopin=1;
  97.         saveconfig();
  98.         printf("\n\x1b[0;2;37mThe SysOp is IN\n");
  99.         exit(0);
  100.     }
  101.     if (strcmp(argv[1],"OUT")==0) {
  102.         nonstop=1;
  103.         readconfig();
  104.         conf.sysopin=0;
  105.         saveconfig();
  106.         printf("\n\x1b[0;2;37mThe SysOp is OUT\n");
  107.         exit(0);
  108.     }
  109.     if (strcmp(argv[1],"BIOS")==0) {
  110.         directvideo=0;
  111.     }
  112.   }
  113.  
  114.   x=(int)getvect(0x33);  /* Check for mouse driver */
  115.   if(x!=0) {
  116.         _AX=0;  /* Initialize mouse */
  117.         geninterrupt(0x33);
  118.         usemouse=(char)_AX;
  119.         if(usemouse) {
  120.             _AX=2;
  121.             geninterrupt(0x33); /* Hide mouse cursor */
  122.         }
  123.   }
  124.  
  125.   cprintf("\r\nXCONFIG copyright (c) 1989/90 by M. Kimes\r\nCompiled: %s  %s\r\n",__DATE__,__TIME__);
  126.   if(usemouse) cprintf("\r\nMouse detected...");
  127.   cprintf("\r\nLoading help...");
  128.   load_help(searchpath("xconfig.hlp"));
  129.   cprintf("\r\nLoading config...");
  130.   nonstop=2;
  131.   setdefaults();
  132.   readconfig();
  133.   nonstop=0;
  134.  
  135.   printscreen();
  136.  
  137. Smore:
  138.  
  139.   configure();
  140.     clear_message();
  141.     cursor(0,25);
  142.     instruct=establish_window(2,21,3,40);
  143.     set_border(instruct,1);
  144.     set_title(instruct," Confirm ");
  145.     set_colors(instruct,ALL,RED,WHITE,BRIGHT);
  146.     display_window(instruct);
  147.     wprintf(instruct," Are you sure you want to quit? (Y-n) ");
  148. Testagain:
  149.     test=toupper(generic_mouse_input(instruct));
  150.     if ((test=='N') || (test==ESC)) {
  151.         if (test==ESC) {
  152.             printf("\x7");
  153.             goto Testagain;
  154.         }
  155.         delete_window(instruct);
  156.         goto Smore;
  157.     }
  158.     quitnosave();
  159.  
  160. }
  161.  
  162. void quitnosave(void) {
  163.  
  164. clear_message();
  165. close_all();
  166. printf("\x1b[2J\x1b[1;1HYou can also call XCONFIG with IN or OUT as an argument to\n");
  167. printf("change the SysOp's status from a BATch file or the DOS prompt.\n");
  168. exit(0);
  169.  
  170. }
  171.  
  172. void quitsave(void) {
  173.  
  174. clear_message();
  175. saveconfig();
  176. quitnosave();
  177.  
  178. }
  179.  
  180.  
  181.  
  182. void setdefaults (void) {
  183.  
  184.   int register x;
  185.  
  186. if (nonstop!=2) clear_message();
  187. strcpy(newuser.name,"New User");
  188. strcpy(newuser.handle,"New User");
  189. strset(newuser.password,0);
  190. strcpy(newuser.city,"Nowhere");
  191. strcpy(newuser.state,"XX");
  192. strcpy(newuser.zip,"00000");
  193. strcpy(newuser.phone1,"3180000000");
  194. strcpy(newuser.phone2,"3180000000");
  195. newuser.length=24;
  196. newuser.width=80;
  197. newuser.graphics=0;
  198. newuser.fullscreen=0;
  199. newuser.deleted=0;
  200. newuser.ansimenus=1;
  201. newuser.gen1=0;
  202. newuser.gen2=0;
  203. newuser.gen3=0;
  204. newuser.ignorehrs=0;
  205. newuser.ignorerat=0;
  206. newuser.nokill=0;
  207. newuser.cold=0;
  208. newuser.more=0;
  209. newuser.expert=0;
  210. newuser.arq=0;
  211. newuser.scrnclr=0;
  212. newuser.twit=0;
  213. newuser.commodore=0;
  214. newuser.attr2=0;
  215. newuser.stat[0]=(word)5;
  216. newuser.stat[1]=(word)0;
  217. newuser.upk=0;
  218. newuser.downk=0;
  219. newuser.upno=0;
  220. newuser.downno=0;
  221. newuser.posts=0;
  222. newuser.credit=0;
  223. newuser.violations=0;
  224. newuser.lastdate.da_year=1980;
  225. newuser.lastdate.da_day=1;
  226. newuser.lastdate.da_mon=1;
  227. gettime(&newuser.lasttime);
  228. getdate(&newuser.logondate);
  229. gettime(&newuser.logontime);
  230. getdate(&newuser.birthdate);
  231. newuser.hiok=0;
  232. newuser.lastmsgarea=0;
  233. newuser.reserved=0;
  234.  
  235. newuser.times=0;
  236. newuser.callsperday=3;
  237. newuser.timepercall=30;
  238. newuser.totaltime=90;
  239. newuser.callstoday=0;
  240. newuser.timetoday=0;
  241. newuser.pointid=0;
  242. for(x=0;x<5;x++) strset(newuser.variable[x],'0');
  243. for(x=0;x<10;x++) newuser.numvars[x]=0;
  244. newuser.comptype=0;
  245. newuser.uktoday=0;
  246. newuser.dktoday=0;
  247. newuser.id=0L;
  248. newuser.node=0;
  249.  
  250. logconf.name=1;
  251. logconf.handle=1;
  252. logconf.phone1=1;
  253. logconf.phone2=1;
  254. logconf.graphics=1;
  255. logconf.ansiedit=1;
  256. logconf.scrnclr=1;
  257. logconf.pagepause=1;
  258. logconf.commflag=1;
  259. logconf.zipcode=1;
  260. logconf.city=1;
  261. logconf.state=1;
  262. logconf.pass=1;
  263. logconf.birth=1;
  264. logconf.length=1;
  265. logconf.width=1;
  266. logconf.locallog=0;
  267. logconf.loglimit=7;
  268. logconf.nameattempts=3;
  269. logconf.passattempts=3;
  270. logconf.minbaud=1200;
  271.  
  272. conf.bvideo=1;
  273. conf.node=0;
  274. conf.net=0;
  275. conf.alt_node=0;
  276. conf.alt_net=0;
  277. conf.zone=0;
  278. conf.alt_zone=0;
  279. strcpy(conf.homepath,"C:\\XBBS\\");
  280. strcpy(conf.mailpath,"C:\\BT\\MSG\\");
  281. strcpy(conf.filepath,"C:\\BT\\FILES\\");
  282. strcpy(conf.outpath,"C:\\BT\\OUT\\");
  283. strcpy(conf.menupath,"C:\\XBBS\\MENU\\");
  284. strcpy(conf.messpath,"C:\\XBBS\\MESS\\");
  285. strcpy(conf.sysop,"Sysop");
  286. strcpy(conf.system,"The Unknown XBBS");
  287. strcpy(conf.logfile,"C:\\XBBS\\XBBS.LOG");
  288. strcpy(conf.edansi,"QuickEd.EXE *p *B *T 180");
  289. strcpy(conf.edline,"LINEED.EXE MSGTMP -B*B -T*T -P*P -L*l -G*G -W*w");
  290. strcpy(conf.edlocal,"Q.EXE MSGTMP");
  291. strcpy(conf.edgraph,"ANSIEd.EXE *P *B *T");
  292. strcpy(conf.lastcaller,"A. Ghost");
  293. strcpy(conf.quote_file,"QUOTES.XBS");
  294. strcpy(conf.domain,"FidoNet");
  295. strcpy(conf.alt_domain,"FidoNet");
  296.  
  297. conf.forcefilemsg=0;
  298. conf.reservedbits=0;
  299. conf.fastANSI=0;
  300. conf.nolmrs=200;
  301. conf.genstatezip=0;
  302. conf.ansibaud=1200;
  303. conf.purgebaud=2400;
  304. conf.netmailboard=5;
  305. conf.altnetboard=0;
  306. conf.commport=0;
  307. conf.ansiavail=1;
  308. conf.idleseconds=180;
  309. conf.pages=2;
  310. conf.sysopin=1;
  311. conf.uptime=1;
  312. conf.touchup=1;
  313. conf.callcount=0;
  314. conf.downtime=0;
  315. conf.debug=1;
  316. conf.startat=3;
  317. conf.dvideo=1;
  318. conf.swap=0;
  319. conf.useswapdisk='C';
  320. conf.LIMEMS=0;
  321. conf.reserved2=0;
  322. conf.version=VERSION;
  323. strset(conf.reserved1,0);
  324. conf.lastcall=time(NULL);
  325. conf.comments=4;
  326. conf.carbons=0;
  327. conf.lastusernum=0;
  328. conf.share=0;
  329. conf.logtext=0;
  330. conf.logfiles=0;
  331. conf.logmenu=0;
  332. conf.logmsg=0;
  333. conf.quote_pos=0;
  334. conf.nextid=0L;
  335. conf.helpkey=20;
  336. conf.RBBSorQBBS=0;
  337.  
  338. strcpy(conf.mboard.name,"Feedback");
  339. conf.mboard.attr=12;
  340. conf.mboard.max=50;
  341. conf.mboard.number=2;
  342. conf.mboard.substat1=100;
  343. conf.mboard.substat2=0;
  344. conf.mboard.age=0;
  345. conf.mboard.flags=0;
  346. conf.mboard.minwrite=0;
  347. strcpy(conf.mboard.forceto,"The Sysop");
  348.  
  349. for(x=0;x<10;x++) {
  350.     strset(conf.jumpfile[x],0);
  351.     strset(conf.subfile[x],0);
  352.     strset(conf.jumpkey[x],0);
  353.     strset(conf.subkey[x],0);
  354. }
  355.  
  356. strcpy(conf.fboard.name,"New Uploads");
  357. conf.fboard.flags=0;
  358. conf.fboard.userflags=0;
  359. conf.fboard.age=0;
  360. conf.fboard.leechpercent=0;
  361. strcpy(conf.fboard.dpath,"C:\\XBBS\\Newest");
  362. strcpy(conf.fboard.upath,"C:\\XBBS\\Uploads");
  363. strcpy(conf.origin,"I'm running XBBS and you're not");
  364.  
  365. for (x=0;x<42;x++) {
  366.     conf.available[x]=0;
  367. }
  368. conf.genphone=0;
  369. strset(conf.nodelist,0);
  370. conf.packsize=2048;
  371.  
  372. if (nonstop!=2) any_message(" Default parameters set ");
  373.  
  374. }
  375.  
  376.  
  377. int addbackslash(bf,key)
  378.  
  379. char *bf;
  380.  
  381. {
  382.  
  383.   int register x;
  384.  
  385.   for (x=77;x>(-1);x--) {
  386.     if (bf[x]!=' ') {
  387.         break;
  388.     }
  389.   }
  390.   if (x<0) {
  391.     x=0;
  392.     *bf='\\';
  393.   }
  394.   if (bf[x]!='\\') {
  395.     if (x==77) {
  396.         error_message("No room for trailing backslash!");
  397.         return ERROR;
  398.     }
  399.     bf[x+1]='\\';
  400.   }
  401.   return 0;
  402. }
  403.  
  404.  
  405.  
  406. int shltype (bf,key)
  407.  
  408. char *bf;
  409.  
  410. {
  411.  
  412.   if (strstr("SEBDXEI",bf)==NULL) {
  413.     error_message("Invalid exit type!");
  414.     return ERROR;
  415.   }
  416.   return 0;
  417. }
  418.  
  419.  
  420. int lessthan255 (bf,key)
  421.  
  422. char *bf;
  423.  
  424. {
  425.  
  426.   if (atoi(bf)>255 || atoi(bf)<0) {
  427.     error_message("0-255 only!");
  428.     return ERROR;
  429.   }
  430.   return 0;
  431. }
  432.  
  433.  
  434. int oneto255 (bf,key)
  435.  
  436. char *bf;
  437.  
  438. {
  439.  
  440.   if (atoi(bf)>255 || atoi(bf)<1) {
  441.     error_message("1-255 only!");
  442.     return ERROR;
  443.   }
  444.   return 0;
  445. }
  446.  
  447.  
  448. int purger (bf,key)
  449.  
  450. char *bf;
  451.  
  452. {
  453.  
  454.   if ((word)atol(bf)>38400 || (word)atol(bf)<300) {
  455.     error_message("300-38400 only!");
  456.     return ERROR;
  457.   }
  458.   return 0;
  459. }
  460.  
  461.  
  462.  
  463. int yesorno (bf,key)
  464.  
  465. char *bf;
  466.  
  467. {
  468.  
  469.   if (strstr("YN",bf)==NULL) {
  470.     error_message("Answer [Y]es or [N]o!");
  471.     return ERROR;
  472.   }
  473.   return 0;
  474. }
  475.  
  476.  
  477.  
  478. int nocommas (bf,key)
  479.  
  480. char *bf;
  481.  
  482. {
  483.  
  484.   if (strchr(bf,',')!=NULL) {
  485.     error_message("No commas allowed!");
  486.     return ERROR;
  487.   }
  488.   return 0;
  489. }
  490.  
  491.  
  492.  
  493. int elevell(bf,key)
  494.  
  495. char *bf;
  496.  
  497. {
  498.  
  499.   if ((atoi(bf)>255) || (atoi(bf)<4)) {
  500.     error_message("Invalid ERRORLEVEL (4-255)!");
  501.     return ERROR;
  502.   }
  503.   return 0;
  504. }
  505.  
  506.  
  507.  
  508. void readconfig (void) {
  509.  
  510. FILE *fp;
  511. struct ffblk f;
  512. char both=0;
  513.  
  514. if (!nonstop) {
  515.   clear_message();
  516.   cursor(0,25);
  517. }
  518.  
  519. if(findfirst("config.bbs",&f,0)) {
  520.   if (nonstop==2) {
  521.     return;
  522.   }
  523.   else if (nonstop) {
  524.         printf("\nConfiguration file not found!\n");
  525.         exit(1);
  526.   }
  527. }
  528. else {
  529.     if(f.ff_fsize!=(long)sizeof(struct _config)) {
  530.         printf("\nConfig file odd size--must be old version.\n");
  531.         sleep(1);
  532.  
  533.     }
  534.     if(!(fp=fopen("config.bbs","rb"))) {
  535.        if (nonstop) {
  536.             printf("\nCannot open CONFIG.BBS!\n");
  537.             exit(1);
  538.       }
  539.     }
  540.     else {
  541.        rewind(fp);
  542.        fread(&conf,sizeof(struct _config),1,fp);
  543.        if(f.ff_fsize==(long)sizeof(struct _config)) {
  544.             if(conf.version!=VERSION) {
  545.                 printf("\nVersion of this config file is %d\n",conf.version);
  546.                 sleep(1);
  547.             }
  548.        }
  549.        both=1;
  550.        fclose(fp);
  551.     }
  552. }
  553.  
  554. checknew:
  555.  
  556. if (nonstop && nonstop!=2) return;
  557. if(findfirst("newuser.bbs",&f,0)) {
  558.   if (!nonstop) {
  559.       goto Tellem;
  560.   }
  561.   else {
  562.         printf("\nCannot find NEWUSER.BBS!\n");
  563.   }
  564. }
  565. if(!(fp=fopen("newuser.bbs","rb"))) {
  566.    printf("\nCan't open NEWUSER.BBS\n");
  567. }
  568.     else {
  569.        rewind(fp);
  570.        fread(&newuser,sizeof(struct _user),1,fp);
  571.        fread(&logconf,sizeof(struct _logconfig),1,fp);
  572.        fclose(fp);
  573.        both=both+2;
  574.     }
  575.  
  576. Tellem:
  577.  
  578.    if (nonstop) return;
  579.    clear_message();
  580.    switch (both) {
  581.     case 3: any_message(" Loaded Logon & Main configurations ");
  582.             break;
  583.     case 2: any_message(" Loaded Logon configuration ");
  584.             break;
  585.     case 1: any_message(" Loaded Main configuration ");
  586.             break;
  587.     case 0: any_message(" No configurations loaded! ");
  588.    }
  589.  
  590. }
  591.  
  592.  
  593. void readconfig (void);
  594. void saveconfig(void);
  595. void setdefaults(void);
  596. void newuserr(void);
  597. void bbs(void);
  598. void matrix(void);
  599. void prompts(void);
  600. void miscel(void);
  601. void paths(void);
  602. void quitsave(void);
  603. void quitnosave(void);
  604. void params(void);
  605. void params2(void);
  606. void specfiles(void);
  607. void fboardd(void);
  608. void mboardd(void);
  609.  
  610.   char *pselcs[]={
  611.     " Save config ",
  612.     " Load config ",
  613.     " Set defaults ",
  614.     NULL
  615.   };
  616.   char *dselcs[]={
  617.     " General ",
  618.     " Matrix ",
  619.     " Paths ",
  620.     " Parameters [1] ",
  621.     " Parameters [2] ",
  622.     " Special Files ",
  623.     " File Board ",
  624.     " Message Board ",
  625.     NULL
  626.   };
  627.   char *eselcs[]={
  628.     " New Users ",
  629.     " Prompts ",
  630.     " Misc ",
  631.     NULL
  632.   };
  633.   char *qselcs[]={
  634.     " Exit and Save ",
  635.     " Exit No Save ",
  636.     " DOS Shell ",
  637.     NULL
  638.   };
  639.  
  640.   static void(*dfuncs[])()={bbs,matrix,paths,params,params2,specfiles,fboardd,mboardd};
  641.   static void(*pfuncs[])()={saveconfig,readconfig,setdefaults};
  642.   static void(*efuncs[])()={newuserr,prompts,miscel};
  643.   static void(*qfuncs[])()={quitsave,quitnosave,jumptodos};
  644.   static MENU tmn[]={
  645.     {" Main ",          dselcs,dfuncs},
  646.     {" Logon ",      eselcs,efuncs},
  647.     {" Storage ",    pselcs,pfuncs},
  648.     {" Exit ",       qselcs,qfuncs},
  649.     {NULL,NULL,NULL}
  650.   };
  651.  
  652.  
  653.  
  654. void configure (void) {
  655.  
  656.   menu_select(" XBBS Configuration Editor copyright (c) 1989/90 by M. Kimes ",tmn);
  657.  
  658. }
  659.  
  660.  
  661.  
  662. void paths (void) {
  663.  
  664.     WINDOW *wnd;
  665.     FIELD *fld;
  666.     WINDOW *instruct;
  667.  
  668.     clear_message();
  669.     instruct=establish_window(25,22,3,19);
  670.     set_border(instruct,2);
  671.     set_title(instruct," System Paths ");
  672.     set_colors(instruct,ALL,GREEN,BLACK,DIM);
  673.     set_colors(instruct,ACCENT,GREEN,WHITE,BRIGHT);
  674.     display_window(instruct);
  675.     wprintf(instruct,"  [F1] for help ");
  676.  
  677.     wnd=establish_window(0,4,16,80);
  678.     set_title(wnd," System Paths ");
  679.     set_colors(wnd,ALL,BLUE,WHITE,BRIGHT);
  680.     set_colors(wnd,ACCENT,WHITE,BLACK,DIM);
  681.     display_window(wnd);
  682.     wprompt(wnd,2,0,"Path where BBS files reside:");
  683.     wprompt(wnd,2,2,"Path to net mail directory:");
  684.     wprompt(wnd,2,4,"Path to net files directory:");
  685.     wprompt(wnd,2,6,"Path to Outbound holding area:");
  686.     wprompt(wnd,2,8,"Path to 'menu' files (*.XBS):");
  687.     wprompt(wnd,2,10,"Path to message files:");
  688.     wprompt(wnd,2,12,"Path to nodelist:");
  689.     init_template(wnd);
  690.     fld=establish_field(wnd,0,1,msk78,conf.homepath,'A');
  691.     field_window(fld,"homepath  ",40,10);
  692.     field_validate(fld,addbackslash);
  693.     fld=establish_field(wnd,0,3,msk78,conf.mailpath,'A');
  694.     field_window(fld,"mailpath  ",40,11);
  695.     field_validate(fld,addbackslash);
  696.     fld=establish_field(wnd,0,5,msk78,conf.filepath,'A');
  697.     field_window(fld,"filepath  ",40,12);
  698.     field_validate(fld,addbackslash);
  699.     fld=establish_field(wnd,0,7,msk78,conf.outpath,'A');
  700.     field_window(fld,"outpath  ",40,14);
  701.     field_validate(fld,addbackslash);
  702.     fld=establish_field(wnd,0,9,msk78,conf.menupath,'A');
  703.     field_window(fld,"menupath  ",40,1);
  704.     field_validate(fld,addbackslash);
  705.     fld=establish_field(wnd,0,11,msk78,conf.messpath,'A');
  706.     field_window(fld,"messpath  ",40,3);
  707.     field_validate(fld,addbackslash);
  708.     fld=establish_field(wnd,0,13,msk78,conf.nodelist,'A');
  709.     field_window(fld,"nodelist  ",40,5);
  710.     field_validate(fld,addbackslash);
  711.     prep_template(wnd);
  712.     data_entry(wnd);
  713.     delete_window(wnd);
  714.     delete_window(instruct);
  715. }
  716.  
  717.  
  718.  
  719. void specfiles(void)
  720.  
  721. {
  722.  
  723.     register word x;
  724.     char s[80];
  725.     WINDOW *wnd;
  726.     FIELD *fld;
  727.     WINDOW *instruct;
  728.  
  729.     clear_message();
  730.     instruct=establish_window(25,22,3,19);
  731.     set_border(instruct,2);
  732.     set_title(instruct," Special Files ");
  733.     set_colors(instruct,ALL,GREEN,BLACK,DIM);
  734.     set_colors(instruct,ACCENT,GREEN,WHITE,BRIGHT);
  735.     display_window(instruct);
  736.     wprintf(instruct,"  [F1] for help ");
  737.  
  738.     wnd=establish_window(15,0,22,50);
  739.     set_title(wnd," Special Files ");
  740.     set_colors(wnd,ALL,BLUE,WHITE,BRIGHT);
  741.     set_colors(wnd,ACCENT,WHITE,BLACK,DIM);
  742.     display_window(wnd);
  743.     for (x=0;x<10;x++) {
  744.         sprintf(s,"Goto file #%01u:",x);
  745.         wprompt(wnd,2,(x),s);
  746.     }
  747.     for (x=0;x<10;x++) {
  748.         sprintf(s,"Gosub file #%01u:",x);
  749.         wprompt(wnd,2,(x+10),s);
  750.     }
  751.     for (x=0;x<10;x++) {
  752.         wprompt(wnd,35,(x),"Key:");
  753.     }
  754.     for (x=0;x<10;x++) {
  755.         wprompt(wnd,36,(x+10),"Key:");
  756.     }
  757.  
  758.     init_template(wnd);
  759.  
  760.     for (x=0;x<10;x++) {
  761.         fld=establish_field(wnd,17,(x),msk12,conf.jumpfile[x],'A');
  762.         field_window(fld,"jumpfiles ",40,10+x);
  763.         fld=establish_field(wnd,41,(x),msk1,conf.jumpkey[x],'a');
  764.         field_window(fld,"jumpkeys  ",40,10+x);
  765.     }
  766.     for(x=0;x<10;x++) {
  767.         fld=establish_field(wnd,18,(x+10),msk12,conf.subfile[x],'A');
  768.         field_window(fld,"subfiles  ",40,11-x);
  769.         fld=establish_field(wnd,42,(x+10),msk1,conf.subkey[x],'a');
  770.         field_window(fld,"subkeys   ",40,11-x);
  771.     }
  772.  
  773.     prep_template(wnd);
  774.     data_entry(wnd);
  775.     delete_window(wnd);
  776.     delete_window(instruct);
  777. }
  778.  
  779.  
  780. void params (void)
  781.  
  782. {
  783.  
  784.     WINDOW *wnd;
  785.     FIELD *fld;
  786.     WINDOW *instruct;
  787.     char commport[4];
  788.     char idleseconds[6];
  789.     char pages[4];
  790.     char debug[2];
  791.     char uptime[2];
  792.     char downtime[2];
  793.     char callcount[16];
  794.     char sysopin[2];
  795.     char touchup[2];
  796.     char ansiavail[2];
  797.     char startat[4];
  798.     char numcomps[4];
  799.     char dvideo[2];
  800.     char comments[4];
  801.     char bioswrites[2];
  802.     char purge[7];
  803.     char genphone[2];
  804.  
  805.     clear_message();
  806.     instruct=establish_window(25,23,3,21);
  807.     set_border(instruct,2);
  808.     set_title(instruct," Parameters [1] ");
  809.     set_colors(instruct,ALL,GREEN,BLACK,DIM);
  810.     set_colors(instruct,ACCENT,GREEN,WHITE,BRIGHT);
  811.     display_window(instruct);
  812.     wprintf(instruct,"  [F1] for help  ");
  813.  
  814.     sprintf(comments,"%hu",conf.comments);
  815.     sprintf(numcomps,"%hu",conf.numcomps);
  816.     sprintf(startat,"%-hu",conf.startat);
  817.     sprintf(callcount,"%-lu",conf.callcount);
  818.     sprintf(commport,"%-hu",conf.commport);
  819.     sprintf(pages,"%-hu",conf.pages);
  820.     sprintf(idleseconds,"%-u",conf.idleseconds);
  821.     sprintf(purge,"%-u",conf.purgebaud);
  822.     if (conf.sysopin==1) strcpy(sysopin,"Y");
  823.     else strcpy(sysopin,"N");
  824.     if (conf.touchup==0) strcpy(touchup,"N");
  825.     else strcpy(touchup,"Y");
  826.     if (conf.ansiavail==0) strcpy(ansiavail,"N");
  827.     else strcpy(ansiavail,"Y");
  828.     if (conf.dvideo==0) strcpy(dvideo,"N");
  829.     else strcpy(dvideo,"Y");
  830.     if (!conf.debug) strcpy(debug,"N");
  831.     else strcpy(debug,"Y");
  832.     if (conf.downtime==0) strcpy(downtime,"N");
  833.     else strcpy(downtime,"Y");
  834.     if (conf.uptime==0) strcpy(uptime,"N");
  835.     else strcpy(uptime,"Y");
  836.     if (conf.bioswrites==0) strcpy(bioswrites,"N");
  837.     else strcpy(bioswrites,"Y");
  838.     if (conf.genphone==0) strcpy(genphone,"N");
  839.     else strcpy(genphone,"Y");
  840.  
  841.     wnd=establish_window(4,1,21,64);
  842.     set_border(wnd,3);
  843.     set_title(wnd," Miscellaneous Parameters [1] ");
  844.     set_colors(wnd,ALL,BLUE,WHITE,BRIGHT);
  845.     set_colors(wnd,ACCENT,WHITE,BLACK,DIM);
  846.     display_window(wnd);
  847.     wprompt(wnd,2,1,"SysOp In?");
  848.     wprompt(wnd,2,2,"Maximum number of unanswered pages:");
  849.     wprompt(wnd,2,3,"Maximum number of `idle' seconds:");
  850.     wprompt(wnd,2,4,"Commport (0=COM1 1=COM2 etc.):");
  851.     wprompt(wnd,2,5,"Start U/D Ratio enforcement at d/l #:");
  852.     wprompt(wnd,2,6,"Number of system calls:");
  853.     wprompt(wnd,2,7,"Is ANSI processing available?");
  854.     wprompt(wnd,2,8,"`Touch-up' new upload dates?");
  855.     wprompt(wnd,2,9,"Give back upload time?");
  856.     wprompt(wnd,2,10,"Give back download time?");
  857.     wprompt(wnd,2,11,"`Debug' mode on?");
  858.     wprompt(wnd,2,12,"Number of computer types to track?");
  859.     wprompt(wnd,2,13,"Use direct screen writes?");
  860.     wprompt(wnd,2,14,"Number of comment lines @ uploads?");
  861.     wprompt(wnd,2,15,"BIOS writes for ANSI writes?");
  862.     wprompt(wnd,2,16,"Maximum purge baud?");
  863.     wprompt(wnd,2,17,"Use generic phone # input?");
  864.  
  865.     init_template(wnd);
  866.  
  867.     fld=establish_field(wnd,40,1,msk1,sysopin,'A');
  868.     field_window(fld,"sysopin   ",40,10);
  869.     field_validate(fld,yesorno);
  870.     fld=establish_field(wnd,40,2,mskst,pages,'N');
  871.     field_window(fld,"pages     ",40,12);
  872.     fld=establish_field(wnd,40,3,mskzip,idleseconds,'N');
  873.     field_window(fld,"idlesecond",40,13);
  874.     fld=establish_field(wnd,40,4,msk2,commport,'N');
  875.     field_window(fld,"commport  ",40,14);
  876.     fld=establish_field(wnd,40,5,mskst,startat,'N');
  877.     field_window(fld,"startat   ",40,14);
  878.     fld=establish_field(wnd,40,6,msk15,callcount,'N');
  879.     field_window(fld,"callcount ",40,1);
  880.     fld=establish_field(wnd,40,7,msk1,ansiavail,'A');
  881.     field_window(fld,"ansiavail ",40,2);
  882.     field_validate(fld,yesorno);
  883.     fld=establish_field(wnd,40,8,msk1,touchup,'A');
  884.     field_window(fld,"touchup   ",40,3);
  885.     field_validate(fld,yesorno);
  886.     fld=establish_field(wnd,40,9,msk1,uptime,'A');
  887.     field_window(fld,"uptime    ",40,4);
  888.     field_validate(fld,yesorno);
  889.     fld=establish_field(wnd,40,10,msk1,downtime,'A');
  890.     field_window(fld,"downtime  ",40,5);
  891.     field_validate(fld,yesorno);
  892.     fld=establish_field(wnd,40,11,msk1,debug,'A');
  893.     field_window(fld,"debug     ",40,6);
  894.     field_validate(fld,yesorno);
  895.     fld=establish_field(wnd,40,12,msk3,numcomps,'N');
  896.     field_window(fld,"numcomps  ",40,7);
  897.     field_validate(fld,lessthan255);
  898.     fld=establish_field(wnd,40,13,msk1,dvideo,'A');
  899.     field_window(fld,"dvideo    ",40,2);
  900.     field_validate(fld,yesorno);
  901.     fld=establish_field(wnd,40,14,msk3,comments,'N');
  902.     field_window(fld,"comments  ",40,3);
  903.     fld=establish_field(wnd,40,15,msk1,bioswrites,'A');
  904.     field_window(fld,"bioswrites",40,4);
  905.     field_validate(fld,yesorno);
  906.     fld=establish_field(wnd,40,16,msk6,purge,'N');
  907.     field_window(fld,"purge     ",40,5);
  908.     field_validate(fld,purger);
  909.     fld=establish_field(wnd,40,17,msk1,genphone,'A');
  910.     field_window(fld,"genphone  ",40,6);
  911.     field_validate(fld,yesorno);
  912.  
  913.     prep_template(wnd);
  914.     data_entry(wnd);
  915.     delete_window(wnd);
  916.  
  917.     conf.commport=(char)atoi(commport);
  918.     conf.idleseconds=(word)atol(idleseconds);
  919.     conf.pages=(byte)atoi(pages);
  920.     conf.purgebaud=(word)atol(purge);
  921.     if(*debug=='Y') conf.debug=1;
  922.     else conf.debug=0;
  923.     if (*uptime=='Y') conf.uptime=1;
  924.     else conf.uptime=0;
  925.     if (*downtime=='Y') conf.downtime=1;
  926.     else conf.downtime=0;
  927.     if (*dvideo=='Y') conf.dvideo=1;
  928.     else conf.dvideo=0;
  929.     if (*bioswrites=='Y') conf.bioswrites=1;
  930.     else conf.bioswrites=0;
  931.     if (*genphone=='Y') conf.genphone=1;
  932.     else conf.genphone=0;
  933.     conf.callcount=(ulong)atol(callcount);
  934.     if (*sysopin=='Y')conf.sysopin=1;
  935.     else conf.sysopin=0;
  936.     if (*touchup=='Y') conf.touchup=1;
  937.     else conf.touchup=0;
  938.     if (*ansiavail=='Y') conf.ansiavail=1;
  939.     else conf.ansiavail=0;
  940.     conf.startat=(byte)atoi(startat);
  941.     conf.numcomps=(byte)atoi(numcomps);
  942.     conf.comments=(byte)atoi(comments);
  943.  
  944.     delete_window(instruct);
  945. }
  946.  
  947.  
  948. void params2 (void)
  949.  
  950. {
  951.  
  952.     WINDOW *wnd;
  953.     FIELD *fld;
  954.     WINDOW *instruct;
  955.     char genstatezip[2];
  956.     char LIMEMS[2];
  957.     char swap[2];
  958.     char useswapdisk[2];
  959.     char promptsay[2];
  960.     char numcarbons[2];
  961.     char sharing[2];
  962.     char nolmrs[5];
  963.     char logmenu[2];
  964.     char logmsg[2];
  965.     char logfile[2];
  966.     char logtext[2];
  967.     char fastansi[2];
  968.     char forcefilemsg[2];
  969.     char prev_quote_file[13];
  970.     char nextid[32];
  971.     char packsize[6];
  972.     char helpkey[2];
  973.     char RBBSorQBBS[2];
  974.  
  975.     clear_message();
  976.     instruct=establish_window(25,24,3,21);
  977.     set_border(instruct,2);
  978.     set_title(instruct," Parameters [2] ");
  979.     set_colors(instruct,ALL,GREEN,BLACK,DIM);
  980.     set_colors(instruct,ACCENT,GREEN,WHITE,BRIGHT);
  981.     display_window(instruct);
  982.     wprintf(instruct,"  [F1] for help  ");
  983.  
  984.     strcpy(prev_quote_file,conf.quote_file);
  985.     if(conf.nolmrs<50) conf.nolmrs=50;
  986.     if(conf.nolmrs>4095) conf.nolmrs=4095;
  987.     sprintf(nolmrs,"%u",conf.nolmrs);
  988.     if (conf.LIMEMS) strcpy(LIMEMS,"Y");
  989.     else strcpy(LIMEMS,"N");
  990.     if (conf.swap) strcpy(swap,"Y");
  991.     else strcpy(swap,"N");
  992.     sprintf(useswapdisk,"%c",conf.useswapdisk);
  993.     if (conf.genstatezip==0) strcpy(genstatezip,"N");
  994.     else strcpy(genstatezip,"Y");
  995.     if (conf.promptsay==0) strcpy(promptsay,"N");
  996.     else strcpy(promptsay,"Y");
  997.     if (conf.fastANSI==0) strcpy(fastansi,"N");
  998.     else strcpy(fastansi,"Y");
  999.     if (conf.carbons>9) conf.carbons=9;
  1000.     sprintf(numcarbons,"%u",conf.carbons);
  1001.     if (conf.share) strcpy(sharing,"Y");
  1002.     else strcpy(sharing,"N");
  1003.     if (conf.logfiles) strcpy(logfile,"Y");
  1004.     else strcpy(logfile,"N");
  1005.     if (conf.logmsg) strcpy(logmsg,"Y");
  1006.     else strcpy(logmsg,"N");
  1007.     if(conf.forcefilemsg) strcpy(forcefilemsg,"Y");
  1008.     else strcpy(forcefilemsg,"N");
  1009.     if (conf.logmenu) strcpy(logmenu,"Y");
  1010.     else strcpy(logmenu,"N");
  1011.     if (conf.logtext) strcpy(logtext,"Y");
  1012.     else strcpy(logtext,"N");
  1013.     if (conf.RBBSorQBBS) strcpy(RBBSorQBBS,"Y");
  1014.     else strcpy(RBBSorQBBS,"N");
  1015.     sprintf(nextid,"%01lu",conf.nextid);
  1016.     sprintf(packsize,"%01u",conf.packsize);
  1017.     *helpkey=conf.helpkey;
  1018.     helpkey[1]=0;
  1019.     if(*helpkey==0 || *helpkey==' ') *helpkey=20;
  1020.  
  1021.     wnd=establish_window(4,0,22,64);
  1022.     set_border(wnd,3);
  1023.     set_title(wnd," Miscellaneous Parameters [2] ");
  1024.     set_colors(wnd,ALL,BLUE,WHITE,BRIGHT);
  1025.     set_colors(wnd,ACCENT,WHITE,BLACK,DIM);
  1026.     display_window(wnd);
  1027.     wprompt(wnd,2,1,"Helpkey:");
  1028.     wprompt(wnd,2,2,"#LMRs to keep:");
  1029.     wprompt(wnd,2,3,"Swap on spawn?");
  1030.     wprompt(wnd,2,4,"Use EMS?");
  1031.     wprompt(wnd,2,5,"Swapdrive:");
  1032.     wprompt(wnd,2,6,"Print Prompt #'s?");
  1033.     wprompt(wnd,2,7,"Generic state/zip field?");
  1034.     wprompt(wnd,2,8,"# Carbon msgs:");
  1035.     wprompt(wnd,2,9,"Share (M'tasking)?");
  1036.     wprompt(wnd,2,10,"Log names of all menus?");
  1037.     wprompt(wnd,2,11,"Log when msgs are read in an area?");
  1038.     wprompt(wnd,2,12,"Log when files are listed in an area?");
  1039.     wprompt(wnd,2,13,"Log text files when paged-read?");
  1040.     wprompt(wnd,2,14,"Fast ANSI output via INT 29h?");
  1041.     wprompt(wnd,2,15,"Indexed Quote File:");
  1042.     wprompt(wnd,2,16,"Force msgs @ upload?");
  1043.     wprompt(wnd,2,17,"Next user id:");
  1044.     wprompt(wnd,2,18,"Size at which to compress msgs:");
  1045.     wprompt(wnd,2,19,"Make RBBS-style DORINFO?.DEF?");
  1046.  
  1047.     init_template(wnd);
  1048.  
  1049.     fld=establish_field(wnd,40,1,msk1,helpkey,'a');
  1050.     field_window(fld,"helpkey   ",1,12);
  1051.     fld=establish_field(wnd,40,2,msk4,nolmrs,'N');
  1052.     field_window(fld,"nolmrs    ",40,6);
  1053.     fld=establish_field(wnd,40,3,msk1,swap,'A');
  1054.     field_window(fld,"swap      ",40,6);
  1055.     field_validate(fld,yesorno);
  1056.     fld=establish_field(wnd,40,4,msk1,LIMEMS,'A');
  1057.     field_window(fld,"ems       ",40,7);
  1058.     field_validate(fld,yesorno);
  1059.     fld=establish_field(wnd,40,5,msk1,useswapdisk,'A');
  1060.     field_window(fld,"swapdrive ",40,8);
  1061.     fld=establish_field(wnd,40,6,msk1,promptsay,'A');
  1062.     field_validate(fld,yesorno);
  1063.     field_window(fld,"promptsay ",1,9);
  1064.     fld=establish_field(wnd,40,7,msk1,genstatezip,'A');
  1065.     field_validate(fld,yesorno);
  1066.     field_window(fld,"genstatezi",40,9);
  1067.     fld=establish_field(wnd,40,8,msk1,numcarbons,'N');
  1068.     field_window(fld,"numcarbons",1,10);
  1069.     fld=establish_field(wnd,40,9,msk1,sharing,'A');
  1070.     field_window(fld,"share     ",1,10);
  1071.     field_validate(fld,yesorno);
  1072.     fld=establish_field(wnd,40,10,msk1,logmenu,'A');
  1073.     field_window(fld,"logmenu   ",1,10);
  1074.     field_validate(fld,yesorno);
  1075.     fld=establish_field(wnd,40,11,msk1,logmsg,'A');
  1076.     field_window(fld,"logmsg    ",1,10);
  1077.     field_validate(fld,yesorno);
  1078.     fld=establish_field(wnd,40,12,msk1,logfile,'A');
  1079.     field_window(fld,"logfile   ",1,10);
  1080.     field_validate(fld,yesorno);
  1081.     fld=establish_field(wnd,40,13,msk1,logtext,'A');
  1082.     field_window(fld,"logtext   ",1,10);
  1083.     field_validate(fld,yesorno);
  1084.     fld=establish_field(wnd,40,14,msk1,fastansi,'A');
  1085.     field_window(fld,"fastansi  ",1,11);
  1086.     field_validate(fld,yesorno);
  1087.     fld=establish_field(wnd,40,15,msk12,conf.quote_file,'A');
  1088.     field_window(fld,"quotefile ",1,12);
  1089.     fld=establish_field(wnd,40,16,msk1,forcefilemsg,'A');
  1090.     field_window(fld,"filemsg   ",1,10);
  1091.     field_validate(fld,yesorno);
  1092.     fld=establish_field(wnd,40,17,msk12,nextid,'N');
  1093.     field_window(fld,"nextid    ",1,9);
  1094.     fld=establish_field(wnd,40,18,msk5,packsize,'N');
  1095.     field_window(fld,"packsize  ",1,8);
  1096.     fld=establish_field(wnd,40,19,msk1,RBBSorQBBS,'A');
  1097.     field_validate(fld,yesorno);
  1098.     field_window(fld,"RBBSorQBBS",1,8);
  1099.  
  1100.     prep_template(wnd);
  1101.     data_entry(wnd);
  1102.     delete_window(wnd);
  1103.  
  1104.     rstrip(conf.quote_file);
  1105.     if(strcmp(conf.quote_file,prev_quote_file)) conf.quote_pos=0;
  1106.     conf.nolmrs=(word)atol(nolmrs);
  1107.     if(conf.nolmrs<50) conf.nolmrs=50;
  1108.     if(conf.nolmrs>4095) conf.nolmrs=4095;
  1109.     if (*swap=='Y') conf.swap=1;
  1110.     else conf.swap=0;
  1111.     if (*logtext=='Y') conf.logtext=1;
  1112.     else conf.logtext=0;
  1113.     if (*logmsg=='Y') conf.logmsg=1;
  1114.     else conf.logmsg=0;
  1115.     if (*logmenu=='Y') conf.logmenu=1;
  1116.     else conf.logmenu=0;
  1117.     if (*logfile=='Y') conf.logfiles=1;
  1118.     else conf.logfiles=0;
  1119.     if (*fastansi=='Y') conf.fastANSI=1;
  1120.     else conf.fastANSI=0;
  1121.     if (*LIMEMS=='Y') conf.LIMEMS=1;
  1122.     else conf.LIMEMS=0;
  1123.     conf.useswapdisk=*useswapdisk;
  1124.     if (*promptsay=='Y') conf.promptsay=1;
  1125.     else conf.promptsay=0;
  1126.     if (*genstatezip=='Y') conf.genstatezip=1;
  1127.     else conf.genstatezip=0;
  1128.     if(*sharing=='Y') conf.share=1;
  1129.     else conf.share=0;
  1130.     conf.carbons=(byte)atoi(numcarbons);
  1131.     if(*forcefilemsg=='Y') conf.forcefilemsg=1;
  1132.     else conf.forcefilemsg=0;
  1133.     conf.nextid=(ulong)atol(nextid);
  1134.     if((word)atol(packsize)<1024) conf.packsize=1024;
  1135.     else conf.packsize=(word)atol(packsize);
  1136.     conf.helpkey=*helpkey;
  1137.     if(*RBBSorQBBS=='Y') conf.RBBSorQBBS=1;
  1138.     else conf.RBBSorQBBS=0;
  1139.  
  1140.     delete_window(instruct);
  1141. }
  1142.  
  1143.  
  1144.  
  1145. void mboardd (void) {
  1146.  
  1147.     WINDOW *wnd;
  1148.     FIELD *fld;
  1149.     WINDOW *instruct;
  1150.     char max[6];
  1151.     char number[6];
  1152.     char substat1[6];
  1153.     char substat2[6];
  1154.     char public[2];
  1155.     char private[2];
  1156.     char real[2];
  1157.     char echo[2];
  1158.     char net[2];
  1159.     char readonly[2];
  1160.     char alternate[2];
  1161.  
  1162.     conf.mboard.minwrite=0;
  1163.     conf.mboard.age=0;
  1164.     conf.mboard.flags=0;
  1165.     sprintf(max,"%-u",conf.mboard.max);
  1166.     sprintf(number,"%-u",conf.mboard.number);
  1167.     number[4]=0;
  1168.     sprintf(substat1,"%-u",conf.mboard.substat1);
  1169.     sprintf(substat2,"%-u",conf.mboard.substat2);
  1170.     if ((conf.mboard.attr & PUBLIC)!=0) strcpy(public,"Y");
  1171.     else strcpy(public,"N");
  1172.     if ((conf.mboard.attr & PRIVATE)!=0) strcpy(private,"Y");
  1173.     else strcpy(private,"N");
  1174.     if ((conf.mboard.attr & REAL)!=0) strcpy(real,"Y");
  1175.     else strcpy(real,"N");
  1176.     if ((conf.mboard.attr & NET)!=0) strcpy(net,"Y");
  1177.     else strcpy(net,"N");
  1178.     if ((conf.mboard.attr & ECHO)!=0) strcpy(echo,"Y");
  1179.     else strcpy(echo,"N");
  1180.     if ((conf.mboard.attr & READONLY)!=0) strcpy(readonly,"Y");
  1181.     else strcpy(readonly,"N");
  1182.     if ((conf.mboard.attr & ALTERNATE)!=0) strcpy(alternate,"Y");
  1183.     else strcpy(alternate,"N");
  1184.  
  1185.  
  1186.     clear_message();
  1187.     instruct=establish_window(25,22,3,21);
  1188.     set_border(instruct,2);
  1189.     set_title(instruct," Default Message ");
  1190.     set_colors(instruct,ALL,GREEN,BLACK,DIM);
  1191.     set_colors(instruct,ACCENT,GREEN,WHITE,BRIGHT);
  1192.     display_window(instruct);
  1193.     wprintf(instruct,"   [F1] for help  ");
  1194.  
  1195.     wnd=establish_window(4,4,19,78);
  1196.     set_border(wnd,3);
  1197.     set_title(wnd," Default Message Area ");
  1198.     set_colors(wnd,ALL,BLUE,WHITE,BRIGHT);
  1199.     set_colors(wnd,ACCENT,WHITE,BLACK,DIM);
  1200.     display_window(wnd);
  1201.     wprompt(wnd,2,1,"Message area name:");
  1202.     wprompt(wnd,2,2,"Force to:");
  1203.     wprompt(wnd,2,3,"Maximum # of messages:");
  1204.     wprompt(wnd,2,4,"Number of area:");
  1205.     wprompt(wnd,2,5,"SubOp Status #0:");
  1206.     wprompt(wnd,2,6,"SubOp Status #1:");
  1207.     wprompt(wnd,2,7,"Public Messages OK?");
  1208.     wprompt(wnd,2,8,"Private Messages OK?");
  1209.     wprompt(wnd,2,9,"Real Names Only?");
  1210.     wprompt(wnd,2,10,"Echo Area?");
  1211.     wprompt(wnd,2,11,"Net Area?");
  1212.     wprompt(wnd,2,12,"Alternate Net Area?");
  1213.     wprompt(wnd,2,13,"Read-Only Area?");
  1214.     wprompt(wnd,2,14,"Default Origin Line:");
  1215.     init_template(wnd);
  1216.     fld=establish_field(wnd,26,1,msk47,conf.mboard.name,'a');
  1217.     field_window(fld,"mname     ",40,10);
  1218.     field_validate(fld,nocommas);
  1219.     fld=establish_field(wnd,26,2,msk35,conf.mboard.forceto,'a');
  1220.     field_window(fld,"forceto   ",40,12);
  1221.     fld=establish_field(wnd,26,3,mskzip,max,'N');
  1222.     field_window(fld,"max       ",40,14);
  1223.     fld=establish_field(wnd,26,4,msk3,number,'N');
  1224.     field_window(fld,"number    ",40,16);
  1225.     fld=establish_field(wnd,26,5,mskzip,substat1,'N');
  1226.     field_window(fld,"substat1  ",40,1);
  1227.     fld=establish_field(wnd,26,6,mskzip,substat2,'N');
  1228.     field_window(fld,"substat2  ",40,2);
  1229.     fld=establish_field(wnd,26,7,msk1,public,'A');
  1230.     field_window(fld,"public    ",40,3);
  1231.     field_validate(fld,yesorno);
  1232.     fld=establish_field(wnd,26,8,msk1,private,'A');
  1233.     field_window(fld,"private   ",40,4);
  1234.     field_validate(fld,yesorno);
  1235.     fld=establish_field(wnd,26,9,msk1,real,'A');
  1236.     field_window(fld,"real      ",40,5);
  1237.     field_validate(fld,yesorno);
  1238.     fld=establish_field(wnd,26,10,msk1,echo,'A');
  1239.     field_window(fld,"echo      ",40,5);
  1240.     field_validate(fld,yesorno);
  1241.     fld=establish_field(wnd,26,11,msk1,net,'A');
  1242.     field_window(fld,"nett      ",40,5);
  1243.     field_validate(fld,yesorno);
  1244.     fld=establish_field(wnd,26,12,msk1,alternate,'A');
  1245.     field_window(fld,"alternate ",40,5);
  1246.     field_validate(fld,yesorno);
  1247.     fld=establish_field(wnd,26,13,msk1,readonly,'A');
  1248.     field_window(fld,"readonly  ",40,5);
  1249.     field_validate(fld,yesorno);
  1250.     fld=establish_field(wnd,2,15,msk58,conf.origin,'a');
  1251.     field_window(fld,"origin    ",40,5);
  1252.  
  1253.     prep_template(wnd);
  1254.     data_entry(wnd);
  1255.     delete_window(wnd);
  1256.  
  1257.     conf.mboard.attr=0;
  1258.     if (*public=='Y') conf.mboard.attr=conf.mboard.attr+PUBLIC;
  1259.     if (*private=='Y' && *echo=='N') conf.mboard.attr=conf.mboard.attr+PRIVATE;
  1260.     if (*real=='Y') conf.mboard.attr=conf.mboard.attr+REAL;
  1261.     if (*echo=='Y') conf.mboard.attr=conf.mboard.attr+ECHO;
  1262.     if (*net=='Y') conf.mboard.attr=conf.mboard.attr+NET;
  1263.     if (*readonly=='Y') conf.mboard.attr=conf.mboard.attr+READONLY;
  1264.     if (*alternate=='Y') conf.mboard.attr=conf.mboard.attr+ALTERNATE;
  1265.     conf.mboard.max=(word)atoi(max);
  1266.     conf.mboard.number=(word)atoi(number);
  1267.     conf.mboard.substat1=(word)atoi(substat1);
  1268.     conf.mboard.substat2=(word)atoi(substat2);
  1269.  
  1270.     delete_window(instruct);
  1271.  
  1272. }
  1273.  
  1274.  
  1275. void fboardd(void) {
  1276.  
  1277.     WINDOW *wnd;
  1278.     FIELD *fld;
  1279.     WINDOW *instruct;
  1280.     char flags[2];
  1281.     char freedls[2];
  1282.  
  1283.     clear_message();
  1284.     instruct=establish_window(25,22,3,21);
  1285.     set_border(instruct,2);
  1286.     set_title(instruct," File Area ");
  1287.     set_colors(instruct,ALL,GREEN,BLACK,DIM);
  1288.     set_colors(instruct,ACCENT,GREEN,WHITE,BRIGHT);
  1289.     display_window(instruct);
  1290.     wprintf(instruct,"   [F1] for help  ");
  1291.  
  1292.     if (conf.fboard.flags & COUNTDLS) strcpy(flags,"Y");
  1293.     else strcpy(flags,"N");
  1294.     if (conf.fboard.flags & FREEFILES) strcpy(freedls,"Y");
  1295.     else strcpy(freedls,"N");
  1296.  
  1297.     conf.fboard.leechpercent=0;
  1298.     conf.fboard.age=0;
  1299.     conf.fboard.userflags=0;
  1300.  
  1301.     wnd=establish_window(0,5,10,80);
  1302.     set_border(wnd,3);
  1303.     set_title(wnd," Default File Area ");
  1304.     set_colors(wnd,ALL,BLUE,WHITE,BRIGHT);
  1305.     set_colors(wnd,ACCENT,WHITE,BLACK,DIM);
  1306.     display_window(wnd);
  1307.     wprompt(wnd,2,1,"File Area Name:");
  1308.     wprompt(wnd,2,2,"Download Path:");
  1309.     wprompt(wnd,2,4,"Upload Path:");
  1310.     wprompt(wnd,2,6,"Track number of downloads?");
  1311.     wprompt(wnd,2,7,"Free downloads?");
  1312.     init_template(wnd);
  1313.     fld=establish_field(wnd,18,1,msk46,conf.fboard.name,'a');
  1314.     field_window(fld,"fname     ",40,12);
  1315.     field_validate(fld,nocommas);
  1316.     fld=establish_field(wnd,0,3,msk78,conf.fboard.dpath,'A');
  1317.     field_window(fld,"dpath     ",40,13);
  1318.     field_validate(fld,addbackslash);
  1319.     fld=establish_field(wnd,0,5,msk78,conf.fboard.upath,'A');
  1320.     field_window(fld,"upath     ",40,14);
  1321.     field_validate(fld,addbackslash);
  1322.     fld=establish_field(wnd,30,6,msk1,flags,'A');
  1323.     field_window(fld,"fflags    ",40,14);
  1324.     field_validate(fld,yesorno);
  1325.     fld=establish_field(wnd,30,7,msk1,freedls,'A');
  1326.     field_window(fld,"freefiles ",40,14);
  1327.     field_validate(fld,yesorno);
  1328.  
  1329.     prep_template(wnd);
  1330.     data_entry(wnd);
  1331.     if (*flags=='Y') conf.fboard.flags=conf.fboard.flags | COUNTDLS;
  1332.     else conf.fboard.flags=conf.fboard.flags & (~COUNTDLS);
  1333.     if (*freedls=='Y') conf.fboard.flags=conf.fboard.flags | FREEFILES;
  1334.     else conf.fboard.flags=conf.fboard.flags & (~FREEFILES);
  1335.     delete_window(wnd);
  1336.     delete_window(instruct);
  1337.  
  1338. }
  1339.  
  1340.  
  1341.  
  1342. void prompts(void) {
  1343.  
  1344.     int exitcode;
  1345.     signed char which=1;
  1346.     WINDOW *instruct;
  1347.  
  1348.     clear_message();
  1349.     instruct=establish_window(25,22,3,55);
  1350.     set_border(instruct,2);
  1351.     set_title(instruct," Logon Question Switches ");
  1352.     set_colors(instruct,ALL,GREEN,BLACK,DIM);
  1353.     set_colors(instruct,ACCENT,GREEN,WHITE,BRIGHT);
  1354.     display_window(instruct);
  1355.     wprintf(instruct," [F1] for help -- X to set, [Space] to reset");
  1356.  
  1357.     exitcode=prompt1();
  1358.     delete_window(instruct);
  1359.     return;
  1360. }
  1361.