この章では,VMS Calling Standardに準拠したおもな言語で SMG$READ_KEYSTROKEルーチンを呼び出す方法を示します。 他の日本語SMGルーチン(たとえば,SMG$CREATE_VIRTUAL_DISPLAY, SMG$CREATE_PASTEBOARD,SMG$CREATE_VIRTUAL_KEYBOARD, SMG$PASTE_VIRTUAL_DISPLAY,SMG$PUT_LINE)もこれらの例の中で使用しています。
例 7-1のFORTRANプログラムでは, SMG$READ_KEYSTROKEルーチンの他,SMG$CREATE_VIRTUAL_DISPLAY, SMG$CREATE_PASTEBOARD,SMG$PASTE_VIRTUAL_DISPLAY, SMG$CREATE_VIRTUAL_KEYBOARD,SMG$PUT_LINEルーチンも使用しています。
C+ C This routine creates a virtual display and writes ti to the PASTEBOARD. C Data is placed in the virtual display using the routine SMG$PUT_CHARS. C Include the SMG definitions. In particular, we want SMG$M_BORDER, C- INCLUDE '($SMGDEF)' INTEGER SMG$CREATE_VIRTUAL_DISPLAY, SMG$CREATE_PASTEBOARD INTEGER SMG$PASTE_VIRTUAL_DISPLAY, 1 SMG$CREATE_VIRTUAL_KEYBOARD INTEGER SMG$READ_KEYSTROKE, SMG$PUT_LINE INTEGER DISPLAY1, PASTE1, KEYBOARD1, ROWS, COLUMNS, 1 TERM_CHAR CHARACTER*3 TEXT CHARACTER*27 TEXT_OUTPUT C+ C Create the virtual display with a border. C- ROWS = 7 COLUMNS = 60 ISTATUS = SMG$CREATE_VIRTUAL_DISPLAY 1 (ROWS, COLUMNS, DISPLAY1, SMG$M_BORDER) C+ C Create the pasteboard. C- ISTATUS = SMG$CREATE_PASTEBOARD (PASTE1) C+ C Create a virtual keyboard C- ISTATUS = SMG$CREATE_VIRTUAL_KEYBOARD (KEYBOARD1) C+ C Paste the virtual display at row 3, column 9. C- ISTATUS = SMG$PASTE_VIRTUAL_DISPLAY ( DISPLAY1, PASTE1, 3, 9) ISTATUS = SMG$PUT_LINE (DISPLAY1, 1 'Enter the character K after the>> prompt.') ISTATUS = SMG$PUT_LINE (DISPLAY1, 1 'This character will not be echoed as you type it.') ISTATUS = SMG$PUT_LINE (DISPLAY1, 1 'The terminal character equivalent of K is displayed.') ISTATUS = SMG$PUT_LINE (DISPLAY1, ' ') C+ C Read a keystroke from the virtual pasteboard. C- ISTATUS = SMG$READ_KEYSTROKE ( KEYBOARD1, TERM_CHAR, '>>', , 1 DISPLAY1) ISTATUS = SMG$PUT_LINE (DISPLAY1, ' ') C+ C Convert the decimal value of TERM_CHAR to a decimal ASCII text string. C- ISTATUS = OTS$CVT_L_TI( TERM_CHAR, TEXT) TEXT_OUTPUT = ' TERMINAL CHARACTER IS: ' // TEXT C+ C Print the decimal ASCII text string. C- ISTATUS = SMG$PUT_LINE (DISPLAY1, TEXT_OUTPUT) ISTATUS = SMG$PUT_CHARS (DISPLAY1, TEXT, 7, 25) END