*DECK MALET40 
          IDENT  MALET40
          LCC    OVERLAY(4,0,C000000) 
*CALL,VERS
          COMMENT OVERLAY FOR MALET  "VERS" 
          TITLE  MALET40 - GLOBAL CROSS-REFERENCE PROCESSOR 
*CALL ASSYTAG 
          EJECT 
          TITLE 
*CALL MALMAC
* 
*         OVERLAY SUBROUTINE ENTRY TABLE
* 
*                - MUST LOAD AT FRONT OF OVERLAY
* 
          USE    /ENTRY40/
 ENTRIES  SET    1
* 
*         LINKAGE CALLS TO MALET40
* 
 XREFG    LINK
          USE    *
* 
*         SUBROUTINES IN LOWER LEVEL OVERLAYS 
* 
          EXT    CVTDIS 
          EXT    PRINT
* 
*         DATA AREAS IN MALET00 
* 
          EXT    BLANKS 
          EXT    CNTLINE
          EXT    CNTMAX 
          EXT    FXREF
          EXT    ZZZXREF
          EXT    XRBUFM 
          EXT    XRBUF
          EXT    LXRBUF 
  
          EJECT 
 XREFG    TITLE  XREFG - GLOBAL CROSS REFERENCE 
**        XREFG - GLOBAL CROSSREFERENCE 
* 
*         K.B.SMITH.  78/05/17
* 
*         XREFG SORTS GLOBAL CROSSREFERENCE DATA WRITTEN BY XREFM 
*         AND PRINTS A GLOBAL CROSS REFERENCE LISTING.
* 
*         ROUTINES CALLED - 
* 
*         DATA AREAS USED - 
* 
*         USES   A
*                X
*                B
  
**        STEP -01- CLOSE ZZZXREF AND SET GLOBAL CROSSREFERENCE INACTIVE
* 
  
 XREFG    DATA   0           ENTRY/EXIT 
          SA1    FXREF
          SX2    X1-1 
          NZ     X2,XRG1           IF GLOBAL DATA WAS WRITTEN 
          CLOSE  ZZZXREF,RETURN 
          EQ     XREFG
 XRG1     CLOSE  ZZZXREF,,RECALL
  
**        STEP -02- INITIALIZE SORT FILES 
* 
          OPEN   ZZZXREF,READ,RECALL
          REWIND ZZZXREF,R
 XRG2A    OPEN   ZZZXRA,READ,RECALL 
          REWIND ZZZXRA,R 
          OPEN   ZZZXRB,WRITE,RECALL
          REWIND ZZZXRB,R 
  
**        STEP -03- GET NEXT RECORD FROM SORTED FILE
* 
 XRG3     SA1    XRAFULL
          NZ     X1,XRG4           IF BUFFER ALREADY FULL 
          SA1    XRASTAT
          NG     X1,XRG4           IF EOI ALREADY DETECTED
          MX2    18 
          BX6    -X2
          SA6    XRAMOD            SET DEFAULT MODULE NAME
          SA6    XRAITEM           SET DEFAULT ITEM NAME
          IFEQ   NOS,1
          READ   ZZZXRA 
          READW  ZZZXRA,XRASTAT,1      READ RECORD LENGTH 
          NG     X1,XRG3A          IF EOI 
          SA1    XRASTAT
          SX6    X1+XRAWA          CALC LWA+1 
          SA6    A1 
          READW  ZZZXRA,XRAWA,X1        READ RECORD 
          ENDIF 
          IFEQ   NOSBE,1
          SX6    XRASTAT
          SX7    X6+B1
          LX6    30 
          BX6    X6+X7
          SA6    ZZZXRA+5 
          READIN ZZZXRA            READ RECORD LENGTH 
          NG     X1,XRG3A          IF EOI 
          SA1    XRASTAT
          SX6    XRAWA
          IX7    X1+X6
          LX6    30 
          BX6    X6+X7
          SA6    ZZZXRA+5          READ RECORD
          SA7    A1 
          READIN ZZZXRA 
          ENDIF 
          PL     X1,XRG3B 
 XRG3A    BX6    X1 
          SA6    XRASTAT           SAVE READ STATUS 
          EQ     XRG4              EOI(NO DATA WAS READ)
 XRG3B    SX6    B1 
          SA6    XRAFULL           MARK BUFFER FULL 
          SA1    XRAWA
          MX7    42 
          BX6    X7*X1             UNPACK MODULE NAME 
          LX6    42 
          SA6    XRAMOD 
          SA1    A1+B1             UNPACK ITEM NAME 
          BX6    X7*X1
          LX6    42 
          SA6    XRAITEM
  
