Home of the original IBM PC emulator for browsers.
The following document is from the Microsoft Programmer’s Library 1.3 CD-ROM.
Microsoft QuickBASIC: Learning to Use Microsoft QuickBASIC
════════════════════════════════════════════════════════════════════════════
Microsoft(R) QuickBASIC: Learning to Use Microsoft QuickBASIC
For IBM(R) Personal Computers and Compatibles
════════════════════════════════════════════════════════════════════════════
Information in this document is subject to change without notice and does
not represent a commitment on the part of Microsoft Corporation. The
software described in this document is furnished under a license agreement
or nondisclosure agreement. The software may be used or copied only in
accordance with the terms of the agreement. It is against the law to copy
the software on any medium except as specifically allowed in the license
or nondisclosure agreement. No part of this manual may be reproduced or
transmitted in any form or by any means, electronic or mechanical,
including photocopying and recording, for any purpose without the express
written permission of Microsoft.
(C)Copyright Microsoft Corporation, 1988. All rights reserved.
Simultaneously published in the U.S. and Canada.
Printed and bound in the United States of America.
Microsoft, MS, MS-DOS, CodeView, and GW-BASIC are registered trademarks of
Microsoft Corporation.
IBM is a registered trademark of International Business Machines
Corporation.
Intel is a registered trademark of Intel Corporation.
Lotus and 1-2-3 are registered trademarks of Lotus Development
Corporation.
WordStar is a registered trademark of MicroPro International Corporation.
────────────────────────────────────────────────────────────────────────────
Contents
Introduction
Instant Feedback
Instant Help
Hardware Requirements
The QuickBASIC Package
Printed Documentation
On-Line Documentation
Document Conventions
Requesting Assistance
PART 1 GETTING STARTED
Chapter 1 Setting Up Microsoft(R) QuickBASIC
The Setup Program
The Setup Main Menu
Installation
QB Express
Getting Into QuickBASIC
If You Are a Novice Programmer
If You Already Know BASIC
If You Use a Mouse
Chapter 2 Using Menus and Commands
Starting QuickBASIC
The QuickBASIC Environment
The Menu Bar
The Reference Bar
Opening Menus
QuickBASIC's On-Line Help
Using On-Line Help
The Help Menu
Choosing Commands
Using Dialog Boxes
Anatomy of a Dialog Box
Displaying a Dialog Box
Other Dialog-Box Features
Issuing Commands Directly
Shortcut Keys for Commands
Other Key Combinations
Exiting from QuickBASIC
For More Information
Chapter 3 QuickBASIC's Windows
Windows Available with Easy Menus
The View Window
Loading Programs in the View Window
Moving the Cursor
Scrolling Text
Starting a New Program
Changing Window Sizes
QuickBASIC's Other Windows
Moving between Windows
Executing Code in the Immediate Window
Monitoring Variables with the Watch Window
The Help Window
Context-Sensitive Help
Hyperlinks
Exiting from QuickBASIC and Saving Programs
For More Information
Chapter 4 Interlude: BASIC for Beginners
What is a Program?
Comments
Displaying Words and Numbers on the Screen
Variables
Storing Data in Memory
Variable Types
Integer Variables
Floating-Point Variables
String Variables
Assigning Values to Variables
Calculations
Integer Division and the Remainder Operator
Precedence of Operations
Math Functions
Expressions
Displaying Variables and Expressions
Entering Data with the INPUT Statement
Arrays of Variables
Declaring Arrays
Specifying Array Elements
Logical Relations Used in Decision-Making
Relational Operators
Boolean Expressions
Compound Expressions
Using Logical Statements to Control Program Flow
Repeating Program Operations
The FOR...NEXT Loop
The DO...LOOP
The DO WHILE Loop
The DO UNTIL Loop
Writing a Simple BASIC Program
For More Information
Books about BASIC
Books about DOS
PART 2 HANDS ON WITH QUICKBASIC
Chapter 5 The QCARDS Program
Building QCARDS
Loading a Program When You Start QuickBASIC
A Quick Tour of QCARDS
The QCARDS Program
Declarations and Definitions
Comments
Statements Following the END Statement
Calling QCARDS Procedures from the Immediate Window
Breaking an Unconditional Loop from QCARDS
The Module-Level Code
Structured Programming with Procedures
A Profile of the Parts of the Program
Defining a Procedure in QCARDS
Saving Edited Text
For More Information
Chapter 6 Editing in the View Window
The Smart Editor
Automatic Formatting
Syntax Checking
Errors Detected When You Run Your Program
Help for Error Messages
Overtyping the Error
Automatic Procedure Declarations
Working with Selected Text Blocks
Cutting or Copying Selected Text
Pasting a Text Block
Manipulating Selected Text
Searching and Replacing Text
Defining the Symbolic Constant
Replacing Multiple Occurrences of Text
Checking Your Work
For More Information
Chapter 7 Programming with On-Line Help
Using On-Line Help to Construct Statements
On-Line Help for Keywords
Hyperlinks in On-Line Help
On-Line Help for Program Symbols
Printing Screens from On-Line Help
For More Information
Chapter 8 Using Example Code from On-Line Help
Copying Example Code from On-Line Help
Indenting a Block of Code
Copying Large Code Blocks from On-Line Help
Editing the Block Copied from On-Line Help
Finishing the QCARDS Code
Using QCARDS
For More Information
Chapter 9 Debugging While You Program
Debugging Commands
Debug-Menu Commands
Debugging Commands on the Run Menu
Function Keys Used in Debugging
Debugging a Procedure
Learning about Procedures
Continuing a Suspended Program
Isolating a Bug
Closing the Watch Window
Automatic Procedure Declarations
Creating a Stand-Alone Executable File
Learning about QuickBASIC's Other Menu Items
For More Information
PART 3 QUICKBASIC MENUS AND COMMANDS
Chapter 10 Getting Around in QuickBASIC
10.1 Starting QuickBASIC
10.1.1 The QB Command
10.1.2 The /NOHI Option
10.1.3 The QuickBASIC Screen
10.2 Opening Menus and Choosing Commands
10.2.1 Keyboard Technique
10.2.2 Using Shortcut Keys
10.3 Using Dialog Boxes
10.4 Using Windows
10.4.1 Window Types
10.4.2 Splitting the View Window (Full Menus Only)
10.4.3 Changing the Active Window
10.4.4 Changing Window Size
10.4.5 Scrolling in the Active Window
10.5 Using the Immediate Window
10.5.1 Statements Not Allowed
10.5.2 Doing Calculations
10.5.3 Testing Screen Output
10.5.4 Invoking Procedures
10.5.5 Changing the Values of Variables
10.5.6 Simulating Run-Time Errors
10.6 Using the Watch Window
10.7 Using the Mouse
10.8 Using On-Line Help
10.8.1 Help Features
10.8.2 Hyperlinks
10.8.3 Moving in Help Windows
10.8.4 Help Files
10.8.5 Hard-Disk System
10.8.6 Removable-Disk System
Chapter 11 The File Menu
11.1 New Program Command
11.2 Open Program Command
11.2.1 Specifying a File
11.2.2 Listing Directory Contents
11.3 The Merge Command (Full Menus Only)
11.4 Save Command (Full Menus Only)
11.5 Save As Command
11.6 Save All Command (Full Menus Only)
11.7 Create File Command (Full Menus Only)
11.8 Load File Command (Full Menus Only)
11.9 Unload File Command (Full Menus Only)
11.10 The Print Command
11.11 DOS Shell Command (Full Menus Only)
11.12 Exit Command
Chapter 12 Using the Editor
12.1 Entering Text
12.2 Selecting Text
12.3 Indenting text
12.4 Using Placemarkers in Text
12.5 The Smart Editor
12.5.1 When Is the Smart Editor On?
12.5.2 Automatic Syntax Checking
12.5.3 Error Messages
12.5.4 Automatic Formatting
12.6 Entering Special Characters
12.7 Summary of Editing Commands
Chapter 13 The Edit Menu
13.1 Understanding the Clipboard
13.2 Undo Command (Full Menus Only)
13.3 Cut Command
13.4 Copy Command
13.5 Paste Command
13.6 Clear Command (Full Menus Only)
13.7 New SUB Command (Full Menus Only)
13.7.1 Creating a New SUB Procedure
13.7.2 Default Data Types for Procedures
13.7.3 Changing a Procedure's Default Type
13.7.4 Saving and Naming Procedures
13.8 New FUNCTION Command (Full Menus Only)
Chapter 14 The View Menu
14.1 SUBs Command
14.2 Next SUB Command (Full Menus Only)
14.3 Split Command (Full Menus Only)
14.4 Next Statement Command (Full Menus Only)
14.5 Output Screen Command
14.6 Included File Command (Full Menus Only)
14.6.1 Nesting Include Files
14.6.2 Finding Include Files
14.7 Included Lines Command
Chapter 15 The Search Menu
15.1 Defining Target Text
15.2 Find Command
15.3 Selected Text Command (Full Menus Only)
15.4 Repeat Last Find Command (Full Menus Only)
15.5 Change Command
15.6 Label Command (Full Menus Only)
Chapter 16 The Run Menu
16.1 Start Command
16.2 Restart Command
16.3 Continue Command
16.4 Modify COMMAND$ Command (Full Menus Only)
16.5 Make EXE File Command
16.5.1 Creating Executable Files
16.5.2 Quick Libraries and Executable Files
16.5.3 Types of Executable Files
16.5.3.1 Programs that Use the Run-Time Module
16.5.3.2 Stand-Alone Programs
16.5.4 Run-Time Error Checking in Executable Files
16.5.5 Floating-Point Arithmetic in Executable Files
16.6 Make Library Command (Full Menus Only)
16.6.1 Unloading and Loading Modules
16.6.2 Creating Libraries
16.7 Set Main Module Command (Full Menus Only)
16.7.1 Changing the Main Module
16.7.2 The .MAK File
Chapter 17 Debugging Concepts and Procedures
17.1 Debugging with QuickBASIC
17.2 Preventing Bugs with QuickBASIC
17.3 QuickBASIC's Debugging Features
17.3.1 Tracing (Full Menus Only)
17.3.2 Breakpoints and Watchpoints
17.3.3 Watch Expressions
17.3.4 Watch Window
17.3.5 Immediate Window
17.3.6 Other Debugging Features
Chapter 18 The Debug Menu
18.1 Add Watch Command
18.2 Instant Watch Command
18.3 Watchpoint Command (Full Menus Only)
18.4 Delete Watch Command
18.5 Delete All Watch Command (Full Menus Only)
18.6 Trace On Command (Full Menus Only)
18.7 History On Command (Full Menus Only)
18.7.1 History Back
18.7.2 History Forward
18.8 Toggle Breakpoint Command
18.9 Clear All Breakpoints Command
18.10 Break on Errors Command (Full Menus Only)
18.11 Set Next Statement Command
Chapter 19 The Calls Menu (Full Menus Only)
19.1 Using the Calls Menu
19.2 Active Procedures
Chapter 20 The Options Menu
20.1 Display Command
20.2 Set Paths Command
20.3 Right Mouse Command (Full Menus Only)
20.4 Syntax Checking Command(Full Menus Only)
20.5 Full Menus Command
Chapter 21 The Help Menu
21.1 Index Command
21.2 Contents Command
21.3 Topic Command
21.4 Help On Help Command
Glossary
Figures
Figure 2.1 QuickBASIC Invocation Screen
Figure 2.2 The File Menu
Figure 2.3 Help Dialog Box for the Help Menu
Figure 2.4 Open Program Dialog Box
Figure 2.5 Display Dialog Box
Figure 2.6 Help on Output Screen Command
Figure 3.1 Windows Available with Easy Menus
Figure 3.2 Open Program Dialog Box
Figure 3.3 Output Screen for Code Lines
Figure 3.4 Immediate Window Showing Lines Just Entered
Figure 3.5 Placing Variables in the Watch Window
Figure 3.6 QuickSCREEN for PRINT Statement
Figure 3.7 Example Screen for PRINT Statement
Figure 3.8 Save As Dialog Box
Figure 4.1 Addresses in Memory
Figure 4.2 Array Created by the BASIC Statement DIM Price (4)
Figure 5.1 QCARDS' Interface
Figure 5.2 Modules and Procedures
Figure 5.3 SUBs Dialog Box
Figure 5.4 Save As Dialog Box
Figure 6.1 Error-Message Dialog Box
Figure 6.2 Error Message
Figure 6.3 Help on Error Message
Figure 6.4 Find Dialog Box
Figure 6.5 Change Dialog Box
Figure 6.6 Change, Skip, Cancel Dialog Box
Figure 7.1 QuickSCREEN for IF...THEN...ELSE Statement
Figure 7.2 Symbol Help for CardNum
Figure 7.3 Instant Watch Dialog Box
Figure 7.4 Print Dialog Box (Help)
Figure 8.1 Example Screen for DO...LOOP Statement
Figure 8.2 QuickSCREEN for SELECT CASE Statement
Figure 8.3 Code Showing Call to AsciiKey Procedure
Figure 9.1 Selecting the SELECT CASE Choice$ Block
Figure 9.2 DirectionKey Procedure in View Window
Figure 9.3 Restart Program Error Message
Figure 9.4 Setting a Breakpoint
Figure 9.5 Symbol Help for Symbolic Constant HOME
Figure 9.6 Error in Naming Symbolic Constant for the ENV
Key
Figure 9.7 Make EXE File Dialog Box
Figure 10.1 Top Half of QuickBASIC Invocation Screen
Figure 10.2 Bottom Half of QuickBASIC Invocation
Screen
Figure 10.3 The File Menu
Figure 10.4 Load File Dialog Box
Figure 10.5 Display Dialog Box
Figure 10.6 QuickBASIC Screen with Five Windows Open
Figure 10.7 Immediate Window
Figure 10.8 Simulated Run-Time Error
Figure 10.9 Watch Window
Figure 10.10 Help on the PRINT Statement
Figure 10.11 Dialog Box for Missing Help File
Figure 11.1 Open Program Dialog Box
Figure 11.2 Merge Dialog Box
Figure 11.3 Save Dialog Box
Figure 11.4 Create File Dialog Box
Figure 11.5 Load File Dialog Box
Figure 11.6 Unload File Dialog Box
Figure 11.7 Print Dialog Box
Figure 11.8 Exit Dialog Box
Figure 12.1 Syntax Error Message
Figure 12.2 Initial Help Screen on the OPEN Keyword
Figure 13.1 New SUB Dialog Box
Figure 13.2 New FUNCTION Dialog Box
Figure 14.1 New SUBs Dialog Box
Figure 14.2 Move Dialog Box
Figure 15.1 Find Dialog Box
Figure 15.2 Change Dialog Box
Figure 15.3 Change, Skip, Cancel Dialog Box
Figure 15.4 Label Dialog Box
Figure 16.1 Modify COMMAND$ Dialog Box
Figure 16.2 Make EXE File Dialog Box
Figure 16.3 Make Library Dialog Box
Figure 16.4 Set Main Module DIalog Box
Figure 18.1 Add Watch Dialog Box
Figure 18.2 Instant Watch Dialog Box
Figure 18.3 Watchpoint Dialog Box
Figure 18.4 Delete Watch Dialog Box
Figure 19.1 Sequence of Procedures on Calls Menu
Figure 20.1 Display Dialog Box
Figure 20.2 Set Paths Dialog Box
Figure 20.3 Right Mouse Dialog Box
Figure 21.1 Index Entries for Help
Figure 21.2 Table of Contents for Help
Figure 21.3 Help on the FOR...NEXT Statement
Figure 21.4 Help on Help Screen
Tables
Table 10.1 QuickBASIC Shortcut Keys
Table 10.2 Scrolling
Table 10.3 Mouse Commands
Table 10.4 Help Keys
Table 12.1 QuickBASIC Indentation Controls
Table 12.2 Editing Commands
Table 15.1 Search Options
Table 15.2 Search Restrictions
Table 17.1 Additional Debugging Features
QCARDS Code Entries
QCARDS Code Entry 1
QCARDS Code Entry 2
QCARDS Code Entry 3
QCARDS Code Entry 4
QCARDS Code Entry 5
QCARDS Code Entry 6
QCARDS Code Entry 7
QCARDS Code Entry 8
QCARDS Code Entry 9
QCARDS Code Entry 10
QCARDS Code Entry 11
Optional QCARDS Code Entry 1
Optional QCARDS Code Entry 2
Optional QCARDS Code Entry 3
QCARDS Code Entry 12
QCARDS Code Entry 13
QCARDS Code Entry 14
QCARDS Code Entry 15
QCARDS Code Entry 16
QCARDS Code Entry 17
QCARDS Code Entry 18
QCARDS Code Entry 19
QCARDS Code Entry 20
QCARDS Code Entry 21
QCARDS Code Entry 22
Optional QCARDS Code Entry 4
QCARDS Code Entry 23
QCARDS Code Entry 24
QCARDS Code Entry 25
QCARDS Code Entry 26
QCARDS Code Entry 27
QCARDS Code Entry 28
QCARDS Code Entry 29
QCARDS Code Entry 30
────────────────────────────────────────────────────────────────────────────
Introduction
Microsoft(R) QuickBASIC is a programming environment that includes all the
tools you need for writing, editing, running, and debugging programs.
These tools are integrated with a powerful version of the BASIC
programming language and an on-line help system that explains everything
about both the environment and the language.
Instant Feedback
Microsoft QuickBASIC speeds your programming and learning by giving
virtually instant feedback for your ideas. When you write a program, you
enter "code" (sequences of QuickBASIC statements) that describe what you
want the program to do. QuickBASIC checks the validity of each line as you
enter it, then immediately translates your code into a form the computer
can execute. If your code contains errors that make it impossible to
translate, QuickBASIC specifies the error and helps you correct it. As
soon as your code is correct, you can press a key and immediately run it.
If your code doesn't run as you expect, you can use QuickBASIC's
sophisticated debugging tools to track and correct flaws in your code's
logic.You get the speed and power of a compiled language without the
tedious cycles of separate editing, compiling, running, and debugging.
Instant Help
Microsoft QuickBASIC's on-line help system includes two parts. The
Microsoft QB Advisor contains explanations and runnable examples of every
statement in the QuickBASIC language. Also, you can get on-line help for
every aspect of the QuickBASIC environment, all symbols you define in your
program, and error messages.
In this manual you will see how to get information on the following with
on-line help:
■ QuickBASIC statements and functions
■ Menu and dialog-box items and options
■ Special keys and key combinations for editing and debugging
■ How to correct errors in your program
■ Symbols you define in your programs
Hardware Requirements
Microsoft QuickBASIC requires an IBM Personal Computer or IBM(R)-PC
compatible with at least 384 kilobytes (K) of available memory and a
minimum of 720K disk-drive capacity. A hard disk and 640K of memory are
recommended for best performance.
The QuickBASIC environment fully supports any mouse that is compatible
with the Microsoft Mouse. See Section 10.7 for complete information on
using your mouse with QuickBASIC.
──────────────────────────────────────────────────────────────────────────
NOTE
Throughout this manual, the term "DOS" refers to both the MS-DOS(R) and
IBM Personal Computer DOS operating systems. The name of a specific
operating system is used when it is necessary to note features that are
unique to that system.
──────────────────────────────────────────────────────────────────────────
The QuickBASIC Package
The Microsoft QuickBASIC package includes two manuals, an extensive
on-line help system, example programs, and other on-line documentation.
The next sections describe the contents of the package.
Printed Documentation
Your Microsoft QuickBASIC package includes two manuals. This manual
discusses the QuickBASIC programming environment. The first two parts are
a tutorial on how to use QuickBASIC. The last part is a reference on
QuickBASIC menus and commands. The following list describes these parts in
more detail:
Part Content
──────────────────────────────────────────────────────────────────────────
"Getting Started" General description of how to use QuickBASIC and
a brief introduction to BASIC programming.
"Hands On with Tutorial introduction to the Easy-Menus version
QuickBASIC" of the QuickBASIC environment. The tutorial gives
you practice with editing, debugging, and on-line
help and guides you in creating your first
QuickBASIC application, QCARDS.BAS.
"QuickBASIC Menus and Reference to the QuickBASIC environment that
Commands" presents detailed information on each command on
QuickBASIC's Full Menus. Full Menus provide the
complete multiple-module functionality of
QuickBASIC. Use this section to extend your
knowledge after you feel comfortable with the
fundamentals of QuickBASIC.
"Glossary" Definitions of terms used in the documentation.
──────────────────────────────────────────────────────────────────────────
This manual provides the following information that you'll need to begin
programming with QuickBASIC:
■ The QuickBASIC environment
■ The QuickBASIC implementation of the BASIC language
■ The principles of programming
If you are new to programming, new to the BASIC language, or both, you
will need to learn the environment, the QuickBASIC version of the BASIC
language, and general programming skills. You should begin with Chapters
1-4 in Part 1, "Getting Started." If you already know how to program in
BASIC, you should be able to get right to programming after reading
Chapters 1-3 in Part 1.
In the tutorial in Part 2, "Hands On with QuickBASIC," you will practice
using some of the QuickBASIC environment's most exciting features. You'll
use the sophisticated editor, on-line help, and debugging features. When
you finish the tutorial, you will have built a useful database application
program, QCARDS.BAS.
The QuickBASIC package includes another manual, Programming in BASIC,
which discusses the following:
■ Specific, practical programming topics, each illustrated by extensive
programming examples
■ The action and syntax of each QuickBASIC statement and function with
tables listing the statements and functions by task groups
■ Information on topics such as converting interpreted BASIC programs to
run in QuickBASIC, changes in Version 4.5 from previous versions of
QuickBASIC, and compiling and linking from DOS
Use Programming in BASIC for in-depth information on programming topics
and a synopsis of the BASIC language.
On-Line Documentation
Microsoft QuickBASIC includes comprehensive on-line help and several disk
files that provide supplementary information and programming examples.
These are described in the following list:
╓┌─┌────────────────────────┌────────────────────────────────────────────────╖
Documentation Purpose
──────────────────────────────────────────────────────────────────────────
On-Line Help All information needed for programming in
QuickBASIC. When you use help commands within the
environment, QuickBASIC searches several files to
provide the information.
The file QB45QCK.HLP includes summaries and
syntax descriptions of each QuickBASIC statement
and function. The file QB45ADVR.HLP contains
comprehensive information on using each statement
Documentation Purpose
──────────────────────────────────────────────────────────────────────────
comprehensive information on using each statement
and function, including example code you can copy
and run. The file QB45ENER.HLP has explanations
of all environment menus, commands, dialog boxes,
and error messages.
README.DOC A file describing changes to QuickBASIC that
occurred after the manuals were printed.
PACKING.LST A file describing each file on the QuickBASIC
distribution disks.
LEARN.COM Microsoft QB Express, a computer-based training
program that gives an overview of QuickBASIC.
Sample programs All the programs from Programming in BASIC. Check
the file called PACKING.LST to locate them. Other
sample programs are also included. Many
demonstrate advanced programming techniques and
Documentation Purpose
──────────────────────────────────────────────────────────────────────────
demonstrate advanced programming techniques and
algorithms.
──────────────────────────────────────────────────────────────────────────
Document Conventions
This manual uses the following document conventions:
╓┌─┌────────────────────────┌────────────────────────────────────────────────╖
Example of Convention Description
──────────────────────────────────────────────────────────────────────────
QB.LIB, ADD.EXE, COPY, Uppercase (capital) letters indicate file names
LINK, /X and DOS-level commands. Uppercase is also used
for command-line options (unless the application
accepts only lowercase).
SUB, IF, LOOP, PRINT, Bold capital letters indicate language-specific
Example of Convention Description
──────────────────────────────────────────────────────────────────────────
SUB, IF, LOOP, PRINT, Bold capital letters indicate language-specific
WHILE, TIME$ keywords with special meaning to Microsoft BASIC.
Keywords are a required part of statement syntax,
unless they are enclosed in double brackets as
explained below. In programs you write, you must
enter keywords exactly as shown. However, you can
use uppercase letters or lowercase letters.
CALL Proc(arg1!, var2%) This kind of type is used for program examples,
program output, words you should type in, and
error messages within the text.
CONST FALSE = 0 A column of three dots indicates that part of the
. example program has been intentionally omitted.
.
.
CHAIN "PROG1"
END
Example of Convention Description
──────────────────────────────────────────────────────────────────────────
' Make one pass The apostrophe (single right quotation mark)
marks the beginning of a comment in sample
programs.
filespec Italic letters indicate placeholders for
information, such as a file name, that you must
supply. Italics are also occasionally used in the
text for emphasis.
[[optional-item]] Items inside double square brackets are optional.
ALT+F1 Capital letters are used for the names of keys
and key sequences, such as ENTER and CTRL+R.
A plus (+) indicates a combination of keys. For
example, CTRL+E means to hold down the CTRL key
while pressing the E key.
Example of Convention Description
──────────────────────────────────────────────────────────────────────────
The carriage-return key, sometimes marked with a
bent arrow, is referred to as ENTER.
The cursor movement ("arrow") keys on the numeric
keypad are called DIRECTION keys. Individual
DIRECTION keys are referred to by the direction
of the arrow on the key top (LEFT, RIGHT, UP,
DOWN) or the name on the key top (PGUP, PGDN).
The key names used in this manual correspond to
the names on the IBM Personal Computer keys.
Other machines may use different names.
"defined term" Quotation marks usually indicate a new term
defined in the text.
Video Graphics Array Acronyms are usually spelled out the first time
(VGA) they are used.
Example of Convention Description
──────────────────────────────────────────────────────────────────────────
(VGA) they are used.
──────────────────────────────────────────────────────────────────────────
The following syntax block shows how some of these document conventions
are used in this manual:
GET[[#]] filenumber [[,[[recordnumber]][[,variable]]]]
.
.
.
PUT[[#]] filenumber [[,[[recordnumber]][[,variable]]]]
Requesting Assistance
If you feel you have discovered a problem in the software, please report
the problem using the Product Assistance Request form at the back of this
manual.
If you have comments or suggestions regarding any of the manuals
accompanying this product, please use the Documentation Feedback form at
the back of this manual.
────────────────────────────────────────────────────────────────────────────
PART 1 GETTING STARTED
────────────────────────────────────────────────────────────────────────────
Part 1, "Getting Started," introduces you to the Microsoft QuickBASIC
environment, then moves on to an introductory discussion on BASIC
programming. Each major feature of the environment is explained, then
demonstrated in a brief hands-on exercise. Each chapter ends with a
section specifying where you can look for more information on each of the
topics discussed.
Chapter 1 guides you through installation of QuickBASIC, using the SETUP
program provided.
Chapters 2 and 3 introduce you to working with QuickBASIC's Easy Menus,
dialog boxes, and windows.
Chapter 4 introduces the BASIC language for novice programmers. Be sure
you understand everything in this chapter before moving ahead. If you have
programmed in another language this chapter should provide all you need to
complete Part 2, "Hands On with QuickBASIC," and start using QuickBASIC
to write your own programs. If you are new to programming, you may want to
consult some of the books on BASIC listed at the end of the chapter.
────────────────────────────────────────────────────────────────────────────
Chapter 1 Setting Up Microsoft(R) QuickBASIC
Your Microsoft QuickBASIC package includes the file SETUP.EXE (on the
Setup/Microsoft QB Express disk). This program automates installation of
QuickBASIC, and lets you choose display options to install or update files
required by QuickBASIC and your hardware.
This chapter discusses
■ Installing Microsoft QuickBASIC
■ Using Microsoft QB Express
■ Exploring QuickBASIC, depending on your experience level
The Setup Program
If you do not have a hard disk, be sure you have five formatted, 360K
removable disks (or an equivalent amount of space on disks of other
sizes). If you have a hard disk, you need 1.8 megabytes of space available
to install all QuickBASIC files. To start SETUP
► Place the Setup/Microsoft QB Express disk in your disk drive, and type
setup at the DOS prompt.
Each screen in the SETUP program contains the following:
■ An explanation of the current screen or the following screen.
■ The Setup menu, which you use to choose what you want to do next.
Generally, the Setup menu on each screen lets you continue, go back a
screen, examine the options you've chosen, or return to the starting
screen. To move within the menu and make choices, use the DIRECTION
keys, then press ENTER when your choice is highlighted.
■ A prompt at the bottom of the screen tells you how to move on to the
next step.
──────────────────────────────────────────────────────────────────────────
NOTE
If you make a mistake when installing QuickBASIC with SETUP, you can go
back to any previous point and start again from there. You can run SETUP
as many times as you like.
──────────────────────────────────────────────────────────────────────────
The Setup Main Menu
The items on the Setup Main menu allow you to choose the defaults for all
options (Easy Setup) and customize the options you choose during setup
(Full Setup).
If you are a novice programmer, you should choose Easy Setup. As you learn
more about QuickBASIC, you can reset these options from within the
environment without running SETUP again.
If you are an experienced programmer, Full Setup lets you tailor the
appearance and certain behaviors of QuickBASIC. Chapter 20, "The Options
Menu," describes how QuickBASIC handles the search paths and colors you
choose during setup. (They correspond to the Options menu's Display and
Set Paths commands.)
Whether you choose Easy or Full Setup, use the Show Options menu command
to look at the final settings before completing the installation.
Installation
After you have decided about options, choose Perform Installation from the
menu to begin automated installation. QuickBASIC prompts you for each disk
you need to insert in your disk drive as installation progresses.
If you have a hard disk, QuickBASIC places the files you need in the
directories specified in either the Easy Setup or Full Setup options. If
the directories don't already exist, QuickBASIC creates the directories
you specify on your hard disk.
If you do not have a hard disk, you must start the installation phase with
five formatted removable disks. QuickBASIC prompts you when to install
each disk. You might want to label the disks, using the same names as
appear on the original disks.
QB Express
After installation is complete, return to the Main Setup menu. Even if
you've used QuickBASIC before, you should choose Exit and Run QB Express
from the main menu. Microsoft QB Express, a brief computer-based training
program, introduces the QuickBASIC environment and gives you some practice
in the things you'll do when you fire up QuickBASIC itself. If you've used
QuickBASIC before, QB Express alerts you to Version 4.5 enhancements to
the environment.
Getting Into QuickBASIC
QuickBASIC is a superb environment in which to learn programming, but it
is not specifically designed as a "learn to program" environment.
QuickBASIC provides all the tools you need for programming──editing,
debugging, and on-line help──plus a powerful version of the BASIC
language.
Chapters 2-9 of this book are a tutorial on QuickBASIC. A typewriter icon
marks all the practice exercises.
If You Are a Novice Programmer
In learning to use QuickBASIC, you need to distinguish between the tools
provided by the environment, and the language itself. The best way to
acquaint yourself with the environment is by reading Chapter 2, "Using
Menus and Commands," and Chapter 3, "QuickBASIC's Windows." Then, try
Chapter 4, "Interlude: BASIC for Beginners," which should give you enough
perspective on BASIC programming to complete Part 2, "Hands On with
QuickBASIC."
Part 2, "Hands On with QuickBASIC," is a tutorial that introduces you to
editing, using on-line help, and debugging in the context of an extended
program example. In a series of exercises, you will complete the coding of
QCARDS.BAS, a real application program. Each of these chapters takes one
to two hours to complete.
Although "Hands On with QuickBASIC" is not a tutorial on programming,
QCARDS.BAS provides a good model of program structure. You can also use
the code from QCARDS in other programs you write. But remember, the
purpose of the QCARDS tutorial is to teach you quickly how to use the
tools in the QuickBASIC environment.
You don't have to understand all the programming techniques to type in the
QCARDS code. To learn more about programming, read some of the BASIC
programming texts listed at the end of Chapter 4, "Interlude: BASIC for
Beginners." Programming in BASIC, included with this package, presents
extended examples and explanations of selected programming topics.
If You Already Know BASIC
If you are already familiar with BASIC, you should be able to move quickly
through Chapter 2, "Using Menus and Commands," and Chapter 3,
"QuickBASIC's Windows," which teach the fundamentals of menus and windows,
and opening, clearing, and saving files. You can skip Chapter 4
completely and move right to Part 2, "Hands On with QuickBASIC," to learn
the use of QuickBASIC's advanced editing, on-line help, and debugging
features. Even if you have used a previous version of QuickBASIC, you may
find some new programming techniques in QCARDS.BAS, the example program
you will build as you practice advanced environment features. The comments
in the QCARDS code explain how the program works. If the comments do not
provide enough information, the programming techniques are discussed in
Programming in BASIC.
If You Use a Mouse
QuickBASIC fully supports pointing devices that are compatible with the
Microsoft Mouse. See Section 10.7 for complete information on using
QuickBASIC with a mouse.
────────────────────────────────────────────────────────────────────────────
Chapter 2 Using Menus and Commands
This chapter teaches you how to start Microsoft QuickBASIC and use the
Easy Menus. A "menu" is a list of commands. In QuickBASIC, you can choose
between two sets of menus──Easy Menus and Full Menus. Easy Menus, which
you'll work with here, contain all the commands a novice programmer needs
to use QuickBASIC. Part 3, "QuickBASIC Menus and Commands" describes the
advanced commands on the Full Menus.
When you have completed this chapter, you'll know how to
■ Open and use menus and dialog boxes
■ Consult QuickBASIC's on-line help to answer questions
■ Use function keys and shortcut-key combinations
This chapter will take one to one and one-half hours to complete.
Starting QuickBASIC
Start QuickBASIC now:
1. Type qb at the DOS prompt. The QuickBASIC screen appears.
2. Press ENTER to display essential information about the QuickBASIC
environment. You can use PGUP and PGDN to move around in this text.
3. Press ESC to clear this information from the screen.
──────────────────────────────────────────────────────────────────────────
NOTE
If your computer has a monochrome or liquid-crystal display, or if you
use a Color Graphics Adapter (CGA) with a black-and-white monitor, see
Sections 10.1.1, "The QB Command," and 10.1.2, "The /NOHI Option," for
additional QB invocation options.
If you start QuickBASIC with the /nohi or /b /nohi option, what are
referred to as high-intensity letters in this manual may have a
different appearance.
──────────────────────────────────────────────────────────────────────────
The QuickBASIC Environment
QuickBASIC's programming tools are instantly available. They include
features for program organization, editing, syntax checking, file
management, printing, and debugging──even customizing the colors of the
environment.
The Menu Bar
The menus on the menu bar at the top of the QuickBASIC screen contain the
QuickBASIC environment commands (see Figure 2.1). You'll use them as you
write and modify programs in the View window.
Menu bar Title bar Scroll bars View window
│ │ ││ │
File Edit View Search Run │Debug Options ││ │ Help
┌┬─────────────────┬────────────└ Untitled ───────┼┼────────────┼─────┤↑├──
││ New Program │ ││ │
││ Open Program... │ ││ │
││ Save As... │ ││
│├─────────────────┤ ││
││ Print... │ │└───────────────────────
│├─────────────────┤ │
││ Exit │ │
│└─────────────────┘ │
│ │
│ │
│ │
│ │
│ │
│←▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒→
├─────────────────────────────── Immediate ────────────────────────────────
│
│ │
F1=Help Removes│currently loaded program from memory CN 00001:001
│ │ └─┬─┘└───┬───┘
Reference bar Immediate CAPS LOCK and────────────┘ Row and
window NUM LOCK indicators column indicator
Figure 2.1 QuickBASIC Invocation Screen
The Reference Bar
The reference bar at the bottom of the screen tells which keys to press to
perform important actions (see Figure 2.1). As you work on a program, the
reference bar updates information about the environment and your program.
When a command is highlighted, the reference bar briefly describes how to
use the command. Row and column counters indicate where you are in your
program, and CAPS LOCK and NUM LOCK indicators tell how your keyboard is
set.
Opening Menus
You can execute most QuickBASIC commands by choosing them from the menus.
When you press the ALT key, QuickBASIC highlights the file menu, and one
letter in each menu name appears in high-intensity video. To open a menu,
press the ALT key, then press the key corresponding to the high-intensity
letter in the menu name.
You can open the menus and move among them using the DIRECTION keys (the
UP, DOWN, LEFT, and RIGHT arrow keys) .
To open a menu
1. Press ALT to select the File menu.
When you "select" (highlight) a menu, its name is shown in a
reverse-video block. If you press ALT again, the menu name loses the
highlight.
2. Press ENTER to open the File menu (see Figure 2.2).
┌───────┐
│ File │
├───────┴──────────┐
│ New Program │
│ Open Program... │
│ Save As... │
├──────────────────┤
│ Print... │
├──────────────────┤
│ Exit │
└──────────────────┘
Figure 2.2 The File Menu
■ Press the UP or DOWN key to select successive commands in an open
menu.
■ Press the RIGHT or LEFT key to open adjacent menus.
3. Press ESC to close the menu without executing a command. The cursor
returns to the View window, the part of the screen where you edit your
program. You can always back out of any situation by pressing ESC.
QuickBASIC's On-Line Help
If you need additional information about menus or other QuickBASIC
features, consult on-line help. You can get help on BASIC keywords, the
elements of the language, the QuickBASIC environment, and error messages.
Using On-Line Help
There are several ways to get on-line help in QuickBASIC. For help on menu
names or commands, select the name or command, then press F1. If you want
help on any part of a program, place the cursor within the word, then
press F1.
To move around in on-line help, do the following:
■ Press PGDN to see additional screens.
■ Press PGUP to move back through screens you have already seen.
■ Press ESC to cancel on-line help.
If you need more information on using any on-line help function, hold down
the SHIFT key while pressing F1 for a general description of on-line help.
The Help Menu
Most on-line help is available through the Help menu. Try this to use
on-line help:
1. Press ALT to select the File menu without opening it.
2. Press LEFT to select the Help menu.
3. Press F1. On-line help displays the information shown in Figure 2.3
about the Help menu:
┌──────────────────────── HELP: Help Menu ─────────────────────┐
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ Use the Help menu to display: │ │
│ │ ■ a list of BASIC language keywords │ │
│ │ ■ a list of general topics about QuickBASIC and the │ │
│ │ BASIC programming language │ │
│ │ ■ detailed, context-sensitive information on the │ │
│ │ program item shown in a topic cursor │ │
│ │ │ │
│ │ To use the Help menu commands now │ │
│ │ 1. Press ESC to return to the Help menu │ │
│ │ 2. Use the DIRECTION keys to select (highlight) a │ │
│ │ command │ │
│ │ 3. Press ENTER to execute the command │ │
│ └───────────────────────────────────────────────────────────┘ │
├───────────────────────────────────────────────────────────────┤
│ < OK > │
└───────────────────────────────────────────────────────────────┘
Figure 2.3 Help Dialog Box for the Help Menu
4. Press ENTER when you finish reading the text.
5. Press DOWN to open the Help menu.
You can get help with each of the items on the Help menu by moving the
highlight among the commands with the DIRECTION keys, and pressing F1 for
explanations.
If there is no on-line help available for the current item, or if the
necessary help file is unavailable, QuickBASIC either displays a message,
beeps, or both.
The Help menu has the following commands:
Command Action
──────────────────────────────────────────────────────────────────────────
Index Displays an alphabetical listing of all
QuickBASIC keywords. Place the cursor on a
keyword and press F1 to get help on that keyword.
Contents Displays a visual outline of the on-line help's
contents. For detailed information on any
category listed, place the cursor on the category
and press F1.
Topic Displays help for any word at the cursor
position. If there is a word at the cursor
position, it appears in the Help menu following
the Topic command. If there is no word at the
cursor position, the Topic command is inactive.
Help on Help Explains how to use on-line help.
──────────────────────────────────────────────────────────────────────────
Choosing Commands
To "choose" (execute) a command, select the command by pressing the UP or
DOWN key, then press ENTER or the high-intensity letter in the command
name. (If a command has no high-intensity letter, it is not currently
available for you to use.)
If a command is followed by three dots (...), a dialog box (description to
follow) appears when you choose the command. Commands not followed by dots
execute immediately when you choose them.
To learn more about a command before choosing it, press F1 for on-line
help. After you read the help information, press ESC to clear help, then
press ENTER if you want to choose the command. Try the following steps:
1. Press ALT, then press O to select the Options menu.
This key combination opens the Options menu. In this manual,
combinations of keys are written as key names connected with a plus
sign. The sequence above is usually shown as ALT+O.
2. Press DOWN until Full Menus is highlighted.
3. Press F1 to display on-line help while Full Menus is selected.
4. Press ESC to clear on-line help.
5. Press ENTER to turn off Full Menus if the bullet (■) is present. Press
ESC to close the Options menu without executing any of its commands if
Full Menus does not have a bullet.
The Full Menus command is a "toggle." If it is on (that is, if it has a
bullet), then choosing it turns it off. If it is off (no bullet),
choosing it turns it on.
6. Press ALT+O to open the Options menu again. Make sure there is no
bullet beside Full Menus, then press ESC to close the menu.
You only need to use DIRECTION keys when you want help with a command. If
you don't need help, just choose commands by pressing the letter
corresponding to the high-intensity letter in the command name.
Using Dialog Boxes
A "dialog box" appears when you choose any menu command followed by three
dots (...). QuickBASIC uses dialog boxes to prompt you for information it
needs before executing a command. Dialog boxes also appear when you
■ Enter a line of code containing a syntax error
■ Run a program that contains an error
■ Choose the Help command button in a dialog box
■ Request help for a menu or menu command
■ Try to end a session without saving your work
Anatomy of a Dialog Box
Dialog boxes include several devices you can use to give QuickBASIC
information (see Figure 2.4).
┌─Text box ┌─List boxes
│ │
│ │
│ │
┌───────────────┼────── Open Program ─────┼───────────────────┐
│ ┌┴─────────────────────────┼─────────────────┐ │
│ File Name: │*.bas │ │ │
│ └──────────────────────────┼─────────────────┘ │
│ │ │
│ C:\QB4.5\DEMO │ │
│ Files ┌──┴──┐Dirs/Drives │
│ ┌────────────────────────────────────┐ ┌───────────────┐ │
│ │ATEST.BAS REMLINE.BAS │ │┌──┐ ↑ │
│ │BL.BAS SORTDEMO.BAS │ │ ∙∙ ░ │
│ │DEMO1.BAS TEST.BAS │ │SOURCE ░ │
│ │DEMO2.BAS TORUS.BAS │ │[-A-] ░ │
│ │DEMO3.BAS VARHELP.BAS │ │[-B-] ░ │
│ │DEMO4.BAS VARHELPZ.BAS │ │[-C-] ░ │
│ │HISTOGRM.BAS │ │ ░ │
│ │QBFORMAT.BAS │ │ ░ │
│ │QCARDS.BAS │ │ ↓ │
│ └←░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░→┘ └───────────────┘ │
├─────────────────────────────────────────────────────────────┤
│ < OK > < Cancel > < Help > │
└──────────┼───────────────────┼───────────────────┼──────────┘
└────────┬──────────┴───────────────────┘
└Command buttons
Figure 2.4 Open Program Dialog Box
The following list explains how to use these devices:
Device Description
──────────────────────────────────────────────────────────────────────────
Text box Type text, such as a file name, here
List box Select one item from a group of listed items
Command button Use to confirm entries, get help, or escape from
the dialog box
──────────────────────────────────────────────────────────────────────────
Displaying a Dialog Box
When you first open a dialog box, it contains "default" settings──the
settings people use most often. After that, when you display a dialog box,
it reflects the choices you made the last time the box was displayed. The
angle brackets on the default command button appear in high intensity.
When you press ENTER, the default command button is chosen. You can use
ALT key combinations or TAB to move around in a dialog box.
Follow these steps to open and examine the File menu's Open Program dialog
box:
1. Press ESC to close the Options menu if it is still open.
2. Press ALT+F, then press O to choose the File menu's Open Program
command.
The Open Program dialog box (shown in Figure 2.4) appears. It lets you
load programs from disk files into the View window.
3. Press F1 to choose the Help command button.
A help dialog box opens on top of the Open Program dialog box. You can
use DIRECTION keys to move through the help text.
4. Press ESC to clear the help dialog box and return the cursor to the
Open Program dialog box.
5. Press ALT to turn on the high-intensity letters you can use in
combination with the ALT key.
6. Press TAB to move the cursor into the Files list box.
If there are numerous entries in the list box, you can move among them
either by pressing DIRECTION keys or the initial letter of the item you
wish to select.
7. Press TAB or ALT+D to move the cursor to the Dirs/Drives list box.
8. Press ESC to close the dialog box without opening a program.
Other Dialog-Box Features
Other dialog-box features include option buttons and check boxes. You'll
use these features in the Options menu's Display dialog box (see Figure
2.5) to change options──such as screen colors, scroll bars, and the
distance between tab stops──chosen when you installed QuickBASIC.
┌──Option buttons.
│ Move between them ┌List boxes.
│ with UP or DOWN key. │Select one item.
│ │
│ ┌──────────────────────── Display ─────────────┼────────────────┐
│ │ ┌─────────────────────── Colors ─────────────├──────────────┐ │
│ │ │ Foreground │ Background │ │
│ │ │ ┌──┴──┐ │ │
│ │ │ ┌ ┌─────────┐ ┌─────────┐ │ │
│ │ │ │ (∙) 1. Normal Text │ Black ↑ │ Black ↑ │ │
│ │ │ │ │ White ░ │ White ░ │ │
└─┼─┼─┤ ( ) 2. Current Statement │ Gray ░ │ Gray ░ │ │
│ │ │ │ BrWhite ░ │ BrWhite ░ │ │
│ │ │ ( ) 3. Breakpoint Lines │ ░ │ ░ │ │
│ │ └ │ ↓ │ ↓ │ │
│ │ └─────────┘ └─────────┘ │ │
│ │ │ │
│ │ │ │
│ └───────────────────────────────────────────────────────────┘ │
│ │
│ ┌────────────────── Display Options ────────────────────────┐ │
┌─┼─┼──[X] Scroll Bars Tab Stops: 8 │ │
│ │ └───────────────────────────────────────────────────────────┘ │
│ ├───────────────────────────────────────────────────────────────┤
│ │ < OK > < Cancel > < Help > │
│ └──────────┼──────────────────┼─────────────────────┼───────────┘
│ └───────────┬──────┴─────────────────────┘
│ └─Command buttons.
└─Check box. Press Choose to confirm settings,
SPACEBAR to set. get help, or escape.
Figure 2.5 Display Dialog Box
Option buttons are turned on if a bullet (■) appears within the
parentheses. Only one option in each group of option buttons can be turned
on at a time. An X within the brackets indicates that a check box is
turned on. You can turn on as many check boxes as you like.
To set options, do the following:
1. Press ALT+O, then press D to choose the Option menu's Display command.
The Display dialog box (shown in Figure 2.5) appears.
2. Press ALT+T to move the cursor to the Tab Stops text box.
Type a new number if you want to change the number of spaces between
tab stops while you are editing. For programming, 4 is a good choice.
3. Press ALT+S to move the cursor to the Scroll Bars check box. Press
SPACEBAR to put an X in an empty check box or remove the X if the box
already has one. (Scroll bars, shown on Figure 2.1, are only useful if
you have a mouse.)
4. Set the three types of foreground and background colors, as follows:
a. Press ALT plus the highlighted number (1, 2, or 3) to select the
option whose colors you want to change.
b. Press TAB to move to the foreground and background test boxes and
press UP or DOWN to select the colors.
c. Repeat the previous process two steps to change the Current
Statement and Breakpoint Lines options.
5. Press ENTER to choose the command, confirming any new choices you've
just made, or press ESC to return all settings to what they were when
the dialog box was first displayed.
The Current Statement option determines the attributes of the currently
executing line in a running program. The Breakpoint Lines option sets the
color for lines at which you set breakpoints. Note that Breakpoint Lines
and Current Statement colors show only when you have a program running.
Issuing Commands Directly
You can use shortcut keys and key combinations to issue commands directly
without opening menus to choose items. Shortcut keys are available for
many QuickBASIC tasks.
Shortcut Keys for Commands
If a command has a shortcut key, it is listed beside the command. For
example, instead of opening the Edit menu and choosing the Cut, Copy, or
Paste commands, you can use SHIFT+DEL, CTRL+INS, and SHIFT+INS instead.
Other Key Combinations
There are other special keys and key combinations. For example, SHIFT+F1
always displays help on help; and F1 displays on-line help for menu names
and commands or any keyword or program symbol at the cursor. Other key
combinations use function keys, keys on the numeric keypad like INS and
DEL, and many combinations of the SHIFT, ALT, or CTRL keys with other
keys.
For example, you can use the RIGHT and LEFT keys to move the cursor right
and left on the screen. To move the cursor to the next word beyond the
current cursor position, hold down CTRL and press LEFT or RIGHT.
Try this exercise to see how common shortcut keys and key combinations
work:
1. Press ALT+V to open the View menu.
The SUBs command is automatically selected. Note the shortcut key (F2)
to the right of the command name.
2. Press DOWN to select the Output Screen command. Note that its shortcut
key is F4.
3. Press F1 to consult on-line help for an explanation of Output Screen
(see Figure 2.6).
┌────────────────── HELP: Output Screen Command ──────────────────┐
│ ┌──────────────────────────────────────────────────────────────┐ │
│ │ Use the Output Screen command to toggle between the │ │
│ │ QuickBASIC environment screen and the program output │ │
│ │ screen. │ │
│ │ │ │
│ │ This enables you to refer to the ouput previously │ │
│ │ generated by your program while you are editing or │ │
│ │ debugging it. │ │
│ │ │ │
│ │ Press F4 to toggle between screens with one keystroke. │ │
│ └──────────────────────────────────────────────────────────────┘ │
├──────────────────────────────────────────────────────────────────┤
│ < OK > │
└──────────────────────────────────────────────────────────────────┘
Figure 2.6 Help on Output Screen Command
4. Press ENTER to close the help screen. ENTER is the shortcut key for the
default (or currently selected) command button.
5. Press ESC to close the View menu.
Exiting from QuickBASIC
When you end a session, QuickBASIC checks to see if you have any unsaved
work in progress. If you do, a dialog box asks if you want to save your
work. Because you haven't entered any text in this session, press N if
this dialog box appears when you do the following:
► Press ALT+F, then press X to choose the File menu's Exit command to
return to DOS.
If you made and confirmed changes in the Displays dialog box, they are
saved in a file called QB.INI when you exit. They become the defaults the
next time you start QuickBASIC.
For More Information
For more information on the topics covered in this chapter, see the
following:
Where to Look What You'll Find
──────────────────────────────────────────────────────────────────────────
Section 10.1.1, "The QB Command," Explanations of QuickBASIC's
and 10.1.2, "The /NOHI Option" invocation options
Section 10.8, "Using On-Line Help," Complete description of on-line help
and Chapter 21, "The Help Menu"
Section 10.2, "Opening Menus and More information on menus and dialog
Choosing Commands," and 10.3, boxes
"Using Dialog Boxes"
Section 10.2.2, "Using Shortcut A listing of the common shortcut keys
Keys"
Section 12.7, "Summary of Editing A complete list of key combinations
Commands" used for editing
──────────────────────────────────────────────────────────────────────────
────────────────────────────────────────────────────────────────────────────
Chapter 3 QuickBASIC's Windows
In this chapter you will learn how to use Microsoft QuickBASIC's windows
as you write a short program. You'll learn how to
■ Open an existing program and move the cursor
■ Activate, move between, and change the window size
■ Execute BASIC statements from the Immediate window
■ Monitor values of variables with the Watch window
■ Use the Help window
■ Save programs as files on disk
This chapter takes about one to one and one-half hours to complete.
Windows Available with Easy Menus
QuickBASIC is called a "window-oriented" environment because the screen is
divided into separate areas in which you can perform different tasks. Some
windows, such as the View window and the Help window, display material
loaded from disk files. Other windows, such as the Watch window, display
information QuickBASIC has about the current program. With Easy Menus, the
windows shown in Figure 3.1 are available.
Watch window Help window
│ │
│ File Edit View Search Run Debug Options │ Help
└Untitled X = 10: 0 │
┌────────────────────── HELP: CLS Statement QuickSCREEN ────────┼─────┤↑├──
│ ◄QuickSCREEN► ◄Details► ◄Example► ◄Contents► ◄Index►
│─────────────────────────────────────────────────────────────────────────
│CLS - a device I/O statement that clears the display screen
│
│Syntax
│ CLS [{0|1|2}]
│
│ = If all arguments are omitted, either the graphics viewport or the
│ text viewport are cleared, depending upon previous uses of the VIEW
│ statement.
│ = 0 clears the screen of all text and graphics.
│ = 1 clears only the graphics viewport, if it is active.
│ = 2 clears only the text viewport, leaving the bottom screen line
│ unchanged.
├──────────────────────────────── Untitled ───────────────────────────┤↑├──
│CLS
│ │
│ │
│ │
│←▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒│▒▒▒▒▒▒▒▒▒→
├─────────────────────────────── Immediate ─────────────────────│──────────
│ │
│ │
<Shift+F1=Help> <F6=Window> <F2=Subs> <F5=Run> <F8=Step> │ 00001:003
│ │
Immediate window View window
Figure 3.1 Windows Available with Easy Menus
Window Description
──────────────────────────────────────────────────────────────────────────
View The window in which you do most of your
programming. When you start QuickBASIC the View
window is the "active window," the one containing
the editing cursor. When you load a disk file,
its contents appear in the View window.
Immediate The window at the bottom of the screen. In it you
can use single lines of BASIC code to test
programming ideas and perform miscellaneous
calculations. You can type in the Immediate
window, but you cannot load disk files into it.
Help A window that opens at the top of the screen when
you press F1 or SHIFT+F1. Information about
QuickBASIC keywords, symbols you define in your
program, and using help is displayed in the Help
window.
Watch A window that opens at the top of the screen when
you choose certain commands from the Debug menu.
──────────────────────────────────────────────────────────────────────────
You can have several windows open at a time, but only one can be active at
a time. By opening multiple windows, you can view different types of
information simultaneously. For example, you can have program code in the
View window, then display on-line help for the statement you want to use.
The View Window
The View window is where you do most of your programming. This section
explains how to load an existing program from a disk file into the View
window and move the cursor around in its text. Then you'll clear that
program and write and run some lines of your own code.
Loading Programs in the View Window
When you load a file from a disk, its text appears in the View window. To
load a program
1. Start QuickBASIC using the QB command you learned in Chapter 2.
2. Press ESC to clear the Welcome dialog box.
3. Press ALT+F, then press O to choose the File menu's Open Program
command.
QuickBASIC displays a dialog box like the one in Figure 3.2.
Path-specification line Symbol Name
gives path to files listed for next of next
┌─in Files list box. highest lowest
│ ┌─directory ┌─directory
│ ┌─Text box │ │
│ │ List boxes─┐ │ │
│ │ │ │ │
│ │ │ │ │
│ ┌───────────────┼────── Open Program ──┼──┼──────────────┼────┐
│ │ ┌┴──────────────────────┼──┼──────────────┼──┐ │
│ │ File Name: │ │ │ │ │ │
│ │ └───────────────────────┼──┼──────────────┼──┘ │
│ │ │ │ │ │
└─┼───C:\QB4.5\DEMO │ │ │ │
│ │ │ Dirs/Drives │ │
│ ┌───────────────────────────────────┴┐ │ ┌────────────┼──┐ │
│ │ATEST.BAS REMLINE.BAS ─┐ │ │ │┌──┐ │ ↑ │
│ │BL.BAS SORTDEMO.BAS │ │ └─┼ ∙∙ │ ░ │
│ │DEMO1.BAS TEST.BAS │ │ │SOURCE ─────┘ ░ │
│ │DEMO2.BAS TORUS.BAS │ │ │[-A-]─┐ ░ │
│ │DEMO3.BAS VARHELP.BAS ├────┐ │ │[-B-] ├─────┐ ░ │
│ │DEMO4.BAS VARHELPZ.BAS │ │ │ │[-C-]─┘ │ ░ │
│ │HISTOGRM.BAS │ │ │ │ │ ░ │
│ │QBFORMAT.BAS │ │ │ │ │ ░ │
│ │QCARDS.BAS ┘ │ │ │ │ ↓ │
│ └←░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░│→┘ └────────────┼──┘ │
├─────────────────────────────────────┼──────────────────┼────┤
│ < OK > < Cancel > │ < Help > │ │
└─────────────────────────────────────┼──────────────────┼────┘
List box contains file names having ┘ Available drives┘
extension shown in text box
Figure 3.2 Open Program Dialog Box
The cursor is in the text box where *.bas is selected. Anything you
type while *.bas is selected replaces it. The *.bas in the text box
tells QuickBASIC to list all the files having that extension in the
Files list box.
This dialog box has the following features:
Feature Function
──────────────────────────────────────────────────────────────────────────
Text box Box for typing text, such as a file name
Files list box Box that displays files in the directory
specified on the path-specification line
Dirs/Drives list box Box that shows the directories above and below
the directory specified on the path-specification
line and the drives available on your system
──────────────────────────────────────────────────────────────────────────
The files in your list box should include QCARDS.BAS. To open it, type its
name in the text box, or use the list box to select it, as described here:
1. Press TAB to move the cursor into the Files list box.
2. Press DIRECTION keys until the name of the program you want is
selected. (Press SPACEBAR if the program you want is the first entry. )
3. Select QCARDS.BAS.
The name QCARDS.BAS replaces *.bas in the text box.
4. Press ENTER to load QCARDS.BAS in the View window.
QCARDS is large (almost 40K), so it may take a few moments to load.
When it is loaded, the name QCARDS.BAS appears in the View window's
title bar.
Moving the Cursor
You can use the DIRECTION keys on the numeric keypad (the LEFT, RIGHT, UP,
and DOWN arrow keys as well as HOME, END, PGUP, and PGDN) to move the
cursor in a window. The DIRECTION keys move the cursor a single row or
column at a time. HOME and END move the cursor to the first or last column
of the current line. However, you can combine the CTRL key with DIRECTION
keys to move the cursor in greater increments, as follows:
Key Combination Cursor Movement
──────────────────────────────────────────────────────────────────────────
CTRL+RIGHT Right one word
CTRL+LEFT Left one word
CTRL+HOME First line of current window
CTRL+END Last line of current window
──────────────────────────────────────────────────────────────────────────
Scrolling Text
A window can contain far more text than is visible within its on-screen
boundaries. "Scrolling" describes the movement of text into and out of the
bounded screen area. You can scroll text using the following keys and
combinations:
Key Combination Scrolling Action
──────────────────────────────────────────────────────────────────────────
PGUP Up by one whole screen
PGDN Down by one whole screen
CTRL+PGDN Right by one whole screen
CTRL+PGUP Left by one whole screen
──────────────────────────────────────────────────────────────────────────
──────────────────────────────────────────────────────────────────────────
NOTE
The CTRL+PGDN combination can be disorienting if you don't have text
between columns 79-159. To confirm your place in a file, check the row
and column counters in the lower right corner of the reference bar. You
can press HOME to move the cursor to the first column of the current
line.
──────────────────────────────────────────────────────────────────────────
Starting a New Program
When you load an existing program from disk, QuickBASIC clears everything
else from memory before loading the program. In this section, you'll clear
QCARDS.BAS from QuickBASIC's memory with the New Program command, then
you'll type in a simple program. As you type in lines of code, notice that
QuickBASIC capitalizes the keywords in the statements when you press
ENTER. If you get an error message, press ESC to clear the message, then
retype the line at the cursor.
Follow these steps to clear QCARDS.BAS, then write and run some code:
1. Press ALT+F, then press N to choose the File menu's New Program
command.
2. Type the following BASIC statements
cls
print "This is my first QuickBASIC program"
print 2 + 2
3. Press ALT+R, then press S to choose the Run menu's Start command.
If you typed everything correctly, QuickBASIC displays the program's
output on the "output screen," which should look like the screen in
Figure 3.3.
┌────────────────────────────────────────────────────────┐
│This is my first QuickBASIC program │
│ 4 │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
│ │
┌─┤Press any key to continue │
│ └────────────────────────────────────────────────────────┘
└─Press a key to return to QuickBASIC environment.
Figure 3.3 Output Screen for Code Lines
In this program, CLS clears the screen, then the PRINT statement
displays the quoted text in the upper left corner of the screen.
Because PRINT can display the results of numeric expressions, the sum
of the expression 2+2 appears on the next line.
4. Press a key to return to QuickBASIC's View window.
5. Press ALT+V, then press U to choose the View menu's Output Screen
command to take another look at your program's results.
6. Press a key to return to QuickBASIC's View window.
──────────────────────────────────────────────────────────────────────────
NOTE
You can get help for any keywords you don't understand by placing the
cursor on the keyword, then pressing F1.
──────────────────────────────────────────────────────────────────────────
Changing Window Sizes
You can easily increase or decrease the size of the windows on your
screen. To increase the size of the active window, press ALT+PLUS once for
each line you want to add. To reduce the size by one line, press
ALT+MINUS. (Use the PLUS and MINUS keys on the numeric keypad.)
To temporarily expand the active window to full screen, press CTRL+F10.
You can restore the windows to their previous sizes by pressing this
toggle again. The following steps illustrate this and prepare the windows
for the exercise in the next section:
1. Press ALT+PLUS twice while the cursor is in the View window.
This adds lines to the View window and compresses the Immediate window
beneath it.
2. Press ALT+MINUS seven times to reduce the size of the View window.
This decreases the number of lines in the View window while increasing
the size of the Immediate window.
3. Press CTRL+F10 to expand the size of the current window temporarily to
full-screen status.
4. Press CTRL+F10 again to restore the screen to its previous proportions.
QuickBASIC's Other Windows
When you start QuickBASIC and clear the opening dialog box, the View
window contains the cursor, so it is the active window. Only one window
can be active at a time. However, other windows are available. Note that
the title bar of the active window is highlighted.
Moving between Windows
To move the cursor down one window, press the F6 key. To move the cursor
up one window, press SHIFT+F6. If you have used CTRL+F10 to expand the
current window, F6 and SHIFT+F6 still make the next and previous windows
active.
Executing Code in the Immediate Window
The Immediate window at the bottom of the screen can be used as a utility
window as you program in the View window. For example, if you want to
clear the output screen, you can execute the CLS statement from the
Immediate window. You can also use the Immediate window for doing
calculations, or experimenting with programming ideas and previewing the
results. When you exit from QuickBASIC, text in the Immediate window is
lost.
When you run lines of code in the View window, they are executed
sequentially. In the Immediate window, a single line of code is executed
whenever you put the cursor anywhere on that line, then press ENTER.You
can type in either uppercase or lowercase in the Immediate window. Note
that QuickBASIC doesn't capitalize keywords in the Immediate window as it
does in the View window.
Try the following procedure to execute lines of code in the Immediate
window:
1. Press F6 to place the cursor in the Immediate window.
2. Type the following line:
cls : print "This line comes from the Immediate window"
This code consists of two BASIC statements separated by a colon.
Separating statements with a colon allows you to put more than one
statement on a line.
3. Press ENTER to execute the code on this line.
QuickBASIC displays the output screen.
4. Press a key to return to the QuickBASIC environment. The cursor is
placed on the next blank line in the Immediate window.
5. Type the following line, exactly as shown:
CurrentTime$ = ""
This defines a variable named CurrentTime$. The $ tells QuickBASIC it
is a "string" variable (one consisting of a series of characters). The
quotation marks have no space between them, so the string has a length
of zero.
6. Press ENTER to execute this statement and assign the zero-length string
to CurrentTime$.
Next, you'll continue working in the Immediate window and use the BASIC
TIME$ function to assign a string representing the current time to the
variable CurrentTime$:
1. Type the following line (exactly as shown) on the next line in the
Immediate window:
CurrentTime$ = time$
2. Press ENTER to execute the assignment statement you just typed.
3. Type the following line in the Immediate window, exactly as shown:
print CurrentTime$
Figure 3.4 shows how the Immediate window should now look:
File Edit View Search Run Debug Options Hel
┌──────────────────────────────── Untitled ───────────────────────────┤↑
│CLS
│PRINT "This is my first QuickBASIC program"
│PRINT 2 + 2
│
│
│
│
│
│
│
│
│
│
│
│
│
├─────────────────────────────── Immediate ─────────────────────────────
│cls : print "This line comes from the Immediate window"
│CurrentTime$ = ""
│CurrentTime$ = time$
│print CurrentTime$
│
<Shift+F1=Help> <F6=Window> <Enter=Execute Line> CN 00004:
Figure 3.4 Immediate Window Showing Lines Just Entered
4. Press ENTER to display the value of CurrentTime$.
The value of CurrentTime$ is displayed beneath the first line on the
output screen.
5. Press a key to return to the environment.
You can write up to 10 lines of statements in the Immediate window. If
you type an eleventh line, the first line you typed is lost; if you
type a twelfth, the second line you typed is lost, and so on. Section
10.5 illustrates other ways you can use the Immediate window.
Monitoring Variables with the Watch Window
When a program doesn't behave the way you expect, it is often because a
variable is acquiring a value you did not anticipate. The Watch window
lets you monitor the values of expressions while your program is running,
so you can be sure their values are within the expected range. Try the
following to see how the Watch window works:
1. Press F6 to move the cursor to the Immediate window if it is not
already there.
2. Press ALT+D, then press A to choose the Debug menu's Add Watch command.
QuickBASIC displays the Add Watch dialog box.
3. Type CurrentTime$, then press ENTER.
The Watch window opens at the top of the screen. It contains the name
from the View window's title bar, followed by CurrentTime$, the name of
the variable you just entered (see Figure 3.5). The cursor returns to
the Immediate window.
Name from View
window's title bar Variable name Watch window
│ │ │
│ File Edit View Search│ Run Debug Options │ Hel
└Untitled CurrentTime$: │ │
┌─────────┴──────┬──────┴──┼───── Untitled ───────────────────────────┤↑
│CLS └─────────┘
│PRINT "This is my first QuickBASIC program"
│PRINT 2 + 2
│
│
│
│
│
│
│
│
│
├─────────────────────────────── Immediate ─────────────────────────────
│cls : print "This line comes from the Immediate window"
│CurrentTime$ = ""
│CurrentTime$ = time$
│print CurrentTime$
│
<Shift+F1=Help> <F6=Window> <Enter=Execute Line> CN 00004:
Figure 3.5 Placing Variables in the Watch Window
4. Press CTRL+HOME to place the cursor on the first line of the Immediate
window, then press ENTER to execute each of the lines in the Immediate
window.
Look at the Watch window while you press ENTER on each line. As soon as
the line CurrentTime$ = time$ is executed, you will notice that the
value for CurrentTime$ appears in the Watch window.
With the Watch window you can monitor variable values as they change in
the running program without having to use PRINT statements to display the
value on the output screen.
The Help Window
Most on-line help appears in the Help window. There are several ways to
get help on BASIC keywords, such as PRINT and TIME$, and the QuickBASIC
environment. You can use the Help menu or press F1 while an item on screen
(or a menu or command) contains the cursor or is highlighted.
──────────────────────────────────────────────────────────────────────────
NOTE
If you get error messages when you try to access on-line help, check
Section 10.8.4, "Help Files," for more information on how to set up
help properly.
──────────────────────────────────────────────────────────────────────────
Context-Sensitive Help
With context-sensitive help, you can get information about BASIC keywords
and program symbols. The following steps illustrate the use of
context-sensitive help:
1. Press ESC to close the Help menu if it is open.
2. Use DIRECTION keys to move the cursor anywhere within the word PRINT.
3. Press F1.
QuickBASIC displays a QuickSCREEN of the PRINT keyword (see Figure
3.6).
File Edit View Search Run Debug Options Hel
Untitled CurrentTime$:
┌───────────────────── HELP: PRINT Statement QuickSCREEN ─────────────┤↑
│ ◄QuickSCREEN► ◄Details► ◄Example► ◄Contents► ◄Index►
│───────────────────────────────────────────────────────────────────────
│PRINT - a device I/O statement that outputs data on the screen
│
│Syntax
│ PRINT [expressionlist][{,|;}]
│
│ = If all arguments are omitted, a blank line is printed.
│ = If expressionlist is included, the values of the expressions are
│ printed on the screen.
│ = The expressions in the list may be numeric or string expressions.
│ (String literals must be enclosed in quotation marks.)
│ = The optional characters "'" and ";" are details.
│
│←▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
├─────────────────────────────── Untitled ────────────────────────────┤↑
├─────────────────────────────── Immediate ─────────────────────────────
│cls : print "This line comes from the Immediate window"
│CurrentTime$ = ""
│CurrentTime$ = time$
│print CurrentTime$
<Shift+F1=Help> <F6=Window> <Esc=Cancel> <Ctrl+F1=Next> <Alt+F1=Back>
Figure 3.6 QuickSCREEN for PRINT Statement
The QuickSCREEN briefly describes the statement's action, then gives
the syntax and explains each part of it. At the bottom, the QuickSCREEN
indicates other uses of the keyword.
Hyperlinks
At the top of the screen, several bracketed items, called "hyperlinks,"
indicate related topics you can investigate. Hyperlinks provide instant
connections between related topics. At the bottom of the screen, the other
uses of the keyword are also bracketed as hyperlinks. If you want more
information on one of them, use the TAB key to move the cursor to the
hyperlink, then press F1, as explained here.
1. Press F6 until the cursor appears into the Help window.
2. Press TAB to move the cursor to the Example hyperlink.
3. Press F1 to view the Example screen (see Figure 3.7).
Hyperlinks
to related topics
│
│File Edit View Search Run Debug Options Hel
┌─┼─────────────── HELP: PRINT Statement Programming Examples ────────┤↑
│ │◄QuickSCREEN► ◄Details► ◄Example► ◄Contents► ◄Index►
│─┼──────────────────────┼─────────────┼──────────────┼────────────┼────
│ └──────────────────────┴─────────────┴──────────────┴────────────┘
│PRINT Statement Programming Examples
│
│Example 1
│
│In the following example, the commas in the PRINT statement
│print each value at the beginning of the next print zone:
│
│X=5
│PRINT X+5, X-5, X*(-5), X^5
│END
│
│Sample Output
│
│←▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
├─────────────────────────────── Untitled ────────────────────────────┤↑
├─────────────────────────────── Immediate ─────────────────────────────
│cls : print "This line comes from the Immediate window"
│CurrentTime$ = ""
│CurrentTime$ = time$
│print CurrentTime$
<Shift+F1=Help> <F6=Window> <Esc=Cancel> <Ctrl+F1=Next> <Alt+F1=Back>
Figure 3.7 Example Screen for PRINT Statement
You can scroll within the Help window to examine all the PRINT
examples.
4. Press ALT+F1 once or twice to return to the screen you linked from.
5. Repeat steps 1 and 2 to view the information available through the
other bracketed hyperlinks.
You can use several successive hyperlinks without returning to the
previous screen, QuickBASIC keeps track of the last 20 hyperlinks. You can
use ALT+F1 to go back through the sequence of hyperlinks. When you reach
the screen from which you started, QuickBASIC beeps if you press ALT+F1.
You can press ESC any time to clear the Help window completely, even if
you are several levels down in hyperlink screens.
For a reminder on which keys or key combinations to use for moving in or
among Help screens, choose Contents from the Help menu, then choose the
"Help keys" hyperlink. Also, SHIFT+F1 gives a general explanation of help.
Even some items that are not bracketed are hyperlinks. Press F1 any time
you have a question about anything on the QuickBASIC screen. If QuickBASIC
has more information on it, the information appears in the Help window; if
no other information is available, QuickBASIC beeps.
──────────────────────────────────────────────────────────────────────────
NOTE
You cannot edit text in the Help window, but you can edit text in the
View window or Immediate window while the Help window is open. In
Chapter 8, "Using Example Code from On-Line Help," you'll learn to copy
text from the Help window and paste it into your program.
──────────────────────────────────────────────────────────────────────────
Exiting from QuickBASIC and Saving Programs
The following steps explain how to exit QuickBASIC and return to the DOS
command line:
1. Press ALT+F, then press X to exit from QuickBASIC.
A dialog box appears asking if you want to save the unsaved material in
the View window.
2. Press ENTER to tell QuickBASIC that you want to save the program in the
View window.
QuickBASIC displays the Save As dialog box (see Figure 3.8):
┌─Type your program name here
│
┌────────────────┼───── Save As ──────────────────┐
│ │ │
│ ┌──┴───────────────────────────────┐│
│ File Name: │ ││
│ └──────────────────────────────────┘│
│ C:\QB4.5\DEMO │
│ │
│ Dirs/Drives │
│ ┌──────────────┐ ┌─────── Format ────────┐ │
│ │.. ↑ │ (∙) QuickBASIC - │ │
│ │SOURCE ░ │ Fast Load and │ │
│ │[-A-] ░ │ Save │ │
│ │[-B-] ░ │ │ │
│ │[-C-] ░ │ ( ) Text - │ │
│ │[-U-] ░ │ Readable by │ │
│ │[-Z-] ↓ │ Other Programs │ │
│ └──────────────┘ └───────────────────────┘ │
├─────────────────────────────────────────────────┤
│ < OK > < Cancel > < Help > │
└─────────────────────────────────────────────────┘
Figure 3.8 Save As Dialog Box
3. Type program1 in the text box.
4. Press ENTER to save the lines in the View window on disk with the file
name PROGRAM1.BAS.
For More Information
For more information on the topics covered in this chapter, see the
following:
Where to Look What You'll Find
──────────────────────────────────────────────────────────────────────────
Chapter 9, "Debugging While You Debugging techniques and using the
Program," and Chapter 17, Watch window
"Debugging Concepts and Techniques"
Section 10.5, "Using the Immediate Ways to use the Immediate window
Window"
Chapter 11, "The File Menu" Opening, clearing, and saving files
in QuickBASIC
──────────────────────────────────────────────────────────────────────────
────────────────────────────────────────────────────────────────────────────
Chapter 4 Interlude: BASIC for Beginners
This chapter introduces the general principles of programming in BASIC.
The focus is on the fundamentals, so you can start programming quickly.
If you have never programmed before, you should read this chapter
carefully. When you finish this chapter, you will be able to write simple
BASIC programs. You may want to read some intermediate-level books on
BASIC before tackling advanced programming techniques in the following
chapters.
If you already have programming experience with BASIC, you may want to
skim this chapter to get a general idea of the differences between
Microsoft BASIC and the BASIC dialect you know.
Many brief programming examples are given to show how each element of
BASIC works. The quickest way to learn BASIC is to enter and run these
examples as you read. You can enter multi-line examples in the View
window. Or you can enter single-line examples in QuickBASIC's Immediate
window, then press ENTER to see the resulting output. Study each example
to understand why it works the way it does. Be sure you grasp the material
in one section before going on to the next.
When you have completed this chapter, you will understand how to
■ Display words and numbers on the screen
■ Define and use variables
■ Perform calculations and use BASIC's math functions
■ Use arrays of variables
■ Execute sections of your program selectively
■ Repeat a group of instructions a specific number of times or until a
condition is met
What is a Program?
A "program" is a sequence of instructions to the computer, in a language
both you and the computer understand. Each instruction is called a
"statement" and usually takes up one line in the program.
The goal of any program is to perform some useful job, such as word
processing, bookkeeping, or playing a game. Programming is the process of
deciding what you want the program to do. Then you select and arrange
language statements to accomplish the individual tasks needed to reach the
overall goal. This process is part science, part art. The science comes
from books; the art is learned by writing your own programs and analyzing
programs written by others.
Many BASIC statements have additional features that are not described in
this chapter. If you want more information about a particular statement or
language feature, please refer to Chapter 8, "Statement and Function
Summary," in Programming in BASIC or consult QuickBASIC's on-line help.
Comments
Comments are an important part of programming. They explain the program to
others, and remind you why you wrote it the way you did. Comments begin
with an apostrophe, and can extend to the end of the line, as follows:
' This is a comment.
CLS ' The CLS statement clears the screen.
The apostrophe tells QuickBASIC that everything between the apostrophe and
the end of the line is a comment.
Displaying Words and Numbers on the Screen
You are probably familiar with application software such as Lotus(R)
1-2-3(R) or Microsoft Word. These and most other programs communicate with
the user by displaying words, numbers, and data on the screen.
The PRINT statement is BASIC's command for writing on the screen. Two of
the things PRINT can display are strings and numbers.
A "string" is any group of characters (letters, numbers, punctuation
marks) enclosed in quotes. The following example program shows how the
PRINT statement displays a string:
1. Start QuickBASIC (if it is not already started) by typing qb and
pressing ENTER.
2. Type the following line in the Immediate window, then press ENTER:
PRINT "Hello, world"
The output should appear as follows:
Hello, world
The quotes that surround a string are not part of the string, so they
do not appear in the display.
3. Type CLS in the Immediate window and press ENTER to clear the output
screen.
──────────────────────────────────────────────────────────────────────────
NOTE
BASIC is not case sensitive; you don't have to enter the examples with
the cases as shown. QuickBASIC automatically capitalizes words that are
part of the BASIC language but leaves everything else as you enter it.
The examples in this chapter are shown the way QuickBASIC formats them,
and each program's output is shown exactly as it appears on the screen.
──────────────────────────────────────────────────────────────────────────
The PRINT statement can also display numbers as shown in the following
example program:
1. Type the following line in the Immediate window, then press ENTER:
PRINT 63
The output should appear as follows:
63
2. Type CLS in the Immediate window and press ENTER to clear the output
screen.
Variables
Programs take data from the outside world (input), then process it to
produce useful information (output). The input and output data are stored
in the computer's memory. Variable names are used to keep track of where
the data are stored.
Storing Data in Memory
Computer memory is divided into storage locations, each of which has a
unique "address." The address is a number that gives the memory location,
the same way your house address shows where you live on a street. Every
piece of data has its own storage location and matching address (see
Figure 4.1).
┌─────────────────────────────────────────────────────────┐
│ │
│ ┌──────┬──────┬──────┬──────┬──────┬──────┬──────┐ │
│ │ 1230 │ 1231 │ 1232 │ 1233 │ 1234 │ 1235 │ 1236 │ │
│ └──────┴──────┴──────┴──────┴──────┴──────┴──────┘ │
│ │
└─────────────────────────────────────────────────────────┘
Figure 4.1 Addresses in Memory
Fortunately, you don't have to keep track of the address for every data
item. BASIC uses a "variable name" to associate a word of your choice with
a memory location in the computer.
BASIC does the associating automatically. Every time you use a variable
name that BASIC hasn't seen before, BASIC finds an unused memory location
and associates the new variable name with that address. You can then use
the variable name without having to know its address.
The following example program demonstrates this. Note that Hello, world is
not enclosed in quotes in this example.
1. Type the following line in the Immediate window, then press ENTER:
PRINT Hello, world
The output should appear as follows:
0 0
2. Type CLS in the Immediate window and press ENTER to clear the output
screen.
When BASIC encounters Hello and world, it has to decide what these words
are. They aren't keywords (that is, they aren't part of the BASIC
language), as PRINT is. They aren't strings, because they aren't enclosed
in quotes. They are definitely not numbers. Therefore, Hello and world
must be variables.
Once this decision is made, BASIC sets aside storage space for two new
variables named Hello and world. New variables are always given an initial
value of zero, so the PRINT statement displays two zeros.
A variable name can contain digits, but the name cannot begin with a
digit. Any word starting with a digit is interpreted as a number.
Names allowed in BASIC include:
gerbils
birthdate
name3
ep45lp33
These are illegal names:
5remove
4.3less
Variable Types
Data do not come in just one form. Programming languages, therefore, need
different types of variables to hold different types of data. BASIC has
three categories of variables: integer, floating point, and string.
Integer Variables
An integer number is a whole number, without a fractional part. For
example, 0, -45, and 1278 are integers. Integer numbers are stored in
integer variables. BASIC has two types of integer variables: integer and
long integer.
A variable name ending in % is an integer variable. Integer variables can
have any whole-number value between -32,768 and 32,767. A variable name
ending in & is a long-integer variable and can have any whole-number value
between -2,147,483,648 and 2,147,483,647.
Floating-Point Variables
A floating-point number can have a fractional part (though it doesn't have
to). For example, 0.123, 78.26, 7.0, and 1922.001234 are all
floating-point numbers. Floating-point numbers are stored in
floating-point variables. BASIC has two types of floating-point variables:
single precision and double precision.
A variable name ending in a letter, a digit, or ! is a single-precision
floating-point variable. Single-precision floating-point numbers can have
values ranging from about -3.4 x 10'38 to 3.4 x 10'38 (that's 34 with 37
zeros following). A single-precision floating-point variable is accurate
to only about 7 decimal places.
A variable name ending in # is a double-precision floating-point variable
and can have values from about -1.7 x 10'308 to 1.7 x 10'308 (that's 17
with 307 zeros following!). A double-precision floating-point variable can
hold much larger numbers than a single-precision variable, and it is also
more accurate── to about 15 decimal places.
Single-precision floating-point numbers are the kind most often used in
calculations, since "real-world" applications usually need numbers with
fractional parts. (Prices are a good example.) Since single-precision
floating-point variables are so commonly used, they are the "default" data
type; that is, if a variable name does not end with a "type" character (%,
&, #, !, or $), it is assumed to be a single-precision floating-point
variable.
Note, however, that calculations with integer variables take much less
computer time than those performed with floating-point variables. Integer
variables should be used when speed is required.
The numerical variables in the remaining examples in this chapter are
marked with the appropriate type suffix, either ! or %. Although most of
these are single-precision floating-point variables, which need no type
suffix, they are given the ! suffix for clarity.
String Variables
A string variable holds a sequence (a string) of characters. A variable
name ending in $ is a string variable. Just as a numeric variable is given
an initial value of 0, a newly defined string variable is assigned an
initial length of zero. It contains no data at all, not even blank spaces.
If blank$ has not previously been given a value, the statement
PRINT blank$
displays an empty line.
Assigning Values to Variables
A variable gets its value through an "assignment" statement. An assignment
statement has three components: the variable that receives a new value; an
equal sign (=); and the number, string, or calculation whose value the
variable takes on. These are all valid assignment statements:
age% = 41
myname$ = "Willie"
result! = result3! + leftval! + rightval!
In the next example program, two strings are combined with the plus sign
(+) to make a longer string. The result is assigned to a third string.
1. Choose the File menu's New Program command to clear the View window
(press ALT+F, then press N).
2. Type the following example in the View window:
string1$ = "Hello,"
string2$ = " there!"
bigstring$ = string1$ + string2$
PRINT bigstring$
3. Choose the Run menu's Start command (press ALT+R, then press S).
The output should look like the following:
Hello, there!
4. Type CLS in the Immediate window and press ENTER to clear the output
screen.
Although assignment is shown by the equal sign, it is not the same thing
as algebraic equality. To BASIC, the assignment statement means: "Perform
all the calculations and data manipulations on the right side of the equal
sign. Then give the variable on the left side the result."
The same variable name can appear on both sides of the assignment
statement. This occurs most often when you want to change the variable's
value. Try the following example program:
1. Choose the File menu's New Program command to clear the View window.
2. Type the following example in the View window:
counter% = 6
PRINT counter%
counter% = counter% - 1
PRINT counter%
3. Choose the Run menu's Start command.
The output should look like the following:
6
5
4. Type CLS in the Immediate window and press ENTER to clear the output
screen.
You cannot assign numeric values to string variables (or vice versa).
Therefore, the following statements are illegal. Either one halts
execution and causes the error message Type mismatch when the program
runs.
strg$ = 3.14159
number! = "hi, there"
Calculations
In BASIC, the mathematical operations of addition, subtraction,
multiplication, and division are represented by +, -, * (the asterisk),
and / (the slash), respectively. Exponentiation (raising a number to a
power) is shown by ' (the caret). You can type each of the following on a
line in the Immediate window, then press ENTER to see the results of the
operations:
Operation Result
──────────────────────────────────────────────────────────────────────────
PRINT 2 + 3 5
PRINT 2 - 3 -1
PRINT 2 * 3 6
PRINT 2 / 3 .6666667
PRINT 2 ' 3 8
──────────────────────────────────────────────────────────────────────────
Integer Division and the Remainder Operator
BASIC has two math operations you may not have seen before, integer division
and the remainder operator.
Integer division retains the integer (whole-number) part of the division
and discards the fractional part. Integer division is represented by \
(the backslash). You can type each of the following on a line in the
Immediate window, then press ENTER to see the results of the operations:
Operation Result
──────────────────────────────────────────────────────────────────────────
PRINT 7 \ 3 2
PRINT 9.6 \ 2.4 5
──────────────────────────────────────────────────────────────────────────
Both integer division and the remainder operator round off the numbers to
be operated on before the calculation is performed. The number 9.6 becomes
10 and 2.4 becomes 2. Therefore, the result of the second example above is
5, not 4.
The remainder operator is the complement of integer division. The
whole-number part of the division is discarded, and the remainder is
returned. Remainder division is performed by the BASIC keyword MOD. You
can type each of the following on a line in the Immediate window, then
press ENTER to see the results of the operations:
Operation Result
──────────────────────────────────────────────────────────────────────────
PRINT 7 MOD 3 1
PRINT 11 MOD 4 3
──────────────────────────────────────────────────────────────────────────
Precedence of Operations
BASIC evaluates mathematical expressions from left to right, following the
rules of algebraic precedence: exponentiation is performed first, then
multiplication and division, then addition and subtraction. The following
example program illustrates algebraic precedence:
1. Type the following line in the Immediate window, then press ENTER:
PRINT 2 * 3 + 2 ' 3 - 2 / 3
The output should appear as follows:
13.33333
2. Type CLS in the Immediate window and press ENTER to clear the output
screen.
Parentheses can confirm or override the normal precedence. Try this
example:
1. Type the following line in the Immediate window, then press ENTER:
PRINT (2 * 3) + (2 ' 3) - (2 / 3)
The output should appear as follows:
13.33333
2. Type CLS in the Immediate window and press ENTER to clear the output
screen.
The result is the same as in the last example because the precedence of
operations dictated by the parentheses is no different from the usual
order. However, the next example program produces a different result:
1. Type the following line in the Immediate window, then press ENTER:
PRINT 2 * (3 + 2) ' (3 - 2 / 3)
The output should appear as follows:
85.49879
2. Type CLS in the Immediate window and press ENTER to clear the output
screen.
The result here is different because the calculations within parentheses
are performed first. Within parentheses, the usual precedence still
applies, of course. The expression (3 - 2 / 3) evaluates as (3 -
.6666667), not (1 / 3).
You might want to use parentheses to control the order of calculations,
rather than depending on precedence. Parentheses prevent errors and make
your programs easier to understand.
Math Functions
Along with the addition, subtraction, multiplication, and division
operators just presented, BASIC provides a number of common math
functions, described briefly below. To use them, follow the function name
with the variable or expression you want the function performed on (in
parentheses). The expression may be any valid combination of variables,
numbers, and math functions. (Expressions are explained further in the
following section.)
Function Description
──────────────────────────────────────────────────────────────────────────
ABS Returns the absolute value of the expression
ATN Returns the angle (in radians) whose tangent
equals the expression
COS Returns the cosine of an angle (in radians)
EXP Returns e to the power of the expression
LOG Returns the logarithm of the expression
SGN Returns -1 if the expression is less than 0;
returns 0 if it is 0; returns +1 if it is greater
than 0
SIN Returns the sine of an angle (in radians)
SQR Returns the square root of the expression
TAN Returns the tangent of an angle (in radians)
──────────────────────────────────────────────────────────────────────────
The following example program shows the use of the square-root function:
1. Choose the File menu's New Program command to clear the View window.
2. Type the following example in the View window:
adjacent! = 3.0
opposite! = 4.0
hypotenuse! = SQR((adjacent! ' 2) + (opposite! ' 2))
PRINT "the hypotenuse is:"; hypotenuse!
3. Choose the Run menu's Start command.
The output should look like the following:
the hypotenuse is: 5
4. Type CLS in the Immediate window and press ENTER to clear the output
screen.
Expressions
An "expression" is what most people would call a formula. An expression is
any combination of numbers, strings, variables, functions, and operators
that can be evaluated. For example, 2 + 2 is a simple expression. It
evaluates to four. Enter the following statements in the View window to
assign a variety of simple expressions to variables, as follows:
1. Choose the File menu's New Program command to clear the View window.
2. Type the following example in the View window:
square% = 3 ' 2
root! = SQR(3 ' 2)
greeting$ = "Hello," + " world! "
strange! = 9 + "cats"
The last statement you typed was illegal.
3. Choose the Run menu's Start command.
QuickBASIC displays the error message Type mismatch. You cannot add a
number (or numerical variable) to a string (or string variable).
4. Type CLS in the Immediate window and press ENTER to clear the output
screen.
Expressions may be as complex as you like, with the results of one
expression passed to a function, the value returned by a function combined
with other expressions, and so on.
Almost any place you can use a number or a string, you can use any
expression (no matter how complex) that evaluates to a number or a string.
This means expressions can be used in BASIC's math functions, PRINT
statements, and assignment statements.
Displaying Variables and Expressions
The PRINT statement was first shown in this chapter as a way to display
numbers and strings. The PRINT statement can also display the values of
variables and expressions. For example, try this:
1. Type the following lines in the Immediate window, then press ENTER:
PRINT (2 + 8) / 4 + 1
The output should appear as follows:
3.5
2. Type CLS in the Immediate window and press ENTER to clear the output
screen.
The PRINT statement is quite flexible; it can display any combination of
strings, numbers, variables, and expressions. The items to be displayed
are separated by semicolons (;) or commas (,). When a semicolon separates
two items, the second item is displayed immediately after the first, as
shown in the example program below:
1. Type the following line in the Immediate window, then press ENTER:
PRINT "Sum of 5.29 and"; 2.79; "is"; 5.29 + 2.79
The output should appear as follows:
Sum of 5.29 and 2.79 is 8.08
2. Type CLS in the Immediate window and press ENTER to clear the output
screen.
Here's another example program to try:
1. Choose the File menu's New Program command to clear the View window.
2. Type the following example in the View window:
number = 36
PRINT "The sum of"; number; "and 4 is"; number + 4
PRINT "The square of"; number; "is"; number * number
3. Choose the Run menu's Start command.
The output should look like the following:
The sum of 36 and 4 is 40
The square of 36 is 1296
4. Type CLS in the Immediate window and press ENTER to clear the output
screen.
If two items in a PRINT statement are separated by a comma, the second
item is positioned at the next preset tab location. (The tab stops are 14
columns apart.) Note the difference between the output of the following
PRINT statement and that of the similar one with semicolons, above:
1. Enter the following lines in the Immediate window, then press ENTER:
PRINT "Sum of 5.29 and", 2.79, "is", 5.29 + 2.79
The output should appear as follows:
Sum of 5.29 and 2.79 is 8.08
2. Type CLS in the Immediate window and press ENTER to clear the output
screen.
Commas and semicolons can be used in the same PRINT statement to position
the items any way you like.
Each PRINT statement normally places its output on a new line, as the
following example program shows:
1. Choose the File menu's New Program command to clear the View window.
2. Type the following example in the View window:
PRINT "How old are you?"
PRINT 41
The output should appear as follows:
How old are you?
41
3. Choose the Run menu's Start command.
4. Type CLS in the Immediate window and press ENTER to clear the output
screen.
If you want to combine the output of several PRINT statements on the same
line, place a semicolon (;) at the end of each PRINT statement. Change the
last example program as follows:
1. Choose the File menu's New Program command to clear the View window.
2. Type the following example in the View window:
PRINT "How old are you?";
PRINT 41
3. Choose the Run menu's Start command.
The output should look like the following:
How old are you? 41
4. Type CLS in the Immediate window and press ENTER to clear the output
screen.
Entering Data with the INPUT Statement
The INPUT statement displays a prompt string, then waits for the user to
enter some value. The value entered in response to the prompt is assigned
to the variable specified in the INPUT statement.
INPUT "enter your age: ", age%
PRINT age%
If you typed 39 in response to the enter your age: prompt, the value 39
would be assigned to the variable age%, and that value would be printed by
the following PRINT age% statement.
INPUT also accepts strings:
INPUT "What is your name? ", yourname$
PRINT yourname$
A string variable will accept whatever you type, since all entries──even
numbers──are actually strings. (When you type 42, you are not typing the
number 42, but rather the characters 4 and 2. If the input variable is
numerical, BASIC converts this string into a number. If the input variable
is a string, the character sequence 42 is simply assigned to the string.)
A numeric variable, however, can only be assigned a number. If you type
dog when you should have entered a number, BASIC responds with the message
Redo from start and a new prompt line.
Arrays of Variables
If you wanted to keep track of the high temperature for each day in July,
you could use 31 floating-point variables, named july1, july2, july3, and
so on through july31.
However, a group of related but individually named variables is clumsy to
work with; each variable has to be handled separately. For example, if you
wanted to prompt the user for each temperature in July, you would have to
write 31 individual prompt statements.
INPUT "What is the temp value for July 1? ", july1
.
.
.
INPUT "What is the temp value for July 31? ", july31
An analogous problem occurs when you're trying to write a program that
retrieves the stored data. You wouldn't want to write a program that
displayed all 31 variable names to be able to retrieve the value for any
specific one (say, the high temperature for July 4──the value for july4).
It would be much more convenient if you could just give the computer the
date (the number 4) and the computer would select the right variable and
value.
The solution is to give the entire set of values the same name (july in
our example) and distinguish the individual values by a numerical index
called a "subscript." A group of identically named variables distinguished
by their subscript values is called an "array." (See Figure 4.2 for an
example.) Arrays can be especially powerful when used in conjunction with
loops (see the section titled "Repeating Program Operations").
┌─────────────────────────────────────────────────────────────────┐
│ │
│ ┌───────────┬───────────┬───────────┬───────────┬───────────┐ │
│ │ Price (0) │ Price (1) │ Price (2) │ Price (3) │ Price (4) │ │
│ └───────────┴───────────┴───────────┴───────────┴───────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
Figure 4.2 Array Created by the BASIC Statemenet DIM Price (4)
Declaring Arrays
An array variable must first be "declared" with a DIM statement, which
establishes the size of the array. A DIM statement must appear before the
array variable can be used.
The value given in the DIM statement specifies the maximum value for the
variable's subscript. For example, the following statement declares an
array of 32 floating-point variables named july, whose subscripts run from
0 to 31:
DIM july(31)
DIM also works with string variables:
DIM stringvar$(250)
Specifying Array Elements
You can specify the nth member (or "element") of an array simply by
putting the number n (or a variable or expression with the value n) in
parentheses following the variable name. In this way the program can
connect a specific variable with a number entered by the user. For
example, the fourth element of the july array could be specified by either
july(4) or──if d% equals four──july(d%) or even july(SQR(16)).
The following code fragment prompts the user for the date, then prints the
high temperature for that day in July (assuming that all the temperatures
have been assigned to the array july).
DIM july(31)
INPUT "enter July date: ", date%
PRINT "high temperature for July"; date%; "was"; july(date%)
Logical Relations Used in Decision-Making
BASIC can decide whether two numbers or strings are the same or different.
On the basis of such a decision, an appropriate group of program
statements can be executed or repeated.
For example, suppose the standard income-tax deduction is $2500. If your
itemized deductions are less than $2500, you would take the standard
deduction. If your itemized deductions are greater than $2500, you would
itemize. An income-tax program can make this decision and execute either
the part of the program that performs itemized deductions or the part that
takes the standard deduction. The user doesn't have to tell the program
what to do.
The following sections explain how BASIC makes logical decisions that can
be used in your programs.
Relational Operators
Numbers and strings are compared using "relational operators." There are
six possible relationships, shown by the following operators:
Relational Operator Meaning
──────────────────────────────────────────────────────────────────────────
= Equal to
<> Not equal to
> Greater than
< Less than
>= Greater than or equal to
<= Less than or equal to
──────────────────────────────────────────────────────────────────────────
──────────────────────────────────────────────────────────────────────────
NOTE
BASIC uses the equal sign (=) both to assign a value to a variable and
also to indicate logical equality. BASIC knows which usage is intended
from the context.
──────────────────────────────────────────────────────────────────────────
The following list shows how these relationships are evaluated:
Relational Operation Evaluation
──────────────────────────────────────────────────────────────────────────
7 = 35 False
7 <> 6 True
6 > 1 True
4 < 3 False
7 <= 7 True
8 >= 7 True
apples = oranges Depends on values of variables
──────────────────────────────────────────────────────────────────────────
As for the last statement──apples aren't oranges. But if apples and
oranges were variable names, then the truth or falsity of the statement
would depend on the values of these variables.
The following relational operations compare strings. Are they true or
false?
"Tarzan" <> "Jane"
"Y" = "Y"
"Y" = "y"
"miss" > "misty"
Tarzan and Jane are different strings, so the first assertion is true. Y
and Y are the same character, so the second assertion is true. Y and y are
not the same character, so the third assertion is false.
The last statement may be confusing at first; how can one string be
"larger" or "smaller" than another? It can be, and the decision is made
this way. The strings are first compared, position by position, until
BASIC finds characters that don't match. In this example, the fourth
characters are the first nonmatching characters. The decision of "larger"
or "smaller" is then based on these differing characters, in the following
way.
Within the computer, characters are represented by numbers. Letters coming
later in the alphabet have numeric values larger than those appearing
earlier. Since t follows s in the alphabet, t is a "larger" letter, and
the statement is therefore false; misty is "larger" than miss. This
ability to determine the relative value of strings makes it easy to write
a program that can alphabetize a list of words or names.
In most of these examples, numbers were compared with numbers and strings
with strings. But any combination of numbers and numerical variables can
be compared; the same is true for strings and string variables. The only
things you cannot compare are numerical values with string values because
the comparison is logically meaningless.
Boolean Expressions
Logical assertions are called "Boolean expressions" (for George Boole, who
formulated some of the rules of mathematical logic). Boolean operations
are concerned with only one thing: is a Boolean expression true or false?
Unlike mathematical expressions, which evaluate to numbers, Boolean
expressions evaluate to one of two values: "true" or "false."
Computers use numbers to represent "true" and "false." To see how BASIC
codes "true" and "false," enter and run these two lines, as follows:
1. Choose the File menu's New Program command to clear the View window.
2. Type the following example in the View window:
PRINT 5 > 6
PRINT 6 > 5
3. Choose the Run menu's Start command.
The output should look like the following:
0
-1
The display shows 0 on the first line, -1 on the second.
The number 5 is not greater than 6, so BASIC prints its value for
"false": 0. The number 6 is greater than 5, so BASIC prints its value
for "true": -1.
4. Type CLS in the Immediate window and press ENTER to clear the output
screen.
Compound Expressions
In BASIC, a compound Boolean expression is created by connecting two
Boolean expressions with a "logical operator." The two most commonly used
logical operators are AND and OR.
The AND operator requires both expressions to be true if the compound
expression is to be true. When the OR operator is used, only one of the
expressions has to be true for the compound expression to be true.
The following examples are compound expressions that combine two simple
expressions by using AND or OR:
Expression Evaluation
──────────────────────────────────────────────────────────────────────────
10 > 5 AND 100 < 200 True
3 < 6 AND 7 > 10 False
8 < 7 OR 90 > 80 True
2 < 1 OR 3 > 60 False
"Y" > "N" AND "yes" <> "no" True
"Y" < "N" OR 4 <> 4 False
──────────────────────────────────────────────────────────────────────────
The NOT operator reverses the truth or falsity of an expression:
Expression Evaluation
──────────────────────────────────────────────────────────────────────────
NOT (5 > 10) True
NOT (8 < 7 OR 90 > 80) False
NOT (3 < 6 AND 7 > 10) True
NOT (0) True
──────────────────────────────────────────────────────────────────────────
The logic of the last example may not be immediately obvious. In BASIC,
false is zero. Therefore, NOT (0) means "not false," or true. Combinations
of AND, OR, and NOT can be used to build up very complex expressions.
There is no practical limit to their complexity, except the obvious one of
writing an expression that is difficult to read.
When Boolean expressions are evaluated, the precedence of evaluation is
taken in the same order as arithmetic expressions, with AND equivalent to
multiplication and OR equivalent to addition. Evaluation goes from left to
right, with all the simple expressions evaluated first. All the
AND-connected expressions are evaluated next, followed by the OR-connected
expressions. As with arithmetic expressions, parentheses can be used to
control the order of evaluation, rather than relying on the rules of
precedence.
See Chapter 1, "Control-Flow Structures," in Programming in BASIC, for
more explanation of why BASIC considers -1 equivalent to true.
The next sections show how Boolean expressions are used in programs.
Using Logical Statements to Control Program Flow
You are always deciding what to do next by evaluating your priorities and
desires, asking yourself which is most important at the moment. Similarly,
BASIC has a mechanism that allows your program to select which set of
operations (that is, which part of the program) will be executed next.
This mechanism is the IF...THEN...ELSE statement. If a Boolean expression
is true, the statements following THEN are executed. If the expression is
false, the statements following ELSE are executed. A Boolean expression
must be either true or false, so one or the other group of statements has
to execute. Both cannot execute.
The process of selecting among two or more possible actions (or sections
of program code) is called "branching." The analogy is with the way a tree
branch subdivides into more and more branches.
This is the syntax of the IF...THEN...ELSE statement:
IF booleanexpression THEN
statements to do something
ELSE
statements to do something else
END IF
Try the following simple example to use the IF...THEN...ELSE statement to
decide whether a number entered is greater than, less than, or equal to
100:
1. Choose the File menu's New Program command to clear the View window.
2. Type the following example in the View window:
INPUT "enter a number: ", n
IF n > 100 THEN
PRINT n; "is greater than 100"
ELSE
PRINT n; "is less than or equal to 100"
END IF
3. Choose the Run menu's Start command.
The logical opposite of "greater than" is "less than or equal to" (not
"less than"). Run this example with several values for n, including a
value of 100 to verify that the is less than or equal to 100 statement
is displayed.
4. Type CLS in the Immediate window and press ENTER to clear the output
screen.
See Chapter 1, "Control-Flow Structures," in Programming in BASIC for a
more detailed explanation of the IF...THEN...ELSE statement and other
decision structures available in QuickBASIC.
Repeating Program Operations
BASIC offers several ways to execute a group of program statements
repeatedly. You can repeat them a fixed number of times or until a
particular logical condition is met. If you want to execute a block of
statements 100 times, you need only type them in once. BASIC's control
structures then control the repetitions.
The ability to repeat program statements has many uses. For example, to
raise a number N to the power P, N must be multiplied by itself P times.
To enter data for a ten-element array, you must prompt the user ten times.
The FOR...NEXT Loop
One way to repeat a section of the program is the FOR...NEXT loop. The
block of program statements between the FOR and NEXT keywords is executed
repeatedly a specified number of times. Try the following:
1. Choose the File menu's New Program command to clear the View window.
2. Type the following example in the View window:
FOR count% = 1 TO 5
PRINT "this line is printed 5 times; this is time"; count%
NEXT count%
3. Choose the Run menu's Start command.
The output should look like the following:
this line is printed 5 times; this is time 1
this line is printed 5 times; this is time 2
this line is printed 5 times; this is time 3
this line is printed 5 times; this is time 4
this line is printed 5 times; this is time 5
4. Type CLS in the Immediate window, then press ENTER to clear the output
screen.
In the example above, the variable count% is called the "loop variable" or
"loop counter." The two numbers after the equal sign (separated by the
keyword TO) are the start and end values for the loop counter. In this
example, 1 is the start value, and 5 is the end value.
Before the statements in the FOR...NEXT loop are executed for the first
time, the loop counter is given the start value (in this case, 1). After
each execution of the statements in the loop, BASIC automatically
increments count% by one. This cycle continues until count% is larger than
the end value (in this case, 5). The statements between the FOR and NEXT
keywords in this example are therefore executed five times.
To repeat a FOR...NEXT loop n times, the start and end values would
normally be 1 and n. This is not a necessity, though. They can have any
two values that differ by n - 1. For example, using -2 and 2 would also
cause five repetitions.
The counter can be the subscript variable for an array. (Accessing each
element in an array is a common use for a FOR...NEXT loop.) The next
example prompts the user for the high temperature on each day in July:
DIM july!(31)
FOR date% = 1 TO 31
PRINT "enter the high temp for July"; date%;
INPUT " ", july!(date%)
NEXT date%
Neither the start nor the end value has to be a constant; either or both
can be a variable. The following example requests start and end values,
then prints out the square root of every value in that range:
INPUT "starting value? ", startval%
INPUT "ending value? ", endval%
FOR count% = startval% TO endval%
PRINT "the square root of"; count%; "is"; SQR(count%)
NEXT count%
The increment defaults to a value of one if it isn't specified. The STEP
statement sets a different increment value, as shown in the following
procedure:
1. Choose the File menu's New Program command to clear the View window.
2. Type the following example in the View window:
FOR count% = 5 TO 1 STEP -1
PRINT "this line is printed 5 times; this is time"; count%
NEXT count%
3. Choose the Run menu's Start command.
The output should look like the following:
this line is printed 5 times; this is time 5
this line is printed 5 times; this is time 4
this line is printed 5 times; this is time 3
this line is printed 5 times; this is time 2
this line is printed 5 times; this is time 1
4. Type CLS in the Immediate window, then press ENTER to clear the output
screen.
The step value must be consistent with the start and end values. If the
end value is larger than the start value, the step must be positive. If
the end value is smaller than the start value, the step must be negative.
If the step has the wrong sign, the FOR...NEXT loop doesn't execute even
once; it is skipped over.
The DO...LOOP
You have just seen one way to repeat a section of the program, the
FOR...NEXT loop. The FOR...NEXT loop, however, has a serious limitation.
Although you can specify the starting and ending points, the loop itself
is fixed; it repeats a specific number of times, no more and no less.
This caused no problem in the example where you were prompted for the 31
high temperatures in July, because July always has 31 days. However, there
are times you can't know how often to repeat a calculation or an
operation.
Suppose you were searching through text, one line at a time, for a
specific word. You don't know which line the word is on (if you did, you
wouldn't have to search), so you can't specify the number of times to go
through a FOR...NEXT loop. You need a flexible (rather than fixed) way to
repeat groups of program statements.
The DO...LOOP is the more flexible mechanism for repetition needed here.
Program statements between the DO and LOOP keywords are repeated an
indefinite number of times. Try the following example:
1. Choose the File menu's New Program command to clear the View window:
2. Type the following example in the View window.
DO
PRINT "Going around in circles..."
LOOP
3. Choose the Run menu's Start command.
Going around in circles... is printed over and over, without end. (To
stop the program, press CTRL+BREAK.)
4. Type CLS in the Immediate window and press ENTER to clear the output
screen.
The simple DO...LOOP shown above is endless. BASIC has a way to terminate
the loop at the right time. All you have to do is specify the logical
condition you want to cause termination.
One way to do this is to use a WHILE condition, which tells the computer
to continue executing the loop WHILE some condition is true. Another is to
use an UNTIL condition, meaning continue executing the loop UNTIL some
condition becomes true.
In a DO WHILE loop, the condition starts off true, and the loop executes
as long as the condition remains true. In a DO UNTIL loop, the condition
starts off false, and the loop executes until the condition becomes true.
The user-defined condition is a Boolean expression. This expression
usually compares a variable with a constant. When the expression satisfies
the logical condition set by the programmer (such as the variable
equalling the constant), the loop terminates. (Any comparison is possible,
but comparing the loop variable with a number or string is the most
common.)
The DO WHILE Loop
A DO WHILE loop looks like this:
DO WHILE booleanexpression
statements to be repeated
LOOP
Here is a simple DO WHILE loop that demonstrates how such a loop operates.
The loop termination condition is for big! to equal little!.
big! = 256.0
little! = 1.0
DO WHILE big! <> little!
PRINT "big ="; big!; " little ="; little!
big! = big! / 2.0
little! = little! * 2.0
LOOP
Two variables, big! and little!, are initialized outside the loop. Within
the loop, their values are first printed, then big! is divided by 2 and
little! is multiplied by 2. The process repeats until both are equal to 16
and the loop terminates.
The initial values of big! and little! were chosen to guarantee that they
would eventually be equal. If they are not so chosen, the loop repeats
indefinitely. (In practice, the program eventually stops regardless of the
values chosen. The variable little! is repeatedly doubled, ultimately
becoming so large that its value cannot be represented by a BASIC
floating-point variable. The program then halts, displaying an Overflow
error message.)
Please note that for a DO WHILE loop to execute even once, the Boolean
expression must be true. If big! and little! started with the same value,
the expression big! <> little! would be false, and the loop would not
execute at all; it would be skipped over. Always be sure the variables in
the Boolean expression have the values you really want before entering the
loop.
The DO UNTIL Loop
A DO UNTIL loop is identical in form to a DO WHILE loop, except it uses
the keyword UNTIL:
DO UNTIL booleanexpression
statements to be repeated
LOOP
The loop shown in the last example could also have been written using
UNTIL, as shown here:
big! = 256.0
little! = 1.0
DO UNTIL big! = little!
PRINT "big ="; big!; " little ="; little!
big! = big! / 2.0
little! = little! * 2.0
LOOP
A DO UNTIL loop continues until the Boolean expression becomes true, so a
different terminating condition is needed. In this case, it is the
opposite of the condition in the DO WHILE example above: big! = little!.
The following is a more practical example of a DO...LOOP. The user is
repeatedly prompted for a Yes / No response (indicated by Y or N) until it
is supplied:
DO UNTIL instring$ = "Y" OR instring$ = "N"
INPUT "enter Yes or No (Y/N): ", instring$
LOOP
PRINT "You typed"; instring$
Note that y and n are not accepted, since instring$ is compared only with
uppercase characters.
──────────────────────────────────────────────────────────────────────────
NOTE
In the loop examples given, both the WHILE and UNTIL statements are
located after DO. It is also possible to place them following the LOOP
keyword. When that is done, the statements in the loop are executed
first, then the condition is tested. This assures that the loop will
always be executed at least once. See Chapter 1, "Control-Flow
Structures," in Programming in BASIC, for an explanation of how this
works.
──────────────────────────────────────────────────────────────────────────
Writing a Simple BASIC Program
If you've worked through the examples, you should now know the
fundamentals of programming in BASIC. To demonstrate your understanding,
try writing the simple program described below.
The program computes the average of several numbers. It could be written
in the following sequence:
1. Prompt the user for the quantity of numbers to be averaged.
2. If the quantity is zero or negative, print a warning message and do
nothing else.
3. If the quantity is positive, pick a variable name for the running total
and set it equal to zero.
4. Prompt for the numbers, one at a time. Tell the user each time which
value is being entered (number 1, number 2, and so on).
5. When all the numbers have been entered, compute and print the average
value.
This program uses only BASIC language elements that have been explained in
this chapter, and no programming "tricks" are needed. A solution is given
below, but please try to create your own program before peeking. This is
an "open-book" project. If you get stuck, simply reread this chapter to
find the program statements you need and to see how they are used.
There are many ways to write a program. If your program works, it's
correct, even if it differs from the program given here.
INPUT "How many numbers do you wish to average? ", howmany%
IF howmany% <= 0 THEN
PRINT "Not a valid quantity; must be greater than 0."
ELSE
total! = 0.0 ' Set running total to zero.
FOR count% = 1 TO howmany%
PRINT "number"; count%;
INPUT " ", value!
total! = total! + value!
' Add next value to total.
NEXT count%
PRINT "The average value is"; total! / howmany%
END IF
For More Information
Now you know how to write simple programs in BASIC. There is, however, a
great deal more to BASIC programming.
QuickBASIC's manuals and on-line help provide complete information on
using the QuickBASIC environment and each of the QuickBASIC statements and
functions. However, the documentation does not include a complete
introduction to BASIC, and does not teach the general principles of
programming, or how to use DOS. The following books contain more
information on those subjects. They are listed for your convenience only.
With the exception of its own publications, Microsoft Corporation neither
endorses these books nor recommends them over others on the same subjects.
Books about BASIC
Craig, John Clark. Microsoft QuickBASIC Programmer's Toolbox. Redmond,
Wash.: Microsoft Press, 1988.
Dwyer, Thomas A., and Margot Critchfield. BASIC and the Personal Computer.
Reading, Mass.: Addison-Wesley Publishing Co., 1978.
Enders, Bernd, and Bob Petersen. BASIC Primer for the IBM PC & XT. New
York, N.Y.: New American Library, 1984.
Feldman, Phil, and Tom Rugg. Using QuickBASIC 4. Carmel, Ind.: Que
Corporation, 1988.
Hergert, Douglas. Microsoft QuickBASIC. 2d ed. Redmond, Wash.: Microsoft
Press, 1988
The first edition of this book discusses programming techniques
appropriate for QuickBASIC Versions 2.0 and 3.0. Use the second edition
for information on programming in QuickBASIC Version 4.0.
Inman, Don, and Bob Albrecht. Using QuickBASIC. Berkeley, Cal.: Osborne
McGraw-Hill, 1988.
Books about DOS
Duncan, Ray. Advanced MS-DOS. Redmond, Wash.: Microsoft Press, 1986.
Wolverton, Van. Running MS-DOS. 2d ed. Redmond, Wash.: Microsoft Press,
1985.
Wolverton, Van. Supercharging MS-DOS. Redmond, Wash.: Microsoft Press,
1986.
────────────────────────────────────────────────────────────────────────────
PART 2 HANDS ON WITH QUICKBASIC
────────────────────────────────────────────────────────────────────────────
Part 2, "Hands On with QuickBASIC" is a tutorial in which you finish a
real application program, QCARDS.BAS. Although QCARDS is a model of good
structured programming, the purpose of the tutorial is to introduce the
Microsoft QuickBASIC environment, rather than teach programming
techniques. The comments that describe each code block may be all you need
to understand the programming, but you don't have to understand the
programming concepts used in each section before moving on to the next.
When you finish the tutorial, you will have used three of QuickBASIC's
most sophisticated features──the smart editor, on-line help, and
debugging──in real programming situations. Then you can review the program
comments and code and use QuickBASIC's on-line help and debugging features
to understand how each block works.
Chapter 5 describes the structure of QCARDS, previews its interface, and
shows you how to enter a SUB...END SUB procedure. In Chapter 6 you'll see
how the smart editor helps catch and correct programming errors as you
enter code. Chapters 7 and 8 give you practice in using on-line help the
way you will use it while writing your own programs. In Chapter 9 you
will track and fix a bug so QCARDS will run correctly. At the end of
Chapter 9, QCARDS is fully functional and ready to use.
────────────────────────────────────────────────────────────────────────────
Chapter 5 The QCARDS Program
This chapter describes QCARDS.BAS, the program on which the rest of the
tutorial on QuickBASIC is based. You'll add some code in the form of a
"procedure," a routine you write once and then call from different parts
of the program, to perform a specific task. In this chapter, you will
■ Load a program at the same time you invoke QuickBASIC
■ Browse through the QCARDS.BAS code
■ Call procedures from the Immediate window
■ Create and call a SUB procedure
This chapter takes about one hour to complete.
Building QCARDS
As you work through the QuickBASIC tutorial in Chapters 5-9, you'll add
lines of code to the QCARDS program. The code-entry sequences that are
part of QCARDS appear under special headings, so you know which ones are
necessary for finishing the tutorial program. You can save your work as
you finish each numbered sequence. If you make a mistake during a
code-entry sequence, just reload the previous saved version and repeat the
current sequence.
──────────────────────────────────────────────────────────────────────────
NOTE
As you browse through QCARDS, you may notice some errors in the code.
These errors are intentional. You will fix them as you work through the
tutorial.
──────────────────────────────────────────────────────────────────────────
Loading a Program When You Start QuickBASIC
You can start QuickBASIC and load a program at the same time by including
the program name as a command-line "argument." An "argument" is
information you supply to a command to modify the command.
──────────────────────────────────────────────────────────────────────────
NOTE
If you don't have a hard disk, copy the files QCARDS.BAS and QCARDS.DAT
to an empty removable disk and use that disk to complete the tutorial.
──────────────────────────────────────────────────────────────────────────
Type the following line at the DOS prompt to start QuickBASIC and have it
automatically load QCARDS.BAS:
► qb qcards
When you start QuickBASIC this way, QuickBASIC searches the current
working directory for a file with the name QCARDS and the extension .BAS.
If QuickBASIC finds the file, it loads it. If the file is not found,
QuickBASIC assumes you are starting a new program that you want to name
QCARDS.BAS.
A Quick Tour of QCARDS
If you completed the computer-based training called QB Express, you'll
recognize some of QCARDS. In Chapters 5-9 you'll work with the real
QCARDS code.
If you are new to programming, some of this material may seem difficult
because QCARDS is a real application program. Don't worry──you don't need
to master all the material in each section before moving on. This tutorial
is designed to teach the programming tools of the QuickBASIC environment,
not programming techniques.
Even if you have programmed in BASIC before, you may learn some powerful
techniques because QCARDS is a structured program that uses procedures. In
fact, if you have used a BASIC interpreter (like GW-BASIC(R) or BASICA),
you're in for a pleasant surprise.
The QCARDS Program
QCARDS is a database program. It provides a convenient way to work with
many small collections of information (called records), which are stored
together in a disk file. QCARDS manages the disk file──opening and closing
it and updating the records as you modify, add, or delete specific pieces
of information or whole records. The fun part of QCARDS is the
"interface," the part of the program where the user interacts with QCARDS
(see Figure 5.1).
┌Records have fields
│such as street and city QCARDS' help┐
┌───────────┼──────────────────────────────────────────────────────────┼┐
│ │ ││
│ │ ││
│ ├─────────────────────────────────────┐ ││
│ ┌─┼───────────────────────────────────┐═╡ ┐ ││
│ ┌─┴─┼─────────────────────────────────┐═╡ │Select card with: │ ││
│ ┌─┴───┼───────────────────────────────┐═╡ │ │ UP │ ││
│ ┌─┌─┴─────┼─────────────────────────────┐═╡ │ │ │ DOWN │ ││
│ │ ╞═══════╪═════════════════════════════╡ │ │ │ │ PGUP ├─┘│
│ │ │Note: │_____________________________│ │ │ ├─┘ PGDN │ │
┌─┼─│ │Birth: │__/__/__ Phone: ___-___-____│ │ ├─┘ HOME │ │
│ │ │ │Street:│\____________________________│ ├─┘ END │ │
│ │ │ │City: _▼__________ ST: ___ Zip: _____├─┘ ┘ │
│ │ └ └─────────────────────────────────────┘ │
│ │ ┐ │
│ │Edit Top Add New Copy to New Delete Find Sort Print Quit ├──┐ │
│ │ ┘ │ │
│ └───────────────────────────────────────────────────────────────────┼───┘
└──Each card represents a record. QCARDS' command line─┘
Figure 5.1 QCARDS' Interface
QCARDS uses the concept of an index-card file to present the data in a
familiar way. Each card that appears on screen represents a record in the
database. Each card has several "fields" (separate areas on the card) that
are used to enter new data or change and reorder existing data.
Once you understand QCARDS, you can modify the data (and the program
itself) and use it for any kind of information you wish to store. QCARDS
is a large program, but it is organized according to structured
programming principles (that is, it divides complicated tasks into simpler
ones). This means you can learn its programming techniques gradually. As
you read the next few sections, scroll down through QCARDS as each part is
described.
Declarations and Definitions
QCARDS begins with a short section describing its purpose. Next comes a
section of declarations and definitions. The declarations and definitions
use statements like DEFINT, CONST, TYPE...END TYPE, DECLARE, DIM, and
REDIM. They let QuickBASIC anticipate the amount of space to reserve in
memory for the program's variables. For example,DEFINT A-Z tells
QuickBASIC that any variable for which a data type is not explicitly
declared should be considered an integer.
CONST statements improve program readability by giving descriptive names
to values the computer regards only as numbers. For example, the value 0
(zero) represents the logical condition "false" in QuickBASIC. At about
line 45, a CONST statement defines the symbolic constant FALSE as the
value zero. This lets you use the word FALSE to represent the value 0 in
logical comparisons.
TYPE...END TYPE constructions declare "aggregate" data types. Aggregate
data types are those that can include both strings and all types of
numeric values. For example, once the PERSON data type is declared (at
about line 56), you can define variables to have this user-defined type.
Lines that begin with the DECLARE statement allow QuickBASIC to check
procedure calls to make sure you use them correctly.
Comments
After the declarations and definitions comes a large section that contains
mostly comments. Each comment block describes a block of executable
statements that you will enter as you complete QCARDS. The statements
define the program's overall flow of control. This section of QCARDS
concludes with an END statement to mark the end of the program's normal
execution sequence.
Statements Following the END Statement
The final section of the program starts after the END statement. Each
group of statements in this section is preceded by a "label," a name
followed by a colon. (A QuickBASIC label is similar to line numbers in
BASIC interpreters.) The statements associated with these labels are
executed only if other statements (that contain references to the labels)
are executed. The first label (MemoryErr) labels an error handler. If a
certain type of error occurs during execution of QCARDS, the statements
following MemoryErr display a message on the screen, then end the program.
The remaining labeled sections contain DATA statements that are executed
when the index cards are drawn on the screen.
Calling QCARDS Procedures from the Immediate Window
There are two levels of programming in QCARDS. The module level contains
the program's most general logic. The procedure level contains many
individual procedures that do the program's detailed work.
Just as you can use the Immediate Window to see the effects of a BASIC
statement, you can use it to call a program's procedures. This lets you
see the effects of a procedure without running the entire program. Each
procedure performs a specific task. The following steps illustrate how to
call procedures that display the QCARDS user interface on the output
screen:
1. Press F6 to move the cursor into the Immediate window.
2. Type CLS and press ENTER to clear the output screen. Then press a key
to return the cursor to the Immediate window.
3. Type CALL DrawCards and press ENTER.
QuickBASIC executes the DrawCards procedure. Calling a procedure is
just like executing a BASIC statement. The procedure performs its task,
then QuickBASIC waits for the next instruction.
4. Press a key to return to the Immediate window, then type the following
on the next line in the Immediate window, exactly as shown:
CALL ShowCmdLine : DO : LOOP
5. Press ENTER to execute the line you just typed.
The ShowCmdLine procedure adds the QCARDS command line to the parts
already displayed. This time, however, QuickBASIC does not immediately
display the
Press any key to continue
prompt, because the DO and LOOP statements following ShowCmdLine create
an unconditional loop (that is, an infinite loop).
Breaking an Unconditional Loop from QCARDS
While building QCARDS, you will need to escape from unconditional loops
because QCARDS does not yet respond to key presses. However, QuickBASIC
checks for one particular key-press combination, CTRL+BREAK, which lets
you break out of an infinite loop and return to the QuickBASIC
environment. Note that when you finish adding code to QCARDS, a user will
be able to press any of the high-intensity letters on the QCARDS command
line to execute commands. For example, the Q key will terminate the
program and return control to QuickBASIC because QCARDS will check each
key the user presses and carry out the requested action. Try this to break
an unconditional loop:
► Press CTRL+BREAK to return control to QuickBASIC.
Notice that when you press CTRL+BREAK, the cursor does not return to
the Immediate window (where the last statement you executed is
located). Instead, it is placed in the View window.
The Module-Level Code
Every QuickBASIC program has a module level──it's what QuickBASIC displays
in the View window when you first open the program. Most of the code you
will add to QCARDS is called "module-level code." It uses BASIC statements
and functions (in combination with QCARDS procedures), to carry out the
program's tasks, which are described in the comments. The module-level
code you add to QCARDS defines the general way QCARDS interacts with the
user.
Structured Programming with Procedures
You can write programs that have only a module level. However, the details
of each task can obscure the general program logic, making the program
difficult to understand, debug, and enhance. For ease of understanding and
debugging, QCARDS delegates most processing tasks to procedures (such as
DrawCards and ShowCmdLine) that are called when their tasks need to be
performed. Figure 5.2 illustrates the relationship between module-level
code and procedures and their execution sequences.
┌──────────────────────────────────────────────────────────────────────┐
┌─│ PROGRAM.BAS Module │─
│ └──────────────────────────────────────────────────────────────────────┘
│ ┌───────────────────────────┐ ┌──────────────────────────────┐
│ ┌─│ Module-Level Code ├─┐ ┌─┤ Procedure-Level Code ├┐
│ │ └───────────────────────────┘ │ │ └──────────────────────────────┘│
│ │ │ │ │
│ │ (Definitions and declarations)│ │ │
│ │ ∙ │ │ │
│ │ ∙ │ │ │
│ │ ∙ │ │ │
│ │ (General execution sequence) \\ \\ │
│ │ ∙ │
│ │ ∙ │
│ │ ∙ ┌────────────────────────┐ │
│ │ CALL Procedure1 ════════════════════►│SUB Procedure1 │ │
│ │ ∙◄═══════════════════════════════╗ │ ∙ │ │
│ │ ∙ ║ │ ∙ │ │
│ │ ∙ ║ │ ∙ │ │
│ │ Return Value=Procedure2═════╗ ║ │ReturnValue=Procedure2 ─┼─┐ │
│ │ ∙◄═══════════════════╗ ║ ║ │ ∙◄─────────────────────┼─┼──┐ │
│ │ ∙ ║ ║ ║ │ ∙ │ │ │ │
│ │ ∙ ║ ║ ║ │ ∙ │ │ │ │
│ │ ║ ║ ╚══│END SUB │ │ │ │
│ │ ║ ║ └────────────────────────┘ │ │ │
│ │ ║ ║ ┌────────────────────────┐ │ │ │
│ │ ║ ╚═══════►│FUNCTION Procedure2 │◄┘ │ │
│ │ ║ │ ∙ │ │ │
│ │ ║ │ ∙ │ │ │
│ │ ║ │ ∙ │ │ │
│ │ ║ │Procedure2=returnval │ │ │
│ │ ║ │ ∙ │ │ │
│ │ ║ │ ∙ │ │ │
│ │ ║ │ ∙ │ │ │
│ │ ╚══════════════│END FUNCTION ───────────┼────┘ │
│ │ └────────────────────────┘ │
│ │ │
│ │ END // // ┌────────────────────────┐ │
│ │ (Error handlers and labeled │ │ │Any number of other SUB │ │
│ │ data) │ │ │and FUNCTION procedures │ │
│ │ ∙ │ │ │called from module-level│ │
│ │ ∙ │ │ │code and from each other│ │
│ │ ∙ │ │ └────────────────────────┘ │
│ │ │ │ │
│ └───────────────────────────────┘ └─────────────────────────────────┘
└──────────────────────────────────────────────────────────────────────────
Figure 5.2 Modules and Procedures
A procedure is usually a group of statements that performs a single task.
Procedures are saved as part of the same disk file as the module-level
code. However, QuickBASIC treats procedures as logically self-contained
entities, separate from the module-level code and from each other.
Although every program has a module level, a procedure level does not
exist until a procedure is actually defined. QuickBASIC executes the
statements in a procedure only if the procedure is explicitly invoked. You
can invoke procedures from the module-level code, from other procedures,
or from the Immediate window.
A Profile of the Parts of the Program
Even though they are all in the same disk file, QuickBASIC keeps a
program's procedures separate from the module-level code and from each
other. Therefore, you can't have a procedure and module-level code (or two
procedures) in the same window at the same time. To edit these different
parts of a program, you move them in and out of the View window using the
View menu's SUBs command. The SUBs dialog box lists all the procedures in
a program. Try the following to see a profile of all the parts of QCARDS:
1. Press ALT+V, then press S to choose the View menu's SUBs command.
The SUBs dialog box lets you access all parts of your program (see
Figure 5.3). The first entry, QCARDS.BAS, is a file name. It
represents the program's module-level code.
Name of module containing Procedures are indented
procedures indented below it beneath module name.
│ │
┌┼───────────────────────────────── SUBs ───────────┼───────────────────
││ │
││Choose program item to edit │
││┌─────────────────────────────────────────────────┼───────────────────
│└┼ QCARDS.BAS PrintLabel │
│ │ AsciiKey Prompt │
│ │ CleanUp SelectField │
│ │ ClearHelp ShowCards ──────────────┘
│ │ DrawCards ShowCmdLine
│ │ EditCard ShowEditHelp
│ │ EditString ShowTopCard
│ │ FindCard ShowViewHelp
│ │ InitIndex SortIndex
│ └─←▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒→
│┌QCARDS.BAS is the Main Module
││
││ < Edit in Active > < Cancel >
├┼──────────────────────────────────────────────────────────────────────
││ < Delete > ───────────────────┐ < Help >
└┼─────────────────────────────────┼────────────────────────────────────
│ │
Describes the Deletes a file from a program,
selected item or a procedure from its file
Figure 5.3 SUBs Dialog Box
2. Press DOWN to select the first entry beneath QCARDS.BAS.
The first entry beneath QCARDS.BAS is AsciiKey. Each entry indented
beneath QCARDS.BAS represents a SUB or FUNCTION procedure used by the
program. All these procedures are saved in the QCARDS.BAS disk file.
3. Select the DrawCards procedure and press ENTER.
QuickBASIC displays the code of the DrawCards procedure in the View
window. Note that the View window's title bar contains
QCARDS.BAS:DrawCards
Use DIRECTION keys to scroll around in DrawCards. Its text is the only
text in the View window.
4. Press ALT+V, then press S to choose the View Menu's SUBs command and
select QCARDS.BAS if it is not already selected.
5. Press ENTER to return the module-level code to the View window.
QuickBASIC lets you define two types of procedures: SUB and FUNCTION
procedures. To include the code of a procedure in your program's execution
sequence, place its name wherever you want its task performed. You invoke
a SUB procedure by using its name in a CALL statement. FUNCTION procedures
are used the way QuickBASIC's intrinsic functions (like TIME$) are.
Procedures are an effective way to code tasks that are performed
repeatedly.
Defining a Procedure in QCARDS
You can start learning about procedures by writing simple ones. Do the
following to see how QuickBASIC automatically segregates each procedure
from the rest of the program. It also shows you how to define and call a
simple procedure that you'll use later in QCARDS.
QCARDS Code Entry 1
1. Place the cursor at a blank line at the end of the declarations and
definitions section in the View window (about line 102).
2. Press ENTER to create another blank line.
3. Type the words SUB Alarm and press ENTER.
QuickBASIC opens a new window and starts the procedure with the
statements SUB Alarm and END SUB. The statement DEFINT A-Z appears
above the SUB statement because when you create a procedure, it
inherits the default data type of the module-level code.
The title bar in the View window now contains the name of the module
(QCARDS.BAS) plus Alarm, the name of the procedure in the View window.
4. Type the following comment and code blocks, exactly as shown, between
the SUB and END SUB statements:
' The Alarm procedure uses the SOUND statement to send signals
' to the computer's speaker and sound an alarm.
'
'
' Parameters: None
'
' Output: Sends an alarm to the user
' Change the numbers to vary the sound.
FOR Tone = 600 TO 2000 STEP 40
SOUND Tone, Tone / 7000
NEXT Tone
You can test the procedure and see what it does by calling it from the
Immediate window.
5. Move the cursor to the Immediate window. Then type CALL Alarm and press
ENTER.
Saving Edited Text
From now on, each time you save your work you will save the program with
the name of the current chapter. When you save a program with a different
name, the old version (QCARDS.BAS, in this case) still exists unchanged on
disk. Therefore, if something makes a succeeding version of the program
unusable, you can reload the previous version of the program and start
over again.
QCARDS Code Entry 2
1. Press ALT+F, then press A to choose the File menu's Save As command.
The Save As dialog box appears (see Figure 5.4).
┌─Type your program name here
│
┌────────────────┼───── Save As ──────────────────┐
│ │ │
│ ┌──┴───────────────────────────────┐│
│ File Name: │ ││
│ └──────────────────────────────────┘│
│ C:\QB4.5\DEMO │
│ │
│ Dirs/Drives │
│ ┌──────────────┐ ┌─────── Format ────────┐ │
│ │.. ↑ │ (∙) QuickBASIC - │ │
│ │SOURCE ░ │ Fast Load and │ │
│ │[-A-] ░ │ Save │ │
│ │[-B-] ░ │ │ │
│ │[-C-] ░ │ ( ) Text - │ │
│ │[-U-] ░ │ Readable by │ │
│ │[-Z-] ↓ │ Other Programs │ │
│ └──────────────┘ └───────────────────────┘ │
├─────────────────────────────────────────────────┤
│ < OK > < Cancel > < Help > │
└─────────────────────────────────────────────────┘
Figure 5.4 Save As Dialog Box
2. Type the name chapter5 in the text box and press ENTER.
This saves the program QCARDS.BAS as CHAPTER5.BAS on disk. The Alarm
procedure that you created is saved as part of CHAPTER5.BAS.
For More Information
For more information on the topics covered in this chapter, see the
following:
Where to Look What You'll Find
──────────────────────────────────────────────────────────────────────────
Chapter 11, "The File Menu" Complete information on file
management in QuickBASIC, including
file-format options and special
commands for opening types of files
other than single-file programs.
Chapter 13, "The Edit Menu" and Complete information on creating and
Chapter 14, "The View Menu" viewing procedures in QuickBASIC.
Chapter 2, "SUB and FUNCTION Explanations of BASIC's rules for
Procedures," in Programming in BASIC creating all types of SUB and
FUNCTION procedures.
──────────────────────────────────────────────────────────────────────────
────────────────────────────────────────────────────────────────────────────
Chapter 6 Editing in the View Window
QuickBASIC's editing features let you write and modify programs quickly,
easily and accurately. As you edit, QuickBASIC checks your code to make
sure it is valid BASIC syntax. In this chapter you will use the editing
tools to
■ Discover QuickBASIC's smart editor
■ Understand QuickBASIC's automatic text formatting
■ Use on-line help to answer questions on the spot
■ Use the Edit menu's Cut, Copy, and Paste commands
■ Search for and replace text
You'll enter module-level code in QCARDS. If you have questions about any
words you are typing, use on-line help (position the cursor on the word
and press F1). On-line help includes complete descriptions and examples of
each QuickBASIC statement and function. QuickBASIC also gives information
on any variable, procedure, or symbolic constant at the cursor when you
press F1. When you finish, press ESC to close the Help window.
This chapter requires one to two hours to complete.
The Smart Editor
One thing that makes editing in QuickBASIC different from using an
ordinary word processor is its "smart editor." QuickBASIC recognizes
language keywords and warns you when they are being used incorrectly.
QuickBASIC also inserts certain types of text into the program for you.
For example, when you created the Alarm procedure in the last chapter,
QuickBASIC inserted the DEFINT A-Z and END SUB statements for you when you
entered the SUB Alarm statement.
Automatic Formatting
QuickBASIC's smart editor capitalizes keywords and places uniform spacing
between operators (such as plus and minus signs) and their operands (the
values they operate on). This makes your program easier to read. The
following steps illustrate this:
QCARDS Code Entry 3
1. Start QuickBASIC and open CHAPTER5.BAS (if it is not open).
2. Use PGDN and DOWN to move the cursor to the blank line beneath the
following comment (at about line 106). Check the line counter on the
reference bar to find the line.
' Open data file QCARDS.DAT for random access using file #1
3. Press ENTER to create a blank line, then type this statement exactly as
shown, including the initial "comment delimiter" (the apostrophe
preceding open):
'open "qcards.dat" for random as #1 len=len(card)
4. Press ENTER.
QuickBASIC reads the line as though it were just a comment so no
formatting is done.
5. Press UP to place the cursor at the comment delimiter.
6. Press DEL to delete the comment delimiter.
7. Press DOWN to move the cursor off the line.
QuickBASIC converts the keywords (OPEN, FOR, RANDOM, AS, and LEN) to
capital letters. Spaces are inserted on each side of the equal sign
(=).
Since it is easier to type in lowercase letters, lines of code are shown
in this tutorial with keywords in lowercase. When you type them and press
ENTER, QuickBASIC capitalizes the keywords for you. Words that aren't
keywords (such as symbolic constants, procedure names, and variable names)
appear in mixed case or all uppercase letters.
The BASIC language is not "case sensitive." It doesn't distinguish between
two versions of the same word by the case of the letters. For instance,
the keyword OPEN is the same to the BASIC language as open or OpEn. When
the smart editor capitalizes keywords, it is just for appearance. The
variable name Card represents the same memory location as CArd or CaRD.
The smart editor automatically maintains consistency in the capitalization
of specific words in a program listing. Conventions used in this manual
and QuickBASIC's handling of text you enter are summarized in the
following list:
Type of Word Appearance in QuickBASIC Action
Manual
──────────────────────────────────────────────────────────────────────────
BASIC keywords Lowercase Converts them to all uppercase
letters when you enter the line
Variable names and Mixed case Alters all instances of the name to
procedure names most recent capitalization
Symbolic constants Uppercase Changes all instances of the name to
most recent capitalization
──────────────────────────────────────────────────────────────────────────
The following steps illustrate the rules in the table above:
QCARDS Code Entry 4
1. Move the cursor to the line below the following comment (at about line
113):
' To count records in file, divide the length of the file by the
' length of a single record; use integer division () instead of
' normal division (/). Assign the resulting value to LastCard.
2. Press ENTER to make space, then type the following line exactly as
shown:
LastCard=LoF(1)Len(Card)
Note that the backslash (<|>) operator in BASIC performs integer
division, rather than normal division.
3. Press ENTER.
Keywords are capitalized and spaces are inserted. The previous
capitalization of card (in the OPEN statement) is updated to Card, to
conform to the way you just typed it. QuickBASIC assumes that the last
way you entered the word in the View window is the way you want it
everywhere. This is done to all occurrences of the word except those
within comments.
Syntax Checking
When you move the cursor off any code line you edit (either by pressing
ENTER or a DIRECTION key), QuickBASIC checks its syntax. If the line is
not valid BASIC code, QuickBASIC displays a dialog box describing the
error.
The following steps show how the smart editor checks your code for syntax
errors:
QCARDS Code Entry 5
1. Move the cursor to the line beneath the following comment block (about
line 130):
' Redefine the Index array to hold the records in the file plus
' 20 extra (the extra records allow the user to add cards).
' This array is dynamic - this means the number of elements
' in Index() varies depending on the size of the file.
' Also, Index() is a shared procedure, so it is available to
' all SUB and FUNCTION procedures in the program.
'
' Note that an error trap lets QCARDS terminate with an error
' message if the memory available is not sufficient. If no
' error is detected, the error trap is turned off following the
' REDIM statement.
2. Press ENTER, then type the following lines exactly as shown (including
errors):
on error goto MemoryErr
redim shared Index(1 to LastCard + 20) as PERSOR
on error goto
3. Press ENTER after the final line. QuickBASIC displays the following
error message (see Figure 6.1):
File Edit View Search Run Debug Calls Options Hel
┌────────────────────────────── CHAPTER5.BAS ─────────────────────────┤↑
│' Also, Index() is a shared procedure, so it is available to
│' all SUB and FUNCTION procedures in the program.
│
│ON ERROR GOTO MemoryErr
│REDIM SHARED Index(1 TO LastCard + 20) AS PERSOR
│ON ERROR GOTO ▓▓▓▓
│ ┌────────────────────────────────────────┐
│ │
│' Note that an err│ │or
│' message if the m│ Expected: 0 or label or line number │
│' error is detecte│ │ the
│' REDIM statement.├────────────────────────────────────────┤
│ │ < OK > < Help > │
│' Use the block IF└────────────────────────────────────────┘r
│' to load the records from the disk file QCARDS.DAT into the
│' array of records called Index() declared earlier. In the IF
│' part, you will check to see if there are actually records
│' in the file. If there are, LastCard will be greater than 0.
│←▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
├─────────────────────────────── Immediate ─────────────────────────────
│
│
<Shift+F1=Help> <F6=Window> <F2=Subs> <F5=Run> <F8=Step> CN 00126:
Figure 6.1 Error-Message Dialog Box
When you use ON ERROR GOTO to turn off an error trap (as is being done
here) QuickBASIC expects it to be followed by the number 0.
4. Press ESC to clear the dialog box.
QuickBASIC places the cursor at the place the error was detected.
5. Add a zero at the end of the line so it looks like this:
ON ERROR GOTO 0
Once you close an error-message dialog box, QuickBASIC doesn't check that
statement's syntax again until you actually change the line. If you don't
edit the line at all, QuickBASIC waits until you run the program before
reminding you that the error still exists.
Errors Detected When You Run Your Program
Some errors are not apparent until you actually try to run your code. For
example, in the REDIM statement you declared the Index() array as type
PERSOR. This was a misspelling of the name of the user-defined type,
PERSON, which you saw when you scrolled through the declarations and
definitions section of QCARDS in Chapter 5 "The QCARDS Program."
QuickBASIC did not detect this error on entry because it assumes that the
PERSOR type is declared somewhere, even though it has not yet encountered
the declaration.
The following step illustrates how these errors are detected:
► Press ALT+R, then press S to choose the Run menu's Start command to run
the lines entered so far.
QuickBASIC displays the error message Type not defined and highlights
the AS in the REDIM statement as shown in Figure 6.2.
File Edit View Search Run Debug Calls Options Help
┌────────────────────────────── CHAPTER5.BAS ─────────────────────────┤↑├──
│' Also, Index() is a shared procedure, so it is available to
│' all SUB and FUNCTION procedures in the program.
│
│ON ERROR GOTO MemoryErr
│REDIM SHARED Index(1 TO LastCard + 20) AS PERSOR
│ON ERROR GOTO 0
│
│' Note that an error trap ┌────────────────────────┐h an error
│' message if the memory av│ │. If no
│' error is detected, the e│ Type not defined │ollowing the
│' REDIM statement. │ │
│ ├────────────────────────┤
│ │ < OK > < Help > │
│' Use the block IF...THEN.└────────────────────────┘e whether
│' to load the records from the disk file QCARDS.DAT into the
│' array of records called Index() declared earlier. In the IF
│' part, you will check to see if there are actually records
│' in the file. If there are, LastCard will be greater than 0.
│←▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒→
├─────────────────────────────── Immediate ────────────────────────────────
│
│
<Shift+F1=Help> <F6=Window> <F2=Subs> <F5=Run> <F8=Step> CN 00124:040
Figure 6.2 Error Message
Help for Error Messages
Error-message dialog boxes contain a Help button you can choose to get
either a description of common causes for the error or the correct syntax
plus examples of usage.
1. Press F1 to get on-line help for this error message, then choose the
Help button in the dialog box.
The following dialog box appears (see Figure 6.3):
File Edit View Search Run Debug Calls Options Hel
┌────────────────────────────── CHAPTER5.BAS ─────────────────────────┤↑
│' Also, Index() is a shared procedure, so it is available to
│' all SUB and FUNCTION procedures in the program.
│
│ON ERROR GOTO MemoryErr
│REDIM SHARED Index(1 TO LastCard + 20) AS PERSOR
│ON ER┌────────────────────────────────────────────────────────────────┐
│ │ ┌────────────────────────────────────────────────────────────┐ │
│' Not│ │ No TYPE...END TYPE statement exists in this module for the │ │
│' mes│ │ user-defined type. │ │
│' err│ │ ■ Did you misspell the user-defined type name? │ │
│' RED│ │ ■ You can use the QuickBASIC Find command to locate all │ │
│ │ │ │ │
│ │ └────────────────────────────────────────────────────────────┘ │
│' Use├────────────────────────────────────────────────────────────────┤
│' to │ < OK > │
│' arr└────────────────────────────────────────────────────────────────┘
│' part, you will check to see if there are actually records
│' in the file. If there are, LastCard will be greater than 0.
│←▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
├─────────────────────────────── Immediate ─────────────────────────────
│
│
F1=Help Enter=Execute Esc=Cancel Tab=Next Field Arrow=Next Item
Figure 6.3 Help on Error Message
The new dialog box indicates that no TYPE...END TYPE statement was
found for PERSOR.
2. Press ESC as many times as necessary to clear the dialog boxes.
Overtyping the Error
Overtyping replaces the text at the cursor and moves the cursor right.
Correct the error by overtyping, as follows:
QCARDS Code Entry 6
1. Place the cursor on the second R in PERSOR.
2. Press INS to change from insert to overtype.
The INS key is a "toggle." It changes the shape of the cursor from the
default (a thin blinking line) to a blinking box. When the cursor is a
thin line, text you type is inserted at the cursor position. When the
cursor has the box shape, whatever you type "overtypes" (replaces) the
text at the current cursor position.
3. Overtype the second R in PERSOR with an N so the line looks like this:
REDIM SHARED Index(1 TO LastCard + 20) AS PERSON
4. Press INS to reset the toggle to its default (the thin line).
5. Type the following on the next blank line to call your Alarm procedure:
call Alarm
6. Press ALT+R, then press S to choose the Run menu's Start command to run
the lines.
QCARDS doesn't produce any visible output yet, but Alarm produces its
sound.
7. Press a key to return to the QuickBASIC environment.
Automatic Procedure Declarations
When QuickBASIC encounters a procedure invocation in a program, it creates
the DECLARE statement automatically. Then, it writes the declaration at
the first line of the file (when you save your program). The following
steps illustrate this:
QCARDS Code Entry 7
1. Press CTRL+HOME to move the cursor to the beginning of the program.
2. Press ALT+F, then press A to choose the File menu's Save As command.
The Save As dialog box appears.
3. Type chapter6 in the text box, then press ENTER to save the program as
CHAPTER6.BAS. QuickBASIC inserts the declaration on the first line of
the program, as follows :
DECLARE SUB Alarm()
This is a good point to take a break. In the next section you'll move the
declaration just created and change some of the existing QCARDS code.
Working with Selected Text Blocks
"Selecting" is the way you highlight a block of text to work with. To
select a text block directly, place the cursor at the beginning of a
block, then hold down the SHIFT key while pressing the appropriate
DIRECTION key.
Try the following to select a block of text:
QCARDS Code Entry 8
1. Start QuickBASIC (if you exited when you took a break) and open
CHAPTER6.BAS.
2. Press CTRL+HOME to make sure the cursor is at the program's first line.
The line should be DECLARE SUB Alarm().
3. Press SHIFT+DOWN to select this line.
The only way you can remove the highlight from selected text and return it
to its unselected state is by pressing one of the DIRECTION keys ( UP,
DOWN, LEFT, RIGHT), or by pressing F6 to move to a different window.
──────────────────────────────────────────────────────────────────────────
WARNING
Be cautious with selected text! If you type any character (even the
SPACEBAR) while a line of text is selected, whatever you type replaces
all selected text in the active window. The text that was selected is
then permanently lost.
──────────────────────────────────────────────────────────────────────────
Cutting or Copying Selected Text
The Edit menu has commands that let you move a block of selected text to
and from a "Clipboard" (a dedicated space in memory). The Cut and Copy
commands put selected text on the Clipboard. The Paste command copies
whatever text is on the Clipboard to the current cursor position. If a
line (or more) of text is selected in the active window when you choose
the Paste command, the text on the Clipboard replaces the selected text.
When a menu command is available, it is marked with a high-intensity
letter. For example, if you open the Edit menu now, the Cut and Copy
commands are available because there is text selected in the active
window. However, the Paste command is not available unless you have
already placed text on the Clipboard. The following steps use the Cut
command to transfer the text from its current position to the Clipboard:
QCARDS Code Entry 9
1. Select the line DECLARE SUB Alarm if it isn't already selected.
2. Press ALT+E to open the Edit menu if it is not already open.
3. Press T to choose the Cut command.
The selected text is transferred to the Clipboard. You can only copy one
block at a time to the Clipboard because each new block (regardless of its
size) replaces everything that preceded it on the Clipboard.
──────────────────────────────────────────────────────────────────────────
IMPORTANT
The shortcut-key combination for Cut is SHIFT+DEL. If you just press DEL
while text is selected, it is deleted, but not to the Clipboard. You
cannot recover text deleted with DEL.
──────────────────────────────────────────────────────────────────────────
The Copy command is similar to Cut, but it puts a duplicate of the
selected text on the Clipboard and leaves the selected block as is.
──────────────────────────────────────────────────────────────────────────
NOTE
Copy leaves the original text block selected, so you have to press a
DIRECTION key before typing anything or the block will be replaced by
what you type.
──────────────────────────────────────────────────────────────────────────
Pasting a Text Block
Any text you put on the Clipboard remains there until you either put
something else on the Clipboard or until you exit from QuickBASIC. Follow
these steps to move to the procedure-declarations section of QCARDS and
paste in the declaration for Alarm:
QCARDS Code Entry 10
1. Press ALT+S, then press F to choose the Search menu's Find command.
The Find dialog box appears (see Figure 6.4).
┌─────────────────────────Find────────────────────────────────┐
│ ┌─────────────────────────────────────────────┐ │
│ Find What: │ │ │
│ └─────────────────────────────────────────────┘ │
│ │
│ ┌────────Search─────────────┐ │
│ [ ] Match Upper/Lowercase │( ) 1. Active Window │ │
│ [ ] Whole Word │(∙) 2. Current Module │ │
│ │( ) 3. All Modules │ │
│ └───────────────────────────┘ │
│ │
├─────────────────────────────────────────────────────────────┤
│ < OK > < Cancel > < Help > │
└─────────────────────────────────────────────────────────────┘
Figure 6.4 Find Dialog Box
2. Type the following line in the text box:
This space reserved
3. Press ENTER to start the search.
4. Press HOME to place the cursor in column 1.
5. Press SHIFT+END to select the whole line.
6. Press ALT+E, then press P to choose the Edit menu's Paste command.
The Paste command is active because there is text on the Clipboard. The
text from the Clipboard replaces the selected text.
7. Save the program as CHAPTER6.BAS.
Manipulating Selected Text
You can manipulate selected text in other ways. For instance, you can
indent selected text as a block rather than one line at a time. The
following steps illustrate this:
QCARDS Code Entry 11
1. Press ALT+S, then press F to choose the Search menu's Find command.
Type the following line in the text box, exactly as shown:
' Define temporary
There may be text selected in the text box when the dialog box opens.
If so, whatever you type replaces the selected text automatically. You
can remove the selection from the text by pressing a DIRECTION key if
you want to just change the text in the box rather than completely
replacing it.
2. Press ENTER. The cursor should move to the following line:
' Define temporary Index() array to illustrate QCARDS screen
3. Press SHIFT+DOWN twice so both the following lines are selected:
' Define temporary Index() array to illustrate QCARDS screen
REDIM SHARED Index(1) AS PERSON
4. Press TAB while this text block is selected. The whole block moves
right by one tab stop.
5. Press SHIFT+TAB to move the block left by one indentation level.
6. Press DEL to delete the entire block permanently.
7. Save the program as usual as CHAPTER6.BAS.
Note that the text you just deleted was not placed on the Clipboard. This
is because you deleted it with DEL rather than SHIFT+DEL (the shortcut key
for the Cut command). The temporary Index() array definition is no longer
needed because you defined it (with a REDIM statement) in the first part
of this chapter.
Searching and Replacing Text
────────────────────────────────────────────────────────────────────────────
IMPORTANT
The remaining sections of this chapter provide practice using QuickBASIC's
search and replace feature. The code you enter in the optional code-entry
sections below is not necessary to make QCARDS run. You may want to read
the rest of the chapter before deciding whether to try the optional
code-entry sequences. If you make a mistake entering any of the optional
sequences, the final program won't run properly. If you choose to do any
of the optional code-entry sequences, you must do all three of them.
────────────────────────────────────────────────────────────────────────────
In this section, you'll define the symbolic constant DISKFILE$ to
represent "QCARDS.DAT" the name of the disk file that contains QCARDS'
data. Then you'll use the Search menu's Change command to replace all
instances of the text string "QCARDS.DAT" with the symbolic constant. Once
you define the constant DISKFILE$, you can just change the definition of
DISKFILE$ if you want to load a different data file in QCARDS (or create a
new data file).
Defining the Symbolic Constant
The first thing to do is define the constant. There is already an
appropriate place to do this in the declarations and definitions section.
Do the following to find the place and then add the constant:
Optional QCARDS Code Entry 1
1. Save CHAPTER6.BAS as OPTIONAL.BAS.
This way, if you do everything right you can start the next chapter by
loading OPTIONAL.BAS, then saving it as CHAPTER7.BAS. If you make an
error in one of the optional sections and find you can't correct it,
you can start with CHAPTER6.BAS in the next chapter.
2. Press CTRL+HOME to move to the beginning of QCARDS.
3. Press ALT+S, then press F to choose the Search menu's Find command.
Finally, type the following in the text box:
TMPFILE
4. Press ENTER to place the cursor at the definition of TMPFILE. It looks
like this:
CONST TMPFILE$ = "$$$87y$.$5$" ' Unlikely file name
5. Press DOWN to remove selection from TMPFILE.
6. Press HOME to place the cursor in the leftmost column, then type the
following line, exactly as shown, but don't press ENTER:
const DISKFILE$ = "QCARDS.DAT"
7. Press SHIFT+LEFT until the string "QCARDS.DAT" is completely selected.
Be sure both quotation marks are included in the selection.
It's important to make sure the quotation marks are selected because you
want to replace "QCARDS.DAT" with DISKFILE$.
Replacing Multiple Occurrences of Text
Using the Change command is much like the Find command, except that
QuickBASIC lets you substitute specified text when matching text is found
before it searches for the next match. Next you will change "QCARDS.DAT"
to DISKFILE$ everywhere except in the definition you wrote in the last
section. The Search menu's Change command lets you automate the process.
Optional QCARDS Code Entry 2
1. Press ALT+S, then press C to choose the Search menu's Change command.
The Change dialog box's Change command appears (see Figure 6.5):
Text you want to This text will replace the
│change goes here. │text you want to change.
┌─────────────┼─────────────────────┼───────────────────────────┐
│ ┌┼─────────────────────┼────────────────────────┐ │
│ Find What: │"QCARDS.DAT" │ │ │
│ └──────────────────────┼────────────────────────┘ │
│ ┌──────────────────────┼────────────────────────┐ │
│ Change To: │DISKFILE$ │ │
│ └───────────────────────────────────────────────┘ │
│ │
│ │
│ [ ] Match Upper/Lowercase │
│ [ ] Whole Word │
│ │
├───────────────────────────────────────────────────────────────┤
│ < Find and Verify > < Change All > <Cancel > < Help > │
└───────────────────────────────────────────────────────────────┘
Figure 6.5 Change Dialog Box
Because "QCARDS.DAT" is selected in the View window, the Find What text
box has"QCARDS.DAT"in it.
2. Press TAB to move the cursor to the Change To text box.
This is where you enter the text you want to substitute for the search
text.
3. Type DISKFILE$ in this text box.
4. Press ENTER to choose the Find and Verify command button (the default).
──────────────────────────────────────────────────────────────────────────
WARNING
The second command button, Change All, makes all the changes without
showing you the occurrences or waiting for confirmation. This option is
risky unless you are sure you want to change all the occurrences. Even
then, you may inadvertently change words that contain the search text in
a way you didn't anticipate. If you have any doubts, use the default
option Find and Verify. The Cancel button or ESC aborts the search and
replace operation entirely.
──────────────────────────────────────────────────────────────────────────
The Find and Verify command button highlights each occurrence of the
search text, then displays the Change, Skip, Cancel dialog box (see Figure
6.6). In the next section you'll use it to make selective replacements.
It contains buttons you can choose when you decide whether to replace the
current occurrence:
┌───────────────────────────Change──────────────────────────────┐
│ │
├───────────────────────────────────────────────────────────────┤
│ < Change > < Skip > < Cancel > < Help > │
└───────────────────────────────────────────────────────────────┘
Figure 6.6 Change, Skip, Cancel Dialog Box
The Change, Skip, Cancel dialog box should still be on your screen.
Replace occurrences of "QCARDS.DAT" with DISKFILE$ as follows:
Optional QCARDS Code Entry 3
1. Press C to change the first occurrence. It is in the OPEN statement you
entered earlier in this chapter.
QuickBASIC moves to the next match. It is in a comment line in the
CleanUp procedure (check the View window's title bar).
2. Press C to make the change.
QuickBASIC moves to the next match. It is also in CleanUp in the line
KILL "QCARDS.DAT"
3. Press C to make the change.
QuickBASIC moves to the next match. It is also in CleanUp in the line
NAME TMPFILE AS "QCARDS.DAT"
4. Press C to make the change.
QuickBASIC moves to the next match. It is in a different procedure,
InitIndex, in a comment line.
5. Press C to make the change.
The final match is at CONST DISKFILE$ = "QCARDS.DAT" where you started.
You don't want to change this one because this definition is the reason
you just made all the other changes.
6. Press S to choose the Skip command button.
When all occurrences have either been changed or skipped, QuickBASIC
displays a dialog box containing ChangeComplete.
7. Press ESC to close the dialog box.
Checking Your Work
Whenever you make a series of changes throughout a program, you should
check your work by running the program. If you've made a mistake during
editing, you can use QuickBASIC's error messages to help you track down
mistakes. Finish this session with the following procedure:
1. Press ALT+R, then press S to choose the Run menu's Start command to run
the lines.
If you get an error message, try to track down the error and fix it
before you end the session. Go back over each of the optional QCARDS
code-entry sections and compare your work with them.
2. Press a key to return to the QuickBASIC environment.
3. Save the program. If you renamed it OPTIONAL.BAS, you can just start
with that file in the next chapter and rename it CHAPTER7.BAS.
The constant DISKFILE$ now represents QCARDS.DAT in the program. Later you
may want to modify the program to allow the user to load different files
while the program is running. If you do, you can't represent the the file
with the constant DISKFILE$, because the point of a constant is that it
cannot be changed when the program is running. You would have to remove
the CONST part of the definition and just make DISKFILE$ an ordinary
string variable.
For More Information
For more information on the topics covered in this chapter, see the
following:
Chapter Topic
──────────────────────────────────────────────────────────────────────────
Chapter 12, "Using the Complete information on QuickBASIC's editing
Editor," and Chapter features, including the commands found on Full
13, "The Edit Menu" Menus and editing shortcut-key combinations
Chapter 2, "SUB and Defining and using procedures and placement of
FUNCTION Procedures," automatically generated procedure declarations.
in Programming in BASIC
Chapter 4, "String Using strings as symbolic constants
Processing," in
Programming in Basic
Chapter 6, "Error and Using the ON ERROR statement
Event Trapping," in
Programming in BASIC
──────────────────────────────────────────────────────────────────────────
────────────────────────────────────────────────────────────────────────────
Chapter 7 Programming with On-Line Help
You've seen Microsoft QuickBASIC's on-line help features in previous
chapters. In this chapter you'll use on-line help to guide you in writing
some code for the QCARDS program. You will
■ Use alternative methods to get on-line help for QuickBASIC keywords
■ Access information about on-line program symbols through help
■ Use hyperlinks to get additional information within the Help window
This chapter takes about one hour to complete.
Using On-Line Help to Construct Statements
In this section you'll use the Help menu's Index command to find out how
to use statements. Do this first:
QCARDS Code Entry 12
1. Start QuickBASIC if it is not running and open CHAPTER6.BAS (or
OPTIONAL.BAS, whichever is appropriate).
2. Save the program immediately as CHAPTER7.BAS.
On-Line Help for Keywords
If you know the statement you want to use, you can find it quickly by
choosing the Index command from the Help menu. You can get information on
the first code block you'll enter in this chapter (the IF...THEN...ELSE
statement) by doing the following steps:
1. Choose the Help menu's Index command (press ALT+H, then press I).
Index lists all the QuickBASIC keywords. Scroll down through the list
to see what it contains (use DIRECTION keys), or press the initial
letter of the keyword you want more information on.
2. Select IF... THEN (press I).
QuickBASIC places the cursor in the IF...THEN statement
3. Get help on IF..THEN (press F1).
A QuickSCREEN appears (see Figure 7.1). It includes a brief
description of the statement, the syntax for the block form of
IF...THEN...ELSE, and a description of the terms used in the block.
Syntax block
│
│ File Edit View Search Run Debug Calls Options Hel
┌┼────────────── HELP: IF...THEN...ELSE Statement QuickSCREEN ────────┤↑
││ ◄QuickSCREEN► ◄Details► ◄Example► ◄Contents► ◄Index►
│├──────────────────────────────────────────────────────────────────────
│IF...THEN...ELSE - a control flow statement that allows conditional
││ execution or branching, based on the evaluation of
││ an expression that must be either true or false
││
│Block IF...THEN...ELSE Syntax
││┌IF booleanexpression1 THEN
│││ [statementblock-1]
│││[ELSEIF booleanexpression2 THEN
│└┤ [statementblock-2]
│ │. . .
│ │[ELSE
│ │ [statementblock-n]]
│ └END IF
│
│ ■ booleanexpression is an expression that must return non-zero (true)
│ or zero (false)
│ ■ statementblock consists of any number of statements on one or more
│ lines.
│
│←▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
<Shift+F1=Help> <F6=Window> <Esc=Cancel> <Ctrl+F1=Next> <Alt+F1=Back>
Figure 7.1 QuickSCREEN for IF...THEN...ELSE Statement
4. Make the Help window fill the whole screen (press CTRL+F10).
5. Move down to the syntax for the single-line form of IF...THEN...ELSE
(press PGDN).
6. Move the cursor back to the top of the QuickSCREEN (press CTRL+HOME).
7. Restore the View and Immediate windows (press CTRL+F10).
If you've used the statement before, the QuickSCREEN help information is
usually sufficient to help you write your code.
Hyperlinks in On-Line Help
The QuickSCREEN includes four hyperlinks across the top. You can move the
cursor to any one by pressing the TAB key or the initial letter of the
word in the hyperlink. The following list describes what is displayed by
each of the hyperlinks:
Hyperlink Information Displayed by Help
──────────────────────────────────────────────────────────────────────────
Details Gives full explanation of each syntax element and
describes all ways of using the statement
Example Shows code examples that illustrate syntax use
Contents Shows all possible categories of on-line help
available in QuickBASIC
Index Lists QuickBASIC keywords alphabetically
──────────────────────────────────────────────────────────────────────────
Try each of the available hyperlinks in turn, pressing ALT+F1 each time to
return to the original syntax screen.
If you keep choosing several hyperlinks without returning to the previous
screen, you can work your way backwards through the hyperlink sequence by
pressing ALT+F1 repeatedly (up to a limit of 20 links).
Although you can't type in the Help window, you can size it with ALT+PLUS
and ALT+MINUS so that the information you need is displayed while you
enter text in the View window. When you understand the block
IF...THEN...ELSE statement, implement the programming described in the
comment block as follows:
QCARDS Code Entry 13
1. Place the cursor in the View window (press F6).
2. Scroll down to the line beneath the following comment block (about line
145) and create a line of space (press ENTER):
' Use the block IF...THEN...ELSE statement to decide whether
' to load the records from the disk file QCARDS.DAT into the
' array of records called Index() declared earlier. In the IF
' part, you will check to see if there are actually records
' in the file. If there are, LastCard will be greater than 0
' and you can call the InitIndex procedure to load the records
' into Index(). LastCard is 0 if there are no records in the
' file yet. If there are no records in the file, the ELSE
' clause is executed. The code between ELSE and END IF starts
' the Index() array at card 1.
3. Type the following code, exactly as shown:
if LastCard <> 0 then
call InitIndex(LastCard)
else
Card.CardNum = 1
Index(1) = Card
put #1, 1, Card
end if
4. Save the program as CHAPTER7.BAS. Then place the cursor back on the
ELSE keyword.
5. Run your program up to the line on which the cursor rests (press F7).
The line at the cursor appears in high-intensity video with the colors
you chose for the Current Statement option in the Options menu's
Display dialog box. This means that the program is still running, but
execution is temporarily suspended.
On-Line Help for Program Symbols
QuickBASIC provides help for all "symbols" in your program. A symbol is
anything that is defined, either explicitly or implicitly. For example,
QuickBASIC keywords are symbols defined by the language. To get help for
the symbols you define in your programs, place the cursor anywhere in the
symbol, then press F1. QuickBASIC displays all the information it has
about the symbol and where it is used in the program. Try this to find out
about Card.CardNum.
1. Place the cursor in the word CardNum in Card.CardNum and press F1.
The Help window shown in Figure 7.2 appears.
File Edit View Search Run Debug Calls Options Hel
┌───────────────────────────── HELP: CardNum ─────────────────────────┤↑
│CardNum is a symbol that is used in your program as follows:
│
│┌ C:\QB4.5\DEMO\DIR1\CHAPTER7.BAS ────
││ An element of a user defined TYPE:
││ TYPE PERSON
││ CardNum AS INTEGER
││ Names AS STRING * 37
││ Note AS STRING * 31
││ Month AS INTEGER
││ Day AS INTEGER
││ Year AS INTEGER
││ Phone AS STRING * 12
││ Street AS STRING * 29
││ City AS STRING * 13
││ State AS STRING * 2
││ Zip AS STRING * 5
││ END TYPE
││
│
├────────────────────────────── CHAPTER7.BAS ─────────────────────────┤↑
│ Card.CardNum = 1
├─────────────────────────────── Immediate ─────────────────────────────
<Shift+F1=Help> <F5=Continue> <F9=Toggle Bkpt> <F8=Step> 00144:
Figure 7.2 Symbol Help for CardNum
On-line help describes CardNum as an element of the PERSON user-defined
type. The help displays the actual TYPE...END TYPE statement. CardNum
is the first element.
2. Move the cursor to the left until it is in the word Card on the left
side of the period, then press F1. On-line help shows that the name
Card is used many places in QCARDS. The specific instance at the cursor
when you pressed F1 is described first; it is described as a variable
of type PERSON.
Note that in several procedures, Card is also used as a variable name,
but is a variable of type INTEGER. Also, Card is sometimes described as
a parameter of type PERSON.
On-line help makes it easy to track the use of variable names throughout
your programs. Although on-line help doesn't include the current value of
a variable, QuickBASIC makes it easy to determine the current value of a
variable in a suspended program. Here's how:
1. Close the Help window (press ESC).
2. Place the cursor anywhere in the word LastCard (about line 150).
3. Choose the Debug menu's Instant Watch command.
QuickBASIC displays the Instant Watch dialog box (see Figure 7.3). It
contains the name of the variable LastCard and its current value. (The
actual value reflects the number of records in the QCARDS.DAT data
file.)
File Edit View Search Run Debug Calls Options Hel
┌────────────────────────────── CHAPTER7.BAS ─────────────────────────┤↑
│ CALL InitIndex(LastCard)
│ELSE
│ Card.CardNum = 1
│ Index(1) = Card
│ PUT #1, 1.┌─────────────────────────────────────────────┐
│ENDIF │ │
│ │ ┌───────────── Expression ──────────────┐ │
│ │ │LastCard │ │
│' Use the Draw│ └───────────────────────────────────────┘ │
│' and draw the│ │
│' card. Finall│ ┌──────────────── Value ────────────────┐ │
│' as arguments│ │ 16 │ │
│' ShowCards pl│ └───────────────────────────────────────┘ │
│' card on the ├─────────────────────────────────────────────┤
│' information │ < Add Watch > < Cancel > < Help > │
│ └─────────────────────────────────────────────┘
│
│
│←▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
├─────────────────────────────── Immediate ─────────────────────────────
│
│
F1=Help Enter=Execute Esc=Cancel Tab=Next Field Arrow=Next Item
Figure 7.3 Instant Watch Dialog Box
4. Clear the Instant Watch dialog box (press ESC).
Perform the following steps to place the QCARDS cards on the screen and
the data from QCARDS.DAT on the cards:
QCARDS Code Entry 14
1. Place the cursor on the line beneath the following comment (about line
163):
' Use the DrawCards procedure to initialize the screen
' and draw the cards. Then, set the first card as the top
' card. Finally, pass the variables TopCard and LastCard
' as arguments to the ShowCards procedure. The call to
' ShowCards places all the data for TopCard on the front
' card on the screen, then it places the top-line
' information (the person's name) on the remaining cards.
2. Create a line of space (press ENTER), then type the following code
lines exactly as shown:
call DrawCards
TopCard = 1
call ShowCards(TopCard, LastCard)
3. Place the cursor back on the last line you entered (the one beginning
withCALL ShowCards).
4. Execute the program to the line at the cursor (press F7).
5. Choose the View menu's Output Screen command to toggle back and forth
between the QuickBASIC environment and the QCARDS output screen (press
F4).
You can use the same techniques as before to get help for the CALL keyword
that transfers control to a BASIC SUB procedure. You can also get help for
the DrawCards and ShowCards procedures and for the variable named TopCard.
Since the program is still running (though suspended) you can also check
the values of its variables using the Debug menu's Instant Watch command.
Printing Screens from On-Line Help
The Print command on the File menu can make hard copies of text from
on-line help. If you have a printer connected to the parallel port, you
can print hard copy of any of the help screens as follows:
1. Choose the Help menu's Index command and move the cursor to the
DO...LOOP statement entry. Then move that statement's on-line help into
the Help window (press F1).
2. Choose the File menu's Print command (press ALT+F, then press P).
When the Help window is the active window, you can choose the option to
print either specifically selected text or the whole current help
screen (see Figure 7.4).
File Edit View Search Run Debug Calls Options Hel
┌────────────────── HELP: DO...LOOP Statement QuickSCREEN ────────────┤↑
│ ◄QuickSCREEN► ◄Details► ◄Example► ◄Contents► ◄Index►
│───────────────────────────────────────────────────────────────────────
│DO...LOOP - a control flow statement that repeats a block of statements
│while a condition is true or until a condition becomes true
│
│Syntax 1 ┌────────── Print ───────────┐
│ DO [{WHILE | UNTIL} b│ │
│ [statementblock] │ ( ) Selected Text │
│ LOOP │ (∙) Active Window │
│ │ │
│Syntax 2 │ │
│ DO │ │
│ [statementblock] ├────────────────────────────┤
│ LOOP [{WHILE | UNTIL}│ < OK > < Cancel > < Help > │
│ └────────────────────────────┘
│ ■ booleanexpression is an expression that will return non-zero (true)
│ or zero (false).
│ ■ statementblock is any number of statements on one or more lines whi
│ are to be executed as long as booleanexpression is true.
│←▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
├───────────────────────────── CHAPTER7.BAS ──────────────────────────┤↑
├─────────────────────────────── Immediate ─────────────────────────────
F1=Help Enter=Execute Esc=Cancel Tab=Next Field Arrow=Next Item
Figure 7.4 Print Dialog Box (Help)
3. Print this help screen if you have a printer (press ENTER), otherwise
clear the dialog box (press ESC). (If you try to print when you don't
have a printer, a Device unavailable dialog box may be displayed.)
4. Choose any hyperlinks you'd like to see, then print them out.
5. Close the Help window (press ESC).
Use the hard copy of the help text (or on-line help) to understand the
programming. In the next steps, you'll insert the unconditional loop.
QCARDS Code Entry 15
1. Move the cursor to the line below this comment block (about line 178):
' Keep the picture on the screen forever with an unconditional
' DO...LOOP statement. The DO part of the statement goes on
' the next code line. The LOOP part goes just before the END
' statement. This loop encloses the central logic that lets
' a user interact with QCARDS.
2. Create a blank line (press ENTER).
3. Type the word do then press ENTER.
4. Move the cursor down to the line beneath this comment (at about line
226):
' This is the bottom of the unconditional DO loop.
5. Create a blank line (press ENTER), then type the word loop
6. Choose Run menu's Start command.
You will need to break out of this unconditional DO loop.
7. Press CTRL+BREAK when you want to suspend execution of the
unconditional DO loop.
While execution is suspended, you can use commands like Instant Watch
to examine the variables. Afterwards, you can continue program
execution by choosing the Continue command from the Run menu (press
ALT+R, then press N).
8. Save the program as CHAPTER7.BAS.
For More Information
For more information on on-line help, see the following:
Chapter Topic
──────────────────────────────────────────────────────────────────────────
Section 10.8, "Using Information on QuickBASIC's Help menu commands
On-Line Help" and and complete descriptions of all the Help
Chapter 21, "The Help features
Menu"
──────────────────────────────────────────────────────────────────────────
────────────────────────────────────────────────────────────────────────────
Chapter 8 Using Example Code from On-Line Help
You've seen many facets of Microsoft QuickBASIC's on-line help in previous
chapters. Each QuickSCREEN and Details screen for each statement and
function contains a hyperlink to one or more code examples. In this
chapter you will copy example code from on-line help to use in QCARDS.
You'll use some of these examples as you
■ Copy example code from on-line help and paste it into the View window
■ Edit text copied from on-line help to work in a specific program
This chapter takes about one to one and one-half hours to complete.
Copying Example Code from On-Line Help
When you use on-line help for keywords, the QuickSCREEN describes the
action and syntax of the keyword. If you have used the statement before,
the syntax block may give all the information you need to write your code.
However, if the statement is new to you, the Details and Example screens
clarify how to use the syntax. In the next several code-entry sequences,
you'll find an example in on-line help that you can copy and use in
QCARDS. Example code from on-line help may not be a perfect match for
QCARDS. Some code that you copy conflicts with code in the program. Don't
worry──you'll fix it later in the tutorial.
QCARDS Code Entry 16
1. Place the cursor on the line following this comment block (about line
192):
' Get user keystroke with a conditional DO...LOOP statement.
' Within the loop, use the INKEY$ function to capture a user
' keystroke, which is then assigned to a string variable. The
' WHILE part of the LOOP line keeps testing the string
' variable. Until a key is pressed, INKEY$ keeps returning a
' null (that is a zero-length) string, represented by "".
' When a key is pressed, INKEY$ returns a string with a
' length greater than zero, and the loop terminates.
2. Create a blank line (press ENTER). Then, type do
3. Display the QuickSCREEN for the DO keyword (press F1).
When you press F1 when the cursor is on a blank space, QuickBASIC
displays context-sensitive help on the symbol at the left of the
cursor. Note that the cursor remains in the View window.
4. Move the cursor into the Help window (press F6 twice).
5. Choose the Example hyperlink (press E, then press F1).
The example screen appears in the Help window (see Figure 8.1):
File Edit View Search Run Debug Calls Options Help
┌───────────── HELP: DO...LOOP Statement Programming Examples ────────┤↑├──
│ ◄QuickSCREEN► ◄Details► ◄Example► ◄Contents► ◄Index►
│─────────────────────────────────────────────────────────────────────────
│DO...LOOP Statement Programming Examples
│
│Following are four examples. The first two examples show you how
│placement of the condition affects the number of times the block
│of statements is executed. The third example shows how a loop
│can be used to pause a program until the user presses a key. The
│fourth example illustrates testing at the end of a loop and presents
│a sort subprogram where an ending test is appropriate.
│
│DO...LOOP Programming Example 1
│
│In the following example, the test is done at the beginning of the
│loop. Because I is not less than 10, the body of the loop (the
│statement block) is never executed.
│
│' DO...LOOP with test at the top of the loop.
│' Output shows that loop was not executed.
│←▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒→
├───────────────────────────── CHAPTER7.BAS ──────────────────────────┤↑├──
├─────────────────────────────── Immediate ────────────────────────────────
<Shift+F1=Help> <F6=Window> <Esc=Cancel> <Ctrl+F1=Next> <Alt+F1=Back>
Figure 8.1 Example Screen for DO...LOOP Statement
The first paragraph of the screen describes the examples below. The
description of the third example corresponds closely to the task you want
to code into QCARDS at this point. Follow these steps to place the example
code on the Clipboard:
QCARDS Code Entry 17
1. Scroll down to Example 3. It looks like this:
' DO...LOOP with test at the bottom of the loop.
DO
Choice$ = INKEY$
LOOP WHILE Choice$ = ""
2. Select all four of the above lines.
3. Choose the Copy command from the Edit menu to place the lines on the
Clipboard (press ALT+E, then press C).
4. Close the Help window (press ESC).
5. Select the DO you typed into the View window just before moving to the
Help window (press SHIFT+HOME).
6. Choose the Paste command from the Edit menu (press ALT+E, then press
P).
The text from the Clipboard replaces the text that was selected.
7. Choose the Run menu's Start command to check for errors (press ALT+R,
then press S), then return to QuickBASIC (press CTRL+BREAK).
You can use on-line help to check for potential conflicts between the code
you just copied and QCARDS, as follows:
1. Place the cursor on Choice$ and press F1.
2. On-line help shows you that variables named Choice$ now occur twice in
QCARDS, once in the module-level code and once in the EditString
procedure. These don't conflict because variables local to a procedure
are not known at the module level and vice versa.
Indenting a Block of Code
The loop you just entered is "nested" within the unconditional loop you
entered earlier (in "QCARDS Code Entry 15," in Chapter 7, "Programming
with On-Line Help"). This means that it is executed once each time the
outer loop is executed. Nested code is usually indented one tab stop to
the right of the code encompassing it to show visually the levels of
nesting within your program. Here's a reminder of how to indent multiple
text lines as a block:
1. Select the three code lines you just entered. They look like this:
DO
Choice$ = INKEY$
LOOP WHILE Choice$ = ""
2. Move the whole block right one tab stop (press TAB).
3. Remove the selection from the block (press any DIRECTION key).
The rest of the code you enter in QCARDS is nested within the
unconditional DO loop so each block should be similarly indented.
Copying Large Code Blocks from On-Line Help
The code you copied in the preceding section was short and simple. It
contained only one variable name, so the likelihood of a conflict with an
existing symbol in QCARDS was small.
You can copy larger blocks of example code from on-line help and paste
them into programs you write. However, the code you copy may conflict with
code you've already written into your program. In this section you'll copy
more example code into QCARDS, then customize it significantly. Some of it
will conflict, but you'll fix it later.
QCARDS Code Entry 18
1. Move the cursor to the line beneath the following comment block (about
line 222):
' The ELSE clause is only executed if Choice$ is longer than a
' single character (and therefore not a command-line key).
' If Choice$ is not an ASCII key, it represents an "extended"
' key. (The extended keys include the DIRECTION keys on the
' numeric keypad, which is why QCARDS looks for them.) The
' RIGHT$ function is then used to trim away the extra byte,
' leaving a value that may correspond to one of the DIRECTION
' keys. Use a SELECT CASE construction to respond to those key-
' presses that represent numeric-keypad DIRECTION keys.
2. Create a blank line (press ENTER), then type
select case Choice$
3. Press HOME, then display help for the SELECT CASE statement (press F1).
4. The help screen shown in Figure 8.2 appears.
File Edit View Search Run Debug Calls Options Help
┌─────────────────── HELP: SELECT Statement QuickSCREEN ──────────────┤↑├──
│ ◄QuickSCREEN► ◄Details► ◄Example► ◄Contents► ◄Index►
│─────────────────────────────────────────────────────────────────────────
│SELECT CASE - a control flow statement that executes one of several
│ statement blocks depending on the value of an expression
│
│Syntax
│ SELECT CASE textexpression
│ [CASE expressionlist1]
│ [statementblock-1]
│ [CASE expressionlist2
│ [statementblock-2] ...
│
│ [CASE ELSE
│ [statementblock-n]]
│ END SELECT
│
│ ■ testexpression is any numeric or string expression.
│ ■ expressionlist contains one or more expressions of the same type as
│ testexpression
├───────────────────────────── CHAPTER7.BAS ──────────────────────────┤↑├──
│ SELECT CASE Choice$
├─────────────────────────────── Immediate ────────────────────────────────
<Shift+F1=Help> <F6=Window> <F2=Subs> <F5=Run> <F8=Step> 00214:013
Figure 8.2 QuickSCREEN for SELECT CASE Statement
The SELECT CASE statement is commonly used like a switchboard in
situations where there are numerous possible inputs, and many of them must
be handled in unique ways. You don't want to take a unique action for each
key a user might press, but with this kind of structure you can add CASE
clauses for each key you want to handle. Then you can treat the rest of
the possible keys as "none of the above" with CASE ELSE.
In the following steps you'll copy a large piece of code from on-line
help:
QCARDS Code Entry 19
1. Move the cursor into the help window (press SHIFT+F6 twice).
2. Choose the Example hyperlink at the top of the screen to move the
examples into the Help window (press E, then press F1).
3. Choose the Search menu's Find command (press ALT+S, then press F), type
Example 2 in the text box, then press ENTER.
4. Scroll down (about 15 lines) to the line: IF LEN(Choice$) = 1 THEN
5. Select this line, and the next 43 lines, all the way down to END IF.
(Be careful not to include the final LOOP statement in the selected
text.)
6. Choose the Copy command from the Edit menu (press ALT+E, then press C).
7. Close the Help window (press ESC). This puts the cursor back on SELECT
CASE in the View window.
8. Select the line SELECT CASE Choice$ (press SHIFT+END).
9. Choose the Paste command from the Edit menu (press ALT+E, then press
P).
The code pasted after the comment block should appear as follows:
IF LEN(Choice$) = 1 THEN
' Handle ASCII keys
SELECT CASE ASC(Choice$)
CASE ESC
PRINT "Escape key"
END
CASE IS 32, 127
PRINT "Control code"
CASE 30 TO 29
PRINT "Digit: "; Choice$
CASE 65 TO 90
PRINT "Uppercase letter: "; Choice$
CASE 97 TO 122
PRINT "Lowercase letter: "; Choice$
CASE ELSE
PRINT "Punctuation: "; Choice$
END SELECT
ELSE
' Convert 2-byte extended code to 1-byte ASCII code and
' handle
Choice$ = RIGHT$(Choice$, 1)
SELECT CASE Choice$
CASE CHR$(DOWN)
PRINT "DOWN arrow key"
CASE CHR$(UP)
PRINT "UP arrow key"
CASE CHR$(PGDN)
PRINT "PGDN key"
CASE CHR$(PGUP)
PRINT "PGUP key"
CASE CHR$(HOME)
PRINT "HOME key"
CASE CHR$(ENDKEY)
PRINT "END key"
CASE CHR$(RIGHT)
PRINT "RIGHT arrow key"
CASE CHR$(LEFT)
PRINT "LEFT arrow key"
CASE ELSE
BEEP
END SELECT
END IF
Now test your work, then save it:
QCARDS Code Entry 20
1. Choose the Run menu's Start command (press ALT+R, then press S).
As you press keys, their names are printed on the QCARDS output screen.
2. Return to the QuickBASIC environment (press ESC).
The ESC key case in the code you copied terminates the program.
3. Save the program as CHAPTER8.BAS.
This example code works into QCARDS easily because handling keyboard input
is a common task. You can copy, then adapt, this type of code for your
programs.
Editing the Block Copied from On-Line Help
Examining and analyzing code from other programs is a great way to extend
your programming skills. Modifying code from on-line help to work in your
programs can also save you time. Each case in the SELECT CASE...END SELECT
blocks deals with a key code representing a command the user can choose
while using QCARDS. The following steps show you how to modify this block:
QCARDS Code Entry 21
1. Select the whole first block (below the ' Handle ASCII keys comment,
about line 225). It looks like this:
SELECT CASE ASC(Choice$)
CASE ESC
PRINT "Escape key"
END
CASE IS < 32, 127
PRINT "Control code"
CASE 30 TO 29
PRINT "Digit: "; Choice$
CASE 65 TO 90
PRINT "Uppercase letter: "; Choice$
CASE 97 TO 122
PRINT "Lowercase letter: "; Choice$
CASE ELSE
PRINT "Punctuation "; Choice$
END SELECT
This block displays the category of ASCII key the user presses. QCARDS
already has a procedure named AsciiKey that examines the code of the
key the user presses, then calls other procedures to carry out the
user's commands.
When you type in the call to AsciiKey (in the next step), what you type
replaces this selected block.
2. Type the following line at the cursor:
call AsciiKey(Choice$, TopCard, LastCard)
The AsciiKey procedure is called with three arguments, which convey
information AsciiKey needs to carry out its tasks. Choice$ contains the
code for the key the user presses, TopCard contains the number of the
card at the front of the screen, and LastCard holds the number
representing the last record in the Index()array.
3. Indent the line you just entered two tab stops.
The edited code should look like this (see Figure 8.3):
File Edit View Search Run Debug Calls Options Hel
┌────────────────────────────── CHAPTER7.BAS ─────────────────────────┤↑
│' presses that represent numeric-keypad direction keys.
│
│ IF LEN(Choice$) = 1 THEN
│ ' Handle ASCII keys
│ CALL AsciiKey(Choice$, TopCard, LastCard)
│ ELSE
│ ' Convert extended to ASCII and handle
│ Choice$ = RIGHT$(Choice$, 1)
│ '
│ SELECT CASE Choice$
│ CASE CHR$(DOWN)
│ PRINT "DOWN arrow key"
│ CASE CHR$(UP)
│ PRINT "UP arrow key"
│ CASE CHR$(PGDN)
│ PRINT "PGDN key"
│ CASE CHR$(PGUP)
│ PRINT "PGUP key"
│←▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
├─────────────────────────────── Immediate ─────────────────────────────
│
│
<Shift+F1=Help> <F6=Window> <F2=Subs> <F5=Run> <F8=Step> 00209:
Figure 8.3 Code Showing Call to AsciiKey Procedure
4. Choose the Run menu's Start command (press ALT+R, then press S).
Try issuing some of the QCARDS commands. You should be able to edit the
card at the front of the screen. However, if you press the DIRECTION keys,
you still just get a description of the key overprinted on the QCARDS
screen.
To begin to make QCARDS' DIRECTION keys functional, you'll need to edit
more of the text you copied from on-line help, as follows:
QCARDS Code Entry 22
1. Choose the QCARDS Quit command and return to QuickBASIC (press Q).
2. Place the cursor in the first column of the line PRINT "DOWN arrow key"
3. Select the whole line (press SHIFT+END), then replace it by typing this
line:
TopCard = TopCard - 1
This line is executed when the user presses the DOWN key. It decreases
the value of the card representing the data at the front of the screen
by one. This is the user's way of telling QCARDS to show the record
whose number is one less than the current top card.
4. Indent the line, then edit the rest of the cases so the final block
looks exactly as follows:
SELECT CASE Choice$
CASE CHR$(DOWN)
TopCard = TopCard - 1
CASE CHR$(UP)
TopCard = TopCard + 1
CASE CHR$(PGDN)
TopCard = TopCard - CARDSPERSCREEN
CASE CHR$(PGUP)
TopCard = TopCard + CARDSPERSCREEN
CASE CHR$(HOME)
TopCard = LastCard
CASE CHR$(ENDKEY)
TopCard = 1
CASE ELSE
BEEP
END SELECT
The final two DIRECTION key cases (RIGHT and LEFT) of the block you
copied from on-line help are not needed in QCARDS (since the cards
cannot move sideways), so you can delete those cases.
The CASE ELSE part of the statement is executed if the QCARDS user
presses a key with an extended character code for which no other case
is provided.
5. Save the program as CHAPTER8.BAS.
You can replace the BEEP statement used in the CASE ELSE case of the Help
example with a call to the Alarm procedure you created in Chapter 5, "The
QCARDS Program." The following steps use the Find command to place an
earlier call to the Alarm procedure on the Clipboard, then select this
BEEP statement and replace it with CALL Alarm.
Optional QCARDS Code Entry 4
1. Choose the Search menu's Find command (press ALT+S, then press F), type
CALL Alarm in the text box, and press ENTER.
2. QuickBASIC searches for and then selects CALL Alarm, which was entered
in the program in Chapter 5, "The QCARDS Program."
3. Choose the Edit menu's Cut command (press ALT+E, then press T). (The
words CALL Alarm are selected, so you don't need to highlight them.)
4. Choose the Find command again, type BEEP in the text box, and press
ENTER.
The match is made with BEEP in the CASE ELSE statement.
5. Choose the Edit menu's Paste command to replace BEEP with CALL Alarm
(press ALT+E, then press P).
Finishing the QCARDS Code
The SELECT CASE block changes the value of TopCard when the user presses
DIRECTION keys, but doesn't do anything to actually change the information
displayed on the cards.
The following code lines take care of three eventualities that can arise
from certain combinations of DIRECTION key presses, then shows the correct
data on the cards:
QCARDS Code Entry 23
1. Place the cursor on the line beneath the following comment (about line
252):
' Adjust the cards according to the key pressed by the user,
' then call the ShowCards procedure to show adjusted stack.
2. Create an empty line (press ENTER), then type the following code,
exactly as shown:
if TopCard < 1 then TopCard = LastCard + TopCard
if TopCard > LastCard then TopCard = TopCard - LastCard
if TopCard <= 0 then TopCard = 1
These three lines use the single line form of IF...THEN to "rotate" the
card stack. They prevent TopCard from being passed to ShowCards when it
has a value that is beyond the range of the Index()array.
3. Now type your final code line:
CALL ShowCards(TopCard, LastCard)
The ShowCards procedure places the proper data on the front card, and
the proper name on each of the cards behind it.
4. Save the program now as CHAPTER8.BAS.
5. Choose the Run menu's Start command to run QCARDS (press ALT+R, then
press S).
Using QCARDS
The commands on the command line at the bottom of the QCARDS output screen
are now fully functional. Take a few minutes to try each feature. The
commands are summarized in the following list:
╓┌─┌────────────────────────┌────────────────────────────────────────────────╖
QCARDS Command Result
──────────────────────────────────────────────────────────────────────────
Edit Top Lets you change any or all fields of the card at
the front of the screen.
Add New Places a "blank card" on the front of the screen
for you to fill in.
Copy to New Duplicates all fields of the current top card on
a new card.
QCARDS Command Result
──────────────────────────────────────────────────────────────────────────
a new card.
Delete Marks the current top card for deletion. Note
that it is not actually deleted until you choose
Quit. Therefore, if you decide not to delete the
card, you can use CTRL+BREAK to break out of the
program. When you restart, the card will still be
there.
Find Lets you move to one of the fields, then type
what you want to search for. If an exact match is
found, the card with the exact match is placed in
the first position. If no exact match is found,
QCARDS beeps.
Sort Orders the cards alphabetically (or numerically)
by the field in which you place the cursor. For
example, if the cursor is in the zip code (Zip)
field, Sort orders the cards in increasing zip
QCARDS Command Result
──────────────────────────────────────────────────────────────────────────
field, Sort orders the cards in increasing zip
code order. If you place the cursor in the state
(ST) field, the cards are ordered alphabetically
by state.
Print Prints out just the name and address fields (for
use on a mailing label).
Quit Writes the current Index array to the
random-access disk file. If any cards have been
marked as deleted, they are removed from the file
at this time. Edits to cards and additions to the
file are also made when you quit QCARDS. Quit
then terminates the QCARDS program.
──────────────────────────────────────────────────────────────────────────
Try the DIRECTION keys too. Most of the DIRECTION keys work. However, by
copying code from Help, you inadvertently incorporated a naming
inconsistency that caused a bug in your code. In the next chapter, you'll
use QuickBASIC's debugging features to remove the bug.
For More Information
For more information on on-line help, see the following:
Chapter Topic
──────────────────────────────────────────────────────────────────────────
Section 10.8, "Using Information on QuickBASIC's Help menu commands
On-Line Help" and and complete descriptions of all the Help
Chapter 21, "The Help features.
Menu"
──────────────────────────────────────────────────────────────────────────
────────────────────────────────────────────────────────────────────────────
Chapter 9 Debugging While You Program
Microsoft QuickBASIC's smart editor keeps your code free of syntax errors as
you enter individual statements. But QuickBASIC has other features that help
you isolate "bugs"──errors in the general logic or specific details of your
program that cause it to behave in unanticipated ways. Some of these
features are on the Debug menu, while others are on the Run menu. Still
others are controlled completely by function keys. These features let you
suspend program execution at any point, control which statements of your
program execute, and monitor the values of variables.
In this chapter, you'll find a real bug and fix it. You'll practice
■ Using QuickBASIC's debugging features
■ Defining and calling a procedure that has parameters
■ Creating a stand-alone executable file from within QuickBASIC
This chapter takes about one to one and one-half hours to complete.
Debugging Commands
Most QuickBASIC debugging commands are on the Debug menu. However, some of
the most useful debugging features are on the Run menu, or are accessible
only through function keys.
Debug-Menu Commands
Commands on the Debug menu let you control program flow and monitor the
value of variables in a running program.
Command (and Shortcut Action
Key)
──────────────────────────────────────────────────────────────────────────
Add Watch Places a variable you specify into the Watch
window, then continually updates its value.
Instant Watch (SHIFT+F9) Gives current value of a highlighted variable;
optionally, places the variable in Watch window.
Delete Watch Deletes the specified variable from Watch window.
Toggle Breakpoint (F9) Sets a "breakpoint" at the cursor if one is not
currently set there. A breakpoint is a specified
location where program execution will halt. If
there is a breakpoint currently set at the
cursor, choosing Toggle Breakpoint turns it off.
Clear All Breakpoints Turns off all breakpoints everywhere in the
program.
──────────────────────────────────────────────────────────────────────────
Debugging Commands on the Run Menu
Commands from the Run menu control program execution during debugging.
Command (and Shortcut Action
Key)
──────────────────────────────────────────────────────────────────────────
Start (SHIFT+F5) Runs the program in the View window beginning
with the first statement.
Restart Resets all variables to zero (or zero-length
strings), compiles declarations, and sets the
first executable statement as the current
statement.
Continue (F5) Continues execution of a suspended program from
the current statement. In a program that is not
running, the effect is identical to the Start
command.
──────────────────────────────────────────────────────────────────────────
Function Keys Used in Debugging
The following table shows the debugging commands that are controlled only
by function keys:
Command Action
──────────────────────────────────────────────────────────────────────────
F7 Executes program to statement at the cursor.
F8 Single steps through your program. Each time you
press F8, the execution sequence progresses one
statement. If the current statement is a
procedure invocation, F8 moves the procedure
definition into the View window. If the program
is not already running, F8 acts the same as the
Run menu's Restart command: pressing F8 restarts
the program, making the first executable
statement the current statement. In a suspended
program, F8 executes the current statement in the
execution sequence.
F10 Single steps through your program. F10 steps over
or executes all statements of a procedure as
though they were a single statement without
moving the procedure definition into the View
window. Otherwise, F10 acts the same as F8.
──────────────────────────────────────────────────────────────────────────
Debugging a Procedure
In this section you'll use everything you've learned so far to turn the
SELECT CASE block that handles DIRECTION keys into a procedure. In Chapter
5, "The QCARDS Program," you saw how easy it is to define procedures with
QuickBASIC. The procedure you create in the next code-entry sequence is
defined with parameters. When it is called, it is called with arguments.
The following steps tell you how to create a SUB procedure with the name
DirectionKey. As noted in Chapter 5, when QuickBASIC's smart editor
processes the word sub followed by a procedure name, it opens a window and
starts the procedure with the SUB and END SUB statements.
QCARDS Code Entry 24
1. Start QuickBASIC if it is not already running, and open CHAPTER8.BAS.
2. Place the cursor in the leftmost column of the line containing SELECT
CASE Choice$ (about line 231), then select the whole block (a total of
16 lines) down to and including END SELECT. It looks like this (see
Figure 9.1):
┌────────────────────────────────────┐
│ │
│ Figure 9.1 can be found on │
│ page 132 of the printed manual. │
│ │
└────────────────────────────────────┘
Figure 9.1 Selecting the SELECT CASE Choice$ Block
3. Choose the Edit menu's Cut command to delete the text and place it on
the Clipboard (press ALT+E, then press T).
4. Create a blank line above the END IF statement, then move the cursor to
column 1 of the new blank line.
5. Type
sub DirectionKey(Choice$, TopCard%, LastCard%)
then press ENTER.
Notice that QuickBASIC has started a SUB...END SUB procedure with the
name you specified, and has moved it into the View window.
6. Put the cursor on the blank line immediately above the END SUB
statement (press DOWN).
7. Choose the Edit menu's Paste command to paste the text block from the
Clipboard. The procedure should look like Figure 9.2.
File Edit View Search Run Debug Calls Options Help
┌──────────────────────── CHAPTER8.BAS:DirectionKey ──────────────────┤↑├──
│DEFINT A-Z
│SUB DirectionKey (Choice$, TopCard%, LastCard%)
│ SELECT CASE Choice$
│ CASE CHR$(DOWN)
│ TopCard = TopCard - 1
│ CASE CHR$(UP)
│ TopCard = TopCard + 1
│ CASE CHR$(PGDN)
│ TopCard = TopCard - CARDPERSCREEN
│ CASE CHR$(PGUP)
│ TopCard = TopCard + CARDPERSCREEN
│ CASE CHR$(HOME)
│ TopCard = LastCard
│ CASE CHR$(ENDKEY)
│ TopCard = 1
│ CASE ELSE
│ CALL Alarm
│ END SELECT
│
│END SUB
│←▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒→
├─────────────────────────────── Immediate ────────────────────────────────
<Shift+F1=Help> <F6=Window> <F2=Subs> <F5=Run> <F8=Step> 00003:013
Figure 9.2 DirectionKey Procedure in View Window
Now that the procedure is defined, you have to put a CALL statement at the
place where you deleted the text. The CALL statement makes the statements
in a SUB procedure part of the program's execution sequence. Do the
following:
QCARDS Code Entry 25
1. Choose the View menu's SUBs command (press F2).
Note that the fifth entry under CHAPTER8.BAS is now DirectionKey.
2. Select CHAPTER8.BAS if it isn't already selected. Press ENTER to return
the cursor to the module-level code.
3. Move the cursor to the end of the following line (at about line 229):
Choice$ = RIGHT$(Choice$, 1)
4. Create a blank line (press ENTER). Then, type the following line at the
cursor but do not press ENTER:
call DirectionKey(Choice$, TopCard, LastCard)
The DirectionKey procedure is more complicated than Alarm because it is
defined with parameters (the words in parentheses in the SUB statement you
created earlier) and called with arguments (the words in parentheses in
the CALL statement). You don't have to use the same names for the
parameters as you use for the arguments, but it is all right to do so.
The DirectionKey procedure makes QCARDS' module-level code easier to
follow because the arithmetic for handling DIRECTION keys is now
represented by a single statement, rather than 15 lines of statements.
Using procedures costs almost nothing in terms of execution speed or
program size, so the added program readability is worth the small effort
of programming them. Procedures are especially beneficial for tasks that
are performed repeatedly in a program.
Learning about Procedures
You can use QuickBASIC's debugging features to learn about procedures. The
cursor should still be on the call you just typed to Direction Key (about
line 226). Try the following:
1. Execute the program up to the call to DirectionKey (press F7).
QCARDS starts to run. In the following step you will press a DIRECTION
key while QCARDS is running, causing QuickBASIC to suspend execution at
the call to DirectionKey.
2. Press a DIRECTION key (preferably PGUP).
This returns control to the QuickBASIC environment. The statement CALL
DirectionKey appears in high-intensity video. It hasn't been executed
yet──it is the current statement.
3. Execute the CALL DirectionKey procedure as a single statement (press
F10). The END IF statement appears in high-intensity video. It is now
the current statement.
Continuing a Suspended Program
You don't always have to start suspended programs over from the beginning
after making edits. Usually you can just choose the Continue command from
the Run menu to continue execution from the point of suspension. QCARDS
should run as before. When you press DIRECTION keys, the data on the cards
should change. Try the following:
1. Continue program execution (press F5).
2. Press the END key on the numeric keypad to move the data on the cards
to the last item. The END key doesn't work. If you did the optional
code entry in Chapter 8, the Alarm procedure sounds off because the
END key isn't recognized as one of the cases in the SELECT CASE block.
(If you didn't do the optional code entry in Chapter 8, QCARDS beeps.)
You have a bug.
3. Press the UP, DOWN, PGDN, and PGUP keys. They should all work. So there
is a bug in the code dealing with the END key.
4. Return to QuickBASIC (press CTRL+BREAK).
QuickBASIC returns you to the environment and places the cursor at
either the Choice$ = INKEY$ statement, or LOOP WHILE Choice$ =
statement, whichever was executing when you pressed CTRL+BREAK. Right
now you are stuck in this DO loop. You cannot step past it with F8 or
F10. You will have to place the cursor on the statement following the
loop, then use F7 to execute to it.
5. Move the cursor down (about 27 lines) past the big comment block to the
following line (at about line 224):
IF LEN(Choice$) = 1 THEN
6. Execute the program to the statement at the cursor (press F7). The
QCARDS screen is displayed.
7. Press the END key again.
QuickBASIC returns you to the environment. The line you were on when
you pressed F7 is highlighted:
IF LEN(Choice$) = 1 THEN
Usually when you suspend program execution you can press F5 to continue
execution from the point of suspension. However, some edits you make to a
suspended program prevent simple continuation. In the next few QCARDS
code-entry sequences, QuickBASIC may display a dialog box indicating that
one of the edits you have made requires restarting the program (see Figure
9.3). That is normal. Just press ENTER and continue editing.
┌──────────────────────────────────────────────────────────────────────────
│
│ You will have to restart your program after this edit. Proceed anyway?
│
├──────────────────────────────────────────────────────────────────────────
│ < OK > < Cancel > < Help >
└──────────────────────────────────────────────────────────────────────────
Figure 9.3 Restart Program Error Message
Isolating a Bug
QuickBASIC's debugging features make coding and logic errors easy to trace
and fix because they make it easy to understand the line-by-line workings
of your code. In the next QCARDS code-entry sequence, you'll use single
stepping to find the bug. You know you pressed a DIRECTION key to suspend
the program so you can anticipate that execution will move to the ELSE
block when you execute the statement at the cursor.
Follow these steps to track down the bug:
QCARDS Code Entry 26
1. Execute the IF statement and the one that follows and move the cursor
to the call to DirectionKey (press F8 twice to single step up to the
call).
2. Single step into the DirectionKey procedure (press F8).
The cursor is placed on the SELECT CASE statement.
3. Set a breakpoint (see Figure 9.4) at the current line (press F9).
Breakpoint
│
File Edit View Search Run Debug Calls Options │ Hel
┌─────────────────────── CHAPTER8.BAS:DirectionKey ──────┼────────────┤↑
│DEFINT A-Z │
│SUB DirectionKey (Choice$, TopCard%, LastCard%) │
│ SELECT CASE Choice$
│ CASE CHR$(DOWN)
│ TopCard = TopCard - 1
│ CASE CHR$(UP)
│ TopCard = TopCard + 1
│ CASE CHR$(PGDN)
│ TopCard = TopCard - CARDPERSCREEN
│ CASE CHR$(PGUP)
│ TopCard = TopCard + CARDPERSCREEN
│ CASE CHR$(HOME)
│ TopCard = LastCard
│ CASE CHR$(ENDKEY)
│ TopCard = 1
│ CASE ELSE
│ CALL Alarm
│ END SELECT
│←▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
├─────────────────────────────── Immediate ─────────────────────────────
│
│
<Shift+F1=Help> <F5=Continue> <F9=Toggle Bkpt> <F8=Step> 00017:
Figure 9.4 Setting a Breakpoint
4. Continue execution of QCARDS (press F5 twice). When the QCARDS output
screen appears, press the END key to activate the suspected bug.
QuickBASIC returns the cursor to the line on which you set the
breakpoint.
5. Single step to the CASE ELSE statement (press F8). The CALL Alarm
statement appears in reverse video.
6. Move the cursor into the word HOME in the CASE CHR$(HOME) statement,
then get help (press F1).
The Help window opens and describes HOME as a symbolic constant with a
value of 71 (see Figure 9.5).
File Edit View Search Run Debug Calls Options Hel
┌─────────────────────────────── HELP: HOME ──────────────────────────┤↑
│HOME is a symbol that is used in your program as follows:
│
│┌ C:\QB4.5\DEMO\DIR1\CHAPTER8.BAS ────
││ constant of type: INTEGER Value = 71
││
│
│
├─────────────────────── CHAPTER8.BAS:DirectionKey ───────────────────┤↑
│ TopCard = TopCard - CARDPERSCREEN
│ CASE CHR$(PGUP)
│ TopCard = TopCard + CARDPERSCREEN
│ CASE CHR$(HOME)
│ TopCard = LastCard
│ CASE CHR$(ENDKEY)
│ TopCard = 1
│ CASE ELSE
│ CALL Alarm
│ END SELECT
│←▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
├─────────────────────────────── Immediate ─────────────────────────────
│
│
<Shift+F1=Help> <F5=Continue> <F9=Toggle Bkpt> <F8=Step> 00012:
Figure 9.5 Symbol Help for Symbolic Constant HOME
7. Move the cursor down to the CASE CHR$(ENDKEY) statement, place the
cursor in the word ENDKEY, and get help (press F1).
The Help window opens and describes ENDKEY as a variable of type
INTEGER. But ENDKEY should be a symbolic constant, just like HOME.
8. Choose the Instant Watch command from the Debug menu.
The value of ENDKEY is shown as zero.
9. Press ENTER to place ENDKEY in the Watch window.
In the program, ENDKEY should be a symbolic constant defined with a CONST
statement in the declarations and definitions section of the program (just
like HOME). Try this:
QCARDS Code Entry 27
1. Choose the View menu's SUBs command (press ALT+V, then press S), then
choose the first entry (CHAPTER8.BAS) in the list box to move the
module-level code of the program into the View window.
2. Move the cursor to the top of the module-level code (press CTRL+HOME).
3. Choose the Search menu's Find command, then type HOME in the text box
and press ENTER.
HOME is selected in the declarations and definitions section. Beside it,
you can see the cause of the bug. The symbolic constant used to represent
the END key is ENDK, whereas the SELECT CASE code you copied from on-line
help used ENDKEY to represent the END key (see Figure 9.6).
File Edit View Search Run Debug Calls Options Help
DirectionKey ENDKEY: 0
┌────────────────────────────── HELP: ENDKEY ─────────────────────────┤↑├──
│ENDKEY is a symbol that is used in your program as follows:
│
│┌ C:\QB4.5\DEMO\DIR1\CHAPTER8.BAS ────
││┌ SUB DirectionKey ───────────────────
│││ variable of type: INTEGER
││
├────────────────────────────── CHAPTER8.BAS ─────────────────────────┤↑├──
│CONST SPACE = 32, ESC = 27, ENTER = 13, TABKEY = 9
│CONST DOWN = 80, UP = 72, LEFT = 75, RIGHT = 77
│CONST HOME = 71, ENDK = 79, PGDN = 81, PGUP = 73
│CONST INS = 82, DEL = 83, NULL = 0
│CONST CTRLD = 4, CTRLG = 7, CTRLH = 8, CTRLS = 19, CTRLV = 22
│
│' Define English names for color-specification numbers. Add BRIGHT to
│' any color to get bright version.
│CONST BLACK = 0, BLUE = 1, GREEN = 2, CYAN = 3, RED = 4, MAGENTA = 5
│CONST YELLOW = 6, WHITE = 7, BRIGHT = 8
│←▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒→
├─────────────────────────────── Immediate ────────────────────────────────
│
│
<Shift+F1=Help> <F5=Continue> <F9=Toggle Bkpt> <F8=Step> 00024:007
Figure 9.6 Error in Naming Symbolic Constant for the ENV Key
Most of the symbolic-constant names used to represent the DIRECTION keys
are the same as those shown on the keys themselves, but you can't
represent the END key with the symbolic constant END, because END is a
BASIC keyword. The on-line help example used ENDKEY to deal with this
problem, QCARDS uses ENDK. It doesn't matter which is used, ENDKEY is just
as good as ENDK. What is important is that the word used in the definition
be the same as that used elsewhere in the program. Do the following to
change ENDKEY to ENDK:
QCARDS Code Entry 28
1. Choose the Search menu's Change command (press ALT+S, then press C).
(If you get a message saying you will have to restart your program,
press ENTER.)
2. Type ENDKEY in the first text box, then press TAB and type ENDK in the
second text box.
3. Start the search (press ENTER). The first match is in the DirectionKey
procedure.
4. Make the change (press C). The search ends. That was the only
occurrence of ENDKEY.
Closing the Watch Window
When the Watch window is open, QuickBASIC executes more slowly than when
it is closed. You close the Watch window by repeatedly choosing the Delete
Watch command from the Debug menu, then choosing variables from the
resulting dialog box until the Watch window closes. You may also want to
occasionally choose the Clear All Breakpoints command too.
1. Choose the Debug menu's Clear All Breakpoints command (press ALT+D,
then press C).
2. Choose the Debug menu's Delete Watch command (press ALT+D, then press
D).
3. Delete the entry (press ENTER).
The next step is to run your program and save it. Do the following:
QCARDS Code Entry 29
1. Choose the Run menu's Start command. QCARDS should run and recognize
all the DIRECTION keys as well as all the command-line keys.
2. Choose Quit from the QCARDS command line, then press a key to continue.
3. Choose the File menu's Save As command and save the program as
FINALQ.BAS.
QCARDS should now be fully functional.
Automatic Procedure Declarations
When you save a program, QuickBASIC creates a DECLARE statement for any
new procedure. Generally, you should move such DECLARE statements to the
declarations and definitions section of your program. QuickBASIC uses
procedure declarations to check the number, order, and types of the
arguments you pass to a procedure when you call it. DECLARE statements
should be toward the end of the declarations and definitions below
statements such as DEFtype and TYPE...END TYPE. You should copy the
DECLARE statement for the procedure DirectionKey into the
procedure-declarations portion of the declarations and definitions (as you
did with the declaration for Alarm in Chapter 5). Do the following:
QCARDS Code Entry 30
1. Move to the beginning of the program (press CTRL+HOME).
2. Select the entire DECLARE DirectionKey statement (press SHIFT+END).
3. Delete the selected statement from QCARDS and place it on the Clipboard
(press ALT+E, then press T).
4. Move to the SUB procedure declarations section of the program (about
line 74).
5. Create a blank line (if necessary) and insert the DECLARE DirectionKey
statement (press ALT+E,then press P).
6. Save the program again as FINALQ.BAS.
Creating a Stand-Alone Executable File
1. Choose the Run menu's Make EXE File command (press ALT+R, then press
X).
If a dialog box appears asking if you want to save your files, press
ENTER. The Make EXE File dialog box appears (see Figure 9.7):
Type name of executable file here.
│
┌───────────────────┼──Make EXE File─────────────────────────────┐
│ ┌───┼───────────────────────────────────────┐ │
│EXE File Name: │FINALQ.EXE │ │
│ └───────────────────────────────────────────┘ │
│ Produce: │
│ [ ] Produce Debug Code ( ) EXE Requiring BRUN45.EXE │
│ (∙) Stand-Alone EXE File │
├────────────────────────────────────────────────────────────────┤
│ < Make EXE > < Make EXE and Exit > < Cancel > < Help > │
└────────────────────────────────────────────────────────────────┘
Figure 9.7 Make EXE File Dialog Box
2. Type QCARDS in the text box.
3. Choose the Make EXE and Exit option (press ALT+E).
QuickBASIC creates the EXE file and exits to DOS.
4. Run QCARDS (type qcards at the DOS prompt and press ENTER).
──────────────────────────────────────────────────────────────────────────
NOTE
If you don't have a hard disk, QuickBASIC prompts you to insert a disk
containing BC.EXE, and later prompts you for a path for libraries it
needs to finish making the executable file. BC.EXE, LINK.EXE and
BRUN45.LIB are on disk 3 (Utilities 1). BCOM45.LIB is located on disk 4
(Utilities 2). When asked for a path, type in a full path including both
drive name and file name.
──────────────────────────────────────────────────────────────────────────
Learning about QuickBASIC's Other Menu Items
The preceding chapters have familiarized you with most of the commands on
QuickBASIC's Easy Menus. Two commands were not covered. The Options menu's
Set Paths command lets you change some settings that were made
automatically by the Setup program you used to install QuickBASIC. The
View menu's Included Lines command is used only in programs that rely on
include files. See Sections 20.2, "Set Paths Command," and 14.7,
"Included Lines Command," for full discussions of these commands.
Easy Menus provides a very functional programming environment for the
novice or intermediate BASIC user. QuickBASIC's Full Menus provide
additional commands needed for advanced or professional programming. For
example, the Full Menus Debug menu contains commands useful for debugging
large and complex programs. The Full Menus File menu lets you load
multiple files simultaneously, so you can create programs using multiple,
separately compiled source files (modules). The uses of these advanced
commands are covered in Chapters 10-21 of this manual. The programming
techniques are discussed in Programming in BASIC.
For More Information
For more information on the topics discussed in these chapters, see the
following:
Chapter Topic
──────────────────────────────────────────────────────────────────────────
Chapter 2, "SUB and Complete information on programming with
FUNCTION Procedures," procedures, including rules for parameters and
in Programming in BASIC arguments.
Chapter 17, "Debugging Complete rules for using all QuickBASIC's
Concepts and debugging features, including advanced features
Procedures," Chapter such as watchpoints and the Calls menu.
18, "The Debug Menu,"
and Chapter 19, "The
Calls Menu"
──────────────────────────────────────────────────────────────────────────
────────────────────────────────────────────────────────────────────────────
PART 3 QUICKBASIC MENUS AND COMMANDS
────────────────────────────────────────────────────────────────────────────
Part 3, "QuickBASIC Menus and Commands," is a reference to the Microsoft
QuickBASIC menus and commands. Refer to this part when you want detailed
information on how a command works or situations in which you might use
the command.
Chapters 10 and 11 introduce the QuickBASIC environment and working with
your files. Chapters 12-16 look at the QuickBASIC features that help you
create, edit, and run your programs. Chapters 17-19 cover general
debugging techniques and the specific tools available for faster
debugging. Chapter 20 discusses how you can customize QuickBASIC to your
personal taste, and Chapter 21 reviews the menu commands for accessing
the on-line help system.
────────────────────────────────────────────────────────────────────────────
Chapter 10 Getting Around in QuickBASIC
This chapter introduces the QuickBASIC programming environment and
illustrates many of its features. The chapter includes the basic
information you'll need to begin using the QuickBASIC program development
environment.
This chapter tells you how to do the following:
■ Start QuickBASIC
■ Choose commands from menus
■ Choose items in dialog boxes
■ Scroll listings
■ Select text in a dialog box or window
■ Change window size
■ Use the Immediate window
■ Use the Watch window
■ Use the mouse
■ Use on-line help
10.1 Starting QuickBASIC
This section discusses starting QuickBASIC with and without special
options. It also describes the parts of the QuickBASIC screen. If you have
not already done so, read Chapter 1, "Setting Up QuickBASIC," to set up
QuickBASIC on your computer.
10.1.1 The QB Command
To start QuickBASIC, type QB at the DOS prompt.
The full syntax for the QB command is the following:
QB [[[[/RUN]] [[programname]] [[/B]] [[/G]] [[/H]] [[/NOHI]]
[[/C:buffersize]] [[/L[[libraryname]]]] [[MBF]] [[/AH]] [[/CMD string]]]]
──────────────────────────────────────────────────────────────────────────
NOTE
In this manual, the QB command and its options appear in uppercase
letters. However, because DOS is not case sensitive, you may use
lowercase letters as well.
──────────────────────────────────────────────────────────────────────────
The following list describes QuickBASIC's command options. These options
can be typed on the DOS command line following the QB command and have the
effects described. Use the options in the order listed.
╓┌─┌────────────────────────┌────────────────────────────────────────────────╖
Option Description
──────────────────────────────────────────────────────────────────────────
/RUN programname Causes QuickBASIC to load and run programname
before displaying it.
programname Names the file to be loaded when QuickBASIC
starts.
/B Allows the use of a composite (black-and-white)
monitor with a color graphics card. The /B option
displays QuickBASIC in black and white if you
have a color monitor.
/G Sets QuickBASIC to update a CGA screen as fast as
possible. The option works only with machines
using CGA monitors. If you see "snow" (dots
flickering on the screen) when QuickBASIC updates
your screen, then your hardware cannot fully
support the /G option. If you prefer a "clean"
screen, restart QuickBASIC without the option.
Option Description
──────────────────────────────────────────────────────────────────────────
screen, restart QuickBASIC without the option.
/H Displays the highest resolution possible on your
hardware.
/NOHI Allows the use of a monitor that does not support
high intensity. See Section 10.1.2 for a
description of this option.
/C:buffersize Sets the size of the buffer receiving data. This
option works only with an asynchronous
communications card. The default buffer size is
512 bytes; the maximum size is 32,767 bytes.
/L libraryname Loads the Quick library that is specified by
libraryname. If libraryname is not specified, the
default Quick library, QB.QLB, is loaded.
/MBF Causes the QuickBASIC conversion functions to
Option Description
──────────────────────────────────────────────────────────────────────────
/MBF Causes the QuickBASIC conversion functions to
treat IEEE-format numbers as Microsoft Binary
format numbers.
/AH Allows dynamic arrays of records, fixed-length
strings, and numeric data to be larger than 64K
each.
/CMD string Passes string to the COMMAND$ function. This
option must be the last option on the line.
──────────────────────────────────────────────────────────────────────────
For example, type
QB /RUN GRAPHIX /G /AH
if you want to run a program named GRAPHIX with the following options:
■ Load and run Graphix before displaying it
■ Quickly update CGA screen
■ Allow dynamic arrays to exceed 64K
Generally, however, you start QuickBASIC by typing QB and pressing ENTER.
10.1.2 The /NOHI Option
If you type QB at the DOS level, QuickBASIC assumes you have a monitor
that can display high intensity. However, if you use a monitor that does
not support high intensity, you will need to tell QuickBASIC how to
display on your system. Use the list below to determine any options you
may need.
Monitor Display Invocation Command
──────────────────────────────────────────────────────────────────────────
16 colors (CGA, EGA or VGA) QB
4-color monochrome (MDA) QB
8 colors (CGA, EGA or VGA) QB /NOHI
4-color black-and-white composite (CGA, EGA or VGA) QB /B
2-color black-and-white composite (CGA, EGA or VGA) QB /B /NOHI
──────────────────────────────────────────────────────────────────────────
Laptop computers frequently use liquid crystal displays (LCDs) that are
considered 2-color black-and-white composite displays; they require the QB
/B /NOHI command.
10.1.3 The QuickBASIC Screen
The first time you type QB and press ENTER from DOS, a dialog box offers
you the opportunity to review the QuickBASIC Survival Guide. If you press
ESC to clear the dialog box, you now see the QuickBASIC screen, shown in
Figures 10.1 and 10.2. Figure 10.1 shows the top half of the QuickBASIC
invocation screen.
┌────────────────────────────────────┐
│ │
│ Figure 10.1 can be found on │
│ page 153 of the printed manual. │
│ │
└────────────────────────────────────┘
Figure 10.1 Top Half of QuickBASIC Invocation Screen
The following list describes the items shown in Figure 10.1.
╓┌─┌────────────────────────┌────────────────────────────────────────────────╖
Item Description
──────────────────────────────────────────────────────────────────────────
Menu bar Names each menu. When you press the ALT key, the
highlighted letter indicates which key "pulls
down" that menu.
View window Displays your program's text.
Cursor Shows where the text you type will appear. The
cursor appears in the active window.
Mouse cursor Shows current on-screen position of mouse (use
with mouse only).
Item Description
──────────────────────────────────────────────────────────────────────────
with mouse only).
Title bar Shows the name of the program or procedure.
Maximize box Expands the active window to fill the screen (use
with mouse only).
Scroll arrow Scrolls the text one character or one line at a
time (use with mouse only).
Scroll box Shows cursor's relative position within the file
or procedure.
──────────────────────────────────────────────────────────────────────────
Figure 10.2 shows the bottom half of the QuickBASIC invocation screen.
┌────────────────────────────────────┐
│ │
│ Figure 10.2 can be found on │
│ page 154 of the printed manual. │
│ │
└────────────────────────────────────┘
Figure 10.2 Bottom Half of QuickBASIC Invocation Screen
╓┌─┌────────────────────────┌────────────────────────────────────────────────╖
Item Description
──────────────────────────────────────────────────────────────────────────
Immediate window Executes QuickBASIC statements directly; they
need not be entered as part of a program.
CAPS LOCK and NUM LOCK C appears when the CAPS LOCK key is toggled on. N
indicators appears when the NUM LOCK key is toggled on.
Scroll bars Scrolls text in the currently active window (use
with mouse only).
Reference bar Contains reference information.
Item Description
──────────────────────────────────────────────────────────────────────────
Reference bar Contains reference information.
The first five items are buttons showing a
frequently used shortcut key and the
corresponding menu or option. Clicking a button
with the mouse gives the same result as pressing
the shortcut key shown in the button. Pressing
ALT displays four different reference items.
WordStar-style command 'Q appears when you enter CTRL+Q, a
indicator WordStar-style command. 'K appears here when you
are setting a place marker (see Section 12.4,
"Using Placemarkers in Text"). 'P appears here
when you are entering a literal character (see
Section 12.6, "Entering Special Characters").
Line and column counters Give current position of cursor within the text
in the active window.
──────────────────────────────────────────────────────────────────────────
Item Description
──────────────────────────────────────────────────────────────────────────
When you start QuickBASIC without specifying a program name, you can begin
to write a program, or you can ask for on-line help. To use the QuickBASIC
on-line help, press F1 for a general Help window, or use the Help menu for
more detailed information (see Section 10.8, "Using On-Line Help," and
Chapter 21, "The Help Menu," for more details).
To clear a Help window, press the ESC key. Pressing ESC also clears menus,
dialog boxes, and error messages from the QuickBASIC screen.
10.2 Opening Menus and Choosing Commands
QuickBASIC commands are organized in pull-down menus on the menu bar.
Figure 10.3 shows one of these, the File menu.
┌──────┐
│ File │
├──────┴──────────┐
│ New Program │
│ Open Program... │
│ Merge... │
│ Save │
│ Save As... │
│ Save All │
├─────────────────┤
│ Create File... │
│ Load File... │
│ Unload File... │
├─────────────────┤
│ Print... │
│ DOS Shell │
├─────────────────┤
│ Exit │
└─────────────────┘
Figure 10.3 The File Menu
The QuickBASIC environment is designed for fast, simple operation. You can
do most operations in QuickBASIC with either of the following techniques:
■ Open menus and choose commands with the keyboard or a mouse. (See
Section 10.7, "Using the Mouse," for a summary of mouse techniques.)
■ Execute a command directly with a "shortcut" key, which is one or two
keystrokes that perform the same task as a menu command.
Menu commands followed by three dots (...) indicate that more information
is required before the command can execute. In these cases, a "dialog
box"──a box that asks you for additional information──appears on the
screen.
10.2.1 Keyboard Technique
You can choose any command on a QuickBASIC menu by using the keyboard.
To open a menu, follow these steps:
1. Press and release the ALT key. (Notice that after you press the ALT
key, the first letter of each menu is highlighted.)
2. Press the first letter of the menu's name.
──────────────────────────────────────────────────────────────────────────
NOTE
The ALT key is a "toggle," so if you press it again, the highlight
disappears. The "press and release" feature of the ALT key is active
only within menus. When using key combinations in other circumstances,
you must hold down the first key while pressing the rest of the
sequence.
──────────────────────────────────────────────────────────────────────────
This "selects" (highlights) the entire menu and displays the menu's
commands. A command name contains a highlighted letter whenever it is
"active" (available).
If no letter in a command is highlighted and it appears dimmed, you cannot
choose that command until you take some other action. For example, if you
are editing a program but have not selected any text to copy or delete,
the commands Cut and Copy can have no effect. You can use Cut and Copy
only after you select text. (See Section 12.2 to learn how to select text
for copying or deleting.)
To move from one menu to another, do either of the following:
■ Close the menu by pressing ESC, then repeat steps 1 and 2 above.
■ Press the LEFT or RIGHT direction keys.
To choose a command, do one of the following:
■ Press the key corresponding to the highlighted letter.
■ Use the UP or DOWN direction keys to highlight the command you want to
execute, then press ENTER.
Some commands take effect immediately and cannot be canceled once chosen.
However, commands followed by three dots ( ... ) cause QuickBASIC to
display a dialog box so you can supply additional information. To cancel a
dialog box, press ESC. See Section 10.3 for a discussion of dialog boxes.
See Also
Section 10.7, "Using the Mouse"
10.2.2 Using Shortcut Keys
In QuickBASIC the function keys (F1-F10) serve as shortcut keys for many
of the menu functions. Shortcut keys allow you to substitute one or two
keystrokes for the process of choosing a command through on-screen menus.
Shortcut keys for menu commands are listed on the menu, next to the
command. If you are new to programming you may prefer to use only the
on-screen menus. When you feel comfortable with QuickBASIC commands, you
may want to use the shortcut keys.
For example, to run a program, you can choose the Start command from the
Run menu, or you can bypass the menu and use the shortcut-key combination
SHIFT+F5. Table 10.1 lists and explains all of the QuickBASIC shortcut
keys and equivalent menu commands.
Table 10.1 QuickBASIC Shortcut Keys
╓┌─┌────────────────────────┌────────────────────────────────────────────────╖
Programming Action
Shortcut Keys Menu Command
──────────────────────────────────────────────────────────────────────────
SHIFT+F1 Displays general help information
Help on Help command on Help menu
F1 Displays help information on the keyword or
variable nearest to the left of the cursor
Topic command on Help menu
ALT+F1 Displays up to 20 previous help screens
None
F2 Displays a list of loaded SUB or FUNCTION
procedures, modules, include files, or document
files
SUBs command on View menu
SHIFT+F2 Displays next procedure in active window
Next SUB command on View menu
Programming Action
Shortcut Keys Menu Command
──────────────────────────────────────────────────────────────────────────
CTRL+F2 Displays previous procedure in active window
None
F3 Finds next occurrence of previously specified
text
Repeat Last Find command on Search menu
F4 Toggles display of output screen
Output Screen command on View menu
F5 Continues program execution from current
statement
Continue command on Run menu
SHIFT+F5 Starts program execution from beginning
Start command on Run menu
Programming Action
Shortcut Keys Menu Command
──────────────────────────────────────────────────────────────────────────
F6 Makes next window the active window
None
SHIFT+F6 Makes previous window the active window
None
F7 Executes program to current cursor position
None
F8 Executes next program statement, traces through
procedure
None
SHIFT+F8 Steps back in your program through the last 20
program statements recorded by the History On or
Trace On command
None
Programming Action
Shortcut Keys Menu Command
──────────────────────────────────────────────────────────────────────────
None
F9 Toggles breakpoint
Toggle Breakpoint command on Debug menu
SHIFT+F9 Displays Instant Watch dialog box
Instant Watch command on Debug menu
F10 Executes next program statement, traces around
procedure
None
SHIFT+F10 Steps forward in your program through the last 20
program statements recorded by the History On or
Trace On command
None
CTRL+F10 Toggles between multiple windows and full screen
Programming Action
Shortcut Keys Menu Command
──────────────────────────────────────────────────────────────────────────
CTRL+F10 Toggles between multiple windows and full screen
for active window
None
──────────────────────────────────────────────────────────────────────────
See Also
Section 12.7, "Summary of Editing Commands"
10.3 Using Dialog Boxes
QuickBASIC displays a dialog box when it needs additional information
before it can carry out an action. For example, a dialog box might do the
following:
■ Prompt you for the name of a file
■ Display a list of options
■ Ask you to verify or cancel a command
■ Alert you to an error
Figures 10.4 and 10.5 illustrate the parts of a dialog box.
Path-specification Text box List boxes
line │ ││
┌┼────────────────────┼─────── Load File ─────────────┼┼───────────────────
││ ┌────────┼───────────────────────────────┼┼─────────────────┐
││File Name: │*.bas ││ │
││ └────────────────────────────────────────┼┼─────────────────┘
│└C:\QB4.5\DEMO ││
│ Files ││ Dirs/Drives
│ ┌──────────────────────────────────────────────────┐││ ┌───────────────┐
│ │ ATEST.BAS SORTDEMO.BAS │││ │ .. ↑
│ │ BL.BAS TEST.BAS ─┼┘└─┼ SOURCE ▒
│ │ DEMO1.BAS TORUS.BAS │ │ [-A-] ▒
│ │ DEMO2.BAS VARHELP.BAS │ │ [-B-] ▒
│ │ DEMO3.BAS VARHELP2.BAS │ │ [-C-] ▒
│ │ QBFORMAT.BAS │ │ ▒
│ │ QCARDS.BAS │ │ ▒
│ │ REMLINE.BAS │ │ ↓
│ └←▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒→┘ └───────────────┘
│ ┌────────────┬───────────┬────────────┐
│ │ Load as: (∙) Module ( ) Include ( ) Document
├─┼────────────────────────────────────────────────────────────────────────
│ │ < OK > < Cancel > < Help >
└─┼───────────┼─────────────────┼───────────────────┼──────────────────────
│ └──────────┬──────┴───────────────────┘
Option buttons Command buttons
Figure 10.4 Load File Dialog Box
Option buttons
│
┌┼─────────────────────────────── Display ─────────────────────────────────
││ ┌────────────────────────────── Colors ──────────────────────────────┐
││ │ Foreground Background │
││ │ ┌─────────┐ ┌─────────┐ │
││ │ ┌(∙) 1. Normal Text │ Black ↑ │ Black ↑ │
││ │ │ │ White ▒ │ White ▒ │
│└─┼─┤( ) 2. Current Statement │ Gray ▒ │ Gray ▒ │
│ │ │ │ BrWhite ▒ │ BrWhite ▒ │
│ │ └( ) 3. Breakpoint Lines │ ▒ │ ▒ │
│ │ │ ▒ │ ▒ │
│ │ │ ▒ │ ▒ │
│ │ │ ↓ │ ↓ │
│ │ └─────────┘ └─────────┘ │
│ │ │
│ └────────────────────────────────────────────────────────────────────┘
│
│ ┌───────────────────────── Display Options ──────────────────────────┐
│ │ [X] Scroll Bars Tab Stops: 8 │
│ └─────┼──────────────────────────────────────────────────────────────┘
├────────┼─────────────────────────────────────────────────────────────────
│ │ < OK > < Cancel > < Help >
└────────┼─────────────────────────────────────────────────────────────────
Check box
Figure 10.5 Display Dialog Box
To move between different parts of a dialog box, use one of the following
methods:
■ Press the TAB key.
■ Hold down the ALT key while pressing the key corresponding to the
highlighted letter in the item you want selected. When a dialog box
opens, it usually contains any options set previously.
The different dialog box components are described in the following list:
╓┌─┌────────────────────────┌────────────────────────────────────────────────╖
Component Description
──────────────────────────────────────────────────────────────────────────
Path-specification line Displays the path to the current directory.
Change the path by either typing a new path name
in the text box or by selecting the appropriate
Component Description
──────────────────────────────────────────────────────────────────────────
in the text box or by selecting the appropriate
directory in the Dirs/Drives list box.
Text box Displays typed text.
List box Lists a group of similar items, such as files or
procedures available, from which you may choose
one. Use the DIRECTION keys to move within list
boxes.
Check box Toggles an option on or off. Once the cursor is
in the checkbox area, press SPACEBAR, or press
ALT and then the highlighted letter of the item
you want to turn on or off.
When an option is on, an X appears in the check
box; when it is off, the check box is empty.
Option button Selects one of a group of options. Only one of
Component Description
──────────────────────────────────────────────────────────────────────────
Option button Selects one of a group of options. Only one of
the group may be chosen at a time. Use the
DIRECTION keys to move among option buttons.
Command button Executes a command. Once the cursor is in the
command button area, use TAB to alter selections.
Press either SPACEBAR or ENTER to execute
commands.
──────────────────────────────────────────────────────────────────────────
Note that within dialog boxes you must keep the ALT key pressed while
pressing the high-intensity letter. This procedure is slightly different
from the one for choosing menu commands, which does not require you to
hold the ALT key down while pressing the highlighted letter.
10.4 Using Windows
Microsoft QuickBASIC uses windows to contain different types of information.
There are four window types──View, Immediate, Help, and Watch. This section
introduces QuickBASIC's windows and tells how to do the following:
■ Change the active window
■ Move different parts of programs in and out of an active window
■ Change the size of a window
■ Scroll text in a window
10.4.1 Window Types
QuickBASIC uses different windows to perform different functions. The
following list describes the types of windows in QuickBASIC:
╓┌─┌────────────────────────┌────────────────────────────────────────────────╖
Window Description
──────────────────────────────────────────────────────────────────────────
View The window that appears at the top of the screen
Window Description
──────────────────────────────────────────────────────────────────────────
View The window that appears at the top of the screen
when you start QuickBASIC (see Figure 10.1).
When you load a program, the code that is outside
of any FUNCTION or SUB procedure──known as the
"module-level" code──appears in the View window.
The View menu contains commands that let you
easily move different parts of your program in
and out of View windows. For example, to see a
FUNCTION or SUB procedure in the View window,
choose the SUBs command from the View menu, then
select the procedure from the dialog box.
Immediate The window at the bottom of the screen when you
start QuickBASIC. The Immediate window allows you
to execute BASIC statements immediately. (See
Section 17.3.5 for more information on the
Immediate window.)
Help The window that contains on-line help. You can
Window Description
──────────────────────────────────────────────────────────────────────────
Help The window that contains on-line help. You can
copy examples from Help windows and paste them
into your program.
Watch The window that opens at the top of the screen
when you choose certain commands from the Debug
menu. It displays the values of variables as your
program runs. (See Section 17.3.4 for more
information on using the Watch window for
debugging.)
──────────────────────────────────────────────────────────────────────────
10.4.2 Splitting the View Window (Full Menus Only)
You can split the View window into upper and lower windows; this allows
you to view or edit two parts of a program simultaneously. Because the
View window can be split in two (Full Menus only), you can have a total of
five windows open at one time (two View windows, the Immediate window, the
Help window, and the Watch window), as shown in Figure10.6.
Help window Watch window View windows
│ │ ││
│ File Edit View Search│ Run Debug Calls Options ││ Help
│DEMO2.BAS NUM: │ ││
│DEMO2.BAS TOTAL: ││
┌┼───────────────── HELP: DECLARE Statement QuickSCREEN ──────────┼┼──┤↑├──
│└ ◄QuickSCREEN► ◄Details► ◄Example► ◄Contents► ◄Index►
│─────────────────────────────────────────────────────────────────┼┼──────
│DECLARE - a non-executable statement that declares references to ││
│ BASIC procedures and invokes argument type checking ││
│Syntax ││
│ DECLARE {FUNCTION | SUB } name [<[parameterlist]>] ││
├─────────────────────────────── DEMO2.BAS ───────────────────────┼┼──┤↑├──
│DECLARE SUB Bounce (Hi%, Low%) │└
│DECLARE SUB Fall (Hi%, Low%, Del%) │
│DECLARE SUB Siren (Hi%, Rng%) │
│DECLARE SUB Klaxon (Hi%, Low%) │
│←▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒│▒▒▒▒▒▒▒→
├────────────────────────────── SORTDEMO.BAS ─────────────────────┼───┤↑├──
│' The program also uses SOUND statements to generate different pitches,
│' depending on the location of the bar being printed. Note that the SOUND
│' statements delay the speed of each sorting algorithm so you can follow
│' the progress of the sort. Therefore, the times shown are for comparison
├─────────────────────────────── Immediate ────────────────────────────────
│LOCATE 4,5 : PRINT "TEST"
│ │
<Shift+F1=Help>│<F6=Window> <F2=Subs> <F5=Run> <F8=Step> 00001:001
│
Immediate window
Figure 10.6 QuickBASIC Screen with Five Windows Open
To split the View window, choose the Split command from the View menu. The
screen is now divided into two parts. Repeat the process to restore the
original screen.
See Also
Section 14.3 "Split Command"
10.4.3 Changing the Active Window
The window that contains the cursor is referred to as the "active" window;
it is the place where text entered from the keyboard appears.
To make another window active, follow these steps:
■ Press F6 to cycle downward through the windows on the screen.
■ Press SHIFT+F6 to cycle upward.
10.4.4 Changing Window Size
You can increase or decrease the size of a window one line at a time or
expand it to fill the whole screen. To change the size of a window, first
make it the active window. Then use the following key combinations (hold
down the first key while pressing the second) to increase or decrease the
window's size. (Use the PLUS and MINUS keys on the keypad.)
Key Combination Result
──────────────────────────────────────────────────────────────────────────
ALT+PLUS (+) Expands the active window one line.
ALT+MINUS (-) Shrinks the active window one line.
CTRL+F10 Expands the active window to fill the screen, or,
if it already occupies the whole screen, returns
the active window to its former size.
If the View window is split in two when you press
CTRL+F10, pressing CTRL+F10 again restores both
windows to the screen.
──────────────────────────────────────────────────────────────────────────
10.4.5 Scrolling in the Active Window
To look at the parts of a file that do not fit within the boundaries of a
View window, you can move the text ("scroll") up, down, right, or left.
Once you reach a window's edge, press the appropriate DIRECTION key to
begin scrolling. For example, to scroll right one character at a time, go
to the rightmost character on the screen and press the RIGHT key.
Refer to Table 10.2 for information on scrolling more than one character
at a time. The rightmost column in this table shows keystrokes that you
may find more convenient if you prefer WordStar-style commands.
Table 10.2 Scrolling
WordStar-Style
Scrolling Action Keystrokes Equivalents
──────────────────────────────────────────────────────────────────────────
Beginning of line HOME CTRL+Q+S
End of line END CTRL+Q+D
Page up PGUP CTRL+R
Page down PGDN CTRL+C
Left one window CTRL+PGUP ---
Right one window CTRL+PGDN ---
Beginning of file CTRL+HOME CTRL+Q+R
End of file CTRL+END CTRL+Q+C
──────────────────────────────────────────────────────────────────────────
You can also set place markers anywhere in your program and jump between
them while editing. See Chapter 12, "Using the Editor," for more
information.
10.5 Using the Immediate Window
The Immediate window, the bottom window on the initial QuickBASIC screen,
allows direct execution of QuickBASIC statements. Use it to refine short
pieces of program code and see the effect immediately. When you are
satisfied with the results, you can copy the code into your program.
Figure 10.7 shows code being tested in the Immediate window.
File Edit View Search Run Debug Calls Options Help
DEMO2.BAS NUM:
DEMO2.BAS TOTAL:
┌─────────────────────────────── DEMO2.BAS ───────────────────────────┤↑├──
│DECLARE SUB Bounce (Hi%, Low%)
│DECLARE SUB Fall (Hi%, Low%, Del%)
│DECLARE SUB Siren (Hi%, Rng%)
│DECLARE SUB Klaxon (Hi%, Low%)
│DEFINT A-Z
│' QB2 Version of Sound Effects Demo Program
│' (works under most other BASIC compilers)
│
│' Sound effects menu
│WHILE Q$ <> "Q"
│ CLS
├─────────────────────────────── Immediate ────────────────────────────────
│LOCATE 4,5 : PRINT "TEST"
││
││
│<Shift+F1=Help> <F6=Window> <Enter=Execute Line> 00001:026
│
Code being tested
Figure 10.7 Immediate Window
You can enter up to ten separate lines in the Immediate window, then move
among them with the DIRECTION keys. Each line is limited to 256
characters. Multiple statements are permitted on one line, but each
complete statement must be separated from the next by a colon (:). When
you place the cursor on a line and press ENTER, only the statements on
that line execute.
As you write your program, you can make the Immediate window active, type
and edit statements as you would in the Edit window, then execute them
immediately. By testing your ideas before incorporating them into a larger
program, you verify that they function properly.
The Immediate window is similar to "direct mode" in BASICA, and has the
following characteristics:
■ Any statement or group of statements on a line will be executed when you
place the cursor anywhere on the line and press ENTER.
■ As many as ten lines can be entered in the Immediate window; you can
execute the lines in any order.
After you have entered ten lines, each new line scrolls the text in the
Immediate window up one line.
■ A line can have a maximum of 256 characters. Statements can be grouped
on a line, but must be separated by colons (:).
■ Each line is executed independently of all other lines in the window.
However, changes in one line can affect other lines. For example, the
following lines contain two assignments to the integer variable x%, so
the value printed by the second line corresponds to whichever assignment
line was most recently executed:
x% = 5
print x%
x% = 9
■ The Immediate window is expanded when you repeatedly press ALT+PLUS
while it is the active window. Pressing CTRL+F10 while the Immediate
window is active expands it to the full screen, but no matter how many
lines appear, only the first ten are available for use. Press CTRL+F10
again to return the window to its previous size.
■ Code written in the Immediate window is not saved to disk by the Save
command. Use the Cut or Copy commands from the Edit menu to move the
contents of the Immediate window into a View window if you want to save
them with the rest of the file.
See Also
Section 17.2, "Preventing Bugs with QuickBASIC"; Section 17.3.5,
"Immediate Window"
10.5.1 Statements Not Allowed
Most QuickBASIC statements and functions are allowed in the Immediate
window. However, an error message will appear if you use the following
QuickBASIC keywords in the Immediate window:
──────────────────────────────────────────────────────────────────────────
COMMON ELSEIF OPTION
CONST END DEF REDIM
DATA END FUNCTION SHARED
DECLARE END IF $STATIC
DEF FN END SUB STATIC
DEFtype END TYPE SUB
DIM FUNCTION TYPE
DYNAMIC $INCLUDE $DYNAMIC
──────────────────────────────────────────────────────────────────────────
──────────────────────────────────────────────────────────────────────────
NOTE
Although the END IF statement is not allowed in the Immediate window,
you can still use the single-line form of IF...THEN...ELSE there.
──────────────────────────────────────────────────────────────────────────
10.5.2 Doing Calculations
Use the Immediate window to calculate complicated expressions, then
display results with the PRINT statement. Use any of BASIC's intrinsic
functions (such as SIN or EXP) in these calculations. Similarly, you can
use the Immediate window to print the value returned by FRE(-1). This
tells you the amount of memory available after both QuickBASIC and your
program are loaded.
10.5.3 Testing Screen Output
As a program grows in length and complexity, it is useful to test your
code before incorporating it into your program. Typing code in the
Immediate window and testing it there first avoids having to run a program
from the beginning each time you want to modify a small part of code.
Examples
You can use the following lines in the Immediate window to test the
position at which output will be written to the screen:
row% = 1 : col% = 4*row% : LOCATE row%,col% : PRINT "."
By changing the value of the variable row%, then pressing ENTER, you can
position the period in the PRINT statement in different places on the
screen.
Sometimes a program can leave the output screen in an undesirable mode
when it finishes running (for example, a graphics program may end without
resetting the screen to 80-column text mode). If this happens, use the
Immediate window to put the screen in the output mode you want. For
example, the following lines restore the output screen to 80-column text
mode and close any text viewport (a restricted horizontal slice of the
screen) set in the program:
screen 0
width 80
view print
10.5.4 Invoking Procedures
You can isolate the effects of any individual SUB or FUNCTION procedure by
calling it from the Immediate window. Use the Immediate window to execute
only those statements between the SUB and END SUB or FUNCTION and END
FUNCTION statements. For example, entering the following line in the
Immediate window executes all statements in the procedure SubProgram1,
including any calls it makes to other procedures:
call SubProgram1
10.5.5 Changing the Values of Variables
Use the Immediate window to assign a new value to a variable in a running
program. Stop the program, assign the variable a new value in the
Immediate window, and continue execution. The value you assign in the
Immediate window becomes the variable's value when the program continues
running.
Example
The following steps show how you can use the Immediate window to change a
variables in a running program:
1. Type this program in the View window:
FOR i% = 0 TO 10000
LOCATE 10, 20 : PRINT i%
LOCATE 10, 27 : PRINT " and still counting"
NEXT i%
2. Use the Start command on the Run menu to start the program, then use
CTRL+BREAK to interrupt it.
3. Type
i% = 9900
in the Immediate window and press ENTER.
4. Press F5 to continue the program.
The loop now executes from 9900 to 10,000.
The Immediate window can access variable values only after those variables
have been assigned values; this occurs after statements containing the
variables have been executed in the View window. For example, suppose the
statement you just executed in the View window gave a variable called x% a
value of 3. You then enter PRINT x% in the Immediate window. The number 3
will be printed to the screen when you press ENTER.
Similarly, if the next statement to be executed in the View window is a
module-level statement, you cannot access the variables of a SUB or
FUNCTION from the Immediate window.
10.5.6 Simulating Run-Time Errors
Run-time errors are those that occur while a program is running. Each
run-time error is associated with a numeric code. If your program uses
error handling (ON ERROR statements), QuickBASIC returns this numeric code
to your program.
One way to find out which error message is associated with a given code is
to refer to Appendix I, "Error Messages," in Programming in BASIC. Another
way is to simulate the error itself. You can simulate an error by moving
to the Immediate window and entering the given number as an argument to
the ERROR statement. QuickBASIC then displays the dialog box for that
error, as if the error had actually occurred in a running program. Figure
10.8 shows an error-message dialog box on the QuickBASIC screen.
Error-message dialog box
│
File Edit View Search │Run Debug Calls Options Help
┌───────────────────────────┼─── DEMO1.BAS ───────────────────────────┤↑├──
│5 DEFINT A-Z │
│10 ' BASICA/GWBASIC Version│of Sound Effects Demo Program
│15 ' │
│20 ' Sound effect menu │
│25 Q = Z │
│30 WHILE Q >= 1 │
│35 CLS │
│40 PRINT "Sound effect┌┼──────────────────────┐
│45 COLOR 15, 0: PRINT ││ │ "ouncing"
│50 COLOR 15, 0: PRINT │ File already exists │ "alling"
│55 COLOR 15, 0: PRINT │ │ "laxon"
│60 COLOR 15, 0: PRINT ├───────────────────────┤ "iren"
│65 COLOR 15, 0: PRINT │ < OK > < Help > │ "uit"
│70 PRINT : PRINT "Sele└───────────────────────┘
│75 Q$ = INPUT$(1): Q = I Get valid key
│80 IF Q = 0 GOTO 75
│85 CLS ' Take action based on key
├─────────────────────────────── Immediate ────────────────────────────────
│error 58
││
││
│<Shift+F1=Help> <F6=Window> <Enter=Execute Line> C 00001:001
│
Error code entered in Immediate window
Figure 10.8 Simulated Run-Time Error
10.6 Using the Watch Window
The Watch window is one of QuickBASIC's advanced debugging features. It
displays variables tracked for debugging purposes. The Watch window opens
at the top of the screen when you set a watchpoint or add a watch
expression. (See Section 17.3.2, "Breakpoints and Watchpoints," and
Section 17.3.3, "Watch Expressions.")
Figure 10.9 shows the QuickBASIC screen with entries in the Watch window.
Location where
you added
the variable ┌───Variables (or expressions) Values (or conditions
│ │ │
│ File Edit │View Search Run Debug Calls Options │ Help
│TEST.BAS I:─┤1────────────────────────────────────────┤
└TEST.BAS J:─┘12───────────────────────────────────────┘
┌──────────────────────────────── TEST.BAS ───────────────────────────┤↑├──
│FOR I = 1 TO 900
│ FOR J = 1 TO 600
│ PRINT I
│ PRINT J
│ NEXT J
│NEXT I
│END
│←▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒→
├─────────────────────────────── DEMO1.BAS ───────────────────────────┤↑├──
│5 DEFINT A-Z
│10 ' BASICA/GWBASIC Version of Sound Effects Demo Program
│15 '
│20 ' Sound effect menu
│25 Q = Z
│30 WHILE Q >= 1
│35 CLS
│40 PRINT "Sound effects": PRINT
├─────────────────────────────── Immediate ────────────────────────────────
│LOCATE 4,5 : PRINT "TEST"
│
<Shift+F1=Help> <F5=Continue> <F9=Toggle Bkpt> <F8=Step> C 00004:007
Figure 10.9 Watch Window
The Watch window opens whenever you choose the Add Watch or Watchpoint
command, or when you choose Add from the Instant Watch dialog box. Add
Watch, Watchpoint, and Instant Watch are all on the Debug menu. Each Watch
window entry contains the following information:
■ Location where you added the variable.
This part of the entry names the module or procedure from which you
added an expression to the Watch window.
■ Variable or expression.
The variable or expression you want to track.
■ Value or condition.
In Figure 10.9, the variables I and J have values 1 and 12,
respectively. Since the program is currently executing in TEST.BAS and
both I and J were added to the Watch window when TEST.BAS was in the
View window (indicated by the TEST.BAS entry in front of both I and J),
both of their values appear. If they had been added from a different
location such as a procedure, then the procedure name would appear in
the Watch window and Not watchable would appear in the value location
while the program executed in TEST.BAS.
See Also
Section 17.3.4, "Watch Window"; Chapter 18, "The Debug Menu"
10.7 Using the Mouse
You can use QuickBASIC with a mouse. Terms associated with the mouse and
used in this manual include the following:
Mouse Term Description
──────────────────────────────────────────────────────────────────────────
Mouse cursor Block cursor that moves on the screen as you move
the mouse.
Click Placing the mouse cursor on an item, and pressing
and releasing the left mouse button.
Double click Placing the cursor on an item and pressing the
left mouse button twice in a row.
Drag Placing the mouse cursor at the beginning of what
you wish to select. Press the left mouse button
and hold it down. Move the pointer to the end of
your desired selection and release the button.
Use this technique to highlight words, manipulate
window sizes, and use scroll bars.
──────────────────────────────────────────────────────────────────────────
To choose commands with the mouse follow these steps:
1. Point to the menu name and click the left mouse button.
2. Point to the command you want to select and click the left mouse
button.
──────────────────────────────────────────────────────────────────────────
NOTE
Use only the left mouse button to choose QuickBASIC menus or commands.
Clicking the right mouse button is the same as pressing F1 (accessing
on-line help). For information on how to set the right mouse button to
execute your program to the line containing the mouse cursor, see
Section 20.3, "Right Mouse Command."
──────────────────────────────────────────────────────────────────────────
Table 10.3 explains mouse techniques for accomplishing other tasks.
Table 10.3 Mouse Commands
╓┌─┌────────────────────────┌────────────────────────────────────────────────╖
Task Mouse Technique
──────────────────────────────────────────────────────────────────────────
Close a menu Move the mouse cursor off the menu and click the
left button.
Make a window active Click anywhere in the window.
Expand or shrink a View Move the mouse cursor to the title bar and drag
or Immediate window the title bar up or down.
Expand the active window Click the maximize box, at the right of the title
to occupy the full bar, or double click the mouse anywhere on the
screen title bar.
Scroll text Place the cursor on the scroll box and drag it to
a position on the bar that corresponds to the
general location in the file you want.
Task Mouse Technique
──────────────────────────────────────────────────────────────────────────
general location in the file you want.
To scroll one page at a time, place the mouse
cursor in the scroll bar between the scroll box
and the top or bottom of the scroll bar and click
the left button.
To scroll one line or one character at a time,
click the scroll arrows at either end of the
scroll bars.
Select programs and Double click the file name, click the file name
files and OK in a list box (use this technique with the
Open Program, Merge, and Load File commands), or
single click to highlight the file name and press
ENTER.
Change directories Double click a directory name to view its
contents. (In most dialog boxes, directories and
Task Mouse Technique
──────────────────────────────────────────────────────────────────────────
contents. (In most dialog boxes, directories and
drives appear in a separate list to the right of
the file list.) If the current directory is a
subdirectory, two periods (. .) appear in the
list. Double click the two periods to move up one
directory level.
Display Instant Watch Press and hold the SHIFT key while clicking the
dialog box right mouse button.
──────────────────────────────────────────────────────────────────────────
──────────────────────────────────────────────────────────────────────────
NOTE
To open a program with the mouse, double click the file name in the list
box. Clicking an item with a mouse selects that item. Double clicking an
item in a list box selects the item, confirms all previous choices, and
closes the dialog box.
──────────────────────────────────────────────────────────────────────────
10.8 Using On-Line Help
QuickBASIC has an extensive on-line help system. Through on-line help, you
can get information on virtually any QuickBASIC topic, menu, command, or
keyword.
See Also
Chapter 21, "The Help Menu"
10.8.1 Help Features
QuickBASIC's on-line help consists of two parts: environment help (for
error messages, menus, and commands) and the Microsoft QB Advisor (for
language-oriented topics). Press ESC to clear either type of on-line help
from your screen.
Environment help appears in dialog boxes; the QB Advisor appears in the
Help window at the top fo the screen. The following special features are
available within the QB Advisor:
■ Hyperlinks connect related topics; they give you immediate access to all
related information on a particular topic (see Section 10.8.2).
■ Examples can be copied or pasted directly into your program. You may
resize the Help window, use commands such as PGUP and the DIRECTION
keys, and scroll. You can even use Find from the Search menu to locate
specific information within a particular help screen.
■ Placemarkers can be used. If you use a particular screen frequently, set
a placemarker there as you would in program text. Later, you can quickly
return to the same screen. (See Section 12.4, "Using Placemarkers in
Text.")
■ QuickBASIC remembers up to the last 20 hyperlinks you accessed. Rather
than repeatedly search through on-line help, you can press ALT+F1 to
trace back through as many as 20 help screens.
You can access on-line help in four ways:
1. Move the cursor to the word in your program you want help on, and press
F1.
2. Select the Help button or press F1 when a help dialog box is displayed.
3. Use hyperlinks from within Help windows to call up more information on
related topics (see Section 10.8.2).
4. Select a command from the Help menu.
10.8.2 Hyperlinks
The QB Advisor provides interconnections called "hyperlinks" between
related subjects. With a few keystrokes, you can access all of the
information and related material on a particular topic.
Hyperlinks appear at the top and bottom of the Help window between
highlighted (on monochrome monitors) or green (on most color monitors)
triangles. Any BASIC keyword also forms a hyperlink to that keyword's
on-line help.
To use a hyperlink, make the Help window active (press SHIFT+F6), and
press the TAB key to move the cursor to the hyperlink you want to
activate. Alternatively, you can enter the first letter of a hyperlink's
name and the cursor will jump to that hyperlink. Press F1 to call up the
screen associated with that hyperlink.
──────────────────────────────────────────────────────────────────────────
NOTE
Mouse users can place the mouse cursor on a hyperlink and click the
right button, provided the right button function is set to invoke
context-sensitive help (the default setting).
──────────────────────────────────────────────────────────────────────────
Figure 10.10 shows examples of hyperlinks in the PRINT Help screen. The
Remarks and Example hyperlinks provide additional remarks and examples.
Inactive hyperlink
(screen currently Hyperlinks to additional Hyperlinks to
displayed) ┌─ help on PRINT general help topics
│ │ ┌────┴────┐
│ File Edit View│ Search Run Debug Options │ │ Help
┌┼─────────────────┼── HELP: PRINT Statement QuickSCREEN ├─────────┼──┤↑├──
│└ ◄QuickSCREEN► │ ◄Details► ◄Example► ◄Contents► ◄Index►
│───────────────── └────┴──────────────┘ ─────────────────────────────────
│PRINT - a device I/O statement that outputs data on the screen
│
│Syntax
│ PRINT [expressionlist][{,|;}]
│
│ ■ If expressionlist is omitted, a blank line is printed.
│ ■ If expressionlist is included, the values of the expressions are
│ printed on the screen.
│ ■ The expressions in the list may be numeric or string expressions.
│ (String literals must be enclosed in quotation marks.)
│
│Other Uses of the PRINT Keyword
│ ┌◄PRINT USING► - to output formatted text to the screen
│ │◄PRINT #► - to output data to a sequential file
│←│▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒→
│
Hyperlinks to related statements
Figure 10.10 Help on the PRINT Statement
10.8.3 Moving in Help Windows
You can use the keyboard to move in Help windows. For example, you can use
the DIRECTION keys. You can also use the key sequences described in Table
10.4.
Table 10.4 Help Keys
╓┌─┌────────────────────────┌────────────────────────────────────────────────╖
Key Sequence Description
──────────────────────────────────────────────────────────────────────────
SHIFT+F1 Displays Help on Help
ESC Clears help from the screen
TAB Moves to next hyperlink
SHIFT+TAB Moves to previous hyperlink
Key Sequence Description
──────────────────────────────────────────────────────────────────────────
character Moves to next hyperlink starting with the letter
character
SHIFT+character Moves to previous hyperlink starting with the
letter character
PGUP Displays previous screen (if one exists) of
current topic
PGDN Displays next screen (if one exists) of current
topic
CTRL+F1 Displays help for the topic stored just after the
current help topic
SHIFT+CTRL+F1 Displays help for the topic stored just before
the current help topic
──────────────────────────────────────────────────────────────────────────
Key Sequence Description
──────────────────────────────────────────────────────────────────────────
──────────────────────────────────────────────────────────────────────────
10.8.4 Help Files
When you choose any help command, QuickBASIC searches for the appropriate
help file. QuickBASIC searches the current working directory, then the
directory specified by the Set Paths command (Options menu), and finally
any removable disks present in your system. If QuickBASIC cannot find an
appropriate file, it displays the dialog box shown in Figure 10.11. Copy
the missing file into the appropriate directory.
┌───────────────────────────────────────────────────────┐
│ │
│ File QB45QCK.HLP not found. │
│ Put the floppy disk with this file into the drive and │
│ Retry, or change your Help path in Options+Set Paths. │
│ │
├───────────────────────────────────────────────────────┤
│ < Retry > < Cancel > │
└───────────────────────────────────────────────────────┘
Figure 10.11 Dialog Box for Missing Help File
If you cannot invoke any form of on-line help, you may be missing all of
the help files; in this case, you need to check the contents of your
QuickBASIC directory or rerun the setup procedure. Or you may have
inadequate memory to display on-line help. This situation can occur if you
try to run QuickBASIC concurrently with other memory-resident files. In
this case, remove one or more memory-resident files and start QuickBASIC
again. You may also have inadequate memory if your machine doesn't meet
the minimum system requirements (see the introduction to this manual).
10.8.5 Hard-Disk System
If you use a hard disk, you installed all of the help files in a single
directory during your setup (see Chapter 1, "Setting Up Microsoft
QuickBASIC," for more information). The Set Paths command on the Options
menu specifies the directory path to the help files.
When you invoke language-oriented help, you will automatically receive the
QB Advisor.
10.8.6 Removable-Disk System
Microsoft QuickBASIC provides some language help on the same disk that
contains QuickBASIC. This file contains statement descriptions and syntax,
but not the detailed examples available in the QB Advisor.
To use the QB Advisor on a dual removable-disk system, press either the
Remarks or Example hyperlinks at the top of the screen. A dialog box asks
you to insert the Microsoft QB Advisor disk.
Once you insert the Microsoft QB Advisor disk, you can access more
detailed help on QuickBASIC's keywords. You may leave the Microsoft QB
Advisor disk in the drive until QuickBASIC prompts you for another disk.
────────────────────────────────────────────────────────────────────────────
Chapter 11 The File Menu
The File menu lets you work with files in QuickBASIC. From the File menu
you can create new files, load existing files, modify files, or remove
files. You also use the File menu to print files and exit from QuickBASIC.
The File menu has the following commands:
■ New Program. Clears any previously loaded program and lets you begin a
new program.
■ Open Program. Opens a program; lists system files and directories.
■ Merge. Merges the contents of two files (Full Menus only).
■ Save. Writes the contents of the file in the active View window to a
disk file (Full Menus only).
■ Save As. Saves the current file with the name you specify.
■ Save All. Saves all currently loaded files (Full Menus only).
■ Create File. Begins either a new program module, an include file, or a
document file as part of the current program (Full Menus only).
■ Load File. Loads an existing file──either a program module, an include
file or a document file──into memory (Full Menus only).
■ Unload File. Removes an entire file from memory (Full Menus only).
■ Print. Lets you print all or part of your program.
■ DOS Shell. Returns temporarily to the DOS command level (Full Menus
only).
■ Exit. Removes program from memory and returns to the DOS prompt.
11.1 New Program Command
The New Program command from the File menu clears all previously loaded
files so you can begin typing a completely new program. If a loaded
program contains unsaved text, QuickBASIC asks if you want to save it
before clearing it from memory.
A program contains one or more BASIC statements that QuickBASIC will
translate into instructions for your computer. BASIC programs can be
contained in a single file. However, QuickBASIC also allows you to build
programs containing multiple self-contained parts ("modules"). Each module
usually contains procedures that are used to perform specific tasks. One
such module may be called into several programs. The New Program command
creates the main module of a multiple-module program. In a single-module
program, the main module is the only module.
A program can have four types of files:
■ One main module (required)
■ Other modules
■ Include files
■ Document files (including .MAK files)
Modules can contain the following:
■ Module-level code
■ SUB procedures
■ FUNCTION procedures
──────────────────────────────────────────────────────────────────────────
NOTE
When you are writing a completely new program, use the New Program
command. When you are calling up a program that already exists on disk,
use the Open Program command.
──────────────────────────────────────────────────────────────────────────
See Also
Section 11.2, "Open Program Command"; Section 11.7, "Create File
Command"
11.2 Open Program Command
The Open Program command opens an existing program. The dialog box
displayed initially lists the files with .BAS extensions in the current
working directory. You can also list files in other directories and on
other disks on your system.
When you choose the Open Program command, the dialog box shown in Figure
11.1 appears.
Path of currently Entry determines which Symbol for next
loaded file files are displayed highest directory
┌┼────────────────────┼─────── Open Program ───────────┼───────────────────
││ ┌────────┼────────────────────────────────┼─────────────────┐
││File Name: │*.BAS │ │
││ └─────────────────────────────────────────┼─────────────────┘
│└C:\QB4.5\DEMO │
│ Files │ Dirs/Drives
│ ┌──────────────────────────────────────────────────┐ │ ┌───────────────┐
│ │ ATEST.BAS TEST.BAS ─┐ │ └─┼─.. ↑
│ │ BL.BAS TORUS.BAS │ │ │ SOURCE ─┐ ▒
│ │ DEMO1.BAS VARHELP.BAS │ │ │┌[-A-] │ ▒
│ │ DEMO2.BAS VARHELP2.BAS │ │ ┌┼┤[-B-] │ ▒
│ │ DEMO3.BAS ├─────┐ │ ││└[-C-] │ ▒
│ │ QBFORMAT.BAS │ │ │ ││ │ ▒
│ │ QCARDS.BAS │ │ │ ││ │ ▒
│ │ REMLINE.BAS │ │ │ ││ │ ▒
│ │ SORTDEMO.BAS ─┘ │ │ ││ │ ↓
│ └←▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒│▒▒▒▒▒▒▒▒▒→┘ │└─────────┼─────┘
├─────────────────────────────────────────┼─────────────┼──────────┼───────
│ < OK > < Cancel > │ < Help >│ │
└─────────────────────────────────────────┼─────────────┼──────────┼───────
│ │ │
.BAS files in current directory Drives Subdirectory
Figure 11.1 Open Program Dialog Box
If a program consists of several modules, all of the modules belonging to
the program are loaded. If a program uses include files (see Section
2.5.4.3, "Using Include Files for Declarations," and Appendix F,
"Metacommands," in Programming in BASIC), the include files are compiled,
but not loaded or displayed.
11.2.1 Specifying a File
Files are displayed in columns in the Files list box. Directories and
available drives appear in the Dirs/Drives list to the right of the Files
list. Use the DIRECTION keys or the scroll bars to scroll in either of the
list boxes. Note that the Files list box scrolls left and right, and the
Dirs/Drives list box scrolls up and down.
The Open Program dialog box provides two ways to specify the file you want
to load (see Section 10.7, "Using the Mouse," for mouse techniques). Use
either of the following two methods:
1. Type the name of the program in the text box and press ENTER.
If you enter a file name with no extension, QuickBASIC assumes your
file has the .BAS extension. If you want to load a file that has no
extension, type a period (.) immediately after the file name.
2. Press the TAB key to move to the list box, and use the DIRECTION keys
to move through the list box until the desired file is highlighted.
Then press ENTER.
You can also highlight the file name by moving to the list box and
pressing the first letter of the name of the file you want to load.
In either case, the text of the program appears in a window with the file
name in the title bar.
11.2.2 Listing Directory Contents
You can use the Open Program dialog box to list the contents of any
directory on your system. When you choose a directory name in the
Dirs/Drives list box, QuickBASIC lists all the subdirectories and .BAS
files in the directory you choose. When you enter or choose a file name
from the Files list box, that file is loaded into memory. The following
list describes several methods you can use to list contents of
directories:
Task Action
──────────────────────────────────────────────────────────────────────────
Listing all files in the current Type *.* in the text box.
directory
Listing files in root directory of Type A:*.* in the text box.
drive A
Listing all files in a subdirectory Highlight BIN in the Dirs/Drives list
named BIN box and press ENTER. Type *.* in the
text box.
Listing all files in the current Type *.BI in the text box.
directory with the .BI extension
Listing all files in the directory Type .. in the text box. Or, press a
immediately above the current DIRECTION key or the period (.) to
directory select .. if you are already in the
Dirs/Drives list box. Then type *.*
in the text box.
──────────────────────────────────────────────────────────────────────────
──────────────────────────────────────────────────────────────────────────
NOTE
The "current working directory" is the directory shown by the CD command
from DOS. In contrast, when you select a directory from a list box, you
are only listing the files it contains, not changing the current working
directory at the DOS level. If you want to change the current working
directory, make the Immediate window active, and use the CHDIR
statement.
──────────────────────────────────────────────────────────────────────────
See Also
Section 11.1, "New Program Command"; Section 11.8, "Load File Command"
11.3 The Merge Command (Full Menus Only)
The Merge command on the File menu inserts the contents of a file at the
beginning of the line the cursor is on. When you choose the Merge command
from the File menu, the dialog box shown in Figure 11.2 appears.
Path of currently Entry determines which Symbol for next
loaded file files are displayed highest directory
┌┼────────────────────┼────────── Merge ───────────────┼───────────────────
││ ┌────────┼────────────────────────────────┼─────────────────┐
││File Name: │*.bas │ │
││ └─────────────────────────────────────────┼─────────────────┘
│└C:\QB4.5\DEMO │
│ Files │ Dirs/Drives
│ ┌──────────────────────────────────────────────────┐ │ ┌───────────────┐
│ │ ATEST.BAS TEST.BAS ─┐ │ └─┼ .. ↑
│ │ BL.BAS TORUS.BAS │ │ │ SOURCE ─┐ ▒
│ │ DEMO1.BAS VARHELP.BAS │ │ │┌[-A-] │ ▒
│ │ DEMO2.BAS VARHELP2.BAS │ │ ┌┼┤[-B-] │ ▒
│ │ DEMO3.BAS ├─────┐ │ ││└[-C-] │ ▒
│ │ QBFORMAT.BAS │ │ │ ││ │ ▒
│ │ QCARDS.BAS │ │ │ ││ │ ▒
│ │ REMLINE.BAS │ │ │ ││ │ ▒
│ │ SORTDEMO.BAS ─┘ │ │ ││ │ ↓
│ └←▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒│▒▒▒▒▒▒▒▒▒→┘ │└─────────┼─────┘
├─────────────────────────────────────────┼─────────────┼──────────┼───────
│ < OK > < Cancel > │ < Help >│ │
└─────────────────────────────────────────┼─────────────┼──────────┼───────
│ │ │
.BAS files in current directory Drives Subdirectory
Figure 11.2 Merge Dialog Box
The Merge dialog box operates the same way as the Open Program dialog box.
However, the Merge command inserts the specified file into the current
file, whereas the Open Program command clears whatever is currently in
memory, then loads the program.
──────────────────────────────────────────────────────────────────────────
NOTE
QuickBASIC cannot merge binary files; the file brought in with the Merge
command must be text format.
──────────────────────────────────────────────────────────────────────────
See Also
Section 11.2, "Open Program Command," and Section 14.1, "SUBs Command,"
in this manual; Chapter 7, "Programming with Modules," and Appendix B,
"Differences from Previous Versions of QuickBASIC," in Programming in
BASIC.
11.4 Save Command (Full Menus Only)
The Save command saves the contents of the current file (the file being
displayed in the active View window) to a disk file.
If the file you are saving already has a name, Save overwrites the version
on disk. If the file does not have a name, the Save dialog box in Figure
11.3 appears to ask you for a name.
Path of
currently File name Subdirectory
loaded file │ │
┌┼────────────────────┼──┼ Save ───────────────────────┐
││ ┌────────┼──┼───────────────────────────┐ │
││File Name: │CALC.BAS │ │ │
││ └───────────┼───────────────────────────┘ │
│└C:\QB4.5\DEMO │ │
│ Dirs/Drives │ │
│ │ │
│ ┌───────────────┐ ┌──┼──────── Format ───────────┐ │
│┌┼ .. ↑ │ │ (∙) QuickBASIC - ─┐ │ │
│││ SOURCE ───────────┼──┘ Fast Load and ├───┐ │ │
│││ [-A-]─┐ ▒ │ Save ─┘ │ │ │
│││ [-B-] ├────┐ ▒ │ │ │ │
│││ [-C-]─┘ │ ▒ │ ( ) Text - ─┐ │ │ │
│││ │ ▒ │ Readable by ├──│ │ │
│││ │ ↓ │ Other Programs ┘ │ │ │
││└────────────┼──┘ └───────────────────────────┼──┘ │
├┼─────────────┼──────────────────────────────────┼────┤
││ < OK > │ < Cancel > < Help >│ │
└┼─────────────┼──────────────────────────────────┼────┘
Symbol for │ │
next highest Drives File-format options
directory
Figure 11.3 Save Dialog Box
See Also
Section 11.5, "Save As Command"; Section 11.6, "Save All Command"
11.5 Save As Command
The Save As command saves the current file with the name you specify. It
is useful for saving a file under a new name and changing the format in
which the file is saved. If you change the name, the old file still exists
with the name it had the last time it was saved.
When you choose Save As from the File menu, a dialog box like that shown
in Figure 11.3 appears. The Save As dialog box lists the existing name of
the file you want to save. Enter a new name in the text box to replace the
old name. The next time you save the file, the new file name will appear
in the text box.
The following list describes the file-format options in the Save dialog
box:
Option Purpose
──────────────────────────────────────────────────────────────────────────
QuickBASIC──Fast Load Saves a program in QuickBASIC format. A program
and Save saved this way loads faster than one saved as a
text file but can be edited only using
QuickBASIC. Because it is a non-ASCII file, you
will not be able to change it using another text
editor. This is QuickBASIC's default format for
saving a program. Files classified as document or
include files with the Create File or Load File
command cannot be saved in this format.
Text──Readable by Other Saves your file to disk as a text (ASCII) file.
Programs Text files can be read, modified, or printed by
any editor or word processing program that reads
ASCII files. Files classified as document or
include files are always stored in this format.
──────────────────────────────────────────────────────────────────────────
See Also
Section 11.4, "Save Command"; Section 11.6, "Save All Command"
11.6 Save All Command (Full Menus Only)
The Save All command saves all currently loaded files that have changed
since the last time you saved a file. A currently loaded file is one whose
name appears in the dialog box of the View menu's SUBs command. Save All
is useful when you are working with multiple files in memory.
If the main module you are saving already has a name, Save All overwrites
the version on disk. If the main module does not have a name, a dialog box
like that shown in Figure 11.3 asks you for a name. Section 11.5
explains each of the file-format options.
When you save a multiple-module program, QuickBASIC creates a special file
on your disk that contains the names of all the modules in the program.
The file is given the base name of the main module plus the extension
.MAK. QuickBASIC uses the .MAK file as a roadmap to the various program
modules the next time you load the program. For more information on .MAK
files, see Section 16.7.2.
See Also
Section 11.4, "Save Command"; Section 14.1, "SUBs Command"
11.7 Create File Command (Full Menus Only)
The Create File command on the File menu allows you to begin a new file as
part of the program currently in memory.
When you choose the Create File command from the File menu, a dialog box
appears. To create a new file, type the file name in the text box, select
the file type, and press ENTER. See Figure 11.4.
File name
│
┌────────────┼──── Create File ──────────────────┐
│ ┌────┼─────────────────────────────────┐ │
│ Name: │CALC.BAS │ │
│ └──────────────────────────────────────┘ │
│┌──┬──────────────┬───────────────┐ │
││ (∙) Module ( ) Include ( ) Document │
├┼───────────────────────────────────────────────┤
││ < OK > < Cancel > < Help > │
└┼───────────────────────────────────────────────┘
│
File-type options
Figure 11.4 Create File Dialog Box
Select the appropriate file type from the following:
╓┌─┌────────────────────────┌────────────────────────────────────────────────╖
File Type Description
──────────────────────────────────────────────────────────────────────────
Module A discrete program component. A program consists
of at least one module. When you make a program
out of several modules, each module is saved on
disk as a separate file when you save the
File Type Description
──────────────────────────────────────────────────────────────────────────
disk as a separate file when you save the
program. Modules are handy if you have long
programs or use the same groups of procedures
over and over in different programs. QuickBASIC's
smart editor checks syntax and formatting in
modules.
See Section 12.5 in this manual for information
on the smart editor. See Chapter 7 in Programming
in BASIC for more information on modules.
Include A text file whose statements are compiled into
your program when QuickBASIC encounters the
file's name following a $INCLUDE metacommand.
QuickBASIC's smart editor checks syntax and
formatting in include files as it does in
modules. Although the contents of the include
file are used in your program, the include file
itself is not a part of the program. Its name
File Type Description
──────────────────────────────────────────────────────────────────────────
itself is not a part of the program. Its name
does not appear in the .MAK file of a
multiple-module program.
Document A text file. QuickBASIC does not treat a file
opened as a document as BASIC code, so the smart
editor does not check document files for syntax
and formatting. However, you can edit a document
file with the QuickBASIC editor just as you would
with a normal word processor. Document file names
never appear in the .MAK file of a
multiple-module program.
──────────────────────────────────────────────────────────────────────────
Once you have created any of the preceding kinds of files in QuickBASIC,
you can see the file's name in the list box of the View menu's SUBs dialog
box.
While a file's name appears in this list box, you cannot load it again,
even with a different classification. For example, if you create a file as
a document, you cannot load it again as an include file until you unload
the current copy with the Unload File Command (see Section 11.9, "Unload
File Command").
──────────────────────────────────────────────────────────────────────────
NOTE
Use the Create File command to add a new module to the program currently
in memory. Create File differs from Open Program, which loads a file as
a module after unloading all other files prior to loading the program.
If no other modules are loaded when you use Create File to create a
module, it is considered the main module of the program.
──────────────────────────────────────────────────────────────────────────
See Also
Section 11.1, "New Program Command"; Section 11.2, "Open Program
Command"; Section 11.8, "Load File Command"; Section 14.1, "SUBs
Command"
11.8 Load File Command (Full Menus Only)
The Load File command on the File menu loads single program modules──as
well as include files and document files──from disk into memory. When you
choose Load File, a dialog box appears. To load a file, type the file name
in the text box, select the file type, and press ENTER. See Figure 11.5.
Path of currently File to load .BAS files in
loaded file │ current directory
┌┼────────────────────┼──────── Load File ─────┼───────────────────────────
││ ┌────────┼────────────────────────┼─────────────────────────┐
││File Name: │DEMO1.BAS │ │
││ └─────────────────────────────────┼─────────────────────────┘
│└C:\QB4.5\DEMO │
│ Files │ Dirs/Drives
│ ┌────────────────────────────────────────────┼─────┐ ┌───────────────┐
│ │ ATEST.BAS SORTDEMO.BAS ─┐ │ │ │ .. ↑
│ │ BL.BAS TEST.BAS │ │ │ │ SOURCE ▒
│ │ DEMO1.BAS TORUS.BAS │ │ │ │ [-A-] ▒
│ │ DEMO2.BAS VARHELP.BAS │ │ │ │ [-B-] ▒
│ │ DEMO3.BAS VARHELP2.BAS ├──────────┘ │ │ [-C-] ▒
│ │ QBFORMAT.BAS │ │ │ ▒
│ │ QCARDS.BAS │ │ │ ▒
│ │ REMLINE.BAS ─┘ │ │ ↓
│ └←▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒→┘ └───────────────┘
│ ┌────────────┬───────────┬────────────┐
│ │ Load as: (∙) Module ( ) Include ( ) Document
├─┼────────────────────────────────────────────────────────────────────────
│ │ < OK > < Cancel > < Help >
└─┼────────────────────────────────────────────────────────────────────────
│
File-type options
Figure 11.5 Load File Dialog Box
You must select the correct file type: Module, Include, or Document. See
Section 11.7, "Create File Command," for more details on specific file
types.
Once you have loaded any type of file into QuickBASIC, you can see the
file name in the list box of the View menu's SUBs dialog box.
While a file name appears in this list box, you cannot load it again, even
with a different classification. For example, if you load a file as a
document, you cannot load it again as an include file until you unload it
with the Unload File command. See Section 11.9 for more information on
Unload File.
If you have procedures in other modules (program files) that you want to
use in the current program, you can load those modules using Load File.
Once the file is loaded, you can reference the procedures it contains
anywhere in the current program.
Modules from other programs can be added into the program currently in
memory as follows:
1. Choose the Load File command from the File menu.
2. Select the name of the module containing procedures you want to use in
the current program.
3. Press ENTER to load the file as a module, since the Module option is
already chosen.
4. Repeat steps 1-3 for each module you want to load.
Save the program using the Save All command once all the modules are
loaded.
See Also
Section 11.1, "New Program Command"; Section 11.7, "Create File Command"
11.9 Unload File Command (Full Menus Only)
The Unload File command removes an include file, document, or entire
module from memory. After you unload a module, the disk file containing
the module still exists; however, when you save your program, the module
is no longer a part of the program.
If your program contains more than one module, the name of the unloaded
module is removed from the program's .MAK file. If you unload the main
module of a multiple-module program, QuickBASIC prompts you to set a new
main module before proceeding. Unloading a document or include file leaves
any other loaded files in memory.
When you choose the Unload File command, the dialog box shown in Figure
11.6 appears.
File to unload
┌────────── Unload File ──────────┐
│ Choose module to unload: │
│ ┌───────────────────────────┐ │
│ │ DEMO1.BAS ↑ │
│ │ DEMO2.BAS ▒ │
│ │ TEST.BAS ▒ │
│ │ ▒ │
│ │ ▒ │
│ │ ▒ │
│ │ ↓ │
│ └───────────────────────────┘ │
│ │
├─────────────────────────────────┤
│ < OK > < Cancel > < Help > │
└─────────────────────────────────┘
Figure 11.6 Unload File Dialog Box
Follow these steps to unload a file:
1. Choose the Unload File command from the File menu.
2. Select the name of the module, include file, or document that you no
longer want in the program.
3. Press ENTER.
The module is unloaded but still exists as a disk file. You can use Unload
File to unload any type of file──a program module, include file, or
document file──from memory.
See Also
Section 11.1, "New Program Command"; Section 16.7.2, "The .MAK File"
11.10 The Print Command
The Print command on the File menu lets you print selected text, text in
the active window, the entire current module, or all currently loaded
program modules. To use the Print command, your printer must be connected
to your computer's LPT1 port.
When you choose the Print command from the File menu, the dialog box shown
in Figure 11.7 opens. Select the appropriate option from the Print
options box to print your file.
Prints Prints contents of
selected text active window
│ │
┌─────────┼─ Print ─────────┼──┐
│ │ │ │
│ ( ) Selected Text │ │
│ ( ) Active Window─────┘ │
│ ( ) Current Module──────┐│
│ ( ) All Modules ││
│ │ ││
├──────────┼──────────────────┼┤
│ < OK > <│Cancel > < Help > ││
└──────────┼──────────────────┼┘
│ │
Prints all Prints module in
loaded modules active window
Figure 11.7 Print Dialog Box
11.11 DOS Shell Command (Full Menus Only)
The DOS Shell command on the File menu lets you return temporarily to the
DOS command level, where you can execute other programs and DOS commands.
QuickBASIC remains in memory so you can return to the same place in your
program, without reloading it.
QuickBASIC needs to find the COMMAND.COM file before it can execute the
Shell command. QuickBASIC looks for COMMAND.COM first in the directory
specified in the COMSPEC environment variable, then in the current
directory. See your DOS documentation for more information about
COMMAND.COM and COMSPEC.
Follow these steps to return to QuickBASIC from the DOS command level:
1. Type exit
2. Press ENTER
The QuickBASIC screen reappears as you left it.
11.12 Exit Command
The Exit command on the File menu removes QuickBASIC from memory and
returns you to the DOS prompt.
When you exit from a new or modified program that has not been saved,
QuickBASIC displays the dialog box shown in Figure 11.8.
┌──────────────────────────────────────────────────────────┐
│ │
│ One or more loaded files are not saved. Save them now? │
│ │
├──────────────────────────────────────────────────────────┤
│ ┌── < Yes > < No > < Cancel > < Help > ──┐ │
└─────┼────────────────┼──────────┼──────────────────┼─────┘
│ │ │ │
Saves the Returns to DOS Stays in Provides help on
file(s) without saving QuickBASIC the dialog box
the program environment
Figure 11.8 Exit Dialog Box
To exit from QuickBASIC after the Exit dialog box has been called up, use
one of these procedures:
1. To save the program in its current state and then exit, choose Yes or
press ENTER.
If this is a new program that you haven't named yet, QuickBASIC
displays a dialog box similar to the Save dialog box. See Section
11.4 for more information on this dialog box.
2. To return to DOS without saving the file in its current state, choose
No or type N.
To stay in the QuickBASIC environment (that is, not exit to DOS after
all), press ESC.
See Also
Section 11.5, "Save As Command"; Section 11.11, "DOS Shell Command"
────────────────────────────────────────────────────────────────────────────
Chapter 12 Using the Editor
This chapter describes how to enter and edit program text using QuickBASIC
editing commands. Before beginning this chapter, you should be familiar
with the QuickBASIC screen and the techniques described in Chapter 10,
"Getting Around in QuickBASIC."
This chapter includes information on
■ Performing simple editing functions such as entering text and moving the
cursor
■ Deleting and inserting text
■ Moving and copying blocks of text
■ Searching for and replacing characters, words, or a group of words
■ Copying text from other files
12.1 Entering Text
New characters are added to the text either by inserting or overtyping. In
"insert mode," the QuickBASIC editor inserts each new character to the
left of the cursor position. In "overtype mode," each new character
replaces the character under the cursor. You switch between insert mode
and overtype mode by pressing the INS key or CTRL+V. The cursor is a
blinking underscore in insert mode and a blinking box in overtype mode.
When typing a QuickBASIC program, you can enter a line (tell QuickBASIC
that you have completed one or more BASIC statements) either by pressing
the ENTER key at the end of the line or by moving the cursor off the line.
If the Syntax Checking command is on (Options menu, Full Menus only),
QuickBASIC checks the line for proper statement syntax.
12.2 Selecting Text
Before you can perform editing functions that manipulate blocks of text
(copying and deleting), you must indicate the portion of text you wish to
edit by selecting (highlighting) it. Selecting tells both you and the
computer which text will be changed by the next command.
Hold down the SHIFT key while using the DIRECTION keys or any of the
editing shortcut keys (see Section 10.2.2, "Using Shortcut Keys") to
select text. For example, press SHIFT+END to select everything from the
cursor to the end of a line. To remove highlighting, press any DIRECTION
key.
──────────────────────────────────────────────────────────────────────────
IMPORTANT
If you begin typing while the text is still selected, what you type
replaces the selected text.
──────────────────────────────────────────────────────────────────────────
12.3 Indenting text
Indent text to improve the readability and structured appearance of your
program. Appropriate use of indenting can aid debugging. Use the SPACEBAR
or TAB key to indent a single line of text. To indent a block of text,
select the lines you wish to indent, then press TAB.
Indenting is an integral part of well-structured programs──programs that
are highly readable, logical and self-explanatory. QuickBASIC offers
several indentation controls, listed in Table 12.1
Table 12.1 QuickBASIC Indentation Controls
Keystrokes Description
──────────────────────────────────────────────────────────────────────────
(Automatic) Indents each new line automatically, maintaining
the current indentation level.
HOME Cancels automatic indentation on a blank line and
moves cursor to the left margin.
BACKSPACE Moves indentation back one level.
CTRL+Q+S Moves cursor to the left margin of a line
containing indented text.
SHIFT+TAB Removes leading spaces for one indentation level.
If a block of text is selected, the whole block
is moved to the left.
──────────────────────────────────────────────────────────────────────────
The default tab setting is eight spaces. You can change the tab setting as
follows:
1. Choose the Display command from the Options menu.
2. Select the Tab Stops display option.
3. Enter the new tab-stop setting.
4. Press ENTER.
QuickBASIC uses individual spaces (rather than the literal tab character,
ASCII 9) to represent indentation levels. The Tab Stops option in the
Option menu's Display dialog box sets the number of spaces per indentation
level.
Some text editors use literal tab characters to represent multiple spaces
when storing text files. Refer to Appendix B, "Differences from Previous
Versions of BASIC," in Programming in BASIC if you work with files
originally created with such an editor or if you suspect that your text
editor uses literal tab characters.
See Also
Section 20.1, "Display Command"
12.4 Using Placemarkers in Text
If you are working on different parts of a large program, you can tell
QuickBASIC to remember where in the program you are working (set a
"place-marker"). This makes it possible to jump between different markers
as needed. You can set up to four placemarkers, numbered 0-3, anywhere in
your program.
Follow these steps to use placemarkers:
■ Put the cursor on the line you want to mark. Press CTRL+K and then n to
set placemarker number n.
■ Press CTRL+Q and then n to move to placemarker number n.
12.5 The Smart Editor
QuickBASIC Version 4.5 combines a text editor, a compiler, and a debugger
into a single "smart editor." The smart editor includes special features
that make it easier to enter and edit BASIC programs. When the smart
editor is on, QuickBASIC performs the following actions each time you
enter a line:
■ Checks the line for syntax errors.
■ Formats the line as needed.
■ Translates the line to executable form, if the syntax is correct. This
means that each line you enter is ready to run immediately.
12.5.1 When Is the Smart Editor On?
In most cases, you use the QuickBASIC editor to enter and edit program
text. If you start QuickBASIC and begin typing, QuickBASIC assumes that
you want to write BASIC statements and turns on the smart editor. The
smart editor is also on when you do either of the following:
■ Choose New Program or Open Program from the File menu.
■ Choose Create File or Load File from the File menu, then select the
Module or Include option in the dialog box.
You may occasionally need to edit a text file consisting of something
other than BASIC statements, such as a QuickBASIC .MAK file or document
file. For this purpose, you can turn off the smart-editor features and use
the environment as an ordinary word processor. Do this by choosing Create
File or Load File from the File menu, then selecting the Document option
in the dialog box.
12.5.2 Automatic Syntax Checking
When the smart editor is on, it checks the syntax of each line when it is
entered. A syntax error indicates that the line contains a statement that
is not meaningful to QuickBASIC. For instance, this line causes a syntax
error because the keyword GOTO is not a valid argument for the PRINT
statement:
PRINT GOTO
When an error occurs, QuickBASIC displays an error message. Press ESC or
SPACEBAR to clear the message from the screen and position the cursor
where the error occurred. You must correct syntax errors before your
program will run.
──────────────────────────────────────────────────────────────────────────
NOTE
When you clear a syntax-error message, the cursor is placed on the
statement that caused the error. Press F1 for on-line help with the
syntax of the statement.
──────────────────────────────────────────────────────────────────────────
Certain typing mistakes are not recognized as syntax errors when entered.
For example, no error message appears if you enter the following line
instead of the PRINT keyword:
pront
Although this does not look like a valid BASIC statement, QuickBASIC does
not flag the error until you try to run the program. Until then,
QuickBASIC interprets the statement as a call to a SUB procedure named
pront.
Syntax checking is always on unless you choose Create File or Load File
commands and choose the Document option. You can toggle syntax checking
off and on with the Syntax Checking command from the Options menu. A
bullet (■) appears next to the command when syntax checking is toggled on.
12.5.3 Error Messages
QuickBASIC translates statements to executable code as they are entered,
if there are no syntax errors. If there are syntax errors, QuickBASIC
displays a dialog box containing the appropriate error message. If
QuickBASIC displays an error message that puzzles you, you can get further
information. For more information on the error message, choose the Help
command button in the dialog box. To get more information on the use of
the statement that caused the error, choose OK in the dialog box and do
either of the following steps:
■ Choose the Topic command on the Help menu.
■ Press F1
Often you will see the error message Syntax error, but some error messages
are more specific. For example, suppose you enter the following line,
which is missing a file name:
OPEN, I, 1,
QuickBASIC generates the syntax-error message Expected: expression as
shown in Figure 12.1:
Incomplete statement
│
│ File Edit View Search Run Debug Options Help
┌┼─────────────────────────────── Untitled ───────────────────────────┤↑├──
│OPEN,I, 1,
│
│
│
│
│ ┌────────────────────────┐
│ │ │
│ ┌────── │ Expected: expression │ ───────┐
│ │ │ │ │
│ │ ├────────────────────────┤ │
│ │ │ < OK > < Help > │ │
│ │ └────────────────────────┘ │
│ │ │
│ │ │
│←▒▒▒▒▒▒▒▒▒▒▒▒▒▒│▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒│▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒→
├───────────────┼─────────────── Immediate ───────────────┼───── ──────────
│ │ │
│ │ │
<Shift+F1=Help>│<F6=Window> <F2=Subs> <F5=Run> <F8=Step> │ C 00001:005
│ │
Type of syntax error Provides help on the erro
Figure 12.1 Syntax Error Message
In the case above, do the following to get on-line help on the OPEN
statement:
1. Choose OK in the dialog box.
2. Place the cursor in the OPEN keyword.
3. Press F1.
The initial on-line help screen is displayed, as shown in Figure 12.2.
Different usages of OPEN
│
│ File Edit View Search Run Debug Calls Options Help
┌┼───────────── HELP: OPEN (File I/O) Statement QuickSCREEN ──────────┤↑├──
││ ◄QuickSCREEN► ◄Details► ◄Example► ◄Contents► ◄Index►
│├────────────────────────────────────────────────────────────────────────
│OPEN - a file I/O statement that enables I/O to a file or device
││
│Syntax
││ OPEN file [FOR mode1] [ACCESS access] [lock] AS [#]filenum [LEN=reclen]
││┌─
│││■ file is a string expression that specifies an optional device name,
│└┤ followed by a file name or path name
│ │■ filenum is an integer expression whose value is between 1 and 255
│ └─
│Other Uses of the OPEN Keyword
│ ◄OPEN COM► - to open a communications channel
│
│See Also GET PUT SEEK INPUT # PRINT # FREEFILE
│
├──────────────────────────────── Untitled ───────────────────────────┤↑├──
│OPEN,I,1,──────┐
│←▒▒▒▒▒▒▒▒▒▒▒▒▒▒│▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒→
├───────────────┼─────────────── Immediate ────────────────────────────────
│ │
│ │
<Shift+F1=Help>│<F6=Window> <F2=Subs> <F5=Run> <F8=Step> C 00001:003
│
Program text
Figure 12.2 Initial Help Screen on the OPEN Keyword
In the screen shown in Figure 12.2, choose the usage you are interested
in by putting the cursor anywhere on the appropriate line and pressing F1.
Notice that your program text remains visible on the screen when you are
using on-line help. To exit on-line help, press ESC.
See Also
Chapter 8, "Statement and Function Summary," and Appendix I, "Error
Messages," in Programming in BASIC.
12.5.4 Automatic Formatting
In addition to checking for syntax errors, the smart editor automatically
standardizes the format of each line as you enter it. The editor makes the
following changes:
■ Changes all BASIC keywords to uppercase letters.
■ Inserts spaces before and after all BASIC operators.
■ Keeps capitalization consistent in all references to variables or
procedures.
■ Adds punctuation where appropriate. For instance, the smart editor
inserts semicolons between consecutive items in a PRINT statement if you
do not include them yourself. It also supplies a matching final
quotation mark to the argument of a PRINT statement if you forget it.
QuickBASIC keeps track of the names of all variables and procedures in
your program and capitalizes these names consistently. It changes the
capitalization of all occurrences of a variable or procedure name to the
reflect the most recently entered version. For example, if you first name
a variable MyVar (uppercase M and V), and later enter it as myvar (all
lowercase), QuickBASIC changes all instances of MyVar to myvar.
12.6 Entering Special Characters
QuickBASIC has procedures for entering the literal representations of
special characters, including high-order ASCII characters and the literal
ASCII characters associated with control sequences. (In general, entering
such literal characters makes your programs more readable but less
portable. For portability, use the CHR$ function. See Section 9.5,
"Summary of String Processing Statements and Functions," in Programming in
BASIC.)
High-order ASCII characters are those corresponding to decimal 128-255.
You can enter them directly in your QuickBASIC program by holding down the
ALT key while you type the appropriate decimal code on the numeric keypad.
For example, holding down the ALT key while you enter 205 produces the
double-line character at the cursor.
Many of the low-order ASCII characters corresponding to decimal 1-27 are
associated with both literal characters and special actions. For example,
the ASCII character represented by ALT+25 is associated with both the
down-arrow character (<143>) and 'Y (command to delete the current line).
You may want to enter the down arrow in a PRINT statement. One way to do
this is to specify decimal 25 as the argument to the CHR$ function. See
Appendix D, "Keyboard Scan Codes and ASCII Character Codes," in
Programming in BASIC for decimal equivalents of ASCII characters. However,
you can also enter the literal character itself by using the following
method:
1. Hold down the CTRL key while pressing the letter P.
This produces the 'P character on the QuickBASIC status bar. While this
character is displayed, you can enter a CTRL-key sequence to produce
its literal character.
2. Hold down the CTRL key again, this time pressing the letter
corresponding to the literal character you want.
This enters the literal ASCII character (as opposed to the special
action of the control sequence) at the cursor.
For example, if you want to enter the down-arrow (↓) character within the
quotation marks of a PRINT statement, you can enter it as CTRL+P+Y. If you
tried to enter it as CTRL+Y or as ALT+25 while 'P was not visible on the
reference bar, your line would be deleted. Note that you cannot use this
technique for entering the characters corresponding to the following: 'J,
'L, 'M, 'U. See Appendix D, "Keyboard Scan Codes and ASCII Character
Codes," in Programming in BASIC for a complete list of the ASCII
characters.
12.7 Summary of Editing Commands
QuickBASIC's editor is designed to be flexible; it supports a keyboard
interface familiar to users of other Microsoft products such as Microsoft
Word. Many combinations of the CTRL key with other keys are familiar to
users of WordStar and similar editors. Table 12.2 summarizes all the
QuickBASIC editing commands.
Table 12.2 Editing Commands
╓┌─┌────────────────────────────────────┌──────────────────┌─────────────────╖
WordStar-Style
Keypad Keys Key Combinations
──────────────────────────────────────────────────────────────────────────
Moving Cursor
Character left LEFT CTRL+S
Character right RIGHT CTRL+D
WordStar-Style
Keypad Keys Key Combinations
──────────────────────────────────────────────────────────────────────────
Character right RIGHT CTRL+D
Word left CTRL+LEFT CTRL+A
Word right CTRL+RIGHT CTRL+F
Line up UP CTRL+E
Line down DOWN CTRL+X
First indentation level HOME ---
Column 1 of current line --- CTRL+Q+S
Beginning of next line CTRL+ENTER CTRL+J
End of line END CTRL+Q+D
Top of window --- CTRL+Q+E
Bottom of file --- CTRL+Q+X
Beginning of module/procedure CTRL+HOME CTRL+Q+R
End of module/procedure CTRL+END CTRL+Q+C
Set marker --- CTRL+K n☼
Move to marker --- CTRL+Q n☼
Inserting
Insert mode on or off INS CTRL+V
WordStar-Style
Keypad Keys Key Combinations
──────────────────────────────────────────────────────────────────────────
Insert mode on or off INS CTRL+V
Line below END+ENTER ---
Line above --- HOME CTRL+N
Contents of Clipboard SHIFT+INS ---
Tab at cursor or beginning of each TAB CTRL+I
selected line
Control character at cursorposition --- CTRL+P CTRL+key☼
Deleting
Current line, saving in Clipboard --- CTRL+Y
To end of line, saving in Clipboard --- CTRL+Q+Y
Character left BKSP CTRL+H
Character at cursor DEL CTRL+G
Word --- CTRL+T
Selected text, saving in Clipboard SHIFT+DEL ---
Selected text, not saving in DEL CTRL+G
Clipboard
Leading spaces for one indentation SHIFT+TAB ---
WordStar-Style
Keypad Keys Key Combinations
──────────────────────────────────────────────────────────────────────────
Leading spaces for one indentation SHIFT+TAB ---
level of selected lines
Copying
Save selected text to Clipboard CTRL+INS ---
Scrolling
Up one line CTRL+UP CTRL+W
Down one line CTRL+DOWN CTRL+Z
Page up PGUP CTRL+R
Page down PGDN CTRL+C
Left one window CTRL+PGUP ---
Right one window CTRL+PGDN ---
Selecting
Character left SHIFT+LEFT ---
Character right SHIFT+RIGHT ---
Current line☼ SHIFT+DOWN ---
WordStar-Style
Keypad Keys Key Combinations
──────────────────────────────────────────────────────────────────────────
Current line☼ SHIFT+DOWN ---
Line above SHIFT+UP ---
Word left SHIFT+CTRL+LEFT ---
Word right SHIFT+CTRL+RIGHT ---
Screen up SHIFT+PGUP ---
Screen down SHIFT+PGDN ---
Screen left SHIFT+CTRL+PGUP ---
Screen right SHIFT+CTRL+PGDN ---
To beginning of module/procedure SHIFT+CTRL+HOME ---
To end of module/procedure SHIFT+CTRL+END ---
──────────────────────────────────────────────────────────────────────────
────────────────────────────────────────────────────────────────────────────
Chapter 13 The Edit Menu
The Edit menu controls the functions used to build and manipulate your
program code (text). Use the Edit menu to cut, copy, and paste text, to
undo your last edit, and to create SUB and FUNCTION procedures.
The Edit menu has the following commands:
■ Undo. Reverses your last command or action, restoring the current line
to its previous state (Full Menus only).
■ Cut. Deletes selected text and places it on the Clipboard.
■ Copy. Places a copy of selected text on the Clipboard.
■ Paste. Inserts the contents of the Clipboard at the cursor.
■ Clear. Deletes selected text permanently (Full Menus only).
■ New SUB. Creates a new SUB procedure in its own window (Full Menus
only).
■ New FUNCTION. Creates a new FUNCTION procedure in its own window (Full
Menus only).
13.1 Understanding the Clipboard
The editor in QuickBASIC uses a Clipboard, which is the part of your
computer's memory used to temporarily store blocks of text you have cut or
copied. If you have used a word processor to cut, copy, and paste text,
you are familiar with the Clipboard concept.
When you use the Cut or Copy command to move, remove, or duplicate a
section of text, that text is stored in the Clipboard. You can then use
the Paste command to insert the Clipboard's contents as many times as you
like; Paste does not alter the contents of the Clipboard. But any time you
use the Cut or Copy command, the contents of the Clipboard are replaced by
new contents.
13.2 Undo Command (Full Menus Only)
The Undo command on the Edit menu reverses any changes made to the current
line. Once the cursor moves off the line, however, Undo cannot restore the
line to its previous state.
Undo works on the current line immediately after you make changes to it.
Choosing Undo on an unaltered line has no effect.
──────────────────────────────────────────────────────────────────────────
NOTE
Undo cannot restore text deleted with CTRL+Y, which removes an entire
line. However, a copy of the line is placed on the Clipboard, so you can
restore it with the Paste command.
──────────────────────────────────────────────────────────────────────────
Shortcut Key
ALT+BKSP
13.3 Cut Command
The Cut command removes selected text from the screen and places it on the
Clipboard. When no text is selected, the Cut command is not available.
Use Cut and Paste together to relocate lines or blocks of text as follows:
1. Select the text you wish to move (it may be as many lines as you wish).
2. Choose the Cut command from the Edit menu.
3. Move the cursor to the point where you wish to insert the text.
4. Choose the Paste command from the Edit menu.
You can use this sequence to move entire blocks of a program from one
section to another, reducing the time it takes you to write new programs.
──────────────────────────────────────────────────────────────────────────
NOTE
The Clipboard contains only the most recently cut or copied text.
──────────────────────────────────────────────────────────────────────────
Shortcut Key
SHIFT+DEL
See Also
Section 13.4, "Copy Command"; Section 13.5, "Paste Command"; Section
13.6, "Clear Command"
13.4 Copy Command
The Copy command places a copy of selected text on the Clipboard, leaving
the original text unchanged. Copying replaces any previous contents on the
Clipboard.
Use the Copy and Paste commands together to duplicate sections or lines of
program code. For example, you can use the following sequence to speed the
creation of similar SUB procedures:
1. Select the text you wish to duplicate (it may be as many lines as you
wish).
2. Choose the Copy command from the Edit menu.
3. Move the cursor to the point at which you wish to insert the text.
4. Choose the Paste command from the Edit menu.
5. Customize the copied text for a new line, procedure or section of
program text.
──────────────────────────────────────────────────────────────────────────
NOTE
The Clipboard contains only the most recently cut or copied text.
──────────────────────────────────────────────────────────────────────────
Shortcut Key
CTRL+INS
See Also
Section 13.3, "Cut Command"; Section 13.5, "Paste Command"
13.5 Paste Command
The Paste command inserts a copy of the Clipboard's contents to the right
of the cursor.
Paste works only when the Clipboard contains text. If you have text
selected, the Paste command replaces the selected text with the contents
of the Clipboard. If no text is selected, Paste inserts the contents of
the Clipboard to the right of the cursor, or above the cursor if the
Clipboard contents exceed one line.
Shortcut Key
SHIFT+INS
See Also
Section 13.3, "Cut Command"; Section 13.4, "Copy Command"
13.6 Clear Command (Full Menus Only)
The Clear command completely removes selected text from your file.
Cleared text is not transferred onto the Clipboard and cannot be replaced
by using the Paste command. Pressing the DEL key without text selected
removes the character to the right of the cursor.
──────────────────────────────────────────────────────────────────────────
WARNING
Use the Clear command with care; you can restore cleared text only by
using the Undo command immediately.
──────────────────────────────────────────────────────────────────────────
Shortcut Key
DEL
See Also
Section 13.2, "Undo Command"; Section 13.3, "Cut Command"
13.7 New SUB Command (Full Menus Only)
The Edit menu's New SUB command creates and names a new SUB procedure as
part of the module in the active window. The next time you save your
program, all new procedures are added to the program's module.
SUB procedures can be defined in the main module or other modules, and can
be moved from one module to another by using the SUBs command from the
View menu.
Use SUB procedures for repetitive operations, including ones which
manipulate information (arguments) you give the SUB. For example, you
might define a SUB procedure CenterText, which centers text on the screen.
If you enter the following line in your program:
CALL CenterText("Hourly wage")
the phrase Hourly wage appears in the center of your screen (the actual
SUB code is omitted here).
──────────────────────────────────────────────────────────────────────────
IMPORTANT
A procedure name can appear only once in a program. An error occurs if
the same name appears more than once.
──────────────────────────────────────────────────────────────────────────
See Also
Chapter 5, "The QCARDS Program," in this manual; Chapter 2, "SUB and
FUNCTION Procedures," in Programming in BASIC.
13.7.1 Creating a New SUB Procedure
Create a new SUB procedure by following these steps:
1. Choose New SUB from the Edit menu. A dialog box appears.
2. Type the name for the new SUB procedure in the text box, as shown in
Figure 13.1.
New SUB name
│
┌─────────┼── New SUB ─────────────┐
│ ┌─┼──────────────────────┐ │
│ Name: │Initvar │ │
│ └────────────────────────┘ │
│ │
├──────────────────────────────────┤
│ < OK > < Cancel > < Help > │
└──────────────────────────────────┘
Figure 13.1 New SUB Dialog Box
3. Press ENTER.
The New SUB command opens a new window with the SUB and END SUB statements
already in place, ready for you to enter the procedure. When you complete
the procedure, use the SUBs command from the View menu to return to the
module-level code, another procedure, or another module.
Note that if you type SUB subname, QuickBASIC starts the procedure
immediately, bypassing the need to open the menu or dialog box.
When you start a new "procedure" (the collective term for SUB and FUNCTION
procedures) either by typing SUB or FUNCTION followed by the procedure
name or by using the New SUB or New FUNCTION command from the Edit Menu,
QuickBASIC displays the procedure in the View window.
13.7.2 Default Data Types for Procedures
Data type, determined by a DEFtype statement, refers to the type of data a
particular range of names will have. The DEFtype statement is a generic
term that collectively refers to the data definition statements DEFINT
(define integer), DEFSNG (define single precision), DEFDBL (define double
precision), DEFLNG (define long integer), and DEFSTR (define string). A
range of letters follows the DEFtype statement, indicating the range of
names affected by the DEFtype statement. For example, DEFDBL M-Q defines
all variables with names beginning with letters in the range M-Q to be
double precision.
In a new procedure, QuickBASIC automatically inserts a DEFtype statement
at the top of the View window, ahead of the line containing the SUB
keyword:
DEFtype letter1-letter2
SUB SubName
END SUB
or
DEFtype letter1-letter2
FUNCTION FunctionName
END FUNCTION
In the preceding example, letter1 and letter2 indicate the letter range
the DEFtype statement affects. Note that you may omit letter2 if you want
to define only a single letter as a specific data type.
Which DEFtype is automatically added to the procedure depends on whether
there are DEFtype statements at the module level. If there are no DEFtype
statements in the main module, QuickBASIC creates the procedure without a
DEFtype statement, and the new procedure defaults all variables to single
precision. If there are one or more DEFtype statements at the module
level, QuickBASIC includes all DEFtype statements other than DEFSNG in the
new procedure. Any variable that falls outside of the letter range
indicated by any of the other DEFtype statements defaults to single
precision.
13.7.3 Changing a Procedure's Default Type
If QuickBASIC inserts a DEFtype statement you do not want, you can remove
it (in which case the default for that procedure becomes single
precision), or you can change it by overtyping.
When you have no DEFtype statements in your main module, QuickBASIC omits
the DEFtype statement in new procedures (and procedure variables default
to single precision). You can add new DEFtype statements to the procedure
by placing them in front of the SUB or FUNCTION statement (in insert mode)
and pressing ENTER.
13.7.4 Saving and Naming Procedures
When you save a program, QuickBASIC creates a declaration for each
procedure at the beginning of the module containing the procedure. A
declaration consists of the DECLARE keyword, followed by the SUB or
FUNCTION keyword, then the name of the procedure, and a list of its formal
parameters.
Procedures are not saved as independent files the way modules are.
Therefore procedure names are governed by the naming conventions of
QuickBASIC rather than DOS. They are saved within the module in which they
are created, or to which they are moved.
The rules for naming procedures are the same as those for naming
variables. Procedure names can be any valid BASIC name up to 40 characters
long. They must be unique. If you give a procedure the same name as a
variable, the error message Duplicate definition appears.
See Also
Section 13.8, "New FUNCTION Command"; Section 14.1, "SUBs Command"
13.8 New FUNCTION Command (Full Menus Only)
The New FUNCTION command defines (creates and names) a new FUNCTION
procedure as a part of the module or program in the active window. When
you save the module, any new procedures become part of that module.
Create your own FUNCTION procedures whenever you repeatedly calculate
similar quantities. For example, you might define a FUNCTION procedure
Volume (X) that calculates the volume of a sphere of radius X. Your
program then finds the volume of a sphere of any radius very easily:
SphereVol = Volume (rad) ' find volume of a sphere of
' radius rad
QuickBASIC sets the value of X equal to rad when it calculates the volume
of the sphere. If you need to calculate the volume of a sphere several
times, such a FUNCTION procedure could save you space, time, and debugging
efforts.
──────────────────────────────────────────────────────────────────────────
IMPORTANT
A procedure name can appear only once in a program. An error occurs if
the same name appears more than once.
──────────────────────────────────────────────────────────────────────────
You can define a new FUNCTION procedure by following these steps:
1. Choose New FUNCTION from the Edit menu. A dialog box appears.
2. Type the name for the new FUNCTION procedure in the text box. See
Figure 13.2.
New FUNCTION name
│
┌─────────┼ New FUNCTION ──────────┐
│ ┌─┼──────────────────────┐ │
│ Name: │Cube │ │
│ └────────────────────────┘ │
│ │
├──────────────────────────────────┤
│ < OK > < Cancel > < Help > │
└──────────────────────────────────┘
Figure 13.2 New FUNCTION Dialog Box
3. Press ENTER.
QuickBASIC opens a new window with the FUNCTION and END FUNCTION
statements already in place. When you complete the FUNCTION procedure, use
the SUBs command from the View menu to return to the previous module.
Keyboard Shortcut
Type FUNCTION followed by the name of the new procedure to perform steps
1-3 in the previous list automatically.
See Also
Chapter 5, "The QCARDS Program"; Section 13.7.2, "Default Data Types for
Procedures"; Section 13.7.3, "Changing a Procedure's Default Type";
Section 13.7.4, "Saving and Naming Procedures"; Section 14.1, "SUBs
Command." Also see Chapter 2, "SUB and FUNCTIONS Procedures," in
Programming in BASIC."
────────────────────────────────────────────────────────────────────────────
Chapter 14 The View Menu
The View menu gives the available options for viewing program components.
You also use the View menu to move SUB and FUNCTION procedures, modules,
include files, and document files in and out of the View window for
viewing and editing.
The View menu includes the following commands:
■ SUBs. Moves procedures, modules, include files, and document files into
and out of windows and moves procedures among modules.
■ Next SUB. Places the next procedure (alphabetical by name) in the active
window (Full Menus only).
■ Split. Divides the View window horizontally (Full Menus only).
■ Next Statement. Moves the cursor to the next statement to be executed
(Full Menus only).
■ Output Screen. Toggles the screen display between the program output and
the QuickBASIC editor.
■ Included File. Loads referenced include files for viewing and editing
(Full Menus only).
■ Included Lines. Displays the contents of referenced include files for
viewing only.
14.1 SUBs Command
The SUBs command lets you select among the currently loaded files, their
procedures (SUB and FUNCTION), include files, and document files. When you
choose a file or procedure, QuickBASIC displays it in the View window.
The SUBs dialog box controls file and procedure handling.
To use the SUBs command, follow these steps:
1. Choose the SUBs command from the View menu. The SUBs dialog box
appears, as shown in Figure 14.1.
Procedures are indented Modules are listed Retains active wi
beneath their modules in uppercase letters and places select
│ │ item in new windo
│ │ │
┌┼──────────────────────────────┼── SUBs ─────────────────┼─────────────
││ │ │
││Choose program item to edit │ │
││┌─────────────────────────────┼─────────────────────────┼─────────────
│││ DEMO1.BAS ──────┤ │
│││ DEMO2.BAS ──────────────────┤ │
│││ ┌Bounce │ │
│└┼──┤Fall │ │
│ │ │Klaxon │ │
│ │ └Siren │ │
│ │ TEST.BAS ───────────────────┘ │
│ │ │
│ │ │
│ └←▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒│▒▒▒▒▒▒▒▒▒▒▒▒▒
│┌DEMO1.BAS is the Main Module │
││ │
││ < Edit in Active > < Edit in Split > ───────┘ < Cancel >
├┼──────────────────────────────────────────────────────────────────────
││ < Delete >──┐ < Move > ┌──< Help >
└┼────────────────┼──────────────────────┼──────────────────┼───────────
│ │ │ │
Describes Unloads a module Places procedure Moves procedur
item in from memory or in active window from one modul
highlighted
box
Figure 14.1 New SUBs Dialog Box
2. Highlight the module, procedure, or include file you want to work with
by pressing the DIRECTION keys. Then you can do one of the following:
■ Choose the Edit in Active button to place your selection in the active
window.
■ Choose the Edit in Split button to split the window horizontally; the
lower (active) window displays the new selection and the upper window
contains the contents of the previous window. Use F6 to cycle down
through the windows or SHIFT+F6 to cycle up. To close the extra window
choose the Split command from the View menu again.
■ Choose the Move button to move the selected procedure to a different
module. A dialog box appears with a list of destination modules. See
Figure 14.2. (Moving a procedure in a single-module program has no
effect.)
Current destination module
│
┌┼─────────────────────────────────┐
││ Choose destination module: │
││ ┌────────────────────────────┐ │
││ │ DEMO1.BAS ↑ │
│└─┼ TORUS.BAS ▒ │
│ │ ▒ │
│ │ ▒ │
│ │ ▒ │
│ │ ↓ │
│ └────────────────────────────┘ │
│ │
├──────────────────────────────────┤
│ < OK > < Cancel > < Help > │
└──────────────────────────────────┘
Figure 14.2 Move Dialog Box
■ Choose the Delete button to remove the selected procedure completely
from the module. (Note that deleting a module removes that module and
all of its associated procedures from memory but keeps the module on
disk.)
■ Choose Cancel to return to the previous active window.
■ Choose Help for more information on using the SUBs dialog box.
You are now ready to work with the module, procedure, or include file you
selected.
Shortcut Key
F2
See Also
Section 11.9, "Unload File Command"; Section 14.2, "Next SUB Command";
Section 16.7, "Set Main Module Command"
14.2 Next SUB Command (Full Menus Only)
The Next SUB command displays the contents of the next procedure
(alphabetically by name) in the active window. If the current module
contains no procedures, choosing Next SUB has no effect. You may cycle
either forward to the next procedure of backward to the previous one.
Next SUB is of particular value when working with modules that contain
only a few procedures. For programs with many procedures, the SUBs command
is generally faster for moving between program parts.
Shortcut Keys
SHIFT+F2 (forward) and CTRL+F2 (backward)
See Also
Section 14.1, "SUBs Command"
14.3 Split Command (Full Menus Only)
The Split command divides the View window horizontally, allowing you to
work with two parts of a program simultaneously.
To use the Split command follow these steps:
1. Choose Split from the View menu.
2. Press F6 to cycle down through the windows, making the different
windows active, or SHIFT+F6 to cycle up through the windows.
3. Choose Split again to fill the screen with the active window and close
the inactive window.
You can increase or decrease the size of a window or expand it to fill the
entire screen. To change the size of a window, make it the active window
and use the following key combinations (use the PLUS and MINUS keys on the
numeric keypad):
Key Combination Result
──────────────────────────────────────────────────────────────────────────
ALT+PLUS (+) Expands the active window one line.
ALT+MINUS (-) Shrinks the active window one line.
CTRL+F10 Expands the active window to fill the screen. If
it already fills the screen, the window is
returned to its former size.
──────────────────────────────────────────────────────────────────────────
See Also
Chapter 10, "Getting Around in QuickBASIC"; Section 14.1, "SUBs Command"
14.4 Next Statement Command (Full Menus Only)
The Next Statement command places the cursor at the next statement to be
executed but does not execute the statement.
The Next Statement command is typically used after pausing a program for
debugging purposes; it allows you to see which statement the Continue
command will execute first when you choose it. Next Statement is useful
after moving around in a suspended program to return to the original point
of suspension.
See Also
Section 15.1, "Find Command"; Section 16.3, "Continue Command"; Chapter
18, "The Debug Menu"
14.5 Output Screen Command
The Output Screen command causes QuickBASIC to switch between the
environment and output screens created by your program.
This command is functional at any time during editing, but is most useful
after the program sends data to the screen. For example, when you run a
program that has screen output, QuickBASIC prints the message
Press any key to continue
on the bottom of the output screen when the program ends. After returning
to the QuickBASIC editor, you can switch back and forth between the editor
and output screens by choosing the Output Screen command. This allows you
to refer to previous output while editing or debugging your program.
Shortcut Key
F4
14.6 Included File Command (Full Menus Only)
The Included File command loads a file referenced with the $INCLUDE
metacommand for viewing and editing.
When the cursor is on a $INCLUDE metacommand line, choosing the Included
File command loads the text of the include file into the active window for
editing. QuickBASIC keeps the text of include files separate from the rest
of the program text. This is similar to the way in which the text of SUB
or FUNCTION procedures is separated from other program text. However,
QuickBASIC considers an include file separate from the rest of the
program.
You may wish to edit an include file without moving the cursor from the
line in your program containing the $INCLUDE metacommand. To do so, follow
these steps:
1. Split the screen with the Split command from the View menu.
2. Choose the Load File command from the File menu to load the include
file. Be sure to select the Include option.
3. Edit the include file.
4. Choose Save from the File menu to save any changes made to the include
file.
5. Press F6 to move back to the program in the other View window.
6. Choose the View menu's Split command again to close the extra window.
Save the include file to incorporate your changes. QuickBASIC prompts you
if you forget.
14.6.1 Nesting Include Files
You can have any number of $INCLUDE metacommands in a program. However,
the "nesting" of include files is limited.
Nesting occurs when a $INCLUDE metacommand appears within another include
file. Include files can be nested up to five levels. If you have a
circular reference in an include file (that is, a $INCLUDE metacommand
that references itself or a file in which it is referenced), you get the
error message Too many files when you try to run your program.
14.6.2 Finding Include Files
When QuickBASIC processes a $INCLUDE metacommand, it searches first for
the include file in any directory specified in the metacommand, then the
working directory, and finally any include-file directory indicated by the
Set Paths command. If you refer to a directory in the $INCLUDE metacommand
itself, you need to include a full or relative path name. For example, the
following directs QuickBASIC to look for the include file named
declares.bi in the directory c:include:
' $INCLUDE: 'C:includedeclares.bi'
This could also be specified with a relative path, as in the following
line:
' $INCLUDE: '..includedeclares.bi'
Although any extension, including .BAS, is legal for files incorporated
into your program with the $INCLUDE metacommand, it is recommended that
include files use some unique extension (such as .BI) to avoid confusion
with program modules.
See Also
Section 14.7, "Included Lines Command"; Section 20.2, "Set Paths
Command"
14.7 Included Lines Command
The Included Lines command lets you view, but not edit, the contents of
referenced include files. This command is a toggle; a bullet (■) appears
next to the option when it is on. Choosing it again turns it off.
The Included Lines command lets you look at the include file's contents,
which appear in high-intensity video beneath the appropriate $INCLUDE
metacommand. Although you can scroll around in the include file after
choosing Included Lines, you cannot edit the include file as long as this
option is on. If you try to edit the include file while Included Lines is
on, a dialog box appears and asks if you want to edit the include file. If
you do, QuickBASIC loads the file into memory and places its text in the
active View window.
If you try to edit the program file while the Included Lines command is
on, a dialog box appears asking if you want to turn the Included Lines
command off. If you press ENTER, the include file disappears, and you can
then edit the source file in the usual way.
For editing files referenced with the $INCLUDE metacommand, use the
Included File command or the Load File command on the File menu (remember
to choose the Include option).
See Also
Section 14.6, "Included File Command"
────────────────────────────────────────────────────────────────────────────
Chapter 15 The Search Menu
The Search menu lets you find specific text──"target" text──anywhere in a
program, and replaces it with new text. The Search menu has several uses,
particularly in long or complex programs. For instance, to move quickly to
a distant part of your program, you can search for a line label or other
identifying text you know to be in that section.
The Search menu has the following commands:
■ Find. Searches for and locates the nearest occurrence of designated
text.
■ Selected Text. Searches for text that matches the currently highlighted
text (Full Menus only).
■ Repeat Last Find. Locates the next occurrence of the text specified in
the previous search (Full Menus only).
■ Change. Searches for and then replaces target text with new text.
■ Label. Searches for a specified line label (Full Menus only).
15.1 Defining Target Text
Search procedures require you to specify your target text──the text you
want to search for. QuickBASIC uses several methods to specify target
text. The word containing the cursor or closest to the left of the cursor
becomes the default target text. If the cursor is on a blank line, the
target text from the previous search becomes the default. You can alter
default target text by typing new text in the Find or Change dialog boxes.
All searches begin at the cursor and move forward. If QuickBASIC reaches
the end of the active window without finding a match, it returns to the
top of the document and continues the search until it either locates the
text or reaches the original cursor location. You can also select options
that extend the search to the entire current module or all modules loaded.
15.2 Find Command
The Find command searches for and places the cursor on specified text. The
text may consist of a single character, a word, or any combination of
words and characters.
Enter the text you want to find in the text box of the Find dialog box,
shown in Figure 15.1.
Text to find
│
┌──────────────┼────────────── Find ────────────────────────────┐
│ ┌─┼────────────────────────────────────────────┐ │
│ Find What: │sum │ │
│ └──────────────────────────────────────────────┘ │
│ │
│ ┌ ┌─────────────────────────┐ │
│┌┤[ ] Match Upper/Lowercase │ ( ) 1. Active Window ─┐ │ │
│││[ ] Whole Word │ (∙) 2. Current Module ├─┼─┐ │
││└ │ ( ) 3. All Modules ─┘ │ │ │
││ └─────────────────────────┘ │ │
├┼────────────────────────────────────────────────────────────┼─┤
││ < OK > < Cancel > < Help > │ │
└┼────────────────────────────────────────────────────────────┼─┘
│ │
Search restrictions Search options
Figure 15.1 Find Dialog Box
The dialog box also controls the extent of the search (whether the search
includes the active window, the current module, or all files currently
loaded in QuickBASIC) and any restrictions on the search.
To perform a search, do the following:
1. Choose Find from the Search menu. A dialog box appears.
2. Enter the text you want to find in the Find What text box. (Any default
target text appears highlighted.)
3. Select any search option buttons by pressing the TAB and DIRECTION
keys. (See Table 15.1 for a list of available options.)
4. Set any restrictions by pressing the TAB key to select the option and
SPACEBAR to turn the option on or off. (See Table 15.2 for a list of
restrictions.)
5. Press ENTER to begin the search.
If it cannot locate the target text, QuickBASIC displays the message Match
not found and leaves the cursor where it was when you started the search.
Press ENTER or ESC to remove the message and continue.
The options available with search commands are listed in the following
table:
Table 15.1 Search Options
Option Description
──────────────────────────────────────────────────────────────────────────
Active Window Searches only in the current, active window
Current Module Searches only in the current module (including
procedures)
All Modules Searches all parts of all loaded files
──────────────────────────────────────────────────────────────────────────
The following table lists the restrictions you can set with the Find
command:
Table 15.2 Search Restrictions
Restriction Description
──────────────────────────────────────────────────────────────────────────
Match Upper/Lowercase Searches for text that matches exactly. For
example, if CHR is the specified text, the Match
Upper/Lowercase option finds CHR but not Chr.
Whole Word Locates the target as a separate word. Whole
words include words surrounded by spaces,
punctuation marks, or other characters not
considered parts of words. Word parts include
A$MIZ, a$MIz, 0$MI9, and !, #, $, %, and &
(commonly used in declarations). For example, a
whole word search for CHR would locate CHR: but
not CHR$ or CHARACTER.
──────────────────────────────────────────────────────────────────────────
See Also
Section 15.5, "Change Command"
15.3 Selected Text Command (Full Menus Only)
The Selected Text command on the Search menu searches for text that
matches text selected in the active window.
Follow these steps to use the Selected Text command:
1. Select the text you want to find. The text must fit on one line (256
characters).
2. Choose the Selected Text command from the Search Menu.
QuickBASIC highlights the next occurrence of the selected text and puts
the cursor at the first character of the string. If there are no other
occurrences, the screen remains the same.
Shortcut Key
CTRL +<FS>
See Also
Section 15.2, "Find Command"
15.4 Repeat Last Find Command (Full Menus Only)
The Repeat Last Find command searches for the next occurrence of the text
specified in the last search. Text specified in the previous Find or
Change command becomes the target text of a Repeat Last Find search.
If you have not used the Find or Change commands and you choose the Repeat
Last Find command, QuickBASIC uses the word containing the cursor, or the
word nearest to the left of the cursor, as the default target text.
Shortcut Key
F3
See Also
Section 15.2, "Find Command"
15.5 Change Command
The Change command searches for one text string and replaces it with
another. Either string may consist of a single character, a single word,
or any combination of words and characters.
Use the Change dialog box, shown in Figure 15.2, to enter the target
text, the replacement text, and search attributes and restrictions.
Text to change Replacement text
│ │
┌──────────────────┼───┼───── Change ───────────────────────────┐
│ ┌─────┼───┼────────────────────────────────────┐ │
│ Find What: │sum ─┘ │ │ │
│ └─────────┼────────────────────────────────────┘ │
│ ┌─────────┼────────────────────────────────────┐ │
│ Change To: │total ───┘ │ │
│ └──────────────────────────────────────────────┘ │
│ │
│ ┌ ┌─────────────────────────┐ │
│┌┤[ ] Match Upper/Lowercase │ ( ) 1. Active Window ─┐ │ │
│││[ ] Whole Word │ (∙) 2. Current Module ├─┼─┐ │
││└ │ ( ) 3. All Modules ─┘ │ │ │
││ └─────────────────────────┘ │ │
├┼────────────────────────────────────────────────────────────┼─┤
││ < Find and Verify > < Change All > < Cancel > < Help > │ │
└┼────────────────────────────────────────────────────────────┼─┘
│ │
Search restrictions Search options
Figure 15.2 Change Dialog Box
To change text, do the following:
1. Choose Change from the Search menu.
2. Type the text you want to replace in the Find What text box.
3. Type the replacement text in the Change To text box.
4. Select any search options you desire (see Table 15.1).
5. Set any search restrictions (see Table 15.2).
6. Choose Find and Verify or Change All to begin replacing text, or Cancel
to cancel the command.
■ Find and Verify finds the target text, then displays four more
buttons: Change, Skip, Cancel, and Help. Change executes the change,
Skip searches for the next occurrence (without making any changes),
and Cancel stops the search and returns to the point at which the
search began. Help provides more information about the Find and
Verify dialog box. See Figure 15.3.
Stops search and
Executes the change returns to active window
│ │
┌────────┼──────────────────────┼───────────────────┐
│ │ │ │
├────────┼──────────────────────┼───────────────────┤
│ < Change > < Skip > < Cancel > < Help > │
└────────────────────┼───────────────────────┼──────┘
│ │
Searches for Provides help on change
next occurrence
Figure 15.3 Change, Skip, Cancel Dialog Box
■ Change All finds and replaces all occurrences of the target text
without asking for confirmation.
■ Cancel returns control to the active window.
■ If it cannot locate the target text, QuickBASIC displays the message
Match not found
Press ENTER to remove the message and continue.
──────────────────────────────────────────────────────────────────────────
IMPORTANT
The Undo command on the Edit menu cannot undo a change made with the
Change command. Use particular caution with Change All since this
command can drastically alter your program.
──────────────────────────────────────────────────────────────────────────
See Also
Section 15.2, "Find Command"
15.6 Label Command (Full Menus Only)
The Label command searches for a line label. Since line labels require a
colon, QuickBASIC searches for your text-box entry plus a colon.
QuickBASIC searches only for the target text followed by a colon. For
example, if you enter mylab as your target text in the Label dialog box,
QuickBASIC searches for mylab:
The Label dialog box is shown in Figure 15.4.
Name of label
│
┌────────────────────┼────── Label ─────────────────────────────┐
│ ┌───────┼──────────────────────────────────────┐ │
│ Find What: │MyLab ─┘ │ │
│ └──────────────────────────────────────────────┘ │
│ │
│ ┌ ┌─────────────────────────┐ │
│┌┤[ ] Match Upper/Lowercase │ ( ) 1. Active Window ─┐ │ │
│││[X] Whole Word │ (∙) 2. Current Module ├─┼─┐ │
││└ │ ( ) 3. All Modules ─┘ │ │ │
││ └─────────────────────────┘ │ │
├┼────────────────────────────────────────────────────────────┼─┤
││ < OK > < Cancel > < Help > │ │
└┼────────────────────────────────────────────────────────────┼─┘
│ │
Search restrictions Search options
Figure 15.4 Label Dialog Box
See Also
Section 15.2, "Find Command"; Section 15.3, "Selected Text Command"
────────────────────────────────────────────────────────────────────────────
Chapter 16 The Run Menu
The Run menu contains commands that let you control program execution
within QuickBASIC, compile stand-alone programs with the BC compiler, and
create Quick libraries. This allows you to create and debug your program
within QuickBASIC, then compile your running program for greater speed. As
stand-alone applications, your programs can be run from the DOS command
line──without being loaded into QuickBASIC. You also use the Run menu to
define main program modules.
The Run menu has the following commands:
■ Start. Runs the currently loaded program from within the QuickBASIC
environment.
■ Restart. Resets all variables to zero and all string expressions to
zero-length strings, and prepares to execute the first statement in the
program.
■ Continue. Resumes execution of a suspended program at the statement
where execution was stopped (does not reset variables or expressions).
■ Modify COMMAND$. Accesses the string passed to a program via the
COMMAND$ function from the DOS command line (Full Menus only).
■ Make EXE File. Creates an executable file from the currently loaded
program.
■ Make Library. Creates a custom Quick library (Full Menus only).
■ Set Main Module. Sets a selected module as the main module (Full Menus
only).
16.1 Start Command
The Start command on the Run menu runs the currently loaded program.
Once you start a program you may stop it by pressing CTRL+BREAK. To
continue running the program from where you stopped, choose the Continue
command from the Run menu. To start from the beginning again, choose
Start.
──────────────────────────────────────────────────────────────────────────
NOTE
If you load a BASICA program, some statements require modification to
run properly with QuickBASIC. They are described in Appendix
A,"Converting BASICA Programs to QuickBASIC," in Programming in BASIC.
──────────────────────────────────────────────────────────────────────────
Shortcut Key
SHIFT+F5
See Also
Section 16.2, "Restart Command"; Section16.3, "Continue Command";
Section 16.5, "Make EXE File Command"
16.2 Restart Command
The Restart command on the Run menu resets all variables to zero and all
string expressions to zero-length strings. It prepares your program to
run, but does not begin execution. Restart also highlights the first
executable statement in your program.
Restart is generally used during debugging when you do not want to
continue execution. It is especially useful if you want to restart a
program from the beginning and step through program code (using the F8
key) prior to the first breakpoint or watchpoint. (Breakpoints and
watchpoints are devices used to halt program execution. See Section 18.3,
"Watchpoint Command," and Section 18.8, "Toggle Breakpoint Command.") If
you want to execute to the first breakpoint or watchpoint without stepping
through code, use the Start command.
To run your program from a specific location without resetting any
variables or expressions, use the Continue command on the Run menu or the
Set Next Statement command on the Debug menu followed by the Continue
command.
See Also
Section 16.1, "Start Command"; Section 16.3, "Continue Command"; Section
18.11, "Set Next Statement Command"
16.3 Continue Command
The Continue command continues an interrupted program from the last
statement executed or starts a program from the beginning.
The Continue command is particularly useful for debugging. Use Continue to
run a program from one breakpoint or watchpoint to another. When execution
stops, you can analyze the code and make any corrections. Once you
complete the corrections, choose Continue to execute from that point
forward. If you make a change that prevents continuation from the current
statement, QuickBASIC stops and asks if you want to continue without the
change or if you prefer to include the change and restart the program. (If
you do not want to restart, you can frequently use the Immediate window to
make temporary changes that will allow the program to continue.)
Shortcut Key
F5
See Also
Section 16.1, "Start Command"; Section 16.2, "Restart Command"
16.4 Modify COMMAND$ Command (Full Menus Only)
The Modify COMMAND$ command is a feature helpful to advanced programmers
who want to access text strings passed to their programs from the DOS
command line via the COMMAND$ function. You only need the Modify COMMAND$
command if your program uses the COMMAND$ function.
In some applications, you may wish to pass information from the DOS
environment to the application. For example, typing QB DEMO1 lets
QuickBASIC know that you wish to work within the program DEMO1 in the
QuickBASIC environment. DEMO1 is information that is passed to QuickBASIC
from the command line.
You can pass information to your program from the DOS command-line using
the COMMAND$ function. Memory is cleared every time the program starts,
and the information from the DOS command line is lost. In the development
and debugging process, you will want to test the program without exiting
to DOS each time you alter the program. The Modify COMMAND$ command tells
QuickBASIC to substitute what you have entered in the dialog box for the
string the COMMAND$ function would normally return.
In the Modify COMMAND$ dialog box, you indicate the string to be returned
by the COMMAND$ function. See Figure 16.1.
┌───────────────────── Modify COMMAND$ ─────────────────────┐
│ │
│ Enter text for COMMAND$: │
│ │
│ ┌───────────────────────────────────────────────────┐ │
│┌─ │SAMPLE.EXE WHITE GREEN BLUE │ │
││ └───────────────────────────────────────────────────┘ │
├┼──────────────────────────────────────────────────────────┤
││ < OK > < Cancel > < Help > │
└┼──────────────────────────────────────────────────────────┘
│
Text the COMMAND$ function will return
Figure 16.1 Modify COMMAND$ Dialog Box
16.5 Make EXE File Command
Once your program runs within QuickBASIC, you can use the Make EXE File
command to make a version of the program that runs directly from the DOS
command line without being loaded into QuickBASIC. The file for such a
program is known as an executable file, and has the extension .EXE.
Entering the base name (name with no extension) of an executable file
after the DOS prompt runs the program.
When you create an executable file, QuickBASIC first uses the BASIC
command-line compiler (BC) to compile your BASIC source code into an
intermediate file (an object file). QuickBASIC then uses a program called
the Microsoft Overlay Linker (LINK) to join all the separately compiled
modules of your program into a single executable file. LINK also combines
the compiled object files created by BC with the supporting routines your
program needs to execute properly. These routines are found in the
run-time libraries BRUN45.LIB or BCOM45.LIB.
16.5.1 Creating Executable Files
The files in the following list must be available to QuickBASIC when you
create an executable file. Make sure they are in the current directory or
available through your PATH or LIB environment variables. You can also use
the Options menu's Set Paths command to tell QuickBASIC where to search
for these files. (See Section 20.2, "Set Paths Command," for more
information on setting environment variables.)
╓┌─┌────────────────────────┌────────────────────────────────────────────────╖
Program Purpose
──────────────────────────────────────────────────────────────────────────
BC.EXE Creates linkable object files (files with .OBJ
extensions) from your program.
LINK.EXE Links the object files created by BC.
BRUN45.LIB Provides supporting routines that allow your
(Full Menus only) BASIC program to perform tasks such as accepting
input or printing text on the screen. These
routines are linked with your program by
Program Purpose
──────────────────────────────────────────────────────────────────────────
routines are linked with your program by
LINK.EXE.
The BRUN45.LIB library is the run-time-module
library. Programs linked with this library have
small executable files, but can only run in
combination with BRUN45.EXE, the run-time module.
BCOM45.LIB Provides supporting routines like BRUN45.LIB,
except that executable files created with this
library do not require BRUN45.EXE (run-time
module) support. Files created with BCOM45.LIB
are larger than those that use BRUN45.EXE, but
will run as stand-alone programs.
──────────────────────────────────────────────────────────────────────────
Take the following steps to create an executable file from a program
loaded in QuickBASIC:
1. Choose the Make EXE File command from the Run menu. The Make EXE File
dialog box appears. See Figure 16.2.
Name for executable file
│
┌──────────────────────┼────── Make EXE File ───────────────────────────
│ ┌─────┼────────────────────────────────────────────────
│ EXE File Name: │DEMO1.EXE
│ └──────────────────────────────────────────────────────
│
│ ┌─[X] Produce Debug Code Produce:
│ │ ┌──(∙) EXE Requiring BRUN45.EXE
│ │ ├──( ) Stand-Alone EXE File
├─┼─────────────────────────────────┼───────────────────────────────────
│ │ < Make EXE > < Make EXE and│Exit > < Cancel > < Help >
└─┼─────────────────────────────────┼───────────────────────────────────
│ │
Provides additional debugging Executable-file options
information when checked
Figure 16.2 Make EXE File Dialog Box
2. Type a different base name in the text box if you want to rename your
file; otherwise, leave the text box alone.
3. Choose either the EXE Requiring BRUN45.EXE option or the Stand-Alone
EXE File option.
See Section 16.5.3, "Types of Executable Files," for a discussion of
these alternatives.
4. Choose Produce Debug Code if you want your executable file to include
additional error-checking and to report error locations at run time.
Also choose Produce Debug Code if you want your program to respond to
CTRL+BREAK. Note that Produce Debug Code does not produce
CodeView(R)-compatible files and results in larger and slower programs.
See Section 16.5.4, "Run-Time Error Checking in Executable Files," for
an explanation of errors handled by this option.
5. Choose either the Make EXE or the Make EXE and EXIT command button:
■ The Make EXE command button creates the executable file, and then
returns you to QuickBASIC.
■ The Make EXE and Exit command button creates the executable file, and
then returns you to the DOS prompt.
16.5.2 Quick Libraries and Executable Files
If your program uses routines from a Quick library, you must load the
Quick library when you load your program. If a Quick library is loaded
when you choose the Make EXE file command, the BC compiler searches for a
stand-alone (.LIB) library that corresponds to the loaded Quick library
when it creates an executable file.
Quick libraries provide fast access to your own custom library of
procedures, but you can use them only inside the QuickBASIC environment.
The compiler needs access to the corresponding stand-alone (.LIB) library
to include the Quick library's procedures in an executable file.
Therefore, it is a good idea to keep both kinds of libraries──Quick
libraries and .LIB libraries──in the same directory. You can use the
Options menu's Set Paths command to tell QuickBASIC where to look for any
.LIB or Quick libraries it needs when creating an executable file. (The
Make Library command on the Run menu makes both kinds of libraries
automatically. See Section 16.6, "Make Library," in this manual and
Appendix H in Programming in BASIC for more information on creating and
using Quick libraries.)
16.5.3 Types of Executable Files
You can create two different types of executable files, depending on
whether or not you want your executable program to require access to the
run-time module BRUN45.EXE.
16.5.3.1 Programs that Use the Run-Time Module
Programs compiled with the EXE Requiring BRUN45.EXE option need access to
the run-time module BRUN45.EXE when they run. The run-time module contains
code needed to implement the BASIC language. Run-time modules provide the
following advantages over stand-alone programs:
■ The executable file is much smaller.
■ COMMON variables and open files are preserved across CHAIN statements,
allowing programs to share data. Stand-alone programs do not preserve
open files or variables listed in COMMON statements when a CHAIN
statement transfers control to another program.
■ The BRUN45.EXE run-time module resides in memory, so it does not need to
be reloaded for each program in a series of chained programs.
16.5.3.2 Stand-Alone Programs
When you use the Stand-Alone EXE File option, the executable file does not
require access to the run-time module BRUN45.EXE. However, since files
created with this option include the support routines found in BRUN45.EXE,
they are larger than files created with the EXE Requiring BRUN45.EXE
option. Also, files created with the EXE Requiring BRUN45.EXE option do
not preserve open files or variables listed in COMMON statements when a
CHAIN statement transfers control to another program.
Stand-alone files have the following advantages:
■ Slightly faster execution than run-time programs.
■ RAM space may be saved if you have small, simple programs that do not
require all the routines in the run-time module.
■ The program does not require the run-time module to run. This allows the
program to run by itself on any DOS computer.
16.5.4 Run-Time Error Checking in Executable Files
If you turn on the Produce Debug Code check box in the Make EXE File
dialog box when you make an executable file, the following conditions are
checked when the program runs:
■ Arithmetic overflow. All arithmetic operations, both integer and
floating-point, are checked for overflow and underflow.
■ Array bounds. Array subscripts are checked to ensure they are within the
bounds specified in DIM statements.
■ Line locations. The generated binary code includes additional tables so
that run-time error messages indicate the lines on which errors occur.
■ RETURN statements. Each RETURN statement is checked for a prior GOSUB
statement.
■ CTRL+BREAK, the keystroke combination to halt program execution. After
executing each line, the program checks to see if the user pressed
CTRL+BREAK. If so, the program stops.
Note that you must compile a program with the Produce Debug Code option
turned on if you want it to respond to CTRL+BREAK. Otherwise, CTRL+BREAK
halts a program only when one of the following conditions is met:
1. A user enters data in response to an INPUT statement's prompt.
2. The program's code explicitly checks for CTRL+BREAK.
──────────────────────────────────────────────────────────────────────────
WARNING
If you don't use the Produce Debug Code option, then array-bound errors,
RETURN without GOSUB errors, and arithmetic overflow errors do not
generate error messages. Program results may be unpredictable.
──────────────────────────────────────────────────────────────────────────
16.5.5 Floating-Point Arithmetic in Executable Files
When you compile a program into an executable file, the executable file
does floating-point calculations more quickly and efficiently than the
same program running in the QuickBASIC environment. Executable files
optimize for speed and accuracy by changing the order in which they do
certain arithmetic operations. (They also make greater use of a numeric
coprocessor chip or emulation of a coprocessor's function.)
One side effect of this extra accuracy in the results of relational
operations is that you may notice a difference when comparing single- or
double-precision values. For example, the following code fragment prints
Equal when run in the QuickBASIC environment but Not Equal when it is run
as an executable file:
B!=1.0
A!=B!/3.0
.
.
.
IF A!=B!/3.0 THEN PRINT "Equal" ELSE PRINT "Not Equal"
This problem results from performing the calculation B!/3.0 inside a
comparison. The compiled program stores the result of this calculation on
the math coprocessor chip, which gives it a higher degree of accuracy than
the value stored in the variable A!, causing the inequality.
You can avoid such problems in comparisons by doing all calculations
outside of comparisons. The following rewritten code fragment produces the
same results when run in the environment and as an executable file:
B!=1.0
A!=B!/3.0
.
.
.
Tmp!=B!/3.0
IF A!=Tmp! THEN PRINT "Equal" ELSE PRINT "Not Equal"
16.6 Make Library Command (Full Menus Only)
The Make Library command creates a custom Quick library for use with
compiled programs. A Quick library can contain procedures that you wish to
use in more than one program.
When you make a library with QuickBASIC, consider whether the library is
new or an update of an existing library. If it is an update, start
QuickBASIC with the /L command-line option, supplying the name of the
library to be updated as a command-line argument (for example, QB /L
Mylib). You can also include the name of a program whose modules you want
to put in the library. In this case QuickBASIC loads all the modules
specified in that program's .MAK file. If it is a new library, start
QuickBASIC first, and use Load File to load the files you want to convert
into a library.
If you load your program when starting QuickBASIC, be sure to unload any
modules you do not want in the Quick library, including the main module
(unless it contains procedures you want in the library).
16.6.1 Unloading and Loading Modules
To keep your Quick libraries as compact as possible, remove any
nonessential modules currently loaded. To remove ("unload") the unwanted
modules, follow these steps:
1. Choose the Unload File command from the File menu.
2. Select the module you want to unload from the list box, then press
ENTER. The module is unloaded, but still exists as a disk file.
3. Repeat steps 1 and 2 until you have unloaded all unwanted modules.
Alternatively, start QuickBASIC with or without a library specification,
and load only those modules you want. In this case, you load each module
using the Load File command from the File menu.
To load one module at a time, follow these steps:
1. Choose the File menu's Load File command.
2. Select the name of a module you want to load from the list box.
3. Repeat steps 1 and 2 until you have loaded all the modules you want.
16.6.2 Creating Libraries
Once you load the previous library (if any) and the new modules you want
to include in the Quick library, choose the Make Library command on the
Run menu. The dialog box shown in Figure 16.3 appears.
Name for library
│
┌────────────────────────────┼─ Make Library ──────────────────────────────
│ ┌─┼──────────────────────────────────────────┐
│ Quick-Library File Name: │prntproc.lib │
│ └────────────────────────────────────────────┘
│
│ ┌─[X] Produce Debug Code
├─┼────────────────────────────────────────────────────────────────────────
│ │ < Make Library > < Make Library and Exit > < Cancel > < Help >
└─┼────────────────────────────────────────────────────────────────────────
│
Provides additional debugging information when checked
Figure 16.3 Make Library Dialog Box
To create a Quick library after you have chosen the Make Library command,
do the following:
1. Enter the name of the library you wish to create in the Quick-Library
File Name text box.
If you enter a base name (that is, a file name with no extension),
Quick BASIC appends the extension .QLB when it creates the Quick
library. If you want your library to have no extension, add a
terminating period (.) to the base name. Otherwise, you may enter any
unique base name and extension you like, as long as it is consistent
with DOS file-name rules.
2. Select the Produce Debug Code check box only if you are specifically
trying to track a bug you believe to be in a library you are updating.
It makes your library larger, your program slower, and gives only a
small amount of error information.
3. Create the Quick library:
■ Choose the Make Library command button if you want to remain in the
environment after the Quick library is created.
■ Choose the Make Library and Exit command button if you want to return
to the DOS command level after the Quick library is created.
──────────────────────────────────────────────────────────────────────────
NOTE
A Quick library that needs to trap events such as keystrokes must
contain at least one event-trapping statement in one of its modules.
This statement can be as simple as TIMER OFF, but without it, events are
not trapped correctly in the Quick library.
──────────────────────────────────────────────────────────────────────────
16.7 Set Main Module Command (Full Menus Only)
The Set Main Module command lets you select a main module from a list of
the currently loaded modules.
In a single-module program, the main module is the program. Therefore, as
soon as you have typed your first statement and have saved it, you have
created a main module. In a multiple-module program, the main module
contains the first statement to be executed when the program is run──it is
the first entry in any list box (such as the one in the SUBs command
dialog box) that shows the modules in a program.
If you start QuickBASIC without specifying a file name, the title bar of
the View window contains the word Untitled. If you save the contents of
that View window, even if it is empty, the name under which you save it
becomes the name of the main module of the program.
After you name the main module, the name appears in the title bar of the
View window.
16.7.1 Changing the Main Module
A module can be part of many different programs, but it can be the main
module of only one program (the program bearing its name).
As you are editing your program, you may find that you want to reorganize
it and have execution begin with a module other than the one currently
designated as the main module. To do this, follow these steps:
1. Choose the Set Main Module command from the Run menu. The Set Main
Module dialog box contains a list of currently loaded modules.
2. Select the module you want to designate as the main module, and press
ENTER. See Figure 16.4.
Becomes new main module
┌─────── Set Main Module ───────┐
│ Choose new main module: │
│ ┌─────────────────────────┐ │
│ │ DEMO1.BAS ↑ │
│ │ TEST.BAS ▒ │
│ │ TORUS.BAS ▒ │
│ │ DEMO2.BAS ▒ │
│ │ ▒ │
│ │ ▒ │
│ │ ▒ │
│ │ ↓ │
│ └─────────────────────────┘ │
│ │
├───────────────────────────────┤
│ < OK > < Cancel > < Help > │
└───────────────────────────────┘
Figure 16.4 Set Main Module DIalog Box
16.7.2 The .MAK File
When you save a multiple-module program QuickBASIC creates a special file
containing the names of all the program modules. This file has the base
name of the main module plus the extension .MAK.
When you reload the program, QuickBASIC uses the .MAK file to locate all
of the modules. For this reason, do not delete a .MAK file. If you move a
multiple-module program to another directory, you also need to move the
.MAK file.
Only program modules are included in a .MAK file. The main program module
is the first .MAK file entry. QuickBASIC does not add other types of files
to the .MAK list. If your program relies on include files, the program
must specify each file as an argument to a $INCLUDE metacommand.
The .MAK file is a text file. If you wish to edit it, load it into
QuickBASIC using the Document option of the File menu's Load File command.
You can remove modules from a program's .MAK file without editing the .MAK
file directly. With the program loaded, follow the module-unloading
procedure outlined in Section 16.6.1, "Unloading and Loading Modules."
When you save the program, the names of any unloaded modules are removed
from the .MAK file.
────────────────────────────────────────────────────────────────────────────
Chapter 17 Debugging Concepts and Procedures
This chapter introduces the topic of debugging your programs with
QuickBASIC. QuickBASIC can help you track down errors that result from
flaws in the logic of a program.
This chapter provides the following information on debugging:
■ Using QuickBASIC to prevent bugs as you are writing your program
■ Debugging terms and concepts
See Chapter 18, "The Debug Menu," for more information on debugging.
17.1 Debugging with QuickBASIC
QuickBASIC simplifies debugging with advanced features such as
breakpoints, watchpoints, instant watch, and watch expressions. Other
fundamental tools include the STOP, PRINT, CONT, TRON, and TROFF
statements.
With QuickBASIC, you do not need to use separate tools or invoke any
special options to debug your program. When you notice a bug, you can
start tracking it immediately. The QuickBASIC environment contains
everything you need.
Additionally, QuickBASIC does not require you to recompile or relink a
program after making a change. You can usually run a program to the point
where a problem occurs, suspend execution, fix the problem, and continue
running the program as though it never stopped. In QuickBASIC, you debug
as you program.
17.2 Preventing Bugs with QuickBASIC
Preventing bugs is the best way to have a bug-free program. Here are three
ways to prevent bugs:
1. Design your program carefully.
An important rule in good program design is to isolate different tasks
by writing SUB or FUNCTION procedures to perform those tasks. A small
procedure is much easier to debug than a large program without
procedures.
An additional benefit of using procedures is that you can save groups
of procedures in a separate file called a module, then use them in
other programs that perform the same tasks. (See Chapter 2, "SUB and
FUNCTION Procedures," in Programming in BASIC for more information on
procedures and modules.)
2. Use the Immediate window.
As you program, use the Immediate window at the bottom of the
QuickBASIC screen to isolate and test small pieces of the program. See
Section 17.3.5 for more information on the Immediate window. When
these pieces work on their own, move them into the View window.
3. Run your program often.
Because QuickBASIC checks and translates each statement to executable
code (instructions understood by the computer) after you type a line
and press ENTER, you can continually test-run the program as you add
new pieces. This helps catch simple bugs that could be difficult to
track in a finished program.
Suppose you have written a program that contains the following code:
DIM Array$(1 TO 20)
.
.
.
I% = 1
DO
INPUT Temp$
IF Temp$ <> "" THEN
Array$(I%) = Temp$
I% = I + 1
END IF
LOOP UNTIL Temp$ = "" OR I% > 20
You believe you have designed a logical loop. Now you can test the code by
doing the following:
1. Execute the loop and enter text when prompted. (To end the loop, press
ENTER instead of entering text.)
2. Type the following in the Immediate window:
For I% = 1 to 20: PRINT Array$(I%): NEXT
Your output will alert you to a flaw in your program──the variable I% is
not incrementing. Upon closer inspection, you notice that you must change
the line
I% = I + 1
to
I% = I% + 1
Along with designing your program carefully, using the Immediate window,
and running your program often, another debugging technique is setting a
"watch expression." This allows you to "watch" (monitor) the value of the
variable I% as you trace through the loop. Section 17.3.3, "Watch
Expressions," and Section 17.3.4, "Watch Window," tell how to watch an
expression while a program is executing.
17.3 QuickBASIC's Debugging Features
This section defines some key debugging terms and concepts. See Chapter
18, "The Debug Menu," for information on the Debug menu and how to use
QuickBASIC's debugging commands.
17.3.1 Tracing (Full Menus Only)
The Trace On command highlights each statement as it executes. If the
program manipulates the screen, QuickBASIC switches back and forth between
the highlighted statements and the output screen (this is referred to as
"animated execution"). For example, with tracing on you can follow
branching in an IF...THEN...ELSE statement. QuickBASIC's tracing options
let you run the entire program at once (normal tracing), one statement at
a time (single stepping), or one procedure at a time (procedure stepping).
See Section 17.3.6, "Other Debugging Features," for a discussion of
single stepping and procedure stepping.
Turning on tracing automatically enables QuickBASIC's History On command.
History records the last 20 statements executed so you can stop execution
and trace backward and forward through the 20 previous statements with
History Back and History Forward. The history feature allows you to answer
the question, "How did I get here?"
See Also
Section 18.6, "Trace On Command"; Section 18.7, "History On Command"
17.3.2 Breakpoints and Watchpoints
A breakpoint is a location in your program where you want execution to
pause. With breakpoints, you can set your program to execute only as far
as you want, letting you test one segment of your program at a time. You
can also use breakpoints to stop the program at strategic places and then
examine a variable's value.
A watchpoint is an expression that stops a program when the expression
becomes true (nonzero). You might use a watchpoint, for example, if your
program crashes in a loop that increments X from 1 to 50. A watchpoint of
X=49 stops the program when X becomes 49. You can then single step the
program through the forty-ninth loop to locate the particular statement
that causes the crash.
Watchpoints appear in the Watch window. The Watch window displays all of
the current watchpoints and watch expressions.
See Also
Section 17.3.4, "Watch Window"; Section 18.1, "Add Watch Command";
Section 18.8, "Toggle Breakpoint Command"
17.3.3 Watch Expressions
Watch expressions, which are entered with the Add Watch command, let you
observe the value of a variable (a number or text string) or the condition
of an expression (true or false) in an executing program.
For example, if you want to watch the value of a variable MyVar and an
expression X=1, QuickBASIC places MyVar and X=1 in the Watch window. As
the program runs, QuickBASIC displays the changing values of MyVar and the
condition of X=1 (-1 for true, 0 for false) in the Watch window. If a
program MYPROG.BAS initially assigns MyVar a value of 10 and X a value of
1, then the Watch window displays
MYPROG.BAS MyVar: 10
MYPROG.BAS X=1: -1
If the program later changes MyVar to 99 and X to 3, the Watch window will
then display
MYPROG.BAS MyVar: 99
MYPROG.BAS X=1: 0
The Instant Watch command displays the value of the variable or expression
containing the cursor in a dialog box──you do not need to open the Watch
window. However, the Instant Watch dialog box does give you the option of
adding the variable or expression to the Watch window.
See Also
Section 17.3.4, "Watch Window"; Section 18.1, "Add Watch Command";
Section 18.2, "Instant Watch Command"
17.3.4 Watch Window
The Watch window is the window that opens at the top of the QuickBASIC
screen to let you track watchpoint conditions or watched expressions
during program execution.
The current value or condition (true or false) of a variable or expression
can be displayed in the Watch window only when the program is executing in
the part of the program in which the watchpoint or watch expression was
added. The message Not watchable is displayed at all other times.
For example, suppose you create a watch expression to monitor the value of
a variable MyVal while you are working on a procedure called MySub. The
value of MyVal will appear in the Watch window only when the program
executes the MySub procedure. At any other time──when execution is in the
module-level code or other procedures──the message Not watchable appears
after MyVal in the Watch window.
Even if a program uses a SHARED statement to share a variable between the
module level and the procedure level, that variable is watchable only at
the level that was active when the variable was added to the Watch window.
Nothing is watchable while a DEF FN function is active.
See Also
Section 17.3.3, "Watch Expressions"; Section 18.1, "Add Watch Command";
Section 18.2, "Instant Watch Command"
17.3.5 Immediate Window
The Immediate window is the window at the bottom of the screen. In it you
can execute BASIC statements directly to gain information useful in
debugging.
Note, however, that the Immediate window can access information only about
those variables in the part of the program (module or procedure) that is
currently active.
For example, if you suspend a program in a procedure, you may use the
Immediate window to access local and global variables and expressions
(indicated by the SHARED statement) but not ones local only to the
module-level code or another procedure.
See also
Section 10.5, "Using the Immediate Window"
17.3.6 Other Debugging Features
Table 17.1 describes several additional debugging features available in
QuickBASIC Version 4.5. Some are intended to be used together, while
others are generally used by themselves.
Table 17.1 Additional Debugging Features
╓┌─┌──────────────┌──────────────┌───────────────────────────────────────────╖
Feature How to Execute Description
──────────────────────────────────────────────────────────────────────────
Break on Choose from Locates errors in programs using error
Feature How to Execute Description
──────────────────────────────────────────────────────────────────────────
Break on Choose from Locates errors in programs using error
Errors command the Debug menu handling. Break on Errors disables error
handling and halts execution when an error
occurs. Press SHIFT<|>+<|>F8 (History Back)
to see the error-causing statement.
Execute to Press F7 Executes from the beginning of a program up
cursor to and including the line containing the
cursor, and then halts execution. Use this
feature to quickly execute to a
problem-causing section of code, and then
single step to find the error.
Set Next Choose from Changes the execution sequence of an
Statement the Debug menu interrupted program so that the next
command statement to execute will be the one at the
cursor. If your program encounters an error
that you can correct immediately, use Set
Next Statement to tell QuickBASIC to begin
Feature How to Execute Description
──────────────────────────────────────────────────────────────────────────
Next Statement to tell QuickBASIC to begin
executing from the corrected line when you
choose Continue.
Single Press F8 Executes a single statement. This is a
stepping powerful tool for debugging code. By single
stepping and using the Watch window
together, you can gain a thorough
understanding of how each statement affects
your variables.
Procedure Press F10 Executes a procedure call and the procedure
stepping as a single statement. If you are single
stepping and encounter a procedure you know
works properly, procedure stepping lets you
execute the entire procedure at once (rather
than single stepping through it).
──────────────────────────────────────────────────────────────────────────
Feature How to Execute Description
──────────────────────────────────────────────────────────────────────────
See Also
Section 18.10, "Break On Errors Command"; Section 18.11, "Set Next
Statement Command"
────────────────────────────────────────────────────────────────────────────
Chapter 18 The Debug Menu
The Debug menu controls features that speed program debugging. These
features let you watch variables and expressions as they change, trace
program execution, stop the program at specified locations or on specified
conditions, and alter the restart location of a suspended program.
The Debug menu contains the following commands:
■ Add Watch. Displays the values of variables and expressions in the Watch
window as a program executes.
■ Instant Watch. Displays the value of a variable or expression.
■ Watchpoint. Allows you to halt program execution when a condition you
specify becomes true (Full Menus only).
■ Delete Watch. Removes an item from the Watch window.
■ Delete All Watch. Removes all entries in the Watch window and closes the
window (Full Menus only).
■ Trace On. Steps through the program in slow motion, highlighting the
currently executing statement (Full Menus only).
■ History On. Records the last 20 lines executed by the program (Full
Menus only).
■ Toggle Breakpoint. Turns breakpoints on and off.
■ Clear All Breakpoints. Removes all previously set breakpoints.
■ Break on Errors. Sets an implicit breakpoint at the most recent
error-handling statement (Full Menus only).
■ Set Next Statement. Changes the program execution sequence so that the
next statement executed is the one at the cursor (Full Menus only).
18.1 Add Watch Command
The Add Watch command displays the values of variables and expressions as
the program executes. QuickBASIC opens a Watch window at the top of the
screen to accommodate the variables.
To use the command, choose Add Watch on the Debug Menu. A dialog box
appears. Type in the name of the variable or expression you want to watch.
See Figure 18.1.
Variable or expression
│
File Edit View Search │Run Debug Calls Options Help
SORTDEMO.BAS Z > 100: │
SORTDEMO.BAS Length > 50: │
┌───────────────────────────┼── SORTDEMO.BAS ─────────────────────────┤↑├──
│' Define the data type used│to hold the information for each colored bar:
│ TYPE SortType │
│ Length┌───────────────┼────── Add Watch ───────────────────────┐
│ │ │ │
│ ColorV│ Enter expression to be added to Watch window: │
│ BarStr│ │ │
│ ENDTYPE │ ┌────────────┼─────────────────────────────────────┐ │
│ │ │COLORVAL ───┘ │ │
│' Declare g│ └──────────────────────────────────────────────────┘ │
│ CONST FAL├────────────────────────────────────────────────────────┤
│ CONST NUM│ < OK > < Cancel > < Help > │
│ └────────────────────────────────────────────────────────┘
│' Declare global variables, and allocate storage space for them. SortArray
│' and SortBackup are both arrays of the data type SortType defined above:
│←▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒→
├─────────────────────────────── Immediate ────────────────────────────────
│
│
F1=Help Enter=Execute Esc=Cancel Tab=Next Field Arrow=Next Item
Figure 18.1 Add Watch Dialog Box
Watching a variable in the Watch window avoids repeated use of PRINT
statements for tracking the variable's value. You can also watch the
condition (true or false) of an expression in the Watch window. True is
represented by -1; false by 0. The variables or expressions you are
watching are easily removed from the Watch window when debugging is
complete.
During program execution, a value in the Watch window changes when its
value in the program changes. Sometimes the message Not watchable may
appear rather than a value. This means that the debugger cannot currently
access the variable because program execution is not in the part of the
program (the procedure- or module-level code) from which the variable was
added to the Watch window. A variable is watchable only when the program
is executing in the part of the program from which the variable was added
to the Watch window.
Note that if you are interested in only one or two instances of a
variable's value, it may be easier to use the Instant Watch command,
described in Section 18.2.
Example
The following example calculates the nth number in a sequence known as the
Fibonacci sequence. In the Fibonacci sequence, each number is the sum of
the two preceding numbers, beginning with 1 and 2. The first 10 Fibonacci
numbers are 1, 2, 3, 5, 8, 13, 21, 34, 55, and 89. This example uses the
Add Watch command and animated tracing (the process of switching back and
forth between highlighted statements in your program and the output
screen).
1. Start QuickBASIC or choose the New Program command from the File menu,
and type:
DEFINT A-Z
INPUT n
PRINT Fib(n)
END
2. Choose the Add Watch command from the Debug menu, then enter n in the
text box. This displays the value n has at the module level.
3. Create a FUNCTION procedure called Fib by choosing the New FUNCTION
command from the Edit menu and typing Fib in the dialog box. (DEFINT
A-Z is automatically added above the first line of the FUNCTION
definition because of the DEFtype statement you typed in step 1.) Now
enter the procedure as follows:
FUNCTION Fib(n)
IF n > 2 THEN
Fib = Fib(n - 1) + Fib(n - 2)
ELSE Fib = n
END IF
END FUNCTION
4. Choose the Add Watch command on the Debug menu, and again add n to the
Watch window. This displays the value of n within the Fib procedure.
5. Choose the Trace On command on the Debug menu.
6. Choose Start on the Run menu to execute the program.
7. Enter 8 after the input prompt. Observe the Watch window to see how n
changes as the procedure recursively calls itself to calculate the
eighth number in the Fibonacci sequence.
8. Choose the Output Screen command (or press F4) to see the program
results.
See Also
Section 17.3.3, "Watch Expressions"; Section 17.3.4, "Watch Window"
18.2 Instant Watch Command
The Instant Watch command displays the value of a variable or the
condition of an expression (true or false) in a dialog box.
Use the command by moving the cursor within (or to the right of) a
variable or selecting an expression and then choosing Instant Watch on the
Debug menu. QuickBASIC displays a dialog box with the variable or
expression in the upper text box and the value or condition (-1 for true,
0 for false) in the lower text box. See Figure 18.2.
Variable or expression
│
File Edit View Search │Run Debug Calls Options Help
SORTDEMO.BAS Z > 100: │
SORTDEMO.BAS Length > 50: │
┌───────────────────────────┼── SORTDEMO.BAS ─────────────────────────┤↑├──
│' Define the data type used│to hold the information for each colored bar:
│ TYPE SortTyp┌────────────┼────── Add Watch ─────────────────┐
│ Length AS│ │ │ed
│ │ ┌─────────┼───────────────────────────────┐ │
│ ColorVal │ │Colorval─┘ │ │
│ BarString│ └─────────────────────────────────────────┘ │ters)
│ ENDTYPE │ │
│ │ ┌─────────────────────────────────────────┐ │
│' Declare glob│ │ 0 ──┐ │ │
│ CONST FALSE │ └─────┼───────────────────────────────────┘ │
│ CONST NUMOP ├────────┼──────────────────────────────────────┤
│ T│ < Add│Watch > < Cancel > < Help > │
│' Declare glob└────────┼──────────────────────────────────────┘. SortArray
│' and SortBackup are both arrays of the data type SortType defined above:
│←▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒│▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒→
├───────────────────────┼─────── Immediate ────────────────────────────────
│ │
│ │
F1=Help Enter=Execute │Esc=Cancel Tab=Next Field Arrow=Next Item
│
Value or condition
Figure 18.2 Instant Watch Dialog Box
Use the Instant Watch command for debugging assignment statements and for
checking variables or expressions. If you need to watch a variable or
expression constantly, use the Add Watch command (or press the Add Watch
button in the Instant Watch dialog box) to add the item to the Watch
window.
The Instant Watch command is convenient for displaying a value or
condition in a suspended or stopped program.
Shortcut Key
SHIFT+F9
See Also
Section 17.3.3, "Watch Expressions"; Section 17.3.4, "Watch Window"
18.3 Watchpoint Command (Full Menus Only)
The Watchpoint command allows you to set a watchpoint──an expression that
halts program execution when the expression becomes true (for example,
when the value of a variable X equals 100). QuickBASIC displays the
watchpoint in the Watch window.
When you choose the Watchpoint command a dialog box appears. You can enter
any variable name or expression along with relational operators in the
Watchpoint text box. See Figure 18.3.
File Edit View Search Run Debug Calls Options Help
SORTDEMO.BAS Z > 100:
SORTDEMO.BAS Length > 50:
┌────────────────────────────── SORTDEMO.BAS ─────────────────────────┤↑├──
│' Define the data type used to hold the information for each colored bar:
│ TYPE SortType
│ Length┌───────────────────── Watchpoint ───────────────────────┐
│ │ │
│ ColorV│ Enter expression (will break when TRUE): │
│ BarStr│ │
│ ENDTYPE │ ┌──────────────────────────────────────────────────┐ │
│ ┌──┼──►COLORVAL = 10 │ │
│' Declar│ g│ └──────────────────────────────────────────────────┘ │
│ CONST │AL├────────────────────────────────────────────────────────┤
│ CONST │UM│ < OK > < Cancel > < Help > │
│ │ └────────────────────────────────────────────────────────┘
│' Declar│ global variables, and allocate storage space for them. SortArray
│' and So│tBackup are both arrays of the data type SortType defined above:
│←▒▒▒▒▒▒▒│▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒→
├────────│────────────────────── Immediate ────────────────────────────────
│ │
│ │
F1=Help │Enter=Execute Esc=Cancel Tab=Next Field Arrow=Next Item
│
Condition that will halt the program
Figure 18.3 Watchpoint Dialog Box
QuickBASIC's relational operators include =, <>, >, <, >=, and <=. If an
expression is entered without a relational statement, QuickBASIC assumes
the relation <> 0. QuickBASIC then suspends execution of the program as
soon as the expression becomes a nonzero value.
If you set a watchpoint in a SUB or FUNCTION procedure, the Watch window
describes the given expression as TRUE or FALSE only when the program is
executing in that procedure. At all other times the message Not watchable
will appear beside the watchpoint in the Watch window. Similarly,
watchpoints at the module level display the message Not watchable when
execution is in a procedure.
See Also
Section 17.3.2, "Breakpoints and Watchpoints"; Section 18.1, "Add Watch
Command"; Section 18.4, "Delete Watch Command"
18.4 Delete Watch Command
The Delete Watch command removes an item from the Watch window. The Delete
Watch dialog box, shown in Figure 18.4, displays the current Watch-window
items and allows you to select which Watch-window item to delete.
List of items currently in Watch window
│
│ File Edit View Search Run Debug Calls Options Help
│┌SORTDEMO.BAS Z > 100: 0
└┤SORTDEMO.BAS ColorVal: 0
└SORTDEMO.BAS Length < 50: -1
┌──────────────┌───────────────── Delete Watch ────────────────┐──────┤↑├──
│' Define the d│ ┌─────────────────────────────────────────┐ │lored bar:
│ TYPE SortTyp│ │ SORTDEMO.BAS Z > 100: ↑ │
│ Length AS│ │ SORTDEMO.BAS ColorVal: ▒ │ed
│ │ │ │ SORTDEMO.BAS Length < 50: ▒ │
│ ColorVal │ │ │ ▒ │
│ BarString│ │ │ ▒ │ters)
│ ENDTYPE │ │ │ ▒ │
│ │ │ │ ▒ │
│' Declare glob│ │ │ ▒ │
│ CONST FALSE │ │ │ ↓ │
│ CONST NUMOP │ └─┼───────────────────────────────────────┘ │
│ T│ │ │
│' Declare glob├────┼──────────────────────────────────────────┤. SortArray
│' and SortBack│ │ < OK > < Cancel > < Help > │ned above:
│←▒▒▒▒▒▒▒▒▒▒▒▒▒└────┼──────────────────────────────────────────┘▒▒▒▒▒▒▒▒▒▒→
├───────────────────┼─────────── Immediate ────────────────────────────────
│ │
F1=Help Enter=Execute Esc=Cancel Tab=Next Field Arrow=Next Item
│
Item to remove
Figure 18.4 Delete Watch Dialog Box
Use the Delete All Watch command to remove all Watch-window items at once.
See Also
Section 18.5, "Delete All Watch Command"
18.5 Delete All Watch Command (Full Menus Only)
The Delete All Watch command in the Debug menu removes all of the
Watch-window entries and closes the window. You typically use the Delete
All Watch command when the section of program code you are working on runs
properly.
If you want to selectively remove Watch-window items, use the Delete Watch
command.
See Also
Section 18.4, "Delete Watch Command"
18.6 Trace On Command (Full Menus Only)
The Trace On command steps through the program in slow motion,
highlighting the executing statement. When this command is active, a
bullet (■) appears next to the Trace On command on the Debug menu.
Choosing Trace On again toggles the feature off.
Trace On is a useful method for determining whether the general flow of
your program is what you intended, especially if you use it in combination
with watchpoints, breakpoints, and CTRL+BREAK (which suspends execution).
Trace On also records the last 20 statements executed, so you can review
them with the History Back and History Forward commands (see Sections
18.7.1 and 18.7.2).
If a program sends output to the screen, running it with Trace On active
causes the screen to flash back and forth between QuickBASIC and the
output screen. You can use the Output Screen command from the View menu to
control which screen appears during program suspension (see Section
14.5).
See Also
Section 18.1, "Add Watch Command"; Section 18.7, "History On Command";
Section 18.8, "Toggle Breakpoint Command"
18.7 History On Command (Full Menus Only)
Choose the History On command from the Debug menu to record the last 20
lines executed by the program the next time it runs. When this command is
active, a bullet (■) appears next to the History On command on the Debug
menu. Execution speed is slower with this feature active.
The History On command allows you to trace backward and forward through
the last 20 statements executed by the program. This is particularly
useful when you get a run-time error and you want to see which 20
statements were executed immediately preceding the error. Checking the
execution history also lets you review the specific branching of a program
through nested sequences of conditional structures like IF...THEN...ELSE
statements. Use History On in conjunction with breakpoints to review
groups of up to 20 consecutive statements in your program.
You use History On with the History Back and History Forward commands (see
Sections 18.7.1 and 18.7.2).
──────────────────────────────────────────────────────────────────────────
NOTE
The History commands do not execute statements. They just show the
previous execution sequence.
──────────────────────────────────────────────────────────────────────────
18.7.1 History Back
Activated with SHIFT+F8, History Back steps back in your program through
the last 20 program statements recorded by either the History On or Trace
On command.
When you wish to review the flow of a program, interrupt the program
execution by pressing CTRL+BREAK; then press SHIFT+F8 to check back
through the last 20 statements executed. This shows you the program flow
through statements and is particularly useful for following conditional
branches.
18.7.2 History Forward
Activated with SHIFT+F10, History Forward lets you step forward in your
program through the last 20 program statements. You can use History
Forward only after using History Back. Because History Back shows the
reverse execution order, step backward first, and then watch the execution
sequence using History Forward.
See Also
Section 18.6, "Trace On Command"
18.8 Toggle Breakpoint Command
The Toggle Breakpoint command turns a breakpoint (a specific location in
the program where execution stops) on and off. The Toggle Breakpoint
command affects the line containing the cursor. Lines on which breakpoints
are set appear in reverse video.
Use a breakpoint to pause at points where you suspect problems in your
program, then test the values of variables to confirm or refute your
suspicion (in the Immediate window). Alternately, insert a breakpoint
prior to a problem area and then use single stepping (see Section 17.3.6,
"Other Debugging Features," for a description of single stepping) or use
the Instant Watch command for a detailed view of program flow and variable
values.
Clear a breakpoint on the current cursor line by selecting Toggle
Breakpoint again.
Shortcut Key
F9
See Also
Section 17.3.2, "Breakpoints and Watchpoints"; Section 18.9, "Clear All
Breakpoints Command"
18.9 Clear All Breakpoints Command
The Clear All Breakpoints command removes all breakpoints in a program.
Remove individual breakpoints (while leaving others in place) with the
Toggle Breakpoint command.
You typically use the Clear All Breakpoints command when you know a
section of program code runs properly.
See Also
Section 17.3.2, "Breakpoints and Watchpoints"; Section 18.8, "Toggle
Breakpoint Command"
18.10 Break on Errors Command (Full Menus Only)
The advanced debugging command Break on Errors allows you to trace an
error-causing statement in a program that uses error handling. When
toggled on (indicated by a bullet beside the command), Break on Errors
sets an implicit breakpoint after the label specified in the most recently
executed error-handling (ON ERROR) statement. If you do not use error
handling, you will not need this command.
When an error occurs in a program with error handlers, QuickBASIC routes
execution to the label specified in the appropriate ON ERROR statement. If
there is no ON ERROR statement that explicitly addresses the type of error
QuickBASIC encounters, finding the source of the error can be difficult.
Break on Errors solves this error-finding problem.
The Break on Errors command enables History On and records the statement
that caused the error. Choosing History Back (SHIFT+F8) shows you the
error-causing statement.
In the following program fragment, an error occurs at the line Y=5/X. This
example demonstrates how QuickBASIC uses Break on Errors to stop after the
label specified in the most recent ON ERROR statement:
ON ERROR GOTO FirstHandler 'First error handler
ON ERROR GOTO NextHandler 'Second error handler
ON ERROR GOTO LastHandler 'Third and last error handler
.
X = 0
Y = 5/X
.
LastHandler: 'Label in most recently executed error handler
. 'QuickBASIC stops immediately after label
.
With Break on Errors on, an error transfers program flow to LastHandler
and execution stops. History Back will now show you the statement that
caused the error.
See Also
Section 18.7, "History On Command"
18.11 Set Next Statement Command
When you want to skip over or rerun a section of a program, halt
execution, then use the Set Next Statement command.
The Set Next Statement command changes program execution sequence so that
the next statement executed is the one at the cursor. QuickBASIC ignores
any intervening program code. Use the Set Next Statement command with
care; skipping code can lead to undefined variables and result in errors.
The effect of the Set Next Statement command is similar to that of a GOTO
statement, and the same restrictions apply. For example, you cannot branch
to the middle of a procedure from the module level of a program.
Note that the Next Statement command on the View menu moves the cursor to
the next statement to be executed when the program continues to run, while
the Set Next Statement command on the Debug menu allows you to establish
(set) the next statement to be executed. Next Statement is used to
indicate which statement will execute next if no changes are made; Set
Next Statement allows you to alter this by choosing a new resumption point
for program execution.
See Also
Section 14.4, "Next Statement Command"
────────────────────────────────────────────────────────────────────────────
Chapter 19 The Calls Menu (Full Menus Only)
The Calls menu is an advanced feature that shows all of the procedure
calls that led to the current execution location. It lets you do the
following:
■ See the sequence of nested procedure calls your program executed in
order to arrive at the current procedure.
■ Continue your program from the point execution stopped to any listed
procedure.
Use the Calls menu to see which procedures execution passed through.
During debugging, you can use the Calls menu and single stepping
(described in Section 17.3.6, "Other Debugging Features") together to
execute up to an error, recreating the same variable values and conditions
that led to a program crash.
If your procedures do not call other procedures, the Calls menu shows only
the name of the main module and any currently executing procedure. In any
program, the Calls menu displays only the program name prior to running.
19.1 Using the Calls Menu
The Calls menu shows calls between procedures. The following example
illustrates the use of the Calls menu for both debugging and executing.
Suppose you want to write a program to draw histograms (bar charts) on the
screen, and you want your user to specify the fraction of the screen the
chart will fill. Since you believe strongly in the use of structured
programming, you break the process into several procedures.
Your main module prompts your user for data and then calls a procedure
DrawHisto to draw the chart. DrawHisto then sends the task of drawing the
chart's bars to a separate procedure, DrawBars. Since the number of bars
in the chart can vary (depending on the data your user entered), DrawBars
farms out the job of calculating how wide each bar will be to the
procedure CalcBarWidth. However, before CalcBarWidth can determine how
wide each bar needs to be, it needs to know the width of the histogram.
So, CalcBarWidth calls the procedure CalcHistoWidth which calculates the
width of the screen to be used in the histogram.
During execution, DrawHisto calls DrawBars, DrawBars calls CalcBarWidth,
and CalcBarWidth calls CalcHistoWidth. If your program stops running
inCalcHistoWidth, the Calls menu items appear in the order shown in Figure
19.1.
┌──────────────────────────────────────────────────────────────────────────
│
│ ┌───────┐
│ │ Calls │
│ ├───────┴────────┐
│ │ CalcHistoWidth─┼─────Procedure in which the program stopped running
│ │ CalcBarWidth │
│ │ DrawBars │
│ │ DrawHisto │
│ │ HISTOGRM.BAS───┼─────Location of first call
│ └────────────────┘
│
│ HISTOGRM.BAS─→DrawHisto─→DrawBars─→CalcBarWidth─→CalcHistoWidth
│
└──────────────────────────────────────────────────────────────────────────
Figure 19.1 Sequence of Procedures on Calls Menu
The Calls menu provides you with a "trail" you can follow to understand
how your program executed to the CalcHistoWidth procedure; it is
particularly valuable when your program stops in a series of deeply nested
procedures (as in the histogram example). The order of the items in the
Calls menu tells you the order in which the procedures were called; the
item at the top of the list was called by the second item, the second item
was called by the third item, the third item was called by the fourth
item, etc. The first menu item is the one that was most recently executed.
When a procedure crashes, the Calls menu gives you the sequence of
procedures that led to the crash.
Suppose the program you write to draw histograms (described earlier in
this section) crashes in the CalcHistoWidth procedure. The Calls menu can
help you continue the program or recreate the conditions that led to the
crash.
To continue the program through the rest of the CalcHistoWidth procedure,
follow these steps:
1. Use the Immediate window to change any variables necessary to allow the
program to run (that is, correct the error that caused the program to
crash).
2. Choose CalcBarWidth from the Calls menu and press ENTER. This places
the CalcBarWidth procedure in the View window, with the cursor on the
line just after the line that called CalcHistoWidth.
3. Press F7. This runs the program from the current execution point (the
statement where the program crashed) to the current cursor location
(just after the call to CalcHistoWidth). The remaining code is executed
in the CalcHistoWidth procedure and stops executing at the cursor in
CalcBarWidth.
4. Use the Watch window, Immediate window, or Instant Watch command to
verify that the variables have the values you desire, or use the Output
Screen command to check any screen changes. Either way, you can verify
that the program──with the changes you made in step 1──now runs
properly.
To recreate the conditions that led to the crash:
1. Move the cursor to the beginning of the program and choose the Set Next
Statement command on the Debug menu. This prepares the program to run.
2. Choose CalcBarWidth in the Calls menu and press ENTER. QuickBASIC
displays the CalcBarWidth procedure, with the cursor on the line below
the call to CalcHistoWidth. Move the cursor to the line above the call
to CalcHistoWidth.
3. Press F7. This runs the program from the current execution point (the
first executable statement in the program) to the current cursor
location.
4. Single step (press F8) from CalcBarWidth into CalcHistoWidth until you
find the error-causing statement.
5. Use the Instant Watch command or other debugging techniques to resolve
the error.
In complex programs, using the Calls menu can simplify debugging.
19.2 Active Procedures
The procedure at the top of the Calls menu is the currently active
procedure. The one directly below it is the procedure that called the
active procedure (and the one to which control returns when QuickBASIC
leaves the active procedure). You can execute your program to any
procedure in the Calls menu by choosing the procedure's name and pressing
F7.
Consider the procedures shown in Figure 19.1. Since CalcBarWidth is
high-lighted, pressing ENTER and then F7 executes code from the beginning
of the program to the statement in CalcBarWidth that follows the call to
CalcHistoWidth. Note that QuickBASIC tracks only the most recent execution
with the Calls menu, so that DrawBars would now be at the top of the list
and CalcBarWidth and CalcHistoWidth would be removed (they were not
involved in the most recent program execution).
The Calls menu is a "stack" in that it displays the most recently called
procedure on the top of the list. The Calls menu displays only the eight
most recent procedures; any deeper nesting is not displayed until you
start executing to return through the sequence of procedure calls.
You can experiment with the characteristics of the call stack using the
Fibonacci example at the end of Section 18.1, "Add Watch Command."
Because the Fib procedure is recursive, the number you enter at the prompt
determines the depth of the call stack and the number of procedures in the
Calls menu. After interrupting execution (either by using a watchpoint or
pressing CTRL+BREAK), you can display the Calls menu and use the methods
described above to see the different iterations of the Fib procedure.
Since the procedure is recursive, all the procedure names are identical.
Each one listed represents another instance of the call.
────────────────────────────────────────────────────────────────────────────
Chapter 20 The Options Menu
The Options menu controls some of QuickBASIC's special features, including
those that customize the QuickBASIC screen, set default search paths,
determine the function for the right mouse button, toggle syntax checking
off and on, and switch between Full Menus and Easy Menus.
The Option menu commands are listed below:
■ Display. Customizes the appearance of the QuickBASIC environment
(colors, scroll bars, tab stops).
■ Set Paths. Sets default search paths depending on file type.
■ Right Mouse. Changes effect of clicking the right mouse button (Full
Menus only).
■ Syntax Checking. Toggles syntax checking on and off (Full Menus only).
■ Full Menus. Toggles Full Menus on and off.
When you alter the QuickBASIC environment, either by starting QuickBASIC
with a command-line option (described in Section 10.1.1, "The QB
Command") or by using the Options menu, QuickBASIC saves your
modifications in a file that is called QB.INI. If the file already exists
when you make changes, it is updated; if it does not exist, QuickBASIC
creates it. QuickBASIC uses its default settings in the absence of the
QB.INI file.
20.1 Display Command
When you choose the Display command, the Display dialog box appears. It
allows you to set the background color, foreground color, and the number
of spaces the TAB key advances the cursor in the View window. The dialog
box also lets you decide whether or not scroll bars appear in the View
window. See Figure 20.1.
Types of text to change Color options for Color options
│ foreground text for backgroun
┌┼─────────────────────────────── Display ──┼──────────────────────────┼───
││ ┌────────────────────────────── Colors ──┼──────────────────────────┼┐
││ │ │ Foreground Background ││
││ │ │ ┌─────────┐ ┌─────────┐ ││
││ │ ┌(∙) 1. Normal Text │┌┼─Black ↑ │ Black ↑┐││
││ │ │ └┤│ White ▒ │ White ▒├┘│
│└─┼─┤( ) 2. Current Statement ││ Gray ▒ │ Gray ▒│ │
│ │ │ └┼─BrWhite ▒ │ BrWhite ▒┘ │
│ │ └( ) 3. Breakpoint Lines │ ▒ │ ▒ │
│ │ │ ▒ │ ▒ │
│ │ │ ▒ │ ▒ │
│ │ │ ↓ │ ↓ │
│ │ └─────────┘ └─────────┘ │
│ │ │
│ └────────────────────────────────────────────────────────────────────┘
│
│ ┌───────────────────────── Display Options ──────────────────────────┐
│ │ [X] Scroll Bars Tab Stops: 8 │
│ └─────┼─────────────────────────────────────────────────────┼────────┘
├────────┼─────────────────────────────────────────────────────┼───────────
│ │ < OK > < Cancel > < Help > │
└────────┼─────────────────────────────────────────────────────┼───────────
Turn scroll bars on when checked Number of spaces the TAB key advances
Figure 20.1 Display Dialog Box
Follow these steps to change the background and foreground colors:
1. Move the cursor to the parentheses preceding the color setting you want
to change (Normal Text, Current Statement, or Breakpoint Lines).
2. Press TAB. The cursor moves to the Foreground Color list box. Use the
DIRECTION keys to select the new foreground color for the item you
chose in step 1. The list box item you have selected changes to reflect
the colors you choose.
3. Press TAB again to move to the Background Color list box, then repeat
the color selection process in step 2 for the background color.
4. Press ENTER.
QuickBASIC now reflects your changes.
The Display Options portion of the Display dialog box controls the scroll
bar and TAB key settings. You can turn the View window's scroll bars on
and off by pressing the SPACEBAR when your cursor is in the Scroll Bars
check box (the default setting is "on"). The Tab Stops option controls the
number of spaces the TAB key advances the cursor. Use the setting you find
most helpful for improving the readability of your programs.
20.2 Set Paths Command
The Set Paths command changes the default search paths for specified types
of files.
You may want to keep all files of a particular type within a single
directory for organizational purposes. For example, you might wish to keep
all of QuickBASIC's libraries and any of your own Quick libraries within a
specific subdirectory or subdirectories of your QuickBASIC disk or
directory. Since the environment requires access to its libraries, you
would ordinarily need to provide a path name for each library used.
The Set Paths dialog box lets you type in a search path (up to 127
characters) for your files. This saves you from fully qualifying each path
name every time you access a library or other files not in the current
working directory.
For example, suppose you keep all of your include files and programs in a
directory named QB──BI, which is in a directory named QB──45 on a disk in
your A drive. You would take the following steps to direct QuickBASIC to
automatically look in that directory any time it searched for a file with
the .BI or .BAS extension:
1. Choose the Set Paths command on the Options menu. A dialog box appears.
2. Press the TAB key to move the cursor to the Include files text box.
3. Type in the path name:
A: QB──45QB──BI
See Figure 20.2.
Path to directory
containing files
│
┌───────────────────────────── Set Paths ───┼───────────────────────────
│ Search Path For: │
│ ┌─ ┌──────────────────────┼───────────────────────────
│ │Executable files: │ │
│ │ (.EXE, .COM) └──────────────────────┼───────────────────────────
│ │ │
│ │ ┌──────────────────────┼───────────────────────────
│ │Include files: │A;\QB_45\QB_BI ───────┘
│ │ (.BI, .BAS) └──────────────────────────────────────────────────
│┌┤
│││ ┌──────────────────────────────────────────────────
│││Library files: │
│││ (.LIB, .QLB) └──────────────────────────────────────────────────
│││
│││ ┌──────────────────────────────────────────────────
│││Help file: │
││└─(.HLP) └──────────────────────────────────────────────────
├┼──────────────────────────────────────────────────────────────────────
││ < OK > < Cancel > < Help >
└┼──────────────────────────────────────────────────────────────────────
│
File types
Figure 20.2 Set Paths Dialog Box
4. Press ENTER.
──────────────────────────────────────────────────────────────────────────
NOTE
The search paths you enter in the Set Paths dialog box do not change
paths or environment variables previously set at the DOS level with the
DOS PATH and SET commands. However, paths set with Set Paths are in
effect whenever you are using QuickBASIC.
──────────────────────────────────────────────────────────────────────────
20.3 Right Mouse Command (Full Menus Only)
The Right Mouse command lets you change the effect of clicking the right
mouse button.
When you choose the Right Mouse command, the dialog box in Figure 20.3
appears.
Functions for
right mouse button
┌─────────────── Right Mouse ──────────┼─────┐
│ │ │
│ On right mouse button click: │ │
│ ──┐ │ │
│ (∙) Context-sensitive Help │ │ │
│ ├─┘ │
│ ( ) Execute up to this line │ │
│ ──┘ │
├────────────────────────────────────────────┤
│ < OK > < Cancel > < Help > │
└────────────────────────────────────────────┘
Figure 20.3 Right Mouse Dialog Box
The Right Mouse dialog box lets you select one of two functions for the
right mouse button:
■ Invoking on-line help (same function as the Topic command on the Help
menu). This is the default setting.
■ Executing the program from the beginning of the program to the current
cursor location.
Both functions have advantages in different situations. You may find the
Help function more useful when you are writing your program, especially if
you are new to QuickBASIC. During debugging, you may find the execution
feature more valuable.
If you use the Context-sensitive Help option, remember that the subject of
the help is the word containing the cursor.
20.4 Syntax Checking Command(Full Menus Only)
The Syntax Checking command on the Options menu toggles automatic syntax
checking on and off.
QuickBASIC defaults to the "on" setting, indicated by a bullet (■) next to
the command. To turn syntax checking off, choose the Syntax Checking
command; the bullet disappears. QuickBASIC records your options when you
quit. If you exit QuickBASIC with syntax-checking off, it will remain off
the next time you start QuickBASIC.
When on, this feature checks the syntax of each line when it is entered.
See Also
Section 12.5.2, "Automatic Syntax Checking"
20.5 Full Menus Command
The Full Menus command toggles QuickBASIC's extended menus on and off.
When Full Menus is toggled on, a bullet (■) appears next to the command.
You can use QuickBASIC's menus in either their "easy" or "full" form. In
their easy form, the menus contain all of the functions necessary to
create beginning to intermediate-level programs. Some advanced features do
not appear under Easy Menus in order to simplify the use of the
environment for programmers new to QuickBASIC. Full Menus include an
additional item (the Calls menu) and more commands under each of the other
menus. Once you are comfortable with QuickBASIC and need advanced
features, use the Full Menus option.
When you exit, QuickBASIC saves all of the options you have selected,
including Display options, Search Paths, Syntax Checking, and Full Menus.
When you next return to QuickBASIC your choices will still be active.
────────────────────────────────────────────────────────────────────────────
Chapter 21 The Help Menu
Choosing commands on the Help menu is one way to access QuickBASIC's
on-line help. (For information on other methods of accessing on-line help,
see Section 10.8, "Using Help.")
The Help menu contains the following commands:
■ Index. Displays an alphabetical list of QuickBASIC keywords and a brief
description of each.
■ Contents. Displays a visual outline of the on-line help contents.
■ Topic. Provides syntax and usage information on specific variables and
QuickBASIC keywords.
■ Help On Help. Describes how to use on-line help and common keyboard
shortcuts.
21.1 Index Command
The Index command displays an alphabetical list of the QuickBASIC
keywords. To receive information on a particular keyword, move the cursor
to the line containing that keyword and press F1. QuickBASIC displays the
Help window for that keyword.
You can scroll through the keyword list or jump directly to a specific
letter in the list. For example, if you type G, QuickBASIC moves the
cursor to GET, the first keyword beginning with the letter "G." See Figure
21.1.
┌──────────────── HELP: QuickBASIC Language Keyword Index ────────────┤↑├──
│ ╔═══╗
│═══════════════════════════════════════════════════════════════╣ G ║
│ ╚═══╝
│ GET Statement
│ GOSUB Statement
│ GOTO Statement
│ ╔═══╗
╞═══════════════════════════════════════════════════════════════╣ H ║
│ ╚═══╝
│ HEX$ Function
│ ╔═══╗
╞═══════════════════════════════════════════════════════════════╣ I ║
│←▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒→
Figure 21.1 Index Entries for Help
See Also
Section 21.3, "Topic Command"
21.2 Contents Command
The Contents command displays a table of contents for on-line help. It
provides hints on using the QuickBASIC environment and the BASIC language,
along with useful tables. From here you can transfer to the subject that
interests you. See Figure 21.2.
File Edit View Search Run Debug Calls Options Help
┌──────────────────────── HELP: Table of Contents ────────────────────┤↑├──
│ ◄Help on Help► ◄Contents► ◄Index► ◄Product Support► ◄Copyright►
│──────────────────────────────────────────────────────────────────────────
│◄Using QuickBASIC► ◄BASIC Programming Language►
│
│ ◄Shortcut Key Summary► ◄Functional Keyword Lists►
│ ◄Edit Keys► ◄Syntax Notation Conventions►
│ ◄View Keys►
│ ◄Search Keys► ◄Fundamental Building Blocks►
│ ◄Run and Debug Keys► ◄Data Types►
│ ◄Help Keys► ◄Expressions and Operators►
│ ◄Modules and Procedures►
│ ◄Limits to QuickBASIC► ◄Programs►
│ ◄VErsion 4.5 Differences►
│ ◄ASCII Character Codes►
│ ◄Survival Guide► ◄Keyboard Scan Codes►
│
│←▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒→
Figure 21.2 Table of Contents for Help
For detailed information on a particular topic, place your cursor on the
topic and press F1. QuickBASIC displays on-line help on that topic.
For example, the Table of Contents window shows several entries under
"Using QuickBASIC." If you move the cursor to "Editing keys" and press F1,
a screen appears with the most frequently used editing shortcut keys.
21.3 Topic Command
The Topic command provides specific information on the syntax and usage of
the QuickBASIC variable, symbol, keyword, menu, command, or dialog box at
or containing the cursor. When the Topic command is active, the subject on
which it will provide on-line help appears after the word Topic. Choosing
the Topic command is the same as pressing F1.
You can get help on any keyword or variable at any time by typing the word
or name and immediately choosing the Topic command.
If you choose the Topic command whenever you encounter a syntax error, you
can immediately correct the usage of your statement. For example, suppose
you enter the line below, which is missing the word TO and instead
contains a comma:
FOR i% = 1,10
QuickBASIC flags the syntax error with the message Expected: TO. Press F1
or the Help button for help on the error itself. For information on the
keyword FOR, move the cursor to the FOR statement and choose the Topic
command. QuickBASIC keeps your program code visible at the bottom of the
screen. See Figure 21.3.
File Edit View Search Run Debug Calls Options Help
┌───────────────── HELP: FOR...NEXT Statement QuickSCREEN ────────────┤↑├──
│ ◄QuickSCREEN► ◄Detail► ◄Example► ◄Contents► ◄Index►
│──────────────────────────────────────────────────────────────────────────
│FOR...NEXT - a control flow statement that repeats a block of
│ statements a specified number of times
│Syntax
│ FOR counter = start TO and [STEP increment]
│ [statements]
│ NEXT [counter [,counter...]]
│
│ ■ counter is a numeric variable used as the loop counter
│ ■ start is the initial value and end is the final value of the counter
│ ■ increment is the amount the counter is incremented each time
│ through the loop
│
│See Also EXIT FOR DO...LOOP WHILE...WEND
│
├──────────────────────────────── Untitled ───────────────────────────┤↑├──
│FOR i% = 1,10
│←▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒→
├─────────────────────────────── Immediate ────────────────────────────────
│
│
<Shift+F1=Help> <F6=Window> <F2=Subs> <F5=Run> <F8=Step> C 00001:003
Figure 21.3 Help on the FOR...NEXT Statement
To copy sample code from the FOR help screen into your program, do the
following:
1. Choose the Example hyperlink at the top of the window.
2. Select the example code and choose Copy from the Edit menu.
3. Press ESC to close the Help window.
4. Move the cursor to the place in your program you want the text to
appear, and choose Paste from the Edit menu.
You can customize the pasted code or use it as it is.
Shortcut Key
F1
21.4 Help On Help Command
The Help on Help command describes how to use the QuickBASIC on-line help
system.
The Help on Help screen gives a description of the main help features. For
more specific information, press ESC to exit Help on Help, and use the
Topic command on the Help menu or press F1.
File Edit View Search Run Debug Calls Options Help
┌─────────────────────────── HELP: Help on Help ──────────────────────┤↑├──
│ ◄Help on Help► ◄Contents► ◄Index► ◄Product Support►
│──────────────────────────────────────────────────────────────────────────
│ Use Help as follows:
│
│ ■ To get help anytime, press F1 or click the right mouse button.
│ ■ To get help on any part of a BASIC statement, a QuickBASIC menu item
│ or dialog box, position the cursor there press F1.
│ ■ To remove the help information from the screen, press ESC.
│ ■ To scroll help information, press PGDN.
│
│ Look for the help display in either
│ ■ The Help window at the top of the screen
│ ■ A dialog box which pops up in the center of the screen
│
│←▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒→
Figure 21.4 Help on Help Screen
Shortcut Key
SHIFT+F1
────────────────────────────────────────────────────────────────────────────
Glossary
The purpose of this glossary is to define unique terms used in all the
manuals that accompany QuickBASIC Version 4.5. Neither the individual
definitions nor the list of terms is intended to be a comprehensive
dictionary of computer-science terminology.
8087, 80287, or 80387 coprocessor Intel(R) hardware products dedicated to
very fast number processing.
absolute coordinates Horizontal and vertical distances from the screen's
upper-left corner, which has the coordinates (0,0). Absolute coordinates
are measured in pixels. See also "physical coordinates."
address A location in memory.
algorithm A step-by-step procedure for solving a problem or computing a
result.
animation A QuickBASIC debugging feature in which each line in a running
program is highlighted as it executes. The Trace On command from the
Debug menu turns on animation.
argument A data item supplied to a BASIC statement, function, procedure, or
program. In the following example, the string "Hello" is an argument to
the BASIC statement PRINT: "Hello". An argument may be a constant or a
variable. Arguments are often used to pass information from one part of
a program to another. Use the COMMAND$ function to make DOS command line
arguments available to the programs.
arithmetic conversion Converting numbers between integral and
floating-point types.
array A sequentially numbered set of elements with the same type.
array bounds The upper and lower limits of the dimensions of an array.
ASCII (American Standard Code for Information Interchange) A set of 256
codes that many computers use to represent letters, digits, special
characters, and other symbols. Only the first 128 of these codes are
standardized; the remaining 128 are special characters that are defined
by the computer manufacturer.
aspect ratio The ratio of a video screen's width to its height. This term
is also frequently used to describe pixels. If you think of a pixel as
being rectangular, its aspect ratio would be the ratio of its width to
height. A typical IBM PC display has an aspect ratio of about 4:3.
assignment The process of transferring a value to a variable name. The
statement X = 3 assigns x a value of 3.
attributes Color, intensity, blinking, and other displayed characteristics
of characters or pixels.
automatic variable A variable in a SUB or FUNCTION procedure whose value is
not saved between invocations of the procedure. Automatic variables are
frequently used in recursive procedures where you do not want values
saved between calls.
base name The part of a file name before the extension. For example, SAMPLE
is the base name of the file SAMPLE.BAS.
binary A mathematical term referring to the base-two numbering system,
which uses only two digits: 0 and 1.
binary file In input/output operations, files or data that contain
nonprinting characters as well as ordinary ASCII characters. Binary file
access is the ability to access any byte within a file, treating it as a
numeric value rather than as text.
BIOS (Basic Input/Output System) Machine-language programs built into a
computer. These programs provide the lowest level of operations in a
computer system. You can use the BIOS programs directly with the
INTERRUPT and CALL INTERRUPTX statements.
bit The smallest unit of information used with computers; corresponds to a
binary digit (either 0 or 1). Eight bits make up one byte.
block A sequence of declarations, definitions, and statements.
breakpoint A specified location where program execution will halt during
debugging. See "watchpoint" for a description of variable breakpoints.
byte The unit of measure used for computer memory and data storage. One
byte contains eight bits and can store one character (a letter, number,
punctuation mark, or other symbol).
call by reference See "pass by reference."
call by value See "pass by value."
CGA (Color Graphics Adapter) A video adapter capable of displaying text
characters or graphics pixels. Color can also be displayed with the
appropriate display monitor.
character string A group of characters enclosed in quotation marks ( " " ).
check box A pair of brackets on a QuickBASIC dialog box where you turn an
option on or off. An X appears in the box when the option is on.
choose To carry out a command by performing an action such as using a
command button from a dialog box or an item from a menu.
click To press and release one of the mouse buttons (usually while pointing
the mouse cursor at an object on the screen).
Clipboard A storage area that holds copied or cut text. Text does not
accumulate in the Clipboard: new text added to the Clipboard replaces
any text that was already there. You can use the Paste command to insert
text from the Clipboard into a file.
communications port See "port."
compile To translate statements into a form that the computer can execute.
compiler A program that translates statements into a language understood by
the computer.
constant A value that does not change during program execution.
current directory The directory in which DOS looks for files unless
otherwise instructed.
current drive The drive containing the disk on which DOS looks for a
directory or file unless otherwise instructed.
cursor The blinking line or box on the screen. The cursor indicates the
current location where text from the keyboard will appear.
data The numbers and text processed by a computer in doing its work.
data file A file that contains the data used or generated by a program;
data can be numbers, text, or a combination of the two.
debugger A program that helps to locate the source of problems discovered
during run-time testing of a program.
declaration A construct that associates the name and characteristics of a
variable, function, or type.
DEF FN function The object defined by a single-line DEF FN statement or by
a DEF FN...END DEF block. (A FUNCTION procedure is generally preferred
to a DEF FN function because a procedure is more portable and modular.)
default A setting that is assumed unless you specify otherwise.
default data type The type that BASIC uses for data unless you use a
DEFtype statement to specify otherwise. The default type for numeric
data is single precision.
DEFtype A name used in these manuals for the group of BASIC statements that
redefine a program's default variable type (DEFDBL, DEFINT, DEFLNG,
DEFSNG, DEFSTR).
device A piece of computer equipment, such as a display or a printer, that
performs a specific task.
device name The name by which DOS refers to a device (for example, PRN,
LPT1, LPT2, or LPT3 for a printer). Device names are treated like file
names by DOS.
dialog box A box that appears when you choose a menu command that requires
additional information.
dimension The number of subscripts required to specify a single array
element. For instance, the statement DIM A$(4,12) declares a
two-dimensional array, while DIM B$(16,4,4) declares a three-dimensional
array.
DIRECTION keys A set of keys, found on many computer keyboards, that move
the cursor left, right, up, or down on the screen. These keys usually
have arrows on their key tops.
directory The index of files that DOS maintains on a disk.
document A way of classifying a file as text when you load it into the
QuickBASIC editor. Loading a file as a document turns off syntax
checking, capitalization of keywords, and other smart-editor features.
You can load a BASIC program as a document if you want to edit it as you
would with a word processor.
double click To press the mouse button twice quickly (usually while
pointing the mouse cursor at an object on the screen).
double precision A real (floating-point) value that occupies eight bytes of
memory. Double-precision values are accurate to 15 or 16 digits.
drag Pointing the mouse cursor at an object on the screen and pressing a
mouse button, then moving the mouse while holding the button down. The
object moves in the direction of the mouse movement. When the item is
where you want it, release the button.
dynamic array An array whose memory location is allocated when the program
runs. The locations are not predetermined and can change during the
course of program execution.
EGA (Enhanced Graphics Adapter) A video adapter capable of displaying in
all the modes of the color graphics adapter (CGA) and many additional
modes. The EGA supports both text and graphics at medium resolution in
up to 64 colors.
emulator A floating-point math package that uses software to perform the
same operations as a hardware math coprocessor.
enabled event An event for which QuickBASIC actively checks. Events are
enabled by the ON event statements.
event An action the computer can be programmed to detect. Events include
items such as mouse clicks, menu selections, keyboard activity, and time
passage.
event trapping To detect and respond to events, for example, to branch to
an appropriate routine.
executable file A file with the extension .EXE, .COM, or .BAT. Executable
files can be run by typing the file name at the DOS prompt.
execute To run a program or carry out a specific statement in the Immediate
window.
exponentiation The raising of a number x to a power y; the number x is
multiplied by itself y times. For example, 2^3 is 2 * 2 * 2, or 2 raised
to the power of 3.
expression A combination of operands and operators that yields a single
value.
extension The part of a file name following the period. For example, .DAT
is the extension in the file name TEST.DAT.
far address A memory location specified by using a segment (a location of a
64K block) and an offset from the beginning of the segment. Far
addresses require four bytes──two for the segment, and two for the
offset. A far address is also known as a segmented address.
file buffer An area in memory in which temporary data are stored.
QuickBASIC keeps a copy of the file in a buffer and changes it as you
edit. This buffer is copied to disk when you save the file.
filespec The complete specification of a file. The filespec can include a
drive letter, path name, file name, and extension.
flags register A register containing information about the status of the
central processing unit and the last operation performed.
floating point Notation, similar to scientific notation, that is a
convenient method for expressing very large numbers, very small numbers,
or numbers with fractions. A floating-point number has two parts: an
exponent and a fractional part known as the mantissa. See "IEEE format."
formal parameters Variables that receive the arguments passed to a function
or subprogram. See "parameter."
FUNCTION A block of statements beginning with FUNCTION and ending with END
FUNCTIONthat defines a procedure. FUNCTION procedures can be used
instead of the DEF FN functions used in older forms of BASIC.
function declaration A declaration that establishes the name and type of a
function. The function itself is defined explicitly elsewhere in the
program.
function definition A statement block that specifies a function's name, its
formal parameters, and the declarations and statements that define what
it does (i.e., carry out the function).
global constant A constant available throughout a program. Symbolic
constants defined in the module-level code are global constants.
global symbol A symbol available throughout a program. Function names are
always global symbols. See also "symbol" and "local symbol."
global variable A variable available throughout a program. Global variables
can be declared in COMMON, DIM, or REDIM statements by using the SHARED
attribute.
heap An area of random-access memory used by BASIC to store, among other
things, variables and arrays.
hexadecimal The base-16 numbering system whose digits are 0 through F (the
letters A through F represent the digits 10 through 15). Hexadecimal
numbers are often used in computer programming because they are easily
converted to and from binary, the base-2 numbering system the computer
itself uses.
highlight A reverse-video area in a text box, window, or menu marking the
current command chosen or the text that has been selected for copying or
deleting.
hyperlink A link between two related pieces of information. Hyperlinks
appear between two triangles in help screens.
I/O redirection See "redirect."
IEEE format An international standard method of representing floating-point
numbers in the computer's hardware. IEEE format gives more accurate
results than the Microsoft Binary format used in earlier versions of
QuickBASIC and makes it easier to use a math coprocessor. The acronym
IEEE stands for Institute of Electrical and Electronics Engineers, the
organization that developed this standard. See "floating point."
Immediate window The area at the bottom of the QuickBASIC screen used to
enter statements and execute them immediately.
include file A text file that is translated into a program with the
$INCLUDE metacommand.
input/output (I/O) A term that refers to the devices and processes involved
in the computer's reading (input) and writing (output) data.
input The data that a program reads.
insert mode A mode for inputting data to the QuickBASIC environment. In
this mode, you can insert new characters rather than replace characters
already in the file as they are entered.
integer A whole number represented inside the machine as a 16-bit two's
complement binary number. An integer has a range of -32,768 to +32,767.
See "long integer."
interface The boundary between two systems or entities, such as a disk
drive and the computer, or the user and a program.
interpreter A program that translates and executes one BASIC statement at a
time. An interpreter translates a statement every time it executes the
statement. BASICA is a language interpreter. By comparison, a compiler
translates all statements prior to executing any.
keyword The name of a BASIC statement, function, or operator. Examples of
keywords are MOD, OPEN, OR, PRINT, and SIN.
label An identifying string that marks, precedes, or denotes a specific
location in a program. Labels are used by GOTO statements.
link To resolve references among the modules in a program and from the
program to library routines. The link step results in a complete program
ready for execution.
list box A box that lists a series of items. For example, the box that
lists files in the Open Program dialog box is a list box. See also
"dialog box."
local constant A constant whose scope is limited to a particular unit of
code, such as the module-level code, or a procedure within a module. All
constants defined in CONST statements inside a procedure are local
constants. See "global constant."
local symbol A symbol that has value only within a particular function. A
function argument or a variable declared as static within a function can
be a local symbol. See also "global symbol."
local variable A variable whose scope is confined to a particular unit of
code, such as the module-level code, or a procedure within a module. All
variables in a procedure are local unless they appear in a SHARED
statement within the procedure, or in a COMMON SHARED, DIM SHARED, or
REDIM SHARED statement at the module level of the module containing the
procedure definition. See "global constant."
logical device A symbolic name for a device that the user can cause to be
mapped to any physical (actual) device.
long integer A whole number represented inside the machine by a 32-bit
two's complement value. Long integers have a range of -2,147,483,648 to
+2,147,483,647. See "integer."
LPT1, LPT2, LPT3 Abbreviations for line printer. The names refer to the
three ports to which parallel printers can be attached.
main module The module containing the first executable statement (the
program's entry point). See "module."
math coprocessor An optional hardware component, such as an 8087, 80287, or
80387 chip, that improves the speed of floating-point arithmetic.
QuickBASIC automatically takes advantage of a math coprocessor if it is
present, or emulates it in software if it is not. See "floating point."
MCGA (Multicolor Graphics Array) A printed-circuit card that controls the
display. The MCGA card, located in the system unit of a computer, shows
both text and graphics at low to medium resolution in up to 256 colors.
MDA (Monochrome Display Adapter) A printed-circuit card that controls the
display. The MDA shows text only at medium resolution in one color.
menu bar The bar at the top of the QuickBASIC display containing the menu
titles.
metacommands Special commands, enclosed in comments in a source file, that
tell the compiler to take certain actions while it is compiling the
program. For example, the $INCLUDE metacommand tells the compiler to
translate statements found in a specified file. See "include file."
Microsoft Binary format A method of representing floating-point numbers
internally. Microsoft Binary format is used by versions of QuickBASIC
prior to Version 3.0. See "floating point" and "IEEE format."
modular programming An approach to programming in which the program is
divided into functional blocks, each performing a specific task.
module A section of program code that is stored in a separate file and can
be separately compiled. Every program has at least one module (the main
module).
module-level code Program statements within any module that are outside
a FUNCTION or SUB definition. Error- or event-handling code and
declarative statements such asCOMMON, DECLARE, and TYPE can appear only
at the module level.
mouse A pointing device that fits under your hand and rolls in any
direction on a flat surface. By moving the mouse, you move the mouse
cursor in a corresponding direction on the screen.
mouse cursor The reverse-video rectangle that moves to indicate the current
position of the mouse. The mouse cursor appears only if a mouse is
installed.
multidimensional array An array of with more than one subscript, for
example, x(5,35). A multidimensional array is sometimes referred to as
an array of arrays.
near address A memory location specified by using only the offset from the
start of the segment. A near address requires only two bytes of memory.
See also "far address."
null character The ASCII character encoded as the value 0.
object file A file (with the extension .OBJ) containing relocatable machine
code produced by compiling a program and used by the linker to generate
an executable file.
offset The number of bytes from the beginning of a segment in memory to a
particular byte in that segment.
operand A constant or variable value that is manipulated in an expression.
operator One or more symbols that specify how the operand or operands of an
expression are manipulated.
output The result of a program's processing, usually based on some form of
input data.
output screen The screen where output appears when you run a program in the
QuickBASIC environment. The output screen is the same as it would be if
you ran the debugged program outside of QuickBASIC.
overflow An error condition that occurs when the value assigned to a
numeric variable falls outside the allowable range for that variable's
type.
overlay Part of a program that is read into memory from disk only if and
when it is needed.
palette The displayable colors for a given video mode. The CGA mode
operates with a set of predetermined palette colors. The EGA, MCGA, and
VGA color modes operate with a redefinable palette of colors.
parallel port The port to which the printer is usually attached.
parameter A variable symbol in a DEF FN, FUNCTION, or SUB statement.
Parameters are replaced by actual variables and values when you invoke
the function or subprogram.
pass by reference To transfer the address of an argument to a SUB or
FUNCTION. Passing by reference allows a procedure to change the values
of arguments passed to it.
pass by value To transfer the value (rather than the address) of an
argument to a SUB or FUNCTION.
path name The complete specification that gives the location of a file. A
path name usually includes a drive letter followed by a colon, one or
more directory names, and a file name.
physical coordinates The screen coordinates. The physical coordinates (0,0)
refer to the upper-left corner of the screen, unless you have defined a
graphics viewport with a VIEW statement, in which case (0,0) are the
coordinates of the upper-left corner of the viewport. The range of the
physical coordinates depends on the display adapter, the monitor, and
the specifications set by the SCREEN statement. Units are pixels. See
also "absolute coordinates" and "view coordinates."
place marker A location in the program code to which you can return by
pressing a control code.
pointer See "mouse cursor."
port An electrical connection through which the computer sends and receives
data to and from devices or other computers.
precedence The relative position of an operator in the hierarchy that
determines the order in which expressions are evaluated.
procedure A general term for a SUB or FUNCTION. See "FUNCTION" and "SUB."
procedure call A call to a SUB or FUNCTION.
program One or more modules linked together to form a complete set of
executable instructions.
program step To highlight and execute the next instruction.
prompt A request displayed by the computer for you to provide some
information or perform an action.
QB Advisor The detailed, context-sensitive on-line help on the BASIC
language.
Quick library A file produced with the Make Library command or with the /Q
option of the LINK command. A Quick library contains procedures for use
in the QuickBASIC environment as the program is developed. Quick
libraries were known in previous versions of QuickBASIC as user
libraries; however, user libraries cannot be used as Quick libraries,
and vice versa.
random-access file A file that can be read or written in any order. See
"sequential file."
read-only file A file whose read-only attribute is set so that its contents
can be displayed and read, but not changed.
record A series of fields treated as a meaningful unit in a data file or a
variable declared as having a user-defined type. See "user-defined
type."
recursion The practice of having a subprogram call itself; some algorithms
can be coded quickly and efficiently by using recursion.
redirect To specify a device (other than the default device) from which a
program will receive input or to which it will send output. Normally
program input comes from the keyboard, and program output goes to the
screen.
reference bar The line on the bottom of the QuickBASIC environment screen
containing frequently used commands and keyboard shortcuts.
relational database A database in which any field or record can be
associated with any other field or record.
registers Areas in the processor where data can be temporarily stored
during machine-level processing. The registers used in the 8086-family
of processors are: AX, BX, CX, DX, SP, BP, SI, DI, DS, ES, SS, CS, IP,
and the flags register. See "flags register."
root directory The main directory that DOS creates on each disk. The root
directory is the top directory in a hierarchical file system.
run time The time during which a program is executing. Run time refers to
the execution time of a program, rather than to the execution time of
the compiler or the linker. Some errors──known as run-time errors──can
be detected only while the program is running.
run-time library A file containing the routines required to implement
certain language functions.
run-time module A module containing most of the routines needed to
implement a language. In QuickBASIC, the run-time module is an
executable file named BRUN45.EXE and is, for the most part, a library of
routines.
scope The range of statements over which a variable or constant is defined.
See "global constant," "global variable," "local constant," and "local
variable."
scroll To move text up and down, or left and right, to see parts that
cannot fit within a single screen.
scroll bars The bars that appear at the right side and bottom of the View
window and some list boxes. Scroll bars allow you to scroll the contents
of a View window or text box with the mouse.
segment An area of memory, less than or equal to 64K, containing code or
data.
select To pick items, such as option buttons, in a dialog box. This verb
also describes the action of highlighting areas of text or graphics to
edit.
sequential file A file that can be read or written only in order from first
byte to last. See "random-access file."
serial port The communications port (COM1, COM2, COM3, or COM4) to which
devices, such as a modem or a serial printer, can be attached.
simple variable A BASIC variable that is not an array. Simple variables can
be of numeric, string, or user-defined types.
single precision A real (floating-point) value that occupies four bytes of
memory. Single-precision values are accurate to seven decimal places.
smart editor Collective term for QuickBASIC's advanced editing features,
including syntax checking, automatic keyword capitalization, and
automatic procedure declaration.
source file A text file containing BASIC statements. Although all modules
are source files, not all source files are modules (include files, for
example).
QuickBASIC uses source files in two different formats. Source files
saved in the QuickBASIC format load quickly but cannot be directly read
or manipulated by an ordinary text editor. Source files saved as text
files (ASCII files) can be read or changed by any text editor.
stack An area of random-access memory used by BASIC to store data (e.g.,
information), such as intermediate results of some arithmetic
computations, automatic variables in procedures, and procedure
invocation information.
stand-alone file An executable file that can be run without a run-time
file──a compiled program linked with BCOM45.LIB.
standard input The device from which a program reads its input unless the
input is redirected. In normal DOS operation, standard input is the
keyboard.
standard output The device to which a program sends its output unless
redirected. In normal DOS operation, standard output is the display.
statement A combination of one or more BASIC keywords, variables, and
operators that the compiler or interpreter treats as a single unit. A
BASIC statement can stand by itself on a single program line. The term
statement refers to one-line statements such as OPEN or INPUT as well as
entire multiline compound statements such as IF...END IF or SELECT
CASE...END SELECT. Parts of compound statements such as ELSE or CASE are
referred to as clauses.
static array An array whose memory location is allocated when the program
is compiled. The memory location of a static array does not change while
the program runs.
stop bit A signal used in serial communications that marks the end of a
character.
string A sequence of characters, often identified by a symbolic name. In
this example, Hello is a string: PRINT "Hello". A string may be a
constant or a variable.
SUB A unit of code delimited by the SUB and END SUB statements. A SUB
(usually called a SUB procedure) provides an alternative to the older
BASIC GOSUB type of subroutine.
subprogram See "SUB."
subroutine A unit of BASIC code terminated by the RETURN statement. Program
control is transferred to a subroutine with a GOSUB statement. (Also
called a GOSUBblock.)
symbol A name that identifies a location in memory.
symbolic constant A constant represented by a symbol rather than the
literal constant itself. Symbolic constants are defined using the CONST
statement.
text Ordinary, printable characters, including the uppercase and lowercase
letters of the alphabet, the numerals 0 through 9, and punctuation
marks.
text box A box in which you type information needed to carry out a command.
A text box appears within a dialog box.
text editor A program that you use to create or change text files.
text file A file containing text only.
tiling The filling of a figure with a pattern (instead of a solid color) by
using the graphics statement PAINT.
title bar A bar, located at the top of a View window, that shows the name
of the text file or module (and procedure, if appropriate) currently
displayed in that window.
toggle A function key or menu selection that turns a feature off, if it is
on, or turns the feature on, if it is off. When used as a verb, toggle
means to reverse the status of a feature. For example, the Trace On
command on the Debug menu toggles tracing on or off.
two's complement A type of base-2 notation used to represent positive and
negative in which negative values are formed by complementing all bits
and adding 1 to the results.
type The numeric format of a variable. Types include integer, long integer,
single precision, and double precision. Types may also be user-defined.
type checking An operation in which the compiler verifies that the operands
of an operator are valid or that the actual arguments in a function call
are of the same types as the corresponding formal parameters in the
function definition.
type declaration A declaration that defines variable names as members of a
particular data structure or type.
underflow An error condition caused when a calculation produces a result
too small for the computer to handle internally.
unresolved external A procedure declared in one module, but not defined in
another module that is linked with it. Unresolved external references
are usually caused by misspellings or by omitting the name of the module
containing the procedure from the LINK command line.
user-defined type A composite data structure that can contain both string
and numeric variables (similar to a C-language structure or Pascal
record). User-defined types are defined with TYPE statements. The data
structure is defined by a TYPE...END TYPE statement.
variable A value that can──and usually does──change during program
execution.
view coordinates Pairs of numbers (for example, x and y) that uniquely
define any point in two-dimensional space. The numbers x and y can be
any real numbers. View coordinates can be mapped to the screen with the
graphics WINDOW statement. View coordinates let you plot data using
coordinates appropriate to the graph or picture without worrying about
the actual screen coordinates. See "physical coordinates."
View window The main editing window and the window into which programs
load.
VGA (Video Graphics Array) A printed-circuit card that controls the
display. A VGA card shows both text and graphics at medium to high
resolution in up to 256 colors.
Watch window A window that displays information about variables or
expressions that you are monitoring during program execution. For each
watched item, the Watch window displays the item's originating location,
its name, and its current value if the item is watchable.
watchable A debugging term that describes whether a variable or expression
can be watched in the current execution location. An item is watchable
only during execution of the part of the program from which you entered
the item in the Watch window.
watchpoint An expression (such as X = 3) that stops program execution when
it becomes true. Watchpoints can slow program execution. See
"breakpoint."
wild card One of the DOS characters (? and *) that can be expanded into one
or more characters in file-name references.
window An area on the screen used to display part of a file or to enter
statements. Window refers only to the area on the screen, and does not
refer to what is displayed in the area. The term window also refers to
the portion of a view coordinate system mapped to the physical
coordinates by the WINDOW graphics statement. See "Immediate window,"
"View window,"and "Watch window."
────────────────────────────────────────────────────────────────────────────
Index
Symbols
. (dot) beside command
... (ellipsis dots) with menu item
Numbers
80287
80387
8087
A
Absolute coordinates
Active window
changing
changing size
described
line and column counters
switching
Add Watch command
Address
defined
near
Advisor. See QB Advisor
Algorithms
ALT key
described
ALT key
dialog boxes, use in
entering high-order ASCII characters
menus and commands
Altering text
AND operator
Animation
Apostrophe (')
Arguments
Arithmetic
conversion
floating point
overflow
Array bounds
checking
defined
Array elements, specifying
Array variables
Arrays
defined
dynamic
multidimensional
static
Arrow keys. See DIRECTION keys
ASCII characters
corresponding to control sequences
entering high-order
set
Aspect ratio
Assignment
Assignment statement
Attributes
Automatic formatting
Automatic syntax checking
B
/B option (QB)
Bar, menu
Base name
BASIC command-line compiler. See BC
BASICA programs, running with QuickBASIC
BC
BCOM45.LIB
BIOS
Bit, defined
Black-and-white monitors. See Monitors, monochrome
Block
Boolean expressions
compound
precedence of evaluation
simple
Branching
Break on Errors command
Breaking out of programs
Breakpoints
defined
deleting
described
setting
Breaks, checking at run time
BRUN45.EXE
BRUN45.LIB
Buffer
Bugs
Buttons, right mouse
Byte
C
/C option (QB)
Calculations
floating point
Immediate window
Call by reference. See Passing by reference
Call by value. See Passing by value
Calls menu
Calls, procedure
Canceling commands
CAPS LOCK/NUM LOCK indicator
illus
described
Case sensitivity
CGA. See Color Graphics Adapter
CHAIN statement
Change command
described
dialog box, illus.
Changing
active window
default search paths
main modules
programs
screen display
text
values of variables
window size
Character strings
Check boxes
defined
described
illus.
Checking
syntax
types
Choosing
commands
Easy Menus
ENTER key
keyboard
menus
mouse
defined
CHR$ function
Clear All Breakpoints command
Clear command
Clearing
screens
View window
Clicking
Clipboard
Closing Help
/CMD option (QB)
Code
module level
Color Graphics Adapter (CGA), defined
Colors. See Screen colors
Column counter, illus.
Command buttons
described
Example
Help
illus.
Make EXE
Make EXE and Exit
Make Library and Exit
Program
Remarks
COMMAND$ function
Commands
Add Watch
availability
Break on Errors
canceling
Change
choosing
Easy Menus
ENTER key
keyboard
menus
mouse
Clear
Clear All Breakpoints
Contents
Continue
Copy
Create File
Cut
debugging
Debug menu
described
F10
F7
F8
F9
function keys
(table)
table
Delete Watch
Display
DOS Shell
editing (table)
Execute to cursor
Exit
Find
Full Menus
Help
Help on Help
History On
Include File
Include Lines
Index
Instant Watch
Label
Load File
Make EXE File
dialog box, illus.
introduction
Make Library
Merge
New FUNCTION
New Program
New SUB
Next Statement
Next SUB
Open Program
Output Screen
Paste
Print
defined
dialog box, illus.
Help
procedure stepping
QB
Repeat Last Find
Restart
Right Mouse
Save
Save All
Save As
Selected Text
Set Main Module
Set Next Statement
Set Paths
shortcut keys
single stepping
Split
Start
starting QuickBASIC
SUBs
defined
moving procedures
Syntax Checking
Toggle Breakpoint
Topic
Trace On
Undo
Unload File
Comments, appearing in QCARDS
COMMON statement
Compile
Compiler
Compiler/environment differences
Constants
defined
local
symbolic
Contents command
Context
debugging
execution
Context-sensitive help
Continue command
Continuing suspended programs
Control-sequence characters
Conventions, document
Conversion, arithmetic
Coordinates
absolute
physical
Coprocessor
Copy command
Copying
examples from help
text
Create File command
Creating
executable files
FUNCTION procedures
libraries
main modules
new subprograms
procedures
CTRL key, entering special characters
CTRL+BREAK
Current directory
Current drives
Current Statement option (Display command)
Cursor
defined
illus.
moving
Customizing screen display
Cut command
D
Data
Data types, default
changing
defined
for procedures
Database
Debug menu
commands (list)
illus.
(table)
Debugger
defined
symbolic
Debugging
breakpoints
commands
debug menu
F10
F7
F8
F9
function keys
Run menu
context, illus.
Continue command
features
Immediate window
introduction
Next Statement command
procedures
watch variables
Watch window
while writing code
Debugging features (table)
Decision-making
Declarations
defined
procedures, automatic
DECLARE statement, procedure declarations
DEF FN function
defined
Watch window
Default
Default data types
changing in procedures
for procedures
Default search paths
DEFtype
defined
introduction
Delete Watch command
closing Watch window
deleting variables
Deleting
breakpoints
modules
text, command summary
variables from Watch Window
Details command button
Devices
defined
logical
names
Dialog boxes
clearing
defined
illus.
Merge command
Print command
selecting items
setting options
text box
DIM statement
Dimensions
DIRECTION keys
defined
use with menus
Directories
changing from within QuickBASIC
changing search paths
current
defined
listing
root
Display command
Division
DO statement, Help, illus.
Document
Document conventions
DO...LOOP
defined
terminating condition
UNTIL version
WHILE version
DOS, returning to
DOS Shell command
Dots, marking command
Double precision
Double-click
Drag
Drives
Duplicating text. See Copying
Dynamic arrays
E
Easy Menus
commands, choosing
described
vs. full
windows available with
Edit menu
Clear command
commands (list)
Copy command
Cut command
New FUNCTION command
New SUB command
Syntax Checking command
Undo command
Editing
commands (table)
include files
material from Help
Editor
automatic formatting
entering text
selecting text
syntax checking
text
EGA. See Enhanced Graphics Adapter
Ellipsis dots (...) with menu item
Emptying View window
Emulator
Enabled events
Enhanced Graphics Adapter (EGA)
Entering
special characters
text
Environment/compiler differences
Error checking, executable files
ERROR function
Error messages
clearing
help for
Errors
correcting
running programs
run-time
checking
line numbers
reporting locations
simulating
syntax, checking
typing
Closing menus, Esc key
ESC key
Event trapping
defined
Quick libraries
Events
Example code
copying from Help
Help hyperlinks
Example command button
EXE requiring BRUN45.EXE option
Executable files
Executable files
creating
defined
Quick libraries
stand-alone
Execute option (QB)
Execute to cursor command
Executing
all statements of procedures
commands. See Choosing commands
programs
right mouse button
suspending
to cursor
Exit command
Exiting QuickBASIC
Expressions
defined
simple
use
watch
F
F1 key
Falsity, representation
Fibonacci sequence
File menu
commands (list)
Create File command
DOS Shell command
Exit command
illus.
Load File command
Merge command
Open Program command
Print command
Save All command
Save As command
Save command
Unload File command
Files
changing default search paths
data
executable
creating
defined
error checking in
Quick libraries
stand-alone, creating
include
defined
finding
nesting
viewing and editing
viewing only
inserting in active window
loading
.MAK
merging
object
printing
QB.INI
read only
saving
sequential
source
stand-alone
text
filespec
Find command
described
dialog box, illus.
options (table)
restrictions (table)
FindingSearching
include files
text
Fixed disk based Help
Flags
Floating point
defined
Floating-point
arithmetic, executable files
variables
Floppy disk-based Help
Floppy disk-based QB Advisor
Flow, programs, tracing
Formal parameters
Formats
IEEE
Microsoft binary
Formatting, automatic
FOR...NEXT loop
Full Menus
Function declarations
Function definitions
Function keys, debugging
FUNCTION procedures
creating
default data type
naming
viewing
Functions, conversion option (QB)
G
/G option (QB)
Global symbols
Global variables
GOSUB statement
H
/H option (QB)
Hard disk-based help
Hardware needed for running QuickBASIC
Heap
Help
command buttons
constructing statements with
context sensitive
copying examples from
copying syntax blocks from
described
editing material from
error messages
examples
files
floppy-disk system
hard-disk system
help with
hyperlinks
invoking on line
keys (table)
keywords
command button
described
illus.
listing with Index
language
missing Help files
on-line
outline of system
place markers in
printing text from
QB Advisor
right mouse button
sample programs
searching for Help files
Set Paths command for files
syntax
trouble evoking
using
Help menu
commands (list)
Contents command
Help on Help command
Index command
introduction
Topic command
Help On Help command
Help on Help command
Help, on-lineHelp
Help window
described
illus.
moving in
Hexadecimal, defined
Hierarchical filing system (HFS)
Highlight
High-order ASCII characters
High-resolution-display option (QB)
History Back
History Forward
History On command
Hyperlinks
I
IEEE format
IF...THEN...ELSE statement
defined
help, illus.
syntax
Immediate window
calculations
calling procedures from
capacity
changing, active window
context
debugging in
defined
described
illus.
limits
running statements in
run-time error messages
run-time errors, simulating
size, changing
statements not supported
testing programs
variable values, changing
Implicit links
#INCLUDE metacommand
Include files
defined
finding
nesting
viewing and editing
viewing only
Included File command
Included Lines command
Indentation controls
Indenting
program blocks
text
Index command
described
screen, illus.
using
Input
defined
standard
INPUT statement
Input/output (I/O), defined
Insert mode
defined
described
Inserting
commands, summary
text
Installing QuickBASIC
Instant Watch command
dialog box, illus.
symbol help
Integer variables
Integers
Interface
Interpreter
I/OInput/output
K
Key combinations
See also Shortcut keys
cursor movement
described
scrolling
Keyboard
choosing commands from
moving in Help windows
Keys
control (CTRL)
CTRL+BREAK
DIRECTION
F10
F7
F8
F9
Help (table)
shortcut
editing commands
(table)
Keywords
capitalization of
defined
help
L
/L option (QB)
Label command
Labels
Language help
Leaving QuickBASIC. See Quitting QuickBASIC
Libraries
creating
Quick
creating
defined
described
non-library modules, used with
run-time
stand-alone, executable files
line
Line counter, illus.
Line-number checking
Lines, setting attributes
Linker, BRUN45.EXE, advantage of
Linking
Links, implicit
List boxes
defined
described
illus.
scroll bar, illus.
Listing directories
Load File command
Loading
files
modules
Local
constants
symbols
variables
Logical devices
Logical operators
Logical relations
Long integers
Loop counters
Loop variables
Loops
DO
FOR...NEXT
LPT1
M
Main modules
.MAK file
Make EXE and Exit command button
Make EXE command button
Make EXE File command, dialog box, illus.
Make Library and Exit command button
Make Library command
Math coprocessor
Math functions
/MBF option (QB)
MCGA. See Multicolor Graphics Array
MDA. See Monochrome Display Adapter
Menu bar
Menu-item description, illus.
Menus
browsing
Calls
clearing
closing
commands, choosing
Debug
Easy
described
vs. full
File
commands (list)
illus.
Full
Help
opening
Options
Run
selecting
setup
Merge command
Metacommands
defined
#INCLUDE
Microsoft Binary format
Microsoft Overlay Linker (LINK)
Modes
insert
overtype
Modular programming
Module-level code
defined
described
Modules
defined
deleting
existing
loading and unloading
main
changing
defined
new
printing
run-time
Monitors, monochrome
use with Color Graphics Adapter
Monochrome Display Adapter (MDA)
Mouse
compatibility with QuickBASIC
cursor
defined
Hyper Links, using with
pointer, illus.
QuickBASIC, using with
scrolling with
setting right button
Moving
procedures
Help windows
SUBs command
View window
text
Multicolor Graphics Array (MCGA)
Multidimensional arrays
Multiple-module programs
N
Names
base
device
path
Naming procedures
Near address
Nested procedures
Nesting Include files
New FUNCTION command
New Program command
New SUB command
Next Statement command
Next SUB command
NOT operator
Not watchable message
Null characters
NUM LOCK/CAPS LOCK indicator
illus
described
Numeric coprocessor. See Coprocessor
O
Object files
compiling with BC
defined
Offset
On-line help
See also Help
Open Program command
Opening
menus
programs
screen, illus.
Operand
Operators
arithmetic
defined
logical
Option boxes, illus.
Option buttons
described
illus.
Options Menu
Right Mouse command
Set Paths command
Options menu
commands (list)
Display command
Full Menus command
Set Paths command
Syntax Checking command
Options, QB command
OR operator
Organizing QuickBASIC files
OutputPRINT statement
defined
program, how displayed
standard
Output screen
defined
viewing
Output Screen command
Outputting
low-order ASCII control sequences
Overflow
Overlay
Overtyping text
P
PACKING.LST
Palette
Parallel ports
Parameters
defined
formal
Parentheses, used to establish precedence
Passing by reference
Passing by value
Paste command
Pasting text
Path names
Paths, changing default search
Path-specification line
PGDOWN key
PGUP key
Physical coordinates
Placemarkers
defined
using
Pointers
Ports
parallel
serial
Precedence
defined
introduction
Preventing bugs
Print command
described
dialog box, illus.
Help
PRINT statement
combining
numeric expressions
tabbing
use
Problems, software, reporting
Procedure declarations, automatic
Procedure stepping
Procedures
calling from Immediate window
changing default data type
creating
creating FUNCTION
creating SUB
debugging
declaring
default data types
defined
described
executing all statements of
naming
nested
sequence of
SUB
View window, illus.
viewing
Produce Debug Code check box
Produce debug code check box
Program command button
Program execution, right mouse button
Program statements
Program symbols. See Symbols
Programming environment, described
Programming, modular
Programs
BASICA, running with QuickBASIC
blocks, indenting
continuing
continuing if suspended
defined
executing to cursor
execution
continuing
suspending
existing, starting
exiting
flow, tracing
instructions
multiple module
new, starting
output
resetting variables
restarting
restarting at first executable statement
running
run-time module required with
sample, on disk
selecting
setup
stand-alone
starting
steps
stopping execution
structured
suspending execution
testing
Prompts, defined
Q
QB AdvisorHelp
QB command
QB Express
QB.INI file
QCARDS program
Quick libraries
See also Libraries
defined
file naming
updating previous
QuickBASIC
debugging features
installing
keywords
manuals, how to use
mouse use
options
starting
QuickBASIC environment, returning to
QuickBASIC, Fast Load and Save option
Quick-library loading option (QB)
Quitting QuickBASIC
R
RAM space, saving with executable files
README.DOC
Read-only files
Records
Recursion
Redirection
Reference bar
described
illus.
Reference, passing by
Registers
Relational operators
Relational statements
Remote-reception buffer-size option (QB)
RemovingDeleting
modules
text
Renaming programs
Repeat Last Find command
Repeat previous search
Repeating program statements
Replacing text
See also Pasting text
Reserved words. See Keywords
Resetting variables
Restart command
RETURN statement
RETURN without GOSUB error, cause
Right Mouse command
Row/column counters
/RUN option (QB)
Run menu
debugging commands
Make EXE File command
Make Library command
described
Set Main Module command
Run time
defined
errors
checking
hint regarding
reporting locations
simulating
Running programs
debugging commands
errors in
new
Run-time libraries
defined
executable files
Run-time module
defined
programs using
S
Save All command
Save As command
described
dialog box, illus.
Fast Load and Save option
QuickBASIC option
Text option
Save command
Saving
files
.MAK files
procedures
Saving programs
Scope
Screen
clearing
colors, setting
display, customizing
displaying data on
illus.
QuickBASIC
Screen-update-speed option (QB)
Scroll arrow, illus.
Scroll bars
defined
illus.
option (Display command)
setting
Scroll box
Scrolling
defined
keyboard commands
keys, summary of
mouse
text in a window
Search menu
Change command
commands (list)
Find command
Label command
Repeat Last Find command
Selected Text command
Search Paths command
Searching
labels
procedures
text
Segments
SELECT CASE statement
described
help screen, illus.
Selected Text command
Selecting
menus
programs
text
cautions
described
editing functions
removing selection
summary of
Sequence of procedures
Sequential files
Serial ports
Set Main Module command
Set Next Statement command
Set Paths command
Setting
breakpoints
screen attributes, currently executing lines
screen colors
scroll bars
tab stops
Setting up QuickBASIC
Setup menu
Setup program
SHARED
Shortcut keys
commands
described
introduction
(table)
Simple variables
Single precision
Single stepping
Smart editor
See also Editor
automatic procedure declarations
defined
described
syntax checking
Source files
SPACEBAR, using in dialog boxes
Special characters, methods for entering
Split command
Splitting windows
Stack
Calls menu
defined
Stand-alone EXE File option
Stand-alone files
Stand-alone libraries. See Libraries
Stand-alone programs, advantages
Standard input and output
Start command
StartingLoading
programs
at specific statement
existing
new
QuickBASIC
Starting QuickBASIC
monitors, monochrome
Statement checking. See Syntax checking
Statements
beginning execution from
CHAIN
COMMON
DECLARE
defined
DIM
DO, Help, illus.
ERROR
GOSUB
IF...THEN...ELSE, help, illus.
INPUT
next to execute
PRINT
RETURN
SELECT CASE
described
help screen, illus.
STEP
using help to construct
Static arrays
STEP statement
Stop bits
Stopping programs
String variables
Strings
character
combining
defined
passing to QuickBASIC
Structured programming
SUB procedures
creating
default data type
defined
naming
viewing
Subprograms
creating
defined
Subroutines
SUBS command
described
dialog box, illus.
illus.
moving procedures
Subscripts, defined
Suspending program execution
Switching active window
Symbol help
Symbolic constants
Symbolic debuggers
Symbols
defined
global
help
local
using
Syntax
checking
errors, checking
help
Syntax Checking command
described
introduction
turning off
T
Tab
TAB key, dialog boxes, using in
Tab stops, setting
Testing, programs
Text
changing
copying
defined
deleting
editors
entering
finding
indenting
inserting
moving
option, Save As command
overtyping
pasting
removing
replacing
searching for
selecting
Text boxes
defined
described
errors, correcting
illus.
Text files
Tiling
Title bar
defined
described
illus
Toggle Breakpoint command
Toggles
Tokens
Topic command
Trace On command
Tracing
backwards
forward
introduction
procedure steps
program flow
Tracing through Help screens
Trapping events, defined
Truth, representation
Tutorial, how to use
Two's complement
Types
Typing mistakes
Typographic conventions
U
Underflow
Undo command
Unload File command
Unloading modules
Unresolved externals
UNTIL keyword
User-defined types
Using help
V
Value, passing by
Values, changing in running programs
Variables
arrays
automatic
default type
defined
deleting from Watch window
displaying
floating-point
global
help
illegal assignments
initialization
integer
local
naming conventions
resetting
simple
string
types
values
changing
current
determining
watch
Video Graphics Array (VGA)
View menu
commands (list)
Include File command
Included Lines command
Next Statement command
Next SUB command
Output Screen command
Split command
SUBs command
View window
clearing
defined
described
illus.
loading a program in
moving procedures
procedures in
programming in
splitting
Viewing procedures
W
Watch expressions
Watch variables, debugging
Watch window
closing
commands
debugging programs
defined
deleting variables from
described
illus.
monitoring variable values
placing variable into
watchpoints
Watchable
Watching expressions, in Watch window
Watchpoints
WHILE keyword
WIndows
activating
Windows
active
changing
described
available with Easy Menus
defined
Help
described
illus.
moving in
Immediate
calculations
calling procedures from
capacity
debugging in
defined
described
illus.
running statements in
run-time errors, simulating
statements not supported
testing programs
variable values, changing
window size, changing
moving between
size, changing
splitting
View
defined
described
illus.
loading a program
procedures in
programming in
splitting
Watch
closing
commands
debugging programs
defined
deleting variables from
described
monitoring variable values
placing variable into
watchpoints
watch
described
WordStar-style command indicator, illus.