ASMB,R,L,C
* 
* 
*  ***************************************************************
*  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1980.  ALL RIGHTS     *
*  * RESERVED.  NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED,      *
*  * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT*
*  * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.       *
*  ***************************************************************
* 
      HED RTE XL GENERATOR SEGMENT 2
      NAM L20G2,5 92071-1X079 REV 2041 800715 
* 
*     NAME:    RTE XL  GENERATOR SEGMENT 2
*     SOURCE:  92071-18079
*     PGMR:    B.C. 
* 
      ENT L20G2 
* 
* 
      EXT EXEC,.ENTR
      EXT OPEN,CLOSE,READF,WRITF,RWNDF
      EXT L.BUF,LNKDR,CNUMO,LOCF
* 
      EXT DSTRG,IPBUF,STRNG,DIPBF 
      EXT OP?,IPTN2,ASTRX 
      EXT EXIT,#ENPT
      EXT SDCB3,IERR3,F3
      EXT ODCB2 
      EXT CLOS3,NLIB
* 
      EXT SEGNM,COMFG,LNKDR,SIDCK 
      EXT FWFM,LWFM,BPFWA,COMAD,COMLG 
      EXT TDBP,LDBP,CSDBP,CUDBP 
* 
      EXT READ,FLERR,NAMRR,DRKEY,SPACE,MOVE 
      EXT DLOCC,LOCC,DBLOC,BPLOC
      EXT L.OUT,L.INT,L.LUN,OPSNP 
      EXT L.REL,L.CLS,L.ADD,L.LDF,L.MAT 
      EXT LBS.L,CBP.L,IGN.L,NM1.L,NM2.L,NM3.L 
      EXT TH1.L,TH2.L,NOR.L,PRI.L,PGT.L,FXN.L,PGL.L 
      EXT FXS.L,.CBT,CNUMD
      EXT ERRCT,CONSL,STCR1 
      EXT BPR.L,CROM,PRERR,LENTF
      EXT CBCOM,CFWSY,C$SCP,C$SC#,RECOF,SLOCC 
* 
      SUP PRESS EXTRANIOUS LISTING
* 
      SKP 
* 
F5    DEF FILE5 
FILE5 BSS 3         FILE NAME 
TYPE5 NOP 
F5SC  NOP 
F5DSC NOP 
* 
RDCB5 BSS 144 
IERR5 NOP 
DDCB5 DEF RDCB5 
* 
      SKP 
L20G2 LDA SEGNM 
      CPA P3        SECOND TIME INTO SEGMENT? 
      JMP NXTOP     YES 
* 
*     INITIALIZE LOADER LIBRARY 
* 
*     DO NOT REMOVE ANY OF THE NEXT 22 WORDS
* 
      JSB L.INT     NO
      DEF *+9 
      DEF FWFM+0    1ST WORD OF FREE SPACE
      DEF LWFM+0    LAST WORD OF FREE SPACE 
      DEF B1677     FIRST WORD OF BASE PAGE ( DECREASING )
      DEF COMAD+0   ADDR OF SYSTEM COMMON = 0 IF LOCAL
      DEF COMLG+0   LENGTH OF SYSTEM COMMON OR 0
      DEF B2000     LOAD POINT ADDRESS
      DEF CROM      TOP OF MEMORY 
      DEF TABLE     TABLE OF ADDRESSES OF SUBR. 
* 
      CCA 
      STA LNKDR     SYSTEM LINK DIRECTION 
      STA COMFG     UNLABEL COMMON IN FLAG
* 
      LDA B2000 
      STA LOCC
* 
      JSB SPACE 
      LDA P10 
      STA CONSL     ECHO ON CONSOLE 
      LDB DMES4     SYSTEM RELOCATION 
      JSB DRKEY     OUTPUT MESSAGE
      JSB SPACE 
* 
      SKP 
NXTOP JSB READ      READ INPUT
      JMP EXIT      END OF FILE 
      LDA OP?       GET THE OPCODE
      CPA MS        IS IT A MULTIPLE SCAN?
      JMP MSERC     YES 
      CPA SE        IS IT SEARCH? 
      JMP SERCH     YES 
      CPA RE        IS IT RELOCATION? 
      JMP RELOC     YES 
      CPA DI        IS IT DISPLAY?
      JMP DISP      YES 
      CPA LO        IS IT SET LOCC? 
      JMP LOSET     YES 
      CPA BL        IS IT SET BLOCC?
      JMP BPSET     YES 
      CPA EN        IS IT END?
      JMP END       YES 
      CPA CO        IS IT UNLABEL COMMON? 
      JMP UNCOM     YES 
      CPA LE        IS IT LENTRY ( LIST ENTRY PT ) ?
      JMP LENTY     YES 
WHAT? CLA 
      JSB LDRER     WHAT IS IT ?? 
      JMP NXTOP 
* 
DMES4 DEF MES4
MES4  ASC 5,* SYS REL 
* 
SEG3  ASC 3,L20G3 
* 
      SKP 
* 
END   JSB DSUND     DISPLAY ANY UNDEFINED 
      LDA SEGNM 
      CPA P3        IS IS 2ND TIME INTO SEGMENT?
      JMP EN120     YES , SYS. COM. RELOCATION
      LDA CBP.L     REAL CURRENT BASE PAGE
      INA 
      STA TCBPL     TEMPORY CURRENT BASE PAGE 
      LDB A         GET CURRENT REAL BP 
      ADB LDBP      ADD LOWER DUMMY BP
EN100 STB TSDBP     DUMMY BP LOCATION 
      LDA B,I       GET VALUE 
      LDB TCBPL 
      JSB STCR1     OUTPUT
      LDA TCBPL 
      INA 
      STA TCBPL 
      LDB TSDBP 
      INB 
      CPB TDBP
      RSS 
      JMP EN100 
* 
EN120 ISZ SEGNM 
* 
      LDA SEGNM 
      CPA P1        CPA P1 END SYS. RELOCATION? 
      RSS           YES 
      JMP EN300     NO
* 
      JSB L.ADD     FIND ADDRESS OF $STRT 
      DEF *+5 
      DEF $STRT 
      DEF VALUA 
      DEF SADDR 
      DEF RESLT 
      LDA RESLT     GET RESULT
      SZA 
      JSB MSENT      MISSING SYSTEM ENTRY POINT 
      LDA VALUA     ADDRESS OF $STRT
      LDB P3
      JSB STCR1     PUT ADDRESS OF $STRT IN LOC 3 
      LDA JMP3I     JMP 3,I 
      LDB P2        LOCATION 2
      JSB STCR1     PUT JMP 3,I IN LOC 2
* 
      JSB EXEC
      DEF *+3 
      DEF P8
      DEF SEG3      LOAD SEGMENT 3
* 
EN300 JMP NXTOP     GET NEXT OPERATION
* 
* 
* 
D$LCO DEF $LCOM 
$LCOM ASC 3,$LCOM 
* 
D$BCO DEF $BCOM 
$BCOM ASC 3,$BCOM 
* 
      SKP 
* 
MSSUB NOP 
* 
MSERC CLA           IS A MULTIPLE SCAN
      STA MULT
      CMA 
      STA LBS.L 
      JMP DOPRS 
* 
RELOC CLA           NOW SET A FEW FLAGS 
      STA LBS.L     NOT A LIBRARY SCAN
      JMP DOPRS     NOW GO DO THE PARSE 
SERCH CCA           NOW SET A FEW FLAGS 
      STA LBS.L     IS A LIBRARY SEARCH 
      STA MULT      NOT A MULTIPLE SCAN 
* 
DOPRS CLA           SET A FEW FLAGS 
      STA IGN.L     DON'T IGNOR THIS MODULE 
      STA TP67F     CLEAR PROG TYPE 6 OR 7 FLAG 
      STA SMDNM     CLEAR SEARCH MODULE NAME
      STA MODFD     CLEAR MODULE FOUND FLAG 
      STA INDFG     CLEAR INDEX FLAG
      STA TMPBP     CLEAR TEMPORARY BP COUNTER
      CCA 
      STA NM1.L     NAM MUST BE FIRST 
      STA NOR.L     SUBR LOADED IN THIS SCAN
      LDA LOCC
      STA TH2.L 
* 
      JSB NAMRR     NO PARSE THE INPUT
      SSA           WAS THERE ANYTHING TO PARSE ? 
      JMP WHAT?     NO INPUT
      LDA DIPBF     CHECK FOR ASCII 
      ADA P3
      LDA A,I 
      AND P3
      CPA P3        IS IT ASCII?
      RSS           YES 
      JMP WHAT?     NO , WHAT IS IT 
* 
      LDA N6        GET THE WORD COUNT
      JSB MOVE      MOVE THE NAMR TO THE DCB AREA 
      DEF IPBUF+0   SOURCE
      DEF FILE5     DESTINATION 
      LDA TYPE5     GET THE TYPE WORD 
      AND P3        KEEP ONLY THE LEAST 2 BITS
      STA TYPE5 
* 
      JSB NAMRR     GET POSSIBLE MODULE NAME
      SSA           IS THERE A NAME?
      JMP OPREL     NO NAME , GO OPEN REL FILE
* 
      LDA DIPBF     CHECK FOR LEGAL FILE NAME 
      ADA P3
      LDA A,I 
      AND P3
      SZA,RSS       IS IT A NULL PARM?
      JMP OPREL     YES , NULL DO SEARCH
      CPA P3        IS THIS A ASCII NAME? 
      RSS           YES , SAVE IT 
      JMP MODNM     NO, ERROR ILLGAL MODULE NAME
      LDA N3        MOVE FILE NAME
      JSB MOVE       MOVE IT TO MDNAM 
      DEF IPBUF+0 
