⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mcianim.c

📁 Wine-20031016
💻 C
📖 第 1 页 / 共 2 页
字号:
    TRACE("buf=%p, len=%lu\n", lpParms->lpstrReturn, lpParms->dwRetSize);    switch(dwFlags) {    case MCI_INFO_PRODUCT:	str = "Wine's animation";	break;    case MCI_INFO_FILE:	str = wma->openParms.lpstrElementName;	break;    case MCI_ANIM_INFO_TEXT:	str = "Animation Window";	break;    default:	WARN("Don't know this info command (%lu)\n", dwFlags);	return MCIERR_UNRECOGNIZED_COMMAND;    }    if (str) {	if (lpParms->dwRetSize <= strlen(str)) {	    lstrcpynA(lpParms->lpstrReturn, str, lpParms->dwRetSize - 1);	    ret = MCIERR_PARAM_OVERFLOW;	} else {	    strcpy(lpParms->lpstrReturn, str);	}    } else {	*lpParms->lpstrReturn = 0;    }    return ret;}/************************************************************************** * 				MCIANIM_mciStatus		[internal] */static DWORD MCIANIM_mciStatus(UINT16 wDevID, DWORD dwFlags, LPMCI_STATUS_PARMS lpParms){    WINE_MCIANIM*	wma = MCIANIM_mciGetOpenDrv(wDevID);    DWORD		ret;    TRACE("(%u, %08lX, %p);\n", wDevID, dwFlags, lpParms);    if (lpParms == NULL) return MCIERR_INTERNAL;    if (wma == NULL) return MCIERR_INVALID_DEVICE_ID;    if (dwFlags & MCI_NOTIFY) {	TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback);	mciDriverNotify(HWND_32(LOWORD(lpParms->dwCallback)),			  wma->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);    }    if (dwFlags & MCI_STATUS_ITEM) {	switch(lpParms->dwItem) {	case MCI_STATUS_CURRENT_TRACK:	    lpParms->dwReturn = wma->nCurTrack;	    TRACE("CURRENT_TRACK=%lu!\n", lpParms->dwReturn);	    break;	case MCI_STATUS_LENGTH:	    if (dwFlags & MCI_TRACK) {		TRACE("MCI_TRACK #%lu LENGTH=??? !\n", lpParms->dwTrack);		if (lpParms->dwTrack > wma->nTracks)		    return MCIERR_OUTOFRANGE;		lpParms->dwReturn = wma->lpdwTrackLen[lpParms->dwTrack];	    }	    else		lpParms->dwReturn = wma->dwTotalLen;	    lpParms->dwReturn = MCIANIM_CalcTime(wma, wma->dwTimeFormat, lpParms->dwReturn, &ret);	    TRACE("LENGTH=%lu !\n", lpParms->dwReturn);	    break;	case MCI_STATUS_MODE:	    TRACE("MCI_STATUS_MODE=%04X !\n", wma->mode);	    lpParms->dwReturn = MAKEMCIRESOURCE(wma->mode, wma->mode);	    ret = MCI_RESOURCE_RETURNED;	    break;	case MCI_STATUS_MEDIA_PRESENT:	    lpParms->dwReturn = MAKEMCIRESOURCE(TRUE, MCI_TRUE);	    ret = MCI_RESOURCE_RETURNED;	    TRACE("MCI_STATUS_MEDIA_PRESENT !\n");	    break;	case MCI_STATUS_NUMBER_OF_TRACKS:	    lpParms->dwReturn = 1;	    TRACE("MCI_STATUS_NUMBER_OF_TRACKS = %lu !\n", lpParms->dwReturn);	    break;	case MCI_STATUS_POSITION:	    lpParms->dwReturn = wma->dwCurFrame;	    if (dwFlags & MCI_STATUS_START) {		lpParms->dwReturn = 0;		TRACE("get MCI_STATUS_START !\n");	    }	    if (dwFlags & MCI_TRACK) {		if (lpParms->dwTrack > wma->nTracks)		    return MCIERR_OUTOFRANGE;		lpParms->dwReturn = wma->lpdwTrackPos[lpParms->dwTrack - 1];		TRACE("get MCI_TRACK #%lu !\n", lpParms->dwTrack);	    }	    lpParms->dwReturn = MCIANIM_CalcTime(wma, wma->dwTimeFormat, lpParms->dwReturn, &ret);	    TRACE("MCI_STATUS_POSITION=%08lX !\n", lpParms->dwReturn);	    break;	case MCI_STATUS_READY:	    TRACE("MCI_STATUS_READY !\n");	    lpParms->dwReturn = MAKEMCIRESOURCE(TRUE, MCI_TRUE);	    ret = MCI_RESOURCE_RETURNED;	    return 0;	case MCI_STATUS_TIME_FORMAT:	    TRACE("MCI_STATUS_TIME_FORMAT !\n");	    lpParms->dwReturn = MAKEMCIRESOURCE(MCI_FORMAT_MILLISECONDS, MCI_FORMAT_MILLISECONDS);	    TRACE("MCI_STATUS_TIME_FORMAT => %u\n", LOWORD(lpParms->dwReturn));	    ret = MCI_RESOURCE_RETURNED;	    return 0;	default:	    FIXME("Unknown command %08lX !\n", lpParms->dwItem);	    return MCIERR_UNRECOGNIZED_COMMAND;	}    } else {	WARN("No MCI_STATUS_ITEM !\n");	return MCIERR_UNRECOGNIZED_COMMAND;    }    return ret;}/************************************************************************** * 				MCIANIM_mciPlay			[internal] */static DWORD MCIANIM_mciPlay(UINT16 wDevID, DWORD dwFlags, LPMCI_PLAY_PARMS lpParms){    WINE_MCIANIM*	wma = MCIANIM_mciGetOpenDrv(wDevID);    int 	start, end;    TRACE("(%u, %08lX, %p);\n", wDevID, dwFlags, lpParms);    if (lpParms == NULL) return MCIERR_INTERNAL;    if (wma == NULL) return MCIERR_INVALID_DEVICE_ID;    start = 0; 		end = wma->dwTotalLen;    wma->nCurTrack = 1;    if (dwFlags & MCI_FROM) {	start = MCIANIM_CalcFrame(wma, wma->dwTimeFormat, lpParms->dwFrom);        TRACE("MCI_FROM=%08lX -> %u \n", lpParms->dwFrom, start);    }    if (dwFlags & MCI_TO) {	end = MCIANIM_CalcFrame(wma, wma->dwTimeFormat, lpParms->dwTo);	TRACE("MCI_TO=%08lX -> %u \n", lpParms->dwTo, end);    }    wma->mode = MCI_MODE_PLAY;    if (dwFlags & MCI_NOTIFY) {	TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n",	      lpParms->dwCallback);	mciDriverNotify(HWND_32(LOWORD(lpParms->dwCallback)),			  wma->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);    }    return 0;}/************************************************************************** * 				MCIANIM_mciStop			[internal] */static DWORD MCIANIM_mciStop(UINT16 wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms){    WINE_MCIANIM*	wma = MCIANIM_mciGetOpenDrv(wDevID);    TRACE("(%u, %08lX, %p);\n", wDevID, dwFlags, lpParms);    if (lpParms == NULL) return MCIERR_INTERNAL;    if (wma == NULL) return MCIERR_INVALID_DEVICE_ID;    wma->mode = MCI_MODE_STOP;    if (dwFlags & MCI_NOTIFY) {	TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback);	mciDriverNotify(HWND_32(LOWORD(lpParms->dwCallback)),			  wma->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);    }    return 0;}/************************************************************************** * 				MCIANIM_mciPause		[internal] */static DWORD MCIANIM_mciPause(UINT16 wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms){    WINE_MCIANIM*	wma = MCIANIM_mciGetOpenDrv(wDevID);    TRACE("(%u, %08lX, %p);\n", wDevID, dwFlags, lpParms);    if (lpParms == NULL) return MCIERR_INTERNAL;    wma->mode = MCI_MODE_PAUSE;    if (dwFlags & MCI_NOTIFY) {	TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback);	mciDriverNotify(HWND_32(LOWORD(lpParms->dwCallback)),			  wma->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);    }    return 0;}/************************************************************************** * 				MCIANIM_mciResume		[internal] */static DWORD MCIANIM_mciResume(UINT16 wDevID, DWORD dwFlags, LPMCI_GENERIC_PARMS lpParms){    WINE_MCIANIM*	wma = MCIANIM_mciGetOpenDrv(wDevID);    TRACE("(%u, %08lX, %p);\n", wDevID, dwFlags, lpParms);    if (lpParms == NULL) return MCIERR_INTERNAL;    wma->mode = MCI_MODE_STOP;    if (dwFlags & MCI_NOTIFY) {	TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback);	mciDriverNotify(HWND_32(LOWORD(lpParms->dwCallback)),			  wma->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);    }    return 0;}/************************************************************************** * 				MCIANIM_mciSeek			[internal] */static DWORD MCIANIM_mciSeek(UINT16 wDevID, DWORD dwFlags, LPMCI_SEEK_PARMS lpParms){    WINE_MCIANIM*	wma = MCIANIM_mciGetOpenDrv(wDevID);    DWORD	dwRet;    MCI_PLAY_PARMS PlayParms;    TRACE("(%u, %08lX, %p);\n", wDevID, dwFlags, lpParms);    if (lpParms == NULL) return MCIERR_INTERNAL;    wma->mode = MCI_MODE_SEEK;    switch (dwFlags) {    case MCI_SEEK_TO_START:	PlayParms.dwFrom = 0;	break;    case MCI_SEEK_TO_END:	PlayParms.dwFrom = wma->dwTotalLen;	break;    case MCI_TO:	PlayParms.dwFrom = lpParms->dwTo;	break;    }    dwRet = MCIANIM_mciPlay(wDevID, MCI_WAIT | MCI_FROM, &PlayParms);    if (dwRet != 0) return dwRet;    dwRet = MCIANIM_mciStop(wDevID, MCI_WAIT, (LPMCI_GENERIC_PARMS)&PlayParms);    if (dwFlags & MCI_NOTIFY) {	TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback);	mciDriverNotify(HWND_32(LOWORD(lpParms->dwCallback)),			  wma->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);    }    return dwRet;}/************************************************************************** * 				MCIANIM_mciSet			[internal] */static DWORD MCIANIM_mciSet(UINT16 wDevID, DWORD dwFlags, LPMCI_SET_PARMS lpParms){    WINE_MCIANIM*	wma = MCIANIM_mciGetOpenDrv(wDevID);    TRACE("(%u, %08lX, %p);\n", wDevID, dwFlags, lpParms);    if (lpParms == NULL) return MCIERR_INTERNAL;    if (wma == NULL) return MCIERR_INVALID_DEVICE_ID;    /*      TRACE("(dwTimeFormat=%08lX)\n", lpParms->dwTimeFormat);      TRACE("(dwAudio=%08lX)\n", lpParms->dwAudio);    */    if (dwFlags & MCI_SET_TIME_FORMAT) {	switch (lpParms->dwTimeFormat) {	case MCI_FORMAT_MILLISECONDS:	    TRACE("MCI_FORMAT_MILLISECONDS !\n");	    break;	case MCI_FORMAT_MSF:	    TRACE("MCI_FORMAT_MSF !\n");	    break;	case MCI_FORMAT_TMSF:	    TRACE("MCI_FORMAT_TMSF !\n");	    break;	default:	    WARN("Bad time format !\n");	    return MCIERR_BAD_TIME_FORMAT;	}	wma->dwTimeFormat = lpParms->dwTimeFormat;    }    if (dwFlags & MCI_SET_VIDEO) return MCIERR_UNSUPPORTED_FUNCTION;    if (dwFlags & MCI_SET_ON) return MCIERR_UNSUPPORTED_FUNCTION;    if (dwFlags & MCI_SET_OFF) return MCIERR_UNSUPPORTED_FUNCTION;    if (dwFlags & MCI_NOTIFY) {	TRACE("MCI_NOTIFY_SUCCESSFUL %08lX !\n", lpParms->dwCallback);	mciDriverNotify(HWND_32(LOWORD(lpParms->dwCallback)),			  wma->wNotifyDeviceID, MCI_NOTIFY_SUCCESSFUL);    }    return 0;}/************************************************************************** * 				DriverProc (MCIANIM.@) */LONG WINAPI MCIANIM_DriverProc(DWORD dwDevID, HDRVR hDriv, DWORD wMsg,			       DWORD dwParam1, DWORD dwParam2){    switch (wMsg) {    case DRV_LOAD:		return 1;    case DRV_FREE:		return 1;    case DRV_OPEN:		return MCIANIM_drvOpen((LPSTR)dwParam1, (LPMCI_OPEN_DRIVER_PARMSA)dwParam2);    case DRV_CLOSE:		return MCIANIM_drvClose(dwDevID);    case DRV_ENABLE:		return 1;    case DRV_DISABLE:		return 1;    case DRV_QUERYCONFIGURE:	return 1;    case DRV_CONFIGURE:		MessageBoxA(0, "Sample MultiMedia Driver !", "Wine Driver", MB_OK); return 1;    case DRV_INSTALL:		return DRVCNF_RESTART;    case DRV_REMOVE:		return DRVCNF_RESTART;    }    if (dwDevID == 0xFFFFFFFF) return MCIERR_UNSUPPORTED_FUNCTION;    switch (wMsg) {    case MCI_OPEN_DRIVER:	return MCIANIM_mciOpen(dwDevID, dwParam1, (LPMCI_OPEN_PARMSA)dwParam2);    case MCI_CLOSE_DRIVER:	return MCIANIM_mciClose(dwDevID, dwParam1, (LPMCI_GENERIC_PARMS)dwParam2);    case MCI_GETDEVCAPS:	return MCIANIM_mciGetDevCaps(dwDevID, dwParam1, (LPMCI_GETDEVCAPS_PARMS)dwParam2);    case MCI_INFO:		return MCIANIM_mciInfo(dwDevID, dwParam1, (LPMCI_INFO_PARMSA)dwParam2);    case MCI_STATUS:		return MCIANIM_mciStatus(dwDevID, dwParam1, (LPMCI_STATUS_PARMS)dwParam2);    case MCI_SET:		return MCIANIM_mciSet(dwDevID, dwParam1, (LPMCI_SET_PARMS)dwParam2);    case MCI_PLAY:		return MCIANIM_mciPlay(dwDevID, dwParam1, (LPMCI_PLAY_PARMS)dwParam2);    case MCI_STOP:		return MCIANIM_mciStop(dwDevID, dwParam1, (LPMCI_GENERIC_PARMS)dwParam2);    case MCI_PAUSE:		return MCIANIM_mciPause(dwDevID, dwParam1, (LPMCI_GENERIC_PARMS)dwParam2);    case MCI_RESUME:		return MCIANIM_mciResume(dwDevID, dwParam1, (LPMCI_GENERIC_PARMS)dwParam2);    case MCI_SEEK:		return MCIANIM_mciSeek(dwDevID, dwParam1, (LPMCI_SEEK_PARMS)dwParam2);    case MCI_LOAD:    case MCI_SAVE:    case MCI_FREEZE:    case MCI_PUT:    case MCI_REALIZE:    case MCI_UNFREEZE:    case MCI_UPDATE:    case MCI_WHERE:    case MCI_WINDOW:    case MCI_STEP:    case MCI_SPIN:    case MCI_ESCAPE:    case MCI_COPY:    case MCI_CUT:    case MCI_DELETE:    case MCI_PASTE:	FIXME("Unsupported message [%lu]\n", wMsg);	break;    case MCI_OPEN:    case MCI_CLOSE:	ERR("Shouldn't receive a MCI_OPEN or CLOSE message\n");	break;    default:	TRACE("Sending msg [%lu] to default driver proc\n", wMsg);	return DefDriverProc(dwDevID, hDriv, wMsg, dwParam1, dwParam2);    }    return MCIERR_UNRECOGNIZED_COMMAND;}/*-----------------------------------------------------------------------*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -