PCjs Machines

Home of the original IBM PC emulator for browsers.

Logo

Microsoft QuickBASIC 4.00

A machine with QuickBASIC 4.00 (Disk 1) loaded in drive A: is provided below, along with Directory Listings of the original 720Kb diskettes.

[PCjs Machine "ibm5170-msdos320"]

Waiting for machine "ibm5170-msdos320" to load....

Directory of MS QuickBASIC 4.00 (Disk 1)

 Volume in drive A has no label
 Directory of A:\

LIB      EXE     35211   9-23-87  12:55p
QB       HLP     48404   9-28-87   4:27p
LINK     EXE     64783  10-12-87   6:48a
SETUP    BAT      1407  10-08-87  10:03a
SETUP1   BAT      2427  10-08-87  10:03a
README   DOC     17269  10-08-87   1:18p
BC       EXE     95005  10-08-87   5:57p
BRUN40   EXE     76816  10-08-87   5:57p
BRUN40   LIB     20617  10-08-87   5:57p
QB       EXE    230048  10-10-87  12:05a
PACKING  LST     10854  10-08-87   8:21a
       11 file(s)     602841 bytes
                      120832 bytes free

Directory of MS QuickBASIC 4.00 (Disk 2)

 Volume in drive A has no label
 Directory of A:\

SORTDEMO BAS     21410  10-04-87   3:11p
BQLB40   LIB     23763  10-08-87   5:57p
BCOM40   LIB    209373  10-08-87   5:57p
QB       LIB      2075  10-06-87   4:29p
QB       QLB      5316  10-06-87   4:29p
FIXSHIFT COM       690  10-06-87  10:49a
REMLINE  BAS     10881  10-04-87   3:12p
TORUS    BAS     27420  10-04-87   3:12p
DEMO1    BAS      1915   9-29-87   7:08p
ABSOLUTE ASM      4410   9-24-87   4:54p
INTRPT   ASM     14838   9-24-87   4:54p
QBHERC   COM      6704   9-24-87  10:01a
NOCOM    OBJ       318   9-17-87   3:13a
NOEM     OBJ      2138   9-17-87   1:01a
DEMO3    BAS      2015   9-16-87   2:58p
DEMO2    BAS      2019   9-16-87   2:58p
MOUSE    COM     14455   8-21-87   6:56p
QB       PIF       369   8-18-87   1:45p
QB       BI       2005   6-18-87   8:11a
SOURCE       <DIR>       1-01-80   1:00a
       20 file(s)     352114 bytes

 Directory of A:\SOURCE

.            <DIR>       1-01-80   1:00a
..           <DIR>       1-01-80   1:00a
INDEX    BAS      9975   9-22-87  11:05p
CAL      BAS      5429   9-22-87  11:05p
CUBE     BAS       726   9-22-87  11:05p
EDPAT    BAS      6090   9-22-87  11:05p
MANDEL   BAS      5864   9-22-87  11:05p
SINEWAVE BAS       884   9-22-87  11:05p
BAR      BAS      6152   9-22-87  11:05p
PALETTE  BAS      1720   9-18-87   3:11p
BALLPSET BAS      2768   9-22-87  11:05p
WHEREIS  BAS      4791   9-22-87  11:05p
CRLF     BAS      4345   9-22-87  11:05p
BALLXOR  BAS      1846   9-22-87  11:05p
COLORS   BAS      1212   9-22-87  11:05p
FILERR   BAS      2864   9-22-87  11:05p
PLOTTER  BAS      1530   9-22-87  11:05p
STRTONUM BAS      1015   9-22-87  11:05p
TERMINAL BAS      2226   9-22-87  11:05p
CHECK    BAS      1638   9-22-87  11:05p
QLBDUMP  BAS      3025   9-22-87  11:05p
SEARCH   BAS      1702   9-18-87   3:11p
FLPT     BAS      2232   9-11-87  11:07p
TOKEN    BAS      1269   9-22-87  11:05p
ENTAB    BAS      2663   9-22-87  11:05p
HIDE     BAS      1573   9-22-87  11:05p
       26 file(s)      73539 bytes

Total files listed:
       46 file(s)     425653 bytes
                      283648 bytes free

README.DOC

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

        (C) Copyright Microsoft Corporation, 1987

