void gli_window_put_char(window_t *win, char ch) { /* Character set conversion is necessary here, since we're printing to native (curses.h) output routines. */ if (!char_printable_table[(unsigned char)ch]) { char *altstr = gli_ascii_equivalent(ch); /* altstr is now a sensible ASCII equivalent, or else an octal code like "\177". Call gli_window_put_char() recursively to print it. This is safe, if funky, because altstr contains only characters in the range 0x20..0x7E. */ while (*altstr) { gli_window_put_char(win, *altstr); altstr++; } return; } #ifndef OPT_NATIVE_LATIN_1 ch = char_to_native_table[(unsigned char)ch]; #endif /* OPT_NATIVE_LATIN_1 */ switch (win->type) { case wintype_TextBuffer: win_textbuffer_putchar(win, ch); break; case wintype_TextGrid: win_textgrid_putchar(win, ch); break; } }
void gli_window_put_char(window_t *win, glui32 ch) { switch (win->type) { case wintype_TextBuffer: win_textbuffer_putchar(win, ch); break; case wintype_TextGrid: win_textgrid_putchar(win, ch); break; } }
/* Abort line input, storing whatever's been typed so far. */ void win_textgrid_cancel_line(window_t *win, event_t *ev) { void *inbuf; int inoriglen, inmax, inunicode, inecho, len; gidispatch_rock_t inarrayrock; window_textgrid_t *dwin = win->data; if (!dwin->inbuf) return; inbuf = dwin->inbuf; inmax = dwin->inmax; inoriglen = dwin->inoriglen; inarrayrock = dwin->inarrayrock; inunicode = dwin->inunicode; inecho = dwin->inecho; len = dwin->incurpos; if (inecho && win->echostr) { if (!inunicode) gli_stream_echo_line(win->echostr, (char *)inbuf, len); else gli_stream_echo_line_uni(win->echostr, (glui32 *)inbuf, len); } if (inecho) { /* Add the typed text to the buffer. */ int ix; if (!inunicode) { for (ix=0; ix<len; ix++) { glui32 ch = ((char *)inbuf)[ix]; win_textgrid_putchar(win, ch); } } else { for (ix=0; ix<len; ix++) { glui32 ch = ((glui32 *)inbuf)[ix]; win_textgrid_putchar(win, ch); } } dwin->cury = dwin->cury+1; dwin->curx = 0; } win->style = dwin->origstyle; ev->type = evtype_LineInput; ev->win = win; ev->val1 = len; win->line_request = FALSE; dwin->inbuf = NULL; dwin->inoriglen = 0; dwin->inmax = 0; dwin->intermkeys = 0; if (gli_unregister_arr) { char *typedesc = (inunicode ? "&+#!Iu" : "&+#!Cn"); (*gli_unregister_arr)(inbuf, inoriglen, typedesc, inarrayrock); } }
void win_textgrid_accept_line(window_t *win) { long len; void *inbuf; int inmax, inoriglen, inunicode, inecho; glui32 termkey = 0; gidispatch_rock_t inarrayrock; window_textgrid_t *dwin = win->data; if (!dwin->inbuf) return; inbuf = dwin->inbuf; inmax = dwin->inmax; inoriglen = dwin->inoriglen; inarrayrock = dwin->inarrayrock; inunicode = dwin->inunicode; inecho = dwin->inecho; len = dwin->incurpos; if (inecho && win->echostr) { if (!inunicode) gli_stream_echo_line(win->echostr, (char *)inbuf, len); else gli_stream_echo_line_uni(win->echostr, (glui32 *)inbuf, len); } if (inecho) { /* Add the typed text to the grid. */ int ix; if (!inunicode) { for (ix=0; ix<len; ix++) { glui32 ch = ((char *)inbuf)[ix]; win_textgrid_putchar(win, ch); } } else { for (ix=0; ix<len; ix++) { glui32 ch = ((glui32 *)inbuf)[ix]; win_textgrid_putchar(win, ch); } } dwin->cury = dwin->cury+1; dwin->curx = 0; } win->style = dwin->origstyle; /* ### set termkey */ gli_event_store(evtype_LineInput, win, len, termkey); win->line_request = FALSE; dwin->inbuf = NULL; dwin->inoriglen = 0; dwin->incurpos = 0; dwin->inmax = 0; dwin->inecho = FALSE; dwin->intermkeys = 0; if (gli_unregister_arr) { char *typedesc = (inunicode ? "&+#!Iu" : "&+#!Cn"); (*gli_unregister_arr)(inbuf, inoriglen, typedesc, inarrayrock); } }