Google
 

Trailing-Edge - PDP-10 Archives - bb-x130a-sb - datdmp.mac
There are 5 other files named datdmp.mac in the archive. Click here to see a list.
SUBTTL DATDMP - DATA BASE DUMPER V426  C. WHITE 07 APR 81


;THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED
;  OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE.
;
.CPYRT<
COPYRIGHT (C) 1976,1977,1978,1979,1980,1982,1984 BY DIGITAL EQUIPMENT CORP., MAYNARD, MASS.
>
;
; DATE		LOAD	EDIT #
; ----		----	------
;
;07-APR-81	70150	426
;
;
;
VDTDMP==426

INTERN	DATDMP,PPNTST,NAMTST,EXTTST

	REPEAT 0,<
;LOADING AND USE OF USER MODE DATDMP:
;
;TO LOAD TYPE:
;	.LOAD %P DATDMP=S+CONFIG+DATDMP+COMMOD
;	.SAVE DSK:DATDMP
;
;THERE WILL BE ABOUT 37 UNDEFINED GLOBALS, IGNORE
; THEM.
;
;TO USE:
;	.R DATDMP
;	*FILE
;THIS WILL DUMP THE CORE BLOCKS FOR FILE ON THE LPT.
;THE DEFAULT FILE IS *.*[*.*].  DATDMP DOES NOT KNOW
;ABOUT ? WILDCARDS.
;
;LOADING AND USE OF EXEC MODE DATDMP:
;
;TO LOAD TYPE:
;	.COMPILE COMMOD=S+CONFIG+DATDMP+COMMOD
;
;LOAD THE MONITOR WITH THIS VERSION OF COMMOD.REL.  WRITE
;DOWN THE VALUE OF DATDMP AND SAVE IT.
;TO LOOK AT A CRASH START AT DATDMP.  [IF YOU HAVE CRASH.XPN
;USE FILEX TO GENERATE CRASH.SAV THEN LOAD THAT WITH BOOTS
;AND START AT DATDMP]
;AC1 SHOULD BE A PUSHDOWN POINTER.  IF YOU ARE USING EDDT
;TYPE: PUSHJ P,DATDMP$X
;YOUR LISTING WILL COME OUT ON THE LINE PRINTER.
;
;
;HOW TO READ THE OUTPUT (EXEC OR USER)
;
;***SEE COMMOD FOR DESCRIPTION OF FIELDS***
;
;
;DATDMP FIRST DUMPS SYSPPB THE EACH PPB AND THE FILES
; IN IT.
;
;ONLY THE SUFIX IS PRINTED.  THUS UNDER A UFB IS A NUMBER
;LABELED TAL.  THIS FIELD IS THEN UFBTAL AND IS DESCRIBED
;IN COMMOD.  COMMOD IS IN ALPHABETIC ORDER BY PREFIX SO
;IT IS EASY TO FIND WHAT YOU WANT.
;
;ALL OUTPUT IS IN OCTAL EXCEPT KNO/YES WHICH ARE RADIX 2
;[ONE BIT FOR EACH STR]
;
;IF A SINGLE BIT IS A 1 IT IS SOMETIMES PRINTED AS A Y
;IF A SINGLE BIT IS A 0 IT IS SOMETIMES PRINTED AS AN N
;
;IF AN UNDEFINED BIT IS A 1 AN ! WILL BE PRINTED
;
;EXAMPLE:
;
;UNDER AT'S IS CNT/STS SO WE LOOK UP ACCCNT
;AN ACCSTS [AN AT IS AN ACC AND AN AKB IF THE
;SUFFIX IS NOT UNDER ACC LOOK UNDER AKB].  ASSUME
;DATDMP TYPED CNT/STS N3 1 N N.  THEN WE KNOW
;	1.  THE FILE IS IN A UFD (ACPNIV=0 BECAUSE AN N WAS PRINTED)
;	2.  THERE ARE 3 USERS OF THIS FILE (ACYUSE=3)
;	3.  THE FILE IS BEING UPDATED (ACSYS=1)
;	4.  THE FILE IS NOT BEING RENAMED (ACPREN=0)
;	5.  THE FILE IS NOT MARKED FOR DELETION (ACPDEL=0)
;
;***WARNING*** IF YOU UNDERSTAND FILFND THIS WILL BE
;CLEAR.  IF YOU ARE DO NOT UNDERSTAND FILFND CHANCES
;ARE YOU WILL NOT UNDERSTAND DATDMP OUTPUT
>

IFNDEF SUBSW,<SUBSW==1>

DATDMP:	MOVEM	17,EXACS+17	;SAVE AC 17 IN CASE WE'RE IN EXEC MODE
	SETZM	MODMON		;ASSUME EXEC MODE OPERATION
	JSP	17,.+1
	TLNE	17,USRMOD	;ASCERTAIN WHICH MODE WE'RE IN
	JRST	USROUT		;USER MODE
	MOVEI	17,EXACS	;SETUP BLT OF ACS
	BLT	17,EXACS+16
	CONO	LPT,LPTCLR	;DO GOOD THINGS FOR LPT
	JRST	EXOUT

USROUT:	MOVE	P,IPDP		;SETUP PUSHDOWN LIST

IFN SUBSW,<
	TTCALL	OUTSTR,[ASCIZ .
*.]
	CALLI	0
	PUSHJ	P,GETNAM
	  JRST	USROUT
	CALLI	0
