static void updateTech(void) { char buf[16000]; char *p = buf; const char *ext; int type; int i; ext = ASAPInfo_GetOriginalModuleExt(edited_info, saved_module, saved_module_len); if (ext != NULL) p += sprintf(p, "Composed in %s\r\n", ASAPInfo_GetExtDescription(ext)); i = ASAPInfo_GetSongs(edited_info); if (i > 1) { p += sprintf(p, "SONGS %d\r\n", i); i = ASAPInfo_GetDefaultSong(edited_info); if (i > 0) p += sprintf(p, "DEFSONG %d (song %d)\r\n", i, i + 1); } p += sprintf(p, ASAPInfo_GetChannels(edited_info) > 1 ? "STEREO\r\n" : "MONO\r\n"); p += sprintf(p, ASAPInfo_IsNtsc(edited_info) ? "NTSC\r\n" : "PAL\r\n"); type = ASAPInfo_GetTypeLetter(edited_info); if (type != 0) p += sprintf(p, "TYPE %c\r\n", type); p += sprintf(p, "FASTPLAY %d (%d Hz)\r\n", ASAPInfo_GetPlayerRateScanlines(edited_info), ASAPInfo_GetPlayerRateHz(edited_info)); if (type == 'C') p += sprintf(p, "MUSIC %04X\r\n", ASAPInfo_GetMusicAddress(edited_info)); if (type != 0) { p = appendAddress(p, "INIT %04X\r\n", ASAPInfo_GetInitAddress(edited_info)); p = appendAddress(p, "PLAYER %04X\r\n", ASAPInfo_GetPlayerAddress(edited_info)); p = appendAddress(p, "COVOX %04X\r\n", ASAPInfo_GetCovoxAddress(edited_info)); } i = ASAPInfo_GetSapHeaderLength(edited_info); if (i >= 0) { while (p < buf + sizeof(buf) - 17 && i + 4 < saved_module_len) { int start = saved_module[i] + (saved_module[i + 1] << 8); int end; if (start == 0xffff) { i += 2; start = saved_module[i] + (saved_module[i + 1] << 8); } end = saved_module[i + 2] + (saved_module[i + 3] << 8); p += sprintf(p, "LOAD %04X-%04X\r\n", start, end); i += 5 + end - start; } } chomp(buf); SendDlgItemMessage(infoDialog, IDC_TECHINFO, WM_SETTEXT, 0, (LPARAM) buf); }
HRESULT GetData(LPCSHCOLUMNID pscid, PROPVARIANT *pvarData, BOOL vista) { if (!m_hasInfo) return S_FALSE; if (pscid->fmtid == FMTID_SummaryInformation) { if (pscid->pid == PIDSI_TITLE) return GetString(pvarData, ASAPInfo_GetTitle(m_pinfo)); if (pscid->pid == PIDSI_AUTHOR) return GetAuthors(pvarData, vista); } else if (pscid->fmtid == FMTID_MUSIC) { if (pscid->pid == PIDSI_ARTIST) return GetAuthors(pvarData, vista); if (pscid->pid == PIDSI_YEAR) { int year = ASAPInfo_GetYear(m_pinfo); if (year < 0) { pvarData->vt = VT_EMPTY; return S_OK; } pvarData->vt = VT_UI8; pvarData->ulVal = (ULONG) year; return S_OK; } } else if (pscid->fmtid == FMTID_AudioSummaryInformation) { if (pscid->pid == PIDASI_TIMELENGTH) { int duration = ASAPInfo_GetDuration(m_pinfo, ASAPInfo_GetDefaultSong(m_pinfo)); if (duration < 0) { pvarData->vt = VT_EMPTY; return S_OK; } if (g_windowsVer == WINDOWS_OLD) { duration /= 1000; char timeStr[16]; sprintf(timeStr, "%02d:%02d:%02d", duration / 3600, duration / 60 % 60, duration % 60); return GetString(pvarData, timeStr); } else { pvarData->vt = VT_UI8; pvarData->uhVal.QuadPart = 10000ULL * duration; return S_OK; } } if (pscid->pid == PIDASI_CHANNEL_COUNT) { pvarData->vt = VT_UI4; pvarData->ulVal = (ULONG) ASAPInfo_GetChannels(m_pinfo); return S_OK; } } else if (pscid->fmtid == CLSID_ASAPMetadataHandler) { if (pscid->pid == 1) { pvarData->vt = VT_UI4; pvarData->ulVal = (ULONG) ASAPInfo_GetSongs(m_pinfo); return S_OK; } if (pscid->pid == 2) return GetString(pvarData, ASAPInfo_IsNtsc(m_pinfo) ? "NTSC" : "PAL"); } return S_FALSE; }