DMDNM DEF MDNAM 
      CLA,INA 
      STA SMDNM     SET FLAG TO SEARCH FOR IT 
* 
* 
OPREL JSB OPEN      OPEN THE FILE ! 
      DEF *+7 
      DEF RDCB5     DCB 
      DEF IERR5     ERROR FLAG
      DEF FILE5     ASCII FILE NAME 
      DEF IPTN1     READ OPTION 
      DEF F5SC      SECURITY CODE 
      DEF F5DSC     CART REF #
      SSA,RSS       ANY ERROR IN THE READ ? 
      JMP L.MOR     NO
      LDB F5        YES , GET THE FILE NAME 
      JSB FLERR     AND REPORT
      JMP CLSRF 
* 
L.MOR JSB L.RED     READ A RELOCATABLE RECORD 
      DEF *+2 
      DEF FLAG
* 
      LDA FLAG
      SSA           IS IT EOF?
      JMP CKMUL     YES , CHECK FOR MULTIPLE SCAN 
* 
      JSB L.CLS     GO CLASSIFY THE REL. RECORD 
      DEF *+3 
      DEF TYPE
      DEF SBFLD     SUBFIELD REC , GEN=0
      SSA           RTN REC TYPE , 0=OK , -1=CK SUM ERR 
      JMP RELER     CHECK SUM ERROR 
* 
      LDA SBFLD     GET SUB FIELD 
      CPA P9        IS IT AN INDEX REC? 
      RSS           YES , SET FLAG AND IGNOR INDEX REC
      JMP EXPNM     NO
      STA INDFG     SET 9 INTO INDEX REC FLAG 
      JMP L.MOR     IGNOR CURRENT INDEX AND GET NEXT REC
* 
EXPNM LDA TYPE      GET REC TYPE
      CPA P5        END REC?
      RSS           YES 
      JMP CKNAM     NO , CHECK FOR NAM
      LDB INDFG     GET INDEX FLAG
      CPB P9        IS PREVIOUS REC AN INDEX REC? 
      JMP CKMUL     YES , THIS IS THE END OF FILE 
* 
CKNAM LDA TYPE
      CPA P1
      JMP REL       RELOCATE THE NAM REC TO SET UP PROG TYPE
* 
      LDA PGT.L     GET PROGRAM TYPE
      CPA P5        IS IT A SEGMENTED PROGRAM?
      JMP SEGER     ERROR , SEGMENTED PROGRAM NOT ALLOWED DURING GEN
      CPA P7        IS IT A TYPE 7 SUBROUTINE ? 
      STA TP67F     YES SET THE PROGRAM TYPE 6 OR 7 FLAG
      CPA P6
      STA TP67F 
* 
      LDA SMDNM 
      SZA,RSS       IS THERE A MODULE NAME? 
      JMP REL       NO MODULE NAME
      LDA NM2.L     YES , SEARCH FOR NAME MODULE
      INA 
      RAL 
      LDB DMDNM     ADDRESS OF MODULE NAME
      RBL 
      JSB .CBT      COMPARE THEM
      DEF P5
      NOP 
      JMP SMDFD     NAME MATCHED
      NOP           NAME NOT MATCHED
      NOP           NAME NOT MATCHED
      LDA TMPBP 
      ADA CBP.L     RESTORE CBP.L SINCE SUBR NOT MATCHED
      STA CBP.L 
      JMP ENAM
SMDFD CLA,INA 
      STA MODFD     SET MODULE NAM FOUND
      JMP REL 
* 
* 
SEGER LDA P12       ERROR MESSAGE 'SEGMENTED PROG. NOT ALLOWED
      JSB LDRER 
      JMP CLSRF     GO CLOSE THE REL. FILE
* 
      SKP 
* 
      SPC 1 
REL   JSB L.REL     NO, SO GO PROCESS RECORD !
      DEF *+2 
      DEF FLAG
* 
      LDA FLAG      GET ERROR FLAG
      SZA           ANY ERROR?
      RSS           YES 
      JMP REL2      NO
* 
RELER CMA,INA       SET ERROR CODE TO POSITIVE
      JSB LDRER     PRINT ERROR 
      JMP CLSRF     CLOSE RELOCATABLE FILE
* 
REL2  CLA 
      STA INDFG     CLEAR INDEX FLAG
      LDA TYPE      GET REC TYPE
      CPA P5        IS IT AN END? 
      JMP RELED     YES 
      CPA P2        IS IT AN ENT? 
      JMP CKENT     YES 
      CPA P1        NAM RECORD? 
      RSS           YES 
      JMP L.MOR     NO
      LDB DLBUF     YES , NAM RECORD
      ADB P7        POINT TO BP LENGTH
      LDA B,I       GET LENGTH OF BP
      STA TMPBP     SAVE IT 
      JMP L.MOR     GET NEXT RECORD 
* 
CKENT LDA SEGNM 
      SZA 
      JMP TRSC      SEE IF SYS. COM.
      LDB TP67F 
      CPB P7
      JMP T67SB     YES , TYPE 6 OR 7 SUBROUTINE
      CPB P6
      JMP T67SB 
TRSC  CPA P3        IS IT SYSTEM COMMON ? 
      JMP SCOMT     YES , TAG SYMBOL AS SYSTEM COMMON 
      CPA P5        LOADING MEM. RES. LIBRARY ? 
      JMP TRMRL     YES , TAG SYMBOL AS MEM. RES. 
      JMP L.MOR 
* 
TRMRL LDA P8        SET TAG TO BIT 3 MEM. RES.
      STA TAGSM 
      JMP TAGEN 
* 
T67SB LDA B40 
      STA TAGSM     SET TAG TO BIT 5 TYPE 6,7 SUBR. 
      JMP TAGEN 
* 
SCOMT LDA P16 
      STA TAGSM     SET TAG TO BIT 4 SYSTEM COMMON
* 
TAGEN LDA IGN.L 
      SZA           IGNORE THIS MODULE? 
      JMP L.MOR     YES 
      LDB DLBUF     NO , GET # OF ENTRIES 
      INB 
      LDA B,I        FROM WD 2 OF ENT RECORD
      AND B17 
      CMA,INA 
      STA CNT10     NEGATE # OF ENT SYMBOL
      ADB P2        POINT TO 1ST SYMBOL 
MRTAG STB SYMAD     SAVE THE SYMBOL ADDRESS 
* 
      JSB L.ADD 
      DEF *+5 
SYMAD DEF * 
      DEF VALUA 
      DEF SADDR 
      DEF RESLT 
      LDA RESLT 
      SZA 
      JMP ERSYM 
      LDB SADDR     SYMBOL ADDRESS
      ADB P3
      LDA B,I       GET WORD 4 OF SYMBOL TABLE
      AND P3        GET S FIELD 
      CPA P2        IS IT UNDEFINED?
      JMP ERSYM     YES, NEXT SYMBOL
      LDA B,I       NO ,GET WORD 4 OF SYMBOL TABLE AGAIN
      IOR TAGSM     TAG SYM NOT TO BE IN SNAP BIT 5 
      STA B,I        OR TAG AS SYSTEM COMMON
ERSYM ISZ CNT10 
      RSS 
      JMP L.MOR 
      LDB SYMAD 
      ADB P4
      JMP MRTAG     MATCH NEXT SYMBOL 
* 
RELED LDA IGN.L     GET FLAG
      SZA,RSS       ANYTHING LOADED?
      JMP CKLD      YES 
      JMP ENAM     NO 
* 
CKLD  ISZ SUBLD     YES, A SUBROUTINE IS LOADED 
      LDB SEGNM 
      CPB P3        LOADING SYSTEM COMMON?
      RSS           YES , GIVE WARNING IF NOT TYPE 6 MODULE 
      JMP PMAP      NO
      LDA PGT.L     GET PROGRAM TYPE
      CPA P6        IS MODULE TYPE 6? 
      JMP PMAP      YES, GO ON
      LDA P17       LOADED A NON TYPE 6 MODUEL DURING SYS COM 
      JSB LDRER     GIVE WARNING
      SKP 
* 
*     PRINT MODULE BOUNDS 
* 
PMAP  JSB BUFCL     BLANK OUT L.BUF 
BLNK2 ASC 1,
* 
      LDB NM2.L     GET MODULE NAME 
      LDA B,I 
      CMA,INA 
      JSB MOVE
      DEF NM2.L+2 
      DEF L.BUF+0 
* 
      JSB CNUMO     CONVERT LOWER BOUND ADDRESS 
      DEF *+3 
      DEF TH1.L+0 
      DEF L.BUF+3 
* 
      LDA TH2.L     GET HIGH ADDRESS +1 OF THIS LOAD
      STA LOCC      STORE IT IN LOCC
      LDA TH1.L 
      CCA           SUBTRACT -1 
      LDB PGL.L     PROGRAM LENGTH
      SZB           IF ZERO 
      SSB           OR NEGATIVE 
      JMP ADTH2     ADDING LWA IS CORRECT (NO LINKS)
      ADA TH1.L     ELSE ADD CURR PROG RELOC ADDR 
      ADA B         ADD LENGTH
      RSS 
ADTH2 ADA TH2.L     ADD LWA PROG
      STA ADDR      STORE IT TEMPORARY
      JSB CNUMO     CONVERT UPPER BOUND ADDRESS 
      DEF *+3 
      DEF ADDR
      DEF L.BUF+6 
