1 /* Copyright (C) 2001, 2006, 2008 Free Software Foundation, Inc.
3 * This library is free software; you can redistribute it and/or
4 * modify it under the terms of the GNU Lesser General Public
5 * License as published by the Free Software Foundation; either
6 * version 2.1 of the License, or (at your option) any later version.
8 * This library is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 * Lesser General Public License for more details.
13 * You should have received a copy of the GNU Lesser General Public
14 * License along with this library; if not, write to the Free Software
15 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 #include "libguile/__scm.h"
28 #include "win32-uname.h"
31 * Get name and information about current kernel.
34 uname (struct utsname
*uts
)
36 enum { WinNT
, Win95
, Win98
, WinUnknown
};
40 DWORD os
= WinUnknown
;
42 memset (uts
, 0, sizeof (*uts
));
44 osver
.dwOSVersionInfoSize
= sizeof (osver
);
45 GetVersionEx (&osver
);
46 GetSystemInfo (&sysinfo
);
48 switch (osver
.dwPlatformId
)
50 case VER_PLATFORM_WIN32_NT
: /* NT, Windows 2000 or Windows XP */
51 if (osver
.dwMajorVersion
== 4)
52 strcpy (uts
->sysname
, "Windows NT4x"); /* NT4x */
53 else if (osver
.dwMajorVersion
<= 3)
54 strcpy (uts
->sysname
, "Windows NT3x"); /* NT3x */
55 else if (osver
.dwMajorVersion
== 5 && osver
.dwMinorVersion
< 1)
56 strcpy (uts
->sysname
, "Windows 2000"); /* 2k */
57 else if (osver
.dwMajorVersion
>= 5)
58 strcpy (uts
->sysname
, "Windows XP"); /* XP */
62 case VER_PLATFORM_WIN32_WINDOWS
: /* Win95, Win98 or WinME */
63 if ((osver
.dwMajorVersion
> 4) ||
64 ((osver
.dwMajorVersion
== 4) && (osver
.dwMinorVersion
> 0)))
66 if (osver
.dwMinorVersion
>= 90)
67 strcpy (uts
->sysname
, "Windows ME"); /* ME */
69 strcpy (uts
->sysname
, "Windows 98"); /* 98 */
74 strcpy (uts
->sysname
, "Windows 95"); /* 95 */
79 case VER_PLATFORM_WIN32s
: /* Windows 3.x */
80 strcpy (uts
->sysname
, "Windows");
84 sprintf (uts
->version
, "%ld.%02ld",
85 osver
.dwMajorVersion
, osver
.dwMinorVersion
);
87 if (osver
.szCSDVersion
[0] != '\0' &&
88 (strlen (osver
.szCSDVersion
) + strlen (uts
->version
) + 1) <
89 sizeof (uts
->version
))
91 strcat (uts
->version
, " ");
92 strcat (uts
->version
, osver
.szCSDVersion
);
95 sprintf (uts
->release
, "build %ld", osver
.dwBuildNumber
& 0xFFFF);
97 switch (sysinfo
.wProcessorArchitecture
)
99 case PROCESSOR_ARCHITECTURE_PPC
:
100 strcpy (uts
->machine
, "ppc");
102 case PROCESSOR_ARCHITECTURE_ALPHA
:
103 strcpy (uts
->machine
, "alpha");
105 case PROCESSOR_ARCHITECTURE_MIPS
:
106 strcpy (uts
->machine
, "mips");
108 case PROCESSOR_ARCHITECTURE_INTEL
:
110 * dwProcessorType is only valid in Win95 and Win98 and WinME
111 * wProcessorLevel is only valid in WinNT
117 switch (sysinfo
.dwProcessorType
)
119 case PROCESSOR_INTEL_386
:
120 case PROCESSOR_INTEL_486
:
121 case PROCESSOR_INTEL_PENTIUM
:
122 sprintf (uts
->machine
, "i%ld", sysinfo
.dwProcessorType
);
125 strcpy (uts
->machine
, "i386");
130 sprintf (uts
->machine
, "i%d86", sysinfo
.wProcessorLevel
);
133 strcpy (uts
->machine
, "unknown");
138 strcpy (uts
->machine
, "unknown");
142 sLength
= sizeof (uts
->nodename
) - 1;
143 GetComputerName (uts
->nodename
, &sLength
);