mirror of
https://github.com/reactos/wine.git
synced 2024-12-01 07:30:37 +00:00
.. | ||
.cvsignore | ||
build.h | ||
import.c | ||
main.c | ||
Makefile.in | ||
parser.c | ||
README | ||
relay.c | ||
res16.c | ||
res32.c | ||
spec16.c | ||
spec32.c | ||
utils.c |
Spec file format ---------------- [name NAME] [file WINFILENAME] [mode dll|cuiexe|guiexe|cuiexe_unicode|guiexe_unicode] [heap SIZE] [init FUNCTION] [rsrc RESFILE] [ignore ([SYMBOL [SYMBOL...]])] ORDINAL FUNCTYPE [FLAGS] EXPORTNAME([ARGTYPE [ARGTYPE [...]]]) HANDLERNAME ORDINAL variable [FLAGS] EXPORTNAME (DATA [DATA [DATA [...]]]) ORDINAL stub [FLAGS] EXPORTNAME ORDINAL equate [FLAGS] EXPORTNAME DATA ORDINAL extern [FLAGS] EXPORTNAME SYMBOLNAME ORDINAL forward [FLAGS] EXPORTNAME SYMBOLNAME # COMMENT_TEXT -------------------- General: ======== All declarations are optional; reasonable defaults will be used for anything that isn't specified. "name" is the internal name of the module. It is only used in Win16 modules. The default is to use the base name of the spec file (without any extension). This is used for KERNEL, since it lives in KRNL386.EXE. It shouldn't be needed otherwise. "file" gives the name of the file containing the dll. If not specified it is determined from the name of the source spec file. Normally you shouldn't ever need to specify it explicitly. "mode" specifies whether it is the spec file for a dll or the main exe. This is only valid for Win32 spec files. "heap" is the size of the module local heap (only valid for Win16 modules); default is no local heap. "init" specifies a function which will be called when this dll is loaded. This is only valid for Win32 modules. "rsrc" specifies the path of the compiled resource file. "ignore" specifies a list of symbols that should be ignored when resolving undefined symbols against the imported libraries. "ORDINAL" specified the ordinal number corresponding to the entry point, or "@" for automatic ordinal allocation (Win32 only). "FLAGS" is a series of optional flags, preceded by a '-' character. The supported flags are: "-noimport": the entry point is not made available for importing from winelib applications (Win32 only). "-norelay": the entry point is not displayed in relay debugging traces (Win32 only). "-ret64": the function returns a 64-bit value (Win32 only). "-i386": the entry point is only available on i386 platforms. "-register": the function uses CPU register to pass arguments. "-interrupt": the function is an interrupt handler routine. Lines whose first character is a '#' will be ignored as comments. Variable ordinals: ================== This type defines data storage as 32-bit words at the ordinal specified. "EXPORTNAME" will be the name available for dynamic linking. "DATA" can be a decimal number or a hex number preceeded by "0x". The following example defines the variable "VariableA" at ordinal 2 and containing 4 ints: 2 variable VariableA(-1 0xff 0 0) Function ordinals: ================== This type defines a function entry point. The prototype defined by "EXPORTNAME ([ARGTYPE [ARGTYPE [...]]])" specifies the name available for dynamic linking and the format of the arguments. "@" can be used instead of "EXPORTNAME" for ordinal-only exports. "FUNCTYPE" should be one of: - "pascal16" for a Win16 function returning a 16-bit value - "pascal" for a Win16 function returning a 32-bit value - "stdcall" for a normal Win32 function - "cdecl" for a Win32 function using the C calling convention - "varargs" for a Win32 function taking a variable number of arguments "ARGTYPE" should be one of: - "word" (16-bit unsigned value) - "s_word" (16-bit signed word) - "long" (32-bit value) - "double" (64-bit value) - "ptr" (linear pointer) - "str" (linear pointer to a null-terminated ASCII string) - "wstr" (linear pointer to a null-terminated Unicode string) - "segptr" (segmented pointer) - "segstr" (segmented pointer to a null-terminated ASCII string) Only "ptr", "str", "wstr", "long" and "double" are valid for Win32 functions. "HANDLERNAME" is the name of the actual Wine function that will process the request in 32-bit mode. This first example defines an entry point for the CreateWindow() call (the ordinal 100 is just an example): 100 pascal CreateWindow(ptr ptr long s_word s_word s_word s_word word word word ptr) WIN_CreateWindow This second example defines an entry point for the GetFocus() call (the ordinal 100 is just an example): 100 pascal GetFocus() WIN_GetFocus() To declare a function using a variable number of arguments in Win16, specify the function as taking no arguments. The arguments are then available with CURRENT_STACK16->args. In Win32, specify the function as 'varargs' and declare it with a '...' parameter in the C file. See the wsprintf* functions in user.spec and user32.spec for an example. Stub ordinals: ============== This type defines a stub function. It makes the name and ordinal available for dynamic linking, but will terminate execution with an error message if the function is ever called. Equate ordinals: ================ This type defines an ordinal as an absolute value. "EXPORTNAME" will be the name available for dynamic linking. "DATA" can be a decimal number or a hex number preceeded by "0x". Extern ordinals: ================ This type defines an entry that simply maps to a Wine symbol (variable or function); "EXPORTNAME" will point to the symbol "SYMBOLNAME" that must be defined in C code. This type only works with Win32. Forwarded ordinals: =================== This type defines an entry that is forwarded to another entry point (kind of a symbolic link). "EXPORTNAME" will forward to the entry point "SYMBOLNAME" that must be of the form "DLL.Function". This type only works with Win32.