Пример #1
0
/* ARGSUSED */
int
itegetchar(dev_t dev)
{
#ifdef SMALL
    return (0);
#else
    return (kbdgetc());
#endif
}
Пример #2
0
void kbd_handler(regs_pt *regs)
{
    static int max_len;
    static int cur_len;
    if(input.s == 1)
    {
        max_len = 0;
        cur_len = 0;
        input.s = 2;
    } 

    if(input.s != 2)
        return;
    
    int ch = kbdgetc();
    if(!ch)
        return;
    switch(ch)
    {
        case KEY_LF:
            if(cur_len > 0) {
                cursor_left();
                cur_len--;
            }
            return;
        case KEY_RT:
            if(cur_len < max_len) {
                cursor_right();
                cur_len++;
            }
            return;
        case '\b':
            if(cur_len <= 0)
                return;
            cur_len--;
            max_len--;
            for(int i = (input.r+cur_len)%256; i != input.w; i=(i+1)%256)
            {
                input.buf[i] = input.buf[(i+1)%256];
            }
            input.w=(input.w-1)%256;
            for(int i = cur_len; i < max_len; i++)
                    cursor_right();
            flush_input(max_len+1, max_len, &input.buf[input.r]);
            for(int i = cur_len; i < max_len; i++)
                    cursor_left();
            return;
        case '\n':
            input.w=(input.w+1)%256;
            for(int i = cur_len; i < max_len; i++)
                    cursor_right();
            putchar_normal('\n');
            wakeup(&input.r);
            return;
    }

    // queue is full.
    if((input.w + 1)%256 == input.r)
    {
        wakeup(&input.r);
        return;
    }
        
    int i;
    for(i = input.w; i != (input.r+cur_len)%256; i=(i-1)%256)
        input.buf[i] = input.buf[(i-1)%256];
    input.buf[i] = ch;

    max_len++;
    cur_len++;
    for(i = cur_len-1; i < max_len-1; i++)
        cursor_right();
    flush_input(max_len-1, max_len, &input.buf[input.r]);
    for(i = cur_len; i < max_len; i++)
        cursor_left();
    input.w=(input.w+1)%256;
    input.w%=256;

}