1 #include <libchimara/glk.h>
9 if(!glk_gestalt(gestalt_Sound, 0)) {
10 fprintf(stderr, "Sound not supported.\n");
13 if(!glk_gestalt(gestalt_SoundVolume, 0)) {
14 fprintf(stderr, "Sound volume not supported.\n");
17 if(!glk_gestalt(gestalt_SoundNotify, 0)) {
18 fprintf(stderr, "Sound notification not supported.\n");
22 schanid_t sc = glk_schannel_create(0);
24 fprintf(stderr, "Could not create sound channel.\n");
28 /* Open the main window. */
29 winid_t mainwin = glk_window_open(0, 0, 0, wintype_TextBuffer, 1);
31 /* It's possible that the main window failed to open. There's
32 nothing we can do without it, so exit. */
35 glk_set_window(mainwin);
44 glk_put_string("\nprompt> ");
45 glk_request_line_event(mainwin, buffer, 1024, 0);
47 printf("Received event:\n");
48 printf("Type: %d\n", ev.type);
51 printf( "%d\n", glk_window_get_rock(ev.win) );
54 printf("Var1: %d\n", ev.val1);
55 printf("Var2: %d\n", ev.val2);
57 case evtype_LineInput:
58 // Null-terminate string
62 if(strcmp(buffer, "quit") == 0) {
63 glk_put_string("That's all, folks.\n");
65 } else if(strcmp(buffer, "play") == 0) {
66 glk_put_string("Playing sound.\n");
67 if(!glk_schannel_play_ext(sc, 3, repeat, 1)) {
68 fprintf(stderr, "Could not start sound channel.\n");
71 } else if(strcmp(buffer, "stop") == 0) {
72 glk_put_string("Stopping sound.\n");
73 glk_schannel_stop(sc);
74 } else if(strcmp(buffer, "repeat") == 0) {
75 glk_put_string("Setting repeat to ");
77 glk_put_string("TWICE.\n");
79 } else if(repeat == 2) {
80 glk_put_string("INFINITE.\n");
82 } else if(repeat == -1) {
83 glk_put_string("DON'T PLAY.\n");
85 } else if(repeat == 0) {
86 glk_put_string("ONCE.\n");
89 } else if(strcmp(buffer, "help") == 0) {
90 glk_put_string("Type PLAY or REPEAT or STOP or QUIT.\n");
93 case evtype_SoundNotify:
94 glk_cancel_line_event(mainwin, NULL);
95 glk_put_string("\nGot sound notify event!\n");
102 glk_schannel_stop(sc);
103 glk_schannel_destroy(sc);