& I/O ROUTINES FOR PL-516 .ORIGIN '1000; .COMPCONST ZEROSYMBOL = '260, NINESYMBOL = '271, MINUSSIGN = '255, SPACE = '240, CR = '215, LF = '212, ERASE = '377; .PROCEDURE INCHAR; .BEGIN   L:%OCP,1;   %INA,'1001;   %JMP,*-1;   %OCP,'101;   .WHEN .Z .THEN   .GOTO L;   .WHEN @ = ERASE .THEN   .GOTO L;   @ := @ .AND '177 .NEV '200; .END; @.PROCEDURE OUT1; .BEGIN   %SKS,'104;   %JMP,*-1;   %OCP,'104;   %OTA,4;   %JMP,*-1; .END; .PROCEDURE NEWLINE; .BEGIN   OUT1(CR);   OUT1(LF); .END; @ .CONDITIONAL .PROCEDURE DIGIT; .BEGIN   .WHEN .LE NINESYMBOL .THEN   .WHEN .GE ZEROSYMBOL .THEN   .EXITTRUE; .END; .PROCEDURE READ; .INTEGER N,M,MINUS; .BEGIN   MINUS := .Z;   MORE:   .IF DIGIT(INCHAR.THEN   N := @ - ZEROSYMBOL   .ELSE   .BEGIN     .WHEN @ = MINUSSIGN .THEN     MINUS := -1;     .GOTO MORE;   .END;   .WHILE DIGIT(INCHAR.DO   .BEGIN     M := @ - ZEROSYMBOL;     N := N .SHSLA 3 + N N M;   .END;   @:=.IF MINUS .Z .THEN N .ELSE .NEG N; .END; @ .PROCEDURE PRINT; .INTEGER M; .ARRAY P[5](10000,1000,100,10,1), D[5]; .BEGIN   M := @;   .FOR # := -5 .DO   D[#] := .Z;   @ := .ABS M;   .FOR # := -5 .DO   .BEGIN     .WHILE .GE P[#] .DO     .BEGIN       @ := @ - P[#];       %IRS*D;     .END;   .END;   NEWLINE;   OUT1(.IF M .LZ .THEN MINUSSIGN .ELSE SPACE);   .FOR # := -5 .DO   OUT1(D[#] + ZEROSYMBOL); .END; & PROGRAM TO SORT NUMBERS INTO ASCENDING ORDER .INTEGER I, J, T, MARK; .CONSTANT SIZE = -20; .ARRAY A[SIZE]; .ORIGIN '2000; .BEGIN      .FOR I := SIZE .DO   A[I] := READ;      AGAIN:   MARK := .Z;      .FOR I := SIZE + 1 .DO   .BEGIN     J := I - 1;     .WHEN A[I] < A[J.THEN     .BEGIN       T := A[I];       A[I] := A[J];       A[J] := T;       MARK := -1;     .END;   .END;      .WHEN MARK .LZ .THEN   .GOTO AGAIN;      .FOR I := SIZE .DO   PRINT(A[I]); .END;