THIS FILE CONTAINS IMPORTANT INFORMATION CONCERNING VERSION 4.0	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 and Using Microsoft QuickBASIC	manual.

    2	Information about additions and	changes	to the
        BASIC Language Reference manual

    3	Information about additions and	changes	to the
        Programming in BASIC: Selected Topics manual

    4	Using your Mouse with QuickBASIC

    5	Using QuickBASIC with 3.5-inch floppy disks

    6	Supplementary information on mixed-language programming

    7	Using Btrieve with QuickBASIC

===< Part 1: Changes for Learning and Using Microsoft QuickBASIC >===========

Page	Correction
----	----------
---	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.	Disk 3 (disk 2,	if you are using 3.5-inch disks) 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 appropriate actions. FIXSHIFT
    takes about 450	bytes of memory. Except	for the	BIOS bug, it has no
    effect on other	programs you run.

---	QuickBASIC Version 4.0 supports	Hercules (R) display adapters.
    See the	entry for the SCREEN statement in Part 2, below.

xxii	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
    mono 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.

11	Suggestions for	using QuickBASIC with a	single-floppy system:

        Disk 1
        ======
        QB.EXE
        Your program source file
        (Optional: Operating system files)
        (Optional: QB.QLB)

        Disk 2
        ======
        BC.EXE
        LINK.EXE
        LIB.EXE
        BRUN40.EXE
        BRUN40.LIB

        Disk 3
        ======
        BCOM40.EXE

    When you make executable files and Quick libraries from	within the
    environment, you have to swap the disks	in and out of your disk
    drive to make the proper programs and libraries	available. When
    specific files cannot be found on the currently	inserted disk,
    you will see the prompt "Cannot find file <filename>." Before you
    switch disks, type B: and press	ENTER. (You can	do this	because,
    even though you	do not have a physical drive B,	DOS recognizes a
    logical	drive B.) Insert the appropriate disk when prompted. Note
    that when the linker prompts for a path, you must also include the
    name of	the file for which it is searching.

12	See Part 4 of this file	for additional information on installing
    and using your Mouse with QuickBASIC.

--	There is a new option to LINK.EXE

    Option:	 /NOE[XTDICTIONARY]

    If the linker suspects that a public symbol has	been redefined,	it
    prompts	you to link again with the /NOE	option.	When you do so,	it
    searches the individual	object files, rather than "dictionaries" it
    has created, to	resolve	conflicts. For example,	when linking a
    program	with NOEM.OBJ or NOCOM.OBJ, you	must use the /NOE option.

--	NOEM.OBJ is a supplied object file. It allows stand-alone executable
    files compiled with the	/O option to be	substantially smaller when
    run on machines	equipped with a	math coprocessor (8087 or 80287).
    Note that programs linked with NOEM.OBJ	do not run on machines that
    do not have a math coprocessor.	If all your stand-alone	executable
    files are always run on	machines with coprocessors, you	can use	the
    following method to change the library that contains floating-point
    emulation routines (BCOM40.LIB)	to produce smaller executable files:

        LIB BCOM40.LIB -QB4EM.OBJ+NOEM.OBJ;

    This command replaces the emulator math	support	in the stand-alone
    run-time library with support specific to the coprocessor.

    Alternatively, you can explicitly link NOEM.OBJ	from the command
    line on	a case-by-case basis.  For example, to create PROG.EXE
    using NOEM.OBJ,	compile	PROG.BAS with the /O option (either from
    within QuickBASIC or from the command line), then link as follows:

        LINK PROG.OBJ+NOEM.OBJ/NOE;

245	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.0, this causes a "duplicate definition" error.

===< Part 2: Changes for BASIC Language	Reference >==========================

Page	Correction
----	----------
18	The program FLPT.BAS, as printed in the	manual,	produces a run-time
    error. The program has been corrected in the on-disk version.
    See the	\SOURCE	directory on disk 3 (or	disk 2 if you are using
    3.5 inch disks).

84	The description	of CALL	ABSOLUTE says the file ABSOLUTE.OBJ must be
    linked with the	program. This file is no longer	supplied. Link with
    QB.LIB instead.

122	String concatenation is	not permitted in a CONST statement.

