File SCROLL.12

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

/ THE SCROLL EDITOR

/	WRITTEN BY: DARRELL J. DUFFY
/ MODIFIED BY: CLYDE G. ROBY, JR. (VERSION 8 AND AFTER)
/ MODIFIED BY: TOM MCINTYRE, JIM VAN ZEE (VERSION 11+)

/	DJD	DECEMBER 29, 1971
/	TO PS/8	MARCH 9, 1972
/	FIRST COMPLETE VERSION APRIL 1, 1972
/	VERSION 1 RELEASE 2 APRIL 22, 1972
/	VERSION 1 RELEASE 3 APRIL 30, 1972
/	VERSION 1 RELEASE 4 MAY 26, 1972
/	VERSION 1 RELEASE 5 JULY 5, 1972
/	VERSION 6  NO RELEASE  JANUARY 13,1972
/	VERSION 7 MARCH 6, 1973
/	VERSION 8 RELEASE 1 SEPTEMBER 28, 1973
/	VERSION 8 RELEASE 2 OCTOBER 24, 1973
/	VERSION 9 JULY 24, 1974
/	VERSION 10 OCTOBER 16, 1974
/	VERSION 11 JUNE 2, 1976  (TMC)
/	VERSION 12 AUGUST 5, 1976  (JVZ)
/	VERSION 13 NOVEMBER 11, 1976 (TMC)
/THIS IS NOW A MARRIAGE OF VAN ZEE'S CHANGES AND OUR NEW AUTOTAB
/AND EXTENSION RECOGNITION CODE.
/

/	THIS IS THE VERSION AND RELEASE
/	KEEP THEM UPDATED!

	VERS1="1	/THIS IS THE VERSION (TENS DIGIT)
	VERS2="3	/THE UNITS DIGIT
IFNDEF	RELEASE	<RELEASE="0 /(INTERNAL WVU)>

IF1	<

IFNDEF	MACHINE	<MACHINE=1>
IFNDEF	KEYBOARD<KEYBOARD=1>

IFNDEF	CORE	<CORE=0>

IFDEF	VC8E	<VC8E=0>
IFNDEF	VC8E	<VC8E=1>

	>

	PDP12=1
	PDP8E=2
	TELETYPE=1

IFE	KEYBOARD-TELETYPE<KBDEV=6030>

	KBSF=KBDEV 1
	KBCC=KBDEV 2
	KBRS=KBDEV 4
	KBRB=KBDEV 6

IFN	CORE-12	<XB=10>
IFE	CORE-12	<XB=20>

/NUMBER OF LINES FOR FILES WITH LONG LINES
	LONGNM=3


