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