*DECK     MAP 
          IDENT  MAP
 MAP      SECT   (LISTING ROUTINES -- PASS 2 = MAP.),1
  
          SST    A,B,D
          NOREF  A,B,D
  
 B=MAP    RPVDEF             DEFINE ROUTINE FWA FOR REPRIEVE UTILITY
  
          ENTRY  WVM,LPS.PL,FIN.OL,WVBD 
  
*         IN FTN
          EXT    CO.SNAP,LCP.PS,F.RMAP,LOP=R,O.STITL
  
*         IN TABLES 
          EXT    CDD,COD,FAILSFT,LCNT,LINEBUF,LOSTREF 
          EXT    N.TABLE,NREXT,PASS,REFIO,TN=BLK,TS=STN 
          EXT    TN.EXT,TN.BLK,TP.DIM 
          EXT    TS=BLK,TS=ENT,TS=SYM,TS.BLK
          EXT    TS.STN,TS.SYM,TS.ENT,TT=REF,TT.REF 
          EXT    TA=NAM,TA.NAM,TN=EXT 
          EXT    SFN,LJS
  
*         IN ERRORS 
          EXT    CLASS,L.CL 
  
*         IN END
          EXT    WVMX 
  
*         IN ALLOC
          EXT    DSRT,MVE,SRT 
  
*         IN MAIN 
          EXT    WBL,WOF
  
*         IN INIT 
          EXT    SCR
  
 WVM      SPACE  4,8
**        WVM -  WRITE VARIABLE MAP 
*         EXIT   INTO *END*.
*         USES   ALL REGISTERS. 
  
  
 WVM      BSS    0           ENTRY... 
          SA1    FAILSFT
          NZ     X1,WVMX     NO MAP IF TABLES CRUMPED 
 WVM      SPACE  4,8
**        IF BL PARAMETER SELECTED, PAGE EJECT BEFORE REF MAP.
  
          SA1    =XCP.BLF 
          ZR     X1,WVB      IF BL NOT SELECTED 
          SA2    LCP.PS 
          BX7    X2 
          SA7    LCNT        FORCE EJECT WITH NEXT LINE PRINTED 
 WVB      SPACE  4,8
**        WVB -  OUTPUT COMMON BLOCKS.
  
  
 WVB      ALLOC  TS.BLK,2    FOR END OF TABLE MARK
          SB3    X2-4 
          SA1    TS.BLK 
          SA2    TS=BLK 
          SA3    =1H
          IX0    X1+X2
          BX6    0
          LX7    X3 
          SA7    X1          RESET NAME OF -PROGRAM- BLOCK
          =X7    X1+2 
          SA6    X0-2        MARK END OF TABLE
          SB4    WVBA 
          SA7    WVBD        SAVE FWA OF COMMON BLOCKS
          IX7    X0-X7       NUMBER OF REAL BLOCKS (* 2)
          SA3    =XCP.PW
          ZR     B3,WVBX     IF NO COMMON BLOCKS
          SA7    A7+B1       SAVE WORD COUNT OF COMMON BLOCKS 
          SX7    X7+6 
          SX5    4
          ZR     X3,WVB1A    IF NOT IN PW MODE
          SX5    X3 
          AX5    1
 WVB1A    RJ     LSH
  
