.TITLE EDI00 .IDENT /X01/ .NLIST BEX .ENABL LC ; ; EDITOR (TEMP FILE VERSION) ; ; VERSION X01 ; ; DAVID G. CONROY 16-DEC-77 ; LAST UPDATED: 13-AUG-79 ; FIX LOOP ON "&" IN A NULL BUFFER. ; ADD ?13. ; .GLOBL ERROR .GLOBL COMMND .GLOBL ADR1 .GLOBL ADR2 .GLOBL ZERO .GLOBL DOT .GLOBL DOL .GLOBL TOP .GLOBL SPS .GLOBL EXECM .GLOBL LBUF1 .GLOBL LBUF2 .GLOBL LBUF3 .GLOBL GUBUF .GLOBL FN .GLOBL OU .GLOBL OO .GLOBL OP .GLOBL PGSIZE .GLOBL LASTER .GLOBL VETAB .GLOBL OS .GLOBL OLDCMD .GLOBL SFN .GLOBL GUPTR .GLOBL PEEK .MCALL CALL .MCALL CALLR .MCALL RETURN .MCALL SPWN$ .MCALL STSE$S .MCALL DIR$ .MCALL WTSE$S ; ; GLOBAL EQUIVALENCES ; EOF == 0 ;TEXT END OF FILE NL == 12 ;ASCII NEWLINE CR == 15 ;ASCII CARRIAGE RETURN ESC == 33 ;ASCII ESCAPE FF == 14 ;ASCII FORMFEED LBS == 128. ;LINE BUFFER SIZE GUBS == 128. ;GLOBAL/UNTIL BUFFER SIZE FNS == 40. ;FILE NAME SIZE ; ; SPAWN DPB FOR "!" ; SPWN: SPWN$ MCR...,,,,,1,,,LBUF1,,0 ;LENGTH IS STUFFED! ; ; GLOBAL DATA ; OP: .WORD 0 ;OPTION PROMPT FLAG OU: .WORD 0 ;OPTION "^" IN SUBSTITUTE FLAG OO: .WORD 0 ;OPTION OCTAL FLAG OS: .WORD 0 ;OPTION SENSITIVE FLAG PGSIZE: .WORD 2*<23.-1> ;23 LINES. LASTER: .WORD -1 ;LAST ERROR GUPTR: .WORD 0 ;GLOBAL/UNTIL POINTER PEEK: .WORD -1 ;PEEK CHARACTER OLDCMD: .BLKW 1 ;COMMAND ON THE LINE FLAG ADR1: .BLKW 1 ;ADDRESS 1 ADR2: .BLKW 1 ;ADDRESS 2 ZERO: .BLKW 1 ;ADDRESS OF LINE 0 DOT: .BLKW 1 ;ADDRESS OF CURRENT LINE DOL: .BLKW 1 ;ADDRESS OF LAST LINE TOP: .BLKW 1 ;POINTER TO TOP OF MEMORY SPS: .BLKW 1 ;SAVE FOR SP EXECM: .BLKW 1 ;NON ZERO DURING COMMAND EXECUTION LBUF1: .BLKB LBS ;LINE BUFFER 1 LBUF2: .BLKB LBS ;LINE BUFFER 2 LBUF3: .BLKB LBS ;LINE BUFFER 3 GUBUF: .BLKB GUBS ;GLOBAL/UNTIL BUFFER FN: .BLKB FNS ;FILE NAME SFN: .BYTE 0 ;SAVED FILE NAME .BLKB FNS-1 ; .EVEN ; ; ERROR MESSAGES USED IN "VERBOSE" MODE. ; .MACRO MSG TEXT,?LAB .IF NDF,...MSG ...MSG: .BLKW 0 .ENDC LAB: .BLKW 0 MSG1 ,\ .ENDM .MACRO MSG1 TEXT,LAB .WORD .ML'LAB .PSECT .TEXT. .ML'LAB:.ASCIZ "TEXT" .PSECT .ENDM VETAB: MSG MSG MSG MSG MSG MSG
MSG
MSG <**GOK**> MSG MSG MSG MSG MSG MSG MSG ;+ ; ** ERROR - ERROR PROCESSOR ; ; ALL ERRORS COME HERE. ONLY THE SHORT (?N) MESSAGE IS PUT OUT. IF ; YOU WANT AN EPISTLE, USE THE "H" COMMAND. ; ; THE N IN THE ?N MESSAGE IS OF HISTORICAL INTEREST ONLY. ; ; INPUTS: ; R1=ERROR CODE ;- ERROR: MOV R1,LASTER ;SAVE LAST ERROR MOV #'?,R0 ;OUTPUT '?' CALL TTYC ; CALL TTYNUM ;THE ERROR CODE CALL TTYNL ;NEWLINE AFTER MESSAGE CALL TTYSKP ;SKIP TO NEWLINE ON TTY CLR GUPTR ;GET OUT OF GLOBALS CLR OLDCMD ;RESET OLD COMMAND FLAG MOV SPS,SP ;FIX SP ;+ ; ** COMMND - COMMAND PROCESSOR ; ; USES: ; ALL ;- COMMND: CLR ADR1 ;CLEAR OLD CLR ADR2 ;LINE ADDRESSES CLR EXECM ;GET INTO COMMAND MODE 10$: MOV ADR2,ADR1 ;GET AN CALL ADDRES ;ADDRESS TST R2 ;DID I GET ONE BEQ 30$ ;NO MOV R2,ADR2 ;USE IT CMP R0,#'; ;DELIMITER A ';' BNE 20$ ;NO MOV R2,DOT ;YES, RESET '.' BR 10$ ; 20$: CMP R0,#', ;DELIMITER A ',' BEQ 10$ ;YES, GO GET ANOTHER ADDRESS 30$: TST ADR1 ;IF ONLY 1 ADDRESS BNE 40$ ;THEN MOV ADR2,ADR1 ;SET THEM EQUAL 40$: CMP R0,#NL ;NEWLINE COMMAND BNE 50$ ;NO TST ADR2 ;PRINT IF WE HAVE AN ADDRESS BNE 44$ ;OR TST OLDCMD ;IF THERE IS NOTHING ELSE BEQ 42$ ;ON THE LINE CLR OLDCMD ;OTHERWISE CLEAR FLAG BR COMMND ;AND GO FOR MORE 42$: MOV DOT,R0 ;START AT DOT ADD #2,R0 ;MOVE AHEAD 1 LINE CMP R0,DOL ;BUT DON'T GO PAST THE END BLOS 43$ ; MOV #6,R1 ;OR ?6 JMP ERROR ; 43$: MOV R0,ADR1 ;SET ADDRESSES FOR MOV R0,ADR2 ;PRINT COMMAND 44$: CLR OLDCMD ;CLEAR FLAG CALL PCOM ;DO A PRINT BR COMMND ;GO BACK TO COMMAND LOOP 50$: CMP R0,#EOF ;GLOBAL EOF BNE 60$ ;NO MOV ZERO,R0 ;LOOK FOR NEXT GLOBAL LINE 52$: TST (R0)+ ; CMP R0,DOL ;AT THE END BHI 54$ ;YES, NO MORE LINES BIT #1,(R0) ;MARKED BEQ 52$ ;NO DEC (R0) ;REMOVE THE MARK MOV R0,DOT ;SET DOT MOV #GUBUF,GUPTR ;BACKUP GLOBAL POINTERS BR COMMND ;GO GET COMMAND 54$: CLR GUPTR ;GET OUT OF GLOBAL BR COMMND ;GO GET COMMAND 60$: INC OLDCMD ;SET COMMAND ON THE LINE FLAG INC EXECM ;SET COMMAND IN EXECUTION CMP R0,#'= ;EQUAL COMMAND BNE 70$ ;NO CALL DEFDOT ;DEFAULT TO .= MOV ADR2,R1 ;GET ADDRESS SUB ZERO,R1 ; ASR R1 ;CONVERT TO LINES CALL TTYNUM ;DISPLAY IT CALL TTYNL ; BR COMMND ; 70$: CMP R0,#'& ;PRINT A PAGE BNE 80$ ;NO CALL DEFDOT ;DEFAULT TO CURRENT LINE MOV ADR2,R0 ;ORIGIN. CMP R0,ZERO ;ANY TEXT? BNE 71$ ;YES! MOV #9.,R1 ;NO, ?9 JMP ERROR ; 71$: MOV R0,ADR1 ;MAKE A P COMMAND UP ADD PGSIZE,R0 ; CMP R0,DOL ;BUT DON'T GO PAST THE END BLOS 72$ ; MOV DOL,R0 ; 72$: MOV R0,ADR2 ; CALL PCOM1 ;PRINT THE PAGE JMP COMMND ; 80$: CMP R0,#'! ;! COMMAND BNE 90$ ;NO MOV #LBUF1,R1 ;R1 = BUFFER POINTER 82$: CALL GETC ;GET A CHARACTER CMP R0,#EOF ;STOP ON GLOBAL EOF BEQ 84$ ; CMP R0,#NL ;AND NEWLINE BEQ 84$ ; CMP R1,#LBUF1+LBS ;FIT ? BHIS 86$ ;NO, ?0 MOVB R0,(R1)+ ;SAVE IN BUFFER BR 82$ ; 84$: SUB #LBUF1,R1 ;COMPUTE SIZE MOV R1,SPWN+S.PWCL ;SET INTO DPB DIR$ #DET ;DETACH TERMINAL. WTSE$S #1 ; DIR$ #SPWN ;SPAWN MCR BCS 88$ ;UGH! STSE$S #1 ;WAIT FOR IT. BCS 88$ ;UGH! DIR$ #ATT ;ATTACH TERMINAL. WTSE$S #1 ; MOV #'!,R0 ;SHOW THAT WE ARE DONE CALL TTYC ; CALL TTYNL ; JMP COMMND ;DONE 86$: CLR R1 ;?0 JMP ERROR ; 88$: DIR$ #ATT ;ATTACH TERMINAL. WTSE$S #1 ; MOV #14.,R1 ;?14 JMP ERROR ; 90$: BIC #' ,R0 ;MUST BE ALPHABETIC COMMAND SUB #'A,R0 ; CMP R0,#'Z-'A ;LEGAL BHI ERR2 ;NO ASL R0 ;CALL ROUTINE CALL @CMDTAB(R0) ; JMP COMMND ;GO BACK TO COMMAND LOOP ERR2: MOV #2,R1 ;ILLEGAL COMMAND JMP ERROR ; ; ; COMMAND JUMP TABLE ; INDEXED BY ASCII CHARACTERS IN THE RANGE A-Z ; CMDTAB: .WORD ACOM ;APPEND .WORD ERR2 ;B .WORD CCOM ;CHANGE .WORD DCOM ;DELETE .WORD ECOM ;EDIT .WORD FCOM ;FACTS .WORD GCOM ;GLOBAL .WORD HCOM ;HELP .WORD ICOM ;INSERT .WORD JCOM ;JOIN .WORD KCOM ;KOPY .WORD ERR2 ;L .WORD MCOM ;MOVE .WORD ERR2 ;N .WORD OCOM ;OPTIONS .WORD PCOM ;PRINT .WORD QCOM ;QUIT .WORD RCOM ;READ .WORD SCOM ;SUBSTITUTE .WORD ERR2 ;T .WORD UCOM ;UNDO .WORD VCOM ;EXCLUDE .WORD WCOM ;WRITE .WORD ERR2 ;X .WORD ERR2 ;Y .WORD ERR2 ;Z .END