home *** CD-ROM | disk | FTP | other *** search
- (* ----------------------------------------------------------------------- *)
- (* STRUKTO3.PAS *)
- (* Pascal-Quell-Datei verarbeiten *)
- (* ----------------------------------------------------------------------- *)
- PROCEDURE Source_bearbeiten;
- VAR Wort, Wort_norm, Dummy, Begriff : Text110; Source_Zeile : Text255;
- Verteiler: INTEGER; Source_File: TEXT; File_Ende, Dummy1, skip : BOOLEAN;
- (* --------------------------------------------------------------------- *)
- PROCEDURE Lies_Zeile (VAR Satz : Text255);
- TYPE Kommentar = Text2;
- VAR Ort : INTEGER;
- (* ------------------------------------------------------------------- *)
- FUNCTION Loesche (Satz : Text255) : Text255;
- CONST Anfu = '''';
- VAR Ort, von, bis : INTEGER; Anfu_exist : BOOLEAN;
- Verbleib, Test : Text110; Such : Text2;
- BEGIN
- Verbleib := ''; Ort := Pos (Anfu, Satz); Anfu_exist := (Ort > 0);
- IF (Pos ('{', Satz) < Ort) OR (Pos ('(*', Satz) < Ort) THEN
- Anfu_exist := FALSE;
- REPEAT
- IF Anfu_exist THEN
- BEGIN Test := Copy (Satz, 1, Ort); Delete (Satz, 1, Ort); END
- ELSE BEGIN Test := Satz; Satz := ''; END;
- REPEAT
- Such := '}'; von := Pos ('(*', Test);
- IF von = 0 THEN von := Pos ('{', Test) ELSE Such := '*)';
- bis := Pos (Such, Test);
- IF ((Ort > von) AND (von > 0)) AND ((Ort < bis) OR (bis = 0)) THEN
- Anfu_exist := FALSE;
- IF bis > 0 THEN Delete (Test, von, bis - von + Length (Such))
- ELSE IF von > 0 THEN
- BEGIN
- Delete (Test, von, Length(Test)); von := 0;
- REPEAT
- IF Satz = '' THEN
- BEGIN
- ReadLn(Quell_datei, Satz); File_Ende := Eof(Quell_datei);
- END;
- bis := Pos (Such, Satz);
- IF bis = 0 THEN Satz := '';
- UNTIL bis > 0;
- Delete(Satz, 1, bis + Length(Such) - 1);
- bis := 0; Ort := Pos(Anfu,Satz);
- END;
- IF Anfu_exist THEN
- BEGIN
- Ort := Pos (Anfu, Satz); Test := Test + Copy (Satz, 1, Ort);
- Delete (Satz, 1, Ort); Ort := Pos (Anfu, Satz);
- END;
- Anfu_exist := (Ort > 0);
- UNTIL von + bis = 0;
- Verbleib := Verbleib + Test;
- UNTIL Test = '';
- Loesche := Verbleib;
- END; (* Loesche *)
- (* ------------------------------------------------------------------- *)
- BEGIN (* Lies_Zeile *)
- REPEAT
- ReadLn (Quell_datei, Satz); File_Ende := Eof (Quell_datei);
- Satz := Loesche (Satz); Ort := 1;
- WHILE Satz [Ort] = ' ' DO Ort := Succ (Ort);
- Delete (Satz, 1, Ort - 1); Ort := Length (Satz);
- WHILE Satz [Ort] = ' ' DO Ort := Pred (Ort);
- Delete (Satz, Ort + 1, Length(satz));
- UNTIL (Length (Satz) > 1) OR File_Ende;
- END; (* Lies_Zeile *)
- (* --------------------------------------------------------------------- *)
- PROCEDURE Wort_finden (VAR Satz : Text255;
- VAR Wort_gross, Wort_norm : Text110;
- VAR Begrenzer : BOOLEAN);
- VAR Ende, Anfuehrungs_Zeichen : BOOLEAN;
- k : CHAR; Zaehler : INTEGER; Zwischen : Text255;
- BEGIN
- REPEAT
- Zaehler := 1; Anfuehrungs_Zeichen := FALSE;
- WHILE Satz [Zaehler] = ' ' DO Zaehler := Succ (Zaehler);
- Delete(Satz,1,Zaehler-1); Zaehler:=1; Wort_gross:=''; Wort_norm:='';
- REPEAT
- k := Satz [Zaehler];
- IF k = '''' THEN Anfuehrungs_Zeichen := NOT (Anfuehrungs_Zeichen);
- Begrenzer := NOT (Anfuehrungs_Zeichen) AND
- ((k = ';') OR ((Wort_gross = 'END') AND (k = '.')));
- Ende := Begrenzer OR (NOT (Anfuehrungs_Zeichen) AND (k = ' '));
- IF NOT Ende THEN
- BEGIN
- Wort_gross := Wort_gross + UpCase (k);
- Wort_norm := Wort_norm + k; Zaehler := Succ (Zaehler);
- END;
- IF Zaehler >= Length (Satz) THEN
- BEGIN Lies_Zeile (Zwischen); Satz := Satz + ' ' + Zwischen; END;
- UNTIL Ende;
- Delete (Satz, 1, Zaehler);
- UNTIL (Wort <> '') OR OF_Fall OR File_Ende OR Ende;
- END; (* Wort_finden *)
- (* --------------------------------------------------------------------- *)
- FUNCTION Wort_isolieren(VAR Source_Satz: Text255; Suche: Text110): Text110;
- VAR Ausdruck: Text110; Begrenzer: BOOLEAN; Ort, Zahl, Fehler: INTEGER;
- BEGIN
- Ausdruck := '';
- REPEAT
- Wort_finden (Source_Satz, Wort, Wort_norm, Begrenzer);
- IF Begrenzer THEN Source_Satz := ' ; ' + Source_Satz;
- Begrenzer := (Wort = Suche); Ort := Pos (Suche, Wort);
- Val (Copy (Wort, 1, Ort - 1), Zahl, Fehler);
- IF (Ort > 1) AND (Fehler = 0) THEN
- BEGIN
- Delete (Wort_norm, Ort, Length (Suche));
- Source_Satz := Suche + ' ' + Source_Satz;
- END;
- IF NOT (Begrenzer) THEN Ausdruck := Ausdruck + ' ' + Wort_norm;
- UNTIL Begrenzer;
- Wort_isolieren := Ausdruck;
- END; (* Wort_isolieren *)
- (* --------------------------------------------------------------------- *)
- PROCEDURE Case_Fall (VAR Source_Satz : Text255); FORWARD;
- (* --------------------------------------------------------------------- *)
- PROCEDURE Verteile_Schluessel (Begriff : Text110;
- VAR Anweisungs_Ende : BOOLEAN); FORWARD;
- (* --------------------------------------------------------------------- *)
- PROCEDURE Ende (VAR Source_Satz : Text255); FORWARD;
- (* --------------------------------------------------------------------- *)
- PROCEDURE Schreibe_Struktur (Zeichen : Text2; Aussage : Text110);
- BEGIN
- IF STG_Schreiben THEN WriteLn (STG_Datei, Zeichen : 2, Aussage);
- IF Druck_Ziel <> ohne THEN
- BEGIN
- WITH Struktur^ DO
- BEGIN
- Symbol := Zeichen; Bezeichnung := Copy (Aussage, 2, 255);
- IF Length (Symbol) > 1 THEN Symbol_schliessen (Symbol [2])
- ELSE Symbol_auf (Symbol);
- END;
- Zeile := Zeile + 1;
- END;
- END; (* Schreibe_Struktur *)
- (* --------------------------------------------------------------------- *)
- PROCEDURE Schleife_beginnt (Zeichen : CHAR);
- VAR Schluessel, Dummy : BOOLEAN; Zwischen : Blockzeiger;
- BEGIN
- Block^.Zeichen := Zeichen; Zwischen := Block;
- New (Block); Block^.Last := Zwischen;
- REPEAT
- Wort_finden (Source_Zeile, Wort, Wort_norm, Dummy);
- Schluessel := (Wort='END');
- IF NOT Schluessel THEN Verteile_Schluessel (Wort, Dummy);
- UNTIL Schluessel;
- Ende (Source_Zeile);
- END; (* Schleife_beginnt *)
- (* --------------------------------------------------------------------- *)
- PROCEDURE Naechstes_Wort (Zeichen : CHAR; VAR Source_Satz : Text255);
- VAR Anweisungs_Ende : BOOLEAN; Zwischen : Blockzeiger;
- BEGIN
- Wort_finden (Source_Satz, Wort, Wort_norm, Anweisungs_Ende);
- IF Wort = 'BEGIN' THEN Schleife_beginnt (Zeichen)
- ELSE
- BEGIN
- Block^.Zeichen := Zeichen; Zwischen := Block; New (Block);
- Block^.Last := Zwischen; Verteile_Schluessel (Wort, Anweisungs_Ende);
- Block := Block^.Last; Zeichen := Block^.Zeichen;
- Wort_finden (Source_Satz, Wort, Wort_norm, Anweisungs_Ende);
- IF Anweisungs_Ende THEN Source_Satz := Wort_norm + ';' + Source_Satz
- ELSE Source_Satz := Wort_norm + ' ' + Source_Satz;
- IF (Zeichen = 'I') AND (Wort <> 'ELSE') OR (Zeichen <> 'I') THEN
- IF Zeichen = 'O' THEN Case_Fall (Source_Satz)
- ELSE
- BEGIN
- IF Zeichen = 'E' THEN Zeichen := 'I';
- IF Zeichen <> 'M' THEN Schreibe_Struktur ('#' + Zeichen, ' ');
- END;
- END;
- END; (* Naechstes_Wort *)
- (* --------------------------------------------------------------------- *)
- FUNCTION Begriff_Check (Begriff : Text110) : INTEGER;
- VAR i : INTEGER; Treffer : BOOLEAN;
- BEGIN
- i := 1; Treffer := FALSE;
- WHILE NOT (Treffer) AND (i <> 0) DO
- IF Schluessel [i].Key = Begriff THEN Treffer := TRUE
- ELSE IF Schluessel [i].Key > Begriff THEN i := Schluessel [i].Last
- ELSE i := Schluessel [i].Next;
- Begriff_Check := i;
- END; (* Begriff_Check *)
- (* --------------------------------------------------------------------- *)
- PROCEDURE Prog_Proc_Fkt (VAR Source_Satz : Text255; Overlays : BOOLEAN);
- VAR Titel : Text110; Dummy : BOOLEAN;
- Zwischen : Namezeiger; Ort : INTEGER;
- BEGIN
- IF Overlays THEN Wort_finden (Source_Satz, Wort, Titel, Dummy);
- Wort_finden (Source_Satz, Wort, Titel, Dummy); Ort := Pos ('(', Titel);
- IF Ort > 0 THEN Delete (Titel, Ort, Length(Titel));
- Titel_Zeiger^.Block := 'P'; Titel_Zeiger^.Name := ' ' + Titel;
- Zwischen := Titel_Zeiger; New (Titel_Zeiger);
- Titel_Zeiger^.Last := Zwischen;
- REPEAT
- Wort_finden (Source_Satz, Wort, Wort_norm, Dummy);
- IF (Wort = 'FORWARD') OR (Wort = 'EXTERNAL') THEN
- Titel_Zeiger := Titel_Zeiger^.Last;
- UNTIL (Wort = 'BEGIN') OR (Wort = 'PROCEDURE') OR (Wort = 'FUNCTION');
- IF Dummy THEN Source_Satz := Wort_norm + ';' + Source_Satz
- ELSE Source_Satz := Wort_norm + ' ' + Source_Satz;
- END; (* Prog_Proc_Fkt *)
- (* --------------------------------------------------------------------- *)
- PROCEDURE Ausdruck (VAR Source_Satz : Text255);
- VAR Schluessel, Anweisungs_Ende : BOOLEAN;
- Anweisung : Text110; Ort, i, Zahl : INTEGER;
- BEGIN
- Anweisung := '';
- REPEAT
- Wort_finden (Source_Satz, Wort, Wort_norm, Anweisungs_Ende);
- Schluessel := (Wort = 'END') OR (Wort = 'ELSE') OR (Wort = 'UNTIL');
- IF NOT (Schluessel) THEN Anweisung := Anweisung + ' ' + Wort_norm;
- UNTIL Schluessel OR Anweisungs_Ende OR File_Ende;
- Ort := Pos (':=', Anweisung); Zahl := 0;
- FOR i := 1 TO Ort DO IF Anweisung [i] = '''' THEN Zahl := Succ (Zahl);
- IF Odd (Zahl) OR (Ort = 0) THEN Schreibe_Struktur ('U', Anweisung)
- ELSE Schreibe_Struktur ('A', Anweisung);
- IF Schluessel THEN Source_Satz := Wort + ' ' + Source_Satz;
- END; (* Ausdruck *)
- (* --------------------------------------------------------------------- *)
- PROCEDURE Beginn;
- VAR Zwischen : Blockzeiger; Name : Text110;
- BEGIN
- IF Titel_Zeiger^.Last = NIL THEN
- BEGIN Name := ' '; Block^.Zeichen := ' '; END
- ELSE
- BEGIN
- Titel_Zeiger := Titel_Zeiger^.Last; Name := Titel_Zeiger^.Name;
- Block^.Zeichen := Titel_Zeiger^.Block;
- END;
- Schreibe_Struktur (Block^.Zeichen, Name); Zwischen := Block;
- New (Block); Block^.Last := Zwischen;
- END; (* Beginn *)
- (* --------------------------------------------------------------------- *)
- PROCEDURE Ende;
- VAR Zeichen : CHAR; Anweisungs_Ende : BOOLEAN;
- BEGIN
- IF Block^.Last = NIL THEN Zeichen := ' '
- ELSE BEGIN Block := Block^.Last; Zeichen := Block^.Zeichen; END;
- IF Zeichen <> 'M' THEN
- BEGIN
- Wort_finden (Source_Satz, Wort, Wort_norm, Anweisungs_Ende);
- IF Anweisungs_Ende THEN Source_Satz := Wort_norm + ';' + Source_Satz
- ELSE Source_Satz := Wort_norm + ' ' + Source_Satz;
- IF (Zeichen = 'I') AND (Wort <> 'ELSE') OR (Zeichen <> 'I') THEN
- IF Zeichen = 'O' THEN Case_Fall (Source_Satz)
- ELSE IF Zeichen = 'E' THEN Schreibe_Struktur ('#I', ' ')
- ELSE Schreibe_Struktur ('#' + Zeichen, ' ');
- END;
- END; (* Ende *)
- (* --------------------------------------------------------------------- *)
- PROCEDURE If_Then_Else (VAR Source_Satz : Text255);
- VAR Schluessel : BOOLEAN;
- BEGIN
- Schreibe_Struktur ('I', Wort_isolieren (Source_Satz, 'THEN'));
- Schreibe_Struktur ('T', ' '); Naechstes_Wort ('I', Source_Satz);
- Wort_finden (Source_Satz, Wort, Wort_norm, Schluessel);
- IF Wort = 'ELSE' THEN
- BEGIN
- Schreibe_Struktur ('E', ' '); Naechstes_Wort ('E', Source_Satz);
- END
- ELSE IF Schluessel THEN Source_Satz := Wort_norm + ';' + Source_Satz
- ELSE Source_Satz := Wort_norm + ' ' + Source_Satz;
- END; (* If_Then_Else *)
- (* --------------------------------------------------------------------- *)
- PROCEDURE Case_Of (VAR Source_Satz : Text255);
- VAR Verteiler : Text110; Schluessel : BOOLEAN; Zwischen : Blockzeiger;
- BEGIN
- Verteiler := '';
- REPEAT
- Wort_finden (Source_Satz, Wort, Wort_norm, Schluessel);
- Schluessel := (Wort = 'OF');
- IF NOT (Schluessel) THEN Verteiler := Verteiler + ' ' + Wort_norm;
- UNTIL Schluessel;
- Schreibe_Struktur ('C', Verteiler); Block^.Zeichen := 'C';
- Zwischen := Block; New (Block); Block^.Last := Zwischen;
- Case_offen := TRUE; Case_Fall (Source_Satz);
- END; (* Case_Of *)
- (* --------------------------------------------------------------------- *)
- PROCEDURE Case_Fall;
- VAR Begriff : Text110; Schluessel, Semikolon : BOOLEAN; Ort : INTEGER;
- BEGIN
- Begriff := '';
- REPEAT
- Wort_finden (Source_Satz, Wort, Wort_norm, Semikolon);
- Schluessel := (Wort = ':'); Ort := Pos (':', Wort);
- IF Ort > 1 THEN
- BEGIN
- IF Semikolon THEN Wort_norm := Wort_norm + ';';
- Source_Satz := ': ' + Copy(Wort_norm, Ort + 1, 255) + ' ' + Source_Satz;
- Delete (Wort_norm, Ort, Length(Wort_norm));
- END;
- IF NOT (Schluessel) THEN Begriff := Begriff + ' ' + Wort_norm;
- UNTIL Schluessel OR (Wort = 'ELSE') OR (Wort = 'END');
- IF Wort <> 'END' THEN
- BEGIN
- Schreibe_Struktur ('O', Begriff); OF_Fall := TRUE;
- Naechstes_Wort ('O', Source_Satz); OF_Fall := FALSE;
- END
- ELSE
- BEGIN Case_offen := FALSE; Ende (Source_Satz); END;
- END; (* Case_Fall *)
- (* --------------------------------------------------------------------- *)
- PROCEDURE While_do (VAR Source_Satz : Text255);
- BEGIN
- Schreibe_Struktur ('W', Wort_isolieren (Source_Satz, 'DO'));
- Naechstes_Wort ('W', Source_Satz);
- END; (* While_do *)
- (* --------------------------------------------------------------------- *)
- PROCEDURE For_do (VAR Source_Satz : Text255);
- VAR Variable, Beginn, Ende, Var1, Indikator : Text110;
- Zahl, Fehler : INTEGER; Dummy, Schluessel : BOOLEAN;
- BEGIN
- Wort_finden (Source_Satz, Wort, Variable, Dummy);
- Zahl := Pos (':=', Variable);
- IF Zahl > 0 THEN
- BEGIN
- Delete (Variable, Zahl, 2);
- Source_Satz := Copy (Variable, Zahl, 255) + ' ' + Source_Satz;
- Delete (Variable, Zahl, Length(Variable));
- END
- ELSE
- BEGIN
- Wort_finden (Source_Satz, Wort, Var1, Dummy);
- Source_Satz := Copy (Var1, 3, 255) + ' ' + Source_Satz;
- END;
- Beginn := '';
- REPEAT
- Wort_finden (Source_Satz, Indikator, Wort_norm, Schluessel);
- Schluessel := (Indikator = 'TO') OR (Indikator = 'DOWNTO');
- IF NOT (Schluessel) THEN Beginn := Beginn + ' ' + Wort_norm;
- UNTIL Schluessel;
- Ende := Wort_isolieren (Source_Satz, 'DO'); Zahl := 1;
- WHILE Beginn [Zahl] = ' ' DO Zahl := Succ (Zahl);
- Delete (Beginn, 1, Zahl - 1); Val (Beginn, Zahl, Fehler);
- Var1 := Variable; Variable := Variable + ' := ' + Variable;
- IF Indikator = 'TO' THEN
- BEGIN
- IF Fehler = 0 THEN
- BEGIN Zahl := Zahl - 1; Str (Zahl, Beginn); END
- ELSE Beginn := Beginn + ' - 1';
- Variable := Variable + ' + 1'; Ende := ' <' + Ende;
- END
- ELSE
- BEGIN
- IF Fehler = 0 THEN
- BEGIN Zahl := Zahl + 1; Str (Zahl, Beginn); END
- ELSE Beginn := Beginn + ' + 1 ';
- Variable := Variable + ' - 1'; Ende := ' >' + Ende;
- END;
- Ende := Var1 + Ende;
- Schreibe_Struktur ('A', ' ' + Var1 + ' := ' + Beginn);
- Schreibe_Struktur ('W', ' ' + Ende);
- Schreibe_Struktur ('A', ' ' + Variable);
- Naechstes_Wort ('W', Source_Satz);
- END; (* For *)
- (* --------------------------------------------------------------------- *)
- PROCEDURE Repeat_Until (VAR Source_Satz : Text255);
- VAR Zwischen : Blockzeiger; Ausdruck : Text110; Ort : INTEGER;
- Schluessel, Anweisungs_Ende : BOOLEAN;
- BEGIN
- Schreibe_Struktur ('R', ' '); Block^.Zeichen := 'R';
- Zwischen := Block; New (Block); Block^.Last := Zwischen;
- REPEAT
- Wort_finden (Source_Zeile, Wort, Wort_norm, Anweisungs_Ende);
- Schluessel := (Wort = 'UNTIL'); Ort := Pos ('UNTIL', Wort);
- IF Ort > 1 THEN
- BEGIN
- Delete (Wort, Ort, 5); Delete (Wort_norm, Ort, 5);
- Source_Satz := 'UNTIL ' + Source_Satz;
- END;
- IF NOT Schluessel THEN Verteile_Schluessel (Wort, Anweisungs_Ende);
- UNTIL Schluessel;
- Ausdruck := ''; Block := Block^.Last;
- REPEAT
- Wort_finden (Source_Satz, Wort, Wort_norm, Anweisungs_Ende);
- Schluessel := (Wort = 'END');
- IF NOT (Schluessel) THEN Ausdruck := Ausdruck + ' ' + Wort_norm;
- UNTIL Schluessel OR Anweisungs_Ende;
- Schreibe_Struktur ('#R', Ausdruck);
- IF Schluessel THEN Source_Satz := 'END ' + Source_Satz;
- END; (* Repeat_Until *)
- (* --------------------------------------------------------------------- *)
- PROCEDURE With_do (VAR Source_Satz : Text255);
- VAR Dummy : BOOLEAN;
- BEGIN
- REPEAT
- Wort_finden (Source_Satz, Wort, Wort_norm, Dummy);
- UNTIL Wort = 'DO';
- Naechstes_Wort ('M', Source_Satz);
- END; (* With_Do *)
- (* --------------------------------------------------------------------- *)
- PROCEDURE Go_to (VAR Source_Satz : Text255);
- VAR Dummy : BOOLEAN;
- BEGIN
- Wort_finden (Source_Satz, Wort, Wort_norm, Dummy);
- Wort_norm := ' GOTO ' + Wort_norm; Schreibe_Struktur ('A', Wort_norm);
- END; (* Go_To *)
- (* --------------------------------------------------------------------- *)
- PROCEDURE Verteile_Schluessel;
- VAR Verteiler : INTEGER;
- BEGIN
- Verteiler := Begriff_Check (Begriff);
- CASE Verteiler OF
- 1 : Prog_Proc_Fkt (Source_Zeile, TRUE);
- 2 : For_do (Source_Zeile);
- 3 : Repeat_Until (Source_Zeile);
- 4 : Case_Of (Source_Zeile);
- 5 : Go_to (Source_Zeile);
- 7 : While_do (Source_Zeile);
- 8 : Beginn;
- 9 : Ende (Source_Zeile);
- 11 : If_Then_Else (Source_Zeile);
- 13 : With_do (Source_Zeile);
- 6, 10,12 : Prog_Proc_Fkt (Source_Zeile, FALSE);
- 0 : BEGIN
- IF Anweisungs_Ende THEN
- Source_Zeile := Wort_norm + '; ' + Source_Zeile
- ELSE Source_Zeile := Wort_norm + ' ' + Source_Zeile;
- Ausdruck (Source_Zeile);
- END;
- END;
- END; (* Verteile_Schluessel *)
- (* --------------------------------------------------------------------- *)
- PROCEDURE Source_Init;
- VAR i : INTEGER;
- BEGIN
- OF_Fall := FALSE;
- REPEAT
- Datei_Name (Source_Name, TRUE, 'Quell-Datei', 17);
- Assign (Quell_datei, Source_Name);
- {$I-} ReSet (Quell_datei); {$I+} Datei_Status (Source_Name);
- UNTIL Datei_ok OR (Length (Source_Name) < 2);
- IF Length (Source_Name) > 1 THEN
- BEGIN
- IF STG_Schreiben THEN
- BEGIN
- Datei_Name (Struktur_Name, FALSE, 'Ausgabe-Datei', 17);
- IF Struktur_Name = '' THEN
- BEGIN
- i := Pos ('.', Source_Name);
- Struktur_Name := Copy (Source_Name, 1, i - 1);
- END;
- Assign (STG_Datei, Struktur_Name + '.STG'); ReWrite (STG_Datei);
- END;
- New (Block); Block^.Last := NIL;
- New(Titel_Zeiger); Titel_Zeiger^.Last := NIL;
- END;
- END; (* Source_Init *)
- (* --------------------------------------------------------------------- *)
- BEGIN
- Source_Init; Zeile := 1;
- IF Datei_ok AND (Source_Name <> '') THEN
- BEGIN
- Init_Phase; Lies_Zeile (Source_Zeile);
- REPEAT
- Wort_finden (Source_Zeile, Wort, Wort_norm, Dummy1);
- Verteile_Schluessel (Wort, Dummy1);
- UNTIL (Length (Source_Zeile) < 2) AND File_Ende;
- IF STG_Schreiben THEN
- BEGIN Close (STG_Datei); Zu_Lang := TRUE; END;
- Nachlauf;
- END;
- END; (* Source_bearbeiten *)
- (* ----------------------------------------------------------------------- *)
- (* Ende von STRUKTO3.PAS *)