home *** CD-ROM | disk | FTP | other *** search
/ PC Online 1998 September / PCO_0998.ISO / filesbbs / dos / sbbs_src.exe / SBBS / SCFG / WRCNF2.C < prev   
Encoding:
C/C++ Source or Header  |  1997-04-13  |  10.5 KB  |  495 lines

  1. #line 2 "WRCNF2.C"
  2.  
  3. /* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */
  4.  
  5. #include "scfg.h"
  6.  
  7. extern int no_msghdr,all_msghdr;
  8. extern int no_dirchk;
  9.  
  10. extern char *crlf;
  11. extern char nulbuf[];
  12. extern int    pslen;
  13.  
  14. #define put_int(var,stream) fwrite(&var,1,sizeof(var),stream)
  15. #define put_str(var,stream) { pslen=strlen(var); \
  16.                             fwrite(var,1,pslen > sizeof(var) \
  17.                                 ? sizeof(var) : pslen ,stream); \
  18.                             fwrite(nulbuf,1,pslen > sizeof(var) \
  19.                                 ? 0 : sizeof(var)-pslen,stream); }
  20.  
  21. void backup(char *org)
  22. {
  23.     char old[128],new[128];
  24.     int i,x;
  25.  
  26. x=strlen(org)-1;
  27. if(x<=0)
  28.     return;
  29. strcpy(old,org);
  30. strcpy(new,org);
  31. for(i=backup_level;i;i--) {
  32.     new[x]=(i-1)+'0';
  33.     if(i==backup_level)
  34.         remove(new);
  35.     if(i==1) {
  36.         rename(org,new);
  37.         continue; }
  38.     old[x]=(i-2)+'0';
  39.     rename(old,new); }
  40. }
  41.  
  42.  
  43. void write_file_cfg()
  44. {
  45.     char    str[128],cmd[LEN_CMD+1],c;
  46.     int     i,j,k,file;
  47.     short    n;
  48.     long    l=0;
  49.     FILE    *stream;
  50.  
  51. upop("Writing FILE.CNF...");
  52. sprintf(str,"%sFILE.CNF",ctrl_dir);
  53. backup(str);
  54.  
  55. if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1
  56.     || (stream=fdopen(file,"wb"))==NULL) {
  57.     errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_TRUNC);
  58.     return; }
  59. setvbuf(stream,NULL,_IOFBF,2048);
  60.  
  61. put_int(min_dspace,stream);
  62. put_int(max_batup,stream);
  63. put_int(max_batdn,stream);
  64. put_int(max_userxfer,stream);
  65. put_int(l,stream);                    /* unused */
  66. put_int(cdt_up_pct,stream);
  67. put_int(cdt_dn_pct,stream);
  68. put_int(l,stream);                    /* unused */
  69. put_str(cmd,stream);
  70. put_int(leech_pct,stream);
  71. put_int(leech_sec,stream);
  72. n=0;
  73. for(i=0;i<32;i++)
  74.     put_int(n,stream);
  75.  
  76. /* Extractable File Types */
  77.  
  78. put_int(total_fextrs,stream);
  79. for(i=0;i<total_fextrs;i++) {
  80.     put_str(fextr[i]->ext,stream);
  81.     put_str(fextr[i]->cmd,stream);
  82.     put_str(fextr[i]->ar,stream);
  83.     n=0;
  84.     for(j=0;j<8;j++)
  85.         put_int(n,stream); }
  86.  
  87. /* Compressable File Types */
  88.  
  89. put_int(total_fcomps,stream);
  90. for(i=0;i<total_fcomps;i++) {
  91.     put_str(fcomp[i]->ext,stream);
  92.     put_str(fcomp[i]->cmd,stream);
  93.     put_str(fcomp[i]->ar,stream);
  94.     n=0;
  95.     for(j=0;j<8;j++)
  96.         put_int(n,stream); }
  97.  
  98. /* Viewable File Types */
  99.  
  100. put_int(total_fviews,stream);
  101. for(i=0;i<total_fviews;i++) {
  102.     put_str(fview[i]->ext,stream);
  103.     put_str(fview[i]->cmd,stream);
  104.     put_str(fview[i]->ar,stream);
  105.     n=0;
  106.     for(j=0;j<8;j++)
  107.         put_int(n,stream); }
  108.  
  109. /* Testable File Types */
  110.  
  111. put_int(total_ftests,stream);
  112. for(i=0;i<total_ftests;i++) {
  113.     put_str(ftest[i]->ext,stream);
  114.     put_str(ftest[i]->cmd,stream);
  115.     put_str(ftest[i]->workstr,stream);
  116.     put_str(ftest[i]->ar,stream);
  117.     n=0;
  118.     for(j=0;j<8;j++)
  119.         put_int(n,stream); }
  120.  
  121. /* Download Events */
  122.  
  123. put_int(total_dlevents,stream);
  124. for(i=0;i<total_dlevents;i++) {
  125.     put_str(dlevent[i]->ext,stream);
  126.     put_str(dlevent[i]->cmd,stream);
  127.     put_str(dlevent[i]->workstr,stream);
  128.     put_str(dlevent[i]->ar,stream);
  129.     n=0;
  130.     for(j=0;j<8;j++)
  131.         put_int(n,stream); }
  132.  
  133. /* File Transfer Protocols */
  134.  
  135. put_int(total_prots,stream);
  136. for(i=0;i<total_prots;i++) {
  137.     put_int(prot[i]->mnemonic,stream);
  138.     put_str(prot[i]->name,stream);
  139.     put_str(prot[i]->ulcmd,stream);
  140.     put_str(prot[i]->dlcmd,stream);
  141.     put_str(prot[i]->batulcmd,stream);
  142.     put_str(prot[i]->batdlcmd,stream);
  143.     put_str(prot[i]->blindcmd,stream);
  144.     put_str(prot[i]->bicmd,stream);
  145.     put_int(prot[i]->misc,stream);
  146.     put_str(prot[i]->ar,stream);
  147.     n=0;
  148.     for(j=0;j<8;j++)
  149.         put_int(n,stream); }
  150.  
  151. /* Alternate File Paths */
  152.  
  153. put_int(altpaths,stream);
  154. for(i=0;i<altpaths;i++) {
  155.     backslash(altpath[i]);
  156.     fwrite(altpath[i],LEN_DIR+1,1,stream);
  157.     n=0;
  158.     for(j=0;j<8;j++)
  159.         put_int(n,stream); }
  160.  
  161. /* File Libraries */
  162.  
  163. put_int(total_libs,stream);
  164. for(i=0;i<total_libs;i++) {
  165.     put_str(lib[i]->lname,stream);
  166.     put_str(lib[i]->sname,stream);
  167.     put_str(lib[i]->ar,stream);
  168.     n=0;
  169.     for(j=0;j<32;j++)
  170.         put_int(n,stream);
  171.     n=0xffff;
  172.     for(j=0;j<16;j++)
  173.         put_int(n,stream); }
  174.  
  175. /* File Directories */
  176.  
  177. put_int(total_dirs,stream);
  178. for(j=0;j<total_libs;j++)
  179.     for(i=0;i<total_dirs;i++)
  180.         if(dir[i]->lib==j) {
  181.             put_int(dir[i]->lib,stream);
  182.             put_str(dir[i]->lname,stream);
  183.             put_str(dir[i]->sname,stream);
  184.             put_str(dir[i]->code,stream);
  185.             if(dir[i]->data_dir[0])
  186.                 backslash(dir[i]->data_dir);
  187.             md(dir[i]->data_dir);
  188.             put_str(dir[i]->data_dir,stream);
  189.             put_str(dir[i]->ar,stream);
  190.             put_str(dir[i]->ul_ar,stream);
  191.             put_str(dir[i]->dl_ar,stream);
  192.             put_str(dir[i]->op_ar,stream);
  193.             backslash(dir[i]->path);
  194.             put_str(dir[i]->path,stream);
  195.             if(dir[i]->misc&DIR_FCHK) {
  196.                 strcpy(str,dir[i]->path);
  197.                 md(str); }
  198.  
  199.             put_str(dir[i]->upload_sem,stream);
  200.             put_int(dir[i]->maxfiles,stream);
  201.             put_str(dir[i]->exts,stream);
  202.             put_int(dir[i]->misc,stream);
  203.             put_int(dir[i]->seqdev,stream);
  204.             put_int(dir[i]->sort,stream);
  205.             put_str(dir[i]->ex_ar,stream);
  206.             put_int(dir[i]->maxage,stream);
  207.             put_int(dir[i]->up_pct,stream);
  208.             put_int(dir[i]->dn_pct,stream);
  209.             c=0;
  210.             put_int(c,stream);
  211.             n=0;
  212.             for(k=0;k<8;k++)
  213.                 put_int(n,stream);
  214.             n=0xffff;
  215.             for(k=0;k<16;k++)
  216.                 put_int(n,stream);
  217.             }
  218.  
  219. /* Text File Sections */
  220.  
  221. put_int(total_txtsecs,stream);
  222. for(i=0;i<total_txtsecs;i++) {
  223.     sprintf(str,"%sTEXT\\%s",data_dir,txtsec[i]->code);
  224.     md(str);
  225.     put_str(txtsec[i]->name,stream);
  226.     put_str(txtsec[i]->code,stream);
  227.     put_str(txtsec[i]->ar,stream);
  228.     n=0;
  229.     for(j=0;j<8;j++)
  230.         put_int(n,stream); }
  231.  
  232. fclose(stream);
  233. }
  234.  
  235. void free_file_cfg()
  236. {
  237.     int i;
  238.  
  239. for(i=0;i<total_fextrs;i++)
  240.     FREE(fextr[i]);
  241. FREE(fextr);
  242.  
  243. for(i=0;i<total_fcomps;i++)
  244.     FREE(fcomp[i]);
  245. FREE(fcomp);
  246.  
  247. for(i=0;i<total_fviews;i++)
  248.     FREE(fview[i]);
  249. FREE(fview);
  250.  
  251. for(i=0;i<total_ftests;i++)
  252.     FREE(ftest[i]);
  253. FREE(ftest);
  254.  
  255. for(i=0;i<total_dlevents;i++)
  256.     FREE(dlevent[i]);
  257. FREE(dlevent);
  258.  
  259. for(i=0;i<total_prots;i++)
  260.     FREE(prot[i]);
  261. FREE(prot);
  262.  
  263. for(i=0;i<altpaths;i++)
  264.     FREE(altpath[i]);
  265. FREE(altpath);
  266.  
  267. for(i=0;i<total_libs;i++)
  268.     FREE(lib[i]);
  269. FREE(lib);
  270.  
  271. for(i=0;i<total_dirs;i++)
  272.     FREE(dir[i]);
  273. FREE(dir);
  274.  
  275. for(i=0;i<total_txtsecs;i++)
  276.     FREE(txtsec[i]);
  277. FREE(txtsec);
  278. }
  279.  
  280.  
  281. void write_chat_cfg()
  282. {
  283.     char    str[128];
  284.     int     i,j,file;
  285.     short    n;
  286.     FILE    *stream;
  287.  
  288. upop("Writing CHAT.CNF...");
  289. sprintf(str,"%sCHAT.CNF",ctrl_dir);
  290. backup(str);
  291.  
  292. if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1
  293.     || (stream=fdopen(file,"wb"))==NULL) {
  294.     errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_TRUNC);
  295.     return; }
  296. setvbuf(stream,NULL,_IOFBF,2048);
  297.  
  298. put_int(total_gurus,stream);
  299. for(i=0;i<total_gurus;i++) {
  300.     put_str(guru[i]->name,stream);
  301.     put_str(guru[i]->code,stream);
  302.     put_str(guru[i]->ar,stream);
  303.     n=0;
  304.     for(j=0;j<8;j++)
  305.         put_int(n,stream);
  306.     }
  307.  
  308. put_int(total_actsets,stream);
  309. for(i=0;i<total_actsets;i++)
  310.     put_str(actset[i]->name,stream);
  311.  
  312. put_int(total_chatacts,stream);
  313. for(i=0;i<total_chatacts;i++) {
  314.     put_int(chatact[i]->actset,stream);
  315.     put_str(chatact[i]->cmd,stream);
  316.     put_str(chatact[i]->out,stream);
  317.     n=0;
  318.     for(j=0;j<8;j++)
  319.         put_int(n,stream);
  320.     }
  321.  
  322. put_int(total_chans,stream);
  323. for(i=0;i<total_chans;i++) {
  324.     put_int(chan[i]->actset,stream);
  325.     put_str(chan[i]->name,stream);
  326.     put_str(chan[i]->code,stream);
  327.     put_str(chan[i]->ar,stream);
  328.     put_int(chan[i]->cost,stream);
  329.     put_int(chan[i]->guru,stream);
  330.     put_int(chan[i]->misc,stream);
  331.     n=0;
  332.     for(j=0;j<8;j++)
  333.         put_int(n,stream);
  334.     }
  335.  
  336. put_int(total_pages,stream);
  337. for(i=0;i<total_pages;i++) {
  338.     put_int(page[i]->cmd,stream);
  339.     put_int(page[i]->ar,stream);
  340.     put_int(page[i]->misc,stream);
  341.     n=0;
  342.     for(j=0;j<8;j++)
  343.         put_int(n,stream);
  344.     }
  345.  
  346. fclose(stream);
  347. }
  348.  
  349. void free_chat_cfg()
  350. {
  351.     int i;
  352.  
  353. for(i=0;i<total_actsets;i++)
  354.     FREE(actset[i]);
  355. FREE(actset);
  356.  
  357. for(i=0;i<total_chatacts;i++)
  358.     FREE(chatact[i]);
  359. FREE(chatact);
  360.  
  361. for(i=0;i<total_chans;i++)
  362.     FREE(chan[i]);
  363. FREE(chan);
  364.  
  365. for(i=0;i<total_gurus;i++)
  366.     FREE(guru[i]);
  367. FREE(guru);
  368.  
  369. for(i=0;i<total_pages;i++)
  370.     FREE(page[i]);
  371. FREE(page);
  372.  
  373. }
  374.  
  375. void write_xtrn_cfg()
  376. {
  377.     uchar    str[128],c;
  378.     int     i,j,sec,file;
  379.     short    n;
  380.     long    l;
  381.     FILE    *stream;
  382.  
  383. upop("Writing XTRN.CNF...");
  384. sprintf(str,"%sXTRN.CNF",ctrl_dir);
  385. backup(str);
  386.  
  387. if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1
  388.     || (stream=fdopen(file,"wb"))==NULL) {
  389.     errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_TRUNC);
  390.     return; }
  391. setvbuf(stream,NULL,_IOFBF,2048);
  392.  
  393. put_int(total_swaps,stream);
  394. for(i=0;i<total_swaps;i++)
  395.     put_str(swap[i]->cmd,stream);
  396.  
  397. put_int(total_xedits,stream);
  398. for(i=0;i<total_xedits;i++) {
  399.     put_str(xedit[i]->name,stream);
  400.     put_str(xedit[i]->code,stream);
  401.     put_str(xedit[i]->lcmd,stream);
  402.     put_str(xedit[i]->rcmd,stream);
  403.     put_int(xedit[i]->misc,stream);
  404.     put_str(xedit[i]->ar,stream);
  405.     put_int(xedit[i]->type,stream);
  406.     c=0;
  407.     put_int(c,stream);
  408.     n=0;
  409.     for(j=0;j<7;j++)
  410.         put_int(n,stream);
  411.     }
  412.  
  413. put_int(total_xtrnsecs,stream);
  414. for(i=0;i<total_xtrnsecs;i++) {
  415.     put_str(xtrnsec[i]->name,stream);
  416.     put_str(xtrnsec[i]->code,stream);
  417.     put_str(xtrnsec[i]->ar,stream);
  418.     n=0;
  419.     for(j=0;j<8;j++)
  420.         put_int(n,stream);
  421.     }
  422.  
  423. put_int(total_xtrns,stream);
  424. for(sec=0;sec<total_xtrnsecs;sec++)
  425.     for(i=0;i<total_xtrns;i++) {
  426.         if(xtrn[i]->sec!=sec)
  427.             continue;
  428.         put_int(xtrn[i]->sec,stream);
  429.         put_str(xtrn[i]->name,stream);
  430.         put_str(xtrn[i]->code,stream);
  431.         put_str(xtrn[i]->ar,stream);
  432.         put_str(xtrn[i]->run_ar,stream);
  433.         put_int(xtrn[i]->type,stream);
  434.         put_int(xtrn[i]->misc,stream);
  435.         put_int(xtrn[i]->event,stream);
  436.         put_int(xtrn[i]->cost,stream);
  437.         put_str(xtrn[i]->cmd,stream);
  438.         put_str(xtrn[i]->clean,stream);
  439.         put_str(xtrn[i]->path,stream);
  440.         put_int(xtrn[i]->textra,stream);
  441.         put_int(xtrn[i]->maxtime,stream);
  442.         n=0;
  443.         for(j=0;j<7;j++)
  444.             put_int(n,stream);
  445.         }
  446.  
  447. put_int(total_events,stream);
  448. for(i=0;i<total_events;i++) {
  449.     put_str(event[i]->code,stream);
  450.     put_str(event[i]->cmd,stream);
  451.     put_int(event[i]->days,stream);
  452.     put_int(event[i]->time,stream);
  453.     put_int(event[i]->node,stream);
  454.     put_int(event[i]->misc,stream);
  455.     put_int(event[i]->dir,stream);
  456.     n=0;
  457.     for(j=0;j<8;j++)
  458.         put_int(n,stream);
  459.     }
  460.  
  461. put_int(total_os2pgms,stream);
  462. for(i=0;i<total_os2pgms;i++)
  463.     put_str(os2pgm[i]->name,stream);
  464. for(i=0;i<total_os2pgms;i++)
  465.     put_int(os2pgm[i]->misc,stream);
  466.  
  467. fclose(stream);
  468. }
  469.  
  470. void free_xtrn_cfg()
  471. {
  472.     int i;
  473.  
  474. for(i=0;i<total_swaps;i++)
  475.     FREE(swap[i]);
  476. FREE(swap);
  477.  
  478. for(i=0;i<total_xedits;i++)
  479.     FREE(xedit[i]);
  480. FREE(xedit);
  481.  
  482. for(i=0;i<total_xtrnsecs;i++)
  483.     FREE(xtrnsec[i]);
  484. FREE(xtrnsec);
  485.  
  486. for(i=0;i<total_xtrns;i++)
  487.     FREE(xtrn[i]);
  488. FREE(xtrn);
  489.  
  490. for(i=0;i<total_events;i++)
  491.     FREE(event[i]);
  492. FREE(event);
  493.  
  494. }
  495.