NHDT->ANH, nethack->anethack, nhdat->anhdat
[aNetHack.git] / win / chain / wc_chainin.c
blob4fd00a1b5f32d61688df3b84cf803d6f72071f47
1 /* aNetHack 0.0.1 wc_chainin.c $ANH-Date: 1433806610 2015/06/08 23:36:50 $ $ANH-Branch: master $:$ANH-Revision: 1.7 $ */
2 /* Copyright (c) Kenneth Lorber, 2012 */
3 /* aNetHack may be freely redistributed. See license for details. */
5 /* -chainin is an internal processor that changes the flow from window_procs
6 * to chain_procs. */
8 #include "hack.h"
10 struct chainin_data {
11 struct chain_procs *nprocs;
12 void *ndata;
14 int linknum;
17 /* Normally, a processor gets this information from the first parm of each
18 * call, but here we are keeping the original API, so that parm doesn't exist,
19 * so we use this instead. */
20 static struct chainin_data *cibase;
22 void *
23 chainin_procs_chain(cmd, n, me, nextprocs, nextdata)
24 int cmd;
25 int n;
26 void *me;
27 void *nextprocs;
28 void *nextdata;
30 switch (cmd) {
31 case WINCHAIN_ALLOC: {
32 struct chainin_data *tdp = calloc(1, sizeof(struct chainin_data));
33 tdp->linknum = n;
34 cibase = tdp;
35 return tdp;
37 case WINCHAIN_INIT: {
38 struct chainin_data *tdp = me;
39 tdp->nprocs = nextprocs;
40 tdp->ndata = nextdata;
41 return tdp;
43 default:
44 raw_printf("chainin_procs_chain: bad cmd\n");
45 exit(EXIT_FAILURE);
49 /* XXX if we don't need this, take it out of the table */
50 void
51 chainin_procs_init(dir)
52 int dir UNUSED;
56 /***
57 *** winprocs
58 ***/
60 void
61 chainin_init_nhwindows(argcp, argv)
62 int *argcp;
63 char **argv;
65 (*cibase->nprocs->win_init_nhwindows)(cibase->ndata, argcp, argv);
68 void
69 chainin_player_selection()
71 (*cibase->nprocs->win_player_selection)(cibase->ndata);
74 void
75 chainin_askname()
77 (*cibase->nprocs->win_askname)(cibase->ndata);
80 void
81 chainin_get_nh_event()
83 (*cibase->nprocs->win_get_nh_event)(cibase->ndata);
86 void
87 chainin_exit_nhwindows(str)
88 const char *str;
90 (*cibase->nprocs->win_exit_nhwindows)(cibase->ndata, str);
93 void
94 chainin_suspend_nhwindows(str)
95 const char *str;
97 (*cibase->nprocs->win_suspend_nhwindows)(cibase->ndata, str);
100 void
101 chainin_resume_nhwindows()
103 (*cibase->nprocs->win_resume_nhwindows)(cibase->ndata);
106 winid
107 chainin_create_nhwindow(type)
108 int type;
110 winid rv;
112 rv = (*cibase->nprocs->win_create_nhwindow)(cibase->ndata, type);
114 return rv;
117 void
118 chainin_clear_nhwindow(window)
119 winid window;
121 (*cibase->nprocs->win_clear_nhwindow)(cibase->ndata, window);
124 void
125 chainin_display_nhwindow(window, blocking)
126 winid window;
127 BOOLEAN_P blocking;
129 (*cibase->nprocs->win_display_nhwindow)(cibase->ndata, window, blocking);
132 void
133 chainin_destroy_nhwindow(window)
134 winid window;
136 (*cibase->nprocs->win_destroy_nhwindow)(cibase->ndata, window);
139 void
140 chainin_curs(window, x, y)
141 winid window;
142 int x;
143 int y;
145 (*cibase->nprocs->win_curs)(cibase->ndata, window, x, y);
148 void
149 chainin_putstr(window, attr, str)
150 winid window;
151 int attr;
152 const char *str;
154 (*cibase->nprocs->win_putstr)(cibase->ndata, window, attr, str);
157 void
158 chainin_putmixed(window, attr, str)
159 winid window;
160 int attr;
161 const char *str;
163 (*cibase->nprocs->win_putmixed)(cibase->ndata, window, attr, str);
166 void
167 chainin_display_file(fname, complain)
168 const char *fname;
169 boolean complain;
171 (*cibase->nprocs->win_display_file)(cibase->ndata, fname, complain);
174 void
175 chainin_start_menu(window)
176 winid window;
178 (*cibase->nprocs->win_start_menu)(cibase->ndata, window);
181 void
182 chainin_add_menu(window, glyph, identifier, ch, gch, attr, str, preselected)
183 winid window; /* window to use, must be of type NHW_MENU */
184 int glyph; /* glyph to display with item (unused) */
185 const anything *identifier; /* what to return if selected */
186 char ch; /* keyboard accelerator (0 = pick our own) */
187 char gch; /* group accelerator (0 = no group) */
188 int attr; /* attribute for string (like tty_putstr()) */
189 const char *str; /* menu string */
190 boolean preselected; /* item is marked as selected */
192 (*cibase->nprocs->win_add_menu)(cibase->ndata, window, glyph, identifier,
193 ch, gch, attr, str, preselected);
196 void
197 chainin_end_menu(window, prompt)
198 winid window;
199 const char *prompt;
201 (*cibase->nprocs->win_end_menu)(cibase->ndata, window, prompt);
205 chainin_select_menu(window, how, menu_list)
206 winid window;
207 int how;
208 menu_item **menu_list;
210 int rv;
212 rv = (*cibase->nprocs->win_select_menu)(cibase->ndata, window, how,
213 (void *) menu_list);
215 return rv;
218 char
219 chainin_message_menu(let, how, mesg)
220 char let;
221 int how;
222 const char *mesg;
224 char rv;
226 rv = (*cibase->nprocs->win_message_menu)(cibase->ndata, let, how, mesg);
228 return rv;
231 void
232 chainin_update_inventory()
234 (*cibase->nprocs->win_update_inventory)(cibase->ndata);
237 void
238 chainin_mark_synch()
240 (*cibase->nprocs->win_mark_synch)(cibase->ndata);
243 void
244 chainin_wait_synch()
246 (*cibase->nprocs->win_wait_synch)(cibase->ndata);
249 #ifdef CLIPPING
250 void
251 chainin_cliparound(x, y)
252 int x;
253 int y;
255 (*cibase->nprocs->win_cliparound)(cibase->ndata, x, y);
257 #endif
259 #ifdef POSITIONBAR
260 void
261 chainin_update_positionbar(posbar)
262 char *posbar;
264 (*cibase->nprocs->win_update_positionbar)(cibase->ndata, posbar);
266 #endif
268 /* XXX can we decode the glyph in a meaningful way? */
269 void
270 chainin_print_glyph(window, x, y, glyph, bkglyph)
271 winid window;
272 xchar x, y;
273 int glyph, bkglyph;
275 (*cibase->nprocs->win_print_glyph)(cibase->ndata, window, x, y, glyph, bkglyph);
278 void
279 chainin_raw_print(str)
280 const char *str;
282 (*cibase->nprocs->win_raw_print)(cibase->ndata, str);
285 void
286 chainin_raw_print_bold(str)
287 const char *str;
289 (*cibase->nprocs->win_raw_print_bold)(cibase->ndata, str);
293 chainin_nhgetch()
295 int rv;
297 rv = (*cibase->nprocs->win_nhgetch)(cibase->ndata);
299 return rv;
303 chainin_nh_poskey(x, y, mod)
304 int *x;
305 int *y;
306 int *mod;
308 int rv;
310 rv = (*cibase->nprocs->win_nh_poskey)(cibase->ndata, x, y, mod);
312 return rv;
315 void
316 chainin_nhbell()
318 (*cibase->nprocs->win_nhbell)(cibase->ndata);
322 chainin_doprev_message()
324 int rv;
326 rv = (*cibase->nprocs->win_doprev_message)(cibase->ndata);
328 return rv;
331 char
332 chainin_yn_function(query, resp, def)
333 const char *query, *resp;
334 char def;
336 int rv;
338 rv = (*cibase->nprocs->win_yn_function)(cibase->ndata, query, resp, def);
340 return rv;
343 void
344 chainin_getlin(query, bufp)
345 const char *query;
346 char *bufp;
348 (*cibase->nprocs->win_getlin)(cibase->ndata, query, bufp);
352 chainin_get_ext_cmd()
354 int rv;
356 rv = (*cibase->nprocs->win_get_ext_cmd)(cibase->ndata);
358 return rv;
361 void
362 chainin_number_pad(state)
363 int state;
365 (*cibase->nprocs->win_number_pad)(cibase->ndata, state);
368 void
369 chainin_delay_output()
371 (*cibase->nprocs->win_delay_output)(cibase->ndata);
374 #ifdef CHANGE_COLOR
375 void
376 chainin_change_color(color, value, reverse)
377 int color;
378 long value;
379 int reverse;
381 (*cibase->nprocs->win_change_color)(cibase->ndata, color, value, reverse);
384 #ifdef MAC
385 void
386 chainin_change_background(bw)
387 int bw;
389 (*cibase->nprocs->win_change_background)(cibase->ndata, bw);
392 short
393 chainin_set_font_name(window, font)
394 winid window;
395 char *font;
397 short rv;
399 rv = (*cibase->nprocs->win_set_font_name)(cibase->ndata, window, font);
401 return rv;
403 #endif
405 char *
406 trace_get_color_string()
408 char *rv;
410 rv = (*cibase->nprocs->win_get_color_string)(cibase->ndata);
412 return rv;
415 #endif
417 /* other defs that really should go away (they're tty specific) */
418 void
419 chainin_start_screen()
421 (*cibase->nprocs->win_start_screen)(cibase->ndata);
424 void
425 chainin_end_screen()
427 (*cibase->nprocs->win_end_screen)(cibase->ndata);
430 void
431 chainin_outrip(tmpwin, how, when)
432 winid tmpwin;
433 int how;
434 time_t when;
436 (*cibase->nprocs->win_outrip)(cibase->ndata, tmpwin, how, when);
439 void
440 chainin_preference_update(pref)
441 const char *pref;
443 (*cibase->nprocs->win_preference_update)(cibase->ndata, pref);
446 char *
447 chainin_getmsghistory(init)
448 boolean init;
450 char *rv;
452 rv = (*cibase->nprocs->win_getmsghistory)(cibase->ndata, init);
454 return rv;
457 void
458 chainin_putmsghistory(msg, is_restoring)
459 const char *msg;
460 boolean is_restoring;
462 (*cibase->nprocs->win_putmsghistory)(cibase->ndata, msg, is_restoring);
465 #ifdef STATUS_VIA_WINDOWPORT
466 void
467 chainin_status_init()
469 (*cibase->nprocs->win_status_init)(cibase->ndata);
472 void
473 chainin_status_finish()
475 (*cibase->nprocs->win_status_finish)(cibase->ndata);
478 void
479 chainin_status_enablefield(fieldidx, nm, fmt, enable)
480 int fieldidx;
481 const char *nm;
482 const char *fmt;
483 boolean enable;
485 (*cibase->nprocs->win_status_enablefield)(cibase->ndata, fieldidx, nm,
486 fmt, enable);
489 void
490 chainin_status_update(idx, ptr, chg, percent)
491 int idx, chg, percent;
492 genericptr_t ptr;
494 (*cibase->nprocs->win_status_update)(cibase->ndata, idx, ptr, chg,
495 percent);
498 #ifdef STATUS_HILITES
499 void
500 chainin_status_threshold(fldidx, thresholdtype, threshold, behavior, under,
501 over)
502 int fldidx, thresholdtype;
503 int behavior, under, over;
504 anything threshold;
506 (*cibase->nprocs->win_status_threshold)(cibase->ndata, fldidx,
507 thresholdtype, threshold,
508 behavior, under, over);
510 #endif
511 #endif
513 boolean
514 chainin_can_suspend()
516 boolean rv;
518 rv = (*cibase->nprocs->win_can_suspend)(cibase->ndata);
520 return rv;
523 struct window_procs chainin_procs = {
524 "-chainin", 0, /* wincap */
525 0, /* wincap2 */
527 XXX problem - the above need to come from the real window port, possibly
528 modified. May need to do something to call an additional init fn later
529 or if this is the only place like this the choose_windows fn can do the
530 fixup
531 (but not if the value can be modified by the stack?) TBD
533 chainin_init_nhwindows,
534 chainin_player_selection, chainin_askname, chainin_get_nh_event,
535 chainin_exit_nhwindows, chainin_suspend_nhwindows,
536 chainin_resume_nhwindows, chainin_create_nhwindow, chainin_clear_nhwindow,
537 chainin_display_nhwindow, chainin_destroy_nhwindow, chainin_curs,
538 chainin_putstr, chainin_putmixed, chainin_display_file,
539 chainin_start_menu, chainin_add_menu, chainin_end_menu,
540 chainin_select_menu, chainin_message_menu, chainin_update_inventory,
541 chainin_mark_synch, chainin_wait_synch,
542 #ifdef CLIPPING
543 chainin_cliparound,
544 #endif
545 #ifdef POSITIONBAR
546 chainin_update_positionbar,
547 #endif
548 chainin_print_glyph, chainin_raw_print, chainin_raw_print_bold,
549 chainin_nhgetch, chainin_nh_poskey, chainin_nhbell,
550 chainin_doprev_message, chainin_yn_function, chainin_getlin,
551 chainin_get_ext_cmd, chainin_number_pad, chainin_delay_output,
552 #ifdef CHANGE_COLOR
553 chainin_change_color,
554 #ifdef MAC
555 chainin_change_background, chainin_set_font_name,
556 #endif
557 chainin_get_color_string,
558 #endif
560 chainin_start_screen, chainin_end_screen,
562 chainin_outrip, chainin_preference_update, chainin_getmsghistory,
563 chainin_putmsghistory,
564 #ifdef STATUS_VIA_WINDOWPORT
565 chainin_status_init, chainin_status_finish, chainin_status_enablefield,
566 chainin_status_update,
567 #ifdef STATUS_HILITES
568 chainin_status_threshold,
569 #endif
570 #endif
571 chainin_can_suspend,