* 
      LDB NM3.L 
      LDA B,I 
      SZA,RSS       IS IT ZERO? 
      JMP PM10      YES , NO COMMENTS 
      CMA,INA 
      JSB MOVE
      DEF NM3.L+2 
      DEF L.BUF+10
* 
PM10  JSB SPACE 
      LDA P120
      LDB DLBUF 
      JSB DRKEY     PRINT BOUNDS
* 
      JSB BUFCL     BLANK OUT L.BUF 
      ASC 1,
* 
      LDA BP
      STA L.BUF 
* 
      JSB CNUMO 
      DEF *+3 
      DEF BPR.L+0 
      DEF L.BUF+2 
* 
      LDA P10 
      LDB DLBUF 
      JSB DRKEY 
      JSB SPACE 
* 
      LDA LENTF 
      SZA,RSS       LIST ENTRY POINTS ? 
      JMP ENAM      NO
      JSB BUFCL     YES , BLANK OUT L.BUF 
      ASC 1,
* 
      CLA 
      STA ADDR
      STA PNTR
* 
PM20  JSB L.LDF 
      DEF *+4 
      DEF ADDR
      DEF PNTR
      DEF N1        JUST GIVE ME THE SYMBOL FOR THIS MODULE 
      LDA ADDR
      SZA,RSS       IS THIS THE END 
      JMP ENAM0     YES 
* 
      LDA ADDR
      STA PMSY1 
      STA PMSY2 
      JSB L.ADD 
      DEF *+5 
PMSY1 DEF ADDR
      DEF VALUA 
      DEF SADDR 
      DEF RESLT 
* 
      LDA N3
      JSB MOVE
PMSY2 DEF ADDR
      DEF L.BUF+1 
      LDA L.BUF+3 
      AND HIMSK 
      IOR B40       ADD BLANK TO 3RD WORD 
      STA L.BUF+3 
* 
      JSB CNUMO 
      DEF *+3 
      DEF VALUA 
      DEF L.BUF+5 
* 
      LDA P16 
      LDB DLBUF 
      JSB DRKEY 
      JMP PM20
ENAM0 JSB SPACE 
* 
ENAM  CCA           EXPECT ANOTHER NAM
      STA NM1.L 
      CLA 
      STA TP67F     CLEAR TYPE 6 OR 7 FLAG
      STA INDFG     CLEAR INDEX FLAG
      STA TMPBP     CLEAR TEMPORARY BP COUNTER
      JMP L.MOR 
* 
CKMUL LDA MULT      IS IT A MULTIPLE SCAN?
      ISZ NOR.L 
      SSA           YES 
      JMP CLSRF     NOT A MULTIPLE SCAN OR NOTHING LOADED 
      JSB RWNDF     REWIND THE FILE 
      DEF *+3 
      DEF RDCB5 
      DEF IERR5 
* 
      CCA 
      STA NOR.L     RESET TO NO SUBR LOADED 
      JMP L.MOR 
* 
CLSRF JSB CLOSE 
      DEF *+2 
      DEF RDCB5     CLOSE THE RELOCATION
* 
      LDA SMDNM 
      SZA,RSS       SEARCHING FOR MODULE NAM? 
      JMP CKSLB     NO
      LDA MODFD     YES 
      SZA           WAS THE MODULE FOUND? 
      JMP CKSLB     YES 
      LDA P27       NO , GIVE ERROR 
      JSB LDRER 
CKSLB LDA SNPLB 
      SZA           SEARCHING LIBRARY IN SNAP?
      JMP MSSUB,I   YES , RETURN TO LBLOK 
      JMP NXTOP     NO
* 
* 
MODNM LDA P25       ILLEGAL MODULE NAME IN SEARCH COMND 
      JSB LDRER 
      JMP NXTOP 
* 
* 
      SKP 
* 
* 
*     GET LIST ENTRY POINTS   LENTRIES,ON 
*                                     ,OF 
* 
LENTY JSB NAMRR     GET OPTION ON OR OF 
      SSA           END OF INPUT ?
      JMP WHAT?     YES , NO OPTION 
      CLB           NO
      LDA IPBUF 
      CPA ON        IS IT ON OPTION?
      JMP LENON     YES 
      CPA OF        IS IT OF OPTION?
      JMP LENOF     YES 
      JMP WHAT?     OPTION ERROR
LENON INB           SET ON OPTION 
LENOF STB LENTF     STORE IN LIST ENT FLAG
      JMP NXTOP     NEXT COMMAND
* 
* 
*     DISPLAY UNDEF 
* 
DISP  JSB DSUND 
      JMP NXTOP 
* 
* 
* 
WHICH LDA FLAG
      SZA,RSS 
      JMP DSPBP     DISPLAY BPLOCC
* 
*     DISPLAY LOCC
* 
      LDA DLOCC     GET ADDRESS OF LOCC 
      STA DSP50 
      JMP DSP30     GO CONVERT AND PRINT IT 
* 
*     DISPLAY BPLOCC
* 
DSPBP LDA CBP.L 
      STA BPLOC 
      LDA DBLOC 
      STA DSP50 
DSP30 JSB CNUMO     CONVERT TO OCTAL #
      DEF *+3 
DSP50 DEF LOCC
      DEF ADDR
      LDA P6
      LDB DADDR 
      JSB DRKEY     PRINT LOCC VALUE
      JSB SPACE 
      JMP NXTOP 
* 
* 
* 
      SKP 
* 
*     LOCC,VALUE
* 
LOSET CCA           COMPLEMENT A SET LOCC 
      STA FLAG
      JMP GTVAL 
* 
*     SET BPLOCC
* 
*     BPLOCC,VALUE
* 
BPSET CLA           CLEAR A SET BPLOCC
      STA FLAG
GTVAL JSB NAMRR     GET LOCC VALUE
      SSA,RSS       END OF STRING ? 
      RSS           NO
      JMP WHICH     YES, GO PRINT VALUE 
      CCA 
      LDB DIPBF 
      ADB P3
      LDA B,I       GET INPUT TYPE
      CPA P1        IS IT NUMERIC?
      RSS 
      JMP ILBND     ILLEGAL BOUNDS
      ADB N3        POINT BACK TO VALUE 
      LDA B,I       GET VALUE 
      SSA           POSITIVE? 
      JMP ILBND     NO , ERROR
      STA TLOCC     SAVE IT TEMPORY 
      LDB FLAG
      SZB,RSS 
      JMP BPLO
      STA B 
      LDA P16 
      CMB,INB 
      ADB LOCC
      SSB,RSS       NEW LOCC BIGGER THAN OLD LOCC?
      JSB LDRER     NO , GIVE WARNING MESSAGE 
      LDA TLOCC 
      STA LOCC
      JSB SPACE 
      JMP NXTOP 
* 
BPLO  LDB M2000     GET -2000B
      ADB A         ADD NEW BP
      SSB,RSS       WITHIN BP RANGE?
      JMP ILBND     NO , BOUNCE IT
      LDA LNKDR     GET LINK DIRECTION
      CPA N1        SYSTEM LINK?
      JMP BPSY      YES 
      LDA CSDBP     NO , GET CURRENT SYS DUMMY BP 
      CMA,INA       NEGATE
      ADA TLOCC     ADD NEW BP
      ADA LDBP      ADD LOW DUMMY BP BOUND
      SSA,RSS       NEW BP OVERFLOWED INTO SYS DUM BP?
      JMP L.A20     YES , BP OVERFLOWED 
      LDA TLOCC     NO , SET NEW CURRENT USER DUMMY BP
      ADA LDBP
      STA CUDBP 
      JMP BPRP
BPSY  LDA TLOCC     GET NEW BP
      ADA LDBP      ADD LOW DUMMY BP BOUND
      CMA,INA       NEGATE
      ADA CUDBP     ADD CURRENT USER DUMMY BP 
      SSA,RSS       OVERFLOWED INTO USER BP?
      JMP L.A20     YES , BASE PAGE OVERFLOWED
      LDA TLOCC     NO
      ADA LDBP
      STA CSDBP     SET NEW CURRENT SYS DUMMY BP
BPRP  LDA TLOCC 
      STA BPLOC     OK , REPLACE IT AT USER'S RISK
      STA CBP.L 
      JSB SPACE 
      JMP NXTOP 
* 
ILBND LDA P21       ILLEGAL BOUNDS
      JSB LDRER 
      JMP NXTOP 
* 
      SKP 
* 
*     UNLABEL COMMON BLOCK
*       LEGAL CALL AFTER SYSTEM COMMON
* 
UNCOM LDA P4        IS IT CALLED FROM AFTER SYSTEM COMMON?
      CPA SEGNM 
      RSS           YES 
      JMP WHAT?     NO , IT IS A ERROR
      ISZ COMFG     YES , IS IT THE FIRST TIME? 
      JMP WHAT?     NO , CALLED MORE THAN ONCE
      JSB NAMRR     GET SIZE OF UNLABEL COMMON
      SSA 
      JMP BCMER     END OF RECORD NO INPUT SIZE 
      LDB DIPBF 
      ADB P3
      LDA B,I       GET INPUT TYPE
      CPA P1        IS IT NUMERIC?
      RSS           YES 
      JMP BCMER     NO ERROR
      LDA IPBUF     LOAD THE SIZE 
      SSA           POSITIVE? 
      JMP BCMER     NO , ERROR
      CLO           CLEAR OVERFLOW
      LDB LOCC
      ADA LOCC      BUMP LOCC FOR THE UNLABEL COMMON SIZE 
      SOS           SKIP IF OVERFLOW SET? 
      JMP OKCOM     NO OVERFLOW 
      LDA P3        YES , OVERFLOW
      JSB LDRER     GIVE ERROR MESSAGE
      LDA B7777     SET MAX SIZE
