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

  1. /*
  2.     fnlong.c       10/30/86
  3.  
  4.     % long_funcs
  5.  
  6.     Long editing functions.
  7.     Variable should be a long*.
  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.     10/01/87 jmd     added casting
  16.      5/12/88 jmd    added calls to sed_GetScratchPad()
  17.      9/17/88 jmd    added global error msg strings for easy changing
  18.      9/17/88 jmd     added std_ funcs
  19.     10/09/88 jmd     added SED_ABORT support
  20.     10/14/88 jdc    added var_size element to field_funcs_struct
  21.      1/22/90 pmcm    stripped comma's for sscanf in _fexit and _sexit
  22.      2/03/90 jmd    added #include
  23.      3/14/90 jmd    moved formatting before validation
  24.      3/28/90 jmd    ansi-fied
  25.      4/12/90 pmcm     added valid_Range check for over/underflow in fexit
  26.      4/13/90 jmd    added olimits.h
  27.      9/11/90 pmcm    changed sed_SetMouseCode to kb_Stuff
  28. */
  29.  
  30. #include <stdio.h>
  31. #include <ctype.h>
  32. #include <string.h>
  33.  
  34. #include "cscape.h"
  35. #include "fnfunc.h"            /* for field functions */
  36. #include "strdecl.h"        /* for C-scape string functions */
  37. #include "scancode.h"
  38. #include "olimits.h"
  39.  
  40. OGLOBAL field_funcs_struct long_funcs = {
  41.     num_fenter,
  42.     long_fexit,
  43.     num_fkey,
  44.     long_senter,
  45.     long_sexit,
  46.     sizeof(long)
  47. };
  48.  
  49. boolean long_fexit(sed_type sed)
  50. /*
  51.     Validates a long using the string in field data 1.
  52. */
  53. {
  54.     long val;
  55.  
  56.     if (sed_GetBaton(sed) != SED_ABORT) {
  57.  
  58.         /* test for overflow/underflow */
  59.  
  60.         if (!valid_Range(sed, (long)LONG_MIN, (long)LONG_MAX)) {
  61.              kb_Stuff(KEY_INVALID);
  62.             return(FALSE);
  63.         }
  64.  
  65.         /* format the field's record */
  66.         std_format(sed);
  67.  
  68.         /* strip commas for sscanf */
  69.         strcpy(sed_GetScratchPad(sed), sed_GetCurrRecord(sed));
  70.         sscanf(strnocomma(sed_GetScratchPad(sed)), "%ld", &val);
  71.  
  72.         /* call standard numeric validation routine (fnstdval.c) */
  73.         if (!std_NumValid(sed, (double) val)) {
  74.             return(FALSE);
  75.         }
  76.     }
  77.  
  78.     return(std_fexit(sed));
  79. }
  80.  
  81. void long_senter(sed_type sed, int fieldno)
  82. /*
  83.     Convert native type to string for record.
  84. */
  85. {
  86.     sprintf(sed_GetScratchPad(sed), "%ld", *((long *) sed_GetVar(sed, fieldno)));
  87.  
  88.     strright(sed_GetScratchPad(sed), sed_GetRecordLen(sed, fieldno));
  89.     sed_SetRecord(sed, sed_GetScratchPad(sed), fieldno);
  90.  
  91.     std_senter(sed, fieldno);
  92. }
  93.  
  94. void long_sexit(sed_type sed, int fieldno)
  95. /*
  96.     Converts record back to native type.
  97. */
  98. {
  99.     if (sed_GetBaton(sed) != SED_ABORT) {
  100.         strcpy(sed_GetScratchPad(sed), sed_GetRecord(sed, fieldno));
  101.         sscanf(strnocomma(sed_GetScratchPad(sed)), "%ld", (long *) sed_GetVar(sed, fieldno));
  102.     }
  103. }
  104.