git: Line endings of README.txt
[projects/chimara/chimara.git] / tests / gridtest.c
1 #include <stdio.h>
2 #include <string.h>
3 #include <stdlib.h>
4 #include <assert.h>
5 #include <libchimara/glk.h>
6 #include <libchimara/garglk.h>
7
8 void glk_main(void)
9 {
10     event_t ev;
11     winid_t mainwin = glk_window_open(0, 0, 0, wintype_TextGrid, 0);
12     if(!mainwin)
13         return;
14     
15     glk_set_window(mainwin);
16     glui32 width, height, x, y;
17     glk_window_get_size(mainwin, &width, &height);
18     if(height < 4 || width < 22)
19     {
20         glk_put_string("Window not big enough");
21         glk_exit();
22     }
23
24     char *buffer = calloc(256, sizeof(char));
25     assert(buffer);
26     
27         garglk_set_reversevideo(1);
28         for(y=0; y<height; y++) {
29                 snprintf(buffer, 256, "%02d\n", y);
30                 glk_put_string(buffer);
31         }
32         garglk_set_reversevideo(0);
33
34         glk_set_style(style_Emphasized);
35         for(y=0; y<height; y++) {
36                 snprintf(buffer, 256, "%02d", y);
37                 glk_window_move_cursor(mainwin, (y+1)*width-2, 0);
38                 glk_put_string(buffer);
39         }
40         glk_set_style(style_Normal);
41
42     glk_window_move_cursor(mainwin, 2, 0);
43         glk_put_string("+");
44     glk_window_move_cursor(mainwin, width-3, 0);
45         glk_put_string("+");
46     glk_window_move_cursor(mainwin, 2, height-1);
47         glk_put_string("+");
48     glk_window_move_cursor(mainwin, width-3, height-1);
49         glk_put_string("+");
50
51     x = width / 2 - 10;
52     y = height / 2;
53     
54     glk_window_move_cursor(mainwin, x, y - 1);
55     glk_put_string("Enter text, or 'quit'");
56     glk_window_move_cursor(mainwin, x, y);
57     glk_request_line_event(mainwin, buffer, 21, 0);
58     while(strncmp(buffer, "quit", 4)) 
59     {
60         glk_select(&ev);
61         if(ev.type == evtype_LineInput)
62         {
63                 glk_window_move_cursor(mainwin, x, y + 1);
64                 glk_put_string("                     ");
65                 glk_window_move_cursor(mainwin, x, y + 1);
66                 glk_put_buffer(buffer, ev.val1);
67                 glk_window_move_cursor(mainwin, x, y);
68                 glk_request_line_event(mainwin, buffer, 21, 0);
69         }
70     }
71     glk_cancel_line_event(mainwin, NULL);
72     glk_window_clear(mainwin);
73     free(buffer);
74 }