コード例 #1
0
ファイル: gtwindow.c プロジェクト: ChadMcKinney/Entropy
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;
    }
}
コード例 #2
0
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;
    }
}
コード例 #3
0
ファイル: rgwin_grid.c プロジェクト: ivar/remglk
/* 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);
    }
}
コード例 #4
0
ファイル: rgwin_grid.c プロジェクト: ivar/remglk
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);
    }
}