File: ISAM.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,	0		/END OF AUX BUFFER
	CPAGE 6
	EAP
/INDEX SEQUENTIAL I/O ROUTINES
/
/
/
/VERSION 02
/
/
/THERE ARE EIGHT ENTRIES TO THIS SOUBROUTINE
/	INITL WILL INITIALIZE THE DATA BASE CALLED
/	FROM THE CALLING PROGRAM WITH AN EXTENSION
/	OF '.DA' ASSUMED
/
/	RESET WILL RESET ALL THE POINTERS AND GET
/	THE FIRST BLOCK OF DATA
/
/	GET WILL GET THE NEXT SEQUENTIAL RECORD OF DATA
/
/	PUT WILL PLACE THE DATA AFTER THE LAST RECORD
/	OF DATA ACCESSED
/
/	BKSPC WILL BACKSPACE THE FILE ONE LOGICAL RECORD
/
/	DELET WILL DO JUST THAT - DELETE THE RECORD THAT
/	WAS JUST READ
/
/	FINISH WILL ALSO DO JUST THAT-CLOSE THE FILE TO
/	ALL ADDITIONAL I/O.
/
/	RWRTE WILL PLACE NEW DATA WITH AN EQUAL BLOCK
/	AS THE OLD IN THE OLD'S PLACE
/
/
/THESE ROUTINES WILL OPERATE ONLY ON A FILE ON THE
/	SYSTEM DEVICE SINCE IT USES THE PERMINATELY
/	RESIDENT DEVICE HANDLER WITH AN ENTRY POINT 
/	OF 7607
/
/
/	USE WITH CAUTION
/
ENTRY	INITL	/INITIALIZE THE I/O HANDLERS ETC.
ENTRY	RESET	/RESET ALL GOODIES AND GO TO REC#1
ENTRY	GET	/GET A LOGICAL RECORD
ENTRY	PUT	/PUT A LOGICAL RECORD
ENTRY	BKSPC	/GO BACK ONE LOGICAL RECORD
ENTRY	DELET	/DELETE THE MOST RECENTLE READ RECORD
ENTRY	FINSH	/CLOSE THE FILE TO ALL ADDL I/O
ENTRY	RWRTE	/REWRITE A BLOCK OF EQUAL LENGTH
/
/
/
/
OPDEF	CIFZ	6202	/CHANGE INST FIELD TO ZERO
OPDEF	CDFZ	6201	/CHANGE TO DF 0
OPDEF	CDF1	6211	/CHANGE DF TO 1
OPDEF	TADI	1400	/TAD INDIRECT
OPDEF	DCAI	3400	/DCA INDIRECT
/
/
ABSYM	GPNT	130	/POINTER TO CURRENT LOCATION
ABSYM	RCNT	131	/CNTR- NUMBER OF RECORDS/BLOCK
ABSYM	DEST	132	/DESTINATION OF COMMON DATA
ABSYM	IMRK	133	/NUMBER OF BLOCK IN CORE
ABSYM	IFW	134	/FORDWARD POINTER
ABSYM	IBK	135	/REVERSE POINTER
ABSYM	MEND	136	/ABS END OF DATA BASE(BLK NO)
ABSYM	MBASE	137	/ABS START OF DATA BASE(BLK NO)
ABSYM	FREE	140	/BLK NO OF FIRST FREE BLOCK
ABSYM	STRT	141	/BLK NO OF FIRST DATA BLOCK
ABSYM	TEMP1	142	/JUST THAT - TEMPORARY STORAGE
ABSYM	TEMP2	143	/DITTO
ABSYM	TEMP3	144	/DITTO
ABSYM	TEMP4	145	/DITTO
ABSYM	CNTR	146	/COUNTER FOR VARIOUS DATA MOVES
/
/
IXYZ,	COMMN 1		/FORCE ERROR IF NO 
			/COMMON STORAGE SPECIFIED
