From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,UPPERCASE_50_75 autolearn=no autolearn_force=no version=3.4.4 X-Google-Language: ENGLISH,ASCII-7-bit X-Google-Thread: 103376,21084fc6af5f3dfd,start X-Google-Attributes: gid103376,public X-Google-ArrivalTime: 1995-02-01 16:40:54 PST Path: nntp.gmd.de!Germany.EU.net!wizard.pn.com!satisfied.elf.com!news.mathworks.com!news.alpha.net!uwm.edu!math.ohio-state.edu!howland.reston.ans.net!swiss.ans.net!netnews.lightside.com!nowhere.uucp!jehamby From: jehamby@PROBLEM_WITH_INEWS_DOMAIN_FILE (Jake E. Hamby) Newsgroups: comp.lang.ada Subject: Unbuffered keyboard input on VAX ADA? Date: 2 Feb 1995 00:40:54 GMT Organization: Godcorp Message-ID: <3gp9mm$kfi@covina.lightside.com> NNTP-Posting-Host: user56.lightside.com Mime-Version: 1.0 Content-Type: text/plain;charset=US-ASCII Content-Transfer-Encoding: 7bit X-Newsreader: TIN [version 1.2 PL2] Date: 1995-02-02T00:40:54+00:00 List-Id: Okay, thanks for all the responses I got. Basically, everyone used the same low-level VMS system calls from packages STARLET and SYSTEM to read the input, so the programs all looked pretty much identical. By the way, Ada 9X has the Get_Immediate procedure in TEXT_IO, but of course VAX Ada is only Ada 83, so it has to resort to such a kludge. Here is the example written by jrg@sema-grenoble.fr: with SYSTEM; with TEXT_IO; with CONDITION_HANDLING; with STARLET; with TASKING_SERVICES; package body ADS_DIAL_IO is function TO_ULW ( X : SYSTEM.ADDRESS ) return SYSTEM.UNSIGNED_LONGWORD renames SYSTEM.TO_UNSIGNED_LONGWORD; CLAVIER : STARLET.CHANNEL_TYPE; clavier = keyboard in french ITEMLIST: STARLET.ITEM_LIST_TYPE(0..1); function TRANSLATE_STATUS (STATUS : CONDITION_HANDLING.COND_VALUE_TYPE) return STRING is ST_GETMSG : CONDITION_HANDLING.COND_VALUE_TYPE; TEXT_ST : STRING (1..132); TEXT_RET : STRING (1..80) := ( others => ' ' ); LG_TEXT_ST : SYSTEM.UNSIGNED_WORD; begin -- translate status => string STARLET.GETMSG ( STATUS => ST_GETMSG, MSGID => STATUS, MSGLEN => LG_TEXT_ST, BUFADR => TEXT_ST ); if CONDITION_HANDLING.SUCCESS (ST_GETMSG) then if INTEGER(LG_TEXT_ST) < TEXT_RET'LENGTH then TEXT_RET (1..INTEGER(LG_TEXT_ST)) := TEXT_ST(1..INTEGER(LG_TEXT_ST)); else TEXT_RET := TEXT_ST(1..TEXT_RET'LENGTH); end if; else TEXT_RET (1..32) := "Error in TRANSLATE_STATUS"; end if; return TEXT_RET; end TRANSLATE_STATUS ; function GETKEY return CHARACTER is STATUS : CONDITION_HANDLING.COND_VALUE_TYPE; IOSB : STARLET.IOSB_TYPE; TXT : STRING ( 1 .. 10 ); FUNC : constant := STARLET.IO_READVBLK + STARLET.IO_M_EXTEND ; begin TASKING_SERVICES.TASK_QIOW ( STATUS => STATUS, CHAN => CLAVIER, FUNC => FUNC, IOSB => IOSB, P1 => TO_ULW( TXT'address ), P2 => SYSTEM.UNSIGNED_LONGWORD( TXT'length ) , P5 => TO_ULW( ITEMLIST'address ), P6 => SYSTEM.UNSIGNED_LONGWORD( ITEMLIST'size/8 ) ); if not CONDITION_HANDLING.SUCCESS ( STATUS ) then TEXT_IO.PUT_LINE ("TASK_QIOW: " & TRANSLATE_STATUS( STATUS ) ) ; end if ; return TXT( 1 ); end GETKEY; begin STARLET.ASSIGN( STAT, "TT:", CLAVIER ); -- assign channel for keyboard -- QIO read initialisation ITEMLIST(0).BUF_LEN:= 0; ITEMLIST(0).ITEM_CODE:= STARLET.TRM_ESCTRMOVR; ITEMLIST(0).BUF_ADDRESS:= SYSTEM.TO_ADDRESS(9); ITEMLIST(0).RET_ADDRESS:= SYSTEM.ADDRESS_ZERO; ITEMLIST(1).BUF_LEN:= 0; ITEMLIST(1).ITEM_CODE:= STARLET.TRM_MODIFIERS; ITEMLIST(1).BUF_ADDRESS:= SYSTEM.TO_ADDRESS( STARLET.TRM_M_TM_ESCAPE + STARLET.TRM_M_TM_NOECHO + STARLET.TRM_M_TM_CVTLOW + STARLET.TRM_M_TM_PURGE + STARLET.TRM_M_TM_NOFILTR ); ITEMLIST(1).RET_ADDRESS:= SYSTEM.ADDRESS_ZERO; end ADS_DIAL_IO; -- * Jake Hamby - "Linux: The Choice of a GNU Generation" * * E-MAIL: jehamby@lightside.com + jehamby@vms4.sci.csupomona.edu * * http://vms4.sci.csupomona.edu/~jehamby/index.html *