OKCOM STA LOCC
      STB CBCOM     START ADDR FOR BLANK COMMON 
* 
UNC10 LDA LOCC
      AND M2000     SAVE PAGE NUMBER
      CPA LOCC
      RSS 
      ADA B2000     SAVE ADDRESS OF $FWSY 
      STA LOCC
      STA CFWSY     SAVE FIRST WORD OF SYSTEM 
      CLB 
      DIV B2000 
      ADA N1
      STA C$SCP 
      ALF,ALF 
      ALS,ALS       MULTIPY BY 1024 
      STA C$SC# 
* 
      JMP DZPRV 
* 
* 
BCMER LDA P24 
      JSB LDRER 
      JMP UNC10 
* 
D$FWS DEF $FWSY 
$FWSY ASC 3,$FWSY 
* 
D$SC# DEF $SC#
$SC#  ASC 3,$SC#
* 
D$SCP DEF $SCPG 
$SCPG ASC 3,$SCPG 
* 
D$LCB DEF $LCBP 
$LCBP ASC 3,$LCBP 
* 
$STRT ASC 3,$STRT 
      SKP 
* 
*     FIXUP .ZPRV & .ZRNT 
* 
* 
*     FIND ADDRESS OF $LIBX 
*      AND SAVE RPL VALUE OF JSB $LIBX
* 
DZPRV LDA RECOF 
      STA TEMP1     SAVE OUTPUT RECORD OFFSET 
      CLA 
      STA RECOF     TEMPORARY SET TO 0 FOR DUMMY WRITE
      LDB B101       IN ORDER TO POST OUTPUT DCB TO DISC
      JSB STCR1 
* 
      LDA TEMP1 
      STA RECOF     RESTORE OUTPUT RECORD OFFSET
* 
      LDA $LIBX 
      JSB LADD      FIND SYMBOL 
      STA B         SAVE RESULT IN B
      SZB           IS DRIVER ENTRY POINT THERE?
      JSB MSENT     NO , ERROR DISPLAY IT 
      LDA VALUA     LOAD WORD 5 
      STA JBLBX     SAVE RPL CODE FOR JSB $LIBX 
* 
* 
*     FIND .ZPRV IN SYMBOL TABLE
* 
      LDA .ZPRV 
      JSB LADD
      CPA P2
      JMP FNDFX     .ZPRV UNDEFINDED
      JMP DZRNT     .ZPRV NOT THERE , GO ON 
FNDFX LDA SADDR 
      STA SYMCH     SYMBOL TO MATCH 
* 
*     SET UP TEMP1 TO FIND THE FIXUP
* 
      LDB FXN.L     LAST ENTRY OF FIXUP 
      STB TEMP1 
NXFIX LDB TEMP1 
      JSB FDFIX     FIND FIXUP
      JMP DLIBR     FINISH DO ZRENT 
      INA           FOUND MATCHING ENTRY (A)=ADDRESS OF FIXUP 
      STA ADFEX      AND SAVE IT
* 
* 
      JSB RDOUT     READ OUTPUT FILE FOR DEF EXIT 
      DEF *+3 
      DEF ADFEX     ADDRESS TO READ ( DEF EXIT )
      DEF AEXIT 
* 
* 
      LDA N1        ADDRESS OF DEF EXIT 
      LDB ADFEX 
      JSB STCR1 
* 
      LDA JBLBX 
      LDB AEXIT 
      JSB STCR1     OUTPUT JSB $LIBX,I
* 
* 
      ISZ AEXIT 
* 
      JSB RDOUT     READ OUTPUT FILE FOR EXIT+1 
      DEF *+3 
      DEF AEXIT 
      DEF TEMP2 
      LDA TEMP2 
      IOR M1000     MERGE BIT 15
      LDB AEXIT     PUT IN DEF SUB,I
      JSB STCR1 
* 
      JMP NXFIX 
* 
* 
$LIBR DEF *+1 
      ASC 3,$LIBR 
* 
$LIBX DEF *+1 
      ASC 3,$LIBX 
* 
.ZPRV DEF *+1 
.ZPV1 ASC 3,.ZPRV 
* 
* 
.ZRNT DEF *+1 
.ZRN1 ASC 3,.ZRNT 
* 
D$CKS DEF $CKSM 
$CKSM ASC 3,$CKSM 
* 
      SKP 
DLIBR LDA $LIBR 
      JSB LADD
      STA B         SAVE RESULT IN B
      SZB           IS ENTRY POINT THERE? 
      JSB MSENT     NO , ERROR
      ISZ SADDR 
      ISZ SADDR     POINT TO WD 4 OF $LIBR
      ISZ SADDR 
      LDA SADDR,I   LOAD WD 4 
      ALF,ALF       ROTATE IT BECAUSE L.MAT ROTATES IT BACK 
      STA TYPE      SAVE IT IN TYPE 
      LDA VALUA     LOAD WD 5 
      STA VALUR     SAVE IT FOR LATER 
* 
      JSB L.MAT 
      DEF *+5 
      DEF .ZPV1 
      DEF TYPE
      DEF VALUR 
      DEF RESLT 
* 
*     FIND .ZRNT
* 
DZRNT LDA .ZRNT 
      JSB LADD
      CPA P2
      JMP FNFIX     .ZRNT UNDEFINED GO FIND ANY FIXUP 
      JMP XCHN      .ZRNT NOT THERE , JUST GO ON
* 
FNFIX LDA SADDR     ADDRESS OF .ZRNT IN SYMBOL TABLE
      STA SYMCH     SYMBOL ADDRESS TO MATCH 
* 
*     SET UP TEMP1 TO FIND THE FIXUP
* 
      LDB FXN.L     LAST ENTRY OF FIXUP 
      STB TEMP1 
NXTFX LDB TEMP1 
      JSB FDFIX     FIND FIXUP
      JMP XCHN      FINISH CHANGE .ZPRV & .ZRENT
      INA 
      STA ADFEX     ADDRESS OF DEF EXIT 
* 
      JSB RDOUT 
      DEF *+3 
      DEF ADFEX     ADDRESS OF DEF EXIT 
      DEF AEXIT     CONTENT OF DEF EXIT (ADDRESS OF EXIT) 
* 
      LDA JBLBX 
      LDB AEXIT 
      JSB STCR1     OUTPUT JSB $LIBX,I
* 
      ISZ AEXIT 
      JSB RDOUT     READ OUTPUT FILE FOR EXIT + 1 
      DEF *+3 
      DEF AEXIT     ADDRESS OF EXIT+1 
      DEF TEMP2     CONTENTS OF EXIT+1(DEF TDB) 
* 
      LDA TEMP2     DEF TDB 
      LDB ADFEX     ADDRESS OF DEF EXIT 
      JSB STCR1     OUTPUT DEF TDB
* 
      JSB L.MAT 
      DEF *+5 
      DEF .ZRN1     POINT .ZRNT TO $LIBR
      DEF TYPE
      DEF VALUR 
      DEF RESLT 
* 
      JMP NXTFX     DO NEXT FIXUP 
* 
*     CHANGE .ZPRV AND .ZRNT TO RSS (2001)
* 
XCHN  LDA .ZPRV 
      JSB SWRSS 
* 
      LDA .ZRNT 
      JSB SWRSS 
* 
* 
      SKP 
* 
*     OUTPUT THE SNAP 
* 
      CLA           CLEAR REC. OFSET FOR SYSTEM FILE
      STA RECOF 
* 
      JSB OPSNP     REOPEN THE SNAP FILE
* 
      JSB BUFCL 
      NOP 
      LDA B2000     CONTENTS OF $LCOM 
      STA L.BUF+3 
      LDA CBCOM     CONTENTS OF $BCOM 
      STA L.BUF+4 
      LDA CFWSY     CONTENTS OF $FWSY 
      STA L.BUF+5 
* 
      JSB WRITF     OUTPUT REC 1 OF SNAP FILE 
      DEF *+5 
      DEF SDCB3+0 
      DEF IERR3+0 
      DEF L.BUF+0 
      DEF P20 
      JSB CSPER     CHECK SNAP FILE WRITE ERROR 
* 
*     OUTPUT SYSTEM ENTRY POINTS
* 
      CLA,INA       1ST TIME FLAG 
      STA TEMP2 
* 
SNP2  CLA 
      STA PNTR
      STA CNT10 
* 
      LDA P3
      STA L.BUF+0 
GSYEN JSB L.LDF     GET A SYSTEM ENTRY
      DEF *+4 
      DEF ADDR
      DEF PNTR
      DEF P1        GIVE ME ALL OF THEM 
      LDA ADDR
      SZA,RSS 
      JMP ESYEN     END OF SYMBOL TABLE 
      STA ADDRX 
      STA B 
      LDA B,I 
      AND M7777     MASK OUT PRINT IT BIT 
      STA B,I 
      ADB P3        POINT TO WORD 4 OF SYMBOL 
      LDA B,I       LOAD WORD 4 AND CHECK 
      AND B40        TO SEE IF SHOULD BE EXCLUDED FROM SNAP 
      SZA 
      JMP GSYEN     YES , EXCLUDED FROM SNAP
      CLE 
      LDA B,I       GET WORD 4 AGAIN? 
      AND HIMSK 
      ALF,ALF 
      STA TEMP3     SAVE WORD 4 TEMPORARY 
      CPA P4        IS IT AN RP SYMBOL? 
      JMP GRP       YES 
      CPA P3        IS IT AN ABSOLUTE 
      RSS           YES 
      JMP GCK       NO
