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

  1. /*
  2.     fnsint.c  5/2/87
  3.  
  4.     % sint_funcs
  5.  
  6.     Integer editing functions.
  7.     These funcs edit ints in a string_like fashion.
  8.     The field variable should be a int *.
  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.      9/15/88 jmd     removed vid_Cursor calls
  19.      9/17/88 jmd    added global error msg strings for easy changing
  20.      9/17/88 jmd     added std_ funcs
  21.     10/06/88 jmd    added stdBigCur_fenter
  22.     10/09/88 jmd     added SED_ABORT support
  23.     10/14/88 jdc    added var_size element to field_funcs_struct
  24.  
  25.      6/03/89 jmd    added strclip to senter func
  26.      6/07/89 jmd    added test for mouse code (later removed)
  27.      8/07/89 jmd    now uses int fexit
  28.     10/17/89 jdc    fixed filter (no extended ascii)
  29.      3/28/90 jmd    ansi-fied
  30. */
  31.  
  32. #include <stdio.h>
  33. #include <ctype.h>
  34. #include <string.h>
  35.  
  36. #include "cscape.h"
  37. #include "ostdlib.h"        /* for atoi() */
  38.  
  39. #include "fnfunc.h"            /* for field functions */
  40. #include "strdecl.h"        /* for C-scape string functions */
  41. #include "scancode.h"
  42.  
  43. OSTATIC sfilter_func (sint_filter);
  44.  
  45. OGLOBAL field_funcs_struct sint_funcs = {
  46.     stdBigCur_fenter,
  47.     int_fexit,
  48.     sint_fkey,
  49.     sint_senter,
  50.     sint_sexit,
  51.     sizeof(int)
  52. };
  53.  
  54. void sint_fkey(sed_type sed)
  55. /*
  56.     Hands its work to StrCommon_fkey (fnstrcom.c)
  57.     Passes a filter function (below) to decide which
  58.     characters can be typed in.
  59. */
  60. {
  61.     StrCommon_fkey(sed, sint_filter);
  62. }
  63.  
  64. static boolean sint_filter(int key)
  65. /*
  66.     Filter function for sint_funcs
  67.     for use with StrCommon_fkey
  68. */
  69. {
  70.     return(isprint(key) && (isdigit(key) || key == '-'));
  71. }
  72.  
  73. void sint_senter(sed_type sed, int fieldno)
  74. /*
  75.     Convert the native int into the record string.
  76. */
  77. {
  78.     sprintf(sed_GetScratchPad(sed), "%d", *((int *) sed_GetVar(sed, fieldno)));
  79.     strleft(sed_GetScratchPad(sed), sed_GetRecordLen(sed, fieldno));
  80.     strclip(sed_GetScratchPad(sed));
  81.     sed_SetRecord(sed, sed_GetScratchPad(sed), fieldno);
  82.  
  83.     std_senter(sed, fieldno);
  84. }
  85.  
  86. void sint_sexit(sed_type sed, int fieldno)
  87. /*
  88.     Convert the record string back into the native int.
  89.     Remove commas from string first.
  90. */
  91. {
  92.     if (sed_GetBaton(sed) != SED_ABORT) {
  93.         strcpy(sed_GetScratchPad(sed), sed_GetRecord(sed, fieldno));
  94.         strnocomma(sed_GetScratchPad(sed));
  95.         *((int *) sed_GetVar(sed, fieldno)) = atoi(sed_GetScratchPad(sed));
  96.     }
  97. }
  98.  
  99.