Compare commits

..

No commits in common. "71af5146420ec8165136feb48964559687200142" and "4e71a26a14c91dad9a35d342a78b64df1c3ed3c9" have entirely different histories.

26 changed files with 999 additions and 23 deletions

View file

@ -1,4 +1,4 @@
# Winamp Collaborative License (WCL) Version 1.0.1 # Winamp Collaborative License (WCL) Version 1.0
This License governs the use, modification, and distribution of the Winamp software. This License governs the use, modification, and distribution of the Winamp software.
By using, Modifying, or distributing this software, you agree to the following terms: By using, Modifying, or distributing this software, you agree to the following terms:
@ -30,6 +30,7 @@ You are granted the right to Modify the software for private use only. You may m
### 5. Restrictions ### 5. Restrictions
- No Distribution of Modified Versions: You may not distribute modified versions of the software, whether in source or binary form. - No Distribution of Modified Versions: You may not distribute modified versions of the software, whether in source or binary form.
- No Forking: You may not create, maintain, or distribute a forked version of the software.
- Official Distribution: Only the maintainers of the official repository are allowed to distribute the software and its modifications. - Official Distribution: Only the maintainers of the official repository are allowed to distribute the software and its modifications.
### 6. No Sublicensing ### 6. No Sublicensing
@ -76,4 +77,4 @@ You must comply with all applicable laws and regulations in connection with your
- Severability: If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. - Severability: If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable.
By using, Modifying, or contributing to the software, you acknowledge that you have read, understood, and agree to be bound by these terms and conditions. By using, Modifying, or contributing to the software, you acknowledge that you have read, understood, and agree to be bound by these terms and conditions.
This custom License aims to maintain the collaborative nature of the project while restricting the distribution of modified versions. This custom License aims to maintain the collaborative nature of the project while restricting the distribution of modified versions.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -11,42 +11,40 @@ It really whips the llama's ass.
Building of the Winamp desktop client is currently based around Visual Studio 2019 (VS2019) and Intel IPP libs (You need to use exactly v6.1.1.035). Building of the Winamp desktop client is currently based around Visual Studio 2019 (VS2019) and Intel IPP libs (You need to use exactly v6.1.1.035).
There are different options of how to build Winamp: There are different options of how to build Winamp:
1. Use the `build_winampAll_2019.cmd` script file that makes 4 versions x86/x64 (Debug and Release). In this case Visual Studio IDE not running. 1. Use a build_winampAll_2019.cmd script file that makes 4 versions x86/x64 (Debug and Release). In this case Visual Studio IDE not running.
2. Use the `winampAll_2019.sln` file to build and debug in Visual Studio IDE. 2. Use a winampAll_2019.sln file to build and debug in Visual Studio IDE.
### Dependencies ### Dependencies
1. Use the `build_winampAll_2019.cmd` script file that makes 4 versions x86/x64 (Debug and Release). In this case Visual Studio IDE not running. 1. Use a build_winampAll_2019.cmd script file that makes 4 versions x86/x64 (Debug and Release). In this case Visual Studio IDE not running.
2. Use the `winampAll_2019.sln` file to build and debug in Visual Studio IDE. 2. Use a winampAll_2019.sln file to build and debug in Visual Studio IDE.
#### libvpx #### libvpx
We take libvpx from [https://github.com/ShiftMediaProject/libvpx]([url](https://github.com/ShiftMediaProject/libvpx)), modify it and pack to archive. We take libvpx from https://github.com/ShiftMediaProject/libvpx, modify it and pack to archive.
Run `unpack_libvpx_v1.8.2_msvc16.cmd` to unpack. Run unpack_libvpx_v1.8.2_msvc16.cmd to unpack.
#### libmpg123 #### libmpg123
We take libmpg123 from [https://www.mpg123.de/download.shtml]([url](https://www.mpg123.de/download.shtml)), modify it and pack to archive. We take libmpg123 from https://www.mpg123.de/download.shtml, modify it and pack to archive.
Run `unpack_libmpg123.cmd` to unpack and process dlls. Run unpack_libmpg123.cmd to unpack and process dlls.
#### OpenSSL #### OpenSSL
You need to use `openssl-1.0.1u`. For that you need to build a static version of these libs. You need to use openssl-1.0.1u. For that you need to build a static version of these libs.
Run `build_vs_2019_openssl_x86.cmd` and `build_vs_2019_openssl_64.cmd`. Run build_vs_2019_openssl_x86.cmd and build_vs_2019_openssl_64.cmd.
To build OpenSSL you need to install To build OpenSSL you need to install
* 7-Zip 7-Zip, NASM and Perl.
* NASM
* Perl
#### DirectX 9 SDK #### DirectX 9 SDK
We take DirectX 9 SDK (June 2010) from Microsoft, modify it and pack to archive. We take DirectX 9 SDK (June 2010) from Microsoft, modify it and pack to archive.
Run `unpack_microsoft_directx_sdk_2010.cmd` to unpack it. Run unpack_microsoft_directx_sdk_2010.cmd to unpack it.
#### Microsoft ATLMFC lib fix #### Microsoft ATLMFC lib fix
In file `C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.24.28314\atlmfc\include\atltransactionmanager.h` In file C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.24.28314\atlmfc\include\atltransactionmanager.h
Go to line 427 and change from `return ::DeleteFile((LPTSTR)lpFileName);` to `return DeleteFile((LPTSTR)lpFileName);` goto line 427 and change from 'return ::DeleteFile((LPTSTR)lpFileName);' to 'return DeleteFile((LPTSTR)lpFileName);'
#### Intel IPP 6.1.1.035 #### Intel IPP 6.1.1.035
We take Intel IPP 6.1.1.035, modify it and pack to archive. We take Intel IPP 6.1.1.035, modify it and pack to archive.
Run `unpack_intel_ipp_6.1.1.035.cmd` to unpack it. Run unpack_intel_ipp_6.1.1.035.cmd to unpack it.

View file

@ -1,2 +1,693 @@
// disabled 30 May 2012 as per email from Tejas w.r.t. to Rovi deal ending
#if 0 #if 0
#include "main.h"
#include "../nu/AutoUrl.h"
#include "../nu/AutoWide.h"
#include "../nu/GrowBuf.h"
#include "api.h"
#include "../xml/obj_xml.h"
#include "../xml/ifc_xmlreadercallback.h"
#include "..\Components\wac_network\wac_network_http_receiver_api.h"
#include <api/service/waservicefactory.h>
#include <api/service/svcs/svc_imgload.h>
#include "XMLString.h"
#include <tataki/export.h>
#include <tataki/bitmap/bitmap.h>
#include <tataki/canvas/bltcanvas.h>
#include <strsafe.h>
static INT_PTR CALLBACK artDownloader(HWND hwndDlg, UINT uMsg, WPARAM wParam,LPARAM lParam);
static INT_PTR CALLBACK scrollChildHostProc(HWND hwndDlg, UINT uMsg, WPARAM wParam,LPARAM lParam);
static INT_PTR CALLBACK scrollChildProc(HWND hwndDlg, UINT uMsg, WPARAM wParam,LPARAM lParam);
static INT_PTR CALLBACK imageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam,LPARAM lParam);
#define HTTP_BUFFER_SIZE 32768
#define WM_ADDCHILD WM_USER+0
#define WM_SELECTED WM_USER+1
#define WM_UPDATESTATUS WM_USER+2
#define AddImageToList(hChild, param) SendMessageW(hChild,WM_ADDCHILD,0,(LPARAM)param)
#define GetParam(hwndDlg) (ArtParser*)GetWindowLongPtrW(hwndDlg,GWLP_USERDATA)
#define GetParamC(hwndDlg) (ImgDownloader*)GetWindowLongPtrW(hwndDlg,GWLP_USERDATA)
#define UpdateStatus(hwndDlg) PostMessageW(hwndDlg,WM_UPDATESTATUS,0,0)
class ImgDownloader
{
public:
ImgDownloader(const wchar_t *_desc, const char *_url) : done(false), http(0), started(false), error(false), imgbuf(0), imgbufsize(0), imgbufused(0)
{
desc = _wcsdup(_desc);
url = _strdup(_url);
}
~ImgDownloader()
{
free(desc);
free(url);
free(imgbuf);
waServiceFactory *httpFactory = WASABI_API_SVC->service_getServiceByGuid(httpreceiverGUID);
if(httpFactory && http)
httpFactory->releaseInterface(http);
}
bool run();
wchar_t *desc;
char *url;
bool done, error;
api_httpreceiver *http;
BYTE *imgbuf;
int imgbufsize;
int imgbufused;
private:
bool started;
};
class ArtParser : public ifc_xmlreadercallback
{
public:
ArtParser(artFetchData * data);
~ArtParser();
wchar_t curAlbumStr[512] = {0};
void ArtParser::StartTag(const wchar_t *xmlpath, const wchar_t *xmltag, ifc_xmlreaderparams *params);
void ArtParser::TextHandler(const wchar_t *xmlpath, const wchar_t *xmltag, const wchar_t *str);
int run();
artFetchData * data;
bool doneXML;
int curImage, numImages, failedImages;
bool error;
HWND hwndDlg;
obj_xml *parser;
waServiceFactory *parserFactory, *httpFactory;
api_httpreceiver *http;
std::vector<ImgDownloader*> imgDownload;
protected:
#define CBCLASS ArtParser
START_DISPATCH_INLINE;
VCB(ONSTARTELEMENT, StartTag);
VCB(ONCHARDATA, TextHandler);
END_DISPATCH;
#undef CBCLASS
};
wchar_t tmp_album[512] = {0}, tmp_artist[512] = {0}, tmp_year[5] = {0};
int RetrieveAlbumArt(artFetchData * data)
{
if(!data || data->size < sizeof(artFetchData))
return 1;
int ret = 1;
Tataki::Init(serviceManager);
{
ArtParser param(data);
if(!param.error)
ret = LPDialogBoxParamW(IDD_ARTDOWNLOADER,data->parent,artDownloader,(LPARAM)&param);
while (ret == 2) // Keep in loop till user aborts custom search
{
// TODO: benski> maybe we should save the old values and restore at the end
data->album = tmp_album;
data->artist = tmp_artist;
data->year = _wtoi(tmp_year);
// Martin> we should also set the other values back to null
// benski> i'm not sure if we want to set these id fields to NULL
// but we'll go with it for now
data->amgAlbumId = NULL;
data->amgArtistId = NULL;
data->gracenoteFileId = NULL;
WASABI_API_MEMMGR->sysFree(data->imgData);
data->imgData = NULL;
data->imgDataLen = NULL;
ArtParser param(data);
ret = LPDialogBoxParamW(IDD_ARTDOWNLOADER,data->parent,artDownloader,(LPARAM)&param);
}
}
Tataki::Quit();
return ret;
}
#define USER_AGENT_SIZE (10 /*User-Agent*/ + 2 /*: */ + 6 /*Winamp*/ + 1 /*/*/ + 1 /*5*/ + 3/*.21*/ + 1 /*Null*/)
static void SetUserAgent(api_httpreceiver *http)
{
char user_agent[USER_AGENT_SIZE] = {0};
StringCchCopyA(user_agent, USER_AGENT_SIZE, "User-Agent: Winamp/"APP_VERSION); // as a nice side effect, this will cut off any extra digits after the first two. e.g. 5.111 becomes 5.11
http->addheader(user_agent);
}
class UrlBuilder : private GrowBuf
{
public:
UrlBuilder(const char * base) : first(1) { set(base); }
~UrlBuilder(){}
void AddParam(const char * key, const wchar_t * value) { AddParamI(key,(char*)AutoUrl(value)); }
void AddParam(const char * key, int value) { char buf[16]; StringCchPrintfA(buf,16,"%d",value); AddParamI(key,buf); }
void Finish() { GrowBuf::add((void*)"",1); }
const char * Get() { return (const char*)get(); } // don't call this without first calling finish!
private:
void AddParamI(const char * key, const char * value) { if(first){ first=0; add("?");} else add("&"); add(key); add("="); add(value); }
void add(const char * x) { GrowBuf::add((char*)x,strlen(x)); }
void set(const char * x) { GrowBuf::set((char*)x,strlen(x)); }
int first;
};
static wchar_t* format(const wchar_t *in, wchar_t *buf, int len)
{
wchar_t *p = buf;
int inbracket = 0;
while(in && *in)
{
if(p >= buf + len - 1) break;
else if(*in == L'[' || *in == L'(' || *in == L'<') inbracket++;
else if(*in == L']' || *in == L')' || *in == L'>') inbracket--;
else if(!inbracket) *(p++) = *in;
in++;
}
*p=0;
return buf;
}
ArtParser::ArtParser(artFetchData * data) : data(data), error(false), parserFactory(0), parser(0), http(0), httpFactory(0), doneXML(false), curImage(0), numImages(0), failedImages(0)
{
curAlbumStr[0]=0;
parserFactory = WASABI_API_SVC->service_getServiceByGuid(obj_xmlGUID);
if (parserFactory)
parser = (obj_xml *)parserFactory->getInterface();
if (parser)
{
parser->xmlreader_registerCallback(L"document\fartwork", this);
parser->xmlreader_registerCallback(L"response\fdata\fartwork", this);
parser->xmlreader_open();
}
else
{
error=true;
return;
}
// construct xml url
UrlBuilder url("http://client.winamp.com/metadata/artwork.php");
wchar_t temp[2048] = {0};
if(data->artist && data->artist[0] && _wcsicmp(data->artist, L"Various Artists") && _wcsicmp(data->artist, L"VA") && _wcsicmp(data->artist, L"OST"))
url.AddParam("artist",format(data->artist,temp,2048));
if(data->album && data->album[0])
url.AddParam("album",format(data->album,temp,2048));
if(data->year)
url.AddParam("recorddate",data->year);
if(data->amgAlbumId)
url.AddParam("amgalbumid",data->amgAlbumId);
if(data->amgArtistId)
url.AddParam("amgartistid",data->amgArtistId);
if(data->gracenoteFileId && data->gracenoteFileId[0])
url.AddParam("tagid",data->gracenoteFileId);
url.Finish();
httpFactory = WASABI_API_SVC->service_getServiceByGuid(httpreceiverGUID);
if(httpFactory) http = (api_httpreceiver *)httpFactory->getInterface();
if(http)
{
http->AllowCompression();
http->open(API_DNS_AUTODNS, HTTP_BUFFER_SIZE, config_proxy);
SetUserAgent(http);
http->connect(url.Get());
}
else error = true;
}
ArtParser::~ArtParser()
{
imgDownload.deleteAll();
if(parser)
{
parser->xmlreader_unregisterCallback(this);
parser->xmlreader_close();
if(parserFactory)
parserFactory->releaseInterface(parser);
}
parser = 0;
parserFactory = 0;
if(http && httpFactory)
httpFactory->releaseInterface(http);
http = 0;
httpFactory = 0;
}
void ArtParser::StartTag(const wchar_t *xmlpath, const wchar_t *xmltag, ifc_xmlreaderparams *params)
{
const wchar_t* artist = params->getItemValue(L"amgArtistDispName");
const wchar_t* album = params->getItemValue(L"amgDispName");
const wchar_t* year = params->getItemValue(L"recordDate");
StringCchPrintfW(curAlbumStr,512,L"%s - %s (%s)",artist?artist:L"",album?album:L"",year?year:L"");
}
void ArtParser::TextHandler(const wchar_t *xmlpath, const wchar_t *xmltag, const wchar_t *str)
{
numImages++;
imgDownload.push_back(new ImgDownloader(curAlbumStr,AutoChar(str)));
UpdateStatus(hwndDlg);
}
int ArtParser::run()
{
int ret = http->run();
if (ret == -1) // connection failed
{
error=true;
UpdateStatus(hwndDlg);
return 0;
}
int replycode = http->getreplycode();
switch (replycode)
{
case 0:
case 100:
return 1;
case 200:
{
char downloadedData[HTTP_BUFFER_SIZE] = {0};
int xmlResult = API_XML_SUCCESS;
int downloadSize = http->get_bytes(downloadedData, HTTP_BUFFER_SIZE);
if(downloadSize)
xmlResult = parser->xmlreader_feed((void *)downloadedData, downloadSize);
else if(!downloadSize && ret == 1)
{ // we're finished!
xmlResult = parser->xmlreader_feed(0,0);
doneXML=true;
UpdateStatus(hwndDlg);
return 0;
}
break;
}
default:
error=true;
UpdateStatus(hwndDlg);
return 0;
}
return 1;
}
bool ImgDownloader::run()
{
if(!started)
{
started = true;
waServiceFactory *httpFactory = WASABI_API_SVC->service_getServiceByGuid(httpreceiverGUID);
if(httpFactory) http = (api_httpreceiver *)httpFactory->getInterface();
if(http)
{
http->open(API_DNS_AUTODNS, HTTP_BUFFER_SIZE, config_proxy);
SetUserAgent(http);
http->connect(url);
}
imgbuf = (BYTE*)malloc(HTTP_BUFFER_SIZE);
imgbufsize = HTTP_BUFFER_SIZE;
}
if(!http || !imgbuf)
{
error=true;
return 0;
}
int ret = http->run();
if(ret == -1) //error
{
error=true;
return 0;
}
int replycode = http->getreplycode();
switch (replycode)
{
case 0:
case 100:
return 1;
case 200:
{
int downloadSize = http->get_bytes(imgbuf+imgbufused, imgbufsize - imgbufused);
imgbufused += downloadSize;
if(imgbufused + 4096 >= imgbufsize)
{
imgbufsize += HTTP_BUFFER_SIZE;
imgbuf = (BYTE*)realloc(imgbuf,imgbufsize);
}
if(!downloadSize && ret == 1)
done=true;
break;
}
default:
return 0;
}
return 1;
}
static INT_PTR CALLBACK artDownloader(HWND hwndDlg, UINT uMsg, WPARAM wParam,LPARAM lParam)
{
static HWND m_child;
switch(uMsg)
{
case WM_INITDIALOG:
{
m_child = LPCreateDialogW(IDD_ARTDOWNLOADER_SCROLLHOST,hwndDlg,(WNDPROC)scrollChildHostProc);
SetWindowLong(hwndDlg,GWLP_USERDATA,lParam);
ArtParser * parser = (ArtParser *)lParam;
parser->hwndDlg = hwndDlg;
SetTimer(hwndDlg,0,50,NULL);
SetTimer(hwndDlg,1,50,NULL);
UpdateStatus(hwndDlg);
if(parser->data->showCancelAll) ShowWindow(GetDlgItem(hwndDlg,IDC_CANCELALL),SW_SHOWNA);
wchar_t old[100]=L"";
GetWindowTextW(hwndDlg,old,100);
wchar_t buf[256]=L"";
if(parser->data->artist && parser->data->artist[0] && parser->data->album && parser->data->album[0])
StringCchPrintfW(buf,256,L"%s: %s - %s",old,parser->data->artist,parser->data->album);
else if(parser->data->album && parser->data->album[0])
StringCchPrintfW(buf,256,L"%s: %s",old,parser->data->album);
else if(parser->data->artist && parser->data->artist[0])
StringCchPrintfW(buf,256,L"%s: %s",old,parser->data->artist);
if(buf[0])
SetWindowTextW(hwndDlg,buf);
SetWindowTextW(GetDlgItem(hwndDlg,IDC_SEARCHREFINE_ARTIST), parser->data->artist);
SetWindowTextW(GetDlgItem(hwndDlg,IDC_SEARCHREFINE_ALBUM), parser->data->album);
wchar_t yearbuf[5]=L"";
_itow(parser->data->year,yearbuf,10);
SetWindowTextW(GetDlgItem(hwndDlg,IDC_SEARCHREFINE_YEAR), (parser->data->year?yearbuf:L""));
}
break;
case WM_SELECTED:
{
ArtParser * parser = GetParam(hwndDlg);
HWND selchild = (HWND)wParam;
ImgDownloader *d = (ImgDownloader *)lParam;
if(parser && d && d->imgbuf && d->imgbufused)
{
if (!AGAVE_API_AMGSUCKS || AGAVE_API_AMGSUCKS->WriteAlbumArt(d->imgbuf, d->imgbufused, &parser->data->imgData, &parser->data->imgDataLen) != 0)
{
void * img = WASABI_API_MEMMGR->sysMalloc(d->imgbufused);
memcpy(img,d->imgbuf,d->imgbufused);
parser->data->imgData = img;
parser->data->imgDataLen = d->imgbufused;
}
char * dot = strrchr(d->url,'.');
if(dot) lstrcpynW(parser->data->type,AutoWide(dot+1),10);
EndDialog(hwndDlg,0);
}
}
break;
case WM_UPDATESTATUS:
{
ArtParser * parser = GetParam(hwndDlg);
if(parser)
{
wchar_t s[100] = {0};
if(parser->error) getStringW(IDS_ART_SEARCH_FAILED,s,100);
else if(parser->doneXML) getStringW(IDS_ART_SEARCH_FINISHED,s,100);
else getStringW(IDS_ART_SEARCH_PROGRESS,s,100);
wchar_t buf[512] = {0};
StringCchPrintfW(buf,512,getStringW(IDS_ART_SEARCH_STATUS,0,0),s,parser->numImages,parser->curImage - parser->failedImages,parser->failedImages,parser->numImages - parser->curImage);
SetDlgItemTextW(hwndDlg,IDC_STATUS,buf);
}
}
break;
case WM_TIMER:
{
ArtParser * parser = GetParam(hwndDlg);
switch(wParam)
{
case 0:
if(parser && !parser->run())
KillTimer(hwndDlg,0);
break;
case 1:
if(parser && parser->imgDownload.size())
{
ImgDownloader *d = parser->imgDownload.at(0);
if(d->error)
{
parser->failedImages++;
parser->curImage++;
parser->imgDownload.eraseindex(0);
delete d;
UpdateStatus(hwndDlg);
}
else if(d->done)
{
parser->curImage++;
parser->imgDownload.eraseindex(0);
AddImageToList(m_child,d);
UpdateStatus(hwndDlg);
}
else d->run();
}
if(parser->error || parser->doneXML)
{
if(parser->curImage == parser->numImages)
{
KillTimer(hwndDlg,1);
if(!parser->numImages)
{
wchar_t title[100] = {0};
getStringW(IDS_ART_SEARCH_NOT_FOUND_TITLE,title,100);
MessageBoxW(hwndDlg,getStringW(IDS_ART_SEARCH_NOT_FOUND,0,0),title,0);
//EndDialog(hwndDlg,-1); //CUT, since we have now a custom search
}
EnableWindow(GetDlgItem(hwndDlg, IDC_SEARCHAGAIN), true);
}
}
break;
}
}
break;
case WM_DESTROY:
{
SetWindowLong(hwndDlg,GWLP_USERDATA,0);
}
break;
case WM_CLOSE:
EndDialog(hwndDlg,-1);
break;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDCANCEL:
EndDialog(hwndDlg,-1);
break;
case IDC_CANCELALL:
EndDialog(hwndDlg,-2);
break;
case IDC_SEARCHAGAIN: // copy text field params to parser
ArtParser * parser = GetParam(hwndDlg);
// Let the first search process finish
if (!(parser->doneXML || parser->error))
{
//TODO change this string
MessageBoxW(hwndDlg, L"Please wait till the current retrieval is finished", L"", 0);
return 0;
}
GetDlgItemTextW(hwndDlg,IDC_SEARCHREFINE_ALBUM, tmp_album, 512);
GetDlgItemTextW(hwndDlg,IDC_SEARCHREFINE_ARTIST, tmp_artist, 512);
GetDlgItemTextW(hwndDlg,IDC_SEARCHREFINE_YEAR, tmp_year, 5);
// End Dialog w/ returning 2: indicates that teh users wants to start a custom search
EndDialog(hwndDlg,2);
break;
}
break;
}
return 0;
}
// from FileInfo.cpp
extern HBITMAP getBitmap(ARGB32 * data, int dw, int dh, int targetW, int targetH, HWND parent);
extern ARGB32 * decompressImage(const void *data, int datalen, int * dataW, int * dataH);
HBITMAP loadImage(const void * data, int datalen, int w, int h, HWND parent, int *dw=0, int *dh=0)
{
int dataW=0, dataH=0;
ARGB32* ret = decompressImage(data,datalen,&dataW,&dataH);
if(dw) *dw = dataW;
if(dh) *dh = dataH;
if(!ret) return 0;
HBITMAP r = getBitmap(ret, dataW, dataH, w, h, parent);
WASABI_API_MEMMGR->sysFree(ret);
return r;
}
#define GetDlgParent(hwndDlg) GetParent(GetParent(GetParent(hwndDlg)))
static INT_PTR CALLBACK imageProc(HWND hwndDlg, UINT uMsg, WPARAM wParam,LPARAM lParam)
{
switch(uMsg)
{
case WM_INITDIALOG:
{
SetWindowLong(hwndDlg,GWLP_USERDATA,lParam);
ImgDownloader *d = (ImgDownloader *)lParam;
int w=0,h=0;
HBITMAP bm = loadImage(d->imgbuf,d->imgbufused,140,140,hwndDlg,&w,&h);
SendDlgItemMessage(hwndDlg,IDC_IMAGE,STM_SETIMAGE,IMAGE_BITMAP,(LPARAM)bm);
wchar_t buf[1024] = {0};
StringCchPrintfW(buf,1024,L"%s: %dx%d (%d kB)",d->desc,w,h,(d->imgbufused/1024));
SetDlgItemTextW(hwndDlg,IDC_IMGTEXT,buf);
}
break;
case WM_DESTROY:
{
ImgDownloader *d = GetParamC(hwndDlg);
SetWindowLong(hwndDlg,GWLP_USERDATA,0);
if(d) delete d;
HBITMAP bm = (HBITMAP)SendDlgItemMessage(hwndDlg,IDC_IMAGE,STM_SETIMAGE,IMAGE_BITMAP,0);
if(bm) DeleteObject(bm);
}
break;
case WM_COMMAND:
if(LOWORD(wParam) != IDC_SELECT)
break;
// else run through
case WM_LBUTTONDBLCLK:
SendMessageW(GetDlgParent(hwndDlg),WM_SELECTED,(WPARAM)hwndDlg,(LPARAM)GetParamC(hwndDlg));
break;
}
return 0;
}
// scroll shit, nothing interesting is happening down here...
static INT_PTR CALLBACK scrollChildHostProc(HWND hwndDlg, UINT uMsg, WPARAM wParam,LPARAM lParam)
{
//static HWND m_child;
switch(uMsg)
{
case WM_INITDIALOG:
{
RECT r;
HWND hw = GetParent(hwndDlg);
GetWindowRect(GetDlgItem(hw,IDC_PLACEHOLDER),&r);
ScreenToClient(hw,(LPPOINT)&r);
ScreenToClient(hw,((LPPOINT)&r)+1);
SetWindowPos(hwndDlg,NULL,r.left,r.top,r.right-r.left,r.bottom-r.top,SWP_NOZORDER|SWP_NOACTIVATE);
LPCreateDialogW(IDD_ARTDOWNLOADER_SCROLLCHILD,hwndDlg,(WNDPROC)scrollChildProc);
SCROLLINFO si={sizeof(si),SIF_RANGE|SIF_PAGE,0};
si.nPage = (r.right - r.left);
SetScrollInfo(hwndDlg,SB_HORZ,&si,TRUE);
}
break;
case WM_ADDCHILD:
{
HWND m_child = GetWindow(hwndDlg,GW_CHILD);
HWND newChild = (HWND)SendMessageW(m_child,uMsg,wParam,lParam);
RECT r,r2;
GetClientRect(m_child,&r);
GetClientRect(hwndDlg,&r2);
SCROLLINFO si={sizeof(si),SIF_RANGE|SIF_PAGE,0};
si.nMin = 0;
si.nMax = (r.right - r.left);
si.nPage = (r2.right - r2.left);
if(si.nMax < 0) si.nMax = 0;
SetScrollInfo(hwndDlg,SB_HORZ,&si,TRUE);
return (INT_PTR)newChild;
}
break;
case WM_HSCROLL:
{
HWND m_child = GetWindow(hwndDlg,GW_CHILD);
int v=0;
RECT r;
RECT r2;
GetClientRect(hwndDlg,&r2);
GetClientRect(m_child,&r);
int action = LOWORD(wParam);
if (r2.right < r.right) {
if (action == SB_THUMBPOSITION || action == SB_THUMBTRACK) {
SCROLLINFO si={sizeof(si),SIF_TRACKPOS|SIF_POS};
GetScrollInfo(hwndDlg,SB_HORZ,&si);
v=si.nTrackPos;
}
else if (action == SB_TOP)
v=0;
else if (action == SB_BOTTOM)
v=r.right-r2.right;
else if (action == SB_PAGEDOWN || action == SB_LINEDOWN) {
SCROLLINFO si={sizeof(si),SIF_TRACKPOS|SIF_POS};
GetScrollInfo(hwndDlg,SB_HORZ,&si);
if(action == SB_LINEDOWN)
v=si.nPos + (r2.right)/10;
else
v=si.nPos + r2.right;
if (v > r.right-r2.right) v=r.right-r2.right;
}
else if (action == SB_PAGEUP || action == SB_LINEUP) {
SCROLLINFO si={sizeof(si),SIF_TRACKPOS|SIF_POS};
GetScrollInfo(hwndDlg,SB_HORZ,&si);
if(action == SB_LINEUP)
v=si.nPos - (r2.right)/10;
else
v=si.nPos - r2.right;
if (v < 0) v=0;
}
else return 0;
SetScrollPos(hwndDlg,SB_HORZ,v,!(action == SB_THUMBPOSITION || action == SB_THUMBTRACK));
SetWindowPos(m_child,NULL,0-v,0,0,0,SWP_NOSIZE|SWP_NOZORDER|SWP_NOACTIVATE);
}
else {
SetScrollPos(hwndDlg,SB_HORZ,0,!(action == SB_THUMBPOSITION || action == SB_THUMBTRACK));
SetWindowPos(m_child,NULL,0,0,0,0,SWP_NOSIZE|SWP_NOZORDER|SWP_NOACTIVATE);
}
}
break;
}
return 0;
}
static INT_PTR CALLBACK scrollChildProc(HWND hwndDlg, UINT uMsg, WPARAM wParam,LPARAM lParam)
{
switch(uMsg)
{
case WM_INITDIALOG:
{
RECT r;
GetClientRect(hwndDlg,&r);
SetWindowPos(hwndDlg,0,0,0,0,r.bottom,SWP_NOMOVE|SWP_NOZORDER|SWP_NOACTIVATE);
}
break;
case WM_ADDCHILD:
{
HWND newChild = LPCreateDialogParamW(IDD_ARTDOWNLOADER_IMAGE,hwndDlg,imageProc,lParam);
RECT r,r2;
GetClientRect(hwndDlg,&r);
GetClientRect(newChild,&r2);
SetWindowPos(hwndDlg,0,0,0,r.right + r2.right,r.bottom,SWP_NOMOVE|SWP_NOZORDER|SWP_NOACTIVATE);
SetWindowPos(newChild,0,r.right,0,0,0,SWP_NOSIZE|SWP_NOZORDER|SWP_NOACTIVATE);
ShowWindow(newChild,SW_SHOWNA);
return (INT_PTR)newChild;
}
break;
}
return 0;
}
#endif #endif

