QB64.com

QB64 is a modern extended BASIC programming language that retains QBasic/QuickBASIC 4.5 compatibility and compiles native binaries for Windows, Linux, and macOS.

HomeNewsGitHubWikiSamplesInFormGXQBjsCommunityMore…

SAMPLE: FUNSUBS

screenshot.png

Author

🐝 Jon Mark O’Connor

Description

' FUNSUBS.BAS
' by Dennis Mull and Tina Sweet
' Copyright (C) 1994 DOS World
' Published in Issue #18, November 1994, page 54

***************************************************************************** 
 
 FUNSUBS.BAS 
 LIB.BAS 
   by Dennis Mull and Tina Sweet 
 Copyright (C) 1994 DOS World 
 Published in Issue #18, November 1994, page 54 
 
FUNSUBS.BAS contains four attention-grabbing subroutines that you can add to  
your own QBasic programs to create special visual and sound effects. The  
second program, LIB.BAS, aids you in merging the subroutines from FUNSUBS.BAS  
into your own programs. 
 
To run FUNSUBS.BAS, which shows you a demonstration of the special effects,  
change to the directory containing FUNSUBS.BAS, then type: 
 
QBASIC /RUN FUNSUBS 
 
 
Within FUNSUBS.BAS the MARQUEEPAUSE section creates fancy borders that blink  
like the lights on a movie marquee sign; TICKPRINT and TICKERTAPE print  
messages on your screen; and DOSOUND lets you add sound effects to your  
programs. 
 
FUNSUBS.BAS puts MARQUEEPAUSE through its paces first. To keep things simple,  
the program displays a short message surrounded by a border composed of  
asterisks. The routine turns on each of the asterisks in the border in  
sequence and then turns each one off, just as the light bulbs in a marquee  
switch on and off. You may substitute another character for the asterisk by  
changing the value of the variable CH%. (See the table "Program Variables,"  
below.) For example, to use a "happy face" in the marquee's border, alter the  
variable's value by changing CH% = 42 to CH% = 1, the ASCII value for the  
happy-face symbol. 
 
Use MARQUEEPAUSE to print a border anywhere on screen simply by assigning the  
proper values to the QBasic variables you pass to the subprogram as  
parameters. 
 
Suppose you want to display the following message for five seconds at the  
start of your program: 
 
Copyright Dennis Mull & Tina Sweet 
Version 1.1 
All rights reserved. 
 
To clear the screen and place the message in row 11, column 23, you'd start  
by adding a CLS statement and three LOCATE statements: 
 
CLS 
LOCATE 11, 23, 0: PRINT "Copyright Dennis Mull & Tina Sweet" 
LOCATE 12, 23, 0: PRINT "Version 1.1" 
LOCATE 13, 23, 0: PRINT "All rights reserved." 
 
You'd then set the values for MARQUEEPAUSE and call the subroutine: 
 
CH% = 42: BKCLR% = 14: CHCLR% = 14: ROW% = 9 
COL% = 21: WIDE% = 55: HIGH% = 6: TOUT! = 5 
MARQUEEPAUSE CH%, BKCLR%, CHCLR%, ROW%, COL%, WIDE%, HIGH%, TOUT! 
 
TICKPRINT and TICKERTAPE are variations on a theme. TICKPRINT displays a  
message in the center of the screen, printing it one character at a time from  
left to right, sounding a single "typewriter click" as each character is  
printed, clearing the screen, and starting over again. TICKERTAPE displays a  
message that scrolls its way from left to right, simultaneously sounding a  
click as each character appears. The message disappears when you press a key. 
 
You might use these routines in different ways--perhaps to focus attention on  
a short menu, a help screen, or a message to remind users that they must type  
something before the program can continue. 
 
As written, TICKPRINT and TICKERTAPE display yellow text on a black screen,  
but you can vary this by changing the values of CHCLR% and BKCLR%, the  
variables that control foreground and background color. (See the accompanying  
table "Color Values," below.) 
 
For example, you might color-code your messages, displaying error messages in  
red text on a white background and help messages in white text on a blue  
background. To set up the first color scheme under TICKPRINT, you'd change  
this line: 
 
TICKPRINT MESSAGE$, 12, 26, 5, 1, 0, 14 
 
to read as follows: 
 
TICKPRINT MESSAGE$, 12, 26, 5, 1, 7, 4 
 
To use the white-on-blue color scheme with TICKERTAPE, you'd change this  
line: 
 
TICKERTAPE MESSAGE$, 25, 6, 40, 0, 14 
 
to read: 
 
TICKERTAPE MESSAGE$, 25, 6, 40, 1, 7 
 
When you call TICKPRINT and use a value of zero for BKCLR%, the subroutine  
uses black as the background color, as you'd expect. When you set CHCLR% to  
zero, however, your message appears in a rainbow of colors. If you don't like  
that effect and would prefer black as a text color, disable this feature by  
deleting the following lines from TICKPRINT: 
 
IF CHCLR% = 0 THEN 
IF DOC% < 15 THEN DOC% = DOC% + 1 
 COLOR DOC%, BKCLR% 
 IF DOC% = 15 THEN DOC% = 0 
END IF 
 
