'TIMETEST.BAS '---------------------------------------------------------------------------- ' This program does nothing more than demonstrate the two timing ' SubPrograms, DELAY & BGDELAY '---------------------------------------------------------------------------- DECLARE SUB DELAY (hun.scnds!) DECLARE SUB BGDELAY (hun.scnds!, HUN.SCNDS.TO.GO!, status%) '/--------------------------------------------------------------------------/ ' First, the simpler DELAY. This SubProgram is CALLed with one ' SINGLE PRECISION (*!*) argument and retains control until that ' many hundredths of seconds pass. '/--------------------------------------------------------------------------/ COLOR 14: PRINT "First test: `hard' delay" COLOR 7: PRINT " how many hundredths of seconds? :"; LOCATE , , 1: LINE INPUT tmp$ PRINT " Starting time: "; TIME$ time.to.wait! = VAL(tmp$) 'wait for 5 seconds CALL DELAY(time.to.wait!) PRINT " Ending time : "; TIME$ '/--------------------------------------------------------------------------/ ' Second, BGDELAY. This SubProgram is CALLed with two SINGLE PRECISION (*!*) ' arguments, and one integer argument: the first S.P. argument tells ' BGDELAY how many hundredths of seconds are to be delayed; the second ' S.P. argument is for BGDELAY to tell you how many hundredths of ' seconds remain until the timeout has occurred. The third argument, the ' integer, tells you whether or not the timing is continuing. Once the ' third argument falls to 0, the timing is done (ie, a timeout has ' occurred) less than or equal to 0, then the timeout has occurred! '/--------------------------------------------------------------------------/ PRINT COLOR 14: PRINT "Next test: `background' delay" COLOR 7: PRINT " how many hundredths of seconds? :"; LOCATE , , 1: LINE INPUT tmp$ PRINT " Starting time: "; TIME$ time.to.wait! = VAL(tmp$) 'wait for 5 seconds DO GOSUB mything 'go do your thing while waiting CALL BGDELAY(time.to.wait!, time.to.go!, st%) LOOP UNTIL st% = 0 PRINT PRINT " Ending time : "; TIME$ END mything: '---- Do anything you want here, but DON'T change the value of ST% !! LOCATE CSRLIN, 1 PRINT " Current time : "; TIME$, , "1/100 seconds left:"; FIX(time.to.go!); RETURN