[comp.os.vms] inkey.pas

SHECTMAN%SETI@ICDC.LLNL.GOV (02/10/88)

[
 INHERIT('SYS$LIBRARY:STARLET.PEN'),
]


 PROGRAM keyin(INPUT,OUTPUT) ;



CONST
    TERMINAL_INPUT_EVENT_FLAG = 10 ;

VAR

    THE_CHARACTER   : CHAR ;
    CHANNEL_NUMBER_ASSIGN : [WORD] 0..65535 ;
    CHANNEL_NUMBER_QIO    : INTEGER ;
    IO_STATUS_BLOCK : RECORD
                          WORD1 : INTEGER ;
                          WORD2 : INTEGER ;
                      END ;


PROCEDURE INITIATE_TERMINAL_INPUT ;
    VAR 
        STATUS : INTEGER ;
    BEGIN
                STATUS := $QIO(TERMINAL_INPUT_EVENT_FLAG,
                                  CHANNEL_NUMBER_QIO,
                                  IO$_READVBLK+IO$M_NOECHO+IO$M_NOFILTR+IO$M_TRMNOECHO,
                                  IO_STATUS_BLOCK,
                                  {NAME OF THE AST ROUTINE},
                                  {AST PARAMETER},
                                  THE_CHARACTER,
                                  1) ;
    END ;


FUNCTION INKEY$ : STRING ;
    VAR
        ALL_EVENT_FLAGS : UNSIGNED ;
        STATUS          : INTEGER ;

    BEGIN
        STATUS := $READEF(TERMINAL_INPUT_EVENT_FLAG,ALL_EVENT_FLAGS) ;
        IF STATUS = SS$_WASCLR THEN
            INKEY$ := ''
        ELSE
            BEGIN
                INKEY$ := THE_CHARACTER ;
                INITIATE_TERMINAL_INPUT ;
            END ;
    END ;



BEGIN
    $ASSIGN('SYS$INPUT:',CHANNEL_NUMBER_ASSIGN) ;
    CHANNEL_NUMBER_QIO := CHANNEL_NUMBER_ASSIGN ;
    INITIATE_TERMINAL_INPUT ;
    {rest of program goes here - makes calls to inkey}
END.