1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
|
$! 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$" .or. -
f$extract(0,9,rec) .eqs. "$LITERAL$" 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$" .and. f$extract(0,9,rec) .nes. "$LITERAL$" 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$" .and. -
f$extract(0,9,rec) .nes. "$LITERAL$" 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$" .and. f$extract(0,9,rec) .nes. "$LITERAL$" 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_
|