
program pseudocodeextractor;

(* nach BA Wolfseher    BA TI 87  2.Semester        *)
(* Progr  :    K Rall , M Michaelis                 *)
(* aktualisiert Juni 1989   / am Anfang von PC entf *)

{\  Variablendeklaration                                \}
{\                                                 \}
var datname,datnam2 : string(.12.);
    datei,ziel : text;
    zeile: string(.80.);
    spalte,hilf:integer;
    zeichen:char;
    buchstabe: string(.1.);
    zust: 0..42;
    psco:boolean;
    pstrue:boolean;

procedure pruefen;
{\procedure pruefen mit Eingabe-Automat\}

{\Typdeklaration\}
type ereignis = 0..9;
     matelement = record zu:0..9 ;
                         ps:0..3 ;
                    end;

const
fehlermeldung= 'Es ist ein Fehler aufgetreten ';

{\Definition der Eingabe-Matrix \}

eingabe : array [0..255] of
        ereignis =(  9,  9,   9,  9,   9,  9,   9,  9,   9,  9,
                     9,  9,   9,  9,   9,  9,   9,  9,   9,  9,
                     9,  9,   9,  9,   9,  9,   9,  9,   9,  9,
                     9,  9,   1,  0,   0,  0,   0,  0,   0,  0,
                     2,  3,   7,  0,   0,  0,   0,  0,   0,  0,(*5*)
                     0,  0,   0,  0,   0,  0,   0,  0,   0,  0,
                     0,  0,   0,  0,   0,  0,   0,  0,   0,  0,
                     0,  0,   0,  0,   0,  0,   0,  0,   0,  0,
                     0,  0,   0,  0,   0,  0,   0,  0,   0,  0,
                     0,  0,   6,  0,   0,  0,   0,  0,   0,  0, (*10*)
                     0,  0,   0,  0,   0,  0,   0,  0,   0,  0,
                     0,  0,   0,  0,   0,  0,   0,  0,   0,  0,
                     0,  0,   0,  4,   0,  5,   0,  9,   9,  0,
                     9,  9,   0,  9,   9,  9,   9,  9,   9,  9,
                     9,  9,   0,  9,   9,  9,   9,  9,   0,  9, (*15*)
                     9,  9,   9,  0,   0,  9,   9,  9,   9,  9,
                     9,  9,   9,  9,   9,  9,   9,  9,   9,  9,
                     9,  9,   9,  9,   9,  9,   9,  9,   9,  9,
                     9,  9,   9,  9,   9,  9,   9,  9,   9,  9,
                     9,  9,   9,  9,   9,  9,   9,  9,   9,  9, (*20*)
                     9,  9,   9,  9,   9,  9,   9,  9,   9,  9,
                     9,  9,   9,  9,   9,  9,   9,  9,   9,  9,
                     9,  9,   9,  9,   9,  0,   9,  9,   9,  9,
                     9,  9,   9,  9,   9,  9,   9,  9,   9,  9,
                     9,  9,   9,  9,   9,  9,   9,  9,   9,  9, (*25*)
                     9,  9,   9,  9,   9,  9)                   ;
{\Definition der Z-E-Matrix\}
zustandseingangsmat : array [0..8,0..8] of matelement =
          (((zu:0;ps:0) ,(zu:0;ps:0) ,(zu:1;ps:0) ,(zu:0;ps:0) ,
           (zu:6;ps:0) ,   (zu:0;ps:0) ,(zu:0;ps:0) ,(zu:0;ps:0) ,(zu:9;ps:0)),

          ((zu:1;ps:0) ,(zu:0;ps:0) ,(zu:0;ps:0) ,(zu:0;ps:0) ,
           (zu:0;ps:0) ,(zu:0;ps:0) ,(zu:0;ps:0) ,(zu:2;ps:0) ,(zu:9;ps:0)),

          ((zu:0;ps:0) ,(zu:0;ps:0) ,(zu:0;ps:0) ,(zu:0;ps:0) ,
           (zu:0;ps:0) ,(zu:0;ps:0) ,(zu:3;ps:0) ,(zu:0;ps:0) ,(zu:9;ps:0)),


          ((zu:3;ps:1) ,(zu:3;ps:1) ,(zu:3;ps:1) ,(zu:3;ps:1) ,
           (zu:3;ps:1) ,(zu:3;ps:1) ,(zu:5;ps:1) ,(zu:4;ps:1) ,(zu:9;ps:0)),

          ((zu:3;ps:1) ,(zu:4;ps:0) ,(zu:3;ps:1) ,(zu:0;ps:0) ,
           (zu:3;ps:1) ,(zu:3;ps:1) ,(zu:3;ps:1) ,(zu:4;ps:0) ,(zu:9;ps:0)),

          ((zu:3;ps:1) ,(zu:3;ps:1) ,(zu:3;ps:1) ,(zu:3;ps:1) ,
           (zu:3;ps:1) ,(zu:3;ps:1) ,(zu:5;ps:0) ,(zu:4;ps:0) ,(zu:9;ps:0)),

          ((zu:0;ps:0) ,(zu:0;ps:0) ,(zu:0;ps:0) ,(zu:0;ps:0) ,
           (zu:0;ps:0) ,(zu:0;ps:0) ,(zu:7;ps:0) ,(zu:0;ps:0) ,(zu:9;ps:0)),

          ((zu:7;ps:1) ,(zu:7;ps:1) ,(zu:7;ps:1) ,(zu:7;ps:1) ,
           (zu:7;ps:1) ,(zu:0;ps:0) ,(zu:8;ps:0) ,(zu:7;ps:1) ,(zu:9;ps:0)),

          ((zu:7;ps:1) ,(zu:7;ps:1) ,(zu:7;ps:1) ,(zu:7;ps:1) ,
           (zu:7;ps:1) ,(zu:8;ps:0) ,(zu:8;ps:0) ,(zu:7;ps:1) ,(zu:9;ps:0)));
