1 /*	SCCS Id: @(#)macwin.h	3.4	1996/01/15	*/
2 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
3 /* NetHack may be freely redistributed.  See license for details. */
4 
5 #ifndef MACWIN_H
6 # define MACWIN_H
7 #undef red			/* undef internal color const strings from decl */
8 #undef green
9 #undef blue
10 
11 #ifndef __MACH__
12 #include <windows.h>
13 #include <dialogs.h>
14 #endif
15 
16 /* more headers */
17 #ifdef THINK_C
18 #include <pascal.h>	/* for CtoPStr and PtoCStr */
19 #endif
20 
21 /* resources */
22 #define PLAYER_NAME_RES_ID	1001
23 
24 /* fake some things if we don't have universal headers.. */
25 #if 0  /*ndef NewUserItemProc*/
26 typedef pascal void (*UserItemProcPtr)(WindowPtr theWindow, short itemNo);
27 typedef UserItemProcPtr UserItemUPP;
28 #define NewUserItemProc(p)	(UserItemUPP)(p)
29 
30 typedef pascal void (*ControlActionProcPtr)(ControlHandle theControl, short partCode);
31 typedef ControlActionProcPtr ControlActionUPP;
32 #define NewControlActionProc(p) (ControlActionUPP)(p)
33 
34 typedef ModalFilterProcPtr ModalFilterUPP;
35 #define DisposeRoutineDescriptor(p)
36 #endif
37 
38 /* misc */
39 #ifdef __MWERKS__
40 # define ResumeProcPtr long		/* for call to InitDialogs */
41 #endif
42 
43 /* working dirs structure */
44 typedef struct macdirs {
45 	Str32		dataName;
46 	short		dataRefNum;
47 	long		dataDirID;
48 
49 	Str32		saveName;
50 	short		saveRefNum;
51 	long		saveDirID;
52 
53 	Str32		levelName;
54 	short		levelRefNum;
55 	long		levelDirID;
56 } MacDirs;
57 
58 typedef struct macflags {
59 	Bitfield (processes, 1);
60 	Bitfield (color, 1);
61 	Bitfield (folders, 1);
62 	Bitfield (tempMem, 1);
63 	Bitfield (help, 1);
64 	Bitfield (fsSpec, 1);
65 	Bitfield (trueType, 1);
66 	Bitfield (aux, 1);
67 	Bitfield (alias, 1);
68 	Bitfield (standardFile, 1);
69 	Bitfield (hasDebugger, 1);
70 	Bitfield (hasAE, 1);
71 	Bitfield (gotOpen, 1);
72 } MacFlags;
73 
74 extern MacDirs theDirs;		/* used in macfile.c */
75 extern MacFlags macFlags;
76 
77 /*
78  * Mac windows
79  */
80 #define NUM_MACWINDOWS 15
81 #define TEXT_BLOCK 512L
82 
83 /* Window constants */
84 #define kMapWindow 0
85 #define kStatusWindow 1
86 #define kMessageWindow 2
87 #define kTextWindow 3
88 #define kMenuWindow 4
89 #define kLastWindowKind kMenuWindow
90 
91 /*
92  * This determines the minimum logical line length in text windows
93  * That is; even if physical width is less, this is where line breaks
94  * go at the minimum. 350 is about right for score lines with a
95  * geneva 10 pt font.
96  */
97 #define MIN_RIGHT 350
98 
99 typedef struct {
100 	anything id;
101 	char accelerator;
102 	char groupAcc;
103 	short line;
104 } MacMHMenuItem;
105 
106 typedef struct NhWindow {
107 	WindowPtr		its_window;
108 
109 	short			font_number;
110 	short			font_size;
111 	short			char_width;
112 	short			row_height;
113 	short			ascent_height;
114 
115 	short			x_size;
116 	short			y_size;
117 	short			x_curs;
118 	short			y_curs;
119 
120 	short		last_more_lin; /* Used by message window */
121 	short		save_lin;		/* Used by message window */
122 
123 	short			miSize;		/* size of menu items arrays */
124 	short			miLen;		/* number of menu items in array */
125 	MacMHMenuItem	**menuInfo;		/* Used by menus (array handle) */
126 	char		menuChar;		/* next menu accelerator to use */
127 	short			**menuSelected;	/* list of selected elements from list */
128 	short			miSelLen;	/* number of items selected */
129 	short			how;		/* menu mode */
130 
131 	char			drawn;
132 	Handle			windowText;
133 	long			windowTextLen;
134 	short		scrollPos;
135 	ControlHandle	scrollBar;
136 } NhWindow;
137 
138 extern Boolean CheckNhWin(WindowPtr mac_win);
139 
140 
141 #define NUM_STAT_ROWS 2
142 #define NUM_ROWS 22
143 #define NUM_COLS 80 /* We shouldn't use column 0 */
144 #define QUEUE_LEN 24
145 
146 extern NhWindow * theWindows;
147 
148 extern struct window_procs mac_procs;
149 
150 #define NHW_BASE 0
151 extern winid BASE_WINDOW, WIN_MAP, WIN_MESSAGE, WIN_INVEN, WIN_STATUS;
152 
153 
154 /*
155  * External declarations for the window routines.
156  */
157 
158 #define E extern
159 
160 /* ### dprintf.c ### */
161 
162 extern void dprintf (char *, ...);
163 
164 /* ### maccurs.c ### */
165 
166 extern Boolean RetrievePosition (short, short *, short *);
167 extern Boolean RetrieveSize (short, short, short, short *, short *);
168 extern void SaveWindowPos (WindowPtr);
169 extern void SaveWindowSize (WindowPtr);
170 extern Boolean FDECL(RetrieveWinPos, (WindowPtr,short *,short *));
171 
172 /* ### macerrs.c ### */
173 
174 extern void showerror(char *,const char *);
175 extern Boolean itworked(short);
176 extern void mustwork(short);
177 extern void attemptingto(char *);
178 /* appear to be unused
179 extern void comment(char *,long);
180 extern void pushattemptingto(char *);
181 extern void popattempt(void);
182 */
183 /* ### macfile.c ### */
184 
185 /* extern char *macgets(int fd, char *ptr, unsigned len); unused */
186 extern void FDECL(C2P,(const char *c, unsigned char *p));
187 extern void FDECL(P2C,(const unsigned char *p, char *c));
188 
189 /* ### macmenu.c ### */
190 
191 extern void DoMenuEvt (long);
192 extern void InitMenuRes(void);
193 extern void AdjustMenus(short);
194 #define DimMenuBar() AdjustMenus(1)
195 #define UndimMenuBar() AdjustMenus(0)
196 
197 /* ### macmain.c ### */
198 
199 extern void FDECL (process_openfile, (short s_vol, long s_dir, Str255 fNm, OSType ft));
200 
201 /* ### macwin.c ### */
202 
203 extern void AddToKeyQueue(unsigned char, Boolean);
204 extern unsigned char GetFromKeyQueue (void);
205 void trans_num_keys (EventRecord *);
206 extern void NDECL (InitMac);
207 int FDECL (try_key_queue, (char *));
208 void FDECL (enter_topl_mode, (char *));
209 void FDECL (leave_topl_mode, (char *));
210 void FDECL (topl_set_resp, (char *, char));
211 Boolean FDECL (topl_key, (unsigned char, Boolean));
212 E void FDECL(HandleEvent, (EventRecord *));	/* used in mmodal.c */
213 extern void NDECL(port_help);
214 
215 extern Boolean small_screen;
216 
217 E void FDECL(mac_init_nhwindows, (int *, char **));
218 E void NDECL(mac_askname);
219 E void NDECL(mac_get_nh_event);
220 E void FDECL(mac_exit_nhwindows, (const char *));
221 E winid FDECL(mac_create_nhwindow, (int));
222 E void FDECL(mac_clear_nhwindow, (winid));
223 E void FDECL(mac_display_nhwindow, (winid, BOOLEAN_P));
224 E void FDECL(mac_destroy_nhwindow, (winid));
225 E void FDECL(mac_curs, (winid,int,int));
226 E void FDECL(mac_putstr, (winid, int, const char *));
227 E void FDECL(mac_start_menu, (winid));
228 E void FDECL(mac_add_menu, (winid,int,const anything *,
229 		CHAR_P,CHAR_P,int,const char *, BOOLEAN_P));
230 E void FDECL(mac_end_menu, (winid, const char *));
231 E int FDECL(mac_select_menu, (winid, int, menu_item **));
232 #ifdef CLIPPING
233 E void FDECL(mac_cliparound, (int, int));
234 #endif
235 E int NDECL(mac_nhgetch);
236 E int FDECL(mac_nh_poskey, (int *, int *, int *));
237 E int NDECL(mac_doprev_message);
238 E char FDECL(mac_yn_function, (const char *, const char *, CHAR_P));
239 E void FDECL(mac_getlin, (const char *,char *));
240 E int NDECL(mac_get_ext_cmd);
241 E void FDECL(mac_number_pad, (int));
242 E void NDECL(mac_delay_output);
243 
244 #undef E
245 
246 #endif /* ! MACWIN_H */
247