diff --git a/configure b/configure index a536194601d..71cf99996fd 100755 --- a/configure +++ b/configure @@ -5683,6 +5683,7 @@ programs/clock/Makefile programs/cmdlgtst/Makefile programs/control/Makefile programs/avitools/Makefile +programs/osversioncheck/Makefile programs/notepad/Makefile programs/progman/Makefile programs/regtest/Makefile @@ -5875,6 +5876,7 @@ programs/clock/Makefile programs/cmdlgtst/Makefile programs/control/Makefile programs/avitools/Makefile +programs/osversioncheck/Makefile programs/notepad/Makefile programs/progman/Makefile programs/regtest/Makefile diff --git a/configure.in b/configure.in index 3463b77499d..4085e0d4087 100644 --- a/configure.in +++ b/configure.in @@ -890,6 +890,7 @@ programs/clock/Makefile programs/cmdlgtst/Makefile programs/control/Makefile programs/avitools/Makefile +programs/osversioncheck/Makefile programs/notepad/Makefile programs/progman/Makefile programs/regtest/Makefile diff --git a/programs/Makefile.in b/programs/Makefile.in index 5b6fe2b36ea..7caf1f219f6 100644 --- a/programs/Makefile.in +++ b/programs/Makefile.in @@ -3,6 +3,7 @@ SUBDIRS = \ clock \ cmdlgtst \ control \ + osversioncheck \ notepad \ progman \ regapi \ diff --git a/programs/osversioncheck/.cvsignore b/programs/osversioncheck/.cvsignore new file mode 100644 index 00000000000..63957244162 --- /dev/null +++ b/programs/osversioncheck/.cvsignore @@ -0,0 +1,2 @@ +Makefile +osversioncheck diff --git a/programs/osversioncheck/ChangeLog b/programs/osversioncheck/ChangeLog new file mode 100644 index 00000000000..dc1a01b5de8 --- /dev/null +++ b/programs/osversioncheck/ChangeLog @@ -0,0 +1,4 @@ +1999-09-16 Morten Eriksen + + * [osversioncheck.c] + Created. diff --git a/programs/osversioncheck/Makefile.in b/programs/osversioncheck/Makefile.in new file mode 100644 index 00000000000..b7eb5864d52 --- /dev/null +++ b/programs/osversioncheck/Makefile.in @@ -0,0 +1,30 @@ +DEFS = -DWINELIB +TOPSRCDIR = @top_srcdir@ +TOPOBJDIR = ../.. +SRCDIR = @srcdir@ +VPATH = @srcdir@ +MODULE = none +PROGRAMS = osversioncheck +ALL_LIBS = $(WINELIB) $(X_LIBS) $(XLIB) $(LIBS) + +C_SRCS = osversioncheck.c + +all: $(PROGRAMS) + +@MAKE_RULES@ + +#this line is needed to prevent winestub.o being linked +WINESTUB = + +osversioncheck: $(OBJS) + $(CC) -o osversioncheck $(OBJS) $(LDOPTIONS) $(ALL_LIBS) + +install: dummy + $(INSTALL_PROGRAM) osversioncheck $(bindir)/osversioncheck + +uninstall: dummy + $(RM) $(bindir)/osversioncheck + +dummy: + +### Dependencies: diff --git a/programs/osversioncheck/osversioncheck.c b/programs/osversioncheck/osversioncheck.c new file mode 100644 index 00000000000..fd8510f190d --- /dev/null +++ b/programs/osversioncheck/osversioncheck.c @@ -0,0 +1,93 @@ +/* + * Use the GetVersionEx() Win32 API call to show information about + * which version of Windows we're running (or which version of Windows + * Wine believes it is masquerading as). + * + * Copyright 1999 by Morten Eriksen + * + */ + +#include +#include +#include + +#ifdef WINELIB +/* External declaration here because we don't want to depend on Wine's + internal headers. */ +extern HINSTANCE MAIN_WinelibInit( int *argc, char *argv[] ); +#endif /* WINELIB */ + + +void +show_last_error(void) +{ + DWORD lasterr; + LPTSTR buffer; + BOOL result; + + lasterr = GetLastError(); + + result = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | + FORMAT_MESSAGE_FROM_SYSTEM | + FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, + lasterr, + 0, + (LPTSTR)&buffer, + 0, + NULL); + + if (result) { + fprintf(stderr, "Win32 API error (%ld):\t%s", lasterr, buffer); + LocalFree((HLOCAL)buffer); + } + else { + fprintf(stderr, "Win32 API error (%ld)", lasterr); + } +} + +int +main(int argc, char ** argv) +{ + BOOL result; + OSVERSIONINFO oiv; + HINSTANCE hinst; + +#ifdef WINELIB + if (!(hinst = MAIN_WinelibInit(&argc, argv))) return 0; +#endif /* WINELIB */ + + /* FIXME: GetVersionEx() is a Win32 API call, so there should be a + preliminary check to see if we're running bare-bones Windows3.xx + (or even lower?). 19990916 mortene. */ + + oiv.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + result = GetVersionEx(&oiv); + + if (result == FALSE) { + show_last_error(); + } + else { + char * platforms[] = { + "Win32s on Windows 3.1", + "Win32 on Windows 95 or Windows 98", + "Win32 on Windows NT/Windows 2000", + "unknown!" + }; + int platformval = 3; + + switch (oiv.dwPlatformId) { + case VER_PLATFORM_WIN32s: platformval = 0; break; + case VER_PLATFORM_WIN32_WINDOWS: platformval = 1; break; + case VER_PLATFORM_WIN32_NT: platformval = 2; break; + } + + fprintf(stdout, + "MajorVersion: %ld\nMinorVersion: %ld\nBuildNumber: 0x%lx\n" + "Platform: %s\nCSDVersion: '%s'\n", + oiv.dwMajorVersion, oiv.dwMinorVersion, oiv.dwBuildNumber, + platforms[platformval], oiv.szCSDVersion); + } + + return 0; +}