comment A1 -- DH's versions;
comment A1 now has crude inbasicsymbol;

procedure open(dv);  value dv;  integer dv;
kdf9 2/1/1/0;
   {dv}; JSP293; exit 

P293V40; ( Open );
   V0 = Q 0/AV1/AV40;         (+ V-stores are paper tape input buffer );

   SET20; NEV; J1=Z; EXIT1;   (+ interim version only devs 20 and 30 allowed );
1; V0; =Q15; SET2; SET5; OUT; =C15;   (+ Max amount of data is 320 chars );
   Q15; =V0;
2; PREQ15; PARQ15;
   I15; =RM15; SET-48; =C15; Q15; =V0P295;
   EXIT1;

P295V9; ( General Character and Basic Symbol Handling );
    V3 = 0;      (+ shift indicator );
    V4 = B 000 00 230 645 07 246;   (blank, pound, semicolon, !=, star, comma   000 012 230 322 216 246);
    V5 = B 000 05 230 603 50 413;   (blank, subten, semicolon, +,  -,   dot     000 012 230 301 321 013);
    V6 = -1;                        ( retained basic symbol );
    V7 = Q B134601 / B104631 / B101302;    ( colon, uparrow, lhsq, rhsq, lt, gt );
    V8 = Q B121261 / B110604 / B112000;    ( =, times, idiv, bra, ket, 000 );
    V9 = Q B106616 / B111235 / B131000;    (C15 = 0 for LH-quote, 1 for star, 2 for <=, 3 for RH-quote, 4 for >= );

10; V6; REV; =V6; J91<Z;   (+ retain basic symbol );
    SET10; SET5; J109P299; (+ error if used twice );

4;          (+ initialise basic symbol fetch );
3;          (+ initialise character fetch );
    ERASE;  (+ assume dv = 20 );
    V0; DUP; JP299=Z;
    =Q13; EXIT1;

94; V0P293; =Q15; JS2P293; V0; =Q13;
5;  J52C13NZ;                        (+ fetch character );
    SETAV40P293; M13; -; J94=Z;          ( end of buffer );
    M+I13; SET-48; =C13;             ( move to next word );
52; SET6; =+C13; M0M13; SHLC13; SETB77; AND;
91; EXIT1;

8;          (+ freeze basic symbol fetch );
7;          (+ freeze character fetch );
    Q13; =V0; EXIT1;

85; =V3;    ( store shift char and fetch another symbol );
6;          (+ fetch basic symbol - only letters and digits + a few others );
    V6; ZERO; NOT; =V6; DUP; J92>=Z; ERASE;
    JS5; DUP; SHL-5; J86=Z; SETB25; -; SET26; V3; AND; +; EXIT2; ( letter );
86; DUP; J87#Z; ERASE; SETB236; EXIT2;
87; DUP; NOT; NEG; SHL-4; J88=Z;              ( J if not / or digit etc );
    DUP; SETB32; -; DUP; SHL+3; =C15; J89<Z;  ( J if / or digit );
    ERASE; J70C15Z;                           ( J if underline );
    V3; =M15;                                 ( shift indicator );
    V5M15; SHLC15; SHL-40; DUP; J96=Z; EXIT2; ( chars beyond digits );

89; V3; J93#Z; SETB20; -; DUP; J92>=Z;              ( j IF digit );
    ERASE; SETB241;                        ( SLASH );
92; EXIT2;

93: ( shifted digit );
    ERASE; V8; V7; SHLDC15; ERASE; SETB377; AND; EXIT2;

88; SHC-1; DUP; NEG; NOT; J84#Z; ERASE; SETB240; EXIT2;   (carriage return);
84; STR; NOT; REV; SET3; NEV; J85=Z;    ( SHIFT CHAR );

71: NC15; ERASE; (C15 = 0 for LH-quote, 1 for star, 2 for <=, 3 for RH-quote, 4 for >= );
    C15; SHL+3; =C15; V9; SHLC15; SHL-40; EXIT2;
