BOOL IsMMFile(const char* fname) { char extlist[1024], *ext; if(!strcasecmp(fname,"cdaudio")) return TRUE; if(!ext_cmp(fname,"pcb")) return TRUE; GetProfileString("mci extensions",NULL,"",extlist,sizeof(extlist)); for(ext=extlist; *ext; ++ext) { if(!ext_cmp(fname,ext)) return TRUE; while(*++ext); } return FALSE; }
BOOL IsMMFile(const wchar_t* fname) { wchar_t extlist[1024], *ext; if(!wcscasecmp(fname,L"cdaudio") || !ext_cmp(fname,L"pcb")) return 1; GetProfileString(L"mci extensions", NULL, L"", extlist, _countof(extlist)); for(ext=extlist; *ext; ++ext) { if(!ext_cmp(fname,ext)) return 1; while(*++ext); } return 0; }
//=================================================* // ------------------------ Play Selected Alarm File //===================================================* BOOL PlayFile(HWND hwnd, const char* fname, DWORD dwLoops) { char file[MAX_PATH]; if(!fname[0] || fname[0]=='<') return FALSE; if(fname[0]!='/' && fname[0]!='\\' && fname[1]!=':' // no abs path &&(fname[0]!='.' || (fname[1]!='/' && fname[1]!='\\' && (fname[1]!='.' || (fname[2]!='/' && fname[2]!='\\'))))) // no relative path (strict relative) { // do it relative to "waves/" char app[MAX_PATH]; const size_t tlen=api.root_len; const size_t len=strlen(fname)+1; // incl. terminating null if(len<MAX_PATH-tlen-7){ memcpy(file, api.root, tlen); // absolute path is at least required by .pcb / PlayNoSoundThread (not for .wav) memcpy(file+tlen, "\\waves\\", 7); memcpy(file+tlen+7, fname, len); if(api.GetFileAndOption(file, app, NULL) == 0){ fname = file; } } } if(ext_cmp(fname, "wav") == 0) { if(m_bMCIPlaying) return FALSE; return PlayWave(hwnd, fname, dwLoops); } if(ext_cmp(fname, "pcb") == 0) { if(m_bMCIPlaying) return FALSE; PlayNoSoundThread(hwnd, fname, dwLoops); return TRUE; } else if(IsMMFile(fname)) { char command[MIN_BUFF+MAX_PATH]; if(m_bMCIPlaying) return FALSE; strcpy(command, "open \""); strcat(command, fname); strcat(command, "\" alias myfile"); if(mciSendString(command, NULL, 0, NULL) == 0) { strcpy(command, "set myfile time format "); if(strcasecmp(fname, "cdaudio") == 0 || ext_cmp(fname, "cda") == 0) { strcat(command, "tmsf"); m_bTrack = TRUE; } else { strcat(command, "milliseconds"); m_bTrack = FALSE; } mciSendString(command, NULL, 0, NULL); m_nTrack = -1; if(ext_cmp(fname, "cda") == 0) { const char* p; p = fname; m_nTrack = 0; while(*p) { if('0' <= *p && *p <= '9') m_nTrack = m_nTrack * 10 + *p - '0'; p++; } } if(PlayMCI(hwnd, m_nTrack) == 0) { m_bMCIPlaying = TRUE; m_countPlay = dwLoops; } else mciSendString("close myfile", NULL, 0, NULL); } return m_bMCIPlaying; } else api.ExecFile(fname,hwnd); return FALSE; }