Google
 

Trailing-Edge - PDP-10 Archives - bb-x130a-sb - tatsub.mac
There are 6 other files named tatsub.mac in the archive. Click here to see a list.
	TITLE	TATSUB - SUBROUTINES FOR TATTLE V2 AND FORTRAN-10
	SUBTTL	SYMINT -  LOADS A SYMBOL TABLE INTO CORE
	ENTRY SYMSRC,SYMINT

SYMINT:	SKIPN	1,@(16)
	MOVE	1,[SIXBIT /SYSTEM/]
	CAMN	1,NAME
	POPJ P,
	MOVEM	1,NAME
	SETZM	SYMFIL		;FLAG NO SYMBOL TABLE IN CORE
REINIT:	INIT 0,17
DEV1:	SIXBIT/DSK/
	0
	  JRST	E.INIT
	SETZM	NAME+3
	LOOKUP NAME
	  JRST	E.LOOK		;ASK FOR FILE NAME
	SKIPE	3,OJOBFF
	JRST	.+3
	MOVE	3,.JBFF##
	MOVEM	3,OJOBFF
	HRRM	3,CL1
	SOS CL1
	ADDI	3,200
	CAMG	3,.JBREL##
	JRST .+3
	CORE	3,
	  JRST	E.CORE
	INPUT CL1
	MOVE 3,OJOBFF
	HRRZ 1,116(3)
	JUMPE	1,E.SYMT
	HLRO 2,116(3)
	MOVNS 2
	ADD 3,2
	MOVEM 3,.JBFF##
	CORE 3,
	  JRST	E.CORE
	MOVE	4,1(16)		;GET FNAME ADDR
	MOVE	0,DEV1
	MOVEM	0,0(4)
	MOVE	0,NAME		;GET FILNAME USED
	MOVEM	0,1(4)
	HLLZ	0,NAME+1
	MOVEM	0,2(4)
	MOVE 4,1
	IDIVI 4,200
	USETI 1(4)
	INPUT CL1
	MOVE 4,OJOBFF
	ADDI 4,177
	SUB 4,5
	JUMPE 5,NOBLT
	MOVE 6,OJOBFF
	ADD 6,5
	HRLS 6
	HRR 6,OJOBFF
	BLT 6,(4)
NOBLT:	HRRM 4,CL2
	SUBI 5,200
	ADD 5,2
	MOVNS 5
	HRLM 5,CL2
	INPUT CL2
	RELEASE 0
	MOVE 4,OJOBFF
	ADD 4,2
	SOS 4
	MOVEM 4,SYMST
	SETOM	SYMFIL		;FLAG SYMBOL TABLE SETUP
	POPJ P,

OJOBFF:	0
SYMST:	0
CL1:	IOWD 200,.-.
	0
CL2:	0
	0
NAME:	0
	SIXBIT/XPN/
	0
	0
E.INIT:	OUTSTR	[ASCIZ /?CANT INIT /]
	JSA	16,KLU67	;GET DEVICE THAT FAILED
	EXP	DEV1
	EXP	AZNAM
	JRST	RETRY		;GET NEW AND TRY AGAIN
E.LOOK:	OUTSTR	[ASCIZ	/?LOOKUP FAILURE ON /]
ERRFIL:	JSA	16,KLU67	;DEVICE
	EXP	DEV1
	EXP	AZNAM
	OUTSTR	AZNAM
	MOVEI	CH,":"
	OUTCHR	CH
	JSA	16,KLU67	;GET FILE NAME IN ASCII
	EXP	NAME
	EXP	AZNAM
	OUTSTR	AZNAM
	MOVEI	CH,"."		;DOT FOR EXT
	OUTCHR	CH
	JSA	16,KLU67
	EXP	NAME+1		;EXTENSION
	EXP	AZNAM
RETRY:	OUTSTR	AZNAM
	OUTSTR	[ASCIZ	/
WHERE IS EXPANDED FILE? /]
	JSA	16,KLUNAM	;GET NEW FILE NAME
	EXP	DEV1		;STORE DEVICE THERE
	EXP	NAME
	SKIPN	NULFLG	;NULL RESPONSE?
	JRST	REINIT		;TRY AGAIN
	SETZM	SYMFIL		;YES, USE NO SYMBOLS
	POPJ	17,0

E.SYMT:	OUTSTR	[ASCIZ	/?CANT FIND SYMBOL TABLE IN /]
	JRST	ERRFIL
SYMFIL:	0
AZNAM:	0
	0

