%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
%string(10) s,t
%constintegername fred = x'244444' {This should fail in SM IMP}
                              {Changing = to == would make it fail in EMAS IMP}
%externalinteger jjfred=7
%ownintegerarray opcode(0:20) =  {opcode values; the next line is blank - N.B.}

         16_5800,    16_4800,    16_5000,    16_4000,
{           L           LH          ST          STH}
         16_5A00,    16_5B00,    16_5C00,    16_5D00,
{           A           S           M           D}
         16_1A00,    16_1B00,    16_1C00,    16_1D00,
{           AR          SR          MR          DR}
         -1(*)                                         {all the rest}
%string(9)%name sref
%integer i,j,k
%ownintegerarray twod(1:2,1:3) = 1,2,3,4,5,6
%real d
i=10; j = 3; k=1
! This is a comment; this is part of it
i{this is an embedded comment; I hope it { works} = j\\k
%for i=1,1,2 %cycle
   %for j=1,1,3 %cycle
      %if twod(i,j) # (j-1)*2 + i %start
         write(i,1); write(j,1)
         printstring(" th element of TWOD has value")
         write(twod(i,j),2)
         newline
      %finish
   %repeat
%repeat
k = k'6632'
k = i!!j
! Various uses of \, ~ etc.
%if \i=j %then k=0
%if i\=j %then k=0
%if \i\=j %then k=0
%if \i\=\j %then k=0
%if ~i=j %then k=0
%if ~i=\j %then k=0
%if ~i<>\j %then k=0
d = 23.
k=2; i = j\\k
sref == s {This should fail in SM IMP - sref and s have different lengths}
s = "1234567890"
t = substring(s,3,2) {This should succeed in SM IMP but fail in EMAS IMP}
%endofprogram
