<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: get-version code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Fri, 05 Sep 2008 13:35:13 GMT</pubDate>
    <description>DZone Snippets: get-version code</description>
    <item>
      <title>get-version-ex API</title>
      <link>http://snippets.dzone.com/posts/show/1152</link>
      <description>&lt;code&gt;&lt;br /&gt;REBOL [&lt;br /&gt;    Title:   "Get Windows Version"&lt;br /&gt;    File:    %get-version-ex.r&lt;br /&gt;    Author:  "Gregg Irwin"&lt;br /&gt;    Email:   greggirwin@acm.org&lt;br /&gt;    Version: 0.0.1&lt;br /&gt;    Date:    23-sep-2003&lt;br /&gt;    Purpose: {&lt;br /&gt;        Shows how to call Windows GetVersonEx function.&lt;br /&gt;    }&lt;br /&gt;    library: [&lt;br /&gt;        level:    'intermediate&lt;br /&gt;        platform: 'windows&lt;br /&gt;        type:     [function how-to]&lt;br /&gt;        domain:   [external-library win-api]&lt;br /&gt;        tested-under: [view/pro 1.2.8.3.1 on W2K]&lt;br /&gt;        support:  none&lt;br /&gt;        license:  none&lt;br /&gt;        see-also: none&lt;br /&gt;    ]&lt;br /&gt;]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;; The credit for this technique of dealing with fixed char arrays&lt;br /&gt;; in structs belongs to Pekr and Cyphre. I just modded the idea a&lt;br /&gt;; bit for my own uses.&lt;br /&gt;make-elements: func [name count type /local result][&lt;br /&gt;    if not word? type [type: type?/word type]&lt;br /&gt;    result: copy "^/"&lt;br /&gt;    repeat i count [&lt;br /&gt;        append result join name [i " [" type "]" newline]&lt;br /&gt;    ]&lt;br /&gt;    to block! result&lt;br /&gt;]&lt;br /&gt;&lt;br /&gt;kernel.dll: load/library %kernel32.dll&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;OSVERSIONINFOEXA: make struct! OSVERSIONINFOEXA-def: compose/deep [&lt;br /&gt;    dwOSVersionInfoSize [integer!]  ; DWORD&lt;br /&gt;    dwMajorVersion      [integer!]  ; DWORD&lt;br /&gt;    dwMinorVersion      [integer!]  ; DWORD&lt;br /&gt;    dwBuildNumber       [integer!]  ; DWORD&lt;br /&gt;    dwPlatformId        [integer!]  ; DWORD&lt;br /&gt;    (make-elements 'szCSDVersion 128 #"@")  ; TCHAR&lt;br /&gt;    wServicePackMajor   [short]     ; WORD&lt;br /&gt;    wServicePackMinor   [short]     ; WORD&lt;br /&gt;    wSuiteMask          [short]     ; WORD&lt;br /&gt;    wProductType        [char!]     ; BYTE&lt;br /&gt;    wReserved           [char!]     ; BYTE&lt;br /&gt;] none&lt;br /&gt;OSVERSIONINFOEXA/dwOSVersionInfoSize: length? third OSVERSIONINFOEXA&lt;br /&gt;&lt;br /&gt;GetLastError: make routine! [return: [integer!]] kernel.dll "GetLastError"&lt;br /&gt;&lt;br /&gt;GetVersionEx: make routine! compose/deep/only [&lt;br /&gt;    lpVersionInformation    [struct! (OSVERSIONINFOEXA-def)] ;LPOSVERSIONINFO&lt;br /&gt;    return:     [integer!]  ;BOOL&lt;br /&gt;] kernel.dll "GetVersionExA"&lt;br /&gt;&lt;br /&gt;get-version: has [res] [&lt;br /&gt;    res: GetVersionEx OSVERSIONINFOEXA&lt;br /&gt;    either 0 = res [none][OSVERSIONINFOEXA]&lt;br /&gt;]&lt;br /&gt;&lt;br /&gt;; test call&lt;br /&gt;print either res: get-version [&lt;br /&gt;    [&lt;br /&gt;        "Major:" res/dwMajorVersion newline&lt;br /&gt;        "Minor:" res/dwMinorVersion newline&lt;br /&gt;        "Build:" res/dwBuildNumber  newline&lt;br /&gt;        "SP.Major:" res/wServicePackMajor   newline&lt;br /&gt;        "SP.Minor:" res/wServicePackMinor   newline&lt;br /&gt;        "Suite"   mold res/wSuiteMask    newline&lt;br /&gt;        "Product" mold res/wProductType  newline&lt;br /&gt;        "Version:" to-string copy/part at third OSVERSIONINFOEXA 21 128&lt;br /&gt;    ]&lt;br /&gt;][&lt;br /&gt;    ["Call failed: " GetLastError]&lt;br /&gt;]&lt;br /&gt;&lt;br /&gt;free kernel.dll&lt;br /&gt;&lt;br /&gt;halt&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Fri, 13 Jan 2006 04:21:52 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/1152</guid>
      <author>gregg.irwin (Gregg Irwin)</author>
    </item>
  </channel>
</rss>
