Adapted to the interface/implementation separation.
[wine] / tools / build-spec.txt
1 name    NAME
2 type    win16|win32
3 [file   WINFILENAME]
4 [base   ORDINAL]
5 [heap   SIZE]
6
7 ORDINAL VARTYPE EXPORTNAME (DATA [DATA [DATA [...]]])
8
9 ORDINAL FUNCTYPE EXPORTNAME([ARGTYPE [ARGTYPE [...]]]) HANDLERNAME
10
11 ORDINAL stub EXPORTNAME
12
13 ORDINAL equate EXPORTNAME DATA
14
15 ORDINAL return EXPORTNAME ARGLENGTH RETVALUE
16
17 ORDINAL extern EXPORTNAME SYMBOLNAME
18
19 # COMMENT_TEXT
20
21 --------------------
22 General:
23 ========
24
25     "name" and "type" fields are mandatory.  Specific ordinal
26 declarations are optional, but the default handler will print an error
27 message.  "base" gives the offset of the first ordinal; default is 0.
28 "heap" is the size of the module local heap (only valid for Win16
29 modules); default is no local heap. "file" gives the name of the
30 Windows file that is replaced by the builtin. <name>.DLL is assumed if
31 none is given. (This is important for kernel, which lives in the
32 Windows file KRNL386.EXE).  Lines whose first character is a '#' will
33 be ignored as comments.
34
35
36 Variable ordinals:
37 ==================
38
39     This type defines data storage at the ordinal specified.  You may
40 store items as bytes, 16-bit words, or 32-bit words.
41     "ORDINAL" is replaced by the ordinal number corresponding to the
42 variable.  "VARTYPE" should be "byte", "word" or "long" for 8, 16, or
43 32 bits respectively.  "EXPORTNAME" will be the name available for
44 dynamic linking.  "DATA" can be a decimal number or a hex number preceeded
45 by "0x".  The following example defines the variable "VariableA" at
46 ordinal 2 and containing 4 bytes:
47
48         2 byte VariableA(-1 0xff 0 0)
49
50 Function ordinals:
51 ==================
52
53     This type defines a function entry point.  The prototype defined by
54 "EXPORTNAME ([ARGTYPE [ARGTYPE [...]]])" specifies the name available for
55 dynamic linking and the format of the arguments. "ORDINAL" is replaced
56 by the ordinal number corresponding to the function.
57
58 "FUNCTYPE" should be one of:
59 - "pascal16" for a Win16 function returning a 16-bit value
60 - "pascal" for a Win16 function returning a 32-bit value
61 - "register" for a function using CPU register to pass arguments
62 - "stdcall" for a normal Win32 function
63 - "cdecl" for a Win32 function using the C calling convention
64 - "varargs" for a Win32 function taking a variable number of arguments
65
66 "ARGTYPE" should be one of:
67 - "word"
68 - "long"
69 - "ptr" (linear pointer)
70 - "str" (linear pointer to a null-terminated string)
71 - "s_word" (signed word)
72 - "segptr" (segmented pointer).
73 - "segstr" (segmented pointer to a null-terminated string)
74
75 Only "ptr", "str" and "long" are valid for Win32 functions.
76
77 "HANDLERNAME" is the name of the actual Wine function that will
78 process the request in 32-bit mode.
79
80     This first example defines an entry point for the CreateWindow()
81 call (the ordinal 100 is just an example):
82
83         100 pascal CreateWindow(ptr ptr long s_word s_word s_word s_word
84                                 word word word ptr)
85                    WIN_CreateWindow
86
87    This second example defines an entry point for the GetFocus()
88 call (the ordinal 100 is just an example):
89
90         100 pascal GetFocus() WIN_GetFocus()
91
92 To declare a function using a variable number of arguments in Win16,
93 specify the function as taking no arguments. The arguments are then
94 available with CURRENT_STACK16->args. In Win32, specify the function
95 as 'varargs' and declare it with a '...' parameter in the C file.  See
96 the wsprintf* functions in user.spec and user32.spec for an example.
97
98 Stub ordinals:
99 ==============
100
101     This type defines a stub function. It makes the name and ordinal
102 available for dynamic linking, but will terminate execution with an
103 error message if the function is ever called.
104
105 Equate ordinals:
106 ================
107
108     This type defines an ordinal as an absolute value.
109 "ORDINAL" is replaced by the ordinal number corresponding to the
110 variable.  "EXPORTNAME" will be the name available for dynamic linking.  
111 "DATA" can be a decimal number or a hex number preceeded by "0x".
112
113 Return ordinals:
114 ================
115
116     This type defines a function entry point whose handler should do
117 nothing but return a value.
118     "ORDINAL" is replaced by the ordinal number corresponding to the
119 variable.  ARGLENGTH is the number of bytes that need to be removed
120 from the stack before returning to the caller.  RETVALUE is the
121 return value which will be passed back to the caller.
122
123 Extern ordinals:
124 ================
125
126     This type defines an entry that simply maps to a Wine symbol
127 (variable or function); "EXPORTNAME" will point to the symbol
128 "SYMBOLNAME" that must be defined in C code. This type only works with
129 Win32.