**        CONVERT BLOCK NAMES TO LISTABLE FORMAT. 
  
          SA1    =XBLNKCOM
          SA4    WVBD 
          SX1    X1-2 
          IX3    X4+X1
          SB7    X3          ADDRESS OF BLANK COMMON (IF ANY) 
          SA5    X4 
          SA4    =1A/ 
          MX0    -1 
          SA2    =40404040404040404040B 
          SA1    =10H////////// 
          SB3    60-CHAR+1
          =B2    2
  
 WVB2     SB4    A5-B7
          ZR     B4,WVB3     IF BLANK COMMON
          IX7    X5+X0       LOCATE LOWEST BIT
          BX3    -X7+X5 
          BX7    X2*X3       40 WHERE CHARACTERS WERE 
          LX3    X7,B3
          IX6    X7-X3
          IX7    X7+X6       77 WHERE CHARACTERS WERE 
          BX6    -X7*X1 
          AX7    CHAR        EXTEND MASK FOR ONE MORE CHAR
          BX3    -X7*X4 
          IX6    X5+X6       APPEND TRAILING SLASHES
          BX5    X7*X6       DISCARD SUPERFLOUS SLASHES 
          IX7    X3+X5       SPACE FILL 
          LX7    -CHAR
          SA7    A5          SAVE FORMATTED NAME FOR WVV
 WVB3     SA5    A5+B2
          NZ     X5,WVB2     IF NOT LAST BLOCK
  
          SA3    WVBD+1      WORD COUNT 
          SA1    =XBLNKCOM
          ZR     X1,WVB3A    IF NO BLANK COMMON 
          SA5    =2H//
          LX7    X5 
          SA7    B7          SET NAME OF BLANK COMMON 
 WVB3A    ALLOC  TN.BLK,X3
          BX3    X1 
          SX1    X2+B1       ADJUST W.C. TO COPY THE ZERO WORD
          SA2    TS.BLK 
          =X2    X2+2 
          RJ     MVE         COPY BLOCK TABLE 
          SA1    TN.BLK 
          RJ     DSRT        SORT COPIED TABLE
          SA1    TN.BLK 
          SA5    X1 
  
          SA4    =XCP.PW
          SB4    WVB5 
          ZR     X4,WVB4     IF NOT IN PW MODE
          SB4    WVB5A
 WVB4     SB5    LINEBUF
          SA4    =1H
          SA1    =XCP.PW
          SB6    4
          =B3    2
          ZR     X1,WVB5     IF NOT IN PW MODE
          AX1    1
          SB6    X1 
          EQ     WVB5A
  
 WVB5     LX7    X4 
          SB5    B5+B1
          SA7    B5-B1
 WVB5A    SA1    A5+B1
          SB6    B6-B1
          MX0    -L.BLEN
          BX1    -X0*X1      ISOLATE BLOCK LENGTH 
          PIA                CONVERT LENGTH TO DPC
          SA6    B5 
          BX7    X5 
          SA5    A5+B3
          SA7    A6+B1
          SB5    A7+B1
          ZR     X5,WVB6     IF LAST BLOCK
          ZR     B6,WVB6
          JP     B4 
  
 WVB6     MX6    0
          SA6    B5 
          SB3    LINEBUF-1
          PLINE  LINEBUF,B5-B3
          NZ     X5,WVB4     IF MORE ENTRIES
  
 WVBX     SHRINK TN=BLK,0    EXIT.. 
 WVE      EJECT 
**        WVE -  LIST ENTRY POINTS AND EXTERNALS. 
  
  
 WVE      SA1    TS.ENT 
          RJ     SRT         SORT ENTRY POINT TABLE 
          SA2    TS=ENT 
          SB3    X2-1 
          LE     B3,WVE5     IF ONE OR FEWER ENTRY POINTS 
          SB4    WVEA 
          SX7    X2+3 
          SA1    =XCP.PW
          SX5    4
          SX1    X1 
          ZR     X1,WVE1     IF NOT IN PW MODE
          AX5    X1,B1
 WVE1     RJ     LSH         LIST SUB-HEADING 
          SA1    TS.ENT 
          SA2    TS=ENT 
          SA5    X1 
          SB4    X2          NUMBER OF ENTRY POINTS 
  
*         BEGIN NEW LINE. 
  
 WVE2     SA4    TA.NAM 
          SA1    =XCP.PW
          SB5    LINEBUF
          SX1    X1 
          SB3    X4 
          AX1    1
          SB6    X1 
          MX4    0
          NZ     X1,WVE3     IF IN PW MODE
          SA4    =1H
          SB6    4
  
*         BEGIN NEXT ITEM.
  
 WVE3     SB4    B4-B1
          SX0    X5 
          MI     B4,WVE4     IF TABLE EXHAUSTED 
          ZR     X4,WVE3A    IF IN PW MODE
          LX7    X4 
          =B5    B5+1 
          =A7    B5-1 
 WVE3A    BX1    X5-X0       ISOLATE NAME 
          AX0    1
          SB6    B6-B1
          RJ     SFN         SPACE FILL NAME
          SA1    X0+B3
          =A6    B5+1 
          SB5    A6+B1
          PIA                CONVERT ADDRESS TO DPC 
          SA5    A5+B1
          SA6    A6-B1
          NZ     B6,WVE3     IF MORE FOR THIS LINE
  
 WVE4     MX6    0
          SA6    B5 
          SB3    LINEBUF-1
          PLINE  LINEBUF,B5-B3
          GT     B4,WVE2     IF MORE ENTRIES
  
*         LIST OUT THE EXTERNALS. 
  
 WVE5     SA2    NREXT
          SHRINK TS=ENT,0 
          SX2    X2-1 
          SHRINK TN=EXT,X6
          ZR     X2,WVEX     IF NO EXTERNALS
          ALLOC  TN.EXT,X2
          SA3    TS.SYM 
          SA4    TA=NAM 
          MX2    L.SYM
          SB5    X1          FWA NEW EXTERNAL TABLE 
          SA3    X3+B1
          MX1    -1 
          =B3    3
          CLAS=  X0,EXT 
 WVE52    IX4    X4+X1       DECREMENT COUNT
          BX7    X0*X3
          SA3    A3+2 
          MI     X4,WVE54    IF TABLE EXHAUSTED 
          ZR     X7,WVE52    IF NOT EXTERNAL
          SA5    A3-B3
          BX6    X2*X5       MOVE NAME TO EXT TABLE 
          SA6    B5 
          SB5    B5+B1
          EQ     WVE52       LOOP.. 
  
 WVE54    SA1    TN.EXT 
          RJ     SRT         SORT EXTERNALS TABLE 
          SA2    TN=EXT 
          SB4    WVEC 
          SX7    X2+7 
          SA1    =XCP.PW
          SX5    8
          ZR     X1,WVE56    IF NOT IN PW MODE
          SX1    X1 
          AX5    X1,B1
 WVE56    RJ     LSH         LIST SUB-HEADING 
          SA1    TN.EXT 
          SA2    TN=EXT 
          SA5    X1 
          SB4    X2          NUMBER OF EXTERNALS
  
