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