  **************************************************************************
  IMPORTANT NOTICE:  In the 32-bit version, the following functions, which
  used to return space-delimited lists of items:

    DirItemize
    DiskScan
    FileItemize

  now return tab-delimited lists.  This can be changed using the new
  IntControl(29).  See "DLL 2.2abh" section below for more information.

  --------------------------------------------------------------------------

  In the 32-bit version, the following functions work only with 32-bit apps:

    AppExist
    AppWaitClose
    WinExeName

  See "DLL 2.2abk" section below for more information.

  **************************************************************************

WinBatch fixes.  Dates indicate disk drop into manufacturing.  Actual ship is often
a week later.  Plans are to reship disk to all customers when product becomes stable

5.0H    Sept 1, 1994
        Initial public release

5.0J    Sept 10, 1994
        Network Extender fixes

5.0K    Sept 19, 1994
        Fixed "Use Older / Use Newer" swap in Confirm Replace dialog
        Fixed problem where \*.* was required on a target directory on
        FileCopy/FileMove functions (Oops See 5.0N)

5.0L    Sept 26, 1994
        Fixed MenuChange function
        Added DiskSize function
        Added \\machine\share capability to DiskFree and DiskSize functions

        WinBatch 32 for Intel PCs available

5.0M    Oct 3, 1994
        Fixed TimeDiffSecs function
        Fixed DDERequest memory leak problem
        Started adding this fixes.txt file

5.0N    Oct 10 1994
        Fixed memory leak on Dialog() function when CTL3DV2 was used.
        New n3Logout function in Novell3 extender
        Started adding NEW.HLP file
        Really fixed the \*.* problem.  Previous fix only copied
            the first file.
        Modified the DiskFree, DiskSize, and FileSize functions to
           return a floating point answer if the result is larger than
           about 2 Gigabytes
        Fixed Novell 3 Extenders (DLL10G)
              n3Map fixed to work with ODI drivers
              n3GetMapped
              n3MemberSet
              n3MemberDel

5.0P    Oct 19 1994
        Fixed FileSize for 32bit versions to return the proper answer
        Fixed a bug in StrIndex where a @backscan on a one character
           string would provide an incorrect answer.
        Fixed problem in CopyMove confirm dialog - Cancel works now.
        Fixed problem in CopyMove dialog - missing source file error caught before
           dialog.
        Fixed problem where Dialog function dialog boxes used BUTTON_FACE color
           instead of LTGRAY color.
        Fixed Novell 4 Extenders (DLL10H)
              n4Map (improved)
              n4GetMapped
              n4MemberSet
              n4MemberDel
        Novell DLL's updated from the Novell 11/93 release to the 2/94 release

        WinBatch 32 for Dec Alpha and MIPS now available.




Actually, its almost pointless to watch the Winbatch version number, as nearly all
the fixes appear in the Dll, which has its own version numbering scheme.  By simply
obtaining a new Dll, the functionality of Winbatch and the WinBatch+Compiler can
be updated.  Henceforth, we will be tracking the DLL version number.  The WinBatch
VersionDll() function will return the DLL version.  This is already built into the
SYSINFO.WBT file.

DLL 2.1ebc   Oct 26
        First showing up in WinBatch 5.0Q
        User pointed out problems in the sin and cos routines.  Problem traced to
        what appear to be singularity-type problems in the Microsoft runtime
        cos and sin routines.  The Dll now checks for the bad numbers, and if it is
        in the range where the runtime routines fail, it stuffs in an appropriate
        answer. Fix installed in the 16 bit version only, as the 32 bit versions
        do not seem to have this problem in the runtimes.

        Fixed a nit in the dialog editor where, when it was requested to
        display a script, would do so in a dialog box with a "(Unlicensed)"
        in the title.

        Fix a parser problem where an error occurred when the first part
        of a variable name matched a function name provided by the calling
        exe program.  This problem first showed up in using a "Dialog1"
        name for a dialog in the Dialog Editor.

        Fixed a SendKey to DOS bug where stuff like {UP} did not work when
        the NumLock was set.  Fixed by turning off NumLock when sending
        keystrokes to DOS.

DLL 2.1fbc
        Fixed look of Dialog boxes (back to white) when CTL3DV2.DLL is
        not installed on system.

        Fixed >very insignificant< problem where if a user did an
        AddExtender for the same DLL twice (or more) only one instance
        of the DLL was freed when the WBT file shut down.

        Fixed problem in 32 bit version for Windows'95 where default
        directory was not set properly in =C: environment variable.
        This problem caused wildcarded filenames to be improperly
        resolved into real filenames.

        Fixed problem in 16 bit version where DirRemove always
        returned a true, whether or not the directory was deleted.
        If the directory is not deleted, it now returns a suppressable,
        1030 error.