*         BEGIN NEW LINE. 
  
 WVE6     SA1    =XCP.PW
          SB6    X1 
          SA6    LINEBUF-1
          NZ     X1,WVE7     IF IN PW MODE
          SA4    =1H
          SB6    8
          BX6    X4 
          SA6    A6+1 
          SA6    A6+1 
  
*         BEGIN NEXT ITEM.
  
 WVE7     SB4    B4-B1
          BX1    X5 
          MI     B4,WVE8     IF TABLE EXHAUSTED 
          SB6    B6-B1
          RJ     SFN         SPACE FILL NAME
          SA6    A6+B1
          SA5    A5+B1
          NZ     B6,WVE7     IF MORE FOR THIS LINE
 WVE8     BX6    X6-X6
          SA6    A6+B1       MARK END OF LINE 
          SB3    LINEBUF-1
          PLINE  LINEBUF,A6-B3
          GT     B4,WVE6     IF MORE ENTRIES
 WVEX     BSS    0           EXIT.. 
 WVM      EJECT  4,8
**        OUTPUT SYMBOL AND LABEL MAPS AND X-REFS.
  
  
          RJ     PRT         PREPARE REFERENCE TABLES.
  
**        PROCESS STATEMENT LABELS. 
  
          SA2    TS=STN 
          SB4    WVSA 
          SB7    X2 
          LE     B7,B1,WVM5  IF NO LABELS 
          SA1    =XCP.PW
          SX7    X2+6 
          SX5    4
          ZR     X1,WVL1     IF NOT IN PW MODE
          SX2    X1-2 
          SX3    X2+B1       COMPUTE NO. OF ENTRIES/LINE
          LX4    X3,B1       CP.PW/3 = (X+1)*5/16 -- X.LT.17
          LX4    1
          IX5    X3+X4
          AX5    4
          SX5    X5+B1
 WVL1     RJ     LSH         LIST SUB-HEADING 
  
          SA1    WVS=RJ 
          =X6    4-1
          SA2    =XCP.PW
          ZR     X2,WVM4     IF NOT IN PW MODE
          SX2    X2-2 
          SX3    X2+B1       COMPUTE NO. OF ENTRIES PER LINE - 1
          LX4    X3,B1
          LX4    1
          IX6    X3+X4
          AX6    4           X6 = WVBT/3
 WVM4     RJ     WRM         WRITE REF MAP  (LABEL MAP) 
  
**        PROCESS VARIABLES.
  
 WVM5     SA2    TS=SYM 
          SB4    WVVA 
          SX7    X2+3 
          SB7    X2 
          SX5    B1+B1
          LE     B7,B1,WVMX  IF NO SYMBOLS
          SA1    =XCP.PW
          ZR     X1,WVM6     IF NOT IN PW MODE
          SX5    B1 
 WVM6     RJ     LSH         LIST SUB-HEADING 
  
          SA2    TS.SYM 
          SA3    TS=SYM 
          BX6    X2 
          LX7    X3 
          SA1    WVV=RJ 
          SA6    TS.STN      SWITCH TO SYMBOL TABLE 
          SA7    TS=STN 
          =X6    2-1
          SA2    =XCP.PW     IF CP.PW .EQ.0 THEN X6 = 1 
          ZR     X2,WVM7     IF NOT IN PW MODE
          SX2    X2-10
          BX3    -X2         ELSE IF WVBT .GE. 10 THEN X6=1 
          AX3    59 
          SX2    B1          ELSE X6=0
          BX6    X3*X2
 WVM7     RJ     WRM         WRITE REF MAP (SYMBOL MAP) 
          EQ     LPS         EXIT TO LIST PROGRAM STATISTICS
  
 WVS=RJ   RJ     WVS
 WVV=RJ   RJ     WVV
 WRM      EJECT  4,8