**        STEP -04- GET NEXT RECORD FROM UNSORTED FILE
* 
 XRG4     SA1    ZZFULL 
          NZ     X1,XRG5           IF BUFFER ALREADY FULL 
          SA1    ZZSTAT 
          NG     X1,XRG5           IF EOI ALREADY DETECTED
          SA1    ZZFWA
          SA2    ZZLWA
          IX3    X2-X1
          NZ     X3,XRG4D          IF DATA TO UNPACK
          MX6    0
          SA6    ZZMOD
          SA6    ZZITEM            SET DEFAULT ITEM,MODULE
          IFEQ   NOS,1
          READ   ZZZXREF
          READW  ZZZXREF,XRBUFM,LXRBUF+1
          ENDIF 
          IFEQ   NOSBE,1
          SX6    XRBUFM 
          SX7    X6+LXRBUF+1
          LX6    30 
          BX6    X6+X7             DEFINE WORK AREA IN FET
          SA6    ZZZXREF+5
          READIN ZZZXREF
          ENDIF 
          BX6    X1 
          SA6    ZZSTAT            SAVE READ STATUS 
          NG     X6,XRG5           IF EOI(NO DATA WAS READ) 
          NZ     X6,XRG4C          IF PART BUFFER READ
          SX6    XRBUF
          SX6    X6+LXRBUF
 XRG4C    SA6    ZZLWA
          SX6    XRBUF
          SA6    ZZFWA
          SA1    XRBUFM 
          MX7    42 
          BX6    X7*X1
          LX6    42 
          SA6    ZZMOD             UNPACK MODULE NAME 
 XRG4D    SA1    ZZFWA
          SA2    ZZLWA
          IX3    X2-X1
          ZR     X3,XRG4           IF EMPTY RECORD
          SA1    X1 
          MX7    42 
          BX6    X1*X7
          LX6    42 
          SA6    ZZITEM            UNPACK ITEM NAME 
          SX6    B1 
          SA6    ZZFULL            SET BUFFER FULL
  
**        STEP -05- IF UNSORTED DATA FOLLOWS SORTED DATA, THEN
*                   STEP 9, ELSE STEP 6.
* 
 XRG5     SA1    XRAITEM
          SA2    ZZITEM 
          IX3    X2-X1
          NG     X3,XRG6           IF UNSORTED PRECEEDS SORTED ITEM 
          NZ     X3,XRG9           IF SORTED DATA IS NEXT 
          SA1    XRAMOD 
          SA2    ZZMOD
          IX3    X2-X1
          PL     X3,XRG9           IF SORTED DATA IS NEXT 
  
**        STEP -06- IF UNSORTED DATA SHOULD PRECEED DATA ALREADY
*                   OUTPUT, THEN STEP 8 ELSE STEP 7.
* 
 XRG6     SA1    XRBITEM
          SA2    ZZITEM 
          IX3    X2-X1
          NG     X3,XRG8           IF UNSORTED BEFORE LAST DATA OUTPUT
          NZ     X3,XRG7           IF UNSORTED NEXT 
          SA1    XRBMOD 
          SA2    ZZMOD
          IX3    X2-X1
          NG     X3,XRG8           IF UNSORTED BEFORE LAST DATA OUTPUT
  
