home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / Samples / CSAPE32.ARJ / SOURCE / CSSRC / SPCSLED.C < prev    next >
C/C++ Source or Header  |  1990-12-11  |  4KB  |  163 lines

  1. /*
  2.     spcsled.c  
  3.  
  4.     % spc_Sled
  5.  
  6.     C-scape 3.2
  7.     Copyright (c) 1988, by Oakland Group, Inc.
  8.     ALL RIGHTS RESERVED.
  9.  
  10.     Revision History:
  11.     -----------------
  12.     10/14/88 jdc    created
  13.  
  14.      2/12/89 jmd    Put sed_GoHome after DoFenter
  15.      3/24/89 jmd    added sed_ macros
  16.      7/17/89 gam    took wraparound out of TAB and SHFT_TAB
  17.      7/31/89 gam    removed obsolete code from DOWN case
  18.      8/04/89 gam    changed name of sledwin.h to sled.h
  19.      8/12/89 jmd    removed call to sed_GetBob
  20.      9/08/89 gam    added sed_GoHome calls to fix vanishing field problem
  21.      9/08/89 gam    now returns proper value when not a bob
  22.  
  23.     11/13/89 jmd    added non-DOS scancodes
  24.      2/22/90 jdc    removed extra sed_GoHomes & tweeked
  25.      2/23/90 jdc    added full BOB return code support
  26.      2/24/90 jdc    removed sled_GetHeight
  27.      3/28/90 jmd    ansi-fied
  28.      5/07/90 jdc    made consistant with spc_Embed
  29.      7/25/90 jdc    Remap now returns SED_STUCK, SED_INVALID, or SED_MOVED
  30.      8/08/90 pmcm    added BOB_INC support
  31.      8/08/90 pmcm    restored ENTER case
  32.     10/05/90 pmcm    removed CTRL_I, CTRL_D aliases for GREYPLUS, GREYMINUS
  33.                     (GREYPLUS & GREYMINUS are now meta keys on non-DOS systems)
  34.     12/11/90 jdc    changed paging cases to use new macros
  35. */
  36.  
  37. #include <stdio.h>
  38.  
  39. #include "cscape.h"
  40. #include "sled.h"
  41. #include "scancode.h"
  42.  
  43. boolean spc_Sled(sed_type sed, int scancode)
  44. /*
  45.     the sed passed in here is the sled's sed.
  46.     effects:    Handles movement between fields.
  47.                     ESC            sets baton to 0, exits
  48.                     ENTER        goes to next field if possible
  49.                                 else sets baton to BOB_DOWN, exits
  50.                     UP             goes to the above field,
  51.                     DOWN         goes to the below field,
  52.                     TAB            goes to the right field,
  53.                     SHFT_TAB    goes to the left field,
  54.                     PGUP,
  55.                     PGDN,
  56.                     GREYPLUS    inserts a row,
  57.                     GREYMINUS    deletes a row, 
  58.     returns:    the value of spc_subshft()
  59.                 (TRUE if intercepted a key, FALSE otherwise)
  60. */
  61. {
  62.     switch (scancode) {
  63.  
  64.     case BOB_QUIT:
  65.     case ESC:
  66.         sed_SetBaton(sed, (bob_GetParent(sed) != NULL) ? BOB_QUIT : 0);
  67.         sed_ToggleExit(sed);
  68.         return(TRUE);
  69.  
  70.     case BOB_INC:
  71.          if (bob_GetParent(sed) != NULL) {
  72.             sed_SetBaton(sed, BOB_INC);
  73.             sed_ToggleExit(sed);
  74.         }
  75.         return(TRUE);
  76.  
  77.     case UP:
  78.         if (sed_UpField(sed) != SED_STUCK 
  79.         || sled_Remap(sed, -1) != SED_STUCK) {
  80.  
  81.             return(TRUE);
  82.         }
  83.         /* no break */
  84.     case BOB_UP:
  85.          if (bob_GetParent(sed) != NULL) {
  86.             sed_SetBaton(sed, BOB_UP);
  87.             sed_ToggleExit(sed);
  88.         }
  89.         return(TRUE);
  90.  
  91.     case ENTER:
  92.         if (sed_RightField(sed) != SED_STUCK) {
  93.             return(TRUE);
  94.         }
  95.         else {
  96.             sed_GotoGridField(sed, sed_GetGridRow(sed, sed_GetFieldNo(sed)), 0);
  97.         }
  98.  
  99.         /* no break, let ENTER fall through to DOWN case */
  100.  
  101.     case DOWN:    
  102.         if (sed_DownField(sed) != SED_STUCK    
  103.         || sled_Remap(sed, 1) != SED_STUCK) {
  104.             return(TRUE);
  105.         }
  106.         /* no break, let DOWN fall thru to BOB_DOWN */
  107.  
  108.     case BOB_DOWN:
  109.         /*    we are at the bottom of the column array (and, in the ENTER
  110.             case, in the rightmost field)
  111.         */
  112.         if (bob_GetParent(sed) != NULL) {
  113.             sed_SetBaton(sed, (scancode == ENTER) ? BOB_INC : BOB_DOWN);
  114.             sed_ToggleExit(sed);
  115.         }
  116.         else if (scancode == ENTER) {
  117.             /* if not bobbed and ENTER, then exit */
  118.              sed_SetBaton(sed, sed_GetFieldNo(sed) + 1);
  119.             sed_ToggleExit(sed);
  120.         }
  121.         return(TRUE);
  122.  
  123.     case TAB:
  124.     case BOB_RIGHT:
  125.         if (sed_RightField(sed) == SED_STUCK && bob_GetParent(sed) != NULL) {
  126.             sed_SetBaton(sed, BOB_RIGHT);
  127.             sed_ToggleExit(sed);
  128.         }
  129.         return(TRUE);
  130.  
  131.     case SHFT_TAB:
  132.     case BOB_LEFT:    
  133.         if (sed_LeftField(sed) == SED_STUCK && bob_GetParent(sed) != NULL) {
  134.             sed_SetBaton(sed, BOB_LEFT);
  135.             sed_ToggleExit(sed);
  136.         }
  137.         return(TRUE);
  138.  
  139.     case PGUP:
  140.         sled_PageUp(sed);
  141.         return(TRUE);
  142.  
  143.     case PGDN:    
  144.         sled_PageDown(sed);
  145.         return(TRUE);
  146.  
  147.     case GREYPLUS:
  148.         sled_InsertRows(sed, sled_GetRow(sed), 1);
  149.         sled_Repaint(sed);
  150.         return(TRUE);
  151.  
  152.     case GREYMINUS:
  153.         sled_DeleteRows(sed, sled_GetRow(sed), 1);
  154.         sled_Repaint(sed);
  155.         return(TRUE);
  156.  
  157.     default:
  158.         break;
  159.     }
  160.  
  161.     return(FALSE);
  162. }
  163.