File SCAN.PA (PAL assembler source file)

Directory of image this file is from
This file as a plain text file

/SNOBOL 8.2	

JMS I XINIT
XIND
X0
XVLEN
XTOP

//LIBRARY SCAN PROGRAM
//
//WRITTEN BY WILLIAM I.  NOWICKI
//NORTHWESTERN UNIVERSITY COMPUTER SCIENCE
//		RESEARCH LABORATORY
//
//JUNE, 1976
//
//UPDATED: DECMEBER 2, 1976
//
//+SCAN
//	THIS PROGRAM WILL PROCESS A SUBROUTINE
//LIBRARY FILE AND SELECT THE DESIRED ROUTINES.
//ANOTHER OPTION IS TO GENERATE PAGE ZERO LINKS
//AND GLOBAL VARIABLE LISTS SUITABLE FOR INPUT
//DIRECTLY INTO THE "PAL8" ASSEMBLER.
//THE SUBROUTINE LIBRARY FILES WILL USUALLY COMMON
//FILES SUPPLIED WITH THE PROGRAM. 
//HOWEVER, IF THE USER WISHES, A LIBRARY FILE
//CAN BE CREATED BY FOLLOWING THE SPECIFICATIONS
//FOR WORKING DOCUMENTATION.
//
//;LOGIC:
//	SETUP FILES
//	GET OPTIONS
//	PASS1 (OUTPUT PAGE ZERO)
//	PASS2 (OUTPUT THE ROUTINES)
//	END THE FILE
//
//:
/	OUTPUT = "SUBROUTINE LIBRARY PROCESSING PROGRAM"
JMS I XPAT
0002
OUTPUT
XEQC
XL0001
/ASK,	OUTHOLD = "INPUT:"
ASK,JMS I XPAT
0002
OUTHOL
XEQC
XL0002
/	INFIL = INPUT :F(ASK)
JMS I XPAT
0002
INFIL
XEQC
INPUT
TAD XSUCCES
SZA CLA
JMP ASK
/	.LOOKUP  INFIL :F(ASK)
JMS I XLOOKUP
INFIL
TAD XSUCCES
SZA CLA
JMP ASK
/ASKO,	OUTHOLD = "OUTPUT:"
ASKO,JMS I XPAT
0002
OUTHOL
XEQC
XL0003
/	.ENTER INPUT :F(ASKO)
JMS I XENTER
INPUT
TAD XSUCCES
SZA CLA
JMP ASKO
//SET SOME CONSTANTS:
/	CRLF = .A215 .A212
JMS I XPAT
0003
CRLF
XEQC
XL0004
XL0005
/	SP = " "	/SPACE
JMS I XPAT
0002
SP
XEQC
XL0006
/	C = ","		/COMMA
JMS I XPAT
0002
C
XEQC
XL0007
/	S = "/"		/COMMENT CHARACTER
JMS I XPAT
0002
S
XEQC
XL0010
//
//"EDIT" PUTS A RUBOUT AFTER EVERY TAB FOR SOME 
//OBSCURE REASON, SO THE DEFINITION
//MAY HAVE TO CHANGE IF YOU ARE USING AN OlD
//EDITER.
//
/	T = .A211 
JMS I XPAT
0002
T
XEQC
XL0011
/	AT = "@"	/ "AT" SIGN
JMS I XPAT
0002
AT
XEQC
XL0012
/	FF = .A214	/FORM FEED
JMS I XPAT
0002
FF
XEQC
XL0013
/	FP = "+"	/START MODULE
JMS I XPAT
0002
FP
XEQC
XL0014
/	FM = "-"	/END MODULE
JMS I XPAT
0002
FM
XEQC
XL0015
/	FU = "$"	/LOCATIONS USED
JMS I XPAT
0002
FU
XEQC
XL0016
/	FR = "#"	/ROUTINES CALLED
JMS I XPAT
0002
FR
XEQC
XL0017
/	FG = "*"	/GLOBAL VARIABLES
JMS I XPAT
0002
FG
XEQC
XL0020
/	FC = ":"	/COODE
JMS I XPAT
0002
FC
XEQC
XL0021
//ASK WHAT THE USER REALY WANTS
//
/ASKM,	DESIRE = SP 			/INITIALIZE
ASKM,JMS I XPAT
0002
DESIRE
XEQC
SP
/	OUTPUT = "ENTER NAMES OF DESIRED ROUTINES,"
JMS I XPAT
0002
OUTPUT
XEQC
XL0022
/	OUTPUT = 'TERMINATE WITH "END"'
JMS I XPAT
0002
OUTPUT
XEQC
XL0023
/AMLP,					/LOOP UNTIL END IS REACHED
AMLP,JMP I (.&7600+200
PAGE
XP0001=.
/	OUTHOLD = "?"			/PROMPT
JMS I XPAT
0002
OUTHOL
XEQC
XL0024
/	DESIRE = DESIRE  INPUT SP :F(ASKM)
JMS I XPAT
0004
DESIRE
XEQC
DESIRE
INPUT
SP
TAD XSUCCES
SZA CLA
JMP ASKM
/	DESIRE SP "END" = :S(AMDON)	/END YET ?
JMS I XPAT
0003
DESIRE
SP
XL0025
XEQC
TAD XSUCCES
SNA CLA
JMP AMDON
/			:(AMLP)
JMP AMLP
/AMDON,					/DONE WITH LOOP
AMDON,//
//
// THE USER IS ASKED IF HE WANTS PAGE ZERO LINKS
//TO EVERYTHING.
/ASKPZ,	OUTHOLD = "PAGE ZERO LINKS (Y OR N) ?"
ASKPZ,JMS I XPAT
0002
OUTHOL
XEQC
XL0026
/	PZFLG = INPUT :F(ASKPZ)
JMS I XPAT
0002
PZFLG
XEQC
INPUT
TAD XSUCCES
SZA CLA
JMP ASKPZ
/	PZFLG_ "Y"!"N" :F(ASKPZ)
JMS I XPAT
0003-4000
PZFLG
XL0027
XORC
XL0030
TAD XSUCCES
SZA CLA
JMP ASKPZ
//
//+PASS1
//
//;LOGIC:
//
//
//	WHILE NO EOF(INPUT) DO
//	  BEGIN
//	    READ A LINE
//	    IF BEGINING OF MODULE THEN
//		BEGIN
//		  GET MODULE NAME
//		  IF DESIRED THEN
//		    BEGIN
//			IF PAGE ZERO LINKS THEN MAKE ONE
//			WHILE NO "/-" OR "/:" DO
//			  READ LINE; CASE OF
//			   GLOBAL:ADD TO LIST
//			   LOCATIONS:ADD AFTER MODULE NAME
//			   ROUTINES:ADD TO LIST
//			   ENTRY POINT:GENERATE PAGE ZERO LINK
//		    END
//		END
//	END
//
//:CODE:
/PASS1,	GLOBE = SP			/RESET SOME LISTS
PASS1,JMS I XPAT
0002
GLOBE
XEQC
SP
/	HAVE = SP
JMS I XPAT
0002
HAVE
XEQC
SP
/	OTHER = SP
JMS I XPAT
0002
OTHER
XEQC
SP
/	NEED = DESIRE
JMS I XPAT
0002
NEED
XEQC
DESIRE
/	OUTPUT = "PASS ONE MODULES:"
JMS I XPAT
0002
OUTPUT
XEQC
XL0031
/	PZFLG_ "Y" :F(NOPZ1)		/DO WE WANT PAGE ZERO STUFF ?
JMS I XPAT
0001-4000
PZFLG
XL0027
TAD XSUCCES
SZA CLA
JMP NOPZ1
/	WRITE = "/ PAGE ZERO POINTERS" CRLF "/"
JMS I XPAT
0004
WRITE
XEQC
XL0032
CRLF
XL0010
/	WRITE = T "*20" CRLF "/"
JMS I XPAT
0005
WRITE
XEQC
T
XL0033
CRLF
XL0010
/NOPZ1,					/END OF INITIALIZATION
NOPZ1,//
//READ EACH LINE, LOOKING FOR THE START OF A MODULE
//
/PAS1RD,	LINE = READ :F(EOF1)
PAS1RD,JMS I XPAT
0002
LINE
XEQC
READ
TAD XSUCCES
SZA CLA
JMP EOF1
/	LINE_ S FP = :F(PAS1RD)		/MODULE ?
JMS I XPAT
0003-4000
LINE
S
FP
XEQC
TAD XSUCCES
SZA CLA
JMP PAS1RD
JMP I (.&7600+200
PAGE
XP0002=.
/SPZAPL,	LINE_ SP!T = :S(SPZAPL)		/ZAP SPACES,FFS, & TABS
SPZAPL,JMS I XPAT
0004-4000
LINE
SP
XORC
T
XEQC
TAD XSUCCES
SNA CLA
JMP SPZAPL
/	LINE_ *MOD* SP!T = :S(GOOD1M)	/GET MODULE NAME
JMS I XPAT
0007-4000
LINE
XFLC;0;MOD
SP
XORC
T
XEQC
TAD XSUCCES
SNA CLA
JMP GOOD1M
/	MOD = LINE			/IF NO DESCRIPTION
JMS I XPAT
0002
MOD
XEQC
LINE
/	NEED SP MOD SP = SP	:F(PAS1RD)	/NEED IT ?
GOOD1M,JMS I XPAT
0005
NEED
SP
MOD
SP
XEQC
SP
TAD XSUCCES
SZA CLA
JMP PAS1RD
/	HAVE = HAVE MOD SP			/YES - ADD TO LIST
JMS I XPAT
0004
HAVE
XEQC
HAVE
MOD
SP
/	OUTPUT = MOD				/PRINT MODULE NAME
JMS I XPAT
0002
OUTPUT
XEQC
MOD
/	PZFLG_ "Y" :F(NOPZ1A)			/PAGE ZERO LINK ?
JMS I XPAT
0001-4000
PZFLG
XL0027
TAD XSUCCES
SZA CLA
JMP NOPZ1A
/	WRITEH = MOD "=" T "JMS I .;X"
JMS I XPAT
0005
WRITEH
XEQC
MOD
XL0034
T
XL0035
/	ROT = MOD	
JMS I XPAT
0002
ROT
XEQC
MOD
/	ROT *ROT/5*			/TRIM TO 5 CHARS
JMS I XPAT
0003
ROT
XFLC;0050;ROT
/	WRITE = ROT T "/ " LINE
JMS I XPAT
0005
WRITE
XEQC
ROT
T
XL0036
LINE
//
NOPZ1A,/P1MOD,	LINE = READ :F(EOF1)	/READ THE MODULE
P1MOD,JMS I XPAT
0002
LINE
XEQC
READ
TAD XSUCCES
SZA CLA
JMP EOF1
/	LINE_ S =  :F(P1MOD)	/WE ONLY WANT COMMENTS
JMS I XPAT
0002-4000
LINE
S
XEQC
TAD XSUCCES
SZA CLA
JMP P1MOD
/	LINE_ FC :S(PAS1RD)	/CODE ?
JMS I XPAT
0001-4000
LINE
FC
TAD XSUCCES
SNA CLA
JMP PAS1RD
/	LINE_ FU :S(LOC1)	/LOCATION FLAG ?
JMS I XPAT
0001-4000
LINE
FU
TAD XSUCCES
SNA CLA
JMP LOC1
JMP I (.&7600+200
PAGE
XP0003=.
/	LINE = LINE SP		/PUT A DELIMITER AT THE END OF THE LINE
JMS I XPAT
0003
LINE
XEQC
LINE
SP
/	LINE_ FR :S(ROT1)	/ROUTINES USED ?
JMS I XPAT
0001-4000
LINE
FR
TAD XSUCCES
SNA CLA
JMP ROT1
/	LINE_ FG :S(GLOB1)	/GLOBAL VARIABLES ?
JMS I XPAT
0001-4000
LINE
FG
TAD XSUCCES
SNA CLA
JMP GLOB1
/	LINE_ FM :S(PAS1RD)	/END OF MODULE ?
JMS I XPAT
0001-4000
LINE
FM
TAD XSUCCES
SNA CLA
JMP PAS1RD
/		:(P1MOD)	/KEEP READING
JMP P1MOD
//
//LOCATIONS USED FLAG WAS DETECTED
/	LINE ":" *LOC* :F(P1MOD)		/STRIP OFF NUMBER
LOC1,JMS I XPAT
0004
LINE
XL0021
XFLC;0;LOC
TAD XSUCCES
SZA CLA
JMP P1MOD
/SPZAPC,	LOC SP!T = :S(SPZAPC)			/ZAP ALL SPACES
SPZAPC,JMS I XPAT
0004
LOC
SP
XORC
T
XEQC
TAD XSUCCES
SNA CLA
JMP SPZAPC
/	HAVE SP MOD SP = SP MOD AT LOC SP	/ADD TO LIST
JMS I XPAT
0011
HAVE
SP
MOD
SP
XEQC
SP
MOD
AT
LOC
SP
/		:(P1MOD)			/CONTINUE
JMP P1MOD
//
//ROUTINES USED FLAG WAS FOUND
/	LINE ":" *LINE* :F(P1MOD)		/NAMES ARE AFTER THE COLON
ROT1,JMS I XPAT
0004
LINE
XL0021
XFLC;0;LINE
TAD XSUCCES
SZA CLA
JMP P1MOD
/SPZAPR,	LINE C!T!"  " = SP :S(SPZAPR)		/ZAP ALL DELIMITERS INTO SPACES
SPZAPR,JMS I XPAT
0007
LINE
C
XORC
T
XORC
XL0037
XEQC
SP
TAD XSUCCES
SNA CLA
JMP SPZAPR
/	LINE_ SP =
JMS I XPAT
0002-4000
LINE
SP
XEQC
/ROT1G,	LINE_ *ROT* SP = :F(P1MOD)		/GET ONE OF THEM
ROT1G,JMS I XPAT
0005-4000
LINE
XFLC;0;ROT
SP
XEQC
TAD XSUCCES
SZA CLA
JMP P1MOD
/	NEED SP ROT SP :S(ROT1G)		/HAVE IT ALREADY ?
JMS I XPAT
0003
NEED
SP
ROT
SP
TAD XSUCCES
SNA CLA
JMP ROT1G
JMP I (.&7600+200
PAGE
XP0004=.
/	HAVE SP ROT SP!AT :S(ROT1G)		/PASSED IT UP ?
JMS I XPAT
0005
HAVE
SP
ROT
SP
XORC
AT
TAD XSUCCES
SNA CLA
JMP ROT1G
/	NEED = NEED ROT SP			/NO - ADD TO LIST
JMS I XPAT
0004
NEED
XEQC
NEED
ROT
SP
/	OTHER SP ROT SP :S(ROT1G)		/DON'T DUPLICATE
JMS I XPAT
0003
OTHER
SP
ROT
SP
TAD XSUCCES
SNA CLA
JMP ROT1G
/	OTHER = OTHER ROT SP		
JMS I XPAT
0004
OTHER
XEQC
OTHER
ROT
SP
/				:(ROT1G)	/TRY AGAIN
JMP ROT1G
//
//GLOBAL VRIABLES FLAG HERE
/	LINE ":" *LINE* :F(P1MOD)
GLOB1,JMS I XPAT
0004
LINE
XL0021
XFLC;0;LINE
TAD XSUCCES
SZA CLA
JMP P1MOD
/SPZAPG,	LINE T!C!"  " = SP :S(SPZAPG)		/ZAP SPACES AGAIN
SPZAPG,JMS I XPAT
0007
LINE
T
XORC
C
XORC
XL0037
XEQC
SP
TAD XSUCCES
SNA CLA
JMP SPZAPG
/	LINE_ SP =				/ZAP LEADING SPACES
JMS I XPAT
0002-4000
LINE
SP
XEQC
/GLO1G,	LINE_  *VAR* SP =  :F(P1MOD)	
GLO1G,JMS I XPAT
0005-4000
LINE
XFLC;0;VAR
SP
XEQC
TAD XSUCCES
SZA CLA
JMP P1MOD
/	GLOBE SP VAR SP :S(GLO1G)		/HAVE IT ALREADY ?
JMS I XPAT
0003
GLOBE
SP
VAR
SP
TAD XSUCCES
SNA CLA
JMP GLO1G
/	GLOBE = GLOBE VAR SP			/NO - ADD TO THE LIST
JMS I XPAT
0004
GLOBE
XEQC
GLOBE
VAR
SP
/				:(GLO1G)	/CONTINUE
JMP GLO1G
//
//
//END OF PASS ONE
/	OUTPUT = "END OF PASS ONE"
EOF1,JMS I XPAT
0002
OUTPUT
XEQC
XL0040
/	SP NEED :S(P1BAD)			/ANY LEFT OVER ?
JMS I XPAT
0001
SP
NEED
TAD XSUCCES
SNA CLA
JMP P1BAD
/	OUTPUT = "MISSING MODULES:"
JMS I XPAT
0002
OUTPUT
XEQC
XL0041
/	OUTPUT = "**"  NEED "**"
JMS I XPAT
0004
OUTPUT
XEQC
XL0042
NEED
XL0042
JMP I (.&7600+200
PAGE
XP0005=.
/	OUTPUT = "SECONDARY MODULES:" OTHER
P1BAD,JMS I XPAT
0003
OUTPUT
XEQC
XL0043
OTHER
/	WRITE = "/END OF POINTERS" CRLF S CRLF S
JMS I XPAT
0006
WRITE
XEQC
XL0044
CRLF
S
CRLF
S
/	SP GLOBE :S(EOGLP)			/ANY GLOBALS ?
JMS I XPAT
0001
SP
GLOBE
TAD XSUCCES
SNA CLA
JMP EOGLP
/	OUTPUT = "GLOBAL VARIABLES:" GLOBE
JMS I XPAT
0003
OUTPUT
XEQC
XL0045
GLOBE
/	WRITE = S CRLF "/GLOBAL VARIABLES" CRLF T "ZERO=0"
JMS I XPAT
0007
WRITE
XEQC
S
CRLF
XL0046
CRLF
T
XL0047
/GLBLP,	GLOBE_ SP *VAR* SP = SP :F(EOGLP)
GLBLP,JMS I XPAT
0007-4000
GLOBE
SP
XFLC;0;VAR
SP
XEQC
SP
TAD XSUCCES
SZA CLA
JMP EOGLP
/	WRITE = VAR C T "ZERO"
JMS I XPAT
0005
WRITE
XEQC
VAR
C
T
XL0050
/				:(GLBLP)	/CONTINUE
JMP GLBLP
/	WRITE = S CRLF "/END OF PAGE ZERO" CRLF
EOGLP,JMS I XPAT
0005
WRITE
XEQC
S
CRLF
XL0051
CRLF
//
//-PASS1
//+PASS2
// HERE THE MODULES ARE ACTUALLY PUT OUT TO THE FILE
//
//;LOGIC:
// WHILE NO EOF DO
//	BEGIN READ A LINE
//	      IF BEGINING OF DESIRED MODULE THEN
//		BEGIN
//		  PAGINATE IF NEEDED
//		  WHILE NO "/-MODULE" DO
//		    BEGIN
//			READ A LINE
//			CASE OF
//			ENTRY POINT ADD "X" FOR PAGE ZERO
//			REFERENCE TO ENTRY POINT: CHANGE AS ABOVE
//			WRITE LINE
//		    END
//		  WRITE THE LAST LINE
//		END
//
//	END
//
//:CODE:
/	.ICLOSE	:F(CERROR)		/CLOSE FOR PASS 2
JMS I XICLOSE
TAD XSUCCES
SZA CLA
JMP CERROR
/	.LOOKUP INFIL :F(IOBAD)
JMS I XLOOKUP
INFIL
TAD XSUCCES
SZA CLA
JMP IOBAD
/	NOW = "128"			/INITIALIZE FOR PASS TWO
JMS I XPAT
0002
NOW
XEQC
XL0052
/	NEED SP = HAVE
JMS I XPAT
0003
NEED
SP
XEQC
HAVE
/	OUTPUT = "PASS TWO MODULES:"
JMS I XPAT
0002
OUTPUT
XEQC
XL0053
/PAS2RD,	LINE = READ :F(EOF)
PAS2RD,JMS I XPAT
0002
LINE
XEQC
READ
TAD XSUCCES
SZA CLA
JMP EOF
/	LINE_ S FP = :F(PAS2RD)		/MODULE YET ?
JMS I XPAT
0003-4000
LINE
S
FP
XEQC
TAD XSUCCES
SZA CLA
JMP PAS2RD
JMP I (.&7600+200
PAGE
XP0006=.
/	LINE_ *MOD* SP!T :S(GOOD2M)	/GET MODULE NAME
JMS I XPAT
0006-4000
LINE
XFLC;0;MOD
SP
XORC
T
TAD XSUCCES
SNA CLA
JMP GOOD2M
/	MOD = LINE			/IF NO DESCRIPTION
JMS I XPAT
0002
MOD
XEQC
LINE
/	NEED SP MOD AT *LOC* SP 	/WANT IT ?
GOOD2M,JMS I XPAT
0007
NEED
SP
MOD
AT
XFLC;0;LOC
SP
/			:F(PZNOL)
TAD XSUCCES
SZA CLA
JMP PZNOL
/	NOW = NOW + LOC :F(NEWPAG)
JMS I XASC
NOW

DCA XL0054
JMS I XASC
LOC

DCA XL0055
TAD XL0054
TAD XL0055
JMS I XINT
NOW
JMP .+0003
XL0054,	0
XL0055,	0
TAD XSUCCES
SZA CLA
JMP NEWPAG
//
// THERE ARE REALLY MORE THAN 4 PAL LOCATIONS,
// BUT SINCE PAGES ARE NEVER TIGHT, THIS GIVES US
// SOME FREE LOCATIONS ON THIS PAGE.
//
/.PAL 4		/***** PAL CODE *******
JMS  I	XASC		/CONVERT TO NUMBER
NOW
TAD (-200		/PAGE CONSTANT
SMA  CLA
JMP 	NEWPAG
JMP 	PAGOK		/GREAT- KEEP ON PRESENT PAGE
/^.SNOBOL	/****** BACK TO SNOBOL *******
//
/PZNOL,	NEED SP MOD SP  :F(PAS2RD)	/CHECK WITHOUT LOCS
PZNOL,JMS I XPAT
0003
NEED
SP
MOD
SP
TAD XSUCCES
SZA CLA
JMP PAS2RD
/	LOC = "128"			/TO ALWAYS PAGINATE
JMS I XPAT
0002
LOC
XEQC
XL0052
/NEWPAG,	WRITE = T "PAGE" CRLF FF	/PAGINATE
NEWPAG,JMS I XPAT
0005
WRITE
XEQC
T
XL0056
CRLF
FF
/	NOW = LOC			/RESET LOCATIONS
JMS I XPAT
0002
NOW
XEQC
LOC
/PAGOK,	OUTPUT = MOD			/PRINT THE MODULE NAME
PAGOK,JMS I XPAT
0002
OUTPUT
XEQC
MOD
/	ROT = MOD			/IN CASE WE NEVER SEE THE ENTRY POINT
JMS I XPAT
0002
ROT
XEQC
MOD
/	LINE = S CRLF  S FP LINE	/RESTORE LINE
JMS I XPAT
0006
LINE
XEQC
S
CRLF
S
FP
LINE
//
/P2WRT,	WRITE = LINE :F(IOBAD)		/OUTPUT THE LINE
P2WRT,JMS I XPAT
0002
WRITE
XEQC
LINE
TAD XSUCCES
SZA CLA
JMP IOBAD
/P2MOD,	LINE = READ :F(EOF)		/READ THE NEXT ONE
P2MOD,JMS I XPAT
0002
LINE
XEQC
READ
TAD XSUCCES
SZA CLA
JMP EOF
JMP I (.&7600+200
PAGE
XP0007=.
/	LINE_ S :S(COM)			/PASS ALL COMMENTS
JMS I XPAT
0001-4000
LINE
S
TAD XSUCCES
SNA CLA
JMP COM
/	LINE_ MOD C  :S(ENTZ)		/ENTRY POINT FOUND
JMS I XPAT
0002-4000
LINE
MOD
C
TAD XSUCCES
SNA CLA
JMP ENTZ
/	LINE T MOD T!POSR = T ROT T	/CHANGE ENTRY POINT REFERENCES
JMS I XPAT
0011
LINE
T
MOD
T
XORC
POSR
XEQC
T
ROT
T
/	LINE SP MOD T!POSR = SP ROT T
JMS I XPAT
0011
LINE
SP
MOD
T
XORC
POSR
XEQC
SP
ROT
T
/	LINE "JMS" T!SP *VAR* T!SP!POSR   :S(P2CVT)	/CHECK JMS'ES
JMS I XPAT
0014
LINE
XL0057
T
XORC
SP
XFLC;0;VAR
T
XORC
SP
XORC
POSR
TAD XSUCCES
SNA CLA
JMP P2CVT
/			:(P2WRT)
JMP P2WRT
//
/COM,	LINE_ S FM :S(EOMOD)		/END OF MODULE !
COM,JMS I XPAT
0002-4000
LINE
S
FM
TAD XSUCCES
SNA CLA
JMP EOMOD
/			:(P2WRT)
JMP P2WRT
//
//HERE, IF GENERATING PAGE ZERO POINTERS,
//WE CHANGE THE NAME OF A SUBROUTINE
//CALLED BY A "JMS" IN THE PRESENT MODULE.
//
/P2CVT,	PZFLG_ "Y" :F(P2WRT)		/MUST WE CHECK FOR OTHER MODULES ?
P2CVT,JMS I XPAT
0001-4000
PZFLG
XL0027
TAD XSUCCES
SZA CLA
JMP P2WRT
/	HAVE SP VAR SP!AT :F(P2WRT)	/CHECK FOR THE MOD NAME
JMS I XPAT
0005
HAVE
SP
VAR
SP
XORC
AT
TAD XSUCCES
SZA CLA
JMP P2WRT
/	LINE "JMS" T!SP VAR  = VAR T 	/CHANGE REFERENCES TO OTHER MODS
JMS I XPAT
0010
LINE
XL0057
T
XORC
SP
VAR
XEQC
VAR
T
/			:(P2WRT)
JMP P2WRT
//
//
/ENTZ,	PZFLG_ "Y" :F(P2WRT)		/NEED WE CHANGE ENTRY POINT ?
ENTZ,JMS I XPAT
0001-4000
PZFLG
XL0027
TAD XSUCCES
SZA CLA
JMP P2WRT
/	ROT = "X" MOD			/ YES - ADD X TO NAME
JMS I XPAT
0003
ROT
XEQC
XL0060
MOD
JMP I (.&7600+200
PAGE
XP0010=.
/	ROT *ROT/6*			/TRIM IF NEEDED
JMS I XPAT
0003
ROT
XFLC;0060;ROT
/	LINE MOD = ROT :(P2WRT)
JMS I XPAT
0003
LINE
MOD
XEQC
ROT
JMP P2WRT
//
//END OF MODULE FOUND
//
/EOMOD,	WRITE = LINE :(PAS2RD)		/CONTINUE SEARCH
EOMOD,JMS I XPAT
0002
WRITE
XEQC
LINE
JMP PAS2RD
//
//
/EOF,	WRITE = "$" CRLF FF		/WRITE THE ENDING JUNK
EOF,JMS I XPAT
0004
WRITE
XEQC
XL0016
CRLF
FF
/	.OCLOSE :F(CERROR)
JMS I XOCLOSE
TAD XSUCCES
SZA CLA
JMP CERROR
/	.ICLOSE
JMS I XICLOSE
/	.EXIT
JMP I (7600
/CERROR,	OUTPUT = "CLOSING ERROR !"
CERROR,JMS I XPAT
0002
OUTPUT
XEQC
XL0061
/	.EXIT
JMP I (7600
/IOBAD,	OUTPUT = "OUTPUT ERROR !"
IOBAD,JMS I XPAT
0002
OUTPUT
XEQC
XL0062
/	.END
JMP I (7600
//-SCAN

PAGE

X0,
INFIL,	0
CRLF,	0
SP,	0
C,	0
S,	0
T,	0
AT,	0
FF,	0
FP,	0
FM,	0
FU,	0
FR,	0
FG,	0
FC,	0
DESIRE,	0
PZFLG,	0
GLOBE,	0
HAVE,	0
OTHER,	0
NEED,	0
LINE,	0
MOD,	0
ROT,	0
LOC,	0
VAR,	0
NOW,	0

XVLEN=.-X0

XL0006,	XX0006
XL0012,	XX0012
XL0026,	XX0026
XL0031,	XX0031
XL0037,	XX0037
XL0053,	XX0053
XL0056,	XX0056
XL0060,	XX0060
XL0002,	XX0002
XL0011,	XX0011
XL0027,	XX0027
XL0052,	XX0052
XL0005,	XX0005
XL0020,	XX0020
XL0021,	XX0021
XL0033,	XX0033
XL0035,	XX0035
XL0042,	XX0042
XL0047,	XX0047
XL0050,	XX0050
XL0057,	XX0057
XL0001,	XX0001
XL0014,	XX0014
XL0017,	XX0017
XL0043,	XX0043
XL0061,	XX0061
XL0007,	XX0007
XL0013,	XX0013
XL0016,	XX0016
XL0023,	XX0023
XL0004,	XX0004
XL0015,	XX0015
XL0022,	XX0022
XL0025,	XX0025
XL0034,	XX0034
XL0040,	XX0040
XL0041,	XX0041
XL0030,	XX0030
XL0003,	XX0003
XL0010,	XX0010
XL0024,	XX0024
XL0032,	XX0032
XL0036,	XX0036
XL0044,	XX0044
XL0045,	XX0045
XL0046,	XX0046
XL0051,	XX0051
XL0062,	XX0062


FIELD 1
*XFIELD1

XIND=0
XX0006,0240
0000
7777

XX0012,0300
0000
7777

XX0026,6320
3701
6705
5240
6305
7722
6240
4714
6716
1713
6640
4650
6640
1317
5240
4716
0240
0277
7777

XX0031,6720
1701
6323
7640
5316
0305
6315
2317
6325
2714
0323
0272
7777

XX0037,0240
0240
7777

XX0053,6720
1701
6723
2240
5327
0317
6315
2317
6325
2714
0323
0272
7777

XX0056,6320
3701
0305
0000
7777

XX0060,0330
0000
7777

XX0002,6711
0316
5725
5324
0000
0000
7777

XX0011,0211
0000
7777

XX0027,0331
0000
7777

XX0052,5661
4262
0000
0000
7777

XX0005,0212
0000
7777

XX0020,0252
0000
7777

XX0021,0272
0000
7777

XX0033,5652
0262
0000
0000
7777

XX0035,6712
1715
5240
0311
6656
4273
0000
0000
7777

XX0042,0252
0252
7777

XX0047,6732
1305
5717
0275
0000
0000
7777

XX0050,6732
1305
0317
0000
7777

XX0057,6712
1715
0000
0000
7777

XX0001,6323
1325
6722
2717
6324
7311
6305
6240
6711
1302
6701
4722
6640
1320
6317
2703
6323
4723
5316
0307
6320
7722
6307
0722
0315
0000
7777

XX0014,0253
0000
7777

XX0017,0243
0000
7777

XX0043,6323
1705
6317
2316
6701
4722
6240
7715
6304
6325
5705
5323
0000
0000
7777

XX0061,6303
7714
6323
7311
6307
2640
6322
7722
5322
0640
0000
0000
7777

XX0007,0254
0000
7777

XX0013,0214
0000
7777

XX0016,0244
0000
7777

XX0023,6724
1305
6315
7311
6301
2724
6240
4727
5324
0310
6242
7305
0304
0242
7777

XX0004,0215
0000
7777

XX0015,0255
0000
7777

XX0022,6705
2316
5305
0322
6316
6701
5305
0323
5317
0306
6704
1705
6311
2722
6704
1240
6717
2325
6311
2716
0323
0254
7777

XX0025,6305
2316
0000
0000
7777

XX0034,0275
0000
7777

XX0040,6305
2316
6240
3317
6240
0720
5323
0323
6317
2716
0000
0000
7777

XX0041,6715
1711
6323
7311
6307
6640
6717
2704
6714
1705
0272
0000
7777

XX0030,0316
0000
7777

XX0003,6717
2325
6720
2325
0272
0000
7777

XX0010,0257
0000
7777

XX0024,0277
0000
7777

XX0032,6657
0240
6301
2707
6240
2732
5322
0317
6320
4717
6316
2724
0322
0323
7777

XX0036,0257
0240
7777

XX0044,6257
7305
6304
7640
6706
0240
6317
7311
6724
1305
0323
0000
7777

XX0045,6307
7714
6302
6301
6240
0726
6322
0711
6302
2714
0323
0272
7777

XX0046,6257
6307
6317
0702
6714
3240
6301
4722
6301
6302
0305
0323
7777

XX0051,6257
7305
6304
7640
6706
0240
6301
2707
6240
2732
0322
0317
7777

XX0062,6717
2325
6720
2325
6640
1305
6722
1317
0240
0241
7777


XTOP=.

$$$



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search