name	NAME
type    win16|win32
[base   ORDINAL]
[heap   SIZE]

ORDINAL VARTYPE EXPORTNAME (DATA [DATA [DATA [...]]])

ORDINAL FUNCTYPE EXPORTNAME([ARGTYPE [ARGTYPE [...]]]) HANDLERNAME

ORDINAL stub EXPORTNAME

ORDINAL equate EXPORTNAME DATA

ORDINAL return EXPORTNAME ARGLENGTH RETVALUE

# COMMENT_TEXT

--------------------
General:

    "name" and "type" fields are mandatory.  Specific ordinal
declarations are optional, but the default handler will print an error
message.  "base" gives the offset of the first ordinal; default is 0.
"heap" is the size of the module local heap (only valid for Win16
modules); default is no local heap.  Lines whose first character is a
'#' will be ignored as comments.

Variable ordinals:

    This type defines data storage at the ordinal specified.  You may
store items as bytes, 16-bit words, or 32-bit words.
    "ORDINAL" is replaced by the ordinal number corresponding to the
variable.  "VARTYPE" should be "byte", "word" or "long" for 8, 16, or
32 bits respectively.  "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 bytes:

	2 byte 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. "ORDINAL" is replaced
by the ordinal number corresponding to the function.

"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
- "register" for a function using CPU register to pass arguments
- "stdcall" for a normal Win32 function
- "cdecl" for a Win32 function using the C calling convention

"ARGTYPE" should be one of:
- "byte"
- "word"
- "long"
- "ptr" (linear pointer)
- "s_byte" (signed byte)
- "s_word" (signed word)
- "s_long" (signed long)
- "segptr" (segmented pointer).

Only "ptr" and "long" 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()

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.
"ORDINAL" is replaced by the ordinal number corresponding to the
variable.  "EXPORTNAME" will be the name available for dynamic linking.  
"DATA" can be a decimal number or a hex number preceeded by "0x".

Return ordinals:

    This type defines a function entry point whose handler should do
nothing but return a value.
    "ORDINAL" is replaced by the ordinal number corresponding to the
variable.  ARGLENGTH is the number of bytes that need to be removed
from the stack before returning to the caller.  RETVALUE is the
return value which will be passed back to the caller.
