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

  1. /*
  2.     fnrange.c             11/24/86
  3.  
  4.     % range_funcs
  5.  
  6.     Range functions.
  7.     Displays a bar graph in the field dependent on the value in
  8.     the variable.
  9.  
  10.     Note: SED_ABORT will not affect this function.
  11.  
  12.     The field variable should be a int *.
  13.     The int should be between 1 and 10, inclusive.
  14.  
  15.     C-scape 3.2
  16.     Copyright (c) 1986, 1987, 1988 by Oakland Group, Inc.
  17.     ALL RIGHTS RESERVED.
  18.  
  19.     Revision History:
  20.     -----------------
  21.      4/06/88 jmd     added call to sed_DoSpecial
  22.      5/12/88 jmd    added calls to sed_GetScratchPad()
  23.      9/15/88 jmd     removed vid_Cursor calls
  24.      9/17/88 jmd     added std_ funcs
  25.     10/14/88 jdc    added var_size element to field_funcs_struct
  26.  
  27.      6/07/89 jmd    added test for mouse code (later removed)
  28.      3/28/90 jmd    ansi-fied
  29. */
  30.  
  31. #include <stdio.h>
  32. #include <ctype.h>
  33.  
  34. #include "cscape.h"
  35. #include "fnfunc.h"            /* for field functions */
  36. #include "strdecl.h"        /* for C-scape string functions */
  37. #include "ostdlib.h"        /* for int_min */
  38. #include "scancode.h"
  39.  
  40. #define  RANGE_CHAR  '*'
  41.  
  42. OGLOBAL field_funcs_struct range_funcs = {
  43.     stdNoCur_fenter,
  44.     std_fexit,
  45.     range_fkey,
  46.     range_senter,
  47.     FNULL,
  48.     sizeof(int)
  49. };
  50.  
  51. void range_fkey(sed_type sed)
  52. {
  53.     int     scancode, key;
  54.  
  55.     scancode = kb_Read();
  56.  
  57.     if (sed_DoSpecial(sed, scancode))
  58.         return;
  59.     if (special_key(sed, scancode))
  60.         return;
  61.     if (inter_field(sed, scancode))
  62.         return;
  63.     if (inter_page(sed, scancode))
  64.         return;
  65.  
  66.     switch(scancode) {
  67.     case LEFT:
  68.         if (*((int *) sed_GetCurrVar(sed)) > 1) {
  69.            (*((int *) sed_GetCurrVar(sed)))--;
  70.             range_senter(sed, sed_GetFieldNo(sed));
  71.             sed_UpdateCurrField(sed);
  72.         }
  73.         break;
  74.     case RIGHT:
  75.         if (*((int *) sed_GetCurrVar(sed)) < 10) {
  76.            (*((int *) sed_GetCurrVar(sed)))++;
  77.             range_senter(sed, sed_GetFieldNo(sed));
  78.             sed_UpdateCurrField(sed);
  79.         }
  80.         break;
  81.     default:
  82.         key = ascii(scancode);
  83.         if (isdigit(key)) {
  84.             if (key == '0') {
  85.                 *((int *) sed_GetCurrVar(sed)) = 10;
  86.             }
  87.             else {
  88.                 *((int *) sed_GetCurrVar(sed)) = key - '0';
  89.             }
  90.             range_senter(sed, sed_GetFieldNo(sed));
  91.             sed_UpdateCurrField(sed);
  92.         }
  93.         break;
  94.     }
  95.  
  96.     /* reset baton */
  97.     sed_SetBaton(sed, -1);
  98. }
  99.  
  100. void range_senter(sed_type sed, int fieldno)
  101. /*
  102.     Convert native int type to bar graph string for record.
  103. */
  104. {
  105.     int  val;
  106.  
  107.     val = int_min( *((int *) sed_GetVar(sed, fieldno)),
  108.         sed_GetRecordLen(sed, fieldno));
  109.  
  110.     strfill(sed_GetScratchPad(sed), RANGE_CHAR, val);
  111.     sed_SetRecord(sed, sed_GetScratchPad(sed), fieldno);
  112. }
  113.  
  114.  
  115.  
  116.  
  117.