| delorie.com/archives/browse.cgi | search |
| X-Recipient: | archive-cygwin AT delorie DOT com |
| X-Original-To: | cygwin AT cygwin DOT com |
| Delivered-To: | cygwin AT cygwin DOT com |
| DMARC-Filter: | OpenDMARC Filter v1.3.2 sourceware.org D4273384C005 |
| Authentication-Results: | sourceware.org; |
| dmarc=none (p=none dis=none) header.from=towo.net | |
| Authentication-Results: | sourceware.org; spf=none smtp.mailfrom=towo AT towo DOT net |
| Subject: | Re: stty -cooked not usable since cygwin-3.1.1-1 |
| To: | cygwin AT cygwin DOT com |
| References: | <ad285b65-fed9-e6e5-eb3f-432fadc95daf AT bahnhof DOT se> |
| <20200113200152 DOT 5243a304d481677c61c12450 AT nifty DOT ne DOT jp> | |
| <12d7cb6e-b900-6780-1d1c-80ed84cc82d5 AT bahnhof DOT se> | |
| <1ea4e90c-7075-39e8-a518-40bc764a5237 AT bahnhof DOT se> | |
| <20200729013848 DOT cf6d4d99464e92d92d346029 AT nifty DOT ne DOT jp> | |
| From: | Thomas Wolff <towo AT towo DOT net> |
| X-Tagtoolbar-Keys: | D20200728185606925 |
| Message-ID: | <d78149b7-b4c8-5619-71ca-f3b70a04fd26@towo.net> |
| Date: | Tue, 28 Jul 2020 18:56:06 +0200 |
| User-Agent: | Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 |
| Thunderbird/68.10.0 | |
| MIME-Version: | 1.0 |
| In-Reply-To: | <20200729013848.cf6d4d99464e92d92d346029@nifty.ne.jp> |
| X-Provags-ID: | V03:K1:pe47G2VxAI5gDmVIYk7F42/SYtSTJCDwxlC+Qz+YVmsvC96TWC4 |
| WUtTyct35pDB3iYBseHORYUHawPQzRctG5wB+Ofz2HCuDxt/sWowV1Tj5vCzUAxJX8sQqN9 | |
| fUi1Y6VXU/IREs87TYGQ8NN4lXI8f1Wu3Yn5zsOZdwL3vPRjtuKkx+QC4dIWA6Bc+MCPPIc | |
| JHS5ysCNUjZavH5yM/H/g== | |
| X-UI-Out-Filterresults: | notjunk:1;V03:K0:FNRjD7/rMLQ=:waT12jazGTtUPa2BfhQwF1 |
| IehD1+80OygQxFIg1wfzTnMtY4Or77rJduVErJ6plpJNUV+k1eimqGjQupUGgDqNr7UfZV40q | |
| JexaBPtNY9IYw9yVE5HuY6JyyF1Gm7rWO3UTs3abXWkIKtcgsPgsJiU1k6Ux0FP95p/Fqr+T4 | |
| UmttP0rjLvbXp6GGgQq/LLWjAiWp2qEzkze1iTtTMXt8BUBVWTFNu8JawlL7UxRYjghSgi9FQ | |
| Otymr1Ieh4mTgsy9B1BaG/RUVB0KyRToEfGvmoSMffm60GPw+TP+SdjAw8Oe2+UWB1fMx9DUU | |
| dPpPepqPhcK1PPKp3Lm2fNJ0LywoZ+UoqCLcdlUnbf4DppODumWiUVAqri8n0Le3GgnQ5dco7 | |
| TyAhDf6I/6HpdTy5H3/ZkFb3ifMp/vIxiF1dusEtgGGnNA1dY332EhrbqRLV760WVPvSBx4Wk | |
| LRuNQVyPC2OedmCgWJ8yt4WgHgOx+SFSIQUTY5mn6PBZXiVyI12gPjd047mTTc/TFpKAv8fS5 | |
| SrzLKTYK1TCANaExTxwW0opJRCVb9O8aeBrT7Aly3UD3l2IrSxYdrld4aPgbrY65QwnlvnRwM | |
| 2VAPmrolmeL45bxTWpeJOrcLc7+kps4iMmvKvQzjd1AogEuOBl3VGcSkzZEpyxjqnVl0pxqx+ | |
| Q7vxu+dB7rBm7iVtt0h+CUQAal1oPwJQoWaHTEa9TGBOHOx4yEeg/uFZXTWUjUqfp7bbbZUjG | |
| JVHFc/mKWSSM1DbEha6uttvgvWwyILlcMTfCfauTaKXWbiZHYb33dyoobCYqRV8kTDU9217JZ | |
| /oLkdfbL4qnmebYIq4xwb+uMyqH0GXKDbSDR0MKzmU0i+ewakZJeT4O0p5Oq+szYjmE8kvs | |
| X-Spam-Status: | No, score=-6.8 required=5.0 tests=BAYES_00, KAM_DMARC_STATUS, |
| KAM_LAZY_DOMAIN_SECURITY, KAM_NUMSUBJECT, RCVD_IN_DNSWL_NONE, | |
| RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_NONE, | |
| TXREP autolearn=no autolearn_force=no version=3.4.2 | |
| X-Spam-Checker-Version: | SpamAssassin 3.4.2 (2018-09-13) on |
| server2.sourceware.org | |
| X-BeenThere: | cygwin AT cygwin DOT com |
| X-Mailman-Version: | 2.1.29 |
| List-Id: | General Cygwin discussions and problem reports <cygwin.cygwin.com> |
| List-Unsubscribe: | <https://cygwin.com/mailman/options/cygwin>, |
| <mailto:cygwin-request AT cygwin DOT com?subject=unsubscribe> | |
| List-Archive: | <https://cygwin.com/pipermail/cygwin/> |
| List-Post: | <mailto:cygwin AT cygwin DOT com> |
| List-Help: | <mailto:cygwin-request AT cygwin DOT com?subject=help> |
| List-Subscribe: | <https://cygwin.com/mailman/listinfo/cygwin>, |
| <mailto:cygwin-request AT cygwin DOT com?subject=subscribe> | |
| Errors-To: | cygwin-bounces AT cygwin DOT com |
| Sender: | "Cygwin" <cygwin-bounces AT cygwin DOT com> |
Am 28.07.2020 um 18:38 schrieb Takashi Yano via Cygwin:
> On Tue, 28 Jul 2020 15:56:54 +0200
> Rabbe Fogelholm wrote:
>> Rabbe Fogelholm wrote:
>>> Takashi Yano wrote:
>>>> On Mon, 13 Jan 2020 11:52:43 +0100
>>>> Rabbe Fogelholm wrote:
>>>>> I am running a console Java program that is started from a shellscript
>>>>> wrapper. Before invoking Java the wrapper calls `stty -cooked'. The Java
>>>>> program polls the keyboard using System.in.available() and reads
>>>>> characters immediately using System.in.read(), without waiting for the
>>>>> Enter key to be pressed.
>>>>>
>>>>> This way of combining `stty -cooked' and Java has stopped working since
>>>>> version 3.1.1-1 of the Cygwin package. The Java thread that reads the
>>>>> keyboard hangs until Enter is pressed, which is not desirable.
>>>>>
>>>>> I had to downgrade to version 3.0.7-1 to resolve the problem.
>>>>>
>>>>> Versioning information:
>>>>>
>>>>> java version "1.8.0_202"
>>>>> Java(TM) SE Runtime Environment (build 1.8.0_202-b08)
>>>>> Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)
>>>>>
>>>>> OS Name: Microsoft Windows 10 Pro
>>>>> Version: 10.0.17763 Build 17763
>>>>> System Type: x64-based PC
>>>>>
>>>>> See also the enclosed cygcheck.out.
>>>>>
>>>>> To demonstrate the issue I enclose a small Java program that should be
>>>>> able to read single keystrokes when `stty -cooked' is in effect.
>>>> Does your java program work in command prompt? cygwin 3.1.x uses
>>>> pseudo console, so the native (non cygwin) program works as if it
>>>> is executed in command prompt.
>>>>
>>> With cygwin 3.1.x I can't find a way to make my program work.
>>>
>>> When running from within a Cygwin64 terminal the `stty -cooked' command
>>> terminates with exit code 0, but the Java program behaves just as if
>>> `stty -cooked' is not in effect: It does not handle single keystrokes
>>> immediately.
>>>
>>> When running from a Windows command prompt I can execute the stty
>>> program as \cygwin64\bin\stty. However, when given the '-cooked'
>>> argument it complains:
>>> /usr/bin/stty: 'standard input': unable to perform all requested operations
>>>
>>> - and here as well the Java program behaves as if `stty -cooked' is not
>>> in effect.
>> Some time has passed; I am just curious if anyone may have found a
>> solution to the "stty -cooked" issue. With cygwin-3.0.* it was possible
>> to have a Java program act on single keystrokes, with cygwin-3.1 I don't
>> know how to do it. Any ideas welcome!
> Solution 1:
> Redesign your java program using JNA with kbhit()/getch() instead of
> System.in.available()/System.in.read().
>
> Solution 2:
> Add SetConsoleMode() call with ENABLE_LINE_INPUT flag cleared using JNA.
Couldn't cygwin clear this flag when it sets up ConPTY while the pty is
in raw mode?
Thomas
>
> Solution 3:
> Use a wrappwer instead of stty such as:
>
> #include <stdio.h>
> #include <unistd.h>
> #include <termios.h>
> #include <string.h>
> #include <pthread.h>
> #include <sys/wait.h>
>
> void *fwd(void *param)
> {
> FILE *f = (FILE *) param;
> char buf[128];
> int len;
> while (1) {
> if ((len = read(0, buf, sizeof(buf))) <= 0) break;
> if (write(fileno(f), buf, len) < len) break;
> }
> return NULL;
> }
>
> int main(int argc, char *argv[])
> {
> FILE *f;
> int i;
> pthread_t th;
> struct termios t, t_orig;
> char cmd[1024] = {0, };
> if (argc < 2) return 0;
> for (i = 1; i < argc && strlen(cmd)+strlen(argv[i]) < sizeof(cmd)-2; i++) {
> sprintf(cmd + strlen(cmd), (i>1)?" %s":"%s", argv[i]);
> }
> f = popen(cmd, "w");
> tcgetattr(0, &t_orig);
> t = t_orig;
> cfmakeraw(&t);
> tcsetattr(0, TCSANOW, &t);
> pthread_create(&th, NULL, fwd, f);
> wait(NULL);
> tcsetattr(0, TCSANOW, &t_orig);
> pclose(f);
> return 0;
> }
>
--
Problem reports: https://cygwin.com/problems.html
FAQ: https://cygwin.com/faq/
Documentation: https://cygwin.com/docs.html
Unsubscribe info: https://cygwin.com/ml/#unsubscribe-simple
| webmaster | delorie software privacy |
| Copyright © 2019 by DJ Delorie | Updated Jul 2019 |