70; JS6; J96; C0TOQ15;
    SETB211; J71=; DC15; DUP; J71=Z;  DC15; SETB202; J71=;
    DC15; SETB231; J71=; DC15; SETB302; J71=;
96; ERASE; SETB216; EXIT2; (+ fetch basic symbol - too fancy - return asterisk );
  ( SET6; SET5; J109P299;     earlier failure response );

12; ERASE;                 (+ initialise basic symbol output - ignore device number );
    SETB177615; =V1;       (+ opening string quote );
    M2TOQ8;                (+ keep stack pointer );
    EXIT1;

    V2 = Q B117256/B120240/0; (+ space, tab, page?? newline?? );
18; SHL+3; =C8;            (+ output editing symbol );
    V2; SHLC8; SHL-40;     (+ drop through to output basic symbol );

14; V1; DUP;               (+ output basic symbol );
    NOT; SHL-40; J141=Z;   (+ J if word not full );
    =Y0M2Q; ZERO; NOT;
141;SHL+8; OR; =V1;
    C0TOQ8;                (+ mystery use of J116C8Z in P291 );
    EXIT1;

16; SETB235; JS14;         (+ freeze basic symbol output );
    V1; NOT; ZERO;
161;ERASE; ZERO; SHLD+8;
    DUP; J161=Z;           (+ remove dummies at start of word );
    SHLD-8; ERASE; NOT;
    =Y0M2Q;                (+ partial word to buffer );
    M8; SETAY0; +;         (+ closing string quote to use writetext );
    JS2P288;
    M8TOQ2;                (+ put the stack pointer back );
    VR;                    (+ P291 (write) sometimes leaves overflow set );
    EXIT1;

(+ stolen from KQX -- used in format );
20;     ERASE;
1;      (Fetch BS from string address in M14);
        J189C13NZ;
        M0M14Q; =V8; SET6; =C13;
189;    V8; ZERO; SHLD+8; REV; =V8;
        DC13; SETB236; J20=;
        SETB240; J20=;
        SETB256; J20=;
        EXIT1;

(+ unimplemented );
9;  SET9; SET5; J108P299; (+ retain character );
11; SET11; SET5; J108P299; (+ initialise character output );
13; SET13; SET5; J108P299; (+ output character );
15; ZERO; SET15; SET5; J108P299; (+ freeze character output );
116;SET116; SET5; J108P299; (+ output characters with automatic case management );


P288V41;       ( write text -- also used in R16P295 );
      V0 = Q 0/1/AV0;      ( buffer for partial line );

      ERASE;                       ( ignore device number for now );
2;    SETAY0; M2; +; DUP; PERM; NOT; NEG; =RM15;
      CI0TOQ13;  SET100; =C15;     ( P700 setup missed out by side entry);
      V0; = Q14; J10C14Z;          ( J if there is no left-over partial line );
11;   M0M14Q; =M0M15Q; J11C14NZ;   ( copy it at start of output area );
      M0M14N; NOT;                 ( turn dummies to zeros );
      DUP; SHL+42; J9#Z;           ( J if last saved word is full);
      SETB77;
8;    DUPD; SET+6; =+C13;          ( find position of next free char slot );
      SHLC13; AND; J8=Z;           ( J if character is dummy - 1st char is never dummy );
      REV;
      ZERO; NOT; SHLC13; NEV;      ( invert the characters back to normal leaving the blanks );
      M-I15; =M0M15Q;              ( and put the word back in the buffer );
9;    ERASE;
10;   JS22P700;                    ( convert ABS to chars );
      SETAV0; =RM14;
      SETB102; DUP;                ( leave 1 in the nest for use later );
      M0M15; NEV;
      SETB76; AND; J3=Z;           ( N1=Z for any paper feed );
      =Y0M2;                       ( if we scan back to this there is no newline - 01 can never be output by P700 );
      I15=-1; SET40; =C15;         ( for scanning backwards to find last cr );
      M0M15Q;
4;    =M0M14QN; M0M15Q; J6C15Z; DUP; SETB76;
      AND; NEG; NOT; NEG; NOT;
      J4#Z;
      NC14; I14=-1;                ( Ready to unstack the saved words );
      M-I15;                       ( last word to be output );
      SETB102; NEV;                ( no newline in output string );
