[fpc-pascal] Unit crt
Michael Van Canneyt
michael at freepascal.org
Wed Sep 23 11:46:15 CEST 2015
On Tue, 22 Sep 2015, Rainer Stratmann wrote:
>
> What does SetRawMode do?
puts the terminal in RAW mode.
This disables usual terminal tricks such as translating CTRL-C to SIGINT etc.
A terminal does quite some things 'behind your back', which are not desirable for the CRT unit.
Michael.
>
>
>
>
> var
> OldIO : termio.TermIos;
> inputRaw, outputRaw: boolean;
>
> procedure saveRawSettings(const tio: termio.termios);
> Begin
> with tio do
> begin
> inputRaw :=
> ((c_iflag and (IGNBRK or BRKINT or PARMRK or ISTRIP or
> INLCR or IGNCR or ICRNL or IXON)) = 0) and
> ((c_lflag and (ECHO or ECHONL or ICANON or ISIG or IEXTEN)) = 0);
> outPutRaw :=
> ((c_oflag and OPOST) = 0) and
> ((c_cflag and (CSIZE or PARENB)) = 0) and
> ((c_cflag and CS8) <> 0);
> end;
> end;
>
> procedure restoreRawSettings(tio: termio.termios);
> begin
> with tio do
> begin
> if inputRaw then
> begin
> c_iflag := c_iflag and (not (IGNBRK or BRKINT or PARMRK or ISTRIP or
> INLCR or IGNCR or ICRNL or IXON));
> c_lflag := c_lflag and
> (not (ECHO or ECHONL or ICANON or ISIG or IEXTEN));
> end;
> if outPutRaw then
> begin
> c_oflag := c_oflag and not(OPOST);
> c_cflag := c_cflag and not(CSIZE or PARENB) or CS8;
> end;
> end;
> end;
>
>
> Procedure SetRawMode(b:boolean);
> Var
> Tio : Termios;
> Begin
> if b then
> begin
> TCGetAttr(1,Tio);
> SaveRawSettings(Tio);
> OldIO:=Tio;
> CFMakeRaw(Tio);
> end
> else
> begin
> RestoreRawSettings(OldIO);
> Tio:=OldIO;
> end;
> TCSetAttr(1,TCSANOW,Tio);
> End;
>
> _______________________________________________
> fpc-pascal maillist - fpc-pascal at lists.freepascal.org
> http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
>
More information about the fpc-pascal
mailing list