Annotation of researchv9/jerq/src/lib/jj/kbdstr.c, revision 1.1

1.1     ! root        1: #include       <jerq.h>
        !             2: #include       <font.h>
        !             3: 
        !             4: static void
        !             5: getstr(s, p, start, bs, at)
        !             6:        char *s, *start;
        !             7:        Point p;
        !             8: {
        !             9:        char c;
        !            10:        static char str[] = "x";
        !            11: 
        !            12:        for(;;)
        !            13:        {
        !            14:                wait(KBD);
        !            15:                if(((c=kbdchar()) == '\r') || (c == '\n'))
        !            16:                {
        !            17:                        *s = '\0';
        !            18:                        return;
        !            19:                }
        !            20:                if(c == bs)
        !            21:                {
        !            22:                        if(s>start)
        !            23:                        {
        !            24:                                str[0] = *(--s);
        !            25:                                p.x -= defont.info[*s].width;
        !            26:                                *s = 0;
        !            27:                                string(&defont, str, &display, p, F_XOR);
        !            28:                        }
        !            29:                }
        !            30:                else if(c == at)
        !            31:                {
        !            32:                        if(s>start)
        !            33:                        {
        !            34:                                p.x -= strwidth(&defont, start);
        !            35:                                string(&defont, start, &display, p, F_XOR);
        !            36:                                s = start;
        !            37:                                *s = 0;
        !            38:                        }
        !            39:                }
        !            40:                else if((c >= ' ') && (c <= '~'))
        !            41:                {
        !            42:                        if(s-start<50)
        !            43:                        {
        !            44:                                *s++ = (str[0] = c);
        !            45:                                *s = 0;
        !            46:                                p = string(&defont, str, &display , p, F_XOR);
        !            47:                        }
        !            48:                }
        !            49:        }
        !            50: }
        !            51: 
        !            52: kbdstr(s)
        !            53:        char *s;
        !            54: {
        !            55:        kbordstr(s, s+strlen(s), '\b', '@');
        !            56: }
        !            57: 
        !            58: kbordstr(str, start, bs, at)
        !            59:        char *str, *start;
        !            60: {
        !            61:        Bitmap *b;
        !            62:        Point p;
        !            63:        Rectangle r;
        !            64: 
        !            65:        p = mouse.xy;
        !            66:        p.x = min(p.x, Drect.corner.x-300);
        !            67:        b = balloc(raddp(Rect(0, 0, 300, defont.height+4), p));
        !            68:        bitblt(&display, b->rect, b, b->rect.origin, F_STORE);
        !            69:        rectf(&display, b->rect, F_STORE);
        !            70:        rectf(&display, r = inset(b->rect, 1), F_XOR);
        !            71:        p = add(r.origin, Pt(1,1));
        !            72:        p = string(&defont, str, &display, p, F_XOR);
        !            73:        getstr(start+strlen(start), p, start, bs, at);
        !            74:        bitblt(b, b->rect, &display, b->rect.origin, F_STORE);
        !            75:        bfree(b);
        !            76: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.