>

	MOVEI	J,0
	MOVE	S,[XWD SYSLN,CNFTBL]	;GET SIZE OF MONITOR
	CALLI	S,CI.GET
	  JRST	NOSIZE		;CANT GET SIZE OF MONITOR
	SUBI	S,1
	CALLI	S,CI.SPY	;GET MONITOR AS HISEG
	  JRST	OHDEAR		;NO GOOD - COMPLAIN
	INIT	LP,0		;TRY TO INIT O/P DEV.
	  SIXBIT /LPT/
	  XWD	LPTOB,0
	  JRST	NOLPT		;NO O/P DEV. - GO COMPLAIN
	OUTBUF	LP,^D12		;LOTSABUFFS
	MOVE	P1,[SIXBIT /DATDMP/]
	MOVSI	P2,(SIXBIT /TXT/)
	SETZB	P3,P4		;CLEAR DATE & PPN
	ENTER	LP,P1		;IN CASE IT ISN'T A LPT
	  JRST	NOTABL		;IT ISN'T - AND WE HAVE PROBS.
	MOVE	S,XSYSPB	;ARG. FOR GETTAB UUO TO GET SYSPPB WORD
	CALLI	S,CI.GET
	  JRST	NOGTAB		;NO GOOD - COMPLAIN
	MOVEM	S,SYSPPB	;SAVE IT
	MOVEI	J,SIGN		;SET UP MODIFIER FOR HISEG REFERENCES
	MOVEM	J,MODMON	;SAVE IT FOR LATER USE - EXEC/USER MODE TEST
EXOUT:	MOVEI	T4,M1
	PUSHJ	P,MSG		;PRINT OUT HEADER
	HLRZ	P3,SYSPPB	;GET ADR. OF 1ST. PPB IN SYSTEM
	MOVE	T1,P3
	PUSHJ	P,OCT6		;PRINT IT OUT
	HRRZ	T1,SYSPPB	;GET ADR. OF PPB WHERE CORE GRABBER SHOULD START
	PUSHJ	P,OCT6		;PRINT IT

NXTPPB:	MOVEM	P3,CURPPB	;SAVE CURRENT PPB ADR.
	TDO	P3,MODMON	;MODIFY P3 ACCORDING TO MODE

IFN SUBSW,<
	HLRZ	T1,PPNTST	;PROJECT TO TEST
	JUMPE	T1,PPBT1	;JUMP IF ANY PROJECT MATCHES
	HLRZ	T2,PPBNAM(P3)	;GET CURRENT PROJECT
	CAME	T1,T2
	JRST	NOPPBP		;DOESNT MATCH, MOVE TO NEXT PPB
PPBT1:	HRRZ	T1,PPNTST	;PROJECT OK, TEST PROGRAMMER NUMBER
	JUMPE	T1,PPBT2	;OK IF ANY PROG MATCHES
	HRRZ	T2,PPBNAM(P3)	;GET CURRENT PROG
	CAME	T1,T2
	JRST	NOPPBP		;DOESNT MATCH, NEXT PPB
PPBT2:
>

	HLRZ	P4,PPBUFB(P3)	;GET ADR. OF 1ST. UFB OF THIS PPB
	TDO	P4,MODMON
	SETOM	NOACC		;CLEAR SWITCH THAT INHIBITS PRINTING OF ACC'S
	TRNN	P4,377777	;ANY UFB'S?
	SETZM	NOACC		;NO, DISABLE UFB/ACC PRINTING
	SETOM	MT8		;CLEAR FLAG THAT INDICATES .GT. 8 BLKS TO BE O/P
	MOVEI	J,CN0NUM	;CONTROL PRINT OUT TYPE
	MOVSI	P1,MSTRNM	;MAX. -VE # OF STR'S PER USER
	PUSHJ	P,PRDAT		;PRINT OUT PPB AND ALL ITS UFB'S
	HLRZ	P3,PPBNMB(P3)	;GET ADR. OF 1ST. NMB OF THIS PPB
	JUMPE	P3,NONMBS	;NO NMB - DON'T TRY TO PRINT ANYTHING
NXTNMB:	HRLM	P3,CURNMB	;JUST FOR CONVENIENCE OF O/P RTNE.
	TDO	P3,MODMON

IFN SUBSW,<
	SKIPN	NAMTST		;SKIP UNLESS ANY NAME MATCHES
	JRST	NMBT1
	MOVE	T1,NMBNAM(P3)	;CURRENT FILE NAME
	CAME	T1,NAMTST
	JRST	NONMBP		;DOESNT MATCH, MOVE TO NEXT NMB
NMBT1:	SKIPN	EXTTST		;SKIP UNLESS ANY EXT MATCHES
	JRST	NMBT2
	HLLZ	T1,NMBEXT(P3)	;GET CURRENT EXT
	HRLZ	T2,EXTTST	;GET EXT LOOKING FOR

IFN FTSFD,<
	CAME	T2,[SIXBIT .SFD.] ;SKIP IF LOOKING FOR SFD
	JRST	NMBNSF		;NO, USE NORMAL TEST
	MOVE	T1,NMBSFD(P3)	;PICK UP SFD BIT
	TRNN	T1,NMPSFD	;SKIP IF THIS IS AN SFD
	JRST	NONMBP		;NO, SKIP IT
	JRST	NMBT2		;YES, MATCHES
NMBNSF:
>	;END CONDITIONAL ON FTSFD
	CAME	T1,T2
	JRST	NONMBP
NMBT2:
>

	HLRZ	P4,NMBACC(P3)	;GET ADR. OF 1ST. ACC.
	TDO	P4,MODMON
	SETOM	NOACC		;ASSUME NMB HAS AN ACCESS TABLE
	TRNE	P4,LOWBTS	;DOES IT HAVE ONE?
	SETZM	NOACC		;NO - FLAG IT SO ACC WON'T BE O/P
	HLRZ	W,ACCAKB(P4)	;GET ADR. OF 1ST. AKB.
	TDO	W,MODMON
	MOVEM	W,FIRAKB	;SAVE ADR. OF 1ST. AKB
	MOVEI	J,CN1NUM	;CONTROL PRINT OUT TYPE
	MOVSI	P1,-^D512	;MAX. -VE # OF AT'S PER NMB
	PUSHJ	P,PRDAT		;PRINT OUT NMB AND ALL ITS ACCESS TABLES