3;    Q14; =V0;                    ( stack of output held over to newline );
      SETB30; =Y0M2;               ( always output on stream 30 for now );
      REV; =I15;                   ( start of output kept from label 2 );
      J12=Z;                       ( jump if there was no newline char );
      C0TOQ15; Q15;
      SET8; OUT;
12;   EXIT1;

6;    M0M15; SET3; SETB177410; J108P299; (fail too much output without cr );

algol 

procedure close(dv);  value dv;  integer dv;
kdf9 12/3/2/0;
   {dv};JSP292; exit   (+ P292 is missing from KQX9101, so it used to be in runtime2.txt );

P292V0; ( Close );
   V0 = Q B106640 / B116400 / 0;     ( {{c}} );
   ERASE;                  ( interim version only devs 20 and 30 actually work );
   V0P288; SHL-32; J9=Z;   ( J if no incomplete line to print );
   SETAV0; J2P288;         ( output newline to force printing );
9; EXIT1;
21;SET21; SET2; J109P299;  ( don't know why we need this - perhaps we don't );

algol 

comment A4;

real procedure read(device); value device; integer device;
        kdf9 12/9/14/0;
        {device}; JSP294; exit;


P294V12;        (read);
        V2=B3244647411363215;
        V3=B1067311107601054;
        V4=B2372617635665123;
        V5=B2567106670407501;
        V6=B6625327150150035;
        V8=B4323345211424636;
        V9=0;
        V10=0;
        V11=B4100000000112235;
        V12=Q2/1/AV8;
        DUP; =V10;
        JS4P295;
        CI0TOQ7; CI0TOQ8; SET10; ZERO; J1NV;
        NOT;
1;      =V7; Q0TOQ9; ZERO; NOT; REV;
        I14; =M7; J8;
$2;     DC9;
3;      DUPD; *D; J5#Z;
        REV; ERASE; J2C9NZS;
4;      DUP; M8; +; J7NV;
        DC9;
5;      DC7; J24C8NZ;
6;      SET1; =+C9; REV;
7;      PERM; ERASE; M+I9;
8;      JS6P295; J34;
        M7; I14; -; J35#Z;
23;     DUPD; =M8; -; J10>=Z;
        REV; DUP; J6C7NZ;
        I7=-1; J9C8NZ;
        M8; J6=Z;
9;      J3>=Z;
        NOT; C0TOQ9; J4;
10;     DUP; M8; -; NOT; DUP;
        J15>Z;
        I7=-1; J25C8NZ;
        J14=Z;
        REV; DUP; J11>=Z;
        J13C9Z;
        NOT;
13;     NEG;
11;     I8; J12>=Z;
        NEG;
12;     I0TOQ8; =V0; Q9; =V1; Q0TOQ9;
        DC8; ZERO; NOT; REV; C0TOQ7;
        J8;
14;     I9; J26#Z;
        I9=+1; J8;
15;     SET182; J17=;
        SET198; J18#;
        ERASE; I8; I8=-1;
16;     J27#Z;
        I7=-1; REV; DUP; J28>=Z;
        REV; J8;
17;     ERASE; I8; I8=+1; J16;
18;     ERASE; I7; J8=Z;
        M8; SETB236; J34=;
        SETB240; J34=;
        SETB256; J34=;
        ERASE;
36;     ERASE; DUP; J19>=Z;
        J29C9Z;
        NOT;
19;     M9; I9; +; NEG; NOT;
        J30=Z;
        I8; J20>=Z;
        NEG;
20;     J21C8Z;
        V1; =Q9; =+C9; V0;
21;     C9; M9; -; M8; JS10P295;
        JS8P295;
