home *** CD-ROM | disk | FTP | other *** search
/ C!T ROM 21 / CTROM21B.mdf / win95 / utility / wb99g32i / fixes.tx_ < prev    next >
Text File  |  1999-05-07  |  212KB  |  5,254 lines

  1. WB 96A  Jan 1, 1996
  2.  
  3.   New IntControl:
  4.  
  5.     IntControl(1000, p1, 0, 0, 0)
  6.       Sets the exit code returned by WinBatch.
  7.  
  8.   Fixed the "Help" button in the WinBatch compiler.
  9.  
  10.   In the BoxColor function, the gradient effect (wash color) now works with
  11.   video drivers > 256 colors.
  12.  
  13.  
  14. DLL 2.3abm  First showing up in WB 96A
  15.  
  16.   New function:
  17.  
  18.     DiskInfo(drive-letter, request#)
  19.       Returns information on the specified disk drive.
  20.  
  21.   New IntControl's:
  22.  
  23.     IntControl(37, p1, p2, p3, 0)
  24.       Replaces the specified icon in an EXE file.
  25.  
  26.     IntControl(39, p1, 0, 0, 0)
  27.       Sets the file sharing mode for file reads.
  28.  
  29.     IntControl(40, p1, 0, 0, 0)
  30.       Sets the file sharing mode for file writes.
  31.  
  32.   New return code for WinMetrics(-3):  4 = PowerPC32
  33.  
  34.   In 32-bit version, fixed a problem using DirName with directory names
  35.   containing spaces or commas.
  36.  
  37.   Fixed problem with TimeJulToYmd with years >= 2000.
  38.  
  39.   FileWrite now returns an error if the write failed.
  40.  
  41.   In 16-bit version, fixed problem  with DiskScan causing a GP fault on
  42.   systems with Stacker compression software installed.
  43.  
  44.   In 32-bit version, the following functions are now a little more
  45.   well-behaved in giving up processor time: RunWait (and RunShell with the
  46.   "@WAIT" parameter), AppWaitClose, and Delay/TimeDelay.
  47.  
  48.   Fixed a problem with the Dialog function, where if you defined an EDITBOX
  49.   control after a FILELISTBOX control, the file listbox would revert to a
  50.   filespec of "*.*".
  51.  
  52.   In 32-bit version, fixed a prooblem with the Dialog function, where if you
  53.   had a filespec other than "*.*", it would not show subdirectories in the
  54.   file list.
  55.  
  56.   In 32-bit version, added some code to the ClipGet and ClipPut functions to
  57.   try to avoid "Clipboard owned by another app" error messages.
  58.  
  59.   Fixed problem with TimeWait, when specifying a date of "00:00:00" and a
  60.   time that was earlier than the current time.
  61.  
  62.   In 32-bit version, added a 25-millisecond delay between keystrokes sent
  63.   using the SendKey function.  This can be adjusted using IntControl(35).
  64.  
  65.   Fixed problem with PlayWaveForm in 32-bit version.
  66.  
  67.  
  68. Windows 32 extender 10004
  69.  
  70.   netDirDialog no longer returns an error if user presses "Cancel".
  71.  
  72.  
  73. Dialog Editor 96A
  74.   Fixed the "Help" menu.
  75.  
  76.  
  77. WB 96B  Feb 12, 1996
  78.  
  79.   In the 16-bit version, fixed a problem where doing a BoxDestroy
  80.   immediately after resizing a box window caused a GPF.
  81.  
  82.   Fixed a resource leak problem with BoxColor when using gradient effects.
  83.  
  84.  
  85. DLL 2.3bbm  First showing up in WB 96B
  86.  
  87.   New binary functions:
  88.  
  89.     BinaryHashRec(buffer, recsize, keyoffset, keysize, keyval)
  90.  
  91.       Returns a pointer to a record in a binary buffer, using a hashing
  92.       algorithm.
  93.  
  94.     BinaryIncr(buffer, offset)
  95.     BinaryIncr2(buffer, offset)
  96.     BinaryIncr4(buffer, offset)
  97.     BinaryIncrFlt(buffer, offset)
  98.  
  99.       These functions are equivalent to doing a BinaryPeek[...],
  100.       incrementing the extracted value by 1, and then doing a
  101.       BinaryPoke[...] to store the new value.
  102.  
  103.     BinaryPeek2(buffer, offset)
  104.     BinaryPeek4(buffer, offset)
  105.     BinaryPeekFlt(buffer, offset)
  106.  
  107.       These functions are like BinaryPeek, but they extract 2, 4, or 8 bytes
  108.       (respectively) beginning at "offset"
  109.  
  110.     BinaryPoke2(buffer, offset, value)
  111.     BinaryPoke4(buffer, offset, value)
  112.     BinaryPokeFlt(buffer, offset, value)
  113.  
  114.       These functions are like BinaryPoke, but they store the specified
  115.       "value" in 2, 4, or 8 bytes (respectively) beginning at "offset".
  116.  
  117.     BinarySort(buffer, recsize, keyoffset, keysize, flags)
  118.  
  119.       Sorts records in a binary buffer.  The buffer is sorted in place.
  120.  
  121.   Change to BinaryIndex and BinaryIndexNc:
  122.  
  123.     You can now specify a blank string ("") for the "string" parameter, in
  124.     which case the function will return the offset of the first non-NULL
  125.     character found, starting at "offset".
  126.  
  127.   Fixed BinaryIndexNC
  128.  
  129.   BinaryPoke now correctly returns the previous value, as documented.
  130.  
  131.   In the 32-bit version, KeyToggleSet no longer returns an error (however,
  132.   it is still subject to the limitations described in the documentation).
  133.  
  134.   In the 16-bit version, fixed DirAttrSet.
  135.  
  136.   The following string functions:
  137.  
  138.     StrIndex
  139.     StrScan
  140.     StrSub
  141.  
  142.   no longer return an error for illegal bounds conditions.  Instead,
  143.   StrIndex/StrScan now return a 0, and StrSub returns a blank string.
  144.  
  145.  
  146. WB 96C  Mar 22, 1996
  147.  
  148.   FileMenu now works in Windows NT 4.0.
  149.  
  150.   PopMenu now works in Windows NT 4.0.
  151.  
  152.   Fixed problem where BoxButtonDraw didn't change the text of an existing
  153.   button, or of a button which had previously existed but had been removed
  154.   with BoxButtonKill.
  155.  
  156.  
  157. DLL 2.3cbm  First showing up in WB 96C
  158.  
  159.   In 32-bit version, the following functions now work in Windows NT 4.0:
  160.  
  161.     ShortcutEdit
  162.     ShortcutExtra
  163.     ShortcutInfo
  164.     ShortcutMake
  165.  
  166.   In 32-bit version, the Run... functions can now be used to launch shortcut
  167.   files in Windows NT 4.0.
  168.  
  169.   In 32-bit version, added 3D effects to Windows NT 4.0.
  170.  
  171.   In 32-bit version, fixed problem with licensing dialog in Windows NT 4.0.
  172.  
  173.   In 32-bit version, the following registry functions:
  174.  
  175.     RegSetValue
  176.     RegQueryValue
  177.     RegDelValue
  178.  
  179.   no longer treat a named value of [Default] as indicating the primary value
  180.   for a key (and, therefore, it is now possible to access a value which is
  181.   actually named "Default").
  182.  
  183.   In 32-bit version, fixed problem with international language strings not
  184.   being used.
  185.  
  186.   New registry functions (32-bit version only):
  187.  
  188.     RegQueryExpSz(handle, subkey)
  189.       Retrieves a REG_EXPAND_SZ value from the registry.
  190.  
  191.     RegQueryMulSz(handle, subkey, delimiter)
  192.       Retrieves a REG_MULTI_SZ value from the registry.
  193.  
  194.     RegSetExpSz(handle, subkey, value)
  195.       Sets a REG_EXPAND_SZ value in the registry.
  196.  
  197.     RegSetMulSz(handle, subkey, value, delimiter)
  198.       Sets a REG_MULTI_SZ value in the registry.
  199.  
  200.   In 32-bit version, fixed problem with RegQuery... functions when there
  201.   was a backslash between the subkey string and a named value, eg:
  202.  
  203.     RegQueryValue(mykey, "MySubKey[MyItem]", "some data")  -- this worked
  204.     RegQueryValue(mykey, "MySubKey\[MyItem]", "some data") -- this didn't
  205.  
  206.   RegQuery, RegQueryBin, and RegSetBin can now handle longer strings (up to
  207.   available WIL string space).
  208.  
  209.   In 32-bit version, fixed problem with OLE string parameters.
  210.  
  211.   In 32-bit version, fixed problem with RegQueryBin with certain values.
  212.  
  213.   In 32-bit version, fixed problem with RegSetDword with large values.
  214.  
  215.   Fixed problem with TimeSubtract, where the result could have a day of "00"
  216.   (eg, "96:04:00" instead of "96:03:31").
  217.  
  218.   In 16-bit version, fixed WinItemNameId.
  219.  
  220.   Fixed problem with BinaryHashRec crashing if there was only one record in
  221.   the buffer.
  222.  
  223.  
  224. NetWare 3 extender 12014  First showing up in WB 96C
  225.  
  226.   Fixed n3FileAttrGet and n3FileAttrSet.
  227.  
  228.   n3FileAttrGet and n3FileAttrSet no longer support directories (use new
  229.   functions n3DirAttrGet and n3DirAttrSet instead).
  230.  
  231.   New functions:
  232.  
  233.     n3DirAttrGet(dirname)
  234.       Same as n3FileAttrGet, but for directory attributes.
  235.  
  236.     n3DirAttrSet(dirname, attribs, mode)
  237.       Same as n3FileAttrSet, but for directory attributes.
  238.  
  239.     n3MapDir(net-path, local-name)
  240.       Like n3Map, but performs a regular (non-root) map.
  241.  
  242.     n3MapRoot(net-path, local-name)
  243.       Identical to n3Map.
  244.  
  245.   With n3Map[..], it is no longer necessary to add a trailing backslash when
  246.   mapping to the root of a volume.
  247.  
  248.   New functions:
  249.  
  250.     n3CapturePrt(s:server-name, s:queue-name, i:port-number, s:flags)
  251.  
  252.     n3CaptureEnd(i:port-number)
  253.       Ends a printer capture.
  254.  
  255.     n3GetUserId(s:server-name, s:user-name, i:format)
  256.       Returns the object ID corresponding to the specified user name.
  257.  
  258.     n3ChgPassword(s:server-name, s:user-name, s:old-password, s:new-password)
  259.       Changes a user's password.
  260.  
  261.     n3GetNetAddr(s:server, i:flags)
  262.       Returns the internetwork address of the current workstation.
  263.  
  264.     n3ServerInfo(s:server, i:request)
  265.       Returns information on the specified Netware server.
  266.  
  267.     n3UserGroups(s:server, s:username)
  268.       Lists groups to which the specified user belongs.
  269.  
  270.   Added new request # to n3ServerList:
  271.  
  272.     4 = all known servers (TAB-delimited list)
  273.  
  274.  
  275. NetWare 4 extender 14011  First showing up in WB 96C
  276.  
  277.   Fixed n4FileAttrGet and n4FileAttrSet.
  278.  
  279.   n4FileAttrGet and n4FileAttrSet no longer support directories (use new
  280.   functions n4DirAttrGet and n4DirAttrSet instead).
  281.  
  282.   New functions:
  283.  
  284.     n4DirAttrGet(dirname)
  285.       Same as n4FileAttrGet, but for directory attributes.
  286.  
  287.     n4DirAttrSet(dirname, attribs, mode)
  288.       Same as n4FileAttrSet, but for directory attributes.
  289.  
  290.     n4MapDir(net-path, local-name)
  291.       Like n4Map, but performs a regular (non-root) map.
  292.  
  293.     n4MapRoot(net-path, local-name)
  294.       Identical to n4Map.
  295.  
  296.   With n4Map[..], it is no longer necessary to add a trailing backslash when
  297.   mapping to the root of a volume.
  298.  
  299.   New functions:
  300.  
  301.     n4CapturePrt(s:server-name, s:queue-name, i:port-number, s:flags)
  302.       Captures a local printer port to a Netware printer queue.
  303.  
  304.     n4CaptureEnd(i:port-number)
  305.       Ends a printer capture.
  306.  
  307.     n4GetUserId(s:server-name, s:user-name, i:format)
  308.       Returns the object ID corresponding to the specified user name.
  309.  
  310.     n4ChgPassword(s:server-name, s:user-name, s:old-password, s:new-password)
  311.       Changes a user's password.
  312.  
  313.     n4GetNetAddr(s:server, i:flags)
  314.       Returns the internetwork address of the current workstation.
  315.  
  316.     n4ServerInfo(s:server, i:request)
  317.       Returns information on the specified Netware server.
  318.  
  319.     n4UserGroups(s:server, s:username)
  320.       Lists groups to which the specified user belongs.
  321.  
  322.   Added new request # to n4ServerList:
  323.  
  324.     4 = all known servers (TAB-delimited list)
  325.  
  326.  
  327. Windows 32 extender 10005
  328.  
  329.   netGetCon now accepts printer ports higher than LPT3 (up to LPT9).
  330.  
  331.  
  332. WB 96D  June 26, 1996
  333.  
  334.   Fixed problem with PopMenu, when generating a file name based on an
  335.   application whose class name contained characters that were not valid file
  336.   name characters.  PopMenu now strips off such characters when generating
  337.   the file name (eg, class name of "Edit:App" becomes "EditApp.mnw").
  338.  
  339.   Fixed problem with PopMenu, where it would occasionally fail to launch the
  340.   editor when editing/creating a menu file.
  341.  
  342.   In the 16-bit version, WinBatch now does not try to load CTL3DV2.DLL at
  343.   startup unless the DLL is located in the Windows System directory.
  344.  
  345.   Compiler now searches path for extender DLL's, if they are not found in
  346.   the compiler directory, when compiling a large EXE.
  347.  
  348.   Fixed problem with FileMenu locking up in some cases if the user rapidly
  349.   clicked twice on a menu.
  350.  
  351.   Fixed problem with BoxDrawText with "alignment" = 32 (adjust font), where
  352.   sometimes the displayed font was too large.
  353.  
  354.   Added two new alignment flags to BoxDrawText:
  355.  
  356.      64  Right-justify text by adding space between words
  357.     128  Clip (truncate) text if it doesn't fit within specified rectangle
  358.  
  359.   In FileMenu, fixed a problem with the status bar descriptions under
  360.   Windows NT 4.0.
  361.  
  362.  
  363. DLL 2.3dbm  First showing up in WB 96D
  364.  
  365.   New functions:
  366.  
  367.     RegEntryType(i:handle, s:subkey)
  368.       Returns the type of data for the specified subkey.
  369.  
  370.     RegQueryEx(i:handle, s:subkey, s:delimiter, i:type)
  371.       Retrieves a value from the registry.
  372.  
  373.     RegSetEx(i:handle, s:subkey, s:value, s:delimiter, i:type)
  374.       Sets a value in the registry.
  375.  
  376.     FileVerInfo(s:filename, s:language-key, s:resource-string)
  377.       Returns a version resource string from a binary file.
  378.  
  379.     WinWaitExist(s:partial-winname, i:timeout)
  380.       Waits for a top-level window to exist.
  381.  
  382.     WinWaitChild(s:partial-parent-winname, s:partial-child-winname, i:timeout)
  383.       Waits for a child window to exist.
  384.  
  385.   New IntControl's:
  386.  
  387.     IntControl(41, p1, 0, 0, 0)
  388.       Controls YmdHms format returned by time functions.
  389.  
  390.     IntControl(42, p1, 0, 0, 0)
  391.       Get pointer to a binary buffer.
  392.  
  393.   Fixed problem with RegQueryItem, where only one item was being returned.
  394.  
  395.   In the 16-bit version, fixed a problem with WinMetrics(-4) returning 0
  396.   under Windows for Workgroups if a secondary network (such as Netware) was
  397.   installed.
  398.  
  399.   FileSize no longer returns an error if a wildcard file mask is specified
  400.   which does not match any files; it now returns 0.
  401.  
  402.   All functions which take a YmdHms string as a parameter will now accept a
  403.   string in the format "YYYY:MM:DD:HH:MM:SS" (ie, containing a 4-digit year).
  404.  
  405.   Fixed problem with time functions which return a YmdHms string (such as
  406.   TimeAdd) with years >= 2000.
  407.  
  408.   Fixed problem with Delay function where the current year was >= 2000.
  409.  
  410.   Changed TimeJulianDay so that it treats 2-digit years in the input string
  411.   as falling within the range 1950-2049 (eg, "96:04:01" is April 1, 1996).
  412.   This is consistent with the behavior of the other time functions.
  413.   Previously, TimeJulianDay was not adjusting the year, so that "96:04:01"
  414.   would be treated as April 1, 0096.  To retain the old behavior, you can
  415.   specify a full 4-digit year (eg, "0096:04:01").
  416.  
  417.   TimeJulianDay now correctly calculates julian dates for leap years that
  418.   are evenly divisible by 400 (such as 2000).
  419.  
  420.   AddExtender and DllCall/DllLoad now also look for the specified DLL in the
  421.   directory where the WIL Interpreter application is located.
  422.  
  423.   In the 32-bit version, SendKey (and SendKeysTo and SendKeysChild) now
  424.   attempt to wait until the active application is ready to accept input
  425.   before sending each keystroke.  This can be disabled with IntControl 43
  426.   (see "DLL 2.3ebm" section, below).
  427.  
  428.   Fixed problem with RegQueryBin truncating long values.
  429.  
  430.   In the 16-bit version, fixed problem with FileAppend where the target was
  431.   a UNC.
  432.  
  433.   Fixed memory allocation problem with WinWaitClose.
  434.  
  435.   The 32-bit version can now process batch and menu files which were saved
  436.   by Notepad as Unicode text files.  It may be able to handle Unicode text
  437.   files created with other editors as well, as long as the first character
  438.   in the file is a hexadecimal FFFE or FEFF.
  439.  
  440.   In the 32-bit version, the Dialog and DialogBox functions now properly set
  441.   the current working directory when the user selects a file from a listbox.
  442.  
  443.   Fixed problem where an error that occurred in a CALL'ed script would not
  444.   cancel the calling program.
  445.  
  446.   In the 32-bit version, fixed problem with FileCopy, FileMove, and
  447.   FileAppend causing a crash if the specified source file did not exist and
  448.   the specified target was a UNC.
  449.  
  450.   When AddExtender fails with an error 3437, it now displays a message box
  451.   with some idea of what the problem may be, or with a Windows error code.
  452.  
  453.  
  454. NetWare 3 extender 12015  First showing up in WB 96D
  455.  
  456.   Fixed problem with n3ChgPassword.
  457.  
  458.   NOTE: Added "old-password" parameter to n3ChgPassword (changed from 96C).
  459.  
  460.  
  461. NetWare 4 extender 14012  First showing up in WB 96D
  462.  
  463.   Fixed problem with n4ChgPassword, when using bindery emulation.
  464.  
  465.   In the 32-bit version, fixed problem with Unicode initialization errors
  466.   when using the Netware NT client.
  467.  
  468.  
  469. Windows 32 extender 10007  First showing up in WB 96D
  470.  
  471.   New functions:
  472.  
  473.     netResources(s:net-resource, i:scope, i:type, i:usage)
  474.       Itemizes network resources.
  475.  
  476.  
  477. WB 96E  June 27, 1996
  478.  
  479.   New IntControl:
  480.  
  481.     IntControl(1001, p1, 0, 0, 0) (32-bit only)
  482.       Set service process status.
  483.  
  484.   For window class names beginning with "Afx", PopMenu now bases the menu
  485.   name upon the application's module name instead of the class name.
  486.  
  487.  
  488. DLL 2.3ebm  First showing up in WB 96E
  489.  
  490.   New IntControl:
  491.  
  492.     IntControl(43, p1, 0, 0, 0) (32-bit only)
  493.       Enable/disable "WaitForInputIdle".
  494.  
  495.  
  496. WB 96F  Oct 18, 1996
  497.  
  498.   In BoxTextFont, expanded the "pitch & family" parameter to now be
  499.   "pitch & family & character-set".
  500.  
  501.   New IntControls:
  502.  
  503.     IntControl(1002, p1, 0, 0, 0)
  504.       Sets icon display state.
  505.  
  506.     IntControl(1003, p1, 0, 0, 0)
  507.       Prevents WinBatch icon from being opened.
  508.  
  509.     IntControl(1004, 0, 0, 0, 0)
  510.       Returns the file name of the current WinBatch program.
  511.  
  512.   Fixed a problem with BoxButtonWait returning erroneously when the Enter or
  513.   Escape key was pressed.
  514.  
  515.   Fixed a problem where FileMenu was getting added twice to the menus of
  516.   shortcut files.  This occurred if a user removed the "IsShortcut" value
  517.   from the "lnkfile" key in the registry.
  518.  
  519.   Fixed a problem with excessive repainting in the Box functions.
  520.  
  521.   The compiler can now be used to compile an encoded or encrypted WBT to an
  522.   EXE file.
  523.  
  524.   If you try to compile a source WBT which is already encoded or encrypted
  525.   to a target type which is an encoded or encrypted WBT, no processing will
  526.   be done on the file and the target will be identical to the source.  In
  527.   other words, you cannot use the compiler to re-encode or re-encrypt a WBT,
  528.   or convert an encoded WBT to an encrypted WBT (or vice versa).
  529.  
  530.   It is now possible to specify an "AutoExec" WIL script that will be called
  531.   before every WinBatch program that you run.  This would be a convenient
  532.   place to set global variables, or perform standard startup commands, such
  533.   as AddExtender or IntControl.
  534.  
  535.  
  536. DLL 2.3fbn  First showing up in WB 96F
  537.  
  538.   New functions:
  539.  
  540.     FindWindow(s:class-name)
  541.       Returns the window title matching a specified class name.
  542.  
  543.     RegConnect(s:computer-name, i:handle) (32-bit only)
  544.       Connects to a predefined registry handle on another computer.
  545.  
  546.     RegQueryKeys(i:handle)
  547.       Returns a tab-delimited list of subkey names under a specified key.
  548.  
  549.     StrFixLeft(base-string, pad-string, length)
  550.       Pads or truncates the left side of a string to a fixed length using bytes.
  551.  
  552.     StrFixCharsL(base-string, pad-string, length)
  553.       Pads or truncates the left side of a string to a fixed length using characters.
  554.  
  555.     BinaryOleType(i:bin-handle, i:type, i:reserved-1, i:reserved-2, i:reserved-3)
  556.       Specifies how a binary buffer will be used by OLE functions.
  557.  
  558.     DiskVolInfo(root-path, request#) (32-bit only)
  559.       Returns information on a file system volume.
  560.  
  561.     Yields(i:count)
  562.       Provides time for other windows to do processing.
  563.  
  564.     RegLoadHive(i:handle, s:subkey, s:filename) (32-bit only)
  565.       Loads a hive into a registry subkey.
  566.  
  567.     RegUnloadHive(i:handle, s:subkey) (32-bit only)
  568.       Unloads a hive from the registry.
  569.  
  570.     StrIndexNc(s:string, s:sub-string, i:start, i:direction)
  571.       Searches a string for a sub-string, ignoring case.
  572.  
  573.   New IntControls:
  574.  
  575.     IntControl(44, p1, 0, 0, 0)
  576.       Returns the class name for specified window handle.
  577.  
  578.     IntControl(45, p1, 0, 0, 0) (32-bit only)
  579.       Enable/disable "SendKey speedup" in DOS programs in Windows NT.
  580.  
  581.     IntControl(46, p1, 0, 0, 0) (32-bit only)
  582.       Set window retry timeout.
  583.  
  584.     IntControl(47, p1, 0, 0, 0)
  585.       Closes another WinBatch program.
  586.  
  587.     IntControl(48, p1, 0, 0, 0)
  588.       Closes a DOS program.
  589.  
  590.     IntControl(49, p1, 0, 0, 0)
  591.       Add system menus to popup windows.
  592.  
  593.     IntControl(50, p1, 0, 0, 0)
  594.       Controls whether "Go to web page" button is added to error boxes.
  595.  
  596.     IntControl(51, p1, 0, 0, 0) (32-bit only)
  597.       Specifies flags for CreateProcess.
  598.  
  599.   Fixed problem with RegDelValue under Windows NT.
  600.  
  601.   In the 32-bit version, fixed problem with Ctrl-Break not working during a
  602.   RunWait.
  603.  
  604.   In the 32-bit version, FileCopy can now copy files to COM and LPT ports
  605.   (the 16-bit version has always been able to do this).
  606.  
  607.   Increased the maximum number of extender entries from 100 to 200.
  608.  
  609.   In the 32-bit version of FileVerInfo, if you specify a blank string for
  610.   "language-key", it will first try to look up the item under the language
  611.   key "040904E4" (U.S. English w/ Windows Multilingual character set).  If
  612.   that fails, it will then try the key "040904B0" (U.S. English w/ Unicode
  613.   character set).
  614.  
  615.   FileVerInfo now returns a blank string ("") if the specified item was not
  616.   found, instead of returning an error.
  617.  
  618.   Fixed problem passing the number -2147483648 as a string parameter to
  619.   functions.
  620.  
  621.   In the 32-bit version, fixed FileExist so that it actually returns a value
  622.   of 2 (as documented) if the file is open by another application.  It was
  623.   returning a 1.
  624.  
  625.   Fixed problem with the Random() function crashing if a negative number was
  626.   specified.
  627.  
  628.   Added new request #'s for WinMetrics:
  629.  
  630.     -6   pixels per horizontal dialog unit (rounded to an integer)
  631.     -5   pixels per vertical dialog unit (rounded to an integer)
  632.  
  633.   Fixed problem with Debug displaying a return value of 0 for the last
  634.   command in a script, if there was more than one blank line at the end of
  635.   the script file.
  636.  
  637.   Fixed "Opening parenthesis missing" error when using a variable name such
  638.   as 'max_users', where the portion of the variable name which preceded the
  639.   underscore (ie, 'max') was the same as the name of a WIL function.
  640.  
  641.   In 32-bit version, fixed problem with Wallpaper() function in Windows NT 4.0.
  642.  
  643.   In 32-bit version, fixed problem with Display() function not timing out in
  644.   some unusual cases.
  645.  
  646.   If you do an Exit from a called script, it will now really exit the program
  647.   instead of returning to the calling script.
  648.  
  649.   In 32-bit version, you can now specify a blank section name for
  650.   IniItemizePvt, but the specified INI file name must be a real file, not
  651.   a "virtual" file that has been mapped to the registry.
  652.  
  653.   In 16-bit version, fixed a problem with WinMetrics(-4) returning 0 under
  654.   Windows 3.1 if a network (such as Netware) was installed.
  655.  
  656.   In 32-bit version, changed NetInfo:
  657.  
  658.     NetInfo(0) will always return the string "WINNT", regardless of the
  659.     operating system.  This is consistent with previous behavior.
  660.  
  661.     NetInfo(1) will now depend on the operating system:
  662.  
  663.       Under Windows 95, NetInfo(1) will return a list of installed network
  664.       client ID's, delimited with the standard file delimiter (by default, a
  665.       tab).
  666.  
  667.       Under Windows NT, NetInfo(1) will return a list of installed network
  668.       provider ID's, delimited with the standard file delimiter (by default,
  669.       a tab).
  670.  
  671.   Fixed problem with Display() function causing a "DlgPointLookup Failure"
  672.   if you put the Display() in a loop and held down the spacebar.
  673.  
  674.   In 32-bit version, improved the problem of SendKey (and SendKeysTo and
  675.   SendKeysChild) sending keystrokes very slowly to DOS programs in Windows
  676.   NT.  The speedup seems more noticeable in NT 4.0, although there should
  677.   be some improvement in NT 3.51 as well.  If this new "SendKey speedup"
  678.   mode causes problems, it can be disabled with the new IntControl(45).
  679.  
  680.   Fixed problem with using WaitForKey twice in a row to wait for the same
  681.   key, where the second WaitForKey returned immediately and didn't wait.
  682.  
  683.   In 32-bit version, fixed problem with PlayWaveForm not working if a
  684.   keyword was specified (eg, "SystemStart") instead of a filename.
  685.  
  686.   In 32-bit version, fixed problem with StrCmp, StrCmpi, and BinarySort,
  687.   when comparing or sorting two strings which were the same except for a
  688.   hyphen or apostrophe (eg, "coop" and "co-op").  StrCmp and StrCmpi would,
  689.   in some cases, return 1 instead of -1 (and vice versa), and BinarySort
  690.   would sort the two strings improperly.
  691.  
  692.   In Dialog function, fixed problem with radio buttons having text
  693.   descriptions longer than 60 characters always being selected by default.
  694.  
  695.   In 32-bit version, changed the way the Run[..] functions launch data files.
  696.  
  697.   KeyToggleGet and KeyToggleSet now work properly in the 32-bit version.
  698.  
  699.   Sounds now defaults to @OFF in the 32-bit version.
  700.  
  701.   Fixed a problem sending Alt-key combinations and other extended keystrokes
  702.   to a small number of unusual DOS programs, particularly the DOS EDIT.COM.
  703.  
  704.  
  705. NetWare 3 extender 12016  First showing up in WB 96F
  706.  
  707.   (Note: the internal version number is mistakenly set as 12015)
  708.  
  709.   New function:
  710.  
  711.     n3CaptureGet(i:port-number)
  712.       Returns the name of the print queue associated with a printer capture.
  713.  
  714.   Fixed problem with n3ServerList(request #'s 1 and 2) returning a blank
  715.   string or garbage characters in the WWN3Z32I.DLL version.
  716.  
  717.   In the 32-bit version, fixed problem with n3CaptureEnd returning 0 and not
  718.   ending the capture.
  719.  
  720.  
  721. NetWare 4 extender 14014  First showing up in WB 96F
  722.  
  723.   New functions:
  724.  
  725.     n4CaptureGet(i:port-number)
  726.       Returns the name of the print queue associated with a printer capture.
  727.  
  728.     n4ObjectList(s:context, s:parent, s:class, s:mask)
  729.       Lists objects in a Directory Services tree.
  730.  
  731.     n4ObjectInfo(s:context, s:object, i:request)
  732.       Returns information on the specified object.
  733.  
  734.     n4ObjectProps(s:context, s:object, s:attribute)
  735.       Returns properties of the specified object.
  736.  
  737.     n4NameConvert(s:context, s:object, i:format)
  738.       Converts an object name to a different format.
  739.  
  740.   In the 32-bit version, fixed problem with n4CaptureEnd returning 0 and not
  741.   ending the capture.
  742.  
  743.   Fixed problem with n4MemberGet erroneously returning @FALSE in some cases.
  744.  
  745.   Fixed problem with n4ServerList(4) only returning the names of servers
  746.   that were located in the current context.
  747.  
  748.  
  749. Windows 32 extender 11000  First showing up in WB 96F
  750.  
  751.   Split the Windows 32 extender (WWNET32I.DLL) into separate extenders for
  752.   Windows 95 (WWW9532I.DLL) and Windows NT (WWWNT32I.DLL).  The existing
  753.   net[..] functions have been renamed to w95[..] and wnt[..], respectively:
  754.  
  755.     Old Windows 32     New Windows 95     New Windows NT
  756.     --------------     --------------     --------------
  757.     netAddDrive        w95AddDrive        wntAddDrive
  758.     netAddPrinter      w95AddPrinter      wntAddPrinter
  759.     netCancelCon       w95CancelCon       wntCancelCon
  760.     netDirDialog       w95DirDialog       wntDirDialog
  761.     netGetCon          w95GetCon          wntGetCon
  762.     netGetUser         w95GetUser         wntGetUser
  763.     netResources       w95Resources       wntResources
  764.     netVersion         w95Version         wntVersion
  765.  
  766.   For backwards compatability, we are continuing to distribute an extender
  767.   DLL named WWNET32I.DLL which supports the existing net[..] functions.
  768.   However, this DLL is a "wrapper" or "shell" which calls the appropriate
  769.   platform-specific extender DLL (ie, WWW9532I.DLL or WWWNT32I.DLL).
  770.   Therefore, one of these two DLL's (depending on the operating system being
  771.   used) will need to be available (either in the current directory, in the
  772.   same directory as WWNET32I.DLL, or in a directory on the path).
  773.  
  774.  
  775. Windows 95 extender 11000  First showing up in WB 96F
  776.  
  777.   New functions:
  778.  
  779.     w95ShareAdd(s:server-name, s:resource, s:share-name, i:share-type, i:flags)
  780.       Shares a resource.
  781.  
  782.     w95ShareSet(s:server-name, s:share-name, s:comment, s:full-password, s:read-password)
  783.       Sets additional share information for a resource.
  784.  
  785.     w95ShareDel(s:server-name, s:share-name)
  786.       Un-shares a resource.
  787.  
  788.     w95AccessAdd(s:server-name, s:resource, s:user/group name, i:access-rights, i:flags)
  789.       Adds or updates an access (permission) record for a resource.
  790.  
  791.     w95AccessDel(s:server-name, s:resource, s:user/group name)
  792.       Removes an access (permission) record from a resource.
  793.  
  794.     w95ListGroups(s:server)
  795.       Lists all global user groups in an NT domain.
  796.  
  797.     w95MemberGet(s:server, s:group, s:user)
  798.       Determines if user is a member of a global group in an NT domain.
  799.  
  800.     w95MemberSet(s:server, s:group, s:user)
  801.       Adds user to a global group in an NT domain.
  802.  
  803.     w95MemberDel(s:server, s:group, s:user)
  804.       Removes user from a global group in an NT domain.
  805.  
  806.     w95MemberGrps(s:server, s:user)
  807.       Lists all global groups in an NT domain to which a user belongs.
  808.  
  809.     w95MemberList(s:server, s:group)
  810.       Lists all members of a global group in an NT domain.
  811.  
  812.  
  813. Windows NT extender 11000  First showing up in WB 96F
  814.  
  815.   New functions:
  816.  
  817.     wntShareAdd(s:server-name, s:resource, s:share-name, i:share-type, i:max-users)
  818.       Shares a resource.
  819.  
  820.     wntShareSet(s:server-name, s:resource/share-name, i:share-type, s:comment, s:location)
  821.       Sets additional share information for a resource.
  822.  
  823.     wntShareDel(s:server-name, s:resource/share-name, i:share-type)
  824.       Un-shares a resource.
  825.  
  826.     wntAccessAdd(s:server-name, s:resource/share-name, s:user/group name, i:object-type, s:access-string)
  827.       Adds or updates access (permission) records for a resource.
  828.  
  829.     wntAccessDel(s:server-name, s:resource/share-name, s:user/group name, i:object-type)
  830.       Removes access (permission) records from a resource.
  831.  
  832.     wntAccessGet(s:server-name, s:resource/share-name, s:user/group name, i:object-type)
  833.       Returns access (permission) records for a resource.
  834.  
  835.     wntListGroups(s:server, i:group-type)
  836.       Lists all user groups on a server or domain.
  837.  
  838.     wntMemberGet(s:server, s:group, s:user, i:group-type)
  839.       Determines if user is a member of a group.
  840.  
  841.     wntMemberSet(s:server, s:group, s:user, i:group-type)
  842.       Adds user to a group.
  843.  
  844.     wntMemberDel(s:server, s:group, s:user, i:group-type)
  845.       Removes user from a group.
  846.  
  847.     wntMemberGrps(s:server, s:user, i:group-type, i:flags)
  848.       Lists all groups to which a user belongs.
  849.  
  850.     wntMemberList(s:server, s:group, i:group-type)
  851.       Lists all members of a user group.
  852.  
  853.     wntResources2(s:net-resource, i:scope, i:type, i:usage, s:provider)
  854.       Itemizes network resources.
  855.  
  856.     wntServiceAt(s:server, s:domain, i:server-type, s:service-name, i:flags)
  857.       Lists all servers in a domain which contain a specified service.
  858.  
  859.     wntChgPswd(s:server/domain, s:user, s:old-pass, s:new-pass)
  860.       Changes a user's password.
  861.  
  862.  
  863. Windows 3.1 (Basic) extender 15003  First showing up in WB 96F
  864.  
  865.   w3AddCon and w3GetCon now accept printer ports higher than LPT3 (up to LPT9).
  866.  
  867.  
  868. Windows for Workgroups (MultiNet) extender 16002  First showing up in WB 96F
  869.  
  870.   wnAddCon and wnGetCon now accept printer ports higher than LPT3 (up to LPT9).
  871.  
  872.   All functions which change the active sub-network now restore it afterwards.
  873.   This fixes a problem with using NetInfo after one of the extender functions.
  874.  
  875.  
  876. WILX extender 11105  First showing up in WB 96F
  877.  
  878.   In the 32-bit version, changed xMemCompact:
  879.  
  880.     In Windows 95, this function is not supported and will return 0.
  881.  
  882.     In Windows NT, this function has been fixed to use the appropriate Win32
  883.     system calls.  Since there's no distinction between local and global
  884.     memory in NT, it doesn't make any difference whether you specify a
  885.     'type' of 0 or 1.
  886.  
  887.  
  888. WB 96G  Oct 21, 1996
  889.  
  890.   Changed "AutoExec" processing (see "WB 96F" section, above), as follows:
  891.  
  892.     The file names specified by "AutoExecWbc" and "AutoExecWbt" cannot
  893.     contain any path information (ie, no '\' or ':' characters).  If they
  894.     do, they will be ignored.  These files must be located in the same
  895.     directory as the WinBatch program (ie, for "AutoExecWbc", the directory
  896.     where your compiled WinBatch script is located; and for "AutoExecWbt",
  897.     the directory where WINBATCH.EXE or WBAT16I.EXE is located).
  898.  
  899.  
  900. DLL 2.3gbn  First showing up in WB 96G
  901.  
  902.   Fixed string memory leak when comparing "floating point string" variables, eg:
  903.     x = "1.25"
  904.     If x != 0 Then y = 1
  905.  
  906.   FileVerInfo now returns the string "NONE" if no version information is
  907.   available for the specified file (previously, it returned an error).
  908.  
  909.  
  910. Windows NT extender 11001  First showing up in WB 96G
  911.  
  912.   Fixed problem with wntAccessAdd, when accessing registry keys.
  913.  
  914.  
  915. Windows 3.1 (Basic) extender 15004  First showing up in WB 96G
  916.  
  917.   Fixed problem with the extender not loading due to a "wrong platform" error.
  918.  
  919.  
  920. WB 96H  Nov 4, 1996
  921.  
  922.   In compiler, fixed a problem creating an EXE if the 'TEMP' environment
  923.   variable pointed to an invalid directory.
  924.  
  925.  
  926. DLL 2.3hbn  First showing up in WB 96H
  927.  
  928.   You can now specify partial child window names beginning with a tilde (~)
  929.   (see "DLL 2.2abj" section, above).
  930.  
  931.   In Debug mode, a couple of status strings were not being displayed when
  932.   appropriate: "*** Debug Initialized ***" and "IF DO==>FALSE".
  933.  
  934.  
  935. WB 96J  Nov 5, 1996
  936.  
  937.   Fixed problem with BoxDestroy not removing buttons.
  938.  
  939.  
  940. DLL 2.3jbn  First showing up in WB 96J
  941.  
  942.   In 32-bit version, fixed problem with network licensing.
  943.  
  944.   Fixed problem parsing constant names which contain underscores (eg,
  945.   "@ATTR_RO") (this bug first appeared in 2.3fbn).
  946.  
  947.   Improved MouseClick function.  Double-clicks should now work better (there
  948.   was a problem with some applications).  In the 32-bit version, improved
  949.   the method of emulating other types of clicks, especially when using
  950.   modifiers such as @SHIFT and @CTRL.
  951.  
  952.   Fixed problem with SendMenusTo with double-byte character sets.
  953.  
  954.   In the Dialog function, fixed problem where the dialog would be centered
  955.   on the screen if you specified a small number (less than 20 or so) for the
  956.   Y (vertical) coordinate.
  957.  
  958.   In 32-bit version, improved the reliability of the DiskFree and DiskSize
  959.   functions with drives larger than 2 gigabytes, under Windows 95 OEM
  960.   Service Release 2 or higher.  Under earlier versions of Windows 95, these
  961.   functions may not return accurate results.  Under NT, there is no problem.
  962.  
  963.  
  964. Windows NT extender 11002  First showing up in WB 96J
  965.  
  966.   New functions:
  967.  
  968.     wntOwnerGet(s:server-name, i:reg-key, s:resource-name, i:object-type, i:flag)
  969.       Returns the owner of an object.
  970.  
  971.     wntOwnerSet(s:server-name, i:reg-key, s:resource-name, i:object-type, s:user/group name)
  972.       Takes ownership of an object.
  973.  
  974.  
  975. NetWare 3 extender 12017  First showing up in WB 96J
  976.  
  977.   n3MsgSend now returns @FALSE if the specified user is not logged in, and
  978.   returns an error if an invalid user name is specified.
  979.  
  980.  
  981. NetWare 4 extender 14015  First showing up in WB 96J
  982.  
  983.   Fixed problem with n4CaptureGet returning an incorrect name in some cases.
  984.  
  985.   Changed n4CaptureGet to return an abbreviated name relative to the current
  986.   context (eg, "Printer1.Print") instead of a canonical name
  987.   (eg, "Printer1.Print.Sales").
  988.  
  989.   n4MsgSend now returns @FALSE if the specified user is not logged in, and
  990.   returns an error if an invalid user name is specified.
  991.  
  992.  
  993. WB 96K  Dec 9, 1996
  994.  
  995.   Fixed problem (introduced in 96J) with large EXE's failing to extract the
  996.   embedded DLL's if launched from a UNC (with a "Disk space lookup" error).
  997.  
  998.  
  999. DLL 2.3kbn  First showing up in WB 96K
  1000.  
  1001.   Fixed problem (introduced in 96J) with FileCopy, FileMove, and FileAppend
  1002.   failing if the target was a UNC (with an "Insufficient free space" error).
  1003.  
  1004.   Fixed problem with DirExist returning @FALSE for a top-level UNC (eg,
  1005.   "\\FredsPC\C").
  1006.  
  1007.  
  1008. WB 96M  Dec 12, 1996
  1009.  
  1010.  
  1011. DLL 2.3mbn  First showing up in WB 96M
  1012.  
  1013.   In 32-bit version, fixed problem with SendKey causing a system crash under
  1014.   NT 4.0 when sending keystrokess to two different windows and switching
  1015.   back and forth rapidly between them.
  1016.  
  1017.  
  1018. NetWare 3 extender 12018  First showing up in WB 96M
  1019.  
  1020.   Fixed problem with n3GetMapped truncating the server name parameter after
  1021.   14 characters (instead of 16).
  1022.  
  1023.  
  1024. NetWare 4 extender 14016  First showing up in WB 96M
  1025.  
  1026.   Fixed problem with n4GetMapped truncating the server name parameter after
  1027.   14 characters (instead of 16).
  1028.  
  1029.  
  1030. WB 97A  Jun 12, 1997
  1031.  
  1032.   New IntControl's:
  1033.  
  1034.     IntControl(1005, p1, 0, 0, 0)
  1035.       Gets or starts shutdown script mode.
  1036.  
  1037.       This IntControl allows you to specify a script that will run when Windows
  1038.       is shut down or (in Windows 95 and Windows NT) when the user logs off.
  1039.  
  1040.         P1  Meaning
  1041.         --  -------
  1042.         0   Get shutdown state (@TRUE if in shutdown mode, @FALSE if normal script)
  1043.         1   Enter shutdown mode
  1044.  
  1045.       If "p1" == 0, the function will return a TRUE/FALSE flag indicating whether
  1046.       the current WinBatch script is running in shutdown mode.  If "p1" == 1,
  1047.       the current script will stop processing and will enter shutdown mode.
  1048.  
  1049.       When WinBatch enters shutdown mode, it stops processing the current script,
  1050.       closes the normal WinBatch window, and stays running in the background
  1051.       waiting for Windows to shut down (or the user to log off).  When this
  1052.       shutdown event occurs, WinBatch re-loads the script (the same script that
  1053.       was running when shutdown mode was entered) and runs it again from the
  1054.       beginning.  If the script that was previously running was launched via a
  1055.       "Call" command, WinBatch will re-load and run the parent (calling) script.
  1056.  
  1057.       The actual shutdown procedure varies a bit among different versions of
  1058.       Windows.  Here is what happens, step-by-step, when WinBatch is in
  1059.       shutdown mode, and the user initiates a Windows shutdown (or logoff):
  1060.  
  1061.         Windows 3.1 / Windows for Workgroups:
  1062.  
  1063.           Windows queries all running applications, asking whether they agree
  1064.           to close.  WinBatch agrees to close.  If all the other apps agree to
  1065.           close as well, then Windows informs all the apps that the session is
  1066.           ending.  At that time, WinBatch runs the script.  When the script is
  1067.           finished, Windows shuts down.
  1068.  
  1069.         Windows 95:
  1070.  
  1071.           Windows queries all running applications, asking whether they agree
  1072.           to close.  WinBatch agrees to close.  If all the other apps agree to
  1073.           close as well, then Windows informs all the apps that the session is
  1074.           ending.  At that time, WinBatch runs the script.  When the script is
  1075.           finished, the Windows session ends.  If the script takes more than
  1076.           about 20 seconds to run, Windows unconditionally terminates the
  1077.           script and the Windows session ends.
  1078.  
  1079.         Windows NT:
  1080.  
  1081.           Windows queries each running application in turn, asking whether it
  1082.           agrees to close.  When it queries WinBatch, WinBatch displays a
  1083.           message box, asking the user to first close all other open windows.
  1084.           When the user presses the "OK" button in the message box, WinBatch
  1085.           agrees to close, then Windows informs WinBatch that the session is
  1086.           ending, and then WinBatch runs the script.  (If, however, the user
  1087.           presses the "Cancel" button in the message box, WinBatch refuses to
  1088.           close, and the shutdown process is cancelled.)  If the script takes
  1089.           more than about 20 seconds to run, Windows displays a message box,
  1090.           giving the user an opportunity to terminate WinBatch, but the script
  1091.           continues processing until the user responds to the message.  When
  1092.           the script is finished, if there are any other apps still running,
  1093.           Windows continues querying each app in turn, asking whether it agrees
  1094.           to close.  Ater all the apps agree to close, the Windows session ends.
  1095.           If any app refuses to close, the shutdown process is cancelled.
  1096.  
  1097.       Example:
  1098.         rc = IntControl(1005, 0, 0, 0, 0)  ; get shutdown state
  1099.  
  1100.         If rc == @FALSE                    ; if we're running as a normal script
  1101.           IntControl(1005, 1, 0, 0, 0)     ; enter shutdown mode
  1102.           Exit                             ; this 'Exit' is not really necessary
  1103.         Endif
  1104.  
  1105.         ; if we got here, we're running in shutdown mode
  1106.         Display(1, "Windows Shutdown", "WinBatch shutdown processing begins now")
  1107.         ErrorMode(@OFF)
  1108.         FileDelete("c:\temp\*.tmp")
  1109.         ErrorMode(@CANCEL)
  1110.  
  1111.     IntControl(1006, 0, 0, 0, 0)
  1112.       Returns the un-parsed WinBatch command line.
  1113.  
  1114.         This returns the actual command line string that WinBatch was launched with.
  1115.  
  1116.   IntControl 1004 now returns a full path for compiled WinBatch EXE's.
  1117.  
  1118.   In 32-bit version, fixed problem with compiler where large (standalone)
  1119.   compiled EXE's run from a floppy drive were extracting the DLL to the
  1120.   floppy drive instead of to the Windows directory.
  1121.  
  1122.   Improved the internal version information in the executables and DLL's.
  1123.  
  1124.   Increased the amount of memory available for strings from 32000 bytes to
  1125.   65500 bytes.
  1126.  
  1127.  
  1128. DLL 2.4abp  First showing up in WB 97A
  1129.  
  1130.   New functions:
  1131.  
  1132.     RegExistKey(handle, subkey-string)
  1133.       Checks whether a registry key exists.
  1134.  
  1135.         This function returns @TRUE if the specified registry key exists and
  1136.         is accessible (ie, can be opened with RegOpenKey).  Otherwise, it
  1137.         returns @FALSE.
  1138.  
  1139.         See RegOpenKey for parameter information.
  1140.  
  1141.     RegExistValue(handle, subkey-string) (32-bit only)
  1142.       Checks whether a value for a registry key exists.
  1143.  
  1144.         This function returns @TRUE if the specified registry value (data
  1145.         item) exists and is accessible (ie, can be read with RegQuery[..]).
  1146.         Otherwise, it returns @FALSE.
  1147.  
  1148.         See RegQueryValue for parameter information.
  1149.  
  1150.     StrIndexWild(string, pattern, start)
  1151.       Finds wildcarded text within a larger string.
  1152.  
  1153.         Parameters:
  1154.           (s) string:  The string to search in.
  1155.           (s) pattern: The wildcarded text to search for.
  1156.           (i) start:   The position (in characters) within the string to begin searching.
  1157.  
  1158.         Returns:
  1159.           (i) The position (in characters) within the string where the text
  1160.               matching the wildcard pattern was found, or 0 if not found.
  1161.  
  1162.         In the wildcard pattern, "*" matches zero or more characters, and
  1163.         "?" matches any one character.
  1164.  
  1165.         Examples:
  1166.           StrIndexWild("abcd1234wxyz", "ab*wx", 1)   ; would return 1
  1167.           StrIndexWild("abcd1234wxyz", "1*9", 1)     ; would return 0 (no match)
  1168.           StrIndexWild("abcd1234wxyz", "1*4", 1)     ; would return 5
  1169.           StrIndexWild("abcd1234wxyz", "1?34*z", 1)  ; would return 5
  1170.  
  1171.     StrLenWild(string, pattern, start)
  1172.       Returns the length of wildcarded text within a larger string.
  1173.  
  1174.         Parameters:
  1175.           (s) string:  The string to look in.
  1176.           (s) pattern: The wildcarded text to match.
  1177.           (i) start:   The position (in characters) within the string to begin matching.
  1178.  
  1179.         Returns:
  1180.           (i) The length (in characters) of the portion of the string that matches
  1181.               the wildcard pattern, or 0 if no match at the specified position.
  1182.  
  1183.         In the wildcard pattern, "*" matches zero or more characters, and
  1184.         "?" matches any one character.
  1185.  
  1186.         Examples:
  1187.           StrLenWild("abcd1234wxyz", "ab*wx", 1)   ; would return 10
  1188.           StrLenWild("abcd1234wxyz", "1*9", 1)     ; would return 0
  1189.           StrLenWild("abcd1234wxyz", "1*4", 5)     ; would return 4
  1190.           StrLenWild("abcd1234wxyz", "1?34*z", 5)  ; would return 8
  1191.  
  1192.     StrSubWild(string, pattern, start)
  1193.       Extracts a substring matching wildcarded text from within a larger string.
  1194.  
  1195.         Parameters:
  1196.           (s) string:  The string to look in.
  1197.           (s) pattern: The wildcarded text to match.
  1198.           (i) start:   The position (in characters) within the string to begin matching.
  1199.  
  1200.         Returns:
  1201.           (s) The portion of the string matched by the wildcard pattern.
  1202.  
  1203.         In the wildcard pattern, "*" matches zero or more characters, and
  1204.         "?" matches any one character.
  1205.  
  1206.         Examples:
  1207.           StrSubWild("abcd1234wxyz", "ab*wx", 1)   ; would return "abcd1234wx"
  1208.           StrSubWild("abcd1234wxyz", "1*9", 1)     ; would return ""
  1209.           StrSubWild("abcd1234wxyz", "1*4", 5)     ; would return "1234"
  1210.           StrSubWild("abcd1234wxyz", "1?34*z", 5)  ; would return "1234wxyz"
  1211.  
  1212.     ClipGetEx(format)
  1213.       Returns the contents of the Windows clipboard in a specified format.
  1214.  
  1215.         This function is similar to ClipGet, but it allows to you specify
  1216.         the format in which the text is returned.  Valid formats are:
  1217.  
  1218.           Format  Meaning
  1219.           ------  -------
  1220.              1    (CF_TEXT)         Standard ANSI text (same as ClipGet).
  1221.              7    (CF_OEMTEXT)      Text containing characters in the OEM character set.
  1222.             13    (CF_UNICODETEXT)  Unicode text format (32-bit version under Windows NT only)
  1223.  
  1224.     WinItemizeEx(s:partial-winname, i:multiple, i:hidden)
  1225.       Returns the full name of window(s) matching a partial window name.
  1226.  
  1227.         'partial-winname' specifies a partial window name to look for.  It
  1228.         can be a blank string (""), in which case it will match any window.
  1229.  
  1230.           Note: this function does not accept a Window ID as the
  1231.           'partial-winname' parameter.
  1232.  
  1233.         If 'multiple' is @TRUE, then this function returns a tab-delimited
  1234.         list of all open windows that match 'partial-winname'.  If 'multiple'
  1235.         is @FALSE, then it returns the name of the first open window found
  1236.         that matches 'partial-winname'.  If no appropriate matching windows
  1237.         are found, it returns a blank string ("").
  1238.  
  1239.         If 'hidden' is @TRUE, then hidden windows are included in the list
  1240.         of returned windows.  If 'hidden' is @FALSE, then hidden windows are
  1241.         not included.  If 'hidden' is @FALSE and 'multiple' is @FALSE, then
  1242.         this function returns the name of the first visible (non-hidden)
  1243.         open window found that matches 'partial-winname'.
  1244.  
  1245.   Fixed problem with SendKey[..] in unusual cases displaying the error:
  1246.   "WinIsDos: Window not found or bad window".
  1247.  
  1248.   In 32-bit version, SendMenusTo now attempts to wait until the specified
  1249.   application window is ready to accept input (like SendKey[..] does).  This
  1250.   can be disabled with IntControl(43).
  1251.  
  1252.   Changed DateTime/TimeDate and FileTimeGet to return a Day/Night code (eg,
  1253.   AM or PM) of from 0 to 4 characters (depending on what is set in the user's
  1254.   current International/Regional settings), instead of a fixed 2-character
  1255.   string, in order to support double-byte character sets.  Therefore, the
  1256.   length of the string returned by DateTime/TimeDate will now vary from 22
  1257.   to 26 characters long, and the length of the string returned by FileTimeGet
  1258.   will now vary from 15 to 19 characters long, instead of being a fixed length.
  1259.  
  1260.   In the ItemExtract function, you can now specify -1 for "index" to return
  1261.   the last item in the list.
  1262.  
  1263.   In the Environment() function, the maximum value length has been increased
  1264.   from 256 bytes to 1280 bytes.  It will return a blank string ("") for
  1265.   environment variables whose values are longer than 1280 bytes.
  1266.  
  1267.   FileSize no longer returns 0 if one of the specified files does not exist.
  1268.  
  1269.   FileDelete and DirRemove no longer return an error if one of the specified
  1270.   files or directories does not exist.
  1271.  
  1272.   In 32-bit version under international (non-US) versions of Windows NT, fixed
  1273.   problem with licensee names containing certain extended characters (eg, Kanji).
  1274.  
  1275.   In 32-bit version, the Run[..] commands now display a more informative
  1276.   error message on failure.
  1277.  
  1278.   In 32-bit version under Windows 95 and Windows NT 4.0, dialog boxes
  1279.   created with the Dialog command now use the default GUI font instead of
  1280.   the system font.
  1281.  
  1282.   In 32-bit version, fixed problem with functions that test for file
  1283.   existence when the full path and filename was longer than 128 characters.
  1284.  
  1285.   Fixed problem with BinaryIndex (and BinaryIndexNc) returning the offset
  1286.   past the end of the buffer (instead of 0) if the search string was blank
  1287.   and no non-NULL characters were found.
  1288.  
  1289.   Fixed problem with BinarySort causing random crashes if the key type was
  1290.   set to @WORD1 or @WORD2.
  1291.  
  1292.   Added a parameter to IntControl(50).  P2 can now specify the URL of the
  1293.   web page to be launched when the user clicks on the "Go to Tech Support
  1294.   Web Page" button.  If p2 is "" or 0, no change is made to URL that is
  1295.   currently set.  The default is:
  1296.  
  1297.     IntControl(50, 1, "http://techsupt.windowware.com/", 0, 0)
  1298.  
  1299.   Fixed a problem with OLE calls crashing if the called function returned a
  1300.   NULL pointer; they now return a blank string in this case.
  1301.  
  1302.   In 32-bit version, added a tiny delay to WinPlaceGet and WinPlaceSet,
  1303.   to give newly-repositioned windows a chance to "settle down" before
  1304.   retrieving their coordinates, making the returned values more reliable.
  1305.  
  1306.   Fixed problem with IsNumber and IsFloat returning TRUE for some high ASCII
  1307.   characters.
  1308.  
  1309.  
  1310. Windows 95 extender 11001  First showing up in WB 97A
  1311.  
  1312.   New function:
  1313.  
  1314.     w95FileClose(s:server-name, s:file-pathname)
  1315.       Close all network connections to a file.
  1316.  
  1317.         "server-name" is the name of a remote server on which the function
  1318.         will execute, or a blank string ("") to indicate the local computer.
  1319.  
  1320.         "file-pathname" is a fully-qualified file name (eg, "C:\DOC\MYFILE.TXT").
  1321.         NOTE: The file name MUST be fully-qualified.
  1322.  
  1323.         Returns @TRUE on success, or @FALSE if the specified file was not open.
  1324.  
  1325.       Example:
  1326.         w95FileClose("", "C:\DOC\MYFILE.TXT")
  1327.  
  1328.     w95ServiceAt(s:server, s:domain, i:server-type, s:service-name, i:flags)
  1329.       Lists all servers in a domain which contain a specified service.
  1330.  
  1331.         "server" is the UNC name of the server on which the function will
  1332.         execute (eg, "\\MYSERVER").
  1333.  
  1334.         "domain" is the name of the domain which will be used (eg, "SALES"),
  1335.         or "" for the primary domain.
  1336.  
  1337.         "server-type" identifies the type of servers which will be examined.
  1338.         You can specify -1 for all servers.  Or, you can specify one or more
  1339.         of the following flags, combined using the binary OR ("|") operator;
  1340.         servers meeting
  1341.  
  1342.                     1  All LAN Manager workstation
  1343.                     2  All LAN Manager server
  1344.                     4  Any server running with Microsoft SQL Server
  1345.                     8  Primary domain controller
  1346.                    16  Backup domain controller
  1347.                    32  Server running the timesource service
  1348.                    64  Apple File Protocol servers
  1349.                   128  Novell servers
  1350.                   256  LAN Manager 2.x Domain Member
  1351.                   512  Server sharing print queue
  1352.                  1024  Server running dialin service
  1353.                  2048  Xenix server
  1354.                  4096  Windows NT (either workstation or server)
  1355.                  8192  Server running Windows for Workgroups
  1356.                 16384  Microsoft File and Print for Netware
  1357.                 32768  Windows NT Non-DC server
  1358.                 65536  Server that can run the browser service
  1359.                131072  Server running a browser service as backup
  1360.                262144  Server running the master browser service
  1361.                524288  Server running the domain master browser
  1362.               4194304  Windows 95 or newer
  1363.           -2147483648  Domain announcement
  1364.  
  1365.         "service-name" is the name of the service to be looked for.
  1366.  
  1367.         "flags" specifies information on the service being looked for.  It
  1368.         consists of one entry from each of the following three groups, added
  1369.         together:
  1370.  
  1371.           service type:
  1372.  
  1373.                1  services
  1374.                2  drivers
  1375.                3  both (services and drivers)
  1376.  
  1377.           service state:
  1378.  
  1379.              100  active services
  1380.              200  inactive services
  1381.              300  both (active and inactive)
  1382.  
  1383.           name type (indicates what the "service-name" parameter represents):
  1384.  
  1385.                0  display name (the name shown in Control Panel)
  1386.             1000  service name (the actual registry key name)
  1387.  
  1388.         Returns a tab-delimited list of server UNC names (eg, "\\MYSERVER").
  1389.  
  1390.         Note: An NT workstation can be considered to be a "server".
  1391.  
  1392.         Note: This function can take a while to run, depending on how many
  1393.         servers are in the domain.  Also, it will only return the names of
  1394.         servers which it is able to access, which requires that the user
  1395.         have browse access to their service control managers.
  1396.  
  1397.         Note: In order to use this function, you must have an NT domain
  1398.         server, and you must have RADMIN32.DLL and RLOCAL32.DLL present.
  1399.         These DLL's can be found in the Microsoft Windows 95 Service Pack 1.
  1400.  
  1401.     w95ShareInfo(s:server-name, s:share-name, i:request)
  1402.       Returns information about a shared resource.
  1403.  
  1404.         "request" specifies the information to be returned, and can be one
  1405.         of the following:
  1406.  
  1407.           0   (s) share name
  1408.           1   (s) resource
  1409.           2   (s) comment
  1410.           4   (s) full password
  1411.           5   (s) read password
  1412.           6   (i) share type
  1413.           7   (i) flags
  1414.  
  1415.         See w95ShareAdd and w95ShareSet for information on these
  1416.         parameters and values.
  1417.  
  1418.         Returns a string or integer, depending on "request".
  1419.  
  1420.     w95UserInfo(i:request)
  1421.       Returns information about the currently logged-on user.
  1422.  
  1423.         "request" specifies the information to be returned, and can be one
  1424.         of the following:
  1425.  
  1426.           Value  Name           Meaning
  1427.           -----  ----           -------
  1428.             0    user name      name of the user currently logged on to the workstation
  1429.             1    logon domain   domain name of the user account of the user currently logged on to the workstation
  1430.             2    other domains  space-delimited list of other LAN Manager domains browsed by the workstation
  1431.             3    logon server   name of the computer that authenticated the server
  1432.  
  1433.         Returns a string.
  1434.  
  1435.         Note: In order to use this function, you must have RADMIN32.DLL and
  1436.         RLOCAL32.DLL present.  These DLL's can be found in the Microsoft
  1437.         Windows 95 Service Pack 1.
  1438.  
  1439.  
  1440. Windows NT extender 11003  First showing up in WB 97A
  1441.  
  1442.   New functions:
  1443.  
  1444.     wntFileClose(s:server-name, s:file-pathname)
  1445.       Close all network connections to a file.
  1446.  
  1447.         "server-name" is the name of a remote server on which the function
  1448.         will execute, or a blank string ("") to indicate the local computer.
  1449.  
  1450.         "file-pathname" is a fully-qualified file name (eg, "C:\DOC\MYFILE.TXT").
  1451.         NOTE: The file name MUST be fully-qualified.
  1452.  
  1453.         Returns @TRUE on success, or @FALSE if the specified file was not open.
  1454.  
  1455.       Example:
  1456.         wntFileClose("", "C:\DOC\MYFILE.TXT")
  1457.  
  1458.     wntAccessList(s:server-name, s:resource/share-name, i:object-type, i:flags)
  1459.       Returns list of users who have access (permission) records for a resource.
  1460.  
  1461.         Returns a tab-delimited list of users and groups who have access
  1462.         records for "resource/share-name"; ie, users and groups for whom
  1463.         permissions have explicitly been set.  Returns a blank string ("")
  1464.         if there are no appropriate records.
  1465.  
  1466.         "flags" specifies the format of the returned names, and can be one
  1467.         of the following:
  1468.  
  1469.           0   account         (eg, "johndoe")
  1470.           1   domain\account  (eg, "OFFICE\johndoe")
  1471.  
  1472.           Note: For built-in accounts which are predefined by the system
  1473.           (eg, "Administrators"), only the account name is returned,
  1474.           regardless of the "flag" setting.
  1475.  
  1476.         See "wntAccessAdd" for additional parameter information.
  1477.  
  1478.       Example:
  1479.         users = wntAccessList("", "Public", 100, 0)
  1480.  
  1481.     wntShareInfo(s:server-name, s:resource/share-name, i:share-type, i:request)
  1482.       Returns information about a shared resource.
  1483.  
  1484.         "request" specifies the information to be returned, and can be one
  1485.         of the following:
  1486.  
  1487.           0   (s) share name
  1488.           1   (s) resource
  1489.           2   (s) comment
  1490.           3   (s) location
  1491.           6   (i) share type
  1492.           8   (i) max users
  1493.           9   (i) current users
  1494.  
  1495.         See wntShareAdd and wntShareSet for information on these
  1496.         parameters and values.
  1497.  
  1498.         Returns a string or integer, depending on "request".
  1499.  
  1500.         Note: This function can only be performed by members of the
  1501.         Administrators or Account Operators local group, or those with
  1502.         Communication, Print, or Server operator group membership.
  1503.  
  1504.     wntGroupInfo(s:server-name, s:group, i:group-type, i:request)
  1505.       Returns information about a group.
  1506.  
  1507.         "server" is the UNC name of the server on which the function will
  1508.         execute (eg, "\\MYSERVER"), or "" for the local computer.
  1509.  
  1510.         "group-type" can be @LOCALGROUP or @GLOBALGROUP.
  1511.  
  1512.         "request" specifies the information to be returned, and can be one
  1513.         of the following:
  1514.  
  1515.           0   group name
  1516.           1   group comment
  1517.  
  1518.         Returns a string.
  1519.  
  1520.     wntUserInfo(i:request)
  1521.       Returns information about the currently logged-on user.
  1522.  
  1523.         "request" specifies the information to be returned, and can be one
  1524.         of the following:
  1525.  
  1526.           Value  Name           Meaning
  1527.           -----  ----           -------
  1528.             0    user name      name of the user currently logged on to the workstation
  1529.             1    logon domain   domain name of the user account of the user currently logged on to the workstation
  1530.             2    other domains  space-delimited list of other LAN Manager domains browsed by the workstation
  1531.             3    logon server   name of the computer that authenticated the server
  1532.  
  1533.         Returns a string.
  1534.  
  1535.     wntSvcStart(s:server, s:service-name, i:flags, s:params, s:delimiter)
  1536.       Starts a service.
  1537.  
  1538.         "server" is the UNC name of the server on which the function will
  1539.         execute (eg, "\\MYSERVER"), or "" for the local computer.
  1540.  
  1541.         "service-name" is the name of a service.
  1542.  
  1543.         "flags" specifies the type of name that "service-name" represents:
  1544.  
  1545.              0  display name (the name shown in Control Panel)
  1546.           1000  service name (the actual registry key name)
  1547.  
  1548.         "params" specifies a delimited list of parameters to be passed to
  1549.         the service, or a blank string ("") for no parameters.  You can
  1550.         select any character you wish to be the delimiter, and must set the
  1551.         "delimiter" parameter accordingly.
  1552.  
  1553.           Note: driver services do not receive parameters.
  1554.  
  1555.         "delimiter" specifies a single character, indicating the delimiter
  1556.         used for "params".  For example, if "params" specifies a
  1557.         space-delimited list, then "delimiter" should be set to " ".  If
  1558.         "params" is a blank string, then "delimiters" is ignored and can be
  1559.         set to a blank string.
  1560.  
  1561.         Returns 1.
  1562.  
  1563.     wntSvcControl(s:server, s:service-name, i:flags, i:control-code)
  1564.       Stops or controls a service.
  1565.  
  1566.         "control-code" specifies the operation to be performed.  It can be
  1567.         one of the following standard control codes:
  1568.  
  1569.           Value  Name                         Meaning
  1570.           -----  ----                         -------
  1571.             1    SERVICE_CONTROL_STOP         Requests the service to stop.
  1572.             2    SERVICE_CONTROL_PAUSE        Requests the service to pause.
  1573.             3    SERVICE_CONTROL_CONTINUE     Requests the paused service to resume.
  1574.             4    SERVICE_CONTROL_INTERROGATE  Requests the service to update immediately its current
  1575.                                               status information to the service control manager.
  1576.  
  1577.         Or it can be a user-defined control code in the range of 128 to 255,
  1578.         inclusive.
  1579.  
  1580.         See "wntSvcStart" for additional parameter information.
  1581.  
  1582.         Returns 1.
  1583.  
  1584.     wntSvcStatus(s:server, s:service-name, i:flags, i:request)
  1585.       Returns status information for a service.
  1586.  
  1587.         "request" specifies the information to be returned, and can be one
  1588.         of the following:
  1589.  
  1590.           1   ServiceType
  1591.           2   CurrentState
  1592.           3   ControlsAccepted
  1593.           4   Win32ExitCode
  1594.           5   ServiceSpecificExitCode
  1595.           6   CheckPoint
  1596.           7   WaitHint
  1597.  
  1598.         Further information on these values follows:
  1599.  
  1600.           ServiceType:
  1601.  
  1602.             The value returned includes one of the following service type flags to indicate the type
  1603.             of service.  In addition, for a SERVICE_WIN32 service, the SERVICE_INTERACTIVE_PROCESS
  1604.             flag might be set, indicating that the service process can interact with the desktop.
  1605.  
  1606.             Value  Name                         Meaning
  1607.             -----  ----                         -------
  1608.                1   SERVICE_KERNEL_DRIVER        A service type flag that indicates a Windows NT
  1609.                                                 device driver.
  1610.                2   SERVICE_FILE_SYSTEM_DRIVER   A service type flag that indicates a Windows NT file
  1611.                                                 system driver.
  1612.               16   SERVICE_WIN32_OWN_PROCESS    A service type flag that indicates a Win32 service
  1613.                                                 that runs in its own process.
  1614.               32   SERVICE_WIN32_SHARE_PROCESS  A service type flag that indicates a Win32 service
  1615.                                                 that shares a process with other services.
  1616.              256   SERVICE_INTERACTIVE_PROCESS  A flag that indicates a Win32 service process that
  1617.                                                 can interact with the desktop.
  1618.  
  1619.           CurrentState:
  1620.  
  1621.             Indicates the current state of the service.  One of the following values is specified:
  1622.  
  1623.             Value  Name                      Meaning
  1624.             -----  ----                      -------
  1625.               1    SERVICE_STOPPED           The service is not running.
  1626.               2    SERVICE_START_PENDING     The service is starting.
  1627.               3    SERVICE_STOP_PENDING      The service is stopping.
  1628.               4    SERVICE_RUNNING           The service is running.
  1629.               5    SERVICE_CONTINUE_PENDING  The service continue is pending.
  1630.               6    SERVICE_PAUSE_PENDING     The service pause is pending.
  1631.               7    SERVICE_PAUSED            The service is paused.
  1632.  
  1633.           ControlsAccepted:
  1634.  
  1635.             Specifies the control codes that the service will accept and process.  A user interface
  1636.             process can control a service by specifying a control command in the ControlService
  1637.             function.  By default, all services accept the SERVICE_CONTROL_INTERROGATE value.  Any
  1638.             or all of the following flags can be specified to enable the other control codes.
  1639.  
  1640.             Value  Name                           Meaning
  1641.             -----  ----                           -------
  1642.  
  1643.               1    SERVICE_ACCEPT_STOP            The service can be stopped.  This enables the
  1644.                                                   SERVICE_CONTROL_STOP value.
  1645.               2    SERVICE_ACCEPT_PAUSE_CONTINUE  The service can be paused and continued. This
  1646.                                                   enables the SERVICE_CONTROL_PAUSE and
  1647.                                                   SERVICE_CONTROL_CONTINUE values.
  1648.               4    SERVICE_ACCEPT_SHUTDOWN        The service is notified when system shutdown
  1649.                                                   occurs.  This enables the system to send a
  1650.                                                   SERVICE_CONTROL_SHUTDOWN value to the service.
  1651.                                                   The ControlService function cannot send this
  1652.                                                   control code.
  1653.  
  1654.           Win32ExitCode
  1655.  
  1656.             Specifies a Win32 error code that the service uses to report an error that occurs when
  1657.             it is starting or stopping.  To return an error code specific to the service, the
  1658.             service must set this value to ERROR_SERVICE_SPECIFIC_ERROR to indicate that the
  1659.             dwServiceSpecificExitCode member contains the error code.  The service should set this
  1660.             value to NO_ERROR when it is running and on normal termination.
  1661.  
  1662.           ServiceSpecificExitCode
  1663.  
  1664.             Specifies a service specific error code that the service returns when an error occurs
  1665.             while the service is starting or stopping.  This value is ignored unless the
  1666.             dwWin32ExitCode member is set to ERROR_SERVICE_SPECIFIC_ERROR.
  1667.  
  1668.           CheckPoint
  1669.  
  1670.             Specifies a value that the service increments periodically to report its progress during
  1671.             a lengthy start, stop, or continue operation.  For example, the service should increment
  1672.             this value as it completes each step of its initialization when it is starting up.  The
  1673.             user interface program that invoked the operation on the service uses this value to
  1674.             track the progress of the service during a lengthy operation.  This value is not valid
  1675.             and should be zero when the service does not have a start, stop, or continue operation
  1676.             pending.
  1677.  
  1678.           WaitHint
  1679.  
  1680.             Specifies an estimate of the amount of time, in milliseconds, that the service expects a
  1681.             pending start, stop, or continue operation to take before the service makes its next
  1682.             call to the SetServiceStatus function with either an incremented dwCheckPoint value or a
  1683.             change in dwCurrentState.  If the amount of time specified by dwWaitHint passes, and
  1684.             dwCheckPoint has not been incremented, or dwCurrentState has not changed, the service
  1685.             control manager or service control program can assume that an error has occurred.
  1686.  
  1687.         See "wntSvcStart" for additional parameter information.
  1688.  
  1689.         Returns an integer.
  1690.  
  1691.   Changed wntResources2 to ignore 'net-resource' and 'provider' unless
  1692.   'scope' is 2.  This avoids an "invalid parameter" error from Windows.
  1693.  
  1694.  
  1695. NetWare 3 extender 12019  First showing up in WB 97A
  1696.  
  1697.   n3CapturePrt was truncating the queue name at 47 characters; it now accepts
  1698.   queue names up to 65 characters long (the maximum length in Netware).
  1699.  
  1700.  
  1701. NetWare 4 extender 14017  First showing up in WB 97A
  1702.  
  1703.   New functions:
  1704.  
  1705.     n4LogoutTree(s:context, s:tree)
  1706.       Logs out of Directory Services.
  1707.  
  1708.         "context" is a Directory Services context, or "" for the default context.
  1709.  
  1710.         "tree" is a Directory Services tree, or "" for the default tree.
  1711.  
  1712.           Note: the "tree" parameter is supported in the 32-bit version only.
  1713.  
  1714.         This function terminates a client's connection to the network.  Unlike
  1715.         the n4Logout function, it does not detach from any servers.
  1716.  
  1717.         Returns @TRUE on success, or @FALSE if the user was not authenticated
  1718.         through Directory Services.
  1719.  
  1720.     n4UserGroupEx(s:server-name, s:user-name, s:context)
  1721.       Returns a list of groups to which the specified user belongs, in the specified context.
  1722.  
  1723.         "context" is a Directory Services context, or "" for the default context.
  1724.  
  1725.         This function is the same as n4UserGroups, but lets you specify a
  1726.         context for the operation.
  1727.  
  1728.         See "n4UserGroups" for additional parameter information.
  1729.  
  1730.     n4GetContext(i:request)
  1731.       Returns the current user's default context or tree.
  1732.  
  1733.         "request" specifies the information to be returned, and can be one
  1734.         of the following:
  1735.  
  1736.           Request   Meaning
  1737.           -------   -------
  1738.              0      Context
  1739.              1      Tree    (32-bit version only)
  1740.  
  1741.   Fixed problem with n4MemberGet returning values other than @TRUE or @FALSE.
  1742.  
  1743.   n4ObjectProps now returns a blank string ("") instead of an error if the
  1744.   specified "attribute" is not a valid attribute of "object".
  1745.  
  1746.   n4CapturePrt was truncating the queue name at 47 characters; it now accepts
  1747.   queue names up to 65 characters long (the maximum length in Netware).
  1748.  
  1749.  
  1750. WILX extender 11106  First showing up in WB 97A
  1751.  
  1752.   New function:
  1753.  
  1754.     xEjectMedia(s:drive) (32-bit version only)
  1755.       Ejects removable media from a device.
  1756.  
  1757.         "drive" is the drive letter of the device (eg, "G", or "G:")
  1758.  
  1759.       This can be used to eject media such as a CD-ROM, tape, or cartridge.
  1760.  
  1761.       Returns TRUE on success, FALSE on failure
  1762.  
  1763.     Fixed problem with xDriveReady always returning @TRUE in Windows NT.
  1764.  
  1765.  
  1766. WB 97B  Jun 23, 1997
  1767.  
  1768.  
  1769. DLL 2.4bbp  First showing up in WB 97B
  1770.  
  1771.   In the Run... commands in the 32-bit version, fixed a problem with not
  1772.   looking up the application path in the registry if the "program-name"
  1773.   parameter contained any path information.
  1774.  
  1775.  
  1776. WB 97C  Jun 26, 1997
  1777.  
  1778.  
  1779. DLL 2.4cbp  First showing up in WB 97C
  1780.  
  1781.   New function:
  1782.  
  1783.     ShortcutDir(s:name) (32-bit only)
  1784.  
  1785.       Returns the name of the directory where shortcuts of type "name" are
  1786.       stored.  This information is retrieved from the registry, under the key:
  1787.  
  1788.         HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
  1789.  
  1790.       Standard values for "name" include:
  1791.  
  1792.         Desktop
  1793.         Programs
  1794.         Fonts
  1795.         Recent
  1796.         SendTo
  1797.         Personal
  1798.         Startup
  1799.         Start Menu
  1800.         NetHood
  1801.         Favorites
  1802.         Templates
  1803.  
  1804.       Returns a directory name on success, or a blank string ("") if no
  1805.       corresponding value was found.
  1806.  
  1807.   New IntControl:
  1808.  
  1809.     IntControl(52, p1, 0, 0, 0) (32-bit only)
  1810.       Set dialog font.
  1811.  
  1812.         P1   Meaning
  1813.         --   -------
  1814.         -1   Don't change (just return current setting)
  1815.          0   Use standard system font.
  1816.          1   Use GUI font (default).
  1817.  
  1818.       This IntControl lets you specify whether the standard system font or
  1819.       GUI font is used by dialog boxes created with the Dialog command.  By
  1820.       default, the GUI font is used.
  1821.  
  1822.         Note: The GUI font is available only in Windows 95 and Windows NT 4.0.
  1823.  
  1824.       Returns previous setting.
  1825.  
  1826.   Fixed problem with OLE calls crashing if they returned a NULL sub-object.
  1827.   They now return 0.  Eg:
  1828.  
  1829.     App = ObjectOpen("Excel.Application")
  1830.     Sheet = App.ActiveSheet  ; ** returns 0, because there is no worksheet
  1831.  
  1832.   Fixed problem with dialog boxes created with the Dialog function, where
  1833.   if you typed a file mask into a editbox associated with a filelistbox,
  1834.   there would be garbage characters at the end of the file mask.
  1835.  
  1836.   Fixed problem with BinaryIndex and BinaryIndex searching for characters
  1837.   with ASCII values >= 128.
  1838.  
  1839.   IntControl(5) now works in the 32-bit version.  Before, it had no effect,
  1840.   and hidden and system files were always included.  The default is now to
  1841.   exclude hidden and system files, as documented.
  1842.  
  1843.  
  1844. Windows 95 extender 11002  First showing up in WB 97C
  1845.  
  1846.   Fixed problem with w95UserInfo crashing if RADMIN32.DLL was not available.
  1847.  
  1848.  
  1849. WB 97D  Aug 21, 1997
  1850.  
  1851.   In 32-bit version, fixed (hopefully) intermittent problem with FileMenu
  1852.   crashing, notably when the files in the Explorer directory window changed.
  1853.  
  1854.   In 16-bit version, fixed problem with the WinBatch box window stealing the
  1855.   input focus from an application window on top of WinBatch.
  1856.  
  1857.   Fixed probblem with the compiler not finding the OLE DLL if the DLL was
  1858.   located in the compiler directory but was not on the path.
  1859.  
  1860.  
  1861. DLL 2.4dbp  First showing up in WB 97D
  1862.  
  1863.   Fixed problem with the FileCopy and FileMove commands, if the overwrite
  1864.   warning option was specified and the file already existed.  In the
  1865.   "Confirm File Replace" dialog that was displayed, the "Use Newer All" and
  1866.   "Use Older All" buttons did not work properly.
  1867.  
  1868.  
  1869. Dialog Editor 97D  First showing up in WB 97D
  1870.  
  1871.   In 32-bit version under Windows 95 and Windows NT 4.0, can now select GUI
  1872.   or system font (via "Edit" menu items).  Defaults to GUI font, like the
  1873.   WIL Dialog() command does.
  1874.  
  1875.  
  1876. Windows NT extender 11004  First showing up in WB 97D
  1877.  
  1878.   Increased the maximum length of the server, resource, and username
  1879.   parameters in the wntAccess[..] and wntOwner[..] functions.
  1880.  
  1881.  
  1882. NetWare 3 extender 12020  First showing up in WB 97D
  1883.  
  1884.   In the n3MsgSend and n3MsgSendAll functions, increased the maximum length
  1885.   of the message string from 57 characters to 254 characters, when using
  1886.   NetWare client version 3.11 or later.
  1887.  
  1888.  
  1889. NetWare 4 extender 14018  First showing up in WB 97D
  1890.  
  1891.   In the n3MsgSend and n3MsgSendAll functions, increased the maximum length
  1892.   of the message string from 57 characters to 254 characters.
  1893.  
  1894.  
  1895. WB 98A  Jun 15, 1998
  1896.  
  1897.   WinBatch compiler now accepts a single file name as a command-line
  1898.   parameter (such as via drag-and-drop).
  1899.  
  1900.   WinBatch compiler no longer converts output file name to lower case.
  1901.  
  1902.   WinBatch compiler now removes end-of-line comments as well as entire
  1903.   comment lines when optimizing WBT's.
  1904.  
  1905.   Added the ability to embed external files when running or compiling a
  1906.   WinBatch script, by using the new "#include" pre-processor directive.
  1907.   The syntax is:
  1908.  
  1909.       #include "filename"
  1910.  
  1911.     The keyword "#include" must begin in column 1, and must be all lower-case.
  1912.     The file name must be delimited by double quotes.  The file name may contain
  1913.     path information, and does not need to have an extension of WBT.  Nothing
  1914.     else should appear on the line.
  1915.  
  1916.     Each line containing a #include directive will be replaced by the contents
  1917.     of the specified file.  If the file cannot be found, an error will occur.
  1918.  
  1919.     When using the WinBatch compiler, the "included" file(s) must be present
  1920.     at compile time; they will be embedded in the compiled EXE, and therefore
  1921.     do not need to be distributed as separate files.
  1922.  
  1923.     When using the interpreted version of WinBatch, the "included" file(s)
  1924.     must be present at the point in time when the script is launched (they
  1925.     cannot be created "on-the-fly" from within the script).
  1926.  
  1927.     You can have as many #include directives as you wish, and they may be
  1928.     nested (ie, "included" files may themselves conatin #include directives).
  1929.     However, the WinBatch script and all files being included, when merged
  1930.     together, cannot exceed 64K in size (after comments and whitespace are
  1931.     optimized by the WinBatch compiler).
  1932.  
  1933.  
  1934. DLL 2.5abq  First showing up in WB 98A
  1935.  
  1936.   New functions:
  1937.  
  1938.     BinaryCompare(handle1, offset1, handle2, offset2, count)
  1939.       Compares portions of two binary buffers.
  1940.  
  1941.         (i) handle1: handle of first buffer.
  1942.         (i) offset1: zero-based offset into the first buffer specifying where the data to
  1943.             be compared starts.
  1944.         (i) handle2: handle of second buffer.
  1945.         (i) offset2: zero-based offset into the second buffer specifying where the data to
  1946.             be compared starts.
  1947.         (i) count: the number of bytes to compare.
  1948.  
  1949.       The specified sections of the buffers are compared on a byte-by-byte
  1950.       basis.  This function is case-sensitive.
  1951.  
  1952.       "handle1" and "handle2" may both reference the same buffer, in which
  1953.       case two sections of the buffer can be compared.
  1954.  
  1955.       Returns @TRUE if the sections are identical; @FALSE otherwise.
  1956.  
  1957.     BinaryReadEx(handle, binary-offset, filename, file-offset, count)
  1958.       Reads a portion of a file into a binary buffer.
  1959.  
  1960.         (i) handle: handle of buffer.
  1961.         (i) binary-offset: zero-based offset into the buffer specifying
  1962.             where the data should be stored.
  1963.         (i) filename: file to read into buffer.
  1964.         (i) file-offset: zero-based offset into the file specifying where
  1965.             the data to be read starts.
  1966.         (i) count: the number of bytes to read.
  1967.  
  1968.       This function reads "count" bytes from "filename", beginning at
  1969.       "file-offset".  It then writes the data to the buffer specified by
  1970.       "handle", beginning at "binary-offset".  Any existing data in the
  1971.       buffer within the range "binary-offset + count" is overwritten with
  1972.       the new data; any existing data outside that range is left untouched.
  1973.  
  1974.       Returns the number of bytes read.
  1975.  
  1976.     BinaryWriteEx(handle, binary-offset, filename, file-offset, count)
  1977.       Writes a portion of a binary buffer to a file.
  1978.  
  1979.         (i) handle: handle of buffer.
  1980.         (i) binary-offset: zero-based offset into the buffer specifying
  1981.             where the data to be read starts.
  1982.         (i) filename: file to write to.
  1983.         (i) file-offset: zero-based offset into the file specifying where
  1984.             the data should be stored.
  1985.         (i) count: the number of bytes to write.
  1986.  
  1987.       This function reads "count" bytes from the buffer specified by
  1988.       "handle", beginning at "binary-offset".  It then writes the data to
  1989.       "filename", beginning at "file-offset".  Any existing data in the file
  1990.       within the range "file-offset + count" is overwritten with the new
  1991.       data; any existing data outside that range is left untouched.
  1992.  
  1993.       If "filename" does not exist, it will be created.  If the existing
  1994.       file is smaller than "file-offset", NULL bytes will be added to the
  1995.       end of the file to increase its size to "file-offset", and then the
  1996.       specified data will be written beginning at "file-offset".
  1997.  
  1998.       Returns the number of bytes written.
  1999.  
  2000.     BinaryAnd(target-handle, target-offset, source-handle, source-offset, count)
  2001.       Performs a bitwise AND on portions of two binary buffers.
  2002.  
  2003.         (i) target-handle: handle of target buffer.
  2004.         (i) target-offset: zero-based offset into the target buffer specifying
  2005.             where the data to be processed starts, and where the result of
  2006.             the operation should be placed.
  2007.         (i) source-handle: handle of source buffer.
  2008.         (i) source-offset: zero-based offset into the source buffer specifying
  2009.             where the data to be processed starts.
  2010.         (i) count: the number of bytes to process.
  2011.  
  2012.       The specified sections of the buffers are processed on a byte-by-byte
  2013.       basis, and the results are written to the buffer specified by
  2014.       "target-handle".  Ie, the byte at "source-offset" is AND'ed with the
  2015.       byte at "target-offset", and the result of the AND operation is stored
  2016.       in the byte at "target-offset", then the bytes at "source-offset + 1"
  2017.       and "target-offset + 1" are AND'ed, and so on.
  2018.  
  2019.       "target-handle" and "source-handle" may both reference the same buffer,
  2020.       in which case two sections of the buffer can be processed.
  2021.  
  2022.       Returns 1.
  2023.  
  2024.     BinaryOr(target-handle, target-offset, source-handle, source-offset, count)
  2025.       Performs a bitwise OR on portions of two binary buffers.
  2026.  
  2027.       The specified sections of the buffers are processed on a byte-by-byte
  2028.       basis, and the results are written to the buffer specified by
  2029.       "target-handle".  Ie, the byte at "source-offset" is OR'ed with the
  2030.       byte at "target-offset", and the result of the OR operation is stored
  2031.       in the byte at "target-offset", then the bytes at "source-offset + 1"
  2032.       and "target-offset + 1" are OR'ed, and so on.
  2033.  
  2034.       "target-handle" and "source-handle" may both reference the same buffer,
  2035.       in which case two sections of the buffer can be processed.
  2036.  
  2037.       See BinaryAnd for parameter information.
  2038.  
  2039.       Returns 1.
  2040.  
  2041.     BinaryXor(target-handle, target-offset, source-handle, source-offset, count)
  2042.       Performs a bitwise XOR (exclusive OR) on portions of two binary buffers.
  2043.  
  2044.       The specified sections of the buffers are processed on a byte-by-byte
  2045.       basis, and the results are written to the buffer specified by
  2046.       "target-handle".  Ie, the byte at "source-offset" is XOR'ed with the
  2047.       byte at "target-offset", and the result of the XOR operation is stored
  2048.       in the byte at "target-offset", then the bytes at "source-offset + 1"
  2049.       and "target-offset + 1" are XOR'ed, and so on.
  2050.  
  2051.       "target-handle" and "source-handle" may both reference the same buffer,
  2052.       in which case two sections of the buffer can be processed.
  2053.  
  2054.       See BinaryAnd for parameter information.
  2055.  
  2056.       Returns 1.
  2057.  
  2058.     BinaryConvert(handle, source-type, target-type, code-page, flags)
  2059.       Converts a binary buffer.
  2060.  
  2061.         (i) handle: handle of buffer.
  2062.         (i) source-type: format of existing data in buffer.
  2063.         (i) target-type: format of data which the buffer will be converted to.
  2064.         (i) code-page: code page for 8-bit <-> Unicode conversions.
  2065.         (i) flags: additional options.
  2066.  
  2067.       This function can be used to perform the following types of conversions:
  2068.  
  2069.         8-bit <-> Unicode
  2070.         Multibyte <-> Unicode
  2071.         ANSI <-> OEM
  2072.         -> Uppercase
  2073.         -> Lowercase
  2074.  
  2075.       "Source-type" and "target-type" can be one of the following:
  2076.  
  2077.         0  8-bit ANSI
  2078.         1  8-bit OEM
  2079.         2  Multibyte (eg, double-byte)
  2080.         3  Unicode
  2081.  
  2082.       Conversions from 8-bit (types 0 or 1) to or from multibyte (type 2)
  2083.       are not supported.  If you need to perform this type of conversion,
  2084.       you can do it in two steps, using Unicode as an intermediate stage
  2085.       (eg, ANSI to Unicode, then Unicode to multibyte).
  2086.  
  2087.       For conversions to or from Unicode, a code page must be specified
  2088.       for the 8-bit (non-Unicode) character set.  "Code-page" can be any
  2089.       valid code page on your system, or one of the following default code
  2090.       pages:
  2091.  
  2092.         0  ANSI
  2093.         1  OEM
  2094.         2  Macintosh
  2095.  
  2096.       For conversions which don't involve Unicode, "code-page" is ignored.
  2097.  
  2098.       "Flags" can be one of the following:
  2099.  
  2100.         1  Convert to uppercase
  2101.         2  Convert to lowercase
  2102.  
  2103.       Note that Unicode uses two bytes for each character.  Therefore, for
  2104.       conversions to Unicode, the binary buffer must be large enough to hold
  2105.       at least twice as much data as is currently in the buffer.  Ie, if
  2106.       you are trying to convert a buffer which contains a 40-character
  2107.       string to Unicode, the buffer must be at least 80 bytes in size,
  2108.       because the resulting Unicode string will be 80-bytes long.
  2109.  
  2110.       Returns the new binary EOD (end of data) for the buffer.
  2111.  
  2112.     BinaryClipGet(handle, format)
  2113.       Reads the contents of the Windows clipboard into a binary buffer.
  2114.  
  2115.         (i) handle: handle of buffer.
  2116.         (i) format: format of clipboard data.
  2117.  
  2118.       The following is a list of possible clipboard formats.  Note that some
  2119.       of them may not be supported, because the clipboard contains a pointer
  2120.       or handle to external data instead of the data itself.
  2121.  
  2122.           1  CF_TEXT
  2123.           2  CF_BITMAP          (not supported)
  2124.           3  CF_METAFILEPICT
  2125.           4  CF_SYLK
  2126.           5  CF_DIF
  2127.           6  CF_TIFF
  2128.           7  CF_OEMTEXT
  2129.           8  CF_DIB
  2130.           9  CF_PALETTE
  2131.          10  CF_PENDATA
  2132.          11  CF_RIFF
  2133.          12  CF_WAVE
  2134.          13  CF_UNICODETEXT
  2135.          14  CF_ENHMETAFILE
  2136.          15  CF_HDROP
  2137.          16  CF_LOCALE
  2138.         128  CF_OWNERDISPLAY
  2139.         129  CF_DSPTEXT
  2140.         130  CF_DSPBITMAP
  2141.         131  CF_DSPMETAFILEPICT
  2142.         142  CF_DSPENHMETAFILE
  2143.  
  2144.       Returns the number of bytes read from the clipboard.
  2145.  
  2146.     BinaryClipPut(handle, format)
  2147.       Writes a binary buffer to the Windows clipboard.
  2148.  
  2149.         (i) handle: handle of buffer.
  2150.         (i) format: format of clipboard data.
  2151.  
  2152.       Note that this function destroys the previous contents of the clipboard.
  2153.  
  2154.       See BinaryClipGet for parameter information.
  2155.  
  2156.       Returns 1.
  2157.  
  2158.     FileTimeGetEx(filename, time-field) (32-bit only)
  2159.       Gets extended time information for a file or directory.
  2160.  
  2161.         This function is like FileYmdHms, but works with directories as well
  2162.         as files, and lets you specify which time field you want to get.
  2163.         "Filename" can specify a file or directory name.  "Time-field" can
  2164.         be one of the following:
  2165.  
  2166.           1  file created
  2167.           2  file last modified
  2168.           3  file last accessed
  2169.  
  2170.       Returns file time in YmdHms format.
  2171.  
  2172.     FileTimeSetEx(file-list, YmdHms, time-field) (32-bit only)
  2173.       Sets extended time information for one or more files.
  2174.  
  2175.         This function is like FileTimeSet, but lets you specify which time
  2176.         field you want to set.  "Time-field" can be one of the following:
  2177.  
  2178.           1  file created
  2179.           2  file last modified
  2180.           3  file last accessed
  2181.  
  2182.       Returns @TRUE on success; @FALSE if any of the specified files could
  2183.       not be changed.
  2184.  
  2185.     ObjectAccess(app.objname, create-flag)
  2186.       Opens or creates an OLE 2.0 Automation object.
  2187.  
  2188.         If there is already a running instance of the object specified by
  2189.         "app.objname", this function will return a handle to that object.
  2190.  
  2191.         If there is not a running instance of the specified object, the
  2192.         behavior will depend on the value of 'create-flag':
  2193.  
  2194.           If 'create-flag' == @TRUE, it will create an instance of the
  2195.           object, and return a handle to it.
  2196.  
  2197.           If 'create-flag' == @FALSE, it will fail and return an error.
  2198.  
  2199.         This function is similar to ObjectOpen, except that ObjectOpen always
  2200.         creates a new object and cannot be used to access an existing one.
  2201.  
  2202.         See Object101 section for information on OLE Automation.
  2203.  
  2204.     DirSize(s:dir-name, i:flags)
  2205.       Finds the total size of a directory.
  2206.  
  2207.         This function returns the total size of a directory, including all
  2208.         files in the directory, and all files in all subdirectories under
  2209.         the directory.
  2210.  
  2211.           Flags   Meaning
  2212.           -----   -------
  2213.             1     Instead of returning the actual size of the files, return
  2214.                   the amount of disk space they occupy.  This is based upon
  2215.                   the disk's cluster size.  This flag is valid only if the
  2216.                   specified directory is on a local drive or a network drive
  2217.                   mapped to a drive letter; it does not support UNC's.
  2218.  
  2219.         Returns the size in bytes.  The return value will be a floating
  2220.         point number if it is larger than 2 gigabytes.
  2221.  
  2222.     SendMenusToEx(s:window-name, s:menu-name, s:class-name, s:type, s:flags)
  2223.       Selects a menu item from an application.
  2224.  
  2225.         This function is similar to SendMenusTo, but supports non-standard
  2226.         menu types.  The "type" parameter identifies the type of menu:
  2227.  
  2228.           Type   Description
  2229.           ----   -----------
  2230.             0    Standard pull-down menu
  2231.             1    Microsoft Office 97 application menu (32-bit only)
  2232.  
  2233.         The other parameters depend on "type":
  2234.  
  2235.           Type 0:
  2236.             This works exactly the same as the SendMenusTo function.  The
  2237.             "class name" and "flags" parameters are ignored.
  2238.  
  2239.           Type 1:
  2240.             This works with the main application control bar in Microsoft
  2241.             Office 97 applications, such as Microsoft Word and Microsoft Excel.
  2242.  
  2243.               "window-name" specifies the application window that will be
  2244.               activated before the menu item is selected.  If a blank string
  2245.               ("") is specified, no window activation will be performed (in
  2246.               which case the window would need to already be active).
  2247.  
  2248.               "menu-name" specifies the menu item(s) to be selected.  Each
  2249.               component must be separated by a vertical bar ("|").  So, to
  2250.               select "Open..." from the "File" menu, you would use:
  2251.  
  2252.                 "File|Open..."
  2253.  
  2254.               "class-name" is the OLE class string in the Windows registry
  2255.               which identifies the application, such as:
  2256.  
  2257.                 Word.Application
  2258.                 Excel.Application
  2259.                 Access.Application
  2260.  
  2261.               If more than one instance of the application identified by
  2262.               "class-name" is currently running, the command will be sent to
  2263.               the first one that is found.  The "window-name" paramater cannot
  2264.               be used to identify a particular instance of the applicaton.
  2265.  
  2266.               "flags" is currently ignored, and should be set to 0.
  2267.  
  2268.       Returns @TRUE on success, @FALSE on failure.
  2269.  
  2270.       Examples:
  2271.         SendMenusToEx("~Notepad", "File | Open...", "", 0, 0)
  2272.         SendMenusToEx("Microsoft Word -", "File|Open...", "Word.Application", 1, 0)
  2273.  
  2274.     AskDirectory(prompt, browse-root, start-dir, confirm-prompt, flags) (32-bit, Win95/NT40 only)
  2275.       Displays a directory browse dialog box, and returns the selected directory name.
  2276.  
  2277.         (s) prompt: prompt to be displayed in the dialog box above the list
  2278.             of directories.  This can be a blank string ("") if no prompt is
  2279.             desired.  Note that the title of the dialog box ("Browse for
  2280.             Folder") cannot be changed.
  2281.  
  2282.         (s) browse-root: directory under which the user can browse for
  2283.             directories.  The user will not be able to browse above this
  2284.             level.  You can specify a blank string ("") to allow the entire
  2285.             file system (all drives, directories, and network shares) to be
  2286.             browsed.
  2287.  
  2288.         (s) start-dir: the directory which will be selected by default when
  2289.             the dialog box is initially displayed.  This can be a blank
  2290.             string (""), in which case the top of the tree will be selected
  2291.             (same as 'browse-root').
  2292.  
  2293.         (s) confirm-prompt: the title of the confirmation message box (see
  2294.             'flags' #2, below).
  2295.  
  2296.         (i) flags: one or more of the following optional flags, combined
  2297.             using the binary OR ("|") operator, or 0 if none are desired:
  2298.  
  2299.               Flag   Meaning
  2300.               ----   -------
  2301.                 1    Display an edit field in the dialog box, in which the
  2302.                      user can type the name of a directory which may or may
  2303.                      not exist.  This name will be relative to the currently
  2304.                      selected directory name in the browse list.
  2305.  
  2306.                        NOTE: This is supported only in Windows 98, Windows
  2307.                        NT 5.0, or in earlier versions of Windows that have
  2308.                        Internet Explorer 4.0 installed.  In other versions
  2309.                        of Windows, this flag is ignored.
  2310.  
  2311.                 2    If the user types a name in the edit field (see flag #1),
  2312.                      of a directory which does not exist, this flag causes a
  2313.                      confirmation message box to be displayed, showing the
  2314.                      name of the directory that would be returned by the
  2315.                      function, and containing three buttons: Yes, No, and
  2316.                      Cancel.  If the user selects 'Yes', the function returns.
  2317.                      If the user selects 'No', the directory browse dialog
  2318.                      remains displayed, and the user can re-edit the name or
  2319.                      select a different directory.  'Cancel' causes the
  2320.                      function to return, and standard WIL "cancel" processing
  2321.                      to be performed.
  2322.  
  2323.                      The title of the message box is specified by
  2324.                      'confirm-prompt'.
  2325.  
  2326.         Returns the directory name selected in the browse dialog.  If the user
  2327.         presses "Cancel", standard WIL "cancel" processing will be performed.
  2328.  
  2329.   New IntControls:
  2330.  
  2331.     IntControl(53, p1, 0, 0, 0)
  2332.       Set line terminator type for FileWrite.
  2333.  
  2334.         P1   Terminator
  2335.         --   ----------
  2336.         -1   Don't change (just return current setting)
  2337.          0   No line terminator
  2338.          1   CR/LF (DOS) (default)
  2339.          2   LF (UNIX)
  2340.          3   CR (Macintosh)
  2341.          4   tab
  2342.  
  2343.       Normally, FileWrite adds a carriage return and line feed (CR/LF) after
  2344.       writing each line to the file.  This IntControl lets you select a
  2345.       different line terminator, or none at all, as specified by "p1".
  2346.  
  2347.       Returns previous setting.
  2348.  
  2349.     IntControl(54, p1, p2, 0, 0)
  2350.       Keep window on top.
  2351.  
  2352.         This IntControl tells the specified window to remain on top of all
  2353.         other windows, or to return to a normal (non-topmost) state.
  2354.  
  2355.           P1 = partial windowname of the window to be affected.
  2356.  
  2357.           P2   Meaning
  2358.           --   -------
  2359.            0   Don't stay on top
  2360.            1   Stay on top
  2361.  
  2362.       Returns @TRUE on success, @FALSE on failure.
  2363.  
  2364.     IntControl(56, p1, 0, 0, 0)
  2365.       Terminate an application.
  2366.  
  2367.         This IntControl lets you terminate an application abruptly.
  2368.         Normally, you should use WinClose to close an application
  2369.         gracefully, but sometimes that may not be possible.  Using this
  2370.         IntControl is a drastic, last-resort method of terminating an app.
  2371.  
  2372.         Note: You will not receive any warning from the operating system
  2373.         before the application is closed, even if it contains unsaved
  2374.         work.  Also, this function may leave the system in an unstable
  2375.         state.  Use this function carefully.
  2376.  
  2377.           P1 = partial windowname of the application you wish to terminate.
  2378.  
  2379.       Returns @TRUE on success, @FALSE on failure.
  2380.  
  2381.     IntControl(57, p1, 0, 0, 0) (32-bit, Windows 95 only)
  2382.       Disable/enable system keys.
  2383.  
  2384.         This IntControl can be used to disable (or re-enable) the following
  2385.         system key-combinations:
  2386.  
  2387.           <Alt-Tab>
  2388.           <Alt-Esc>
  2389.           <Ctrl-Alt-Del>
  2390.  
  2391.         It works by telling the operating system that the screen saver is
  2392.         running (even though it isn't), which disables those keys.
  2393.  
  2394.           P2   Meaning
  2395.           --   -------
  2396.            0   Enable system keys
  2397.            1   Disable system keys
  2398.  
  2399.         Note: This function is not supported in Windows NT.
  2400.  
  2401.       Returns @TRUE on success, @FALSE on failure.
  2402.  
  2403.     IntControl(58, p1, 0, 0, 0) (32-bit only)
  2404.       Set system time.
  2405.  
  2406.         P1 = new system time, in YmdHms format.
  2407.  
  2408.       This IntControl changes the time of the computer's system clock.
  2409.  
  2410.       Returns @TRUE on success, @FALSE on failure.
  2411.  
  2412.     IntControl(59, p1, p2, 0, 0)
  2413.       Sends a WM_WININICHANGE or WM_SETTINGCHANGE message.
  2414.  
  2415.         This IntControl sends a message to one or all application windows,
  2416.         informing them that a change has been made to WIN.INI or to the
  2417.         registry.
  2418.  
  2419.           p1 = window handle of the window to send the message to, or -1 for
  2420.                all top-level windows.
  2421.  
  2422.           p2 = name of the WIN.INI section or registry key that has been
  2423.                changed.  If this parameter specifies a WIN.INI section, it
  2424.                should not include square brackets around the name.  If it
  2425.                specifies a registry key, it typically indicates only the
  2426.                leaf node in the registry, not the whole path, but this will
  2427.                be application-dependent.  You can specify a blank string
  2428.                ("") to request that the application re-read all sections or
  2429.                keys that affect it.
  2430.  
  2431.         In the 16-bit version, this sends a WM_WININICHANGE message.  In the
  2432.         32-bit version, it sends a WM_SETTINGCHANGE message.
  2433.  
  2434.         Returns @TRUE on success; @FALSE on error.
  2435.  
  2436.     IntControl(60, p1, p2, 0, 0)
  2437.       Sends a WM_DEVMODECHANGE message.
  2438.  
  2439.         This IntControl sends a message to one or all application windows,
  2440.         informing them that a change has been made to device mode settings.
  2441.  
  2442.           p1 = window handle of the window to send the message to, or -1 for
  2443.                all top-level windows.
  2444.  
  2445.           p2 = name of the device (as specified in the [Devices] section of
  2446.                WIN.INI) whose settings have been changed.
  2447.  
  2448.         Returns @TRUE on success; @FALSE on error.
  2449.  
  2450.     IntControl(61, p1, 0, 0, 0) (32-bit only)
  2451.       Sets WinActivate() method.
  2452.  
  2453.         In Windows 98 and NT 5.0, the standard method that WinActivate (and
  2454.         SendKeysTo and MouseClick) uses to activate an application window is
  2455.         no longer supported.  Therefore, we must use an alternate method to
  2456.         activate windows under these operating systems.  This IntControl lets
  2457.         you change the current method being used.  Some methods may work with
  2458.         some particular windows and not others, so you may need to experiment.
  2459.  
  2460.           P1   Method to use
  2461.           --   -------------
  2462.           -1   Don't change (just return current setting).
  2463.            0   Standard method (SetForegroundWindow API call).
  2464.            1   Switch to the window, then click on it.
  2465.            2   Iconize the window, then switch to it.
  2466.  
  2467.         The default method is "1" when running under Windows 98 or NT 5.0.
  2468.         The default is "0" when running under previous versions of Windows.
  2469.  
  2470.       Returns previous setting.
  2471.  
  2472.     IntControl(62, p1, 0, 0, 0) (32-bit only)
  2473.       Sets dialog activation method.
  2474.  
  2475.         This IntControl lets you change the method used to activate dialog
  2476.         windows that are displayed by the WIL Interpreter.  See IntControl(61)
  2477.         for more information.
  2478.  
  2479.   The date string returned by the TimeDate function now includes a 4-digit
  2480.   year, if this was configured via Control Panel.
  2481.  
  2482.   In 32-bit version under Windows NT, RegDeleteKey now deletes a key even if
  2483.   it has subkeys (under Windows 95 it has always done this).
  2484.  
  2485.   In 32-bit version, added additional options for the "level" parameter in
  2486.   WinVersion:
  2487.  
  2488.     Level   Returns
  2489.     -----   -------
  2490.       2     (i) Build number
  2491.       3     (s) CSD version
  2492.  
  2493.         Under Windows NT, CSD version is a string indicating the latest
  2494.         service pack that has been installed (eg, "Service Pack 1"), or a
  2495.         blank string ("") if no service pack has been installed.  Under
  2496.         Windows 95, it is a string that may indicate arbitrary additional
  2497.         information about the operating system, or may be blank.
  2498.  
  2499.   Added additional special characters to the SendKey (and SendKeysTo and
  2500.   SendKeysChild) functions:
  2501.  
  2502.     Key                      SendKey equivalent
  2503.     ---                      ------------------
  2504.     0 on numeric keypad      {NUMPAD0}
  2505.     1 on numeric keypad      {NUMPAD1}
  2506.     2 on numeric keypad      {NUMPAD2}
  2507.     3 on numeric keypad      {NUMPAD3}
  2508.     4 on numeric keypad      {NUMPAD4}
  2509.     5 on numeric keypad      {NUMPAD5}
  2510.     6 on numeric keypad      {NUMPAD6}
  2511.     7 on numeric keypad      {NUMPAD7}
  2512.     8 on numeric keypad      {NUMPAD8}
  2513.     9 on numeric keypad      {NUMPAD9}
  2514.     * on numeric keypad      {NUMPAD*}
  2515.     + on numeric keypad      {NUMPAD+}
  2516.     - on numeric keypad      {NUMPAD-}
  2517.     . on numeric keypad      {NUMPAD.}
  2518.     / on numeric keypad      {NUMPAD/}
  2519.     Enter on numeric keypad  {NUMPAD~}  (32-bit only)
  2520.  
  2521.   In 32-bit version, the Run[..] commands can now be used to launch a
  2522.   shortcut to a non-executable, such as a document or a directory.  However,
  2523.   the "Wait" option is ignored in this case.
  2524.  
  2525.   Fixed problem with TimeSubtract failing if the result was less than 1 year.
  2526.  
  2527.   If the "length" parameter of StrSub is past the end of the string, it now
  2528.   extracts to the end of the string, instead of returning a blank string.
  2529.  
  2530.   Changed FileRead to treat line feeds as line terminators, instead of
  2531.   carriage returns.  This means that FileRead now supports both DOS files
  2532.   (which have CR/LF terminators) and UNIX files (which have LF terminators).
  2533.  
  2534.   Fixed problem with IntControl(5) in the 32-bit version.
  2535.  
  2536.   In the Dialog function, ampersands ("&") are no longer being converted to
  2537.   underscores in static text and varying text fields.
  2538.  
  2539.   Added parameter to IntControl(49):
  2540.  
  2541.     IntControl(49, p1, p2, 0, 0)
  2542.  
  2543.       p2 = specifies the value that a dialog box (created using the "Dialog"
  2544.            function) will return if the user closes the dialog without pressing
  2545.            one of the pushbuttons in the dialog (eg, by pressing <Alt-F4>, or
  2546.            by clicking on the "Close" icon in the title bar).  The default is 1.
  2547.            If a dialog returns 0, processing will be transferred to the label in
  2548.            the script marked ":Cancel" (if any).
  2549.  
  2550.   IntControl(40) now correctly sets the share mode used when opening a file
  2551.   in "APPEND" mode with FileWrite(previously, it was only affecting files
  2552.   opened in "WRITE" mode).
  2553.  
  2554.   Fixed problem with input focus being lost when a dialog (created using the
  2555.   "Dialog" function) was minimized and restored.
  2556.  
  2557.   In 32-bit version, fixed problem prepending the path specified in the registry
  2558.   under "App Paths" when launching a program, if the existing path was more than
  2559.   300 characters long.
  2560.  
  2561.   In 32-bit version, FileTimeGet no longer updates the file's last-access time.
  2562.  
  2563.   SendKey (and SendKeysTo and SendKeysChild) now turns caps lock off while
  2564.   sending keystrokes (and restores the previous state when it is done).  This
  2565.   fixes a problem that was occurring when caps lock was on, and a shifted key
  2566.   combination was specified [eg, SendKey("+a")], resulting in a lower-case
  2567.   character being sent.  Although this was faithfully duplicating the behavior
  2568.   of typing keystrokes manually ("reverse caps lock"), the intended behavior
  2569.   is for SendKey to ignore the caps lock state, and to therefore behave
  2570.   consistently whether caps lock is on or off.
  2571.  
  2572.   In 32-bit version under Windows 95, fixed problem using KeyToggleSet twice
  2573.   in a row.
  2574.  
  2575.   Fixed bug in StrIndexWild that could cause program to hang.
  2576.  
  2577.   Improved parameter handling for OLE functions:
  2578.  
  2579.     OLE functions now support up to 20 parameters (instead of 5).
  2580.  
  2581.     OLE functions now support omitted optional positional parameters, using
  2582.     commas as placeholders.  For example:
  2583.  
  2584.       Application.Display("Hello", 100, 100, , 1)
  2585.  
  2586.     OLE functions now support named parameters.  The syntax structure is:
  2587.  
  2588.         Object.Method(p1, p2 :: n3 = v3, n4 = v4)
  2589.  
  2590.       Positional parameters (shown as p1 and p2), if any, come first,
  2591.       followed by a double colon ("::"), and then any named parameters (n3
  2592.       and n4).  Each named parameter is followed by an equals sign ("=") and
  2593.       then the value for the parameter (v3 and v4).  Whitespace is ignored.
  2594.       Here are some examples:
  2595.  
  2596.         ; 2 positional parameters
  2597.         Application.InputBox("My Prompt", "My Title")
  2598.  
  2599.         ; 2 positional parameters and 2 named parameters
  2600.         Application.InputBox("My Prompt", "My Title" :: Left = 40, Top = 300)
  2601.  
  2602.         ; no positional parameters and 2 named parameters (note the leading colon)
  2603.         Application.InputBox(:: Prompt = "My Prompt", Title = "My Title")
  2604.  
  2605.     OLE functions now allow you to specify a type for integer parameters.
  2606.     Normally, when you specify an integer value as a parameter to an OLE
  2607.     function, WIL passes it as a type VT_I4 (4-byte integer value).  If the
  2608.     OLE application was expecting the parameter to be a different type of
  2609.     numeric value, in most cases it will automatically convert it to the
  2610.     desired type.  However, there are some OLE applications which don't do
  2611.     this, and return an error instead.  In such cases, you can specify the
  2612.     type, using the following syntax:
  2613.  
  2614.         Object.Method(p1, t2:p2 :: n3 = v3, t4:n4 = v4)
  2615.  
  2616.       The parameter type (shown as t2 and t4) is followed by a single colon
  2617.       (":"), and then the parameter itself (p2 and n4).  This can be done
  2618.       for both positional parameters (p2) and named parameters (n4).
  2619.       Whitespace is ignored, and the type names are not case-sensitive.
  2620.  
  2621.       Here are the types which may be specified for integer parameters:
  2622.  
  2623.         Type   Name      Meaning
  2624.         ----   ----      -------
  2625.         UI1    VT_UI1    An unsigned 1-byte character. (32-bit version only)
  2626.         I2     VT_I2     A 2-byte integer value.
  2627.         I4     VT_I4     A 4-byte integer value.
  2628.         BOOL   VT_BOOL   A Boolean (True/False) value.
  2629.  
  2630.           The type name that gets specified in the WIL command is the same
  2631.           as the equivalent OLE name, but without the leading "VT_".
  2632.  
  2633.           The default type for integer values is "I4" (VT_I4).
  2634.  
  2635.       In addition, you can now specify a date type for string parameters,
  2636.       for OLE functions which require a parameter of type VT_DATE:
  2637.  
  2638.         Type   Name      Meaning
  2639.         ----   ----      -------
  2640.         DATE   VT_DATE   A date/time string, in Ymd or YmdHms format.
  2641.  
  2642.       Here are some examples:
  2643.  
  2644.         ; this function requires a parameter of type VT_I2
  2645.         Application.CreateImageViewerObject(I2:1)
  2646.  
  2647.         ; this function requires a (named) parameter of type VT_DATE
  2648.         Application.CreateLog("access.log" :: DATE:startdate="97:11:01")
  2649.  
  2650.       Return values from OLE functions which have a return type of VT_DATE
  2651.       are now automatically converted to a YmdHms string in the form
  2652.       "YYYY:MM:DD:HH:MM:SS" (this will always contain a 4-digit year,
  2653.       regardless of the setting specified by IntControl 41).
  2654.  
  2655.     Fixed string memory leak with OLE functions.
  2656.  
  2657.   The following functions, which return a date string in YmdHms format, now
  2658.   return a 4-digit year by default.  This can be changed using IntControl(41):
  2659.  
  2660.     FileYmdHms
  2661.     TimeAdd
  2662.     TimeJulToYmd
  2663.     TimeSubtract
  2664.     TimeYmdHms
  2665.  
  2666.   Under Windows 98 and NT 5.0, fixed problem with WinActivate and SendKeysTo
  2667.   not working, and problem with WIL dialogs not being activated.  By default,
  2668.   an alternate window activation method will be used under these operating
  2669.   systems, which can be modified with IntControl(61) and IntControl(62).
  2670.  
  2671.   Under Windows 98 and NT 5.0, messages boxes are now brought to the
  2672.   foreground, but they will not be activated.
  2673.  
  2674.   DiskScan no longer adds a trailing delimiter to the returned list.
  2675.  
  2676.   DiskFree and DiskSize now accept lists with a trailing delimiter.
  2677.  
  2678.   In the "overwrite warning" dialog in FileCopy and FileMove, if the file
  2679.   name is too long to be displayed in its entirety, the beginning and end of
  2680.   the name are now displayed, instead of the name simply being truncated.
  2681.  
  2682.   In 32-bit version, the Wallpaper() function now supports the Active Desktop
  2683.   wallpaper in Internet Explorer 4.0.
  2684.  
  2685.   Fixed problem with StrIndexWild returning 0 if an asterisk ("*") in the
  2686.   wildcard pattern matched 0 characters in the string.
  2687.  
  2688.   In 32-bit version, improved the way FileFullName handles relative path
  2689.   names, when the current directory is a UNC (network share).
  2690.  
  2691.   The following functions no longer return a delimiter at the end of the list:
  2692.  
  2693.     DirItemize
  2694.     FileItemize
  2695.     IntControl(31)
  2696.     ItemInsert
  2697.     ItemRemove
  2698.     ItemSort
  2699.     NetInfo
  2700.     WinItemize
  2701.     WinItemChild
  2702.     WinItemNameId
  2703.  
  2704.   Functions which take a date/time string in YmdHms format now return an
  2705.   error if "24" is specified as the hour.
  2706.  
  2707.   In 32-bit version, IntControl(68) (shut down computer) now does a power-off,
  2708.   if supported by the computer.
  2709.  
  2710.  
  2711. Windows 95 extender 11003  First showing up in WB 98A
  2712.  
  2713.   The following functions have been renamed and moved to the new Windows
  2714.   95/RADMIN (remote administration for Windows NT) extender.  The existing
  2715.   functions will continue to work in this version, but may be removed or
  2716.   modified in future versions.  Note that some of the parameters in the new
  2717.   DLL have been changed (specifically, a "group-type" parameter has been
  2718.   added to the w95ListGroups and w95Member[..] functions).  Refer to the
  2719.   help file for the new extender for further information.
  2720.  
  2721.     Old name        New name
  2722.     -------------   -------------
  2723.     w95ListGroups   w9xListGroups
  2724.     w95MemberDel    w9xMemberDel
  2725.     w95MemberGet    w9xMemberGet
  2726.     w95MemberGrps   w9xMemberGrps
  2727.     w95MemberList   w9xMemberList
  2728.     w95MemberSet    w9xMemberSet
  2729.     w95ServiceAt    w9xServiceAt
  2730.     w95UserInfo     w9xUserInfo
  2731.  
  2732.   New functions:
  2733.  
  2734.     w95ServerType(s:server-name)
  2735.       Returns a server's platform.
  2736.  
  2737.         "server-name" is the UNC name of a server (eg, "\\SERVER1"), or a
  2738.         blank string ("") to indicate the local machine.
  2739.  
  2740.       Returns one of the following values:
  2741.  
  2742.         Value  Meaning
  2743.         -----  -------
  2744.           0    Invalid server name
  2745.           1    Other
  2746.           2    Windows for Workgroups
  2747.           3    Windows 95 or later
  2748.           4    Windows NT
  2749.  
  2750.     w95ServiceInf(s:server-name)
  2751.       Returns a server's type.
  2752.  
  2753.         "server-name" is the UNC name of a server (eg, "\\SERVER1"), or a
  2754.         blank string ("") to indicate the local machine.
  2755.  
  2756.       Returns a bitmask indicating the type of server, or 0 on error.  The
  2757.       individual flag bits in the bitmask can be extracted using the binary
  2758.       AND ("&") operator.
  2759.  
  2760.       See the "server-type" parameter in w95ServiceAt for a list of flag bits.
  2761.  
  2762.   w95ShareAdd now creates persistent shares (ie, they do not disappear when
  2763.   you reboot).
  2764.  
  2765.  
  2766. Windows NT extender 11005  First showing up in WB 98A
  2767.  
  2768.   New functions:
  2769.  
  2770.     wntUserProps(s:server-name, s:user-name, i:request)
  2771.       Returns information about a network user.
  2772.  
  2773.         "server-name" is the name of the server on which the function will
  2774.         execute, or a blank string ("") to indicate the current machine.
  2775.  
  2776.         "user-name" is the name of a user who has an account on "server-name".
  2777.  
  2778.         "request" specifies the information to be returned, and can be one
  2779.         of the following:
  2780.  
  2781.           Value  Returns
  2782.           -----  -------
  2783.             0    Username
  2784.             1    Full name
  2785.             2    Description
  2786.             3    User profile path
  2787.             4    Login script name
  2788.             5    Home directory
  2789.             6    Home directory logon drive
  2790.             7    Privilege level ("GUEST", "USER", or "ADMIN")
  2791.  
  2792.       Returns a string.
  2793.  
  2794.     wntServerList(s:server-name, s:domain-name, i:server-type)
  2795.       Lists servers in a domain.
  2796.  
  2797.         See wntServiceAt for parameter information.
  2798.  
  2799.         Returns a tab-delimited list of server UNC names (eg, "\\MYSERVER").
  2800.  
  2801.     wntUserAdd(s:server-name)
  2802.       Adds a user account.
  2803.  
  2804.         "server-name" is the UNC name of the server on which the function
  2805.         will execute (eg, "\\MYSERVER"), or "" for the local computer.
  2806.  
  2807.         Before calling this function, you must use wntUserAddDat to set
  2808.         parameters for the new user account.  At a minimum, you must set the
  2809.         "name" element.  The other elements will receive default values.
  2810.  
  2811.         Calling this function does not reset elements in the user parameter
  2812.         structure.  So, you can set various elements, add a user, then change
  2813.         just the "name" element and add another user.  All other elements
  2814.         will retain their previous values.  To clear all elements, call
  2815.         wntUserAddDat specifying blank strings for "variable" and "value".
  2816.  
  2817.       Example:
  2818.         wntUserAddDat("name", "jdoe")
  2819.         wntUserAddDat("full_name", "John Doe")
  2820.         wntUserAdd("")
  2821.  
  2822.       Returns 1.
  2823.  
  2824.     wntUserAddDat(s:element, s/i:value)
  2825.       Sets parameter information for wntUserAdd.
  2826.  
  2827.       This function sets values for elements in a user parameter structure,
  2828.       which is used by the wntUserAdd function.
  2829.  
  2830.       "element" can be one of the following elements in the structure.  Its
  2831.       type (string or integer) is shown in parentheses, followed by a
  2832.       description of its corresponding "value":
  2833.  
  2834.         "name" (s):
  2835.  
  2836.           Specifies the name of the user account.  The number of characters in
  2837.           the name cannot exceed 256.
  2838.  
  2839.         "password" (s):
  2840.  
  2841.           The password for the user specified in the "name" element.  The length
  2842.           cannot exceed 256 bytes.  By convention, Windows NT limits the length
  2843.           of passwords to 14 characters.  This convention allows LAN Manager,
  2844.           Windows 3.x, Windows for Workgroups 3.x, and Windows 95 clients to
  2845.           access a Windows NT server using the account.
  2846.  
  2847.         "home_dir" (s):
  2848.  
  2849.           Points to a string containing the path of the home directory of the
  2850.           user specified in "user_name".  The string can be null.
  2851.  
  2852.         "comment" (s):
  2853.  
  2854.           Points to a string that contains a comment.  The string can be a null
  2855.           string, or it can have any number of characters before the
  2856.           terminating null character.
  2857.  
  2858.         "flags" (i):
  2859.  
  2860.           Contains values that determine several features.  This element can be
  2861.           any of the following values:
  2862.  
  2863.             Value  Name                          Meaning
  2864.             -----  ----                          -------
  2865.                 2  UF_ACCOUNTDISABLE             The user's account is disabled.
  2866.                 8  UF_HOMEDIR_REQUIRED           The home directory is required.  This value is
  2867.                                                  ignored in Windows NT.
  2868.                16  UF_LOCKOUT                    The account is currently locked out.
  2869.                32  UF_PASSWRD_NOTREQD            No password is required.
  2870.                64  UF_PASSWRD_CANT_CHANGE        The user cannot change the password.
  2871.  
  2872.           The following values describe the account type.  Only one value can be set.
  2873.  
  2874.             Value  Name                          Meaning
  2875.             -----  ----                          -------
  2876.               256  UF_TEMP_DUPLICATE_ACCOUNT     This is an account for users whose primary
  2877.                                                  account is in another domain.  This
  2878.                                                  account provides user access to this
  2879.                                                  domain, but not to any domain that trusts
  2880.                                                  this domain.  The User Manager refers to
  2881.                                                  this account type as a local user account.
  2882.               512  UF_NORMAL_ACCOUNT             This is a default account type that
  2883.                                                  represents a typical user.
  2884.              2048  UF_INTERDOMAIN_TRUST_ACCOUNT  This is a permit to trust account for a
  2885.                                                  Windows NT domain that trusts other
  2886.                                                  domains.
  2887.              4096  UF_WORKSTATION_TRUST_ACCOUNT  This is a computer account for a Windows
  2888.                                                  NT Workstation or Windows NT Server that
  2889.                                                  is a member of this domain.
  2890.              8192  UF_SERVER_TRUST_ACCOUNT       This is a computer account for a Windows
  2891.                                                  NT Backup Domain Controller that is a
  2892.                                                  member of this domain.
  2893.  
  2894.         "script_path" (s):
  2895.  
  2896.           Points to a string specifying the path of the user's logon script,
  2897.           .CMD, .EXE, or .BAT file.  The string can be null.
  2898.  
  2899.         "full_name" (s):
  2900.  
  2901.           Points to a string that contains the full name of the user.  This
  2902.           string can be a null string, or it can have any number of characters
  2903.           before the terminating null character.
  2904.  
  2905.         "usr_comment" (s):
  2906.  
  2907.           Points to a string that contains a user comment.  This string can be
  2908.           a null string, or it can have any number of characters before the
  2909.           terminating null character.
  2910.  
  2911.         "workstations" (s):
  2912.  
  2913.           Points to a string that contains the names of workstations from which
  2914.           the user can log on.  As many as eight workstations can be specified;
  2915.           the names must be separated by commas (,).  If you do not want to
  2916.           restrict the number of workstations, use a null string.  To disable
  2917.           logons from all workstations to this account, set the
  2918.           UF_ACCOUNTDISABLE (2) value in the "flags" element.
  2919.  
  2920.         "acct_expires" (i):
  2921.  
  2922.           Specifies when the account will expire.  This value is stored as the
  2923.           number of seconds elapsed since 00:00:00, January 1, 1970.  A value
  2924.           of -1 indicates that the account never expires.
  2925.  
  2926.         "max_storage" (i):
  2927.  
  2928.           Specifies the maximum amount of disk space the user can use.  Use -1
  2929.           to use all available disk space.
  2930.  
  2931.         "logon_hours" (s):
  2932.  
  2933.           This is a 42-byte string that specifies the times during which the
  2934.           user can log on.  Each byte is a hexadecimal character ('0' - 'F')
  2935.           which represents 4 bits of a 168-bit string.  Each bit represents
  2936.           a unique hour in the week.  The first bit is Sunday, 0:00 to 0:59;
  2937.           the second bit is Sunday, 1:00 to 1:59; and so on.  Specify a blank
  2938.           string ("") to indicate that there is no time restriction.
  2939.  
  2940.           Note: Bit 0 represents Sunday from 0:00 to 0:59 only if you are in
  2941.           the GMT time zone.  In all other cases you must adjust the bits
  2942.           according to your time zone offset (for example, GMT minus 8 hours
  2943.           for PST).
  2944.  
  2945.         "country_code" (i):
  2946.  
  2947.           Specifies the country code for the user's language of choice.
  2948.  
  2949.         "code_page" (i):
  2950.  
  2951.           Specifies the code page for the user's language of choice.
  2952.  
  2953.         "profile" (s):
  2954.  
  2955.           Specifies a path to the user's profile.  This value can be a null
  2956.           string, a local absolute path, or a UNC path.
  2957.  
  2958.         "home_dir_drive" (s):
  2959.  
  2960.           Specifies the drive letter assigned to the user's home directory for
  2961.           logon purposes.
  2962.  
  2963.         "password_expired" (i):
  2964.  
  2965.           Determines whether the password of the user has expired.  Specify
  2966.           nonzero to indicate that the user must change password at next logon.
  2967.  
  2968.       If "variable" and "value" are both set to blank strings (""), all
  2969.       values will be cleared from the user parameter structure.
  2970.  
  2971.       You can specify a value of "*NULL*" to set a string element to a NULL
  2972.       pointer, which is not the same as a NULL string ("").
  2973.  
  2974.       Returns @TRUE on success, @FALSE if there was a problem.
  2975.  
  2976.     wntUserDel(server-name, user-name)
  2977.       Deletes a user account.
  2978.  
  2979.         "server-name" is the UNC name of the server on which the function
  2980.         will execute (eg, "\\MYSERVER"), or "" for the local computer.
  2981.  
  2982.         "user-name" is the name of the user to be deleted.
  2983.  
  2984.       Returns 1.
  2985.  
  2986.     wntServerType(s:server-name)
  2987.       Returns a server's platform.
  2988.  
  2989.         "server-name" is the UNC name of a server (eg, "\\SERVER1"), or a
  2990.         blank string ("") to indicate the local machine.
  2991.  
  2992.       Returns one of the following values:
  2993.  
  2994.         Value  Meaning
  2995.         -----  -------
  2996.           0    Invalid server name
  2997.           1    Other
  2998.           2    Windows for Workgroups
  2999.           3    Windows 95 or later
  3000.           4    Windows NT
  3001.  
  3002.     wntServiceInf(s:server-name)
  3003.       Returns a server's type.
  3004.  
  3005.         "server-name" is the UNC name of a server (eg, "\\SERVER1"), or a
  3006.         blank string ("") to indicate the local machine.
  3007.  
  3008.       Returns a bitmask indicating the type of server, or 0 on error.  The
  3009.       individual flag bits in the bitmask can be extracted using the binary
  3010.       AND ("&") operator.
  3011.  
  3012.       See the "server-type" parameter in wntServiceAt for a list of flag bits.
  3013.  
  3014.     wntUserGetDat(s:server-name, s:user-name, s:element)
  3015.       Returns parameter information for a user account.
  3016.  
  3017.         "server-name" is the UNC name of the server on which the function
  3018.         will execute (eg, "\\MYSERVER"), or "" for the local computer.
  3019.  
  3020.         "user-name" is the name of a user who has an account on "server-name".
  3021.  
  3022.         "element" specifies the element to be returned.  See wntUserAddDat
  3023.         for a list of valid elements.
  3024.  
  3025.       Returns a string or integer value, depending on "element".
  3026.  
  3027.     wntUserSetDat(s:server-name, s:user-name, s:element, s/i:value)
  3028.       Modifies parameter information for a user account.
  3029.  
  3030.         "server-name" is the UNC name of the server on which the function
  3031.         will execute (eg, "\\MYSERVER"), or "" for the local computer.
  3032.  
  3033.         "user-name" is the name of a user who has an account on "server-name".
  3034.  
  3035.         "element" specifies the element to be modified.  See wntUserAddDat
  3036.         for a list of valid elements.
  3037.  
  3038.         "value" specifies the new value to be assigned to "element".  See
  3039.         wntUserAddDat for more information.
  3040.  
  3041.       Returns @TRUE on success, @FALSE if there was a problem.
  3042.  
  3043.     wntUserRename(s:server-name, s:old-username, s:new-username)
  3044.       Renames a user account.
  3045.  
  3046.         "server-name" is the UNC name of the server on which the function
  3047.         will execute (eg, "\\MYSERVER"), or "" for the local computer.
  3048.  
  3049.         "old-username" is an existing account name.
  3050.  
  3051.         "new-username" is the new name to be given to the account.
  3052.  
  3053.       Returns @TRUE on success, @FALSE if there was a problem.
  3054.  
  3055.   In wntAccessAdd and wntAccessDel, added additional values for "object-type":
  3056.  
  3057.           301  directory in an NTFS partition, and all its subdirectories
  3058.           302  directory in an NTFS partition, and all files in the directory
  3059.           303  directory in an NTFS partition, and all its subdirectories, and
  3060.                all files in the directory and all its subdirectories
  3061.           401  registry key, and all its subkeys
  3062.  
  3063.   wntFileClose now closes all connections to a file, instead of just the
  3064.   first one.  It also now returns the number of connections which existed
  3065.   (and were closed) for the specified file.
  3066.  
  3067.   wntChgPswd can now be used to specify a new password without knowing the
  3068.   old password, if you are a member of the Administrators or Account
  3069.   Operators local group.  To do this, specify "*UNKNOWN*" as the old
  3070.   password.  In this case, the "user" parameter must specify an actual user
  3071.   name (ie, it cannot be a blank string).
  3072.  
  3073.  
  3074. Windows 32 extender 11001  First showing up in WB 98A
  3075.  
  3076.  
  3077. NetWare 3 extender 12021  First showing up in WB 98A
  3078.  
  3079.  
  3080. NetWare 4 extender 14019  First showing up in WB 98A
  3081.  
  3082.   New function:
  3083.  
  3084.     n4SetContext(s:context, s:tree)
  3085.       Changes the current user's default context and/or tree.
  3086.  
  3087.         "context" is a Directory Services context to be set.  If this
  3088.         parameter is a blank string (""), the context will not be changed.
  3089.  
  3090.         "tree" is a Directory Services tree to be set.  If this parameter is
  3091.         a blank string (""), the tree will not be changed.
  3092.  
  3093.           Note: the "tree" parameter is available only in the 32-bit version,
  3094.           and is ignored in the 16-bit version.
  3095.  
  3096.       This function changes the NetWare context and/or tree that is used by
  3097.       subsequent function calls from this extender (for those functions
  3098.       which do not take an explict "context" or "tree" parameter).
  3099.  
  3100.       Returns 1.
  3101.  
  3102.   n4ObjectProps now supports integer values, and some (but not all) other
  3103.   non-string value types.  Unsupported types will now be returned as blank
  3104.   strings ("").
  3105.  
  3106.  
  3107. WB 98B  Jun 24, 1998
  3108.  
  3109.   The compiler now allows you to embed the WinBatch OLE support DLL when
  3110.   compiling a large EXE (select "Ole 2.0 Automation Extender" from the
  3111.   "Extenders" dialog box).
  3112.  
  3113.   In 32-bit version, the compiler now allows you to specify a tech support
  3114.   URL (web page) to be used if an error occurs in the script (under
  3115.   "Settings").  This can be overridden using IntControl(50).
  3116.  
  3117.   In 32-bit version, the compiler now allows you to specify version
  3118.   information strings to be embedded in the EXE (under "Version Info").
  3119.  
  3120.   The compiler now creates a configuration file for each source file you
  3121.   compile.  It will be placed in the same directory as the source file, and
  3122.   will have the same base name with an extension of ".CMP".  For example, if
  3123.   you compile "C:\UTIL\TEST.WBT", it will create a configuration file named
  3124.   "C:\UTIL\TEST.CMP".
  3125.  
  3126.   The compiler now allows you to specify additional files to be embedded in
  3127.   a large EXE (under "Other files").
  3128.  
  3129.   The compiler no longer supports automatic batch mode.  If you run it with
  3130.   command-line parameters, it will bring up the interactive interface with
  3131.   the specified source file and output type pre-selected.
  3132.  
  3133.   The ".DAT" file format for extenders to be embedded by the compiler has
  3134.   changed.  The new format is a text file with the first line being the
  3135.   description of the file, and one or more additional lines listing files
  3136.   to be embedded.  The files may contain a full path; if a file doesn't have
  3137.   path information, the compiler will look for it first in the compiler
  3138.   directory, then on the path.  For example:
  3139.  
  3140.       Novell NetWare 4.x
  3141.       wwn4z32i.dll
  3142.       wwn4z16i.dll
  3143.  
  3144.     For backwards compatability, the second line of the .DAT file may contain
  3145.     a list of files, delimited by commas.
  3146.  
  3147.   In 32-bit version, the compiler now supports embedded file names longer than
  3148.   16 characters, and no longer converts embedded file names to upper case.
  3149.  
  3150.   In 32-bit version, the compiler now has an option to have the script run
  3151.   hidden (under "Settings").
  3152.  
  3153.   Changed BoxNew so that if you create a new box which covers or overlaps an
  3154.   existing box, the most recently created box will be on top.
  3155.  
  3156.  
  3157. DLL 2.5bbq  First showing up in WB 98B
  3158.  
  3159.   New functions:
  3160.  
  3161.     BinaryTagInit(i:buffer, s:start-tag, s:end-tag)
  3162.       Initializes a binary tag operation.
  3163.  
  3164.         Returns a binary tag structure string, or "" on failure.
  3165.  
  3166.     BinaryTagFind(s:tag-struct)
  3167.       Finds the next binary tag.
  3168.  
  3169.         Returns a binary tag structure string, or "" on failure.
  3170.  
  3171.     BinaryTagExtr(s:tag-struct, i:flags)
  3172.       Returns the text between the last-returned pair of binary tags.
  3173.  
  3174.         Flags  Meaning
  3175.         -----  -------
  3176.           1    Strip out tabs, carriage returns, and line feeds.
  3177.  
  3178.         Returns the text, or "" on failure.
  3179.  
  3180.     BinaryTagRepl(s:tag-struct, s:new-string)
  3181.       Replaces a binary tag with text.
  3182.  
  3183.         Returns a binary tag structure string, or "" on failure.
  3184.  
  3185.     BinaryIndexEx(handle, offset, string, direction, i:match-case)
  3186.       Searches a buffer for a string.
  3187.  
  3188.         This function is almost the same as BinaryIndex (if "match-case" =
  3189.         FALSE) and BinaryIndexNc (if "match-case" = TRUE).  The one
  3190.         difference: if the specified string is not found, this function
  3191.         returns -1 (unlike those other functions, which return 0).
  3192.  
  3193.     ItemSortNc(list, delimiter)
  3194.       Sorts a list, ignoring case.
  3195.  
  3196.         This function is the same as ItemSort, but is not case sensitive.
  3197.  
  3198.  
  3199.   In 32-bit version of FileVerInfo, if you specify a blank string for
  3200.   "language-key", it will try to look up the item under the following
  3201.   language keys, in the specified order:
  3202.  
  3203.     Language-key     Language       Character Set
  3204.     ------------     --------       -------------
  3205.       040904E4       U.S. English   Windows Multilingual
  3206.       040904B0       U.S. English   Unicode
  3207.       000004E4       Neutral        Windows Multilingual
  3208.       04090000       U.S. English   Neutral
  3209.       00000000       Neutral        Neutral
  3210.  
  3211.   In 32-bit version, changed method for converting floating point numbers to
  3212.   strings.  The new method should produce fewer anomolies, but in some cases
  3213.   the results will be slightly different than the previous method.
  3214.  
  3215.   Fixed problem with BinaryPokeStr letting you store a string that was one
  3216.   byte larger than the size of the buffer.
  3217.  
  3218.   Fixed problem with BinaryIndex and BinaryIndexNc failing if the string was
  3219.   found at the very end of the text in the buffer (ie, right before the EOD).
  3220.  
  3221.   WinActivate no longer resets a window's "stay-on-top" attribute.
  3222.  
  3223.   Fixed a problem in dialog boxes, where pressing the "Enter" key would
  3224.   sometimes select the "OK' button instead of the highlighted pushbutton.
  3225.  
  3226.   Fixed a problem with OLE calls causing a 3130 error if they were supposed to
  3227.   return an object handle, but the function call failed (ie, returned 0), and
  3228.   the return value was not assigned to a WIL variable in the script.
  3229.  
  3230.   The built-in variables "param1" through "param9" are now correctly undefined
  3231.   for parameters which are not passed, when making multiple Call's.
  3232.  
  3233.   Added 2 additional activation methods to IntControl(61) and IntControl(62):
  3234.  
  3235.     P1   Method to use
  3236.     --   -------------
  3237.      3   Change foreground lock timeout.
  3238.      4   Attach to the input thread of the foreground window.
  3239.  
  3240.     Changed the default method in Windows 98 and NT 5.0 to "3".
  3241.  
  3242.   AskDirectory now handles "start-dir" having a trailing backslash.
  3243.  
  3244.  
  3245. NetWare 3 extender 12022  First showing up in WB 98B
  3246.  
  3247.   New functions:
  3248.  
  3249.     n3FileTimeGet(s:filename, i:time-field)
  3250.       Gets Netware time information for a file.
  3251.  
  3252.         "filename" must specify a single file name (no wildcards).
  3253.  
  3254.         "time-field" can be one of the following:
  3255.  
  3256.           1  file created
  3257.           2  file last modified
  3258.           3  file last accessed
  3259.           4  file last archived
  3260.  
  3261.       Returns the requested file time in YmdHms format (with a 4-digit
  3262.       year), or a blank string ("") if the requested time field is not set.
  3263.  
  3264.     n3DirTimeGet(s:dirname, i:time-field)
  3265.       Gets Netware time information for a directory.
  3266.  
  3267.         "dirname" must specify a single directory name (no wildcards).
  3268.  
  3269.         "time-field" can be one of the following:
  3270.  
  3271.           1  directory created
  3272.           2  directory last modified
  3273.           3  --- (not used)
  3274.           4  directory last archived
  3275.  
  3276.       Returns the requested directory time in YmdHms format (with a 4-digit
  3277.       year), or a blank string ("") if the requested time field is not set.
  3278.  
  3279.  
  3280. NetWare 4 extender 14020  First showing up in WB 98B
  3281.  
  3282.   New functions:
  3283.  
  3284.     n4FileTimeGet(s:filename, i:time-field)
  3285.       Gets Netware time information for a file.
  3286.  
  3287.         "filename" must specify a single file name (no wildcards).
  3288.  
  3289.         "time-field" can be one of the following:
  3290.  
  3291.           1  file created
  3292.           2  file last modified
  3293.           3  file last accessed
  3294.           4  file last archived
  3295.  
  3296.       Returns the requested file time in YmdHms format (with a 4-digit
  3297.       year), or a blank string ("") if the requested time field is not set.
  3298.  
  3299.     n4DirTimeGet(s:dirname, i:time-field)
  3300.       Gets Netware time information for a directory.
  3301.  
  3302.         "dirname" must specify a single directory name (no wildcards).
  3303.  
  3304.         "time-field" can be one of the following:
  3305.  
  3306.           1  directory created
  3307.           2  directory last modified
  3308.           3  --- (not used)
  3309.           4  directory last archived
  3310.  
  3311.       Returns the requested directory time in YmdHms format (with a 4-digit
  3312.       year), or a blank string ("") if the requested time field is not set.
  3313.  
  3314.   Fixed problem with n4MemberSet not completely adding the user to the group.
  3315.  
  3316.   Fixed problem with n4MemberDel deleting all members in the specified group.
  3317.  
  3318.  
  3319. WB 98C  Sep 18, 1998
  3320.  
  3321.   New IntControl:
  3322.  
  3323.     IntControl(1007, p1, p2, p3, p4) (32-bit only) (Requires Windows 95+ or NT 4.0+)
  3324.       Add/remove/check tray icon.
  3325.  
  3326.         p1   Meaning
  3327.         --   -------
  3328.          0   Check whether tray icon has been clicked (and reset "clicked" state)
  3329.          1   Add currently-running script to the system tray
  3330.          2   Remove currently-running script from the system tray
  3331.  
  3332.         If p1 == 1 (add icon), then p2 can be one or more of the following
  3333.         flags, combined with the binary OR ("|") operator:
  3334.  
  3335.         p2   Meaning
  3336.         --   -------
  3337.          1   Hide regular WinBatch icon while the icon is in the system tray
  3338.          2   Suspend script until user clicks on the tray icon
  3339.  
  3340.         p3 = Tool tip (ie, string that is displayed when the mouse passes
  3341.              over the tray icon), or "" for none.
  3342.  
  3343.         p4 = Icon file, or "" for the default icon.  If a file name is
  3344.              specified, it can be a .ICO file, or an .EXE or .DLL (or similar
  3345.              resource file) containing icons.  If it is a resource containing
  3346.              multiple icons, by default the first icon in the file is used.
  3347.              You can specify a different icon using the following format:
  3348.  
  3349.                "filename|#"
  3350.  
  3351.              where "filename" is the name of the file, followed by a vertical
  3352.              bar and then the offset of the desired icon in the file ("#").
  3353.              The first icon in a file has an offset of 0.  If an invalid icon
  3354.              file is specified, the default icon will be used.
  3355.  
  3356.         If the "suspend script" flag is specified in p2, then the WinBatch
  3357.         script will be suspended until the user clicks on the tray icon, at
  3358.         which point the script will continue, and this function will return
  3359.         one of the click valuess listed below.  Otherwise, the WinBatch
  3360.         script will continue running, and you can periodically check to see
  3361.         whether the user has clicked on the tray icon by calling this
  3362.         function with p1 == 0.
  3363.  
  3364.         When called with p1 == 0 (or when returning from being suspended),
  3365.         this function will return one of the following values:
  3366.  
  3367.           Value   Meaning
  3368.           -----   -------
  3369.             0     Not clicked
  3370.             1     Left click
  3371.             2     Right click
  3372.  
  3373.         Each time you call this function with p1 == 0, the "click state"
  3374.         will be reset to 0 (not clicked).
  3375.  
  3376.       Returns @TRUE (success) or @FALSE (failure), or a click value.
  3377.  
  3378.         Example:
  3379.           IntControl(1007, 1, 2, "Click me!", "shell32.dll|41")
  3380.  
  3381.   Fixed problem with compiler displaying an "Uninitialized variable" error if
  3382.   certain options were chosen, and there was no "LastSource=" setting in the
  3383.   compiler section of WWW-PROD.INI (which would have been the case if this
  3384.   was the first time the compiler was run).
  3385.  
  3386.   The #include directive will now also look for the specified file (if it
  3387.   does not contain path information) in the same directory as the script
  3388.   file being run or compiled
  3389.  
  3390.   Fixed problem with the compiler always using ".EXE" as the extension when
  3391.   reloading previous configurations, even when the output was a .WBC file.
  3392.  
  3393.  
  3394. DLL 2.5cbq  First showing up in WB 98C
  3395.  
  3396.   New Functions:
  3397.  
  3398.     FileCopyAttr(source-list, destination, warning, s:attributes)
  3399.       Copies files, and sets file attributes.
  3400.  
  3401.         This function is like FileCopy, but takes an additional parameter
  3402.         which lets you specify the file attributes for the destination files.
  3403.         It is equivalent to doing a FileCopy, followed by a FileAttrSet.
  3404.  
  3405.         If "attributes" is a blank string (""), the destination file(s) will
  3406.         inherit the same attributes as the corresponding source file(s).  You
  3407.         only need to specify those attributes which you want to be changed.
  3408.  
  3409.         See FileCopy and FileAttrSet for additional information.
  3410.  
  3411.     FileMoveAttr(source-list, destination, warning, s:attributes)
  3412.       Moves files, and sets file attributes.
  3413.  
  3414.         This function is like FileMove, but takes an additional parameter
  3415.         which lets you specify the file attributes for the destination files.
  3416.         It is equivalent to doing a FileMove, followed by a FileAttrSet.
  3417.  
  3418.         If "attributes" is a blank string (""), the destination file(s) will
  3419.         inherit the same attributes as the corresponding source file(s).  You
  3420.         only need to specify those attributes which you want to be changed.
  3421.  
  3422.         See FileMove and FileAttrSet for additional information.
  3423.  
  3424.     TimeDiff(s:time-value-1, s:time-value-2)
  3425.       Returns the difference between two points in time.
  3426.  
  3427.         "time-value-1" and "time-value-2" must be valid date-time strings,
  3428.         in YmdHms format.  "time-value-1" must be the later (more recent) of
  3429.         the two times.
  3430.  
  3431.         Returns the difference between the two times, in YmdHms format.
  3432.  
  3433.         Because some months have more days than others, an adjustment may
  3434.         need to be made when converting the resulting "day" field into
  3435.         months.  In the example:
  3436.  
  3437.           TimeDiff("1998:09:30:00:00:00", "1998:08:31:00:00:00")
  3438.  
  3439.         the result is, logically, "0000:00:30:00:00:00" (30 days).  But in
  3440.         this example:
  3441.  
  3442.           TimeDiff("1998:10:01:00:00:00", "1998:08:31:00:00:00")
  3443.  
  3444.         where the operation wraps past the end of the month, there is some
  3445.         question what the result should be, since there is no such date as
  3446.         September 31.  This function handles this by treating the period
  3447.         from August 31 to September 30 as one month, so the result would be
  3448.         "0000:01:01:00:00:00" (one month and one day).
  3449.  
  3450.         Example:
  3451.           ; How long has it been since the beginning of the decade
  3452.           diff = TimeDiff(TimeYmdHms(), "1990:01:01:00:00:00")
  3453.  
  3454.   New IntControls:
  3455.  
  3456.     IntControl(63, p1, p2, p3, p4)
  3457.       Sets coordinates for AskFileText and AskItemList windows.
  3458.  
  3459.         This function sets the window coordinates for the dialog displayed
  3460.         by the next AskFileText or AskItemList function call.  The coordinates
  3461.         will be reset to default values after the Ask[..] function is called.
  3462.  
  3463.         Coordinates are based on a virtual 1000 x 1000 screen:
  3464.  
  3465.           p1  =  left   (upper-x)
  3466.           p2  =  top    (upper-y)
  3467.           p3  =  right  (lower-x)
  3468.           p4  =  bottom (lower-y)
  3469.  
  3470.         To explicitly indicate that default values should be used, use:
  3471.  
  3472.           IntControl(63, 0, 0, 0, 0)
  3473.  
  3474.       Returns 1.
  3475.  
  3476.     IntControl(64, 0, 0, 0, 0) (32-bit only)
  3477.       Gets the exit code returned by the last program run.
  3478.  
  3479.         This function gets the exit code (also known as the "errorlevel")
  3480.         that was returned by the program that was most-recently run using
  3481.         RunWait (or using RunShell with the @WAIT flag specified).  If no
  3482.         program has been run, or if the last-run program was not run in
  3483.         @WAIT mode, this function will return 99999.
  3484.  
  3485.   The windows displayed by AskFileText and AskItemList can now be resized
  3486.   by the user.
  3487.  
  3488.   In 32-bit version, the "Tile" parameter of the Wallpaper() function has a
  3489.   new option:
  3490.  
  3491.       2  =  Stretch
  3492.  
  3493.     This is available in Windows 98, and in Windows 95 with "Plus" installed.
  3494.  
  3495.   Fixed a problem in dialog boxes, where pressing a hotkey corresponding to
  3496.   the "OK" button (ie, the pushbutton with a value of 1) would select the
  3497.   highlighted pushbutton instead, if the highlighted pushbutton was the
  3498.   first control in the dialog and the focus had not previously been switched
  3499.   away from it.
  3500.  
  3501.   In 32-bit version, fixed problems with floating point to string conversions.
  3502.  
  3503.   Fixed problem (again) with TimeSubtract, where the result could have a day
  3504.   of "00" (eg, "96:04:00" instead of "96:03:31").
  3505.  
  3506.   The existing documentation is not clear on the purpose or usage of the
  3507.   TimeSubtract function.  TimeSubtract is designed to subtract a
  3508.   time-difference from a time-value:
  3509.  
  3510.     TimeSubtract(s:time-value, s:time-difference)
  3511.  
  3512.       "time-value" is a valid date-time string, in YmdHms format.
  3513.  
  3514.       "time-difference" is an amount of time to be subtracted from
  3515.       "time-value", in YmdHms format.
  3516.  
  3517.       The result is a time string in YmdHms format.
  3518.  
  3519.       Examples:
  3520.  
  3521.         ; Subtract 1 day from 9/1/98 (at midnight)
  3522.         TimeSubtract("1998:09:01:00:00:00", "00:00:01:00:00:00")
  3523.  
  3524.         ; Subtract 48 hours from the current time
  3525.         TimeSubtract(TimeYmdHms(), "00:00:00:48:00:00")
  3526.  
  3527.     TimeSubtract is NOT designed to determine the difference between two
  3528.     points in time.  For that, use TimeDiffDays, TimeDiffSecs, or the new
  3529.     TimeDiff function (above).
  3530.  
  3531.     Adjusted the way TimeAdd and TimeSubtract deal with cases where you are
  3532.     adding or subtracting a certain number of months, and the result would
  3533.     be an invalid date.  For example:
  3534.  
  3535.         TimeAdd("1998:08:31:00:00:00", "00:01:00:00:00:00")
  3536.  
  3537.       Here, you are asking to add one month to August 31, but there are only
  3538.       30 days in September and therefore there is no September 31.  In previous
  3539.       versions, the result would have been October 1 (ie, there are 31 days in
  3540.       August, so add 31 days).  In this new version, it will no longer wrap the
  3541.       month add/subtract operation past the end of a month, so the result will
  3542.       now be September 30.  Similarly, in this example:
  3543.  
  3544.         TimeSubtract("1998:10:31:00:00:00", "00:01:01:00:00:00")
  3545.  
  3546.       which subtracts one month and one day from October 31, the result will
  3547.       now be September 29, not September 30.  That is to say, it first
  3548.       subtracts the month(s), adjusts the result to the last day of the month
  3549.       if necessary, and then subtracts the day(s) (and hours, minutes, seconds).
  3550.  
  3551.     In 32-bit version, added an additional option to IntControl(28):
  3552.  
  3553.       2  =  GUI font (Windows 95+ and NT 4.0+ only)
  3554.  
  3555.         Note that this option applies to AskLine (and AskPassword), as well
  3556.         as to AskFileText and AskItemList.
  3557.  
  3558.     BinaryClipGet now stops reading clipboard data at the first NULL
  3559.     character for text format types (1, 7, and 13).
  3560.  
  3561.     BinaryClipPut now adds a NULL terminator to the data being written to
  3562.     the clipboard for text format types (1, 7, and 13).
  3563.  
  3564.  
  3565. Windows NT extender 11006  First showing up in WB 98C
  3566.  
  3567.   New functions:
  3568.  
  3569.     wntRasUserGet(s:server-name, s:user-name, i:request)
  3570.       Gets RAS information for a user.
  3571.  
  3572.         "server-name" is the UNC name of the primary or backup domain
  3573.         controller that has the user account database (eg, "\\MYSERVER").
  3574.         If the machine on which the user account resides is a standalone
  3575.         NT workstation or server, you can specify the UNC name of that
  3576.         machine, or "" for the local computer.
  3577.  
  3578.         "user-name" is the name of a user.
  3579.  
  3580.         "request" specifies the information to be returned, and can be one
  3581.         of the following:
  3582.  
  3583.           Value  Returns
  3584.           -----  -------
  3585.             1    (i) Dial-in privilege
  3586.             2    (s) Callback phone number
  3587.  
  3588.           Dial-in privilege specifies both the dialin permission and the
  3589.           callback mode, and will be one of the following values:
  3590.  
  3591.             Value  Meaning
  3592.             -----  -------
  3593.                1   No dial-in permission / No callback privilege
  3594.                2   No dial-in permission / Callback number preset by administrator
  3595.                4   No dial-in permission / Callback number specified by caller
  3596.                9   Dial-in permission    / No callback privilege
  3597.               10   Dial-in permission    / Callback number preset by administrator
  3598.               12   Dial-in permission    / Callback number specified by caller
  3599.  
  3600.     wntRasUserSet(s:server-name, s:user-name, i:privilege, s:phone-number)
  3601.       Sets RAS information for a user.
  3602.  
  3603.         "phone-number" specifies an administrator-preset callback phone
  3604.         number, if appropriate.  You can specify a blank string ("") to
  3605.         leave the currently-set number (if any) unchanged.
  3606.  
  3607.         See wntRasUserGet for additional information.
  3608.  
  3609.         Returns 1.
  3610.  
  3611.     wntRunAsUser(s:domain/server, s:user-name, s:password, i:login-type, i:flags)
  3612.       Run as a different user.
  3613.  
  3614.         "domain/server" is the name of the domain or server on which the
  3615.         specified user account resides, or "." to indicate that the local
  3616.         account database should be searched for the user, or "" to indicate
  3617.         that the local account database and (then) any trusted domain
  3618.         account databases should be searched for the user.
  3619.  
  3620.         "user-name" is the name of the user to run as.
  3621.  
  3622.         "password" is the specified user's login password.
  3623.  
  3624.         "login-type" can be one of the following:
  3625.  
  3626.           Type   Meaning
  3627.           ----   -------
  3628.             2    Interactive login
  3629.             3    Network login
  3630.             4    Batch login
  3631.             5    Service login
  3632.  
  3633.           Note that the specified user must have the appropriate user rights
  3634.           assigned to be able to log in as a batch job or service.
  3635.  
  3636.         "flags" is currently unused, and should be set to 0.
  3637.  
  3638.       This function causes the specified user to be impersonated only for the
  3639.       duration of the currently-running instance of the WIL Interpreter.
  3640.  
  3641.       In order to use this function, the currently-logged-in user must have the
  3642.       "Act as part of the operating system" user right assigned.  This can be
  3643.       set from the "Policy" menu in the NT User Manager (note that the "Show
  3644.       Advanced User Rights" option in the dialog box must be checked).
  3645.  
  3646.       Returns 1.
  3647.  
  3648.  
  3649. WB 98D  Sep 29, 1998
  3650.  
  3651.   PopMenu now puts double-quotes around the menu file name when launching the
  3652.   editor.
  3653.  
  3654.   PopMenu now attempts to return the focus to the previously-active window after
  3655.   executing a menu item.
  3656.  
  3657.  
  3658. DLL 2.6dbr  First showing up in WB 98D
  3659.  
  3660.   New functions:
  3661.  
  3662.     DebugTrace(i:mode, s:log-file)
  3663.       Outputs debug information to a file.
  3664.  
  3665.         "mode" = @ON or @OFF.  Default is @OFF.
  3666.  
  3667.         "log-file" is the name of the file to which debug information will
  3668.         be appended.
  3669.  
  3670.       When debug trace mode is @ON, each command that is executed is written
  3671.       to the specified log file, along with its return value.
  3672.  
  3673.     WinItemProcID(i:process-id, i:flags, i:return-type)
  3674.       Returns a list of windows for the specified process.
  3675.  
  3676.         This function returns a list of top-level (parent) windows owned by
  3677.         the process specified by "process-id".
  3678.  
  3679.         A process-id can be obtained by launching an application with
  3680.         RunShell and specifying @GETPROCID as the "waitflag" (see below).
  3681.  
  3682.         "flags" can be 0, or one or more of the following values combined
  3683.         with the binary OR ("|") operator:
  3684.  
  3685.           Flag  Meaning
  3686.           ----  -------
  3687.             1   Include windows with blank titles
  3688.             2   Include hidden windows
  3689.             4   Include windows which are not enabled for keyboard and mouse input
  3690.             8   Include windows with the title "WinOldAp"
  3691.  
  3692.         "return-type" specifies the format in which the list of windows will
  3693.         be returned, and can be one of the following:
  3694.  
  3695.           Type  Meaning
  3696.           ----  -------
  3697.             0   Tab-delimited list of window ID's
  3698.             1   Tab-delimited list of window titles
  3699.             2   List of window titles and name ID's in the form:
  3700.                   "window1-name|window1-ID|window2-name|window2-ID|..."
  3701.  
  3702.         Example:
  3703.           procid = RunShell("calc.exe", "", "", @NORMAL, @GETPROCID)
  3704.  
  3705.           If (procid != 0) && (procid != 1)  ; if we got a valid process ID
  3706.             winids = WinItemProcId(procid, 2, 0)
  3707.             Message("Window ID(s)", winids)
  3708.           Endif
  3709.  
  3710.   You can now obtain the process ID of an application that is launched with
  3711.   the RunShell function by specifying @GETPROCID as the "waitflag".  This is
  3712.   the same as specifying @NOWAIT, except that on success the function will
  3713.   return the process ID of the application that was launched.   This process
  3714.   ID can be used with the WinItemProcID function (see above).  The process
  3715.   ID may be a negative number.  If you use RunShell to launch a shortcut to
  3716.   a special (non-executable) shortcut (eg, a dial-up networking item), a
  3717.   process ID cannot be obtained.  Instead, a 1 will be returned to indicate
  3718.   success.  In all cases, a return value of 0 indicates failure.
  3719.  
  3720.   Fixed problem with TimeDiff returning a negative number for the month
  3721.   field, in certain cases.
  3722.  
  3723.   The date string returned by the FileTimeGet function now includes a 4-digit
  3724.   year, if this was configured via Control Panel.
  3725.  
  3726.   In 32-bit version, fixed problem assigning string properties to OLE objects
  3727.   (they weren't being properly converted to Unicode, so looked like gibberish).
  3728.  
  3729.   Fixed problem with NetInfo(1) missing some installed clients under Windows
  3730.   95, in unusual cases.
  3731.  
  3732.   Fixed problem with BinaryIndexEx returning 0 instead of -1, if the string
  3733.   being searched for would extend beyond the limits of the binary buffer.
  3734.  
  3735.  
  3736. Windows NT extender 11007  First showing up in WB 98D
  3737.  
  3738.   New function:
  3739.  
  3740.     wntMemberLst2(server-name, group, group-type)
  3741.       Lists all members of a user group, with domains.
  3742.  
  3743.         This function is the same as wntMemberList, but returns a list of
  3744.         users including their domains, in the form:
  3745.  
  3746.           Domain\User
  3747.  
  3748.     Added new "elements" to wntUserGetDat:
  3749.  
  3750.         "last_logon"  (s):  last logon time, in "YYYY:MM:DD:hh:mm:ss" format
  3751.         "last_logoff" (s):  last logoff time, in "YYYY:MM:DD:hh:mm:ss" format
  3752.  
  3753.           These times are maintained separately on each Backup Domain Controller
  3754.           (BDC) in the domain.  To get an accurate value, each BDC in the
  3755.           domain must be queried, and the largest value is used.
  3756.  
  3757.           The return value will always contain a 4-digit year.  If no value is
  3758.           available, "0000:00:00:00:00:00" is returned.
  3759.  
  3760.         Note: These elements cannot be set using wntUserAddDat or wntUserSetDat.
  3761.  
  3762.     Modified the format of the "acct_expires" element in wntUserAddDat,
  3763.     wntUserGetDat, and wntUserSetDat.  Previously, this was set and returned
  3764.     as an integer representing the number of seconds since 1/1/70.  It has
  3765.     now been changed to a string in "YYYY:MM:DD:hh:mm:ss" format.
  3766.  
  3767.       For wntUserGetDat, the return value will always contain a 4-digit year.
  3768.       If the account has no expiration date, "0000:00:00:00:00:00" is returned.
  3769.  
  3770.       For wntUserAddDat and wntUserSetDat, "value" must contain a 4-digit year,
  3771.       and must appear in the precise format "YYYY:MM:DD:hh:mm:ss" (ie, exactly
  3772.       19 characters long, with colons in exactly the right positions).  To
  3773.       indicate that the account should have no expiration date, specify
  3774.       "0000:00:00:00:00:00".
  3775.  
  3776.  
  3777. WILX extender 11107  First showing up in WB 98D
  3778.  
  3779.   Under Windows NT, xEjectMedia no longer returns an error or displays a
  3780.   "Drive not ready" message if the drive is empty.
  3781.  
  3782.  
  3783. WB 98E  Nov 9, 1998
  3784.  
  3785.   Fixed a problem with PopMenu not setting the focus to the previously-active
  3786.   window before executing a menu item.
  3787.  
  3788.  
  3789. WB 99A  Jan 5, 1999
  3790.  
  3791.   Added additional option for IntControl(1007):
  3792.  
  3793.       p1   Meaning
  3794.       --   -------
  3795.        3   Suspend script until user clicks on the tray icon
  3796.  
  3797.     This can be used at any point after a WinBatch script has already been
  3798.     placed in the tray (with p1 == 1).  When the user clicks on the tray
  3799.     icon, it will return one of the click values as listed for p1 == 0.
  3800.  
  3801.   Fixed problem with PopMenu where, if you clicked on the tray icon but didn't
  3802.   select a menu item, the next few times you clicked on the tray icon the menu
  3803.   would come up and then immediately disappear.
  3804.  
  3805.   The compiler will now unconditionally extract embedded files (in the "Other
  3806.   files" category), whether or not they already exist.  They will be extracted
  3807.   to the directory where the large EXE is located, or to the Windows directory
  3808.   if the EXE is being run from a floppy disk or CD-ROM.  As before, extender
  3809.   DLL's will not be extracted if they already exist in the EXE directory or on
  3810.   the path.
  3811.  
  3812.   WinBatch can now run scripts larger than 64K.
  3813.  
  3814.   Compiler can now compile scripts larger than 64K.
  3815.  
  3816.  
  3817. DLL 2.7abs  First showing up in WB 99A
  3818.  
  3819.   New function:
  3820.  
  3821.     MouseCoords(s:win-name, s:child-win)
  3822.       Returns coordinates of the mouse within a window.
  3823.  
  3824.         This function returns the x and y coordinates of the mouse cursor,
  3825.         relative to the window specified by "win-name" and "child-win".
  3826.         These coordinates can be used by the MouseMove function.  See
  3827.         MouseMove for information on these parameters.
  3828.  
  3829.       The coordinates are returned as a space-delimited string, in the form:
  3830.         "x y"
  3831.  
  3832.   Fixed a problem with several file functions, which occured if the current
  3833.   directory was a UNC of the form "\\SERVER\SHARE\DIR[\...]" (not just
  3834.   "\\SERVER\SHARE"), and the specified file name or wildcard did not contain
  3835.   path information.  This could cause a "File not found" type of error.
  3836.  
  3837.   When a WIL script is manually terminated by the user (eg, by pressing
  3838.   Ctrl-Break), it now displays the line that was being processed.
  3839.  
  3840.   Added additional option to IntControl(62):
  3841.  
  3842.     P1   Method to use
  3843.     --   -------------
  3844.     -2   Don't activate WIL dialog windows at all.
  3845.  
  3846.   Added new request # to MouseInfo:
  3847.  
  3848.     Req#  Return value
  3849.     ----  ------------
  3850.       7   returns mouse coordinates relative to the bounding rectangle of the
  3851.           window under the cursor, in virtual (1000x1000) screen units.
  3852.  
  3853.   Fixed problem with some of the Binary[..] functions crashing (instead of
  3854.   returning an error) if an offset < 0 was specified.
  3855.  
  3856.   In 32-bit version, changed the way the following string sorting and
  3857.   comparison functions operate:
  3858.  
  3859.       BinarySort
  3860.       ItemSort
  3861.       ItemSortNc
  3862.       StrCmp
  3863.       StriCmp
  3864.       >, >=, <, and <= (operators)
  3865.  
  3866.     Previously, they were sorting (or comparing) strings on a
  3867.     character-by-character basis.  They now perform a "word sort", which sorts
  3868.     strings based on their collation sequence.  Hyphens and apostrophes are
  3869.     ignored, and all other non-alphanumeric characters are sorted before any
  3870.     alphanumeric character.
  3871.  
  3872.   Changed ItemSortNc so that, if the strings being sorted are the same on a
  3873.   case-insensitive basis, they will then be sorted on a case-sensitive basis.
  3874.  
  3875.   In 32-bit version, changed memory allocation for strings to be dynamic.
  3876.   This means that you should no longer receive an error 3096 ("Out of memory
  3877.   for strings"), unless Windows itself is completely out of memory (unlikely).
  3878.  
  3879.   In the Dialog function, ampersands ("&") are now once again being converted
  3880.   to underscores in static text and varying text fields.
  3881.  
  3882.   In 32-bit version, increased limit for FileItemize and DirItemize lists from
  3883.   32K to 1MB.
  3884.  
  3885.   Fixed a problem with menu parsing if you had a third-level menu followed
  3886.   by a top-level menu.
  3887.  
  3888.   OLE functions now support in-process servers.
  3889.  
  3890.   Fixed a problem with MouseClick not sending the correct types of clicks.
  3891.  
  3892.   Fixed an intermittent OLE crash problem.
  3893.  
  3894.   OLE now supports properties with parameters.
  3895.  
  3896.  
  3897. Windows NT extender 11008  First showing up in WB 99A
  3898.  
  3899.   New functions:
  3900.  
  3901.     wntUserExist(s:server-name, s:user-name)
  3902.       Determines whether a user exists.
  3903.  
  3904.         "server-name" is the UNC name of the server on which the function
  3905.         will execute (eg, "\\MYSERVER"), or a blank string ("") to indicate
  3906.         the current machine.
  3907.  
  3908.         "user-name" is the name of a user who may have an account on "server-name".
  3909.  
  3910.       Returns @TRUE if the specified user exists, @FALSE otherwise.
  3911.  
  3912.     wntCurrUsers(s:server-name, s:flags)
  3913.       Lists users currently logged into a server.
  3914.  
  3915.         "server-name" is the UNC name of the server on which the function
  3916.         will execute (eg, "\\MYSERVER"), or a blank string ("") to indicate
  3917.         the current machine.
  3918.  
  3919.         "flags" specifies the format of the returned names, and can be one
  3920.         of the following:
  3921.  
  3922.           0   account         (eg, "johndoe")
  3923.           1   domain\account  (eg, "OFFICE\johndoe")
  3924.  
  3925.         Returns a tab-delimited list.
  3926.  
  3927.     wntFileUsers(s:server-name, s:file-pathname)
  3928.       Lists network users who have a file open.
  3929.  
  3930.         "server-name" is the UNC name of the server on which the function
  3931.         will execute (eg, "\\MYSERVER"), or a blank string ("") to indicate
  3932.         the current machine.
  3933.  
  3934.         "file-pathname" is a fully-qualified file name (eg, "C:\DOC\MYFILE.TXT").
  3935.         NOTE: The file name MUST be fully-qualified.
  3936.  
  3937.         Returns a tab-delimited list of user names.
  3938.  
  3939.     wntAcctInfo(s:server-name, s:account-name, i:request)
  3940.       Returns information about a user account.
  3941.  
  3942.         "server-name" is the UNC name of the server on which the function
  3943.         will execute (eg, "\\MYSERVER"), or a blank string ("") to indicate
  3944.         the current machine.
  3945.  
  3946.         "account-name" is the name of a user who has an account on "server-name".
  3947.  
  3948.         "request" specifies the information to be returned, and can be one
  3949.         of the following:
  3950.  
  3951.           Value  Returns
  3952.           -----  -------
  3953.             0    Domain where the specified account name is found
  3954.             1    SID (security identifier), in standard text form
  3955.  
  3956.       Returns a string.
  3957.  
  3958.     wntGroupAdd(s:server-name, s:group-name, i:group-type, s:comment)
  3959.       Creates a user group.
  3960.  
  3961.         "server-name" is the UNC name of the server on which the function
  3962.         will execute (eg, "\\MYSERVER"), or a blank string ("") to indicate
  3963.         the current machine.
  3964.  
  3965.         "group-name" is the name of the group to be created.
  3966.  
  3967.         "group-type" can be @LOCALGROUP or @GLOBALGROUP.
  3968.  
  3969.         "comment" is an optional description of the group, or "" for none.
  3970.  
  3971.         Returns 1.
  3972.  
  3973.     wntGetDrive(s:net-resource)
  3974.       Lists local drives mapped to a UNC.
  3975.  
  3976.         "net-resource" specifies a UNC, in the form "\\SERVER\SHARE".  It is
  3977.         not case-sensitive, but must otherwise EXACTLY match the UNC name to
  3978.         which the drive(s) are mapped (eg, must not have a trailing backslash).
  3979.  
  3980.       Returns a tab-delimited list of drives (eg, "H:  W:").
  3981.  
  3982.     wntSvcCfgGet(s:server, s:service-name, i:flags, i:request)
  3983.       Gets a configuration parameter for a service.
  3984.  
  3985.         "request" specifies the parameter to be returned, and can be one
  3986.         of the following:
  3987.  
  3988.           0   i:ServiceType
  3989.           1   i:StartType
  3990.           2   i:ErrorControl
  3991.           3   s:BinaryPathName
  3992.           4   s:LoadOrderGroup
  3993.           5   i:TagId
  3994.           6   s:Dependencies
  3995.           7   s:ServiceStartName
  3996.           8   (unused)
  3997.           9   s:DisplayName
  3998.  
  3999.         Further information on these values follows:
  4000.  
  4001.           ServiceType:
  4002.  
  4003.             One of the following service type flags to indicate the type of service.  In addition,
  4004.             for a SERVICE_WIN32 service, the SERVICE_INTERACTIVE_PROCESS flag might be set,
  4005.             indicating that the service process can interact with the desktop:
  4006.  
  4007.             Value  Name                         Meaning
  4008.             -----  ----                         -------
  4009.                 1  SERVICE_KERNEL_DRIVER        Windows NT device driver.
  4010.                 2  SERVICE_FILE_SYSTEM_DRIVER   Windows NT file system driver.
  4011.                16  SERVICE_WIN32_OWN_PROCESS    Win32 service that runs in its own process.
  4012.                32  SERVICE_WIN32_SHARE_PROCESS  Win32 service that shares a process with other services.
  4013.               256  SERVICE_INTERACTIVE_PROCESS  Win32 service process that can interact with the desktop.
  4014.  
  4015.           StartType:
  4016.  
  4017.             Specifies when to start the service.  One of the following values is specified:
  4018.  
  4019.             Value  Name                  Meaning
  4020.             -----  ----                  -------
  4021.                 0  SERVICE_BOOT_START    Device driver started by the operating system loader.  This
  4022.                                          value is valid only if the service type is
  4023.                                          SERVICE_KERNEL_DRIVER or SERVICE_FILE_SYSTEM_DRIVER.
  4024.                 1  SERVICE_SYSTEM_START  Device driver started by the IoInitSystem function.  This
  4025.                                          value is valid only if the service type is
  4026.                                          SERVICE_KERNEL_DRIVER or SERVICE_FILE_SYSTEM_DRIVER.
  4027.                 2  SERVICE_AUTO_START    Device driver or Win32 service started by the service
  4028.                                          control manager automatically during system startup.
  4029.                 3  SERVICE_DEMAND_START  Device driver or Win32 service started by the service
  4030.                                          control manager when a process calls the StartService function.
  4031.                 4  SERVICE_DISABLED      Device driver or Win32 service that can no longer be started.
  4032.  
  4033.           ErrorControl:
  4034.  
  4035.             Specifies the severity of the error if this service fails to start during startup, and
  4036.             determines the action taken by the startup program if failure occurs.  One of the
  4037.             following values can be specified:
  4038.  
  4039.             Value  Name                    Meaning
  4040.             -----  ----                    -------
  4041.                 0  SERVICE_ERROR_IGNORE    The startup (boot) program logs the error but continues
  4042.                                            the startup operation.
  4043.                 1  SERVICE_ERROR_NORMAL    The startup program logs the error and displays a message
  4044.                                            box pop-up but continues the startup operation.
  4045.                 2  SERVICE_ERROR_SEVERE    The startup program logs the error.  If the last-known
  4046.                                            good configuration is being started, the startup operation
  4047.                                            continues.  Otherwise, the system is restarted with the
  4048.                                            last-known-good configuration.
  4049.                 3  SERVICE_ERROR_CRITICAL  The startup program logs the error, if possible.  If the
  4050.                                            last-known good configuration is being started, the startup
  4051.                                            operation fails.  Otherwise, the system is restarted with
  4052.                                            the last-known good configuration.
  4053.  
  4054.           BinaryPathName:
  4055.  
  4056.             The fully qualified path to the service binary file.
  4057.  
  4058.           LoadOrderGroup:
  4059.  
  4060.             The load ordering group of which this service is a member.  If a blank string, the service
  4061.             does not belong to a group.  The registry has a list of load ordering groups located at:
  4062.  
  4063.               HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\ServiceGroupOrder
  4064.  
  4065.             The startup program uses this list to load groups of services in a specified order with
  4066.             respect to the other groups in the list.  You can place a service in a group so that
  4067.             another service can depend on the group.  The order in which a service starts is
  4068.             determined by the following criteria:
  4069.  
  4070.               1. The order of groups in the registryÆs load-ordering group list.  Services in groups
  4071.                  in the load-ordering group list are started first, followed by services in groups
  4072.                  not in the load-ordering group list and then services that do not belong to a group.
  4073.               2. The serviceÆs dependencies listed in the "Dependencies" parameter and the
  4074.                  dependencies of other services dependent on the service.
  4075.  
  4076.           TagId:
  4077.  
  4078.             Specifies a unique tag value for this service in the group specified by the
  4079.             "LoadOrderGroup" parameter.  A value of zero indicates that the service has not been
  4080.             assigned a tag.  You can use a tag for ordering service startup within a load order
  4081.             group by specifying a tag order vector in the registry located at:
  4082.  
  4083.               HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\GroupOrderList
  4084.  
  4085.             Tags are only evaluated for SERVICE_KERNEL_DRIVER and SERVICE_FILE_SYSTEM_DRIVER type
  4086.             services that have SERVICE_BOOT_START or SERVICE_SYSTEM_START start types.
  4087.  
  4088.           Dependencies:
  4089.  
  4090.             A tab-delimited list of names of services or load ordering groups that must start before
  4091.             this service.  If a blank string, the service has no dependencies.  If a group name is
  4092.             specified, it must be prefixed by a '+' character to differentiate it from a service name,
  4093.             because services and service groups share the same name space.  Dependency on a service
  4094.             means that this service can only run if the service it depends on is running.  Dependency
  4095.             on a group means that this service can run if at least one member of the group is running
  4096.             after an attempt to start all members of the group.
  4097.  
  4098.           ServiceStartName:
  4099.  
  4100.             If the service type is SERVICE_WIN32_OWN_PROCESS or SERVICE_WIN32_SHARE_PROCESS, this
  4101.             name is the account name in the form of "DomainName\Username", which the service process
  4102.             will be logged on as when it runs.  If the account belongs to the built-in domain,
  4103.             ".\Username" can be specified.
  4104.  
  4105.             If the service type is SERVICE_KERNEL_DRIVER or SERVICE_FILE_SYSTEM_DRIVER, this name is
  4106.             the Windows NT driver object name (that is, \FileSystem\Rdr or \Driver\Xns) which the
  4107.             input and output (I/O) system uses to load the device driver.  If a blank string, the
  4108.             driver is run with a default object name created by the I/O system based on the service name.
  4109.  
  4110.           DisplayName:
  4111.  
  4112.             String that is to be used by user interface programs to identify the service.  This
  4113.             string has a maximum length of 256 characters.  The name is case-preserved in the
  4114.             service control manager.  Display name comparisons are always case-insensitive.
  4115.  
  4116.       See wntSvcStart for additional parameter information.
  4117.  
  4118.       Returns a string or integer value.
  4119.  
  4120.     wntSvcCfgSet(s:server, s:service-name, i:flags, i:request, s/i:value)
  4121.       Changes a configuration parameter for a service.
  4122.  
  4123.         "request" specifies the parameter to be changed, and can be one
  4124.         of the following:
  4125.  
  4126.           0   i:ServiceType
  4127.           1   i:StartType
  4128.           2   i:ErrorControl
  4129.           3   s:BinaryPathName
  4130.           4   s:LoadOrderGroup
  4131.           5   (unused)
  4132.           6   s:Dependencies
  4133.           7   s:ServiceStartName
  4134.           8   s:Password
  4135.           9   s:DisplayName
  4136.  
  4137.         Most of these are documented under wntSvcCfgGet, with the exception of:
  4138.  
  4139.           Password:
  4140.  
  4141.             Password to the account name specified by the "ServiceStartName" parameter if the service
  4142.             type is SERVICE_WIN32_OWN_PROCESS or SERVICE_WIN32_SHARE_PROCESS.  If a blank string, the
  4143.             service has no password.  If the service type is SERVICE_KERNEL_DRIVER or
  4144.             SERVICE_FILE_SYSTEM_DRIVER, this parameter is ignored.
  4145.  
  4146.         "value" specifies the new value for the parameter.
  4147.  
  4148.       See wntSvcCfgGet and wntSvcStart for parameter information.
  4149.  
  4150.       Returns 1.
  4151.  
  4152.     wntEventWrite(s:server-name, s:source-name, i:type/category, i:event-id, s:description)
  4153.       Writes an entry to an NT event log.
  4154.  
  4155.         "server-name" is the UNC name of the server on which the function
  4156.         will execute (eg, "\\MYSERVER"), or a blank string ("") to indicate
  4157.         the current machine.
  4158.  
  4159.         "source-name" is a subkey of a logfile entry under the "EventLog"
  4160.         key in the registry. For example, the source name "WinApp" would be
  4161.         valid if the registry had the following form:
  4162.  
  4163.           HKEY_LOCAL_MACHINE
  4164.             System
  4165.               CurrentControlSet
  4166.                 Services
  4167.                   EventLog
  4168.                     Application
  4169.                       WinApp
  4170.                     Security
  4171.                     System
  4172.  
  4173.           If the source name cannot be found, the event logging service uses
  4174.           the Application logfile with no message files for the event
  4175.           identifier or category.
  4176.  
  4177.         "type/category" consists of one value for "type" and one value for
  4178.         "category", combined with the bitwise OR ('|') operator:
  4179.  
  4180.           type: specifies the type of event being logged, and can be one of
  4181.           the following values:
  4182.  
  4183.               Value   Meaning
  4184.               -----   -------
  4185.               65536   EVENTLOG_ERROR_TYPE
  4186.              131072   EVENTLOG_WARNING_TYPE
  4187.              262144   EVENTLOG_INFORMATION_TYPE
  4188.              524288   EVENTLOG_AUDIT_SUCCESS
  4189.             1048576   EVENTLOG_AUDIT_FAILURE
  4190.  
  4191.           category: specifies the event category.  This is source-specific
  4192.           information; the category can have any value (0 - 65535).
  4193.  
  4194.         "event-id" specifies the event identifier.  The event identifier
  4195.         specifies the message that goes with this event as an entry in the
  4196.         message file associated with the event source.
  4197.  
  4198.         "description" is an optional string containing additional
  4199.         information that will be stored with the event, or "".
  4200.  
  4201.       Returns 1.
  4202.  
  4203.   New audit functions:
  4204.  
  4205.     wntAuditAdd(server-name, resource/share-name, user/group name, object-type, access-string)
  4206.       Adds audit records for a resource.
  4207.  
  4208.     wntAuditDel(server-name, resource/share-name, user/group name, object-type)
  4209.       Removes audit records from a resource.
  4210.  
  4211.     wntAuditGet(server-name, resource/share-name, user/group name, object-type)
  4212.       Returns audit records for a resource.
  4213.  
  4214.     wntAuditList(s:server-name, s:resource/share-name, i:object-type, i:flag)
  4215.       Returns list of users who have audit records for a resource.
  4216.  
  4217.     For the most part, the usage for these functions is the same as the
  4218.     corresponding wntAccess[..] functions, except that these functions work
  4219.     with audit records instead of access records.  The differences are:
  4220.  
  4221.       These audit functions do not support an "object-type" of 100, because
  4222.       shares do not have audit records.
  4223.  
  4224.       wntAuditAdd does not remove any existing audit records for the specified
  4225.       user (or group).  If you create multiple audit records for a user, it
  4226.       will have a cumulative effect, and should not cause any problems.  If
  4227.       you wish to start with a "clean slate", use wntAuditDel first.
  4228.  
  4229.       There are no predefined access types for wntAuditAdd.  You will need
  4230.       to specify the actual values for "access-string".  The fields should
  4231.       be set as follows:
  4232.  
  4233.         "record-type" must be set to:
  4234.  
  4235.           2  SYSTEM_AUDIT_ACE_TYPE
  4236.  
  4237.         "access-flags" must contain one (or both) of these values:
  4238.  
  4239.            64  SUCCESSFUL_ACCESS_ACE_FLAG
  4240.           128  FAILED_ACCESS_ACE_FLAG
  4241.  
  4242.           These specify whether this access string is enabling auditing for
  4243.           success (64), failure (128), or both (192).  You can specify
  4244.           additional flags, by combining them with the bitwise OR ('|')
  4245.           operstor.
  4246.  
  4247.         "access-rights" are based on the same values as shown for wntAccessAdd.
  4248.         One additional value that is specific to wntAuditAdd is:
  4249.  
  4250.           16777216  ACCESS_SYSTEM_SECURITY
  4251.  
  4252.         The values for "access-rights" which correspond to the checkboxes in
  4253.         the Audit property dialogs in Windows NT are listed below.  Note that
  4254.         the appropriate values may vary depending on your system configuration,
  4255.         or among different versions of Windows NT:
  4256.  
  4257.           Directories/Files
  4258.           -----------------
  4259.             17957001  Read
  4260.             17957142  Write
  4261.              1179808  Execute
  4262.                65536  Delete
  4263.               262144  Change Permissions
  4264.               524288  Take Ownership
  4265.  
  4266.           Printers
  4267.           --------
  4268.                    8  Print
  4269.             16777220  Full Control
  4270.                65536  Delete
  4271.               262144  Change Permissions
  4272.               524288  Take Ownership
  4273.  
  4274.           Registry keys
  4275.           -------------
  4276.                    1  Query Value
  4277.                    2  Set Value
  4278.                    4  Create Subkey
  4279.                    8  Enumerate Subkeys
  4280.                   16  Notify
  4281.                   32  Create Link
  4282.                65536  Delete
  4283.               262144  Write DAC
  4284.               131072  Read Control
  4285.  
  4286.         You can combine multiple values using the bitwise OR ('|') operator.
  4287.         For example, to audit failed reads and writes for a file:
  4288.  
  4289.           rights = 17957001 | 17957142
  4290.           wntAuditAdd("", "f:\public\readme.txt", "Guests", 300, "2:128:%rights%")
  4291.  
  4292.         Instead of manually creating "access-records" strings, you can use
  4293.         the wntAuditGet function to return an "access-records" string in the
  4294.         proper format to be used with wntAuditAdd.  This can be useful for
  4295.         duplicating audit records from one object or user to another.
  4296.  
  4297.   The following changes have been made to wntRunAsUser:
  4298.  
  4299.     After you use wntRunAsUser, any programs you launch via the Run[..] or
  4300.     ShellExecute commands will be run in the context of the impersonated user.
  4301.     In order for this to work, the currently logged-in user (not the user
  4302.     being impersonated) needs to have the following privileges set:
  4303.  
  4304.       Increase quotas
  4305.       Replace a process level token
  4306.  
  4307.     You can specify a user name of "" to end the impersonation.
  4308.  
  4309.     The "flag" parameter can contain one or more of the following values,
  4310.     combined using the bitwise OR ("|") operator:
  4311.  
  4312.       Flag   Meaning
  4313.       ----   -------
  4314.         1    Allow new child processes to interact with the desktop
  4315.  
  4316.   Fixed wntChgPassword when specifying an old-password of "*UNKNOWN*".
  4317.  
  4318.   Functions which return a tab-delimited list no longer include a tab at
  4319.   the end of the list.
  4320.  
  4321.   Added new request to wntGroupInfo:
  4322.  
  4323.       Req  Returns
  4324.       ---  -------
  4325.        2   i:group's RID (relative identifier)
  4326.  
  4327.     This request is valid only with global groups.
  4328.  
  4329.   Added new "element" to wntUserGetDat:
  4330.  
  4331.       "user_id" (i):  user's RID (relative identifier)
  4332.  
  4333.     Note: This element cannot be set using wntUserAddDat or wntUserSetDat.
  4334.  
  4335.   Added new "element" to wntUserGetDat and wntUserSetDat:
  4336.  
  4337.       "primary_group_id" (i):  RID (relative ID) of the user's primary global group
  4338.  
  4339.     You can determine a group's RID using wntGroupInfo with request == 2.
  4340.  
  4341.     Note: This element cannot be set using wntUserAddDat.
  4342.  
  4343.  
  4344. Windows 95 extender 11004  First showing up in WB 99A
  4345.  
  4346.   New functions:
  4347.  
  4348.     w95FileUsers(s:server-name, s:file-pathname)
  4349.       Lists network computers who have a file open.
  4350.  
  4351.         "server-name" is the name of the server on which the function will
  4352.         execute, or a blank string ("") to indicate the current machine.
  4353.  
  4354.         "file-pathname" is a fully-qualified file name (eg, "C:\DOC\MYFILE.TXT").
  4355.         NOTE: The file name MUST be fully-qualified.
  4356.  
  4357.         Returns a tab-delimited list of computer names.
  4358.  
  4359.     w95GetDrive(s:net-resource)
  4360.       Lists local drives mapped to a UNC.
  4361.  
  4362.         "net-resource" specifies a UNC, in the form "\\SERVER\SHARE".  It is
  4363.         not case-sensitive, but must otherwise EXACTLY match the UNC name to
  4364.         which the drive(s) are mapped (eg, must not have a trailing backslash).
  4365.  
  4366.       Returns a tab-delimited list of drives (eg, "H:  W:").
  4367.  
  4368.   w95FileClose now closes all connections to a file, instead of just the
  4369.   first one.  It also now returns the number of connections which existed
  4370.   (and were closed) for the specified file.
  4371.  
  4372.   Functions which return a tab-delimited list no longer include a tab at
  4373.   the end of the list.
  4374.  
  4375.  
  4376. Windows 9x extender 10001  First showing up in WB 99A
  4377.  
  4378.   New function:
  4379.  
  4380.     w9xOwnerGet(s:server-name, i:reg-key, s:resource-name, i:object-type, i:flag)
  4381.       Returns the owner of an object.
  4382.  
  4383.         See wntOwnerGet.
  4384.  
  4385.   Functions which return a tab-delimited list no longer include a tab at
  4386.   the end of the list.
  4387.  
  4388.  
  4389. NetWare 4 extender 14021  First showing up in WB 99A
  4390.  
  4391.   New functions:
  4392.  
  4393.     n4GetUserName(s:context)
  4394.       Returns the name of the currently logged-in user.
  4395.  
  4396.         "context" is a Directory Services context, or "" for the default context.
  4397.  
  4398.       This function returns the name of the currently logged-in user, relative
  4399.       to "context".  This function uses Directory Services (unlike n4GetUser).
  4400.  
  4401.       Returns a user name, or "" on error.
  4402.  
  4403.     n4ObjGetVal(s:context, s:object, s:attribute)
  4404.       Returns values for an object attribute.
  4405.  
  4406.         "context" is a NetWare context, or "" for the current context.
  4407.  
  4408.         "object" is the name of a NetWare object.  It cannot be blank.
  4409.  
  4410.         "attribute" is an attribute of "object".
  4411.  
  4412.       This function is similar to n4ObjectProps, but returns more detail for
  4413.       value types which are structures.  For example, a FAX number type is
  4414.       a structure which contains a phone number field and an optional
  4415.       parameter field.  n4ObjGetVal returns both fields, whereas n4ObjectProps
  4416.       only returns the phone number.
  4417.  
  4418.       Distinguished names are returned in abbreviated, typeless form.
  4419.  
  4420.       By default, binary strings are returned as a hex string (a sequence of hex
  4421.       bytes, with each byte in the original string represented by two hex characters
  4422.       in the returned string.  This can be changed with n4ObjOptions (below).
  4423.  
  4424.       By default, multiple values for "attribute" are delimited with tabs,
  4425.       and individual fields within a structure-type value are delimited with
  4426.       vertical bars ('|').  This can be changed with n4ObjOptions (below).
  4427.  
  4428.       Network addresses are returned in the form xxxxxxxx:xxxxxxxxxxxx:xxxx
  4429.  
  4430.       File streams are not supported, and return a blank string.
  4431.  
  4432.       This is an outline of the return format for various value types:
  4433.  
  4434.         Type              Format of returned data
  4435.         ----              -----------------------
  4436.         EMail_Address     type|address
  4437.         Fax_Number        telephoneNumber|parameters
  4438.         Path              nameSpaceType|volumeName|path
  4439.         Po_Address        line1|line2|line3|line4|line5|line6
  4440.         Typed_Name        objectName|level|interval
  4441.         Back_Link         remoteID|objectName
  4442.         CI_List           string|string|...
  4443.         Object_ACL        protectedAttrName|subjectName|privileges
  4444.         Octet_List        string|string|...
  4445.         Hold              objectName|amount
  4446.         Replica_Pointer   serverName|replicaType|replicaNumber|count|addressType|address
  4447.         Net_Address       addressType|address
  4448.         NWDS_TimeStamp    wholeSeconds|eventID
  4449.         Unknown_Attr      attrName|syntaxID|value
  4450.  
  4451.       Returns a string, integer, or list.
  4452.  
  4453.     n4ObjOptions(s:value-delim, s:field-delim, s:null-sub, i:flags, s:reserved)
  4454.       Specifies options for n4ObjGetVal.
  4455.  
  4456.         "value-delim" specifies a single character used to delimit multiple
  4457.         values for an attribute.  The default is a tab.  Specify a blank
  4458.         string ("") to leave unchanged.
  4459.  
  4460.         "field-delim" specifies a single character used to delimit fields
  4461.         within a structure-type value.  The default is a vertical bar ('|').
  4462.         Specify a blank string ("") to leave unchanged.
  4463.  
  4464.         "null-sub" specifies a single character used to replace any NULL's
  4465.         found within a binary string, when being returned as a regular string.
  4466.         The default is a space (" ").  Specify a blank string ("") to leave unchanged.
  4467.  
  4468.         "flags" can be one or more of the following, combined with the
  4469.         bitwise OR ('|') operator:
  4470.  
  4471.           Flag   Meaning
  4472.           ----   -------
  4473.             1    Return binary strings as a regular string, instead of a hex
  4474.                  string.  Any NULL's found within the binary string will be
  4475.                  replaced with the "null-sub" character.
  4476.  
  4477.         "reserved" is currently unused, and should be set to a blank string ("").
  4478.  
  4479.       Returns 1.
  4480.  
  4481.   n4ObjectProps now handles all value types, except file streams.
  4482.   Distinguished names are now returned in abbreviated, typeless form.
  4483.   Binary strings are returned with any NULL's replaced by spaces.  For
  4484.   complex structure types (ie, not a single string or integer), the most
  4485.   useful information from the structure is returned, in the best form
  4486.   possible.  To get all the data from such value types, use n4ObjGetVal.
  4487.  
  4488.   Fixed a problem with n4NameConvert returning a typed name with format == 4.
  4489.  
  4490.  
  4491. WILX extender 11108  First showing up in WB 99A
  4492.  
  4493.   Fixed xMessageBox so the message box will come the foreground in Windows
  4494.   98 and NT 5.0.
  4495.  
  4496.  
  4497. WB 99B  Jan 13, 1999
  4498.  
  4499.  
  4500. DLL 2.7bbs  First showing up in WB 99B
  4501.  
  4502.   Call() function now handles WBC (encoded) and WBE (encrypted) files created
  4503.   with versions of the compiler prior to 99A.
  4504.  
  4505.  
  4506. WB 99C  Jan 20, 1999
  4507.  
  4508.   Fixed problem with large compiled EXE's giving a "DLL not found" error at
  4509.   runtime if they contained (exactly) 4 extender DLL's.
  4510.  
  4511.   Fixed problem with compiler causing an error when embedding "Other files"
  4512.   that were 0 bytes in size.
  4513.  
  4514.  
  4515. DLL 2.7cbs  First showing up in WB 99C
  4516.  
  4517.   Fixed problem with BinaryTag[..] functions not being able to handle
  4518.   binary buffers larger than 64K.
  4519.  
  4520.  
  4521. Windows NT extender 11009  First showing up in WB 99C
  4522.  
  4523.   Fixed problem with DLL not loading on NT 3.51.
  4524.  
  4525.     Note: wntRunAsUser requires NT version 4.0 or higher.
  4526.  
  4527.   Fixed problem with DLL not loading if RASSAPI.DLL was not found.
  4528.  
  4529.     Note: wntRasUserGet and wntRasUserSet require RASSAPI.DLL.
  4530.  
  4531.  
  4532. NetWare 3 extender 12023  First showing up in WB 99C
  4533.  
  4534.   New function:
  4535.  
  4536.     n3GetConnNum(s:server)
  4537.       Gets the connection number for the current workstation.
  4538.  
  4539.         This function returns the connection number for the current
  4540.         workstation on the specified NetWare server.  The connection
  4541.         number is the index into the connection table maintained by the
  4542.         server for all connected objects.
  4543.  
  4544.         Returns a connection number on success, or -1 on failure.
  4545.  
  4546.  
  4547. NetWare 4 extender 14022  First showing up in WB 99C
  4548.  
  4549.   New function:
  4550.  
  4551.     n4GetConnNum(s:server)
  4552.       Gets the connection number for the current workstation.
  4553.  
  4554.         This function returns the connection number for the current
  4555.         workstation on the specified NetWare server.  The connection
  4556.         number is the index into the connection table maintained by the
  4557.         server for all connected objects.
  4558.  
  4559.         Returns a connection number on success, or -1 on failure.
  4560.  
  4561.  
  4562. WB 99D  Apr 1, 1999
  4563.  
  4564.   The compiler now automatically compresses the WinBatch script and any
  4565.   "Other files" when creating an EXE, and uncompresses them when the EXE is
  4566.   run.  This will cause the compile to take a bit longer, and may add a
  4567.   slight delay at runtime (depending on the CPU speed and the size of the
  4568.   files involved), but it will almost always result in smaller compiled EXE's.
  4569.  
  4570.   If there is no active window, PopMenu will now simulate a window and class
  4571.   named "Desktop".
  4572.  
  4573.   Fixed a problem with BoxDrawCircle drawing a border when "style" was set
  4574.   to 2, in Windows 98.
  4575.  
  4576.   Fixed a problem with the Box functions where, if you double-clicked on a
  4577.   button, it would be treated as two separate button clicks and would cause
  4578.   a subsequent BoxButtonWait to always return immediately.
  4579.  
  4580.  
  4581. DLL 2.8dbt  First showing up in WB 99D
  4582.  
  4583.   New IntControl:
  4584.  
  4585.     IntControl(65, p1, 0, 0, 0)
  4586.       Sets maximum line length for FileRead.
  4587.  
  4588.         "p1" specifies the maximum length of a line which can be read using
  4589.         the FileRead function, in bytes.  This is also the number of bytes
  4590.         which are buffered internally with each file read operation.  The
  4591.         default is 4096.  You can specify a value of 0, in which case file
  4592.         reads are not buffered internally, and the maximum line length is
  4593.         1280 bytes (although this number is subject to change).
  4594.  
  4595.         This IntControl affects subsequent FileOpen commands, and has no
  4596.         effect on files which are already open.
  4597.  
  4598.       Returns previous setting.
  4599.  
  4600.   Fixed problem using the Call() function to call WBC files created with
  4601.   older versions of the compiler (pre-99A).  Very small files worked, but
  4602.   files over a certain size caused a verification failure error message.
  4603.  
  4604.   FileDelete now returns a "File cannot be deleted" error instead of "File
  4605.   not found" if the specified file exists but cannot be deleted.
  4606.  
  4607.   Optimized FileRead by using buffered reads (for files only, not for
  4608.   pipes).  The default buffer size is 4096 bytes, and this is also the
  4609.   maximum length of a line which can be read.  This size can be changed
  4610.   using the new IntControl(65).  Lines which are too long to be read will
  4611.   return an error (instead of being truncated, as in previous versions).
  4612.  
  4613.   If you do a BinaryTagFind followed by another BinaryTagFind, the second
  4614.   BinaryTagFind will now search for the next tag.  Previously, you had to do
  4615.   a BinaryTagRepl before being able to search for the next tag.
  4616.  
  4617.   Fixed a problem with the wildcard string functions (StrIndexWild,
  4618.   StrLenWild, and StrSubWild) where the text would not match a pattern with
  4619.   trailing asterisks, eg: StrIndexWild("abc", "abc*", 1).
  4620.  
  4621.   DllCall no longer crashes if called with an insufficient number of
  4622.   parameters.
  4623.  
  4624.   Fixed a problem with OLE, where, if an OLE call returned a NULL OLE object
  4625.   which you assigned to a variable, and then tried to assign a new value to
  4626.   that variable, it would cause a "Bad OLE channel" error.
  4627.  
  4628.   In 32-bit version, added a 1-second delay after a successful WinWaitExist,
  4629.   WinWaitChild, and WinWaitClose.
  4630.  
  4631.   Fixed BinaryOr and BinaryXor (BinaryOr was actually performing an XOR, and
  4632.   BinaryXor was performing an OR).
  4633.  
  4634.   You can now use horizontal separators ('_') in top-level menu items.
  4635.  
  4636.   Fixed problem with NetInfo(1) failing to include some installed clients.
  4637.  
  4638.   In 32-bit version, optimized TimeAdd and TimeSubtract in cases where the
  4639.   "difference" date-time contained a huge number of seconds.
  4640.  
  4641.   In 32-bit version, added additional options for the "level" parameter in
  4642.   WinVersion:
  4643.  
  4644.     Level   Returns
  4645.     -----   -------
  4646.       4     (i) Windows platform
  4647.  
  4648.               This is exactly the same as WinMetrics(-4), ie:
  4649.  
  4650.                 0 = Other
  4651.                 1 = Windows
  4652.                 2 = Windows for Workgroups
  4653.                   3 = Win32s
  4654.                   4 = Windows NT
  4655.                   5 = Windows 95
  4656.  
  4657.       5     (s) version string
  4658.  
  4659.               This is a string in the form:
  4660.  
  4661.                 "platform-major-minor"
  4662.  
  4663.               where "platform" is one of the following:
  4664.  
  4665.                 0 = Win32s
  4666.                 1 = Windows 95 or Windows 98
  4667.                 2 = Windows NT
  4668.  
  4669.               and "major" and "minor" are the major and minor Windows
  4670.               version numbers, respectively.
  4671.  
  4672.   Leading spaces (if any) are now trimmed from the return value of
  4673.   WinVersion(3).
  4674.  
  4675.   Added new "function" to WinHelp:
  4676.  
  4677.     "CONTEXT"   Brings up help for the topic specified by "keyword".
  4678.                 "Keyword" must be a numeric context identifier defined in
  4679.                 the [MAP] section of the .HPJ file that was used to build
  4680.                 the help file.
  4681.  
  4682.   In 32-bit version, fixed problem with FileAppend and FileOpen (in "APPEND"
  4683.   mode) not properly handling files larger than 2 gigabytes.
  4684.  
  4685.   Fixed a potential crash problem if a string didn't have a closing quote.
  4686.  
  4687.   In 32-bit version, fixed problem with floating point to string conversions,
  4688.   where trailing zeros were being trimmed off results in scientific format.
  4689.  
  4690.  
  4691. Windows NT extender 11010  First showing up in WB 99D
  4692.  
  4693.   New functions:
  4694.  
  4695.     wntFilesOpen(s:server-name)
  4696.       Lists open files on a server.
  4697.  
  4698.         "server-name" is the UNC name of the server on which the function
  4699.         will execute (eg, "\\MYSERVER"), or a blank string ("") to indicate
  4700.         the current machine.
  4701.  
  4702.         Note: This function can only be performed by members of the
  4703.         Administrators or Account Operators local group.
  4704.  
  4705.         Returns a tab-delimited list of file names.
  4706.  
  4707.     wntUserList(s:server-name, i:account-type)
  4708.       Lists users with accounts on an NT server.
  4709.  
  4710.         "server-name" is the UNC name of the server on which the function
  4711.         will execute (eg, "\\MYSERVER"), or a blank string ("") to indicate
  4712.         the current machine.
  4713.  
  4714.           Note: to list users in a domain, specify a domain controller for
  4715.           that domain as "server-name".
  4716.  
  4717.         "account-type" specifies the types of user accounts to include.  You
  4718.         can specify 0 to include all account types, or specify one or more
  4719.         of the following flags, combined using the bitwise OR ('|') operator:
  4720.  
  4721.           Flag   Meaning
  4722.           ----   -------
  4723.             1    Include local user account data on a domain controller.
  4724.             2    Include global user account data on a computer.
  4725.             8    Include domain trust account data on a domain controller.
  4726.            16    Include workstation or member server account data on a domain controller.
  4727.            32    Include domain controller account data on a domain controller.
  4728.  
  4729.         Returns a tab-delimited list of user names.
  4730.  
  4731.     wntGroupDel(s:server-name, s:group-name, i:group-type)
  4732.       Deletes a user group.
  4733.  
  4734.         "server-name" is the UNC name of the server on which the function
  4735.         will execute (eg, "\\MYSERVER"), or a blank string ("") to indicate
  4736.         the current machine.
  4737.  
  4738.         "group-name" is the name of a group to be deleted.
  4739.  
  4740.         "group-type" can be @LOCALGROUP or @GLOBALGROUP.
  4741.  
  4742.         Returns 1.
  4743.  
  4744.     wntGetDc(s:server-name, s:domain-name, i:flag)
  4745.       Returns the domain controller for a domain.
  4746.  
  4747.         "server-name" is the UNC name of the server on which the function
  4748.         will execute (eg, "\\MYSERVER"), or a blank string ("") to indicate
  4749.         the current machine.
  4750.  
  4751.         "domain-name" is the name of a domain, or a blank string ("") to
  4752.         indicate the primary domain.
  4753.  
  4754.         "flag" can be one of the following:
  4755.  
  4756.           Flag   Meaning
  4757.           ----   -------
  4758.             0    Return any domain controller for the specified domain
  4759.  
  4760.                    This will get the name of any domain controller for
  4761.                    "domain-name" that is directly trusted by "server-name".
  4762.                    "server-name" must be part of a domain (it cannot be a
  4763.                    standalone computer).  If "server-name" is a Windows NT
  4764.                    Workstation that is a member of a domain or a Windows NT
  4765.                    Server member, "domain-name" must be in the same domain
  4766.                    as "server-name".  If "server-name" is a Windows NT
  4767.                    Server domain controller, "domain-name" must be one of
  4768.                    the domains trusted by the domain for which the server is
  4769.                    a controller.  The domain controller that this call finds
  4770.                    has been operational at least once during this call.
  4771.  
  4772.             1    Return the primary domain controller for the specified domain
  4773.  
  4774.         Returns a domain controller name in UNC format (eg, "\\MYSERVER").
  4775.  
  4776.   Fixed problem where a wntUserExist which returned @FALSE could prevent
  4777.   subsequent NT extender function calls from working properly.
  4778.  
  4779.   In wntSvcCfgSet, for request #7, you can now specify both a ServiceStartName
  4780.   and a Password together, in the form "ServiceStartName|Password", or
  4781.   "ServiceStartName|" to specify a blank password.  Also, if ServiceStartName
  4782.   does not contain a '\', then '.\' will automatically be prepended, unless
  4783.   ServiceStartName == "LocalSystem".  And, a blank string for this parameter
  4784.   will no longer be treated as "LocalSystem"; if you want to indicate the
  4785.   LocalSystem account, specify the string "LocalSystem".
  4786.  
  4787.   In wntSvcCfgSet, note that only services running under the LocalSystem
  4788.   account may be set as interactive.
  4789.  
  4790.   Fixed problem with wntMemberList and wntMemberLst2 returning blank items.
  4791.  
  4792.  
  4793. NetWare 4 extender 14023  First showing up in WB 99D
  4794.  
  4795.   New functions:
  4796.  
  4797.     n4SetOptions(i:option, i:value)
  4798.       Controls the format in which distinguished names are returned.
  4799.  
  4800.         Option   Value          Meaning
  4801.         ------   -----          -------
  4802.            1     @TRUE/@FALSE   Return typeless names
  4803.            2     @TRUE/@FALSE   Return abbreviated names
  4804.            3     @TRUE/@FALSE   Return canonical names
  4805.  
  4806.         By default, all are @FALSE, and names are returned as stored and/or
  4807.         based on default context flags.
  4808.  
  4809.         Note that abbreviating an already-abbreviated name may causes a dot to
  4810.         be added to the end of the name.
  4811.  
  4812.         Returns 1.
  4813.  
  4814.     n4SetPrimServ(s:server)
  4815.       Sets the primary server.
  4816.  
  4817.         "server" specifies a server name in UNC format, eg, "\\MYSERVER".
  4818.  
  4819.         Returns 1.
  4820.  
  4821.   The following functions no longer automatically convert distinguished
  4822.   names to typeless or canonical format.  You can use the new n4SetOptions
  4823.   function to specify the desired return format:
  4824.  
  4825.     n4GetContext
  4826.     n4GetUserName
  4827.     n4ObjectProps
  4828.     n4ObjGetVal
  4829.  
  4830.  
  4831. WB 99E  Apr 12, 1999
  4832.  
  4833.   Fixed a problem with "#include" directives not working in executables
  4834.   compiled with WinBatch 99D.
  4835.  
  4836.  
  4837. DLL 2.8ebt  First showing up in WB 99E
  4838.  
  4839.   In 32-bit version, changed floating point to string conversions, so that
  4840.   results will now be returned in scientific format for numbers whose
  4841.   absolute values are < 0.0001.
  4842.  
  4843.   In 32-bit version, in the Decimals() function you can now specify these
  4844.   values for "places":
  4845.  
  4846.     Value   Meaning
  4847.     -----   -------
  4848.       -2    Use alternate method of converting to strings, with no trailing zeroes
  4849.       -3    Always use scientific format
  4850.  
  4851.  
  4852. WB 99F  Apr 23, 1999
  4853.  
  4854.   Fixed problem with OLE not working from FileMenu.
  4855.  
  4856.   Fixed problem with OLE not working from PopMenu.
  4857.  
  4858.  
  4859. DLL 2.8fbt  First showing up in WB 99F
  4860.  
  4861.   New IntControl:
  4862.  
  4863.     IntControl(70, p1, 0, 0, 0) (32-bit only)
  4864.       Set delay after WinWait[..] functions.
  4865.  
  4866.         "p1" specifies the delay, in milliseconds, after a successful
  4867.          WinWaitExist, WinWaitChild, and WinWaitClose.  The default is 500
  4868.          (ie, 1/2 second).  Specify 0 for no delay.
  4869.  
  4870.       Returns previous setting.
  4871.  
  4872.   In 32-bit version, changed floating point to string conversions again.
  4873.   If you have used the Decimals() function specifying a "places" value of 0
  4874.   or higher, then results will no longer be returned in scientific format
  4875.   for numbers whose absolute values are < 0.0001.  Also, if you have
  4876.   specified Decimals(0), then results will now be returned in scientific
  4877.   format for numbers whose absolute values are > 2147483647.
  4878.  
  4879.   DirRename was failing if the old and new names had drive letters that were
  4880.   the same letter but one was upper case and the other was lower case.
  4881.  
  4882.   In 32-bit version, there is a problem with IntControl(68) causing the
  4883.   computer to reboot if it does not support the power-off feature.  We've
  4884.   added a new parameter to work around this:
  4885.  
  4886.     P2  Meaning
  4887.     --  -------
  4888.      0  Power-off if supported by the computer (*see note below*)
  4889.      1  Don't attempt to power-off
  4890.      2  Attempt to power-off in any case
  4891.  
  4892.       Note: We don't currently have a reliable method of determining if a
  4893.       computer supports the power-off feature, so 0 will attempt to do a
  4894.       power-off in any case.
  4895.  
  4896.   In 32-bit version, changed the delay after a successful WinWaitExist,
  4897.   WinWaitChild, and WinWaitClose, from 1 second to 1/2 second.  This can be
  4898.   changed or disabled with the new IntControl(70), above.
  4899.  
  4900.  
  4901. Windows NT extender 11011  First showing up in WB 99F
  4902.  
  4903.   Fixed a rare problem with the extender crashing when making the first call
  4904.   to any of the extender functions.
  4905.  
  4906.   In wntSvcCfgSet, for request #7, if you specify "ServiceStartName" with no
  4907.   password, the password will be set to a blank string (ie, same as
  4908.   "ServiceStartName|").  To specify a non-blank password, use the form
  4909.   "ServiceStartName|Password".
  4910.  
  4911.  
  4912. WB 99G  May 7, 1999
  4913.  
  4914.  
  4915. DLL 2.8gbt  First showing up in WB 99G
  4916.  
  4917.   In 32-bit version, under Windows 95/98, fixed a problem using BinaryConvert
  4918.   to convert a non-Unicode buffer to a Unicode buffer, while setting the flag
  4919.   to specify that it also be converted to uppercase or lowercase.  The
  4920.   Unicode conversion was being performed properly, but the case conversion
  4921.   was not.  Note that under Windows 95/98, it is still not possible to
  4922.   perform a case conversion of a Unicode buffer (ie, where "source-type" and
  4923.   "target-type" are both Unicode).  This is not a problem under Windows NT.
  4924.  
  4925.   Improved DebugTrace, and fixed a problem with the last line in the script
  4926.   not being output to the log file.
  4927.  
  4928.   Fixed a problem with FileRead returning extra characters at the end of the
  4929.   last line in the file, if the last line did not end with a line feed.
  4930.  
  4931.   Increased the maximum number of extender entries from 200 to 500.
  4932.  
  4933.  
  4934. Windows NT extender 11012  First showing up in WB 99G
  4935.  
  4936.   New functions:
  4937.  
  4938.     wntWtsUserGet(s:server-name, s:user-name, i:request)
  4939.       Gets user information from an NT Terminal Server.
  4940.  
  4941.         Note: this function requires WTSAPI32.DLL to be present.
  4942.  
  4943.         "server-name" is the name of a Windows-based Terminal Server or domain
  4944.         controller, or "" to indicate the Terminal Server on which your
  4945.         application is running.
  4946.  
  4947.         "user-name" is a user name.
  4948.  
  4949.         "request" specifies the information to get, and can be one of the following:
  4950.  
  4951.           Request   Setting
  4952.           -------   -------
  4953.              1      (s) InitialProgram
  4954.              2      (s) WorkingDirectory
  4955.              3      (i) InheritInitialProgram
  4956.              4      (i) AllowLogonTerminalServer
  4957.              5      (i) TimeoutSettingsConnections
  4958.              6      (i) TimeoutSettingsDisconnections
  4959.              7      (i) TimeoutSettingsIdle
  4960.              8      (i) DeviceClientDrives
  4961.              9      (i) DeviceClientPrinters
  4962.             10      (i) DeviceClientDefaultPrinter
  4963.             11      (i) BrokenTimeoutSettings
  4964.             12      (i) ReconnectSettings
  4965.             13      (i) ModemCallbackSettings
  4966.             14      (s) ModemCallbackPhoneNumber
  4967.             15      (i) ShadowingSettings
  4968.             16      (s) TerminalServerProfilePath
  4969.             17      (s) TerminalServerHomeDir
  4970.             18      (s) TerminalServerHomeDirDrive
  4971.             19      (i) TerminalServerRemoteHomeDir
  4972.  
  4973.         Information on these settings follows:
  4974.  
  4975.           Request   Setting
  4976.           -------   -------
  4977.              1      (s) InitialProgram
  4978.  
  4979.                       A string containing the path of the initial program that
  4980.                       Terminal Services runs when the user logs on.
  4981.  
  4982.                       If the InheritInitialProgram value is 1, the initial
  4983.                       program can be any program specified by the client.
  4984.  
  4985.              2      (s) WorkingDirectory
  4986.  
  4987.                       A string containing the path of the working directory
  4988.                       for the initial program.
  4989.  
  4990.              3      (i) InheritInitialProgram
  4991.  
  4992.                       A flag that indicates whether the client can specify the
  4993.                       initial program.
  4994.  
  4995.                         Value   Meaning
  4996.                         -----   -------
  4997.  
  4998.                           0     The client cannot specify the initial program.
  4999.                                 The InitialProgram string indicates the
  5000.                                 initial program.  If you specify a user's
  5001.                                 initial program, that's the only program they
  5002.                                 can run; Terminal Server logs off the user
  5003.                                 when the user exits that program.
  5004.  
  5005.                           1     The client can specify the initial program.
  5006.  
  5007.              4      (i) AllowLogonTerminalServer
  5008.  
  5009.                       A flag that indicates whether the user account is
  5010.                       permitted to log on to a Terminal Server.
  5011.  
  5012.                         Value   Meaning
  5013.                         -----   -------
  5014.                           0     The user cannot logon.
  5015.  
  5016.                           1     The user can logon.
  5017.  
  5018.              5      (i) TimeoutSettingsConnections
  5019.  
  5020.                       A flag that specifies the maximum connection duration,
  5021.                       in minutes.  One minute before the connection timeout
  5022.                       interval expires, the user is notified of the pending
  5023.                       disconnection.  The user's session is disconnected or
  5024.                       terminated depending on the BrokenTimeoutSettings value.
  5025.                       Every time the user logs on, the timer is reset.  A
  5026.                       value of zero indicates the connection timer is
  5027.                       disabled.
  5028.  
  5029.              6      (i) TimeoutSettingsDisconnections
  5030.  
  5031.                       A flag that specifies the maximum duration, in minutes,
  5032.                       that a Terminal Server retains a disconnected session
  5033.                       before the logon is terminated.  A value of zero
  5034.                       indicates the disconnection timer is disabled.
  5035.  
  5036.              7      (i) TimeoutSettingsIdle
  5037.  
  5038.                       A flag that specifies the maximum idle time, in minutes.
  5039.                       If there is no keyboard or mouse activity for the
  5040.                       specified interval, the user's session is disconnected
  5041.                       or terminated depending on the BrokenTimeoutSettings
  5042.                       value.  A value of zero indicates the idle timer is
  5043.                       disabled.
  5044.  
  5045.              8      (i) DeviceClientDrives
  5046.  
  5047.                       Citrix ICA clients only: A flag that indicates whether
  5048.                       the Terminal Server automatically reestablishes client
  5049.                       drive mappings at logon.
  5050.  
  5051.                         Value   Meaning
  5052.                         -----   -------
  5053.                           0     The server does not automatically connect to
  5054.                                 previously mapped client drives.
  5055.  
  5056.                           1     The server automatically connects to
  5057.                                 previously mapped client drives at logon.
  5058.  
  5059.              9      (i) DeviceClientPrinters
  5060.  
  5061.                       RDP 5.0 clients and Citrix ICA clients: A flag that
  5062.                       indicates whether the Terminal Server automatically
  5063.                       reestablishes client printer mappings at logon.
  5064.  
  5065.                         Value   Meaning
  5066.                         -----   -------
  5067.                           0     The server does not automatically connect to
  5068.                                 previously mapped client printers.
  5069.  
  5070.                           1     The server automatically connects to
  5071.                                 previously mapped client printers at logon.
  5072.  
  5073.             10      (i) DeviceClientDefaultPrinter
  5074.  
  5075.                       RDP 5.0 clients and Citrix ICA clients: A flag that
  5076.                       indicates whether the client printer is the default
  5077.                       printer.
  5078.  
  5079.                         Value   Meaning
  5080.                         -----   -------
  5081.                           0     The client printer is not the default printer.
  5082.  
  5083.                           1     The client printer is the default printer.
  5084.  
  5085.             11      (i) BrokenTimeoutSettings
  5086.  
  5087.                       A flag that indicates what happens when the connection
  5088.                       or idle timers expire or when a connection is lost due
  5089.                       to a connection error.
  5090.  
  5091.                         Value   Meaning
  5092.                         -----   -------
  5093.                           0     The session is disconnected.
  5094.  
  5095.                           1     The session is terminated.
  5096.  
  5097.             12      (i) ReconnectSettings
  5098.  
  5099.                       A flag that indicates how a disconnected session for
  5100.                       this user can be reconnected.
  5101.  
  5102.                         Value   Meaning
  5103.                         -----   -------
  5104.                           0     The user can log on to any client computer to
  5105.                                 reconnect to a disconnected session.  Note
  5106.                                 that sessions started at clients other than
  5107.                                 the system console cannot be connected to the
  5108.                                 system console, and sessions started at the
  5109.                                 system console cannot be disconnected.
  5110.  
  5111.                           1     The user can reconnect to a disconnected
  5112.                                 session by logging on to the client computer
  5113.                                 used to establish the disconnected session.
  5114.                                 If the user logs on from a different client
  5115.                                 computer, the user gets a new logon session.
  5116.  
  5117.             13      (i) ModemCallbackSettings
  5118.  
  5119.                       Citrix ICA clients only: A flag that indicates the
  5120.                       configuration for dialup connections in which the
  5121.                       Terminal Server hangs up and then calls back the client
  5122.                       to establish the connection.
  5123.  
  5124.                         Value   Meaning
  5125.                         -----   -------
  5126.                           0     Callback connections are disabled.
  5127.  
  5128.                           1     The server prompts the user to enter a phone
  5129.                                 number and calls the user back at that phone
  5130.                                 number. You can use the ModemCallbackPhoneNumber
  5131.                                 value to specify a default phone number.
  5132.  
  5133.                           2     The server automatically calls the user back
  5134.                                 at the phone number specified by the
  5135.                                 ModemCallbackPhoneNumber value.
  5136.  
  5137.             14      (s) ModemCallbackPhoneNumber
  5138.  
  5139.                       Citrix ICA clients only: A string containing the phone
  5140.                       number to use for callback connections.
  5141.  
  5142.             15      (i) ShadowingSettings
  5143.  
  5144.                       RDP 5.0 clients and Citrix ICA clients: A flag that
  5145.                       indicates whether the user session can be shadowed.
  5146.                       Shadowing allows a user to remotely monitor the
  5147.                       on-screen operations of another user.
  5148.  
  5149.                         Value   Meaning
  5150.                         -----   -------
  5151.                           0     The session cannot be shadowed.
  5152.  
  5153.                           1     The session can be shadowed.
  5154.  
  5155.             16      (s) TerminalServerProfilePath
  5156.  
  5157.                       A string containing the path of the user's profile for
  5158.                       Terminal Server logon.
  5159.  
  5160.             17      (s) TerminalServerHomeDir
  5161.  
  5162.                       A string containing the path of the user's home
  5163.                       directory for Terminal Server logon. This string can
  5164.                       specify a local path or a UNC path (\\machine\share\path).
  5165.                       See TerminalServerRemoteHomeDir.
  5166.  
  5167.             18      (s) TerminalServerHomeDirDrive
  5168.  
  5169.                       A string containing a drive letter to which the UNC path
  5170.                       specified in the TerminalServerHomeDir string is mapped.
  5171.                       See TerminalServerRemoteHomeDir.
  5172.  
  5173.             19      (i) TerminalServerRemoteHomeDir
  5174.  
  5175.                       A flag that indicates whether the user's home directory
  5176.                       for Terminal Server logon is a local path or a mapped
  5177.                       drive letter.
  5178.  
  5179.                         Value   Meaning
  5180.                         -----   -------
  5181.                           0     The TerminalServerHomeDir string contains the
  5182.                                 local path of the user's Terminal Server logon
  5183.                                 home directory.
  5184.  
  5185.                           1     The TerminalServerHomeDir string contains the
  5186.                                 UNC path of the user's Terminal Server logon
  5187.                                 home directory, and the TerminalServerHomeDirDrive
  5188.                                 string contains a drive letter to which the
  5189.                                 UNC path is mapped.
  5190.  
  5191.         Returns a string or integer, depending on "request".
  5192.  
  5193.     wntWtsUserSet(s:server-name, s:user-name, i:request, s/i:value)
  5194.       Modifies user information on an NT Terminal Server.
  5195.  
  5196.         Note: this function requires WTSAPI32.DLL to be present.
  5197.  
  5198.         "value" specifies the new value to be set.
  5199.  
  5200.         See wntWtsUserGet for additional parameter information.
  5201.  
  5202.         Returns 1.
  5203.  
  5204.   In wntMemberGet, if "group-type" is @LOCALGROUP, then "user" can now be
  5205.   specified as either "user" or as "domain\user".
  5206.  
  5207.  
  5208. Windows 95 extender 11005  First showing up in WB 99G
  5209.  
  5210.   w95GetUser will now attempt to repeatedly retry the operation for up to 30
  5211.   seconds, or until a non-blank string can be returned, whichever comes first.
  5212.   This is to avoid the problem where a blank string is returned when used in
  5213.   a login script, and the user hasn't yet been fully logged in.
  5214.  
  5215.  
  5216. Windows 9x extender 10002  First showing up in WB 99G
  5217.  
  5218.   New functions:
  5219.  
  5220.     w9xGroupAdd(s:server-name, s:group-name, i:group-type, s:comment)
  5221.     w9xGroupDel(s:server-name, s:group-name, i:group-type)
  5222.     w9xGroupInfo(s:server-name, s:group, i:group-type, i:request)
  5223.     w9xUserAdd(s:server-name)
  5224.     w9xUserAddDat(s:element, s/i:value)
  5225.     w9xUserDel(server-name, user-name)
  5226.     w9xUserExist(s:server-name, s:user-name)
  5227.     w9xUserGetDat(s:server-name, s:user-name, s:element)
  5228.     w9xUserList(s:server-name, i:account-type)
  5229.     w9xUserRename(s:server-name, s:old-username, s:new-username)
  5230.     w9xUserSetDat(s:server-name, s:user-name, s:element, s/i:value)
  5231.  
  5232.       Parameters and usage for all these functions are the same as in the
  5233.       corresponding wnt[..] functions in the Windows NT extender, with the
  5234.       restriction that "server-name" must specify an NT server (it can't be a
  5235.       blank string), and "group-type" (where applicable) must be @GLOBALGROUP.
  5236.  
  5237.  
  5238. NetWare 4 extender 14024  First showing up in WB 99G
  5239.  
  5240.   New functions:
  5241.  
  5242.     n4FileUsers(s:server, s:filename)
  5243.       Lists network users who have a file open.
  5244.  
  5245.         "server" is the UNC name of the server on which the file is located
  5246.         (eg, "\\MYSERVER").
  5247.  
  5248.         "filename" is a full pathname to a file located on "server", in the
  5249.         form "volume:path" (eg, "SYS:USER\JOHNDOE\MYFILE.TXT").
  5250.  
  5251.         Note: This function requires console operator rights.
  5252.  
  5253.         Returns a tab-delimited list of user names.
  5254.