
git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@6047 212acab6-be3b-0410-9dea-997c60f758d6
532 lines
16 KiB
C
532 lines
16 KiB
C
/*
|
|
* fileform.h
|
|
*
|
|
* This file is a part of NSIS.
|
|
*
|
|
* Copyright (C) 1999-2009 Nullsoft and Contributors
|
|
*
|
|
* Licensed under the zlib/libpng license (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
*
|
|
* Licence details can be found in the file COPYING.
|
|
*
|
|
* This software is provided 'as-is', without any express or implied
|
|
* warranty.
|
|
*
|
|
* Unicode support by Jim Park -- 08/13/2007
|
|
*/
|
|
|
|
#include "config.h"
|
|
#include "../Platform.h"
|
|
|
|
#ifndef _FILEFORM_H_
|
|
#define _FILEFORM_H_
|
|
|
|
|
|
// * the installer is composed of the following parts:
|
|
// exehead (~34kb)
|
|
// firstheader (struct firstheader)
|
|
// * headers (compressed together):
|
|
// header (struct header - contains pointers to all blocks)
|
|
// pages (struct page)
|
|
// section headers (struct section)
|
|
// entries/instructions (struct entry)
|
|
// strings (null seperated)
|
|
// language tables (language id, dialog offset, language strings)
|
|
// colors (struct color)
|
|
// data block (compressed files and uninstaller data)
|
|
// CRC (optional - 4 bytes)
|
|
//
|
|
// headers + datablock is at least 512 bytes if CRC enabled
|
|
|
|
|
|
#define MAX_ENTRY_OFFSETS 6
|
|
|
|
|
|
// if you want people to not be able to decompile your installers as easily,
|
|
// reorder the lines following EW_INVALID_OPCODE randomly.
|
|
|
|
enum
|
|
{
|
|
EW_INVALID_OPCODE, // zero is invalid. useful for catching errors. (otherwise an all zeroes instruction
|
|
// does nothing, which is easily ignored but means something is wrong.
|
|
EW_RET, // return from function call
|
|
EW_NOP, // Nop/Jump, do nothing: 1, [?new address+1:advance one]
|
|
EW_ABORT, // Abort: 1 [status]
|
|
EW_QUIT, // Quit: 0
|
|
EW_CALL, // Call: 1 [new address+1]
|
|
EW_UPDATETEXT, // Update status text: 2 [update str, ui_st_updateflag=?ui_st_updateflag:this]
|
|
EW_SLEEP, // Sleep: 1 [sleep time in milliseconds]
|
|
EW_BRINGTOFRONT, // BringToFront: 0
|
|
EW_CHDETAILSVIEW, // SetDetailsView: 2 [listaction,buttonaction]
|
|
EW_SETFILEATTRIBUTES, // SetFileAttributes: 2 [filename, attributes]
|
|
EW_CREATEDIR, // Create directory: 2, [path, ?update$INSTDIR]
|
|
EW_IFFILEEXISTS, // IfFileExists: 3, [file name, jump amount if exists, jump amount if not exists]
|
|
EW_SETFLAG, // Sets a flag: 2 [id, data]
|
|
EW_IFFLAG, // If a flag: 4 [on, off, id, new value mask]
|
|
EW_GETFLAG, // Gets a flag: 2 [output, id]
|
|
#ifdef NSIS_SUPPORT_RENAME
|
|
EW_RENAME, // Rename: 3 [old, new, rebootok]
|
|
#endif
|
|
#ifdef NSIS_SUPPORT_FNUTIL
|
|
EW_GETFULLPATHNAME, // GetFullPathName: 2 [output, input, ?lfn:sfn]
|
|
EW_SEARCHPATH, // SearchPath: 2 [output, filename]
|
|
EW_GETTEMPFILENAME, // GetTempFileName: 2 [output, base_dir]
|
|
#endif
|
|
#ifdef NSIS_SUPPORT_FILE
|
|
EW_EXTRACTFILE, // File to extract: 6 [overwriteflag, output filename, compressed filedata, filedatetimelow, filedatetimehigh, allow ignore]
|
|
// overwriteflag: 0x1 = no. 0x0=force, 0x2=try, 0x3=if date is newer
|
|
#endif
|
|
#ifdef NSIS_SUPPORT_DELETE
|
|
EW_DELETEFILE, // Delete File: 2, [filename, rebootok]
|
|
#endif
|
|
#ifdef NSIS_SUPPORT_MESSAGEBOX
|
|
EW_MESSAGEBOX, // MessageBox: 5,[MB_flags,text,retv1:retv2,moveonretv1:moveonretv2]
|
|
#endif
|
|
#ifdef NSIS_SUPPORT_RMDIR
|
|
EW_RMDIR, // RMDir: 2 [path, recursiveflag]
|
|
#endif
|
|
#ifdef NSIS_SUPPORT_STROPTS
|
|
EW_STRLEN, // StrLen: 2 [output, input]
|
|
EW_ASSIGNVAR, // Assign: 4 [variable (0-9) to assign, string to assign, maxlen, startpos]
|
|
EW_STRCMP, // StrCmp: 5 [str1, str2, jump_if_equal, jump_if_not_equal, case-sensitive?]
|
|
#endif
|
|
#ifdef NSIS_SUPPORT_ENVIRONMENT
|
|
EW_READENVSTR, // ReadEnvStr/ExpandEnvStrings: 3 [output, string_with_env_variables, IsRead]
|
|
#endif
|
|
#ifdef NSIS_SUPPORT_INTOPTS
|
|
EW_INTCMP, // IntCmp: 6 [val1, val2, equal, val1<val2, val1>val2, unsigned?]
|
|
EW_INTOP, // IntOp: 4 [output, input1, input2, op] where op: 0=add, 1=sub, 2=mul, 3=div, 4=bor, 5=band, 6=bxor, 7=bnot input1, 8=lnot input1, 9=lor, 10=land], 11=1%2
|
|
EW_INTFMT, // IntFmt: [output, format, input]
|
|
#endif
|
|
#ifdef NSIS_SUPPORT_STACK
|
|
EW_PUSHPOP, // Push/Pop/Exchange: 3 [variable/string, ?pop:push, ?exch]
|
|
#endif
|
|
#ifdef NSIS_SUPPORT_HWNDS
|
|
EW_FINDWINDOW, // FindWindow: 5, [outputvar, window class,window name, window_parent, window_after]
|
|
EW_SENDMESSAGE, // SendMessage: 6 [output, hwnd, msg, wparam, lparam, [wparamstring?1:0 | lparamstring?2:0 | timeout<<2]
|
|
EW_ISWINDOW, // IsWindow: 3 [hwnd, jump_if_window, jump_if_notwindow]
|
|
#endif
|
|
|
|
#ifdef NSIS_CONFIG_ENHANCEDUI_SUPPORT
|
|
EW_GETDLGITEM, // GetDlgItem: 3: [outputvar, dialog, item_id]
|
|
EW_SETCTLCOLORS, // SerCtlColors: 3: [hwnd, pointer to struct colors]
|
|
EW_SETBRANDINGIMAGE, // SetBrandingImage: 1: [Bitmap file]
|
|
EW_CREATEFONT, // CreateFont: 5: [handle output, face name, height, weight, flags]
|
|
EW_SHOWWINDOW, // ShowWindow: 2: [hwnd, show state]
|
|
#endif
|
|
|
|
#ifdef NSIS_SUPPORT_SHELLEXECUTE
|
|
EW_SHELLEXEC, // ShellExecute program: 4, [shell action, complete commandline, parameters, showwindow]
|
|
#endif
|
|
|
|
#ifdef NSIS_SUPPORT_EXECUTE
|
|
EW_EXECUTE, // Execute program: 3,[complete command line,waitflag,>=0?output errorcode]
|
|
#endif
|
|
|
|
#ifdef NSIS_SUPPORT_GETFILETIME
|
|
EW_GETFILETIME, // GetFileTime; 3 [file highout lowout]
|
|
#endif
|
|
|
|
#ifdef NSIS_SUPPORT_GETDLLVERSION
|
|
EW_GETDLLVERSION, // GetDLLVersion: 3 [file highout lowout]
|
|
#endif
|
|
|
|
#ifdef NSIS_SUPPORT_ACTIVEXREG
|
|
EW_REGISTERDLL, // Register DLL: 3,[DLL file name, string ptr of function to call, text to put in display (<0 if none/pass parms), 1 - no unload, 0 - unload]
|
|
#endif
|
|
|
|
#ifdef NSIS_SUPPORT_CREATESHORTCUT
|
|
EW_CREATESHORTCUT, // Make Shortcut: 5, [link file, target file, parameters, icon file, iconindex|show mode<<8|hotkey<<16]
|
|
#endif
|
|
|
|
#ifdef NSIS_SUPPORT_COPYFILES
|
|
EW_COPYFILES, // CopyFiles: 3 [source mask, destination location, flags]
|
|
#endif
|
|
|
|
#ifdef NSIS_SUPPORT_REBOOT
|
|
EW_REBOOT, // Reboot: 0
|
|
#endif
|
|
|
|
#ifdef NSIS_SUPPORT_INIFILES
|
|
EW_WRITEINI, // Write INI String: 4, [Section, Name, Value, INI File]
|
|
EW_READINISTR, // ReadINIStr: 4 [output, section, name, ini_file]
|
|
#endif
|
|
|
|
#ifdef NSIS_SUPPORT_REGISTRYFUNCTIONS
|
|
EW_DELREG, // DeleteRegValue/DeleteRegKey: 4, [root key(int), KeyName, ValueName, delkeyonlyifempty]. ValueName is -1 if delete key
|
|
EW_WRITEREG, // Write Registry value: 5, [RootKey(int),KeyName,ItemName,ItemData,typelen]
|
|
// typelen=1 for str, 2 for dword, 3 for binary, 0 for expanded str
|
|
EW_READREGSTR, // ReadRegStr: 5 [output, rootkey(int), keyname, itemname, ==1?int::str]
|
|
EW_REGENUM, // RegEnum: 5 [output, rootkey, keyname, index, ?key:value]
|
|
#endif
|
|
|
|
#ifdef NSIS_SUPPORT_FILEFUNCTIONS
|
|
EW_FCLOSE, // FileClose: 1 [handle]
|
|
EW_FOPEN, // FileOpen: 4 [name, openmode, createmode, outputhandle]
|
|
EW_FPUTS, // FileWrite: 3 [handle, string, ?int:string]
|
|
EW_FGETS, // FileRead: 4 [handle, output, maxlen, ?getchar:gets]
|
|
EW_FSEEK, // FileSeek: 4 [handle, offset, mode, >=0?positionoutput]
|
|
#endif//NSIS_SUPPORT_FILEFUNCTIONS
|
|
|
|
#ifdef NSIS_SUPPORT_FINDFIRST
|
|
EW_FINDCLOSE, // FindClose: 1 [handle]
|
|
EW_FINDNEXT, // FindNext: 2 [output, handle]
|
|
EW_FINDFIRST, // FindFirst: 2 [filespec, output, handleoutput]
|
|
#endif
|
|
|
|
#ifdef NSIS_CONFIG_UNINSTALL_SUPPORT
|
|
EW_WRITEUNINSTALLER, // WriteUninstaller: 3 [name, offset, icon_size]
|
|
#endif
|
|
|
|
#ifdef NSIS_CONFIG_LOG
|
|
EW_LOG, // LogText: 2 [0, text] / LogSet: [1, logstate]
|
|
#endif
|
|
|
|
#ifdef NSIS_CONFIG_COMPONENTPAGE
|
|
EW_SECTIONSET, // SectionSetText: 3: [idx, 0, text]
|
|
// SectionGetText: 3: [idx, 1, output]
|
|
// SectionSetFlags: 3: [idx, 2, flags]
|
|
// SectionGetFlags: 3: [idx, 3, output]
|
|
EW_INSTTYPESET, // InstTypeSetFlags: 3: [idx, 0, flags]
|
|
// InstTypeGetFlags: 3: [idx, 1, output]
|
|
#endif
|
|
|
|
// instructions not actually implemented in exehead, but used in compiler.
|
|
EW_GETLABELADDR, // both of these get converted to EW_ASSIGNVAR
|
|
EW_GETFUNCTIONADDR,
|
|
|
|
#ifdef NSIS_LOCKWINDOW_SUPPORT
|
|
EW_LOCKWINDOW,
|
|
#endif
|
|
};
|
|
|
|
#define FH_FLAGS_MASK 15
|
|
#define FH_FLAGS_UNINSTALL 1
|
|
#ifdef NSIS_CONFIG_SILENT_SUPPORT
|
|
# define FH_FLAGS_SILENT 2
|
|
#endif
|
|
#ifdef NSIS_CONFIG_CRC_SUPPORT
|
|
# define FH_FLAGS_NO_CRC 4
|
|
# define FH_FLAGS_FORCE_CRC 8
|
|
#endif
|
|
|
|
#define FH_SIG 0xDEADBEEF
|
|
|
|
// neato surprise signature that goes in firstheader. :)
|
|
#define FH_INT1 0x6C6C754E
|
|
#define FH_INT2 0x74666F73
|
|
#define FH_INT3 0x74736E49
|
|
|
|
typedef struct
|
|
{
|
|
int flags; // FH_FLAGS_*
|
|
int siginfo; // FH_SIG
|
|
|
|
int nsinst[3]; // FH_INT1,FH_INT2,FH_INT3
|
|
|
|
// these point to the header+sections+entries+stringtable in the datablock
|
|
int length_of_header;
|
|
|
|
// this specifies the length of all the data (including the firstheader and CRC)
|
|
int length_of_all_following_data;
|
|
} firstheader;
|
|
|
|
// Flags for common_header.flags
|
|
#define CH_FLAGS_DETAILS_SHOWDETAILS 1
|
|
#define CH_FLAGS_DETAILS_NEVERSHOW 2
|
|
#define CH_FLAGS_PROGRESS_COLORED 4
|
|
#ifdef NSIS_CONFIG_SILENT_SUPPORT
|
|
#define CH_FLAGS_SILENT 8
|
|
#define CH_FLAGS_SILENT_LOG 16
|
|
#endif
|
|
#define CH_FLAGS_AUTO_CLOSE 32
|
|
#define CH_FLAGS_DIR_NO_SHOW 64
|
|
#define CH_FLAGS_NO_ROOT_DIR 128
|
|
#ifdef NSIS_CONFIG_COMPONENTPAGE
|
|
#define CH_FLAGS_COMP_ONLY_ON_CUSTOM 256
|
|
#define CH_FLAGS_NO_CUSTOM 512
|
|
#endif
|
|
|
|
// nsis blocks
|
|
struct block_header {
|
|
int offset;
|
|
int num;
|
|
};
|
|
|
|
enum {
|
|
#ifdef NSIS_CONFIG_VISIBLE_SUPPORT
|
|
NB_PAGES,
|
|
#endif
|
|
NB_SECTIONS,
|
|
NB_ENTRIES,
|
|
NB_STRINGS,
|
|
NB_LANGTABLES,
|
|
NB_CTLCOLORS,
|
|
#ifdef NSIS_SUPPORT_BGBG
|
|
NB_BGFONT,
|
|
#endif
|
|
NB_DATA,
|
|
|
|
BLOCKS_NUM
|
|
};
|
|
|
|
// nsis strings
|
|
typedef TCHAR NSIS_STRING[NSIS_MAX_STRLEN];
|
|
|
|
// Settings common to both installers and uninstallers
|
|
typedef struct
|
|
{
|
|
int flags; // CH_FLAGS_*
|
|
struct block_header blocks[BLOCKS_NUM];
|
|
|
|
// InstallDirRegKey stuff
|
|
int install_reg_rootkey;
|
|
// these two are not processed!
|
|
int install_reg_key_ptr, install_reg_value_ptr;
|
|
|
|
#ifdef NSIS_SUPPORT_BGBG
|
|
int bg_color1, bg_color2, bg_textcolor;
|
|
#endif
|
|
|
|
#ifdef NSIS_CONFIG_VISIBLE_SUPPORT
|
|
// installation log window colors
|
|
int lb_bg, lb_fg;
|
|
#endif
|
|
|
|
// langtable size
|
|
int langtable_size;
|
|
|
|
#ifdef NSIS_CONFIG_LICENSEPAGE
|
|
// license background color
|
|
int license_bg;
|
|
#endif//NSIS_CONFIG_LICENSEPAGE
|
|
|
|
#ifdef NSIS_SUPPORT_CODECALLBACKS
|
|
// .on* calls
|
|
int code_onInit;
|
|
int code_onInstSuccess;
|
|
int code_onInstFailed;
|
|
int code_onUserAbort;
|
|
#ifdef NSIS_CONFIG_ENHANCEDUI_SUPPORT
|
|
int code_onGUIInit;
|
|
int code_onGUIEnd;
|
|
int code_onMouseOverSection;
|
|
#endif//NSIS_CONFIG_ENHANCEDUI_SUPPORT
|
|
int code_onVerifyInstDir;
|
|
#ifdef NSIS_CONFIG_COMPONENTPAGE
|
|
int code_onSelChange;
|
|
#endif//NSIS_CONFIG_COMPONENTPAGE
|
|
#ifdef NSIS_SUPPORT_REBOOT
|
|
int code_onRebootFailed;
|
|
#endif//NSIS_SUPPORT_REBOOT
|
|
#endif//NSIS_SUPPORT_CODECALLBACKS
|
|
|
|
#ifdef NSIS_CONFIG_COMPONENTPAGE
|
|
int install_types[NSIS_MAX_INST_TYPES+1];
|
|
#endif
|
|
|
|
int install_directory_ptr; // default install dir.
|
|
int install_directory_auto_append; // auto append part
|
|
|
|
#ifdef NSIS_CONFIG_UNINSTALL_SUPPORT
|
|
int str_uninstchild;
|
|
int str_uninstcmd;
|
|
#endif//NSIS_CONFIG_UNINSTALL_SUPPORT
|
|
#ifdef NSIS_SUPPORT_MOVEONREBOOT
|
|
int str_wininit; // Points to the path of wininit.ini
|
|
#endif//NSIS_SUPPORT_MOVEONREBOOT
|
|
} header;
|
|
|
|
#ifdef NSIS_SUPPORT_CODECALLBACKS
|
|
// callback indices
|
|
enum
|
|
{
|
|
CB_ONINIT,
|
|
CB_ONINSTSUCCESS,
|
|
CB_ONINSTFAILED,
|
|
CB_ONUSERABORT,
|
|
#ifdef NSIS_CONFIG_ENHANCEDUI_SUPPORT
|
|
CB_ONGUIINIT,
|
|
CB_ONGUIEND,
|
|
CB_ONMOUSEOVERSECTION,
|
|
#endif//NSIS_CONFIG_ENHANCEDUI_SUPPORT
|
|
CB_ONVERIFYINSTDIR,
|
|
#ifdef NSIS_CONFIG_COMPONENTPAGE
|
|
CB_ONSELCHANGE,
|
|
#endif//NSIS_CONFIG_COMPONENTPAGE
|
|
#ifdef NSIS_SUPPORT_REBOOT
|
|
CB_ONREBOOTFAILED
|
|
#endif//NSIS_SUPPORT_REBOOT
|
|
};
|
|
#endif//NSIS_SUPPORT_CODECALLBACKS
|
|
|
|
// used for section->flags
|
|
#define SF_SELECTED 1
|
|
#define SF_SECGRP 2
|
|
#define SF_SECGRPEND 4
|
|
#define SF_BOLD 8
|
|
#define SF_RO 16
|
|
#define SF_EXPAND 32
|
|
#define SF_PSELECTED 64
|
|
#define SF_TOGGLED 128
|
|
#define SF_NAMECHG 256
|
|
|
|
typedef struct
|
|
{
|
|
int name_ptr; // initial name pointer
|
|
int install_types; // bits set for each of the different install_types, if any.
|
|
int flags; // SF_* - defined above
|
|
// for labels, it looks like it's only used to track how often it is used.
|
|
int code; // The "address" of the start of the code in count of struct entries.
|
|
int code_size; // The size of the code in num of entries?
|
|
int size_kb;
|
|
TCHAR name[NSIS_MAX_STRLEN]; // '' for invisible sections
|
|
} section;
|
|
|
|
#define SECTION_OFFSET(field) (FIELD_OFFSET(section, field)/sizeof(int))
|
|
|
|
typedef struct
|
|
{
|
|
int which; // EW_* enum. Look at the enum values to see what offsets mean.
|
|
int offsets[MAX_ENTRY_OFFSETS]; // count and meaning of offsets depend on 'which'
|
|
// sometimes they are just straight int values or bool
|
|
// values and sometimes they are indices into string
|
|
// tables.
|
|
} entry;
|
|
|
|
// page window proc
|
|
enum
|
|
{
|
|
#ifdef NSIS_CONFIG_LICENSEPAGE
|
|
PWP_LICENSE,
|
|
#endif
|
|
#ifdef NSIS_CONFIG_COMPONENTPAGE
|
|
PWP_SELCOM,
|
|
#endif
|
|
PWP_DIR,
|
|
PWP_INSTFILES,
|
|
#ifdef NSIS_CONFIG_UNINSTALL_SUPPORT
|
|
PWP_UNINST,
|
|
#endif
|
|
PWP_COMPLETED,
|
|
PWP_CUSTOM
|
|
};
|
|
|
|
// page flags
|
|
#define PF_BACK_ENABLE 256
|
|
#define PF_NEXT_ENABLE 2
|
|
#define PF_CANCEL_ENABLE 4
|
|
#define PF_BACK_SHOW 8 // must be SW_SHOWNA, don't change
|
|
#define PF_LICENSE_STREAM 16
|
|
#define PF_LICENSE_FORCE_SELECTION 32
|
|
#define PF_LICENSE_NO_FORCE_SELECTION 64
|
|
#define PF_LICENSE_SELECTED 1 // must be 1
|
|
#define PF_NO_NEXT_FOCUS 128
|
|
#define PF_PAGE_EX 512
|
|
#define PF_DIR_NO_BTN_DISABLE 1024
|
|
|
|
typedef struct
|
|
{
|
|
int dlg_id; // dialog resource id
|
|
int wndproc_id;
|
|
|
|
#ifdef NSIS_SUPPORT_CODECALLBACKS
|
|
// called before the page is created, or if custom to show the page
|
|
// use Abort to skip the page
|
|
int prefunc;
|
|
// called right before page is shown
|
|
int showfunc;
|
|
// called when the user leaves to the next page
|
|
// use Abort to force the user to stay on this page
|
|
int leavefunc;
|
|
#endif //NSIS_SUPPORT_CODECALLBACKS
|
|
|
|
int flags;
|
|
|
|
int caption;
|
|
int back;
|
|
int next;
|
|
int clicknext;
|
|
int cancel;
|
|
|
|
int parms[5];
|
|
} page;
|
|
|
|
// text/bg color
|
|
#define CC_TEXT 1
|
|
#define CC_TEXT_SYS 2
|
|
#define CC_BK 4
|
|
#define CC_BK_SYS 8
|
|
#define CC_BKB 16
|
|
|
|
typedef struct {
|
|
COLORREF text;
|
|
COLORREF bkc;
|
|
UINT lbStyle;
|
|
HBRUSH bkb;
|
|
int bkmode;
|
|
int flags;
|
|
} ctlcolors;
|
|
|
|
// constants for myDelete (util.c)
|
|
#define DEL_DIR 1
|
|
#define DEL_RECURSE 2
|
|
#define DEL_REBOOT 4
|
|
#define DEL_SIMPLE 8
|
|
|
|
// $0..$9, $INSTDIR, etc are encoded as ASCII bytes starting from this value.
|
|
// Added by ramon 3 jun 2003
|
|
#define NS_SKIP_CODE 252
|
|
#define NS_VAR_CODE 253
|
|
#define NS_SHELL_CODE 254
|
|
#define NS_LANG_CODE 255
|
|
#define NS_CODES_START NS_SKIP_CODE
|
|
#define NS_IS_CODE(x) ((x) >= NS_SKIP_CODE)
|
|
|
|
// We are doing this to store an integer value into a char string and we
|
|
// don't want false end of string values so we shift then OR with 0x8080
|
|
#define CODE_SHORT(x) (WORD)((((WORD)(x) & 0x7F) | (((WORD)(x) & 0x3F80) << 1) | 0x8080))
|
|
#define MAX_CODED 16383 // 0x3FFF
|
|
|
|
#define NSIS_INSTDIR_INVALID 1
|
|
#define NSIS_INSTDIR_NOT_ENOUGH_SPACE 2
|
|
|
|
#define FIELDN(x, y) (((int *)&x)[y])
|
|
|
|
#ifdef EXEHEAD
|
|
|
|
// the following are only used/implemented in exehead, not makensis.
|
|
|
|
int NSISCALL isheader(firstheader *h); // returns 0 on not header, length_of_datablock on success
|
|
|
|
// returns nonzero on error
|
|
// returns 0 on success
|
|
// on success, m_header will be set to a pointer that should eventually be GlobalFree()'d.
|
|
// (or m_uninstheader)
|
|
const TCHAR * NSISCALL loadHeaders(int cl_flags);
|
|
|
|
int NSISCALL _dodecomp(int offset, HANDLE hFileOut, char *outbuf, int outbuflen);
|
|
|
|
#define GetCompressedDataFromDataBlock(offset, hFileOut) _dodecomp(offset,hFileOut,NULL,0)
|
|
#define GetCompressedDataFromDataBlockToMemory(offset, out, out_len) _dodecomp(offset,NULL,out,out_len)
|
|
|
|
extern HANDLE g_db_hFile;
|
|
extern int g_quit_flag;
|
|
|
|
BOOL NSISCALL ReadSelfFile(LPVOID lpBuffer, DWORD nNumberOfBytesToRead);
|
|
DWORD NSISCALL SetSelfFilePointer(LONG lDistanceToMove);
|
|
|
|
extern struct block_header g_blocks[BLOCKS_NUM];
|
|
extern header *g_header;
|
|
extern int g_flags;
|
|
extern int g_filehdrsize;
|
|
extern int g_is_uninstaller;
|
|
|
|
#define g_pages ((page*)g_blocks[NB_PAGES].offset)
|
|
#define g_sections ((section*)g_blocks[NB_SECTIONS].offset)
|
|
#define num_sections (g_blocks[NB_SECTIONS].num)
|
|
#define g_entries ((entry*)g_blocks[NB_ENTRIES].offset)
|
|
#endif
|
|
|
|
#endif //_FILEFORM_H_
|