.TITLE OPENCLOSE .SUBTITLE ASSEMBLY INITIALIZATION AND COMMENTS ; ; OPEN/CLOSE FILE CODE ; ; $SSDEF $TPADEF $LBRDEF .ENABLE DEBUG .PAGE .SUBTITLE COMMAND FETCH/PARSE/FILE OPEN .SUBTITLE FTECH/PARSE PURE DATA ; ; OPEN CODE-GET COMMAND LINE AND PARSE IT ; .PSECT PURE_DATA,RD,NOWRT,SHR,CON,GBL,NOEXE,REL ; ; PURE DATA AREA FOR GETTING COMMAND AND PARSEING IT ; ; ARGUMENT LISTS HELP_ARG:.LONG 5 .ADDRESS LIB$PUT_OUTPUT .ADDRESS TERMINAL_WIDTH .ADDRESS GET_HELP .ADDRESS HELP_DIR .ADDRESS NULL TERMINAL_WIDTH: .LONG 0 SYNTAX_ERROR: .ASCID /INDEX-E-Command Syntax Error/ GETARG: .LONG 4 .ADDRESS INSTR,PROMPT,LENGTH,FORCE PROMPT: .ASCID /File:/ PROMPT2:.ASCID /File_:/ ;V2.14 CODE_1: .LONG 1 ;V1.22 CODE_2: .LONG 2 ;V1.22 CODE_3: .LONG 3 ;V1.22 CODE_4: .LONG 4 ;V1.22 CODE_5: .LONG 5 ;V1.22 .SUBTITLE FETCH/PARSE IMPURE DATA .PSECT IMPURE_DATA,RD,WRT,NOSHR,CON,GBL,NOEXE,REL,LONG ; ; IMPURE DATA AREA ; ARG_GET_VM: .LONG 2 .ADDRESS ARG1,ARG2 ARG1: .LONG 0 ARG2: .LONG 0 STRBUFF: .BLKB 2048 ;V2.17 COMMAND_BUFFER:: .LONG 0 ;V2.14 .ADDRESS STRBUFF INSTR: .LONG 2048 ;V2.17 .ADDRESS STRBUFF ;V2.14 LENGTH: .LONG 0 ;V2.14 FORCE: .LONG 0 .PAGE .SBTTL FETCH/PARSE MAIN LINE CODE .PSECT CODE,RD,NOWRT,SHR,CON,GBL,EXE,REL ; ; CODE ; NEW_COMMAND: ; CLEAN UP FILE SPEC AND LIB SPEC QUEUES ; 1$: REMQUE @FILE_SPEC_QUEUE,R11 BVS 2$ MOVL #320,ARG1 ;V2.17 MOVL R11,ARG2 CALLG ARG_GET_VM,FREE BRB 1$ 2$: REMQUE @LIB_SPEC_QUEUE,R11 BVS RE_OPEN MOVL #320,ARG1 ;V2.17 MOVL R11,ARG2 CALLG ARG_GET_VM,FREE BRB 2$ .ENTRY OPEN,^M RE_OPEN:CLRL ENTRY_DEPTH ;V1.12 MOVC5 #0,NULL,#0,#32,ENTRY_SYMBOL ;V1.12 MOVC5 #0,NULL,#0,#32,TAG_STRING ;CLEAN UP THE TAG STRING ;V1.16 MOVL #2048,INSTR ;V2.17 MOVAL STRBUFF,INSTR+4 ;V2.14 MOVAL STRBUFF,COMMAND_BUFFER+4 ;V2.14 CLRL COMMAND_BUFFER ;V2.14 CALLG GETARG,G^LIB$GET_FOREIGN ;GET THE COMMAND ;V1.12 CMPL #SS$_NORMAL,R0 ;SEE IF COMMAND IS OK BEQL 10$ JMP 2$ ;NO-QUIT 10$: MOVL LENGTH,COMMAND_BUFFER ;V2.14 PUSHAL TIME_INPUT ;V1.22 PUSHAL CODE_1 ;V1.22 CALLS #2,G^LIB$STAT_TIMER ;V1.22 PUSHAL TIME_INPUT+8 ;V1.22 PUSHAL CODE_2 ;V1.22 CALLS #2,G^LIB$STAT_TIMER ;V1.22 PUSHAL TIME_INPUT+12 ;V1.22 PUSHAL CODE_3 ;V1.22 CALLS #2,G^LIB$STAT_TIMER ;V1.22 PUSHAL TIME_INPUT+16 ;V1.22 PUSHAL CODE_4 ;V1.22 CALLS #2,G^LIB$STAT_TIMER ;V1.22 PUSHAL TIME_INPUT+20 ;V1.22 PUSHAL CODE_5 ;V1.22 CALLS #2,G^LIB$STAT_TIMER ;V1.22 CALLG NULL,G^LIB$INIT_TIMER ;V1.22 ; ; MOVE COMMAND STRING LOCATION AND SIZE DATA FOR PARSEING ; MOVL LENGTH,PARSE_PARAMETER_BLOCK+TPA$L_STRINGCNT MOVAL STRBUFF,PARSE_PARAMETER_BLOCK+TPA$L_STRINGPTR CLRQ FLAG_WORD ;V1.11 MOVAL FILE_SPEC_QUEUE,FILE_SPEC_QUEUE MOVL FILE_SPEC_QUEUE,FILE_SPEC_QUEUE+4 MOVAL LIB_SPEC_QUEUE,LIB_SPEC_QUEUE MOVL LIB_SPEC_QUEUE,LIB_SPEC_QUEUE+4 CLRL REORDER_SEQUENCE ;V2.11 CLRL REORDER_SEQUENCE+4 ;V2.11 CLRL REORDER_SEQUENCE+8 ;V2.11 CLRL REORDER_SEQUENCE+12 ;V2.11 CLRL REORDER_SEQUENCE+16 ;V2.11 CLRL INDENT_LEVEL ;V2.10 4010$: CLRL CONTINUE_FLAG ;V2.14 ; ; SET UP CALL TO SYSTEM COMMAND PARSEING ROUTINE ; PUSHAL KEY_WORD PUSHAL COMMAND_STATE PUSHAL PARSE_PARAMETER_BLOCK CALLS #3,G^LIB$TPARSE BLBS R0,5$ ;CHECK FOR ERROR PUSHAL SYNTAX_ERROR ;OUTPUT ERROR MESSAGE CALLS #1,G^LIB$PUT_OUTPUT ;AND RETRY SUBL3 #10,TPA$L_STRINGPTR+PARSE_PARAMETER_BLOCK,DESCRIPTER+4 ;V2.10 MOVL DESCRIPTER+4,R0 ;V2.10 MOVL #10,DESCRIPTER ;V2.10 CMPL R0,#STRBUFF ;V2.10 BGEQU 1010$ ;V2.10 MOVAL STRBUFF,DESCRIPTER+4 ;V2.10 SUBL3 #STRBUFF,TPA$L_STRINGPTR+PARSE_PARAMETER_BLOCK,DESCRIPTER ;V2.10 1010$: CMPL #10,TPA$L_STRINGCNT+PARSE_PARAMETER_BLOCK ;V2.10 BLEQ 2010$ ;V2.10 ADDL2 TPA$L_STRINGCNT+PARSE_PARAMETER_BLOCK,DESCRIPTER ;V2.10 BRB 3010$ ;V2.10 2010$: ADDL2 #10,DESCRIPTER ;V2.10 3010$: PUSHAL DESCRIPTER ;V2.10 CALLS #1,G^LIB$PUT_OUTPUT ;V2.10 JMP NEW_COMMAND 5$: ; CHECK FOR CONTINUATION LINE ;V2.14 TSTL CONTINUE_FLAG ;V2.14 BNEQ 3005$ ;V2.14 BRW 1005$ ;V2.14 3005$: SUBL3 #STRBUFF,TPA$L_STRINGPTR+PARSE_PARAMETER_BLOCK,COMMAND_BUFFER ;V2.14 SUBL3 #1,TPA$L_STRINGPTR+PARSE_PARAMETER_BLOCK,R0 ;V2.14 MOVB #^A/ /,(R0) ;V2.14 MOVL TPA$L_STRINGPTR+PARSE_PARAMETER_BLOCK,INSTR+4 ;V2.14 SUBL3 COMMAND_BUFFER,#2048,INSTR ;V2.17 BLEQ 2005$ ;V2.14 PUSHAL FORCE ;V2.14 PUSHAL LENGTH ;V2.14 PUSHAL PROMPT2 ;V2.14 PUSHAL INSTR ;V2.14 CALLS #4,G^LIB$GET_FOREIGN ;V2.14 CMPL #SS$_NORMAL,R0 ;V2.14 BEQL 4005$ ;V2.14 BRW 2$ ;V2.14 4005$: MOVL LENGTH,TPA$L_STRINGCNT+PARSE_PARAMETER_BLOCK ;V2.14 ADDL2 LENGTH,COMMAND_BUFFER ;V2.14 BRW 4010$ ;V2.14 2005$: ;LINE IS TO LONG ;V2.14 MOVL #LIB$_INPSTRTRU,R0 ;V2.14 BRW 2$ ;V2.14 ; ; PARSE COMPLETE-CHECK FOR HELP ; 1005$: BITL #HELP_FLAG,FLAG_WORD ;V2.14 BEQL 4$ ; ; CALL FOR HELP HERE ; CALLG HELP_ARG,G^LBR$OUTPUT_HELP BRW NEW_COMMAND ;GO BACK FOR ANOTHER COMMAND 4$: TSTL ENTRY_SAVED_FLAG ;SEE IF SAVED ENTRY FROM LAST PASS ;V1.12 BEQL 104$ ;NO ;V1.12 BITL #DO_ENTRY_FLAG,FLAG_WORD;YES-WAS A NEW DO ENTRY REQ ;V1.12 BNEQ 104$ ;YES ;V1.12 CALLG NULL,CLEAR_FLOW_TABLE ;CLEAN UP ENTRY POINT SYMBOL TABLE ;V1.12 104$: TSTL SUPER_SAVED_FLAG ;SEE IF SUPER SAVED FROM PREVIOUS RUN ;V1.32 BEQL 204$ ;NO ;V1.32 BITL #DO_SUPER_FLAG,FLAG_WORD;YES-WAS A NEW DO SUPER REQ ;V1.32 BNEQ 204$ ;YES ;V1.32 CALLG NULL,CLOSE_SCRATCH ;CLEAN UP ;V1.32 CALLG NULL,OPEN_SCRATCH ;V1.32 CLRL SUPER_SAVED_FLAG ;V1.32 204$: TSTL INDEX_SAVED_FLAG ;V2.13 BEQL 304$ ;V2.13 BITL #,FLAG_WORD ;V2.13 BEQL 304$ ;V2.13 CALLG NULL,CLEAR_SYMBOL_TABLE ;V2.13 CLRL INDEX_SAVED_FLAG ;V2.13 304$: JMP OPEN_FILES ;GO OPEN FILES FOR INDEX ;V2.13 2$: CMPL #RMS$_EOF,R0 BNEQ 3$ MOVL #1,R0 3$: $EXIT_S R0 .PAGE .SUBTITLE PARSING ROUTINE IMPURE WORK AREA .PSECT IMPURE_DATA,RD,WRT,NOSHR,CON,GBL,NOEXE,REL,LONG ; ; PARSE TABLE AREAS ; ; ; PARAMETER BLOCK ; PARSE_PARAMETER_BLOCK: .LONG TPA$K_COUNT0 .LONG TPA$M_ABBREV!TPA$M_BLANKS .REPT .BYTE 0 .ENDR DESCRIPTER: .LONG 0,0 ;V2.10 CONTINUE_FLAG: .LONG 0 ;V2.14 .PAGE .SUBTITLE PARSING ROTUINES STATE TABLES .PSECT PURE_DATA,RD,NOWRT,SHR,CON,GBL,NOEXE,REL ; STATE TABLE ; $INIT_STATE COMMAND_STATE,KEY_WORD $STATE START $TRAN TPA$_BLANK,START $TRAN '/',OPTION $TRAN '+',START $TRAN <','>,START $TRAN '!',TPA$_EXIT ;V2.14 $TRAN '-',TPA$_EXIT,,1,CONTINUE_FLAG ;V2.14 $TRAN TPA$_EOS,TPA$_EXIT $TRAN TPA$_LAMBDA,GET_DEFAULT_SPEC,,INPUT_FLAG,FLAG_WORD $STATE OPTION $TRAN 'GLOBAL',START, CHECK_CONFLICT,GLOBAL_FLAG,FLAG_WORD,- LOCAL_FLAG!GLOBAL_FLAG $TRAN 'LOCAL', START, CHECK_CONFLICT,LOCAL_FLAG, FLAG_WORD,- LOCAL_FLAG!GLOBAL_FLAG $TRAN 'MERGE', START, CHECK_CONFLICT,MERGE_FLAG, FLAG_WORD,- MERGE_FLAG $TRAN 'APPEND', START, CHECK_CONFLICT,MERGE_FLAG, FLAG_WORD,- ;V1.22 MERGE_FLAG ;V1.22 $TRAN 'OUTPUT',GET_OUT_SPEC,CHECK_CONFLICT,OUTPUT_FLAG,FLAG_WORD,- OUTPUT_FLAG $TRAN 'LIST', GET_OUT_SPEC,CHECK_CONFLICT,OUTPUT_FLAG,FLAG_WORD,- OUTPUT_FLAG $TRAN 'SPOOL',START, CHECK_CONFLICT,SPOOL_FLAG,FLAG_WORD,- SPOOL_FLAG ;V1.30 $TRAN 'PRINT',START, CHECK_CONFLICT,SPOOL_FLAG,FLAG_WORD,- ;V1.15 SPOOL_FLAG ;V1.30 $TRAN 'NOSOURCE',START, CHECK_CONFLICT,NO_SOURCE_FLAG,FLAG_WORD,- NO_SOURCE_FLAG $TRAN 'STATISTICS',START, CHECK_CONFLICT,STATISTICS_FLAG,FLAG_WORD,- STATISTICS_FLAG!GET_ENTRY_FLAG ;V1.4 $TRAN 'GET_ENTRY',START, CHECK_CONFLICT,GET_ENTRY_FLAG,FLAG_WORD,- ;**-1 GET_ENTRY_FLAG $TRAN 'USED',START, CHECK_CONFLICT,USED_FLAG,FLAG_WORD,- USED_FLAG!UNUSED_FLAG $TRAN 'UNUSED',START, CHECK_CONFLICT,UNUSED_FLAG,FLAG_WORD,- UNUSED_FLAG!USED_FLAG $TRAN 'DO_ENTRY',START, CHECK_CONFLICT,DO_ENTRY_FLAG,FLAG_WORD,- DO_ENTRY_FLAG $TRAN 'HELP',CHECK_HELP, CHECK_CONFLICT,HELP_FLAG,FLAG_WORD,- HELP_FLAG $TRAN 'DO_SUPER',START, CHECK_CONFLICT,DO_SUPER_FLAG,FLAG_WORD,- DO_SUPER_FLAG $TRAN 'UNCHANGED',START, CHECK_CONFLICT,UNCHANGED_FLAG,FLAG_WORD,- CHANGED_FLAG!UNCHANGED_FLAG $TRAN 'CHANGED',START, CHECK_CONFLICT,CHANGED_FLAG,FLAG_WORD,- UNCHANGED_FLAG!CHANGED_FLAG $TRAN 'WIDE',START, CHECK_CONFLICT,WIDE_FLAG,FLAG_WORD,- WIDE_FLAG!NARROW_FLAG $TRAN 'NARROW',START, CHECK_CONFLICT,NARROW_FLAG,FLAG_WORD,- NARROW_FLAG!WIDE_FLAG $TRAN 'PREPROCESSOR',START, CHECK_CONFLICT,PREPROCESSOR_FLAG,FLAG_WORD,- PREPROCESSOR_FLAG $TRAN 'CALLING_TREE',START, CHECK_CONFLICT,CALLING_TREE_FLAG,FLAG_WORD,- CALLING_TREE_FLAG $TRAN 'CALLED_BY_TREE',START,CHECK_CONFLICT,CALLED_BY_TREE_FLAG,FLAG_WORD,- CALLED_BY_TREE_FLAG $TRAN 'GET_SUPER',START, CHECK_CONFLICT,GET_SUPER_FLAG,FLAG_WORD,- GET_SUPER_FLAG $TRAN 'DEBUG',START, CHECK_CONFLICT,DEBUG_FLAG,FLAG_WORD,DEBUG_FLAG $TRAN 'D_LINES',START, CHECK_CONFLICT,DEBUG_FLAG,FLAG_WORD,DEBUG_FLAG ;V2.10 $TRAN 'LIBRARY',START,MOVE_SPEC_TO_LIB $TRAN 'LOG',START, CHECK_CONFLICT,LOG_FLAG,FLAG_WORD,LOG_FLAG $TRAN 'NOLIBRARY_FUNCTIONS',START,CHECK_CONFLICT,NOLIB_FLAG,FLAG_WORD,- NOLIB_FLAG $TRAN 'IMPORT',START, CHECK_CONFLICT,IMPORT_FLAG,FLAG_WORD,- ;V1.15 IMPORT_FLAG!EXPORT_FLAG ;V1.15 $TRAN 'EXPORT',START, CHECK_CONFLICT,EXPORT_FLAG,FLAG_WORD,- ;V1.15 IMPORT_FLAG!EXPORT_FLAG ;V1.15 $TRAN 'COMMENT',CHECK_COMMENT_START_1 ;V1.3 $TRAN 'DELETE',START, CHECK_CONFLICT,DELETE_FLAG,FLAG_WORD,DELETE_FLAG ;V1.6 $TRAN 'COMMON_BLOCKS',START,CHECK_CONFLICT,COMMON_FLAG,FLAG_WORD,COMMON_FLAG ;V1.11 $TRAN 'SAVE_ENTRY',START,CHECK_CONFLICT_2,FLOW_SAVE_FLAG,FLAG_WORD+4,- ;V1.12 FLOW_SAVE_FLAG ;V1.12 $TRAN 'SYMBOL',CHECK_SYMBOL_1,CHECK_CONFLICT_2,FLOW_SYMBOL_FLAG,FLAG_WORD+4,- ;V1.12 FLOW_SYMBOL_FLAG ;V1.12 $TRAN 'DEPTH',CHECK_DEPTH_1,CHECK_CONFLICT_2,FLOW_DEPTH_FLAG,FLAG_WORD+4,- ;V1.12 FLOW_DEPTH_FLAG ;V1.12 $TRAN 'NOENTRY_TABLE',START,CHECK_CONFLICT_2,NOENTRY_TABLE_FLAG,FLAG_WORD+4- ;V1.12 ,NOENTRY_TABLE_FLAG ;V1.12 $TRAN 'TRANSFER_ENTRY',START,CHECK_CONFLICT_2,TRANSFER_ENTRY_FLAG,FLAG_WORD+4-;V1.13 ,TRANSFER_ENTRY_FLAG ;V1.13 $TRAN 'TAG',TAG_LOAD_1,CHECK_CONFLICT_2,TAG_FLAG,FLAG_WORD+4,TAG_FLAG ;V1.16 $TRAN 'REVERSE',START,CHECK_CONFLICT_2,REVERSE_FLAG,FLAG_WORD+4,- ;V1.18 REVERSE_FLAG!REORDER_FLAG ;V1.19 $TRAN 'REORDER',REORDER_1,CHECK_CONFLICT_2,REORDER_FLAG,FLAG_WORD+4,- ;V1.19 REVERSE_FLAG!REORDER_FLAG ;V1.19 $TRAN 'ORDER',REORDER_1,CHECK_CONFLICT_2,REORDER_FLAG,FLAG_WORD+4,- ;V2.03 REVERSE_FLAG!REORDER_FLAG ;V2.03 $TRAN 'NOINDEX',START,CHECK_CONFLICT_2,NOINDEX_FLAG,FLAG_WORD+4,NOINDEX_FLAG ;V1.20 $TRAN 'FILE_NAME',START,CHECK_CONFLICT_2,FILE_NAME_FLAG,FLAG_WORD+4,- ;V1.21 FILE_NAME_FLAG ;V1.21 $TRAN 'SAVE_SUPER',START,CHECK_CONFLICT,SUPER_SAVE_FLAG,FLAG_WORD,- ;V1.32 SUPER_SAVE_FLAG ;V1.32 $TRAN 'FLOW_CHART',FLOW_LIMIT,CHECK_CONFLICT,CHART_FLAG,FLAG_WORD,CHART_FLAG ;V2.06 $TRAN 'CHART',FLOW_LIMIT,CHECK_CONFLICT,CHART_FLAG,FLAG_WORD,CHART_FLAG ;V2.06 $TRAN 'STORAGE',START,CHECK_CONFLICT_2,STORAGE_FLAG,FLAG_WORD+4,STORAGE_FLAG ;V2.03 $TRAN 'STORE',START,CHECK_CONFLICT_2,STORAGE_FLAG,FLAG_WORD+4,STORAGE_FLAG ;V2.03 $TRAN 'ARGUMENT',START,CHECK_CONFLICT,ARGUMENT_FLAG,FLAG_WORD,ARGUMENT_FLAG ;V2.09 $TRAN 'INDENT',INDENT_1 ;V2.10 $TRAN 'SAVE_INDEX',START,CHECK_CONFLICT_2,INDEX_SAVE_FLAG,FLAG_WORD+4,- ;V2.13 INDEX_SAVE_FLAG ;V2.13 $TRAN TPA$_LAMBDA,TPA$_FAIL ;V1.3 $STATE INDENT_1 ;V2.10 $TRAN '=',INDENT_2 ;V2.10 $TRAN ':',INDENT_2 ;V2.14 $TRAN TPA$_LAMBDA,TPA$_FAIL ;V2.10 $STATE INDENT_2 ;V2.10 $TRAN TPA$_DECIMAL,START,,,INDENT_LEVEL ;V2.10 $TRAN TPA$_LAMBDA,TPA$_FAIL ;V2.10 $STATE FLOW_LIMIT ;V2.06 $TRAN '=',FLOW_LIMIT_1 ;V2.06 $TRAN ':',FLOW_LIMIT_1 ;V2.14 $TRAN TPA$_LAMBDA,START ;V2.06 $STATE FLOW_LIMIT_1 ;V2.06 $TRAN 'NOMOVE',FLOW_LIMIT_2,CHECK_CONFLICT_2,NO_MOVE_FLAG,FLAG_WORD+4,- ;V2.06 NO_MOVE_FLAG ;V2.06 $TRAN 'NOCONNECTOR',FLOW_LIMIT_2,CHECK_CONFLICT_2,NO_CONNECTOR_FLAG,- ;V2.06 FLAG_WORD+4,NO_CONNECTOR_FLAG ;V2.06 $TRAN TPA$_LAMBDA,TPA$_FAIL ;V2.06 $STATE FLOW_LIMIT_2 ;V2.06 $TRAN ':',FLOW_LIMIT_1 ;V2.06 $TRAN '=',FLOW_LIMIT_1 ;V2.14 $TRAN TPA$_LAMBDA,START ;V2.06 $STATE REORDER_1 ;V1.19 $TRAN '=',REORDER_2 ;V1.19 $TRAN ':',REORDER_2 ;V2.14 $TRAN TPA$_LAMBDA,TPA$_FAIL ;V1.19 $STATE REORDER_2 ;V1.19 $TRAN 'NAME',REORDER_3A,CHECK_ORDER,,REORDER_SEQUENCE,- ;V2.11 ;V2.11 $TRAN 'VARIABLE',REORDER_3A,CHECK_ORDER,,REORDER_SEQUENCE,- ;V2.12 ;V2.12 $TRAN 'COMMON',REORDER_3A,CHECK_ORDER,,REORDER_SEQUENCE,- ;V2.12 ;V2.12 $TRAN 'NAME',REORDER_3A,CHECK_ORDER,,REORDER_SEQUENCE,- ;V2.11 ;V2.11 $TRAN 'MODULE',REORDER_3A,CHECK_ORDER,REORDER_MODULE,REORDER_SEQUENCE,- ;V2.09 REORDER_MODULE ;V2.09 $TRAN 'TAG',REORDER_3A,CHECK_ORDER,REORDER_TAG,REORDER_SEQUENCE,- ;V2.09 REORDER_TAG ;V2.09 $TRAN 'STORAGE',REORDER_3A,CHECK_ORDER,REORDER_STORE,REORDER_SEQUENCE,- ;V2.09 REORDER_STORE ;V2.09 $TRAN 'STORE',REORDER_3A,CHECK_ORDER,REORDER_STORE,REORDER_SEQUENCE,- ;V2.09 REORDER_STORE ;V2.09 $TRAN 'ARGUMENT',REORDER_3A,CHECK_ORDER,REORDER_ARGUMENT,REORDER_SEQUENCE,- ;V2.09 REORDER_ARGUMENT ;V2.09 $TRAN TPA$_LAMBDA,TPA$_FAIL ;V1.19 $STATE REORDER_3A ;V2.09 $TRAN ':',REORDER_3 ;V2.09 $TRAN '=',REORDER_3 ;V2.14 $TRAN TPA$_LAMBDA,TPA$_FAIL ;V2.09 $STATE REORDER_3 ;V2.09 $TRAN 'NAME',REORDER_4A,CHECK_ORDER,,REORDER_SEQUENCE+4,- ;V2.11 ;V2.11 $TRAN 'VARIABLE',REORDER_3A,CHECK_ORDER,,REORDER_SEQUENCE+4,- ;V2.12 ;V2.12 $TRAN 'COMMON',REORDER_3A,CHECK_ORDER,,REORDER_SEQUENCE+4,- ;V2.12 ;V2.12 $TRAN 'MODULE',REORDER_4A,CHECK_ORDER,REORDER_MODULE,REORDER_SEQUENCE+4,- ;V2.09 REORDER_MODULE ;V2.09 $TRAN 'TAG',REORDER_4A,CHECK_ORDER,REORDER_TAG,REORDER_SEQUENCE+4,- ;V2.09 REORDER_TAG ;V2.09 $TRAN 'STORAGE',REORDER_4A,CHECK_ORDER,REORDER_STORE,REORDER_SEQUENCE+4,- ;V2.09 REORDER_STORE ;V2.09 $TRAN 'STORE',REORDER_4A,CHECK_ORDER,REORDER_STORE,REORDER_SEQUENCE+4,- ;V2.09 REORDER_STORE ;V2.09 $TRAN 'ARGUMENT',REORDER_4A,CHECK_ORDER,REORDER_ARGUMENT,REORDER_SEQUENCE+4,- ;V2.11 REORDER_ARGUMENT ;V2.09 $TRAN TPA$_LAMBDA,TPA$_FAIL ;V2.09 $STATE REORDER_4A ;V2.09 $TRAN ':',REORDER_4 ;V2.09 $TRAN '=',REORDER_4 ;V2.14 $TRAN TPA$_LAMBDA,TPA$_FAIL ;V2.09 $STATE REORDER_4 ;V2.09 $TRAN 'NAME',REORDER_5A,CHECK_ORDER,,REORDER_SEQUENCE+8,- ;V2.11 ;V2.11 $TRAN 'VARIABLE',REORDER_3A,CHECK_ORDER,,REORDER_SEQUENCE+8,- ;V2.12 ;V2.12 $TRAN 'COMMON',REORDER_3A,CHECK_ORDER,,REORDER_SEQUENCE+8,- ;V2.12 ;V2.12 $TRAN 'MODULE',REORDER_5A,CHECK_ORDER,REORDER_MODULE,REORDER_SEQUENCE+8,- ;V2.09 REORDER_MODULE ;V2.09 $TRAN 'TAG',REORDER_5A,CHECK_ORDER,REORDER_TAG,REORDER_SEQUENCE+8,- ;V2.09 REORDER_TAG ;V2.09 $TRAN 'STORAGE',REORDER_5A,CHECK_ORDER,REORDER_STORE,REORDER_SEQUENCE+8,- ;V2.09 REORDER_STORE ;V2.09 $TRAN 'STORE',REORDER_5A,CHECK_ORDER,REORDER_STORE,REORDER_SEQUENCE+8,- ;V2.09 REORDER_STORE ;V2.09 $TRAN 'ARGUMENT',REORDER_5A,CHECK_ORDER,REORDER_ARGUMENT,REORDER_SEQUENCE+8,- ;V2.11 REORDER_ARGUMENT ;V2.09 $TRAN TPA$_LAMBDA,TPA$_FAIL ;V2.09 $STATE REORDER_5A ;V2.09 $TRAN ':',REORDER_5 ;V2.09 $TRAN '=',REORDER_5 ;V2.14 $TRAN TPA$_LAMBDA,TPA$_FAIL ;V2.09 $STATE REORDER_5 ;V2.09 $TRAN 'NAME',REORDER_6,CHECK_ORDER,,REORDER_SEQUENCE+12,- ;V2.11 ;V2.11 $TRAN 'VARIABLE',REORDER_3A,CHECK_ORDER,,REORDER_SEQUENCE+12,-;V2.12 ;V2.12 $TRAN 'COMMON',REORDER_3A,CHECK_ORDER,,REORDER_SEQUENCE+12,- ;V2.12 ;V2.12 $TRAN 'MODULE',REORDER_6,CHECK_ORDER,REORDER_MODULE,REORDER_SEQUENCE+12,- ;V2.09 REORDER_MODULE ;V2.09 $TRAN 'TAG',REORDER_6,CHECK_ORDER,REORDER_TAG,REORDER_SEQUENCE+12,- ;V2.09 REORDER_TAG ;V2.09 $TRAN 'STORAGE',REORDER_6,CHECK_ORDER,REORDER_STORE,REORDER_SEQUENCE+12,- ;V2.09 REORDER_STORE ;V2.09 $TRAN 'STORE',REORDER_6,CHECK_ORDER,REORDER_STORE,REORDER_SEQUENCE+12,- ;V2.09 REORDER_STORE ;V2.09 $TRAN 'ARGUMENT',REORDER_6,CHECK_ORDER,REORDER_ARGUMENT,REORDER_SEQUENCE+12,- ;V2.11 REORDER_ARGUMENT ;V2.09 $TRAN TPA$_LAMBDA,TPA$_FAIL ;V2.09 $STATE REORDER_6 ;V2.09 $TRAN TPA$_LAMBDA,START,FINAL_ORDER ;V2.09 $STATE TAG_LOAD_1 ;V1.16 $TRAN '=',TAG_LOAD_2 ;V1.16 $TRAN ':',TAG_LOAD_2 ;V2.14 $TRAN TPA$_LAMBDA,TPA$_FAIL ;V1.16 $STATE TAG_LOAD_2 ;V1.16 $TRAN '"',TAG_LOAD_3 ;V1.16 $TRAN TPA$_LAMBDA,TPA$_FAIL ;V1.16 $STATE TAG_LOAD_3 ;V1.16 $TRAN '"',START ;V1.16 $TRAN TPA$_EOS,TPA$_FAIL ;V1.16 $TRAN TPA$_ANY,TAG_LOAD_3,MOVE_TAG_CHR ;V1.16 $STATE CHECK_SYMBOL_1 ;V1.12 $TRAN '=',CHECK_SYMBOL_2 ;V1.12 $TRAN ':',CHECK_SYMBOL_2 ;V2.14 $TRAN TPA$_LAMBDA,TPA$_FAIL ;V1.12 $STATE CHECK_SYMBOL_2 ;V1.12 $TRAN '/',OPTION ;V1.12 $TRAN TPA$_BLANK,START ;V1.12 $TRAN '+',START ;V1.12 $TRAN <','>,START ;V1.12 $TRAN '!',TPA$_EXIT ;V2.14 $TRAN '-',TPA$_EXIT,,1,CONTINUE_FLAG ;V2.14 $TRAN TPA$_EOS,TPA$_EXIT ;V1.12 $TRAN TPA$_ALPHA,CHECK_SYMBOL_2,LOAD_ENTRY_SYMBOL ;V1.12 $TRAN TPA$_DIGIT,CHECK_SYMBOL_2,LOAD_ENTRY_SYMBOL ;V1.12 $TRAN <'$'>,CHECK_SYMBOL_2,LOAD_ENTRY_SYMBOL ;V1.12 $TRAN <'_'>,CHECK_SYMBOL_2,LOAD_ENTRY_SYMBOL ;V1.12 $TRAN TPA$_LAMBDA,TPA$_FAIL ;V1.12 $STATE CHECK_DEPTH_1 ;V1.12 $TRAN '=',CHECK_DEPTH_2 ;V1.12 $TRAN ':',CHECK_DEPTH_2 ;V2.14 $TRAN TPA$_LAMBDA,TPA$_FAIL ;V1.12 $STATE CHECK_DEPTH_2 ;V1.12 $TRAN TPA$_DECIMAL,START,,,ENTRY_DEPTH ;V1.12 $TRAN TPA$_LAMBDA,TPA$_FAIL ;V1.12 $STATE CHECK_COMMENT_START_1 ;V1.3 $TRAN '=',CHECK_COMMENT_START_2 ;V1.3 $TRAN ':',CHECK_COMMENT_START_2 ;V2.14 $TRAN TPA$_LAMBDA,TPA$_FAIL ;V1.3 $STATE CHECK_COMMENT_START_2 ;V1.3 $TRAN '"',CHECK_COMMENT_CONTENTS ;V1.3 $TRAN TPA$_LAMBDA,TPA$_FAIL ;V1.3 $STATE CHECK_COMMENT_CONTENTS ;V1.3 $TRAN '"',START ;V1.3 $TRAN TPA$_EOS,TPA$_FAIL ;V1.3 $TRAN TPA$_ANY,CHECK_COMMENT_CONTENTS ;V1.3 $STATE CHECK_HELP $TRAN TPA$_LAMBDA,,LOAD_HELP_ADDRESS $STATE $TRAN '=',LOAD_HELP_NEXT_CHECK $TRAN ':',LOAD_HELP_NEXT_CHECK ;V2.14 $TRAN TPA$_LAMBDA,START $STATE LOAD_HELP_NEXT_CHECK $TRAN '(',LOAD_MANY_HELP $TRAN TPA$_LAMBDA,LOAD_FILE_NAME $STATE GET_OUT_SPEC $TRAN '=' $TRAN ':' ;V2.14 $TRAN TPA$_LAMBDA,TPA$_FAIL $STATE $TRAN TPA$_LAMBDA,LOAD_FILE_NAME,LOAD_OUTPUT_ADDRESS $STATE GET_DEFAULT_SPEC $TRAN TPA$_LAMBDA,LOAD_FILE_NAME,LOAD_DEFAULT_ADDRESS $STATE LOAD_FILE_NAME $TRAN TPA$_BLANK,START $TRAN '!',TPA$_EXIT ;V2.14 $TRAN '-',TPA$_EXIT,,1,CONTINUE_FLAG ;V2.14 $TRAN TPA$_EOS,TPA$_EXIT $TRAN '/',OPTION $TRAN '+',START $TRAN <','>,START $TRAN TPA$_ANY,LOAD_FILE_NAME,LOAD_CHAR $STATE LOAD_MANY_HELP $TRAN ')',START $TRAN <','>,LOAD_MANY_HELP,LOAD_BLANK $TRAN TPA$_BLANK,TPA$_FAIL $TRAN TPA$_EOS,TPA$_FAIL $TRAN TPA$_ANY,LOAD_MANY_HELP,LOAD_CHAR $END_STATE .PAGE .SUBTITLE PARSING ACTION ROUTINES .PSECT CODE,RD,NOWRT,SHR,CON,GBL,EXE,REL ; ; ACTION ROUTINES ; ; CHECK TO SEE IF NO CONFLICTING OPTIONS ; .ENTRY CHECK_CONFLICT,^M<> BITL TPA$L_PARAM(AP),FLAG_WORD BEQL 1$ CLRL R0 1$: RET .ENTRY CHECK_CONFLICT_2,^M<> ;V1.12 BITL TPA$L_PARAM(AP),FLAG_WORD+4 ;V1.12 BEQL 1$ ;V1.12 CLRL R0 ;V1.12 1$: RET ;V1.12 ; ;V2.09 ; REORDER SWITCH-CHECK TO SEE IF ARGUMENT ALREADY USED ;V2.09 ; ;V2.09 .ENTRY CHECK_ORDER,^M<> ;V2.09 CMPL TPA$L_PARAM(AP),REORDER_SEQUENCE ;V2.09 BEQL 1$ ;V2.09 CMPL TPA$L_PARAM(AP),REORDER_SEQUENCE+4 ;V2.09 BEQL 1$ ;V2.09 CMPL TPA$L_PARAM(AP),REORDER_SEQUENCE+8 ;V2.09 BNEQ 2$ ;V2.09 1$: CLRL R0 ;V2.09 2$: RET ;V2.09 ; ;V2.09 ; REORDER SWITCH-FINAL ARGUMENT ;V2.09 ; ;V2.09 .ENTRY FINAL_ORDER,^M<> ;V2.09 CMPL #REORDER_NAME+1,REORDER_SEQUENCE ;V2.11 BEQL 1$ ;V2.09 CMPL #REORDER_NAME+1,REORDER_SEQUENCE+4 ;V2.11 BEQL 1$ ;V2.09 CMPL #REORDER_NAME+1,REORDER_SEQUENCE+8 ;V2.11 BEQL 1$ ;V2.09 CMPL #REORDER_NAME+1,REORDER_SEQUENCE+12 ;V2.11 BEQL 1$ ;V2.09 MOVL #REORDER_NAME,REORDER_SEQUENCE+16 ;V2.09 BRW 5$ ;V2.11 1$: CMPL #REORDER_MODULE,REORDER_SEQUENCE ;V2.09 BEQL 2$ ;V2.09 CMPL #REORDER_MODULE,REORDER_SEQUENCE+4 ;V2.09 BEQL 2$ ;V2.09 CMPL #REORDER_MODULE,REORDER_SEQUENCE+8 ;V2.09 BEQL 2$ ;V2.09 CMPL #REORDER_MODULE,REORDER_SEQUENCE+12 ;V2.09 BEQL 2$ ;V2.09 MOVL #REORDER_MODULE,REORDER_SEQUENCE+16 ;V2.09 BRW 5$ ;V2.11 2$: CMPL #REORDER_TAG,REORDER_SEQUENCE ;V2.09 BEQL 3$ ;V2.09 CMPL #REORDER_TAG,REORDER_SEQUENCE+4 ;V2.09 BEQL 3$ ;V2.09 CMPL #REORDER_TAG,REORDER_SEQUENCE+8 ;V2.09 BEQL 3$ ;V2.09 CMPL #REORDER_TAG,REORDER_SEQUENCE+12 ;V2.09 BEQL 3$ ;V2.09 MOVL #REORDER_TAG,REORDER_SEQUENCE+16 ;V2.09 BRW 5$ ;V2.11 3$: CMPL #REORDER_STORE,REORDER_SEQUENCE ;V2.09 BEQL 4$ ;V2.09 CMPL #REORDER_STORE,REORDER_SEQUENCE+4 ;V2.09 BEQL 4$ ;V2.09 CMPL #REORDER_STORE,REORDER_SEQUENCE+8 ;V2.09 BEQL 4$ ;V2.09 CMPL #REORDER_STORE,REORDER_SEQUENCE+12 ;V2.09 BEQL 4$ ;V2.09 MOVL #REORDER_STORE,REORDER_SEQUENCE+16 ;V2.09 BRW 5$ ;V2.11 4$: MOVL #REORDER_ARGUMENT,REORDER_SEQUENCE+16 ;V2.09 5$: BICL #1,REORDER_SEQUENCE ;V2.11 BICL #1,REORDER_SEQUENCE+4 ;V2.11 BICL #1,REORDER_SEQUENCE+8 ;V2.11 BICL #1,REORDER_SEQUENCE+12 ;V2.11 BICL #1,REORDER_SEQUENCE+16 ;V2.11 RET ;V2.09 ; ;V1.16 ; LOAD A CHARACTER INTO TAG FIELD AND INC COUNTER ;V1.16 ; ;V1.16 .ENTRY MOVE_TAG_CHR,^M<> ;V1.16 CMPB #31,TAG_STRING ;SEE IF TAG IS FULL ;V1.16 BGTR 2$ ;NOT YET ;V1.16 MOVL #LIB$_SYNTAXERR,R0 ;V1.16 RET ;V1.16 2$: INCB TAG_STRING ;BUMP THE COUNTER ;V1.16 CVTBL TAG_STRING,R0 ;GET NEXT CHR BYTE LOC ;V1.16 MOVB TPA$B_CHAR(AP),TAG_STRING(R0) ;LOAD CHAR ;V1.16 MOVL #1,R0 ;OK COMPLETION ;V1.16 RET ;V1.16 ; ; SET UP POINTER FOR LOADING DEFAULT FILE SPEC ; .ENTRY LOAD_DEFAULT_ADDRESS,^M<> MOVL #320,ARG1 ;ALLOCATE ELEMENT FOR OUTPUT ;V2.17 CALLG ARG_GET_VM,ALLOCATE ;SPEC QUEUE INSQUE (R0),@FILE_SPEC_QUEUE+4 ;INSERT IN END OF QUEUE ADDL3 #12,R0,STORE_POINTER ADDL3 #8,R0,COUNT_POINTER CLRL @COUNT_POINTER MOVL #1,R0 RET ; ;V1.12 ; LOAD SYMBOL INTO ENTRY SYMBOL ;V1.12 ; ;V1.12 .ENTRY LOAD_ENTRY_SYMBOL,^M<> ;V1.12 INCB ENTRY_SYMBOL ;V1.12 CVTBL ENTRY_SYMBOL,R0 ;V1.12 CMPL #32,R0 ;V1.12 BLEQ 1$ ;V1.12 MOVB @TPA$L_TOKENPTR(AP),R1 ;V1.12 CMPB #^A/a/,R1 ;V1.12 BGTR 2$ ;V1.12 BICB2 #^X20,R1 ;V1.12 2$: MOVB R1,L^ENTRY_SYMBOL(R0) ;V1.31 MOVL #1,R0 ;V1.12 RET ;V1.12 1$: MOVL #LIB$_SYNTAXERR,R0 ;V1.12 RET ;V1.12 ; ; SET UP POINTER FOR LOADING OUTPUT FILE SPEC ; .ENTRY LOAD_OUTPUT_ADDRESS,0 MOVAL OUTPUT_FILE_SPEC,STORE_POINTER MOVAL OUTPUT_SPEC,COUNT_POINTER CLRL @COUNT_POINTER RET ; ; SET UP POINTER FOR LOADING HELP OPTION ; .ENTRY LOAD_HELP_ADDRESS,0 MOVAL HELP_OPTION,STORE_POINTER MOVAL GET_HELP,COUNT_POINTER MOVL #HELP_LEN,@COUNT_POINTER RET ; ; MOVE CHAR TO FILE SPEC ; .ENTRY LOAD_CHAR,0 MOVB @TPA$L_TOKENPTR(AP),@STORE_POINTER INCL STORE_POINTER INCL @COUNT_POINTER RET ; ; LOAD A BLANK CHARACTER ; .ENTRY LOAD_BLANK,0 MOVB #^A/ /,@STORE_POINTER INCL STORE_POINTER INCL @COUNT_POINTER RET ; ; MOVE SPEC FROM FILE QUEUE TO LIB QUEUE ; .ENTRY MOVE_SPEC_TO_LIB,^M<> REMQUE @FILE_SPEC_QUEUE+4,R1 BVC 1$ CLRL R0 RET 1$: INSQUE (R1),@LIB_SPEC_QUEUE RET .PAGE .SUBTITLE COMMAND LINE EVALUATION FLAG DECLARATIONS AND FLAG WORD ; ; DEFINE OPTION FLAGS ; .PSECT IMPURE_DATA,RD,WRT,NOSHR,CON,GBL,NOEXE,REL,LONG GLOBAL_FLAG ==^X1 LOCAL_FLAG ==^X2 MERGE_FLAG ==^X4 OUTPUT_FLAG ==^X8 INPUT_FLAG ==^X10 SPOOL_FLAG ==^X20 CHART_FLAG ==^X40 ;V2.00 NO_SOURCE_FLAG ==^X80 STATISTICS_FLAG ==^X100 GET_ENTRY_FLAG ==^X200 USED_FLAG ==^X400 NOLIB_FLAG ==^X800 DO_ENTRY_FLAG ==^X1000 HELP_FLAG ==^X2000 DO_SUPER_FLAG ==^X4000 UNCHANGED_FLAG ==^X8000 CHANGED_FLAG ==^X10000 WIDE_FLAG ==^X20000 PREPROCESSOR_FLAG ==^X40000 SUPER_SAVE_FLAG ==^X80000 ;V1.32 CALLING_TREE_FLAG ==^X100000 CALLED_BY_TREE_FLAG ==^X200000 GET_SUPER_FLAG ==^X400000 NARROW_FLAG ==^X800000 UNUSED_FLAG ==^X1000000 DEBUG_FLAG ==^X2000000 LOG_FLAG ==^X4000000 IMPORT_FLAG ==^X8000000 ;V1.3 EXPORT_FLAG ==^X10000000 ;V1.3 ARGUMENT_FLAG ==^X20000000 ;V2.09 DELETE_FLAG ==^X40000000 ;V1.6 COMMON_FLAG ==^X80000000 ;V1.11 ; SECOND LONG WORD OF FLAG WORD ;V1.11 FLOW_SYMBOL_FLAG ==^X1 ;V1.12 FLOW_DEPTH_FLAG ==^X2 ;V1.12 FLOW_SAVE_FLAG ==^X4 ;V1.12 NOENTRY_TABLE_FLAG ==^X8 ;V1.12 TRANSFER_ENTRY_FLAG ==^X10 ;V1.13 TAG_FLAG ==^X20 ;V1.16 REVERSE_FLAG ==^X40 ;V1.18 REORDER_FLAG ==^X80 ;V1.19 NOINDEX_FLAG ==^X100 ;V1.20 FILE_NAME_FLAG ==^X200 ;V1.21 STORAGE_FLAG ==^X400 ;V2.03 NO_MOVE_FLAG ==^X800 ;V2.06 NO_CONNECTOR_FLAG ==^X1000 ;V2.06 INDEX_SAVE_FLAG ==^X2000 ;V2.13 ; ==^X4000 ;V1.11 ; ==^X8000 ;V1.11 ; ==^X10000 ;V1.11 ; ==^X20000 ;V1.11 ; ==^X40000 ;V1.11 ; ==^X80000 ;V1.11 ; ==^X100000 ;V1.11 ; ==^X200000 ;V1.11 ; ==^X400000 ;V1.11 ; ==^X800000 ;V1.11 ; ==^X1000000 ;V1.11 ; ==^X2000000 ;V1.11 ; ==^X4000000 ;V1.11 ; ==^X8000000 ;V1.11 ; ==^X10000000 ;V1.11 ; ==^X20000000 ;V1.11 ; ==^X40000000 ;V1.11 ; ==^X80000000 ;V1.11 .PAGE .SUBTITLE USER SPECIFIED I/O FILE NAMES STORAGE AREA ; ; FILE SPEC STORAGE AREAS AND POINTERS ; STORE_POINTER: .LONG 0 COUNT_POINTER: .LONG 0 OUTPUT_FILE_SPEC: .BLKB 132 OUTPUT_SPEC: .LONG 0 .ADDRESS OUTPUT_FILE_SPEC FILE_SPEC_QUEUE:: .ADDRESS 0,0 LIB_SPEC_QUEUE: .ADDRESS 0,0 ; THE TWO QUEUE'S ABOVE USE ELEMENTS OF SAME FORMAT ; ; ---------------------------------- ; !FORWARD POINTER ! 0 ; ---------------------------------- ; !BACKWARD POINTER ! 4 ; ---------------------------------- ; ! NUMBER OF CHRS IN STRING ! 8 ; ---------------------------------- ; !STRING (252 CHRS MAX) !12 ;V2.17 ; ; ! !260 ;V2.17 ; ---------------------------------- ; ; 320 BYTES IN LENGTH ALLOWING FOR THE 64 BYTE GRANULARITY ;V2.17 .PAGE GET_HELP: .LONG 0 .ADDRESS HELP_CALL HELP_DIR: .ASCID ?INDEX.HLB? HELP_CALL: .ASCII ?INDEX ? HELP_LEN=.-HELP_CALL HELP_OPTION: .ASCII ? ? .ASCII ? ? .SUBTITLE FILE I/O CONTROL BLOCKS ; ; FILE I/O AREA ; .ALIGN LONG OUT_FILE: $FAB .ALIGN LONG OUT_RAB:: $RAB .ALIGN LONG TEMPLATE_NAME: $NAM ESA=EXP_STR,ERR=255,RSA=RES_STR,RSS=255 ;V1.9 OUT_NAME: $NAM ESA=EXP_STR,ESS=255,RSA=RES_STR,RSS=255 ;V1.6 TEMPLATE_IN_NAME: ;V1.21 $NAM ESA=EXP_IN_STR,ERR=255,RSA=RES_IN_STR,RSS=255 ;V1.21 IN_NAME:: ;V1.21 $NAM ESA=EXP_IN_STR,ERR=255,RSA=RES_IN_STR,RSS=255 ;V1.21 EXP_IN_STR: .BLKB 256 ;V1.21 RES_IN_STR: .BLKB 256 ;V1.21 RES_STR: .BLKB 256 ;V1.6 EXP_STR: .BLKB 256 ;V1.6 .SUBTITLE PURE DATA AND ERROR MESSAGES .PSECT PURE_DATA,NOEXE,CON,GBL,RD,NOWRT,REL,SHR NOINFILE: .ASCID /INDEX-E-No Input File/ NOOUTFILE: .ASCID /INDEX-E-No Output File/ IN_OPEN_ERROR: .ASCID /INDEX-E-Open Input File Error/ IN_CONNECT_ERROR:.ASCID /INDEX-E-Connect Input File Error/ OUT_OPEN_ERROR: .ASCID /INDEX-E-Open Output File Error/ OUT_CONNECT_ERROR:.ASCID /INDEX-E-Connect Output File Error/ OUT_MERGE_ERROR: .ASCID /INDEX-W-Merge File Not Found New File Created/ DEF_IN_NAME: .ASCII /.FOR/ DEF_IN_NAME_SIZE=.-DEF_IN_NAME DEF_OUT_NAME: .ASCII /.LIS;0/ DEF_OUT_NAME_SIZE=.-DEF_OUT_NAME .PAGE .SUBTITLE OPEN FILE CODE .PSECT CODE,EXE,CON,GBL,RD,NOWRT,REL,SHR OPEN_FILES: ; ;V1.14 ; IF /LOG SWITCH SPECIFIED-LOG THE COMMAND ;V1.14 ; ;V1.14 BITL #LOG_FLAG,FLAG_WORD ;CHECK OPTION ;V1.14 BEQL 3$ ;SKIP NEXT IF NOT SET ;V1.14 PUSHAL COMMAND_BUFFER ;PRINT LINE ON SYS$OUTPUT ;V1.14 CALLS #1,G^LIB$PUT_OUTPUT ;V1.14 3$: ;V1.14 ; ; OPEN INPUT FILE AS REQUIRED ; TSTL INDEX_SAVED_FLAG ;V2.13 BEQL 1003$ ;V2.13 JMP NO_INFILE ;V2.13 1003$: ;V2.13 BITL #DO_SUPER_FLAG!DO_ENTRY_FLAG,FLAG_WORD ;SEE IF INPUT FILE NEEDED BEQL 6$ JMP NO_INFILE ;NO FILE REQUIRED 6$: BITL #INPUT_FLAG,FLAG_WORD ;SEE IF INPUT FILE SPECIFIED BNEQ 7$ ;YES PUSHAL NOINFILE ;NO-ERROR MESSAGE CALLS #1,G^LIB$PUT_OUTPUT JMP NEW_COMMAND 7$: MOVL FILE_SPEC_QUEUE,R11 ;GET ADDRESS OF SPEC QUEUE ELEMENT MOVL INCLUDE_STACK,R10 ;GET POINTER TO 0 LEVEL INCLUDE FRAME MOVC3 #,TEMPLATE_IN_NAME,IN_NAME ;V1.21 MOVC5 #0,NULL,#0,#256,EXP_IN_STR ;ZERO NAME STRINGS ;V1.21 MOVC5 #0,NULL,#0,#256,RES_IN_STR ;ZERO RESULT STRINGS ;V1.21 $FAB_STORE FAB=INCLUDE_FAB(R10)- ;UPDATE INPUT FILE CONTROL DNA=DEF_IN_NAME- ;BLOCKS DNS=#DEF_IN_NAME_SIZE- FAC=- FNA=12(R11)- FNS=8(R11)- FOP=- ;V1.21 MRS=#132- NAM=IN_NAME- ;V1.21 ORG=SEQ- RFM=VAR- SHR= $RAB_STORE RAB=INCLUDE_RAB(R10)- FAB=INCLUDE_FAB(R10)- RAC=SEQ- RSZ=#132- UBF=INPUT_BUFFER- USZ=#132 2$: MOVL INCLUDE_STACK,R11 CLRB INCLUDE_TYPE(R11) CLRB INCLUDE_DEFFERED_EOF(R11) $OPEN FAB=INCLUDE_FAB(R10) ;OPEN INPUT FILE BLBS R0,1$ ;CHECK FOR EROR PUSHAL IN_OPEN_ERROR CALLS #1,G^LIB$PUT_OUTPUT JMP NEW_COMMAND 1$: $CONNECT RAB=INCLUDE_RAB(R10) BLBS R0,NO_INFILE PUSHAL IN_CONNECT_ERROR CALLS #1,G^LIB$PUT_OUTPUT $CLOSE FAB=IN_FILE JMP NEW_COMMAND NO_INFILE: BITL #GET_ENTRY_FLAG,FLAG_WORD ;SEE IF OUTPUT FILE NEEDED BEQL 7$ JMP NO_OUTFILE 7$: MOVL FILE_SPEC_QUEUE,R11 MOVC3 #,TEMPLATE_NAME,OUT_NAME ;V1.9 MOVC5 #0,NULL,#0,#256,EXP_STR ;ZERO NAME STRINGS ;V1.9 MOVC5 #0,NULL,#0,#256,RES_STR ;ZERO RESULT STRINGS ;V1.9 $FAB_STORE FAB=OUT_FILE- ;SET UP DEFAULT OUTPUT INFO DNA=DEF_OUT_NAME- DNS=#DEF_OUT_NAME_SIZE- FAC=- FNA=12(R11)- FNS=8(R11)- FOP=- ;V1.6 MRS=#132- ;**-1 NAM=OUT_NAME- ;V1.6 ORG=SEQ- RAT=CR- RFM=VAR- SHR=NIL $RAB_STORE RAB=OUT_RAB- FAB=OUT_FILE- RAC=SEQ- RSZ=#132- RBF=OUTPUT_BUFFER- USZ=#132 ; CHECK FOR NON DEFAULT OUTPUT FILE BITL #OUTPUT_FLAG,FLAG_WORD BEQL 4$ MOVL #OUTPUT_FILE_SPEC,OUT_FILE+FAB$L_FNA ;LOAD NEW ADDR MOVB OUTPUT_SPEC,OUT_FILE+FAB$B_FNS ;SIZE BRB 14$ 4$: BITL #INPUT_FLAG,FLAG_WORD BNEQ 15$ PUSHAL NOOUTFILE CALLS #1,G^LIB$PUT_OUTPUT CALLG NULL,CLOSE JMP NEW_COMMAND 15$: ;SEE IF EXTENTION SPECIFIED ON DEFAULT FILE NAME-IF SO-GET RID OF IT LOCC #^A/./,8(R11),12(R11) BEQL 14$ ;NONE SPECIFIED SUBL2 R11,R1 ;GET BYTE COUNT SUBL2 #12,R1 MOVB R1,OUT_FILE+FAB$B_FNS ;SET REVISED SIZE 14$: BITL #SPOOL_FLAG,FLAG_WORD ;SEE IF SPOOL WHEN DONE BEQL 1$ BISL #FAB$M_SPL,OUT_FILE+FAB$L_FOP ;SET SPOOL BIT 1$: BITL #DELETE_FLAG,FLAG_WORD ;CHECK FOR DELETE OUTPUT;V1.6 ; FILE ;V1.6 BEQL 71$ ;V1.6 BISL #FAB$M_DLT,OUT_FILE+FAB$L_FOP ;SET DELETE BIT ;V1.6 71$: BITL #MERGE_FLAG,FLAG_WORD ;MERGE OUTPUT TO ;V1.6 ;EXISTING FILE ;**-1 BEQL 2$ BICL #FAB$M_MXV,OUT_FILE+FAB$L_FOP BISL #FAB$M_CIF,OUT_FILE+FAB$L_FOP BISL #RAB$M_EOF,OUT_RAB+RAB$L_ROP 2$: $CREATE FAB=OUT_FILE BLBS R0,3$ PUSHAL OUT_OPEN_ERROR CALLS #1,G^LIB$PUT_OUTPUT JMP NEW_COMMAND 3$: CMPL #RMS$_CREATED,R0 BNEQ 5$ PUSHAL OUT_MERGE_ERROR CALLS #1,G^LIB$PUT_OUTPUT 5$: $CONNECT RAB=OUT_RAB BLBS R0,NO_OUTFILE PUSHAL OUT_CONNECT_ERROR CALLS #1,G^LIB$PUT_OUTPUT BISL #FAB$M_DLT,OUT_FILE+FAB$L_FOP $CLOSE FAB=OUT_FILE JMP NEW_COMMAND .PAGE .SUBTITLE CHECK FOR OTHER PROCESSING OPTIONS .SUBTITLE OPTIONS IN EFFECT .SUBTITLE DO ENTRY POINT CROSS REFERENCE .SUBTITLE DO SUPER INDEX OUTPUT NO_OUTFILE: REMQUE @FILE_SPEC_QUEUE,R11 ;REMOVE USED INPUT FILE SPEC-MAKE NEXT ;SPEC AVAILABLE BVS 1$ MOVL #320,ARG1 ;V2.17 MOVL R11,ARG2 CALLG ARG_GET_VM,FREE 1$: BITL #DO_ENTRY_FLAG,FLAG_WORD ;OUTPUT SUPER INDEX BEQL 2$ MOVL #ENTRY_OUTPUT,STATUS_WORD CLRL LINES_ON_PAGE MOVC3 #31,DEFAULT_NAME,MODULE_NAME ;V2.15 MOVC5 #0,NULL,#^A/ /,#32,CURRENT_MODULE_NAME ; BLANK OUT TITLE NAME ;V2.15 CALLG NULL,DUMP_ENTRY_INDEX CALLG NULL,CLOSE JMP NEW_COMMAND 2$: BITL #DO_SUPER_FLAG,FLAG_WORD BEQL 3$ MOVC3 #31,DEFAULT_NAME,MODULE_NAME ;V2.15 MOVC5 #0,NULL,#^A/ /,#32,CURRENT_MODULE_NAME ; BLANK OUT TITLE NAME ;V2.15 MOVL #SUPER_OUTPUT,STATUS_WORD CLRL LINES_ON_PAGE CALLG NULL,DUMP_SUPER_INDEX CALLG NULL,CLOSE JMP NEW_COMMAND 3$: TSTL INDEX_SAVED_FLAG ;V2.13 BNEQ 1003$ ;V2.13 BRW 4$ ;V2.13 1003$: CLRL LINES_ON_PAGE ;V2.13 MOVL #INDEX_OUTPUT,STATUS_WORD ;V2.13 CALLG NULL,DUMP_INDEX ;V2.13 CALLG NULL,CLEAR_SYMBOL_TABLE ;V2.13 PUSHAL TIME_CLEANUP ;V2.13 PUSHAL CODE_1 ;V2.13 CALLS #2,G^LIB$STAT_TIMER ;V2.13 PUSHAL TIME_CLEANUP+8 ;V2.13 PUSHAL CODE_2 ;V2.13 CALLS #2,G^LIB$STAT_TIMER ;V2.13 PUSHAL TIME_CLEANUP+12 ;V2.13 PUSHAL CODE_3 ;V2.13 CALLS #2,G^LIB$STAT_TIMER ;V2.13 PUSHAL TIME_CLEANUP+16 ;V2.13 PUSHAL CODE_4 ;V2.13 CALLS #2,G^LIB$STAT_TIMER ;V2.13 PUSHAL TIME_CLEANUP+20 ;V2.13 PUSHAL CODE_5 ;V2.13 CALLS #2,G^LIB$STAT_TIMER ;V2.13 CALLG NULL,G^LIB$INIT_TIMER ;V2.13 CALLG NULL,DUMP_STATS ;V2.13 CALLG NULL,CLOSE ;V2.13 JMP NEW_COMMAND ;V2.13 4$: RET ;V2.13 .PAGE .SUBTITLE FILE CLOSE PROCESSING .ENTRY CLOSE,^M<> BITL #DO_ENTRY_FLAG!DO_SUPER_FLAG,FLAG_WORD ;SEE IF INPUT FILE BNEQ 1$ $DISCONNECT RAB=IN_RAB $CLOSE FAB=IN_FILE 1$: BITL #GET_ENTRY_FLAG,FLAG_WORD ;SEE IF OUTPUT FILE BNEQ 2$ $DISCONNECT RAB=OUT_RAB $CLOSE FAB=OUT_FILE 2$: 11$: REMQUE @FILE_SPEC_QUEUE,R11 BVS 12$ MOVL #320,ARG1 ;V2.17 MOVL R11,ARG2 CALLG ARG_GET_VM,FREE BRB 11$ 12$: REMQUE @LIB_SPEC_QUEUE,R11 BVS 13$ MOVL #320,ARG1 ;V2.17 MOVL R11,ARG2 CALLG ARG_GET_VM,FREE BRB 12$ 13$: RET .PAGE .SUBTITLE OPEN SCRATCH FILES .SUBTITLE DATA AREAS .PSECT IMPURE_DATA,RD,WRT,NOSHR,CON,GBL,NOEXE,REL,LONG ; ; SUPER INDEX SCRATCH FILE ; .ALIGN LONG SUPER_SCRATCH_FAB:: $FAB DNM=- FAC=- FOP=- MRS=165- ;V2.09 ORG=SEQ- RFM=FIX- SHR=NIL .ALIGN LONG SUPER_INDEX_RAB:: $RAB FAB=SUPER_SCRATCH_FAB- RAC=SEQ- RBF=SUPER_BUFFER- RSZ=165- ;V2.09 UBF=SUPER_BUFFER- USZ=165 ;V2.09 ; ; ENTRY POINT INDEX SCRATCH FILE ; .ALIGN LONG ENTRY_SCRATCH_FAB:: $FAB DNM=- FAC=- FOP=- MRS=96- ;V1.21 ORG=SEQ- RFM=FIX- SHR=NIL .ALIGN LONG ENTRY_INDEX_RAB:: $RAB FAB=ENTRY_SCRATCH_FAB- RAC=SEQ- RBF=ENTRY_BUFFER- RSZ=96- ;V1.21 UBF=ENTRY_BUFFER- USZ=96 ;V1.21 ; ;V2.00 ; FLOW CHART SCRATCH FILE ;V2.00 ; ;V2.00 .ALIGN LONG ;V2.00 CHART_SCRATCH_FAB:: ;V2.00 $FAB DNM=- ;V2.00 FAC=- ;V2.00 FOP=- ;V2.00 MRS=128- ;V2.01 ORG=SEQ- ;V2.00 RFM=FIX- ;V2.00 SHR=NIL ;V2.00 .ALIGN LONG ;V2.00 CHART_RAB:: ;V2.00 $RAB FAB=CHART_SCRATCH_FAB- ;V2.00 RAC=SEQ- ;V2.00 RBF=CHART_BUFFER- ;V2.00 RSZ=128- ;V2.01 UBF=CHART_BUFFER- ;V2.00 USZ=128 ;V2.01 .PSECT PURE_DATA,NOEXE,CON,GBL,RD,NOWRT,REL,SHR SCRATCH_ERROR: .ASCID /INDEX-F-Error opening scratch files/ .PAGE .SUBTITLE OPEN SCRATCH FILES CODE .PSECT CODE,EXE,CON,GBL,RD,NOWRT,REL,SHR .ENTRY OPEN_SCRATCH,0 $FAB_STORE FAB=ENTRY_SCRATCH_FAB- FAC=- FOP=- MRS=#96- ;V1.21 ORG=SEQ- RFM=FIX- SHR=NIL $FAB_STORE FAB=SUPER_SCRATCH_FAB- FAC=- FOP=- MRS=#165- ;V2.09 ORG=SEQ- RFM=FIX- SHR=NIL $RAB_STORE RAB=ENTRY_INDEX_RAB- RAC=SEQ- RBF=ENTRY_BUFFER- RSZ=#96- ;V1.21 UBF=ENTRY_BUFFER- USZ=#96 ;V1.21 $RAB_STORE RAB=SUPER_INDEX_RAB- RAC=SEQ- RBF=SUPER_BUFFER- RSZ=#165- ;V2.09 UBF=SUPER_BUFFER- USZ=#165 ;V2.09 $CREATE FAB=SUPER_SCRATCH_FAB BLBC R0,1$ $CONNECT RAB=SUPER_INDEX_RAB BLBC R0,1$ $CREATE FAB=ENTRY_SCRATCH_FAB BLBC R0,1$ $CONNECT RAB=ENTRY_INDEX_RAB BLBC R0,1$ RET 1$: PUSHR #^M PUSHAL SCRATCH_ERROR CALLS #1,G^LIB$PUT_OUTPUT POPR #^M $EXIT_S R0 .PAGE ;V2.00 .SUBTITLE OPEN FLOW CHART SCRATCH FILE ;V2.00 .ENTRY OPEN_CHART_SCRATCH,^M ;V2.00 $FAB_STORE FAB=CHART_SCRATCH_FAB- ;V2.00 FAC=- ;V2.00 FOP=- ;V2.00 MRS=#128- ;V2.01 ORG=SEQ- ;V2.00 RFM=FIX- ;V2.00 SHR=NIL ;V2.00 $RAB_STORE RAB=CHART_RAB- ;V2.00 RAC=SEQ- ;V2.00 RBF=CHART_BUFFER- ;V2.00 RSZ=#128- ;V2.01 UBF=CHART_BUFFER- ;V2.00 USZ=#128 ;V2.01 $CREATE FAB=CHART_SCRATCH_FAB ;V2.00 BLBC R0,1$ ;V2.00 $CONNECT RAB=CHART_RAB ;V2.00 BLBC R0,1$ ;V2.00 RET ;V2.00 1$: PUSHR #^M ;V2.00 PUSHAL SCRATCH_ERROR ;V2.00 CALLS #1,G^LIB$PUT_OUTPUT ;V2.00 POPR #^M ;V2.00 $EXIT_S R0 ;V2.00 .PAGE .SUBTITLE CLOSE DOWN SCRATCH FILES .ENTRY CLOSE_SCRATCH,^M $DISCONNECT RAB=SUPER_INDEX_RAB $CLOSE FAB=SUPER_SCRATCH_FAB $DISCONNECT RAB=ENTRY_INDEX_RAB $CLOSE FAB=ENTRY_SCRATCH_FAB RET .PAGE ;V2.00 .SUBTITLE CLOSE DOWN FLOW CHART SCRATCH FILE ;V2.00 .ENTRY CLOSE_CHART_SCRATCH,^M ;V2.00 $DISCONNECT RAB=CHART_RAB ;V2.00 $CLOSE FAB=CHART_SCRATCH_FAB ;V2.00 RET ;V2.00 .PAGE .SUBTITLE POP INCLUDE LEVEL .ENTRY POP_INCLUDE_LEVEL,^M MOVL INCLUDE_LEVEL,R10 MOVL INCLUDE_STACK[R10],R11 ;GET THE INCLUDE FRAME TSTB INCLUDE_TYPE(R11) ;IS IT LIBRARY BNEQ 50$ ;YES ; CLOSE DOWN REGULAR FILE $DISCONNECT RAB=INCLUDE_RAB(R11) $CLOSE FAB=INCLUDE_FAB(R11) BRW 100$ 50$:; CLOSE DOWN LIBVRARY FILE PUSHAL INCLUDE_INDEX(R11) CALLS #1,G^LBR$CLOSE 100$:; RESTORE ALL OTHER FLAGS,BUFFERS ETC CVTBL INCLUDE_DEFFERED_EOF(R11),DEFFERED_END_OF_FILE CVTBL INCLUDE_INPUT_BUFFER_FLAG(R11),INPUT_BUFFER_FLAG MOVC3 #132,INCLUDE_INPUT_BUFFER(R11),INPUT_BUFFER TSTB INCLUDE_LIST(R11) BNEQ 101$ ;PREVIOUS LEVEL WAS NO SOURCE BICL #NO_SOURCE_FLAG,FLAG_WORD 101$: DECL INCLUDE_LEVEL RET .PAGE .SUBTITLE OPEN NEW ZERO LEVEL FILE .ENTRY OPEN_NEW_FILE,^M MOVL FILE_SPEC_QUEUE,R11 ;GET ADDRESS OF SPEC QUEUE ELEMENT MOVL INCLUDE_STACK,R10 $DISCONNECT RAB=INCLUDE_RAB(R10) $CLOSE FAB=INCLUDE_FAB(R10) MOVC3 #,TEMPLATE_IN_NAME,IN_NAME ;V1.21 MOVC5 #0,NULL,#0,#256,EXP_IN_STR ;ZERO NAME STRINGS ;V1.21 MOVC5 #0,NULL,#0,#256,RES_IN_STR ;ZERO RESULT STRINGS ;V1.21 $FAB_STORE FAB=INCLUDE_FAB(R10)- ;UPDATE INPUT FILE CONTROL DNA=DEF_IN_NAME- ;BLOCKS DNS=#DEF_IN_NAME_SIZE- FAC=- FNA=12(R11)- FNS=8(R11)- FOP=- ;V1.21 MRS=#132- NAM=IN_NAME- ;V1.21 ORG=SEQ- RFM=VAR- SHR= $RAB_STORE RAB=INCLUDE_RAB(R10)- FAB=INCLUDE_FAB(R10)- RAC=SEQ- RSZ=#132- UBF=INPUT_BUFFER- USZ=#132 MOVL INCLUDE_STACK,R11 CLRB INCLUDE_TYPE(R11) CLRB INCLUDE_DEFFERED_EOF(R11) $OPEN FAB=INCLUDE_FAB(R11) ;OPEN INPUT FILE BLBS R0,1$ ;CHECK FOR EROR PUSHR #^M PUSHAL IN_OPEN_ERROR CALLS #1,G^LIB$PUT_OUTPUT POPR #^M $EXIT_S R0 1$: $CONNECT RAB=INCLUDE_RAB(R11) BLBS R0,3$ PUSHR #^M PUSHAL IN_CONNECT_ERROR CALLS #1,G^LIB$PUT_OUTPUT POPR #^M $EXIT_S R0 3$: REMQUE @FILE_SPEC_QUEUE,R11 ;REMOVE USED INPUT FILE SPEC-MAKE NEXT ;SPEC AVAILABLE BVS 2$ MOVL #320,ARG1 ;V2.17 MOVL R11,ARG2 CALLG ARG_GET_VM,FREE 2$: RET .PAGE .SUBTITLE PUSH INCLUDE LEVEL .ENTRY PUSH_INCLUDE_LEVEL,^M ; ; CALL PUSH_INCLUDE_LEVEL(FILE_DESCRIPTER_STRING) ; ; INCLUDE SOURCE STRING DESCRIPTER ; ; GET A POINTER TO STRONG AND DETERMINE WHICH OF THREE TYPES ; IT IS: ; SIMPLE FILE ; LIBRARY FILE WITH SPECIFIED FILE NAME AND LIBRARY ENTRY NAME ; LIBRARY FILE WITH NO SPECIFIED FILE NAME ONLY ENTRY NAME ; CMPL #11,INCLUDE_LEVEL BGTR 500$ PUSHAL INCLUDE_NEST_ERROR CALLS #1,G^LIB$PUT_OUTPUT $EXIT_S 500$: MOVL 4(AP),R10 ;GET POINTER TO DESCRIPTER CVTWL (R10),R9 ;GET LENGTH MOVL 4(R10),R11 ;GET POINTER ; INIT ALL COUNTERS STRINGS AND FLAGS CLRL FILE_DESC MOVAL FILE_NAME,FILE_DESC+4 CLRL MODULE_DESC MOVAL DESC_NAME,MODULE_DESC+4 CLRL LIST_FLAG MOVC5 #0,NULL,#0,#132,FILE_NAME MOVC5 #0,NULL,#0,#132,DESC_NAME MOVAL FILE_DESC,R8 MOVAL FILE_NAME,R7 ; REGESTER ALLOCATION ; R11 POINTER TO INPUT STRING ; R10 POINTER TO INPUT STRING DESCRIPTER ; R9 NUMBER OF CHRS IN INPUT STRING ; R8 OUTPUT STRING CHR COUNTER ; R7 OUTPUT STRING POINTER 1$: MOVB (R11)+,R0 ;GET CHR CMPB #^A/ /,R0 ;IFF BLANK-SKIP BEQL 10$ CMPB #9,R0 ;DIITO FOR TAB BEQL 10$ ; LOOK FOR "(" OR "/" CMPB #^A/(/,R0 ;START OF LIBRARY MODULE ?? BNEQ 2$ MOVAL DESC_NAME,R7 MOVAL MODULE_DESC,R8 BRB 30$ ;GO GET MODULE NAME 2$: CMPB #^A?/?,R0 ;START OF SWITCH?? BEQL 70$ MOVB R0,(R7)+ ;LOAD CHR INCL (R8) ;BUMP COUNTER 10$: SOBGTR R9,1$ ;REPEAT UNTILL DONE BRW 100$ 20$: MOVB (R11)+,R0 ;GET NEXT MODULE CHR NAME CMPB #^A/ /,R0 ;IFF BLANK-SKIP BEQL 30$ CMPB #9,R0 ;DIITO FOR TAB BEQL 30$ ; LOOK FOR CLOSEING ")" CMPB #^A/)/,R0 BEQL 69$ MOVB R0,(R7)+ INCL (R8) 30$: SOBGTR R9,20$ BRW 100$ 69$: DECL R9 BEQL 100$ MOVB (R11)+,R0 ;SEE IF FOLLOWING CHR IS "/" BEQL 100$ CMPB #^A/ /,R0 BEQL 69$ CMPB #9,R0 BEQL 69$ CMPB #^A?/?,R0 BNEQ 100$ 70$: ;NEXT NON BLANK CHR MUST BE EITHER N (NO LIST) OR L (LIST) DECL R9 BEQL 100$ MOVB (R11)+,R0 CMPB #^A/ /,R0 BEQL 70$ CMPB #9,R0 BEQL 70$ CMPB #^A/N/,R0 ;IS IT /NOLIST BNEQ 100$ INCL LIST_FLAG ;SET NOLIST FLAG 100$: TSTL FILE_DESC ;WAS A FILE SPECIFIED BNEQ 150$ ;YES TSTL MODULE_DESC ;WAS A LIB MODULE SPECIFED BEQL 101$ JMP SEARCH_LIBS ;YES MUST SEARCH FOR CONTAINING FILE ;ERROR CONDITION-NO FILE AND NO MODULE SPECIFIED 101$: PUSHAL INCLUDE_SYNTAX_ERROR CALLS #1,G^LIB$PUT_OUTPUT $EXIT_S 150$: TSTL MODULE_DESC ;LIB SPECIFIED BEQL 149$ JMP SPECIFIED_LIB ;FIND MODULE IN SPECIFIED LIBRARY ; INCLUDE FILE NOT A LIBRARY ; OPEN STRAIGHT FILE 149$: INCL INCLUDE_LEVEL MOVL INCLUDE_LEVEL,R10 MOVL INCLUDE_STACK[R10],R11 $FAB_STORE FAB=INCLUDE_FAB(R11)- ;UPDATE INPUT FILE CONTROL DNA=DEF_IN_NAME- ;BLOCKS DNS=#DEF_IN_NAME_SIZE- FAC=- FNA=FILE_NAME- FNS=FILE_DESC- FOP=- MRS=#132- ORG=SEQ- RFM=VAR- SHR= $RAB_STORE RAB=INCLUDE_RAB(R11)- FAB=INCLUDE_FAB(R11)- RAC=SEQ- RSZ=#132- UBF=INPUT_BUFFER- USZ=#132 CLRB INCLUDE_TYPE(R11) CVTLB DEFFERED_END_OF_FILE,INCLUDE_DEFFERED_EOF(R11) CLRL DEFFERED_END_OF_FILE CVTBL INPUT_BUFFER_FLAG,INCLUDE_INPUT_BUFFER_FLAG(R11) CLRL INPUT_BUFFER_FLAG MOVC3 #132,INPUT_BUFFER,INCLUDE_INPUT_BUFFER(R11) MOVC5 #0,NULL,#0,#132,INPUT_BUFFER CLRB INCLUDE_LIST(R11) BITL #NO_SOURCE_FLAG,FLAG_WORD BNEQ 151$ TSTL LIST_FLAG BEQL 152$ BRB 1151$ 151$: INCL INCLUDE_LIST(R11) 1151$: BISL #NO_SOURCE_FLAG,FLAG_WORD 152$: $OPEN FAB=INCLUDE_FAB(R11) ;OPEN INPUT FILE BLBS R0,153$ ;CHECK FOR EROR PUSHR #^M PUSHAL INCLUDE_OPEN_ERROR CALLS #1,G^LIB$PUT_OUTPUT POPR #^M $EXIT_S R0 153$: $CONNECT RAB=INCLUDE_RAB(R11) BLBS R0,104$ PUSHR #^M PUSHAL INCLUDE_CONNECT_ERROR CALLS #1,G^LIB$PUT_OUTPUT POPR #^M $EXIT_S R0 104$: RET SPECIFIED_LIB: ; OPEN THE EXACTLY SPECIFIED LIBRARY INCL INCLUDE_LEVEL MOVL INCLUDE_LEVEL,R10 MOVL INCLUDE_STACK[R10],R11 MOVB #1,INCLUDE_TYPE(R11) CVTLB DEFFERED_END_OF_FILE,INCLUDE_DEFFERED_EOF(R11) CLRL DEFFERED_END_OF_FILE CVTBL INPUT_BUFFER_FLAG,INCLUDE_INPUT_BUFFER_FLAG(R11) CLRL INPUT_BUFFER_FLAG MOVC3 #132,INPUT_BUFFER,INCLUDE_INPUT_BUFFER(R11) MOVC5 #0,NULL,#0,#132,INPUT_BUFFER CLRB INCLUDE_LIST(R11) BITL #NO_SOURCE_FLAG,FLAG_WORD BNEQ 151$ TSTL LIST_FLAG BEQL 152$ BRB 1151$ 151$: INCL INCLUDE_LIST(R11) 1151$: BISL #NO_SOURCE_FLAG,FLAG_WORD 152$: PUSHAL LBR_TYPE PUSHAL LBR_FUNC PUSHAL INCLUDE_INDEX(R11) CALLS #3,G^LBR$INI_CONTROL BLBS R0,153$ PUSHR #^M PUSHAL INCLUDE_LIB_INI_ERROR CALLS #1,G^LIB$PUT_OUTPUT POPR #^M $EXIT_S R0 153$: PUSHAL DEF_DNS PUSHAL CRE_OPT PUSHAL FILE_DESC PUSHAL INCLUDE_INDEX(R11) CALLS #4,G^LBR$OPEN BLBS R0,154$ PUSHR #^M PUSHAL INCLUDE_LIB_OPEN_ERROR CALLS #1,G^LIB$PUT_OUTPUT POPR #^M $EXIT_S R0 154$: PUSHAL INCLUDE_RFA(R11) PUSHAL MODULE_DESC PUSHAL INCLUDE_INDEX(R11) CALLS #3,G^LBR$LOOKUP_KEY BLBS R0,155$ PUSHR #^M PUSHAL INCLUDE_LIB_LOOKUP_ERROR CALLS #1,G^LIB$PUT_OUTPUT POPR #^M $EXIT_S R0 155$: PUSHAL INCLUDE_INDEX(R11) CALLS #1,G^LBR$SET_MOVE RET SEARCH_LIBS: ; SCAN LIBRARIES IN ORDER FOR WANTED MODULE ; ORDER OF SEARCH IS ; DECLARED LIBRARIES IN ORDER OF APPEARANCE IN COMMAND LINE ; PROCESS/GROUP/SYSTEM DECLARED LOGICAL NAME FORT$LIBRARY(FIRST ; OCCOURANCE ONLY) ; SYS$LIBRARY:FORSYSDEF.TLB ; INCL INCLUDE_LEVEL MOVL INCLUDE_LEVEL,R10 MOVL INCLUDE_STACK[R10],R11 MOVB #1,INCLUDE_TYPE(R11) CVTLB DEFFERED_END_OF_FILE,INCLUDE_DEFFERED_EOF(R11) CLRL DEFFERED_END_OF_FILE CVTBL INPUT_BUFFER_FLAG,INCLUDE_INPUT_BUFFER_FLAG(R11) CLRL INPUT_BUFFER_FLAG MOVC3 #132,INPUT_BUFFER,INCLUDE_INPUT_BUFFER(R11) MOVC5 #0,NULL,#0,#132,INPUT_BUFFER CLRB INCLUDE_LIST(R11) BITL #NO_SOURCE_FLAG,FLAG_WORD BNEQ 151$ TSTL LIST_FLAG BEQL 152$ BRB 1151$ 151$: INCL INCLUDE_LIST(R11) 1151$: BISL #NO_SOURCE_FLAG,FLAG_WORD 152$:; SET UP TO LOOP THROUGH LIST OF LIBRARIES MOVAL LIB_SPEC_QUEUE,R11 ;GET POINTER TO QUEUE HEADER MOVL R11,R10 ;SET UP TO SCAN QUEUE 200$: MOVL (R10),R10 ;GET NEXT ENTRY CMPL R10,R11 ;ARE WE DONE BEQL 300$ ;YES-TRY NEXT OPTION MOVAL 12(R10),DESC_ARG+4 ;SET UP TO TRY AND OPEN THIS LIB MOVL 8(R10),DESC_ARG PUSHAL DESC_ARG CALLS #1,OPEN_LIB ;ATTEMPT TO OPEN BLBC R0,200$ ;NOPE-TRY NEXT RET ;DONE-RETURN 300$: ;TRY "FORT$LIBRARY" PUSHAL FORT_LIB CALLS #1,OPEN_LIB BLBC R0,350$ ;NOPE-NOT THERE RET 350$: PUSHAL SYS_LIB CALLS #1,OPEN_LIB BLBC R0,400$ ;OOPS-NOT TO BE FOUND RET 400$: PUSHAL INCLUDE_UNK_MOD CALLS #1,G^LIB$PUT_OUTPUT $EXIT_S ; CALL OPEN_LIB(FILE_NAME_DESCR) ; MODULE_DESC THE DESCRIPER OF MODULE TO BE FOUND .ENTRY OPEN_LIB,^M MOVL INCLUDE_LEVEL,R10 MOVL INCLUDE_STACK[R10],R11 PUSHAL LBR_TYPE PUSHAL LBR_FUNC PUSHAL INCLUDE_INDEX(R11) CALLS #3,G^LBR$INI_CONTROL BLBS R0,153$ CLRL R0 RET 153$: PUSHAL DEF_DNS PUSHAL CRE_OPT PUSHAL @4(AP) PUSHAL INCLUDE_INDEX(R11) CALLS #4,G^LBR$OPEN BLBS R0,154$ CLRL R0 RET 154$: PUSHAL INCLUDE_RFA(R11) PUSHAL MODULE_DESC PUSHAL INCLUDE_INDEX(R11) CALLS #3,G^LBR$LOOKUP_KEY BLBS R0,155$ PUSHAL INCLUDE_INDEX(R11) CALLS #1,G^LBR$CLOSE CLRL R0 RET 155$: PUSHAL INCLUDE_INDEX(R11) CALLS #1,G^LBR$SET_MOVE MOVL #1,R0 RET .PSECT IMPURE_DATA DESC_ARG: .LONG 0,0 FILE_DESC: .LONG 0 .ADDRESS FILE_NAME MODULE_DESC: .LONG 0 .ADDRESS DESC_NAME FILE_NAME:.BLKB 132 DESC_NAME:.BLKB 132 LIST_FLAG:.LONG 0 .PSECT PURE_DATA INCLUDE_UNK_MOD: .ASCID /INDEX-F-INCLUDE Unknown Module Name/ INCLUDE_LIB_LOOKUP_ERROR: .ASCID /INDEX-F-INCLUDE Unable To Find Module In Library/ INCLUDE_LIB_OPEN_ERROR: .ASCID /INDEX-F-INCLUDE Unable To Open Library File/ INCLUDE_LIB_INI_ERROR: .ASCID /INDEX-F-INCLUDE Library File Initialization Error/ INCLUDE_SYNTAX_ERROR: .ASCID /INDEX-F-INCLUDE File Specification Syntax Error/ INCLUDE_NEST_ERROR: .ASCID /INDEX-F-INCLUDE Nested Too Deep/ INCLUDE_OPEN_ERROR: .ASCID /INDEX-F-INCLUDE Open File Error/ INCLUDE_CONNECT_ERROR: .ASCID /INDEX-F-INCLUDE Connect File Error/ FORT_LIB: .ASCID /FORT$LIBRARY/ SYS_LIB: .ASCID /SYS$LIBRARY:FORSYSDEF.TLB/ LBR_TYPE: .LONG LBR$C_TYP_TXT LBR_FUNC: .LONG LBR$C_READ CRE_OPT: .REPEAT 20 .LONG 0 .ENDR DEF_DNS: .ASCID /.TLB/ .END