File: GLOBL.PA of Disk: Disks/MyPDP/m8-blue-rka1-rkb1
(Source file text) 

/GLOBL.PA  VERSION 2
/A PROGRAM TO SHORTEN THE MONITOR SYMBOL LIST
/		OCTOBER 1974
/START-ADDRESS IS 00200
/WHEN ASSEMBLING PARTS OF THE MULTI8-SYSTEM,
/E.G. TASKS,MUCH TIME IS SPENT BY THE ASSEMBLER
/TO COPY THE MONITOR-SYMBOLS (M.LS)TO ITS INTERNAL
/SYMBOL-LIST. THIS TIME CAN BE MINIMIZED BY
/SHORTENING THE MONITOR-SYMBOL-LIST.
/THIS OPERATION MAY BE PERFORMED BY THIS PROGRAM.
/IT WILL ONLY COPY THOSE SYMBOLS WHICH ARE IN A
/SECOND LIST (OR WHICH ARE NOT, OR ALL) ON THE SPE-
/CIFIED OUTPUT FILE.
/HOW TO USE:
/.R GLOBL
/*OUT<INP1,INP2/X
/INP1 IS THE REFERENCE LIST (SYMBLS)
/INP2 IS THE INPUT FILE     (M.LS)
/IF ONLY 1 INPUTFILE IS SPECIFIED, COPY ALL SYMBOLS
/
/THE REFERENCE LIST MUST START AND END WITH A LINE
/CONTAINING A "*" AT THE FIRST POSITION.
/THE FILE INP2 IS THE OUTPUT OF THE ASSEMBLER WHEN
/ASSEMBLING THE MONITOR (WITH OPTIONS /H/N/D)
/
/SPECIFIED OPTION X :
/ /V MEANS: INVERTED SENSE (=COPY ALL SYMBOLS WHICH ARE NOT
/	IN THE REFERENCE LIST.)
/WHEN NO OPTION IS SPECIFIED: COPY ALL SYMBOLS WHICH ARE
/	IN THE REFERENCE LIST. (IF ANY)
*15
P15,	PS8OUT-1	/POINTER TO OS8OUT IN FLD 0
P16,	OS8OUT-1	/POINTER TO OS8OUT IN FLD 1
T17,	-400		/MOVE 400 LOCS
MOVE,	HLT		/MOVE SUBROUTINE
	TAD I P15
	CDF 10
	DCA I P16
	CDF 0
	ISZ T17
	JMP MOVE+1
	JMP I MOVE	/RETURN
NAMTAL,	0
NAMINT,	0
OUTTAL,	-4
INCTAL,	0
INCPNT,	0
INCP2,	0
SRTAL,	0
SRPNT,	0
NAMPNT,	0
TEM,	0
CHR,	0
NAME2,	ZBLOCK 3

/THERE IS ROOM LEFT IN PAGE 0,SO WE CAN
/PUT A SUBROUTINE HERE

HEAD,	HLT		/GIVE HEADING
	JMS I [XLSTX	/XLIST;IFNDEF MONITO <
	JMS I [PRSTR
	"I;"F;"N;"D;"E;"F;211;"M;"O;"N;"I;"T;"O
	211;"<;215;212;0
	JMP I HEAD
PAGE
/START OF PROGRAM
START,	JMS MOVE	/MOVE UP OS8OUT,OS8IN
	JMS I [RDLIST	/READ REFERENCE LIST
RDRET0,	JMS I [SKCR	/ SKIP 3 (CR)
OPTAST,	JMS I [SKCR
	JMS I [SKCR
	JMS HEAD	/OUTPUT HEADING
LOOP,	JMS INNAM	/READ A NAME
	JMP ENDFIL	/E.O.T RETURN
	JMS I [INCOD	/MAKE ASCII-240 CODE
SRINS,	JMS I [SEARCH	/NAME IN THE LIST ?
/NOTE: SRINS,SRINS+1,SRINS+2 WILL BE CHANGED BY
/OPTIONS /A OR /V, SO KEEP THEM IN THIS ORDER
	JMP LOOP	/NO
	JMS OUTPUT	/OUTPUT NAME + NUMBER
	JMP LOOP

ENDFIL,	JMS I [FXTAB	/COMMENT AFTER LIST
	TAD [232	/CNTRL Z TO CLOSE THE FILE
	JMS I [OUT

INNAM,	HLT		/READ A NAME (11 CHARS)
	TAD [NAME
	DCA NAMPNT	/SET POINTER
	TAD [-13
	DCA NAMTAL	/SET TALLY
L1,	CIF 10
	JMS I [OS8IN	/READ A CHAR
	DCA CHR
INSTRT,	JMP TESTOP	/OVERLAID BY: TAD CHR
	TAD [-240
	SPA
	 JMP NOCHAR
	TAD [240-"/	/SLASH ?
	SNA CLA
	 JMP SLASH	/COMMENT
	JMP CHAROK
NOCHAR,	TAD [240-212	/IGNORE LINEFEED
	SNA
	 JMP INNAM+1
	TAD [212-215	/C.R. ?
	SNA
	 JMP INNAMR	/TOO SHORT; MAKE SPACES
	IAC	/215-214/FORM ?
	SNA
	 JMP INNAM+1	/YES: IGNORE
	TAD [214-232	/CTRL Z ?
	SNA CLA
	 JMP I INNAM	/ERROR RETURN
CHAROK,	TAD CHR
	DCA I NAMPNT	/TO BUFFER
	ISZ NAMPNT
	ISZ NAMTAL
	JMP L1		/NEXT CHAR
	JMS I [SKCR	/SKIP TILL (CR)
INRET,	ISZ INNAM	/NORMAL RETURN
	JMP I INNAM
SLASH,	JMS I [SKCR
	JMP INNAM+1
INNAMR,	TAD [240	/GENERATE SPACES
	DCA I NAMPNT
	ISZ NAMPNT
	ISZ NAMTAL
	JMP INNAMR	/LOOP
	JMP INRET	/RETURN

OUTPUT,	HLT
	TAD ["=
	DCA NAME+6	/SPACE TO "=
	JMS I [PRSTR	/OUTPUT THE STRING
NAME,	ZBLOCK 14
	ISZ OUTTAL	/DONE 4 ?
	JMP OUTX	/NO
	TAD [-4		/RESET TALLY
	DCA OUTTAL
	TAD [215	/OUTPUT CRLF
	JMS I [OUT
	TAD [212
	JMS I [OUT
	JMP I OUTPUT	/RETURN
OUTX,	TAD [";
	JMS I [OUT
	TAD [211
	JMS I [OUT
	JMP I OUTPUT
XLSTX,	HLT		/OUTPUT "XLIST"
	JMS I [PRSTR
	"X;"L;"I;"S;"T;215;212;0
	JMP I XLSTX

TESTOP,	CDF 10		/TEST OPTIONS (/V AND /A)
	TAD [TAD CHR
	DCA INSTRT
	TAD I [7621	/GET SECOND INPUT
	SNA CLA
	 JMP OPTA	/NO SECOND INPUT
	TAD I [7644	/GET 2ND OPTION WORD
	CDF 0
	AND [4		/TEST OPTION V
	SNA CLA		/YES
	 JMP INSTRT	/NO OPTION SPECIFIED
OPTV,	TAD SRINS+2	/CHANGE THE PROGRAM A BIT
	DCA SRINS+1	/JMP LOOP WILL BE JMS OUTPUT
	TAD SRINS+3	/JMS OUTPUT WILL BE JMP LOOP
	DCA SRINS+2
	JMP INSTRT	/RETURN
OPTA,	CDF 0
	TAD [SKP CLA	/CHANGE PROGRAM
	DCA SRINS
	JMP OPTAST

PAGE
OUT,	HLT
	CIF 10
	JMS I [OS8OUT
	JMP I OUT

PRSTR,	HLT
	TAD I PRSTR	/GET CHAR
	ISZ PRSTR
	SNA
	JMP I PRSTR
	TAD [-240	/DON'T OUTPUT SPACES
	SNA
	JMP PRSTR+1
	TAD [240
	JMS OUT
	JMP PRSTR+1

SEARCH,	HLT		/NAME IN NAMLIST
	TAD [NAMLST
	DCA SRPNT
SRLP,	JMS SRCH1
	JMP I SEARCH	/NOT FOUND
	TAD NAME2+1
	JMS SRCH2
	JMP SRLPX	/TRY NEXT NAME
	TAD NAME2+2
	JMS SRCH2
	JMP SRLP	/TRY NEXT NAME
	ISZ SEARCH	/FOUND
	JMP I SEARCH	/RETURN
SRLPX,	ISZ SRPNT
	JMP SRLP

SRCH1,	HLT
SRLP2,	TAD I SRPNT
	ISZ SRPNT
	SNA		/END OF LIST
	JMP I SRCH1	/YES
	TAD NAME2
	SNA CLA
	JMP SRCH1X	/FOUND
	ISZ SRPNT
	ISZ SRPNT	/POINT TO NEXT NAME
	JMP SRLP2	/NEXT TRY
SRCH1X,	ISZ SRCH1	/NORMAL RETURN
	JMP I SRCH1
SKCR,	HLT
	CIF 10
	JMS I [OS8IN
	TAD [-215
	SZA CLA
	JMP SKCR+1
	JMP I SKCR

SRCH2,	HLT		/NEXT CHARS EQUAL ?
	TAD I SRPNT
	ISZ SRPNT
	SNA CLA		/NO
	ISZ SRCH2	/YES
	JMP I SRCH2	/RETURN

INCOD,	HLT		/MAKE NAME2=NAME(ASCII-240 CODE)
	TAD [-3
	DCA INCTAL	/SET TALLY
	TAD [NAME
	DCA INCPNT
	TAD [NAME2	/2ND TALLY
	DCA INCP2
INCLP1,	TAD I INCPNT	/GET CHAR
	ISZ INCPNT
	TAD [-240	/MAKE ASCII-240
	AND [77
	CLL RTL;RTL;RTL	/BSW
	DCA I INCP2	/TO NAME2
	TAD I INCPNT	/2ND CHAR
	ISZ INCPNT
	TAD [-240
	AND [77
	TAD I INCP2	/+FIRST
	DCA I INCP2	/RESTORE
	ISZ INCP2
	ISZ INCTAL	/READY ?
	JMP INCLP1	/NO
	JMP I INCOD	/RETURN
RDLIST,	HLT		/INPUT NAMLST FROM FIRST FILE
	TAD [NAMLST-1	/SET POINTER
	DCA 11
RDLP,	JMS I [INNAM	/READ NAME FROM FIRST FILE
	JMP RDLP	/BAD NAME ?
	TAD I [NAME	/CHECK NAME
	TAD [-"*	/A "*" ?
	SZA CLA		/Y
	JMP RDLP	/NO:TRY AGAIN
RDLP2,	JMS I [INNAM	/READ NAME
	HLT		/*****ERROR*****
	TAD I [NAME	/TEST FOR END
	TAD [-"*
	SNA CLA
	JMP RDEND	/END OF FIRST FILE
	JMS INCOD	/MAKE ASCII-240
	TAD NAME2	/MOVE NAME2
	CIA		/MINUS FOR COMPARE
	DCA I 11
	TAD NAME2+1
	CIA		/MINUS
	DCA I 11
	TAD NAME2+2
	CIA		/MINUS
	DCA I 11
	JMP RDLP2	/NEXT NAME
RDEND,	DCA I 11	/0=END OF LIST
	JMP I RDLIST	/RETURN

FXTAB,	HLT		/COMMENT AFTER LIST
	JMS I [PRSTR
	">;215;212;"F;"I;"X;"T;"A;"B;";;0
	JMS I [XLSTX
	JMP I FXTAB	/RETURN
PAGE

NAMLST=.
/OS8IN-OS8OUT
/THESE ROUTINES WILL BE LOAD IN FIELD 0
/BUT RUN IN FIELD 1
/IF THE PROGRAM STARTS THESE TWO PAGES
/WILL BE MOVED UP TO 17200-17577
	TWOPAG=1
	BUFOUT=0000
	BLKOUT=7
	HANDL=7200
	PFIELD=10
	FILNAM=7601
	BUFFLD=10
	WRITE=4000

PS8OUT,	0
	OS8OUT=7200
	DCA CHAR
/	RDF
/	TAD PSOCIF
/	DCA PSORET
	CDF PFIELD
PSINIT,	JMP PSOBEG
	JMS PSWRIT
	TAD CHAR
	TAD PSM232
	SZA CLA
	JMP PSORET
	DCA CHAR
PSPACK,	JMS PACKB
	SKP
	JMP .-2
	JMS PSWRIT
	CLA CLL IAC RTL
	JMS PSOUSR
PSOCIF,	CIF CDF 0
	JMP I PS7600
PSORET,	CDF CIF 0
	JMP I PS8OUT
	7400
PACKB,	0
	TAD OUPKSW
	SZA
	JMP PACKON
	TAD CHAR
	DCA I OUPTR
	TAD OUPTR
	CLL RAR
	SNL CLA
	JMP .+4
	CLA CLL CMA RAL
	DCA OUPKSW
	SKP
	ISZ OUPTR
	JMP PACKEX
PACKON,	CLA CMA
	TAD OUPTR
	DCA OUPTR
	TAD CHAR
	RTL
	RTL
	DCA PSOBL-1
	TAD PSOBL-1
	AND PACKB-1
	TAD I OUPTR
	DCA I OUPTR
	ISZ OUPTR
	TAD PSOBL-1
	ISZ OUPKSW
	JMP PACKON+4
PS7600,	7600
	TAD LIMIT
	TAD OUPTR
	SPA CLA
PACKEX,	ISZ PACKB
	JMP I PACKB
	FILNAM
PSOUSR,	0
	DCA PSCALL+1
	TAD PSOUSR-1
	DCA PSCALL+2
	TAD PSOBL
	DCA PSCALL+3
	TAD I PS7600
	AND (17
PSCALL,	JMS I USR
	0
	0
	0
	JMP ERR2
	JMP I PSOUSR

PSOBEG,	TAD I PS7600
	SNA
	CLA CLL CML IAC RAL
	DCA I PS7600
	TAD I PS7600
	JMS I USR
PSOBL,	1
PSOHND,	HANDL+TWOPAG
	CLA CLL IAC RAL
	CLL CML IAC RAL
	JMS PSOUSR
	TAD PSPACK
	DCA PSINIT
	DCA PSOBL
	JMP PSINIT
ERR4,	ISZ PSOUSR-1
ERR3,	ISZ PSOUSR-1
ERR2,	ISZ PSOUSR-1
	JMP PSOHND+1
	BLKOUT
PSWRIT,	0
	TAD PSCALL+2
	DCA PSOWRI
	TAD PSCALL+3
	CLL
	TAD PSWRIT-1
	SZL
	JMP ERR3
	DCA PSCALL+3
	CIF 0
	JMS I PSOHND
	BLKOUT^200+BUFFLD+WRITE
PSOBUF,	BUFOUT
PSOWRI,	-5
	JMP ERR4
	TAD PSWRIT-1
	TAD PSCALL+2
	DCA PSCALL+2
	TAD PSWRIT-1
	TAD PSOBL
	DCA PSOBL
	TAD PSOBUF
	DCA OUPTR
	JMP I PSWRIT

CHAR,	0
OUPKSW,	0
OUPTR,	BUFOUT
LIMIT,	-BLKOUT^400-BUFOUT
USR,	7700
PSM232,	-232
PAGE
/OS8 INPUT ROUTINE
	INTPAG=1
	BUFIN=3400
	BLOKIN=7
	HANDIN=6600
	PSEXT=1423	/.LS
	PSFLD=10
	BUFIFD=10

PS8IN,	0
	OS8IN=7400
PSIMON,	7600
/	RDF
/	TAD PSICIF
/	DCA PSIEXT+1
PSINST,	JMP PSIJOB
	TAD INPKSW
	SZA CLA
	JMP INPKON
	TAD I INPTR
	AND PSI377
	DCA INCHAR
	TAD INPTR
	CLL RAR
	SNL CLA
	JMP .+4
	CLL CLA CMA RAL
	DCA INPKSW
	SKP
	ISZ INPTR
	JMP GETEX
INPKON,	DCA INCHAR
	TAD I INPTR
PSI377,	AND PS7400
	TAD INCHAR
	CLL RTR
	RTR
	DCA INCHAR
	CLA CMA
	TAD INPTR
	DCA INPTR
	ISZ INPKSW
	JMP INPKON+1
	CLA CLL CML IAC RAL
	TAD INPTR
	DCA INPTR
	ISZ PTR2
	JMP GETEX
	TAD PSIMON
	DCA PTR2
	ISZ PSINUM
	SKP
	JMP PSCTRZ
	TAD INLIM
	TAD INPTR
	SMA CLA
	JMS PSREAD
GETEX,	TAD INCHAR
	TAD PSI232
	SNA CLA
	JMP PSCTRZ
PSIEXT,	TAD INCHAR
	CDF CIF 0
	JMP I PS8IN
PSIEND,	TAD PS232
	JMP PSIEXT+1
PSICIF,	CIF CDF 0
PSIJOB,	CDF 0
	TAD I PS7746
	AND PSREAD
	TAD PSIRD
PTR2,	DCA I PS7746
INPTR,	CDF PSFLD
INPKSW,	TAD .-1
PSINUM,	DCA PSINST
PSCD,	JMS I PSIUSR
	5
	PSEXT
INCHAR,	0
PSCTRZ,	ISZ PSINDV
	TAD HANDAD
	DCA PSIHND
	TAD I PSINDV
	SNA
	JMP PSIEND
	JMS I PSIUSR
	1
PSIHND,	0
	JMP INER1
	TAD I PSINDV
	AND PSIRD+2
	SNA
	CLA IAC RTL
	RTR CLL
	RTR
	SMA
	TAD PS7400
	DCA PSINUM
	ISZ PSINDV
	TAD I  PSINDV
	DCA PSIRD
	JMS PSREAD
	JMP PSINST+1
HANDAD,	HANDIN+INTPAG
INER2,	CLA IAC
INER1,	TAD PSCD+1
	DCA PSCD+2
	ISZ PSCD+1
	ISZ PSCD+1
	JMP PSCD
	BLOKIN
PSREAD,	6777
	CIF 0
	JMS I PSIHND
	BLOKIN^200+BUFIFD
PSIBUF,	BUFIN
PSIRD,	1000
PSIUSR,	SMA CLA
	7760
	JMP INER2

	TAD PSREAD-1
	TAD PSIRD
	DCA PSIRD
	TAD PSIBUF
	DCA INPTR
	DCA INPKSW
	TAD PSIMON
	DCA PTR2
	JMP I PSREAD
PS232,	232
PSI232,	-232
PS7746,	7746
PSINDV,	7616
INLIM,	-BLOKIN^400-BUFIN
*PS8IN+177
PS7400,	7400

PAGE
$