// TimeTest.bcpl
// Copyright Xerox Corporation 1979
// Bldr TimeTest TimeConvB TimeConvA TimeIO
external
[
Ws; WRITEUDT; WEEKDAY; DoubleAdd; Gets; MoveBlock; Wns
UNPACKDT; PACKDT; ReadCalendar
dsp; keys
]
let Test() be
[
let time = vec 2
ReadCalendar(time)
let negative = false
[
let utv = vec 6
UNPACKDT(time, utv)
Ws("*n ")
WRITEUDT(dsp, utv, true)
Ws(" (")
Ws(selecton WEEKDAY(time) into
[
case 0: "Monday"
case 1: "Tuesday"
case 2: "Wednesday"
case 3: "Thursday"
case 4: "Friday"
case 5: "Saturday"
case 6: "Sunday"
])
Ws(")")
let check = vec 2
let c = PACKDT(utv, check, true)
test c eq 0
ifnot [ Ws(" -- PACKDT failed, code = "); Wns(dsp, c) ]
ifso if time!0 ne check!0 % time!1 ne check!1 then
[
Ws("*n -- PACKDT incorrect: good = ")
Wns(dsp, time!0, 6, 10); Wns(dsp, time!1, 6, 10)
Ws(", bad = ")
Wns(dsp, check!0, 6, 10); Wns(dsp, check!1, 6, 10)
]
let d = nil
switchon Gets(keys) into
[
case $S: case $s:
[ d = table [ 0; 1 ]; break ]
case $M: case $m:
[ d = table [ 0; 60 ]; break ]
case $H: case $h:
[ d = table [ 0; 60*60 ]; break ]
case $D: case $d:
[ d = table [ 1; 20864 ]; break ]
case $3:
[ d = table [ 39; -29440 ]; break ]
case $+:
[ negative = false; endcase ]
case $-:
[ negative = true; endcase ]
case $Q: case $q:
finish
] repeat
let v = vec 2
MoveBlock(v, d, 2)
if negative then
[
v!1 = -v!1
v!0 = (v!1 eq 0? -v!0, not v!0)
]
DoubleAdd(time, v)
] repeat
]