%%HP: T(3)A(D)F(.);
DIR
DELC
\<< SWAP trn SWAP
DELR trn
\>>
DELR
\<< \-> a
\<< M\->V DUP a -
2 + ROLL DROP 1 -
V\->M
\>>
\>>
PUTC
\<< ROT trn ROT
ROT PUTR trn
\>>
PUTR
\<< \-> a v
\<< M\->V
IF a 0 <
THEN DUP a
+ 2 + ROLL DROP v
OVER a + 2 + ROLLD
ELSE v OVER
a - 3 + ROLLD 1 +
END V\->M
\>>
\>>
V\->M
\<< OVER SIZE 1
GET \-> n m
\<< 0 n 1 -
FOR i i m *
n i - + ROLL OBJ\->
DROP
NEXT n m 2
\->LIST \->ARRY
\>>
\>>
M\->V
\<< OBJ\-> OBJ\->
DROP \-> n m
\<< 1 n
FOR i m 1
\->LIST \->ARRY n i - m
* i + ROLLD
NEXT n
\>>
\>>
GETR
\<< \-> r
\<< M\->V DUP r -
2 + PICK \-> a
\<< DROPN a
\>>
\>>
\>>
GETC
\<< SWAP TRN SWAP
GETR trn
\>>
CST { A\<-\->L trn
MOP V\<-\->M V\->M M\->V
GETR GETC PUTR PUTC
DELR DELC }
A\<-\->L
\<<
IF DUP TYPE 5
==
THEN
IF DUP 1
GET TYPE 5 ==
THEN \-> a
\<< 1 a
SIZE
FOR i a
i GET OBJ\-> 1 \->LIST
\->ARRY
NEXT a
SIZE V\->M
\>>
ELSE OBJ\-> 1
\->LIST \->ARRY
END
ELSE
IF DUP SIZE
SIZE 2 ==
THEN M\->V {
} SWAP 1
FOR i i 1
+ ROLL OBJ\-> 1 GET
\->LIST 1 \->LIST + -1
STEP
ELSE OBJ\-> 1
GET \->LIST
END
END
\>>
trn
\<<
IF DUP TYPE 5
==
THEN
IF DUP 1
GET TYPE 5 \=/
THEN 1
\->LIST
END DUP
SIZE OVER 1 GET
SIZE \-> l n m
\<< 1 m
FOR i 1 n
FOR j l
j GET i GET
NEXT n
\->LIST
NEXT m
\->LIST
\>>
IF DUP SIZE
1 == OVER 1 GET
TYPE 5 == AND
THEN OBJ\->
DROP
END
ELSE
IF DUP SIZE
SIZE 1 ==
THEN V\<-\->M
END TRN
IF DUP SIZE
1 GET 1 ==
THEN V\<-\->M
END
END
\>>
MOP
\<< 1 CF DEPTH
\->LIST DUP \-> s
\<< LIST\-> DROP
\-> a o
\<< a DUP
IFERR RCL
1 SF SWAP DROP
THEN
END 1
OVER SIZE LIST\-> 1 -
IF
THEN *
END
IFERR
FOR i
IF 1
FS?
THEN
a
END i
OVER i GET 'X' STO
o EVAL
IFERR
PUT
THEN
ROT (1,0) * ROT ROT
PUT
END
NEXT
THEN
DROP2 'X' PURGE
IF 1
FS?
THEN
STO
ELSE
DROP
END
CLEAR s LIST\-> DROP
"MOP Error:
" ERRM
+ DOERR
ELSE
IF 1
FC?
THEN
SWAP
END
DROP
END 1 CF
'X' PURGE
\>>
\>>
\>>
V\<-\->M
\<<
IF DUP SIZE
SIZE 1 ==
THEN 1 V\->M
ELSE M\->V DROP
END
\>>
END