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