& PRIME NUMBER SQUARE .INTEGER IJKSTARTSQUARESIZESQR2, SIDESTEP; .COMPCONST CR='215, LF='212, MAXTABLESIZE=-18; .TABLE SQ .LATER; .STRING STARTPROG = /PRIME NUMBER SQUARE./; @ .PROCEDURE TYPE; .BEGIN   %SKS,'104; %JMP,*-1; %OCP,'104;   %OTA,4; %JMP,*-1; .END; @ .PROCEDURE TYPE2; .BEGIN   TYPE(.SWOP @);   TYPE(.SWOP @); .END; .PROCEDURE NEWLINE; TYPE2(<CRLF>); @ .PROCEDURE OUTSTRING; .INTEGER P; .ARRAY STRING[0]; .BEGIN   %STASTRING;   .FOR P := .Z .DO   .BEGIN     INDEX := P .SHSRA 1;     @ := STRING[#];     .UNLESS .CSET .THEN %ICA;     .WHEN .CLEFT @ = $$. .THEN .EXIT;     TYPE(@);   .END; .END; .PROCEDURE INCHAR; .BEGIN   %SKS,'104; %JMP,*-1; %OCP,4;   %INA,'1004; %JMP,*-1; .END; @ .CONDITIONAL .PROCEDURE PRIME NUMBER; .COMPCONST NOPRIMES = -12; .ARRAY PRIME[NOPRIMES](2, 3, 5,   7, 11, 13, 17, 19, 23, 29, 31, 37); .ARRAY PRIMESqUARES[NOPRIMES](2, 4, 9, 25, 49,   121, 169, 289, 381, 529, 841, 961); .INTEGER NUMBER; .BEGIN   NUMBER := @;   .FOR # := NOPRIMES .DO   .BEGIN     .WHEN NUMBER .LE PRIMESQUARE[#]     .THEN .EXITTRUE;     .WHEN NUMBER/PRIME[#] * PRIME[#]     = NUMBER .THEN .EXITFALSE;   .END; .END; .PROCEDURE READNUMBER; .INTEGER N; .BEGIN   N := .Z;   .WHILE INCHAR .RANGE $$0 .TO $$9 .DO   N := @ - $$0 + (N * 10);   @ := N; .END; @ .PROCEDURE PRINTNUMBER; .INTEGER N; .ARRAY POWER[3](100, 10, 1); .BEGIN   N := @;   TYPE($$ );   .WHEN N .Z .THEN   .BEGIN     TYPE2($  );     TYPE($$0);     .EXIT;   .END;   .FOR # := -3 .DO   .IF N .GE POWER[#] .THEN .GOTO DIGIT   .ELSE TYPE($$ );   DIGIT:   TYPE(N/POWER[#] + $$0);   N := .B;   %IRS, 0;   .GOTO DIGIT; .END; .ORIGIN 0; .SET SQ[MAXTABLESIZEMAXTABLESIZE]; .ORIGIN '1000; .BEGIN   NEWLINE;   OUTSTRING(.CODEWORD STARTPROG);   REPEAT:   NEWLINE;   OUTSTRING("STARTING FROM .");   START := READNUMBER;   NEWLINE;   OUTSTRING("SIZE OF SQUARE .");   SQUARESIZE := .NEG READNUMBER .SHSRA 1;   SQR2 := @ .SHSLA 1;      .WHEN @ * SQR2 START > 1000   .OR SQR2 MAXTABLESIZE .THEN   .BEGIN     NEWLINE;     OUTSTRING("TOO BIG.");     .GOTO REPEAT;   .END;      IJ := SQUARESIZE;   STEP := -1;   SIDE := -4;      MORE:   .FOR K := STEP .DO   .BEGIN     SQ[IJ] := START;     %IRSSTART;     .CASE SIDE .OF I := I - 1,       J := J - 1,       .BEGIN         %IRSI; %SKP;         .GOTO FINISH;       .END,       %IRSJ);   .END;   %IRSSIDE.GOTO OK;   SIDE := -4;   OK:   .WHEN SIDE .EVEN .THEN STEP := STEP - 1;   .GOTO MORE;   FINISH:   NEWLINE;   NEWLINE;   .FOR I := -1 .STEPDOWN -1 .UNTIL SQR2 .DO   .BEGIN     NEWLINE;     .GET SQ[I];     .FOR J := SQR2 .DO     .IF PRIMENUMBER(SQ[#,J]) .THEN     PRINTNUMBER(SQ[#,J]) .ELSE     .BEGIN       TYPE2($  );       TYPE2($* );     .END;     NEWLINE;   .END; .END;