Merge branch 'new-sound-api'
authorPhilip Chimento <philip.chimento@gmail.com>
Wed, 18 Jan 2012 12:59:59 +0000 (13:59 +0100)
committerPhilip Chimento <philip.chimento@gmail.com>
Wed, 18 Jan 2012 12:59:59 +0000 (13:59 +0100)
Conflicts:
docs/reference/chimara-docs.sgml

1  2 
docs/reference/chimara-sections.txt
libchimara/gi_dispa.c

index 809f3a591208594c10ab3f0560c3805a3c3a6acb,74e9e6a79a2c73ca6603ee0abf0599cb10ec848a..994f21b084c551ca3ed2412bb0778d0f64459249
@@@ -22,12 -22,12 +22,12 @@@ chimara_glk_set_css_from_strin
  chimara_glk_run
  chimara_glk_stop
  chimara_glk_wait
 +chimara_glk_unload_plugin
  chimara_glk_get_running
  chimara_glk_feed_char_input
  chimara_glk_feed_line_input
  chimara_glk_is_char_input_pending
  chimara_glk_is_line_input_pending
 -chimara_glk_get_num_tag_names
  chimara_glk_get_tag
  chimara_glk_get_tag_names
  chimara_glk_update_style
@@@ -130,6 -130,7 +130,7 @@@ gestalt_MouseInpu
  gestalt_Timer
  gestalt_Graphics
  gestalt_DrawImage
+ gestalt_Sound2
  gestalt_Sound
  gestalt_SoundVolume
  gestalt_SoundNotify
@@@ -494,6 -495,7 +495,7 @@@ GLK_MODULE_IMAG
  <FILE>glk-sound-channels</FILE>
  <TITLE>Creating and Destroying Sound Channels</TITLE>
  glk_schannel_create
+ glk_schannel_create_ext
  glk_schannel_destroy
  </SECTION>
  
  <TITLE>Playing Sounds</TITLE>
  glk_schannel_play
  glk_schannel_play_ext
+ glk_schannel_play_multi
  glk_schannel_stop
+ glk_schannel_pause
+ glk_schannel_unpause
  glk_schannel_set_volume
+ glk_schannel_set_volume_ext
  glk_sound_load_hint
  </SECTION>
  
@@@ -518,6 -524,7 +524,7 @@@ glk_schannel_get_roc
  <FILE>glk-sound-testing</FILE>
  <TITLE>Testing for Sound Capabilities</TITLE>
  GLK_MODULE_SOUND
+ GLK_MODULE_SOUND2
  </SECTION>
  
  <SECTION>
diff --combined libchimara/gi_dispa.c
index 4564ae4d6a37a36ad4a84c9c5035fb1ecb602e60,f38eff0e832ee2d09d18511d191e94789da806f1..f0099b919d7e5829b3e95090a181aac92d16fa55
@@@ -1,4 -1,4 +1,4 @@@
- /* gi_dispa.c: Dispatch layer for Glk API, version 0.7.2.
+ /* gi_dispa.c: Dispatch layer for Glk API, version 0.7.3.
      Designed by Andrew Plotkin <erkyrath@eblong.com>
      http://eblong.com/zarf/glk/
  
@@@ -49,6 -49,7 +49,7 @@@ static gidispatch_intconst_t intconstan
      { "evtype_Redraw", (6) },
      { "evtype_SoundNotify", (7) },
      { "evtype_Timer", (1) },
+     { "evtype_VolumeNotify", (9) },
  
      { "filemode_Read", (0x02) },
      { "filemode_ReadWrite", (0x03) },
@@@ -80,6 -81,7 +81,7 @@@
      { "gestalt_LineTerminators", (18) },
      { "gestalt_MouseInput", (4) },
      { "gestalt_Sound", (8) },
+     { "gestalt_Sound2", (21) },
      { "gestalt_SoundMusic", (13) },
      { "gestalt_SoundNotify", (10) },
      { "gestalt_SoundVolume", (9) },
@@@ -260,6 -262,13 +262,13 @@@ static gidispatch_function_t function_t
      { 0x00FA, glk_schannel_stop, "schannel_stop" },
      { 0x00FB, glk_schannel_set_volume, "schannel_set_volume" },
      { 0x00FC, glk_sound_load_hint, "sound_load_hint" },
+ #ifdef GLK_MODULE_SOUND2
+     { 0x00F4, glk_schannel_create_ext, "schannel_create_ext" },
+     { 0x00F7, glk_schannel_play_multi, "schannel_play_multi" },
+     { 0x00FD, glk_schannel_set_volume_ext, "schannel_set_volume_ext" },
+     { 0x00FE, glk_schannel_pause, "schannel_pause" },
+     { 0x00FF, glk_schannel_unpause, "schannel_unpause" },
+ #endif /* GLK_MODULE_SOUND2 */
  #endif /* GLK_MODULE_SOUND */
  #ifdef GLK_MODULE_HYPERLINKS
      { 0x0100, glk_set_hyperlink, "set_hyperlink" },