BIN
Src/codesign/CapiCom.Dll Normal file

Binary file not shown.

View file

@ -0,0 +1,38 @@
-----BEGIN CERTIFICATE-----
MIIGsDCCBJigAwIBAgIQCK1AsmDSnEyfXs2pvZOu2TANBgkqhkiG9w0BAQwFADBi
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3Qg
RzQwHhcNMjEwNDI5MDAwMDAwWhcNMzYwNDI4MjM1OTU5WjBpMQswCQYDVQQGEwJV
UzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xQTA/BgNVBAMTOERpZ2lDZXJ0IFRy
dXN0ZWQgRzQgQ29kZSBTaWduaW5nIFJTQTQwOTYgU0hBMzg0IDIwMjEgQ0ExMIIC
IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA1bQvQtAorXi3XdU5WRuxiEL1
M4zrPYGXcMW7xIUmMJ+kjmjYXPXrNCQH4UtP03hD9BfXHtr50tVnGlJPDqFX/IiZ
wZHMgQM+TXAkZLON4gh9NH1MgFcSa0OamfLFOx/y78tHWhOmTLMBICXzENOLsvsI
8IrgnQnAZaf6mIBJNYc9URnokCF4RS6hnyzhGMIazMXuk0lwQjKP+8bqHPNlaJGi
TUyCEUhSaN4QvRRXXegYE2XFf7JPhSxIpFaENdb5LpyqABXRN/4aBpTCfMjqGzLm
ysL0p6MDDnSlrzm2q2AS4+jWufcx4dyt5Big2MEjR0ezoQ9uo6ttmAaDG7dqZy3S
vUQakhCBj7A7CdfHmzJawv9qYFSLScGT7eG0XOBv6yb5jNWy+TgQ5urOkfW+0/tv
k2E0XLyTRSiDNipmKF+wc86LJiUGsoPUXPYVGUztYuBeM/Lo6OwKp7ADK5GyNnm+
960IHnWmZcy740hQ83eRGv7bUKJGyGFYmPV8AhY8gyitOYbs1LcNU9D4R+Z1MI3s
MJN2FKZbS110YU0/EpF23r9Yy3IQKUHw1cVtJnZoEUETWJrcJisB9IlNWdt4z4FK
PkBHX8mBUHOFECMhWWCKZFTBzCEa6DgZfGYczXg4RTCZT/9jT0y7qg0IU0F8WD1H
s/q27IwyCQLMbDwMVhECAwEAAaOCAVkwggFVMBIGA1UdEwEB/wQIMAYBAf8CAQAw
HQYDVR0OBBYEFGg34Ou2O/hfEYb7/mF7CIhl9E5CMB8GA1UdIwQYMBaAFOzX44LS
cV1kTN8uZz/nupiuHA9PMA4GA1UdDwEB/wQEAwIBhjATBgNVHSUEDDAKBggrBgEF
BQcDAzB3BggrBgEFBQcBAQRrMGkwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRp
Z2ljZXJ0LmNvbTBBBggrBgEFBQcwAoY1aHR0cDovL2NhY2VydHMuZGlnaWNlcnQu
Y29tL0RpZ2lDZXJ0VHJ1c3RlZFJvb3RHNC5jcnQwQwYDVR0fBDwwOjA4oDagNIYy
aHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZFJvb3RHNC5j
cmwwHAYDVR0gBBUwEzAHBgVngQwBAzAIBgZngQwBBAEwDQYJKoZIhvcNAQEMBQAD
ggIBADojRD2NCHbuj7w6mdNW4AIapfhINPMstuZ0ZveUcrEAyq9sMCcTEp6QRJ9L
/Z6jfCbVN7w6XUhtldU/SfQnuxaBRVD9nL22heB2fjdxyyL3WqqQz/WTauPrINHV
UHmImoqKwba9oUgYftzYgBoRGRjNYZmBVvbJ43bnxOQbX0P4PpT/djk9ntSZz0rd
KOtfJqGVWEjVGv7XJz/9kNF2ht0csGBc8w2o7uCJob054ThO2m67Np375SFTWsPK
6Wrxoj7bQ7gzyE84FJKZ9d3OVG3ZXQIUH0AzfAPilbLCIXVzUstG2MQ0HKKlS43N
b3Y3LIU/Gs4m6Ri+kAewQ3+ViCCCcPDMyu/9KTVcH4k4Vfc3iosJocsL6TEa/y4Z
XDlx4b6cpwoG1iZnt5LmTl/eeqxJzy6kdJKt2zyknIYf48FWGysj/4+16oh7cGvm
oLr9Oj9FpsToFpFSi0HASIRLlk2rREDjjfAVKM7t8RhWByovEMQMCGQ8M4+uKIw8
y4+ICw2/O/TOHnuO77Xry7fwdxPm5yg/rBKupS8ibEH5glwVZsxsDsrFhsP2JjMM
B0ug0wcCampAMEhLNKhRILutG4UI4lkNbcoFUCvqShyepf2gpx8GdOfy1lKQ/a+F
SCH5Vzu0nAPthkX0tGFuv2jiJmCG6sivqf6UHedjGzqGVnhO
-----END CERTIFICATE-----

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
<html><head><meta http-equiv="Content-Type" content="text/html; charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div class=""><div><blockquote type="cite" class=""><div class=""></div></blockquote></div><br class=""></div></body></html>