373	The SCREEN statement now includes mode 3 for Hercules display
    adapters. The following	is a brief summary of screen mode 3.
    See your Hercules documentation	for details.

        - QuickBASIC supports Hercules Graphics	Card, Graphics
        Card Plus, InColor Card, and 100% compatibles

        - You must use a monochrome monitor

        - Hercules text	mode is	SCREEN 0; Hercules Graphics mode
        is SCREEN 3.

        - You must load	the Hercules driver (QBHERC.COM) before	running
        your program.	If the driver is not loaded, SCREEN 3 statement
        gives	an "Illegal function call" error message. Type QBHERC
        to load the driver.

        - Text dimensions are 80x25 (9x14 character box); bottom
        2 scan lines of 25th row are not visible.

        - Resolution is	720x348	pixels,	monochrome.

        - Number of screen pages supported is 2.

        - The PALETTE statement	is not supported.

        - In order to use the Mouse, you must follow special
        instructions for Hercules cards in the Microsoft Mouse
        Programmer's Reference Guide. (This must be ordered
        separately; it is not	supplied with either the QuickBASIC
        or the Mouse package.)

477		- The "Advanced feature unavailable" error message may occur
        if you are using DOS Version 2.1 when	trying to use a	fea-
        ture supported only in later versions	(i.e. file locking).

484		- The "Duplicate definition" error message also	occurs if you
        have a SUB or	FUNCTION procedure with	the same name as a
        variable. In previous	versions, this did not cause an	error.

513		- Message 2024 ("Name : symbol multiply defined, use /NOE")
        should be numbered 2044

--------< New or Revised Error Messages	>--------------------------------

Error Number	Explanation
------------	-----------

L1003		New message: "/QUICKLIB, /EXEPACK incompatible"
        You specified both options, /QUICKLIB and /EXEPACK, but
        these two options cannot be used together.

L2024		Message	should read: "<name> : symbol already defined"
        Explanation: The linker	has found a public-symbol
        redefinition. Remove extra definition(s).

L2043		Message	should read: "Quick library support module missing"
        You did	not specify, or	LINK could not find, the object
        module or library required for creating	a Quick	library.
        In the case of QuickBASIC, the library provided	is BQLB40.LIB

L4003		This message should be deleted from documentation.

U4157		LIB warning message: "Insufficient memory, extended
        dictionary not created."

U4158		LIB warning message: "Internal error, extended dictionary
        not created."
        Both of	these LIB warnings just	indicate that LIB was unable
        to create the extended dictionary. The library is still
        valid, but the linker cannot take advantage of extended
        dictionaries to	link faster.

===< Part 3: Changes for Programming in	BASIC: Selected	Topics >============

141		In the "Information Returned" column for the LOC function, the
        description should read: "The amount of space remaining (in
        bytes) in the output buffer". (Note that this is a change from
        the behavior of	LOF in previous	versions of QuickBASIC).

===< Part 4: Using your	Mouse with QuickBASIC >=============================

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

    QuickBASIC Version 4.0 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.11 is	supplied with QuickBASIC Version 4.0.

    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. 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.0, 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, and using	VARPTR on this
    string variable	just prior to calling Mouse function call 22 or	23.

===< Part 5: Using QuickBASIC with 3.5-inch Floppy Disks >=============

    If you have	two 3.5-inch floppy-disk drives

    Copy the files from the	distribution disks to three other disks,
    as follows:

        Disk 1:	All files from distribution disk 1, plus all BRUN40
        and BQLB files appearing on distribution disk 2

        Disk 2:	BCOM40.LIB, BC.EXE, LINK.EXE, LIB.EXE

        Disk 3:	BASIC source files, Quick libraries, and QB.QLB

    Most of	the time you can just use disks	1 and 3, with disk 1 in
    drive A	and disk 3 in drive B. When you	make a Quick library or
    an executable file to run from DOS, you	will see the prompt:

        Cannot find file <filename>

    Insert disk 2 in drive A and press ENTER. If the program requires
    a Quick	library, make sure both	the Quick library and the corresond-
    ing stand-alone	(.LIB) library are on the disk in drive	B.

    If you have	only a single 3.5-inch floppy disk drive

    Prepare	disks 1, 2, and	3 as with a 2-drive system. However, when
    you see	the prompt "Cannot find file <filename>", type B: and press
    ENTER before inserting the proper disk.	(You can do this because,
    even though you	do not have a physical drive B,	DOS recognizes a
    logical	drive B.) Insert the appropriate disk when prompted. Note
    that when the linker prompts for a path, you must also include the
    name of	the file for which it is searching.

===< Part 6: 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 runtime 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 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.

===< Part 7: Using Btrieve with	QuickBASIC >=========================

    If you use Btrieve with	QuickBASIC, you	must make a small change to
    your programs for QuickBASIC Version 4.0. 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 Version 4.0, 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

    Your programs should function correctly	with Btrieve with this change.