File PIP2

Directory of image this file is from
This file as a plain text file

*20
	PMODE
	EJECT
/
/
/
/		THIS IS THE SECOND PART OF PIP.   IT S CALLED    P  I  P  2.
/
/
/
/
/
/
/			RECALL SAVED SYMBOLS FROM OTHER PIPS.
/
/
/
/
/
/
/
/
	LODSYM
/
/
/
/
/
/
/
/
/
/
/
	EJECT
	*1400
/			GENERAL MASS STORAGE I/O ROUTINES.
/
/
/
/
/		CALLING SEQUENCE:
/
/
/	READ     (OR WRITE)
/	UNIT NUMBER
/	FIRST CORE LOCATION OF TRANSFER
/	NUMBER OF BLOCKS TO BE TRANSFERRED.
/	FIRST BLOCK OF TRANSFER. 
/
/
/		ROUTINE HAS THE ABILITY TO GO INTO EXTENED CORE.
/		IF HIS NUMBER OF BLOCKS MAKES THE LOCATION COUNTER "WRAP AROUND".
/
/
/
/
/
TREAD,	0			/MAIN READ ROUTINE
	JMS	TWHERE		/GET CORRECT MASS DEVICE
	TAPER			/00-07 = TAPE READ
	PIPPIP-1		/10-77 ARE NOT YET ASSIGNED.
	PIPPIP-1		/ABOVE 77 IS AN ERROR.
	PIPPIP-1
	PIPPIP-1
	PIPPIP-1
	PIPPIP-1
	PIPPIP-1
/
/
TWRITE,	0			/MAIN WRITEE.
	JMS	TWHERE		/GET COORRECT MASS STORAGE DEVICE.
	TAPEW			/FIRST IS LINC TAPE.
	PIPPIP-1		/10-77 NOT YET ASSIGNED.
	PIPPIP-1
	PIPPIP-1
	PIPPIP-1
	PIPPIP-1
	PIPPIP-1
	PIPPIP-1
/
/
/
TWHERE,	0			/GETS CORRECT MASS STORAGE DEVICE.
	MTWO			/-2
	TAD	TWHERE		/GET CALLING.
	DCA	TEMP		/GET ORIGINAL CALLING.
	TAD I	TEMP
	DCA	TEMP		/GET USER CALLING.
	TAD I	TEMP		/GET USERS UNIT.
	RTR
	RAR			/GET BITS 6-8
	AND	L7
	TAD	TWHERE		/GET START OF LIST.
	DCA	TWHERE		/AND STORE AWAY.
	TAD I	TEMP		/GET UNIT AGAIN
	AND	L7700		/IS IT TOO BIG?
	SZA
	SYSERR			/YEP. SYSTEM HAS BLOWN.
	TAD I	TWHERE		/GET CALLING ADDRESS.
	DCA	TWHERE		/AND STASH AWAY.
	TAD	TEMP		/GET USERS CALLING ADDRESS.
	DCA I	TWHERE		/AND SET UP PHONNEY CALL.
	ISZ	TWHERE		/GO TO SECOND LOC.
	JMP I	TWHERE		/PHONNEY CALL ALL DONE.
/
/
/
/
TAPER,	0			/MAIN LINC TAPE READ ROUTINE.
	TAD	TREAD		/GET READ ADDRESS.
	DCA	TWRITE		/AND SAVE FOR READ.
	TAD	TERENT		/SET TO RETRY READ IF ERROR
	DCA I	TEERNT		/SAVE IN RETRY LOCATION
	DCA I	TTSKP		/DO A CHECK OF CHECKSUM.
	JMS I	TTBLAH		/GO PERFORM FOLLOWING OPERATION.
	LMODE			/NEXT INSTRUCTION IS EXECUTED BY TBLAH IN LMODE
	RDE I			/READ AND LEAVE GOING.
	PMODE			/JUST FOR ASSEMBLER.
	JMP	TEXIT		/AND EXIT
/
/
TAPEW,	0			/GENERAL LINC TAPE WRITE ROUTINE.
	TAD	TTTSKP		/SET UP TO IGNORE BAD CHECKSUM.
	DCA I	TTSKP		/AND STASH AWAY.
	TAD	TTAPEW		/FOR WRITE ERROR REWRITE ENTIRE BLOCK
	DCA I	TEERNT
	JMS I	TTBLAH		/DO WRITE NOW.
	LMODE
	WRI I
	PMODE			/BACK INTO PMODE
	DCA I	TTSKP		/SET TO CHECK CHECKSUM.
	JMS I	TTBLAH		/NOW DO CHECK OF WHAT WE JUST WROTE.
	LMODE
	CHK I
	PMODE
/
TEXIT,	PFOUR			/GENERAL EXIT. 
	TAD	TWRITE		/GET WRITE
	DCA	TWRITE		/GO PAST ARGUEMENTS.
	JMP I	TWRITE		/PAST ARGUEMENTS.
/
/
ASET,	0			/INITIALIZES ARGUEMENT GETTER FOR AMSS STORAGE DEVICES.
	MONE
	TAD	TWRITE		/FIRST AGR.
	DCA	AUTO8		/ARG REGISTER.
	JMP I	ASET		/EXIT
/
/
/
/
/
/
/
TTSKP,	TSKP			/CHECKSUM SKIP
TTTSKP,	SKP			/INSTRUCTION TO IGNORE CHECKSUM
TTBLAH,	TBLAH			/POINTER TO I/O DOER
TERENT,	TREENT			/RETRY LOCATION
TEERNT,	TTRENT			/RETRY SWITCH
TTAPEW,	TWRITE+1		/RETRY ENTRIE WRITE ON ERROR
/
/
/
/
/
FFILEC,	MONE			/COPIES A NAMED FILE TO ANOTHER NAMED FILE.
	DCA	OUTNUM		/ZET COUNTER TO 1
	PTWO			/SET UP SECOND DIRECTORY LOOKUP
	DCA	FWHAT		/IT S AN OUTPUT FILE
	TAD I	FFTEMP		/GET THE ORIGINAL SIZE
	DCA	FSIZE		/PLACE IN THE SIZE NOW.
	DIRECT			/NOW ALLOCATE SPACE.
	TAD	FUNIT		/GET THE NEW OUTPUT UNIT
	DCA	OUTUNIT		/AND SET UP OUTPUT UNIT
	TAD	FBNUM		/GET OUTPUT BLOCK
	DCA	OUTBLOCK		/AND SET UP.
	HPOP			/POP IN UPPER SAVED FBLOCK
	TAD	FUNIT		/SAVE THE INPUT UNIT
	DCA	INUNIT
	TAD	FBNUM		/GET THE INPUT STARTING BLOCK
	DCA	INBLOCK		/AND SET UP
	COPY			/NOW COPY THE FILE
	PIP			/AND RETURN TO PIP.
/
/
/
FFTEMP,	HHTEMP
/
/
/
/
/
	EJECT
	*1600
