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 >
Text File  |  1990-07-26  |  4KB  |  187 lines

  1. LISTING ONE
  2.  
  3. '  ╔═══════════════════════════════════════════════════╗
  4. '  ║                                                   ║
  5. '  ║ Program to accompany the Article "Multitasking    ║
  6. '  ║ using QuickBASIC" which appeared in TECH          ║
  7. '  ║ Specialist magazine, by George R. Toft.           ║
  8. '  ║                                                   ║
  9. '  ║                                                   ║
  10. '  ║ Language Used: QuickBASIC 4.5 or QuickBASIC 4.0   ║
  11. '  ║                                                   ║
  12. '  ║ Date Created: July 1st, 1990                      ║
  13. '  ║                                                   ║
  14. '  ║ Author:  George R. Toft                           ║
  15. '  ║                                                   ║
  16. '  ╚═══════════════════════════════════════════════════╝
  17.  
  18.  
  19.  
  20. '  ╔═══════════════════════════════════════════════════╗
  21. '  ║  Foreground task algorithm:                       ║
  22. '  ║                                                   ║
  23. '  ║  Define Common variables                          ║
  24. '  ║  Allocate memory for array                        ║
  25. '  ║                                                   ║
  26. '  ║  Initialize all variables                         ║
  27. '  ║                                                   ║
  28. '  ║  Repeat                                           ║
  29. '  ║     Make a random number                          ║
  30. '  ║     Using the number as an index, increment the   ║
  31. '  ║         indexed array element                     ║
  32. '  ║  Until Quit                                       ║
  33. '  ║                                                   ║
  34. '  ║                                                   ║
  35. '  ╚═══════════════════════════════════════════════════╝
  36.  
  37.  
  38.  
  39.     '--- Constants
  40.     CONST FALSE = 0, TRUE = NOT FALSE
  41.     CONST MaxInt = 32767
  42.  
  43.     CONST ArrayLow = 0, ArrayHigh = 9
  44.  
  45.     CONST BarChar$ = "▄"' character code 220
  46.  
  47.    
  48.  
  49.     '--- The default data type will be integers
  50.     DEFINT A-Z
  51.     '$DYNAMIC
  52.  
  53.  
  54.  
  55.     '--- Procedures and Function declarations
  56.     DECLARE SUB BackgroundTask ()
  57.     DECLARE SUB CreateScreen ()
  58.     DECLARE SUB Inc (Argument AS INTEGER)
  59.     DECLARE SUB SInc (Argument AS SINGLE)
  60.    
  61.     DECLARE FUNCTION RandomNumber ()
  62.  
  63.  
  64.  
  65.    
  66.     COMMON SHARED Array() AS INTEGER
  67.     COMMON SHARED Quit
  68.     COMMON SHARED ScreenConst
  69.  
  70.  
  71.     '  This is the array that keeps track of the data
  72.     DIM Array(ArrayLow TO ArrayHigh) AS INTEGER
  73.  
  74.  
  75.  
  76.    
  77.     '==============  Initialization  =================
  78.  
  79.     CreateScreen
  80.  
  81.     Quit = FALSE
  82.     ScreenConst = 5
  83.  
  84.     ' Even though this step is not necessary in
  85.     ' BASIC, it is a good idea to maintain
  86.     ' positive control over the computer's memory
  87.     FOR i = ArrayLow TO ArrayHigh
  88.         Array(i) = 0
  89.     NEXT i
  90.  
  91.  
  92.  
  93.  
  94.     '==============  Activate multitasking  ==========
  95.  
  96.     ON TIMER(1) GOSUB TimerInterrupt
  97.     TIMER ON
  98.  
  99.  
  100.     LoopCounter! = 0
  101.     DO
  102.  
  103.         Inc Array(RandomNumber)
  104.  
  105.         SInc LoopCounter!
  106.         LOCATE 4, 31
  107.         PRINT USING "##,###"; LoopCounter!
  108.  
  109.     LOOP UNTIL Quit
  110.  
  111.  
  112.     '--- Shutdown background task
  113.     TIMER OFF
  114.  
  115.  
  116.     '--- terminate program
  117.     LOCATE 24, 1
  118.  
  119.     END'  ForegroundTask
  120.  
  121.  
  122.  
  123.  
  124. '=====================================================
  125.  
  126. TimerInterrupt: ' Begins
  127.  
  128.     BackgroundTask
  129.     RETURN
  130.  
  131. REM $STATIC
  132. '$Page
  133. '
  134. '
  135. SUB CreateScreen
  136.     ' creates the screen for both tasks
  137.    
  138.    
  139.     CLS
  140.     PRINT TAB(15); "A Demonstration in Multitasking";
  141.     PRINT "Using QuickBASIC"
  142.     PRINT TAB(30); "by George R. Toft"
  143.     PRINT
  144.     PRINT "Number of times through loop:"
  145.     PRINT
  146.     PRINT "Screen scale:";
  147.     PRINT TAB(21); "Enter a new screen scale here:"
  148.     PRINT TAB(21); "(Type 'Quit' to stop program)"
  149.     FOR i = ArrayLow TO ArrayHigh
  150.         LOCATE 10 + i, 1
  151.         PRINT USING "##:"; i
  152.     NEXT i
  153.  
  154.  
  155. END SUB' CreateScreen
  156.  
  157. '$Page
  158. '
  159. '
  160. SUB Inc (Argument AS INTEGER)
  161.     ' Increments the Integer type argument
  162.  
  163.     Argument = Argument + 1
  164.  
  165. END SUB' Inc
  166.  
  167. '$Page
  168. '
  169. '
  170. FUNCTION RandomNumber
  171.     '  Generates a random number between the two limits
  172.  
  173.     RandomNumber = INT((ArrayHigh - ArrayLow + 1) * RND(1))
  174.  
  175. END FUNCTION' RandomNumber
  176.  
  177. '$Page
  178. '
  179. '
  180. SUB SInc (Argument AS SINGLE)
  181.     ' Increments the Single type argument
  182.    
  183.     Argument = Argument + 1
  184.    
  185. END SUB' SInc
  186.  
  187.