From a0ee6864c1577ab64e3a74cc5f6b74ead48fafc8 Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Thu, 18 May 2017 13:09:51 -0400 Subject: [PATCH] gr-sim: vtab and cursor key improvements --- gr-sim/gr-sim.c | 55 +++++++++++++- gr-sim/gr-sim.h | 7 ++ gr-sim/text.c | 2 +- gr-sim/tfv.c | 191 +++++++++++++++++++++++++++++++++++++++++++++--- 4 files changed, 243 insertions(+), 12 deletions(-) diff --git a/gr-sim/gr-sim.c b/gr-sim/gr-sim.c index 41cca4a6..84a188a3 100644 --- a/gr-sim/gr-sim.c +++ b/gr-sim/gr-sim.c @@ -123,8 +123,20 @@ int grsim_input(void) { switch (keypressed) { case SDLK_ESCAPE: - return 'q'; + return 27; + case 'a'...'z': + case 'A'...'Z': + return keypressed; + case SDLK_UP: + return 11; + case SDLK_DOWN: + return 10; + case SDLK_RIGHT: + return 21; + case SDLK_LEFT: + return 8; default: + printf("Unknown %d\n",keypressed); return keypressed; } break; @@ -132,6 +144,9 @@ int grsim_input(void) { case SDL_JOYBUTTONDOWN: case SDL_JOYAXISMOTION: + printf("Joystick!\n"); + break; + default: printf("Unknown input action!\n"); break; @@ -1034,8 +1049,25 @@ void basic_htab(int xpos) { } +static void tabv(void) { + + // TABV + // fb5b + ram[CV]=a; + vtab(); +} + void basic_vtab(int ypos) { - + // f256 + x=ypos; + x--; /* base on zero */ + a=x; + + if (a>23) { + fprintf(stderr,"Error, vtab %d too big\n",ypos); + return; + } + tabv(); } void basic_print(char *string) { @@ -1049,3 +1081,22 @@ void basic_print(char *string) { } +void basic_inverse(void) { + // F277 + a=0x3f; + x=0; + ram[INVFLG]=a; + ram[FLASH]=x; + + return; +} + +void basic_normal(void) { + // F273 + a=0xff; + x=0; + ram[INVFLG]=a; + ram[FLASH]=x; + + return; +} diff --git a/gr-sim/gr-sim.h b/gr-sim/gr-sim.h index 4cbde851..3e0b09f9 100644 --- a/gr-sim/gr-sim.h +++ b/gr-sim/gr-sim.h @@ -17,4 +17,11 @@ int text(void); void basic_htab(int x); void basic_vtab(int y); void basic_print(char *string); +void basic_inverse(void); +void basic_normal(void); + +#define APPLE_UP 11 +#define APPLE_DOWN 10 +#define APPLE_LEFT 8 +#define APPLE_RIGHT 21 diff --git a/gr-sim/text.c b/gr-sim/text.c index 82700c01..f2fdba86 100644 --- a/gr-sim/text.c +++ b/gr-sim/text.c @@ -6,7 +6,7 @@ int main(int argc, char **argv) { - int x,y,ch,i; + int ch,i; char output[BUFSIZ]; grsim_init(); diff --git a/gr-sim/tfv.c b/gr-sim/tfv.c index ddc5731f..c08239bd 100644 --- a/gr-sim/tfv.c +++ b/gr-sim/tfv.c @@ -45,6 +45,11 @@ int main(int argc, char **argv) { int ch; int x,y; + char tempst[BUFSIZ]; + char nameo[9]; + + int name_x=0; + int cursor_x=0,cursor_y=0; grsim_init(); @@ -56,25 +61,193 @@ int main(int argc, char **argv) { grsim_update(); - x=20; y=21; - color_equals(0); - while(1) { ch=grsim_input(); + if (ch!=0) break; - if (ch=='q') break; - if (ch=='i') if (y>0) y-=2; - if (ch=='m') if (y<39) y+=2; - if (ch=='j') if (x>0) x--; - if (ch=='k') if (x<39) x++; + usleep(10000); + } + + text(); + home(); + + /* Enter your name */ +// 1 2 3 +// 0123456789012345678901234567890123456789 +//00PLEASE ENTER A NAME: +// 1 +// 2 +// 3 _ _ _ _ _ _ _ _ +// 4 +// 5 @ A B C D E F G +// 6 +// 7 H I J K L M N O +// 8 +// 9 P Q R S T U V W +//10 +//11 X Y Z [ \ ] ^ _ +//12 +//13 ! " # $ % & ' +//14 +//15 ( ) * + , - . / +//16 +//17 0 1 2 3 4 5 6 7 +//18 +//19 8 9 : ' < = > ? +//20 +//21 FINISHED +//22 +//23 +//24 + basic_print("PLEASE ENTER A NAME:"); + + for(x=0;x<9;x++) nameo[x]=0; + + grsim_update(); + + while(1) { + + basic_normal(); + basic_htab(12); + basic_vtab(3); + + for(x=0;x<8;x++) { + if (x==name_x) { + basic_inverse(); + basic_print("+"); + basic_normal(); + basic_print(" "); + } + else if (nameo[x]==0) { + basic_print("_ "); + } + else { + sprintf(tempst,"%c ",nameo[x]); + basic_print(tempst); + } + } + + for(y=0;y<8;y++) { + basic_htab(12); + basic_vtab(y*2+6); + for(x=0;x<8;x++) { + if (y<4) sprintf(tempst,"%c ",(y*8)+x+64); + else sprintf(tempst,"%c ",(y*8)+x); + + if ((x==cursor_x) && (y==cursor_y)) basic_inverse(); + else basic_normal(); + + basic_print(tempst); + } + } + + basic_htab(12); + basic_vtab(22); + basic_normal(); + + if ((cursor_y==8) && (cursor_x<4)) basic_inverse(); + basic_print(" DONE "); + basic_normal(); + basic_print(" "); + if ((cursor_y==8) && (cursor_x>=4)) basic_inverse(); + basic_print(" BACK "); + + while(1) { + ch=grsim_input(); + + if (ch==APPLE_UP) { // up + cursor_y--; + } + + else if (ch==APPLE_DOWN) { // down + cursor_y++; + } + + else if (ch==APPLE_LEFT) { // left + if (cursor_y==8) cursor_x-=4; + else cursor_x--; + } + + else if (ch==APPLE_RIGHT) { // right + if (cursor_y==8) cursor_x+=4; + cursor_x++; + } + + else if (ch=='\r') { + if (cursor_y==8) { + if (cursor_x<4) { + ch=27; + break; + } + else { + nameo[name_x]=0; + name_x--; + if (name_x<0) name_x=0; + break; + } + } + + if (cursor_y<4) nameo[name_x]=(cursor_y*8)+ + cursor_x+64; + else nameo[name_x]=(cursor_y*8)+cursor_x; +// printf("Set to %d\n",nameo[name_x]); + name_x++; + } + + else if ((ch>32) && (ch<128)) { + nameo[name_x]=ch; + name_x++; + + } + + if (name_x>7) name_x=7; + + if (cursor_x<0) { + cursor_x=7; + cursor_y--; + } + if (cursor_x>7) { + cursor_x=0; + cursor_y++; + } + + if (cursor_y<0) cursor_y=8; + if (cursor_y>8) cursor_y=0; + + if ((cursor_y==8) && (cursor_x<4)) cursor_x=0; + else if ((cursor_y==8) && (cursor_x>=4)) cursor_x=4; + + if (ch!=0) break; + + grsim_update(); + + usleep(10000); + } + + if (ch==27) break; + } + + gr(); + x=20; y=21; + color_equals(0); + + + while(1) { + ch=grsim_input(); + + if ((ch=='q') || (ch==27)) break; + if ((ch=='i') || (ch==APPLE_UP)) if (y>0) y-=2; + if ((ch=='m') || (ch==APPLE_DOWN)) if (y<39) y+=2; + if ((ch=='j') || (ch==APPLE_LEFT)) if (x>0) x--; + if ((ch=='k') || (ch==APPLE_RIGHT)) if (x<39) x++; gr_copy(0x800,0x400); grsim_put_sprite(test_sprite,x,y); grsim_update(); - usleep(100000); + usleep(10000); } return 0;