LOSTR,	IBUF#		/ADDRESS OF START OF DATA
MNWDS,	7777		/SKIPS AFTER WORD COUNT OVFLO
MNREC,	7777		/SKIPS AFTER REC COUNT OVFLO
MSG2,	TEXT 'ISM2'	/NO OR TWO INITL'S
INITL,	BLOCK 2		/INITIALIZE ALL GOODIES
	TAD MHAND	/TWO OPENS???
	SNA CLA
	JMP INOK	/NOPE
	CALL 0,FINSH	/YUP - RATS
	JMP NOPEN	/AND THE NASTY GRAM
INOK,	TAD I INITL	/GET THE NAME OF THE FILE
	DCA NAME
	INC INITL#
	TAD I INITL
	DCA NAME#
	INC INITL#
	CALL 2,IOPEN	/GET THE PARAMETERS
	ARG DEV		/DEV WAS SET TO SYS EARLIER
NAME,	ARG 0		/.DA ASSUMED
	CLA CLL CMA	/AND PICK UP THE GOODIES
	CDFZ
	TADI S616
	DCA MBASE	/SAVE THE FIRST BLOCK NO
	TADI S573
	CMA IAC		/AND COMP SINCE IS NEGATIVE
	IAC
	TAD MBASE
	DCA MEND	/SAVE THE LAST BLOCK NO
	TADI S122
