1: /* $Header: uwm.h,v 10.3 86/02/01 16:24:37 tony Rel $ */
2: /************************************************************************
3: * *
4: * Copyright (c) 1986 by *
5: * Digital Equipment Corporation, Maynard, MA *
6: * All Rights Reserved. *
7: * *
8: * Permission to use, copy, modify, and distribute this software *
9: * and its documentation is hereby granted only to licensees of *
10: * The Regents of the University of California pursuant to their *
11: * license agreement for the Berkeley Software Distribution *
12: * provided that the following appears on all copies. *
13: * *
14: * "LICENSED FROM DIGITAL EQUIPMENT CORPORATION *
15: * COPYRIGHT (C) 1986 *
16: * DIGITAL EQUIPMENT CORPORATION *
17: * MAYNARD, MA *
18: * ALL RIGHTS RESERVED. *
19: * *
20: * THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT *
21: * NOTICE AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL *
22: * EQUIPMENT CORPORATION. DIGITAL MAKES NO REPRESENTATIONS *
23: * ABOUT SUITABILITY OF THIS SOFTWARE FOR ANY PURPOSE. IT IS *
24: * SUPPLIED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY. *
25: * *
26: * IF THE UNIVERSITY OF CALIFORNIA OR ITS LICENSEES MODIFY *
27: * THE SOFTWARE IN A MANNER CREATING DERIVATIVE COPYRIGHT *
28: * RIGHTS APPROPRIATE COPYRIGHT LEGENDS MAY BE PLACED ON THE *
29: * DERIVATIVE WORK IN ADDITION TO THAT SET FORTH ABOVE." *
30: * *
31: ************************************************************************/
32:
33:
34:
35: /*
36: * MODIFICATION HISTORY
37: *
38: * 000 -- M. Gancarz, DEC Ultrix Engineering Group
39: */
40:
41: #include <errno.h>
42: #include <stdio.h>
43: #include <strings.h>
44: #include <X/Xlib.h>
45:
46: #define MIN(x, y) ((x) <= (y) ? (x) : (y))
47: #define MAX(x, y) ((x) >= (y) ? (x) : (y))
48:
49: typedef enum _bool {FALSE, TRUE} Bool;
50:
51: #define DEF_DELTA 1
52: #define DEF_FONT "6x10"
53: #define DEF_FUNC GXcopy
54: #define DEF_ICON_BORDER_WIDTH 2
55: #define DEF_ICON_PADDING 4
56: #define DEF_POP_BORDER_WIDTH 2
57: #define DEF_POP_PADDING 4
58: #define 2
59: #define 4
60: #define DEF_VOLUME 4
61:
62: #define INIT_PTEXT {'0', '0', '0', 'x', '0', '0', '0'}
63: #define TEMPFILE "/tmp/uwm.XXXXXX"
64: #define SYSFILE "/usr/new/lib/X/uwm/system.uwmrc"
65:
66: #define CURSOR_WIDTH 16
67: #define CURSOR_HEIGHT 16
68:
69: #define MAX_ZAP_VECTORS 16
70: #define MAX_BOX_VECTORS 26
71:
72: #define DRAW_HEIGHT 1
73: #define DRAW_WIDTH 1
74: #define DRAW_VALUE 0xfd
75: #define DRAW_FUNC GXxor
76: #define DRAW_PLANES 1
77:
78: #define ROOT 0x1
79: #define WINDOW 0x2
80: #define ICON 0x4
81:
82: #define FAILURE 0
83: #define NAME_LEN 256 /* Maximum length of filenames. */
84: #define KeyMask(x) (x & (ControlMask|MetaMask|ShiftMask|ShiftLockMask))
85: #define EVENTMASK (ButtonPressed | ButtonReleased)
86: #define ButtonValue(x) (x & (LeftMask|MiddleMask|RightMask) >> 9)
87:
88: #define DrawBox() XDraw(RootWindow,box,num_vectors,DRAW_HEIGHT,DRAW_WIDTH,DRAW_VALUE,DRAW_FUNC,AllPlanes)
89: #define DrawZap() XDraw(RootWindow,zap,num_vectors,DRAW_HEIGHT,DRAW_WIDTH,DRAW_VALUE,DRAW_FUNC,AllPlanes)
90:
91: /*
92: * Keyword table entry.
93: */
94: typedef struct _keyword {
95: char *name;
96: int type;
97: Bool *bptr;
98: int *nptr;
99: char *sptr;
100: Bool (*fptr)();
101: } Keyword;
102:
103: /*
104: * Keyword table type entry.
105: */
106: #define IsString 1
107: #define IsBoolTrue 2
108: #define IsBoolFalse 3
109: #define IsFunction 4
110: #define 5
111: #define 6
112: #define IsDownFunction 7
113: #define IsParser 8
114: #define IsNumeric 9
115: #define IsQuitFunction 10
116:
117: /*
118: * Button/key binding type.
119: */
120: typedef struct _binding {
121: struct _binding *next;
122: int context;
123: short mask;
124: short button;
125: Bool (*func)();
126: char *menuname;
127: struct _menuinfo *menu;
128: } Binding;
129:
130: /*
131: * Key expression type.
132: */
133: typedef struct _keyexpr {
134: char *name;
135: short mask;
136: } KeyExpr;
137:
138: /*
139: * Context expression type.
140: */
141: typedef struct _contexpr {
142: char *name;
143: int mask;
144: } ContExpr;
145:
146: /*
147: * Button modifier type.
148: */
149: typedef struct _buttonmodifier {
150: char *name;
151: short mask;
152: } ButtonModifier;
153:
154: /*
155: * Button modifier mask definitions.
156: * Note: The upper byte definitions are found in <X/X.h>.
157: */
158: #define DoubleClick 0x1
159: #define DeltaMotion 0x2
160: #define ButtonUp 0x4
161: #define ButtonDown 0x8
162: #define ButtonMods 0xf
163:
164: /*
165: * MenuInfo data type.
166: */
167: typedef struct {
168: char *name; /* Name of this menu. */
169: Window w; /* Menu window. */
170: int iheight; /* Height of an item. */
171: int width; /* Width of this menu. */
172: int height; /* Height of this menu. */
173: Pixmap image; /* Saved image of the menu. */
174: char *foreground; /* Name of foreground color. */
175: char *background; /* Name of background color. */
176: char *fghighlight; /* Name of hightlight foreground color. */
177: char *bghighlight; /* Name of highlight background color. */
178: Color fg; /* Foreground color definition. */
179: Color bg; /* Background color definition. */
180: Color hlfg; /* Foreground highlight color definition. */
181: Color hlbg; /* Background highlight color definition. */
182: struct _menuline *line; /* Linked list of menu items. */
183: } ;
184:
185: /*
186: * Menu Line data type.
187: */
188: typedef struct {
189: struct _menuline *next; /* Pointer to next line. */
190: char *name; /* Name of this line. */
191: int type; /* IsShellCommand, IsText, IsTextNL... */
192: Window w; /* Subwindow for this line. */
193: char *text; /* Text string to be acted upon. */
194: Bool (*func)(); /* Window manager function to be invoked. */
195: struct _menuinfo *menu; /* Menu to be invoked. */
196: char *foreground; /* Name of foreground color. */
197: char *background; /* Name of background color. */
198: Color fg; /* Foreground color definition. */
199: Color bg; /* Background color definition. */
200: } ;
201:
202: /*
203: * MenuLine->type definitions.
204: */
205: #define IsShellCommand 1
206: #define IsText 2
207: #define IsTextNL 3
208: #define IsUwmFunction 4
209: #define 5
210: #define IsImmFunction 6 /* Immediate (context-less) function. */
211:
212: /*
213: * Menu Link data type. Used by the parser when creating a linked list
214: * of menus.
215: */
216: typedef struct {
217: struct _menulink *next; /* Pointer to next MenuLink. */
218: struct _menuinfo *menu; /* Pointer to the menu in this link. */
219: } ;
220:
221: /*
222: * External variable definitions.
223: */
224: extern int errno;
225: extern Window Pop; /* Pop-up dimension display window. */
226: extern Window Frozen; /* Contains window id of "gridded" window. */
227: extern Font IFont; /* Icon text font. */
228: extern Font PFont; /* Pop-up text font. */
229: extern Font MFont; /* Menu text font. */
230: extern FontInfo IFontInfo; /* Icon text font information. */
231: extern FontInfo PFontInfo; /* Pop-up text font information. */
232: extern FontInfo MFontInfo; /* Menu text font information. */
233: extern Pixmap GrayPixmap; /* Gray pixmap. */
234: extern Pixmap IBorder; /* Icon window border pixmap. */
235: extern Pixmap IBackground; /* Icon window background pixmap. */
236: extern Pixmap PBorder; /* Pop-Up Window border pixmap. */
237: extern Pixmap PBackground; /* Pop-up Window background pixmap. */
238: extern Pixmap MBorder; /* Menu Window border pixmap. */
239: extern Pixmap MBackground; /* Menu Window background pixmap. */
240: extern Cursor ArrowCrossCursor; /* Arrow cross cursor. */
241: extern Cursor TextCursor; /* Text cursor used in icon windows. */
242: extern Cursor IconCursor; /* Icon Cursor. */
243: extern Cursor MenuCursor; /* Menu cursor. */
244: extern Cursor MenuMaskCursor; /* Menu mask cursor. */
245: extern Cursor LeftButtonCursor; /* Left button main cursor. */
246: extern Cursor MiddleButtonCursor;/* Middle button main cursor. */
247: extern Cursor RightButtonCursor;/* Right button main cursor. */
248: extern int ScreenWidth; /* Display screen width. */
249: extern int ScreenHeight; /* Display screen height. */
250: extern int CursorFunc; /* Mouse cursor function. */
251: extern int IconCursorFunc; /* Icon Mouse Cursor function. */
252: extern int ITextForground; /* Icon window text forground color. */
253: extern int ITextBackground; /* Icon window text background color. */
254: extern int IBorderWidth; /* Icon window border width. */
255: extern int PTextForground; /* Pop-up window text forground color. */
256: extern int PTextBackground; /* Pop-up window text background color. */
257: extern int PWidth; /* Pop-up window width (including borders). */
258: extern int PHeight; /* Pop-up window height (including borders). */
259: extern int PBorderWidth; /* Pop-up window border width. */
260: extern int MTextForground; /* Menu window text forground color. */
261: extern int MTextBackground; /* Menu window text background color. */
262: extern int MBorderWidth; /* Menu window border width. */
263: extern int PPadding; /* Pop-up window padding. */
264: extern int ButtonMask; /* Global mouse button event mask. */
265: extern int Delay; /* Delay between clicks of double click. */
266: extern int Delta; /* Mouse movement slop. */
267: extern int HIconPad; /* Icon horizontal padding. */
268: extern int VIconPad; /* Icon vertical padding. */
269: extern int HMenuPad; /* Menu horizontal padding. */
270: extern int VMenuPad; /* Menu vertical padding. */
271: extern int MaxColors; /* Maximum number of colors to use. */
272: extern int Pushval; /* Number of pixels to push window by. */
273: extern int Volume; /* Audible alarm volume. */
274: extern int status; /* Routine return status. */
275: extern int Maxfd; /* Maximum file descriptors for select(2). */
276: extern MenuLink *Menus; /* Linked list of menus. */
277:
278: extern Bool Autoselect; /* Warp mouse to default menu selection? */
279: extern Bool Freeze; /* Freeze server during move/resize? */
280: extern Bool Grid; /* Should the m/r box contain a 9 seg. grid. */
281: extern Bool NWindow; /* Normalize windows? */
282: extern Bool NIcon; /* Normalize icons? */
283: extern Bool Push; /* Relative=TRUE, Absolute=FALSE. */
284: extern Bool Reverse; /* Reverse video? */
285: extern Bool Zap; /* Should the the zap effect be used. */
286:
287: extern char PText[]; /* Pop-up window dummy text. */
288: extern int PTextSize; /* Pop-up window dummy text size. */
289:
290: extern int Lineno; /* Line count for parser. */
291: extern Bool Startup_File_Error; /* Startup file error flag. */
292: extern char Startup_File[]; /* Startup file name. */
293: extern char IFontName[]; /* Icon font name. */
294: extern char PFontName[]; /* Pop-up font name. */
295: extern char MFontName[]; /* Menu font name. */
296: extern char **Argv; /* Pointer to command line parameters. */
297: extern char **Environ; /* Pointer to environment. */
298:
299: extern char *DefaultBindings[]; /* Default bindings string array. */
300: extern Keyword KeywordTable[]; /* Keyword lookup table. */
301: extern Binding *Blist; /* Button/key bindings list. */
302: extern KeyExpr KeyExprTbl[]; /* Key expression table. */
303: extern ContExpr ContExprTbl[]; /* Context expression table. */
304: extern ButtonModifier ButtModTbl[];/* Button modifier table. */
305:
306: #ifdef PROFIL
307: int ptrap();
308: #endif
309:
310: /*
311: * External routine typing.
312: */
313: extern Bool Beep();
314: extern Bool CircleDown();
315: extern Bool CircleUp();
316: extern Bool Continue();
317: extern Bool Focus();
318: extern Bool GetButton();
319: extern Bool Iconify();
320: extern Bool Lower();
321: extern Bool Menu();
322: extern Bool Move();
323: extern Bool MoveOpaque();
324: extern Bool NewIconify();
325: extern Bool Pause();
326: extern Bool PushDown();
327: extern Bool PushLeft();
328: extern Bool PushRight();
329: extern Bool PushUp();
330: extern Bool Raise();
331: extern Bool Refresh();
332: extern Bool ResetBindings();
333: extern Bool ResetMenus();
334: extern Bool ResetVariables();
335: extern Bool Resize();
336: extern Bool Restart();
337: extern int StoreCursors();
338: extern int StoreBox();
339: extern int StoreGridBox();
340: extern int StoreZap();
341: extern int Error();
342: extern int XError();
343: extern int CreateMenus();
344:
345: extern char *stash();