(* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *)
(*  Soubor: COMCOM.PAS                                                     *)
(*  Obsah: ovladani serioveho portu (binarni i seriove vstupy a vystupy)   *)
(*  Autor: Mircosoft                                                       *)
(*  Posledni uprava: 5.12.2021                                             *)
(*  Pro kompilaci: viz uses                                                *)
(*  Pro spusteni: nic                                                      *)
(*  Upozorneni: tyto zdrojove kody pouzivate na vlastni nebezpeci          *)
(* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *)
PROGRAM komunikace_pres_COM;
uses com,klavesy2,texty2;

procedure indikator(x,y:byte; hodnota:boolean); {na danych souradnicich vypise indikator zapnuti}
Begin
if hodnota then writexy(x,y,10,'+1+')
           else writexy(x,y,4, '-0-');
End;

var o:char;
    DTR,RTS:boolean;
    x,y:byte;
    zprava:string;

BEGIN
if not cominstall(1) then begin
                          writeln('Port se nepodarilo rozchodit.');
                          halt;
                          end;
dtr:=true; rts:=true;
comsetup(1200,comnone,com8d2s);
        {^takhle to bylo v tom basikovem programu,
        Velmex rika: 9600,comnone,com8d1s}
cls(7);
gotoxy(1,8); {LH roh oblasti, do ktere se budou standardnim Writem psat prijata data}
o:=#0;
 repeat
 vymazoblast(1,7,7);
 writexy(2,1,7,'Vstupy:');
 writexy(2,2,7,'CTS...');
 writexy(2,3,7,'DSR...');
 writexy(2,4,7,'RI....');
 writexy(2,5,7,'DCD...');
 writexy(40,1,7,'Vystupy:');
 writexy(40,2,7,'DTR...');
 writexy(40,3,7,'RTS...');
 skutecnatxtobr[2,40].atribut:=9;
 skutecnatxtobr[3,40].atribut:=9;
 indikator(46,2,dtr);
 indikator(46,3,rts);
 writexy(1,7,7,'Data ze seriove linky:');
  repeat
  indikator(8,2,comgetcts);
  indikator(8,3,comgetdsr);
  indikator(8,4,comgetri);
  indikator(8,5,comgetdcd);
  until comrxready or keypressed;
 while comrxready do begin
                     write(char(comrx));
                     {write(comrx,',');}
                     end;
 if keypressed then begin
                    o:=upcase(readkey);
                    case o of 'D':begin
                                  dtr:=not dtr;
                                  comsetoutputs(dtr,rts);
                                  end;
                              'R':begin
                                  rts:=not rts;
                                  comsetoutputs(dtr,rts);
                                  end;
                              #13:begin
                                  x:=wherex; y:=wherey;
                                  vymazoblast(1,3,7);
                                  gotoxy(2,2);
                                  write('Zadej text k odeslani:');
                                  readln(zprava);
                                  if zprava<>'' then comtxblock(zprava[1],length(zprava));
                                  gotoxy(x,y);
                                  end;
                              end;
                    end;
 until o=#27;
comuninstall;
cls(7); gotoxy(1,1);
END.