File: CHECK.PA of Tape: Sources/Other/new-16
(Source file text) 

/ QUICK & NASTY PROGRAM TO CALCULATE FILE CHECKSUMS
/ A.WINDRAM  9-FEB-79
/
/ CHECK ACCEPTS A LIST OF UP TO 5 FILES AT A TIME,
/ AND CALCULATES A BINARY LOADER TYPE CHECKSUM FOR EACH ONE
/
/ .R PAL8
/ *CHECK(L89P)=12000$
/ .SAVE DSK CHECK
/
/***********************************************************************

	IBUF=0		/ INPUT BUFFER STARTS AT 00000
	MAXB=16		/ & IS 14 BLOCKS LONG

/ TEMPORARIES IN USR AREA
	IFTPTR=20
	NFILE=21
	TM=22
	CSUM=23
	CTR=24
	OCNM=25
	FIELD 1		/ TO MAKE CALLING USR EASY
	*2000		/ LEAVE 10000-11777 FOR USR

START,	NOP		/ IN CASE OF CHAIN START ??
	JMS I (7700	/ LOCK IN USR
	10
	JMP FCALL

/ CALL COMMAND DECODER IN SPECIAL MODE
/  TO ALLOW FILE LENGTHS > 255 BLOCKS
CALLCD,	JMS TXOUT
	CRLF
FCALL,	JMS I (200
	5
	5200		/ SPECIAL MODE

	DCA NFILE	/ ZERO FILE NO
	TAD (7605	/ 1ST INPUT FILE STARTS AT 17605

/ OPEN NEXT INPUT FILE
NXIF,	DCA IFTPTR
	TAD (7201
	DCA IFHA	/ HANDLER GOES IN 7200-7577
	ISZ NFILE
	TAD I IFTPTR
	SNA
	JMP CKND	/ NO FILES LEFT ; CHECK FOR ALTMODE

/ FETCH HANDLER
	JMS I (200
	1
IFHA,	0		/ BECOMES HANDLER ENTRY POINT
	HLT		/ WHAT !!

/ LOOKUP INPUT FILE
	IAC
	TAD IFTPTR
	DCA IFSB	/ SET FILENAME POINTER
	TAD I IFTPTR	/ GET DEVICE NO
	JMS I (200
	2		/ LOOKUP
IFSB,	0		/ BECOMES START BLOCK
IFML,	0		/ BECOMES - LENGTH OF FILE
	JMP ER1		/ FAIL

/ SET UP INPUT ROUTINE
	TAD IFSB
	DCA NXIB	/ FIRST BLOCK TO GET
	DCA CSUM	/ ZERO CHECKSUM

/ READ ANOTHER BUFFER FULL
	TAD IFML
NXBF,	TAD (MAXB
	SMA		/ **** ONLY WORKS FOR LENGTH < 2048 BLOCKS ***
	JMP .+4

	DCA IFML	/ NOT YET END OF FILE
	TAD (MAXB
	JMP SETL

	CLA		/ END OF FILE
	TAD IFML
	CIA
	DCA TM		/ SAVE LENGTH TO DO
	DCA IFML	/ NO MORE IN FILE
	TAD TM

SETL,	CLL RTR		/ SET FUNCTION WORD FOR READ
	RTR
	RTR
	DCA RFW
	CIF 0
	JMS I IFHA	/ CALL INPUT HANDLER
RFW,	0		/ READ N BLOCKS TO FIELD 0
AIBUF,	IBUF		/ ADDRESS OF BUFFER
NXIB,	0		/ FROM THIS BLOCK ON
	JMP ER2
	TAD NXIB
	TAD (MAXB
	DCA NXIB	/ UPDATE NEXT BLOCK NO

/ DO CHECKSUM ON THIS BUFFER
	TAD RFW		/ ** I HOPE IT'S FIELD 0 **
	CLL RAL		/ *2 = NO OF WORDS
	CIA
	DCA CTR
	CMA
	TAD AIBUF
	DCA 17		/ USE AIX FOR SPEED
	CDF 0

	TAD I 17
	TAD CSUM
	DCA CSUM
	ISZ CTR
	JMP .-4
	CDF 10

/ DONE THIS FILE YET ?
	TAD IFML
	SZA
	JMP NXBF

/ YES ; PRINT CHECKSUM MESSAGE
	JMS PFN		/ PRINT "FILE" NO
	JMS TXOUT
	CKSM2
	TAD CSUM
	JMS OCTOUT

DONEF,	TAD (5
	TAD IFTPTR
	JMP NXIF

/ DONE INPUT FILES ; DO MORE ?
CKND,	TAD I (7642
	SMA CLA
	JMP CALLCD	/ CD LINE ENDED WITH CR
	CDF CIF 0
	JMP I (7600	/ EXIT TO MONITOR

	PAGE
/ OUTPUT CHAR TO CONSOLE
TYPE,	0
	TLS
	TSF
	JMP .-1
	CLA
	JMP I TYPE

/ OUTPUT TEXT
TXOUT,	0
	CLA CMA
	TAD I TXOUT
	DCA 16
	ISZ TXOUT

TXOU2,	TAD I 16
	SNA
	JMP I TXOUT	/ 0 SIGNALS END OF STRING
	JMS TYPE
	JMP TXOU2

/ OUTPUT OCTAL DIGIT
DGOUT,	0
	AND (7
	TAD ("0
	JMS TYPE
	JMP I DGOUT

/ OUTPUT OCTAL NUMBER
OCTOUT,	0
	DCA OCNM
	TAD OCNM
	CLL RTL
	RTL
	JMS DGOUT
	TAD OCNM
	CLL RTR
	RTR
	RTR
	JMS DGOUT
	TAD OCNM
	CLL RTR
	RAR
	JMS DGOUT
	TAD OCNM
	JMS DGOUT
	JMP I OCTOUT

/ PRINT "FILE" & NUMBER
PFN,	0
	JMS TXOUT
	FILE
	TAD NFILE
	JMS DGOUT	/ ONLY WORKS FOR UP TO 7 FILES
	JMP I PFN

/ ERRORS
ER2,	ISZ EROR	/ INPUT FAILURE
ER1,	CLA		/ LOOKUP FAILURE
	JMS PFN
	TAD I EROR	/ GET ADDR OF ERROR MESSAGE
	DCA .+2
	JMS TXOUT
	0
	TAD (AEM1
	DCA EROR
	JMP DONEF

EROR,	AEM1
AEM1,	ERMS1;	ERMS2

	PAGE
/ ERROR MESSAGES
ERMS1,	"L;"O;"O;"K;"U;"P;" ;"F;"A;"I;"L;"U;"R;"E;0
ERMS2,	"I;"N;"P;"U;"T;" ;"F;"A;"I;"L;"U;"R;"E;0

FILE,	215;212;"F;"I;"L;"E;" ;0
CKSM2,	" ;"C;"H;"E;"C;"K;"S;"U;"M;" ;0
CRLF,	215;212;0

$$$$$$$$