home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Interactive Guide / c-cplusplus-interactive-guide.iso / c_ref / csource1 / chint / useful13.hnt < prev    next >
Text File  |  1992-12-07  |  3KB  |  106 lines

  1. This hint shows how to use the existing "Add_Record" routine to add records
  2. on the fly to another file in the current system.
  3.  
  4.  
  5.                               ### WARNING ###
  6.  
  7. This functionality should not be invoked on a linked file as the DataBoss
  8. internal linking would, in all probability, be compromised
  9.  
  10.                               ### WARNING ###
  11.  
  12.  
  13. Step (1)  Copy the standard skeleton read for customisation...
  14.  
  15.                COPY DBC.SKL DBCFLY.SKL
  16.  
  17.  
  18. Step (2)  Add a new global boolean variable...
  19.  
  20.                bool specListAndAdd;
  21.  
  22.  
  23. Step (3)  Add two new prototypes...
  24.  
  25.    long specialadd(int fno);
  26.    strptr speclistadd(keystr sout, int fno, int kno, keystr ks);
  27.  
  28.  
  29. Step (4)  Modify the first line of the "list()" function to...
  30.  
  31.   if (!(listAndAdd || specListAndAdd)) listing = True;   /*MOD*/
  32.  
  33.  
  34. Step (5)  Add a new line to the "list()" function...
  35.  
  36. ...
  37.       if (trecno == 0 && listAndAdd) trecno = add2CodeFile(fno);
  38.       if ((trecno == 0) && specListAndAdd) trecno = specialadd(fno); /*NEW*/
  39.       if (trecno > 0) {
  40. ...
  41.  
  42.  
  43. Step (6)  After the end of the existing "listadd()" function add in the
  44.           following new function...
  45.  
  46. strptr speclistadd(keystr sout, int fno, int kno, keystr ks)
  47. {
  48.   specListAndAdd = True;
  49.   list(sout,fno,kno,ks);
  50.   specListAndAdd = False;
  51.   return(sout);
  52. }
  53.  
  54.  
  55. Step (7)  After the end of the "add_record()" function add in another new
  56.           function "specialadd()"...
  57.  
  58. long specialadd(int fno)
  59. {
  60.   bool saveDisp;
  61.   int saveFilno, saveScrno, saveFldNum;
  62.   editGlobalVars saveEDT;
  63.  
  64.   saveFilno = filno;
  65.   saveScrno = scrno;
  66.   saveFldNum = fldnum;
  67.   memmove(&saveEDT,&edt,sizeof(editGlobalVars));
  68.   filno = fno;
  69.   scrno = winforfile[filno];
  70.   saveDisp = uw.wa[scrno]->disp;
  71.   selectwin(uw.wa[scrno]);
  72.   if (!saveDisp) hidewin(T_ON,uw.wa[scrno]);
  73.   add_record(_Add);
  74.   if (!saveDisp) hidewin(T_OFF,uw.wa[scrno]);
  75.   exitcode = Nul;
  76.   memmove(&edt,&saveEDT,sizeof(editGlobalVars));
  77.   fldnum = saveFldNum;
  78.   scrno = saveScrno;
  79.   for (filno=1;filno<=16;filno++){ if (uw.wa[filno] != NULL) selectwin(uw.wa[filno]);}
  80.   filno = saveFilno;
  81.   return(recno[fno]);
  82. }
  83.  
  84.  
  85. Step (8)  This modification to the custom skeleton is to add a line of code
  86.           to "initialize()" to ensure the new variable is initialized...
  87.  
  88.           specListAndAdd = False;
  89.           filinuse[X] = False;
  90.  
  91.           Replace "X" with the number of the file in for the "specialadd"
  92.           will work.
  93.  
  94. Step (9)  When defining a database you can combine a "Validation Expression"
  95.  
  96.                found(<fno>,1,{})
  97.  
  98.           with a call to the new "speclistadd()" in the "Error Expression"
  99.  
  100.                speclistadd(_tts,<fno>,1,{})
  101.  
  102.           Where <fno> is the number of another non-linked file in the
  103.           current definition that has fields that are editable on some
  104.           other window.
  105.  
  106.