22;     V2; *D; SHAD+2; DUPD; ROUND;
        DUP; =Q8; ZERO; REV; -D;
        CONT; DUP; DUP; *; SHA-7;
        DUP; V3; *; V4; +;
        REV; V5; +; V6; REV;
        %; +; REV; SHA-4; DUPD;
        +; PERM; -; SHA+1; %;
        REV; DUP; ZERO; FLOAT; FIX;
        NEG; =C9; ERASE; SHLC9; *;
        Q8; SET48; +; C9; -;
        REV; DUP; J41=Z;
        ZERO; FLOAT; STR;
        PERM; ZERO; SHAD+8;
        CAB; +; SHAD-8; DUP;
        J42 >=Z;
        ERASE;
41;     ERASE; ERASE; ZERO;
        J43;
42;     CONT; REV; CONT;
43;     J33V;
        V7; SHA+48; ERASE; EXIT1;
24;     ERASE; SET1;
31;     CAB; ERASE;
32;     V12; PERM;
        V10; JS39; J37;
        JS39; J38;
        J36;
37;     DUP;
38;     SHL+8; OR; SHL+8; OR; SHL+16;
        V11; OR; =V9; JP299;
25;     ERASE; ERASE; SET2; J32;
26;     ERASE; SET3; J32;
27;     ERASE; SET4; J32;
28;     SET5; J31;
29;     SET6; J32;
30;     SET7; J32;
33;     SET8; J32;
34;     ERASE; J8;
35;     M7; NOT; NEG; =I14;
        I7; J23=Z;
        =M8; J36;
39;     SET10; %I; REV; DUP; J40#Z;
        ERASE; SETB236; EXIT1;
40;     EXIT2;
        algol;

boolean procedure read boolean(device);
        value device; integer device;
        kdf9 12/9/14/0;
        {device};
        (read b00llan);
        JS4P295;
        ZERO; J2;
1;      SETB315; NEV; J3=Z; DUP;
4;      ERASE;
2;      JS6P295;
        J4;
        SETB335; J1#;
        ERASE; NOT;
3;      JS8P295;
        exit;
        algol;

comment A5 -- Genuine library A5 taken from KQX;

procedure write(device,form,value); value device,form,value;
        real value; integer device,form;
        kdf9 12/9/14/0;
        {value}; {form};  {device}; JSP291; exit;


P291V31;        (PROCEDURE WRITE);
        V1=B1212121212121212;
        V2=B2020202020202020;
        V3=B2030446722743250; (1.024 TO 1I.P.);
        V4=B175/8; (1000/1024 TO 1I,P.);
        V5=B1463 1463 1463 1463; (.8 TO 1I.P.);
        V6=B2400 0000 0000 0000; (10/8 TO 1I.P.);
        V7=Q0/3/3; (INITIAL SPACES/SIGN/EXP SIGN);
        V8=B0013573716200001; (FORMAT/DS/ZS/DPH/APM/;/C/NDP);
        V9=B0314631463146315; (.1);
        V10=B0024365605075341; (.01);
        V11=B0000150667056544; (.0001);
        V12=B0000000005274617; (.00000001);
        V13=B12; (10);
        V14=B144; (100);
        V15=B23420; (10000);
        V16=B575360400; (100000000);
        V20=Q12/11/1; (S/F/E);
        V25=B0000 0003 7777 7775;
        V26=B0000 0001 7777 7777;
        V29=B4323606713434452;
        V30=B4720000000000000;
101;    PERM;
102;    =V21;
103;    =V22; DUP; =V31; JS12P295; ZERO; =V28;
        V21; ZERO; SHLD+24;
        REV; ZERO; SHLD+4; =C10; ZERO;
        SHLD+2; =I10; ZERO; SHLD+5; NEG;
        =C7; ZERO; SHLD+4; =C11; ZERO;
        SHLD+2; =M10; ZERO; SHLD+4; =M7;
        SHC+3; =I7; DUP; ZERO; REV;
        SHLDC7; BITS; NEG; NOT; =I11;
        BITS; =M11; V22;
        I13=+1; DUP; J5>=Z;
        NEGF; I13=-1; I10; J5#Z;
        SET2; JS100;
1;      JS80;
70;     M7; SHC-2; J95<Z;
        I7; ZERO; =V27; J4#Z;
        C10; I10; J2=Z;
        NOT; NEG;
2;      M10; J3=Z;
        SET4; +;
