home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c185 / 1.ddi / FUNCS.EXE / CSCAPE / SOURCE / FNCHAR.C < prev    next >
Encoding:
C/C++ Source or Header  |  1989-09-07  |  2.1 KB  |  110 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.1
  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. */
  25.  
  26. #include <stdio.h>
  27. #include <ctype.h>
  28.  
  29. #include "cscape.h"
  30. #include "fnfunc.h"
  31. #include "scancode.h"
  32.  
  33. OGLOBAL field_funcs_struct char_funcs = {
  34.     std_fenter,
  35.     char_fexit,
  36.     char_fkey,
  37.     char_senter,
  38.     char_sexit,
  39.     sizeof(char)
  40. };
  41.  
  42. boolean char_fexit(sed)
  43.     sed_type sed;
  44. {
  45.     if (sed_GetBaton(sed) != SED_ABORT) {
  46.         char_sexit(sed, sed_GetFieldNo(sed));
  47.         char_senter(sed, sed_GetFieldNo(sed));
  48.     }
  49.  
  50.     return(std_fexit(sed));
  51. }
  52.  
  53. void char_fkey(sed)
  54.     sed_type sed;
  55. {
  56.     int     scancode, key;
  57.  
  58.     scancode = kb_Read();
  59.  
  60.     if (sed_DoSpecial(sed, scancode))
  61.         return;
  62.     if (special_key(sed, scancode))
  63.         return;
  64.     if (inter_field(sed, scancode))
  65.         return;
  66.     if (inter_page(sed, scancode))
  67.         return;
  68.  
  69.     switch(scancode) {
  70.     case BACKSPACE:
  71.     case DEL:
  72.         sed_Overwrite(sed, ' ');
  73.         break;
  74.     default:
  75.         key = ascii(scancode);
  76.         if (isprint(key)) {
  77.             sed_Overwrite(sed, key);
  78.         }
  79.         break;
  80.     }
  81.  
  82.     /* reset baton */
  83.     sed_SetBaton(sed, -1);
  84. }
  85.  
  86. void char_senter(sed, fieldno)
  87.     sed_type sed;
  88.     int fieldno;
  89. /*
  90.     Convert native type to string for record.
  91. */
  92. {
  93.     sprintf(sed_GetScratchPad(sed), "%c", *((char *) sed_GetVar(sed, fieldno)));
  94.     sed_SetRecord(sed, sed_GetScratchPad(sed), fieldno);
  95.  
  96.     std_senter(sed, fieldno);
  97. }
  98.  
  99. void char_sexit(sed, fieldno)
  100.     sed_type sed;
  101.     int fieldno;
  102. /*
  103.     Converts record back to native type.
  104. */
  105. {
  106.     if (sed_GetBaton(sed) != SED_ABORT) {
  107.         sscanf(sed_GetRecord(sed, fieldno), "%c", sed_GetVar(sed, fieldno));
  108.     }
  109. }
  110.