Google
 

Trailing-Edge - PDP-10 Archives - bb-d868c-bm_tops20_v4_2020_distr - 4-sources/mapper.mac
There are 20 other files named mapper.mac in the archive. Click here to see a list.
;<4.UTILITIES>MAPPER.MAC.8,  3-Jan-80 15:26:02, EDIT BY R.ACE
;UPDATE COPYRIGHT DATE
;<4.UTILITIES>MAPPER.MAC.7,  9-Nov-79 10:41:52, EDIT BY DBELL
;TCO 4.2569 - DON'T DO RLJFN AFTER GET JSYS
;<4.UTILITIES>MAPPER.MAC.6,  7-May-79 12:38:32, EDIT BY KIRSCHEN
;REMOVE EXTRA BRACKET ON ERJMP AFTER GET
;<4.UTILITIES>MAPPER.MAC.5,  7-May-79 11:33:54, EDIT BY HURLEY
;CLEAR THE CACHE BEFORE LOADING IT
;<4.UTILITIES>MAPPER.MAC.4,  2-May-79 13:25:32, EDIT BY KIRSCHEN
;ADD ERROR MESSAGE IF GET FAILS
;<4.UTILITIES>MAPPER.MAC.3, 10-Mar-79 14:16:56, Edit by KONEN
;UPDATE COPYRIGHT FOR RELEASE 4
;<4.UTILITIES>MAPPER.MAC.1, 16-Nov-78 14:17:56, EDIT BY HURLEY

;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
;  OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;
;COPYRIGHT (C) 1976,1977,1978,1979,1980 BY DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS.

	TITLE MAPPER - PROGRAM TO LOAD THE PROGRAM NAME CACHE

	SEARCH MONSYM,MACSYM

	SALL

;VERSION NUMBER

	VMAJOR==4		;MAJOR VERSION
	VMINOR==0		;MAINTENANCE RELEASE NUMBER
	VEDIT==1		;EDIT NUMBER
	VWHO==0			;CUSTOMER EDIT NUMBER

	VMAPPER==<VWHO>B2!<VMAJOR>B11!<VMINOR>B17!VEDIT

ENTVEC:	JRST START		;START POINT
	JRST START		;REENTER
	VMAPPER			;VERSION NUMBER

;AC DEFINITIONS - TOPS-20 STANDARDS APPLY

	T1=1			;TEMPORARY ACS
	T2=2
	T3=3
	T4=4
	Q1=5			;PERMANENT ACS
	Q2=6
	Q3=7
	P1=10			
	P2=11
	P3=12
	P4=13
	P5=14
	P6=15
	CX=16			;TEMP
	P=17			;PUSH DOWN POINTER

	FPAG==10		;FIRST PAGE TO USE FOR MAPPING
	LPAG==770-NPAG		;LAST PAGE FOR MAPPING
	NPAG==2			;NUMBER OF PAGES TO BE MAPPED

DEFINE ERRMES (A) <		;FATAL ERROR
	JRST [	MOVEI T1,.PRIOU	;OUTPUT ERROR INFO TO CONTROLING TTY
		HRLOI T2,.FHSLF
		SETZ T3,
		ERSTR
		 JFCL
		 JFCL
		HRROI T1,A	;OUTPUT REMAINDER OF MESSAGE
		PSOUT
		HALTF		;THEN STOP
		JRST START]>

DEFINE WARN (A,B) <		;WARNING MESSAGE - NON-FATAL
	JRST [	MOVEI T1,.PRIOU
		HRLOI T2,.FHSLF
		SETZ T3,
		ERSTR
		 JFCL
		 JFCL
		MOVEI T1," "
		PBOUT
		HRROI T1,B	;OUTPUT THE WARNING MESSAGE
		PSOUT
		HRROI T1,[ASCIZ/
/]
		PSOUT
		A]>		;DO THE INSTRUCTION SUPPLIED IN CALL

START:	RESET			;INITIALIZE THE WORLD
	MOVE P,[IOWD PDLEN,PDL]	;SET UP A PUSH DOWN LIST
	MOVEI T1,.FHSLF
	SETOB T2,T3
	EPCAP			;ENABLE WHEEL OR OPERATOR
	MOVEI T1,FPAG		;INIT STARTING VARIABLES
	MOVEM T1,MPAG		;FIRST FREE PAGE FOR MAPPING IN NON-EXE FILES
	MOVEI T1,.FHSLF		;USE THE CURRENT FORK BEFORE GETTING ANOTHER
	MOVEM T1,FORKH
	MOVEI T1,0		;CLEAR THE PROGRAM NAME CACHE
	GET			;GET WITH AC 1 = 0 CLEARS THE CACHE
	 ERJMP .+1
	MOVSI T1,(GJ%SHT!GJ%OLD)
	HRROI T2,[ASCIZ/SYSTEM:PROGRAM-NAME-CACHE.TXT/]
	GTJFN			;LOOKUP THE LIST OF FILES TO BE CACHED
	 ERRMES (<[ASCIZ/SYSTEM:PROGRAM-NAME-CACHE.TXT/]>)
	MOVEM T1,PNCJFN		;SAVE THE JFN
	MOVE T2,[070000,,OF%RD]
	OPENF			;OPEN THE LIST OF FILES
	 ERRMES <[ASCIZ/SYSTEM:PROGRAM-NAME-CACHE.TXT/]>
