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

  1. /*
  2.     fnselect.c         10/15/86
  3.  
  4.     % select_funcs
  5.  
  6.     Selector Functions:
  7.  
  8.     A field has multiple choices.
  9.     The Space bar changes the selection.
  10.     The Variable is the address of select_struct.
  11.     To build a select_struct, use the MACRO select_build().
  12.     select_build takes the name of the struct and the name of a list
  13.     of choices.
  14.     The choices are in the order that they will be displayed.
  15.     The last choice must be NULL.
  16.  
  17.     Note: SED_ABORT will not affect this routine.
  18.  
  19.     The select_struct has a member (number) which is the number of the item
  20.     in the list currently selected.
  21.  
  22.     To get the number of the choice made use the MACRO select_number().
  23.     To get the text of the choice made use the MACRO select_choice().
  24.  
  25.     The cursor is turned off.
  26.  
  27.     C-scape 3.2
  28.     Copyright (c) 1986, 1987, 1988 by Oakland Group, Inc.
  29.     ALL RIGHTS RESERVED.
  30.  
  31.     Revision History:
  32.     -----------------
  33.     11/19/86 jmd    Got rid of structure. (later put back)
  34.      4/06/88 jmd     added call to sed_DoSpecial
  35.      5/12/88 jmd    added calls to sed_GetScratchPad()
  36.      9/15/88 jmd     removed vid_Cursor calls
  37.      9/17/88 jmd     added std_ funcs
  38.     10/14/88 jdc    added var_size element to field_funcs_struct
  39.  
  40.      6/07/89 jmd    added test for mouse code (later removed)
  41.      3/28/90 jmd    ansi-fied
  42. */
  43.  
  44. #include <stdio.h>
  45. #include <string.h>
  46. #include <ctype.h>
  47.  
  48. #include "cscape.h"
  49. #include "fnfunc.h"            /* for field functions */
  50. #include "strdecl.h"        /* for C-scape string functions */
  51. #include "scancode.h"
  52.  
  53. OGLOBAL field_funcs_struct select_funcs = {
  54.     stdNoCur_fenter,
  55.     std_fexit,
  56.     select_fkey,
  57.     select_senter,
  58.     FNULL,
  59.     VAR_INVALID
  60. };
  61.  
  62. void select_fkey(sed_type sed)
  63. /*
  64.     Cycle through list of changes when the SPACE bar is pressed.
  65. */
  66. {
  67.     int     scancode;
  68.     struct  select_struct *select;
  69.  
  70.     select = (struct select_struct *) sed_GetCurrVar(sed);
  71.  
  72.     scancode = kb_Read();
  73.  
  74.     if (sed_DoSpecial(sed, scancode))
  75.         return;
  76.     if (special_key(sed, scancode))
  77.         return;
  78.     if (inter_field(sed, scancode))
  79.         return;
  80.     if (inter_page(sed, scancode))
  81.         return;
  82.  
  83.     switch(scancode) {
  84.     case 0:        /* this case is just here to trick certain compilers    */
  85.     default:
  86.         if (scancode == MOU_CLICK || (ascii(scancode)) == ' ') {
  87.             ++(select->number);
  88.  
  89.             if (select_choice(*select) == NULL) {
  90.                 select->number = 0;
  91.             }
  92.             select_senter(sed, sed_GetFieldNo(sed));
  93.             sed_UpdateCurrField(sed);
  94.         }
  95.     }
  96.  
  97.     /* reset baton */
  98.     sed_SetBaton(sed, -1);
  99. }
  100.  
  101. void select_senter(sed_type sed, int fieldno)
  102. /*
  103.     this function goes from the native select list to the record string.
  104. */
  105. {
  106.     struct select_struct *select;
  107.  
  108.     select = (struct select_struct *) sed_GetVar(sed, fieldno);
  109.  
  110.     strcpy(sed_GetScratchPad(sed), select_choice(*select));
  111.     strcenter(sed_GetScratchPad(sed), sed_GetRecordLen(sed, fieldno));
  112.     sed_SetRecord(sed, sed_GetScratchPad(sed), fieldno);
  113.  
  114.     std_senter(sed, fieldno);
  115. }
  116.  
  117.