Hyperlinks now fully supported, also on textgrids.
[rodin/chimara.git] / tests / styletest.c
1 #include <stdio.h>
2 #include <string.h>
3 #include <stdlib.h>
4 #include <assert.h>
5 #include <libchimara/glk.h>
6
7 void print_help();
8 void do_style_test();
9 void do_link_test();
10
11 winid_t mainwin;
12 winid_t statuswin;
13
14 void glk_main(void)
15 {
16     event_t ev;
17     mainwin = glk_window_open(0, 0, 0, wintype_TextBuffer, 0);
18     if(!mainwin)
19         return;
20
21         statuswin = glk_window_open(mainwin, winmethod_Above | winmethod_Fixed, 3, wintype_TextGrid, 1);
22     
23     glk_set_window(mainwin);
24     
25     char *buffer = calloc(256, sizeof(char));
26     assert(buffer);
27     
28     glk_put_string("Welcome to the style test\n");
29
30     glk_request_line_event(mainwin, buffer, 255, 0);
31     while(strncmp(buffer, "quit", 4)) 
32     {
33         glk_select(&ev);
34         if(ev.type == evtype_LineInput)
35         {
36                         if( !strncmp(buffer, "help", 4) ) {
37                                 print_help();
38                         }
39                         else if( !strncmp(buffer, "style", 4) ) {
40                                 do_style_test();
41                         }
42                         else if( !strncmp(buffer, "link", 4) ) {
43                                 do_link_test();
44                         }
45                         else {
46                                 glk_put_string("Huh?\n");
47                         }
48                 glk_request_line_event(mainwin, buffer, 255, 0);
49         }
50                 else if(ev.type == evtype_Hyperlink)
51                 {
52                         glk_cancel_line_event(mainwin, NULL);
53                         if(ev.val1 == 1)
54                                 glk_put_string("Link 1 was clicked\n");
55                         if(ev.val1 == 2)
56                                 glk_put_string("Link 2 was clicked\n");
57                         if(ev.val1 == 3)
58                                 glk_put_string("Link 3 was clicked\n");
59                         if(ev.val1 == 4)
60                                 glk_put_string("Link 4 was clicked\n");
61
62                 glk_request_line_event(mainwin, buffer, 255, 0);
63                 }
64     }
65
66     glk_cancel_line_event(mainwin, NULL);
67     glk_window_clear(mainwin);
68     free(buffer);
69 }
70
71 void
72 do_style_test() {
73         glk_set_style(style_Normal);
74         glk_put_string("Normal\n");
75
76         glk_set_style(style_Emphasized);
77         glk_put_string("Emphasized\n");
78
79         glk_set_style(style_Preformatted);
80         glk_put_string("Preformatted\n");
81
82         glk_set_style(style_Header);
83         glk_put_string("Header\n");
84
85         glk_set_style(style_Subheader);
86         glk_put_string("Subheader\n");
87
88         glk_set_style(style_Alert);
89         glk_put_string("Alert\n");
90
91         glk_set_style(style_Note);
92         glk_put_string("Note\n");
93
94         glk_set_style(style_BlockQuote);
95         glk_put_string("BlockQuote\n");
96
97         glk_set_style(style_Input);
98         glk_put_string("Input\n");
99
100         glk_set_style(style_User1);
101         glk_put_string("User1\n");
102
103         glk_set_style(style_User2);
104         glk_put_string("User2\n");
105
106         glk_set_style(style_Normal);
107 }
108
109 void
110 do_link_test() {
111     glk_set_window(mainwin);
112         glk_set_hyperlink(1);
113         glk_put_string("This is link 1\n");
114         glk_set_hyperlink(2);
115         glk_put_string("This is link 2\n");
116         glk_set_hyperlink(0);
117
118     glk_set_window(statuswin);
119         glk_set_hyperlink(3);
120         glk_window_move_cursor(statuswin, 0, 0);
121         glk_put_string("This is link 3\n");
122         glk_set_hyperlink(4);
123         glk_window_move_cursor(statuswin, 0, 1);
124         glk_put_string("This is link 4\n");
125         glk_set_hyperlink(0);
126
127         glk_request_hyperlink_event(mainwin);
128         glk_request_hyperlink_event(statuswin);
129
130     glk_set_window(mainwin);
131 }
132
133 void
134 print_help() {
135         glk_put_string("The following commands are supported:\n - help (this help text)\n - style (perform style test)\n - link (perform hyperlink test)\n - quit (quit the program)\n");
136 }