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.