NONMBP:IFE FTSFD,<
	HLRZ	P3,CORLNK(P3)	;GET NEXT NMB ADR.
	JUMPN	P3,NXTNMB	;IF THERE IS ONE GO ROUND AGAIN
>
IFN FTSFD,<
	MOVE	T1,NMBSFD(P3)	;PICK UP SFD BLAG
	TRNE	T1,NMPSFD	;SKIP IF THIS WAS NOT AN SFD
	HLRZ	P3,NMBEXT(P3)	;IT WAS, EXT POINTS TO NMB RING FOR SFD
	TRNN	T1,NMPSFD	;SKIP IF THIS WAS AN SFD
SFEN:	HLRZ	P3,CORLNK(P3)	;NO, USE NORMAL LINK TO NEXT NMB
	JUMPE	P3,NONMBS	;JUMP IF END OF LIST
	TRZN	P3,NMPUPT	;SKIP IF END OF SFD NMB RING
	JRST	NXTNMB		;NO, DO REGULAR NMB
	TDO	P3,MODMON
	JRST	SFEN		;YES, MOVE UP TO HIGHER LEVEL
>	;END CONDITIONAL FTSFD
NONMBS:	MOVSI	T1,-^D132
	HRRI	T1,"*"		;SHOW THAT ALL NMB'S FOR THIS PPB ARE O/P
	PUSHJ	P,MCHPNT
	MOVEI	T3,14		;FORM FEED
	PUSHJ	P,TYO
	MOVE	P3,CURPPB	;PICK UP CURRENT PPB ADR.
	TDO	P3,MODMON
NOPPBP:	HLRZ	P3,CORLNK(P3)	;GET NEXT PPB ADR.
	JUMPN	P3,NXTPPB	;IF THERE IS ONE GO ROUND AGAIN
	SKIPE	MODMON		;WE'VE FINISHED
	JRST	EXACS		;IN USER MODE
	MOVEI	T3,14		;IN EXEC MODE
	PUSHJ	P,TYO		;BE HELPFUL AND GIVE A FORM FEED
	MOVSI	17,EXACS	;RESTORE ACS
	BLT	17,17
IFN SUBSW,<
	SETZM	PPNTST
	SETZM	NAMTST
	SETZM	EXTTST
>

	POPJ	P,		;RETURN TO DDT

EXACS:	RELEASE	LP,0		;THESE 16 LOCS ARE USED FOR STORING ACS IN EXEC MODE
	CALLI	CI.EXT

NOSIZE:	ADDI	J,400		;ERR 5 - CANT GET SIZE OF MONITOR
OHDEAR:	ADDI	J,400		;ERR 4 - CANT GET MONITOR AS HIGH SEG
NOLPT:	ADDI	J,400		;ERR 3 - CANT OPEN LPT
NOTABL:	ADDI	J,400		;ERR 2 - CANT ENTER FILE ON LPT
NOGTAB:	ADD	J,ERRBAS	;ERR 1 - CANT GET SYSPPB
OPIT:	TTCALL	3,J		;O/P ERROR MSG.
	HALT	USROUT		;START OVER WHEN FAULT REMEDIED

ERRBAS:	ASCIZ	/ERR1/

UTYO:	SOSG	LPTOB+2		;ANY SPACE LEFT?
	OUTPUT	LP,		;NO - O/P THIS BUFFER
	IDPB	T3,LPTOB+1	;PUT CH. IN BUFFER
	POPJ	P,		;RETURN

LPTOB:	BLOCK	3

IPDP:	XWD	-40,DSKDDB	;USE DISK PROTYPE DDB(USER MODE ONLY)

MODMON:	Z			;MODE WE'RE RUNNING IN - 400000 IF USRMOD. 0 IF EXEC
CURPPB:
CURNMB:	Z			;LH=CURRENT NMB ADR. RH=CURRENT PPB ADR.
NOACC:	-1			;-1 IF NMB HAS AN ACCESS TABLE  - 0 IF NOT
FIRAKB:	Z			;1ST. AKB ADR.
XSYSPB:	XWD	5,16		;ARG FOR GETTAB UUO TO GET SYSPPB
PRDAT:	SETOB	T1,MT8PRC	;CLEAR FLAG THAT INDICATES BLK #9 OR GREATER BEING O/P
	MOVEM	P4,FIRBLK	;SAVE ADR. OF 1ST. UFB/ACC
	HLLM	P1,CONIWD(J)	;SAVE MAX. # OF UFB'S/AT'S
	SKIPA
MORBLK:	AOS	T1,MT8PRC	;SET FLAG THAT INDICATES BLK #9 OR GREATER BEING O/P
	MOVE	M,CONTWD(J)
	HRRZ	P2,CONIWD(J)
	JUMPL	T1,ORDCON
MIDPNT:	MOVE	P1,BLKCNT
	MOVE	P4,BLKADR
	AOBJN	P1,.+2
	HALT	.
	SETOM	MT8
	AOBJP	M,CPOPJ
	PUSHJ	P,SPAC20
	JRST	ORDCN1
NXTRWP:	MOVE	W,FIRAKB
	MOVE	P4,FIRBLK
ORDCON:	SETZM	FSTTIM
ORDCN1:	MOVEM	M,CURTBA
	MOVEM	P2,CURINA
	JRST	GOPRNT
NXTBLK:	MOVE	M,CURTBA
	MOVE	P2,CURINA
GOPRNT:	PUSHJ	P,PNTIT
	TLNE	S,NL
	JRST	ENDBLK
	SETOM	FSTTIM
	HLRZ	P4,CORLNK(P4)
	TDO	P4,MODMON
	JUMPE	J,UFBTST
	TRNE	P4,LOWBTS
	JRST	ENDBLK
	HLRZ	W,ACCAKB(P4)
	TDO	W,MODMON