E.CORE:	OUTSTR	[ASCIZ	/?INSUFFICIENT CORE TO READ /]
	JSA	16,KLU67
	EXP	NAME
	EXP	AZNAM
	OUTSTR	AZNAM
	MOVEI	CH,"."
	OUTCHR	CH
	JSA	16,KLU67
	EXP	NAME+1
	EXP	AZNAM
	OUTSTR	AZNAM
	OUTSTR	[ASCIZ	/ SYMBOL TABLE
/]
	SETZM	SYMFIL		;FLAG NO SYMBOL TABLE
	POPJ	17,0
	SUBTTL	SYMSRC - SEARCHES SYMBOL TABLE LOADED BY SYMINT

;CALLING SEQUENCE
;	CALL SYMSRC(ADDR, GLOBAL, LOCAL, VALUE)
;ADDR IS INPUT
;GLOBAL IS MODULE NAME CONTAINING ADDR
;LOCAL IS HIGHEST VALUED SYMBOL WITH VALUE LESS OR EQUAL ADDR
;VALUE IS VALUE OF LOCAL

SYMSRC:	HRRZ	10,@(16)	;PICK UP SEARCH ADDRESS
	SKIPN	SYMFIL		;DO WE HAVE A SYMBOL TABLE?
	JRST	SYMERR		;NO, RETURN BLANKS
	SETZ 7,
	MOVE 6,SYMST		;END OF SYMBOL TABLE
LOOP1:	HRRZ (6)		;ADDR OF THIS MODULE
	CAMLE	10
	JRST FND1		;MUST BE IN PRECEDING MODULE
	MOVE 7,6		;SAVE THIS MODULE ADDRESS IN TABLE
	HLRO 1,(6)		;LENGHT OF MODULE'S TABLE
	ADD 6,1		;POINT 6 TO NEXT MODULE TABLE
	HLRZ (6)		;CHECK POINTER TO NEXT
	JUMPN LOOP1		;IF ANY FOUND, LOOK IN IT
	JUMPN 7,FND1		;NO NEXT. IF LAST, LOOK THERE
SYMERR:	HRRZ 1,1(16)		;OTHERWISE , RETURN BLANK
	MOVE [ASCII/     /]
	MOVEM (1)
	MOVEM 1(1)
SYMER1:	HRRZ 1,2(16)
	MOVE [ASCII/     /]
	MOVEM (1)
	MOVEM 1(1)
	MOVEM	10,@3(16)
	POPJ	17,0
FND1:	JUMPE 7,SYMERR
	HLRE	6,(7)		;LENGHT OF MODULE'S SYMBOL TABLE
	JUMPGE	6,SYMERR
	MOVE -1(7)		;GET NAME (RADIX50)
	JSP 2,R50
	HRRZ 2,1(16)
	MOVEM 11,(2)
	MOVEM 12,1(2)
	SETO	4,
LOOP2:	HRRZ 5,(7)
	JUMPE 6,FND2
	SUBI 7,2
	ADDI 6,2
	CAMG 5,10
	CAMG 5,4
	JRST LOOP2
	MOVEI 3,1(7)
	MOVE 4,5
	JRST LOOP2

FND2:	JUMPL	4,SYMER1
	MOVE (3)
	JSP 2,R50
	HRRZ 2,2(16)
	MOVEM 11,(2)
	MOVEM 12,1(2)
	HRRZ	1(3)
	MOVEM	@3(16)
	POPJ	17,0
R50:	SETZB 11,12
	MOVE 13,[POINT 7,11]
	MOVEI 14,6
	TLZ 740000
LOOP3:	IDIVI 50
	JUMPE 1,R5BLNK
	CAIN 1,46
	JRST R5$
	CAIN 1,47
	JRST R5%
	CAIN 1,45
	JRST R5.
	CAIGE 1,13
	JRST R5NUMB
	ADDI 1,266
R51:	PUSH 17,1
	SOJG 14,LOOP3
	MOVEI 14,6
LOOP4:	POP 17,1
	IDPB 1,13
	SOJG 14,LOOP4
	JRST (2)

R5BLNK:	MOVEI 1,240
	JRST R51
R5$:	MOVEI 1,244
	JRST R51
R5%:	MOVEI 1,245
	JRST R51
R5.:	MOVEI 1,256
	JRST R51
R5NUMB:	ADDI 1,257
	JRST R51
P==17
CH==0
N==1
N1==2

	ENTRY	FILNAM

;READ A DEV:FILE.EXT[P,PN] FROM TTY

KLUNAM:	0
	PUSHJ	17,FILNAM
	JRA	16,2(16)
