/* Generic tblib stuff usable by other apps */ #include #include #include #include #include #include #include #include #include "svmwgrap.h" #include "levels.h" extern vmw_font *tb1_font; extern ggi_visual_t vis; extern ggi_visual_t vaddr; extern ggi_visual_t vaddr2; extern ggi_directbuffer_t dbuf_vis; extern ggi_directbuffer_t dbuf_vaddr; extern ggi_directbuffer_t dbuf_vaddr2; extern ggi_pixellinearbuffer *plb_vis; extern ggi_pixellinearbuffer *plb_vaddr; extern ggi_pixellinearbuffer *plb_vaddr2; extern int stride_factor; extern char path_to_data[256]; extern int read_only_mode; extern ggi_color eight_bit_pal[256]; extern ggi_pixel tb1_pal[256]; extern int color_depth; #define TB_ESC 27 #define TB_ENTER 1024 #define TB_F1 1025 #define TB_F2 1026 #define TB_UP 1027 #define TB_DOWN 1028 #define TB_LEFT 1029 #define TB_RIGHT 1030 #define TB_PGUP 1031 #define TB_PGDOWN 1032 int get_input() { int evmask; ggi_event ev; struct timeval t={0,0}; evmask=emKeyPress|emKeyRelease|emPointer; while (ggiEventPoll(vis,evmask,&t)) { do { ggiEventRead(vis,&ev,evmask); } while(! ( (1 << ev.any.type) & evmask ) ); if (ev.any.type==evKeyPress) { switch(KTYP(U(ev.key.sym))) { case KT_LATIN: case KT_LETTER: return (KVAL(U(ev.key.sym))); break; default: switch(U(ev.key.sym)) { case K_UP: /* CrSr up */ case K_P8: /* Keypad 8 */ return TB_UP;break; case K_DOWN: /* CrSr down */ case K_P2: /* Keypad 2 */ return TB_DOWN;break; case K_RIGHT: /* CrSr right */ case K_P6: /* CrSr right */ return TB_RIGHT;break; case K_LEFT: /* CrSr left */ case K_P4: /* CrSr left */ return TB_LEFT;break; case K_F1: return TB_F1;break; case K_F2: return TB_F2;break; case K_ENTER: /* enter */ return TB_ENTER;break; default: /*printf("sym=%4x code=%4x\n",ev.key.sym,ev.key.code);*/break; } } } } return 0; } void clear_keyboard_buffer() { while (get_input()!=0) ; } void drawsquare(int x1,int y1,int x2,int y2,int col,ggi_visual_t page) { ggiSetGCForeground(page,tb1_pal[col]); /*ggiDrawHLine(page,x1,y1,(x2-x1)); * ggiDrawHLine(page,x1,y2,(x2-x1)); * ggiDrawVLine(page,x1,y1,(y2-y1)); * ggiDrawVLine(page,x2,y1,(y2-y1));*/ ggiDrawLine(page,x1,y1,x1,y2); ggiDrawLine(page,x2,y1,x2,y2); ggiDrawLine(page,x1,y1,x2,y1); ggiDrawLine(page,x1,y2,x2,y2); } void coolbox(int x1,int y1,int x2,int y2,int fill,ggi_visual_t page) { int i; for(i=0;i<5;i++) { /*ggiSetGCForeground(page,31-i); ggiDrawBox(page,x1+i,y1+i,(x2-x1-i-i),(y2-y1-i-i));*/ drawsquare(x1+i,y1+i,x2-i,y2-i,31-i,page); } if (fill) { ggiSetGCForeground(page,tb1_pal[7]); for(i=y1+5;i