Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.lisp > #61347

Re: :sbcl-posix and termios

From steve g <Sgonedes1977@gmail.com>
Newsgroups comp.lang.lisp
Subject Re: :sbcl-posix and termios
References <87ecga94bw.fsf@gmail.com> <n_idS.72904$DOD1.58901@fx17.ams4> <87se4qm0rv.fsf@gmail.com> <PhGdS.164815$yWz9.114727@fx04.ams4>
Date 2026-08-09 17:53 -0400
Message-ID <87fr0nhsf8.fsf@gmail.com> (permalink)

Show all headers | View raw


Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:

> On 07/08/2026 11:02 PM, steve g wrote:
>> Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> writes:


> In the above line, don't you reverse the logic?  Am I right, am I
> wrong?

correct. With terminfo you should treat it as though it were a
destructive operation.

> I haven't bit twiddled in Lisp for years.  Shouldn't you reverse the
> IGNCR with -- what was it? -- (lognot, and (logand)) the results?

IGNCR wil cause the terminal to ignore Carriage Return as the end of
line character.

You are right. I spelled it wrong.

In C it is much simpler.

       tcgetattr (STDIN_FILENO, &tattr);
       tattr.c_lflag &= ~(ICANON|ECHO); /* Clear ICANON and ECHO. */
       tattr.c_cc[VMIN] = 1;
       tattr.c_cc[VTIME] = 0;
       tcsetattr (STDIN_FILENO, TCSAFLUSH, &tattr);

      (:ECHO-ON
       (setf (sb-posix:termios-Lflag termios)
             (logior (sb-posix:termios-Lflag termios) sb-posix:echo))
       (debugging-motion-macros "Echo Mode enabled"))
      (:ECHO-OFF
       (debugging-motion-macros "Echo Mode disabled")
       (setf (sb-posix:termios-Lflag termios)
             (logand (sb-posix:termios-Lflag termios) (lognot sb-posix:echo))))



> Anyway, I was really hoping you'd take the weekend off.  Happy
> bitwise logic!


I am taking the day off :) I am obiously watching HAM radio videos on
utube and I have my 2 meter burning up it's power supply.

>>         (setf (sb-posix::termios-iflag termios)
>>               (logand (sb-posix:termios-iflag termios) (lognot sb-posix:IGNCR)))
>>         (setf (sb-posix:termios-oflag termios)
>>               (logand (sb-posix:termios-oflag termios) (lognot sb-posix:IGNCR))))


> Ok, and now that I see you do it here.  I'm also having a time of
> fun!  I wonder if both of us are wrong, and you want to (setf) the
> bit to one?  Or are you simply using the wrong bit?

like I said it was working; but even if you mess up terminal
information; it hits the old termios data and resets to the defaults. It
just refuses to recognize sb-posix:Iflag. The input flag and the output
flag should be used to change all CR and CR/NL to NL. This would make
parsing _much_ easier.


> Above you test for INLCR, but unset IGNCR?  Then set both IGNCR on
> the iflag and oflag?

this is correct. I want input to end at #\Newline and I want all output
to be #\Newline. This seems like the best solution.

> As I said above, happy bitwise logic, and I hope you get it right!

I hate using the alien package. I am just unable to understand it. Why
not just pass &void [1024] ? 

>
> I have sometimes found it useful to create my own inspection tools,
> because what I just snipped, it does not show the bitwise logic of the
> termios.




>> The inspector shows the Iflag correctly, but I cannot access it. dunno,
>> I might just be too tired.
>> I thank you for your encouragement and support.
>
> I wish you best of luck, and really hope you can be as happy as I am
> when I struggle with bitwise logic and incomprehensible bit settings!

termios shines at this. I should just use stty, but I need the file
descriptor which is not as easy as it used to be. at the terminal
/usr/bin/tty => /dev/tty3.

under X-windows I get a pseudoterminal
/usr/bin/tty => /dev/pts/1 


> Happy Common Lisp!

(defparameter *termios-print-string*
  "~&Old Flags      New Flags~%
     ------------------------
     i_flags: ~d ~I => ~d
     O_flags; ~d ~I => ~d
     C_flags; ~d => ~d
     L_flags; ~d => ~d")


(defun tidevice-termios-display (&optional (stream t))
  (let ((oldtermios (tidevice-termios-old (current-tidevice)))
        (newtermios (tidevice-termios-new (current-tidevice))))
    (format stream *termios-print-string*
            (sb-posix:termios-iflag oldtermios) (sb-posix:termios-iflag newtermios)
            (sb-posix:termios-oflag oldtermios) (sb-posix:termios-oflag newtermios)
            (sb-posix:termios-cflag oldtermios) (sb-posix:termios-cflag newtermios)
            (sb-posix:termios-lflag oldtermios) (sb-posix:termios-lflag newtermios))))




thankx for the reply !

Back to comp.lang.lisp | Previous | NextPrevious in thread | Find similar | Unroll thread


Thread

:sbcl-posix and termios steve g <Sgonedes1977@gmail.com> - 2026-08-06 20:12 -0400
  Re: :sbcl-posix and termios Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> - 2026-08-07 19:05 +0800
    Re: :sbcl-posix and termios steve g <Sgonedes1977@gmail.com> - 2026-08-07 11:02 -0400
      Re: :sbcl-posix and termios Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> - 2026-08-08 01:32 +0800
        Re: :sbcl-posix and termios steve g <Sgonedes1977@gmail.com> - 2026-08-08 01:32 -0400
      Re: :sbcl-posix and termios Johann 'Myrkraverk' Oskarsson <johann@myrkraverk.invalid> - 2026-08-08 21:36 +0800
        Re: :sbcl-posix and termios steve g <Sgonedes1977@gmail.com> - 2026-08-09 17:53 -0400

csiph-web