GRP   CME           SET TO INDICATE RPL OR ABS
      LDA B,I       GET WD 4 AGAIN
      AND P16       MASK SYS. COM. BIT
      SZA           SYS. COM. SYMBOL? 
      JMP CKSCM     YES 
      LDA TEMP3 
      STA B,I       REPLACE WD 4 WITH 3=ABS , 4=RP
      JMP GSUM
GCK   LDA B,I       LOAD WD 4 AGAIN 
      AND P8
      SZA,RSS       IS IT MEM. RES. SYMBOL? 
      JMP CKSCM     NO , CHECK SYS COM SYMBOL 
      CLA           YES , MEM RES. SYMBOL 
      STA B,I       PUT 0 IN WORD 4 
      JMP GSUM
* 
CKSCM LDA TEMP2 
      CPA P1        PASS 1? 
      JMP GSYEN     YES , NEXT SYMBOL 
      LDA B,I       GET WORD 4 AGAIN
      AND P16 
      SZA           SYSTEM COMMON ENTIES? 
      LDA P2        YES , SET SYMBOL AS SYSTEM COMMON 
      SEZ           WAS IT AN RPL OR ABS? 
      LDA TEMP3     YES 
      STA B,I       RESTORE WORD 4
      SZA,RSS       SYS. COM. ENTRY?
      JMP GSUM      NO
      INB           YES , DO SYS. COM. CK SUM 
      ISZ #SCEP     BUMP # OF SYS COM ENTRY PT. 
      LDA B,I       GET S. C. VALUE 
      ADA CKSC      ADD SC CHECK SUM
      RAL 
      JSB SUMSY     ADD IN THE SYMBOLS
      STA CKSC
      ADB N1
* 
GSUM  STB TEMP1     SAVE ADDRESS OF SYM TBL WD 4
      INB 
      LDA B,I 
      ADA SIDCK     ARITHMETIC SUM FOR SYSTEM CHECK WD
      RAL           ROTATE IT 
      JSB SUMSY     ADD IN THE THE SYMBOLS
      STA SIDCK     AND SAVE IT 
* 
      LDA N5
      JSB MOVE      MOVE SYSTEM ENTRY TO OUTPUT BUFFER
ADDRX NOP 
      DEF L.BUF+1 
      LDA L.BUF+3 
      AND HIMSK 
      IOR B40       ADD BLANK TO 3RD WORD 
      STA L.BUF+3 
* 
      LDA B40 
      STA TEMP1,I   EXCLUDE SYMBOL FROM NEXT PASS 
* 
      JSB WRITF     OUTPUT ENTRY TO SNAP FILE 
      DEF *+5 
      DEF SDCB3+0 
      DEF IERR3+0 
      DEF L.BUF+0 
      DEF P6
      JSB CSPER     CHECK FOR SNAP FILE WRITE ERROR 
* 
      ISZ CNT10 
      JMP GSYEN     GET ANOTHER ENTRY POINT 
* 
ESYEN LDA CNT10 
      LDB TEMP2 
      CPB P1        1ST PASS? 
      RSS           YES 
      JMP PASS2 
      STA #MREP     # OF ENTRY PT 1ST PASS
      LDA SIDCK     CHECK SUM FOR RPL'S 
      STA CKRPL     SAVE IT 
      ISZ TEMP2     SET PASS 2 FLAG 
      JMP SNP2      DO SYS MODULE & SYS COM ENT PT. 
* 
PASS2 STA #ENPT     SAVE # OF ENTRY 2ND PASS
* 
      LDA #SCEP     GET # OF SYS COM ENT. PT. 
      CMA,INA       NEGATE IT 
      STA #SCEP 
* 
      LDA CKSC      SUBTRACT OUT SYSTEM COMMON CKSUM
      CMA,INA         FROM SYS. ID CKSUM
      ADA SIDCK        AND STORE BACK TO CKSUM
      STA SIDCK 
* 
*     FIND & PATCH $CKSM
* 
      LDA D$CKS 
      LDB SIDCK 
      JSB FSYMB 
      JSB MSENT     MISSING SYSTEM ENTRY POINT
* 
*     GET LIBRARY FILE NAME 
* 
      JSB SPACE 
      LDA P12 
      LDB DMS65     PRINT " LIB FILES ? " 
      JSB DRKEY 
* 
      JSB LOCF
      DEF *+4 
      DEF SDCB3+0 
      DEF IERR3+0 
      DEF RECLB+0    GET LIBRARY REC #
* 
RDLIB JSB READ      GET LIBRARY FILE NAME 
      JMP EXIT
      LDA OP? 
      CPA EN
      JMP OTBP
      CPA LI
      JMP LIBRY     GO GET A LIBRARY NAME 
LIERR CLA 
      JSB LDRER     WHAT IS IT??
      JMP OTBP
* 
LIBRY JSB NAMRR     PARSE THE INPUT 
      SSA 
      JMP LIERR 
      LDA IPBUF 
      SZA 
      CPA BLNK2 
      JMP LIERR 
* 
      LDA N6
      JSB MOVE
      DEF IPBUF+0 
      DEF LIBFL 
* 
      JSB WRITF 
      DEF *+5 
      DEF SDCB3+0 
      DEF IERR3+0 
      DEF LIBFL+0   ADDRESS OF LIBRARY FILE 
      DEF P6
      JSB CSPER     CHECK FOR SNAP FILE WRITE ERROR 
* 
      ISZ NLIB      BUMP UP THE NUMBER OF LIBRARY 
      JMP RDLIB 
* 
*     OUTPUT SYSTEM BP TO SNAP
* 
OTBP  JSB LOCF
      DEF *+4 
      DEF SDCB3+0 
      DEF IERR3+0 
      DEF RECBP+0   GET BP REC #
* 
      LDA CBP.L 
      INA 
      STA CSYBP 
      CMA,INA 
      ADA B2000 
      CLB 
      DIV P128
      CMA,INA 
      STA CNT20     NEGATIVE COUNT OF THE # OF 128 WD RECORDS 
      STB ZTEM5    # OF WD REMAINING
* 
      LDA CSYBP 
      ADA LDBP
MBP   STA PNTR      ADDRESS OF DUMMY BP 
      STA ADDBP 
* 
      LDA CNT20 
      SZA,RSS 
      JMP FINBP     BP # LESS THAN 128
* 
      JSB WRITF 
      DEF *+5 
      DEF SDCB3+0 
      DEF IERR3+0 
ADDBP NOP 
      DEF P128
      JSB CSPER     CHECK FOR SNAP FILE WRITE ERROE 
* 
      ISZ CNT20 
      RSS 
      JMP LSTBP 
      LDA PNTR
      ADA P128
      JMP MBP       MORE BP 
LSTBP LDA PNTR
      ADA P128      LAST REMAINING BP 
      STA PNTR
* 
FINBP LDA ZTEM5     FINISH BP OUTPUT
      SZA,RSS 
      JMP ENDBP     NO BP LINK
* 
      LDA PNTR
      STA ADBP
      JSB WRITF 
      DEF *+5 
      DEF SDCB3+0 
      DEF IERR3+0 
ADBP  NOP 
      DEF ZTEM5 
      JSB CSPER     CHECK FOR SNAP FILE WRITE ERROR 
* 
ENDBP LDA CSYBP     # OF LINKS ON BP
      CMA,INA       NEGATE
      ADA B2000 
      STA LCLBP     # OF LABELED COMMON LINK ON BP
* 
      LDA D$LCB 
      LDB CSYBP 
      JSB FSYMB     FIND & PATCH $LCBP
      JSB MSENT 
* 
      LDA P2
      STA IPTN2     REOPEN THE SNAP FILE WITH UPDATA MODE 
      JSB OPSNP     OPEN THE SNAP FILE
* 
      JSB READF     READ IN HEADER RECORD 
      DEF *+6 
      DEF SDCB3+0 
      DEF IERR3+0 
      DEF STRNG+0 
      DEF P20 
      DEF LEN 
* 
      LDB DSTRG 
      LDA #ENPT 
      ADA #MREP     ADD # SYS. ENT. 
      STA B,I 
      INB 
      ADA #SCEP     SUBRTACT OUT # OF S.C. ENT PT 
      STA B,I        LEAVING # OF SYS. ENT PT.
      INB 
      LDA NLIB      # OF LIBRARY
      STA B,I 
      ADB P4
      LDA CKRPL     CK SUM FOR RPL
      STA B,I 
      INB 
      LDA LCLBP     # LABELED COMMON LINKS ON BP
      STA B,I 
      INB 
      LDA SIDCK     SYSTEM CHECK SUM
      SZA,RSS       IF SYS CK SUM IS ZERO SET IT TO 1 
      INA 
      STA B,I 
      INB 
      LDA CKSC      CK SUM FOR SYSTEM COMMON
      ADA B2000     SPECIAL CASE ADD $LCOM
      RAL 
      ADA CBCOM     ADD $BCOM 
      RAL 
      ADA CFWSY     ADD $FWSY 
      RAL 
      STA CKSC      SAVE IT FOR SYS. CKSUM PATCH
      STA B,I 
      ADB P4
      LDA RECLB     LIB ENTRIES REC # 
      STA B,I 
      ADB P3
      LDA RECBP     BASE PAGE ENTRIES REC # 
      STA B,I 
      ADB P3
      STB CNT20 
