record format Global Fm ( integer Blocks or
integer array Pad(1:20) )
const integer Max Vars = 16_0 FFFF
record format Var Fm ( integer a, b, c )
routine Fail ( string(255) S )
Print String(S); Newline
stop
end
begin
recordformat Varsfm(record(Varfm)array Var(0:255))
constrecord(Varsfm)name Varsfm Type == 0
recordformat Varpfm(record(Varsfm)name P)
record(Varpfm)array Varp(0:Max Vars>>8)
record(Varfm)map Var(integer Index)
own record(Var Fm) Special Case Var
result == Special Case Var if Index = -1
Print String("Entered Var("); Write(Index, 0)
Print Symbol(')'); Newline
Fail("P2/77") unless 0 <= Index <= Max Vars
record(Varpfm)name V == Varp(Index>>8)
if V_P == Nil start
V_P == NEW(Varsfm Type)
finish
result == V_P_Var(Index&255)
end
integer J
VarP(J)_P == Nil for J = 0, 1, Max Vars >>8
Var(0) = 0
Print String("Back from Var(0)"); Newline
end of program