- Timestamp:
- Mar 24, 2001, 4:40:04 PM (24 years ago)
- Location:
- trunk/src/winmm
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/winmm/initterm.cpp
r5356 r5366 26 26 #define INCL_DOSMODULEMGR 27 27 #define INCL_DOSPROCESS 28 #include <os2wrap.h> 28 #include <os2wrap.h> //Odin32 OS/2 api wrappers 29 29 #include <stdlib.h> 30 30 #include <stdio.h> … … 39 39 #include "auxiliary.h" 40 40 41 #define DBG_LOCALLOG 41 #define DBG_LOCALLOG DBG_initterm 42 42 #include "dbglocal.h" 43 43 … … 58 58 BOOL WINAPI OdinLibMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID fImpLoad) 59 59 { 60 static BOOL 61 60 static BOOL bInitDone = FALSE; 61 62 62 switch (fdwReason) 63 63 { 64 64 case DLL_PROCESS_ATTACH: 65 if (!MULTIMEDIA_CreateIData(hinstDLL)) 66 return FALSE; 67 68 if (!bInitDone) { /* to be done only once */ 69 if (!MULTIMEDIA_MciInit() /*|| !MMDRV_Init() */ ) { 70 MULTIMEDIA_DeleteIData(); 71 return FALSE; 72 } 73 bInitDone = TRUE; 74 } 75 76 return TRUE; 65 if (!MULTIMEDIA_CreateIData(hinstDLL)) 66 return FALSE; 67 68 if (!bInitDone) { /* to be done only once */ 69 if (!MULTIMEDIA_MciInit() /*|| !MMDRV_Init() */ ) { 70 MULTIMEDIA_DeleteIData(); 71 return FALSE; 72 } 73 bInitDone = TRUE; 74 } 75 return TRUE; 77 76 78 77 case DLL_THREAD_ATTACH: 79 78 case DLL_THREAD_DETACH: 80 79 return TRUE; 81 80 82 81 case DLL_PROCESS_DETACH: 83 82 MULTIMEDIA_DeleteIData(); 84 83 auxOS2Close(); /* SvL: Close aux device if necessary */ 85 86 87 84 IRTMidiShutdown; /* JT: Shutdown RT Midi subsystem, if running. */ 85 ctordtorTerm(); 86 return TRUE; 88 87 } 89 88 return FALSE; … … 99 98 ULONG DLLENTRYPOINT_CCONV DLLENTRYPOINT_NAME(ULONG hModule, ULONG ulFlag) 100 99 { 101 size_t i; 102 APIRET rc; 100 /*-------------------------------------------------------------------------*/ 101 /* If ulFlag is zero then the DLL is being loaded so initialization should */ 102 /* be performed. If ulFlag is 1 then the DLL is being freed so */ 103 /* termination should be performed. */ 104 /*-------------------------------------------------------------------------*/ 103 105 104 /*-------------------------------------------------------------------------*/ 105 /* If ulFlag is zero then the DLL is being loaded so initialization should */ 106 /* be performed. If ulFlag is 1 then the DLL is being freed so */ 107 /* termination should be performed. */ 108 /*-------------------------------------------------------------------------*/ 106 switch (ulFlag) 107 { 108 case 0 : 109 ctordtorInit(); 109 110 110 switch (ulFlag) { 111 case 0 : 112 ctordtorInit(); 111 ParseLogStatus(); 113 112 114 ParseLogStatus(); 113 CheckVersionFromHMOD(PE2LX_VERSION, hModule); /*PLF Wed 98-03-18 05:28:48*/ 114 dllHandle = RegisterLxDll(hModule, OdinLibMain, (PVOID)&_Resource_PEResTab); 115 if(dllHandle == 0) 116 return 0UL;/* Error */ 115 117 116 CheckVersionFromHMOD(PE2LX_VERSION, hModule); /*PLF Wed 98-03-18 05:28:48*/ 118 dprintf(("winmm init %s %s (%x)", __DATE__, __TIME__, DLLENTRYPOINT_NAME)); 119 break; 120 case 1 : 121 auxOS2Close(); /* SvL: Close aux device if necessary */ 122 if(dllHandle) { 123 UnregisterLxDll(dllHandle); 124 } 125 break; 126 default : 127 return 0UL; 128 } 117 129 118 dllHandle = RegisterLxDll(hModule, OdinLibMain, (PVOID)&_Resource_PEResTab); 119 if(dllHandle == 0) 120 return 0UL;/* Error */ 121 122 dprintf(("winmm init %s %s (%x)", __DATE__, __TIME__, DLLENTRYPOINT_NAME)); 123 124 break; 125 case 1 : 126 auxOS2Close(); /* SvL: Close aux device if necessary */ 127 if(dllHandle) { 128 UnregisterLxDll(dllHandle); 129 } 130 break; 131 default : 132 return 0UL; 133 } 134 135 /***********************************************************/ 136 /* A non-zero value must be returned to indicate success. */ 137 /***********************************************************/ 138 return 1UL; 130 /***********************************************************/ 131 /* A non-zero value must be returned to indicate success. */ 132 /***********************************************************/ 133 return 1UL; 139 134 } 140 135 //****************************************************************************** -
trunk/src/winmm/waveout.cpp
r5358 r5366 1 /* $Id: waveout.cpp,v 1.2 0 2001-03-23 16:23:45sandervl Exp $ */1 /* $Id: waveout.cpp,v 1.21 2001-03-24 15:40:04 sandervl Exp $ */ 2 2 //#undef DEBUG 3 3 /* … … 28 28 29 29 #include "waveoutdart.h" 30 #include "waveoutdaud.h" 30 31 #include "misc.h" 31 32 #include "winmm.h" … … 53 54 MMRESULT rc; 54 55 55 if(pwfx == NULL)56 if(pwfx == NULL) 56 57 return(WAVERR_BADFORMAT); 57 58 58 if(fdwOpen == WAVE_FORMAT_QUERY) { 59 if(fdwOpen == WAVE_FORMAT_QUERY) 60 { 59 61 if(DartWaveOut::queryFormat(pwfx->wFormatTag, pwfx->nChannels, pwfx->nSamplesPerSec, 60 62 pwfx->wBitsPerSample) == TRUE) { … … 62 64 } 63 65 else return(WAVERR_BADFORMAT); 64 }65 66 if(phwo == NULL)66 } 67 68 if(phwo == NULL) 67 69 return(MMSYSERR_INVALPARAM); 68 70 69 *phwo = (HWAVEOUT)new DartWaveOut(pwfx, fdwOpen, dwCallback, dwInstance); 70 71 if(*phwo == NULL) { 71 if(DAudioWaveOut::isDirectAudioAvailable()) { 72 *phwo = (HWAVEOUT)new DAudioWaveOut(pwfx, fdwOpen, dwCallback, dwInstance); 73 } 74 else *phwo = (HWAVEOUT)new DartWaveOut(pwfx, fdwOpen, dwCallback, dwInstance); 75 76 if(*phwo == NULL) { 72 77 return(MMSYSERR_NODRIVER); 73 }74 75 rc = ((WaveOut *)*phwo)->getError();76 if(rc != MMSYSERR_NOERROR) {78 } 79 80 rc = ((WaveOut *)*phwo)->getError(); 81 if(rc != MMSYSERR_NOERROR) { 77 82 delete (WaveOut *)*phwo; 78 83 return(rc); 79 }80 return(MMSYSERR_NOERROR);84 } 85 return(MMSYSERR_NOERROR); 81 86 } 82 87 /******************************************************************************/ … … 87 92 UINT, cbwh) 88 93 { 89 WaveOut *dwave = (WaveOut *)hwo;90 91 if(WaveOut::find(dwave) == TRUE)92 {94 WaveOut *dwave = (WaveOut *)hwo; 95 96 if(WaveOut::find(dwave) == TRUE) 97 { 93 98 if(!(pwh->dwFlags & WHDR_PREPARED) || pwh->lpData == NULL) 94 99 return WAVERR_UNPREPARED; … … 102 107 dprintf(("waveOutWrite ptr %x size %d %x %x %x %x %x %x", pwh->lpData, pwh->dwBufferLength, pwh->dwBytesRecorded, pwh->dwUser, pwh->dwFlags, pwh->dwLoops, pwh->lpNext, pwh->reserved)); 103 108 return(dwave->write(pwh, cbwh)); 104 }105 else return(MMSYSERR_INVALHANDLE);109 } 110 else return(MMSYSERR_INVALHANDLE); 106 111 } 107 112 /******************************************************************************/ … … 121 126 HWAVEOUT, hwaveout) 122 127 { 123 WaveOut *dwave = (WaveOut *)hwaveout;124 125 dprintf(("WINMM:waveOutBreakLoop (implemented as reset) %X\n", hwaveout));126 if(WaveOut::find(dwave) == TRUE)127 return(dwave->reset());128 elsereturn(MMSYSERR_INVALHANDLE);128 WaveOut *dwave = (WaveOut *)hwaveout; 129 130 dprintf(("WINMM:waveOutBreakLoop (implemented as reset) %X\n", hwaveout)); 131 if(WaveOut::find(dwave) == TRUE) 132 return(dwave->reset()); 133 else return(MMSYSERR_INVALHANDLE); 129 134 } 130 135 /******************************************************************************/ … … 133 138 HWAVEOUT, hwaveout) 134 139 { 135 WaveOut *dwave = (WaveOut *)hwaveout;136 137 if(WaveOut::find(dwave) == TRUE)138 {140 WaveOut *dwave = (WaveOut *)hwaveout; 141 142 if(WaveOut::find(dwave) == TRUE) 143 { 139 144 if(dwave->getState() == STATE_PLAYING) 140 145 return(WAVERR_STILLPLAYING); … … 142 147 delete dwave; 143 148 return(MMSYSERR_NOERROR); 144 }145 else return(MMSYSERR_INVALHANDLE);149 } 150 else return(MMSYSERR_INVALHANDLE); 146 151 } 147 152 /******************************************************************************/ … … 150 155 HWAVEOUT, hwaveout) 151 156 { 152 WaveOut *dwave = (WaveOut *)hwaveout;153 154 if(WaveOut::find(dwave) == TRUE)157 WaveOut *dwave = (WaveOut *)hwaveout; 158 159 if(WaveOut::find(dwave) == TRUE) 155 160 return(dwave->pause()); 156 else return(MMSYSERR_INVALHANDLE);161 else return(MMSYSERR_INVALHANDLE); 157 162 } 158 163 /******************************************************************************/ … … 161 166 HWAVEOUT, hwaveout) 162 167 { 163 WaveOut *dwave = (WaveOut *)hwaveout;164 165 if(WaveOut::find(dwave) == TRUE)166 return(dwave->restart());167 elsereturn(MMSYSERR_INVALHANDLE);168 WaveOut *dwave = (WaveOut *)hwaveout; 169 170 if(WaveOut::find(dwave) == TRUE) 171 return(dwave->restart()); 172 else return(MMSYSERR_INVALHANDLE); 168 173 } 169 174 /******************************************************************************/ … … 174 179 UINT, cbwh) 175 180 { 176 WaveOut *dwave = (WaveOut *)hwo;177 178 if(WaveOut::find(dwave) == TRUE)179 {181 WaveOut *dwave = (WaveOut *)hwo; 182 183 if(WaveOut::find(dwave) == TRUE) 184 { 180 185 if(pwh->dwFlags & WHDR_INQUEUE) 181 186 return WAVERR_STILLPLAYING; … … 185 190 pwh->lpNext = NULL; 186 191 return(MMSYSERR_NOERROR); 187 }188 else return(MMSYSERR_INVALHANDLE);192 } 193 else return(MMSYSERR_INVALHANDLE); 189 194 } 190 195 /******************************************************************************/ … … 195 200 UINT, cbwh) 196 201 { 197 WaveOut *dwave = (WaveOut *)hwo;198 199 if(WaveOut::find(dwave) == TRUE)200 {202 WaveOut *dwave = (WaveOut *)hwo; 203 204 if(WaveOut::find(dwave) == TRUE) 205 { 201 206 if(pwh->dwFlags & WHDR_INQUEUE) 202 207 return WAVERR_STILLPLAYING; … … 205 210 pwh->dwFlags |= WHDR_DONE; 206 211 return(MMSYSERR_NOERROR); 207 }208 else return(MMSYSERR_INVALHANDLE);212 } 213 else return(MMSYSERR_INVALHANDLE); 209 214 } 210 215 /******************************************************************************/ … … 217 222 WaveOut *dwave = (WaveOut *)hwo; 218 223 219 if(pmmt == NULL)224 if(pmmt == NULL) 220 225 return MMSYSERR_INVALPARAM; 221 226 222 if(WaveOut::find(dwave) == TRUE)223 {224 ULONG position;227 if(WaveOut::find(dwave) == TRUE) 228 { 229 ULONG position; 225 230 226 231 position = dwave->getPosition(); … … 260 265 } 261 266 return MMSYSERR_NOERROR; 262 }263 else return(MMSYSERR_INVALHANDLE);267 } 268 else return(MMSYSERR_INVALHANDLE); 264 269 } 265 270 /******************************************************************************/ … … 270 275 UINT, cbwoc) 271 276 { 272 if(WaveOut::getNumDevices() == 0) {277 if(WaveOut::getNumDevices() == 0) { 273 278 memset(pwoc, 0, sizeof(*pwoc)); 274 279 return MMSYSERR_NODRIVER; 275 }276 277 // we have to fill in this thing278 pwoc->wMid = 0; /* manufacturer ID */279 pwoc->wPid = 0; /* product ID */280 pwoc->vDriverVersion = 0x0001; /* version of the driver */281 strcpy( pwoc->szPname, "OS/2 DART Wave Out" ); /* product name */282 pwoc->dwFormats = WAVE_FORMAT_1M08 | WAVE_FORMAT_1S08 |283 WAVE_FORMAT_1M16 | WAVE_FORMAT_1S16 |284 WAVE_FORMAT_2M08 | WAVE_FORMAT_2S08 |285 WAVE_FORMAT_2M16 | WAVE_FORMAT_2S16 |286 WAVE_FORMAT_4M08 | WAVE_FORMAT_4S08 |287 WAVE_FORMAT_4M16 | WAVE_FORMAT_4S16;288 289 pwoc->wChannels = 2; /* number of sources supported */290 pwoc->wReserved1 = 0; /* packing */291 pwoc->dwSupport = WAVECAPS_LRVOLUME | WAVECAPS_VOLUME;292 293 return MMSYSERR_NOERROR;280 } 281 282 // we have to fill in this thing 283 pwoc->wMid = 0; /* manufacturer ID */ 284 pwoc->wPid = 0; /* product ID */ 285 pwoc->vDriverVersion = 0x0001; /* version of the driver */ 286 strcpy( pwoc->szPname, "OS/2 DART Wave Out" ); /* product name */ 287 pwoc->dwFormats = WAVE_FORMAT_1M08 | WAVE_FORMAT_1S08 | 288 WAVE_FORMAT_1M16 | WAVE_FORMAT_1S16 | 289 WAVE_FORMAT_2M08 | WAVE_FORMAT_2S08 | 290 WAVE_FORMAT_2M16 | WAVE_FORMAT_2S16 | 291 WAVE_FORMAT_4M08 | WAVE_FORMAT_4S08 | 292 WAVE_FORMAT_4M16 | WAVE_FORMAT_4S16; 293 294 pwoc->wChannels = 2; /* number of sources supported */ 295 pwoc->wReserved1 = 0; /* packing */ 296 pwoc->dwSupport = WAVECAPS_LRVOLUME | WAVECAPS_VOLUME; 297 298 return MMSYSERR_NOERROR; 294 299 } 295 300 /******************************************************************************/ … … 300 305 UINT, cbwoc) 301 306 { 302 if(WaveOut::getNumDevices() == 0) {307 if(WaveOut::getNumDevices() == 0) { 303 308 memset(pwoc, 0, sizeof(*pwoc)); 304 309 return MMSYSERR_NODRIVER; 305 }306 // we have to fill in this thing307 pwoc->wMid = 0; /* manufacturer ID */308 pwoc->wPid = 0; /* product ID */309 pwoc->vDriverVersion = 0x0001; /* version of the driver */310 lstrcpyW(pwoc->szPname, (LPCWSTR)L"OS/2 DART Wave Out"); /* product name */311 pwoc->dwFormats = WAVE_FORMAT_1M08 | WAVE_FORMAT_1S08 |312 WAVE_FORMAT_1M16 | WAVE_FORMAT_1S16 |313 WAVE_FORMAT_2M08 | WAVE_FORMAT_2S08 |314 WAVE_FORMAT_2M16 | WAVE_FORMAT_2S16 |315 WAVE_FORMAT_4M08 | WAVE_FORMAT_4S08 |316 WAVE_FORMAT_4M16 | WAVE_FORMAT_4S16;317 318 pwoc->wChannels = 2; /* number of sources supported */319 pwoc->wReserved1 = 0; /* packing */320 pwoc->dwSupport = WAVECAPS_LRVOLUME | WAVECAPS_VOLUME;321 322 return MMSYSERR_NOERROR;310 } 311 // we have to fill in this thing 312 pwoc->wMid = 0; /* manufacturer ID */ 313 pwoc->wPid = 0; /* product ID */ 314 pwoc->vDriverVersion = 0x0001; /* version of the driver */ 315 lstrcpyW(pwoc->szPname, (LPCWSTR)L"OS/2 DART Wave Out"); /* product name */ 316 pwoc->dwFormats = WAVE_FORMAT_1M08 | WAVE_FORMAT_1S08 | 317 WAVE_FORMAT_1M16 | WAVE_FORMAT_1S16 | 318 WAVE_FORMAT_2M08 | WAVE_FORMAT_2S08 | 319 WAVE_FORMAT_2M16 | WAVE_FORMAT_2S16 | 320 WAVE_FORMAT_4M08 | WAVE_FORMAT_4S08 | 321 WAVE_FORMAT_4M16 | WAVE_FORMAT_4S16; 322 323 pwoc->wChannels = 2; /* number of sources supported */ 324 pwoc->wReserved1 = 0; /* packing */ 325 pwoc->dwSupport = WAVECAPS_LRVOLUME | WAVECAPS_VOLUME; 326 327 return MMSYSERR_NOERROR; 323 328 } 324 329 /******************************************************************************/ … … 335 340 UINT, cchText) 336 341 { 337 char * theMsg = getWinmmMsg( wError );338 if(theMsg) {342 char * theMsg = getWinmmMsg( wError ); 343 if(theMsg) { 339 344 strncpy( lpText, theMsg, cchText ); 340 }341 else342 {345 } 346 else 347 { 343 348 char errMsg[100]; 344 349 sprintf( errMsg, "Unknown error number %d", wError ); 345 350 strncpy( lpText, errMsg, cchText ); 346 }347 return MMSYSERR_NOERROR;351 } 352 return MMSYSERR_NOERROR; 348 353 } 349 354 /******************************************************************************/ … … 354 359 UINT, cchText) 355 360 { 356 char * theMsg = getWinmmMsg( wError );357 if(theMsg) {361 char * theMsg = getWinmmMsg( wError ); 362 if(theMsg) { 358 363 AsciiToUnicode( theMsg, lpText ); 359 }360 else361 {364 } 365 else 366 { 362 367 char errMsg[100]; 363 368 sprintf( errMsg, "Unknown error number %d", wError ); 364 369 AsciiToUnicode( errMsg, lpText ); 365 }366 return MMSYSERR_NOERROR;370 } 371 return MMSYSERR_NOERROR; 367 372 } 368 373 /******************************************************************************/ … … 372 377 LPUINT, puDeviceID) 373 378 { 374 WaveOut *dwave = (WaveOut *)hwo;375 if(WaveOut::find(dwave) == TRUE)376 {379 WaveOut *dwave = (WaveOut *)hwo; 380 if(WaveOut::find(dwave) == TRUE) 381 { 377 382 *puDeviceID = 1; 378 383 return MMSYSERR_NOERROR; 379 }380 else return(MMSYSERR_INVALHANDLE);384 } 385 else return(MMSYSERR_INVALHANDLE); 381 386 } 382 387 /******************************************************************************/ … … 397 402 DWORD, dwPitch) 398 403 { 399 WaveOut *dwave = (WaveOut *)hwo;400 if(WaveOut::find(dwave) == TRUE)401 return MMSYSERR_NOTSUPPORTED;402 elsereturn(MMSYSERR_INVALHANDLE);404 WaveOut *dwave = (WaveOut *)hwo; 405 if(WaveOut::find(dwave) == TRUE) 406 return MMSYSERR_NOTSUPPORTED; 407 else return(MMSYSERR_INVALHANDLE); 403 408 } 404 409 /******************************************************************************/ -
trunk/src/winmm/waveoutdaud.cpp
r5358 r5366 1 /* $Id: waveoutdaud.cpp,v 1. 1 2001-03-23 16:23:46sandervl Exp $ */1 /* $Id: waveoutdaud.cpp,v 1.2 2001-03-24 15:40:04 sandervl Exp $ */ 2 2 3 3 /* … … 73 73 74 74 rc = DosDevIOCtl(hDAudioDrv, DAUDIO_IOCTL_CAT, DAUDIO_OPEN, NULL, 0, 75 75 &ParmLength, &init, DataLength, &DataLength); 76 76 if(rc) { 77 77 dprintf(("DosDevIOCtl failed with error %d\n", rc)); … … 93 93 cmd.Thread.hSemaphore = hSem; 94 94 rc = DosDevIOCtl(hDAudioDrv, DAUDIO_IOCTL_CAT, DAUDIO_REGISTER_THREAD, NULL, 0, 95 95 &ParmLength, &cmd, DataLength, &DataLength); 96 96 if(rc) { 97 97 dprintf(("DosDevIOCtl failed with error %d\n", rc)); … … 337 337 /******************************************************************************/ 338 338 /******************************************************************************/ 339 BOOL DAudioWaveOut::isDirectAudioAvailable() 340 { 341 static BOOL fAvailable = FALSE; 342 static BOOL fTested = FALSE; 343 344 APIRET rc; 345 ULONG action; 346 HFILE hDriver; 347 348 if(!fTested) { 349 rc = DosOpen("DAUDIO1$", &hDriver, &action, 0, 350 FILE_NORMAL, FILE_OPEN, OPEN_ACCESS_READWRITE | 351 OPEN_SHARE_DENYNONE | OPEN_FLAGS_WRITE_THROUGH, 352 NULL ); 353 fTested = TRUE; 354 if(rc) { 355 return FALSE; 356 } 357 DosClose(hDriver); 358 fAvailable = TRUE; 359 } 360 return fAvailable; 361 362 } 363 /******************************************************************************/ 364 /******************************************************************************/ 339 365 MMRESULT DAudioWaveOut::setVolume(ULONG ulVol) 340 366 { … … 354 380 355 381 rc = DosDevIOCtl(hDAudioDrv, DAUDIO_IOCTL_CAT, cmd, NULL, 0, 356 382 &ParmLength, pDataPacket, DataLength, &DataLength); 357 383 if(rc) { 358 384 dprintf(("DosDevIOCtl failed with error %d (command %d)", rc, cmd)); … … 417 443 return 0; 418 444 } 419 dwave->handler(); 420 } 421 422 } 423 /******************************************************************************/ 424 /******************************************************************************/ 425 445 for(int i=0;i<postcnt;i++) { 446 dwave->handler(); 447 } 448 } 449 450 } 451 /******************************************************************************/ 452 /******************************************************************************/ 453 -
trunk/src/winmm/waveoutdaud.h
r5358 r5366 1 /* $Id: waveoutdaud.h,v 1. 1 2001-03-23 16:23:47sandervl Exp $ */1 /* $Id: waveoutdaud.h,v 1.2 2001-03-24 15:40:04 sandervl Exp $ */ 2 2 3 3 /* … … 12 12 13 13 #include "waveoutbase.h" 14 #include <daudio.h> 15 16 #ifdef _OS2WIN_H 17 typedef DWORD HEV; 18 #endif 14 19 15 20 class DAudioWaveOut : public WaveOut … … 30 35 ULONG nSamplesPerSec, ULONG sampleSize); 31 36 37 38 static BOOL isDirectAudioAvailable(); 32 39 33 40 protected:
Note:
See TracChangeset
for help on using the changeset viewer.