DLL 2.2abf  First showing up in WB 5.1A

        Because of a data structure change to support more binary
        buffers (5 was coded, 10 was documented) the main dll
        renamed to WBDBFxxx.dll

        Fixed TimeDiffSecs (again).  If the first date was smaller
        than the second date, the answer could be incorrect.

        Fixed a problem in FileAppend where the following code would not
        work properly.
        FileAppend("AAA.*","BBB.TXT")

        The DLL now does better <Ctrl-Break> checking.
        SendKey slowed down a minor tad to help other applications out.

        32Bit versions will try harder to locate the WIL DLL on startup.

        The compiler time check of various DLLS has been removed because
        of assorted problems.  We'll just roll the DLL name instead when
        incompatibilities arise.  The DLL appears to be extremely stable,
        and the bug fixes implemented lately tend to be minor (see above)

        A buglet where an ItemInsert on a null string installed a leading
        delimiter before the inserted item - leading to a list with two
        items, the first being null, and the second being the desired item
        - was fixed.  When ItemInsert'ing into a null list, no leading
        delimiter is stuffed in.

        A problem with PlayWaveForm where it was not checking the [Sounds]
        section of the WIN.INI file for all possible cases has been fixed.

        Fixed a problem with FileCopy/FileMove, where the target was ".."
        and it was a root directory.

        DirExist now returns TRUE for hiden and system directories.  It
        also uses an improved method (hopefully) of checking for root
        directories and directories with relative paths (eg, "..\TEMP").

        Changed FileExist to return a value of '2' if the specified file
        exists but is currently open by another application in "read-deny"
        mode.  Most of the other file manipulation functions (except
        FileOpen) will cause a sharing violation if they try to access
        such a file.

        Fixed problems handling file and directory names containing high
        ANSI characters (>127).

        Fixed a problem that occurred if, inside a FOR loop, the user
        changed the increment variable to a string.

        Fixed an intermittent problem with performing comparisons of
        negative floating point numbers.

        FileFullName now correctly expands "dot" directories
        ("." and "..") in the path name.

        Fixed a problem processing lines such as "Gosub %param1%" inside
        conditional structures, when param1 was undefined.

        (32-bit version) Fixed some incompatabilities with Windows 95:
            FileAppend
            FileMove
            MsgTextGet
            WinActivate (where the specified parent window had a modal
               child window displayed -- focus was going to the parent
               window instead of to the child window)

        Fixed a problem with accessing the DLL if it was located in the
        parent directory and ".." was on the path.

        FileCopy, FileMove, and FileAppend now check for sufficient free
        disk space before performing the requested operation, and return
        an error if there is insufficient space, as follows:

          1404  FileCopy: Insufficient free space on target drive
          1405  FileMove: Insufficient free space on target drive
          1406  FileAppend: Insufficient free space on target drive


NetWare 3 extender 12012  First showing up in WB 5.1A

  New functions:

    n3ServerList(request)
      Returns name of connected server

      request:
        0 = all connected servers (tab-delimited list)
        1 = default server
        2 = primary server

    n3FileAttrGet(filename)
      Returns NetWare file attributes

      filename = a file name, which may include a full path, and which may
      *not* include wildcards.

      Returns a number which is the sum of all attributes set for the
      specified file.  Use the bitwise AND operator (&) to determine if a
      specific attribute is set.  See below for a list of attribute
      constants.

    n3FileAttrSet(filename, attribs, mode)
      Sets NetWare file attributes

      filename = a file name, which may include a full path, and which may
      include wildcards.

      attribute is one or more NetWare file attribute constants (see below
      for list).  If multiple attributes are specified, they should be
      combined using the bitwise OR operator.

      If mode = @ON,  specified attributes are set.
      If mode = @OFF, specified attributes are removed.

      Note: The 'execute-only' attribute cannot be removed.

  New constants (used by n3FileAttrGet and n3FileAttrSet):

    @attr_Ro     Read-only
    @attr_H      Hidden
    @attr_Sy     System
    @attr_X      eXecute-only
    @attr_A      Archive-needed
    @attr_Sh     Shareable
    @attr_T      Transactional
    @attr_P      Purge
    @attr_Ri     Rename-inhibit
    @attr_Di     Delete-inhibit
    @attr_Ci     Copy-inhibit
    @attr_Dm     Don't migrate
    @attr_Ic     Immediate compress
    @attr_Dc     Don't compress


NetWare 4 extender 14007  First showing up in WB 5.1A

  Changed functions:

     n4memberGet(group, user)
     n4memberSet(group, user)
     n4memberDel(group, user)

       these functions no longer take a 'server' parameter (they change the
       groups on all servers)

  New functions:

    n4ServerList(request)
      Returns name of connected server

      request:
        0 = all connected servers (tab-delimited list)
        1 = default server
        2 = primary server
        3 = preferred server

    n4FileAttrGet(filename)
      Returns NetWare file attributes

      filename = a file name, which may include a full path, and which may
      *not* include wildcards.

      Returns a number which is the sum of all attributes set for the
      specified file.  Use the bitwise AND operator (&) to determine if a
      specific attribute is set.  See below for a list of attribute
      constants.

    n4FileAttrSet(filename, attribs, mode)
      Sets NetWare file attributes

      filename = a file name, which may include a full path, and which may
      include wildcards.

      attribute is one or more NetWare file attribute constants (see below
      for list).  If multiple attributes are specified, they should be
      combined using the bitwise OR operator.

      If mode = @ON,  specified attributes are set.
      If mode = @OFF, specified attributes are removed.

      Note: The 'execute-only' attribute cannot be removed.

  New constants (used by n4FileAttrGet and n4FileAttrSet):

    @attr_Ro     Read-only
    @attr_H      Hidden
    @attr_Sy     System
    @attr_X      eXecute-only
    @attr_A      Archive-needed
    @attr_Sh     Shareable
    @attr_T      Transactional
    @attr_P      Purge
    @attr_Ri     Rename-inhibit
    @attr_Di     Delete-inhibit
    @attr_Ci     Copy-inhibit
    @attr_Dm     Don't migrate
    @attr_Ic     Immediate compress
    @attr_Dc     Don't compress


WB 5.1C  April 18, 1995

        Fixed problem with compiler and compiled WBT's causing a sharing
        violation if the DLL was on a network and not marked read-only.

        Fixed problem with compiler and compiled WBT's not finding the DLL
        if it was located in the Windows or Windows System directory.

        Fixed problem with large compiled WBT's being unable to extract the
	WIL DLL when run on a disk >= 4 gigabytes in size.

        In WILX.DLL extender -- fixed problem with xDriveReady sometimes
        causing a GP fault.


DLL 2.2abg  First showing up in WB 5.1C

        Added two new string constants:

          @CR  (13)  carriage return
          @LF  (10)  line feed

        Fixed bug in BinaryIndex where it wouldn't find the last character
        in the buffer.