**        WRM -  WRITE REFERENCE MAP. 
* 
*         ENTRY  (TS STN) = POINTERS TO TABLE TO PROCESS. 
*                (X1) = RETURN JUMP TO FORMATTER INSTRUCTION. 
*                (X6) = NUMBER MINUS ONE OF ENTRIES PER LINE, IN NON-REF
*                       MODE.  WILL ALWAYS BE SET TO ONE IF REF MAP ON. 
*         USES   ALL BUT A0.
  
  
 WRM      SUBR               ENTRY/EXIT...
          SA2    LOP=R
          BX7    X1 
          AX2    -1          -0 IF REF ON, ELSE +0
          SA7    WRM.RJ 
          BX3    -X2*X6      +0          ,      (X6)
          =X6    X3+1         1          ,      (X6)+1
          SA6    SCR         SET ENTRIES PER LINE 
          RJ     WRM2-1      VOID STACK 
 +        PS
  
 WRM2     SA3    SCR         FETCH ENTRIES PER LINE 
          SB5    LINEBUF
          BX6    X3 
          SA4    =1H
          =A6    A3+1        RESET LOOP COUNT 
  
 WRM4     SA1    TS=STN 
          SA2    TS.STN 
          =X0    2
          IX6    X2+X0
          SA5    X2          FETCH TABLE ENTRY
          IX7    X1-X0       DECREMENT LENGTH OF TABLE
          SA6    A2 
          ZR     X1,WRM6     IF TABLE EXHAUSTED 
          SA7    A1 
 WRM.RJ   RJ     **          FORMAT SYM OR LAB FOR LISTING
          SA2    SCR+1
          SX7    X2-1        DECREMENT LOOP COUNT 
          SA7    A2 
          NZ     X7,WRM4     IF MORE FOR THIS LINE
          =A5    A5-1 
          SA1    =XCP.PW
          SX5    X5 
          SB2    LINEBUF+12 
          SB6    B2-B5
          ZR     X1,WRM5     IF NOT IN PW MODE
          SB2    LINEBUF+X1 
          SB6    B2-B5
          EQ     B6,WRM6     IF LINE FILLED 
  
 WRM5     RJ     FXR         FORMAT X-REF 
 WRM6     SA1    =XCP.PW
          ZR     X1,WRM6A    IF NOT IN PW MODE
          SA2    B5-B1
          IX0    X2-X4
          NZ     X0,WRM6A    IF WORD NOT BLANK
          SB5    B5-B1
          EQ     WRM6 
  
 WRM6A    MX6    0
          SA6    B5          MARK END OF LINE 
          SB3    LINEBUF-1
          PLINE  LINEBUF,B5-B3
          SA1    =1H
          SA3    =XCP.PW
          LX6    X1 
          SB5    LINEBUF+5
          SA6    LINEBUF
          SB6    7
          ZR     X3,WRM7     IF NOT IN PW MODE
          SB5    LINEBUF+1
          =B6    X3-1 
          EQ     WRM8 
  
 WRM7     =A6    B5-1        BLANK LINEBUF+4
          =A6    A6-1        BLANK LINBUF+3 
          =A6    A6-1        BLANK LINBUF+2 
          =A6    A6-1        BLANK LINBUF+1 
 WRM8     NZ     X5,WRM5     IF (MORE) REF CHAIN
  
          SA2    TS=STN 
          NZ     X2,WRM2     IF TABLE NOT EXHAUSTED 
          EQ     EXIT.
 WVS      EJECT  4,8
**        WVS -  FORMAT STATEMENT LABEL FOR MAP.
* 
*         ENTRY  (B5) _ FWA TO STORE. 
*                (A5) _ TS.STN ENTRY TO PROCESS.
*                (X5) = ((A5))
*                (X4) = 10H 
* 
*         EXIT   (B5) _ LAST ADDRESS + 1 STORED INTO. 
*                (X4) PRESERVED.
  
  
 WVS      SUBR               ENTRY/EXIT...
          SA1    =XCP.PW
          SB2    LINEBUF
          AX5    P.STN
          BX7    X4 
          ZR     X1,WVS30    IF NOT IN PW MODE
          EQ     B5,B2,WVS32 IF AT BEGINNING OF LINE
 WVS30    SA7    B5 
          SB5    B5+B1
 WVS32    RJ     LJS         LEFT JUSTIFY STATEMENT LABEL 
          =A5    A5+1        FETCH TAG ENTRY
          LX6    -CHAR
          BX1    0
          IFBIT  X5,-SNFMT,WVS34
          SX1    1RF&1R 
 WVS34    IFBIT  X5,-SNDOT/SNFMT,WVS36
          SX1    1RD&1R 
 WVS36    IFBIT  X5,-SNINA/SNDOT,WVS38
          SX1    X1+2RI &2R 
 WVS38    BX6    X6-X1
          SA6    B5 
  
**        CONVERT AND FORMAT ADDRESS. 
  
          LX5    P.SNINA+1-P.SNAD 
          SX1    X5 
          PIA                CONVERT ADDRESS TO DPC 
          MX1    0
          IFBIT  X5,SNDEF/SNAD-1,WVS42
          SX1    2R  -2RU 
 WVS42    IX6    X6-X1
          LX6    -2*CHAR
          =A6    A6+1 
          =B5    A6+1 
          EQ     EXIT.
 WVV      EJECT  4,8
