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

  1. /*
  2.     fnint.c             11/20/86
  3.  
  4.     % int_funcs
  5.  
  6.     Integer editing functions.
  7.     The field variable should be a int *.
  8.  
  9.     C-scape 3.2
  10.     Copyright (c) 1986, 1987, 1988 by Oakland Group, Inc.
  11.     ALL RIGHTS RESERVED.
  12.  
  13.     Revision History:
  14.     -----------------
  15.      5/12/88 jmd    added calls to sed_GetScratchPad()
  16.      9/17/88 jmd    added global error msg strings for easy changing
  17.      9/17/88 jmd     added std_ funcs
  18.     10/09/88 jmd     added SED_ABORT support
  19.     10/14/88 jdc    added var_size element to field_funcs_struct
  20.      3/14/90 jmd    moved formatting before validation
  21.      3/28/90 jmd    ansi-fied
  22.      4/12/90 pmcm     added valid_Range check for over/underflow in fexit
  23.      4/13/90 jmd    added olimits.h
  24.      9/11/90 pmcm    changed sed_SetMouseCode to kb_Stuff
  25. */
  26.  
  27. #include <stdio.h>
  28. #include <ctype.h>
  29.  
  30. #include "cscape.h"
  31. #include "fnfunc.h"            /* for field functions */
  32. #include "strdecl.h"        /* for C-scape string functions */
  33. #include "scancode.h"
  34. #include "olimits.h"
  35.  
  36. OGLOBAL field_funcs_struct int_funcs = {
  37.     num_fenter,
  38.     int_fexit,
  39.     num_fkey,
  40.     int_senter,
  41.     int_sexit,
  42.     sizeof(int)
  43. };
  44.  
  45. boolean int_fexit(sed_type sed)
  46. /*
  47.     Validates an integer using the string in field data 1.
  48. */
  49. {
  50.     int val;
  51.  
  52.     if (sed_GetBaton(sed) != SED_ABORT) {
  53.  
  54.         if (!valid_Range(sed, (long)INT_MIN, (long)INT_MAX)) {
  55.              kb_Stuff(KEY_INVALID);
  56.             return(FALSE);
  57.         }
  58.  
  59.         /* format the field's record */
  60.         std_format(sed);
  61.  
  62.         sscanf(sed_GetCurrRecord(sed), "%d", &val);
  63.  
  64.         /* call standard numeric validation routine (fnstdval.c) */
  65.         if (!std_NumValid(sed, (double) val)) {
  66.             return(FALSE);
  67.         }
  68.     }
  69.  
  70.     return(std_fexit(sed));
  71. }
  72.  
  73. void int_senter(sed_type sed, int fieldno)
  74. /*
  75.     Convert native type to string for record.
  76. */
  77. {
  78.     sprintf(sed_GetScratchPad(sed), "%d", *((int *) sed_GetVar(sed, fieldno)));
  79.  
  80.     strright(sed_GetScratchPad(sed), sed_GetRecordLen(sed, fieldno));
  81.     sed_SetRecord(sed, sed_GetScratchPad(sed), fieldno);
  82.  
  83.     std_senter(sed, fieldno);
  84. }
  85.  
  86. void int_sexit(sed_type sed, int fieldno)
  87. /*
  88.     Converts record back to native type.
  89. */
  90. {
  91.     if (sed_GetBaton(sed) != SED_ABORT) {
  92.         sscanf(sed_GetRecord(sed, fieldno), "%d", (int *) sed_GetVar(sed, fieldno));
  93.     }
  94. }
  95.  
  96.  
  97.