%endoflist
%external %routine %spec SELECT INPUT(%integer STREAM)
%external %routine %spec SELECT OUTPUT(%integer STREAM)
%external %routine %spec NEWLINE
%external %routine %spec SPACE
%external %routine %spec SKIP SYMBOL
%external %routine %spec READ STRING(%string %name S)
%external %routine %spec NEWLINES(%integer N)
%external %routine %spec SPACES(%integer N)
%external %integer %fn %spec NEXT SYMBOL
%external %routine %spec PRINT SYMBOL(%integer SYMBOL)
%external %routine %spec READ SYMBOL(%name SYMBOL)
%external %routine %spec READ(%name NUMBER)
%external %routine %spec WRITE(%integer VALUE,PLACES)
%external %routine %spec NEWPAGE
%external %integer %fn %spec ADDR(%name VARIABLE)
%external %long %real %fn %spec ARCSIN(%long %real X)
%external %integer %fn %spec INT(%long %real X)
%external %integer %fn %spec INTPT(%long %real X)
%external %long %real %fn %spec FRACPT(%long %real X)
%external %routine %spec PRINT(%long %real NUMBER,%integer BEFORE,AFTER)
%external %routine %spec PRINTFL(%long %real NUMBER,%integer PLACES)
%external %real %map %spec REAL(%integer VAR ADDR)
%external %integer %map %spec INTEGER(%integer VAR ADDR)
%external %long %real %fn %spec MOD(%long %real X)
%external %long %real %fn %spec ARCCOS(%long %real X)
%external %long %real %fn %spec SQRT(%long %real X)
%external %long %real %fn %spec LOG(%long %real X)
%external %long %real %fn %spec SIN(%long %real X)
%external %long %real %fn %spec COS(%long %real X)
%external %long %real %fn %spec TAN(%long %real X)
%external %long %real %fn %spec EXP(%long %real X)
%external %routine %spec CLOSE STREAM(%integer STREAM)
%external %byte %integer %map %spec BYTE INTEGER(%integer VAR ADDR)
%external %integer %fn %spec EVENTINF
%external %long %real %fn %spec RADIUS(%long %real X,Y)
%external %long %real %fn %spec ARCTAN(%long %real X,Y)
%external %byte %integer %map %spec LENGTH(%string %name  S)
%external %routine %spec PRINT STRING(%string(255) STR)
%external %integer %fn %spec NL
%external %long %real %map %spec LONG REAL(%integer VAR ADDR)
%external %routine %spec PRINT CH(%integer CHARACTER)
%external %routine %spec READ CH(%name CHARACTER)
%external %string %map %spec STRING(%integer VAR ADDR)
%external %routine %spec READ ITEM(%string %name ITEM)
%external %string (1) %fn %spec NEXT ITEM
%external %byte %integer %map %spec CHARNO(%string %name STR,%integer CHAR REQD)
%external %string (1) %fn %spec TO STRING(%integer ch)
%external %string (255) %fn %spec SUB STRING(%string(255) STR, %integer FIRST, LAST)
!%external %record (*) %map %spec RECORD(%integer REC ADDR)
!%external %array %map %spec ARRAY(%integer A1ADDR,%array %name FORMAT)
%external %integer %fn %spec SIZEOF(%name X)
%external %integer %fn %spec IMOD(%integer VALUE)
%external %long %real %fn %spec PI
%external %integer %fn %spec EVENTLINE
%external %long %integer %map %spec LONGINTEGER(%integer ADR)
%external %long %long %real %map %spec LONGLONGREAL(%integer ADR)
%external %long %integer %fn %spec LENGTHENI(%integer VAL)
%external %long %long %real %fn %spec LENGTHENR(%long %real VAL)
%external %integer %fn %spec SHORTENI(%long %integer VAL)
%external %long %real %fn %spec SHORTENR(%long %long %real VAL)
%external %integer %fn %spec NEXTCH
%external %half %integer %map %spec HALFINTEGER(%integer ADDR)
%external %routine %spec PPROFILE
%external %long %real %fn %spec FLOAT(%integer VALUE)
%external %long %integer %fn %spec LINT(%long %long %real X)
%external %long %integer %fn %spec LINTPT(%long %long %real X)
%external %short %integer %map %spec SHORTINTEGER(%integer N)
%external %integer %fn %spec TRUNC(%long %real X)
!%endoffile
%list
%BEGIN
%INTEGER I,J
%CONSTSTRING(15)FAILED="***BUG FOUND"
%RECORDFORMAT F(%INTEGER I,J)
%ROUTINESPEC INTERCHANGE(%RECORD(F)%ARRAYNAME A,%INTEGER I,J)
%RECORD(F)%ARRAY A(0:3)
%RECORD(F)%ARRAY B(1:4)
      %CYCLE I=0,1,3
         A(I)_I=I
         B(I+1)_I=I+1
      %REPEAT
      INTERCHANGE(A,1,3)
      PRINTSTRING(FAILED) %UNLESS A(1)_I=3 %AND A(3)_I=1
      INTERCHANGE(B,1,3)
      PRINTSTRING(FAILED) %UNLESS B(1)_I=3 %AND B(3)_I=1
%ROUTINE INTERCHANGE(%RECORD(F)%ARRAYNAME R,%INTEGER P,Q)
%RECORD(F) TEMP
      TEMP=R(P)
      R(P)=R(Q)
      R(Q)=TEMP
%END
%ENDOFPROGRAM