**        WVV -  OUTPUT VARIABLE ASSIGNMENTS. 
* 
*         ENTRY  (B5) _ FWA TO STORE. 
*                (A5) _ TS.SYM ENTRY TO PROCESS.
*                (X5) = ((A5))
*                (X4) = 10H 
* 
*         EXIT   (B5) _ LAST ADDRESS + 1 STORED INTO. 
*                (X4) PRESERVED.
  
  
 WVV      SUBR               ENTRY/EXIT...
          SX1    X5 
          BX1    X5-X1
          =A5    A5+1        FETCH TAG ENTRY
          RJ     SFN         G000ABCDEF 
          LX6    4*CHAR      DEFG000ABC 
          BX1    X5 
          SX7    X6 
          MX2    -L.MODE
          IX6    X6-X7
          BX0    -X2*X5 
          SA2    =7L
          LX5    -P.PNT 
          SA3    X0+WVVC     FETCH *TYPE* LETTER
          BX7    X2+X7
          IX6    X6+X3
          MX0    -L.PNT 
          BX2    -X0*X5      ISOLATE TP.DIM ORDINAL 
          SB3    X2 
          AX1    P.TAG+1
          SA2    TA.NAM 
          SB7    X1-C.VAR/2  ORDINAL OF ENTRY IN ADDRESS TABLE
          SA7    B5 
          BX0    X5 
          IFBIT  X5,-FP/PNT-1,WVV32 
          SX1    1RA&1R 
          BX6    X6-X1
 WVV32    IFBIT  X5,VAR/FP,WVV4 
  
**        HANDLE NON-VARIABLES HERE.
  
          IFBIT  X0,-NVAR/PNT-1,WVV42 
          =A6    A7+1 
          IFBIT  X5,-RP/VAR,WVV33  IF NOT RETURNS PARAMETER 
          SA3    CLASS+P.RP-P.DEF 
          LX5    P.RP+1      RESTORE (X5) 
          BX6    X4 
          EQ     WVV34
 WVV33    LX5    P.RP+1      RESTORE (X5) 
          CLAS=  X1,(INLINE,ASF,SUB,BEF,FUN,EXT,ENT)
          SBIT   X0,ENT/NVAR
          BX7    X1*X5
          NZ     X7,WVV33A   IF ONE OF ABOVE CLASSES
          SX1    M.NLST 
          BX1    X1*X5
          NZ     X1,WVV33A   IF NAMELIST
  
**        LIST NO CLASSES IF NO CLASS BIT ON.  THIS INCLUDES CASE OF
*         FILE NAME WHEN LINKAGE SUPPRESSED (*SYSEDIT* PARAMETER).
  
          LX6    X4 
          BX7    X4          KIND OF NVAR = BLANK 
          EQ     WVV38
  
 WVV33A   NX1,B2 X7 
          SB3    CLASS-P.CLASS2+47
          SB3    B3+L.CL
          SA3    B3-B2
          BX6    X4 
          PL     X0,WVV35    IF NOT ENTRY POINT 
 WVV34    SA2    X2+B7       FETCH ADDRESS TABLE ENTRY
          SX1    X2 
          PIA                CONVERT ADDRESS TO DPC 
  
 WVV35    LX6    -CHAR
          SX2    1S6
          BX1    X2*X3
          ZR     X1,WVV37    IF NO WEIRD CHARACTER
          MX2    -CHAR
          SX1    1R 
          BX3    X2*X3       REMOVE WEIRD CHARACTER 
  
 WVV37    BX7    X3+X1
  
 WVV38    =A6    A6+1        = ADDRESS
          =A7    A6+1        BLOCK = KIND OF NVAR 
          BX6    X4 
          =A6    A7+1        ARY LEN = BLANK
          =B5    A6+1 
          EQ     EXIT.
  
**        CONVERT AND FORMAT ADDRESS+/BLOCK/. 
  
 WVV4     IFBIT  X0,-EQUIV/PNT-1,WVV42
          SX1    1R#&1R 
          BX6    X6-X1
 WVV42    =A6    A7+1 
          SA3    X2+B7       FETCH ADDRESS TABLE ENTRY
          SX1    X3 
          LX3    -P.BLOCK 
          PIA                CONVERT ADDRESS TO DPC 
          BX1    0
          IFBIT  X5,DEF/VAR,WVV44  IF DEFINED 
          LX0    X5 
          IFBIT  X0,FP/DEF,WVV44  IF FORMAL PARAMETER 
          SX1    1RU&1R 
 WVV44    BX6    X6-X1
          LX6    -CHAR
          SA1    TS.BLK 
          =A6    A6+1 
          IX0    X3+X1
          SA1    TP.DIM 
          SA2    X0          FETCH BLOCK NAME 
          MX0    -L.DIMLG 
          BX7    X2 
          SA2    X1+B3       FIRST DIM WORD 
          =A7    A6+1 
  
