name	NAME
id	ID_NUMBER

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 "id" fields are mandatory.  Specific ordinal declarations
are optional, but the default handler will print an error message.  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 16-bit stack. "ORDINAL" is replaced
by the ordinal number corresponding to the function.  "FUNCTYPE" should be
"pascal16" or "pascal" for 16-bit or 32-bit return values.  "ARGTYPE"
should be "byte", "word", "long", "ptr" (linear pointer), "s_byte" (signed
byte), "s_word" (signed word), "s_long" (signed long), or "segptr"
(segmented pointer).  "HANDLERNAME" is the name of the actual 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.
