From: Safir [axica_nopub@yahoo.com] Sent: Wednesday, May 14, 2003 8:19 AM To: Info-VAX@Mvb.Saic.Com Subject: Re: how to use smg$create_menu in vax macro language? Example-MACRO Using RTL SMG Routines To Display A Menu STARS Unique Id: 00943792-C7B5A420-1C01E7 Copyright (c) Digital Equipment Corporation 1990, 1991. All rights reserved COMPONENT: MACRO OP/SYS: VMS SOURCE: Digital Customer Support Center VERSION INFORMATION: Information Applies To: VMS, All Versions OVERVIEW: The following MACRO example demonstrates using Run Time Library Screen Management (SMG) routines to display a menu and manipulate a pasteboard. A pasteboard is the logical structure used for performing output operations to a terminal screen. *** CAUTION *** This sample program has been tested using VAX MACRO on VMS V5.4. However, DIGITAL cannot guarantee its effectiveness because of the possibility of error in transmitting or implementing it. It is meant to be used as a template for writing your own program, and it may require modification for use on your system. SAMPLE PROGRAM: .TITLE CHG_PBD.MAR ; This program calls Run-time Library Screen Management ; routines to display a menu, change the pasteboard (pbd) ; characteristics to screen width 132, set a scrolling ; region, erase the display, and change the pasteboard ; characteristics back to 80, in a loop. ; $SMGDEF ; .PSECT $DATA,WRT,NOEXE,QUAD,CON START_LINE: .LONG 2 END_LINE: .LONG 24 COUNTER: .BLKL 1 NEW_KBID: .BLKL 1 NEW_VDID: .BLKL 1 NEW_PBID: .BLKL 1 PB_ROWS: .BLKL 1 PB_COLS: .BLKL 1 SCROLL_UP: .LONG SMG$M_UP REVERSE_VIDEO: .LONG SMG$M_REVERSE TERMINAL_DEVICE: .ASCID /SYS$OUTPUT/ MINIMAL_UPDATE: .LONG SMG$M_MINUPD MENU_TEXT: .ASCID /THIS IS THE MENU - PRESS RETURN TO CONTINUE/ REPORT_TEXT: .ASCID /THIS IS THE REPORT TEXT AT 132 CHARACTERS/ REPORT_TEXT_2: .ASCID /THIS IS THE testing scrolling TEXT AT 132 CHARACTERS/ ; CARR_RET: .BLKL 10 ; ONE: .LONG 1 ROW: .LONG 1 COL: .LONG 1 ; WIDTH_132: .LONG 132 WIDTH_80: .LONG 80 ; ; .PSECT $CODE,EXE,NOWRT,LONG,PIC,SHR ; .ENTRY BEGIN, ^M<> ; ; establish terminal screen as pasteboard ; PUSHAB PB_COLS ; column one PUSHAB PB_ROWS ; row one PUSHAB TERMINAL_DEVICE PUSHAB NEW_PBID ; pasteboard id is CALLS #4,G^SMG$CREATE_PASTEBOARD ; returned in new_pbid BSBW ERROR ; PUSHAB MINIMAL_UPDATE PUSHAB NEW_PBID CALLS #2,G^SMG$CONTROL_MODE BSBW ERROR ; ; establish virtual display region ; PUSHAB NEW_VDID ; virtual display id PUSHAB PB_COLS ; column one PUSHAB PB_ROWS ; row one CALLS #3,G^SMG$CREATE_VIRTUAL_DISPLAY BSBW ERROR ; ; paste virtual display to the pasteboard ; PUSHAB ONE PUSHAB ONE PUSHAB NEW_PBID ; pasteboard id PUSHAB NEW_VDID ; virtual display id CALLS #4,G^SMG$PASTE_VIRTUAL_DISPLAY BSBW ERROR ; ; create keyboard id ; PUSHAL NEW_KBID ; keyboard id CALLS #1,G^SMG$CREATE_VIRTUAL_KEYBOARD BSBW ERROR ; ; put characters to display menu ; CLRL R5 ; MAIN_LOOP: ; MOVL #5,COL CLRL R2 MOVL #2,COUNTER LOOP1: ; ; write menu - 80 width - no scrolling ; MOVL COUNTER,ROW PUSHAL COL ; starting at col 5 PUSHAL ROW ; row 1 PUSHAQ MENU_TEXT PUSHAL NEW_VDID CALLS #4,G^SMG$PUT_CHARS BSBW ERROR ; ; implement loop to write 10 single spaced lines to screen ; INCL COUNTER INCL R2 CMPL R2,#10 BLSS LOOP1 ; ; wait for a response ; PUSHAQ CARR_RET PUSHAL NEW_KBID CALLS #2,G^SMG$READ_STRING BSBW ERROR ; ; erase display ; PUSHAL NEW_VDID CALLS #1,G^SMG$ERASE_DISPLAY BSBW ERROR ; ; change pasteboard characteristics to 132 ; PUSHAL WIDTH_132 ; set up for 132 PUSHAL NEW_PBID CALLS #2,G^SMG$CHANGE_PBD_CHARACTERISTICS ;chg width from BSBW ERROR ;80 to 132 ; ; set display to scroll region from line 2 to 24 ; PUSHAL END_LINE ;end scrolling ; at line 24 PUSHAL START_LINE ;begin scrolling ; at line 2 PUSHAL NEW_VDID CALLS #3,G^SMG$SET_DISPLAY_SCROLLING_REGION BSBW ERROR ; ; ; put lines to display ; CLRL R2 ; LOOP2: ; ; write lines to screen with scrolling - 132 width - reverse video ; PUSHAB REVERSE_VIDEO ;set rev video PUSHAB SCROLL_UP ;indicate scroll PUSHAQ REPORT_TEXT ;display message PUSHAL NEW_VDID CALLS #4,G^SMG$PUT_WITH_SCROLL BSBW ERROR ; PUSHAB REVERSE_VIDEO ;set rev video PUSHAB SCROLL_UP ;indicate scroll PUSHAQ REPORT_TEXT_2 ;display message PUSHAL NEW_VDID ;to show scroll CALLS #4,G^SMG$PUT_WITH_SCROLL BSBW ERROR ; loop through this scrolling display 50 times AOBLSS #50,R2,LOOP2 ; ; erase display ; PUSHAL NEW_VDID ;erase virtual CALLS #1,G^SMG$ERASE_DISPLAY ; display BSBW ERROR ; ; change pasteboard characteristics back to 80 ; PUSHAL WIDTH_80 ;set width to 80 PUSHAL NEW_PBID CALLS #2,G^SMG$CHANGE_PBD_CHARACTERISTICS BSBW ERROR ; ; loop through five times ; AOBLSS #5,R5,GO_AGAIN ; go through whole ;2 displays 5 x's $EXIT_S R0 ; GO_AGAIN: ; JMP MAIN_LOOP ERROR: BLBC R0,10$ RSB ; 10$: $EXIT_S R0 .END BEGIN