* 
* 
      LDA N19 
      STA CNT10     CHECKSUM FOR HEADER RECORD
      LDB DSTRG 
      LDA B,I       GET FIRST VALUE 
CKSUM INB 
      ADA B,I       ADD NEXT VALUE
      ISZ CNT10     FINISH ?
      JMP CKSUM     NO ADD NEXT WORD
      STA CNT20,I   REC 1 CKSUM IN WORD 20
* 
      JSB RWNDF     REWIND TO RECORD 1
      DEF *+3 
      DEF SDCB3+0 
      DEF IERR3+0 
* 
      JSB WRITF     WRITE OUT HEADER RECORD 
      DEF *+5 
      DEF SDCB3+0 
      DEF IERR3+0 
      DEF STRNG+0 
      DEF P20 
* 
      JSB CSPER     CHECK FOR SNAP FILE WRITE ERROR 
* 
      JSB CLOS3 
* 
* 
      LDA D$SCC 
      LDB CKSC
      JSB FSYMB     FIND & PATCH $SCCK
      JSB MSENT 
* 
      LDA D$LCO 
      LDB B2000 
      JSB FSYMB     FIND & PATCH LABEL COMMON 
      JSB MSENT 
* 
      LDA D$BCO 
      LDB CBCOM 
      JSB FSYMB     FIND & PATCH UNLABEL COMMON 
      JSB MSENT 
* 
      LDA D$FWS 
      LDB CFWSY 
      JSB FSYMB     FIND & PATCH $FWSY
      JSB MSENT 
* 
      LDA D$SC# 
      LDB C$SC# 
      JSB FSYMB     FIND & PATCH $SC# 
      JSB MSENT 
* 
      LDA D$SCP 
      LDB C$SCP 
      JSB FSYMB     FIND & PATCH $SCPG
      JSB MSENT 
* 
      LDB CBCOM 
      CMB,INB 
      ADB CFWSY     SIZE OF BLANK COMMON
      LDA D$BC# 
      JSB FSYMB     FIND & PATCH $BC# 
      JSB MSENT 
* 
      CLB 
      LDA SLOCC 
      CPA B7777     MAX SIZE? 
      INA           YES , INA TO GET CORRECT PAGE 
      STA SLOCC      AND SAVE 
      DIV B2000 
      STA ZTEM5     SYS SZ IN PAGES 
      STA B 
      ADB N1
      LDA D$SC0     PHYSICAL PAGE # OF SYS COM - 1
      JSB FSYMB     FIND & PATCH $SC0 
      JSB MSENT 
* 
      JSB CNUMD 
      DEF *+3 
      DEF ZTEM5 
      DEF ME76
* 
      JSB SPACE 
      LDA P24 
      LDB MES76 
      JSB DRKEY     PRINT SYSTEM SIZE IN PAGES
* 
      LDA SLOCC 
      ADA LOCC
      CLB 
      DIV B2000 
      STA SLOCC     SAVE $USER PAGE # 
      STA B         PHYSICAL PAGE # OF 1ST USER PARTITION 
      ADB N1
      LDA D$USE 
      JSB FSYMB     FIND & PATCH $USER
      JSB MSENT 
* 
      LDA ZTEM5     SYS SZ
      CMA,INA 
      ADA SLOCC     TOTAL SZ
      ADA N1        SUBTRACT BASE PAGE
      STA ZTEM5     SYS COM SZ
* 
      JSB CNUMD 
      DEF *+3 
      DEF ZTEM5 
      DEF ME77
* 
      JSB SPACE 
      LDA P28 
      LDB MES77 
      JSB DRKEY 
* 
      LDA SLOCC 
      ADA N1        SUBTRACT BASE PAGE
      STA ZTEM5 
      JSB CNUMD 
      DEF *+3 
      DEF ZTEM5 
      DEF ME78
* 
      JSB SPACE 
      LDA P26 
      LDB MES78 
      JSB DRKEY     PRINT TOTAL SZ
* 
      LDA SLOCC     TOTAL SZ IN PAGES 
      CLB 
      DIV P32       GET # OF 32K CHUNKS 
      ADB N1        SUBTRACT BASE PAGE
      STB ZTEM5 
      CLB           PUT IN LOC 0
      JSB STCR1 
* 
      LDA ZTEM5 
      MPY P1024 
      LDB P1        PUT IN LOC 1
      JSB STCR1 
* 
      LDA P128
      STA SEGNM     NORMAL TERMINATION
      JMP EXIT
* 
* 
MES76 DEF *+1 
      ASC 9,* SYS SZ IN PAGES 
ME76  BSS 3 
* 
MES77 DEF *+1 
      ASC 11,* SYS COM SZ IN PAGES
ME77  BSS 3 
* 
MES78 DEF *+1 
      ASC 10,* TOTAL SZ IN PAGES
ME78  BSS 3 
* 
      SKP 
* 
DMS65 DEF MES65 
MES65 ASC 6,* LIB FILES 
* 
D$SCC DEF $SCCK 
$SCCK ASC 3,$SCCK 
* 
D$BC# DEF $BC#
$BC#  ASC 3,$BC#
* 
D$SC0 DEF $SC0
$SC0  ASC 3,$SC0
* 
D$USE DEF $USER 
$USER ASC 3,$USER 
* 
      SKP 
* 
* 
* 
*     CHECK FOR ANY UNDEFS
* 
*     JSB UNDF? 
*      NO UNDEFS
*      YES THERE ARE UNDEFS 
* 
UNDF? NOP 
      CLA 
      STA PNTR
      STA PRTFG     CLEAR 1ST TIME PRINT FLAG 
      JSB L.LUN     GET UNDEFINED EXTERNAL
      DEF *+4 
      DEF ADDR
      DEF PNTR
      DEF FLAG
      SZB           UNDEF ? 
      ISZ UNDF?     YES , UNDEFS
      JMP UNDF?,I   NO
* 
* 
*     CHECK FOR ANY SNAP FILE ERROR 
* 
*     A = ERROR CODE FROM WRITF 
*     JSB CSPER 
* 
CSPER NOP 
      SSA,RSS       ANY ERROR?
      JMP CSPER,I   NO , RETURN 
      LDB F3        ADDRESS OF SNAP FILE NAME 
      JSB FLERR 
      JMP CSPER,I   RETURN
* 
* 
      SKP 
* 
* 
*     LDRER OUTPUTS ERRORS TO THE LIST DEVICE 
* 
*     CALLING SEQUENCE: 
*                       A-REG = +VE ERROR CODE
*                       JSB LDRER 
*                       RETURN
* 
* 
LDRER NOP 
      MPY P3        CALCULATE OFFSET INTO LIST OF ERROR CODE
      ADA EMESS     ADD STARTING ADDRESS OF LIST
      STA B         AND SAVE IN B-REG FOR OUTPUT
      LDA P6        LENGTH OF MESSAGE IN CHARACTERS 
      JSB DRKEY     PRINT IT
      ISZ ERRCT     BUMP UP ERROR COUNT 
      JSB ASTRX     PRINT ******
      JSB SPACE 
      JMP LDRER,I   AND RETURN
* 
* 
EMESS DEF *+1 
      ASC 3,??      WHAT IS IT ?? 
      ASC 3,CK SUM  CHECK SUM ERROR 
      ASC 3,IL REC  ILLEGAL RECORD
      ASC 3,OV MEM  MEMORY OVERFLOW 
      ASC 3,OV FIX  FIXUP TABLE OVERFLOW
      ASC 3,OV SYM  SYMBOL TABLE OVERFLOW 
      ASC 3,CM BLK  COMMON BLOCK ERROR
      ASC 3,DU ENT  DUPLICATE ENTRY POINTS
      ASC 3,RE SEQ  RECORD OUT OF SEQUENCE
      ASC 3,IL REC  ILLEGAL RELOCATABLE 
      ASC 3,RF EMA  ILLEGAL REFERENCE TO EMA
      ASC 3,RF EMA  ILLEGAL REFERENCE TO EMA
      ASC 3,IL SEG  SEGMENTED PROG. NOT ALLOWED 
      ASC 3,SNP ER  SNAP FILE ERROR 
      ASC 3,        FREE FOR NEW ERROR MSG 14 
      ASC 3,MS ENT  MISSING SYSTEM ENTRY POINT
      ASC 3,LOC WR  WARNING LOCC SET BACKWARD 
      ASC 3,NT TP6  WARNING NOT TYPE 6 MODULE DURING SYS COM
      ASC 3,        FREE FOR NEW ERROR MSG 18 
      ASC 3,        FREE FOR NEW ERROR MSG 19 
      ASC 3,UN EXT  UNDEFINED EXTERNAL
      ASC 3,IL BND  ILLEGAL BOUND IN LOCC OR BPLOCC 
      ASC 3,        FREE FOR NEW ERROR MSG 22 
      ASC 3,OV BSE  BASE PAGE LINKAGE OVERFLOW
      ASC 3,BNK CM  BLANK COMMON ERROR
      ASC 3,MOD NM  ILLEGAL MODULE NAME IN SEARCH COMND 
      ASC 3,        FREE FOR NEW ERROR MSG 26 
      ASC 3,NO MOD  SPECIFIED MODULE NAM NOT FOUND
* 
      SKP 
