- Timestamp:
- Dec 2, 2000, 12:37:34 PM (25 years ago)
- Location:
- trunk/src/winmm/mcicda
- Files:
-
- 3 added
- 2 deleted
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/winmm/mcicda/cdrom.cpp
r2473 r4709 1 /* -*- tab-width: 8; c-basic-offset: 4 -*- */ 2 /* 3 * MCI CDAUDIO Driver for OS/2. Interface to OS/2 DosIOCtrl() 4 * 5 * Copyright 2000 Chris Wohlgemuth 6 * 7 * Project Odin Software License can be found in LICENSE.TXT 8 * 9 */ 10 11 1 12 #include <os2win.h> 2 13 #include "cdrom.h" 14 #include <debugtools.h> 15 #include <string.h> 16 17 /* 18 * FIXME: Should use the right errorcodes for SetLastError if a function fails. 19 */ 3 20 4 21 int CDAUDIO_Open(WINE_CDAUDIO* wcda) 5 22 { 6 dprintf(("MCICDA-CDROM: CDAUDIO_Open not implemented.\n")); 7 SetLastError(ERROR_CALL_NOT_IMPLEMENTED); 8 return FALSE; 9 } 10 11 int CDAUDIO_Close(WINE_CDAUDIO* wcda) 12 { 13 dprintf(("MCICDA-CDROM: CDAUDIO_Close not implemented.\n")); 14 SetLastError(ERROR_CALL_NOT_IMPLEMENTED); 15 return FALSE; 23 ULONG yyrc; 24 USHORT sel; 25 HFILE hFile; 26 int iNumCD; 27 char chrFirstCD[3]={0}; 28 int i; 29 30 dprintf(("MCICDA-CDROM: Trying to open drive %s...\n",wcda->chrDrive)); 31 32 if(strlen(wcda->chrDrive)==2) { 33 if((wcda->hfOS2Handle=os2CDOpen(wcda->chrDrive))==NULL) { 34 SetLastError(ERROR_WRONG_DISK); 35 /* We always return TRUE because we want to open the driver not the disk */ 36 } 37 return TRUE; 38 } 39 40 if(!strcmpi(wcda->chrDeviceType,"cdaudio")) { 41 /* We try any CDROM in the system until one can be opened */ 42 if(!os2CDQueryCDDrives(&iNumCD, chrFirstCD)) { 43 SetLastError(ERROR_WRONG_DISK); 44 return FALSE;/* Can't get drives in system */ 45 } 46 47 chrFirstCD[1]=':'; 48 for(i=0;i<iNumCD;i++) { 49 chrFirstCD[0]++; 50 if((wcda->hfOS2Handle=os2CDOpen(chrFirstCD))!=NULL) { 51 return TRUE; 52 } 53 } 54 SetLastError(ERROR_WRONG_DISK); 55 /* We always return TRUE because we want to open the driver not the disk */ 56 /* Can't open CD */ 57 } 58 /* We always return TRUE because we want to open the driver not the disk */ 59 return TRUE; 60 } 61 62 int CDAUDIO_Close(WINE_CDAUDIO* wcda) 63 { 64 ULONG rc; 65 66 dprintf(("MCICDA-CDROM: CDAUDIO_Close: Closing drive: %s...\n",wcda->chrDrive)); 67 68 if(wcda->hfOS2Handle==NULL) { 69 SetLastError(ERROR_INVALID_PARAMETER); 70 return FALSE; 71 } 72 73 if((rc=os2CDClose(wcda->hfOS2Handle))!=0) { 74 dprintf(("MCICDA-CDROM: CDAUDIO_Close:rc=%d \n",rc)); 75 SetLastError(ERROR_INVALID_PARAMETER); 76 return FALSE; 77 } 78 wcda->hfOS2Handle=NULL; 79 dprintf(("MCICDA-CDROM: CDAUDIO_Close: Drive %s closed\n",wcda->chrDrive)); 80 return TRUE; 16 81 } 17 82 … … 25 90 int CDAUDIO_Play(WINE_CDAUDIO* wcda, DWORD start, DWORD stop) 26 91 { 27 dprintf(("MCICDA-CDROM: CDAUDIO_Play not implemented.\n")); 28 SetLastError(ERROR_CALL_NOT_IMPLEMENTED); 29 return FALSE; 92 ULONG rc; 93 94 /* FIXME: error handling is missing */ 95 //SetLastError(ERROR_CALL_NOT_IMPLEMENTED); 96 if(!wcda->hfOS2Handle) { 97 CDAUDIO_Open(wcda);/* Get new handle */ 98 if(!wcda->hfOS2Handle) { 99 WARN("hfOS2Handle isn't valid and can't get new one\n"); 100 SetLastError(ERROR_INVALID_PARAMETER); 101 return 1; 102 } 103 } 104 105 CDAUDIO_GetCDStatus(wcda); 106 if(wcda->cdaMode==WINE_CDA_PLAY||wcda->cdaMode==WINE_CDA_PAUSE) 107 CDAUDIO_Stop(wcda); 108 rc=os2CDPlayRange(wcda->hfOS2Handle , start, stop); 109 return 0; 30 110 } 31 111 32 112 int CDAUDIO_Stop(WINE_CDAUDIO* wcda) 33 113 { 34 dprintf(("MCICDA-CDROM: CDAUDIO_Stop not implemented.\n")); 35 SetLastError(ERROR_CALL_NOT_IMPLEMENTED); 36 return FALSE; 114 // SetLastError(ERROR_CALL_NOT_IMPLEMENTED); 115 /* FIXME: error handling is missing */ 116 if(!wcda->hfOS2Handle) { 117 CDAUDIO_Open(wcda);/* Get new handle */ 118 if(!wcda->hfOS2Handle) { 119 WARN("hfOS2Handle isn't valid and can't get new one\n"); 120 SetLastError(ERROR_INVALID_PARAMETER); 121 return 1; 122 } 123 } 124 125 os2CDStop(wcda->hfOS2Handle); 126 return 0; 37 127 } 38 128 39 129 int CDAUDIO_Pause(WINE_CDAUDIO* wcda, int pauseOn) 40 130 { 41 dprintf(("MCICDA-CDROM: CDAUDIO_Pause not implemented.\n")); 42 SetLastError(ERROR_CALL_NOT_IMPLEMENTED); 43 return FALSE; 131 132 //SetLastError(ERROR_CALL_NOT_IMPLEMENTED); 133 /* FIXME: error handling is missing */ 134 if(!wcda->hfOS2Handle) { 135 CDAUDIO_Open(wcda);/* Get new handle */ 136 if(!wcda->hfOS2Handle) { 137 WARN("hfOS2Handle isn't valid and can't get new one\n"); 138 SetLastError(ERROR_INVALID_PARAMETER); 139 return 1; 140 } 141 } 142 143 if(pauseOn) 144 os2CDStop(wcda->hfOS2Handle); 145 else 146 os2CDResume(wcda->hfOS2Handle); 147 return 0; 44 148 } 45 149 46 150 int CDAUDIO_Seek(WINE_CDAUDIO* wcda, DWORD at) 47 151 { 48 dprintf(("MCICDA-CDROM: CDAUDIO_Seek not implemented.\n")); 49 SetLastError(ERROR_CALL_NOT_IMPLEMENTED); 50 return FALSE; 152 /* FIXME: error handling is missing */ 153 //SetLastError(ERROR_CALL_NOT_IMPLEMENTED); 154 if(!wcda->hfOS2Handle) { 155 CDAUDIO_Open(wcda);/* Get new handle */ 156 if(!wcda->hfOS2Handle) { 157 WARN("hfOS2Handle isn't valid and can't get new one\n"); 158 SetLastError(ERROR_INVALID_PARAMETER); 159 return 1; 160 } 161 } 162 163 os2CDSeek(wcda->hfOS2Handle, at); 164 return 0; 51 165 } 52 166 53 167 int CDAUDIO_SetDoor(WINE_CDAUDIO* wcda, int open) 54 168 { 55 dprintf(("MCICDA-CDROM: CDAUDIO_SetDoor not implemented.\n")); 56 SetLastError(ERROR_CALL_NOT_IMPLEMENTED); 57 return FALSE; 58 } 59 60 UINT16 CDAUDIO_GetNumberOfTracks(WINE_CDAUDIO* wcda) 61 { 62 dprintf(("MCICDA-CDROM: CDAUDIO_GetNumberOfTracks not implemented.\n")); 63 SetLastError(ERROR_CALL_NOT_IMPLEMENTED); 64 return FALSE; 169 170 /* FIXME: error handling is missing */ 171 if(!wcda->hfOS2Handle) { 172 CDAUDIO_Open(wcda);/* Get new handle */ 173 if(!wcda->hfOS2Handle) { 174 WARN("hfOS2Handle isn't valid and can't get new one\n"); 175 SetLastError(ERROR_INVALID_PARAMETER); 176 return 1; 177 } 178 } 179 180 CDAUDIO_Stop(wcda); 181 if(open) { 182 os2CDEject(wcda->hfOS2Handle); 183 } 184 else 185 BOOL os2CDCloseTray(HFILE hfDrive); 186 187 return 0; 188 } 189 190 191 /******************************************/ 192 /* Result: 193 0: Error 194 -1: CD is Data Disk 195 other: # Audio tracks */ 196 /******************************************/ 197 int CDAUDIO_GetNumberOfTracks(WINE_CDAUDIO* wcda) 198 { 199 int rcOS2; 200 201 if(!wcda->hfOS2Handle) { 202 CDAUDIO_Open(wcda);/* Get new handle */ 203 if(!wcda->hfOS2Handle) { 204 WARN("hfOS2Handle isn't valid and can't get new one\n"); 205 SetLastError(ERROR_INVALID_PARAMETER); 206 return 0; 207 } 208 } 209 210 rcOS2=os2GetNumTracks(wcda->hfOS2Handle,&wcda->ulLeadOut); 211 switch(rcOS2) 212 { 213 case -1: 214 SetLastError(ERROR_INVALID_PARAMETER); 215 return -1; 216 case 0: 217 SetLastError(ERROR_WRONG_DISK); 218 return -1; 219 default: 220 break; 221 } 222 223 wcda->nTracks=rcOS2; 224 wcda->nFirstTrack=1; 225 wcda->nLastTrack=rcOS2; 226 return rcOS2; 65 227 } 66 228 67 229 BOOL CDAUDIO_GetTracksInfo(WINE_CDAUDIO* wcda) 68 230 { 69 dprintf(("MCICDA-CDROM: CDAUDIO_GetTracksInfo not implemented.\n")); 70 SetLastError(ERROR_CALL_NOT_IMPLEMENTED); 71 return FALSE; 72 } 231 232 int i, length; 233 ULONG start, last_start = 0; 234 int total_length = 0; 235 236 if(!wcda->hfOS2Handle) { 237 CDAUDIO_Open(wcda);/* Get new handle */ 238 if(!wcda->hfOS2Handle) { 239 WARN("hfOS2Handle isn't valid and can't get new one\n"); 240 SetLastError(ERROR_INVALID_PARAMETER); 241 return FALSE; 242 } 243 } 244 245 if (wcda->nTracks == 0) { 246 if (CDAUDIO_GetNumberOfTracks(wcda) <= 0) 247 return FALSE; 248 } 249 250 TRACE("nTracks=%u\n", wcda->nTracks); 251 252 SetLastError(ERROR_INVALID_PARAMETER); 253 254 if (wcda->lpdwTrackLen != NULL) 255 free(wcda->lpdwTrackLen); 256 wcda->lpdwTrackLen = (LPDWORD)malloc((wcda->nTracks + 1) * sizeof(DWORD)); 257 if (wcda->lpdwTrackPos != NULL) 258 free(wcda->lpdwTrackPos); 259 wcda->lpdwTrackPos = (LPDWORD)malloc((wcda->nTracks + 1) * sizeof(DWORD)); 260 if (wcda->lpbTrackFlags != NULL) 261 free(wcda->lpbTrackFlags); 262 wcda->lpbTrackFlags = (LPBYTE)malloc((wcda->nTracks + 1) * sizeof(BYTE)); 263 264 if (wcda->lpdwTrackLen == NULL || wcda->lpdwTrackPos == NULL || 265 wcda->lpbTrackFlags == NULL) { 266 WARN("error allocating track table !\n"); 267 /* Freeing the already allocated mem */ 268 if (wcda->lpdwTrackLen != NULL) 269 free(wcda->lpdwTrackLen); 270 if (wcda->lpdwTrackPos != NULL) 271 free(wcda->lpdwTrackPos); 272 if (wcda->lpbTrackFlags != NULL) 273 free(wcda->lpbTrackFlags); 274 wcda->lpbTrackFlags=NULL; 275 wcda->lpdwTrackPos=NULL; 276 wcda->lpdwTrackLen= NULL; 277 return FALSE; 278 } 279 memset(wcda->lpdwTrackLen, 0, (wcda->nTracks + 1) * sizeof(DWORD)); 280 memset(wcda->lpdwTrackPos, 0, (wcda->nTracks + 1) * sizeof(DWORD)); 281 memset(wcda->lpbTrackFlags, 0, (wcda->nTracks + 1) * sizeof(BYTE)); 282 283 for (i = 0; i <= wcda->nTracks; i++) { 284 if((start=os2CDQueryTrackStartSector(wcda->hfOS2Handle,i))==0) 285 { 286 WARN("error reading start sector for track %d\n", i+1); 287 /* Freeing the already allocated mem */ 288 if (wcda->lpdwTrackLen != NULL) 289 free(wcda->lpdwTrackLen); 290 if (wcda->lpdwTrackPos != NULL) 291 free(wcda->lpdwTrackPos); 292 if (wcda->lpbTrackFlags != NULL) 293 free(wcda->lpbTrackFlags); 294 wcda->lpbTrackFlags=NULL; 295 wcda->lpdwTrackPos=NULL; 296 wcda->lpdwTrackLen= NULL; 297 return FALSE; 298 } 299 start-=150; 300 301 if (i == 0) { 302 last_start = start; 303 wcda->dwFirstFrame = start; 304 TRACE("dwFirstOffset=%u\n", start); 305 } else { 306 length = start - last_start; 307 last_start = start; 308 start = last_start - length; 309 total_length += length; 310 wcda->lpdwTrackLen[i - 1] = length; 311 wcda->lpdwTrackPos[i - 1] = start; 312 TRACE("track #%u start=%u len=%u\n", i, start, length); 313 } 314 //if(wcda->ulCDROMStatus & ) 315 wcda->lpbTrackFlags[i] = 0; 316 //TRACE("track #%u flags=%02x\n", i + 1, wcda->lpbTrackFlags[i]); 317 }/* for */ 318 319 wcda->dwLastFrame = last_start; 320 TRACE("total_len=%u Leaving CDAUDIO_GetTracksInfo...\n", total_length); 321 322 return TRUE; 323 324 dprintf(("MCICDA-CDROM: CDAUDIO_GetTracksInfo not implemented.\n")); 325 SetLastError(ERROR_CALL_NOT_IMPLEMENTED); 326 return FALSE; 327 } 328 73 329 74 330 BOOL CDAUDIO_GetCDStatus(WINE_CDAUDIO* wcda) 75 331 { 76 dprintf(("MCICDA-CDROM: CDAUDIO_GetCDStatus not implemented.\n")); 77 SetLastError(ERROR_CALL_NOT_IMPLEMENTED); 78 return FALSE; 79 } 80 81 332 ULONG ulRet; 333 int oldmode = wcda->cdaMode; 334 335 if(!wcda->hfOS2Handle) { 336 CDAUDIO_Open(wcda);/* Get new handle */ 337 if(!wcda->hfOS2Handle) { 338 WARN("hfOS2Handle isn't valid and can't get new one\n"); 339 SetLastError(ERROR_INVALID_PARAMETER); 340 return FALSE; 341 } 342 } 343 344 if(!os2GetCDStatus(wcda->hfOS2Handle, &wcda->ulCDROMStatus)) { 345 WARN("os2GetCDStatus(wcda->hfOS2Handle, &wcda->ulCDROMStatus) returned FALSE\n"); 346 return FALSE; 347 } 348 /* Current mode */ 349 //wcda->cdaMode=WINE_CDA_STOP; 350 if(wcda->ulCDROMStatus & 0x1L) 351 wcda->cdaMode=WINE_CDA_OPEN; /* Door open */ 352 else if(wcda->ulCDROMStatus & 0x1000L) 353 wcda->cdaMode=WINE_CDA_PLAY; /* Playing */ 354 else if(wcda->ulCDROMStatus & 0x800L) 355 wcda->cdaMode=WINE_CDA_NOTREADY; 356 else 357 wcda->cdaMode=WINE_CDA_STOP; 358 359 if(wcda->cdaMode==WINE_CDA_OPEN && wcda->hfOS2Handle) { 360 CDAUDIO_Close(wcda); 361 return FALSE; 362 } 363 364 if(!os2GetCDAudioStatus(wcda->hfOS2Handle, &wcda->usCDAudioStatus)) { 365 WARN("os2GetCDAudioStatus(wcda->hfOS2Handle, &wcda->usCDAudioStatus) returned FALSE rc=%x %d\n",wcda->usCDAudioStatus,wcda->usCDAudioStatus); 366 return FALSE; 367 368 } 369 else { 370 if(wcda->usCDAudioStatus & 1) 371 wcda->cdaMode=WINE_CDA_PAUSE; 372 os2CDGetHeadLocation(wcda->hfOS2Handle,&wcda->dwCurFrame); 373 os2CDQueryCurTrack(wcda->hfOS2Handle, &wcda->nCurTrack); 374 } 375 376 if (oldmode != wcda->cdaMode && oldmode == WINE_CDA_OPEN) { 377 TRACE("Updating TracksInfo !\n"); 378 if (!CDAUDIO_GetTracksInfo(wcda)) { 379 WARN("error updating TracksInfo !\n"); 380 return FALSE; 381 } 382 } 383 384 dprintf(("MCICDA-CDROM: Leaving CDAUDIO_GetCDStatus... cdaMode: %x\n",wcda->cdaMode)); 385 if (wcda->cdaMode != WINE_CDA_OPEN) 386 return TRUE; 387 else 388 return FALSE; 389 } 390 391 392 393 394 395 396 397 398 399 400 -
trunk/src/winmm/mcicda/cdrom.h
r2473 r4709 1 1 /* -*- tab-width: 8; c-basic-offset: 4 -*- */ 2 2 /* 3 * Sample MCI CDAUDIO Wine Driver for Linux3 * MCI CDAUDIO Driver for OS/2 4 4 * 5 5 * Copyright 1994 Martin Ayotte 6 6 * Copyright 1999 Eric Pouech 7 * Copyright 2000 Chris Wohlgemuth 8 * 9 * Project Odin Software License can be found in LICENSE.TXT 7 10 */ 8 11 … … 12 15 #include <stdlib.h> 13 16 // #include <unistd.h> 14 #include "windef.h"17 //#include "windef.h" 15 18 16 19 #ifdef HAVE_LINUX_CDROM_H … … 31 34 struct cd_sub_channel_info sc; 32 35 #endif 36 char chrDrive[3]; 37 char cPad; 38 char chrDeviceType[128]; 39 ULONG hfOS2Handle; 40 ULONG ulLeadOut; 33 41 /* those data reflect the cdaudio structure and 34 42 * don't change while playing … … 43 51 DWORD dwLastFrame; 44 52 /* those data change while playing */ 53 ULONG ulCDROMStatus; 54 USHORT usCDAudioStatus; 45 55 int cdaMode; 46 UINT 16nCurTrack;56 UINT nCurTrack; 47 57 DWORD dwCurFrame; 48 58 } WINE_CDAUDIO; 59 60 typedef struct { 61 UINT wDevID; 62 int nUseCount; /* Incremented for each shared open */ 63 BOOL fShareable; /* TRUE if first open was shareable */ 64 WORD wNotifyDeviceID; /* MCI device ID with a pending notification */ 65 HANDLE hCallback; /* Callback handle for pending notification */ 66 DWORD dwTimeFormat; 67 WINE_CDAUDIO wcda; 68 int mciMode; 69 } WINE_MCICDAUDIO; 70 49 71 50 72 #define WINE_CDA_DONTKNOW 0x00 … … 54 76 #define WINE_CDA_STOP 0x04 55 77 #define WINE_CDA_PAUSE 0x05 78 79 #ifndef MCI_CONFIGURE 80 #define MCI_CONFIGURE 0x087A 81 #endif 56 82 57 83 int CDAUDIO_Open(WINE_CDAUDIO* wcda); … … 63 89 int CDAUDIO_Seek(WINE_CDAUDIO* wcda, DWORD at); 64 90 int CDAUDIO_SetDoor(WINE_CDAUDIO* wcda, int open); 65 UINT16CDAUDIO_GetNumberOfTracks(WINE_CDAUDIO* wcda);91 int CDAUDIO_GetNumberOfTracks(WINE_CDAUDIO* wcda); 66 92 BOOL CDAUDIO_GetTracksInfo(WINE_CDAUDIO* wcda); 67 93 BOOL CDAUDIO_GetCDStatus(WINE_CDAUDIO* wcda); 94 95 HFILE os2CDOpen(char *drive); 96 ULONG os2CDClose(ULONG hfOS2Handle); 97 int os2GetNumTracks(HFILE hfOS2Handle,ULONG *ulLeadOut); 98 BOOL os2GetCDStatus(HFILE hfOS2Handle, ULONG *ulStatus); 99 BOOL os2GetCDAudioStatus(HFILE hfOS2Handle, USHORT *usStatus); 100 ULONG os2CDQueryTrackStartSector( HFILE hfDrive, ULONG numTrack); 101 BOOL os2CDEject(HFILE hfDrive); 102 BOOL os2CDCloseTray(HFILE hfDrive); 103 BOOL os2CDStop(HFILE hfDrive); 104 BOOL os2CDPlayRange(HFILE hfDrive ,ULONG ulFrom, ULONG ulTo); 105 BOOL os2CDResume(HFILE hfDrive); 106 BOOL os2CDGetHeadLocation(HFILE hfOS2Handle, ULONG *ulHeadLocation); 107 BOOL os2CDSeek(HFILE hfOS2Handle, ULONG ulTo); 108 BOOL os2CDQueryCurTrack(HFILE hfOS2Handle, UINT * uiCurTrack); 109 BOOL os2CDQueryCDDrives(int *iNumCD, char * cFirstDrive); 68 110 69 111 #define CDFRAMES_PERSEC 75 -
trunk/src/winmm/mcicda/makefile
r2670 r4709 1 # $Id: makefile,v 1. 3 2000-02-06 20:52:34sandervl Exp $1 # $Id: makefile,v 1.4 2000-12-02 11:37:05 sandervl Exp $ 2 2 3 3 # … … 7 7 # 8 8 9 # 10 # Directory macros. 11 # 9 12 PDWIN32_INCLUDE = ..\..\..\include 10 PDWIN32_LIB = ..\..\..\lib11 PDWIN32_BIN = ..\..\..\bin12 PDWIN32_TOOLS = ..\..\..\tools\bin13 PDWIN32_LIB = ..\..\..\lib 14 PDWIN32_BIN = ..\..\..\$(OBJDIR) 15 PDWIN32_TOOLS = ..\..\..\tools\bin 13 16 14 17 # 18 # Compiler, tools, and interference rules. 19 # 15 20 !include $(PDWIN32_INCLUDE)/pdwin32.mk 16 21 22 # 23 # Target name - name of the dll without extention and path. 24 # 25 TARGET = mcicdos2 17 26 18 CFLAGS = $(CFLAGS) -I$(PDWIN32_INCLUDE) 19 CXXFLAGS = $(CXXFLAGS) -I$(PDWIN32_INCLUDE) 27 OBJS = $(OBJDIR)\mcicda.obj \ 28 $(OBJDIR)\cdrom.obj \ 29 $(OBJDIR)\mcicdos2rsrc.obj \ 30 $(PDWIN32_LIB)/dllentry.obj \ 31 $(OBJDIR)\os2cdrom.obj 20 32 21 22 TARGET = mcicda 23 24 OBJS = mcicda.obj cdrom.obj resource.obj $(PDWIN32_LIB)/dllentry.obj 25 26 all: $(TARGET).dll $(TARGET).lib 27 28 29 $(TARGET).dll: $(OBJS) $(TARGET).def 30 $(LD) $(LDFLAGS) -Fm -Fe$@ $(OBJS) $(TARGET).def \ 31 $(PDWIN32_LIB)/pmwinx.lib $(PDWIN32_LIB)/kernel32.lib \ 32 $(PDWIN32_LIB)/user32.lib $(PDWIN32_LIB)/winmm.lib $(PDWIN32_LIB)/odincrt.lib OS2386.LIB $(RTLLIB_O) 33 $(CP) $@ $(PDWIN32_BIN) 34 35 36 $(TARGET).lib: $(TARGET).def 37 $(IMPLIB) $(IMPLIBFLAGS) $@ $** 38 $(CP) $@ $(PDWIN32_LIB) 39 40 resource.asm: $(TARGET).rc 41 $(RC) $(RCFLAGS) -o resource.asm $(TARGET).rc 42 43 resource.obj: resource.asm 44 45 mcicda.obj: mcicda.cpp 46 47 cdrom.obj: cdrom.cpp 48 49 clean: 50 $(RM) *.obj *.lib *.dll *.map *.pch 51 $(RM) $(PDWIN32_BIN)\$(TARGET).dll 52 $(RM) $(PDWIN32_LIB)\$(TARGET).lib 33 # 34 # Libraries. One space before the '\'. 35 # 36 LIBS = \ 37 $(PDWIN32_LIB)\WINMM.LIB \ 38 $(PDWIN32_LIB)/kernel32.lib \ 39 $(PDWIN32_LIB)/$(ODINCRT).lib \ 40 OS2386.LIB \ 41 $(RTLLIB_O) 53 42 54 43 55 44 56 57 45 # 46 # Includes the common rules. 47 # 48 !include $(PDWIN32_INCLUDE)/pdwin32.post -
trunk/src/winmm/mcicda/mcicda.cpp
r2473 r4709 1 1 /* -*- tab-width: 8; c-basic-offset: 4 -*- */ 2 2 /* 3 * Sample MCI CDAUDIO Wine Driver for Linux3 * MCI CDAUDIO Driver for OS/2 4 4 * 5 5 * Copyright 1994 Martin Ayotte 6 6 * Copyright 1998-99 Eric Pouech 7 * Copyright 2000 Chris Wohlgemuth 8 * 9 * Project Odin Software License can be found in LICENSE.TXT 10 * 7 11 */ 8 12 … … 10 14 #include <string.h> 11 15 #include "winuser.h" 12 #include "driver.h"16 ////#include "driver.h" 13 17 #include "mmddk.h" 14 18 #include "cdrom.h" … … 17 21 DEFAULT_DEBUG_CHANNEL(cdaudio) 18 22 19 typedef struct {20 UINT wDevID;21 int nUseCount; /* Incremented for each shared open */22 BOOL fShareable; /* TRUE if first open was shareable */23 WORD wNotifyDeviceID; /* MCI device ID with a pending notification */24 HANDLE hCallback; /* Callback handle for pending notification */25 DWORD dwTimeFormat;26 WINE_CDAUDIO wcda;27 int mciMode;28 } WINE_MCICDAUDIO;29 23 30 24 /*-----------------------------------------------------------------------*/ … … 68 62 WINE_MCICDAUDIO* wmcda = (WINE_MCICDAUDIO*)mciGetDriverData(wDevID); 69 63 70 if (wmcda == NULL || wmcda->nUseCount == 0 || wmcda->wcda.unixdev <= 0) {71 WARN(" Invalid wDevID=%u\n", wDevID);64 if (wmcda == NULL || wmcda->nUseCount == 0 /*|| wmcda->wcda.unixdev <= 0*/ ) { 65 WARN("CDAUDIO_mciGetOpenDrv(UINT wDevID): Invalid wDevID=%u\n", wDevID); 72 66 return 0; 73 67 } … … 81 75 { 82 76 switch (wcdaMode) { 83 case WINE_CDA_DONTKNOW: return MCI_MODE_STOP; 84 case WINE_CDA_NOTREADY: return MCI_MODE_STOP; 77 case WINE_CDA_DONTKNOW: return MCI_MODE_STOP;/* 0x20d */ 78 case WINE_CDA_NOTREADY: return MCI_MODE_STOP;/* 0x20d */ 85 79 case WINE_CDA_OPEN: return MCI_MODE_OPEN; 86 80 case WINE_CDA_PLAY: return MCI_MODE_PLAY; 87 case WINE_CDA_STOP: return MCI_MODE_STOP; 81 case WINE_CDA_STOP: return MCI_MODE_STOP;/* 0x20d */ 88 82 case WINE_CDA_PAUSE: return MCI_MODE_PAUSE; 89 83 default: … … 215 209 MCI_SEEK_PARMS seekParms; 216 210 217 TRACE("(%04X, %08lX, %p);\n", wDevID, dwFlags, lpOpenParms); 211 dprintf(("CDAUDIO_mciOpen: (wDevID: %04X, dwFlags: %08lX, %p);\n", wDevID, dwFlags, lpOpenParms)); 212 218 213 219 214 if (lpOpenParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK; … … 239 234 return MCIERR_NO_ELEMENT_ALLOWED; 240 235 } 241 WARN("MCI_OPEN_ELEMENT %s ignored\n",lpOpenParms->lpstrElementName); 236 /* Cdplayer.exe puts the driveletter into lpOpenParms->lpstrElementName */ 237 TRACE("CDAUDIO_mciOpen(): MCI_OPEN_ELEMENT: %s\n",lpOpenParms->lpstrElementName); 238 239 if(strlen(lpOpenParms->lpstrElementName)==2) 240 strcpy(wmcda->wcda.chrDrive,lpOpenParms->lpstrElementName);/* Save */ 242 241 /*return MCIERR_NO_ELEMENT_ALLOWED; 243 242 bon 19991106 allows cdplayer.exe to run*/ 244 243 } 244 else if (dwFlags & MCI_OPEN_TYPE) {/*MCI_OPEN_TYPE 0x00002000L*/ 245 TRACE("CDAUDIO_mciOpen(): MCI_OPEN_TYPE: %s\n",lpOpenParms->lpstrDeviceType); 246 wmcda->wcda.chrDrive[0]=0; /* Mark that we don't have a drive */ 247 if(lpOpenParms->lpstrDeviceType) 248 strncpy(wmcda->wcda.chrDeviceType,lpOpenParms->lpstrDeviceType,sizeof(wmcda->wcda.chrDeviceType)-1); 249 else 250 wmcda->wcda.chrDeviceType[0]=0; 251 } 245 252 246 253 wmcda->wNotifyDeviceID = dwDeviceID; 247 if (CDAUDIO_Open(&wmcda->wcda) == -1) { 254 255 256 if (!CDAUDIO_Open(&wmcda->wcda)) { 257 #if 0 258 /* We're always successful because we open the driver not the disk */ 248 259 --wmcda->nUseCount; 249 260 return MCIERR_HARDWARE; 250 } 261 #endif 262 } 263 251 264 wmcda->mciMode = MCI_MODE_STOP; 252 265 wmcda->dwTimeFormat = MCI_FORMAT_MSF; 253 266 if (!CDAUDIO_GetTracksInfo(&wmcda->wcda)) { 254 267 WARN("error reading TracksInfo !\n"); 255 return MCIERR_INTERNAL; 256 } 257 258 CDAUDIO_mciSeek(wDevID, MCI_SEEK_TO_START, &seekParms); 268 //CDAUDIO_Close(&wmcda->wcda); 269 //return MCIERR_INTERNAL; 270 } 271 272 //CDAUDIO_mciSeek(wDevID, MCI_SEEK_TO_START, &seekParms); 259 273 260 274 return 0; … … 268 282 WINE_MCICDAUDIO* wmcda = CDAUDIO_mciGetOpenDrv(wDevID); 269 283 270 TRACE(" (%04X, %08lX, %p);\n", wDevID, dwParam, lpParms);284 TRACE("Entering CDAUDIO_mciClose... (%04X, %08lX, %p) wmcd: %X;\n", wDevID, dwParam, lpParms, wmcda); 271 285 272 286 if (wmcda == NULL) return MCIERR_INVALID_DEVICE_ID; … … 287 301 DWORD ret = 0; 288 302 289 TRACE(" (%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms);303 TRACE("CDAUDIO_mciGetDevCaps: (%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms); 290 304 291 305 if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK; … … 295 309 296 310 switch (lpParms->dwItem) { 297 case MCI_GETDEVCAPS_CAN_RECORD: 298 lpParms->dwReturn = MAKEMCIRESOURCE(FALSE, MCI_FALSE); 299 ret = MCI_RESOURCE_RETURNED; 300 break; 301 case MCI_GETDEVCAPS_HAS_AUDIO: 302 lpParms->dwReturn = MAKEMCIRESOURCE(TRUE, MCI_TRUE); 303 ret = MCI_RESOURCE_RETURNED; 304 break; 305 case MCI_GETDEVCAPS_HAS_VIDEO: 306 lpParms->dwReturn = MAKEMCIRESOURCE(FALSE, MCI_FALSE); 307 ret = MCI_RESOURCE_RETURNED; 308 break; 309 case MCI_GETDEVCAPS_DEVICE_TYPE: 310 lpParms->dwReturn = MAKEMCIRESOURCE(MCI_DEVTYPE_CD_AUDIO, MCI_DEVTYPE_CD_AUDIO); 311 ret = MCI_RESOURCE_RETURNED; 312 break; 313 case MCI_GETDEVCAPS_USES_FILES: 314 lpParms->dwReturn = MAKEMCIRESOURCE(FALSE, MCI_FALSE); 315 ret = MCI_RESOURCE_RETURNED; 316 break; 317 case MCI_GETDEVCAPS_COMPOUND_DEVICE: 318 lpParms->dwReturn = MAKEMCIRESOURCE(FALSE, MCI_FALSE); 319 ret = MCI_RESOURCE_RETURNED; 320 break; 321 case MCI_GETDEVCAPS_CAN_EJECT: 322 lpParms->dwReturn = MAKEMCIRESOURCE(TRUE, MCI_TRUE); 323 ret = MCI_RESOURCE_RETURNED; 324 break; 325 case MCI_GETDEVCAPS_CAN_PLAY: 326 lpParms->dwReturn = MAKEMCIRESOURCE(TRUE, MCI_TRUE); 327 ret = MCI_RESOURCE_RETURNED; 328 break; 329 case MCI_GETDEVCAPS_CAN_SAVE: 330 lpParms->dwReturn = MAKEMCIRESOURCE(FALSE, MCI_FALSE); 331 ret = MCI_RESOURCE_RETURNED; 311 case MCI_GETDEVCAPS_CAN_RECORD: /* 0x00000001L */ 312 lpParms->dwReturn = FALSE; 313 break; 314 case MCI_GETDEVCAPS_HAS_AUDIO: /* 0x00000002L */ 315 lpParms->dwReturn = TRUE; 316 break; 317 case MCI_GETDEVCAPS_HAS_VIDEO: /* 0x00000003L */ 318 lpParms->dwReturn = FALSE; 319 break; 320 case MCI_GETDEVCAPS_DEVICE_TYPE: /* 0x00000004L */ 321 lpParms->dwReturn = MCI_DEVTYPE_CD_AUDIO; 322 break; 323 case MCI_GETDEVCAPS_USES_FILES: /* 0x00000005L */ 324 lpParms->dwReturn = FALSE; 325 break; 326 case MCI_GETDEVCAPS_COMPOUND_DEVICE: /* 0x00000006L */ 327 lpParms->dwReturn = FALSE; 328 break; 329 case MCI_GETDEVCAPS_CAN_EJECT: /* 0x00000007L*/ 330 lpParms->dwReturn = TRUE; 331 break; 332 case MCI_GETDEVCAPS_CAN_PLAY: /* 0x00000008L*/ 333 lpParms->dwReturn = TRUE; 334 break; 335 case MCI_GETDEVCAPS_CAN_SAVE: /* 0x00000009L */ 336 lpParms->dwReturn = FALSE; 332 337 break; 333 338 default: … … 341 346 TRACE("lpParms->dwReturn=%08lX;\n", lpParms->dwReturn); 342 347 return ret; 348 349 #if 0 350 /* This is Wine stuff */ 351 if (dwFlags & MCI_GETDEVCAPS_ITEM) { 352 TRACE("MCI_GETDEVCAPS_ITEM dwItem=%08lX;\n", lpParms->dwItem); 353 354 switch (lpParms->dwItem) { 355 case MCI_GETDEVCAPS_CAN_RECORD: /* 0x00000001L */ 356 lpParms->dwReturn = MAKEMCIRESOURCE(FALSE, MCI_FALSE); 357 ret = MCI_RESOURCE_RETURNED; 358 break; 359 case MCI_GETDEVCAPS_HAS_AUDIO: /* 0x00000002L */ 360 lpParms->dwReturn = MAKEMCIRESOURCE(TRUE, MCI_TRUE); 361 ret = MCI_RESOURCE_RETURNED; 362 break; 363 case MCI_GETDEVCAPS_HAS_VIDEO: /* 0x00000003L */ 364 lpParms->dwReturn = MAKEMCIRESOURCE(FALSE, MCI_FALSE); 365 ret = MCI_RESOURCE_RETURNED; 366 break; 367 case MCI_GETDEVCAPS_DEVICE_TYPE: /* 0x00000004L */ 368 lpParms->dwReturn = MAKEMCIRESOURCE(MCI_DEVTYPE_CD_AUDIO, MCI_DEVTYPE_CD_AUDIO); 369 ret = MCI_RESOURCE_RETURNED; 370 break; 371 case MCI_GETDEVCAPS_USES_FILES: /* 0x00000005L */ 372 lpParms->dwReturn = MAKEMCIRESOURCE(FALSE, MCI_FALSE); 373 ret = MCI_RESOURCE_RETURNED; 374 break; 375 case MCI_GETDEVCAPS_COMPOUND_DEVICE: /* 0x00000006L */ 376 lpParms->dwReturn = MAKEMCIRESOURCE(FALSE, MCI_FALSE); 377 ret = MCI_RESOURCE_RETURNED; 378 break; 379 case MCI_GETDEVCAPS_CAN_EJECT: /* 0x00000007L*/ 380 lpParms->dwReturn = MAKEMCIRESOURCE(TRUE, MCI_TRUE); 381 ret = MCI_RESOURCE_RETURNED; 382 break; 383 case MCI_GETDEVCAPS_CAN_PLAY: /* 0x00000008L*/ 384 lpParms->dwReturn = MAKEMCIRESOURCE(TRUE, MCI_TRUE); 385 ret = MCI_RESOURCE_RETURNED; 386 break; 387 case MCI_GETDEVCAPS_CAN_SAVE: /* 0x00000009L */ 388 lpParms->dwReturn = MAKEMCIRESOURCE(FALSE, MCI_FALSE); 389 ret = MCI_RESOURCE_RETURNED; 390 break; 391 default: 392 ERR("Unsupported %lx devCaps item\n", lpParms->dwItem); 393 return MCIERR_UNRECOGNIZED_COMMAND; 394 } 395 } else { 396 TRACE("No GetDevCaps-Item !\n"); 397 return MCIERR_UNRECOGNIZED_COMMAND; 398 } 399 TRACE("lpParms->dwReturn=%08lX;\n", lpParms->dwReturn); 400 return ret; 401 #endif 343 402 } 344 403 … … 353 412 char buffer[16]; 354 413 355 TRACE(" (%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms);414 TRACE("Entering CDAUDIO_mciInfo... (%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms); 356 415 357 416 if (lpParms == NULL || lpParms->lpstrReturn == NULL) … … 361 420 TRACE("buf=%p, len=%lu\n", lpParms->lpstrReturn, lpParms->dwRetSize); 362 421 363 if (dwFlags & MCI_INFO_PRODUCT) { 364 str = " Wine's audio CD";365 } else if (dwFlags & MCI_INFO_MEDIA_UPC) { 366 // ret = MCIERR_NO_IDENTITY;422 if (dwFlags & MCI_INFO_PRODUCT) {/* 0x00000100L */ 423 str = "Odins audio CD"; 424 } else if (dwFlags & MCI_INFO_MEDIA_UPC) { /* 0x00000400L */ 425 // ret = MCIERR_NO_IDENTITY; 367 426 ret = 0; // No Info about MCIERR_NO_IDENTITY 368 } else if (dwFlags & MCI_INFO_MEDIA_IDENTITY) { 427 } else if (dwFlags & MCI_INFO_MEDIA_IDENTITY) { /* 0x00000800L */ 369 428 DWORD msf, res = 0, dummy; 370 429 int i; … … 377 436 msf = CDAUDIO_CalcTime(wmcda, MCI_FORMAT_MSF, wmcda->wcda.lpdwTrackPos[i], &dummy); 378 437 res += (MCI_MSF_MINUTE(msf) << 16) + 379 380 438 (MCI_MSF_SECOND(msf) << 8) + 439 (MCI_MSF_FRAME(msf)); 381 440 } 382 441 if (wmcda->wcda.nTracks <= 2) { … … 403 462 *lpParms->lpstrReturn = 0; 404 463 } 405 TRACE(" => %s (%ld)\n", lpParms->lpstrReturn, ret);464 TRACE("CDAUDIO_mciInfo returns => %s (ret=%ld)\n", lpParms->lpstrReturn, ret); 406 465 return ret; 407 466 } … … 415 474 DWORD ret = 0; 416 475 417 TRACE(" (%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms);476 TRACE("Entering CDAUDIO_mciStatus (%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms); 418 477 419 478 if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK; … … 425 484 wmcda->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL); 426 485 } 427 if (dwFlags & MCI_STATUS_ITEM) { 486 if (dwFlags & MCI_STATUS_ITEM) { /* MCI_STATUS_ITEM 0x00000100L */ 487 TRACE("item: %lx!\n", lpParms->dwItem); 428 488 switch (lpParms->dwItem) { 429 case MCI_STATUS_CURRENT_TRACK: 489 case MCI_STATUS_CURRENT_TRACK: /* 0x00000008L */ 430 490 if (!CDAUDIO_GetCDStatus(&wmcda->wcda)) { 431 491 return CDAUDIO_mciGetError(wmcda); … … 434 494 TRACE("CURRENT_TRACK=%lu!\n", lpParms->dwReturn); 435 495 break; 436 case MCI_STATUS_LENGTH: 496 case MCI_STATUS_LENGTH: /* 0x00000001L */ 437 497 if (wmcda->wcda.nTracks == 0) { 438 498 if (!CDAUDIO_GetTracksInfo(&wmcda->wcda)) { … … 456 516 TRACE("LENGTH=%lu !\n", lpParms->dwReturn); 457 517 break; 458 case MCI_STATUS_MODE: 518 case MCI_STATUS_MODE: /* 0x00000004L */ 459 519 if (!CDAUDIO_GetCDStatus(&wmcda->wcda)) 460 520 return CDAUDIO_mciGetError(wmcda); 461 521 lpParms->dwReturn = CDAUDIO_mciMode(wmcda->wcda.cdaMode); 462 if (!lpParms->dwReturn) lpParms->dwReturn = wmcda->mciMode; 522 if (!lpParms->dwReturn) 523 lpParms->dwReturn = wmcda->mciMode; 463 524 TRACE("MCI_STATUS_MODE=%08lX !\n", lpParms->dwReturn); 525 #if 0 526 /* What's Wine doing here??? */ 464 527 lpParms->dwReturn = MAKEMCIRESOURCE(lpParms->dwReturn, lpParms->dwReturn); 465 528 ret = MCI_RESOURCE_RETURNED; 466 break; 467 case MCI_STATUS_MEDIA_PRESENT: 529 #endif 530 break; 531 case MCI_STATUS_MEDIA_PRESENT: /* 0x00000005L */ 468 532 if (!CDAUDIO_GetCDStatus(&wmcda->wcda)) 469 533 return CDAUDIO_mciGetError(wmcda); 534 lpParms->dwReturn = (wmcda->wcda.nTracks == 0) ? FALSE : TRUE; 535 TRACE("MCI_STATUS_MEDIA_PRESENT =%c!\n", LOWORD(lpParms->dwReturn) ? 'Y' : 'N'); 536 #if 0 537 /* What's Wine doing here??? */ 470 538 lpParms->dwReturn = (wmcda->wcda.nTracks == 0) ? 471 539 MAKEMCIRESOURCE(FALSE, MCI_FALSE) : MAKEMCIRESOURCE(TRUE, MCI_TRUE); 472 540 TRACE("MCI_STATUS_MEDIA_PRESENT =%c!\n", LOWORD(lpParms->dwReturn) ? 'Y' : 'N'); 473 541 ret = MCI_RESOURCE_RETURNED; 474 break; 475 case MCI_STATUS_NUMBER_OF_TRACKS: 542 #endif 543 break; 544 case MCI_STATUS_NUMBER_OF_TRACKS: /* 0x00000003L */ 476 545 lpParms->dwReturn = CDAUDIO_GetNumberOfTracks(&wmcda->wcda); 477 546 TRACE("MCI_STATUS_NUMBER_OF_TRACKS = %lu !\n", lpParms->dwReturn); … … 479 548 return CDAUDIO_mciGetError(wmcda); 480 549 break; 481 case MCI_STATUS_POSITION: 550 case MCI_STATUS_POSITION: /* 0x00000002L */ 482 551 if (!CDAUDIO_GetCDStatus(&wmcda->wcda)) 483 552 return CDAUDIO_mciGetError(wmcda); 484 553 lpParms->dwReturn = wmcda->wcda.dwCurFrame; 485 554 if (dwFlags & MCI_STATUS_START) { 486 555 lpParms->dwReturn = wmcda->wcda.dwFirstFrame; 487 556 TRACE("get MCI_STATUS_START !\n"); 488 557 } … … 490 559 if (lpParms->dwTrack > wmcda->wcda.nTracks || lpParms->dwTrack == 0) 491 560 return MCIERR_OUTOFRANGE; 492 lpParms->dwReturn = wmcda->wcda.lpdwTrackPos[lpParms->dwTrack - 1]; 493 TRACE("get MCI_TRACK #%lu !\n", lpParms->dwTrack); 494 } 561 if(wmcda->wcda.nCurTrack) 562 lpParms->dwReturn = wmcda->wcda.lpdwTrackPos[lpParms->dwTrack - 1]; 563 //TRACE("get MCI_TRACK #%lu, track position: %lu !\n", lpParms->dwTrack, lpParms->dwReturn); 564 } 495 565 lpParms->dwReturn = CDAUDIO_CalcTime(wmcda, wmcda->dwTimeFormat, lpParms->dwReturn, &ret); 496 TRACE("MCI_STATUS_POSITION=%08lX !\n", lpParms->dwReturn);497 break; 498 case MCI_STATUS_READY: 566 TRACE("MCI_STATUS_POSITION=%08lX, track %d !\n", lpParms->dwReturn, lpParms->dwTrack); 567 break; 568 case MCI_STATUS_READY: /* 0x00000007L */ 499 569 TRACE("MCI_STATUS_READY !\n"); 570 lpParms->dwReturn = (wmcda->wcda.cdaMode == WINE_CDA_DONTKNOW || 571 wmcda->wcda.cdaMode == WINE_CDA_NOTREADY) ? FALSE : TRUE; 572 TRACE("MCI_STATUS_READY=%u!\n", LOWORD(lpParms->dwReturn)); 573 #if 0 574 /* What's Wine doing here??? */ 500 575 lpParms->dwReturn = (wmcda->wcda.cdaMode == WINE_CDA_DONTKNOW || 501 576 wmcda->wcda.cdaMode == WINE_CDA_NOTREADY) ? … … 503 578 TRACE("MCI_STATUS_READY=%u!\n", LOWORD(lpParms->dwReturn)); 504 579 ret = MCI_RESOURCE_RETURNED; 505 break; 506 case MCI_STATUS_TIME_FORMAT: 580 #endif 581 break; 582 case MCI_STATUS_TIME_FORMAT: /* 0x00000006L */ 583 #if 0 584 /* What's Wine doing here??? */ 507 585 lpParms->dwReturn = MAKEMCIRESOURCE(wmcda->dwTimeFormat, wmcda->dwTimeFormat); 586 ret = MCI_RESOURCE_RETURNED; 587 #endif 588 lpParms->dwReturn = wmcda->dwTimeFormat; 508 589 TRACE("MCI_STATUS_TIME_FORMAT=%08x!\n", LOWORD(lpParms->dwReturn)); 509 ret = MCI_RESOURCE_RETURNED;510 590 break; 511 591 case 4001: /* FIXME: for boggus FullCD */ … … 539 619 DWORD ret = 0; 540 620 541 TRACE(" (%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms);621 TRACE("Entering CDAUDIO_mciPlay (%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms); 542 622 543 623 if (lpParms == NULL) { … … 588 668 WINE_MCICDAUDIO* wmcda = CDAUDIO_mciGetOpenDrv(wDevID); 589 669 590 TRACE(" (%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms);670 TRACE("Entering CDAUDIO_mciStop (%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms); 591 671 592 672 if (wmcda == NULL) return MCIERR_INVALID_DEVICE_ID; … … 611 691 WINE_MCICDAUDIO* wmcda = CDAUDIO_mciGetOpenDrv(wDevID); 612 692 613 TRACE(" (%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms);693 TRACE("Entering CDAUDIO_mciPause (%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms); 614 694 615 695 if (wmcda == NULL) return MCIERR_INVALID_DEVICE_ID; … … 656 736 WINE_MCICDAUDIO* wmcda = CDAUDIO_mciGetOpenDrv(wDevID); 657 737 658 TRACE(" (%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms);738 TRACE("Entering CDAUDIO_mciSeek (%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms); 659 739 660 740 if (wmcda == NULL) return MCIERR_INVALID_DEVICE_ID; … … 671 751 at = wmcda->wcda.dwLastFrame; 672 752 break; 673 case MCI_TO: 753 case MCI_TO: /* 0x00000008L */ 674 754 TRACE("Seeking to %lu\n", lpParms->dwTo); 675 755 at = lpParms->dwTo; … … 714 794 WINE_MCICDAUDIO* wmcda = CDAUDIO_mciGetOpenDrv(wDevID); 715 795 716 TRACE(" (%04X, %08lX, %p);\n", wDevID, dwFlags, lpParms);796 TRACE("Entering CDAUDIO_mciSet (%04X, %08lX, %p, %08lX);\n", wDevID, dwFlags, lpParms, wmcda); 717 797 718 798 if (wmcda == NULL) return MCIERR_INVALID_DEVICE_ID; 719 799 if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK;; 720 /*800 721 801 TRACE("dwTimeFormat=%08lX\n", lpParms->dwTimeFormat); 722 802 TRACE("dwAudio=%08lX\n", lpParms->dwAudio); 723 */803 724 804 if (dwFlags & MCI_SET_TIME_FORMAT) { 725 805 switch (lpParms->dwTimeFormat) { 726 case MCI_FORMAT_MILLISECONDS: 727 TRACE("MCI_FORMAT_MILLISECONDS !\n"); 728 break; 729 case MCI_FORMAT_MSF: 806 case MCI_FORMAT_MILLISECONDS: /* 0 */ 807 TRACE("MCI_FORMAT_MILLISECONDS !\n"); 808 break; 809 case MCI_FORMAT_MSF: /* 2 */ 730 810 TRACE("MCI_FORMAT_MSF !\n"); 731 811 break; 732 case MCI_FORMAT_TMSF: 812 #if 0 813 case MCI_FORMAT_FRAMES: /* 3 */ 814 TRACE("MCI_FORMAT_FRAMES !\n"); 815 break; 816 case MCI_FORMAT_SAMPLES: /* 9 */ 817 TRACE("MCI_FORMAT_SAMPLES !\n"); 818 break; 819 #endif 820 case MCI_FORMAT_TMSF: /* 10 */ 733 821 TRACE("MCI_FORMAT_TMSF !\n"); 734 822 break; … … 738 826 } 739 827 wmcda->dwTimeFormat = lpParms->dwTimeFormat; 740 } 828 } /* end of if (dwFlags & MCI_SET_TIME_FORMAT) */ 829 741 830 if (dwFlags & MCI_SET_DOOR_OPEN) { 742 831 CDAUDIO_mciSetDoor(wDevID, TRUE); … … 745 834 CDAUDIO_mciSetDoor(wDevID, FALSE); 746 835 } 836 837 if (dwFlags & MCI_SET_ON){ 838 if(dwFlags & MCI_SET_AUDIO) { 839 TRACE("MCI_SET_AUDIO -> %x !\n",lpParms->dwAudio); 840 FIXME("FIXME: MCI_SET_ON for cdaudio not implemented (is it necessary?)\n"); 841 return 0; 842 } 843 } 844 747 845 if (dwFlags & MCI_SET_VIDEO) return MCIERR_UNSUPPORTED_FUNCTION; 748 if (dwFlags & MCI_SET_ON) return MCIERR_UNSUPPORTED_FUNCTION;749 846 if (dwFlags & MCI_SET_OFF) return MCIERR_UNSUPPORTED_FUNCTION; 750 847 if (dwFlags & MCI_NOTIFY) { … … 763 860 DWORD dwParam1, DWORD dwParam2) 764 861 { 862 765 863 switch(wMsg) { 766 864 case DRV_LOAD: return 1; … … 770 868 case DRV_ENABLE: return 1; 771 869 case DRV_DISABLE: return 1; 772 case DRV_QUERYCONFIGURE: return 1; 773 case DRV_CONFIGURE: MessageBoxA(0, "Sample Multimedia Driver !", "Wine Driver", MB_OK); return 1; 870 case DRV_QUERYCONFIGURE: 871 TRACE("Received DRV_QUERYCONFIGURE command [%lu] \n", wMsg); 872 return 0; /* We can't configure */ 873 case DRV_CONFIGURE: 874 TRACE("Received DRV_CONFIGURE command [%lu] \n", wMsg); 875 //MessageBoxA(0, "CD audio Driver !", "Odin Driver", MB_OK); 876 return 1; 774 877 case DRV_INSTALL: return DRVCNF_RESTART; 775 878 case DRV_REMOVE: return DRVCNF_RESTART; … … 809 912 /* commands that should report an error */ 810 913 case MCI_WINDOW: 811 TRACE("Unsupported command [%lu]\n", wMsg); 812 break; 914 TRACE("Received command [%lu] (MCI_WINDOW). Why do we get video messages???\n", wMsg); 915 break; 916 case MCI_CONFIGURE: 917 TRACE("Received Command [%lu] (MCI_CONFIGURE). Why do we get video messages???\n", wMsg); 918 break; 919 920 813 921 case MCI_OPEN: 814 922 case MCI_CLOSE: … … 816 924 break; 817 925 default: 818 TRACE("Sending msg [%l u] to default driver proc\n", wMsg);926 TRACE("Sending msg [%lXh] to default driver proc\n", wMsg); 819 927 return DefDriverProc(dwDevID, hDriv, wMsg, dwParam1, dwParam2); 820 928 }
Note:
See TracChangeset
for help on using the changeset viewer.