mirror of
git://source.winehq.org/git/wine.git
synced 2024-11-05 18:01:34 +00:00
7662ea1004
that we can have both stdcall and cdecl register functions. Changed 16-bit .spec.c file generation to avoid including builtin16.h.
177 lines
6 KiB
Text
177 lines
6 KiB
Text
Spec file format
|
|
----------------
|
|
|
|
name NAME
|
|
type win16|win32
|
|
[file WINFILENAME]
|
|
[mode dll|cuiexe|guiexe|cuiexe_unicode|guiexe_unicode]
|
|
[heap SIZE]
|
|
[stack SIZE]
|
|
[init FUNCTION]
|
|
[import [IMP_FLAGS] DLL]
|
|
[rsrc RESFILE]
|
|
[debug_channels ([CHANNEL [CHANNEL...]])]
|
|
[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:
|
|
========
|
|
|
|
"name" and "type" fields are mandatory. Specific ordinal
|
|
declarations are optional, but the default handler will print an error
|
|
message.
|
|
|
|
"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.
|
|
|
|
"stack" is the stack size for Win32 exe modules, in kilobytes; default
|
|
size is 1024 (1Mb stack).
|
|
|
|
"file" gives the name of the Windows file that is replaced by the
|
|
builtin. <name>.DLL is assumed if none is given. (This is important
|
|
for kernel, which lives in the Windows file KRNL386.EXE).
|
|
|
|
"init" specifies a function which will be called when this dll
|
|
is loaded. This is only valid for Win32 modules.
|
|
|
|
"import" names a module that this one depends on (only for Win32
|
|
modules at the present). The import declaration can be present several
|
|
times.
|
|
|
|
"IMP_FLAGS" is a series of optional flags, preceded by a '-'
|
|
character. The supported flags are:
|
|
"-delay": the module this module depends upon will be loaded
|
|
when the first API will be called (and not while this
|
|
module is loaded)
|
|
|
|
"rsrc" specifies the path of the compiled resource file.
|
|
|
|
"debug_channels" specifies the list of debug channels used by the dll.
|
|
|
|
"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.
|
|
|