IDENTIFICATION DIVISION.
PROGRAM-ID. WINVERS.
AUTHOR. KUK.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 OSVERSIONINFO TYPEDEF.
* The size of this data structure, in bytes. Set this member to sizeof(OSVERSIONINFO).
05 dwOSVersionInfoSize PIC S9(9) COMP-5.
* The major version number of the operating system. For more information, see Remarks.
05 dwMajorVersion PIC S9(9) COMP-5.
* The minor version number of the operating system. For more information, see Remarks.
05 dwMinorVersion PIC S9(9) COMP-5.
* The build number of the operating system.
05 dwBuildNumber PIC S9(9) COMP-5.
* The operating system platform. This member can be the following value:*
* - VER_PLATFORM_WIN32_NT = 2
* The operating system is Windows 7, Windows Server 2008, Windows Vista,
* Windows Server 2003, Windows XP, or Windows 2000.
05 dwPlatformId PIC S9(9) COMP-5.
* A null-terminated string, such as "Service Pack 3", that indicates the latest Service Pack
* installed on the system. If no Service Pack has been installed, the string is empty.
05 szCSDVersion PIC X(128).
01 WS-OSINFO TYPE OSVERSIONINFO.
01 STATUS-CODE PIC S9(4) COMP-5.
LINKAGE SECTION.
01 LNK-WV-DATA.
05 LNK-WV-OUTPUT.
10 LNK-WV-RC PIC 9(2).
10 LNK-WV-VERS PIC X(100).
10 LNK-WV-SP PIC X(50).
PROCEDURE DIVISION USING LNK-WV-DATA.
INITIALIZE LNK-WV-DATA REPLACING
NUMERIC DATA BY ZEROS
ALPHANUMERIC DATA BY SPACES
MOVE 148 TO dwOSVersionInfoSize OF WS-OSINFO
CALL "GetVersionExA" WITH STDCALL USING BY REFERENCE WS-OSINFO RETURNING STATUS-CODE
IF STATUS-CODE = ZEROS
MOVE 99 TO LNK-WV-RC
MOVE SPACES TO LNK-WV-VERS
GOBACK
END-IF
MOVE ZEROS TO LNK-WV-RC
EVALUATE TRUE ALSO TRUE
WHEN dwMajorVersion = 6
ALSO dwMinorVersion = 3
MOVE "Windows 8.1" TO LNK-WV-VERS
WHEN dwMajorVersion = 6
ALSO dwMinorVersion = 2
MOVE "Windows 8" TO LNK-WV-VERS
WHEN dwMajorVersion = 6
ALSO dwMinorVersion = 1
MOVE "Windows 7" TO LNK-WV-VERS
WHEN dwMajorVersion = 6
ALSO dwMinorVersion = 0
MOVE "Windows Vista" TO LNK-WV-VERS
WHEN dwMajorVersion = 5
ALSO dwMinorVersion = 2
MOVE "Windows Server 2003" TO LNK-WV-VERS
WHEN dwMajorVersion = 5
ALSO dwMinorVersion = 1
MOVE "Windows XP" TO LNK-WV-VERS
WHEN dwMajorVersion = 5
ALSO dwMinorVersion = 0
MOVE "Windows 2000" TO LNK-WV-VERS
WHEN OTHER
MOVE "Windows UNKNOWN" TO LNK-WV-VERS
END-EVALUATE
INSPECT szCSDVersion REPLACING ALL X"00" BY SPACES
MOVE szCSDVersion TO LNK-WV-SP
GOBACK
.