- Timestamp:
- Dec 3, 2000, 11:19:43 PM (25 years ago)
- Location:
- trunk/src/winmm
- Files:
-
- 7 added
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/winmm/driver.cpp
r4629 r4748 1 /* $Id: driver.cpp,v 1. 6 2000-11-19 12:46:50sandervl Exp $ */1 /* $Id: driver.cpp,v 1.7 2000-12-03 22:18:17 sandervl Exp $ */ 2 2 3 3 /* 4 4 * Driver multimedia apis 5 5 * 6 * Copyright 1994 Martin Ayotte 7 * Copyright 1998 Marcus Meissner 6 8 * Copyright 1998 Patrick Haller 7 * 9 * Copyright 1998/1999 Eric Pouech 10 * Copyright 2000 Chris Wohlgemuth 8 11 * 9 12 * Project Odin Software License can be found in LICENSE.TXT … … 17 20 18 21 #include <os2win.h> 19 #include <mmsystem.h>20 22 #include <odinwrap.h> 21 23 #include <string.h> … … 23 25 #include <unicode.h> 24 26 25 #include "winmm.h"26 27 #include "os2timer.h" 27 28 28 29 #define DBG_LOCALLOG DBG_driver 29 30 #include "dbglocal.h" 31 32 33 /* Who said goofy boy ? */ 34 #define WINE_DI_MAGIC 0x900F1B01 35 36 typedef struct tagWINE_DRIVER 37 { 38 DWORD dwMagic; 39 char szAliasName[128]; 40 /* as usual LPWINE_DRIVER == hDriver32 */ 41 HDRVR16 hDriver16; 42 union { 43 struct { 44 HMODULE16 hModule; 45 DRIVERPROC16 lpDrvProc; 46 } d16; 47 struct { 48 HMODULE hModule; 49 DRIVERPROC lpDrvProc; 50 } d32; 51 } d; 52 DWORD dwDriverID; 53 DWORD dwFlags; 54 struct tagWINE_DRIVER* lpPrevItem; 55 struct tagWINE_DRIVER* lpNextItem; 56 } WINE_DRIVER, *LPWINE_DRIVER; 57 58 static LPWINE_DRIVER DRIVER_RegisterDriver32(LPCSTR, HMODULE, DRIVERPROC, LPARAM, BOOL); 59 60 static LPWINE_DRIVER lpDrvItemList = NULL; 61 62 /* TODO list : 63 * WINE remark: - LoadModule count and clean up is not handled correctly (it's not a 64 * problem as long as FreeLibrary is not working correctly) 65 * - shoudln't the allocations be done on a per process basis ? 66 */ 67 68 static HDRVR DRIVER_OpenDriverA(LPCSTR lpDriverName, LPCSTR lpSectionName, LPARAM lParam) ; 69 static LPWINE_DRIVER DRIVER_FindFromHDrvr(HDRVR hDrvr); 70 static BOOL DRIVER_CloseDriver(LPWINE_DRIVER lpDrv, DWORD lParam1, DWORD lParam2); 30 71 31 72 ODINDEBUGCHANNEL(WINMM-DRIVER) … … 39 80 * LONG lParam2 40 81 * Variables : 41 * Result : API returncode 42 * Remark : 43 * Status : 44 * 45 * Author : Patrick Haller [Tue, 1998/05/05 10:44] 82 * @return : API returncode 83 * Remark : 84 * @status : Completely 85 * 86 * @author : Patrick Haller [Tue, 1998/05/05 10:44] 87 * @author : Chris Wohlgemuth [Sun, 2000/11/19] 46 88 *****************************************************************************/ 47 89 … … 52 94 LONG, lParam2) 53 95 { 54 dprintf(("WINMM: SendDriverMessage not implemented.\n")); 55 return 0; /* unsuccessful return */ 96 LPWINE_DRIVER lpDrv; 97 LRESULT retval = 0; 98 99 dprintf(("Entering SendDriverMessage (%04x, %04X, %08lX, %08lX)\n", hdrvr, msg, lParam1, lParam2)); 100 101 lpDrv = DRIVER_FindFromHDrvr(hdrvr); 102 103 if (lpDrv != NULL) { 104 if (lpDrv->dwFlags & WINE_GDF_16BIT) { 105 #if 0 106 /*We don't use 16 bit */ 107 mapRet = DRIVER_MapMsg32To16(msg, &lParam1, &lParam2); 108 if (mapRet >= 0) { 109 TRACE("Before CallDriverProc proc=%p driverID=%08lx hDrv=%u wMsg=%04x p1=%08lx p2=%08lx\n", 110 lpDrv->d.d16.lpDrvProc, lpDrv->dwDriverID, lpDrv->hDriver16, msg, lParam1, lParam2); 111 retval = DRIVER_CallTo16_long_lwwll((FARPROC16)lpDrv->d.d16.lpDrvProc, lpDrv->dwDriverID, 112 lpDrv->hDriver16, msg, lParam1, lParam2); 113 if (mapRet >= 1) { 114 DRIVER_UnMapMsg32To16(msg, lParam1, lParam2); 115 } 116 } else { 117 retval = 0; 118 } 119 #endif 120 } else { 121 122 #if 0 123 dprintf(("Before func32 call proc=%p driverID=%08lx hDrv=%u wMsg=%04x p1=%08lx p2=%08lx\n", 124 lpDrv->d.d32.lpDrvProc, lpDrv->dwDriverID, hdrvr, msg, lParam1, lParam2)); 125 #endif 126 127 retval = lpDrv->d.d32.lpDrvProc(lpDrv->dwDriverID, hdrvr, msg, lParam1, lParam2); 128 } 129 } else { 130 dprintf(("Bad driver handle %u\n", hdrvr)); 131 } 132 133 dprintf(("(SendDriverMessage) Driver proc returned retval = %ld (0x%lx)\n", retval, retval)); 134 135 return retval; 56 136 } 57 137 … … 65 145 * LONG lParam 66 146 * Variables : 67 * Result: API returncode68 * Remark : 69 * Status :70 * 71 * Author : Patrick Haller [Tue, 1998/05/05 10:44]147 * @return : API returncode 148 * Remark : 149 * @status : Stub 150 * 151 * @author : Patrick Haller [Tue, 1998/05/05 10:44] 72 152 *****************************************************************************/ 73 153 … … 77 157 LONG, lParam) 78 158 { 79 dprintf(("WINMM: OpenDriver %x %x %x not implemented, lpDriverName, lpSectionName"));159 dprintf(("WINMM: OpenDriver not implemented.\n")); 80 160 return 0; /* unsuccessful return */ 81 161 } … … 90 170 * LONG lParam 91 171 * Variables : 92 * Result: API returncode93 * Remark : 94 * Status :95 * 96 * Author : Patrick Haller [Tue, 1998/05/05 10:44]172 * @return : API returncode 173 * Remark : 174 * @status : Partially tested 175 * 176 * @author : Patrick Haller [Tue, 1998/05/05 10:44] 97 177 *****************************************************************************/ 98 178 … … 102 182 LONG, lParam) 103 183 { 104 dprintf(("WINMM: OpenDriverA %s %s %x not implemented, lpDriverName, lpSectionName"));105 return 0; /* unsuccessful return */184 return DRIVER_OpenDriverA(lpDriverName, lpSectionName, lParam); 185 // return 0; /* unsuccessful return */ 106 186 } 107 187 … … 114 194 * LONG lParam2 115 195 * Variables : 116 * Result:117 * Remark : 118 * Status :119 * 120 * Author : Patrick Haller [Tue, 1998/05/05 10:44]196 * @return : 197 * Remark : 198 * @status : Partially tested 199 * 200 * @author : Patrick Haller [Tue, 1998/05/05 10:44] 121 201 *****************************************************************************/ 122 202 … … 126 206 LONG, lParam2) 127 207 { 128 dprintf(("WINMM: CloseDriver not implemented.\n")); 129 return 0; /* unsuccessful return */ 208 return DRIVER_CloseDriver(DRIVER_FindFromHDrvr(hDrvr), lParam1, lParam2);//return 0; /* unsuccessful return */ 130 209 } 131 210 … … 140 219 * LONG lParam2 141 220 * Variables : 142 * Result : 143 * Remark : 144 * Status : 145 * 146 * Author : Patrick Haller [Tue, 1998/05/05 10:44] 221 * @return : 222 * Remark : 223 * @status : Partially 224 * 225 * @author : Patrick Haller [Tue, 1998/05/05 10:44] 226 * @author : Chris Wohlgemuth [Sun, 2000/11/19] 147 227 *****************************************************************************/ 148 228 … … 154 234 LONG, lParam2) 155 235 { 156 dprintf(("WINMM: DefDriverProc not implemented.\n")); 157 return 0; /* unsuccessful return */ 236 switch (msg) { 237 case DRV_LOAD: 238 case DRV_FREE: 239 case DRV_ENABLE: 240 case DRV_DISABLE: 241 // return 1; 242 case DRV_INSTALL: 243 case DRV_REMOVE: 244 // return DRV_SUCCESS; 245 default: 246 return 0; /* unsuccessful return */ 247 } 248 158 249 } 159 250 … … 168 259 * DWORD dwParam2 169 260 * Variables : 170 * Result:171 * Remark : 172 * Status :173 * 174 * Author : Patrick Haller [Tue, 1998/05/05 10:44]261 * @return : 262 * Remark : 263 * @status : Stub 264 * 265 * @author : Patrick Haller [Tue, 1998/05/05 10:44] 175 266 *****************************************************************************/ 176 267 … … 194 285 * Parameters: HDRVR hDriver 195 286 * Variables : 196 * Result:197 * Remark : 198 * Status :199 * 200 * Author : Patrick Haller [Tue, 1998/05/05 10:44]287 * @return : 288 * Remark : 289 * @status : Stub 290 * 291 * @author : Patrick Haller [Tue, 1998/05/05 10:44] 201 292 *****************************************************************************/ 202 293 … … 216 307 * LONG lParam2 217 308 * Variables : 218 * Result: API returncode309 * @return : API returncode 219 310 * Remark : Ehm, what's the difference to SendDriverMessage() ? 220 * Status :221 * 222 * Author : Patrick Haller [Tue, 1998/05/05 10:44]311 * @status : Stub 312 * 313 * @author : Patrick Haller [Tue, 1998/05/05 10:44] 223 314 *****************************************************************************/ 224 315 … … 239 330 * Parameters: HDRVR hDriver 240 331 * Variables : 241 * Result:332 * @return : 242 333 * Remark : What's the difference to DrvGetModuleHandle() ? 243 * Status : 244 * 245 * Author : Patrick Haller [Tue, 1998/05/05 10:44] 334 * @status : Completely 335 * 336 * @author : Patrick Haller [Tue, 1998/05/05 10:44] 337 * @author : Chris Wohlgemuth [Sun, 2000/11/19] 246 338 *****************************************************************************/ 247 339 … … 249 341 HDRVR, hDriver) 250 342 { 251 dprintf(("WINMM: GetDriverModuleHandle not implemented.\n")); 252 return 0; /* unsuccessful return */ 253 } 254 343 LPWINE_DRIVER lpDrv; 344 HMODULE hModule = 0; 345 346 #if 0 347 dprintf(("(%04x);\n", hDriver)); 348 #endif 349 350 lpDrv = DRIVER_FindFromHDrvr(hDriver); 351 if (lpDrv != NULL && !(lpDrv->dwFlags & WINE_GDF_16BIT)) { 352 hModule = lpDrv->d.d32.hModule; 353 354 } 355 #if 0 356 dprintf(("=> %d\n", hModule)); 357 #endif 358 return hModule; //return 0; /* unsuccessful return */ 359 } 360 361 362 363 /************************************************************************** 364 * GetDriverFlags [WINMM.13] 365 * Parameters: HDRVR hDrvr 366 * Variables : 367 * @return : 0x00000000 if hDrvr is an invalid handle 368 * 0x80000000 if hDrvr is a valid 32 bit driver 369 * Remark : 370 * @status : Completely 371 * 372 * @author : Chris Wohlgemuth [Sun, 2000/11/19] (ported from WINE) 373 */ 374 ODINFUNCTION1(DWORD, GetDriverFlags, 375 HDRVR, hDrvr) 376 { 377 LPWINE_DRIVER lpDrv; 378 DWORD ret = 0; 379 380 //TRACE("(%04x)\n", hDrvr); 381 382 if ((lpDrv = DRIVER_FindFromHDrvr(hDrvr)) != NULL) { 383 ret = lpDrv->dwFlags; 384 } 385 return ret; 386 } 387 388 389 /**************************************************************************/ 390 /* Implementation */ 391 /**************************************************************************/ 392 393 /************************************************************************** 394 * DRIVER_GetNumberOfModuleRefs [internal] 395 * 396 * Returns the number of open drivers which share the same module. 397 */ 398 static WORD DRIVER_GetNumberOfModuleRefs(LPWINE_DRIVER lpNewDrv) 399 { 400 LPWINE_DRIVER lpDrv; 401 WORD count = 0; 402 403 for (lpDrv = lpDrvItemList; lpDrv; lpDrv = lpDrv->lpNextItem) { 404 if (lpDrv->dwFlags & WINE_GDF_16BIT) { 405 if (lpDrv->d.d16.hModule == lpNewDrv->d.d16.hModule) { 406 count++; 407 } 408 } else { 409 if (lpDrv->d.d32.hModule == lpNewDrv->d.d32.hModule) { 410 count++; 411 } 412 } 413 } 414 return count; 415 } 416 417 418 /************************************************************************** 419 * DRIVER_FindFromHDrvr [internal] 420 * 421 * From a hDrvr (being 16 or 32 bits), returns the WINE internal structure. 422 */ 423 static LPWINE_DRIVER DRIVER_FindFromHDrvr(HDRVR hDrvr) 424 { 425 if (!IsBadWritePtr((void*)hDrvr, sizeof(WINE_DRIVER)) && 426 ((LPWINE_DRIVER)hDrvr)->dwMagic == WINE_DI_MAGIC) { 427 return (LPWINE_DRIVER)hDrvr; 428 } 429 return 0; 430 } 431 432 /************************************************************************** 433 * DRIVER_RemoveFromList [internal] 434 * 435 * Generates all the logic to handle driver closure / deletion 436 * Removes a driver struct to the list of open drivers. 437 * 438 */ 439 static BOOL DRIVER_RemoveFromList(LPWINE_DRIVER lpDrv) 440 { 441 lpDrv->dwDriverID = 0; 442 if (DRIVER_GetNumberOfModuleRefs(lpDrv) == 1) { 443 SendDriverMessage((HDRVR)lpDrv, DRV_DISABLE, 0L, 0L); 444 SendDriverMessage((HDRVR)lpDrv, DRV_FREE, 0L, 0L); 445 } 446 447 if (lpDrv->lpPrevItem) 448 lpDrv->lpPrevItem->lpNextItem = lpDrv->lpNextItem; 449 else 450 lpDrvItemList = lpDrv->lpNextItem; 451 if (lpDrv->lpNextItem) 452 lpDrv->lpNextItem->lpPrevItem = lpDrv->lpPrevItem; 453 454 return TRUE; 455 } 456 457 /************************************************************************** 458 * DRIVER_AddToList [internal] 459 * 460 * Adds a driver struct to the list of open drivers. 461 * Generates all the logic to handle driver creation / open. 462 * 463 */ 464 static BOOL DRIVER_AddToList(LPWINE_DRIVER lpNewDrv, LPARAM lParam, BOOL bCallFrom32) 465 { 466 lpNewDrv->dwMagic = WINE_DI_MAGIC; 467 /* First driver to be loaded for this module, need to load correctly the module */ 468 469 if (DRIVER_GetNumberOfModuleRefs(lpNewDrv) == 0) { 470 if (SendDriverMessage((HDRVR)lpNewDrv, DRV_LOAD, 0L, 0L) != DRV_SUCCESS) { 471 dprintf(("DRV_LOAD failed on driver 0x%08lx\n", (DWORD)lpNewDrv)); 472 return FALSE; 473 } 474 if (SendDriverMessage((HDRVR)lpNewDrv, DRV_ENABLE, 0L, 0L) != DRV_SUCCESS) { 475 dprintf(("DRV_ENABLE failed on driver 0x%08lx\n", (DWORD)lpNewDrv)); 476 return FALSE; 477 } 478 } 479 480 lpNewDrv->lpNextItem = NULL; 481 if (lpDrvItemList == NULL) { 482 lpDrvItemList = lpNewDrv; 483 lpNewDrv->lpPrevItem = NULL; 484 } else { 485 LPWINE_DRIVER lpDrv = lpDrvItemList; /* find end of list */ 486 while (lpDrv->lpNextItem != NULL) 487 lpDrv = lpDrv->lpNextItem; 488 489 lpDrv->lpNextItem = lpNewDrv; 490 lpNewDrv->lpPrevItem = lpDrv; 491 } 492 /* Now just open a new instance of a driver on this module */ 493 494 lpNewDrv->dwDriverID = SendDriverMessage((HDRVR)lpNewDrv, DRV_OPEN, 0L, lParam); 495 496 if (lpNewDrv->dwDriverID == 0) { 497 dprintf(("DRV_OPEN failed on driver 0x%08lx\n", (DWORD)lpNewDrv)); 498 DRIVER_RemoveFromList(lpNewDrv); 499 return FALSE; 500 } 501 502 return TRUE; 503 } 504 505 /************************************************************************** 506 * DRIVER_RegisterDriver32 [internal] 507 * 508 * Creates all the WINE internal representations for a 32 bit driver. 509 * The driver is also open by sending the correct messages. 510 * 511 */ 512 static LPWINE_DRIVER DRIVER_RegisterDriver32(LPCSTR lpName, HMODULE hModule, DRIVERPROC lpProc, 513 LPARAM lParam, BOOL bCallFrom32) 514 { 515 LPWINE_DRIVER lpDrv; 516 517 lpDrv = (LPWINE_DRIVER)HeapAlloc(GetProcessHeap(), 0, sizeof(WINE_DRIVER)); 518 if (lpDrv != NULL) { 519 lpDrv->dwFlags = WINE_GDF_EXIST; 520 lpDrv->dwDriverID = 0; 521 lpDrv->hDriver16 = 0; /* We don't support 16 bit */ 522 lstrcpynA(lpDrv->szAliasName, lpName, sizeof(lpDrv->szAliasName)); 523 lpDrv->d.d32.hModule = hModule; 524 lpDrv->d.d32.lpDrvProc = lpProc; 525 526 if (!DRIVER_AddToList(lpDrv, lParam, bCallFrom32)) { 527 HeapFree(GetProcessHeap(), 0, lpDrv); 528 lpDrv = NULL; 529 } 530 531 } 532 return lpDrv; 533 } 534 535 /************************************************************************** 536 * DRIVER_TryOpenDriver32 [internal] 537 * 538 * Tries to load a 32 bit driver whose DLL's (module) name is lpFileName. 539 * 540 */ 541 static HDRVR DRIVER_TryOpenDriver32(LPCSTR lpFileName, LPARAM lParam, BOOL bCallFrom32) 542 { 543 LPWINE_DRIVER lpDrv = NULL; 544 LPCSTR lpSFN; 545 HMODULE hModule; 546 DRIVERPROC lpProc; 547 548 dprintf(("'Entering DRIVER_TryOpenDriver32: %s', %08lX, %d);\n", lpFileName, lParam, bCallFrom32)); 549 550 if (strlen(lpFileName) < 1) 551 return 0; 552 553 lpSFN = strrchr(lpFileName, '\\'); 554 lpSFN = (lpSFN) ? (lpSFN + 1) : lpFileName; 555 556 if ((hModule = LoadLibraryA(lpFileName)) != 0) { 557 if ((lpProc = (DRIVERPROC)GetProcAddress(hModule, "DriverProc")) != NULL) { 558 lpDrv = DRIVER_RegisterDriver32(lpSFN, hModule, lpProc, lParam, bCallFrom32); 559 } else { 560 FreeLibrary(hModule); 561 lpDrv = 0; 562 dprintf(("DRIVER_TryOpenDriver32: No DriverProc found (line %d)\n",__LINE__)); 563 } 564 } else { 565 dprintf(("DRIVER_TryOpenDriver32: Unable to load 32 bit module \"%s\" (line %d)\n", lpFileName,__LINE__)); 566 } 567 568 dprintf(("(DRIVER_TryOpenDriver32) driver handle => %p\n", lpDrv)); 569 570 return (HDRVR)lpDrv; 571 } 572 573 /************************************************************************** 574 * DRIVER_OpenDriverA [internal] 575 * (0,1,DRV_LOAD ,0 ,0) 576 * (0,1,DRV_ENABLE,0 ,0) 577 * (0,1,DRV_OPEN ,buf[256],0) 578 * 579 */ 580 static HDRVR DRIVER_OpenDriverA(LPCSTR lpDriverName, LPCSTR lpSectionName, LPARAM lParam) 581 { 582 HDRVR hDriver = 0; 583 char drvName[128]; 584 585 dprintf(("Entering DRIVER_OpenDriverA: lpDriverName: %s lpSectionName: %s\n",lpDriverName,lpSectionName)); 586 587 if (lpSectionName == NULL) { 588 lstrcpynA(drvName, lpDriverName, sizeof(drvName)); 589 hDriver = DRIVER_TryOpenDriver32(lpDriverName, lParam, TRUE); 590 if (!hDriver) { 591 if (GetPrivateProfileStringA("Drivers32", lpDriverName, "", drvName, 592 sizeof(drvName), "SYSTEM.INI")) { 593 594 hDriver = DRIVER_TryOpenDriver32(drvName, lParam, TRUE); 595 } 596 } 597 } else {/* of if (lpSectionName == NULL) */ 598 //dprintf(("driver name %x '%s'\n",drvName,drvName)); 599 drvName[0]=0; 600 601 if (GetPrivateProfileStringA(lpSectionName, lpDriverName, "", drvName, 602 sizeof(drvName)-1, "SYSTEM.INI")) { 603 #if 0 604 dprintf(("driver name %x '%s'\n",drvName,drvName)); 605 #endif 606 hDriver = DRIVER_TryOpenDriver32(drvName, lParam, TRUE); 607 }/* GetPrivate... */ 608 } 609 if (!hDriver) 610 dprintf(("OpenDriverA: Failed to open driver %s from section %s\n", lpDriverName, lpSectionName)); 611 612 else 613 dprintf(("OpenDriverA success: Driver handle => %08x\n", hDriver)); 614 615 return hDriver; 616 } 617 618 /************************************************************************** 619 * DRIVER_CloseDriver [internal] 620 * 621 * 622 */ 623 static BOOL DRIVER_CloseDriver(LPWINE_DRIVER lpDrv, DWORD lParam1, DWORD lParam2) 624 { 625 if (lpDrv != NULL) { 626 SendDriverMessage((HDRVR)lpDrv, DRV_CLOSE, lParam1, lParam2); 627 628 if (DRIVER_RemoveFromList(lpDrv)) { 629 HeapFree(GetProcessHeap(), 0, lpDrv); 630 return TRUE; 631 } 632 } 633 dprintf(("Failed to close driver\n")); 634 return FALSE; 635 } 636 637 638 639 640 641 642 643 644 645 646 647 -
trunk/src/winmm/initterm.cpp
r3993 r4748 1 /* $Id: initterm.cpp,v 1.1 0 2000-08-11 10:56:27 sandervl Exp $ */1 /* $Id: initterm.cpp,v 1.11 2000-12-03 22:18:17 sandervl Exp $ */ 2 2 3 3 /* … … 6 6 * Copyright 1998 Sander van Leeuwen (sandervl@xs4all.nl) 7 7 * Copyright 1998 Peter Fitzsimmons 8 * Copyright 2000 Chris Wohlgemuth 8 9 * 9 10 * … … 42 43 #include "dbglocal.h" 43 44 45 BOOL MULTIMEDIA_MciInit(void); 46 BOOL MULTIMEDIA_CreateIData(HINSTANCE hinstDLL); 47 void MULTIMEDIA_DeleteIData(void); 48 44 49 extern "C" { 45 50 void IRTMidiShutdown(); // IRTMidi shutdown routine 46 51 void CDECL _ctordtorInit( void ); 47 52 void CDECL _ctordtorTerm( void ); 53 48 54 49 55 //Win32 resource table (produced by wrc) … … 56 62 BOOL WINAPI LibMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID fImpLoad) 57 63 { 58 switch (fdwReason) 59 { 60 case DLL_PROCESS_ATTACH: 64 static BOOL bInitDone = FALSE; 65 66 switch (fdwReason) 67 { 68 case DLL_PROCESS_ATTACH: 69 if (!MULTIMEDIA_CreateIData(hinstDLL)) 70 return FALSE; 71 72 if (!bInitDone) { /* to be done only once */ 73 if (!MULTIMEDIA_MciInit() /*|| !MMDRV_Init() */ ) { 74 MULTIMEDIA_DeleteIData(); 75 return FALSE; 76 } 77 bInitDone = TRUE; 78 } 79 61 80 return TRUE; 62 81 … … 66 85 67 86 case DLL_PROCESS_DETACH: 87 MULTIMEDIA_DeleteIData(); 68 88 auxOS2Close(); /* SvL: Close aux device if necessary */ 69 89 IRTMidiShutdown; /* JT: Shutdown RT Midi subsystem, if running. */ … … 101 121 CheckVersionFromHMOD(PE2LX_VERSION, hModule); /*PLF Wed 98-03-18 05:28:48*/ 102 122 103 123 dllHandle = RegisterLxDll(hModule, LibMain, (PVOID)&_Resource_PEResTab); 104 124 if(dllHandle == 0) 105 return 0UL; 125 return 0UL;/* Error */ 106 126 107 127 break; … … 123 143 //****************************************************************************** 124 144 //****************************************************************************** 145 146 147 -
trunk/src/winmm/mci.cpp
r2812 r4748 1 /* $Id: mci.cpp,v 1. 5 2000-02-17 14:09:31sandervl Exp $ */1 /* $Id: mci.cpp,v 1.6 2000-12-03 22:18:17 sandervl Exp $ */ 2 2 3 3 /* 4 * MCI stubs4 * MCI functions 5 5 * 6 6 * Copyright 1998 Joel Troster 7 * 7 * Copyright 1998/1999 Eric Pouech 8 * Copyright 2000 Chris Wohlgemuth 8 9 * 9 10 * Project Odin Software License can be found in LICENSE.TXT … … 15 16 * Includes * 16 17 ****************************************************************************/ 18 19 #define INCL_BASE 20 #define INCL_OS2MM 17 21 18 22 #include <os2win.h> … … 21 25 #include <string.h> 22 26 #include <stdio.h> 27 #include "debugtools.h" 23 28 24 29 #include <misc.h> 25 30 #include <unicode.h> 26 31 32 #include "mcimm.h" 33 27 34 #include "winmm.h" 28 35 29 36 #define DBG_LOCALLOG DBG_mci 37 30 38 #include "dbglocal.h" 39 40 41 /**************************************************************************** 42 * Local functions * 43 ****************************************************************************/ 44 45 /* forward declaration */ 46 static DWORD MCI_SendCommand(UINT mciId, 47 UINT16 uMsg, 48 DWORD dwParam1, 49 DWORD dwParam2); 50 51 static LPWINE_MCIDRIVER MCI_GetDriver(UINT16 wDevID) ; 52 static UINT MCI_GetDriverFromString(LPCSTR lpstrName); 53 54 /****************************************************************************/ 31 55 32 56 ODINDEBUGCHANNEL(WINMM-MCI) … … 38 62 UINT, uStatus) 39 63 { 40 dprintf(("WINMM:mciDriverNotify - stub\n")); 41 return FALSE; 64 TRACE("Entering mciDriverNotify (%08X, %04x, %04X)\n", hwndCallback, uDeviceID, uStatus); 65 66 if (!IsWindow(hwndCallback)) { 67 WARN("bad hwnd for call back (0x%04x)\n", hwndCallback); 68 return FALSE; 69 } 70 TRACE("before PostMessage\n"); 71 PostMessageA(hwndCallback, MM_MCINOTIFY, uStatus, uDeviceID); 72 return TRUE; 42 73 } 43 74 … … 73 104 LPCSTR, pszDevice) 74 105 { 75 dprintf(("WINMM:mciGetDeviceIDA - stub\n"));76 return 0;106 WARN(("WINMM:mciGetDeviceIDA - untested\n")); 107 return MCI_GetDriverFromString(pszDevice); 77 108 } 78 109 … … 100 131 } 101 132 133 /***************************************************************************** 134 * Queries driver data 135 * Parameters: UINT uDeviceID 136 * Variables : 137 * @return : Pointer to driver data (as a DWORD) 138 * Remark : 139 * @status : Completely 140 * 141 * @author : Chris Wohlgemuth [Sun, 2000/11/19] 142 *****************************************************************************/ 102 143 ODINFUNCTION1(DWORD, mciGetDriverData, 103 144 UINT, uDeviceID) 104 145 { 105 dprintf(("WINMM:mciGetDriverData - stub\n")); 106 return 0; 107 } 108 146 LPWINE_MCIDRIVER wmd; 147 148 wmd = MCI_GetDriver(uDeviceID); 149 150 if (!wmd) { 151 dprintf(("WARNING: Bad uDeviceID (mciGetDriverData (mci.cpp line %d)\n",__LINE__)); 152 return 0L; /* Error */ 153 } 154 155 return wmd->dwPrivate; 156 } 157 158 /***************************************************************************** 159 * Converts an error to an error string 160 * Parameters: MCIERROR mcierr, 161 * LPSTR pszText, 162 * UINT cchText 163 * Variables : 164 * @return : API returncode (TRUE/FALSE) 165 * Remark : 166 * @status : Completely 167 * 168 * @author : Wine 169 *****************************************************************************/ 109 170 ODINFUNCTION3(BOOL, mciGetErrorStringA, 110 171 MCIERROR, mcierr, … … 125 186 } 126 187 188 /***************************************************************************** 189 * Converts an error to an error string 190 * Parameters: MCIERROR mcierr, 191 * LPSTR pszText, 192 * UINT cchText 193 * Variables : 194 * @return : API returncode (TRUE/FALSE) 195 * Remark : 196 * @status : Completely 197 * 198 * @author : Wine 199 *****************************************************************************/ 127 200 ODINFUNCTION3(BOOL, mciGetErrorStringW, 128 201 MCIERROR, mcierr, … … 143 216 } 144 217 218 /***************************************************************************** 219 * Converts an error to an error string 220 * Parameters: MCIERROR mcierr, 221 * LPSTR pszText, 222 * UINT cchText 223 * Variables : 224 * @return : API returncode 225 * Remark : 226 * @status : Completely 227 * 228 * @author : Wine 229 *****************************************************************************/ 145 230 ODINFUNCTION2(YIELDPROC, mciGetYieldProc, 146 231 MCIDEVICEID, mciId, 147 232 LPDWORD, pdwYieldData) 148 233 { 149 dprintf(("WINMM:mciGetYieldProc - stub\n")); 150 return 0; 234 LPWINE_MCIDRIVER wmd; 235 236 TRACE("Entering mciGetYieldProc (%u, %p) - untested\n", mciId, pdwYieldData); 237 238 if (!(wmd = MCI_GetDriver(mciId))) { 239 WARN("Bad uDeviceID\n"); 240 return NULL; 241 } 242 if (!wmd->lpfnYieldProc) { 243 WARN("No proc set\n"); 244 return NULL; 245 } 246 if (!wmd->bIs32) { 247 WARN("Proc is 32 bit\n"); 248 return NULL; 249 } 250 return wmd->lpfnYieldProc; 151 251 } 152 252 … … 159 259 return 0; 160 260 } 261 161 262 162 263 ODINFUNCTION4(MCIERROR, mciSendCommandA, … … 166 267 DWORD, dwParam2) 167 268 { 168 dprintf(("WINMM:mciSendCommandA - stub %X %X %X %X\n", mciId, uMsg, dwParam1, dwParam2)); 169 return(MMSYSERR_NODRIVER); 170 } 269 DWORD dwRet; 270 // dprintf(("WINMM:mciSendCommandA - entering %X %X %X %X\n", mciId, uMsg, dwParam1, dwParam2)); 271 dwRet= MCI_SendCommand((UINT) mciId, uMsg, dwParam1, dwParam2) & 0xFFFF; 272 return(dwRet); 273 } 274 171 275 172 276 ODINFUNCTION4(MCIERROR, mciSendCommandW, … … 187 291 { 188 292 dprintf(("WINMM:mciSendStringA - stub\n")); 293 if(lpstrCommand) 294 dprintf(("WINMM:mciSendStringA command: %s\n",lpstrCommand)); 189 295 return(MMSYSERR_NODRIVER); 190 296 } … … 204 310 DWORD, dwData) 205 311 { 206 dprintf(("WINMM:mciSetDriverData - stub\n")); 207 return FALSE; 208 } 312 LPWINE_MCIDRIVER wmd; 313 314 wmd = MCI_GetDriver(uDeviceID); 315 316 if (!wmd) { 317 dprintf(("WARNING: Bad uDeviceID (mciSetDriverData line %d)\n",__LINE__)); 318 return FALSE; 319 } 320 321 wmd->dwPrivate = dwData; 322 return TRUE; 323 } 324 209 325 210 326 ODINFUNCTION3(BOOL, mciSetYieldProc, … … 213 329 DWORD, dwYieldData) 214 330 { 215 dprintf(("WINMM:mciSetYieldProc - stub\n")); 216 return FALSE; 217 } 218 219 331 LPWINE_MCIDRIVER wmd; 332 333 TRACE("WINMM:mciSetYieldProc (%u, %p, %08lx) - untested\n", mciId, fpYieldProc, dwYieldData); 334 335 if (!(wmd = MCI_GetDriver(mciId))) { 336 WARN("Bad uDeviceID\n"); 337 return FALSE; 338 } 339 340 wmd->lpfnYieldProc = fpYieldProc; 341 wmd->dwYieldData = dwYieldData; 342 wmd->bIs32 = TRUE; 343 344 return TRUE; 345 } 346 347 348 /**************************************************************************/ 349 /* heap.c */ 350 /**************************************************************************/ 351 352 #ifdef __GNUC__ 353 #define GET_EIP() (__builtin_return_address(0)) 354 #define SET_EIP(ptr) ((ARENA_INUSE*)(ptr) - 1)->callerEIP = GET_EIP() 355 #else 356 #define GET_EIP() 0 357 #define SET_EIP(ptr) /* nothing */ 358 #endif /* __GNUC__ */ 359 360 /*********************************************************************** 361 * HEAP_strdupA 362 */ 363 static LPSTR HEAP_strdupA( HANDLE heap, DWORD flags, LPCSTR str ) 364 { 365 LPSTR p = (LPSTR) HeapAlloc( heap, flags, strlen(str) + 1 ); 366 if(p) { 367 //SET_EIP(p); 368 strcpy( p, str ); 369 } 370 return p; 371 } 372 373 374 /**************************************************************************/ 375 /* mmmsystem.c */ 376 /**************************************************************************/ 377 378 static LPWINE_MM_IDATA lpFirstIData = NULL; 379 380 static LPWINE_MM_IDATA MULTIMEDIA_GetIDataNoCheck(void) 381 { 382 DWORD pid = GetCurrentProcessId(); 383 LPWINE_MM_IDATA iData; 384 385 for (iData = lpFirstIData; iData; iData = iData->lpNextIData) { 386 if (iData->dwThisProcess == pid) 387 break; 388 } 389 return iData; 390 } 391 392 /************************************************************************** 393 * MULTIMEDIA_GetIData [internal] 394 */ 395 LPWINE_MM_IDATA MULTIMEDIA_GetIData(void) 396 { 397 LPWINE_MM_IDATA iData = MULTIMEDIA_GetIDataNoCheck(); 398 399 if (!iData) { 400 dprintf(("MULTIMEDIA_GetIData: IData not found for pid=%08lx. Suicide !!!\n", GetCurrentProcessId())); 401 ExitProcess(0); 402 } 403 return iData; 404 } 405 406 407 /************************************************************************** 408 * MULTIMEDIA_CreateIData [internal] 409 */ 410 BOOL MULTIMEDIA_CreateIData(HINSTANCE hInstDLL) 411 { 412 LPWINE_MM_IDATA iData; 413 414 iData = (LPWINE_MM_IDATA) HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(WINE_MM_IDATA)); 415 416 if (!iData) 417 return FALSE; 418 iData->hWinMM32Instance = hInstDLL; 419 iData->dwThisProcess = GetCurrentProcessId(); 420 iData->lpNextIData = lpFirstIData; 421 lpFirstIData = iData; 422 InitializeCriticalSection(&iData->cs); 423 dprintf(("Created IData (%p) for pid %08lx\n", iData, iData->dwThisProcess)); 424 return TRUE; 425 } 426 427 428 /************************************************************************** 429 * MULTIMEDIA_DeleteIData [internal] 430 */ 431 void MULTIMEDIA_DeleteIData(void) 432 { 433 LPWINE_MM_IDATA iData = MULTIMEDIA_GetIDataNoCheck(); 434 LPWINE_MM_IDATA* ppid; 435 436 if (iData) { 437 for (ppid = &lpFirstIData; *ppid; ppid = &(*ppid)->lpNextIData) { 438 if (*ppid == iData) { 439 *ppid = iData->lpNextIData; 440 break; 441 } 442 } 443 /* FIXME: should also free content and resources allocated 444 * inside iData */ 445 HeapFree(GetProcessHeap(), 0, iData); 446 } 447 } 448 449 450 /**************************************************************************/ 451 /* mmmsystem.c */ 452 /**************************************************************************/ 453 454 455 static int MCI_InstalledCount; 456 static LPSTR MCI_lpInstallNames = NULL; 457 458 459 /* First MCI valid device ID (0 means error) */ 460 #define MCI_MAGIC 0x0001 461 462 463 /************************************************************************** 464 * MCI_GetDriver [internal] 465 */ 466 static LPWINE_MCIDRIVER MCI_GetDriver(UINT16 wDevID) 467 { 468 LPWINE_MCIDRIVER wmd = 0; 469 LPWINE_MM_IDATA iData = MULTIMEDIA_GetIData(); 470 471 EnterCriticalSection(&iData->cs); 472 for (wmd = iData->lpMciDrvs; wmd; wmd = wmd->lpNext) { 473 if (wmd->wDeviceID == wDevID) 474 break; 475 } 476 LeaveCriticalSection(&iData->cs); 477 return wmd; 478 } 479 480 /************************************************************************** 481 * MCI_GetDriverFromString [internal] 482 */ 483 static UINT MCI_GetDriverFromString(LPCSTR lpstrName) 484 { 485 LPWINE_MCIDRIVER wmd; 486 LPWINE_MM_IDATA iData = MULTIMEDIA_GetIData(); 487 UINT ret = 0; 488 489 if (!lpstrName) 490 return 0; 491 492 if (!lstrcmpiA(lpstrName, "ALL")) 493 return MCI_ALL_DEVICE_ID; 494 495 EnterCriticalSection(&iData->cs); 496 for (wmd = iData->lpMciDrvs; wmd; wmd = wmd->lpNext) { 497 if (wmd->lpstrElementName && strcmp(wmd->lpstrElementName, lpstrName) == 0) { 498 ret = wmd->wDeviceID; 499 break; 500 } 501 502 if (wmd->lpstrDeviceType && strcmp(wmd->lpstrDeviceType, lpstrName) == 0) { 503 ret = wmd->wDeviceID; 504 break; 505 } 506 507 if (wmd->lpstrAlias && strcmp(wmd->lpstrAlias, lpstrName) == 0) { 508 ret = wmd->wDeviceID; 509 break; 510 } 511 } 512 LeaveCriticalSection(&iData->cs); 513 514 return ret; 515 } 516 517 518 /************************************************************************** 519 * MCI_GetDevTypeFromFileName [internal] 520 */ 521 static DWORD MCI_GetDevTypeFromFileName(LPCSTR fileName, LPSTR buf, UINT len) 522 { 523 LPSTR tmp; 524 525 if ((tmp = strrchr(fileName, '.'))) { 526 GetProfileStringA("mci extensions", tmp + 1, "*", buf, len); 527 if (strcmp(buf, "*") != 0) { 528 return 0; 529 } 530 dprintf(("No [mci extensions] entry for '%s' found. MCI_GetDevTypeFromFileName: line %d, file 'mci.cpp'\n", tmp, __LINE__)); 531 } 532 return MCIERR_EXTENSION_NOT_FOUND; 533 } 534 535 536 #define MAX_MCICMDTABLE 20 537 #define MCI_COMMAND_TABLE_NOT_LOADED 0xFFFE 538 539 540 541 /************************************************************************** 542 * MCI_DefYieldProc [internal] 543 */ 544 //UINT WINAPI MCI_DefYieldProc(MCIDEVICEID wDevID, DWORD data) 545 546 UINT16 WINAPI MCI_DefYieldProc(UINT16 wDevID, DWORD data) 547 { 548 INT16 ret; 549 550 #if 0 551 dprintf(("(0x%04x, 0x%08lx)\n", wDevID, data)); 552 #endif 553 if ((HIWORD(data) != 0 && GetActiveWindow() != HIWORD(data)) || 554 (GetAsyncKeyState(LOWORD(data)) & 1) == 0) { 555 /* WINE stuff removed: UserYield16();*/ 556 ret = 0; 557 } else { 558 MSG msg; 559 560 msg.hwnd = HIWORD(data); 561 while (!PeekMessageA(&msg, HIWORD(data), WM_KEYFIRST, WM_KEYLAST, PM_REMOVE)); 562 ret = -1; 563 } 564 return ret; 565 } 566 567 568 /************************************************************************** 569 * MCI_UnLoadMciDriver [internal] 570 */ 571 static BOOL MCI_UnLoadMciDriver(LPWINE_MM_IDATA iData, LPWINE_MCIDRIVER wmd) 572 { 573 LPWINE_MCIDRIVER* tmp; 574 575 #if 0 576 dprintf(("Entering MCI_UnLoadMciDriver...\n")); 577 #endif 578 if (!wmd) 579 return TRUE; 580 581 if (wmd->hDrv) 582 CloseDriver(wmd->hDrv, 0, 0); 583 584 if (wmd->dwPrivate != 0) 585 dprintf(("Unloading mci driver with non nul dwPrivate field\n")); 586 587 EnterCriticalSection(&iData->cs); 588 for (tmp = &iData->lpMciDrvs; *tmp; tmp = &(*tmp)->lpNext) { 589 if (*tmp == wmd) { 590 *tmp = wmd->lpNext; 591 break; 592 } 593 } 594 LeaveCriticalSection(&iData->cs); 595 596 HeapFree(GetProcessHeap(), 0, wmd->lpstrDeviceType); 597 HeapFree(GetProcessHeap(), 0, wmd->lpstrAlias); 598 HeapFree(GetProcessHeap(), 0, wmd->lpstrElementName); 599 600 HeapFree(GetProcessHeap(), 0, wmd); 601 //dprintf(("Leaving MCI_UnLoadMciDriver...\n")); 602 return TRUE; 603 } 604 605 /************************************************************************** 606 * MCI_LoadMciDriver [internal] 607 */ 608 static DWORD MCI_LoadMciDriver(LPWINE_MM_IDATA iData, LPCSTR _strDevTyp, 609 LPWINE_MCIDRIVER* lpwmd) 610 { 611 LPSTR strDevTyp = CharUpperA(HEAP_strdupA(GetProcessHeap(), 0, _strDevTyp)); 612 LPWINE_MCIDRIVER wmd = (LPWINE_MCIDRIVER)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*wmd)); 613 MCI_OPEN_DRIVER_PARMSA modp; 614 DWORD dwRet = 0; 615 HDRVR hDrv = 0; 616 617 618 dprintf(("Entering MCI_LoadMciDriver...\n")); 619 620 if (!wmd || !strDevTyp) { 621 dwRet = MCIERR_OUT_OF_MEMORY; 622 goto errCleanUp; 623 } 624 625 wmd->lpstrDeviceType = strDevTyp; 626 wmd->lpfnYieldProc = MCI_DefYieldProc; 627 wmd->dwYieldData = VK_CANCEL; 628 wmd->hCreatorTask = NULL; 629 630 631 EnterCriticalSection(&iData->cs); 632 /* wmd must be inserted in list before sending opening the driver, coz' it 633 * may want to lookup at wDevID 634 */ 635 wmd->lpNext = iData->lpMciDrvs; 636 iData->lpMciDrvs = wmd; 637 638 for (modp.wDeviceID = MCI_MAGIC; 639 MCI_GetDriver(modp.wDeviceID) != 0; 640 modp.wDeviceID++); 641 642 wmd->wDeviceID = modp.wDeviceID; 643 644 LeaveCriticalSection(&iData->cs); 645 646 dprintf(("wDevID=%04X strDevTyp: %s\n", modp.wDeviceID, strDevTyp)); 647 648 modp.lpstrParams = NULL; 649 650 hDrv = OpenDriverA(strDevTyp, "mci", (LPARAM)&modp); 651 652 if (!hDrv) { 653 dprintf(("Couldn't load driver for type %s.\n" 654 "If you don't have a windows installation accessible from Wine,\n" 655 "you perhaps forgot to create a [mci] section in system.ini\n", 656 strDevTyp)); 657 dwRet = MCIERR_DEVICE_NOT_INSTALLED; 658 goto errCleanUp; 659 } 660 661 /* FIXME: should also check that module's description is of the form 662 * MODULENAME:[MCI] comment 663 */ 664 665 wmd->hDrv = hDrv; 666 /* some drivers will return 0x0000FFFF, some others 0xFFFFFFFF */ 667 wmd->uSpecificCmdTable = LOWORD(modp.wCustomCommandTable); 668 wmd->uTypeCmdTable = MCI_COMMAND_TABLE_NOT_LOADED; 669 670 dprintf(("Loaded driver %x (%s), type is %d, cmdTable=%08x\n", 671 hDrv, strDevTyp, modp.wType, modp.wCustomCommandTable)); 672 673 674 wmd->wType = modp.wType; 675 676 #if 0 677 dprintf(("mcidev=%d, uDevTyp=%04X wDeviceID=%04X !\n", 678 modp.wDeviceID, modp.wType, modp.wDeviceID)); 679 #endif 680 681 *lpwmd = wmd; 682 #if 0 683 dprintf(("Leaving MCI_LoadMciDriver succesful...\n")); 684 #endif 685 return 0; 686 errCleanUp: 687 MCI_UnLoadMciDriver(iData, wmd); 688 // HeapFree(GetProcessHeap(), 0, strDevTyp);<-- done in MCI_UnloadMciDriver 689 *lpwmd = 0; 690 dprintf(("Leaving MCI_LoadMciDriver on error...\n")); 691 return dwRet; 692 } 693 694 695 /************************************************************************** 696 * MCI_SendCommandFrom32 [internal] 697 */ 698 static DWORD MCI_SendCommandFrom32(UINT wDevID, UINT16 wMsg, DWORD dwParam1, DWORD dwParam2) 699 { 700 DWORD dwRet = MCIERR_DEVICE_NOT_INSTALLED; 701 LPWINE_MCIDRIVER wmd = MCI_GetDriver(wDevID); 702 703 if (!wmd) { 704 dwRet = MCIERR_INVALID_DEVICE_ID; 705 } else { 706 switch (GetDriverFlags(wmd->hDrv) & (WINE_GDF_EXIST)) { 707 case WINE_GDF_EXIST: 708 dwRet = SendDriverMessage(wmd->hDrv, wMsg, dwParam1, dwParam2); 709 break; 710 default: 711 dprintf(("Unknown driver %u\n", wmd->hDrv)); 712 dwRet = MCIERR_DRIVER_INTERNAL; 713 } 714 } 715 return dwRet; 716 } 717 718 /************************************************************************** 719 * MCI_FinishOpen [internal] 720 */ 721 static DWORD MCI_FinishOpen(LPWINE_MCIDRIVER wmd, LPMCI_OPEN_PARMSA lpParms, 722 DWORD dwParam) 723 { 724 if (dwParam & MCI_OPEN_ELEMENT) 725 wmd->lpstrElementName = HEAP_strdupA(GetProcessHeap(), 0, 726 lpParms->lpstrElementName); 727 728 if (dwParam & MCI_OPEN_ALIAS) 729 wmd->lpstrAlias = HEAP_strdupA(GetProcessHeap(), 0, lpParms->lpstrAlias); 730 731 lpParms->wDeviceID = wmd->wDeviceID; 732 733 return MCI_SendCommandFrom32(wmd->wDeviceID, MCI_OPEN_DRIVER, dwParam, 734 (DWORD)lpParms); 735 } 736 737 /************************************************************************** 738 * MCI_Open [internal] 739 */ 740 static DWORD MCI_Open(DWORD dwParam, LPMCI_OPEN_PARMSA lpParms) 741 { 742 char strDevTyp[128]; 743 DWORD dwRet; 744 LPWINE_MCIDRIVER wmd = NULL; 745 746 LPWINE_MM_IDATA iData = MULTIMEDIA_GetIData(); 747 748 dprintf(("Entering MCI_OPEN...\n")); 749 750 if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK; 751 752 /* only two low bytes are generic, the other ones are dev type specific */ 753 #define WINE_MCIDRIVER_SUPP (0xFFFF0000|MCI_OPEN_SHAREABLE|MCI_OPEN_ELEMENT| \ 754 MCI_OPEN_ALIAS|MCI_OPEN_TYPE|MCI_OPEN_TYPE_ID| \ 755 MCI_NOTIFY|MCI_WAIT) 756 if ((dwParam & ~WINE_MCIDRIVER_SUPP) != 0) { 757 dprintf(("Unsupported yet dwFlags=%08lX\n", dwParam & ~WINE_MCIDRIVER_SUPP)); 758 } 759 #undef WINE_MCIDRIVER_SUPP 760 761 strDevTyp[0] = 0; 762 763 if (dwParam & MCI_OPEN_TYPE) { 764 if (dwParam & MCI_OPEN_TYPE_ID) { 765 WORD uDevType = LOWORD((DWORD)lpParms->lpstrDeviceType); 766 if (uDevType < MCI_DEVTYPE_FIRST || 767 uDevType > MCI_DEVTYPE_LAST || 768 !LoadStringA(iData->hWinMM32Instance, uDevType, strDevTyp, sizeof(strDevTyp))) /* This gets a name for the device e.g 'cdaudio' */ 769 { 770 dwRet = MCIERR_BAD_INTEGER; 771 goto errCleanUp; 772 } 773 } else { 774 LPSTR ptr; 775 if (lpParms->lpstrDeviceType == NULL) { 776 dwRet = MCIERR_NULL_PARAMETER_BLOCK; 777 goto errCleanUp; 778 } 779 strcpy(strDevTyp, lpParms->lpstrDeviceType); 780 ptr = strchr(strDevTyp, '!'); 781 if (ptr) { 782 /* this behavior is not documented in windows. However, since, in 783 * some occasions, MCI_OPEN handling is translated by WinMM into 784 * a call to mciSendString("open <type>"); this code shall be correct 785 */ 786 if (dwParam & MCI_OPEN_ELEMENT) { 787 dprintf(("Both MCI_OPEN_ELEMENT(%s) and %s are used\n", 788 lpParms->lpstrElementName, strDevTyp)); 789 dwRet = MCIERR_UNRECOGNIZED_KEYWORD; 790 goto errCleanUp; 791 } 792 dwParam |= MCI_OPEN_ELEMENT; 793 *ptr++ = 0; 794 /* FIXME: not a good idea to write in user supplied buffer */ 795 lpParms->lpstrElementName = ptr; 796 } 797 798 } 799 dprintf(("MCI_OPEN (MCI_OPEN_TYPE): devType='%s' !\n", strDevTyp)); 800 } 801 802 if (dwParam & MCI_OPEN_ELEMENT) { 803 dprintf(("lpstrElementName='%s'\n", lpParms->lpstrElementName)); 804 805 if (dwParam & MCI_OPEN_ELEMENT_ID) { 806 dprintf(("Unsupported yet flag MCI_OPEN_ELEMENT_ID\n")); 807 dwRet = MCIERR_UNRECOGNIZED_KEYWORD; 808 goto errCleanUp; 809 } 810 811 if (!lpParms->lpstrElementName) { 812 dwRet = MCIERR_NULL_PARAMETER_BLOCK; 813 goto errCleanUp; 814 } 815 816 #if 0 817 /* Only working on my machine!! CW */ 818 if(lpParms->lpstrElementName[0]=='N') { 819 dprintf(("Discarding drive N:\n")); 820 dwRet = MCIERR_UNRECOGNIZED_KEYWORD; 821 goto errCleanUp; 822 } 823 #endif 824 825 /* type, if given as a parameter, supersedes file extension */ 826 if (!strDevTyp[0] && 827 MCI_GetDevTypeFromFileName(lpParms->lpstrElementName, 828 strDevTyp, sizeof(strDevTyp))) { 829 if (GetDriveTypeA(lpParms->lpstrElementName) != DRIVE_CDROM) { 830 dwRet = MCIERR_EXTENSION_NOT_FOUND; 831 goto errCleanUp; 832 } 833 /* FIXME: this will not work if several CDROM drives are installed on the machine */ 834 strcpy(strDevTyp, "CDAUDIO"); 835 } 836 } 837 838 if (strDevTyp[0] == 0) { 839 dprintf(("Couldn't load driver (MCI_Open line %d)\n",__LINE__)); 840 dwRet = MCIERR_INVALID_DEVICE_NAME; 841 goto errCleanUp; 842 } 843 844 if (dwParam & MCI_OPEN_ALIAS) { 845 dprintf(("MCI_OPEN_ALIAS requested\n")); 846 if (!lpParms->lpstrAlias) { 847 dwRet = MCIERR_NULL_PARAMETER_BLOCK; 848 goto errCleanUp; 849 } 850 dprintf(("Alias='%s' !\n", lpParms->lpstrAlias)); 851 } 852 853 if ((dwRet = MCI_LoadMciDriver(iData, strDevTyp, &wmd))) { 854 goto errCleanUp; 855 } 856 857 858 if ((dwRet = MCI_FinishOpen(wmd, lpParms, dwParam))) { 859 dprintf(("Failed to open driver (MCI_OPEN_DRIVER) [%08lx], closing\n", dwRet)); 860 /* FIXME: is dwRet the correct ret code ? */ 861 goto errCleanUp; 862 } 863 864 865 /* only handled devices fall through */ 866 dprintf(("wDevID=%04X wDeviceID=%d dwRet=%ld\n", wmd->wDeviceID, lpParms->wDeviceID, dwRet)); 867 868 if (dwParam & MCI_NOTIFY) 869 // mciDriverNotify16(lpParms->dwCallback, wmd->wDeviceID, MCI_NOTIFY_SUCCESSFUL); 870 dprintf(("FIXME: MCI_NOTIFY not implemented yet! MCI_Open (line %d)\n",__LINE__)); 871 872 return 0; 873 874 errCleanUp: 875 876 if (wmd) MCI_UnLoadMciDriver(iData, wmd); 877 878 if (dwParam & MCI_NOTIFY) 879 // mciDriverNotify16(lpParms->dwCallback, 0, MCI_NOTIFY_FAILURE); 880 dprintf(("FIXME: MCI_NOTIFY not implemented yet! MCI_Open (line %d)\n",__LINE__)); 881 882 dprintf(("Leaving MCI_Open on error...\n")); 883 return dwRet; 884 } 885 886 887 /************************************************************************** 888 * MCI_Close [internal] 889 */ 890 static DWORD MCI_Close(UINT16 wDevID, DWORD dwParam, LPMCI_GENERIC_PARMS lpParms) 891 { 892 DWORD dwRet; 893 LPWINE_MCIDRIVER wmd; 894 LPWINE_MM_IDATA iData = MULTIMEDIA_GetIData(); 895 896 //dprintf(("(%04x, %08lX, %p)\n", wDevID, dwParam, lpParms)); 897 898 if (wDevID == MCI_ALL_DEVICE_ID) { 899 LPWINE_MCIDRIVER next; 900 901 EnterCriticalSection(&iData->cs); 902 /* FIXME: shall I notify once after all is done, or for 903 * each of the open drivers ? if the latest, which notif 904 * to return when only one fails ? 905 */ 906 for (wmd = iData->lpMciDrvs; wmd; ) { 907 next = wmd->lpNext; 908 MCI_Close(wmd->wDeviceID, dwParam, lpParms); 909 wmd = next; 910 } 911 LeaveCriticalSection(&iData->cs); 912 return 0; 913 } 914 915 if (!(wmd = MCI_GetDriver(wDevID))) { 916 return MCIERR_INVALID_DEVICE_ID; 917 } 918 919 dwRet = MCI_SendCommandFrom32(wDevID, MCI_CLOSE_DRIVER, dwParam, (DWORD)lpParms); 920 921 MCI_UnLoadMciDriver(iData, wmd); 922 923 if (dwParam & MCI_NOTIFY) 924 dprintf(("FIXME: MCI_NOTIFY not implemented yet! MCI_Close (line %d)\n",__LINE__)); 925 // mciDriverNotify16(lpParms->dwCallback, wDevID, 926 // (dwRet == 0) ? MCI_NOTIFY_SUCCESSFUL : MCI_NOTIFY_FAILURE); 927 928 return dwRet; 929 } 930 931 932 /************************************************************************** 933 * MCI_WriteString [internal] 934 */ 935 DWORD MCI_WriteString(LPSTR lpDstStr, DWORD dstSize, LPCSTR lpSrcStr) 936 { 937 DWORD ret = 0; 938 939 if (lpSrcStr) { 940 if (dstSize <= strlen(lpSrcStr)) { 941 lstrcpynA(lpDstStr, lpSrcStr, dstSize - 1); 942 ret = MCIERR_PARAM_OVERFLOW; 943 } else { 944 strcpy(lpDstStr, lpSrcStr); 945 } 946 } else { 947 *lpDstStr = 0; 948 } 949 return ret; 950 } 951 952 953 /************************************************************************** 954 * MCI_Sysinfo [internal] 955 */ 956 static DWORD MCI_SysInfo(UINT uDevID, DWORD dwFlags, LPMCI_SYSINFO_PARMSA lpParms) 957 { 958 DWORD ret = MCIERR_INVALID_DEVICE_ID; 959 LPWINE_MCIDRIVER wmd; 960 LPWINE_MM_IDATA iData = MULTIMEDIA_GetIData(); 961 962 if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK; 963 964 TRACE("(%08x, %08lX, %08lX[num=%ld, wDevTyp=%u])\n", 965 uDevID, dwFlags, (DWORD)lpParms, lpParms->dwNumber, lpParms->wDeviceType); 966 967 switch (dwFlags & ~MCI_SYSINFO_OPEN) { 968 case MCI_SYSINFO_QUANTITY: 969 { 970 DWORD cnt = 0; 971 972 if (lpParms->wDeviceType < MCI_DEVTYPE_FIRST || 973 lpParms->wDeviceType > MCI_DEVTYPE_LAST) { 974 if (dwFlags & MCI_SYSINFO_OPEN) { 975 TRACE("MCI_SYSINFO_QUANTITY: # of open MCI drivers\n"); 976 EnterCriticalSection(&iData->cs); 977 for (wmd = iData->lpMciDrvs; wmd; wmd = wmd->lpNext) { 978 cnt++; 979 } 980 LeaveCriticalSection(&iData->cs); 981 } else { 982 TRACE("MCI_SYSINFO_QUANTITY: # of installed MCI drivers\n"); 983 cnt = MCI_InstalledCount; 984 } 985 } else { 986 if (dwFlags & MCI_SYSINFO_OPEN) { 987 TRACE("MCI_SYSINFO_QUANTITY: # of open MCI drivers of type %u\n", 988 lpParms->wDeviceType); 989 EnterCriticalSection(&iData->cs); 990 for (wmd = iData->lpMciDrvs; wmd; wmd = wmd->lpNext) { 991 if (wmd->wType == lpParms->wDeviceType) 992 cnt++; 993 } 994 LeaveCriticalSection(&iData->cs); 995 } else { 996 TRACE("MCI_SYSINFO_QUANTITY: # of installed MCI drivers of type %u\n", 997 lpParms->wDeviceType); 998 FIXME("Don't know how to get # of MCI devices of a given type\n"); 999 cnt = 1; 1000 } 1001 } 1002 *(DWORD*)lpParms->lpstrReturn = cnt; 1003 } 1004 TRACE("(%ld) => '%ld'\n", lpParms->dwNumber, *(DWORD*)lpParms->lpstrReturn); 1005 ret = MCI_INTEGER_RETURNED; 1006 break; 1007 case MCI_SYSINFO_INSTALLNAME: 1008 TRACE("MCI_SYSINFO_INSTALLNAME \n"); 1009 if ((wmd = MCI_GetDriver(uDevID))) { 1010 ret = MCI_WriteString(lpParms->lpstrReturn, lpParms->dwRetSize, 1011 wmd->lpstrDeviceType); 1012 } else { 1013 *lpParms->lpstrReturn = 0; 1014 ret = MCIERR_INVALID_DEVICE_ID; 1015 } 1016 TRACE("(%ld) => '%s'\n", lpParms->dwNumber, lpParms->lpstrReturn); 1017 break; 1018 case MCI_SYSINFO_NAME: 1019 TRACE("MCI_SYSINFO_NAME\n"); 1020 if (dwFlags & MCI_SYSINFO_OPEN) { 1021 FIXME("Don't handle MCI_SYSINFO_NAME|MCI_SYSINFO_OPEN (yet)\n"); 1022 ret = MCIERR_UNRECOGNIZED_COMMAND; 1023 } else if (lpParms->dwNumber > MCI_InstalledCount) { 1024 ret = MCIERR_OUTOFRANGE; 1025 } else { 1026 DWORD count = lpParms->dwNumber; 1027 LPSTR ptr = MCI_lpInstallNames; 1028 1029 while (--count > 0) ptr += strlen(ptr) + 1; 1030 ret = MCI_WriteString(lpParms->lpstrReturn, lpParms->dwRetSize, ptr); 1031 } 1032 TRACE("(%ld) => '%s'\n", lpParms->dwNumber, lpParms->lpstrReturn); 1033 break; 1034 default: 1035 TRACE("Unsupported flag value=%08lx\n", dwFlags); 1036 ret = MCIERR_UNRECOGNIZED_COMMAND; 1037 } 1038 return ret; 1039 } 1040 1041 1042 /************************************************************************** 1043 * MCI_Break [internal] 1044 */ 1045 static DWORD MCI_Break(UINT wDevID, DWORD dwFlags, LPMCI_BREAK_PARMS lpParms) 1046 { 1047 DWORD dwRet = 0; 1048 1049 if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK; 1050 1051 if (dwFlags & MCI_NOTIFY) 1052 dprintf(("FIXME: MCI_NOTIFY not implemented yet! MCI_Break (line %d)\n",__LINE__)); 1053 // mciDriverNotify16(lpParms->dwCallback, wDevID, 1054 // (dwRet == 0) ? MCI_NOTIFY_SUCCESSFUL : MCI_NOTIFY_FAILURE); 1055 1056 return dwRet; 1057 } 1058 1059 1060 /************************************************************************** 1061 * MCI_SendCommand [internal] 1062 */ 1063 static DWORD MCI_SendCommand(UINT wDevID, UINT16 wMsg, DWORD dwParam1, 1064 DWORD dwParam2) 1065 { 1066 DWORD dwRet = MCIERR_UNRECOGNIZED_COMMAND; 1067 1068 switch (wMsg) { 1069 case MCI_OPEN: 1070 dwRet = MCI_Open(dwParam1, (LPMCI_OPEN_PARMSA)dwParam2); 1071 break; 1072 case MCI_CLOSE: 1073 dwRet = MCI_Close(wDevID, dwParam1, (LPMCI_GENERIC_PARMS)dwParam2); 1074 break; 1075 case MCI_SYSINFO: 1076 dwRet = MCI_SysInfo(wDevID, dwParam1, (LPMCI_SYSINFO_PARMSA)dwParam2); 1077 break; 1078 case MCI_BREAK: 1079 dwRet = MCI_Break(wDevID, dwParam1, (LPMCI_BREAK_PARMS)dwParam2); 1080 break; 1081 // case MCI_SOUND: 1082 /* FIXME: it seems that MCI_SOUND needs the same handling as MCI_BREAK 1083 * but I couldn't get any doc on this MCI message 1084 */ 1085 // break; 1086 default: 1087 if (wDevID == MCI_ALL_DEVICE_ID) { 1088 dprintf(("MCI_SendCommand: unhandled MCI_ALL_DEVICE_ID\n")); 1089 dwRet = MCIERR_CANNOT_USE_ALL; 1090 } else { 1091 dwRet=MCI_SendCommandFrom32(wDevID, wMsg, dwParam1, dwParam2); 1092 } 1093 break; 1094 } 1095 return dwRet; 1096 } 1097 1098 1099 1100 1101 /************************************************************************** 1102 * MULTIMEDIA_MciInit [internal] 1103 * 1104 * Initializes the MCI internal variables. 1105 * 1106 */ 1107 BOOL MULTIMEDIA_MciInit(void) 1108 { 1109 LPSTR ptr1, ptr2; 1110 HKEY hWineConf; 1111 HKEY hkey; 1112 DWORD err; 1113 DWORD type; 1114 DWORD count = 2048; 1115 1116 MCI_InstalledCount = 0; 1117 ptr1 = MCI_lpInstallNames = (char*) HeapAlloc(GetProcessHeap(), 0, count); 1118 1119 if (!MCI_lpInstallNames) 1120 return FALSE; 1121 1122 #if 0 1123 /* FIXME: should do also some registry diving here ? */ 1124 if (!(err = RegOpenKeyA(HKEY_LOCAL_MACHINE, "Software\\Wine\\Wine\\Config", &hWineConf)) && 1125 !(err = RegOpenKeyA(hWineConf, "options", &hkey))) { 1126 err = RegQueryValueExA(hkey, "mci", 0, &type, MCI_lpInstallNames, &count); 1127 RegCloseKey(hkey); 1128 FIXME("Registry handling for mci drivers not changed for odin yet. Verbatim copy from WINE (line %d)",__LINE__); 1129 } 1130 #endif 1131 FIXME("No Registry querying for mci drivers yet! (line %d)",__LINE__); 1132 err=1; 1133 if (!err) { 1134 TRACE("Wine => '%s' \n", ptr1); 1135 while ((ptr2 = strchr(ptr1, ':')) != 0) { 1136 *ptr2++ = 0; 1137 TRACE("---> '%s' \n", ptr1); 1138 MCI_InstalledCount++; 1139 ptr1 = ptr2; 1140 } 1141 MCI_InstalledCount++; 1142 TRACE("---> '%s' \n", ptr1); 1143 ptr1 += strlen(ptr1) + 1; 1144 } else { 1145 GetPrivateProfileStringA("mci", NULL, "", MCI_lpInstallNames, count, "SYSTEM.INI"); 1146 while (strlen(ptr1) > 0) { 1147 TRACE("---> '%s' \n", ptr1); 1148 ptr1 += strlen(ptr1) + 1; 1149 MCI_InstalledCount++; 1150 } 1151 } 1152 //RegCloseKey(hWineConf); 1153 return TRUE; 1154 } -
trunk/src/winmm/winmmrsrc.orc
r3031 r4748 1 /* $Id: winmmrsrc.orc,v 1. 1 2000-03-06 23:39:17 birdExp $ */1 /* $Id: winmmrsrc.orc,v 1.2 2000-12-03 22:18:19 sandervl Exp $ */ 2 2 3 3 #include "winuser.h" 4 4 #include "odinrsrc.h" 5 #include "mmddk.h" 6 #include "winnls.h" 5 7 6 8 … … 40 42 END 41 43 END 44 45 46 /* Add your language specific defines here */ 47 #include "winmm_En.orc" 48 #include "winmm_Fr.orc" 49 #include "winmm_Nl.orc" 50 #include "winmm_Pt.orc" 51 #include "winmm_Es.orc" 52 #include "winmm_Ru.orc" 53 54 55 /* do not add NLS specific stuff below that line */ 56 57 CORE RCDATA 58 BEGIN 59 "open\0", 0x00000803L, MCI_COMMAND_HEAD, 60 "\0", 0x00000002L, MCI_RETURN, 61 "notify\0", 0x00000001L, MCI_FLAG, 62 "wait\0", 0x00000002L, MCI_FLAG, 63 "type\0", 0x00002000L, MCI_STRING, 64 "element\0", 0x00000200L, MCI_STRING, 65 "alias\0", 0x00000400L, MCI_STRING, 66 "shareable\0", 0x00000100L, MCI_FLAG, 67 "\0", 0x00000000L, MCI_END_COMMAND, 68 "close\0", 0x00000804L, MCI_COMMAND_HEAD, 69 "notify\0", 0x00000001L, MCI_FLAG, 70 "wait\0", 0x00000002L, MCI_FLAG, 71 "\0", 0x00000000L, MCI_END_COMMAND, 72 "play\0", 0x00000806L, MCI_COMMAND_HEAD, 73 "notify\0", 0x00000001L, MCI_FLAG, 74 "wait\0", 0x00000002L, MCI_FLAG, 75 "from\0", 0x00000004L, MCI_INTEGER, 76 "to\0", 0x00000008L, MCI_INTEGER, 77 "\0", 0x00000000L, MCI_END_COMMAND, 78 "record\0", 0x0000080fL, MCI_COMMAND_HEAD, 79 "notify\0", 0x00000001L, MCI_FLAG, 80 "wait\0", 0x00000002L, MCI_FLAG, 81 "from\0", 0x00000004L, MCI_INTEGER, 82 "to\0", 0x00000008L, MCI_INTEGER, 83 "insert\0", 0x00000100L, MCI_FLAG, 84 "overwrite\0", 0x00000200L, MCI_FLAG, 85 "\0", 0x00000000L, MCI_END_COMMAND, 86 "seek\0", 0x00000807L, MCI_COMMAND_HEAD, 87 "notify\0", 0x00000001L, MCI_FLAG, 88 "wait\0", 0x00000002L, MCI_FLAG, 89 "to start\0", 0x00000100L, MCI_FLAG, 90 "to end\0", 0x00000200L, MCI_FLAG, 91 "to\0", 0x00000008L, MCI_INTEGER, 92 "\0", 0x00000000L, MCI_END_COMMAND, 93 "stop\0", 0x00000808L, MCI_COMMAND_HEAD, 94 "notify\0", 0x00000001L, MCI_FLAG, 95 "wait\0", 0x00000002L, MCI_FLAG, 96 "\0", 0x00000000L, MCI_END_COMMAND, 97 "pause\0", 0x00000809L, MCI_COMMAND_HEAD, 98 "notify\0", 0x00000001L, MCI_FLAG, 99 "wait\0", 0x00000002L, MCI_FLAG, 100 "\0", 0x00000000L, MCI_END_COMMAND, 101 "status\0", 0x00000814L, MCI_COMMAND_HEAD, 102 "\0", 0x00000002L, MCI_RETURN, 103 "notify\0", 0x00000001L, MCI_FLAG, 104 "wait\0", 0x00000002L, MCI_FLAG, 105 "\0", 0x00000100L, MCI_CONSTANT, 106 "position\0", 0x00000002L, MCI_INTEGER, 107 "length\0", 0x00000001L, MCI_INTEGER, 108 "number of tracks\0", 0x00000003L, MCI_INTEGER, 109 "ready\0", 0x00000007L, MCI_INTEGER, 110 "mode\0", 0x00000004L, MCI_INTEGER, 111 "time format\0", 0x00000006L, MCI_INTEGER, 112 "current track\0", 0x00000008L, MCI_INTEGER, 113 "\0", 0x00000000L, MCI_END_CONSTANT, 114 "track\0", 0x00000010L, MCI_INTEGER, 115 "start\0", 0x00000200L, MCI_FLAG, 116 "\0", 0x00000000L, MCI_END_COMMAND, 117 "capability\0", 0x0000080bL, MCI_COMMAND_HEAD, 118 "\0", 0x00000002L, MCI_RETURN, 119 "notify\0", 0x00000001L, MCI_FLAG, 120 "wait\0", 0x00000002L, MCI_FLAG, 121 "\0", 0x00000100L, MCI_CONSTANT, 122 "can record\0", 0x00000001L, MCI_INTEGER, 123 "has audio\0", 0x00000002L, MCI_INTEGER, 124 "has video\0", 0x00000003L, MCI_INTEGER, 125 "uses files\0", 0x00000005L, MCI_INTEGER, 126 "compound device\0", 0x00000006L, MCI_INTEGER, 127 "device type\0", 0x00000004L, MCI_INTEGER, 128 "can eject\0", 0x00000007L, MCI_INTEGER, 129 "can play\0", 0x00000008L, MCI_INTEGER, 130 "can save\0", 0x00000009L, MCI_INTEGER, 131 "\0", 0x00000000L, MCI_END_CONSTANT, 132 "\0", 0x00000000L, MCI_END_COMMAND, 133 "info\0", 0x0000080aL, MCI_COMMAND_HEAD, 134 "\0", 0x00000001L, MCI_RETURN, 135 "notify\0", 0x00000001L, MCI_FLAG, 136 "wait\0", 0x00000002L, MCI_FLAG, 137 "product\0", 0x00000100L, MCI_FLAG, 138 "\0", 0x00000000L, MCI_END_COMMAND, 139 "set\0", 0x0000080dL, MCI_COMMAND_HEAD, 140 "notify\0", 0x00000001L, MCI_FLAG, 141 "wait\0", 0x00000002L, MCI_FLAG, 142 "time format\0", 0x00000400L, MCI_CONSTANT, 143 "milliseconds\0", 0x00000000L, MCI_INTEGER, 144 "ms\0", 0x00000000L, MCI_INTEGER, 145 "\0", 0x00000000L, MCI_END_CONSTANT, 146 "door open\0", 0x00000100L, MCI_FLAG, 147 "door closed\0", 0x00000200L, MCI_FLAG, 148 "audio\0", 0x00000800L, MCI_CONSTANT, 149 "all\0", 0x00000000L, MCI_INTEGER, 150 "left\0", 0x00000001L, MCI_INTEGER, 151 "right\0", 0x00000002L, MCI_INTEGER, 152 "\0", 0x00000000L, MCI_END_CONSTANT, 153 "video\0", 0x00001000L, MCI_FLAG, 154 "on\0", 0x00002000L, MCI_FLAG, 155 "off\0", 0x00004000L, MCI_FLAG, 156 "\0", 0x00000000L, MCI_END_COMMAND, 157 "sysinfo\0", 0x00000810L, MCI_COMMAND_HEAD, 158 "\0", 0x00000001L, MCI_RETURN, 159 "notify\0", 0x00000001L, MCI_FLAG, 160 "wait\0", 0x00000002L, MCI_FLAG, 161 "quantity\0", 0x00000100L, MCI_FLAG, 162 "open\0", 0x00000200L, MCI_FLAG, 163 "installname\0", 0x00000800L, MCI_FLAG, 164 "name\0", 0x00000400L, MCI_INTEGER, 165 "\0", 0x00000000L, MCI_END_COMMAND, 166 "break\0", 0x00000811L, MCI_COMMAND_HEAD, 167 "notify\0", 0x00000001L, MCI_FLAG, 168 "wait\0", 0x00000002L, MCI_FLAG, 169 "on\0", 0x00000100L, MCI_INTEGER, 170 "off\0", 0x00000400L, MCI_FLAG, 171 "\0", 0x00000000L, MCI_END_COMMAND, 172 "sound\0", 0x00000812L, MCI_COMMAND_HEAD, 173 "notify\0", 0x00000001L, MCI_FLAG, 174 "wait\0", 0x00000002L, MCI_FLAG, 175 "\0", 0x00000000L, MCI_END_COMMAND, 176 "save\0", 0x00000813L, MCI_COMMAND_HEAD, 177 "notify\0", 0x00000001L, MCI_FLAG, 178 "wait\0", 0x00000002L, MCI_FLAG, 179 "\0", 0x00000100L, MCI_STRING, 180 "\0", 0x00000000L, MCI_END_COMMAND, 181 "load\0", 0x00000850L, MCI_COMMAND_HEAD, 182 "notify\0", 0x00000001L, MCI_FLAG, 183 "wait\0", 0x00000002L, MCI_FLAG, 184 "\0", 0x00000100L, MCI_STRING, 185 "\0", 0x00000000L, MCI_END_COMMAND, 186 "resume\0", 0x00000855L, MCI_COMMAND_HEAD, 187 "notify\0", 0x00000001L, MCI_FLAG, 188 "wait\0", 0x00000002L, MCI_FLAG, 189 "\0", 0x00000000L, MCI_END_COMMAND, 190 "\0", 0x00000000L, MCI_END_COMMAND_LIST 191 END 192 193 VIDEODISC RCDATA 194 BEGIN 195 "play\0", 0x00000806L, MCI_COMMAND_HEAD, 196 "notify\0", 0x00000001L, MCI_FLAG, 197 "wait\0", 0x00000002L, MCI_FLAG, 198 "from\0", 0x00000004L, MCI_INTEGER, 199 "to\0", 0x00000008L, MCI_INTEGER, 200 "fast\0", 0x00020000L, MCI_FLAG, 201 "slow\0", 0x00100000L, MCI_FLAG, 202 "speed\0", 0x00040000L, MCI_INTEGER, 203 "reverse\0", 0x00010000L, MCI_FLAG, 204 "scan\0", 0x00080000L, MCI_FLAG, 205 "\0", 0x00000000L, MCI_END_COMMAND, 206 "seek\0", 0x00000807L, MCI_COMMAND_HEAD, 207 "notify\0", 0x00000001L, MCI_FLAG, 208 "wait\0", 0x00000002L, MCI_FLAG, 209 "reverse\0", 0x00010000L, MCI_FLAG, 210 "to start\0", 0x00000100L, MCI_FLAG, 211 "to end\0", 0x00000200L, MCI_FLAG, 212 "to\0", 0x00000008L, MCI_INTEGER, 213 "\0", 0x00000000L, MCI_END_COMMAND, 214 "spin\0", 0x0000080cL, MCI_COMMAND_HEAD, 215 "notify\0", 0x00000001L, MCI_FLAG, 216 "wait\0", 0x00000002L, MCI_FLAG, 217 "up\0", 0x00010000L, MCI_FLAG, 218 "down\0", 0x00020000L, MCI_FLAG, 219 "\0", 0x00000000L, MCI_END_COMMAND, 220 "step\0", 0x0000080eL, MCI_COMMAND_HEAD, 221 "notify\0", 0x00000001L, MCI_FLAG, 222 "wait\0", 0x00000002L, MCI_FLAG, 223 "reverse\0", 0x00020000L, MCI_FLAG, 224 "by\0", 0x00010000L, MCI_INTEGER, 225 "\0", 0x00000000L, MCI_END_COMMAND, 226 "set\0", 0x0000080dL, MCI_COMMAND_HEAD, 227 "notify\0", 0x00000001L, MCI_FLAG, 228 "wait\0", 0x00000002L, MCI_FLAG, 229 "time format\0", 0x00000400L, MCI_CONSTANT, 230 "milliseconds\0", 0x00000000L, MCI_INTEGER, 231 "ms\0", 0x00000000L, MCI_INTEGER, 232 "frames\0", 0x00000003L, MCI_INTEGER, 233 "hms\0", 0x00000001L, MCI_INTEGER, 234 "track\0", 0x00004001L, MCI_INTEGER, 235 "\0", 0x00000000L, MCI_END_CONSTANT, 236 "door open\0", 0x00000100L, MCI_FLAG, 237 "door closed\0", 0x00000200L, MCI_FLAG, 238 "audio\0", 0x00000800L, MCI_CONSTANT, 239 "all\0", 0x00000000L, MCI_INTEGER, 240 "left\0", 0x00000001L, MCI_INTEGER, 241 "right\0", 0x00000002L, MCI_INTEGER, 242 "\0", 0x00000000L, MCI_END_CONSTANT, 243 "video\0", 0x00001000L, MCI_FLAG, 244 "on\0", 0x00002000L, MCI_FLAG, 245 "off\0", 0x00004000L, MCI_FLAG, 246 "\0", 0x00000000L, MCI_END_COMMAND, 247 "status\0", 0x00000814L, MCI_COMMAND_HEAD, 248 "\0", 0x00000002L, MCI_RETURN, 249 "notify\0", 0x00000001L, MCI_FLAG, 250 "wait\0", 0x00000002L, MCI_FLAG, 251 "\0", 0x00000100L, MCI_CONSTANT, 252 "position\0", 0x00000002L, MCI_INTEGER, 253 "length\0", 0x00000001L, MCI_INTEGER, 254 "number of tracks\0", 0x00000003L, MCI_INTEGER, 255 "mode\0", 0x00000004L, MCI_INTEGER, 256 "media present\0", 0x00000005L, MCI_INTEGER, 257 "speed\0", 0x00004002L, MCI_INTEGER, 258 "forward\0", 0x00004003L, MCI_INTEGER, 259 "media type\0", 0x00004004L, MCI_INTEGER, 260 "ready\0", 0x00000007L, MCI_INTEGER, 261 "side\0", 0x00004005L, MCI_INTEGER, 262 "disc size\0", 0x00004006L, MCI_INTEGER, 263 "time format\0", 0x00000006L, MCI_INTEGER, 264 "current track\0", 0x00000008L, MCI_INTEGER, 265 "\0", 0x00000000L, MCI_END_CONSTANT, 266 "track\0", 0x00000010L, MCI_INTEGER, 267 "start\0", 0x00000200L, MCI_FLAG, 268 "\0", 0x00000000L, MCI_END_COMMAND, 269 "capability\0", 0x0000080bL, MCI_COMMAND_HEAD, 270 "\0", 0x00000002L, MCI_RETURN, 271 "notify\0", 0x00000001L, MCI_FLAG, 272 "wait\0", 0x00000002L, MCI_FLAG, 273 "clv\0", 0x00010000L, MCI_FLAG, 274 "cav\0", 0x00020000L, MCI_FLAG, 275 "\0", 0x00000100L, MCI_CONSTANT, 276 "can record\0", 0x00000001L, MCI_INTEGER, 277 "has audio\0", 0x00000002L, MCI_INTEGER, 278 "has video\0", 0x00000003L, MCI_INTEGER, 279 "device type\0", 0x00000004L, MCI_INTEGER, 280 "uses files\0", 0x00000005L, MCI_INTEGER, 281 "compound device\0", 0x00000006L, MCI_INTEGER, 282 "can eject\0", 0x00000007L, MCI_INTEGER, 283 "can reverse\0", 0x00004002L, MCI_INTEGER, 284 "can play\0", 0x00000008L, MCI_INTEGER, 285 "can save\0", 0x00000009L, MCI_INTEGER, 286 "fast play rate\0", 0x00004003L, MCI_INTEGER, 287 "slow play rate\0", 0x00004004L, MCI_INTEGER, 288 "normal play rate\0", 0x00004005L, MCI_INTEGER, 289 "\0", 0x00000000L, MCI_END_CONSTANT, 290 "\0", 0x00000000L, MCI_END_COMMAND, 291 "escape\0", 0x00000805L, MCI_COMMAND_HEAD, 292 "notify\0", 0x00000001L, MCI_FLAG, 293 "wait\0", 0x00000002L, MCI_FLAG, 294 "\0", 0x00000100L, MCI_STRING, 295 "\0", 0x00000000L, MCI_END_COMMAND, 296 "info\0", 0x0000080aL, MCI_COMMAND_HEAD, 297 "\0", 0x00000001L, MCI_RETURN, 298 "notify\0", 0x00000001L, MCI_FLAG, 299 "wait\0", 0x00000002L, MCI_FLAG, 300 "product\0", 0x00000100L, MCI_FLAG, 301 "identity\0", 0x00000800L, MCI_FLAG, 302 "\0", 0x00000000L, MCI_END_COMMAND, 303 "\0", 0x00000000L, MCI_END_COMMAND_LIST 304 END 305 306 WAVEAUDIO RCDATA 307 BEGIN 308 "open\0", 0x00000803L, MCI_COMMAND_HEAD, 309 "\0", 0x00000002L, MCI_RETURN, 310 "notify\0", 0x00000001L, MCI_FLAG, 311 "wait\0", 0x00000002L, MCI_FLAG, 312 "type\0", 0x00002000L, MCI_STRING, 313 "element\0", 0x00000200L, MCI_STRING, 314 "alias\0", 0x00000400L, MCI_STRING, 315 "shareable\0", 0x00000100L, MCI_FLAG, 316 "buffer\0", 0x00010000L, MCI_INTEGER, 317 "\0", 0x00000000L, MCI_END_COMMAND, 318 "status\0", 0x00000814L, MCI_COMMAND_HEAD, 319 "\0", 0x00000002L, MCI_RETURN, 320 "notify\0", 0x00000001L, MCI_FLAG, 321 "wait\0", 0x00000002L, MCI_FLAG, 322 "\0", 0x00000100L, MCI_CONSTANT, 323 "position\0", 0x00000002L, MCI_INTEGER, 324 "length\0", 0x00000001L, MCI_INTEGER, 325 "number of tracks\0", 0x00000003L, MCI_INTEGER, 326 "media present\0", 0x00000005L, MCI_INTEGER, 327 "mode\0", 0x00000004L, MCI_INTEGER, 328 "format tag\0", 0x00004001L, MCI_INTEGER, 329 "channels\0", 0x00004002L, MCI_INTEGER, 330 "samplespersec\0", 0x00004003L, MCI_INTEGER, 331 "bytespersec\0", 0x00004004L, MCI_INTEGER, 332 "alignment\0", 0x00004005L, MCI_INTEGER, 333 "bitspersample\0", 0x00004006L, MCI_INTEGER, 334 "input\0", 0x00400000L, MCI_INTEGER, 335 "output\0", 0x00800000L, MCI_INTEGER, 336 "level\0", 0x00004007L, MCI_INTEGER, 337 "ready\0", 0x00000007L, MCI_INTEGER, 338 "time format\0", 0x00000006L, MCI_INTEGER, 339 "current track\0", 0x00000008L, MCI_INTEGER, 340 "\0", 0x00000000L, MCI_END_CONSTANT, 341 "track\0", 0x00000010L, MCI_INTEGER, 342 "start\0", 0x00000200L, MCI_FLAG, 343 "\0", 0x00000000L, MCI_END_COMMAND, 344 "set\0", 0x0000080dL, MCI_COMMAND_HEAD, 345 "notify\0", 0x00000001L, MCI_FLAG, 346 "wait\0", 0x00000002L, MCI_FLAG, 347 "any input\0", 0x04000000L, MCI_FLAG, 348 "any output\0", 0x08000000L, MCI_FLAG, 349 "time format\0", 0x00000400L, MCI_CONSTANT, 350 "milliseconds\0", 0x00000000L, MCI_INTEGER, 351 "ms\0", 0x00000000L, MCI_INTEGER, 352 "bytes\0", 0x00000008L, MCI_INTEGER, 353 "samples\0", 0x00000009L, MCI_INTEGER, 354 "\0", 0x00000000L, MCI_END_CONSTANT, 355 "audio\0", 0x00000800L, MCI_CONSTANT, 356 "all\0", 0x00000000L, MCI_INTEGER, 357 "left\0", 0x00000001L, MCI_INTEGER, 358 "right\0", 0x00000002L, MCI_INTEGER, 359 "\0", 0x00000000L, MCI_END_CONSTANT, 360 "video\0", 0x00001000L, MCI_FLAG, 361 "on\0", 0x00002000L, MCI_FLAG, 362 "off\0", 0x00004000L, MCI_FLAG, 363 "door open\0", 0x00000100L, MCI_FLAG, 364 "door closed\0", 0x00000200L, MCI_FLAG, 365 "input\0", 0x00400000L, MCI_INTEGER, 366 "output\0", 0x00800000L, MCI_INTEGER, 367 "format tag\0", 0x00010000L, MCI_CONSTANT, 368 "pcm\0", 0x00000001L, MCI_INTEGER, 369 "\0", 0x00000000L, MCI_END_CONSTANT, 370 "channels\0", 0x00020000L, MCI_INTEGER, 371 "samplespersec\0", 0x00040000L, MCI_INTEGER, 372 "bytespersec\0", 0x00080000L, MCI_INTEGER, 373 "alignment\0", 0x00100000L, MCI_INTEGER, 374 "bitspersample\0", 0x00200000L, MCI_INTEGER, 375 "\0", 0x00000000L, MCI_END_COMMAND, 376 "capability\0", 0x0000080bL, MCI_COMMAND_HEAD, 377 "\0", 0x00000002L, MCI_RETURN, 378 "notify\0", 0x00000001L, MCI_FLAG, 379 "wait\0", 0x00000002L, MCI_FLAG, 380 "\0", 0x00000100L, MCI_CONSTANT, 381 "can record\0", 0x00000001L, MCI_INTEGER, 382 "has audio\0", 0x00000002L, MCI_INTEGER, 383 "has video\0", 0x00000003L, MCI_INTEGER, 384 "device type\0", 0x00000004L, MCI_INTEGER, 385 "uses files\0", 0x00000005L, MCI_INTEGER, 386 "compound device\0", 0x00000006L, MCI_INTEGER, 387 "can eject\0", 0x00000007L, MCI_INTEGER, 388 "can play\0", 0x00000008L, MCI_INTEGER, 389 "can save\0", 0x00000009L, MCI_INTEGER, 390 "inputs\0", 0x00004001L, MCI_INTEGER, 391 "outputs\0", 0x00004002L, MCI_INTEGER, 392 "\0", 0x00000000L, MCI_END_CONSTANT, 393 "\0", 0x00000000L, MCI_END_COMMAND, 394 "info\0", 0x0000080aL, MCI_COMMAND_HEAD, 395 "\0", 0x00000001L, MCI_RETURN, 396 "notify\0", 0x00000001L, MCI_FLAG, 397 "wait\0", 0x00000002L, MCI_FLAG, 398 "product\0", 0x00000100L, MCI_FLAG, 399 "input\0", 0x00400000L, MCI_FLAG, 400 "output\0", 0x00800000L, MCI_FLAG, 401 "file\0", 0x00000200L, MCI_FLAG, 402 "\0", 0x00000000L, MCI_END_COMMAND, 403 "cue\0", 0x00000830L, MCI_COMMAND_HEAD, 404 "notify\0", 0x00000001L, MCI_FLAG, 405 "wait\0", 0x00000002L, MCI_FLAG, 406 "input\0", 0x00400000L, MCI_FLAG, 407 "output\0", 0x00800000L, MCI_FLAG, 408 "\0", 0x00000000L, MCI_END_COMMAND, 409 "delete\0", 0x00000856L, MCI_COMMAND_HEAD, 410 "notify\0", 0x00000001L, MCI_FLAG, 411 "wait\0", 0x00000002L, MCI_FLAG, 412 "from\0", 0x00000004L, MCI_INTEGER, 413 "to\0", 0x00000008L, MCI_INTEGER, 414 "\0", 0x00000000L, MCI_END_COMMAND, 415 "\0", 0x00000000L, MCI_END_COMMAND_LIST 416 END 417 418 CDAUDIO RCDATA 419 BEGIN 420 "atus\0", 0x00000814L, MCI_COMMAND_HEAD, 421 "\0", 0x00000002L, MCI_RETURN, 422 "notify\0", 0x00000001L, MCI_FLAG, 423 "wait\0", 0x00000002L, MCI_FLAG, 424 "\0", 0x00000100L, MCI_CONSTANT, 425 "position\0", 0x00000002L, MCI_INTEGER, 426 "length\0", 0x00000001L, MCI_INTEGER, 427 "number of tracks\0", 0x00000003L, MCI_INTEGER, 428 "ready\0", 0x00000007L, MCI_INTEGER, 429 "mode\0", 0x00000004L, MCI_INTEGER, 430 "media present\0", 0x00000005L, MCI_INTEGER, 431 "time format\0", 0x00000006L, MCI_INTEGER, 432 "current track\0", 0x00000008L, MCI_INTEGER, 433 "type\0", 0x00004001L, MCI_INTEGER, 434 "\0", 0x00000000L, MCI_END_CONSTANT, 435 "track\0", 0x00000010L, MCI_INTEGER, 436 "start\0", 0x00000200L, MCI_FLAG, 437 "\0", 0x00000000L, MCI_END_COMMAND, 438 "set\0", 0x0000080dL, MCI_COMMAND_HEAD, 439 "notify\0", 0x00000001L, MCI_FLAG, 440 "wait\0", 0x00000002L, MCI_FLAG, 441 "time format\0", 0x00000400L, MCI_CONSTANT, 442 "msf\0", 0x00000002L, MCI_INTEGER, 443 "tmsf\0", 0x0000000aL, MCI_INTEGER, 444 "milliseconds\0", 0x00000000L, MCI_INTEGER, 445 "ms\0", 0x00000000L, MCI_INTEGER, 446 "\0", 0x00000000L, MCI_END_CONSTANT, 447 "audio\0", 0x00000800L, MCI_CONSTANT, 448 "all\0", 0x00000000L, MCI_INTEGER, 449 "left\0", 0x00000001L, MCI_INTEGER, 450 "right\0", 0x00000002L, MCI_INTEGER, 451 "\0", 0x00000000L, MCI_END_CONSTANT, 452 "video\0", 0x00001000L, MCI_FLAG, 453 "on\0", 0x00002000L, MCI_FLAG, 454 "off\0", 0x00004000L, MCI_FLAG, 455 "door open\0", 0x00000100L, MCI_FLAG, 456 "door closed\0", 0x00000200L, MCI_FLAG, 457 "\0", 0x00000000L, MCI_END_COMMAND, 458 "info\0", 0x0000080aL, MCI_COMMAND_HEAD, 459 "\0", 0x00000001L, MCI_RETURN, 460 "notify\0", 0x00000001L, MCI_FLAG, 461 "wait\0", 0x00000002L, MCI_FLAG, 462 "product\0", 0x00000100L, MCI_FLAG, 463 "upc\0", 0x00000400L, MCI_FLAG, 464 "identity\0", 0x00000800L, MCI_FLAG, 465 "\0", 0x00000000L, MCI_END_COMMAND, 466 "\0", 0x00000000L, MCI_END_COMMAND_LIST 467 END 468 469 SEQUENCER RCDATA 470 BEGIN 471 "atus\0", 0x00000814L, MCI_COMMAND_HEAD, 472 "\0", 0x00000002L, MCI_RETURN, 473 "notify\0", 0x00000001L, MCI_FLAG, 474 "wait\0", 0x00000002L, MCI_FLAG, 475 "\0", 0x00000100L, MCI_CONSTANT, 476 "position\0", 0x00000002L, MCI_INTEGER, 477 "mode\0", 0x00000004L, MCI_INTEGER, 478 "length\0", 0x00000001L, MCI_INTEGER, 479 "number of tracks\0", 0x00000003L, MCI_INTEGER, 480 "media present\0", 0x00000005L, MCI_INTEGER, 481 "ready\0", 0x00000007L, MCI_INTEGER, 482 "tempo\0", 0x00004002L, MCI_INTEGER, 483 "port\0", 0x00004003L, MCI_INTEGER, 484 "slave\0", 0x00004007L, MCI_INTEGER, 485 "master\0", 0x00004008L, MCI_INTEGER, 486 "offset\0", 0x00004009L, MCI_INTEGER, 487 "division type\0", 0x0000400aL, MCI_INTEGER, 488 "time format\0", 0x00000006L, MCI_INTEGER, 489 "current track\0", 0x00000008L, MCI_INTEGER, 490 "\0", 0x00000000L, MCI_END_CONSTANT, 491 "track\0", 0x00000010L, MCI_INTEGER, 492 "start\0", 0x00000200L, MCI_FLAG, 493 "\0", 0x00000000L, MCI_END_COMMAND, 494 "set\0", 0x0000080dL, MCI_COMMAND_HEAD, 495 "notify\0", 0x00000001L, MCI_FLAG, 496 "wait\0", 0x00000002L, MCI_FLAG, 497 "time format\0", 0x00000400L, MCI_CONSTANT, 498 "milliseconds\0", 0x00000000L, MCI_INTEGER, 499 "ms\0", 0x00000000L, MCI_INTEGER, 500 "smpte 30 drop\0", 0x00000007L, MCI_INTEGER, 501 "smpte 30\0", 0x00000006L, MCI_INTEGER, 502 "smpte 25\0", 0x00000005L, MCI_INTEGER, 503 "smpte 24\0", 0x00000004L, MCI_INTEGER, 504 "song pointer\0", 0x00004001L, MCI_INTEGER, 505 "\0", 0x00000000L, MCI_END_CONSTANT, 506 "audio\0", 0x00000800L, MCI_CONSTANT, 507 "all\0", 0x00000000L, MCI_INTEGER, 508 "left\0", 0x00000001L, MCI_INTEGER, 509 "right\0", 0x00000002L, MCI_INTEGER, 510 "\0", 0x00000000L, MCI_END_CONSTANT, 511 "video\0", 0x00001000L, MCI_FLAG, 512 "on\0", 0x00002000L, MCI_FLAG, 513 "off\0", 0x00004000L, MCI_FLAG, 514 "tempo\0", 0x00010000L, MCI_INTEGER, 515 "port\0", 0x00020000L, MCI_CONSTANT, 516 "none\0", 0x0000fffdL, MCI_INTEGER, 517 "mapper\0", 0x0000ffffL, MCI_INTEGER, 518 "\0", 0x00000000L, MCI_END_CONSTANT, 519 "slave\0", 0x00040000L, MCI_CONSTANT, 520 "smpte\0", 0x00004004L, MCI_INTEGER, 521 "midi\0", 0x00004003L, MCI_INTEGER, 522 "none\0", 0x0000fffdL, MCI_INTEGER, 523 "file\0", 0x00004002L, MCI_INTEGER, 524 "\0", 0x00000000L, MCI_END_CONSTANT, 525 "master\0", 0x00080000L, MCI_CONSTANT, 526 "smpte\0", 0x00004004L, MCI_INTEGER, 527 "midi\0", 0x00004003L, MCI_INTEGER, 528 "none\0", 0x0000fffdL, MCI_INTEGER, 529 "\0", 0x00000000L, MCI_END_CONSTANT, 530 "offset\0", 0x01000000L, MCI_INTEGER, 531 "door open\0", 0x00000100L, MCI_FLAG, 532 "door closed\0", 0x00000200L, MCI_FLAG, 533 "\0", 0x00000000L, MCI_END_COMMAND, 534 "info\0", 0x0000080aL, MCI_COMMAND_HEAD, 535 "\0", 0x00000001L, MCI_RETURN, 536 "notify\0", 0x00000001L, MCI_FLAG, 537 "wait\0", 0x00000002L, MCI_FLAG, 538 "product\0", 0x00000100L, MCI_FLAG, 539 "file\0", 0x00000200L, MCI_FLAG, 540 "name\0", 0x00001000L, MCI_FLAG, 541 "copyright\0", 0x00002000L, MCI_FLAG, 542 "\0", 0x00000000L, MCI_END_COMMAND, 543 "\0", 0x00000000L, MCI_END_COMMAND_LIST 544 END 545 546 ANIMATION RCDATA 547 BEGIN 548 "open\0", 0x00000803L, MCI_COMMAND_HEAD, 549 "\0", 0x00000002L, MCI_RETURN, 550 "notify\0", 0x00000001L, MCI_FLAG, 551 "wait\0", 0x00000002L, MCI_FLAG, 552 "type\0", 0x00002000L, MCI_STRING, 553 "element\0", 0x00000200L, MCI_STRING, 554 "alias\0", 0x00000400L, MCI_STRING, 555 "shareable\0", 0x00000100L, MCI_FLAG, 556 "style\0", 0x00010000L, MCI_CONSTANT, 557 "overlapped\0", 0x00cf0000L, MCI_INTEGER, 558 "popup\0", 0x80880000L, MCI_INTEGER, 559 "child\0", 0x40000000L, MCI_INTEGER, 560 "\0", 0x00000000L, MCI_END_CONSTANT, 561 "parent\0", 0x00020000L, MCI_INTEGER, 562 "nostatic\0", 0x00040000L, MCI_FLAG, 563 "\0", 0x00000000L, MCI_END_COMMAND, 564 "play\0", 0x00000806L, MCI_COMMAND_HEAD, 565 "notify\0", 0x00000001L, MCI_FLAG, 566 "wait\0", 0x00000002L, MCI_FLAG, 567 "from\0", 0x00000004L, MCI_INTEGER, 568 "to\0", 0x00000008L, MCI_INTEGER, 569 "fast\0", 0x00040000L, MCI_FLAG, 570 "slow\0", 0x00080000L, MCI_FLAG, 571 "scan\0", 0x00100000L, MCI_FLAG, 572 "reverse\0", 0x00020000L, MCI_FLAG, 573 "speed\0", 0x00010000L, MCI_INTEGER, 574 "\0", 0x00000000L, MCI_END_COMMAND, 575 "step\0", 0x0000080eL, MCI_COMMAND_HEAD, 576 "notify\0", 0x00000001L, MCI_FLAG, 577 "wait\0", 0x00000002L, MCI_FLAG, 578 "reverse\0", 0x00010000L, MCI_FLAG, 579 "by\0", 0x00020000L, MCI_INTEGER, 580 "\0", 0x00000000L, MCI_END_COMMAND, 581 "set\0", 0x0000080dL, MCI_COMMAND_HEAD, 582 "notify\0", 0x00000001L, MCI_FLAG, 583 "wait\0", 0x00000002L, MCI_FLAG, 584 "time format\0", 0x00000400L, MCI_CONSTANT, 585 "milliseconds\0", 0x00000000L, MCI_INTEGER, 586 "ms\0", 0x00000000L, MCI_INTEGER, 587 "frames\0", 0x00000003L, MCI_INTEGER, 588 "\0", 0x00000000L, MCI_END_CONSTANT, 589 "audio\0", 0x00000800L, MCI_CONSTANT, 590 "all\0", 0x00000000L, MCI_INTEGER, 591 "left\0", 0x00000001L, MCI_INTEGER, 592 "right\0", 0x00000002L, MCI_INTEGER, 593 "\0", 0x00000000L, MCI_END_CONSTANT, 594 "video\0", 0x00001000L, MCI_FLAG, 595 "on\0", 0x00002000L, MCI_FLAG, 596 "off\0", 0x00004000L, MCI_FLAG, 597 "door open\0", 0x00000100L, MCI_FLAG, 598 "door closed\0", 0x00000200L, MCI_FLAG, 599 "\0", 0x00000000L, MCI_END_COMMAND, 600 "status\0", 0x00000814L, MCI_COMMAND_HEAD, 601 "\0", 0x00000002L, MCI_RETURN, 602 "notify\0", 0x00000001L, MCI_FLAG, 603 "wait\0", 0x00000002L, MCI_FLAG, 604 "\0", 0x00000100L, MCI_CONSTANT, 605 "position\0", 0x00000002L, MCI_INTEGER, 606 "length\0", 0x00000001L, MCI_INTEGER, 607 "number of tracks\0", 0x00000003L, MCI_INTEGER, 608 "mode\0", 0x00000004L, MCI_INTEGER, 609 "ready\0", 0x00000007L, MCI_INTEGER, 610 "speed\0", 0x00004001L, MCI_INTEGER, 611 "forward\0", 0x00004002L, MCI_INTEGER, 612 "window handle\0", 0x00004003L, MCI_INTEGER, 613 "palette handle\0", 0x00004004L, MCI_INTEGER, 614 "media present\0", 0x00000005L, MCI_INTEGER, 615 "time format\0", 0x00000006L, MCI_INTEGER, 616 "current track\0", 0x00000008L, MCI_INTEGER, 617 "stretch\0", 0x00004005L, MCI_INTEGER, 618 "\0", 0x00000000L, MCI_END_CONSTANT, 619 "track\0", 0x00000010L, MCI_INTEGER, 620 "start\0", 0x00000200L, MCI_FLAG, 621 "\0", 0x00000000L, MCI_END_COMMAND, 622 "info\0", 0x0000080aL, MCI_COMMAND_HEAD, 623 "\0", 0x00000001L, MCI_RETURN, 624 "notify\0", 0x00000001L, MCI_FLAG, 625 "wait\0", 0x00000002L, MCI_FLAG, 626 "product\0", 0x00000100L, MCI_FLAG, 627 "file\0", 0x00000200L, MCI_FLAG, 628 "window text\0", 0x00010000L, MCI_FLAG, 629 "\0", 0x00000000L, MCI_END_COMMAND, 630 "capability\0", 0x0000080bL, MCI_COMMAND_HEAD, 631 "\0", 0x00000002L, MCI_RETURN, 632 "notify\0", 0x00000001L, MCI_FLAG, 633 "wait\0", 0x00000002L, MCI_FLAG, 634 "\0", 0x00000100L, MCI_CONSTANT, 635 "can record\0", 0x00000001L, MCI_INTEGER, 636 "has audio\0", 0x00000002L, MCI_INTEGER, 637 "has video\0", 0x00000003L, MCI_INTEGER, 638 "device type\0", 0x00000004L, MCI_INTEGER, 639 "uses files\0", 0x00000005L, MCI_INTEGER, 640 "compound device\0", 0x00000006L, MCI_INTEGER, 641 "can eject\0", 0x00000007L, MCI_INTEGER, 642 "can play\0", 0x00000008L, MCI_INTEGER, 643 "can save\0", 0x00000009L, MCI_INTEGER, 644 "can reverse\0", 0x00004001L, MCI_INTEGER, 645 "fast play rate\0", 0x00004002L, MCI_INTEGER, 646 "slow play rate\0", 0x00004003L, MCI_INTEGER, 647 "normal play rate\0", 0x00004004L, MCI_INTEGER, 648 "uses palettes\0", 0x00004006L, MCI_INTEGER, 649 "can stretch\0", 0x00004007L, MCI_INTEGER, 650 "windows\0", 0x00004008L, MCI_INTEGER, 651 "\0", 0x00000000L, MCI_END_CONSTANT, 652 "\0", 0x00000000L, MCI_END_COMMAND, 653 "realize\0", 0x00000840L, MCI_COMMAND_HEAD, 654 "notify\0", 0x00000001L, MCI_FLAG, 655 "wait\0", 0x00000002L, MCI_FLAG, 656 "normal\0", 0x00010000L, MCI_FLAG, 657 "background\0", 0x00020000L, MCI_FLAG, 658 "\0", 0x00000000L, MCI_END_COMMAND, 659 "window\0", 0x00000841L, MCI_COMMAND_HEAD, 660 "notify\0", 0x00000001L, MCI_FLAG, 661 "wait\0", 0x00000002L, MCI_FLAG, 662 "handle\0", 0x00010000L, MCI_CONSTANT, 663 "default\0", 0x00000000L, MCI_INTEGER, 664 "\0", 0x00000000L, MCI_END_CONSTANT, 665 "state\0", 0x00040000L, MCI_CONSTANT, 666 "hide\0", 0x00000000L, MCI_INTEGER, 667 "minimize\0", 0x00000006L, MCI_INTEGER, 668 "show\0", 0x00000005L, MCI_INTEGER, 669 "maximized\0", 0x00000003L, MCI_INTEGER, 670 "minimized\0", 0x00000002L, MCI_INTEGER, 671 "iconic\0", 0x00000007L, MCI_INTEGER, 672 "no action\0", 0x00000008L, MCI_INTEGER, 673 "no activate\0", 0x00000004L, MCI_INTEGER, 674 "normal\0", 0x00000001L, MCI_INTEGER, 675 "\0", 0x00000000L, MCI_END_CONSTANT, 676 "text\0", 0x00080000L, MCI_STRING, 677 "stretch\0", 0x00100000L, MCI_FLAG, 678 "fixed\0", 0x00200000L, MCI_FLAG, 679 "\0", 0x00000000L, MCI_END_COMMAND, 680 "put\0", 0x00000842L, MCI_COMMAND_HEAD, 681 "notify\0", 0x00000001L, MCI_FLAG, 682 "wait\0", 0x00000002L, MCI_FLAG, 683 "at\0", 0x00010000L, MCI_RECT, 684 "source\0", 0x00020000L, MCI_FLAG, 685 "destination\0", 0x00040000L, MCI_FLAG, 686 "\0", 0x00000000L, MCI_END_COMMAND, 687 "where\0", 0x00000843L, MCI_COMMAND_HEAD, 688 "\0", 0x00000007L, MCI_RETURN, 689 "notify\0", 0x00000001L, MCI_FLAG, 690 "wait\0", 0x00000002L, MCI_FLAG, 691 "source\0", 0x00020000L, MCI_FLAG, 692 "destination\0", 0x00040000L, MCI_FLAG, 693 "\0", 0x00000000L, MCI_END_COMMAND, 694 "update\0", 0x00000854L, MCI_COMMAND_HEAD, 695 "notify\0", 0x00000001L, MCI_FLAG, 696 "wait\0", 0x00000002L, MCI_FLAG, 697 "at\0", 0x00010000L, MCI_RECT, 698 "hdc\0", 0x00020000L, MCI_INTEGER, 699 "\0", 0x00000000L, MCI_END_COMMAND, 700 "\0", 0x00000000L, MCI_END_COMMAND_LIST 701 END 702 703 OVERLAY RCDATA 704 BEGIN 705 "open\0", 0x00000803L, MCI_COMMAND_HEAD, 706 "\0", 0x00000002L, MCI_RETURN, 707 "notify\0", 0x00000001L, MCI_FLAG, 708 "wait\0", 0x00000002L, MCI_FLAG, 709 "type\0", 0x00002000L, MCI_STRING, 710 "element\0", 0x00000200L, MCI_STRING, 711 "alias\0", 0x00000400L, MCI_STRING, 712 "shareable\0", 0x00000100L, MCI_FLAG, 713 "style\0", 0x00010000L, MCI_CONSTANT, 714 "overlapped\0", 0x00cf0000L, MCI_INTEGER, 715 "popup\0", 0x80880000L, MCI_INTEGER, 716 "child\0", 0x40000000L, MCI_INTEGER, 717 "\0", 0x00000000L, MCI_END_CONSTANT, 718 "parent\0", 0x00020000L, MCI_INTEGER, 719 "\0", 0x00000000L, MCI_END_COMMAND, 720 "status\0", 0x00000814L, MCI_COMMAND_HEAD, 721 "\0", 0x00000002L, MCI_RETURN, 722 "notify\0", 0x00000001L, MCI_FLAG, 723 "wait\0", 0x00000002L, MCI_FLAG, 724 "\0", 0x00000100L, MCI_CONSTANT, 725 "position\0", 0x00000002L, MCI_INTEGER, 726 "length\0", 0x00000001L, MCI_INTEGER, 727 "number of tracks\0", 0x00000003L, MCI_INTEGER, 728 "mode\0", 0x00000004L, MCI_INTEGER, 729 "ready\0", 0x00000007L, MCI_INTEGER, 730 "window handle\0", 0x00004001L, MCI_INTEGER, 731 "media present\0", 0x00000005L, MCI_INTEGER, 732 "stretch\0", 0x00004002L, MCI_INTEGER, 733 "\0", 0x00000000L, MCI_END_CONSTANT, 734 "track\0", 0x00000010L, MCI_INTEGER, 735 "start\0", 0x00000200L, MCI_FLAG, 736 "\0", 0x00000000L, MCI_END_COMMAND, 737 "info\0", 0x0000080aL, MCI_COMMAND_HEAD, 738 "\0", 0x00000001L, MCI_RETURN, 739 "notify\0", 0x00000001L, MCI_FLAG, 740 "wait\0", 0x00000002L, MCI_FLAG, 741 "product\0", 0x00000100L, MCI_FLAG, 742 "file\0", 0x00000200L, MCI_FLAG, 743 "window text\0", 0x00010000L, MCI_FLAG, 744 "\0", 0x00000000L, MCI_END_COMMAND, 745 "capability\0", 0x0000080bL, MCI_COMMAND_HEAD, 746 "\0", 0x00000002L, MCI_RETURN, 747 "notify\0", 0x00000001L, MCI_FLAG, 748 "wait\0", 0x00000002L, MCI_FLAG, 749 "\0", 0x00000100L, MCI_CONSTANT, 750 "can record\0", 0x00000001L, MCI_INTEGER, 751 "has audio\0", 0x00000002L, MCI_INTEGER, 752 "has video\0", 0x00000003L, MCI_INTEGER, 753 "device type\0", 0x00000004L, MCI_INTEGER, 754 "uses files\0", 0x00000005L, MCI_INTEGER, 755 "compound device\0", 0x00000006L, MCI_INTEGER, 756 "can eject\0", 0x00000007L, MCI_INTEGER, 757 "can play\0", 0x00000008L, MCI_INTEGER, 758 "can save\0", 0x00000009L, MCI_INTEGER, 759 "can stretch\0", 0x00004001L, MCI_INTEGER, 760 "can freeze\0", 0x00004002L, MCI_INTEGER, 761 "windows\0", 0x00004003L, MCI_INTEGER, 762 "\0", 0x00000000L, MCI_END_CONSTANT, 763 "\0", 0x00000000L, MCI_END_COMMAND, 764 "window\0", 0x00000841L, MCI_COMMAND_HEAD, 765 "notify\0", 0x00000001L, MCI_FLAG, 766 "wait\0", 0x00000002L, MCI_FLAG, 767 "handle\0", 0x00010000L, MCI_CONSTANT, 768 "default\0", 0x00000000L, MCI_INTEGER, 769 "\0", 0x00000000L, MCI_END_CONSTANT, 770 "state\0", 0x00040000L, MCI_CONSTANT, 771 "hide\0", 0x00000000L, MCI_INTEGER, 772 "minimize\0", 0x00000006L, MCI_INTEGER, 773 "show\0", 0x00000005L, MCI_INTEGER, 774 "maximized\0", 0x00000003L, MCI_INTEGER, 775 "minimized\0", 0x00000002L, MCI_INTEGER, 776 "iconic\0", 0x00000007L, MCI_INTEGER, 777 "no action\0", 0x00000008L, MCI_INTEGER, 778 "no activate\0", 0x00000004L, MCI_INTEGER, 779 "normal\0", 0x00000001L, MCI_INTEGER, 780 "\0", 0x00000000L, MCI_END_CONSTANT, 781 "text\0", 0x00080000L, MCI_STRING, 782 "stretch\0", 0x00100000L, MCI_FLAG, 783 "fixed\0", 0x00200000L, MCI_FLAG, 784 "\0", 0x00000000L, MCI_END_COMMAND, 785 "put\0", 0x00000842L, MCI_COMMAND_HEAD, 786 "notify\0", 0x00000001L, MCI_FLAG, 787 "wait\0", 0x00000002L, MCI_FLAG, 788 "at\0", 0x00010000L, MCI_RECT, 789 "source\0", 0x00020000L, MCI_FLAG, 790 "destination\0", 0x00040000L, MCI_FLAG, 791 "frame\0", 0x00080000L, MCI_FLAG, 792 "video\0", 0x00100000L, MCI_FLAG, 793 "\0", 0x00000000L, MCI_END_COMMAND, 794 "where\0", 0x00000843L, MCI_COMMAND_HEAD, 795 "\0", 0x00000007L, MCI_RETURN, 796 "notify\0", 0x00000001L, MCI_FLAG, 797 "wait\0", 0x00000002L, MCI_FLAG, 798 "source\0", 0x00020000L, MCI_FLAG, 799 "destination\0", 0x00040000L, MCI_FLAG, 800 "frame\0", 0x00080000L, MCI_FLAG, 801 "video\0", 0x00100000L, MCI_FLAG, 802 "\0", 0x00000000L, MCI_END_COMMAND, 803 "save\0", 0x00000813L, MCI_COMMAND_HEAD, 804 "notify\0", 0x00000001L, MCI_FLAG, 805 "wait\0", 0x00000002L, MCI_FLAG, 806 "\0", 0x00000100L, MCI_STRING, 807 "at\0", 0x00010000L, MCI_RECT, 808 "\0", 0x00000000L, MCI_END_COMMAND, 809 "load\0", 0x00000850L, MCI_COMMAND_HEAD, 810 "notify\0", 0x00000001L, MCI_FLAG, 811 "wait\0", 0x00000002L, MCI_FLAG, 812 "\0", 0x00000100L, MCI_STRING, 813 "at\0", 0x00010000L, MCI_RECT, 814 "\0", 0x00000000L, MCI_END_COMMAND, 815 "freeze\0", 0x00000844L, MCI_COMMAND_HEAD, 816 "notify\0", 0x00000001L, MCI_FLAG, 817 "wait\0", 0x00000002L, MCI_FLAG, 818 "at\0", 0x00010000L, MCI_RECT, 819 "\0", 0x00000000L, MCI_END_COMMAND, 820 "unfreeze\0", 0x00000845L, MCI_COMMAND_HEAD, 821 "notify\0", 0x00000001L, MCI_FLAG, 822 "wait\0", 0x00000002L, MCI_FLAG, 823 "at\0", 0x00010000L, MCI_RECT, 824 "\0", 0x00000000L, MCI_END_COMMAND, 825 "\0", 0x00000000L, MCI_END_COMMAND_LIST 826 END 827 828 STRINGTABLE 829 BEGIN 830 831 MCI_DEVTYPE_VCR, "vcr" 832 MCI_DEVTYPE_VIDEODISC, "videodisc" 833 MCI_DEVTYPE_OVERLAY, "overlay" 834 MCI_DEVTYPE_CD_AUDIO, "cdaudio" 835 MCI_DEVTYPE_DAT, "dat" 836 MCI_DEVTYPE_SCANNER, "scanner" 837 MCI_DEVTYPE_ANIMATION, "animation" 838 MCI_DEVTYPE_DIGITAL_VIDEO, "digitalvideo" 839 MCI_DEVTYPE_OTHER, "other" 840 MCI_DEVTYPE_WAVEFORM_AUDIO, "waveaudio" 841 MCI_DEVTYPE_SEQUENCER, "sequencer" 842 843 MCI_MODE_NOT_READY, "not ready" 844 MCI_MODE_STOP, "stopped" 845 MCI_MODE_PLAY, "playing" 846 MCI_MODE_RECORD, "recording" 847 MCI_MODE_SEEK, "seeking" 848 MCI_MODE_PAUSE, "paused" 849 MCI_MODE_OPEN, "open" 850 MCI_FALSE, "false" 851 MCI_TRUE, "true" 852 MCI_FORMAT_MILLISECONDS_S, "milliseconds" 853 MCI_FORMAT_HMS_S, "hms" 854 MCI_FORMAT_MSF_S, "msf" 855 MCI_FORMAT_FRAMES_S, "frames" 856 MCI_FORMAT_SMPTE_24_S, "smpte 24" 857 MCI_FORMAT_SMPTE_25_S, "smpte 25" 858 MCI_FORMAT_SMPTE_30_S, "smpte 30" 859 MCI_FORMAT_SMPTE_30DROP_S, "smpte 30 drop" 860 MCI_FORMAT_BYTES_S, "bytes" 861 MCI_FORMAT_SAMPLES_S, "samples" 862 MCI_FORMAT_TMSF_S, "tmsf" 863 864 MCI_VD_MODE_PARK, "parked" 865 MCI_VD_MEDIA_CLV, "CLV" 866 MCI_VD_MEDIA_CAV, "CAV" 867 MCI_VD_MEDIA_OTHER "other" 868 869 MCI_VD_FORMAT_TRACK_S, "track" 870 871 MCI_SEQ_DIV_PPQN, "PPQN" 872 MCI_SEQ_DIV_SMPTE_24 "SMPTE 24 Frame" 873 MCI_SEQ_DIV_SMPTE_25 "SMPTE 25 Frame" 874 MCI_SEQ_DIV_SMPTE_30DROP "SMPTE 30 Drop Frame" 875 MCI_SEQ_DIV_SMPTE_30 "SMPTE 30 Frame" 876 877 MCI_SEQ_FILE_S, "file" 878 MCI_SEQ_MIDI_S, "midi" 879 MCI_SEQ_SMPTE_S, "smpte" 880 MCI_SEQ_FORMAT_SONGPTR_S, "song pointer" 881 MCI_SEQ_NONE_S, "none" 882 MCI_SEQ_MAPPER_S, "mapper" 883 WAVE_FORMAT_PCM_S, "pcm" 884 WAVE_MAPPER_S, "mapper" 885 END 886 887 888 889 890 891 892 893 894 895 896 897
Note:
See TracChangeset
for help on using the changeset viewer.