.TITLE INDEX-FORTRAN CROSS REFERENCE FOR VAX/VMS .IDENT /V01.9/ ;V1.9 .ENABLE DEBUG ;**-1 ; GENERAL HISTORY ; ; The original INDEX-FORTRAN Cross Referencer was written ; in FORTRAN in 1966 by Harry M. Murphy Jr of the ; Air Force Weapons Laboratory ; Kirkland Air Force Base ; New Mexico ; ; This Fortran version was ported to run on the ; Naval Weapons Center, China lake, Ca ; UNIVAC 1100 series computer. ; ; In 1974, Michael N. LeVine of N.W.C. attemped ; to port the UNIVAC version to a PDP-11/20 running ; RT-11 but was unsucessfull. Useing as a target, the ; capabilities of the original, an assembly langauge ; version was written to run under RT-11. Between 1974 and ; 1983, the PDP-11 version was enhanced to a superset ; of the features of the original FORTRAN program. ; The final version (6.4) running under RT/RSX/IAS ; with many user selectable features such as looking ; for variables fitting selected conditions, and ; a full entry point cross reference in tabular ; and graphical format. ; ; This VAX/VMS version is a complete rewrite in ; VAX assembly language of the PDP-11 V6.4 INDEX. ; ; Michael N. LeVine ; Code 3513 ; Naval Weapons Center ; China Lake ; Ca ; 93555 ; ; (619)939-2318 ; AVN 437-2318 ; ; ; History ; Version 1.0 ; Started May 1983, completed July 15,1983 ; Deficencies ; Switches not implimented ; /OPTIONS ; /STATISTICS ; Possable future enhacements ; Update the symbol table on the super index ; to a tree structure, like the regular index, ; from the current linear list structure ; now in use. When doing so, must look into ; some method to aleviate the ubalanced tree ; generated by the alphabetically stored ; symbol data. ; ; Upgrade the input and parseing of command lines ; to be more in line with the format of the ; FORTRAN compiler. ; ; Change the messages to SYS$OUTPUT from the ; current method to useing the system message ; facility. ; ; REVISION HISTORY ; 26-JULY-83 MNL ; FOUND THAT CONSTRUCTS OF THE FORM ; IF(A.EQ.B)IFREEP=ABC ; WERE NOT PROPERLY HANDLED. THE CONDITIONAL PART OF THE ; IF WAS FIRST GUESSED AS AN IF, BUT WHEN FOUND NOT TO ; FIT THE FORMAT- RETRYED AS AN ARITHMETIC. ERROR CAME IN ; AS THE CONDITIONAL PART DID NOT START AT THE BEGINNING ; OF THE LINE. THE RESET STARTED THE RETRY AT THE ; START OF THE LINE EVEN THOUGH IN THIS CASE THAT ; WAS NOT RIGHT. CHANGED "LINETYPE.MAR" ; ; 3-AUGUST-83 MNL ; LOGIC TO SAY THAT VARIABLES IN DATA STATEMNTS HAVE ; BEEN CHANGED (SET) IN VALUE INVERTED. CAUSED ; WRONG FLAGGING OF DATA,PARAMETER,EQUIVALENCE AND ; SAVE. CHANGED "EVAL.MAR" ; 15-AUGUST-83 MNL ;V1.3 ; ADDED SWITCHES AND SUPPORTING CODE -/COMMENT, ;V1.3 ; /EXPORT,/IMPORT. ;V1.3 ; /COMMENT=" " ALLOWS THE USER TO INSERT A COMMENT ;V1.3 ; INTO THE HEADER OF EACH PAGE. ;V1.3 ; /IMPORT GETS IMPORTED VARIABLES INTO ROUTINE ;V1.3 ; /EXPORT GETS EXPORTED VARIABLES FROM ROUTINE ;V1.3 ; CHANGED "OPENCLOSE,EVAL,OUTPUT,STORE" ;V1.3 ; 22-AUGUST-83 MNL ;V1.4 ; ADDED HOOKS FOR FLOW CHART GENERATION ;V1.4 ; PUT IN CODE TO IMPLIMENT STATISTICS OUTPUT ;V1.4 ; CHANGED "INDEX,OPENCLOSE,STORE,IOLINE,HEAP,OUTPUT ;V1.4 ; TABLE,SUPER,FLOW", ADDED ;V1.4 ; MODULE "STATS". ALSO CHANGED ;V1.4 ; COMMAND FILES "INDEX,INDEXCOPY,LINK" AND ;V1.4 ; "INDEX.RNO" ;V1.4 ; 26-AUGUST-83 MNL ;V1.5 ; FORGOT TO SET FLAG IN EVALUATEING INLINE FUNCTION ;V1.5 ; CALLS STATEING THAT THE ARGUMENTS ARE USED. ;V1.5 ; CANGED "INDEX,EVAL,IOLINE" ;V1.5 ; 12-SEPTEMBER-83 MNL ;V1.6 ; ADDITIONS TO MAKE SPOOLING OPTION WORK ;V1.6 ; ALSO ADDED /DELETE SWITCH ;V1.6 ; CHANGED "INDEX,IOLINE,OPENCLOSE" ;V1.6 ; 21-SEPTEMBER-83 MNL ;V1.7 ; ENCODE/DECODE ERROR-THE I/O STRING SPECIFICATION ;V1.7 ; DID NOT ALLOW FOR ARRAY OR CHR SUBSTRING SPECIFIATION ;V1.7 ; CHANGED MODULES "LINETYPE,INDEX,IOLINE" ;V1.7 ; 3-OCTOBER-83 MNL ;V1.8 ; ERROR IN HANDLEING "TYPE * STATEMENTS, CAUSED THE ;V1.8 ; PROGRAM TO BOMB IN "OUTPUT" DUE TO INVALID MENEMONIC ;V1.8 ; NUMBER LOADED INTO SYMBOL TABLE HOW USED ELEMENT. ;V1.8 ; CHANGED MODULES "EVAL,IOLINE,INDEX" ;V1.8 ; 17-OCTOBER-83 MNL ;V1.9 ; FOUND THAT THE NAME BLOCK AND ASSOCIATED STRINGS ;V1.9 ; HAVE TO BE RE INITIALIZE BEFORE REUSE.CAUSED THE ;V1.9 ; OUTPUT TO GO ALWAYS TO THE FIRST OUPUT SPECIFIED ;V1.9 ; EITHER IMPLICITLY OR EXPLICITLY ON SUBSEQUENT FILES ;V1.9 ; BEING CROSS REFENENCED ;V1.9 ; CHANGED MODULES "OPENCLOSE,IOLINE,INDEX" ;V1.9 ; .PSECT PURE_DATA,NOEXE,CON,NOWRT,SHR,GBL,RD ; ; LOCAL PURE DATA ; NO_END: .ASCID /INDEX-E-Missing End Statement/ CODE_1: .LONG 1 ;V1.4 CODE_2: .LONG 2 ;V1.4 CODE_3: .LONG 3 ;V1.4 CODE_4: .LONG 4 ;V1.4 CODE_5: .LONG 5 ;V1.4 .PSECT IMPURE_DATA,NOEXE,CON,WRT,NOSHR,GBL,RD,LONG ; ; LOCAL IMPURE DATA ; SCRATCH:.BLKL 2 ARG: .LONG 2 .ADDRESS ARG1,ARG2 ARG1: .LONG 0 ARG2: .LONG 0 .PSECT CODE,EXE,CON,NOWRT,SHR,GBL,NOVEC .ENTRY INDEX,^M ; ; ONE TIME ONLY CODE INITIALLIZATION ; ; LINES PER PAGE ON LINE PRINTER CALLG NULL,LIB$LP_LINES MOVL R0,LINES_PER_PAGE ; ; OPEN SCRATCH FILES CALLG NULL,OPEN_SCRATCH ; INIT SYMBOL TABLE AREA MOVAL SYMBOL_TABLE_QUEUE,SYMBOL_TABLE_QUEUE MOVAL SYMBOL_TABLE_QUEUE,SYMBOL_TABLE_QUEUE+4 MOVAL LINE_TOKEN_QUEUE,LINE_TOKEN_QUEUE MOVAL LINE_TOKEN_QUEUE,LINE_TOKEN_QUEUE+4 ; INIT THE STATISTICS BUFFERS ;V1.4 MOVC5 #0,NULL,#0,#,TIME_COMMAND ;V1.4 ; INIT THE HEAP CALLG NULL,INIT_HEAP ; ; NEW FILE INITIALIZATION CODE LOOP ENTRY POINT ; ; INIT TIMER FOR STATISTICS ;V1.4 ; ;V1.4 CALLG NULL,G^LIB$INIT_TIMER ;V1.4 NEW_FILE: ;V1.4 ; ;V1.4 ; ;**-1 ; GET COMMAND FROM OPERATOR, PARSE IT AND OPEN FILES ; CALLG NULL,OPEN ; GET DAY-TIME FOR LIST HEADER PUSHAL DAY_TIME CALLS #1,LIB$DATE_TIME ; CLEAR END OF FILE FLAG AND INPUT BUFFER IN USE FLAG CLRL END_OF_FILE CLRL DEFFERED_END_OF_FILE CLRL INPUT_BUFFER_FLAG ; ; COMMAND TIME STATISTICS SAVE ;V1.4 ; ;V1.4 PUSHAL TIME_COMMAND ;V1.4 PUSHAL CODE_1 ;V1.4 CALLS #2,G^LIB$STAT_TIMER ;V1.4 PUSHAL TIME_COMMAND+8 ;V1.4 PUSHAL CODE_2 ;V1.4 CALLS #2,G^LIB$STAT_TIMER ;V1.4 PUSHAL TIME_COMMAND+12 ;V1.4 PUSHAL CODE_3 ;V1.4 CALLS #2,G^LIB$STAT_TIMER ;V1.4 PUSHAL TIME_COMMAND+16 ;V1.4 PUSHAL CODE_4 ;V1.4 CALLS #2,G^LIB$STAT_TIMER ;V1.4 PUSHAL TIME_COMMAND+20 ;V1.4 PUSHAL CODE_5 ;V1.4 CALLS #2,G^LIB$STAT_TIMER ;V1.4 CALLG NULL,G^LIB$INIT_TIMER ;V1.4 ;V1.4 ; ;V1.4 ; NEW SORCE MODULE INITIALIZATION CODE ; NEW_MODULE: ; ; MODULE PARSE LOOP ; SET STATUS WORD MOVL #PARSE_LINES,STATUS_WORD CLRL LINES_ON_PAGE ; INITIALIZE STATISTICS ACCUMULATION ; INI NEW SOURCE DATA INCL LINE NUMBER,PAGE NUMBER CLRL LINE_NUMBER CLRL PAGE_NUMBER CLRL INCLUDE_LEVEL CLRL PROGRAM_LEVEL CLRL BLOCK_DATA_FLAG CLRL END_FLAG CLRL PROGRAM_FLAG MOVC3 #31,DEFAULT_NAME,MODULE_NAME ; ;**-2 ; GET A LINE TO PARSE (INCLUDEING COMMENTS) ; CALLG NULL,GET_LINE NEW_LINE: ; ; IF E.O.F. AND NOT IN INCLUDE FILE GO TO CLOSE PROCESSING ; IF E.O.F. AND IN INCLUDE FILE-POP UP ONE LEVEL IN PROCESSING ; AND GET NEW LINE TSTL END_OF_FILE ;END OF FILE CHECK BNEQ 3$ ;V1.4 BRW 1$ ;V1.4 3$: TSTL LINE_NUMBER ;CHECK FOR REQUIRED END PROCESSING ;V1.4 BNEQ 1003$ ;V1.4 BRW 2$ ;V1.4 1003$: PUSHAL NO_END ;V1.4 CALLS #1,G^LIB$PUT_OUTPUT ;V1.4 CALLG NULL,PARSE_BAD_END ;V1.4 ; RESET SYMBOL TABLE AREA ;V1.4 CALLG NULL,CLEAR_SYMBOL_TABLE ;V1.4 PUSHAL TIME_CLEANUP ;V1.4 PUSHAL CODE_1 ;V1.4 CALLS #2,G^LIB$STAT_TIMER ;V1.4 PUSHAL TIME_CLEANUP+8 ;V1.4 PUSHAL CODE_2 ;V1.4 CALLS #2,G^LIB$STAT_TIMER ;V1.4 PUSHAL TIME_CLEANUP+12 ;V1.4 PUSHAL CODE_3 ;V1.4 CALLS #2,G^LIB$STAT_TIMER ;V1.4 PUSHAL TIME_CLEANUP+16 ;V1.4 PUSHAL CODE_4 ;V1.4 CALLS #2,G^LIB$STAT_TIMER ;V1.4 PUSHAL TIME_CLEANUP+20 ;V1.4 PUSHAL CODE_5 ;V1.4 CALLS #2,G^LIB$STAT_TIMER ;V1.4 CALLG NULL,G^LIB$INIT_TIMER ;V1.4 CALLG NULL,DUMP_STATS ;V1.4 2$: JMP CLOSE_DOWN ;**-6 1$: ; USE LIB$FREE_VM TO RELEASE MEMORY IN USE IN LINE TOKEN QUEUE 4$: REMQUE @LINE_TOKEN_QUEUE,R11 ;REMOVE ELEMENT FROM QUEUE BVS 5$ ;IF QUEUE EMPTY-DONE CVTWL 14(R11),ARG1 ;GET SIZE IN BYTES MOVL R11,ARG2 ;BASE ADDRESS CALLG ARG,FREE ;RELEASE MEMORY TO HEAP BRB 4$ 5$: ; ; DETERMINE LINE TYPE AND DOUBLE CHECK IT ; CALLG NULL,GET_LINE_TYPE ; ; PARSE THE LINE AND SAVE RESULTS ; CALLG NULL,EVAL ; ; IF END- DO OUTPUT OF ACCUMULATED DATA AND STATISTICS ; AND GO TO NEW MODULE LOOP ; TSTL END_FLAG BNEQ 1005$ ;V1.4 BRW 6$ ;V1.4 ; RESET SYMBOL TABLE AREA ;V1.4 1005$: CALLG NULL,CLEAR_SYMBOL_TABLE ;V1.4 PUSHAL TIME_CLEANUP ;V1.4 PUSHAL CODE_1 ;V1.4 CALLS #2,G^LIB$STAT_TIMER ;V1.4 PUSHAL TIME_CLEANUP+8 ;V1.4 PUSHAL CODE_2 ;V1.4 CALLS #2,G^LIB$STAT_TIMER ;V1.4 PUSHAL TIME_CLEANUP+12 ;V1.4 PUSHAL CODE_3 ;V1.4 CALLS #2,G^LIB$STAT_TIMER ;V1.4 PUSHAL TIME_CLEANUP+16 ;V1.4 PUSHAL CODE_4 ;V1.4 CALLS #2,G^LIB$STAT_TIMER ;V1.4 PUSHAL TIME_CLEANUP+20 ;V1.4 PUSHAL CODE_5 ;V1.4 CALLS #2,G^LIB$STAT_TIMER ;V1.4 CALLG NULL,G^LIB$INIT_TIMER ;V1.4 CALLG NULL,DUMP_STATS ;V1.4 JMP NEW_MODULE ;**-1 6$: ; ; GET NEW LINE ; CALLG NULL,GET_LINE JMP NEW_LINE CLOSE_DOWN: ; ; DO CLOSE PROCESSING ; CALLG NULL,CLOSE ;**-2 ; ; GO GET NEW COMMAND ; JMP NEW_FILE .END INDEX