home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Spezial / SPEZIAL2_97.zip / SPEZIAL2_97.iso / ANWEND / EDITOR / NVI179B / NVI179B.ZIP / common / options.h < prev    next >
C/C++ Source or Header  |  1996-10-10  |  4KB  |  102 lines

  1. /*-
  2.  * Copyright (c) 1991, 1993, 1994
  3.  *    The Regents of the University of California.  All rights reserved.
  4.  * Copyright (c) 1991, 1993, 1994, 1995, 1996
  5.  *    Keith Bostic.  All rights reserved.
  6.  *
  7.  * See the LICENSE file for redistribution information.
  8.  *
  9.  *    @(#)options.h    10.19 (Berkeley) 10/10/96
  10.  */
  11.  
  12. /*
  13.  * Edit option information.  Historically, if you set a boolean or numeric
  14.  * edit option value to its "default" value, it didn't show up in the :set
  15.  * display, i.e. it wasn't considered "changed".  String edit options would
  16.  * show up as changed, regardless.  We maintain a parallel set of values
  17.  * which are the default values and never consider an edit option changed
  18.  * if it was reset to the default value.
  19.  *
  20.  * Macros to retrieve boolean, integral and string option values, and to
  21.  * set, clear and test boolean option values.  Some options (secure, lines,
  22.  * columns, terminal type) are global in scope, and are therefore stored
  23.  * in the global area.  The offset in the global options array is stored
  24.  * in the screen's value field.  This is set up when the options are first
  25.  * initialized.
  26.  */
  27. #define    O_V(sp, o, fld)                            \
  28.     (F_ISSET(&(sp)->opts[(o)], OPT_GLOBAL) ?            \
  29.         (sp)->gp->opts[(sp)->opts[(o)].o_cur.val].fld :        \
  30.         (sp)->opts[(o)].fld)
  31.  
  32. /* Global option macros. */
  33. #define    OG_CLR(gp, o)        ((gp)->opts[(o)].o_cur.val) = 0
  34. #define    OG_SET(gp, o)        ((gp)->opts[(o)].o_cur.val) = 1
  35. #define    OG_STR(gp, o)        ((gp)->opts[(o)].o_cur.str)
  36. #define    OG_VAL(gp, o)        ((gp)->opts[(o)].o_cur.val)
  37. #define    OG_ISSET(gp, o)        OG_VAL(gp, o)
  38.  
  39. #define    OG_D_STR(gp, o)        ((gp)->opts[(o)].o_def.str)
  40. #define    OG_D_VAL(gp, o)        ((gp)->opts[(o)].o_def.val)
  41.  
  42. /*
  43.  * Flags to o_set(); need explicit OS_STR as can be setting the value to
  44.  * NULL.
  45.  */
  46. #define    OS_DEF        0x01        /* Set the default value. */
  47. #define    OS_NOFREE    0x02        /* Don't free the old string. */
  48. #define    OS_STR        0x04        /* Set to string argument. */
  49. #define    OS_STRDUP    0x08        /* Copy then set to string argument. */
  50.  
  51. struct _option {
  52.     union {
  53.         u_long     val;        /* Value or boolean. */
  54.         char    *str;        /* String. */
  55.     } o_cur;
  56. #define    O_CLR(sp, o)        o_set(sp, o, 0, NULL, 0)
  57. #define    O_SET(sp, o)        o_set(sp, o, 0, NULL, 1)
  58. #define    O_STR(sp, o)        O_V(sp, o, o_cur.str)
  59. #define    O_VAL(sp, o)        O_V(sp, o, o_cur.val)
  60. #define    O_ISSET(sp, o)        O_VAL(sp, o)
  61.  
  62.     union {
  63.         u_long     val;        /* Value or boolean. */
  64.         char    *str;        /* String. */
  65.     } o_def;
  66. #define    O_D_CLR(sp, o)        o_set(sp, o, OS_DEF, NULL, 0)
  67. #define    O_D_SET(sp, o)        o_set(sp, o, OS_DEF, NULL, 1)
  68. #define    O_D_STR(sp, o)        O_V(sp, o, o_def.str)
  69. #define    O_D_VAL(sp, o)        O_V(sp, o, o_def.val)
  70. #define    O_D_ISSET(sp, o)    O_D_VAL(sp, o)
  71.  
  72. #define    OPT_GLOBAL    0x01        /* Option is global. */
  73. #define    OPT_SELECTED    0x02        /* Selected for display. */
  74.     u_int8_t flags;
  75. };
  76.  
  77. /* List of option names, associated update functions and information. */
  78. struct _optlist {
  79.     char    *name;            /* Name. */
  80.                     /* Change function. */
  81.     int    (*func) __P((SCR *, OPTION *, char *, u_long *));
  82.                     /* Type of object. */
  83.     enum { OPT_0BOOL, OPT_1BOOL, OPT_NUM, OPT_STR } type;
  84.  
  85. #define    OPT_ADISP    0x001        /* Always display the option. */
  86. #define    OPT_ALWAYS    0x002        /* Always call the support function. */
  87. #define    OPT_NDISP    0x004        /* Never display the option. */
  88. #define    OPT_NOSAVE    0x008        /* Mkexrc command doesn't save. */
  89. #define    OPT_NOSET    0x010        /* Option may not be set. */
  90. #define    OPT_NOUNSET    0x020        /* Option may not be unset. */
  91. #define    OPT_NOZERO    0x040        /* Option may not be set to 0. */
  92.     u_int8_t flags;
  93. };
  94.  
  95. /* Option argument to opts_dump(). */
  96. enum optdisp { NO_DISPLAY, ALL_DISPLAY, CHANGED_DISPLAY, SELECT_DISPLAY };
  97.  
  98. /* Options array. */
  99. extern OPTLIST const optlist[];
  100.  
  101. #include "options_def.h"
  102.