|
OpenVMS/Hangul RTL Korean Screen Management (SMG$)
Manual
SMG$DISABLE_BROADCAST_TRAPPING
The Disable Broadcast Trapping routine disables trapping of broadcast
messages for the specified terminal.
Format
SMG$DISABLE_BROADCAST_TRAPPING pasteboard-id
RETURNS
OpenVMS usage |
cond_value |
type |
longword (unsigned) |
access |
write only |
mechanism |
by value |
Arguments
pasteboard-id
OpenVMS usage |
identifier |
type |
longword (unsigned) |
access |
read only |
mechanism |
by reference |
Specifies the pasteboard for the terminal to be affected. The
pasteboard-id argument is the address of an unsigned
longword that contains the pasteboard identifier.
Description
SMG$DISABLE_BROADCAST_TRAPPING disables trapping of broadcast messages
for the specified terminal. SMG$DISABLE_BROADCAST_TRAPPING deassigns
the mailbox set with SMG$SET_BROADCAST_TRAPPING, resets the terminal
characteristics, and therefore allows the user to call LIB$SPAWN. This
routine must be used to disable any broadcast trapping set with the
routine SMG$SET_BROADCAST_TRAPPING.
When you disable broadcast trapping, any broadcast messages that have
been queued to the terminal are lost. If you enable broadcast trapping
with SMG$SET_BROADCAST_TRAPPING but do not disable it with
SMG$DISABLE_BROADCAST_TRAPPING before the image exits, any messages
that have been broadcast to the terminal are lost when the image exits.
Note that if both broadcast trapping and the trapping of unsolicited
input are enabled, then both SMG$DISABLE_BROADCAST_TRAPPING and
SMG$DISABLE_UNSOLICITED_INPUT must be invoked to deassign the mailbox.
Condition Values Returned
SS$_NORMAL
|
Normal successful completion.
|
SMG$_WRONUMARG
|
Wrong number of arguments.
|
Any condition value returned by $QIOW.
Example
|
10 !+
!This VAX BASIC program creates three virtual displays on
!one pasteboard.
!
!The first virtual display contains instructions for the user,
!the second shows trapped unsolicited input, and the third
!lists trapped broadcast messages. The program sits in an
!infinite loop until the user types a CTRL/Z.
!
!When the program traps unsolicited input, both broadcast message
!and unsolicited input trapping are disabled, and a subprocess
!is spawned which executes the trapped user input.
!
!When control returns to the main process, broadcast trapping and
!the trapping of unsolicited input are both reenabled. If the
!unsolicited input which is trapped is a CTRL/Z, the program exits.
!-
OPTION TYPE = EXPLICIT
!+
!Declaration of all routines called by the main program.
!-
%INCLUDE "LIB$ROUTINES" %FROM %LIBRARY "SYS$LIBRARY:BASIC$STARLET"
%INCLUDE "SMG$ROUTINES" %FROM %LIBRARY "SYS$LIBRARY:BASIC$STARLET"
!+
!Declaration of the two AST routines:
!GET_MSG is called when a broadcast message is trapped
!GET_INPUT is called when there is unsolicited input
!GET_INPUT is the routine which spawns the subprocess
!-
EXTERNAL INTEGER GET_MSG
EXTERNAL INTEGER GET_INPUT
DECLARE LONG pb_id, ret_status, display_id, display2_id, display3_id, &
key_id, key_tab_id, counter
!+
!Create a MAP area for variables which must be shared between the
!main program and the AST routines.
!-
MAP (params) LONG disp_info(2), LONG keyboard_info(4), LONG done_flag
DECLARE STRING CONSTANT top_label = "User Input"
DECLARE STRING CONSTANT ins_label = "Instructions"
DECLARE STRING CONSTANT msg_label = "Messages"
DECLARE STRING CONSTANT instr_0 = "Type commands to fill INPUT display."
DECLARE STRING CONSTANT instr_1 = "Type CTRL/T to fill MESSAGES display."
DECLARE STRING CONSTANT instr_2 = "Type CTRL/Z to exit."
DECLARE LONG CONSTANT advance = 1
%INCLUDE "$SMGDEF" %FROM %LIBRARY "SYS$LIBRARY:BASIC$STARLET"
%INCLUDE "$SMGMSG" %FROM %LIBRARY "SYS$LIBRARY:BASIC$STARLET"
!+
!The done_flag variable is clear (0) unless the user input was
!a CTRL/Z - in that case the program exits.
!-
done_flag = 0
!+
!Create the pasteboard and the virtual keyboard
!-
ret_status = SMG$CREATE_PASTEBOARD (pb_id)
IF (ret_status AND 1%) = 0% THEN
CALL LIB$STOP(ret_status BY VALUE)
END IF
!+
!This is one of the values which must be stored in the MAP area.
!-
disp_info(0) = pb_id
ret_status = SMG$CREATE_VIRTUAL_KEYBOARD (key_id)
IF (ret_status AND 1%) = 0% THEN
CALL LIB$STOP(ret_status BY VALUE)
END IF
ret_status = SMG$CREATE_KEY_TABLE (key_tab_id)
IF (ret_status AND 1%) = 0% THEN
CALL LIB$STOP(ret_status BY VALUE)
END IF
!+
!Create the three virtual displays
!-
ret_status = SMG$CREATE_VIRTUAL_DISPLAY(3 BY REF, 75 BY REF, &
display3_id, SMG$M_BORDER BY REF, SMG$M_REVERSE BY REF)
IF (ret_status AND 1%) = 0% THEN
CALL LIB$STOP(ret_status BY VALUE)
END IF
ret_status = SMG$CREATE_VIRTUAL_DISPLAY(6 BY REF, 75 BY REF, &
display_id, SMG$M_BORDER BY REF, SMG$M_REVERSE BY REF)
IF (ret_status AND 1%) = 0% THEN
CALL LIB$STOP(ret_status BY VALUE)
END IF
ret_status = SMG$CREATE_VIRTUAL_DISPLAY(6 BY REF, 75 BY REF, &
display2_id, SMG$M_BORDER BY REF, SMG$M_REVERSE BY REF)
IF (ret_status AND 1%) = 0% THEN
CALL LIB$STOP(ret_status BY VALUE)
END IF
!+
!The disp_info and keyboard_info arrays are required in the MAP.
!-
disp_info(1) = display2_id
keyboard_info(0) = key_id
keyboard_info(1) = key_tab_id
keyboard_info(2) = display_id
keyboard_info(4) = pb_id
!+
!Put Label borders around the three virtual displays.
!-
ret_status = SMG$LABEL_BORDER (display3_id, ins_label,,, &
SMG$M_BOLD BY REF, SMG$M_REVERSE BY REF)
IF (ret_status AND 1%) = 0% THEN
CALL LIB$STOP(ret_status BY VALUE)
END IF
ret_status = SMG$LABEL_BORDER (display_id, top_label,,, &
SMG$M_BOLD BY REF,)
IF (ret_status AND 1%) = 0% THEN
CALL LIB$STOP(ret_status BY VALUE)
END IF
ret_status = SMG$LABEL_BORDER (display2_id, msg_label,,, &
SMG$M_BOLD BY REF,)
IF (ret_status AND 1%) = 0% THEN
CALL LIB$STOP(ret_status BY VALUE)
END IF
!+
!Fill the INSTRUCTIONS virtual display with user instructions.
!-
ret_status = SMG$PUT_LINE(display3_id, instr_0, &
advance,,, smg$m_wrap_char)
IF (ret_status AND 1%) = 0% THEN
CALL LIB$STOP(ret_status BY VALUE)
END IF
ret_status = SMG$PUT_LINE(display3_id, instr_1, &
advance,,, smg$m_wrap_char)
IF (ret_status AND 1%) = 0% THEN
CALL LIB$STOP(ret_status BY VALUE)
END IF
ret_status = SMG$PUT_LINE(display3_id, instr_2, &
advance,,, smg$m_wrap_char)
IF (ret_status AND 1%) = 0% THEN
CALL LIB$STOP(ret_status BY VALUE)
END IF
!+
!Paste the virtual displays to the screen.
!-
ret_status = SMG$PASTE_VIRTUAL_DISPLAY(display3_id, pb_id, &
2 BY REF, 4 BY REF)
IF (ret_status AND 1%) = 0% THEN
CALL LIB$STOP(ret_status BY VALUE)
END IF
ret_status = SMG$PASTE_VIRTUAL_DISPLAY(display_id, pb_id, &
8 BY REF, 4 BY REF)
IF (ret_status AND 1%) = 0% THEN
CALL LIB$STOP(ret_status BY VALUE)
END IF
ret_status = SMG$PASTE_VIRTUAL_DISPLAY(display2_id, pb_id, &
18 BY REF, 4 BY REF)
IF (ret_status AND 1%) = 0% THEN
CALL LIB$STOP(ret_status BY VALUE)
END IF
!+
!Enable the trapping of unsolicited input. GET_INPUT is the
!AST procedure that is called when unsolicited input is
!received. This AST has one parameter, passed as null.
!-
ret_status = SMG$ENABLE_UNSOLICITED_INPUT(pb_id, LOC(GET_INPUT))
IF (ret_status AND 1%) = 0% THEN
CALL LIB$STOP(ret_status BY VALUE)
END IF
!+
!Enable the trapping of broadcast messages. GET_MSG is the
!AST which is called when broadcast messages are received.
!This AST outputs the trapped message into the MESSAGES display.
!-
ret_status = SMG$SET_BROADCAST_TRAPPING(pb_id, LOC(GET_MSG))
IF (ret_status AND 1%) = 0% THEN
CALL LIB$STOP(ret_status BY VALUE)
END IF
!+
!This loop continually executes until done_flag is set to 1.
!Done_flag is set to 1 when the user input is a CTRL/Z.
!If done_flag is 1, delete the pasteboard and exit the program.
!-
Infinite_loop:
IF done_flag = 0 THEN
GOTO infinite_loop
ELSE
ret_status = SMG$DELETE_PASTEBOARD (pb_id)
GOTO all_done
END IF
All_done:
END
20 !+
!Start of AST routine GET_INPUT. This AST is called whenever there
!is unsolicited input. The unsolicited input is displayed in the
!INPUT virtual display, and if this input is not CTRL/Z, a subprocess
!is spawned and the input command is executed. While this spawned
!subprocess is executing, broadcast and unsolicited input trapping
!are disabled.
!-
SUB GET_INPUT (paste_id, param, nl_1, nl_2, nl_3, nl_4)
MAP (params) LONG disp_info(2), LONG keyboard_info(4), LONG done_flag
DECLARE LONG z_status, status2, keybd_id, keybd_tab_id, disp_id, &
pastebd, new_display, spawn_status
DECLARE WORD msg2_len
DECLARE STRING msg2
DECLARE LONG CONSTANT next_line = 1
%INCLUDE "SMG$ROUTINES" %FROM %LIBRARY "SYS$LIBRARY:BASIC$STARLET"
%INCLUDE "LIB$ROUTINES" %FROM %LIBRARY "SYS$LIBRARY:BASIC$STARLET"
%INCLUDE "$SMGMSG" %FROM %LIBRARY "SYS$LIBRARY:BASIC$STARLET"
EXTERNAL INTEGER GET_MSG
EXTERNAL INTEGER GET_INPUT
!+
!Assign to the local variables the values that were stored from
!the main program using the MAP area.
!-
keybd_id = keyboard_info(0)
keybd_tab_id = keyboard_info(1)
disp_id = keyboard_info(2)
pastebd = keyboard_info(3)
!+
!SMG$ENABLE_UNSOLICITED_INPUT does not read the input, it simply
!signals the specified AST when there is unsolicited input present.
!You must use SMG$READ_COMPOSED_LINE to actually read the input.
!
!At this time, we check to see if the unsolicited input was a CTRL/Z.
!If so, we skip over the program lines that spawn the subprocess and
!get ready to exit the program.
!-
status2 = SMG$READ_COMPOSED_LINE (keybd_id, keybd_tab_id, msg2,, &
msg2_len, disp_id)
IF (status2 = SMG$_EOF) THEN
GOTO Control_Z
END IF
IF (status2 AND 1%) = 0% THEN
CALL LIB$STOP (status2 BY VALUE)
END IF
!+
!In order to spawn a subprocess, we must first disable
!unsolicited input trapping and broadcast trapping.
!-
status2 = SMG$DISABLE_UNSOLICITED_INPUT (pastebd)
IF (status2 AND 1%) = 0% THEN
CALL LIB$STOP (status2 BY VALUE)
END IF
status2 = SMG$DISABLE_BROADCAST_TRAPPING (pastebd)
IF (status2 AND 1%) = 0% THEN
CALL LIB$STOP (status2 BY VALUE)
END IF
!+
!Save the current screen so that it will not be destroyed when
!the subprocess is executing.
!-
status2 = SMG$SAVE_PHYSICAL_SCREEN (pastebd, new_display)
IF (status2 AND 1%) = 0% THEN
CALL LIB$STOP (status2 BY VALUE)
END IF
!+
!Call LIB$SPAWN to create the subprocess, and pass the unsolicited
!input as the command line.
!-
spawn_status = LIB$SPAWN (msg2)
!+
!Restore the saved screen image.
!-
status2 = SMG$RESTORE_PHYSICAL_SCREEN (pastebd, new_display)
IF (status2 AND 1%) = 0% THEN
CALL LIB$STOP (status2 BY VALUE)
END IF
!+
!Reenable broadcast trapping and unsolicited input trapping.
!-
status2 = SMG$ENABLE_UNSOLICITED_INPUT (pastebd, LOC(GET_INPUT))
IF (status2 AND 1%) = 0% THEN
CALL LIB$STOP (status2 BY VALUE)
END IF
status2 = SMG$SET_BROADCAST_TRAPPING (pastebd, LOC(GET_MSG))
IF (status2 AND 1%) = 0% THEN
CALL LIB$STOP (status2 BY VALUE)
END IF
!+
!Skip the steps which are performed if the unsolicited input
!was a CTRL/Z.
!-
GOTO Out_of_sub
Control_Z:
!+
!We should disable unsolicited input and broadcast trapping
!before we leave the program.
!-
status2 = SMG$DISABLE_UNSOLICITED_INPUT (pastebd)
IF (status2 AND 1%) = 0% THEN
CALL LIB$STOP (status2 BY VALUE)
END IF
status2 = SMG$DISABLE_BROADCAST_TRAPPING (pastebd)
IF (status2 AND 1%) = 0% THEN
CALL LIB$STOP (status2 BY VALUE)
END IF
!+
!Set the done_flag to 1 so that the main program knows we have
!to exit.
!-
done_flag = 1
Out_of_sub:
END SUB
30 !+
!Start of AST routine GET_MSG. This AST is called whenever there
!is a broadcast message. This routine prints the message in the
!MESSAGES virtual display.
!-
SUB GET_MSG (paste_id, nl_1, nl_2, nl_3, nl_4)
DECLARE LONG status1, pasteboard, second_disp
DECLARE WORD msg_len
DECLARE STRING msg
DECLARE LONG CONSTANT forward = 1
MAP (params) LONG disp_info(2), LONG keyboard_info(4)
%INCLUDE "SMG$ROUTINES" %FROM %LIBRARY "SYS$LIBRARY:BASIC$STARLET"
%INCLUDE "LIB$ROUTINES" %FROM %LIBRARY "SYS$LIBRARY:BASIC$STARLET"
%INCLUDE "$SMGDEF" %FROM %LIBRARY "SYS$LIBRARY:BASIC$STARLET"
%INCLUDE "$SMGMSG" %FROM %LIBRARY "SYS$LIBRARY:BASIC$STARLET"
!+
!Assign values to the local variables according to the values stored
!in the MAP area.
!-
pasteboard = disp_info(0)
second_disp = disp_info(1)
!+
!Print the trapped message in the MESSAGES display. If there are no
!more messages, go back to the infinite loop in the main program.
!-
WHILE 1
status1 = SMG$GET_BROADCAST_MESSAGE (pasteboard, msg, msg_len)
IF (status1 = SMG$_NO_MORMSG) THEN
GOTO Exitloop
END IF
IF (status1 AND 1%) = 0% THEN
CALL LIB$STOP (status1 BY VALUE)
END IF
status1 = SMG$PUT_LINE (second_disp, msg, &
forward,,, SMG$M_WRAP_CHAR)
IF (status1 AND 1%) = 0% THEN
CALL LIB$STOP (status1 BY VALUE)
END IF
NEXT
Exitloop:
END SUB
|
To run the example program, use the following commands.
$ BASIC TRAPPING
$ LINK TRAPPING
$ RUN TRAPPING
|
The output for this program is illustrated in the following figures. In
Figure SMG-14, the program is waiting for either unsolicited input or
broadcast messages.
Figure SMG-14 Output Generated Before Any Input or Messages Are
Trapped
The output generated after the user types a Ctrl/T is shown in
Figure SMG-15.
Figure SMG-15 Output Generated After a Broadcast Message Is
Trapped
If the user types a command, that command is displayed in the INPUT
display, and a subprocess is spawned. The output generated after the
user types the command MAIL is shown in Figure SMG-16.
Figure SMG-16 Output Generated After a Call to
LIB$SPAWN
Once the subprocess completes execution, control is returned to the
main process. At this point, the screen is repainted and the program
continues to wait for broadcast messages or unsolicited input. The user
must type a Ctrl/Z to exit the program.
SMG$DISABLE_UNSOLICITED_INPUT
The Disable Unsolicited Input routine disables the trapping of
unsolicited input.
Format
SMG$DISABLE_UNSOLICITED_INPUT pasteboard-id
RETURNS
OpenVMS usage |
cond_value |
type |
longword (unsigned) |
access |
write only |
mechanism |
by value |
Arguments
pasteboard-id
OpenVMS usage |
identifier |
type |
longword (unsigned) |
access |
read only |
mechanism |
by reference |
Specifies the keyboard (associated with the specified pasteboard) for
which unsolicited input is being disabled. The
pasteboard-id argument is the address of an unsigned
longword that contains the pasteboard identifier.
Pasteboard-id is returned by SMG$CREATE_PASTEBOARD.
Description
SMG$DISABLE_UNSOLICITED_INPUT disables unsolicited input ASTs for the
specified pasteboard. SMG$DISABLE_UNSOLICITED_INPUT deassigns the
mailbox set with SMG$ENABLE_UNSOLICITED_INPUT, resets the terminal
characteristics, and therefore allows the user to call LIB$SPAWN. This
routine must be used to disable any unsolicited input trapping enabled
with the SMG$ENABLE_UNSOLICITED_INPUT routine.
Note that if both unsolicited input trapping and the trapping of
broadcast messages are enabled, then both SMG$DISABLE_UNSOLICITED_INPUT
and SMG$DISABLE_BROADCAST_TRAPPING must be invoked in order to deassign
the mailbox.
Condition Values Returned
SS$_NORMAL
|
Normal successful completion.
|
SMG$_WRONUMARG
|
Wrong number of arguments.
|
SMG$_INVPAS_ID
|
Invalid
pasteboard-id.
|
Any condition values returned by $QIOW.
Example
For an example of using SMG$DISABLE_UNSOLICITED_INPUT, see the example
for the routine SMG$DISABLE_BROADCAST_TRAPPING.
SMG$DRAW_CHAR
The Draw a Character in a Virtual Display routine draws a character at
the specified position in a virtual display.
Format
SMG$DRAW_CHAR display-id ,flags [,row] [,column] [,rendition-set]
[,rendition-complement]
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 |
Identifier of the virtual display. The display-id
argument is the address of an unsigned longword containing this
identifier.
flags
OpenVMS usage |
mask_longword |
type |
longword (unsigned) |
access |
read only |
mechanism |
by reference |
Optional bit mask indicating the character to be drawn. The
flags argument is the address of an unsigned longword
that contains the flag. Flags accepts the following
character values:
- SMG$M_UP
- SMG$M_DOWN
- SMG$M_LEFT
- SMG$M_RIGHT
Note that you may perform a logical OR operation to draw T characters,
corner characters, cross characters, and so forth. A value of 0 draws a
diamond character.
row
OpenVMS usage |
longword_signed |
type |
longword (signed) |
access |
read only |
mechanism |
by reference |
Optional row number specifying the row position at which the specified
character is drawn. The row argument is the address of
a signed longword containing the row number. If row is
omitted, the character is drawn at the row position of the current
virtual cursor.
column
OpenVMS usage |
longword_signed |
type |
longword (signed) |
access |
read only |
mechanism |
by reference |
Optional column number specifying the column position at which the
specified character is drawn. The column argument is
the address of a signed longword containing the column number. If
column is omitted, the character is drawn at the
column position of the current virtual cursor.
In case that the column is on the right portion of a
Korean character, the left portion of the character will become
an undefined character. Also if it's on the left portion of a
Korean character, the right portion of the character will become
an undefined character.
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 of the 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$DRAW_CHAR draws a designated character at the specified position in
the specified virtual display. Note that this routine does not change
the position of the virtual cursor. The characters drawn depend on the
type of terminal. For example, SMG$ uses the terminal's line-drawing
character set if possible. If that is not available, SMG$ will use the
characters +, -, and | to draw a line.
In case that the Korean language character set is used, and the
column is on the right portion of a Korean
character, the left portion of the character will become an undefined
character. Also if it's on the left portion of a Korean
character, the right portion of the character will become an undefined
character.
Condition Values Returned
SS$_NORMAL
|
Normal successful completion.
|
SMG$_INVCOL
|
Invalid column number.
|
SMG$_INVROW
|
Invalid row number.
|
SMG$_WRONUMARG
|
Wrong number of arguments.
|
Example
|
C+
C This DEC Fortran example demonstrates the use of
C SMG$DRAW_CHAR to use the terminal line drawing
C characters.
C-
IMPLICIT INTEGER (A-Z)
INCLUDE '($SMGDEF)'
s = SMG$CREATE_PASTEBOARD(p_id)
IF (.NOT. s) CALL LIB$SIGNAL(%VAL(s))
s = SMG$CREATE_VIRTUAL_DISPLAY(17,7,d_id,SMG$M_BORDER)
IF (.NOT. s) CALL LIB$SIGNAL(%VAL(s))
s = SMG$PASTE_VIRTUAL_DISPLAY(d_id,p_id,4,30)
IF (.NOT. s) CALL LIB$SIGNAL(%VAL(s))
s = SMG$SET_CURSOR_REL(d_id,1,3)
IF (.NOT. s) CALL LIB$SIGNAL(%VAL(s))
s = SMG$DRAW_CHAR(d_id,SMG$M_UP,1,4,SMG$M_BOLD)
IF (.NOT. s) CALL LIB$SIGNAL(%VAL(s))
s = SMG$DRAW_CHAR(d_id,SMG$M_DOWN,2,4,0,SMG$M_REVERSE)
IF (.NOT. s) CALL LIB$SIGNAL(%VAL(s))
s = SMG$DRAW_CHAR(d_id,SMG$M_LEFT,3,4,SMG$M_BLINK)
IF (.NOT. s) CALL LIB$SIGNAL(%VAL(s))
s = SMG$DRAW_CHAR(d_id,SMG$M_RIGHT,4,4,0,0)
IF (.NOT. s) CALL LIB$SIGNAL(%VAL(s))
s = SMG$DRAW_CHAR(d_id,SMG$M_UP + SMG$M_DOWN,5)
IF (.NOT. s) CALL LIB$SIGNAL(%VAL(s))
s = SMG$DRAW_CHAR(d_id,SMG$M_UP + SMG$M_LEFT,6)
IF (.NOT. s) CALL LIB$SIGNAL(%VAL(s))
s = SMG$DRAW_CHAR(d_id,SMG$M_UP + SMG$M_RIGHT,7)
IF (.NOT. s) CALL LIB$SIGNAL(%VAL(s))
s = SMG$DRAW_CHAR(d_id,SMG$M_DOWN + SMG$M_LEFT,8)
IF (.NOT. s) CALL LIB$SIGNAL(%VAL(s))
s = SMG$DRAW_CHAR(d_id,SMG$M_DOWN + SMG$M_RIGHT,9)
IF (.NOT. s) CALL LIB$SIGNAL(%VAL(s))
s = SMG$DRAW_CHAR(d_id,SMG$M_LEFT + SMG$M_RIGHT,10)
IF (.NOT. s) CALL LIB$SIGNAL(%VAL(s))
s = SMG$DRAW_CHAR(d_id,SMG$M_UP + SMG$M_DOWN + SMG$M_LEFT,11)
IF (.NOT. s) CALL LIB$SIGNAL(%VAL(s))
s = SMG$DRAW_CHAR(d_id,SMG$M_UP + SMG$M_DOWN + SMG$M_RIGHT,12)
IF (.NOT. s) CALL LIB$SIGNAL(%VAL(s))
s = SMG$DRAW_CHAR(d_id,SMG$M_DOWN + SMG$M_LEFT + SMG$M_RIGHT,13)
IF (.NOT. s) CALL LIB$SIGNAL(%VAL(s))
s = SMG$DRAW_CHAR(d_id,SMG$M_UP + SMG$M_LEFT + SMG$M_RIGHT,14)
IF (.NOT. s) CALL LIB$SIGNAL(%VAL(s))
s = SMG$DRAW_CHAR(d_id,SMG$M_UP + SMG$M_DOWN + SMG$M_RIGHT +
1 SMG$M_LEFT, 15)
IF (.NOT. s) CALL LIB$SIGNAL(%VAL(s))
s = SMG$DRAW_CHAR(d_id,0,16)
IF (.NOT. s) CALL LIB$SIGNAL(%VAL(s))
END
|
|