program      gross_schreiben;
{+++++++++++++++++++++++++++++++++++++}
{+++schreibt pascalbezeichner gross+++}
{+++++++++++++++++++++++++++++++++++++}

uses crt;

const anzahl = 41;
      schluesselwort : array[1..anzahl] of string =
                     ('AND','ARRAY','BEGIN','CASE','CONST','CONSTRUCTOR',
                      'DIV','DO','DOWNTO','ELSE','END','FILE','FOR',
                      'FUNCTION','GOTOXY','IF','IN','MOD','NOT','OBJECT',
                      'OF','OR','PROCEDURE','PROGRAM','RECORD','REPEAT',
                      'STRING','THEN','TO','TYPE','UNTIL','USES','WINDOW',
                      'VAR','WHILE','WITH','XOR',
                      'WRITE','WRITELN','READ','READLN');

var quelle, ziel      :  text;
    qu_name,ziel_name :  string;
    zeile             :  string;

procedure ab_spalten (var z, t : string);
const b  =  ['a'..'z','a'..'z'];
var   k  :  integer;

begin
     k := 1; t := '';
     if z[1] in b then
        while (k <= length(z)) and (z[k] in b) do
        begin
             t := t + z[k]; k := k + 1;
        end else
        while (k <= length(z)) and not (z[k] in b) do
        begin
             t := t + z[k]; k := k + 1;
        end;
     delete(z,1,k-1);
end;


function gross_schrift(w : string) : string;
var k  :  integer;

begin
     for k := 1 to length(w) do w[k] := upcase(w[k]);
     gross_schrift := w;
end;

function schluessel_wort (w : string) :  boolean;
var k        :  integer;
    gefunden :  boolean;

begin
     gefunden := false; k := 0;
     while not gefunden and (k< anzahl) do
           begin
                k := k + 1;
                gefunden := (schluesselwort[k] = w);
           end;
     schluessel_wort := gefunden;
end;

procedure in_gross_schrift (var d : text; z : string);
var v_teil , gr  : string;

begin
     while z <> '' do
     begin
          ab_spalten(z,v_teil);
          gr := gross_schrift(v_teil);
          if schluessel_wort(gr) then
          write(d,gr) else write(d,v_teil);
     end;
     writeln(d);
end;

{+++++++++++++++hauptprogramm++++++++++++++++++++}

begin
     clrscr;
     gotoxy(10,3); write('gross_schreiben von schluessel_woertern');
     gotoxy(10,5); write('name der quelldatei  '); readln(qu_name);
     gotoxy(10,7); write('name der zieldatei   '); readln(ziel_name);

     assign(quelle,qu_name); reset(quelle);
     assign(ziel,ziel_name); rewrite(ziel);

     while not eof (quelle) do
           begin
                readln(quelle,zeile);
                in_gross_schrift(ziel,zeile);
                in_gross_schrift(output,zeile);
           end;
     close(quelle); close(ziel);
     gotoxy(50,24);textcolor(red); write('~~~~~fertig~~~~~');
     readln;
end.


