name	NAME
id	ID_NUMBER
length	NUMBER_OF_ORDINALS

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

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

ORDINAL equate EXPORTNAME DATA

ORDINAL return EXPORTNAME ARGLENGTH RETVALUE

# COMMENT_TEXT

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

    "name", "id" and "length" 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.  By specifying
"FUNCTYPE", the loader can automatically determine which order the
parameters were pushed by the calling routine.  The prototype
specified by "HANDLERNAME([ARGNUM [ARGNUM [...]]])"  specifies to
the loader how to call the 32-bit library routine which will handle this
call.  Note that specifying "ARGNUM" as 1 means the leftmost argument
given to the function call, and not the first argument on the stack.
For "pascal" functions, "ARGNUM" equal to 1 specifies the last
argument on the stack.  If you do not specify any arguments to the
handler function, then address of the 16-bit argument stack is
passed to the handler function.
    "ORDINAL" is replaced by the ordinal number corresponding to the
function.  "FUNCTYPE" should be "c" or "pascal" ("pascal" may be
shortened to "p").  "EXPORTNAME" will be the name available for
dynamic linking.  "ARGTYPE" should be "byte", "word", "long", "ptr",
"s_byte" (signed byte), "s_word" (signed word) or "s_long"
(signed long).  "HANDLERNAME" is the name of the actual function
that will process the request in 32-bit mode.  "ARGNUM" is the
original argument number.  The first argument is numbered "1".

    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(1 2 3 4 5 6 7 8 9 10 11)

   This second example defines an entry point for the GetFocus()
call (the ordinal 100 is just an example):

	100 pascal GetFocus() WIN_GetFocus()

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.
