|
|
Updated:
11 December 1998
|
OpenVMS RTL Screen Management (SMG$) Manual
SMG$SCROLL_DISPLAY_AREA
The Scroll Display Area routine scrolls a rectangular region of a
virtual display.
Format
SMG$SCROLL_DISPLAY_AREA display-id [,start-row] [,start-column]
[,height] [,width] [,direction] [,count]
RETURNS
OpenVMS usage: |
cond_value |
type: |
longword (unsigned) |
access: |
write only |
mechanism: |
by value |
Arguments
display-id
OpenVMS usage: |
identifier |
type: |
longword (unsigned) |
access: |
read only |
mechanism: |
by reference |
Specifies the virtual display in which scrolling takes place. The
display-id argument is the address of an unsigned
longword that contains the display identifier.
The display identifier is returned by SMG$CREATE_VIRTUAL_DISPLAY.
start-row
OpenVMS usage: |
longword_signed |
type: |
longword (signed) |
access: |
read only |
mechanism: |
by reference |
Specifies the first row of the scrolling region. The
start-row argument is the address of a signed longword
that contains the starting row.
If start-row is omitted, row 1 of the specified
virtual display is used.
start-column
OpenVMS usage: |
longword_signed |
type: |
longword (signed) |
access: |
read only |
mechanism: |
by reference |
Specifies the first column of the scrolling region. The
start-column argument is the address of a signed
longword that contains the starting column.
If omitted, column 1 of the specified virtual display is used.
height
OpenVMS usage: |
longword_signed |
type: |
longword (signed) |
access: |
read only |
mechanism: |
by reference |
Specifies the number of rows in the scrolling region. The
height argument is the address of a signed longword
that contains the number of rows.
If omitted, this value defaults to either the height of the virtual
scrolling region (if one has been explicitly set with
SMG$SET_DISPLAY_SCROLL_REGION) or the height of the specified virtual
display.
When scrolling a portion of a virtual display that contains
double-height, double-width (highwide) characters, it is recommended
that you scroll the display an even number of times.
width
OpenVMS usage: |
longword_signed |
type: |
longword (signed) |
access: |
read only |
mechanism: |
by reference |
Specifies the number of columns in the scrolling region. The
width argument is the address of a signed longword
that contains the number of columns.
If omitted, this value defaults to the width of the specified virtual
display.
direction
OpenVMS usage: |
mask_longword |
type: |
longword (unsigned) |
access: |
read only |
mechanism: |
by reference |
Specifies the direction to scroll. The direction
argument is the address of a longword bit mask that contains the
direction code.
Valid values are SMG$M_UP, SMG$M_DOWN, SMG$M_RIGHT, and SMG$M_LEFT.
SMG$M_UP is the default.
count
OpenVMS usage: |
longword_signed |
type: |
longword (signed) |
access: |
read only |
mechanism: |
by reference |
Specifies the number of lines or columns to scroll. The
count argument is the address of a signed longword
that contains the number of units (lines or columns) to scroll. If
omitted, one unit is scrolled.
Description
SMG$SCROLL_DISPLAY_AREA scrolls a rectangular region of the specified
virtual display. It scrolls the region a specified number of lines or
columns in the specified direction. After the scroll, the cursor is
left at the start-row, start-column
position.
Condition Values Returned
SS$_NORMAL
|
Normal successful completion.
|
SMG$_INVARG
|
The defined rectangle is outside the virtual display.
|
SMG$_INVCOL
|
Invalid column.
|
SMG$_INVDIS_ID
|
Invalid
display-id.
|
SMG$_INVROW
|
Invalid row.
|
SMG$_WRONUMARG
|
Wrong number of arguments.
|
SMG$SCROLL_VIEWPORT
The Scroll a Display Under a Viewport routine scrolls a virtual display
under its associated viewport.
Format
SMG$SCROLL_VIEWPORT display-id [,direction] [,count]
RETURNS
OpenVMS usage: |
cond_value |
type: |
longword (unsigned) |
access: |
write only |
mechanism: |
by value |
Arguments
display-id
OpenVMS usage: |
identifier |
type: |
longword (unsigned) |
access: |
read only |
mechanism: |
by reference |
Display identifier of the virtual display to be scrolled. The
display-id argument is the address of an unsigned
longword containing this identifier.
direction
OpenVMS usage: |
mask_longword |
type: |
longword (unsigned) |
access: |
read only |
mechanism: |
by reference |
Optional direction specifier. The direction argument
is the address of a longword bit mask that contains the direction code
specifying the scrolling direction. The optional count
argument can be used to specify the number of lines to scroll in the
specified direction. Valid values for direction are as
follows:
SMG$M_UP
|
Scroll
count lines upward.
|
SMG$M_DOWN
|
Scroll
count lines downward.
|
SMG$M_RIGHT
|
Scroll
count columns to the right.
|
SMG$M_LEFT
|
Scroll
count columns to the left.
|
SMG$M_UP is the default.
count
OpenVMS usage: |
longword_signed |
type: |
longword (signed) |
access: |
read only |
mechanism: |
by reference |
Optional number of rows or columns to be scrolled. The default is 1.
Description
SMG$SCROLL_VIEWPORT scrolls a virtual display under its associated
viewport. The viewport is actually changing its coordinates as it moves
over the virtual display to simulate scrolling; however, it does not
change its physical location on the screen. The size of the viewport
could change if the viewport moves off the virtual display. To restore
the size of the viewport, use SMG$CHANGE_VIEWPORT.
Condition Values Returned
SS$_NORMAL
|
Normal successful completion.
|
SMG$_INVARG
|
The value of
count is less than zero.
|
SMG$_INVDIS_ID
|
Invalid
display-id.
|
SMG$_NO_WINASSOC
|
No viewport is associated with the specified virtual display.
|
SMG$_WINTRUNCFIT
|
Successful completion; however, the viewport associated with the
virtual display has been truncated to fit.
|
SMG$_WRONUMARG
|
Wrong number of arguments.
|
Example
|
C This Fortran example demonstrates SMG$SCROLL_VIEWPORT.
C Include the SMG definitions. In particular, we want SMG$M_BORDER.
IMPLICIT INTEGER (A-Z)
INCLUDE '($SMGDEF)'
C Create the Virtual Displays. Give them borders.
ROWS = 10
COLUMNS = 22
STATUS = SMG$CREATE_VIRTUAL_DISPLAY
1 (ROWS, COLUMNS, DISPLAY1, SMG$M_BORDER)
IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))
C Create viewport
STATUS = SMG$CREATE_VIEWPORT (DISPLAY1, 2, 2, 3, 10)
IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))
C Create the Pasteboard
STATUS = SMG$CREATE_PASTEBOARD (PASTE1)
IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))
C Put data into the Virtual Displays
STATUS = SMG$PUT_CHARS ( DISPLAY1,'11111111111111', 1, 1)
IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))
STATUS = SMG$PUT_CHARS ( DISPLAY1,'This is row 2.', 2, 1)
IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))
STATUS = SMG$PUT_CHARS ( DISPLAY1,'33333333333333', 3, 1)
IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))
STATUS = SMG$PUT_CHARS ( DISPLAY1,'This is row 4.', 4, 1)
IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))
STATUS = SMG$PUT_CHARS ( DISPLAY1,'55555555555555', 5, 1)
IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))
STATUS = SMG$PUT_CHARS ( DISPLAY1,'This is row 6.', 6, 1)
IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))
STATUS = SMG$PUT_CHARS ( DISPLAY1,'77777777777777', 7, 1)
IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))
STATUS = SMG$PUT_CHARS ( DISPLAY1,'This is row 8.', 8, 1)
IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))
STATUS = SMG$PUT_CHARS ( DISPLAY1,'99999999999999', 9, 1)
IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))
STATUS = SMG$PUT_CHARS ( DISPLAY1,'This is row 10.', 10, 1)
IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))
C Paste the Virtual Display
STATUS = SMG$PASTE_VIRTUAL_DISPLAY ( DISPLAY1, PASTE1, 4, 3)
IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))
STATUS = LIB$WAIT (2.0)
DO 1 I = 1, 3
STATUS = SMG$SCROLL_VIEWPORT(DISPLAY1,SMG$M_UP,1)
IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))
CALL LIB$WAIT (2.0)
1 CONTINUE
STATUS = LIB$WAIT (2.0)
END
|
In this example, a single virtual display is created and is associated
with a viewport. Since the virtual display is pasted to the pasteboard
after it is associated with the viewport, only the portion of the
virtual display that falls inside the viewport is visible. This is
displayed in Figure SMG-45.
Figure SMG-45 Output Generated by Pasting the Virtual
Display
The call to SMG$SCROLL_VIEWPORT is repeated a total of three times.
Figure SMG-46 shows the viewport after the first call to
SMG$SCROLL_VIEWPORT.
Figure SMG-46 Output Generated After First Call to
SMG$SCROLL_VIEWPORT
Figure SMG-47 shows the contents of the viewport after the second call
to SMG$SCROLL_VIEWPORT.
Figure SMG-47 Output Generated After the Second Call to
SMG$SCROLL_VIEWPORT
Figure SMG-48 shows the contents of the viewport after the last call to
SMG$SCROLL_VIEWPORT.
Figure SMG-48 Output Generated After the Last Call to
SMG$SCROLL_VIEWPORT
SMG$SELECT_FROM_MENU
The Make a Selection from the Menu routine lets you move between the
menu choices using the arrow keys and lets you make a selection by
pressing the Return key.
Format
SMG$SELECT_FROM_MENU keyboard-id ,display-id
,selected-choice-number [,default-choice-number] [,flags]
[,help-library] [,timeout] [,word-terminator-code]
[,selected-choice-string] [,rendition-set] [,rendition-complement]
RETURNS
OpenVMS usage: |
cond_value |
type: |
longword (unsigned) |
access: |
write only |
mechanism: |
by value |
Arguments
keyboard-id
OpenVMS usage: |
identifier |
type: |
longword (unsigned) |
access: |
read only |
mechanism: |
by reference |
Identifier of the virtual keyboard from which the terminal user's
responses are read. The keyboard-id argument is the
address of an unsigned longword containing this identifier.
display-id
OpenVMS usage: |
identifier |
type: |
longword (unsigned) |
access: |
read only |
mechanism: |
by reference |
Identifier of the virtual display in which the choices are displayed.
The display-id argument is the address of an unsigned
longword containing this display identifier. This virtual display must
be pasted to a pasteboard and cannot be batched or occluded.
selected-choice-number
OpenVMS usage: |
word_unsigned |
type: |
word (unsigned) |
access: |
write only |
mechanism: |
by reference |
Identification number of the menu item selected. The
selected-choice-number argument is the address of an
unsigned word that receives this number. The
selected-choice-number corresponds to the index of the
menu item in the static string array specified in SMG$CREATE_MENU.
default-choice-number
OpenVMS usage: |
word_unsigned |
type: |
word (unsigned) |
access: |
read only |
mechanism: |
by reference |
Optional identification number of the default menu item. The
default-choice-number argument is the address of an
unsigned word that contains the number of the default menu item. The
default-choice-number corresponds to the index of the
default menu item in the static string array specified in
SMG$CREATE_MENU. If omitted, the default choice will be the last menu
item already selected, or the first item in the menu if no selections
have yet been made.
flags
OpenVMS usage: |
mask_longword |
type: |
longword (unsigned) |
access: |
read only |
mechanism: |
by reference |
Optional bit mask indicating behavior when a selection is made. The
flags argument is the address of an unsigned longword
containing the flag. Valid values are as follows:
SMG$M_RETURN_IMMED
|
Returns control to the user when any key other than an arrow key is
entered.
|
SMG$M_REMOVE_ITEM
|
Causes SMG$SELECT_FROM_MENU to allow each menu item to be selected only
once.
|
help-library
OpenVMS usage: |
char_string |
type: |
character string |
access: |
read only |
mechanism: |
by descriptor |
Optional help library to use if the PF2/Help key is pressed. The
help-library argument is the address of a descriptor
pointing to this help library name. Note that this argument is ignored
if flags specifies SMG$M_RETURN_IMMED. The default is
SYS$HELP:HELPLIB.HLB.
timeout
OpenVMS usage: |
longword_signed |
type: |
longword (signed) |
access: |
read only |
mechanism: |
by reference |
Optional timeout value. The timeout argument is the
address of a signed longword that specifies the number of seconds to
wait for a selection to be made.
word-terminator-code
OpenVMS usage: |
word_unsigned |
type: |
word (unsigned) |
access: |
write only |
mechanism: |
by reference |
Optional unsigned word that receives the code indicating which key
terminated the read. The word-terminator-code argument
is the address of an unsigned word that receives this terminating key
code.
selected-choice-string
OpenVMS usage: |
char_string |
type: |
character string |
access: |
write only |
mechanism: |
by descriptor |
Optional string that receives the text of the menu item selected. The
selected-choice-string is the address of a descriptor
pointing to this string.
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_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. 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 following transformations:
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
|
Description
SMG$SELECT_FROM_MENU lets you make a selection from the items in the
menu. The routine SMG$CREATE_MENU must be called before calling
SMG$SELECT_FROM_MENU.
You can move between the various menu items using the arrow keys, and
make a selection by pressing the Return key. Pressing Ctrl/Z selects
the current choice and returns the value SMG$_EOF. If there are more
menu choices than can be displayed, you can scroll the display by
pressing the appropriate arrow key, which makes visible additional menu
choices.
The current selection is indicated in reverse video (or in the
rendition specified) and by the physical cursor. The selected choice is
returned to the caller in the selected-choice-number
argument. In addition, the selected item will be removed from the
remaining menu items if SMG$M_REMOVE_ITEM is specified for the
flags parameter.
SMG$SELECT_FROM_MENU has two modes of operation that are specified
using the flags argument. A value without
SMG$M_RETURN_IMMED (the default) causes the following behavior:
- The user can move among the choices using the arrow keys.
- The only keys that select the current item are the following:
- HELP or PF2 outputs help for the current item.
- Ctrl/W refreshes the screen by calling SMG$REPAINT_SCREEN.
- Ctrl/Z selects the current item and returns a value of SMG$_EOF.
- PF1 up arrow selects the first item in the menu.
- PF1 down arrow selects the last item in the menu.
- PF1 left arrow selects the first item in the current row.
- PF1 right arrow selects the last item in the current row.
- All other keys are ignored.
A value of SMG$M_RETURN_IMMED enables the following:
- The user can move among the menu choices using the arrow keys.
- Ctrl/Z selects the current item and returns SMG$_EOF.
- Any other key entered selects the current item.
The SMG$K_TRM_keyname code for the terminating key is returned
in the optional word-terminator-code argument.
Multiword menu items are allowed.
Condition Values Returned
SS$_NORMAL
|
Normal successful completion.
|
SMG$_EOF
|
End of file.
|
SMG$_ILLBATFNC
|
The virtual display or pasteboard is batched.
|
SMG$_INVARG
|
Invalid argument or none of the menu items is selectable.
|
SMG$_INVDIS_ID
|
The
display-id is invalid, does not contain a menu, or
contains a viewport.
|
SMG$_NOTPASTED
|
The virtual display is not pasted.
|
SMG$_
xxxx
|
Any completion status returned by SMG$CHANGE_RENDITION,
SMG$SET_CURSOR_ABS, SMG$BEGIN_DISPLAY_UPDATE, SMG$END_DISPLAY_UPDATE,
SMG$READ_KEYSTROKE, SMG$PUT_HELP_TEXT, SMG$SAVE_PHYSICAL_SCREEN, or
SMG$RESTORE_PHYSICAL_SCREEN.
|
LIB$_
xxxx
|
Any completion status returned by LIB$SCOPY.
|
Examples
#1 |
! +
! This VAX Pascal program demonstrates the use of SMG$CREATE_MENU and
! SMG$SELECT_FROM_MENU. This program creates a block menu
! and allows the user to make selections from the menu.
! -
[INHERIT ('SYS$LIBRARY:STARLET')]
PROGRAM BLOCK_MENU (INPUT,OUTPUT);
CONST
NULL = 0;
TYPE
CHAR_STRING = VARYING [20] OF CHAR;
WORD = [WORD] 0..65535;
FIXED_STRING = PACKED ARRAY[1..9] OF CHAR;
VAR
OPTIONS : ARRAY[1..9] OF FIXED_STRING;
I : INTEGER;
RET_STATUS : UNSIGNED;
SELECTED : FIXED_STRING;
NUMBER, DEF_NUMBER : WORD;
PB_ID, KB_ID, DISPLAY1, DISPLAY2 : UNSIGNED;
TERM : WORD;
[EXTERNAL] FUNCTION SMG$CREATE_PASTEBOARD(
VAR PASTEBOARD_ID : UNSIGNED
) : INTEGER; EXTERN;
[EXTERNAL] FUNCTION SMG$CREATE_VIRTUAL_KEYBOARD(
VAR KEYBOARD_ID : UNSIGNED
) : INTEGER; EXTERN;
[EXTERNAL] FUNCTION SMG$CREATE_VIRTUAL_DISPLAY(
NUM_ROWS : INTEGER;
NUM_COLS : INTEGER;
VAR DISPLAY_ID : UNSIGNED;
ATTRIBUTES : UNSIGNED
) : INTEGER; EXTERN;
[EXTERNAL] FUNCTION SMG$PASTE_VIRTUAL_DISPLAY(
DISPLAY_ID : UNSIGNED;
PASTEBOARD_ID : UNSIGNED;
ROW : INTEGER;
COL : INTEGER
) : INTEGER; EXTERN;
[EXTERNAL] FUNCTION SMG$CREATE_MENU(
DISPLAY_ID : UNSIGNED;
CHOICES : ARRAY[A..B : INTEGER] OF FIXED_STRING;
MENU_TYPE : UNSIGNED;
MENU_FLAGS : UNSIGNED;
ROW : INTEGER := %IMMED 0;
REND_SET : UNSIGNED := %IMMED 0;
REND_COMP : UNSIGNED
) : INTEGER; EXTERN;
[EXTERNAL] FUNCTION SMG$SELECT_FROM_MENU(
KEYBOARD_ID : UNSIGNED;
DISPLAY_ID : UNSIGNED;
VAR SELEC_NUM : WORD;
DEFAULT_NUM : WORD;
MENU_FLAGS : UNSIGNED;
HELP_LIBR : CHAR_STRING := %IMMED 0;
TIMEOUT : INTEGER := %IMMED 0;
VAR TERM_CODE : WORD;
VAR SELEC_STR : FIXED_STRING
) : INTEGER; EXTERN;
[EXTERNAL] FUNCTION SMG$PUT_LINE(
DISPLAY_ID : UNSIGNED;
TEXT : CHAR_STRING
) : INTEGER; EXTERN;
[EXTERNAL] FUNCTION SMG$DELETE_MENU(
DISPLAY_ID : UNSIGNED
) : INTEGER; EXTERN;
[EXTERNAL] FUNCTION LIB$STOP(
CONDITION_STATUS : [IMMEDIATE,UNSAFE] UNSIGNED
) : INTEGER; EXTERN;
BEGIN
DEF_NUMBER := 5;
OPTIONS[1] := 'Northwest';
OPTIONS[2] := 'North ';
OPTIONS[3] := 'Northeast';
OPTIONS[4] := 'West ';
OPTIONS[5] := 'Equator ';
OPTIONS[6] := 'East ';
OPTIONS[7] := 'Southwest';
OPTIONS[8] := 'South ';
OPTIONS[9] := 'Southeast';
RET_STATUS := SMG$CREATE_PASTEBOARD (PB_ID);
IF NOT ODD(RET_STATUS)
THEN
LIB$STOP(RET_STATUS);
RET_STATUS := SMG$CREATE_VIRTUAL_KEYBOARD (KB_ID);
IF NOT ODD(RET_STATUS)
THEN
LIB$STOP(RET_STATUS);
RET_STATUS := SMG$CREATE_VIRTUAL_DISPLAY (3, 12, DISPLAY2, SMG$M_BORDER);
IF NOT ODD(RET_STATUS)
THEN
LIB$STOP(RET_STATUS);
RET_STATUS := SMG$CREATE_VIRTUAL_DISPLAY (6, 37, DISPLAY1, SMG$M_BORDER);
IF NOT ODD(RET_STATUS)
THEN
LIB$STOP(RET_STATUS);
RET_STATUS := SMG$PASTE_VIRTUAL_DISPLAY (DISPLAY2, PB_ID, 2, 16);
IF NOT ODD(RET_STATUS)
THEN
LIB$STOP(RET_STATUS);
RET_STATUS := SMG$PASTE_VIRTUAL_DISPLAY (DISPLAY1, PB_ID, 10, 10);
IF NOT ODD(RET_STATUS)
THEN
LIB$STOP(RET_STATUS);
RET_STATUS := SMG$CREATE_MENU (DISPLAY1, OPTIONS, SMG$K_BLOCK,
SMG$M_DOUBLE_SPACE,,, SMG$M_BOLD);
IF NOT ODD(RET_STATUS)
THEN
LIB$STOP(RET_STATUS);
RET_STATUS := SMG$SELECT_FROM_MENU (KB_ID, DISPLAY1, NUMBER, DEF_NUMBER,
SMG$M_RETURN_IMMED,,, TERM, %DESCR SELECTED);
IF NOT ODD(RET_STATUS)
THEN
LIB$STOP(RET_STATUS);
RET_STATUS := SMG$PUT_LINE (DISPLAY2, %DESCR SELECTED);
IF NOT ODD(RET_STATUS)
THEN
LIB$STOP(RET_STATUS);
END.
|