View file

@ -0,0 +1,32 @@
-----BEGIN CERTIFICATE-----
MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBi
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3Qg
RzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBiMQswCQYDVQQGEwJV
UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu
Y29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0GCSqG
SIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3y
ithZwuEppz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1If
xp4VpX6+n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDV
ySAdYyktzuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfISKhmV1efVFiO
DCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jHtrHEtWoYOAMQ
jdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6MUSaM0C/
CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCi
EhtmmnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADM
fRyVw4/3IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QY
uKZ3AeEPlAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXK
chYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4KJpn15GkvmB0t
9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB
hjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD
ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2
SV1EY+CtnJYYZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd
+SeuMIW59mdNOj6PWTkiU0TryF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWc
fFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy7zBZLq7gcfJW5GqXb5JQbZaNaHqa
sjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iahixTXTBmyUEFxPT9N
cCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN5r5N
0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie
4u1Ki7wb/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mI
r/OSmbaz5mEP0oUA51Aa5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1
/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tKG48BtieVU+i2iW1bvGjUI+iLUaJW+fCm
gKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP82Z+
-----END CERTIFICATE-----

View file

@ -0,0 +1,41 @@
-----BEGIN CERTIFICATE-----
MIIHRDCCBSygAwIBAgIQBpNVvDvQCWBPv1q9mt/1ADANBgkqhkiG9w0BAQsFADBp
MQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xQTA/BgNVBAMT
OERpZ2lDZXJ0IFRydXN0ZWQgRzQgQ29kZSBTaWduaW5nIFJTQTQwOTYgU0hBMzg0
IDIwMjEgQ0ExMB4XDTIyMDYxMDAwMDAwMFoXDTI0MDYxMjIzNTk1OVowSTELMAkG
A1UEBhMCQkUxEjAQBgNVBAcTCUJydXhlbGxlczESMBAGA1UEChMJV2luYW1wIFNB
MRIwEAYDVQQDEwlXaW5hbXAgU0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIK
AoICAQD4sc3Vvf1YOujnYGodelz2YbBaf+G037IbzRiCvlTUAPaqaiNmBBlgKOfn
0Ui8SkmRABQ06WDOCJYxCnugstvhg1vs/E7AxxG2rEgZl/NmB84ingOlCcE6f2WH
cttxSVsrjxbRFFQIkvj+v3R12NTWQzg4HGwyXS8VtB22On2gVjmsdeuMiUuDaXRx
JCVm3NIYz7LJAdpnl9LkJOwVuCyifGUcLoJVZJgz8QcCGg038OLL17XVriAE+i46
r0caNeZwFuAG2AVaRO7ggzkjA5DeFlB9vBqbJAbi9dQGkXGTx/CGR0n09EkF5uyP
A2a7SodAYijIluiZLgEDOVTKJZLxbX4cdTCyHrSFq231TMdbpGj/+3Hc5BHpymkN
I2Ju8sf9SfzuR2s6F77wdobmrR+8jVEQAYw82FB+rL4CuW8Kg0dr/LHYdv53jbrr
f9JSB8DqvJ7zjS40eIIEXq2zWdt7qzw6TiUo/mkr1aSqXhYQhotuossovEs8IePP
Sxatw5olw6kokY8RrIi7yindv48M9EC4vy9l8qx1+7+G7tBOTnGTxHBvgG/L3PW6
NDb44iDSRmFVJRb8QxCQ0L2Ywz8VdkHWoCr7dPGIY6pdy0aHKRrMZeZmaB2A72lD
sN4cMjXfFNPD5x53HA9Vf333Wv4KANINSL4af7KOa+9LRYh4dwIDAQABo4ICBjCC
AgIwHwYDVR0jBBgwFoAUaDfg67Y7+F8Rhvv+YXsIiGX0TkIwHQYDVR0OBBYEFELu
dm9oHqV42XGzPaxAv/7pJey9MA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggr
BgEFBQcDAzCBtQYDVR0fBIGtMIGqMFOgUaBPhk1odHRwOi8vY3JsMy5kaWdpY2Vy
dC5jb20vRGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmluZ1JTQTQwOTZTSEEzODQy
MDIxQ0ExLmNybDBToFGgT4ZNaHR0cDovL2NybDQuZGlnaWNlcnQuY29tL0RpZ2lD
ZXJ0VHJ1c3RlZEc0Q29kZVNpZ25pbmdSU0E0MDk2U0hBMzg0MjAyMUNBMS5jcmww
PgYDVR0gBDcwNTAzBgZngQwBBAEwKTAnBggrBgEFBQcCARYbaHR0cDovL3d3dy5k
aWdpY2VydC5jb20vQ1BTMIGUBggrBgEFBQcBAQSBhzCBhDAkBggrBgEFBQcwAYYY
aHR0cDovL29jc3AuZGlnaWNlcnQuY29tMFwGCCsGAQUFBzAChlBodHRwOi8vY2Fj
ZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmluZ1JT
QTQwOTZTSEEzODQyMDIxQ0ExLmNydDAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEB
CwUAA4ICAQAiXaobHW5Lm7gafYUDOeXJvkieNAit/CD1sOvd1AwlTej2X5JvuzQL
6pGuFPmHiTvzPo9bMZ7/qm01UQnRn3/x0nkCYURXzmot///lZ94uQKnFT/6mHxcU
ZtZa9qG7EyieVSrmaI1pH5NdQroPL9gmscewC9VhJZnMoUhAeaOzzpjI24lakOw4
h22V88BHRcxkNUUH5qV5fDhHhiiGvuqGO4Yi6bCm8TuC/AEVt3KsrytnRKoc9Z+s
klbA7G9hPgcmYdcoHFNAc9XmZLo7tbffjqokRmytYjTZgw2s4qUO49Zt7+J3KJRt
WduuqXNpSLW6bkuDyQBL9NitkW50R3Ub0gEr0xUYwD0IqwWj7DDxCyxwtP4OyD4r
T/Py9rTYSLP+XGgb4MgIN/sMKlVJf8SN5P2DzNuX+hBZyFeAGNyFhOSKydXaeaxA
mgNzZb25JJ7gPnb/6fJkl+8mh64RKgDZk5y79MRukxecwBaDOetYAJ9AFvyeLZoE
JzbCtADu4d/IAC8ZU38ROWXec9aJE/YByXfhyNjDMQsZIY0Av0UOuWMzunnISycn
q8ZTNQXWhwuOAZRVecApc+cwwJKWJJuubrdCw6dC1p+D8Qc/SrD/jmHw2XWYI9l5
Exm0ABFlOzOMyUqSAxXwymxugJMFUr4r7/GM2qFUSTkQf/e2pUPIbg==
-----END CERTIFICATE-----