**        STEP -07- OUTPUT DATA FROM UNSORTED FILE THEN STEP 4. 
* 
 XRG7     SA1    ZZMOD
          SA2    ZZITEM 
          BX6    X1 
          SA6    XRBMOD            RECORD KEYS OF OUTPUT RECORD 
          BX7    X2 
          SA7    XRBITEM
          SA1    ZZFWA
          SA2    ZZLWA
          SB2    X1 
          SB3    B2 
          SB4    X2 
          MX3    42 
          SA1    B2 
          BX1    X1*X3             SCAN FOR ALL REFERENCES TO 
 XRG7B    SB3    B3+B1                CURRENT ITEM
          GE     B3,B4,XRG7D       IF END OF DATA 
          SA2    B3 
          BX2    X2*X3
          BX2    X2-X1
          ZR     X2,XRG7B          IF SAME ITEM NAME
 XRG7D    SX6    B3 
          SA6    ZZFWA             UPDATE BUFFER POINTER
          SX6    B2 
          SA6    ZZSTAT            SAVE FWA FOR WRITE 
          SB2    B3-B2
          SX6    B2+B1
          SA6    XRBSTAT           SAVE LENGTH OF WRITE 
          IFEQ   NOS,1
          WRITEW ZZZXRB,XRBSTAT,1    OUTPUT RECORD LENGTH 
          ENDIF 
          IFEQ   NOSBE,1
          SX6    A6 
          SX7    A6+B1
          LX6    30 
          BX6    X6+X7
          SA6    ZZZXRB+5 
          WRITOUT  ZZZXRB           OUTPUT RECORD LENGTH
          ENDIF 
          MX6    0
          SA6    ZZFULL            CLEAR FULL FLAG
          IFEQ   NOS,1
          WRITEW ZZZXRB,XRBUFM,1   OUTPUT MODULE NAME 
          ENDIF 
          IFEQ   NOSBE,1
          SX6    XRBUFM 
          SX7    X6+B1
          LX6    30 
          BX6    X6+X7
          SA6    ZZZXRB+5 
          WRITOUT ZZZXRB           OUTPUT MODULE NAME 
          ENDIF 
          SA1    ZZSTAT 
          SA2    ZZFWA
          IFEQ   NOS,1
          IX2    X2-X1
          WRITEW ZZZXRB,X1,X2      OUTPUT ITEM REFERENCES 
          ENDIF 
          IFEQ   NOSBE,1
          LX1    30 
          BX6    X1+X2
          SA6    ZZZXRB+5 
          WRITOUT ZZZXRB            OUTPUT ITEM REFERENCES
          ENDIF 
          EQ     XRG4              GO UNPACK NEXT DATA
  
**        STEP -08- IF SORTED INPUT IS NOT AT END-OF-INFORMATION, THEN
*                   STEP 9. IF UNSORTED INPUT IS AT EOI THEN STEP 10, 
*                   ELSE SWAP SORTED FILES AND GO TO STEP 2.
* 
 XRG8     SA1    XRASTAT
          PL     X1,XRG9           IF NOT AT EOI
          SA1    ZZSTAT 
          NG     X1,XRG10          IF AT EOI SORT DONE
          CLOSE  ZZZXRA,,R         CLOSE SORTED INPUT 
          IFEQ   NOS,1,1
          WRITER ZZZXRB,R 
          IFEQ   NOSBE,1,1
          WRITER ZZZXRB,,RECALL 
          CLOSE  ZZZXRB,,R         CLOAS SORTED OUTPUT
          SA1    ZZZXRA 
          SA2    ZZZXRB 
          BX7    X1 
          BX6    X2 
          SA6    A1                SWAP LFN FOR SORT FILES
          SA7    A2 
          MX6    0
          SA6    XRAFULL
          SA6    XRASTAT
          SA6    XRBMOD 
          SA6    XRBITEM
          EQ     XRG2A             GO RE-OPEN SORT FILES
  
**        STEP -09- OUTPUT DATA FROM SORTED FILE, THEN STEP 4 
* 
 XRG9     MX6    0
          SA6    XRAFULL           FLAG BUFFER EMPTY
          SA1    XRAMOD 
          SA2    XRAITEM
          BX6    X1 
          SA6    XRBMOD 
          BX7    X2 
          SA7    XRBITEM           RECORD KEYS FOR RECORD OUTPUT
          SA1    XRASTAT
          SX2    XRAWA
          IX6    X1-X2
          SA6    XRBSTAT           SAVE RECORD LENGTH 
          IFEQ   NOS,1
          WRITEW ZZZXRB,XRBSTAT,1     OUTPUT RECORD LENGTH
          ENDIF 
          IFEQ   NOSBE,1
          SX6    A6 
          SX7    A6+B1
          LX6    30 
          BX6    X6+X7
          SA6    ZZZXRB+5 
          WRITOUT ZZZXRB           OUTPUT RECORD LENGTH 
          ENDIF 
          SA3    XRBSTAT
          IFEQ   NOS,1
          WRITEW ZZZXRB,XRAWA,X3
          ENDIF 
          IFEQ   NOSBE,1
          SX2    XRAWA
          IX1    X2+X3
          LX2    30 
          BX6    X2+X1
          SA6    ZZZXRB+5 
          WRITOUT ZZZXRB
          ENDIF 
          EQ     XRG3              GO UNPACK NEXT DATA
  
**        STEP -10- CLOSE SORT FILES AND RE-OPEN FOR INPUT
* 
 XRG10    CLOSE  ZZZXREF,RETURN 
          CLOSE  ZZZXRA,RETURN
          IFEQ   NOS,1,1
          WRITER ZZZXRB,R 
          IFEQ   NOSBE,1,1
          WRITER ZZZXRB,,RECALL 
          CLOSE  ZZZXRB,,R
          OPEN   ZZZXRB,READ,RECALL 
          MX6    0
          SA6    XRBMOD 
          SA6    XRBITEM
  
