home *** CD-ROM | disk | FTP | other *** search
- /*
- spcsled.c
-
- % spc_Sled
-
- C-scape 3.1
- Copyright (c) 1988, by Oakland Group, Inc.
- ALL RIGHTS RESERVED.
-
- Revision History:
- -----------------
- 10/14/88 jdc created
-
- 2/12/89 jmd Put sed_GoHome after DoFenter
- 3/24/89 jmd added sed_ macros
- 7/17/89 gam took wraparound out of TAB and SHFT_TAB
- 7/31/89 gam removed obsolete code from DOWN case
- 8/04/89 gam changed name of sledwin.h to sled.h
- 8/12/89 jmd removed call to sed_GetBob
- 9/08/89 gam added sed_GoHome calls to fix vanishing field problem
- 9/08/89 gam now returns proper value when not a bob
- */
-
- #include <stdio.h>
-
- #include "cscape.h"
- #include "sled.h"
- #include "scancode.h"
-
- boolean spc_Sled(sed, scancode)
- sed_type sed;
- int scancode;
- /*
- the sed passed in here is the sled's sed.
-
- effects: Handles movement between fields.
- ESC sets baton to 0, exits
- ENTER goes to next field if possible
- else sets baton to BOB_DOWN, exits
- UP goes to the above field,
- DOWN goes to the below field,
- TAB goes to the right field,
- SHFT_TAB goes to the left field,
- PGUP,
- PGDN,
- GREYPLUS inserts a row,
- GREYMINUS deletes a row,
-
- returns: the value of spc_subshft()
- (TRUE if intercepted a key, FALSE otherwise)
- */
- {
- int fld;
-
- switch (scancode) {
- case ESC:
- if ((bob_GetOwner(sed_GetBob(sed), &fld)) == NULL) {
- sed_SetBaton(sed, 0);
- }
- else {
- sed_SetBaton(sed, BOB_QUIT);
- }
- sed_ToggleExit(sed);
- return(TRUE);
-
- case TAB:
- case ENTER:
- if (sed_RightField(sed) != SED_STUCK) {
- return(TRUE);
- }
-
- /* If enter, wrap to start of next line. */
- if (scancode == ENTER) {
- sed_GotoGridField(sed, sed_GetGridRow(sed, sed_GetFieldNo(sed)), 0);
- }
-
- /* no break; fall through to DOWN case */
-
- case DOWN:
- sed_GoHome(sed);
- if (sed_DownField(sed) != SED_STUCK) {
- ;
- }
- else if (sled_Remap(sed, 1)) {
- /* the field should appear to be newly entered */
- sed_GoHome(sed);
- sed_DoFieldFenter(sed, sed_GetFieldNo(sed));
- }
- else if (bob_GetOwner(sed, &fld) != NULL) {
- sed_SetBaton(sed, BOB_DOWN);
- sed_ToggleExit(sed);
- }
- return(TRUE);
-
- case SHFT_TAB:
- if (sed_LeftField(sed) != SED_STUCK) {
- return(TRUE);
- }
-
- /* no break; fall through to UP case */
-
- case UP:
- sed_GoHome(sed);
- if (sed_UpField(sed) != SED_STUCK) {
- ;
- }
- else if (sled_Remap(sed, -1)) {
- /* the field should appear to be newly entered */
- sed_GoHome(sed);
- sed_DoFieldFenter(sed, sed_GetFieldNo(sed));
- }
- else if (bob_GetOwner(sed, &fld) != NULL) {
- sed_SetBaton(sed, BOB_UP);
- sed_ToggleExit(sed);
- }
- return(TRUE);
-
- case PGUP:
- if (sled_Remap(sed, -sled_GetHeight(sed))) {
- /* the field should appear to be newly entered */
- sed_GoHome(sed);
- sed_DoFieldFenter(sed, sed_GetFieldNo(sed));
- }
- return(TRUE);
-
- case PGDN:
- if (sled_Remap(sed, sled_GetHeight(sed))) {
- /* the field should appear to be newly entered */
- sed_GoHome(sed);
- sed_DoFieldFenter(sed, sed_GetFieldNo(sed));
- }
- return(TRUE);
-
- case GREYPLUS:
- sled_InsertRows(sed, sled_GetRow(sed), 1);
- sled_Repaint(sed);
- return(TRUE);
-
- case GREYMINUS:
- sled_DeleteRows(sed, sled_GetRow(sed), 1);
- sled_Repaint(sed);
- return(TRUE);
-
- default:
- break;
- }
-
- return(FALSE);
- }
-