Binary file not shown.

View file

@ -0,0 +1,30 @@
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,FFEF139B23999677
uWGiiUFqEd5AafE4FCrJmBUADd/bJT7rVfTXCY5BxQFkXntpODQ1W3qcZIxPwmFg
SjFdL8DPI1wFyw6VF4aX58JNnAx0TQZnNWZ/zg+vBfMtd9BO6uixl2qLVvupkKs7
HYDJlAAP9hmHbDj9K2EOUS+EpBURq5m3E/XMY5nhtTcsYkfzmqXPCOKbL8pvKRCf
qRWim4F+MqBKzgvi7aHuBO5KH4gQ2IKEF181AyUsFmSp1wvxF01NiT25im9DOQFW
YFRuLwiD85/8YRF1fHB5+uEuxOeslUC7cb0ypru1MjvqRxqFxlG3+uZeBG1YHyuD
7BPMeK3AuPQkVpCqGimtEX0km2Gi9qAMP+bYd3NGzT7DGKP2ZpZ8SnCETrT5pPfb
/irkNe+blx21IU5hzbw9DDXUqi8zm2jIcn2EX+hdvb3g0j2FqQ+7+m1ASu5p89vc
3DEQZ+JF47Ay/5GefztSFoIlLjTiZYBOK+NPkoR7cUY8f4r3hNLLuyzN8/idPFoi
o+/tvNwd06CSxwIK0Ks6BMcCXG9zREgLsSVLBVjOFVJ/Wr/NhnQga65/76UsqxTF
ZaY+Q6FTz8ggsbkjQEEGlSDfVdYTAX1MfgGbpVPmvufkAl3CoefQTT4hCs7s0TGW
YKfjNfqqFAwJW1UZkAYm21YKIlCSmGux0pOd8S6S3kNYdRMn5QppyqpcnRZcMBBw
mPYwUqjX1/Fb5myw77Gstt1Cnx4+dithcjeBq5DIsci4jUhf4e9ujHf96OaWKK01
/EsNa54hT1CQRDHvdVF0tlVJdUyn8NonN7tB4+rUS6YJRdxthHhDfPsrtg9o5e8N
yZxunfGSey8dithZHA11nXb6J5rJcsRnCZUzhq0nkYguxHSTgkEqLZcbl5WigkgF
EzUU4di8I4m5vSy6OLM7inKAomJD11cpV+kBbUzOXoVo6v8Gz3KvES/UpN0I+Wgh
xs7xRgg/Kx6/DG3Jwv71ITCYytZH4mY1eplUaJuIv11BPhc132adVpcI31A459uG
eN9UqEfZJfT0YTNVCefErCmuRu/iIh/XndVFKd1N/WsUR58H3+JGaArss66KbvXR
CT4Fkyc5+rQENc2daAH2tAeeLIheMmEyKmfXefje7tiaPD6+lgPISoNlGo0cxyQ7
YGVneVmpDpNZ/s6kV5BvxawkH7WGzt0gDqMmAyawK2kBPuTvG0+uYXAfEJjdWhAH
E87Xu13GtVOyuJD37RojJbned6xlwuW0oLXSb5IO677lN+cyyqjNy2VG7l3MYL+b
Bd2/LVWH97lNLy5Fsx8DmnjhPO8AIxwisxS0FxTTy89WQCjItPqWHH1+2yiMHcTR
fq6SqU1tw8GiBRBQtCeVNxVAxzA3tXM83FxhFhI+WmHaNi4QB6IXdgLaKQ1IhZ4G
g5gI0erPUSJ2k7nqGaynnCVwtHQA32s/XsHrflyO34X18+oC3DOFMKw31qnBLa+G
ljbJ69NUcIRhPQ8pYqT68heOP06VysiR9ndQ9CW/VaF+LEN+oIbE7p3RbpY3RWLY
IYwSbiaF0sGiwjtLh3m2Ji0w9K2AZpTIcLNq43tQ6VcJsvKCa1xpomj0yJI02iSr
-----END RSA PRIVATE KEY-----