FILNAM:	SETZM	NULFLG		;ASSUME NON-NULL RESPONSE
	PUSHJ	P,SIXBN
	JUMPGE	CH,.+2		;IF TERM NOT BREAK, OK
	JUMPE	N,NULRET	;ELSE, IF NO NAME, RETURN NULL
	CAIE	CH,":"
	JRST	NODEV		;NOT A NEW DEVICE
	MOVEM	N,@(16)		;RETURN NEW DEVICE NAME
	PUSHJ	P,SIXBN		;AND COLLECT NEXT WORD
NODEV:	JUMPE	N,.+2		;DON'T STORE ZERO
	MOVEM	N,@1(16)	;SAVE NAME
	CAIE	CH,"."		;CHECK FOR EXT SPECIFIED
	JRST	FILPPN		;NO, LOOK FOR PPN
	PUSHJ	P,SIXBN
	TRZ	N,-1		;THREE CHARS ONLY
	MOVE	N1,1(16)	;PICK UP NAME ADDR
	MOVEM	N,1(N1)		;SAVE EXT AFTER IT
	JUMPL	CH,RETNAM	;IF EOL, RETURN
FILPPN:	CAIE	CH,"["		;IS THERE A PPN?
	JRST	EOLCHK		;NO, CHECK FOR BREAK TERMINATOR
	PUSHJ	P,OCTN		;COLLECT PROJECT
	MOVEI	N1,(N)		;SAVE IT
	CAIE	CH,","		;CHECK ITS A COMMA
	JRST	WHAT		;SOMETHINGS WRONG
	PUSHJ	P,OCTN		;GET PROGRAMMER
	HRLI	N,(N1)		;COMBINE
	MOVE	N1,1(16)	;GET ENTER BLOCK ADDR
	MOVEM	N,3(N1)		;STORE PPN
	CAIN	CH,"]"		;CHECK TRAILING BRACKET
	PUSHJ	P,INCH		;ELSE PICK UP BREAK CHAR
EOLCHK:	JUMPGE	CH,WHAT		;ASK AGAIN IF NOT <CR>
RETNAM:POPJ	17,0

WHAT:	OUTSTR	[ASCIZ	/?WHAT?
/]
	PUSHJ	P,INCH		;SEARCH FOR END OF LINE
	JUMPGE	CH,.-1
	JRST	FILNAM+1	;THEN ASK AGIAN

NULRET:	SETOM	NULFLG		;FLAG NULL RESPONSE
	POPJ	17,0

NULFLG:	0
SIXBN:	SETZ	N,		;CLEAR RESULT
	MOVE	N1,[POINT 6,N]
SIXBL:	PUSHJ	P,INCH
	CAIL	CH,"0"
	CAILE	CH,"Z"
	POPJ	P,
	CAIGE	CH,"A"
	CAIG	CH,"9"
	JRST	.+2
	POPJ	P,
	SUBI	CH,40		;CONVERT TO SIXBIT
	TLNE	N1,(77B5)	;WORD FULL?
	IDPB	CH,N1		;NO, STORE ANOTHER CHAR
	JRST	SIXBL

OCTN:	SETZ	N,		;CLEAR ACCUMULATOR
OCTL:	PUSHJ	P,INCH
	CAIL	CH,"0"
	CAILE	CH,"7"		;IS IT AN OCTAL DIGIT?
	POPJ	P,
	LSH	N,3		;YES, SHIFT LEFT FOR IT
	ANDI	CH,7		;STRIP EXTRA BITS
	ADD	N,CH
	JRST	OCTL		;GET NEXT

INCH:	INCHWL	CH		;GET A CHAR
	CAIN	CH,15		;CR WILL BE FOLLOWED BY LF
	JRST	INCH		;SO USETHAT AS TERMINATOR
	CAIL	CH,140		;CHECK FOR LOWER CASE
	TRZ	CH,40		;AND FORCE UPPER
	CAIL	CH,12		;LOOK FOR BREAKS
	CAILE	CH,15
	CAIN	CH,33		;INCLUDING ALTMODE
	SETO	CH,		;SET BREAKS NEGATIVE
	POPJ	P,
	SUBTTL	MINOR UTILITIES

	ENTRY RHIST,RHISTN,TRAN67,TRAN6B

KLU67:	0
	PUSHJ	17,TRAN67
	JRA	16,2(16)
TRAN6B:	MOVSI	(JFCL)		;SET TO STORE BLANKS
	JRST	TRAN
TRAN67:	MOVE	[JUMPE BHJ]	;SET TO STORE NULLS
TRAN:	MOVEM	BHAN
	HRRZ	1,(16)
	HRLI	1,(<POINT 6>)
	HRRZ	2,1(16)
	HRLI	2,(<POINT 7>)
	MOVEI	3,6