* 
*     OUTPUT CONSECUTIVE CORE LOCATIONS 
* 
*     LDA START     STARTING ADDRESS
*     LDB END       ENDING ADDRESS
*     JSB SETCR     DATA WILL BE AT STRNG 
* 
SETCR NOP 
      STA ZTEM5    STARTING ADDRESS 
      CMA,INA       NEGATE STARTING ADDRESS 
      ADA B         ADD ENDING ADDRESS
      INA           ADD 1 FOR TOTAL # TO OUTPUT 
      CMA,INA       NEGATE FOR COUNT
      STA CNT10 
      LDA DLBUF     ADDRESS OF DATA 
      STA CNT20 
SET10 LDA CNT20,I   GET DATA
      LDB ZTEM5     GET ADDRESS 
      JSB STCR1     OUTPUT
      ISZ CNT20     NEXT DATA WORD
      ISZ ZTEM5     NEXT ADDRESS
      ISZ CNT10     ANY MORE OUTPUT ? 
      JMP SET10     YES 
      JMP SETCR,I   NO
* 
      SKP 
      SKP 
* 
*     DISPLAY UNDEF 
* 
DSUND NOP 
      CLA 
      STA PNTR
      STA PRTFG     CLEAR 1ST TIME PRINT FLAG 
DSP10 JSB L.LUN     GET A UNDEFINED EXTERNAL
      DEF *+4 
DADDR DEF ADDR      ADDRESS OF 3 WORD UNDEF 
      DEF PNTR      GET THE ADDRESS 
      DEF FLAG
      LDA ADDR
      SZA,RSS       IS THERE A UNDEFINED
      JMP DSUND,I   NO , FINISH 
      LDA ADDR,I    GET SYMBOL
      STA TEMP4     SAVE IT 
      AND M7777     MASK PRINT IT BIT 
      STA ADDR,I     FOR COMPARISON 
      LDA ADDR
      RAL 
      LDB .ZPRV 
      RBL 
      JSB .CBT
      DEF P5
      NOP 
      JMP DSP70 
      NOP 
      NOP 
      LDA ADDR
      RAL 
      LDB .ZRNT 
      RBL 
      JSB .CBT
      DEF P5
      NOP 
      JMP DSP70 
      NOP 
      NOP 
      LDA TEMP4     RESTORE WORD 1 WITH FORMER PRINT IT BIT 
      STA ADDR,I
      LDA PRTFG     WANT TO PRINT HEADER? 
      SZA 
      JMP DSP60     NO
      JSB SPACE     YES 
      LDA P20 
      STA PRTFG 
      JSB LDRER 
DSP60 LDA P5
      LDB ADDR       GET SYMBOL ADDRESS 
      JSB DRKEY     GO PRINT IT 
      JMP DSP10     GO GET ANOTHER SYMBOL 
* 
DSP70 LDA TEMP4     GET WORD 1
      STA ADDR,I     AND RESTORE IT 
      JMP DSP10 
* 
PRTFG NOP 
TEMP4 NOP 
* 
* 
      SKP 
* 
* 
*     SWITCH .ZPRV AND .ZRNT TO RSS ( 2001B ) 
* 
*     CALL SEQUENCE 
*     LDA ADDRESS OF SYMBOL 
*     JSB SWRSS 
* 
SWRSS NOP 
      JSB LADD
      LDA SADDR     ADDRESS OF SYMBOL IN TABLE
      ADA P3
      LDB P4
      BLF,BLF 
      STB A,I       PUT SYMBOL AS RP IN WD 4
      INA 
      LDB B2001 
      STB A,I       RSS ( 2001B ) IN WD 5 
      JMP SWRSS,I 
* 
* 
*     SUM IN THE SYMBOLS FOR THE CHECK SUM
* 
*     (A) = CHECK SUM VALUE 
*     (B) = POINTS TO WORD 5 OF SYMBOL
*     JSB SUMSY 
* 
SUMSY NOP 
      ADB N2        POINT BACK TO WORD 3 OF SYMBOL TBL
      ADA B,I       ADD TO CHECK SUM
      RAL           ROTATE
      ADB N1        POINT BACK TO WORD 2 OF SYMBOL TBL
      ADA B,I       ADD TO CHECK SUM
      RAL           ROTATE
      ADB N1        POINT BACK TO WORD 1 OF SYMBOL TBL
      ADA B,I       ADD TO CHECK SUM
      RAL           ROTATE
      JMP SUMSY,I   RETURN
* 
* 
      SKP 
*     THE BUFCL SUBROUTINE STUFFS A 60 WORD BUFFER WITH CALL+1
* 
* 
*     CALLING SEQUENCE: 
*       A = IGNORED 
*       JSB BUFCL 
*       CALL+1 = DATA TO STUFFED
* 
*     RETURN: CONTENTS OF A AND B ARE DESTROYED 
* 
BUFCL NOP 
      LDB DLBUF 
      LDA N60 
      STA WDCNT     SET BUFFER LENGTH = 60
      LDA BUFCL,I   GET STUFF DATA
      STA B,I       CLEAR BUFFER WORD 
      INB 
      ISZ WDCNT     ALL WORDS CLEAR?
      JMP *-3       NO - CONTINUE CLEARING
      ISZ BUFCL 
      JMP BUFCL,I RETURN
* 
WDCNT NOP           TEMPORARY WORD COUNTER
* 
* 
* 
* 
*     MISSING SYSTEM SYMBOL -- ERROR MESSAGE
* 
MSENT NOP 
      LDA PRERR 
      SZA           PRINT ERROR?
      JMP MSENT,I   NO , PRINTED PREVIOUSLY 
      LDA P15       YES 
      JSB LDRER     PRINT " MS ENT "
      CCA 
      STA PRERR     SET ERROR PRINTED FLAG
      JMP MSENT,I 
* 
* 
      SKP 
*     TO ALLOCATE A BASE PAGE LINK
* 
* 
*     JSB TABLE ENTRY #1,I  L.ABP 
*     DEF RETRN 
*     DEF DUMY      RETURNS DUMMY BP ADDRESS  NEG = ERROR 
*     DEF REAL      RETURNS REAL BP ADDRESS 
* 
DBP   NOP 
RBP   NOP 
L.ABP NOP 
      JSB .ENTR 
      DEF DBP 
      LDA LNKDR     GET LINK DIRECTION
      CPA N1        IS IT A SYSTEM LINK ? 
      JMP L.A10     YES 
      LDA CBP.L     GET REAL BP 
      ADA LDBP      ADD LOWER BOUND FOR DUMMY BP
      CPA CSDBP     HAS IT REACH SYS BP AREA? 
      JMP L.A20     YES , ERROR 
      STA DBP,I 
      INA 
      STA CUDBP 
      LDA CBP.L     GET CURRENT USER REAL BP
      STA RBP,I 
      INA 
      STA CBP.L     UPDATE CURRENT REAL BP
      JMP L.ABP,I   RETURN
* 
*     SYSTEM LINK ALLOCATION
* 
L.A10 LDA CBP.L     GET REAL BP 
      ADA LDBP      ADD LOWER BOUND FOR DUMMY BP
      CPA CUDBP     HAS IT REACH USER BP AREA?
      JMP L.A20     YES , ERROR 
      STA DBP,I     NO , STORE DUMMY BP 
      ADA N1
      STA CSDBP     UPDATE CURRENT SYS DUM BP 
      LDA CBP.L 
      STA RBP,I     STORE REAL BP 
      ADA N1
      STA CBP.L     UPDATE CURRENT SYS REAL BP
      JMP L.ABP,I 
* 
L.A20 CCA           ERROR 
      STA DBP,I 
      LDA P23 
      JSB LDRER     BASE PAGE LINKAGE OVERFLOW
      JMP EXIT
* 
* 
* 
      SKP 
* 
*     TO SCAN DUMMY BASE PAGE ( OR EXISTING BASE PAGE ) 
*     FOR AN EXISTING BASE LINK.
* 
*     JSB TABLE ENTRY #2,I  L.SCN 
*     DEF RETRN 
*     DEF VALUE     VALUE TO SCAN FOR  (REAL BP)
*     DEF BPADR     +/-  ADDRESS TO USE / NOT FOUND 
* 
VALAD NOP           ADDRESS OF VALUE
BPADR NOP 
L.SCN NOP 
      JSB .ENTR 
      DEF VALAD 
      LDA VALAD,I   GET VALUE TO SCAN FOR 
      LDB TDBP      SCAN SYS DUMMY BP 
L.S20 CPB CSDBP     IS IT EQUAL TO CURRENT SYS DUM BP 
      JMP L.S30     YES , TRY USER BASE PAGE
      CPA B,I       IS IT EQUAL TO SEARCH VALUE 
      JMP FNDSY     YES , SYSTEM BP LINK
      ADB N1        NO, ADD LINK DIRECTION FOR NEXT BP VALUE
      JMP L.S20     NO CONTINUE SEARCH
FNDSY CMB,INB       CALCULATE REAL BP ADDRESS 
      ADB TDBP      ADD TOP OF DUMMY BP ADDRESS 
      CMB,INB       DIFFERENCE BETWEEN CURRENT AND TOP DUM BP 
      ADB B1777     SUBTRACT FROM TOP OF REAL BP
      STB BPADR,I   THIS IS THE REAL LINK 
      JMP L.SCN,I   RETURN
* 
L.S30 LDB LDBP      LOWER BOUND FOR USER DUMMY BP 
      ADB BPFWA     SET USER BP LOCATION
