home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The C Users' Group Library 1994 August
/
wc-cdrom-cusersgrouplibrary-1994-08.iso
/
listings
/
v_01_06
/
1n06029a
< prev
next >
Wrap
Text File
|
1990-07-26
|
4KB
|
187 lines
LISTING ONE
' ╔═══════════════════════════════════════════════════╗
' ║ ║
' ║ Program to accompany the Article "Multitasking ║
' ║ using QuickBASIC" which appeared in TECH ║
' ║ Specialist magazine, by George R. Toft. ║
' ║ ║
' ║ ║
' ║ Language Used: QuickBASIC 4.5 or QuickBASIC 4.0 ║
' ║ ║
' ║ Date Created: July 1st, 1990 ║
' ║ ║
' ║ Author: George R. Toft ║
' ║ ║
' ╚═══════════════════════════════════════════════════╝
' ╔═══════════════════════════════════════════════════╗
' ║ Foreground task algorithm: ║
' ║ ║
' ║ Define Common variables ║
' ║ Allocate memory for array ║
' ║ ║
' ║ Initialize all variables ║
' ║ ║
' ║ Repeat ║
' ║ Make a random number ║
' ║ Using the number as an index, increment the ║
' ║ indexed array element ║
' ║ Until Quit ║
' ║ ║
' ║ ║
' ╚═══════════════════════════════════════════════════╝
'--- Constants
CONST FALSE = 0, TRUE = NOT FALSE
CONST MaxInt = 32767
CONST ArrayLow = 0, ArrayHigh = 9
CONST BarChar$ = "▄"' character code 220
'--- The default data type will be integers
DEFINT A-Z
'$DYNAMIC
'--- Procedures and Function declarations
DECLARE SUB BackgroundTask ()
DECLARE SUB CreateScreen ()
DECLARE SUB Inc (Argument AS INTEGER)
DECLARE SUB SInc (Argument AS SINGLE)
DECLARE FUNCTION RandomNumber ()
COMMON SHARED Array() AS INTEGER
COMMON SHARED Quit
COMMON SHARED ScreenConst
' This is the array that keeps track of the data
DIM Array(ArrayLow TO ArrayHigh) AS INTEGER
'============== Initialization =================
CreateScreen
Quit = FALSE
ScreenConst = 5
' Even though this step is not necessary in
' BASIC, it is a good idea to maintain
' positive control over the computer's memory
FOR i = ArrayLow TO ArrayHigh
Array(i) = 0
NEXT i
'============== Activate multitasking ==========
ON TIMER(1) GOSUB TimerInterrupt
TIMER ON
LoopCounter! = 0
DO
Inc Array(RandomNumber)
SInc LoopCounter!
LOCATE 4, 31
PRINT USING "##,###"; LoopCounter!
LOOP UNTIL Quit
'--- Shutdown background task
TIMER OFF
'--- terminate program
LOCATE 24, 1
END' ForegroundTask
'=====================================================
TimerInterrupt: ' Begins
BackgroundTask
RETURN
REM $STATIC
'$Page
'
'
SUB CreateScreen
' creates the screen for both tasks
CLS
PRINT TAB(15); "A Demonstration in Multitasking";
PRINT "Using QuickBASIC"
PRINT TAB(30); "by George R. Toft"
PRINT
PRINT "Number of times through loop:"
PRINT
PRINT "Screen scale:";
PRINT TAB(21); "Enter a new screen scale here:"
PRINT TAB(21); "(Type 'Quit' to stop program)"
FOR i = ArrayLow TO ArrayHigh
LOCATE 10 + i, 1
PRINT USING "##:"; i
NEXT i
END SUB' CreateScreen
'$Page
'
'
SUB Inc (Argument AS INTEGER)
' Increments the Integer type argument
Argument = Argument + 1
END SUB' Inc
'$Page
'
'
FUNCTION RandomNumber
' Generates a random number between the two limits
RandomNumber = INT((ArrayHigh - ArrayLow + 1) * RND(1))
END FUNCTION' RandomNumber
'$Page
'
'
SUB SInc (Argument AS SINGLE)
' Increments the Single type argument
Argument = Argument + 1
END SUB' SInc