drv_stdout.c
上传用户:wstnjxml
上传日期:2014-04-03
资源大小:7248k
文件大小:2k
源码类别:

Windows CE

开发平台:

C/C++

  1. /* MikMod sound library
  2. (c) 1998, 1999, 2000 Miodrag Vallat and others - see file AUTHORS for
  3. complete list.
  4. This library is free software; you can redistribute it and/or modify
  5. it under the terms of the GNU Library General Public License as
  6. published by the Free Software Foundation; either version 2 of
  7. the License, or (at your option) any later version.
  8.  
  9. This program is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12. GNU Library General Public License for more details.
  13.  
  14. You should have received a copy of the GNU Library General Public
  15. License along with this library; if not, write to the Free Software
  16. Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  17. 02111-1307, USA.
  18. */
  19. /*==============================================================================
  20.   $Id: drv_stdout.c,v 1.3 2004/01/31 22:39:40 raph Exp $
  21.   Output data to stdout
  22. ==============================================================================*/
  23. #ifdef HAVE_CONFIG_H
  24. #include "config.h"
  25. #endif
  26. #ifdef HAVE_UNISTD_H
  27. #include <unistd.h>
  28. #endif
  29. #include <stdlib.h>
  30. #include "mikmod_internals.h"
  31. #define BUFFERSIZE 32768
  32. static SBYTE *audiobuffer=NULL;
  33. static BOOL stdout_IsThere(void)
  34. {
  35. /* only allow this driver on pipes */
  36. return 1-isatty(1);
  37. }
  38. static BOOL stdout_Init(void)
  39. {
  40. if(!(audiobuffer=(SBYTE*)_mm_malloc(BUFFERSIZE))) return 1;
  41. #ifdef __EMX__
  42. _fsetmode(stdout,"b");
  43. #endif
  44. return VC_Init();
  45. }
  46. static void stdout_Exit(void)
  47. {
  48. VC_Exit();
  49. #ifdef __EMX__
  50. _fsetmode(stdout,"t");
  51. #endif
  52. if (audiobuffer) {
  53. free(audiobuffer);
  54. audiobuffer=NULL;
  55. }
  56. }
  57. static void stdout_Update(void)
  58. {
  59. #ifdef WIN32
  60. _write
  61. #else
  62. write
  63. #endif
  64.      (1,audiobuffer,VC_WriteBytes((SBYTE*)audiobuffer,BUFFERSIZE));
  65. }
  66. static BOOL stdout_Reset(void)
  67. {
  68. VC_Exit();
  69. return VC_Init();
  70. }
  71. MIKMODAPI MDRIVER drv_stdout={
  72. NULL,
  73. "stdout",
  74. "Standard output driver v1.1",
  75. 0,255,
  76. "stdout",
  77. NULL,
  78. NULL,
  79. stdout_IsThere,
  80. VC_SampleLoad,
  81. VC_SampleUnload,
  82. VC_SampleSpace,
  83. VC_SampleLength,
  84. stdout_Init,
  85. stdout_Exit,
  86. stdout_Reset,
  87. VC_SetNumVoices,
  88. VC_PlayStart,
  89. VC_PlayStop,
  90. stdout_Update,
  91. NULL,
  92. VC_VoiceSetVolume,
  93. VC_VoiceGetVolume,
  94. VC_VoiceSetFrequency,
  95. VC_VoiceGetFrequency,
  96. VC_VoiceSetPanning,
  97. VC_VoiceGetPanning,
  98. VC_VoicePlay,
  99. VC_VoiceStop,
  100. VC_VoiceStopped,
  101. VC_VoiceGetPosition,
  102. VC_VoiceRealVolume
  103. };
  104. /* ex:set ts=4: */