CURFD,	DCA MHAND	/AND ENTRY OF SYS HANDLER
	TAD CURFD	/AND PUT THE CALLING DATA FIELD
	AND (70		/IN THE READ/WRITE ROUTINE
	TAD (0200
	DCA RWPAR
	CLA CLL IAC
	JMS RWROT
	INC MBASE	/BUMP MBASE TO FORCE ERROR IF
	CLA CLL CMA RAL	/TRY TO ACCESS BLOCK ZERO
			/GET THE START OF THE FIRST BLK
	TAD LOSTR
	DCA 10
	TADI 10		/GET THE START BLK NO
	DCA STRT
	TADI 10		/GET THE FIRST FREE BLK NO
	DCA FREE
	TADI 10		/GET THE NO WDS PER BLK
	DCA MNWDS
	TADI 10		/GET THE NO RECS PER REC
	DCA MNREC
	CALL 0,RESET	/GET THE FIRST RECORD
	TAD CTLC
	CDFZ
	DCAI S167
	TAD CURFD
	IAC		/TO MAKE IT A CIF CUR
	DCAI S165
	TAD (5567	/AND PUT A JMP I .+1 IN 166
	DCAI S166
	TAD S5165	/********************
	DCAI S7600	/AND A JMP 165 IN 07600
			/NOTE IF ODT IS USED, THESE TWO
			/CELS MUST BE NOP'ED SINCE ODT
			/USES 07600 FOR SWAPPING
			/**********************
	RETRN INITL	/AND GO HOME
S5165,	5165		/JMP PG 0 165
CTLC,	CTLCX		/ENTRY OF CRASH ROUTINE
EOF,	CALL 0,FINSH	/EOF WHEN NOT EXPECTED
	CALL 1,ERROR	/NASTY-GRAM
	ARG MSG1
S7600,	7600		/ENTRY OF MONITOR
S616,	616		/LOCATION OF FIRST BLOCK NO
S573,	573		/LOCATION OF LAST BLOCK NO
S122,	122		/LOCATION OF HANDLER
S165,	165
S166,	166
S167,	167
MSG1,	TEXT 'ISM1'	/EOF WHEN NOT EXPECTED
GET,	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
	ISZ CNTR
	JMP NCAR2
	ISZ RCNT
	JMP GETDN	/STILL ROOM IN THIS BLOCK
	CLA CLL
	TAD IBUFE
	SNA		/END OF FILE???
	JMP EOF		/TOO BAD
	JMS RWROT	/GET IT
	TAD IBUF
	CMA IAC
	TAD IMRK	/HOPE IT MATCHES
	SZA CLA
	JMS ERRXR	/RATS!!!
	TAD IFW
	JMS FRSET	/SET THE POINTERS
GETDN,	TAD MNWDS
	TAD TEMP1
	SNA CLA
	JMP GETNX	/THAT LAST ONE WAS BLANK
	RETRN GET	/THATS ALL FOLKS
FINSH,	BLOCK 2		/CLOSE THE FILE TO I/O
	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 
	CLA CLL CMA	/ERROR IF TRY TO ACCESS I/O
	DCA MNWDS	/AGAIN
	JMS RSTORE
	RETRN FINSH
RESET,	BLOCK 2		/GO BACK TO THE BEGINNING
	CLA CLL
	TAD STRT	/GET THE STARTING BLOCK
	JMS RWROT
	TAD STRT	/AND AGAIN
	JMS FRSET
	CALL 0,GET	/AND GET THE FIRST RECORD
	RETRN RESET	/THAT WAS FAST
FRSET,	0		/SET ALL THE GOOD POINTERS ETC
	DCA IMRK	/THATS WHERE WE ARE
	TAD IBUF
	DCA IBK
	TAD IBUFE
	DCA IFW
	TAD LOSTR	/SET GPNT
	DCA GPNT
	TAD MNREC	/ANS SET RCNT
	DCA RCNT
	JMP I FRSET
BKSPC,	BLOCK 2		/GO BACK 2(ONE FOR THE ONE YOU
	JMS BKONE	/JUST READ AND AGAIN FOR THE ONE 
	JMS BKONE	/YOU REALLY WANT TO GET TO)!
	CALL 0,GET	/SET THE DATA
	RETRN BKSPC
BKONE,	0		/GO BACK ONE--DO NOT PASS GO
BK1,	CLA CLL CMA	/SET AC=-1
	TAD RCNT
	DCA RCNT
	TAD GPNT	
	TAD MNWDS
	DCA GPNT	/GO BACKWORDS ONE RECORD
	TAD GPNT
	CMA
	TAD LOSTR
	SPA CLA		/IN THIS BLOCK???
	JMP THBLK	/YUP
	CLA CLL
	TAD IBUF
	SZA
	JMP REVDR
	CALL 0,RESET	/THAT WAS THE BEGINNING OF FILE
	JMP BKDON
REVDR,	JMS RWROT
	TAD IBUFE	/CHECK THE POINTERS
	CMA IAC
	TAD IMRK
	SZA CLA
	JMS ERRXR	/TILT - POINTERS DONT MATCH
	TAD IBK
	JMS FRSET
	TAD MNWDS
	CMA IAC
	DCA TEMP2	/T2 NOW CONTAINS WDS PER RECORD
	TAD MNREC
	IAC
	DCA TEMP1	/T1 CONTAINS THE -NO OF RECS
	TAD LOSTR
MRCHK,	TAD TEMP2
	ISZ TEMP1
	JMP MRCHK
	DCA GPNT	/COMPUTE NEXT TO LAST REC ADDR
	CLA CLL CMA
	DCA RCNT
THBLK,	TAD GPNT
	JMS EMCHK
	SPA CLA
	JMP BK1		/THIS ONE IS EMPTY,SO BACKONE AGAIN
BKDON,	JMP I BKONE
	CPAGE 11
RSTORE,	0		/PUT A 4207 BACK IN LOC 07600
	CLA CLL
	TAD (4207
	CDFZ
	DCAI X7600	/USE A NEW VAR SO ON SAME PAGE
	JMP I RSTORE	/AND GO HOME
X7600,	7600
RWROT,	0		/SYSTEM I/O HANDLER
	TAD MBASE	/SINCE THAT IS RELATIVE
	DCA RW3		/ENTER WITH AC=BLOCK NO AND LINK
	RAR		/=0-READ;=1-WRITE
	TAD RWPAR
	DCA RW1
	TAD MBASE	/CHECK THE LOW BOUNDRY
	CMA
	TAD RW3
	SPA CLA
	JMS ERRXR	/TOO SMALL
	TAD RW3		/CHECK THE HI BOUNDRY
	CMA IAC
	TAD MEND
	SPA CLA
	JMS ERRXR	/TOO LARGE
	TAD MHAND	/CHECK TO SEE IF INITL ALREADY
	SNA CLA		/CALLED
	JMP NOPEN	/TILT - - USER ERROR
	CIFZ
	JMS I MHAND	/READ OR WRITE
RW1,	0		/RWPAR WITH 2 PAGES
RW2,	IBUF		/THATS WHERE WE START FROM
RW3,	0		/WITH THIS BLOCK NO
	JMS ERRXR	/ERROR RETURN
	CLA CLL
	JMP I RWROT	/ALL DONE
RWPAR,	0		/TWO PAGES WITH DF IN BITS 6-8
MHAND,	0		/ENTRY OF SYS HANDLER GOES HERE
NOPEN,	CALL 1,ERROR	/NO OPEN OR TWO OPENS
	ARG MSG2
MSG3,	TEXT 'ISM3'	/NO ROOM LEFT
PUT,	BLOCK 2		/PUT A RECORD AFTER THE ONE
			/YOU 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
	JMS CMPCT	/NOW SQUASH IT TOGETHER
	TAD SWSTH	/SWSTH=0 MEANS NO SECOND REQUIRED
	SNA CLA		/SWSTH=-1 MEANS USED TWO BLOCKS
	JMP NSWPD
	TAD FREE	/YUP
	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 ERRXR	/NONZERO ON IBUF OF FREE
	TAD IMRK
	DCA IBUF
	TAD FREE
	DCA TEMP4
	TAD IBUFE
	DCA FREE
	TAD IFW
	DCA IBUFE
	TAD LOSTR	/ALL POINTERS NOW SET
	DCA TEMP1
	TAD TEMP1
	TAD (400
	DCA TEMP2
	TAD (-376
	DCA TEMP3
MMORE,	TADI TEMP2	/COPY I TO J
	DCAI TEMP1
	DCAI TEMP2	/CLEAR WHERE DATA CAME FROM
	INC TEMP1
	INC TEMP2
	ISZ TEMP3
	JMP MMORE
	TAD TEMP4	/NOW SET THE 1ST REC ST POINT
	STL
	JMS RWROT	/NOW WRITE THE NEW BLOCK
	TAD IFW
	SNA		/IS IT AN END OF FILE?
	JMP COREND	/YUP!
	JMS RWROT	/GET THE OLD FWD BLOCK
	TAD TEMP4
	DCA IBUF
	TAD IFW
	STL
	JMS RWROT	/REWRITE THE OLD FWD BLOCK
COREND,	TAD TEMP4
	DCA IFW
	TAD FREE	/NOW SET THE IBUF OF THE FREE(NEW)
	SNA
	JMP NOEND	/THERE IS NO ROOM IN FREE STRING
	JMS RWROT	/LIST TO ZERO
	TAD IBUF
	CMA IAC
	TAD TEMP4	/AND CHECK THE LINKAGES
	SZA CLA		/THE FREE LIST HAS BAD LINKAGES
	JMS ERRXR
	DCA IBUF
	STL
	TAD FREE
	JMS RWROT
NOEND,	TAD SWSTH	/ START WITH ANOTHER RECORD???
	SPA CLA
	JMP KEPBLK	/NOPE
	TAD IFW		/GET IT
	JMS RWROT
	TAD IBUF
	CMA IAC
	TAD IMRK
	SZA CLA
	JMS ERRXR	/$%&* LINKAGE
	TAD IFW
	JMS FRSET	/AND SET THE POINTERS
	JMP ENPUT
NSWPD,	STL
KEPBLK,	TAD IMRK	/STAY IN THIS BLOCK
	JMS RWROT
ENPUT,	DCA SWSTH
	RETRN PUT	/THATS ALL FOLKS
SWOUT,  0               /SWAP OUT THE SECOND HALF
        CLA CLL IAC
	DCA SWSTH
	TAD FREE	/I HOPE THERE IS ROOM
	SNA CLA
	JMP NOROOM	/TOO BAD
	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
NOROOM,	CALL 0,FINSH	/NO ROOM LEFT ON FILE
	CALL 1,ERROR
	ARG MSG3
DELET,	BLOCK 2		/DELETE AN ENTIRE BLOCK
	JMS BKONE
	TAD MNWDS
	DCA CNTR
EMTMR,	DCAI GPNT
	INC GPNT
	ISZ CNTR
	JMP EMTMR
	JMS CMPCT	/SQUASH IT TOGETHER
	TAD LOSTR	/IS THE BLOCK EMPTY?
	JMS EMCHK
	SZA CLA
	JMP DRPON	/YUP - SO DROP IT
	STL
	TAD IMRK
	JMS RWROT	/REWRITE THE BLOCK
DON5,	CALL 0,GET	/NOW GET THE NEXT RECORD
	RETRN DELET
HISTR,	JBUF		/START OF UPPER BUFFER
DRPON,	TAD FREE	/DROP AN ENTIRE BLOCK
	DCA IBUFE
	DCA IBUF
	STL		/PUT CURRENT REC ON FREE LIST
	TAD IMRK	/SET OT IN THE FREE LIST
	JMS RWROT
	TAD FREE	/GET OLD FREE REC
	SNA		/IS THERE AN OLD FREE REC
	JMP NOOLD	/NOPE!!
	JMS RWROT
	TAD IBUF
	SZA CLA
	JMS ERRXR	/****LINKAGE!!!
	TAD IMRK
	DCA IBUF
	STL
	TAD FREE
	JMS RWROT	/AND SET POINTERS ON OLD FREE
NOOLD,	TAD IFW
	SNA
	JMP LREC	/THAT WAS THE LAST RECORD
	JMS RWROT	/SET THE FWD POINTER
	TAD IBUF	/GET FWD BLOCK
	CMA IAC
	TAD IMRK
	SZA CLA
	JMS ERRXR
	STL
	TAD IBK
	DCA IBUF
	TAD IFW
	JMS RWROT	/REWRITE OLD FWD BLOCK
LREC,	TAD IBK         /SET THE BACK POINTER
	SNA
	JMP FRCRD	/THAT WAS THE FIRST RECORD
	JMS RWROT	/GET REVERSE BLOCK
	TAD IBUFE       /AND CHECK THE LINKAGES
	CMA IAC
	TAD IMRK
	SZA CLA
	JMS ERRXR
	TAD IFW
	DCA IBUFE
	STL CLA
	TAD IBK
	JMS RWROT
DON6,	TAD IMRK
	DCA FREE
	TAD IFW
	JMS RWROT	/REWRITE REVERSE BLOCK
	TAD IFW
	JMS FRSET	/GLUE THE POINTERS ETC TOGETHER
	JMP DON5
FRCRD,	TAD IFW		/RESET THE START BLOCK NO
	DCA STRT
	JMP DON5
RWRTE,	BLOCK 2		/REWRITE THE SAME SIZE BLOCK
	JMS BKONE
	TAD MNWDS
	DCA TEMP1
	TAD (200
	DCA TEMP2
FAST,	CDF1
	TADI TEMP2
	DCA I GPNT
	INC TEMP2
	INC GPNT
	ISZ TEMP1
	JMP FAST	/GET ANOTHER WORD
	STL
	TAD IMRK
	JMS RWROT	/REWRITE THE BLOCK
	ISZ RCNT	/DONT FORGET TO BUMP RCNT
	JMP DNRWT
	CLA CLL
	TAD IFW
	SNA		/END OF FILE???
	JMP EOF
	JMS RWROT
	TAD IBUF	/CHECK THE LINKAGES
	CMA IAC
	TAD IMRK
	SZA CLA
	JMS ERRXR	/RATS!!!!!!
	TAD IFW
	JMS FRSET	/AND SET THE POINTERS
DNRWT,	RETRN RWRTE
MSG4,	TEXT 'ISM4'	/DESASTER A MAJOR ERROR
SWSTH,	0		/SWAP SWITCH TO SHOW IF SWAPPED
ERRXR,	0		/WHERE WE CAME FROM GOES HERE
	JMS RSTORE	/PUT 4207 BACK IN 07600
	CALL 1,ERROR	/BAD LINKAGE SOMEWHERE
	ARG MSG4
CMPCT,	0		/COMPACT I AND J BUFFERS
	TAD LOSTR	/SET THE STARTING POINT
	JMS CMPCTR	/AND SQUASH I
	TAD SWSTH	/HAVE TO SQUASH J???
	SZA CLA
	JMP BOTH	/YUP
HOME,	DCA SWSTH	/CLEAR SWAP SWITCH
	JMP I CMPCT	/BYE BYE
BOTH,	TAD DEST
	DCA TEMP3
	TAD HISTR
	IAC
	JMS CMPCTR	/AND SQUASH IT
	CLA CLL CMA
	TAD DEST	/WILL IT ALL FIT IN ONE BLOCK??
	TAD TEMP3
	TAD MNREC
	SPA CLA
	JMP WILL
	CLA CLL CMA	/AC=-1 MEANS WONT FIT
	JMP HOME
WILL,	TAD MNREC
	DCA TEMP3
	TAD LOSTR
	DCA TEMP1
WILL1,	TAD TEMP1
	JMS EMCHK
	SPA CLA
	JMP EMPT7
	TAD MNWDS
	CMA IAC
	TAD TEMP1
	DCA TEMP1
	ISZ TEMP3
	JMP WILL1
WONT,	CLA CLL IAC	/WONT FIT AFTER ALL-SET SWITCH
	JMP HOME	/TO THE NEXT BLOCK
EMPT7,	TAD HISTR
	IAC
	DCA TEMP2
EMPT8,	TAD MNWDS
	DCA CNTR
EMPT9,	TADI TEMP2
	DCAI TEMP1
	DCAI TEMP2
	INC TEMP1
	INC TEMP2
	ISZ CNTR
	JMP EMPT9	/LETS MOVE THE ENTIRE BLOCK
	ISZ TEMP3
	JMP EMPT8	/ALL OF IT
	CLA CLL		/SET AC=0
	JMP HOME	/AND RETURN
CMPCTR,	0		/COMPACT 256 WORDS
	DCA TEMP1	/T1 WHERE DATA COMMING FROM
	DCA DEST	/RESET COUNTER OF NO VALID RECS
	TAD MNREC	/AND T2 IS WHERE IT WILL GO
	DCA TEMP4
CMP0,	TAD TEMP1
	JMS EMCHK	/CHECK IF FIRST ONE EMPTY
	SMA CLA		/AC=-1 EMPTY -- AC=0 FULL
	JMP FULL1
	TAD TEMP1
	DCA TEMP2
CMP1,	JMS GPCHK	/THAT ONE WAS EMPTY
	TAD MNWDS
	CMA IAC
	TAD TEMP1
	DCA TEMP1
CMP2,	ISZ TEMP4	/BUMP RECORD COUNTER BY ONE
	JMP MAYBE
	JMP I  CMPCTR
MAYBE,	TAD TEMP1
	JMS EMCHK
	SZA CLA
	JMP CMP1	/ANOTHER EMPTY ONE
	TAD MNWDS
	DCA CNTR
	JMS GPCHK
MOV3,	TADI TEMP1
	DCAI TEMP2
	DCAI TEMP1
	INC TEMP1
	INC TEMP2
	ISZ CNTR
	JMP MOV3
	INC DEST	/COUNT THE NO OF GOOD RECORDS
	JMP CMP2	/AND GO CHECK AGAIN
FULL1,	INC DEST
	TAD MNWDS
	CMA IAC
	TAD TEMP1
	DCA TEMP1
	ISZ TEMP4
	JMP CMP0
	JMP WONT	/WONT FIT - NEVER
	CPAGE 26
EMCHK,	0		/CHECK TO SEE IF RECORD IS EMPTY
	CMA IAC
	CMA
	DCA 10
	DCA DUM1
	TAD MNWDS
	DCA CNTR
EMCK1,	TADI 10
	SNA CLA		/ZERO??
	INC DUM1
	ISZ CNTR
	JMP EMCK1
	CLA CLL 
	TAD DUM1
	TAD MNWDS
	SNA CLA
	CMA		/EXIT WITH AC=0 - OK
	JMP I EMCHK	/EXIT WITH AC=-1 - EMPTY
DUM1,	0		/COUNTER FOR NO OF EMPTY WORDS
GPCHK,	0		/MUST TAKE GPNT ALONG TOO
	TAD GPNT
	CMA IAC
	TAD TEMP1
	SZA CLA
	JMP END3
	TAD TEMP2
	DCA GPNT
	TAD MNREC
	TAD DEST
	DCA RCNT
END3,	JMP I GPCHK	/SO WE DID
CTLCX,	CALL 0,FINSH
	CALL 0,EXIT
DEV,	TEXT 'SYS'	/SYSTEMS DEVICE ONLY!!!!!
	END