Commit c5f834ce authored by Patrik Stridvall's avatar Patrik Stridvall Committed by Alexandre Julliard

- API files update.

- Minor bug fixes.
parent c0a3cb13
......@@ -53,7 +53,7 @@ sub file_type {
m%^(?:libtest|rc|server|tests|tools)/% && return "";
m%^(?:programs|debugger|miscemu)/% && return "wineapp";
m%^(?:library|tsx11|unicode)/% && return "library";
m%^(?:libs)/% && return "library";
m%^windows/x11drv/wineclipsrv\.c$% && return "application";
return "winelib";
......@@ -78,7 +78,7 @@ sub file_skip {
$_ = file_absolutize($_);
m%^(?:libtest|programs|rc|server|tests|tools)/% && return 1;
m%^(?:debugger|miscemu|tsx11|server|unicode)/% && return 1;
m%^(?:debugger|miscemu|libs|server)/% && return 1;
m%^dlls/wineps/data/% && return 1;
m%^windows/x11drv/wineclipsrv\.c$% && return 1;
m%^dlls/winmm/wineoss/midipatch\.c$% && return 1;
......
......@@ -2,24 +2,33 @@
%long
BOOL
DWORD
HRESULT
INT
LONG
UINT
ULONG
%ptr
LPAVICOMPRESSOPTIONS *
LPAVIFILEINFOA
LPAVISTREAMINFOA
LPBITMAPINFOHEADER
LPCLSID
LPLONG
LPVOID
PAVIFILE
PAVIFILE *
PAVISTREAM
PAVISTREAM *
PGETFRAME
%str
LPCSTR
LPSTR
%void
......@@ -114,6 +123,55 @@ HTASK16
INT16
WORD
%%ctl3d.dll
%long
DWORD
HBRUSH
LONG
LPARAM
%void
void
%word
BOOL16
HDC16
HINSTANCE16
HWND16
INT16
UINT16
WORD
WPARAM16
%%ctl3dv2.dll
%long
DWORD
HBRUSH
LONG
LPARAM
LRESULT
%void
void
%word
BOOL16
HDC16
HINSTANCE16
HWND16
INT16
UINT16
WORD
WPARAM16
%%ddeml.dll
%long
......@@ -218,16 +276,13 @@ LPBYTE
LPCVOID
LPDEVMODEA
LPDWORD
LPENUMLOGFONT16
LPFONTINFO16
LPGLYPHMETRICS16
LPINT16
LPKERNINGPAIR16
LPLOGFONT16
LPNEWTEXTMETRIC16
LPOUTLINETEXTMETRIC16
LPPALETTEENTRY
LPPDEVICE
LPPOINT16
LPRASTERIZER_STATUS
LPRECT16
......@@ -294,6 +349,7 @@ BOOL
DWORD
HANDLE
HINSTANCE
HKEY
HMODULE
INT
LONG
......@@ -350,7 +406,6 @@ HANDLE16
HFILE16
HGLOBAL16
HINSTANCE16
HKEY
HLOCAL16
HMODULE16
HQUEUE16
......@@ -411,7 +466,6 @@ LPVOID
%str
LPCSTR
LPSTR
%void
......@@ -621,13 +675,29 @@ WORD
DWORD
HRESULT
ULONG
%longlong
ULARGE_INTEGER
%ptr
IDataObject *
IDataObject **
ILockBytes16 *
LPDROPTARGET
LPLOCKBYTES16 *
LPMONIKER *
LPRUNNINGOBJECTTABLE *
LPVOID
LPVOID *
REFIID
REFCLSID
STATSTG16 *
ULONG *
void *
void **
%str
......@@ -639,6 +709,7 @@ void
%word
BOOL16
HGLOBAL16
HICON16
HWND16
......@@ -766,21 +837,26 @@ OLE_SERVER_USE
BOOL
DWORD
HKEY
LPARAM
WPARAM
int
%ptr
HINF16 *
LPBYTE
LPDEVICE_INFO16
LPDWORD
LPEXPANDVTBL
LPHKEY16
LPLOGDISKDESC
LPLPDEVICE_INFO16
LPVIRTNODE
LPVOID
PHKEY
VIFPROC
VOID *
%str
......@@ -795,7 +871,7 @@ void
HINF16
HINSTANCE16
HKEY
HKEY16
HWND16
INT16
LOGDISKID16
......@@ -803,7 +879,6 @@ RETERR16
UINT16
VHSTR
WORD
WPARAM
%%shell.dll
......@@ -811,6 +886,7 @@ WPARAM
BOOL
DWORD
HKEY
LPARAM
LRESULT
......@@ -841,7 +917,6 @@ HDROP16
HGLOBAL16
HICON16
HINSTANCE16
HKEY
HWND16
INT16
UINT16
......@@ -881,6 +956,7 @@ LARGE_INTEGER
%ptr
IID *
ILockBytes16 *
IStorage16 *
IStorage16 **
IStream16 *
......@@ -894,6 +970,10 @@ ULARGE_INTEGER *
ULONG *
void *
%segptr
SEGPTR
%str
LPCOLESTR16
......@@ -1010,7 +1090,6 @@ BOOL
COLORREF
DWORD
HHOOK
INT
LONG
LPARAM
LRESULT
......
......@@ -257,7 +257,7 @@ sub parse_spec_file {
s/^\s*(.*?)\s*$/$1/;
if(s/^(.*?)\s*\#\s*(.*)\s*$/$1/) {
my $comment = $2;
if ($comment =~ /^Wine/) { # FIXME: Kludge
if ($comment =~ /^Wine/i) { # FIXME: Kludge
$wine_extension = 1;
}
}
......@@ -271,7 +271,7 @@ sub parse_spec_file {
my $ordinal;
if(/^(\d+|@)\s+
(pascal|pascal16|stdcall|cdecl|varargs)\s+
((?:(?:-noimport|-noname|-norelay|-i386|-ret64|-register|-interrupt)\s+)*)(\S+)\s*\(\s*(.*?)\s*\)\s*(\S*)$/x)
((?:(?:-noimport|-noname|-norelay|-i386|-ret64|-register|-interrupt|-private)\s+)*)(\S+)\s*\(\s*(.*?)\s*\)\s*(\S*)$/x)
{
my $calling_convention = $2;
my $flags = $3;
......@@ -283,6 +283,8 @@ sub parse_spec_file {
$flags =~ s/\s+/ /g;
$internal_name = $external_name if !$internal_name;
if($flags =~ /-noname/) {
# $external_name = "@";
}
......@@ -294,7 +296,7 @@ sub parse_spec_file {
}
if ($internal_name =~ /^(.*?)\.(.*?)$/) {
my $forward_module = $1;
my $forward_module = lc($1);
my $forward_name = $2;
if (0) {
......@@ -378,7 +380,7 @@ sub parse_spec_file {
}
}
}
} elsif(/^(\d+|@)\s+stub(?:\s+(-noimport|-noname|-norelay|-i386|-ret64))?\s+(\S+)$/) {
} elsif(/^(\d+|@)\s+stub(?:\s+(-noimport|-noname|-norelay|-i386|-ret64|-private))?\s+(\S+)$/) {
$ordinal = $1;
my $flags = $2;
......@@ -427,25 +429,14 @@ sub parse_spec_file {
} else { # if($$function_external_module{$external_name} !~ /$module/) {
$$function_external_module{$external_name} .= " & $module";
}
} elsif(/^(\d+|@)\s+forward(?:\s+(?:-noimport|-norelay|-i386|-ret64))?\s+(\S+)\s+(\S+)\.(\S+)$/) {
$ordinal = $1;
my $external_name = $2;
my $forward_module = lc($3);
my $forward_name = $4;
if ($external_name ne "@") {
$$module_external_calling_convention{$module}{$external_name} = "forward";
} else {
$$module_external_calling_convention{$module}{"\@$ordinal"} = "forward";
}
$$function_forward{$module}{$external_name} = [$forward_module, $forward_name];
} elsif(/^(\d+|@)\s+extern\s+(\S+)\s*(\S*)$/) {
} elsif(/^(\d+|@)\s+extern(?:\s+(?:-noimport|-norelay|-i386|-ret64))?\s+(\S+)\s*(\S*)$/) {
$ordinal = $1;
my $external_name = $2;
my $internal_name = $3;
$internal_name = $external_name if !$internal_name;
if ($external_name ne "@") {
$$module_external_calling_convention{$module}{$external_name} = "extern";
} else {
......@@ -928,17 +919,13 @@ sub function_wine_extension {
sub is_function_stub {
my $self = shift;
my $module_external_calling_convention = \%{$self->{MODULE_EXTERNAL_CALLING_CONVENTION}};
my $modules = \%{$self->{MODULES}};
my $module = shift;
my $name = shift;
foreach my $module (keys(%$modules)) {
if($$module_external_calling_convention{$module}{$name} eq "stub") {
return 1;
}
if($$module_external_calling_convention{$module}{$name} eq "stub") {
return 1;
}
return 0;
}
......
......@@ -46,8 +46,12 @@ dlls/crypt32
% dlls/ctl3d/ctl3d.spec
dlls/ctl3d
% dlls/ctl3d/ctl3d32.spec
dlls/ctl3d
% dlls/ctl3d/ctl3dv2.spec
dlls/ctl3d
......@@ -64,6 +68,10 @@ dlls/d3d8
dlls/d3d9
% dlls/d3dim/d3dim.spec
dlls/d3dim
% dlls/d3dx8/d3dx8.spec
dlls/d3dx8
......@@ -240,6 +248,10 @@ dlls/msvcrt20
dlls/msvcrtd
% dlls/mswsock/mswsock.spec
dlls/mswsock
% dlls/kernel/stress.spec
dlls/kernel
......@@ -306,6 +318,8 @@ dlls/msacm/winemp3
% dlls/msnet32/msnet32.spec
dlls/msnet32
% dlls/msvideo/msvfw32.spec
dlls/msvideo
......
......@@ -54,6 +54,9 @@ sub new {
$configure_ac_file =~ s/^\.\///;
$config_h_in_file =~ s/^\.\///;
$$conditional_headers{"config.h"}++;
$output->progress("$api_file");
open(IN, "< $api_file");
......@@ -101,16 +104,28 @@ sub new {
# skip comments
if(/^dnl/) { next; }
if(/^AC_CHECK_HEADERS\(\s*([^,\)]*)(?:,|\))?/) {
foreach my $name (split(/\s+/, $1)) {
if(/AC_CHECK_HEADERS\(\s*([^,\)]*)(?:,|\))?/) {
my $headers = $1;
$headers =~ s/^\s*\[\s*(.*?)\s*\]\s*$/$1/;
foreach my $name (split(/\s+/, $headers)) {
$$conditional_headers{$name}++;
}
} elsif(/^AC_CHECK_FUNCS\(\s*([^,\)]*)(?:,|\))?/) {
foreach my $name (split(/\s+/, $1)) {
} elsif(/AC_CHECK_FUNCS\(\s*([^,\)]*)(?:,|\))?/) {
my $funcs = $1;
$funcs =~ s/^\s*\[\s*(.*?)\s*\]\s*$/$1/;
foreach my $name (split(/\s+/, $funcs)) {
$$conditional_functions{$name}++;
}
} elsif(/^AC_FUNC_ALLOCA/) {
} elsif(/AC_FUNC_ALLOCA/) {
$$conditional_headers{"alloca.h"}++;
} elsif (/AC_DEFINE\(\s*HAVE_(.*?)_H/) {
my $name = lc($1);
$name =~ s/_/\//;
$name .= ".h";
next if $name =~ m%correct/%;
$$conditional_headers{$name}++;
}
}
......
......@@ -79,27 +79,42 @@ sub begin_if {
local $_ = shift;
while(!/^$/) {
if(/^0\s*\&\&/) {
if(/^0\s*\&\&/s) {
$_ = "0";
} elsif(/^1\s*\|\|/) {
} elsif(/^1\s*\|\|/s) {
$_ = "1";
}
if(/^(!)?defined\s*\(\s*(.+?)\s*\)\s*((\&\&|\|\|)\s*)?/){
if (/^(!\s*)?defined\s*\(\s*(\w+)\s*\)\s*(?:(\&\&|\|\|)\s*)?/s ||
/^(!\s*)?defined\s*(\w+)\s*(?:(\&\&|\|\|)\s*)?/s)
{
$_ = $';
if(defined($1) && $1 eq "!") {
$self->undefine($2);
push @$stack, $2;
my $sign = $1;
my $var = $2;
if (defined($sign) && $sign eq "!") {
$self->undefine($var);
push @$stack, $var;
} else {
$self->define($2);
push @$stack, $2;
$self->define($var);
push @$stack, $var;
}
} elsif(/^(\w+)\s*(<|<=|==|!=|>=|>)\s*(\w+)\s*((\&\&|\|\|)\s*)?/) {
$_ = $';
} elsif(/^(!)?(\w+)\s*$/) {
$_ = $';
} elsif(/^\(|\)/) {
} elsif (/^(!\s*)?(\w+)\s*(?:(<|<=|==|!=|>=|>|\+|\-|\*\/)\s*(\w+)\s*)?(?:(\&\&|\|\|)\s*)?/s) {
$_ = $';
my $sign = $1;
my $var = $2;
if (defined($sign) && $sign eq "!") {
$self->undefine($var);
push @$stack, $var;
} else {
$self->define($var);
push @$stack, $var;
}
} elsif(/^(!\s*)?\(/s) {
$_ = "";
} else {
print "*** Can't parse '#$directive $_' ***\n";
$_ = "";
......
......@@ -538,9 +538,14 @@ foreach my $file (@c_files) {
} else {
$include = "$header";
}
} elsif($header =~ /^(?:\.\.\/kernel\/(kernel_private\.h))$/) { # FIXME: Kludge
my $header2 = $1;
$include = "dlls/kernel/$header2";
} elsif($header =~ /^(?:ntdll_misc\.h)$/) { # FIXME: Kludge
$include = "dlls/ntdll/$header";
} elsif($header =~ /^(?:controls\.h|message\.h)$/) { # FIXME: Kludge
$include = "dlls/user/$header";
} elsif($header =~ /^(?:ts_xlib\.h|winproc\.h|x11font\.h|)$/) { # FIXME: Kludge
} elsif($header =~ /^(?:ts_xlib\.h|winproc\.h|x11drv\.h|x11font\.h)$/) { # FIXME: Kludge
$include = "dlls/x11drv/$header";
} elsif($check_local && $header ne "config.h") {
$output->write("$file: #include \"$header\": file not found\n");
......@@ -613,14 +618,26 @@ foreach my $file (@c_files) {
$include2info{$name}{used}++;
}
}
} elsif($header =~ /^(?:\.\.\/kernel\/(kernel_private\.h))$/) { # FIXME: Kludge
my $header2 = $1;
$include2info{"dlls/kernel/$header2"}{used}++;
foreach my $name (keys(%{$include2info{"dlls/kernel/$header2"}{includes}})) {
$include2info{$name}{used}++;
}
} elsif($header =~ /^(?:ntdll_misc\.h)$/) { # FIXME: Kludge
$include2info{"dlls/ntdll/$header"}{used}++;
foreach my $name (keys(%{$include2info{"dlls/ntdll/$header"}{includes}})) {
$include2info{$name}{used}++;
}
} elsif($header =~ /^(?:controls\.h|message\.h)$/) { # FIXME: Kludge
$include2info{"dlls/user/$header"}{used}++;
foreach my $name (keys(%{$include2info{"dlls/user/$header"}{includes}})) {
$include2info{$name}{used}++;
}
} elsif($header =~ /^(?:ts_xlib\.h|winproc\.h|x11font\.h|)$/) { # FIXME: Kludge
} elsif($header =~ /^(?:ts_xlib\.h|winproc\.h|x11drv\.h|x11font\.h)$/) { # FIXME: Kludge
$include2info{"dlls/x11drv/$header"}{used}++;
foreach my $name (keys(%{$include2info{"dlls/user/$header"}{includes}})) {
foreach my $name (keys(%{$include2info{"dlls/x11drv/$header"}{includes}})) {
$include2info{$name}{used}++;
}
} elsif(-e "$wine_dir/include/$header") {
......
......@@ -87,7 +87,7 @@ sub check_documentation {
my $ordinal2 = $7;
if ($winapi->function_wine_extension(lc($module2), $external_name2)) {
$output->write("documentation: $external_name2 (\U$module2\E.$ordinal2) is a Wine extension \\\n$documentation\n");
# $output->write("documentation: $external_name2 (\U$module2\E.$ordinal2) is a Wine extension \\\n$documentation\n");
}
if(length($1) != 1 || length($2) < 1 ||
......@@ -108,6 +108,7 @@ sub check_documentation {
}
if((($options->documentation_name && !$found_name) ||
($options->documentation_ordinal && !$found_ordinal)) &&
!$winapi->is_function_stub($module, $external_name) &&
!$winapi->function_wine_extension($module, $external_name))
{
$documentation_error = 1;
......@@ -202,7 +203,7 @@ sub check_documentation {
for my $argument_documentation (@$refargument_documentations) {
$n++;
if($argument_documentation ne "") {
if($argument_documentation !~ /^\/\*\s+\[(?:in|out|in\/out|\?\?\?)\].*?\*\/$/s) {
if($argument_documentation !~ /^\/\*\s+\[(?:in|out|in\/out|\?\?\?|I|O|I\/O)\].*?\*\/$/s) {
$output->write("argument $n documentation: \\\n$argument_documentation\n");
}
}
......
......@@ -38,6 +38,7 @@ sub check_modules {
if(!$winapi->is_module($module)) { next; }
my $functions = $$module2functions{$module};
foreach my $internal_name ($winapi->all_internal_functions_in_module($module)) {
next if $internal_name =~ /\./;
my $function = $functions->{$internal_name};
if(!defined($function) && !$nativeapi->is_function($internal_name) &&
!($module eq "user" && $internal_name =~
......
......@@ -221,7 +221,8 @@ sub parse_c_file {
# remove preprocessor directives
if(s/^\s*\#/\#/s) {
if(/^\#.*?\\$/s) {
if(/^(\#.*?)\\$/s) {
$_ = "$1\n";
$lookahead = 1;
next;
} elsif(s/^\#\s*(\w+)((?:\s+(.*?))?\s*)$//s) {
......@@ -533,7 +534,7 @@ sub parse_c_file {
((?:const\s+|enum\s+|long\s+|signed\s+|short\s+|struct\s+|union\s+|unsigned\s+)*?)
(\w+)
(?:\s+const)?
((?:\s*\*+\s*|\s+)\w+\s*(?:\[[^\]]*\])?
((?:\s*\*+\s*|\s+)\w+\s*(?:\[[^\]]*\])*
(?:\s*,\s*(?:\s*\*+\s*|\s+)\w+\s*(?:\[[^\]]*\])?)*)
\s*;/sx)
{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment