home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Interactive Guide / c-cplusplus-interactive-guide.iso / c_ref / csource1 / chint / useful19.hnt < prev    next >
Text File  |  1993-10-28  |  2KB  |  62 lines

  1. This useful hint illustrates a procedure that would be inserted into the
  2. standard skeleton, (DBC.SKL), to convert a DataBoss Pascal data file into a
  3. DataBoss "C" data file.
  4.  
  5. The idea would then be to replace the "repeat" loop in "do_menu()" with a
  6. call(s) to "convertPasData()" to reconfigure the data from pascal byte length
  7. strings to null terminated "C" strings.
  8.  
  9. WARNING - Only ever run the program over the data ONCE!!.  Converting a data
  10.           more than once would corrupt the fields.
  11.  
  12. This procedure would be added to a custom version of DBC.SKL just above the
  13. "do_menu()" function.
  14.  
  15. void convertPasData(int fno, ptr fb)
  16. {
  17.   byte fldlen;
  18.   word w;
  19.   long li;
  20.   fldblk *fblk;
  21.     fldtyp *ftp;
  22.   string tpic;
  23.   long *recstatptr;
  24.  
  25.     fblk = fb;
  26.   ftp = &(*fblk->farr)[0];
  27.   recstatptr = (long *)(ftp->faddr);
  28.   recstatptr--;
  29.   ok = True;
  30.   link = No_Link;
  31.   for (li=1; li < filelen(datf[fno]); li++) {
  32.     recno[fno] = li;
  33.     getarec(fno);
  34.     if (*recstatptr == 0) {
  35.       for (w=0; w < fblk->numf; w++) {
  36.         ftp = &(*fblk->farr)[w];
  37.         if (ftp->typ != _Memo) {
  38.           expand(tpic,ftp->pic);
  39.           fldlen = piclen(tpic,ftp->typ);
  40.           memmove(ftp->faddr,ftp->faddr+1,fldlen);
  41.           ftp->faddr[fldlen] = 0;
  42.         }
  43.       }
  44.       putarec(fno);
  45.     }
  46.   }
  47.   link = Up_N_Down;
  48. }
  49.  
  50.  
  51. The next step would be to remove the "repeat" loop code from within the
  52. "do_menu()" function and a call to the above routine could be inserted
  53. instead.
  54.  
  55. If the Application was called "FROMPAS" then appropriate call would be :--
  56.  
  57.       convertPasData(1,&FROMC1.datasize);
  58.       convertPasData(2,&FROMC2.datasize);
  59.  
  60. Finally, BEFORE you attempt to run the "C" version of the database
  61. maintenance program run the "C" version of the "Fix" program to create
  62. the "C" index files for the converted data.