		    "README.DOC" File
       Release Notes for MICROSOFT(R) QuickBASIC Version 4.5 for
       IBM(R) Personal Computers and Compatibles

	     (C) Copyright Microsoft Corporation, 1988

THIS FILE CONTAINS IMPORTANT INFORMATION CONCERNING VERSION 4.5	OF
MICROSOFT(R) QuickBASIC. PLEASE	READ THE ENTIRE	FILE BEFORE USING
QuickBASIC.

This file has seven parts:

  PART	     CONTENTS


  1	     Information about additions and changes to	the
	     Learning to Use Microsoft QuickBASIC

  2	     Information about additions and changes to	the
	     manual Programming	in BASIC

  3	     Using your	Mouse with QuickBASIC

  4	     Supplementary information on mixed-language programming

  5	     Using Btrieve with	QuickBASIC

  6	     Using the DOS 3.2 patch for math accuracy

  7	     Miscellaneous information about using QuickBASIC

===< Part 1: Learning to Use Microsoft QuickBASIC >

No entries yet for this	part

===< Part 2: Programming in BASIC >

No entries yet for this	part

===< Part 3: Using Your	Mouse with QuickBASIC >

--------------<	New Mouse Driver for Use with QuickBASIC >------------------

	QuickBASIC Version 4.5 can be used with	any mouse that is 100%
	compatible with	the Microsoft Mouse. However, you must use a
	Microsoft Mouse	driver Version 6.00 or later. Earlier versions may
	cause unpredictable behavior when used with QuickBASIC.	MOUSE.COM,
	Version	6.24 is	supplied with QuickBASIC Version 4.5.

	Especially if you are writing programs that use	the mouse, you
	should use the supplied	version	of the mouse driver when working in
	QuickBASIC. Previous versions have included MOUSE.SYS, which is
	installed by including the line	DEVICE=MOUSE.SYS in your CONFIG.SYS
	file. This version of QuickBASIC includes MOUSE.COM, which is not
	installed via CONFIG.SYS. To install MOUSE.COM,	just type MOUSE	at
	the DOS	prompt.	To include MOUSE.COM automatically when	your machine
	boots, make sure MOUSE.COM is in your search path, then	put the	line

		MOUSE

	in your	AUTOEXEC.BAT file. To free up memory, you can remove the
	mouse driver at	any time by typing MOUSE OFF at	the DOS	prompt.
	This will restore between 9K and 10.5K of memory with Version 6.11.