WB 5.1D  July 18, 1995

  WinBatch compiler: for new projects, compiler will use settings (type,
  icon, and extenders) from the last project.


DLL 2.2abh  First showing up in WB 5.1D

  **************************************************************************
  IMPORTANT: File delimiters
  **************************************************************************

  In order to support long file names in Windows NT and Windows 95, which
  can contain embedded spaces, we have changed the default file delimiter,
  used to delimit lists of files and directories, to a TAB in the 32-bit
  version of WIL.  In the 16-bit version of WIL, the default delimiter has
  not changed, and remains a space.

  Note that this is the "default" file delimiter.  We have added the ability
  to change the file delimiter to a character of your own choosing, using
  the new IntControl 29.  If you are using the 32-bit version of WIL, and
  want to make the file delimiter a space for compatability with existing
  scripts, you can place the following line at the beginning of each of your
  scripts:

    IntControl(29, " ", 0, 0, 0)

  Conversely, if you want to standardize on a TAB delimiter, you can use:

    IntControl(29, @TAB, 0, 0, 0)

  Apostrophes (') and back quotes (`) are no longer treated as special
  characters to delimit file names containing spaces.  They are now treated
  as ordinary characters in a file name.

  ----------------------------
  Functions which are affected
  ----------------------------

  The most important functions affected by this change are:

    DirItemize
    DiskScan
    FileItemize

  which now return lists delimited by the current file delimiter character.

  The following functions, which take file or directory lists as input
  parameters, now expect the lists to be delimited by the current file
  delimiter character.  However, they now also accept lists delimited with a
  TAB or a vertical bar ("|", which may be easier to code in a WIL script):

    DirItemize
    DirRemove
    DiskFree
    FileAppend
    FileAttrSet
    FileCopy
    FileDelete
    FileItemize
    FileMove
    FileRename
    FileSize
    FileTimeSet
    FileTimeTouch

  Note that DiskFree will continue to accept space-delimited lists as input.

  **************************************************************************

  New IntControl:

    IntControl(29, delimiter, 0, 0, 0)
      Changes the default file delimiter.

    The first parameter is the new file delimiter you want to use, and must
    be a single character.  The return value of the function is the previous
    file delimiter character.  If you specify an empty string ("") as the
    first parameter, the function will return the current file delimiter
    character but the file delimiter will not be changed.

  Added option to WinMetrics: WinMetrics(-4) will return the Windows
  platform:

    0 = Other
    1 = Windows
    2 = Windows for Workgroups
    3 = Win32s
    4 = Windows NT
    5 = Windows 95

  In StrSub, you can now specify a length of -1, which will extract the rest
  of the string.

  In TimeWait, you can now specify "00:00:00" for the date, which will wait
  for the next occurrence of the specified time (ie, today or tomorrow).

  Added support for 3-D Dialog's in Windows NT, if CTL3D32.DLL is present in
  the SYSTEM32 directory.

  Fixed TimeAdd so that it doesn't trim out leading zeros in each field.

  The Wallpaper function now obeys the tile parameter in Windows 95.

  Improved handling of colors in Dialog function.

  Added 3D effect to radio buttons and checkboxes in Dialog function.

  Fixed problem where if an error occurred in a called WBT, control would go
  to the "Cancel" label in the calling program.

  In Dialog and DialogBox, you can now really use IntControl(4) to allow the
  dialog to be closed without selecting a file, even if there is an edit box
  associated with a file listbox.  If you press a pushbutton after changing
  the file mask in an edit box, the listbox will be updated with the new
  mask. But if you press a pushbutton without changing the file mask, the
  dialog will close (and will return a file name of "NOFILESELECTED").

  Fixed problem where string variables were not converted properly to
  integers at the beginning of a "For" loop.

  Fixed problem where lines that should have been ignored (eg, if they
  followed a Break statement) could cause errors if they contained invalid
  syntax.

  If the second parameter of an IntControl(12) statement is "" or "0", any
  previously-set exit message will now be cleared.  Also, you can now
  specify a message beginning with "0".

  Fixed problem processing "If" statements with a blank string to the left
  of the equals sign.

  Fixed a problem in the 32-bit version where the Dialog function would
  return an invalid file name (garbage characters) if no file was selected.

  Improved IsKeyDown processing (especially under Windows 95).

  Improved Ctrl-Break checking (especially under Windows 95).

  Made WinWaitClose steal less processor time in the 32-bit version.


WB 5.1E  Aug 3, 1995

  In the 32-bit version of WinBatch, it is now possible to run WinBatch
  files whose names contain spaces, by delimiting the file name with
  double quotes on the WinBatch command line.  For example:

    WBAT32I "Sample Program.WBT" param1 param2

  CallExt now handles file names containing spaces, in 32-bit version.

  32-bit version of WinBatch will now run WBT's with file names longer than
  64 characters.

  INI settings have been moved from WWW-PROD.INI to the registry, under key:

    HKEY_LOCAL_MACHINE\SOFTWARE\Wilson WindowWare\Settings\WWW-PROD


DLL 2.2abj  First showing up in WB 5.1E

  For functions which take a partial window name, you can now specify a
  tilde (~) as the first character of the window name, which will match any
  window containing the specified string anywhere in its title (ie, not
  necessarily at the beginning of the title).  For example, "~Notepad" will
  match a window title of "(Untitled) - Notepad" and a window title of "My
  Notepad Application", as well as a window title of "Notepad - (Untitled)".
  This should prove especially useful under Windows 95.  A '~' at the end of
  the specified window name indicates (as before) that the name must match
  the window title through to the end of the title.  So, "~Notepad~" will
  match a window title of "Notepad" and a window title of "(Untitled) -
  Notepad", but will not match a window title of "Notepad - (Untitled)".

  New function:

    WinIdGet(partial-winname).
      Returns a unique "Window ID" (pseudo-handle) for the specified window.

    The Window ID can subsequently be used with any WIL functions which
    accept a window name as a parameter.  This can be useful to distinguish
    between multiple windows with the same name, or to track a window whose
    title changes.  For example:

    Run("notepad.exe", "")
    winid1 = WinIdGet("~Notepad")  ; gets the most-recently-accessed Notepad
    Run("notepad.exe", "")
    winid2 = WinIdGet("~Notepad")  ; gets the most-recently-accessed Notepad
    WinPlace(0, 0, 500, @ABOVEICONS, winid1)
    WinPlace(500, 0, 1000, @ABOVEICONS, winid2)
    WinActivate(winid1)

  All functions which accept a partial window name as a parameter now accept
  a Window ID, as obtained from the new WinIdGet function (above).

  New functions to manipulate Windows 95 shortcut link files (Windows 95 only):

    ShortcutExtra(linkname, description, hotkey, iconpath, iconindex)
      Sets additional information for the specified shortcut file.
        iconindex = 0=based index of desired icon in "iconpath"

    ShortcutInfo(linkname)
      Returns information on the specified shortcut file (TAB-delimited):
        path, params, workdir, showmode, desc, hotkey, iconpath, iconindex

    ShortcutMake(linkname, pathname, params, workdir, showmode)
      Creates a shortcut for the specified filename.
        showmode = @NORMAL, @ZOOMED, or @ICON

  In 32-bit version, Run... commands now support file and directory names
  containing spaces.

  In 32-bit version, Run... commands no longer support the undocumented
  method of running a program with a non-standard extension (eg,
  "SSSTARS.SCR") by replacing the period (.) in the file name with an
  asterisk (*).  However, this is no longer necessary, as the Run...
  commands in the 32-bit version can now run such programs directly.

  The 32-bit bit version is now able to run Windows 95 shortcut files under
  Windows 95, using any of the Run... functions.  The "Run" mode specified
  in the shortcut file (ie: "Normal window", "Minimized", or "Maximized")
  will always be obeyed, any command-line parameters specified in the
  shortcut's "Target" field will override any parameters passed by the
  Run... function, and a working directory specified in the shortcut's
  "Start in" field will override a working directory parameter in RunShell.

  New directory attribute functions:

    DirAttrGet(dirname)
      Gets directory attributes (like FileAttrGet)

    DirAttrSet(dir-list, settings)
      Sets directory attributes (like FileAttrSet)

  FileAttrGet and FileAttrSet now return an error if a directory name is
  specified.  Use the new DirAttrGet and DirAttrSet instead.

  New functions (32-bit version only -- the 16-bit version will just return
  the passed file name):

    FileNameLong(filename)
      Returns the long version of a filename.

    FileNameShort(filename)
      Returns the short (ie, 8.3) version of a filename.

  New IntControl (32-bit, Windows NT only):

    IntControl(30, "sourcefile", "destination", 0, 0)
      Performs a delayed file move.  The file is not actually moved until
      the operating system is restarted.  This can be useful for replacing
      system files.  "Sourcefile" must be a single file name, with no
      wildcards.  "Destination" may be a file name (which may contain
      wildcards) or a directory name.  The destination file MUST be on the
      same drive as the source file.  If the destination file exists, it
      will be replaced without warning.  "Destination" can also be a NULL
      string (""), in which case the source file will be deleted when the
      operating system is restarted.

      Under Windows 95, and in the 16-bit version, this function performs a
      regular (non-delayed) FileMove.

      This function returns "1" on success, "2" if it performed a regular
      FileMove instead, and "0" on failure.

  New registry functions (32-bit version only):

    RegApp(progname, path)
      Creates registration entries for a program under "App Paths".

    RegDelValue(handle, subkey-string)
      Removes a named value for the specified subkey from the registry.
        "Subkey-string" must be enclosed in square brackets (see
        RegSetValue).  "Subkey-string" of "[]" deletes the "default" value.

  In 32-bit version, PlayMidi function now support file and directory names
  containing spaces.

  New function (32-bit version only):

    InstallFile(filename, targname, default-targdir, delete-old, flags)
      Installs a file.

      "Filename" is the name of the source file to be installed, with
      optional path.

      "Targname" is the name of the file to be created.  It may not contain
      a path.  You can specify a blank string (""), in which case the target
      file will have the same name as the source file.

      "Default-targdir" is the directory where you want the file to be
      installed.  The file will be installed to this directory, unless it is
      a shared file or a file with the same name already exists elsewhere.

      If "Delete-old" is @TRUE (or non-zero), and a file with the same name
      as the file being installed already exists, it will be deleted, even
      if it is located in a directory (on the path) other than the target
      directory.  If "delete-old" is @FALSE, such a file will not be
      deleted.

      "Flags" specifies other optional flags that affect the operation of
      this function, combined with the OR ('|') operator.  They are:

        1 - shared file (file should be installed to a shared directory)
        2 - force install (install file even if older than existing file)

      When installing 32-bit image files (EXE's, DLL's, etc.), this function
      uses the version information embedded in the files to determine
      whether a file being installed is newer than an existing file with the
      same name.  When installing any other type of file, which does not
      contain appropriate version information, this function uses the time
      stamps of the respective files instead.

      The return value is in the form:

        "result|tempname", or
        "result|"

      where "result" is the value returned by the "VerInstallFile" Windows
      API function; and "tempname" is the name of the temporary file that
      was created if the file could not be installed, or blank otherwise.

  New function (menu-based implementations only):

    CurrFilePath()
      Returns the full path+filename of the currently-selected file.

      Like CurrentFile, but returns a full pathname.

  New IntControl (32-bit, Windows 95 only):

    IntControl(31, 0, 0, 0, 0)
      Returns a tab-delimited list of WinId's for all open Explorer windows.

  IntControl(67) and IntControl(68) now work in Windows 95.

  DosVersion now returns correct values in Windows 95.

  Added new request #'s to WinResources for 32-bit version:

    10 - returns a number between 0 and 100 that gives a general idea of
         current memory utilization, in which 0 indicates no memory use and
         100 indicates full memory use.
    11 - total number of bytes of physical memory.
    12 - number of bytes of physical memory available.
    13 - total number of bytes that can be stored in the paging file.  Note
         that this number does not represent the actual physical size of the
         paging file on disk.
    14 - number of bytes available in the paging file.
    15 - total number of bytes that can be described in the user mode
         portion of the virtual address space of the calling process.
    16 - number of bytes of unreserved and uncommitted memory in the user
         mode portion of the virtual address space of the calling process.

    The existing request #'s (0-4) will still work, but are not useful on
    32-bit platforms.

    It is not possible to determine free system resources in the 32-bit
    version.

  Fixed problem with Dialog and DialogBox returning "NOFILESELECTED" even
  if a file was selected, if IntControl(4) was set.

  INI settings have been moved from WWW-PROD.INI to the registry, under key:

    HKEY_LOCAL_MACHINE\SOFTWARE\Wilson WindowWare\Settings\WWW-PROD


WB 95B  Sept 7, 1995

  New Box functions:

    BoxButtonDraw(BoxID, button ID, "text", "rect")
    BoxButtonKill(BoxID, button ID)
    BoxButtonStat(BoxID, button ID)
    BoxCaption(BoxID, caption)
    BoxColor(BoxID, "color", wash color)
    BoxDataClear(BoxID, "tag")
    BoxDataTag(BoxID, "tag")
    BoxDestroy(BoxID)
    BoxDrawCircle(BoxID, "rect", style)
    BoxDrawLine(BoxID, "rect")
    BoxDrawRect(BoxID, "rect", style)
    BoxDrawText(BoxID, "rect", "text", erase flag, alignment)
    BoxesUp("rect", show mode)
    BoxMapMode(BoxID, map mode)
    BoxNew(BoxID, "rect", style)
    BoxPen(BoxID, "color", width)
    BoxTextColor(BoxID, "color")
    BoxTextFont(BoxID, "name", size, style, family)
    BoxUpdates(BoxID, update flag)

  The 32-bit WinBatch compiler now allows you to specify an icon for the EXE
  being compiled.


DLL 2.2abk  First showing up in WB 95B

  In the 32-bit version, the Run... functions will look in the registry
  under "App Paths" for the location of the specified program, if you do not
  specify a path for it.

  In the 32-bit version, the Run... functions will look in the registry
  under "App Paths" for a "Path" setting for the specified program, and, if
  found, will prepend it to the "PATH" environment variable before running
  the program.

  In the 32-bit version, the following functions now work, but only with
  32-bit applications:

    AppExist
    AppWaitClose
    WinExeName

  In the 32-bit version, AppExist and AppWaitClose are not able to detect
  the existence of 16-bit DOS or Windows applications, and WinExeName will
  return the string "(16-bit application)".

  In the 32-bit version under Windows NT, these functions accept (and
  return) module names instead of full program names.  The module name is
  usually the same as the root name of the program, without the extension.
  For example, WinExeName("Program Manager") will return "progman".  With
  AppExist and AppWaitClose, any file extension or path information which is
  part of the 'program-name' parameter is ignored; so, for example,
  AppExist("c:\temp\progman.exe") will return TRUE if Program Manager is
  running, regardless of what directory PROGMAN.EXE is actually located in.
  One exception: WinExeName("") will return a full path to the program
  making the current call to the WIL Interpreter.

  BinaryPeekStr, BinaryPokeStr, and BinaryStrCnt now check for (and reject)
  negative parameters.

  RunWait now gives up some processor time while it's waiting.

  New function (32-bit version only):

    WinSysInfo()
      Returns a tab-delimited list of system configuration information:
        computer name of the current system.
        processor architecture.
        page size (specifies granularity of page protection and commitment).
        mask representing the set of processors configured into the system.
        number of processors in the system.
        processor type.
        granularity in which memory will be allocated.
        system's architecture-dependent processor level.
        architecture-dependent processor revision.

    This function should be used instead of WinConfig in the 32-bit version.

  Additional request #'s for WinMetrics (32-bit version only):

    41 TRUE or non-zero if the Microsoft Windows for Pen computing
       extensions are installed; zero, or FALSE, otherwise.
    42 TRUE or non-zero if the double-byte character set (DBCS) version of
       USER.EXE is installed; FALSE, or zero otherwise.
    43 Number of buttons on mouse, or zero if no mouse is installed.
    44 (Win95 only) TRUE if security is present, FALSE otherwise.
    63 (Win95 only) The least significant bit is set if a network is
       present; otherwise, it is cleared.  The other bits are reserved for
       future use.
    67 (Win95 only) Value that specifies how the system was started:
         0 - Normal boot
         1 - Fail-safe boot
         2 - Fail-safe with network boot
       Fail-safe boot (also called SafeBoot) bypasses the user's startup files.
    70 TRUE or non-zero if the user requires an application to present
       information visually in situations where it would otherwise present
       the information only in audible form; FALSE, or zero, otherwise.
    73 (Win95 only) TRUE if the computer has a low-end (slow) processor.
    74 (Win95 only) TRUE if the system is enabled for Hebrew/Arabic languages.

    There are a number of other request #'s which can be specified, but are
    of limited usefulness and therefore not documented here.  Details on
    these can be obtained from Win32 programming references, available from
    Microsoft (and others).

  New mouse functions:

    MouseClick(click-type, modifiers)
      Clicks mouse button(s).

      This function performs a mouse click at the current cursor position.

      "Modifiers" can be set to 0 if none are desired.

        click-type:
          @LCLICK      left click
          @RCLICK      right click
          @MCLICK      middle click
          @LDBLCLICK   left double-click
          @RDBLCLICK   right double-click
          @MDBLCLICK   middle double-click

        modifiers (can be OR'ed together with '|'):
          @SHIFT       hold down shift key
          @CTRL        hold down control key
          @LBUTTON     hold down left mouse button
          @RBUTTON     hold down right mouse button
          @MBUTTON     hold down middle mouse button

    MouseClickBtn(win-name, child-win, button-text)
      Clicks on the specified button control.

      This function clicks on the pushbutton, radio button, or checkbox
      whose text is specified by "button-text".

      If the button is located within a top-level window, specify the window
      name in "win-name" and specify a blank string for "child-win".

      If the button is located within a child window, specify the top-level
      window name in "win-name" and the child window name in "child-win".

    MouseMove(x, y, win-name, child-win)
      Moves the mouse to the specified X-Y coordinates (based on a 1000 x
      1000 screen).

      If "win-name" specifies a top-level window and "child-win" is a blank
      string, the specified X-Y coordinates are relative to "win-name".

      If "win-name" specifies a top-level window and "child-win" specifies a
      child window of "win-name", the specified X-Y coordinates are relative
      to "child-win".

      If "win-name" and "child-win" are both blank strings, the specified X-Y
      coordinates are relative to the Windows desktop.

  New constants:

    @LBUTTON     left button
    @RBUTTON     right button
    @MBUTTON     middle button
    @LCLICK      left click
    @RCLICK      right click
    @MCLICK      middle click
    @LDBLCLICK   left double-click
    @RDBLCLICK   right double-click
    @MDBLCLICK   middle double-click

  Fixed problem where an invalid YmdHms string containing two consecutive
  colons could cause a GP Fault.

  In the 32-bit version, AppExist and AppWaitClose will now wait several
  seconds for the specified application to appear.

  Fixed problem in menu-based WIL applications where tabs in menu item
  descriptions would be displayed as non-printable "black-box" characters.

  Added new request #'s to MouseInfo:

    5 - returns mouse coordinates relative to the client area of the window
        under the cursor, in virtual (1000x1000) screen units.
    6 - returns mouse coordinates relative to the client area of the window
        under the cursor, in virtual (1000x1000) client units.

  In the 32-bit version, IconReplace now supports 32-bit EXE files.  The
  replacement icon must be the exact same size as the original icon.

  New IntControl:

    IntControl(32, address, "data type", 0, 0)
      Returns the contents of the memory location specified by "address".
      "Data type" specifies the type of data to be retrieved:
        "BYTE" - returns a byte
        "WORD" - returns a word
        "LONG" - returns a long integer

  Fixed WinMetrics(-1) with 32-bit graphics cards.  It was returning -1 for
  these; it now returns 2,147,483,647.


WB 95C  Oct 10, 1995

  New function:

    BoxButtonWait()
      Waits for any button in any box to be pressed.

  Fixed problem with WinBatch locking up when minimizing a WinBatch box that
  was displaying width-justified text.


DLL 2.2abl  First showing up in WB 95C

  Fixed problem with DirExist returning @FALSE for a UNC which was a root
  directory share on another machine (eg, "\\SERVER\C").

  DirMake will now create multi-level directories (eg, "C:\ABC\DEF\GHI").

  New functions:

    BinaryIndexNc(handle, offset, string, direction)
      Like BinaryIndex, but case-insensitive.

    WinItemNameId()
      Returns a list of top-level window names and their "Window ID's", in
      the form:
        "window1-name|window1-ID|window2-name|window2-ID|..."

    In the 32-bit version, Delay and TimeDelay functions now accept
    floating point numbers: eg, Delay(0.5).

  New function:

    ShellExecute(file-name, params, directory, display mode, operation)
      Performs a ShellExecute.

      "file-name" is a program or data file to be launched.

      "display mode" can be @NORMAL, @ICON, or @ZOOMED.  Or you can specify
      0 to display "file-name" in its default mode.

      "operation" is the operation to perform on the file ("Open", "Print",
      etc.), which may or may not correspond to an available "verb" on the
      context menu for the file.  This parameter may be case-sensitive.
      Specify a blank string "" for the file's default operation.

      Note: If you use this function to launch a shortcut, and the shortcut
      points to an invalid path, Windows will display a "Missing Shortcut"
      dialog box asking if you wish to update the shortcut.  This would not
      be suitable to use in unattended operation.  Instead, you could use
      one of the Run.. functions to launch the shortcut, which would return
      an error #1932 if the shortcut could not be launched, and this error
      could be trapped using the ErrorMode function.

      See also RunShell.

  New function (32-bit version only):

    RegQueryItem(handle, subkey)
      Returns a tab-delimited list of named data items for the specified
      subkey.

  New IntControl:

    IntControl(33, p1, 0, 0, 0)
      Controls whether a listbox control in a dialog box allows multiple
      items to be selected.

        P1  Meaning
        --  -------
        0   Single selection
        1   Multiple selection (default)

  Improved registry functions in 32-bit version:

    RegSetValue, RegQueryValue, and RegDelValue:

      1. Can now specify a named value of [Default] to indicate the primary
         value for the key (shown in the Registry Editor as "(Default)"); eg:

           RegSetValue(mykey, "[Default]", "some data")

      2. Can now specify a subkey string containing a named value; eg:

           RegSetValue(mykey, "MySubKey[MyItem]", "some data"), or,
           RegSetValue(mykey, "MySubKey\[MyItem]", "some data")

  Fixed WaitForKey in the 32-bit version.

  In the 32-bit version, you can now use the Run... functions to "run" data
  files (eg, Run("win.ini", "")).

  FileItemize and DirItemize now handle names containing spaces.

  In 32-bit version, fixed problem with 3D dialogs not being used under
  Windows NT.


WB 95D  Nov 1, 1995

  Compiler now optimizes WBT's by removing comment lines and whitespace.

  OLE automation (ObjectOpen and ObjectClose functions) now supported in
  32-bit version.

  When a custom icon is specified, the 32-bit compiler now installs it as
  the icon that is displayed in the Win95 Explorer window, as well as the
  icon that is shown in the task bar.

  Fixed a problem with some of the Box functions, where a color or font that
  was specified in a definition-type command (such as BoxTextColor) would be
  used for an output-type command (such as BoxDrawText) that preceded it in
  the command stack, instead of the default color or font being used.


DLL 2.2abl  First showing up in WB 95D

  New registry functions (32-bit version only):

    RegQueryBin(handle, subkey)
      Retrieves a binary value from the registry.
        The value is returned as a space-delimited string of hex bytes; eg:
          "AB 45 3E 01"

    RegQueryDword(handle, subkey)
      Retrieves a DWORD value from the registry.

    RegSetBin(handle, subkey, value)
      Sets a binary value in the registry.
        The value is specified as a space-delimited string of hex bytes; eg:
          "AB 45 3E 01"

    RegSetDword(handle, subkey, value)
      Sets a DWORD value in the registry.

  New date/time functions:

    TimeJulToYmd(julian-date)
      Converts the specified Julian date value to a date in YmdHms format.
        Hms will always be "00:00:00".

    TimeSubtract(YmdHms1, YmdHms2)
      Subtracts YmdHms2 from YmdHms1.
        YmdHms2 can not be larger than YmdHms1.

  New IntControl's:

    IntControl(34, p1, 0, 0, 0)
      Returns the error message string which corresponds to the specified
      WIL error.
        p1 = error number.

    IntControl(35, p1, 0, 0, 0) (32-bit version only)
      Adjusts SendKey delay.
        p1 = amount of time to delay between each keypress, in milliseconds
        (1000 milliseconds = 1 second).
      Returns previous delay setting.

      The default delay (in the 32-bit version) is 25.  Specify a larger
      number to slow SendKey down, or a smaller number to speed it up
      (0 = no delay).

    IntControl(36, p1, p2, 0, 0) (32-bit version only)
      Waits until an application is waiting for user input.
        p1 = window name associated with application
        p2 = timeout, in milliseconds (-1 = no timeout)
      This function waits until the process which created the specified
      window has finished its initialization and is waiting for user input
      with no input pending, or until the specified timeout interval has
      elapsed.  It can only be used with 32-bit GUI applications.  It
      returns @TRUE if it has successfully waited, or FALSE if a timeout
      has occurred (or if it was unable to initiate a wait).

  In dialog boxes, if you create an EDITBOX field with a variable name that
  begins with "PW_", it will be treated as a passsword field (ie, asterisks
  will be echoed instead of the actual characters that the user types).

  In dialog boxes, file listboxes now use long file names in the 32-bit
  version under Windows 95.

  In the DiskScan function, request numbers 8 (CD_ROM) and 16 (RamDisk) are
  now supported in the 16-bit version.

  In 32-bit version, added 3D effects to dialog listboxes and edit controls
  under Windows 95.

  SendMenusTo now accepts a Window ID for the window name parameter.

  In 32-bit version, fixed a problem using the Run[] commands to launch a
  Windows 95 shortcut file.

  InstallFile function now supported in 16-bit version.


NetWare 3 extender 12013  First showing up in WB 95D

  Fixed a problem with n3GetMapped, if the specified server name was also
  the partial name of another server (eg, if you specified "\\SERVER1" and
  you also had a server named "\\SERVER10").

  n3FileAttrGet and n3FileAttrSet can now be used to get and set directory
  attributes.


NetWare 4 extender 14010  First showing up in WB 95D

  Fixed n4Detach function; it now does a full detach, and it now returns
  @FALSE if it is unable to detach from the monitored connection (ie, from
  the primary or login server).

  Fixed a problem with n4GetMapped, if the specified server name was also
  the partial name of another server (eg, if you specified "\\SERVER1" and
  you also had a server named "\\SERVER10").

  n4FileAttrGet and n4FileAttrSet can now be used to get and set directory
  attributes.


WB 95E  Nov 2, 1995


DLL 2.2abm  First showing up in WB 95E

  In 16-bit version, fixed a problem with DirMake creating a directory name
  containing high ANSI characters (>127).


WB 96A  Jan 1, 1996

  WinBatch for PowerPC now available.

  New IntControl:

    IntControl(1000, p1, 0, 0, 0)
      Sets the exit code returned by WinBatch.
        p1 = exit code

      This specifies the value returned by WinBatch's "WinMain" function.

      Returns the previous setting.

  Fixed the "Help" button in the WinBatch compiler.

  In the BoxColor function, the gradient effect (wash color) now works with
  video drivers > 256 colors.


DLL 2.3abm  First showing up in WB 96A

  New function:

    DiskInfo(drive-letter, request#)
      Returns information on the specified disk drive.

      Req#   Return value
      ----   ------------
       1     sectors per cluster
       2     bytes per sector
       3     number of free clusters
       4     total number of clusters


  New IntControl's:

    IntControl(37, p1, p2, p3, 0)
      Replaces the specified icon in an EXE file.

        p1 = EXE file
        p2 = icon file
        p3 = ordinal position of icon to replace

      This is similar to the IconReplace function, except it allows you to
      change an icon other than the first icon in the file.

      Note: This IntControl is subject to change in future versions.

    IntControl(39, p1, 0, 0, 0)
      Sets the file sharing mode for file reads.
        p1 = share mode for file reads (default = 1)

      Valid share modes are:
        -1 = don't change (keep current setting)
         0 = prevent the file from being shared
         1 = allow other open operations for read access
         2 = allow other open operations for write access
         3 = allow other open operations for read and write access

      This affects the FileOpen("READ") and BinaryRead functions.

      Returns previous setting.

    IntControl(40, p1, 0, 0, 0)
      Sets the file sharing mode for file writes.
        p2 = share mode for file writes (default = 0)

      This affects the FileOpen("WRITE"/"APPEND") and BinaryWrite functions.

      Returns previous setting.

      See IntControl(38) for a list of valid share modes.

  New return code for WinMetrics(-3):
    4 = PowerPC32

  In 32-bit version, fixed a problem using DirName with directory names
  containing spaces or commas.

  Fixed problem with TimeJulToYmd with years >= 2000.

  FileWrite now returns an error if the write failed.

  In 16-bit version, fixed problem  with DiskScan causing a GP fault on
  systems with Stacker compression software installed.

  In 32-bit version, the following functions are now a little more
  well-behaved in giving up processor time: RunWait (and RunShell with the
  "@WAIT" parameter), AppWaitClose, and Delay/TimeDelay.

  Fixed a problem with the Dialog function, where if you defined an EDITBOX
  control after a FILELISTBOX control, the file listbox would revert to a
  filespec of "*.*".

  In 32-bit version, fixed a prooblem with the Dialog function, where if you
  had a filespec other than "*.*", it would not show subdirectories in the
  file list.

  In 32-bit version, added some code to the ClipGet and ClipPut functions to
  try to avoid "Clipboard owned by another app" error messages.

  Fixed problem with TimeWait, when specifying a date of "00:00:00" and a
  time that was earlier than the current time.

  In 32-bit version, added a 25-millisecond delay between keystrokes sent
  using the SendKey function.  This can be adjusted using IntControl(35).

  Fixed problem with PlayWaveForm in 32-bit version.


Windows 32 extender 10004

  netDirDialog no longer returns an error if user presses "Cancel".


Dialog Editor 96A
  Fixed the "Help" menu.


WB 96B  Jan 17, 1996

  In the 16-bit version, fixed a problem where doing a BoxDestroy
  immediately after resizing a box window caused a GPF.


DLL 2.3bbm  First showing up in WB 96B

  New binary functions:

    BinaryHashRec(buffer, recsize, keyoffset, keysize, keyval)

      Returns a pointer to a record in a binary buffer.

      The binary buffer must consist of fixed-length records, and each
      record must contain a fixed-length key field in a fixed position.

      "Recsize" specifies the size of each record.

      "Keyoffset" is the offset within a record of the key field (where the
      first byte in the record is 0).

      "Keysize" specifies the size of the key field, in bytes.

      "Keyval" is the value of the key field to be searched for.

      This function uses a hashing algorithm to calculate a hash value for
      the specified "keyval", which provides an offset into the binary
      buffer.  It starts searching at that offset for either (1) a record
      with a key field whose first byte is a 0, or (2) a record with a key
      field whose value is the same as "keyval".  For case (1), it stores
      "keyval" in the key field of the found record, and returns the offset
      of the beginning of that record.  For case (2), it doesn't write
      anything and simply returns the offset of the record.  If an
      appropriate record cannot be found (ie, if the buffer is full), it
      returns an error.

    BinaryIncr(buffer, offset)
    BinaryIncr2(buffer, offset)
    BinaryIncr4(buffer, offset)
    BinaryIncrFlt(buffer, offset)

      These functions are equivalent to doing a BinaryPeek[...],
      incrementing the extracted value by 1, and then doing a
      BinaryPoke[...] to store the new value.

      They return the new value.

    BinaryPeek2(buffer, offset)
    BinaryPeek4(buffer, offset)
    BinaryPeekFlt(buffer, offset)

      These functions are like BinaryPeek, but they extract 2, 4, or 8 bytes
      (respectively) beginning at "offset"

    BinaryPoke2(buffer, offset, value)
    BinaryPoke4(buffer, offset, value)
    BinaryPokeFlt(buffer, offset, value)

      These functions are like BinaryPoke, but they store the specified
      "value" in 2, 4, or 8 bytes (respectively) beginning at "offset".

    BinarySort(buffer, recsize, keyoffset, keysize, flags)

      Sorts records in a binary buffer.  The buffer is sorted in place.

      The binary buffer must consist of fixed-length records, and each
      record must contain a fixed-length key field in a fixed position.

      "Recsize" specifies the size of each record.

      "Keyoffset" is the offset within a record of the key field (where the
      first byte in the record is 0).

      "Keysize" specifies the size of the key field, in bytes.

      "Keyval" is the value of the key field to be searched for.

      "Flags" consists of a maximum of one value from each of the following
      groups, combined with the binary OR ("|") operator.  If either (or
      both) is not specified, the default value will be used:

      Sort sequence:
        @ASCENDING    (default)
        @DESCENDING

      Key type:
        @STRING       (default)
        @WORD1        (ie, BYTE)
        @WORD2        (ie, WORD)
        @WORD4        (ie, DWORD)
        @FLOAT8

      String sorts are case-insensitive.

  Change to BinaryIndex and BinaryIndexNc:

    You can now specify a blank string ("") for the "string" parameter, in
    which case the function will return the offset of the first non-NULL
    character found, starting at "offset".

  New constants:

    @ASCENDING
    @DESCENDING

    @STRING
    @WORD1
    @WORD2
    @WORD4
    @FLOAT8

  Fixed BinaryIndexNc.

  BinaryPoke now correctly returns the previous value, as documented.

  In the 32-bit version, KeyToggleSet no longer returns an error (however,
  it is still subject to the limitations described in the documentation).

  In the 16-bit version, fixed DirAttrSet.

  The following string functions:

    StrIndex
    StrScan
    StrSub

  no longer return an error for illegal bounds conditions.  Instead,
  StrIndex/StrScan now return a 0, and StrSub returns a blank string.
