program e_master;

const   {$Ia:gemconst.pas}
        {$Ib:e_master.i}

type    {$Ia:gemtype.pas}

        einheit=record
                  anrede,name,vorname,adresse1,adresse2,plz,ort,staat:string
                end;
var
        aplid,
        laufwerk,
        event,
        dummy,
        i,
        alarm,
        fenster:integer;
        meldung:message_buffer;
        imp_ptr,dru_ptr:dialog_ptr;
        dialog:tree_index;
        maske,dateiname:string[80];
        alert:string[255];
        datei:text;
        zeile,test,abstand:string;
        ende,gefunden,neuzeichnen,ok,druckok,testok:boolean;
        titel:window_title;
        adresse:einheit;

        {$Ia:gemsubs}

procedure fensterauf;
  var  x,y,h,w:integer;
  begin
    x:=75;
    y:=35;
    h:=350;
    w:=500;
    paint_color(white);
    paint_rect(x,y,w,h);
    fenster:=new_window($0001,titel,x,y,w,h);
    open_window(fenster,x,y,w,h)
  end;

procedure fensterzu;
  begin
    close_window(fenster);
    delete_window(fenster)
  end;

procedure floppyerkennen;

  function dgetdrv:integer;
  gemdos($19);

  begin
    laufwerk:=dgetdrv;
    maske:=concat(chr(65+laufwerk),':\*.RPT');
  end;

procedure impressumzeigen;
  begin
    find_dialog(impresum,imp_ptr);
    center_dialog(imp_ptr);
    show_mouse;
    dialog:=do_dialog(imp_ptr,0);
    neuzeichnen:=true;
    obj_setstate(imp_ptr,dialog,0,neuzeichnen);
    end_dialog(imp_ptr);
    delete_dialog(imp_ptr)
  end;

procedure testen;
  begin
    readln(datei,zeile);
    test:=copy(zeile,1,6);
    if test='Anrede' then
      begin
        if length(zeile)>10 then
          adresse.anrede:=copy(zeile,11,(length(zeile)-10))
        else
          adresse.anrede:='';
        ok:=true
      end
    else
      ok:=false
   end;

procedure lesen;
  var i:integer;

  begin
    druckok:=true;
    with adresse do
      begin
        readln(datei,zeile);
        if length(zeile)>8 then
          name:=copy(zeile,9,(length(zeile)-8))
        else
          name:='';
        readln(datei,zeile);
        if length(zeile)>11 then
          vorname:=copy(zeile,12,(length(zeile)-11))
        else
          vorname:='';
        readln(datei,zeile);
        if length(zeile)>12 then
          adresse1:=copy(zeile,13,(length(zeile)-12))
        else
          adresse1:='';
        readln(datei,zeile);
        if length(zeile)>12 then
          adresse2:=copy(zeile,13,(length(zeile)-12))
        else
          adresse2:='';
        readln(datei,zeile);
        if length(zeile)>7 then
          plz:=copy(zeile,8,(length(zeile)-7))
        else
          plz:='';
        readln(datei,zeile);
        if length(zeile)>7 then
          ort:=copy(zeile,8,(length(zeile)-7))
        else
          ort:='';
        readln(datei,zeile);
        if length(zeile)>9 then
          staat:=copy(zeile,10,(length(zeile)-9))
        else
          staat:=''
      end;
    readln(datei,zeile)
  end;

procedure druckertesten;
  var  testen:integer;
       abbruch:boolean;

  function testdrucker:integer;
  gemdos($11);

  begin
    repeat
      testen:=testdrucker;
      if testen=-1 then
        begin
          testok:=true;
          abbruch:=true
        end
      else
        begin
          set_mouse(m_arrow);
          testok:=false;
          find_dialog(drucker,dru_ptr);
          center_dialog(dru_ptr);
          dialog:=do_dialog(dru_ptr,0);
          if dialog=druckeok then
            abbruch:=false
          else
            abbruch:=true;
          neuzeichnen:=true;
          obj_setstate(dru_ptr,dialog,0,neuzeichnen);
          end_dialog(dru_ptr);
          delete_dialog(dru_ptr);
          hide_mouse;
          if abbruch=false then
            begin
              fensterzu;
              titel:='  ETI-MASTER V.1.1: DATENLESEN UND DRUCKEN  ';
              fensterauf
            end;
          show_mouse
        end
    until abbruch;
  end;


procedure print;
 var kontrollnummer,m:integer;

 begin
   set_mouse(m_bee);
   abstand:='    ';
   rewrite(output,'lst:');
   with adresse do
     begin
       writeln;
       if anrede='' then
         writeln
       else
         writeln(abstand,anrede);
       if vorname='' then
         writeln(abstand,name)
       else
         writeln(abstand,vorname,' ',name);
       if adresse1<>'' then
         writeln(abstand,adresse1);
       if adresse2<>'' then
         writeln(abstand,adresse2);
       write(abstand,plz,' ');
       write(chr(27),'-');
       write(chr(1));
       writeln(ort);
       write(chr(27),'-');
       write(chr(0));
       if staat='' then
         writeln
       else
         writeln(abstand,staat);
       if (adresse1<>'') and (adresse2<>'') then
         for m:=1 to 2 do
           writeln
       else
         if (adresse1='') and (adresse2='') then
           for m:=1 to 4 do
             writeln
         else
           for m:=1 to 3 do
             writeln
     end;
   rewrite(output,'con:');
   set_mouse(m_arrow)
 end;


begin
  aplid:=init_gem;
  if aplid>=0 then
    begin
      init_mouse;
      hide_mouse;
      floppyerkennen;
      gefunden:=load_resource('e_master.rsc');
      impressumzeigen;
      repeat
        titel:='  ETI-MASTER V.1.1: DATEIAUSWAHL  ';
        hide_mouse;
        fensterauf;
        show_mouse;
        if get_in_file(maske,dateiname) then
          begin
            reset(datei,dateiname);
            readln(datei,zeile);
            hide_mouse;
            titel:='  ETI-MASTER V.1.1: DATENLESEN UND DRUCKEN  ';
            fensterauf;
            show_mouse;
            set_mouse(m_bee);
            ende:=false;
            repeat
              testen;
              if ok then
               begin
                 lesen;
                 druckertesten;
                 if testok then
                   print
                 else
                   ok:=false
               end
            until not ok
          end
        else
          ende:=true
      until ende
    end;
  fensterzu;
  free_resource;
  exit_gem
end.
