home *** CD-ROM | disk | FTP | other *** search
- /*
- fnmsys.c
-
- % msys_funcs
-
- like slug_funcs, but bobs are painted in their natural positions
-
- C-scape 3.1
- Copyright (c) 1988-1989, by Oakland Group, Inc.
- ALL RIGHTS RESERVED.
-
- Revision History:
- -----------------
- */
-
- #include <stdio.h>
- #include <ctype.h>
-
- #include "cscape.h"
- #include "scancode.h"
- #include "oaktag.h" /* For IDs in msys.h */
- #include "msys.h"
- #include "helpdecl.h"
-
- void msys_fkey(_arg1(sed_type));
-
- OGLOBAL field_funcs_struct msys_funcs = {
- std_fenter,
- std_fexit,
- msys_fkey,
- FNULL,
- FNULL
- };
-
- void msys_fkey(sed)
- sed_type sed;
- /*
- ENTER calls next bob, current level is left on-screen.
- ESC moves up one level.
- */
- {
- int scancode, letter, choice, ret;
-
- scancode = kb_Read();
-
- if (sed_DoSpecial(sed, scancode))
- return;
- if (special_key(sed, scancode))
- return;
-
- switch(scancode) {
-
- case ESC:
- sed_SetBaton(sed, 0);
- sed_ToggleExit(sed);
- return;
- case ENTER:
- break;
- case DOWN:
- case RIGHT:
- if ( sed_IncField(sed) == SED_STUCK ) {
- sed_GotoFirstField(sed);
- }
- return;
- case UP:
- case LEFT:
- if ( sed_DecField(sed) == SED_STUCK ) {
- sed_GotoLastField(sed);
- }
- return;
- case HOME:
- sed_GotoFirstField(sed);
- return;
- case END:
- sed_GotoLastField(sed);
- return;
- case PGUP:
- sed_PageUp(sed);
- return;
- case PGDN:
- sed_PageDown(sed);
- return;
- default:
- /* do first letter search */
- letter = ascii(scancode);
- if ( isprint(letter) &&
- (choice = sed_SearchMerge(sed, (char)letter)) != -1 ) {
-
- sed_GotoField(sed, choice);
- break;
- }
- return;
- }
- msys_RepaintBob(sed, -1, -1);
- ret = msys_GoBob(sed, -1, -1);
- msys_PopBob(sed);
-
- if ( ret != 0 ) {
- sed_ToggleExit(sed);
- sed_SetBaton(sed, ret);
- }
- }
-