home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c185 / 1.ddi / FUNCS.EXE / CSCAPE / SOURCE / SPCSLED.C < prev   
Encoding:
C/C++ Source or Header  |  1989-09-08  |  3.3 KB  |  150 lines

  1. /*
  2.     spcsled.c  
  3.  
  4.     % spc_Sled
  5.  
  6.     C-scape 3.1
  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.  
  24. #include <stdio.h>
  25.  
  26. #include "cscape.h"
  27. #include "sled.h"
  28. #include "scancode.h"
  29.  
  30. boolean spc_Sled(sed, scancode)
  31.     sed_type sed;
  32.     int scancode;
  33. /*
  34.     the sed passed in here is the sled's sed.
  35.  
  36.     effects:    Handles movement between fields.
  37.                     ESC            sets baton to 0, exits
  38.                     ENTER        goes to next field if possible
  39.                                 else sets baton to BOB_DOWN, exits
  40.                     UP             goes to the above field,
  41.                     DOWN         goes to the below field,
  42.                     TAB            goes to the right field,
  43.                     SHFT_TAB    goes to the left field,
  44.                     PGUP,
  45.                     PGDN,
  46.                     GREYPLUS    inserts a row,
  47.                     GREYMINUS    deletes a row, 
  48.  
  49.     returns:    the value of spc_subshft()
  50.                 (TRUE if intercepted a key, FALSE otherwise)
  51. */
  52. {
  53.     int fld;
  54.  
  55.     switch (scancode) {
  56.     case ESC:
  57.         if ((bob_GetOwner(sed_GetBob(sed), &fld)) == NULL) {
  58.             sed_SetBaton(sed, 0);
  59.         }
  60.         else {
  61.             sed_SetBaton(sed, BOB_QUIT);
  62.         }
  63.         sed_ToggleExit(sed);
  64.         return(TRUE);
  65.  
  66.     case TAB:    
  67.     case ENTER:
  68.         if (sed_RightField(sed) != SED_STUCK) {
  69.             return(TRUE);
  70.         }
  71.  
  72.         /* If enter, wrap to start of next line. */
  73.         if (scancode == ENTER) {
  74.             sed_GotoGridField(sed, sed_GetGridRow(sed, sed_GetFieldNo(sed)), 0);
  75.         }
  76.  
  77.         /* no break; fall through to DOWN case */
  78.  
  79.     case DOWN:    
  80.         sed_GoHome(sed);
  81.         if (sed_DownField(sed) != SED_STUCK) {
  82.             ;
  83.         }
  84.         else if (sled_Remap(sed, 1)) {
  85.             /* the field should appear to be newly entered */
  86.             sed_GoHome(sed);
  87.             sed_DoFieldFenter(sed, sed_GetFieldNo(sed));
  88.         }
  89.         else if (bob_GetOwner(sed, &fld) != NULL) {
  90.             sed_SetBaton(sed, BOB_DOWN);
  91.             sed_ToggleExit(sed);
  92.         }
  93.         return(TRUE);
  94.  
  95.     case SHFT_TAB:
  96.         if (sed_LeftField(sed) != SED_STUCK) {
  97.             return(TRUE);
  98.         }
  99.  
  100.         /* no break; fall through to UP case */
  101.  
  102.     case UP:
  103.         sed_GoHome(sed);
  104.         if (sed_UpField(sed) != SED_STUCK) {
  105.             ;
  106.         }
  107.         else if (sled_Remap(sed, -1)) {
  108.             /* the field should appear to be newly entered */
  109.             sed_GoHome(sed);
  110.             sed_DoFieldFenter(sed, sed_GetFieldNo(sed));
  111.         }
  112.          else if (bob_GetOwner(sed, &fld) != NULL) {
  113.             sed_SetBaton(sed, BOB_UP);
  114.             sed_ToggleExit(sed);
  115.         }
  116.         return(TRUE);
  117.  
  118.     case PGUP:
  119.         if (sled_Remap(sed, -sled_GetHeight(sed))) {
  120.             /* the field should appear to be newly entered */
  121.             sed_GoHome(sed);
  122.             sed_DoFieldFenter(sed, sed_GetFieldNo(sed));
  123.         }
  124.         return(TRUE);
  125.  
  126.     case PGDN:    
  127.         if (sled_Remap(sed, sled_GetHeight(sed))) {
  128.             /* the field should appear to be newly entered */
  129.             sed_GoHome(sed);
  130.             sed_DoFieldFenter(sed, sed_GetFieldNo(sed));
  131.         }
  132.         return(TRUE);
  133.  
  134.     case GREYPLUS:
  135.         sled_InsertRows(sed, sled_GetRow(sed), 1);
  136.         sled_Repaint(sed);
  137.         return(TRUE);
  138.  
  139.     case GREYMINUS:
  140.         sled_DeleteRows(sed, sled_GetRow(sed), 1);
  141.         sled_Repaint(sed);
  142.         return(TRUE);
  143.  
  144.     default:
  145.         break;
  146.     }
  147.  
  148.     return(FALSE);
  149. }
  150.