1 /* File: tnb.h */
2 
3 /* Purpose: AngbandTk header */
4 
5 /*
6  * Copyright (c) 1997-2001 Tim Baker
7  *
8  * This software may be copied and distributed for educational, research, and
9  * not for profit purposes provided that this copyright and statement are
10  * included in all such copies.
11  */
12 
13 #ifndef _INCLUDE_TNB_H_
14 #define _INCLUDE_TNB_H_
15 
16 #include <tk.h>
17 #include <tcl.h>
18 #include "../angband.h"
19 
20 #if !defined(PLATFORM_WIN) && !defined(PLATFORM_X11)
21 #error "You must define one of PLATFORM_WIN or PLATFORM_X11"
22 #endif /* */
23 
24 /* Hack - prevent warnings from tk headers */
25 #ifdef errno
26 #	undef errno
27 #	define errno errno_hack
28 #endif /* errno */
29 
30 #ifdef PLATFORM_WIN
31 #	include <windows.h>
32 #	include <tkWinInt.h>
33 #endif /* PLATFORM_WIN */
34 
35 #ifdef PLATFORM_X11
36 
37 /* Hack for makefile.std */
38 #   ifndef HAVE_LIMITS_H
39 #      define HAVE_LIMITS_H
40 #      define HAVE_UNISTD_H
41 #   endif
42 /*
43  * Hack - prevent a huge number of compiler warnings when <tclInt.h>
44  * is included indirectly below.
45  */
46 /* #	define _TCLINTDECLS */
47 /* #	include <tkInt.h> */
48 #endif /* PLATFORM_X11 */
49 
50 
51 /* main-tnb.c */
52 extern bool game_in_progress;
53 extern char ANGBAND_DIR_TK[1024];
54 
55 extern Tcl_Interp *g_interp;
56 
57 extern int tnb_tile_x;
58 extern int tnb_tile_y;
59 
60 extern char tnb_tile_file[1024];
61 extern char tnb_font_file[1024];
62 extern int tnb_font_size;
63 
64 extern void tnb_get_term(int x, int y, byte *a, char *c, byte *ta, char *tc);
65 
66 /* plat.c */
67 
68 typedef struct BitmapType {
69 	unsigned char *pixelPtr; /* Address of top-left pixel */
70 	int width; /* Width in pixels */
71 	int height; /* Height in pixels */
72 	int depth; /* 8, 16 or 24 */
73 	int pitch; /* Address difference between vertically adjacent pixels */
74 	int pixelSize; /* Address difference between horizontally adjacent pixels */
75     Pixmap pixmap;
76     void *platData; /* Platform-specific info */
77 } BitmapType, *BitmapPtr;
78 
79 extern void *Plat_PaletteInit(unsigned char *rgb);
80 extern int Plat_XColor2Pixel(XColor *xColorPtr);
81 extern void Plat_SyncDisplay(Display *display);
82 extern BitmapPtr Font_Load(Tcl_Interp *interp, cptr name, int size);
83 
84 extern void Bitmap_New(Tcl_Interp *interp, BitmapPtr bitmapPtr);
85 extern void Bitmap_Delete(BitmapPtr bitmapPtr);
86 extern BitmapPtr Bitmap_Load(Tcl_Interp *interp, cptr name);
87 
88 /* Widget.c */
89 extern errr Term_xtra_tnb_react(void);
90 extern errr Term_wipe_tnb(int x, int y, int n);
91 extern errr Term_text_tnb(int x, int y, int n, byte a, const char *s);
92 extern errr Term_pict_tnb(int x, int y, int n, const byte *ap, const char *cp,
93 						  const byte *tap, const char *tcp);
94 extern errr Term_curs_tnb(int x, int y);
95 extern errr Term_xtra_tnb_clear(void);
96 
97 /* canv-widget.c */
98 extern byte *get_icon_ptr(BitmapPtr bitmap_ptr, int x, int y);
99 extern int CanvasWidget_Init(Tcl_Interp *interp);
100 
101 
102 /* cmdinfo.c */
103 typedef struct CommandInfo CommandInfo;
104 typedef struct CommandInit CommandInit;
105 typedef struct SubCommandInfo SubCommandInfo;
106 
107 struct SubCommandInfo {
108 	int alloc;
109 	int count;
110 	cptr *name;
111 	CommandInfo **info;
112 };
113 
114 struct CommandInfo {
115 	int depth;
116 	cptr name;
117 	int minArgs, maxArgs;
118 	cptr errorMsg;
119 	Tcl_ObjCmdProc *proc;
120 	ClientData clientData;
121 	SubCommandInfo subCmd;
122 };
123 
124 struct CommandInit {
125 	int depth;
126 	cptr name;
127 	int minArgs, maxArgs;
128 	cptr errorMsg;
129 	Tcl_ObjCmdProc *proc;
130 	ClientData clientData;
131 };
132 
133 extern void CommandInfo_Add(CommandInfo *infoCmd, CommandInfo *infoSubCmd);
134 extern CommandInfo *CommandInfo_GetInfo(Tcl_Interp *interp, cptr names[]);
135 extern int CommandInfo_InitAux(Tcl_Interp *interp, CommandInit *init,
136 	int index, CommandInfo *parent);
137 extern int CommandInfo_Init(Tcl_Interp *interp, CommandInit *init,
138 	CommandInfo *parent);
139 extern CommandInfo *CommandInfo_New(CommandInit *init);
140 extern int CommandInfo_ObjCmd(ClientData clientData, Tcl_Interp *interp,
141 	int objc, Tcl_Obj *CONST objv[]);
142 
143 /* icon1.c */
144 
145 extern int g_icon_size; /* 16, 24 or 32 */
146 extern void init_icons(int size, int depth);
147 
148 extern void Icon_Exit(void);
149 extern void init_palette(void);
150 
151 /* interp.c */
152 extern int exit_skip_save;
153 extern bool command_repeating;
154 extern void angtk_angband_initialized(void);
155 extern void angtk_eval(cptr command, ...);
156 extern int angtk_eval_file(cptr extFileName);
157 extern void angtk_health(char *buf);
158 extern void angtk_init(void);
159 extern cptr player_status(int status, int *value);
160 
161 
162 /*
163  * XXXXX Important!
164  * If you add INKEY_XXX flags here, you must update the inkey_to_str[]
165  * array in interp2.c
166  */
167 
168 #define INKEY_CMD 1
169 #define INKEY_DIR 2
170 #define INKEY_DISTURB 3
171 #define INKEY_ITEM 4
172 #define INKEY_ITEM_STORE 5
173 #define INKEY_MORE 6
174 #define INKEY_SPELL 7
175 #define INKEY_TARGET 8
176 #define INKEY_POWER 9
177 #define INKEY_CMD_PET 10
178 
179 extern int inkey_book;
180 extern int inkey_flags;
181 
182 /* describe.c */
183 extern cptr keyword_slot[];
184 extern int strcpy_len(char *s1, const char *s2);
185 extern long angtk_describe_object(object_type *o_ptr, char *buf, bool in_store);
186 extern int SetArrayValueChar(cptr varName, cptr field, char value);
187 extern int SetArrayValueLong(cptr varName, cptr field, long value);
188 extern int SetArrayValueString(cptr varName, cptr field, cptr value);
189 
190 /* tcltk.c */
191 extern Tcl_Interp *TclTk_Init(cptr *argv);
192 
193 /* util-tnb.c */
194 extern cptr keyword_term_color[];
195 extern byte g_prompt_attr;
196 extern void prompt_print(cptr str);
197 extern void prompt_erase(void);
198 extern void prompt_format(cptr fmt, ...);
199 extern void prompt_append(cptr str);
200 extern void prompt_open(cptr str);
201 extern void prompt_update(cptr str);
202 extern void any_more(cptr prompt);
203 
204 extern int ExtToUtf_SetArrayValueString(cptr varName, cptr field, cptr value);
205 
206 /* util-dll.c */
207 extern int g_palette_white, g_palette_black;
208 #define PALETTE_WHITE g_palette_white
209 #define PALETTE_BLACK g_palette_black
210 
211 extern int g_colormap_white, g_colormap_black;
212 #define COLORMAP_WHITE g_colormap_white
213 #define COLORMAP_BLACK g_colormap_black
214 
215 extern unsigned char g_palette2colormap[256];
216 
217 extern int Palette_Init(Tcl_Interp *interp);
218 extern unsigned char *Palette_GetRGB(void);
219 extern void Palette_ResetHash(void);
220 extern int Palette_RGB2Index(unsigned char r, unsigned char g, unsigned char b);
221 
222 extern int Colormap_Init(Tcl_Interp *interp);
223 extern unsigned char *Colormap_GetRGB(void);
224 extern int Colormap_RGB2Index(unsigned char r, unsigned char g, unsigned char b);
225 
226 typedef struct RGBInfo RGBInfo;
227 struct RGBInfo
228 {
229 	int red_count, green_count, blue_count;
230 	int red_mask, green_mask, blue_mask;
231 	int red_shift, green_shift, blue_shift;
232 	int extra;
233 };
234 
235 extern RGBInfo g_rgbi;
236 
237 extern void SetPix16(unsigned char *p, int r, int g, int b);
238 
239 extern void *Array_Append(void *array_ptr, int *count, int elem_size,
240 	void *elem_ptr);
241 extern void *Array_Insert(void *array_ptr, int *count, int elem_size,
242 	int index);
243 extern void *Array_Delete(void *array_ptr, int *count, int elem_size,
244 	int index);
245 
246 extern Tcl_Obj *ExtToUtf_NewStringObj(CONST char *bytes, int length);
247 extern void ExtToUtf_SetResult(Tcl_Interp *interp, cptr string);
248 extern char *UtfToExt_TranslateFileName(Tcl_Interp *interp, char *utfPath,
249 	Tcl_DString *extDStringPtr);
250 
251 
252 /* Make a tk hook function called 'objcmd_name' */
253 #define DECLARE_TK_HOOK(N) \
254 	extern int objcmd_##N (ClientData clientData, \
255 		    Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])
256 
257 /* DECLARE_TK_HOOK(angband); */
258 DECLARE_TK_HOOK(player);
259 DECLARE_TK_HOOK(cave);
260 DECLARE_TK_HOOK(floor);
261 DECLARE_TK_HOOK(game);
262 DECLARE_TK_HOOK(init_icons);
263 DECLARE_TK_HOOK(inkey_flags);
264 DECLARE_TK_HOOK(inventory);
265 DECLARE_TK_HOOK(keycount);
266 DECLARE_TK_HOOK(keypress);
267 DECLARE_TK_HOOK(message);
268 DECLARE_TK_HOOK(fontdesc);
269 DECLARE_TK_HOOK(equipinfo);
270 DECLARE_TK_HOOK(inveninfo);
271 #endif /* _INCLUDE_TNB_H_ */
272 
273 
274 extern int init_widget(Tcl_Interp *interp, int g_icon_depth);
275 
276