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

  1. /*
  2.     fnslug.c
  3.  
  4.     % slug_funcs
  5.  
  6.     C-scape 3.1
  7.     Copyright (c) 1988-1989, by Oakland Group, Inc.
  8.     ALL RIGHTS RESERVED.
  9.  
  10.     Revision History:
  11.     -----------------
  12.      8/30/88 jdc    created
  13.      5/24/89 jdc    added sed_DoSpecial and special_key
  14.      8/30/89 gam    added check for MENU_VERTICAL before sed_Pop (again)
  15. */
  16.  
  17. #include <stdio.h>
  18. #include <ctype.h>
  19.  
  20. #include "cscape.h"
  21. #include "scancode.h"
  22. #include "oaktag.h"                /* For IDs in msys.h */
  23. #include "msys.h"
  24. #include "helpdecl.h"
  25.  
  26. void slug_fkey(_arg1(sed_type));
  27.  
  28. OGLOBAL field_funcs_struct slug_funcs = {
  29.     std_fenter,
  30.     std_fexit,
  31.     slug_fkey,
  32.     FNULL,
  33.     FNULL
  34. };
  35.  
  36. void slug_fkey(sed)
  37.     sed_type sed;
  38. /*
  39.     modifies:   sed.
  40.  
  41.     effects:    Standard menu functions.
  42.                 Up and down keys change choices.
  43.                 Baton contains field number + 1 when ENTER is pressed
  44.                 or 0 if ESC pressed.
  45. */
  46. {
  47.     int scancode, letter, choice, ret;
  48.     int row, col;
  49.  
  50.     scancode = kb_Read();
  51.  
  52.     if (sed_DoSpecial(sed, scancode))
  53.         return;
  54.     if (special_key(sed, scancode))
  55.         return;
  56.  
  57.     switch(scancode) {
  58.  
  59.     case ESC:
  60.         sed_SetBaton(sed, 0);
  61.         sed_ToggleExit(sed);
  62.         return;
  63.     case ENTER:
  64.         break;
  65.     case DOWN:
  66.     case RIGHT:
  67.         if (sed_IncField(sed) == SED_STUCK) {
  68.             sed_GotoFirstField(sed);
  69.         }
  70.         return;
  71.     case UP:
  72.     case LEFT:
  73.         if (sed_DecField(sed) == SED_STUCK) {
  74.             sed_GotoLastField(sed);
  75.         }
  76.         return;
  77.     case HOME:
  78.         sed_GotoFirstField(sed);
  79.         return;
  80.     case END:
  81.         sed_GotoLastField(sed);
  82.         return;
  83.      case PGUP:
  84.         sed_PageUp(sed);
  85.         return;
  86.     case PGDN:
  87.         sed_PageDown(sed);
  88.         return;
  89.     default:
  90.         /* do first letter search */
  91.         letter = ascii(scancode);
  92.         if (isprint(letter) && 
  93.             (choice = sed_SearchMerge(sed, (char)letter)) != -1) {
  94.  
  95.             sed_GotoField(sed, choice);
  96.             break;
  97.         }
  98.         return;
  99.     }
  100.     sed_GetPosition(sed, &row, &col);
  101.     if ( msys_dir(sed) == MENU_VERTICAL ) {
  102.         sed_Pop(sed);
  103.     }
  104.  
  105.     msys_RepaintBob(sed, row, col);
  106.     ret = msys_GoBob(sed, -1, -1);
  107.     msys_PopBob(sed);
  108.  
  109.     if (ret == 0) {
  110.         sed_Repaint(sed);
  111.     }
  112.     else {
  113.         sed_ToggleExit(sed);
  114.         sed_SetBaton(sed, ret);
  115.     }
  116. }
  117.