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

  1. /*
  2.     fnmsys.c
  3.  
  4.     % msys_funcs
  5.  
  6.     like slug_funcs, but bobs are painted in their natural positions
  7.  
  8.     C-scape 3.1
  9.     Copyright (c) 1988-1989, by Oakland Group, Inc.
  10.     ALL RIGHTS RESERVED.
  11.  
  12.     Revision History:
  13.     -----------------
  14. */
  15.  
  16. #include <stdio.h>
  17. #include <ctype.h>
  18.  
  19. #include "cscape.h"
  20. #include "scancode.h"
  21. #include "oaktag.h"                /* For IDs in msys.h */
  22. #include "msys.h"
  23. #include "helpdecl.h"
  24.  
  25. void    msys_fkey(_arg1(sed_type));
  26.  
  27. OGLOBAL field_funcs_struct msys_funcs = {
  28.     std_fenter,
  29.     std_fexit,
  30.     msys_fkey,
  31.     FNULL,
  32.     FNULL
  33. };
  34.  
  35. void msys_fkey(sed)
  36.     sed_type sed;
  37. /*
  38.     ENTER calls next bob, current level is left on-screen.
  39.     ESC moves up one level.
  40. */
  41. {
  42.     int scancode, letter, choice, ret;
  43.  
  44.     scancode = kb_Read();
  45.  
  46.     if (sed_DoSpecial(sed, scancode))
  47.         return;
  48.     if (special_key(sed, scancode))
  49.         return;
  50.  
  51.     switch(scancode) {
  52.  
  53.     case ESC:
  54.         sed_SetBaton(sed, 0);
  55.         sed_ToggleExit(sed);
  56.         return;
  57.     case ENTER:
  58.         break;
  59.     case DOWN:
  60.     case RIGHT:
  61.         if ( sed_IncField(sed) == SED_STUCK ) {
  62.             sed_GotoFirstField(sed);
  63.         }
  64.         return;
  65.     case UP:
  66.     case LEFT:
  67.         if ( sed_DecField(sed) == SED_STUCK ) {
  68.             sed_GotoLastField(sed);
  69.         }
  70.         return;
  71.     case HOME:
  72.         sed_GotoFirstField(sed);
  73.         return;
  74.     case END:
  75.         sed_GotoLastField(sed);
  76.         return;
  77.      case PGUP:
  78.         sed_PageUp(sed);
  79.         return;
  80.     case PGDN:
  81.         sed_PageDown(sed);
  82.         return;
  83.     default:
  84.         /* do first letter search */
  85.         letter = ascii(scancode);
  86.         if ( isprint(letter) && 
  87.             (choice = sed_SearchMerge(sed, (char)letter)) != -1 ) {
  88.  
  89.             sed_GotoField(sed, choice);
  90.             break;
  91.         }
  92.         return;
  93.     }
  94.     msys_RepaintBob(sed, -1, -1);
  95.     ret = msys_GoBob(sed, -1, -1);
  96.     msys_PopBob(sed);
  97.  
  98.     if ( ret != 0 ) {
  99.         sed_ToggleExit(sed);
  100.         sed_SetBaton(sed, ret);
  101.     }
  102. }
  103.