DEFAULT_GLOBAL_BUFFER_COUNT = 200 ; ; Open files provided by sys$input in shared mode and go to sleep ; The main intent is to create global buffers and RMS file statistics ; blocks and then just keep them alive, ; It may also help to make sure no program will open any of the ; targetted fiel in an incompatible sharing mode. ; It sets a process name to make it easier to find and kill it. ; ; Have fun, Hein van den Heuvel, 1997 ; ; 2008, hardcode global buffer count to use, if not set already ; .PSECT code,exe,nowrt .ENTRY START, ^M<> MOVAL FAB,R8 PUSHAQ PROCESS_NAME CALLS #1, G^SYS$SETPRN input_loop: MOVL #FILENAME_SIZE, FILENAME PUSHAL FILENAME PUSHAQ FILENAME_PROMPT PUSHAQ FILENAME CALLS #3, G^LIB$GET_INPUT BLBC R0, wait_a_while CLRL R0 MOVZBL FILENAME, R1 10$: CMPB FILENAME_BUF(R0), #35 ; Space or Comment? BLEQU 20$ INCL R0 CMPL R0, R1 ; End of string? BLSSU 10$ 20$: MOVB R0, FAB$B_FNS(R8) ;Insert the filename size BEQL input_loop ;Empty or all comments? CLRW FAB$W_IFI(R8) ;Walk away from previous open $OPEN FAB=R8 ;Open the input file BLBC R0, open_error ;See you later! TSTW FAB$W_GBC(R8) ;Any global buffer set already? BNEQ 30$ ;Yes, then skip hardcoded default MOVW #DEFAULT_GLOBAL_BUFFER_COUNT, FAB$W_GBC(R8) 30$: $CONNECT RAB=RAB BLBS R0, input_loop ;Any more to connect? open_error: MOVL #FAO_OUTBUF_L, FAO_OUTBUF_D ;init size PUSHAQ FILENAME ;6 File PUSHL FAB$L_STV(R8) ;5 PUSHL R0 ;4 Error code PUSHAL FAO_OUTBUF_D ;3 PUSHAL FAO_OUTBUF_D ;2 PUSHAL FAO_CTRSTR_D ;1 CALLS #5, G^SYS$FAO PUSHAL FAO_OUTBUF_D CALLS #1, g^LIB$PUT_OUTPUT brw input_loop wait_a_while: PUSHL #0 CALLS #1, SYS$HIBER BYE: RET .PSECT data,noexe,wrt FAB: $FAB FAC = GET, - FNA = FILENAME_BUF, - ;Address of filename string SHR = PUT RAB: $RAB FAB = FAB, - ;Associated FAB MBC = 2 ;Minimize buffers PROCESS_NAME: .ASCID "GLOBAL_BUFFERS" FILENAME_PROMPT:.ASCID "Please enter filename:" FILENAME_BUF: .BLKB 80 FILENAME_SIZE = . - FILENAME_BUF FILENAME: .LONG FILENAME_SIZE, FILENAME_BUF ;input buffer descriptor FAO_CTRSTR_A: .ASCII "Error STS = !XL STV = !XL while opening !AS!\" FAO_CTRSTR_L = . - FAO_CTRSTR_A FAO_CTRSTR_D: .LONG FAO_CTRSTR_L, FAO_CTRSTR_A FAO_OUTBUF_L = 200 FAO_OUTBUF_A: .BLKB FAO_OUTBUF_L FAO_OUTBUF_D: .LONG FAO_OUTBUF_L, FAO_OUTBUF_A .END START