**        STEP -11- FORCE PRINT BANNER OUTPUT AND PRINT HEADING 
* 
          SX6    CNTMAX 
          SA6    CNTLINE           FORCE BANNER OUTPUT
          SB2    XRGA 
          SB1    B0          USE PAGING FORMAT FOR PRINTING 
          RJ     PRINT             PRINT HEADER 
  
**        STEP -12- READ SORTED DATA. IF EOI THEN STEP 14 ELSE STEP 13. 
* 
          IFEQ   NOS,1
 XRG12    READ   ZZZXRB 
          READW  ZZZXRB,XRBSTAT,1       READ RECORD LENGTH
          ENDIF 
          IFEQ   NOSBE,1
 XRG12    SX6    XRBSTAT
          SX7    X6+B1
          LX6    30 
          BX6    X6+X7
          SA6    ZZZXRB+5 
          READIN ZZZXRB            READ RECORD LENGTH 
          ENDIF 
          NG     X1,XRG14          IF ALL DATA READ(EOI)
          SA1    XRBSTAT
          SX2    XRAWA
          IX6    X1+X2
          SA6    A1                SAVE LWA+1 
          IFEQ   NOS,1
          READW  ZZZXRB,X2,X1      READ REFERENCE DATA
          ENDIF 
          IFEQ   NOSBE,1
          LX2    30 
          BX6    X6+X2
          SA6    ZZZXRB+5 
          READIN ZZZXRB            READ REFERENCE DATA
          ENDIF 
          NG     X1,XRG14 
          SA1    XRBSTAT
          SB5    X1                SAVE END-OF-DATA ADDRESS 
          SB4    XRAWA+1
  
**        STEP -13- IF CURRENT RECORD HAS A NEW MODULE OR ITEM NAME 
*                   PRINT THE CURRENT LINE, THEN STEP 12
* 
          SA1    B4                GET NEW ITEM NAME
          MX4    42 
          BX1    X1*X4
          SA2    XRBITEM
          BX2    X2-X1
          NZ     X2,XRG13    IF DIFFERENT ITEM NAME 
          SA1    BLANKS 
          BX7    X1 
          SA7    XRPRA             BLANK ITEM NAME
          EQ     XRG13A 
 XRG13    BX6    X1 
          SA6    A2                SAVE NEW ITEM
          RJ     TRBLK
          LX7    54 
          SA7    XRPRA             PUT ITEM IN PRINT LINE 
 XRG13A   SA1    B4-B1             GET NEW MODULE NAME
          SA2    XRBMOD 
          BX2    X2-X1
          NZ     X2,XRG13B         IF DIFFERENT MODULE NAME 
          SA1    BLANKS 
          BX7    X1 
          SA7    XRPRA+1
          EQ     XRG13C 
 XRG13B   BX6    X1 
          SA6    A2                SAVE NEW MODULE NAME 
          RJ     TRBLK
          SA7    XRPRA+1           PUT MODULE NAME IN PRINT LINE
 XRG13C   SA1    B4 
          RJ     CVTDIS            CONVERT LINE NUMBER
          SA1    XRPRB
          SA2    BLANKS 
          MX6    -18
          BX7    -X6*X7 
          BX2    X6*X2
          BX7    X2+X7
          SA7    X1                STORE IN PRINT LINE
          SX6    X1+B1
          SA6    A1                BUMP POINTER 
          SX2    X6-XRPRA-XRPRAL
          MI     X2,XRG13D         IF LINE NOT FULL 
          RJ     XREFPR            PRINT FULL LINE
          SA1    BLANKS 
          BX7    X1 
          SA7    XRPRA             BLANK ITEM AND MODULE NAME FOR SECOND
          SA7    A7+B1
 XRG13D   SB4    B4+B1
          LT     B4,B5,XRG13C      IF NOT DONE WITH THIS RECORD 
          RJ     XREFPR            FLUSH CURRENT PRINT LINE 
          EQ     XRG12             GET NEXT RECORD
  
**        STEP -14- PRINT LAST LINE AND RETURN
* 
 XRG14    RJ     XREFPR 
          CLOSE ZZZXRB,RETURN 
          MX6    0
          SA6    FXREF       CLEAR GLOBAL CROSS REFERENCE ACTIVE FLAG 
          EQ     XREFG       RETURN 
  
  
 XRGA     DIS    ,/ GLOBAL CROSS-REFERENCE MAP /
          EJECT 
