.COMPCONST START = '10000; .ORIGIN START+'4; .GLOBAL '500; .FORWARD .PROCEDURE MAIN; .BLOCK .INTEGER PLOWHIGHTHIGHCOUNTSUMCHECK; .ARRAY A[0]; .ARRAY BOOT[33](   '020,   '002010, & 20 JMP 10    '140040, & 21 CRA       '020042, & 22 JST 42    '101040, & 23 SNZ       '002022, & 24 JMP 22    '020042, & 25 JST 42    '010020, & 26 STA 20    '010060, & 27 STA 60    '020051, & 30 JST 51    '010000, & 31 STA 0     '020051, & 32 JST 51    '110060, & 33 STA*60    '024000, & 34 IRS 0     '002032, & 35 JMP 32    '020051, & 36 JST 51    '024020, & 37 IRS 20    '000002, & 40 HLT       '002021, & 41 JMP 21    '000002, & 42           '141240, & 43 ICR       '030001, & 44 OCP 1    '130001, & 45 INA 1    '002045, & 46 JMP 45    '030101, & 47 OCP 101          '102042, & 50 JMP*42          '000002, & 51           '020042, & 52 JST 42    '020042, & 53 JST 42    '026020, & 54 IMA 20    '014020, & 55 ADD 20    '026020, & 56 IMA 20    '102051  & 57 JMP*51  ); @ .CONDITIONAL .PROCEDURE CR; .BEGIN   .WHEN @ = '215 .THEN .EXITTRUE; .END; @ .CONDITIONAL .PROCEDURE DIGIT; .BEGIN   .WHEN .RANGE '260 .TO '267 .THEN .EXITTRUE; .END; .COMPCONST LINESIZE = -20, QUERYSYMBOL = '277, ARROW = '337; .ARRAY LINE[LINESIZE]; @ .PROCEDURE PUNCH; .BEGIN   %OTA, 2;   %JMP, *-1; .END; @ .PROCEDURE PUNCHWORD; .INTEGER K; .BEGIN   K := @;   SUMCHECK := SUMCHECK K;   PUNCH(.SWOP K);   PUNCH(K); .END; @ .PROCEDURE LEADER; .INTEGER I; .BEGIN;   .FOR I := @ .DO PUNCH(.Z); .END; @ .PROCEDRUE OUT; .BEGIN   %SKS, '104; %JMP, *-1;   %OCP, '104;   %OTA, 4; %JMP, *-1; .END; .PROCEDURE NEWLINE; .BEGIN   OUT('215); OUT('212); .END; .PROCEDURE INCHAR; .BEGIN   L:   %SKS, '104; %JMP, *-1;   %OCP, 4;   %INA, '1004; %JMP, *-1;   @ := @ .AND '177 .NEV '200;   .WHEN CR(@) .THEN .EXIT;   .UNLESS .RANGE '240 .TO '337 .THEN .GOTO L; .END; .PROCEDURE NUMBER; .INTEGER N; .BEGIN   N := .Z;   .WHILE DIGIT(LINE[P]) .DO   .BEGIN     @ := LINE[P.SHDRL 3;     N := N .SHDLL 3;     %IRSP;   .END;   @ := N;   %IRSP; %NOP; .END; .PROCEDURE MAIN; .BEGIN   LEADER(-100);   .FOR # := -33 .DO   PUNCHWORD(BOOT[#]);   LEADER(-20);   NEWSEGMENT:   NEWLINE;   OUT(QUERYSYMBOL);   .FOR # := LINESIZE .DO   .BEGIN     LINE[#] := INCHAR;     .WHEN CR(@) .THEN .GOTO OK;     .WHEN @ = '241 .THEN INDEX := INDEX - 2;   .END;   OK:   P := LINESIZE;   .WHEN LINE[P] = ARROW .THEN   .BEGIN     PUNCHWORD('40041);     PUNCHWORD(-2);     PUNCHWORD('102040);     %IRSP;     PUNCHWORD(NUMBER);     LEADER(-100);     NEWLINE;     %HLT;   .END;   LOW := NUMBER;   HIGH := NUMBER;   .WHILE HIGH LOW .DO   .BEGIN     .IF HIGH - 99 > LOW .THEN     .BEGIN       COUNT := -100;       THIGH := LOW + 100;     .END .ELSE     .BEGIN       COUNT := LOW HIGH -1;       THIGH := HIGH + 1;     .END;     SUMCHECK := -1;     LOW := THIGH;     @ := @ + '40000;     %STAAPUNCHWORD(@);     PUNCHWORD(COUNT);     .FOR # := COUNT .DO     PUNCHWORD(A[#]);     PUNCHWORD(SUMCHECK);     LEADER(-12);   .END;   .GOTO NEWSEGMENT; .END; .ENDBLOCK; .ORIGIN START; .BEGIN   MAIN; .END;