--------< Using	Mouse Function Calls from QuickBASIC Programs >------------

	If you are programming for the Microsoft Mouse,	you should obtain
	the Microsoft Mouse Programmer's Reference Guide and the library
	MOUSE.LIB that comes with it. (These are not included in QuickBASIC
	or Mouse package and must be ordered separately). Most of the
	information in the Mouse Programmer's Reference Guide applies
	directly to QuickBASIC Version 4.5. However, the following additional
	restrictions must be observed:

	Certain	Mouse function calls (Functions	9 & 16)	require	you to set
	up an integer array and	pass the address of the	array to the mouse
	driver.	For previous versions, the only	restriction on this array
	was that it had	to be $STATIC (the default array type).	In QuickBASIC
	Version	4.5, however, the array	also must be in	a COMMON block if you
	will be	making the Mouse function call from within the QuickBASIC
	environment.  In addition, it is recommended that the support code
	for the	Mouse call be in a Quick library or linked into	the
	executable file	when making Mouse function calls from QuickBASIC.

	To produce a Quick library for using Mouse function calls from
	within the QuickBASIC environment, use the following command line
	(produces MOUSE.QLB):

		LINK MOUSE.LIB/QU,MOUSE.QLB,,BQLB40.LIB/NOE;

	An example from	PIANO.BAS (included with the Microsoft Mouse
	Programmer's Reference) for using Mouse function call 9:

		DEFINT A-Z
		DECLARE	SUB MOUSE (M1, M2, M3, M4)
		DIM Cursor(15, 1)
		COMMON Cursor() 'Ensures array data is in DGROUP
		.
		.  (set	up Cursor() for	mouse cursor shape desired)
		.
		M1 = 9:	M2 = 6:	M3 = 0
		CALL MOUSE(M1, M2, M3, VARPTR(Cursor(0,	0)))

	In addition to the above, note that Mouse function calls 21-23
	require	dynamically allocated storage out of the home data segment.
	The recommended	way to do this is to allocate space in a dynamic
	string variable	based on the return value from function	call 21,
	using the STRING$ or SPACE$ function. Then use VARPTR on this string
	variable just prior to calling Mouse function call 22 or 23.

===< Part 4: Supplementary Information on Mixed-Language Programming >

--------< Linking from within QuickC or	with QCL >--------------------------

	Microsoft QuickC and the QCL command both set the /NOI linker
	by default. Therefore, you should not link from	within QuickC, or
	with QCL, when your program contains modules written in	a case-
	insensitive language such as BASIC. Use	LINK to	link your program
	from the command line.

--------< Pascal and Fortran Modules in	QuickBASIC Programs >---------------

	Modules	compiled with Microsoft	Pascal or Fortran can be linked	with
	BASIC programs,	as described in	the Microsoft Mixed-Language
	Programming Guide. They	can also be incorporated in Quick libraries.
	However, QuickBASIC programs containing	code compiled with Microsoft
	Pascal must allocate at	least 2K near-heap space for Pascal. This can
	be done	by using the DIM statement to allocate a static	array of 2K or
	greater	in the NMALLOC named common block, for example,	as follows:

	DIM name%(2048)
	COMMON SHARED /NMALLOC/	name%()

	The Pascal run-time assumes it always has at least 2K of near-heap
	space available. If the	Pascal code cannot allocate the	required
	space, QuickBASIC may crash. This applies to Pascal code in Quick
	libraries as well as Pascal code linked	into executable	files. The
	situation is similar for Fortran I/O, which also requires near
	buffer space, and which	can be provided	by the same means as the
	Pascal near malloc space.

--------< STATIC Array Allocation >---------------------------------------

	If you are writing assembly-language modules for use in	QuickBASIC
	programs, see Section 2.3.3, "Variable Storage Allocation," in the
	BASIC test Language Reference. Assembly-language code should	not assume
	data is	in a particular	segment. To avoid problems, pass data using
	the SEG	or CALLS keywords, or use FAR pointers.	Alternatively, you
	can declare all	arrays dynamic (still using far	pointers) since
	dynamic	arrays are handled identically by BC and within	QuickBASIC.

--------< Quick	Libraries with Leading Zeros in	the First Code Segment >--

	A Quick	library	containing leading zeros in the	first CODE segment
	is invalid, causing the	message "Error in loading file <name> -
	Invalid	format" when you try to load it in QuickBASIC. For example,
	this can occur if an assembly-language routine puts data that is
	initialized to zero in the first CODE segment, and it is subsequently
	listed first on	the LINK command line when you make a Quick library.
	If you have this problem, do either of the following:
	(1) link with a	BASIC module first on the LINK command line, or
	(2) make sure that, in whatever	module comes first on the LINK
	command	line, the first	code segment starts with a non-zero byte.

--------< References to	DGROUP in Extended Run-time Modules >-------------

	For mixed-language programs that use the CHAIN command,	you should
	make sure that any code	built into an extended run-time	module does not
	contain	any references to DGROUP. (The CHAIN command causes DGROUP to
	move, but does not update references to	DGROUP.) This rule applies
	only to	mixed-language programs; because BASIC routines	never refer
	to DGROUP, you can ignore this caution for programs written entirely
	in BASIC.

	To avoid this problem, you can use the value of	SS, since BASIC	always
	assumes	that SS	coincides with DGROUP.

===< Part 5: Using Btrieve >

-------------------< Using Btrieve in OS/2 Protected Mode >--------------------

	In OS/2	protected mode,	a BASIC	program	that uses Btrieve must do a
	Btrieve	reset call (function 28) before	executing the CHAIN statement.
	The program must also reopen all Btrieve files when the	destination of
	the CHAIN starts to run.

--------------------< Using Btrieve with QuickBASIC >--------------------------

	If you use Btrieve with	QuickBASIC, you	must make a small change to
	your programs for QuickBASIC Version 4.5. Currently your programs
	contain	a statement that obtains the address of	the field buffer for
	an open	file. For example:

	    OPEN "NUL" AS #1
	    FIELD #1, 20 AS CITY$, 10 AS STATE$
	    FCB.ADDR% =	VARPTR(#1)  'This statement obtains the address

	In QuickBASIC Test Version 4.5, you should change the indicated statement
	to return the address of the first variable in your field buffer minus
	a constant, as follows:

	    OPEN "NUL" AS #1
	    FIELD #1, 20 AS CITY$, 10 AS STATE$
	    FCB.ADDR% =	SADD(CITY$) - 188 ' CITY$ is the first field
					  ' buffer variable

	The following example shows how	to obtain the same address for a
	user-defined type:

	    TYPE ADDRESS
		CITY AS	STRING * 20
		STATE AS STRING	* 10
	    END	TYPE

	    DIM	ADD1 AS	ADDRESS

	    FCB.ADDR% =	VARPTR(ADD1) - 188
	    ' or, you can use FCB.ADDR% = VARPTR(ADD1.CITY) - 188

	Your programs should function correctly	with Btrieve with this change.

===< Part 6: DOS 3.20 test Patch >

This information is important only if your system has ALL of the following
characteristics:

    1.	Uses MS-DOS test version 3.20
    2.	Boots from a hard disk drive
    3.	Has a math coprocessor (for instance, an 8087 chip)
    4.	Runs programs that use floating-point math

For systems that satisfy all of	the preceding conditions, you may be able to
eliminate floating-point math problems by installing a small patch in DOS. If
you are	not sure whether you need the patch, perform the following steps:

    1.	Copy the program PATCH87.EXE (included in this release)	to the root
	directory of your hard-disk drive.

    2.	Reboot your system from	the hard disk, and DO NOT PERFORM ANY FLOPPY-
	DISK OPERATIONS	after rebooting. It is very important that you avoid
	floppy-disk I/O	after rebooting, since that will affect	the reliability
	of the diagnostic test that you	are about to perform.

    3.	If necessary, use the CD command to move to the	root directory of your
	hard-disk drive.

    4.	Run the	PATCH87.EXE program by entering	this command at	the DOS	prompt:

	    PATCH87

    5.	The program performs a diagnostic test on your system to determine
	whether	it needs the DOS patch,	and if the patch is needed,
	whether	the patch can be installed successfully. If the	program	tells
	you that you need to install the DOS patch, and	that it	can be done,
	follow the procedure described in the next section.

    NOTE: The floating-point problem has been eliminated in versions of
    MS-DOS higher than 3.20. This includes MS-DOS versions 3.21	and 3.30.

If you performed the preceding test and	determined that	you should install the
DOS patch on your system, perform the following	steps:

    1.	Format a blank floppy disk. (Do	NOT use	the /s formatting option to
	transfer system	files to the disk.)

    2.	Use the	SYS command to copy IO.SYS and MSDOS.SYS from the root
	directory of your hard disk to the new floppy disk. For	instance, if
	you boot from drive C:,	you would enter	the following commands:

	    C:
	    SYS	A:

    3.	Use the	COPY command to	copy COMMAND.COM and SYS.COM to	the same
	floppy disk.

    4.	Use the	COPY command to	copy the program PATCH87.EXE (included in this
	release) to the	same floppy disk.

    5.	Change the current drive and directory to the floppy disk, by entering
	the following command:

	    A:

    7.	Install	the DOS	patch by entering the following	command:

	    PATCH87 /F

	WARNING: If you	experience any disk errors during steps	2 through 7,
	do NOT proceed with step 8. Reboot from	your hard disk and repeat the
	entire process.

    8.	If you have not	experienced any	errors,	use the	SYS command to transfer
	the files IO.SYS and MSDOS.SYS from the	floppy disk back to your hard
	disk. For instance, if the boot	directory of your system is the	root
	directory of drive C:, you would enter the following command at	the DOS
	prompt:

	    A:
	    SYS	C:

    9.	The DOS	patch has been installed. Reboot the system.

===< Part 7: Miscellaneous Information About Using QuickBASIC >

----------------------<	Using FIXSHIFT.COM Utility >-----------------------

	Some keyboards have an extra set of DIRECTION (i.e. arrow) keys, in
	addition to those on the numeric keypad. A bug in the ROM BIOS of
	some machines with these keyboards can interfere with the QuickBASIC
  editor. The Utilities	2 disk includes	a program, FIXSHIFT.COM, that
  fixes	this bug. If you have such a keyboard, run this	program	by typing
  FIXSHIFT. If your machine does not have the bug, FIXSHIFT displays a
  message telling you so. Otherwise FIXSHIFT prompts you for the proper
  actions. FIXSHIFT takes about	450 bytes of memory. Except for	the BIOS
  bug, it has no effect	on other programs you run.

----------------------<	Note on	VGA Display Adapter >----------------------

	If you install an IBM (R) Personal System/2 (TM) Video Graphics
	Array display adapter (VGA) in a non-PS/2 machine, the VGA adapter
	should be the only adapter in the system, and you should not use
	monochrome modes (SCREEN 10) if	you have a color monitor. Similarly,
	you should not use color modes (SCREEN 1, 2, 7,	8, 9, 11, 12, 13) if
	you have a monochrome monitor.

-------------------< Note on Using QuickBASIC with DOS 2.1 >----------------

	To use QuickBASIC with a two-floppy system under DOS 2.1, you must
	put a copy of COMMAND.COM on each disk containing an executable
	file ( a file with the .EXE extension).

-------------< PTR86, LOF, Naming SUB procedures and variables >------------

	PTR86 is no longer supported. Use VARSEG and VARPTR instead.
	Also, when used	with a communications device, LOF now returns the
	amount of space	remaining (in bytes) in	the output buffer. In
	previous versions this was returned in the input buffer. Also, note
	that a variable	and SUB	procedure could	have the same name in
	previous versions. In Version 4.5, this	causes a "Duplicate
	definition" error message.
