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