begin
   boolean procedure ALGOBEY (S);
      string S; external;

   boolean TR5;

   SELECT CAMERA (7);
   IDENTIFICATION;

   begin
      integer XMAX,YMAX;
      integer CH HEIGHT,CH WIDTH;
      integer HEIGHT 2 CH,WIDTH 3 CH,CH SP;
      integer DTB,DRP,DNS;
      integer DELTA MLP;
      real RJX,RKY;
      real TOP WINDOW,LEFT WINDOW,BOTTOM WINDOW,RIGHT WINDOW;

      boolean FIRST TIME, INTERSECT;
      integer COUNT, NODE NUM;
      integer array NODE TABLE [1:2,1:5000];

      integer BLANK,SHRIEK,HYPHEN,BACKSLASH,HASH;
      integer ENDLINE,EQUALS,QUERY,SQUOTE,SEMICOLON;
      integer FULLSTOP;

      BLANK ≔ CODE(“ ”);
      SHRIEK ≔ CODE(“!”);
      HYPHEN ≔ CODE(“-”);
      BACKSLASH ≔ CODE(“$”);
      HASH ≔ CODE(“#”);
      ENDLINE ≔ CODE(“EL”);
      EQUALS ≔ CODE(“=”);
      QUERY ≔ CODE(“?”);
      SQUOTE ≔ CODE(“'”);
      SEMICOLON ≔ CODE(“;”);
      FULLSTOP ≔ CODE(“.”);

      SELECT INPUT (5);
      XMAX ≔ YMAX ≔ READ;
      CH HEIGHT ≔ CH WIDTH ≔ 8;
      HEIGHT 2 CH ≔ 16;
      WIDTH 3 CH ≔ 20;
      CH SP ≔ 2;
      DNS ≔ 10;        comment NODE SPACING;
      comment DTB := 5;
      comment LENGTH OF VERTICAL STATEMENT LINE;
      DRP ≔ 40;        comment HORIZONTAL OFFSET FOR NEXT PARALLEL NODE;
      DELTA MLP ≔ 100; comment HORIZ OFFSET FOR ML PARAS;

      begin
         LIMITS ( 0,0,16383,16383 );
         REGION ( 1995,1995,14393,14393,0 );
         LIMITS ( 0,YMAX,XMAX,0 );
         REGION ( 0,YMAX,XMAX,0,1 );

         SELECT REGION (1);
         LIMITS ( 0,YMAX,XMAX,0 );

         CHARACTER SIZE ( CH HEIGHT,CH WIDTH );

         begin

            comment DRAW 30 FLOWCHART;
            begin
               integer TOP,LEFT,BOTTOM,RIGHT;
               integer CH;
               integer J;

               integer procedure MAX (A,B);
                  value A,B;
                  integer A,B;
               begin
                  MAX ≔ if A > B then A else B;
               end;

               integer procedure GCHAR (CHARACTER);
                  value CHARACTER;
                  integer CHARACTER;
               begin
                  comment NEWLINE (1);
                  comment PRINT CH (CH);
                  comment PRINT ( CHARACTER,12,0 );

                  if CHARACTER= ENDLINE then
                  begin
                     WRITE TEXT (“EL ERROR”);
                     goto FINI;
                  end;

                  if CHARACTER ⩾ 0 ∧ CHARACTER ⩽ 9
                    then CHARACTER ≔ CHARACTER + 16
                    else if CHARACTER ⩾ 3873 ∧ CHARACTER ⩽ 3898
                    then CHARACTER ≔ CHARACTER - 3840
                    else if CHARACTER = 29 ∨ CHARACTER = 30
                    then CHARACTER ≔ CHARACTER + 1
                    else if CHARACTER = 24 ∨ CHARACTER = 25
                    then CHARACTER ≔ CHARACTER - 16
                    else if CHARACTER = 18 ∨ CHARACTER = 31
                    then CHARACTER ≔ CHARACTER - 16
                    else if CHARACTER = 17 ∨ CHARACTER = 21
                    then CHARACTER ≔ CHARACTER + 49
                    else if CHARACTER = 16
                    then CHARACTER ≔ 1
                    else if CHARACTER = 28
                    then CHARACTER ≔ 10
                    else if CHARACTER = 26
                    then CHARACTER ≔ 14
                    else if CHARACTER = 27
                    then CHARACTER ≔ 29
                    else if CHARACTER = 10
                    then CHARACTER ≔ 79
                    else if CHARACTER = 11
                    then CHARACTER ≔ 78
                    else if CHARACTER = 12
                    then CHARACTER ≔ 26
                    else if CHARACTER = 13
                    then CHARACTER ≔ 28
                    else if CHARACTER = 14
                    then CHARACTER ≔ 27
                    else if CHARACTER = 15
                    then CHARACTER ≔ 12
                    else if CHARACTER = 19
                    then CHARACTER ≔ 69
                    else if CHARACTER = 22
                    then CHARACTER ≔ 13
                    else if CHARACTER = 23
                    then CHARACTER ≔ 32
                    else if CHARACTER = 20
                    then CHARACTER ≔ 67
                    else if CHARACTER = 3872
                    then CHARACTER ≔ 96
                    else if CHARACTER = 3899
                    then CHARACTER ≔ 81
                    else if CHARACTER = 4020
                    then CHARACTER ≔ 75
                    else if CHARACTER = 4021
                    then CHARACTER ≔ 82
                    else if CHARACTER = 4022
                    then CHARACTER ≔ 68
                    else if CHARACTER = 4023
                    then CHARACTER ≔ 91
                  else CHARACTER ≔ -1;
                  comment   PRINT   ( CHARACTER,12,0 );
                  GCHAR   ≔ CHARACTER;
               end;

               procedure DRAW THE FLOWCHART (TOP,LEFT,BOTTOM,RIGHT);
                  value TOP,LEFT;
                  integer TOP,LEFT,BOTTOM,RIGHT;
               begin
                  integer NEW TOP,NEW LEFT,NEW BOTTOM,NEW RIGHT;
                  integer J;

                  comment WRITE HEADING;
                  begin
                     NEWLINE (1);
                     comment WRITE TEXT ('('FLOWCHART')');
                     comment NEWLINE (1);
                  end;

                  comment PRINT NAME OF FLOWCHART;
                  begin

                     comment JUMP OVER NAME;
                     begin
                        for J ≔ 1 step 1 until 7 do CH ≔ READCH;
                     end;

                     MOVE TYPE TO ( LEFT,TOP );

                     J ≔ 0;
                     for J ≔ J + 1 while CH ≠ SEMICOLON ∧ J < 82 do
                        begin
                           PRINT CH (CH);
                           TYPE ( GCHAR(CH) );
                           CHARACTER SPACE ( CH SP );
                           CH ≔ READCH;
                        end;

                     if J = 82 then
                     begin
                        WRITE TEXT (“ERR0R IN COPY TILL ;”);
                        goto FINI;
                     end;

                     COPYTEXT (“!”);

                  end;

                  comment RESET POINTERS TO DRAW NEXT LEVEL;
                  begin
                     NEW TOP ≔ NEW BOTTOM ≔ TOP + HEIGHT 2CH;
                     NEW LEFT ≔ NEW RIGHT ≔ LEFT;
                  end;

                  DRAW NEXT LEVEL (NEW TOP,NEW LEFT,NEW BOTTOM,NEW RIGHT);

                  comment RESET POINTERS TO TOP OF NEW RECTANGLE;
                  begin
                     NEW TOP ≔ NEW BOTTOM;
                     NEW LEFT ≔ NEW RIGHT;
                  end;
                  PRINT OUT POINTERS (NEW TOP,NEW LEFT,NEW BOTTOM,NEW RIGHT);
                  DRAW NODE (NEW TOP,NEW LEFT,NEW BOTTOM,NEW RIGHT);
                  PRINT OUT POINTERS (NEW TOP,NEW LEFT,NEW BOTTOM,NEW RIGHT);
                  J ≔ 0;
                  for J ≔ J + 1 while CH ≠ FULLSTOP ∧ ( J < 82) do CH ≔ READCH;

                  if J = 82 then
                  begin
                     WRITE TEXT (“.ERROR”);
                     PRINT CH (CH);
                     LOOP ERROR (NEW TOP,NEW LEFT,NEW BOTTOM,NEW RIGHT);
                  end ;
                  BOTTOM ≔ NEW BOTTOM;
                  RIGHT ≔ NEW RIGHT;
                  COPY TEXT(“;”);

               end;

               procedure GET NON BLANK CHAR (CH);
                  integer CH;
               begin
                  integer J;

                  SKIP CH;
                  CH ≔ NEXTCH;

                  J ≔ 0;
                  for J ≔ J + 1 while ( CH = BLANK ∨ CH = ENDLINE) ∧ ( J < 82 ) do

                     begin
                        SKIP CH;
                        CH ≔ NEXTCH;
                     end;

                  if J = 82 then
                  begin
                     WRITE TEXT (“ERROR IN NON BLANK CHAR”);
                     PRINT CH (CH);
                     goto FINI;
                  end;

               end;

               procedure DRAW NEXT LEVEL (TOP,LEFT,BOTTOM,RIGHT);
                  value TOP,LEFT;
                  integer TOP,LEFT,BOTTOM,RIGHT;
               begin
                  integer DIAGONAL;

                  DIAGONAL ≔ 25;

                  comment WRITE NEXT LEVEL;
                  begin
                     comment NEWLINE(1);
                     comment WRITE TEXT ('('NEXT%LEVEL')');
                     comment NEWLINE (1);
                  end;

                  comment DRAW DIAGONAL LINE;
                  begin
                     RIGHT ≔ ( LEFT + WIDTH 3 CH ) + DIAGONAL;
                     BOTTOM ≔ TOP + DIAGONAL;

                     VECTOR ( LEFT + WIDTH 3CH,TOP,RIGHT,BOTTOM);
                  end;

               end;

               procedure PRINT OUT POINTERS (TOP,LEFT,BOTTOM,RIGHT);
                  value TOP,LEFT,BOTTOM,RIGHT;
                  integer TOP,LEFT,BOTTOM,RIGHT;
               begin
                  NEWLINE (1);
                  PRINT ( TOP,6,0 );
                  PRINT ( LEFT,6,0 );
                  PRINT ( BOTTOM,6,0 );
                  PRINT ( RIGHT,6,0 );
                  NEWLINE (1);
               end;

               procedure DRAW NODE (TOP,LEFT,BOTTOM,RIGHT);
                  value TOP, LEFT;
                  integer TOP,LEFT,BOTTOM,RIGHT;
               begin
                  integer NWTOP,NWLEFT,NWBOTTOM,NWRIGHT;
                  integer NODE ENTRY;

                  NUTOP ≔ TOP;
                  NWLEFT ≔ LEFT;
                  NWBOTTOM ≔ BOTTOM;
                  NWRIGHT ≔ RIGHT;

                  comment NODE WINDOWING MECHANISM;

                  if NODE NUM < 5000 then NODE NUM ≔ NODE NUM + 1
                  else begin WRITE TEXT (“NODETABLE OVERFLOW”);
                     goto FINI end;
                  NODE ENTRY ≔ NODE NUM;

                  if FIRST TIME then
                  begin
                     comment ALWAYS DRAW;
                     INTERSECT ≔ true;
                  end
                  else begin
                     NWBOTTOM ≔ NODE TABLE[1,NODENUM];
                     NWRIGHT  ≔ NODE TABLE[2,NODENUM];
                     INTERSECT ≔                        if NWRIGHT  < RJX       then false
                     else if RJX+XMAX < NWLEFT    then false
                     else if NWTOP    > RKY+YMAX  then false
                     else if RKY      > NWBOTTOM  then false
                     else true;
                  end;
                  if INTERSECT then
                  begin
                     DRAW THE NODE (NWTOP,NWLEFT,NWBOTTOM,NWRIGHT);
                     NODE TABLE[1,NODE ENTRY] ≔ NWBOTTOM;
                     NODE TABLE[2,NODE ENTRY] ≔ NWRIGHT;
                  end
                  else
                  begin
                     comment SKIP TO CORRESPONDING HASH;
                     CH ≔ READCH;
                     COUNT ≔ 1;
                     for COUNT ≔ OUNT while COUNT ≠ 0
                       do begin
                           CH ≔ READCH;
                           if (CH = SHRIEK) ∨
                             (CH = EQUALS) ∨
                             (CH = HYPHEN)
                             then begin COUNT ≔ COUNT + 1; NODENUM ≔ NODENUM + 1; end
                             else if CH = HASH then COUNT ≔ COUNT + 1
                             else if CH = SQUOTE then begin
                              for CH ≔ READCH while CH ≠ SQUOTE do end
                             else if CH = QUERY then begin
                              for CH ≔ READCH while CH ≠ QUERY do end
                           else
                             ;
                        end;

                     comment SKIP OVER HASH;
                     if CH = HASH then GET NON BLANK CHAR (CH)
                     else begin
                        WRITE TEXT (“NODE WINDOW ERROR”);
                        PRINT CH (CH);
                     end
                  end;
                  BOTTOM ≔ NWBOTTOM;
                  RIGHT  ≔ NWRIGHT;

                  goto MISS OUT PRINTING;

                  NEWLINE (4);
                  WRITE TEXT (“ NODE TABLE ”);
                  PRINT (NODE ENTRY,10,0); PRINT (NODE NUM,10,0); NEWLINE (1);

                  for COUNT ≔ 1 step 1 until NODE NUM
                    do begin
                        PRINT (COUNT,10,0);
                        PRINT (NODETABLE[1,COUNT],10,0);
                        PRINT (NODETABLE[2,COUNT],10,0);
                        NEWLINE (1);
                     end;

                  PRINT OUT POINTERS (TOP,LEFT,BOTTOM,RIGHT);
                  MISS OUT PRINTING:

               end NODE WINDOWING PROC;

               procedure DRAW THE NODE (TOP,LEFT,BOTTOM,RIGHT);
                  value TOP,LEFT;
                  integer TOP,LEFT,BOTTOM,RIGHT;
               begin
                  integer NEW TOP,NEW LEFT,NEW BOTTOM,NEW RIGHT;
                  integer MAX NEW BOTTOM,MAX NEW RIGHT;

                  integer TOP MLP, LEFT MLP, BOTTOM MLP, RIGHT MLP;
                  integer MAX BOTTOM MLP, MAX RIGHT MLP;

                  integer J;
                  comment WRITE NODE;
                  begin
                     comment NEWLINE (1);
                     comment WRITE TEXT ('('NODE')');
                  end;

                  comment PRINT OUT POINTERS (TOP,LEFT,BOTTOM,RIGHT);

                  comment RESET POINTERS FOR NODE;
                  begin
                     NEW TOP ≔ TOP;
                     NEW LEFT ≔ LEFT;
                     NEW BOTTOM ≔ MAX NEW BOTTOM ≔ TOP + DNS;
                     NEW RIGHT ≔ MAX NEW RIGHT ≔ LEFT;
                  end;

                  GET NON BLANK CHAR (CH);
                  comment DRAW ONE OR MORE SERIALS;
                  begin
                     J ≔ 0;
                     for J ≔ J + 1 while ( CH = SQUOTE ∨ CH = QUERY ) ∧ ( J < 5000 ) do

                        begin
                           DRAW SERIAL (NEW TOP,NEW LEFT,NEW BOTTOM,NEW RIGHT);
                           MAX NEW BOTTOM ≔ MAX ( NEW BOTTOM,MAX NEW BOTTOM );
                           MAX NEW RIGHT ≔ MAX ( NEW RIGHT,MAX NEW RIGHT );
                        end;

                     if J = 5000 then
                     begin
                        WRITE TEXT (“ONE OR MORE SERIALS ERROR”);
                        PRINT CH (CH);
                        LOOP ERROR (NEW TOP,NEW LEFT,NEW BOTTOM,NEW RIGHT);
                     end;

                     comment DRAW ZERO OR MORE MIN LENGTH PARALLEL NODES;

                     if CH = EQUALS then
                     begin

                        comment SETUP MIN LEN PARALLELS;
                        begin
                           TOP MLP ≔ BOTTOM MLP ≔ MAX BOTTOM MLP ≔ TOP;
                           LEFT MLP ≔ LEFT;
                           RIGHT MLP ≔ MAX RIGHT MLP ≔ MAX NEW RIGHT;
                        end;

                        comment DRAW MLP S;
                        begin
                           J ≔ 0;
                           for J ≔ +1 while ((CH = EQUALS) ∧ (J<50)) do
                              begin
                                 comment NEWLINE(1);
                                 comment WRITE TEXT ('('MIN%LEN%PARALLEL')');
                                 comment PRINT OUT POINTERS (TOP MLP, LEFT MLP, BOTTOM MLP, RIGHT MLP);

                                 DRAW HORIZONTAL LINE (TOP MLP, LEFT MLP,
                                   BOTTOM MLP, RIGHT MLP+DELTA MLP);
                                 LEFT MLP ≔ RIGHT MLP ≔ RIGHT MLP + DELTA MLP;
                                 BOTTOM MLP ≔ TOP MLP;

                                 DRAW NODE (TOP MLP, LEFT MLP, BOTTOM MLP, RIGHT MLP);

                                 MAX BOTTOM MLP  ≔ MAX ( BOTTOM MLP, MAX BOTTOM MLP);
                                 MAX RIGHT MLP ≔ MAX ( RIGHT MLP, MAX RIGHT MLP);

                              end OF WHILE LOOP;
                           if J ⩾ 50 then
                           begin
                              WRITE TEXT (“MIN LEN PAR LOOP ERROR”);
                              PRINT CH (CH);
                              LOOP ERROR (TOP MLP, LEFT MLP, BOTTOM MLP, RIGHT MLP);
                           end;

                           MAX NEW BOTTOM ≔ MAX ( MAX BOTTOM MLP, MAX NEW BOTTOM);
                           MAX NEW RIGHT ≔ MAX ( MAX RIGHT MLP, MAX NEW RIGHT);

                        end OF DRAW MLP S;

                     end OF MIN LEN PARALLELS;

                     if CH ≠ HASH then
                     begin
                        WRITE TEXT (“#ERROR”);
                        PRINT CH (CH);
                        goto FINI;
                     end;


                     GET NON BLANK CHAR (CH);

                     BOTTOM ≔ MAX ( BOTTOM, (MAX NEW BOTTOM + DNS) ) ;
                     RIGHT ≔ MAX ( RIGHT,MAX NEW RIGHT );
                  end;

                  comment WRITE TEXT ('('END%OF%NODE')');
                  comment PRINT OUT POINTERS (TOP,LEFT,BOTTOM,RIGHT);
               end;

               procedure DRAW SFRIAL (TOP,LEFT,BOTTOM,RIGHT);
                  integer TOP,LEFT,BOTTOM,RIGHT;
               begin
                  integer TOP SERIAL,LEFT SERIAL,BOTTOM SERIAL,RIGHT SERIAL;
                  integer NEXT TOP,NEXT LEFT,NEXT BOTTOM,NEXT RIGHT;
                  integer TOP  PARA,LEFT PARA,BOTTOM PARA, RIGHT PARA;
                  integer MAX BOTTOM PARA,MAX RIGHT PARA;
                  integer J;

                  comment WRITE SERIAL;
                  begin
                     comment NEWLINE ( 1 );
                     comment WRITE TEXT ('('SERIAL')');
                     comment PRINT OUT POINTERS (TOP,LEFT,BOTTOM,RIGHT);
                  end;

                  DRAW VERTICAL LINE (TOP,LEFT,(BOTTOM + DTB),RIGHT);
                  RESET SERIAL POINTERS;
                  begin
                     TOP SERIAL ≔ BOTTOM SERIAL ≔ BOTTOM + DTB;
                     LEFT SERIAL ≔ RIGHT SERIAL ≔ LEFT;
                  end;

                  DRAW STATEMENT (TOP SERIAL,LEFT SERIAL, BOTTOM SERIAL,
                    RIGHT SERIAL);

                  comment SET PARALLEL POINTERS;
                  begin
                     TOP PARA ≔ BOTTOM PARA ≔ MAX BOTTOM PARA ≔ TOP;
                     LEFT PARA ≔ LEFT;
                     RIGHT PARA ≔ MAX RIGHT PARA ≔ RIGHT SERIAL;
                  end;

                  comment NEXT LEVEL;
                  begin
                     GET NON BLANK CHAR (CH);

                     NEXT TOP ≔ NEXT BOTTOM ≔ 0;
                     NEXT LEFT ≔ NEXT RIGHT ≔ 0;

                     if CH = SHRIEK then
                     begin

                        comment RESET NEXT LEVEL POINTERS;
                        begin
                           NEXT TOP ≔ BOTTOM SERIAL;
                           NEXT LEFT ≔ LEFT;
                        end;

                        comment NEWLINE (1);
                        comment WRITE TEXT ('('SERIAL~NEXT%LEVEL')');

                        DRAW NEXT LEVEL (NEXT TOP,NEXT LEFT,NEXT BOTTOM,
                          NEXT RIGHT);

                        NEXT TOP ≔ NEXT BOTTOM;
                        NEXT LEFT ≔ NEXT RIGHT;

                        DRAW NODE (NEXT TOP,NEXT LEFT,NEXT BOTTOM,NEXT RIGHT);

                        RIGHT PARA ≔ MAX RIGHT PARA ≔ MAX ( RIGHT PARA,
                          NEXT RIGHT);
                     end;

                  end;

                  comment PARALLEL;
                  begin
                     J ≔ 0;
                     for J ≔ J + 1 while CH = HYPHEN ∧ ( J < 82 ) do

                        begin

                           comment NEWLINE (1);
                           comment WRITE TEXT ('('SERIAL-PARALLEL')');

                           comment PRINT OUT POINTERS (TOP PARA,LEFT PARA,BOTTOM PARA, RIGHT PARA);

                           DRAW HORIZONTAL LINE (TOP PARA,LEFT PARA,BOTTOM PARA,
                             (RIGHT PARA + DRP ));

                           LEFT PARA ≔ RIGHT PARA ≔ RIGHT PARA + DRP;
                           BOTTOM PARA ≔ TOP PARA;

                           DRAW NODE (TOP PARA,LEFT PARA,BOTTOM PARA,RIGHT PARA);
                           MAX BOTTOM PARA ≔ MAX ( BOTTOM PARA,MAX BOTTOM PARA );
                           MAX RIGHT PARA ≔ MAX ( RIGHT PARA,MAX RIGHT PARA );

                        end;

                     if J = 82 then
                     begin
                        WRITE TEXT (“PARALLEL LOOP ERROR”);
                        PRINT CH (CH);
                        LOOP ERROR (TOP PARA,LEFT PARA,BOTTOM PARA,RIGHT PARA);
                     end;

                  end;

                  comment OVERALL SIZES;

                  begin
                     TOP ≔ BOTTOM SERIAL;
                     BOTTOM ≔ MAX ( BOTTOM SERIAL,MAX (NEXT BOTTOM,BOTTOM PARA) );
                     RIGHT ≔ MAX ( RIGHT SERIAL,MAX (NEXT RIGHT,RIGHT PARA) );
                  end;

                  comment NEWLINE (1);
                  comment WRITE TEXT ('('END%OF%SERIAL')');
                  comment PRINT OUT POINTERS (TOP,LEFT,BOTTOM,RIGHT);
               end;

               procedure DRAW VERTICAL LINE (TOP,LEFT,BOTTOM,RIGHT);
                  value TOP,LEFT,BOTTOM,RIGHT;
                  integer TOP,LEFT,BOTTOM,RIGHT;

               begin
                  comment NEWLINE (1);
                  comment WRITE TEXT ('('VERTICAL%LINE')');
                  comment PRINT OUT POINTERS (TOP,LEFT,BOTTOM,RIGHT);

                  VECTOR ( LEFT,TOP,LEFT,BOTTOM );
               end;

               procedure DRAW STATEMENT (TOP,LEFT,BOTTOM,RIGHT);
                  value TOP,LEFT;
                  integer TOP,LEFT,BOTTOM,RIGHT;

               begin
                  integer TOP TEXT, RIGHT TEXT;
                  integer J;
                  boolean ACTION;

                  if CH = SQUOTE then ACTION ≔ true
                    else if CH = QUERY then ACTION ≔ false
                  else
                  begin
                     WRITE TEXT (“? or  ERR0R”);
                     PRINT CH (CH);
                     goto FINI;
                  end;

                  comment WRITE OUT TEXT;
                  begin

                     comment SET TEXT POINTERS;
                     begin
                        TOP TEXT ≔ T OP + CH HEIGHT;
                        RIGHT TEXT ≔ RIGHT ≔ LEFT;
                     end;

                     comment NEWLINE (1);
                     GET NON BLANK CHAR (CH);
                     MOVE TYPE TO ( LEFT,TOP TEXT);

                     J ≔ 0;
                     for J ≔ J + 1 while ¬ ((CH = (if ACTION then QUOTE else QUERY)) ∨ J ⩾ 999)
                       do
                        begin
                           if CH = ENDLINE then
                           begin
                              comment START NEW LINE OF TEXT;
                              RIGHT ≔ MAX (RIGHT, RIGHT TEXT);
                              TOP TEXT ≔ TOP TEXT + HEIGHT 2 CH;
                              MOVE TYPE TO (LEFT, TOP TEXT);

                              RIGHT TEXT ≔ LEFT;
                              GET NON BLANK CHAR (CH);
                           end
                           else
                           begin
                              comment PRINT CH (CH);

                              comment WINDOWING FRIG ;
                              if ( LEFT WINDOW < RIGHT TEXT) then begin
                                 if (RIGHT TEXT < RIGHT WINDOW) then begin
                                    if (TOP WINDOW  < TOP TEXT) then begin
                                       if (TOP TEXT < BOTTOM WINDOW)
                                         then begin
                                          MOVE TYPE TO (RIGHT TEXT,TOP TEXT);
                                          TYPE ( GCHAR(CH) );
                                          CHARACTER SPACE ( CH SP );
                                       end end end
                              end;

                              RIGHT TEXT ≔ RIGHT TEXT+ CH WIDTH+ CH SP;
                              SKIP CH;
                              CH ≔ NEXTCH;
                           end
                        end;
                     if J = 999 then
                     begin
                        NEWLINE (1);
                        WRITE TEXT (“WRITE OUT TEXT ERR0R”);
                        PRINT CH (CH);
                        LOOP ERROR (TOP,LEFT,BOTTOM,RIGHT);
                     end;

                     comment OVERALL SIZE OF TEXT;
                     begin
                        BOTTOM ≔ TOP TEXT ≔ CH HEIGHT;
                        RIGHT ≔ MAX(RIGHT, RIGHT TEXT);
                     end

                  end;
                  if ((ACTION ≡ true) ∧ (CH = QUERY)) ∨ ((ACTION ≡ false) ∧ (CH = SQUOTE)) then
                  begin
                     WRITE TEXT (“ACTION OR ' OR ? ERROR”);
                     PRINT CH (CH);
                     goto FINI;
                  end;

                  if ACTION ≡ true then
                  begin
                     comment SPACE OVER TEXT I.E. DO NOTHING;
                  end;

                  if ACTION ≡ false then
                  begin

                     comment DRAW HALF SQUARE;
                     begin
                        comment NEWLINE (1);
                        comment WRITE TEXT ('('HALF-SQUARE')');
                        VECTOR ( LEFT,TOP,(LEFT - CH WIDTH),TOP);
                        VECTOR ((LEFT - CH WIDTH),TOP,(LEFT - CH WIDTH),BOTTOM );
                        VECTOR ((LEFT - CH WIDTH),BOTTOM,LEFT,BOTTOM );
                     end
                  end
               end;

               procedure DRAW HORIZONTAL LINE (TOP,LEFT,BOTTOM,RIGHT);
                  value TOP,LEFT,BOTTOM,RIGHT;
                  integer TOP,LEFT,BOTTOM,RIGHT;
               begin
                  comment NEWLINE (1);
                  comment WRITE TEXT ('('HORIZONTAL%LINE')');
                  comment PRINT OUT POINTERS (TOP,LEFT,BOTTOM,RIGHT);

                  VECTOR ( LEFT,TOP,RIGHT,TOP );
               end;

               procedure LOOP ERROR (TOP,LEFT,BOTTOM,RIGHT);
                  value TOP,LEFT,BOTTOM,RIGHT;
                  integer TOP,LEFT,BOTTOM,RIGHT;
               begin
                  WRITE TEXT (“A L00P ERR0R HAS 0CCURRED”);
                  PRINT CH (CH);

                  PRINT OUT POINTERS (TOP,LEFT,BOTTOM,RIGHT);

                  goto FINI;
               end;

               comment DECIDE ON INPUT OUTPUT STREAMS;
               begin
                  SELECT INPUT (5);
                  SELECT OUTPUT (5);
               end;

               comment SET INITIAL VALUES OF POINTERS;
               begin
                  TOP ≔ BOTTOM ≔ 100;
                  LEFT ≔ RIGHT ≔ 100;
               end;

               comment INITIALISE NODE WINDOWING;
               FIRST TIME ≔ true;

               comment DRAW THE BIG PICTURE;
               begin
                  for RJX ≔ 0 step XMAX until RIGHT do
                     begin
                        for RKY ≔ 0 step YMAX until BOTTOM do
                           begin
                              FREE INPUT;
                              TR5 ≔ ALGOBEY (“RL *TR5”);
                              TR5 ≔ ALGOBEY (“AS *TR5,£E”);
                              SELECT INPUT (5);

                              TOP ≔ BOTTOM ≔ 100;
                              LEFT ≔ RIGHT ≔ 100;
                              XMAX ≔ YMAX ≔ READ;

                              TOP  WINDOW ≔ RKY - 50;
                              LEFT WINDOW ≔ RJX - 50;
                              BOTTOM WINDOW ≔ RKY + YMAX - 50;
                              RIGHT  WINDOW ≔ RJX + XMAX - 50;

                              NODE NUM ≔ 0;

                              LIMITS (RJX,RKY+YMAX,RJX+XMAX,RKY);
                              DRAW THE FLOWCHART (TOP,LEFT,BOTTOM,RIGHT);
                              VECTOR (RJX+XMAX,RKY,RJX+XMAX,RKY+YMAX);
                              VECTOR (RJX     ,RKY,RJX     ,RKY+YMAX);
                              ADVANCE FILM;
                              FIRST TIME ≔ false;
                           end;
                        ADVANCE FILM;
                     end
               end;
               FINI:
               begin
                  NEWLINE (3);
               end
            end
         end
      end
   end;

   ENDPLOTTING;

end