3;      M7; SHC-1; SHL-47; +;
        M7; SETB4; AND; SHL-2; +;
        CAB; DUP; SHL+23; SET23; FLOAT;
        FIX; REV; ERASE; CAB;
        +; V31P295; SHL-24; C9; -; +;
        =V27; REV;
4;      I7; NOT; =C13; V31P295; SHL-24; C9;
        -; J115=Z;
        SET2; JS18P295;
115;    V20; =Q11; V7; =Q10; REV;
        ERASE; V8; ZERO; SHLD+24; PERM;
        ZERO; SHLD+5; =M7; ZERO; SHLD+3;
        =I7; SHL-32; =C7; SET11; =M13;
        J7;
5;      NC7; JS80;
        C11; NEG; NOT; =M13; M10;
        J7#Z;
        M14; M11; -; J69>=Z;
        M14; I11; +; DUP; =M15;
        M13; REV; -; J7<Z;
        M15TOQ13; M13; J7>=Z;
        M13; NOT; J6#Z;
        SET5; SHA+43; M13; NOT; NEG; =M13; ZERO;
        NOT; =TR; J10;
6;      ERASE; ZERO; J12;
7;      SET4; =RC15; ZERO; NOT; NEG;
        SHC-2; M13;
8;      SHC-1; DUP; J9>=Z;
        REV; V9M15; *; REV;
9;      M+I15; DC15; J8C15NZ;
        ERASE; SHA-4;
10;     +;
11;     DUP; SHL-43; SET10; -; J113<Z;
        STR; SET10; %D; M+I14; M10;
        J12#Z;
        M13; NOT; NEG; C11; NEV;
        J110=Z;
        J110TR;
        SET1; =+M13;
110;    M14; M11; -; J71>=Z;
12;     ZERO; DUP; =TR; NOT; NEG; M13;
        SET4; =RC15;
13;     SHC-1; DUP; J14>=Z;
        REV; V13M15; *D; CONT; REV;
14;     M+I15; DC15; J13C15NZ;
        ERASE; *D; SHAD+4; REV; ERASE;
        DUP; =V0; JS90;
        =V23; =V24; I10; NEG; NOT;
        SHL-1; J15#Z;
        SETB20; M7; OR; =M7;
15;     I11; M11; +; C11; -;
        ZERO; =RM15; I11; NOT; NEG;
        NOT; NEG; =M13; J18<=Z;
        M14; C11; -; NOT; NEG;
        DUP; J32<Z;
        I11; +;
72;     =C15;
18;     SET8; =RC11; M+I11; SET24; =C13;
        SHL+24;
$16;    DUP; J17<Z;
        SHL+1; DC13; J16C13NZS;
        ERASE; SET3; J74;
113;    J12NTR;
        J6;
32;     I11; +; DUP; J72>=Z;
        ERASE; ZERO; J72;
17;     DC13; SHL+1; J73C13Z;
        C0TOQ14; SET8; =RC12;
19;     DUP; J21<Z;
98;     SETB76; SHC-6; J26;
22;     SETB77; SHC-6;
26;     V17M12; SHLD+6; DC12; =V17M12; ERASE;
        J24C12NZ;
        M+I12; SET8; =C12;
24;     DC14;
29;     DC13; SHL+1; J19C13NZ;
20;     M11; J28=Z;
        V23M11; M-I11; NOT; J20=Z;
        ERASE; SET4; J74;
21;     M13; J107=Z;
        M13; NEG; NOT; =M13;
107;    J31C15Z;
        DC15; M13; SET2; -; J98>=Z;
        ZERO; J26;
31;     ZERO; V23M11; DC11; SHAD-6; =V23M11;
        J25C11NZ;
        M-I11; SET8; =C11;
25;     SHL+1; M7; SETB10; AND; J27#Z;
        SETB77; SHL+42; J26#;
        ERASE; ZERO; J26;
27;     SETB77; SHL+42; J30#;
        M13; J96=Z;
        ERASE; ZERO; J26;
96;     ERASE; M7; SHL-4; J98=Z;
        M+I15; J29;
