.PSECT EDIN,RO ;************************************************************************ ; ; T E X T E D I T O R ; INITIAL MODULE ; FUNCTION ; INITIALIZES ALL WORK AREAS, WRITES THE MAIN MENU AND CALL THE ; HANDLERS CORRESPONDING THE USER REQUEST ; IF WORD GVI.SEC CONTAINS PREDEFINED INFO EDITOR WILL ASSUME ; RESTART OF INTERRUPTED WORK. FIELD GVI.LNO IS ASSUMED TO CONTAIN ; THE LINE NO. LAST EDITED, GVI.TP - PTR TO TEXT ITSELF ; EDINIT:: .NLIST BEX .ENABL GBL ;------------------------------------------------------------------------ ; INITIALIZATION BEGIN: CMP #GVI.SS,@#GVI.SEC BEQ REST ; RESTART - PREDEFINED INFO IS PRES. MOV PC,R2 ; ELSE INITIALIZATION ADD #0,R2 ; R2 = PTR TO TEXT MOV R2,@#GVI.TP ; SET THE PTR TO TEXT CLR @#GVI.LNO MOV #GVI.SS,@#GVI.SEC MOV #5012,(R2)+ CLRB (R2) ; FORMAT THE TEXT AREA .PAGE ;---------------------------------------------------------------------- ; RESTART - WRITES OUT MENU AND ANALYZE THE USER REQUEST REST: MOV PC,R1 ADD #,R1 MOV R1,@#402 ; SET THE MESSAGE TABLE PTR REPT: TRAP 14 .WORD 1 ; WRITE OUT THE MESSAGE #1 EMT 6 ; ACQUIRE THE REPLY CMP R0,#'0 BLOS REPT ; INVALID REPLY CMP R0,#'4 BHI REPT ; INVALID REPLY ASL R0 ; MULTIPLY BY TWO - INDEX IN TABLE ADD PC,R0 ADD (R0),PC ; BRANCH TO CORRESP. HANDLER BR.PTR = . T.BR: ; OFFSET TO USER REQUEST HANDLERS .WORD .WORD .WORD .WORD .PAGE ;------------------------------------------------------------------------ ; EDIT THE TEXT MH.ED: MOV @#GVI.LNO,R0 ; LINE NO. FROM WHICH START THE EDIT. MOV @#GVI.TP,R1 ; PTR TO TEXT CALL EDROOT ; CALL THE EDITOR ROOT MODULE MOV R0,@#GVI.LNO ; SAVE THE LINE NO. LAST EDITED BR REPT ; WRITES OUT THE MENU AGAIN ;------------------------------------------------------------------------ ; READ THE TEXT FROM MT AND APPEND IT TO EXISTING ONE MH.RD: MOV @#GVI.TP,R1 ; PTR TO BEGIN OF TEXT 10$: TSTB (R1)+ BNE 10$ ; PTR TO END OF TEXT DEC R1 TRAP 11 .WORD 1 ; READ THE NEW TEXT AT END OF OLD ONE BR REPT ; WRITES OUT THE MENU AGAIN ;------------------------------------------------------------------------ ; WRITE THE TEXT TO MT MH.WR: MOV @#GVI.TP,R1 ; PTR TO BEGIN OF TEXT MOV R1,R0 10$: TSTB (R0)+ BNE 10$ ; PTR TO END OF TEXT DEC R0 SUB R1,R0 ; R0 = TEXT LENGTH TRAP 11 .BYTE 0,5 ; WRITE THE TEXT WITH 5 COPIES BR REPT ; WRITES OUT THE MENU AGAIN .PAGE ;------------------------------------------------------------------------ ; PRINT THE TEXT ; NOTE ; SY.EOP IS ASSUMED TO BE THE END-OF-PAGE SYMBOL (AS FF SYMBOL BUT ; IT IS PRINTABLE) ; SY.ESC IS ASSUMED TO BEGIN THE ESC-SEQUENCE. ALL SYMBOLS UP TO ; NL ARE TRANSFERRED TO PRINTER DECREMENTED BY 40 MH.PR: SY.EOP = 254 ; HP/L - END-OF-PAGE SYMBOL SY.ESC = 275 ; HP/] - ESC-SYMBOL SY.FF = 14 ; FORMAT FEED SYMBOL MOV @#GVI.TP,R1 ; PTR TO TEXT TO PRINT IT PL1: ; PRINT THE CURRENT TEXT SYMBOL MOVB (R1)+,R0 BEQ PEX ; END OF TEXT IS REACHED CMPB R0,#SY.EOP BEQ PEOP ; END OF PAGE CMPB R0,#SY.ESC BEQ PESC ; BEGIN OF ESC-SEQUENCE TRAP 3 ; PRINT THE SYMBOL BR PL1 ; AND CONTINUE PEOP: ; END-OF-PAGE SYMBOL IS OCCURED MOV #SY.FF,R0 TRAP 3 ; FORMAT FEED ON PRINTER TRAP 14 .WORD 2 ; MESSAGE 2 - INSERT A NEW PAPER PAGE EMT 6 ; WAIT FOR USER ACTION CMPB R0,#14 BEQ REPT ; DON'T PRINT OTHER PAGES TRAP 14 .WORD 3 BR PL1 ; CONTINUE TO PRINT NEXT PAGE PESC: ; HANDLE AN ESC-SEQUENCE MOVB (R1)+,R0 CMPB R0,#12 BEQ PL1 ; NL - END OF ESC-SEQUENCE SUB #40,R0 ; DECREMENT THE SYMBOL CODE TRAP 3 ; PRINT THE RESULTING CONTROL CODE BR PL1 PEX: BR REPT ; WRITES OUT THE MENU AGAIN .WORD 0,0,0 .END BEGIN