| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 | 
							- $! 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_ 
 
 
  |