@@@ -426,7 -435,7 +435,7 @@@ char *gidispatch_prototype(glui32 funcn
          case 0x0042: /* stream_open_file */
              return "4QcIuIu:Qb";
          case 0x0043: /* stream_open_memory */
 -            return "4&+#!CnIuIu:Qb";
 +            return "4&#!CnIuIu:Qb";
          case 0x0044: /* stream_close */
              return "2Qb<[2IuIu]:";
          case 0x0045: /* stream_set_position */
              return "2QdIu:";
          case 0x00FC: /* sound_load_hint */
              return "2IuIu:";
+ #ifdef GLK_MODULE_SOUND2
+         case 0x00F4: /* schannel_create_ext */
+             return "3IuIu:Qd";
+         case 0x00F7: /* schannel_play_multi */
+             return "4>+#Qd>+#IuIu:Iu";
+         case 0x00FD: /* schannel_set_volume_ext */
+             return "4QdIuIuIu:";
+         case 0x00FE: /* schannel_pause */
+             return "1Qd:";
+         case 0x00FF: /* schannel_unpause */
+             return "1Qd:";
+ #endif /* GLK_MODULE_SOUND2 */
  #endif /* GLK_MODULE_SOUND */
  
  #ifdef GLK_MODULE_HYPERLINKS
          case 0x0138: /* stream_open_file_uni */
              return "4QcIuIu:Qb";
          case 0x0139: /* stream_open_memory_uni */
 -            return "4&+#!IuIuIu:Qb";
 +            return "4&#!IuIuIu:Qb";
          case 0x0140: /* request_char_event_uni */
              return "1Qa:";
          case 0x0141: /* request_line_event_uni */
@@@ -1081,6 -1103,31 +1103,31 @@@ void gidispatch_call(glui32 funcnum, gl
          case 0x00FC: /* sound_load_hint */
              glk_sound_load_hint(arglist[0].uint, arglist[1].uint);
              break;
+ #ifdef GLK_MODULE_SOUND2
+         case 0x00F4: /* schannel_create_ext */
+             arglist[3].opaqueref = glk_schannel_create_ext(arglist[0].uint, arglist[1].uint);
+             break;
+         case 0x00F7: /* schannel_play_multi */
+             if (arglist[0].ptrflag && arglist[3].ptrflag)
+                 arglist[8].uint = glk_schannel_play_multi(arglist[1].array, arglist[2].uint, arglist[4].array, arglist[5].uint, arglist[6].uint);
+             else if (arglist[0].ptrflag)
+                 arglist[6].uint = glk_schannel_play_multi(arglist[1].array, arglist[2].uint, NULL, 0, arglist[4].uint);
+             else if (arglist[1].ptrflag)
+                 arglist[6].uint = glk_schannel_play_multi(NULL, 0, arglist[2].array, arglist[3].uint, arglist[4].uint);
+             else
+                 arglist[4].uint = glk_schannel_play_multi(NULL, 0, NULL, 0, arglist[2].uint);
+             break;
+         case 0x00FD: /* schannel_set_volume_ext */
+             glk_schannel_set_volume_ext(arglist[0].opaqueref, arglist[1].uint, arglist[2].uint, arglist[3].uint);
+             break;
+         case 0x00FE: /* schannel_pause */
+             glk_schannel_pause(arglist[0].opaqueref);
+             break;
+         case 0x00FF: /* schannel_unpause */
+             glk_schannel_unpause(arglist[0].opaqueref);
+             break;
+ #endif /* GLK_MODULE_SOUND2 */
  #endif /* GLK_MODULE_SOUND */
  
  #ifdef GLK_MODULE_HYPERLINKS