**        FORMAT ARRAY SIZE.
  
          BX6    X4 
          IFBIT  X5,-ARY/DEF,WVV5 
          LX2    -P.DIMLG 
          BX1    -X0*X2 
          SBIT   X2,VDIM/DIMLG-1
          PL     X2,WVV46    IF NOT VARIABLY DIMENSIONED
          SA2    =10HVAR-DIM
          BX6    X2 
          EQ     WVV5 
  
 WVV46    RJ     CDD         CONVERT DECIMAL DIGITS (ARRAY LENGTH)
          SB2    B2-9*CHAR
          SA4    A4 
          AX6    B2          LEFT JUSTIFY 
  
 WVV5     =A6    A7+1 
          =B5    A6+1 
          EQ     EXIT.
  
  
 WVBA     DATA   18C --COMMON BLOCKS--
 WVEA     DATA   17C --ENTRY POINTS-- 
 WVEC     DATA   14C --EXTERNALS--
 WVSA     DATA   21C --STATEMENT LABELS-- 
 WVVA     DATA   17C --VARIABLE MAP-- 
 WVBD     BSS    2           TEMP HOLDING FOR NUM OF BLOCKS 
  
 WVVC     BSS    0           *TYPE* LETTERS 
          LOC    M.UNIV 
          DATA   3R-
          DATA   3RL
          DATA   3RI
          DATA   3RR
          DATA   3RD
          DATA   3RZ
          DATA   3RN
          DATA   3R 
          LOC    *O 
 FXR      SPACE  4,8
**        FXR -  FORMAT CROSS REFERENCES. 
* 
*         ENTRY  (X5) = LINK TO REFERENCE CHAIN.
*                (B5) _ FWA TO STORE. 
*                (B6) = LIMIT ON NUMBER OF REFS.
* 
*         EXIT   (B5) _ LWA+1 STORED INTO.
*                (X5) = NEXT LINK.
* 
*         USES   ALL BUT A0.
*         WILL NOT MOVE TABLES. 
  
  
 FXR      SUBR               ENTRY/EXIT...
          SA1    TT.REF 
          SX5    X5          ISOLATE LINK 
          SB4    X1          (B4) = FWA REFS
  
 FXR2     ZR     X5,EXIT.    IF END OF THIS REFERENCE CHAIN 
          SA5    X5+B4       FETCH A REFERENCE
          MX0    -L.CRUSE 
          BX7    -X0*X5      ISOLATE USAGE LETTER 
          AX5    P.CRLIN
          MX0    -L.CRLIN 
          BX1    -X0*X5      ISOLATE LINE NUMBER
          RJ     CDD         CONVERT LINE NUMBER
          MX3    54 
          LX6    2*CHAR 
          BX4    X3*X6
          IX7    X7+X4       -----/LL U 
          AX5    P.TAG-P.CRLIN
          SX5    X5          ISOLATE LINK TO NEXT 
          SA7    B5          STORE FORMATTED REFERENCE
          =B5    B5+1 
          =B6    B6-1 
          GT     B6,FXR2     IF LINE NOT FULL 
          EQ     EXIT.
 LPS      SPACE  4,8
**        LPS - LIST PROGRAM-UNIT STATISTICS. 
* 
*         ENTRY  NONE 
*         EXIT INTO *END* 
  
  
 LPS      BSS    0           ENTRY
          SX7    B1 
          SX2    =XHDRBL
          LX7    30 
          BX7    X7+X2
          SA7    =XO.STITL   RESET SUBTITLE 
          SA1    =1H
          BX6    X1 
          SA6    LINEBUF+1
  
**        PREPARE STATISTICS
          SA1    FAILSFT
          NZ     X1,WVMX     IF TABLES CRUMBLED RETURN TO END 
  
          SA1    LOSTREF
          RJ     CDD         CONVERT NUMBER OF REFENCENCES
          LX6    CHAR 
          SA6    LPS.RF 
  
          SA3    LCNT 
          SA1    LCP.PS 
          IX7    X3-X1
          SB2    X7+ENDLINES
          MI     B2,LPS2     IF SUFFICIENT ROOM LEFT ON THIS PAGE 
          =X7    X1+1 
          SA7    A3 
 LPS2     SA1    =XCP.PW
          ZR     X1,LPS4     IF NOT IN PW MODE
          PLINE  LPSD,5,3 
          SA1    LOP=R
          PL     X1,WVMX     EXIT 
          PLINE  LPS.RF,2 
          EQ     =XWVMX      EXIT TO END
  
 LPS4     SA1    LOP=R
          SX2    5
          PL     X1,LPS5     IF SHORT MAP 
          SX2    2R 
          SA1    LPS.R0 
          BX6    X1+X2
          SA6    A1 
          SX2    8
 LPS5     PLINE  LPSD,X2,3
          EQ     =XWVMX      EXIT TO END
  
 TEST     IFNE   TEST,0 
 ENDLINES EQU    12 
 TEST     ELSE
 ENDLINES EQU    6
 TEST     ENDIF 
  
 LPSD     BSS    0
 LPS.PL   DIS    1,     NULL
          DIS    2,PROGRAM-UNIT LENGTH
 LPS.SY   DIS    1,(NR SYMS)
 LPS.R0   DIS    ,/ SYMBOLS/ END OF STATISTICS (R.LT.2) 
 LPS.RF   DIS    1,(TT=REF) 
          DIS    1,REFERENCES 
          CON    0           LINE TERMINATOR
 LSH      SPACE  4,15 
