File: DUMP.02 of Tape: Various/Decus/decus-2
(Source file text) 

	LAP
IBUF,	BLOCK 200	/START OF MAIN BUFFER
	BLOCK 177
IBUFE,	0		/END OF MAIN BUFFER
JBUF,	BLOCK 200	/START OF AUX BUFFER
	BLOCK 177
JBUFE,	BLOCK 1		/END OF AUZ BUF
	CPAGE 6
	EAP
/THIS ROUTINE WILL COMPLETELY ZERO THE DATA BASE OF
/	AN ALREADY EXISTING FILE
/
/
/VERSION 02
/
/
/*********************************************************
/
/
/	IT MUST BE USED WITH E X T R E E M CAUTION
/			     *************
/
/
/*********************************************************
/
/THERE ARE FOUR ENTRIES TO THIS SOUBROUTINE
/	FOPN WILL INITIALIZE THE DATA BASE CALLED
/	FROM THE CALLING PROGRAM WITH AN EXTENSION
/	OF '.DA' ASSUMED
/
/
/	GETF WILL GET THE NEXT SEQUENTIAL RECORD OF DATA
/
/	PUTF WILL PLACE THE DATA AFTER THE LAST RECORD
/	OF DATA ACCESSED
/
/	FCLOS WILL ALSO DO JUST THAT - CLOSE THE FILE TO
/	ALL ADDITIONAL I/O.
/
/THESE ROUTINES WILL OPERATE ONLY ON A FILE ON THE SYSTEMS
/	DEVICE SINCE IT USES THE PERMINATELY RESIDENT
/	DEVICE HANDLER WITH AN ENTRY POINT OF 7607
/
/
/	USE WITH CAUTION
/
ENTRY	ZERO	/ENTRY POINT OF THIS ROUTINE
/
/
/
/
OPDEF	CDF1	6211	/CHANGE TO DATA FIELD 1
OPDEF	CDFZ	6201	/CHANGE TO DF 0
OPDEF	CIFZ	6202	/CHANGE INST FIELD ZERO
OPDEF	TADI	1400	/TAD INDIRECT
OPDEF	DCAI	3400	/DCA INDIRECT
/
/
ABSYM	TEMP1	162	/JUST THAT - TEMPORARY STORAGE
ABSYM	TEMP2	163	/DITTO
ABSYM	TEMP4	164	/DITTO
/
/
ENTRY	FOPN	/INITIALIZE THE I/O HANDLERS ETC.
ENTRY	GETF	/GET A LOGICAL RECORD
ENTRY	PUTF	/PUT A LOGICAL RECORD
ENTRY	FCLOS	/CLOSE THE FILE TO ALL ADDL I/O
/
/
/
/
/
/
ABSYM	GPNT	147	/POINTER TO CURRENT LOCATION
ABSYM	RCNT	150	/COUNTER FOR NUMBER OF RECORDS/BLOCK
ABSYM	DEST	151	/DESTINATION OF COMMON DATA
ABSYM	IMRK	152	/NUMBER OF BLOCK CURRENTLY IN CORE
ABSYM	IFW	153	/FORDWARD POINTER
ABSYM	IBK	154	/REVERSE POINTER
ABSYM	MEND	155	/ABSOLUTE END OF DATA BASE(BLK NO)
ABSYM	MBASE	156	/ABSOLUTE START OF DATA BASE(BLK NO)
ABSYM	FREE	157	/BLK NO OF FIRST FREE(UNUSED) BLOCK
ABSYM	STRT	160	/BLK NO OF FIRST DATA BLOCK
ABSYM	CNTR	161	/COUNTER FOR VARIOUS DATA MOVES
/
/
IXYZ,	COMMN 1		/TO FORCE ERROR IN NO COMMON SPECIFIED
LOSTR,	IBUF		/ADDRESS OF START OF DATA
HISTR,	JBUF		/ABBRESS OF END OF DATA
DEV,	TEXT 'SYS'	/SYSTEMS DEVICE ONLY
DUMMY	NWDS		/NUMBER OF WORDS PER BLOCK
NWDS,	BLOCK 2		/NUMBER OF WDS PER RECORD
MSG1,	TEXT 'ZRO1'	/ZRO1 MESSAGE-FILE PARAMETERS NO GOOD
ZERO,	BLOCK 2		/INITIALIZE ALL GOODIES
	TAD I ZERO	/NOW GET THE FILE NAME
	DCA NAME
	INC ZERO#
	TAD I ZERO
	DCA NAME#
	INC ZERO#
	TAD I ZERO	/AND GET THE NO WDS/RECORD
	DCA NWDS
	INC ZERO#
	TAD I ZERO
	DCA NWDS#
	INC ZERO#
	TAD I NWDS
	DCA TEMP1	/SAVE THE ACTUAL NO OF WDS/RECORD
	TAD TEMP1
	CMA IAC
	SMA
	JMS ERR1	/TOO LONG A RECORD
	TAD (175
	SPA CLA
	JMS ERR1	/STILL TOO LONG
	TAD LOSTR
	TAD (2
	DCA TEMP2
	TAD TEMP1
	CMA IAC
	DCA TEMP1
	TAD TEMP1
	DCA I TEMP2
	INC TEMP2
	DCA DUM1
	TAD (400	/NOW COMPUTE THE NO RECS/BLOCK
CMPRC,	TAD TEMP1
	SPA
	JMP GOTIT
	INC DUM1
	JMP CMPRC
ERR1,	0		/RATS!!!!!
	CALL 1,ERROR	/TOO LONG A RECORD
	ARG MSG1
DUM1,	0		/SILLY COUNTER
S616,	616		/FIRST BLK NO
S573,	573		/LAST BLK NO
S122,	122		/HANDLER NO
OPEN,	0		/NOW OPEN IT
	CALL 2,IOPEN	/GET THE PARAMETERS
	ARG DEV
NAME,	ARG 0
	CLA CLL		/AND PICK UP THE GOODIES
	DCA CNTR	/MAKE IT RESTARTABLE
	CDFZ
	CLA CLL CMA
	TADI S616
	DCA MBASE	/SAVE THE FIRST BLOCK NO
	TADI S573
	CMA IAC
	IAC
	TAD MBASE	/AND ADD THE BASE BLOCK NO
DUMTG1,	DCA MEND	/SAVE THE LAST BLOCK NO
	TADI S122
CURFD,	DCA MHAND	/AND ENTRY OF SYS HANDLER
	TAD CURFD	/AND PUT DF IN RWPAR
	AND (70
	TAD (0200
	DCA RWPAR
	JMP I OPEN	/AND RETURN
GOTIT,  CLA CLL
        TAD DUM1
        CMA IAC
        DCAI TEMP2
        INC TEMP2
	JMS OPEN	/NOW OPEN THE FILE
	CLA CLL IAC
	DCA IBUF	/THE START OF DATA
	TAD (2
	DCA IBUF#	/SET THE FIRST FREE BLOCK NO TO 1
	TAD (7405
	DCA TEMP1
MRFST,	DCA I TEMP2	/ZERO OUT BLOCK NO ZERO
	INC TEMP2
	ISZ TEMP1
	JMP MRFST
	STL CLA IAC	/AND WRITE THE BLOCK
	JMS RWROT
	INC MBASE	/BUMP MBASE
	DCA IBUF	/SET BKPOINTER TO ZERO
	DCA IBUFE	/SET FWD POINTER TO ZERO
	TAD LOSTR
	IAC
	DCA TEMP1
	TAD (-200	/NOW PUT ZERO'S ALL OVER THE PLACE
	DCA TEMP2
MORE,	DCAI TEMP1
	INC TEMP1
	ISZ TEMP2
	JMP MORE
	TAD (-175
	DCA TEMP2	/NOW PUT 999(10)'S ALL OVER THE PLACE
MORE1,	TAD (1747
	DCAI TEMP1
	INC TEMP1
	ISZ TEMP2
	JMP MORE1
	STL CLA IAC	/AND START HALF WAY THROUGH ROUTINE
	JMS RWROT	/AND WRITE IT
	INC MBASE
	INC CNTR
	DCA IBUF
	JMP MRWDS
MRBLK,	TAD MEND
	CMA IAC
	IAC
	TAD MBASE
	SMA CLA
	JMP ALDON
	INC CNTR
	CLA CLL
	TAD CNTR
	DCA IBUF	/SET REV POINTER
MRWDS,	TAD CNTR
	IAC
	IAC
	DCA IBUFE	/SET FWD POINTER
	TAD LOSTR
	TAD (1
	DCA TEMP1
	DCAI TEMP1	/SET ZERO TO START OF FIRST BLOCK
	TAD (7403
	DCA TEMP2	/SET UP HOW MANY
	INC TEMP1
MRFIL,	DCAI TEMP1	/PUT ZEROS ALL OVER
	INC TEMP1
	ISZ TEMP2
	JMP MRFIL
	STL CLA IAC
	JMS RWROT	/AND WRITE THE BLOCK
	INC MBASE
	JMP MRBLK
ALDON,	DCA IBUFE	/SET THE FWD POINTER
	CLA CLL CMA	/OF THE LAST BLOCK TO ZERO
	TAD MBASE
	DCA MBASE	/TO AVOID A LOSML ERROR
	CLA STL IAC	/NOW REWRITE THE BLOCK
	JMS RWROT
	TAD (0200	/AND RESET R/W PARAMETER
	DCA RWPAR	/TO MAKE IT RESTARTABLE
	DCA MHAND	/AND FORCE ERROR IF CALL AGAIN
	RETRN ZERO	/AND GO HOME
SWSTH,	0		/SWITCH TO SHOW IF JBUF SWAPPED 0=N0;1=YES
MNWDS,	7777		/SKIPS AFTER WORD COUNT OVFLO
MNREC,	7777		/SKIPS AFTER REC COUNT OVFLO
MSG9,	TEXT 'ZRO9'	/NO OPEN - TOO BAD
FOPN,	BLOCK 2		/INITIALIZE ALL GOODIES
	TAD I FOPN	/GET THE NAME OF THE FILE
	DCA NAME
	INC FOPN#
	TAD I FOPN
	DCA NAME#
	INC FOPN#
	JMS OPEN	/OPEN THE FILE
	CLA CLL IAC
	JMS RWROT
	INC MBASE	/BUMP MBASE TO FORCE ERROR IF
	TAD IBUF	/TRY TO ACCESS BLOCK ZERO
			/GET THE START OF THE FIRST BLK
	DCA STRT	
	TAD IBUF#
	DCA FREE	/AND THE START OF THE FREE BLOCKS
	TAD LOSTR
	TAD (2
	DCA TEMP1
	TAD I TEMP1
	DCA MNWDS
	INC TEMP1
	TADI TEMP1
	DCA MNREC
	TAD STRT
	JMS RWROT
	TAD STRT
	JMS FRSET	/AND BK & FWD POINTERS
	CALL 0,GETF	/AND GET THE FIRST BLOCK
	RETRN FOPN	/THATS ALL FOLKS
	CPAGE 6
MSG8,	3222		/ZRO8 MSG-END OF FILE WHEN NOT EXPECTED
	1770
GETF,	BLOCK 2		/GET THE NEXT SEQ RECORD
GETNX,	CLA CLL
	TAD MNWDS	/GET THE NUMBER OF WORDS
	DCA CNTR
	DCA TEMP1	/WHEN AT END,IF TEMP1=0,A FILLER
	TAD (200
	DCA DEST
NCAR2,	TAD I GPNT
	CDF1
	DCAI DEST
	INC DEST
DTAG1,	TAD I GPNT	/TAG TO FORCE CDF CUR
	SNA CLA
	INC TEMP1	/THAT ONE WAS A ZERO
	INC GPNT	/GETTING THE DATA FROM 0 AND PUTTING IT IN 1
	ISZ CNTR
	JMP NCAR2
	ISZ RCNT
	JMP GETDN	/STILL ROOM IN THIS BLOCK
	CLA CLL
	TAD IBUFE
	SNA		/END OF FILE???
	JMS EOF		/TOO BAD
	JMS RWROT	/GET IT
	TAD IBUF
	CMA IAC
	TAD IMRK	/HOPE IT MATCHES
	SZA CLA
	JMS ERROR	/RATS!!!
	TAD IFW
	JMS FRSET	/SET THE POINTERS
GETDN,	TAD MNWDS
	TAD TEMP1
	SNA CLA
	JMP GETNX	/THAT LAST ONE WAS BLANK
	RETRN GETF	/THATS ALL FOLKS
RWROT,	0		/SYSTEM I/O HANDLER
	TAD MBASE	/SINCE RELATIVE
	DCA RW3		/ENTER WITH AC=BLOCK NO AND
	RAR		/LINK=0-READ;=1-WRITE
	TAD RWPAR
	DCA RW1
	TAD MBASE	/CHECK THE LOW BOUNDRY
	CMA
	TAD RW3
	SPA CLA
	JMS ERROR	/TOO SMALL
	TAD RW3		/CHECK THE HI BOUNDRY
	CMA IAC
	TAD MEND
	SPA CLA
	JMS ERROR	/TOO LARGE
	TAD MHAND
	SNA CLA
	JMP NOPEN	/NOT OPENED
	CIFZ		/CHANGE THE INST FIELD
	JMS I MHAND	/READ OR WRITE
RW1,	0		/RWPAR WITH 2 PAGES
RW2,	IBUF		/THATS WHERE WE STARE FROM
RW3,	0		/WITH THIS BLOCK NO
	JMS ERROR	/ERROR RETURN
	CLA CLL
	JMP I RWROT	/ALL DONE
RWPAR,	0200		/ONLY TWO PAGES
NOPEN,	CALL 1,ERROR	/WHOOPS
	ARG MSG9
MHAND,	0		/ENTRY OF SYS HANDLER
FCLOS,	BLOCK 2		/CLOSE THE FILE TO I/O
	CLA CLL
	TAD SWSTH	/WAS IT SWAPPED
	SNA CLA
	JMP NOSWP	/NOPE
	TAD CURFD	/LETS FUDGE A PUTF CALL
	DCA PUTF
	TAD CMBACK
	DCA PUTF#
	JMP CURNEW	/CREATE A NEW RECORD
CMBACK,	CMBACK#		/SORT OF A 'JMS .+1'
CRSH,	TAD LOSTR	/LETS MOVE THE BUFFER IN NOW
	IAC
	DCA TEMP1
	TAD TEMP1
	TAD (400
	DCA TEMP2
	TAD (7400
	DCA CNTR
MVFST,	TADI TEMP2
	DCAI TEMP1
	DCAI TEMP2
	INC TEMP1
	INC TEMP2
	ISZ CNTR
	JMP MVFST
	TAD IMRK	/AND REWRITE THE BLOCK
	STL
	JMS RWROT
NOSWP,	CLA CLL CMA	/SET AC=-1
	TAD MBASE
	DCA MBASE
	CLA CLL IAC
	JMS RWROT	/GO GET THE FIRST BLOCK
	TAD FREE
	DCA IBUF#
	TAD STRT
	DCA IBUF
	CLA STL IAC
	JMS RWROT	/SAVE THESE GOODIES
	DCA MHAND	/AN I/O NOW IS A NO-NO
	CLA CLL CMA
	DCA MNREC	/RESET M NO RECORDS TO FORCE ERROR
	CLA CLL CMA	/IF TRY TO ACCESS I/O AGAIN
	DCA MNWDS
	TAD (0200
	DCA RWPAR	/AND RESTORE READ/WRITE PARAMETER
	DCA SWSTH	/MAKE IT RESTARTABLE
	RETRN FCLOS
FRSET,	0		/SET ALL THE GOOD POINTERS ETC
	DCA IMRK	/THATS WHERE WE ARE
	TAD IBUF
	DCA IBK
	TAD IBUFE
	DCA IFW
	TAD MNREC
	DCA RCNT
	TAD LOSTR
	IAC
	DCA GPNT
	JMP I FRSET	/AND PRESET EVERYTHING
EOF,	CALL 0,FCLOS	/END OF FILE WHEN NOT EXPECTED
	CALL 1,ERROR
	ARG MSG8
MSG6,	3222		/CAN ONLY SWAP ONCE
	1766
PUTF,	BLOCK 2		/PUT A RECORD AFTER THE ONE JUST READ
	CLA CLL
	TAD GPNT
	JMS EMCHK	/IS IT EMPTY?
	SMA CLA
	JMS SWOUT	/NOPE SO SWAP OUT
	TAD (200
	DCA DEST
	TAD MNWDS
	DCA CNTR
PWRD,	CDF1		/GET THE WORD
	TADI DEST
	DCA I GPNT	/AND STORE IT AWAY
	INC DEST
	INC GPNT
	ISZ CNTR	/ALL DONE?
	JMP PWRD	/NOPE
	ISZ RCNT	/WAS THAT THE LAST ONE?
	JMP ENPUT	/DONT HAVE TO REWRITE THE SAME BLOCK!
CURNEW,	TAD FREE	/HAVE TO CREAT A NEW BLOCK
	SNA
	JMS ERROR
	DCA IBUFE	/SET MARKERS
	TAD IMRK
	STL
	JMS RWROT	/WRITE THE I BLOCK
	TAD FREE
	JMS RWROT	/GET THE NEW BLOCK TO INSERT
	TAD IBUF
	SZA CLA
	JMS ERROR	/NONZERO ON IBUF OF FREE
	TAD IBUFE
	SNA CLA
	JMP ERROX	/RATS NO FREE BLOCKS AFTER THIS ONE
	TAD IMRK
	DCA IBUF	/SET THE BACK POINTER
	TAD FREE
	DCA TEMP4	/SAVE 'FREE'
	TAD IBUFE
	DCA FREE
	TAD IFW
	DCA IBUFE	/SET FWD POINTER
	TAD IFW
	SZA		/IS IT AN END OF FILE?
	JMS ERROR	/NOPE - - TILT!!!
	TAD TEMP4	/NOW WRITE THE BLOCK
	STL
	JMS RWROT
	TAD FREE	/NOW SET THE IBUF OF THE FREE(NEW)
	JMS RWROT	/LIST TO ZERO
	TAD IBUF
	CMA IAC
	TAD TEMP4	/AND CHECK THE LINKAGES
	SZA CLA		/THE FREE LIST HAS BAD LINKAGES
	JMS ERROR
	DCA IBUF
	STL
	TAD FREE
	JMS RWROT
	TAD IMRK
	DCA IBUF
	DCA IBUFE
	TAD TEMP4
	JMS FRSET	/AND THEN GO HOME
ENPUT,	RETRN PUTF	/THATS ALL FOLKS
SWOUT,  0               /SWAP OUT THE SECOND HALF
	TAD SWSTH	/HOPE NOT SWAPPED BEFORE
	SZA CLA
	JMP ASWAP	/ALREADY SWAPPED - SIZE(NO ROOM) ERROR
        CLA CLL IAC
	DCA SWSTH
        TAD HISTR
	DCA TEMP1
	TAD (7400
	DCA CNTR
MORXX,	DCAI TEMP1	/PUT BLANKS ALL OVER THE PLACE
	INC TEMP1
	ISZ CNTR
	JMP MORXX
	TAD GPNT	/MOVE GOOD DATA TO JBUF
	DCA TEMP1
	TAD TEMP1
	TAD (400
	DCA TEMP2
	TAD HISTR
	CMA IAC
	IAC
	TAD GPNT
	DCA CNTR
MRCPY,	TADI TEMP1
	DCAI TEMP2
	DCAI TEMP1
	INC TEMP1
	INC TEMP2
	ISZ CNTR
	JMP MRCPY
	JMP I SWOUT	/DONE
MSG7,	TEXT 'ZRO7'	/MAJOR DESASTER!!!
XXXY,	0		/CALLING FIELD GOES HERE
ERROR,	0		/WHERE WE CAME FROM GOES HERE
	TAD XXXX	/PUT CALLING FIELS ABOVE
	DCA XXXY
	CALL 1,ERROR	/BAD LINKAGE SOMEWHERE
XXXX,	ARG MSG7
	CALL 0,EXIT
ASWAP,	CALL 0,FCLOS	/CLOSE THE FILE
	CALL 1,ERROR	/CAN ONLY SWAP ONCE!!!
	ARG MSG6
ERROX,	TAD CRFD	/PUT A CDF CUR IN FCLOS
	DCA FCLOS
	TAD CRASHX
	DCA FCLOS#
	TAD IMRK	/SET UP IBUF
	DCA IBUF
	TAD FREE
	DCA IMRK
	DCA FREE	/AND CLEAR FREE
	JMP CRSH	/AND CLOSE THE FILE
CRASHX,	CRASH		/LETS END UP HERE
CRASH,	CALL 1,ERROR	/WHEN THERE WERE NONE LEFT AFTER
CRFD,	ARG MSG5	/THIS ONE. A NO-NO SINCE MIGHT
MSG5,	TEXT 'ZRO5'	/HAVE SWAPPED
	CPAGE 26
EMCHK,	0		/CHECK TO SEE IF EMPTY
	CMA IAC
	CMA
	DCA 10		/USE AUTO INDEX
	DCA DUM2
	TAD MNWDS
	DCA CNTR
EMCK1,	TADI 10
	SNA CLA
	INC DUM2
	ISZ CNTR
	JMP EMCK1
	CLA CLL
	TAD DUM2
	TAD MNWDS
	SNA CLA
	CMA		/AC=-1 EMPTY
	JMP I EMCHK	/AC= 0 FULL
DUM2,	0		/TEMPORARY COUNTER
	END