Google
 

Trailing-Edge - PDP-10 Archives - bb-l014r-bm_tops20_v6_1_atpch_18 - autopatch/update.mac
There are 10 other files named update.mac in the archive. Click here to see a list.
	TITLE	UPDATE MODULE FOR SOUPR
	SUBTTL	DEFINITONS
;HANLEY A. STRAPPMAN
	SEARCH	PRS,JOBDAT,UUOSYM
	SALL
	TWOSEG
	EXTERN	PROMPT,SPCI,COLON,SWTCH,EATEOL,CI,DECO,PUR,INDIR
	EXTERN	EATCR,WLDMAT,LKP,NTR,OCH,ICH
	EXTERN	SIXI,FNDNAM,DECI,EATS,PUTC,BP,SAVE1,LSTI
	EXTERN	LSNI,CPOPJ1,OCLS,ICLS,RST,SWINI
	EXTERN	WILDP,WILDER,SAVE3,WLDCNT,SPCO,CO,CRLFO

;DEFINE AC'S
	F=0				;FLAGS

;FLAGS
	F.LOG==1			;LOG FILENAMES
	F.YN==2				;1=INCLUDE
	F.SUM==4			;CHECKSUM COMMAND
	F.UNC==10			;1=UNCLUDE
	F.BAS==40			;BASE FILE IS WILD

;ASSEMBLY PARAMETERS
	PDLSIZ==100			;SIZE OF PDL
	IFNDEF	FLAGS,<FLAGS==F.LOG+F.UNC>;DEFAULT FLAGS

