.TITLE EDI00 .IDENT /X01/ .NLIST BEX .ENABL LC ; ; EDITOR (TEMP FILE VERSION) ; ; VERSION X01 ; ; DAVID G. CONROY 16-DEC-77 ; .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 OV .GLOBL OS .GLOBL OLDCMD .GLOBL SFN .GLOBL GUPTR .GLOBL PEEK .MCALL CALL .MCALL CALLR .MCALL RETURN ; ; 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 PSIZE == 20. ;PAGE SIZE (IN LINES) LBS == 128. ;LINE BUFFER SIZE GUBS == 128. ;GLOBAL/UNTIL BUFFER SIZE FNS == 40. ;FILE NAME SIZE ; ; GLOBAL DATA ; OV: .WORD 0 ;OPTION VERBOSE FLAG OS: .WORD 0 ;OPTION SENSITIVE FLAG 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 ;+ ; ** ERROR - ERROR PROCESSOR ; ; ALL ERRORS ARE FUNNELLED THROUGH THIS ROUTINE. TWO TYPES OF ERROR ; MESSAGES ARE GENERATED: TERSE MESSAGES (?N, WHERE N IS THE ERROR ; CODE) AND VERBOSE MESSAGES (AN EPISTLE IN TASTEFUL DUAL CASE). ; ; THE N IN THE ?N MESSAGE IS OF HISTORICAL INTEREST ONLY. ; ; INPUTS: ; R1=ERROR CODE ;- ERROR: TST OV ;IN VERBOSE MODE BNE 10$ ;YES MOV #'?,R0 ;NO, OUTPUT '?' CALL TTYC ; CALL TTYNUM ;THE ERROR CODE BR 20$ ; 10$: ASL R1 ;ERROR CODE TO WORD INDEX MOV VETAB(R1),R0 ;GET MESSAGE CALL TTYSTR ;PUT IT OUT 20$: 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 ;GET WHERE TO START MOV R0,ADR1 ;MAKE A P COMMAND UP ADD #2*PSIZE,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 BR COMMND ; 80$: 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 ERR2 ;H .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 ERR2 ;U .WORD VCOM ;EXCLUDE .WORD WCOM ;WRITE .WORD ERR2 ;X .WORD ERR2 ;Y .WORD ERR2 ;Z .END