UFBTST:	CAMN	P4,MODMON
	JRST	ENDBLK
ENDTST:	HRRZ	T1,P1
	IDIVI	T1,^D8
	CAIE	T2,7
	AOBJN	P1,NXTBLK
	JUMPGE	P1,FINEXT
	AOSE	MT8
	JRST	ENDBLK
	MOVEM	P4,BLKADR
	MOVEM	P1,BLKCNT
ENDBLK:	PUSHJ	P,CRLF
	SKIPL	MT8PRC
	JRST	MIDPNT
	HLLZ	P1,CONIWD(J)
	AOBJN	M,NXTRWP
	SKIPL	MT8		;ARE THERE MORE THAN 8 UFB'S/ACC'S TO BE O/P?
	JRST	MORBLK		;YES
	POPJ	P,
SPAC20:	MOVSI	T1,-^D20
	HRRI	T1," "
	PJRST	MCHPNT

FINEXT:	SKIPGE	T4,MT8PRC
	HALT	.
	JUMPN	T4,ENDBLK
	MOVEI	T4,[ASCIZ /TOO MANY /]
	PUSHJ	P,MSG
	MOVEI	T4,[ASCIZ /UFB'S/]
	SKIPE	J
	MOVEI	T4,[ASCIZ /AT'S/]
	PUSHJ	P,MSG
	JRST	ENDBLK


MT8:	EXP	-1
MT8PRC:	EXP	-1
FIRBLK:	Z
FSTTIM:	Z
BLKCNT:	Z
BLKADR:	Z
CURTBA:	Z
CURINA:	Z
	PO3==1		;PRINT  3  OCTAL DIGITS
	PO4==2		;  "    4    "     "
	PO6==3		;  "    6    "     "
PO12==4		;  "   12    "     "
	PB7==5		;  "    7 BINARY   "
	PSB==6		;  "   UPTO 6 SIXBIT CHS.
	PPP==7		;  "   A PRJ-PRG # OR INITIAL PAIR
	PNY==10	;  "   N OR Y     DEPENDING ON WHETHER A 1 BIT FLAG IS 0 OR 1
	PCN==11	;  "   SPACE OR !     "     "     "    AN UNUSED FIELD IS 0 OR NON 0

POMSIZ==4
POMPOS==^D17

	NBK==20	;END OF BLOCK
	NL==40	;O/P A CRLF. NO MORE O/P ON THIS LINE
	ONLY==100	;ONLY O/P ON FIRST PASS THRU TABLE
ONLNO==200	;DON'T O/P THE MSG.
ONLMS==400	;ONLY O/P THE MSG
	OSP==1000	;O/P ONE SPACE AFTER EVERYTHING ELSE
	NOSP==2000	;DON'T O/P ANY SPACES
	LESP==4000	;O/P A SPACE BEFORE ANY INFO. OTHER THAN MSG.

	LP==0
LOWBTS==3
LPTDON==100
LPTCLR==2000
USRMOD==10000
SPYSIZ==77777
	SIGN==400000
BITMSK==777000

TTY==LP
OUTSTR==3
LF==12
SYSLN==12
CNFTBL==11

CI.EXT==12
CI.GPP==24
CI.GET==41
CI.SPY==42

PPSHNO==PPSKNO/2
PPNHNO==PPNKNO-PPSHNO
PPSHES==PPSYES/2
PPNHES==PPNYES-PPSHES
NMSHNO==NMSKNO/2
NMNHNO==NMNKNO-NMSHNO
NMSHES==NMSYES/2
NMNHES==NMNYES-NMSHES
TYPNT:	HALT	.
TYPNT1:	PUSHJ	P,OCT3
	PUSHJ	P,OCT4
	PUSHJ	P,OCT6
	PUSHJ	P,OCT12
	PUSHJ	P,BIN7
	PUSHJ	P,SIXPT
	PUSHJ	P,PRJPRT
	PUSHJ	P,NOYES
	PUSHJ	P,CNSIST

TYPMAX==.-TYPNT1

PNTIT:	MOVE	S,(M)
	SKIPL	NOACC
	JRST	PNTIT1
	SKIPL	FSTTIM
	JRST	TSTBTS
	TLNE	S,ONLY
	JRST	SKIPIT
	JRST	TSTBT1

PNTIT1:	TLO	S,NL
	TLNN	S,ONLY
	JRST	SKIPIT
TSTBTS:	TLNE	S,ONLNO
	JRST	TSTBT1
	HRRZ	T4,S
	PUSHJ	P,MSG
TSTBT1:	TLNE	S,ONLMS
	JRST	TSTBT2
	TLNE	S,LESP
	PUSHJ	P,SPACE
	LDB	F,POM
	CAILE	F,TYPMAX
	HALT	.
	MOVN	T1,MODMON
	XCT	(P2)
	XCT	TYPNT(F)
TSTBT2:	TLNE	S,NOSP
	JRST	SKIPIT
	TLNN	S,OSP
	PUSHJ	P,SPACE
	PUSHJ	P,SPACE
SKIPIT:	TLNN	S,ONLMS
	ADDI	P2,1
	TLNE	S,NBK
	POPJ	P,
	AOBJN	M,PNTIT
	HALT	.

POM:	POINT	POMSIZ,S,POMPOS
PRJPRT:	MOVEI	F,-6
	PUSH	P,T1
	MOVEI	U,0
	TLNE	T1,SIGN
	MOVEI	U,1
	XCT	PICKUP(U)
	XCT	POUT(U)
	MOVSI	T2,(SIXBIT /,/)
	PUSHJ	P,SIXBPS
	XCT	PICKP1(U)
	XCT	POUT(U)
	HRLZ	T1,F
	HRRI	T1," "
	PUSHJ	P,MCHPNT
TPOPJ:	POP	P,T1
CPOPJ:	POPJ	P,

POCT36:	TRNN	T1,BITMSK
	PJRST	OCT3
	ADDI	F,3
	PJRST	OCT6

;XCT TABLE FOR "JBTPPN"

PICKUP:	HLRZS	T1
	HLLZ	T2,T1
PICKP1:	HRRZ	T1,(P)
	HRLZ	T2,(P)
POUT:	PUSHJ	P,POCT36
	PUSHJ	P,SIXBPS
IFN FTSFD,<
;SUBROUTINE TO CHECK IF NMB IS FOR SFD AND RETURN PROPER FILE EXTENSION
;VALUES T2=FILE EXTENSION OR SFD IF FILE IS AN SFD
GSFEXT:	MOVE	T2,NMBSFD(P3)	;GET SFD BIT
	TRNE	T2,NMPSFD	;SKIP IF THIS IS NOT AN SFD
	SKIPA	T2,[SIXBIT .SFD.] ;IT IS, EXTENSION IS KNOWN TO BE SFD
	HLLZ	T2,NMBEXT(P3)	;NO, PICK UP NORMAL EXTENSION
	POPJ	P,		;RETURN
>	;END CONDITIONAL ON FTSFD
OCT3:	MOVSI	T3,-3
	JRST	OCTPNT

OCT4:	MOVSI	T3,-4
	JRST	OCTPNT

BIN7:	MOVEI	R,2
	MOVSI	T3,-7
	SETOM	T4
	JRST	RADPNT

OCT12:	MOVSI	T3,-^D12
	JUMPGE	T1,OCTPNT
	MOVE	T4,T1
	MOVEI	T2,^D12
OCT12A:	SETZ	T3,
	ROTC	T3,3
	ADDI	T3,60
	PUSHJ	P,TYO
	SOJG	T2,OCT12A
	POPJ	P,

OCT6:	MOVSI	T3,-6
OCTPNT:	MOVEI	R,^D8
	SETZM	T4
RADPNT:	AOBJN	T3,.+1
	IDIVI	T1,(R)
	HRLM	T2,(P)
	SKIPE	T1
	PUSHJ	P,RADPNT
	JUMPGE	T3,RADPN1
	HLL	T1,T3
	HRRI	T1," "
	SKIPGE	T4
	HRRI	T1,"0"
	PUSHJ	P,MCHPNT
RADPN1:	HLRZ	T3,(P)
	ADDI	T3,60

TYO:	SKIPE	MODMON
	JRST	UTYO
ETYO:	LSH	T3,^D29		;MAKE DATAO WORD LOOK LIKE 1 GOOD CH. & 4 NULLS
	DATAO	LPT,T3
	LSH	T3,-^D29	;SHIFT BACK FOR ????????
	CONSO	LPT,LPTDON
	JRST	.-1
	POPJ	P,
NOYES:	MOVSI	T2,(SIXBIT /N/)
	SKIPE	T1
	MOVSI	T2,(SIXBIT /Y/)
	PJRST	SIXBPS

CNSIST:	SKIPN	T1
	PJRST	SPACE
	MOVSI	T2,(SIXBIT /!/)
	PJRST	SIXBPS

CRLF:	MOVEI	T4,[ASCIZ /
/]
MSG:	HRLI	T4,440700
MSG1:	ILDB	T3,T4
	JUMPE	T3,CPOPJ
	PUSHJ	P,TYO
	JRST	MSG1

SPACE:	MOVEI	T3," "
	PJRST	TYO

SIXPT:	JUMPLE	T2,SIXBP
	TLNE	T2,700000
	JRST	SIXBP
	PUSH	P,T2
	HLRZ	T1,T2
	SETZ	T3,
	PUSHJ	P,OCTPNT
	MOVSI	T2,(SIXBIT .,.)
	PUSHJ	P,SIXBPS
	HRRZ	T1,(P)
	PUSHJ	P,OCTPNT
	JRST	TPOPJ

SIXBPS:	TDZA	T4,T4
SIXBP:	SETOM	T4
	MOVE	T1,[XWD	440600,T2]
SIXBP1:	ILDB	T3,T1
	SKIPL	T4
	JUMPE	T3,CPOPJ
	ADDI	T3,40
	PUSHJ	P,TYO
	TLNE	T1,770000
	JRST	SIXBP1
	POPJ	P,

MCHPNT:	JUMPGE	T1,CPOPJ
	HRRZ	T3,T1
	PUSHJ	P,TYO
	AOBJN	T1,.-1
	POPJ	P,
IFN SUBSW,<
GETNAM:	SETZM	NAMTST
	SETZM	EXTTST
	SETZM	PPNTST
	SETZM	PPNFLG
	INIT	TTY,
	SIXBIT	.TTY.
	IBUF
	  CALLI	12
NAM0:	PUSHJ	P,SIXAN
NAM0A:	CAIE	T1,"*"
	JRST	NAM1
	MOVEI	T2,"*"
	PUSHJ	P,TTI
	JRST	NAM0A
NAM1:	CAIE	T1,"."
	JRST	NAM2
	CAIE	T2,"*"
	MOVEM	T2,NAMTST
	HRROS	EXTTST
	SKIPE	PPNFLG
	JRST	NAM0
	CALLI	T1,CI.GPP
	MOVEM	T1,PPNTST
	JRST	NAM0
NAM2:	CAIE	T1,"["
	JRST	NAM3
	PUSHJ	P,NAMCHK
	PUSHJ	P,OCTRD
	CAIN	T1,"*"
	PUSHJ	P,STARCK
	CAIE	T1,","
	JRST	FILERR
	HRLZM	T2,PPNTST
	PUSHJ	P,OCTRD
	CAIN	T1,"*"
	PUSHJ	P,STARCK
	CAIE	T1,"]"
	JRST	FILERR
	HRRM	T2,PPNTST
	SETOM	PPNFLG
	JRST	NAM0
NAM3:	CAIE	T1,"/"
	JRST	NAM4
	PUSHJ	P,TTI
	CAIN	T1,"H"
	JRST	HELPMS
	JRST	FILERR
NAM4:	CAIE	T1,","
	JRST	NAM5
	SKIPE	NAMTST
	JRST	FILERR
	MOVE	T3,T2		;T3=CHARS READ
	MOVE	T4,[POINT 6,T3]
	SETZ	T1,
SIXOC1:	TLNN	T4,770000
	JRST	NAM4A
	ILDB	T2,T4		;T2=NEXT CHAR
	JUMPE	T2,NAM4A	;QUIT IF NO MORE CHARS
	SUBI	T2,20		;CONVERT SIXBIT TO BINARY
	CAILE	T2,7		;SKIP IF OCTAL DIGIT
	JRST	FILERR
	LSH	T1,3
	ADD	T1,T2
	JRST	SIXOC1
NAM4A:	HRLM	T1,(P)		;REMEMBER PROJECT NUMBER
	PUSHJ	P,OCTRD		;READ PROGRAMMER NUMBER
	HLL	T2,(P)		;RESTORE PROJECT
	JRST	NAM0A		;AND PRETEND WE HAVE A FILE NAME
NAM5:	CAIL	T1,40
	JRST	FILERR
	PUSHJ	P,NAMCHK
CPOPJ1:	AOS	(P)
	POPJ	P,

NAMCHK:	JUMPE	T2,CPOPJ
	SKIPN	EXTTST
	JRST	NAMCH1
	CAIN	T2,"*"
	TDZA	T2,T2
	HLROS	T2
	MOVEM	T2,EXTTST
	POPJ	P,
NAMCH1:	CAIE	T2,"*"
	MOVEM	T2,NAMTST
	HRROS	EXTTST
	SKIPE	PPNFLG
	POPJ	P,
	CALLI	T1,CI.GPP
	MOVEM	T1,PPNTST
	POPJ	P,

STARCK:	JUMPE	T2,TTI
	POP	P,T1
	JRST	FILERR

FILERR:	MOVEI	T2,[ASCIZ .
?.]
	JRST	TYPEX

HELPMS:	MOVEI	T2,HELPTX
	JRST	TYPEX

	PUSHJ	P,TTI
TYPEX:	CAIE	T1,LF
	JRST	.-2
	TTCALL	OUTSTR,(T2)
	POPJ	P,
SIXAN:	SETZ	T2,
	MOVE	T3,[POINT 6,T2]
	PUSHJ	P,SSP
	JRST	.+2
SIXANL:	PUSHJ	P,TTI
	CAIG	T1,"Z"
	CAIGE	T1,"0"
	POPJ	P,
	CAIGE	T1,"A"
	CAIG	T1,"9"
	JRST	.+2
	POPJ	P,
	SUBI	T1,40
	TLNE	T3,770000
	IDPB	T1,T3
	JRST	SIXANL

SSP:	PUSHJ	P,TTI
	CAIE	T1,11
	CAIN	T1,40
	JRST	SSP
	POPJ	P,

OCTRD:	SETZ	T2,
OCTRD1:	PUSHJ	P,TTI
	CAIGE	T1,"0"
	POPJ	P,
	CAILE	T1,"7"
	POPJ	P,
	LSH	T2,3
	ADDI	T2,-60(T1)
	JRST	OCTRD1

TTI:	SOSLE	IBUF+2
	JRST	TTIOK
	INPUT	TTY,
	STATZ	TTY,740000
	JRST
TTIOK:	ILDB	T1,IBUF+1
	JUMPE	T1,TTI
	CAIE	T1,15		;IGNORE CARRIAGE RETURNS
	CAIN	T1,177
	JRST	TTI		;IGNORE RIBOUTS
	CAIL	T1,175		;CONVERT TO STANDARD ALTMODE
	MOVEI	T1,33
	CAIL	T1,140		;LOWER CASE TO UPPER CASE
	TRC	T1,40
	POPJ	P,
PPNTST:	0
NAMTST:	0
EXTTST:	0
PPNFLG:	0
HELPTX:	0
IBUF:	BLOCK	3

>	;END CONDITIONAL ON SUBSW
;MESSAGES


M1:	ASCIZ	.SYSPPB.
M2:	ASCIZ	.

  PPB
.
M3:	ASCIZ	.UFB'S
.
M4:	ASCIZ	.ADR: .
M5:	ASCIZ	.ADR:   .
M6:	ASCIZ	.SYS  .
M7:	ASCIZ	.FSN/UN1.
M8:	ASCIZ	.UFB  .
M9:	ASCIZ	.TAL    .
M10:	ASCIZ	.NMB  .
M11:	ASCIZ	.PRV/PPB.
M12:	ASCIZ	.KNO .
M13:	ASCIZ	.PT1/1PT.
M14:	ASCIZ	.WRT    .
M15:	ASCIZ	.YES .
M16:	ASCIZ	.NLG .
M17:	ASCIZ	.

  NMB        AT'S
.
M18:	ASCIZ	.NAM  .
M19:	ASCIZ	.EXT  .
M20:	ASCIZ	.AKB/PPB.
M21:	ASCIZ	.PPB  .
M21A:	ASCIZ	.NMB    .
M22:	ASCIZ	.CFP  .
M23:	ASCIZ	.CNT/STS.
M24:	ASCIZ	.WRT    .
M25:	ASCIZ	.DOR    .
M26:	ASCIZ	.ALC    .
M27:	ASCIZ	.ADT/LBS.
M28:	ASCIZ	.FSN/GRB.
M29:	ASCIZ	.PRV/CTM.
M30:	ASCIZ	.ACC  .
M31:	ASCIZ	.             MOD/CDT.
SPACE4:	ASCIZ	.    .
SPACE6:	ASCIZ	.      .
;*** INSTRUCTION TABLE #0 ***

CN0INS:	MOVE	T1,PPBNAM(P3)	;PRJ,PRG
	HRRZ	T1,CURPPB	;PPB ADR.
	HLRZ	T1,PPBUFB(P3)	;UFB ADR.
	HLRZ	T1,PPBSYS(P3)	;NEXT PPB ADR.
	LDB	T1,[POINT UFSFSN,UFBFSN(P4),UFNFSN]	;UFB FSN #
	LDB	T1,[POINT UFSUN1,UFBUN1(P4),UFNUN1]	;UFB UN1
	HLRZ	T1,PPBUFB(P3)	;UFB ADR.
	HRRZ	T1,PPBUFB(P3)	;SHOULD BE 0
	MOVE	T1,UFBTAL(P4)	;UFB TALLY
	HLRZ	T1,PPBNMB(P3)	;1ST. NMB ADR.
	LDB	T1,[POINT UFSPRV,UFBPRV(P4),UFNPRV]	;UFB ACCESS PRIVS.
	HLRZ	T1,UFBPPB(P4)	;NEXT UFB ADR.
	LDB	T1,[POINT PPSHNO,PPBKNO(P3),PPNHNO]	;LEFT MOST 7 PPB KNO BITS
	MOVE	T1,UFBPT1(P4)	;1ST. RETRIEVAL PTR.
	LDB	T1,[POINT UFS1PT,UFB1PT(P4),UFN1PT]	;ONLY RETRIEVAL PTR. BIT
	LDB	T1,[POINT PPSHNO,PPBKNO(P3),PPNKNO]	;RIGHT MOST 7 PPB KNO BITS
	LDB	T1,[POINT PPSZ10,PPBZ10(P3),PPNZ10]	;SHOULD BE 0
	HLRZ	T1,UFBWRT(P4)	;RESERVED FOR FIRST COME FIRST SERVE QUOTA
	HRRZ	T1,UFBWRT(P4)	;# BLOCKS WRITTEN IN UFD(OR MFD) ITSELF
	LDB	T1,[POINT PPSHES,PPBYES(P3),PPNHES]	;LEFT MOST 7 PPB YES BITS
	LDB	T1,[POINT PPSHES,PPBYES(P3),PPNYES]	;RIGHT MOST 7 PPB YES BITS
	LDB	T1,[POINT PPSNLG,PPBNLG(P3),PPNNLG]	;PPN NOT LOGGED IN BIT
	LDB	T1,[POINT PPSZ30,PPBZ30(P3),PPNZ30]	;SHOULD BE 0
	HALT	.
;*** INSTRUCTION TABLE #1 ***

CN1INS:	HLRZ	T1,CURNMB	;NMB ADR.
	ADD	T1,P4		;ACC ADR.
	MOVE	T2,NMBNAM(P3)	;FILE NAME
	LDB	T1,[POINT ACSFSN,ACCFSN(P4),ACNFSN]	;ACC FSN #
	LDB	T1,[POINT AKSUN1,AKBUN1(W),AKNUN1]	;AKB UN1
IFN	FTSFD,<PUSHJ P,GSFEXT	;FILE EXTENSION.  CHECK FOR SFD>
IFE	FTSFD,<HLLZ T2,NMBEXT(P3) ;FILE EXTENSION>
	HLRZ	T1,ACCAKB(P4)	;AKB ADR.
	HRRZ	T1,ACCPPB(P4)	;PPB ADR.
	HLRZ	T1,NMBPPB(P3)	;NEXT NMB ADR.
	HLRZ	T1,ACCNMB(P4)	;NEXT ACC ADR.
	HRRZ	T1,NMBCFP(P3)	;COMPRESSED FILE PTR.
	LDB	T1,[POINT ACSNIU,ACCNIU(P4),ACNNIU]	;FILE NOT IN UFD BIT
	LDB	T1,[POINT ACSCNT,ACCCNT(P4),ACNCNT]	;FILE CHANNEL READ COUNT
	LDB	T1,[POINT ACSSTS,ACCSTS(P4),ACNSTS]	;ACCESS TABLE STATUS
	LDB	T1,[POINT ACSREN,ACCREN(P4),ACNREN]	;RENAME UUO IN PROGRESS BIT
	LDB	T1,[POINT ACSDEL,ACCDEL(P4),ACNDEL]	;FILE TO BE DELETED BIT
	LDB	T1,[POINT NMSHNO,NMBKNO(P3),NMNHNO]	;LEFT MOST 7 NMB KNO BITS
	MOVE	T1,ACCWRT(P4)	;HIGHEST REL. BLK. WRITTEN
	LDB	T1,[POINT NMSHNO,NMBKNO(P3),NMNKNO]	;RIGHT MOST 7 NMB KNO BITS
	HLRZ	T1,ACCDOR(P4)	;FORWARDS DORMANT ACCESS BLK. ADR.
	HRRZ	T1,ACCDOR(P4)	;BACKWARDS DORMANT ACCESS BLK. ADR.
	LDB	T1,[POINT NMSHES,NMBYES(P3),NMNHES]	;LEFT MOST 7 NMB BITS
	MOVE	T1,AKBALC(W)	;HIGHEST REL. BLK. ALLOCATED TO FILE
	LDB	T1,[POINT NMSHES,NMBYES(P3),NMNYES]	;RIGHT MOST 7 NMB BITS
	LDB	T1,[POINT AKSZ10,AKBZ10(W),AKNZ10]	;SHOULD BE 0
	LDB	T1,[POINT AKSADT,AKBADT(W),AKNADT]	;ACCESS DATE FOR THIS FILE
	LDB	T1,[POINT AKSABC,AKBABC(W),AKNABC]	;ALWAYS BAD CHECKSUM BIT
	LDB	T1,[POINT AKSLBS,AKBLBS(W),AKNLBS]	;LAST BLOCK IN FILE
	LDB	T1,[POINT AKSDIR,AKBDIR(W),AKNDIR]	;FILE IS A DIRECTORY BIT
	LDB	T1,[POINT AKSZ12,AKBZ12(W),AKNZ12]	;SHOULD BE 0
	LDB	T1,[POINT NMSFSN,NMBFSN(P3),NMNFSN]	;NMB FSN #
	LDB	T1,[POINT NMSGRB,NMBGRB(P3),NMNGRB]	;GRABABBLE BIT
	LDB	T1,[POINT NMSZ30,NMBZ30(P3),NMNZ30]	;SHOULD BE 0
	MOVE	T1,AKBPT1(W)	;1ST. RETRIEVAL PTR. TO FILE
	LDB	T1,[POINT AKS1PT,AKB1PT(W),AKN1PT]	;ONLY RETRIEVAL PTR. BIT
	HLRZ	T1,NMBACC(P3)	;1ST. ACCESS TABLE BLK. PTR. ADR.
	LDB	T1,[POINT AKSPRV,AKBPRV(W),AKNPRV]	;FILE PRIV. WD.
	LDB	T1,[POINT AKSCTM,AKBCTM(W),AKNCTM]	;FILE CREATION TIME
	LDB	T1,[POINT AKSMOD,AKBMOD(W),AKNMOD]	;FILE MODE
	LDB	T1,[POINT AKSCDT,AKBCDT(W),AKNCDT]	;FILE CREATION DATE
	HALT	.
;*** CONTROL TABLE #0 ***

CN0TAB:	XWD	NOSP!ONLMS!ONLY!NL!NBK,M2
	XWD	NOSP!ONLNO!ONLY!PPP,0
	XWD	NOSP!ONLMS!ONLY!NL!NBK,M3
	XWD	ONLY!PO6,M4
	XWD	NOSP!PO6,M5
	XWD	ONLMS!NBK,SPACE6
	XWD	ONLY!PO6,M6
	XWD	NOSP!PO6,M7
	XWD	ONLNO!NBK!PO6,0
	XWD	NOSP!ONLY!PO6,M8
	XWD	OSP!ONLNO!ONLY!PCN,0
	XWD	NBK!PO12,M9
	XWD	ONLY!PO6,M10
	XWD	NOSP!PO6,M11
	XWD	ONLNO!NBK!PO6,0
	XWD	ONLY!PB7,M12
	XWD	NOSP!PO12,M13
	XWD	OSP!ONLNO!NBK!PNY,0
	XWD	NOSP!ONLY!PB7,SPACE4
	XWD	OSP!ONLNO!ONLY!PCN,0
	XWD	NOSP!PO6,M14
	XWD	ONLNO!NBK!PO6,0
	XWD	NOSP!ONLY!NL!NBK!PB7,M15
	XWD	NOSP!ONLY!NL!NBK!PB7,SPACE4
	XWD	ONLY!PNY,M16
	XWD	NOSP!ONLY!NL!NBK!PCN,SPACE4

CN0LEN==CN0TAB-.

CN0NUM==0
CN1NUM==CN0NUM+1

CONTWD:	XWD	CN0LEN,CN0TAB	;AOBJN WORD FOR CONTROL TABLE 0
	XWD	CN1LEN,CN1TAB	;  "    "    "     "      "   1
	Z

CONIWD:	EXP	CN0INS		;LEFT HALF CONTAINS # OF UFB'S PER PPB
	EXP	CN1INS		;LEFT HALF CONTAINS # OF AT'S PER NMB
	Z
;*** CONTROL TABLE #1 ***

CN1TAB:	XWD	NOSP!ONLMS!ONLY!NL!NBK,M17
	XWD	ONLY!PO6,M4
	XWD	NOSP!PO6,M5
	XWD	ONLMS!NBK,SPACE6
	XWD	ONLY!PSB,M18
	XWD	NOSP!PO6,M7
	XWD	ONLNO!NBK!PO6,0
	XWD	ONLY!PSB,M19
	XWD	NOSP!PO6,M20
	XWD	ONLNO!NBK!PO6,0
	XWD	ONLY!PO6,M21
	XWD	NBK!PO12,M21A
	XWD	ONLY!PO6,M22
	XWD	LESP!NOSP!PNY,M23
	XWD	NOSP!ONLNO!PO3,0
	XWD	OSP!ONLNO!PO3,0
	XWD	OSP!ONLNO!PNY,0
	XWD	ONLNO!NBK!PNY,0
	XWD	ONLY!PB7,M12
	XWD	NBK!PO12,M24
	XWD	ONLY!PB7,SPACE4
	XWD	NOSP!PO6,M25
	XWD	ONLNO!NBK!PO6,0
	XWD	ONLY!PB7,M15
	XWD	NBK!PO12,M26
	XWD	ONLY!PB7,SPACE4
	XWD	OSP!PCN,M27
	XWD	NOSP!ONLNO!PO4,0
	XWD	NOSP!ONLNO!PCN,0
	XWD	NOSP!ONLNO!PO4,0
	XWD	NOSP!ONLNO!PNY,0
	XWD	OSP!ONLNO!NBK!PCN,0
	XWD	NOSP!ONLY!PO3,M28
	XWD	NOSP!ONLNO!ONLY!PNY,0
	XWD	OSP!ONLNO!ONLY!PCN,0
	XWD	NOSP!PO12,M13
	XWD	OSP!ONLNO!NBK!PNY,0
	XWD	ONLY!PO6,M30
	XWD	NOSP!PO6,M29
	XWD	ONLNO!NBK!PO6,0
	XWD	NOSP!PO6,M31
	XWD	ONLNO!NBK!PO6,0

CN1LEN==CN1TAB-.

XLIST
LIT
VAR
LIST