149 lines
4.5 KiB
Plaintext
149 lines
4.5 KiB
Plaintext
|
$! Analyze Map for OpenVMS AXP
|
||
|
$!
|
||
|
$! Originally found in the distribution of gv
|
||
|
$! http://wwwthep.physik.uni-mainz.de/~plass/gv/
|
||
|
$!
|
||
|
$! 1-Jul-1999 : modified to be used with $BSS$ & $READONLY sections in the
|
||
|
$! map-file by J. Jansen (joukj@hrem.stm.tudelft.nl)
|
||
|
$!
|
||
|
$ SET SYMBOL/GENERAL/SCOPE=(NOLOCAL,NOGLOBAL)
|
||
|
$ SAY := "WRITE_ SYS$OUTPUT"
|
||
|
$
|
||
|
$ IF F$SEARCH("''P1'") .EQS. ""
|
||
|
$ THEN
|
||
|
$ SAY " ANALYZE_MAP.COM: Error, no mapfile provided"
|
||
|
$ EXIT_
|
||
|
$ ENDIF
|
||
|
$ IF "''P2'" .EQS. ""
|
||
|
$ THEN
|
||
|
$ SAY " ANALYZE_MAP.COM: Error, no output file provided"
|
||
|
$ EXIT_
|
||
|
$ ENDIF
|
||
|
$
|
||
|
$ LINK_TMP = F$PARSE(P2,,,"DEVICE")+F$PARSE(P2,,,"DIRECTORY")+F$PARSE(P2,,,"NAME")+".TMP"
|
||
|
$
|
||
|
$ SAY " checking PSECT list in ''P2'"
|
||
|
$ OPEN_/READ IN 'P1'
|
||
|
$ LOOP_PSECT_SEARCH:
|
||
|
$ READ_/END=EOF_PSECT IN REC
|
||
|
$ LOOP_PSECT_SEARCH0:
|
||
|
$ if F$EXTRACT(0,5,REC) .eqs. "$DATA" .or. F$EXTRACT(0,5,REC) .eqs. -
|
||
|
"$BSS$" .or. f$extract(0,10,rec) .eqs. "$READONLY$" then goto do_data
|
||
|
$ if F$EXTRACT(0,14,REC) .eqs. "$READONLY_ADDR" then goto do_readonly
|
||
|
$ goto LOOP_PSECT_SEARCH
|
||
|
$ do_data:
|
||
|
$ LAST = ""
|
||
|
$ LOOP_PSECT:
|
||
|
$ READ_/END=EOF_PSECT IN REC
|
||
|
$ if F$EXTRACT(0,1,REC) .eqs. "$" .and. F$EXTRACT(0,5,REC) .nes. "$DATA" -
|
||
|
.and. F$EXTRACT(0,5,REC) .nes. "$BSS$" .and. f$extract(0,10,rec) -
|
||
|
.nes. "$READONLY$" then goto LOOP_PSECT_SEARCH0
|
||
|
$ if REC - "NOPIC,OVR,REL,GBL,NOSHR,NOEXE, WRT,NOVEC" .nes. REC
|
||
|
$ then
|
||
|
$ J = F$LOCATE(" ",REC)
|
||
|
$ S = F$EXTRACT(0,J,REC)
|
||
|
$ IF S .EQS. LAST THEN GOTO LOOP_PSECT
|
||
|
$ P$_'S= 1
|
||
|
$ LAST = S
|
||
|
$ endif
|
||
|
$ if REC - "NOPIC,OVR,REL,GBL,NOSHR,NOEXE,NOWRT,NOVEC" .nes. REC
|
||
|
$ then
|
||
|
$ J = F$LOCATE(" ",REC)
|
||
|
$ S = F$EXTRACT(0,J,REC)
|
||
|
$ IF S .EQS. LAST THEN GOTO LOOP_PSECT
|
||
|
$ P$_'S= 1
|
||
|
$ LAST = S
|
||
|
$ endif
|
||
|
$ GOTO LOOP_PSECT
|
||
|
$
|
||
|
$ do_readonly:
|
||
|
$ LAST = ""
|
||
|
$ LOOP_PSECT3:
|
||
|
$ READ_/END=EOF_PSECT IN REC
|
||
|
$ if F$EXTRACT(0,1,REC) .eqs. "-" .or. F$EXTRACT(0,3,REC) .eqs. "NL:" then -
|
||
|
goto loop_psect3
|
||
|
$ if F$EXTRACT(0,1,REC) .eqs. "$" .and. F$EXTRACT(0,14,REC) .nes. -
|
||
|
"$READONLY_ADDR" then goto LOOP_PSECT_SEARCH0
|
||
|
$ if REC - "OCTA" .nes. REC
|
||
|
$ then
|
||
|
$ J = F$LOCATE(" ",REC)
|
||
|
$ S = F$EXTRACT(0,J,REC)
|
||
|
$ IF S .EQS. LAST THEN GOTO LOOP_PSECT3
|
||
|
$ P$_'S= 1
|
||
|
$ LAST = S
|
||
|
$ endif
|
||
|
$ GOTO LOOP_PSECT3
|
||
|
$
|
||
|
$ EOF_PSECT:
|
||
|
$ CLOSE_ IN
|
||
|
$
|
||
|
$ SAY " appending list of UNIVERSAL procedures to ''P2'"
|
||
|
$ SEARCH_/NOHIGH/WINDOW=(0,0) 'P1' " R-"/OUT='LINK_TMP
|
||
|
$ OPEN_/READ IN 'LINK_TMP
|
||
|
$ OPEN_/write OUT 'P2'
|
||
|
$ WRITE_ OUT "!"
|
||
|
$ WRITE_ OUT "! ### UNIVERSAL procedures and global definitions extracted from ''P1'"
|
||
|
$ WRITE_ OUT "!"
|
||
|
$ write_ OUT "case_sensitive=YES"
|
||
|
$ LOOP_UNIVERSAL:
|
||
|
$ READ_/END=EOF_UNIVERSAL IN REC
|
||
|
$ J = F$LOCATE(" R-",REC)
|
||
|
$ S = F$EXTRACT(J+3,F$length(rec),REC)
|
||
|
$ J = F$LOCATE(" ",S)
|
||
|
$ S = F$EXTRACT(0,J,S)
|
||
|
$ PP$_'S= 1
|
||
|
$ IF F$TYPE(P$_'S').EQS.""
|
||
|
$ THEN
|
||
|
$ WRITE_ OUT "symbol_vector = ("+S+" = PROCEDURE)"
|
||
|
$ ELSE
|
||
|
$ WRITE_ OUT "symbol_vector = ("+S+" = DATA)"
|
||
|
$ ENDIF
|
||
|
$ GOTO LOOP_UNIVERSAL
|
||
|
$ EOF_UNIVERSAL:
|
||
|
$ CLOSE_ IN
|
||
|
$ CLOSE_ OUT
|
||
|
$!
|
||
|
$ SAY " creating PSECT list in ''P2'"
|
||
|
$ OPEN_/READ IN 'P1'
|
||
|
$ OPEN_/append OUT 'P2'
|
||
|
$ WRITE_ OUT "!"
|
||
|
$ WRITE_ OUT "! ### PSECT list extracted from ''P1'"
|
||
|
$ WRITE_ OUT "!"
|
||
|
$ LOOP_PSECT_SEARCH1:
|
||
|
$ READ_/END=EOF_PSECT1 IN REC
|
||
|
$ if F$EXTRACT(0,5,REC) .nes. "$DATA" .and. F$EXTRACT(0,5,REC) .nes. -
|
||
|
"$BSS$" .and. f$extract(0,10,rec) .nes. "$READONLY$" then goto -
|
||
|
LOOP_PSECT_SEARCH1
|
||
|
$ LAST = ""
|
||
|
$ LOOP_PSECT1:
|
||
|
$ READ_/END=EOF_PSECT1 IN REC
|
||
|
$ if F$EXTRACT(0,1,REC) .eqs. "$" .and. F$EXTRACT(0,5,REC) .nes. "$DATA" -
|
||
|
.and. F$EXTRACT(0,5,REC) .nes. "$BSS$" .and. f$extract(0,10,rec) -
|
||
|
.nes. "$READONLY$" then goto LOOP_PSECT_SEARCH1
|
||
|
$ if REC - "NOPIC,OVR,REL,GBL,NOSHR,NOEXE, WRT,NOVEC" .nes. REC
|
||
|
$ then
|
||
|
$ J = F$LOCATE(" ",REC)
|
||
|
$ S = F$EXTRACT(0,J,REC)
|
||
|
$ IF S .EQS. LAST THEN GOTO LOOP_PSECT1
|
||
|
$ IF F$TYPE(PP$_'S').nes."" then WRITE_ OUT "symbol_vector = (" + S + " = PSECT)"
|
||
|
$ P$_'S= 1
|
||
|
$ LAST = S
|
||
|
$ endif
|
||
|
$ if REC - "NOPIC,OVR,REL,GBL,NOSHR,NOEXE,NOWRT,NOVEC" .nes. REC
|
||
|
$ then
|
||
|
$ J = F$LOCATE(" ",REC)
|
||
|
$ S = F$EXTRACT(0,J,REC)
|
||
|
$ IF S .EQS. LAST THEN GOTO LOOP_PSECT1
|
||
|
$ IF F$TYPE(PP$_'S').nes."" then WRITE_ OUT "symbol_vector = (" + S + " = PSECT)"
|
||
|
$ P$_'S= 1
|
||
|
$ LAST = S
|
||
|
$ endif
|
||
|
$ GOTO LOOP_PSECT1
|
||
|
$
|
||
|
$ EOF_PSECT1:
|
||
|
$ CLOSE_ IN
|
||
|
$ CLOSE_ OUT
|
||
|
$ if f$search("''LINK_TMP'") .nes. "" then DELETE_/NOLOG/NOCONFIRM 'LINK_TMP';*
|
||
|
$
|
||
|
$ EXIT_
|