**        LSH -  LIST SUB HEADING.
* 
*         SETS UP NEW SUB-TITLE, AND THEN TRIES TO LIST 4 BLANK LINES,
*                THE NEW SUB-HEADING, AND 2 MORE BLANKS.  IF THIS WOULD 
*                LEAVE LESS THAN (X7) USABLE LINES REMAINING ON THE 
*                PAGE, NO PRINTING TAKES PLACE BUT AN EJECT IS FORCED.
*         ENTRY  (B4) _ FWA NEW SUB-TITLE (-C- FORMAT). 
*                (X5) = NUMBER OF ENTRIES PER LINE
*                (X7) = NUMBER OF ENTRIES 
*         EXIT   (B4) PRESERVED.
*                (X2) = OUA.
*                SUB-TITLE RESET. 
*         IF (X7)  \ EJECT, WILL ALWAYS CAUSE PAGE EJECT. 
*         IF (X7) @ -7, WILL NEVER PAGE EJECT.
* 
*         USES A1-A4,A6,A7  X5  B2,B3,B5-B7 
*         CALLS  WRITEC, WRITEW.
  
  
 LSH8     SA1    LCP.PS 
          =X6    X1+1 
          SA6    LCNT 
          ZR     X4,LSHX     IF NOT IN PW MODE
          PLINE  B4,B3
          PLINE  ,,2
  
 LSH      SUBR   X           ENTRY/EXIT.. 
          SA3    LCNT 
          MX4    12 
          SX6    B1+B1
          SA1    B4+B1
          LX4    12 
          BX4    X4*X1
          ZR     X4,LSH3     IF NOT LONG SUBTITLE 
          SX6    X6+B1
 LSH3     SB3    X6 
          LX6    30 
          SX1    B4 
          IX6    X6+X1
          SA6    =XO.STITL
          SA4    =XCP.PW
          SA2     LCP.PS
          IX1    X3-X2
          SB6    X1+10
          MI     B6,LSH4     IF MORE THAN 10 LINES REMAINING ON PAGE
          PX1    X7 
          PX5    X5 
          NX1    X1 
          NX5    X5 
          FX1    X1/X5
          UX1    X1 
          IX7    X1+X3
          IX6    X7-X2
          SB7    X6+6 
          PL     B7,LSH8     IF TABLE WILL NOT FIT ON PAGE
 LSH4     PLINE  B4,B3,2
          PLINE  ,,1
          EQ     LSHX        EXIT.. 
 PRT      SPACE  4,8
**        PRT -  PREPARE REFERENCE TABLE. 
* 
* 
*         EXIT   REFERENCE LINKS SET UP (IF SELECTED).
*                TABLES SQUEEZED AND SORTED.
* 
*         USES   ALL BUT A0.
*         CALLS  PST. 
  
  
 PRT      SUBR               ENTRY/EXIT...
          SA1    LOP=R
          =X6    PASS=MAP 
          PL     X1,PRT2     IF REF-MAP NOT SELECTED
          SA6    PASS 
          SA3    REFIO
          ZR     X3,PRT2     IF TABLE IN CORE 
  
**        READ REFERENCE TABLE BACK INTO CORE 
  
          SX0    B4          SAVE (B4)
          WRITER F.RMAP 
          REWIND F.RMAP 
          SB4    X0          RESTORE (B4) 
          SA2    LOSTREF
          ALLOC  TT.REF,X2
  
          IFNE   CP#RM,7,1
          READ   F.RMAP 
  
          SA1    TT.REF 
          SA3    TT=REF 
          SX0    B4          SAVE (B4)
          READW  F.RMAP,X1,X3 
          SB4    X0          RESTORE (B4) 
  
