ENABLE_RETAIL productionize
16
MAKE.bat
|
@ -554,10 +554,10 @@ if "!cc!"=="cl" (
|
||||||
)
|
)
|
||||||
|
|
||||||
if "!build!"=="rel" (
|
if "!build!"=="rel" (
|
||||||
set args=/nologo /Zi /MT /openmp /DNDEBUG !args! /Os /Ox /O2 /Oy /GL /GF /Gw /arch:AVX2 /link /OPT:ICF /LTCG
|
set args=/nologo /Zi /MT /openmp /DNDEBUG=2 !args! /Os /Ox /O2 /Oy /GL /GF /Gw /arch:AVX2 /link /OPT:ICF /LTCG
|
||||||
)
|
)
|
||||||
if "!build!"=="dev" (
|
if "!build!"=="dev" (
|
||||||
set args=/nologo /Zi /MT /openmp /DEBUG !args! && REM /Os /Ox /O2 /Oy /GL /GF /Gw /arch:AVX2
|
set args=/nologo /Zi /MT /openmp /DNDEBUG !args! && REM /Os /Ox /O2 /Oy /GL /GF /Gw /arch:AVX2
|
||||||
)
|
)
|
||||||
if "!build!"=="dbg" (
|
if "!build!"=="dbg" (
|
||||||
set args=/nologo /Zi /MT /DEBUG !args! /Od /fsanitize=address
|
set args=/nologo /Zi /MT /DEBUG !args! /Od /fsanitize=address
|
||||||
|
@ -582,10 +582,10 @@ if "!cc!"=="cl" (
|
||||||
set warnings=!warnings_v4kc! !warnings_demos!
|
set warnings=!warnings_v4kc! !warnings_demos!
|
||||||
|
|
||||||
if "!build!"=="rel" (
|
if "!build!"=="rel" (
|
||||||
set args=!warnings! /nologo /Zi /MT /openmp /DNDEBUG !args! /Os /Ox /O2 /Oy /GF /Gw /arch:AVX2
|
set args=!warnings! /nologo /Zi /MT /openmp /DNDEBUG=2 !args! /Os /Ox /O2 /Oy /GF /Gw /arch:AVX2
|
||||||
)
|
)
|
||||||
if "!build!"=="dev" (
|
if "!build!"=="dev" (
|
||||||
set args=!warnings! /nologo /Zi /MT /openmp /DEBUG !args! && REM /Os /Ox /O2 /Oy /GF /Gw /arch:AVX2
|
set args=!warnings! /nologo /Zi /MT /openmp /DNDEBUG !args! && REM /Os /Ox /O2 /Oy /GF /Gw /arch:AVX2
|
||||||
)
|
)
|
||||||
if "!build!"=="dbg" (
|
if "!build!"=="dbg" (
|
||||||
set args=!warnings! /nologo /Zi /MT /DEBUG !args! /Od /fsanitize=address
|
set args=!warnings! /nologo /Zi /MT /DEBUG !args! /Od /fsanitize=address
|
||||||
|
@ -605,10 +605,10 @@ if "!cc!"=="cl" (
|
||||||
)
|
)
|
||||||
|
|
||||||
if "!build!"=="rel" (
|
if "!build!"=="rel" (
|
||||||
set args=-O3 -DNDEBUG !args!
|
set args=-O3 -DNDEBUG=2 !args!
|
||||||
)
|
)
|
||||||
if "!build!"=="dev" (
|
if "!build!"=="dev" (
|
||||||
set args=-O2 -g !args!
|
set args=-O2 -g -DNDEBUG !args!
|
||||||
)
|
)
|
||||||
if "!build!"=="dbg" (
|
if "!build!"=="dbg" (
|
||||||
set args=-O0 -g !args!
|
set args=-O0 -g !args!
|
||||||
|
@ -633,10 +633,10 @@ if "!cc!"=="cl" (
|
||||||
|
|
||||||
if "!build!"=="rel" (
|
if "!build!"=="rel" (
|
||||||
rem @todo see: https://stackoverflow.com/questions/866721/how-to-generate-gcc-debug-symbol-outside-the-build-target
|
rem @todo see: https://stackoverflow.com/questions/866721/how-to-generate-gcc-debug-symbol-outside-the-build-target
|
||||||
set args=-O3 -DNDEBUG !args!
|
set args=-O3 -DNDEBUG=2 !args!
|
||||||
)
|
)
|
||||||
if "!build!"=="dev" (
|
if "!build!"=="dev" (
|
||||||
set args=-g -O1 !args!
|
set args=-g -O1 -DNDEBUG !args!
|
||||||
)
|
)
|
||||||
if "!build!"=="dbg" (
|
if "!build!"=="dbg" (
|
||||||
set args=-g -O0 !args!
|
set args=-g -O0 !args!
|
||||||
|
|
|
@ -2086,7 +2086,6 @@ COOK_DEBUGLOG = 4,
|
||||||
bool cook_start( const char *path_to_cook_ini, const char *masks, int flags );
|
bool cook_start( const char *path_to_cook_ini, const char *masks, int flags );
|
||||||
void cook_stop();
|
void cook_stop();
|
||||||
void cook_cancel();
|
void cook_cancel();
|
||||||
void cook_disable();
|
|
||||||
int cook_jobs();
|
int cook_jobs();
|
||||||
int cook_progress();
|
int cook_progress();
|
||||||
typedef union json_t { char* s; double f; int64_t i; uintptr_t p; union json_t* arr; } json_t;
|
typedef union json_t { char* s; double f; int64_t i; uintptr_t p; union json_t* arr; } json_t;
|
||||||
|
|
|
@ -15189,7 +15189,6 @@ API void swapf4(vec4 *a, vec4 *b);
|
||||||
|
|
||||||
#line 0
|
#line 0
|
||||||
|
|
||||||
|
|
||||||
#line 1 "engine/split/v4k_ai.h"
|
#line 1 "engine/split/v4k_ai.h"
|
||||||
typedef enum SWARM_DISTANCE {
|
typedef enum SWARM_DISTANCE {
|
||||||
SWARM_DISTANCE_LINEAR,
|
SWARM_DISTANCE_LINEAR,
|
||||||
|
@ -15618,7 +15617,6 @@ API void cook_config( const char *path_to_cook_ini ); // "tools/cook.ini"
|
||||||
API bool cook_start( const char *path_to_cook_ini, const char *masks, int flags ); // COOK_INI, "**"
|
API bool cook_start( const char *path_to_cook_ini, const char *masks, int flags ); // COOK_INI, "**"
|
||||||
API void cook_stop();
|
API void cook_stop();
|
||||||
API void cook_cancel();
|
API void cook_cancel();
|
||||||
API void cook_disable();
|
|
||||||
API int cook_jobs(); // [0..N]
|
API int cook_jobs(); // [0..N]
|
||||||
API int cook_progress(); // [0..100]
|
API int cook_progress(); // [0..100]
|
||||||
|
|
||||||
|
@ -335594,16 +335592,10 @@ void cook_cancel() {
|
||||||
if( cook_cancelable ) cook_cancelling = true;
|
if( cook_cancelable ) cook_cancelling = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool cook_disabled=0;
|
|
||||||
|
|
||||||
void cook_disable() {
|
|
||||||
cook_disabled=1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int cook_jobs() {
|
int cook_jobs() {
|
||||||
int num_jobs = optioni("--cook-jobs", maxf(1.15,app_cores()) * 1.75), max_jobs = countof(jobs);
|
int num_jobs = optioni("--cook-jobs", maxf(1.15,app_cores()) * 1.75), max_jobs = countof(jobs);
|
||||||
ifdef(ems, num_jobs = 0);
|
ifdef(ems, num_jobs = 0);
|
||||||
return clampi(num_jobs, 0, cook_disabled?0:max_jobs);
|
return clampi(num_jobs, 0, max_jobs);
|
||||||
}
|
}
|
||||||
|
|
||||||
void cook_config( const char *pathfile_to_cook_ini ) { // @todo: test run-from-"bin/" case on Linux.
|
void cook_config( const char *pathfile_to_cook_ini ) { // @todo: test run-from-"bin/" case on Linux.
|
||||||
|
@ -354719,7 +354711,9 @@ bool window_create_from_handle(void *handle, float scale, unsigned flags) {
|
||||||
// set black screen
|
// set black screen
|
||||||
glNewFrame();
|
glNewFrame();
|
||||||
window_swap();
|
window_swap();
|
||||||
|
#if !ENABLE_RETAIL
|
||||||
window_title("");
|
window_title("");
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if(cook_cancelling) cook_stop(), exit(-1);
|
if(cook_cancelling) cook_stop(), exit(-1);
|
||||||
|
@ -354786,6 +354780,7 @@ int window_frame_begin() {
|
||||||
|
|
||||||
glNewFrame();
|
glNewFrame();
|
||||||
|
|
||||||
|
#if !ENABLE_RETAIL
|
||||||
ui_create();
|
ui_create();
|
||||||
|
|
||||||
bool may_render_stats = 1;
|
bool may_render_stats = 1;
|
||||||
|
@ -355035,6 +355030,7 @@ int window_frame_begin() {
|
||||||
API int editor_tick();
|
API int editor_tick();
|
||||||
editor_tick();
|
editor_tick();
|
||||||
}
|
}
|
||||||
|
#endif // ENABLE_RETAIL
|
||||||
|
|
||||||
#if 0 // deprecated
|
#if 0 // deprecated
|
||||||
// run user-defined hooks
|
// run user-defined hooks
|
||||||
|
@ -355047,6 +355043,7 @@ int window_frame_begin() {
|
||||||
dt = now - t;
|
dt = now - t;
|
||||||
t = now;
|
t = now;
|
||||||
|
|
||||||
|
#if !ENABLE_RETAIL
|
||||||
char *st = window_stats();
|
char *st = window_stats();
|
||||||
static double timer = 0;
|
static double timer = 0;
|
||||||
timer += window_delta();
|
timer += window_delta();
|
||||||
|
@ -355054,6 +355051,9 @@ int window_frame_begin() {
|
||||||
glfwSetWindowTitle(window, st);
|
glfwSetWindowTitle(window, st);
|
||||||
timer = 0;
|
timer = 0;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
glfwSetWindowTitle(window, title);
|
||||||
|
#endif
|
||||||
|
|
||||||
void input_update();
|
void input_update();
|
||||||
input_update();
|
input_update();
|
||||||
|
@ -356926,7 +356926,6 @@ static void v4k_post_init(float refresh_rate) {
|
||||||
else if( i == 3 ) input_init(), network_init();
|
else if( i == 3 ) input_init(), network_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
// @todo
|
|
||||||
const char *appname = app_name();
|
const char *appname = app_name();
|
||||||
window_icon(va("%s.png", appname));
|
window_icon(va("%s.png", appname));
|
||||||
window_icon(va("%s.ico", appname));
|
window_icon(va("%s.ico", appname));
|
||||||
|
@ -356978,14 +356977,12 @@ void v4k_init() {
|
||||||
__argc = 0;
|
__argc = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(COOK_DISABLED) || ENABLE_RETAIL
|
#if !ENABLE_RETAIL
|
||||||
cook_disable();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// create or update cook.zip file
|
// create or update cook.zip file
|
||||||
if( /* !COOK_ON_DEMAND && */ file_exist(COOK_INI) && cook_jobs() ) {
|
if( /* !COOK_ON_DEMAND && */ file_exist(COOK_INI) && cook_jobs() ) {
|
||||||
cook_start(COOK_INI, "**", 0|COOK_ASYNC|COOK_CANCELABLE );
|
cook_start(COOK_INI, "**", 0|COOK_ASYNC|COOK_CANCELABLE );
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
atexit(v4k_quit);
|
atexit(v4k_quit);
|
||||||
}
|
}
|
||||||
|
|
|
@ -101,7 +101,6 @@ extern "C" {
|
||||||
|
|
||||||
{{FILE:v4k_math.h}}
|
{{FILE:v4k_math.h}}
|
||||||
|
|
||||||
|
|
||||||
{{FILE:v4k_ai.h}}
|
{{FILE:v4k_ai.h}}
|
||||||
|
|
||||||
{{FILE:v4k_bt.h}}
|
{{FILE:v4k_bt.h}}
|
||||||
|
|
|
@ -796,16 +796,10 @@ void cook_cancel() {
|
||||||
if( cook_cancelable ) cook_cancelling = true;
|
if( cook_cancelable ) cook_cancelling = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool cook_disabled=0;
|
|
||||||
|
|
||||||
void cook_disable() {
|
|
||||||
cook_disabled=1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int cook_jobs() {
|
int cook_jobs() {
|
||||||
int num_jobs = optioni("--cook-jobs", maxf(1.15,app_cores()) * 1.75), max_jobs = countof(jobs);
|
int num_jobs = optioni("--cook-jobs", maxf(1.15,app_cores()) * 1.75), max_jobs = countof(jobs);
|
||||||
ifdef(ems, num_jobs = 0);
|
ifdef(ems, num_jobs = 0);
|
||||||
return clampi(num_jobs, 0, cook_disabled?0:max_jobs);
|
return clampi(num_jobs, 0, max_jobs);
|
||||||
}
|
}
|
||||||
|
|
||||||
void cook_config( const char *pathfile_to_cook_ini ) { // @todo: test run-from-"bin/" case on Linux.
|
void cook_config( const char *pathfile_to_cook_ini ) { // @todo: test run-from-"bin/" case on Linux.
|
||||||
|
|
|
@ -26,7 +26,6 @@ API void cook_config( const char *path_to_cook_ini ); // "tools/cook.ini"
|
||||||
API bool cook_start( const char *path_to_cook_ini, const char *masks, int flags ); // COOK_INI, "**"
|
API bool cook_start( const char *path_to_cook_ini, const char *masks, int flags ); // COOK_INI, "**"
|
||||||
API void cook_stop();
|
API void cook_stop();
|
||||||
API void cook_cancel();
|
API void cook_cancel();
|
||||||
API void cook_disable();
|
|
||||||
API int cook_jobs(); // [0..N]
|
API int cook_jobs(); // [0..N]
|
||||||
API int cook_progress(); // [0..100]
|
API int cook_progress(); // [0..100]
|
||||||
|
|
||||||
|
|
|
@ -39,7 +39,6 @@ static void v4k_post_init(float refresh_rate) {
|
||||||
else if( i == 3 ) input_init(), network_init();
|
else if( i == 3 ) input_init(), network_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
// @todo
|
|
||||||
const char *appname = app_name();
|
const char *appname = app_name();
|
||||||
window_icon(va("%s.png", appname));
|
window_icon(va("%s.png", appname));
|
||||||
window_icon(va("%s.ico", appname));
|
window_icon(va("%s.ico", appname));
|
||||||
|
@ -91,14 +90,12 @@ void v4k_init() {
|
||||||
__argc = 0;
|
__argc = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(COOK_DISABLED) || ENABLE_RETAIL
|
#if !ENABLE_RETAIL
|
||||||
cook_disable();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// create or update cook.zip file
|
// create or update cook.zip file
|
||||||
if( /* !COOK_ON_DEMAND && */ file_exist(COOK_INI) && cook_jobs() ) {
|
if( /* !COOK_ON_DEMAND && */ file_exist(COOK_INI) && cook_jobs() ) {
|
||||||
cook_start(COOK_INI, "**", 0|COOK_ASYNC|COOK_CANCELABLE );
|
cook_start(COOK_INI, "**", 0|COOK_ASYNC|COOK_CANCELABLE );
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
atexit(v4k_quit);
|
atexit(v4k_quit);
|
||||||
}
|
}
|
||||||
|
|
|
@ -446,7 +446,9 @@ bool window_create_from_handle(void *handle, float scale, unsigned flags) {
|
||||||
// set black screen
|
// set black screen
|
||||||
glNewFrame();
|
glNewFrame();
|
||||||
window_swap();
|
window_swap();
|
||||||
|
#if !ENABLE_RETAIL
|
||||||
window_title("");
|
window_title("");
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if(cook_cancelling) cook_stop(), exit(-1);
|
if(cook_cancelling) cook_stop(), exit(-1);
|
||||||
|
@ -513,6 +515,7 @@ int window_frame_begin() {
|
||||||
|
|
||||||
glNewFrame();
|
glNewFrame();
|
||||||
|
|
||||||
|
#if !ENABLE_RETAIL
|
||||||
ui_create();
|
ui_create();
|
||||||
|
|
||||||
bool may_render_stats = 1;
|
bool may_render_stats = 1;
|
||||||
|
@ -762,6 +765,7 @@ int window_frame_begin() {
|
||||||
API int editor_tick();
|
API int editor_tick();
|
||||||
editor_tick();
|
editor_tick();
|
||||||
}
|
}
|
||||||
|
#endif // ENABLE_RETAIL
|
||||||
|
|
||||||
#if 0 // deprecated
|
#if 0 // deprecated
|
||||||
// run user-defined hooks
|
// run user-defined hooks
|
||||||
|
@ -774,6 +778,7 @@ int window_frame_begin() {
|
||||||
dt = now - t;
|
dt = now - t;
|
||||||
t = now;
|
t = now;
|
||||||
|
|
||||||
|
#if !ENABLE_RETAIL
|
||||||
char *st = window_stats();
|
char *st = window_stats();
|
||||||
static double timer = 0;
|
static double timer = 0;
|
||||||
timer += window_delta();
|
timer += window_delta();
|
||||||
|
@ -781,6 +786,9 @@ int window_frame_begin() {
|
||||||
glfwSetWindowTitle(window, st);
|
glfwSetWindowTitle(window, st);
|
||||||
timer = 0;
|
timer = 0;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
glfwSetWindowTitle(window, title);
|
||||||
|
#endif
|
||||||
|
|
||||||
void input_update();
|
void input_update();
|
||||||
input_update();
|
input_update();
|
||||||
|
|
23
engine/v4k.c
|
@ -4628,16 +4628,10 @@ void cook_cancel() {
|
||||||
if( cook_cancelable ) cook_cancelling = true;
|
if( cook_cancelable ) cook_cancelling = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool cook_disabled=0;
|
|
||||||
|
|
||||||
void cook_disable() {
|
|
||||||
cook_disabled=1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int cook_jobs() {
|
int cook_jobs() {
|
||||||
int num_jobs = optioni("--cook-jobs", maxf(1.15,app_cores()) * 1.75), max_jobs = countof(jobs);
|
int num_jobs = optioni("--cook-jobs", maxf(1.15,app_cores()) * 1.75), max_jobs = countof(jobs);
|
||||||
ifdef(ems, num_jobs = 0);
|
ifdef(ems, num_jobs = 0);
|
||||||
return clampi(num_jobs, 0, cook_disabled?0:max_jobs);
|
return clampi(num_jobs, 0, max_jobs);
|
||||||
}
|
}
|
||||||
|
|
||||||
void cook_config( const char *pathfile_to_cook_ini ) { // @todo: test run-from-"bin/" case on Linux.
|
void cook_config( const char *pathfile_to_cook_ini ) { // @todo: test run-from-"bin/" case on Linux.
|
||||||
|
@ -23753,7 +23747,9 @@ bool window_create_from_handle(void *handle, float scale, unsigned flags) {
|
||||||
// set black screen
|
// set black screen
|
||||||
glNewFrame();
|
glNewFrame();
|
||||||
window_swap();
|
window_swap();
|
||||||
|
#if !ENABLE_RETAIL
|
||||||
window_title("");
|
window_title("");
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if(cook_cancelling) cook_stop(), exit(-1);
|
if(cook_cancelling) cook_stop(), exit(-1);
|
||||||
|
@ -23820,6 +23816,7 @@ int window_frame_begin() {
|
||||||
|
|
||||||
glNewFrame();
|
glNewFrame();
|
||||||
|
|
||||||
|
#if !ENABLE_RETAIL
|
||||||
ui_create();
|
ui_create();
|
||||||
|
|
||||||
bool may_render_stats = 1;
|
bool may_render_stats = 1;
|
||||||
|
@ -24069,6 +24066,7 @@ int window_frame_begin() {
|
||||||
API int editor_tick();
|
API int editor_tick();
|
||||||
editor_tick();
|
editor_tick();
|
||||||
}
|
}
|
||||||
|
#endif // ENABLE_RETAIL
|
||||||
|
|
||||||
#if 0 // deprecated
|
#if 0 // deprecated
|
||||||
// run user-defined hooks
|
// run user-defined hooks
|
||||||
|
@ -24081,6 +24079,7 @@ int window_frame_begin() {
|
||||||
dt = now - t;
|
dt = now - t;
|
||||||
t = now;
|
t = now;
|
||||||
|
|
||||||
|
#if !ENABLE_RETAIL
|
||||||
char *st = window_stats();
|
char *st = window_stats();
|
||||||
static double timer = 0;
|
static double timer = 0;
|
||||||
timer += window_delta();
|
timer += window_delta();
|
||||||
|
@ -24088,6 +24087,9 @@ int window_frame_begin() {
|
||||||
glfwSetWindowTitle(window, st);
|
glfwSetWindowTitle(window, st);
|
||||||
timer = 0;
|
timer = 0;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
glfwSetWindowTitle(window, title);
|
||||||
|
#endif
|
||||||
|
|
||||||
void input_update();
|
void input_update();
|
||||||
input_update();
|
input_update();
|
||||||
|
@ -25960,7 +25962,6 @@ static void v4k_post_init(float refresh_rate) {
|
||||||
else if( i == 3 ) input_init(), network_init();
|
else if( i == 3 ) input_init(), network_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
// @todo
|
|
||||||
const char *appname = app_name();
|
const char *appname = app_name();
|
||||||
window_icon(va("%s.png", appname));
|
window_icon(va("%s.png", appname));
|
||||||
window_icon(va("%s.ico", appname));
|
window_icon(va("%s.ico", appname));
|
||||||
|
@ -26012,14 +26013,12 @@ void v4k_init() {
|
||||||
__argc = 0;
|
__argc = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(COOK_DISABLED) || ENABLE_RETAIL
|
#if !ENABLE_RETAIL
|
||||||
cook_disable();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// create or update cook.zip file
|
// create or update cook.zip file
|
||||||
if( /* !COOK_ON_DEMAND && */ file_exist(COOK_INI) && cook_jobs() ) {
|
if( /* !COOK_ON_DEMAND && */ file_exist(COOK_INI) && cook_jobs() ) {
|
||||||
cook_start(COOK_INI, "**", 0|COOK_ASYNC|COOK_CANCELABLE );
|
cook_start(COOK_INI, "**", 0|COOK_ASYNC|COOK_CANCELABLE );
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
atexit(v4k_quit);
|
atexit(v4k_quit);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1256,7 +1256,6 @@ API void swapf4(vec4 *a, vec4 *b);
|
||||||
|
|
||||||
#line 0
|
#line 0
|
||||||
|
|
||||||
|
|
||||||
#line 1 "engine/split/v4k_ai.h"
|
#line 1 "engine/split/v4k_ai.h"
|
||||||
typedef enum SWARM_DISTANCE {
|
typedef enum SWARM_DISTANCE {
|
||||||
SWARM_DISTANCE_LINEAR,
|
SWARM_DISTANCE_LINEAR,
|
||||||
|
@ -1685,7 +1684,6 @@ API void cook_config( const char *path_to_cook_ini ); // "tools/cook.ini"
|
||||||
API bool cook_start( const char *path_to_cook_ini, const char *masks, int flags ); // COOK_INI, "**"
|
API bool cook_start( const char *path_to_cook_ini, const char *masks, int flags ); // COOK_INI, "**"
|
||||||
API void cook_stop();
|
API void cook_stop();
|
||||||
API void cook_cancel();
|
API void cook_cancel();
|
||||||
API void cook_disable();
|
|
||||||
API int cook_jobs(); // [0..N]
|
API int cook_jobs(); // [0..N]
|
||||||
API int cook_progress(); // [0..100]
|
API int cook_progress(); // [0..100]
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
ResourceHacker.ini
|
||||||
|
ResourceHacker.def
|
After Width: | Height: | Size: 118 KiB |
After Width: | Height: | Size: 133 KiB |
After Width: | Height: | Size: 129 KiB |
After Width: | Height: | Size: 70 KiB |
After Width: | Height: | Size: 101 KiB |
After Width: | Height: | Size: 86 KiB |
After Width: | Height: | Size: 101 KiB |
After Width: | Height: | Size: 104 KiB |
After Width: | Height: | Size: 98 KiB |
After Width: | Height: | Size: 74 KiB |
After Width: | Height: | Size: 52 KiB |
After Width: | Height: | Size: 24 KiB |
|
@ -0,0 +1,4 @@
|
||||||
|
[ViewState]
|
||||||
|
Mode=
|
||||||
|
Vid=
|
||||||
|
FolderType=Generic
|
|
@ -0,0 +1,331 @@
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Resource Hacker</title>
|
||||||
|
<STYLE type="text/css"><!--
|
||||||
|
body {
|
||||||
|
background: url("../bg4.jpg");
|
||||||
|
BACKGROUND-COLOR: #d9d9c0;
|
||||||
|
text-align: center;
|
||||||
|
box-sizing: border-box;
|
||||||
|
-moz-box-sizing: border-box;
|
||||||
|
padding: 20px 20px;
|
||||||
|
}
|
||||||
|
body, td, th {
|
||||||
|
margin: 20px auto 20px auto;
|
||||||
|
font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
|
||||||
|
font-size: 80%; /*this seems consistent across modern browsers*/
|
||||||
|
}
|
||||||
|
a {
|
||||||
|
text-decoration: none;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
h1 {
|
||||||
|
font-size: 2.0em;
|
||||||
|
font-weight: bold;
|
||||||
|
margin: 0.2em 0em;
|
||||||
|
COLOR: #46845F;
|
||||||
|
}
|
||||||
|
h2 {
|
||||||
|
font-size: 1.7em;
|
||||||
|
margin: 0.2em 0em;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
h3 {
|
||||||
|
font-size: 1.5em;
|
||||||
|
margin: 0.2em 0em;
|
||||||
|
font-weight: normal;
|
||||||
|
}
|
||||||
|
TD.menu {BACKGROUND-COLOR: #D8D8B8; TEXT-ALIGN: center}
|
||||||
|
H2 {COLOR: #009999}
|
||||||
|
.caption {BACKGROUND-COLOR: #BACBDA; font-size: 1.3em; font-weight: bold; color: #000066}
|
||||||
|
.maroon {color: maroon;}
|
||||||
|
--></STYLE>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div align="justify">
|
||||||
|
|
||||||
|
<h2>Resource Hacker™</h2>
|
||||||
|
|
||||||
|
<strong>Version 4.2.0</strong><br>
|
||||||
|
Last updated: 20 June 2015<br>
|
||||||
|
Copyright © 1999-2015 Angus Johnson<br>
|
||||||
|
Freeware - no nags, no ads and fully functional.<br>
|
||||||
|
<a href="#download">Download</a><br><br>
|
||||||
|
|
||||||
|
<strong>Overview:</strong><br><br>
|
||||||
|
|
||||||
|
Resource Hacker™ has been designed to be the complete resource editing tool: compiling, viewing, decompiling and recompiling resources for both 32bit and 64bit Windows executables. Resource Hacker™ can open any type of Windows executable (*.exe; *.dll; *.scr; *.mui etc) so that individual resources can be added modified or deleted within these files. Resource Hacker™ can create and compile resource script files (*.rc), and edit resource files (*.res) too.<br><br>
|
||||||
|
|
||||||
|
<img src="bm00.png" width="1103" height="687" alt="Resource Hacker"><br><br>
|
||||||
|
|
||||||
|
<strong>Compiling:</strong><br><br>
|
||||||
|
|
||||||
|
Compiling can be initiated either by passing a resource script file as a parameter on the the command line (see below), or by using Resource Hacker's text editor.<br>
|
||||||
|
Supported compiler directives include: #DEFINE, #UNDEF, #IF, #ELIF, #ELSE, #IFDEF, #IFNDEF, #INCLUDE, and #PRAGMA.<br>
|
||||||
|
The #INCLUDE, #IF, and #IFDEF directives can all be nested to multiple levels.<br>
|
||||||
|
Strings within resource statements are defined between double-quote (") characters. These strings can also contain typical 'C' style backslashed 'escaped' characters — \t , \n , \\ , \" , and \000 .. \377 (octal). A double-quote within a string can be 'escaped' by preceding it with either a backslash or with another double-quote character.<br>
|
||||||
|
Script comments are preceded either by double forward-slashes (//) or by a semi-colon (;).<br>
|
||||||
|
Filenames in within resource statements can only be parsed as strings, so they MUST be enclosed within double-quote characters otherwise compile errors will be raised.<br>
|
||||||
|
A complete list of Resource-Definition Statements can be found <a href="https://msdn.microsoft.com/en-us/library/windows/desktop/aa381043(v=vs.85).aspx">here</a>.<br><br>
|
||||||
|
|
||||||
|
<img src="bm12.png" width="1028" height="532" alt=""><br><br>
|
||||||
|
|
||||||
|
<strong>Viewing Resources:</strong><br><br>
|
||||||
|
|
||||||
|
Once a file has been opened, most resources will be displayed as either an image (or group of images) or as decompiled text:<br><br>
|
||||||
|
|
||||||
|
<img src="bm02.png" width="1015" height="532" alt=""><br><br>
|
||||||
|
<img src="bm03.png" width="1009" height="532" alt=""><br><br>
|
||||||
|
|
||||||
|
|
||||||
|
However, some resource types will be displayed in both its compiled form (eg dialog or popup menu) and in its decompiled text format.<br><br>
|
||||||
|
|
||||||
|
<img src="bm04.png" width="1012" height="530" alt=""><br><br>
|
||||||
|
|
||||||
|
Some resource types can only be displayed as a dump of raw byte data:<br><br>
|
||||||
|
|
||||||
|
<img src="bm05.png" width="1014" height="532" alt=""><br><br>
|
||||||
|
|
||||||
|
|
||||||
|
<strong>Using the internal editor to modify text-based resources:</strong><br><br>
|
||||||
|
|
||||||
|
Dialog, menu, string-table, message-table, accelerators and Borland form resources can all be easily edited and recompiled using the internal resource editor.<br><br>
|
||||||
|
|
||||||
|
<img src="bm06.png" width="1014" height="532" alt=""><br><br>
|
||||||
|
|
||||||
|
Dialog controls can be visually resized and/or moved, with any changes being reflected in the resource script automatically. Conversion between screen pixels and dialog units is done automatically. Select a control by clicking it in the displayed dialog. Alternatively, the Tab or Shift-Tab keys can be used to select next or prior controls respectively. The selected control will show resizing handles. To move a control without resizing, once the control has been selected, click and drag it to its new location. The arrow keys can also be used to move a control once it has been selected. A control can be resized by clicking and dragging one of its resizing handles. Alternatively, the arrow keys combined with the shift key can be used to resize a control.<br><br>
|
||||||
|
|
||||||
|
The Dialog Editor can be opened from the popup menu which is displayed by right-clicking the preview dialog. The Control Editor can be opened from the same menu once a control has been selected.<br><br>
|
||||||
|
|
||||||
|
<img src="bm09.png" width="1012" height="530" alt=""><br><br>
|
||||||
|
<img src="bm10.png" width="1012" height="530" alt=""><br><br>
|
||||||
|
|
||||||
|
|
||||||
|
New controls can also be added. The Control Editor supports almost all of Microsoft’s standard and common control classes. User defined custom classes can also be added to the predefined list of classes by carefully editing the “Dialog.def” text file which can be found in the same folder as Resource Hacker™. Toolbar buttons enable selection of the most commonly used controls. The top-left corner of the control to be added will default to the point at which the dialog was originally right-clicked.<br><br>
|
||||||
|
|
||||||
|
|
||||||
|
<strong>Replacing Images:</strong><br><br>
|
||||||
|
|
||||||
|
If the resource item to be replaced is an icon, cursor, or bitmap, the source can be an *.ico, *.cur or *.bmp file respectively or selected from a *.res or another *.exe file. Select Action|Replace Icon (Cursor or Bitmap) from the menu.<br><br>
|
||||||
|
|
||||||
|
<img src="bm14.png" width="558" height="530" alt=""><br><br>
|
||||||
|
|
||||||
|
|
||||||
|
<strong>Command Line Scripting:</strong><br><br>
|
||||||
|
All the functionality of Resource Hacker™ can be accessed from the command line (apart from viewing resources) without having to open the Resource Hacker™ GUI.<br>
|
||||||
|
Command line scripting can remove the drudgery entailed with repeating Resource Hacker™ tasks.<br><br>
|
||||||
|
|
||||||
|
Command line syntax has 2 forms:
|
||||||
|
<ol>
|
||||||
|
<li><strong>Single commands:</strong> ResourceHacker.exe command command_parameters
|
||||||
|
<li><strong>Multiple commands:</strong> ResourceHacker.exe -script multi_command_file (note that -script is very different to the -compile command, see below)
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
<div style="padding: 20px; 0px;">
|
||||||
|
|
||||||
|
<b>Single Commands:</b><br>
|
||||||
|
|
||||||
|
command and command_parameters:<br>
|
||||||
|
<table cellspacing="2" cellpadding="2" border="0">
|
||||||
|
<tr>
|
||||||
|
<td>-compile</td>
|
||||||
|
<td>resource_script.rc</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>-add</td>
|
||||||
|
<td>ExeFile, SaveAsFile, ResourceFile, ResourceMask</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>-addskip</td>
|
||||||
|
<td>ExeFile, SaveAsFile, ResourceFile, ResourceMask</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>-addoverwrite</td>
|
||||||
|
<td>ExeFile, SaveAsFile, ResourceFile, ResourceMask</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>-modify</td>
|
||||||
|
<td>ExeFile, SaveAsFile, ResourceFile, ResourceMask</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>-extract</td>
|
||||||
|
<td>ExeFile, ResourceFile, ResourceMask</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>-delete</td>
|
||||||
|
<td>ExeFile, SaveAsFile, ResourceMask</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
Notes:<br>
|
||||||
|
Each command parameter must be separated by a comma, but no comma is expected before the first parameter.<br>
|
||||||
|
Paths should be included with filenames.<br>
|
||||||
|
Filenames containing spaces should be enclosed within double quotes.<br><br>
|
||||||
|
|
||||||
|
|
||||||
|
The ResourceMask enables a command to be performed on either single or multiple resource items. It takes the form ResType,ResName,ResLang. (If ResType is a predefined type, then either its number or identifier can be used —e.g. the ResourceMask dialog,128,0 is identical to 5,128,0.) Any or all of the ResourceMask items can be omitted —e.g. dialog,, indicates that all dialogs are to be applied to the command irrespective of name or language, and ,,1049 indicates that all resources with Russian (1049) as the languageID will be applied to the command. An empty ResourceMask ,, indicates that the command will be applied to every resource irrespective of type, name or language.<br><br>
|
||||||
|
|
||||||
|
When adding or modifying items, the ResourceFile can be a RES file for any item type, a BMP file for BITMAP types, a CUR file for CURSORGROUP types, an ICO file for ICONGROUP types, and any file type for RCDATA and user defined resource types.<br><br>
|
||||||
|
|
||||||
|
When adding and modifying resources from files other than RES files then both ResType and ResName must be specified in the ResourceMask. If ResLang is omitted then the command applies to the first language item with matching type and name, otherwise, if no matching item exists then language neutral (0) is assumed.<br><br>
|
||||||
|
|
||||||
|
When extracting resources, and more than one item is implied by the ResourceMask, then the specified ResourceFile must be either a RES file or an RC file. When binary image resources are extracted to RC files, each image is also created as a separate binary (ICO, CUR, BMP, GIF, BIN) file. See the example below.<br><br>
|
||||||
|
|
||||||
|
ICON and CURSOR resources cannot be manipulated directly but are added, deleted, modified and extracted by using their respective ICONGROUP or CURSORGROUP. ICON and CURSOR can still be used but Resource Hacker™ will assume ICONGROUP or CURSORGROUP was intended.<br><br>
|
||||||
|
|
||||||
|
All actions or errors are logged to “ResourceHacker.log”.<br><br>
|
||||||
|
|
||||||
|
NB: If a script does not produce the desired results then check the log!<br><br>
|
||||||
|
|
||||||
|
<strong>Examples:</strong> (File paths have been omitted for clarity)<br><br>
|
||||||
|
<div class="maroon">
|
||||||
|
|
||||||
|
To compile a resource script (from *.rc to *.res)<br>
|
||||||
|
ResourceHacker.exe -compile my_resources.rc<br><br>
|
||||||
|
|
||||||
|
To add or update dialog name:maindlg lang:0 in MyProg.exe from UpdDlg.res<br>
|
||||||
|
ResourceHacker.exe -addoverwrite MyProg.exe, MyProgNew.exe, UpdDlg.res, dialog,maindlg,0<br><br>
|
||||||
|
|
||||||
|
To add or update bitmap name:128 in MyProg.exe from NewImage.bmp<br>
|
||||||
|
ResourceHacker.exe -addoverwrite MyProg.exe, MyProgNew.exe, NewImage.bmp , bitmap,128,<br><br>
|
||||||
|
|
||||||
|
To add or update all bitmaps in MyProg.exe from Images.res<br>
|
||||||
|
ResourceHacker.exe -addoverwrite MyProg.exe, MyProgNew.exe, Images.res, bitmap,,<br><br>
|
||||||
|
|
||||||
|
To add a “user-defined” binary resource (README,1,0) to MyProg.exe from ReadMe.html<br>
|
||||||
|
ResourceHacker.exe -addoverwrite MyProg.exe, MyProgNew.exe, ReadMe.html, readme,1,0<br><br>
|
||||||
|
|
||||||
|
To add all items in Images.res to MyProg.exe (but fail if any item already exists)<br>
|
||||||
|
ResourceHacker.exe -add MyProg.exe, MyProgNew.exe, Images.res ,,,<br><br>
|
||||||
|
|
||||||
|
To add all items in Images.res to MyProg.exe (skipping any existing items)<br>
|
||||||
|
ResourceHacker.exe -addskip MyProg.exe, MyProgNew.exe, Images.res ,,,<br><br>
|
||||||
|
|
||||||
|
To modify all items in MyProg.exe with the items in Images.res (ignoring any items in Images.res which do not exist in MyProg.exe)<br>
|
||||||
|
ResourceHacker.exe -modify MyProg.exe, MyProgNew.exe, Images.res , , ,<br><br>
|
||||||
|
|
||||||
|
To extract all icons from MyProg.exe to MyProgIcons.rc (creating MyProgIcons.rc, Icon_1.ico, Icon_2.ico , Icon_3.ico etc...)<br>
|
||||||
|
ResourceHacker.exe -extract MyProg.exe, MyProgIcons.rc, icongroup,,<br><br>
|
||||||
|
|
||||||
|
To delete GIF name:128 from MyProg.exe<br>
|
||||||
|
ResourceHacker.exe -delete MyProg.exe, MyProgNew.exe, gif,128,<br><br>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<strong>Multiple Commands:</strong><br><br>
|
||||||
|
|
||||||
|
<strong>syntax:</strong> ResourceHacker.exe -script ScriptFile<br>
|
||||||
|
ScriptFile is a text file with the following layout:<br>
|
||||||
|
<pre><span style="font-size: medium">
|
||||||
|
//comments are preceded by double slashes
|
||||||
|
[FILENAMES]
|
||||||
|
Exe=
|
||||||
|
SaveAs=
|
||||||
|
Log=
|
||||||
|
|
||||||
|
[COMMANDS]
|
||||||
|
-add ResourceSrc, ResourceMask
|
||||||
|
-addskip ResourceSrc, ResourceMask
|
||||||
|
-addoverwrite ResourceSrc, ResourceMask
|
||||||
|
-addoverwrite ResourceSrc, ResourceMask
|
||||||
|
-modify ResourceSrc, ResourceMask
|
||||||
|
-extract ResourceTgt, ResourceMask
|
||||||
|
-delete ResourceMask
|
||||||
|
</span></pre><br>
|
||||||
|
|
||||||
|
If Log is omitted then the default log —ResourceHacker.log— will be used.<br>
|
||||||
|
NB: If a script does not produce the desired results then check the log!<br>
|
||||||
|
|
||||||
|
<strong>Examples:</strong><br><br>
|
||||||
|
<div class="maroon">
|
||||||
|
<pre><span style="font-size: medium">
|
||||||
|
|
||||||
|
rh_script_myprog_rus.txt -
|
||||||
|
|
||||||
|
//This script deletes all Language Neutral (0)
|
||||||
|
//string-table, menu and dialog resource items
|
||||||
|
//in MyProg.exe before replacing them
|
||||||
|
//with Russian (1049) items...
|
||||||
|
|
||||||
|
[FILENAMES]
|
||||||
|
Exe= MyProg.exe
|
||||||
|
SaveAs= MyProg_Rus.exe
|
||||||
|
Log= MyProg_Rus.log
|
||||||
|
|
||||||
|
[COMMANDS]
|
||||||
|
-delete MENU,,0
|
||||||
|
-delete DIALOG,,0
|
||||||
|
-delete STRINGTABLE,,0
|
||||||
|
-add MyProg_Rus.res, MENU,,1049
|
||||||
|
-add MyProg_Rus.res, DIALOG,,1049
|
||||||
|
-add MyProg_Rus.res, STRINGTABLE,,1049
|
||||||
|
|
||||||
|
|
||||||
|
rh_script_myprog_upd_images.txt -
|
||||||
|
|
||||||
|
//This script updates 2 bitmaps and an
|
||||||
|
//icon in MyProg.exe ...
|
||||||
|
|
||||||
|
[FILENAMES]
|
||||||
|
Exe= MyProg.exe
|
||||||
|
SaveAs= MyProg_Updated.exe
|
||||||
|
|
||||||
|
[COMMANDS]
|
||||||
|
-addoverwrite Bitmap128.bmp, BITMAP,128,
|
||||||
|
-addoverwrite Bitmap129.bmp, BITMAP,129,0
|
||||||
|
-addoverwrite MainIcon.ico, ICONGROUP,MAINICON,0
|
||||||
|
|
||||||
|
|
||||||
|
rh_script_myprog_upd_all.txt -
|
||||||
|
|
||||||
|
//This script replaces all resources
|
||||||
|
//in MyProg.exe with all the resources
|
||||||
|
//in MyProgNew.res
|
||||||
|
|
||||||
|
[FILENAMES]
|
||||||
|
Exe= MyProg.exe
|
||||||
|
SaveAs= MyProg_Updated.exe
|
||||||
|
|
||||||
|
[COMMANDS]
|
||||||
|
-delete ,,, //delete all resources before...
|
||||||
|
-add MyProgNew.res ,,, //adding all the new resources
|
||||||
|
</span></pre>
|
||||||
|
</div><!-- maroon-->
|
||||||
|
</div><!-- script padding-->
|
||||||
|
|
||||||
|
|
||||||
|
<B>Licence to Use - Terms and Conditions:</B><BR>
|
||||||
|
<TABLE cellPadding=5 width="90%" align=center border=0>
|
||||||
|
<TR><TD>This Resource Hacker<SUP><FONT SIZE="1">TM</FONT></SUP> software is released as freeware provided that you agree to the following terms and conditions:
|
||||||
|
<ol>
|
||||||
|
<li>This software is not to be distributed via any website domain or any
|
||||||
|
other media without the prior written approval of the copyright owner.
|
||||||
|
<li>This software is not to be used in any way to illegally modify software.
|
||||||
|
</ol>
|
||||||
|
DISCLAIMER: A user of this Resource Hacker<SUP><FONT SIZE="1">TM</FONT></SUP> software acknowledges that he or she is receiving this software on an "as is" basis and the user is not relying on the accuracy or functionality of the software for any purpose. The user further acknowledges that any use of this software will be at the user's own risk and the copyright owner accepts no responsibility whatsoever arising from the use or application of the software. </TD></TR>
|
||||||
|
|
||||||
|
<TR><TD>The above licence terms constitute "copyright management information" within the meaning of Section 1202 of Title 17 of the United States Code and must not be altered or removed from the licensed works. Their alteration or removal from the licensed works, and the distribution of licensed works without all the above licence terms in an unaltered way, may contravene Section 1202 and give rise civil and/or criminal consequences.</TD></TR>
|
||||||
|
</TABLE><br>
|
||||||
|
|
||||||
|
|
||||||
|
<B>Executable Packers</B><BR><BR>
|
||||||
|
<TABLE cellPadding="5px" width="90%" align=center border=0>
|
||||||
|
|
||||||
|
<TR><TD bgcolor="#e0e0e0">Some executable files are "packed" or "compressed" using compression algorithms after they have been compiled. While this reduces the size of these files, it also makes it more difficult to view and modify resources. While it's possilbe to reverse any compression and still view and modify resources, I've decided not to do that on the assumption that that would be disrespecting the intentions of the file authors. When a "compressed" executable is opened with Resource Hacker<SUP><FONT SIZE="1">TM</FONT></SUP> only the types and names of resource will be visible.<BR>
|
||||||
|
</TD></TR>
|
||||||
|
</TABLE>
|
||||||
|
<BR><BR>
|
||||||
|
|
||||||
|
<A name="download"></A>
|
||||||
|
<B>Download</B><BR><BR>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li><A href="reshacker_setup.exe" ><strong>Setup executable </strong> (3.6MB)</A>
|
||||||
|
<li><A href="resource_hacker.zip" ><strong>'Portable' Zip file </strong> (3.6MB)</A>
|
||||||
|
</ul><br><br>
|
||||||
|
|
||||||
|
|
||||||
|
</div><!-- outer most formatting-->
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,306 @@
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Resource Hacker</title>
|
||||||
|
<STYLE type="text/css"><!--
|
||||||
|
body {
|
||||||
|
BACKGROUND-COLOR: #E5E2E5;
|
||||||
|
text-align: center;
|
||||||
|
box-sizing: border-box;
|
||||||
|
-moz-box-sizing: border-box;
|
||||||
|
padding: 20px 20px;
|
||||||
|
}
|
||||||
|
body, td, th {
|
||||||
|
margin: 20px auto 20px auto;
|
||||||
|
font-family: Verdana, Geneva, Arial, Helvetica, sans-serif;
|
||||||
|
}
|
||||||
|
a {
|
||||||
|
text-decoration: none;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
h1 {
|
||||||
|
font-size: 2.0em;
|
||||||
|
font-weight: bold;
|
||||||
|
margin: 0.2em 0em;
|
||||||
|
COLOR: #46845F;
|
||||||
|
}
|
||||||
|
h2 {
|
||||||
|
font-size: 1.7em;
|
||||||
|
margin: 0.2em 0em;
|
||||||
|
font-weight: bold;
|
||||||
|
COLOR: #009999;
|
||||||
|
}
|
||||||
|
h3 {
|
||||||
|
font-size: 1.2em;
|
||||||
|
padding: 0.2em;
|
||||||
|
BACKGROUND-COLOR: #BBCCCC;
|
||||||
|
}
|
||||||
|
TD.menu {BACKGROUND-COLOR: #D8D8B8; TEXT-ALIGN: center}
|
||||||
|
|
||||||
|
ol, ul {margin: .6em 0 .2em 1em; padding: 0px; list-style: outside;}
|
||||||
|
pre {margin: 0px; padding: 0px; BACKGROUND-COLOR: #F8F8F8; color: maroon;}
|
||||||
|
|
||||||
|
.caption {BACKGROUND-COLOR: #BACBDA; font-size: 1.3em; font-weight: bold; color: #000066}
|
||||||
|
.maroon {color: maroon;}
|
||||||
|
strong {color: #46845F;}
|
||||||
|
.smallfont {font-size: 0.7em;}
|
||||||
|
|
||||||
|
--></STYLE>
|
||||||
|
<meta name="viewport" content="device-width, initial-scale=1">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div align="center">
|
||||||
|
<div style="width: 800px; text-align: justify;">
|
||||||
|
|
||||||
|
<div style="BACKGROUND-COLOR: #BBCCCC; padding: 0 1em 0.7em 1em">
|
||||||
|
<h2>Resource Hacker<SUP><FONT SIZE="-1">TM</FONT></SUP></h2>
|
||||||
|
... a freeware resource compiler & decompiler for Windows® applications
|
||||||
|
</div><br>
|
||||||
|
|
||||||
|
<strong>Version 5.1.1</strong><br>
|
||||||
|
Last updated: 29 June 2018<br>
|
||||||
|
Copyright © 1999-2018 Angus Johnson<br>
|
||||||
|
<span class="maroon">Freeware - no nags, no ads and fully functional.</span><br>
|
||||||
|
|
||||||
|
<h3>Overview:</h3>
|
||||||
|
|
||||||
|
Resource Hacke<SUP><FONT SIZE="-1">TM</FONT></SUP> is a resource editor for 32bit and 64bit Windows® applications. It's both a <strong>resource compiler</strong> (for *.rc files), and a <strong>decompiler</strong> - enabling viewing and editing of resources in executables (*.exe; *.dll; *.scr; etc) and compiled resource libraries (*.res, *.mui). While Resource Hacker is primarily a GUI application, it also provides many options for compiling and decompiling resources from the command-line.<br><br>
|
||||||
|
|
||||||
|
<!-- <img src="bm00.png" width="985" height="651" alt=""><br><br> -->
|
||||||
|
<img src="rh_dlg_edit.png" width="791" height="514" alt="Resource Hacker"><br><br>
|
||||||
|
<img src="rh_menu2.png" width="738" height="400" alt=""><br><br>
|
||||||
|
|
||||||
|
|
||||||
|
<h3>Compiling:</h3>
|
||||||
|
|
||||||
|
Compiling can be initiated either by opening an existing resource script file, or by creating one from scratch using Resource Hacker's editor.<br><br>
|
||||||
|
|
||||||
|
A complete list of Resource-Definition Statements can be found <a href="https://msdn.microsoft.com/en-us/library/windows/desktop/aa381043(v=vs.85).aspx">here</a>.<br><br>
|
||||||
|
|
||||||
|
Additional features of Resource Hacker's compiler include: The #INCLUDE directive (to access definition statements in header files etc) can be nested to multiple levels, as can the #IF, and #IFDEF directives.
|
||||||
|
#DEFINE, #UNDEF, #IF, #ELIF, #ELSE, #IFDEF, #IFNDEF, #INCLUDE, and #PRAGMA directives are all supported. Strings, between double-quote (") characters, may contain typical 'C' style backslashed 'escaped' characters — \t , \n , \\ , \" , \x, \u and \377 (octal). A double-quote within a string must be 'escaped' using either a preceding backslash or with another double-quote. Script comments are preceded either by double forward-slashes (//) or by a semi-colon (;). Filenames with relative paths are allowed. Filenames that contain spaces must be enclosed within double-quote characters.<br><br>
|
||||||
|
|
||||||
|
Compiler error messages are reported, even errors nested within INCLUDE statements ...<br>
|
||||||
|
<img src="rh_scrpt_err.png" width="803" height="478" alt=""><br><br>
|
||||||
|
|
||||||
|
<h3>Viewing and Editing Resources:</h3>
|
||||||
|
|
||||||
|
Once a resource file has been opened, its resources will generally be displayed as either an image (or group of images) or as decompiled text. Binary resources, usually images, can't be edited directly with Resource Hacker, but they can still be very easily exported and imported once they've been modified by an external image editor. (I see no benefit in duplicating what third-party image editors do so well.) <br><br>
|
||||||
|
<img src="rh_icon.png" width="720" height="439" alt=""><br><br>
|
||||||
|
<img src="rh_scrpt.png" width="731" height="488" alt=""><br><br>
|
||||||
|
|
||||||
|
Menu and Dialog resource types have their own WYSIWYG designers:<br><br>
|
||||||
|
<img src="rh_mnu_ctrl.png" width="793" height="563" alt=""><br><br>
|
||||||
|
<img src="rh_dlg_ctrl.png" width="741" height="540" alt=""><br><br>
|
||||||
|
|
||||||
|
Binary resources that have unknown formats will be displayed as read-only binary text. (Any resource can also be viewed in this fashion if desired.)<br>
|
||||||
|
<img src="rh_binary.png" width="791" height="466" alt=""><br><br>
|
||||||
|
|
||||||
|
<h3>Other Actions:</h3>
|
||||||
|
|
||||||
|
<img src="rh_main_menu.png" width="803" height="493" alt=""><br><br><br>
|
||||||
|
|
||||||
|
<h3>Command Line Syntax:</h3>
|
||||||
|
Just about all the functionality of Resource Hacker can be accessed from the command line without having to open the Resource Hacker GUI.<br>
|
||||||
|
Command line instructions and Resource Hacker scripts can remove the drudgery entailed with repeating Resource Hacker tasks.<br>
|
||||||
|
Command-line instructions are a combination of switch statements followed by switch parameters as explained in the following table:
|
||||||
|
|
||||||
|
<strong>Command line statements:</strong><br><br>
|
||||||
|
<table cellspacing="2" cellpadding="2" border="0">
|
||||||
|
<tr>
|
||||||
|
<th align="left">Switch </th><th> </th>
|
||||||
|
<th align="left">Parameter</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td valign="top">-open</td><td> </td>
|
||||||
|
<td>filename - the name of the file that is to be modified. It should be a Windows PE file (*.exe, *.dll etc) or a compiled or uncompiled resouce file (*.res or *.rc)</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td valign="top">-save</td><td> </td>
|
||||||
|
<td>filename - the new name of the modified or newly created file, either a modified opened file or an extracted resource</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td valign="top">-resource</td><td> </td>
|
||||||
|
<td>filename - contains a resource being added to the opened file.</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td valign="top">-action</td><td> </td>
|
||||||
|
<td>action to be performed on the opened file<br>
|
||||||
|
<ul style="margin: .6em 0 .2em 1em; padding: 0px; list-style: outside;">
|
||||||
|
<li><strong>add</strong> - add a resource, but fails if it already exists
|
||||||
|
<li><strong>addoverwrite</strong> - add a resource, and overwriting if it already exists
|
||||||
|
<li><strong>addskip</strong> - add a resource, but skipping if it already exists
|
||||||
|
<li><strong>compile</strong> - compiles a resource script file (*.rc) to a binary resource file (*.res)
|
||||||
|
<li><strong>delete</strong> - delete a resource
|
||||||
|
<li><strong>extract</strong> - extract a resource
|
||||||
|
<li><strong>modify</strong> - modify a resource
|
||||||
|
</ul>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td valign="top">-mask</td><td> </td>
|
||||||
|
<td>resource mask - Type,Name,Language<br>
|
||||||
|
commas are mandatory but each of Type, Name & Language are optional</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td valign="top">-log</td><td> </td>
|
||||||
|
<td>Filename or <strong>CONSOLE</strong> or <strong>NUL</strong><br>
|
||||||
|
CONSOLE can be abbreviated to <strong>CON</strong><br>
|
||||||
|
Logs the details of the operation performed<br>
|
||||||
|
If this switch is omitted, the log will be written to <em>resourcehacker.log</em></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td valign="top">-script</td><td> </td>
|
||||||
|
<td>filename - contains a multi-command script, NOT a resource script for more info: -help script</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td valign="top">-help</td><td> </td>
|
||||||
|
<td>options - command-line or script (always logged to CONSOLE) other switches are ignored.</td>
|
||||||
|
</tr>
|
||||||
|
</table><br>
|
||||||
|
|
||||||
|
Notes:
|
||||||
|
<ol>
|
||||||
|
<li>Switch identifiers (except -script) may be abbreviated down to a single char (eg -res or -r).
|
||||||
|
<li>Switch instructions do not have to be in any particular order.
|
||||||
|
<li>File names that contain spaces must be enclosed within double quotes.
|
||||||
|
</ol>
|
||||||
|
|
||||||
|
<br>
|
||||||
|
<strong>Batch file Examples</strong> <span class="smallfont">(using rh.exe instead of ResourceHacker.exe in places for brevity)</span><br><br>
|
||||||
|
|
||||||
|
reshack_help.bat:
|
||||||
|
<pre>
|
||||||
|
ResourceHacker.exe -help
|
||||||
|
@pause :: to see the console output before the CMD window closes.</pre><br>
|
||||||
|
|
||||||
|
reshack_compile_res_script.bat:
|
||||||
|
<pre>
|
||||||
|
rh.exe -open .\in\resources.rc -save .\out\resources.res -action compile -log NUL</pre><br>
|
||||||
|
|
||||||
|
reshack_add_icon_to_old.bat:
|
||||||
|
<pre>
|
||||||
|
rh.exe -open old.exe -save new.exe -action addskip -res my.ico -mask ICONGROUP,MAINICON,</pre><br>
|
||||||
|
|
||||||
|
reshack_extract_icon_from_source.bat:
|
||||||
|
<pre>
|
||||||
|
rh.exe -open source.exe -save icons.ico -action extract -mask ICONGROUP,MAINICON, -log CON
|
||||||
|
@pause</pre><br>
|
||||||
|
|
||||||
|
reshack_extract_all_icons_from_source.bat:
|
||||||
|
<pre>
|
||||||
|
rh.exe -open source.exe -save savedicons.rc -action extract -mask ICONGROUP,, -log rh.log</pre><br>
|
||||||
|
|
||||||
|
reshack_execute_my_script.bat:
|
||||||
|
<pre>
|
||||||
|
ResourceHacker.exe -script myscript.txt</pre><br>
|
||||||
|
|
||||||
|
|
||||||
|
<strong>Resource Hacker Scripts:</strong><br><br>
|
||||||
|
|
||||||
|
Resource Hacker Scripts are executed from the command-line using the following syntax:<br><br>
|
||||||
|
|
||||||
|
<pre> ResourceHacker.exe -script ScriptFile</pre><br>
|
||||||
|
|
||||||
|
Resource Hacker Scripts are text files with the following format:<br><br>
|
||||||
|
<pre>
|
||||||
|
//comments are preceded by double slashes
|
||||||
|
[FILENAMES]
|
||||||
|
Open=
|
||||||
|
Save=
|
||||||
|
Log=
|
||||||
|
[COMMANDS]
|
||||||
|
//one or more of the following commands ...
|
||||||
|
-add SourceFile, ResourceMask
|
||||||
|
-addskip SourceFile, ResourceMask
|
||||||
|
-addoverwrite SourceFile, ResourceMask
|
||||||
|
-addoverwrite SourceFile, ResourceMask
|
||||||
|
-modify SourceFile, ResourceMask
|
||||||
|
-extract TargetFile, ResourceMask
|
||||||
|
-delete ResourceMask</pre><br>
|
||||||
|
|
||||||
|
Note: Filenames that include spaces must be enclosed within double quotes.<br><br>
|
||||||
|
|
||||||
|
<strong>Resource Hacker Script examples:</strong><br><br>
|
||||||
|
|
||||||
|
rh_script_myprog_rus.txt -
|
||||||
|
<pre>
|
||||||
|
|
||||||
|
//This script deletes all Language Neutral (0)
|
||||||
|
//string-table, menu and dialog resource items
|
||||||
|
//in MyProg.exe before replacing them
|
||||||
|
//with Russian (1049) items...
|
||||||
|
[FILENAMES]
|
||||||
|
Exe= MyProg.exe
|
||||||
|
SaveAs= MyProg_Rus.exe
|
||||||
|
Log= MyProg_Rus.log
|
||||||
|
[COMMANDS]
|
||||||
|
-delete MENU,,0
|
||||||
|
-delete DIALOG,,0
|
||||||
|
-delete STRINGTABLE,,0
|
||||||
|
-add MyProg_Rus.res, MENU,,1049
|
||||||
|
-add MyProg_Rus.res, DIALOG,,1049
|
||||||
|
-add MyProg_Rus.res, STRINGTABLE,,1049</pre><br>
|
||||||
|
|
||||||
|
rh_script_myprog_upd_images.txt -
|
||||||
|
<pre>
|
||||||
|
|
||||||
|
//This script updates 2 bitmaps and an
|
||||||
|
//icon in MyProg.exe ...
|
||||||
|
[FILENAMES]
|
||||||
|
Exe= MyProg.exe
|
||||||
|
SaveAs= MyProg_Updated.exe
|
||||||
|
[COMMANDS]
|
||||||
|
-addoverwrite Bitmap128.bmp, BITMAP,128,
|
||||||
|
-addoverwrite Bitmap129.bmp, BITMAP,129,0
|
||||||
|
-addoverwrite MainIcon.ico, ICONGROUP,MAINICON,0</pre><br>
|
||||||
|
|
||||||
|
rh_script_myprog_upd_all.txt -
|
||||||
|
<pre>
|
||||||
|
|
||||||
|
//This script replaces all resources
|
||||||
|
//in MyProg.exe with all the resources
|
||||||
|
//in MyProgNew.res
|
||||||
|
[FILENAMES]
|
||||||
|
Exe= MyProg.exe
|
||||||
|
SaveAs= MyProg_Updated.exe
|
||||||
|
[COMMANDS]
|
||||||
|
-delete ,,, //delete all resources before...
|
||||||
|
-add MyProgNew.res ,,, //adding all the new resources</pre><br><br>
|
||||||
|
|
||||||
|
|
||||||
|
<h3>"Packed" or "Compressed" Executables:</h3>
|
||||||
|
Some executable files are "packed" or "compressed" using compression algorithms once they've been compiled. This reduces their file size and it also makes it marginally more difficult to view and modify resources. I suspect this 'hiding' of resources is (or was) the prevailing objective of this process. Consequently, while it's generally not difficult to reverse engineer this 'packing' process too, in deference to these authors, I've chosen not to do this with Resource Hacker. As a side note, "packed" executables have become quite uncommon over the last 5-10 years. A large part of this is because executables are now almost always compressed within installers or ZIP packages. But software authors also seem to be exposing more, rather than less information in their executable files' resource sections. I suspect that earlier concerns about the loss of intellectual property with reversed engineering have finally been allayed.<BR><BR><br>
|
||||||
|
|
||||||
|
|
||||||
|
<h3>Licence to Use - Terms and Conditions:</h3>
|
||||||
|
This Resource Hacker<SUP><FONT SIZE="1">TM</FONT></SUP> software is released as freeware provided that you agree to the following terms and conditions:
|
||||||
|
<ol>
|
||||||
|
<li>This software is not to be distributed via any website domain or any
|
||||||
|
other media without the prior written approval of the copyright owner.
|
||||||
|
<li>This software is not to be used in any way to illegally modify software.
|
||||||
|
</ol>
|
||||||
|
DISCLAIMER: A user of this Resource Hacker<SUP><FONT SIZE="1">TM</FONT></SUP> software acknowledges that he or she is receiving this software on an "as is" basis and the user is not relying on the accuracy or functionality of the software for any purpose. The user further acknowledges that any use of this software will be at the user's own risk and the copyright owner accepts no responsibility whatsoever arising from the use or application of the software.<br><br>
|
||||||
|
|
||||||
|
The above licence terms constitute "copyright management information" within the meaning of Section 1202 of Title 17 of the United States Code and must not be altered or removed from the licensed works. Their alteration or removal from the licensed works, and the distribution of licensed works without all the above licence terms in an unaltered way, may contravene Section 1202 and give rise civil and/or criminal consequences.<br><br><br>
|
||||||
|
|
||||||
|
|
||||||
|
<strong>Changes since version 5.1.0:</strong>
|
||||||
|
<ul>
|
||||||
|
<li class="indent">Bugfix: incorrect editor fonts when displaying multibyte characters
|
||||||
|
<li class="indent">Bugfix: compiler mishandled hex. escape chars with ambiguous trailing text.
|
||||||
|
<li class="indent">Bugfix: incorrect handling of #define directive
|
||||||
|
<li class="indent">Bugfix: incorrect handling of statusbar alignment in dialog resources
|
||||||
|
<li class="indent">Bugfix: line numbering broken when swapping between editing and binary views
|
||||||
|
<li class="indent">Bugfix: relative paths in filenames was broken
|
||||||
|
<li class="indent">Bugfix: incorrect error reporting while parsing some #include files
|
||||||
|
<li class="indent">Bugfix: extracting resources using commandline scripts was buggy.
|
||||||
|
<li class="indent">Added: added support for multi-line comments /* ... */
|
||||||
|
<li class="indent">Updated: can now open and save non-resource type text files
|
||||||
|
<li class="indent">Updated: context help improved
|
||||||
|
</ul><br><br>
|
||||||
|
|
||||||
|
</div> </div><!-- outer most formatting-->
|
||||||
|
</body>
|
||||||
|
</html>
|
After Width: | Height: | Size: 131 KiB |
After Width: | Height: | Size: 56 KiB |
After Width: | Height: | Size: 57 KiB |
After Width: | Height: | Size: 62 KiB |
After Width: | Height: | Size: 114 KiB |
After Width: | Height: | Size: 83 KiB |
After Width: | Height: | Size: 65 KiB |
After Width: | Height: | Size: 81 KiB |
After Width: | Height: | Size: 69 KiB |
After Width: | Height: | Size: 61 KiB |
|
@ -0,0 +1,19 @@
|
||||||
|
Resource Hacker™
|
||||||
|
Copyright © 1998-2023 Angus Johnson
|
||||||
|
Freeware - no nags, no ads and fully functional.
|
||||||
|
|
||||||
|
|
||||||
|
Overview:
|
||||||
|
|
||||||
|
Resource Hacker™ is a resource editor for 32bit and 64bit Windows® applications. It's both a resource compiler (for *.rc files), and a decompiler - enabling viewing and editing of resources in executables (*.exe; *.dll; *.scr; etc) and compiled resource libraries (*.res, *.mui). While Resource Hacker™ is primarily a GUI application, it also provides many options for compiling and decompiling resources from the command-line.
|
||||||
|
|
||||||
|
Licence to Use - Terms and Conditions:
|
||||||
|
|
||||||
|
This Resource Hacker™ software is released as freeware provided that you agree to the following terms and conditions:
|
||||||
|
This software is not to be distributed via any website domain or any other media without the prior written approval of the copyright owner.
|
||||||
|
|
||||||
|
This software is not to be used in any way to illegally modify software.
|
||||||
|
|
||||||
|
DISCLAIMER: A user of this Resource Hacker™ software acknowledges that he or she is receiving this software on an "as is" basis and the user is not relying on the accuracy or functionality of the software for any purpose. The user further acknowledges that any use of this software will be at the user's own risk and the copyright owner accepts no responsibility whatsoever arising from the use or application of the software.
|
||||||
|
|
||||||
|
The above licence terms constitute "copyright management information" within the meaning of Section 1202 of Title 17 of the United States Code and must not be altered or removed from the licensed works. Their alteration or removal from the licensed works, and the distribution of licensed works without all the above licence terms in an unaltered way, may contravene Section 1202 and give rise civil and/or criminal consequences.
|
|
@ -0,0 +1,714 @@
|
||||||
|
//Definitions of default DIALOG and CONTROL classes for the dialog editor.
|
||||||
|
//This is a text file to enable simple customization and the addition of custom controls
|
||||||
|
|
||||||
|
[DIALOG]
|
||||||
|
//default values for dialogs...
|
||||||
|
width=300
|
||||||
|
height=150
|
||||||
|
fontname=Arial
|
||||||
|
fontsize=9
|
||||||
|
style=DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
|
language=LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||||
|
//style flags and MASK values
|
||||||
|
sf=DS_ABSALIGN
|
||||||
|
sf=DS_SYSMODAL
|
||||||
|
sf=DS_LOCALEDIT
|
||||||
|
sf=DS_SETFONT
|
||||||
|
sf=DS_MODALFRAME
|
||||||
|
sf=DS_NOIDLEMSG
|
||||||
|
sf=DS_SETFOREGROUND
|
||||||
|
sf=DS_FIXEDSYS
|
||||||
|
sf=DS_NOFAILCREATE
|
||||||
|
sf=DS_CONTROL
|
||||||
|
sf=DS_CENTER
|
||||||
|
sf=DS_CENTERMOUSE
|
||||||
|
sf=DS_CONTEXTHELP
|
||||||
|
sf=WS_CHILD, (WS_POPUP | WS_CHILD) //ie: either WS_POPUP or WS_CHILD but not both!
|
||||||
|
sf=WS_POPUP, (WS_CHILD | WS_POPUP)
|
||||||
|
sf=WS_CLIPSIBLINGS
|
||||||
|
sf=WS_CLIPCHILDREN
|
||||||
|
sf=WS_DISABLED
|
||||||
|
sf=WS_VISIBLE
|
||||||
|
sf=WS_CAPTION
|
||||||
|
sf=WS_BORDER, WS_CAPTION
|
||||||
|
sf=WS_DLGFRAME, WS_CAPTION
|
||||||
|
sf=WS_MINIMIZEBOX
|
||||||
|
sf=WS_MAXIMIZEBOX
|
||||||
|
sf=WS_SYSMENU
|
||||||
|
sf=WS_THICKFRAME
|
||||||
|
sf=WS_TILEDWINDOW
|
||||||
|
sf=WS_POPUPWINDOW
|
||||||
|
sf=WS_MINIMIZE
|
||||||
|
sf=WS_MAXIMIZE
|
||||||
|
sf=WS_VSCROLL
|
||||||
|
sf=WS_HSCROLL
|
||||||
|
//exstyle flags and MASK values
|
||||||
|
esf=WS_EX_DLGMODALFRAME
|
||||||
|
esf=WS_EX_NOPARENTNOTIFY
|
||||||
|
esf=WS_EX_TOPMOST
|
||||||
|
esf=WS_EX_ACCEPTFILES
|
||||||
|
esf=WS_EX_TRANSPARENT
|
||||||
|
esf=WS_EX_MDICHILD
|
||||||
|
esf=WS_EX_TOOLWINDOW
|
||||||
|
esf=WS_EX_WINDOWEDGE
|
||||||
|
esf=WS_EX_CLIENTEDGE
|
||||||
|
esf=WS_EX_CONTEXTHELP
|
||||||
|
esf=WS_EX_RIGHT
|
||||||
|
esf=WS_EX_LEFT, WS_EX_RIGHT
|
||||||
|
esf=WS_EX_RTLREADING
|
||||||
|
esf=WS_EX_LTRREADING, WS_EX_RTLREADING
|
||||||
|
esf=WS_EX_LEFTSCROLLBAR
|
||||||
|
esf=WS_EX_RIGHTSCROLLBAR, WS_EX_LEFTSCROLLBAR
|
||||||
|
esf=WS_EX_CONTROLPARENT
|
||||||
|
esf=WS_EX_STATICEDGE
|
||||||
|
esf=WS_EX_APPWINDOW
|
||||||
|
esf=WS_EX_OVERLAPPEDWINDOW
|
||||||
|
esf=WS_EX_PALETTEWINDOW
|
||||||
|
esf=WS_EX_LAYERED
|
||||||
|
esf=WS_EX_NOINHERITLAYOUT
|
||||||
|
esf=WS_EX_LAYOUTRTL
|
||||||
|
esf=WS_EX_NOACTIVATE
|
||||||
|
|
||||||
|
|
||||||
|
[BUTTON]
|
||||||
|
//default values ...
|
||||||
|
width=60
|
||||||
|
height=14
|
||||||
|
style= WS_CHILD | WS_VISIBLE | WS_TABSTOP
|
||||||
|
//style flags and MASK values
|
||||||
|
sf=BS_PUSHBUTTON, 0x1F
|
||||||
|
sf=BS_DEFPUSHBUTTON, 0x1F
|
||||||
|
sf=BS_CHECKBOX, 0x1F
|
||||||
|
sf=BS_AUTOCHECKBOX, 0x1F
|
||||||
|
sf=BS_3STATE, 0x1F
|
||||||
|
sf=BS_AUTO3STATE, 0x1F
|
||||||
|
sf=BS_RADIOBUTTON, 0x1F
|
||||||
|
sf=BS_AUTORADIOBUTTON, 0x1F
|
||||||
|
sf=BS_GROUPBOX, 0x1F
|
||||||
|
sf=BS_USERBUTTON, 0x1F
|
||||||
|
sf=BS_OWNERDRAW, 0x1F
|
||||||
|
sf=BS_SPLITBUTTON, 0x1F
|
||||||
|
sf=BS_DEFSPLITBUTTON, 0x1F
|
||||||
|
sf=BS_COMMANDLINK, 0x1F
|
||||||
|
sf=BS_DEFCOMMANDLINK, 0x1F
|
||||||
|
sf=BS_LEFTTEXT
|
||||||
|
sf=BS_ICON
|
||||||
|
sf=BS_BITMAP
|
||||||
|
sf=BS_LEFT, BS_CENTER
|
||||||
|
sf=BS_RIGHT, BS_CENTER
|
||||||
|
sf=BS_CENTER, BS_CENTER
|
||||||
|
sf=BS_TOP, BS_VCENTER
|
||||||
|
sf=BS_BOTTOM, BS_VCENTER
|
||||||
|
sf=BS_VCENTER, BS_VCENTER
|
||||||
|
sf=BS_PUSHLIKE
|
||||||
|
sf=BS_MULTILINE
|
||||||
|
sf=BS_NOTIFY
|
||||||
|
sf=BS_FLAT
|
||||||
|
|
||||||
|
[CHECKBOX]
|
||||||
|
//default values ...
|
||||||
|
width=60
|
||||||
|
height=14
|
||||||
|
style= BS_CHECKBOX | WS_CHILD | WS_VISIBLE | WS_TABSTOP
|
||||||
|
classname=BUTTON
|
||||||
|
//style flags and MASK values
|
||||||
|
sf=BS_CHECKBOX, 0x1F
|
||||||
|
sf=BS_AUTOCHECKBOX, 0x1F
|
||||||
|
sf=BS_3STATE, 0x1F
|
||||||
|
sf=BS_AUTO3STATE, 0x1F
|
||||||
|
sf=BS_LEFTTEXT
|
||||||
|
sf=BS_LEFT, BS_CENTER
|
||||||
|
sf=BS_RIGHT, BS_CENTER
|
||||||
|
sf=BS_CENTER, BS_CENTER
|
||||||
|
sf=BS_TOP, BS_VCENTER
|
||||||
|
sf=BS_BOTTOM, BS_VCENTER
|
||||||
|
sf=BS_VCENTER, BS_VCENTER
|
||||||
|
sf=BS_PUSHLIKE
|
||||||
|
sf=BS_MULTILINE
|
||||||
|
sf=BS_NOTIFY
|
||||||
|
sf=BS_FLAT
|
||||||
|
|
||||||
|
[RADIOBUTTON]
|
||||||
|
//default values ...
|
||||||
|
width=60
|
||||||
|
height=14
|
||||||
|
style= BS_RADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP
|
||||||
|
classname=BUTTON
|
||||||
|
//style flags and MASK values
|
||||||
|
sf=BS_RADIOBUTTON, 0x1F
|
||||||
|
sf=BS_AUTORADIOBUTTON, 0x1F
|
||||||
|
sf=BS_LEFTTEXT
|
||||||
|
sf=BS_LEFT, BS_CENTER
|
||||||
|
sf=BS_RIGHT, BS_CENTER
|
||||||
|
sf=BS_CENTER, BS_CENTER
|
||||||
|
sf=BS_TOP, BS_VCENTER
|
||||||
|
sf=BS_BOTTOM, BS_VCENTER
|
||||||
|
sf=BS_VCENTER, BS_VCENTER
|
||||||
|
sf=BS_PUSHLIKE
|
||||||
|
sf=BS_MULTILINE
|
||||||
|
sf=BS_NOTIFY
|
||||||
|
sf=BS_FLAT
|
||||||
|
|
||||||
|
[GROUPBOX]
|
||||||
|
//default values ...
|
||||||
|
width=60
|
||||||
|
height=60
|
||||||
|
style= BS_GROUPBOX | WS_CHILD | WS_VISIBLE
|
||||||
|
classname=BUTTON
|
||||||
|
//style flags and MASK values
|
||||||
|
sf=BS_GROUPBOX, 0x1F
|
||||||
|
sf=BS_LEFT, BS_CENTER
|
||||||
|
sf=BS_RIGHT, BS_CENTER
|
||||||
|
sf=BS_CENTER, BS_CENTER
|
||||||
|
sf=BS_NOTIFY
|
||||||
|
sf=BS_FLAT
|
||||||
|
|
||||||
|
[COMBOBOX]
|
||||||
|
//default values ...
|
||||||
|
width=60
|
||||||
|
height=60
|
||||||
|
style= WS_CHILD | WS_VISIBLE | WS_TABSTOP | CBS_DROPDOWN
|
||||||
|
//style flags and MASK values
|
||||||
|
sf=CBS_SIMPLE, CBS_DROPDOWNLIST
|
||||||
|
sf=CBS_DROPDOWN, CBS_DROPDOWNLIST
|
||||||
|
sf=CBS_DROPDOWNLIST, CBS_DROPDOWNLIST
|
||||||
|
sf=CBS_OWNERDRAWFIXED
|
||||||
|
sf=CBS_OWNERDRAWVARIABLE
|
||||||
|
sf=CBS_AUTOHSCROLL
|
||||||
|
sf=CBS_OEMCONVERT
|
||||||
|
sf=CBS_SORT
|
||||||
|
sf=CBS_HASSTRINGS
|
||||||
|
sf=CBS_NOINTEGRALHEIGHT
|
||||||
|
sf=CBS_DISABLENOSCROLL
|
||||||
|
sf=CBS_UPPERCASE
|
||||||
|
sf=CBS_LOWERCASE
|
||||||
|
|
||||||
|
[EDIT]
|
||||||
|
//default values ...
|
||||||
|
width=60
|
||||||
|
height=14
|
||||||
|
style= WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP
|
||||||
|
//style flags and MASK values
|
||||||
|
sf=ES_LEFT, (ES_CENTER | ES_RIGHT)
|
||||||
|
sf=ES_CENTER, (ES_CENTER | ES_RIGHT)
|
||||||
|
sf=ES_RIGHT, (ES_CENTER | ES_RIGHT)
|
||||||
|
sf=ES_MULTILINE
|
||||||
|
sf=ES_UPPERCASE
|
||||||
|
sf=ES_LOWERCASE
|
||||||
|
sf=ES_PASSWORD
|
||||||
|
sf=ES_AUTOVSCROLL
|
||||||
|
sf=ES_AUTOHSCROLL
|
||||||
|
sf=ES_NOHIDESEL
|
||||||
|
sf=ES_OEMCONVERT
|
||||||
|
sf=ES_READONLY
|
||||||
|
sf=ES_WANTRETURN
|
||||||
|
sf=ES_NUMBER
|
||||||
|
|
||||||
|
[MEMO]
|
||||||
|
//default values ...
|
||||||
|
width=60
|
||||||
|
height=60
|
||||||
|
classname=EDIT
|
||||||
|
style= ES_MULTILINE | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP | WS_HSCROLL | WS_VSCROLL
|
||||||
|
//style flags and MASK values
|
||||||
|
sf=ES_LEFT, (ES_CENTER | ES_RIGHT)
|
||||||
|
sf=ES_CENTER, (ES_CENTER | ES_RIGHT)
|
||||||
|
sf=ES_RIGHT, (ES_CENTER | ES_RIGHT)
|
||||||
|
sf=ES_MULTILINE
|
||||||
|
sf=ES_UPPERCASE
|
||||||
|
sf=ES_LOWERCASE
|
||||||
|
sf=ES_PASSWORD
|
||||||
|
sf=ES_AUTOVSCROLL
|
||||||
|
sf=ES_AUTOHSCROLL
|
||||||
|
sf=ES_NOHIDESEL
|
||||||
|
sf=ES_OEMCONVERT
|
||||||
|
sf=ES_READONLY
|
||||||
|
sf=ES_WANTRETURN
|
||||||
|
sf=ES_NUMBER
|
||||||
|
|
||||||
|
[LISTBOX]
|
||||||
|
//default values ...
|
||||||
|
width=60
|
||||||
|
height=60
|
||||||
|
style= WS_CHILD | WS_VISIBLE | WS_TABSTOP | LBS_STANDARD
|
||||||
|
//LBS_STANDARD = (LBS_NOTIFY | LBS_SORT | WS_VSCROLL | WS_BORDER)
|
||||||
|
//style flags
|
||||||
|
sf=LBS_NOTIFY
|
||||||
|
sf=LBS_SORT
|
||||||
|
sf=LBS_NOREDRAW
|
||||||
|
sf=LBS_MULTIPLESEL
|
||||||
|
sf=LBS_OWNERDRAWFIXED
|
||||||
|
sf=LBS_OWNERDRAWVARIABLE
|
||||||
|
sf=LBS_HASSTRINGS
|
||||||
|
sf=LBS_USETABSTOPS
|
||||||
|
sf=LBS_NOINTEGRALHEIGHT
|
||||||
|
sf=LBS_MULTICOLUMN
|
||||||
|
sf=LBS_WANTKEYBOARDINPUT
|
||||||
|
sf=LBS_EXTENDEDSEL
|
||||||
|
sf=LBS_DISABLENOSCROLL
|
||||||
|
sf=LBS_NODATA
|
||||||
|
sf=LBS_NOSEL
|
||||||
|
|
||||||
|
[SCROLLBAR]
|
||||||
|
//default values ...
|
||||||
|
width=30
|
||||||
|
height=14
|
||||||
|
style= WS_CHILD | WS_VISIBLE
|
||||||
|
//style flags and MASK values
|
||||||
|
sf=SBS_HORZ, SBS_VERT
|
||||||
|
sf=SBS_VERT, SBS_VERT
|
||||||
|
sf=SBS_TOPALIGN
|
||||||
|
sf=SBS_LEFTALIGN
|
||||||
|
sf=SBS_BOTTOMALIGN
|
||||||
|
sf=SBS_RIGHTALIGN
|
||||||
|
sf=SBS_SIZEBOXTOPLEFTALIGN
|
||||||
|
sf=SBS_SIZEBOXBOTTOMRIGHTALIGN
|
||||||
|
sf=SBS_SIZEBOX
|
||||||
|
sf=SBS_SIZEGRIP
|
||||||
|
|
||||||
|
[STATIC]
|
||||||
|
//default values ...
|
||||||
|
width=32
|
||||||
|
height=32
|
||||||
|
style= WS_CHILD | WS_VISIBLE | WS_GROUP
|
||||||
|
//style flags and MASK values
|
||||||
|
sf=SS_LEFT, 0x1F
|
||||||
|
sf=SS_CENTER, 0x1F
|
||||||
|
sf=SS_RIGHT, 0x1F
|
||||||
|
sf=SS_ICON, 0x1F
|
||||||
|
sf=SS_BLACKRECT, 0x1F
|
||||||
|
sf=SS_GRAYRECT, 0x1F
|
||||||
|
sf=SS_WHITERECT, 0x1F
|
||||||
|
sf=SS_BLACKFRAME, 0x1F
|
||||||
|
sf=SS_GRAYFRAME, 0x1F
|
||||||
|
sf=SS_WHITEFRAME, 0x1F
|
||||||
|
sf=SS_USERITEM, 0x1F
|
||||||
|
sf=SS_SIMPLE, 0x1F
|
||||||
|
sf=SS_LEFTNOWORDWRAP, 0x1F
|
||||||
|
sf=SS_BITMAP, 0x1F
|
||||||
|
sf=SS_OWNERDRAW, 0x1F
|
||||||
|
sf=SS_ENHMETAFILE, 0x1F
|
||||||
|
sf=SS_ETCHEDHORZ, 0x1F
|
||||||
|
sf=SS_ETCHEDVERT, 0x1F
|
||||||
|
sf=SS_ETCHEDFRAME, 0x1F
|
||||||
|
sf=SS_NOPREFIX
|
||||||
|
sf=SS_NOTIFY
|
||||||
|
sf=SS_CENTERIMAGE
|
||||||
|
sf=SS_RIGHTJUST
|
||||||
|
sf=SS_REALSIZEIMAGE
|
||||||
|
sf=SS_SUNKEN
|
||||||
|
sf=SS_ENDELLIPSIS, SS_ELLIPSISMASK
|
||||||
|
sf=SS_PATHELLIPSIS, SS_ELLIPSISMASK
|
||||||
|
sf=SS_WORDELLIPSIS, SS_ELLIPSISMASK
|
||||||
|
|
||||||
|
[LTEXT]
|
||||||
|
//default values ...
|
||||||
|
width=60
|
||||||
|
height=18
|
||||||
|
classname=STATIC
|
||||||
|
style= WS_CHILD | WS_VISIBLE | WS_GROUP
|
||||||
|
//style flags
|
||||||
|
sf=SS_NOPREFIX
|
||||||
|
sf=SS_NOTIFY
|
||||||
|
sf=SS_CENTERIMAGE
|
||||||
|
sf=SS_RIGHTJUST
|
||||||
|
sf=SS_SUNKEN
|
||||||
|
|
||||||
|
[ICON]
|
||||||
|
//default values ...
|
||||||
|
width=20
|
||||||
|
height=20
|
||||||
|
classname=STATIC
|
||||||
|
style= WS_CHILD | WS_VISIBLE | WS_GROUP | SS_ICON
|
||||||
|
//style flags
|
||||||
|
sf=SS_ICON, 0x1F
|
||||||
|
sf=SS_NOPREFIX
|
||||||
|
sf=SS_NOTIFY
|
||||||
|
sf=SS_CENTERIMAGE
|
||||||
|
sf=SS_RIGHTJUST
|
||||||
|
sf=SS_REALSIZEIMAGE
|
||||||
|
sf=SS_SUNKEN
|
||||||
|
|
||||||
|
[BITMAP]
|
||||||
|
//default values ...
|
||||||
|
width=60
|
||||||
|
height=60
|
||||||
|
classname=STATIC
|
||||||
|
style= WS_CHILD | WS_VISIBLE | WS_GROUP | SS_BITMAP
|
||||||
|
//style flags
|
||||||
|
sf=SS_BITMAP, 0x1F
|
||||||
|
sf=SS_NOPREFIX
|
||||||
|
sf=SS_NOTIFY
|
||||||
|
sf=SS_CENTERIMAGE
|
||||||
|
sf=SS_RIGHTJUST
|
||||||
|
sf=SS_REALSIZEIMAGE
|
||||||
|
sf=SS_SUNKEN
|
||||||
|
|
||||||
|
["RICHEDIT"]
|
||||||
|
//default values ...
|
||||||
|
width=60
|
||||||
|
height=60
|
||||||
|
style= ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_WANTRETURN | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP
|
||||||
|
//style flags and MASK values
|
||||||
|
sf=ES_LEFT, (ES_CENTER | ES_RIGHT)
|
||||||
|
sf=ES_CENTER, (ES_CENTER | ES_RIGHT)
|
||||||
|
sf=ES_RIGHT, (ES_CENTER | ES_RIGHT)
|
||||||
|
sf=ES_MULTILINE
|
||||||
|
sf=ES_AUTOVSCROLL
|
||||||
|
sf=ES_AUTOHSCROLL
|
||||||
|
sf=ES_NOHIDESEL
|
||||||
|
sf=ES_READONLY
|
||||||
|
sf=ES_WANTRETURN
|
||||||
|
sf=ES_PASSWORD
|
||||||
|
sf=ES_SAVESEL
|
||||||
|
sf=ES_SUNKEN
|
||||||
|
sf=ES_DISABLENOSCROLL
|
||||||
|
sf=ES_SELECTIONBAR
|
||||||
|
sf=ES_NOOLEDRAGDROP
|
||||||
|
sf=ES_VERTICAL
|
||||||
|
sf=ES_NOIME
|
||||||
|
sf=ES_SELFIME
|
||||||
|
|
||||||
|
esf=ES_EX_NOCALLOLEINIT
|
||||||
|
|
||||||
|
["SysAnimate32"]
|
||||||
|
//default values ...
|
||||||
|
width=60
|
||||||
|
height=60
|
||||||
|
style= WS_CHILD | WS_VISIBLE
|
||||||
|
sf=ACS_CENTER
|
||||||
|
sf=ACS_TRANSPARENT
|
||||||
|
sf=ACS_AUTOPLAY
|
||||||
|
sf=ACS_TIMER
|
||||||
|
|
||||||
|
["SysDateTimePick32"]
|
||||||
|
//default values ...
|
||||||
|
width=80
|
||||||
|
height=14
|
||||||
|
style= WS_CHILD | WS_VISIBLE
|
||||||
|
sf=DTS_UPDOWN
|
||||||
|
sf=DTS_SHOWNONE
|
||||||
|
sf=DTS_SHORTDATEFORMAT, DTS_LONGDATEFORMAT
|
||||||
|
sf=DTS_LONGDATEFORMAT, DTS_LONGDATEFORMAT
|
||||||
|
sf=DTS_TIMEFORMAT //nb: must be DTS_UPDOWN (not calendar) with DTS_TIMEFORMAT
|
||||||
|
sf=DTS_APPCANPARSE
|
||||||
|
sf=DTS_RIGHTALIGN
|
||||||
|
|
||||||
|
["SysHeader32"]
|
||||||
|
//default values ...
|
||||||
|
width=60
|
||||||
|
height=12
|
||||||
|
style= WS_CHILD | WS_VISIBLE
|
||||||
|
//style flags and MASK values
|
||||||
|
sf=HDS_BUTTONS
|
||||||
|
sf=HDS_HOTTRACK
|
||||||
|
sf=HDS_HIDDEN
|
||||||
|
sf=HDS_DRAGDROP
|
||||||
|
sf=HDS_FULLDRAG
|
||||||
|
sf=CCS_TOP, CCS_BOTTOM
|
||||||
|
sf=CCS_NOMOVEY, CCS_BOTTOM
|
||||||
|
sf=CCS_BOTTOM, CCS_BOTTOM
|
||||||
|
sf=CCS_NORESIZE
|
||||||
|
sf=CCS_NOPARENTALIGN
|
||||||
|
sf=CCS_ADJUSTABLE
|
||||||
|
sf=CCS_NODIVIDER
|
||||||
|
sf=CCS_VERT
|
||||||
|
sf=CCS_LEFT
|
||||||
|
sf=CCS_RIGHT
|
||||||
|
sf=CCS_NOMOVEX
|
||||||
|
|
||||||
|
["SysListView32"]
|
||||||
|
//default values ...
|
||||||
|
width=60
|
||||||
|
height=60
|
||||||
|
style= WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP
|
||||||
|
//style flags and MASK values
|
||||||
|
sf=LVS_ICON, LVS_TYPEMASK
|
||||||
|
sf=LVS_REPORT, LVS_TYPEMASK
|
||||||
|
sf=LVS_SMALLICON, LVS_TYPEMASK
|
||||||
|
sf=LVS_LIST, LVS_TYPEMASK
|
||||||
|
sf=LVS_SINGLESEL
|
||||||
|
sf=LVS_SHOWSELALWAYS
|
||||||
|
sf=LVS_SORTASCENDING
|
||||||
|
sf=LVS_SORTDESCENDING
|
||||||
|
sf=LVS_SHAREIMAGELISTS
|
||||||
|
sf=LVS_NOLABELWRAP
|
||||||
|
sf=LVS_AUTOARRANGE
|
||||||
|
sf=LVS_EDITLABELS
|
||||||
|
sf=LVS_OWNERDATA
|
||||||
|
sf=LVS_NOSCROLL
|
||||||
|
sf=LVS_ALIGNTOP, LVS_ALIGNLEFT
|
||||||
|
sf=LVS_ALIGNLEFT, LVS_ALIGNLEFT
|
||||||
|
sf=LVS_OWNERDRAWFIXED
|
||||||
|
sf=LVS_NOCOLUMNHEADER
|
||||||
|
sf=LVS_NOSORTHEADER
|
||||||
|
|
||||||
|
esf=LVS_EX_GRIDLINES
|
||||||
|
esf=LVS_EX_SUBITEMIMAGES
|
||||||
|
esf=LVS_EX_CHECKBOXES
|
||||||
|
esf=LVS_EX_TRACKSELECT
|
||||||
|
esf=LVS_EX_HEADERDRAGDROP
|
||||||
|
esf=LVS_EX_FULLROWSELECT
|
||||||
|
esf=LVS_EX_ONECLICKACTIVATE
|
||||||
|
esf=LVS_EX_TWOCLICKACTIVATE
|
||||||
|
|
||||||
|
["SysMonthCal32"]
|
||||||
|
//default values ...
|
||||||
|
width=130
|
||||||
|
height=100
|
||||||
|
style= WS_CHILD | WS_VISIBLE
|
||||||
|
sf=MCS_DAYSTATE
|
||||||
|
sf=MCS_MULTISELECT
|
||||||
|
sf=MCS_WEEKNUMBERS
|
||||||
|
sf=MCS_NOTODAY
|
||||||
|
|
||||||
|
["SysPager"]
|
||||||
|
//default values ...
|
||||||
|
width=60
|
||||||
|
height=20
|
||||||
|
style= WS_CHILD | WS_VISIBLE
|
||||||
|
//style flags and MASK values
|
||||||
|
sf=PGS_VERT, PGS_HORZ
|
||||||
|
sf=PGS_HORZ, PGS_HORZ
|
||||||
|
sf=PGS_AUTOSCROLL
|
||||||
|
sf=PGS_DRAGNDROP
|
||||||
|
|
||||||
|
["SysTabControl32"]
|
||||||
|
//default values ...
|
||||||
|
width=60
|
||||||
|
height=60
|
||||||
|
style= WS_CHILD | WS_VISIBLE | TCS_RAGGEDRIGHT
|
||||||
|
sf=TCS_SCROLLOPPOSITE
|
||||||
|
sf=TCS_BOTTOM
|
||||||
|
sf=TCS_RIGHT
|
||||||
|
sf=TCS_FORCEICONLEFT
|
||||||
|
sf=TCS_FORCELABELLEFT
|
||||||
|
sf=TCS_HOTTRACK
|
||||||
|
sf=TCS_VERTICAL
|
||||||
|
sf=TCS_TABS, TCS_BUTTONS
|
||||||
|
sf=TCS_BUTTONS, TCS_BUTTONS
|
||||||
|
sf=TCS_SINGLELINE, TCS_MULTILINE
|
||||||
|
sf=TCS_MULTILINE, TCS_MULTILINE
|
||||||
|
sf=TCS_RIGHTJUSTIFY, TCS_FIXEDWIDTH
|
||||||
|
sf=TCS_FIXEDWIDTH, TCS_FIXEDWIDTH
|
||||||
|
sf=TCS_RAGGEDRIGHT
|
||||||
|
sf=TCS_FOCUSONBUTTONDOWN
|
||||||
|
sf=TCS_OWNERDRAWFIXED
|
||||||
|
sf=TCS_TOOLTIPS
|
||||||
|
sf=TCS_FOCUSNEVER
|
||||||
|
|
||||||
|
esf=TCS_EX_FLATSEPARATORS
|
||||||
|
esf=TCS_EX_REGISTERDROP
|
||||||
|
|
||||||
|
["SysTreeView32"]
|
||||||
|
//default values ...
|
||||||
|
width=60
|
||||||
|
height=60
|
||||||
|
style= WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP
|
||||||
|
//style flags
|
||||||
|
sf=TVS_HASBUTTONS
|
||||||
|
sf=TVS_HASLINES
|
||||||
|
sf=TVS_LINESATROOT
|
||||||
|
sf=TVS_EDITLABELS
|
||||||
|
sf=TVS_DISABLEDRAGDROP
|
||||||
|
sf=TVS_SHOWSELALWAYS
|
||||||
|
|
||||||
|
esf=TVS_EX_MULTISELECT
|
||||||
|
esf=TVS_EX_DOUBLEBUFFER
|
||||||
|
esf=TVS_EX_NOINDENTSTATE
|
||||||
|
esf=TVS_EX_RICHTOOLTIP
|
||||||
|
esf=TVS_EX_AUTOHSCROLL
|
||||||
|
esf=TVS_EX_FADEINOUTEXPANDOS
|
||||||
|
esf=TVS_EX_PARTIALCHECKBOXES
|
||||||
|
esf=TVS_EX_EXCLUSIONCHECKBOXES
|
||||||
|
esf=TVS_EX_DIMMEDCHECKBOXES
|
||||||
|
esf=TVS_EX_DRAWIMAGEASYNC
|
||||||
|
|
||||||
|
["msctls_hotkey32"]
|
||||||
|
//default values ...
|
||||||
|
width=60
|
||||||
|
height=14
|
||||||
|
style= WS_CHILD | WS_VISIBLE
|
||||||
|
|
||||||
|
["msctls_progress32"]
|
||||||
|
//default values ...
|
||||||
|
width=60
|
||||||
|
height=12
|
||||||
|
style= WS_CHILD | WS_VISIBLE
|
||||||
|
sf=PBS_SMOOTH
|
||||||
|
sf=PBS_VERTICAL
|
||||||
|
|
||||||
|
["msctls_statusbar32"]
|
||||||
|
//default values ...
|
||||||
|
width=60
|
||||||
|
height=12
|
||||||
|
style= WS_CHILD | WS_VISIBLE | SBARS_SIZEGRIP
|
||||||
|
sf=SBARS_SIZEGRIP
|
||||||
|
sf=SBT_TOOLTIPS
|
||||||
|
sf=CCS_TOP, CCS_BOTTOM
|
||||||
|
sf=CCS_NOMOVEY, CCS_BOTTOM
|
||||||
|
sf=CCS_BOTTOM, CCS_BOTTOM
|
||||||
|
sf=CCS_NORESIZE
|
||||||
|
sf=CCS_NOPARENTALIGN
|
||||||
|
sf=CCS_ADJUSTABLE
|
||||||
|
sf=CCS_NODIVIDER
|
||||||
|
sf=CCS_VERT
|
||||||
|
sf=CCS_LEFT
|
||||||
|
sf=CCS_RIGHT
|
||||||
|
sf=CCS_NOMOVEX
|
||||||
|
|
||||||
|
["msctls_trackbar32"]
|
||||||
|
//default values ...
|
||||||
|
width=60
|
||||||
|
height=18
|
||||||
|
style= WS_CHILD | WS_VISIBLE | WS_TABSTOP
|
||||||
|
//style flags and MASK values
|
||||||
|
sf=TBS_HORZ, TBS_VERT
|
||||||
|
sf=TBS_VERT, TBS_VERT
|
||||||
|
sf=TBS_AUTOTICKS
|
||||||
|
sf=TBS_BOTTOM, TBS_TOP
|
||||||
|
sf=TBS_TOP, TBS_TOP
|
||||||
|
sf=TBS_RIGHT, TBS_LEFT
|
||||||
|
sf=TBS_LEFT, TBS_LEFT
|
||||||
|
sf=TBS_BOTH
|
||||||
|
sf=TBS_NOTICKS
|
||||||
|
sf=TBS_ENABLESELRANGE
|
||||||
|
sf=TBS_FIXEDLENGTH
|
||||||
|
sf=TBS_NOTHUMB
|
||||||
|
|
||||||
|
["msctls_updown32"]
|
||||||
|
//default values ...
|
||||||
|
width=12
|
||||||
|
height=20
|
||||||
|
style= WS_CHILD | WS_VISIBLE
|
||||||
|
//style flags
|
||||||
|
sf=UDS_WRAP
|
||||||
|
sf=UDS_SETBUDDYINT
|
||||||
|
sf=UDS_ALIGNRIGHT
|
||||||
|
sf=UDS_ALIGNLEFT
|
||||||
|
sf=UDS_AUTOBUDDY
|
||||||
|
sf=UDS_ARROWKEYS
|
||||||
|
sf=UDS_HORZ
|
||||||
|
sf=UDS_NOTHOUSANDS
|
||||||
|
|
||||||
|
["ComboBoxEx32"]
|
||||||
|
//default values ...
|
||||||
|
width=60
|
||||||
|
height=60
|
||||||
|
style= WS_CHILD | WS_VISIBLE | WS_TABSTOP
|
||||||
|
//style flags and MASK values
|
||||||
|
sf=CBS_SIMPLE, CBS_DROPDOWNLIST
|
||||||
|
sf=CBS_DROPDOWN, CBS_DROPDOWNLIST
|
||||||
|
sf=CBS_DROPDOWNLIST, CBS_DROPDOWNLIST
|
||||||
|
sf=CBS_AUTOHSCROLL
|
||||||
|
sf=CBS_OEMCONVERT
|
||||||
|
sf=CBS_SORT
|
||||||
|
sf=CBS_HASSTRINGS
|
||||||
|
sf=CBS_NOINTEGRALHEIGHT
|
||||||
|
sf=CBS_DISABLENOSCROLL
|
||||||
|
sf=CBS_UPPERCASE
|
||||||
|
sf=CBS_LOWERCASE
|
||||||
|
|
||||||
|
esf=CBES_EX_CASESENSITIVE
|
||||||
|
esf=CBES_EX_NOEDITIMAGE
|
||||||
|
esf=CBES_EX_NOEDITIMAGEINDENT
|
||||||
|
esf=CBES_EX_NOSIZELIMIT
|
||||||
|
esf=CBES_EX_PATHWORDBREAKPROC
|
||||||
|
|
||||||
|
["ReBarWindow32"]
|
||||||
|
//default values ...
|
||||||
|
width=60
|
||||||
|
height=12
|
||||||
|
style= WS_CHILD | WS_VISIBLE
|
||||||
|
//style flags
|
||||||
|
sf=RBS_TOOLTIPS
|
||||||
|
sf=RBS_VARHEIGHT
|
||||||
|
sf=RBS_BANDBORDERS
|
||||||
|
sf=RBS_FIXEDORDER
|
||||||
|
sf=RBS_REGISTERDROP
|
||||||
|
sf=RBS_AUTOSIZE
|
||||||
|
sf=RBS_VERTICALGRIPPER
|
||||||
|
sf=RBS_DBLCLKTOGGLE
|
||||||
|
sf=CCS_TOP, CCS_BOTTOM
|
||||||
|
sf=CCS_NOMOVEY, CCS_BOTTOM
|
||||||
|
sf=CCS_BOTTOM, CCS_BOTTOM
|
||||||
|
sf=CCS_NORESIZE
|
||||||
|
sf=CCS_NOPARENTALIGN
|
||||||
|
sf=CCS_ADJUSTABLE
|
||||||
|
sf=CCS_NODIVIDER
|
||||||
|
sf=CCS_VERT
|
||||||
|
sf=CCS_LEFT
|
||||||
|
sf=CCS_RIGHT
|
||||||
|
sf=CCS_NOMOVEX
|
||||||
|
|
||||||
|
["ToolbarWindow32"]
|
||||||
|
//default values ...
|
||||||
|
width=60
|
||||||
|
height=12
|
||||||
|
style= WS_CHILD | WS_VISIBLE
|
||||||
|
//style flags and MASK value
|
||||||
|
sf=TBSTYLE_TOOLTIPS
|
||||||
|
sf=TBSTYLE_WRAPABLE
|
||||||
|
sf=TBSTYLE_ALTDRAG
|
||||||
|
sf=TBSTYLE_FLAT
|
||||||
|
sf=TBSTYLE_LIST
|
||||||
|
sf=TBSTYLE_CUSTOMERASE
|
||||||
|
sf=TBSTYLE_REGISTERDROP
|
||||||
|
sf=TBSTYLE_TRANSPARENT
|
||||||
|
sf=CCS_TOP, CCS_BOTTOM
|
||||||
|
sf=CCS_NOMOVEY, CCS_BOTTOM
|
||||||
|
sf=CCS_BOTTOM, CCS_BOTTOM
|
||||||
|
sf=CCS_NORESIZE
|
||||||
|
sf=CCS_NOPARENTALIGN
|
||||||
|
sf=CCS_ADJUSTABLE
|
||||||
|
sf=CCS_NODIVIDER
|
||||||
|
sf=CCS_VERT
|
||||||
|
sf=CCS_LEFT
|
||||||
|
sf=CCS_RIGHT
|
||||||
|
sf=CCS_NOMOVEX
|
||||||
|
|
||||||
|
esf=TBSTYLE_EX_DRAWDDARROWS
|
||||||
|
//esf=TBSTYLE_EX_HIDECLIPPEDBUTTONS
|
||||||
|
//esf=TBSTYLE_EX_MIXEDBUTTONS
|
||||||
|
|
||||||
|
["RichEdit20W"]
|
||||||
|
//default values ...
|
||||||
|
width=60
|
||||||
|
height=60
|
||||||
|
style= ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_WANTRETURN | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP
|
||||||
|
//style flags and MASK values
|
||||||
|
sf=ES_LEFT, (ES_CENTER | ES_RIGHT)
|
||||||
|
sf=ES_CENTER, (ES_CENTER | ES_RIGHT)
|
||||||
|
sf=ES_RIGHT, (ES_CENTER | ES_RIGHT)
|
||||||
|
sf=ES_MULTILINE
|
||||||
|
sf=ES_AUTOVSCROLL
|
||||||
|
sf=ES_AUTOHSCROLL
|
||||||
|
sf=ES_NOHIDESEL
|
||||||
|
sf=ES_READONLY
|
||||||
|
sf=ES_WANTRETURN
|
||||||
|
sf=ES_PASSWORD
|
||||||
|
sf=ES_SAVESEL
|
||||||
|
sf=ES_SUNKEN
|
||||||
|
sf=ES_DISABLENOSCROLL
|
||||||
|
sf=ES_SELECTIONBAR
|
||||||
|
sf=ES_NOOLEDRAGDROP
|
||||||
|
sf=ES_VERTICAL
|
||||||
|
sf=ES_NOIME
|
||||||
|
sf=ES_SELFIME
|
||||||
|
|
||||||
|
esf=ES_EX_NOCALLOLEINIT
|
||||||
|
|
||||||
|
["SysLink"]
|
||||||
|
//default values ...
|
||||||
|
width=60
|
||||||
|
height=18
|
||||||
|
classname="SysLink"
|
||||||
|
style= WS_CHILD | WS_VISIBLE | WS_GROUP
|
||||||
|
|
||||||
|
|
||||||
|
["SysIPAddress32"]
|
||||||
|
//default values ...
|
||||||
|
width=60
|
||||||
|
height=14
|
||||||
|
classname="SysIPAddress32"
|
||||||
|
style= WS_CHILD | WS_VISIBLE | WS_GROUP
|
|
@ -0,0 +1,75 @@
|
||||||
|
Changes in 5.2.1
|
||||||
|
minor bug fixes
|
||||||
|
Compiled with Delphi 11 (now with overflow checking).
|
||||||
|
Changes in 5.1.6
|
||||||
|
Bugfix: Fixed broken Accelerator compiling.
|
||||||
|
Changes in 5.1.6
|
||||||
|
Bugfix: Commandline syntax bug (some commas required trailing spaces)
|
||||||
|
Changes in 5.1.5
|
||||||
|
Bugfix: Comments within some resource definitions would not compile
|
||||||
|
Changes in 5.1.4
|
||||||
|
Bugfix: Editor font preferences not being applied on restart
|
||||||
|
Bugfix: Minor buges in commandline processing
|
||||||
|
Changes in 5.1.2
|
||||||
|
Update: Update to commandline sytax and & bugfixes
|
||||||
|
Changes in 5.1.1
|
||||||
|
Bugfix: incorrect editor fonts when displaying multibyte characters
|
||||||
|
Bugfix: compiler mishandled hex. escape chars with ambiguous trailing text.
|
||||||
|
Bugfix: incorrect handling of #define directive
|
||||||
|
Bugfix: incorrect handling of statusbar alignment in dialog resources
|
||||||
|
Bugfix: line numbering broken when swapping between editing and binary views
|
||||||
|
Bugfix: relative paths in filenames was broken
|
||||||
|
Bugfix: incorrect error reporting while parsing some #include files
|
||||||
|
Bugfix: extracting resources using commandline scripts was buggy.
|
||||||
|
Added: added support for multi-line comments /* ... */
|
||||||
|
Updated: can now open and save non-resource type text files
|
||||||
|
Updated: context help improved
|
||||||
|
Changes in 5.0.42
|
||||||
|
Added : a new menu resource designer.
|
||||||
|
Update: the dialog resource designer has had a major update
|
||||||
|
Added : a optional binary view for every resource type
|
||||||
|
Update: improved searching (with more context sensitive dialogs)
|
||||||
|
Bugfix: many bugfixes
|
||||||
|
Changes in 4.7.34
|
||||||
|
Update: The dialog editor has been improved significantly.
|
||||||
|
Update; The menu editor has had a minor update too.
|
||||||
|
Bigfix: Saving RC files was saving the compiled script instead.
|
||||||
|
Other: A number of other minor updates and fixes too.
|
||||||
|
Changes in 4.6.32
|
||||||
|
Bugfix: Fixed bugs when extracting text resources to RC files from the
|
||||||
|
commandline (related to ansi/unicode conversion).
|
||||||
|
Update: More logical naming of binary files when extracting to RC files.
|
||||||
|
Bugfix: Occasionally the pop-up display of menu resources was too narrow
|
||||||
|
to show all the menu items.
|
||||||
|
Update: Other minor cosmetic changes and fixes.
|
||||||
|
Changes in 4.5.28
|
||||||
|
Update: Major changes (and improvements) to the commandline syntax
|
||||||
|
Changes in 4.5.28
|
||||||
|
Update: Numerous changes and improvements to command line support.
|
||||||
|
Update: Filenames in resource scripts are no longer required to be
|
||||||
|
enclosed within double quotes unless they contain spaces.
|
||||||
|
Changes in 4.4.24
|
||||||
|
Bugfix: The toolbar state wasn't being preserved between sessions
|
||||||
|
Changes in 4.3.20
|
||||||
|
Bugfixes: Numerous fixes to commandline processing
|
||||||
|
Bugfixes: Other minor fixes
|
||||||
|
Changes in 4.2.5
|
||||||
|
Bugfix: Compiling Delphi form resources was buggy.
|
||||||
|
Bugfix: Adding a resource to a file without any resources was broken
|
||||||
|
New: Can now change a text resource's format (unicode, UTF-8, ANSI)
|
||||||
|
Changes in 4.2.4
|
||||||
|
Bugfix: Error when compiling ansi encoded *.rc files
|
||||||
|
Bugfix: RCDATA resources not displayed in their optimal format
|
||||||
|
Bugfix: Error when trying to display 'compressed' resources
|
||||||
|
Bugfix: 'Compressed' files can no longer be modified and saved
|
||||||
|
Changes in 4.2.3
|
||||||
|
Bugfix: Significant bug in the recompiler
|
||||||
|
Bugfix: Minor bug displaying animated cursors
|
||||||
|
Changes in 4.2.2
|
||||||
|
Bugfix: Some monochrome images weren't being displayed
|
||||||
|
Bugfix: Removed extraneous button in "Import Resources" dialog
|
||||||
|
Bugfix: Manifest resources were being converted to UCS-2 format.
|
||||||
|
Modified: Increased font sizes in all dialogs
|
||||||
|
Changes in 4.2.1 (from 4.2.0)
|
||||||
|
Bugfix: occasional Delphi form was not being decompiled
|
||||||
|
Bugfix: hiding the toolbar disabled hide/show dialogs/menus.
|
After Width: | Height: | Size: 48 KiB |
|
@ -0,0 +1,8 @@
|
||||||
|
#define IDC_ABOUT_BITMAP 100
|
||||||
|
#define IDC_ABOUT_TITLE 101
|
||||||
|
#define IDC_ABOUT_LINK 102
|
||||||
|
#define IDC_ABOUT_OKBTN 103
|
||||||
|
|
||||||
|
//uncomment the following line to see how the compiler handles errors inside nested INCLUDEs ...
|
||||||
|
//#defin MISSPELLED_DEFINE
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
//sample1.inc next INCLUDEs sample1.h - demonstrating nested includes :)
|
||||||
|
#INCLUDE sample1.h
|
||||||
|
|
||||||
|
#define IDS_APP_TITLE "Sample Application"
|
||||||
|
#define IDS_APP_NAME "SampleApp"
|
||||||
|
#define IDS_APP_AUTHOR "Angus Johnson"
|
||||||
|
|
||||||
|
#define RELEASE
|
||||||
|
|
||||||
|
#if defined(RELEASE)
|
||||||
|
#define MAJOR_VERSION 1
|
||||||
|
#define MINOR_VERSION 2
|
||||||
|
#define RELEASE_NUMBER 3
|
||||||
|
//and just showing what's possible ...
|
||||||
|
#define BUILD_NUMBER (40*(5+5)+56)
|
||||||
|
#else
|
||||||
|
#define MAJOR_VERSION 0
|
||||||
|
#define MINOR_VERSION 0
|
||||||
|
#define RELEASE_NUMBER 0
|
||||||
|
#define BUILD_NUMBER 0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
//1. concatenating numbers with strings will produce a string variable
|
||||||
|
//2. to convert a number to a string variable, just concatenate it with an empty string
|
||||||
|
//3. the compiler will only accept integers (decimal, hex or octal) as numeric values.
|
||||||
|
#define IDS_DOTTED_VER_NO MAJOR_VERSION + "." + MINOR_VERSION + "." + RELEASE_NUMBER + "." + BUILD_NUMBER
|
|
@ -0,0 +1,61 @@
|
||||||
|
//SAMPLE 1 - Compiles a bitmap, a dialog and a version info resource demonstrating nested include statements, special characters & string concatenation.
|
||||||
|
|
||||||
|
100 BITMAP "sample1.bmp"
|
||||||
|
|
||||||
|
//sample1.inc defines several string constants needed for the dialog and it also contains a nested include to sample1.h that defines control IDs.
|
||||||
|
//I've done things this way simply to show that nested includes are possible. I'm not that suggesting this is normally a good way to do things. :)
|
||||||
|
#INCLUDE sample1.inc
|
||||||
|
|
||||||
|
//The dialog's caption, and the 2nd to 6th control captions demonstrate
|
||||||
|
//the compiler's ability to parse escape characters and concatenate strings
|
||||||
|
//Note: there's no difference between \xFFFF and \uFFFF. Both accept any hexidecimal WORD value and convert it to a character (eg \u9 == \t).
|
||||||
|
|
||||||
|
ABOUT DIALOGEX 0, 0, 179, 109
|
||||||
|
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
|
CAPTION IDS_APP_TITLE + " - About"
|
||||||
|
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
|
||||||
|
FONT 9, "Arial"
|
||||||
|
{
|
||||||
|
CONTROL 100, 100, STATIC, SS_BITMAP | WS_CHILD | WS_VISIBLE | WS_GROUP, 16, 12, 54, 54
|
||||||
|
CONTROL IDS_APP_TITLE, 101, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 84, 11, 91, 18
|
||||||
|
CONTROL "Version " + IDS_DOTTED_VER_NO, -1, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 84, 30, 90, 11
|
||||||
|
CONTROL "Angus Johnson \u2764", -1, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 84, 39, 90, 11
|
||||||
|
CONTROL "Copyright \xA9 1998-2018", -1, STATIC, SS_LEFT | WS_CHILD | WS_VISIBLE | WS_GROUP, 84, 50, 90, 11
|
||||||
|
CONTROL "<a href=\"http://www.angusj.com\">http://www.angusj.com</a>", 102, "SysLink", WS_CHILD | WS_VISIBLE | WS_GROUP, 85, 59, 90, 11 , 0x00000000
|
||||||
|
CONTROL "", -1, STATIC, SS_ETCHEDHORZ | WS_CHILD | WS_VISIBLE | WS_GROUP, 0, 80, 179, 1
|
||||||
|
CONTROL "hidden", -1, STATIC, SS_LEFT | WS_CHILD | NOT WS_VISIBLE, 16, 90, 26, 11
|
||||||
|
CONTROL "&OK", 103, BUTTON, BS_DEFPUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 115, 87, 58, 16 , 0x00000000
|
||||||
|
}
|
||||||
|
|
||||||
|
//String concatenation normally requires a plus (+) between strings.
|
||||||
|
//However when no parameters are expected to follow a string in a resource definition
|
||||||
|
//statement, implicit concatenation (ie without a +) is allowed between strings.
|
||||||
|
//This is demonstrated in the first StringFileInfo VALUE statement below.
|
||||||
|
|
||||||
|
1 VERSIONINFO
|
||||||
|
FILEVERSION MAJOR_VERSION,MINOR_VERSION,RELEASE_NUMBER,BUILD_NUMBER
|
||||||
|
PRODUCTVERSION MAJOR_VERSION,MINOR_VERSION,RELEASE_NUMBER,BUILD_NUMBER
|
||||||
|
FILEOS 0x4
|
||||||
|
FILETYPE 0x1
|
||||||
|
{
|
||||||
|
BLOCK "StringFileInfo"
|
||||||
|
{
|
||||||
|
BLOCK "040904b0"
|
||||||
|
{
|
||||||
|
VALUE "Comments", IDS_APP_TITLE " - no nags, no ads and fully functional"
|
||||||
|
VALUE "FileDescription", IDS_APP_TITLE
|
||||||
|
VALUE "InternalName", IDS_APP_NAME
|
||||||
|
VALUE "ProductName", IDS_APP_NAME
|
||||||
|
VALUE "CompanyName", IDS_APP_AUTHOR
|
||||||
|
VALUE "FileVersion", IDS_DOTTED_VER_NO
|
||||||
|
VALUE "ProductVersion", IDS_DOTTED_VER_NO
|
||||||
|
VALUE "LegalCopyright", "Copyright \xA9 1998-2018 " + IDS_APP_AUTHOR
|
||||||
|
VALUE "OriginalFilename", IDS_APP_NAME
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BLOCK "VarFileInfo"
|
||||||
|
{
|
||||||
|
VALUE "Translation", 0x0409 0x04B0
|
||||||
|
}
|
||||||
|
}
|