home *** CD-ROM | disk | FTP | other *** search
/ Black Box 4 / BlackBox.cdr / progc / c_source.arj / IIBDB.C < prev    next >
Text File  |  1991-01-02  |  9KB  |  350 lines

  1. #include "iibc.h"
  2. #include "iibdb.h"
  3.  
  4. static char emp[] = "Press any key to continue";
  5.  
  6. int initial_fields(int new_or_old,
  7.                    int pages,
  8.                    int titles,
  9.                    int fields,
  10.                    struct fld_info *fld,
  11.                    struct ttl_info *ttl,
  12.                    int rulh,int culh,int rbrh,int cbrh,
  13.                    char *title1)
  14.  
  15. {
  16.   int i;
  17.  
  18.   for (i = 0; i<= pages; i++)
  19.   {
  20.     _setactivepage(i);
  21.     _settextwindow(1,1,25,80);
  22.     _settextcolor(env.frgrd[0]);
  23.     _setbkcolor(env.bkgrd[0]);
  24.     _clearscreen(_GWINDOW);
  25.     frame(rulh+1,culh,rbrh - rulh - 1,cbrh - culh + 1,env.frgrd[2],env.bkgrd[2]);
  26.     _settextcolor(env.frgrd[0]);
  27.     _setbkcolor(env.bkgrd[0]);
  28.     show_option(rulh,40,title1,'C',env.frgrd[1],env.bkgrd[1]);
  29.     _settextwindow(rbrh,culh,rbrh,cbrh);
  30.     _settextcolor(env.frgrd[5]);
  31.     _setbkcolor(env.bkgrd[5]);
  32.     _clearscreen(_GWINDOW);
  33.     _settextposition(1,1);
  34.     _outtext("/ [PgUp] [PgDn] [Home] [End]  [Esc] = Quit  [F10] = SAVE    INS OFF");
  35.   } /* endfor */
  36.  
  37.   _settextcolor(env.frgrd[4]);
  38.   _setbkcolor(env.bkgrd[4]);
  39.  
  40.   for (i = 0; i <= titles; i++)
  41.   {
  42.     _setactivepage(ttl[i].pg_num);
  43.     _settextwindow(rulh + 2,culh + 1,rbrh - 2,cbrh - 1);
  44.     _settextposition(ttl[i].t_row,ttl[i].t_column);
  45.     _outtext(ttl[i].ttl_title);
  46.   } /* endfor */
  47.  
  48.   _settextcolor(env.frgrd[0]);
  49.   _setbkcolor(env.bkgrd[0]);
  50.  
  51.   for (i = 0; i <= fields; i++)
  52.   {
  53.     if (fld[i].fld_type != 'H')
  54.     {
  55.       _setactivepage(fld[i].pg_num);
  56.       _settextwindow(rulh + 2,culh + 1,rbrh - 2,cbrh - 1);
  57.       _wrapon(_GWRAPON);
  58.       _settextposition(fld[i].t_row,fld[i].t_column);
  59.       _outtext(fld[i].fld_title);
  60.     } /* endif */
  61.   } /* endfor */
  62.  
  63.   _settextcolor(env.frgrd[5]);
  64.   _setbkcolor(env.bkgrd[5]);
  65.  
  66.   if (new_or_old == NEW)
  67.   {
  68.     for (i = 0; i <= fields; i++)
  69.     {
  70.       if (fld[i].fld_type != 'P')
  71.       {
  72.         fld[i].fld_buffer[0] = '\0';
  73.         fld[i].changed = 0;
  74.         fld[i].cur_pos = 0;
  75.         fld[i].input_count = 0;
  76.       }
  77.       else
  78.       {
  79.         fld[i].changed = 0;
  80.         fld[i].input_count = strlen(fld[i].fld_buffer);
  81.         fld[i].cur_pos = strlen(fld[i].fld_buffer);
  82.       } /* endif */
  83.       if (fld[i].fld_type != 'H')
  84.       {
  85.         _setactivepage(fld[i].pg_num);
  86.         _settextwindow(fld[i].row+2,fld[i].column+1,fld[i].row+2,fld[i].column+fld[i].length);
  87.         _clearscreen(_GWINDOW);
  88.         _settextwindow(rulh + 2,culh + 1,rbrh - 2,cbrh - 1);
  89.         _settextposition(fld[i].row,fld[i].column);
  90.         _outtext(fld[i].fld_buffer);
  91.       } /* endif */
  92.     } /* endfor */
  93.   }
  94.   else
  95.   {
  96.     for (i = 0; i <= fields; i++)
  97.     {
  98.       if (fld[i].fld_type != 'H')
  99.       {
  100.         _setactivepage(fld[i].pg_num);
  101.         fld[i].changed = 0;
  102.         fld[i].input_count = strlen(fld[i].fld_buffer);
  103.         fld[i].cur_pos = strlen(fld[i].fld_buffer);
  104.         _settextwindow(fld[i].row+2,fld[i].column+1,fld[i].row+2,fld[i].column+fld[i].length);
  105.         _clearscreen(_GWINDOW);
  106.         _settextwindow(rulh + 2,culh + 1,rbrh - 2,cbrh - 1);
  107.         _settextposition(fld[i].row,fld[i].column);
  108.         _outtext(fld[i].fld_buffer);
  109.       } /* endif */
  110.     } /* endfor */
  111.   } /* endif */
  112.   return(0);
  113. } /* end initial_fields */
  114. /*---------------------------------------------------------------------------*/
  115.  
  116.  
  117. int delete_rec(char *file_name,
  118.                char *rec_id,
  119.                int fields,
  120.                struct fld_info *fld,
  121.                int key_field)
  122.  
  123. {
  124.  
  125.   int handle1;
  126.   char bigbuff[257];
  127.   long f_position = 0L;
  128.   long file_length = 0L;
  129.  
  130.   int found_it = 0;
  131.   int i,j,k,counter;
  132.  
  133.   for (i = 0; i <= fields; i++)
  134.   {
  135.     fld[i].changed = 0;
  136.     fld[i].cur_pos = 0;
  137.     fld[i].input_count = 0;
  138.     fld[i].fld_buffer[0] = '\0';
  139.   } /* endfor */
  140.  
  141.   handle1 = sopen(file_name,O_RDWR|O_BINARY,SH_DENYWR);
  142.  
  143.   if (handle1 == -1)
  144.   {
  145.     return(-1);
  146.   }
  147.   else
  148.   {
  149.     file_length = filelength(handle1);
  150.     f_position  = lseek(handle1,f_position,SEEK_SET);
  151.     while (f_position < file_length - 1 && !found_it)
  152.     {
  153.       bigbuff[0] = '\0';
  154.       read(handle1,bigbuff,256);
  155.       i = 0;
  156.       while (bigbuff[i] != '\r')
  157.       {
  158.         i++;
  159.       } /* endwhile */
  160.       bigbuff[i] = '\0';
  161.       j = 0;
  162.       counter = 0;
  163.       for (k=0; k <= i;k++)
  164.       {
  165.         if (bigbuff[k] == ','|| bigbuff[k] == '\0')
  166.         {
  167.           fld[counter].fld_buffer[j] = '\0';
  168.           counter++;
  169.           j = 0;
  170.         }
  171.         else
  172.         {
  173.           if (bigbuff[k] != ' ')
  174.           {
  175.             fld[counter].fld_buffer[j] = bigbuff[k];
  176.             j++;
  177.           } /* endif */
  178.         } /* endif */
  179.       } /* endfor */
  180.       if (strcmp(fld[key_field].fld_buffer,rec_id) == 0)
  181.       {
  182.         found_it = 1;
  183.         f_position = lseek(handle1,f_position,SEEK_SET);
  184.         for (j=0; j<i;j++ )
  185.         {
  186.           write(handle1,"#",1);
  187.         } /* endfor */
  188.         close(handle1);
  189.         return(0);
  190.       }
  191.       else
  192.       {
  193.         f_position = f_position + i + 2;
  194.         f_position = lseek(handle1,f_position,SEEK_SET);
  195.       } /* endif */
  196.     } /* endwhile */
  197.     close(handle1);
  198.     return(11);
  199.   } /* endif */
  200. } /* end delete_rec */
  201. /*---------------------------------------------------------------------------*/
  202.  
  203.  
  204. int read_rec(char *file_name,
  205.              char *rec_id,
  206.              int fields,
  207.              struct fld_info *fld)
  208.  
  209. {
  210.  
  211.   int handle1;
  212.   char bigbuff[300];
  213.   long f_position = 0L;
  214.   long file_length = 0L;
  215.  
  216.   int found_it = 0;
  217.   int i,j,k,counter;
  218.  
  219.   for (i = 0; i <= fields; i++)
  220.   {
  221.     fld[i].changed = 0;
  222.     fld[i].cur_pos = 0;
  223.     fld[i].input_count = 0;
  224.     fld[i].fld_buffer[0] = '\0';
  225.   } /* endfor */
  226.  
  227.   handle1 = sopen(file_name,O_RDONLY|O_BINARY,SH_DENYWR);
  228.  
  229.   if (handle1 == -1)
  230.   {
  231.     return(-1);
  232.   }
  233.   else
  234.   {
  235.     file_length = filelength(handle1);
  236.     f_position  = lseek(handle1,f_position,SEEK_SET);
  237.     while (f_position < file_length - 1 && !found_it)
  238.     {
  239.       bigbuff[0] = '\0';
  240.       read(handle1,bigbuff,300);
  241.       i = 0;
  242.       while (bigbuff[i] != '\r')
  243.       {
  244.         i++;
  245.       } /* endwhile */
  246.       bigbuff[i] = '\0';
  247.       j = 0;
  248.       counter = 0;
  249.       for (k=0; k <= i;k++)
  250.       {
  251.         if (bigbuff[k] == ','|| bigbuff[k] == '\0')
  252.         {
  253.           fld[counter].fld_buffer[j] = '\0';
  254.           counter++;
  255.           j = 0;
  256.         }
  257.         else
  258.         {
  259.           fld[counter].fld_buffer[j] = bigbuff[k];
  260.           j++;
  261.         } /* endif */
  262.       } /* endfor */
  263.       if (strcmp(fld[0].fld_buffer,rec_id) == 0)
  264.       {
  265.         found_it = 1;
  266.         close(handle1);
  267.         return(0);
  268.       }
  269.       else
  270.       {
  271.         f_position = f_position + i + 2;
  272.         f_position = lseek(handle1,f_position,SEEK_SET);
  273.       } /* endif */
  274.     } /* endwhile */
  275.     close(handle1);
  276.     return(11);
  277.   } /* endif */
  278. } /* end read_rec */
  279. /*---------------------------------------------------------------------------*/
  280.  
  281.  
  282. int write_rec(int handle1,
  283.               int fields,
  284.               struct fld_info *fld,
  285.               long offset,
  286.               int reference)
  287.  
  288. {
  289.  
  290.   char bigbuff[300];
  291.   long f_position = 0L;
  292.   char format_buff[20];
  293.   char length_buff[20];
  294.   char temp_buff[61];
  295.  
  296.   int i;
  297.   int r_code = 0;
  298.   int rec_length = 0;
  299.  
  300.  
  301.   bigbuff[0] = '\0';
  302.  
  303.   for (i = 0; i <= fields; i++)
  304.   {
  305.     format_buff[0] = '\0';
  306.     length_buff[0] = '\0';
  307.     rec_length = rec_length + fld[i].length + 1;
  308.     itoa(fld[i].length,length_buff,10);
  309.     if (fld[i].fld_type != 'N')
  310.     {
  311.       strcpy(format_buff,"%-");
  312.     }
  313.     else
  314.     {
  315.       strcpy(format_buff,"%");
  316.     } /* endif */
  317.     strcat(format_buff,length_buff);
  318.     strcat(format_buff,"s");
  319.     if (i == fields)
  320.     {
  321.       strcat(format_buff,"\r\n");
  322.     }
  323.     else
  324.     {
  325.       strcat(format_buff,",");
  326.     } /* endif */
  327.  
  328.     temp_buff[0] = '\0';
  329.     sprintf(temp_buff,format_buff,fld[i].fld_buffer);
  330.     strcat(bigbuff,temp_buff);
  331.   } /* endfor */
  332.  
  333.   rec_length = rec_length + 1;
  334.   bigbuff[rec_length] = '\0';
  335.  
  336.   f_position  = lseek(handle1,offset,reference);
  337.   if (locking(handle1,LK_LOCK,rec_length) != -1)
  338.   {
  339.     r_code = write(handle1,bigbuff,rec_length);
  340.     f_position = lseek(handle1,f_position,reference);
  341.     locking(handle1,LK_UNLCK,rec_length);
  342.   }
  343.   else
  344.   {
  345.     box_message(1,1,"write_rec Locking Failed.",emp,NULL);
  346.     r_code = -112;
  347.   } /* endif */
  348.   return(r_code);
  349. } /* end write_rec */
  350.