Implement alternative resource loading for sound
[projects/chimara/chimara.git] / tests / soundtest.c
1 #include <libchimara/glk.h>
2 #include <stdio.h>
3 #include <unistd.h>
4 #include <string.h>
5
6 void
7 glk_main(void)
8 {
9         if(!glk_gestalt(gestalt_Sound, 0)) {
10                 fprintf(stderr, "Sound not supported.\n");
11                 return;
12         }
13         if(!glk_gestalt(gestalt_SoundVolume, 0)) {
14                 fprintf(stderr, "Sound volume not supported.\n");
15                 return;
16         }
17         if(!glk_gestalt(gestalt_SoundNotify, 0)) {
18                 fprintf(stderr, "Sound notification not supported.\n");
19                 return;
20         }
21         
22         schanid_t sc = glk_schannel_create(0);
23         if(!sc) {
24                 fprintf(stderr, "Could not create sound channel.\n");
25                 return;
26         }
27
28         /* Open the main window. */
29     winid_t mainwin = glk_window_open(0, 0, 0, wintype_TextBuffer, 1);
30     if (!mainwin) {
31         /* It's possible that the main window failed to open. There's
32             nothing we can do without it, so exit. */
33         return;
34     }
35         glk_set_window(mainwin);
36
37         char buffer[1024];
38         int len;
39         int finish = 0;
40
41         event_t ev;
42         while(!finish) {
43                 glk_put_string("\nprompt> ");
44                 glk_request_line_event(mainwin, buffer, 1024, 0);
45                 glk_select(&ev);
46                 printf("Received event:\n");
47                 printf("Type: %d\n", ev.type);
48                 printf("Win: %d\n", glk_window_get_rock(ev.win) );
49                 printf("Var1: %d\n", ev.val1);
50                 printf("Var2: %d\n", ev.val2);
51                 switch(ev.type) {
52                         case evtype_LineInput:
53                                 // Null-terminate string
54                                 len = ev.val1;
55                                 buffer[len] = '\0';
56
57                                 if(strcmp(buffer, "quit") == 0) {
58                                         glk_put_string("That's all, folks.\n");
59                                         finish = 1;
60                                 } else if(strcmp(buffer, "play") == 0) {
61                                         glk_put_string("Playing sound.\n");
62                                         if(!glk_schannel_play(sc, 3)) {
63                                                 fprintf(stderr, "Could not start sound channel.\n");
64                                                 finish = 1;
65                                         }
66                                 } else if(strcmp(buffer, "help") == 0) {
67                                         glk_put_string("Type PLAY or QUIT.\n");
68                                 }
69                                 break;
70                         case evtype_SoundNotify:
71                                 glk_put_string("\nGot sound notify event!\n");
72                                 break;
73                         default:
74                                 ;
75                 }
76         }
77
78         glk_schannel_stop(sc);
79         glk_schannel_destroy(sc);
80 }