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

  1. /*
  2.     fnstrcom.c
  3.  
  4.     -jmd 8/07/89
  5.  
  6.     % StrCommon_fkey
  7.  
  8.     Common routines used by string editing field functions
  9.  
  10.     C-scape 3.1
  11.     Copyright (c) 1986-1989 by Oakland Group, Inc.
  12.     ALL RIGHTS RESERVED.
  13.  
  14.     Revision History:
  15.     -----------------
  16. */
  17.  
  18. #include <stdio.h>
  19. #include <string.h>
  20. #include <ctype.h>
  21.  
  22. #include "cscape.h"
  23. #include "fnfunc.h"
  24. #include "scancode.h"
  25.  
  26. void StrCommon_fkey(sed, filter)
  27.     sed_type sed;
  28.     boolean (*filter)(_arg1(int));
  29. /*
  30.     fkey function for various string field functions.
  31.     Uses the 'filter' function to test characters
  32.     as they are typed in.  if 'filter' returns TRUE
  33.     the character is accepted.
  34. */
  35. {
  36.     int     scancode, key;
  37.  
  38.     scancode = kb_Read();
  39.  
  40.     if (sed_DoSpecial(sed, scancode))
  41.         return;
  42.     if (special_key(sed, scancode))
  43.         return;
  44.     if (inter_field(sed, scancode))
  45.         return;
  46.     if (inter_page(sed, scancode))
  47.         return;
  48.  
  49.     switch(scancode) {
  50.     case RIGHT:
  51.         sed_IncChar(sed);
  52.         break;
  53.     case LEFT:
  54.         sed_DecChar(sed);
  55.         break;
  56.     case HOME:
  57.         sed_GoHome(sed);
  58.         break;
  59.     case END:
  60.         sed_GoEnd(sed);
  61.         break;
  62.     case INS:
  63.         if (kb_Insert()) {
  64.             sed_SetCursorType(sed, CURSOR_HALF);
  65.         }
  66.         else {
  67.             sed_SetCursorType(sed, CURSOR_NORMAL);
  68.         }
  69.         break;
  70.     case BACKSPACE:
  71.         if (sed_DecChar(sed)) {
  72.             sed_PullRight(sed);
  73.         }
  74.         break;
  75.     case DEL:
  76.         sed_PullRight(sed);
  77.         break;
  78.     default:
  79.         key = ascii(scancode);
  80.  
  81.         if ((*filter)(key)) {
  82.             if (sed_GetBaton(sed) == SED_FIRST) {
  83.                 /* clear record on first keystroke */
  84.                 sed_SetCurrRecord(sed, "");
  85.                 sed_UpdateCurrField(sed);
  86.             }
  87.  
  88.             if (kb_Insert()) {
  89.                 sed_PushRight(sed, key);
  90.             }
  91.             else {
  92.                 sed_Overwrite(sed, key);
  93.             }
  94.  
  95.             sed_IncChar(sed);
  96.         }
  97.         break;
  98.     }
  99.  
  100.     /* reset baton */
  101.     sed_SetBaton(sed, -1);
  102. }
  103.