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
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
);
465 #ifdef STATUS_VIA_WINDOWPORT
467 chainin_status_init()
469 (*cibase
->nprocs
->win_status_init
)(cibase
->ndata
);
473 chainin_status_finish()
475 (*cibase
->nprocs
->win_status_finish
)(cibase
->ndata
);
479 chainin_status_enablefield(fieldidx
, nm
, fmt
, enable
)
485 (*cibase
->nprocs
->win_status_enablefield
)(cibase
->ndata
, fieldidx
, nm
,
490 chainin_status_update(idx
, ptr
, chg
, percent
)
491 int idx
, chg
, percent
;
494 (*cibase
->nprocs
->win_status_update
)(cibase
->ndata
, idx
, ptr
, chg
,
498 #ifdef STATUS_HILITES
500 chainin_status_threshold(fldidx
, thresholdtype
, threshold
, behavior
, under
,
502 int fldidx
, thresholdtype
;
503 int behavior
, under
, over
;
506 (*cibase
->nprocs
->win_status_threshold
)(cibase
->ndata
, fldidx
,
507 thresholdtype
, threshold
,
508 behavior
, under
, over
);
514 chainin_can_suspend()
518 rv
= (*cibase
->nprocs
->win_can_suspend
)(cibase
->ndata
);
523 struct window_procs chainin_procs
= {
524 "-chainin", 0, /* wincap */
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
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
,
546 chainin_update_positionbar
,
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
,
553 chainin_change_color
,
555 chainin_change_background
, chainin_set_font_name
,
557 chainin_get_color_string
,
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
,