\ TIMER.SEQ Time measurment words for F-PC. : GETDATE ( --- Y MD ) 0 0 42 OS2 DROP ; : SETDATE ( NM Y --- ) SWAP 43 OS2 NIP NIP 255 = IF CR ." Invalid DATE " THEN ; : GETTIME ( --- HM Sh ) 0 0 44 OS2 DROP ; : SETTIME ( HM Sh --- ) SWAP 45 OS2 NIP NIP 255 = IF CR ." Invalid TIME " THEN ; : .## ( N1 --- ) \ Print two low digits of n1. 0 <# # # #> TYPE ; : <.HM> ( D1 --- N1 ) SWAP 0 256 UM/MOD .## ." :" .## ; : <.SH> ( N1 --- ) ." :" 0 256 UM/MOD .## ." ." .## ; : <.TIME> BASE @ >R DECIMAL SWAP 0 256 UM/MOD .## ." :" .## ." :" 0 256 UM/MOD .## ." ." .## R> BASE ! SPACE ; : .TIME GETTIME <.TIME> ; : <.DATE> ( D1 --- ) BASE @ >R DECIMAL 0 256 UM/MOD .## ." /" .## ." /" 1900 - .## R> BASE ! ; : .DATE GETDATE <.DATE> ; VARIABLE STIME 0 , VARIABLE TTIME 0 , : T>B 0 256 UM/MOD 100 * + SWAP 0 SWAP 0 256 UM/MOD >R 6000 *D D+ R> 1000 * 360 *D D+ ; : B>T 0 100 UM/MOD >R 100 UM/MOD SWAP TTIME C! R> 60 UM/MOD SWAP TTIME 1+ C! 60 /MOD TTIME 3 + C! TTIME 2+ C! ; : TIME-RESET GETTIME T>B STIME 2! ; \ RESET TIMER : TIME-ELAPSED GETTIME T>B STIME 2@ D- ; ( - D1 ) \ BINARY : B>SEC ( D1 - N1 ) \ CONVERT DOUBLE BINARY TO 0 100 UM/MOD DROP \ SECONDS, OVERFLOW AT 18 HRS 100 UM/MOD NIP ; : <.ELAPSED> TIME-ELAPSED B>T TTIME 2@ <.TIME> ; : .ELAPSED CR ." Elapsed time = " <.ELAPSED> ; : TIMER TIME-RESET INTERPRET .ELAPSED ;