From: sercely@convex.com (Ron Sercely)
Subject: Re: How do I "Get" just 4 characters?
Date: Thu, 4 Mar 1993 23:20:13 GMT
Date: 1993-03-04T23:20:13+00:00 [thread overview]
Message-ID: <1993Mar4.232013.6988@convex.com> (raw)
In-Reply-To: C3Dxz1.J81@news.cso.uiuc.edu
In article <C3Dxz1.J81@news.cso.uiuc.edu> dl10696@ehsn4.cen.uiuc.edu (Dat Trieu Le) writes:
>kanderso@mabillon.ICS.UCI.EDU (Kenneth Anderson) writes:
>
>>I had a question posed to me by one of my students, that asked : How
>>do I get just 4 characters of input?
>
>>Using the following program as an example:
>
>>with Text_IO;
>
>>procedure test is
>
>> subtype pin_type is string(1..4);
>
>> A : pin_type;
>> Num : INTEGER;
>
>>begin
>> Text_IO.Get(A);
>> Text_IO.PUT_LINE(A);
>>end test;
>
>>Now then, if I run the program and type "1234567890",
>
>>what I see is
>
>>1234567890
>>1234
>
>>What I would like to see is this:
>
>>1234
>>1234
>
>>I.E. I don't want to see 567890, I want the program to kick in right away
>>after the fourth character is typed, not wait for the user to type Return.
>
>>I tried changing the program to this:
>
>>with Text_IO;
>
>>procedure test is
>
>> subtype pin_type is string(1..4);
>
>> A : pin_type;
>> B : CHARACTER;
>
>>begin
>> Get(B);
>> A(1) := B;
>> Get(B);
>> A(2) := B;
>> Get(B);
>> A(3) := B;
>> Get(B);
>> A(4) := B;
>> Text_IO.PUT_LINE(A);
>>end test;
>
>>But the same behavior results...
>
>>Any suggestions?
>
>>Thanks in advance,
>
>Hi Ken,
>
>I believe TEXT_IO works much like buffered input io. That is,
>it will read from the input buffer. the Get message reads from
>that buffer. If there is not enough characters in the buffer,
>then the program will wait until the user has completed its
>input to the buffer. Text_IO doesn't consider inputs to be complete
>until it is followed by a carriage-return. If you want Ada to
>interpret characters one-at-a-time, then a routine to interface
>to the hardware may have to be written.
>
>hope this helps.
package SET_TTY_MODES is
procedure SET_CBREAK;
procedure UNSET_CBREAK;
end SET_TTY_MODES;
with TTY;
with OS_FILES;
with V_I_BITS;
with IOCTL;
package body SET_TTY_MODES is
STTY_STATE : TTY.TOTAL_STATE;
procedure SET_CBREAK is
begin
TTY.GET_TTY_STATE(FD => OS_FILES.STDIN_FD, STATE => STTY_STATE);
STTY_STATE.U_TTY_STATE.SG_FLAGS := SHORT_INTEGER(
V_I_BITS.BIT_OR(
INTEGER(STTY_STATE.U_TTY_STATE.SG_FLAGS),
IOCTL.CBREAK));
TTY.SET_TTY_STATE(FD => OS_FILES.STDIN_FD, STATE => STTY_STATE);
end SET_CBREAK;
procedure UNSET_CBREAK is
begin
TTY.GET_TTY_STATE(FD => OS_FILES.STDIN_FD, STATE => STTY_STATE);
STTY_STATE.U_TTY_STATE.SG_FLAGS := SHORT_INTEGER(
V_I_BITS.BIT_AND(
INTEGER(STTY_STATE.U_TTY_STATE.SG_FLAGS),
V_I_BITS.BIT_NEG(IOCTL.CBREAK)));
TTY.SET_TTY_STATE(FD => OS_FILES.STDIN_FD, STATE => STTY_STATE);
end UNSET_CBREAK;
end SET_TTY_MODES;
next prev parent reply other threads:[~1993-03-04 23:20 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
1993-03-04 19:22 How do I "Get" just 4 characters? Kenneth Anderson
1993-03-04 22:18 ` Dat Trieu Le
1993-03-04 23:20 ` Ron Sercely [this message]
1993-03-05 5:45 ` Dat Trieu Le
1993-03-05 15:55 ` Ron Sercely
1993-03-05 5:56 ` Craig Manahan
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox