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

  1. /*
  2.     fnyesno.c      10/27/86
  3.  
  4.     % yesno_funcs
  5.  
  6.     Yes or No functions.
  7.     A boolean field that contains either Yes or No:
  8.  
  9.     If the boolean is TRUE the field shows "Yes"
  10.     else the field returns "No ".
  11.  
  12.     The strings for 'Yes' and 'No' are grabbed from the ocountry
  13.     struct.  The default values are "Yes" and "No".  You
  14.     can point these to the appropriate strings for other languages.
  15.  
  16.     C-scape 3.2
  17.     Copyright (c) 1986, 1987, 1988 by Oakland Group, Inc.
  18.     ALL RIGHTS RESERVED.
  19.  
  20.     Revision History:
  21.     -----------------
  22.     10/02/87 jmd    Now works with any length record.
  23.      3/09/88 jmd    Added space bar toggle.
  24.      4/06/88 jmd     added call to sed_DoSpecial
  25.      9/15/88 jmd     removed vid_Cursor calls
  26.      9/17/88 jmd     added std_ funcs
  27.     10/09/88 jmd     added SED_ABORT support
  28.     10/14/88 jdc    added var_size element to field_funcs_struct
  29.     12/20/88 jmd    added mouse support
  30.  
  31.      6/01/89 gam    added ocountry stuff
  32.      6/07/89 jmd    added test for mouse code (later removed)
  33.      6/07/89 jmd    added first letter toggle support
  34.     11/04/89 jdc    changed toupper & tolower to otoupper & otolower
  35.      3/28/90 jmd    ansi-fied
  36. */
  37.  
  38. #include <stdio.h>
  39. #include <string.h>
  40. #include <ctype.h>
  41.  
  42. #include "cscape.h"
  43. #include "fnfunc.h"            /* for field functions */
  44. #include "scancode.h"
  45.  
  46. OGLOBAL field_funcs_struct yesno_funcs = { 
  47.     stdNoCur_fenter,
  48.     yesno_fexit,
  49.     yesno_fkey,
  50.     yesno_senter,
  51.     yesno_sexit,
  52.     sizeof(boolean)
  53. };
  54.  
  55. boolean yesno_fexit(sed_type sed)
  56. /*
  57.     Convert user variable to value showing on the screen immediately.
  58. */
  59. {
  60.     if (sed_GetBaton(sed) != SED_ABORT) {
  61.         yesno_sexit(sed, sed_GetFieldNo(sed));
  62.         yesno_senter(sed, sed_GetFieldNo(sed));
  63.         sed_UpdateCurrField(sed);
  64.     }
  65.  
  66.     return(std_fexit(sed));
  67. }
  68.  
  69. void yesno_fkey(sed_type sed)
  70. /*
  71. */
  72. {
  73.     int     scancode, letter;
  74.  
  75.     scancode = kb_Read();
  76.  
  77.     if (sed_DoSpecial(sed, scancode))
  78.         return;
  79.     if (special_key(sed, scancode))
  80.         return;
  81.     if (inter_field(sed, scancode))
  82.         return;
  83.     if (inter_page(sed, scancode))
  84.         return;
  85.  
  86.     letter = otoupper(ascii(scancode));
  87.     if (letter == otoupper(*ocountry.yes_ptr)) {
  88.         sed_SetCurrRecord(sed, ocountry.yes_ptr);
  89.         sed_UpdateCurrField(sed);
  90.     }
  91.     else if (letter == otoupper(*ocountry.no_ptr)) {
  92.         sed_SetCurrRecord(sed, ocountry.no_ptr);
  93.         sed_UpdateCurrField(sed);
  94.     }
  95.     else if (scancode == MOU_CLICK || letter == ' ') {
  96.         if (strncmp(sed_GetCurrRecord(sed), ocountry.yes_ptr, sed_GetCurrRecordLen(sed)) == 0) {
  97.             sed_SetCurrRecord(sed, ocountry.no_ptr);
  98.         }
  99.         else {
  100.             sed_SetCurrRecord(sed, ocountry.yes_ptr);
  101.         }
  102.         sed_UpdateCurrField(sed);
  103.     }
  104.  
  105.     /* reset baton */
  106.     sed_SetBaton(sed, -1);
  107. }
  108.  
  109. void yesno_senter(sed_type sed, int fieldno)
  110. /*
  111.     This function goes from the native boolean to the record string.
  112. */
  113. {
  114.     boolean     yesno;
  115.  
  116.     yesno = (* (boolean *) sed_GetVar(sed, fieldno));
  117.  
  118.     if (yesno) {
  119.         sed_SetRecord(sed, ocountry.yes_ptr, fieldno);
  120.     }
  121.     else {
  122.         sed_SetRecord(sed,  ocountry.no_ptr, fieldno);
  123.     }
  124.  
  125.     std_senter(sed, fieldno);
  126. }
  127.  
  128. void yesno_sexit(sed_type sed, int fieldno)
  129. /*
  130.     Converts the record string into a boolean.
  131. */
  132. {
  133.     if (sed_GetBaton(sed) != SED_ABORT) {
  134.         if (strncmp(sed_GetRecord(sed, fieldno), ocountry.yes_ptr, sed_GetRecordLen(sed, fieldno)) == 0) {
  135.             (* (boolean *) sed_GetVar(sed, fieldno)) = 1;
  136.         }
  137.         else {
  138.             (* (boolean *) sed_GetVar(sed, fieldno)) = 0;
  139.         }
  140.     }
  141. }
  142.