| Spec file format | |
| ---------------- | |
| name NAME | |
| type win16|win32 | |
| [file WINFILENAME] | |
| [mode dll|cuiexe|guiexe] | |
| [heap SIZE] | |
| [init FUNCTION] | |
| [import DLL] | |
| [rsrc PREFIX] | |
| ORDINAL VARTYPE EXPORTNAME (DATA [DATA [DATA [...]]]) | |
| ORDINAL FUNCTYPE EXPORTNAME([ARGTYPE [ARGTYPE [...]]]) HANDLERNAME | |
| ORDINAL stub EXPORTNAME | |
| ORDINAL equate EXPORTNAME DATA | |
| ORDINAL extern EXPORTNAME SYMBOLNAME | |
| ORDINAL forward 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. | |
| "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. | |
| "rsrc" specifies the prefix for the resource directory name. | |
| 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, or "@" for | |
| automatic ordinal allocation (Win32 only). | |
| "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 | |
| - "interrupt" for a Win16 interrupt handler routine | |
| - "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" | |
| - "long" | |
| - "ptr" (linear pointer) | |
| - "str" (linear pointer to a null-terminated string) | |
| - "s_word" (signed word) | |
| - "segptr" (segmented pointer). | |
| - "segstr" (segmented pointer to a null-terminated string) | |
| Only "ptr", "str" 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() | |
| 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. | |
| "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". | |
| 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. | |