#include "glk.h" #include static winid_t graph_win = NULL; static winid_t command_win = NULL; static winid_t status_win = NULL; static char buffer[256]; int color=0; int bgcolor=0xffffff; void draw_status() { char str[128]; int i,j; glk_set_window(status_win); glk_window_clear(status_win); glk_window_move_cursor(status_win,1,2); glk_put_string(" Grpad\n L. Ross Raszewski\n\n\n\n"); glk_put_string(" Commands:\n\n"); glk_put_string(" l:\n load blorb file\n\n"); glk_put_string(" r x y w h:\n draw rectangle\n\n"); glk_put_string(" e x y w h:\n erase rectangle\n\n"); glk_put_string(" p color:\n set pen color\n\n"); glk_put_string(" b color:\n set pad color\n\n"); glk_put_string(" c:\n clear pad\n\n"); glk_put_string(" i n x y:\n draw image n\n\n"); glk_put_string(" s n x y w h:\n draw scaled image\n\n"); glk_put_string(" q:\n quit Grpad\n\n\n"); sprintf(str," Pen color: 0x%x\n Pad color: 0x%x\n\n",color,bgcolor); glk_put_string(str); glk_window_get_size(graph_win,&i, &j); sprintf(str," Pad width: %d\n Pad height: %d\n",i,j); glk_put_string(str); } void glk_main() { graph_win=glk_window_open(0,0,0,wintype_Graphics,0); command_win = glk_window_open(graph_win,winmethod_Below | winmethod_Fixed, 2, wintype_TextBuffer, 0); status_win = glk_window_open(graph_win,winmethod_Right | winmethod_Proportional, 25, wintype_TextGrid,0); while(1) { event_t ev; draw_status(); glk_set_window(command_win); glk_put_string(">"); glk_request_line_event(command_win,buffer,255,0); glk_select(&ev); if (ev.type==evtype_LineInput) { char *c; int x,y,w,h,i; buffer[ev.val1]=0; for(c=buffer;*c;c++) *c = glk_char_to_lower(*c); switch(buffer[0]) { case 'l':{ strid_t blb; blb=glk_stream_open_file(glk_fileref_create_by_prompt( fileusage_BinaryMode,filemode_Read,0), filemode_Read,0); giblorb_set_resource_map(blb); } break; case 'r': sscanf(buffer+1,"%i %i %i %i",&x,&y,&w,&h); glk_window_fill_rect(graph_win,color,x,y,w,h); break; case 'e': sscanf(buffer+1,"%i %i %i %i",&x,&y,&w,&h); glk_window_erase_rect(graph_win,x,y,w,h); break; case 'p': sscanf(buffer+1,"%i",&color); break; case 'c': glk_window_clear(graph_win); break; case 'b': sscanf(buffer+1,"%i",&bgcolor); glk_window_set_background_color(graph_win,bgcolor); break; case 'i': sscanf(buffer+1,"%i %i %i",&i,&x,&y); glk_image_draw(graph_win,i,x,y); break; case 's': sscanf(buffer+1,"%i %i %i %i %i",&i,&x,&y,&w,&h); glk_image_draw_scaled(graph_win,i,x,y,w,h); break; case 'q': glk_exit(); } } } }