LOOP:	MOVEI P1,5		;SET UP TO READ IN A LINE FROM THE LIST
	MOVE P2,[RD%TOP!RD%JFN]	;BREAK ON CR-LF
	HRLZ P3,PNCJFN		;GET JFN OF FILE
	HRRI P3,377777
	HRROI P4,STRING		;READ LINE INTO STRING
	MOVEI P5,STRINC		;LENGTH OF STRING AREA
	MOVEI T1,P1
	TEXTI			;READ IN A LINE
	 ERJMP DONE		;IF NO MORE, THEN DONE
	MOVSI T1,(GJ%SHT!GJ%OLD)
	HRROI T2,STRING		;NOW LOOKUP THE FILE INDICATED IN LIST
	GTJFN
	 WARN (<JRST LOOP>,<STRING>)
	MOVEM T1,JFN		;SAVE THE JFN
	HRROI T1,TYPSTR
	HRRZ T2,JFN
	MOVX T3,1B11
	JFNS			;GET THE FILE TYPE
	MOVE T1,TYPSTR
	CAMN T1,[ASCIZ/EXE/]	;IS THIS AN .EXE FILE?
	JRST LOOP1		;YES, GO DO A GET JSYS
	HRRZ T1,JFN		;NO, USE PMAP TO MAP IN THE PAGES
	MOVE T2,[440000,,OF%RD]	;MAP IT FOR READ ONLY
	OPENF			;OPEN THE FILE TO BE CACHED
	 WARN (<JRST LOOP>,<STRING>)
	FFFFP			;MAP UP TO THE FIRST HOLE
	HRRZ T3,T1		;GET THE NUMBER OF PAGES IN THE FIRST BLOCK
	CAIL T3,LPAG		;MAKE SURE IT WILL FIT IN A FORK
	MOVEI T3,LPAG-1		;IF NOT, THEN LIMIT IT TO ONE FORK
	MOVE T2,MPAG		;GET THE START OF THE AREA TO MAP INTO
	ADD T2,T3
	CAILE T2,LPAG		;IS THERE ENOUGH ROOM IN THIS FORK?
	JRST [	SETZ T1,
		CFORK		;NO, GET ANOTHER FORK
		 JRST LOOP
		MOVEM T1,FORKH	;SAVE THE NEW FORK HANDLE
		SETZM MPAG	;START AT THE BEGINNING
		JRST .+1]
	HRLZ T1,JFN		;NOW MAP THE FILE
	MOVE T2,MPAG		;STARTING AT MPAG
	HRL T2,FORKH		;INTO THE DESIGNATED FORK
	HRLI T3,(PM%CNT!PM%RD)	;T3 HAS THE COUNT OF PAGES
	PMAP			;LEAVING THE PAGES MAPPED REDUCES THE 
				;  ACCESS TIME FOR SUBSEQUENT MAPPINGS
				;  BY OTHER USERS
	HRRZ T1,T3
	ADDM T1,MPAG		;UPDATE THE STARTING FREE PAGE
	JRST LOOP		;LOOP BACK FOR OTHER FILES IN LIST

LOOP1:	SETZB T1,T2		;GET A FORK TO DO THE GET INTO
	CFORK			
	 WARN (<JRST LOOP3>,<STRING>)
	MOVEM T1,FORK		;SAVE THE FORK HANDLE
	HRRZ T1,JFN		;GET THE JFN OF THE .EXE FILE
	TXO T1,GT%FL2		;MARK THAT THE EXTENDED FLAGS ARE GIVEN
	HRL T1,FORK		;GET THE FORK TO LOAD INTO
	SETZ T2,
	MOVX T3,G2%FCH		;CAUSE THIS TO BE CACHED
	GET			;GET THE EXE FILE 
	 ERJMP [WARN (<JRST LOOP3>,STRING)]
LOOP2:	HRRZ T1,FORK
	KFORK			;KILL THE FORK (THE FILE REMAINS CACHED)
	JRST LOOP		;LOOP BACK (WITHOUT DOING THE RLJFN!!)

LOOP3:	HRRZ T1,JFN		;RELEASE THE JFN
	RLJFN
	 JFCL
	JRST LOOP		;LOOP BACK FOR THE OTHER FILES

DONE:	HRRZ T1,PNCJFN		;CLOSE THE LIST FILE
	CLOSF
	 JFCL
	WAIT			;GO INTO AN ENDLESS SLEEP
	HALTF
	JRST .-1

	PDLEN==20
PDL:	BLOCK PDLEN		;PUSH DOWN LIST

	STRNGL==40
	STRINC=STRNGL*5-1
STRING:	BLOCK STRNGL		;TEMP STRING
TYPSTR:	BLOCK 10
MPAG:	0			;FIRST FREE PAGE IN MAPPER FORK
JFN:	0			;JFN OF FILE BEING MAPPED
FORK:	0			;FORK TO DO GET'S INTO
FORKH:	0			;FORK TO DO MAP'S INTO
PNCJFN:	0			;JFN OF LIST FILE

	END <3,,ENTVEC>