				README.TXT

		Release notes for Microsoft Test, Version 2.0
		   (C) Copyright Microsoft Corporation, 1993

	This document contains release notes for version 2.0 of 
	Microsoft Test. The information in this document and in the 
	online Help is more up-to-date than that in the books.

========
CONTENTS
========

	Part	Description
	----    -----------

	1	Documentation Errata and Additions
	  a	  Microsoft Test User's Guide
	  b	  Microsoft Test User Interface Editor User's Guide
	2	New Dynamic-Link Library Procedures
		  New TESTCTRL.DLL Procedures
		  New TESTDLGS.DLL Procedures
		  New TEST TALK Procedures
		  New TESTUIL.DLL Procedures	  
	3	Enhanced Functionality
		  Test Dialogs
		  User Interface Editor
		  Detecting a Disk in Drive A: or B:
		  RUN Statement/Function
		  NOT (!) Operator
		  Test Trap Additions, Corrections, and Changes
	4	Miscellaneous
		  Using MS-DOS Boxes on the Novell Network
		  Test Talk Issues
		  Callbacks as Parameters
	
===========================================
PART 1:  Documentation Errata and Additions
     a:  Microsoft Test User's Guide
===========================================

TESTDLGS.EXE and TESTSCRN.EXE Filenames
---------------------------------------
Please note the following changes:
	TESTDLGS.EXE was renamed to TESTDLG.EXE
	TESTSCRN.EXE was renamed to TESTSCN.EXE

These filenames were changed so that the .EXE files did not have 
the same name as the dynamic link libraries (DLLs) TESTDLGS and
TESTSCRN. When the names were the same, you couldn't run the 
.EXE if the DLL was already loaded. This situation occurred when 
you ran a script that called a DLL, stopped it at a breakpoint, 
and then tried to run the .EXE.

Page 58, Compiling Your Script
------------------------------
Before the sentence located at the end of the second paragraph 
in this section that says:

	You can run your pcode file by using WBRUN20.EXE 
	and passing it the pcode filename.

Insert the following paragraphs:

	To run a pcode file, the following files must 
	be present:

   		The .PCD file
   		WBRUN20.EXE
   		WBEXEC20.DLL
   		RBHEAP.DLL
   		DLLs that you call from your script 
			(TESTCTRL, TESTEVNT, etc.)

	Under Windows 3.0, the DLLs must be in either the current 
	directory, the WINDOWS or WINDOWS\SYSTEM directory, or a 
	directory in your path. Under Windows 3.1, the DLLs can be 
	in any of the above directories, and can also be in the 
	directory where WBRUN20.EXE is located.

Page 86, Saving a Reference Image to a File
-------------------------------------------
Add the following note after step 4 in the "To save an image 
to a file" procedure:
	
	NOTE: Screen files cannot contain images that were 
	captured using different video modes. If you captured 
	and saved screen images in a file using one video mode,
	and try to capture and save a new screen image to the 
	same file using a different video mode, an "Invalid 
	Screen Mode" error occurs. See Appendix B for a list 
	of video modes.

Page 105, STRING *, Fixed-Length
--------------------------------
Add the following paragraphs:

	The maximum size of a fixed-length string is 32767 
	bytes. If this size is exceeded, an 'Invalid Size for 
	Fixed-Length String' error occurs during compilation.

   	DIM S AS STRING * 32767 'this is valid
   	DIM Y AS STRING * 32768 'this fails with an error

	NOTE: this limitation does not apply to variable-length 
	strings.

Page 111, User-Defined Data Types
---------------------------------
Add the following paragraph and examples after the TYPE LOGRECORD 
example on this page: 
	
	The maximum size of a user-defined variable is 32,767 bytes. 
	If this size is exceeded, an "overflow" error occurs during 
	compilation. In the following examples Type1 is defined having 
	the maximum size. Type2 produces an "overflow" error.
   
  	TYPE Type1
      		x as string * 32767	'The maximum size
   	END TYPE

   	'This will produce an "overflow" error
   	TYPE Type2
      		x as string * 32767
      		y as string * 2
   	END TYPE

