home *** CD-ROM | disk | FTP | other *** search
/ Media Depot 5 / mediadepotvolume51993.iso / FILES / 13 / DEG.ZIP / DEG.C < prev    next >
Encoding:
C/C++ Source or Header  |  1995-10-13  |  21.2 KB  |  1,106 lines

  1. #include "\c\window\window.h"
  2. #include "\c\window\mouse.h"
  3. #include "\c\window\keyboard.h"
  4. #include "\c\window\defaults.h"
  5. #include "\c\window\field.h"
  6. #include "\c\window\controls.h"
  7. #include "\c\window\wgraphic.h"
  8. #include "\c\window\winvars.h"
  9.  
  10. #include <conio.h>
  11. #include <stdlib.h>
  12. #include <stdio.h>
  13. #include <io.h>
  14. #include <dos.h>
  15. #include <bios.h>
  16. #include <fcntl.h>
  17. #include <string.h>
  18. #include <malloc.h>
  19. #include <memory.h>
  20. #include <graphics.h>
  21. #include <process.h>
  22.  
  23. #define AALPHA '@'
  24. #define FFILE '|'
  25. #define PPROTECTED '!'
  26. #define NNUMERIC '#'
  27. #define DUPLICATE '~'
  28.  
  29.  
  30. #if ! defined(FA_NORMAL)
  31.    #define FA_NORMAL 0
  32. #endif
  33. /*
  34. L T T T T T --+-T--2----T----3--T-+----4T---+---T5----+-T--6----T----7--T-+--R
  35. */
  36.  
  37. Window de_window;
  38.  
  39. char ms_mask[] =
  40.  "_________________________________________________________________________";
  41.  
  42. char cats[15][40];
  43. FILE *ffp;
  44. char line[2000];
  45. short px, py;
  46. short xoffset, yoffset;
  47. short floodx, floody;
  48.  
  49. struct pcxx
  50. {
  51. char mfg;
  52. char version;
  53. char encoding;
  54. char bpp;
  55. short xmin, ymin;
  56. short xmax, ymax;
  57. short hres;
  58. short vres;
  59. char palette[48];
  60. char res;
  61. char color_p;
  62. short bytes_per_line;
  63. short pal_type;
  64. char filler[58];
  65. } p;
  66.  
  67. struct filearea
  68. {
  69.   short reclen;
  70.   short nrecs;
  71. } farea;
  72.  
  73. short recno;
  74. short Colr;
  75.  
  76. FILE *fdata;
  77. FILE *fscrn;
  78.  
  79. short file_present;
  80. short fname_pos;
  81.  
  82. short ddsize;
  83.  
  84. struct dditem
  85. {
  86.   short col;
  87.   short row;
  88.   Field field; 
  89.   char prompt[70];
  90.   char mask[70];
  91.   char data[70];
  92.   short dpos;
  93.   short dlen;
  94. };
  95.  
  96. #define DARSIZE 154
  97.  
  98. struct darray
  99. {
  100.   struct dditem root[DARSIZE];
  101. };
  102.  
  103. struct darray datadef;
  104.  
  105.  
  106. char tbufr[1000];
  107.  
  108. void interrupt (far *int_timer) (void);
  109. static void interrupt timer_svc(void);
  110.  
  111. void buffer_save();
  112. char dataname[18];
  113. char edtname[18];
  114. char catname[18];
  115. char cfgname[18];
  116.  
  117. void quit();
  118. short Checksum;
  119. short Edt_pos;
  120. short rtcode = 1;
  121.  
  122.  
  123. main(int argc, char *argv[])
  124. {
  125. char fname[18];
  126. char scrnname[18];
  127. short cnt;
  128. short stat;
  129. short type;
  130. Mouse_State mstate;
  131. Window tmp_window;
  132. static Window de1_window;
  133. Defaults def;
  134.  
  135. /*  exitmsg(); */
  136.  
  137.   atexit(quit);
  138.  
  139.   disable();
  140.   int_timer = getvect(0x1c);
  141.   enable();
  142.  
  143.   def = d_get();
  144.   d_change(SYSENV, DISABLE);
  145.   load_color();
  146.  
  147.   if(d_vidtype() < 6)
  148.     d_colorset(WHITE+BRIGHT, COLOR(Colr, WHITE+BRIGHT),
  149.       COLOR(BLACK, WHITE+BRIGHT),
  150.       COLOR(WHITE+BRIGHT, Colr),
  151.       COLOR(WHITE+BRIGHT, Colr),
  152.       COLOR(WHITE+BRIGHT, Colr),
  153.       COLOR(BLACK, BLACK));
  154.  
  155.   if(d_vidtype() < 6)
  156.   {
  157.     d_change(SYSWRTMODE, GRAPH16);
  158.     d_biosfont(14);
  159.   }
  160.   else
  161.   {
  162.     d_change(SYSWRTMODE, HERC43);
  163.     d_font8x8();
  164.   }
  165.   s_open();
  166. //  {
  167. //    printf("Mouse not available");
  168. //  sleep(5);
  169. //  d_put(def);
  170. //  return;
  171. //}          
  172.  
  173.   k_idle(buffer_save);
  174.   ddsize = 0;
  175.   recno = 1;
  176.   file_present = 0;
  177.   fname_pos = 0;
  178.   Checksum = 0;
  179.   Edt_pos = -1;
  180.  
  181.   if(argc>1)
  182.     strcpy(fname, argv[1]);
  183.   else
  184.   {
  185.     d_put(def);
  186.     fname[0] = 0;  
  187.     printf("DEG:  (C) 1994 Daniel Bingamon - Kadima Technology\n");
  188.     printf("Fixed File Data Entry Software\n");
  189.     s_close();
  190.     return;
  191.   }
  192.  
  193.   if(argc>2)
  194.     strcpy(scrnname, argv[2]);
  195.   else
  196.     strcpy(scrnname, fname);
  197.  
  198.   strcpy(catname, scrnname);
  199.   strcpy(cfgname, scrnname);
  200.   strcpy(edtname, scrnname);
  201.   strcat(edtname, ".POS");
  202.  
  203.   load_edtpos();
  204.  
  205.   strcat(scrnname, ".SCN");
  206.   strcat(catname, ".CAT");
  207.   strcat(cfgname, ".CFG");
  208.  
  209.   strcpy(dataname, fname);
  210.  
  211.   if(strstr(dataname, ".")==NULL)
  212.     strcat(dataname, ".DAT");
  213.  
  214.   fscrn = fopen(catname, "r");
  215.   rd_cat();
  216.   load_cfg();
  217.   fclose(fscrn);
  218.  
  219.   fscrn = fopen(scrnname, "rb");
  220.   if(fscrn==NULL)
  221.   {
  222.     error_window("Screen not found");
  223.     s_close();
  224.     d_put(def);
  225.     return;
  226.   }
  227.  
  228.   de1_window = w_open(1, 1, 78, 23);
  229.   de_window = de1_window;
  230.   if(de_window == NULL)
  231.   {
  232.     fclose(fscrn);
  233.     s_close();
  234.     printf("array %u\n", sizeof(struct darray));
  235.     printf("Window init error\n");
  236.     d_put(def);
  237.     return;
  238.   }
  239.  
  240.   for(cnt=0;cnt<999;cnt++)
  241.     tbufr[cnt] = 0;
  242.  
  243.   rd_scrn();
  244.  
  245.   fclose(fscrn);
  246.  
  247.  
  248.   fdata = fopen(dataname, "rb");
  249.   fclose(fdata);
  250.   if(fdata==NULL)
  251.   {
  252.     sound(440, 2);
  253.     fdata = fopen(dataname, "wb+");
  254.     if(fdata==NULL)
  255.     {
  256.       error_window("Data File Open Error");
  257.       w_closeall();
  258.       s_close();
  259.       d_put(def);
  260.       return;
  261.     }
  262.     farea.nrecs = 1;
  263.     fb_rec(1);
  264.     fclose(fdata);
  265.     recno = 0;
  266.   }
  267.   else
  268.     recno = 1;
  269.   fdata = fopen(dataname, "rb+");
  270.   if(fdata==NULL)
  271.   {
  272.     error_window("Data File Open Error");
  273.     w_closeall();
  274.     s_close();
  275.     d_put(def);
  276.     return;
  277.   }
  278.  
  279.   farea.nrecs = (short) (filelength(fileno(fdata)) / farea.reclen);
  280.  
  281.   s_wlimit(de_window);
  282.   edit();
  283.   s_wlimit(NULL);
  284.   fclose(fdata);
  285.   w_closeall();
  286.   s_close();
  287. /*  d_graphic_blink(0, 0);  */
  288.   d_change(SYSWRTMODE, GRAPH16);
  289.   d_put(def);
  290.   poscurs(23,1);
  291.   curson();
  292.   exit(rtcode);
  293. }
  294.  
  295.  
  296. quit()
  297. {
  298. /*   d_graphic_blink(0, 0); */
  299.   w_closeall();
  300.   disable();
  301.   setvect(0x1c, int_timer);
  302.   enable();
  303. }
  304.  
  305.  
  306. rd_scrn()
  307. {
  308. short reclen;
  309. short stat;
  310. char temp[10]; 
  311. short ct;
  312.  
  313.   reclen = 0;
  314.   do
  315.   {
  316.     temp[0] = 0;
  317.     if(fscanf(fscrn, "%s", temp)!=1)
  318.       break;
  319.  
  320.     if(strncmp(temp, "-1", 2)==0)
  321.       break;
  322.  
  323.     if(temp[0]=='P') 
  324.     {
  325.       sscanf(&temp[1], "%d", &datadef.root[ddsize].col);
  326.     }
  327.     else
  328.     {
  329.       sscanf(temp, "%d", &datadef.root[ddsize].col);
  330.     }
  331.     if(fscanf(fscrn, "%d", &datadef.root[ddsize].row)!=1)
  332.       break;
  333.     if(temp[0]=='P')
  334.     {
  335.       if(fscanf(fscrn, "%d", &datadef.root[ddsize].dpos)!=1)
  336.         break;
  337.     }
  338.     if(fscanf(fscrn, "%s", datadef.root[ddsize].prompt)!=1)
  339.       break;
  340.  
  341.     if(datadef.root[ddsize].prompt[strlen(datadef.root[ddsize].prompt)-1]
  342.        == 10)
  343.       datadef.root[ddsize].prompt[strlen(datadef.root[ddsize].prompt)-1] =  0;
  344.     if(datadef.root[ddsize].prompt[strlen(datadef.root[ddsize].prompt)-2]
  345.        == 10)
  346.       datadef.root[ddsize].prompt[strlen(datadef.root[ddsize].prompt)-2] =  0;
  347.  
  348.     datadef.root[ddsize].col--;
  349.     datadef.root[ddsize].row--;
  350.  
  351.     if((datadef.root[ddsize].prompt[0] == AALPHA)||
  352.        (datadef.root[ddsize].prompt[0] == NNUMERIC)||
  353.        (datadef.root[ddsize].prompt[0] == FFILE)||
  354.        (datadef.root[ddsize].prompt[0] == DUPLICATE)||
  355.        (datadef.root[ddsize].prompt[0] == PPROTECTED))
  356.     {
  357.       if(datadef.root[ddsize].prompt[0] == FFILE)
  358.       {
  359.         file_present = 1;
  360.         fname_pos = ddsize;
  361.       }
  362.       if(temp[0]!='P')
  363.         datadef.root[ddsize].dpos = reclen;
  364.  
  365.       datadef.root[ddsize].dlen = strlen(datadef.root[ddsize].prompt);
  366.       reclen += datadef.root[ddsize].dlen;
  367.       strncpy(datadef.root[ddsize].mask, ms_mask, datadef.root[ddsize].dlen);
  368.       datadef.root[ddsize].mask[datadef.root[ddsize].dlen] = 0;
  369.       if(strlen(datadef.root[ddsize].mask) != datadef.root[ddsize].dlen)
  370.         printf("length error\n"); 
  371.  
  372.       if(datadef.root[ddsize].dlen == 0) 
  373.       {
  374.         printf("size error %d\n", datadef.root[ddsize].dlen);
  375.         getch();
  376.       }
  377.  
  378.       w_poscurs(de_window, datadef.root[ddsize].col, datadef.root[ddsize].row);
  379.       w_print(de_window, datadef.root[ddsize].mask);
  380.  
  381.       datadef.root[ddsize].field = f_create("", datadef.root[ddsize].mask);
  382.       if(datadef.root[ddsize].field == NULL)
  383.         printf("field error ");
  384.  
  385.       datadef.root[ddsize].data[0] = 0;
  386.       if(datadef.root[ddsize].field!=NULL)
  387.       { 
  388.         stat = f_append(de_window, datadef.root[ddsize].col,
  389.              datadef.root[ddsize].row, datadef.root[ddsize].field);  
  390.         if(stat == -1)
  391.           printf("f_append error %d %s\n", ddsize, datadef.root[ddsize].prompt);
  392.  
  393.         if(datadef.root[ddsize].prompt[0] == NNUMERIC)
  394.         {
  395.           f_range(datadef.root[ddsize].field, NUMERIC|SIGN|POINT|BLANK);
  396.  
  397.         }
  398.         if(datadef.root[ddsize].prompt[0] == PPROTECTED)
  399.         {
  400.           stat = f_protect(datadef.root[ddsize].field, ENABLE);
  401.           if(stat == -1)
  402.             printf("f_protect error %d\n", ex_werrno);
  403.         }
  404.       }
  405.     }
  406.     else
  407.     {
  408.       datadef.root[ddsize].data[0] = 0;
  409.       w_poscurs(de_window, datadef.root[ddsize].col, datadef.root[ddsize].row);
  410.       if(datadef.root[ddsize].prompt[0] != '&')
  411.         w_print(de_window, datadef.root[ddsize].prompt);
  412.       else
  413.       {
  414.         sscanf(&datadef.root[ddsize].prompt[1], "%d", &ct);
  415.         w_print(de_window, &cats[ct-1][0]);
  416.       }
  417.     }
  418.     ddsize++;
  419.     if(ddsize >= DARSIZE)
  420.     {
  421.       w_printf(de_window, "Warning:  Oversized Screen File\n");
  422.       getch();
  423.     }
  424.   }
  425.   while(!feof(fscrn));
  426.   farea.reclen = reclen + 2;
  427. }
  428.  
  429.  
  430. show_scrn()
  431. {
  432. short cnt;
  433. short cnt2;
  434.  
  435.   for(cnt=0;cnt<ddsize;cnt++)
  436.   {
  437.     if((datadef.root[cnt].prompt[0] == AALPHA)||
  438.        (datadef.root[cnt].prompt[0] == NNUMERIC)||
  439.        (datadef.root[cnt].prompt[0] == FFILE)||
  440.        (datadef.root[cnt].prompt[0] == DUPLICATE)||
  441.        (datadef.root[cnt].prompt[0] == PPROTECTED))
  442.     {
  443.       for(cnt2=0;cnt2<strlen(datadef.root[cnt].data);cnt2++);
  444.       {
  445.         if((datadef.root[cnt].data[cnt2] == 13)||
  446.            (datadef.root[cnt].data[cnt2] == 13))
  447.           datadef.root[cnt].data[cnt2] = 32;
  448.       }
  449.       f_setbuffer(datadef.root[cnt].field, datadef.root[cnt].data);
  450.     }
  451.   }
  452. }
  453.  
  454.  
  455. edit()
  456. {
  457. short cnt;
  458. short cnt2, tmp;
  459. short closex, closey, mcnt;
  460. short nxt_rec;
  461. short code;
  462. short ltr;
  463. short ctr;
  464. char buffer[40];
  465. Field fjump;
  466.  
  467. unsigned keys[] =
  468. {
  469.   _F2, _F7, _F8, _F9, _F10, 0
  470. };
  471.  
  472.   f_termkeys(keys);
  473.   w_lmessage(de_window, "EDITOR V2.1  - F10 EXIT");
  474.  
  475.  
  476.   c_add_button(de_window, "F7: FWD", 0, 0, _F7, BUTTON_PLAIN);
  477.   c_add_button(de_window, "F8: REV", 8, 0, _F8, BUTTON_PLAIN);
  478.   c_add_button(de_window, "F9: DEL", 16, 0, _F9, BUTTON_PLAIN);
  479.   c_add_button(de_window, "F2: JMP", 24, 0, _F2, BUTTON_PLAIN);
  480.   c_add_button(de_window, "F10: EXIT", 32, 0, _F10, BUTTON_PLAIN);
  481. /*
  482.   c_add_button(de_window, "SEARCH", 38, 0, ALT_S, BUTTON_PLAIN);
  483. */
  484.  
  485.   nxt_rec = recno;
  486.   show_scrn();
  487.  
  488.   do
  489.   {
  490.     recno = nxt_rec;
  491.     if(recno==0)
  492.     {
  493.       recno = 1;
  494.       for(cnt=0;cnt<ddsize;cnt++)
  495.         datadef.root[cnt].data[0] = 0;
  496.       farea.nrecs = 1;
  497.     }
  498.     else
  499.     {
  500.       if(recno == farea.nrecs)
  501.       {
  502.         fb_prep();
  503.         fseek(fdata, (((long) recno * farea.reclen) - (long) farea.reclen), 
  504.                       SEEK_SET); 
  505.         fread(tbufr, farea.reclen, 1, fdata);
  506.         load_data();
  507.         w_poscurs(de_window, 60, 0);
  508.         w_print(de_window, "EOD   ");
  509.       }
  510.       else if(recno>farea.nrecs)
  511.       {
  512.         farea.nrecs = recno;
  513.         memcpy(line, tbufr, 999);
  514.         fb_rec(1);
  515.         w_poscurs(de_window, 60, 0);
  516.         w_print(de_window, "ADDING  ");
  517.         for(cnt=0;cnt<ddsize;cnt++)
  518.         {
  519.           if(datadef.root[cnt].prompt[0] == PPROTECTED)
  520.             if(datadef.root[cnt].prompt[1] == PPROTECTED)
  521.               f_protect(datadef.root[cnt].field, DISABLE);
  522.  
  523.           if(datadef.root[cnt].prompt[1] == DUPLICATE)
  524.           {
  525.             strncpy(datadef.root[cnt].data,
  526.                     &line[datadef.root[cnt].dpos],
  527.                     datadef.root[cnt].dlen);
  528.           }
  529.         }
  530.         memset(line, 0, 999);
  531.       }
  532.       else
  533.       {
  534.         fseek(fdata, (((long) recno * farea.reclen) - (long) farea.reclen), 
  535.                       SEEK_SET); 
  536.         fread(tbufr, farea.reclen, 1, fdata);
  537.         load_data();
  538.         w_poscurs(de_window, 60, 0);
  539.         w_print(de_window, "UPDATE  ");
  540.         for(cnt=0;cnt<ddsize;cnt++)
  541.           if(datadef.root[cnt].prompt[0] == PPROTECTED)
  542.             f_protect(datadef.root[cnt].field, ENABLE);
  543.       }
  544.     }
  545.     show_scrn();
  546.     w_poscurs(de_window, 70, 0);
  547.     w_printf(de_window, "REC: %03d", recno);
  548.  
  549.     w_poscurs(de_window, 45, 0);
  550.     w_printf(de_window, "Busy");
  551.     w_on(de_window);
  552.     if(file_present == 1)
  553.       show_pcx(datadef.root[fname_pos].data);
  554.     w_poscurs(de_window, 45, 0);
  555.     w_printf(de_window, "    ");
  556.  
  557.     do
  558.     {
  559.       cnt = -1;
  560.  
  561.       w_curson(de_window);
  562. /*      d_graphic_blink(6, 4);  */
  563.       code = f_batch(de_window);
  564. /*      d_graphic_blink(0, 0);  */
  565.       for(ctr=0;ctr<4000;ctr++);
  566.       w_cursoff();
  567.       if(code == -1)
  568.       {
  569.         printf("batch error %d\n", ex_werrno);
  570.       }
  571.     }
  572.     while(cnt!=-1);
  573.     save_data();
  574.  
  575.     if(code==_F10)
  576.       break;
  577.  
  578.     if(code==_F7)
  579.     {
  580.       nxt_rec = recno + 1;
  581.     }
  582.  
  583.     if(code==_F9)
  584.     {
  585.       nxt_rec = fd_rec();
  586.     }
  587.     if(code==_F2)
  588.     {
  589.       fjump = f_create("JUMP TO: ", "____");
  590.       f_setint(fjump, recno, ENABLE, DISABLE, DISABLE);
  591.       f_process(de_window, 45, 0, fjump);
  592.       ltr = f_getint(fjump);
  593.       f_delete(de_window, fjump);
  594.       w_putsat(de_window, 45, 0, "             ");
  595.  
  596.       if(ltr==0)
  597.         ltr = farea.nrecs;
  598.       if((ltr > 0) && (ltr <=farea.nrecs))
  599.         nxt_rec = ltr;
  600.     }
  601.     if(code==ALT_S)
  602.     {
  603. /*    poscurs(  0, 1 ); */
  604. /*    printf("Search - Enter Search Data, F10 ACCEPT, <ESC> to quit"); */
  605.   /*    nxt_rec = srch_data(recno); */
  606.  
  607. //  Currently Unreached code - embedded for identification
  608.       poscurs(  0, 1 );
  609.       printf("Software by: D. Bingamon - Kadima Technology");
  610.  
  611.     }
  612.     if(code==_F8)
  613.     {
  614.       nxt_rec = recno - 1;
  615.       if(nxt_rec == 0)
  616.         nxt_rec = 1;
  617.     }
  618.     if(recno>farea.nrecs)
  619.       farea.nrecs = recno;
  620.   }
  621.   while(code!=_F10);
  622.   if(recno>farea.nrecs)
  623.     farea.nrecs = recno;
  624. }
  625.  
  626.  
  627. load_data()
  628. {
  629. short cnt;
  630.  
  631.   Checksum = 0;
  632.   for(cnt=0;cnt<ddsize;cnt++)
  633.   {
  634.     strncpy(datadef.root[cnt].data, &tbufr[datadef.root[cnt].dpos],
  635.             datadef.root[cnt].dlen);
  636.     Checksum += chkk(datadef.root[cnt].data, datadef.root[cnt].dlen);
  637.     fix_str(datadef.root[cnt].data);
  638.   }
  639. }
  640.  
  641.  
  642. save_data()
  643. {
  644. short cnt;
  645. short check;
  646.  
  647.   check = 0;
  648.   for(cnt=0;cnt<ddsize;cnt++)
  649.   {
  650.     if(datadef.root[cnt].dlen != 0)
  651.     {
  652.       f_getbuffer(datadef.root[cnt].field, datadef.root[cnt].data);
  653.       sprintf(&tbufr[datadef.root[cnt].dpos],
  654.          "%-*.*s", datadef.root[cnt].dlen, datadef.root[cnt].dlen,
  655.          datadef.root[cnt].data);
  656.        check += chkk(datadef.root[cnt].data, datadef.root[cnt].dlen);
  657.      }
  658.   }
  659.   if(check != Checksum)
  660.   {
  661.     if((Edt_pos  != -1) && (Edt_pos <= farea.reclen))
  662.       tbufr[Edt_pos] = '1';
  663.     rtcode = 0;
  664.   }
  665.   fseek(fdata, (((long) recno * farea.reclen) - (long) farea.reclen),
  666.                  SEEK_SET);
  667.   tbufr[farea.reclen - 2] = 0x0d;
  668.   tbufr[farea.reclen - 1] = 0x0a;
  669.  
  670.   fwrite(tbufr, farea.reclen, 1, fdata);
  671. }
  672.  
  673.  
  674. fd_rec()
  675. {
  676. short cnt;
  677. Mouse_State mstate;
  678. Window temp_window;
  679. short key;
  680. short rec;
  681.  
  682.   rec = recno;
  683.   temp_window = w_open(25, 5, 30, 10);
  684.   c_add_button(temp_window, "Y YES", 20, 4, 'Y', 0);
  685.   c_add_button(temp_window, "N NO ", 20, 6, 'N', 0);
  686.  
  687.   w_poscurs(temp_window, 2, 2);
  688.   w_print(temp_window, "DELETE:  Are you sure?");
  689.           
  690.   w_on(temp_window);
  691.  
  692.   key = s_getkey(&mstate);
  693.   while(-1)
  694.   {
  695.     key = s_getkey(&mstate);
  696.     if((key == 'Y')||(key == 'y'))
  697.     {
  698.       w_off(temp_window);
  699.       w_close(temp_window);
  700.       break;
  701.     }
  702.     if((key == 'N')||(key == 'n'))
  703.     {
  704.       w_off(temp_window);
  705.       w_close(temp_window);
  706.       break;   
  707.     }
  708.   }
  709.  
  710.   if((key == 'Y')||(key == 'y'))
  711.   {
  712.     w_poscurs(de_window, 60, 0);
  713.     w_print(de_window, "Deleting");
  714.     rec = fb_rec(2);
  715.  
  716.     w_poscurs(de_window, 60, 0);
  717.     w_print(de_window, "DELETED");
  718.   }
  719.   return rec;
  720. }
  721.  
  722.  
  723. fb_rec(cde)
  724. short cde;
  725. {
  726. short cnt;
  727. short nxt_rec;
  728.  
  729.   fseek(fdata, (((long) recno * farea.reclen) - (long) farea.reclen),
  730.                  SEEK_SET);
  731.   memset(tbufr, ' ', farea.reclen);
  732.   if(cde == 2)
  733.     tbufr[0] = '!'; 
  734.   tbufr[farea.reclen - 2] = 0x0d;
  735.   tbufr[farea.reclen - 1] = 0x0a;
  736.   fwrite(tbufr, farea.reclen, 1, fdata);
  737.  
  738.   for(cnt=0;cnt<ddsize;cnt++)
  739.   {
  740.     strncpy(datadef.root[cnt].data, tbufr, datadef.root[cnt].dlen);
  741.   }
  742.  
  743.   if(cde == 2)
  744.   {
  745.     nxt_rec = recno;
  746.     if((recno + 1) >= farea.nrecs)
  747.       if(recno > 1)
  748.         nxt_rec = recno - 1;
  749.  
  750.     fclose(fdata);
  751.     spawnlp(P_WAIT, "remove.exe", "remove.exe", dataname, 0L);
  752.     fdata = fopen(dataname, "rb+");
  753.     farea.nrecs = (short) (filelength(fileno(fdata)) / farea.reclen);
  754.   }
  755.   return nxt_rec;
  756. }
  757.  
  758.  
  759. fb_prep()
  760. {
  761. short cnt;
  762.  
  763.   memset(tbufr, ' ', farea.reclen);
  764.   tbufr[farea.reclen - 2] = 0x0d;
  765.   tbufr[farea.reclen - 1] = 0x0a;
  766.  
  767.   for(cnt=0;cnt<ddsize;cnt++)
  768.   {
  769.     strncpy(datadef.root[cnt].data, tbufr, datadef.root[cnt].dlen);
  770.   }
  771. }
  772.  
  773.  
  774. fix_str(str)
  775. char *str;
  776. {
  777. short cnt;
  778.  
  779.   if(strlen(str)==0)
  780.     return;
  781.  
  782.   for(cnt=0;cnt<strlen(str);cnt++)
  783.   {
  784.     if(str[cnt] == 0x0d)
  785.       str[cnt] = 32;
  786.     if(str[cnt] == 0x0a)
  787.       str[cnt] = 32;
  788.   }
  789.   
  790.   for(cnt=strlen(str)-1;cnt>=0;cnt--)
  791.   {
  792.     if(str[cnt]!=32)
  793.       return;
  794.     str[cnt]=0;
  795.   }
  796. }
  797.  
  798.  
  799.  
  800. clean(str)
  801. char *str;
  802. {
  803. char str_2[25];
  804. char *str2;
  805.  
  806.   str2 = str_2;
  807.   if(strlen(str)==0)
  808.     return;
  809.   strcpy(str_2, str);
  810.   while(*str2!=0)
  811.   {
  812.     if((*str2!=13)&&(*str2!=10))
  813.       *str++ = *str2;
  814.     str2++;
  815.   }
  816.   *str = 0;
  817. }
  818.  
  819.  
  820. get_kb()
  821. {
  822. short chr;
  823.  
  824.   do
  825.   {
  826.   }
  827.   while(!kbhit());
  828.  
  829.   return getch();
  830. }
  831.  
  832.  
  833. error_window(err)
  834. char *err;
  835. {
  836. Window temp_window;
  837. Mouse_State mstate;
  838. short key;
  839.  
  840.   temp_window = w_open(18, 5, 44, 5);
  841.   w_poscurs(temp_window, 2, 1);
  842.   w_printf(temp_window, "Internal Error: %s", err);
  843.   w_poscurs(temp_window, 2, 3);
  844.   w_print(temp_window, "Click Mouse to continue.");
  845.   key = s_getkey(&mstate);
  846.   while((key != _ESC) && (key != _ENTER) && (key != MOUSE_LEFTCLK))
  847.     key = s_getkey(&mstate);
  848.   w_close(temp_window);
  849. }
  850.  
  851.  
  852. show_pcx(ffname)
  853. char *ffname;
  854. {
  855. char fn[13];
  856. short n,c,i;
  857. char pat = PENCOLOR;
  858.  
  859.   s_off();
  860.   fill_style(&pat, 1, 1);
  861.   move_to(xoffset, yoffset);
  862.   pen_color(7);
  863.   disable();
  864.   flood(floodx,  floody);
  865.  
  866.   enable();
  867.  
  868.   py = 0;
  869.   px = 0;
  870.  
  871.  
  872.   strncpy(fn, ffname, 12);
  873.  
  874.   ffp = fopen(fn, "rb");
  875.   if(ffp != NULL)
  876.   {
  877.     if(fread(&p, 1, sizeof(p), ffp) == sizeof(p))
  878.     {
  879.       do
  880.       {
  881.         n = read_pcx();
  882.         disable();
  883.         for(i = 0;i < n;i++)
  884.         {
  885.           w_dot(py, px, line[i] & 128);
  886.           coords();
  887.           w_dot(py, px, line[i] & 64); 
  888.           coords();
  889.           w_dot(py, px, line[i] & 32); 
  890.           coords();
  891.           w_dot(py, px, line[i] & 16); 
  892.           coords();
  893.           w_dot(py, px, line[i] & 8); 
  894.           coords();
  895.           w_dot(py, px, line[i] & 4); 
  896.           coords();
  897.           w_dot(py, px, line[i] & 2); 
  898.           coords();
  899.           w_dot(py, px, line[i] & 1); 
  900.           coords();
  901.           if(py > floody)
  902.             break;
  903.         }
  904.         enable();
  905.         if(feof(ffp))
  906.           break;
  907.         if(py > floody)
  908.           break;
  909.       }
  910.       while((n != 0) && (py < p.ymax));
  911.     }
  912.     fclose(ffp);
  913.   }
  914.   s_on();
  915. }
  916.  
  917.  
  918. read_pcx()
  919. {
  920. short n, c, i;
  921.  
  922.   memset(line, 0, p.bytes_per_line);
  923.   n = 0;
  924.   c = 0;
  925.   i = 0;
  926.   do
  927.   {
  928.     if(feof(ffp)) 
  929.       break;
  930.     c = fgetc(ffp) & 0xff;
  931.     if((c & 0xc0) == 0xc0)
  932.     {
  933.       i = c & 0x3f;
  934.       c = fgetc(ffp);
  935.  
  936.       while(i--)
  937.         line[n++] = c;
  938.     }
  939.     else
  940.       line[n++] = c;
  941.   }
  942.   while(n < p.bytes_per_line);
  943.   return n;
  944. }
  945.  
  946.  
  947. coords()
  948. {
  949.   px++;
  950.   if(px > ((p.bytes_per_line * 8) - 1))
  951.   {
  952.     py++;
  953.     px = 0;
  954.   }
  955. }
  956.           
  957.  
  958. w_dot(y, x, c)
  959. short y, x, c;
  960. {
  961. short xa, ya;
  962.  
  963.   xa = x + xoffset;
  964.   ya = y + yoffset;
  965.  
  966.   if((xa > 639)||(ya > 479))
  967.     return;
  968.  
  969.   if((xa > (xoffset + floodx)) || (ya > (yoffset + floody)))
  970.     return;
  971.  
  972.  
  973.   if(x <= p.xmax)
  974.   {
  975.     if(c>0)
  976.       writedot(ya, xa, 0);
  977.   }
  978. }
  979.  
  980.  
  981. void buffer_save()
  982. {
  983. FILE *Fdd;
  984. static short Cnt_b;
  985. char far *outbuffer;
  986. short x;
  987.  
  988.   if(Cnt_b < 200)
  989.   {
  990.     Cnt_b++;
  991.     return;
  992.   }
  993.   Cnt_b = 0;
  994.   x = (long) getvect(0x61);
  995.  
  996.   if(x==0L)
  997.     return;
  998.  
  999.   _CL = 0;
  1000.   geninterrupt(0x61);
  1001.   if(_CL == 0)
  1002.     return;
  1003.  
  1004.   outbuffer = MK_FP(_AX, _BX);
  1005.  
  1006.   Fdd = fopen("bgdata.dat", "a+");
  1007.   if(Fdd == NULL)
  1008.   {
  1009.     return -1;
  1010.   }
  1011.   fwrite(outbuffer, strlen(outbuffer), 1, Fdd);
  1012.   fclose(Fdd);
  1013.   outbuffer[0] = 0;
  1014.  
  1015. }
  1016.  
  1017. load_color()
  1018. {
  1019. FILE *ff;
  1020. short colr;
  1021.  
  1022.   Colr = 1;
  1023.   ff = fopen("deg.clr", "r");
  1024.   if(ff != NULL)
  1025.   {
  1026.     fscanf(ff, "%d", &colr);
  1027.     d_colorscheme(colr);
  1028.   }
  1029.   fclose(ff);
  1030.  
  1031.   Colr = colr;
  1032. }
  1033.  
  1034.  
  1035. load_edtpos()
  1036. {
  1037. FILE *ff;
  1038.  
  1039.   ff = fopen(edtname, "r");
  1040.   if(ff != NULL)
  1041.   {
  1042.     fscanf(ff, "%d", &Edt_pos);
  1043.   }
  1044.   fclose(ff);
  1045. }
  1046.  
  1047.  
  1048. chkk(str, len)
  1049. char *str;
  1050. short len;
  1051. {
  1052. short cnt;
  1053. short chk;
  1054.  
  1055.   if(cnt==0)
  1056.     return 0;
  1057.  
  1058.   chk = 0;
  1059.   for(cnt=0;cnt<len;cnt++)
  1060.     chk += str[cnt];
  1061.  
  1062.   return chk;
  1063. }
  1064.  
  1065.  
  1066. rd_cat()
  1067. {
  1068. short cnt;
  1069.  
  1070.   if(fscrn==NULL)
  1071.   {
  1072.     for(cnt=0;cnt<15;cnt++)
  1073.       cats[cnt][0] = 0;
  1074.   }
  1075.   else
  1076.   {
  1077.     for(cnt=0;cnt<15;cnt++)
  1078.     {
  1079.       fgets(&cats[cnt][0], 25, fscrn);
  1080.       clean(&cats[cnt][0]);
  1081.     }
  1082.   }
  1083. }
  1084.  
  1085.  
  1086. load_cfg()
  1087. {
  1088. FILE *ff;
  1089.  
  1090.   xoffset = 10;
  1091.   yoffset = 230;
  1092.   floodx = 400;
  1093.   floody = 100;
  1094.  
  1095.   ff = fopen(cfgname, "r");
  1096.   if(ff != NULL)
  1097.   {
  1098.     fscanf(ff, "%d %d %d %d", &xoffset, &yoffset, &floodx, &floody);
  1099.   }
  1100.   fclose(ff);
  1101. }
  1102.  
  1103.  
  1104.  
  1105.