1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License, Version 1.0 only
6 * (the "License").  You may not use this file except in compliance
7 * with the License.
8 *
9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10 * or http://www.opensolaris.org/os/licensing.
11 * See the License for the specific language governing permissions
12 * and limitations under the License.
13 *
14 * When distributing Covered Code, include this CDDL HEADER in each
15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16 * If applicable, add the following below this CDDL HEADER, with the
17 * fields enclosed by brackets "[]" replaced with your own identifying
18 * information: Portions Copyright [yyyy] [name of copyright owner]
19 *
20 * CDDL HEADER END
21 */
22/*	Copyright (c) 1988 AT&T	*/
23/*	  All Rights Reserved  	*/
24
25
26/*
27 * Copyright (c) 1997, by Sun Mircrosystems, Inc.
28 * All rights reserved.
29 */
30
31#ifndef _MENU_PRIVATE_H
32#define	_MENU_PRIVATE_H
33
34#pragma ident	"%Z%%M%	%I%	%E% SMI"	/* SVr4.0 1.9	*/
35
36#include <menu.h>
37
38#ifdef __cplusplus
39extern "C" {
40#endif
41
42/* Menu macros to access menu structure */
43
44#define	Height(m)	(m)->height
45#define	Width(m)	(m)->width
46#define	Rows(m)		(m)->rows
47#define	Cols(m)		(m)->cols
48#define	FRows(m)	(m)->frows
49#define	FCols(m)	(m)->fcols
50#define	MaxName(m)	(m)->namelen
51#define	MaxDesc(m)	(m)->desclen
52#define	Marklen(m)	(m)->marklen
53#define	Itemlen(m)	(m)->itemlen
54#define	Pattern(m)	(m)->pattern
55#define	Pindex(m)	(m)->pindex
56#define	IthPattern(m, i)	(m)->pattern[i]
57#define	Win(m)		(m)->win
58#define	Sub(m)		(m)->sub
59#define	UserWin(m)	(m)->userwin
60#define	UserSub(m)	(m)->usersub
61#define	UW(m)		(UserWin(m) ? UserWin(m) : stdscr)
62#define	US(m)		(UserSub(m) ? UserSub(m) : UW(m))
63#define	Items(m)	(m)->items
64#define	IthItem(m, i)	(m)->items[i]
65#define	Nitems(m)	(m)->nitems
66#define	Current(m)	(m)->curitem
67#define	Top(m)		(m)->toprow
68#define	Pad(m)		(m)->pad
69#define	Fore(m)		(m)->fore
70#define	Back(m)		(m)->back
71#define	Grey(m)		(m)->grey
72#define	InvalidAttr(a)	(((a) & (chtype) A_ATTRIBUTES) != (a))
73#define	Mhelp(m)	(m)->help
74#define	Muserptr(m)	(m)->userptr
75#define	Mopt(m)		(m)->opt
76#define	Mark(m)		(m)->mark
77#define	Mstatus(m)	(m)->status
78#define	Posted(m)	(Mstatus(m) & _POSTED)
79#define	Indriver(m)	(Mstatus(m) & _IN_DRIVER)
80#define	LinkNeeded(m)	(Mstatus(m) & _LINK_NEEDED)
81#define	SetPost(m)	(Mstatus(m) |= _POSTED)
82#define	SetDriver(m)	(Mstatus(m) |= _IN_DRIVER)
83#define	SetLink(m)	(Mstatus(m) |= _LINK_NEEDED)
84#define	ResetPost(m)	(Mstatus(m) &= ~_POSTED)
85#define	ResetDriver(m)	(Mstatus(m) &= ~_IN_DRIVER)
86#define	ResetLink(m)	(Mstatus(m) &= ~_LINK_NEEDED)
87#define	SMinit(m)	(m)->menuinit
88#define	SMterm(m)	(m)->menuterm
89#define	SIinit(m)	(m)->iteminit
90#define	SIterm(m)	(m)->itemterm
91#define	Minit(m)	if (m->menuinit) { \
92			    SetDriver(m); \
93			    (m)->menuinit(m); \
94			    ResetDriver(m); \
95			}
96#define	Mterm(m)	if (m->menuterm) { \
97			    SetDriver(m); \
98			    (m)->menuterm(m); \
99			    ResetDriver(m); \
100			}
101#define	Iinit(m)	if (m->iteminit) { \
102			    SetDriver(m); \
103			    (m)->iteminit(m); \
104			    ResetDriver(m); \
105			}
106#define	Iterm(m)	if (m->itemterm) { \
107			    SetDriver(m); \
108			    (m)->itemterm(m); \
109			    ResetDriver(m); \
110			}
111
112/* Define access to Mopt */
113
114#define	OneValue(m)	(Mopt(m) & O_ONEVALUE)
115#define	ShowDesc(m)	(Mopt(m) & O_SHOWDESC)
116#define	RowMajor(m)	(Mopt(m) & O_ROWMAJOR)
117#define	IgnoreCase(m)	(Mopt(m) & O_IGNORECASE)
118#define	ShowMatch(m)	(Mopt(m) & O_SHOWMATCH)
119#define	Cyclic(m)	(!(Mopt(m) & O_NONCYCLIC))
120
121/* Item macros to access item structure */
122
123#define	Name(i)		(i)->name.str
124#define	NameLen(i)	(i)->name.length
125#define	Description(i)	(i)->description.str
126#define	DescriptionLen(i)	(i)->description.length
127#define	Index(i)	(i)->index
128#define	Y(i)		(i)->y
129#define	X(i)		(i)->x
130#define	Imenu(i)	(i)->imenu
131#define	Value(i)	(i)->value
132#define	Ihelp(i)	(i)->help
133#define	Iuserptr(i)	(i)->userptr
134#define	Iopt(i)		(i)->opt
135#define	Istatus(i)	(i)->status
136#define	Up(i)		(i)->up
137#define	Down(i)		(i)->down
138#define	Left(i)		(i)->left
139#define	Right(i)	(i)->right
140#define	Selectable(i)	(Iopt(i) & O_SELECTABLE)
141
142/* Default menu macros */
143
144#define	Dfl_Menu	(&_Default_Menu)
145#define	Dfl_Item	(&_Default_Item)
146
147#define	max(a, b)	((a) > (b)) ? (a) : (b)
148#define	min(a, b)	((a) < (b)) ? (a) : (b)
149
150extern MENU		_Default_Menu;
151extern ITEM		_Default_Item;
152
153extern void		_affect_change(MENU *, int, ITEM *);
154extern void		_chk_current(MENU *, int *, ITEM *);
155extern void		_chk_top(MENU *, int *, ITEM *);
156extern void		_disconnect(MENU *);
157extern void		_draw(MENU *);
158extern void		_link_items(MENU *);
159extern void		_move_post_item(MENU *, ITEM *);
160extern void		_movecurrent(MENU *, ITEM *);
161extern void		_position_cursor(MENU *);
162extern void		_scale(MENU *);
163extern void		_show(MENU *);
164extern int		_match(MENU *, char, ITEM **);
165extern int		_connect(MENU *, ITEM **);
166
167#ifdef __cplusplus
168}
169#endif
170
171#endif	/* _MENU_PRIVATE_H */
172