			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.