Ticking isn't the only "music" FUNSUBS.BAS lets you make. The program's  
fourth subroutine, DOSOUND, demonstrates how to add whistles, bomb drops,  
beebops, and a siren to any message. These sounds have many uses: For  
example, imagine using a bomb drop or a siren to accompany an error message.  
Users would know right away that something had gone wrong. 
 
You choose a sound by initializing the parameter variable WHICHSND%, using a  
number from 1 to 4. The numbers correspond to those given in DOSOUND's CASE  
statement for each sound. You may also tell DOSOUND how many times you want  
it to make the sound by initializing the variable HOWMANY%, using a value  
from 1 to 100. 
 
Another option is to use DOSOUND within a do...loop construction. In the  
following example, for instance, the sound will continue until the user  
presses a key: 
 
WHICHSND% = 1: HOWMANY% = 1 
DO 
  DOSOUND WHICHSND%, HOWMANY% 
  A$ = "": A$ = INKEY$ 
LOOP WHILE A$ = "" 
 
You can add your own sounds to DOSOUND. To do this, load FUNSUBS.BAS into  
QBasic. If you're at the DOS command line, change to the directory containing  
FUNSUBS.BAS, then type: 
 
qbasic funsubs 
 
When you press the F2 key, QBasic will display a list of the subroutines in  
FUNSUBS.BAS. Highlight the subroutine DOSOUND and press Enter. When QBasic  
displays DOSOUND, use the down-arrow key to move the cursor to the beginning  
of the line that reads END SELECT, then press Enter. Type the code for the  
new sound in the blank space you created. For example, if you want to add a  
snippet of arcade "music" to your sound repertoire, insert these lines: 
 
CASE 5 
   FOR X = 1 TO 20 STEP 2 
    SOUND 150 * X, .7 
   NEXT X 
   FOR X = 30 TO 1 STEP -2 
    SOUND 50 * X, .7 
   NEXT X 
 
Save your work. Press F2 and Enter to switch back to the program's main  
module. Move the cursor down to this statement: 
 
LOCATE 12, 35: PRINT "       " 
 
and press Enter again. Insert the following line into the listing: 
 
DOSOUND 5, 1: SLEEP 1 
 
To test the new sound, press Shift+ F5 to run the program again. 
 
 
We're confident you can dream up many uses for these versatile subroutines.  
And the best part is that you won't have to do much typing to incorporate our  
ideas into your code, because we've included a short program, LIB.BAS, which  
merges the subroutines in FUNSUBS.BAS with another QBasic program. 
 
Before running LIB.BAS, make sure it and FUNSUBS.BAS are in the same  
directory and that you change to that directory. When you run LIB.BAS, it  
asks you to type the name of the program to which you want to add the  
FUNSUBS.BAS subroutines. (If that program isn't in the current directory, you  
may include a directory name.) When you type in the name of your program and  
press Enter, LIB.BAS merges the FUNSUBS.BAS routines with your program and  
saves the combined program as a file named TEMP.BAS. 
 
You should immediately load TEMP.BAS into QBasic and use QBasic's Save As  
command to save TEMP.BAS under a different name to avoid overwriting it the  
next time you use LIB.BAS. You may use the name of the program to which  
you're adding FUNSUBS.BAS, which overwrites the old version of that program,  
or choose a new filename.) 
 
After adding FUNSUBS.BAS to another program, delete any sections of  
FUNSUBS.BAS you don't need. First, press F2 to see a list, then highlight the  
name of the subroutine to delete and press Alt+D. Delete any other routines  
you don't need, then press F2 and Enter to return to the main module. If you  
delete any of the FUNSUBS.BAS routines in this way, you should also go to the  
beginning of the program and delete the corresponding declare statements. 
 
You may want to take the precaution of storing a backup copy of FUNSUBS.BAS  
in a safe place. 
 
 
PROGRAM VARIABLES 
 
Variable    Range of Values           Description 
--------    ---------------           ----------- 
BKCLR%      0-15                      background color 
CH%         1-6; 8; 14-27; 33-254     ASCII value of character 
                                        used in marquee border 
CHCLR%      1-15                      foreground color 
COL%        1-78                      column to begin printing 
DELAY!      1-100                     length of delay to adjust 
                                         scrolling or printing speed 
HIGH%       1-23                      height of border 
HOWMANY%    1-100                     number of times to sound 
MESSAGE$    1-79                      message to print 
ROW%        1-25                      row to begin printing 
SND%        0 or 1                    turn sound off (0) and on (1) 
TOUT!       1-100                     elapsed time (in seconds) before 
                                        MARQUEEPAUSE ends 
WHICHSND%   1-4                       number of CASE statement  
                                        for desired sound 
WIDE%       2-16                      width of marquee border  
 
 
 
COLOR VALUES 
 
  Number    Color              Number     Color 
  ------    -----              ------     ----- 
    0*      black                 8       dark gray 
    1       blue                  9       light blue 
    2       green                10       light green 
    3       cyan                 11       light cyan 
    4       red                  12       light red 
    5       magenta              13       light magenta 
    6       brown                14       yellow 
    7       white                15       bright white 
 
*In the version of TICKPRINT provided here, selecting a value of zero for a  
foreground color tells the routine to display text in a rainbow of colors.

File(s)

🔗 graphics, dos world