X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=dosdemo;a=blobdiff_plain;f=src%2Fdemo.c;h=2ff25a749a4dfe146fb63d4c41d28d14847c4912;hp=b2a03e00e43a5e276b0ad879f5ddb4b7db05158d;hb=00a81988c5c6c91997f2f9346ac94858622490bd;hpb=8cee0ffb00cce3d81487f1161286ac299db7d044 diff --git a/src/demo.c b/src/demo.c index b2a03e0..2ff25a7 100644 --- a/src/demo.c +++ b/src/demo.c @@ -24,6 +24,7 @@ unsigned int mouse_bmask; float sball_matrix[] = {1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1}; static unsigned long nframes; +static int console_active; int demo_init(int argc, char **argv) { @@ -120,29 +121,54 @@ void demo_keyboard(int key, int press) switch(key) { case 27: demo_quit(); - break; + return; case 127: debug_break(); + return; + + case '`': + console_active = !console_active; + if(console_active) { + printf("> "); + fflush(stdout); + } else { + putchar('\n'); + } + return; + + case '\b': + if(console_active) { + if(wr != rd) { + printf("\b \b"); + fflush(stdout); + wr = (wr + CBUF_SIZE - 1) & CBUF_MASK; + } + return; + } break; case '\n': case '\r': - dptr = inp; - while(rd != wr) { - *dptr++ = cbuf[rd]; - rd = (rd + 1) & CBUF_MASK; - } - *dptr = 0; - if(inp[0]) { - printf("trying to match: %s\n", inp); - nscr = scr_num_screens(); - for(i=0; iname, inp)) { - change_screen(i); - break; + if(console_active) { + dptr = inp; + while(rd != wr) { + *dptr++ = cbuf[rd]; + rd = (rd + 1) & CBUF_MASK; + } + *dptr = 0; + if(inp[0]) { + printf("\ntrying to match: %s\n", inp); + nscr = scr_num_screens(); + for(i=0; iname, inp)) { + change_screen(i); + break; + } } } + console_active = 0; + return; } break; @@ -153,15 +179,23 @@ void demo_keyboard(int key, int press) change_screen(9); } - if(key < 256 && isprint(key)) { - cbuf[wr] = key; - wr = (wr + 1) & CBUF_MASK; - if(wr == rd) { /* overflow */ - rd = (rd + 1) & CBUF_MASK; + if(console_active) { + if(key < 256 && isprint(key)) { + putchar(key); + fflush(stdout); + + cbuf[wr] = key; + wr = (wr + 1) & CBUF_MASK; + if(wr == rd) { /* overflow */ + rd = (rd + 1) & CBUF_MASK; + } } + return; } break; } + + scr_keypress(key); } } @@ -177,7 +211,7 @@ void mouse_orbit_update(float *theta, float *phi, float *dist) int dy = mouse_y - prev_my; if(dx || dy) { - if(mouse_bmask & 1) { + if(mouse_bmask & MOUSE_LEFT) { float p = *phi; *theta += dx * 1.0; p += dy * 1.0; @@ -186,7 +220,7 @@ void mouse_orbit_update(float *theta, float *phi, float *dist) if(p > 90) p = 90; *phi = p; } - if(mouse_bmask & 4) { + if(mouse_bmask & MOUSE_RIGHT) { *dist += dy * 0.5; if(*dist < 0) *dist = 0;