BIN
Src/codesign/Winamp_SA.pfx Normal file

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

21
Src/codesign/sign.cmd Normal file
View file

@ -0,0 +1,21 @@
@echo off
REM set SIGNNAME=Winamp %WINAMP_VERSION_MAJOR%.%WINAMP_VERSION_MINOR%%WINAMP_VERSION_MINOR_SECOND% %%~j
signtool.exe sign /f Winamp_SA.pfx /p WaWa!_59_!WaWa /t http://timestamp.digicert.com /du "http://www.winamp.com" /d "Winamp 5.9" /v Winamp59_9999_final_full_en-us.exe
REM ___________________________________________________________________
REM if not defined WAPROJECTS set WAPROJECTS=c:\projects
REM if not defined CURSANDBOX set CURSANDBOX=%WAPROJECTS%
REM set KEYFILE=%CURSANDBOX%\codesign\WinampSA.pfx
REM %CURSANDBOX%\codesign\signtool.exe sign /f %KEYFILE% /p !Wa!Wa!5_6_7_8!Wa!Wa! /d %1 /du "http://www.winamp.com" /t http://timestamp.comodoca.com/authenticode /v %2
SET errCode=%ERRORLEVEL%
IF %errCode% NEQ 0 @echo SimpleSign Failed
pause /B %errCode%
exit

