home *** CD-ROM | disk | FTP | other *** search
/ QBasic & Borland Pascal & C / Delphi5.iso / C / Samples / CSAPE32.ARJ / SOURCE / FUNCS / FNSTRING.C < prev    next >
C/C++ Source or Header  |  1990-09-11  |  2KB  |  108 lines

  1. /*
  2.     fnstring.c  10/27/86
  3.  
  4.     % string_funcs
  5.  
  6.     String editing functions.
  7.     Supports insert mode (with big cursor).
  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.      6/23/88 jmd     added casting to char * in senter
  18.      9/15/88 jmd     removed vid_Cursor calls
  19.      9/17/88 jmd     added validation
  20.      9/17/88 jmd    added global error msg strings for easy changing
  21.      9/17/88 jmd     added std_ funcs
  22.     10/09/88 jmd     added SED_ABORT support
  23.     10/12/88 jmd     added SED_FIRST support
  24.     10/14/88 jdc    added var_size element to field_funcs_struct
  25.  
  26.      6/07/89 jmd    added test for mouse code (later removed)
  27.  
  28.      1/25/90 jmd    converted kb_Check to kb_CheckWait
  29.      3/14/90 jmd    moved formatting before validation
  30.      3/16/90 jmd    added support for KEY_INVALID in fexit
  31.      3/28/90 jmd    ansi-fied
  32.      9/11/90 pmcm    changed sed_SetMouseCode to kb_Stuff
  33. */
  34.  
  35. #include <stdio.h>
  36. #include <string.h>
  37. #include <ctype.h>
  38.  
  39. #include "cscape.h"
  40. #include "fnfunc.h"            /* for field functions */
  41. #include "scancode.h"
  42.  
  43. OSTATIC sfilter_func (string_filter);
  44.  
  45. OGLOBAL field_funcs_struct string_funcs = {
  46.     stdBigCur_fenter,
  47.     string_fexit,
  48.     string_fkey,
  49.     string_senter,
  50.     string_sexit,
  51.     VAR_STRING
  52. };
  53.  
  54. boolean string_fexit(sed_type sed)
  55. {
  56.     if (sed_GetBaton(sed) != SED_ABORT) {
  57.  
  58.         /* format the field's record */
  59.         std_format(sed);
  60.  
  61.         if (!valid_String(sed_GetCurrRecord(sed), (char *) sed_GetCurrFieldData(sed, 1)) ) {
  62.             kb_Stuff(KEY_INVALID);
  63.             return(FALSE);
  64.         }
  65.     }
  66.  
  67.     return(std_fexit(sed));
  68. }
  69.  
  70. void string_fkey(sed_type sed)
  71. /*
  72.     Hands its work to StrCommon_fkey (fnstrcom.c)
  73.     Passes a filter function (below) to decide which
  74.     characters can be typed in.
  75. */
  76. {
  77.     StrCommon_fkey(sed, string_filter);
  78. }
  79.  
  80. static boolean string_filter(int key)
  81. /*
  82.     Filter function for string_funcs
  83.     for use with StrCommon_fkey
  84. */
  85. {
  86.     return(isprint(key));
  87. }
  88.  
  89. void string_senter(sed_type sed, int fieldno)
  90. /*
  91.     Copy the native string into the record string.
  92. */
  93. {
  94.     sed_SetRecord(sed, (char *) sed_GetVar(sed, fieldno), fieldno);
  95.  
  96.     std_senter(sed, fieldno);
  97. }
  98.  
  99. void string_sexit(sed_type sed, int fieldno)
  100. /*
  101.     Copy the record string back into the native string.
  102. */
  103. {
  104.     if (sed_GetBaton(sed) != SED_ABORT) {
  105.         strcpy((char *) sed_GetVar(sed, fieldno), sed_GetRecord(sed, fieldno));
  106.     }
  107. }
  108.