Clone of mesa.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

analyze_map.com 4.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. $! Analyze Map for OpenVMS AXP
  2. $!
  3. $! Originally found in the distribution of gv
  4. $! http://wwwthep.physik.uni-mainz.de/~plass/gv/
  5. $!
  6. $! 1-Jul-1999 : modified to be used with $BSS$ & $READONLY sections in the
  7. $! map-file by J. Jansen (joukj@hrem.stm.tudelft.nl)
  8. $!
  9. $ SET SYMBOL/GENERAL/SCOPE=(NOLOCAL,NOGLOBAL)
  10. $ SAY := "WRITE_ SYS$OUTPUT"
  11. $
  12. $ IF F$SEARCH("''P1'") .EQS. ""
  13. $ THEN
  14. $ SAY " ANALYZE_MAP.COM: Error, no mapfile provided"
  15. $ EXIT_
  16. $ ENDIF
  17. $ IF "''P2'" .EQS. ""
  18. $ THEN
  19. $ SAY " ANALYZE_MAP.COM: Error, no output file provided"
  20. $ EXIT_
  21. $ ENDIF
  22. $
  23. $ LINK_TMP = F$PARSE(P2,,,"DEVICE")+F$PARSE(P2,,,"DIRECTORY")+F$PARSE(P2,,,"NAME")+".TMP"
  24. $
  25. $ SAY " checking PSECT list in ''P2'"
  26. $ OPEN_/READ IN 'P1'
  27. $ LOOP_PSECT_SEARCH:
  28. $ READ_/END=EOF_PSECT IN REC
  29. $ LOOP_PSECT_SEARCH0:
  30. $ if F$EXTRACT(0,5,REC) .eqs. "$DATA" .or. F$EXTRACT(0,5,REC) .eqs. -
  31. "$BSS$" .or. f$extract(0,10,rec) .eqs. "$READONLY$" then goto do_data
  32. $ if F$EXTRACT(0,14,REC) .eqs. "$READONLY_ADDR" then goto do_readonly
  33. $ goto LOOP_PSECT_SEARCH
  34. $ do_data:
  35. $ LAST = ""
  36. $ LOOP_PSECT:
  37. $ READ_/END=EOF_PSECT IN REC
  38. $ if F$EXTRACT(0,1,REC) .eqs. "$" .and. F$EXTRACT(0,5,REC) .nes. "$DATA" -
  39. .and. F$EXTRACT(0,5,REC) .nes. "$BSS$" .and. f$extract(0,10,rec) -
  40. .nes. "$READONLY$" then goto LOOP_PSECT_SEARCH0
  41. $ if REC - "NOPIC,OVR,REL,GBL,NOSHR,NOEXE, WRT,NOVEC" .nes. REC
  42. $ then
  43. $ J = F$LOCATE(" ",REC)
  44. $ S = F$EXTRACT(0,J,REC)
  45. $ IF S .EQS. LAST THEN GOTO LOOP_PSECT
  46. $ P$_'S= 1
  47. $ LAST = S
  48. $ endif
  49. $ if REC - "NOPIC,OVR,REL,GBL,NOSHR,NOEXE,NOWRT,NOVEC" .nes. REC
  50. $ then
  51. $ J = F$LOCATE(" ",REC)
  52. $ S = F$EXTRACT(0,J,REC)
  53. $ IF S .EQS. LAST THEN GOTO LOOP_PSECT
  54. $ P$_'S= 1
  55. $ LAST = S
  56. $ endif
  57. $ GOTO LOOP_PSECT
  58. $
  59. $ do_readonly:
  60. $ LAST = ""
  61. $ LOOP_PSECT3:
  62. $ READ_/END=EOF_PSECT IN REC
  63. $ if F$EXTRACT(0,1,REC) .eqs. "-" .or. F$EXTRACT(0,3,REC) .eqs. "NL:" then -
  64. goto loop_psect3
  65. $ if F$EXTRACT(0,1,REC) .eqs. "$" .and. F$EXTRACT(0,14,REC) .nes. -
  66. "$READONLY_ADDR" then goto LOOP_PSECT_SEARCH0
  67. $ if REC - "OCTA" .nes. REC
  68. $ then
  69. $ J = F$LOCATE(" ",REC)
  70. $ S = F$EXTRACT(0,J,REC)
  71. $ IF S .EQS. LAST THEN GOTO LOOP_PSECT3
  72. $ P$_'S= 1
  73. $ LAST = S
  74. $ endif
  75. $ GOTO LOOP_PSECT3
  76. $
  77. $ EOF_PSECT:
  78. $ CLOSE_ IN
  79. $
  80. $ SAY " appending list of UNIVERSAL procedures to ''P2'"
  81. $ SEARCH_/NOHIGH/WINDOW=(0,0) 'P1' " R-"/OUT='LINK_TMP
  82. $ OPEN_/READ IN 'LINK_TMP
  83. $ OPEN_/write OUT 'P2'
  84. $ WRITE_ OUT "!"
  85. $ WRITE_ OUT "! ### UNIVERSAL procedures and global definitions extracted from ''P1'"
  86. $ WRITE_ OUT "!"
  87. $ write_ OUT "case_sensitive=YES"
  88. $ LOOP_UNIVERSAL:
  89. $ READ_/END=EOF_UNIVERSAL IN REC
  90. $ J = F$LOCATE(" R-",REC)
  91. $ S = F$EXTRACT(J+3,F$length(rec),REC)
  92. $ J = F$LOCATE(" ",S)
  93. $ S = F$EXTRACT(0,J,S)
  94. $ PP$_'S= 1
  95. $ IF F$TYPE(P$_'S').EQS.""
  96. $ THEN
  97. $ WRITE_ OUT "symbol_vector = ("+S+" = PROCEDURE)"
  98. $ ELSE
  99. $ WRITE_ OUT "symbol_vector = ("+S+" = DATA)"
  100. $ ENDIF
  101. $ GOTO LOOP_UNIVERSAL
  102. $ EOF_UNIVERSAL:
  103. $ CLOSE_ IN
  104. $ CLOSE_ OUT
  105. $!
  106. $ SAY " creating PSECT list in ''P2'"
  107. $ OPEN_/READ IN 'P1'
  108. $ OPEN_/append OUT 'P2'
  109. $ WRITE_ OUT "!"
  110. $ WRITE_ OUT "! ### PSECT list extracted from ''P1'"
  111. $ WRITE_ OUT "!"
  112. $ LOOP_PSECT_SEARCH1:
  113. $ READ_/END=EOF_PSECT1 IN REC
  114. $ if F$EXTRACT(0,5,REC) .nes. "$DATA" .and. F$EXTRACT(0,5,REC) .nes. -
  115. "$BSS$" .and. f$extract(0,10,rec) .nes. "$READONLY$" then goto -
  116. LOOP_PSECT_SEARCH1
  117. $ LAST = ""
  118. $ LOOP_PSECT1:
  119. $ READ_/END=EOF_PSECT1 IN REC
  120. $ if F$EXTRACT(0,1,REC) .eqs. "$" .and. F$EXTRACT(0,5,REC) .nes. "$DATA" -
  121. .and. F$EXTRACT(0,5,REC) .nes. "$BSS$" .and. f$extract(0,10,rec) -
  122. .nes. "$READONLY$" then goto LOOP_PSECT_SEARCH1
  123. $ if REC - "NOPIC,OVR,REL,GBL,NOSHR,NOEXE, WRT,NOVEC" .nes. REC
  124. $ then
  125. $ J = F$LOCATE(" ",REC)
  126. $ S = F$EXTRACT(0,J,REC)
  127. $ IF S .EQS. LAST THEN GOTO LOOP_PSECT1
  128. $ IF F$TYPE(PP$_'S').nes."" then WRITE_ OUT "symbol_vector = (" + S + " = PSECT)"
  129. $ P$_'S= 1
  130. $ LAST = S
  131. $ endif
  132. $ if REC - "NOPIC,OVR,REL,GBL,NOSHR,NOEXE,NOWRT,NOVEC" .nes. REC
  133. $ then
  134. $ J = F$LOCATE(" ",REC)
  135. $ S = F$EXTRACT(0,J,REC)
  136. $ IF S .EQS. LAST THEN GOTO LOOP_PSECT1
  137. $ IF F$TYPE(PP$_'S').nes."" then WRITE_ OUT "symbol_vector = (" + S + " = PSECT)"
  138. $ P$_'S= 1
  139. $ LAST = S
  140. $ endif
  141. $ GOTO LOOP_PSECT1
  142. $
  143. $ EOF_PSECT1:
  144. $ CLOSE_ IN
  145. $ CLOSE_ OUT
  146. $ if f$search("''LINK_TMP'") .nes. "" then DELETE_/NOLOG/NOCONFIRM 'LINK_TMP';*
  147. $
  148. $ EXIT_