L.S60 CPB CUDBP     IS IT EQUAL CURRENT USER DUM BP?
      JMP NOTF      YES , RETURN NOT FOUND
      CPA B,I 
      JMP FNDUS     YES , FOUND USER BP 
      INB           NO , GET NEXT ADDRESS 
      JMP L.S60     IS IT EQUAL TO CURRENT BP?
FNDUS LDA LDBP      FOUND USER BP 
      CMA,INA 
      ADB A 
      STB BPADR,I 
      JMP L.SCN,I 
* 
NOTF  CCB           NOT FOUND 
      STB BPADR,I 
      JMP L.SCN,I 
* 
      SKP 
* 
*     ROUTINE TO FIND SYSTEM SYMBOL AND PATCH UP ITS VALUE
* 
*     CALLING SEQUENCE
* 
*     LDA ADDRESS OF SYMBOL 
*     LDB VALUE TO PATCH IN 
*     JSB FSYMB 
*     ERROR RETURN
*     NORMAL RETURN 
* 
FSYMB NOP 
      STB PVAL      SAVE PATCH VALUE
      JSB LADD      FIND SYMBOL 
      SZA           ANY ERROR 
      JMP ERTN      YES , ERROR 
      LDA PVAL      PATCH VALUE 
      LDB VALUA 
      JSB STCR1 
      ISZ FSYMB     NORMAL RETURN 
ERTN  JMP FSYMB,I 
* 
PVAL  NOP 
      SKP 
* 
*     FIND SYMBOL IN SYMBOL TABLE 
* 
*     CALLING SEQUENCE
*     LDA ADDRESS OF SYMBOL IN ASCII
*     JSB LADD
*      NORMAL RETURN
*      (A)=RESULT 
* 
* 
LADD  NOP 
      STA SYBAD 
      JSB L.ADD 
      DEF *+5 
SYBAD NOP 
      DEF VALUA 
      DEF SADDR 
      DEF RESLT 
      LDA RESLT 
      JMP LADD,I
* 
VALUA NOP 
SADDR NOP 
RESLT NOP 
* 
* 
* 
*     SUBROUTINE TO FIND FIXUP ENTRIES
* 
*     (A)=ADDRESS OF .ZPRV/.ZRNT
*     (B)=CURRENT POINTER TO FIXUP ENTRY
* 
*     CALLING SEQUENCE
*     JSB FDFIX 
*      END OF SEARCH
*      FOUND MATCHING ENTRIES 
* 
FDFIX NOP 
FD10  CPB FXS.L     END OF FIXUP? 
      JMP FDFIX,I 
      INB 
      LDA B,I       GET FIXUP ENTRY WORD 2
      CPA SYMCH     IS IT A MATCHING ENTRY
      JMP FOND      YES 
      ADB P3
      JMP FD10      GET NEXT ONE
* 
FOND  ADB P3
      STB TEMP1 
      ADB N4        POINT TO WD 1 OF FIXUP
      LDA B,I       ADDRESS OF DEF EXIT 
      ISZ FDFIX 
      JMP FDFIX,I 
* 
* 
* 
*     READ A WORD FROM THE OUTPUT FILE
* 
*     JSB RDOUT 
*     DEF *+3 
*     DEF DADD      ADDRESS TO READ 
*     DEF DVAL      CONTENTS OF ADDRESS 
* 
DADD  NOP 
DVAL  NOP 
RDOUT NOP 
      JSB .ENTR 
      DEF DADD
* 
      CLB 
      LDA DADD,I    GET ADDRESS 
      ADA P128      REC # =(ADDRESS+128)/128
      DIV P128      QUOTIENT IN A = RECORD #
      ADA RECOF     ADD RECORD OFFSET 
      STA RECN      THIS IS THE RECORD #
      INB           REMAINDER IN B+1 = WORD POSITION
      STB WORDN     THIS THE WORD POSITION IN THE RECORD
* 
      JSB READF 
      DEF *+7 
      DEF ODCB2 
      DEF IERR5 
      DEF RDCB5 
      DEF P128
      DEF RTEMP 
      DEF RECN
* 
      LDA WORDN 
      ADA N1
      ADA DDCB5 
      LDB A,I 
      STB DVAL,I
      JMP RDOUT,I 
* 
* 
RECN  NOP 
RTEMP NOP 
WORDN NOP 
* 
      SKP 
* 
*     ROUTINE TO READ IN A RELOCATABLE RECORD . 
* 
*     JSB L.RED 
*     DEF *+2 
*     DEF FLAG      0/-1  OK/EOF
* 
* 
DFLAG NOP 
L.RED NOP 
      JSB .ENTR 
      DEF DFLAG 
RREAD JSB READF     READ THE NEXT REL RECORD
      DEF *+6 
      DEF RDCB5 
      DEF IERR5 
      DEF L.BUF+0   RELOCATABLE RECORD BUFFER ! 
      DEF P60 
      DEF LEN       ACTUAL RECORD LENGTH READ 
* 
      SSA,RSS       ANY ERROR?
      JMP FNXT2     NO
      STA DFLAG,I 
      JMP L.RED,I 
* 
FNXT2 STA DFLAG,I 
      LDA LEN       GET THE RECORD LENGTH READ
      SZA,RSS       ZERO RECORD LENGTH ?
      JMP RREAD     YES, SO TRY AGAIN 
      SSA,RSS       NO, WAS IT A NEG LENGTH ( -1 )
      JMP L.RED,I   NO , RETURN 
      STA DFLAG,I   YES , SET EOF 
      JMP L.RED,I 
* 
* 
      SKP 
      SKP 
* 
TABLE DEF L.ABP+0 
      DEF L.SCN+0 
      DEF L.OUT+0 
* 
* 
      SKP 
* 
P1    DEC 1 
P2    DEC 2 
P3    DEC 3 
P4    DEC 4 
P5    DEC 5 
P6    DEC 6 
P7    DEC 7 
P8    DEC 8 
P9    DEC 9 
P10   DEC 10
P12   DEC 12
P15   DEC 15
P16   DEC 16
P17   DEC 17
P20   DEC 20
P21   DEC 21
P23   DEC 23
P24   DEC 24
P25   DEC 25
P26   DEC 26
P27   DEC 27
P28   DEC 28
P32   DEC 32
P60   DEC 60
P120  DEC 120 
P128  DEC 128 
P1024 DEC 1024
* 
N1    DEC -1
N2    DEC -2
N3    DEC -3
N4    DEC -4
N5    DEC -5
N6    DEC -6
N19   DEC -19 
N60   DEC -60 
* 
B17   EQU P15 
B40   EQU P32 
B101  OCT 101 
B1677 OCT 1677
B1777 OCT 1777
B2000 EQU P1024 
B2001 OCT 2001
B7777 OCT 77777 
* 
M2000 OCT -2000 
M1000 OCT 100000
* 
BL    ASC 1,BL
BP    ASC 1,BP
CO    ASC 1,CO
DI    ASC 1,DI
EN    ASC 1,EN
LE    ASC 1,LE
LI    ASC 1,LI
LO    ASC 1,LO
MS    ASC 1,MS
OF    ASC 1,OF
ON    ASC 1,ON
RE    ASC 1,RE
SE    ASC 1,SE
* 
HIMSK OCT 177400
M7777 EQU B7777 
* 
JMP3I JMP 3,I 
* 
      SKP 
* 
#MREP NOP           # OF RP,ABS & MEM RES ENT. PT.
#SCEP NOP           # OF SYS. COM. ENTRY PT.
ADDR  NOP 
      NOP 
      NOP 
ADFEX NOP 
AEXIT NOP 
CKRPL NOP           CK SUM FOR RPL
CKSC  NOP           CK SUM FOR SYS. COM.
CNT10 NOP 
CNT20 NOP 
CSYBP NOP 
FLAG  NOP 
INDFG NOP   0/9  NOT AN INDEX REC/THIS IS AN INDEX REC
IPTN1 DEC 1         OPEN NON EXECLUSIVE FOR REL & SEARCH
JBLBX NOP           JSB $LIBX,I 
LCLBP NOP           # OF LABELED COMMON LINKS ON BP 
LEN   NOP           LEN OF RELOCATABLE RECORD 
MODFD NOP           0/1 MODULE NOT FOUND/MODULE FOUND 
MULT  NOP           0/-1 YES/NO , NOT A MULTIPLE SCAN 
PNTR  NOP 
RECBP NOP           REC # OF BASE PAGE LINKS
RECLB NOP           REC # OF LIBRARY
SBFLD NOP           SUBFIELD REC , GEN=0
SMDNM NOP           0/1 NO NAME/SEARCH FOR MODULE NAME
SNPLB NOP 
SUBLD NOP           ANY SUBROUTINE LOADED DURING A SNAP LIB SCAN
SYMCH NOP 
TAGSM NOP           TAG BIT 4 = SYS COM , BIT 5 = NOT INCLUDED IN SNAP
TCBPL NOP 
TEMP1 NOP 
TEMP2 NOP 
TEMP3 NOP 
TMPBP NOP 
TLOCC NOP 
TSDBP NOP 
TYPE  NOP           TYPE OF MODULE
TP67F NOP 
VALUR NOP 
ZTEM5 NOP 
* 
* 
MDNAM NOP 
      NOP 
      NOP 
DLBUF DEF L.BUF+0 
* 
LIBFL BSS 6 
A     EQU 0 
B     EQU 1 
* 
      END L20G2 
                                                                                                                                                                                                                                                