/
/
/			MAIN GENERAL TAPE I/O LOOP.
/
/
/
TBLAH,	0			/PERFORMS A FUNCTION, THEN EXITS.
	SETA			/SET UP ARGUEMENT GETTER.
	GETA			/GET UNIT NUMBER
	CLL RAR			/MOVE INTO CORRECT PLACE
	TAD	L30/SET UP EXTENED UNITS BITS.
	DCA	TAXO		/AND STORE AWAY. NO-PAUSE AND EXTENEDED ADDRESSING ALSO SET.
	CLA RTL			/NOW MOVE BACK TO BIT 8
	RTL
	TAD I	TBLAH		/ADD IN DESIRED FUNCTION.
	DCA	TOPR		/AND STORE AWAY TO BE EXECUTED.
	TAD	TOPR		/GET THE OPERATION AGAIN.
	DCA	TSTOPR		/SET UP SELECT-WRITE LOCK CHECK.
	ISZ	TBLAH		/SKIP PAST CRAP.
	GETA			/GET STARTING ADDRESS.
	DCA	TLOC1		/AND STORE AWAY.
	GETA			/GET WORD COUNT.
	SNA			/IS IT ZERO?
	JMP I	TBLAH		/YEP. EXIT.
	CIA			/NOPE. COMPLEMETN IT.
	DCA	TCOUNT		/STASH AWAY.
	GETA			/GET BLOCK NUMBER
	IAC			/FOR UPCOMING SUBRACTION ERROR.
	DCA	TBLOCK		/AND OPLACE IN FIRST BLOCK.
/
/
/
TREENT,	MONE			/TO RETRY SAME BLCOK AFTER ERROR.
	TAD	TBLOCK		/RESET BLOCK NUMBER TO CORRECT ONE.
	DCA	TBLOCK
	TAD	TLOC1		/GET THE FIRST LOC
	SZA			/IT S ZERO. CORRECT FOR FIELD CHANGE
	JMP	TDOWN		/NOT ZERO OK.
	TAD	L7000		/BOP DOWN FIELD.
	TAD	TAXO		/IN EXTENDED REGISTER
	DCA	TAXO
TDOWN,	TAD	M400		/400= LENGTH OF 1 RECORD.
	DCA	TLOC1		/LOC ALL SET TO GO.
/
TRENT2,	TAD	M215		/ENTERS HERE IF A SKIP OVER RECORD. M215=LENGTH OF TAPE+10 SECONDS.
	DCA	TERRC2		/SET UP WAIT COUNT.
	TAD	L5000		/SET MAINANCE MODE
	6151		/FOR TESING WHETER OR NOT UNIT OK
/
/
/
TLOOP,	PONE			/MAIN LOOP TO DO NEXT RECORD. IS THIS LAST RECORD?
	TAD	TCOUNT		/GET THE NUMBER OF RECORDS TO GO
	SZA CLA
	JMP	.+4		/NO. STILL MORE TO GO.
	TAD	TOPR		/LAST ONE. TURN OFF MOTION BIT.
	AND	L7757
	DCA	TOPR
	CLA CLL			/LINC MUST BE CLEAR
	TAD	L400		/BOP UP LOCATION
	TAD	TLOC1
	DCA	TLOC1
	LINC			/GO OVER INTO LMODE
	LMODE
	ROR I	3		/MOVE OVERFLOW BIT INTO CORRECT TAPE POSITION.
	ADM I			/UPDATE TAXO AND AXO ALL AT ONCE.
TAXO,	0
	AXO			/SEND TO CONTROLER
	CLR			/CLEAR AC FOR TEST TO FOLLOW DUMMY OPERTION.
