1 /* NetHack 3.6 wc_chainin.c $NHDT-Date: 1433806610 2015/06/08 23:36:50 $ $NHDT-Branch: master $:$NHDT-Revision: 1.7 $ */
2 /* Copyright (c) Kenneth Lorber, 2012 */
3 /* NetHack may be freely redistributed. See license for details. */
5 /* -chainin is an internal processor that changes the flow from window_procs
11 struct chain_procs *nprocs;
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;
23 chainin_procs_chain(cmd, n, me, nextprocs, nextdata)
31 case WINCHAIN_ALLOC: {
32 struct chainin_data *tdp = calloc(1, sizeof(struct chainin_data));
38 struct chainin_data *tdp = me;
39 tdp->nprocs = nextprocs;
40 tdp->ndata = nextdata;
44 raw_printf("chainin_procs_chain: bad cmd\n");
49 /* XXX if we don't need this, take it out of the table */
51 chainin_procs_init(dir)
61 chainin_init_nhwindows(argcp, argv)
65 (*cibase->nprocs->win_init_nhwindows)(cibase->ndata, argcp, argv);
69 chainin_player_selection()
71 (*cibase->nprocs->win_player_selection)(cibase->ndata);
77 (*cibase->nprocs->win_askname)(cibase->ndata);
81 chainin_get_nh_event()
83 (*cibase->nprocs->win_get_nh_event)(cibase->ndata);
87 chainin_exit_nhwindows(str)
90 (*cibase->nprocs->win_exit_nhwindows)(cibase->ndata, str);
94 chainin_suspend_nhwindows(str)
97 (*cibase->nprocs->win_suspend_nhwindows)(cibase->ndata, str);
101 chainin_resume_nhwindows()
103 (*cibase->nprocs->win_resume_nhwindows)(cibase->ndata);
107 chainin_create_nhwindow(type)
112 rv = (*cibase->nprocs->win_create_nhwindow)(cibase->ndata, type);
118 chainin_clear_nhwindow(window)
121 (*cibase->nprocs->win_clear_nhwindow)(cibase->ndata, window);
125 chainin_display_nhwindow(window, blocking)
129 (*cibase->nprocs->win_display_nhwindow)(cibase->ndata, window, blocking);
133 chainin_destroy_nhwindow(window)
136 (*cibase->nprocs->win_destroy_nhwindow)(cibase->ndata, window);
140 chainin_curs(window, x, y)
145 (*cibase->nprocs->win_curs)(cibase->ndata, window, x, y);
149 chainin_putstr(window, attr, str)
154 (*cibase->nprocs->win_putstr)(cibase->ndata, window, attr, str);
158 chainin_putmixed(window, attr, str)
163 (*cibase->nprocs->win_putmixed)(cibase->ndata, window, attr, str);
167 chainin_display_file(fname, complain)
171 (*cibase->nprocs->win_display_file)(cibase->ndata, fname, complain);
175 chainin_start_menu(window)
178 (*cibase->nprocs->win_start_menu)(cibase->ndata, window);
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);
197 chainin_end_menu(window, prompt)
201 (*cibase->nprocs->win_end_menu)(cibase->ndata, window, prompt);
205 chainin_select_menu(window, how, menu_list)
208 menu_item **menu_list;
212 rv = (*cibase->nprocs->win_select_menu)(cibase->ndata, window, how,
219 chainin_message_menu(let, how, mesg)
226 rv = (*cibase->nprocs->win_message_menu)(cibase->ndata, let, how, mesg);
232 chainin_update_inventory()
234 (*cibase->nprocs->win_update_inventory)(cibase->ndata);
240 (*cibase->nprocs->win_mark_synch)(cibase->ndata);
246 (*cibase->nprocs->win_wait_synch)(cibase->ndata);
251 chainin_cliparound(x, y)
255 (*cibase->nprocs->win_cliparound)(cibase->ndata, x, y);
261 chainin_update_positionbar(posbar)
264 (*cibase->nprocs->win_update_positionbar)(cibase->ndata, posbar);
268 /* XXX can we decode the glyph in a meaningful way? */
270 chainin_print_glyph(window, x, y, glyph, bkglyph)
275 (*cibase->nprocs->win_print_glyph)(cibase->ndata, window, x, y, glyph, bkglyph);
279 chainin_raw_print(str)
282 (*cibase->nprocs->win_raw_print)(cibase->ndata, str);
286 chainin_raw_print_bold(str)
289 (*cibase->nprocs->win_raw_print_bold)(cibase->ndata, str);
297 rv = (*cibase->nprocs->win_nhgetch)(cibase->ndata);
303 chainin_nh_poskey(x, y, mod)
310 rv = (*cibase->nprocs->win_nh_poskey)(cibase->ndata, x, y, mod);
318 (*cibase->nprocs->win_nhbell)(cibase->ndata);
322 chainin_doprev_message()
326 rv = (*cibase->nprocs->win_doprev_message)(cibase->ndata);
332 chainin_yn_function(query, resp, def)
333 const char *query, *resp;
338 rv = (*cibase->nprocs->win_yn_function)(cibase->ndata, query, resp, def);
344 chainin_getlin(query, bufp)
348 (*cibase->nprocs->win_getlin)(cibase->ndata, query, bufp);
352 chainin_get_ext_cmd()
356 rv = (*cibase->nprocs->win_get_ext_cmd)(cibase->ndata);
362 chainin_number_pad(state)
365 (*cibase->nprocs->win_number_pad)(cibase->ndata, state);
369 chainin_delay_output()
371 (*cibase->nprocs->win_delay_output)(cibase->ndata);
376 chainin_change_color(color, value, reverse)
381 (*cibase->nprocs->win_change_color)(cibase->ndata, color, value, reverse);
386 chainin_change_background(bw)
389 (*cibase->nprocs->win_change_background)(cibase->ndata, bw);
393 chainin_set_font_name(window, font)
399 rv = (*cibase->nprocs->win_set_font_name)(cibase->ndata, window, font);
406 trace_get_color_string()
410 rv = (*cibase->nprocs->win_get_color_string)(cibase->ndata);
417 /* other defs that really should go away (they're tty specific) */
419 chainin_start_screen()
421 (*cibase->nprocs->win_start_screen)(cibase->ndata);
427 (*cibase->nprocs->win_end_screen)(cibase->ndata);
431 chainin_outrip(tmpwin, how, when)
436 (*cibase->nprocs->win_outrip)(cibase->ndata, tmpwin, how, when);
440 chainin_preference_update(pref)
443 (*cibase->nprocs->win_preference_update)(cibase->ndata, pref);
447 chainin_getmsghistory(init)
452 rv = (*cibase->nprocs->win_getmsghistory)(cibase->ndata, init);
458 chainin_putmsghistory(msg, is_restoring)
460 boolean is_restoring;
462 (*cibase->nprocs->win_putmsghistory)(cibase->ndata, msg, is_restoring);
466 chainin_status_init()
468 (*cibase->nprocs->win_status_init)(cibase->ndata);
472 chainin_status_finish()
474 (*cibase->nprocs->win_status_finish)(cibase->ndata);
478 chainin_status_enablefield(fieldidx, nm, fmt, enable)
484 (*cibase->nprocs->win_status_enablefield)(cibase->ndata, fieldidx, nm,
489 chainin_status_update(idx, ptr, chg, percent, color, colormasks)
490 int idx, chg, percent, color;
492 unsigned long *colormasks;
494 (*cibase->nprocs->win_status_update)(cibase->ndata, idx, ptr, chg,
495 percent, color, colormasks);
499 chainin_can_suspend()
503 rv = (*cibase->nprocs->win_can_suspend)(cibase->ndata);
508 struct window_procs chainin_procs = {
509 "-chainin", 0, /* wincap */
512 XXX problem - the above need to come from the real window port, possibly
513 modified. May need to do something to call an additional init fn later
514 or if this is the only place like this the choose_windows fn can do the
516 (but not if the value can be modified by the stack?) TBD
518 chainin_init_nhwindows,
519 chainin_player_selection, chainin_askname, chainin_get_nh_event,
520 chainin_exit_nhwindows, chainin_suspend_nhwindows,
521 chainin_resume_nhwindows, chainin_create_nhwindow, chainin_clear_nhwindow,
522 chainin_display_nhwindow, chainin_destroy_nhwindow, chainin_curs,
523 chainin_putstr, chainin_putmixed, chainin_display_file,
524 chainin_start_menu, chainin_add_menu, chainin_end_menu,
525 chainin_select_menu, chainin_message_menu, chainin_update_inventory,
526 chainin_mark_synch, chainin_wait_synch,
531 chainin_update_positionbar,
533 chainin_print_glyph, chainin_raw_print, chainin_raw_print_bold,
534 chainin_nhgetch, chainin_nh_poskey, chainin_nhbell,
535 chainin_doprev_message, chainin_yn_function, chainin_getlin,
536 chainin_get_ext_cmd, chainin_number_pad, chainin_delay_output,
538 chainin_change_color,
540 chainin_change_background, chainin_set_font_name,
542 chainin_get_color_string,
545 chainin_start_screen, chainin_end_screen,
547 chainin_outrip, chainin_preference_update, chainin_getmsghistory,
548 chainin_putmsghistory,
549 chainin_status_init, chainin_status_finish, chainin_status_enablefield,
550 chainin_status_update,