**        PRE-LOAD REGISTERS, AND CLEAR LINKS FROM SYMBOL AND LABEL 
*                TABLES.
  
 PRT2     SA1    TS.SYM 
          =X6    PASS=END 
          SA6    PASS 
          SA2    TS.STN 
          SA4    TS=SYM 
          SA3    X1 
          SB5    X1          (B5) = FWA SYMBOL TABLE
          SB6    X2          (B6) = FWA LABEL  TABLE
          MX0    L.SYM
          =B2    2
          SB7    X4          LENGTH SYM TAB 
          BX6    X0*X3
  
 PRT23    SA6    A3          CLEAR LINKS FROM SYM TAB 
          SA3    A3+B2
          SB7    B7-B2
          BX6    X0*X3
          PL     B7,PRT23 
  
          SA3    B6 
          SA5    TS=STN 
          SB7    X5          LENGTH LAB TAB 
          BX6    X0*X3
  
 PRT26    SA6    A3          CLEAR LINKS FROM LAB TAB 
          SA3    A3+B2
          SB7    B7-B2
          BX6    X0*X3
          PL     B7,PRT26 
  
**        LINK SYMBOLS AND LABELS INTO  THE REFERENCES. 
  
          SA1    TT=REF      (X1) = LEN REF TABLE 
          SA4    TT.REF 
          ZR     X1,PRT5     IF REF TABLE EMPTY 
          =X6    X1+1 
          =X7    X4-1 
          SB4    X7 
          MX0    L.TAG
          SA6    A1 
          SB7    -C.STAT-1
          SA7    A4          FAKE UP INITIAL ENTRY, TO PREVENT ZERO LINK
          SB5    B5+C.STAT-C.VAR
          SA5    B4+X1
  
 SNAP=R   IFNE   TEST        DMP REFERENCE TABLE
          SA3    CO.SNAP
          LX3    1RR
          PL     X3,PRT3S    IF REFERENCE SNAP NOT SELECTED 
          DUMPT  (TT.REF) 
 PRT3S    BSS    0
 SNAP=R   ENDIF 
  
 PRT4     BX6    -X0*X5 
          LX5    -P.TAG 
          SX3    X5+B7
          SB3    X3+B6
          PL     X3,PRT42    IF LABEL 
          SB3    X3+B5
 PRT42    SA2    B3          FETCH SYMBOL OR LABEL
          SX4    X2          ISOLATE SYM LINK 
          BX3    X2-X4
          LX4    P.TAG
          =A5    A5-1 
          IX6    X6+X4       LINK THIS REF TO PREVIOUS CHAIN
          BX7    X3+X1       SYM/LAB LINKS TO THIS REF
          SA6    B4+X1
          SX1    A5-B4       (X1) = (X1) - 1
          SA7    A2 
          NZ     X1,PRT4     IF MORE REFERENCES 
  
**        SQUEEZE OUT EMPTY ENTRIES, AND SORT THE TABLES. 
  
 PRT5     SA1    TS.STN 
          RJ     PST         SQUEEZE AND SORT 
  
          SA1    TS.SYM 
          RJ     PST         SQUEEZE AND SORT 
  
          SA3    TS=SYM 
          SA2    TS=STN 
          IX0    X2+X3
          AX1    X0,B1
          RJ     CDD         CONVERT NUMBER OF SYMBOLS
          SA6    LPS.SY 
  
 SNAP=R   IFNE   TEST        DUMP REFERENCE TABLE 
          SA3    CO.SNAP
          LX3    1RR
          PL     X3,PRT5S    IF REFERENCE SNAP NOT SELECTED 
          DUMPT  (TS.STN,TS.SYM)
 PRT5S    BSS    0
 SNAP=R   ENDIF 
          EQ     EXIT.
 PST      SPACE  4,8
**        PST -  PREPARE REFERENCE TABLE. 
* 
*         ENTRY  (A1) _ TABLE TO BE PREPARED (TS.SYM OR TS.STN).
*                (X1) = ((A1))
* 
*         EXIT   TABLE SQUEEZED AND SORTED. 
* 
*         USES   ALL BUT A0.
*         CALLS  DSRT.
  
  
 PST4     BX7    X5 
          SA7    A2          RESET TABLE LENGTH 
          RJ     DSRT 
  
 PST      SUBR               ENTRY/EXIT...
          SA2    A1+N.TABLE 
          =X0    2
          =B2    2
          SA3    X1-2 
          SB7    X2 
          BX6    X3 
          MX5    0
          SA6    A3 
  
 PST3     SA3    A3+B2
          ZR     B7,PST4     IF TABLE EXHAUSTED 
          SB7    B7-B2
          ZR     X3,PST3    IF NULL ENTRY, AVOID..
          SA4    A3+B1
          BX6    X3 
          IX5    X5+X0       COUNT VALID ENTRIES
          LX7    X4 
          SA6    A6+B2
          SA7    A6+B1
          EQ     PST3       LOOP..
 ENTRY    SPACE  4,8
          LIST   D
 FIN.OL   END                END OF (1,0) OVERLAY WHEN OBJECT LIST OFF
