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

  1. #line 2 "WRCNF1.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. char *crlf="\r\n";
  11. char nulbuf[256]={0};
  12. 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 write_node_cfg()
  22. {
  23.     char    str[128],cmd[64],c;
  24.     int     i,file;
  25.     short    n;
  26.     FILE    *stream;
  27.  
  28. memset(cmd,0,64);
  29.  
  30. upop("Writing NODE.CNF...");
  31. sprintf(str,"%sNODE.CNF",node_path[node_num-1]);
  32. backup(str);
  33.  
  34. if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1
  35.     || (stream=fdopen(file,"wb"))==NULL) {
  36.     errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_TRUNC);
  37.     return; }
  38. setvbuf(stream,NULL,_IOFBF,2048);
  39.  
  40. put_int(node_num,stream);
  41. put_str(node_name,stream);
  42. put_str(node_phone,stream);
  43. put_str(node_comspec,stream);                 /* Was node_logon */
  44. put_int(node_misc,stream);
  45. put_int(node_ivt,stream);
  46. put_int(node_swap,stream);
  47. if(node_swapdir[0]) {
  48.     backslash(node_swapdir);
  49.     md(node_swapdir); }              /* make sure it's a valid directory */
  50. put_str(node_swapdir,stream);
  51. put_int(node_valuser,stream);
  52. put_int(node_minbps,stream);
  53. put_str(node_ar,stream);
  54. put_int(node_dollars_per_call,stream);
  55. put_str(node_editor,stream);
  56. put_str(node_viewer,stream);
  57. put_str(node_daily,stream);
  58. put_int(node_scrnlen,stream);
  59. put_int(node_scrnblank,stream);
  60. backslash(ctrl_dir);
  61. put_str(ctrl_dir,stream);
  62. backslash(text_dir);
  63. put_str(text_dir,stream);
  64. backslash(temp_dir);
  65. put_str(temp_dir,stream);
  66. for(i=0;i<10;i++)
  67.     put_str(wfc_cmd[i],stream);
  68. for(i=0;i<12;i++)
  69.     put_str(wfc_scmd[i],stream);
  70. put_str(mdm_hang,stream);
  71. put_int(node_sem_check,stream);
  72. put_int(node_stat_check,stream);
  73. put_str(scfg_cmd,stream);
  74. put_int(sec_warn,stream);
  75. put_int(sec_hangup,stream);
  76. n=0;
  77. for(i=0;i<188;i++)                    /* unused init to NULL */
  78.     fwrite(&n,1,2,stream);
  79. n=0xffff;                            /* unused init to 0xff */
  80. for(i=0;i<256;i++)
  81.     fwrite(&n,1,2,stream);
  82. put_int(com_port,stream);
  83. put_int(com_irq,stream);
  84. put_int(com_base,stream);
  85. put_int(com_rate,stream);
  86. put_int(mdm_misc,stream);
  87. put_str(mdm_init,stream);
  88. put_str(mdm_spec,stream);
  89. put_str(mdm_term,stream);
  90. put_str(mdm_dial,stream);
  91. put_str(mdm_offh,stream);
  92. put_str(mdm_answ,stream);
  93. put_int(mdm_reinit,stream);
  94. put_int(mdm_ansdelay,stream);
  95. put_int(mdm_rings,stream);
  96. put_int(mdm_results,stream);
  97. for(i=0;i<mdm_results;i++) {
  98.     put_int(mdm_result[i].code,stream);
  99.     put_int(mdm_result[i].rate,stream);
  100.     put_int(mdm_result[i].cps,stream);
  101.     put_str(mdm_result[i].str,stream); }
  102. fclose(stream);
  103. }
  104.  
  105. void free_node_cfg()
  106. {
  107.  
  108. FREE(mdm_result);
  109. }
  110.  
  111. void write_main_cfg()
  112. {
  113.     char    str[128],c=0;
  114.     int     file;
  115.     short    i,j,n;
  116.     FILE    *stream;
  117.  
  118. upop("Writing MAIN.CNF...");
  119. sprintf(str,"%sMAIN.CNF",ctrl_dir);
  120. backup(str);
  121.  
  122. if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1
  123.     || (stream=fdopen(file,"wb"))==NULL) {
  124.     errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_TRUNC);
  125.     return; }
  126. setvbuf(stream,NULL,_IOFBF,2048);
  127.  
  128. put_str(sys_name,stream);
  129. put_str(sys_id,stream);
  130. put_str(sys_location,stream);
  131. put_str(sys_phonefmt,stream);
  132. put_str(sys_op,stream);
  133. put_str(sys_guru,stream);
  134. put_str(sys_pass,stream);
  135. put_int(sys_nodes,stream);
  136. for(i=0;i<sys_nodes;i++) {
  137.     backslash(node_path[i]);
  138.     fwrite(node_path[i],LEN_DIR+1,1,stream); }
  139. backslash(data_dir);
  140. put_str(data_dir,stream);
  141.  
  142. /************************************************************/
  143. /* Create data and sub-dirs off data if not already created */
  144. /************************************************************/
  145. strcpy(str,data_dir);
  146. md(str);
  147. sprintf(str,"%sSUBS",data_dir);
  148. md(str);
  149. sprintf(str,"%sDIRS",data_dir);
  150. md(str);
  151. sprintf(str,"%sTEXT",data_dir);
  152. md(str);
  153. sprintf(str,"%sMSGS",data_dir);
  154. md(str);
  155. sprintf(str,"%sUSER",data_dir);
  156. md(str);
  157. sprintf(str,"%sUSER\\PTRS",data_dir);
  158. md(str);
  159. sprintf(str,"%sLOGS",data_dir);
  160. md(str);
  161. sprintf(str,"%sQNET",data_dir);
  162. md(str);
  163. sprintf(str,"%sFILE",data_dir);
  164. md(str);
  165.  
  166. backslash(exec_dir);
  167. put_str(exec_dir,stream);
  168. put_str(sys_logon,stream);
  169. put_str(sys_logout,stream);
  170. put_str(sys_daily,stream);
  171. put_int(sys_timezone,stream);
  172. put_int(sys_misc,stream);
  173. put_int(sys_lastnode,stream);
  174. put_int(sys_autonode,stream);
  175. put_int(uq,stream);
  176. put_int(sys_pwdays,stream);
  177. put_int(sys_deldays,stream);
  178. put_int(sys_exp_warn,stream);
  179. put_int(sys_autodel,stream);
  180. put_int(sys_def_stat,stream);
  181. put_str(sys_chat_ar,stream);
  182. put_int(cdt_min_value,stream);
  183. put_int(max_minutes,stream);
  184. put_int(cdt_per_dollar,stream);
  185. put_str(new_pass,stream);
  186. put_str(new_magic,stream);
  187. put_str(new_sif,stream);
  188. put_str(new_sof,stream);
  189.  
  190. put_int(new_level,stream);
  191. put_int(new_flags1,stream);
  192. put_int(new_flags2,stream);
  193. put_int(new_flags3,stream);
  194. put_int(new_flags4,stream);
  195. put_int(new_exempt,stream);
  196. put_int(new_rest,stream);
  197. put_int(new_cdt,stream);
  198. put_int(new_min,stream);
  199. put_str(new_xedit,stream);
  200. put_int(new_expire,stream);
  201. if(new_shell>total_shells)
  202.     new_shell=0;
  203. put_int(new_shell,stream);
  204. put_int(new_misc,stream);
  205. put_int(new_prot,stream);
  206. c=0;
  207. put_int(c,stream);
  208. n=0;
  209. for(i=0;i<7;i++)
  210.     put_int(n,stream);
  211.  
  212. put_int(expired_level,stream);
  213. put_int(expired_flags1,stream);
  214. put_int(expired_flags2,stream);
  215. put_int(expired_flags3,stream);
  216. put_int(expired_flags4,stream);
  217. put_int(expired_exempt,stream);
  218. put_int(expired_rest,stream);
  219.  
  220. put_str(logon_mod,stream);
  221. put_str(logoff_mod,stream);
  222. put_str(newuser_mod,stream);
  223. put_str(login_mod,stream);
  224. put_str(logout_mod,stream);
  225. put_str(sync_mod,stream);
  226. put_str(expire_mod,stream);
  227. put_int(c,stream);
  228. n=0;
  229. for(i=0;i<224;i++)
  230.     put_int(n,stream);
  231. n=0xffff;
  232. for(i=0;i<256;i++)
  233.     put_int(n,stream);
  234.  
  235. n=0;
  236. for(i=0;i<10;i++) {
  237.     put_int(val_level[i],stream);
  238.     put_int(val_expire[i],stream);
  239.     put_int(val_flags1[i],stream);
  240.     put_int(val_flags2[i],stream);
  241.     put_int(val_flags3[i],stream);
  242.     put_int(val_flags4[i],stream);
  243.     put_int(val_cdt[i],stream);
  244.     put_int(val_exempt[i],stream);
  245.     put_int(val_rest[i],stream);
  246.     for(j=0;j<8;j++)
  247.         put_int(n,stream); }
  248.  
  249. c=0;
  250. for(i=0;i<100 && !feof(stream);i++) {
  251.     put_int(level_timeperday[i],stream);
  252.     put_int(level_timepercall[i],stream);
  253.     put_int(level_callsperday[i],stream);
  254.     put_int(level_freecdtperday[i],stream);
  255.     put_int(level_linespermsg[i],stream);
  256.     put_int(level_postsperday[i],stream);
  257.     put_int(level_emailperday[i],stream);
  258.     put_int(level_misc[i],stream);
  259.     put_int(level_expireto[i],stream);
  260.     put_int(c,stream);
  261.     for(j=0;j<5;j++)
  262.         put_int(n,stream); }
  263.  
  264. /* Command Shells */
  265.  
  266. put_int(total_shells,stream);
  267. for(i=0;i<total_shells;i++) {
  268.     put_str(shell[i]->name,stream);
  269.     put_str(shell[i]->code,stream);
  270.     put_str(shell[i]->ar,stream);
  271.     put_int(shell[i]->misc,stream);
  272.     n=0;
  273.     for(j=0;j<8;j++)
  274.         put_int(n,stream); }
  275.  
  276. fclose(stream);
  277. }
  278.  
  279. void free_main_cfg()
  280. {
  281.     int i;
  282.  
  283. for(i=0;i<sys_nodes;i++)
  284.     FREE(node_path[i]);
  285. FREE(node_path);
  286. for(i=0;i<total_shells;i++)
  287.     FREE(shell[i]);
  288. FREE(shell);
  289. }
  290.  
  291. void write_msgs_cfg()
  292. {
  293.     char    str[128],c;
  294.     int     i,j,k,file,x;
  295.     short    n;
  296.     long    l;
  297.     FILE    *stream;
  298.     smb_t    smb;
  299.  
  300. upop("Writing MSGS.CNF...");
  301. sprintf(str,"%sMSGS.CNF",ctrl_dir);
  302. backup(str);
  303.  
  304. if((file=nopen(str,O_WRONLY|O_CREAT|O_TRUNC))==-1
  305.     || (stream=fdopen(file,"wb"))==NULL) {
  306.     errormsg(WHERE,ERR_OPEN,str,O_WRONLY|O_CREAT|O_TRUNC);
  307.     return; }
  308. setvbuf(stream,NULL,_IOFBF,2048);
  309.  
  310. put_int(max_qwkmsgs,stream);
  311. put_int(mail_maxcrcs,stream);
  312. put_int(mail_maxage,stream);
  313. put_str(preqwk_ar,stream);
  314. put_int(smb_retry_time,stream);
  315. n=0;
  316. for(i=0;i<235;i++)
  317.     put_int(n,stream);
  318. n=0xffff;
  319. for(i=0;i<256;i++)
  320.     put_int(n,stream);
  321.  
  322. /* Message Groups */
  323.  
  324. put_int(total_grps,stream);
  325. for(i=0;i<total_grps;i++) {
  326.     put_str(grp[i]->lname,stream);
  327.     put_str(grp[i]->sname,stream);
  328.     put_str(grp[i]->ar,stream);
  329.     n=0;
  330.     for(j=0;j<32;j++)
  331.         put_int(n,stream);
  332.     n=0xffff;
  333.     for(j=0;j<16;j++)
  334.         put_int(n,stream); }
  335.  
  336. /* Message Sub-boards */
  337.  
  338. backslash(echomail_dir);
  339.  
  340. str[0]=0;
  341. for(i=n=0;i<total_subs;i++)
  342.     if(sub[i]->grp<total_grps)        /* total VALID sub-boards */
  343.         n++;
  344. put_int(n,stream);
  345. for(i=0;i<total_subs;i++) {
  346.     if(sub[i]->grp>=total_grps)     /* skip bogus group numbers */
  347.         continue;
  348.     put_int(sub[i]->grp,stream);
  349.     put_str(sub[i]->lname,stream);
  350.     put_str(sub[i]->sname,stream);
  351.     put_str(sub[i]->qwkname,stream);
  352.     put_str(sub[i]->code,stream);
  353.     if(sub[i]->data_dir[0])
  354.         backslash(sub[i]->data_dir);
  355.     put_str(sub[i]->data_dir,stream);
  356.     md(sub[i]->data_dir);
  357.     put_str(sub[i]->ar,stream);
  358.     put_str(sub[i]->read_ar,stream);
  359.     put_str(sub[i]->post_ar,stream);
  360.     put_str(sub[i]->op_ar,stream);
  361.     l=(sub[i]->misc&(~SUB_HDRMOD));    /* Don't write mod bit */
  362.     put_int(l,stream);
  363.     put_str(sub[i]->tagline,stream);
  364.     put_str(sub[i]->origline,stream);
  365.     put_str(sub[i]->echomail_sem,stream);
  366.     if(sub[i]->echopath)
  367.         backslash(sub[i]->echopath);
  368.     put_str(sub[i]->echopath,stream);
  369.     if(sub[i]->misc&SUB_FIDO && (echomail_dir[0] || sub[i]->echopath[0])) {
  370.         md(echomail_dir);
  371.         if(!sub[i]->echopath[0])
  372.             sprintf(sub[i]->echopath,"%s%s",echomail_dir,sub[i]->code);
  373.         md(sub[i]->echopath); }
  374.     put_int(sub[i]->faddr,stream);
  375.     put_int(sub[i]->maxmsgs,stream);
  376.     put_int(sub[i]->maxcrcs,stream);
  377.     put_int(sub[i]->maxage,stream);
  378.     put_int(sub[i]->ptridx,stream);
  379.     put_str(sub[i]->mod_ar,stream);
  380.     put_int(sub[i]->qwkconf,stream);
  381.     c=0;
  382.     put_int(c,stream);
  383.     n=0;
  384.     for(k=0;k<26;k++)
  385.         put_int(n,stream);
  386.  
  387.     if(all_msghdr || (sub[i]->misc&SUB_HDRMOD && !no_msghdr)) {
  388.         if(!sub[i]->data_dir[0])
  389.             sprintf(smb.file,"%sSUBS\\%s",data_dir,sub[i]->code);
  390.         else
  391.             sprintf(smb.file,"%s%s",sub[i]->data_dir,sub[i]->code);
  392.         if((x=smb_open(&smb))!=0) {
  393.             errormsg(WHERE,ERR_OPEN,smb.file,x);
  394.             continue; }
  395.         if(!filelength(fileno(smb.shd_fp))) {
  396.             smb.status.max_crcs=sub[i]->maxcrcs;
  397.             smb.status.max_msgs=sub[i]->maxmsgs;
  398.             smb.status.max_age=sub[i]->maxage;
  399.             smb.status.attr=sub[i]->misc&SUB_HYPER ? SMB_HYPERALLOC :0;
  400.             if((x=smb_create(&smb))!=0)
  401.                 errormsg(WHERE,ERR_CREATE,smb.file,x);
  402.             smb_close(&smb);
  403.             continue; }
  404.         if((x=smb_locksmbhdr(&smb))!=0) {
  405.             smb_close(&smb);
  406.             errormsg(WHERE,ERR_LOCK,smb.file,x);
  407.             continue; }
  408.         if((x=smb_getstatus(&smb))!=0) {
  409.             smb_close(&smb);
  410.             errormsg(WHERE,ERR_READ,smb.file,x);
  411.             continue; }
  412.         if((!(sub[i]->misc&SUB_HYPER) || smb.status.attr&SMB_HYPERALLOC)
  413.             && smb.status.max_msgs==sub[i]->maxmsgs
  414.             && smb.status.max_crcs==sub[i]->maxcrcs
  415.             && smb.status.max_age==sub[i]->maxage) {    /* No change */
  416.             smb_close(&smb);
  417.             continue; }
  418.         smb.status.max_msgs=sub[i]->maxmsgs;
  419.         smb.status.max_crcs=sub[i]->maxcrcs;
  420.         smb.status.max_age=sub[i]->maxage;
  421.         if(sub[i]->misc&SUB_HYPER)
  422.             smb.status.attr|=SMB_HYPERALLOC;
  423.         if((x=smb_putstatus(&smb))!=0) {
  424.             smb_close(&smb);
  425.             errormsg(WHERE,ERR_WRITE,smb.file,x);
  426.             continue; }
  427.         smb_close(&smb); }
  428.  
  429.                 }
  430.  
  431. /* FidoNet */
  432.  
  433. put_int(total_faddrs,stream);
  434. for(i=0;i<total_faddrs;i++) {
  435.     put_int(faddr[i].zone,stream);
  436.     put_int(faddr[i].net,stream);
  437.     put_int(faddr[i].node,stream);
  438.     put_int(faddr[i].point,stream); }
  439.  
  440. put_str(origline,stream);
  441. put_str(netmail_sem,stream);
  442. put_str(echomail_sem,stream);
  443. backslash(netmail_dir);
  444. put_str(netmail_dir,stream);
  445. put_str(echomail_dir,stream);
  446. backslash(fidofile_dir);
  447. put_str(fidofile_dir,stream);
  448. put_int(netmail_misc,stream);
  449. put_int(netmail_cost,stream);
  450. put_int(dflt_faddr,stream);
  451. n=0;
  452. for(i=0;i<28;i++)
  453.     put_int(n,stream);
  454.  
  455. /* QWKnet Config */
  456.  
  457. put_str(qnet_tagline,stream);
  458.  
  459. put_int(total_qhubs,stream);
  460. for(i=0;i<total_qhubs;i++) {
  461.     put_str(qhub[i]->id,stream);
  462.     put_int(qhub[i]->time,stream);
  463.     put_int(qhub[i]->freq,stream);
  464.     put_int(qhub[i]->days,stream);
  465.     put_int(qhub[i]->node,stream);
  466.     put_str(qhub[i]->call,stream);
  467.     put_str(qhub[i]->pack,stream);
  468.     put_str(qhub[i]->unpack,stream);
  469.     put_int(qhub[i]->subs,stream);
  470.     for(j=0;j<qhub[i]->subs;j++) {
  471.         put_int(qhub[i]->conf[j],stream);
  472.         put_int(qhub[i]->sub[j],stream);
  473.         put_int(qhub[i]->mode[j],stream); }
  474.     n=0;
  475.     for(j=0;j<32;j++)
  476.         put_int(n,stream); }
  477. n=0;
  478. for(i=0;i<32;i++)
  479.     put_int(n,stream);
  480.  
  481. /* PostLink Config */
  482.  
  483. memset(str,0,11);
  484. fwrite(str,11,1,stream);    /* unused, used to be site name */
  485. put_int(sys_psnum,stream);
  486.  
  487. put_int(total_phubs,stream);
  488. for(i=0;i<total_phubs;i++) {
  489.     put_str(phub[i]->name,stream);
  490.     put_int(phub[i]->time,stream);
  491.     put_int(phub[i]->freq,stream);
  492.     put_int(phub[i]->days,stream);
  493.     put_int(phub[i]->node,stream);
  494.     put_str(phub[i]->call,stream);
  495.     n=0;
  496.     for(j=0;j<32;j++)
  497.         put_int(n,stream); }
  498.  
  499. put_str(sys_psname,stream);
  500. n=0;
  501. for(i=0;i<32;i++)
  502.     put_int(n,stream);
  503.  
  504. put_str(sys_inetaddr,stream); /* Internet address */
  505. put_str(inetmail_sem,stream);
  506. put_int(inetmail_misc,stream);
  507. put_int(inetmail_cost,stream);
  508.  
  509. fclose(stream);
  510.  
  511. /* MUST BE AT END */
  512.  
  513. if(!no_msghdr) {
  514.     backslash(data_dir);
  515.     sprintf(smb.file,"%sMAIL",data_dir);
  516.     if((x=smb_open(&smb))!=0) {
  517.         errormsg(WHERE,ERR_OPEN,smb.file,x);
  518.         return; }
  519.     if(!filelength(fileno(smb.shd_fp))) {
  520.         smb.status.max_crcs=mail_maxcrcs;
  521.         smb.status.max_msgs=MAX_SYSMAIL;
  522.         smb.status.max_age=mail_maxage;
  523.         smb.status.attr=SMB_EMAIL;
  524.         if((x=smb_create(&smb))!=0)
  525.             errormsg(WHERE,ERR_CREATE,smb.file,x);
  526.         smb_close(&smb);
  527.         return; }
  528.     if((x=smb_locksmbhdr(&smb))!=0) {
  529.         smb_close(&smb);
  530.         errormsg(WHERE,ERR_LOCK,smb.file,x);
  531.         return; }
  532.     if((x=smb_getstatus(&smb))!=0) {
  533.         smb_close(&smb);
  534.         errormsg(WHERE,ERR_READ,smb.file,x);
  535.         return; }
  536.     smb.status.max_msgs=MAX_SYSMAIL;
  537.     smb.status.max_crcs=mail_maxcrcs;
  538.     smb.status.max_age=mail_maxage;
  539.     if((x=smb_putstatus(&smb))!=0) {
  540.         smb_close(&smb);
  541.         errormsg(WHERE,ERR_WRITE,smb.file,x);
  542.         return; }
  543.     smb_close(&smb); }
  544. }
  545.  
  546. void free_msgs_cfg()
  547. {
  548.     int i;
  549.  
  550. for(i=0;i<total_grps;i++)
  551.     FREE(grp[i]);
  552. FREE(grp);
  553. grp=NULL;
  554.  
  555. for(i=0;i<total_subs;i++)
  556.     FREE(sub[i]);
  557. FREE(sub);
  558. sub=NULL;
  559.  
  560. FREE(faddr);
  561. total_faddrs=0;
  562.  
  563. for(i=0;i<total_qhubs;i++) {
  564.     FREE(qhub[i]->mode);
  565.     FREE(qhub[i]->conf);
  566.     FREE(qhub[i]->sub);
  567.     FREE(qhub[i]); }
  568. FREE(qhub);
  569. qhub=NULL;
  570.  
  571. for(i=0;i<total_phubs;i++)
  572.     FREE(phub[i]);
  573. FREE(phub);
  574. phub=NULL;
  575.  
  576. }
  577.  
  578.