File SPIP.PA (PAL assembler source file)

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

/ STAR PIP FOR OS/8 (DMK)


/******************************************************
/
/  STAR PIP FOR OS/8
/
/  WRITTEN BY DAVID M. KRISTOL, SUMMER, 1972
/
/  PROGRAM PERMITS PDP-10 - TYPE TRANSFERS
/   WITH INPUT FILENAMES OF THE FORM:
/	* , *.* , NAME.* , AND *.EXT
/
/  OPTIONS:
/	/D	DELETE OUTPUT FILES BEFORE
/		TRANSFER (LIKE PIP)
/	/T	USE TODAY'S DATE INSTEAD OF
/		ORIGINAL CREATION DATE
/	/V	INVERT SENSE OF DIRECTORY SEARCH
/		(USE FILES WHOSE NAMES ARE NOT FOUND)
/	/R	REMOVE INPUT FILES FROM INPUT
/		DEVICE AFTER TRANSFER
/	/N	SAME AS /R, BUT DON'T TRANSFER FILES
/	/U	TRANSFER LIKE REGULAR PIP
/	/P	CHAIN TO PIP AFTER COMPLETION
/	$	RETURN TO MONITOR AFTER COMPLETION
/
/******************************************************
/
/  CORE LAYOUT
/	FIELD 0
/		200-6577	/IMAGE MODE BUFFER
/		6600-7177	/INPUT HANDLER
/		7200-7577	/OUTPUT HANDLER
/
/	FIELD 1
/		0-1777	/RESERVED FOR USR
/		2000-4777	/PROGRAM
/		5000-6177	/TRANSFER LIST:  SPACE
/				/FOR 160 FILES
/		6200-7577	/HALF A DIRECTORY
/
/******************************************************


/CORE LAYOUT: BUF=200 /FIELD 0 IHNDB=6600 /TO 7177 OHNDB=7200 /TO 7577 TLEN=IHNDB-BUF&7400%400 /BLOCKS PER TRANSFER DIRE=6200 /TO 7577. 3 BLOCKS /MUST BE >4000 (SEE GETSEG) TENTRY=240 /NUMBER OF SLOTS IN TRANSFER /LIST TABLE TRNSL1=-4^TENTRY+DIRE /ALIGN WITH 'DIRE'
OPT1=7643 /CD OPTION WORDS OPT2=7644 OPT3=7645 MDATE=7666 /FIELD 1 DATE DCB=7760 /FIELD 1 (DEVICE CONTROL TABLE) USR=200 ZZZ=0 /FOR FILL-INS FIELD 1 XR1=10 XR2=11 /FOR ERRORS CDP=20 /POINTER TO CD INPUT STRING DIREP2=21 /POINTER TO FOUND DIRECTORY ENTRY DIREC1=22 /FILE LENGTH FOR FOUND FILE OTRANS=23 /OUTPUT DEVICE HANDLER ADDRESS; /IF 0, HANDLER HAS NOT BEEN LOADED ITRANS=24 /INPUT DEVICE HANDLER ADDRESS TRNSP1=25 /POINTER TO TRANSFER LIST OUTDEV=26 /PRESENT OUTPUT DEVICE # CMPRP1=27 /HELP OUT 'CMPRS' CMPRP2=30 /SAME DCBPTR=31 /POINT AT DCB ENTRY FOR OUTDEV TRNSC2=32 /# OF FILES TRANSFERRED FOR /PRESENT REQUEST *2000 STRPIP, NOP /PROGRAM START/RESTART JMS I (7700 /ALLOW FOR CHAIN 10 /USRIN TAD (JMP ALPHA-1 DCA STRPIP /RESET FOR FUTURE CALLS JMS I (USR 12 /INQUIRE ABOUT DSK: DSKDEV=.+1 DEVICE DSK;0 HLT /NO DSK:!? DCA CTLCFL /0 ^C FLAG ALPHA, JMS I (USR /MAIN PROGRAM LOOP 5 /CALL CD 5200 /SPECIAL MODE TAD I (7600 /OUTPUT FILE AND (17 /JUST GET DEVICE # SNA /WAS THERE ONE? TAD DSKDEV /NO. USE DSK: DCA OUTDEV /SAVE OUTPUT DEVICE # TAD OUTDEV TAD (DCB-1 DCA DCBPTR /POINT AT DCB ENTRY STL RTR /2000 AND I DCBPTR /CHECK READ-ONLY BIT SZA CLA /SET? JMP BADOUT /ILLEGAL OUTPUT DEVICE DCA DIOWI /ZERO DIRECTORY WRITE FLAG DCA DIOSEG /FORCE READING DIRE DCA OTRANS /SO OUTPUT HANDLER WILL /BE FETCHED DCA INDEV /CLEAR SO WE KNOW NO DEVICE /IN USE TAD (7605 /POINT AT FIRST INPUT DCA CDP BETA, JMS CTLCCK /SAFE TO RETURN TO MONITOR HERE /IF ^C HAS BEEN TYPED TAD I CDP /OTHERWISE, GET INPUT SNA CLA /IS THERE ONE? JMP DELTA /NO JMS SETUP /YES. SET EVERYTHING UP JMS CTLCCK /CHECK FOR ^C STL RTR /2000 AND I (OPT2 /CHECK N OPTION SZA CLA /SET? JMP GAMMA /YES. DON'T CHECK /U TAD (10 AND I (OPT2 /CHECK U OPTION SZA CLA /SET? JMP EPSLON /YES. DO 'USUAL MODE' GAMMA, JMS SEARCH /NO. LOOK UP NAME JMP GAMMA1 /NAME NOT FOUND JMS CTLCCK /CHECK FOR ^C JMS LSTSUB /FOUND. ADD TO TRNSL1 ISZ TRNSP1 /FUDGE JMS DELFIL /DO /D DELETION NOW, IF /REQUIRED JMP GAMMA /CONTINUE THIS PASS GAMMA1, TAD I (TRNSL1 /IS THERE A FIRST ENTRY IN /TRANSFER TABLE SNA CLA /WELL?? JMP NOTFND /NO SUCH FILE(S) STL RTR /2000 AND I (OPT2 /CHECK N OPTION SZA CLA /SET? JMP GAMMA2 /YES. SKIP ENTERS AND TRANSFER JMS PASS2 /PERFORM ENTER/CLOSE PAIRS JMS PASS3 /DO FILE TRANSFER GAMMA2, JMS CMPRS /COMPRESS DIRECTORY IF REQUIRED JMP BETA /LOOK FOR ANOTHER INPUT DELTA, JMS DIOW /WRITE OLD DIRECTORY, IF /NECESSARY IAC /THEN, PREPARE TO JMS BKPT /CLEAR BREAKPOINT JMS CTLCCK /CHECK FOR ^C TAD (400 AND I (OPT2 /CHECK P OPTION SNA CLA /SET? JMP DELTA2 /NO IAC /YES JMS I (USR /1 IS SYS: 2 /LOOKUP PIP 0 JMP DELTA3 /NO PIP! RETURN TO MON. TAD .-3 /START BLOCK DCA DELTA1 DCA I (OPT1 /CLEAR OPTIONS SO PIP DCA I (OPT2 /WON'T DO ANYTHING DCA I (OPT3 /BUT LOOK AT USER DCA I (7600 DCA I (7617 /0 INPUT AND OUTPUT SIDES JMS I (USR 6 /CHAIN DELTA1, ZZZ /NO RETURN DELTA2, STL RAR /4000 AND I (7642 /CHECK FOR ALT MODE SNA CLA /SET? JMP ALPHA /NO. BACK TO THE OLD GRIND DELTA3, CIF CDF 0 /USER'S WISING UP! JMP I (7600 /BYE BYE!!
PAGE EPSLON, TAD (TRNSL1-1 /COME HERE FOR 'USUAL MODE' DCA XR1 /SET POINTER FOR 'TRNSFR' TAD (TRNSL1 DCA TRNSP1 /THIS ONE FOR 'LSTSUB' EPSL1, JMS SEARCH /SEEK NAME IN TABLE JMP EPSL2 /NO MORE FOUND JMS EPSLS1 /CHECK FOR ^C JMS LSTSUB /SAVE FOUND GOODIES JMS DELFIL /DELETE IF REQUIRED TAD DIREP2 /POINTER TO NAME DCA .+3 TAD DIREC1 /FILE LENGTH JMS ENTFIL /ENTER FILE ZZZ DCA I TRNSP1 /SAVE RETURNED START BLOCK IN /LIST ISZ TRNSP1 /HERE'S WHY THERE'S A FUDGE /IN 'GAMMA' SNL /OPEN OKAY? JMP EPSL1 /NO. DON'T DO ANYTHING WITH /THIS FILE JMS EPSLS1 /CHECK FOR ^C ISZ XR1 /SKIP PTR TO DIRE JMS TRNSFR /MOVE FILE, USING XR1 1 /CLEAR BKPT, PERMIT ^C TO /TAKE EFFECT JMS EPSLS1 /CHECK FOR ^C AGAIN JMS CLOFIL /CLOSE FILE JMS EPSLS1 /CHECK FOR ^C JMP EPSL1 /DO NEXT EPSL2, TAD I (TRNSL1 /FIRST TABLE ENTRY SZA CLA /IS THERE ONE? JMP GAMMA2 /YES. GOOD JMP NOTFND /FILE NOT FOUND EPSLS1, .-. /CHECK FOR ^C FOR EPSLON JMS CTLCSK /^C TYPED? JMP MONRT1 /YES. RETURN THRU THERE JMP I EPSLS1 /NO. SETUP, .-. /SUBROUTINE TO SET UP STUFF TAD I CDP CIA TAD INDEV /COMPARE NEW INPUT DEVICE WITH /LAST ONE SZA CLA JMS DIOW /IF DIFFERENT, MUST WRITE DIREC. /NOW, BEFORE HANDLER RUNS AWAY. /OTHERWISE, AS I FOUND OUT THE /HARD WAY, DIREC. FOR FIRST DEVICE /WOULD GET WRITTEN ON SECOND TAD I CDP /GET DEVICE AGAIN ISZ CDP /GET NEXT INPUT DCA INDEV /SAVE STL RTR /2000 AND I (OPT2 /CHECK N OPTION SZA CLA /SET? JMP SETU0 /YES. DON'T COMPARE DEVICES TAD INDEV /COMPARE INDEV CIA TAD OUTDEV /WITH OUTDEV, REJECT IF = SNA CLA JMP ILLDEV /ILLEGAL DEVICES SETU0, TAD (INDEV DCA XR1 /PREPARE TO MOVE REQUESTED NAME DCA SPLTI1 /CLEAR INDICATOR OF * TAD CDP /IMPROVE ERROR MESSAGES DCA INFILP /SAVE PTR TO CD STRING JMS SPLTCH /CHECK FOR SPLAT (*) JMS SPLTCH /AGAIN JMS SPLTCH /AGAIN. ILLEGAL USES ARE FLAGGED /IN SPLTCH CMA TAD SPLTI1 /MAKE 1 OR 2 INTO 0 OR 1 DCA NAMFLG /SET NAMFLG, IF NAME IS * DCA SPLTI1 /CLEAR INDICATOR JMS SPLTCH CMA TAD SPLTI1 /DO SAME FOR EXTENSION DCA EXTFLG TAD INDEV+1 /CHECK FOR 0 FILENAME SZA CLA JMP .+3 /LEAVE THINGS AS THEY ARE ISZ EXTFLG /WOULD HAVE RETURNED THESE ISZ NAMFLG /FLAGS AS 0. SET BOTH TO /LOOK LIKE *.* TAD (TRNSL1-1 /TABLE OF TRANSFER REQUESTS DCA XR1 TAD (-TENTRY^4 /ENTRIES ARE 4 WORDS DCA SETUC1 /COUNT FOR CLEARING DCA I XR1 ISZ SETUC1 JMP .-2 TAD (TRNSL1 DCA TRNSP1 /SET UP LIST PTR DCA TRNSC2 /0 # OF FILES TRANSFERRED, THIS /INPUT REQUEST DCA TRNSER /ERROR FLAG USED BY 'CMPRS' TAD (SRCH1 DCA SRCHS1 /INITIALIZE SEARCH JMS BKPT /SET BREAKPOINT TAD (IHNDB+1 DCA SETU1 /ALLOW TWO PAGE TAD INDEV JMS I (USR 1 SETU1, ZZZ JMP FETHND /FETCHING INPUT HANDLER TAD SETU1 /GET HANDLER ENTRY DCA ITRANS /SAVE ADDRESS JMP I SETUP SETUC1, 0 INFILP, 0 /PTR TO PRESENT CD INPUT
PAGE ENTFIL, .-. /ENTER FILE IN OUTPUT /AC HAS FILE LENGTH, /ARG 1 IS PTR TO DIRE DCA ENTFC1 /SAVE COUNT JMS OHNDLD /MAKE SURE HANDLER IS HERE TAD I ENTFIL /GET DIRE PTR ISZ ENTFIL DCA ENTFT1 /SAVE. 'CLOFIL' USES THIS /LATER TAD ENTFT1 TAD (4 DCA ENTFP1 /POINT AT DATE, IF ANY TAD (20 AND I (OPT2 /CHECK T OPTION SZA CLA /SET? JMP ENTF1 /YES. USE 'TODAY' TAD I (DIRE+4 /NO. EXTRA WORDS? SZA CLA TAD I ENTFP1 /YES. GET DIRE DATE SKP /NO. USE 0 ENTF1, TAD TDATE /'TODAY' DCA I (MDATE /SAVE IN MONITOR DATE CELL JMS BKPT /SET BREAKPOINT TAD I DCBPTR AND (7770 /CLEAR TENTATIVE FILE INDICATION DCA I DCBPTR /THIS IS A FUDGE, IN CASE ^C IS /TYPED DURING THIS BKPT. /OTHERWISE, FILE MAY BE ENTERED, /AND ATTEMPT TO RE-ENTER WILL /CAUSE AN ERROR TAD ENTFT1 DCA ENTF2 /SET UP 'ENTER' PTR DCA ENTF2+1 /CLEAR WORD TO GET AROUND BUG IN /PS/8 AND OS/8 (FIRST RELEASE), /WHERE CONTROL RETURNS TO ENTF2+1 /ON 'OUT OF ROOM', INSTEAD OF TO /ENTF2+2 TAD ENTFC1 /GET COUNT TAD (400 SMA SZA CLA />=400? TAD ENTFC1 /NO. RETRIEVE CIA /GIVES + COUNT OR 0 CLL RTL RTL /MAKE WAY FOR DEV. TAD OUTDEV JMS I (USR 3 /ENTER ENTF2, ZZZ /PTR TO NAME ZZZ JMP NOROOM /OUT OF OUTPUT ROOM TAD .-2 /GET TRUE AVAILABLE LENGTH CLL CIA TAD ENTFC1 /CHECK AGAINST REQUESTED /LENGTH SNL CLA /ENOUGH ROOM?: THIS CHECK /MADE TO ACCOMMODATE FILES />400 BLOCKS, WHICH NORMAL PIP /WON'T HANDLE JMP NOROOM /OUT OF OUTPUT ROOM TAD ENTF2 /GET START BLOCK /LINK = 1 MEANS OK ENTRY JMP I ENTFIL /RETURN IT /COME HERE AFTER PRINTING 'NOROOM' ERROR ENTF3, ISZ TRNSER /SET ERROR FLAG TO DISABLE /N /AND /R SO INPUT FILES WON'T /DISAPPEAR ON ERROR CMA CLL /LINK IS SIGNAL JMP I ENTFIL /RETURN 7777 'TO' BLOCK, WHICH /IS ILLEGAL ON ALL DEVICES /EVEN RS08! /0 LINK MEANS ERROR ENTERING ENTFT1, 0 /USED BY CLOFIL ENTFC1, 0 /USED BY CLOFIL ENTFP1, 0 CLOFIL, .-. /CLOSE PRESENTLY OPEN FILE TAD ENTFT1 DCA CLOF1 /SAVE FOR 'CLOSE' TAD ENTFC1 CIA /MAKE POSITIVE, DCA CLOF2 /AND SAVE FOR 'CLOSE' JMS BKPT TAD OUTDEV JMS I (USR 4 /CLOSE CLOF1, ZZZ /PTR CLOF2, ZZZ /LENGTH HLT /ONLY POSSIBLE IF OUTDEV=0, OR NO /TENTATIVE FILE EXISTS, BOTH /OF WHICH POSSIBILITIES ARE NIL JMP I CLOFIL DELFIL, .-. /DELETE FILE POINTED AT BY /DIREP2 STL RTR /2000 AND I (OPT2 /CHECK N OPTION SZA CLA /SET? JMP I DELFIL /YES. /D NOT ALLOWED JMS OHNDLD /MAKE SURE OUTPUT IS HERE TAD (400 AND I (OPT1 /CHECK D OPTION SNA CLA /SET? JMP I DELFIL /NO. DO NOTHING MORE JMS BKPT /YES TAD DIREP2 /GET PTR DCA .+4 /SET UP DELETE TAD OUTDEV /OUTPUT DEVICE # JMS I (USR 4 /CLOSE (DELETE WITH 0 LENGTH) ZZZ 0 NOP /NO PROBLEM IF NOT FOUND JMP I DELFIL OHNDLD, .-. /LOAD OUTPUT HANDLER IF NOT IN /CORE TAD OTRANS /ADDRESS SZA CLA /ANYTHING THERE? JMP I OHNDLD /YES. ALREADY LOADED TAD (OHNDB+1 /NO. ALLOW TWO PAGE DCA OHND1 JMS BKPT TAD OUTDEV JMS I (USR 1 /FETCH HANDLER OHND1, ZZZ JMP FETHND /FETCHING HANDLER TAD OHND1 DCA OTRANS /SAVE ADDRESS JMP I OHNDLD CRLF, .-. TAD (215 JMS TYO TAD (212 JMS TYO TSF /WAIT FOR FLAG JMP .-1 /SO WE DON'T MESS UP CD JMP I CRLF
PAGE SPLTCH, .-. /CHECK FOR VARIOUS POSSIBILITIES /OF * IN NAME: /*0 *X X* ** XX , /WHERE X IS SOME OTHER CHAR TAD I CDP ISZ CDP /GET NAME WORD CIA /MAKE - FOR CHECKS DCA SPLTT1 /SAVE TAD SPLTT1 DCA I XR1 /SAVE FOR LATER USE TAD SPLTT1 TAD ("* /CHECK FOR * IN LOWER BYTE AND (77 /(ALWAYS ILLEGAL) SNA CLA /FIND X*? JMP ILLSYN /ILLEGAL SYNTAX CMA /NO TAD SPLTI1 /WHAT STATE ARE WE IN (NO, NOT /MASSACHUSETTS!) /0 : INITIAL: *0, X0, XX LEGAL /1 : NO * : 00, X0, XX LEGAL /2 : * SEEN : 00 ONLY LEGAL SNA /LOOKING FOR XX? JMP SPLT2 /YES SMA CLA /NO. INITIAL STATE? JMP SPLT4 /NO. MUST SEE 00 TAD SPLTT1 /YES TAD ("*^100 /LOOKING AT *0? SZA CLA JMP SPLT2 /NO. COULD BE X0 OR XX IAC /YES. WILL SET INDICATOR SPLT1, IAC /SET INDICATOR FOR STATE 1 DCA SPLTI1 JMP I SPLTCH /RETURN SPLT2, TAD SPLTT1 /STATE 1. CHECK FOR * IN /UPPER BYTE CIA AND (7700 /MASK JUST UPPER BYTE TAD (-"*^100 /SUBTRACT * SZA CLA /* IN UPPER BYTE? JMP SPLT1 /NO JMP ILLSYN /ILLEGAL SYNTAX SPLT4, TAD SPLTT1 /CHECK FOR 00 SNA CLA JMP I SPLTCH /OK JMP ILLSYN /ILLEGAL SYNTAX SPLTI1, 0 SPLTT1, 0 DIOR, .-. /READ DIRECTORY HALF TAD INDEV /START TO FORM UNIQUE CODE CLL RTL RAL /MAKE ROOM FOR BLK # TAD I DIOR /SHOULD BE 1 OR 4 DCA DIORT1 /GIVES DEVICE & BLOCK KEY TO /DIRECTORY SEGMENT TAD DIORT1 TAD DIOSEG /COMPARE WITH OLD SNA CLA /WANT PRESENT DIRE. HALF? JMP I DIOR /YES. ALREADY IN CORE JMS DIOW /WRITE OLD DIRE IF REQUIRED TAD DIORT1 /SAVE KEY CIA /NEGATIVE DCA DIOSEG TAD I DIOR /GET BLOCK # DCA DIORBL JMS BKPT /BREAKPOINT HERE CIF 0 JMS I ITRANS /ON INPUT DEVICE 610 /3 BLOCKS, FIELD 1 DIRE DIORBL, ZZZ JMP DRERR /READING DIRECTORY DCA DIOWI /CLEAR WRITE REQUEST ISZ DIOR JMP I DIOR DIORT1, 0 DIOSEG, 0 /PRESENT ENCODED SEGMENT IN CORE DIOW, .-. /WRITE DIRE SEG. IN CORE /IF SO INDICATED TAD DIOWI /WRITE REQUEST INDICATOR SNA CLA /NEED TO WRITE? JMP I DIOW /NO JMS BKPT /YES. BREAKPOINT SET TAD DIORBL DCA .+5 CIF 0 JMS I ITRANS /WRITE ON INPUT DEVICE 4610 /3 BLOCKS, FIELD 0 DIRE ZZZ JMP DWERR /WRITING DIRECTORY DCA DIOSEG /MARK SEGMENT GONE DCA DIOWI /CLEAR WRITE REQUEST JMP I DIOW DIOWI, 0 /WRITE REQUEST FLAG: #0 : PLEASE WRITE PASS2, .-. /PERFORM PASS 2: ENTER /AND CLOSE ALL FILES TAD (TRNSL1-1 DCA XR1 PSS21, JMS CTLCSK /HAS ^C BEEN TYPED? JMP PSS22 /YES. TAD I XR1 /NO. IS THERE A NEXT FILE? SNA JMP I PASS2 /NO. DONE PASS2 JMS GETSEG /YES. READ SEG., GET PTR DCA .+3 /STORE FOR ENTER TAD I XR1 /GET COUNT JMS ENTFIL ZZZ ISZ XR1 /SKIP 'FROM' DCA I XR1 /SAVE AS 'TO' BLOCK SZL /ENTRY OKAY? JMS CLOFIL /YES. CLOSE FILE NOW!!! JMS CTLCSK /HAS ^C BEEN TYPED? SKP /YES JMP PSS21 /NO PSS22, DCA I XR1 /ZERO LIST ENTRY, SO ONLY THOSE /FILES THAT HAVE BEEN OPENED AND /CLOSED SO FAR WILL BE MOVED JMP I PASS2 /THEN, RETURN IMMEDIATEDLY PIP, FILENAME PIP.SV /FOR DELTA
PAGE TRNSFR, .-. /TRANSFER FILE POINTED AT BY /XR1 (THREE WORDS); ARG1 HAS /BKPT STATUS DCA TRNSI1 /CLEAR TRANSFER COMPLETE TAD I XR1 /GET LENGTH DCA TRNSC1 / SAVE FILE LENGTH TAD I XR1 /FROM BLOCK DCA FRMBLK TAD I XR1 /TO BLOCK CMA /CHECK FOR 7777 SNA /WAS 'TO' 7777? JMP I TRNSFR /YES. MEANS FILE WAS OPENED, BUT /THERE WAS NOT ENOUGH ROOM. /DON'T TRANSFER CMA /NO. RESTORE BLOCK # DCA TOBLK ISZ TRNSC2 /MARK ONE MORE FILE TRANSFERRED TRNS1, CLL /FOR TEST TAD (TLEN /LENGTH OF TRANSFER (IN BLOCKS) TAD TRNSC1 /COMPARE WITH BLOCKS REMAINING SNL CLA /LAST TIME? JMP TRNS2 /NO ISZ TRNSI1 /YES. SET INDICATOR TAD TRNSC1 /USE REMAINDER CIA /AS # OF BLOCKS TO COPY SKP TRNS2, TAD (TLEN /USE MAX. # OF BLOCKS FOR /TRANSFER CLL RTR /R6R=R7L RTR RTR DCA FRMCW /SAVE READ CONTROL WORD STL RAR /4000 TAD FRMCW DCA TOCW /WRITE CONTROL WORD TAD I TRNSFR /GET BKPT ON/OFF INDICATION JMS BKPT /SAVE PLACE, IN CASE OF NEFARIOUS /^C TYPER! CIF 0 JMS I ITRANS /INPUT HANDLER FRMCW, ZZZ BUF FRMBLK, ZZZ JMP TRNS5 TRNS3, TAD I TRNSFR /GET BKPT ON/OFF INDICATION JMS BKPT /BREAKPOINT AGAIN CIF 0 JMS I OTRANS /WRITE TOCW, ZZZ BUF TOBLK, ZZZ JMP TRNS6 TRNS4, TAD TRNSI1 /FINISHED YET? SZA CLA JMP I TRNSFR /YES. RETURN TAD FRMBLK /NO. TAD (TLEN /UPDATE FROM BLOCK DCA FRMBLK TAD TOBLK TAD (TLEN DCA TOBLK /AND TO BLOCK TAD (TLEN TAD TRNSC1 DCA TRNSC1 /UPDATE COUNT JMP TRNS1 /CONTINUE TRANSFER TRNS5, ISZ TRNSER /INDICATE ERROR TO /DISABLE /N OR /R JMP RERR1 /READ ERROR WHILE TRANSFER TRNS6, ISZ TRNSER /INDICATE ERROR TO DISABLE / /N OR /R JMP WERR1 /WRITE ERROR WHILE TRANSFER TRNSC1, 0 TRNSI1, 0 SRCHS3, .-. /PART OF 'SEARCH': /COMPARE WORD IN DIRE WITH /CD WORD SZA /COUNT PROVIDED? DCA SRCHC1 /YES. USE IT JMS SRCHS2 /GET DIRE WORD TAD I DIREP4 /AND USER'S ISZ DIREP4 ISZ SRCHC1 /HANDY-DANDY KEEP TRACKER NOP /BEWARE OF SKIPS, AND THE /FRUMIOUS BANDERSNATCH SNA CLA /MATCH OK? JMP I SRCHS3 /YES. RETURN CLL /NO. LINK IS SIGNAL TAD (4 AND I (OPT2 /CHECK V OPTION SZA CLA /SET? STL /YES. INDICATE FORCED MATCH TAD SRCHC1 /AMOUNT TO CORRECT PTR CMA SNL /DO WE MATCH? JMP SRCH8 /NO. UPDATE PTR. TAD DIREP1 /YES. UPDATE PTR HERE DCA DIREP1 JMP SRCH7 /AND PRETEND TO MATCH SRCHC1, 0 DIREP4, 0 CTLCSK, .-. /SKIP IF ^C NOT TYPED TAD CTLCFL /GET ^C FLAG SNA CLA /^C TYPED? ISZ CTLCSK /NO JMP I CTLCSK CTLCCK, .-. /RETURN TO MONITOR IF ^C TYPED TAD CTLCFL /^C FLAG SNA CLA /UP? JMP I CTLCCK /NO TAD ("^ JMS TYO JMP CTLCTP /^C TYPE ERROR MONRT1, TAD ("^ /FUDGE TYPE-OUT JMS TYO TAD ("C JMS TYO MONRET, IAC JMS BKPT /RESTORE BKPT'ED CORE JMS TYOWT /WAIT FOR FLAG, IF ANY CDF CIF 0 JMP I (7600 /RETURN TO MONITOR CTLCFL, 0 /^C FLAG. #0 IF ^C WAS TYPED
PAGE / / THIS ROUTINE IS USED TO SET AND REMOVE TRAPS / IN SYSTEM AREA. NECESSARY TO INTERCEPT ^C / AND MONITOR AREAS BECAUSE OF THE WAY FILES / ARE CREATED AND MOVED IN THIS CRAZY PROGRAM BKPT, .-. SNA CLA /SET OR REMOVE? JMP BKPT1 /SET BREAKPOINT TAD BKPTFG /BREAKPOINT SET ALREADY? SNA CLA JMP I BKPT /NO. NONE TO REMOVE JMS BKPTS2 /PUT FIELD 0 AREA, DATE BACK DCA BKPTFG /CLEAR FLAG JMP I BKPT BKPT1, TAD BKPTFG /SET BREAKPOINT SZA CLA /SET ALREADY? JMP I BKPT /YES JMS BKPTS1 /NO. SET UP POINTERS TAD (BKPTL2 /LIST OF STUFF TO MOVE DCA BKPTP3 BKPT2, CDF 0 TAD I BKPTP2 CDF 10 /MOVE FIELD 0 TO 1 DCA I BKPTP1 ISZ BKPTP1 TAD I BKPTP3 ISZ BKPTP3 /AND MY STUFF CDF 0 /TO FIELD 0 DCA I BKPTP2 ISZ BKPTP2 ISZ BKPTC1 /DONE? JMP BKPT2 /NO CDF 10 /BACK TO THIS FIELD TAD I (MDATE /GET DATE DCA TDATE /SAVE AS TODAY'S DATE ISZ BKPTFG /SET BREAKPOINT FLAG JMP I BKPT /RETURN BKPTS1, .-. /SET UP BKPT POINTERS TAD (BKPTL1 DCA BKPTP1 TAD (7600 DCA BKPTP2 TAD (-7 /7 ITEMS DCA BKPTC1 JMP I BKPTS1 BKPTS2, .-. /MOVE FIELD 0 STUFF BACK JMS BKPTS1 TAD I BKPTP1 ISZ BKPTP1 CDF 0 DCA I BKPTP2 ISZ BKPTP2 CDF 10 ISZ BKPTC1 JMP .-7 TAD TDATE DCA I (MDATE JMP I BKPTS2 / / IF SOMEONE TYPES ^C, OR IF A MONITOR / ERROR OCCURS, CONTROL COMES HERE: / BKPT3, KSF /SOMETHING TYPED? JMP BKPT4 /NO. ASSUME MONITOR ERROR KCC /YES. ASSUME ^C. IGNORE TAD (207 /BELL JMS TYO /DINGALING USER! ISZ CTLCFL /SET ^C FLAG JMP I BKPT /RETURN TO STRPIP AT POINT /WHERE BKPT LAST CALLED BKPT4, JMS BKPTS2 /MONITOR ERROR. PANIC!!! /RESTORE FIELD 0 AREA CDF CIF 0 JMP I (7600 /AND GO TO MONITOR BKPTP1, 0 BKPTP2, 0 BKPTP3, 0 BKPTC1, 0 BKPTFG, 0 /1 IF BREAKPOINT IS SET TDATE, 0 /SAVED TODAY'S DATE BKPTL1, *.+7 /ROOM FOR FIELD 0 STUFF BKPTL2, 7605&177+5200 /'JMP 7605' TYOM3, -3;0;0 /FILLER BKPT3 CDF CIF 10 7604&177+5600 /'JMP I 7604' TYO, .-. /GOOD OLD TTY OUTPUT DCA TYOT1 JMS TYOWT TAD TYOT1 /GET CHAR AGAIN TLS CLA JMP I TYO TYOWT, .-. TAD TYOM3 /PRESERVE LINK DCA TYOC2 DCA TYOC1 TYOW1, TSF SKP JMP I TYOWT NOP NOP /DELAY ENOUGH FOR 8/E ISZ TYOC1 JMP TYOW1 ISZ TYOC2 JMP TYOW1 JMP I TYOWT /ASSUME NO FLAG TYOT1, 0 TYOC1, 0 TYOC2, 0 GETSEG, .-. /GET SEGMENT IN CORE, RETURN /TRUE PTR. ENTER WITH /TRNSL1 TYPE PTR STL RAR /FORM TRUE PTR, SEG TO LINK DCA GETST1 /SAVE SZL TAD (3 IAC /FORM PROPER BLOCK # DCA .+2 /SAVE FOR SUBROUTINE JMS DIOR /READ IF NECESSARY ZZZ TAD GETST1 /FETCH PTR FOR RETURN JMP I GETSEG GETST1, 0
PAGE SEARCH, .-. /DIRECTORY SEARCH ROUTINE JMP I SRCHS1 SRCHS1, .-. JMP I SEARCH SRCH1, JMS DIOR /READ FIRST DIRE HALF 1 /THAT'S WHAT THIS MEANS CMA /-1 OFFSET. (SEE SRCH2A) SRCH1A, DCA SRCHI1 /BLOCK OFFSET OF FIRST /BLOCK IN CORE CMA CLL RTL /-3 DCA SRCHC2 /# OF BLOCKS IN CORE JMP SRCH3 SRCH2, TAD DIREI3 /NEXT BLOCK FLAG SNA CLA /FINISHED DIRE? JMP I SEARCH /YES. RETURN ISZ SRCHC2 /NO. FINISHED STUFF IN CORE? JMP SRCH2A /NO JMS DIOR /YES. READ SECOND HALF 4 /WHICH BEGINS AT BLOCK 4 TAD (-4 /SET OFFSET JMP SRCH1A SRCH2A, TAD SRCHI1 /GET BLOCK OFFSET TAD DIREI3 /AND BLOCK WE WANT CLL RTR RTR RAR /R5R=R8L: *400 SRCH3, TAD (DIRE /FORM POINTER TO DIRE BLOCK DCA DIREP1 /POINTER TO DIRECTORY BLOCK CLL /FOR TEST TAD I DIREP1 /COUNT TAD (100 /MAKE VALIDITY CHECK SNL CLA /GOOD DIRE? JMP BADDIR /BAD DIRECTORY JMS SRCHS2 /YES DCA DIREC2 /NEXT WORD IS COUNT FOR SEGMENT JMS SRCHS2 DCA DIREBL /NEXT WORD IS FIRST BLOCK REFERENCED JMS SRCHS2 DCA DIREI3 /NEXT WORD IS FLAG FOR NEXT SEGMENT ISZ DIREP1 /SKIP TENTATIVE FLAG JMS SRCHS2 CMA /EXTRA WORDS FLAG DCA XTRAWD /SAVE -1 TO #-1 EXTRA WORDS FLAG SRCH4, TAD I DIREP1 /CHECK THIS ENTRY SNA CLA /EMPTY? JMP SRCH9 /YES. JUST UPDATE BLOCK TAD NAMFLG /NAMFLG SET? (AUTOMATIC MATCH) SNA CLA JMP SRCH5 /NO ISZ DIREP1 /YES. ISZ DIREP1 /SKIP NAME ISZ DIREP1 TAD (INDEV+1+3 /POINT AT .EXT DCA DIREP4 /FOR EXTENSION CHECK JMP SRCH6 SRCH5, TAD (INDEV+1 /SET UP FOR SRCHS3 DCA DIREP4 TAD (-5 /PASS COUNT JMS SRCHS3 JMS SRCHS3 JMS SRCHS3 SRCH6, TAD EXTFLG /NAME MATCHED. CHECK EXT. SZA CLA /EXTENSION FLAG SET? JMP SRCH6A CMA CLL RAL /NO. PASS COUNT (-2) JMS SRCHS3 /CHECK FOR .EXT MATCH SKP /OK, SO DON'T INCREMENT PTR SRCH6A, ISZ DIREP1 /SKIP OVER EXTENSION /EXTENSION MATCHED TAD (4 AND I (OPT2 /CHECK V OPTION SZA CLA /SET? JMP SRCH8 /YES. INVERT SENSE, TREAT /LIKE FAILURE SRCH7, TAD XTRAWD /NO. IAC TAD DIREP1 DCA DIREP2 /POINT AT COUNT TAD I DIREP2 SNA /#0? JMP SRCH8 /WAS TENTATIVE FILE. TREAT LIKE /FAILURE DCA DIREC1 /SAVE COUNT FOR LATER USE ISZ SEARCH /RETURN WITH A SKIP TAD DIREP1 TAD (-4 /POINT AT FIRST WORD DCA DIREP2 JMS SRCHS1 /EXIT THRU SRCHS1 SRCH8, TAD XTRAWD TAD DIREP1 DCA DIREP1 /UPDATE POINTER SRCH9, ISZ DIREP1 /FROM EMPTY ENTRY JMS SRCHS2 /GET COUNT WORD CIA TAD DIREBL /UPDATE BLOCK # DCA DIREBL ISZ DIREC2 /DONE SEGMENT? JMP SRCH4 /NO JMP SRCH2 /YES SRCHS2, .-. /USE THIS TO SAVE SOME SPACE TAD I DIREP1 ISZ DIREP1 JMP I SRCHS2 /RETURN DIRE WORD DIREP1, 0 /INTERNAL POINTER DIREI3, 0 /NEXT SEGMENT FLAG DIREC2, 0 /ENTRIES/SEGMENT COUNTER DIREBL, 0 /CURRENT BLOCK # REPRESENTED /BY PRESENT FILE XTRAWD, 0 /# OF EXTRA WORDS IN THIS DIRE. /SAVED AS 1'S COMP (-1=0 WORDS) NAMFLG, 0 EXTFLG, 0 SRCHC2, 0 /# OF BLOCKS IN THIS HALF TO DO SRCHI1, 0 /BLOCK OFFSET FOR FIRST BLOCK IN CORE INDEV, ZBLOCK 5 /FIRST WORD IS INDEV #, /2ND - 5TH ARE FILENAME, FRESH /FROM CD AND NEGATED
PAGE CMPRS, .-. /COMPRESS DIRECTORY, SQUEEZING /OUT ALL REFERENCED FILES, /ALL ABUTTING EMPTIES IN ANY /ONE BLOCK TAD (2100 AND I (OPT2 /CHECK N,R OPTION SNA CLA /SET? CMPRRT, JMP I CMPRS /NO. DON'T DO THIS /SERVE AS CROSS-PAGE RETURN JMS CTLCCK /CHECK FOR ^C TAD TRNSER /CHECK FOR ERRORS SZA CLA /HAVE THERE BEEN ANY? JMP I CMPRS /YES. DON'T DO DELETIONS TAD (TRNSL1 DCA CMPRP1 /POINT AT FIRST LIST ENTRY CMA CLL RAL /-2 TAD EXTFLG TAD NAMFLG SZA CLA /ARE BOTH FLAGS SET? JMP CMPR1 /NO CMA CLL RAL /-2 TAD INDEV /YES. CHECK INPUT DEVICE SMA SZA CLA /WAS IT 1 OR 2? JMP CMPR1 /NO TAD (CMPRM1-1 /YES. SYS OR DSK JMS CMPRS1 /WIPE OUT? CMA TAD INDEV /1 OR 2 SNA CLA TAD (CMPRM2-CMPRM3 TAD (CMPRM3-1 JMS CMPRS1 /DSK? OR SYS? JMS CRLF KSF /WAIT FOR RESPONSE JMP .-1 KRB TAD (-"Y /WAS IT 'Y' SNA CLA JMP .+5 /YES TAD (CMPRM5-1 /NO. JMS CMPRS1 /'NO' JMS CRLF JMP I CMPRS TAD (CMPRM4-1 JMS CMPRS1 /'YES' JMS CRLF CMPR1, CLA IAC AND I CMPRP1 /GET SEG. BIT CIA DCA CMPRI1 /SAVE INDICATOR CMPR2, TAD I CMPRP1 /GET NEXT LIST ENTRY SNA /DONE? JMP CMPR3 /ALMOST. REMOVE ANY /ENTRIES FIRST RAR /NO. PUT SEG. BIT IN LINK GLK /GET AGAIN TAD CMPRI1 /COMPARE WITH PRESENT SEG. /BEING LOOKED AT SZA CLA /SAME? JMP CMPR3 /NO. REMOVE STUFF IN THIS /SEG. BEFORE GETTING NEXT TAD I CMPRP1 /YES. GET PTR AGAIN JMS GETSEG /LAZY WAY TO ADJUST PTR, MAKE /SURE PROPER SEG. IS IN CORE DCA CMPRP2 /SAVE RETURNED PTR CMA /INDICATE DELETABLE FILE DCA I CMPRP2 /BY STORING 7777 IN FIRST WORD TAD (4 TAD CMPRP1 DCA CMPRP1 /UPDATE LIST PTR JMP CMPR2 /PROCEED TRNSER, 0 /RECORD OF # OF ERRORS /WHILE TRANSFERRING FILE /IF #0, DON'T DELETE INPUT FILES CMPRS1, .-. /SUBR. TO HELP OUT DCA XR1 TAD I XR1 /PAIR OF CHARS JMS PR2CH JMP I CMPRS1 JMP .-3 JMP .-4 CMPRM1, TEXT 'WIPE OUT ' CMPRM2, TEXT 'SYS?' CMPRM3, TEXT 'DSK?' CMPRM4, TEXT 'YES' CMPRM5, TEXT 'NO' LSTSUB, .-. /SUBR. TO PUT FOUND FILE INFO /INTO TRNSL1 IAC AND DIOSEG /WHICH SEGMENT? CLL RAR /PUT IN LINK TAD DIREP2 CML RAL /FORM STORABLE PTR DCA I TRNSP1 ISZ TRNSP1 TAD DIREC1 /GET FILE LENGTH DCA I TRNSP1 ISZ TRNSP1 TAD DIREBL /AND START BLOCK OF 'FROM' DCA I TRNSP1 ISZ TRNSP1 /LEAVE PTR AT 'TO' BLOCK JMP I LSTSUB
PAGE CMPR3, CMA CLL RTL /-3 DCA CMPRC2 /# OF BLOCKS PER DIRE HALF CMPR4, TAD (DIRE DCA CMPRP2 /PTR TO PLACE IN CORE TAD CMPRP2 DCA CMPRFM /KEEP PTR TO COUNT, SO IF /DIRE IS SHORTENED, /DELETIONS WILL BE NOTED TAD I CMPRFM /GET COUNT WORD ISZ CMPRFM DCA CMPRC1 /ENTRIES IN THIS BLOCK ISZ CMPRFM /SKIP BLOCK # TAD I CMPRFM ISZ CMPRFM DCA CMPRI2 /NEXT BLOCK # ISZ CMPRFM /SKIP TENTATIVE FLAG TAD I CMPRFM ISZ CMPRFM TAD (-5 /# OF WORDS TO MOVE FOR /NORMAL FILE ENTRY DCA CMPRI3 /SAVE TAD CMPRFM DCA CMPRTO /SET 'TO' PTR DCA MTFLG /CLEAR EMPTY FILE FLAG CMPR5, TAD MTFLG /GET BIT CLL RAR /PUT IN LINK TAD I CMPRFM /GET FIRST WORD OF ENTRY SNA /EMPTY? JMP CMPR9 /YES CMA /NO. CHECK FOR 7777 SNA CLA /WELL? JMP CMPR8 /YES SZL /NO. REGULAR ENTRY ISZ CMPRTO /INCREMENT TO IF WE WERE /PLAYING WITH EMPTIES TAD CMPRI3 /ITEMS TO MOVE DCA CMPRC3 TAD I CMPRFM ISZ CMPRFM DCA I CMPRTO ISZ CMPRTO ISZ CMPRC3 JMP .-5 CMPR6, DCA MTFLG /SET MTFLG ISZ CMPRC1 /DONE BLOCK JMP CMPR5 /NO TAD CMPRI2 /YES. CHECK FOR NEXT BLOCK SNA CLA /IS THERE ONE? JMP .+3 /NO ISZ CMPRC2 /ARE WE DONE THIS HALF? JMP CMPR7 /NOT YET. MORE TO DO TAD I CMPRP1 /YES. WAS LIST ENTRY 0? SZA CLA JMP CMPR1 /NO. PICK UP WHERE WE LEFT OFF JMP CMPRRT /AND RETURN CMPR7, TAD CMPRI1 /ANOTHER BLOCK TO DO SZA CLA /WHICH HALF? CMA CLL RTL /-3. SECOND TAD (-1 /GIVES BLOCK OFFSET OF FIRST /BLOCK IN CORE TAD CMPRI2 /ADD TO NEXT BLOCK CLL RTR RTR RAR /R5R=R8L: *400 JMP CMPR4 /DO NEXT BLOCK CMPR8, ISZ DIOWI /FILE TO DELETE. MARK /FOR WRITING TAD CMPRI3 /# OF WORDS CMA /WILL POINT AT COUNT TAD CMPRFM DCA CMPRFM /RESET FROM SKP CMPR9, ISZ CMPRFM /EMPTY. POINT AT COUNT SNL /EMPTY FLAG SET? JMP CMPR11 /NO ISZ DIOWI /YES. WE ARE REMOVING ONE FILE ISZ I CMPRP2 /BY INCREMENTING COUNT SKP /SHOULD NEVER SKIP HLT TAD I CMPRTO /GET PRESENT COUNT CMPR10, TAD I CMPRFM /COMBINE WITH NEW ISZ CMPRFM DCA I CMPRTO /SAVE EMPTY COUNT IAC /TO SET FLAG JMP CMPR6 /NOW IN EMPTY MODE CMPR11, DCA I CMPRTO /0 TO FIRST WORD ISZ CMPRTO JMP CMPR10 /MOVE COUNT CMPRC1, 0 CMPRC2, 0 CMPRC3, 0 CMPRI1, 0 CMPRI2, 0 CMPRI3, 0 CMPRTO, 0 /'TO' PTR CMPRFM, 0 /'FROM' PTR MTFLG, 0 /EMPTY FLAG: 1 MEANS EMPTY MODE PASS3, .-. /PERFORM PASS3: TRANSFER ALL /FILES TAD (TRNSL1-1 DCA XR1 /POINT AT TRNSL1 TAD I XR1 /DO ANOTHER? SNA CLA JMP I PASS3 /NO JMS TRNSFR /YES. INFO POINTED AT BY XR1 0 /DON'T ALLOW ^C TO BREAK IN JMP .-5

PAGE ERROR, .-. /GENERAL ERROR ROUTINE CSPACE, CLA CMA /USED AS CONSTANT (240) TAD I ERROR /GET PTR TO TEXT ISZ ERROR DCA XR2 ERR1, TAD I XR2 /GET FIRST TWO CHARS JMS PR2CH JMP ERR7 /ADD FINISHING TOUCH JMP ERR1 /REGULAR PRINT CMA /^ SEEN TAD I ERROR /GET TYPE WORD ISZ ERROR SNA /WAS IT 1? JMP ERR5 /YES. HANDLE INPUT # SMA CLA /WAS IT 0? JMP ERR6 /NO TAD I ERROR ISZ ERROR DCA ERRT1 /PTR TAD I ERRT1 ERR2, CLL RAL /GET READY DCA ERRT1 TAD (-4 DCA ERRC1 /4 DIGITS JMS ERRS2 /DRIVE OUT DIGITS ISZ ERRC1 /LAST ONE? SZA /NO. NON-ZERO? SKP /YES. PRINT IT JMP .-4 /NO. WAIT FOR NON-ZERO JMS ERRS3 /PRINT DIGIT JMS ERRS2 /GET NEXT DIGIT JMP .-2 /PRINT ALL THE REST ERRS3, .-. /PRINT DIGIT, CHECK FOR END TAD ERRSK1 /"0 JMS TYO /PRINT DIGIT TAD ERRC1 /COUNT SNA CLA /DONE YET? JMP ERR1 /YES ISZ ERRC1 /NO. INCR. COUNT ERRSK1, "0 JMP I ERRS3 ERRT1, 0 ERRC1, 0 ERR5, DCA ERRT1 /PRINT INPUT REQUEST # TAD ("# JMS TYO /PRINT # TAD CDP TAD (-7605 /INITIAL VALUE TAD (-5 /INCREMENT ISZ ERRT1 SMA SZA /FIND OUT WHICH ONE? JMP .-3 /NO CIA /YES. CORRECT POINTER TAD CDP DCA CDP /IN CASE IT'S USED LATER TAD ERRT1 /PICK UP SINGLE DIGIT JMP ERR2 /PRINT DIGIT ERR6, TAD I ERROR /GET PTR TO PTR ISZ ERROR DCA ERRT1 /PTR TO PTR TAD I ERRT1 DCA ERRT1 /SAVE PTR TO FILENAME JMS ERRS1 /PRINT FIRST TWO JMS ERRS1 /SECOND TWO JMS ERRS1 /THIRD TWO TAD I ERRT1 /GET EXTENSION SNA CLA /IS THERE ONE? JMP ERR1 /NO TAD (". /YES. PRINT . JMS TYO JMS ERRS1 /PRINT .EXT JMP ERR1 ERR7, JMS CRLF JMP I ERROR ERRS1, .-. /PRINT TWO FILENAME CHARS TAD I ERRT1 ISZ ERRT1 JMS PR2CH JMP I ERRS1 JMP I ERRS1 JMP I ERRS1 /ACCOUNT FOR ALL RETURNS PR2CH, .-. /PRINT TWO CHARS IN AC /RETURN +0 IF CHAR IS 0 / +1 IF REGULAR TWO CHARS / +2 IF ^ IS A CHAR SNA /SEE TWO 0'S? JMP I PR2CH /YES DCA PR2CT1 /NO TAD PR2CT1 CLL RTR RTR RTR JMS PR6BIT /PRINT 1 SIX BIT CHAR JMP I PR2CH /WAS 0 JMP PR2C1 /WAS ^ TAD PR2CT1 /PRINT SECOND CHAR JMS PR6BIT JMP I PR2CH /WAS 0 PR2C1, ISZ PR2CH /WAS ^ ISZ PR2CH /WAS REGULAR JMP I PR2CH PR2CT1, 0 PR6BIT, .-. /PRINT 6-BIT CHAR IN AC AND (77 SNA JMP I PR6BIT /RETURN +0 ON 0 TAD (-"^&77+7700 SNA /CHECK FOR ^ JMP PR6B1 /SAW IT. DON'T PRINT TAD ("^&77+240 /RESTORE CHAR, ADD 240 AND (77 TAD CSPACE /CREATE 8-BIT CHAR JMS TYO /PRINT ISZ PR6BIT /+2 ON NORMAL PR6B1, ISZ PR6BIT /+1 ON ^ JMP I PR6BIT
PAGE ERRS2, .-. /CARRY OVER FROM PREVIOUS PAGE TAD ERRT1 RAL RTL DCA ERRT1 TAD ERRT1 AND (7 JMP I ERRS2 /RETURN NEXT DIGIT /ERROR MESSAGE HANDLING BADOUT, JMS ERROR MBADOUT JMP ALPHA NOTFND, JMS ERROR MNOTFND 2;INFILP /PRINT FILENAME POINTED AT BY INFILP JMP BETA ILLDEV, JMS ERROR MILLDEV 1 /PRINT FILE # JMP BETA FETHND, JMS ERROR MFETHND 1 /PRINT FILE # JMP ALPHA NOROOM, JMS ERROR MNOROOM 2;ENTFT1 /PRINT FILENAME POINTED AT BY ENTFT1 1 /PRINT FILE # JMP ENTF3 ILLSYN, JMS ERROR MILLSYN 2;INFILP /PRINT FILENAME POINTED AT BY INFILP 1 /PRINT FILE # JMP BETA /PRINTING INPUT # CAUSES CDP TO BE CORRECTED MBADOUT, TEXT 'ILLEGAL OUTPUT DEVICE' MNOTFND, TEXT '^@ NOT FOUND' MILLDEV, TEXT 'INPUT=OUTPUT, INPUT ^@' MFETHND, TEXT 'ERROR FETCHING HANDLER, INPUT ^@' MNOROOM, TEXT 'NO ROOM FOR ^@, INPUT ^@' MILLSYN, TEXT '^@ IS AN ILLEGAL NAME, INPUT ^'
PAGE DRERR, JMS ERROR MDRERR 1 /PRINT FILE # JMP ALPHA DWERR, JMS ERROR MDWERR 1 /PRINT FILE # JMP ALPHA RERR1, JMS ERROR MRERR1 0;FRMBLK /PRINT VALUE IN FRMBLK (OCTAL) 1 /PRINT FILE # JMP TRNS3 WERR1, JMS ERROR MWERR1 0;TOBLK /PRINT VALUE IN TOBLK (OCTAL) 1 /PRINT FILE # JMP TRNS4 BADDIR, JMS ERROR MBADDIR 1 /PRINT FILE # JMP BETA CTLCTP, JMS ERROR MCTLCTP 0;TRNSC2 /PRINT VALUE IN TRNSC2 (OCTAL) 1 /PRINT FILE # JMP MONRET MDRERR, TEXT 'DIRECTORY READ ERROR, INPUT ^@' MDWERR, TEXT 'DIRECTORY WRITE ERROR, INPUT ^' MRERR1, TEXT 'ERROR READING BLOCK ^@ , INPUT ^' MWERR1, TEXT 'ERROR WRITING BLOCK ^@, INPUT ^@' MBADDIR, TEXT 'BAD DIRECTORY, INPUT ^' MCTLCTP, TEXT 'C^_^' $$$$$$$$$$$$$$$$$$$$$$$$



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