home *** CD-ROM | disk | FTP | other *** search
- (*----------------------------------------------------------------------*)
- (* STRUKTO.PAS *)
- (* Struktogramm-Generator *)
-
- (*{$A-}*) (* fuer Turbo-Pascal unter CP/M : rekursiven Code erzeugen *)
- program Strukto (input, output); (* V3.1 30.12.88 *)
- (* (c) Thomas Kriegel *)
- const ESC = #27;
- type Text2 = string [2];
- Text3 = string [3];
- Text13 = string [13];
- Text14 = string [14];
- Text20 = string [20];
- Text30 = string [30];
- Text110 = string [110];
- Text255 = string [255];
- Satzpointer = ^Satztyp;
- Satztyp = record
- Symbol : Text2;
- Bezeichnung : Text110;
- Next : Satzpointer;
- end;
- Schleifenpointer = ^Schleifentyp;
- Schleifentyp = record
- Zeichen : Text3;
- Laenge : integer;
- Last : Schleifenpointer;
- end;
- Ort = (oben, erste, mitte, unten, letzte, T_unten, centrum);
- Init_Art = (Voreinstellung, Normal);
- Integer_Pointer = ^integer;
- Namezeiger = ^Namerecord;
- Namerecord = record
- Block : char;
- Name : Text110;
- Last : Namezeiger;
- end;
- Blockzeiger = ^Blockrecord;
- Blockrecord = record
- Zeichen : char;
- Last : Blockzeiger;
- end;
- LabelPtrTyp = ^LabelListe;
- LabelListe = record
- Entry : string [80];
- Next : LabelPtrTyp;
- end;
- POP_Ptr = ^POP_Typ;
- POPDef_Ptr = ^POPDef_Typ;
- POPDef_Typ = record
- Name : Text110;
- Gezeigt : boolean;
- Waage : POP_Ptr;
- Gleich, Next : POPDef_Ptr;
- end;
- POP_Typ = record
- Gleich : POP_Ptr;
- Adr : POPDef_Ptr;
- end;
-
- var Struktur, Anfangs_Pointer, Ende_Pointer,
- Hilfs_Ptr : Satzpointer;
- Schleife : Schleifenpointer;
- Block : Blockzeiger;
- Titel_Zeiger : Namezeiger;
- Breite, Links, Repeat_offen, Akt_Laenge : integer;
- Zeile_Akt, Zeile, Max_Zeile, Feldlaenge : integer;
- Strich, Blank, TextRand, Druckzeile,
- Rest, Strichrand, Verbleib, Lab : Text110;
- Obenlinks, Obenrechts, Untenlinks, Untenrechts,
- Kreuzoben, Kreuzunten, Kreuzlinks, Kreuzrechts,
- Senkrecht, Waagerecht, Kreuz : char;
- Strich_Blank : string [2];
- Datei_ok, Schluss, Fehler, Case_offen,
- STG_schreiben, TEO_erste, While_offen,
- Zu_Lang, OF_Fall, HProg_Gefunden : boolean;
- Destination, Fehlerdatei, Quell_Datei,
- STG_Datei : text;
- Dest_Name, Struktur_Name, Source_Name : Text14;
- TEO_Status : (passiv, aktiv, ausdrucken);
- Druck_Ziel : (Screen, Drucker, Datei, ohne);
- Zeichensatz : (Graphik, Textzeichen);
- Beginn_Neu : (Nein, Zeile1, Zeile2);
- Basis_Schleife, Basis_Struktur : Integer_Pointer;
- Schluessel : array [1..14] of
- record
- Key : string [9];
- Last, Next : integer;
- end;
- LabelStart : LabelPtrTyp;
-
- {$I STRUKTO1.PAS}
- {$I STRUKTO2.PAS}
- {$I STRUKTO3.PAS}
- {$I STRUKTO4.PAS}
-
- procedure Init;
- var i : integer;
- begin
- with Schluessel[1] do begin Key := 'OVERLAY'; Last := 2; Next := 3; end;
- with Schluessel[2] do begin Key := 'FOR'; Last := 4; Next := 5; end;
- with Schluessel[3] do begin Key := 'REPEAT'; Last := 6; Next := 7; end;
- with Schluessel[4] do begin Key := 'CASE'; Last := 8; Next := 9; end;
- with Schluessel[5] do begin Key := 'GOTO'; Last :=10; Next :=11; end;
- with Schluessel[6] do begin Key := 'PROCEDURE'; Last := 0; Next :=12; end;
- with Schluessel[7] do begin Key := 'WHILE'; Last :=13; Next :=14; end;
- with Schluessel[8] do begin Key := 'BEGIN'; Last := 0; Next := 0; end;
- with Schluessel[9] do begin Key := 'END'; Last := 0; Next := 0; end;
- with Schluessel[10] do begin Key := 'FUNCTION'; Last := 0; Next := 0; end;
- with Schluessel[11] do begin Key := 'IF'; Last := 0; Next := 0; end;
- with Schluessel[12] do begin Key := 'PROGRAM'; Last := 0; Next := 0; end;
- with Schluessel[13] do begin Key := 'UNIT'; Last := 0; Next := 0; end;
- with Schluessel[14] do begin Key := 'WITH'; Last := 0; Next := 0; end;
- Zeichensatz := Graphik;
- Init_Graphik;
- Blank := ' ';
- for i := 1 to 7 do
- Blank := Blank + Blank;
- Links := 5;
- Breite := 60;
- Max_Zeile := 110;
- Feldlaenge := 5;
- Druck_Ziel := Screen;
- Dest_Name := 'CON:';
- STG_schreiben := true;
- Zu_Lang := false;
- Struktur_Name := '';
- Source_Name := '';
- new (Struktur);
- Anfangs_Pointer := Struktur;
- Struktur^.Next := nil;
- Ende_Pointer := Struktur;
- mark (Basis_Struktur);
- LabelStart := nil;
- Repeat_offen := 0;
- end; (* Init *)
-
- procedure Auswahl (var Ende : boolean);
- var k : char;
- begin
- repeat
- gotoxy (36, 19);
- read (kbd, k);
- k := upcase (k);
- until k in ['D', 'S', 'L', 'P', 'C', 'G', 'Q'];
- writeln;
- case k of
- 'D' : Zeile_interpretieren;
- 'S' : Source_bearbeiten;
- 'L' : Datei_Lesen;
- 'G' : POP_Erstellen;
- 'P' : Parameter_Aendern;
- 'Q' : Ende := true;
- end;
- end; (* Auswahl *)
-
- begin
- Init;
- Schluss := false;
- clrscr;
- Menue;
- repeat
- Auswahl (Schluss);
- until Schluss;
- release (Basis_Struktur);
- end. (* Strukto *)