From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by c5ff346549e7 (Postfix) with ESMTPS id A0EDF5D5 for ; Fri, 29 Mar 2019 23:13:34 +0000 (UTC) X-IronPort-AV: E=Sophos;i="5.60,286,1549926000"; d="scan'208,217";a="376419154" Received: from sympa.inria.fr ([193.51.193.213]) by mail2-relais-roc.national.inria.fr with ESMTP; 30 Mar 2019 00:13:33 +0100 Received: by sympa.inria.fr (Postfix, from userid 20132) id 8CDF782675; Sat, 30 Mar 2019 00:13:33 +0100 (CET) Received: from mail2-relais-roc.national.inria.fr (mail2-relais-roc.national.inria.fr [192.134.164.83]) by sympa.inria.fr (Postfix) with ESMTPS id C46D48249D for ; Sat, 30 Mar 2019 00:13:29 +0100 (CET) Authentication-Results: mail2-smtp-roc.national.inria.fr; spf=None smtp.pra=murthy.chet@gmail.com; spf=Pass smtp.mailfrom=murthy.chet@gmail.com; spf=None smtp.helo=postmaster@mail-lf1-f52.google.com IronPort-PHdr: =?us-ascii?q?9a23=3AiHh77BNRW1/rvkQa4rwl6mtUPXoX/o7sNwtQ0KIM?= =?us-ascii?q?zox0Lfr4rarrMEGX3/hxlliBBdydt6sczbqG+Pi9EUU7or+5+EgYd5JNUxJXwe?= =?us-ascii?q?43pCcHRPC/NEvgMfTxZDY7FskRHHVs/nW8LFQHUJ2mPw6arXK99yMdFQviPgRp?= =?us-ascii?q?OOv1BpTSj8Oq3Oyu5pHfeQpFiCehbb9oLxi7rgrdutUWjIB/Nqs/1xzFr2dSde?= =?us-ascii?q?9L321oP1WTnxj95se04pFu9jlbtuwi+cBdT6j0Zrw0QrNEAjsoNWA1/9DrugLY?= =?us-ascii?q?TQST/HscU34ZnQRODgPY8Rz1RJbxsi/9tupgxCmXOND9QL4oVTi+6apgVQTlgz?= =?us-ascii?q?kbOTEn7G7Xi9RwjKNFrxKnuxx/2JPfbIWMOPZjYq/RYdYWSGxcVchTSiNBGJux?= =?us-ascii?q?YIQBD+UDPehWoYrzqUYQoxSiHgSjHv/jxyVSi3PqwaE30eIsGhzG0gw6GNIOtW?= =?us-ascii?q?zZocv1NKgMTeC+0a7GzSjZb/NK2Tf86JXDfxckofGRR7JwbcrRyEk1GwzZjlWf?= =?us-ascii?q?t5DlMiia1uQIqWeb7u5gWfizhG4grgF8uz6izdovhInRno8Z1EzI+CFjzIs2Jd?= =?us-ascii?q?C0UlN3bN+mHZdKtyyWKY17Sd44TW5yoiY10LgGtIa7fCcUzJQnwAbSa/mdfIiJ?= =?us-ascii?q?5hLvTeKRITlliH58drKyhwi+/VKvyu37Ucm031JKoTRfntbQsXAN0gTf6smBSv?= =?us-ascii?q?Rj4keswSiD2xzX5+1eIk05lbDXJ4Mgz7MyjJYesVrPEjfzmErsja+Wcksk+vKv?= =?us-ascii?q?6+Tierjmo4KcN5VoigH+MqUigNCwAeQmPQgSRGWb9uG826fi/U39WrlFkvo2kq?= =?us-ascii?q?zBvJDAOcsbvrK5AxNS0os79xmwFTKm0NABkXkDLVJFYw6HgpPyO1DOJfD4Fe2w?= =?us-ascii?q?j06tkDdt3fDGP6fuDo/DLnjZw//deuNY4lJAyAcshepO7pQcXrQIPO7zV1DZs4?= =?us-ascii?q?XcBxUidQuuzLC0Js9609Y1WW+TSoqEKr/SoBfc4/81P+mdIoQVtSrVJP0s5vqo?= =?us-ascii?q?hng8zwxONZK11IcaPSjrVs9tJF+UND+12o9YQDU6+zEmRemvs2WsFDtaZnK8Ra?= =?us-ascii?q?U5v2hpB4evDIOFTYeo0uXYgHWLW6ZOb2UDMWiiVG/yftzdCfgJYSOWZMRml25c?= =?us-ascii?q?DOXze8oazRir8TTC5f9nI+7ToHBKsJvi0J1x6bSWm0xoszNzCMuZ3ieGSGQmxm?= =?us-ascii?q?4=3D?= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: =?us-ascii?q?A0BVAADrpZ5chjSnVdFkGwEBAQEDAQEBB?= =?us-ascii?q?wMBAQGBZYI4gREzJ4QOcC2CXo9Li1dyiAqHchCEbAKFNxoHAQQ0EgEBAwEBCQE?= =?us-ascii?q?DAQEBEwEBAQgLCwgpIwyCOikBgmcDAyMdARsdAQMMBgUEBzcCAiIBEQEFARwGg?= =?us-ascii?q?zWBXQEDFZ07PIsdgRIFAReCegWENwoZJw1fgTgCBhKBHYszghaBEYJkLj6BBAG?= =?us-ascii?q?DHwEBgyiCVwOSSZJ5BwKTVBppgRqJX4hGnxkPIYFDgXczGiNQMYI7ggoYAoNUi?= =?us-ascii?q?nMiMI4dgj4BAQ?= X-IPAS-Result: =?us-ascii?q?A0BVAADrpZ5chjSnVdFkGwEBAQEDAQEBBwMBAQGBZYI4gRE?= =?us-ascii?q?zJ4QOcC2CXo9Li1dyiAqHchCEbAKFNxoHAQQ0EgEBAwEBCQEDAQEBEwEBAQgLC?= =?us-ascii?q?wgpIwyCOikBgmcDAyMdARsdAQMMBgUEBzcCAiIBEQEFARwGgzWBXQEDFZ07PIs?= =?us-ascii?q?dgRIFAReCegWENwoZJw1fgTgCBhKBHYszghaBEYJkLj6BBAGDHwEBgyiCVwOSS?= =?us-ascii?q?ZJ5BwKTVBppgRqJX4hGnxkPIYFDgXczGiNQMYI7ggoYAoNUinMiMI4dgj4BAQ?= X-IronPort-AV: E=Sophos;i="5.60,286,1549926000"; d="scan'208,217";a="376419143" X-MGA-submission: =?us-ascii?q?MDEIrPWgEy90rSHaT9P0tQrS3+N8Cd4f1Ph7Th?= =?us-ascii?q?4YEmH3uBaeuZnJwigVms7ta++UJMd3OHhKrPj5baaZ6+L/IbrVkOgPdN?= =?us-ascii?q?jvMrCV2RyvSKGb+wT7SaSYPjM8PULHm/IcXg3VdtjdDb7NMp2s8NPjE2?= =?us-ascii?q?fHso8WB5zJbeLn+ZwjcC4KvA=3D=3D?= Received: from mail-lf1-f52.google.com ([209.85.167.52]) by mail2-smtp-roc.national.inria.fr with ESMTP/TLS/AES128-GCM-SHA256; 30 Mar 2019 00:13:29 +0100 Received: by mail-lf1-f52.google.com with SMTP id m13so2519859lfb.6 for ; Fri, 29 Mar 2019 16:13:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=4jNbPhkxOmA6SJo3vCBXjs2bTUEQJ3wTJKqMWzrf56w=; b=jC+qEFbw4HKsjXaUKNAC63hgKZAYFkCVQ5WbZ97+x+Kaf5jc2mYSsOU0ERm/3/rwgw OtVHYZSPY38GGsIrgqdcwc0L+bHXohQcWoQj2PU4OWxx99qgcPOmXsZCsXclRBNdXsvU 3mJ9McuGvN44lEAvQNvLg8VLk8DFRc/YFB/qijZwP4jW/pGyg28asPnGYwZlYPDr6GpM tPQv7jnAwoXk1fH2Yok6sXmpAZqu5WkF5YlP87jCrcDzlqqcim/Rojbavh01pZGpJU8R yETjLxCdKwOXujgGIFaDd/I2rd7AfWSGSGXnWPn8Y9cO1eiWvDRlpLjA4+40YVblKma0 ji2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=4jNbPhkxOmA6SJo3vCBXjs2bTUEQJ3wTJKqMWzrf56w=; b=tPTZDphxfG6A4fTd2pF2tDG/BrGUhMbcxDXStPA8VliRY0lJtcUXgBW9jCDFb+X0Lv +AXFhmN6N5w60z8VoMEitfk/1i2ag0BXjWAfirAVspNdQbc1H/0kOpan//AieB6+Vqn0 ggzRn5jsbHhzVECer64dmgDo9+NvBZE7fGY3V0Wnn/Qrs0w04WMHfxzR5YpPDCXqzQPi YIBjiJ8qQYzBSEAAAidTya2X+f8Ht8Krgolnuaindk4DO120q1CeHp7T3h/0na2CazdF kfzXql3QdNsrBOhMPXNfM3tx1usHAkbpN6MvEuidv9QO+OD5qGQmu9eGVhPoKq/qlb/7 VxBQ== X-Gm-Message-State: APjAAAWXsVzQuN4jpRAAdacg4PzyF1+aWtzRGqu7JOzsLNvB/HsgEBWT DWxuepqfsOvvZTOVOm39T4jM05aI36m5A6GAepg= X-Google-Smtp-Source: APXvYqwrms51f/s/SyZXmUEyLXLwqRKIltaq8dNFle0es7U7fc+6Wr90pkMiQwhZTlWpkoc7Ql38VJBRd65xzbnt7pg= X-Received: by 2002:a19:954b:: with SMTP id x72mr26047920lfd.67.1553901208170; Fri, 29 Mar 2019 16:13:28 -0700 (PDT) MIME-Version: 1.0 References: <21AC2517-8185-45A3-8520-53C92761CBBA@gmx.net> In-Reply-To: From: Chet Murthy Date: Fri, 29 Mar 2019 16:13:17 -0700 Message-ID: To: Matthew Ryan Cc: Helmut Brandl , caml users Content-Type: multipart/alternative; boundary="000000000000877640058543d117" Subject: Re: [Caml-list] Turn echoing off on standard input to read e.g. passwords Reply-To: Chet Murthy X-Loop: caml-list@inria.fr X-Sequence: 17444 Errors-to: caml-list-owner@inria.fr Precedence: list Precedence: bulk Sender: caml-list-request@inria.fr X-no-archive: yes List-Id: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: --000000000000877640058543d117 Content-Type: text/plain; charset="UTF-8" A little Googling turns up that the author of the Unix library (Xavier, IIRC) provided support for termios(3). So you can already do what you want in Ocaml with no extra C ugly bits. Here's a little ocaml program to demonstrate, and after it, some strace output showing the way it calls ioctl(2) to manipulate the line discipline (relevant bits bolded in HTML format mail). let main () = let open Unix in let tios = tcgetattr stdin in Printf.printf "c_echo: %b\n" tios.c_echo ; Printf.printf "c_echoe: %b\n" tios.c_echoe ; Printf.printf "c_echok: %b\n" tios.c_echok ; Printf.printf "c_echonl: %b\n" tios.c_echonl ; flush Pervasives.stdout ; tios.c_echo <- false ; tcsetattr stdin TCSANOW tios ; let tios = tcgetattr stdin in Printf.printf "AFTER c_echo: %b\nSleeping 10 sec ....\n" tios.c_echo ; flush Pervasives.stdout ; Unix.sleep 10; tios.c_echo <- true ; tcsetattr stdin TCSANOW tios ; () ;; main() ;; ===================== $ strace -eioctl ./noecho ioctl(0, TCGETS, {B38400 opost isig icanon echo ...}) = 0 c_echo: true c_echoe: true c_echok: true c_echonl: false ioctl(0, TCGETS, {B38400 opost isig icanon *echo* ...}) = 0 ioctl(0, TCGETS, {B38400 opost isig icanon *echo* ...}) = 0 ioctl(0, SNDCTL_TMR_START or TCSETS, {B38400 opost isig icanon *-echo *...}) = 0 ioctl(0, TCGETS, {B38400 opost isig icanon *-echo *...}) = 0 ioctl(0, TCGETS, {B38400 opost isig icanon *-echo* ...}) = 0 AFTER c_echo: false Sleeping 10 sec .... ioctl(0, TCGETS, {B38400 opost isig icanon *-echo* ...}) = 0 ioctl(0, TCGETS, {B38400 opost isig icanon *-echo* ...}) = 0 ioctl(0, SNDCTL_TMR_START or TCSETS, {B38400 opost isig icanon *echo* ...}) = 0 ioctl(0, TCGETS, {B38400 opost isig icanon *echo* ...}) = 0 +++ exited with 0 +++ --000000000000877640058543d117 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
A little Googling t= urns up that the author of the Unix library (Xavier, IIRC) provided support= for termios(3).=C2=A0 So you can already do what you want in Ocaml with no= extra C ugly bits.

