| 			Spec file format | 
 | 			---------------- | 
 |  | 
 | name	NAME | 
 | type    win16|win32 | 
 | [file   WINFILENAME] | 
 | [mode	dll|cuiexe|guiexe|cuiexe_unicode|guiexe_unicode] | 
 | [heap   SIZE] | 
 | [stack  SIZE] | 
 | [init	FUNCTION] | 
 | [import [IMP_FLAGS] DLL] | 
 | [rsrc	RESFILE] | 
 | [debug_channels ([CHANNEL [CHANNEL...]])] | 
 | [ignore ([SYMBOL [SYMBOL...]])] | 
 |  | 
 | ORDINAL FUNCTYPE [FLAGS] EXPORTNAME([ARGTYPE [ARGTYPE [...]]]) HANDLERNAME | 
 |  | 
 | ORDINAL variable [FLAGS] EXPORTNAME (DATA [DATA [DATA [...]]]) | 
 |  | 
 | ORDINAL stub [FLAGS] EXPORTNAME | 
 |  | 
 | ORDINAL equate [FLAGS] EXPORTNAME DATA | 
 |  | 
 | ORDINAL extern [FLAGS] EXPORTNAME SYMBOLNAME | 
 |  | 
 | ORDINAL forward [FLAGS] 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. | 
 |  | 
 | "stack" is the stack size for Win32 exe modules, in kilobytes; default | 
 | size is 1024 (1Mb stack). | 
 |  | 
 | "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. | 
 |  | 
 | "IMP_FLAGS" is a series of optional flags, preceded by a '-' | 
 | character. The supported flags are: | 
 | "-delay":       the module this module depends upon will be loaded | 
 | 	 	when the first API will be called (and not while this | 
 | 		module is loaded) | 
 |  | 
 | "rsrc" specifies the path of the compiled resource file. | 
 |  | 
 | "debug_channels" specifies the list of debug channels used by the dll. | 
 |  | 
 | "ignore" specifies a list of symbols that should be ignored when | 
 | resolving undefined symbols against the imported libraries. | 
 |  | 
 | "ORDINAL" specified the ordinal number corresponding to the entry | 
 | point, or "@" for automatic ordinal allocation (Win32 only). | 
 |  | 
 | "FLAGS" is a series of optional flags, preceded by a '-' character. | 
 | The supported flags are: | 
 |   "-noimport": the entry point is not made available for importing | 
 |                from winelib applications (Win32 only). | 
 |   "-norelay":  the entry point is not displayed in relay debugging | 
 |                traces (Win32 only). | 
 |   "-ret64":    the function returns a 64-bit value (Win32 only). | 
 |   "-i386":     the entry point is only available on i386 platforms. | 
 |  | 
 | Lines whose first character is a '#' will be ignored as comments. | 
 |  | 
 |  | 
 | Variable ordinals: | 
 | ================== | 
 |  | 
 |     This type defines data storage as 32-bit words at the ordinal specified. | 
 | "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 ints: | 
 |  | 
 | 	2 variable 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. "@" can be used | 
 | instead of "EXPORTNAME" for ordinal-only exports. | 
 |  | 
 | "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"   (16-bit unsigned value) | 
 | - "s_word" (16-bit signed word) | 
 | - "long"   (32-bit value) | 
 | - "double" (64-bit value) | 
 | - "ptr"    (linear pointer) | 
 | - "str"    (linear pointer to a null-terminated ASCII string) | 
 | - "wstr"   (linear pointer to a null-terminated Unicode string) | 
 | - "segptr" (segmented pointer) | 
 | - "segstr" (segmented pointer to a null-terminated ASCII string) | 
 |  | 
 | Only "ptr", "str", "wstr", "long" and "double" 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. | 
 | "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. | 
 |  |