View file

@ -0,0 +1,11 @@
-----BEGIN PGP SIGNATURE-----
iQEzBAEBCAAdFiEE6VpbjcQyp+t7ByJYRGjUQigxlBsFAmKjGNYACgkQRGjUQigx
lBsmaggAvwHvdssyFg8Ro9UI06qtsDJvwAmsjQJdH+++OayA3a1XSa6vyGibrbA4
tRfFPn8RYmfmbd0jlKwjFWCdjTTP+b11DjDrkIv3RVz0nQmLX0AaQHzZdoWGodpZ
JgTEhSxTsY17ss6CzYPhP+F6LQ7S96GbA6fWRx0E/t6v8Kqnl6L1rSfoV6U9/873
5LaOvHsk2BPoL9w+mp6BdITyVoK2jaRPbE+2eDTn1VW4w4C6Qi4mV3VRYN5dZVjj
sGmRSsIz2MW8KsHDA9odBjOfdHlRbrSl9cjPo4fmEpxVI8yGtfCOKsRjnKCMcWpG
NZ5RaNE3FfD5En0FMvd/owkBqp6d+w==
=9kUo
-----END PGP SIGNATURE-----

Binary file not shown.

BIN
Src/codesign/signcode.exe Normal file

Binary file not shown.

BIN
Src/codesign/signtool.exe Normal file