Here's a little ocaml prog= ram to demonstrate, and after it, some strace output showing the way it cal= ls ioctl(2) to manipulate the line discipline (relevant bits bolded in HTML= format mail).

let main () =3D
=C2= =A0 let open Unix in
=C2=A0 let tios =3D tcgetattr stdin in
=
=C2=A0 Printf.printf "c_echo: %b\n" tios.c_echo ;
= =C2=A0 Printf.printf "c_echoe: %b\n" tios.c_echoe ;
=C2= =A0 Printf.printf "c_echok: %b\n" tios.c_echok ;
=C2=A0= Printf.printf "c_echonl: %b\n" tios.c_echonl ;
=C2=A0 = flush Pervasives.stdout ;
=C2=A0 tios.c_echo <- false ;
<= div>=C2=A0 tcsetattr stdin TCSANOW tios ;
=C2=A0 let tios =3D tcg= etattr stdin in
=C2=A0 Printf.printf "AFTER c_echo: %b\nSlee= ping 10 sec ....\n" tios.c_echo ;
=C2=A0 flush Pervasives.st= dout ;
=C2=A0 Unix.sleep 10;
=C2=A0 tios.c_echo <- t= rue ;
=C2=A0 tcsetattr stdin TCSANOW tios ;
=C2=A0 ()
;;