30;     M7; SHL-4; J26=Z;
        M15; J26=Z;
        ERASE; ERASE; SET5; J74;
28;     ERASE; M15; DUP; =+C10; NEG;
        =+C7; I10; J35=Z;
        I13; J34<Z;
        I10; SHC-1; J33<Z;
        SETB236; J36;
33;     SETB301; J36;
34;     SETB321; J36;
35;     ZERO; NOT;
36;     =I10; NC14; C14; C7; -; M7;
        SHC-3; J67>=Z;
        SETB13; =M13; J77<=Z;
68;     M10; J75=Z;
        V0; J64=Z;
        C0TOQ13; M14; DUP; J37>=Z;
        NEG; DC13;
37;     JS90;
        NOT; J78#Z;
        ZERO; REV; SHAD-12; NOT; J79#Z;
        ZERO; SHLD+7; JS40;
        SETB12; JS14P295;
        SETB77; J51=;
        C13; J38<Z;
        M10; NEG; NOT; NEG; NOT; J50#Z;
        ZERO; JS18P295;
        J39;
38;     SETB321; JS14P295;
        J39;
50;     SETB301; JS14P295;
        J39;
51;     M10; SET3; J52=;
        ZERO; JS18P295;
        C13; J55<Z;
        NEG; NOT; J56=Z;
53;     ERASE; ZERO; JS18P295;
        J58;
52;     ERASE; C13; J54<Z;
        SETB301; JS14P295;
        J53;
54;     SETB321; JS14P295;
        J53;
55;     ERASE; ERASE; SETB321; J39;
56;     ERASE; SETB301;
39;     JS14P295;
58;     SHC+6; JS14P295;
66;     M7; SHC-1; J57>=Z;
        SETB230; JS14P295;
57;     I7; SHL-2; J63#Z;
        I7; =C7; J60C7Z;
59;     SET2; JS18P295;
        DC7; J59C7NZ;
60;     M7; SHC-2; J62>=Z;
        V27; DUP; =C14; J62<Z;
        J62C14Z;
61;     DC14; ZERO; JS18P295;
        J61C14NZ;
62;     JS16P295;
        V28; J111=Z;
        V28; V0P299; JS12P295;
        SETB042; JS14P295;
        SETB021; JS14P295;
        DUP; SHL-6; DUP; J23#Z;
        ERASE; SETB236;
23;     JS14P295; SHL+42; SHL-42; JS14P295;
        SETB17; JS14P295;
        V1; V31; FRB; DUP; SHL-12; DUP; J114#Z;
        ERASE; SETB236;
114;    JS14P295; SHL+36;
        DUP; SHL-42; JS14P295;
        SHL+6; SHL-42; JS14P295;
        J116C8Z;
        SETB240; JS14P295;
116;    JS16P295;
111;    EXIT 1;
63;     SET3; JS18P295;
        J60;
64;     JS40;
        SET4; =C14;
65;     ZERO; JS18P295;
        DC14; J65C14NZ;
        J66;
67;     M0TOQ13; J68=Z;
        SET6; J74;
69;     SET7; JS100;
        J70;
71;     ERASE; ZERO; =TR; SET8; JS100;
        V22; J1;
73;     ERASE; SET9;
74;     JS100;
        V21; SHL-24; V22; J1;
75;     JS40; J66;
77;     SET10; J74;
78;     ERASE; SET11; J74;
79;     ERASE; SET12; J74;
95;     SETAV29; V22; SET1; JP299;
40;     J42C10Z;
41;     DC10; ZERO; JS18P295;
        J41C10NZ;
42;     M7; SHC-2; J43>=Z;
        SETB216; JS14P295;
43;     I10; J44<Z;
        I10; JS14P295;
44;     SET8; C12; -; =C12;
        M13; J88=Z;
        J112C7Z;
46;     J45C12NZ;
        M-I12; SET8; =C12;
45;     ZERO; V17M12; SHLD-6; =V17M12; SHC+6;
        M13; J93=Z;
        C7; NEG; NOT; J93=Z;
        SETB77; J47=;
