SPL,L,O,M,C ! NAME: T.TRF ! USE: PRODUCES TRANSFER FILES USED TO BUILD BASIC OVERLAYS ! SYSTEM: RTE-II AND RTE-III ! SOURCE: 92101-18024 ! RELOC: 92101-16024 ! PGMR: B.J.L. ! DATE: 800129 ! ! **************************************************************** ! * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1975. 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. * ! **************************************************************** ! NAME T.TRF(8) "92101-16024 REV.2013 800129" ! ! LET T.ENT, \ENTRY POINT NAMES T.DCB, \DCB BUFFER (IN MAIN) T.LEN, \# OF OVERLAYS T.SUB, \SUBROUTINE COUNT BUFFER T.OVB, \OVERLAY NAMES BUFFER T.SEC, \OV.DIR. SEC.CODE T.CRF, \OV.DIR. CART.# T.ERN, \ERROR NUMBER T.BRN, \BRANCH TABLE T.LST \ASCII LIST DEVICE BE INTEGER,EXTERNAL ! LET WRITF, \FMGR WRITE RECORD READF, \FMGR READ RECORD RWNDF, \FMGR REWIND CNUMD \CONVERT BINARY TO ASCII BE SUBROUTINE,EXTERNAL ! LET .DFER \3-WORD TRANSFER BE SUBROUTINE,DIRECT,EXTERNAL ! LET CONVT \CONVERT TO ASCII BE SUBROUTINE ! LET WRTRC, \ COMPR BE SUBROUTINE,DIRECT ! LET IABS \GET ABSOLUTE VALUE BE FUNCTION,DIRECT,EXTERNAL ! LET KCVT \BINARY TO ASCII (2-DIG) BE FUNCTION,EXTERNAL ! LET OVBUF, \OVERLAY NAMES POINTER ENBUF, \ENTRY POINTS POINTER SEQU(300), \SEQUENCE NUMBERS SEQBF, \SEQUENCE NUMBER POINTER BRBUF, \BRANCH TABLE POINTER LGREC(4), \":LG,10" LDREC(8), \":RU,LOADR,99,6,7" LIST(2), \ASCII LIST DEVICE LDRC0(3), \ LDRC1, \ LDRC2(2), \ MRREC(3), \":MR,FILNAM" FNAME(3), \FILE NAME FSECS, \DELIMITER FSEC(3), \SECURITY CODE FICRS, \DELIMITER FICR(3), \CARTRIDGE REF. # MRCAL(3), \":MR,CALSB" TRREC(2) \"::" BE INTEGER ! INITIALIZE TRREC TO 1,"::" INITIALIZE LGREC TO 3,":LG,10" INITIALIZE LDREC,LIST,LDRC0,LDRC1,LDRC2 TO\ 15,":RU,LOADR,99, , 007, 000 " INITIALIZE MRREC,FNAME,FSECS,FSEC, \ FICRS,FICR TO 13,":MR,",11(0) INITIALIZE MRCAL TO "CALSB " ! ! ! THE FOLLOWING SUBROUTINE CREATES THE TRANSFER ! FILE FOR LOADING OF THE FOREGROUND DEVICE ! SUBROUTINE OVERLAYS. IT WORKS WITH A BUFFER ! OF OVERLAY NAMES (WITH NUMBER OF SUBROUTINES IN ! IN EACH) AND A BUFFER OF SUBROUTINE NAMES. ! ! T.TRF: SUBROUTINE DIRECT,GLOBAL ! SEQBF _ @SEQU !SET UP POINTERS. ENBUF _ @T.ENT; BRBUF _ @T.BRN + 1 SZSUB _ @T.SUB; RWNDF(T.DCB) !REWIND FILE. ! REPEAT 300 TIMES DO \MOVE SEQUENCE [$SEQBF _ $BRBUF; \NUMBERS OUT SEQBF _ SEQBF + 1; \OF BRANCH TABLE. BRBUF _ BRBUF + 2] ! I _ 0 ALWAYS DO \READ IN ALL [READF(T.DCB,T.ERN,$ENBUF,5,J); \THE FILE NAMES. IF T.ERN THEN RETURN; \CHECK ERRORS. IF J = -1 THEN GOTO T.TR1; \FINISHED? ENBUF _ ENBUF + 5; I _ I + 1] !NO - CONTINUE. ! T.TR1: ENBUF _ @T.ENT; L _ 0 !RESET POINTER. SEQBF _ @SEQU REPEAT T.LEN TIMES DO [ \FOR EACH OVERLAY T.TR4: IFNOT $SZSUB THEN [ \BYPASS UNUSED SZSUB _ SZSUB + 1; GOTO T.TR4]; \OVERLAY NUMBERS. IF [I _ $SZSUB AND 77K] > 1 THEN[\DO THE FOLLOWING: FOR J _ (L+1) TO (L+I-1) DO \CHECK FOR DUPLICATE [FOR K _ L TO (J-1) DO \FILE NAMES AND [COMPR]]]; \MARK THEM. SZSUB _ SZSUB + 1; L _ L + I] !ADVANCE TO NEXT OVERLAY. ! RWNDF(T.DCB); SZSUB _ @T.SUB !REWIND FILE. ! I _ 0; OVBUF _ @T.OVB !FIX UP RECORDS TO T.TR2: WRTRC(LGREC) ? [RETURN] !LOAD EACH OVERLAY. CONVT(T.SEC,T.CRF) !CONVERT CODES. T.TR3: IFNOT $SZSUB THEN [ \BYPASS UNUSED SZSUB _ SZSUB + 1; GOTO T.TR3] !OVERLAY NUMBERS. .DFER(FNAME,$OVBUF) !CREATE MR OF OVER- WRTRC(MRREC) ? [RETURN] !LAY DIRECTORY. REPEAT ($SZSUB AND 77K) TIMES DO [ \CREATE MR RECORDS. BRBUF _ 5 * $SEQBF + @T.ENT; \GET RIGHT NAME. IF $BRBUF THEN [ \IF NAME UNIQUE, .DFER(FNAME,$BRBUF); \MOVE IN NAME. CONVT($(BRBUF+3),$(BRBUF+4)); \CONVERT CODES. WRTRC(MRREC) ? [RETURN]]; \WRITE RECORD. SEQBF _ SEQBF + 1] !INCREMENT POINTER. LDRC1 _ KCVT(($SZSUB -> 6) AND 77K) !LOADER PAGE SIZE. ! SET LOADER OPTION IF(($SZSUB -<4)AND 7K)=0 THEN[LDRC0(2)_(KCVT(6)AND 77K)OR 30000K] IF(($SZSUB -<4)AND 7K)=1 THEN[LDRC0(2)_(KCVT(5)AND 77K)OR 30000K] IF(($SZSUB -<4)AND 7K)=2 THEN[LDRC0(2)_(KCVT(8)AND 77K)OR 30000K] IF(($SZSUB -<4)AND 7K)=3 THEN[LDRC0(2)_(KCVT(0)AND 77K)OR 30000K] IF(($SZSUB -<4)AND 10K) THEN[LDRC0(1)_(KCVT(1)AND 77K)OR 20000K] OVBUF _ OVBUF + 3 !INCREMENT POINTER. SZSUB _ SZSUB + 1 LIST(1) _ T.LST !LIST DEVICE 800119 WRTRC(LDREC) ? [RETURN] !WRITE RU RECORD. LDRC0(1) _ 0 ! ADDED 800119 I _ I + 1 IF I < T.LEN THEN GOTO T.TR2 ! WRTRC(TRREC) !WRITE "::" RETURN END ! ! WRTRC: SUBROUTINE(BUF) DIRECT,FEXIT LET BUF BE INTEGER WRITF(T.DCB,T.ERN,$(@BUF+1),BUF) IF T.ERN THEN FRETURN RETURN END ! ! CONVT: SUBROUTINE(NUM1,NUM2) LET NUM1,NUM2 BE INTEGER .A. _ NUM1 CNUMD(IABS,FSEC) !CONVERT SECURITY CODE. IF NUM1 < 0 THEN FSECS _ ":-", \COMPENSATE FOR ELSE FSECS _ ": " !NEGATIVE NUMBER. .A. _ NUM2 CNUMD(IABS,FICR) !CONVERT CART. #. IF NUM2 < 0 THEN FICRS _ ":-", \COMPENSATE FOR ELSE FICRS _ ": " !NEGATIVE NUMBER. RETURN END ! ! COMPR: SUBROUTINE DIRECT,FEXIT BRBUF _ ENBUF + 5 * $(SEQBF+J) OVBUF _ ENBUF + 5 * $(SEQBF+K) !COMPARE TWO FIVE- REPEAT 5 TIMES DO [ \WORD ARRAYS AND IF $BRBUF # $OVBUF THEN RETURN; \MARK ONE OF THEM BRBUF _ BRBUF + 1; \WITH A ZERO IF OVBUF _ OVBUF + 1] !THEY MATCH. $(OVBUF-5) _ 0 RETURN END ! ! END END$