;CHANNEL USAGE
	A==1				;INPUT OF BASE FILE
	B==2				;INPUT OF COR FILE
	O==3				;OUTPUT FILE

	DEFINE	FTL(AA,BB),<
	JRST	[MOVEI	T1,[TSEQO
			    VB ER.EAT,"?",AA,<BB at ^>]+1
		JRST	VERBO##]
>
	SUBTTL	EDIT HISTORY

	VEDIT==1	;COMPLETE VMAJOR=2 AUG 77
	VEDIT==2	;SUPPORT LINE SEQUENCE NUMBERS 9-17-77
	VEDIT==3	;ADD /UNCLUD/UXCLUD 9-17-77
	VEDIT==4	;FIX BUG CREATED BY /UNCLUD 10-10-77
	VEDIT==5	;ADD ERROR RETURN TO OCLS 10-15-77
	VEDIT==6	;CHANGE FROM WILD TO WILDER 10-15-77
	VEDIT==7	;IMPROVED ERROR MESSAGES 1-11-81
	VEDIT==10	;INDIRECT FILES 9-15-81
	VEDIT==11	;/BASE 12-3-82
	VEDIT==12	;SWITCH.INI 6-18-83

	VWHO==0
	VMAJOR==2
	VMINOR==0
	LOC	.JBVER
	BYTE	(3)VWHO(9)VMAJOR(6)VMINOR(18)VEDIT
	SUBTTL	INITIALIZATION
	RELOC	400000

UPDATE:	JFCL				;NO CCL
	MOVE	P,[IOWD PDLSIZ,PDL]	;SETUP PDL
	PUSHJ	P,RST			;RESET
	MOVEI	F,FLAGS			;DEFAULT FLAGS
	MOVE	P2,[XWD -SWIL,SWN]	;READ SWITCH.INI
	MOVEI	P3,SWX
	PUSHJ	P,SWINI
	 JFCL
	MOVEM	F,SAVFLG		;SAVE DEFAULT FLAGS
COMMAN:	PUSHJ	P,RST			;RESET
	SETZM	ZER			;ZERO CORE
	MOVE	T1,[XWD ZER,ZER+1]
	BLT	T1,ZER+ZERSIZ-1
	PUSHJ	P,PARSE			;DO A COMMAND
	JRST	COMMAN
	SUBTTL	PARSE THE COMMAND LINE
PARSE:	MOVE	P2,[XWD -SWL,SWN]	;PROMPT USER
	MOVEI	P3,SWX
	PUSHJ	P,PROMPT
	 POPJ	P,
	PUSHJ	P,INDIR			;DO INDIRECT FILE
	MOVE	T1,[XWD HGH,LOW]	;COPY NON-NULL DATA
	BLT	T1,LOW+LOWSIZ-1
	MOVE	F,SAVFLG		;DEFAULT FLAGS
	MOVEI	P1,OSPC			;GET O SPC
	PUSHJ	P,SPCI
	 POPJ	P,
	PUSHJ	P,EATS			;EAT EQUAL
	 POPJ	P,
	CAIE	C,"="
	FATAL	UPDSYN,<Syntax error>
	PUSHJ	P,CI
	 POPJ	P,
	MOVEI	P1,ASPC			;GET A SPC
	PUSHJ	P,SPCI
	 POPJ	P,
	PUSHJ	P,EATS			;EAT COMMA
	 POPJ	P,
	CAIE	C,","
	FATAL	UPDSYN,<Syntax error>
	PUSHJ	P,CI
	 POPJ	P,
	MOVE	T1,[XWD ASPC,BSPC]	;STICKY SPC
	BLT	T1,BSPC+SPCSIZ-1
	HRLZI	T1,'COR'		;BUT NEW DEFAULT EXT
	MOVEM	T1,BSPC+.SBEXT
	MOVEI	P1,BSPC			;GET B SPC
	PUSHJ	P,SPCI
	 POPJ	P,
	MOVE	P2,[XWD -SWL,SWN]	;PARSE SWITCHES
	MOVEI	P3,SWX
	PUSHJ	P,SWTCH
	 POPJ	P,
	PUSHJ	P,EATCR			;TEST FOR BREAK CHAR
	 POPJ	P,
	PUSHJ	P,BP
	FATAL	UPDSYN,<Syntax error>
	MOVEI	P1,BSPC			;ASSUME B IS WILD
	MOVEI	P2,ASPC			;AND A IS NOT
	TRNE	F,F.BAS			;TRUE?
	EXCH	P1,P2			;NOPE, SWITCH THEM
	PUSHJ	P,WILDP			;WILD?
	 EXCH	P1,P2			;NO, SWITCH AGAIN
	MOVEI	P2,MAIN			;WILDCARD LOOKUP
	PUSHJ	P,WILDER
	 JFCL
	POPJ	P,
	SUBTTL	MAINSTREAM

MAIN:	PUSHJ	P,SAVE3			;SAVE P1-P3
	AOS	WLDCNT			;COUNT IT
	MOVEI	P2,ASPC			;MATCH WLD SPCS
	MOVEI	P3,ASPC2
	PUSHJ	P,WLDMAT
	MOVEI	P2,BSPC
	MOVEI	P3,BSPC2
	PUSHJ	P,WLDMAT
	MOVEI	P2,OSPC
	MOVEI	P3,OSPC2
	PUSHJ	P,WLDMAT
	MOVE	T1,ASPC2+.SBNAM		;OUTPUT DEFAULT TO INPUT
	SKIPN	OSPC2+.SBNAM
	MOVEM	T1,OSPC2+.SBNAM
	PUSHJ	P,LOG			;DO LOGGING
	 POPJ	P,
	MOVEI	T1,A			;LOOKUP A FILE
	MOVEM	T1,ICH
	MOVEI	P1,ASPC2
	PUSHJ	P,LKP
	 POPJ	P,
	MOVEI	T1,B			;LOOKUP B FILE
	MOVEM	T1,ICH
	MOVEI	P1,BSPC2
	PUSHJ	P,LKP
	 POPJ	P,
	MOVEI	T1,O			;ENTER OUTPUT FILE
	MOVEM	T1,OCH
	MOVEI	P1,OSPC2
	PUSHJ	P,NTR
	 POPJ	P,
	MOVE	T1,[XWD 1,1]		;PAGE 1 LINE 1
	MOVEM	T1,SEQ
	SETZM	CHKSUM			;RESET CHECK SUM
	TRZ	F,F.SUM			;NO CHECKSUM YET
	PUSHJ	P,LSNI			;GET 1ST CHAR
	 JRST	EOFNG
LOOP:	PUSHJ	P,DOIT			;PROCESS ONE COMMAND
	 JRST	EOFNG
	TRNN	F,F.SUM			;CHECKSUM COMMAND?
	JRST	LOOP			;NO
	JRST	CPOPJ1			;YES

EOFNG:	TRNN	C,IO.EOF		;REAL ERROR OR JUST EOF?
	POPJ	P,			;ERROR
	ERR	ER.EAT,"?",UPDEOF,<Premature EOF>
;ROUTINE TO PROCESS A CORRECTION COMAAND
DOIT:	PUSHJ	P,EATS			;EAT SPACES
	 POPJ	P,
	CAIE	C,";"			;COMMENT?
	JRST	DISP			;NO
	PUSHJ	P,EATEOL		;YES, EAT IT
	 POPJ	P,
	JRST	LSNI			;GET 1ST CHAR
DISP:	PUSHJ	P,SIXI			;GET NAME OF CMD
	 POPJ	P,
	MOVE	T2,[XWD -CMDL,CMDN]	;FIND IT IN TABLE
	PUSHJ	P,FNDNAM
	 POPJ	P,
	JRST	@CMDX(T2)		;DISPATCH IT
;INSERT COMMAND
INS:	PUSHJ	P,SEQI			;GET STARTING LINE
	 POPJ	P,
	PUSHJ	P,FIND			;FIND IT
	 POPJ	P,
;FALL TO INSLP1

;ROUTINE TO DO AN INSERT
INSLP1:	PUSHJ	P,LSNI			;GET 1ST CHAR
	 POPJ	P,
	CAIN	C," "			;NEW COMMAND?
	JRST	CPOPJ1			;YES
	CAIE	C,11			;PREFIX?
	JRST	INSNE			;NO
INSLP2:	PUSHJ	P,LSNI			;YES, GET NEXT CHAR
	 POPJ	P,
INSNE:	TRNN	F,F.YN			;INCLUDE IT?
	JRST	.+3			;NO
	PUSHJ	P,PUTC			;YES, OUTPUT IT
	 POPJ	P,
	PUSHJ	P,BP			;A BREAK CHAR?
	 JRST	INSLP2			;NO, CONTINUE LINE
	JRST	INSLP1			;YES, START NEW LINE
;REPLACE COMMAND
REP:	PUSHJ	P,SEQI			;GET STARTING LINE
	 POPJ	P,
	PUSHJ	P,FIND			;FIND IT
	 POPJ	P,
	PUSHJ	P,DELLP1		;DO A DELETE
	 POPJ	P,
	PUSHJ	P,EATEOL		;EAT A LINE
	 POPJ	P,
	JRST	INSLP1			;DO AN INSERT
;DELETE COMMAND
DEL:	PUSHJ	P,SEQI			;GET STARTING LINE
	 POPJ	P,
	PUSHJ	P,FIND			;FIND IT
	 POPJ	P,
;FALL TO DELLP1

;ROUTINE TO DO A DELETE
DELLP1:	PUSHJ	P,LSNI			;GET 1ST CHAR
	 POPJ	P,
	CAIN	C," "			;A NEW COMMAND?
	JRST	CPOPJ1			;YES
	CAIE	C,11			;PREFIX?
	JRST	DELNE			;NO
DELLP2:	PUSHJ	P,LSNI			;YES, INPUT NEXT CHAR
	 POPJ	P,
DELNE:	MOVE	P1,C			;SAVE IT
	TRNN	F,F.YN			;YES, INCLUDE THIS COMMAND?
	JRST	DELNO			;NO
	MOVEI	T1,A			;YES, ISELECT BASE FILE
	MOVEM	T1,ICH
	PUSHJ	P,AI			;INPUT A CHAR
	 POPJ	P,
	MOVEI	T1,B			;ISELECT COR FILE
	MOVEM	T1,ICH
DELNO:	CAME	P1,C			;YES, THEN CHARS MUST MATCH
	FTL	UPDDEL,<Text to be deleted doesn't match base file>
	PUSHJ	P,BP			;A BREAK CHAR?
	 JRST	DELLP2			;NO, CONTINUE LINE
	JRST	DELLP1			;YES, START NEW LINE
;CHECK SUM COMMAND
SUM:	PUSHJ	P,DECI			;GET CHECKSUM
	 POPJ	P,
	MOVE	P1,T1
	PUSHJ	P,COMI			;EAT COMMENTS
	 POPJ	P,
	PUSHJ	P,COPY			;COPY REST OF FILE
	 POPJ	P,
	HRRZ	T1,CHKSUM		;COMPARE CHECK SUMS
	ADDI	T1,1
	CAME	P1,T1
	FATAL	UPDSUM,<Checksum error>
	PUSHJ	P,OCLS			;CLOSE FILES
	 JFCL
	MOVEI	T1,A
	MOVEM	T1,ICH
	PUSHJ	P,ICLS
	MOVEI	T1,B
	MOVEM	T1,ICH
	PUSHJ	P,ICLS
	TRO	F,F.SUM			;CHECKSUM DONE
	JRST	CPOPJ1

;ROUTINE TO COPY REST OF FILE
COPY:	MOVEI	T1,A			;ISELECT BASE FILE
	MOVEM	T1,ICH
COPYLP:	PUSHJ	P,AI			;GET A CHAR
	 JRST	COPY0
	PUSHJ	P,PUTC
	 POPJ	P,
	JRST	COPYLP
COPY0:	TRNE	C,IO.EOF		;REAL ERROR OR JUST EOF?
	AOS	(P)			;EOF, WIN
	POPJ	P,			;ERROR
;ROUTINE TO TYPE OUT LOG MESSAGE
LOG:	TRNN	F,F.LOG			;LOGGING?
	JRST	CPOPJ1			;NO
	SETOM	OCH			;OSELECT TTY
	PUSHJ	P,CRLFO
	 POPJ	P,
	MOVEI	P1,OSPC2		;TYPE O SPEC
	PUSHJ	P,SPCO
	 POPJ	P,
	MOVEI	C,"="
	PUSHJ	P,CO
	 POPJ	P,
	MOVEI	P1,ASPC2		;TYPE A SPEC
	PUSHJ	P,SPCO
	 POPJ	P,
	MOVEI	C,","
	PUSHJ	P,CO
	 POPJ	P,
	MOVEI	P1,BSPC2		;TYPE B SPEC
	JRST	SPCO
;ROUTINE TO PARSE SEQUENCE NUMBERS
SEQI:	PUSHJ	P,DECI			;GET LINE NUMBER
	 POPJ	P,
	HRRZM	T1,TSEQ
	PUSHJ	P,EATS			;EAT SLASH
	 POPJ	P,
	CAIE	C,"/"
	FATAL	UPDSYN,<Syntax error in COR file>
	PUSHJ	P,LSNI
	 POPJ	P,
	PUSHJ	P,DECI			;GET PAGE NUMBER
	 POPJ	P,
	HRLM	T1,TSEQ
;FALL TO COMI

;ROUTINE TO EAT COMMENTS
COMI:	TRZ	F,F.YN			;ASSUME EXCLUDE
	TRNE	F,F.UNC			;UNCLUDE?
	TRO	F,F.YN			;OOPS, INCLUDE
	PUSHJ	P,EATCR			;EAT CR
	 POPJ	P,
	PUSHJ	P,BP			;BREAK CHAR?
	 JRST	.+2
	JRST	CPOPJ1			;YES
	CAIE	C,";"			;NO, COMMENT?
	FTL	UPDSYN,<Syntax error in COR file>
	PUSHJ	P,LSNI			;YES, EAT THE SEMI
	 POPJ	P,
	PUSHJ	P,SIXI			;GET NAME
	 POPJ	P,
	TRO	F,F.YN			;ASSUME INCLUDE
	SKIPN	T2,NCLD			;INCLUDE SWITCH?
	JRST	NONCLD			;NO
NCLDLP:	MOVE	T3,1(T2)		;YES, GET AN ITEM
	XOR	T3,T1			;MATCHES?
	ANDCM	T3,2(T2)
	JUMPE	T3,EATEOL		;YES, INCLUDE
	HRRZ	T2,(T2)			;ADVANCE TO NEXT ITEM
	JUMPN	T2,NCLDLP		;LOOP UNTIL NONE LEFT
	TRZ	F,F.YN			;NONE LEFT, EXCLUDE
NONCLD:	SKIPN	T2,XCLD			;EXCLUDE SWITCH?
	JRST	EATEOL			;NO
	TRZ	F,F.YN			;YES, ASSUME EXCLUDE
XCLDLP:	MOVE	T3,1(T2)		;GET AN ITEM
	XOR	T3,T1			;MATCHES?
	ANDCM	T3,2(T2)
	JUMPE	T3,EATEOL		;YES, EXCLUDE
	HRRZ	T2,(T2)			;ADVANCE TO NEXT ITEM
	JUMPN	T2,XCLDLP		;LOOP UNTIL NONE LEFT
	TRO	F,F.YN			;NONE LEFT, INCLUDE
	JRST	EATEOL			;EAT THE REST OF THE LINE
;ROUTINE TO FIND A SEQUENCE NUMBER
FIND:	TRNN	F,F.YN			;INCLUDE THIS?
	JRST	CPOPJ1			;NO
	MOVEI	T1,A			;ISELECT BASE FILE
	MOVEM	T1,ICH
FINDLP:	MOVE	T1,SEQ			;THERE YET?
	CAMN	T1,TSEQ
	JRST	FOUND			;YES
	CAML	T1,TSEQ			;NO, TOO FAR?
	FTL	UPDOOO,<Out of order>
	PUSHJ	P,AI			;NO, COPY A CHAR
	 POPJ	P,
	PUSHJ	P,PUTC
	 POPJ	P,
	JRST	FINDLP			;TRY AGAIN
FOUND:	MOVEI	T1,B			;ISELECT COR FILE
	MOVEM	T1,ICH
	JRST	CPOPJ1

;ROUTINE TO INPUT A CHAR FROM BASE FILE
;CALL WITH BASE FILE ALREADY SELECTED
AI:	PUSHJ	P,LSNI			;INPUT A CHAR
	 POPJ	P,
	MOVE	T1,CHKSUM		;ADD IT TO CHECKSUM
	ROT	T1,1
	ADDI	T1,1(C)
	MOVEM	T1,CHKSUM
	PUSHJ	P,BP			;BREAK CHAR?
	 JRST	CPOPJ1			;NO
	CAIE	C,14			;YES, FORM FEED?
	JRST	AI0			;NO
	HLRZ	T1,SEQ			;YES, BUMP PAGE
	ADDI	T1,1
	HRLZM	T1,SEQ
AI0:	AOS	SEQ			;BUMP LINE
	JRST	CPOPJ1
	SUBTTL	ERROR MESSAGES

;ROUTINE TO TYPE THE TARGET SEQUENCE NUMBER
TSEQO:	HRRZ	T1,TSEQ
	PUSHJ	P,DECO
	 POPJ	P,
	MOVEI	C,"/"
	PUSHJ	P,CO
	 POPJ	P,
	HLRZ	T1,TSEQ
	PJRST	DECO
	SUBTTL	COMMANDS

	DEFINE	CMD,<
	X	DELETE,DEL
	X	INSERT,INS
	X	REPLAC,REP
	X	SUM,SUM
>	;END OF CMD

	DEFINE	X(A,B),<
	SIXBIT	/A/
>
CMDN:	CMD
	CMDL=.-CMDN

	DEFINE	X(A,B),<
	B
>
CMDX:	CMD
	SUBTTL	SWITCHES

;/INCLUDE SWITCH
INCLUD:	PUSHJ	P,SAVE1			;SAVE P1
	MOVEI	T1,NCLD			;HE CHANGED HIS MIND, PURGE OLD CORE
	PUSHJ	P,PUR
	PUSHJ	P,COLON			;EAT COLON
	 JRST	CPOPJ1
	PUSHJ	P,LSTI			;GET A SIXBIT LIST
	 JRST	CPOPJ1
	MOVEM	P1,NCLD			;STORE ADR
	POPJ	P,			;WIN

;/EXCLUDE SWITCH
EXCLUD:	PUSHJ	P,SAVE1			;SAVE P1
	MOVEI	T1,XCLD			;HE CHANGED HIS MIND, PURGE OLD CORE
	PUSHJ	P,PUR
	PUSHJ	P,COLON			;EAT COLON
	 JRST	CPOPJ1
	PUSHJ	P,LSTI			;GET A SIXBIT LIST
	 JRST	CPOPJ1
	MOVEM	P1,XCLD			;STORE ADR
	POPJ	P,			;WIN

	DEFINE	SW,<
	X	LOG,<TRO F,F.LOG>
	X	NOLOG,<TRZ F,F.LOG>
	X	UNCLUD,<TRO F,F.UNC>
	X	UXCLUD,<TRZ F,F.UNC>
	X	BASE,<TRO F,F.BAS>
	X	NOBASE,<TRZ F,F.BAS>
	X	COR,<TRZ F,F.BAS>
	X	NOCOR,<TRO F,F.BAS>	;;LAST SWITCH IN SWITCH.INI
	X	EXIT,<JRST EXT##>
	X	HELP,<PUSHJ P,HELPER##>
	X	XCLUDE,<PUSHJ P,EXCLUD>
	X	NCLUDE,<PUSHJ P,INCLUD>
>

	DEFINE	X(A,B),<
	SIXBIT	/A/
>
SWN:	SW
	SWL==.-SWN
	SWIL==^D8			;NUMBER OF SWITCHES IN SWITCH.INI

	DEFINE	X(A,B),<
	B
>
SWX:	SW
	SUBTTL	LOWSEG
	LIT				;PUT LITERALS IN HIGHSEG
	RELOC	0

PDL:	BLOCK	PDLSIZ			;PUSH DOWN LIST
BSPC:	BLOCK	SPCSIZ			;B SPC, WITH WILDCARDS
ASPC2:	BLOCK	SPCSIZ			;A SPC, WITHOUT WILDCARDS
BSPC2:	BLOCK	SPCSIZ			;B SPC, WITHOUT WILDCARDS
OSPC2:	BLOCK	SPCSIZ			;O SPC, WITHOUT WILDCARDS
TSEQ:	BLOCK	1			;TARGET SEQUENCE
CHKSUM:	BLOCK	1			;CHECK SUM
SEQ:	BLOCK	1			;SEQUENCE NUMBER
SAVFLG:	BLOCK	1			;SAVED FLAGS FROM SWITCH.INI
;BEGIN REGION TO BE ZEROED
ZER:!
XCLD:	BLOCK	1			;ADR OF EXCLUDE CHAIN
NCLD:	BLOCK	1			;ADR OF INCLUDE CHAIN
;END REGION TO BE ZEROED
	ZERSIZ==.-ZER
LOW:					;NON-NULL DATA
	RELOC				;BACK TO HIGHSEG
HGH:	PHASE	LOW
;BEGIN DO NOT SEPARATE
;O SPC, WITH WILDCARDS
OSPC:	XWD	SPCSIZ,0		;SIZE OF BLK
	SIXBIT	/DSK/			;DEVICE
	0				;DEVICE MASK
	BLOCK	SFDS+1			;PPN&SFDS
	IFN	SFDS,<0>
	BLOCK	SFDS+1			;PPN&SFDS MASKS
	0				;FILENAME
	0				;FILENAME MASK
	SIXBIT	/MAC/			;EXTENSION
	.IOASC				;ASCII MODE
;A SPC, WITH WILDCARDS
ASPC:	XWD	SPCSIZ,0		;SIZE OF BLK
	SIXBIT	/DSK/			;DEVICE
	0				;DEVICE MASK
	BLOCK	SFDS+1			;PPN&SFDS
	IFN	SFDS,<0>
	BLOCK	SFDS+1			;PPN&SFDS MASKS
	0				;FILENAME
	0				;FILENAME MASK
	SIXBIT	/MAC/			;EXTENSION
	.IOASC				;ASCII MODE
;END DO NOT SEPARATE
	DEPHASE
	LOWSIZ==.-HGH
	RELOC	LOW			;BACK TO LOWSEG
	BLOCK	LOWSIZ

	END	UPDATE