94;     SETB76; J47=;
97;     JS14P295;
48;     DC14; DC12; DC7; J46C7NZ;
        M13; J49=Z;
112;    M13; JS14P295;
        M0TOQ13; C14TOQ7; J46;
47;     ERASE; ZERO; JS18P295;
        J48;
93;     SETB77; J94#;
        ERASE; ZERO; J97;
49;     EXIT1;
88;     J89C12NZ;
        M-I12; SET8; =C12;
89;     ZERO; V17M12; SHLD-6; =V17M12; SHC+6;
        SETB76; J99=;
        SETB77; J104=;
105;    JS14P295;

106;    DC14; DC12; DC7; J88C7NZ;
        EXIT1;
99;     ERASE; ZERO; JS18P295; J106;
104;    ERASE; ZERO; J105;
80;     DUP; =TR; ABSF; FIX; DUP;
        SHL-47; =M14; ABS; =C14; SETAV25;
        =RM15; SHA-1; DUP; J109=Z;
        SET-10;
81;     =I14; M15M14H; SHA-24; =I15;
82;     C14; I14; DUP; PERM; +;
        J83<Z;
        =+C14; I15; =+C15; V3M14; *D;
        SHAD+1; ROUND; J82;
83;     SHA-3; J84=Z;
        SET2; =+M14; SET-3; J81;
84;     M14; SHC-1; J85<Z;
        NC14;
85;     DC14; NC14; STR; SHADC14; J87;
86;     ERASE; SET10; *D; DC15;
87;     DUP; J86=Z;
        SHAD-4; ERASE;
109;    C15; =M14; I14=+1; J108NTR;
        NEG;
108;    EXIT1;
90;     DUP; J76#Z;
        NOT; DUP; SHL+6; J92;
76;     V16; NEG; DUPD; +; J91<Z;
        NEG; %I; V1; REV; FRB;
91;     REV; V1; REV; FRB; V2;
        DUPD; REV; -; AND; V2;
        NEV; ZERO; FLOAT; FIX; NOT;
        NEG; =C15; ERASE; ZERO; NOT;
        STR; NEV; SHAC15; OR; REV;
        DUP; J92>=Z;
        SHA-27; REV;
92;     REV; EXIT1;
100;    =V28; EXIT1;
        algol;

integer procedure format(lay out);
        string lay out;
        kdf9 12/9/14/6;
        (format);
        V2=B0013573703034671;
        V5=B4321221604215035;
        V6=B4720000000000000;
        {lay out};
        DUP; =V1; =RM14; SET2; SHC-8;
        =V0; Q0TOQ15; SET24; DUP; =C12;
        SHA-1; =C11; Q0TOQ13; IM0TOQ12; IM0TOQ11;
        Q12TOQ10; Q0TOQ9; ZERO; JS27;
        SETB215; J32#;
        ERASE; J2;
1;      REV; DUP; SHA+2; +; SHA+1;
        +;
2;      JS27;
        DUP; SET10; -; J1<Z;
        SETB70; (s); J26#;
        ERASE; DUP; SHL-4; J33#Z;
        DUP; J23=Z;
        =V3; DC15;
3;      ZERO; DUP; NOT; NEG;
4;      JS27;
        J22C15Z;
        SETB70; (s); J13=;
