home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / Samples / CSAPE32.ARJ / SOURCE / CSSRC / FNCHAR.C < prev    next >
C/C++ Source or Header  |  1990-03-28  |  2KB  |  96 lines

  1. /*
  2.     fnchar.c  10/27/86
  3.  
  4.     % char_funcs
  5.  
  6.     Character editing functions.
  7.     Assumes the field has one position.
  8.     The field variable should be a char.
  9.  
  10.     C-scape 3.2
  11.     Copyright (c) 1986, 1987, 1988 by Oakland Group, Inc.
  12.     ALL RIGHTS RESERVED.
  13.  
  14.     Revision History:
  15.     -----------------
  16.      4/06/88 jmd     added call to sed_DoSpecial
  17.      5/12/88 jmd    added calls to sed_GetScratchPad()
  18.      6/23/88 jmd     added casting to char * in senter
  19.      9/17/88 jmd     added std_ funcs
  20.     10/09/88 jmd     added SED_ABORT support
  21.     10/14/88 jdc    added var_size element to field_funcs_struct
  22.  
  23.      6/07/89 jmd    added test for mouse code (later removed)
  24.     11/12/89 jdc   changed char_fexit to string_fexit    
  25.      3/28/90 jmd    ansi-fied
  26. */
  27.  
  28. #include <stdio.h>
  29. #include <ctype.h>
  30.  
  31. #include "cscape.h"
  32. #include "fnfunc.h"
  33. #include "scancode.h"
  34.  
  35. OGLOBAL field_funcs_struct char_funcs = {
  36.     std_fenter,
  37.     string_fexit,
  38.     char_fkey,
  39.     char_senter,
  40.     char_sexit,
  41.     sizeof(char)
  42. };
  43.  
  44. void char_fkey(sed_type sed)
  45. {
  46.     int     scancode, key;
  47.  
  48.     scancode = kb_Read();
  49.  
  50.     if (sed_DoSpecial(sed, scancode))
  51.         return;
  52.     if (special_key(sed, scancode))
  53.         return;
  54.     if (inter_field(sed, scancode))
  55.         return;
  56.     if (inter_page(sed, scancode))
  57.         return;
  58.  
  59.     switch(scancode) {
  60.     case BACKSPACE:
  61.     case DEL:
  62.         sed_Overwrite(sed, ' ');
  63.         break;
  64.     default:
  65.         key = ascii(scancode);
  66.         if (isprint(key)) {
  67.             sed_Overwrite(sed, key);
  68.         }
  69.         break;
  70.     }
  71.  
  72.     /* reset baton */
  73.     sed_SetBaton(sed, -1);
  74. }
  75.  
  76. void char_senter(sed_type sed, int fieldno)
  77. /*
  78.     Convert native type to string for record.
  79. */
  80. {
  81.     sprintf(sed_GetScratchPad(sed), "%c", *((char *) sed_GetVar(sed, fieldno)));
  82.     sed_SetRecord(sed, sed_GetScratchPad(sed), fieldno);
  83.  
  84.     std_senter(sed, fieldno);
  85. }
  86.  
  87. void char_sexit(sed_type sed, int fieldno)
  88. /*
  89.     Converts record back to native type.
  90. */
  91. {
  92.     if (sed_GetBaton(sed) != SED_ABORT) {
  93.         sscanf(sed_GetRecord(sed, fieldno), "%c", sed_GetVar(sed, fieldno));
  94.     }
  95. }
  96.