mirror of
https://github.com/WinampDesktop/winamp.git
synced 2025-06-17 15:05:46 -04:00
Initial community commit
This commit is contained in:
366
Src/Plugins/SDK/ml_iso/ToISO.cpp
Normal file
366
Src/Plugins/SDK/ml_iso/ToISO.cpp
Normal file
@ -0,0 +1,366 @@
|
||||
#include "main.h"
|
||||
#include "api__ml_iso.h"
|
||||
#include <api/service/waservicefactory.h>
|
||||
#include "../burner/obj_isocreator.h"
|
||||
#include "../playlist/ifc_playlistloadercallback.h"
|
||||
#include <shlwapi.h>
|
||||
#include <strsafe.h>
|
||||
|
||||
/**
|
||||
** Playlist Loader callback class
|
||||
** Used when this plugin loads a playlist file
|
||||
** the playlist loader will call the OnFile() function
|
||||
** for each playlist item
|
||||
*/
|
||||
class ISOPlaylistLoader : public ifc_playlistloadercallback
|
||||
{
|
||||
public:
|
||||
ISOPlaylistLoader(obj_isocreator *_creator);
|
||||
|
||||
protected:
|
||||
RECVS_DISPATCH;
|
||||
|
||||
private:
|
||||
void OnFile(const wchar_t *filename, const wchar_t *title, int lengthInMS, ifc_plentryinfo *info);
|
||||
obj_isocreator *creator;
|
||||
};
|
||||
|
||||
/**
|
||||
** helper function
|
||||
** for getting a filename location
|
||||
** of where to save the ISO file
|
||||
**/
|
||||
static bool PromptForFilename(wchar_t *filename, size_t filenameCch)
|
||||
{
|
||||
wchar_t oldCurPath[MAX_PATH], newCurPath[MAX_PATH];
|
||||
OPENFILENAMEW openfilename;
|
||||
|
||||
// null terminate the string or else we'll get a garbage filename as the 'default' filename
|
||||
filename[0]=0;
|
||||
|
||||
// GetSaveFileName changes Window's working directory
|
||||
// which locks that folder from being deleted until Winamp closes
|
||||
// so we save the old working directory name
|
||||
// and restore it on complete
|
||||
// Winamp maintains its own concept of a working directory
|
||||
// to help us avoid this problem
|
||||
GetCurrentDirectoryW(MAX_PATH, oldCurPath);
|
||||
|
||||
|
||||
// initialize the open file name struct
|
||||
openfilename.lStructSize = sizeof(openfilename);
|
||||
openfilename.hwndOwner = plugin.hwndLibraryParent;
|
||||
openfilename.hInstance = plugin.hDllInstance;
|
||||
openfilename.lpstrFilter = L"ISO Files\0*.iso\0";
|
||||
openfilename.lpstrCustomFilter = 0;
|
||||
openfilename.nMaxCustFilter = 0;
|
||||
openfilename.nFilterIndex = 0;
|
||||
openfilename.lpstrFile = filename;
|
||||
openfilename.nMaxFile = filenameCch;
|
||||
openfilename.lpstrFileTitle = 0;
|
||||
openfilename.nMaxFileTitle = 0;
|
||||
// we set the initial directory based on winamp's working path
|
||||
openfilename.lpstrInitialDir = WASABI_API_APP->path_getWorkingPath();
|
||||
openfilename.lpstrTitle = 0;
|
||||
// despite the big note about working directory
|
||||
// we don't want to use OFN_NOCHANGEDIR
|
||||
// because we're going to manually sync Winamp's working path
|
||||
openfilename.Flags = OFN_ENABLESIZING | OFN_EXPLORER | OFN_LONGNAMES;
|
||||
openfilename.nFileOffset = 0;
|
||||
openfilename.nFileExtension = 0;
|
||||
openfilename.lpstrDefExt = L".iso";
|
||||
openfilename.lCustData = 0;
|
||||
openfilename.lpfnHook = 0;
|
||||
openfilename.lpTemplateName = 0;
|
||||
|
||||
if (GetSaveFileNameW(&openfilename))
|
||||
{
|
||||
// let's re-synch Winamp's working directory
|
||||
GetCurrentDirectoryW(MAX_PATH, newCurPath);
|
||||
WASABI_API_APP->path_setWorkingPath(newCurPath);
|
||||
|
||||
// set the old path back
|
||||
SetCurrentDirectoryW(oldCurPath);
|
||||
return true; // success!
|
||||
}
|
||||
else
|
||||
{
|
||||
// set the old path back
|
||||
SetCurrentDirectoryW(oldCurPath);
|
||||
return false; // user hit cancel or something else happened
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
** helper functions
|
||||
** for creating and deleting
|
||||
** an iso creator object
|
||||
** through the wasabi service manager
|
||||
**/
|
||||
static obj_isocreator *CreateISOCreator()
|
||||
{
|
||||
waServiceFactory *factory = WASABI_API_SVC->service_getServiceByGuid(obj_isocreatorGUID);
|
||||
if (factory)
|
||||
return (obj_isocreator *)factory->getInterface();
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void ReleaseISOCreator(obj_isocreator *creator)
|
||||
{
|
||||
if (creator)
|
||||
{
|
||||
waServiceFactory *factory = WASABI_API_SVC->service_getServiceByGuid(obj_isocreatorGUID);
|
||||
if (factory)
|
||||
factory->releaseInterface(creator);
|
||||
}
|
||||
}
|
||||
|
||||
void ConvertItemRecordListToISO(const itemRecordList *list)
|
||||
{
|
||||
obj_isocreator *isocreator = CreateISOCreator();
|
||||
if (isocreator)
|
||||
{
|
||||
wchar_t destination[MAX_PATH];
|
||||
|
||||
if (PromptForFilename(destination, MAX_PATH))
|
||||
{
|
||||
// these values are hardcoded for this example.
|
||||
isocreator->Open(L"WinampISO", obj_isocreator::FORMAT_JOLIET, obj_isocreator::MEDIA_CD);
|
||||
|
||||
char destinationPath[MAX_PATH];
|
||||
|
||||
// loop through the files and add them
|
||||
for (int i=0;i<list->Size;i++)
|
||||
{
|
||||
itemRecord &item = list->Items[i];
|
||||
|
||||
// since we have metadata, we're going to auto-generate folders based on the album name
|
||||
const char *album = item.album;
|
||||
if (!album || !*album)
|
||||
album = "Unknown Album";
|
||||
|
||||
// isocreator requires a preceding backslash
|
||||
StringCbPrintfA(destinationPath, sizeof(destinationPath), "\\%s\\%s", album, PathFindFileNameA(item.filename));
|
||||
|
||||
// convert to unicode since that's what obj_isocreator requires
|
||||
wchar_t unicodeSource[MAX_PATH];
|
||||
wchar_t unicodeDest[MAX_PATH];
|
||||
MultiByteToWideChar(CP_ACP, 0, item.filename, -1, unicodeSource, MAX_PATH);
|
||||
MultiByteToWideChar(CP_ACP, 0, destinationPath, -1, unicodeDest, MAX_PATH);
|
||||
isocreator->AddFile(unicodeSource, unicodeDest);
|
||||
}
|
||||
|
||||
isocreator->Write(destination, 0);
|
||||
}
|
||||
ReleaseISOCreator(isocreator);
|
||||
}
|
||||
}
|
||||
|
||||
void ConvertFilenamesToISO(const char *filenames)
|
||||
{
|
||||
obj_isocreator *isocreator = CreateISOCreator();
|
||||
if (isocreator)
|
||||
{
|
||||
wchar_t destination[MAX_PATH];
|
||||
|
||||
if (PromptForFilename(destination, MAX_PATH))
|
||||
{
|
||||
// these values are hardcoded for this example.
|
||||
isocreator->Open(L"WinampISO", obj_isocreator::FORMAT_JOLIET, obj_isocreator::MEDIA_CD);
|
||||
|
||||
wchar_t destinationPath[MAX_PATH];
|
||||
|
||||
// loop through the files and add them
|
||||
while (*filenames)
|
||||
{
|
||||
/**
|
||||
** both playlist loader and iso creator want unicode filenames
|
||||
** so we'll convert it first
|
||||
*/
|
||||
wchar_t unicodeFilename[MAX_PATH];
|
||||
MultiByteToWideChar(CP_ACP, 0, filenames, -1, unicodeFilename, MAX_PATH);
|
||||
|
||||
/**
|
||||
** see if this file is a playlist file
|
||||
** we'll do that by trying to load it
|
||||
** the Load() function will fail gracefully if it's not a playlist file
|
||||
** if it succeeds, it will call loader.OnFile() which adds it to the iso file
|
||||
**/
|
||||
ISOPlaylistLoader loader(isocreator); // make a callback object for playlist loading
|
||||
if (AGAVE_API_PLAYLISTMANAGER->Load(unicodeFilename, &loader) == PLAYLISTMANAGER_LOAD_NO_LOADER)
|
||||
{
|
||||
// not a playlist file, so load it normally
|
||||
|
||||
// isocreator requires a preceding backslash
|
||||
StringCbPrintfW(destinationPath, sizeof(destinationPath), L"\\%s", PathFindFileNameW(unicodeFilename));
|
||||
|
||||
isocreator->AddFile(unicodeFilename, destinationPath);
|
||||
}
|
||||
filenames+=strlen(filenames)+1;
|
||||
}
|
||||
isocreator->Write(destination, 0);
|
||||
}
|
||||
ReleaseISOCreator(isocreator);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
** Load Playlist and write it to the ISO file
|
||||
** this function is a bit complex, since we have to load the playlist
|
||||
** through api_playlistmanager. This involves creating an playlist loader callback
|
||||
** (ifc_playlistloadercallback) which gets called for each playlist item
|
||||
**/
|
||||
void ConvertPlaylistToISO(const mlPlaylist *playlist)
|
||||
{
|
||||
obj_isocreator *isocreator = CreateISOCreator();
|
||||
if (isocreator)
|
||||
{
|
||||
wchar_t destination[MAX_PATH];
|
||||
|
||||
if (PromptForFilename(destination, MAX_PATH))
|
||||
{
|
||||
// these values are hardcoded for this example.
|
||||
const wchar_t *title=L"WinampISO";
|
||||
if (playlist->title) // if there's a playlist title, use it as the volume name
|
||||
title = playlist->title;
|
||||
|
||||
isocreator->Open(title, obj_isocreator::FORMAT_JOLIET, obj_isocreator::MEDIA_CD);
|
||||
|
||||
ISOPlaylistLoader loader(isocreator); // make a callback object for playlist loading
|
||||
AGAVE_API_PLAYLISTMANAGER->Load(playlist->filename, &loader);
|
||||
|
||||
isocreator->Write(destination, 0);
|
||||
}
|
||||
ReleaseISOCreator(isocreator);
|
||||
}
|
||||
}
|
||||
|
||||
/** Load all playlists and write them to the ISO file
|
||||
** this function is a bit complex, since we have to load the playlist
|
||||
** through api_playlistmanager. This involves creating an playlist loader callback
|
||||
** (ifc_playlistloadercallback) which gets called for each playlist item
|
||||
**/
|
||||
void ConvertPlaylistsToISO(const mlPlaylist **playlists)
|
||||
{
|
||||
obj_isocreator *isocreator = CreateISOCreator();
|
||||
if (isocreator)
|
||||
{
|
||||
wchar_t destination[MAX_PATH];
|
||||
|
||||
if (PromptForFilename(destination, MAX_PATH))
|
||||
{
|
||||
// these values are hardcoded for this example.
|
||||
isocreator->Open(L"WinampISO", obj_isocreator::FORMAT_JOLIET, obj_isocreator::MEDIA_CD);
|
||||
while (*playlists)
|
||||
{
|
||||
const mlPlaylist *playlist = *playlists;
|
||||
ISOPlaylistLoader loader(isocreator); // make a callback object for playlist loading
|
||||
AGAVE_API_PLAYLISTMANAGER->Load(playlist->filename, &loader);
|
||||
playlists++;
|
||||
}
|
||||
isocreator->Write(destination, 0);
|
||||
}
|
||||
ReleaseISOCreator(isocreator);
|
||||
}
|
||||
}
|
||||
|
||||
void ConvertUnicodeItemRecordListToISO(const itemRecordListW *list)
|
||||
{
|
||||
obj_isocreator *isocreator = CreateISOCreator();
|
||||
if (isocreator)
|
||||
{
|
||||
wchar_t destination[MAX_PATH];
|
||||
|
||||
if (PromptForFilename(destination, MAX_PATH))
|
||||
{
|
||||
// these values are hardcoded for this example.
|
||||
isocreator->Open(L"WinampISO", obj_isocreator::FORMAT_JOLIET, obj_isocreator::MEDIA_CD);
|
||||
|
||||
wchar_t destinationPath[MAX_PATH];
|
||||
|
||||
// loop through the files and add them
|
||||
for (int i=0;i<list->Size;i++)
|
||||
{
|
||||
itemRecordW &item = list->Items[i];
|
||||
|
||||
// since we have metadata, we're going to auto-generate folders based on the album name
|
||||
const wchar_t *album = item.album;
|
||||
if (!album || !*album)
|
||||
album = L"Unknown Album";
|
||||
|
||||
// isocreator requires a preceding backslash
|
||||
StringCbPrintfW(destinationPath, sizeof(destinationPath), L"\\%s\\%s", album, PathFindFileNameW(item.filename));
|
||||
|
||||
isocreator->AddFile(item.filename, destinationPath);
|
||||
}
|
||||
isocreator->Write(destination, 0);
|
||||
}
|
||||
ReleaseISOCreator(isocreator);
|
||||
}
|
||||
}
|
||||
|
||||
void ConvertUnicodeFilenamesToISO(const wchar_t *filenames)
|
||||
{
|
||||
obj_isocreator *isocreator = CreateISOCreator();
|
||||
if (isocreator)
|
||||
{
|
||||
wchar_t destination[MAX_PATH];
|
||||
|
||||
if (PromptForFilename(destination, MAX_PATH))
|
||||
{
|
||||
// these values are hardcoded for this example.
|
||||
isocreator->Open(L"WinampISO", obj_isocreator::FORMAT_JOLIET, obj_isocreator::MEDIA_CD);
|
||||
|
||||
wchar_t destinationPath[MAX_PATH];
|
||||
|
||||
// loop through the files and add them
|
||||
while (*filenames)
|
||||
{
|
||||
/**
|
||||
** see if this file is a playlist file
|
||||
** we'll do that by trying to load it
|
||||
** the Load() function will fail gracefully if it's not a playlist file
|
||||
** if it succeeds, it will call loader.OnFile() which adds it to the iso file
|
||||
**/
|
||||
ISOPlaylistLoader loader(isocreator); // make a callback object for playlist loading
|
||||
if (AGAVE_API_PLAYLISTMANAGER->Load(filenames, &loader) == PLAYLISTMANAGER_LOAD_NO_LOADER)
|
||||
{
|
||||
// not a playlist file, so load it normally
|
||||
|
||||
// isocreator requires a preceding backslash
|
||||
StringCbPrintfW(destinationPath, sizeof(destinationPath), L"\\%s", PathFindFileNameW(filenames));
|
||||
|
||||
isocreator->AddFile(filenames, destinationPath);
|
||||
}
|
||||
filenames+=wcslen(filenames)+1;
|
||||
}
|
||||
|
||||
isocreator->Write(destination, 0);
|
||||
}
|
||||
ReleaseISOCreator(isocreator);
|
||||
}
|
||||
}
|
||||
|
||||
/* --- Playlist Loader definition --- */
|
||||
ISOPlaylistLoader::ISOPlaylistLoader(obj_isocreator *_creator)
|
||||
{
|
||||
creator=_creator;
|
||||
}
|
||||
|
||||
void ISOPlaylistLoader::OnFile(const wchar_t *filename, const wchar_t *title, int lengthInMS, ifc_plentryinfo *info)
|
||||
{
|
||||
// isocreator requires a preceding backslash
|
||||
wchar_t destinationPath[MAX_PATH];
|
||||
StringCbPrintfW(destinationPath, sizeof(destinationPath), L"\\%s", PathFindFileNameW(filename));
|
||||
// add file to .iso image
|
||||
creator->AddFile(filename, destinationPath);
|
||||
}
|
||||
|
||||
#define CBCLASS ISOPlaylistLoader
|
||||
START_DISPATCH;
|
||||
VCB(IFC_PLAYLISTLOADERCALLBACK_ONFILE, OnFile)
|
||||
//VCB(IFC_PLAYLISTLOADERCALLBACK_ONPLAYLISTINFO, OnPlaylistInfo)
|
||||
END_DISPATCH;
|
10
Src/Plugins/SDK/ml_iso/api__ml_iso.h
Normal file
10
Src/Plugins/SDK/ml_iso/api__ml_iso.h
Normal file
@ -0,0 +1,10 @@
|
||||
#pragma once
|
||||
|
||||
#include <api/service/api_service.h>
|
||||
|
||||
#include <api/application/api_application.h>
|
||||
#define WASABI_API_APP applicationApi
|
||||
|
||||
#include "../playlist/api_playlistmanager.h"
|
||||
extern api_playlistmanager *playlistManagerApi;
|
||||
#define AGAVE_API_PLAYLISTMANAGER playlistManagerApi
|
150
Src/Plugins/SDK/ml_iso/main.cpp
Normal file
150
Src/Plugins/SDK/ml_iso/main.cpp
Normal file
@ -0,0 +1,150 @@
|
||||
#include "main.h"
|
||||
#include "../Winamp/wa_ipc.h"
|
||||
#include "api__ml_iso.h"
|
||||
#include <api/service/waservicefactory.h>
|
||||
|
||||
|
||||
/* wasabi services we'll be using */
|
||||
api_service *WASABI_API_SVC = 0;
|
||||
api_application *WASABI_API_APP = 0;
|
||||
api_playlistmanager *AGAVE_API_PLAYLISTMANAGER = 0;
|
||||
|
||||
/* gen_ml calls this function when it loads your plugin. return non-zero to abort loading your plugin */
|
||||
int Init()
|
||||
{
|
||||
// this plugin requires an interface only present on 5.54 and up, so we'll just refuse to load on older versions
|
||||
if (SendMessage(plugin.hwndWinampParent, WM_WA_IPC, 0, IPC_GETVERSION) < 0x5054)
|
||||
return 1;
|
||||
|
||||
// go ahead and grab the wasabi service manager. we'll need it later when we get an ISO Creator object
|
||||
WASABI_API_SVC = (api_service *)SendMessage(plugin.hwndWinampParent, WM_WA_IPC, 0, IPC_GET_API_SERVICE);
|
||||
|
||||
// get the application API
|
||||
// we need this to get/set Winamp's current working directory
|
||||
waServiceFactory *factory = WASABI_API_SVC->service_getServiceByGuid(applicationApiServiceGuid);
|
||||
if (factory)
|
||||
WASABI_API_APP = (api_application *)factory->getInterface();
|
||||
|
||||
// get the playlist manager API
|
||||
// we'll need this for loading playlists
|
||||
factory = WASABI_API_SVC->service_getServiceByGuid(api_playlistmanagerGUID);
|
||||
if (factory)
|
||||
AGAVE_API_PLAYLISTMANAGER = (api_playlistmanager *)factory->getInterface();
|
||||
|
||||
// this media library plugin doesn't add a node to the treeview, so we don't really do anything in here besides
|
||||
// grabbing the service manager
|
||||
// all of the action will come via Send-To which is handled in MessageProc
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void Quit()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
INT_PTR MessageProc(int message_type, INT_PTR param1, INT_PTR param2, INT_PTR param3)
|
||||
{
|
||||
switch(message_type)
|
||||
{
|
||||
// this gets sent when Winamp wants to build the send-to menu. If we want to be in the send-to
|
||||
// we make some API calls during this function
|
||||
case ML_MSG_ONSENDTOBUILD:
|
||||
{
|
||||
INT_PTR source_type = param1; // param 1 is the source type
|
||||
INT_PTR context = param2; // param 2 is just some context value that we have to use when we call back into the API
|
||||
|
||||
// we only accept certain types of sources, so we'll explicitly check
|
||||
// if we were to handle ALL types, checking against the known types
|
||||
// is good practice in case new Winamp versions add additional source types
|
||||
switch(source_type)
|
||||
{
|
||||
case ML_TYPE_ITEMRECORDLIST: // Item Record List. Used by the local media library
|
||||
case ML_TYPE_FILENAMES: // raw list of filenames
|
||||
case ML_TYPE_PLAYLIST: // a playlist. we'll use the playlist loading API to crack it open
|
||||
case ML_TYPE_PLAYLISTS: // a list of playlists. we'll use the playlist loading API to crack each one open
|
||||
case ML_TYPE_ITEMRECORDLISTW: // unicode version of an Item Record List
|
||||
case ML_TYPE_FILENAMESW: // raw list of unicode filenames
|
||||
{
|
||||
// add ourselves to the send-to menu!
|
||||
mlAddToSendToStructW s;
|
||||
s.context = context; // pass in the context value passed to this function.
|
||||
s.desc = L"Create new ISO image";
|
||||
s.user32 = (INT_PTR)MessageProc; // this value has to be some unique value that you can identify later
|
||||
// by convention, use the pointer to this function, since it's obviously unique
|
||||
|
||||
SendMessage(plugin.hwndLibraryParent, WM_ML_IPC, (WPARAM)&s, ML_IPC_ADDTOSENDTOW);
|
||||
}
|
||||
// returning 0 tells the media library to continue building the send-to menu
|
||||
// it doesn't mean we added or didn't add items to the send-to menu
|
||||
return 0;
|
||||
case ML_TYPE_STREAMNAMES: // doesn't make sense to burn a stream to an ISO file so we won't even popup on the send-to menu when it's streams
|
||||
case ML_TYPE_CDTRACKS: // we'll avoid CD tracks. in theory we could use the ripping API but let's not complicate this example
|
||||
case ML_TYPE_QUERYSTRING: // media library query. not sure that this is even used anywhere. either way we're not going to handle it
|
||||
case ML_TYPE_STREAMNAMESW: // don't cross the streams
|
||||
case ML_TYPE_TREEITEM: // not even sure this is used
|
||||
// break out of here because it's not supported. returning 0 just tells the send-to menu to continue building,
|
||||
// it doesn't mean we added or didn't add items to the send-to menu
|
||||
return 0;
|
||||
}
|
||||
// shouldn't get here
|
||||
return 0;
|
||||
}
|
||||
|
||||
// this gets sent when a send-to menu item got selected
|
||||
// it might be ours. it might not.
|
||||
case ML_MSG_ONSENDTOSELECT:
|
||||
{
|
||||
// let's see if it's ours. We check 'user32' against the function pointer for this function
|
||||
INT_PTR unique = param3;
|
||||
if (unique != (INT_PTR)MessageProc) // not ours? let's bail
|
||||
return 0; // remember to always return 0 or else other media library plugins won't get the notification
|
||||
|
||||
INT_PTR type = param1; // what type of data got sent
|
||||
INT_PTR data = param2; // pointer to the data. depends on the type
|
||||
|
||||
switch(type)
|
||||
{
|
||||
case ML_TYPE_ITEMRECORDLIST: // Item Record List. Used by the local media library
|
||||
ConvertItemRecordListToISO((const itemRecordList *)data);
|
||||
return 1; // return 1 to say we handled it
|
||||
case ML_TYPE_FILENAMES: // raw list of filenames
|
||||
ConvertFilenamesToISO((const char *)data);
|
||||
return 1; // return 1 to say we handled it
|
||||
case ML_TYPE_PLAYLIST: // a playlist. we'll use the playlist loading API to crack it open
|
||||
ConvertPlaylistToISO((const mlPlaylist *)data);
|
||||
return 1; // return 1 to say we handled it
|
||||
case ML_TYPE_PLAYLISTS: // a list of playlists. we'll use the playlist loading API to crack each one open
|
||||
ConvertPlaylistsToISO((const mlPlaylist **)data);
|
||||
return 1; // return 1 to say we handled it
|
||||
case ML_TYPE_ITEMRECORDLISTW: // unicode version of an Item Record List
|
||||
ConvertUnicodeItemRecordListToISO((const itemRecordListW *)data);
|
||||
return 1; // return 1 to say we handled it
|
||||
case ML_TYPE_FILENAMESW: // raw list of unicode filenames
|
||||
ConvertUnicodeFilenamesToISO((const wchar_t *)data);
|
||||
return 1; // return 1 to say we handled it
|
||||
|
||||
default: // something we didn't support
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
winampMediaLibraryPlugin plugin =
|
||||
{
|
||||
MLHDR_VER,
|
||||
"ISO Creator",
|
||||
Init,
|
||||
Quit,
|
||||
MessageProc,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
};
|
||||
|
||||
extern "C" __declspec(dllexport) winampMediaLibraryPlugin *winampGetMediaLibraryPlugin()
|
||||
{
|
||||
return &plugin;
|
||||
}
|
12
Src/Plugins/SDK/ml_iso/main.h
Normal file
12
Src/Plugins/SDK/ml_iso/main.h
Normal file
@ -0,0 +1,12 @@
|
||||
#pragma once
|
||||
#include "..\..\General\gen_ml\ml.h"
|
||||
|
||||
extern winampMediaLibraryPlugin plugin;
|
||||
|
||||
void ConvertItemRecordListToISO(const itemRecordList *list);
|
||||
void ConvertFilenamesToISO(const char *filenames);
|
||||
void ConvertPlaylistToISO(const mlPlaylist *playlist);
|
||||
void ConvertPlaylistsToISO(const mlPlaylist **playlist);
|
||||
void ConvertUnicodeItemRecordListToISO(const itemRecordListW *list);
|
||||
void ConvertUnicodeFilenamesToISO(const wchar_t *filenames);
|
||||
|
122
Src/Plugins/SDK/ml_iso/ml_iso.rc
Normal file
122
Src/Plugins/SDK/ml_iso/ml_iso.rc
Normal file
@ -0,0 +1,122 @@
|
||||
// Microsoft Visual C++ generated resource script.
|
||||
//
|
||||
#include "resource.h"
|
||||
|
||||
#define APSTUDIO_READONLY_SYMBOLS
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 2 resource.
|
||||
//
|
||||
#include "afxres.h"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#undef APSTUDIO_READONLY_SYMBOLS
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// English (U.S.) resources
|
||||
|
||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
|
||||
#ifdef _WIN32
|
||||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||
#pragma code_page(1252)
|
||||
#endif //_WIN32
|
||||
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// TEXTINCLUDE
|
||||
//
|
||||
|
||||
1 TEXTINCLUDE
|
||||
BEGIN
|
||||
"resource.h\0"
|
||||
END
|
||||
|
||||
2 TEXTINCLUDE
|
||||
BEGIN
|
||||
"#include ""afxres.h""\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
3 TEXTINCLUDE
|
||||
BEGIN
|
||||
"#include ""version.rc2""\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
#endif // APSTUDIO_INVOKED
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Menu
|
||||
//
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Dialog
|
||||
//
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// DESIGNINFO
|
||||
//
|
||||
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
GUIDELINES DESIGNINFO
|
||||
BEGIN
|
||||
|
||||
END
|
||||
#endif // APSTUDIO_INVOKED
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Bitmap
|
||||
//
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Accelerator
|
||||
//
|
||||
|
||||
IDR_VIEW_BM_ACCELERATORS ACCELERATORS
|
||||
BEGIN
|
||||
|
||||
END
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// String Table
|
||||
//
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_NULLSOFT_ISO "Nullsoft ISO Example Media Library Plug-in v%s"
|
||||
65535 "{A3A1E7C0-761B-4391-A08A-F0D7AF38931C}"
|
||||
END
|
||||
|
||||
STRINGTABLE
|
||||
BEGIN
|
||||
IDS_ISO "ISO"
|
||||
END
|
||||
|
||||
#endif // English (U.S.) resources
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
#ifndef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 3 resource.
|
||||
//
|
||||
#include "version.rc2"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#endif // not APSTUDIO_INVOKED
|
||||
|
24
Src/Plugins/SDK/ml_iso/ml_iso.sln
Normal file
24
Src/Plugins/SDK/ml_iso/ml_iso.sln
Normal file
@ -0,0 +1,24 @@
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 16
|
||||
VisualStudioVersion = 16.0.32802.440
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ml_iso", "ml_iso.vcxproj", "{229EE189-137B-4E20-804D-CA1F71810332}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|x86 = Debug|x86
|
||||
Release|x86 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{229EE189-137B-4E20-804D-CA1F71810332}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{229EE189-137B-4E20-804D-CA1F71810332}.Debug|x86.Build.0 = Debug|Win32
|
||||
{229EE189-137B-4E20-804D-CA1F71810332}.Release|x86.ActiveCfg = Release|Win32
|
||||
{229EE189-137B-4E20-804D-CA1F71810332}.Release|x86.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {85243140-49BA-42D9-AC20-4B3F643E9127}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
246
Src/Plugins/SDK/ml_iso/ml_iso.vcxproj
Normal file
246
Src/Plugins/SDK/ml_iso/ml_iso.vcxproj
Normal file
@ -0,0 +1,246 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<ProjectGuid>{229EE189-137B-4E20-804D-CA1F71810332}</ProjectGuid>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<WindowsTargetPlatformVersion>10.0.19041.0</WindowsTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>DynamicLibrary</ConfigurationType>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup>
|
||||
<_ProjectFileVersion>16.0.32629.160</_ProjectFileVersion>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<OutDir>$(PlatformShortName)_$(Configuration)\</OutDir>
|
||||
<IntDir>$(PlatformShortName)_$(Configuration)\</IntDir>
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
<CodeAnalysisRules />
|
||||
<CodeAnalysisRuleAssemblies />
|
||||
<IncludePath>$(IncludePath)</IncludePath>
|
||||
<LibraryPath>$(LibraryPath)</LibraryPath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
<CodeAnalysisRules />
|
||||
<CodeAnalysisRuleAssemblies />
|
||||
<IncludePath>$(IncludePath)</IncludePath>
|
||||
<LibraryPath>$(LibraryPath)</LibraryPath>
|
||||
<OutDir>$(PlatformShortName)_$(Configuration)\</OutDir>
|
||||
<IntDir>$(PlatformShortName)_$(Configuration)\</IntDir>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<OutDir>$(PlatformShortName)_$(Configuration)\</OutDir>
|
||||
<IntDir>$(PlatformShortName)_$(Configuration)\</IntDir>
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
<CodeAnalysisRules />
|
||||
<CodeAnalysisRuleAssemblies />
|
||||
<IncludePath>$(IncludePath)</IncludePath>
|
||||
<LibraryPath>$(LibraryPath)</LibraryPath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<CodeAnalysisRuleSet>MinimumRecommendedRules.ruleset</CodeAnalysisRuleSet>
|
||||
<CodeAnalysisRules />
|
||||
<CodeAnalysisRuleAssemblies />
|
||||
<IncludePath>$(IncludePath)</IncludePath>
|
||||
<LibraryPath>$(LibraryPath)</LibraryPath>
|
||||
<OutDir>$(PlatformShortName)_$(Configuration)\</OutDir>
|
||||
<IntDir>$(PlatformShortName)_$(Configuration)\</IntDir>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Label="Vcpkg">
|
||||
<VcpkgEnabled>false</VcpkgEnabled>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Label="Vcpkg" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<VcpkgConfiguration>Debug</VcpkgConfiguration>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<AdditionalIncludeDirectories>..\..;..\..\..\Wasabi;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;ML_ISO_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<MinimalRebuild>false</MinimalRebuild>
|
||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||
<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
|
||||
<ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope>
|
||||
<PrecompiledHeader />
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||
<ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
|
||||
<TargetMachine>MachineX86</TargetMachine>
|
||||
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<AdditionalIncludeDirectories>..\..;..\..\..\Wasabi;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;ML_ISO_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
|
||||
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
|
||||
<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
|
||||
<ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||
<ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
|
||||
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<Optimization>MinSpace</Optimization>
|
||||
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
|
||||
<OmitFramePointers>true</OmitFramePointers>
|
||||
<AdditionalIncludeDirectories>..\..;..\..\..\Wasabi;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;ML_ISO_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<StringPooling>true</StringPooling>
|
||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||
<BufferSecurityCheck>true</BufferSecurityCheck>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
|
||||
<ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope>
|
||||
<PrecompiledHeader />
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<DebugInformationFormat>None</DebugInformationFormat>
|
||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||
<ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
|
||||
<IgnoreSpecificDefaultLibraries>msvcprt.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
|
||||
<TargetMachine>MachineX86</TargetMachine>
|
||||
<ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
|
||||
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<Optimization>MinSpace</Optimization>
|
||||
<FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
|
||||
<OmitFramePointers>true</OmitFramePointers>
|
||||
<AdditionalIncludeDirectories>..\..;..\..\..\Wasabi;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;ML_ISO_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<StringPooling>true</StringPooling>
|
||||
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
|
||||
<BufferSecurityCheck>true</BufferSecurityCheck>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
|
||||
<ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope>
|
||||
<PrecompiledHeader>
|
||||
</PrecompiledHeader>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<DebugInformationFormat>None</DebugInformationFormat>
|
||||
<MultiProcessorCompilation>true</MultiProcessorCompilation>
|
||||
<ProgramDataBaseFileName>$(IntDir)$(TargetName).pdb</ProgramDataBaseFileName>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<AdditionalDependencies>shlwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
|
||||
<IgnoreSpecificDefaultLibraries>msvcprt.lib;%(IgnoreSpecificDefaultLibraries)</IgnoreSpecificDefaultLibraries>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<SubSystem>Windows</SubSystem>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
|
||||
<ProgramDatabaseFile>$(IntDir)$(TargetName).pdb</ProgramDatabaseFile>
|
||||
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="main.cpp" />
|
||||
<ClCompile Include="ToISO.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="api__ml_iso.h" />
|
||||
<ClInclude Include="main.h" />
|
||||
<ClInclude Include="resource.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="ml_iso.rc" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
41
Src/Plugins/SDK/ml_iso/ml_iso.vcxproj.filters
Normal file
41
Src/Plugins/SDK/ml_iso/ml_iso.vcxproj.filters
Normal file
@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="Source Files">
|
||||
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||
<Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Header Files">
|
||||
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Resource Files">
|
||||
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx</Extensions>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="main.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="ToISO.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="main.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="api__ml_iso.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="resource.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="ml_iso.rc">
|
||||
<Filter>Resource Files</Filter>
|
||||
</ResourceCompile>
|
||||
</ItemGroup>
|
||||
</Project>
|
26
Src/Plugins/SDK/ml_iso/resource.h
Normal file
26
Src/Plugins/SDK/ml_iso/resource.h
Normal file
@ -0,0 +1,26 @@
|
||||
//{{NO_DEPENDENCIES}}
|
||||
// Microsoft Visual C++ generated include file.
|
||||
// Used by ml_iso.rc
|
||||
//
|
||||
#define IDS_ISO 1
|
||||
#define IDR_MENU1 101
|
||||
#define IDC_CURSOR1 105
|
||||
#define IDB_BITMAP1 106
|
||||
#define IDR_VIEW_BM_ACCELERATORS 111
|
||||
#define IDC_BUTTON_CUSTOM 1000
|
||||
#define IDC_LIST 1001
|
||||
#define ID_Menu 40001
|
||||
#define ID_ISO_HELP 40002
|
||||
#define ID_ISO_SENDTO 40003
|
||||
#define IDS_NULLSOFT_ISO 65534
|
||||
|
||||
// Next default values for new objects
|
||||
//
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||
#define _APS_NEXT_RESOURCE_VALUE 112
|
||||
#define _APS_NEXT_COMMAND_VALUE 40004
|
||||
#define _APS_NEXT_CONTROL_VALUE 1002
|
||||
#define _APS_NEXT_SYMED_VALUE 101
|
||||
#endif
|
||||
#endif
|
39
Src/Plugins/SDK/ml_iso/version.rc2
Normal file
39
Src/Plugins/SDK/ml_iso/version.rc2
Normal file
@ -0,0 +1,39 @@
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Version
|
||||
//
|
||||
#include "..\..\..\Winamp\buildType.h"
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION 1,0,0,1
|
||||
PRODUCTVERSION WINAMP_PRODUCTVER
|
||||
FILEFLAGSMASK 0x17L
|
||||
#ifdef _DEBUG
|
||||
FILEFLAGS 0x1L
|
||||
#else
|
||||
FILEFLAGS 0x0L
|
||||
#endif
|
||||
FILEOS 0x4L
|
||||
FILETYPE 0x2L
|
||||
FILESUBTYPE 0x0L
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "040904b0"
|
||||
BEGIN
|
||||
VALUE "CompanyName", "Winamp SA"
|
||||
VALUE "FileDescription", "Winamp Media Library Plug-in"
|
||||
VALUE "FileVersion", "1,0,0,1"
|
||||
VALUE "InternalName", "Nullsoft ISO"
|
||||
VALUE "LegalCopyright", "Copyright <20> 2003-2023 Winamp SA"
|
||||
VALUE "LegalTrademarks", "Nullsoft and Winamp are trademarks of Winamp SA"
|
||||
VALUE "OriginalFilename", "ml_iso.dll"
|
||||
VALUE "ProductName", "Winamp"
|
||||
VALUE "ProductVersion", STR_WINAMP_PRODUCTVER
|
||||
END
|
||||
END
|
||||
BLOCK "VarFileInfo"
|
||||
BEGIN
|
||||
VALUE "Translation", 0x409, 1200
|
||||
END
|
||||
END
|
Reference in New Issue
Block a user