; CL1 - MCR INTERFACE FOR CLONE ; LAST EDIT: 17-OCT-81 ; .NLIST .LIST TTM .NLIST BEX .LIST ; ; ; ;+ ; THIS TASK PROVIDES AN MCR INTERFACE FOR CLONE. IT IS USED BOTH AS A ; MECHANISM OF STARTING A CLONE PROCESS AND FOR INTERRUPTING AN ACTIVE ; PROCESS VIA THE BREAKIN ROUTINE. ; ; THIS MCR COMMAND NEVER PROMPTS. THE CL1> CLONE PROMPT IS GENERATED BY ; CLONE ITSLEF. HOWEVER THE MCR COMMAND LINE ASSOCIATED WITH THIS COMMAND ; IS TRANSMITTED TO CLONE VIA A SEND DATA DIRECTIVE AND USED AS AN INITIAL ; CLONE COMMAND. ; ; THE COMMAND LINE MAY TERMINATE WITH '/TTN:' WHICH WOULD HAVE AN IDENTICAL ; EFFECT TO TYPING CL1 TO MCR ON THAT TERMINAL. ; ; ; THE FORMAT OF THE MESSAGE TRANSMITTED TO CLONE IS: ; .WORD TI ;ASCII TI DEVICE NAME ; .WORD UNIT ;BINARY UNIT NUMBER ; .ASCIZ /.../ ;A CLONE COMMAND LINE ; ;- .PSECT CL1 ; ; ; .MCALL DIR$,RSUM$,RQST$,GMCR$,GLUN$,SDAT$,QIOW$,EXIT$S,USTP$ ; LUNNO=1 ;LUN ASSIGNED TO TI BY TKB ; CL1: DIR$ #RSUM ;CHECK IF CLONE IS ACTIVE CMP $DSW,#IE.INS ;IS IT NOT INSTALLED ? BEQ INSERR CMP $DSW,#IE.ACT ;IS IT ALREADY ACTIVE ? BNE 1$ ;IF SO JUST SEND MESSAGE DIR$ #RQST ;ELSE REQUEST CLONE BCS RUNERR ;SOME OBSCURE ERROR ; 1$: DIR$ #GLUN ;GET LUN INFO DIR$ #GETMCR ;PICK UP THE COMMAND LINE BCS MCRERR MOV #GETMCR+G.MCRB+4,R0 MOV #BUF+4,R1 MOV $DSW,R2 SUB #4,R2 CMP R2,#20. BGT LENERR 2$: TST R2 BLE 3$ MOVB (R0)+,(R1)+ DEC R2 BR 2$ 3$: CLRB (R1) ; ; NOW CHECK FOR /TTN: CMPB -(R1),#': ;DOES IT END WITH COLON BNE 20$ ;IF NOT SKIP 4$: CMPB -(R1),#'0 ;IS THE NEXT CHAR. AN OCTAL DIGIT BLT 5$ ;SKIP IF NOT CMPB (R1),#'7 BLE 4$ 5$: CMPB (R1),#'T ;CHECK FOR '/TT' BNE 20$ CMPB -(R1),#'T BNE 20$ CMPB -(R1),#'/ BNE 20$ ; ; NOW R1 POINTS TO /TTN: WHERE N IS ANY NUMBER OF OCTAL DIGITS CLRB (R1) ;PATCH OUT '/' ADD #3,R1 ;SKIP OVER /TT CLR UNIT 10$: MOVB (R1)+,R0 ;GET NEXT CHAR SUB #'0,R0 BLT 20$ CMP R0,#7 BGT 20$ ASL UNIT ;UNIT=UNIT*8 ASL UNIT ASL UNIT ADD R0,UNIT BR 10$ ; 20$: DIR$ #SEND BCS SNDERR DIR$ #UNSTOP BYE: EXIT$S ; .MACRO ERROR MESS MOV #MESS,QBLK+Q.IOPL MOV #MESS'L,QBLK+Q.IOPL+2 BR OUTMES .ENDM ; INSERR: ERROR INSM RUNERR: ERROR RUNM MCRERR: ERROR MCRM SNDERR: ERROR SNDM LENERR: ERROR LENM ; OUTMES: DIR$ #QBLK BR BYE ; RSUM: RSUM$ CLONE RQST: RQST$ CLONE GETMCR: GMCR$ GLUN: GLUN$ LUNNO,BUF SEND: SDAT$ CLONE,BUF UNSTOP: USTP$ CLONE QBLK: QIOW$ IO.WVB,LUNNO,LUNNO,,,,<0,0,40> ; BUF: .BLKW 25. UNIT=BUF+2 ; .MACRO MESSAG NAM,STR NAM: .ASCII /STR/ NAM'L=.-NAM .ENDM ; MESSAG INSM, MESSAG RUNM, MESSAG MCRM, MESSAG SNDM, MESSAG LENM, ; .EVEN ; .END CL1