main() ;;

=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
$ strace -eioctl ./noecho=C2=A0
ioctl(0, TCGETS, {B38400 o= post isig icanon echo ...}) =3D 0
c_echo: true
c_echoe:= true
c_echok: true
c_echonl: false
ioctl(0, = TCGETS, {B38400 opost isig icanon echo ...}) =3D 0
ioctl(0= , TCGETS, {B38400 opost isig icanon echo ...}) =3D 0
ioctl= (0, SNDCTL_TMR_START or TCSETS, {B38400 opost isig icanon -echo ...}= ) =3D 0
ioctl(0, TCGETS, {B38400 opost isig icanon -echo .= ..}) =3D 0
ioctl(0, TCGETS, {B38400 opost isig icanon -echo ...}) =3D 0
AFTER c_echo: false
Sleeping 10 sec ....<= /div>
ioctl(0, TCGETS, {B38400 opost isig icanon -echo ...}) =3D= 0
ioctl(0, TCGETS, {B38400 opost isig icanon -echo ...}) = =3D 0
ioctl(0, SNDCTL_TMR_START or TCSETS, {B38400 opost isig ica= non echo ...}) =3D 0
ioctl(0, TCGETS, {B38400 opost isig i= canon echo ...}) =3D 0
+++ exited with 0 +++

--000000000000877640058543d117--