8a56c3e21a2b7b70aeeece9580b53d6e662ec396
[p5sagit/p5-mst-13.2.git] / ext / Win32CORE / Win32CORE.c
1 /*    Win32CORE.c
2  *
3  *    Copyright (C) 2007 by Larry Wall and others
4  *
5  *    You may distribute under the terms of either the GNU General Public
6  *    License or the Artistic License, as specified in the README file.
7  *
8  */
9
10 #include "EXTERN.h"
11 #include "perl.h"
12 #include "XSUB.h"
13
14 static void
15 forward(pTHX_ const char *function)
16 {
17     dXSARGS;
18     Perl_load_module(aTHX_ PERL_LOADMOD_NOIMPORT, newSVpvn("Win32",5), newSVnv(0.27));
19     SPAGAIN;
20     PUSHMARK(SP-items);
21     call_pv(function, GIMME_V);
22 }
23
24 #define FORWARD(function) XS(w32_##function){ forward(aTHX_ "Win32::"#function); }
25 FORWARD(GetCwd)
26 FORWARD(SetCwd)
27 FORWARD(GetNextAvailDrive)
28 FORWARD(GetLastError)
29 FORWARD(SetLastError)
30 FORWARD(LoginName)
31 FORWARD(NodeName)
32 FORWARD(DomainName)
33 FORWARD(FsType)
34 FORWARD(GetOSVersion)
35 FORWARD(IsWinNT)
36 FORWARD(IsWin95)
37 FORWARD(FormatMessage)
38 FORWARD(Spawn)
39 FORWARD(GetTickCount)
40 FORWARD(GetShortPathName)
41 FORWARD(GetFullPathName)
42 FORWARD(GetLongPathName)
43 FORWARD(CopyFile)
44 FORWARD(Sleep)
45
46 /* Don't forward Win32::SetChildShowWindow().  It accesses the internal variable
47  * w32_showwindow in thread_intern and is therefore not implemented in Win32.xs.
48  */
49 /* FORWARD(SetChildShowWindow) */
50
51 #undef FORWARD
52
53 XS(boot_Win32CORE)
54 {
55     dXSARGS;
56     char *file = __FILE__;
57
58     /* these names are Activeware compatible */
59     newXS("Win32::GetCwd", w32_GetCwd, file);
60     newXS("Win32::SetCwd", w32_SetCwd, file);
61     newXS("Win32::GetNextAvailDrive", w32_GetNextAvailDrive, file);
62     newXS("Win32::GetLastError", w32_GetLastError, file);
63     newXS("Win32::SetLastError", w32_SetLastError, file);
64     newXS("Win32::LoginName", w32_LoginName, file);
65     newXS("Win32::NodeName", w32_NodeName, file);
66     newXS("Win32::DomainName", w32_DomainName, file);
67     newXS("Win32::FsType", w32_FsType, file);
68     newXS("Win32::GetOSVersion", w32_GetOSVersion, file);
69     newXS("Win32::IsWinNT", w32_IsWinNT, file);
70     newXS("Win32::IsWin95", w32_IsWin95, file);
71     newXS("Win32::FormatMessage", w32_FormatMessage, file);
72     newXS("Win32::Spawn", w32_Spawn, file);
73     newXS("Win32::GetTickCount", w32_GetTickCount, file);
74     newXS("Win32::GetShortPathName", w32_GetShortPathName, file);
75     newXS("Win32::GetFullPathName", w32_GetFullPathName, file);
76     newXS("Win32::GetLongPathName", w32_GetLongPathName, file);
77     newXS("Win32::CopyFile", w32_CopyFile, file);
78     newXS("Win32::Sleep", w32_Sleep, file);
79     /* newXS("Win32::SetChildShowWindow", w32_SetChildShowWindow, file); */
80
81     XSRETURN_YES;
82 }