*         UNSORTED FILE BUFFERS AND FLAGS 
  
  
 ZZFULL   DATA   0                 BUFFER FULL FLAG 
 ZZSTAT   DATA   0                 STATUS OF LAST READ
 ZZMOD    DATA   0                 CURRENT MODULE NAME
 ZZITEM   DATA   0                 CURRENT ITEM NAME
 ZZFWA    DATA   0                 ADDRESS OF NEXT ITEM REFERENCE 
 ZZLWA    DATA   0                 FIRST UNUSED ADDRESS IN BUFFER 
  
  
*         SORTED INPUT FILE BUFFERS AND FLAGS 
  
  
 ZZZXRA   FILEB  XRABUF,LXRABUF,(WSA=XRAWA,LXRAWA)
 XRABUF   BSS    1000B
 LXRABUF  EQU    *-XRABUF 
 XRAWA    BSS    1000B
 LXRAWA   EQU    *-XRAWA
 XRAFULL  DATA   0                 BUFFER FULL FLAG 
 XRASTAT  DATA   0                 STATUS OF LAST READ
 XRAMOD   DATA   0                 CURRENT MODULE NAME
 XRAITEM  DATA   0                 CURRENT ITEM NAME
  
  
*         SORTED OUTPUT FILE BUFFERS AND FLAGS
  
  
 ZZZXRB   FILEB  XRBBUF,LXRBBUF,(WSA=XRAWA,LXRAWA)
 XRBBUF   BSS    1000B
 LXRBBUF  EQU    *-XRBBUF 
 XRBSTAT  DATA   0
 XRBMOD   DATA   0                 LAST MODULE NAME OUTPUT
 XRBITEM  DATA   0                 LAST ITEM NAME OUTPUT
          EJECT 
 XREFPR   TITLE  XREFPR - PRINT CROSS-REFERENCE LINE
**        XREFPR - PRINT CROSS-REFERENCE LINE 
* 
*         K.B.SMITH 78/05/25
* 
*         CALL PRINT TO PRINT LINE BUFFER THEN CLEARS LINE BUFFER 
* 
*         EXIT   LINE HAS BEEN PRINTED
* 
* 
*         ROUTINES CALLED - PRINT 
* 
*         DATA AREAS USED - XRPRA 
* 
*         USES   A - 5,6. 
*                X - 5,6. 
*                B - 2,3. 
* 
  
**        STEP -01- IF DATA IN LINE PRINT IT
* 
 XREFPR   DATA   0
          SB2    XRPRA
          SA5    B2+2 
          ZR     X5,XRPR2          IF LINE EMPTY
          SB1    B0          USE PAGING FORMAT FOR PRINTING 
          RJ     PRINT
  
**        STEP -02- CLEAR PRINT LINE
* 
          SB2    XRPRA+2
          SB3    B2+XRPRAL
          MX6    0
 XRPR1    SA6    B2 
          SB2    B2+B1
          LT     B2,B3,XRPR1
          SX6    XRPRA+2
          SA6    XRPRB             RESET POINTER
  
**        STEP -03- RETURN
* 
 XRPR2    EQ     XREFPR            RETURN 
* 
* 
 XRPRA    BSSZ   13                PRINT LINE 
 XRPRAL   EQU    *-XRPRA
          DATA   0
 XRPRB    VFD    60/XRPRA+2 
          EJECT 
 TRBLK    TITLE  TRBLK - CONVERT TRAILING ZEROS TO TRAILING BLANKS
**        TRBLK - CONVERT TRAILING ZEROS TO TRAILING BLANKS 
* 
*         K.B.SMITH. 78/05/12.
* 
*         ENTRY  X1 CONTAINES DATA TO BE CONVERTED
* 
*         EXIT   X7 CONTAINES CONVERTED DATA
* 
*         ROUTINES CALLED - NONE. 
* 
*         DATA AREAS USED - NONE. 
* 
*         USES   A - 2. 
*                X - 2,5,7. 
*                B - NONE.
* 
  
 TRBLK    DATA   0                 ENTRY/EXIT 
          MX5    6
          SA2    BLANKS 
 TRBLK1   BX7    X1*X5             FORM MASK OF NON-ZERO CHARACTERS 
          BX7    X1-X7
          ZR     X7,TRBLK2         IF DONE
          AX5    6
          EQ     TRBLK1 
 TRBLK2   BX7    -X5*X2 
          BX7    X7+X1             ADD BLANKS 
          EQ     TRBLK             RETURN 
          EJECT 
*         DUMMY ENTRY 
 MALET40  BSS    0
          ENTRY  MALET40
          END    MALET40
