%BEGIN %INTEGER LINE, ADDR %ROUTINE POCT(%INTEGER N) %INTEGER J SPACE PRINTSYMBOL(N>>J&7+'0') %FOR J = 15,-3,0 SPACE %END %ROUTINE GET(%INTEGERNAME N) %INTEGER S READSYMBOL(N); READSYMBOL(S) N = N+S<<8 %END %ROUTINE NEXT LINE %INTEGER S, N SELECTINPUT(2) %CYCLE READSYMBOL(S) %UNTIL S = 1; SKIPSYMBOL GET(N); GET(ADDR) N = (N-6)//2 %STOP %IF N <= 0 GET(S) %FOR N = 1, 1, N SKIPSYMBOL READSYMBOL(S); READSYMBOL(N) LINE = S>>1+N<<6 %RETURN %IF ADDR >= 0 %REPEAT %END %ROUTINE GET SOURCE %OWNINTEGER HERE = 0 %INTEGER J, S SELECTINPUT(1) %WHILE LINE # HERE %CYCLE HERE = HERE+1; WRITE(HERE, 4) %IF HERE = LINE %THEN POCT(ADDR) %ELSE SPACES(8) READSYMBOL(S) %AND PRINTSYMBOL(S) %UNTIL S < ' ' NEWLINE %AND %STOP %IF S<0 %OR S=4 %REPEAT %END LINE = 0; ADDR = 0 SELECTOUTPUT(1) PRINTSYMBOL(12); NEWLINE %CYCLE NEXT LINE %UNTIL LINE > 0 GET SOURCE %REPEAT %ENDOFPROGRAM