2002-08-02 10:01:35 +00:00
# include <windows.h>
2010-03-27 19:20:16 +00:00
# include <tchar.h>
2002-08-02 10:01:35 +00:00
# include <stdio.h>
2005-04-16 17:07:16 +00:00
# include <ctype.h>
2002-09-10 03:44:53 +00:00
# include <commctrl.h>
2010-03-27 19:20:16 +00:00
2010-03-30 17:50:08 +00:00
# ifdef _countof
# define COUNTOF _countof
2010-03-27 19:20:16 +00:00
# else
2010-03-30 17:50:08 +00:00
# define COUNTOF(a) (sizeof(a) / sizeof(a[0]))
2010-03-27 19:20:16 +00:00
# endif
2003-09-28 12:42:03 +00:00
2003-11-25 18:11:23 +00:00
/*
2010-03-24 17:22:56 +00:00
version 0.36
* Unicode support by Jim Park - - 08 / 27 / 2007
* This support allow Unicode * ZIP file * names but does NOT allow the archive
* to store Unicode files inside it . That ' s a ZLIB limitation that I can ' t
* do much about .
2003-11-25 18:11:23 +00:00
2005-11-12 17:19:46 +00:00
version 0.35
* drag & drop support
2005-11-08 21:49:07 +00:00
version 0.34
* preserve zip timestamps
2005-10-21 13:55:15 +00:00
version 0.33
* Added solid compression checkbox
2004-06-25 10:48:31 +00:00
version 0.32
* Fixed codepage problems
2003-11-25 18:11:23 +00:00
version 0.31 ( by Joost Verburg )
* LZMA compression support
* Fixed compression setting
version 0.31 ( by Joost Verburg )
* Based on header files
* Improved interface
* Modern UI support
* New script code
* Immproved folder detection
portions Copyright <EFBFBD> 1999 - 2001 Miguel Garrido ( mgarrido01 @ hotmail . com )
*/
2002-08-02 10:01:35 +00:00
extern " C "
{
# include "zlib/unzip.h"
} ;
# include "resource.h"
2010-03-24 17:22:56 +00:00
const TCHAR * g_errcaption = _T ( " Zip2Exe Error " ) ;
2002-08-02 10:01:35 +00:00
HINSTANCE g_hInstance ;
HWND g_hwnd ;
HANDLE g_hThread ;
2010-03-24 17:22:56 +00:00
TCHAR g_cmdline [ 1024 ] ;
2002-08-02 10:01:35 +00:00
int g_extracting ;
2003-11-25 18:11:23 +00:00
int g_compressor ;
2005-10-21 13:53:27 +00:00
int g_compressor_solid ;
2003-09-28 12:42:03 +00:00
int g_mui ;
2002-08-02 10:01:35 +00:00
int g_zipfile_size ;
2010-03-24 17:22:56 +00:00
TCHAR * g_options = _T ( " " ) ; //_T("/V3");
2002-08-02 10:01:35 +00:00
2004-02-06 17:36:48 +00:00
static BOOL CALLBACK DlgProc ( HWND hwndDlg , UINT uMsg , WPARAM wParam , LPARAM lParam ) ;
2002-08-02 10:01:35 +00:00
2010-03-24 17:22:56 +00:00
int WINAPI _tWinMain ( HINSTANCE hInstance , HINSTANCE hPrevInst ,
LPTSTR lpszCmdParam , int nCmdShow )
2002-08-02 10:01:35 +00:00
{
g_hInstance = hInstance ;
2002-09-10 03:44:53 +00:00
InitCommonControls ( ) ;
2002-08-02 10:01:35 +00:00
return DialogBox ( hInstance , MAKEINTRESOURCE ( IDD_DIALOG1 ) , GetDesktopWindow ( ) , DlgProc ) ;
}
2010-03-24 17:22:56 +00:00
TCHAR tempzip_path [ 1024 ] ;
2002-08-02 10:01:35 +00:00
int made ;
2010-03-24 17:22:56 +00:00
static void doRMDir ( TCHAR * buf )
2002-08-02 10:01:35 +00:00
{
HANDLE h ;
WIN32_FIND_DATA fd ;
2010-03-24 17:22:56 +00:00
TCHAR * p = buf ;
2002-08-02 10:01:35 +00:00
while ( * p ) p + + ;
2010-03-24 17:22:56 +00:00
lstrcpy ( p , _T ( " \\ *.* " ) ) ;
2002-08-02 10:01:35 +00:00
h = FindFirstFile ( buf , & fd ) ;
2004-02-06 17:36:48 +00:00
if ( h ! = INVALID_HANDLE_VALUE )
2002-08-02 10:01:35 +00:00
{
do
{
2010-03-24 17:22:56 +00:00
if ( fd . cFileName [ 0 ] ! = _T ( ' . ' ) | |
( fd . cFileName [ 1 ] ! = _T ( ' . ' ) & & fd . cFileName [ 1 ] ) )
2002-08-02 10:01:35 +00:00
{
lstrcpy ( p + 1 , fd . cFileName ) ;
2004-02-06 17:36:48 +00:00
if ( fd . dwFileAttributes & FILE_ATTRIBUTE_READONLY )
2002-08-02 10:01:35 +00:00
SetFileAttributes ( buf , fd . dwFileAttributes ^ FILE_ATTRIBUTE_READONLY ) ;
if ( fd . dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) doRMDir ( buf ) ;
2004-02-06 17:36:48 +00:00
else
2002-08-02 10:01:35 +00:00
{
DeleteFile ( buf ) ;
}
}
} while ( FindNextFile ( h , & fd ) ) ;
FindClose ( h ) ;
}
p [ 0 ] = 0 ; // fix buffer
RemoveDirectory ( buf ) ;
}
2010-03-24 17:22:56 +00:00
static void doMKDir ( TCHAR * directory )
2002-08-02 10:01:35 +00:00
{
2010-03-24 17:22:56 +00:00
TCHAR * p , * p2 ;
TCHAR buf [ MAX_PATH ] ;
2002-08-02 10:01:35 +00:00
if ( ! * directory ) return ;
2004-02-06 17:36:48 +00:00
lstrcpy ( buf , directory ) ;
2002-08-02 10:01:35 +00:00
p = buf ; while ( * p ) p + + ;
2010-03-24 17:22:56 +00:00
while ( p > = buf & & * p ! = _T ( ' \\ ' ) ) p - - ;
2004-02-06 17:36:48 +00:00
p2 = buf ;
2010-03-24 17:22:56 +00:00
if ( p2 [ 1 ] = = _T ( ' : ' ) ) p2 + = 4 ;
else if ( p2 [ 0 ] = = _T ( ' \\ ' ) & & p2 [ 1 ] = = _T ( ' \\ ' ) )
2004-02-06 17:36:48 +00:00
{
p2 + = 2 ;
2010-03-24 17:22:56 +00:00
while ( * p2 & & * p2 ! = _T ( ' \\ ' ) ) p2 + + ;
2004-02-06 17:36:48 +00:00
if ( * p2 ) p2 + + ;
2010-03-24 17:22:56 +00:00
while ( * p2 & & * p2 ! = _T ( ' \\ ' ) ) p2 + + ;
2004-02-06 17:36:48 +00:00
if ( * p2 ) p2 + + ;
}
if ( p > = p2 )
{
* p = 0 ;
doMKDir ( buf ) ;
}
CreateDirectory ( directory , NULL ) ;
2002-08-02 10:01:35 +00:00
}
void tempzip_cleanup ( HWND hwndDlg , int err )
{
if ( tempzip_path [ 0 ] ) doRMDir ( tempzip_path ) ;
tempzip_path [ 0 ] = 0 ;
if ( err )
{
SendDlgItemMessage ( hwndDlg , IDC_ZIPINFO_FILES , LB_RESETCONTENT , 0 , 0 ) ;
EnableWindow ( GetDlgItem ( hwndDlg , IDOK ) , 0 ) ;
2010-03-24 17:22:56 +00:00
SetDlgItemText ( hwndDlg , IDC_ZIPINFO_SUMMARY , _T ( " " ) ) ;
SetDlgItemText ( hwndDlg , IDC_ZIPFILE , _T ( " " ) ) ;
SetDlgItemText ( hwndDlg , IDC_OUTFILE , _T ( " " ) ) ;
2002-08-02 10:01:35 +00:00
}
}
2010-03-24 17:22:56 +00:00
int tempzip_make ( HWND hwndDlg , TCHAR * fn )
2002-08-02 10:01:35 +00:00
{
2010-03-24 17:22:56 +00:00
TCHAR buf [ MAX_PATH ] ;
2002-08-02 10:01:35 +00:00
GetTempPath ( MAX_PATH , buf ) ;
2010-03-24 17:22:56 +00:00
GetTempFileName ( buf , _T ( " z2e " ) , GetTickCount ( ) , tempzip_path ) ;
2002-08-02 10:01:35 +00:00
if ( ! CreateDirectory ( tempzip_path , NULL ) )
{
GetTempPath ( MAX_PATH , tempzip_path ) ;
2010-03-24 17:22:56 +00:00
_tcscat ( tempzip_path , _T ( " \\ nsi " ) ) ;
2002-08-02 10:01:35 +00:00
if ( ! CreateDirectory ( tempzip_path , NULL ) )
{
tempzip_path [ 0 ] = 0 ;
2010-03-24 17:22:56 +00:00
MessageBox ( hwndDlg , _T ( " Error creating temporary directory " ) , g_errcaption , MB_OK | MB_ICONSTOP ) ;
2002-08-02 10:01:35 +00:00
return 1 ;
}
}
2010-03-24 17:22:56 +00:00
FILE * fp = _tfopen ( fn , _T ( " rb " ) ) ;
2002-08-02 10:01:35 +00:00
if ( fp )
{
fseek ( fp , 0 , SEEK_END ) ;
g_zipfile_size = ftell ( fp ) ;
fclose ( fp ) ;
}
else g_zipfile_size = 0 ;
unzFile f ;
f = unzOpen ( fn ) ;
if ( ! f | | unzGoToFirstFile ( f ) ! = UNZ_OK )
{
if ( f ) unzClose ( f ) ;
2010-03-24 17:22:56 +00:00
MessageBox ( hwndDlg , _T ( " Error opening ZIP file " ) , g_errcaption , MB_OK | MB_ICONSTOP ) ;
2002-08-02 10:01:35 +00:00
return 1 ;
}
2004-02-06 17:36:48 +00:00
2002-08-02 10:01:35 +00:00
int nf = 0 , nkb = 0 ;
g_extracting = 1 ;
2004-02-06 17:36:48 +00:00
do {
2010-04-12 16:00:17 +00:00
char filenameA [ MAX_PATH ] ;
2004-06-18 18:58:56 +00:00
unz_file_info info ;
2010-04-12 16:00:17 +00:00
// ZREAD uses byte size, not TCHAR length.
unzGetCurrentFileInfo ( f , & info , filenameA , sizeof ( filenameA ) , NULL , 0 , NULL , 0 ) ;
2004-06-18 18:58:56 +00:00
// was zip created on MS-DOS/Windows?
if ( ( info . version & 0xFF00 ) = = 0 )
{
2010-04-12 16:00:17 +00:00
OemToCharBuffA ( filenameA , filenameA , strlen ( filenameA ) ) ;
}
# ifdef _UNICODE
TCHAR filename [ MAX_PATH ] ;
if ( MultiByteToWideChar ( CP_ACP , 0 , filenameA , - 1 , filename , MAX_PATH ) = = 0 )
{
if ( f ) unzClose ( f ) ;
MessageBox ( hwndDlg , _T ( " Error converting filename to Unicode " ) , g_errcaption , MB_OK | MB_ICONSTOP ) ;
return 1 ;
2004-06-18 18:58:56 +00:00
}
2010-04-12 16:00:17 +00:00
# else
char * filename = filenameA ;
# endif
2004-06-18 18:58:56 +00:00
2004-02-06 17:36:48 +00:00
if ( filename [ 0 ] & &
2010-03-24 17:22:56 +00:00
filename [ _tcsclen ( filename ) - 1 ] ! = _T ( ' \\ ' ) & &
filename [ _tcsclen ( filename ) - 1 ] ! = _T ( ' / ' ) )
2002-08-02 10:01:35 +00:00
{
2010-03-24 17:22:56 +00:00
TCHAR * pfn = filename ;
2002-08-02 10:01:35 +00:00
while ( * pfn )
{
2010-03-24 17:22:56 +00:00
if ( * pfn = = _T ( ' / ' ) ) * pfn = _T ( ' \\ ' ) ;
2002-08-02 10:01:35 +00:00
pfn + + ;
}
pfn = filename ;
2010-03-24 17:22:56 +00:00
if ( pfn [ 1 ] = = _T ( ' : ' ) & & pfn [ 2 ] = = _T ( ' \\ ' ) ) pfn + = 3 ;
while ( * pfn = = _T ( ' \\ ' ) ) pfn + + ;
2002-08-02 10:01:35 +00:00
2010-03-24 17:22:56 +00:00
TCHAR out_filename [ 1024 ] ;
2002-08-02 10:01:35 +00:00
lstrcpy ( out_filename , tempzip_path ) ;
2010-03-24 17:22:56 +00:00
lstrcat ( out_filename , _T ( " \\ " ) ) ;
2002-08-02 10:01:35 +00:00
lstrcat ( out_filename , pfn ) ;
2010-03-24 17:22:56 +00:00
if ( _tcsstr ( pfn , _T ( " \\ " ) ) )
2002-08-02 10:01:35 +00:00
{
2010-03-24 17:22:56 +00:00
TCHAR buf [ 1024 ] ;
2002-08-02 10:01:35 +00:00
lstrcpy ( buf , out_filename ) ;
2010-03-24 17:22:56 +00:00
TCHAR * p = buf + _tcsclen ( buf ) ;
while ( p > buf & & * p ! = _T ( ' \\ ' ) ) p - - ;
2002-08-02 10:01:35 +00:00
* p = 0 ;
if ( buf [ 0 ] ) doMKDir ( buf ) ;
}
2004-02-06 17:36:48 +00:00
if ( unzOpenCurrentFile ( f ) = = UNZ_OK )
{
2002-08-02 10:01:35 +00:00
SendDlgItemMessage ( hwndDlg , IDC_ZIPINFO_FILES , LB_ADDSTRING , 0 , ( LPARAM ) pfn ) ;
2004-02-06 17:36:48 +00:00
FILE * fp ;
int l ;
2010-03-24 17:22:56 +00:00
fp = _tfopen ( out_filename , _T ( " wb " ) ) ;
2004-02-06 17:36:48 +00:00
if ( fp )
{
do
{
2010-03-24 17:22:56 +00:00
// Jim Park: Local buf, no need to TCHAR
2004-02-06 17:36:48 +00:00
char buf [ 1024 ] ;
l = unzReadCurrentFile ( f , buf , sizeof ( buf ) ) ;
if ( l > 0 )
2002-08-02 10:01:35 +00:00
{
if ( fwrite ( buf , 1 , l , fp ) ! = ( unsigned int ) l )
{
unzClose ( f ) ;
fclose ( fp ) ;
2010-03-24 17:22:56 +00:00
MessageBox ( hwndDlg , _T ( " Error writing output file(s) " ) , g_errcaption , MB_OK | MB_ICONSTOP ) ;
2002-08-02 10:01:35 +00:00
g_extracting = 0 ;
return 1 ;
}
nkb + + ;
}
2004-02-06 17:36:48 +00:00
} while ( l > 0 ) ;
2002-08-02 10:01:35 +00:00
2004-02-06 17:36:48 +00:00
fclose ( fp ) ;
2005-11-08 21:49:07 +00:00
{
// set file time
HANDLE hf = CreateFile ( out_filename , GENERIC_WRITE , 0 , 0 , OPEN_ALWAYS , 0 , 0 ) ;
if ( hf ! = INVALID_HANDLE_VALUE )
{
FILETIME ft , lft ;
DosDateTimeToFileTime ( HIWORD ( info . dosDate ) , LOWORD ( info . dosDate ) , & ft ) ;
LocalFileTimeToFileTime ( & ft , & lft ) ;
SetFileTime ( hf , 0 , 0 , & lft ) ;
CloseHandle ( hf ) ;
}
}
2004-02-06 17:36:48 +00:00
}
2002-08-02 10:01:35 +00:00
else
{
unzClose ( f ) ;
2010-03-24 17:22:56 +00:00
MessageBox ( hwndDlg , _T ( " Error opening output file(s) " ) , g_errcaption , MB_OK | MB_ICONSTOP ) ;
2002-08-02 10:01:35 +00:00
g_extracting = 0 ;
return 1 ;
}
nf + + ;
2010-03-24 17:22:56 +00:00
wsprintf ( buf , _T ( " Extracting: %d files, %dKB " ) , nf , nkb ) ;
2002-08-02 10:01:35 +00:00
SetDlgItemText ( hwndDlg , IDC_ZIPINFO_SUMMARY , buf ) ;
MSG msg ;
int quit = 0 ;
while ( PeekMessage ( & msg , NULL , 0 , 0 , PM_REMOVE ) )
{
2004-02-06 17:36:48 +00:00
if ( msg . message = = WM_DESTROY & & msg . hwnd = = g_hwnd )
2002-08-02 10:01:35 +00:00
{
quit + + ;
break ;
}
TranslateMessage ( & msg ) ;
DispatchMessage ( & msg ) ;
}
2004-02-06 17:36:48 +00:00
unzCloseCurrentFile ( f ) ;
2002-08-02 10:01:35 +00:00
if ( quit ) break ;
2004-02-06 17:36:48 +00:00
}
2002-08-02 10:01:35 +00:00
else
{
unzClose ( f ) ;
2010-03-24 17:22:56 +00:00
MessageBox ( hwndDlg , _T ( " Error extracting from ZIP file " ) , g_errcaption , MB_OK | MB_ICONSTOP ) ;
2002-08-02 10:01:35 +00:00
g_extracting = 0 ;
return 1 ;
}
}
} while ( unzGoToNextFile ( f ) = = UNZ_OK ) ;
2004-02-06 17:36:48 +00:00
2002-08-02 10:01:35 +00:00
g_extracting = 0 ;
2010-03-24 17:22:56 +00:00
wsprintf ( buf , _T ( " Extracted: %d files, %dKB " ) , nf , nkb ) ;
2002-08-02 10:01:35 +00:00
SetDlgItemText ( hwndDlg , IDC_ZIPINFO_SUMMARY , buf ) ;
unzClose ( f ) ;
return 0 ;
}
2010-03-24 17:22:56 +00:00
TCHAR * gp_winamp = _T ( " (WINAMP DIRECTORY) " ) ;
TCHAR * gp_winamp_plugins = _T ( " (WINAMP PLUG-INS DIRECTORY) " ) ;
TCHAR * gp_winamp_vis = _T ( " (WINAMP VIS PLUG-INS DIRECTORY) " ) ;
TCHAR * gp_winamp_dsp = _T ( " (WINAMP DSP PLUG-INS DIRECTORY) " ) ;
TCHAR * gp_winamp_skins = _T ( " (WINAMP SKINS DIRECTORY) " ) ;
TCHAR * gp_poi = _T ( " (PATH OF INSTALLER) " ) ;
2002-08-02 10:01:35 +00:00
2010-03-24 17:22:56 +00:00
void wnd_printf ( const TCHAR * str )
2002-08-02 10:01:35 +00:00
{
if ( ! * str ) return ;
2010-03-24 17:22:56 +00:00
TCHAR existing_text [ 32000 ] ;
2002-08-02 10:01:35 +00:00
existing_text [ 0 ] = 0 ;
2004-02-06 17:36:48 +00:00
UINT l = GetDlgItemText ( g_hwnd , IDC_OUTPUTTEXT , existing_text , 32000 ) ;
2010-03-24 17:22:56 +00:00
l + = _tcsclen ( str ) ;
2002-08-02 10:01:35 +00:00
2010-03-24 17:22:56 +00:00
TCHAR * p = existing_text ;
2002-08-02 10:01:35 +00:00
existing_text [ 31000 ] = 0 ;
while ( l > 31000 & & * p )
{
2010-03-24 17:22:56 +00:00
while ( * p ! = _T ( ' \r ' ) & & * p ! = _T ( ' \n ' ) & & * p )
2002-08-02 10:01:35 +00:00
{
p + + ;
l - - ;
}
2010-03-24 17:22:56 +00:00
while ( * p = = _T ( ' \r ' ) | | * p = = _T ( ' \n ' ) )
2002-08-02 10:01:35 +00:00
{
p + + ;
l - - ;
}
}
2010-03-24 17:22:56 +00:00
TCHAR buf [ 31000 ] ;
2002-08-02 10:01:35 +00:00
lstrcpy ( buf , p ) ;
lstrcpy ( existing_text , buf ) ;
lstrcat ( existing_text , str ) ;
2004-02-06 17:36:48 +00:00
SetDlgItemText ( g_hwnd , IDC_OUTPUTTEXT , existing_text ) ;
SendDlgItemMessage ( g_hwnd , IDC_OUTPUTTEXT , EM_LINESCROLL , 0 , SendDlgItemMessage ( g_hwnd , IDC_OUTPUTTEXT , EM_GETLINECOUNT , 0 , 0 ) ) ; // scroll to the last line of the textbox
2002-08-02 10:01:35 +00:00
}
2010-03-24 17:22:56 +00:00
void ErrorMessage ( TCHAR * str ) //display detailed error info
2002-08-02 10:01:35 +00:00
{
2004-02-06 17:36:48 +00:00
LPVOID msg ;
FormatMessage (
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM ,
NULL ,
GetLastError ( ) ,
MAKELANGID ( LANG_NEUTRAL , SUBLANG_DEFAULT ) , // Default language
( LPTSTR ) & msg ,
0 ,
NULL
) ;
2002-08-02 10:01:35 +00:00
wnd_printf ( str ) ;
2010-03-24 17:22:56 +00:00
wnd_printf ( _T ( " : " ) ) ;
wnd_printf ( ( TCHAR * ) msg ) ;
2004-02-06 17:36:48 +00:00
LocalFree ( msg ) ;
2002-08-02 10:01:35 +00:00
}
2010-03-24 17:22:56 +00:00
DWORD WINAPI ThreadProc ( LPVOID p ) // thread that will start & monitor makensis
2002-08-02 10:01:35 +00:00
{
2010-03-24 17:22:56 +00:00
TCHAR buf [ 1024 ] ; //i/o buffer
2002-08-02 10:01:35 +00:00
STARTUPINFO si = { sizeof ( si ) , } ;
SECURITY_ATTRIBUTES sa = { sizeof ( sa ) , } ;
SECURITY_DESCRIPTOR sd = { 0 , } ; //security information for pipes
PROCESS_INFORMATION pi = { 0 , } ;
HANDLE newstdout = 0 , read_stdout = 0 ; //pipe handles
OSVERSIONINFO osv = { sizeof ( osv ) } ;
2004-02-06 17:36:48 +00:00
GetVersionEx ( & osv ) ;
if ( osv . dwPlatformId = = VER_PLATFORM_WIN32_NT ) //initialize security descriptor (Windows NT)
{
InitializeSecurityDescriptor ( & sd , SECURITY_DESCRIPTOR_REVISION ) ;
SetSecurityDescriptorDacl ( & sd , true , NULL , false ) ;
sa . lpSecurityDescriptor = & sd ;
}
else sa . lpSecurityDescriptor = NULL ;
sa . bInheritHandle = true ; //allow inheritable handles
if ( ! CreatePipe ( & read_stdout , & newstdout , & sa , 0 ) ) //create stdout pipe
{
2010-03-24 17:22:56 +00:00
ErrorMessage ( _T ( " CreatePipe " ) ) ;
2002-08-02 10:01:35 +00:00
PostMessage ( g_hwnd , WM_USER + 1203 , 0 , 1 ) ;
2004-02-06 17:36:48 +00:00
return 1 ;
}
GetStartupInfo ( & si ) ; //set startupinfo for the spawned process
/*
The dwFlags member tells CreateProcess how to make the process .
STARTF_USESTDHANDLES validates the hStd * members . STARTF_USESHOWWINDOW
validates the wShowWindow member .
*/
si . dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW ;
si . wShowWindow = SW_HIDE ;
si . hStdOutput = newstdout ;
si . hStdError = newstdout ; //set the new handles for the child process
// *******************************************************************
// If there is a command line in the config file, use it for create process
//spawn the child process
if ( ! CreateProcess ( NULL , g_cmdline , NULL , NULL , TRUE , CREATE_NEW_CONSOLE ,
NULL , tempzip_path , & si , & pi ) )
{
2010-03-24 17:22:56 +00:00
ErrorMessage ( _T ( " CreateProcess " ) ) ;
wnd_printf ( _T ( " \r \n Please make sure the path to makensis.exe is correct. " ) ) ;
2004-02-06 17:36:48 +00:00
CloseHandle ( newstdout ) ;
CloseHandle ( read_stdout ) ;
2002-08-02 10:01:35 +00:00
PostMessage ( g_hwnd , WM_USER + 1203 , 0 , 1 ) ;
2004-02-06 17:36:48 +00:00
return 1 ;
}
2007-03-24 13:55:59 +00:00
DWORD exit = 0 ; //process exit code
DWORD bread ; //bytes read
DWORD avail ; //bytes available
2004-02-06 17:36:48 +00:00
2010-03-24 17:22:56 +00:00
// Number of bytes available in the buffer.
const int bufBytesAvail = sizeof ( buf ) - sizeof ( TCHAR ) ;
2002-08-02 10:01:35 +00:00
memset ( buf , 0 , sizeof ( buf ) ) ;
2004-02-06 17:36:48 +00:00
while ( 1 ) //main program loop
{
2010-03-24 17:22:56 +00:00
PeekNamedPipe ( read_stdout , buf , bufBytesAvail , & bread , & avail , NULL ) ;
2004-02-06 17:36:48 +00:00
//check to see if there is any data to read from stdout
if ( bread ! = 0 )
{
2002-08-02 10:01:35 +00:00
memset ( buf , 0 , sizeof ( buf ) ) ;
2010-03-24 17:22:56 +00:00
if ( avail > bufBytesAvail )
2004-02-06 17:36:48 +00:00
{
2010-03-24 17:22:56 +00:00
while ( bread > = bufBytesAvail )
2004-02-06 17:36:48 +00:00
{
2010-03-24 17:22:56 +00:00
ReadFile ( read_stdout , buf , bufBytesAvail , & bread , NULL ) ; //read the stdout pipe
2004-02-06 17:36:48 +00:00
wnd_printf ( buf ) ;
2002-08-02 10:01:35 +00:00
memset ( buf , 0 , sizeof ( buf ) ) ;
2004-02-06 17:36:48 +00:00
}
}
else
{
2010-03-24 17:22:56 +00:00
ReadFile ( read_stdout , buf , bufBytesAvail , & bread , NULL ) ;
2004-02-06 17:36:48 +00:00
wnd_printf ( buf ) ;
}
}
GetExitCodeProcess ( pi . hProcess , & exit ) ; //while the process is running
if ( exit ! = STILL_ACTIVE )
break ;
Sleep ( 100 ) ;
}
CloseHandle ( pi . hThread ) ;
CloseHandle ( pi . hProcess ) ;
CloseHandle ( newstdout ) ;
CloseHandle ( read_stdout ) ;
2002-08-02 10:01:35 +00:00
2010-03-24 17:22:56 +00:00
wsprintf ( buf , _T ( " (source ZIP size was %d bytes) \r \n " ) , g_zipfile_size ) ;
2002-08-02 10:01:35 +00:00
wnd_printf ( buf ) ;
2004-02-06 17:36:48 +00:00
2002-08-02 10:01:35 +00:00
PostMessage ( g_hwnd , WM_USER + 1203 , 0 , 0 ) ;
return 0 ;
}
2010-03-24 17:22:56 +00:00
TCHAR nsifilename [ MAX_PATH ] ;
2002-08-02 10:01:35 +00:00
void makeEXE ( HWND hwndDlg )
{
2010-03-24 17:22:56 +00:00
TCHAR buf [ 2048 ] ;
2002-08-02 10:01:35 +00:00
GetTempPath ( MAX_PATH , buf ) ;
2010-03-24 17:22:56 +00:00
GetTempFileName ( buf , _T ( " zne " ) , 0 , nsifilename ) ;
2010-04-12 16:00:17 +00:00
# ifdef _UNICODE
FILE * fp = _tfopen ( nsifilename , _T ( " w, ccs=UNICODE " ) ) ; // generate a Unicode .NSI file
# else
FILE * fp = _tfopen ( nsifilename , _T ( " w " ) ) ;
# endif
2002-08-02 10:01:35 +00:00
if ( ! fp )
{
2010-03-24 17:22:56 +00:00
MessageBox ( hwndDlg , _T ( " Error writing .NSI file " ) , g_errcaption , MB_OK | MB_ICONSTOP ) ;
2002-10-03 07:27:02 +00:00
PostMessage ( g_hwnd , WM_USER + 1203 , 0 , 0 ) ;
2002-08-02 10:01:35 +00:00
return ;
}
GetDlgItemText ( hwndDlg , IDC_INSTNAME , buf , sizeof ( buf ) ) ;
2010-03-24 17:22:56 +00:00
_ftprintf ( fp , _T ( " !define ZIP2EXE_NAME `%s` \n " ) , buf ) ;
2002-08-02 10:01:35 +00:00
GetDlgItemText ( hwndDlg , IDC_OUTFILE , buf , sizeof ( buf ) ) ;
2010-03-24 17:22:56 +00:00
_ftprintf ( fp , _T ( " !define ZIP2EXE_OUTFILE `%s` \n " ) , buf ) ;
2003-11-25 18:11:23 +00:00
if ( g_compressor = = 1 )
2010-03-24 17:22:56 +00:00
_ftprintf ( fp , _T ( " !define ZIP2EXE_COMPRESSOR_ZLIB \n " ) ) ;
2003-11-25 18:11:23 +00:00
if ( g_compressor = = 2 )
2010-03-24 17:22:56 +00:00
_ftprintf ( fp , _T ( " !define ZIP2EXE_COMPRESSOR_BZIP2 \n " ) ) ;
2003-11-25 18:11:23 +00:00
if ( g_compressor = = 3 )
2010-03-24 17:22:56 +00:00
_ftprintf ( fp , _T ( " !define ZIP2EXE_COMPRESSOR_LZMA \n " ) ) ;
2005-10-21 13:53:27 +00:00
if ( g_compressor_solid = = 1 )
2010-03-24 17:22:56 +00:00
_ftprintf ( fp , _T ( " !define ZIP2EXE_COMPRESSOR_SOLID \n " ) ) ;
2002-08-02 10:01:35 +00:00
GetDlgItemText ( hwndDlg , IDC_INSTPATH , buf , sizeof ( buf ) ) ;
int iswinamp = 0 ;
2010-03-24 17:22:56 +00:00
TCHAR * iswinampmode = NULL ;
if ( ! _tcscmp ( buf , gp_poi ) ) lstrcpy ( buf , _T ( " $EXEDIR " ) ) ;
2004-02-06 17:36:48 +00:00
2010-03-24 17:22:56 +00:00
if ( ! _tcscmp ( buf , gp_winamp ) )
2002-08-02 10:01:35 +00:00
{
iswinamp = 1 ;
}
2010-03-24 17:22:56 +00:00
if ( ! _tcscmp ( buf , gp_winamp_plugins ) )
2002-08-02 10:01:35 +00:00
{
iswinamp = 1 ;
2010-03-24 17:22:56 +00:00
_ftprintf ( fp , _T ( " !define ZIP2EXE_INSTALLDIR_PLUGINS \n " ) ) ;
2002-08-02 10:01:35 +00:00
}
2010-03-24 17:22:56 +00:00
if ( ! _tcscmp ( buf , gp_winamp_vis ) )
2002-08-02 10:01:35 +00:00
{
iswinamp = 1 ;
2010-03-24 17:22:56 +00:00
iswinampmode = _T ( " VisDir " ) ;
2002-08-02 10:01:35 +00:00
}
2010-03-24 17:22:56 +00:00
if ( ! _tcscmp ( buf , gp_winamp_dsp ) )
2002-08-02 10:01:35 +00:00
{
iswinamp = 1 ;
2010-03-24 17:22:56 +00:00
iswinampmode = _T ( " DSPDir " ) ;
2002-08-02 10:01:35 +00:00
}
2010-03-24 17:22:56 +00:00
if ( ! _tcscmp ( buf , gp_winamp_skins ) )
2002-08-02 10:01:35 +00:00
{
iswinamp = 1 ;
2010-03-24 17:22:56 +00:00
iswinampmode = _T ( " SkinDir " ) ;
_ftprintf ( fp , _T ( " !define ZIP2EXE_INSTALLDIR_SKINS \n " ) ) ;
2002-08-02 10:01:35 +00:00
}
if ( iswinamp )
{
2010-03-24 17:22:56 +00:00
_ftprintf ( fp , _T ( " !define ZIP2EXE_INSTALLDIR_WINAMP \n " ) ) ;
2002-08-02 10:01:35 +00:00
if ( iswinampmode )
{
2010-03-24 17:22:56 +00:00
_ftprintf ( fp , _T ( " !define ZIP2EXE_INSTALLDIR_WINAMPMODE `%s` \n " ) , iswinampmode ) ;
2002-08-02 10:01:35 +00:00
}
}
else // set out path to $INSTDIR
{
2010-03-24 17:22:56 +00:00
_ftprintf ( fp , _T ( " !define ZIP2EXE_INSTALLDIR `%s` \n " ) , buf ) ;
2002-08-02 10:01:35 +00:00
}
2010-03-24 17:22:56 +00:00
_ftprintf ( fp , _T ( " !include `${NSISDIR} \\ Contrib \\ zip2exe \\ Base.nsh` \n " ) ) ;
_ftprintf ( fp , _T ( " !include `${NSISDIR} \\ Contrib \\ zip2exe \\ %s.nsh` \n " ) , g_mui ? _T ( " Modern " ) : _T ( " Classic " ) ) ;
2002-08-02 10:01:35 +00:00
2010-03-24 17:22:56 +00:00
_ftprintf ( fp , _T ( " !insertmacro SECTION_BEGIN \n " ) ) ;
_ftprintf ( fp , _T ( " File /r `%s \\ *.*` \n " ) , tempzip_path ) ;
_ftprintf ( fp , _T ( " !insertmacro SECTION_END \n " ) ) ;
2002-08-02 10:01:35 +00:00
2003-09-28 12:42:03 +00:00
fclose ( fp ) ;
2002-08-02 10:01:35 +00:00
2010-03-24 17:22:56 +00:00
TCHAR g_makensis_path [ MAX_PATH ] ;
TCHAR * p = g_makensis_path ;
2002-10-03 07:27:02 +00:00
GetModuleFileName ( g_hInstance , g_makensis_path , sizeof ( g_makensis_path ) ) ;
while ( * p ) p + + ;
2010-03-24 17:22:56 +00:00
while ( p > = g_makensis_path & & * p ! = _T ( ' \\ ' ) ) p - - ;
_tcscpy ( p + 1 , _T ( " makensis.exe " ) ) ;
2002-10-03 07:27:02 +00:00
WIN32_FIND_DATA fd ;
HANDLE h = FindFirstFile ( g_makensis_path , & fd ) ;
if ( h = = INVALID_HANDLE_VALUE )
{
2010-03-24 17:22:56 +00:00
if ( ( p - g_makensis_path > 4 ) & & ( _totlower ( * ( p - 1 ) ) = = _T ( ' n ' ) ) & & ( _totlower ( * ( p - 2 ) ) = = _T ( ' i ' ) ) & & ( _totlower ( * ( p - 3 ) ) = = _T ( ' b ' ) ) & & ( * ( p - 4 ) = = _T ( ' \\ ' ) ) )
2002-10-03 07:27:02 +00:00
{
p - = 4 ;
2010-03-24 17:22:56 +00:00
_tcscpy ( p + 1 , _T ( " makensis.exe " ) ) ;
2002-10-03 07:27:02 +00:00
h = FindFirstFile ( g_makensis_path , & fd ) ;
if ( h = = INVALID_HANDLE_VALUE )
{
2010-03-24 17:22:56 +00:00
MessageBox ( hwndDlg , _T ( " Error finding makensis.exe. " ) , g_errcaption , MB_OK | MB_ICONSTOP ) ;
2002-10-03 07:27:02 +00:00
PostMessage ( g_hwnd , WM_USER + 1203 , 0 , 0 ) ;
return ;
}
}
}
if ( h ! = INVALID_HANDLE_VALUE ) FindClose ( h ) ;
2010-03-24 17:22:56 +00:00
wsprintf ( g_cmdline , _T ( " \" %s \" %s \" %s \" " ) , g_makensis_path , g_options , nsifilename ) ;
2002-08-02 10:01:35 +00:00
DWORD id ;
g_hThread = CreateThread ( NULL , 0 , ThreadProc , 0 , 0 , & id ) ;
}
2010-03-24 17:22:56 +00:00
void SetZip ( HWND hwndDlg , TCHAR * path )
2005-11-12 17:19:46 +00:00
{
2010-03-24 17:22:56 +00:00
TCHAR buf2 [ 1024 ] ;
2005-11-12 17:19:46 +00:00
lstrcpy ( buf2 , path ) ;
tempzip_cleanup ( hwndDlg , 1 ) ;
SetDlgItemText ( hwndDlg , IDC_ZIPFILE , path ) ;
2010-03-24 17:22:56 +00:00
TCHAR * t = path + lstrlen ( path ) ;
while ( t > path & & * t ! = _T ( ' \\ ' ) & & * t ! = _T ( ' . ' ) ) t - - ;
2005-11-12 17:19:46 +00:00
{
2010-03-24 17:22:56 +00:00
TCHAR * p = t ;
while ( p > = path & & * p ! = _T ( ' \\ ' ) ) p - - ;
2005-11-12 17:19:46 +00:00
p + + ;
* t = 0 ;
2010-03-24 17:22:56 +00:00
SetDlgItemText ( hwndDlg , IDC_INSTNAME , p [ 0 ] ? p : _T ( " Stuff " ) ) ;
2005-11-12 17:19:46 +00:00
}
2010-03-24 17:22:56 +00:00
_tcscpy ( t , _T ( " .exe " ) ) ;
2005-11-12 17:19:46 +00:00
SetDlgItemText ( hwndDlg , IDC_OUTFILE , path ) ;
if ( tempzip_make ( hwndDlg , buf2 ) ) tempzip_cleanup ( hwndDlg , 1 ) ;
else
{
EnableWindow ( GetDlgItem ( hwndDlg , IDOK ) , 1 ) ;
}
}
2002-08-02 10:01:35 +00:00
BOOL CALLBACK DlgProc ( HWND hwndDlg , UINT uMsg , WPARAM wParam , LPARAM lParam )
{
2003-09-28 12:42:03 +00:00
static int ids [ ] = { IDC_INFO , IDC_NSISICON , IDC_SZIPFRAME , IDC_BROWSE , IDC_ZIPFILE , IDC_ZIPINFO_SUMMARY , IDC_ZIPINFO_FILES , IDC_OFRAME , IDC_INAMEST ,
2005-10-21 13:53:27 +00:00
IDC_INSTNAME , IDC_INSTPATH , IDC_OEFST , IDC_OUTFILE , IDC_BROWSE2 , IDC_COMPRESSOR , IDC_ZLIB , IDC_BZIP2 , IDC_LZMA , IDC_SOLID , IDC_INTERFACE , IDC_MODERNUI , IDC_CLASSICUI } ;
2002-08-02 10:01:35 +00:00
static HICON hIcon ;
static HFONT hFont ;
if ( uMsg = = WM_DESTROY ) { if ( hIcon ) DeleteObject ( hIcon ) ; hIcon = 0 ; if ( hFont ) DeleteObject ( hFont ) ; hFont = 0 ; }
switch ( uMsg )
{
case WM_INITDIALOG :
g_hwnd = hwndDlg ;
2003-11-25 18:11:23 +00:00
CheckDlgButton ( hwndDlg , IDC_LZMA , BST_CHECKED ) ;
2004-02-06 17:36:48 +00:00
CheckDlgButton ( hwndDlg , IDC_MODERNUI , BST_CHECKED ) ;
2002-08-02 10:01:35 +00:00
SendDlgItemMessage ( hwndDlg , IDC_INSTPATH , CB_ADDSTRING , 0 , ( LPARAM ) gp_poi ) ;
2010-03-24 17:22:56 +00:00
SendDlgItemMessage ( hwndDlg , IDC_INSTPATH , CB_ADDSTRING , 0 , ( LPARAM ) _T ( " $TEMP " ) ) ;
SendDlgItemMessage ( hwndDlg , IDC_INSTPATH , CB_ADDSTRING , 0 , ( LPARAM ) _T ( " $SYSDIR " ) ) ;
SendDlgItemMessage ( hwndDlg , IDC_INSTPATH , CB_ADDSTRING , 0 , ( LPARAM ) _T ( " $WINDIR " ) ) ;
SendDlgItemMessage ( hwndDlg , IDC_INSTPATH , CB_ADDSTRING , 0 , ( LPARAM ) _T ( " $DESKTOP " ) ) ;
SendDlgItemMessage ( hwndDlg , IDC_INSTPATH , CB_ADDSTRING , 0 , ( LPARAM ) _T ( " $DESKTOP \\ YourNameHere " ) ) ;
SendDlgItemMessage ( hwndDlg , IDC_INSTPATH , CB_ADDSTRING , 0 , ( LPARAM ) _T ( " $PROGRAMFILES \\ YourNameHere " ) ) ;
SendDlgItemMessage ( hwndDlg , IDC_INSTPATH , CB_ADDSTRING , 0 , ( LPARAM ) _T ( " $STARTMENU " ) ) ;
SendDlgItemMessage ( hwndDlg , IDC_INSTPATH , CB_ADDSTRING , 0 , ( LPARAM ) _T ( " $SMPROGRAMS " ) ) ;
2002-08-02 10:01:35 +00:00
SendDlgItemMessage ( hwndDlg , IDC_INSTPATH , CB_ADDSTRING , 0 , ( LPARAM ) gp_winamp ) ;
SendDlgItemMessage ( hwndDlg , IDC_INSTPATH , CB_ADDSTRING , 0 , ( LPARAM ) gp_winamp_plugins ) ;
SendDlgItemMessage ( hwndDlg , IDC_INSTPATH , CB_ADDSTRING , 0 , ( LPARAM ) gp_winamp_vis ) ;
SendDlgItemMessage ( hwndDlg , IDC_INSTPATH , CB_ADDSTRING , 0 , ( LPARAM ) gp_winamp_dsp ) ;
SendDlgItemMessage ( hwndDlg , IDC_INSTPATH , CB_ADDSTRING , 0 , ( LPARAM ) gp_winamp_skins ) ;
2004-02-06 17:36:48 +00:00
SetDlgItemText ( hwndDlg , IDC_INSTPATH , gp_poi ) ;
hIcon = LoadIcon ( g_hInstance , MAKEINTRESOURCE ( IDI_ICON1 ) ) ;
SetClassLong ( hwndDlg , GCL_HICON , ( long ) hIcon ) ;
2002-08-02 10:01:35 +00:00
hFont = CreateFont ( 15 , 0 , 0 , 0 , FW_NORMAL , 0 , 0 , 0 , DEFAULT_CHARSET ,
OUT_CHARACTER_PRECIS ,
CLIP_DEFAULT_PRECIS ,
2010-03-24 17:22:56 +00:00
DEFAULT_QUALITY , FIXED_PITCH | FF_DONTCARE , _T ( " Courier New " ) ) ;
2002-08-02 10:01:35 +00:00
SendDlgItemMessage ( hwndDlg , IDC_OUTPUTTEXT , WM_SETFONT , ( WPARAM ) hFont , 0 ) ;
2005-11-12 17:19:46 +00:00
DragAcceptFiles ( hwndDlg , TRUE ) ;
2002-08-02 10:01:35 +00:00
return 1 ;
case WM_CLOSE :
if ( ! g_hThread )
{
tempzip_cleanup ( hwndDlg , 0 ) ;
EndDialog ( hwndDlg , 1 ) ;
}
break ;
case WM_USER + 1203 :
if ( g_hThread )
{
2004-02-06 17:36:48 +00:00
if ( ! lParam ) ShowWindow ( GetDlgItem ( hwndDlg , IDC_TEST ) , SW_SHOWNA ) ;
2002-08-02 10:01:35 +00:00
CloseHandle ( g_hThread ) ;
g_hThread = 0 ;
}
2002-10-03 07:27:02 +00:00
made = 1 ;
ShowWindow ( GetDlgItem ( hwndDlg , IDC_BACK ) , SW_SHOWNA ) ;
EnableWindow ( GetDlgItem ( hwndDlg , IDOK ) , 1 ) ;
if ( nsifilename [ 0 ] ) DeleteFile ( nsifilename ) ;
nsifilename [ 0 ] = 0 ;
2002-08-02 10:01:35 +00:00
break ;
2005-11-12 17:19:46 +00:00
case WM_DROPFILES :
{
2010-03-24 17:22:56 +00:00
TCHAR dropped_file [ MAX_PATH ] = _T ( " " ) ;
2007-03-11 15:58:46 +00:00
if ( DragQueryFile ( ( HDROP ) wParam , ( UINT ) - 1 , NULL , 0 ) = = 1 )
2005-11-12 17:19:46 +00:00
{
DragQueryFile ( ( HDROP ) wParam , 0 , dropped_file , MAX_PATH ) ;
if ( lstrlen ( dropped_file ) > 0 )
{
SetZip ( hwndDlg , dropped_file ) ;
}
}
else
{
2010-03-24 17:22:56 +00:00
MessageBox ( hwndDlg , _T ( " Dropping more than one zip file at a time is not supported " ) , g_errcaption , MB_OK | MB_ICONSTOP ) ;
2005-11-12 17:19:46 +00:00
}
2005-11-12 17:29:04 +00:00
DragFinish ( ( HDROP ) wParam ) ;
2005-11-12 17:19:46 +00:00
return TRUE ;
}
2002-08-02 10:01:35 +00:00
case WM_COMMAND :
switch ( LOWORD ( wParam ) )
{
case IDC_BROWSE :
if ( ! g_extracting ) {
OPENFILENAME l = { sizeof ( l ) , } ;
2010-03-24 17:22:56 +00:00
TCHAR buf [ 1024 ] ;
2002-08-02 10:01:35 +00:00
l . hwndOwner = hwndDlg ;
2010-03-24 17:22:56 +00:00
l . lpstrFilter = _T ( " ZIP Files \0 *.zip \0 All Files \0 *.* \0 " ) ;
2002-08-02 10:01:35 +00:00
l . lpstrFile = buf ;
l . nMaxFile = 1023 ;
2010-03-24 17:22:56 +00:00
l . lpstrTitle = _T ( " Open ZIP File " ) ;
l . lpstrDefExt = _T ( " zip " ) ;
2002-08-02 10:01:35 +00:00
l . lpstrInitialDir = NULL ;
2004-02-06 17:36:48 +00:00
l . Flags = OFN_HIDEREADONLY | OFN_EXPLORER | OFN_PATHMUSTEXIST ;
2002-08-02 10:01:35 +00:00
buf [ 0 ] = 0 ;
2004-02-06 17:36:48 +00:00
if ( GetOpenFileName ( & l ) )
2002-08-02 10:01:35 +00:00
{
2005-11-12 17:19:46 +00:00
SetZip ( hwndDlg , buf ) ;
2002-08-02 10:01:35 +00:00
}
2004-02-06 17:36:48 +00:00
}
2002-08-02 10:01:35 +00:00
break ;
case IDC_BROWSE2 :
{
OPENFILENAME l = { sizeof ( l ) , } ;
2010-03-24 17:22:56 +00:00
TCHAR buf [ 1024 ] ;
2002-08-02 10:01:35 +00:00
l . hwndOwner = hwndDlg ;
2010-03-24 17:22:56 +00:00
l . lpstrFilter = _T ( " Executables \0 *.exe \0 All Files \0 *.* \0 " ) ;
2002-08-02 10:01:35 +00:00
l . lpstrFile = buf ;
l . nMaxFile = 1023 ;
2010-03-24 17:22:56 +00:00
l . lpstrTitle = _T ( " Select Output EXE File " ) ;
l . lpstrDefExt = _T ( " exe " ) ;
2002-08-02 10:01:35 +00:00
l . lpstrInitialDir = NULL ;
2004-02-06 17:36:48 +00:00
l . Flags = OFN_HIDEREADONLY | OFN_EXPLORER ;
2002-08-02 10:01:35 +00:00
GetDlgItemText ( hwndDlg , IDC_OUTFILE , buf , sizeof ( buf ) ) ;
2004-02-06 17:36:48 +00:00
if ( GetSaveFileName ( & l ) )
2002-08-02 10:01:35 +00:00
{
SetDlgItemText ( hwndDlg , IDC_OUTFILE , buf ) ;
}
2004-02-06 17:36:48 +00:00
}
2002-08-02 10:01:35 +00:00
break ;
case IDC_BACK :
if ( ! g_hThread )
{
made = 0 ;
ShowWindow ( GetDlgItem ( hwndDlg , IDC_BACK ) , SW_HIDE ) ;
2004-02-06 17:36:48 +00:00
ShowWindow ( GetDlgItem ( hwndDlg , IDC_TEST ) , SW_HIDE ) ;
2002-08-02 10:01:35 +00:00
ShowWindow ( GetDlgItem ( hwndDlg , IDC_OUTPUTTEXT ) , SW_HIDE ) ;
{
2010-03-30 17:50:08 +00:00
for ( size_t x = 0 ; x < COUNTOF ( ids ) ; x + + )
2004-02-06 17:36:48 +00:00
ShowWindow ( GetDlgItem ( hwndDlg , ids [ x ] ) , SW_SHOWNA ) ;
2010-03-24 17:22:56 +00:00
SetDlgItemText ( hwndDlg , IDOK , _T ( " &Generate " ) ) ;
2002-08-02 10:01:35 +00:00
EnableWindow ( GetDlgItem ( hwndDlg , IDOK ) , 1 ) ;
}
}
break ;
case IDC_TEST :
if ( ! g_hThread ) {
2010-03-24 17:22:56 +00:00
TCHAR buf [ 1024 ] ;
2010-03-30 17:50:08 +00:00
GetDlgItemText ( hwndDlg , IDC_OUTFILE , buf , COUNTOF ( buf ) ) ;
2010-03-24 17:22:56 +00:00
ShellExecute ( hwndDlg , _T ( " open " ) , buf , _T ( " " ) , _T ( " " ) , SW_SHOW ) ;
2002-08-02 10:01:35 +00:00
}
break ;
case IDOK :
if ( ! g_hThread )
{
if ( ! made )
{
2004-02-06 17:36:48 +00:00
if ( IsDlgButtonChecked ( hwndDlg , IDC_ZLIB ) )
2003-11-25 18:11:23 +00:00
g_compressor = 1 ;
2004-02-06 17:36:48 +00:00
if ( IsDlgButtonChecked ( hwndDlg , IDC_BZIP2 ) )
2003-11-25 18:11:23 +00:00
g_compressor = 2 ;
2004-02-06 17:36:48 +00:00
if ( IsDlgButtonChecked ( hwndDlg , IDC_LZMA ) )
2003-11-25 18:11:23 +00:00
g_compressor = 3 ;
2005-10-21 13:53:27 +00:00
if ( IsDlgButtonChecked ( hwndDlg , IDC_SOLID ) )
g_compressor_solid = 1 ;
else
g_compressor_solid = 0 ;
2004-02-06 17:36:48 +00:00
g_mui = ! IsDlgButtonChecked ( hwndDlg , IDC_CLASSICUI ) ;
2010-03-24 17:22:56 +00:00
SetDlgItemText ( g_hwnd , IDC_OUTPUTTEXT , _T ( " " ) ) ;
2010-03-30 17:50:08 +00:00
for ( size_t x = 0 ; x < COUNTOF ( ids ) ; x + + )
2004-02-06 17:36:48 +00:00
ShowWindow ( GetDlgItem ( hwndDlg , ids [ x ] ) , SW_HIDE ) ;
2002-08-02 10:01:35 +00:00
ShowWindow ( GetDlgItem ( hwndDlg , IDC_OUTPUTTEXT ) , SW_SHOWNA ) ;
2010-03-24 17:22:56 +00:00
SetDlgItemText ( hwndDlg , IDOK , _T ( " &Close " ) ) ;
2002-08-02 10:01:35 +00:00
EnableWindow ( GetDlgItem ( hwndDlg , IDOK ) , 0 ) ;
makeEXE ( hwndDlg ) ;
}
2004-02-06 17:36:48 +00:00
else
2002-08-02 10:01:35 +00:00
{
tempzip_cleanup ( hwndDlg , 0 ) ;
EndDialog ( hwndDlg , 0 ) ;
}
}
break ;
}
break ;
}
return 0 ;
2007-03-11 15:58:46 +00:00
}