comp.lang.ada
 help / color / mirror / Atom feed
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;



  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