static void expandPlaylistSongs(void) { static BOOL processing = FALSE; HWND playlistWnd; ASAPInfo *info; HWND progressWnd; int index; if (processing) return; playlistWnd = (HWND) SendMessage(mod.hMainWindow, WM_WA_IPC, IPC_GETWND_PE, IPC_GETWND); if (playlistWnd == NULL) return; processing = TRUE; info = ASAPInfo_New(); playlistLength = SendMessage(mod.hMainWindow, WM_WA_IPC, 0, IPC_GETLISTLENGTH); progressWnd = CreateDialog(mod.hDllInstance, MAKEINTRESOURCE(IDD_PROGRESS), mod.hMainWindow, progressDialogProc); index = playlistLength; while (--index >= 0) { if ((index & 15) == 0) SendDlgItemMessage(progressWnd, IDC_PROGRESS, PBM_SETPOS, playlistLength - index, 0); expandFileSongs(playlistWnd, index, info); } DestroyWindow(progressWnd); ASAPInfo_Delete(info); processing = FALSE; }
BOOL __cdecl GetInfo(char *filename, int audioDataOffset, TrackInfo *trackInfo) { BYTE module[ASAPInfo_MAX_MODULE_LENGTH]; int module_len; if (!loadModule(filename, module, &module_len)) return FALSE; ASAPInfo *info = ASAPInfo_New(); if (info == NULL) return FALSE; if (!ASAPInfo_Load(info, filename, module, module_len)) { ASAPInfo_Delete(info); return FALSE; } strcpy(trackInfo->suggestedTitle, ASAPInfo_GetTitle(info)); trackInfo->fileSize = module_len; trackInfo->seekable = TRUE; trackInfo->hasEqualizer = FALSE; int duration = getSongDuration(info, ASAPInfo_GetDefaultSong(info)); trackInfo->playingTime = duration >= 0 ? duration : -1; trackInfo->bitRate = 0; trackInfo->sampleRate = ASAP_SAMPLE_RATE; trackInfo->numChannels = ASAPInfo_GetChannels(info); trackInfo->bitResolution = BITS_PER_SAMPLE; strcpy(trackInfo->fileTypeDescription, "8-bit Atari music"); ASAPInfo_Delete(info); return TRUE; }
static Tuple *probe_for_tuple(const char *filename, VFSFile *file) { int song = -1; unsigned char module[ASAPInfo_MAX_MODULE_LENGTH]; int module_len; ASAPInfo *info = NULL; Tuple *tuple = NULL; int songs; int duration; int year; #if _AUD_PLUGIN_VERSION >= 10 char *real_filename = filename_split_subtune(filename, &song); if (real_filename != NULL) filename = real_filename; #endif module_len = load_module(filename, file, module); if (module_len > 0) { info = ASAPInfo_New(); if (info != NULL && ASAPInfo_Load(info, filename, module, module_len)) tuple = tuple_new_from_filename(filename); } #if _AUD_PLUGIN_VERSION >= 10 g_free(real_filename); #endif if (tuple == NULL) { ASAPInfo_Delete(info); return NULL; } tuple_set_nonblank(tuple, FIELD_ARTIST, ASAPInfo_GetAuthor(info)); tuple_set_nonblank(tuple, FIELD_TITLE, ASAPInfo_GetTitleOrFilename(info)); tuple_set_nonblank(tuple, FIELD_DATE, ASAPInfo_GetDate(info)); tuple_set_str(tuple, FIELD_CODEC, NULL, "ASAP"); songs = ASAPInfo_GetSongs(info); if (song > 0) { tuple_set_int(tuple, FIELD_SUBSONG_ID, NULL, song); tuple_set_int(tuple, FIELD_SUBSONG_NUM, NULL, songs); song--; } else { if (songs > 1) { #if _AUD_PLUGIN_VERSION >= 37 tuple_set_subtunes(tuple, songs, NULL); #else tuple->nsubtunes = songs; #endif } song = ASAPInfo_GetDefaultSong(info); } duration = ASAPInfo_GetDuration(info, song); if (duration > 0) tuple_set_int(tuple, FIELD_LENGTH, NULL, duration); year = ASAPInfo_GetYear(info); if (year > 0) tuple_set_int(tuple, FIELD_YEAR, NULL, year); ASAPInfo_Delete(info); return tuple; }
static void init(void) { asap = ASAP_New(); title_info = ASAPInfo_New(); ini_file = (const char *) SendMessage(mod.hMainWindow, WM_WA_IPC, 0, IPC_GETINIFILE); song_length = GetPrivateProfileInt(INI_SECTION, "song_length", song_length, ini_file); silence_seconds = GetPrivateProfileInt(INI_SECTION, "silence_seconds", silence_seconds, ini_file); play_loops = GetPrivateProfileInt(INI_SECTION, "play_loops", play_loops, ini_file); mute_mask = GetPrivateProfileInt(INI_SECTION, "mute_mask", mute_mask, ini_file); playing_info = GetPrivateProfileInt(INI_SECTION, "playing_info", playing_info, ini_file); }
static ASAPInfo *asap_get_info(const char *filename) { ASAPInfo *info; if (!asap_load_file(filename)) return NULL; info = ASAPInfo_New(); if (info == NULL) return NULL; if (!ASAPInfo_Load(info, filename, module, module_len)) { ASAPInfo_Delete(info); return NULL; } return info; }
void updateInfoDialog(LPCTSTR filename, int song) { int songs; int i; if (infoDialog == NULL) return; if (edited_info == NULL) { edited_info = ASAPInfo_New(); if (astil == NULL) astil = ASTIL_New(); if (edited_info == NULL || astil == NULL) { closeInfoDialog(); return; } } else if (infoChanged()) return; if (!loadModule(filename, saved_module, &saved_module_len) || !ASAPInfo_Load(edited_info, filename, saved_module, saved_module_len)) { closeInfoDialog(); return; } setSaved(); can_save = isExt(filename, _T(".sap")); invalid_fields = 0; SendDlgItemMessage(infoDialog, IDC_FILENAME, WM_SETTEXT, 0, (LPARAM) filename); SendDlgItemMessage(infoDialog, IDC_AUTHOR, WM_SETTEXT, 0, (LPARAM) saved_author); SendDlgItemMessage(infoDialog, IDC_NAME, WM_SETTEXT, 0, (LPARAM) saved_title); SendDlgItemMessage(infoDialog, IDC_DATE, WM_SETTEXT, 0, (LPARAM) saved_date); SendDlgItemMessage(infoDialog, IDC_SONGNO, CB_RESETCONTENT, 0, 0); songs = ASAPInfo_GetSongs(edited_info); EnableWindow(GetDlgItem(infoDialog, IDC_SONGNO), songs > 1); for (i = 1; i <= songs; i++) { _TCHAR str[16]; _stprintf(str, _T("%d"), i); SendDlgItemMessage(infoDialog, IDC_SONGNO, CB_ADDSTRING, 0, (LPARAM) str); } if (song < 0) song = ASAPInfo_GetDefaultSong(edited_info); SendDlgItemMessage(infoDialog, IDC_SONGNO, CB_SETCURSEL, song, 0); setEditedSong(song); EnableWindow(GetDlgItem(infoDialog, IDC_SAVE), FALSE); updateTech(); }
static gboolean update_song_tuple(const Tuple * tuple, VFSFile *file) { #if _AUD_PLUGIN_VERSION < 38 #define vfs_get_filename(file) g_filename_from_uri(file->uri, NULL, NULL) #define tuple_get_str tuple_get_string #define str_unref(s) const char *s; #else char *s; #endif /* read file */ const char *filename = vfs_get_filename(file); unsigned char module[ASAPInfo_MAX_MODULE_LENGTH]; int module_len = load_module(filename, file, module); ASAPInfo *info; int year; ByteWriter bw; gboolean ok; if (module_len <= 0) return FALSE; info = ASAPInfo_New(); if (info == NULL) return FALSE; if (!ASAPInfo_Load(info, filename, module, module_len)) { ASAPInfo_Delete(info); return FALSE; } /* apply new tags */ s = tuple_get_str(tuple, FIELD_ARTIST, NULL); if (s != NULL) { if (!ASAPInfo_SetAuthor(info, s)) { str_unref(s); ASAPInfo_Delete(info); return FALSE; } str_unref(s); } else ASAPInfo_SetAuthor(info, ""); s = tuple_get_str(tuple, FIELD_TITLE, NULL); if (s != NULL) { if (!ASAPInfo_SetTitle(info, s)) { str_unref(s); ASAPInfo_Delete(info); return FALSE; } str_unref(s); } else ASAPInfo_SetTitle(info, ""); year = tuple_get_int(tuple, FIELD_YEAR, NULL); if (year == 0) year = -1; /* check if year changed so that we don't lose other date parts */ if (year != ASAPInfo_GetYear(info)) { if (year <= 0) ASAPInfo_SetDate(info, ""); else { char d[16]; sprintf(d, "%d", year); ASAPInfo_SetDate(info, d); } } /* write file */ vfs_rewind(file); bw.obj = file; bw.func = write_byte; ok = ASAPWriter_Write(filename, bw, info, module, module_len, TRUE) && vfs_ftruncate(file, vfs_ftell(file)) == 0; ASAPInfo_Delete(info); return ok; }