Any condition values returned by LIB$SCOPY_R_DX, $GET (except
RMS$_EOF), or $QIOW.
#1 |
1 OPTION TYPE=EXPLICIT
!+
! This VAX BASIC program demonstrates the use of
! SMG$READ_STRING to read either a string,
! a control key, or a keypad key.
!
DECLARE LONG KB_ID, RET_STATUS, STR_LEN, TERM_CODE, MODIFIER, I, TIMER
DECLARE STRING DATA_STR, TERM_SET
EXTERNAL LONG CONSTANT IO$M_TIMED
EXTERNAL LONG CONSTANT IO$M_NOECHO
EXTERNAL LONG CONSTANT IO$M_NOFILTR
EXTERNAL SUB LIB$SIGNAL( LONG BY VALUE )
EXTERNAL SUB LIB$STOP( LONG BY VALUE )
EXTERNAL LONG CONSTANT SS$_TIMEOUT
EXTERNAL LONG FUNCTION SMG$CREATE_VIRTUAL_KEYBOARD( LONG, STRING )
EXTERNAL LONG FUNCTION SMG$DELETE_VIRTUAL_KEYBOARD( LONG )
EXTERNAL LONG FUNCTION SMG$READ_STRING( LONG, STRING, STRING, &
LONG, LONG, LONG, STRING, LONG, LONG )
%INCLUDE "$SMGDEF" %FROM %LIBRARY "SYS$LIBRARY:BASIC$STARLET"
!+
! Prompt the user for the timer value. A value of 0 will cause
! the type-ahead buffer to be read.
!-
INPUT "Enter timer value (0 to read type-ahead buffer): ";TIMER
!+
! Tell SMG to use the timer value
!-
MODIFIER = IO$M_TIMED
!+
! Establish a SMG connection to SYS$INPUT. Signal any unexpected
! errors.
!-
RET_STATUS = SMG$CREATE_VIRTUAL_KEYBOARD( KB_ID, "SYS$INPUT:" )
IF (RET_STATUS AND 1%) = 0% THEN
CALL LIB$SIGNAL( RET_STATUS )
END IF
!+
! Tell SMG to use any keystroke except a letter or number
! as a terminator to the input and perform the read.
! Signal any error except SS$_TIMEOUT
!-
TERM_SET = STRING$( 4%, -1% ) + STRING$(12%, 0%)
RET_STATUS = SMG$READ_STRING( KB_ID, DATA_STR, , , &
MODIFIER, TIMER, TERM_SET, &
STR_LEN, TERM_CODE )
IF (RET_STATUS <> SS$_TIMEOUT) AND ((RET_STATUS AND 1%) = 0%) THEN
CALL LIB$SIGNAL( RET_STATUS )
END IF
!+
! All the data should come back as a terminator code, since any
! character can be a terminator.
!-
PRINT "data string = ";LEFT(DATA_STR, STR_LEN)
PRINT "term_code = ";TERM_CODE
SELECT TERM_CODE
CASE 0 TO 31
PRINT "You typed a control character"
CASE 32 TO 127
PRINT "You typed: ";CHR$(TERM_CODE)
CASE SMG$K_TRM_PF1 TO SMG$K_TRM_PERIOD
PRINT "You typed one of the keypad keys"
CASE SMG$K_TRM_UP TO SMG$K_TRM_RIGHT
PRINT "You typed one of the cursor positioning keys"
CASE SMG$K_TRM_F6 TO SMG$K_TRM_F20
PRINT "You typed one of the function keys"
CASE SMG$K_TRM_E1 TO SMG$K_TRM_E6
PRINT "You typed one of the editing keys"
CASE SMG$K_TRM_TIMEOUT
PRINT "You did not type a key fast enough"
CASE ELSE
PRINT "I'm not sure what key you typed"
END SELECT
!+
! Close the connection to SYS$INPUT, and signal any errors.
!-
RET_STATUS = SMG$DELETE_VIRTUAL_KEYBOARD( KB_ID )
IF (RET_STATUS AND 1%) = 0% THEN
CALL LIB$SIGNAL( RET_STATUS )
END IF
END
|
#2 |
C+
C This Fortran example program demonstrates how to use
C SMG$READ_STRING.
C
C This routine creates a virtual display and writes it to the pasteboard.
C Data is placed in the virtual display using SMG$PUT_CHARS.
C-
C+
C Include the SMG definitions. In particular, we want SMG$M_BORDER.
C-
IMPLICIT INTEGER (A-Z)
INCLUDE '($SMGDEF)'
CHARACTER*20 TEXT
C+
C Create a virtual display with a border using SMG$CREATE_VIRTUAL_DISPLAY.
C-
ROWS = 7
COLUMNS = 50
STATUS = SMG$CREATE_VIRTUAL_DISPLAY
1 (ROWS, COLUMNS, DISPLAY1, SMG$M_BORDER)
IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))
C+
C Use SMG$CREATE_PASTEBOARD to create the pasteboard.
C-
STATUS = SMG$CREATE_PASTEBOARD (PASTE1)
IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))
C+
C Create a virtual keyboard by calling SMG$CREATE_VIRTUAL_KEYBOARD.
C-
STATUS = SMG$CREATE_VIRTUAL_KEYBOARD ( KEYBOARD1 )
IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))
C+
C Use SMG$PASTE_VIRTUAL_DISPLAY to paste the virtual display
C at row 3, column 9.
C-
STATUS = SMG$PASTE_VIRTUAL_DISPLAY ( DISPLAY1, PASTE1, 3, 9 )
IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))
C+
C Read a string from the virtual pasteboard using SMG$READ_STRING.
C-
STATUS = SMG$READ_STRING ( KEYBOARD1,
1 TEXT, 'prompt', 20, , , , , , DISPLAY1 )
IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))
END
|
keyboard-id
OpenVMS usage: |
identifier |
type: |
longword (unsigned) |
access: |
read only |
mechanism: |
by reference |
Keyboard identifier. The keyboard-id argument is the
address of an unsigned longword containing the identifier of the
virtual keyboard from which to read.
The virtual keyboard is created by calling the
SMG$CREATE_VIRTUAL_KEYBOARD routine.
resultant-string
OpenVMS usage: |
char_string |
type: |
character string |
access: |
write only |
mechanism: |
by descriptor |
Output string into which SMG$READ_VERIFY writes the characters that are
read. The resultant-string argument is the address of
a descriptor pointing to this output string.
initial-string
OpenVMS usage: |
char_string |
type: |
character string |
access: |
read only |
mechanism: |
by descriptor |
Input string that contains the initial characters of the field. The
initial-string argument is the address of a descriptor
pointing to the input string.
picture-string
OpenVMS usage: |
char_string |
type: |
character string |
access: |
read only |
mechanism: |
by descriptor |
String that contains a picture of what the field is to look like. The
picture-string argument is the address of a descriptor
pointing to the picture string.
For more information on the legal values for the picture string, see
the terminal driver section of the OpenVMS I/O User's Reference Manual.
fill-character
OpenVMS usage: |
char_string |
type: |
character string |
access: |
read only |
mechanism: |
by descriptor |
Fill character. The fill-character argument is the
address of a descriptor pointing to the string that contains the
character to be used as a fill character in the
initial-string argument.
clear-character
OpenVMS usage: |
char_string |
type: |
character string |
access: |
read only |
mechanism: |
by descriptor |
Clear character. The clear-character argument is the
address of a descriptor pointing to the string that contains the
character to be displayed for each occurrence of
fill-character in initial-string.
prompt-string
OpenVMS usage: |
char_string |
type: |
character string |
access: |
read only |
mechanism: |
by descriptor |
Prompt string. The prompt-string argument is the
address of a descriptor pointing to the string that SMG$READ_VERIFY
uses as the prompt for the read operation. This is an optional argument.
modifiers
OpenVMS usage: |
mask_longword |
type: |
longword (unsigned) |
access: |
read only |
mechanism: |
by reference |
Modifiers. The modifiers argument is a longword bit
mask that specifies optional behavior. The bits defined are the same as
for the $QIO item-list entry TRM$_MODIFIERS. This is an optional
argument.
Valid values for modifiers are as follows:
TRM$M_TM_AUTO_TAB
|
Field is full when last character is entered.
|
TRM$M_TM_CVTLOW
|
Converts lowercase characters to uppercase characters.
|
TRM$M_TM_NOECHO
|
Characters entered are not echoed on the screen.
|
TRM$M_TM_NOEDIT
|
Advanced editing is disabled for this read operation.
|
TRM$M_TM_NORECALL
|
Line recall is disabled.
|
TRM$M_TM_PURGE
|
Type-ahead buffer is purged before read is begun.
|
TRM$M_TM_R_JUST
|
Input is right justified.
|
TRM$M_TM_TRMNOECHO
|
Termination character, if any, is not displayed.
|
The TRM$ symbols are defined by the $TRMDEF macro/module in
Digital-supplied system symbol libraries. See the terminal driver
section of the OpenVMS I/O User's Reference Manual for more information on modifiers for read
operations.
timeout
OpenVMS usage: |
longword_signed |
type: |
longword (signed) |
access: |
read only |
mechanism: |
by reference |
Timeout count. The timeout argument is the address of
a signed longword that contains the timeout value. The
timeout argument is optional. If
timeout is specified, all characters typed in before
the timeout or before a terminator is entered are returned in the
buffer. If timeout is omitted, characters are returned
in the buffer until a terminator is seen.
placeholder-arg
OpenVMS usage: |
unspecified |
type: |
unspecified |
access: |
read only |
mechanism: |
unspecified |
Placeholder argument. The OpenVMS terminal driver ignores this argument
when performing a read-verify.
initial-offset
OpenVMS usage: |
longword_signed |
type: |
longword (signed) |
access: |
read only |
mechanism: |
by reference |
Input string offset. The initial-offset argument is
the address of a signed longword that contains the number of characters
(from the initial-string argument) to output after the
prompt before waiting for input.
word-terminator-code
OpenVMS usage: |
word_unsigned |
type: |
word (unsigned) |
access: |
write only |
mechanism: |
by reference |
Key terminator code. The word-terminator-code argument
is an unsigned word into which SMG$READ_VERIFY writes a code indicating
what character or key terminated the read. Key terminator codes are of
the form SMG$K_TRM_keyname. The key names are listed in
Table 3-1.
display-id
OpenVMS usage: |
identifier |
type: |
longword (unsigned) |
access: |
read only |
mechanism: |
by reference |
Display identifier. The optional display-id argument
is the address of an unsigned longword that contains the identifier of
the virtual display in which the read is to be performed.
If display-id is specified, SMG$READ_VERIFY begins the
read at the current virtual cursor position in that virtual display. If
omitted, the read begins in the current physical cursor position. You
cannot accept input from an occluded area of the virtual display.
In the case of multiple virtual displays, each virtual display has an
associated virtual cursor position. At the same time, there is a single
physical cursor position corresponding to the current location of the
physical cursor. If the display-id argument is
specified, the read begins at the current virtual cursor position in
the specified virtual display. If omitted, the read begins in the
current physical cursor position. Note that the length of the
prompt-string, the initial-offset,
and the string entered is limited to the number of visible columns in
the display.
alternate-echo-string
OpenVMS usage: |
char_string |
type: |
character string |
access: |
read only |
mechanism: |
by descriptor |
Alternate echo string. The alternate-echo-string
argument is a string that is printed after the first character is typed
during the read operation. This is an optional argument.
alternate-display-id
OpenVMS usage: |
identifier |
type: |
longword (signed) |
access: |
read only |
mechanism: |
by reference |
Alternate display identifier. The alternate-display-id
is a signed longword containing the identifier of the virtual display
in which the alternate-echo-string argument is to be
printed. This is an optional argument. If specified, the output begins
at the current virtual cursor position in that virtual display. If
omitted, the value of the display-id argument is used
as the default. If display-id is not specified, the
output begins in the current physical cursor position.
rendition-set
OpenVMS usage: |
mask_longword |
type: |
longword (unsigned) |
access: |
read only |
mechanism: |
by reference |
Attribute specifier. The optional rendition-set
argument is the address of a longword bit mask in which each attribute
set causes the corresponding attribute to be set in the display. The
following attributes can be specified using the
rendition-set argument:
SMG$M_BLINK
|
Displays blinking characters.
|
SMG$M_BOLD
|
Displays characters in higher-than-normal intensity.
|
SMG$M_REVERSE
|
Displays characters in reverse video; that is, using the opposite of
the default rendition of the virtual display.
|
SMG$M_UNDERLINE
|
Displays underlined characters.
|
SMG$M_INVISIBLE
|
Specifies invisible characters; that is, the characters exist in the
virtual display but do not appear on the pasteboard.
|
SMG$M_USER1 through
SMG$M_USER8
|
Displays user-defined attributes.
|
The display-id argument must be specified when you use
the rendition-set argument.
rendition-complement
OpenVMS usage: |
mask_longword |
type: |
longword (unsigned) |
access: |
read only |
mechanism: |
by reference |
Attribute complement specifier. The optional
rendition-complement argument is the address of a
longword bit mask in which each attribute set causes the corresponding
attribute to be complemented in the display. All attributes that can be
specified with the rendition-set argument can be
complemented with the rendition-complement argument.
The display-id argument must be specified when you use
the rendition-complement argument.
The optional arguments rendition-set and
rendition-complement let the user control the
attributes of the virtual display in which the read is done. The
rendition-set argument sets certain virtual display
attributes, while rendition-complement complements
these attributes. If the same bit is specified in both the
rendition-set and
rendition-complement parameters,
rendition-set is evaluated first, followed by
rendition-complement. By using these two parameters
together, the user can control each virtual display attribute in a
single procedure call. On a single-attribute basis, the user can cause
the transformations shown in the following table.
Set |
Complement |
Action |
0
|
0
|
Attribute set to default
|
1
|
0
|
Attribute on
|
0
|
1
|
Attribute set to complement of default setting
|
1
|
1
|
Attribute off
|
input-length
OpenVMS usage: |
word_unsigned |
type: |
word (unsigned) |
access: |
write only |
mechanism: |
by reference |
Number of characters entered by the user. The
input-length argument is the address of an unsigned
word containing this number.
SMG$READ_VERIFY reads a sequence of characters from the virtual
keyboard specified and verifies the sequence against the picture
string. It then returns characters read to the caller. The caller may
also specify that a code indicating the terminator be returned.
Rendition applies to both the prompt (if there is one) and echoing of
input characters.
Note that display batching for both the pasteboard and the virtual
display must be off when you use SMG$READ_VERIFY.
For additional information on read-verify operations and on use of the
read-verify arguments, see the terminal driver section of the
OpenVMS I/O User's Reference Manual.