From 02a7a3126502e93e562ddbf321485b548535298a Mon Sep 17 00:00:00 2001 From: Thomas Bluemel Date: Wed, 6 Sep 2006 20:00:41 +0000 Subject: [PATCH] - Force using the import libraries built by ReactOS only, don't use the ones that come with the mingw compiler (doesn't work for CPP!) - Import the mingw startup library and customized it a little. _tmain() is now supported, compiling an application as unicode is now just a matter of setting the module attribute unicode="true" - Fixed .rbuild files to import all libraries neccessary - Various GUID header changes and hacks to get everything to build/link properly - Fixed the IShellView2 interface svn path=/trunk/; revision=23933 --- reactos/base/applications/cacls/cacls.c | 12 +- reactos/base/applications/cacls/cacls.rbuild | 6 +- .../base/applications/devmgr/devmgr.rbuild | 1 + .../games/solitaire/solitaire.rbuild | 2 +- .../games/winemine/winemine.rbuild | 4 +- .../applications/getfirefox/getfirefox.rbuild | 32 +- .../applications/ibrowser/ibrowser.rbuild | 2 +- .../applications/ibrowser/ibrowser_intres.rc | 5 +- .../base/applications/network/finger/net.c | 7 +- .../base/applications/network/ftp/ftp.rbuild | 3 +- .../applications/network/ipconfig/ipconfig.c | 2 +- .../network/ipconfig/ipconfig.rbuild | 15 +- .../applications/network/telnet/telnet.rbuild | 2 +- .../base/applications/regedit/regedit.rbuild | 1 + .../screensavers/matrix/matrix.rbuild | 3 +- .../applications/shutdown/shutdown.rbuild | 11 +- reactos/base/applications/sm/sm.rbuild | 1 + .../applications/sndvol32/sndvol32.rbuild | 1 + .../base/applications/taskmgr/taskmgr.rbuild | 2 + .../testsets/smss/movefile/movefile.rbuild | 1 + .../applications/utils/rosperf/rosperf.rbuild | 2 + .../applications/winefile/winefile.rbuild | 1 + .../base/applications/winver/winver.rbuild | 1 + reactos/base/services/dhcp/dhcp.rbuild | 3 +- reactos/base/services/tcpsvcs/tcpsvcs.rbuild | 2 + reactos/base/setup/vmwinst/vmwinst.rbuild | 1 + reactos/base/shell/cmd/cmd.rbuild | 4 +- reactos/base/shell/cmd/tests/cmd_test.rbuild | 3 + reactos/base/shell/explorer/explorer.rbuild | 5 +- reactos/base/system/expand/expand.rbuild | 5 +- reactos/base/system/format/format.rbuild | 1 + reactos/base/system/lsass/lsass.rbuild | 1 + reactos/base/system/userinit/userinit.rbuild | 1 + reactos/boot/freeldr/fdebug/De.rc | 4 +- reactos/boot/freeldr/fdebug/En.rc | 4 +- reactos/boot/freeldr/fdebug/Fr.rc | 4 +- reactos/boot/freeldr/fdebug/Hu.rc | 4 +- reactos/boot/freeldr/fdebug/Ja.rc | 4 +- reactos/boot/freeldr/fdebug/No.rc | 4 +- reactos/boot/freeldr/fdebug/Pl.rc | 4 +- reactos/boot/freeldr/fdebug/Tr.rc | 4 +- reactos/dll/3rdparty/mesa32/mesa32.rbuild | 2 + reactos/dll/cpl/hdwwiz/hdwwiz.rbuild | 1 + reactos/dll/cpl/main/main.rbuild | 1 + reactos/dll/cpl/ncpa/ncpa.rbuild | 1 + reactos/dll/cpl/sysdm/sysdm.rbuild | 1 + reactos/dll/cpl/timedate/timedate.rbuild | 1 + reactos/dll/directx/ddraw/ddraw.rbuild | 5 +- reactos/dll/directx/devenum/devenum.rbuild | 4 +- reactos/dll/directx/dinput/dinput.rbuild | 2 +- reactos/dll/win32/aclui/aclui.rbuild | 1 + reactos/dll/win32/advapi32/advapi32.rbuild | 2 +- reactos/dll/win32/avifil32/avifil32.rbuild | 4 +- reactos/dll/win32/dbghelp/dbghelp.rbuild | 2 +- reactos/dll/win32/devmgr/devmgr.rbuild | 1 + reactos/dll/win32/glu32/glu32.rbuild | 5 +- reactos/dll/win32/kernel32/kernel32.def | 4 +- reactos/dll/win32/mmdrv/mmdrv.rbuild | 1 + reactos/dll/win32/msvideo/msvfw32.rbuild | 4 +- reactos/dll/win32/netcfgx/netcfgx.rbuild | 2 + reactos/dll/win32/newdev/newdev.rbuild | 4 + reactos/dll/win32/ntmarta/ntmarta.c | 6 +- reactos/dll/win32/ntmarta/ntmarta.rbuild | 1 + reactos/dll/win32/opengl32/opengl32.rbuild | 2 + reactos/dll/win32/setupapi/setupapi.rbuild | 1 + reactos/dll/win32/shellext/slayer/precomp.h | 2 +- reactos/dll/win32/shellext/slayer/slayer.c | 4 - reactos/dll/win32/shellext/slayer/slayer.h | 2 +- .../dll/win32/shellext/slayer/slayer.rbuild | 1 + reactos/dll/win32/syssetup/syssetup.rbuild | 2 +- reactos/include/psdk/shlguid.h | 208 +++-- reactos/include/psdk/shlobj.h | 44 + reactos/include/psdk/shtypes.h | 2 + reactos/include/psdk/unknwn.h | 5 +- reactos/include/psdk/winbase.h | 2 +- reactos/include/reactos/wine/shlguid.h | 2 + reactos/include/reactos/wine/unknwn.h | 4 +- reactos/lib/dxguid/dxguid-mingw.c | 7 +- reactos/lib/lib.rbuild | 3 + reactos/lib/mingw/CRTfmode.c | 16 + reactos/lib/mingw/CRTglob.c | 16 + reactos/lib/mingw/CRTinit.c | 24 + reactos/lib/{tgetopt => mingw}/_wgetopt.c | 0 reactos/lib/mingw/binmode.c | 5 + reactos/lib/mingw/cpu_features.c | 105 +++ reactos/lib/mingw/cpu_features.h | 25 + reactos/lib/mingw/crt1.c | 283 ++++++ reactos/lib/mingw/dllcrt1.c | 185 ++++ reactos/lib/mingw/gccmain.c | 79 ++ reactos/lib/{tgetopt => mingw}/getopt.c | 0 reactos/lib/mingw/include/_mingw.h | 165 ++++ reactos/lib/mingw/include/assert.h | 51 ++ reactos/lib/mingw/include/complex.h | 205 +++++ reactos/lib/mingw/include/conio.h | 53 ++ reactos/lib/mingw/include/ctype.h | 247 +++++ reactos/lib/mingw/include/dir.h | 26 + reactos/lib/mingw/include/direct.h | 73 ++ reactos/lib/mingw/include/dirent.h | 123 +++ reactos/lib/mingw/include/dos.h | 89 ++ reactos/lib/mingw/include/errno.h | 101 +++ reactos/lib/mingw/include/excpt.h | 102 +++ reactos/lib/mingw/include/fcntl.h | 69 ++ reactos/lib/mingw/include/fenv.h | 105 +++ reactos/lib/mingw/include/float.h | 152 ++++ reactos/lib/mingw/include/getopt.h | 84 ++ reactos/lib/mingw/include/inttypes.h | 278 ++++++ reactos/lib/mingw/include/io.h | 313 +++++++ reactos/lib/mingw/include/limits.h | 112 +++ reactos/lib/mingw/include/locale.h | 88 ++ reactos/lib/mingw/include/malloc.h | 98 ++ reactos/lib/mingw/include/math.h | 848 ++++++++++++++++++ reactos/lib/mingw/include/mbctype.h | 97 ++ reactos/lib/mingw/include/mbstring.h | 132 +++ reactos/lib/mingw/include/mem.h | 6 + reactos/lib/mingw/include/memory.h | 7 + reactos/lib/mingw/include/process.h | 138 +++ reactos/lib/mingw/include/search.h | 64 ++ reactos/lib/mingw/include/setjmp.h | 56 ++ reactos/lib/mingw/include/share.h | 33 + reactos/lib/mingw/include/signal.h | 98 ++ reactos/lib/mingw/include/stdint.h | 184 ++++ reactos/lib/mingw/include/stdio.h | 509 +++++++++++ reactos/lib/mingw/include/stdlib.h | 524 +++++++++++ reactos/lib/mingw/include/string.h | 193 ++++ reactos/lib/mingw/include/strings.h | 12 + reactos/lib/mingw/include/sys/fcntl.h | 7 + reactos/lib/mingw/include/sys/file.h | 7 + reactos/lib/mingw/include/sys/locking.h | 31 + reactos/lib/mingw/include/sys/param.h | 22 + reactos/lib/mingw/include/sys/stat.h | 195 ++++ reactos/lib/mingw/include/sys/time.h | 47 + reactos/lib/mingw/include/sys/timeb.h | 74 ++ reactos/lib/mingw/include/sys/types.h | 120 +++ reactos/lib/mingw/include/sys/unistd.h | 6 + reactos/lib/mingw/include/sys/utime.h | 82 ++ reactos/lib/mingw/include/tchar.h | 418 +++++++++ reactos/lib/mingw/include/time.h | 218 +++++ reactos/lib/mingw/include/unistd.h | 33 + reactos/lib/mingw/include/utime.h | 1 + reactos/lib/mingw/include/values.h | 4 + reactos/lib/mingw/include/varargs.h | 7 + reactos/lib/mingw/include/wchar.h | 475 ++++++++++ reactos/lib/mingw/include/wctype.h | 153 ++++ reactos/lib/mingw/init.c | 67 ++ reactos/lib/mingw/isascii.c | 21 + reactos/lib/mingw/iscsym.c | 20 + reactos/lib/mingw/iscsymf.c | 21 + reactos/lib/mingw/main.c | 79 ++ reactos/lib/mingw/mingw.rbuild | 36 + reactos/lib/mingw/moldname-msvcrt.def | 158 ++++ reactos/lib/mingw/pseudo-reloc.c | 46 + reactos/lib/mingw/strcasecmp.c | 21 + reactos/lib/mingw/strncasecmp.c | 21 + reactos/lib/{tgetopt => mingw}/tgetopt.h | 0 reactos/lib/mingw/toascii.c | 22 + reactos/lib/mingw/wbinmode.c | 5 + reactos/lib/mingw/wcrt1.c | 283 ++++++ reactos/lib/mingw/wcscmpi.c | 21 + reactos/lib/mingw/winit.c | 66 ++ reactos/lib/mingw/wmain.c | 79 ++ reactos/lib/strmiids/strmiids.c | 8 +- reactos/lib/uuid/uuid.c | 14 +- reactos/regtests/kmtloader/kmtloader.rbuild | 3 +- reactos/regtests/queuetest/queuetest.rbuild | 1 + .../winetests/advapi32/advapi32.rbuild | 1 + .../regtests/winetests/cabinet/cabinet.rbuild | 1 + .../winetests/comctl32/comctl32.rbuild | 3 + reactos/regtests/winetests/gdi32/gdi32.rbuild | 3 + reactos/regtests/winetests/icmp/icmp.rbuild | 1 + reactos/regtests/winetests/lz32/lz32.rbuild | 1 + .../regtests/winetests/msvcrt/msvcrt.rbuild | 1 + reactos/regtests/winetests/ntdll/ntdll.rbuild | 1 + .../winetests/powrprof/powrprof.rbuild | 14 +- reactos/regtests/winetests/psapi/psapi.rbuild | 1 + .../winetests/setupapi/setupapi.rbuild | 2 + .../regtests/winetests/shell32/shell32.rbuild | 3 +- .../regtests/winetests/shell32/shelllink.c | 2 + .../regtests/winetests/shlwapi/shlwapi.rbuild | 2 + .../regtests/winetests/version/version.rbuild | 1 + reactos/tools/rbuild/backend/mingw/mingw.cpp | 1 + .../rbuild/backend/mingw/modulehandler.cpp | 70 +- .../rbuild/backend/mingw/modulehandler.h | 8 + reactos/tools/rbuild/define.cpp | 21 +- reactos/tools/rbuild/module.cpp | 90 +- reactos/tools/rbuild/rbuild.h | 13 +- 185 files changed, 9591 insertions(+), 235 deletions(-) create mode 100644 reactos/lib/mingw/CRTfmode.c create mode 100644 reactos/lib/mingw/CRTglob.c create mode 100644 reactos/lib/mingw/CRTinit.c rename reactos/lib/{tgetopt => mingw}/_wgetopt.c (100%) create mode 100644 reactos/lib/mingw/binmode.c create mode 100644 reactos/lib/mingw/cpu_features.c create mode 100644 reactos/lib/mingw/cpu_features.h create mode 100644 reactos/lib/mingw/crt1.c create mode 100644 reactos/lib/mingw/dllcrt1.c create mode 100644 reactos/lib/mingw/gccmain.c rename reactos/lib/{tgetopt => mingw}/getopt.c (100%) create mode 100644 reactos/lib/mingw/include/_mingw.h create mode 100644 reactos/lib/mingw/include/assert.h create mode 100644 reactos/lib/mingw/include/complex.h create mode 100644 reactos/lib/mingw/include/conio.h create mode 100644 reactos/lib/mingw/include/ctype.h create mode 100644 reactos/lib/mingw/include/dir.h create mode 100644 reactos/lib/mingw/include/direct.h create mode 100644 reactos/lib/mingw/include/dirent.h create mode 100644 reactos/lib/mingw/include/dos.h create mode 100644 reactos/lib/mingw/include/errno.h create mode 100644 reactos/lib/mingw/include/excpt.h create mode 100644 reactos/lib/mingw/include/fcntl.h create mode 100644 reactos/lib/mingw/include/fenv.h create mode 100644 reactos/lib/mingw/include/float.h create mode 100644 reactos/lib/mingw/include/getopt.h create mode 100644 reactos/lib/mingw/include/inttypes.h create mode 100644 reactos/lib/mingw/include/io.h create mode 100644 reactos/lib/mingw/include/limits.h create mode 100644 reactos/lib/mingw/include/locale.h create mode 100644 reactos/lib/mingw/include/malloc.h create mode 100644 reactos/lib/mingw/include/math.h create mode 100644 reactos/lib/mingw/include/mbctype.h create mode 100644 reactos/lib/mingw/include/mbstring.h create mode 100644 reactos/lib/mingw/include/mem.h create mode 100644 reactos/lib/mingw/include/memory.h create mode 100644 reactos/lib/mingw/include/process.h create mode 100644 reactos/lib/mingw/include/search.h create mode 100644 reactos/lib/mingw/include/setjmp.h create mode 100644 reactos/lib/mingw/include/share.h create mode 100644 reactos/lib/mingw/include/signal.h create mode 100644 reactos/lib/mingw/include/stdint.h create mode 100644 reactos/lib/mingw/include/stdio.h create mode 100644 reactos/lib/mingw/include/stdlib.h create mode 100644 reactos/lib/mingw/include/string.h create mode 100644 reactos/lib/mingw/include/strings.h create mode 100644 reactos/lib/mingw/include/sys/fcntl.h create mode 100644 reactos/lib/mingw/include/sys/file.h create mode 100644 reactos/lib/mingw/include/sys/locking.h create mode 100644 reactos/lib/mingw/include/sys/param.h create mode 100644 reactos/lib/mingw/include/sys/stat.h create mode 100644 reactos/lib/mingw/include/sys/time.h create mode 100644 reactos/lib/mingw/include/sys/timeb.h create mode 100644 reactos/lib/mingw/include/sys/types.h create mode 100644 reactos/lib/mingw/include/sys/unistd.h create mode 100644 reactos/lib/mingw/include/sys/utime.h create mode 100644 reactos/lib/mingw/include/tchar.h create mode 100644 reactos/lib/mingw/include/time.h create mode 100644 reactos/lib/mingw/include/unistd.h create mode 100644 reactos/lib/mingw/include/utime.h create mode 100644 reactos/lib/mingw/include/values.h create mode 100644 reactos/lib/mingw/include/varargs.h create mode 100644 reactos/lib/mingw/include/wchar.h create mode 100644 reactos/lib/mingw/include/wctype.h create mode 100644 reactos/lib/mingw/init.c create mode 100644 reactos/lib/mingw/isascii.c create mode 100644 reactos/lib/mingw/iscsym.c create mode 100644 reactos/lib/mingw/iscsymf.c create mode 100644 reactos/lib/mingw/main.c create mode 100644 reactos/lib/mingw/mingw.rbuild create mode 100644 reactos/lib/mingw/moldname-msvcrt.def create mode 100644 reactos/lib/mingw/pseudo-reloc.c create mode 100644 reactos/lib/mingw/strcasecmp.c create mode 100644 reactos/lib/mingw/strncasecmp.c rename reactos/lib/{tgetopt => mingw}/tgetopt.h (100%) create mode 100644 reactos/lib/mingw/toascii.c create mode 100644 reactos/lib/mingw/wbinmode.c create mode 100644 reactos/lib/mingw/wcrt1.c create mode 100644 reactos/lib/mingw/wcscmpi.c create mode 100644 reactos/lib/mingw/winit.c create mode 100644 reactos/lib/mingw/wmain.c diff --git a/reactos/base/applications/cacls/cacls.c b/reactos/base/applications/cacls/cacls.c index ad93e130377..733882ba529 100644 --- a/reactos/base/applications/cacls/cacls.c +++ b/reactos/base/applications/cacls/cacls.c @@ -507,18 +507,8 @@ PrintSpecialAccess: } -#ifdef _UNICODE -int __cdecl main(void) -#else -int __cdecl _main (int argc, char *argv[]) -#endif +int __cdecl _tmain(int argc, const TCHAR *argv[]) { -#ifdef _UNICODE - PWCHAR *argv; - int argc = 0; - argv = CommandLineToArgvW(GetCommandLineW(), &argc); -#endif - if (argc < 2) { PrintHelp(); diff --git a/reactos/base/applications/cacls/cacls.rbuild b/reactos/base/applications/cacls/cacls.rbuild index 00e18111d98..a2abe968a6d 100644 --- a/reactos/base/applications/cacls/cacls.rbuild +++ b/reactos/base/applications/cacls/cacls.rbuild @@ -1,14 +1,14 @@ - + . - - 0x0500 0x0600 0x0600 kernel32 advapi32 ntdll + user32 + shell32 cacls.c lang/cacls.rc precomp.h diff --git a/reactos/base/applications/devmgr/devmgr.rbuild b/reactos/base/applications/devmgr/devmgr.rbuild index 78e60550960..b9014c42a65 100644 --- a/reactos/base/applications/devmgr/devmgr.rbuild +++ b/reactos/base/applications/devmgr/devmgr.rbuild @@ -9,6 +9,7 @@ kernel32 user32 comctl32 + advapi32 devmgr.c devmgr.rc diff --git a/reactos/base/applications/games/solitaire/solitaire.rbuild b/reactos/base/applications/games/solitaire/solitaire.rbuild index 51c36c9f0f5..6478c45e701 100644 --- a/reactos/base/applications/games/solitaire/solitaire.rbuild +++ b/reactos/base/applications/games/solitaire/solitaire.rbuild @@ -1,6 +1,6 @@ - + . cardlib -lstdc++ diff --git a/reactos/base/applications/games/winemine/winemine.rbuild b/reactos/base/applications/games/winemine/winemine.rbuild index 1ed457d6ea6..18893df9270 100644 --- a/reactos/base/applications/games/winemine/winemine.rbuild +++ b/reactos/base/applications/games/winemine/winemine.rbuild @@ -6,7 +6,9 @@ 0x0501 0x0501 kernel32 - gdi32 + gdi32 + user32 + advapi32 main.c dialog.c winemine.rc diff --git a/reactos/base/applications/getfirefox/getfirefox.rbuild b/reactos/base/applications/getfirefox/getfirefox.rbuild index ce493e8eb70..b0c276d6592 100644 --- a/reactos/base/applications/getfirefox/getfirefox.rbuild +++ b/reactos/base/applications/getfirefox/getfirefox.rbuild @@ -1,19 +1,21 @@ - . - - - - 0x0501 - . + + + + 0x0501 + - + -fexceptions . diff --git a/reactos/base/applications/ibrowser/ibrowser_intres.rc b/reactos/base/applications/ibrowser/ibrowser_intres.rc index 9c1b2319fb7..5911d099402 100644 --- a/reactos/base/applications/ibrowser/ibrowser_intres.rc +++ b/reactos/base/applications/ibrowser/ibrowser_intres.rc @@ -35,9 +35,8 @@ IDB_TOOLBAR BITMAP DISCARDABLE "res/toolbar.bmp" IDA_IBROWSER ACCELERATORS DISCARDABLE BEGIN - "X", ID_FILE_EXIT, VIRTKEY, ALT, NOINVERT - "S", ID_VIEW_FULLSCREEN, VIRTKEY, SHIFT, CONTROL, - NOINVERT + 120, ID_FILE_EXIT, ASCII, ALT // "X" + 115, ID_VIEW_FULLSCREEN, ASCII, SHIFT, CONTROL // "S" END diff --git a/reactos/base/applications/network/finger/net.c b/reactos/base/applications/network/finger/net.c index 3362fb2d5df..7f932ef2b5d 100644 --- a/reactos/base/applications/network/finger/net.c +++ b/reactos/base/applications/network/finger/net.c @@ -33,17 +33,14 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ -#include -#include +#include #include #include #include #include "various.h" -int close(int); - void netfinger(char *name) { @@ -90,7 +87,7 @@ netfinger(char *name) (void)printf("[%s]\n", hp->h_name); if (connect(s, (struct sockaddr *)&sin, sizeof(sin)) < 0) { fprintf(stderr, "finger: connect rc = %d", WSAGetLastError()); - (void)close(s); + (void)closesocket(s); return; } diff --git a/reactos/base/applications/network/ftp/ftp.rbuild b/reactos/base/applications/network/ftp/ftp.rbuild index 09e94576e93..7117e598aeb 100644 --- a/reactos/base/applications/network/ftp/ftp.rbuild +++ b/reactos/base/applications/network/ftp/ftp.rbuild @@ -1,11 +1,12 @@ - + . kernel32 ws2_32 + crtdll iphlpapi cmds.c cmdtab.c diff --git a/reactos/base/applications/network/ipconfig/ipconfig.c b/reactos/base/applications/network/ipconfig/ipconfig.c index e918cd1bab0..4d496d53d49 100644 --- a/reactos/base/applications/network/ipconfig/ipconfig.c +++ b/reactos/base/applications/network/ipconfig/ipconfig.c @@ -542,7 +542,7 @@ VOID Release(LPTSTR Index) /* Call IpReleaseAddress to release the IP address on the specified adapter. */ - if (ret = IpReleaseAddress(&AdapterInfo) != NO_ERROR) + if ((ret = IpReleaseAddress(&AdapterInfo)) != NO_ERROR) { _tprintf(_T("\nAn error occured while releasing interface %S : \n"), AdapterInfo.Name); DoFormatMessage(ret); diff --git a/reactos/base/applications/network/ipconfig/ipconfig.rbuild b/reactos/base/applications/network/ipconfig/ipconfig.rbuild index 425dc56db42..7cf80bb6976 100644 --- a/reactos/base/applications/network/ipconfig/ipconfig.rbuild +++ b/reactos/base/applications/network/ipconfig/ipconfig.rbuild @@ -1,11 +1,12 @@ - . - - kernel32 - user32 - iphlpapi - ipconfig.c - ipconfig.rc + . + + kernel32 + user32 + iphlpapi + advapi32 + ipconfig.c + ipconfig.rc diff --git a/reactos/base/applications/network/telnet/telnet.rbuild b/reactos/base/applications/network/telnet/telnet.rbuild index 653c39a765a..bde5b87b925 100644 --- a/reactos/base/applications/network/telnet/telnet.rbuild +++ b/reactos/base/applications/network/telnet/telnet.rbuild @@ -1,6 +1,6 @@ - + . diff --git a/reactos/base/applications/regedit/regedit.rbuild b/reactos/base/applications/regedit/regedit.rbuild index 50141a1ee16..519587200c1 100644 --- a/reactos/base/applications/regedit/regedit.rbuild +++ b/reactos/base/applications/regedit/regedit.rbuild @@ -16,6 +16,7 @@ comctl32 comdlg32 shlwapi + uuid about.c childwnd.c edit.c diff --git a/reactos/base/applications/screensavers/matrix/matrix.rbuild b/reactos/base/applications/screensavers/matrix/matrix.rbuild index 235772effe1..f9b2cc717eb 100644 --- a/reactos/base/applications/screensavers/matrix/matrix.rbuild +++ b/reactos/base/applications/screensavers/matrix/matrix.rbuild @@ -2,8 +2,7 @@ . - - -lstdc++ + 0x0501 0x0501 diff --git a/reactos/base/applications/shutdown/shutdown.rbuild b/reactos/base/applications/shutdown/shutdown.rbuild index cc62542cb19..c398f3cb852 100644 --- a/reactos/base/applications/shutdown/shutdown.rbuild +++ b/reactos/base/applications/shutdown/shutdown.rbuild @@ -1,8 +1,11 @@ - . - - 0x0501 - shutdown.c + . + + 0x0501 + advapi32 + user32 + kernel32 + shutdown.c diff --git a/reactos/base/applications/sm/sm.rbuild b/reactos/base/applications/sm/sm.rbuild index 32ad19a74bf..0f4888c222d 100644 --- a/reactos/base/applications/sm/sm.rbuild +++ b/reactos/base/applications/sm/sm.rbuild @@ -6,6 +6,7 @@ smdll ntdll kernel32 + user32 sm.c win32err.c sm.rc diff --git a/reactos/base/applications/sndvol32/sndvol32.rbuild b/reactos/base/applications/sndvol32/sndvol32.rbuild index 431333f57c0..c10fb16fa72 100644 --- a/reactos/base/applications/sndvol32/sndvol32.rbuild +++ b/reactos/base/applications/sndvol32/sndvol32.rbuild @@ -9,6 +9,7 @@ 0x0600 ntdll user32 + advapi32 gdi32 kernel32 comctl32 diff --git a/reactos/base/applications/taskmgr/taskmgr.rbuild b/reactos/base/applications/taskmgr/taskmgr.rbuild index 56b0b0f376b..55a28ea517b 100644 --- a/reactos/base/applications/taskmgr/taskmgr.rbuild +++ b/reactos/base/applications/taskmgr/taskmgr.rbuild @@ -7,8 +7,10 @@ ntdll kernel32 + advapi32 user32 gdi32 + shell32 comctl32 precomp.h diff --git a/reactos/base/applications/testsets/smss/movefile/movefile.rbuild b/reactos/base/applications/testsets/smss/movefile/movefile.rbuild index e0ec77bab48..c6dcaddeed5 100644 --- a/reactos/base/applications/testsets/smss/movefile/movefile.rbuild +++ b/reactos/base/applications/testsets/smss/movefile/movefile.rbuild @@ -5,6 +5,7 @@ 0x0600 0x0600 kernel32 + advapi32 user32 movefile.cpp movefile.rc diff --git a/reactos/base/applications/utils/rosperf/rosperf.rbuild b/reactos/base/applications/utils/rosperf/rosperf.rbuild index 60af37ed25d..68882be0425 100644 --- a/reactos/base/applications/utils/rosperf/rosperf.rbuild +++ b/reactos/base/applications/utils/rosperf/rosperf.rbuild @@ -6,6 +6,8 @@ version msimg32 gdi32 + shell32 + advapi32 user32 kernel32 ntdll diff --git a/reactos/base/applications/winefile/winefile.rbuild b/reactos/base/applications/winefile/winefile.rbuild index 9f3ce5e14f8..4fcf82ae188 100644 --- a/reactos/base/applications/winefile/winefile.rbuild +++ b/reactos/base/applications/winefile/winefile.rbuild @@ -11,6 +11,7 @@ gdi32 user32 comctl32 + advapi32 comdlg32 shell32 ole32 diff --git a/reactos/base/applications/winver/winver.rbuild b/reactos/base/applications/winver/winver.rbuild index 2265d49ca3e..0d484c1b22f 100644 --- a/reactos/base/applications/winver/winver.rbuild +++ b/reactos/base/applications/winver/winver.rbuild @@ -6,5 +6,6 @@ 0x501 0x0501 shell32 + kernel32 winver.c diff --git a/reactos/base/services/dhcp/dhcp.rbuild b/reactos/base/services/dhcp/dhcp.rbuild index 46efa47f639..fdbdf9f609e 100644 --- a/reactos/base/services/dhcp/dhcp.rbuild +++ b/reactos/base/services/dhcp/dhcp.rbuild @@ -8,7 +8,8 @@ kernel32 ws2_32 iphlpapi - include/rosdhcp.h + advapi32 + include/rosdhcp.h adapter.c alloc.c api.c diff --git a/reactos/base/services/tcpsvcs/tcpsvcs.rbuild b/reactos/base/services/tcpsvcs/tcpsvcs.rbuild index 0565cc831b2..c6d0458c0e9 100644 --- a/reactos/base/services/tcpsvcs/tcpsvcs.rbuild +++ b/reactos/base/services/tcpsvcs/tcpsvcs.rbuild @@ -7,6 +7,8 @@ iphlpapi ws2_32 shlwapi + advapi32 + user32 tcpsvcs.c skelserver.c echo.c diff --git a/reactos/base/setup/vmwinst/vmwinst.rbuild b/reactos/base/setup/vmwinst/vmwinst.rbuild index 5c873b0db45..44530a29202 100644 --- a/reactos/base/setup/vmwinst/vmwinst.rbuild +++ b/reactos/base/setup/vmwinst/vmwinst.rbuild @@ -8,6 +8,7 @@ advapi32 comctl32 comdlg32 + user32 setupapi shell32 vmwinst.c diff --git a/reactos/base/shell/cmd/cmd.rbuild b/reactos/base/shell/cmd/cmd.rbuild index 6b1d7de4e4f..773f4d75e6c 100644 --- a/reactos/base/shell/cmd/cmd.rbuild +++ b/reactos/base/shell/cmd/cmd.rbuild @@ -67,8 +67,10 @@ 0x0501 - kernel32 cmd_base + kernel32 + advapi32 + user32 main.c cmd.rc diff --git a/reactos/base/shell/cmd/tests/cmd_test.rbuild b/reactos/base/shell/cmd/tests/cmd_test.rbuild index 50c1fa81b45..57cdf55bdec 100644 --- a/reactos/base/shell/cmd/tests/cmd_test.rbuild +++ b/reactos/base/shell/cmd/tests/cmd_test.rbuild @@ -8,6 +8,9 @@ rtshared regtests cmd_base + kernel32 + advapi32 + cmd_base pseh ntdll setup.c diff --git a/reactos/base/shell/explorer/explorer.rbuild b/reactos/base/shell/explorer/explorer.rbuild index 87bd4817196..95b48be8058 100644 --- a/reactos/base/shell/explorer/explorer.rbuild +++ b/reactos/base/shell/explorer/explorer.rbuild @@ -1,8 +1,6 @@ - - -luuid - -lstdc++ + -fexceptions . @@ -22,6 +20,7 @@ ole32 oleaut32 shell32 + uuid notifyhook precomp.h diff --git a/reactos/base/system/expand/expand.rbuild b/reactos/base/system/expand/expand.rbuild index c2aeebb66e3..55a71e9783c 100644 --- a/reactos/base/system/expand/expand.rbuild +++ b/reactos/base/system/expand/expand.rbuild @@ -8,6 +8,7 @@ 0x0501 lz32 user32 - expand.c - expand.rc + kernel32 + expand.c + expand.rc diff --git a/reactos/base/system/format/format.rbuild b/reactos/base/system/format/format.rbuild index 35061db70ae..158dde226f8 100644 --- a/reactos/base/system/format/format.rbuild +++ b/reactos/base/system/format/format.rbuild @@ -5,6 +5,7 @@ ntdll kernel32 + user32 fmifs format.rc format.c diff --git a/reactos/base/system/lsass/lsass.rbuild b/reactos/base/system/lsass/lsass.rbuild index 0251bbda100..a63d3861375 100644 --- a/reactos/base/system/lsass/lsass.rbuild +++ b/reactos/base/system/lsass/lsass.rbuild @@ -7,6 +7,7 @@ ntdll + kernel32 lsasrv lsass.c lsass.rc diff --git a/reactos/base/system/userinit/userinit.rbuild b/reactos/base/system/userinit/userinit.rbuild index b797c50559a..73f7d9d3d6f 100644 --- a/reactos/base/system/userinit/userinit.rbuild +++ b/reactos/base/system/userinit/userinit.rbuild @@ -10,6 +10,7 @@ user32 gdi32 advapi32 + shell32 userinit.c userinit.rc diff --git a/reactos/boot/freeldr/fdebug/De.rc b/reactos/boot/freeldr/fdebug/De.rc index 278d96b1c45..ffd5e1952bb 100644 --- a/reactos/boot/freeldr/fdebug/De.rc +++ b/reactos/boot/freeldr/fdebug/De.rc @@ -40,8 +40,8 @@ END IDC_FDEBUG ACCELERATORS MOVEABLE PURE BEGIN - "?", IDM_ABOUT, ASCII, ALT - "/", IDM_ABOUT, ASCII, ALT + 63, IDM_ABOUT, ASCII, ALT // "?" + 47, IDM_ABOUT, ASCII, ALT // "/" END diff --git a/reactos/boot/freeldr/fdebug/En.rc b/reactos/boot/freeldr/fdebug/En.rc index 557b9dee5d2..afa2f7d9aa0 100644 --- a/reactos/boot/freeldr/fdebug/En.rc +++ b/reactos/boot/freeldr/fdebug/En.rc @@ -40,8 +40,8 @@ END IDC_FDEBUG ACCELERATORS MOVEABLE PURE BEGIN - "?", IDM_ABOUT, ASCII, ALT - "/", IDM_ABOUT, ASCII, ALT + 63, IDM_ABOUT, ASCII, ALT // "?" + 47, IDM_ABOUT, ASCII, ALT // "/" END diff --git a/reactos/boot/freeldr/fdebug/Fr.rc b/reactos/boot/freeldr/fdebug/Fr.rc index 60194729355..56115e92964 100644 --- a/reactos/boot/freeldr/fdebug/Fr.rc +++ b/reactos/boot/freeldr/fdebug/Fr.rc @@ -49,8 +49,8 @@ END IDC_FDEBUG ACCELERATORS MOVEABLE PURE BEGIN - "?", IDM_ABOUT, ASCII, ALT - "/", IDM_ABOUT, ASCII, ALT + 63, IDM_ABOUT, ASCII, ALT // "?" + 47, IDM_ABOUT, ASCII, ALT // "/" END diff --git a/reactos/boot/freeldr/fdebug/Hu.rc b/reactos/boot/freeldr/fdebug/Hu.rc index f6e8ae86ea0..5071baa28a1 100644 --- a/reactos/boot/freeldr/fdebug/Hu.rc +++ b/reactos/boot/freeldr/fdebug/Hu.rc @@ -40,8 +40,8 @@ END IDC_FDEBUG ACCELERATORS MOVEABLE PURE BEGIN - "?", IDM_ABOUT, ASCII, ALT - "/", IDM_ABOUT, ASCII, ALT + 63, IDM_ABOUT, ASCII, ALT // "?" + 47, IDM_ABOUT, ASCII, ALT // "/" END diff --git a/reactos/boot/freeldr/fdebug/Ja.rc b/reactos/boot/freeldr/fdebug/Ja.rc index 341c5e603d7..9a53f60a9d3 100644 --- a/reactos/boot/freeldr/fdebug/Ja.rc +++ b/reactos/boot/freeldr/fdebug/Ja.rc @@ -40,8 +40,8 @@ END IDC_FDEBUG ACCELERATORS MOVEABLE PURE BEGIN - "?", IDM_ABOUT, ASCII, ALT - "/", IDM_ABOUT, ASCII, ALT + 63, IDM_ABOUT, ASCII, ALT // "?" + 47, IDM_ABOUT, ASCII, ALT // "/" END diff --git a/reactos/boot/freeldr/fdebug/No.rc b/reactos/boot/freeldr/fdebug/No.rc index 10fee7a3a82..4587d6b9499 100644 --- a/reactos/boot/freeldr/fdebug/No.rc +++ b/reactos/boot/freeldr/fdebug/No.rc @@ -40,8 +40,8 @@ END IDC_FDEBUG ACCELERATORS MOVEABLE PURE BEGIN - "?", IDM_ABOUT, ASCII, ALT - "/", IDM_ABOUT, ASCII, ALT + 63, IDM_ABOUT, ASCII, ALT // "?" + 47, IDM_ABOUT, ASCII, ALT // "/" END diff --git a/reactos/boot/freeldr/fdebug/Pl.rc b/reactos/boot/freeldr/fdebug/Pl.rc index 4349113aea6..1751fe42217 100644 --- a/reactos/boot/freeldr/fdebug/Pl.rc +++ b/reactos/boot/freeldr/fdebug/Pl.rc @@ -40,8 +40,8 @@ END IDC_FDEBUG ACCELERATORS MOVEABLE PURE BEGIN - "?", IDM_ABOUT, ASCII, ALT - "/", IDM_ABOUT, ASCII, ALT + 63, IDM_ABOUT, ASCII, ALT // "?" + 47, IDM_ABOUT, ASCII, ALT // "/" END diff --git a/reactos/boot/freeldr/fdebug/Tr.rc b/reactos/boot/freeldr/fdebug/Tr.rc index 4bbae3446bd..e9bcd4a3800 100644 --- a/reactos/boot/freeldr/fdebug/Tr.rc +++ b/reactos/boot/freeldr/fdebug/Tr.rc @@ -40,8 +40,8 @@ END IDC_FDEBUG ACCELERATORS MOVEABLE PURE BEGIN - "?", IDM_ABOUT, ASCII, ALT - "/", IDM_ABOUT, ASCII, ALT + 63, IDM_ABOUT, ASCII, ALT // "?" + 47, IDM_ABOUT, ASCII, ALT // "/" END diff --git a/reactos/dll/3rdparty/mesa32/mesa32.rbuild b/reactos/dll/3rdparty/mesa32/mesa32.rbuild index 4f221d1acbb..93247e64d17 100644 --- a/reactos/dll/3rdparty/mesa32/mesa32.rbuild +++ b/reactos/dll/3rdparty/mesa32/mesa32.rbuild @@ -4,6 +4,8 @@ -Wl,--enable-stdcall-fixup ntdll kernel32 + msvcrt + user32 diff --git a/reactos/dll/cpl/hdwwiz/hdwwiz.rbuild b/reactos/dll/cpl/hdwwiz/hdwwiz.rbuild index 9b766b99cff..7df49f5c2e2 100644 --- a/reactos/dll/cpl/hdwwiz/hdwwiz.rbuild +++ b/reactos/dll/cpl/hdwwiz/hdwwiz.rbuild @@ -8,6 +8,7 @@ 0x600 0x501 setupapi + kernel32 hdwwiz.c hdwwiz.rc diff --git a/reactos/dll/cpl/main/main.rbuild b/reactos/dll/cpl/main/main.rbuild index d20ded5dbbb..7c0237685fe 100644 --- a/reactos/dll/cpl/main/main.rbuild +++ b/reactos/dll/cpl/main/main.rbuild @@ -8,6 +8,7 @@ 0x600 0x501 kernel32 + advapi32 user32 comctl32 devmgr diff --git a/reactos/dll/cpl/ncpa/ncpa.rbuild b/reactos/dll/cpl/ncpa/ncpa.rbuild index 27632f06c00..52e7aa111ae 100644 --- a/reactos/dll/cpl/ncpa/ncpa.rbuild +++ b/reactos/dll/cpl/ncpa/ncpa.rbuild @@ -8,6 +8,7 @@ 0x600 0x501 kernel32 + advapi32 user32 comctl32 iphlpapi diff --git a/reactos/dll/cpl/sysdm/sysdm.rbuild b/reactos/dll/cpl/sysdm/sysdm.rbuild index 47df84479c6..524b1213023 100644 --- a/reactos/dll/cpl/sysdm/sysdm.rbuild +++ b/reactos/dll/cpl/sysdm/sysdm.rbuild @@ -8,6 +8,7 @@ 0x600 0x501 kernel32 + advapi32 user32 comctl32 netapi32 diff --git a/reactos/dll/cpl/timedate/timedate.rbuild b/reactos/dll/cpl/timedate/timedate.rbuild index 6515cc034c3..345f1eb1b08 100644 --- a/reactos/dll/cpl/timedate/timedate.rbuild +++ b/reactos/dll/cpl/timedate/timedate.rbuild @@ -8,6 +8,7 @@ 0x600 0x501 kernel32 + advapi32 user32 gdi32 comctl32 diff --git a/reactos/dll/directx/ddraw/ddraw.rbuild b/reactos/dll/directx/ddraw/ddraw.rbuild index e4565e94223..accd69d3336 100644 --- a/reactos/dll/directx/ddraw/ddraw.rbuild +++ b/reactos/dll/directx/ddraw/ddraw.rbuild @@ -12,7 +12,8 @@ d3d8thk dxguid ole32 - user32 + user32 + advapi32 ddraw.rc main.c @@ -20,7 +21,7 @@ startup.c cleanup.c - clipper.c + clipper.c color.c gamma.c palette.c diff --git a/reactos/dll/directx/devenum/devenum.rbuild b/reactos/dll/directx/devenum/devenum.rbuild index d674e32b7b2..8757f05f99b 100644 --- a/reactos/dll/directx/devenum/devenum.rbuild +++ b/reactos/dll/directx/devenum/devenum.rbuild @@ -14,12 +14,14 @@ uuid ntdll kernel32 + advapi32 ole32 oleaut32 winmm dxguid strmiids - devenum.rc + user32 + devenum.rc createdevenum.c devenum_main.c factory.c diff --git a/reactos/dll/directx/dinput/dinput.rbuild b/reactos/dll/directx/dinput/dinput.rbuild index 2db41b9bd77..807844e73a0 100644 --- a/reactos/dll/directx/dinput/dinput.rbuild +++ b/reactos/dll/directx/dinput/dinput.rbuild @@ -19,7 +19,7 @@ ole32 winmm dxguid - version.rc + version.rc data_formats.c device.c dinput_main.c diff --git a/reactos/dll/win32/aclui/aclui.rbuild b/reactos/dll/win32/aclui/aclui.rbuild index b6191eec2fd..2a7803dfef2 100644 --- a/reactos/dll/win32/aclui/aclui.rbuild +++ b/reactos/dll/win32/aclui/aclui.rbuild @@ -16,6 +16,7 @@ ole32 oleaut32 uxtheme + advapi32 aclui.c checklist.c guid.c diff --git a/reactos/dll/win32/advapi32/advapi32.rbuild b/reactos/dll/win32/advapi32/advapi32.rbuild index ae610410c65..07b0a5420d9 100644 --- a/reactos/dll/win32/advapi32/advapi32.rbuild +++ b/reactos/dll/win32/advapi32/advapi32.rbuild @@ -10,9 +10,9 @@ scm_client lsa_client ntdll - kernel32 rpcrt4 wine + kernel32 advapi32.h diff --git a/reactos/dll/win32/avifil32/avifil32.rbuild b/reactos/dll/win32/avifil32/avifil32.rbuild index 3eb0cfbc44d..bf68667f587 100644 --- a/reactos/dll/win32/avifil32/avifil32.rbuild +++ b/reactos/dll/win32/avifil32/avifil32.rbuild @@ -5,6 +5,7 @@ include/reactos/wine 0x501 + wine uuid ntdll winmm @@ -12,7 +13,8 @@ msvfw32 msacm32 kernel32 - wine + advapi32 + user32 acmstream.c api.c avifile.c diff --git a/reactos/dll/win32/dbghelp/dbghelp.rbuild b/reactos/dll/win32/dbghelp/dbghelp.rbuild index 13d1766bc5d..f3e3ba1fd50 100644 --- a/reactos/dll/win32/dbghelp/dbghelp.rbuild +++ b/reactos/dll/win32/dbghelp/dbghelp.rbuild @@ -8,10 +8,10 @@ 0x501 0x501 wine + pseh ntdll kernel32 psapi - pseh coff.c dbghelp.c elf_module.c diff --git a/reactos/dll/win32/devmgr/devmgr.rbuild b/reactos/dll/win32/devmgr/devmgr.rbuild index c7435dd80ca..a7ea1fc6ab1 100644 --- a/reactos/dll/win32/devmgr/devmgr.rbuild +++ b/reactos/dll/win32/devmgr/devmgr.rbuild @@ -12,6 +12,7 @@ kernel32 ntdll setupapi + advapi32 user32 devmgr.rc advprop.c diff --git a/reactos/dll/win32/glu32/glu32.rbuild b/reactos/dll/win32/glu32/glu32.rbuild index a0d5ea19884..5c85f0d0161 100644 --- a/reactos/dll/win32/glu32/glu32.rbuild +++ b/reactos/dll/win32/glu32/glu32.rbuild @@ -1,4 +1,4 @@ - + include libnurbs/internals @@ -10,12 +10,11 @@ - -lopengl32 ntdll + opengl32 kernel32 gdi32 msvcrt - opengl32 bezierEval.cc diff --git a/reactos/dll/win32/kernel32/kernel32.def b/reactos/dll/win32/kernel32/kernel32.def index 428b596a4b3..d62a91a254b 100644 --- a/reactos/dll/win32/kernel32/kernel32.def +++ b/reactos/dll/win32/kernel32/kernel32.def @@ -382,8 +382,8 @@ GetDllDirectoryA@8 GetDllDirectoryW@8 GetDriveTypeA@4 GetDriveTypeW@4 -GetEnvironmentStrings=GetEnvironmentStringsA@0 -GetEnvironmentStringsA@0 +GetEnvironmentStrings@0 +GetEnvironmentStringsA=GetEnvironmentStrings@0 GetEnvironmentStringsW@0 GetEnvironmentVariableA@12 GetEnvironmentVariableW@12 diff --git a/reactos/dll/win32/mmdrv/mmdrv.rbuild b/reactos/dll/win32/mmdrv/mmdrv.rbuild index f41b2642da5..0a9d11869fc 100644 --- a/reactos/dll/win32/mmdrv/mmdrv.rbuild +++ b/reactos/dll/win32/mmdrv/mmdrv.rbuild @@ -6,6 +6,7 @@ ntdll kernel32 + user32 winmm auxil.c entry.c diff --git a/reactos/dll/win32/msvideo/msvfw32.rbuild b/reactos/dll/win32/msvideo/msvfw32.rbuild index 4583cba3a74..14541f73489 100644 --- a/reactos/dll/win32/msvideo/msvfw32.rbuild +++ b/reactos/dll/win32/msvideo/msvfw32.rbuild @@ -6,12 +6,14 @@ 0x600 0x501 0x501 + wine winmm gdi32 comctl32 kernel32 + advapi32 + user32 ntdll - wine drawdib.c mciwnd.c msvfw32.rc diff --git a/reactos/dll/win32/netcfgx/netcfgx.rbuild b/reactos/dll/win32/netcfgx/netcfgx.rbuild index d974d63f983..1edf95d9d18 100644 --- a/reactos/dll/win32/netcfgx/netcfgx.rbuild +++ b/reactos/dll/win32/netcfgx/netcfgx.rbuild @@ -5,4 +5,6 @@ ntdll rpcrt4 setupapi + kernel32 + advapi32 diff --git a/reactos/dll/win32/newdev/newdev.rbuild b/reactos/dll/win32/newdev/newdev.rbuild index 49527a14323..790590c7062 100644 --- a/reactos/dll/win32/newdev/newdev.rbuild +++ b/reactos/dll/win32/newdev/newdev.rbuild @@ -13,4 +13,8 @@ comctl32 ntdll setupapi + kernel32 + advapi32 + user32 + shell32 diff --git a/reactos/dll/win32/ntmarta/ntmarta.c b/reactos/dll/win32/ntmarta/ntmarta.c index 564fe980624..a9ecb21125b 100644 --- a/reactos/dll/win32/ntmarta/ntmarta.c +++ b/reactos/dll/win32/ntmarta/ntmarta.c @@ -1025,9 +1025,12 @@ AccFreeIndexArray(PINHERITED_FROMW pInheritArray, USHORT AceCnt, PFN_OBJECT_MGR_FUNCTS pfnArray OPTIONAL) { + PINHERITED_FROMW pLast; + UNREFERENCED_PARAMETER(pfnArray); - while (AceCnt != 0) + pLast = pInheritArray + AceCnt; + while (pInheritArray != pLast) { if (pInheritArray->AncestorName != NULL) { @@ -1036,7 +1039,6 @@ AccFreeIndexArray(PINHERITED_FROMW pInheritArray, } pInheritArray++; - AceCnt--; } return ERROR_SUCCESS; diff --git a/reactos/dll/win32/ntmarta/ntmarta.rbuild b/reactos/dll/win32/ntmarta/ntmarta.rbuild index 64ba64f1340..a46dddce5dd 100644 --- a/reactos/dll/win32/ntmarta/ntmarta.rbuild +++ b/reactos/dll/win32/ntmarta/ntmarta.rbuild @@ -10,6 +10,7 @@ ntdll kernel32 advapi32 + user32 ntmarta.c ntmarta.rc ntmarta.h diff --git a/reactos/dll/win32/opengl32/opengl32.rbuild b/reactos/dll/win32/opengl32/opengl32.rbuild index ef02d13bda8..a57b332a2e3 100644 --- a/reactos/dll/win32/opengl32/opengl32.rbuild +++ b/reactos/dll/win32/opengl32/opengl32.rbuild @@ -7,6 +7,8 @@ ntdll kernel32 gdi32 + user32 + advapi32 gl.c opengl32.c wgl.c diff --git a/reactos/dll/win32/setupapi/setupapi.rbuild b/reactos/dll/win32/setupapi/setupapi.rbuild index b4e4d6f1830..0c81f9a3a4c 100644 --- a/reactos/dll/win32/setupapi/setupapi.rbuild +++ b/reactos/dll/win32/setupapi/setupapi.rbuild @@ -22,6 +22,7 @@ user32 rpcrt4 version + shell32 cfgmgr.c devclass.c devinst.c diff --git a/reactos/dll/win32/shellext/slayer/precomp.h b/reactos/dll/win32/shellext/slayer/precomp.h index dfb412672dc..f80ea832d5e 100644 --- a/reactos/dll/win32/shellext/slayer/precomp.h +++ b/reactos/dll/win32/shellext/slayer/precomp.h @@ -1,7 +1,7 @@ -#define INITGUID #include #include #include +#include #include #include #include diff --git a/reactos/dll/win32/shellext/slayer/slayer.c b/reactos/dll/win32/shellext/slayer/slayer.c index 10854421233..f116d2dab27 100644 --- a/reactos/dll/win32/shellext/slayer/slayer.c +++ b/reactos/dll/win32/shellext/slayer/slayer.c @@ -30,10 +30,6 @@ HINSTANCE hInstance = NULL; static LONG dllrefs = 0; -/* FIXME - they should be exported somewhere instead of defined here... */ -DEFINE_GUID(IID_IClassFactory, 0x00000001, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46); -DEFINE_GUID(IID_IUnknown, 0x00000000, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46); - static ifaceICompatibilityPageVbtl efvt = { /* IUnknown methods */ diff --git a/reactos/dll/win32/shellext/slayer/slayer.h b/reactos/dll/win32/shellext/slayer/slayer.h index fcb61f00e7d..f48538e430a 100644 --- a/reactos/dll/win32/shellext/slayer/slayer.h +++ b/reactos/dll/win32/shellext/slayer/slayer.h @@ -20,7 +20,7 @@ typedef struct _CITEM ICompatibilityPage ******************************************************************************/ -DEFINE_GUID(CLSID_ICompatibilityPage, 0x513D916F, 0x2A8E, 0x4F51, 0x00AE, 0xAB,0x0C,0xBC,0x76,0xFB,0x1A,0xF9); /* F8 on XP! */ +static const GUID CLSID_ICompatibilityPage = {0x513D916F,0x2A8E,0x4F51,{0xAE,0xAB,0x0C,0xBC,0x76,0xFB,0x1A,0xF9}}; /* F8 on XP! */ typedef struct ICompatibilityPage *LPCOMPATIBILITYPAGE; diff --git a/reactos/dll/win32/shellext/slayer/slayer.rbuild b/reactos/dll/win32/shellext/slayer/slayer.rbuild index 3ddf99c31ca..de6e26c3d31 100644 --- a/reactos/dll/win32/shellext/slayer/slayer.rbuild +++ b/reactos/dll/win32/shellext/slayer/slayer.rbuild @@ -12,6 +12,7 @@ advapi32 ole32 shell32 + uuid slayer.c slayer.rc precomp.h diff --git a/reactos/dll/win32/syssetup/syssetup.rbuild b/reactos/dll/win32/syssetup/syssetup.rbuild index 557e440f609..9a3efaca02a 100644 --- a/reactos/dll/win32/syssetup/syssetup.rbuild +++ b/reactos/dll/win32/syssetup/syssetup.rbuild @@ -7,6 +7,7 @@ 0x0600 0x0501 0x0501 + pseh uuid ntdll kernel32 @@ -20,7 +21,6 @@ ole32 shell32 shlwapi - pseh classinst.c dllmain.c install.c diff --git a/reactos/include/psdk/shlguid.h b/reactos/include/psdk/shlguid.h index 231feb3ee99..4335ebe544d 100644 --- a/reactos/include/psdk/shlguid.h +++ b/reactos/include/psdk/shlguid.h @@ -7,98 +7,128 @@ #ifdef __cplusplus extern "C" { #endif -#define DEFINE_SHLGUID(n,l,w1,w2) DEFINE_GUID(n,l,w1,w2,0xC0,0,0,0,0,0,0,0x46) -#define SID_SShellBrowser IID_IShellBrowser -extern const GUID CLSID_MyComputer; -extern const GUID CLSID_MyDocuments; -extern const GUID CLSID_ShellDesktop; -extern const GUID CLSID_ShellLink; -extern const GUID CLSID_ControlPanel; -extern const GUID CLSID_Internet; -extern const GUID CLSID_NetworkPlaces; -extern const GUID CLSID_RecycleBin; -extern const GUID CLSID_ShellFSFolder; -extern const GUID CLSID_Printers; -extern const GUID CLSID_FolderShortcut; -extern const GUID FMTID_Intshcut; -extern const GUID FMTID_InternetSite; -extern const GUID CGID_Explorer; -extern const GUID CGID_ShellDocView; -extern const GUID CGID_ShellServiceObject; -extern const GUID IID_INewShortcutHookA; -extern const GUID IID_IShellBrowser; -extern const GUID IID_IShellView; -extern const GUID IID_IContextMenu; -extern const GUID IID_IColumnProvider; -extern const GUID IID_IQueryInfo; -extern const GUID IID_IShellIcon; -extern const GUID IID_IShellIconOverlayIdentifier; -extern const GUID IID_IShellFolder; -extern const GUID IID_IShellExtInit; -extern const GUID IID_IShellPropSheetExt; -extern const GUID IID_IPersistFolder; -extern const GUID IID_IExtractIconA; -extern const GUID IID_IShellLinkA; -extern const GUID IID_IShellLinkDataList; -extern const GUID IID_IShellCopyHookA; -extern const GUID IID_IFileViewerA; -extern const GUID IID_ICommDlgBrowser; -extern const GUID IID_IEnumIDList; -extern const GUID IID_IFileViewerSite; -extern const GUID IID_IContextMenu2; -extern const GUID IID_IShellExecuteHookA; -extern const GUID IID_IPropSheetPage; -extern const GUID IID_INewShortcutHookW; -extern const GUID IID_IFileViewerW; -extern const GUID IID_IShellLinkW; -extern const GUID IID_IExtractIconW; -extern const GUID IID_IShellExecuteHookW; -extern const GUID IID_IShellCopyHookW; -extern const GUID IID_IShellView2; -extern const GUID LIBID_SHDocVw; -extern const GUID IID_IShellExplorer; -extern const GUID DIID_DShellExplorerEvents; -extern const GUID CLSID_ShellExplorer; -extern const GUID IID_ISHItemOC; -extern const GUID DIID_DSHItemOCEvents; -extern const GUID CLSID_SHItemOC; -extern const GUID IID_DHyperLink; -extern const GUID IID_DIExplorer; -extern const GUID DIID_DExplorerEvents; -extern const GUID CLSID_InternetExplorer; -extern const GUID CLSID_StdHyperLink; -extern const GUID CLSID_FileTypes; -extern const GUID CLSID_InternetShortcut; -extern const GUID IID_IUniformResourceLocator; -extern const GUID CLSID_DragDropHelper; -extern const GUID IID_IDropTargetHelper; -extern const GUID IID_IDragSourceHelper; -#if (_WIN32_IE >= 0x400 || _WIN32_WINNT >= 0x500) -extern const GUID IID_IPersistFolder2; -extern const GUID CLSID_AutoComplete; -#endif -#if (_WIN32_WINNT >= 0x500) -extern const GUID IID_IPersistFolder3; -extern const GUID IID_IShellFolder2; -extern const GUID IID_IFileSystemBindData; -#endif + +#define DEFINE_SHLGUID(name, l, w1, w2) DEFINE_OLEGUID(name,l,w1,w2) + +DEFINE_SHLGUID(CLSID_ShellDesktop, 0x00021400L, 0, 0); +DEFINE_SHLGUID(CLSID_ShellLink, 0x00021401L, 0, 0); + +DEFINE_SHLGUID(CATID_BrowsableShellExt, 0x00021490L, 0, 0); +DEFINE_SHLGUID(CATID_BrowseInPlace, 0x00021491L, 0, 0); +DEFINE_SHLGUID(CATID_DeskBand, 0x00021492L, 0, 0); +DEFINE_SHLGUID(CATID_InfoBand, 0x00021493L, 0, 0); +DEFINE_SHLGUID(CATID_CommBand, 0x00021494L, 0, 0); + +/* shell32 formatids */ +DEFINE_SHLGUID(FMTID_Intshcut, 0x000214A0L, 0, 0); +DEFINE_SHLGUID(FMTID_InternetSite, 0x000214A1L, 0, 0); + +/* command group ids */ +DEFINE_SHLGUID(CGID_Explorer, 0x000214D0L, 0, 0); +DEFINE_SHLGUID(CGID_ShellDocView, 0x000214D1L, 0, 0); +DEFINE_SHLGUID(CGID_ShellServiceObject, 0x000214D2L, 0, 0); +DEFINE_SHLGUID(CGID_ExplorerBarDoc, 0x000214D3L, 0, 0); + +DEFINE_SHLGUID(IID_IShellIcon, 0x000214E5L, 0, 0); +DEFINE_SHLGUID(IID_IShellPropSheetExt, 0x000214E9L, 0, 0); +DEFINE_SHLGUID(IID_IShellDetails, 0x000214ECL, 0, 0); +DEFINE_SHLGUID(IID_IDelayedRelease, 0x000214EDL, 0, 0); +DEFINE_SHLGUID(IID_IShellCopyHookA, 0x000214EFL, 0, 0); +DEFINE_SHLGUID(IID_IFileViewerA, 0x000214F0L, 0, 0); +DEFINE_SHLGUID(IID_IFileViewerSite, 0x000214F3L, 0, 0); +DEFINE_SHLGUID(IID_IPropSheetPage, 0x000214F6L, 0, 0); +DEFINE_SHLGUID(IID_IFileViewerW, 0x000214F8L, 0, 0); +DEFINE_SHLGUID(IID_IShellCopyHookW, 0x000214FCL, 0, 0); +DEFINE_SHLGUID(IID_IRemoteComputer, 0x000214FEL, 0, 0); +DEFINE_SHLGUID(IID_IQueryInfo, 0x00021500L, 0, 0); + +DEFINE_SHLGUID(IID_IExtractIconA, 0x000214EBL, 0, 0); +DEFINE_SHLGUID(IID_IExtractIconW, 0x000214FAL, 0, 0); +DEFINE_SHLGUID(IID_IContextMenu, 0x000214E4L, 0, 0); +DEFINE_SHLGUID(IID_IContextMenu2, 0x000214F4L, 0, 0); +DEFINE_SHLGUID(IID_ICommDlgBrowser, 0x000214F1L, 0, 0); +DEFINE_SHLGUID(IID_IShellBrowser, 0x000214E2L, 0, 0); +DEFINE_SHLGUID(IID_IShellView, 0x000214E3L, 0, 0); +DEFINE_SHLGUID(IID_IShellFolder, 0x000214E6L, 0, 0); +DEFINE_SHLGUID(IID_IShellExtInit, 0x000214E8L, 0, 0); +DEFINE_SHLGUID(IID_IPersistFolder, 0x000214EAL, 0, 0); +DEFINE_SHLGUID(IID_IShellLinkA, 0x000214EEL, 0, 0); +DEFINE_SHLGUID(IID_IEnumIDList, 0x000214F2L, 0, 0); +DEFINE_SHLGUID(IID_IShellLinkW, 0x000214F9L, 0, 0); +DEFINE_SHLGUID(IID_IShellExecuteHookA, 0x000214F5L, 0, 0); +DEFINE_SHLGUID(IID_IShellExecuteHookW, 0x000214FBL, 0, 0); +DEFINE_SHLGUID(IID_INewShortcutHookA, 0x000214E1L, 0, 0); +DEFINE_SHLGUID(IID_INewShortcutHookW, 0x000214F7L, 0, 0); + +DEFINE_GUID(CLSID_CUrlHistory, 0x3c374a40, 0xbae4, 0x11cf, 0xbf, 0x7d, 0x00, 0xaa, 0x00, 0x69, 0x46, 0xee); +#define SID_SUrlHistory CLSID_CUrlHistory + +DEFINE_GUID(CLSID_CURLSearchHook, 0xcfbfae00, 0x17a6, 0x11d0, 0x99, 0xcb, 0x00, 0xc0, 0x4f, 0xd6, 0x44, 0x97); + +DEFINE_GUID(SID_STopLevelBrowser, 0x4C96BE40L, 0x915C, 0x11CF, 0x99, 0xD3, 0x00, 0xAA, 0x00, 0x4A, 0xE8, 0x37); + +#define SID_SShellBrowser IID_IShellBrowser + #ifdef UNICODE -#define IID_IFileViewer IID_IFileViewerW -#define IID_IShellLink IID_IShellLinkW -#define IID_IExtractIcon IID_IExtractIconW -#define IID_IShellCopyHook IID_IShellCopyHookW -#define IID_IShellExecuteHook IID_IShellExecuteHookW -#define IID_INewShortcutHook IID_INewShortcutHookW +#define IID_IFileViewer IID_IFileViewerW +#define IID_IShellLink IID_IShellLinkW +#define IID_IExtractIcon IID_IExtractIconW +#define IID_IShellCopyHook IID_IShellCopyHookW +#define IID_IShellExecuteHook IID_IShellExecuteHookW +#define IID_INewShortcutHook IID_INewShortcutHookW #else -#define IID_IFileViewer IID_IFileViewerA -#define IID_IShellLink IID_IShellLinkA -#define IID_IExtractIcon IID_IExtractIconA -#define IID_IShellCopyHook IID_IShellCopyHookA -#define IID_IShellExecuteHook IID_IShellExecuteHookA -#define IID_INewShortcutHook IID_INewShortcutHookA +#define IID_IFileViewer IID_IFileViewerA +#define IID_IShellLink IID_IShellLinkA +#define IID_IExtractIcon IID_IExtractIconA +#define IID_IShellCopyHook IID_IShellCopyHookA +#define IID_IShellExecuteHook IID_IShellExecuteHookA +#define IID_INewShortcutHook IID_INewShortcutHookA #endif -extern const GUID IID_IInputObject; -extern const GUID IID_IInputObjectSite; + +DEFINE_GUID(IID_IDockingWindow, 0x012dd920L, 0x7B26, 0x11D0, 0x8C, 0xA9, 0x00, 0xA0, 0xC9, 0x2D, 0xBF, 0xE8); +DEFINE_GUID(IID_IDockingWindowSite, 0x2A342FC2L, 0x7B26, 0x11D0, 0x8C, 0xA9, 0x00, 0xA0, 0xC9, 0x2D, 0xBF, 0xE8); +DEFINE_GUID(IID_IInputObject, 0x068284FAA, 0x6A48, 0x11D0, 0x8C, 0x78, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xB4); +DEFINE_GUID(IID_IInputObjectSite, 0x0F1DB8392, 0x7331, 0x11D0, 0x8C, 0x99, 0x00, 0xA0, 0xC9, 0x2D, 0xBF, 0xE8); + +/**************************************************************************** + * the next IID's are the namespace elements of the pidls + */ +DEFINE_GUID(CLSID_NetworkPlaces, 0x208D2C60, 0x3AEA, 0x1069, 0xA2, 0xD7, 0x08, 0x00, 0x2B, 0x30, 0x30, 0x9D); +DEFINE_GUID(CLSID_NetworkDomain, 0x46e06680, 0x4bf0, 0x11d1, 0x83, 0xee, 0x00, 0xa0, 0xc9, 0x0d, 0xc8, 0x49); +DEFINE_GUID(CLSID_NetworkServer, 0xc0542a90, 0x4bf0, 0x11d1, 0x83, 0xee, 0x00, 0xa0, 0xc9, 0x0d, 0xc8, 0x49); +DEFINE_GUID(CLSID_NetworkShare, 0x54a754c0, 0x4bf0, 0x11d1, 0x83, 0xee, 0x00, 0xa0, 0xc9, 0x0d, 0xc8, 0x49); +DEFINE_GUID(CLSID_MyComputer, 0x20D04FE0, 0x3AEA, 0x1069, 0xA2, 0xD8, 0x08, 0x00, 0x2B, 0x30, 0x30, 0x9D); +DEFINE_GUID(CLSID_Internet, 0x871C5380, 0x42A0, 0x1069, 0xA2, 0xEA, 0x08, 0x00, 0x2B, 0x30, 0x30, 0x9D); +DEFINE_GUID(CLSID_ShellFSFolder, 0xF3364BA0, 0x65B9, 0x11CE, 0xA9, 0xBA, 0x00, 0xAA, 0x00, 0x4A, 0xE8, 0x37); +DEFINE_GUID(CLSID_RecycleBin, 0x645FF040, 0x5081, 0x101B, 0x9F, 0x08, 0x00, 0xAA, 0x00, 0x2F, 0x95, 0x4E); +DEFINE_GUID(CLSID_ControlPanel, 0x21EC2020, 0x3AEA, 0x1069, 0xA2, 0xDD, 0x08, 0x00, 0x2B, 0x30, 0x30, 0x9D); +DEFINE_GUID(CLSID_Printers, 0x2227A280, 0x3AEA, 0x1069, 0xA2, 0xDE, 0x08, 0x00, 0x2B, 0x30, 0x30, 0x9D); +DEFINE_GUID(CLSID_MyDocuments, 0x450d8fba, 0xad25, 0x11d0, 0x98, 0xa8, 0x08, 0x00, 0x36, 0x1b, 0x11, 0x03); +DEFINE_GUID(CLSID_FolderShortcut, 0x0AFACED1, 0xE828, 0x11D1, 0x91, 0x87, 0xB5, 0x32, 0xF1, 0xE9, 0x57, 0x5D); + +DEFINE_GUID(IID_IQueryAssociations, 0xc46ca590, 0x3c3f, 0x11d2, 0xbe, 0xe6, 0x00, 0x00, 0xf8, 0x05, 0xca, 0x57); + +DEFINE_GUID(CLSID_DragDropHelper, 0x4657278a, 0x411b, 0x11d2, 0x83, 0x9a, 0x00, 0xc0, 0x4f, 0xd9, 0x18, 0xd0); + +DEFINE_GUID(CLSID_AutoComplete, 0x00bb2763, 0x6a77, 0x11d0, 0xa5, 0x35, 0x00, 0xc0, 0x4f, 0xd7, 0xd0, 0x62); + +#define PSGUID_SHELLDETAILS {0x28636aa6, 0x953d, 0x11d2, 0xb5, 0xd6, 0x0, 0xc0, 0x4f, 0xd9, 0x18, 0xd0} +DEFINE_GUID(FMTID_ShellDetails, 0x28636aa6, 0x953d, 0x11d2, 0xb5, 0xd6, 0x0, 0xc0, 0x4f, 0xd9, 0x18, 0xd0); +#define PID_FINDDATA 0 +#define PID_NETRESOURCE 1 +#define PID_DESCRIPTIONID 2 +#define PID_WHICHFOLDER 3 +#define PID_NETWORKLOCATION 4 +#define PID_COMPUTERNAME 5 + +/* Note: PSGUID_STORAGE defined in ntquery.h */ +DEFINE_GUID(FMTID_Storage, 0xb725f130, 0x47ef, 0x101a, 0xa5, 0xf1, 0x02, 0x60, 0x8c, 0x9e, 0xeb, 0xac); +/* PID_* for FMTID_Storage defined in ntquery.h*/ + +#define PSGUID_DISPLACED {0x9b174b33, 0x40ff, 0x11d2, 0xa2, 0x7e, 0x0, 0xc0, 0x4f, 0xc3, 0x8, 0x71} +DEFINE_GUID(FMTID_Displaced, 0x9b174b33, 0x40ff, 0x11d2, 0xa2, 0x7e, 0x0, 0xc0, 0x4f, 0xc3, 0x8, 0x71); +#define PID_DISPLACED_FROM 2 +#define PID_DISPLACED_DATE 3 #ifdef __cplusplus } diff --git a/reactos/include/psdk/shlobj.h b/reactos/include/psdk/shlobj.h index 1f303f638d2..5c939bd3d89 100644 --- a/reactos/include/psdk/shlobj.h +++ b/reactos/include/psdk/shlobj.h @@ -349,6 +349,8 @@ extern "C" { #define FCW_STATUS 1 #define FCW_TOOLBAR 2 #define FCW_TREE 3 +#define FCW_INTERNETBAR 6 +#define FCW_PROGRESS 8 #define FCT_MERGE 1 #define FCT_CONFIGABLE 2 #define FCT_ADDTOEND 4 @@ -1549,8 +1551,36 @@ DECLARE_INTERFACE_(IShellView2,IShellView) STDMETHOD(GetItemObject)(THIS_ UINT,REFIID,PVOID*) PURE; STDMETHOD(GetView)(THIS_ SHELLVIEWID*,ULONG) PURE; STDMETHOD(CreateViewWindow2)(THIS_ LPSV2CVW2_PARAMS) PURE; + STDMETHOD(HandleRename)(THIS_ PCUITEMID_CHILD) PURE; + STDMETHOD(SelectAndPositionItem)(THIS_ PCUITEMID_CHILD,UINT,POINT*) PURE; }; #undef INTERFACE +#ifdef COBJMACROS +#define IShellView2_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b) +#define IShellView2_AddRef(T) (T)->lpVtbl->AddRef(T) +#define IShellView2_Release(T) (T)->lpVtbl->Release(T) +#define IShellView2_GetWindow(T,a) (T)->lpVtbl->GetWindow(T,a) +#define IShellView2_ContextSensitiveHelp(T,a) (T)->lpVtbl->ContextSensitiveHelp(T,a) +#define IShellView2_TranslateAccelerator(T,a) (T)->lpVtbl->TranslateAccelerator(T,a) +#ifdef _FIX_ENABLEMODELESS_CONFLICT +#define IShellView2_EnableModeless(T,a) (T)->lpVtbl->EnableModelessSV(T,a) +#else +#define IShellView2_EnableModeless(T,a) (T)->lpVtbl->EnableModeless(T,a) +#endif +#define IShellView2_UIActivate(T,a) (T)->lpVtbl->UIActivate(T,a) +#define IShellView2_Refresh(T) (T)->lpVtbl->Refresh(T) +#define IShellView2_CreateViewWindow(T,a,b,c,d,e) (T)->lpVtbl->CreateViewWindow(T,a,b,c,d,e) +#define IShellView2_DestroyViewWindow(T) (T)->lpVtbl->DestroyViewWindow(T) +#define IShellView2_GetCurrentInfo(T,a) (T)->lpVtbl->GetCurrentInfo(T,a) +#define IShellView2_AddPropertySheetPages(T,a,b,c) (T)->lpVtbl->AddPropertySheetPages(T,a,b,c) +#define IShellView2_SaveViewState(T) (T)->lpVtbl->SaveViewState(T) +#define IShellView2_SelectItem(T,a,b) (T)->lpVtbl->SelectItem(T,a,b) +#define IShellView2_GetItemObject(T,a,b,c) (T)->lpVtbl->GetItemObject(T,a,b,c) +#define IShellView2_GetView(T,a,b) (T)->lpVtbl->GetView(T,a,b) +#define IShellView2_CreateViewWindow2(T,a) (T)->lpVtbl->CreateViewWindow2(T,a) +#define IShellView2_HandleRename(T,a) (T)->lpVtbl->HandleRename(T,a) +#define IShellView2_SelectAndPositionItem(T,a,b,c) (T)->lpVtbl->SelectAndPositionItem(T,a,b,c) +#endif #define INTERFACE IShellExecuteHookA DECLARE_INTERFACE_(IShellExecuteHookA,IUnknown) @@ -1762,11 +1792,22 @@ typedef struct _CSFV FOLDERVIEWMODE fvm; } CSFV, *LPCSFV; +/* FIXME: Add the IShellFolderViewCB interface! */ +#define IShellFolderViewCB void +typedef struct _SFV_CREATE +{ + UINT cbSize; + IShellFolder *pshf; + IShellView *psvOuter; + IShellFolderViewCB *psfvcb; +} SFV_CREATE; + void WINAPI SHAddToRecentDocs(UINT,PCVOID); LPITEMIDLIST WINAPI SHBrowseForFolderA(PBROWSEINFOA); LPITEMIDLIST WINAPI SHBrowseForFolderW(PBROWSEINFOW); DWORD WINAPI SHCLSIDFromStringA(LPCSTR,CLSID*); DWORD WINAPI SHCLSIDFromStringW(LPCWSTR,CLSID*); +HRESULT WINAPI SHCreateShellFolderView(const SFV_CREATE*,IShellView**); HRESULT WINAPI SHCreateShellFolderViewEx(LPCSFV pshfvi, IShellView **ppshv); void WINAPI SHChangeNotify(LONG,UINT,PCVOID,PCVOID); HRESULT WINAPI SHGetDataFromIDListA(LPSHELLFOLDER,LPCITEMIDLIST,int,PVOID,int); @@ -1825,6 +1866,9 @@ LPITEMIDLIST WINAPI ILGetNext(LPCITEMIDLIST); UINT WINAPI ILGetSize(LPCITEMIDLIST); void WINAPI ILFree(LPITEMIDLIST); +void WINAPI SHFree(LPVOID); +LPITEMIDLIST WINAPI SHCloneSpecialIDList(HWND,DWORD,BOOL); + HRESULT WINAPI SHCoCreateInstance(LPCWSTR,REFCLSID,IUnknown*,REFIID,void**); BOOL WINAPI SHObjectProperties(HWND,DWORD,LPCWSTR,LPCWSTR); #endif diff --git a/reactos/include/psdk/shtypes.h b/reactos/include/psdk/shtypes.h index d5218b96c8c..3f7baa0d592 100644 --- a/reactos/include/psdk/shtypes.h +++ b/reactos/include/psdk/shtypes.h @@ -39,6 +39,8 @@ typedef enum tagSTRRET_TYPE { STRRET_CSTR = 2 } STRRET_TYPE; +#define PCUITEMID_CHILD LPCITEMIDLIST + #pragma pack(pop) #ifdef __cplusplus } diff --git a/reactos/include/psdk/unknwn.h b/reactos/include/psdk/unknwn.h index 4a8c3fc4712..3ce60d1921c 100644 --- a/reactos/include/psdk/unknwn.h +++ b/reactos/include/psdk/unknwn.h @@ -16,8 +16,9 @@ extern "C"{ void * __RPC_USER MIDL_user_allocate(size_t); void __RPC_USER MIDL_user_free(void*); -EXTERN_C const IID IID_IUnknown; -EXTERN_C const IID IID_IClassFactory; + +DEFINE_GUID(IID_IUnknown, 0x00000000, 0x0000, 0x0000, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46); +DEFINE_OLEGUID(IID_IClassFactory, 0x00000001, 0, 0); #ifndef __IUnknown_INTERFACE_DEFINED__ #define __IUnknown_INTERFACE_DEFINED__ #define INTERFACE IUnknown diff --git a/reactos/include/psdk/winbase.h b/reactos/include/psdk/winbase.h index 9b7400f7ba6..b54e56732bd 100644 --- a/reactos/include/psdk/winbase.h +++ b/reactos/include/psdk/winbase.h @@ -1443,7 +1443,6 @@ DWORD WINAPI GetDllDirectoryW(DWORD,LPWSTR); UINT WINAPI GetDriveTypeA(LPCSTR); UINT WINAPI GetDriveTypeW(LPCWSTR); LPSTR WINAPI GetEnvironmentStrings(void); -LPSTR WINAPI GetEnvironmentStringsA(void); LPWSTR WINAPI GetEnvironmentStringsW(void); DWORD WINAPI GetEnvironmentVariableA(LPCSTR,LPSTR,DWORD); DWORD WINAPI GetEnvironmentVariableW(LPCWSTR,LPWSTR,DWORD); @@ -2360,6 +2359,7 @@ typedef ENUMRESTYPEPROCA ENUMRESTYPEPROC; #define GetDllDirectory GetDllDirectoryA #endif #define GetDriveType GetDriveTypeA +#define GetEnvironmentStringsA GetEnvironmentStrings #define GetEnvironmentVariable GetEnvironmentVariableA #define GetFileAttributes GetFileAttributesA #define GetFileAttributesEx GetFileAttributesExA diff --git a/reactos/include/reactos/wine/shlguid.h b/reactos/include/reactos/wine/shlguid.h index b63e25525f2..1956e490811 100644 --- a/reactos/include/reactos/wine/shlguid.h +++ b/reactos/include/reactos/wine/shlguid.h @@ -60,4 +60,6 @@ DEFINE_GUID(IID_IInputObjectSite, 0x0F1DB8392, 0x7331, 0x11D0, 0x8C, 0x99, 0x0 DEFINE_GUID(IID_IShellLinkDataList, 0x45e2b4ae, 0xb1c3, 0x11d0, 0xb9, 0x2f, 0x00, 0xa0, 0xc9, 0x03, 0x12, 0xe1); +DEFINE_SHLGUID(IID_IShellPropSheetExt, 0x000214E9L, 0, 0); + #endif /* __WINE_SHLGUID_H */ diff --git a/reactos/include/reactos/wine/unknwn.h b/reactos/include/reactos/wine/unknwn.h index 2dc493c94df..3e994dcaa05 100644 --- a/reactos/include/reactos/wine/unknwn.h +++ b/reactos/include/reactos/wine/unknwn.h @@ -3,14 +3,14 @@ #ifndef __WINE_UNKNWN_H #define __WINE_UNKNWN_H -DEFINE_GUID(IID_IUnknown, 0x00000000, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46); +/*DEFINE_GUID(IID_IUnknown, 0x00000000, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);*/ /*** IUnknown methods ***/ #define IUnknown_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) #define IUnknown_AddRef(p) (p)->lpVtbl->AddRef(p) #define IUnknown_Release(p) (p)->lpVtbl->Release(p) -DEFINE_GUID(IID_IClassFactory, 0x00000001, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46); +/*DEFINE_GUID(IID_IClassFactory, 0x00000001, 0x0000, 0x0000, 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46);*/ /*** IUnknown methods ***/ #define IClassFactory_QueryInterface(p,a,b) (p)->lpVtbl->QueryInterface(p,a,b) diff --git a/reactos/lib/dxguid/dxguid-mingw.c b/reactos/lib/dxguid/dxguid-mingw.c index 65d3343e1f3..2a1ca95a7be 100644 --- a/reactos/lib/dxguid/dxguid-mingw.c +++ b/reactos/lib/dxguid/dxguid-mingw.c @@ -10,12 +10,9 @@ */ -#if defined(__LCC__) || defined(__GNUC__) -#define INITGUID 1 -#include -#else +#define INITGUID #include -#endif +#include // wine own or ? // but it keep dsound happy diff --git a/reactos/lib/lib.rbuild b/reactos/lib/lib.rbuild index f461de15335..149dabdcf43 100644 --- a/reactos/lib/lib.rbuild +++ b/reactos/lib/lib.rbuild @@ -34,6 +34,9 @@ + + + diff --git a/reactos/lib/mingw/CRTfmode.c b/reactos/lib/mingw/CRTfmode.c new file mode 100644 index 00000000000..bf750d94e1c --- /dev/null +++ b/reactos/lib/mingw/CRTfmode.c @@ -0,0 +1,16 @@ +/* + * CRTfmode.c + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + * Include this object to set _CRT_fmode to a state that will cause + * _mingw32_init_fmode to leave all file modes in their default state + * (basically text mode). + * + * To use this object include the object file in your link command: + * gcc -o foo.exe foo.o CRTfmode.o + * + */ + +int _CRT_fmode = 0; diff --git a/reactos/lib/mingw/CRTglob.c b/reactos/lib/mingw/CRTglob.c new file mode 100644 index 00000000000..a4f5fe051f9 --- /dev/null +++ b/reactos/lib/mingw/CRTglob.c @@ -0,0 +1,16 @@ +/* + * CRTglob.c + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + * Include this object file to set _CRT_glob to a state that will + * turn on command line globbing by default. NOTE: _CRT_glob has a default + * state of on. Specify CRT_noglob.o to turn off globbing by default. + * + * To use this object include the object file in your link command: + * gcc -o foo.exe foo.o CRTglob.o + * + */ + +int _CRT_glob = -1; diff --git a/reactos/lib/mingw/CRTinit.c b/reactos/lib/mingw/CRTinit.c new file mode 100644 index 00000000000..bb2304d1dd7 --- /dev/null +++ b/reactos/lib/mingw/CRTinit.c @@ -0,0 +1,24 @@ +/* + * CRTinit.c + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + * A dummy version of _CRT_INIT for MS compatibility. Programs, or more often + * dlls, which use the static version of the MSVC run time are supposed to + * call _CRT_INIT to initialize the run time library in DllMain. This does + * not appear to be necessary when using crtdll or the dll versions of the + * MSVC runtime, so the dummy call simply does nothing. + * + * This object file is included as a standard in the link process as provided + * by the appropriate GCC frontend. + * + * To use this object include the object file in your link command: + * gcc -o foo.exe foo.o CRTinit.o + * + */ + +void +_CRT_INIT () +{ +} diff --git a/reactos/lib/tgetopt/_wgetopt.c b/reactos/lib/mingw/_wgetopt.c similarity index 100% rename from reactos/lib/tgetopt/_wgetopt.c rename to reactos/lib/mingw/_wgetopt.c diff --git a/reactos/lib/mingw/binmode.c b/reactos/lib/mingw/binmode.c new file mode 100644 index 00000000000..1cc3dedbfc8 --- /dev/null +++ b/reactos/lib/mingw/binmode.c @@ -0,0 +1,5 @@ +#include + +/* Set default file mode to binary */ + +int _fmode = _O_BINARY; diff --git a/reactos/lib/mingw/cpu_features.c b/reactos/lib/mingw/cpu_features.c new file mode 100644 index 00000000000..0eccfbfe3c6 --- /dev/null +++ b/reactos/lib/mingw/cpu_features.c @@ -0,0 +1,105 @@ +#include +#include "cpu_features.h" + +/* level 1 edx bits */ +#define EDX_CX8 (1 << 8) /* CMPXCHG8B */ +#define EDX_CMOV (1 << 15) +#define EDX_MMX (1 << 23) +#define EDX_FXSR (1 << 24) /* FXSAVE and FXRSTOR */ +#define EDX_SSE (1 << 25) +#define EDX_SSE2 (1 << 26) + +/* level 1 ecx bits */ +#define ECX_SSE3 (1 << 0) +#define ECX_CX16 (1 << 13) /* CMPXCHG16B */ + +/* extended level 0x80000001 edx bits */ +#define EDX_3DNOW (1 << 31) +#define EDX_3DNOWP (1 << 30) +#define EDX_LM (1 << 29) /*LONG MODE */ + +#define __cpuid(level,a,b,c,d) \ + __asm__ __volatile__ ("cpuid;" \ + : "=a" (a), "=b" (b), "=c" (c), "=d" (d)\ + : "0" (level)) + +/* Combine the different cpuid flags into a single bitmap. */ + +unsigned int __cpu_features = 0; + +void __cpu_features_init (void) +{ + unsigned int eax, ebx, ecx, edx; + /* Try to change the value of CPUID bit (bit 21) in EFLAGS. + If the bit can be toggled, CPUID is supported. */ + asm volatile ("pushfl; pushfl; popl %0;" + "movl %0,%1; xorl %2,%0;" + "pushl %0; popfl; pushfl; popl %0; popfl" + : "=&r" (eax), "=&r" (ebx) + : "i" (0x00200000)); + + if (((eax ^ ebx) & 0x00200000) == 0) + return; + + __cpuid (0, eax, ebx, ecx, edx); + if (eax == 0) + return; + + __cpuid (1, eax, ebx, ecx, edx); + + if (edx & EDX_CX8) + __cpu_features |= _CRT_CMPXCHG8B; + if (edx & EDX_CMOV) + __cpu_features |= _CRT_CMOV; + + if (edx & EDX_MMX) + __cpu_features |= _CRT_MMX; + if (edx & EDX_FXSR) + __cpu_features |= _CRT_FXSR; + if (edx & EDX_SSE) + __cpu_features |= _CRT_SSE; + if (edx & EDX_SSE2) + __cpu_features |= _CRT_SSE2; + + + if (ecx & ECX_SSE3) + __cpu_features |= _CRT_SSE3; + if (ecx & ECX_CX16) + __cpu_features |= _CRT_CMPXCHG16B; + + __cpuid (0x80000000, eax, ebx, ecx, edx); + if (eax < 0x80000001) + return; + __cpuid (0x80000001, eax, ebx, ecx, edx); + if (edx & EDX_3DNOW); + __cpu_features |= _CRT_3DNOW; + if (edx & EDX_3DNOWP) + __cpu_features |= _CRT_3DNOWP; + + return; +} + +#ifdef TEST + +#include +#define report(feature) \ + if ((feature) & __cpu_features) printf( #feature " found\n") + +int main() +{ + __cpu_features_init(); + + report(_CRT_CMPXCHG8B); + report(_CRT_CMOV); + report(_CRT_MMX); + report(_CRT_FXSR); + report(_CRT_SSE); + report(_CRT_SSE2); + report(_CRT_SSE3); + report(_CRT_CMPXCHG16B); + report(_CRT_3DNOW); + report(_CRT_3DNOWP); + return 0; +} + +#endif diff --git a/reactos/lib/mingw/cpu_features.h b/reactos/lib/mingw/cpu_features.h new file mode 100644 index 00000000000..64318574776 --- /dev/null +++ b/reactos/lib/mingw/cpu_features.h @@ -0,0 +1,25 @@ +#ifndef _CPU_FEATURES_H +#define _CPU_FEATURES_H + +#include + +#define _CRT_CMPXCHG8B 0x0001 +#define _CRT_CMOV 0x0002 +#define _CRT_MMX 0x0004 +#define _CRT_FXSR 0x0008 +#define _CRT_SSE 0x0010 +#define _CRT_SSE2 0x0020 +#define _CRT_SSE3 0x0040 +#define _CRT_CMPXCHG16B 0x0080 +#define _CRT_3DNOW 0x0100 +#define _CRT_3DNOWP 0x0200 + +extern unsigned int __cpu_features; + +/* Currently we use this in fpenv functions */ +#define __HAS_SSE __cpu_features & _CRT_SSE + +void __cpu_features_init (void); + + +#endif diff --git a/reactos/lib/mingw/crt1.c b/reactos/lib/mingw/crt1.c new file mode 100644 index 00000000000..65f248dd978 --- /dev/null +++ b/reactos/lib/mingw/crt1.c @@ -0,0 +1,283 @@ +/* + * crt1.c + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + * Source code for the startup proceedures used by all programs. This code + * is compiled to make crt1.o, which should be located in the library path. + * + */ + +/* Hide the declaration of _fmode with dllimport attribute in stdlib.h to + avoid problems with older GCC. */ +#define __IN_MINGW_RUNTIME +#include +#include +#include +#include +#include +#define WIN32_LEAN_AND_MEAN +#include +#include + +/* NOTE: The code for initializing the _argv, _argc, and environ variables + * has been moved to a separate .c file which is included in both + * crt1.c and dllcrt1.c. This means changes in the code don't have to + * be manually synchronized, but it does lead to this not-generally- + * a-good-idea use of include. */ +#include "init.c" +#include "cpu_features.h" + +extern void _pei386_runtime_relocator (void); + +extern int main (int, char **, char **); + +/* + * Must have the correct app type for MSVCRT. + */ + +#ifdef __MSVCRT__ +#define __UNKNOWN_APP 0 +#define __CONSOLE_APP 1 +#define __GUI_APP 2 +__MINGW_IMPORT void __set_app_type(int); +#endif /* __MSVCRT__ */ + +/* Global _fmode for this .exe, not the one in msvcrt.dll, + The default is set in txtmode.o in libmingw32.a */ +/* Override the dllimport'd declarations in stdlib.h */ +#undef _fmode +extern int _fmode; +#ifdef __MSVCRT__ +extern int* __p__fmode(void); /* To access the dll _fmode */ +#endif + +/* + * Setup the default file handles to have the _CRT_fmode mode, as well as + * any new files created by the user. + */ +extern int _CRT_fmode; + +static void +_mingw32_init_fmode (void) +{ + /* Don't set the std file mode if the user hasn't set any value for it. */ + if (_CRT_fmode) + { + _fmode = _CRT_fmode; + + /* + * This overrides the default file mode settings for stdin, + * stdout and stderr. At first I thought you would have to + * test with isatty, but it seems that the DOS console at + * least is smart enough to handle _O_BINARY stdout and + * still display correctly. + */ + if (stdin) + { + _setmode (_fileno (stdin), _CRT_fmode); + } + if (stdout) + { + _setmode (_fileno (stdout), _CRT_fmode); + } + if (stderr) + { + _setmode (_fileno (stderr), _CRT_fmode); + } + } + + /* Now sync the dll _fmode to the one for this .exe. */ +#ifdef __MSVCRT__ + *__p__fmode() = _fmode; +#else + *_imp___fmode_dll = _fmode; +#endif +} + +/* This function will be called when a trap occurs. Thanks to Jacob + Navia for his contribution. */ +static CALLBACK long +_gnu_exception_handler (EXCEPTION_POINTERS * exception_data) +{ + void (*old_handler) (int); + long action = EXCEPTION_CONTINUE_SEARCH; + int reset_fpu = 0; + + switch (exception_data->ExceptionRecord->ExceptionCode) + { + case EXCEPTION_ACCESS_VIOLATION: + /* test if the user has set SIGSEGV */ + old_handler = signal (SIGSEGV, SIG_DFL); + if (old_handler == SIG_IGN) + { + /* this is undefined if the signal was raised by anything other + than raise (). */ + signal (SIGSEGV, SIG_IGN); + action = EXCEPTION_CONTINUE_EXECUTION; + } + else if (old_handler != SIG_DFL) + { + /* This means 'old' is a user defined function. Call it */ + (*old_handler) (SIGSEGV); + action = EXCEPTION_CONTINUE_EXECUTION; + } + break; + + case EXCEPTION_ILLEGAL_INSTRUCTION: + case EXCEPTION_PRIV_INSTRUCTION: + /* test if the user has set SIGILL */ + old_handler = signal (SIGILL, SIG_DFL); + if (old_handler == SIG_IGN) + { + /* this is undefined if the signal was raised by anything other + than raise (). */ + signal (SIGILL, SIG_IGN); + action = EXCEPTION_CONTINUE_EXECUTION; + } + else if (old_handler != SIG_DFL) + { + /* This means 'old' is a user defined function. Call it */ + (*old_handler) (SIGILL); + action = EXCEPTION_CONTINUE_EXECUTION; + } + break; + + case EXCEPTION_FLT_INVALID_OPERATION: + case EXCEPTION_FLT_DIVIDE_BY_ZERO: + case EXCEPTION_FLT_DENORMAL_OPERAND: + case EXCEPTION_FLT_OVERFLOW: + case EXCEPTION_FLT_UNDERFLOW: + case EXCEPTION_FLT_INEXACT_RESULT: + reset_fpu = 1; + /* fall through. */ + + case EXCEPTION_INT_DIVIDE_BY_ZERO: + /* test if the user has set SIGFPE */ + old_handler = signal (SIGFPE, SIG_DFL); + if (old_handler == SIG_IGN) + { + signal (SIGFPE, SIG_IGN); + if (reset_fpu) + _fpreset (); + action = EXCEPTION_CONTINUE_EXECUTION; + } + else if (old_handler != SIG_DFL) + { + /* This means 'old' is a user defined function. Call it */ + (*old_handler) (SIGFPE); + action = EXCEPTION_CONTINUE_EXECUTION; + } + break; + + default: + break; + } + return action; +} + +/* + * The function mainCRTStartup is the entry point for all console programs. + */ +static void __attribute__((noreturn)) +__mingw_CRTStartup (void) +{ + int nRet; + + /* + * Set up the top-level exception handler so that signal handling + * works as expected. The mapping between ANSI/POSIX signals and + * Win32 SE is not 1-to-1, so caveat emptore. + * + */ + SetUnhandledExceptionFilter (_gnu_exception_handler); + + /* + * Initialize floating point unit. + */ + __cpu_features_init (); /* Do we have SSE, etc.*/ + _fpreset (); /* Supplied by the runtime library. */ + + /* + * Set up __argc, __argv and _environ. + */ + _mingw32_init_mainargs (); + + /* + * Sets the default file mode. + * If _CRT_fmode is set, also set mode for stdin, stdout + * and stderr, as well + * NOTE: DLLs don't do this because that would be rude! + */ + _mingw32_init_fmode (); + + /* Adust references to dllimported data that have non-zero offsets. */ + _pei386_runtime_relocator (); + + /* Align the stack to 16 bytes for the sake of SSE ops in main + or in functions inlined into main. */ + asm __volatile__ ("andl $-16, %%esp" : : : "%esp"); + + /* + * Call the main function. If the user does not supply one + * the one in the 'libmingw32.a' library will be linked in, and + * that one calls WinMain. See main.c in the 'lib' dir + * for more details. + */ + nRet = main (_argc, _argv, _environ); + + /* + * Perform exit processing for the C library. This means + * flushing output and calling 'atexit' registered functions. + */ + _cexit (); + + ExitProcess (nRet); +} + +/* + * The function mainCRTStartup is the entry point for all console programs. + */ +void +mainCRTStartup (void) +{ +#ifdef __MSVCRT__ + __set_app_type (__CONSOLE_APP); +#endif + __mingw_CRTStartup (); +} + +/* + * For now the GUI startup function is the same as the console one. + * This simply gets rid of the annoying warning about not being able + * to find WinMainCRTStartup when linking GUI applications. + */ +void +WinMainCRTStartup (void) +{ +#ifdef __MSVCRT__ + __set_app_type (__GUI_APP); +#endif + __mingw_CRTStartup (); +} + +#if 0 +/* + * We force use of library version of atexit, which is only + * visible in import lib as _imp__atexit + */ +extern int (*_imp__atexit)(void (*)(void)); +int atexit (void (* pfn )(void) ) +{ + return ( (*_imp__atexit)(pfn)); +} + +/* Likewise for non-ANSI _onexit */ +extern _onexit_t (*_imp___onexit)(_onexit_t); +_onexit_t +_onexit (_onexit_t pfn ) +{ + return (*_imp___onexit)(pfn); +} +#endif diff --git a/reactos/lib/mingw/dllcrt1.c b/reactos/lib/mingw/dllcrt1.c new file mode 100644 index 00000000000..8101f7133c2 --- /dev/null +++ b/reactos/lib/mingw/dllcrt1.c @@ -0,0 +1,185 @@ +/* + * dllcrt1.c + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + * Initialization code for DLLs. + * + */ +#include +#include +#include +#include +#include +#include + +/* Unlike normal crt1, I don't initialize the FPU, because the process + * should have done that already. I also don't set the file handle modes, + * because that would be rude. */ + +#ifdef __GNUC__ +extern void __main (); +extern void __do_global_dtors (); +#endif + +typedef void (* p_atexit_fn )(void); +static p_atexit_fn* first_atexit; +static p_atexit_fn* next_atexit; + +static void +__dll_exit (void); + +/* This is based on the function in the Wine project's exit.c */ +p_atexit_fn __dllonexit (p_atexit_fn, p_atexit_fn**, p_atexit_fn**); + + +extern BOOL WINAPI DllMain (HANDLE, DWORD, LPVOID); + +extern void _pei386_runtime_relocator (void); + +BOOL WINAPI +DllMainCRTStartup (HANDLE hDll, DWORD dwReason, LPVOID lpReserved) +{ + BOOL bRet; + + if (dwReason == DLL_PROCESS_ATTACH) + { + +#ifdef DEBUG + printf ("%s: DLL_PROCESS_ATTACH (%d)\n", __FUNCTION__); +#endif + + /* Initialize private atexit table for this dll. + 32 is min size required by ANSI */ + + first_atexit = (p_atexit_fn*) malloc (32 * sizeof (p_atexit_fn)); + if (first_atexit == NULL ) /* can't allocate memory */ + { + errno=ENOMEM; + return FALSE; + } + *first_atexit = NULL; + next_atexit = first_atexit; + + /* Adust references to dllimported data (from other DLL's) + that have non-zero offsets. */ + _pei386_runtime_relocator (); + +#ifdef __GNUC__ + /* From libgcc.a, __main calls global class constructors, + __do_global_ctors, which registers __do_global_dtors + as the first entry of the private atexit table we + have just initialised */ + __main (); + +#endif + } + + /* + * Call the user-supplied DllMain subroutine. + * This has to come after initialization of atexit table and + * registration of global constructors. + * NOTE: DllMain is optional, so libmingw32.a includes a stub + * which will be used if the user does not supply one. + */ + + bRet = DllMain (hDll, dwReason, lpReserved); + /* Handle case where DllMain returns FALSE on attachment attempt. */ + + if ( (dwReason == DLL_PROCESS_ATTACH) && !bRet) + { +#ifdef DEBUG + printf ("%s: DLL_PROCESS_ATTACH failed, cleaning up\n", __FUNCTION__); +#endif + + __dll_exit (); /* Cleanup now. This will set first_atexit to NULL so we + know we've cleaned up */ + } + + if (dwReason == DLL_PROCESS_DETACH) + { +#ifdef DEBUG + printf ("%s: DLL_PROCESS_DETACH (%d)\n", __FUNCTION__); +#endif + /* If not attached, return FALSE. Cleanup already done above + if failed attachment attempt. */ + if (! first_atexit ) + bRet = FALSE; + else + /* + * We used to call __do_global_dtors () here. This is + * no longer necessary since __do_global_dtors is now + * registered at start (last out) of private atexit table. + */ + __dll_exit (); + } + return bRet; +} + +static +void +__dll_exit(void) +/* Run LIFO terminators registered in private atexit table */ +{ + if ( first_atexit ) + { + p_atexit_fn* __last = next_atexit - 1; + while ( __last >= first_atexit ) + { + if ( *__last != NULL ) + { +#ifdef DEBUG + printf ("%s: Calling exit function 0x%x from 0x%x\n", + __FUNCTION__, (unsigned)(*__last),(unsigned)__last); +#endif + (**__last) (); + } + __last--; + } + free ( first_atexit ) ; + first_atexit = NULL ; + } + /* + Make sure output buffers opened by DllMain or + atexit-registered functions are flushed before detaching, + otherwise we can have problems with redirected output. + */ + fflush (NULL); +} + +/* + * The atexit exported from msvcrt.dll causes problems in DLLs. + * Here, we override the exported version of atexit with one that passes the + * private table initialised in DllMainCRTStartup to __dllonexit. + * That means we have to hide the mscvrt.dll atexit because the + * atexit defined here gets __dllonexit from the same lib. + */ + +#if 0 +int +atexit (p_atexit_fn pfn ) +{ +#ifdef DEBUG + printf ("%s: registering exit function 0x%x at 0x%x\n", + __FUNCTION__, (unsigned)pfn, (unsigned)next_atexit); +#endif + return (__dllonexit (pfn, &first_atexit, &next_atexit) + == NULL ? -1 : 0 ); +} + +/* + * Likewise for non-ANSI function _onexit that may be called by + * code in the dll. + */ + +_onexit_t +_onexit (_onexit_t pfn ) +{ +#ifdef DEBUG + printf ("%s: registering exit function 0x%x at 0x%x\n", + __FUNCTION__, (unsigned)pfn, (unsigned)next_atexit); +#endif + return ((_onexit_t) __dllonexit ((p_atexit_fn)pfn, &first_atexit, &next_atexit)); +} +#endif diff --git a/reactos/lib/mingw/gccmain.c b/reactos/lib/mingw/gccmain.c new file mode 100644 index 00000000000..601d15a1f5e --- /dev/null +++ b/reactos/lib/mingw/gccmain.c @@ -0,0 +1,79 @@ +/* + * gccmain.c + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + * A separate version of __main, __do_global_ctors and __do_global_dtors for + * Mingw32 for use with Cygwin32 b19. Hopefully this object file will only + * be linked if the libgcc.a doesn't include __main, __do_global_dtors and + * __do_global_ctors. + * + */ + +/* Needed for the atexit prototype. */ +#include + +typedef void (*func_ptr) (void); +extern func_ptr __CTOR_LIST__[]; +extern func_ptr __DTOR_LIST__[]; + +void +__do_global_dtors (void) +{ + static func_ptr *p = __DTOR_LIST__ + 1; + + /* + * Call each destructor in the destructor list until a null pointer + * is encountered. + */ + while (*p) + { + (*(p)) (); + p++; + } +} + +void +__do_global_ctors (void) +{ + unsigned long nptrs = (unsigned long) __CTOR_LIST__[0]; + unsigned i; + + /* + * If the first entry in the constructor list is -1 then the list + * is terminated with a null entry. Otherwise the first entry was + * the number of pointers in the list. + */ + if (nptrs == -1) + { + for (nptrs = 0; __CTOR_LIST__[nptrs + 1] != 0; nptrs++) + ; + } + + /* + * Go through the list backwards calling constructors. + */ + for (i = nptrs; i >= 1; i--) + { + __CTOR_LIST__[i] (); + } + + /* + * Register the destructors for processing on exit. + */ + atexit (__do_global_dtors); +} + +static int initialized = 0; + +void +__main (void) +{ + if (!initialized) + { + initialized = 1; + __do_global_ctors (); + } +} + diff --git a/reactos/lib/tgetopt/getopt.c b/reactos/lib/mingw/getopt.c similarity index 100% rename from reactos/lib/tgetopt/getopt.c rename to reactos/lib/mingw/getopt.c diff --git a/reactos/lib/mingw/include/_mingw.h b/reactos/lib/mingw/include/_mingw.h new file mode 100644 index 00000000000..59f4f39b6f7 --- /dev/null +++ b/reactos/lib/mingw/include/_mingw.h @@ -0,0 +1,165 @@ +/* + * _mingw.h + * + * Mingw specific macros included by ALL include files. + * + * This file is part of the Mingw32 package. + * + * Contributors: + * Created by Mumit Khan + * + * THIS SOFTWARE IS NOT COPYRIGHTED + * + * This source code is offered for use in the public domain. You may + * use, modify or distribute it freely. + * + * This code is distributed in the hope that it will be useful but + * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY + * DISCLAIMED. This includes but is not limited to warranties of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + */ + +#ifndef __MINGW_H +#define __MINGW_H + +/* These are defined by the user (or the compiler) + to specify how identifiers are imported from a DLL. + + __DECLSPEC_SUPPORTED Defined if dllimport attribute is supported. + __MINGW_IMPORT The attribute definition to specify imported + variables/functions. + _CRTIMP As above. For MS compatibility. + __MINGW32_VERSION Runtime version. + __MINGW32_MAJOR_VERSION Runtime major version. + __MINGW32_MINOR_VERSION Runtime minor version. + __MINGW32_BUILD_DATE Runtime build date. + + Other macros: + + __int64 define to be long long. Using a typedef doesn't + work for "unsigned __int64" + + All headers should include this first, and then use __DECLSPEC_SUPPORTED + to choose between the old ``__imp__name'' style or __MINGW_IMPORT + style declarations. */ + +/* Try to avoid problems with outdated checks for GCC __attribute__ support. */ +#undef __attribute__ + +#ifndef __GNUC__ +# ifndef __MINGW_IMPORT +# define __MINGW_IMPORT __declspec(dllimport) +# endif +# ifndef _CRTIMP +# define _CRTIMP __declspec(dllimport) +# endif +# define __DECLSPEC_SUPPORTED +# define __attribute__(x) /* nothing */ +#else /* __GNUC__ */ +# ifdef __declspec +# ifndef __MINGW_IMPORT + /* Note the extern. This is needed to work around GCC's + limitations in handling dllimport attribute. */ +# define __MINGW_IMPORT extern __attribute__ ((dllimport)) +# endif +# ifndef _CRTIMP +# ifdef __USE_CRTIMP +# define _CRTIMP __attribute__ ((dllimport)) +# else +# define _CRTIMP +# endif +# endif +# define __DECLSPEC_SUPPORTED +# else /* __declspec */ +# undef __DECLSPEC_SUPPORTED +# undef __MINGW_IMPORT +# ifndef _CRTIMP +# define _CRTIMP +# endif +# endif /* __declspec */ +# ifndef __cdecl +# define __cdecl __attribute__ ((__cdecl__)) +# endif +# ifndef __stdcall +# define __stdcall __attribute__ ((__stdcall__)) +# endif +# ifndef __int64 +# define __int64 long long +# endif +# ifndef __int32 +# define __int32 long +# endif +# ifndef __int16 +# define __int16 short +# endif +# ifndef __int8 +# define __int8 char +# endif +# ifndef __small +# define __small char +# endif +# ifndef __hyper +# define __hyper long long +# endif +#endif /* __GNUC__ */ + +#ifdef __cplusplus +#define __CRT_INLINE inline +#else +#define __CRT_INLINE extern __inline__ +#endif + +#if defined (__GNUC__) && defined (__GNUC_MINOR__) +#define __MINGW_GNUC_PREREQ(major, minor) \ + (__GNUC__ > (major) \ + || (__GNUC__ == (major) && __GNUC_MINOR__ >= (minor))) +#else +#define __MINGW_GNUC_PREREQ(major, minor) 0 +#endif + +#ifdef __cplusplus +# define __UNUSED_PARAM(x) +#else +# ifdef __GNUC__ +# define __UNUSED_PARAM(x) x __attribute__ ((__unused__)) +# else +# define __UNUSED_PARAM(x) x +# endif +#endif + +#ifdef __GNUC__ +#define __MINGW_ATTRIB_NORETURN __attribute__ ((__noreturn__)) +#define __MINGW_ATTRIB_CONST __attribute__ ((__const__)) +#else +#define __MINGW_ATTRIB_NORETURN +#define __MINGW_ATTRIB_CONST +#endif + +#if __MINGW_GNUC_PREREQ (3, 0) +#define __MINGW_ATTRIB_MALLOC __attribute__ ((__malloc__)) +#define __MINGW_ATTRIB_PURE __attribute__ ((__pure__)) +#else +#define __MINGW_ATTRIB_MALLOC +#define __MINGW_ATTRIB_PURE +#endif + +/* Attribute `nonnull' was valid as of gcc 3.3. We don't use GCC's + variadiac macro facility, because variadic macros cause syntax + errors with --traditional-cpp. */ +#if __MINGW_GNUC_PREREQ (3, 3) +#define __MINGW_ATTRIB_NONNULL(arg) __attribute__ ((__nonnull__ (arg))) +#else +#define __MINGW_ATTRIB_NONNULL(arg) +#endif /* GNUC >= 3.3 */ + +#ifndef __MSVCRT_VERSION__ +/* High byte is the major version, low byte is the minor. */ +# define __MSVCRT_VERSION__ 0x0600 +#endif + +#define __MINGW32_VERSION 3.10 +#define __MINGW32_MAJOR_VERSION 3 +#define __MINGW32_MINOR_VERSION 10 + +#endif /* __MINGW_H */ diff --git a/reactos/lib/mingw/include/assert.h b/reactos/lib/mingw/include/assert.h new file mode 100644 index 00000000000..9d825c9a288 --- /dev/null +++ b/reactos/lib/mingw/include/assert.h @@ -0,0 +1,51 @@ +/* + * assert.h + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + * Define the assert macro for debug output. + * + */ + +/* We should be able to include this file multiple times to allow the assert + macro to be enabled/disabled for different parts of code. So don't add a + header guard. */ + +#ifndef RC_INVOKED + +/* All the headers include this file. */ +#include <_mingw.h> + +#undef assert + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef NDEBUG +/* + * If not debugging, assert does nothing. + */ +#define assert(x) ((void)0) + +#else /* debugging enabled */ + +/* + * CRTDLL nicely supplies a function which does the actual output and + * call to abort. + */ +_CRTIMP void __cdecl _assert (const char*, const char*, int) __MINGW_ATTRIB_NORETURN; + +/* + * Definition of the assert macro. + */ +#define assert(e) ((e) ? (void)0 : _assert(#e, __FILE__, __LINE__)) + +#endif /* NDEBUG */ + +#ifdef __cplusplus +} +#endif + +#endif /* Not RC_INVOKED */ diff --git a/reactos/lib/mingw/include/complex.h b/reactos/lib/mingw/include/complex.h new file mode 100644 index 00000000000..2fd73a12e2c --- /dev/null +++ b/reactos/lib/mingw/include/complex.h @@ -0,0 +1,205 @@ +/* + * complex.h + * + * This file is part of the Mingw32 package. + * + * Contributors: + * Created by Danny Smith + * + * THIS SOFTWARE IS NOT COPYRIGHTED + * + * This source code is offered for use in the public domain. You may + * use, modify or distribute it freely. + * + * This code is distributed in the hope that it will be useful but + * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY + * DISCLAIMED. This includes but is not limited to warranties of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + */ + +#ifndef _COMPLEX_H_ +#define _COMPLEX_H_ + +/* All the headers include this file. */ +#include <_mingw.h> + +#if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) \ + || !defined __STRICT_ANSI__ + +/* These macros are specified by C99 standard */ + +#ifndef __cplusplus +#define complex _Complex +#endif + +#define _Complex_I (0.0F + 1.0iF) + +/* GCC doesn't support _Imaginary type yet, so we don't + define _Imaginary_I */ + +#define I _Complex_I + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef RC_INVOKED + +double __MINGW_ATTRIB_CONST creal (double _Complex); +double __MINGW_ATTRIB_CONST cimag (double _Complex); +double __MINGW_ATTRIB_CONST carg (double _Complex); +double __MINGW_ATTRIB_CONST cabs (double _Complex); +double _Complex __MINGW_ATTRIB_CONST conj (double _Complex); +double _Complex cacos (double _Complex); +double _Complex casin (double _Complex); +double _Complex catan (double _Complex); +double _Complex ccos (double _Complex); +double _Complex csin (double _Complex); +double _Complex ctan (double _Complex); +double _Complex cacosh (double _Complex); +double _Complex casinh (double _Complex); +double _Complex catanh (double _Complex); +double _Complex ccosh (double _Complex); +double _Complex csinh (double _Complex); +double _Complex ctanh (double _Complex); +double _Complex cexp (double _Complex); +double _Complex clog (double _Complex); +double _Complex cpow (double _Complex, double _Complex); +double _Complex csqrt (double _Complex); +double _Complex __MINGW_ATTRIB_CONST cproj (double _Complex); + +float __MINGW_ATTRIB_CONST crealf (float _Complex); +float __MINGW_ATTRIB_CONST cimagf (float _Complex); +float __MINGW_ATTRIB_CONST cargf (float _Complex); +float __MINGW_ATTRIB_CONST cabsf (float _Complex); +float _Complex __MINGW_ATTRIB_CONST conjf (float _Complex); +float _Complex cacosf (float _Complex); +float _Complex casinf (float _Complex); +float _Complex catanf (float _Complex); +float _Complex ccosf (float _Complex); +float _Complex csinf (float _Complex); +float _Complex ctanf (float _Complex); +float _Complex cacoshf (float _Complex); +float _Complex casinhf (float _Complex); +float _Complex catanhf (float _Complex); +float _Complex ccoshf (float _Complex); +float _Complex csinhf (float _Complex); +float _Complex ctanhf (float _Complex); +float _Complex cexpf (float _Complex); +float _Complex clogf (float _Complex); +float _Complex cpowf (float _Complex, float _Complex); +float _Complex csqrtf (float _Complex); +float _Complex __MINGW_ATTRIB_CONST cprojf (float _Complex); + +long double __MINGW_ATTRIB_CONST creall (long double _Complex); +long double __MINGW_ATTRIB_CONST cimagl (long double _Complex); +long double __MINGW_ATTRIB_CONST cargl (long double _Complex); +long double __MINGW_ATTRIB_CONST cabsl (long double _Complex); +long double _Complex __MINGW_ATTRIB_CONST conjl (long double _Complex); +long double _Complex cacosl (long double _Complex); +long double _Complex casinl (long double _Complex); +long double _Complex catanl (long double _Complex); +long double _Complex ccosl (long double _Complex); +long double _Complex csinl (long double _Complex); +long double _Complex ctanl (long double _Complex); +long double _Complex cacoshl (long double _Complex); +long double _Complex casinhl (long double _Complex); +long double _Complex catanhl (long double _Complex); +long double _Complex ccoshl (long double _Complex); +long double _Complex csinhl (long double _Complex); +long double _Complex ctanhl (long double _Complex); +long double _Complex cexpl (long double _Complex); +long double _Complex clogl (long double _Complex); +long double _Complex cpowl (long double _Complex, long double _Complex); +long double _Complex csqrtl (long double _Complex); +long double _Complex __MINGW_ATTRIB_CONST cprojl (long double _Complex); + +#ifdef __GNUC__ + +/* double */ +__CRT_INLINE double __MINGW_ATTRIB_CONST creal (double _Complex _Z) +{ + return __real__ _Z; +} + +__CRT_INLINE double __MINGW_ATTRIB_CONST cimag (double _Complex _Z) +{ + return __imag__ _Z; +} + +__CRT_INLINE double _Complex __MINGW_ATTRIB_CONST conj (double _Complex _Z) +{ + return __extension__ ~_Z; +} + +__CRT_INLINE double __MINGW_ATTRIB_CONST carg (double _Complex _Z) +{ + double res; + __asm__ ("fpatan;" + : "=t" (res) : "0" (__real__ _Z), "u" (__imag__ _Z) : "st(1)"); + return res; +} + + +/* float */ +__CRT_INLINE float __MINGW_ATTRIB_CONST crealf (float _Complex _Z) +{ + return __real__ _Z; +} + +__CRT_INLINE float __MINGW_ATTRIB_CONST cimagf (float _Complex _Z) +{ + return __imag__ _Z; +} + +__CRT_INLINE float _Complex __MINGW_ATTRIB_CONST conjf (float _Complex _Z) +{ + return __extension__ ~_Z; +} + +__CRT_INLINE float __MINGW_ATTRIB_CONST cargf (float _Complex _Z) +{ + float res; + __asm__ ("fpatan;" + : "=t" (res) : "0" (__real__ _Z), "u" (__imag__ _Z) : "st(1)"); + return res; +} + +/* long double */ +__CRT_INLINE long double __MINGW_ATTRIB_CONST creall (long double _Complex _Z) +{ + return __real__ _Z; +} + +__CRT_INLINE long double __MINGW_ATTRIB_CONST cimagl (long double _Complex _Z) +{ + return __imag__ _Z; +} + +__CRT_INLINE long double _Complex __MINGW_ATTRIB_CONST conjl (long double _Complex _Z) +{ + return __extension__ ~_Z; +} + +__CRT_INLINE long double __MINGW_ATTRIB_CONST cargl (long double _Complex _Z) +{ + long double res; + __asm__ ("fpatan;" + : "=t" (res) : "0" (__real__ _Z), "u" (__imag__ _Z) : "st(1)"); + return res; +} + +#endif /* __GNUC__ */ + + +#endif /* RC_INVOKED */ + +#ifdef __cplusplus +} +#endif + +#endif /* __STDC_VERSION__ >= 199901L */ + + +#endif /* _COMPLEX_H */ diff --git a/reactos/lib/mingw/include/conio.h b/reactos/lib/mingw/include/conio.h new file mode 100644 index 00000000000..a60ed85b201 --- /dev/null +++ b/reactos/lib/mingw/include/conio.h @@ -0,0 +1,53 @@ +/* + * conio.h + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + * Low level console I/O functions. Pretty please try to use the ANSI + * standard ones if you are writing new code. + * + */ + +#ifndef _CONIO_H_ +#define _CONIO_H_ + +/* All the headers include this file. */ +#include <_mingw.h> + +#ifndef RC_INVOKED + +#ifdef __cplusplus +extern "C" { +#endif + +_CRTIMP char* __cdecl _cgets (char*); +_CRTIMP int __cdecl _cprintf (const char*, ...); +_CRTIMP int __cdecl _cputs (const char*); +_CRTIMP int __cdecl _cscanf (char*, ...); + +_CRTIMP int __cdecl _getch (void); +_CRTIMP int __cdecl _getche (void); +_CRTIMP int __cdecl _kbhit (void); +_CRTIMP int __cdecl _putch (int); +_CRTIMP int __cdecl _ungetch (int); + + +#ifndef _NO_OLDNAMES + +_CRTIMP int __cdecl getch (void); +_CRTIMP int __cdecl getche (void); +_CRTIMP int __cdecl kbhit (void); +_CRTIMP int __cdecl putch (int); +_CRTIMP int __cdecl ungetch (int); + +#endif /* Not _NO_OLDNAMES */ + + +#ifdef __cplusplus +} +#endif + +#endif /* Not RC_INVOKED */ + +#endif /* Not _CONIO_H_ */ diff --git a/reactos/lib/mingw/include/ctype.h b/reactos/lib/mingw/include/ctype.h new file mode 100644 index 00000000000..f4020afdf0e --- /dev/null +++ b/reactos/lib/mingw/include/ctype.h @@ -0,0 +1,247 @@ +/* + * ctype.h + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + * Functions for testing character types and converting characters. + * + */ + +#ifndef _CTYPE_H_ +#define _CTYPE_H_ + +/* All the headers include this file. */ +#include <_mingw.h> + +#define __need_wchar_t +#define __need_wint_t +#ifndef RC_INVOKED +#include +#endif /* Not RC_INVOKED */ + + +/* + * The following flags are used to tell iswctype and _isctype what character + * types you are looking for. + */ +#define _UPPER 0x0001 +#define _LOWER 0x0002 +#define _DIGIT 0x0004 +#define _SPACE 0x0008 /* HT LF VT FF CR SP */ +#define _PUNCT 0x0010 +#define _CONTROL 0x0020 +#define _BLANK 0x0040 /* this is SP only, not SP and HT as in C99 */ +#define _HEX 0x0080 +#define _LEADBYTE 0x8000 + +#define _ALPHA 0x0103 + +#ifndef RC_INVOKED + +#ifdef __cplusplus +extern "C" { +#endif + +_CRTIMP int __cdecl isalnum(int); +_CRTIMP int __cdecl isalpha(int); +_CRTIMP int __cdecl iscntrl(int); +_CRTIMP int __cdecl isdigit(int); +_CRTIMP int __cdecl isgraph(int); +_CRTIMP int __cdecl islower(int); +_CRTIMP int __cdecl isprint(int); +_CRTIMP int __cdecl ispunct(int); +_CRTIMP int __cdecl isspace(int); +_CRTIMP int __cdecl isupper(int); +_CRTIMP int __cdecl isxdigit(int); + +#ifndef __STRICT_ANSI__ +_CRTIMP int __cdecl _isctype (int, int); +#endif + +/* These are the ANSI versions, with correct checking of argument */ +_CRTIMP int __cdecl tolower(int); +_CRTIMP int __cdecl toupper(int); + +/* + * NOTE: The above are not old name type wrappers, but functions exported + * explicitly by MSVCRT/CRTDLL. However, underscored versions are also + * exported. + */ +#ifndef __STRICT_ANSI__ +/* + * These are the cheap non-std versions: The return values are undefined + * if the argument is not ASCII char or is not of appropriate case + */ +_CRTIMP int __cdecl _tolower(int); +_CRTIMP int __cdecl _toupper(int); +#endif + +/* Also defined in stdlib.h */ +#ifndef MB_CUR_MAX +#ifdef __DECLSPEC_SUPPORTED +# ifdef __MSVCRT__ +# define MB_CUR_MAX __mb_cur_max + __MINGW_IMPORT int __mb_cur_max; +# else /* not __MSVCRT */ +# define MB_CUR_MAX __mb_cur_max_dll + __MINGW_IMPORT int __mb_cur_max_dll; +# endif /* not __MSVCRT */ + +#else /* ! __DECLSPEC_SUPPORTED */ +# ifdef __MSVCRT__ + extern int* _imp____mbcur_max; +# define MB_CUR_MAX (*_imp____mb_cur_max) +# else /* not __MSVCRT */ + extern int* _imp____mbcur_max_dll; +# define MB_CUR_MAX (*_imp____mb_cur_max_dll) +# endif /* not __MSVCRT */ +#endif /* __DECLSPEC_SUPPORTED */ +#endif /* MB_CUR_MAX */ + + +#ifdef __DECLSPEC_SUPPORTED +__MINGW_IMPORT unsigned short _ctype[]; +# ifdef __MSVCRT__ + __MINGW_IMPORT unsigned short* _pctype; +# else /* CRTDLL */ + __MINGW_IMPORT unsigned short* _pctype_dll; +# define _pctype _pctype_dll +# endif + +#else /* __DECLSPEC_SUPPORTED */ +extern unsigned short** _imp___ctype; +#define _ctype (*_imp___ctype) +# ifdef __MSVCRT__ + extern unsigned short** _imp___pctype; +# define _pctype (*_imp___pctype) +# else /* CRTDLL */ + extern unsigned short** _imp___pctype_dll; +# define _pctype (*_imp___pctype_dll) +# endif /* CRTDLL */ +#endif /* __DECLSPEC_SUPPORTED */ + +/* + * Use inlines here rather than macros, because macros will upset + * C++ usage (eg, ::isalnum), and so usually get undefined + * + * According to standard for SB chars, these function are defined only + * for input values representable by unsigned char or EOF. + * Thus, there is no range test. + * This reproduces behaviour of MSVCRT.dll lib implemention for SB chars. + * + * If no MB char support is needed, these can be simplified even + * more by command line define -DMB_CUR_MAX=1. The compiler will then + * optimise away the constant condition. + */ + + +#if ! (defined (__NO_INLINE__) || defined (__NO_CTYPE_INLINES) \ + || defined (__STRICT_ANSI__ )) +/* use simple lookup if SB locale, else _isctype() */ +#define __ISCTYPE(c, mask) (MB_CUR_MAX == 1 ? (_pctype[c] & mask) : _isctype(c, mask)) +__CRT_INLINE int __cdecl isalnum(int c) {return __ISCTYPE(c, (_ALPHA|_DIGIT));} +__CRT_INLINE int __cdecl isalpha(int c) {return __ISCTYPE(c, _ALPHA);} +__CRT_INLINE int __cdecl iscntrl(int c) {return __ISCTYPE(c, _CONTROL);} +__CRT_INLINE int __cdecl isdigit(int c) {return __ISCTYPE(c, _DIGIT);} +__CRT_INLINE int __cdecl isgraph(int c) {return __ISCTYPE(c, (_PUNCT|_ALPHA|_DIGIT));} +__CRT_INLINE int __cdecl islower(int c) {return __ISCTYPE(c, _LOWER);} +__CRT_INLINE int __cdecl isprint(int c) {return __ISCTYPE(c, (_BLANK|_PUNCT|_ALPHA|_DIGIT));} +__CRT_INLINE int __cdecl ispunct(int c) {return __ISCTYPE(c, _PUNCT);} +__CRT_INLINE int __cdecl isspace(int c) {return __ISCTYPE(c, _SPACE);} +__CRT_INLINE int __cdecl isupper(int c) {return __ISCTYPE(c, _UPPER);} +__CRT_INLINE int __cdecl isxdigit(int c) {return __ISCTYPE(c, _HEX);} + +/* these reproduce behaviour of lib underscored versions */ +__CRT_INLINE int __cdecl _tolower(int c) {return ( c -'A'+'a');} +__CRT_INLINE int __cdecl _toupper(int c) {return ( c -'a'+'A');} + +/* TODO? Is it worth inlining ANSI tolower, toupper? Probably only + if we only want C-locale. */ + +#endif /* _NO_CTYPE_INLINES */ + +/* Wide character equivalents */ + +#ifndef WEOF +#define WEOF (wchar_t)(0xFFFF) +#endif + +#ifndef _WCTYPE_T_DEFINED +typedef wchar_t wctype_t; +#define _WCTYPE_T_DEFINED +#endif + +_CRTIMP int __cdecl iswalnum(wint_t); +_CRTIMP int __cdecl iswalpha(wint_t); +_CRTIMP int __cdecl iswascii(wint_t); +_CRTIMP int __cdecl iswcntrl(wint_t); +_CRTIMP int __cdecl iswctype(wint_t, wctype_t); +_CRTIMP int __cdecl is_wctype(wint_t, wctype_t); /* Obsolete! */ +_CRTIMP int __cdecl iswdigit(wint_t); +_CRTIMP int __cdecl iswgraph(wint_t); +_CRTIMP int __cdecl iswlower(wint_t); +_CRTIMP int __cdecl iswprint(wint_t); +_CRTIMP int __cdecl iswpunct(wint_t); +_CRTIMP int __cdecl iswspace(wint_t); +_CRTIMP int __cdecl iswupper(wint_t); +_CRTIMP int __cdecl iswxdigit(wint_t); + +/* Older MS docs uses wchar_t for arg and return type, while newer + online MS docs say arg is wint_t and return is int. + ISO C uses wint_t for both. */ +_CRTIMP wint_t __cdecl towlower (wint_t); +_CRTIMP wint_t __cdecl towupper (wint_t); + +_CRTIMP int __cdecl isleadbyte (int); + +/* Also in wctype.h */ +#if ! (defined (__NO_INLINE__) || defined(__NO_CTYPE_INLINES) \ + || defined(__WCTYPE_INLINES_DEFINED)) +#define __WCTYPE_INLINES_DEFINED +__CRT_INLINE int __cdecl iswalnum(wint_t wc) {return (iswctype(wc,_ALPHA|_DIGIT));} +__CRT_INLINE int __cdecl iswalpha(wint_t wc) {return (iswctype(wc,_ALPHA));} +__CRT_INLINE int __cdecl iswascii(wint_t wc) {return ((wc & ~0x7F) ==0);} +__CRT_INLINE int __cdecl iswcntrl(wint_t wc) {return (iswctype(wc,_CONTROL));} +__CRT_INLINE int __cdecl iswdigit(wint_t wc) {return (iswctype(wc,_DIGIT));} +__CRT_INLINE int __cdecl iswgraph(wint_t wc) {return (iswctype(wc,_PUNCT|_ALPHA|_DIGIT));} +__CRT_INLINE int __cdecl iswlower(wint_t wc) {return (iswctype(wc,_LOWER));} +__CRT_INLINE int __cdecl iswprint(wint_t wc) {return (iswctype(wc,_BLANK|_PUNCT|_ALPHA|_DIGIT));} +__CRT_INLINE int __cdecl iswpunct(wint_t wc) {return (iswctype(wc,_PUNCT));} +__CRT_INLINE int __cdecl iswspace(wint_t wc) {return (iswctype(wc,_SPACE));} +__CRT_INLINE int __cdecl iswupper(wint_t wc) {return (iswctype(wc,_UPPER));} +__CRT_INLINE int __cdecl iswxdigit(wint_t wc) {return (iswctype(wc,_HEX));} +__CRT_INLINE int __cdecl isleadbyte(int c) {return (_pctype[(unsigned char)(c)] & _LEADBYTE);} +#endif /* !(defined(__NO_CTYPE_INLINES) || defined(__WCTYPE_INLINES_DEFINED)) */ + +#ifndef __STRICT_ANSI__ +int __cdecl __isascii (int); +int __cdecl __toascii (int); +int __cdecl __iscsymf (int); /* Valid first character in C symbol */ +int __cdecl __iscsym (int); /* Valid character in C symbol (after first) */ + +#if !(defined (__NO_INLINE__) || defined (__NO_CTYPE_INLINES)) +__CRT_INLINE int __cdecl __isascii(int c) {return ((c & ~0x7F) == 0);} +__CRT_INLINE int __cdecl __toascii(int c) {return (c & 0x7F);} +__CRT_INLINE int __cdecl __iscsymf(int c) {return (isalpha(c) || (c == '_'));} +__CRT_INLINE int __cdecl __iscsym(int c) {return (isalnum(c) || (c == '_'));} +#endif /* __NO_CTYPE_INLINES */ + +#ifndef _NO_OLDNAMES +/* Not _CRTIMP */ +int __cdecl isascii (int); +int __cdecl toascii (int); +int __cdecl iscsymf (int); +int __cdecl iscsym (int); +#endif /* Not _NO_OLDNAMES */ + +#endif /* Not __STRICT_ANSI__ */ + +#ifdef __cplusplus +} +#endif + +#endif /* Not RC_INVOKED */ + +#endif /* Not _CTYPE_H_ */ + diff --git a/reactos/lib/mingw/include/dir.h b/reactos/lib/mingw/include/dir.h new file mode 100644 index 00000000000..d759a0a61bb --- /dev/null +++ b/reactos/lib/mingw/include/dir.h @@ -0,0 +1,26 @@ +/* + * dir.h + * + * This file OBSOLESCENT and only provided for backward compatibility. + * Please use io.h instead. + * + * This file is part of the Mingw32 package. + * + * Contributors: + * Created by Colin Peters + * Mumit Khan + * + * THIS SOFTWARE IS NOT COPYRIGHTED + * + * This source code is offered for use in the public domain. You may + * use, modify or distribute it freely. + * + * This code is distributed in the hope that it will be useful but + * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY + * DISCLAIMED. This includes but is not limited to warranties of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + */ + +#include + diff --git a/reactos/lib/mingw/include/direct.h b/reactos/lib/mingw/include/direct.h new file mode 100644 index 00000000000..cf446627936 --- /dev/null +++ b/reactos/lib/mingw/include/direct.h @@ -0,0 +1,73 @@ +/* + * direct.h + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + * Functions for manipulating paths and directories (included from io.h) + * plus functions for setting the current drive. + * + */ +#ifndef _DIRECT_H_ +#define _DIRECT_H_ + +/* All the headers include this file. */ +#include <_mingw.h> + +#define __need_wchar_t +#ifndef RC_INVOKED +#include +#endif /* Not RC_INVOKED */ + +#include + +#ifndef RC_INVOKED + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef _DISKFREE_T_DEFINED +/* needed by _getdiskfree (also in dos.h) */ +struct _diskfree_t { + unsigned total_clusters; + unsigned avail_clusters; + unsigned sectors_per_cluster; + unsigned bytes_per_sector; +}; +#define _DISKFREE_T_DEFINED +#endif + +/* + * You really shouldn't be using these. Use the Win32 API functions instead. + * However, it does make it easier to port older code. + */ +_CRTIMP int __cdecl _getdrive (void); +_CRTIMP unsigned long __cdecl _getdrives(void); +_CRTIMP int __cdecl _chdrive (int); +_CRTIMP char* __cdecl _getdcwd (int, char*, int); +_CRTIMP unsigned __cdecl _getdiskfree (unsigned, struct _diskfree_t *); + +#ifndef _NO_OLDNAMES +# define diskfree_t _diskfree_t +#endif + +#ifndef _WDIRECT_DEFINED +/* wide character versions. Also in wchar.h */ +#ifdef __MSVCRT__ +_CRTIMP int __cdecl _wchdir(const wchar_t*); +_CRTIMP wchar_t* __cdecl _wgetcwd(wchar_t*, int); +_CRTIMP wchar_t* __cdecl _wgetdcwd(int, wchar_t*, int); +_CRTIMP int __cdecl _wmkdir(const wchar_t*); +_CRTIMP int __cdecl _wrmdir(const wchar_t*); +#endif /* __MSVCRT__ */ +#define _WDIRECT_DEFINED +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* Not RC_INVOKED */ + +#endif /* Not _DIRECT_H_ */ diff --git a/reactos/lib/mingw/include/dirent.h b/reactos/lib/mingw/include/dirent.h new file mode 100644 index 00000000000..a18cbcab902 --- /dev/null +++ b/reactos/lib/mingw/include/dirent.h @@ -0,0 +1,123 @@ +/* + * DIRENT.H (formerly DIRLIB.H) + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + */ +#ifndef _DIRENT_H_ +#define _DIRENT_H_ + +/* All the headers include this file. */ +#include <_mingw.h> + +#include + +#ifndef RC_INVOKED + +#ifdef __cplusplus +extern "C" { +#endif + +struct dirent +{ + long d_ino; /* Always zero. */ + unsigned short d_reclen; /* Always zero. */ + unsigned short d_namlen; /* Length of name in d_name. */ + char d_name[FILENAME_MAX]; /* File name. */ +}; + +/* + * This is an internal data structure. Good programmers will not use it + * except as an argument to one of the functions below. + * dd_stat field is now int (was short in older versions). + */ +typedef struct +{ + /* disk transfer area for this dir */ + struct _finddata_t dd_dta; + + /* dirent struct to return from dir (NOTE: this makes this thread + * safe as long as only one thread uses a particular DIR struct at + * a time) */ + struct dirent dd_dir; + + /* _findnext handle */ + long dd_handle; + + /* + * Status of search: + * 0 = not started yet (next entry to read is first entry) + * -1 = off the end + * positive = 0 based index of next entry + */ + int dd_stat; + + /* given path for dir with search pattern (struct is extended) */ + char dd_name[1]; +} DIR; + +DIR* __cdecl opendir (const char*); +struct dirent* __cdecl readdir (DIR*); +int __cdecl closedir (DIR*); +void __cdecl rewinddir (DIR*); +long __cdecl telldir (DIR*); +void __cdecl seekdir (DIR*, long); + + +/* wide char versions */ + +struct _wdirent +{ + long d_ino; /* Always zero. */ + unsigned short d_reclen; /* Always zero. */ + unsigned short d_namlen; /* Length of name in d_name. */ + wchar_t d_name[FILENAME_MAX]; /* File name. */ +}; + +/* + * This is an internal data structure. Good programmers will not use it + * except as an argument to one of the functions below. + */ +typedef struct +{ + /* disk transfer area for this dir */ + struct _wfinddata_t dd_dta; + + /* dirent struct to return from dir (NOTE: this makes this thread + * safe as long as only one thread uses a particular DIR struct at + * a time) */ + struct _wdirent dd_dir; + + /* _findnext handle */ + long dd_handle; + + /* + * Status of search: + * 0 = not started yet (next entry to read is first entry) + * -1 = off the end + * positive = 0 based index of next entry + */ + int dd_stat; + + /* given path for dir with search pattern (struct is extended) */ + wchar_t dd_name[1]; +} _WDIR; + + + +_WDIR* __cdecl _wopendir (const wchar_t*); +struct _wdirent* __cdecl _wreaddir (_WDIR*); +int __cdecl _wclosedir (_WDIR*); +void __cdecl _wrewinddir (_WDIR*); +long __cdecl _wtelldir (_WDIR*); +void __cdecl _wseekdir (_WDIR*, long); + + +#ifdef __cplusplus +} +#endif + +#endif /* Not RC_INVOKED */ + +#endif /* Not _DIRENT_H_ */ diff --git a/reactos/lib/mingw/include/dos.h b/reactos/lib/mingw/include/dos.h new file mode 100644 index 00000000000..b3aa9aeffd8 --- /dev/null +++ b/reactos/lib/mingw/include/dos.h @@ -0,0 +1,89 @@ +/* + * dos.h + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + * DOS-specific functions and structures. + * + */ + +#ifndef _DOS_H_ +#define _DOS_H_ + +/* All the headers include this file. */ +#include <_mingw.h> + +#define __need_wchar_t +#ifndef RC_INVOKED +#include +#endif /* Not RC_INVOKED */ + +/* For DOS file attributes */ +#include + +#ifndef RC_INVOKED + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef __MSVCRT__ /* these are in CRTDLL, but not MSVCRT */ +#ifndef __DECLSPEC_SUPPORTED +extern unsigned int *_imp___basemajor_dll; +extern unsigned int *_imp___baseminor_dll; +extern unsigned int *_imp___baseversion_dll; +extern unsigned int *_imp___osmajor_dll; +extern unsigned int *_imp___osminor_dll; +extern unsigned int *_imp___osmode_dll; + +#define _basemajor (*_imp___basemajor_dll) +#define _baseminor (*_imp___baseminor_dll) +#define _baseversion (*_imp___baseversion_dll) +#define _osmajor (*_imp___osmajor_dll) +#define _osminor (*_imp___osminor_dll) +#define _osmode (*_imp___osmode_dll) + +#else /* __DECLSPEC_SUPPORTED */ + +__MINGW_IMPORT unsigned int _basemajor_dll; +__MINGW_IMPORT unsigned int _baseminor_dll; +__MINGW_IMPORT unsigned int _baseversion_dll; +__MINGW_IMPORT unsigned int _osmajor_dll; +__MINGW_IMPORT unsigned int _osminor_dll; +__MINGW_IMPORT unsigned int _osmode_dll; + +#define _basemajor _basemajor_dll +#define _baseminor _baseminor_dll +#define _baseversion _baseversion_dll +#define _osmajor _osmajor_dll +#define _osminor _osminor_dll +#define _osmode _osmode_dll + +#endif /* __DECLSPEC_SUPPORTED */ +#endif /* ! __MSVCRT__ */ + +#ifndef _DISKFREE_T_DEFINED +/* needed by _getdiskfree (also in direct.h) */ +struct _diskfree_t { + unsigned total_clusters; + unsigned avail_clusters; + unsigned sectors_per_cluster; + unsigned bytes_per_sector; +}; +#define _DISKFREE_T_DEFINED +#endif + +_CRTIMP unsigned __cdecl _getdiskfree (unsigned, struct _diskfree_t *); + +#ifndef _NO_OLDNAMES +# define diskfree_t _diskfree_t +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* Not RC_INVOKED */ + +#endif /* Not _DOS_H_ */ diff --git a/reactos/lib/mingw/include/errno.h b/reactos/lib/mingw/include/errno.h new file mode 100644 index 00000000000..f9f709c6584 --- /dev/null +++ b/reactos/lib/mingw/include/errno.h @@ -0,0 +1,101 @@ +/* + * errno.h + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + * Error numbers and access to error reporting. + * + */ + +#ifndef _ERRNO_H_ +#define _ERRNO_H_ + +/* All the headers include this file. */ +#include <_mingw.h> + +/* + * Error numbers. + * TODO: Can't be sure of some of these assignments, I guessed from the + * names given by strerror and the defines in the Cygnus errno.h. A lot + * of the names from the Cygnus errno.h are not represented, and a few + * of the descriptions returned by strerror do not obviously match + * their error naming. + */ +#define EPERM 1 /* Operation not permitted */ +#define ENOFILE 2 /* No such file or directory */ +#define ENOENT 2 +#define ESRCH 3 /* No such process */ +#define EINTR 4 /* Interrupted function call */ +#define EIO 5 /* Input/output error */ +#define ENXIO 6 /* No such device or address */ +#define E2BIG 7 /* Arg list too long */ +#define ENOEXEC 8 /* Exec format error */ +#define EBADF 9 /* Bad file descriptor */ +#define ECHILD 10 /* No child processes */ +#define EAGAIN 11 /* Resource temporarily unavailable */ +#define ENOMEM 12 /* Not enough space */ +#define EACCES 13 /* Permission denied */ +#define EFAULT 14 /* Bad address */ +/* 15 - Unknown Error */ +#define EBUSY 16 /* strerror reports "Resource device" */ +#define EEXIST 17 /* File exists */ +#define EXDEV 18 /* Improper link (cross-device link?) */ +#define ENODEV 19 /* No such device */ +#define ENOTDIR 20 /* Not a directory */ +#define EISDIR 21 /* Is a directory */ +#define EINVAL 22 /* Invalid argument */ +#define ENFILE 23 /* Too many open files in system */ +#define EMFILE 24 /* Too many open files */ +#define ENOTTY 25 /* Inappropriate I/O control operation */ +/* 26 - Unknown Error */ +#define EFBIG 27 /* File too large */ +#define ENOSPC 28 /* No space left on device */ +#define ESPIPE 29 /* Invalid seek (seek on a pipe?) */ +#define EROFS 30 /* Read-only file system */ +#define EMLINK 31 /* Too many links */ +#define EPIPE 32 /* Broken pipe */ +#define EDOM 33 /* Domain error (math functions) */ +#define ERANGE 34 /* Result too large (possibly too small) */ +/* 35 - Unknown Error */ +#define EDEADLOCK 36 /* Resource deadlock avoided (non-Cyg) */ +#define EDEADLK 36 +/* 37 - Unknown Error */ +#define ENAMETOOLONG 38 /* Filename too long (91 in Cyg?) */ +#define ENOLCK 39 /* No locks available (46 in Cyg?) */ +#define ENOSYS 40 /* Function not implemented (88 in Cyg?) */ +#define ENOTEMPTY 41 /* Directory not empty (90 in Cyg?) */ +#define EILSEQ 42 /* Illegal byte sequence */ + +/* + * NOTE: ENAMETOOLONG and ENOTEMPTY conflict with definitions in the + * sockets.h header provided with windows32api-0.1.2. + * You should go and put an #if 0 ... #endif around the whole block + * of errors (look at the comment above them). + */ + +#ifndef RC_INVOKED + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Definitions of errno. For _doserrno, sys_nerr and * sys_errlist, see + * stdlib.h. + */ +#ifdef _UWIN +#undef errno +extern int errno; +#else +_CRTIMP int* __cdecl _errno(void); +#define errno (*_errno()) +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* Not RC_INVOKED */ + +#endif /* Not _ERRNO_H_ */ diff --git a/reactos/lib/mingw/include/excpt.h b/reactos/lib/mingw/include/excpt.h new file mode 100644 index 00000000000..d46a1d93c7a --- /dev/null +++ b/reactos/lib/mingw/include/excpt.h @@ -0,0 +1,102 @@ +/* + * excpt.h + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + * Support for operating system level structured exception handling. + * + * NOTE: This is very preliminary stuff. I am also pretty sure it is + * completely Intel specific. + * + */ + +#ifndef _EXCPT_H_ +#define _EXCPT_H_ + +/* All the headers include this file. */ +#include <_mingw.h> + +#include + +/* + * NOTE: The constants structs and typedefs below should be defined in the + * Win32 API headers. + */ +#define EH_NONCONTINUABLE 0x01 +#define EH_UNWINDING 0x02 +#define EH_EXIT_UNWIND 0x04 +#define EH_STACK_INVALID 0x08 +#define EH_NESTED_CALL 0x10 + +#ifndef RC_INVOKED + +typedef enum { + ExceptionContinueExecution, + ExceptionContinueSearch, + ExceptionNestedException, + ExceptionCollidedUnwind +} EXCEPTION_DISPOSITION; + + +/* + * End of stuff that should be in the Win32 API files. + */ + + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * The type of function that is expected as an exception handler to be + * installed with _try1. + */ +typedef EXCEPTION_DISPOSITION (*PEXCEPTION_HANDLER) + (struct _EXCEPTION_RECORD*, void*, struct _CONTEXT*, void*); + +/* + * This is not entirely necessary, but it is the structure installed by + * the _try1 primitive below. + */ +typedef struct _EXCEPTION_REGISTRATION +{ + struct _EXCEPTION_REGISTRATION* prev; + PEXCEPTION_HANDLER handler; +} EXCEPTION_REGISTRATION, *PEXCEPTION_REGISTRATION; + +typedef EXCEPTION_REGISTRATION EXCEPTION_REGISTRATION_RECORD; +typedef PEXCEPTION_REGISTRATION PEXCEPTION_REGISTRATION_RECORD; + +/* + * A macro which installs the supplied exception handler. + * Push the pointer to the new handler onto the stack, + * then push the pointer to the old registration structure (at fs:0) + * onto the stack, then put a pointer to the new registration + * structure (i.e. the current stack pointer) at fs:0. + */ +#define __try1(pHandler) \ + __asm__ ("pushl %0;pushl %%fs:0;movl %%esp,%%fs:0;" : : "g" (pHandler)); + +/* + * A macro which (despite its name) *removes* an installed + * exception handler. Should be used only in conjunction with the above + * install routine __try1. + * Move the pointer to the old reg. struct (at the current stack + * position) to fs:0, replacing the pointer we installed above, + * then add 8 to the stack pointer to get rid of the space we + * used when we pushed on our new reg. struct above. Notice that + * the stack must be in the exact state at this point that it was + * after we did _try1 or this will smash things. + */ +#define __except1 \ + __asm__ ("movl (%%esp),%%eax;movl %%eax,%%fs:0;addl $8,%%esp;" \ + : : : "%eax"); + +#ifdef __cplusplus +} +#endif + +#endif /* Not RC_INVOKED */ + +#endif /* _EXCPT_H_ not defined */ diff --git a/reactos/lib/mingw/include/fcntl.h b/reactos/lib/mingw/include/fcntl.h new file mode 100644 index 00000000000..e62d15950fc --- /dev/null +++ b/reactos/lib/mingw/include/fcntl.h @@ -0,0 +1,69 @@ +/* + * fcntl.h + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + * Access constants for _open. Note that the permissions constants are + * in sys/stat.h (ick). + * + */ +#ifndef _FCNTL_H_ +#define _FCNTL_H_ + +/* All the headers include this file. */ +#include <_mingw.h> + +/* + * It appears that fcntl.h should include io.h for compatibility... + */ +#include + +/* Specifiy one of these flags to define the access mode. */ +#define _O_RDONLY 0 +#define _O_WRONLY 1 +#define _O_RDWR 2 + +/* Mask for access mode bits in the _open flags. */ +#define _O_ACCMODE (_O_RDONLY|_O_WRONLY|_O_RDWR) + +#define _O_APPEND 0x0008 /* Writes will add to the end of the file. */ + +#define _O_RANDOM 0x0010 +#define _O_SEQUENTIAL 0x0020 +#define _O_TEMPORARY 0x0040 /* Make the file dissappear after closing. + * WARNING: Even if not created by _open! */ +#define _O_NOINHERIT 0x0080 + +#define _O_CREAT 0x0100 /* Create the file if it does not exist. */ +#define _O_TRUNC 0x0200 /* Truncate the file if it does exist. */ +#define _O_EXCL 0x0400 /* Open only if the file does not exist. */ + +#define _O_SHORT_LIVED 0x1000 + +/* NOTE: Text is the default even if the given _O_TEXT bit is not on. */ +#define _O_TEXT 0x4000 /* CR-LF in file becomes LF in memory. */ +#define _O_BINARY 0x8000 /* Input and output is not translated. */ +#define _O_RAW _O_BINARY + +#ifndef _NO_OLDNAMES + +/* POSIX/Non-ANSI names for increased portability */ +#define O_RDONLY _O_RDONLY +#define O_WRONLY _O_WRONLY +#define O_RDWR _O_RDWR +#define O_ACCMODE _O_ACCMODE +#define O_APPEND _O_APPEND +#define O_CREAT _O_CREAT +#define O_TRUNC _O_TRUNC +#define O_EXCL _O_EXCL +#define O_TEXT _O_TEXT +#define O_BINARY _O_BINARY +#define O_TEMPORARY _O_TEMPORARY +#define O_NOINHERIT _O_NOINHERIT +#define O_SEQUENTIAL _O_SEQUENTIAL +#define O_RANDOM _O_RANDOM + +#endif /* Not _NO_OLDNAMES */ + +#endif /* Not _FCNTL_H_ */ diff --git a/reactos/lib/mingw/include/fenv.h b/reactos/lib/mingw/include/fenv.h new file mode 100644 index 00000000000..5a2270289e6 --- /dev/null +++ b/reactos/lib/mingw/include/fenv.h @@ -0,0 +1,105 @@ +#ifndef _FENV_H_ +#define _FENV_H_ + +/* FPU status word exception flags */ +#define FE_INVALID 0x01 +#define FE_DENORMAL 0x02 +#define FE_DIVBYZERO 0x04 +#define FE_OVERFLOW 0x08 +#define FE_UNDERFLOW 0x10 +#define FE_INEXACT 0x20 +#define FE_ALL_EXCEPT (FE_INVALID | FE_DENORMAL | FE_DIVBYZERO \ + | FE_OVERFLOW | FE_UNDERFLOW | FE_INEXACT) + +/* FPU control word rounding flags */ +#define FE_TONEAREST 0x0000 +#define FE_DOWNWARD 0x0400 +#define FE_UPWARD 0x0800 +#define FE_TOWARDZERO 0x0c00 + +/* The MXCSR exception flags are the same as the + FE flags. */ +#define __MXCSR_EXCEPT_FLAG_SHIFT 0 + +/* How much to shift FE status word exception flags + to get the MXCSR exeptions masks, */ +#define __MXCSR_EXCEPT_MASK_SHIFT 7 + +/* How much to shift FE control word rounding flags + to get MXCSR rounding flags, */ +#define __MXCSR_ROUND_FLAG_SHIFT 3 + +#ifndef RC_INVOKED +/* + For now, support only for the basic abstraction of flags that are + either set or clear. fexcept_t could be structure that holds more + info about the fp environment. +*/ +typedef unsigned short fexcept_t; + +/* This 32-byte struct represents the entire floating point + environment as stored by fnstenv or fstenv, augmented by + the contents of the MXCSR register, as stored by stmxcsr + (if CPU supports it). */ +typedef struct +{ + unsigned short __control_word; + unsigned short __unused0; + unsigned short __status_word; + unsigned short __unused1; + unsigned short __tag_word; + unsigned short __unused2; + unsigned int __ip_offset; /* instruction pointer offset */ + unsigned short __ip_selector; + unsigned short __opcode; + unsigned int __data_offset; + unsigned short __data_selector; + unsigned short __unused3; + unsigned int __mxcsr; /* contents of the MXCSR register */ +} fenv_t; + + +/*The C99 standard (7.6.9) allows us to define implementation-specific macros for + different fp environments */ + +/* The default Intel x87 floating point environment (64-bit mantissa) */ +#define FE_PC64_ENV ((const fenv_t *)-1) + +/* The floating point environment set by MSVCRT _fpreset (53-bit mantissa) */ +#define FE_PC53_ENV ((const fenv_t *)-2) + +/* The FE_DFL_ENV macro is required by standard. + fesetenv will use the environment set at app startup.*/ +#define FE_DFL_ENV ((const fenv_t *) 0) + +#ifdef __cplusplus +extern "C" { +#endif + +/*TODO: Some of these could be inlined */ +/* 7.6.2 Exception */ + +extern int __cdecl feclearexcept (int); +extern int __cdecl fegetexceptflag (fexcept_t * flagp, int excepts); +extern int __cdecl feraiseexcept (int excepts ); +extern int __cdecl fesetexceptflag (const fexcept_t *, int); +extern int __cdecl fetestexcept (int excepts); + +/* 7.6.3 Rounding */ + +extern int __cdecl fegetround (void); +extern int __cdecl fesetround (int mode); + +/* 7.6.4 Environment */ + +extern int __cdecl fegetenv (fenv_t * envp); +extern int __cdecl fesetenv (const fenv_t * ); +extern int __cdecl feupdateenv (const fenv_t *); +extern int __cdecl feholdexcept (fenv_t *); + +#ifdef __cplusplus +} +#endif +#endif /* Not RC_INVOKED */ + +#endif /* ndef _FENV_H */ diff --git a/reactos/lib/mingw/include/float.h b/reactos/lib/mingw/include/float.h new file mode 100644 index 00000000000..53bfb34dbdf --- /dev/null +++ b/reactos/lib/mingw/include/float.h @@ -0,0 +1,152 @@ +/* + * float.h + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + * Constants related to floating point arithmetic. + * + * Also included here are some non-ANSI bits for accessing the floating + * point controller. + * + * NOTE: GCC provides float.h, but it doesn't include the non-standard + * stuff for accessing the fp controller. We include_next the + * GCC-supplied header and just define the MS-specific extensions + * here. + * + */ + +#include_next + +#ifndef _MINGW_FLOAT_H_ +#define _MINGW_FLOAT_H_ + +/* All the headers include this file. */ +#include <_mingw.h> + +/* + * Functions and definitions for controlling the FPU. + */ +#ifndef __STRICT_ANSI__ + +/* TODO: These constants are only valid for x86 machines */ + +/* Control word masks for unMask */ +#define _MCW_EM 0x0008001F /* Error masks */ +#define _MCW_IC 0x00040000 /* Infinity */ +#define _MCW_RC 0x00000300 /* Rounding */ +#define _MCW_PC 0x00030000 /* Precision */ + +/* Control word values for unNew (use with related unMask above) */ +#define _EM_INVALID 0x00000010 +#define _EM_DENORMAL 0x00080000 +#define _EM_ZERODIVIDE 0x00000008 +#define _EM_OVERFLOW 0x00000004 +#define _EM_UNDERFLOW 0x00000002 +#define _EM_INEXACT 0x00000001 +#define _IC_AFFINE 0x00040000 +#define _IC_PROJECTIVE 0x00000000 +#define _RC_CHOP 0x00000300 +#define _RC_UP 0x00000200 +#define _RC_DOWN 0x00000100 +#define _RC_NEAR 0x00000000 +#define _PC_24 0x00020000 +#define _PC_53 0x00010000 +#define _PC_64 0x00000000 + +/* These are also defined in Mingw math.h, needed to work around + GCC build issues. */ +/* Return values for fpclass. */ +#ifndef __MINGW_FPCLASS_DEFINED +#define __MINGW_FPCLASS_DEFINED 1 +#define _FPCLASS_SNAN 0x0001 /* Signaling "Not a Number" */ +#define _FPCLASS_QNAN 0x0002 /* Quiet "Not a Number" */ +#define _FPCLASS_NINF 0x0004 /* Negative Infinity */ +#define _FPCLASS_NN 0x0008 /* Negative Normal */ +#define _FPCLASS_ND 0x0010 /* Negative Denormal */ +#define _FPCLASS_NZ 0x0020 /* Negative Zero */ +#define _FPCLASS_PZ 0x0040 /* Positive Zero */ +#define _FPCLASS_PD 0x0080 /* Positive Denormal */ +#define _FPCLASS_PN 0x0100 /* Positive Normal */ +#define _FPCLASS_PINF 0x0200 /* Positive Infinity */ +#endif /* __MINGW_FPCLASS_DEFINED */ + +/* invalid subconditions (_SW_INVALID also set) */ +#define _SW_UNEMULATED 0x0040 /* unemulated instruction */ +#define _SW_SQRTNEG 0x0080 /* square root of a neg number */ +#define _SW_STACKOVERFLOW 0x0200 /* FP stack overflow */ +#define _SW_STACKUNDERFLOW 0x0400 /* FP stack underflow */ + +/* Floating point error signals and return codes */ +#define _FPE_INVALID 0x81 +#define _FPE_DENORMAL 0x82 +#define _FPE_ZERODIVIDE 0x83 +#define _FPE_OVERFLOW 0x84 +#define _FPE_UNDERFLOW 0x85 +#define _FPE_INEXACT 0x86 +#define _FPE_UNEMULATED 0x87 +#define _FPE_SQRTNEG 0x88 +#define _FPE_STACKOVERFLOW 0x8a +#define _FPE_STACKUNDERFLOW 0x8b +#define _FPE_EXPLICITGEN 0x8c /* raise( SIGFPE ); */ + +#ifndef RC_INVOKED + +#ifdef __cplusplus +extern "C" { +#endif + +/* Set the FPU control word as cw = (cw & ~unMask) | (unNew & unMask), + * i.e. change the bits in unMask to have the values they have in unNew, + * leaving other bits unchanged. */ +_CRTIMP unsigned int __cdecl _controlfp (unsigned int unNew, unsigned int unMask); +_CRTIMP unsigned int __cdecl _control87 (unsigned int unNew, unsigned int unMask); + + +_CRTIMP unsigned int __cdecl _clearfp (void); /* Clear the FPU status word */ +_CRTIMP unsigned int __cdecl _statusfp (void); /* Report the FPU status word */ +#define _clear87 _clearfp +#define _status87 _statusfp + + +/* + MSVCRT.dll _fpreset initializes the control register to 0x27f, + the status register to zero and the tag word to 0FFFFh. + This differs from asm instruction finit/fninit which set control + word to 0x37f (64 bit mantissa precison rather than 53 bit). + By default, the mingw version of _fpreset sets fp control as + per fninit. To use the MSVCRT.dll _fpreset, include CRT_fp8.o when + building your application. +*/ +void __cdecl _fpreset (void); +void __cdecl fpreset (void); + +/* Global 'variable' for the current floating point error code. */ +_CRTIMP int * __cdecl __fpecode(void); +#define _fpecode (*(__fpecode())) + +/* + * IEEE recommended functions. MS puts them in float.h + * but they really belong in math.h. + */ + +_CRTIMP double __cdecl _chgsign (double); +_CRTIMP double __cdecl _copysign (double, double); +_CRTIMP double __cdecl _logb (double); +_CRTIMP double __cdecl _nextafter (double, double); +_CRTIMP double __cdecl _scalb (double, long); + +_CRTIMP int __cdecl _finite (double); +_CRTIMP int __cdecl _fpclass (double); +_CRTIMP int __cdecl _isnan (double); + +#ifdef __cplusplus +} +#endif + +#endif /* Not RC_INVOKED */ + +#endif /* Not __STRICT_ANSI__ */ + +#endif /* _FLOAT_H_ */ + diff --git a/reactos/lib/mingw/include/getopt.h b/reactos/lib/mingw/include/getopt.h new file mode 100644 index 00000000000..6b6f643b7d4 --- /dev/null +++ b/reactos/lib/mingw/include/getopt.h @@ -0,0 +1,84 @@ +/* + * Copyright (c) 1987, 1993, 1994, 1996 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifndef __GETOPT_H__ +#define __GETOPT_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +extern int opterr; /* if error message should be printed */ +extern int optind; /* index into parent argv vector */ +extern int optopt; /* character checked for validity */ +extern int optreset; /* reset getopt */ +extern char *optarg; /* argument associated with option */ + +int getopt (int, char * const *, const char *); + +#ifdef __cplusplus +} +#endif + +#endif /* __GETOPT_H__ */ + +#ifndef __UNISTD_GETOPT__ +#ifndef __GETOPT_LONG_H__ +#define __GETOPT_LONG_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +struct option { + const char *name; + int has_arg; + int *flag; + int val; +}; + +int getopt_long (int, char *const *, const char *, const struct option *, int *); +#ifndef HAVE_DECL_GETOPT +#define HAVE_DECL_GETOPT 1 +#endif + +#define no_argument 0 +#define required_argument 1 +#define optional_argument 2 + +#ifdef __cplusplus +} +#endif + +#endif /* __GETOPT_LONG_H__ */ +#endif /* __UNISTD_GETOPT__ */ diff --git a/reactos/lib/mingw/include/inttypes.h b/reactos/lib/mingw/include/inttypes.h new file mode 100644 index 00000000000..a2042614ab5 --- /dev/null +++ b/reactos/lib/mingw/include/inttypes.h @@ -0,0 +1,278 @@ +/* 7.8 Format conversion of integer types */ + +#ifndef _INTTYPES_H_ +#define _INTTYPES_H_ + +#include <_mingw.h> +#include +#define __need_wchar_t +#include + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct { + intmax_t quot; + intmax_t rem; + } imaxdiv_t; + +#if !defined(__cplusplus) || defined(__STDC_FORMAT_MACROS) + +/* 7.8.1 Macros for format specifiers + * + * MS runtime does not yet understand C9x standard "ll" + * length specifier. It appears to treat "ll" as "l". + * The non-standard I64 length specifier causes warning in GCC, + * but understood by MS runtime functions. + */ + +/* fprintf macros for signed types */ +#define PRId8 "d" +#define PRId16 "d" +#define PRId32 "d" +#define PRId64 "I64d" + +#define PRIdLEAST8 "d" +#define PRIdLEAST16 "d" +#define PRIdLEAST32 "d" +#define PRIdLEAST64 "I64d" + +#define PRIdFAST8 "d" +#define PRIdFAST16 "d" +#define PRIdFAST32 "d" +#define PRIdFAST64 "I64d" + +#define PRIdMAX "I64d" +#define PRIdPTR "d" + +#define PRIi8 "i" +#define PRIi16 "i" +#define PRIi32 "i" +#define PRIi64 "I64i" + +#define PRIiLEAST8 "i" +#define PRIiLEAST16 "i" +#define PRIiLEAST32 "i" +#define PRIiLEAST64 "I64i" + +#define PRIiFAST8 "i" +#define PRIiFAST16 "i" +#define PRIiFAST32 "i" +#define PRIiFAST64 "I64i" + +#define PRIiMAX "I64i" +#define PRIiPTR "i" + +#define PRIo8 "o" +#define PRIo16 "o" +#define PRIo32 "o" +#define PRIo64 "I64o" + +#define PRIoLEAST8 "o" +#define PRIoLEAST16 "o" +#define PRIoLEAST32 "o" +#define PRIoLEAST64 "I64o" + +#define PRIoFAST8 "o" +#define PRIoFAST16 "o" +#define PRIoFAST32 "o" +#define PRIoFAST64 "I64o" + +#define PRIoMAX "I64o" + +#define PRIoPTR "o" + +/* fprintf macros for unsigned types */ +#define PRIu8 "u" +#define PRIu16 "u" +#define PRIu32 "u" +#define PRIu64 "I64u" + + +#define PRIuLEAST8 "u" +#define PRIuLEAST16 "u" +#define PRIuLEAST32 "u" +#define PRIuLEAST64 "I64u" + +#define PRIuFAST8 "u" +#define PRIuFAST16 "u" +#define PRIuFAST32 "u" +#define PRIuFAST64 "I64u" + +#define PRIuMAX "I64u" +#define PRIuPTR "u" + +#define PRIx8 "x" +#define PRIx16 "x" +#define PRIx32 "x" +#define PRIx64 "I64x" + +#define PRIxLEAST8 "x" +#define PRIxLEAST16 "x" +#define PRIxLEAST32 "x" +#define PRIxLEAST64 "I64x" + +#define PRIxFAST8 "x" +#define PRIxFAST16 "x" +#define PRIxFAST32 "x" +#define PRIxFAST64 "I64x" + +#define PRIxMAX "I64x" +#define PRIxPTR "x" + +#define PRIX8 "X" +#define PRIX16 "X" +#define PRIX32 "X" +#define PRIX64 "I64X" + +#define PRIXLEAST8 "X" +#define PRIXLEAST16 "X" +#define PRIXLEAST32 "X" +#define PRIXLEAST64 "I64X" + +#define PRIXFAST8 "X" +#define PRIXFAST16 "X" +#define PRIXFAST32 "X" +#define PRIXFAST64 "I64X" + +#define PRIXMAX "I64X" +#define PRIXPTR "X" + +/* + * fscanf macros for signed int types + * NOTE: if 32-bit int is used for int_fast8_t and int_fast16_t + * (see stdint.h, 7.18.1.3), FAST8 and FAST16 should have + * no length identifiers + */ + +#define SCNd16 "hd" +#define SCNd32 "d" +#define SCNd64 "I64d" + +#define SCNdLEAST16 "hd" +#define SCNdLEAST32 "d" +#define SCNdLEAST64 "I64d" + +#define SCNdFAST16 "hd" +#define SCNdFAST32 "d" +#define SCNdFAST64 "I64d" + +#define SCNdMAX "I64d" +#define SCNdPTR "d" + +#define SCNi16 "hi" +#define SCNi32 "i" +#define SCNi64 "I64i" + +#define SCNiLEAST16 "hi" +#define SCNiLEAST32 "i" +#define SCNiLEAST64 "I64i" + +#define SCNiFAST16 "hi" +#define SCNiFAST32 "i" +#define SCNiFAST64 "I64i" + +#define SCNiMAX "I64i" +#define SCNiPTR "i" + +#define SCNo16 "ho" +#define SCNo32 "o" +#define SCNo64 "I64o" + +#define SCNoLEAST16 "ho" +#define SCNoLEAST32 "o" +#define SCNoLEAST64 "I64o" + +#define SCNoFAST16 "ho" +#define SCNoFAST32 "o" +#define SCNoFAST64 "I64o" + +#define SCNoMAX "I64o" +#define SCNoPTR "o" + +#define SCNx16 "hx" +#define SCNx32 "x" +#define SCNx64 "I64x" + +#define SCNxLEAST16 "hx" +#define SCNxLEAST32 "x" +#define SCNxLEAST64 "I64x" + +#define SCNxFAST16 "hx" +#define SCNxFAST32 "x" +#define SCNxFAST64 "I64x" + +#define SCNxMAX "I64x" +#define SCNxPTR "x" + + +/* fscanf macros for unsigned int types */ + +#define SCNu16 "hu" +#define SCNu32 "u" +#define SCNu64 "I64u" + +#define SCNuLEAST16 "hu" +#define SCNuLEAST32 "u" +#define SCNuLEAST64 "I64u" + +#define SCNuFAST16 "hu" +#define SCNuFAST32 "u" +#define SCNuFAST64 "I64u" + +#define SCNuMAX "I64u" +#define SCNuPTR "u" + +#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L +/* + * no length modifier for char types prior to C9x + * MS runtime scanf appears to treat "hh" as "h" + */ + +/* signed char */ +#define SCNd8 "hhd" +#define SCNdLEAST8 "hhd" +#define SCNdFAST8 "hhd" + +#define SCNi8 "hhi" +#define SCNiLEAST8 "hhi" +#define SCNiFAST8 "hhi" + +#define SCNo8 "hho" +#define SCNoLEAST8 "hho" +#define SCNoFAST8 "hho" + +#define SCNx8 "hhx" +#define SCNxLEAST8 "hhx" +#define SCNxFAST8 "hhx" + +/* unsigned char */ +#define SCNu8 "hhu" +#define SCNuLEAST8 "hhu" +#define SCNuFAST8 "hhu" +#endif /* __STDC_VERSION__ >= 199901 */ + +#endif /* !defined(__cplusplus) || defined(__STDC_FORMAT_MACROS) */ + +__CRT_INLINE intmax_t __cdecl imaxabs (intmax_t j) + {return (j >= 0 ? j : -j);} +imaxdiv_t __cdecl imaxdiv (intmax_t numer, intmax_t denom); + +/* 7.8.2 Conversion functions for greatest-width integer types */ + +intmax_t __cdecl strtoimax (const char* __restrict__ nptr, + char** __restrict__ endptr, int base); +uintmax_t __cdecl strtoumax (const char* __restrict__ nptr, + char** __restrict__ endptr, int base); + +intmax_t __cdecl wcstoimax (const wchar_t* __restrict__ nptr, + wchar_t** __restrict__ endptr, int base); +uintmax_t __cdecl wcstoumax (const wchar_t* __restrict__ nptr, + wchar_t** __restrict__ endptr, int base); + +#ifdef __cplusplus +} +#endif + +#endif /* ndef _INTTYPES_H */ diff --git a/reactos/lib/mingw/include/io.h b/reactos/lib/mingw/include/io.h new file mode 100644 index 00000000000..66d59b5a8d9 --- /dev/null +++ b/reactos/lib/mingw/include/io.h @@ -0,0 +1,313 @@ +/* + * io.h + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + * System level I/O functions and types. + * + */ +#ifndef _IO_H_ +#define _IO_H_ + +/* All the headers include this file. */ +#include <_mingw.h> + +/* MSVC's io.h contains the stuff from dir.h, so I will too. + * NOTE: This also defines off_t, the file offset type, through + * an inclusion of sys/types.h */ + +#include /* To get time_t. */ +#include /* For intptr_t. */ + +/* + * Attributes of files as returned by _findfirst et al. + */ +#define _A_NORMAL 0x00000000 +#define _A_RDONLY 0x00000001 +#define _A_HIDDEN 0x00000002 +#define _A_SYSTEM 0x00000004 +#define _A_VOLID 0x00000008 +#define _A_SUBDIR 0x00000010 +#define _A_ARCH 0x00000020 + + +#ifndef RC_INVOKED + +#ifndef _FSIZE_T_DEFINED +typedef unsigned long _fsize_t; +#define _FSIZE_T_DEFINED +#endif + +/* + * The maximum length of a file name. You should use GetVolumeInformation + * instead of this constant. But hey, this works. + * Also defined in stdio.h. + */ +#ifndef FILENAME_MAX +#define FILENAME_MAX (260) +#endif + +/* + * The following structure is filled in by _findfirst or _findnext when + * they succeed in finding a match. + */ +struct _finddata_t +{ + unsigned attrib; /* Attributes, see constants above. */ + time_t time_create; + time_t time_access; /* always midnight local time */ + time_t time_write; + _fsize_t size; + char name[FILENAME_MAX]; /* may include spaces. */ +}; + +struct _finddatai64_t { + unsigned attrib; + time_t time_create; + time_t time_access; + time_t time_write; + __int64 size; + char name[FILENAME_MAX]; +}; + +struct __finddata64_t { + unsigned attrib; + __time64_t time_create; + __time64_t time_access; + __time64_t time_write; + _fsize_t size; + char name[FILENAME_MAX]; +}; + +#ifndef _WFINDDATA_T_DEFINED +struct _wfinddata_t { + unsigned attrib; + time_t time_create; /* -1 for FAT file systems */ + time_t time_access; /* -1 for FAT file systems */ + time_t time_write; + _fsize_t size; + wchar_t name[FILENAME_MAX]; /* may include spaces. */ +}; + +struct _wfinddatai64_t { + unsigned attrib; + time_t time_create; + time_t time_access; + time_t time_write; + __int64 size; + wchar_t name[FILENAME_MAX]; +}; + +struct __wfinddata64_t { + unsigned attrib; + __time64_t time_create; + __time64_t time_access; + __time64_t time_write; + _fsize_t size; + wchar_t name[FILENAME_MAX]; +}; + +#define _WFINDDATA_T_DEFINED +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Functions for searching for files. _findfirst returns -1 if no match + * is found. Otherwise it returns a handle to be used in _findnext and + * _findclose calls. _findnext also returns -1 if no match could be found, + * and 0 if a match was found. Call _findclose when you are finished. + */ +/* FIXME: Should these all use intptr_t, as per recent MSDN docs? */ +_CRTIMP long __cdecl _findfirst (const char*, struct _finddata_t*); +_CRTIMP int __cdecl _findnext (long, struct _finddata_t*); +_CRTIMP int __cdecl _findclose (long); + +_CRTIMP int __cdecl _chdir (const char*); +_CRTIMP char* __cdecl _getcwd (char*, int); +_CRTIMP int __cdecl _mkdir (const char*); +_CRTIMP char* __cdecl _mktemp (char*); +_CRTIMP int __cdecl _rmdir (const char*); +_CRTIMP int __cdecl _chmod (const char*, int); + +#ifdef __MSVCRT__ +_CRTIMP __int64 __cdecl _filelengthi64(int); +_CRTIMP long __cdecl _findfirsti64(const char*, struct _finddatai64_t*); +_CRTIMP int __cdecl _findnexti64(long, struct _finddatai64_t*); +_CRTIMP __int64 __cdecl _lseeki64(int, __int64, int); +_CRTIMP __int64 __cdecl _telli64(int); +/* These require newer versions of msvcrt.dll (6.1 or higher). */ +#if __MSVCRT_VERSION__ >= 0x0601 +_CRTIMP intptr_t __cdecl _findfirst64(const char*, struct __finddata64_t*); +_CRTIMP intptr_t __cdecl _findnext64(intptr_t, struct __finddata64_t*); +#endif /* __MSVCRT_VERSION__ >= 0x0601 */ + +#ifndef __NO_MINGW_LFS +__CRT_INLINE off64_t lseek64 (int fd, off64_t offset, int whence) +{ + return _lseeki64(fd, (__int64) offset, whence); +} +#endif + +#endif /* __MSVCRT__ */ + +#ifndef _NO_OLDNAMES + +#ifndef _UWIN +_CRTIMP int __cdecl chdir (const char*); +_CRTIMP char* __cdecl getcwd (char*, int); +_CRTIMP int __cdecl mkdir (const char*); +_CRTIMP char* __cdecl mktemp (char*); +_CRTIMP int __cdecl rmdir (const char*); +_CRTIMP int __cdecl chmod (const char*, int); +#endif /* _UWIN */ + +#endif /* Not _NO_OLDNAMES */ + +#ifdef __cplusplus +} +#endif + +#endif /* Not RC_INVOKED */ + +/* TODO: Maximum number of open handles has not been tested, I just set + * it the same as FOPEN_MAX. */ +#define HANDLE_MAX FOPEN_MAX + +/* Some defines for _access nAccessMode (MS doesn't define them, but + * it doesn't seem to hurt to add them). */ +#define F_OK 0 /* Check for file existence */ +#define X_OK 1 /* Check for execute permission. */ +#define W_OK 2 /* Check for write permission */ +#define R_OK 4 /* Check for read permission */ + +#ifndef RC_INVOKED + +#ifdef __cplusplus +extern "C" { +#endif + +_CRTIMP int __cdecl _access (const char*, int); +_CRTIMP int __cdecl _chsize (int, long); +_CRTIMP int __cdecl _close (int); +_CRTIMP int __cdecl _commit(int); + +/* NOTE: The only significant bit in unPermissions appears to be bit 7 (0x80), + * the "owner write permission" bit (on FAT). */ +_CRTIMP int __cdecl _creat (const char*, int); + +_CRTIMP int __cdecl _dup (int); +_CRTIMP int __cdecl _dup2 (int, int); +_CRTIMP long __cdecl _filelength (int); +_CRTIMP long __cdecl _get_osfhandle (int); +_CRTIMP int __cdecl _isatty (int); + +/* In a very odd turn of events this function is excluded from those + * files which define _STREAM_COMPAT. This is required in order to + * build GNU libio because of a conflict with _eof in streambuf.h + * line 107. Actually I might just be able to change the name of + * the enum member in streambuf.h... we'll see. TODO */ +#ifndef _STREAM_COMPAT +_CRTIMP int __cdecl _eof (int); +#endif + +/* LK_... locking commands defined in sys/locking.h. */ +_CRTIMP int __cdecl _locking (int, int, long); + +_CRTIMP long __cdecl _lseek (int, long, int); + +/* Optional third argument is unsigned unPermissions. */ +_CRTIMP int __cdecl _open (const char*, int, ...); + +_CRTIMP int __cdecl _open_osfhandle (long, int); +_CRTIMP int __cdecl _pipe (int *, unsigned int, int); +_CRTIMP int __cdecl _read (int, void*, unsigned int); +_CRTIMP int __cdecl _setmode (int, int); + +/* SH_... flags for nShFlags defined in share.h + * Optional fourth argument is unsigned unPermissions */ +_CRTIMP int __cdecl _sopen (const char*, int, int, ...); + +_CRTIMP long __cdecl _tell (int); +/* Should umask be in sys/stat.h and/or sys/types.h instead? */ +_CRTIMP int __cdecl _umask (int); +_CRTIMP int __cdecl _unlink (const char*); +_CRTIMP int __cdecl _write (int, const void*, unsigned int); + +/* Wide character versions. Also declared in wchar.h. */ +/* Not in crtdll.dll */ +#if !defined (_WIO_DEFINED) +#if defined (__MSVCRT__) +_CRTIMP int __cdecl _waccess(const wchar_t*, int); +_CRTIMP int __cdecl _wchmod(const wchar_t*, int); +_CRTIMP int __cdecl _wcreat(const wchar_t*, int); +_CRTIMP long __cdecl _wfindfirst(const wchar_t*, struct _wfinddata_t*); +_CRTIMP int __cdecl _wfindnext(long, struct _wfinddata_t *); +_CRTIMP int __cdecl _wunlink(const wchar_t*); +_CRTIMP int __cdecl _wopen(const wchar_t*, int, ...); +_CRTIMP int __cdecl _wsopen(const wchar_t*, int, int, ...); +_CRTIMP wchar_t * __cdecl _wmktemp(wchar_t*); +_CRTIMP long __cdecl _wfindfirsti64(const wchar_t*, struct _wfinddatai64_t*); +_CRTIMP int __cdecl _wfindnexti64(long, struct _wfinddatai64_t*); +#if __MSVCRT_VERSION__ >= 0x0601 +_CRTIMP intptr_t __cdecl _wfindfirst64(const wchar_t*, struct __wfinddata64_t*); +_CRTIMP intptr_t __cdecl _wfindnext64(intptr_t, struct __wfinddata64_t*); +#endif +#endif /* defined (__MSVCRT__) */ +#define _WIO_DEFINED +#endif /* _WIO_DEFINED */ + +#ifndef _NO_OLDNAMES +/* + * Non-underscored versions of non-ANSI functions to improve portability. + * These functions live in libmoldname.a. + */ + +#ifndef _UWIN +_CRTIMP int __cdecl access (const char*, int); +_CRTIMP int __cdecl chsize (int, long ); +_CRTIMP int __cdecl close (int); +_CRTIMP int __cdecl creat (const char*, int); +_CRTIMP int __cdecl dup (int); +_CRTIMP int __cdecl dup2 (int, int); +_CRTIMP int __cdecl eof (int); +_CRTIMP long __cdecl filelength (int); +_CRTIMP int __cdecl isatty (int); +_CRTIMP long __cdecl lseek (int, long, int); +_CRTIMP int __cdecl open (const char*, int, ...); +_CRTIMP int __cdecl read (int, void*, unsigned int); +_CRTIMP int __cdecl setmode (int, int); +_CRTIMP int __cdecl sopen (const char*, int, int, ...); +_CRTIMP long __cdecl tell (int); +_CRTIMP int __cdecl umask (int); +_CRTIMP int __cdecl unlink (const char*); +_CRTIMP int __cdecl write (int, const void*, unsigned int); +#endif /* _UWIN */ + +/* Wide character versions. Also declared in wchar.h. */ +/* Where do these live? Not in libmoldname.a nor in libmsvcrt.a */ +#if 0 +int waccess(const wchar_t *, int); +int wchmod(const wchar_t *, int); +int wcreat(const wchar_t *, int); +long wfindfirst(wchar_t *, struct _wfinddata_t *); +int wfindnext(long, struct _wfinddata_t *); +int wunlink(const wchar_t *); +int wrename(const wchar_t *, const wchar_t *); +int wopen(const wchar_t *, int, ...); +int wsopen(const wchar_t *, int, int, ...); +wchar_t * wmktemp(wchar_t *); +#endif + +#endif /* Not _NO_OLDNAMES */ + +#ifdef __cplusplus +} +#endif + +#endif /* Not RC_INVOKED */ + +#endif /* _IO_H_ not defined */ diff --git a/reactos/lib/mingw/include/limits.h b/reactos/lib/mingw/include/limits.h new file mode 100644 index 00000000000..04f79f58cbc --- /dev/null +++ b/reactos/lib/mingw/include/limits.h @@ -0,0 +1,112 @@ +/* + * limits.h + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + * Functions for manipulating paths and directories (included from io.h) + * plus functions for setting the current drive. + * + * Defines constants for the sizes of integral types. + * + * NOTE: GCC should supply a version of this header and it should be safe to + * use that version instead of this one (maybe safer). + * + */ + +#ifndef _LIMITS_H_ +#define _LIMITS_H_ + +/* All the headers include this file. */ +#include <_mingw.h> + +/* + * File system limits + * + * TODO: NAME_MAX and OPEN_MAX are file system limits or not? Are they the + * same as FILENAME_MAX and FOPEN_MAX from stdio.h? + * NOTE: Apparently the actual size of PATH_MAX is 260, but a space is + * required for the NUL. TODO: Test? + */ +#define PATH_MAX 259 + +/* + * Characteristics of the char data type. + * + * TODO: Is MB_LEN_MAX correct? + */ +#define CHAR_BIT 8 +#define MB_LEN_MAX 2 + +#define SCHAR_MIN (-128) +#define SCHAR_MAX 127 + +#define UCHAR_MAX 255 + +/* TODO: Is this safe? I think it might just be testing the preprocessor, + * not the compiler itself... */ +#if ('\x80' < 0) +#define CHAR_MIN SCHAR_MIN +#define CHAR_MAX SCHAR_MAX +#else +#define CHAR_MIN 0 +#define CHAR_MAX UCHAR_MAX +#endif + +/* + * Maximum and minimum values for ints. + */ +#define INT_MAX 2147483647 +#define INT_MIN (-INT_MAX-1) + +#define UINT_MAX 0xffffffff + +/* + * Maximum and minimum values for shorts. + */ +#define SHRT_MAX 32767 +#define SHRT_MIN (-SHRT_MAX-1) + +#define USHRT_MAX 0xffff + +/* + * Maximum and minimum values for longs and unsigned longs. + * + * TODO: This is not correct for Alphas, which have 64 bit longs. + */ +#define LONG_MAX 2147483647L +#define LONG_MIN (-LONG_MAX-1) + +#define ULONG_MAX 0xffffffffUL + +#ifndef __STRICT_ANSI__ +/* POSIX wants this. */ +#define SSIZE_MAX LONG_MAX +#endif + +#if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) \ + || !defined(__STRICT_ANSI__) +/* ISO C9x macro names */ +#define LLONG_MAX 9223372036854775807LL +#define LLONG_MIN (-LLONG_MAX - 1) +#define ULLONG_MAX (2ULL * LLONG_MAX + 1) +#endif + +/* + * The GNU C compiler also allows 'long long int' + */ +#if !defined(__STRICT_ANSI__) && defined(__GNUC__) + +#define LONG_LONG_MAX 9223372036854775807LL +#define LONG_LONG_MIN (-LONG_LONG_MAX-1) +#define ULONG_LONG_MAX (2ULL * LONG_LONG_MAX + 1) + +/* MSVC compatibility */ +#define _I64_MIN LONG_LONG_MIN +#define _I64_MAX LONG_LONG_MAX +#define _UI64_MAX ULONG_LONG_MAX + +#endif /* Not Strict ANSI and GNU C compiler */ + + +#endif /* not _LIMITS_H_ */ diff --git a/reactos/lib/mingw/include/locale.h b/reactos/lib/mingw/include/locale.h new file mode 100644 index 00000000000..41746c6a35b --- /dev/null +++ b/reactos/lib/mingw/include/locale.h @@ -0,0 +1,88 @@ +/* + * locale.h + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + * Functions and types for localization (ie. changing the appearance of + * output based on the standards of a certain country). + * + */ + +#ifndef _LOCALE_H_ +#define _LOCALE_H_ + +/* All the headers include this file. */ +#include <_mingw.h> + +/* + * NOTE: I have tried to test this, but I am limited by my knowledge of + * locale issues. The structure does not bomb if you look at the + * values, and 'decimal_point' even seems to be correct. But the + * rest of the values are, by default, not particularly useful + * (read meaningless and not related to the international settings + * of the system). + */ + +#define LC_ALL 0 +#define LC_COLLATE 1 +#define LC_CTYPE 2 +#define LC_MONETARY 3 +#define LC_NUMERIC 4 +#define LC_TIME 5 +#define LC_MIN LC_ALL +#define LC_MAX LC_TIME + +#ifndef RC_INVOKED + +/* According to C89 std, NULL is defined in locale.h too. */ +#define __need_NULL +#include + +/* + * The structure returned by 'localeconv'. + */ +struct lconv +{ + char* decimal_point; + char* thousands_sep; + char* grouping; + char* int_curr_symbol; + char* currency_symbol; + char* mon_decimal_point; + char* mon_thousands_sep; + char* mon_grouping; + char* positive_sign; + char* negative_sign; + char int_frac_digits; + char frac_digits; + char p_cs_precedes; + char p_sep_by_space; + char n_cs_precedes; + char n_sep_by_space; + char p_sign_posn; + char n_sign_posn; +}; + +#ifdef __cplusplus +extern "C" { +#endif + +_CRTIMP char* __cdecl setlocale (int, const char*); +_CRTIMP struct lconv* __cdecl localeconv (void); + +#ifndef _WLOCALE_DEFINED /* also declared in wchar.h */ +# define __need_wchar_t +# include + _CRTIMP wchar_t* __cdecl _wsetlocale(int, const wchar_t*); +# define _WLOCALE_DEFINED +#endif /* ndef _WLOCALE_DEFINED */ + +#ifdef __cplusplus +} +#endif + +#endif /* Not RC_INVOKED */ + +#endif /* Not _LOCALE_H_ */ + diff --git a/reactos/lib/mingw/include/malloc.h b/reactos/lib/mingw/include/malloc.h new file mode 100644 index 00000000000..5afa2916f43 --- /dev/null +++ b/reactos/lib/mingw/include/malloc.h @@ -0,0 +1,98 @@ +/* + * malloc.h + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + * Support for programs which want to use malloc.h to get memory management + * functions. Unless you absolutely need some of these functions and they are + * not in the ANSI headers you should use the ANSI standard header files + * instead. + * + */ + +#ifndef _MALLOC_H_ +#define _MALLOC_H_ + +/* All the headers include this file. */ +#include <_mingw.h> + +#include + +#ifndef RC_INVOKED + +/* + * The structure used to walk through the heap with _heapwalk. + */ +typedef struct _heapinfo +{ + int* _pentry; + size_t _size; + int _useflag; +} _HEAPINFO; + +/* Values for _heapinfo.useflag */ +#define _FREEENTRY 0 +#define _USEDENTRY 1 + +/* Return codes for _heapwalk() */ +#define _HEAPEMPTY (-1) +#define _HEAPOK (-2) +#define _HEAPBADBEGIN (-3) +#define _HEAPBADNODE (-4) +#define _HEAPEND (-5) +#define _HEAPBADPTR (-6) + +#ifdef __cplusplus +extern "C" { +#endif +/* + The _heap* memory allocation functions are supported on NT + but not W9x. On latter, they always set errno to ENOSYS. +*/ +_CRTIMP int __cdecl _heapwalk (_HEAPINFO*); +#ifdef __GNUC__ +#define _alloca(x) __builtin_alloca((x)) +#endif + +#ifndef _NO_OLDNAMES +_CRTIMP int __cdecl heapwalk (_HEAPINFO*); +#ifdef __GNUC__ +#define alloca(x) __builtin_alloca((x)) +#endif +#endif /* Not _NO_OLDNAMES */ + +_CRTIMP int __cdecl _heapchk (void); /* Verify heap integrety. */ +_CRTIMP int __cdecl _heapmin (void); /* Return unused heap to the OS. */ +_CRTIMP int __cdecl _heapset (unsigned int); + +_CRTIMP size_t __cdecl _msize (void*); +_CRTIMP size_t __cdecl _get_sbh_threshold (void); +_CRTIMP int __cdecl _set_sbh_threshold (size_t); +_CRTIMP void* __cdecl _expand (void*, size_t); + +/* These require msvcr70.dll or higher. */ +#if __MSVCRT_VERSION__ >= 0x0700 +_CRTIMP void * __cdecl _aligned_offset_malloc(size_t, size_t, size_t); +_CRTIMP void * __cdecl _aligned_offset_realloc(void*, size_t, size_t, size_t); + +_CRTIMP void * __cdecl _aligned_malloc (size_t, size_t); +_CRTIMP void * __cdecl _aligned_realloc (void*, size_t, size_t); +_CRTIMP void __cdecl _aligned_free (void*); +#endif /* __MSVCRT_VERSION__ >= 0x0700 */ + +/* These require libmingwex.a. */ +void * __cdecl __mingw_aligned_offset_malloc (size_t, size_t, size_t); +void * __cdecl __mingw_aligned_offset_realloc (void*, size_t, size_t, size_t); + +void * __cdecl __mingw_aligned_malloc (size_t, size_t); +void * __cdecl __mingw_aligned_realloc (void*, size_t, size_t); +void __cdecl __mingw_aligned_free (void*); + +#ifdef __cplusplus +} +#endif + +#endif /* RC_INVOKED */ + +#endif /* Not _MALLOC_H_ */ diff --git a/reactos/lib/mingw/include/math.h b/reactos/lib/mingw/include/math.h new file mode 100644 index 00000000000..b03bc541ff6 --- /dev/null +++ b/reactos/lib/mingw/include/math.h @@ -0,0 +1,848 @@ +/* + * math.h + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + * Mathematical functions. + * + */ + + +#ifndef _MATH_H_ +#define _MATH_H_ + +#if __GNUC__ >= 3 +#pragma GCC system_header +#endif + +/* All the headers include this file. */ +#include <_mingw.h> + +/* + * Types for the _exception structure. + */ + +#define _DOMAIN 1 /* domain error in argument */ +#define _SING 2 /* singularity */ +#define _OVERFLOW 3 /* range overflow */ +#define _UNDERFLOW 4 /* range underflow */ +#define _TLOSS 5 /* total loss of precision */ +#define _PLOSS 6 /* partial loss of precision */ + +/* + * Exception types with non-ANSI names for compatibility. + */ + +#ifndef __STRICT_ANSI__ +#ifndef _NO_OLDNAMES + +#define DOMAIN _DOMAIN +#define SING _SING +#define OVERFLOW _OVERFLOW +#define UNDERFLOW _UNDERFLOW +#define TLOSS _TLOSS +#define PLOSS _PLOSS + +#endif /* Not _NO_OLDNAMES */ +#endif /* Not __STRICT_ANSI__ */ + + +/* Traditional/XOPEN math constants (double precison) */ +#ifndef __STRICT_ANSI__ +#define M_E 2.7182818284590452354 +#define M_LOG2E 1.4426950408889634074 +#define M_LOG10E 0.43429448190325182765 +#define M_LN2 0.69314718055994530942 +#define M_LN10 2.30258509299404568402 +#define M_PI 3.14159265358979323846 +#define M_PI_2 1.57079632679489661923 +#define M_PI_4 0.78539816339744830962 +#define M_1_PI 0.31830988618379067154 +#define M_2_PI 0.63661977236758134308 +#define M_2_SQRTPI 1.12837916709551257390 +#define M_SQRT2 1.41421356237309504880 +#define M_SQRT1_2 0.70710678118654752440 +#endif + +/* These are also defined in Mingw float.h; needed here as well to work + around GCC build issues. */ +#ifndef __STRICT_ANSI__ +#ifndef __MINGW_FPCLASS_DEFINED +#define __MINGW_FPCLASS_DEFINED 1 +/* IEEE 754 classication */ +#define _FPCLASS_SNAN 0x0001 /* Signaling "Not a Number" */ +#define _FPCLASS_QNAN 0x0002 /* Quiet "Not a Number" */ +#define _FPCLASS_NINF 0x0004 /* Negative Infinity */ +#define _FPCLASS_NN 0x0008 /* Negative Normal */ +#define _FPCLASS_ND 0x0010 /* Negative Denormal */ +#define _FPCLASS_NZ 0x0020 /* Negative Zero */ +#define _FPCLASS_PZ 0x0040 /* Positive Zero */ +#define _FPCLASS_PD 0x0080 /* Positive Denormal */ +#define _FPCLASS_PN 0x0100 /* Positive Normal */ +#define _FPCLASS_PINF 0x0200 /* Positive Infinity */ +#endif /* __MINGW_FPCLASS_DEFINED */ +#endif /* Not __STRICT_ANSI__ */ + +#ifndef RC_INVOKED + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * HUGE_VAL is returned by strtod when the value would overflow the + * representation of 'double'. There are other uses as well. + * + * __imp__HUGE is a pointer to the actual variable _HUGE in + * MSVCRT.DLL. If we used _HUGE directly we would get a pointer + * to a thunk function. + * + * NOTE: The CRTDLL version uses _HUGE_dll instead. + */ + +#if __MINGW_GNUC_PREREQ(3, 3) +#define HUGE_VAL __builtin_huge_val() +#else + +#ifndef __DECLSPEC_SUPPORTED + +#ifdef __MSVCRT__ +extern double* _imp___HUGE; +#define HUGE_VAL (*_imp___HUGE) +#else +/* CRTDLL */ +extern double* _imp___HUGE_dll; +#define HUGE_VAL (*_imp___HUGE_dll) +#endif + +#else /* __DECLSPEC_SUPPORTED */ + +#ifdef __MSVCRT__ +__MINGW_IMPORT double _HUGE; +#define HUGE_VAL _HUGE +#else +/* CRTDLL */ +__MINGW_IMPORT double _HUGE_dll; +#define HUGE_VAL _HUGE_dll +#endif + +#endif /* __DECLSPEC_SUPPORTED */ +#endif /* __MINGW_GNUC_PREREQ(3, 3) */ + + +struct _exception +{ + int type; + char *name; + double arg1; + double arg2; + double retval; +}; + +_CRTIMP double __cdecl sin (double); +_CRTIMP double __cdecl cos (double); +_CRTIMP double __cdecl tan (double); +_CRTIMP double __cdecl sinh (double); +_CRTIMP double __cdecl cosh (double); +_CRTIMP double __cdecl tanh (double); +_CRTIMP double __cdecl asin (double); +_CRTIMP double __cdecl acos (double); +_CRTIMP double __cdecl atan (double); +_CRTIMP double __cdecl atan2 (double, double); +_CRTIMP double __cdecl exp (double); +_CRTIMP double __cdecl log (double); +_CRTIMP double __cdecl log10 (double); +_CRTIMP double __cdecl pow (double, double); +_CRTIMP double __cdecl sqrt (double); +_CRTIMP double __cdecl ceil (double); +_CRTIMP double __cdecl floor (double); +_CRTIMP double __cdecl fabs (double); +_CRTIMP double __cdecl ldexp (double, int); +_CRTIMP double __cdecl frexp (double, int*); +_CRTIMP double __cdecl modf (double, double*); +_CRTIMP double __cdecl fmod (double, double); + +/* Excess precision when using a 64-bit mantissa for FPU math ops can + cause unexpected results with some of the MSVCRT math functions. For + example, unless the function return value is stored (truncating to + 53-bit mantissa), calls to pow with both x and y as integral values + sometimes produce a non-integral result. + One workaround is to reset the FPU env to 53-bit mantissa + by a call to fesetenv (FE_PC53_ENV). Amother is to force storage + of the return value of individual math functions using wrappers. + NB, using these wrappers will disable builtin math functions and + hence disable the folding of function results at compile time when + arguments are constant. */ + +#if 0 +#define __DEFINE_FLOAT_STORE_MATHFN_D1(fn1) \ +static __inline__ double \ +__float_store_ ## fn1 (double x) \ +{ \ + __volatile__ double res = (fn1) (x); \ + return res; \ +} + +#define __DEFINE_FLOAT_STORE_MATHFN_D2(fn2) \ +static __inline__ double \ +__float_store_ ## fn2 (double x, double y) \ +{ \ + __volatile__ double res = (fn2) (x, y); \ + return res; \ +} +#endif + +/* For example, here is how to force the result of the pow function + to be stored: */ +#if 0 +#undef pow +/* Define the ___float_store_pow function and use it instead of pow(). */ +__DEFINE_FLOAT_STORE_MATHFN_D2 (pow) +#define pow __float_store_pow +#endif + +#ifndef __STRICT_ANSI__ + +/* Complex number (for _cabs). This is the MS version. The ISO + C99 counterpart _Complex is an intrinsic type in GCC and + 'complex' is defined as a macro. See complex.h */ +struct _complex +{ + double x; /* Real part */ + double y; /* Imaginary part */ +}; + +_CRTIMP double __cdecl _cabs (struct _complex); + +_CRTIMP double __cdecl _hypot (double, double); +_CRTIMP double __cdecl _j0 (double); +_CRTIMP double __cdecl _j1 (double); +_CRTIMP double __cdecl _jn (int, double); +_CRTIMP double __cdecl _y0 (double); +_CRTIMP double __cdecl _y1 (double); +_CRTIMP double __cdecl _yn (int, double); +_CRTIMP int __cdecl _matherr (struct _exception *); + +/* These are also declared in Mingw float.h; needed here as well to work + around GCC build issues. */ +/* BEGIN FLOAT.H COPY */ +/* + * IEEE recommended functions + */ + +_CRTIMP double __cdecl _chgsign (double); +_CRTIMP double __cdecl _copysign (double, double); +_CRTIMP double __cdecl _logb (double); +_CRTIMP double __cdecl _nextafter (double, double); +_CRTIMP double __cdecl _scalb (double, long); + +_CRTIMP int __cdecl _finite (double); +_CRTIMP int __cdecl _fpclass (double); +_CRTIMP int __cdecl _isnan (double); + +/* END FLOAT.H COPY */ + + +/* + * Non-underscored versions of non-ANSI functions. + * These reside in liboldnames.a. + */ + +#if !defined (_NO_OLDNAMES) + +_CRTIMP double __cdecl j0 (double); +_CRTIMP double __cdecl j1 (double); +_CRTIMP double __cdecl jn (int, double); +_CRTIMP double __cdecl y0 (double); +_CRTIMP double __cdecl y1 (double); +_CRTIMP double __cdecl yn (int, double); + +_CRTIMP double __cdecl chgsign (double); +_CRTIMP double __cdecl scalb (double, long); +_CRTIMP int __cdecl finite (double); +_CRTIMP int __cdecl fpclass (double); + +#define FP_SNAN _FPCLASS_SNAN +#define FP_QNAN _FPCLASS_QNAN +#define FP_NINF _FPCLASS_NINF +#define FP_PINF _FPCLASS_PINF +#define FP_NDENORM _FPCLASS_ND +#define FP_PDENORM _FPCLASS_PD +#define FP_NZERO _FPCLASS_NZ +#define FP_PZERO _FPCLASS_PZ +#define FP_NNORM _FPCLASS_NN +#define FP_PNORM _FPCLASS_PN + +#endif /* Not _NO_OLDNAMES */ + +/* This require msvcr70.dll or higher. */ +#if __MSVCRT_VERSION__ >= 0x0700 +_CRTIMP int __cdecl _set_SSE2_enable (int); +#endif /* __MSVCRT_VERSION__ >= 0x0700 */ + + +#endif /* __STRICT_ANSI__ */ + + +#ifndef __NO_ISOCEXT +#if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) \ + || !defined __STRICT_ANSI__ || defined __cplusplus + +#if __MINGW_GNUC_PREREQ(3, 3) +#define HUGE_VALF __builtin_huge_valf() +#define HUGE_VALL __builtin_huge_vall() +#define INFINITY __builtin_inf() +#define NAN __builtin_nan("") +#else +extern const float __INFF; +#define HUGE_VALF __INFF +extern const long double __INFL; +#define HUGE_VALL __INFL +#define INFINITY HUGE_VALF +extern const double __QNAN; +#define NAN __QNAN +#endif /* __MINGW_GNUC_PREREQ(3, 3) */ + +/* 7.12.3.1 */ +/* + Return values for fpclassify. + These are based on Intel x87 fpu condition codes + in the high byte of status word and differ from + the return values for MS IEEE 754 extension _fpclass() +*/ +#define FP_NAN 0x0100 +#define FP_NORMAL 0x0400 +#define FP_INFINITE (FP_NAN | FP_NORMAL) +#define FP_ZERO 0x4000 +#define FP_SUBNORMAL (FP_NORMAL | FP_ZERO) +/* 0x0200 is signbit mask */ + + +/* + We can't inline float or double, because we want to ensure truncation + to semantic type before classification. + (A normal long double value might become subnormal when + converted to double, and zero when converted to float.) +*/ + +extern int __cdecl __fpclassifyf (float); +extern int __cdecl __fpclassify (double); + +__CRT_INLINE int __cdecl __fpclassifyl (long double x){ + unsigned short sw; + __asm__ ("fxam; fstsw %%ax;" : "=a" (sw): "t" (x)); + return sw & (FP_NAN | FP_NORMAL | FP_ZERO ); +} + +#define fpclassify(x) (sizeof (x) == sizeof (float) ? __fpclassifyf (x) \ + : sizeof (x) == sizeof (double) ? __fpclassify (x) \ + : __fpclassifyl (x)) + +/* 7.12.3.2 */ +#define isfinite(x) ((fpclassify(x) & FP_NAN) == 0) + +/* 7.12.3.3 */ +#define isinf(x) (fpclassify(x) == FP_INFINITE) + +/* 7.12.3.4 */ +/* We don't need to worry about trucation here: + A NaN stays a NaN. */ + +__CRT_INLINE int __cdecl __isnan (double _x) +{ + unsigned short sw; + __asm__ ("fxam;" + "fstsw %%ax": "=a" (sw) : "t" (_x)); + return (sw & (FP_NAN | FP_NORMAL | FP_INFINITE | FP_ZERO | FP_SUBNORMAL)) + == FP_NAN; +} + +__CRT_INLINE int __cdecl __isnanf (float _x) +{ + unsigned short sw; + __asm__ ("fxam;" + "fstsw %%ax": "=a" (sw) : "t" (_x)); + return (sw & (FP_NAN | FP_NORMAL | FP_INFINITE | FP_ZERO | FP_SUBNORMAL)) + == FP_NAN; +} + +__CRT_INLINE int __cdecl __isnanl (long double _x) +{ + unsigned short sw; + __asm__ ("fxam;" + "fstsw %%ax": "=a" (sw) : "t" (_x)); + return (sw & (FP_NAN | FP_NORMAL | FP_INFINITE | FP_ZERO | FP_SUBNORMAL)) + == FP_NAN; +} + + +#define isnan(x) (sizeof (x) == sizeof (float) ? __isnanf (x) \ + : sizeof (x) == sizeof (double) ? __isnan (x) \ + : __isnanl (x)) + +/* 7.12.3.5 */ +#define isnormal(x) (fpclassify(x) == FP_NORMAL) + +/* 7.12.3.6 The signbit macro */ +__CRT_INLINE int __cdecl __signbit (double x) { + unsigned short stw; + __asm__ ( "fxam; fstsw %%ax;": "=a" (stw) : "t" (x)); + return (stw & 0x0200) != 0; +} + +__CRT_INLINE int __cdecl __signbitf (float x) { + unsigned short stw; + __asm__ ("fxam; fstsw %%ax;": "=a" (stw) : "t" (x)); + return (stw & 0x0200) != 0; +} + +__CRT_INLINE int __cdecl __signbitl (long double x) { + unsigned short stw; + __asm__ ("fxam; fstsw %%ax;": "=a" (stw) : "t" (x)); + return (stw & 0x0200) != 0; +} + +#define signbit(x) (sizeof (x) == sizeof (float) ? __signbitf (x) \ + : sizeof (x) == sizeof (double) ? __signbit (x) \ + : __signbitl (x)) + +/* 7.12.4 Trigonometric functions: Double in C89 */ +extern float __cdecl sinf (float); +extern long double __cdecl sinl (long double); + +extern float __cdecl cosf (float); +extern long double __cdecl cosl (long double); + +extern float __cdecl tanf (float); +extern long double __cdecl tanl (long double); + +extern float __cdecl asinf (float); +extern long double __cdecl asinl (long double); + +extern float __cdecl acosf (float); +extern long double __cdecl acosl (long double); + +extern float __cdecl atanf (float); +extern long double __cdecl atanl (long double); + +extern float __cdecl atan2f (float, float); +extern long double __cdecl atan2l (long double, long double); + +/* 7.12.5 Hyperbolic functions: Double in C89 */ +__CRT_INLINE float __cdecl sinhf (float x) + {return (float) sinh (x);} +extern long double __cdecl sinhl (long double); + +__CRT_INLINE float __cdecl coshf (float x) + {return (float) cosh (x);} +extern long double __cdecl coshl (long double); + +__CRT_INLINE float __cdecl tanhf (float x) + {return (float) tanh (x);} +extern long double __cdecl tanhl (long double); + +/* Inverse hyperbolic trig functions */ +/* 7.12.5.1 */ +extern double __cdecl acosh (double); +extern float __cdecl acoshf (float); +extern long double __cdecl acoshl (long double); + +/* 7.12.5.2 */ +extern double __cdecl asinh (double); +extern float __cdecl asinhf (float); +extern long double __cdecl asinhl (long double); + +/* 7.12.5.3 */ +extern double __cdecl atanh (double); +extern float __cdecl atanf (float); +extern long double __cdecl atanhl (long double); + +/* Exponentials and logarithms */ +/* 7.12.6.1 Double in C89 */ +__CRT_INLINE float __cdecl expf (float x) + {return (float) exp (x);} +extern long double __cdecl expl (long double); + +/* 7.12.6.2 */ +extern double __cdecl exp2(double); +extern float __cdecl exp2f(float); +extern long double __cdecl exp2l(long double); + +/* 7.12.6.3 The expm1 functions */ +/* TODO: These could be inlined */ +extern double __cdecl expm1(double); +extern float __cdecl expm1f(float); +extern long double __cdecl expm1l(long double); + +/* 7.12.6.4 Double in C89 */ +__CRT_INLINE float __cdecl frexpf (float x, int* expn) + {return (float) frexp (x, expn);} +extern long double __cdecl frexpl (long double, int*); + +/* 7.12.6.5 */ +#define FP_ILOGB0 ((int)0x80000000) +#define FP_ILOGBNAN ((int)0x80000000) +extern int __cdecl ilogb (double); +extern int __cdecl ilogbf (float); +extern int __cdecl ilogbl (long double); + +/* 7.12.6.6 Double in C89 */ +__CRT_INLINE float __cdecl ldexpf (float x, int expn) + {return (float) ldexp (x, expn);} +extern long double __cdecl ldexpl (long double, int); + +/* 7.12.6.7 Double in C89 */ +extern float __cdecl logf (float); +extern long double __cdecl logl (long double); + +/* 7.12.6.8 Double in C89 */ +extern float __cdecl log10f (float); +extern long double __cdecl log10l (long double); + +/* 7.12.6.9 */ +extern double __cdecl log1p(double); +extern float __cdecl log1pf(float); +extern long double __cdecl log1pl(long double); + +/* 7.12.6.10 */ +extern double __cdecl log2 (double); +extern float __cdecl log2f (float); +extern long double __cdecl log2l (long double); + +/* 7.12.6.11 */ +extern double __cdecl logb (double); +extern float __cdecl logbf (float); +extern long double __cdecl logbl (long double); + +/* Inline versions. GCC-4.0+ can do a better fast-math optimization + with __builtins. */ +#if !(__MINGW_GNUC_PREREQ (4, 0) && defined __FAST_MATH__ ) +__CRT_INLINE double __cdecl logb (double x) +{ + double res; + __asm__ ("fxtract\n\t" + "fstp %%st" : "=t" (res) : "0" (x)); + return res; +} + +__CRT_INLINE float __cdecl logbf (float x) +{ + float res; + __asm__ ("fxtract\n\t" + "fstp %%st" : "=t" (res) : "0" (x)); + return res; +} + +__CRT_INLINE long double __cdecl logbl (long double x) +{ + long double res; + __asm__ ("fxtract\n\t" + "fstp %%st" : "=t" (res) : "0" (x)); + return res; +} +#endif /* !defined __FAST_MATH__ || !__MINGW_GNUC_PREREQ (4, 0) */ + +/* 7.12.6.12 Double in C89 */ +extern float __cdecl modff (float, float*); +extern long double __cdecl modfl (long double, long double*); + +/* 7.12.6.13 */ +extern double __cdecl scalbn (double, int); +extern float __cdecl scalbnf (float, int); +extern long double __cdecl scalbnl (long double, int); + +extern double __cdecl scalbln (double, long); +extern float __cdecl scalblnf (float, long); +extern long double __cdecl scalblnl (long double, long); + +/* 7.12.7.1 */ +/* Implementations adapted from Cephes versions */ +extern double __cdecl cbrt (double); +extern float __cdecl cbrtf (float); +extern long double __cdecl cbrtl (long double); + +/* 7.12.7.2 The fabs functions: Double in C89 */ +extern float __cdecl fabsf (float x); +extern long double __cdecl fabsl (long double x); + +/* 7.12.7.3 */ +extern double __cdecl hypot (double, double); /* in libmoldname.a */ +__CRT_INLINE float __cdecl hypotf (float x, float y) + { return (float) hypot (x, y);} +extern long double __cdecl hypotl (long double, long double); + +/* 7.12.7.4 The pow functions. Double in C89 */ +__CRT_INLINE float __cdecl powf (float x, float y) + {return (float) pow (x, y);} +extern long double __cdecl powl (long double, long double); + +/* 7.12.7.5 The sqrt functions. Double in C89. */ +extern float __cdecl sqrtf (float); +extern long double __cdecl sqrtl (long double); + +/* 7.12.8.1 The erf functions */ +extern double __cdecl erf (double); +extern float __cdecl erff (float); +extern long double __cdecl erfl (long double); + +/* 7.12.8.2 The erfc functions */ +extern double __cdecl erfc (double); +extern float __cdecl erfcf (float); +extern long double __cdecl erfcl (long double); + +/* 7.12.8.3 The lgamma functions */ +extern double __cdecl lgamma (double); +extern float __cdecl lgammaf (float); +extern long double __cdecl lgammal (long double); + +/* 7.12.8.4 The tgamma functions */ +extern double __cdecl tgamma (double); +extern float __cdecl tgammaf (float); +extern long double __cdecl tgammal (long double); + +/* 7.12.9.1 Double in C89 */ +extern float __cdecl ceilf (float); +extern long double __cdecl ceill (long double); + +/* 7.12.9.2 Double in C89 */ +extern float __cdecl floorf (float); +extern long double __cdecl floorl (long double); + +/* 7.12.9.3 */ +extern double __cdecl nearbyint ( double); +extern float __cdecl nearbyintf (float); +extern long double __cdecl nearbyintl (long double); + +/* 7.12.9.4 */ +/* round, using fpu control word settings */ +extern double __cdecl rint (double); +extern float __cdecl rintf (float); +extern long double __cdecl rintl (long double); + +/* 7.12.9.5 */ +extern long __cdecl lrint (double); +extern long __cdecl lrintf (float); +extern long __cdecl lrintl (long double); + +extern long long __cdecl llrint (double); +extern long long __cdecl llrintf (float); +extern long long __cdecl llrintl (long double); + +/* Inline versions of above. + GCC 4.0+ can do a better fast-math job with __builtins. */ +#if !(__MINGW_GNUC_PREREQ (4, 0) && defined __FAST_MATH__ ) +__CRT_INLINE double __cdecl rint (double x) +{ + double retval; + __asm__ ("frndint;": "=t" (retval) : "0" (x)); + return retval; +} + +__CRT_INLINE float __cdecl rintf (float x) +{ + float retval; + __asm__ ("frndint;" : "=t" (retval) : "0" (x) ); + return retval; +} + +__CRT_INLINE long double __cdecl rintl (long double x) +{ + long double retval; + __asm__ ("frndint;" : "=t" (retval) : "0" (x) ); + return retval; +} + +__CRT_INLINE long __cdecl lrint (double x) +{ + long retval; + __asm__ __volatile__ + ("fistpl %0" : "=m" (retval) : "t" (x) : "st"); + return retval; +} + +__CRT_INLINE long __cdecl lrintf (float x) +{ + long retval; + __asm__ __volatile__ + ("fistpl %0" : "=m" (retval) : "t" (x) : "st"); + return retval; +} + +__CRT_INLINE long __cdecl lrintl (long double x) +{ + long retval; + __asm__ __volatile__ + ("fistpl %0" : "=m" (retval) : "t" (x) : "st"); + return retval; +} + +__CRT_INLINE long long __cdecl llrint (double x) +{ + long long retval; + __asm__ __volatile__ + ("fistpll %0" : "=m" (retval) : "t" (x) : "st"); + return retval; +} + +__CRT_INLINE long long __cdecl llrintf (float x) +{ + long long retval; + __asm__ __volatile__ + ("fistpll %0" : "=m" (retval) : "t" (x) : "st"); + return retval; +} + +__CRT_INLINE long long __cdecl llrintl (long double x) +{ + long long retval; + __asm__ __volatile__ + ("fistpll %0" : "=m" (retval) : "t" (x) : "st"); + return retval; +} +#endif /* !__FAST_MATH__ || !__MINGW_GNUC_PREREQ (4,0) */ + +/* 7.12.9.6 */ +/* round away from zero, regardless of fpu control word settings */ +extern double __cdecl round (double); +extern float __cdecl roundf (float); +extern long double __cdecl roundl (long double); + +/* 7.12.9.7 */ +extern long __cdecl lround (double); +extern long __cdecl lroundf (float); +extern long __cdecl lroundl (long double); + +extern long long __cdecl llround (double); +extern long long __cdecl llroundf (float); +extern long long __cdecl llroundl (long double); + +/* 7.12.9.8 */ +/* round towards zero, regardless of fpu control word settings */ +extern double __cdecl trunc (double); +extern float __cdecl truncf (float); +extern long double __cdecl truncl (long double); + +/* 7.12.10.1 Double in C89 */ +extern float __cdecl fmodf (float, float); +extern long double __cdecl fmodl (long double, long double); + +/* 7.12.10.2 */ +extern double __cdecl remainder (double, double); +extern float __cdecl remainderf (float, float); +extern long double __cdecl remainderl (long double, long double); + +/* 7.12.10.3 */ +extern double __cdecl remquo(double, double, int *); +extern float __cdecl remquof(float, float, int *); +extern long double __cdecl remquol(long double, long double, int *); + +/* 7.12.11.1 */ +extern double __cdecl copysign (double, double); /* in libmoldname.a */ +extern float __cdecl copysignf (float, float); +extern long double __cdecl copysignl (long double, long double); + +/* 7.12.11.2 Return a NaN */ +extern double __cdecl nan(const char *tagp); +extern float __cdecl nanf(const char *tagp); +extern long double __cdecl nanl(const char *tagp); + +#ifndef __STRICT_ANSI__ +#define _nan() nan("") +#define _nanf() nanf("") +#define _nanl() nanl("") +#endif + +/* 7.12.11.3 */ +extern double __cdecl nextafter (double, double); /* in libmoldname.a */ +extern float __cdecl nextafterf (float, float); +extern long double __cdecl nextafterl (long double, long double); + +/* 7.12.11.4 The nexttoward functions */ +extern double __cdecl nexttoward (double, long double); +extern float __cdecl nexttowardf (float, long double); +extern long double __cdecl nexttowardl (long double, long double); + +/* 7.12.12.1 */ +/* x > y ? (x - y) : 0.0 */ +extern double __cdecl fdim (double x, double y); +extern float __cdecl fdimf (float x, float y); +extern long double __cdecl fdiml (long double x, long double y); + +/* fmax and fmin. + NaN arguments are treated as missing data: if one argument is a NaN + and the other numeric, then these functions choose the numeric + value. */ + +/* 7.12.12.2 */ +extern double __cdecl fmax (double, double); +extern float __cdecl fmaxf (float, float); +extern long double __cdecl fmaxl (long double, long double); + +/* 7.12.12.3 */ +extern double __cdecl fmin (double, double); +extern float __cdecl fminf (float, float); +extern long double __cdecl fminl (long double, long double); + +/* 7.12.13.1 */ +/* return x * y + z as a ternary op */ +extern double __cdecl fma (double, double, double); +extern float __cdecl fmaf (float, float, float); +extern long double __cdecl fmal (long double, long double, long double); + + +/* 7.12.14 */ +/* + * With these functions, comparisons involving quiet NaNs set the FP + * condition code to "unordered". The IEEE floating-point spec + * dictates that the result of floating-point comparisons should be + * false whenever a NaN is involved, with the exception of the != op, + * which always returns true: yes, (NaN != NaN) is true). + */ + +#if __GNUC__ >= 3 + +#define isgreater(x, y) __builtin_isgreater(x, y) +#define isgreaterequal(x, y) __builtin_isgreaterequal(x, y) +#define isless(x, y) __builtin_isless(x, y) +#define islessequal(x, y) __builtin_islessequal(x, y) +#define islessgreater(x, y) __builtin_islessgreater(x, y) +#define isunordered(x, y) __builtin_isunordered(x, y) + +#else +/* helper */ +__CRT_INLINE int __cdecl +__fp_unordered_compare (long double x, long double y){ + unsigned short retval; + __asm__ ("fucom %%st(1);" + "fnstsw;": "=a" (retval) : "t" (x), "u" (y)); + return retval; +} + +#define isgreater(x, y) ((__fp_unordered_compare(x, y) \ + & 0x4500) == 0) +#define isless(x, y) ((__fp_unordered_compare (y, x) \ + & 0x4500) == 0) +#define isgreaterequal(x, y) ((__fp_unordered_compare (x, y) \ + & FP_INFINITE) == 0) +#define islessequal(x, y) ((__fp_unordered_compare(y, x) \ + & FP_INFINITE) == 0) +#define islessgreater(x, y) ((__fp_unordered_compare(x, y) \ + & FP_SUBNORMAL) == 0) +#define isunordered(x, y) ((__fp_unordered_compare(x, y) \ + & 0x4500) == 0x4500) + +#endif + + +#endif /* __STDC_VERSION__ >= 199901L */ +#endif /* __NO_ISOCEXT */ + + +#ifdef __cplusplus +} +#endif +#endif /* Not RC_INVOKED */ + + +#endif /* Not _MATH_H_ */ diff --git a/reactos/lib/mingw/include/mbctype.h b/reactos/lib/mingw/include/mbctype.h new file mode 100644 index 00000000000..dd57a7b5cd7 --- /dev/null +++ b/reactos/lib/mingw/include/mbctype.h @@ -0,0 +1,97 @@ +/* + * mbctype.h + * + * Functions for testing multibyte character types and converting characters. + * + * This file is part of the Mingw32 package. + * + * + * THIS SOFTWARE IS NOT COPYRIGHTED + * + * This source code is offered for use in the public domain. You may + * use, modify or distribute it freely. + * + * This code is distributed in the hope that it will be useful but + * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY + * DISCLAIMED. This includes but is not limited to warranties of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + */ + +#ifndef _MBCTYPE_H_ +#define _MBCTYPE_H_ + +/* All the headers include this file. */ +#include <_mingw.h> + +/* return values for _mbsbtype and _mbbtype in mbstring.h */ +#define _MBC_SINGLE 0 +#define _MBC_LEAD 1 +#define _MBC_TRAIL 2 +#define _MBC_ILLEGAL (-1) + +/* args for setmbcp (in lieu of actual codepage) */ +#define _MB_CP_SBCS 0 +#define _MB_CP_OEM (-2) +#define _MB_CP_ANSI (-3) +#define _MB_CP_LOCALE (-4) + +/* TODO: bit masks */ +/* +#define _MS +#define _MP +#define _M1 +#define _M2 +#define _SBUP +#define _SBLOW +*/ + +#ifndef RC_INVOKED + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef __STRICT_ANSI__ + +_CRTIMP int __cdecl _setmbcp (int); +_CRTIMP int __cdecl _getmbcp (void); + +/* byte classification */ +/* NB: Corresponding _ismbc* functions are in mbstring.h */ + +_CRTIMP int __cdecl _ismbbalpha (unsigned int); +_CRTIMP int __cdecl _ismbbalnum (unsigned int); +_CRTIMP int __cdecl _ismbbgraph (unsigned int); +_CRTIMP int __cdecl _ismbbprint (unsigned int); +_CRTIMP int __cdecl _ismbbpunct (unsigned int); + +_CRTIMP int __cdecl _ismbbkana (unsigned int); +_CRTIMP int __cdecl _ismbbkalnum (unsigned int); +_CRTIMP int __cdecl _ismbbkprint (unsigned int); +_CRTIMP int __cdecl _ismbbkpunct (unsigned int); + + +/* these are also in mbstring.h */ +_CRTIMP int __cdecl _ismbblead (unsigned int); +_CRTIMP int __cdecl _ismbbtrail (unsigned int); +_CRTIMP int __cdecl _ismbslead (const unsigned char*, const unsigned char*); +_CRTIMP int __cdecl _ismbstrail (const unsigned char*, const unsigned char*); + +#ifdef __DECLSPEC_SUPPORTED +__MINGW_IMPORT unsigned char _mbctype[]; +__MINGW_IMPORT unsigned char _mbcasemap[]; +#endif + +/* TODO : _MBCS_ mappings go in tchar.h */ + +#endif /* Not strict ANSI */ + +#ifdef __cplusplus +} +#endif + +#endif /* Not RC_INVOKED */ + +#endif /* Not _MCTYPE_H_ */ + diff --git a/reactos/lib/mingw/include/mbstring.h b/reactos/lib/mingw/include/mbstring.h new file mode 100644 index 00000000000..4ad777602af --- /dev/null +++ b/reactos/lib/mingw/include/mbstring.h @@ -0,0 +1,132 @@ +/* + * mbstring.h + * + * Protototypes for string functions supporting multibyte characters. + * + * This file is part of the Mingw32 package. + * + * + * THIS SOFTWARE IS NOT COPYRIGHTED + * + * This source code is offered for use in the public domain. You may + * use, modify or distribute it freely. + * + * This code is distributed in the hope that it will be useful but + * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY + * DISCLAIMED. This includes but is not limited to warranties of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + */ + +#ifndef _MBSTRING_H_ +#define _MBSTRING_H_ + +/* All the headers include this file. */ +#include <_mingw.h> + +#ifndef RC_INVOKED + +#define __need_size_t +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef __STRICT_ANSI__ + +/* character classification */ +_CRTIMP int __cdecl _ismbcalnum (unsigned int); +_CRTIMP int __cdecl _ismbcalpha (unsigned int); +_CRTIMP int __cdecl _ismbcdigit (unsigned int); +_CRTIMP int __cdecl _ismbcgraph (unsigned int); +_CRTIMP int __cdecl _ismbcprint (unsigned int); +_CRTIMP int __cdecl _ismbcpunct (unsigned int); +_CRTIMP int __cdecl _ismbcspace (unsigned int); +_CRTIMP int __cdecl _ismbclower (unsigned int); +_CRTIMP int __cdecl _ismbcupper (unsigned int); +_CRTIMP int __cdecl _ismbclegal (unsigned int); +_CRTIMP int __cdecl _ismbcsymbol (unsigned int); + + +/* also in mbctype.h */ +_CRTIMP int __cdecl _ismbblead (unsigned int ); +_CRTIMP int __cdecl _ismbbtrail (unsigned int ); +_CRTIMP int __cdecl _ismbslead ( const unsigned char*, const unsigned char*); +_CRTIMP int __cdecl _ismbstrail ( const unsigned char*, const unsigned char*); + +_CRTIMP unsigned int __cdecl _mbctolower (unsigned int); +_CRTIMP unsigned int __cdecl _mbctoupper (unsigned int); + +_CRTIMP void __cdecl _mbccpy (unsigned char*, const unsigned char*); +_CRTIMP size_t __cdecl _mbclen (const unsigned char*); + +_CRTIMP unsigned int __cdecl _mbbtombc (unsigned int); +_CRTIMP unsigned int __cdecl _mbctombb (unsigned int); + +/* Return value constants for these are defined in mbctype.h. */ +_CRTIMP int __cdecl _mbbtype (unsigned char, int); +_CRTIMP int __cdecl _mbsbtype (const unsigned char*, size_t); + +_CRTIMP unsigned char* __cdecl _mbscpy (unsigned char*, const unsigned char*); +_CRTIMP unsigned char* __cdecl _mbsncpy (unsigned char*, const unsigned char*, size_t); +_CRTIMP unsigned char* __cdecl _mbsnbcpy (unsigned char*, const unsigned char*, size_t); +_CRTIMP unsigned char* __cdecl _mbsset (unsigned char*, unsigned int); +_CRTIMP unsigned char* __cdecl _mbsnset (unsigned char*, unsigned int, size_t); +_CRTIMP unsigned char* __cdecl _mbsnbset (unsigned char*, unsigned int, size_t); +_CRTIMP unsigned char* __cdecl _mbsdup (const unsigned char*); +_CRTIMP unsigned char* __cdecl _mbsrev (unsigned char*); +_CRTIMP unsigned char* __cdecl _mbscat (unsigned char*, const unsigned char*); +_CRTIMP unsigned char* __cdecl _mbsncat (unsigned char*, const unsigned char*, size_t); +_CRTIMP unsigned char* __cdecl _mbsnbcat (unsigned char*, const unsigned char*, size_t); +_CRTIMP size_t __cdecl _mbslen (const unsigned char*); +_CRTIMP size_t __cdecl _mbsnbcnt (const unsigned char*, size_t); +_CRTIMP size_t __cdecl _mbsnccnt (const unsigned char*, size_t); +_CRTIMP unsigned char* __cdecl _mbschr (const unsigned char*, unsigned int); +_CRTIMP unsigned char* __cdecl _mbsrchr (const unsigned char*, unsigned int); +_CRTIMP size_t __cdecl _mbsspn (const unsigned char*, const unsigned char*); +_CRTIMP size_t __cdecl _mbscspn (const unsigned char*, const unsigned char*); +_CRTIMP unsigned char* __cdecl _mbsspnp (const unsigned char*, const unsigned char*); +_CRTIMP unsigned char* __cdecl _mbspbrk (const unsigned char*, const unsigned char*); +_CRTIMP int __cdecl _mbscmp (const unsigned char*, const unsigned char*); +_CRTIMP int __cdecl _mbsicmp (const unsigned char*, const unsigned char*); +_CRTIMP int __cdecl _mbsncmp (const unsigned char*, const unsigned char*, size_t); +_CRTIMP int __cdecl _mbsnicmp (const unsigned char*, const unsigned char*, size_t); +_CRTIMP int __cdecl _mbsnbcmp (const unsigned char*, const unsigned char*, size_t); +_CRTIMP int __cdecl _mbsnbicmp (const unsigned char*, const unsigned char*, size_t); +_CRTIMP int __cdecl _mbscoll (const unsigned char*, const unsigned char*); +_CRTIMP int __cdecl _mbsicoll (const unsigned char*, const unsigned char*); +_CRTIMP int __cdecl _mbsncoll (const unsigned char*, const unsigned char*, size_t); +_CRTIMP int __cdecl _mbsnicoll (const unsigned char*, const unsigned char*, size_t); +_CRTIMP int __cdecl _mbsnbcoll (const unsigned char*, const unsigned char*, size_t); +_CRTIMP int __cdecl _mbsnbicoll (const unsigned char*, const unsigned char*, size_t); + +_CRTIMP unsigned char* __cdecl _mbsinc (const unsigned char*); +_CRTIMP unsigned char* __cdecl _mbsninc (const unsigned char*, size_t); +_CRTIMP unsigned char* __cdecl _mbsdec (const unsigned char*, const unsigned char*); +_CRTIMP unsigned int __cdecl _mbsnextc (const unsigned char*); +_CRTIMP unsigned char* __cdecl _mbslwr (unsigned char*); +_CRTIMP unsigned char* __cdecl _mbsupr (unsigned char*); +_CRTIMP unsigned char* __cdecl _mbstok (unsigned char*, const unsigned char*); + +/* Kanji */ +_CRTIMP int __cdecl _ismbchira (unsigned int); +_CRTIMP int __cdecl _ismbckata (unsigned int); +_CRTIMP int __cdecl _ismbcl0 (unsigned int); +_CRTIMP int __cdecl _ismbcl1 (unsigned int); +_CRTIMP int __cdecl _ismbcl2 (unsigned int); +_CRTIMP unsigned int __cdecl _mbcjistojms (unsigned int); +_CRTIMP unsigned int __cdecl _mbcjmstojis (unsigned int); +_CRTIMP unsigned int __cdecl _mbctohira (unsigned int); +_CRTIMP unsigned int __cdecl _mbctokata (unsigned int); + +#endif /* Not strict ANSI */ + +#ifdef __cplusplus +} +#endif + +#endif /* Not RC_INVOKED */ +#endif /* Not _MBSTRING_H_ */ + + diff --git a/reactos/lib/mingw/include/mem.h b/reactos/lib/mingw/include/mem.h new file mode 100644 index 00000000000..451de0cd47e --- /dev/null +++ b/reactos/lib/mingw/include/mem.h @@ -0,0 +1,6 @@ +/* + * This file is part of the Mingw32 package. + * + * mem.h maps to string.h + */ +#include diff --git a/reactos/lib/mingw/include/memory.h b/reactos/lib/mingw/include/memory.h new file mode 100644 index 00000000000..9ba65cf690e --- /dev/null +++ b/reactos/lib/mingw/include/memory.h @@ -0,0 +1,7 @@ +/* + * This file is part of the Mingw32 package. + * + * memory.h maps to the standard string.h header. + */ + +#include diff --git a/reactos/lib/mingw/include/process.h b/reactos/lib/mingw/include/process.h new file mode 100644 index 00000000000..bdc2f0c59d2 --- /dev/null +++ b/reactos/lib/mingw/include/process.h @@ -0,0 +1,138 @@ +/* + * process.h + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + * Function calls for spawning child processes. + * + */ + +#ifndef _PROCESS_H_ +#define _PROCESS_H_ + +/* All the headers include this file. */ +#include <_mingw.h> + +/* Includes a definition of _pid_t and pid_t */ +#include + +/* + * Constants for cwait actions. + * Obsolete for Win32. + */ +#define _WAIT_CHILD 0 +#define _WAIT_GRANDCHILD 1 + +#ifndef _NO_OLDNAMES +#define WAIT_CHILD _WAIT_CHILD +#define WAIT_GRANDCHILD _WAIT_GRANDCHILD +#endif /* Not _NO_OLDNAMES */ + +/* + * Mode constants for spawn functions. + */ +#define _P_WAIT 0 +#define _P_NOWAIT 1 +#define _P_OVERLAY 2 +#define _OLD_P_OVERLAY _P_OVERLAY +#define _P_NOWAITO 3 +#define _P_DETACH 4 + +#ifndef _NO_OLDNAMES +#define P_WAIT _P_WAIT +#define P_NOWAIT _P_NOWAIT +#define P_OVERLAY _P_OVERLAY +#define OLD_P_OVERLAY _OLD_P_OVERLAY +#define P_NOWAITO _P_NOWAITO +#define P_DETACH _P_DETACH +#endif /* Not _NO_OLDNAMES */ + + +#ifndef RC_INVOKED + +#ifdef __cplusplus +extern "C" { +#endif + +_CRTIMP void __cdecl _cexit(void); +_CRTIMP void __cdecl _c_exit(void); + +_CRTIMP int __cdecl _cwait (int*, _pid_t, int); + +_CRTIMP _pid_t __cdecl _getpid(void); + +_CRTIMP int __cdecl _execl (const char*, const char*, ...); +_CRTIMP int __cdecl _execle (const char*, const char*, ...); +_CRTIMP int __cdecl _execlp (const char*, const char*, ...); +_CRTIMP int __cdecl _execlpe (const char*, const char*, ...); +_CRTIMP int __cdecl _execv (const char*, const char* const*); +_CRTIMP int __cdecl _execve (const char*, const char* const*, const char* const*); +_CRTIMP int __cdecl _execvp (const char*, const char* const*); +_CRTIMP int __cdecl _execvpe (const char*, const char* const*, const char* const*); + +_CRTIMP int __cdecl _spawnl (int, const char*, const char*, ...); +_CRTIMP int __cdecl _spawnle (int, const char*, const char*, ...); +_CRTIMP int __cdecl _spawnlp (int, const char*, const char*, ...); +_CRTIMP int __cdecl _spawnlpe (int, const char*, const char*, ...); +_CRTIMP int __cdecl _spawnv (int, const char*, const char* const*); +_CRTIMP int __cdecl _spawnve (int, const char*, const char* const*, const char* const*); +_CRTIMP int __cdecl _spawnvp (int, const char*, const char* const*); +_CRTIMP int __cdecl _spawnvpe (int, const char*, const char* const*, const char* const*); + + +/* + * The functions _beginthreadex and _endthreadex are not provided by CRTDLL. + * They are provided by MSVCRT. + * + * NOTE: Apparently _endthread calls CloseHandle on the handle of the thread, + * making for race conditions if you are not careful. Basically you have to + * make sure that no-one is going to do *anything* with the thread handle + * after the thread calls _endthread or returns from the thread function. + * + * NOTE: No old names for these functions. Use the underscore. + */ +_CRTIMP unsigned long __cdecl + _beginthread (void (*)(void *), unsigned, void*); +_CRTIMP void __cdecl _endthread (void); + +#ifdef __MSVCRT__ +_CRTIMP unsigned long __cdecl + _beginthreadex (void *, unsigned, unsigned (__stdcall *) (void *), + void*, unsigned, unsigned*); +_CRTIMP void __cdecl _endthreadex (unsigned); +#endif + + +#ifndef _NO_OLDNAMES +/* + * Functions without the leading underscore, for portability. These functions + * live in liboldnames.a. + */ +_CRTIMP int __cdecl cwait (int*, pid_t, int); +_CRTIMP pid_t __cdecl getpid (void); +_CRTIMP int __cdecl execl (const char*, const char*, ...); +_CRTIMP int __cdecl execle (const char*, const char*, ...); +_CRTIMP int __cdecl execlp (const char*, const char*, ...); +_CRTIMP int __cdecl execlpe (const char*, const char*, ...); +_CRTIMP int __cdecl execv (const char*, const char* const*); +_CRTIMP int __cdecl execve (const char*, const char* const*, const char* const*); +_CRTIMP int __cdecl execvp (const char*, const char* const*); +_CRTIMP int __cdecl execvpe (const char*, const char* const*, const char* const*); +_CRTIMP int __cdecl spawnl (int, const char*, const char*, ...); +_CRTIMP int __cdecl spawnle (int, const char*, const char*, ...); +_CRTIMP int __cdecl spawnlp (int, const char*, const char*, ...); +_CRTIMP int __cdecl spawnlpe (int, const char*, const char*, ...); +_CRTIMP int __cdecl spawnv (int, const char*, const char* const*); +_CRTIMP int __cdecl spawnve (int, const char*, const char* const*, const char* const*); +_CRTIMP int __cdecl spawnvp (int, const char*, const char* const*); +_CRTIMP int __cdecl spawnvpe (int, const char*, const char* const*, const char* const*); +#endif /* Not _NO_OLDNAMES */ + +#ifdef __cplusplus +} +#endif + +#endif /* Not RC_INVOKED */ + +#endif /* _PROCESS_H_ not defined */ diff --git a/reactos/lib/mingw/include/search.h b/reactos/lib/mingw/include/search.h new file mode 100644 index 00000000000..2d7768b53a8 --- /dev/null +++ b/reactos/lib/mingw/include/search.h @@ -0,0 +1,64 @@ +/* + * search.h + * + * Functions for searching and sorting. + * + * This file is part of the Mingw32 package. + * + * Contributors: + * Created by Danny Smith + * + * THIS SOFTWARE IS NOT COPYRIGHTED + * + * This source code is offered for use in the public domain. You may + * use, modify or distribute it freely. + * + * This code is distributed in the hope that it will be useful but + * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY + * DISCLAIMED. This includes but is not limited to warranties of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + */ + +#ifndef _SEARCH_H_ +#define _SEARCH_H_ + +/* All the headers include this file. */ +#include <_mingw.h> + +#ifndef RC_INVOKED + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef _SIZE_T_DEFINED +typedef unsigned int size_t; +#define _SIZE_T_DEFINED +#endif + +/* bsearch and qsort are also declared in stdlib.h */ +_CRTIMP void* __cdecl bsearch (const void*, const void*, size_t, size_t, + int (*)(const void*, const void*)); +_CRTIMP void __cdecl qsort (void*, size_t, size_t, + int (*)(const void*, const void*)); + +_CRTIMP void* __cdecl _lfind (const void*, const void*, unsigned int*, + unsigned int, int (*)(const void*, const void*)); +_CRTIMP void* __cdecl _lsearch (const void*, void*, unsigned int*, unsigned int, + int (*)(const void*, const void*)); + +#ifndef _NO_OLDNAMES +_CRTIMP void* __cdecl lfind (const void*, const void*, unsigned int*, + unsigned int, int (*)(const void*, const void*)); +_CRTIMP void* __cdecl lsearch (const void*, void*, unsigned int*, unsigned int, + int (*)(const void*, const void*)); +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* RC_INVOKED */ + +#endif /* _SEARCH_H_ */ diff --git a/reactos/lib/mingw/include/setjmp.h b/reactos/lib/mingw/include/setjmp.h new file mode 100644 index 00000000000..38bb62a0e66 --- /dev/null +++ b/reactos/lib/mingw/include/setjmp.h @@ -0,0 +1,56 @@ +/* + * setjmp.h + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + * Declarations supporting setjmp and longjump, a method for avoiding + * the normal function call return sequence. (Bleah!) + * + */ + +#ifndef _SETJMP_H_ +#define _SETJMP_H_ + +/* All the headers include this file. */ +#include <_mingw.h> + +#ifndef RC_INVOKED + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * The buffer used by setjmp to store the information used by longjmp + * to perform it's evil goto-like work. The size of this buffer was + * determined through experimentation; it's contents are a mystery. + * NOTE: This was determined on an i386 (actually a Pentium). The + * contents could be different on an Alpha or something else. + */ +#define _JBLEN 16 +#define _JBTYPE int +typedef _JBTYPE jmp_buf[_JBLEN]; + +/* + * The function provided by CRTDLL which appears to do the actual work + * of setjmp. + */ +_CRTIMP int __cdecl _setjmp (jmp_buf); + +#define setjmp(x) _setjmp(x) + +/* + * Return to the last setjmp call and act as if setjmp had returned + * nVal (which had better be non-zero!). + */ +_CRTIMP void __cdecl longjmp (jmp_buf, int) __MINGW_ATTRIB_NORETURN; + +#ifdef __cplusplus +} +#endif + +#endif /* Not RC_INVOKED */ + +#endif /* Not _SETJMP_H_ */ + diff --git a/reactos/lib/mingw/include/share.h b/reactos/lib/mingw/include/share.h new file mode 100644 index 00000000000..09a54ad284f --- /dev/null +++ b/reactos/lib/mingw/include/share.h @@ -0,0 +1,33 @@ +/* + * share.h + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + * Constants for file sharing functions. + * + */ + +#ifndef _SHARE_H_ +#define _SHARE_H_ + +/* All the headers include this file. */ +#include <_mingw.h> + +#define _SH_COMPAT 0x00 /* Compatibility */ +#define _SH_DENYRW 0x10 /* Deny read/write */ +#define _SH_DENYWR 0x20 /* Deny write */ +#define _SH_DENYRD 0x30 /* Deny read */ +#define _SH_DENYNO 0x40 /* Deny nothing */ + +#ifndef _NO_OLDNAMES + +/* Non ANSI names */ +#define SH_DENYRW _SH_DENYRW +#define SH_DENYWR _SH_DENYWR +#define SH_DENYRD _SH_DENYRD +#define SH_DENYNO _SH_DENYNO + +#endif /* Not _NO_OLDNAMES */ + +#endif /* Not _SHARE_H_ */ diff --git a/reactos/lib/mingw/include/signal.h b/reactos/lib/mingw/include/signal.h new file mode 100644 index 00000000000..887150d81f3 --- /dev/null +++ b/reactos/lib/mingw/include/signal.h @@ -0,0 +1,98 @@ +/* + * signal.h + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + * A way to set handlers for exceptional conditions (also known as signals). + * + */ + +#ifndef _SIGNAL_H_ +#define _SIGNAL_H_ + +/* All the headers include this file. */ +#include <_mingw.h> + +/* + * The actual signal values. Using other values with signal + * produces a SIG_ERR return value. + * + * NOTE: SIGINT is produced when the user presses Ctrl-C. + * SIGILL has not been tested. + * SIGFPE doesn't seem to work? + * SIGSEGV does not catch writing to a NULL pointer (that shuts down + * your app; can you say "segmentation violation core dump"?). + * SIGTERM comes from what kind of termination request exactly? + * SIGBREAK is indeed produced by pressing Ctrl-Break. + * SIGABRT is produced by calling abort. + * TODO: The above results may be related to not installing an appropriate + * structured exception handling frame. Results may be better if I ever + * manage to get the SEH stuff down. + */ +#define SIGINT 2 /* Interactive attention */ +#define SIGILL 4 /* Illegal instruction */ +#define SIGFPE 8 /* Floating point error */ +#define SIGSEGV 11 /* Segmentation violation */ +#define SIGTERM 15 /* Termination request */ +#define SIGBREAK 21 /* Control-break */ +#define SIGABRT 22 /* Abnormal termination (abort) */ + +#define NSIG 23 /* maximum signal number + 1 */ + +#ifndef RC_INVOKED + +#ifndef _SIG_ATOMIC_T_DEFINED +typedef int sig_atomic_t; +#define _SIG_ATOMIC_T_DEFINED +#endif + +/* + * The prototypes (below) are the easy part. The hard part is figuring + * out what signals are available and what numbers they are assigned + * along with appropriate values of SIG_DFL and SIG_IGN. + */ + +/* + * A pointer to a signal handler function. A signal handler takes a + * single int, which is the signal it handles. + */ +typedef void (*__p_sig_fn_t)(int); + +/* + * These are special values of signal handler pointers which are + * used to send a signal to the default handler (SIG_DFL), ignore + * the signal (SIG_IGN), indicate an error return (SIG_ERR), + * get an error (SIG_SGE), or acknowledge (SIG_ACK). + */ +#define SIG_DFL ((__p_sig_fn_t) 0) +#define SIG_IGN ((__p_sig_fn_t) 1) +#define SIG_ERR ((__p_sig_fn_t) -1) +#define SIG_SGE ((__p_sig_fn_t) 3) +#define SIG_ACK ((__p_sig_fn_t) 4) + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Call signal to set the signal handler for signal sig to the + * function pointed to by handler. Returns a pointer to the + * previous handler, or SIG_ERR if an error occurs. Initially + * unhandled signals defined above will return SIG_DFL. + */ +_CRTIMP __p_sig_fn_t __cdecl signal(int, __p_sig_fn_t); + +/* + * Raise the signal indicated by sig. Returns non-zero on success. + */ +_CRTIMP int __cdecl raise (int); + +#ifdef __cplusplus +} +#endif + +#endif /* Not RC_INVOKED */ + +#endif /* Not _SIGNAL_H_ */ + diff --git a/reactos/lib/mingw/include/stdint.h b/reactos/lib/mingw/include/stdint.h new file mode 100644 index 00000000000..5241d48b3a2 --- /dev/null +++ b/reactos/lib/mingw/include/stdint.h @@ -0,0 +1,184 @@ +/* ISO C9x 7.18 Integer types + * Based on ISO/IEC SC22/WG14 9899 Committee draft (SC22 N2794) + * + * THIS SOFTWARE IS NOT COPYRIGHTED + * + * Contributor: Danny Smith + * + * This source code is offered for use in the public domain. You may + * use, modify or distribute it freely. + * + * This code is distributed in the hope that it will be useful but + * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY + * DISCLAIMED. This includes but is not limited to warranties of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * Date: 2000-12-02 + */ + + +#ifndef _STDINT_H +#define _STDINT_H +#define __need_wint_t +#define __need_wchar_t +#include + +/* 7.18.1.1 Exact-width integer types */ +typedef signed char int8_t; +typedef unsigned char uint8_t; +typedef short int16_t; +typedef unsigned short uint16_t; +typedef int int32_t; +typedef unsigned uint32_t; +typedef long long int64_t; +typedef unsigned long long uint64_t; + +/* 7.18.1.2 Minimum-width integer types */ +typedef signed char int_least8_t; +typedef unsigned char uint_least8_t; +typedef short int_least16_t; +typedef unsigned short uint_least16_t; +typedef int int_least32_t; +typedef unsigned uint_least32_t; +typedef long long int_least64_t; +typedef unsigned long long uint_least64_t; + +/* 7.18.1.3 Fastest minimum-width integer types + * Not actually guaranteed to be fastest for all purposes + * Here we use the exact-width types for 8 and 16-bit ints. + */ +typedef char int_fast8_t; +typedef unsigned char uint_fast8_t; +typedef short int_fast16_t; +typedef unsigned short uint_fast16_t; +typedef int int_fast32_t; +typedef unsigned int uint_fast32_t; +typedef long long int_fast64_t; +typedef unsigned long long uint_fast64_t; + +/* 7.18.1.4 Integer types capable of holding object pointers */ +typedef int intptr_t; +typedef unsigned uintptr_t; + +/* 7.18.1.5 Greatest-width integer types */ +typedef long long intmax_t; +typedef unsigned long long uintmax_t; + +/* 7.18.2 Limits of specified-width integer types */ +#if !defined ( __cplusplus) || defined (__STDC_LIMIT_MACROS) + +/* 7.18.2.1 Limits of exact-width integer types */ +#define INT8_MIN (-128) +#define INT16_MIN (-32768) +#define INT32_MIN (-2147483647 - 1) +#define INT64_MIN (-9223372036854775807LL - 1) + +#define INT8_MAX 127 +#define INT16_MAX 32767 +#define INT32_MAX 2147483647 +#define INT64_MAX 9223372036854775807LL + +#define UINT8_MAX 0xff /* 255U */ +#define UINT16_MAX 0xffff /* 65535U */ +#define UINT32_MAX 0xffffffff /* 4294967295U */ +#define UINT64_MAX 0xffffffffffffffffULL /* 18446744073709551615ULL */ + +/* 7.18.2.2 Limits of minimum-width integer types */ +#define INT_LEAST8_MIN INT8_MIN +#define INT_LEAST16_MIN INT16_MIN +#define INT_LEAST32_MIN INT32_MIN +#define INT_LEAST64_MIN INT64_MIN + +#define INT_LEAST8_MAX INT8_MAX +#define INT_LEAST16_MAX INT16_MAX +#define INT_LEAST32_MAX INT32_MAX +#define INT_LEAST64_MAX INT64_MAX + +#define UINT_LEAST8_MAX UINT8_MAX +#define UINT_LEAST16_MAX UINT16_MAX +#define UINT_LEAST32_MAX UINT32_MAX +#define UINT_LEAST64_MAX UINT64_MAX + +/* 7.18.2.3 Limits of fastest minimum-width integer types */ +#define INT_FAST8_MIN INT8_MIN +#define INT_FAST16_MIN INT16_MIN +#define INT_FAST32_MIN INT32_MIN +#define INT_FAST64_MIN INT64_MIN + +#define INT_FAST8_MAX INT8_MAX +#define INT_FAST16_MAX INT16_MAX +#define INT_FAST32_MAX INT32_MAX +#define INT_FAST64_MAX INT64_MAX + +#define UINT_FAST8_MAX UINT8_MAX +#define UINT_FAST16_MAX UINT16_MAX +#define UINT_FAST32_MAX UINT32_MAX +#define UINT_FAST64_MAX UINT64_MAX + +/* 7.18.2.4 Limits of integer types capable of holding + object pointers */ +#define INTPTR_MIN INT32_MIN +#define INTPTR_MAX INT32_MAX +#define UINTPTR_MAX UINT32_MAX + +/* 7.18.2.5 Limits of greatest-width integer types */ +#define INTMAX_MIN INT64_MIN +#define INTMAX_MAX INT64_MAX +#define UINTMAX_MAX UINT64_MAX + +/* 7.18.3 Limits of other integer types */ +#define PTRDIFF_MIN INT32_MIN +#define PTRDIFF_MAX INT32_MAX + +#define SIG_ATOMIC_MIN INT32_MIN +#define SIG_ATOMIC_MAX INT32_MAX + +#define SIZE_MAX UINT32_MAX + +#ifndef WCHAR_MIN /* also in wchar.h */ +#define WCHAR_MIN 0 +#define WCHAR_MAX 0xffff /* UINT16_MAX */ +#endif + +/* + * wint_t is unsigned short for compatibility with MS runtime + */ +#define WINT_MIN 0 +#define WINT_MAX 0xffff /* UINT16_MAX */ + +#endif /* !defined ( __cplusplus) || defined __STDC_LIMIT_MACROS */ + + +/* 7.18.4 Macros for integer constants */ +#if !defined ( __cplusplus) || defined (__STDC_CONSTANT_MACROS) + +/* 7.18.4.1 Macros for minimum-width integer constants + + Accoding to Douglas Gwyn : + "This spec was changed in ISO/IEC 9899:1999 TC1; in ISO/IEC + 9899:1999 as initially published, the expansion was required + to be an integer constant of precisely matching type, which + is impossible to accomplish for the shorter types on most + platforms, because C99 provides no standard way to designate + an integer constant with width less than that of type int. + TC1 changed this to require just an integer constant + *expression* with *promoted* type." +*/ + +#define INT8_C(val) ((int8_t) + (val)) +#define UINT8_C(val) ((uint8_t) + (val##U)) +#define INT16_C(val) ((int16_t) + (val)) +#define UINT16_C(val) ((uint16_t) + (val##U)) + +#define INT32_C(val) val##L +#define UINT32_C(val) val##UL +#define INT64_C(val) val##LL +#define UINT64_C(val) val##ULL + +/* 7.18.4.2 Macros for greatest-width integer constants */ +#define INTMAX_C(val) INT64_C(val) +#define UINTMAX_C(val) UINT64_C(val) + +#endif /* !defined ( __cplusplus) || defined __STDC_CONSTANT_MACROS */ + +#endif diff --git a/reactos/lib/mingw/include/stdio.h b/reactos/lib/mingw/include/stdio.h new file mode 100644 index 00000000000..a7070101c39 --- /dev/null +++ b/reactos/lib/mingw/include/stdio.h @@ -0,0 +1,509 @@ +/* + * stdio.h + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + * Definitions of types and prototypes of functions for standard input and + * output. + * + * NOTE: The file manipulation functions provided by Microsoft seem to + * work with either slash (/) or backslash (\) as the directory separator. + * + */ + +#ifndef _STDIO_H_ +#define _STDIO_H_ + +/* All the headers include this file. */ +#include <_mingw.h> + +#ifndef RC_INVOKED +#define __need_size_t +#define __need_NULL +#define __need_wchar_t +#define __need_wint_t +#include +#define __need___va_list +#include +#endif /* Not RC_INVOKED */ + + +/* Flags for the iobuf structure */ +#define _IOREAD 1 /* currently reading */ +#define _IOWRT 2 /* currently writing */ +#define _IORW 0x0080 /* opened as "r+w" */ + + +/* + * The three standard file pointers provided by the run time library. + * NOTE: These will go to the bit-bucket silently in GUI applications! + */ +#define STDIN_FILENO 0 +#define STDOUT_FILENO 1 +#define STDERR_FILENO 2 + +/* Returned by various functions on end of file condition or error. */ +#define EOF (-1) + +/* + * The maximum length of a file name. You should use GetVolumeInformation + * instead of this constant. But hey, this works. + * Also defined in io.h. + */ +#ifndef FILENAME_MAX +#define FILENAME_MAX (260) +#endif + +/* + * The maximum number of files that may be open at once. I have set this to + * a conservative number. The actual value may be higher. + */ +#define FOPEN_MAX (20) + +/* After creating this many names, tmpnam and tmpfile return NULL */ +#define TMP_MAX 32767 +/* + * Tmpnam, tmpfile and, sometimes, _tempnam try to create + * temp files in the root directory of the current drive + * (not in pwd, as suggested by some older MS doc's). + * Redefining these macros does not effect the CRT functions. + */ +#define _P_tmpdir "\\" +#ifndef __STRICT_ANSI__ +#define P_tmpdir _P_tmpdir +#endif +#define _wP_tmpdir L"\\" + +/* + * The maximum size of name (including NUL) that will be put in the user + * supplied buffer caName for tmpnam. + * Inferred from the size of the static buffer returned by tmpnam + * when passed a NULL argument. May actually be smaller. + */ +#define L_tmpnam (16) + +#define _IOFBF 0x0000 /* full buffered */ +#define _IOLBF 0x0040 /* line buffered */ +#define _IONBF 0x0004 /* not buffered */ + +#define _IOMYBUF 0x0008 /* stdio malloc()'d buffer */ +#define _IOEOF 0x0010 /* EOF reached on read */ +#define _IOERR 0x0020 /* I/O error from system */ +#define _IOSTRG 0x0040 /* Strange or no file descriptor */ +#ifdef _POSIX_SOURCE +# define _IOAPPEND 0x0200 +#endif +/* + * The buffer size as used by setbuf such that it is equivalent to + * (void) setvbuf(fileSetBuffer, caBuffer, _IOFBF, BUFSIZ). + */ +#define BUFSIZ 512 + +/* Constants for nOrigin indicating the position relative to which fseek + * sets the file position. Enclosed in ifdefs because io.h could also + * define them. (Though not anymore since io.h includes this file now.) */ +#ifndef SEEK_SET +#define SEEK_SET (0) +#endif + +#ifndef SEEK_CUR +#define SEEK_CUR (1) +#endif + +#ifndef SEEK_END +#define SEEK_END (2) +#endif + + +#ifndef RC_INVOKED + +#ifndef __VALIST +#ifdef __GNUC__ +#define __VALIST __gnuc_va_list +#else +#define __VALIST char* +#endif +#endif /* defined __VALIST */ + +/* + * The structure underlying the FILE type. + * + * Some believe that nobody in their right mind should make use of the + * internals of this structure. Provided by Pedro A. Aranda Gutiirrez + * . + */ +#ifndef _FILE_DEFINED +#define _FILE_DEFINED +typedef struct _iobuf +{ + char* _ptr; + int _cnt; + char* _base; + int _flag; + int _file; + int _charbuf; + int _bufsiz; + char* _tmpfname; +} FILE; +#endif /* Not _FILE_DEFINED */ + + +/* + * The standard file handles + */ +#ifndef __DECLSPEC_SUPPORTED + +extern FILE (*_imp___iob)[]; /* A pointer to an array of FILE */ + +#define _iob (*_imp___iob) /* An array of FILE */ + +#else /* __DECLSPEC_SUPPORTED */ + +__MINGW_IMPORT FILE _iob[]; /* An array of FILE imported from DLL. */ + +#endif /* __DECLSPEC_SUPPORTED */ + +#define stdin (&_iob[STDIN_FILENO]) +#define stdout (&_iob[STDOUT_FILENO]) +#define stderr (&_iob[STDERR_FILENO]) + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * File Operations + */ +_CRTIMP FILE* __cdecl fopen (const char*, const char*); +_CRTIMP FILE* __cdecl freopen (const char*, const char*, FILE*); +_CRTIMP int __cdecl fflush (FILE*); +_CRTIMP int __cdecl fclose (FILE*); +/* MS puts remove & rename (but not wide versions) in io.h also */ +_CRTIMP int __cdecl remove (const char*); +_CRTIMP int __cdecl rename (const char*, const char*); +_CRTIMP FILE* __cdecl tmpfile (void); +_CRTIMP char* __cdecl tmpnam (char*); + +#ifndef __STRICT_ANSI__ +_CRTIMP char* __cdecl _tempnam (const char*, const char*); +_CRTIMP int __cdecl _rmtmp(void); + +#ifndef NO_OLDNAMES +_CRTIMP char* __cdecl tempnam (const char*, const char*); +_CRTIMP int __cdecl rmtmp(void); +#endif +#endif /* __STRICT_ANSI__ */ + +_CRTIMP int __cdecl setvbuf (FILE*, char*, int, size_t); + +_CRTIMP void __cdecl setbuf (FILE*, char*); + +/* + * Formatted Output + */ + +_CRTIMP int __cdecl fprintf (FILE*, const char*, ...); +_CRTIMP int __cdecl printf (const char*, ...); +_CRTIMP int __cdecl sprintf (char*, const char*, ...); +_CRTIMP int __cdecl _snprintf (char*, size_t, const char*, ...); +_CRTIMP int __cdecl vfprintf (FILE*, const char*, __VALIST); +_CRTIMP int __cdecl vprintf (const char*, __VALIST); +_CRTIMP int __cdecl vsprintf (char*, const char*, __VALIST); +_CRTIMP int __cdecl _vsnprintf (char*, size_t, const char*, __VALIST); + +#ifndef __NO_ISOCEXT /* externs in libmingwex.a */ +int __cdecl snprintf(char* s, size_t n, const char* format, ...); +__CRT_INLINE int __cdecl +vsnprintf (char* s, size_t n, const char* format, __VALIST arg) + { return _vsnprintf ( s, n, format, arg); } +int __cdecl vscanf (const char * __restrict__, __VALIST); +int __cdecl vfscanf (FILE * __restrict__, const char * __restrict__, + __VALIST); +int __cdecl vsscanf (const char * __restrict__, + const char * __restrict__, __VALIST); +#endif + +/* + * Formatted Input + */ + +_CRTIMP int __cdecl fscanf (FILE*, const char*, ...); +_CRTIMP int __cdecl scanf (const char*, ...); +_CRTIMP int __cdecl sscanf (const char*, const char*, ...); +/* + * Character Input and Output Functions + */ + +_CRTIMP int __cdecl fgetc (FILE*); +_CRTIMP char* __cdecl fgets (char*, int, FILE*); +_CRTIMP int __cdecl fputc (int, FILE*); +_CRTIMP int __cdecl fputs (const char*, FILE*); +_CRTIMP char* __cdecl gets (char*); +_CRTIMP int __cdecl puts (const char*); +_CRTIMP int __cdecl ungetc (int, FILE*); + +/* Traditionally, getc and putc are defined as macros. but the + standard doesn't say that they must be macros. + We use inline functions here to allow the fast versions + to be used in C++ with namespace qualification, eg., ::getc. + + _filbuf and _flsbuf are not thread-safe. */ +_CRTIMP int __cdecl _filbuf (FILE*); +_CRTIMP int __cdecl _flsbuf (int, FILE*); + +#if !defined _MT + +__CRT_INLINE int __cdecl getc (FILE* __F) +{ + return (--__F->_cnt >= 0) + ? (int) (unsigned char) *__F->_ptr++ + : _filbuf (__F); +} + +__CRT_INLINE int __cdecl putc (int __c, FILE* __F) +{ + return (--__F->_cnt >= 0) + ? (int) (unsigned char) (*__F->_ptr++ = (char)__c) + : _flsbuf (__c, __F); +} + +__CRT_INLINE int __cdecl getchar (void) +{ + return (--stdin->_cnt >= 0) + ? (int) (unsigned char) *stdin->_ptr++ + : _filbuf (stdin); +} + +__CRT_INLINE int __cdecl putchar(int __c) +{ + return (--stdout->_cnt >= 0) + ? (int) (unsigned char) (*stdout->_ptr++ = (char)__c) + : _flsbuf (__c, stdout);} + +#else /* Use library functions. */ + +_CRTIMP int __cdecl getc (FILE*); +_CRTIMP int __cdecl putc (int, FILE*); +_CRTIMP int __cdecl getchar (void); +_CRTIMP int __cdecl putchar (int); + +#endif + +/* + * Direct Input and Output Functions + */ + +_CRTIMP size_t __cdecl fread (void*, size_t, size_t, FILE*); +_CRTIMP size_t __cdecl fwrite (const void*, size_t, size_t, FILE*); + +/* + * File Positioning Functions + */ + +_CRTIMP int __cdecl fseek (FILE*, long, int); +_CRTIMP long __cdecl ftell (FILE*); +_CRTIMP void __cdecl rewind (FILE*); + +#ifdef __USE_MINGW_FSEEK /* These are in libmingwex.a */ +/* + * Workaround for limitations on win9x where a file contents are + * not zero'd out if you seek past the end and then write. + */ + +int __cdecl __mingw_fseek (FILE *, long, int); +size_t __cdecl __mingw_fwrite (const void*, size_t, size_t, FILE*); +#define fseek(fp, offset, whence) __mingw_fseek(fp, offset, whence) +#define fwrite(buffer, size, count, fp) __mingw_fwrite(buffer, size, count, fp) +#endif /* __USE_MINGW_FSEEK */ + +/* + * An opaque data type used for storing file positions... The contents of + * this type are unknown, but we (the compiler) need to know the size + * because the programmer using fgetpos and fsetpos will be setting aside + * storage for fpos_t structres. Actually I tested using a byte array and + * it is fairly evident that the fpos_t type is a long (in CRTDLL.DLL). + * Perhaps an unsigned long? TODO? It's definitely a 64-bit number in + * MSVCRT however, and for now `long long' will do. + */ +#ifdef __MSVCRT__ +typedef long long fpos_t; +#else +typedef long fpos_t; +#endif + +_CRTIMP int __cdecl fgetpos (FILE*, fpos_t*); +_CRTIMP int __cdecl fsetpos (FILE*, const fpos_t*); + +/* + * Error Functions + */ + +_CRTIMP int __cdecl feof (FILE*); +_CRTIMP int __cdecl ferror (FILE*); + +#ifdef __cplusplus +inline int __cdecl feof (FILE* __F) + { return __F->_flag & _IOEOF; } +inline int __cdecl ferror (FILE* __F) + { return __F->_flag & _IOERR; } +#else +#define feof(__F) ((__F)->_flag & _IOEOF) +#define ferror(__F) ((__F)->_flag & _IOERR) +#endif + +_CRTIMP void __cdecl clearerr (FILE*); +_CRTIMP void __cdecl perror (const char*); + + +#ifndef __STRICT_ANSI__ +/* + * Pipes + */ +_CRTIMP FILE* __cdecl _popen (const char*, const char*); +_CRTIMP int __cdecl _pclose (FILE*); + +#ifndef NO_OLDNAMES +_CRTIMP FILE* __cdecl popen (const char*, const char*); +_CRTIMP int __cdecl pclose (FILE*); +#endif + +/* + * Other Non ANSI functions + */ +_CRTIMP int __cdecl _flushall (void); +_CRTIMP int __cdecl _fgetchar (void); +_CRTIMP int __cdecl _fputchar (int); +_CRTIMP FILE* __cdecl _fdopen (int, const char*); +_CRTIMP int __cdecl _fileno (FILE*); +_CRTIMP int __cdecl _fcloseall(void); +_CRTIMP FILE* __cdecl _fsopen(const char*, const char*, int); +#ifdef __MSVCRT__ +_CRTIMP int __cdecl _getmaxstdio(void); +_CRTIMP int __cdecl _setmaxstdio(int); +#endif + +#ifndef _NO_OLDNAMES +_CRTIMP int __cdecl fgetchar (void); +_CRTIMP int __cdecl fputchar (int); +_CRTIMP FILE* __cdecl fdopen (int, const char*); +_CRTIMP int __cdecl fileno (FILE*); +#endif /* Not _NO_OLDNAMES */ + +#define _fileno(__F) ((__F)->_file) +#ifndef _NO_OLDNAMES +#define fileno(__F) ((__F)->_file) +#endif + +#if defined (__MSVCRT__) && !defined (__NO_MINGW_LFS) +#include +__CRT_INLINE FILE* __cdecl fopen64 (const char* filename, const char* mode) +{ + return fopen (filename, mode); +} + +int __cdecl fseeko64 (FILE*, off64_t, int); + +#ifdef __USE_MINGW_FSEEK +int __cdecl __mingw_fseeko64 (FILE *, off64_t, int); +#define fseeko64(fp, offset, whence) __mingw_fseeko64(fp, offset, whence) +#endif + +__CRT_INLINE off64_t __cdecl ftello64 (FILE * stream) +{ + fpos_t pos; + if (fgetpos(stream, &pos)) + return -1LL; + else + return ((off64_t) pos); +} +#endif /* __NO_MINGW_LFS */ + +#endif /* Not __STRICT_ANSI__ */ + +/* Wide versions */ + +#ifndef _WSTDIO_DEFINED +/* also in wchar.h - keep in sync */ +_CRTIMP int __cdecl fwprintf (FILE*, const wchar_t*, ...); +_CRTIMP int __cdecl wprintf (const wchar_t*, ...); +_CRTIMP int __cdecl swprintf (wchar_t*, const wchar_t*, ...); +_CRTIMP int __cdecl _snwprintf (wchar_t*, size_t, const wchar_t*, ...); +_CRTIMP int __cdecl vfwprintf (FILE*, const wchar_t*, __VALIST); +_CRTIMP int __cdecl vwprintf (const wchar_t*, __VALIST); +_CRTIMP int __cdecl vswprintf (wchar_t*, const wchar_t*, __VALIST); +_CRTIMP int __cdecl _vsnwprintf (wchar_t*, size_t, const wchar_t*, __VALIST); +_CRTIMP int __cdecl fwscanf (FILE*, const wchar_t*, ...); +_CRTIMP int __cdecl wscanf (const wchar_t*, ...); +_CRTIMP int __cdecl swscanf (const wchar_t*, const wchar_t*, ...); +_CRTIMP wint_t __cdecl fgetwc (FILE*); +_CRTIMP wint_t __cdecl fputwc (wchar_t, FILE*); +_CRTIMP wint_t __cdecl ungetwc (wchar_t, FILE*); + +#ifdef __MSVCRT__ +_CRTIMP wchar_t* __cdecl fgetws (wchar_t*, int, FILE*); +_CRTIMP int __cdecl fputws (const wchar_t*, FILE*); +_CRTIMP wint_t __cdecl getwc (FILE*); +_CRTIMP wint_t __cdecl getwchar (void); +_CRTIMP wchar_t* __cdecl _getws (wchar_t*); +_CRTIMP wint_t __cdecl putwc (wint_t, FILE*); +_CRTIMP int __cdecl _putws (const wchar_t*); +_CRTIMP wint_t __cdecl putwchar (wint_t); +_CRTIMP FILE* __cdecl _wfdopen(int, wchar_t *); +_CRTIMP FILE* __cdecl _wfopen (const wchar_t*, const wchar_t*); +_CRTIMP FILE* __cdecl _wfreopen (const wchar_t*, const wchar_t*, FILE*); +_CRTIMP FILE* __cdecl _wfsopen (const wchar_t*, const wchar_t*, int); +_CRTIMP wchar_t* __cdecl _wtmpnam (wchar_t*); +_CRTIMP wchar_t* __cdecl _wtempnam (const wchar_t*, const wchar_t*); +_CRTIMP int __cdecl _wrename (const wchar_t*, const wchar_t*); +_CRTIMP int __cdecl _wremove (const wchar_t*); +_CRTIMP void __cdecl _wperror (const wchar_t*); +_CRTIMP FILE* __cdecl _wpopen (const wchar_t*, const wchar_t*); +#endif /* __MSVCRT__ */ + +#ifndef __NO_ISOCEXT /* externs in libmingwex.a */ +int __cdecl snwprintf (wchar_t* s, size_t n, const wchar_t* format, ...); +__CRT_INLINE int __cdecl +vsnwprintf (wchar_t* s, size_t n, const wchar_t* format, __VALIST arg) + { return _vsnwprintf ( s, n, format, arg);} +int __cdecl vwscanf (const wchar_t * __restrict__, __VALIST); +int __cdecl vfwscanf (FILE * __restrict__, + const wchar_t * __restrict__, __VALIST); +int __cdecl vswscanf (const wchar_t * __restrict__, + const wchar_t * __restrict__, __VALIST); +#endif + +#define _WSTDIO_DEFINED +#endif /* _WSTDIO_DEFINED */ + +#ifndef __STRICT_ANSI__ +#ifdef __MSVCRT__ +#ifndef NO_OLDNAMES +_CRTIMP FILE* __cdecl wpopen (const wchar_t*, const wchar_t*); +#endif /* not NO_OLDNAMES */ +#endif /* MSVCRT runtime */ + +/* + * Other Non ANSI wide functions + */ +_CRTIMP wint_t __cdecl _fgetwchar (void); +_CRTIMP wint_t __cdecl _fputwchar (wint_t); +_CRTIMP int __cdecl _getw (FILE*); +_CRTIMP int __cdecl _putw (int, FILE*); + +#ifndef _NO_OLDNAMES +_CRTIMP wint_t __cdecl fgetwchar (void); +_CRTIMP wint_t __cdecl fputwchar (wint_t); +_CRTIMP int __cdecl getw (FILE*); +_CRTIMP int __cdecl putw (int, FILE*); +#endif /* Not _NO_OLDNAMES */ + +#endif /* __STRICT_ANSI */ + +#ifdef __cplusplus +} +#endif + +#endif /* Not RC_INVOKED */ + +#endif /* _STDIO_H_ */ diff --git a/reactos/lib/mingw/include/stdlib.h b/reactos/lib/mingw/include/stdlib.h new file mode 100644 index 00000000000..07a6b420ce2 --- /dev/null +++ b/reactos/lib/mingw/include/stdlib.h @@ -0,0 +1,524 @@ +/* + * stdlib.h + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + * Definitions for common types, variables, and functions. + * + */ + +#ifndef _STDLIB_H_ +#define _STDLIB_H_ + +/* All the headers include this file. */ +#include <_mingw.h> + + +#define __need_size_t +#define __need_wchar_t +#define __need_NULL +#ifndef RC_INVOKED +#include +#endif /* RC_INVOKED */ + +/* + * RAND_MAX is the maximum value that may be returned by rand. + * The minimum is zero. + */ +#define RAND_MAX 0x7FFF + +/* + * These values may be used as exit status codes. + */ +#define EXIT_SUCCESS 0 +#define EXIT_FAILURE 1 + +/* + * Definitions for path name functions. + * NOTE: All of these values have simply been chosen to be conservatively high. + * Remember that with long file names we can no longer depend on + * extensions being short. + */ +#ifndef __STRICT_ANSI__ + +#ifndef MAX_PATH +#define MAX_PATH (260) +#endif + +#define _MAX_PATH MAX_PATH +#define _MAX_DRIVE (3) +#define _MAX_DIR 256 +#define _MAX_FNAME 256 +#define _MAX_EXT 256 + +#endif /* Not __STRICT_ANSI__ */ + + +#ifndef RC_INVOKED + +#ifdef __cplusplus +extern "C" { +#endif + +#if !defined (__STRICT_ANSI__) + +/* + * This seems like a convenient place to declare these variables, which + * give programs using WinMain (or main for that matter) access to main-ish + * argc and argv. environ is a pointer to a table of environment variables. + * NOTE: Strings in _argv and environ are ANSI strings. + */ +extern int _argc; +extern char** _argv; + +/* imports from runtime dll of the above variables */ +#ifdef __MSVCRT__ + +extern int* __cdecl __p___argc(void); +extern char*** __cdecl __p___argv(void); +extern wchar_t*** __cdecl __p___wargv(void); + +#define __argc (*__p___argc()) +#define __argv (*__p___argv()) +#define __wargv (*__p___wargv()) + +#else /* !MSVCRT */ + +#ifndef __DECLSPEC_SUPPORTED + +extern int* _imp____argc_dll; +extern char*** _imp____argv_dll; +#define __argc (*_imp____argc_dll) +#define __argv (*_imp____argv_dll) + +#else /* __DECLSPEC_SUPPORTED */ + +__MINGW_IMPORT int __argc_dll; +__MINGW_IMPORT char** __argv_dll; +#define __argc __argc_dll +#define __argv __argv_dll + +#endif /* __DECLSPEC_SUPPORTED */ + +#endif /* __MSVCRT */ +#endif /* __STRICT_ANSI__ */ +/* + * Also defined in ctype.h. + */ +#ifndef MB_CUR_MAX +#ifdef __DECLSPEC_SUPPORTED +# ifdef __MSVCRT__ +# define MB_CUR_MAX __mb_cur_max + __MINGW_IMPORT int __mb_cur_max; +# else /* not __MSVCRT */ +# define MB_CUR_MAX __mb_cur_max_dll + __MINGW_IMPORT int __mb_cur_max_dll; +# endif /* not __MSVCRT */ + +#else /* ! __DECLSPEC_SUPPORTED */ +# ifdef __MSVCRT__ + extern int* _imp____mbcur_max; +# define MB_CUR_MAX (*_imp____mb_cur_max) +# else /* not __MSVCRT */ + extern int* _imp____mbcur_max_dll; +# define MB_CUR_MAX (*_imp____mb_cur_max_dll) +# endif /* not __MSVCRT */ +#endif /* __DECLSPEC_SUPPORTED */ +#endif /* MB_CUR_MAX */ + +/* + * MS likes to declare errno in stdlib.h as well. + */ + +#ifdef _UWIN +#undef errno +extern int errno; +#else + _CRTIMP int* __cdecl _errno(void); +#define errno (*_errno()) +#endif + _CRTIMP int* __cdecl __doserrno(void); +#define _doserrno (*__doserrno()) + +#if !defined (__STRICT_ANSI__) +/* + * Use environ from the DLL, not as a global. + */ + +#ifdef __MSVCRT__ + extern _CRTIMP char *** __cdecl __p__environ(void); + extern _CRTIMP wchar_t *** __cdecl __p__wenviron(void); +# define _environ (*__p__environ()) +# define _wenviron (*__p__wenviron()) +#else /* ! __MSVCRT__ */ +# ifndef __DECLSPEC_SUPPORTED + extern char *** _imp___environ_dll; +# define _environ (*_imp___environ_dll) +# else /* __DECLSPEC_SUPPORTED */ + __MINGW_IMPORT char ** _environ_dll; +# define _environ _environ_dll +# endif /* __DECLSPEC_SUPPORTED */ +#endif /* ! __MSVCRT__ */ + +#define environ _environ + +#ifdef __MSVCRT__ +/* One of the MSVCRTxx libraries */ + +#ifndef __DECLSPEC_SUPPORTED + extern int* _imp___sys_nerr; +# define sys_nerr (*_imp___sys_nerr) +#else /* __DECLSPEC_SUPPORTED */ + __MINGW_IMPORT int _sys_nerr; +# ifndef _UWIN +# define sys_nerr _sys_nerr +# endif /* _UWIN */ +#endif /* __DECLSPEC_SUPPORTED */ + +#else /* ! __MSVCRT__ */ + +/* CRTDLL run time library */ + +#ifndef __DECLSPEC_SUPPORTED + extern int* _imp___sys_nerr_dll; +# define sys_nerr (*_imp___sys_nerr_dll) +#else /* __DECLSPEC_SUPPORTED */ + __MINGW_IMPORT int _sys_nerr_dll; +# define sys_nerr _sys_nerr_dll +#endif /* __DECLSPEC_SUPPORTED */ + +#endif /* ! __MSVCRT__ */ + +#ifndef __DECLSPEC_SUPPORTED +extern char*** _imp__sys_errlist; +#define sys_errlist (*_imp___sys_errlist) +#else /* __DECLSPEC_SUPPORTED */ +__MINGW_IMPORT char* _sys_errlist[]; +#ifndef _UWIN +#define sys_errlist _sys_errlist +#endif /* _UWIN */ +#endif /* __DECLSPEC_SUPPORTED */ + +/* + * OS version and such constants. + */ + +#ifdef __MSVCRT__ +/* msvcrtxx.dll */ + +extern _CRTIMP unsigned __cdecl int* __p__osver(void); +extern _CRTIMP unsigned __cdecl int* __p__winver(void); +extern _CRTIMP unsigned __cdecl int* __p__winmajor(void); +extern _CRTIMP unsigned __cdecl int* __p__winminor(void); + +#ifndef __DECLSPEC_SUPPORTED +# define _osver (*__p__osver()) +# define _winver (*__p__winver()) +# define _winmajor (*__p__winmajor()) +# define _winminor (*__p__winminor()) +#else +__MINGW_IMPORT unsigned int _osver; +__MINGW_IMPORT unsigned int _winver; +__MINGW_IMPORT unsigned int _winmajor; +__MINGW_IMPORT unsigned int _winminor; +#endif /* __DECLSPEC_SUPPORTED */ + +#else +/* Not msvcrtxx.dll, thus crtdll.dll */ + +#ifndef __DECLSPEC_SUPPORTED + +extern unsigned int* _imp___osver_dll; +extern unsigned int* _imp___winver_dll; +extern unsigned int* _imp___winmajor_dll; +extern unsigned int* _imp___winminor_dll; + +#define _osver (*_imp___osver_dll) +#define _winver (*_imp___winver_dll) +#define _winmajor (*_imp___winmajor_dll) +#define _winminor (*_imp___winminor_dll) + +#else /* __DECLSPEC_SUPPORTED */ + +__MINGW_IMPORT unsigned int _osver_dll; +__MINGW_IMPORT unsigned int _winver_dll; +__MINGW_IMPORT unsigned int _winmajor_dll; +__MINGW_IMPORT unsigned int _winminor_dll; + +#define _osver _osver_dll +#define _winver _winver_dll +#define _winmajor _winmajor_dll +#define _winminor _winminor_dll + +#endif /* __DECLSPEC_SUPPORTED */ + +#endif + +#if defined __MSVCRT__ +/* although the _pgmptr is exported as DATA, + * be safe and use the access function __p__pgmptr() to get it. */ +_CRTIMP char** __cdecl __p__pgmptr(void); +#define _pgmptr (*__p__pgmptr()) +_CRTIMP wchar_t** __cdecl __p__wpgmptr(void); +#define _wpgmptr (*__p__wpgmptr()) +#else /* ! __MSVCRT__ */ +# ifndef __DECLSPEC_SUPPORTED + extern char** __imp__pgmptr_dll; +# define _pgmptr (*_imp___pgmptr_dll) +# else /* __DECLSPEC_SUPPORTED */ + __MINGW_IMPORT char* _pgmptr_dll; +# define _pgmptr _pgmptr_dll +# endif /* __DECLSPEC_SUPPORTED */ +/* no wide version in CRTDLL */ +#endif /* __MSVCRT__ */ + +/* + * This variable determines the default file mode. + * TODO: Which flags work? + */ +#if !defined (__DECLSPEC_SUPPORTED) || defined (__IN_MINGW_RUNTIME) + +#ifdef __MSVCRT__ +extern int* _imp___fmode; +#define _fmode (*_imp___fmode) +#else +/* CRTDLL */ +extern int* _imp___fmode_dll; +#define _fmode (*_imp___fmode_dll) +#endif + +#else /* __DECLSPEC_SUPPORTED */ + +#ifdef __MSVCRT__ +__MINGW_IMPORT int _fmode; +#else /* ! __MSVCRT__ */ +__MINGW_IMPORT int _fmode_dll; +#define _fmode _fmode_dll +#endif /* ! __MSVCRT__ */ + +#endif /* __DECLSPEC_SUPPORTED */ + +#endif /* Not __STRICT_ANSI__ */ + +_CRTIMP double __cdecl atof (const char*); +_CRTIMP int __cdecl atoi (const char*); +_CRTIMP long __cdecl atol (const char*); +#if !defined (__STRICT_ANSI__) +_CRTIMP int __cdecl _wtoi (const wchar_t *); +_CRTIMP long __cdecl _wtol (const wchar_t *); +#endif +_CRTIMP double __cdecl strtod (const char*, char**); +#if !defined __NO_ISOCEXT /* extern stub in static libmingwex.a */ +float __cdecl strtof (const char *, char **); +__CRT_INLINE float __cdecl strtof (const char *__nptr, char **__endptr) + { return (strtod (__nptr, __endptr));} +long double __cdecl strtold (const char * __restrict__, char ** __restrict__); +#endif /* __NO_ISOCEXT */ + +_CRTIMP long __cdecl strtol (const char*, char**, int); +_CRTIMP unsigned long __cdecl strtoul (const char*, char**, int); + +#ifndef _WSTDLIB_DEFINED +/* also declared in wchar.h */ +_CRTIMP double __cdecl wcstod (const wchar_t*, wchar_t**); +#if !defined __NO_ISOCEXT /* extern stub in static libmingwex.a */ +float __cdecl wcstof( const wchar_t *, wchar_t **); +__CRT_INLINE float __cdecl wcstof( const wchar_t *__nptr, wchar_t **__endptr) +{ return (wcstod(__nptr, __endptr)); } +long double __cdecl wcstold (const wchar_t * __restrict__, wchar_t ** __restrict__); +#endif /* __NO_ISOCEXT */ + +_CRTIMP long __cdecl wcstol (const wchar_t*, wchar_t**, int); +_CRTIMP unsigned long __cdecl wcstoul (const wchar_t*, wchar_t**, int); +#define _WSTDLIB_DEFINED +#endif + +_CRTIMP size_t __cdecl wcstombs (char*, const wchar_t*, size_t); +_CRTIMP int __cdecl wctomb (char*, wchar_t); + +_CRTIMP int __cdecl mblen (const char*, size_t); +_CRTIMP size_t __cdecl mbstowcs (wchar_t*, const char*, size_t); +_CRTIMP int __cdecl mbtowc (wchar_t*, const char*, size_t); + +_CRTIMP int __cdecl rand (void); +_CRTIMP void __cdecl srand (unsigned int); + +_CRTIMP void* __cdecl calloc (size_t, size_t) __MINGW_ATTRIB_MALLOC; +_CRTIMP void* __cdecl malloc (size_t) __MINGW_ATTRIB_MALLOC; +_CRTIMP void* __cdecl realloc (void*, size_t); +_CRTIMP void __cdecl free (void*); + +_CRTIMP void __cdecl abort (void) __MINGW_ATTRIB_NORETURN; +_CRTIMP void __cdecl exit (int) __MINGW_ATTRIB_NORETURN; + +/* Note: This is in startup code, not imported directly from dll */ +int __cdecl atexit (void (*)(void)); + +_CRTIMP int __cdecl system (const char*); +_CRTIMP char* __cdecl getenv (const char*); + +/* bsearch and qsort are also in non-ANSI header search.h */ +_CRTIMP void* __cdecl bsearch (const void*, const void*, size_t, size_t, + int (*)(const void*, const void*)); +_CRTIMP void __cdecl qsort (void*, size_t, size_t, + int (*)(const void*, const void*)); + +_CRTIMP int __cdecl abs (int) __MINGW_ATTRIB_CONST; +_CRTIMP long __cdecl labs (long) __MINGW_ATTRIB_CONST; + +/* + * div_t and ldiv_t are structures used to return the results of div and + * ldiv. + * + * NOTE: div and ldiv appear not to work correctly unless + * -fno-pcc-struct-return is specified. This is included in the + * mingw32 specs file. + */ +typedef struct { int quot, rem; } div_t; +typedef struct { long quot, rem; } ldiv_t; + +_CRTIMP div_t __cdecl div (int, int) __MINGW_ATTRIB_CONST; +_CRTIMP ldiv_t __cdecl ldiv (long, long) __MINGW_ATTRIB_CONST; + +#if !defined (__STRICT_ANSI__) + +/* + * NOTE: Officially the three following functions are obsolete. The Win32 API + * functions SetErrorMode, Beep and Sleep are their replacements. + */ +_CRTIMP void __cdecl _beep (unsigned int, unsigned int); +_CRTIMP void __cdecl _seterrormode (int); +_CRTIMP void __cdecl _sleep (unsigned long); + +_CRTIMP void __cdecl _exit (int) __MINGW_ATTRIB_NORETURN; + +/* _onexit is MS extension. Use atexit for portability. */ +/* Note: This is in startup code, not imported directly from dll */ +typedef int (* _onexit_t)(void); +_onexit_t __cdecl _onexit( _onexit_t ); + +_CRTIMP int __cdecl _putenv (const char*); +_CRTIMP void __cdecl _searchenv (const char*, const char*, char*); + + +_CRTIMP char* __cdecl _ecvt (double, int, int*, int*); +_CRTIMP char* __cdecl _fcvt (double, int, int*, int*); +_CRTIMP char* __cdecl _gcvt (double, int, char*); + +_CRTIMP void __cdecl _makepath (char*, const char*, const char*, const char*, const char*); +_CRTIMP void __cdecl _splitpath (const char*, char*, char*, char*, char*); +_CRTIMP char* __cdecl _fullpath (char*, const char*, size_t); + +_CRTIMP char* __cdecl _itoa (int, char*, int); +_CRTIMP char* __cdecl _ltoa (long, char*, int); +_CRTIMP char* __cdecl _ultoa(unsigned long, char*, int); +_CRTIMP wchar_t* __cdecl _itow (int, wchar_t*, int); +_CRTIMP wchar_t* __cdecl _ltow (long, wchar_t*, int); +_CRTIMP wchar_t* __cdecl _ultow (unsigned long, wchar_t*, int); + +#ifdef __MSVCRT__ +_CRTIMP __int64 __cdecl _atoi64(const char *); +_CRTIMP char* __cdecl _i64toa(__int64, char *, int); +_CRTIMP char* __cdecl _ui64toa(unsigned __int64, char *, int); +_CRTIMP __int64 __cdecl _wtoi64(const wchar_t *); +_CRTIMP wchar_t* __cdecl _i64tow(__int64, wchar_t *, int); +_CRTIMP wchar_t* __cdecl _ui64tow(unsigned __int64, wchar_t *, int); + +_CRTIMP wchar_t* __cdecl _wgetenv(const wchar_t*); +_CRTIMP int __cdecl _wputenv(const wchar_t*); +_CRTIMP void __cdecl _wsearchenv(const wchar_t*, const wchar_t*, wchar_t*); +_CRTIMP void __cdecl _wmakepath(wchar_t*, const wchar_t*, const wchar_t*, const wchar_t*, const wchar_t*); +_CRTIMP void __cdecl _wsplitpath (const wchar_t*, wchar_t*, wchar_t*, wchar_t*, wchar_t*); +_CRTIMP wchar_t* __cdecl _wfullpath (wchar_t*, const wchar_t*, size_t); + +_CRTIMP unsigned int __cdecl _rotl(unsigned int, int) __MINGW_ATTRIB_CONST; +_CRTIMP unsigned int __cdecl _rotr(unsigned int, int) __MINGW_ATTRIB_CONST; +_CRTIMP unsigned long __cdecl _lrotl(unsigned long, int) __MINGW_ATTRIB_CONST; +_CRTIMP unsigned long __cdecl _lrotr(unsigned long, int) __MINGW_ATTRIB_CONST; + +_CRTIMP int __cdecl _set_error_mode (int); +#define _OUT_TO_DEFAULT 0 +#define _OUT_TO_STDERR 1 +#define _OUT_TO_MSGBOX 2 +#define _REPORT_ERRMODE 3 + +#endif + +#ifndef _NO_OLDNAMES + +_CRTIMP int __cdecl putenv (const char*); +_CRTIMP void __cdecl searchenv (const char*, const char*, char*); + +_CRTIMP char* __cdecl itoa (int, char*, int); +_CRTIMP char* __cdecl ltoa (long, char*, int); + +#ifndef _UWIN +_CRTIMP char* __cdecl ecvt (double, int, int*, int*); +_CRTIMP char* __cdecl fcvt (double, int, int*, int*); +_CRTIMP char* __cdecl gcvt (double, int, char*); +#endif /* _UWIN */ +#endif /* Not _NO_OLDNAMES */ + +#endif /* Not __STRICT_ANSI__ */ + +/* C99 names */ + +#if !defined __NO_ISOCEXT /* externs in static libmingwex.a */ + +/* C99 name for _exit */ +void __cdecl _Exit(int) __MINGW_ATTRIB_NORETURN; +#ifndef __STRICT_ANSI__ /* inline using non-ansi functions */ +__CRT_INLINE void __cdecl _Exit(int __status) + { _exit (__status); } +#endif + +typedef struct { long long quot, rem; } lldiv_t; + +lldiv_t __cdecl lldiv (long long, long long) __MINGW_ATTRIB_CONST; + +long long __cdecl llabs(long long); +__CRT_INLINE long long __cdecl llabs(long long _j) + {return (_j >= 0 ? _j : -_j);} + +long long __cdecl strtoll (const char* __restrict__, char** __restrict, int); +unsigned long long __cdecl strtoull (const char* __restrict__, char** __restrict__, int); + +#if defined (__MSVCRT__) /* these are stubs for MS _i64 versions */ +long long __cdecl atoll (const char *); + +#if !defined (__STRICT_ANSI__) +long long __cdecl wtoll (const wchar_t *); +char* __cdecl lltoa (long long, char *, int); +char* __cdecl ulltoa (unsigned long long , char *, int); +wchar_t* __cdecl lltow (long long, wchar_t *, int); +wchar_t* __cdecl ulltow (unsigned long long, wchar_t *, int); + + /* inline using non-ansi functions */ +__CRT_INLINE long long __cdecl atoll (const char * _c) + { return _atoi64 (_c); } +__CRT_INLINE char* __cdecl lltoa (long long _n, char * _c, int _i) + { return _i64toa (_n, _c, _i); } +__CRT_INLINE char* __cdecl ulltoa (unsigned long long _n, char * _c, int _i) + { return _ui64toa (_n, _c, _i); } +__CRT_INLINE long long __cdecl wtoll (const wchar_t * _w) + { return _wtoi64 (_w); } +__CRT_INLINE wchar_t* __cdecl lltow (long long _n, wchar_t * _w, int _i) + { return _i64tow (_n, _w, _i); } +__CRT_INLINE wchar_t* __cdecl ulltow (unsigned long long _n, wchar_t * _w, int _i) + { return _ui64tow (_n, _w, _i); } +#endif /* (__STRICT_ANSI__) */ + +#endif /* __MSVCRT__ */ + +#endif /* !__NO_ISOCEXT */ + + +#ifdef __cplusplus +} +#endif + +#endif /* Not RC_INVOKED */ + +#endif /* Not _STDLIB_H_ */ + diff --git a/reactos/lib/mingw/include/string.h b/reactos/lib/mingw/include/string.h new file mode 100644 index 00000000000..1047e50191f --- /dev/null +++ b/reactos/lib/mingw/include/string.h @@ -0,0 +1,193 @@ +/* + * string.h + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + * Definitions for memory and string functions. + * + */ + +#ifndef _STRING_H_ +#define _STRING_H_ + +/* All the headers include this file. */ +#include <_mingw.h> + +/* + * Define size_t, wchar_t and NULL + */ +#define __need_size_t +#define __need_wchar_t +#define __need_NULL +#ifndef RC_INVOKED +#include +#endif /* Not RC_INVOKED */ + +#ifndef RC_INVOKED + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Prototypes of the ANSI Standard C library string functions. + */ +_CRTIMP void* __cdecl memchr (const void*, int, size_t) __MINGW_ATTRIB_PURE; +_CRTIMP int __cdecl memcmp (const void*, const void*, size_t) __MINGW_ATTRIB_PURE; +_CRTIMP void* __cdecl memcpy (void*, const void*, size_t); +_CRTIMP void* __cdecl memmove (void*, const void*, size_t); +_CRTIMP void* __cdecl memset (void*, int, size_t); +_CRTIMP char* __cdecl strcat (char*, const char*); +_CRTIMP char* __cdecl strchr (const char*, int) __MINGW_ATTRIB_PURE; +_CRTIMP int __cdecl strcmp (const char*, const char*) __MINGW_ATTRIB_PURE; +_CRTIMP int __cdecl strcoll (const char*, const char*); /* Compare using locale */ +_CRTIMP char* __cdecl strcpy (char*, const char*); +_CRTIMP size_t __cdecl strcspn (const char*, const char*) __MINGW_ATTRIB_PURE; +_CRTIMP char* __cdecl strerror (int); /* NOTE: NOT an old name wrapper. */ + +_CRTIMP size_t __cdecl strlen (const char*) __MINGW_ATTRIB_PURE; +_CRTIMP char* __cdecl strncat (char*, const char*, size_t); +_CRTIMP int __cdecl strncmp (const char*, const char*, size_t) __MINGW_ATTRIB_PURE; +_CRTIMP char* __cdecl strncpy (char*, const char*, size_t); +_CRTIMP char* __cdecl strpbrk (const char*, const char*) __MINGW_ATTRIB_PURE; +_CRTIMP char* __cdecl strrchr (const char*, int) __MINGW_ATTRIB_PURE; +_CRTIMP size_t __cdecl strspn (const char*, const char*) __MINGW_ATTRIB_PURE; +_CRTIMP char* __cdecl strstr (const char*, const char*) __MINGW_ATTRIB_PURE; +_CRTIMP char* __cdecl strtok (char*, const char*); +_CRTIMP size_t __cdecl strxfrm (char*, const char*, size_t); + +#ifndef __STRICT_ANSI__ +/* + * Extra non-ANSI functions provided by the CRTDLL library + */ +_CRTIMP char* __cdecl _strerror (const char *); +_CRTIMP void* __cdecl _memccpy (void*, const void*, int, size_t); +_CRTIMP int __cdecl _memicmp (const void*, const void*, size_t); +_CRTIMP char* __cdecl _strdup (const char*) __MINGW_ATTRIB_MALLOC; +_CRTIMP int __cdecl _strcmpi (const char*, const char*); +_CRTIMP int __cdecl _stricmp (const char*, const char*); +_CRTIMP int __cdecl _stricoll (const char*, const char*); +_CRTIMP char* __cdecl _strlwr (char*); +_CRTIMP int __cdecl _strnicmp (const char*, const char*, size_t); +_CRTIMP char* __cdecl _strnset (char*, int, size_t); +_CRTIMP char* __cdecl _strrev (char*); +_CRTIMP char* __cdecl _strset (char*, int); +_CRTIMP char* __cdecl _strupr (char*); +_CRTIMP void __cdecl _swab (const char*, char*, size_t); + +#ifdef __MSVCRT__ +_CRTIMP int __cdecl _strncoll(const char*, const char*, size_t); +_CRTIMP int __cdecl _strnicoll(const char*, const char*, size_t); +#endif + +#ifndef _NO_OLDNAMES +/* + * Non-underscored versions of non-ANSI functions. They live in liboldnames.a + * and provide a little extra portability. Also a few extra UNIX-isms like + * strcasecmp. + */ +_CRTIMP void* __cdecl memccpy (void*, const void*, int, size_t); +_CRTIMP int __cdecl memicmp (const void*, const void*, size_t); +_CRTIMP char* __cdecl strdup (const char*) __MINGW_ATTRIB_MALLOC; +_CRTIMP int __cdecl strcmpi (const char*, const char*); +_CRTIMP int __cdecl stricmp (const char*, const char*); +__CRT_INLINE int __cdecl +strcasecmp (const char * __sz1, const char * __sz2) + {return _stricmp (__sz1, __sz2);} +_CRTIMP int __cdecl stricoll (const char*, const char*); +_CRTIMP char* __cdecl strlwr (char*); +_CRTIMP int __cdecl strnicmp (const char*, const char*, size_t); +__CRT_INLINE int __cdecl +strncasecmp (const char * __sz1, const char * __sz2, size_t __sizeMaxCompare) + {return _strnicmp (__sz1, __sz2, __sizeMaxCompare);} +_CRTIMP char* __cdecl strnset (char*, int, size_t); +_CRTIMP char* __cdecl strrev (char*); +_CRTIMP char* __cdecl strset (char*, int); +_CRTIMP char* __cdecl strupr (char*); +#ifndef _UWIN +_CRTIMP void __cdecl swab (const char*, char*, size_t); +#endif /* _UWIN */ +#endif /* _NO_OLDNAMES */ + +#endif /* Not __STRICT_ANSI__ */ + +#ifndef _WSTRING_DEFINED +/* + * Unicode versions of the standard calls. + * Also in wchar.h, where they belong according to ISO standard. + */ +_CRTIMP wchar_t* __cdecl wcscat (wchar_t*, const wchar_t*); +_CRTIMP wchar_t* __cdecl wcschr (const wchar_t*, wchar_t); +_CRTIMP int __cdecl wcscmp (const wchar_t*, const wchar_t*); +_CRTIMP int __cdecl wcscoll (const wchar_t*, const wchar_t*); +_CRTIMP wchar_t* __cdecl wcscpy (wchar_t*, const wchar_t*); +_CRTIMP size_t __cdecl wcscspn (const wchar_t*, const wchar_t*); +/* Note: _wcserror requires __MSVCRT_VERSION__ >= 0x0700. */ +_CRTIMP size_t __cdecl wcslen (const wchar_t*); +_CRTIMP wchar_t* __cdecl wcsncat (wchar_t*, const wchar_t*, size_t); +_CRTIMP int __cdecl wcsncmp(const wchar_t*, const wchar_t*, size_t); +_CRTIMP wchar_t* __cdecl wcsncpy(wchar_t*, const wchar_t*, size_t); +_CRTIMP wchar_t* __cdecl wcspbrk(const wchar_t*, const wchar_t*); +_CRTIMP wchar_t* __cdecl wcsrchr(const wchar_t*, wchar_t); +_CRTIMP size_t __cdecl wcsspn(const wchar_t*, const wchar_t*); +_CRTIMP wchar_t* __cdecl wcsstr(const wchar_t*, const wchar_t*); +_CRTIMP wchar_t* __cdecl wcstok(wchar_t*, const wchar_t*); +_CRTIMP size_t __cdecl wcsxfrm(wchar_t*, const wchar_t*, size_t); + +#ifndef __STRICT_ANSI__ +/* + * Unicode versions of non-ANSI string functions provided by CRTDLL. + */ + +/* NOTE: _wcscmpi not provided by CRTDLL, this define is for portability */ +#define _wcscmpi _wcsicmp + +_CRTIMP wchar_t* __cdecl _wcsdup (const wchar_t*); +_CRTIMP int __cdecl _wcsicmp (const wchar_t*, const wchar_t*); +_CRTIMP int __cdecl _wcsicoll (const wchar_t*, const wchar_t*); +_CRTIMP wchar_t* __cdecl _wcslwr (wchar_t*); +_CRTIMP int __cdecl _wcsnicmp (const wchar_t*, const wchar_t*, size_t); +_CRTIMP wchar_t* __cdecl _wcsnset (wchar_t*, wchar_t, size_t); +_CRTIMP wchar_t* __cdecl _wcsrev (wchar_t*); +_CRTIMP wchar_t* __cdecl _wcsset (wchar_t*, wchar_t); +_CRTIMP wchar_t* __cdecl _wcsupr (wchar_t*); + +#ifdef __MSVCRT__ +_CRTIMP int __cdecl _wcsncoll(const wchar_t*, const wchar_t*, size_t); +_CRTIMP int __cdecl _wcsnicoll(const wchar_t*, const wchar_t*, size_t); +#if __MSVCRT_VERSION__ >= 0x0700 +_CRTIMP wchar_t* __cdecl _wcserror(int); +_CRTIMP wchar_t* __cdecl __wcserror(const wchar_t*); +#endif +#endif + +#ifndef _NO_OLDNAMES +/* NOTE: There is no _wcscmpi, but this is for compatibility. */ +int __cdecl wcscmpi (const wchar_t * __ws1, const wchar_t * __ws2); +__CRT_INLINE int __cdecl +wcscmpi (const wchar_t * __ws1, const wchar_t * __ws2) + {return _wcsicmp (__ws1, __ws2);} +_CRTIMP wchar_t* __cdecl wcsdup (const wchar_t*); +_CRTIMP int __cdecl wcsicmp (const wchar_t*, const wchar_t*); +_CRTIMP int __cdecl wcsicoll (const wchar_t*, const wchar_t*); +_CRTIMP wchar_t* __cdecl wcslwr (wchar_t*); +_CRTIMP int __cdecl wcsnicmp (const wchar_t*, const wchar_t*, size_t); +_CRTIMP wchar_t* __cdecl wcsnset (wchar_t*, wchar_t, size_t); +_CRTIMP wchar_t* __cdecl wcsrev (wchar_t*); +_CRTIMP wchar_t* __cdecl wcsset (wchar_t*, wchar_t); +_CRTIMP wchar_t* __cdecl wcsupr (wchar_t*); +#endif /* Not _NO_OLDNAMES */ + +#endif /* Not strict ANSI */ + +#define _WSTRING_DEFINED +#endif /* _WSTRING_DEFINED */ + +#ifdef __cplusplus +} +#endif + +#endif /* Not RC_INVOKED */ + +#endif /* Not _STRING_H_ */ diff --git a/reactos/lib/mingw/include/strings.h b/reactos/lib/mingw/include/strings.h new file mode 100644 index 00000000000..2a777c2d752 --- /dev/null +++ b/reactos/lib/mingw/include/strings.h @@ -0,0 +1,12 @@ +/* + File: strings.h + Copyright: Public Domain + + This file is provided because non ANSI fuctions are described in string.h + that belong in strings.h. These functions are provided for in the OLDNAME + libraries. +*/ +#if !defined(_STRINGS_H_) +# define _STRINGS_H_ 1 +# include +#endif diff --git a/reactos/lib/mingw/include/sys/fcntl.h b/reactos/lib/mingw/include/sys/fcntl.h new file mode 100644 index 00000000000..a2090bc82fe --- /dev/null +++ b/reactos/lib/mingw/include/sys/fcntl.h @@ -0,0 +1,7 @@ +/* + * This file is part of the Mingw32 package. + * + * This fcntl.h maps to the root fcntl.h + */ + +#include diff --git a/reactos/lib/mingw/include/sys/file.h b/reactos/lib/mingw/include/sys/file.h new file mode 100644 index 00000000000..e95654c09a0 --- /dev/null +++ b/reactos/lib/mingw/include/sys/file.h @@ -0,0 +1,7 @@ +/* + * This file is part of the Mingw32 package. + * + * This file.h maps to the root fcntl.h + * TODO? + */ +#include diff --git a/reactos/lib/mingw/include/sys/locking.h b/reactos/lib/mingw/include/sys/locking.h new file mode 100644 index 00000000000..eee5e3c5413 --- /dev/null +++ b/reactos/lib/mingw/include/sys/locking.h @@ -0,0 +1,31 @@ +/* + * locking.h + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + * Constants for the mode parameter of the locking function. + * + */ + +#ifndef _LOCKING_H_ +#define _LOCKING_H_ + +/* All the headers include this file. */ +#include <_mingw.h> + +#define _LK_UNLCK 0 /* Unlock */ +#define _LK_LOCK 1 /* Lock */ +#define _LK_NBLCK 2 /* Non-blocking lock */ +#define _LK_RLCK 3 /* Lock for read only */ +#define _LK_NBRLCK 4 /* Non-blocking lock for read only */ + +#ifndef NO_OLDNAMES +#define LK_UNLCK _LK_UNLCK +#define LK_LOCK _LK_LOCK +#define LK_NBLCK _LK_NBLCK +#define LK_RLCK _LK_RLCK +#define LK_NBRLCK _LK_NBRLCK +#endif /* Not NO_OLDNAMES */ + +#endif /* Not _LOCKING_H_ */ diff --git a/reactos/lib/mingw/include/sys/param.h b/reactos/lib/mingw/include/sys/param.h new file mode 100644 index 00000000000..74966bd78da --- /dev/null +++ b/reactos/lib/mingw/include/sys/param.h @@ -0,0 +1,22 @@ +/* + * param.h + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + */ + +#ifndef _SYS_PARAM_H +#define _SYS_PARAM_H + +#include +#include + +/* These are useful for cross-compiling */ +#define BIG_ENDIAN 4321 +#define LITTLE_ENDIAN 1234 +#define BYTE_ORDER LITTLE_ENDIAN + +#define MAXPATHLEN PATH_MAX + +#endif diff --git a/reactos/lib/mingw/include/sys/stat.h b/reactos/lib/mingw/include/sys/stat.h new file mode 100644 index 00000000000..e0d01eb115c --- /dev/null +++ b/reactos/lib/mingw/include/sys/stat.h @@ -0,0 +1,195 @@ +/* + * stat.h + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + * Symbolic constants for opening and creating files, also stat, fstat and + * chmod functions. + * + */ + +#ifndef _STAT_H_ +#define _STAT_H_ + +/* All the headers include this file. */ +#include <_mingw.h> + +#define __need_size_t +#define __need_wchar_t +#ifndef RC_INVOKED +#include +#endif /* Not RC_INVOKED */ + +#include + +/* + * Constants for the stat st_mode member. + */ +#define _S_IFIFO 0x1000 /* FIFO */ +#define _S_IFCHR 0x2000 /* Character */ +#define _S_IFBLK 0x3000 /* Block: Is this ever set under w32? */ +#define _S_IFDIR 0x4000 /* Directory */ +#define _S_IFREG 0x8000 /* Regular */ + +#define _S_IFMT 0xF000 /* File type mask */ + +#define _S_IEXEC 0x0040 +#define _S_IWRITE 0x0080 +#define _S_IREAD 0x0100 + +#define _S_IRWXU (_S_IREAD | _S_IWRITE | _S_IEXEC) +#define _S_IXUSR _S_IEXEC +#define _S_IWUSR _S_IWRITE +#define _S_IRUSR _S_IREAD + +#define _S_ISDIR(m) (((m) & _S_IFMT) == _S_IFDIR) +#define _S_ISFIFO(m) (((m) & _S_IFMT) == _S_IFIFO) +#define _S_ISCHR(m) (((m) & _S_IFMT) == _S_IFCHR) +#define _S_ISBLK(m) (((m) & _S_IFMT) == _S_IFBLK) +#define _S_ISREG(m) (((m) & _S_IFMT) == _S_IFREG) + +#ifndef _NO_OLDNAMES + +#define S_IFIFO _S_IFIFO +#define S_IFCHR _S_IFCHR +#define S_IFBLK _S_IFBLK +#define S_IFDIR _S_IFDIR +#define S_IFREG _S_IFREG +#define S_IFMT _S_IFMT +#define S_IEXEC _S_IEXEC +#define S_IWRITE _S_IWRITE +#define S_IREAD _S_IREAD +#define S_IRWXU _S_IRWXU +#define S_IXUSR _S_IXUSR +#define S_IWUSR _S_IWUSR +#define S_IRUSR _S_IRUSR + +#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) +#define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) +#define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) +#define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) +#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) + +#endif /* Not _NO_OLDNAMES */ + +#ifndef RC_INVOKED + +#ifndef _STAT_DEFINED +/* + * The structure manipulated and returned by stat and fstat. + * + * NOTE: If called on a directory the values in the time fields are not only + * invalid, they will cause localtime et. al. to return NULL. And calling + * asctime with a NULL pointer causes an Invalid Page Fault. So watch it! + */ +struct _stat +{ + _dev_t st_dev; /* Equivalent to drive number 0=A 1=B ... */ + _ino_t st_ino; /* Always zero ? */ + _mode_t st_mode; /* See above constants */ + short st_nlink; /* Number of links. */ + short st_uid; /* User: Maybe significant on NT ? */ + short st_gid; /* Group: Ditto */ + _dev_t st_rdev; /* Seems useless (not even filled in) */ + _off_t st_size; /* File size in bytes */ + time_t st_atime; /* Accessed date (always 00:00 hrs local + * on FAT) */ + time_t st_mtime; /* Modified time */ + time_t st_ctime; /* Creation time */ +}; + +#ifndef _NO_OLDNAMES +/* NOTE: Must be the same as _stat above. */ +struct stat +{ + _dev_t st_dev; /* Equivalent to drive number 0=A 1=B ... */ + _ino_t st_ino; /* Always zero ? */ + _mode_t st_mode; /* See above constants */ + short st_nlink; /* Number of links. */ + short st_uid; /* User: Maybe significant on NT ? */ + short st_gid; /* Group: Ditto */ + _dev_t st_rdev; /* Seems useless (not even filled in) */ + _off_t st_size; /* File size in bytes */ + time_t st_atime; /* Accessed date (always 00:00 hrs local + * on FAT) */ + time_t st_mtime; /* Modified time */ + time_t st_ctime; /* Creation time */ +}; +#endif /* _NO_OLDNAMES */ + +#if defined (__MSVCRT__) +struct _stati64 { + _dev_t st_dev; + _ino_t st_ino; + unsigned short st_mode; + short st_nlink; + short st_uid; + short st_gid; + _dev_t st_rdev; + __int64 st_size; + time_t st_atime; + time_t st_mtime; + time_t st_ctime; +}; + +struct __stat64 +{ + _dev_t st_dev; + _ino_t st_ino; + _mode_t st_mode; + short st_nlink; + short st_uid; + short st_gid; + _dev_t st_rdev; + __int64 st_size; + __time64_t st_atime; + __time64_t st_mtime; + __time64_t st_ctime; +}; +#endif /* __MSVCRT__ */ +#define _STAT_DEFINED +#endif /* _STAT_DEFINED */ + +#ifdef __cplusplus +extern "C" { +#endif + +_CRTIMP int __cdecl _fstat (int, struct _stat*); +_CRTIMP int __cdecl _chmod (const char*, int); +_CRTIMP int __cdecl _stat (const char*, struct _stat*); + +#ifndef _NO_OLDNAMES + +/* These functions live in liboldnames.a. */ +_CRTIMP int __cdecl fstat (int, struct stat*); +_CRTIMP int __cdecl chmod (const char*, int); +_CRTIMP int __cdecl stat (const char*, struct stat*); + +#endif /* Not _NO_OLDNAMES */ + +#if defined (__MSVCRT__) +_CRTIMP int __cdecl _fstati64(int, struct _stati64 *); +_CRTIMP int __cdecl _stati64(const char *, struct _stati64 *); +/* These require newer versions of msvcrt.dll (6.10 or higher). */ +#if __MSVCRT_VERSION__ >= 0x0601 +_CRTIMP int __cdecl _fstat64 (int, struct __stat64*); +_CRTIMP int __cdecl _stat64 (const char*, struct __stat64*); +#endif /* __MSVCRT_VERSION__ >= 0x0601 */ +#if !defined ( _WSTAT_DEFINED) /* also declared in wchar.h */ +_CRTIMP int __cdecl _wstat(const wchar_t*, struct _stat*); +_CRTIMP int __cdecl _wstati64 (const wchar_t*, struct _stati64*); +#if __MSVCRT_VERSION__ >= 0x0601 +_CRTIMP int __cdecl _wstat64 (const wchar_t*, struct __stat64*); +#endif /* __MSVCRT_VERSION__ >= 0x0601 */ +#define _WSTAT_DEFINED +#endif /* _WSTAT_DEFIND */ +#endif /* __MSVCRT__ */ + +#ifdef __cplusplus +} +#endif + +#endif /* Not RC_INVOKED */ + +#endif /* Not _STAT_H_ */ diff --git a/reactos/lib/mingw/include/sys/time.h b/reactos/lib/mingw/include/sys/time.h new file mode 100644 index 00000000000..17a3960a9af --- /dev/null +++ b/reactos/lib/mingw/include/sys/time.h @@ -0,0 +1,47 @@ +#ifndef _SYS_TIME_H_ +#define _SYS_TIME_H_ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef _TIMEVAL_DEFINED /* also in winsock[2].h */ +#define _TIMEVAL_DEFINED +struct timeval { + long tv_sec; + long tv_usec; +}; +#define timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec) +#define timercmp(tvp, uvp, cmp) \ + (((tvp)->tv_sec != (uvp)->tv_sec) ? \ + ((tvp)->tv_sec cmp (uvp)->tv_sec) : \ + ((tvp)->tv_usec cmp (uvp)->tv_usec)) +#define timerclear(tvp) (tvp)->tv_sec = (tvp)->tv_usec = 0 +#endif /* _TIMEVAL_DEFINED */ + +/* Provided for compatibility with code that assumes that + the presence of gettimeofday function implies a definition + of struct timezone. */ +struct timezone +{ + int tz_minuteswest; /* of Greenwich */ + int tz_dsttime; /* type of dst correction to apply */ +}; + +/* + Implementation as per: + The Open Group Base Specifications, Issue 6 + IEEE Std 1003.1, 2004 Edition + + The timezone pointer arg is ignored. Errors are ignored. +*/ +int __cdecl gettimeofday(struct timeval *__restrict__, + void *__restrict__ /* tzp (unused) */); + +#ifdef __cplusplus +} +#endif + + +#endif /* _SYS_TIME_H_ */ diff --git a/reactos/lib/mingw/include/sys/timeb.h b/reactos/lib/mingw/include/sys/timeb.h new file mode 100644 index 00000000000..4cb4b2e379b --- /dev/null +++ b/reactos/lib/mingw/include/sys/timeb.h @@ -0,0 +1,74 @@ +/* + * timeb.h + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + * Support for the UNIX System V ftime system call. + * + */ + +#ifndef _TIMEB_H_ +#define _TIMEB_H_ + +/* All the headers include this file. */ +#include <_mingw.h> +#include + +#ifndef RC_INVOKED + +/* + * TODO: Structure not tested. + */ +struct _timeb +{ + long time; + short millitm; + short timezone; + short dstflag; +}; + +#ifndef _NO_OLDNAMES +/* + * TODO: Structure not tested. + */ +struct timeb +{ + long time; + short millitm; + short timezone; + short dstflag; +}; +#endif + +struct __timeb64 +{ + __time64_t time; + short millitm; + short timezone; + short dstflag; +}; + +#ifdef __cplusplus +extern "C" { +#endif + +/* TODO: Not tested. */ +_CRTIMP void __cdecl _ftime (struct _timeb*); + +#ifndef _NO_OLDNAMES +_CRTIMP void __cdecl ftime (struct timeb*); +#endif /* Not _NO_OLDNAMES */ + +/* This requires newer versions of msvcrt.dll (6.10 or higher). */ +#if __MSVCRT_VERSION__ >= 0x0601 +_CRTIMP void __cdecl _ftime64 (struct __timeb64*); +#endif /* __MSVCRT_VERSION__ >= 0x0601 */ + +#ifdef __cplusplus +} +#endif + +#endif /* Not RC_INVOKED */ + +#endif /* Not _TIMEB_H_ */ diff --git a/reactos/lib/mingw/include/sys/types.h b/reactos/lib/mingw/include/sys/types.h new file mode 100644 index 00000000000..2bc04e755d2 --- /dev/null +++ b/reactos/lib/mingw/include/sys/types.h @@ -0,0 +1,120 @@ +/* + * types.h + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + * The definition of constants, data types and global variables. + * + */ + +#ifndef _TYPES_H_ +#define _TYPES_H_ + +/* All the headers include this file. */ +#include <_mingw.h> + +#define __need_wchar_t +#define __need_size_t +#define __need_ptrdiff_t +#ifndef RC_INVOKED +#include +#endif /* Not RC_INVOKED */ + +#ifndef RC_INVOKED + +#ifndef _TIME_T_DEFINED +typedef long time_t; +#define _TIME_T_DEFINED +#endif + +#ifndef _TIME64_T_DEFINED +typedef __int64 __time64_t; +#define _TIME64_T_DEFINED +#endif + +#ifndef _OFF_T_ +#define _OFF_T_ +typedef long _off_t; + +#ifndef _NO_OLDNAMES +typedef _off_t off_t; +#endif +#endif /* Not _OFF_T_ */ + + +#ifndef _DEV_T_ +#define _DEV_T_ +#ifdef __MSVCRT__ +typedef unsigned int _dev_t; +#else +typedef short _dev_t; +#endif + +#ifndef _NO_OLDNAMES +typedef _dev_t dev_t; +#endif +#endif /* Not _DEV_T_ */ + + +#ifndef _INO_T_ +#define _INO_T_ +typedef short _ino_t; + +#ifndef _NO_OLDNAMES +typedef _ino_t ino_t; +#endif +#endif /* Not _INO_T_ */ + + +#ifndef _PID_T_ +#define _PID_T_ +typedef int _pid_t; + +#ifndef _NO_OLDNAMES +typedef _pid_t pid_t; +#endif +#endif /* Not _PID_T_ */ + + +#ifndef _MODE_T_ +#define _MODE_T_ +typedef unsigned short _mode_t; + +#ifndef _NO_OLDNAMES +typedef _mode_t mode_t; +#endif +#endif /* Not _MODE_T_ */ + + +#ifndef _SIGSET_T_ +#define _SIGSET_T_ +typedef int _sigset_t; + +#ifndef _NO_OLDNAMES +typedef _sigset_t sigset_t; +#endif +#endif /* Not _SIGSET_T_ */ + +#ifndef _SSIZE_T_ +#define _SSIZE_T_ +typedef long _ssize_t; + +#ifndef _NO_OLDNAMES +typedef _ssize_t ssize_t; +#endif +#endif /* Not _SSIZE_T_ */ + +#ifndef _FPOS64_T_ +#define _FPOS64_T_ +typedef long long fpos64_t; +#endif + +#ifndef _OFF64_T_ +#define _OFF64_T_ +typedef long long off64_t; +#endif + +#endif /* Not RC_INVOKED */ + +#endif /* Not _TYPES_H_ */ diff --git a/reactos/lib/mingw/include/sys/unistd.h b/reactos/lib/mingw/include/sys/unistd.h new file mode 100644 index 00000000000..39eac4a9001 --- /dev/null +++ b/reactos/lib/mingw/include/sys/unistd.h @@ -0,0 +1,6 @@ +/* + * This file is part of the Mingw32 package. + * + * unistd.h maps (roughly) to io.h + */ +#include diff --git a/reactos/lib/mingw/include/sys/utime.h b/reactos/lib/mingw/include/sys/utime.h new file mode 100644 index 00000000000..75cfeb45a72 --- /dev/null +++ b/reactos/lib/mingw/include/sys/utime.h @@ -0,0 +1,82 @@ +/* + * utime.h + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + * Support for the utime function. + * + */ +#ifndef _UTIME_H_ +#define _UTIME_H_ + +/* All the headers include this file. */ +#include <_mingw.h> + +#define __need_wchar_t +#define __need_size_t +#ifndef RC_INVOKED +#include +#endif /* Not RC_INVOKED */ +#include + +#ifndef RC_INVOKED + +/* + * Structure used by _utime function. + */ +struct _utimbuf +{ + time_t actime; /* Access time */ + time_t modtime; /* Modification time */ +}; + + +#ifndef _NO_OLDNAMES +/* NOTE: Must be the same as _utimbuf above. */ +struct utimbuf +{ + time_t actime; + time_t modtime; +}; +#endif /* Not _NO_OLDNAMES */ + +struct __utimbuf64 +{ + __time64_t actime; + __time64_t modtime; +}; + + +#ifdef __cplusplus +extern "C" { +#endif + +_CRTIMP int __cdecl _utime (const char*, struct _utimbuf*); + +#ifndef _NO_OLDNAMES +_CRTIMP int __cdecl utime (const char*, struct utimbuf*); +#endif /* Not _NO_OLDNAMES */ + +_CRTIMP int __cdecl _futime (int, struct _utimbuf*); + +/* The wide character version, only available for MSVCRT versions of the + * C runtime library. */ +#ifdef __MSVCRT__ +_CRTIMP int __cdecl _wutime (const wchar_t*, struct _utimbuf*); +#endif /* MSVCRT runtime */ + +/* These require newer versions of msvcrt.dll (6.10 or higher). */ +#if __MSVCRT_VERSION__ >= 0x0601 +_CRTIMP int __cdecl _utime64 (const char*, struct __utimbuf64*); +_CRTIMP int __cdecl _wutime64 (const wchar_t*, struct __utimbuf64*); +_CRTIMP int __cdecl _futime64 (int, struct __utimbuf64*); +#endif /* __MSVCRT_VERSION__ >= 0x0601 */ + +#ifdef __cplusplus +} +#endif + +#endif /* Not RC_INVOKED */ + +#endif /* Not _UTIME_H_ */ diff --git a/reactos/lib/mingw/include/tchar.h b/reactos/lib/mingw/include/tchar.h new file mode 100644 index 00000000000..a07d75f4586 --- /dev/null +++ b/reactos/lib/mingw/include/tchar.h @@ -0,0 +1,418 @@ +/* + * tchar.h + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + * Unicode mapping layer for the standard C library. By including this + * file and using the 't' names for string functions + * (eg. _tprintf) you can make code which can be easily adapted to both + * Unicode and non-unicode environments. In a unicode enabled compile define + * _UNICODE before including tchar.h, otherwise the standard non-unicode + * library functions will be used. + * + * Note that you still need to include string.h or stdlib.h etc. to define + * the appropriate functions. Also note that there are several defines + * included for non-ANSI functions which are commonly available (but using + * the convention of prepending an underscore to non-ANSI library function + * names). + * + */ + +#ifndef _TCHAR_H_ +#define _TCHAR_H_ + +/* All the headers include this file. */ +#include <_mingw.h> + +/* + * NOTE: This tests _UNICODE, which is different from the UNICODE define + * used to differentiate Win32 API calls. + */ +#ifdef _UNICODE + +/* + * Include for wchar_t and WEOF if _UNICODE. + */ +#include + +/* + * Use TCHAR instead of char or wchar_t. It will be appropriately translated + * if _UNICODE is correctly defined (or not). + */ +#ifndef _TCHAR_DEFINED +#ifndef RC_INVOKED +typedef wchar_t TCHAR; +typedef wchar_t _TCHAR; +#endif /* Not RC_INVOKED */ +#define _TCHAR_DEFINED +#endif + +/* + * Use _TEOF instead of EOF or WEOF. It will be appropriately translated if + * _UNICODE is correctly defined (or not). + */ +#define _TEOF WEOF + +/* + * __TEXT is a private macro whose specific use is to force the expansion of a + * macro passed as an argument to the macros _T or _TEXT. DO NOT use this + * macro within your programs. It's name and function could change without + * notice. + */ +#define __TEXT(q) L##q + +/* for porting from other Windows compilers */ +#if 0 /* no wide startup module */ +#define _tmain wmain +#define _tWinMain wWinMain +#define _tenviron _wenviron +#define __targv __wargv +#endif + +/* + * Unicode functions + */ +#define _tprintf wprintf +#define _ftprintf fwprintf +#define _stprintf swprintf +#define _sntprintf _snwprintf +#define _vtprintf vwprintf +#define _vftprintf vfwprintf +#define _vstprintf vswprintf +#define _vsntprintf _vsnwprintf +#define _tscanf wscanf +#define _ftscanf fwscanf +#define _stscanf swscanf +#define _fgettc fgetwc +#define _fgettchar _fgetwchar +#define _fgetts fgetws +#define _fputtc fputwc +#define _fputtchar _fputwchar +#define _fputts fputws +#define _gettc getwc +#define _getts _getws +#define _puttc putwc +#define _puttchar putwchar +#define _putts _putws +#define _ungettc ungetwc +#define _tcstod wcstod +#define _tcstol wcstol +#define _tcstoul wcstoul +#define _itot _itow +#define _ltot _ltow +#define _ultot _ultow +#define _ttoi _wtoi +#define _ttol _wtol +#define _tcscat wcscat +#define _tcschr wcschr +#define _tcscmp wcscmp +#define _tcscpy wcscpy +#define _tcscspn wcscspn +#define _tcslen wcslen +#define _tcsncat wcsncat +#define _tcsncmp wcsncmp +#define _tcsncpy wcsncpy +#define _tcspbrk wcspbrk +#define _tcsrchr wcsrchr +#define _tcsspn wcsspn +#define _tcsstr wcsstr +#define _tcstok wcstok +#define _tcsdup _wcsdup +#define _tcsicmp _wcsicmp +#define _tcsnicmp _wcsnicmp +#define _tcsnset _wcsnset +#define _tcsrev _wcsrev +#define _tcsset _wcsset +#define _tcslwr _wcslwr +#define _tcsupr _wcsupr +#define _tcsxfrm wcsxfrm +#define _tcscoll wcscoll +#define _tcsicoll _wcsicoll +#define _istalpha iswalpha +#define _istupper iswupper +#define _istlower iswlower +#define _istdigit iswdigit +#define _istxdigit iswxdigit +#define _istspace iswspace +#define _istpunct iswpunct +#define _istalnum iswalnum +#define _istprint iswprint +#define _istgraph iswgraph +#define _istcntrl iswcntrl +#define _istascii iswascii +#define _totupper towupper +#define _totlower towlower +#define _tcsftime wcsftime +/* Macro functions */ +#define _tcsdec _wcsdec +#define _tcsinc _wcsinc +#define _tcsnbcnt _wcsncnt +#define _tcsnccnt _wcsncnt +#define _tcsnextc _wcsnextc +#define _tcsninc _wcsninc +#define _tcsspnp _wcsspnp +#define _wcsdec(_wcs1, _wcs2) ((_wcs1)>=(_wcs2) ? NULL : (_wcs2)-1) +#define _wcsinc(_wcs) ((_wcs)+1) +#define _wcsnextc(_wcs) ((unsigned int) *(_wcs)) +#define _wcsninc(_wcs, _inc) (((_wcs)+(_inc))) +#define _wcsncnt(_wcs, _cnt) ((wcslen(_wcs)>_cnt) ? _count : wcslen(_wcs)) +#define _wcsspnp(_wcs1, _wcs2) ((*((_wcs1)+wcsspn(_wcs1,_wcs2))) ? ((_wcs1)+wcsspn(_wcs1,_wcs2)) : NULL) + +#if 1 /* defined __MSVCRT__ */ +/* + * These wide functions not in crtdll.dll. + * Define macros anyway so that _wfoo rather than _tfoo is undefined + */ +#define _ttoi64 _wtoi64 +#define _i64tot _i64tow +#define _ui64tot _ui64tow +#define _tasctime _wasctime +#define _tctime _wctime +#define _tstrdate _wstrdate +#define _tstrtime _wstrtime +#define _tutime _wutime +#define _tcsnccoll _wcsncoll +#define _tcsncoll _wcsncoll +#define _tcsncicoll _wcsnicoll +#define _tcsnicoll _wcsnicoll +#define _taccess _waccess +#define _tchmod _wchmod +#define _tcreat _wcreat +#define _tfindfirst _wfindfirst +#define _tfindnext _wfindnext +#define _tfdopen _wfdopen +#define _tfopen _wfopen +#define _tfreopen _wfreopen +#define _tfsopen _wfsopen +#define _tgetenv _wgetenv +#define _tputenv _wputenv +#define _tsearchenv _wsearchenv +#define _tmakepath _wmakepath +#define _tsplitpath _wsplitpath +#define _tfullpath _wfullpath +#define _tmktemp _wmktemp +#define _topen _wopen +#define _tremove _wremove +#define _trename _wrename +#define _tsopen _wsopen +#define _tsetlocale _wsetlocale +#define _tunlink _wunlink +#define _tfinddata_t _wfinddata_t +#define _tfindfirsti64 _wfindfirsti64 +#define _tfindnexti64 _wfindnexti64 +#define _tfinddatai64_t _wfinddatai64_t +#define _tchdir _wchdir +#define _tgetcwd _wgetcwd +#define _tgetdcwd _wgetdcwd +#define _tmkdir _wmkdir +#define _trmdir _wrmdir +#define _tstat _wstat +#define _tstati64 _wstati64 +#define _tstat64 _wstat64 +#endif /* __MSVCRT__ */ + +/* dirent structures and functions */ +#define _tdirent _wdirent +#define _TDIR _WDIR +#define _topendir _wopendir +#define _tclosedir _wclosedir +#define _treaddir _wreaddir +#define _trewinddir _wrewinddir +#define _ttelldir _wtelldir +#define _tseekdir _wseekdir + +#else /* Not _UNICODE */ + +/* + * TCHAR, the type you should use instead of char. + */ +#ifndef _TCHAR_DEFINED +#ifndef RC_INVOKED +typedef char TCHAR; +typedef char _TCHAR; +#endif +#define _TCHAR_DEFINED +#endif + +/* + * _TEOF, the constant you should use instead of EOF. + */ +#define _TEOF EOF + +/* + * __TEXT is a private macro whose specific use is to force the expansion of a + * macro passed as an argument to the macros _T or _TEXT. DO NOT use this + * macro within your programs. It's name and function could change without + * notice. + */ +#define __TEXT(q) q + +/* for porting from other Windows compilers */ +#define _tmain main +#define _tWinMain WinMain +#define _tenviron _environ +#define __targv __argv + +/* + * Non-unicode (standard) functions + */ + +#define _tprintf printf +#define _ftprintf fprintf +#define _stprintf sprintf +#define _sntprintf _snprintf +#define _vtprintf vprintf +#define _vftprintf vfprintf +#define _vstprintf vsprintf +#define _vsntprintf _vsnprintf +#define _tscanf scanf +#define _ftscanf fscanf +#define _stscanf sscanf +#define _fgettc fgetc +#define _fgettchar _fgetchar +#define _fgetts fgets +#define _fputtc fputc +#define _fputtchar _fputchar +#define _fputts fputs +#define _tfdopen _fdopen +#define _tfopen fopen +#define _tfreopen freopen +#define _tfsopen _fsopen +#define _tgetenv getenv +#define _tputenv _putenv +#define _tsearchenv _searchenv +#define _tmakepath _makepath +#define _tsplitpath _splitpath +#define _tfullpath _fullpath +#define _gettc getc +#define _getts gets +#define _puttc putc +#define _puttchar putchar +#define _putts puts +#define _ungettc ungetc +#define _tcstod strtod +#define _tcstol strtol +#define _tcstoul strtoul +#define _itot _itoa +#define _ltot _ltoa +#define _ultot _ultoa +#define _ttoi atoi +#define _ttol atol +#define _tcscat strcat +#define _tcschr strchr +#define _tcscmp strcmp +#define _tcscpy strcpy +#define _tcscspn strcspn +#define _tcslen strlen +#define _tcsncat strncat +#define _tcsncmp strncmp +#define _tcsncpy strncpy +#define _tcspbrk strpbrk +#define _tcsrchr strrchr +#define _tcsspn strspn +#define _tcsstr strstr +#define _tcstok strtok +#define _tcsdup _strdup +#define _tcsicmp _stricmp +#define _tcsnicmp _strnicmp +#define _tcsnset _strnset +#define _tcsrev _strrev +#define _tcsset _strset +#define _tcslwr _strlwr +#define _tcsupr _strupr +#define _tcsxfrm strxfrm +#define _tcscoll strcoll +#define _tcsicoll _stricoll +#define _istalpha isalpha +#define _istupper isupper +#define _istlower islower +#define _istdigit isdigit +#define _istxdigit isxdigit +#define _istspace isspace +#define _istpunct ispunct +#define _istalnum isalnum +#define _istprint isprint +#define _istgraph isgraph +#define _istcntrl iscntrl +#define _istascii isascii +#define _totupper toupper +#define _totlower tolower +#define _tasctime asctime +#define _tctime ctime +#define _tstrdate _strdate +#define _tstrtime _strtime +#define _tutime _utime +#define _tcsftime strftime +/* Macro functions */ +#define _tcsdec _strdec +#define _tcsinc _strinc +#define _tcsnbcnt _strncnt +#define _tcsnccnt _strncnt +#define _tcsnextc _strnextc +#define _tcsninc _strninc +#define _tcsspnp _strspnp +#define _strdec(_str1, _str2) ((_str1)>=(_str2) ? NULL : (_str2)-1) +#define _strinc(_str) ((_str)+1) +#define _strnextc(_str) ((unsigned int) *(_str)) +#define _strninc(_str, _inc) (((_str)+(_inc))) +#define _strncnt(_str, _cnt) ((strlen(_str)>_cnt) ? _count : strlen(_str)) +#define _strspnp(_str1, _str2) ((*((_str1)+strspn(_str1,_str2))) ? ((_str1)+strspn(_str1,_str2)) : NULL) + +#define _tchmod _chmod +#define _tcreat _creat +#define _tfindfirst _findfirst +#define _tfindnext _findnext +#define _tmktemp _mktemp +#define _topen _open +#define _taccess _access +#define _tremove remove +#define _trename rename +#define _tsopen _sopen +#define _tsetlocale setlocale +#define _tunlink _unlink +#define _tfinddata_t _finddata_t +#define _tchdir _chdir +#define _tgetcwd _getcwd +#define _tgetdcwd _getdcwd +#define _tmkdir _mkdir +#define _trmdir _rmdir +#define _tstat _stat + +#if 1 /* defined __MSVCRT__ */ +/* Not in crtdll.dll. Define macros anyway? */ +#define _ttoi64 _atoi64 +#define _i64tot _i64toa +#define _ui64tot _ui64toa +#define _tcsnccoll _strncoll +#define _tcsncoll _strncoll +#define _tcsncicoll _strnicoll +#define _tcsnicoll _strnicoll +#define _tfindfirsti64 _findfirsti64 +#define _tfindnexti64 _findnexti64 +#define _tfinddatai64_t _finddatai64_t +#define _tstati64 _stati64 +#define _tstat64 _stat64 +#endif /* __MSVCRT__ */ + +/* dirent structures and functions */ +#define _tdirent dirent +#define _TDIR DIR +#define _topendir opendir +#define _tclosedir closedir +#define _treaddir readdir +#define _trewinddir rewinddir +#define _ttelldir telldir +#define _tseekdir seekdir + +#endif /* Not _UNICODE */ + +/* + * UNICODE a constant string when _UNICODE is defined else returns the string + * unmodified. Also defined in w32api/winnt.h. + */ +#define _TEXT(x) __TEXT(x) +#define _T(x) __TEXT(x) + +#endif /* Not _TCHAR_H_ */ + diff --git a/reactos/lib/mingw/include/time.h b/reactos/lib/mingw/include/time.h new file mode 100644 index 00000000000..13d4d1630b3 --- /dev/null +++ b/reactos/lib/mingw/include/time.h @@ -0,0 +1,218 @@ +/* + * time.h + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + * Date and time functions and types. + * + */ + +#ifndef _TIME_H_ +#define _TIME_H_ + +/* All the headers include this file. */ +#include <_mingw.h> + +#define __need_wchar_t +#define __need_size_t +#define __need_NULL +#ifndef RC_INVOKED +#include +#endif /* Not RC_INVOKED */ + +/* + * Number of clock ticks per second. A clock tick is the unit by which + * processor time is measured and is returned by 'clock'. + */ +#define CLOCKS_PER_SEC ((clock_t)1000) +#define CLK_TCK CLOCKS_PER_SEC + + +#ifndef RC_INVOKED + +/* + * A type for storing the current time and date. This is the number of + * seconds since midnight Jan 1, 1970. + * NOTE: This is also defined in non-ISO sys/types.h. + */ +#ifndef _TIME_T_DEFINED +typedef long time_t; +#define _TIME_T_DEFINED +#endif + +#ifndef __STRICT_ANSI__ +/* A 64-bit time_t to get to Y3K */ +#ifndef _TIME64_T_DEFINED +typedef __int64 __time64_t; +#define _TIME64_T_DEFINED +#endif +#endif +/* + * A type for measuring processor time (in clock ticks). + */ +#ifndef _CLOCK_T_DEFINED +typedef long clock_t; +#define _CLOCK_T_DEFINED +#endif + +#ifndef _TM_DEFINED +/* + * A structure for storing all kinds of useful information about the + * current (or another) time. + */ +struct tm +{ + int tm_sec; /* Seconds: 0-59 (K&R says 0-61?) */ + int tm_min; /* Minutes: 0-59 */ + int tm_hour; /* Hours since midnight: 0-23 */ + int tm_mday; /* Day of the month: 1-31 */ + int tm_mon; /* Months *since* january: 0-11 */ + int tm_year; /* Years since 1900 */ + int tm_wday; /* Days since Sunday (0-6) */ + int tm_yday; /* Days since Jan. 1: 0-365 */ + int tm_isdst; /* +1 Daylight Savings Time, 0 No DST, + * -1 don't know */ +}; +#define _TM_DEFINED +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +_CRTIMP clock_t __cdecl clock (void); +_CRTIMP time_t __cdecl time (time_t*); +_CRTIMP double __cdecl difftime (time_t, time_t); +_CRTIMP time_t __cdecl mktime (struct tm*); + +/* + * These functions write to and return pointers to static buffers that may + * be overwritten by other function calls. Yikes! + * + * NOTE: localtime, and perhaps the others of the four functions grouped + * below may return NULL if their argument is not 'acceptable'. Also note + * that calling asctime with a NULL pointer will produce an Invalid Page + * Fault and crap out your program. Guess how I know. Hint: stat called on + * a directory gives 'invalid' times in st_atime etc... + */ +_CRTIMP char* __cdecl asctime (const struct tm*); +_CRTIMP char* __cdecl ctime (const time_t*); +_CRTIMP struct tm* __cdecl gmtime (const time_t*); +_CRTIMP struct tm* __cdecl localtime (const time_t*); + +_CRTIMP size_t __cdecl strftime (char*, size_t, const char*, const struct tm*); + +#ifndef __STRICT_ANSI__ + +extern _CRTIMP void __cdecl _tzset (void); + +#ifndef _NO_OLDNAMES +extern _CRTIMP void __cdecl tzset (void); +#endif + +_CRTIMP char* __cdecl _strdate(char*); +_CRTIMP char* __cdecl _strtime(char*); + +/* These require newer versions of msvcrt.dll (6.10 or higher). */ +#if __MSVCRT_VERSION__ >= 0x0601 +_CRTIMP __time64_t __cdecl _time64( __time64_t*); +_CRTIMP __time64_t __cdecl _mktime64 (struct tm*); +_CRTIMP char* __cdecl _ctime64 (const __time64_t*); +_CRTIMP struct tm* __cdecl _gmtime64 (const __time64_t*); +_CRTIMP struct tm* __cdecl _localtime64 (const __time64_t*); +#endif /* __MSVCRT_VERSION__ >= 0x0601 */ + +/* + * _daylight: non zero if daylight savings time is used. + * _timezone: difference in seconds between GMT and local time. + * _tzname: standard/daylight savings time zone names (an array with two + * elements). + */ +#ifdef __MSVCRT__ + +/* These are for compatibility with pre-VC 5.0 suppied MSVCRT. */ +extern _CRTIMP int* __cdecl __p__daylight (void); +extern _CRTIMP long* __cdecl __p__timezone (void); +extern _CRTIMP char** __cdecl __p__tzname (void); + +__MINGW_IMPORT int _daylight; +__MINGW_IMPORT long _timezone; +__MINGW_IMPORT char *_tzname[2]; + +#else /* not __MSVCRT (ie. crtdll) */ + +#ifndef __DECLSPEC_SUPPORTED + +extern int* _imp___daylight_dll; +extern long* _imp___timezone_dll; +extern char** _imp___tzname; + +#define _daylight (*_imp___daylight_dll) +#define _timezone (*_imp___timezone_dll) +#define _tzname (*_imp___tzname) + +#else /* __DECLSPEC_SUPPORTED */ + +__MINGW_IMPORT int _daylight_dll; +__MINGW_IMPORT long _timezone_dll; +__MINGW_IMPORT char* _tzname[2]; + +#define _daylight _daylight_dll +#define _timezone _timezone_dll + +#endif /* __DECLSPEC_SUPPORTED */ + +#endif /* not __MSVCRT__ */ + +#ifndef _NO_OLDNAMES + +#ifdef __MSVCRT__ + +/* These go in the oldnames import library for MSVCRT. */ +__MINGW_IMPORT int daylight; +__MINGW_IMPORT long timezone; +__MINGW_IMPORT char *tzname[2]; + +#else /* not __MSVCRT__ */ + +/* CRTDLL is royally messed up when it comes to these macros. + TODO: import and alias these via oldnames import library instead + of macros. */ + +#define daylight _daylight +/* NOTE: timezone not defined as macro because it would conflict with + struct timezone in sys/time.h. + Also, tzname used to a be macro, but now it's in moldname. */ +__MINGW_IMPORT char *tzname[2]; + +#endif /* not __MSVCRT__ */ + +#endif /* Not _NO_OLDNAMES */ +#endif /* Not __STRICT_ANSI__ */ + +#ifndef _WTIME_DEFINED +/* wide function prototypes, also declared in wchar.h */ +#ifndef __STRICT_ANSI__ +#ifdef __MSVCRT__ +_CRTIMP wchar_t* __cdecl _wasctime(const struct tm*); +_CRTIMP wchar_t* __cdecl _wctime(const time_t*); +_CRTIMP wchar_t* __cdecl _wstrdate(wchar_t*); +_CRTIMP wchar_t* __cdecl _wstrtime(wchar_t*); +#if __MSVCRT_VERSION__ >= 0x0601 +_CRTIMP wchar_t* __cdecl _wctime64 (const __time64_t*); +#endif +#endif /* __MSVCRT__ */ +#endif /* __STRICT_ANSI__ */ +_CRTIMP size_t __cdecl wcsftime (wchar_t*, size_t, const wchar_t*, const struct tm*); +#define _WTIME_DEFINED +#endif /* _WTIME_DEFINED */ + +#ifdef __cplusplus +} +#endif + +#endif /* Not RC_INVOKED */ + +#endif /* Not _TIME_H_ */ + diff --git a/reactos/lib/mingw/include/unistd.h b/reactos/lib/mingw/include/unistd.h new file mode 100644 index 00000000000..f3a54495e52 --- /dev/null +++ b/reactos/lib/mingw/include/unistd.h @@ -0,0 +1,33 @@ +/* + * This file is part of the Mingw32 package. + * + * unistd.h maps (roughly) to io.h + */ + +#ifndef _UNISTD_H +#define _UNISTD_H + +#include +#include + +#define __UNISTD_GETOPT__ +#include +#undef __UNISTD_GETOPT__ + +#ifdef __cplusplus +extern "C" { +#endif + +/* This is defined as a real library function to allow autoconf + to verify its existence. */ +int ftruncate(int, off_t); +__CRT_INLINE int ftruncate(int __fd, off_t __length) +{ + return _chsize (__fd, __length); +} + +#ifdef __cplusplus +} +#endif + +#endif /* _UNISTD_H */ diff --git a/reactos/lib/mingw/include/utime.h b/reactos/lib/mingw/include/utime.h new file mode 100644 index 00000000000..8285f38fdef --- /dev/null +++ b/reactos/lib/mingw/include/utime.h @@ -0,0 +1 @@ +#include diff --git a/reactos/lib/mingw/include/values.h b/reactos/lib/mingw/include/values.h new file mode 100644 index 00000000000..10e16a2810b --- /dev/null +++ b/reactos/lib/mingw/include/values.h @@ -0,0 +1,4 @@ +/* + * TODO: Nothing here yet. Should provide UNIX compatibility constants + * comparible to those in limits.h and float.h. + */ diff --git a/reactos/lib/mingw/include/varargs.h b/reactos/lib/mingw/include/varargs.h new file mode 100644 index 00000000000..c1197e97e2b --- /dev/null +++ b/reactos/lib/mingw/include/varargs.h @@ -0,0 +1,7 @@ +/* + * This is just an RC_INVOKED guard for the real varargs.h + * fixincluded in gcc system dir. One day we will delete this file. + */ +#ifndef RC_INVOKED +#include_next +#endif diff --git a/reactos/lib/mingw/include/wchar.h b/reactos/lib/mingw/include/wchar.h new file mode 100644 index 00000000000..2f5c6a9453d --- /dev/null +++ b/reactos/lib/mingw/include/wchar.h @@ -0,0 +1,475 @@ +/* + * wchar.h + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + * Defines of all functions for supporting wide characters. Actually it + * just includes all those headers, which is not a good thing to do from a + * processing time point of view, but it does mean that everything will be + * in sync. + * + */ + +#ifndef _WCHAR_H_ +#define _WCHAR_H_ + +/* All the headers include this file. */ +#include <_mingw.h> + +#ifndef RC_INVOKED + +#define __need_size_t +#define __need_wint_t +#define __need_wchar_t +#define __need_NULL +#include + +#ifndef __VALIST +#if defined __GNUC__ && __GNUC__ >= 3 +#define __need___va_list +#include +#define __VALIST __builtin_va_list +#else +#define __VALIST char* +#endif +#endif + +#endif /* Not RC_INVOKED */ + +/* + * MSDN says that isw* char classifications are in wchar.h and wctype.h. + * Although the wctype names are ANSI, their exposure in this header is + * not. + */ +#include + +#ifndef __STRICT_ANSI__ +/* This is necessary to support the the non-ANSI wchar declarations + here. */ +#include +#endif /* __STRICT_ANSI__ */ + +#define WCHAR_MIN 0 +#define WCHAR_MAX 0xffff + +#ifndef WEOF +#define WEOF (wchar_t)(0xFFFF) +#endif + +#ifndef RC_INVOKED + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef _FILE_DEFINED /* Also in stdio.h */ +#define _FILE_DEFINED +typedef struct _iobuf +{ + char* _ptr; + int _cnt; + char* _base; + int _flag; + int _file; + int _charbuf; + int _bufsiz; + char* _tmpfname; +} FILE; +#endif /* Not _FILE_DEFINED */ + +#ifndef _TIME_T_DEFINED /* Also in time.h */ +typedef long time_t; +#define _TIME_T_DEFINED +#endif + +#ifndef _TM_DEFINED /* Also in time.h */ +struct tm { + int tm_sec; /* seconds after the minute - [0,59] */ + int tm_min; /* minutes after the hour - [0,59] */ + int tm_hour; /* hours since midnight - [0,23] */ + int tm_mday; /* day of the month - [1,31] */ + int tm_mon; /* months since January - [0,11] */ + int tm_year; /* years since 1900 */ + int tm_wday; /* days since Sunday - [0,6] */ + int tm_yday; /* days since January 1 - [0,365] */ + int tm_isdst; /* daylight savings time flag */ + }; +#define _TM_DEFINED +#endif + +#ifndef _WSTDIO_DEFINED +/* Also in stdio.h - keep in sync */ +_CRTIMP int __cdecl fwprintf (FILE*, const wchar_t*, ...); +_CRTIMP int __cdecl wprintf (const wchar_t*, ...); +_CRTIMP int __cdecl swprintf (wchar_t*, const wchar_t*, ...); +_CRTIMP int __cdecl _snwprintf (wchar_t*, size_t, const wchar_t*, ...); +_CRTIMP int __cdecl vfwprintf (FILE*, const wchar_t*, __VALIST); +_CRTIMP int __cdecl vwprintf (const wchar_t*, __VALIST); +_CRTIMP int __cdecl vswprintf (wchar_t*, const wchar_t*, __VALIST); +_CRTIMP int __cdecl _vsnwprintf (wchar_t*, size_t, const wchar_t*, __VALIST); +_CRTIMP int __cdecl fwscanf (FILE*, const wchar_t*, ...); +_CRTIMP int __cdecl wscanf (const wchar_t*, ...); +_CRTIMP int __cdecl swscanf (const wchar_t*, const wchar_t*, ...); +_CRTIMP wint_t __cdecl fgetwc (FILE*); +_CRTIMP wint_t __cdecl fputwc (wchar_t, FILE*); +_CRTIMP wint_t __cdecl ungetwc (wchar_t, FILE*); + +#ifdef __MSVCRT__ +_CRTIMP wchar_t* __cdecl fgetws (wchar_t*, int, FILE*); +_CRTIMP int __cdecl fputws (const wchar_t*, FILE*); +_CRTIMP wint_t __cdecl getwc (FILE*); +_CRTIMP wint_t __cdecl getwchar (void); +_CRTIMP wint_t __cdecl putwc (wint_t, FILE*); +_CRTIMP wint_t __cdecl putwchar (wint_t); +#ifndef __STRICT_ANSI__ +_CRTIMP wchar_t* __cdecl _getws (wchar_t*); +_CRTIMP int __cdecl _putws (const wchar_t*); +_CRTIMP FILE* __cdecl _wfdopen(int, wchar_t *); +_CRTIMP FILE* __cdecl _wfopen (const wchar_t*, const wchar_t*); +_CRTIMP FILE* __cdecl _wfreopen (const wchar_t*, const wchar_t*, FILE*); +_CRTIMP FILE* __cdecl _wfsopen (const wchar_t*, const wchar_t*, int); +_CRTIMP wchar_t* __cdecl _wtmpnam (wchar_t*); +_CRTIMP wchar_t* __cdecl _wtempnam (const wchar_t*, const wchar_t*); +_CRTIMP int __cdecl _wrename (const wchar_t*, const wchar_t*); +_CRTIMP int __cdecl _wremove (const wchar_t*); +_CRTIMP void __cdecl _wperror (const wchar_t*); +_CRTIMP FILE* __cdecl _wpopen (const wchar_t*, const wchar_t*); +#endif /* __STRICT_ANSI__ */ +#endif /* __MSVCRT__ */ + +#ifndef __NO_ISOCEXT /* externs in libmingwex.a */ +int __cdecl snwprintf (wchar_t* s, size_t n, const wchar_t* format, ...); +__CRT_INLINE int __cdecl +vsnwprintf (wchar_t* s, size_t n, const wchar_t* format, __VALIST arg) + { return _vsnwprintf ( s, n, format, arg);} +int __cdecl vwscanf (const wchar_t * __restrict__, __VALIST); +int __cdecl vfwscanf (FILE * __restrict__, + const wchar_t * __restrict__, __VALIST); +int __cdecl vswscanf (const wchar_t * __restrict__, + const wchar_t * __restrict__, __VALIST); +#endif + +#define _WSTDIO_DEFINED +#endif /* _WSTDIO_DEFINED */ + +#ifndef _WSTDLIB_DEFINED /* also declared in stdlib.h */ +_CRTIMP long __cdecl wcstol (const wchar_t*, wchar_t**, int); +_CRTIMP unsigned long __cdecl wcstoul (const wchar_t*, wchar_t**, int); +_CRTIMP double __cdecl wcstod (const wchar_t*, wchar_t**); +#if !defined __NO_ISOCEXT /* extern stub in static libmingwex.a */ +__CRT_INLINE float __cdecl wcstof( const wchar_t *nptr, wchar_t **endptr) +{ return (wcstod(nptr, endptr)); } +long double __cdecl wcstold (const wchar_t * __restrict__, wchar_t ** __restrict__); +#endif /* __NO_ISOCEXT */ +#define _WSTDLIB_DEFINED +#endif /* _WSTDLIB_DEFINED */ + +#ifndef _WTIME_DEFINED +#ifndef __STRICT_ANSI__ +#ifdef __MSVCRT__ +/* wide function prototypes, also declared in time.h */ +_CRTIMP wchar_t* __cdecl _wasctime (const struct tm*); +_CRTIMP wchar_t* __cdecl _wctime (const time_t*); +_CRTIMP wchar_t* __cdecl _wstrdate (wchar_t*); +_CRTIMP wchar_t* __cdecl _wstrtime (wchar_t*); +#if __MSVCRT_VERSION__ >= 0x601 +_CRTIMP wchar_t* __cdecl _wctime64 (const __time64_t*); +#endif +#endif /* __MSVCRT__ */ +#endif /* __STRICT_ANSI__ */ +_CRTIMP size_t __cdecl wcsftime (wchar_t*, size_t, const wchar_t*, const struct tm*); +#define _WTIME_DEFINED +#endif /* _WTIME_DEFINED */ + + +#ifndef _WSTRING_DEFINED +/* + * Unicode versions of the standard string calls. + * Also in string.h. + */ +_CRTIMP wchar_t* __cdecl wcscat (wchar_t*, const wchar_t*); +_CRTIMP wchar_t* __cdecl wcschr (const wchar_t*, wchar_t); +_CRTIMP int __cdecl wcscmp (const wchar_t*, const wchar_t*); +_CRTIMP int __cdecl wcscoll (const wchar_t*, const wchar_t*); +_CRTIMP wchar_t* __cdecl wcscpy (wchar_t*, const wchar_t*); +_CRTIMP size_t __cdecl wcscspn (const wchar_t*, const wchar_t*); +/* Note: _wcserror requires __MSVCRT_VERSION__ >= 0x0700. */ +_CRTIMP size_t __cdecl wcslen (const wchar_t*); +_CRTIMP wchar_t* __cdecl wcsncat (wchar_t*, const wchar_t*, size_t); +_CRTIMP int __cdecl wcsncmp(const wchar_t*, const wchar_t*, size_t); +_CRTIMP wchar_t* __cdecl wcsncpy(wchar_t*, const wchar_t*, size_t); +_CRTIMP wchar_t* __cdecl wcspbrk(const wchar_t*, const wchar_t*); +_CRTIMP wchar_t* __cdecl wcsrchr(const wchar_t*, wchar_t); +_CRTIMP size_t __cdecl wcsspn(const wchar_t*, const wchar_t*); +_CRTIMP wchar_t* __cdecl wcsstr(const wchar_t*, const wchar_t*); +_CRTIMP wchar_t* __cdecl wcstok(wchar_t*, const wchar_t*); +_CRTIMP size_t __cdecl wcsxfrm(wchar_t*, const wchar_t*, size_t); + +#ifndef __STRICT_ANSI__ +/* + * Unicode versions of non-ANSI functions provided by CRTDLL. + */ + +/* NOTE: _wcscmpi not provided by CRTDLL, this define is for portability */ +#define _wcscmpi _wcsicmp + +_CRTIMP wchar_t* __cdecl _wcsdup (const wchar_t*); +_CRTIMP int __cdecl _wcsicmp (const wchar_t*, const wchar_t*); +_CRTIMP int __cdecl _wcsicoll (const wchar_t*, const wchar_t*); +_CRTIMP wchar_t* __cdecl _wcslwr (wchar_t*); +_CRTIMP int __cdecl _wcsnicmp (const wchar_t*, const wchar_t*, size_t); +_CRTIMP wchar_t* __cdecl _wcsnset (wchar_t*, wchar_t, size_t); +_CRTIMP wchar_t* __cdecl _wcsrev (wchar_t*); +_CRTIMP wchar_t* __cdecl _wcsset (wchar_t*, wchar_t); +_CRTIMP wchar_t* __cdecl _wcsupr (wchar_t*); + +#ifdef __MSVCRT__ +_CRTIMP int __cdecl _wcsncoll(const wchar_t*, const wchar_t*, size_t); +_CRTIMP int __cdecl _wcsnicoll(const wchar_t*, const wchar_t*, size_t); +#if __MSVCRT_VERSION__ >= 0x0700 +_CRTIMP wchar_t* __cdecl _wcserror(int); +_CRTIMP wchar_t* __cdecl __wcserror(const wchar_t*); +#endif +#endif + +#ifndef _NO_OLDNAMES +/* NOTE: There is no _wcscmpi, but this is for compatibility. */ +__CRT_INLINE int __cdecl +wcscmpi (const wchar_t * __ws1, const wchar_t * __ws2) + {return _wcsicmp (__ws1, __ws2);} +_CRTIMP wchar_t* __cdecl wcsdup (const wchar_t*); +_CRTIMP int __cdecl wcsicmp (const wchar_t*, const wchar_t*); +_CRTIMP int __cdecl wcsicoll (const wchar_t*, const wchar_t*); +_CRTIMP wchar_t* __cdecl wcslwr (wchar_t*); +_CRTIMP int __cdecl wcsnicmp (const wchar_t*, const wchar_t*, size_t); +_CRTIMP wchar_t* __cdecl wcsnset (wchar_t*, wchar_t, size_t); +_CRTIMP wchar_t* __cdecl wcsrev (wchar_t*); +_CRTIMP wchar_t* __cdecl wcsset (wchar_t*, wchar_t); +_CRTIMP wchar_t* __cdecl wcsupr (wchar_t*); +#endif /* Not _NO_OLDNAMES */ + +#endif /* Not strict ANSI */ + +#define _WSTRING_DEFINED +#endif /* _WSTRING_DEFINED */ + +/* These are resolved by -lmingwex. Alternatively, they can be resolved by + adding -lmsvcp60 to your command line, which will give you the VC++ + versions of these functions. If you want the latter and don't have + msvcp60.dll in your windows system directory, you can easily obtain + it with a search from your favorite search engine. */ +#ifndef __STRICT_ANSI__ +typedef wchar_t _Wint_t; +#endif + +typedef int mbstate_t; + +wint_t __cdecl btowc(int); +size_t __cdecl mbrlen(const char * __restrict__, size_t, + mbstate_t * __restrict__); +size_t __cdecl mbrtowc(wchar_t * __restrict__, const char * __restrict__, + size_t, mbstate_t * __restrict__); +size_t __cdecl mbsrtowcs(wchar_t * __restrict__, const char ** __restrict__, + size_t, mbstate_t * __restrict__); +size_t __cdecl wcrtomb(char * __restrict__, wchar_t, + mbstate_t * __restrict__); +size_t __cdecl wcsrtombs(char * __restrict__, const wchar_t ** __restrict__, + size_t, mbstate_t * __restrict__); +int __cdecl wctob(wint_t); + +#ifndef __NO_ISOCEXT /* these need static lib libmingwex.a */ +__CRT_INLINE int __cdecl fwide(FILE* __UNUSED_PARAM(stream), + int __UNUSED_PARAM(mode)) + {return -1;} /* limited to byte orientation */ +__CRT_INLINE int __cdecl mbsinit(const mbstate_t* __UNUSED_PARAM(ps)) + {return 1;} +wchar_t* __cdecl wmemset(wchar_t *, wchar_t, size_t); +wchar_t* __cdecl wmemchr(const wchar_t*, wchar_t, size_t); +int wmemcmp(const wchar_t*, const wchar_t *, size_t); +wchar_t* __cdecl wmemcpy(wchar_t* __restrict__, + const wchar_t* __restrict__, + size_t); +wchar_t* __cdecl wmemmove(wchar_t* s1, const wchar_t *, size_t); +long long __cdecl wcstoll(const wchar_t * __restrict__, + wchar_t** __restrict__, int); +unsigned long long __cdecl wcstoull(const wchar_t * __restrict__, + wchar_t ** __restrict__, int); +#endif /* __NO_ISOCEXT */ + +#ifndef __STRICT_ANSI__ +/* non-ANSI wide char functions from io.h, direct.h, sys/stat.h and locale.h. */ + +#ifndef _FSIZE_T_DEFINED +typedef unsigned long _fsize_t; +#define _FSIZE_T_DEFINED +#endif + +#ifndef _WFINDDATA_T_DEFINED +struct _wfinddata_t { + unsigned attrib; + time_t time_create; /* -1 for FAT file systems */ + time_t time_access; /* -1 for FAT file systems */ + time_t time_write; + _fsize_t size; + wchar_t name[260]; /* may include spaces. */ +}; +struct _wfinddatai64_t { + unsigned attrib; + time_t time_create; + time_t time_access; + time_t time_write; + __int64 size; + wchar_t name[260]; +}; +struct __wfinddata64_t { + unsigned attrib; + __time64_t time_create; + __time64_t time_access; + __time64_t time_write; + _fsize_t size; + wchar_t name[260]; +}; +#define _WFINDDATA_T_DEFINED +#endif + +/* Wide character versions. Also defined in io.h. */ +/* CHECK: I believe these only exist in MSVCRT, and not in CRTDLL. Also + applies to other wide character versions? */ +#if !defined (_WIO_DEFINED) +#if defined (__MSVCRT__) +#include /* For intptr_t. */ +_CRTIMP int __cdecl _waccess (const wchar_t*, int); +_CRTIMP int __cdecl _wchmod (const wchar_t*, int); +_CRTIMP int __cdecl _wcreat (const wchar_t*, int); +_CRTIMP long __cdecl _wfindfirst (const wchar_t*, struct _wfinddata_t *); +_CRTIMP int __cdecl _wfindnext (long, struct _wfinddata_t *); +_CRTIMP int __cdecl _wunlink (const wchar_t*); +_CRTIMP int __cdecl _wopen (const wchar_t*, int, ...); +_CRTIMP int __cdecl _wsopen (const wchar_t*, int, int, ...); +_CRTIMP wchar_t* __cdecl _wmktemp (wchar_t*); +_CRTIMP long __cdecl _wfindfirsti64 (const wchar_t*, struct _wfinddatai64_t*); +_CRTIMP int __cdecl _wfindnexti64 (long, struct _wfinddatai64_t*); +#if __MSVCRT_VERSION__ >= 0x0601 +_CRTIMP intptr_t __cdecl _wfindfirst64(const wchar_t*, struct __wfinddata64_t*); +_CRTIMP intptr_t __cdecl _wfindnext64(intptr_t, struct __wfinddata64_t*); +#endif /* __MSVCRT_VERSION__ >= 0x0601 */ +#endif /* defined (__MSVCRT__) */ +#define _WIO_DEFINED +#endif /* _WIO_DEFINED */ + +#ifndef _WDIRECT_DEFINED +/* Also in direct.h */ +#ifdef __MSVCRT__ +_CRTIMP int __cdecl _wchdir (const wchar_t*); +_CRTIMP wchar_t* __cdecl _wgetcwd (wchar_t*, int); +_CRTIMP wchar_t* __cdecl _wgetdcwd (int, wchar_t*, int); +_CRTIMP int __cdecl _wmkdir (const wchar_t*); +_CRTIMP int __cdecl _wrmdir (const wchar_t*); +#endif /* __MSVCRT__ */ +#define _WDIRECT_DEFINED +#endif /* _WDIRECT_DEFINED */ + +#ifndef _STAT_DEFINED +/* + * The structure manipulated and returned by stat and fstat. + * + * NOTE: If called on a directory the values in the time fields are not only + * invalid, they will cause localtime et. al. to return NULL. And calling + * asctime with a NULL pointer causes an Invalid Page Fault. So watch it! + */ +struct _stat +{ + _dev_t st_dev; /* Equivalent to drive number 0=A 1=B ... */ + _ino_t st_ino; /* Always zero ? */ + _mode_t st_mode; /* See above constants */ + short st_nlink; /* Number of links. */ + short st_uid; /* User: Maybe significant on NT ? */ + short st_gid; /* Group: Ditto */ + _dev_t st_rdev; /* Seems useless (not even filled in) */ + _off_t st_size; /* File size in bytes */ + time_t st_atime; /* Accessed date (always 00:00 hrs local + * on FAT) */ + time_t st_mtime; /* Modified time */ + time_t st_ctime; /* Creation time */ +}; + +#ifndef _NO_OLDNAMES +/* NOTE: Must be the same as _stat above. */ +struct stat +{ + _dev_t st_dev; /* Equivalent to drive number 0=A 1=B ... */ + _ino_t st_ino; /* Always zero ? */ + _mode_t st_mode; /* See above constants */ + short st_nlink; /* Number of links. */ + short st_uid; /* User: Maybe significant on NT ? */ + short st_gid; /* Group: Ditto */ + _dev_t st_rdev; /* Seems useless (not even filled in) */ + _off_t st_size; /* File size in bytes */ + time_t st_atime; /* Accessed date (always 00:00 hrs local + * on FAT) */ + time_t st_mtime; /* Modified time */ + time_t st_ctime; /* Creation time */ +}; +#endif /* _NO_OLDNAMES */ + +#if defined (__MSVCRT__) +struct _stati64 { + _dev_t st_dev; + _ino_t st_ino; + unsigned short st_mode; + short st_nlink; + short st_uid; + short st_gid; + _dev_t st_rdev; + __int64 st_size; + time_t st_atime; + time_t st_mtime; + time_t st_ctime; + }; + +struct __stat64 +{ + _dev_t st_dev; + _ino_t st_ino; + _mode_t st_mode; + short st_nlink; + short st_uid; + short st_gid; + _dev_t st_rdev; + __int64 st_size; + __time64_t st_atime; + __time64_t st_mtime; + __time64_t st_ctime; +}; +#endif /* __MSVCRT__ */ +#define _STAT_DEFINED +#endif /* _STAT_DEFINED */ + +#if !defined ( _WSTAT_DEFINED) +/* also declared in sys/stat.h */ +#if defined __MSVCRT__ +_CRTIMP int __cdecl _wstat (const wchar_t*, struct _stat*); +_CRTIMP int __cdecl _wstati64 (const wchar_t*, struct _stati64*); +#if __MSVCRT_VERSION__ >= 0x0601 +_CRTIMP int __cdecl _wstat64 (const wchar_t*, struct __stat64*); +#endif /* __MSVCRT_VERSION__ >= 0x0601 */ +#endif /* __MSVCRT__ */ +#define _WSTAT_DEFINED +#endif /* ! _WSTAT_DEFIND */ + +#ifndef _WLOCALE_DEFINED /* also declared in locale.h */ +_CRTIMP wchar_t* __cdecl _wsetlocale (int, const wchar_t*); +#define _WLOCALE_DEFINED +#endif + +#endif /* not __STRICT_ANSI__ */ + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif + +#endif /* Not RC_INVOKED */ + +#endif /* not _WCHAR_H_ */ + diff --git a/reactos/lib/mingw/include/wctype.h b/reactos/lib/mingw/include/wctype.h new file mode 100644 index 00000000000..ed8f05f7764 --- /dev/null +++ b/reactos/lib/mingw/include/wctype.h @@ -0,0 +1,153 @@ +/* + * wctype.h + * + * Functions for testing wide character types and converting characters. + * + * This file is part of the Mingw32 package. + * + * Contributors: + * Created by Mumit Khan + * + * THIS SOFTWARE IS NOT COPYRIGHTED + * + * This source code is offered for use in the public domain. You may + * use, modify or distribute it freely. + * + * This code is distributed in the hope that it will be useful but + * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY + * DISCLAIMED. This includes but is not limited to warranties of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + */ + +#ifndef _WCTYPE_H_ +#define _WCTYPE_H_ + +/* All the headers include this file. */ +#include <_mingw.h> + +#define __need_wchar_t +#define __need_wint_t +#ifndef RC_INVOKED +#include +#endif /* Not RC_INVOKED */ + +/* + * The following flags are used to tell iswctype and _isctype what character + * types you are looking for. + */ +#define _UPPER 0x0001 +#define _LOWER 0x0002 +#define _DIGIT 0x0004 +#define _SPACE 0x0008 +#define _PUNCT 0x0010 +#define _CONTROL 0x0020 +#define _BLANK 0x0040 +#define _HEX 0x0080 +#define _LEADBYTE 0x8000 + +#define _ALPHA 0x0103 + +#ifndef RC_INVOKED + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef WEOF +#define WEOF (wchar_t)(0xFFFF) +#endif + +#ifndef _WCTYPE_T_DEFINED +typedef wchar_t wctype_t; +#define _WCTYPE_T_DEFINED +#endif + +/* Wide character equivalents - also in ctype.h */ +_CRTIMP int __cdecl iswalnum(wint_t); +_CRTIMP int __cdecl iswalpha(wint_t); +_CRTIMP int __cdecl iswascii(wint_t); +_CRTIMP int __cdecl iswcntrl(wint_t); +_CRTIMP int __cdecl iswctype(wint_t, wctype_t); +_CRTIMP int __cdecl is_wctype(wint_t, wctype_t); /* Obsolete! */ +_CRTIMP int __cdecl iswdigit(wint_t); +_CRTIMP int __cdecl iswgraph(wint_t); +_CRTIMP int __cdecl iswlower(wint_t); +_CRTIMP int __cdecl iswprint(wint_t); +_CRTIMP int __cdecl iswpunct(wint_t); +_CRTIMP int __cdecl iswspace(wint_t); +_CRTIMP int __cdecl iswupper(wint_t); +_CRTIMP int __cdecl iswxdigit(wint_t); + +/* Older MS docs uses wchar_t for arg and return type, while newer + online MS docs say arg is wint_t and return is int. + ISO C uses wint_t for both. */ +_CRTIMP wint_t __cdecl towlower (wint_t); +_CRTIMP wint_t __cdecl towupper (wint_t); + +_CRTIMP int __cdecl isleadbyte (int); + +/* Also in ctype.h */ + +#ifdef __DECLSPEC_SUPPORTED +__MINGW_IMPORT unsigned short _ctype[]; +# ifdef __MSVCRT__ + __MINGW_IMPORT unsigned short* _pctype; +# else /* CRTDLL */ + __MINGW_IMPORT unsigned short* _pctype_dll; +# define _pctype _pctype_dll +# endif + +#else /* ! __DECLSPEC_SUPPORTED */ +extern unsigned short** _imp___ctype; +#define _ctype (*_imp___ctype) +# ifdef __MSVCRT__ + extern unsigned short** _imp___pctype; +# define _pctype (*_imp___pctype) +# else /* CRTDLL */ + extern unsigned short** _imp___pctype_dll; +# define _pctype (*_imp___pctype_dll) +# endif /* CRTDLL */ +#endif /* __DECLSPEC_SUPPORTED */ + + +#if !(defined (__NO_INLINE__) || defined(__NO_CTYPE_INLINES) \ + || defined(__WCTYPE_INLINES_DEFINED)) +#define __WCTYPE_INLINES_DEFINED +__CRT_INLINE int __cdecl iswalnum(wint_t wc) {return (iswctype(wc,_ALPHA|_DIGIT));} +__CRT_INLINE int __cdecl iswalpha(wint_t wc) {return (iswctype(wc,_ALPHA));} +__CRT_INLINE int __cdecl iswascii(wint_t wc) {return ((wc & ~0x7F) ==0);} +__CRT_INLINE int __cdecl iswcntrl(wint_t wc) {return (iswctype(wc,_CONTROL));} +__CRT_INLINE int __cdecl iswdigit(wint_t wc) {return (iswctype(wc,_DIGIT));} +__CRT_INLINE int __cdecl iswgraph(wint_t wc) {return (iswctype(wc,_PUNCT|_ALPHA|_DIGIT));} +__CRT_INLINE int __cdecl iswlower(wint_t wc) {return (iswctype(wc,_LOWER));} +__CRT_INLINE int __cdecl iswprint(wint_t wc) {return (iswctype(wc,_BLANK|_PUNCT|_ALPHA|_DIGIT));} +__CRT_INLINE int __cdecl iswpunct(wint_t wc) {return (iswctype(wc,_PUNCT));} +__CRT_INLINE int __cdecl iswspace(wint_t wc) {return (iswctype(wc,_SPACE));} +__CRT_INLINE int __cdecl iswupper(wint_t wc) {return (iswctype(wc,_UPPER));} +__CRT_INLINE int __cdecl iswxdigit(wint_t wc) {return (iswctype(wc,_HEX));} +__CRT_INLINE int __cdecl isleadbyte(int c) {return (_pctype[(unsigned char)(c)] & _LEADBYTE);} +#endif /* !(defined(__NO_CTYPE_INLINES) || defined(__WCTYPE_INLINES_DEFINED)) */ + + +typedef wchar_t wctrans_t; + +/* These are resolved by libmingwex.a. Note, that they are also exported + by the MS C++ runtime lib (msvcp60.dll). The msvcp60.dll implementations + of wctrans and towctrans are not C99 compliant in that wctrans("tolower") + returns 0, while std specifies that a non-zero value should be returned + for a valid string descriptor. If you want the MS behaviour (and you have + msvcp60.dll in your path) add -lmsvcp60 to your command line. */ + +wint_t __cdecl towctrans(wint_t, wctrans_t); +wctrans_t __cdecl wctrans(const char*); +wctype_t __cdecl wctype(const char*); + +#ifdef __cplusplus +} +#endif + +#endif /* Not RC_INVOKED */ + +#endif /* Not _WCTYPE_H_ */ + diff --git a/reactos/lib/mingw/init.c b/reactos/lib/mingw/init.c new file mode 100644 index 00000000000..a30c035f25e --- /dev/null +++ b/reactos/lib/mingw/init.c @@ -0,0 +1,67 @@ +/* + * init.c + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + * Code to initialize standard file handles and command line arguments. + * This file is #included in both crt1.c and dllcrt1.c. + * + */ + +/* + * Access to a standard 'main'-like argument count and list. Also included + * is a table of environment variables. + */ +int _argc = 0; +char **_argv = 0; + +/* NOTE: Thanks to Pedro A. Aranda Gutiirrez for pointing + * this out to me. GetMainArgs (used below) takes a fourth argument + * which is an int that controls the globbing of the command line. If + * _CRT_glob is non-zero the command line will be globbed (e.g. *.* + * expanded to be all files in the startup directory). In the mingw32 + * library a _CRT_glob variable is defined as being -1, enabling + * this command line globbing by default. To turn it off and do all + * command line processing yourself (and possibly escape bogons in + * MS's globbing code) include a line in one of your source modules + * defining _CRT_glob and setting it to zero, like this: + * int _CRT_glob = 0; + */ +extern int _CRT_glob; + +#ifdef __MSVCRT__ +typedef struct { + int newmode; +} _startupinfo; +extern void __getmainargs (int *, char ***, char ***, int, _startupinfo *); +#else +extern void __GetMainArgs (int *, char ***, char ***, int); +#endif + +/* + * Initialize the _argc, _argv and environ variables. + */ +static void +_mingw32_init_mainargs () +{ + /* The environ variable is provided directly in stdlib.h through + * a dll function call. */ + char **dummy_environ; +#ifdef __MSVCRT__ + _startupinfo start_info; + start_info.newmode = 0; +#endif + + /* + * Microsoft's runtime provides a function for doing just that. + */ +#ifdef __MSVCRT__ + (void) __getmainargs (&_argc, &_argv, &dummy_environ, _CRT_glob, + &start_info); +#else + /* CRTDLL version */ + (void) __GetMainArgs (&_argc, &_argv, &dummy_environ, _CRT_glob); +#endif +} + diff --git a/reactos/lib/mingw/isascii.c b/reactos/lib/mingw/isascii.c new file mode 100644 index 00000000000..9d3385c3f01 --- /dev/null +++ b/reactos/lib/mingw/isascii.c @@ -0,0 +1,21 @@ +/* + * isascii.c + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + * Oldnames from ANSI header ctype.h + * + * Some wrapper functions for those old name functions whose appropriate + * equivalents are not simply underscore prefixed. + * + */ + +#include + +int +isascii (int c) +{ + return __isascii(c); +} + diff --git a/reactos/lib/mingw/iscsym.c b/reactos/lib/mingw/iscsym.c new file mode 100644 index 00000000000..ea9a571ac18 --- /dev/null +++ b/reactos/lib/mingw/iscsym.c @@ -0,0 +1,20 @@ +/* + * iscsym.c + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + * Oldnames from ANSI header ctype.h + * + * Some wrapper functions for those old name functions whose appropriate + * equivalents are not simply underscore prefixed. + * + */ + +#include + +int +iscsym (int c) +{ + return __iscsym(c); +} diff --git a/reactos/lib/mingw/iscsymf.c b/reactos/lib/mingw/iscsymf.c new file mode 100644 index 00000000000..6afde993e6a --- /dev/null +++ b/reactos/lib/mingw/iscsymf.c @@ -0,0 +1,21 @@ +/* + * iscsymf.c + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + * Oldnames from ANSI header ctype.h + * + * Some wrapper functions for those old name functions whose appropriate + * equivalents are not simply underscore prefixed. + * + */ + +#include + +int +iscsymf (int c) +{ + return __iscsymf(c); +} + diff --git a/reactos/lib/mingw/main.c b/reactos/lib/mingw/main.c new file mode 100644 index 00000000000..5eeb57044bb --- /dev/null +++ b/reactos/lib/mingw/main.c @@ -0,0 +1,79 @@ +/* + * main.c + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + * Extra startup code for applications which do not have a main function + * of their own (but do have a WinMain). Generally these are GUI + * applications, but they don't *have* to be. + * + */ + +#include +#include +#include + +#define ISSPACE(a) (a == ' ' || a == '\t') + +extern int PASCAL WinMain (HINSTANCE hInst, HINSTANCE hPrevInst, + LPSTR szCmdLine, int nShow); + +int +main (int argc, const char *argv[], const char *environ[]) +{ + char *szCmd; + STARTUPINFO startinfo; + int nRet; + + /* Get the command line passed to the process. */ + szCmd = GetCommandLineA (); + GetStartupInfoA (&startinfo); + + /* Strip off the name of the application and any leading + * whitespace. */ + if (szCmd) + { + while (ISSPACE (*szCmd)) + { + szCmd++; + } + + /* On my system I always get the app name enclosed + * in quotes... */ + if (*szCmd == '\"') + { + do + { + szCmd++; + } + while (*szCmd != '\"' && *szCmd != '\0'); + + if (*szCmd == '\"') + { + szCmd++; + } + } + else + { + /* If no quotes then assume first token is program + * name. */ + while (!ISSPACE (*szCmd) && *szCmd != '\0') + { + szCmd++; + } + } + + while (ISSPACE (*szCmd)) + { + szCmd++; + } + } + + nRet = WinMain (GetModuleHandle (NULL), NULL, szCmd, + (startinfo.dwFlags & STARTF_USESHOWWINDOW) ? + startinfo.wShowWindow : SW_SHOWDEFAULT); + + return nRet; +} + diff --git a/reactos/lib/mingw/mingw.rbuild b/reactos/lib/mingw/mingw.rbuild new file mode 100644 index 00000000000..47343e63281 --- /dev/null +++ b/reactos/lib/mingw/mingw.rbuild @@ -0,0 +1,36 @@ + + + + + + cpu_features.c + CRTfmode.c + CRTglob.c + CRTinit.c + gccmain.c + getopt.c + isascii.c + iscsym.c + iscsymf.c + pseudo-reloc.c + strcasecmp.c + strncasecmp.c + toascii.c + wcscmpi.c + _wgetopt.c + + + binmode.c + crt1.c + main.c + + + wbinmode.c + wcrt1.c + wmain.c + + + dllcrt1.c + + + diff --git a/reactos/lib/mingw/moldname-msvcrt.def b/reactos/lib/mingw/moldname-msvcrt.def new file mode 100644 index 00000000000..b4f06807000 --- /dev/null +++ b/reactos/lib/mingw/moldname-msvcrt.def @@ -0,0 +1,158 @@ + + +; +; moldname-msvcrt.def +; +; Exports from the runtime except that these exports are actually preceeded +; by a underscore in the actual DLL. These correspond to functions which +; are non-ANSI and were prefixed with an underscore to avoid name space +; clutter. However many, in fact most programs still use a few of these +; functions without the underscore. This .def file is specially processed +; to make those non-underscored name function calls call the equivalent +; underscored functions. +; +; Contributors: +; Created by Colin Peters +; Maintained by Mumit Khan +; +; THIS SOFTWARE IS NOT COPYRIGHTED +; +; This source code is offered for use in the public domain. You may +; use, modify or distribute it freely. +; +; This code is distributed in the hope that it will be useful but +; WITHOUT ANY WARRANTY. ALL WARRENTIES, EXPRESS OR IMPLIED ARE HEREBY +; DISCLAMED. This includes but is not limited to warrenties of +; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +; +EXPORTS +access +chdir +chmod +chsize +close +creat +cwait + +daylight DATA + +dup +dup2 +ecvt +eof +execl +execle +execlp +execlpe +execv +execve +execvp +execvpe +fcvt +fdopen +fgetchar +fgetwchar +filelength +fileno +; Alias fpreset is set in CRT_fp10,c and CRT_fp8.c. +; fpreset +fputchar +fputwchar +fstat +ftime +gcvt +getch +getche +getcwd +getpid +getw +heapwalk +isatty +itoa +kbhit +lfind +lsearch +lseek +ltoa +memccpy +memicmp +mkdir +mktemp +open +pclose +popen +putch +putenv +putw +read +rmdir +rmtmp +searchenv +setmode +sopen +spawnl +spawnle +spawnlp +spawnlpe +spawnv +spawnve +spawnvp +spawnvpe +stat +strcmpi +strdup +stricmp +stricoll +strlwr +strnicmp +strnset +strrev +strset +strupr +swab +tell +tempnam + +timezone DATA + +; export tzname for both. See +tzname DATA +tzset +umask +ungetch +unlink +utime +wcsdup +wcsicmp +wcsicoll +wcslwr +wcsnicmp +wcsnset +wcsrev +wcsset +wcsupr + +wpopen + +write +; non-ANSI functions declared in math.h +j0 +j1 +jn +y0 +y1 +yn +chgsign +scalb +finite +fpclass +; C99 functions +cabs +hypot +logb +nextafter + +; Additional definitions for ReactOS: +snwprintf +snprintf +strtoull=_strtoui64 diff --git a/reactos/lib/mingw/pseudo-reloc.c b/reactos/lib/mingw/pseudo-reloc.c new file mode 100644 index 00000000000..9fe607d2cb8 --- /dev/null +++ b/reactos/lib/mingw/pseudo-reloc.c @@ -0,0 +1,46 @@ +/* pseudo-reloc.c + + Written by Egor Duda + THIS SOFTWARE IS NOT COPYRIGHTED + + This source code is offered for use in the public domain. You may + use, modify or distribute it freely. + + This code is distributed in the hope that it will be useful but + WITHOUT ANY WARRANTY. ALL WARRENTIES, EXPRESS OR IMPLIED ARE HEREBY + DISCLAMED. This includes but is not limited to warrenties of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +#include + +extern char __RUNTIME_PSEUDO_RELOC_LIST__; +extern char __RUNTIME_PSEUDO_RELOC_LIST_END__; +extern char _image_base__; + +typedef struct + { + DWORD addend; + DWORD target; + } +runtime_pseudo_reloc; + +static void +do_pseudo_reloc (void* start, void* end, void* base) +{ + DWORD reloc_target; + runtime_pseudo_reloc* r; + for (r = (runtime_pseudo_reloc*) start; r < (runtime_pseudo_reloc*) end; r++) + { + reloc_target = (DWORD) base + r->target; + *((DWORD*) reloc_target) += r->addend; + } +} + +void +_pei386_runtime_relocator () +{ + do_pseudo_reloc (&__RUNTIME_PSEUDO_RELOC_LIST__, + &__RUNTIME_PSEUDO_RELOC_LIST_END__, + &_image_base__); +} diff --git a/reactos/lib/mingw/strcasecmp.c b/reactos/lib/mingw/strcasecmp.c new file mode 100644 index 00000000000..a238e22f259 --- /dev/null +++ b/reactos/lib/mingw/strcasecmp.c @@ -0,0 +1,21 @@ +/* + * strcasecmp.c + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + * Oldnames from ANSI header string.h + * + * Some wrapper functions for those old name functions whose appropriate + * equivalents are not simply underscore prefixed. + * + */ + +#include + +int +strcasecmp (const char *sz1, const char *sz2) +{ + return _stricmp (sz1, sz2); +} + diff --git a/reactos/lib/mingw/strncasecmp.c b/reactos/lib/mingw/strncasecmp.c new file mode 100644 index 00000000000..7607ea1d001 --- /dev/null +++ b/reactos/lib/mingw/strncasecmp.c @@ -0,0 +1,21 @@ +/* + * strncasecmp.c + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + * Oldnames from ANSI header string.h + * + * Some wrapper functions for those old name functions whose appropriate + * equivalents are not simply underscore prefixed. + * + */ + +#include + +int +strncasecmp (const char *sz1, const char *sz2, size_t sizeMaxCompare) +{ + return _strnicmp (sz1, sz2, sizeMaxCompare); +} + diff --git a/reactos/lib/tgetopt/tgetopt.h b/reactos/lib/mingw/tgetopt.h similarity index 100% rename from reactos/lib/tgetopt/tgetopt.h rename to reactos/lib/mingw/tgetopt.h diff --git a/reactos/lib/mingw/toascii.c b/reactos/lib/mingw/toascii.c new file mode 100644 index 00000000000..be9f2f50bd5 --- /dev/null +++ b/reactos/lib/mingw/toascii.c @@ -0,0 +1,22 @@ +/* + * toascii.c + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + * Oldnames from ANSI header ctype.h + * + * Some wrapper functions for those old name functions whose appropriate + * equivalents are not simply underscore prefixed. + * + */ + +#include + + +int +toascii (int c) +{ + return __toascii(c); +} + diff --git a/reactos/lib/mingw/wbinmode.c b/reactos/lib/mingw/wbinmode.c new file mode 100644 index 00000000000..1cc3dedbfc8 --- /dev/null +++ b/reactos/lib/mingw/wbinmode.c @@ -0,0 +1,5 @@ +#include + +/* Set default file mode to binary */ + +int _fmode = _O_BINARY; diff --git a/reactos/lib/mingw/wcrt1.c b/reactos/lib/mingw/wcrt1.c new file mode 100644 index 00000000000..b7eeaece113 --- /dev/null +++ b/reactos/lib/mingw/wcrt1.c @@ -0,0 +1,283 @@ +/* + * crt1.c + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + * Source code for the startup proceedures used by all programs. This code + * is compiled to make crt1.o, which should be located in the library path. + * + */ + +/* Hide the declaration of _fmode with dllimport attribute in stdlib.h to + avoid problems with older GCC. */ +#define __IN_MINGW_RUNTIME +#include +#include +#include +#include +#include +#define WIN32_LEAN_AND_MEAN +#include +#include + +/* NOTE: The code for initializing the _argv, _argc, and environ variables + * has been moved to a separate .c file which is included in both + * crt1.c and dllcrt1.c. This means changes in the code don't have to + * be manually synchronized, but it does lead to this not-generally- + * a-good-idea use of include. */ +#include "winit.c" +#include "cpu_features.h" + +extern void _pei386_runtime_relocator (void); + +extern int wmain (int, wchar_t **, wchar_t **); + +/* + * Must have the correct app type for MSVCRT. + */ + +#ifdef __MSVCRT__ +#define __UNKNOWN_APP 0 +#define __CONSOLE_APP 1 +#define __GUI_APP 2 +__MINGW_IMPORT void __set_app_type(int); +#endif /* __MSVCRT__ */ + +/* Global _fmode for this .exe, not the one in msvcrt.dll, + The default is set in txtmode.o in libmingw32.a */ +/* Override the dllimport'd declarations in stdlib.h */ +#undef _fmode +extern int _fmode; +#ifdef __MSVCRT__ +extern int* __p__fmode(void); /* To access the dll _fmode */ +#endif + +/* + * Setup the default file handles to have the _CRT_fmode mode, as well as + * any new files created by the user. + */ +extern int _CRT_fmode; + +static void +_mingw32_init_fmode (void) +{ + /* Don't set the std file mode if the user hasn't set any value for it. */ + if (_CRT_fmode) + { + _fmode = _CRT_fmode; + + /* + * This overrides the default file mode settings for stdin, + * stdout and stderr. At first I thought you would have to + * test with isatty, but it seems that the DOS console at + * least is smart enough to handle _O_BINARY stdout and + * still display correctly. + */ + if (stdin) + { + _setmode (_fileno (stdin), _CRT_fmode); + } + if (stdout) + { + _setmode (_fileno (stdout), _CRT_fmode); + } + if (stderr) + { + _setmode (_fileno (stderr), _CRT_fmode); + } + } + + /* Now sync the dll _fmode to the one for this .exe. */ +#ifdef __MSVCRT__ + *__p__fmode() = _fmode; +#else + *_imp___fmode_dll = _fmode; +#endif +} + +/* This function will be called when a trap occurs. Thanks to Jacob + Navia for his contribution. */ +static CALLBACK long +_gnu_exception_handler (EXCEPTION_POINTERS * exception_data) +{ + void (*old_handler) (int); + long action = EXCEPTION_CONTINUE_SEARCH; + int reset_fpu = 0; + + switch (exception_data->ExceptionRecord->ExceptionCode) + { + case EXCEPTION_ACCESS_VIOLATION: + /* test if the user has set SIGSEGV */ + old_handler = signal (SIGSEGV, SIG_DFL); + if (old_handler == SIG_IGN) + { + /* this is undefined if the signal was raised by anything other + than raise (). */ + signal (SIGSEGV, SIG_IGN); + action = EXCEPTION_CONTINUE_EXECUTION; + } + else if (old_handler != SIG_DFL) + { + /* This means 'old' is a user defined function. Call it */ + (*old_handler) (SIGSEGV); + action = EXCEPTION_CONTINUE_EXECUTION; + } + break; + + case EXCEPTION_ILLEGAL_INSTRUCTION: + case EXCEPTION_PRIV_INSTRUCTION: + /* test if the user has set SIGILL */ + old_handler = signal (SIGILL, SIG_DFL); + if (old_handler == SIG_IGN) + { + /* this is undefined if the signal was raised by anything other + than raise (). */ + signal (SIGILL, SIG_IGN); + action = EXCEPTION_CONTINUE_EXECUTION; + } + else if (old_handler != SIG_DFL) + { + /* This means 'old' is a user defined function. Call it */ + (*old_handler) (SIGILL); + action = EXCEPTION_CONTINUE_EXECUTION; + } + break; + + case EXCEPTION_FLT_INVALID_OPERATION: + case EXCEPTION_FLT_DIVIDE_BY_ZERO: + case EXCEPTION_FLT_DENORMAL_OPERAND: + case EXCEPTION_FLT_OVERFLOW: + case EXCEPTION_FLT_UNDERFLOW: + case EXCEPTION_FLT_INEXACT_RESULT: + reset_fpu = 1; + /* fall through. */ + + case EXCEPTION_INT_DIVIDE_BY_ZERO: + /* test if the user has set SIGFPE */ + old_handler = signal (SIGFPE, SIG_DFL); + if (old_handler == SIG_IGN) + { + signal (SIGFPE, SIG_IGN); + if (reset_fpu) + _fpreset (); + action = EXCEPTION_CONTINUE_EXECUTION; + } + else if (old_handler != SIG_DFL) + { + /* This means 'old' is a user defined function. Call it */ + (*old_handler) (SIGFPE); + action = EXCEPTION_CONTINUE_EXECUTION; + } + break; + + default: + break; + } + return action; +} + +/* + * The function mainCRTStartup is the entry point for all console programs. + */ +static void __attribute__((noreturn)) +__mingw_wCRTStartup (void) +{ + int nRet; + + /* + * Set up the top-level exception handler so that signal handling + * works as expected. The mapping between ANSI/POSIX signals and + * Win32 SE is not 1-to-1, so caveat emptore. + * + */ + SetUnhandledExceptionFilter (_gnu_exception_handler); + + /* + * Initialize floating point unit. + */ + __cpu_features_init (); /* Do we have SSE, etc.*/ + _fpreset (); /* Supplied by the runtime library. */ + + /* + * Set up __argc, __argv and _wenviron. + */ + _mingw32_init_wmainargs (); + + /* + * Sets the default file mode. + * If _CRT_fmode is set, also set mode for stdin, stdout + * and stderr, as well + * NOTE: DLLs don't do this because that would be rude! + */ + _mingw32_init_fmode (); + + /* Adust references to dllimported data that have non-zero offsets. */ + _pei386_runtime_relocator (); + + /* Align the stack to 16 bytes for the sake of SSE ops in main + or in functions inlined into main. */ + asm __volatile__ ("andl $-16, %%esp" : : : "%esp"); + + /* + * Call the main function. If the user does not supply one + * the one in the 'libmingw32.a' library will be linked in, and + * that one calls WinMain. See main.c in the 'lib' dir + * for more details. + */ + nRet = wmain (_argc, _wargv, _wenviron); + + /* + * Perform exit processing for the C library. This means + * flushing output and calling 'atexit' registered functions. + */ + _cexit (); + + ExitProcess (nRet); +} + +/* + * The function mainCRTStartup is the entry point for all console programs. + */ +void +wmainCRTStartup (void) +{ +#ifdef __MSVCRT__ + __set_app_type (__CONSOLE_APP); +#endif + __mingw_wCRTStartup (); +} + +/* + * For now the GUI startup function is the same as the console one. + * This simply gets rid of the annoying warning about not being able + * to find WinMainCRTStartup when linking GUI applications. + */ +void +wWinMainCRTStartup (void) +{ +#ifdef __MSVCRT__ + __set_app_type (__GUI_APP); +#endif + __mingw_wCRTStartup (); +} + +#if 0 +/* + * We force use of library version of atexit, which is only + * visible in import lib as _imp__atexit + */ +extern int (*_imp__atexit)(void (*)(void)); +int atexit (void (* pfn )(void) ) +{ + return ( (*_imp__atexit)(pfn)); +} + +/* Likewise for non-ANSI _onexit */ +extern _onexit_t (*_imp___onexit)(_onexit_t); +_onexit_t +_onexit (_onexit_t pfn ) +{ + return (*_imp___onexit)(pfn); +} +#endif diff --git a/reactos/lib/mingw/wcscmpi.c b/reactos/lib/mingw/wcscmpi.c new file mode 100644 index 00000000000..497964b3964 --- /dev/null +++ b/reactos/lib/mingw/wcscmpi.c @@ -0,0 +1,21 @@ +/* + * wcscmpi.c + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + * Oldnames from ANSI header string.h + * + * Some wrapper functions for those old name functions whose appropriate + * equivalents are not simply underscore prefixed. + * + */ + +#include + +int +wcscmpi (const wchar_t * ws1, const wchar_t * ws2) +{ + return _wcsicmp (ws1, ws2); +} + diff --git a/reactos/lib/mingw/winit.c b/reactos/lib/mingw/winit.c new file mode 100644 index 00000000000..4a5917ebeb8 --- /dev/null +++ b/reactos/lib/mingw/winit.c @@ -0,0 +1,66 @@ +/* + * init.c + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + * Code to initialize standard file handles and command line arguments. + * This file is #included in both crt1.c and dllcrt1.c. + * + */ + +/* + * Access to a standard 'main'-like argument count and list. Also included + * is a table of environment variables. + */ +int _argc = 0; +wchar_t **_wargv = 0; + +/* NOTE: Thanks to Pedro A. Aranda Gutiirrez for pointing + * this out to me. GetMainArgs (used below) takes a fourth argument + * which is an int that controls the globbing of the command line. If + * _CRT_glob is non-zero the command line will be globbed (e.g. *.* + * expanded to be all files in the startup directory). In the mingw32 + * library a _CRT_glob variable is defined as being -1, enabling + * this command line globbing by default. To turn it off and do all + * command line processing yourself (and possibly escape bogons in + * MS's globbing code) include a line in one of your source modules + * defining _CRT_glob and setting it to zero, like this: + * int _CRT_glob = 0; + */ +extern int _CRT_glob; + +#ifdef __MSVCRT__ +typedef struct { + int newmode; +} _startupinfo; +extern void __wgetmainargs (int *, wchar_t ***, wchar_t ***, int, _startupinfo *); +#else +#error Cannot build unicode version against crtdll +#endif + +/* + * Initialize the _argc, _argv and environ variables. + */ +static void +_mingw32_init_wmainargs () +{ + /* The environ variable is provided directly in stdlib.h through + * a dll function call. */ + wchar_t **dummy_environ; +#ifdef __MSVCRT__ + _startupinfo start_info; + start_info.newmode = 0; +#endif + + /* + * Microsoft's runtime provides a function for doing just that. + */ +#ifdef __MSVCRT__ + (void) __wgetmainargs (&_argc, &_wargv, &dummy_environ, _CRT_glob, + &start_info); +#else +#error Cannot build unicode version against crtdll +#endif +} + diff --git a/reactos/lib/mingw/wmain.c b/reactos/lib/mingw/wmain.c new file mode 100644 index 00000000000..f3846b12765 --- /dev/null +++ b/reactos/lib/mingw/wmain.c @@ -0,0 +1,79 @@ +/* + * main.c + * This file has no copyright assigned and is placed in the Public Domain. + * This file is a part of the mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + * Extra startup code for applications which do not have a main function + * of their own (but do have a WinMain). Generally these are GUI + * applications, but they don't *have* to be. + * + */ + +#include +#include +#include + +#define ISSPACE(a) (a == ' ' || a == '\t') + +extern int PASCAL wWinMain (HINSTANCE hInst, HINSTANCE hPrevInst, + LPWSTR szCmdLine, int nShow); + +int +wmain (int argc, const wchar_t *argv[], const wchar_t *environ[]) +{ + wchar_t *szCmd; + STARTUPINFOW startinfo; + int nRet; + + /* Get the command line passed to the process. */ + szCmd = GetCommandLineW (); + GetStartupInfoW (&startinfo); + + /* Strip off the name of the application and any leading + * whitespace. */ + if (szCmd) + { + while (ISSPACE (*szCmd)) + { + szCmd++; + } + + /* On my system I always get the app name enclosed + * in quotes... */ + if (*szCmd == '\"') + { + do + { + szCmd++; + } + while (*szCmd != '\"' && *szCmd != '\0'); + + if (*szCmd == '\"') + { + szCmd++; + } + } + else + { + /* If no quotes then assume first token is program + * name. */ + while (!ISSPACE (*szCmd) && *szCmd != '\0') + { + szCmd++; + } + } + + while (ISSPACE (*szCmd)) + { + szCmd++; + } + } + + nRet = wWinMain (GetModuleHandle (NULL), NULL, szCmd, + (startinfo.dwFlags & STARTF_USESHOWWINDOW) ? + startinfo.wShowWindow : SW_SHOWDEFAULT); + + return nRet; +} + diff --git a/reactos/lib/strmiids/strmiids.c b/reactos/lib/strmiids/strmiids.c index 1f9c2fe786a..deed1ecf6d9 100644 --- a/reactos/lib/strmiids/strmiids.c +++ b/reactos/lib/strmiids/strmiids.c @@ -9,13 +9,9 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ - -#if defined(__LCC__) || defined(__GNUC__) -#define INITGUID 1 -#include -#else +#define INITGUID #include -#endif +#include DEFINE_GUID(CLSID_AMAudioData,0xf2468580,0xaf8a,0x11d0,0x82,0x12,0x00,0xc0,0x4f,0xc3,0x2c,0x45); DEFINE_GUID(CLSID_AMAudioStream,0x8496e040,0xaf4c,0x11d0,0x82,0x12,0x00,0xc0,0x4f,0xc3,0x2c,0x45); diff --git a/reactos/lib/uuid/uuid.c b/reactos/lib/uuid/uuid.c index c470ccfd732..69a8a65e2f3 100644 --- a/reactos/lib/uuid/uuid.c +++ b/reactos/lib/uuid/uuid.c @@ -26,29 +26,27 @@ /* GUIDs defined in uuids.lib */ -DEFINE_GUID(GUID_NULL,0,0,0,0,0,0,0,0,0,0,0); - #include "windef.h" #include "winbase.h" #include "wingdi.h" #include "winuser.h" #include "objbase.h" -#include "servprov.h" +#include "wine/servprov.h" #include "oleauto.h" #include "oleidl.h" -#include "objidl.h" +#include "wine/oleidl.h" #include "olectl.h" -#include "ocidl.h" +#include "wine/ocidl.h" #include "mshtmhst.h" #include "docobj.h" -#include "exdisp.h" +#include "wine/exdisp.h" #include "hlink.h" -#include "shlguid.h" +#include "wine/shlguid.h" #include "shlobj.h" #include "shldisp.h" #include "comcat.h" @@ -94,3 +92,5 @@ DEFINE_GUID(CLSID_StdFont,0x0be35203,0x8f91,0x11ce,0x9d,0xe3,0x00,0xaa,0x00,0x4b DEFINE_GUID(CLSID_StdPicture,0x0be35204,0x8f91,0x11ce,0x9d,0xe3,0x00,0xaa,0x00,0x4b,0xb8,0x51); DEFINE_GUID(CLSID_HTMLDocument, 0x25336920, 0x03f9, 0x11cf, 0x8f,0xd0, 0x00,0xaa,0x00,0x68,0x6f,0x13); + +DEFINE_GUID(GUID_NULL, 0L, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); diff --git a/reactos/regtests/kmtloader/kmtloader.rbuild b/reactos/regtests/kmtloader/kmtloader.rbuild index df91cf15338..56afda216c8 100644 --- a/reactos/regtests/kmtloader/kmtloader.rbuild +++ b/reactos/regtests/kmtloader/kmtloader.rbuild @@ -1,5 +1,6 @@ - + kernel32 + advapi32 kmtloader.c diff --git a/reactos/regtests/queuetest/queuetest.rbuild b/reactos/regtests/queuetest/queuetest.rbuild index 14458dd6dcb..7211e75ea32 100644 --- a/reactos/regtests/queuetest/queuetest.rbuild +++ b/reactos/regtests/queuetest/queuetest.rbuild @@ -1,4 +1,5 @@ + kernel32 queuetest.c diff --git a/reactos/regtests/winetests/advapi32/advapi32.rbuild b/reactos/regtests/winetests/advapi32/advapi32.rbuild index ae881725782..a77f327c75c 100644 --- a/reactos/regtests/winetests/advapi32/advapi32.rbuild +++ b/reactos/regtests/winetests/advapi32/advapi32.rbuild @@ -2,6 +2,7 @@ . advapi32 + kernel32 ntdll registry.c security.c diff --git a/reactos/regtests/winetests/cabinet/cabinet.rbuild b/reactos/regtests/winetests/cabinet/cabinet.rbuild index 69b9e57cb36..faa517953cc 100644 --- a/reactos/regtests/winetests/cabinet/cabinet.rbuild +++ b/reactos/regtests/winetests/cabinet/cabinet.rbuild @@ -2,6 +2,7 @@ . cabinet + kernel32 ntdll extract.c testlist.c diff --git a/reactos/regtests/winetests/comctl32/comctl32.rbuild b/reactos/regtests/winetests/comctl32/comctl32.rbuild index 6d29726bad0..407eac31b69 100644 --- a/reactos/regtests/winetests/comctl32/comctl32.rbuild +++ b/reactos/regtests/winetests/comctl32/comctl32.rbuild @@ -6,6 +6,9 @@ comctl32 ntdll gdi32 + user32 + kernel32 + advapi32 comboex.c dpa.c header.c diff --git a/reactos/regtests/winetests/gdi32/gdi32.rbuild b/reactos/regtests/winetests/gdi32/gdi32.rbuild index 54567679566..d9d1e40945f 100644 --- a/reactos/regtests/winetests/gdi32/gdi32.rbuild +++ b/reactos/regtests/winetests/gdi32/gdi32.rbuild @@ -3,6 +3,9 @@ ntdll gdi32 + kernel32 + user32 + advapi32 bitmap.c brush.c gdiobj.c diff --git a/reactos/regtests/winetests/icmp/icmp.rbuild b/reactos/regtests/winetests/icmp/icmp.rbuild index 5a351bdf1e3..535a36256d3 100644 --- a/reactos/regtests/winetests/icmp/icmp.rbuild +++ b/reactos/regtests/winetests/icmp/icmp.rbuild @@ -1,6 +1,7 @@ . + kernel32 ntdll icmp icmp.c diff --git a/reactos/regtests/winetests/lz32/lz32.rbuild b/reactos/regtests/winetests/lz32/lz32.rbuild index c8360256fb4..dd2500a3069 100644 --- a/reactos/regtests/winetests/lz32/lz32.rbuild +++ b/reactos/regtests/winetests/lz32/lz32.rbuild @@ -1,6 +1,7 @@ . + kernel32 ntdll lz32 testlist.c diff --git a/reactos/regtests/winetests/msvcrt/msvcrt.rbuild b/reactos/regtests/winetests/msvcrt/msvcrt.rbuild index d20f58a7ee3..3b20696c4f8 100644 --- a/reactos/regtests/winetests/msvcrt/msvcrt.rbuild +++ b/reactos/regtests/winetests/msvcrt/msvcrt.rbuild @@ -1,6 +1,7 @@ . + kernel32 ntdll cpp.c dir.c diff --git a/reactos/regtests/winetests/ntdll/ntdll.rbuild b/reactos/regtests/winetests/ntdll/ntdll.rbuild index 91833dd7730..886ac2af625 100644 --- a/reactos/regtests/winetests/ntdll/ntdll.rbuild +++ b/reactos/regtests/winetests/ntdll/ntdll.rbuild @@ -1,6 +1,7 @@ . + kernel32 ntdll atom.c change.c diff --git a/reactos/regtests/winetests/powrprof/powrprof.rbuild b/reactos/regtests/winetests/powrprof/powrprof.rbuild index ea0b1b9b0a3..4d21fb5ca28 100644 --- a/reactos/regtests/winetests/powrprof/powrprof.rbuild +++ b/reactos/regtests/winetests/powrprof/powrprof.rbuild @@ -1,10 +1,12 @@ - . - + . + - ntdll - powrprof - testlist.c - pwrprof.c + powrprof + ntdll + advapi32 + kernel32 + testlist.c + pwrprof.c diff --git a/reactos/regtests/winetests/psapi/psapi.rbuild b/reactos/regtests/winetests/psapi/psapi.rbuild index a34f15c1635..97725f7244a 100644 --- a/reactos/regtests/winetests/psapi/psapi.rbuild +++ b/reactos/regtests/winetests/psapi/psapi.rbuild @@ -1,6 +1,7 @@ . + kernel32 ntdll psapi testlist.c diff --git a/reactos/regtests/winetests/setupapi/setupapi.rbuild b/reactos/regtests/winetests/setupapi/setupapi.rbuild index 7ed50010b77..9b4ab741170 100644 --- a/reactos/regtests/winetests/setupapi/setupapi.rbuild +++ b/reactos/regtests/winetests/setupapi/setupapi.rbuild @@ -2,6 +2,8 @@ . ntdll + kernel32 + advapi32 setupapi devclass.c install.c diff --git a/reactos/regtests/winetests/shell32/shell32.rbuild b/reactos/regtests/winetests/shell32/shell32.rbuild index 3b7ff981e83..a4c85e1123d 100644 --- a/reactos/regtests/winetests/shell32/shell32.rbuild +++ b/reactos/regtests/winetests/shell32/shell32.rbuild @@ -3,9 +3,10 @@ ntdll shell32 + kernel32 + advapi32 shlwapi ole32 - uuid shelllink.c shellpath.c shlexec.c diff --git a/reactos/regtests/winetests/shell32/shelllink.c b/reactos/regtests/winetests/shell32/shelllink.c index 0ff121d5e42..12d15552a14 100755 --- a/reactos/regtests/winetests/shell32/shelllink.c +++ b/reactos/regtests/winetests/shell32/shelllink.c @@ -30,6 +30,7 @@ #include #include "windef.h" #include "winbase.h" +#include "basetyps.h" #include "shlguid.h" //#include "wine/shobjidl.h" #include "shlobj.h" @@ -44,6 +45,7 @@ extern void WINAPI ILFree(LPITEMIDLIST pidl); static const WCHAR lnkfile[]= { 'C',':','\\','t','e','s','t','.','l','n','k',0 }; static const WCHAR notafile[]= { 'C',':','\\','n','o','n','e','x','i','s','t','e','n','t','\\','f','i','l','e',0 }; +const GUID IID_IPersistFile = { 0x0000010b, 0x0000, 0x0000, { 0xc0,0x00, 0x00,0x00,0x00,0x00,0x00,0x46 } }; /* For some reason SHILCreateFromPath does not work on Win98 and * SHSimpleIDListFromPathA does not work on NT4. But if we call both we diff --git a/reactos/regtests/winetests/shlwapi/shlwapi.rbuild b/reactos/regtests/winetests/shlwapi/shlwapi.rbuild index 35a25892616..5c23c6d9d7e 100644 --- a/reactos/regtests/winetests/shlwapi/shlwapi.rbuild +++ b/reactos/regtests/winetests/shlwapi/shlwapi.rbuild @@ -5,6 +5,8 @@ shlwapi ole32 oleaut32 + kernel32 + advapi32 clist.c ordinal.c shreg.c diff --git a/reactos/regtests/winetests/version/version.rbuild b/reactos/regtests/winetests/version/version.rbuild index 872405cdfd8..3fc14d46aac 100644 --- a/reactos/regtests/winetests/version/version.rbuild +++ b/reactos/regtests/winetests/version/version.rbuild @@ -3,6 +3,7 @@ ntdll version + kernel32 testlist.c info.c diff --git a/reactos/tools/rbuild/backend/mingw/mingw.cpp b/reactos/tools/rbuild/backend/mingw/mingw.cpp index b20a2180187..f7b382b4897 100644 --- a/reactos/tools/rbuild/backend/mingw/mingw.cpp +++ b/reactos/tools/rbuild/backend/mingw/mingw.cpp @@ -147,6 +147,7 @@ MingwBackend::ProcessModules () MingwModuleHandler* h = MingwModuleHandler::InstanciateHandler ( module, this ); + h->AddImplicitLibraries ( module ); if ( use_pch && CanEnablePreCompiledHeaderSupportForModule ( module ) ) h->EnablePreCompiledHeaderSupport (); if ( module.host == HostDefault ) diff --git a/reactos/tools/rbuild/backend/mingw/modulehandler.cpp b/reactos/tools/rbuild/backend/mingw/modulehandler.cpp index 0bca7e11d62..1478eed6d66 100644 --- a/reactos/tools/rbuild/backend/mingw/modulehandler.cpp +++ b/reactos/tools/rbuild/backend/mingw/modulehandler.cpp @@ -1556,12 +1556,13 @@ MingwModuleHandler::GenerateLinkerCommand ( fprintf ( fMakefile, "\t$(ECHO_LD)\n" ); string targetName ( module.GetTargetName () ); + string killAt = module.mangledSymbols ? "" : "--kill-at"; + if ( module.IsDLL () ) { string temp_exp = ros_temp + module.name + ".temp.exp"; CLEAN_FILE ( temp_exp ); - string killAt = module.mangledSymbols ? "" : "--kill-at"; fprintf ( fMakefile, "\t${dlltool} --dllname %s --def %s --output-exp %s %s\n", targetName.c_str (), @@ -1734,6 +1735,18 @@ MingwModuleHandler::GenerateArchiveTarget ( const string& ar, objs_macro.c_str (), GetDirectory(archiveFilename).c_str() ); + if ( module.type == StaticLibrary && module.importLibrary ) + { + string archiveFilename ( GetModuleArchiveFilename () ); + string definitionFilename ( GetDefinitionFilename () ); + + fprintf ( fMakefile, + "\t${dlltool} --dllname %s --def %s --output-lib $@ %s -U\n", + module.importLibrary->dllname.c_str (), + definitionFilename.c_str (), + module.mangledSymbols ? "" : "--kill-at" ); + } + fprintf ( fMakefile, "\t$(ECHO_AR)\n" ); fprintf ( fMakefile, @@ -1950,6 +1963,13 @@ MingwModuleHandler::GenerateOtherMacros () linkerflags.c_str () ); } + if ( module.type == StaticLibrary && module.isStartupLib ) + { + fprintf ( fMakefile, + "%s += -Wno-main\n\n", + cflagsMacro.c_str () ); + } + fprintf ( fMakefile, "\n\n" ); // future references to the macros will be to get their values @@ -2564,6 +2584,42 @@ MingwWin32DLLModuleHandler::MingwWin32DLLModuleHandler ( { } +static void +MingwAddImplicitLibraries( Module &module ) +{ + Library* pLibrary; + + if ( !module.isDefaultEntryPoint ) + return; + + if ( module.IsDLL () ) + { + //pLibrary = new Library ( module, "__mingw_dllmain" ); + //module.non_if_data.libraries.insert ( module.non_if_data.libraries.begin(), pLibrary ); + } + else + { + pLibrary = new Library ( module, module.isUnicode ? "mingw_wmain" : "mingw_main" ); + module.non_if_data.libraries.insert ( module.non_if_data.libraries.begin(), pLibrary ); + } + + pLibrary = new Library ( module, "mingw_common" ); + module.non_if_data.libraries.insert ( module.non_if_data.libraries.begin() + 1, pLibrary ); + + if ( module.name != "msvcrt" ) + { + // always link in msvcrt to get the basic routines + pLibrary = new Library ( module, "msvcrt" ); + module.non_if_data.libraries.push_back ( pLibrary ); + } +} + +void +MingwWin32DLLModuleHandler::AddImplicitLibraries ( Module& module ) +{ + MingwAddImplicitLibraries ( module ); +} + void MingwWin32DLLModuleHandler::Process () { @@ -2617,6 +2673,12 @@ MingwWin32CUIModuleHandler::MingwWin32CUIModuleHandler ( { } +void +MingwWin32CUIModuleHandler::AddImplicitLibraries ( Module& module ) +{ + MingwAddImplicitLibraries ( module ); +} + void MingwWin32CUIModuleHandler::Process () { @@ -2670,6 +2732,12 @@ MingwWin32GUIModuleHandler::MingwWin32GUIModuleHandler ( { } +void +MingwWin32GUIModuleHandler::AddImplicitLibraries ( Module& module ) +{ + MingwAddImplicitLibraries ( module ); +} + void MingwWin32GUIModuleHandler::Process () { diff --git a/reactos/tools/rbuild/backend/mingw/modulehandler.h b/reactos/tools/rbuild/backend/mingw/modulehandler.h index a000c2ad847..e11457da69c 100644 --- a/reactos/tools/rbuild/backend/mingw/modulehandler.h +++ b/reactos/tools/rbuild/backend/mingw/modulehandler.h @@ -82,6 +82,7 @@ public: void GenerateInstallTarget () const; void GenerateDependsTarget () const; static bool ReferenceObjects ( const Module& module ); + virtual void AddImplicitLibraries ( Module& module ) { return; } protected: virtual void GetModuleSpecificCompilationUnits ( std::vector& compilationUnits ); std::string GetWorkingDirectory () const; @@ -329,6 +330,8 @@ public: MingwWin32DLLModuleHandler ( const Module& module ); virtual HostType DefaultHost() { return HostFalse; } virtual void Process (); + std::string TypeSpecificLinkerFlags() { return module.useHostStdlib ? "-nostartfiles -lgcc" : "-nostartfiles -nostdlib -lgcc"; } + void AddImplicitLibraries ( Module& module ); private: void GenerateWin32DLLModuleTarget (); }; @@ -340,6 +343,8 @@ public: MingwWin32CUIModuleHandler ( const Module& module ); virtual HostType DefaultHost() { return HostFalse; } virtual void Process (); + std::string TypeSpecificLinkerFlags() { return module.useHostStdlib ? "-nostartfiles -lgcc" : "-nostartfiles -nostdlib -lgcc"; } + void AddImplicitLibraries ( Module& module ); private: void GenerateWin32CUIModuleTarget (); }; @@ -351,6 +356,8 @@ public: MingwWin32GUIModuleHandler ( const Module& module ); virtual HostType DefaultHost() { return HostFalse; } virtual void Process (); + std::string TypeSpecificLinkerFlags() { return module.useHostStdlib ? "-nostartfiles -lgcc" : "-nostartfiles -nostdlib -lgcc"; } + void AddImplicitLibraries ( Module& module ); private: void GenerateWin32GUIModuleTarget (); }; @@ -440,6 +447,7 @@ public: MingwTestModuleHandler ( const Module& module ); virtual HostType DefaultHost() { return HostFalse; } virtual void Process (); + std::string TypeSpecificLinkerFlags() { return "-nostartfiles -nostdlib"; } protected: virtual void GetModuleSpecificCompilationUnits ( std::vector& compilationUnits ); private: diff --git a/reactos/tools/rbuild/define.cpp b/reactos/tools/rbuild/define.cpp index b2fc6b93c78..e2a90100a77 100644 --- a/reactos/tools/rbuild/define.cpp +++ b/reactos/tools/rbuild/define.cpp @@ -27,7 +27,7 @@ Define::Define ( const Project& project, const XMLElement& defineNode ) : project(project), module(NULL), - node(defineNode) + node(&defineNode) { Initialize(); } @@ -37,11 +37,22 @@ Define::Define ( const Project& project, const XMLElement& defineNode ) : project(project), module(module), - node(defineNode) + node(&defineNode) { Initialize(); } +Define::Define ( const Project& project, + const Module* module, + const std::string name_ ) + : project(project), + module(module), + node(NULL) +{ + name = name_; + value = ""; +} + Define::~Define () { } @@ -49,11 +60,11 @@ Define::~Define () void Define::Initialize() { - const XMLAttribute* att = node.GetAttribute ( "name", true ); - const XMLAttribute* empty = node.GetAttribute ( "empty", false ); + const XMLAttribute* att = node->GetAttribute ( "name", true ); + const XMLAttribute* empty = node->GetAttribute ( "empty", false ); assert(att); name = att->value; - value = node.value; + value = node->value; if( empty ) value = " "; } diff --git a/reactos/tools/rbuild/module.cpp b/reactos/tools/rbuild/module.cpp index 8445778388c..5aa42fb5a7a 100644 --- a/reactos/tools/rbuild/module.cpp +++ b/reactos/tools/rbuild/module.cpp @@ -307,11 +307,46 @@ Module::Module ( const Project& project, else isUnicode = false; + att = moduleNode.GetAttribute ( "stdlib", false ); + if ( att != NULL ) + { + const char* p = att->value.c_str(); + if ( !stricmp ( p, "host" ) ) + useHostStdlib = true; + else if ( !stricmp ( p, "default" ) ) + useHostStdlib = false; + else + { + throw InvalidAttributeValueException ( + moduleNode.location, + "stdlib", + att->value ); + } + } + else + useHostStdlib = false; + + if (isUnicode) + { + // Always define UNICODE and _UNICODE + Define* pDefine = new Define ( project, this, "UNICODE" ); + non_if_data.defines.push_back ( pDefine ); + + pDefine = new Define ( project, this, "_UNICODE" ); + non_if_data.defines.push_back ( pDefine ); + } + att = moduleNode.GetAttribute ( "entrypoint", false ); if ( att != NULL ) + { entrypoint = att->value; + isDefaultEntryPoint = false; + } else + { entrypoint = GetDefaultModuleEntrypoint (); + isDefaultEntryPoint = true; + } att = moduleNode.GetAttribute ( "baseaddress", false ); if ( att != NULL ) @@ -355,6 +390,25 @@ Module::Module ( const Project& project, } } + att = moduleNode.GetAttribute ( "isstartuplib", false ); + if ( att != NULL ) + { + const char* p = att->value.c_str(); + if ( !stricmp ( p, "true" ) || !stricmp ( p, "yes" ) ) + isStartupLib = true; + else if ( !stricmp ( p, "false" ) || !stricmp ( p, "no" ) ) + isStartupLib = false; + else + { + throw InvalidAttributeValueException ( + moduleNode.location, + "host", + att->value ); + } + } + else + isStartupLib = false; + att = moduleNode.GetAttribute ( "prefix", false ); if ( att != NULL ) prefix = att->value; @@ -918,7 +972,7 @@ Module::GetDefaultModuleBaseaddress () const bool Module::HasImportLibrary () const { - return importLibrary != NULL; + return importLibrary != NULL && type != StaticLibrary; } bool @@ -1118,7 +1172,7 @@ File::ProcessXML() Library::Library ( const XMLElement& _node, const Module& _module, const string& _name ) - : node(_node), + : node(&_node), module(_module), name(_name), importedModule(_module.project.LocateModule(_name)) @@ -1126,27 +1180,36 @@ Library::Library ( const XMLElement& _node, if ( module.name == name ) { throw XMLInvalidBuildFileException ( - node.location, + node->location, "module '%s' cannot link against itself", name.c_str() ); } if ( !importedModule ) { throw XMLInvalidBuildFileException ( - node.location, + node->location, "module '%s' trying to import non-existant module '%s'", module.name.c_str(), name.c_str() ); } } +Library::Library ( const Module& _module, + const string& _name ) + : node(NULL), + module(_module), + name(_name), + importedModule(_module.project.LocateModule(_name)) +{ +} + void Library::ProcessXML() { - if ( !module.project.LocateModule ( name ) ) + if ( node && !module.project.LocateModule ( name ) ) { throw XMLInvalidBuildFileException ( - node.location, + node->location, "module '%s' is trying to link against non-existant module '%s'", module.name.c_str(), name.c_str() ); @@ -1341,6 +1404,21 @@ ImportLibrary::ImportLibrary ( const XMLElement& _node, else basename = module.name; + att = _node.GetAttribute ( "dllname", false ); + if (att != NULL) + dllname = att->value; + else + { + if ( _module.type == StaticLibrary ) + { + throw XMLInvalidBuildFileException ( + node.location, + " dllname attribute required." ); + } + + dllname = ""; + } + att = _node.GetAttribute ( "definition", true ); assert (att); definition = FixSeparator(att->value); diff --git a/reactos/tools/rbuild/rbuild.h b/reactos/tools/rbuild/rbuild.h index 0f5f0a24727..f45b53f1b4d 100644 --- a/reactos/tools/rbuild/rbuild.h +++ b/reactos/tools/rbuild/rbuild.h @@ -296,6 +296,7 @@ public: ImportLibrary* importLibrary; bool mangledSymbols; bool isUnicode; + bool isDefaultEntryPoint; Bootstrap* bootstrap; AutoRegister* autoRegister; IfableData non_if_data; @@ -315,6 +316,8 @@ public: bool useWRC; bool allowWarnings; bool enabled; + bool useHostStdlib; + bool isStartupLib; Module ( const Project& project, const XMLElement& moduleNode, @@ -379,7 +382,7 @@ class Define public: const Project& project; const Module* module; - const XMLElement& node; + const XMLElement* node; std::string name; std::string value; @@ -388,6 +391,9 @@ public: Define ( const Project& project, const Module* module, const XMLElement& defineNode ); + Define ( const Project& project, + const Module* module, + const std::string name_ ); ~Define(); void ProcessXML(); private: @@ -414,8 +420,8 @@ public: class Library { + const XMLElement *node; public: - const XMLElement& node; const Module& module; std::string name; const Module* importedModule; @@ -423,6 +429,8 @@ public: Library ( const XMLElement& _node, const Module& _module, const std::string& _name ); + Library ( const Module& _module, + const std::string& _name ); void ProcessXML(); }; @@ -485,6 +493,7 @@ public: const Module& module; std::string basename; std::string definition; + std::string dllname; ImportLibrary ( const XMLElement& _node, const Module& module );