& PERLE
.ORIGIN '2000;
.CONSTANT M = -5;
.COMPCONST NUMBER = '257;
.INTEGER I, J;
.LABEL E;
.ARRAY S[M];
@ .PROCEDURE OUT;
.BEGIN %SKS,'104; %JMP,*-1; %OCP,'104;
%OTA,4; %JMP,*-1;
.END;
.PROCEDURE NEWLINE;
.BEGIN OUT('215); OUT('212);
.END;
.PROCEDURE PERLE;
& ADAPTED FROM C.A.C.M ALGORITHMS NO. 202
.INTEGER J, J1, J2, J3, W, W1, U;
.BEGIN
.WHEN I .NZ .THEN
.BEGIN
.FOR J := M .DO
S[J] := .NEG J;
I := .Z;
.GOTO ROSE;
.END;
W := M;
LILIE:
W1 := .INC W;
.WHEN S[W] < S[W1] .THEN
.BEGIN
.WHEN W = -2 .THEN
.GOTO E;
W := W1;
.GOTO LILIE;
.END;
U := S[W1];
J := M;
.FOR J1 := M - W - 1 .DO
.BEGIN
.WHEN S[J] > U .THEN
.BEGIN S[W1] := S[J];
S[J] := U;
.GOTO TULPE;
.END;
J := J + 1;
.END;
TULPE:
J := .Z;
.FOR J1 := M - W1 .SHSRA 1 .DO
.BEGIN
J2 := M + J;
J3 := W - J;
U := S[J2];
S[J2] := S[J3];
S[J3] := U;
J := J + 1;
.END;
ROSE:
.END;
.ORIGIN '1000;
.BEGIN I := -1;
L:
PERLE;
NEWLINE;
.FOR J := M .DO
.BEGIN
INDEX := M - J - 1;
OUT(NUMBER + S[#]);
.END;
.GOTO L;
E:
NEWLINE;
.END;