\\LDADDR     02.09.86 VERSION 22
(EXPR CH:? ? ERROR:?)->IF CALL ^1 ^2<> THEN RETURN ^3
LOCALS LSTACK

PROGRAM TOSTAC()
* INPUT:  <X> - VALUE TO WRITE INTO STACK
*
  IF CALL WRITE #MIN2$#SP,0<> THEN CALL IT ,,'CHANER'
**IF #SP<=&FF THEN #ITWORD=#ITWORD.IOR.'SL:BIT'
  RETURN ,

PROGRAM FROMST()
* INPUT:  NO
* OUTPUT: CARRY -- FALSE  -->  ERROR
*               -- TRUE   -->  <A> - VALUE
*
  IF CALL READ #SP,0<> THEN CALL IT ,,'CHANER'
  ,,#SP=,,#SP+2
  RETURN ,,0

LOCALS -LLOAD
  DATA P,L
  EQUALS PSTACK=6
  DATA ARG
  BYTES NREG=0

PROGRAM LDADDR(#W4)
* INPUT:  <A> - ARGUMENT OF COMMAND
* OUTPUT: <A> - ADDRESS OF VALUE
*
  NREG:=.AND.&7<1
  =#W4>3.AND.&7
  (XCASE ^A OF 7
  XCASE (RN)
    =#REG(NREG:)
  XCASE (RN)+
    ARG=#REG(NREG:)
    $#REG()=((IF #TIPCOM<> AND NREG:<'PSTACK' THEN =1 ELSE =2))
    =ARG
  XCASE @(RN)+
    CH:READ #REG(NREG:),0 ERROR:,
    ,,#REG()=,,#REG(NREG:)+2
  XCASE -(RN)
    IF #TIPCOM<> AND NREG:<'PSTACK' THEN =#MIN1 ELSE =#MIN2
    $#REG(NREG:)=
  XCASE @-(RN)
    CH:READ #MIN2$#REG(NREG:),0 ERROR:,
  XCASE XXX(RN)
    CH:READ #PC,0 ERROR:,
    ,,#PC=,,#PC+2
    =+#REG(NREG:)
  XCASE @XXX(RN)
    CH:READ #PC,0 ERROR:,
    ,,#PC=,,#PC+2
    CH:READ +#REG(NREG:),0 ERROR:,
  XCASE)
  RETURN ,,0