Binary file not shown.

Binary file not shown.

108
Src/codesign/winamp_sa.p7b Normal file
View file

@ -0,0 +1,108 @@
-----BEGIN PKCS7-----
MIITuwYJKoZIhvcNAQcCoIITrDCCE6gCAQExADALBgkqhkiG9w0BBwGgghOQMIIH
RDCCBSygAwIBAgIQCNS/WlKcclmX4PbFJkldLzANBgkqhkiG9w0BAQsFADBpMQsw
CQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xQTA/BgNVBAMTOERp
Z2lDZXJ0IFRydXN0ZWQgRzQgQ29kZSBTaWduaW5nIFJTQTQwOTYgU0hBMzg0IDIw
MjEgQ0ExMB4XDTIyMDYxNTAwMDAwMFoXDTI0MDYxMjIzNTk1OVowSTELMAkGA1UE
BhMCQkUxEjAQBgNVBAcTCUJydXhlbGxlczESMBAGA1UEChMJV2luYW1wIFNBMRIw
EAYDVQQDEwlXaW5hbXAgU0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
AQDX5OYi3zspRs2tAMPBeTW2jabo4ttN0/3a7VFxYDrZq3c6i6LhEhWZhDpdsiAl
cM/uM+YepdVOzRcm14IiL6GwagA1fZdgJoiNETSj4KDuxzZowUqDN0L13Nv2xI2k
ZJpZ/el6aItpdC4ulidR6cRz9E83IEqruDCQyh8/6bO4WYboWhXltm8GE9zkw6dk
q5UbnQKZdEMttiP+U5J5Ue+erwqaMn0T8U9HShA4zRDE5eKcwig3oIo7mRLG5W5o
YlzRSdPnhdpN7cw+ahoHsZzwyWVCsi7sZrkNc0vd4wwCBDWsgU3TG5+EQAZJc5zi
cLOSl/qiTcAuYEVmIHD7yerGLV8YY6usMLMXhwhT7CJ1DMCE7vp7mLNyOhxG5wsN
cysankU4ylYXdZrIKTIQkMd0hbjlAkMKodVt0/lODuxrfY9eHaue72Pz8LMlJHN3
5C+KTxVeoL0+8b1OGqhDxcWsleqSIXREz+NEfN6EGwwUt+3txXiumeVX2YMWDeQd
khazi2s5TkCExYRaKVJAkBAm/VqBu6bHyo0L1LNfHfdnZPre6wrhzEcChOcgs4Ni
D6gT9Shm9MyOMJ1yJuZcvgnPBC9FnPVcgeByTQI/2u0MPYVDclcQkei9FwW4sz16
vCnEqtysYOX64fpvBvB7IVWz8cWbVX0Lalk5m7MIinF+6QIDAQABo4ICBjCCAgIw
HwYDVR0jBBgwFoAUaDfg67Y7+F8Rhvv+YXsIiGX0TkIwHQYDVR0OBBYEFHRlJwsS
WBHjeyAXymfNFGh6R2rmMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEF
BQcDAzCBtQYDVR0fBIGtMIGqMFOgUaBPhk1odHRwOi8vY3JsMy5kaWdpY2VydC5j
b20vRGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmluZ1JTQTQwOTZTSEEzODQyMDIx
Q0ExLmNybDBToFGgT4ZNaHR0cDovL2NybDQuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0
VHJ1c3RlZEc0Q29kZVNpZ25pbmdSU0E0MDk2U0hBMzg0MjAyMUNBMS5jcmwwPgYD
VR0gBDcwNTAzBgZngQwBBAEwKTAnBggrBgEFBQcCARYbaHR0cDovL3d3dy5kaWdp
Y2VydC5jb20vQ1BTMIGUBggrBgEFBQcBAQSBhzCBhDAkBggrBgEFBQcwAYYYaHR0
cDovL29jc3AuZGlnaWNlcnQuY29tMFwGCCsGAQUFBzAChlBodHRwOi8vY2FjZXJ0
cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmluZ1JTQTQw
OTZTSEEzODQyMDIxQ0ExLmNydDAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBCwUA
A4ICAQDSxJbkRf9a9TldRN7TD7PEupDeVN1OEKjRCdA+lH9eSgaeJ/Kol8KJ6nnJ
jMAQjnNmysyGyt7FXWGWA3DpLP4dfg46LNVhHVlInWTfqs2ospy2UOAbQnA8Dyw1
1shSVesOCGURTkaDe41VMClg9yS02rPivnNggPmj6v8TNW3hizjVyqP7MNTl4EeC
f7hvfZx/zpGEDKAiSeil74NJJms/ITLeH4Z5bQCz/b5nMtIMOWX+nOsbVwieWrgr
tG/S4CM/YHBq1c4PLcPk4/CA+9MF+PBwjOu4d9nHowKUeR+sEl6TyYMZ27c8AP9w
OIlJslj2553w7sAkxZ1fvKPlk4StDxdpd3YxnWVRQX5OcDuBi40WHaqPEDm055YH
RQh1casTukLsIXaQhrC/S5ov01uMimenVIXn9A/M4WzZ5ICl3JXNM7HldJ172AjW
83PlCiyjxEZtNRO4icZznWfpFbEFy2kwdE3JQlcPLTDxlIeft/p6NqnISwIgbIVz
9SCeABFQQQJDwb1yURw7Cifl4f88yNVfyS88OIvXB6E10JsERHe0Z4mMR7tm8tvk
7nEzITigyWVoSmntIn/PhphNS5LihnIyNlqHtx8RKBpMHoofEoli5nZF4vy8Vd4L
qI8K+bBEuk/KM2FVFawRs0xywxd8P5xQwx4XLQpAhUXnPlDbgzCCBrAwggSYoAMC
AQICEAitQLJg0pxMn17Nqb2TrtkwDQYJKoZIhvcNAQEMBQAwYjELMAkGA1UEBhMC
VVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3LmRpZ2ljZXJ0
LmNvbTEhMB8GA1UEAxMYRGlnaUNlcnQgVHJ1c3RlZCBSb290IEc0MB4XDTIxMDQy
OTAwMDAwMFoXDTM2MDQyODIzNTk1OVowaTELMAkGA1UEBhMCVVMxFzAVBgNVBAoT
DkRpZ2lDZXJ0LCBJbmMuMUEwPwYDVQQDEzhEaWdpQ2VydCBUcnVzdGVkIEc0IENv
ZGUgU2lnbmluZyBSU0E0MDk2IFNIQTM4NCAyMDIxIENBMTCCAiIwDQYJKoZIhvcN
AQEBBQADggIPADCCAgoCggIBANW0L0LQKK14t13VOVkbsYhC9TOM6z2Bl3DFu8SF
JjCfpI5o2Fz16zQkB+FLT9N4Q/QX1x7a+dLVZxpSTw6hV/yImcGRzIEDPk1wJGSz
jeIIfTR9TIBXEmtDmpnyxTsf8u/LR1oTpkyzASAl8xDTi7L7CPCK4J0JwGWn+piA
STWHPVEZ6JAheEUuoZ8s4RjCGszF7pNJcEIyj/vG6hzzZWiRok1MghFIUmjeEL0U
V13oGBNlxX+yT4UsSKRWhDXW+S6cqgAV0Tf+GgaUwnzI6hsy5srC9KejAw50pa85
tqtgEuPo1rn3MeHcreQYoNjBI0dHs6EPbqOrbZgGgxu3amct0r1EGpIQgY+wOwnX
x5syWsL/amBUi0nBk+3htFzgb+sm+YzVsvk4EObqzpH1vtP7b5NhNFy8k0UogzYq
ZihfsHPOiyYlBrKD1Fz2FRlM7WLgXjPy6OjsCqewAyuRsjZ5vvetCB51pmXMu+NI
UPN3kRr+21CiRshhWJj1fAIWPIMorTmG7NS3DVPQ+EfmdTCN7DCTdhSmW0tddGFN
PxKRdt6/WMtyEClB8NXFbSZ2aBFBE1ia3CYrAfSJTVnbeM+BSj5AR1/JgVBzhRAj
IVlgimRUwcwhGug4GXxmHM14OEUwmU//Y09Mu6oNCFNBfFg9R7P6tuyMMgkCzGw8
DFYRAgMBAAGjggFZMIIBVTASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRo
N+Drtjv4XxGG+/5hewiIZfROQjAfBgNVHSMEGDAWgBTs1+OC0nFdZEzfLmc/57qY
rhwPTzAOBgNVHQ8BAf8EBAMCAYYwEwYDVR0lBAwwCgYIKwYBBQUHAwMwdwYIKwYB
BQUHAQEEazBpMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20w
QQYIKwYBBQUHMAKGNWh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2Vy
dFRydXN0ZWRSb290RzQuY3J0MEMGA1UdHwQ8MDowOKA2oDSGMmh0dHA6Ly9jcmwz
LmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRSb290RzQuY3JsMBwGA1UdIAQV
MBMwBwYFZ4EMAQMwCAYGZ4EMAQQBMA0GCSqGSIb3DQEBDAUAA4ICAQA6I0Q9jQh2
7o+8OpnTVuACGqX4SDTzLLbmdGb3lHKxAMqvbDAnExKekESfS/2eo3wm1Te8Ol1I
bZXVP0n0J7sWgUVQ/Zy9toXgdn43ccsi91qqkM/1k2rj6yDR1VB5iJqKisG2vaFI
GH7c2IAaERkYzWGZgVb2yeN258TkG19D+D6U/3Y5PZ7Umc9K3SjrXyahlVhI1Rr+
1yc//ZDRdobdHLBgXPMNqO7giaG9OeE4Ttpuuzad++UhU1rDyulq8aI+20O4M8hP
OBSSmfXdzlRt2V0CFB9AM3wD4pWywiF1c1LLRtjENByipUuNzW92NyyFPxrOJukY
vpAHsEN/lYgggnDwzMrv/Sk1XB+JOFX3N4qLCaHLC+kxGv8uGVw5ceG+nKcKBtYm
Z7eS5k5f3nqsSc8upHSSrds8pJyGH+PBVhsrI/+PteqIe3Br5qC6/To/RabE6BaR
UotBwEiES5ZNq0RA443wFSjO7fEYVgcqLxDEDAhkPDOPriiMPMuPiAsNvzv0zh57
ju+168u38HcT5ucoP6wSrqUvImxB+YJcFWbMbA7KxYbD9iYzDAdLoNMHAmpqQDBI
SzSoUSC7rRuFCOJZDW3KBVAr6kocnqX9oKcfBnTn8tZSkP2vhUgh+Vc7tJwD7YZF
9LRhbr9o4iZghurIr6n+lB3nYxs6hlZ4TjCCBZAwggN4oAMCAQICEAWbG1eejiEy
4jkHvad3dVwwDQYJKoZIhvcNAQEMBQAwYjELMAkGA1UEBhMCVVMxFTATBgNVBAoT
DERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTEhMB8GA1UE
AxMYRGlnaUNlcnQgVHJ1c3RlZCBSb290IEc0MB4XDTEzMDgwMTEyMDAwMFoXDTM4
MDExNTEyMDAwMFowYjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IElu
YzEZMBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTEhMB8GA1UEAxMYRGlnaUNlcnQg
VHJ1c3RlZCBSb290IEc0MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
v+aQc2jeu+RdSjwwIjBpM+zCpyUuySE98orYWcLhKac9WKt2ms2uexuEDcQwH/Mb
pDgW61bGl20dq7J58soR0uRf1gU8Ug9SH8aeFaV+vp+pVxZZVXKvaJNwwrK6dZlq
czKU0RBEEC7fgvMHhOZ0O21x4i0MG+4g1ckgHWMpLc7sXk7Ik/ghYZs06wXGXuxb
Grzryc/NrDRAX7F6Zu53yEioZldXn1RYjgwrt0+nMNlW7sp7XeOtyU9e5TXnMcva
k17cjo+A2raRmECQecN4x7axxLVqGDgDEI3Y1DekLgV9iPWCPhCRcKtVgkEy19sE
cypukQF8IUzUvK4bA3VdeGbZOjFEmjNAvwjXWkmkwuapoGfdpCe8oU85tRFYF/ck
XEaPZPfBaYh2mHY9WV1CdoeJl2l6SPDgohIbZpp0yt5LHucOY67m1O+SkjqePdwA
5EUlibaaRBkrfsCUtNJhbesz2cXfSwQAzH0clcOP9yGyshG3u3/y1YxwLEFgqrFj
GESVGnZifvaAsPvoZKYz0YkH4b235kOkGLimdwHhD5QMIR2yVCkliWzlDlJRR3S+
Jqy2QXXeeqxfjT/JvNNBERJb5RBQ6zHFynIWIgnffEx1P2PsIV/EIFFrb7GrhotP
wtZFX50g/KEexcCPorF+CiaZ9eRpL5gdLfXZqbId5RsCAwEAAaNCMEAwDwYDVR0T
AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFOzX44LScV1kTN8u
Zz/nupiuHA9PMA0GCSqGSIb3DQEBDAUAA4ICAQC7Ydl9qWy+F8SRG8OhogCN42Ro
D1bPd65w+f2aSpm5yXhcDAxf5OYUKVYLNkldRGPgrZyWGGYbIw09eelta9ZU+NI8
wUNArh1Q9VL8kDu7mJlpa8fBp6hopCfcnfknrjCFufZnTTo+j1k5IlNE68hdA8rt
UHp9YiEKgMhzZtGgBWBf6KW0p6+o9201nHxaitaiOJnzeIv0TdIgC94E7oybR4Fy
DcAUMu8wWS6u4HHyVuRql2+SUG2WjWh6mrI2FHoG8iS5CRFQ1wixuIl6hCNhQinl
o82iIEHX0Zxk2eomoYsU10wZslBBcT0/TXAjhgxK3IHSzDKUhA0ICZccT8DuayB0
MNLgOTQQhSEVAQjoVTLecUnZKBdQTea+TdF1rNDK+0G4Q6Wq08MFRE8sNpvi+uJF
uCNTbAZvZ1V/RrVMP24oWnkm0qSoYpfSHuLtSou8G/1HSg3fZ2Z+sltB0Dvk9Dv0
BGPp78JUAFGgiirJznjM1eqHBBizzq9JiK/zkpm2s+ZhD9KFAOdQGuQblZ0Zobmc
sZuxAB7v0A9PQmzJCrzuQ/o6caXITSalNf2JXbyFYh0y0qArVO2aV8Hb+hDPGbeL
ShuPAbYnlVPotoltW7xo1CPoi1GiVvnwpoCg1h6zvA8PU3UpquoTd+TejIEhrQcQ
RxGthz0H0XW8z/NmfjEA
-----END PKCS7-----