5;      SETB51; (d); J11=;
        SETB301; (+); J14=;
        SETB321; (-); J14=;
        SETB322; (#); J14=;
        SETB13; (.); J16=;
        DUP; (zero); J17=Z;
        SETB63; (n); J10=;
        SETB12; (10); J18=;
        SETB230; (;); J19=;
        SETB50; (c); J20=;
        SETB65; (p); J21=;
        SETB235; J31#;
6;      I12; J7#Z;
        SET24; C12; -; J31=Z;
        ERASE; OR; =V4; J8;

7;      C12; NEG; NOT; J31#Z;

        M11; J31=Z;
        ERASE; ERASE; SETB3; DUP; PERM;
        AND; NEV; J34#Z;
8;      ZERO; M10; SHLD-3; ERASE; I9;
        SHLD-1; ERASE; SHL-1;
        I10; SHLD-1; ERASE;
        I13; SHLD-1; ERASE;
        M11; SHLD-2; ERASE;
        SET12; C11; -; SHLD-4; ERASE;
        SET24; C10; -; SHLD-5; ERASE;
        I11; SHLD-2; ERASE;
        V3; SHLD-4; ERASE;
        V4; SHLD-24; ERASE;
9;      exit;
10;     (n); C11; SET12; -; J11#Z;
        I13=+1;
11;     J31C9NZ; (d, zero or terminator);
        I12; J12#Z; (EXM);
        J31C11Z; (SFC>12);
        DC11;
12;     PERM; DUP; PERM; OR; REV;
        CAB; (insert digit in field lay out);
13;     ERASE; SHL+1; DC12; J32C12Z; (EFC>24);
        I10; J4#Z; (DPM);
        DC10; J4C10NZ; (NDP);
        J32;
14;     (+-#); SHC-4; DUP; SHL+46; REV;
        SHL-44; ROUND; (1=+, 2=-, 3=#);
        I12; J15#Z; (EXM);
        C12; SET24; -; J31#Z; (SFC=0);
        I11; J31#Z; (first sign);
        =I11; J4;
15;     (EXP SIGN); SET3; C12; -; J31#Z;
        M11; J31#Z;
        = M11; J4;
16;     I10; J31#Z; (DPM);
        ERASE; I10=+1; J4;
17;     (zero); J12C9NZ;
        C11; SET12; -; J31=Z;
        DC9; J12;
18;     (subten); I12; J31#Z;
        I10; J31=Z;
        I12=+1; ERASE; OR; DUP; =V4;
        SHLC10; SHL+24; BITS; NEG; NOT; J34#Z;
        SET3; =C12; J3;
19;     (;); I9; J31#Z;
        I9=+1; DC9; ERASE; J4;
20;     (c); M10; SHL-2; J31#Z;
        DC9; ZERO; NOT; NEG; =+M10;
        ERASE; J4;
21;     (p); M10; J31#Z;
        DC9; SET4; =M10; ERASE; J4;
22;     SETB70; (s); J24#;
        ERASE; ERASE;
23;     NOT; NEG; DUP; DUP; SHL-4;
        J4=Z;
        NEG; NOT; =V3; DC15; ZERO;
        DUP; NOT; NEG; CAB; J13;
24;     PERM; ERASE;
25;     =V3; DC15; ZERO; DUP; NOT;
        NEG; CAB; J5;
26;     REV; DUP; J25=Z;
        J32;
39;     ERASE;
27;     ZERO; V0;
28;     ZERO; SHLD+8; PERM; OR; DUP;
        J29=Z;
        =V0; SETB236; J39=;
        SETB240; J39=;
        SETB256; J39=;
        EXIT1;
29;     ERASE; M0M14Q; J28;
30;     ERASE;
31;     ERASE;
32;     ERASE;
33;     ERASE;
34;     V0P299; JS12P295;
        SETAV5; =RM14;
35;     JS1P295; SETB235; J36=;
        JS14P295; J35;
36;     ERASE; V1; =RM14;
37;     JS1P295; SETB235; J38=;
        JS14P295; J37;
38;     JS16P295;
        V2; J9;
        algol;

procedure output(device,value); value device,value;
        real value; integer device;
        kdf9 12/9/14/0;
        {value}; V0; {device}; JSP291; exit;
        V0=B0013573703034651;
        algol;

procedure write boolean(device,boolean);
        value device,boolean; integer device;
        boolean boolean;
        kdf9 12/9/14/0;
        {boolean}; {device};
        (write boolean);
        JS12P295;
        J2<Z;
        SETB315;
1;      JS14P295;
        JS16P295;
        exit;
2;      SETB335; J1;
        algol;

comment A15 -- taken from KQX;

procedure writetext(dv, s);
   value dv;
   integer dv;  string s;
   kdf9 12/9/14/0;
      {s}; {dv}; JSP288; exit 
    (P288 now in A1 on account of being used by R16P295);
   algol 
****