TSTOPR,	0			/PERFORM USERS OPERATION ONCE. BLOCK NUMBER=0 INSURES SUCCESS.
	0000			/BECAUSE BLOCK NUMBER IS ADDED TO SPECIAL REGISTER WHICH IS READ IN.
	IOB			/DO 8 IOT TO GET SPECIAL REGISTER.
	6154			/IF TAPE OK(SELECT AND WRITE-LOCK OFKAY
	STC	TEMP4		/THEN BIT10=1; NOW DO REAL USER OPERATION.
	LDA I			/GET ADDRESS
TLOC1,	0
	TMA			/AND SEND IT TO CONTROLLER
TOPR,	0			/ACTUAL TAPE INSTRUCTION
TBLOCK,	0			/ACTUAL BLOCK NUMBER.
	LDA			/RECALL PAST SPECIAL FUCTION
	TEMP4			/REGISTER AND CHECK WHETER UNIT OK
	PDP			/GET BACK INTO 8 MODE
	PMODE
	ISZ	TBLOCK		/BOP UP BLOCK NUMBER
	RTR			/PLACE BIT 10 IN LINC
	SNL CLA			/IS UNIT OK WITH WRITE LOCK OFF IF NECESSARY.
	JMP	TSELER		/UNIT NOT OK. DISPLAY MESSAGE.
	LMODE			/TELL ASSEM WE LL BE IN LMODE.
TLOOP2,	PDP			/GET INTO 8 MODE. IF IN 8 MODE ITS JUST A NOP.
	PMODE
	CHECKIO			/CHECKIO I/O DEVICES WHILE WAITING IN LOOP.
	ISZ	TERRC1		/BOP UP FIRST WAIT COUNT
	JMP	TNT2LG		/DIDN T OVERFLOW YET. GO DOWN
	ISZ	TERRC2		/OUTER SKIP OK?
	JMP	TNT2LG		/BIG COUNT STILL OK. GO DOWN.
/
	JMS I	TEMAIN		/WE VE WAITED TOO LONG. GIVE MESSAGE.
	TMESS1			/TO LONG MESSAGE
/
TNT2LG,	LINC			/GET INTO LINC MODE FOR FLAG TESTING.
	LMODE			/GET INTO L MODE TO TEST TAPE.
	STD
	JMP	TLOOP2		/NOT YET DONE. GO BACK AND WAIT.
	TAC			/DONE. GET CHECKSUM INTO AC.
	PDP
	PMODE			/AND GET BACK INTO 8 MODE
	CMA			/MAKE INTO ZERO IF 7777
	SNA CLA			/GOOD CHECKSUM
	JMP	TDOC		/YEP. TRY NEXT RECORD.
TSKP,	SKP			/SWITCH FOR ERROR IF BAD CHECKSUM.
	JMP	TCHEKE		/BAD CHECKSUM. GIVE MESSAGE
TDOC,	ISZ	TCOUNT		/OK. IS ALL ODNE?
	JMP	TLOOP		/NOPE. DO NEXT
TBEXIT,	JMP I	TBLAH		/YEP. EXIT
/
/
/
/
TCHEKE,	JMS I	TEMAIN
	TMESS2			/CHECKSUM ERROR
TSELER,	JMS I	TEMAIN
	TMESS3			/BLOCK NUMBER OR TIMING ERROR
/
/
/
/
/
TCOUNT,	0
TERRC1,	0
TERRC2,	0
TEMAIN,	TMAINE
/
/
/
/
/
TMESS2,	TEXT	"FLINC TAPE
FCHECKSUM ERROR     
"
TMESS3,	TEXT "FSELECT OR
FWRITE-LOCK ERROR   
"
/
/
/
/
/
	EJECT
/
/
/
/
/			LOCATED AROUND 2000. PREVIOUS PAGE OVERLAPS A LITTLE BIT.
/
/
/
/			TAPE ROUTINES CONTINUED.
TMAINE,	0			/MAIN ERROR WAIT
	CLA CLL CML RAR		/4000+6152=TAPE PRESET.
	6152			/STOP ANY STRAY TAPE OPERATIONS.
	CLA CLL
	TAD I	TMAINE		/GET ERROR MESSAGE
	DCA	.+2
	MOVE			/AND MOVE TO MAIN MESSAGE.
	0
	TMAIND
	20			/40 CHARACTER NAME.
	MONE
	TAD I	TBLOKK		/GET COOREECT BLOCK NUMBER FOR DISPLAY OF ERROR MESSAGE.
	DCA	TEMP			/AND STORE IN TEMP
	TAD TEMP
	RTR			/AND MOVE ITO POSITION
	RAR
	AND	L700		/GET OCTAL DIGIT
	TAD	L6000		/AND MAKE INTO BCD
	DCA	TOUT1		/AND PLACE IN MESSAGE
	TAD	TEMP		/REGET BLOCK NUMBER
	RTR
	RTR
	RTR			/PLACE IN RIGHT HALF OF WORD
	AND	L7
	TAD	L60		/MAKE INTO A GOOD NUMBER
	TAD	TOUT1
	DCA	TOUT1		/FIRST NUBMBER IS OK
	TAD	TEMP
	RTL
	RAL
	AND	L700		/GET OCTAL DIGIT
	TAD	L6000		/AND MAKE INTO BCD
	DCA	TOUT2
	TAD	TEMP
	AND	L7
	TAD	L60
	TAD	TOUT2
	DCA	TOUT2		/BLOKC NUMBER NOW FULLY CONVERTED.
/
TELOOP,	DECODE			/DECODE TTY LINE
	TMAIND-2			/WHILE DISPLAYING MESSAGE
	TAD	FTYPE		/GET REPLY
	TAD	M322		/IS IT AN "R"
	SNA
	JMP I	TTRENT		/YEP. RETRY OPERATION NOW!
	TAD	L7777		/IS IT AN "S"
	SNA CLA
	JMP	TRENT3		/YEP. SKIP PAST THIS BLOCK.
	TAD	FTYPE		/GET TYPE AGAIN
	TAD	M301
	SZA CLA			/IS IT AN "A"
	JMP	TELOOP		/NOPE. ILLEGAL. TRY AGAIN.
/
TRENT3,	ISZ I	TKOUNT		/IS THIS LAST RECORD?
	JMP I TTRNT2		/NOPE. GO BACK AND SKIP
	JMP I	TBLAHT		/YEP. EXIT
/
/
/
/
/
/
TBLOKK,	TBLOCK
TTRENT,	TREENT
TKOUNT,	TCOUNT
TTRNT2,	TRENT2
TBLAHT,	TBEXIT
/
/
/
/
	LEFT+140
	TOP-100			/LOCATED ON TOP,LEFT OF SCREEN
TMAIND,	0			/OVERLAYED BY EXACT MESSGE
	*TMAIND+20			/A 40 CHAR MESSAGE FROM CORRECT ERROR ROUTINE.
	TEXT	"FAT BLOCK NUMBER  "
TOUT1,	0
TOUT2,	0
	TEXT	"
 
 
A --- ACCEPT AS IS
R --- TRY AGAIN
S --- TRY TO SKIP PAST FAULTY BLOCK\"
TMESS1,	TEXT	"FBLOCK NUMBER
FOR TIMING ERROR 
"
/
/
/
/
	EJECT
/				LOCATED AROUND 2200. PREVIOUS PAGE OVERLAPS A LITTLE BIT.
/
/
/		GENERAL CALL:
/
/	DECODE
/	YOUR DISPLAY
/
/
/
/			WILL DECODE A STRING AS FOLLOWS:
/
/	<SINGLE LETTER><OCTAL NUMBER>;<8 CHARACTER NAME>,<OCTAL NUMBER>
/
/	ANY PART MAY BE MISSING WITH THE EXCEPTION OF THE FIRST LETTER.
/
/	IT S BROKEN DOWN AS FOLLOWS. THE FIRST LETTER GOES INTO "FTYPE", THE NUMBER INTO "FUNIT",
/	THE 8 CHARACTER NAME INTO "FNAME" FOLLWED BY
/	"77" S  TO FILL IT OUT, AND THE LAST NUMBER INTO
/ "FSIZE". ANY MISSING NUMBERS GO TO 0, A MISSING NAME GOES TO 7777777777777.
/
/
DDCODE,	0			/GETS AND DECODES A LINE FROM THE TTY WHILE DISPLAYING SOMETHING.
	CLA CLL			/CLEAR AC.
	TAD I	DDCODE		/GET LOCATION OF DISPLAY.
	DCA	DDDIS			/AND PLACE HERE.
	ISZ	DDCODE		/SKIP PAST CALLING ARG.
DDAGIN,	MONE			/RESTART OF DISPLAY.
	DCA	FNAME		/SET NAME TO 7777
	MONE
	DCA	FNAME+1
	MONE
	DCA	FNAME+2
	MONE
	DCA	FNAME+3		/NAME NOW CONTAINS A 7777
	DCA	FUNIT		/ZAP OUT UNIT NUMBER.
	DCA	FTYPE		/ZAP OUT CHAR.
	DCA	FSIZE		/AND SIZE.
	LINE			/GET A LINE FROM THE TTY.
DDDIS,	0			/WHILE DISPLAYING THE CALLERS CRAP.
	TAD	DDGTEXT		/POINTER TO BUFFER-1
	DCA I	DPSTART		/WE LL USE "PGETL" TO GET
	MONE			/THE CHARS SO I M  SETTING IT UP NOW.
	DCA I	DPSWITCH		/SET SWITCH TO LEFT CHAR.
	TAD	DSIZE		/NUMBER OF CHARS ALREADY IN BUFFER.
	DCA	COUNT		/PLACE IN TEMP COUNT.
	JMS I	DPGETL		/GO GET A CHAR.
	ISZ	COUNT		/BOP UP CONUT. IS THTA ALL?
	JMP	.-2		/NO. GET NEXT.
	CLA			/YES. CLEAR AC OF CHAR.
	JMS I	DPGETL		/GET NEXT CHAR.
	TAD	L7777		/TEST TO SEE IF A LETTER
	SPA			/IS IT <"A"
	JMP	DDAGIN		/YES. NOT A LET. TRY AGAIN.
	TAD	M32		/IS IT TOO BIG???
	SMA
	JMP	DDAGIN		/YEP. TOO BIG. TRY AGAIN.
	TAD	L333		/OK. MAKE INTO A GOOD LETTER.
	DCA	FTYPE		/AND STASH AWAY.
	JMS	DGETNUM		/GET A NUMBER NEXT.
	TAD	TEMP		/GET THE VALUE.
	DCA	FUNIT		/AND STASH AWAY.
	TAD	TEMP1		/GET CHARACTER WHICH WAS NON NUM.
	SNA			/IS IT TERMINATING 0000
	JMP I	DDCODE		/YES. EXIT.
	TAD	M73		/IS IT A ";"
	SZA CLA
	JMP	DDAGIN		/NOT ANYONE. BAD CHAR. TRY AGAIN.
	TAD	DFNAME		/POINTER TO "FNAME"
	DCA	TEMP3		/AND STORE AWAY
	TAD	M4		/4 *2 CHARS PER WORD=8
	DCA	COUNT
DLOOP,	JMS	DDCHEK		/GET A CHAR AND CHECK IT.
	RTL
	RTL
	RTL			/ROTATE INTO LEFT SPOT.
	AND	L7700		/ZAP OUT RIGHT
	TAD	L77		/NAME TERMINATES WITH A 77
	DCA I	TEMP3		/PLACE IT AWAY.
	JMS	DDCHEK		/GET ANOTHER
	AND	L77		/JUST RIGHT 6 BITS
	TAD I	TEMP3		/GET BACK OLD 1
	TAD	M77		/CHOP OFF L77 WE ADDED BEFORE.
	DCA I	TEMP3		/AND PLACE BACK IN THING.
	ISZ	TEMP3		/BOP UP NAME POINTER.
	ISZ	COUNT		/4 WORDS FILLED UP YET?
	JMP	DLOOP		/NO.
	JMS	DDCHEK		/YES. GET NEXT JUST FOR HELL OF IT.
	JMP	DDAGIN		/NAME TOO LOONG. RESTART/
/
DCOMMA,	JMS	DGETNUM		/EVALUATE NUM AFTER COMMA.
	TAD	TEMP		/GET VALUE
	DCA	FSIZE		/AND STASH AWAY
	TAD	TEMP1		/GET TERMINATING CHAR.
	SZA CLA		/IS IT 0000
	JMP	DDAGIN		/NO. RETRY AGAIN.
	JMP I	DDCODE		/YEP. ALL DONE.   E X I T !
/
DGETNUM,	0			/FORMS A NUMBER
	DCA	TEMP		/ZERO SUM
	JMS I	DPGETL		/GET A CHAR.
	DCA	TEMP1		/STASH IT AWAY.
	TAD	TEMP1		/GET IT BACK
	TAD	M60		/IS IT <60
	SPA CLA
	JMP I	DGETNUM		/ <60.  RETURN.
	TAD	TEMP1		/GET AGAIN
	TAD	M70		/IS IT TOOOOO BBBIIIGGGG??????
	SMA CLA
	JMP I	DGETNUM		/YEP. RETURN
	TAD	TEMP		/GET OLD TOTAL
	CLL RAL
	CLL RAL
	CLL RAL			/MULTIPLY BY 8
	TAD	TEMP1		/ADD IN TEMP1
	TAD	M60		/GET RID OF ASCII BITS.
	DCA	TEMP		/AND STASH AWAY.
	JMP	DGETNUM+2		/GO GET NEXT CHAR.
/
DDCHEK,	0		/CHECKS FOR 0 OR ,
	JMS I	DPGETL
	SNA			/IS GOTTEN CHAR 0?
	JMP I	DDCODE		/YES.    EX I T
	TAD	M54		/IS IT A ,
	SNA
	JMP	DCOMMA		/YES. END OF NAME.
	TAD	L54		/CORRECT FOR SUBTRACTION.
	JMP I	DDCHEK		/RETURN IWTH CHAR IN AC.
/
/
/
DPGETL,	DDCOM			/POINTER TO UNPACK ROUTINE CHAR GETTER.
DFNAME,	FNAME			/POINTER TO FNAME
DDGTEXT,	GTEXT+1		/POINTER TO START OF MESSAGE-1
DPSTART,	PSTART		/POINTER TO GETCHAR POINTER
DPSWITCH,	PSWITCH		/POINTER TO SWITCH (LEFT OR RIGHT CHAR)
DSIZE,	-LBNUM			/NUMBER OF SYSTEM CHARS ALREADY IN BUFFER.
/
/
/
/
/
/
/
	EJECT
	*2400
/
/			MAIN DIRECTORY SEARCHER.
/
/	GENREAL CALL:
/
/
/		DIRECT
/
/
/	NO ARGUEMENTS. ALL COMMUNICATION IS DONE THROUGH "FBLOCK AREA [FSIZE-FNAME+3]"
/
/
/
/
/
/
DYRECT,	0			/MAIN ENTRY
	CLA	CLL			/CLEAR AC TO BE SURE.
	TAD	INDEX		/GET START OF INDEX
	DCA	DINDEX		/AND PLACE AWAY HERE
	TAD	ILEN		/GET LENGTH OF INDEX
	DCA	DLEN		/AND PLACE AWAY.
	PUSH			/SAVE FBLOCK. I/O MIGHT DESTROY IT.
	TAD	FUNIT		/GET DESIRED UNIT.
	DCA	.+2		/AND FINISH SETTING UP READ.
	READ			/READ IN INDEX.
	0			/UNIT
DPOINT,	BUFFER			/INTO START OF BUFFER AREA.
DLEN,	0			/LENGTH OF INDEX.
DINDEX,	0			/STARTING BLOCK OF INDEX.
	POP			/RESTORE FBLOCK
	JMS I	DDNAME		/LOOKUP NAME.
	JMP I	DDFOUND		/NAME EXISTS. GO ELSEWHERE.
	JMS I	DYGLEN		/NO NAME. GET D LEN.
	ISZ	COUNT		/BOP BY 1 TO OFFSET FOR FIRST ENTRY
	TAD	DPOINT		/SET UP AUTO1
	DCA	AUTO1		/TO POOINT TO DIRECTORY.
DYLOOP,	JMS I	DYPAST		/GO TO NEXT ENTRY.
	TAD I	AUTO1		/GET FIRST LETTERS OF NAME.
	TAD	M5757		/IS IT FREE
	SNA CLA
	JMP	DYGOOD		/YEP. PLACE IT HERE
	ISZ	COUNT		/NO GOOD, ANY MORE TO CHACK?
	JMP	DYLOOP		/YEP. GO BACK
	NO			/NO ROOM FOR NEW NAME.
DYGOOD,	TAD	AUTO1		/SET UP MOVE TO DIRECOTRY OF NAME
	DCA	.+3		/NAME PLACE IN DIRECTORY.
	MOVE			/MOVE NEW NAME INTO DIRECTORY.
	FNAME
	0
	4
	PFOUR			/NOW FILL IN SPACES WITH 5757S
	TAD	AUTO1		/POINTER TO SOURCE BLOCKS
	DCA	.+3
	MOVE			/NOW MOVE IN 5757 S
	L5757
	0
	4
	JMS I	DYBACK		/POINT TO START OF NAME
/
/
DREENT,	TAD	FWHAT		/DFOUND ALSO COMES HERE. IS IT INPUT OR OUTPUT???
	TAD	L7777		/1=INPUT,2=OUTPUT
	SNA			/IS IT INPUT
	NO			/YES. NO NAME. DISPLAY "NO"
	TAD	L7777		/IS IT "2"
	SZA
	SYSERR			/NO. INTERNAL PIP ERROR. FOR DEBUGGING ONLY.
	TAD	FTYPE		/SOURCE=1,BINARY=2
	TAD	L7777		/IS IT A 1
	SNA
	JMP	DSOURCE		/YES. SOURCE
	TAD	L7777		/IS IT2. (BINARY)
	SZA
	SYSERR			/NEITHER. SYSTEM ERROR
	PTWO			/BINARY. BOP PAST SOURCE.
DSOURCE,	TAD	L4		/GO PAST NAME.
	TAD	AUTO1		/SET AUTO2 TO BLOCK NUMBER POINTER.
	DCA	AUTO2
/
/
/
/		ROUTINE TO FIND VACANT SPACE IN THE DIRECTORY
/
DLOOK,	TAD	CLOWER		/GET LOWER LIMIT OF SYSTEM.
	DCA	DFIRST		/THATS WHERE WE LL START CHECKING.
DLOOP1,	TAD	DFIRST		/GET START OF BLOCKS WE RE NOW CHECKING
	TAD	FSIZE		/FIND OUT HOW BIG WE WANT THEM.
	CLL CMA IAC		/13 BIT NEGATE, EXCEPT FOR LINK.
	TAD	CLOWER		/DO WE GO OVER INTO SYSTEM?
	SZA SNL CLA		/NOW REASON FOR NO CML ABOVE.
	JMP	DNO1		/YEP. GO DOWN AND TRY NEXT.
	JMS I	DDCHECK		/CHECK TO SEE IF ANY OF THESE BLOCKS ARE OCCUPIED.
	JMP	DNO1		/YEP, THEY ARE. GO DOWN AND TRY NEXT.
	TAD	DFIRST		/FOUND ROOM. 
	TAD	FSIZE		/GET DISTANCE FROM CENTER OF SYSTEM.
	CIA
	TAD	CLOWER
	IAC			/1 MORE FOR ADDITION OVERSHOOT.
	DCA	DDIS1		/DISTANCE FOR SYSTEM.
	JMP	DDO2		/NOW CHECK OTHER SIDE.
DNO1,	TAD	DFIRST		/BLOCKS WON T FIT.
	CIA			/CAN WE TRY FARTHER FROM SYSTEM.
	TAD	ELOWER		/ADD LOWER LIMIT OF DEVICE.
	SNA CLA			/ARE WE AT BOTTOM NOW?
	JMP	DBAD1		/YEP. NO ROOM HERE IN THIS SIDE.
	MONE			/ROOM LEFT. BOP DOWN DFIRST AND TRY AGAIN.
	TAD	DFIRST
	DCA	DFIRST		/A LITTLE FARTHER FROM SYSTEM THIS TIME.
	JMP	DLOOP1		/GO BACK AND TRY AGAIN.
/
DBAD1,	MONE			/NO ROOM ON BOTTOM . SET DISTANCE TO MAX.
	DCA	DDIS1
/
DDO2,	CLA CLL			/NOW EW LL CHECK TO UPPER TO SEE IF IT FITS.
	TAD	CUPPER		/GET UPPER PART OF SYSTEM.
	DCA	DFIRST		/FOR FIRST ISZ CORRECTION.
/
DLOOP2,	ISZ	DFIRST		/WE LL TRY NEXT BLOCK.
	SKP			/WOW. QUITE A DEVICE HE S GOT THERE. 4 RF08 S IT MUST BE.
	JMP	DBAD2		/BUT STILL NO ROOM ON TOP.
	TAD	EUPPER		/GET THE UPPER LIMIT OF THE DEVICE.
	CLL CML CMA		/13 BIT COMP , -1
	TAD	DFIRST		/WILL WE OVERFLOW DEVICE LIMITS.
	TAD	FSIZE		/WHEN WE ADD IN LENGTH.
	SZA SNL CLA
	JMP	DBAD2		/NO ROOM LEFT ON TOP END.
	JMS I	DDCHECK		/CHECK TO SEE IF BLOCKS ARE FREE.
	JMP	DLOOP2		/NOT FREE. GO BACK AND TRY AGAIN.
	TAD	CUPPER		/FREE. GET DISTANCE.
	CIA
	TAD	DFIRST
	DCA	DDIS2		/AND SAVE IT.
	JMP	I	DDFIG		/GO CALCULATE WHICH ONE IS CLOSER [LOWER HALF OR UPPER HALF]
/
/
DBAD2,	MONE			/NO ROOM ON UPPER HALF.
	DCA	DDIS2		/SET DISTANCE TO A MAXIMUM.
	JMP I	DDFIG		/GO FIGURE OUT WHICH ONE IS CLOSER.
/
/
DDIS1,	0		/LOWER DEVICE DISTANCE
DDIS2,	0		/UPPER DEVICE DISTANCE FROM DESIRED FILE.
DDCHECK,	DCHECK			/POINTER
DDFIG,	DFIG
DDNAME,	DNAME
DDFOUND,	DFOUND
DYGLEN,	DGLEN
DYPAST,	DPAST
DYBACK,	DBACK
/
/
/
/
/
/
/
/
/
	EJECT
	*2600
/
/				MORE OF THE DIRECTORY LOOKUP ROUTINES.
/
/
/
/
/
/
DFIG,	TAD I	DDDIS1
	IAC			/IS LOWER HALF OK??
	SNA CLA
	JMP	D1NOG		/NO ROOM IN LOWER HALF.
	TAD I	DDDIS2		/HOW ABOUT THE UPPER HALF?
	IAC
	SNA CLA
	JMP	D1CLOSE		/LOWER HALF IS CLOSER BECAUSE NO UPPER HALF.
	TAD I	DDDIS1		/BOTH THERE. GET LOWER DISTANCE.
	CLL CML CMA IAC		/13 BIT NEGATE
	TAD I	DDDIS2		/GET UPPER DISTANCE.
	SZL CLA			/WHICH IS CLOSER.
	JMP	D2CLOSE		/UPPER IS CLOSER.
/
D1CLOSE,	MONE			/-1 FOR ADDITION ERROR
	TAD	FSIZE		/RECREATE ORIGINAL BLOCK NUMBER
	TAD I	DDDIS1
	CIA
	TAD	CLOWER		/WE VE GOT THE ORGINAL BLOCK NUMBER NOW.
DCOM,	DCA	FBNUM		/TELL CALLING PROGRAM ABOUT IT.
	TAD	FBNUM		/NOW PLACE IT IN DIRECTORY.
	DCA I	AUTO2
	TAD	FSIZE		/ALSO THE SIZE IN THE DIRECOTRY.
	DCA I	AUTO2
	MOVE			/NOW SET UP THE WRITING OF THE DIRECTORY.
	DPOINT-1
	DWRITE+1
	4
	PUSH			/PUSH DOWN F BLOCK
DWRITE,	WRITE		/WRITE DIRECTORY, WITH MOVED IN  ARGUEMENTS.
	0
	0
	0
	0
	POP			/POP UP FBLOCK
DDEXIT,	TAD I	DDYRECT		/GET CALLING ADDRESS
	DCA	TEMP		/STORE IT
	JMP I	TEMP		/EXIT TO USER.
/
D1NOG,	TAD I	DDDIS2		//CHECK IF ROOM ON TOP HALF.
	IAC
	SNA CLA			/ROOM?
	NO			/NO ROOM ON DEVICE FOR FILE.
D2CLOSE,	TAD	DFIRST		/GET THE LAST BLOCK CHECKED.
	JMP	DCOM		/AND THATS IT. PLACE IN DIRECTORY.
/
/
/
/
DCHECK,	0			/CHECKS TO SEE IF BLOCKS OCCUPIED BY DFIRSR ARE FREE
	MONE
	TAD I	DDPOINT		/SET AUTO1 TO POINT TO START OF DIRECTORY
	DCA	AUTO1		/IN CORE.
	JMS I	DDGLEN		/GET LEN OF DIRECTORY
DLOOP3,	TAD I	AUTO1		/GET FIRST WORD OF A NAME IN THE DIRECTORY.
	TAD	M5757		/IS IT A GOOD NAME???
	SNA CLA
	JMP	DBLANK		/NO. SKIP PAST IT.
	ISZ	AUTO1
	ISZ	AUTO1
	ISZ	AUTO1		/SKIP PAST REST OF NAME.
	ISZ	AUTO1		/AND ALSO STARTING BLOCK OF SOURCE
	TAD I	AUTO1		/IS THERE ANY SOURCE(LENGTH=POSITIVE)
	SPA CLA
	JMP	DNOS		/NO SOURCE
	JMS I	DDTHERE		/YEP. CHECK IT OUT.
DNOS,	ISZ	AUTO1		/SKIP PAST BINARY BLOCK
	TAD I	AUTO1		/GET BINARY LENGTH
	SPA CLA			/BINARY THERE?
	JMP	DBLANK		/NO BINARY
	JMS I	DDTHERE		/BINARY THERE. CHECK FOR INTERFERENCE.
/
DBLANK,	JMS I		DDPAST		/SKIP TO NEXT DIRECTORY ENTRY
	ISZ	COUNT		/ARE WE ALL DONE WITH THE DIRECTORY?
	JMP	DLOOP3		/NO. GET NEXT ENTRY
	ISZ	DCHECK		/YES. SKIP PAST NEXT CALLING STATEMENT AND EXIT.
	JMP I	DCHECK		/GOODBYE. AND GOOD LUCK.
/
/
/
/
/
DGLEN,	0			/ROUTINE GETS LENGTH OF DIRECTORY AND STORES IT IN -COUNT.
	TAD	ILEN		/GET INDEX LENGTH.
	RTL
	RTL
	RAL			/MULTIPLY BY 32 (32 ENTRIES PER BLOCK.
	AND	L7740		/CHOP AWAY CRAP.
	CIA
	DCA	COUNT		/AND STORE NEGATED IN COUNT.
	JMP I	DGLEN		/RETURN TO CALLER.
/
DPAST,	0			/ROUTINE SETS AUTO1 TO POINT TO NEXT NAME IN DIRECTORY.
	TAD	AUTO1
	AND	L7770		/LOGICAL OPERATION----    AUTO1.OR.7
	TAD	L7
	DCA	AUTO1		/AND PUT BACK.
	JMP I	DPAST
/
DBACK,	0			/ROUTINE BACKSPACES 1 DIRECTORY ENTRY.
	JMS	DPAST		/MOVE TO END OF THIS NAME
	TAD	AUTO1
	TAD	M10
	DCA	AUTO1		/AND DOP DOWN BY 10 (1 DIRECTORY ENTRY)
	JMP I	DBACK
/
/
/
DTHERE,	0			/CHECKS JUST ONE DIRECTORY ENTRY FOR BEING WITHIN THE SPECIFIED LIMITS.
	MONE
	TAD	AUTO1		/BOP BACK THE AUTO REG.
	DCA	TEMP3		/AND PLACE IT AWAY
	TAD I	TEMP3		/RETRIEVE STARTING BLOCK NUMBER
	CLL CML CMA IAC		/13 BIT NEGATE.
	TAD	DFIRST		/ADD IN DESIRED STARTING BLOCK.
	SNA
	JMP I	DCHECK		/SAME. BLOCK IS TAKEN. EXIT.
	SNL CLA			/ARE WE PAST DFIRST.
	JMP	DFBIGR		/NO. DFIRST IS BIGGER.
	TAD I	TEMP3		/YEP.  LETS SEE IF WE MISS IT.
	CLL CML CMA
	TAD	DFIRST		/DOES DFIRST+FSIZE INCROACH ON OUR TERRITORY.
	TAD	FSIZE
	SNL CLA			/????
	JMP I	DCHECK		/YEP. CAN T PUT IT HERE.
	JMP I	DTHERE		/IT FITS. 
/
DFBIGR,	TAD I	TEMP3		/WE RE BEFORE DFIRST. 
	ISZ	TEMP3		/POINT TO FILE LENGTH NOW.
	TAD I	TEMP3		/ADD OUR LENGTH IN
	CLL CMA IAC
	TAD	DFIRST		/DO WE OVERFLOW INTO DFIRST???
	SZA SNL CLA
	JMP I	DCHECK		/WE CERTAINLY DO.
	JMP I	DTHERE		/ NOPE. WE RE  CLEAR.  RETURN TO CHECK AGAIN.
/
/
/
DDDIS1,	DDIS1			/POINTER TO LOWER DISTANCE FROM SYSTEM
DDDIS2,	DDIS2			/POINTER TO UPPER DISTANCE FROM SYSTEM
DDYRECT,	DYRECT		/POINTER TO ENTRY
DDPOINT,	DPOINT		/POINTER TO BUFFERS
DDGLEN,	DGLEN			/POINTER TO GET NUMBER OF DIRECTORY ENTRIES ROUTINE.
DDTHERE,	DTHERE		/POINTER TO BLOCK CHECKER
DDPAST,	DPAST			/POINTER TO ROUTINE TO GO TO NEXT ENTRY.
/
/
/
/
/
/
/
/
/
	EJECT
	*3000
/
/				SOME MORE OF THE DIRECTORY LOOKUP ROUTINES.
/
/
/
/
/
DFOUND,	TAD	FWHAT		/NAME ALREADY IN DIRECTORY. GET WHETHER INPUT OR OUTPUT FILE.
	TAD	L7777		/1=INPUT,2=OUTPUT
	SNA
	JMP	DDIN		/IT S INPUT.
	TAD	L7777		/IS IT OUTPUT?
	SZA
	SYSERR			/NOT 1 OR 2. SOMETHING HAS BLOWN.
	TAD	FTYPE		/1=SOURCE,2=BINARY
	TAD	L7777		/IS IT SOURCE
	SNA
	JMP	DZAP		/YEP. ZAP OUT BLOCKS FROM DIRECTORY.
	TAD	L7777		/BINARY???
	SZA
	SYSERR
	PTWO			/BINARY FILE. ADD TWO TO BYPASS SOURCE
DZAP,	TAD	L4		/BOP PAST NAME
	TAD	AUTO1		/GET POINTER NOW
	DCA	AUTO1
	TAD	L5757		/BLANK OUT THE BLOCK NUMBER
	DCA I	AUTO1		/	(EITHER TO POINTER TO SOURCE OR BINARY)
	PUSH			/PUSH DOWN FBLOCK SO "REPLACE" WONT BLOW IT.
	TAD	AUTO1		/NOW GET THE AUTO LENGTH POINTER.
	DCA	AUTO3		/AND PLACE IN A TEMPORARY AUTO.
	TAD I	AUTO3		/IF SIGN BIT OF LENGTH ON THEN NO SOURCE OR BINARY.
	SMA CLA			/DO WE WANT TO REPLACE????
	REPLACE			/YEP. DISPLAY REPLACE MESSAGE.
	POP			/HE S ANSWERED AN "R". NOW REPLACE FBLOCK.
	TAD	L5757		/NOW ZAP OUT THE LENGTH.
	DCA I	AUTO1		/BY PLACING IN SOME 5757 S.
	PUSH			/NOW PUSH DOWN SO THAT WE WILL REMEMBER IT.
	JMS I	DDBACK		/BACKSPACE TO BEGINNING OF NAME.
	JMP I	.+1		/WE WANTS IT REPLACED.
	DREENT			/REENTRY FOR REPLACING THE FILE
/
/
DDIN,	TAD	FTYPE		/IT AN INPUT FILE. GET THE MODE.
	TAD	L7777		/1=SOURCE,2=BINARY
	SNA
	JMP	DDT		/IT SOURCE
	TAD	L7777		/MAYBE IT S BINARY
	SZA
	SYSERR			/UGH. PIP HAS BLOWN.
	PTWO			/IT S BINARY. MOVE PAST SOURCE.
DDT,	TAD	L4		/PUSH PAST NAME.
	TAD	AUTO1		/RESET POINTER
	DCA	AUTO1
	TAD I	AUTO1		/GET BLOCK NUMBER
	DCA	FBNUM		/AND STORE AWAY.
	TAD I	AUTO1		/GET SIZE OF FILE
	SPA			/IS IT OK?
	NO			/NO.  DISPLAY "NO" MESSAGE.
	DCA	FSIZE		/YEP. ITS THERE. STASH AWAY.
	JMP I	.+1		/NOW EXIT FROM DYRECT.
	DDEXIT
/
/
/
/
	DNAME,	0			/LOOKS UP NAME IN THE DIRECTORY.
	TAD I	DNPOINT		/GET STARTING ADDRESS FOR THE NAME LOOKUP.
	TAD	L7777		/AC MAY NOT CONTAIN ZERO FOR SOME SPECIAL CALLS.
	DCA	AUTO1		/PLACE IN AUTO1
	JMS I	DNGLEN		/GET LENGTH
	TAD I	DNPOINT		/GET STARTING ADDRESS OF DIRECTORY
	DCA	TEMP4		/STORE AWAY.
	TAD I	TEMP4		/GET FIRST WORD. IS IT "5757"
	TAD	M5757
	SNA CLA
	JMP	DOK		/IT S THERE. ALL IS WELL
	ISZ	DNAME		/DESIRED NAME NOT THERE BECAUSE NO DIRECTORY.
	TAD	COUNT		/MULTIPLY COUNT BY 8
	RTL
	RAL			/BECAUSE THERE ARE 8 WORDS PER
	AND	L7770		/DIRECTORY ENTRY
	DCA	COUNT
	TAD	L5757		/MAKE IT A GOOD DIRECOTORY.
	DCA I	AUTO1		/FILL IT UP
	ISZ	COUNT		/ALL DONE?
	JMP	.-3		/NOPE
	JMP I	DNAME		/YEP. ALL DONE.
/
/
/
DOK,	JMS I	DNPAST		/PUSH PAST PRESENT NAME.
	TAD I	AUTO1		/GET FIRST WORD OF NEW NAME.
	CIA
	TAD	FNAME		/A MATCH?
	SZA CLA
	JMP	DNOT		/NO. TRY NEXT
	TAD I	AUTO1		/AND SO ON DOWN UNTIL IT FAILS OR A MATCH IS MADE.
	CIA
	TAD	FNAME+1
	SZA CLA
	JMP	DNOT
	TAD I	AUTO1
	CIA
	TAD	FNAME+2
	SZA CLA
	JMP	DNOT
	TAD I	AUTO1
	CIA
	TAD	FNAME+3
	SZA CLA
	JMP	DNOT
	JMS I	DNBACK		/A MATCH SET AUTO1 AND EXIT.
	JMP I	DNAME
/
/
DNOT,	ISZ	COUNT		/FINISHED CHECKING ALL?
	JMP	DOK		/NO. MORE TO GO.
	ISZ	DNAME		/NOT THERE. PUSH BACK EXIT LOCATION
	JMP I	DNAME		/AND EXIT.
/
/
/
/
/
DDBACK,	DBACK			/POINTER TO BACKSPACE ROUTINE
DNBACK=DDBACK			/A SLIGHT OVERSIGHT.
DNPOINT,	DPOINT		/POINTER TO BUFFERS
DNGLEN,	DGLEN			/GET NUMBER OF ENTRIES ROUTINE
DNPAST,	DPAST			/ADVANCE POINTER TO NEXT NAME ROUTINE
/
/
/
/
/
NODIS,	0			/THIS ROUTINE DISPLAYS A "NO"
	DISPLAY			/ISSUE DISPLAY COMMAND
	NONODI			/MY OUTPUT CRAP
	GETL			/IS THERE A CHAR THERE?
	JMP	NODIS+1		/NO. REDISPLAY
	JMP	NODIS+1		/YEP. BUT ITS NTO A CONTROL CHAR, SO IGNORE.
/
NONODI,	LEFT+340		/ABOUT CENTER OF THE SCREEN
	BOTTOM+340
	TEXT	"FNO\"		/A SIMPLE MESSAGE.
/
/
/
REPDIS,	0
	PUSH			/STORE AWAY FBLOCK
	DECODE			/GET A LINE
	DISREP			/REPLACE MESSAGE
	TAD	FTYPE		/GET REPLY
	TAD	M322		/IS IT AN "R"
	SZA CLA
	JMP	REPDIS+2		/NOPE. TRY AGAIN.
	POP			/RESTORE FBLOCK
	JMP I	REPDIS		/AND RETURN.
/
/
DISREP,	LEFT+200		/ABOUT THE CENTER
	TOP-200			/GOOD ENOUGH
	TEXT	"FREPLACE?
 
 
HR --- REPLACE\"
/
/
/
/
/
/
/
/
/
/
/
/
	EJECT
/
/
/
/
/			COPY ROUTINE:
/				OVERLAPS IN 3200 FROM PREVIOUS PAGE.
/
/
/
/
/
/		GENERAL CALL:
/
/
/	COPY
/
/
/
/		COPIES FSIZE BLOCKS FROM  INUNIT,INBLOCK
/			TO OUTUNIT,OUTBLOCK
/			AND TO MORE UNITS DEPENDING ON THE VALUE OF "OUTNUM".
/			OUTNUM SHOULD BE 7777 FOR 1 TAPE COPY.
/
/
/
/
/
CCOPY,	0			/MAIN ENTRY
	TAD	INUNIT		/GET INPUT UNIT
	DCA	CINU		/AND PLACE IN READ CALL
	TAD	INBLOCK		/GET INPUT STARTING BLOCK
	DCA	CINB		/AND STORE IN READ BLCOK
	TAD	OUTBLOCK		/GET THE OUTPUT STARTING BLOCK
	DCA	COUTB		/AND LEAVE THAT IN WRITE
	TAD	FSIZE		/GET THE NUMBER OF BLOCKS TO COPY
	DCA	CSIZE		/AND STORE THAT AWAY.
/
CPLOOP,	TAD	OUTUNIT		/GET THE ORIGINAL OUTPUT UNIT.
	DCA	COUTU		/AND PLACE I N  WIRTE OUT UNIT.
	TAD	OUTNUM		/GET NUMBER OF UNITS ITS GOING TO
	DCA	CCOUNT		/PLACE IN TEMPORARY COUNTER.
	TAD	CSIZE		/GET NUMBER OF BLOCKS LEFT.
	SNA			/ALL DONE???
	JMP I	CCOPY		/YES
	CLL CML CMA IAC		/13 BIT NEGATE.
	TAD	BNUM		/NUMBER OF BUFFERS AVAILABLE.
	SNL SZA CLA		/MORE TO GO THEN BUFFERS ALOLOW?
	JMP	CSMALL		/NO. BUFFERS BIGGER.
	TAD	BNUM		/GET BUFFER SIZE.
	DCA	CINS		/STASH IN READ.
	TAD	BNUM
	DCA	COUTS		/STASH IN WRITE.
	JMP	CCOM		/GO DO READ-WRITE
/
CSMALL,	TAD	CSIZE		/GET NUMBER LEFT.
	DCA	CINS		/STASH IN INPUT SIZE.
	TAD	CSIZE
	DCA	COUTS		/AND OUTPUT SIZE.
/
CCOM,	READ			/READ IN CORECT NUMBER OF BLOCKS.
CINU,	0			/INPUT UNIT.
	BUFFER			/POINTER TO BUFFERS.
CINS,	0			/NUMBER OF RECORDS TO BE READ IN.
CINB,	0			/STARTING BLOCK NOW OF READ.
CCMORE,	WRITE			/NOW WRITE IT OUT.
COUTU,	0			/OUTPUT UNIT
	BUFFER			/BUFFER POINTER
COUTS,	0			/NUMBER OF RECORDS.
COUTB,	0			/0STARTING RECORD NUMBER.
	ISZ	COUTU		/BOP UP TO NEXT OUTPUT UNIT
	ISZ	CCOUNT		/MORE UNITS TO WRITE ON??
	JMP	CCMORE		/YEP. GO BACK AND WRITE ON NEXT.
/
/
/
	TAD	CINS		/GET THE INPUT SIZE
	TAD	CINB		/ADD  THE BLOCK NUMBER
	DCA	CINB		/AND UPDATE BLOCK NUMBER.
	TAD	COUTS		/GET THE OUTPUT SIZE.
	TAD	COUTB		/ADD THE COUTPUT SIZE.
	DCA	COUTB		/AND UPDATE IT.
	TAD	CINS		/GET THE NUMBER OF RECORDS JUST TRANSFERRED.
	CIA			/AND SUBTRACT IT FROM
	TAD	CSIZE		/THE TOTAL TRANSFERR
	DCA	CSIZE		/AND STORE AWAY.
	JMP	CPLOOP		/GO BACK AND DO SOME MORE.
/
/
/
/
CSIZE,	0			/CURENT NUMBER OF BLOCKS GOING.
CCOUNT,	0			/TEMPORAY COUNTER FOR THE UNITS.
/
/
/
LLEDER,	0			/GENERATES LEADER OR TRAILER
	TAD	M212		/ABOUT 130 CHARACTERS OF LEADER
	DCA	COUNT
	TAD	L200
	AUXOUT			/PUT OUT LEADER
	ISZ	COUNT		/ALL DONE?
	JMP	.-3		/NOPE, DO MORE.
	JMP I	LLEDER		/ALL DONE. EXIT
/
/
/
HHPUSH,	0			/HIGH FBLOCK SAVE.
	MOVE			/MOVE FBLOCK TO A SAFE PLACE
	FSIZE
	HHTEMP
	FNAME+3-FSIZE+1
	JMP I	HHPUSH
/
/
HHPOP,	0			/RESTORES FBLOCK FROM HIGH PLACE
	MOVE
	HHTEMP
	FSIZE
	FNAME+3-FSIZE+1
	JMP I	HHPOP
/
/
HHTEMP,	0/HIGH SAVE AREA
	*HHTEMP+FNAME+3-FSIZE		/KEAVE ROOM FOR FBLOCK
	0000			/LAST WORD OF SAVE AREA.
/
/
/
/
TTAPE,	0			/SETS UP TO USE TAPE LIMITS FOR DIRECTORY LOOKUP.
	MOVE			/MOVE IN CORRECT POINTERS
	TTTSET
	INDEX
	CUPPER-INDEX+1
	TAD	FUNIT		/GET THE UNIT
	AND	L7		/SET UP FOR LINC TAPE
	DCA	FUNIT
	MONE			/SET FOR 1 COPY
	DCA	OUTNUM
	JMP I	TTAPE		/AND RETURN
/
/
TTTSET,	TINDEX			/START OF TAPE INDEX BLOCK
	TILEN		/LENGTH OF TAPE INDEX
	TLOWER		/LOWEST BLOCK NUBMER ON DEVICE
	TUPPER		/HIGHEST BLOCK NUMBER ON THE DEVICE
	TSYSLOWER			/LOWER LIMIT OF SYSTEM
	TSYSUPPER			/LAST BLOCK USED BY SYSTEM
/
/
/
/
TTYPUT,	0			/TTY OUTPUT ROUTINE
	DCA	TTAPE		/STASH AWAY WHILE DOING CHECK.
	CHECKIO			/TEST FOR MAYBE A CONTROL Z
	6041			/IS IT FREE?
	JMP	.-2		/NOPE. CHECK AGAIN.
	TAD	TTAPE		/GET IT AGAIN.
	6046			/YEP. GOOD BYE.
	CLA
	JMP I	TTYPUT		/THATS ALL
/
/
/
/
/
/
/
/
	EJECT
/
/
/
/
/
/			END OF    P  I  P  2.
/
/
/
/
/			SAVE THE SYMBOLS FOR       P    I    P    3.
/
/
/
/
/
/
/
/
	SAVSYM	2
/
/
/
/
/
/
	EJECT



Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with.  I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation. 

PDP-8 Home Page   PDP-8 Site Map   PDP-8 Site Search