.TITLE MENU .IDENT /V1.03/ ; Just for fun I created an SMG program in Macro-32. I actually did ; it by editing the output of the FORTRAN compiler because I wanted ; to see what kind of array descriptor it created. ; B. Z. Lederman $DSCDEF .PSECT USER_DATA, RD, NOWRT, NOEXE PDATA0: .LONG 11 PDATA4: .LONG 1 ITEMS: .ASCII 'CHOICE1' .ASCII 'CHOICE2' .ASCII 'CHOICE3' CHOICE: .BLKB 7 PB: .BLKL 1 KB: .BLKL 1 VD1: .BLKL 1 INDEX: .BLKL 1 MENU_DSC: .WORD 7 ; length of array element .BYTE DSC$K_DTYPE_T ; data type .BYTE DSC$K_CLASS_A ; descriptor class .ADDRESS ITEMS ; address of first actual byte .BYTE 0 ; scale .BYTE 0 ; digits .BYTE ^xE0 ; flags (column-major or FORTRAN, ; multipliers block present, ; bounds block present) .BYTE 1 ; number of dimensions .LONG 21 ; total size of array in bytes ; Multipliers block : .ADDRESS ITEMS-7 ; address of element with zero subscript ; (in this case, there isn't one) .LONG 3 ; addresssing coefficent (multiplier) .LONG 1, 3 ; bounds block (lower and upper) CHOICE_DSC: .WORD 7 ; length of array element .BYTE DSC$K_DTYPE_T ; data type .BYTE DSC$K_CLASS_S ; descriptor class .ADDRESS CHOICE CREATE_PASTEBOARD_LIST: .LONG 1 .ADDRESS PB CREATE_KEYBOARD_LIST: .LONG 1 .ADDRESS KB CREATE_DISPLAY_LIST: .LONG 6 .ADDRESS PDATA0 .ADDRESS PDATA0 .ADDRESS VD1 .ADDRESS PDATA4 .LONG 0 .LONG 0 PASTE_DISPLAY_LIST: .LONG 4 .ADDRESS VD1 .ADDRESS PB .ADDRESS PDATA0 .ADDRESS PDATA0 CREATE_MENU_LIST: .LONG 3 .ADDRESS VD1 .ADDRESS MENU_DSC .ADDRESS PDATA4 SELECT_MENU_LIST: .LONG 11 .ADDRESS KB .ADDRESS VD1 .ADDRESS INDEX .LONG 0 .LONG 0 .LONG 0 .LONG 0 .LONG 0 .ADDRESS CHOICE_DSC .LONG 0 .LONG 0 .PSECT CODE, RD, NOWRT, EXE .ENTRY MENU, ^M CALLG CREATE_PASTEBOARD_LIST, G^SMG$CREATE_PASTEBOARD CALLG CREATE_KEYBOARD_LIST, G^SMG$CREATE_VIRTUAL_KEYBOARD CALLG CREATE_DISPLAY_LIST, G^SMG$CREATE_VIRTUAL_DISPLAY CALLG PASTE_DISPLAY_LIST, G^SMG$PASTE_VIRTUAL_DISPLAY CALLG CREATE_MENU_LIST, G^SMG$CREATE_MENU CALLG SELECT_MENU_LIST, G^SMG$SELECT_FROM_MENU $EXIT_S - CODE = R0 .END MENU