1 /* Copyright (C) 2001, 2006 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
18 #include "libguile/__scm.h"
24 #include "win32-uname.h"
27 * Get name and information about current kernel.
30 uname (struct utsname
*uts
)
32 enum { WinNT
, Win95
, Win98
, WinUnknown
};
36 DWORD os
= WinUnknown
;
38 memset (uts
, 0, sizeof (*uts
));
40 osver
.dwOSVersionInfoSize
= sizeof (osver
);
41 GetVersionEx (&osver
);
42 GetSystemInfo (&sysinfo
);
44 switch (osver
.dwPlatformId
)
46 case VER_PLATFORM_WIN32_NT
: /* NT, Windows 2000 or Windows XP */
47 if (osver
.dwMajorVersion
== 4)
48 strcpy (uts
->sysname
, "Windows NT4x"); /* NT4x */
49 else if (osver
.dwMajorVersion
<= 3)
50 strcpy (uts
->sysname
, "Windows NT3x"); /* NT3x */
51 else if (osver
.dwMajorVersion
== 5 && osver
.dwMinorVersion
< 1)
52 strcpy (uts
->sysname
, "Windows 2000"); /* 2k */
53 else if (osver
.dwMajorVersion
>= 5)
54 strcpy (uts
->sysname
, "Windows XP"); /* XP */
58 case VER_PLATFORM_WIN32_WINDOWS
: /* Win95, Win98 or WinME */
59 if ((osver
.dwMajorVersion
> 4) ||
60 ((osver
.dwMajorVersion
== 4) && (osver
.dwMinorVersion
> 0)))
62 if (osver
.dwMinorVersion
>= 90)
63 strcpy (uts
->sysname
, "Windows ME"); /* ME */
65 strcpy (uts
->sysname
, "Windows 98"); /* 98 */
70 strcpy (uts
->sysname
, "Windows 95"); /* 95 */
75 case VER_PLATFORM_WIN32s
: /* Windows 3.x */
76 strcpy (uts
->sysname
, "Windows");
80 sprintf (uts
->version
, "%ld.%02ld",
81 osver
.dwMajorVersion
, osver
.dwMinorVersion
);
83 if (osver
.szCSDVersion
[0] != '\0' &&
84 (strlen (osver
.szCSDVersion
) + strlen (uts
->version
) + 1) <
85 sizeof (uts
->version
))
87 strcat (uts
->version
, " ");
88 strcat (uts
->version
, osver
.szCSDVersion
);
91 sprintf (uts
->release
, "build %ld", osver
.dwBuildNumber
& 0xFFFF);
93 switch (sysinfo
.wProcessorArchitecture
)
95 case PROCESSOR_ARCHITECTURE_PPC
:
96 strcpy (uts
->machine
, "ppc");
98 case PROCESSOR_ARCHITECTURE_ALPHA
:
99 strcpy (uts
->machine
, "alpha");
101 case PROCESSOR_ARCHITECTURE_MIPS
:
102 strcpy (uts
->machine
, "mips");
104 case PROCESSOR_ARCHITECTURE_INTEL
:
106 * dwProcessorType is only valid in Win95 and Win98 and WinME
107 * wProcessorLevel is only valid in WinNT
113 switch (sysinfo
.dwProcessorType
)
115 case PROCESSOR_INTEL_386
:
116 case PROCESSOR_INTEL_486
:
117 case PROCESSOR_INTEL_PENTIUM
:
118 sprintf (uts
->machine
, "i%ld", sysinfo
.dwProcessorType
);
121 strcpy (uts
->machine
, "i386");
126 sprintf (uts
->machine
, "i%d86", sysinfo
.wProcessorLevel
);
129 strcpy (uts
->machine
, "unknown");
134 strcpy (uts
->machine
, "unknown");
138 sLength
= sizeof (uts
->nodename
) - 1;
139 GetComputerName (uts
->nodename
, &sLength
);