View file

@ -1,6 +1,6 @@
@echo off @echo off
echo "Cleanup the environment..." echo "Cleanup the environment....."
IF EXIST "Src\external_dependencies\vcpkg" ( IF EXIST "Src\external_dependencies\vcpkg" (
echo Deleting "Src\external_dependencies\vcpkg" ... echo Deleting "Src\external_dependencies\vcpkg" ...
rmdir /S /Q "Src\external_dependencies\vcpkg" rmdir /S /Q "Src\external_dependencies\vcpkg"
@ -49,7 +49,7 @@ IF NOT EXIST .\vcpkg (
echo Patching ports... echo Patching ports...
xcopy /K /Y /H /C /I /E .\vcpkg-ports\* .\vcpkg\ports\* xcopy /K /Y /H /C /I /E .\vcpkg-ports\* .\vcpkg\ports\*
echo Installing packages... echo Installing packages....
cd .\vcpkg cd .\vcpkg
.\vcpkg install alac:x86-windows-static-md .\vcpkg install alac:x86-windows-static-md
.\vcpkg install expat:x86-windows-static-md expat:x86-windows-static .\vcpkg install expat:x86-windows-static-md expat:x86-windows-static

View file

@ -17,7 +17,7 @@ else:
VCPKG_PATH = Path(__file__).parent / 'vcpkg' VCPKG_PATH = Path(__file__).parent / 'vcpkg'
if len(sys.argv) > 3: if len(sys.argv) > 3:
print("the arguments after the second one are ignored") print("the argumnets after the second one are ignored")
if not VCPKG_PATH.exists(): if not VCPKG_PATH.exists():
@ -57,4 +57,4 @@ with open(PKG_VERSION_JSON_PATHNAME) as f:
versions_set = sorted(set(versions_list), reverse=True) versions_set = sorted(set(versions_list), reverse=True)
for version in versions_set: for version in versions_set:
print(version) print(version)