home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c185 / 1.ddi / FUNCS.EXE / CSCAPE / SOURCE / FNMARK.C < prev    next >
Encoding:
C/C++ Source or Header  |  1989-09-07  |  2.8 KB  |  143 lines

  1. /*
  2.     fnmark.c       9/26/88
  3.  
  4.     % mark_funcs
  5.  
  6.     Marked field functions
  7.     for creating multiple choice lists
  8.  
  9.     The field variable should be a boolean *.
  10.  
  11.     You can change the color used to mark the field by setting
  12.     the global variable fnmark_color.
  13.  
  14.     C-scape 3.1
  15.     Copyright (c) 1988, by Oakland Group, Inc.
  16.     ALL RIGHTS RESERVED.
  17.  
  18.     Revision History:
  19.     -----------------
  20.     10/09/88 jmd     added SED_ABORT support
  21.     10/14/88 jdc    added var_size element to field_funcs_struct
  22.     12/20/88 jmd    added mouse support
  23.  
  24.      6/07/89 jmd    added test for mouse code (later removed)
  25. */
  26.  
  27. #include <stdio.h>
  28. #include <ctype.h>
  29.  
  30. #include "cscape.h"
  31. #include "fnfunc.h"            /* for field functions */
  32. #include "scancode.h"
  33.  
  34. /*** mark color is a global variable ***/
  35.  
  36. byte    fnmark_color = ATTR_BOLD;
  37.  
  38. OGLOBAL field_funcs_struct mark_funcs = {
  39.     std_fenter,
  40.     std_fexit,
  41.     mark_fkey,
  42.     mark_senter,
  43.     mark_sexit,
  44.     sizeof(boolean)
  45. };
  46.  
  47. void mark_fkey(sed)
  48.     sed_type sed;
  49. /*
  50.     Up and down keys move cursor.
  51.     letters search for choices.
  52.     space bar toggles choice selection.
  53.  
  54.     Baton contains field number + 1 when ENTER is pressed
  55.     or 0 if ESC pressed.
  56. */
  57. {
  58.     int     scancode, letter, choice;
  59.     byte     reg, sel, bck;            /* sed colors */
  60.  
  61.     scancode = kb_Read();
  62.  
  63.     if (sed_DoSpecial(sed, scancode))
  64.         return;
  65.     if (special_key(sed, scancode))
  66.         return;
  67.  
  68.      /* intercept key before inter_field() */
  69.     if (scancode == ENTER || scancode == MOU_CLICK) {
  70.         sed_SetBaton(sed, sed_GetFieldNo(sed) + 1);
  71.         sed_ToggleExit(sed);
  72.         return;
  73.     }
  74.  
  75.     if (inter_field(sed, scancode))
  76.         return;
  77.     if (inter_page(sed, scancode))
  78.         return;
  79.  
  80.     switch(scancode) {
  81.     case HOME:
  82.         sed_GotoFirstField(sed);
  83.         break;
  84.     case END:
  85.         sed_GotoLastField(sed);
  86.         break;
  87.     default:
  88.         /* do first letter search */
  89.         letter = ascii(scancode);
  90.         if (isprint(letter) &&
  91.          (choice=sed_SearchMerge(sed, (char)letter)) !=-1){
  92.             sed_GotoField(sed, choice);
  93.         }
  94.         else if (letter == ' ') {
  95.             if (sed_IsMarkedField(sed, sed_GetFieldNo(sed))) {
  96.                 sed_UnMarkField(sed, sed_GetFieldNo(sed));
  97.             }
  98.             else {
  99.                 sed_GetColors(sed, ®, &bck, &sel);
  100.                 sed_MarkField(sed, sed_GetFieldNo(sed), fnmark_color, sel);
  101.             }
  102.         }
  103.         break;
  104.     }
  105.  
  106.     /* reset baton */
  107.     sed_SetBaton(sed, -1);
  108. }
  109.  
  110.  
  111. void mark_senter(sed, fieldno)
  112.     sed_type sed;
  113.     int fieldno;
  114. /*
  115.     Marks field if var is true
  116.     Unmarks otherwise
  117. */
  118. {
  119.     byte     reg, sel, bck;            /* sed colors */
  120.  
  121.     if (*((boolean *) sed_GetVar(sed, fieldno))) {
  122.         sed_GetColors(sed, ®, &bck, &sel);
  123.         sed_MarkField(sed, fieldno, fnmark_color, sel);
  124.     }
  125.     else {
  126.         sed_UnMarkField(sed, fieldno);
  127.     }
  128. }
  129.  
  130. void mark_sexit(sed, fieldno)
  131.     sed_type sed;
  132.     int fieldno;
  133. /*
  134.     Sets var true if field is marked
  135.     False otherwise
  136. */
  137. {
  138.     if (sed_GetBaton(sed) != SED_ABORT) {
  139.         *((boolean *) sed_GetVar(sed, fieldno)) = sed_IsMarkedField(sed, fieldno);
  140.     }
  141. }
  142.  
  143.