799 lines
23 KiB
C
799 lines
23 KiB
C
/***********************************************************************
|
|
* Microsoft (R) Windows (R) Resource Compiler
|
|
*
|
|
* Copyright (c) Microsoft Corporation. All rights reserved.
|
|
*
|
|
* File Comments:
|
|
*
|
|
*
|
|
***********************************************************************/
|
|
|
|
#include <windows.h>
|
|
#include <ntverp.h>
|
|
#include <stdio.h>
|
|
#include <windef.h>
|
|
#include <wchar.h>
|
|
|
|
typedef FILE *PFILE;
|
|
typedef WCHAR *PWCHAR;
|
|
typedef USHORT *PUSHORT;
|
|
typedef SHORT *PSHORT;
|
|
typedef UINT *PUINT;
|
|
typedef UCHAR *PUCHAR;
|
|
|
|
#include <ctype.h>
|
|
#include <errno.h>
|
|
#include <io.h>
|
|
#include <limits.h>
|
|
#include <malloc.h>
|
|
#include <memory.h>
|
|
#include <process.h>
|
|
#include <signal.h>
|
|
#include <stdarg.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <time.h>
|
|
#include <mmsystem.h>
|
|
|
|
#include "charmap.h"
|
|
#include "fcntl.h"
|
|
#include "getflags.h"
|
|
#include "grammar.h"
|
|
|
|
#include "rcpptype.h"
|
|
#include "rcppdecl.h"
|
|
#include "rcppext.h"
|
|
#include "p0defs.h"
|
|
|
|
#include "newexe.h"
|
|
#include "p1types.h"
|
|
#include "rcdefs.h"
|
|
#include "rcnewres.h"
|
|
#include "rcppx.h"
|
|
#include "rcunicod.h"
|
|
#include "resfile.h"
|
|
#include "strings.h"
|
|
#include "trees.h"
|
|
|
|
|
|
#define NULL_FILE ((PFILE) NULL)
|
|
|
|
/* ----- General symbols ----- */
|
|
#define VERSION_DUAL 0x202
|
|
#define BUFSIZE 16384
|
|
#define EOF (-1)
|
|
|
|
#define TRUE 1
|
|
#define FALSE 0
|
|
|
|
/* The ResType field of NewHeader identifies the cursor/icon type */
|
|
#define ICONTYPE 1
|
|
#define CURSORTYPE 2
|
|
|
|
/* Identifies the menu item template version number */
|
|
#define OLDMENUITEMTEMPLATEVERSIONNUMBER 0
|
|
#define OLDMENUITEMTEMPLATEBYTESINHEADER 0
|
|
|
|
#define MENUITEMTEMPLATEVERSIONNUMBER 1
|
|
#define MENUITEMTEMPLATEBYTESINHEADER sizeof(DWORD) //dwHelpID in hdr
|
|
|
|
#define DIFFERENCE 11
|
|
|
|
/* Predefined resource types */
|
|
#define RT_NEWRESOURCE 0x2000
|
|
#define RT_ERROR 0x7fff
|
|
#define RT_NEWBITMAP MAKEINTRESOURCE((DWORD)RT_BITMAP+DIFFERENCE)
|
|
|
|
// These are 'hidden' resources that users never see/use directly.
|
|
#define RT_MENUEX MAKEINTRESOURCE(15)
|
|
#define RT_DIALOGEX MAKEINTRESOURCE(18)
|
|
|
|
// These are here only temporary here they should in winuser.w
|
|
#define RT_ANICURSOR MAKEINTRESOURCE(21)
|
|
#define RT_ANIICON MAKEINTRESOURCE(22)
|
|
|
|
#define RT_LAST MAKEINTRESOURCE(22)
|
|
|
|
// AFX resource types (Should these be in winuser.h?)
|
|
#define RT_DLGINIT MAKEINTRESOURCE(240)
|
|
#define RT_TOOLBAR MAKEINTRESOURCE(241)
|
|
|
|
#define GFE_ZEROINIT 0x0001
|
|
#define GFE_SHORT 0x0002
|
|
|
|
#ifdef MFR_POPUP
|
|
#if (MFR_POPUP != 0x01) && (MFR_END != 0x80)
|
|
#error MFR_POPUP or MFR_END definition(s) invalid
|
|
#endif
|
|
#else
|
|
#define MFR_POPUP 0x01
|
|
#define MFR_END 0x80
|
|
#endif
|
|
|
|
/* Single-byte control class IDs */
|
|
#define BUTTONCODE 0x80
|
|
#define EDITCODE 0x81
|
|
#define STATICCODE 0x82
|
|
#define LISTBOXCODE 0x83
|
|
#define SCROLLBARCODE 0x84
|
|
#define COMBOBOXCODE 0x85
|
|
|
|
/* Translator flag bits */
|
|
#define fVIRTKEY 1
|
|
#define fNOINVERT 2
|
|
#define fSHIFT 4
|
|
#define fCONTROL 8
|
|
#define fALT 16
|
|
|
|
/* Menu flag bits */
|
|
#define OPGRAYED 0x0001
|
|
#define OPINACTIVE 0x0002 // INACTIVE | GRAYED
|
|
#define OPBITMAP 0x0004
|
|
#define OPOWNERDRAW 0x0100
|
|
#define OPUSECHECKBITMAPS 0x0200
|
|
#define OPCHECKED 0x0008
|
|
#define OPPOPUP 0x0010
|
|
#define OPBREAKWBAR 0x0020
|
|
#define OPBREAK 0x0040
|
|
#define OPENDMENU 0x0080
|
|
#define OPHELP 0x4000
|
|
#define OPSEPARATOR 0x0800
|
|
/*#define OPPOPHELP 0x0004*/
|
|
|
|
|
|
#define wcsdigit(w) (w >= 0x0030 && w <= 0x0039)
|
|
|
|
/*
|
|
** dialog & menu template tokens (these start at 40)
|
|
*/
|
|
|
|
/* buttons */
|
|
#define TKRADIOBUTTON 40
|
|
#define TKCHECKBOX 41
|
|
#define TKPUSHBUTTON 42
|
|
#define TKDEFPUSHBUTTON 43
|
|
#define TKAUTOCHECK 44
|
|
#define TK3STATE 45
|
|
#define TKAUTO3 46
|
|
#define TKUSERBUTTON 47
|
|
#define TKAUTORADIO 48
|
|
#define TKOWNERDRAW 50
|
|
#define TKGROUPBOX 51
|
|
#define TKPUSHBOX 52
|
|
|
|
/* static/edit */
|
|
#define TKBEDIT 57
|
|
#define TKHEDIT 58
|
|
#define TKIEDIT 59
|
|
#define TKEDITTEXT 60
|
|
#define TKLTEXT 61
|
|
#define TKRTEXT 62
|
|
#define TKCTEXT 63
|
|
#define TKEDIT 64
|
|
#define TKSTATIC 65
|
|
#define TKICON 66
|
|
#define TKBITMAP 67
|
|
|
|
/* menu stuff */
|
|
#define TKMENU 70
|
|
#define TKMENUITEM 71
|
|
#define TKSEPARATOR 72
|
|
#define TKCHECKED 73
|
|
#define TKGRAYED 74
|
|
#define TKINACTIVE 75
|
|
#define TKBREAKWBAR 76
|
|
#define TKBREAK 77
|
|
#define TKPOPUP 78
|
|
#define TKHELP 79
|
|
|
|
/* other controls */
|
|
#define TKLISTBOX 90
|
|
#define TKCOMBOBOX 91
|
|
#define TKRCDATA 92
|
|
#define TKSCROLLBAR 93
|
|
#define TKFONT 94
|
|
#define TKBUTTON 95
|
|
#define TKMESSAGETABLE 96
|
|
|
|
/* math expression tokens */
|
|
#define TKCLASS 100
|
|
#define TKPLUS 101
|
|
#define TKMINUS 102
|
|
#define TKNOINVERT 103
|
|
#define TKNOT 104
|
|
#define TKKANJI 105
|
|
#define TKSHIFT 106
|
|
|
|
/* Accel table */
|
|
#define TKALT 110
|
|
#define TKASCII 111
|
|
#define TKVIRTKEY 112
|
|
#define TKVALUE 113
|
|
#define TKBLOCK 114
|
|
|
|
/* verison */
|
|
#define TKFILEVERSION 120
|
|
#define TKPRODUCTVERSION 121
|
|
#define TKFILEFLAGSMASK 122
|
|
#define TKFILEFLAGS 123
|
|
#define TKFILEOS 124
|
|
#define TKFILETYPE 125
|
|
#define TKFILESUBTYPE 126
|
|
|
|
/* misc */
|
|
#define TKCHARACTERISTICS 130
|
|
#define TKLANGUAGE 131
|
|
#define TKVERSION 132
|
|
#define TKSTYLE 133
|
|
#define TKCONTROL 134
|
|
#define TKCAPTION 135
|
|
#define TKDLGINCLUDE 136
|
|
#define TKLSTR 137
|
|
#define TKDLGINIT 138
|
|
#define TKEXSTYLE 0xf7 /* so as not to conflict with x-coordinate */
|
|
|
|
/* memory and load flags */
|
|
#define TKFIXED 0xfff0
|
|
#define TKMOVEABLE 0xfff1
|
|
#define TKDISCARD 0xfff2
|
|
#define TKLOADONCALL 0xfff3
|
|
#define TKPRELOAD 0xfff4
|
|
#define TKPURE 0xfff5
|
|
#define TKIMPURE 0xfff6
|
|
|
|
|
|
|
|
/* special tokens */
|
|
#define CHCARRIAGE L'\r'
|
|
#define CHSPACE L' '
|
|
#define CHNEWLINE L'\n'
|
|
//??#define CHTAB 9
|
|
#define CHTAB L'\t'
|
|
#define CHDIRECTIVE L'#'
|
|
#define CHQUOTE L'"'
|
|
#define CHEXTENSION L'.'
|
|
#define CHCSOURCE L'c'
|
|
#define CHCHEADER L'h'
|
|
#define CHCOMMENT L';'
|
|
|
|
#define DEBUGLEX 1
|
|
#define DEBUGPAR 2
|
|
#define DEBUGGEN 4
|
|
|
|
/* End of file character/token */
|
|
#define EOFMARK 127
|
|
|
|
/* Single character keywords that we ignore */
|
|
#define LPAREN 1 /* ( */
|
|
#define RPAREN 2 /* ) */
|
|
|
|
/* multiple character keywords */
|
|
#define FIRSTKWD 11 /* for adding to table indices */
|
|
|
|
#define OR FIRSTKWD+1
|
|
#define BEGIN FIRSTKWD+2
|
|
#define END FIRSTKWD+3
|
|
#define COMMA FIRSTKWD+4
|
|
#define TILDE FIRSTKWD+5
|
|
#define AND FIRSTKWD+6
|
|
#define EQUAL FIRSTKWD+7 // AFX
|
|
#define LASTKWD FIRSTKWD+8 // 19
|
|
|
|
/* Token types */
|
|
#define NUMLIT LASTKWD+1 // 20
|
|
#define STRLIT LASTKWD+2
|
|
#define CHARLIT LASTKWD+3
|
|
#define LSTRLIT LASTKWD+4 // AFX
|
|
|
|
/* The following switches, when defined enable various options
|
|
** #define DEBUG enables debugging output. Use one or more of the
|
|
** values defined above to enable debugging output for different modules */
|
|
|
|
/* Version number. VERSION and REVISION are used to set the API number
|
|
** in an RCed file. SIGNON_* are used just to print the signon banner.
|
|
** Changing VERSION and REVISION means that applications RCed with this
|
|
** version will not run with earlier versions of Windows. */
|
|
|
|
//#define VERSION 2
|
|
#define REVISION 03
|
|
#define SIGNON_VER 4
|
|
#define SIGNON_REV 00
|
|
|
|
/* GetToken() flags */
|
|
#define TOKEN_NOEXPRESSION 0x8000
|
|
|
|
/* Current token structure */
|
|
#define MAXSTR (4096+1) // AFX defines this as 255
|
|
#define MAXTOKSTR (256+1)
|
|
|
|
// New Menu Template Parsing structures/definitions
|
|
|
|
// New menu template format
|
|
//
|
|
// MenuName MENUEX
|
|
// BEGIN
|
|
// [MENUITEM "text" [, [id] [, [type] [, [state]]]]]
|
|
// [POPUP "text" [, [id] [, [type] [, [state] [, [help id]]]]]
|
|
// BEGIN
|
|
// [MENUITEM "text" [, [id] [, [type] [, [state]]]]]
|
|
// ...
|
|
// END]
|
|
// ...
|
|
// END
|
|
|
|
typedef struct tagMENU
|
|
{
|
|
DWORD dwID;
|
|
DWORD dwType;
|
|
DWORD dwState;
|
|
DWORD dwHelpID;
|
|
WORD wResInfo;
|
|
WCHAR szText[MAXTOKSTR];
|
|
} MENU, *PMENU;
|
|
|
|
|
|
typedef enum
|
|
{
|
|
PT_WORD = 0,
|
|
PT_DWORD,
|
|
PT_TEXT
|
|
} PARSETYPE;
|
|
|
|
typedef enum
|
|
{
|
|
PTO_WORD = 0x80,
|
|
PTO_DWORD,
|
|
PTO_TEXT
|
|
} OPARSETYPE;
|
|
|
|
typedef enum
|
|
{
|
|
PAR_POPUP = 0,
|
|
PAR_MENUITEM,
|
|
PAR_MENU
|
|
} PARCELTYPE;
|
|
|
|
#define PT_OPTIONAL 0x80
|
|
|
|
typedef struct tagPARCEL
|
|
{
|
|
WORD *pwEnd;
|
|
BYTE *pwParms;
|
|
} PARCEL;
|
|
|
|
typedef struct tagKEY
|
|
{
|
|
PWCHAR kwd;
|
|
WORD kwdval;
|
|
} KEY, *PKEY;
|
|
|
|
typedef struct tagSKEY
|
|
{
|
|
WCHAR skwd;
|
|
UINT skwdval; /* changed from a char */
|
|
} SKEY, *PSKEY;
|
|
|
|
#pragma pack(2)
|
|
typedef struct tagSYMINFO
|
|
{
|
|
WCHAR name[MAX_SYMBOL + 1];/* symbol for the resource if available */
|
|
WCHAR file[_MAX_PATH];
|
|
WORD line;
|
|
WORD nID;
|
|
} SYMINFO, *PSYMINFO;
|
|
|
|
typedef struct tagTOKEN
|
|
{
|
|
LONG longval;
|
|
int row; /* line number of current token */
|
|
int col; /* column number of current token */
|
|
BOOL flongval; /* is parsed number a long? */
|
|
USHORT val;
|
|
UCHAR type;
|
|
UCHAR realtype;
|
|
SYMINFO sym;
|
|
} TOKEN, *PTOKEN;
|
|
|
|
typedef struct tagFONTDIR
|
|
{
|
|
USHORT ordinal;
|
|
USHORT nbyFont;
|
|
struct tagFONTDIR *next;
|
|
} FONTDIR, *PFONTDIR;
|
|
|
|
typedef struct tagOBJLST
|
|
{
|
|
struct tagOBJLST *next;
|
|
DWORD nObj; /* objecty number */
|
|
DWORD cb; /* number of bytes used */
|
|
DWORD cpg; /* number of pages used */
|
|
DWORD flags; /* object memory flags */
|
|
} OBJLST, *POBJLST;
|
|
|
|
typedef struct tagCTRL
|
|
{
|
|
SHORT x;
|
|
SHORT y;
|
|
SHORT cx;
|
|
SHORT cy;
|
|
WCHAR fOrdinalText;
|
|
WCHAR text[MAXTOKSTR];
|
|
DWORD id;
|
|
WCHAR Class[MAXTOKSTR];
|
|
DWORD dwStyle;
|
|
DWORD dwExStyle;
|
|
DWORD dwHelpID;
|
|
} CTRL, *PCTRL;
|
|
|
|
typedef struct tagDLGHDR
|
|
{
|
|
SHORT x;
|
|
SHORT y;
|
|
SHORT cx;
|
|
SHORT cy;
|
|
UCHAR fOrdinalMenu;
|
|
UCHAR fClassOrdinal;
|
|
DWORD dwStyle;
|
|
DWORD dwExStyle;
|
|
WORD bNumberOfItems;
|
|
WCHAR Title[MAXTOKSTR];
|
|
WCHAR MenuName[MAXTOKSTR];
|
|
WCHAR Class[MAXTOKSTR];
|
|
WCHAR Font[MAXTOKSTR];
|
|
WORD pointsize;
|
|
WORD wWeight;
|
|
BYTE bItalic;
|
|
BYTE bCharSet;
|
|
DWORD dwHelpID;
|
|
} DLGHDR, *PDLGHDR;
|
|
|
|
typedef struct tagMENUHDR
|
|
{
|
|
USHORT menuTemplateVersionNumber;
|
|
USHORT menuTemplateBytesInHeader;
|
|
} MENUHDR, *PMENUHDR;
|
|
|
|
typedef struct tagMENUITEM
|
|
{
|
|
SHORT id;
|
|
WCHAR szText[ MAXTOKSTR ];
|
|
WORD OptFlags;
|
|
WORD PopFlag;
|
|
} MENUITEM, *PMENUITEM;
|
|
|
|
#define BLOCKSIZE 16
|
|
typedef struct tagRCSTRING
|
|
{
|
|
struct tagRCSTRING *next;
|
|
DWORD version;
|
|
DWORD characteristics;
|
|
USHORT hibits;
|
|
SHORT flags;
|
|
WORD language;
|
|
PWCHAR rgsz[ BLOCKSIZE ];
|
|
PSYMINFO rgsym[ BLOCKSIZE ];
|
|
} RCSTRING, *PRCSTRING;
|
|
|
|
typedef struct tagRCACCEL
|
|
{
|
|
WORD flags;
|
|
WCHAR ascii;
|
|
USHORT id;
|
|
USHORT unused;
|
|
} RCACCEL, *PRCACCEL;
|
|
|
|
typedef struct tagRESINFO
|
|
{
|
|
DWORD version;
|
|
DWORD characteristics;
|
|
LONG exstyleT;
|
|
LONG BinOffset;
|
|
LONG size;
|
|
struct tagRESINFO *next;
|
|
WORD *poffset;
|
|
PWCHAR name;
|
|
POBJLST pObjLst;
|
|
WORD language;
|
|
SHORT flags;
|
|
USHORT nameord;
|
|
USHORT cLang;
|
|
SYMINFO sym;
|
|
} RESINFO, *PRESINFO;
|
|
|
|
typedef struct tagTYPEINFO
|
|
{
|
|
struct tagTYPEINFO *next;
|
|
PRESINFO pres;
|
|
PWCHAR type;
|
|
USHORT typeord;
|
|
USHORT cTypeStr;
|
|
USHORT cNameStr;
|
|
SHORT nres;
|
|
} TYPEINFO, *PTYPEINFO;
|
|
|
|
#pragma pack()
|
|
|
|
|
|
/* ----- Global variables ----- */
|
|
extern SHORT ResCount;
|
|
extern PTYPEINFO pTypInfo;
|
|
extern UINT uiDefaultCodePage;
|
|
extern UINT uiCodePage;
|
|
extern SHORT nFontsRead;
|
|
extern PFONTDIR pFontList;
|
|
extern PFONTDIR pFontLast;
|
|
extern TOKEN token;
|
|
extern int errorCount;
|
|
extern WCHAR tokenbuf[MAXSTR + 1]; // +1 is to allow double sz termination
|
|
extern wchar_t exename[_MAX_PATH];
|
|
extern wchar_t fullname[_MAX_PATH];
|
|
extern wchar_t curFile[_MAX_PATH];
|
|
extern WORD language;
|
|
extern LONG version;
|
|
extern LONG characteristics;
|
|
|
|
extern PDLGHDR pLocDlg;
|
|
extern UINT mnEndFlagLoc; /* patch location for end of a menu. */
|
|
/* we set the high order bit there */
|
|
extern BOOL fVerbose; /* verbose mode (-v) */
|
|
extern BOOL fAFXSymbols;
|
|
extern BOOL fMacRsrcs;
|
|
extern BOOL fAppendNull;
|
|
extern BOOL fWarnInvalidCodePage;
|
|
extern BOOL fSkipDuplicateCtlIdWarning;
|
|
extern long lOffIndex;
|
|
extern WORD idBase;
|
|
extern wchar_t *szTempFileName;
|
|
extern wchar_t *szTempFileName2;
|
|
extern wchar_t inname[_MAX_PATH];
|
|
extern PFILE fhBin;
|
|
extern PFILE fhInput;
|
|
extern PFILE fhCode;
|
|
extern wchar_t *pchInclude;
|
|
extern SHORT k1,k2,k3,k4;
|
|
extern PRESINFO pResString;
|
|
|
|
extern HINSTANCE hInstance;
|
|
extern HANDLE hHeap;
|
|
|
|
extern int nBogusFontNames;
|
|
extern WCHAR *pszBogusFontNames[16];
|
|
extern WCHAR szSubstituteFontName[MAXTOKSTR];
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* */
|
|
/* rcl.c */
|
|
/* */
|
|
/*---------------------------------------------------------------------------*/
|
|
|
|
USHORT FindKwd(PWCHAR);
|
|
WCHAR GetCharFTB();
|
|
PWSTR GetWord(PWSTR);
|
|
LONG GetDNum();
|
|
LONG GetExpression();
|
|
PWCHAR GetGenText();
|
|
int GetKwd(int);
|
|
int GetNameOrd();
|
|
VOID GetNum();
|
|
VOID GetNumFTB();
|
|
VOID GetNumNoExpression();
|
|
LONG GetONum();
|
|
LONG GetOperand();
|
|
int GetOperator(PWCHAR pOperator);
|
|
VOID GetStr();
|
|
int GetToken(int);
|
|
LONG GetXNum();
|
|
void LexError1(int iMsg);
|
|
void LexError2(int iMsg, const wchar_t *str);
|
|
int LexInit(PFILE);
|
|
WCHAR LitChar();
|
|
WCHAR OurGetChar();
|
|
VOID SkipWhitespace();
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* */
|
|
/* rcp.c */
|
|
/* */
|
|
/*---------------------------------------------------------------------------*/
|
|
|
|
VOID AddBinEntry(PTYPEINFO, PRESINFO, PCHAR , int, LONG);
|
|
VOID AddDefaultTypes();
|
|
VOID AddFontDir();
|
|
VOID AddResToResFile (PTYPEINFO, PRESINFO, PCHAR, int, LONG);
|
|
PTYPEINFO AddResType (PWCHAR, LPWSTR);
|
|
VOID AddStringToBin(USHORT, PWCHAR);
|
|
int DGetMemFlags(PRESINFO);
|
|
LONG GetFileName (VOID);
|
|
VOID ParseError1(int);
|
|
VOID ParseError2(int, PWCHAR); // AFX has 1&2 -- NT just has ParseError
|
|
VOID ParseError3(int);
|
|
int ReadRF(VOID);
|
|
WORD GetLanguage(VOID);
|
|
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* */
|
|
/* rcstring.c */
|
|
/* */
|
|
/*---------------------------------------------------------------------------*/
|
|
|
|
VOID WriteTable (PRESINFO);
|
|
int GetAccelerators (PRESINFO);
|
|
PRESINFO GetTable (PRESINFO);
|
|
void * MyFAlloc(size_t, const void *);
|
|
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* */
|
|
/* rctg.c */
|
|
/* */
|
|
/*---------------------------------------------------------------------------*/
|
|
|
|
DWORD GetNewBitmap(void);
|
|
BOOL AddFontRes(PRESINFO);
|
|
VOID AppendString(PWCHAR, BOOL);
|
|
VOID CtlAlloc();
|
|
PFILE CtlFile(PFILE);
|
|
VOID CtlFree();
|
|
VOID CtlInit();
|
|
VOID FixMenuPatch();
|
|
VOID GenWarning2(int iMsg, const wchar_t *arg);
|
|
VOID GenWarning4(int iMsg, const wchar_t *arg1, const wchar_t *arg2, const wchar_t *arg3);
|
|
VOID GenError1(int iMsg);
|
|
VOID GenError2(int iMsg, const wchar_t *arg);
|
|
WORD GetBufferLen();
|
|
void SetItemCount(int Index, USHORT wCount);
|
|
USHORT GetItemCount(int Index);
|
|
DWORD GetIcon(LONG);
|
|
DWORD GetAniIconsAniCursors(LONG nbyFile);
|
|
DWORD FileIsAnimated(LONG nbyFile);
|
|
VOID GetNewIconsCursors(PTYPEINFO, PRESINFO, LPWSTR);
|
|
WORD GetRCData(PRESINFO);
|
|
void * GetSpace(WORD cb);
|
|
VOID IncItemCount();
|
|
VOID SwapItemCount(VOID);
|
|
void FixMenuPatch (WORD);
|
|
void FixOldMenuPatch (WORD);
|
|
VOID MarkAccelFlagsByte();
|
|
VOID MarkMenuPatch();
|
|
VOID PatchAccelEnd();
|
|
LONG ResourceSize();
|
|
VOID SaveResFile(PTYPEINFO, PRESINFO);
|
|
void SetItemExtraCount(WORD, BOOL);
|
|
void SetUpDlg (PDLGHDR, BOOL);
|
|
void SetUpItem (PCTRL, BOOL);
|
|
WORD SetUpMenu (PMENU);
|
|
WORD SetUpOldMenu (PMENUITEM);
|
|
VOID WriteAlign();
|
|
void WriteBuffer(const void *, size_t);
|
|
int WriteControl(PFILE, PCHAR, int, LONG);
|
|
VOID WriteString(PWCHAR, BOOL);
|
|
VOID WriteMacString(PWCHAR sz, BOOL fMacCP, BOOL fPascal);
|
|
int ExpandString(BYTE* pb, int cb, BYTE* pbExpand);
|
|
WORD SwapWord(WORD w);
|
|
DWORD SwapLong(DWORD dw);
|
|
|
|
#define SwappedWord(w) (fMacRsrcs ? SwapWord(w) : (w))
|
|
#define SwappedLong(dw) (fMacRsrcs ? SwapLong(dw) : (dw))
|
|
|
|
#define WriteByte(b) (*(BYTE *) GetSpace(sizeof(BYTE)) = b)
|
|
#define WriteLong(dw) (*(DWORD UNALIGNED *) GetSpace(sizeof(DWORD)) = SwappedLong(dw))
|
|
#define WriteWord(w) (*(WORD UNALIGNED *) GetSpace(sizeof(WORD)) = SwappedWord(w))
|
|
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* */
|
|
/* rctp.c */
|
|
/* */
|
|
/*---------------------------------------------------------------------------*/
|
|
|
|
#define GFE_ZEROINIT 0x0001
|
|
#define GFE_SHORT 0x0002
|
|
|
|
void DGetClassName (PDLGHDR);
|
|
void DGetFont (PDLGHDR, BOOL);
|
|
void DGetMenuName (PDLGHDR);
|
|
void DGetTitle (PDLGHDR);
|
|
BOOL DLexOptionalArgs(PRESINFO, PDLGHDR, BOOL);
|
|
void DlgIncludeParse (PRESINFO); // new for NT
|
|
WORD DoMenuItem (int);
|
|
void GetCoords (PSHORT, PSHORT, PSHORT, PSHORT);
|
|
VOID GetCtlCoords (PCTRL);
|
|
VOID GetCtlID (PCTRL, BOOL);
|
|
VOID GetCtlText (PCTRL);
|
|
int GetDlg (PRESINFO, PDLGHDR, BOOL);
|
|
int GetDlgItems (BOOL);
|
|
BOOL GetFullExpression(void *pval, WORD wFlags);
|
|
USHORT GetTokenNoComma (USHORT wFlags);
|
|
USHORT ICGetTok ();
|
|
int IsmnOption (UINT, PMENUITEM);
|
|
VOID ParseCtl (PCTRL, BOOL);
|
|
int ParseMenu (int, PRESINFO);
|
|
int ParseOldMenu (int, PRESINFO);
|
|
int VersionBlockStruct(PWCHAR pstrKey, PCHAR pstrValue, USHORT LenValue);
|
|
int VersionBlockVariable(PWCHAR pstrKey);
|
|
VOID VersionGet4Words(PDWORD pdw);
|
|
VOID VersionGetDWord(PDWORD pdw);
|
|
int VersionParse();
|
|
USHORT VersionParseBlock();
|
|
int VersionParseFixed();
|
|
USHORT VersionParseValue(int IndexType); // void arg list in AFX
|
|
int GetToolbar (PRESINFO);
|
|
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* */
|
|
/* rcutil.c */
|
|
/* */
|
|
/*---------------------------------------------------------------------------*/
|
|
|
|
VOID ExtractFileName(const wchar_t *, wchar_t *);
|
|
int iswhite(WCHAR);
|
|
BOOL IsSwitchChar(wchar_t);
|
|
UINT MyAlign(PFILE);
|
|
PVOID MyAlloc(size_t);
|
|
size_t MyCopy(PFILE, PFILE, size_t);
|
|
int MyCopyAll(PFILE, PFILE);
|
|
void MyFree(PVOID);
|
|
PWCHAR MyMakeStr(const wchar_t *);
|
|
size_t MyRead(PFILE, void *, size_t);
|
|
LONG MySeek(PFILE, LONG, int);
|
|
size_t MyWrite(PFILE, const void *, size_t);
|
|
VOID PreBeginParse(PRESINFO, int);
|
|
VOID quit(const wchar_t *);
|
|
int strpre (const wchar_t *, const wchar_t *);
|
|
DWORD wcsatoi(const wchar_t *);
|
|
PWCHAR wcsitow(LONG v, PWCHAR s, DWORD r);
|
|
|
|
|
|
/*---------------------------------------------------------------------------*/
|
|
/* */
|
|
/* rcfutil.c */
|
|
/* */
|
|
/*---------------------------------------------------------------------------*/
|
|
|
|
int fgetl (PWCHAR, int, BOOL, PFILE);
|
|
|
|
|
|
/* ----- AFX Functionality ----- */
|
|
#include "rcppx.h"
|
|
|
|
LONG MakeFontDir(); // AFX only
|
|
|
|
void DoMessageCallback(BOOL, const wchar_t *);
|
|
void SendWarning(const wchar_t *);
|
|
void SendError(const wchar_t *);
|
|
|
|
extern RC_MESSAGE_CALLBACK lpfnMessageCallbackA;
|
|
extern RC_MESSAGE_CALLBACKW lpfnMessageCallbackW;
|
|
extern RC_PARSE_CALLBACK lpfnParseCallbackA;
|
|
extern RC_PARSE_CALLBACKW lpfnParseCallbackW;
|
|
extern BOOL fWindowUnicode;
|
|
extern HWND hWndCaller;
|
|
|
|
void GetSymbolDef(int fReportError, WCHAR curChar);
|
|
void GetSymbol(int fReportError, WCHAR curChar);
|
|
BOOL InitSymbolInfo();
|
|
BOOL TermSymbolInfo(PFILE fhresFile);
|
|
void WriteSymbolUse(PSYMINFO sym);
|
|
void WriteSymbolDef(PWCHAR name, PWCHAR value, PWCHAR file, WORD line, char flags);
|
|
void WriteFileInfo(PRESINFO pRes, PTYPEINFO pType, PWCHAR szFileName);
|
|
void WriteResInfo(PRESINFO pRes, PTYPEINFO pType, BOOL bWriteMapEntry);
|
|
void WriteResIndex(PRESINFO pRes, PTYPEINFO pType);
|
|
void UpdateStatus(unsigned nCode, unsigned long dwStatus);
|
|
|
|
// offset in a macintosh resource file of the start of the resource data
|
|
#define MACDATAOFFSET 256
|
|
|
|
void GetMacIcon(TYPEINFO *pType, RESINFO *pRes);
|
|
void GetMacCursor(TYPEINFO *pType, RESINFO *pRes);
|
|
|
|
void WriteMacMap(void);
|
|
BOOL IsIcon(TYPEINFO* ptype);
|
|
|
|
#define res_type(ch1,ch2,ch3,ch4) (((unsigned long)(unsigned char)(ch1)<<24)| \
|
|
((unsigned long)(unsigned char)(ch2)<<16)| \
|
|
((unsigned long)(unsigned char)(ch3)<<8)| \
|
|
((unsigned long)(unsigned char)(ch4)))
|