static BOOL ICLocate_enum_handler(const char *drv, unsigned int nr, void *param) { driver_info_t *info = param; info->fccHandler = mmioStringToFOURCCA(drv + 5, 0); info->hic = try_driver(info); return info->hic != 0; }
/************************************************************************** * mmioStringToFOURCCW [WINMM.@] */ FOURCC WINAPI mmioStringToFOURCCW(LPCWSTR sz, UINT uFlags) { char szA[4]; WideCharToMultiByte( CP_ACP, 0, sz, 4, szA, sizeof(szA), NULL, NULL ); return mmioStringToFOURCCA(szA,uFlags); }
static BOOL ICInfo_enum_handler(const char *name, const char *driver, unsigned int nr, void *param) { ICINFO *lpicinfo = param; DWORD fccType = mmioStringToFOURCCA(name, 0); DWORD fccHandler = mmioStringToFOURCCA(name + 5, 0); if (lpicinfo->fccHandler != nr && compare_fourcc(lpicinfo->fccHandler, fccHandler)) return FALSE; lpicinfo->fccType = fccType; lpicinfo->fccHandler = fccHandler; lpicinfo->dwFlags = 0; lpicinfo->dwVersion = 0; lpicinfo->dwVersionICM = ICVERSION; lpicinfo->szName[0] = 0; lpicinfo->szDescription[0] = 0; MultiByteToWideChar(CP_ACP, 0, driver, -1, lpicinfo->szDriver, ARRAY_SIZE(lpicinfo->szDriver)); return TRUE; }
/************************************************************************** * MMIO_ParseExtA [internal] * * Parses a filename for the extension. * * RETURNS * The FOURCC code for the extension if found, else 0. */ static FOURCC MMIO_ParseExtA(LPCSTR szFileName) { /* Filenames are of the form file.ext{+ABC} For now, we take the last '+' if present */ FOURCC ret = 0; /* Note that ext{Start,End} point to the . and + respectively */ LPCSTR extEnd; LPCSTR extStart; CHAR ext[5]; TRACE("(%s)\n", debugstr_a(szFileName)); if (!szFileName) return ret; /* Find the last '+' */ extEnd = strrchr(szFileName,'+'); if (!extEnd) { /* No + so just an extension */ return ret; } else { /* Find the first '.' before '+' */ extStart = extEnd - 1; while (extStart >= szFileName && *extStart != '.') { extStart--; } if (extStart < szFileName) { ERR("No extension in szFileName: %s\n", debugstr_a(szFileName)); return ret; } } if (extEnd - extStart - 1 > 4) WARN("Extension length > 4\n"); lstrcpynA(ext, extStart + 1, min(extEnd-extStart,5)); TRACE("Got extension: %s\n", debugstr_a(ext)); /* FOURCC codes identifying file-extensions must be uppercase */ ret = mmioStringToFOURCCA(ext, MMIO_TOUPPER); return ret; }
/************************************************************************** * MMIO_ParseExtA [internal] * * Parses a filename for the extension. * * RETURNS * The FOURCC code for the extension if found, else 0. */ static FOURCC MMIO_ParseExtA(LPCSTR szFileName) { /* Filenames are of the form file.ext{+ABC} For now, we take the last '+' if present */ FOURCC ret = 0; /* Note that ext{Start,End} point to the . and + respectively */ LPSTR extEnd; LPSTR extStart; TRACE("(%s)\n", debugstr_a(szFileName)); if (!szFileName) return ret; /* Find the last '.' */ extStart = strrchr(szFileName,'.'); if (!extStart) { ERR("No . in szFileName: %s\n", debugstr_a(szFileName)); } else { CHAR ext[5]; /* Find the '+' afterwards */ extEnd = strchr(extStart,'+'); if (extEnd) { if (extEnd - extStart - 1 > 4) WARN("Extension length > 4\n"); lstrcpynA(ext, extStart + 1, min(extEnd-extStart,5)); } else { /* No + so just an extension */ if (strlen(extStart) > 4) { WARN("Extension length > 4\n"); } lstrcpynA(ext, extStart + 1, 5); } TRACE("Got extension: %s\n", debugstr_a(ext)); /* FOURCC codes identifying file-extensions must be uppercase */ ret = mmioStringToFOURCCA(ext, MMIO_TOUPPER); } return ret; }
static BOOL ICInfo_enum_handler(const char *drv, unsigned int nr, void *param) { ICINFO *lpicinfo = param; DWORD fccHandler = mmioStringToFOURCCA(drv + 5, 0); /* exact match of fccHandler or nth driver found */ if ((lpicinfo->fccHandler != nr) && (lpicinfo->fccHandler != fccHandler)) return FALSE; lpicinfo->fccHandler = fccHandler; lpicinfo->dwFlags = 0; lpicinfo->dwVersion = 0; lpicinfo->dwVersionICM = ICVERSION; lpicinfo->szName[0] = 0; lpicinfo->szDescription[0] = 0; MultiByteToWideChar(CP_ACP, 0, drv + 10, -1, lpicinfo->szDriver, sizeof(lpicinfo->szDriver)/sizeof(WCHAR)); return TRUE; }
/************************************************************************** * mmioStringToFOURCC [MMSYSTEM.1220] */ FOURCC WINAPI mmioStringToFOURCC16(LPCSTR sz, UINT16 uFlags) { return mmioStringToFOURCCA(sz, uFlags); }