Page 212, Monitoring a Station's Status
---------------------------------------
The following status code needs to be added to the list in this
section:

	Status Code		Value	Description
	-------------------------------------------------------------
	ST_RECONNECTED		5	If a station has disconnected 
					from the host and attempts to 
	                                reconnect, its old entry in the 
	                                station list is updated 
	                                to this status. 

Page 324 and 325, SendData and SendDataFile Procedures
-----------------------------------------------------
The syntax for the DECLARE FUNCTION statements for these two 
procedures is missing a parameter (wType%). These statements
should look like this:

	DECLARE FUNCTION SendData LIB "TESTHost.dll" (StationNum%, 
	  wType%, lpData AS ANY, DSize&) AS INTEGER

	DECLARE FUNCTION SendDataFile LIB "TESTHost.dll" (StationNum%, 
	  wType%, FileName$) AS INTEGER
	
	wType%
	  Communicates to the station what kind of data you are sending. 
  	  For example, if you are sending a script to be executed, 
	  set this parameter to DT_SCRIPT. When the station gets the data, 
	  this parameter determines what gets returned by the 
	  GetDataType() function on the station side.

Page 388, Return Values
-----------------------
Add the following Error messages to the end of the table on this page 
(Value 29 is replaced):

	Error message			Value
	-------------------------------------
   	ERR_CANT_MOVE_WND		29
  	ERR_CANT_SIZE_WND		30
	ERR_CANT_ADJ_SIZE_POS_WND	31
	ERR_CANT_FIND_LBBOX		32
	ERR_NOT_OPERATOR_NOT_ALLOWED	33
	ERR_CANT_ADD_NULL_ITEM		34
	ERR_BAD_POINTER			35
   	MAX_ERROR			36