PMODE PAGE 0 *10 X1, 0 /TEMP AUTOS X2, 0 BCP, 0 /CHAR POINTS FOR PLYG FCP, 0 XAD, 0 /XR FOR X AND Y COMMANDS & VC8E DSCMXR, 0 /USED IN DISPLAYING COMMAND LINE *20 BKDBLK, 0 /BLOCK NUMBERS FWDBLK, 0 FMINB, 0 /FILE LIMITS FMAXB, 0 INSINH, 0 /INSERT INHIBIT SWITCH A1, 0 /ADDRESS TEMPS A2, 0 CTR, 0 /COUNTER / CHAR CONTROL LOCATIONS BCF, 0 /FLAG BCA, 0 /ADDRESS BCC, 0 /COUNT FCF, 0 FCA, 0 FCC, 0 CURSOR, 0 /THE CHAR POINTER CHAR, 0 /CHARACTER LPSTPC, 0 /LINE OR PAGE STOP CHAR SIB, 0 /SHIFT INPUT BLOCK SOB, 0 /NOT SON OF B---H MNHDLA, 7607 /MAIN EDIT FILE HANDLER AIHDLA, 0 /AUX INPUT HANDLER AOHDLA, 0 /AUX OUTPUT HANDLER DEVNUM, 0 /DEVICE NUMBER FOR DECODED DEVICE MAINF, 0 /ZERO FOR NO MAIN EDIT FILE LCKSW, 0 /MAIN FILE LOCK SWITCH TBCHR, 0 /TEMP FOR AUTOTAB TBSWT, -1 /0=FORTRAN, 1=ASSEMBLER ECHOSW, 0 /ASSUME NO COMMAND LINE ECHO DTABFG, 4000 /TAB DISPLAY SWITCH CMDN, 0 /NUMERIC ARGS CMDSW, 0 /COMMAND DISPLAY SW CMDPTR, ALTIN3-1 /COMMAND STRING PTR DCDEV, ZBLOCK 2 /DEVICE NAME DFN, ZBLOCK 4 /FILE NAME DCDL, 0 /FILE LENGTH REQUEST ALTM, 233 /CONSTANT ALTMODE SINCE THERE ARE THREE MALTM, -233 ALTECH, "$-233 /CHANGED FOR CORRECT ALTMODE / MACROS PUSHF= JMS I . PUSHFX PUSHB= JMS I . PUSHBX POPFC= JMS I . POPFCX POPBC= JMS I . POPBCX PUSHBC= JMS I . PSHBCX MOVF= JMS I . MOVFX MOVFL= JMS I . MOVFLX MOVBL= JMS I . MOVBLX DELFC= JMS I . DELFCX DELBC= JMS I . DELBCX INSERT= JMS I . INSRTX CURSCH= JMS I . CURSHX WBKW= JMS I . WBKWX RFWD= JMS I . RFWDX WFWD= JMS I . WFWDX READ= JMS I . READX WRITE= JMS I . WRITEX ERROR= JMS I . ERRORX TYPE= JMS I . TYPEX CRLF= JMS I . CRLFX SORTJ= JMS I . SORTJX GETC= JMS I . GETCX TESTC= JMS I . TESTCX ERRORM= JMS I . ERROMX MAINGO= JMP I . MAIN CMDGO= JMP I . CMDDO EOLQ= JMS I . TBEOLQ FFLFQ= JMS I . LFORFF LOCKQ= JMS I . LOCKQX KEYQ= JMS I . KBCHK GETHND= JMS I . LHNDLR DECODE= JMS I . DECODX RELESE= JMS I . RELSEH DISMISS=JMS I . USROUT ONE= CLA IAC EOF= "Z-100 BUFC= 600 BUFL= BUFC^2%3 PLYG= 10 PLYGE= BUFC^4+PLYG BBUF= PLYGE ABUF= BBUF+BUFL AIBUF= ABUF+BUFL AOBUF= AIBUF+BUFL PAGE
/ INITIAL START UP START, TAD (VRSN-1 /START UP - GET SOMETHING USEFUL CHAIN, DCA X1 /CHAIN, USE INDEX REG. AS A FLAG TAD [CMDBUF-1 /SET TO DISPLAY VERSION NO. DCA CMDSW DCA MAINF /NO MAIN FILE INITIALLY JMS KILL /STRAIGHTEN OUT POINTERS ANY WAY TLS /START TTY MOVING IFE MACHINE-PDP12 < LINC ESF /SET SMALL CHAR SIZE FOR DISPLAY PDP > IFE MACHINE-PDP8E < IFE VC8E <DILC> /CLEAR ALL FLAGS, ENABLES, ETC. IFN VC8E <DINS> /SET NON-STORE MODE > VPRT, CDF CIF 10 /SET FIELD FOR VRSN & CHAIN TAD X1 SNA CLA JMP I CASEY /CHAIN, DO SOME INITIALIZATION ISZ CMDSW /ADVANCE POINTER TAD I X1 CDF CIF DCA I CMDSW /MOVE VERSION INFO TAD I CMDSW SZA CLA /AND START UP THE DISPLAY JMP VPRT MAIN, CLA TAD (DSPY /RESET FOR COROUTINES DCA DRTN MAIN2, JMS KBGET /GET A KEY DCA CMDSW /BLANK THE COMMAND LINE TAD CHAR SORTJ /KEYBOARD COMMANDS CMDCHR-1 CMDJMP-CMDCHR MAIN3, JMS KBRD /GO ECHO THE CHAR JMS TBINST /GO SAVE CHAR MAINGO CRIN, JMS KBRD /GO ECHO THE CHAR INSERT TAD [212 INSERT MAINGO / READ A KEYBOARD CHAR FOR MAIN KBRD, 0 TAD ECHOSW /CHECK ECHO SPA SNA CLA JMP KBRD1 TAD CHAR TAD [-215 SNA JMP .+4 /CRLF ON CR TAD [215 /REMAKE CHAR TYPE KSKP, SKP CRLF KBRD1, TAD CHAR JMP I KBRD /RETURN WITH CHAR IN ACC / RETURN A CHARACTER TO THE TERMINAL TYPEX, 0 DCA TYPEXC /SAVE CHAR TO TYPE JMS DGO /DISPLAY WHILE WAITING TSF JMP .-2 TAD TYPEXC /GET THE CHAR TAD MALTM /IS CHAR ALTMODE? SNA TAD ALTECH /YES, ECHO SPECIAL CHAR ($) TAD ALTM /NO, REGENERATE CHAR TLS CLA JMP I TYPEX / CHECK FOR A KEYBOARD INTERRUPT TYPEXC, KBCHK, 0 KBSF /OP CALLING? JMP I KBCHK /NO, RETURN .+1 ISZ KBCHK KBCC /YES, CLEAR KEYBOARD FLAG JMP I KBCHK /THEN RETURN .+2 / SUBROUTINE TO GET THE KEYBOARD CHARACTER KBGET, 0 JMS GETKEY SNA JMP KBGET+1 /IGNORE NULL CHARACTERS / ADJUST FOR UPPER/LOWER CASE TAD [-100 /CHECK FOR (A-Z) CLL TAD (-37 /PLUS A FEW OTHERS ... SHIFT, SKP / -> 'SNL' WHEN ACTIVE TAD (40 /ADD THE LOWER CASE OFFSET TAD [337 /AND RESTORE ALL MISSING BITS DCA CHAR /SAVE THE CHAR CODE JMP I KBGET CASEY, CHAINB /ONCE ONLY! TAD SHIFT /UPPER/LOWER CASE SHIFT AND KSKP /FOR ORDINARY KEYBOARDS TAD (SNL-SKP /ACTIVATED BY 'CTRL/K' DCA SHIFT /DURING TEXT OR COMMAND JMP I CASEY /INPUT. CASE, JMS CASEY /CTRL/K IN IMMEDIATE MODE MAINGO CMDCTK, JMS CASEY /DITTO DURING COMMAND INPUT JMP COMND2+1 GETKEY, 0 /LOWEST POSSIBLE KEYBOARD ROUTINE JMS DGO /WAIT WITH DISPLAY KBSF JMP .-2 KBRB /READ THE CHARACTER AND [177 /SET IN THE 200 BIT JMP I GETKEY /FOR THE SPECIAL "G" MODE OF INPUT INSRTG, GETC /GET THE TERMINATING CHAR AND [177 /STRIP THE PARITY CIA DCA TSTCG /SAVE FOR ENDING INSGLP, JMS GETKEY /BYPASS ALL CHECKING TAD TSTCG /EXCEPT OUR TERMINATOR SNA CLA CMDGO /DONE RETURN NOW KBRB /IT IS STILL IN THE HARDWARE BUFFER JMS TBINST /STICK IT IN THE FILE JMP INSGLP /AND CONTINUE TSTCG, 0 PAGE
/ COMMAND DECODER FOR THE EDITOR COMMND, ISZ CMDSW /COMMAND IN, DISPLAY DCA ITERFG /RESET ITERATION FLAG TAD (CMDBUF COMND0, DCA CMDPTR COMND2, DCA I CMDPTR /ZERO OUT NEXT POS. JMS KBGET /WAIT FOR KEY WHILE DISPLAYING TAD CHAR SORTJ /COMMANDS CLCHRS-1 CLJMPS-CLCHRS COMND3, JMS CMDSAV /SAVE CURRENT IF NOT CMD JMP COMND2 CMDPT, CMDSAV, 0 /SAVE CHAR IN COMMAND LINE SZA DCA CHAR /CHAR TO SAVE IN COMMAND LINE TAD CMDPTR TAD (-CMDEND SNA CLA JMP COMND2 /NO ROOM LEFT JMS KBRD /GO ECHO THE CHAR IF NECESSARY DCA I CMDPTR /SAVE IN BUFFER ISZ CMDPTR JMP I CMDSAV /RETURN CMDRUB, TAD CMDPTR TAD (-CMDBUF SNA CLA JMP CMDCTU /NOTHING TO DESTROY STA TAD CMDPTR JMP COMND0 /DELETE CHAR CMDALT, STA /CHECK FOR TWO ALTS TAD CMDPTR DCA CMDPT TAD I CMDPT /GET THE LAST CHAR ENTERED TAD MALTM SZA CLA JMP COMND4 /NOT YET TWO DCA CMDSW /DON'T DISPLAY TAD [CMDBUF-1 DCA X1 TAD ECHOSW /SHOULD WE ECHO AS WE FETCH? SPA CLA JMP CMDDOK /NO ECHO TAD ECHOSW SZA CLA CRLF /FULL ECHO, GIVE CR/LF BEFORE ECHOING CMDEXL, TAD I X1 /GET A CHAR SNA JMP CMDEX1 /GO OUTPUT A CRLF TYPE JMP CMDEXL /LOOP FOR MORE CHARS CMDEX1, CRLF /CR/LF COMBO AT END CMDDOK, TAD [CMDBUF-1] DCA CMDPTR CMDDO, JMS GETNMX /GET A NUMERIC ARG DCA CMDN /SAVE IT GETC AND [337 /UPPER OR LOWER CASE SORTJ DOCMDL-1 GOCMDL-DOCMDL TAD I CMDPTR /GET THE CHAR BACK SNA MAINGO TYPE ERRORM SIXBIT \IC\ COMND4, TAD ALTM /GET A REAL ALTMODE JMP COMND3 /SINCE MAGSAT GIVES US SOMETHING ELSE CMD215, TAD [215] JMS CMDSAV CMD212, TAD [212] JMS CMDSAV JMP COMND2 / CTRL/B DISPLAYS THE COMMAND BUFFER BLINK, ONE / CTRL/U DURING COMMAND INPUT CMDCTU, DCA CMDSW /NOTHING IN BUFFER MAINGO /COMMAND LINE DELETED / EXIT THE CURRENT EDIT FILE EXIT, 0 EXT1, DELFC /MOVE CHARS FORWARD JMP EXT2 /END OF FILE TAD CHAR PUSHB KEYQ /SEE IF WE WANT TO STOP JMP EXT1 /NO MAINGO /YES EXT2, TAD CHAR /MOVE EOF ALSO PUSHB EXT3, CLA STL TAD BCP TAD [-PLYG-BUFC+1 SZL SNA CLA JMP EXT4 DCA EXT6 /SAVE A ZERO TO CHECK JMS EXT5 /GO WRITE A BLOCK JMP EXT3 EXT4, TAD BCP /SAVE BCP FOR NO EXT RECOVERY DCA EXT6 TAD [PLYGE-1 /PAD BCP SO WBKW WON'T CROAK DCA BCP JMS EXT5 /WRITE OUT LAST BLOCK JMP I EXIT / SUBROUTINE TO WRITE A BLOCK OUT FOR EXIT EXT5, 0 /WRITE A BLOCK FOR EXIT TAD BKDBLK CLL CMA TAD FMAXB SNL CLA JMP EXT7 /OVER WRITE ATTEMPT UNABLE TO EXIT ISZ FWDBLK WBKW JMP I EXT5 EXT6, 0 /TEMP SAVE FOR RECOVERY EXT7, TAD EXT6 /REPLACE BCP IF WE MUST SZA DCA BCP JMS POPBX /REPLACE EOF ONE TAD FMAXB /SETUP NEW FWDBLK DCA FWDBLK ERRORM /SIGNAL NO EXIT CONDITION SIXBIT \EX\ PAGE
/THE BULK OF THE EDIT COMMANDS - THE DISPATCH ROUTINE IS WITH EEXTDO EXITC, TESTC "I;"T DCA CURSOR /HOME THE CURSOR IN CASE OP STOPS US TAD MAINF SZA CLA /IS THERE A FILE TO EXIT? JMS EXIT /EXIT THE MAIN FILE DCA MAINF JMS KILL /WE NOW DO NOT HAVE A MAIN FILE CMDGO /GO FOR NEXT COMMAND / EDIT MAKE A FILE TO EDIT EMAKE, TAD MAINF /DO WE ALREADY HAVE A FILE TO EDIT SZA CLA JMP EMERR DCA DCDL /ZERO THE LENGTH DECODE /SET UP DEV:NAM.EXT TAD DFN SNA CLA JMP EMERR /NO FILE NAME TAD DCDL /CHECK THE LENGTH SNA TAD C12 /IF NO LENGTH GIVEN, ASSUME 10(10) DCA EMCL /SET UP LENGTH TO CLOSE TAD MNHDLA /RELEASE MAIN HANDLER RELESE STA /DON'T RELEASE OTHERS GETHND /LOAD THE MAIN HANDLER DCA MNHDLA /SAVE ENTRY ADDRESS JMS DELETF /DELETE FILE IF ALREADY EXISTS TAD DFNX /SET POINTER TO FILE NAME DCA EMBLK TAD [-400 TAD DCDL /CHECK FOR MAX LENGTH SPA CLA TAD DCDL /SET UP LENGTH RTL;RTL AND [7760 TAD DEVNUM /GET DEVICE NUMBER CIF 10 JMS I [200 /USR STILL IN CORE 3 /ENTER EMBLK, 0 /FILE NAME PTR BECOMES BLOCK 0 /BECOMES LENGTH JMP EMERR1 /DISMISS USR AND SIGNAL ERROR TAD EMBLK /CHECK FOR NON DIRECTORY DEVICE SNA JMP EMERR1 /DISMISS AND ERROR DCA FMINB /SET UP BLOCKS STL /SET UP FOR 13 BIT ADD TAD DCDL /CHECK LENGTH TAD EMBLK+1 SNL SZA CLA /LINK IS CLEARED ON CARRY JMP EMERR1 /NOT LONG ENOUGH TAD DEVNUM CIF 10 JMS I [200 4 /CLOSE DFNX, DFN /POINTER TO FILE NAME EMCL, 0 /CLOSING LENGTH JMP EMERR1 /ERROR AND DISMISS DISMISS STA TAD EMCL TAD EMBLK DCA FMAXB JMS I [SETTAB /SET AUTOTAB FROM EXTENSION / STA /NOW WE HAVE A FILE ABORT1, DCA MAINF /ALSO ENTRY TO KILL CURRENT FILE KILL1, JMS KILL CMDGO KILLIT, TESTC /CHECK FOR WHOLE COMMAND "I;"L;"L /TOO KILL MAIN FILE LOCKQ /NO KILL IF LOCKED TAD MAINF /CHECK IF A FILE TO KILL SZA CLA JMP KILL1 ERRORM SIXBIT \KI\ EMERR1, DISMISS EMERR, ERRORM SIXBIT \EM\ / EDIT KILL -- DELETE A FILE ANYWHERE EKILL, DECODE /GET DEVICE AND NAME STA GETHND /LOAD THE HANDLER DCA KILL /SAVE THE HANDLER ADDRESS JMS DELETF /DELETE THE FILE FROM DIRECTORY DISMISS /RELEASE USR TAD KILL /RELEASE HANDLER WE JUST USED RELESE CMDGO / ZAP THE CURRENT MAIN FILE KILL, 0 CLA TAD [PLYG-1 DCA BCP TAD [PLYGE-1 DCA FCP DCA CURSOR IAC /SET BLOCKS TWO APART TAD FMINB DCA FWDBLK STA TAD FMINB DCA BKDBLK TAD [212 CDF 10 DCA I [PLYG-1 CDF DCA INSINH /DROP INSERT INHIBIT TAD [EOF PUSHF JMP I KILL / DELETE THE FILE FROM SPECIFIED DEVICE DELETF, 0 TAD DEVNUM CIF 10 JMS I [200 /DELETE FILE IF IT IS ALREADY THERE 4 /CLOSE DELETE DFN /FILE NAME PTR 0 /ZERO BLOCKS FOR DELETE C12, 12 /IGNORE ERROR JMP I DELETF PAGE
/ OPEN AN EDIT FILE EDIT, TAD MAINF /SEE IF WE ARE ALREADY WORKING ON A FILE SZA CLA JMP EDERR DECODE TAD DFN /THERE MUST BE A FILE NAME SNA CLA JMP EDERR TAD MNHDLA /RELEASE MAIN HANDLER RELESE STA /BUT NOT OTHERS GETHND /LOAD HANDLER DCA MNHDLA /SAVE ENTRY TAD (DFN /*SET UP POINTER TO FILE NAME DCA EDBLK /* TAD DEVNUM /* CIF 10 /* JMS I [200 /* 2 /*LOOKUP EDBLK, 0 /*PTR TO FILE NAME=>BLOCK ESKPF, 0 /*=>- LENGTH JMS EEXTDO /*MAYBE THE EXTENSION WAS NOT GIVEN /THIS ROUTINE RETURNS TO .-10 /DO NOT INSERT IN RANGE OF * WITHOUT CHANGING EEXTDO DISMISS TAD EDBLK+1 SNA JMP EDERR CMA TAD EDBLK /SET UP BLOCKS DCA FMAXB TAD EDBLK DCA FMINB JMS I [SETTAB /SET AUTOTAB FROM EXT. / STA DCA MAINF /WE NOW HAVE A FILE INIT, TAD [PLYG-1 /ENTRY FOR EDIT DCA BCP TAD [PLYGE-1 DCA FCP /SETUP THE FILE POINTERS DCA CURSOR /ZERO THE CURSOR TAD FMINB /SETUP THE BLOCKS DCA FWDBLK STA TAD FMINB DCA BKDBLK CDF 10 /SET UP WEIRD CHAR TAD [212 /TO STOP THINGS DCA I [PLYG-1 /ON A BACKUP CDF TAD [-212 /STOP CHAR FOR MOVE DCA LPSTPC RFWD /READ FIRST BLOCK IN MOVFL /LOOK AT FIRST LINE MAINGO CMDGO /GOOD, NEXT COMMAND INITK, TAD MAINF /COMMAND ENTRY TO INITILIZE FILE VIA ! SNA CLA JMP INITE /NO MAIN FILEY NO INITY JMS EXIT /EXIT THE FILE WE HAVE JMP INIT INITE, ERRORM SIXBIT \IE\ EDERR, ERRORM SIXBIT \ED\ / EDIT SKIP COMMAND ESKIP, STA / EDIT READ COMMAND EREAD, DCA ESKPF /SET ESKIP FLAG JMS PGQC /CHECK FOR PAGE COMMAND TAD AIHDLA /CHECK IF WE HAVE A HANDLER SNA CLA JMP ERERR TAD MAINF /CHECK FOR MAIN FILE SNA CLA JMP ERERR /NO MAIN FILE TAD CMDN /SETUP COUNT CIA SNA STA /ASSUME 1 DCA ERC ER1, TAD INSINH /ARE WE INHIBITED SZA CLA JMP ERERR /GIVE AN ERROR JMS AINP DCA ERCH TAD ERCH TAD [-EOF SNA CLA JMP ERERR /END OF FILE REACHED TAD ESKPF SZA CLA JMP ESKP1 TAD ERCH TAD (-377 /IGNORE RUBOUTS AND NULLS SZA TAD [377 SZA INSERT ESKP1, KEYQ /STOP ON A KEY STRUCK SKP MAINGO TAD ERCH FFLFQ JMP ER1 ISZ ERC /CHECK THE COUNT OF THINGS JMP ER1 CMDGO ERCH, 0 /CHAR ERC, 0 /COUNT ERERR, ERRORM SIXBIT \ER\ / END OF EDITING SESSION, RETURN TO OS/8 QUIT, TESTC /MAKE SURE THAT IT IS "QUIT" ASCII \UIT\ QUIT1, TAD AOHDLA /NOW CLOSE OUTPUT FILE SNA CLA /IF THERE IS ONE JMP .+3 /NO OUTPUT FILE TAD [EOF JMS AOUT /CLOSE FILE DCA CURSOR /HOME CURSOR IN CASE OP STOPS US TAD MAINF /DO WE HAVE A MAIN FILE? SZA CLA JMS EXIT /YES, CLOSE MAIN FILE QUIT2, JMP I [7600 /RETURN TO OS/8 SYSTEM PAGE
/ OPEN AUXILLARY INPUT FILE FOR EDITING EINPUT, TAD MAINF /THERE MUST BE A MAIN FILE SNA CLA JMP EIERR TAD AIHDLA /RELEASE THE INPUT HANDLER RELESE DECODE /GET DEVICE AND NAME STA /DONT RESET SYSTEM TABLES GETHND /LOAD DEVICE HANDLER DCA AIHDLA /SAVE ENTRY TAD DFN /CHECK NAME DO WE NEED TO LOOKUP SNA CLA JMP EI1 /NO LOOKUP ITS NON DIRECTORY TAD (DFN /* DCA AIBLK /* TAD DEVNUM /*DO LOOKUP WITH DEVICE NUMBER CIF 10 /* JMS I [200 /* 2 /*LOOKUP AIBLK, 0 /*PTR TO FILENAME => BLOCK AIMAXB, 0 /* => - LENGTH JMS EEXTDO /*MAYBE WE NEED AN EXTENSION /THIS ROUTINE RETURNS TO .-10 /DO NOT INSERT IN RANGE OF * WITHOUT CHANGING EEXTDO TAD AIBLK /SET UP NEXT BLOCK CIA TAD AIMAXB DCA AIMAXB EI2, DISMISS TAD (AIRD /SET UP ENTRY ADDRESS DCA AICOR /IN AUX INPUT COROUTINE CMDGO EI1, STA CLL RTR /-2001 DCA AIMAXB /MAX BLOCKS FOR NON DIRECTORY DCA AIBLK /STRT BLOCK JMP EI2 EIERR, ERRORM SIXBIT \EI\ / AUXILIARY INPUT FILE AINP, 0 CLA JMP I .+1 AICOR, AIER /READ FIRST BLOCK AND [177 TAD [200 /SET PARITY ON INPUT TAD [-EOF /CHECK FOR EOF SNA JMP AIEOF AIEOF1, TAD [EOF /GET THE CHAR BACK JMP I AINP AIFST, TAD AIAD /SAVE ADDRESS FOR THIRD CHA DCA AIAD1 CDF 10 TAD I AIAD /GET THE FIRST CHAR CDF ISZ AIAD JMS AICOR /RETURN WITH FIRST CHAR CDF 10 TAD I AIAD /GET SECOND CDF JMS AICOR CDF 10 TAD I AIAD1 /GET THIRD AND [7400 CLL RTR;RTR DCA AIAD1 TAD I AIAD /GET BOTTOM HALF CDF AND [7400 CLL RTL;RTL;RAL TAD AIAD1 ISZ AIAD JMS AICOR ISZ AICTR /CHECK BUFFER EMPTY JMP AIFST AIRD, TAD AIBLK /GET BLOCK TO READ TAD AIMAXB /CHECK END SMA SZA CLA JMP AIER TAD AIBLK /GET BLOCK BACK JMS READAX /READ A BLOCK (SAME BUFFER ASSUMED) ISZ AIBLK NOP TAD [-200 DCA AICTR TAD AIBUFX /ADDRESS OF BUFFER DCA AIAD JMP AIFST /GET A CHAR AIER, ERROR /END OF THE FILE SIXBIT \IF\ AIEOF, TAD (AIER DCA AICOR TAD AIHDLA RELESE /RELEASE THE HANDLER DCA AIHDLA /NO HANDLER NOW JMP AIEOF1 /BACK FOR EOF AIAD, 0 AIAD1, 0 / READ AUXILLARY FILE READAX, 0 DCA AICTR JMS I AIHDLA 210 /READ FIELD 1 2 PAGES AIBUFX, AIBUF AICTR, 0 SMA CLA /CHECK FOR SOFT ERROR SINCE SKP /EOF IS SOFT HLT JMP I READAX / SETUP FOR PAGE OR LINES PGQC, 0 GETC /CHECK NEXT CHAR FOR A PAGE TAD (-"P SNA CLA JMP PGQ1 /YES, IT IS STA /BACK UP THE CMDPTR TAD CMDPTR DCA CMDPTR STL RTL /USE LINE FEED FOR END CHAR PGQ1, TAD [-214 /FF FOR PAGES DCA LPSTPC DCA CURSOR /HOME THE CURSOR JMP I PGQC PAGE
/ OPEN AUXILLARY OUTPUT FILE EOUTPUT,TAD MAINF /WE MUST HAVE A MAIN FILE SNA CLA JMP EOERR /SIGNAL ERROR IN EO COMMAND TAD AOHDLA /RELEASE THE OUTPUT HANDLER RELESE TAD [DCB /RESET TENETIVE FILES TABLES DCA A1 /WE DON'T LIKE THIS BUT WE MUST CDF 10 /IF WE WANT TO DROP AN OUTPUT FILE EOUTP2, TAD I A1 /WITHOUT CLOSING IT AND (7770 /BITS 9-11 ARE THE GOOD BITS DCA I A1 /SEE THE SOFTWARE SUPPORT MANUAL ISZ A1 /PAGE B-7 TAD A1 IAC SZA CLA /ARE WE AT 7777? JMP EOUTP2 /NOPE CDF 00 /YES, DONE WITH CLEAR DCA DCDL /ZERO THE NUMBER OF BLOCKS DECODE /GET DEV:NAME SPEC STA /DON'T RESET SYSTEM TABLES GETHND /LOAD DEVICE HANDLER DCA AOHDLA /SAVE ENTRY POINT TAD (DFN-1 /MOVE NAME TO SAVE IT DCA X1 TAD I X1 DCA AOFNM TAD I X1 DCA AOFNM+1 TAD I X1 DCA AOFNM+2 TAD I X1 DCA AOFNM+3 TAD DEVNUM /ALSO SAVE DEVICE NUMBER FOR CLOSE DCA AODEVN TAD (AOFNM /SETUP ADDRESS COMMAND DCA AOBLK /STORE IN ADDRESS FILLED BY BLK TAD DCDL /SETUP LENGTH OF FILE TAD [-400 /FOR ENTER SPA CLA /IF LONGER THAN 256 PASS 0 TO USR TAD DCDL /OTHERWISE USE THE LENGTH RTL;RTL /MOVE TO TOP 8 BITS AND [7760 /CLEAR FOR DEVICE NUMBER TAD DEVNUM /PUT DEVNUM INTO LENGTH CIF 10 JMS I [200 /USR IN CORE FROM LHNDLR 3 /ENTER AOBLK, 0 /PTR TO FILE NAME => BLOCK AOLNGT, 0 /=>LENGTH JMP EOERR1 /DISMISS USR AND SIGNAL ERROR DISMISS /DISMISS USR TAD (AOFST+1 DCA AOCOR DCA AORECS /NO BLOCKS YET TAD [-BUFL_7777 /SETUP THE GOODIES DCA AOCTR TAD (AOBUF DCA AOAD CMDGO EOERR1, DISMISS /DISMISS USR FOR ERROR TAD AOHDLA /RELEASE THE HANDLER RELESE DCA AOHDLA /NO ROOM IF MAGSAT EOERR, ERRORM SIXBIT \EO\ AOFNM, ZBLOCK 4 /FILE NAME SAVED FOR CLOSE AODEVN, 0 /DEVICE NUMBER SAVED DCB=7760 /DEVICE CONTROL BLOCKS IN FIELD 1 / GET NUMERIC ARG FROM COMMAND GETNMX, 0 CLA DCA GETNM5 GETNMP, STA DCA GETNMS /ZAP SIGN TO + GETNM1, GETC TAD (-"9 SMA SZA JMP GETNM2 /BAD CHAR RTN TAD ("9-"0 SPA JMP GETNM3 /GO CHECK FOR SIGNS DCA GETNM4 /SAVE DIGIT TAD GETNM5 /*10 CLL RTL TAD GETNM5 CLL RAL TAD GETNM4 DCA GETNM5 JMP GETNM1 GETNM3, TAD ("0-"+ SNA JMP GETNMP /A PLUS TAD ("+-"- SNA CLA JMP GETNMP+1 /FALL THRU FOR BAD CHAR GETNM2, STA /BACK UP POINTER TAD CMDPTR DCA CMDPTR TAD GETNM5 ISZ GETNMS CIA JMP I GETNMX GETNM4, 0 /DIGIT GETNM5, 0 /NUMBER GETNMS, 0 /SIGN PAGE
/ EDIT WRITE COMMAND EWRITE, JMS XTBL /SET UP THE ARGS DCA EWC TAD AOHDLA /SEE IF WE HAVE HANDLER FOR OUTPUT SNA CLA JMP EWERR /NO HANDLER: WE CAN'T WRITE EW1, MOVF /GET A CHAR FORWARD JMP EWERR /END OF FILE REACHED IN MAINFILE TAD CHAR /GET CHAR MOVED OVER JMS AOUT /OUTPUT THE CHAR KEYQ /KEY STRUCK STOPS US SKP MAINGO /DO NOT PASS GO DO NOT COLLECT $200 TAD CHAR /SEE IF THIS IS THE END OF OUR JOB FFLFQ /CHECK FOR LPSTPC OR FF JMP EW1 ISZ EWC /CHECK OUR COUNT JMP EW1 CMDGO EWERR, ERRORM SIXBIT \EW\ EWC, 0 /OUR COUNT / CLOSE THE AUXILIARY OUTPUT FILE ECLOSE, TAD [EOF JMS AOUT CMDGO / AUXILLARY OUTPUT ROUTINE AOUT, 0 AND [377 /STRIP OFF BAD PART OF CHAR DCA AOCHR TAD AOHDLA /SEE IF WE CAN OUTPUT? SNA CLA JMP AOERR TAD AOCHR JMP I .+1 /OH COME ON YOVE SEEN A COROUTINE AOCOR, AOERR /SET UP AS THE ERROR TO BE COOL TAD AOCHR /WATCH FOR THE EOF TAD [-EOF SZA CLA JMP I AOUT /NOT YET, BUT JUST YOU WAIT AOCLS, JMS AOWR /END OF FILE OR TOO MANY BLOCKS TAD (AOERR DCA AOCOR /BURN OUR BRIDGES TAD AOHDLA /WE WILL USE HANDLER ONLY TO CLOSE RELESE /SO ITS ALL RIGHT TO RELEASE DCA AOHDLA /AND ZAP ADDRESS NOW TAD AODEVN /WE WROTE THE BUFFER CIF 10 JMS I [7700 /CALL USR TO CLOSE 4 /CLOSE AOFNM /THE FILE NAME AORECS, 0 /THE RECORD COUNT SKP /FOR ERROR ON CLOSE JMP I AOUT /NOW RETURN AOERR, ERRORM /NO FILE TO OUTPUT TO SIXBIT \OE\ AOFST, JMS AOCOR CDF 10 /THIS IS A STRAIGHT FORWARD DCA I AOAD /PS/8 OUTPUT PACKING ROUTINE CDF /SO FIGURE IT OUT FOR YOUR SELF TAD AOAD / ,KID!!!!! DCA AOAD1 ISZ AOAD JMS AOCOR CDF 10 DCA I AOAD CDF JMS AOCOR RTL;RTL DCA AOTMP TAD AOTMP AND [7400 CDF 10 TAD I AOAD1 DCA I AOAD1 TAD AOTMP RTL;RTL AND [7400 TAD I AOAD DCA I AOAD CDF ISZ AOAD ISZ AOCTR JMP AOFST ISZ AOLNGT JMP AOWN /OK JUST WRITE TAD [EOF /FILE TOO LONG TERMINATE CDF 10 DCA AOBUF+BUFL-1 CDF JMP AOCLS /AND CLOSE THE FILE AOWN, JMS AOWR /WRITE A BLOCK TAD [-BUFL_7777 /WORD PAIRS DCA AOCTR TAD AOBUFX DCA AOAD JMP AOFST AOAD, 0 /PRIMARY ADDRESS AOAD1, 0 /THE FIRST WORD AOTMP, 0 /DISASSEMBLED CHAR AOCHR, 0 /THE CHAR AOCTR, 0 /WORD PAIRS COUNTER / WRITE A BLOCK OF OUTPUT TO AUXILIARY OUTPUT FILE AOWR, 0 TAD AOBLK TAD AORECS /MAKE BLOCK TO WRITE JMS WRITAX ISZ AORECS /ONE MORE RECORD WRITTEN JMP I AOWR / WRITE A BLOCK ON AUXILLIARY OUTPUT WRITAX, 0 DCA WRBA JMS I AOHDLA 4210 /WRITE 2 PAGES FIELD 1 AOBUFX, AOBUF /BUFFER ADDRESS WRBA, 0 /BLOCK SMA CLA SKP HLT /HARD ERROR ONLY JMP I WRITAX / CHANGE THE DISPLAY SWITCH DTABSW, CLA STL RAR /SWITCH FOR TAB DISPLAY TAD DTABFG DCA DTABFG MAINGO PAGE
/ TYPE LINES OR PAGES FROM THE MAINFILE TYPEC, JMS XTBL /SET UP THE ARGS DCA TPCTR TAD (DSPY /SET UP COROUTINE DCA DRTN DCA TPTBC /ZAP THE TAB COUNT TP1, MOVF CMDGO /END OF FILE TAD CHAR TAD [-214 SNA JMP TPFF /FF = 9 LFS TAD (214-211 SNA CLA JMP TPTB /A TAB... EXPAND IT TAD CHAR TYPE ISZ TPTBC /KEEP THE COUNT TP2, TAD CHAR EOLQ /WHEN TO ZAP THE TAB COUNTER DCA TPTBC KEYQ /IS OP CALLING? SKP MAINGO TAD TPTBC /CHECK FOR LINE OVERFLOW TAD (-110 SMA CLA JMP TPFF1 TAD CHAR FFLFQ /SEE IF ITS END OF SOMETHING JMP TP1 ISZ TPCTR JMP TP1 CMDGO TPTB, ISZ TPTBC /EXPAND A TAB TAD [240 TYPE TAD TPTBC AND [7 /THE CLASSIC TAB CHECK SZA CLA JMP TPTB JMP TP1 /BACK FOR MORE TPFF, TAD T10 /9 LFS = FF TPFF1, CMA /SET FOR ONE CRLF DCA TPTBC /DOUBLE DUTY COUNTER CRLF ISZ TPTBC JMP CRLFX+3 /THE REST ARE LINE FEEDS ONLY JMP TP2 /TAB COUNTER IS ZERO NOW / TYPE A CARRIAGE RETURN / LINE FEED COMBINATION CRLFX, 0 TAD [215] TYPE TAD [212] TYPE JMP I CRLFX / TRANSFER TO XBUFFER XMIT, JMS XTBL /SET UP THE ARGS DCA TPCTR TAD (XBUF-1 DCA XAD XMT1, MOVF JMP XMTER /END OF FILE TAD CHAR CDF XB DCA I XAD CDF TAD CHAR /SEE IF WE SHOULD STOP FFLFQ JMP .+4 ISZ XCTR SKP JMP XMT2 TAD XAD /SEE IF WE'RE FULL TAD (-XBUFE+1 SZA CLA JMP XMT1 XMTER, ERROR /TOO MANY CHARS OR EOF IN MAINFILE SIXBIT \XC\ XMT2, TAD [EOF CDF XB DCA I XAD /SAVE EOF TO MARK END OF BUFFER CDF CMDGO / YANK GOODIES FROM THE XBUFFER CTRLY, DCA I CMDPTR /FORCE A COMMAND RETURN SKP YANK, TAD CMDN /SI, SENOR! HOW MANY TIMES SNA ONE /AT LEAST ONCE, SENOR CIA DCA YCTR YAK1, TAD (XBUF-1 /AN OLD FRIEND FROM THE HIMALAYAS DCA XAD YAK2, CDF XB TAD I XAD /GET THE GOODIES ONE BY ONE CDF TAD [-EOF / WATCH FOR MARKER SNA JMP YAK3 TAD [EOF /MAKE CHAR BACK FAST INSERT /STICK IT IN KEYQ /SEE IF HE WANTS TO STOP SKP MAINGO TAD INSINH /SEE ABOUT THE FILE SNA CLA JMP YAK2 ERRORM /INSERT INHIBIT SET SIXBIT \YC\ YAK3, ISZ YCTR /ALL THE TIMES WE WANT? JMP YAK1 /NO NOT YET HE WANTS MORE CMDGO TPCTR, XCTR, YCTR, 0 /MULTY DUTY TEMPS TPTBC, /A NOT SO MULTY DUTY TEMP XTBL, 0 TAD [-212 /BE SURE TO GET THE CURRENT LINE DCA LPSTPC MOVBL T10, 10 /ERROR RTN... IGNORE JMS PGQC /SET UP LINES OR PAGES TAD CMDN /SEE HOW MANY SPA SNA /MUST BE MINUS ONE CIA JMP I XTBL PAGE
/ DELETE LINES OR PAGES DELETE, LOCKQ /ARE WE LOCKED? JMS PGQC /SETUP FOR LINES OR PAGES TAD CMDN SNA /ASSUME -1 UCMD, STA /DELETE TO LEFT OF CURSOR SPA /CHECK DIRECTION JMP DELB CIA /WE MUST HAVE A MINUS COUNT DCA DELC DELF, DELFC /DELETE FORWARD CMDGO /DELFC SAYS NO MORE CHARS TAD CHAR FFLFQ /LPSTPC OR FF? JMP DELF ISZ DELC JMP DELF CMDGO DELB, DCA DELC JMS RUBL /USE THE HANDY SUBROUTINES CMDGO /ITS WEIRD TOO WITH A BAD RTN ISZ DELC JMP DELB+1 CMDGO DELC, 0 /WE'RE NOT SURE WHAT MIGHT HAPPEN TO /CTR SO USE SEPERATE / WITHDRAW COMMAND WCMD, LOCKQ /WE MUST NOT BE LOCKED TAD CMDN /DELETE SOME CHARS TO LEFT OF CURSOR SPA SNA ONE CIA JMS WCHARS /WITHDRAW THEM CMDGO /OK, NEXT WCHARS, 0 /GENERAL MULTIPLE CHARACTER DELETION CODE DCA RCTR /CALLED WITH NUMBER IN ACC WC1, JMS RUBCHR MAINGO EOLQ /ARE GETTING AN EOL? ISZ RCTR /IF SO, COUNT ONE EXTRA TO AGREE WITH J COMMAND ISZ RCTR /A LITTLE FUSS TO AVOID DOUBLE SKIPS ETC TAD RCTR /EITHER IT WENT OR WE DON'T DO THIS SPA /OR IT IS STILL NEGATIVE JMP WC1 JMP I WCHARS /RETURN TO WHOEVER / REPLACE COMMAND RPLC, TAD CMDN /HE MAY SPECIFY HOW MANY SMA /MINUS NUMBERS STAY MINUS CIA SNA TAD SBUFC /IF NOT ASSUME WHOLE LAST STRING JMS WCHARS /USE OUR NEW GENERAL ROUTINE INSRTC, GETC /ALSO ENTRY FOR INSERT COMMAND TAD MALTM /ALTMODE ENDS COMMAND SNA CMDGO TAD ALTM /RESTORE CHAR JMS TBINST /USE TABINSERT MODE IF HE WANTS JMP INSRTC RCTR= DELC /OUR OWN COUNTER / RUBOUT A CHAR RUBOUT, JMS RUBCHR MAINGO TAD [-215 SNA CLA JMS RUBCHR CLA MAINGO / RUBOUT A LINE RUBLIN, TAD [-212 /STOP AT LF DCA LPSTPC JMS RUBL /USE A STANDARD SUBROUTINE MAINGO MAINGO /TWO RTNS RUBL, 0 /DELETE ALSO RUBL'S LOCKQ /ARE WE LOCKED? JMS RUBCHR JMP I RUBL FFLFQ /WATCH FOR LPSTPC OR FF JMP RUBL+1 ISZ RUBL JMP I RUBL / RUBOUT CHAR TO RIGHT OF CURSOR RUBR, LOCKQ /WE MUST NOT BE LOCKED TAD CURSOR SNA MAINGO TAD BCP DCA BCP /SIMPLE TO DELETE HUH DCA CURSOR /ENTRY TO HOME CURSOR MAINGO / RUBOUT ONE CHAR RUBCHR, 0 LOCKQ /WE MUST BE UNLOCKED TAD CURSOR SZA JMP RUBC DELBC JMP I RUBCHR RUBCR, CLA CURSCH ISZ RUBCHR JMP I RUBCHR RUBC, TAD BCP /CURSOR IN AC DCA X1 TAD X1 /CHECK ADDRESS FOR END OF PLYG TAD [-PLYG+1 SNA CLA JMP I RUBCHR /END OF PLYG, RTN... STA TAD X1 DCA X2 TAD CURSOR DCA CTR CDF 10 RUBC1, TAD I X1 /MOVE ALL CHARS DOWN DCA I X2 ISZ CTR JMP RUBC1 CDF TAD X2 DCA BCP JMP RUBCR PAGE
/ PAGE AND LINE LOCATE CTRLG, ONE CTRLP, DCA CMDN DCA I CMDPTR /FORCE A RETURN TO MAIN SKP BEGIN, STL CLA RAR /4000 TO AC (-2048)DECIMAL SKP SLASH, CLL STA RAR /3777 TO AC (2047)DECIMAL SNA POCATE, TAD CMDN /ASSUME -1 SNA STA DCA CMDN CMA CLL RAL /FORMFEED FOR PAGES LOCATE, TAD [-212 /LINEFEEDS FOR LINES DCA LPSTPC /THE STOP CHAR TAD CMDN /THE NUMBER OF LINES OR PAGES SNA CMDGO /NO ARG SO RTN SMA CIA /MAKE IT MINUS DCA LPCTR /OUR OWN COUNTER SO WE DONT GET SCREWED DCA CURSOR /SO WE DON'T CONFUSE OURSELVES TAD CMDN /CHECK WHICH DIRECTION SPA CLA JMP LPBAK /BACK STUPID MOVFL CMDGO ISZ LPCTR JMP .-3 CMDGO LPBAK, MOVBL CMDGO ISZ LPCTR JMP LPBAK CMDGO / IS THE MAIN FILE LOCKED? LPCTR, LOCKQX, 0 /NO, RETURN CLA /YES, GO TO MAIN LOOP TAD LCKSW SZA CLA MAINGO /NAUGHTY NAUGHTY JMP I LOCKQX / CTRL/X - SAVE THE CURRENT LINE CTRLX, TAD [-212 DCA LPSTPC /SET LINEFEED TERMINATOR MOVBL /GO TO THE BEGINNING DCA I CMDPTR /FORCE A COMMAND RETURN DCA CURSOR /HOME THE CURSOR STA JMP I .+1 /AND COPY INTO XBUF XMIT+1 / DECODE THE EDIT COMMANDS ECMD, TAD KEXTAB /INIT THE EXTENSION TABLE DCA EXPTR GETC /GET NEXT CHAR SORTJ ECS-1 EJS-ECS ECE, ERRORM SIXBIT \EE\ /EDIT COMMAND ERROR / CHECK FILENAME EXTENSION TO SET UP PROPER AUTOTABBING SETTAB, 0 /CALLED BY EDIT MAKE & EDIT TAD DFN+3 /GET THE FILENAME EXTENSION SORTJ /AND COMPARE IT WITH EXTAB-1 /ALL OF OUR KNOWN ONES JMTBLE-EXTAB JMP XX /SOMETHING ELSE - NO AUTOTAB FTBA, STA CLA RAL PA12RA, CMA DCA FTFLG /SET AUXILIARY FLAG FOR MODE STBRTN, STA JMP I SETTAB XX, BIFARO, DCA TBSWT /NO AUTOTABBING TAD MLONGL /NUMBER OF LINES FOR LONGIES DCA I LLNSFM JMP STBRTN /SUBROUTINE TO ATTEMPT RESOLUTION OF FILE EXTENSION EEXTDO, 0 CLA TAD M11 TAD EEXTDO /RETURN TO .-10 IF AOK DCA EEXTDO TAD MEXTAB TAD EXPTR SNA CLA TAD DFN+3 SZA CLA JMP EXERR /YES, HE MISSED CDF 10 TAD I EXPTR /GET AN EXTENSION CDF 00 SNA JMP EXERR /WE DIDN'T FIND ONE ISZ EXPTR DCA DFN+3 JMP I EEXTDO EXERR, DISMISS ERRORM SIXBIT \BE\ /BAD EXTENSION ERROR EXPTR, EXTAB KEXTAB, EXTAB MEXTAB, -EXTAB M11, -11 MLONGL, -LONGNM LLNSFM, LNSFRM SBUF, 212 /SEARCH BUFFER ZBLOCK 100 /64 CHARS IN SEARCH STRING SBUFE, 0 /SEARCH BUFFER AND COMMAND BUFFER SHOULD BE TOGETHER NOW 233 /ASSEMBLE IN AN ALTMODE IN FRONT OF THE BUFFER CMDBUF, ZBLOCK .!177-.&177 /REST OF THIS PAGE FOR COMMANDS CMDEND, 0 / THE INITIALIZATION FOR ALTMODE CHARACTERS / ONE OF THE THREE ALTMODE CHARACTERS CAN BE HIT *CMDEND-40 ALTIN3, ISZ ALTALT /376 WAS ALTMODE GIVEN ISZ ALTCL ALTIN2, ISZ ALTALT /375 WAS THE ALTMODE CHAR ISZ ALTCL ALTIN1, TAD KMAIN3 /233 IS THE ASSUMED ALTMODE (ESCAPE) CHAR CDF 10 /SORTJ TABLES IN FIELD 1 NOW DCA I ICMAL1 TAD KMAIN3 DCA I ICMAL2 TAD KMAIN3 DCA I ICMAL3 TAD ICMMND DCA I ALTALT /THE PROPER COMMAND ALTMODE CHAR TAD KCMALT DCA I ALTCL /ALSO THE PROPER COMMAND LINE ALT CHAR TAD [EOF CDF XB DCA I XBUFX /INITIALIZE THE X BUFFER CDF JMP I ICMMND /NOW GET THE COMMAND LINE XBUFX, XBUF ALTALT, CMDAL1 /BEGINNING OF JUMP LIST FOR ALT RECOG. ALTCL, CMDALJ /BEGINNING OF JUMP LIST FOR CMD LINE KMAIN3, MAIN3 ICMAL1, CMDAL1 ICMAL2, CMDAL2 ICMAL3, CMDAL3 ICMMND, COMMND KCMALT, CMDALT PAGE
/ KEY BOARD CONTROL OF CURSOR CSFK, JMS CURSF NOP MAINGO CSBK, JMS CURSB NOP MAINGO / FORWARD ONE POSITION CURSF, 0 CLA TAD CURSOR SNA JMP CURSF1 /MOVE FORWARD ONE LINE IAC DCA CURSOR CURSF2, ISZ CURSF JMP I CURSF CURSF1, JMS LNENDQ /IS LINE ENDED BY LF OR FF JMP I CURSF TAD [-212 DCA LPSTPC MOVFL JMP I CURSF /NO MORE TEXT JMS FRNTL /TO THE FRONT OF THE LINE JMP CURSF2 / BACK ONE POSITION CURSB, 0 CLA TAD CURSOR SNA CLA JMP CURSB1 CURSCH /GET CHAR AT CURSOR EOLQ /EITHER LF OR FF IS EOL SKP JMP CURSB1 /NOT EOL JMS LNENDQ /IS THE LINE ENDED JMP I CURSB /NO DO NOT MOVE TAD [-212 DCA LPSTPC MOVBL JMP CURSB2+1 /LEAVE WITH HOME CURSOR JMP CURSB2 CURSB1, TAD CURSOR /CHECK THE ADDRESS TAD BCP TAD [-PLYG+1 SNA CLA JMP I CURSB /NO MORE TO MOVE STA TAD CURSOR CURSB2, ISZ CURSB DCA CURSOR JMP I CURSB / FORWARD ONE LINE FWLN, JMS LNENDQ MAINGO CONCAT, TAD [-212 DCA LPSTPC MOVFL NOP JMP HOMC / BACKWARD ONE LINE BKLN, JMS LNENDQ /CHECK END OF LINE MAINGO TAD [-212 DCA LPSTPC /STOP CHAR MOVBL NOP JMP HOMC / MOVE CURSOR TO FRONT OF THE LINE FRNTL, 0 CLA TAD CURSOR SNA CLA JMP FL1 FL2, CURSCH /GET CHAR AT CURSOR EOLQ JMP I FRNTL TAD A1 /CHECK ADDRESS FOR END OF BUFFER TAD [-PLYG+1 /THE ADDRESS IS LEFT BY CURSCH SNA CLA JMP I FRNTL FL1, JMS CURSB /GO BACKWARDS ONE JMP I FRNTL JMP FL2 FRTL, JMS CURSB MAINGO JMS FRNTL MAINGO FRNTC, JMS CURSB /FRONT OF LINE COMMAND FROM COMMAND CMDGO JMS FRNTL CMDGO / THE STRANGE CTRL/O SWITCH FOR WHOEVER LIKES IT TBDEL, LOCKQ /IF WE ARE LOCKED DON'T DO IT JMS FRNTL /DELETE TAB AT START OF LINE JMS CURSF /MOVE FORWARD OF FIRST CHAR MAINGO /NO FIRST CHAR CURSCH /WHAT IS IT? TAD [-211 /TAB? SZA CLA SKP /RETURN WITH ZERO CURSOR JMS RUBCHR /YES, RUB IT OUT NOP /A TWO RTN SUBROUTINE CLA /WITH JUNK IN AC.. NO JUST THE C RUBBED HOMC, DCA CURSOR /ZERO CURSOR MAINGO HOMCM, DCA CURSOR /ZERO CURSOR COMMAND CMDGO / JUMP COMMAND TO MOVE CURSOR JUMP, TAD CMDN /HOW MANY PLACES SPA JMP JMPB-1 /GO BACK SNA ONE /ZERO ASSUMES MOVE FORWARD CIA /MAKE - DCA CTR JMPF, JMS CURSF /MOVE ONE CHAR FORWARD MAINGO /NO MORE OR LINE NOT ENDED ISZ CTR JMP JMPF CMDGO /MORE COMMANDS? DCA CTR JMPB, JMS CURSB /SAME STORY FOR BACKWARDS MAINGO ISZ CTR JMP JMPB CMDGO / SEE IF THE CURRENT LINE IS ENDED LNENDQ, 0 TAD CURSOR CIA /FAKE OUT THE CURSOR CHAR ROUTINE CURSCH EOLQ ISZ LNENDQ /SKIP RTN IF YES JMP I LNENDQ PAGE
/ THE SEARCH COMMANDS FSC, STA /FORWARD SEARCH COMMAND FSCN, DCA NONSTP /NONSTOP FORWARD JMS GSTRNG /NOT A BATHING SUIT JMP .+3 FSRCH, STA /RESET THE SWITCHES FSRCHN, DCA NONSTP /ALSO ENTRIES FOR KEYBOARD JMS CURSF /FORWARD ONE MAINGO /NO MORE IN THAT DIRECTION JMS LOOK /WATCH FOR STRING ISZ NONSTP /SHOULD WE STOP HERE JMP FSRCHN /NO CURSCH /CHECK THE CHAR TAD [-214 /STOP AT THE PAGE SZA CLA JMP FSRCH /KEEP CHECKING JMS CURSF /HOP TO END OF FF ON PAGE FAILURE MAINGO MAINGO /FAILURE AT PAGE BOUNDARY / BACKWARD SEARCHS ...SOMETHING NEW FOR YOU... BSC, STA /AND USELESS TOO BSCN, DCA NONSTP /NONSTOP VERSION JMS GSTRNG /GET THE STRING AND OCCURRANCES JMP .+3 BSRCH, STA /KEYBOARD ENTRIES BSRCHN, DCA NONSTP TAD SBUFC /SOME TRICKY STUFF SO WE DCA BSCTR /DON'T HANG UP ON A STRING JMS CURSB /BACKUP OVER THE STRING MAINGO /THERE WASNO STRING ISZ BSCTR /CHECK THE COUNT JMP .-3 JMP .+3 BS1, STA BSN1, DCA NONSTP JMS CURSB /BACK IT UP MAINGO /BEGINING OF FILE FAILURE JMS LOOK /LOOK FOR STRING ISZ NONSTP /CHECK FOR PAGES JMP BSN1 /YES CURSCH TAD [-214 SZA CLA JMP BS1 MAINGO /END OF PAGE FAILURE BSCTR, 0 /COUNTER NONSTP, 0 /NON STOP FLAG LOOKC, 0 /OCCURRENCE COUNT SBUFC, -1 /BUFFER COUNT / LOOK AT CURSOR POSITION FOR STRING LOOK, 0 TAD CURSOR /SEE IF ENOUGH CHARS LEFT CIA IAC TAD SBUFC /A MINUS COUNT SPA CLA JMP I LOOK /NOT ROOM ON THE LINE STA /SET UP ADDRESS FOR COMPARE TAD CURSOR TAD BCP DCA X1 TAD (SBUF-1 DCA X2 TAD SBUFC /COUNT DCA CTR LOK1, CDF 10 TAD I X1 /CHECK FILE CIA CDF TAD I X2 /THE STRING SZA CLA JMP I LOOK /BAD CHAR ISZ CTR /CHECK WHOLE STRING JMP LOK1 TAD LOOKC /HOW SHALL WE RTN? SMA CLA JMP LOKB /KEY BOARD COMMAND ISZ LOOKC /CHECK OCCURENCE COUNT JMP I LOOK /NOT ENOUGH YET LOK2, TAD SBUFC /PUSH CURSOR TO END OF STRING CMA /-(SBUFC+1) TAD CURSOR SMA SZA CLA /SAFETY CHECK DCA CURSOR ISZ LOOKC /HOW TO RTN CMDGO /COMMAND RTN MAINGO /KEYBOARD RTN LOKB, STA /SET RTN CONDITION DCA LOOKC /FOR KEYBOARD JMP LOK2 GSTRNG, 0 /PICK UP ARGS FOR SEARCH TAD (SBUF-1 DCA X1 TAD (-SBUFE+SBUF-1/A COUNTER WOULD YOU BELIEVE DCA CTR TAD SBUFC DCA LOOKC /USE AS TEMP DCA SBUFC /ZAP FOR NOW GSTR1, GETC /GET COMMAND ARG TAD MALTM SNA JMP GSTRE /END OF STRING TAD ALTM DCA I X1 /SAVE IN STRING ISZ SBUFC /SAVE COUNT ISZ CTR /TOO MANY CHARS? JMP GSTR1 /BACK FOR MORE GSTR2, ERRORM SIXBIT \SS\ /STRING TOO LONG GSTRE, TAD SBUFC /MAKE COUNT - CIA SNA TAD LOOKC /USE OLD COUNT IF NONE DCA SBUFC TAD CMDN /SETUP OCCURRENCE COUNT CIA SNA STA /ASSUME ONE DCA LOOKC JMP I GSTRNG / CHANGE THE 3-WAY ECHO SWITCH ECHOC, TAD ECHOSW SMA SZA CLL STA RAL /-2 TO AC IAC /-2=>-1; -1=>0; 0=>1 DCA ECHOSW MAINGO PAGE
/ INSERT A CHAR AT CURSOR INSRTX, 0 SZA DCA CHAR /SAVE CHAR TAD MAINF /CHECK FOR A MAIN FILE SNA CLA JMP I INSRTX /NONE RETURN TAD LCKSW /SEE IF WE ARE LOCKED SZA CLA JMP I INSRTX /YES, LOCKED TAD INSINH /SEE IF WE SHOULD INSERT ANYTHING SZA CLA JMP INS4 /GO CHECK IF WE SHOULD RELEASE INS41, TAD CURSOR /CHECK FOR CURSOR SETING SNA CLA JMP INS1 /ZERO CURSOR ONE /SAVE ADDRESS TO STORE CHAR TAD BCP DCA A2 TAD BCP /ADD TO FETCH DCA A1 TAD CURSOR DCA CTR CDF 10 INS0, TAD I A1 /MOVE CHARS DOWN DCA I A2 STA TAD A1 DCA A1 STA TAD A2 DCA A2 ISZ CTR JMP INS0 ISZ BCP TAD CHAR DCA I A2 /SAVE THE NEW CHAR CDF JMP INS2 INS1, CDF 10 /STORE CHAR AT BCP TAD CHAR DCA I BCP /BCP IS AUTO CDF INS2, TAD BCP /CHECK HOW MUCH ROOM LEFT CIA TAD FCP STL TAD [-BUFC /MUST BE EXACTLY ONE BUFFER LEFT SNL SZA CLA JMP I INSRTX /ENOUGHROOM JUST RTN IAC /ONE MORE BLOCK TAD BKDBLK /SEE IF ROOM FOR WRITE ONTO TAPE CMA /-(BKDBLK+1) TAD FWDBLK SPA SNA CLA JMS SHIFTX /MAKE ROOM CLL TAD BCP /DECIDE WHICH SITE TO WRITE TAD (-BUFC^2-PLYG SNL CLA JMP INS3 WBKW /WRITE BACK IF WE CAN JMP I INSRTX INS3, WFWD /NOT ENOUGH ROOM WE MUST WRITE FWD JMP I INSRTX INS4, STL CLA RTL TAD BKDBLK /CHECK FOR INHIBIT RELEASE CLL CIA /THIS CHECK IS NOT GOOD AT THE END /OF THE FILE SINCE FWDBLK IS MOVED /BACKWARDS WITH BKDBLK TAD FWDBLK SNL CLA JMP I INSRTX DCA INSINH /ZAP INHIBIT TAD BCP /SHOULD WE WRITE SOMETHING OUT CIA TAD FCP CLL TAD [-BUFC SZL CLA JMP INS41 /NO JUST RTN TAD BCP /WE MUST WRITE TO MAKE ROOM TAD (-BUFC^2-PLYG SNL CLA JMP .+3 WBKW /WRITE BACKWARD IF WE CAN SKP WFWD JMP INS41 /GO GET A CHAR TESTCX, 0 /TEST FOR EXACT CHARS IN COMMAND SKP ISZ TESTCX TAD I TESTCX /GET A CHAR AND [7400 /CHECK FOR END OF LIST SZA CLA JMP I TESTCX /RTN TAD I TESTCX /GET CHAR BACK CIA DCA TSTCX1 GETC TAD TSTCX1 /CHECK CHAR SNA CLA JMP TESTCX+2 ERRORM SIXBIT \IC\ /ILLEGAL COMMAND TSTCX1, ERROMX, 0 /FATAL ERROR ROUTINE CLA TAD I ERROMX DCA .+2 ERROR /GIVE FATAL ERROR MESSAGE 0 MAINGO ERRORX, 0 CLA TAD I ERRORX RTR;RTR;RTR AND [77 TAD [240 TYPE TAD I ERRORX AND [77 TAD [240 TYPE CRLF ISZ ERRORX JMP I ERRORX PAGE
/ AUTO TAB INSERTION FEATURE TBINST, .-. DCA TBCHR /SAVE THE CHAR TAD FTFLG /SO WE CAN DESTROY IT DCA LOCTEM /A TEMP TO BE PLACED ON THIS PAGE TAD TBSWT /SHOULD WE AUTO TAB FOR HIM SNA CLA JMP TBSAV /NO JUST SAVE THE CHAR CURSCH /SEE THE CURRENT CHAR JMS TBEOLQ /IS THE CURRENT CHAR AN EOL SKP /THAT IS A FF OR LF FBCONS, JMP TBNOEL /NO THE CURRENT CHAR IS NOT AN EOL TAD TBCHR /YES IT IS WE ARE LUCKY ISZ LOCTEM /SEE, WE DESTROYED IT JMP .+5 /NOT COMPILER SORTJ TBCS1-1 /BUT ITS ONLY HALF AS LONG TBJS1-TBCS1 JMP .+4 /SKIP OVER ASSEMBLER AUTOTAB SORTJ /THIS CHECK TAKES FOREVER FTBCS1-1 FTBJS1-FTBCS1 TAD CURSOR /IF NOT SPECIAL CHAR CURSOR SHOULD BE ZERO SZA CLA JMP TBSAV /IF NOT THE END OF THE LINE TAD [211 /INSERT A TAB BEFOR THE CHAR INSERT TBSAV, CLA TAD TBCHR /SAVE THE CHAR WE GOT INSERT JMP I TBINST / IF THE CURRENT CHAR IS NOT AN EOL TBNOEL, ISZ LOCTEM /WE DESTROY IT HERE TOO JMP TBSAV TAD TBCHR /COMMA AND SLASH ARE SPECIAL SORTJ AUTOTB-1 TBJEOL-AUTOTB JMP TBSAV TBSCAN, TAD BCP /START AT THE END OF THE LINE DCA A1 TAD CURSOR /STOP ADDRESS FOR FORWARD SCAN TAD BCP CIA /SAVES TIME LATER DCA A2 /THIS CONSTANT IS USED MUCH LATER TOO TBBCK, STA /BACK UP TO START OF LINE TAD A1 DCA A1 CDF 10 TAD I A1 CDF JMS TBEOLQ /OUR EOL CHECKER SKP /RTN IS STRANGE JMP TBBCK /NOT AN EOL TAD A1 /NOW TO AN AUTO FOR FORWARD SCAN DCA X2 TAD A1 /SAVE FOR LATER COMMA USE DCA TBSTLN DCA CTR /NUMBER OF CHAR POSITIONS ON LINE DCA TBCOMQ /NUMBER OF COMMAS ON LINE STA /COUNT SPACES TOO DCA SPCCNT TBSCN1, CDF 10 TAD I X2 /GET A CHAR OF THE LINE CDF SORTJ AUTOTB-1 /A SPECIAL TAB CHARACTER TBCHJM-AUTOTB JMP TBSCNI /NOPE TBSTB, STA TAD CTR TAD (-10 SMA JMP .-2 CIA TAD CTR DCA CTR TBSPAC, ISZ SPCCNT /WE GOT A SPACE TBCOMA, ISZ TBCOMQ /WE GOT A COMMA TOO TBSCNI, ISZ CTR /KEEP ON TRUCKIN TAD X2 TAD A2 SNA CLA JMP TBSEND /ARE WE AT THE CURSOR YET JMP TBSCN1 /KEEP LOOKING TBQUOT, ISZ CTR /IGNORE CHAR AFTER QUOTE TAD X2 /WATCH OUT FOR END OF LINE TAD A2 SZA CLA /DON'T INCR IF THIS IS LAST ISZ X2 JMP TBSCNI LOCTEM, SPCCNT, 0 /CODE TO EXPAND LEADING SPACE FOR FORTRAN LINE CONTINUATION EXPCNT, -4 TBFEXP, TAD EXPCNT /WE NEED 4 PLUS THE 1 WE HAVE DCA LOCTEM /IT IS AVAILABLE TAD [" ] INSERT /PUT THEM THERE ISZ LOCTEM JMP .-3 JMP TBSAV /SAVE THIS ONE TOO /SWITCH THE AUTOTAB TRIFLOP TBSWSW, TAD TBSWT /IF IT WAS 0 OR 1 IT IS HERE NOW SMA SZA /SKIP IF -1 OR 0 CLL STA RAL /ACC=-2 IAC /ROLL THE TRIFLOP DCA TBSWT /THIS RESETS TO -1 MAINGO /NOT MUCH TO IT FTFLG=TBSWT /IT ACTS AS BOTH TBCOMQ, 0 /COUNT FOR COMMAS / RELEASE THE USR FROM CORE USROUT, 0 CLA CIF 10 JMS I [200 11 JMP I USROUT PAGE
TBSEND, TAD X2 /END OF LINE SCAN DCA A1 /MOVE TO NONAUTO CDF 10 TAD I A1 /GET THE CURRENT CURSOR CHAR CDF TAD (-"" /LOOK OUT FOR " SNA CLA JMP TBSAV TAD TBCHR /GET THE NEW CHAR SORTJ /CHECK SOME MORE CHARS AUTOTB-1 TBSJMP-AUTOTB JMP TBSAV /COMMA TABBING DISABLED IF NOT HOME TBCSND, TAD TBCOMQ SZA CLA JMP TBSAV /ALSO IF COMMAS ON LINE /BUT NOTE THEY MAY BE AFTER " TAD TBSTLN /ADDR OF FIRST OF LINE DCA X2 CDF 10 TAD I X2 /SEE IF ITS A TAB CDF TAD (-211 SZA CLA JMP TBSAV /NO, JUST INSERT COMMA TBTBRM, TAD X2 /NOW DELETE TAB DCA A1 /BY MOVING ALL ELSE OVER IT CDF 10 TAD I X2 DCA I A1 CDF TAD A1 TAD A2 /ONLY UP TO THE CURSOR SZA CLA JMP TBTBRM TAD TBCHR /STICK THE COMMA IN THE VACANCY CDF 10 DCA I A1 /THE SPACE IS OPEN CDF TBCMA1, TAD [211 /NOW INSERT A TAB DCA TBCHR JMP TBSAV TBSLSH, TAD CTR /SLASH AUTO TABBING TAD MTABC /HOW FAR TO COMMENT TAB? SMA JMP TBSLS1 /WE ARE ALREADY THERE STL RAR /SEE HOW MANY TABS TO ENTER STL RAR STL RAR DCA TBSTLN /KEEP THE COUNT TAD [211 INSERT ISZ TBSTLN /INSERT THAT MANY JMP .-3 JMP TBSAV /GO GET THE SLASH TBSLS1, CLA TAD [240 INSERT JMP TBSAV /AND THE SLASH TBSTLN, 0 /START OF LINE SAVE MTABC, -32 /COMMENT COLUMN LFORFF, 0 /WATCH FOR LPSTPC OR FF DCA LFORF1 /SAVE CHAR TAD LFORF1 TAD LPSTPC /LINE FEED OR FF SNA CLA JMP LFORF2 /SKIP RTN IF YES TAD LFORF1 /CHECK FOR FORM FEED TAD [-214 SNA CLA LFORF2, ISZ LFORFF /SKIP RTN IF LF OR FF JMP I LFORFF LFORF1, TBEOLQ, 0 /CHECK FOR LF OR FF TAD [-212 SZA TAD (212-214 SZA CLA ISZ TBEOLQ /SKIP IF NOT JMP I TBEOLQ / <, START OF REPEAT BLOCK REPEAT, TAD ITERFG /IN AN ITERATION ALREADY? SZA CLA JMP REPERR /YES, GIVE REPEAT ERROR TAD CMDN /HOW MANY TIMES TO REPEAT? SNA STA /IF ZERO, ASSUME 1 SMA CIA /MAKE NEG CTR IF POSITIVE DCA ITERCT /SAVE REPEAT CTR STA DCA ITERFG /WE ARE IN AN ITERATION TAD CMDPTR /SAVE CMD LINE PTR DCA ITERPT CMDGO REPERR, DCA ITERFG ERRORM SIXBIT \RE\ / >, END OF REPEAT BLOCK ENDREP, TAD ITERFG /ARE WE IN AN REPEAT BLOCK? SNA CLA CMDGO /NO, IGNORE THE COMMAND ISZ ITERCT /YES, DONE ALL REPEATS? JMP .+3 DCA ITERFG /YES, CLEAR FLAG CMDGO /GET NEXT COMMAND TAD ITERPT /NO, RESET PTR TO DO REPEAT AGAIN DCA CMDPTR CMDGO /GO REPEAT THEM ITERFG, 0 ITERCT, 0 ITERPT, 0 / GET A CHAR FROM COMMAND LINE GETCX, 0 CLA TAD I CMDPTR SZA CLA /IF END OF LINE DON'T INDEX ISZ CMDPTR /PRE-INDEXING TAD I CMDPTR JMP I GETCX RF6, ERROR /DISPLACED CODE FROM READ FORWARD SIXBIT \NF\ /NO EOF BEFORE END OF BLOCKS TAD [PLYGE DCA FCP TAD [EOF PUSHF JMP RF4 /GO BACK TO RTN HOME PAGE
/ BASIC ROUTINES FOR SCROLLING / MOVE FORWARD ONE CHAR MOVFX, 0 DELFC JMP I MOVFX /NO MORE CHARS TAD CHAR PUSHB ISZ MOVFX JMP I MOVFX / MOVFL MOVE FORWARD ONE LINE MOVFLX, 0 MOVF JMP I MOVFLX TAD CHAR FFLFQ /WATCH FOR LPSTPC OR A FF JMP MOVFLX+1 KEYQ /OP CALLING? ISZ MOVFLX JMP I MOVFLX / MOVB BACKWARD ONE CHAR MOVBX, 0 DELBC JMP I MOVBX /NO MORE CHARS PUSHF /CHAR IN AC ISZ MOVBX JMP I MOVBX / MOVBL BACKWARD ONE LINE MOVBLX, 0 JMS MOVBX JMP I MOVBLX TAD CHAR FFLFQ JMP MOVBLX+1 KEYQ /OP CALLING? ISZ MOVBLX JMP I MOVBLX / DELETE CHAR BACKWARD DELBCX, 0 JMS POPFX /GET THE NEXT CHAR AND CHECK FOR EOF DCA DBC2 TAD DBC2 /CAREFULLY PUT IT BACK PUSHF TAD DBC2 TAD [-EOF /CHECK FOR AN EOF SNA CLA JMP DBC4 /GO SEE ABOUT FWDBLK DBC41, CLA CLL TAD BCP /CHECK FOR NEED TO READ MORE TAD [-PLYG-BUFC+1 SNL CLA JMP DBC1 /GO READ A BLOCK DBC3, JMS POPBX /GET A CHAR DCA DBC2 JMS POPBX DCA CHAR TAD CHAR PUSHB TAD DBC2 /RTN WITH FIRST CHAR IN AC ISZ DELBCX JMP I DELBCX DBC4, ONE /SEE IF WE CAN SHRINK TAD BKDBLK /FWDBLK CLL CMA /BUT NOT IF WITHIN TWO OF BKDBLK TAD FWDBLK SNL CLA /_ JMP DBC41 /OK RTN STL CLA RTL /PUT TWO ON FROM BKDBLK TAD BKDBLK DCA FWDBLK JMP DBC41 /OK GO BACK FOR CHAR DBC2, 0 DBC1, TAD BCP TAD [-PLYG+1 SNA CLA JMP I DELBCX /NO MORE CHARS LEFT TAD BKDBLK CMA /-(BKDBLK+1) TAD FMINB SNA CLA JMP DBC3 /NO MORE BLOCKS TO READ TAD BCP /SEE IF WE SHOULD WRITE FWD CIA TAD FCP STL TAD (-BUFC^2 /ASSURE TWO BUFFERS OF SPACE SZL SNA CLA WFWD /WE MUST WRITE FIRST JMS RBKWX /READ A BLOCK JMP DBC3 / DELETE A CHAR FORWARD DELFCX, 0 CLA TAD FCP /CHECK FOR EMPTY FORWARD PLYG TAD [-PLYGE+1 SNA CLA /ANY CHARS LEFT? JMP DFC1 /NO, READ A BLOCK DFC3, JMS POPFX DCA CHAR TAD CHAR TAD [-EOF SZA CLA JMP DFC2 /OK NOT EOF TAD CHAR PUSHF /PUT EOF BACK JMP I DELFCX DFC2, ISZ DELFCX JMP I DELFCX DFC1, TAD BCP /FORWARD PLYGROUND EMPTY CIA /READ MORE TAD FCP STL TAD (-BUFC^2 /ASSURE TWO BUFFERS OF CHARS TO ENTER SZL SNA CLA WBKW RFWD JMP DFC3 / POP FORWARD INSIDE PLYG POPFX, 0 CLA CDF 10 TAD I FCP CDF JMP I POPFX / POP BACKWARDS INSIDE PLYG POPBX, 0 CLA TAD BCP DCA POPFX STA TAD BCP DCA BCP CDF 10 TAD I POPFX CDF JMP I POPBX PAGE
/ POP FORWARD CHAR POPFCX, 0 ISZ FCC /INDEX COUNT NOP CLA TAD FCF SMA SZA JMP PPF3 /GET CHAR 3 SNA CLA JMP PPF2 /C2 DCA FCF /C1, SET TO C2 CDF 10 TAD I FCA /C1 DCA PFC1 ISZ FCA TAD I FCA /C2 DCA PFC2 CDF ISZ FCA /NEXT ADDR TAD PFC1 /BUILD C3 AND [7400 CLL RTR;RTR DCA PFC3 TAD PFC2 AND [7400 CLL RTL;RTL;RAL TAD PFC3 DCA PFC3 TAD PFC1 /CLEANUP OTHER TWO CHARS AND [377 DCA PFC1 TAD PFC2 AND [377 DCA PFC2 TAD PFC1 PPFR, AND [177 TAD [200 /SET PARITY DCA CHAR JMP I POPFCX PPF2, ONE /CHAR 2, SET C3 DCA FCF TAD PFC2 JMP PPFR PPF3, STA /CHAR3, SET TO C1 DCA FCF TAD PFC3 /GET CHAR 3 JMP PPFR PFC1, 0 PFC2, 0 PFC3, 0 / PUSH FORWARD CHAR PSHFCX, 0 STA /-1 TO COUNT TAD FCC DCA FCC TAD FCF /CHECK FLAG SPA JMP PSF1 /C1 SZA CLA JMP PSF3 /C3 STA /C2, SET TO C1 DCA FCF TAD CHAR /STORE IN C1 DCA PFC1 STA TAD FCA DCA FCA TAD PFC3 RTR;RTR;RAR AND [7400 TAD PFC2 CDF 10 DCA I FCA STA TAD FCA DCA FCA TAD PFC3 RTL;RTL AND [7400 TAD PFC1 DCA I FCA CDF JMP I PSHFCX PSF1, ONE /C1 SET TO C3 DCA FCF TAD CHAR DCA PFC3 JMP I PSHFCX PSF3, DCA FCF /C3 TAD CHAR DCA PFC2 JMP I PSHFCX / READ A BLOCK READX, 0 DCA RDB /SAVE BLOCK TAD I READX /ADD ISZ READX DCA RDA /SAVE ADDRESS JMS I MNHDLA /MAIN EDIT FILE HANDLER 210 /READ TWO PAGES FIELD 1 RDA, 0 /ADDRESS RDB, 0 /BLOCK HLT /FATAL ERROR CLA JMP I READX / WRITE A BLOCK WRITEX, 0 DCA WRB /BLOCK TAD LCKSW /SEE IF WE ARE LOCKED SZA CLA JMP I WRITEX /RTN, IGNORE COMMAND TAD I WRITEX /ADD ISZ WRITEX DCA WRA JMS I MNHDLA /MAIN EDIT FILE HANLER 4210 /WRITE TWO PAGES FIELD 1 WRA, 0 WRB, 0 HLT JMP I WRITEX PAGE
/ POP BACKWARDS CHAR POPBCX, 0 ISZ BCC /INDEX COUNT NOP CLA TAD BCF SPA JMP PPB1 /CHAR1 SNA CLA JMP PPB2 /C2 DCA BCF /C3,SET TO C2 STA /UNPACK 3 MORE TAD BCA DCA BCA CDF 10 TAD I BCA DCA PBC2 STA TAD BCA DCA BCA TAD I BCA DCA PBC1 CDF TAD PBC1 AND [7400 CLL RTR;RTR DCA PBC3 TAD PBC2 AND [7400 CLL RTL;RTL;RAL TAD PBC3 DCA PBC3 TAD PBC2 AND [377 DCA PBC2 TAD PBC1 AND [377 DCA PBC1 TAD PBC3 PPBR, AND [177 TAD [200 /SET PARITY DCA CHAR JMP I POPBCX PPB1, ONE /C1 SET C3 DCA BCF TAD PBC1 JMP PPBR PPB2, STA /C2, SET C1 DCA BCF TAD PBC2 JMP PPBR / PUSH BACKWARDS CHAR PSHBCX, 0 STA TAD BCC DCA BCC TAD BCF SNA JMP PSB4 /C2 SMA CLA JMP PSB3 /C3 PSB1, DCA BCF TAD CHAR DCA PBC2 JMP I PSHBCX PSB4, ONE /C2 SET C3 DCA BCF TAD CHAR DCA PBC3 TAD PBC3 RTL;RTL AND [7400 TAD PBC1 CDF 10 DCA I BCA ISZ BCA TAD PBC3 RTR;RTR;RAR AND [7400 TAD PBC2 DCA I BCA CDF ISZ BCA JMP I PSHBCX PSB3, STA DCA BCF TAD CHAR DCA PBC1 JMP I PSHBCX PBC1, 0 PBC2, 0 PBC3, 0 / PUSH FORWARD INSIDE PLYG PUSHFX, 0 DCA PUSHBX /SAVE CHAR TO PUSH STA TAD FCP /FCP IS AUTO DCA FCP TAD PUSHBX CDF 10 DCA I FCP CDF STA TAD FCP DCA FCP JMP I PUSHFX / PUSH BACKWARDS INSIDE PLAYGROUND PUSHBX, 0 CDF 10 DCA I BCP CDF 00 JMP I PUSHBX PAGE
/ READ A BLOCK FORWARD RFWDX, 0 CLA TAD FWDBLK /CHECK FOR FAILSAFE CLL CIA TAD FMAXB /MAX BLOCK OF FILE SNL CLA JMP RF6 /NO EOF BEFORE END OF BLOCKS JMS RDCHK /CHECK FOR BUFFER ROOM TAD FCP DCA X1 TAD BCP DCA X2 TAD FCP TAD [-PLYGE+1 SNA CLA JMP RF5 CDF 10 RF1, TAD I X1 /MAKE ROOM FOR BUFFER LOAD DCA I X2 TAD X1 TAD [-PLYGE+1 SZA CLA JMP RF1 CDF RF5, TAD FWDBLK READ BBUF ISZ FWDBLK STA /SET UP FOR POPFC DCA FCF TAD [BBUF DCA FCA TAD [-BUFC DCA FCC RF2, POPFC CDF 10 TAD CHAR SZA DCA I X2 CDF TAD CHAR TAD [-EOF SNA CLA JMP RF3 /GO PACK BUFFER TAD FCC SZA CLA JMP RF2 TAD X2 TAD [-PLYGE+1 SNA CLA JMP RF4 RF3, TAD [PLYGE-1 DCA FCP TAD X2 DCA A1 JMP RF32 RF31, CDF 10 /PACK DOWN TO END OF PLYG TAD I A1 CDF PUSHF STA TAD A1 DCA A1 RF32, TAD A1 /END CHECK CIA TAD BCP SZA CLA JMP RF31 RF4, JMP I RFWDX /RETURN / WRITE FORWARD FROM PLAYGROUND WFWDX, 0 CLA CLL TAD FCP TAD (-PLYGE+BUFC SZL CLA HLT /NOT ENOUGH ROOM FOR BUFFER LOAD JMS WRCHK /CHECK FOR BLOCK OVERWRITE STA /SET UP FOR PUSHFC DCA FCF TAD [BBUF+BUFL /1+LAST LOC OF BUFFER DCA FCA TAD [BUFC DCA FCC TAD [PLYGE-1 DCA A1 WF1, CDF 10 TAD I A1 /PACK THE BUFFER DCA CHAR CDF JMS PSHFCX STA TAD A1 DCA A1 TAD FCC SZA CLA JMP WF1 TAD [PLYGE-1 DCA A2 JMP WF3 /GO CHECK ADDRES FIRST WF2, CDF 10 TAD I A1 DCA I A2 CDF STA TAD A1 DCA A1 STA TAD A2 DCA A2 WF3, TAD A1 CIA TAD FCP SZA CLA JMP WF2 TAD A2 DCA FCP STA TAD FWDBLK DCA FWDBLK TAD FWDBLK WRITE BBUF /WRITE THE BLOCK JMP I WFWDX PAGE
/ READ BACKWARD INTO PLYG RBKWX, 0 JMS RDCHK /CHECK PLYG FOR ENOUGH ROOM TAD BKDBLK CIA /-(BKDBLK+1) TAD FMINB SZA SMA CLA HLT /NO BLK TO READ TAD FCP /PACK THINGS UP TO READ DCA A1 TAD BCP /SEE IF ANYTHING TO PACK TAD [-PLYG+1 SNA CLA JMP RB2 /EMPTY BACK PLYG TAD BCP /PACK THINGS TOGETHER TO READ DCA A2 RB1, CDF 10 TAD I A2 DCA I A1 CDF STA TAD A1 DCA A1 STA TAD A2 DCA A2 TAD A2 /END CHECK TAD [-PLYG+1 SZA CLA JMP RB1 RB2, TAD BKDBLK READ BBUF STA TAD BKDBLK DCA BKDBLK ONE /SET UP FOR POPBC DCA BCF TAD [BBUF+BUFL /ONE LOC BEYOND BBUF DCA BCA TAD [-BUFC DCA BCC RB3, POPBC TAD CHAR SNA JMP RB31 CDF 10 DCA I A1 CDF STA TAD A1 DCA A1 RB31, CLA TAD BCC SZA CLA JMP RB3 TAD [PLYG-1 DCA X2 TAD A1 DCA X1 JMP RB41 RB4, CDF 10 TAD I X1 /REOPEN PLYG DCA I X2 CDF RB41, TAD FCP CIA TAD X1 SZA CLA JMP RB4 TAD X2 /SET UP NEW BCP DCA BCP JMP I RBKWX /RETURN / WRITE FROM PLAYGROUND BACKWARDS WBKWX, 0 CLA CLL TAD BCP TAD [-PLYG-BUFC+1 /THERE MUST BE 1 BUFFER TO CHECK SNL CLA HLT /NOT ENOUGH FOR BUFFER JMS WRCHK ONE /SET UP FOR PUSHBC DCA BCF /FLAG TO C3 TAD [BBUF DCA BCA TAD [BUFC DCA BCC TAD [PLYG-1 DCA X1 WB1, TAD X1 /FAILSAFE CHECK FOR OTHER BUGGS CIA TAD BCP SNA CLA HLT /NOT ENOUGH TO WRITE FROM BPLYG CDF 10 TAD I X1 /GET CHAR FROM PLYG CDF DCA CHAR PUSHBC TAD BCC SZA CLA JMP WB1 TAD [PLYG-1 DCA X2 WB2, TAD X1 CIA TAD BCP SPA SNA CLA JMP WB3 CDF 10 /PACK PLYG DOWN TO END TAD I X1 DCA I X2 CDF JMP WB2 WB3, TAD X2 /FIX UP BCP DCA BCP ISZ BKDBLK /UP THE BLOCK TO WRITE TAD BKDBLK WRITE BBUF JMP I WBKWX WRCHK, 0 /CHECK FOR BLOCK TO WRITE IN TAD BKDBLK CLL CMA /-(BKDBLK+1) TAD FWDBLK SNL CLA HLT JMP I WRCHK PAGE
/ SHIFT THINGS DOWN TO MAKE ROOM SHIFTX, 0 CLA TAD INSINH /SEE IF WE SHOULD SHIFT ANYTHING SZA CLA HLT /WE ARE NOT SUPPOSE TO SHIFT CDF 10 /CHECK FOR END OF FILE TAD I [PLYGE-1 /END OF PLYG CDF TAD [-EOF SNA CLA JMP SHF39 TAD FWDBLK /WE WILL START AT FWDBLK TO SHIFT DCA SIB /SHIFT INPUT BLOCK TAD SIB DCA SOB /SHIFT OUTPUT BLOCK JMS RSIB /READ SIB INTO A BUFFER SHF19, ONE /SET TO C3 FOR PUSHBC DCA BCF TAD [BBUF DCA BCA TAD [BUFC /SET UP COUNT FOR BUFFER DCA BCC SHF1, POPFC TAD CHAR /PACK OUT ZERO CHARS SNA CLA JMP SHF13 PUSHBC TAD CHAR TAD [-EOF SNA CLA JMP SHF2 SHF13, TAD FCC /CHECK BUFF EMPTY SZA CLA JMP SHF11 /GO CHECK OUTPUT TAD SIB CLL CIA TAD FMAXB SNL CLA JMP SHF12 /ERROR NO EOF IN FILE JMS RSIB /READ A NEW BLOCK SHF11, TAD BCC /CHECK OUTPUT FULL SZA CLA JMP SHF1 TAD SOB /WATCH FOR OVER RUN CIA TAD SIB SNA CLA HLT /OVER RUN OF SIB BY SOB ISZ SOB TAD SOB WRITE BBUF JMP SHF19 /BACK TO SET UP FOR PUSH SHF12, ERROR /NO EOF FOUND BIFORE END OF MS SIXBIT \NE\ TAD BCC /SEE IF OUTPUT FULL SNA CLA POPBC /YES DUMP A CHAR TAD [EOF /STORE EOF THERE DCA CHAR PUSHBC JMP SHF21 RSIB, 0 TAD SIB READ /READ SIB INTO ABUF RSIB1, ABUF ISZ SIB /NEXT BLOCK TO READ STA /SET UP FOR POPFC DCA FCF TAD [-BUFC DCA FCC TAD RSIB1 DCA FCA JMP I RSIB / DONE WITH SHIFT DOWN SHF2, PUSHBC /FLUSH THE EOF OUT OF THE TEMPS PUSHBC /THE TEMPS OF PUSHBC ROUTINE TAD SOB /SEE IF THERE IS ROOM TO WRITE IT CLL CMA /-(SOB+1) TAD FMAXB SNL CLA JMP SHF21 ISZ SOB TAD SOB /WRITE OUT LAST BUFFER WRITE BBUF SHF29, ISZ FWDBLK /WE HAVE ONE MORE BLOCK TO PLAY WITH JMP I SHIFTX /RTN SHF39, TAD FWDBLK /CHECK FOR NO WA LEFT CLL CMA /-(FWDBLK+1) TAD FMAXB SZL CLA JMP SHF29 /OK TAD FMAXB /RESET FWDBLK DCA FWDBLK /NO GO GIVE ERROR AND LOCK KEYBOARD SHF254, STA /SET SWITCH FOR INPUT INHIBIT DCA INSINH /SINCE NO FOOM IN AREA ERROR /SIGNAL ERROR SO HE KNOWS TO OPEN SIXBIT \FL\ /TO DUMP SOME OF THE FILE JMP SHF29 RDCHK, 0 /CHECK FOR ENOUGH ROOM TO READ CLA TAD BCP CIA TAD FCP CLL TAD [-BUFC SNL CLA HLT /NOT ENOUGH ROOM JMP I RDCHK / GET CURSOR CHAR CURSHX, 0 TAD CURSOR TAD BCP DCA A1 CDF 10 TAD I A1 CDF DCA CHAR TAD CHAR JMP I CURSHX PAGE
SHF21, TAD FMAXB /SETUP BLOCKS FOR BACK SHIFT DCA SIB ONE TAD FMAXB DCA SOB STA /SETUP FOR PUSHFC DCA FCF TAD [BBUF+BUFL DCA FCA TAD [BUFC DCA FCC SHF22, POPBC JMS PSHFCX TAD BCC /WATCH FOR BBUF EMPTY TAD [-BUFC SZA CLA JMP SHF24 TAD SIB CIA TAD FWDBLK SNA CLA JMP SHF25 /WE ARE BACK DUMP OUTPUT TAD SIB READ ABUF STA TAD SIB DCA SIB ONE /SETUP FOR POPBC DCA BCF TAD (ABUF+BUFL DCA BCA DCA BCC /ZERO SHF24, TAD FCC SZA CLA JMP SHF22 STA TAD SOB DCA SOB TAD SOB CIA TAD FWDBLK SMA SZA CLA HLT /ATTEMPT TO WRITE BEFORE FWDBLK TAD SOB WRITE BBUF STA /SETUP FOR PUSHFC DCA FCF TAD [BBUF+BUFL DCA FCA TAD [BUFC DCA FCC JMP SHF22 / PACK PLAYGROUND BACKWARD SHF25, TAD FCP DCA X1 /AUTO XR TAD BCP DCA X2 SHF251, TAD X1 /CHECK FOR END OF PLYG TAD [-PLYGE+1 SNA CLA JMP SHF252 CDF 10 TAD I X1 DCA I X2 CDF JMP SHF251 SHF252, POPFC /GET A CHAR FORM BBUF CDF 10 TAD CHAR /CHARS ARE PASSED IN CHAR DCA I X2 CDF TAD X2 /ANOTHER SCREWUP CHECK TAD (-PLYGE SNA CLA HLT /TOO MUCH IN BUFFER TAD FCC /CHECK FOR BBUF EMPTY TAD [-BUFC SZA CLA JMP SHF252 TAD [PLYGE-1 /SPREAD PLYG AGAIN DCA FCP TAD X2 /DONT CONTINUE TO USE AUTO DCA A2 SHF253, TAD A2 CIA TAD BCP SNA CLA JMP SHF254 /END OF UNPACK CDF 10 TAD I A2 /GET A CHAR CDF PUSHF /TAKES CHAR IN AC STA /BACK UP ADD TAD A2 DCA A2 JMP SHF253 /GO CHECK ADDRESS / CHARACTER DISPATCH ROUTINE SORTJX, 0 CIA DCA SRJ2 TAD I SORTJX ISZ SORTJX DCA X1 TAD I SORTJX DCA SRTJTM /SAVE THE OTHER PARAMETER CDF 10 /LISTS IN FIELD 1 SRJ1, TAD I X1 SNA JMP SRJ3 TAD SRJ2 SZA CLA JMP SRJ1 TAD X1 TAD SRTJTM DCA SRJ2 TAD I SRJ2 DCA SRJ2 CDF 00 /BACK HERE NOW JMP I SRJ2 SRJ3, ISZ SORTJX CDF 00 JMP I SORTJX SRJ2, 0 SRTJTM, 0 PAGE
IFG .-6000 <PRINTX TOO MUCH BELOW 6000> *6000 VC, 0 HC, 0 IFE MACHINE-PDP12 <DSC1, 0> /INDEX REGISTER FOR PDP12 IFE MACHINE-PDP8E <DSC1=XAD> /INDEX REGISTER FOR PDP8E / DISPLAY A CHARACTER, ENTER WITH 8-BIT ASCII IN ACC DSCH, 0 TAD (-213 SNA JMP DSCLF-1 IAC SNA JMP DSCLF TAD (212-240 SNA JMP DSCSP TAD [240 AND [177 CLL RAL IFE MACHINE-PDP12 < TAD (PWORDS&1777!2000 DCA DSC1 TAD VC LINC PWORDS%2000 LDF 4 /SET THE SEGMENT LMODE /STAY IN PMODE FOR ABOVE CALCULATION DSC DSC1 /FIRST WORD LDA I;-3 ADD HC /BACKUP A BIT STC HC ADD VC /RELOAD VERTICAL COORD DSC I DSC1 /SECOND WORD PDP;PMODE CDF /RESET THE FIELD DSCH2, CLA > / DISPLAY ROUTINE FOR POINT PLOT SCOPES IFE MACHINE-PDP8E < TAD (PWORDS-1 DCA DSC1 CDF 10 JMS OUTC JMS OUTC CDF /RESET THE FIELD CLA STL IAC RAL /3 DSCH2, TAD HC DCA HC > DSCH3, ISZ HC /OVERFLOW -> LINEFEED JMP I DSCH TAD (6^2^SIZ /INDENT 2 SPACES DSCLF, TAD [HC0 /RESET HCOORD FOR A NEW LINE DCA HC TAD (-40^SIZ /LINE FEED, GO DOWN SCOPE 1 LINE TAD VC DCA VC TAD VC TAD (-340^SIZ SZA CLA /THIS IS OBSCURE JMP I DSCH TAD (40^SIZ TAD DSPSV /SINCE THIS IS NEVER RESET! DCA DSPSV JMP I DSCH DSCSP, TAD (6^SIZ-1 /DISPLAY A SPACE IFE MACHINE-PDP12 < TAD HC DCA HC > JMP DSCH2 / ARE WE AT END OF DISPLAY? DSE, 0 TAD DSCURA /TIME TO DISPLAY CURSOR? TAD DPTR1 /CURRENT CHAR POINTER SZA CLA JMP DSE1 /NO, CHECK DISPLAY END TAD [-6 /YES, DISPLAY CURSOR DCA DSC1 IFE MACHINE-PDP8E </MOVE BETWEEN CHARS IFE VC8E <TAD (-1000-2> IFN VC8E <CMA CLL RAL > TAD HC /SET HCOORD DILX CLA > TAD VC AND [7760 TAD [6^SIZ /HALF A CHAR UP DSE2, TAD (2^SIZ IFE MACHINE-PDP12 < LINC;LMODE DIS HC PDP;PMODE > IFE MACHINE-PDP8E < DILY DIXY > ISZ DSC1 JMP DSE2 CLA DSE1, TAD OLDBCP /END OF SCOPE DISPLAY? CIA TAD DPTR1 SZA CLA JMP I DSE /NO, RETURN JMP DSPY /YES, START OVER DSCURA, 0 /(-) CURSOR ADDRESS / DISPLAY CURRENT COMMAND STRING DSCMD, 0 TAD [HC0 /INITIALIZE COORDINATES DCA HC TAD (-VC0 DCA VC JMS DSCH /DISPLAY MARKER TAD [6^SIZ TAD HC /INDEX HC FOR SPACE DCA HC TAD [CMDBUF-1] DCA DSCMXR DSCMD1, TAD I DSCMXR /USE AUTO-XR SNA JMP I DSCMD /RETURN AT END JMS DSCH /DISPLAY CHAR JMP DSCMD1 / ADJUST SCALING FOR A 9- OR 10-BIT D/A CONVERTER IFE MACHINE-PDP12 < SIZ=1 HC0=7024 VC0=260 > IFE MACHINE-PDP8E < SIZ=2 HC0=6050 VC0=660 / POINT PLOT DISPLAY TO SIMULATE A PDP12 OUTC, 0 /FOR VC8E STYLE HARDWARE TAD I DSC1 MQL JMS PLTC JMS PLTC JMP I OUTC PLTC, 0 /MOVE THE BEAM AROUND IFE VC8E <TAD (-1000+2> IFN VC8E <CLA STL RTL > TAD HC DILX IFE VC8E < TAD (1000) > DCA HC TAD [-6 DCA DSE TAD VC DOTS, DILY TAD (4 SWP CLL RAR SWP SZL DIXY ISZ DSE JMP DOTS CLA JMP I PLTC / DEFINE IOT'S FOR THE 8/E IFE VC8E < DILC=6050 DILX=6053 DILY=6054 DIXY=6055 > IFN VC8E < DILX=6051 DILY=6052 DIXY=6053 DINS=6064 > MQL=7421 SWP=7521 > PAGE
/ THE DISPLAY ROUTINE DSPY, CLA TAD BCP CIA TAD OLDBCP /DISPLAY CHANGED? SNA CLA JMP DS21 /NO, GO START UP DISPLAY TAD LNSFRM /DO PRESCAN FOR DISPLAY START ADD DCA DCTR /NO. OF LINES ON SCOPE TAD BCP DCA DPTR1 /END OF DISPLAY DS1, TAD DPTR1 TAD [-PLYG+1 SNA CLA /BEGINNING OF BUFFER? JMP DS2 /YES, SET UP TO DISPLAY CDF 10 TAD I DPTR1 /CHECK CHAR FOR A LINE FEED CDF EOLQ /CHECK FOR FF OR LF ISZ DCTR /IT IS, ALL LINES OUT? SKP JMP DS2 /YES, GO SETUP DISPLAY STA /NO,DECREM ADDRESSES TAD DPTR1 DCA DPTR1 JMP DS1 DS2, TAD DPTR1 DCA DSTRT /START OF DISPLAY TAD BCP /SAVE OLD BCP DCA OLDBCP DS21, TAD BCP TAD CURSOR CIA DCA DSCURA /SET UP NEW CURSOR ADDRESS (-) DS22, TAD CMDSW /DISPLAY THE COMMAND LINE SZA CLA /IF THERE IS ONE JMS DSCMD TAD DSTRT DCA DPTR1 /REINTIIALIZE TO START OF DISPLAY TAD DSPSV /RESET VERTICAL COORDINATE DCA VC JMS DRTN /MAYBE RETURN FROM TYPE OR KBD DS3, TAD [HC0 /INIT HC AT START OF LINE DCA HC JMS DSCH /DISPLAY THE MARKER TAD [6^SIZ TAD HC /"DISPLAY" A SPACE DCA HC DS31, JMS DSE /END OF ENTIRE SCOPE? JMS DRTN /MAYBE RETN FROM TYPE OR KBD ISZ DPTR1 /INCREMENT CHAR PTR CDF 10 TAD I DPTR1 /GET NEXT CHAR TO DISPLAY CDF TAD [-211 SPA JMP DS311 /DISPLAY A CONTROL CHAR TAD (211-215 SPA JMP DS34 /SORT OUT 211-214 SNA TAD DTABFG /SEE ABOUT A CR TAD [215 /REGENERATE ORIGINAL CHAR SMA /DON'T DISPLAY CR DS37, JMS DSCH /GO DISPLAY CHAR CLA JMP DS31 DS36, TAD (214 /WEIRD FORM FEED CHAR JMS DSCH /FALL THRU TO LINE FEED DS33, TAD HC /LINE FEED, GO DOWN A LINE TAD (-HC0 SNA CLA /AT BEGINNING OF LINE? JMP DS3 /YES, RESET FOR NEW LINE TAD [212 /NO, DISPLAY LINE FEED JMS DSCH JMP DS3 DS35, TAD DTABFG /SEE HOW TO DISPLAY TAB SMA CLA JMP DS311 /JUST AS CHAR TAD HC /DISPLAY A TAB TAD (740^SIZ /80 CHARS X WIDTH DS351, TAD (-60^SIZ /8 CHARS PER TAB SMA /ARE WE AT TAB STOP YET? JMP DS351 /NO, KEEP TRYING CIA TAD HC SMA DSJMP, JMP DS352 /TAB CAN'T FIT ON LINE, GO DOWN DCA HC /SAVE NEW H COORD JMP DS31 JMP DS35 /TAB JMP DS33 /LF JMP DS37 /NL JMP DS36 /FF DS352, CLA STL RTL /213-211 DS311, TAD [211 /DISPLAY CONTROL CHAR. JMP DS37 DS34, TAD DSJMP /AC= CHAR-215 DCA .+1 DCTR, JMP . DPTR1, 0 DSPSV, VC0 /TOP OF SCOPE RESET DSTRT, 0 OLDBCP, 0 / SET NUMBER OF LINES FOR SCOPE NUMLNS, TAD CMDN /GET THE ARG AND (17 /TRIM FOR SAFETY CIA /DSPY LIKES IT MINUS DCA LNSFRM DCA OLDBCP /IF WE ZAP THIS THE DSPY WILL WAKE UP CMDGO LNSFRM, -6^SIZ /LOTS OF LINES / DISPLAY COROUTINES DRTN, DSPY /INITIALIZED CLA CLL JMP I DGO DGO, 0 CLA CLL JMP I DRTN PAGE
/ DECODE A FILE SPECIFICATION DECODX, 0 CLA DCA DCDEV /ZERO THE DEVICE NAME DCA DCDEV+1 DCDZNM, DCA DFN /ZERO FILENAME AND EXT DCA DFN+1 DCA DFN+2 DCA DFN+3 TAD (DFN /SET UP ADDRESS DCA DCDA TAD [-6 /CHARS IN NAME DCDE1, DCA DCDC DCA DCDCH DCDNXT, GETC DCA CHAR TAD CHAR SORTJ DCDCS-1 DCDJS-DCDCS TAD DCDC /DO WE HAVE ALL THE CHARS SNA CLA JMP DCDNXT ISZ DCDC /UP THE COUNT NOP TAD CHAR AND [77 ISZ DCDCH /TRIP SWITCH FOR HALF JMP DCDSVL /SAVE LEFT CHAR TAD I DCDA /SAVE RIGHT CHAR WITH LEFT DCA I DCDA ISZ DCDA /INCREM ADDRESS PTR JMP DCDNXT DCDSVL, CLL RTL;RTL;RTL/SAVE LEFT IN UPPER HALF DCA I DCDA STA /SET FOR RIGHT NEXT DCA DCDCH JMP DCDNXT DCDV, TAD DFN /MOVE FILENAME TO DEVICE NAME DCA DCDEV TAD DFN+1 /TWO WORDS, FOUR CHARS DCA DCDEV+1 JMP DCDZNM /GO BACK AND ZAP THE NAME DCDEXT, TAD (DFN+3 /SET UP ADDRESS AND COUNT FOR EXTENSION DCA DCDA CLL STA RAL /TWO CHAR EXTENSION JMP DCDE1 /HOP INTO FOR COUNT AND HALF SETUP DCDLNG, JMS GETNMX /GET NUMBER IN COMMAND STRING DCA DCDL /SAVE FILE LENGTH JMP DCDNXT DCDEND, JMP I DECODX /END OF THE COMMAND ON ALTMODE DCDA=A1 /ADDRESS DCDC=CTR /COUNT DCDCH=A2 /CHAR HALF / RELEASE ALLOCATION FOR A HANDLER FROM CORE RELSEH, 0 AND [7600 SNA JMP I RELSEH /DON'T RELEASE ZERO ADDRESSES DCA RELSA /SAVE ADDRESS OF ENTRY TO HANDLER TAD RELSA /SEE IF WE ARE RELEASING THE SYS TAD [-7600 SNA CLA JMP I RELSEH /IT NEED NOT BE RELEASED TAD RELSA TAD (-HNDLRS /THE HANDLERS AREA CLL RTL;RTL;RTL TAD (HDALTB DCA LHAD STA TAD I LHAD /DECREMENT USE COUNT SPA CLA DCA LHAPGS /SAVE TEMPORARILY TAD LHAPGS /SEE IF IST A TWO PAGE TAD (-3777 SNA CLA DCA LHAPGS /A TWO PAGER THAT WENT TO ZERO STL CLA RAR /THE BLOODY 4000 AND I LHAD /TELLS USE IF ITS TWO PAGES SNA CLA JMP RELS1 /NOT A TWO PAGE ONE TAD LHAD DCA LHAD1 STA TAD I LHAD1 /DECREMENT USE COUNT FOR SECOND PAGE SPA CLA DCA I LHAD1 RELS1, TAD LHAPGS /SAVE THE COUNT FOR FIRST PAGE DCA I LHAD JMP I RELSEH RELSA=CTR / ABORT THE CURRENT MAIN EDIT FILE ABORT, TESTC /MAKE SURE OF HIS SPELLING ASCII \BORT\ JMP ABORT1 /GO DO IT IN EMAKE / LOCK COMMAND TO PROTECT A FILE FROM MODIFICATION LOCKC, TESTC /CHECK THE BLOCK'S SPELLING ASCII \OCK\ TAD MAINF /DO WE HAVE A MAIN FILE? SZA CLA JMP LCKER /A NONO STA LCK1, DCA LCKSW CMDGO CLOCKC, TESTC /UNLOCK THE FILE ASCII \LOCK\ /CHECK THE SPELLING JMP LCK1 LCKER, ERRORM SIXBIT \LK\ PAGE
/ LOAD A HANDLER INTO CORE LHNDLR, 0 DCA LHNRQ /SAVE ARG FOR RESET REQUEST CIF 10 /LOCK USR IN CORE JMS I [7700 10 /LOCK TAD LHNRQ /SEE IF WE SHOULD RESET SYSTEM TABLES SZA CLA JMP LHN1 /DO NOT RESET DCA AIHDLA /RESET ENTRY ADDRESSES DCA AOHDLA DCA MNHDLA DCA HDALTB /OUR PRIVATE RESIDENCY TABLE DCA HDALTB+1 /2 PAGES FOR EVERYONE DCA HDALTB+2 /3 PAGES FOR PDP-12 CIF 10 JMS I [200 13 /SYSTEM TABLE RESET LHN1, TAD DCDEV /GET DEVICE NAME SZA JMP LHN2 /WE DON'T HAVE TO ASSUME ANYTHING TAD ("D_6+"S-300 /ASSUME DSK: DCA DCDEV TAD ("K_6 DCA DCDEV+1 TAD DCDEV LHN2, DCA LHNDN-1 /OUR OWN CALL TAD DCDEV+1 DCA LHNDN CIF 10 JMS I [200 /SEE IF HANDLER IS ALREADY IN CORE 12 /INQUIRE 0 /DEVICE NAME LHNDN, 0 /HANDLER DEVICE NAME=>NUMBER LHNIA, 0 /INQUIRE ADDRESS JMP LHNDER /ERROR, NO HANDLER BY THAT NAME TAD LHNDN /MOVE THE DEVICE NUMBER TO PAGE ZERO DCA DEVNUM TAD LHNIA /LOOK AT THE ADDRESS SZA JMP LHN3 /THE HANDLER IS ALREADY IN CORE JMS LHALOC /GET A PAGE FOR HANDLER LHN5, DCA LHNIA1 /SAVE PAGE ADDRESS TAD LHNDN /GET DEVICE NUMBER FOR USR CIF 10 JMS I [200 1 /FETCH HANDLER LHNRQ, LHNIA1, 0 JMP LHN4 /TWO PAGES NECESSARY TAD LHNIA1 /GET ENTRY JMP I LHNDLR LHN4, TAD LHNIA1 /GET ADDRESS TO RELEASE RELESE /RELEASE CORE ALLOC FOR HANDLER STA /WE WANT TWO PAGES THIS TIME JMS LHALOC /GET TWO PAGES IAC /SET USE TWO PAGES BIT JMP LHN5 /GO BACK AGAIN LHN3, JMS LHAUSE /SET ALLOCATION BITS FOR HANDLER TAD LHNIA /GET THE ENTRY JMP I LHNDLR /RTN / ALLOCATE SPACE FOR A HANDLER LHALOC, 0 DCA LHAPGS /SAVE PAGES HE WANTS -1 FOR 2 TAD (HDALTB DCA LHAD LHAL2, TAD I LHAD /LOOK AT THE USE COUNTS SNA JMP LHAL1 /GO ALLOCATE A PAGE LHAL4, ISZ LHAD /POINT TO NEXT ALLOCATION WORD RTL /SEE IF WE ARE DONE SNL CLA JMP LHAL2 LHALER, ERROR /NO SPACE TO ALLOCATE HANDLER SIXBIT \HA\ LHNDER, DISMISS /DISMISS USR FROM CORE ERRORM /GO MAKE AN LH ERROR SIXBIT \LH\ LHAL1, ISZ LHAPGS /WE FOUND A SPACE JMP LHAL3 /JUST 1 PAGE ONE /WE WANTS TWO PAGES THE HOG TAD LHAD /CHECK NEXT PAGE DCA LHAD1 TAD I LHAD1 /LOOK THERE SZA CLA JMP LHAL4 /GO LOOK SOME MORE /BOY IS THIS GUY HARD TO PLEASE ISZ I LHAD1 /INDEX USE COUNT FOR NEXT PAGE STL CLA RAR /4000 FOR TWO PAGE HANDLER DCA I LHAD LHAL3, ISZ I LHAD /SET USE COUNT FOR FIRST PAGE TAD LHAD /MAKE ADDRESS OF HANDLER TAD (-HDALTB CLL RTR;RTR;RTR TAD (HNDLRS /THE HANDLERS ARE HERE JMP I LHALOC LHAD=A1 /INTO TABLE LHAD1=A2 /USE SOME TEMPS AGAIN LHAPGS=CTR /NUMBER OF PAGES HE WANTS -1 FOR 2 / SET THE USE COUNTS FOR A HANDLER WE HAVE LHAUSE, 0 AND [7600 DCA LHAUA /SAVE THE HANDLER ADDERSS TAD LHAUA /SEE IF ITS THE SYSTEM HANDLER TAD [-7600 SNA CLA JMP I LHAUSE /WE DON'T NEED TO BOTHER WITH SYS TAD LHAUA TAD (-HNDLRS CLL RTL;RTL;RTL AND (3 /WE DON'T USE MANY PAGES--SAFETY CHECK TAD (HDALTB /MAKE ADDRESS IN ALLOC TABLE DCA LHAD ISZ I LHAD STL CLA RAR AND I LHAD SNA CLA JMP I LHAUSE ISZ LHAD /BUMP SECOND ALLOCATION WORD OF ISZ I LHAD /TWO PAGES JMP I LHAUSE LHAUA=CTR /ADDRESS OF HANDLER / THE HANDLER ALLOCATION TABLE / PDP12 USERS GET THREE PAGES HDALTB, ZBLOCK 7600-HNDLRS%200 7777 /END OF TABLE PAGE
HNDLRS=. /THE AREA FOR DEVICE HANDLERS *.+600 /3 PAGES ON PDP-12 IFG .-7600 <PRINTX FIELD 0 BEYOND 7600> / PAGE ZERO LITERALS FIELD 1
/PATTERN WORDS FOR DISPLAY, BY C. G. ROBY *AOBUF+BUFL IFE MACHINE-PDP12 </PWORDS FOR PDP12 PWORDS, 3400; 1076 /0:MARK FOR BEGINNING OF LINE 2121; 2171 /1 7121; 2121 /2 4242; 4742 /3 4247; 4242 /4 2020; 7020 /5 2070; 2020 /6 4163; 6341 /7 1010;1034 /10 0103; 0301 /11 7610; 0034 /12 4160; 6041 /13 0330; 0745 /14:FORM FEED 4507; 3003 /15 3700; 0202 /16 3700; 1010 /17 4060;6040 /20 0160; 0340 /21 4003; 6001 /22 7777; 7777 /23 7777; 7777 /24 7777; 7777 /25 7777; 7777 /26 7777; 7777 /27 7777; 7777 /30 7777; 7777 /31 7777; 7777 /32 1604; 0416 /33: ALTMODE -- ESC 7777; 7777 /34 7777; 7777 /35 7777; 7777 /36 7777; 7777 /37 0000; 0000 /40:SPACE 0000; 0075 /41:X! 0000; 7070 /42:" 7714; 1477 /43:NUM SIGN 7121; 4657 /44:DOLLAR SIGN 1362; 2364 /45:PERCENT 2626; 0551 /46: & 4000; 0020 /47:SINGLE QUOTE 4100; 0036 /50:( 3600; 0041 /51:) 5050; 0020 /52:* 3704; 0404 /53:+ 0600; 0005 /54:, 0404; 0404 /55:- 0300; 0003 /56:. 1002; 2004 /57:/ 5136; 3645 /60:0 7701; 0121 /61:1 5123; 2145 /62:2 5122; 2641 /63:3 7714; 0424 /64:4 5172; 0651 /65:5 2506; 4215 /66:6 5043; 6044 /67:7 5126; 2651 /70:8 5122; 3651 /71:9 6600; 0066 /72:: 6600; 0065 /73:; 4210; 0024 /74:LEFT BRACKET 1212; 1212 /75:= 2400; 1042 /76:RIGHT BRACKET 5520; 2040 /77:? 5536; 3541 /100:@ 4477; 7744 /101:A 5177; 2651 /102:B 4136; 2241 /103:C 4177; 3641 /104:D 4577; 4145 /105:E 4477; 4044 /106:F 4536; 2641 /107:G 1077; 7710 /110:H 4141; 0077 /111:I 7642; 4041 /112:J 2477; 4310 /113:K 0177; 0301 /114:L 3077; 7730 /115:M 0677; 7730 /116:N 4177; 7741 /117:O 4477; 3044 /120:P 4336; 3745 /121:Q 4677; 3144 /122:R 5121; 4651 /123:S 7740; 4040 /124:T 0177; 7701 /125:U 0276; 7401 /126:V 0177; 7706 /127:W 1463; 6314 /130:X 0770; 7007 /131:Y 5143; 6145 /132:Z 4100; 0077 /133:[ 0420; 0210 /134:BACKSLASH 4100; 7700 /135:] 4020; 2040 /136:^ 0101; 0101 /137:_ 2000; 0040 /140:ACCENT GRAVE 1616; 0212 /141:A 1202; 1676 /142:B 1216; 0012 /143:C 7616; 0212 /144:D 3214; 1232 /145:E 5010; 4036 /146:F 3735; 0025 /147:G 1676; 0010 /150:H 5402; 0202 /151:I 5602; 0001 /152:J 1400; 2276 /153:K 7400; 0202 /154:L 1016; 1616 /155:M 1010; 1616 /156:N 1616; 0012 /157:O 3437; 0024 /160:P 3734; 0124 /161:Q 1000; 1016 /162:R 2510; 0225 /163:S 2220; 0076 /164:T 1616; 0202 /165:U 0410; 1006 /166:V 0216; 1616 /167:W 1212; 0004 /170:X 0401; 3032 /171:Y 3222; 2226 /172:Z 4210; 0066 /173:LEFT BRACE 0000; 0077 /174:VERTICAL BAR 6600; 1042 /175:ALTMODE, ALSO RIGHT BRACE 0404; 1010 /176:ALTMODE, ALSO TILDE 3636; 3636 /177:RUBOUT, ALSO BOX >
IFE MACHINE-PDP8E < PWORDS, /PATTERN WORDS FOR VC8E 7600; 1034 /0:MARK FOR BEGINNING OF LINE 7777; 7777 /1 7777; 7777 /2 7777; 7777 /3 7777; 7777 /4 7777; 7777 /5 7777; 7777 /6 7777; 7777 /7 3410; 1010 /10 0103; 0301 /11 7777; 7777 /12 7777; 7777 /13 4530; 0703 /14:FORM FEED 0307; 3045 /15 0200; 0237 /16 1000; 1037 /17 7777; 7777 /20 7777; 7777 /21 7777; 7777 /22 7777; 7777 /23 7777; 7777 /24 7777; 7777 /25 7777; 7777 /26 7777; 7777 /27 7777; 7777 /30 7777; 7777 /31 7777; 7777 /32 1604; 0416 /33: ALTMODE -- ESC 7777; 7777 /34 7777; 7777 /35 7777; 7777 /36 7777; 7777 /37 0000; 0000 /40:SPACE 7500; 0000 /41:X! 7000; 7000 /42:" 7714; 1477 /43:NUM SIGN 5721; 4671 /44:DOLLAR SIGN 6462; 2313 /45:PERCENT 5126; 0526 /46: & 2000; 0040 /47:SINGLE QUOTE 3600; 0041 /50:( 4100; 0036 /51:) 2050; 0050 /52:* 0404; 0437 /53:+ 0500; 0006 /54:, 0404; 0404 /55:- 0300; 0003 /56:. 0402; 2010 /57:/ 4536; 3651 /60:0 2101; 0177 /61:1 4523; 2151 /62:2 4122; 2651 /63:3 2414; 0477 /64:4 5172; 0651 /65:5 1506; 4225 /66:6 4443; 6050 /67:7 5126; 2651 /70:8 5122; 3651 /71:9 6600; 0066 /72:: 6500; 0066 /73:; 2410; 0042 /74:LEFT BRACKET 1212; 1212 /75:= 4200; 1024 /76:RIGHT BRACKET 4020; 2055 /77:? 4136; 3555 /100:@ 4477; 7744 /101:A 5177; 2651 /102:B 4136; 2241 /103:C 4177; 3641 /104:D 4577; 4145 /105:E 4477; 4044 /106:F 4136; 2645 /107:G 1077; 7710 /110:H 7741; 0041 /111:I 4142; 4076 /112:J 1077; 4324 /113:K 0177; 0301 /114:L 3077; 7730 /115:M 3077; 7706 /116:N 4177; 7741 /117:O 4477; 3044 /120:P 4536; 3743 /121:Q 4477; 3146 /122:R 5121; 4651 /123:S 4040; 4077 /124:T 0177; 7701 /125:U 0176; 7402 /126:V 0677; 7701 /127:W 1463; 6314 /130:X 0770; 7007 /131:Y 4543; 6151 /132:Z 7700; 0041 /133:[ 1020; 0204 /134:BACKSLASH 0000; 7741 /135:] 4020; 2040 /136:^ 0101; 0101 /137:_ 4000; 0020 /140:ACCENT GRAVE 1216; 0216 /141:A 7602; 1612 /142:B 1216; 0012 /143:C 1216; 0276 /144:D 3214; 1232 /145:E 3610; 4050 /146:F 2535; 0037 /147:G 1076; 0016 /150:H 0202; 0254 /151:I 0102; 0056 /152:J 7600; 2214 /153:K 0200; 0274 /154:L 1616; 1610 /155:M 1610; 1610 /156:N 1216; 0016 /157:O 2437; 0034 /160:P 2434; 0137 /161:Q 1600; 1010 /162:R 2510; 0225 /163:S 7620; 0022 /164:T 0216; 0216 /165:U 0610; 1004 /166:V 1616; 1602 /167:W 0412; 0012 /170:X 3201; 3004 /171:Y 2622; 2232 /172:Z 6610; 0042 /173:LEFT BRACE 7700; 0000 /174:VERTICAL BAR 4200; 1066 /175:ALTMODE, ALSO RIGHT BRACE 1004; 1004 /176:ALTMODE, ALSO TILDE 3636; 3636 /177:RUBOUT, ALSO BOX >
/ THE VERSION OF THE PROGRAM VRSN, IFE MACHINE-PDP12 < IFE KEYBOARD-TELETYPE< ASCII \SCROLL V\>> IFN MACHINE-PDP12 < IFE MACHINE-LINC8 < ASCII \L8\> IFE MACHINE-PDP8I < IFN VC8E <ASCII \8I\> IFE VC8E <ASCII \8E\>> ASCII \SCROLL V\> VERS1 /THE TEN'S DIGIT OF THE VERSION VERS2 /THE UNITS DIGIT IFN RELEASE-"0 < "R;RELEASE> 0000
/ KEYBOARD COMMANDS (USUALLY CTRL CHARS) CMDCHR, IFE KEYBOARD-TELETYPE< "R-100 "W-100 "S-100 "F-100 "H-100 "A-100 "Q-100 "P-100 "G-100 "V-100 "X-100 "Y-100 "Z-100 "N-100 "T-100 "O-100 "C-100 "B-100 "E-100 "D-100 "K-100 "U-100> CLCHRS=.-2 /START THIS LIST WITH THE "CTRL/K" CHAR 377 215 212 233 /ESCAPE CHAR 375 /REGULAR ALTMODE 376 /ALTERNATE ALTMODE 0000 /ENDS ALL TABLES / COMMAND JUMP TABLE FOR CTRL CHARS FOR IMMEDIATE COMMANDS CMDJMP, RUBR BKLN FWLN FRTL HOMC CSFK CSBK CTRLP CTRLG CONCAT CTRLX CTRLY FSRCH BSRCH TBSWSW TBDEL CMDDOK BLINK ECHOC DTABSW CASE RUBLIN RUBOUT CRIN MAIN CMDAL1, ALTIN1 CMDAL2, ALTIN2 CMDAL3, ALTIN3 CLJMPS, CMDCTK CMDCTU CMDRUB CMD215 CMD212 CMDALJ, COMND3 COMND3 COMND3 / COMMAND LINE COMMANDS DOCMDL, "!&337 "E "K 233 /ALTMODE INTERNALLY "P "D "Q "S "Z "_ "^ "/&337 "B "I "G "R "J "#&337 "F "H "A "U "L "C "X "Y "T "W 240&337 /IGNORE SPACES "<&337 ">&337 0 GOCMDL, INITK ECMD KILLIT LOCATE POCATE DELETE QUIT FSC FSCN BSC BSCN SLASH BEGIN INSRTC INSRTG RPLC JUMP NUMLNS FRNTC HOMCM ABORT UCMD LOCKC CLOCKC XMIT YANK TYPEC WCMD CMDDO REPEAT ENDREP / EDIT COMMAND TABLES ECS, ASCIIZ \MDIOWCRXSK\ /THE EDIT COMMAND ADDRESSES EJS, EMAKE EDIT EINPUT EOUTPUT EWRITE ECLOSE EREAD EXITC ESKIP EKILL / THE CHARACTER TABLE FOR DECODING A FILENAME DCDCS, ASCII \ :.[]\ 233 /ALTMODE INTERNALLY 0 DCDJS, DCDNXT /TABLE OF JMPS FOR DECODER DCDV DCDEXT DCDLNG DCDNXT DCDEND AUTOTB, "/ /CHARS TO RECOGNIZE IN TAB STUFF ", "" 240 211 0 / CHARS WE WILL NOT INSERT TAB BEFORE AT BEGINING OF LINE TBCS1, "/ /THE COMMENT CHAR 211 212 214 215 "* /ORIGIN CHAR 0 / ADDRESSES FOR THOSE CHARS / DON'T KNOCK IT. IT IS SHORTER BY HALF TBJEOL, TBSCAN TBSCAN TBJS1, TBSAV TBSAV TBSAV TBSAV TBSAV TBCHJM, TBSAV TBCOMA TBQUOT TBSPAC TBSTB / EXTENSION TABLE EXTAB, TEXTZ \PA12FTBARARODABIFA\ / JUMPS FOR EXTENSION TABLE JMTBLE, PA12RA /PA PA12RA /12 FTBA /FT FTBA /BA PA12RA /RA BIFARO /RO BIFARO /DA BIFARO /BI BIFARO /FA / AUTO TAB CHARACTERS FOR FORTRAN FTBCS1, "0 /0 "1 /1 "2 /2 "3 /3 "4 /4 "5 /5 "6 /6 "7 /7 "8 /8 "9 /9 211 /TAB 212 /LF 214 /FF 215 /CR 240 /SPACE 000 /END OF TABLE TBSJMP, TBSLSH TBCSND FTBJS1, TBSAV TBSAV TBSAV TBSAV TBSAV TBSAV TBSAV TBSAV TBSAV TBSAV TBSAV TBSAV TBSAV TBSAV TBFEXP /LINE CONTINUATION ON LEADING SPACE / THE X-Y BUFFER FOR TEMPORARY STORAGE XBUF, EOF /ASSEMBLE THE END IN XBUFE=7577 /THIS IS THE DEAD END / THE CHAIN FEATURE IS IMPLEMENTED / ONCE-ONLY CODING EXECUTED IN THIS BUFFER *.&7600+200 /START ON NEXT PAGE OF X BUFFER CHAINB, CLA CLL TAD (7600-1) /INITIALIZE XR'S TO MOVE THE CODING DCA X1 /FROM 17600 IN THE COMMAND DECODER AREA TAD (CMDBUF-1 /TO THE COMMAND BUFFER IN SCROLL DCA X2 CHAIN2, CDF 10 TAD I X1 CDF 00 SNA JMP CHAIN3 /INSERT AN 'ESCAPE' CODE AND (177 TAD (200 TAD (-244 SNA TAD (-11 TAD (244 DCA I X2 JMP CHAIN2 CHAIN3, TAD (233 DCA I X2 DCA I X2 CIF 00 JMP CMDDOK /THEN EXECUTE THE COMMAND IFG .-7600 <PRINTX FIELD 1 BEYOND 7600 >
/ END OF SCROLL $ * $ * $ * $



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