home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / Samples / CSAPE32.ARJ / SOURCE / CSSRC / FNIFLD.C < prev    next >
C/C++ Source or Header  |  1990-08-07  |  2KB  |  92 lines

  1. /*
  2.     fnifld.c
  3.  
  4.     % inter_field
  5.  
  6.     This function is used by the standard field functions to facilitate
  7.     movement between fields.
  8.  
  9.     Handling the interfield movement in one place save code space and
  10.     makes it easy to modify the interfield behavior.  Simply replace
  11.     inter_field with a new function that performs as desired.
  12.  
  13.     C-scape 3.2
  14.     Copyright (c) 1986, 1987, 1988 by Oakland Group, Inc.
  15.     ALL RIGHTS RESERVED.
  16.  
  17.     Revision History:
  18.     -----------------
  19.     10/08/88 jmd    Added TAB and SHFT_TAB
  20.     12/15/88 jmd    ifdef'd out TAB and SHFT_TAB support
  21.  
  22.      1/23/90 jmd    added test for parent in ENTER case
  23.      3/28/90 jmd    ansi-fied
  24.      8/07/90 pmcm    changed BOB_DOWN to BOB_INC in ENTER case
  25. */
  26.  
  27. #include <stdio.h>
  28. #include "cscape.h"
  29. #include "scancode.h"
  30.  
  31. boolean inter_field(sed_type sed, int scancode)
  32. /*
  33.     effects:    Handles movement between fields.
  34.                     ESC        sets baton to 0, exits
  35.                     ENTER    goes to next field if possible
  36.                             else if not a bob sets baton to fieldno, exits
  37.                             else if a bob sets baton to BOB_INC
  38.                     UP         goes to the previous field,
  39.                     DOWN     goes to the next field,
  40.                   * TAB            goes to the right field
  41.                   * SHFT_TAB    goes to the left field
  42.     * Note:    define the symbol TAB_SUPPORT to enable these keys
  43.     returns:    TRUE if intercepted a key, FALSE otherwise.
  44. */
  45. {
  46.  
  47.  
  48.  
  49.     switch (scancode) {
  50.     case ESC:
  51.         sed_SetBaton(sed, 0);
  52.         sed_ToggleExit(sed);
  53.         return(TRUE);
  54.     case ENTER:
  55.         /* try to go to the next field else exit */
  56.         if (sed_IncField(sed) == SED_STUCK) {
  57.  
  58.             if (bob_GetParent(sed) != NULL) {
  59.                 /* we're embedded in another sed, 
  60.                  * return BOB_INC for bob_funcs' benefit
  61.                  */
  62.                 sed_SetBaton(sed, BOB_INC);
  63.             }
  64.             else {
  65.                 sed_SetBaton(sed, sed_GetFieldNo(sed)+1);
  66.             }
  67.             sed_ToggleExit(sed);
  68.         }
  69.         return(TRUE);
  70.  
  71. #ifdef TAB_SUPPORT
  72.     case TAB:
  73.         sed_RightField(sed);
  74.         return(TRUE);
  75.     case SHFT_TAB:
  76.         sed_LeftField(sed);
  77.         return(TRUE);
  78. #endif
  79.  
  80.     case UP:
  81.         sed_DecField(sed);
  82.         return(TRUE);
  83.     case DOWN:
  84.         sed_IncField(sed);
  85.         return(TRUE);
  86.     default:
  87.         break;
  88.     }
  89.     return(FALSE);
  90. }
  91.  
  92.