Pages 393-397, WFndWnd and WFndWndWait Procedures (TESTCTRL.DLL)
----------------------------------------------------------------
Add the following wFlags to the list starting on page 393:

	FW_MAXIMIZE	If a window is found, it is maximized.
	FW_MINIMIZE	If a window is found, it is minimized.
	FW_RESTORE	If a window is found, it is restored.
	FW_DIALOG	Find dialog boxes (class #32770) only.
	FW_DIALOGOK	Find either windows or dialog boxes

Additional Comments:
	The first 3 wFlags in this list do not imply FW_FOCUS. 
	If the window is an MDI window, it can be maximized, 
	minimized, or restored without automatically gaining the 
	focus. Although FW_MAXIMIZE and FW_RESTORE do not imply 
	FW_FOCUS, top-level windows will get the focus because 
	of the way Windows works.

	Some applications put up dialog boxes with the same 
	caption as the application's main window. If this happens, 
	you may find the wrong window if you use WFndWnd(). 
	Instead, use WFndWndC() and specify a class when locating 
	windows in these cases.

	To make things easier and more readable when looking for 
	a dialog, instead of using WFndWndC() and specifying the 
	class name "#32770" (the dialog class), you can use 
	WFndWnd() and use the FW_DIALOG flags.

Page 394, WFndWnd Procedure (TESTCTRL.DLL)
------------------------------------------
o  In the description of FW_IGNOREFILE at the top of this page,
   replace the word "following" with "preceding."

o  In the first paragraph in the Comments section on this page, 
   after the first sentence, add the following:

	NULL and an empty string ("") for the lpszCaption$
	parameter are not treated the same:

	 ("")	The window must have an empty caption to match.
	 NULL	The window caption/text is ignored; can be anything.

Page 475, FILELIST Statement
----------------------------
Add this note before the "Examples" heading:

	NOTE: The maximum number of files in the file list is 65,000. 
	If a FILELIST ADD statement causes the file list to exceed 
	this size, a run-time error 11, "Filelist processing error,"
	occurs. The file list will contain only the first 65,000
	files added to it. No more files can be added until a
	FILELIST REMOVE or a FILELIST CLEAR statement is used.

Page 488, LEN Function
----------------------
Add the following paragraphs to the "Remarks" section:

	If <variablename> is a user-defined type, LEN returns 
	the size of the TYPE structure. For example:

   	TYPE MyType
      		elem1 As Integer
      		elem2 As String * 10
   	END TYPE

   	LEN(MyType) 			'returns 12.

	If <variablename> is an array, LEN returns the size of an 
	individual array element. For example:

   	DIM array(100) AS DOUBLE  	
	LEN(array) 			'returns 8.

Page 494, MSGBOX Statement
--------------------------
o  MB_APPLMODAL Description
   Add this note to the description in Table 9.4:

	NOTE: When you set the MB_APPLMODAL flag, the 
	message box is modal to the script window for 
	that script, not to the Test Driver window in 
	which you are running the script. 

o  The example after the paragraph following Table 9.4 is not correct: 

	MB_OKCANCEL + MB_ICONSTOP + MB_DEFBUTTON1 + MB_APPLMODAL

   It should look like this:

   	MB_OKCANCEL OR MB_ICONSTOP OR MB_DEFBUTTON1 OR MB_APPLMODL


o  A new flag has been added for the MSGBOX statement and function. 
   It is:

	Symbolic constant	Value	Description
	-----------------------------------------------------------
	MB_NOBEEP  		32,768	Turns off the system beep 
					that sounds when you choose
					an icon and its dialog box 
					appears. 
				
Page 501, OPTION BASE Statement
-------------------------------
Additional Remarks:

	The Microsoft Test OPTION BASE statement is different in 
	some ways from the OPTION BASE statement in QuickBasic and 
	Visual Basic. In QuickBasic and Visual Basic, you can use 
	OPTION BASE only once in a program. Also, you must use it 
	before any arrays are dimensioned.

	The Microsoft Test OPTION BASE is a toggle switch. You
	can use it more than once. For example:

   		DIM array1(10) AS INTEGER  'Defaults to base 0
   		OPTION BASE 1
   		DIM array2(20) AS SINGLE
   		OPTION BASE 0
   		DIM array3(30) AS DOUBLE
 
Page 501, OPTION INTEGER Statement
----------------------------------
The OPTION INTEGER statement affects the output of the RND function
and the TIMER function as follows:

   	If OPTION INTEGER is used, RND generates a random integer 
	between 1 and 32,767. Otherwise it generates a random number 
	between 0 and 1.

   	If OPTION INTEGER is used, TIMER returns a long integer 
	containing the number of milliseconds since the system started. 
	Otherwise, it returns a double-precision floating-point value 
	containing the number of seconds since the system started.

==========================================================
PART 1:  Documentation Errata and Additions
     b:  Microsoft Test User Interface Editor User's Guide
==========================================================

Page 101, MSTLoadIcon Function Syntax
-------------------------------------
Add the following information to the paragraph that starts "icon ID
is the resource ID number... ":

	To get the resource ID number of an icon
	1.  From the Icons dialog box, select an icon.
	2.  Press F2.
	    The resource ID number and the icon is displayed.


============================================
PART 2:  New Dynamic-Link Library Procedures
============================================
The procedures in this section are "new" because they were created 
after the books went to press.

New TESTCTRL.DLL Procedures
---------------------------

o  WLabelLen()

   Included if W_STATIC is defined. 
   
   Syntax:
	Declare Function WLabelLen Lib "TestCtrl.DLL" Alias
        "WLabelLen" (hwnd%) AS INTEGER

   Returns:
	Length of associated label; zero if no associated label.

   Comments:
	WLabelLen() obtains the length of the associated label 
	for the specified window. hwnd% is the Window to check. 
	If zero, check the control with the focus. 

	hwnd% must be a child (WS_CHILD) and cannot have a 
	caption (WS_CAPTION).

o  WLabelText()

   Included if W_STATIC is defined.

   Syntax:
	Declare Sub WLabelText Lib "TestCtrl.DLL" Alias
	"WLabelText" (hwnd%, lpszBuffer$)
     
	Declare Function LabelText (hwnd%) AS STRING

   Returns:
	Nothing.
     
   Comments:
	WLabelText() obtains the text of the associated label 
	for the specified window. hwnd% is the Window to check. 
	If hwnd% is zero, checks the control with the focus. 
	lpszBuffer$ is the buffer for label text.

	hwnd% must be a child (WS_CHILD) and cannot have a
	caption (WS_CAPTION).

Both of the above procedures can be used to determine whether a control
has an associated label. WLabelLen() returns zero if no label, and
LabelText() returns an empty string if no label.

o  WListItem(action)Ex

   Four new procedures are identical to their non-"Ex" counterparts,
   except for the added parameter ixOffset%. 

   Syntax:
	Declare Sub WListItemClkEx Lib "TESTCTRL.DLL" Alias 
        "WListItemClkEx" (lpszName$, lpszItem$, ixOffset%)
     
	Declare Sub WListItemCtrlClkEx Lib "TESTCTRL.DLL" Alias 
        "WListItemCtrlClkEx" (lpszName$, lpszItem$, ixOffset%)
     
	Declare Sub WListItemShftClkEx Lib "TESTCTRL.DLL" Alias
        "WListItemShftClkEx" (lpszName$, lpszItem$, ixOffset%)
     
	Declare Sub WListItemDblClkEx Lib "TESTCTRL.DLL" Alias 
        "WListItemDblClkEx" (lpszName$, lpszItem$, ixOffset%)

   Comments:
   	The value of ixOffset% determines where the item is clicked:
        = 0:  item is clicked in the center of the item rectangle,
	      zooming is performed to support File Manager-type
	      list boxes.
        > 0:  item is clicked at ixOffset% from the left of the item
              rectangle   
        < 0:  item is clicked at ixOffset% from the right of the item
              rectangle


New TESTDLGS.DLL Procedures
---------------------------

o  SetMatchPreferences()

   Syntax:
	Declare Sub SetMatchPreferences (ExDlg%, FzDlg%, ExMenu%, FzMenu%)

	CONST MATCH_TEXT     = 1 'Text
	CONST MATCH_CASETEXT = 2 'Text, case insensitive
	CONST MATCH_CLASS    = 4 'Class name
	CONST MATCH_STATE    = 8 'State
	CONST MATCH_STYLE    = 16 'Style
	CONST MATCH_RECT     = 32 'Rectangle
	CONST MATCH_ALL      = 63 'Match all

   Comments:
	This procedure sets the criteria for a Test Dialogs comparison.
     	The integer for each comparison type is some combination of the
     	MATCH_ flags. The default state is equivalent to the following:
	
	MATCH_ALL 			'Exact, Dialogs  
	MATCH_CLASS OR MATCH_STATE  	'Fuzzy, Dialogs
	MATCH_TEXT OR MATCH_CASETEXT OR MATCH_STATE  'Exact, Menus
	MATCH_TEXT OR MATCH_CASETEXT  	'Fuzzy, Menus

o  GetMatchPreferences()

   Syntax:
	Declare Sub GetMatchPreferences (ExDlg AS POINTER TO INTEGER,
					FzDlg AS POINTER TO INTEGER, 
					ExMenu AS POINTER TO INTEGER,
					FzMenu AS POINTER TO INTEGER)

   Comments:
     This procedure gets the criteria for a Test Dialogs comparison.
     The MATCH_ flags are the same as defined for SetMatchPreferences().


New Test Talk Procedures
------------------------

o  SetLanaNum()

   If you have more than one LAN adapter or protocol on your
   machine, you can choose which adapter or protocol to use when
   running Test Talk. Both Test Talk DLLs (TESTHOST.DLL and
   TESTSTAT.DLL) contain this new procedure. 

   Syntax:
	DECLARE FUNCTION SetLanaNum(LNum%) AS INTEGER

   Return Values:
 	SetLanaNum() returns TRUE if the lananum can be used; 
	FALSE if not. If the function returns FALSE, it means either 
	that there is no adapter or LAN protocol for that lananum, 
	or that the adapter or LAN protocol exists and doesn't
	support NETBIOS. 

   Comments:
	This function checks the specified lananum to see whether it
	supports NETBIOS. If it does, then that lananum is used by
	Test Talk from then on. 

	When the Test Talk DLLs load, they automatically search the first
	eight lananums (0 - 7) for the first one that supports NETBIOS.
	The first one found is used unless you change it by using
	SetLanaNum().


o  NetBIOSAvailable

   This procedure is included in both TESTSTAT.DLL and TESTHOST.DLL. It
   checks the first eight (0 - 7) lananums for the first one that
   supports NETBIOS. The first one found is used by Test Talk unless
   you change it with SetLanaNum(). If NetBIOSAvailable returns
   FALSE, it means that no adapter or LAN protocol on the machine
   supports NETBIOS.


New TESTUI.DLL Procedures
-------------------------

MSTSysMenu()

   Included if either W_MENU or TESTUI is defined.

   Syntax:
	Declare Sub MSTSysMenu Lib "TESTUI.DLL" Alias
        "MSTSysMenu" (hwnd%, iMenuType%)

     	Const MST_GLOBAL = 1
     	Const MST_APP    = 2
     	Const MST_WINDOW = 4 (only applies to User Interface Editor's
	                      test mode windows)

   Comments:
	MSTSysMenu() drops the specified sysmenu on the specified window.
	hwnd% is the Window to check. If zero, check the active window.
	iMenuType% is the Type of the sysmenu. It can be any one of the
	following:
		MST_GLOBAL
		MST_APP
		MST_WINDOW

	If the window doesn't have the specified sysmenu installed, nothing
	happens. If the window has the specified sysmenu and it is not the
	active window, it is made the active window.

MSTSysMenuExists()

   Included if either W_MENU or TESTUI is defined.

   Syntax:
	Declare Function MSTSysMenuExists Lib "TESTUI.DLL" Alias
        "MSTSysMenuExists" (hwnd%) AS INTEGER

   Return Values:
	The function returns a bit pattern:

		bit 0	1 if a global sysmenu is installed
		bit 1	1 if an application-specific sysmenu is installed
		bit 2	1 if a window-specific sysmenu is installed
 
        (NOTE: Bit 2 only applies to the User Interface Editor when in 
	test mode.)

   Comments:
	MSTSysMenuExists() determines if the specified window has an
	MSTSysMenu installed. hwnd% is the Window to check. If zero, 
	check the active window.
 
   Examples: 
	MSTSysMenuExists() returns the following values:

		Zero		If no sysmenus are installed.
	 	MST_GLOBAL(1)	If only a global sysmenu is installed.
		MST_APP(2)	If only an application-specific sysmenu 
				is installed.
		MST_WINDOW(4)	If only a window-specific sysmenu is 
				installed.
		3		If both a global and an application-specific 
				sysmenu are installed.

o  MSTLoadBitmap()

   Syntax:
	int = MSTLoadBitmap(bitmap ID, .RES file)

   Return Value:
	MSTLoadBitmap returns hBitmap (the bitmap handle) 
	which is used when calling MSTDestroyBitmap.

   Comments:
	See MSTLoadIcon() on page 100 in the Microsoft Test User Interface
	Editor User's Guide.

	To get the resource ID number of a bitmap:
	1.  From the Sysmenu Bitmaps dialog box, select a bitmap.
	2.  Press F2.
	    The resource ID number and the bitmap is displayed.

o  MSTDestroyBitmap()

   Syntax:
	MSTDestroyBitmap(hBitmap)

   Comments:
	See MSTDestroyIcon() on page 101 in the Microsoft Test User Interface
	Editor User's Guide.


===============================
PART 3:  Enhanced Functionality
===============================

Test Dialogs
------------

o  Converting Version 1.0 Files

   Files created using version 1.0 are no longer readable by 
   Test Dialogs. To convert 1.0 files to 2.0 format:

	1. Use the Test Dialogs user interface to create a new 
	   2.0 file.
	2. Use the new File.Convert 1.0 File command to import 
	   the contents of the 1.0 file. This converts the dialogs 
	   in the 1.0 file and appends them to the currently open 
	   2.0 file.

   It is better to recapture the dialogs using version 2.0, than to
   convert them from version 1.0. Version 2.0 stores more information 
   about dialog controls making it possible to accurately preview and 
   export the dialogs. For this reason comparisons are more reliable. 

   For example, in 1.0 the coordinates for each control were saved
   relative to the screen, and in 2.0 they are saved relative to their
   parent. If the dialog is in a different screen location during
   comparison, the rectangles will still match, provided their position 
   relative to the dialog window itself did not change. Also, style bits
   are now stored for the controls, allowing Test Dialogs to distinguish
   different controls within the same class.

   In version 1.0, the following information was stored:
	- Text (up to 256 characters)
	- Class name (to 32 characters). Menu items are of the class
	  "MenuItem."
 	- State:
   	   - for class BUTTON, 0 = unchecked, 1 = checked, 
	     2 = undetermined
   	   - for menu items, return value of GetMenuState() at time 
	     of capture
   	   - fVisible = TRUE if control is visible
  	   - fEnabled = TRUE if control is enabled
   	   - Rectangle. Screen-relative position and size of control
                (GetWindowRect() at time of capture).  

   In version 2.0, the following information is stored:
 	- Text (up to 2048 characters)
 	- Class name (complete, no enforced length limit)
	- Style bits:
   	   - for menus, this field is used to identify pop-up menus;
             contains the number of sub-menus in a pop-up menu
   	   - for controls and windows, this field contains the 
	     style bits
 	- State:
   	   - for menu items, return value of GetMenuState() at the time 
	     of capture
   	   - for controls and windows, this field is a combination of bits:
     		1 if the control is visible
     		2 if the control is enabled
     		4 if the control is a button and is checked
     		8 if the control is a 3-state button and is indeterminate
 	- Font (for controls and windows only). Face name, height, 
	  and weight of font used to paint the control at time of capture.
 	- Rectangle. Position and size of the control relative to its parent.
  
o  Text Import and Export

   You can create a text file in RC-like format, representing dialogs
   and menu structures. You can edit the text file using any text editor,
   and then import it into a dialog file using the import feature.

   If you capture a menu and then remove items from it using the User
   Interface Editor, you cannot preview or export the menu. If you convert a 
   menu from a 1.0 file, the converted menu won't be completely accurate. 
   If there are second- or higher-level menus, they will appear as top-level 
   menus. To fix this in import/export, do the following:

	1. Create a text file.
	2. Edit the text file to place the higher-level menu in a 
	   pop-up structure.
   	3. Re-import the menu.

User Interface Editor
---------------------

o  Dragging and Dropping Icons

   In the User Interface Editor, you can add icons to the .RES 
   file by dragging them from the Preview window of the Icons 
   dialog box and dropping them into the Icons list. 

   To assign an icon to an item, you can drag it from the Icons 
   list box and drop it onto a sysmenu item in a sysmenu or onto 
   an icon control in a dialog box. 

   Double-clicking to assign the icon still works as before.

o  Using the SPACE key with Icons and Bitmaps

   In the User Interface Editor, pressing SPACE now acts just like
   double-clicking the left mouse button in the Icons/SysMenu Bitmaps
   dialog to assign icons to icon controls and sysmenu items.

o  New Check Box in "Arrange.Settings" Dialog Box 

   The "Arrange.Settings" dialog box has an additional check box:

	Hide &UI-Editor while in test mode

   The check box is selected by default. If it is selected, only the
   Test Mode Dialog or Test Mode Menu window is visible while in test
   mode. If not selected, UIEditor items are visible as usual.

   This option prevents access to the properties bar 3D and Iconbar
   check boxes while in test mode. Therefore, a method was added to
   select these check boxes if the User Interface Editor is hidden in
   test mode. When you test a dialog, the following menu item is
   added to the Test Dialogs system menu:

	&View 3D 'Toggles 3D mode

   If the dialog being tested has no system menu, and the User Interface
   Editor is hidden, then you cannot toggle between 3D and 2D.

   For testing an MSTSysMenu, the following items have been added to the
   Test Windows system menu:

	S&ysMenu 'Toggles from iconbar to sysmenu if currently iconbar
	&Iconbar 'Toggles from sysmenu to iconbar if currently sysmenu
	&View 3D 'Toggles 3D mode if sysmenu. Grayed if iconbar.

   For testing an Application menu, no items have been added to the
   system menu. For testing any item, the "Close" system menu item for
   the Test Dialog and Menu Test window has been changed to:

	&Design Mode Alt+F4

o  Dialog Coordinates and Control Units

   The coordinates displayed in the upper left of the User Interface
   Editor's properties bar were formerly displayed in dialog units.
   Now dialogs and controls are displayed in either "dialog units" or
   "pixels." To change between the two, simply click with the right mouse 
   button anywhere in the dialog you are editing.


Detecting a Disk in Drive A: or B:
----------------------------------
The following example shows what happens for each statement,
assuming that drives A: and B: exist, but there is no disk in either
drive.

   ON ERROR GOTO ErrorTrap
   print exists("A:") 'This works, since the drive really is there
   print exists("B:") 'This works, since the drive really is there
   chdrive("A:")      'This works, since the drive really is there
   print CURDIR$      'This fails and can be trapped
   OPEN "A:\temp.dat" for output as #1 'This fails and can be trapped
   close
   chdrive("B:")      'This works, since the drive really is there
   print CURDIR$      'This fails and can be trapped
   OPEN "B:\temp.dat" for output as #1 'This fails and can be trapped
   close
   end

   ErrorTrap:
     PRINT
     PRINT ERRORS
     PRINT "The drive either does not have a disk"
     PRINT "inserted or the drive door is open."
     PRINT
     RESUME NEXT

In summary:

1. In version 1.0, a sysmodal dialog would have occurred on the
CURDIR$ statement and the OPEN statement. This error ruins automated
tests since it can't be trapped. This no longer occurs. You can trap
and recover from these errors and your automated tests can continue
unattended.

2. If you are writing a program that must detect whether a disk is in
the drive (a setup program, for example), you can do this by using
CURDIR$ or OPEN, trapping the error, then prompting for a disk or
taking other appropriate action.


RUN Statement/Function
----------------------
The RUN function and statement have been modified to look in WIN.INI
for file extensions. If you run an extension (for example, .TXT) that
has an associated .EXE in WIN.INI, RUN will use the associated
extension and pass the string argument to it as the command line.


NOT (!) Operator
----------------
Using the NOT operator (!) with any of the W(type)SetClass procedures
makes no sense and can actually cause problems. Therefore, this
operator is no longer supported, and will cause the following error
if it is used with any W(type)SetClass procedure.

	ERR_NOT_OPERATOR_NOT_ALLOWED  = 33

The class name "NOT (!) operator" is supported only by WFndWndC() and 
WFndWndWaitC().


Test Trap Additions, Corrections, and Changes
---------------------------------------------
For information on Microsoft Test event traps, please see the 
file README.TXT in the V2SAMPLE\TRAPS subdirectory.


======================
PART 4:  Miscellaneous
======================

Using MS-DOS Boxes on the Novell Network
----------------------------------------
If you are using the Novell network and experience intermittent
problems using an MS-DOS box, please change or add the following
line in your SYSTEM.INI 386enh section.

	[386enh]
	TimerCriticalSection = 5000

The SYSTEM.INI file is located in your Windows directory.


Test Talk Issues 
----------------

o  Procedures Fail when NETBIOS is not Available

   The Test Talk procedurss now fail when NETBIOS is not available. 
   There is no error message; the routines simply do nothing or 
   functions return FALSE. If Test Talk scripts don't appear to be 
   working, you can call NetBIOSAvailable to see if this is the problem. 
   See the description of NetBIOSAvailable in Part 2. 

o  Declarations are Not Included in DECLARES.INC

   Including the precompiled header DECLARES.INC (built as part of the
   setup process) in your script doesn't pull in the Test Talk
   declarations and constants. This is because several routines in
   TESTHOST.DLL and TESTSTAT.DLL have the same names. To use 
   Test Talk, you must $DEFINE either TESTHOST or TESTSTAT and include
   MSTEST.INC, rather than using DECLARES.INC. You can also build your
   own precompiled headers for the host and station scripts (one header
   for host scripts and another for station scripts).

o  "Setup" Functions

   Three functions in the Test Talk DLLs are considered "setup" 
   functions:

	NetBiosAvailable(), SetLanaNum(), and SetMachineName()

   You must call these at the beginning of your script, before you call
   JoinGroup(). After you have joined a group, all three of these
   functions will return FALSE. While you belong to a group, you can't
   change the lananum or machine name.


Callbacks as Parameters
-----------------------
If a script gives the address of a routine (a callback) to a DLL
procedure, and that procedure takes SINGLE or DOUBLE parameter types,
it is the caller's responsibility to pass those values by reference.

All TestBasic procedures expect their parameters by reference, which
means a pointer to the data rather than the data itself. The only two
exceptions are:

   INTEGER and LONG, which are special cases to be passed by value
      from callbacks 
   STRING, which is converted to a temporary variable-length 
      string and essentially passed by value

Incorrect use of parameters in callbacks will cause your script to crash.


