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

  1. This useful hint shows how to "automate" a number of menu keystrokes.
  2.  
  3.  
  4. 1)  First copy the standard skeleton, (DBC.SKL), to one that you can safely
  5.     modify without havin to worry about destroying the original.
  6.  
  7.     COPY DBC.SKL DBCAUTO.SKL
  8.  
  9.  
  10. 2)  The first modification is to add a new global "string" variable.  This
  11.     string will act as the storage place for our "automatic" input.  At the
  12.     bottom of the current global variable declarations, just before the
  13.     DataBoss ⁿRECMODⁿ generation macro insert the line :--
  14.  
  15.     string autoInput;  /*MOD*/
  16.  
  17.  
  18. 3)  We will initialise the new variable to a null string, (no automatic
  19.     input to begin with).  This is done by adding the following line to the
  20.     top of the "initialize" function:--
  21.  
  22.     void initialize(void)
  23.     {
  24.       strcpy(autoInput,""); /*MOD*/
  25.  
  26.  
  27. 4)  Now move down into the "do_menu()" function, (closer to the end of
  28.     skeleton file).  This is where user input is collected.  Make the
  29.     following modifications after the "do {" statement begins :--
  30.  
  31.       do {
  32.         if (dm.curitm->sec > gvar->sec) {
  33.           if (dm.curmnu->mtyp == Vert) goud(&dm,Down);
  34.           else                         gorl(&dm,Right);
  35.         }                                               
  36.         if (strlen(autoInput) > 0) {                    /*MOD*/
  37.           ctlkey = autoInput[0];                        /*MOD*/
  38.           strdelete(autoInput,0,1);                     /*MOD*/
  39.         }                                               /*MOD*/
  40.         else {                                          /*MOD*/
  41.           hbar(&dm);
  42.           tandk(0,0,uw.wa[scrno]);
  43.           ctlkey = upperch(getkey());
  44.         }                                               /*MOD*/
  45.  
  46.  
  47. 5)  Now it just remains for you to decide how/when to create automatic input.
  48.  
  49.  
  50.     i)  For example say you want the database program to start up adding a new
  51.         child record to the last record of file 1.  Instead of initialising
  52.         "autoInput" to a null string you would set it thus :--
  53.  
  54.         strcpy(autoInput,"L+A");
  55.  
  56.         The "L" does a "Last", the "+" swaps to the second file, and the "A"
  57.         begins the "Add".
  58.  
  59.     ii) Another example might be that if the user selects "Edit" when on the
  60.         second file that you really want to go back to file 1 and do the edit
  61.         on the parent record, then swap back to file 2 when complete.
  62.  
  63.         To achieve this you would add the following code to the "do_menu()"
  64.         function, (just after our existing modifications for "autoInput") :-
  65.  
  66.         if ((ctlkey == 'E') && (filno == 2)) {           /* if edit file 2 */
  67.           ctlkey = ' ';                        /* Nullify the Edit Command */
  68.           strcpy(autoInput,"-E+");  /* Swap to Parent, Edit, Swap to Child */
  69.         }
  70.  
  71.  
  72. All that remains is to remember to generate you program using the custom
  73. skeleton, DBCAUTO.SKL, so the program will inherit the new functionallity.