LOOP67:	ILDB	1
BHAN:	JUMPE	.+2
	ADDI	40
BHJ:	IDPB	2
	SOJG	3,LOOP67
	IDPB	3,2		;STORE TRAILING NULL
	POPJ	17,0

RHISTN:				;HISTOGRAM FILE
	MOVE	1,[XWD -3,[	POINT 6,HIST+1,17
				POINT 6,HIST+1,11
				POINT 6,HIST+1,5	]]
RHISTL:	LDB	2,0(1)		;GET LOW ORDER CHARACTER FROM EXT
	CAIL	2,'0'
	CAILE	2,'9'		;IS IT NUMERIC?
	MOVEI	2,'0'-1		;NO, MAKE IT SO
	AOJ	2,		;INCREMENT IT
	DPB	2,0(1)		;STORE AWAY
	CAIG	2,'9'		;IF NO CARRY,
	JRST	RHNXIT		;QUIT NOW
	MOVEI	2,'0'		;OTHERWISE, RESET TO ZERO
	DPB	2,0(1)
	AOBJN	1,RHISTL	;AND CARRY TO NEXT DIGIT
	SETZM	CYCFLG		;UNLESS 999, IN WHICH CASE WE LOOSE
	POPJ	17,0

RHNXIT:	SETOM	CYCFLG		;ENABLE AUTOMATIC NAME SELECTION
	POPJ	17,0
RHIST:	HRRZ (16)
	SOS
	HRRM CL
	MOVN @1(16)
	HRLM CL
	SKIPE	CYCFLG		;ENABLED FOR AUTOMATIC NEXT FILE?
	JRST	RHNAME		;YES, DO NOT ASK FOR NAME, IT'S ALREADY THERE
	MOVE	1,[SIXBIT /MONITR/]
	MOVEM	1,HIST		;AS GOOD A DEFAULT NAME AS ANY
	MOVSI	1,'HST'		;DEFAULT EXTENSION
	MOVEM	1,HIST+1
HISTFL:	OUTSTR	[ASCIZ	/HISTOGRAM FILE: /]
	JSA	16,KLUNAM
	EXP	DEV2
	EXP	HIST
	SKIPE	NULFLG		;ANY INPUT GIVEN?
	JRST	NOMORE		;NO, RETURN ZERO TO STOP
RHNAME:	MOVE	1,2(16)
	MOVE	HIST
	MOVEM	0(1)
	HLLZ	HIST+1
	MOVEM	1(1)
INIT2:	INIT 17
DEV2:	SIXBIT/DSK/
	0
	  JRST	E.INT2
	LOOKUP	HIST
	  JRST	E.LOK2
	INPUT CL
	RELEAS
	SETZM	CYCFLG		;MUST GENERATE NEW NAME TO DO AUTO AGAIN
	POPJ	17,0

E.INT2:	OUTSTR	[ASCIZ	/?CANT INIT
/]
	JRST	HISTFL
E.LOK2:	OUTSTR	[ASCIZ	/?CANT LOOKUP
/]
	JRST	HISTFL
NOMORE:	SETZM	@(16)
	SETZM	CYCFLG		;JUST PRECAUTION
	POPJ	17,0

HIST:	SIXBIT	/MONITR/
	SIXBIT/HST/
	0
	0
	0
CL:	.-.
	0
CYCFLG:	0
	ENTRY	STCODE
STCODE:	HRRZ	2,(16)		;ADDRESS OF STATES ARRAY
	HRLI	2,-^D32		;LENGTH OF IT
	SETZ	3,
STLOOP:	MOVEI	1,25		;GETTAB CODE FOR STATES TABLE
	HRLI	1,(3)		;DESIRED TRPILET
	GETTAB	1,
STRET:	POPJ	17,0
	MOVEI	4,3		;CODES PER TABLE WORD
STLUP2:	SETZ	0,
	LSHC	0,6		;GET CHAR IN 0
	ADDI	0,40		;MAKE ASCII
	DPB	0,PNT1
	SETZ	0,
	LSHC	0,6		;GETSECOND OF PAIR
	ADDI	0,40
	DPB	0,PNT2
	AOBJP	2,STRET		;QUIT AT END OF ARRAY
	SOJG	4,STLUP2	;OR GET ANOTHER PAIR
	AOJA	3,STLOOP	;OR A TRIPLET

PNT1:	POINT	7,(2),6
PNT2:	POINT	7,(2),13

	END