var mat1 :matelement;
    eing :ereignis;
    zu: 0..42;
    actio: 0..2;

{\Umwandeln des Zeichen in Ereignis\}

begin
 eing:= eingabe[ord(zeichen)] ;
{\Auslesen des neuen Zustands und PC true aus Z-E-Matrix\}

  mat1 := zustandseingangsmat [zust,eing];
  zust := mat1.zu;
  actio :=mat1.ps;


   case actio of
    0: psco:= false;
    1: psco:= true ;
    2: begin        { fehler   }
       writeln(fehlermeldung);
       readln;
       end;
    end;     (* endcase *)
  end;  (*procedure*)


{\4.3.3 Ablaufsteuerung                            \}
{\      ***************                            \}

begin
{\Grundwerte setzen                              \}
pstrue := false ;{ letzte Zeile enthielt keinen PC }
clrscr;
gotoxy (10,5);
writeln(' Name des Quellcodes ');
gotoxy (10,7);
readln (datname);
assign(datei,datname);
reset(datei);
gotoxy (10,9) ;
writeln ('Name der Datei, in die der Pseudocode geschrieben wird ');
gotoxy (10,11);
readln (datnam2);
assign ( ziel,datnam2);
rewrite (ziel);
{\do while not eof                                 \}
while not eof(datei) do
   begin
      {\   lese einen Satz                               \}
      readln(datei,zeile);
      if pstrue = true then
         writeln(ziel);
      {\ grundwerte fuer Zeile setzen            \}
      psco:=false;
      pstrue := false;
      zust:=0;
      spalte:=1;
      {\ spaltenweises Abfragen der Zeile           \}
      while spalte < length(zeile) do
       begin
            zeichen:=zeile[spalte];
            {\   Pruefen                                        \}
            pruefen ;
            {\   if PC-Code (PC=TRUE)                          \}
            if psco then
            {\      THEN  schreibe zeichen                        \}
            begin
             pstrue:=true;
             write(ziel,zeichen);
            end ;
           {\ naechstes Zeichen    \}
            spalte := spalte +1 ;
      end;
 end;
{\End while                                        \}

{\Schluaverarbeitung                               \}
close(ziel);
close(Datei);
end.
