.TITLE TYPE - SCL 'TYPE' COMMAND .IDENT /V01/ .MCALL DIR$,EXIT$S,GMCR$,RQST$,.INH,.ENB ;+ ; VERSION 01 ; ; REID L BROWN 30-JAN-77 ; ; MODIFIED BY: ; ; NO MODIFICATIONS ; ; ; **-TYPE- SCL 'TYPE COMMAND FOR THE RSX11D MCR INTERFACE ; ; THIS PROGRAM REFORMATS THE 'TYPE' VERB INTO THE APPROPRIATE CALL TO '...PIP'. ; THE FORMAT FOR THE COMMAND IS: ; ; TYP[E] FILESPEC ; ; A NEW MCR COMMAND LINE IS CREATED IN THE FORMAT: ; ; PIP TI:=FILESPEC ; ; THIS NEW COMMAND IS PLACED IN AN SCOM MCR BUFFER, AND QUEUED TO THE MCR BUF- ; FER LIST. '...PIP' IS THEN REQUESTED TO FULFILL THE OPERATION. ; ;- ; ; LOCAL DATA, DPB'S ; RQSPIP: RQST$ ...PIP ;REQUEST DIRECTIVE FOR PIP MCR: GMCR$ ;42 WORD DPB FOR THE GET MCR DIRECTIVE CMDLIN: .WORD CMDLEN ;LENGTH OF COMMAND (BYTES) .ASCII /PIP TI:=/ ;TRANSLATION COMMAND CMDLEN= .-CMDLIN-2 .EVEN ; ; GET THE COMMAND LINE ; TYPE:: DIR$ #MCR,ERROR ;TRY TO GET AN MCR COMMAND LINE MOV $DSW,R5 ;GET THE NUMBER OF BYTES ENTERED ; ; FIND THE FILENAME STRING ; MOV #MCR+5,R0 ;POINT TO 1ST BYTE AFTER 'TYP' SUB #3,R5 ;AND DECREMENT FOR THOSE 3 LETTERS BLE ERROR ;EXIT IF NONE LEFT 10$: MOVB (R0)+,R1 ;GET THE NEXT BYTE DEC R5 ;AND COUNTDOWN # OF REMAINING CHARS BLE ERROR ;NONE LEFT - EXIT CMPB R1,#40 ;SPACE CHARACTER? (TABS CONVERTED BY ...MCR) BNE 10$ ;NO - KEEP LOOKING CMP R5,#80.-CMDLEN ;MAKE SURE THE COMMAND WILL FIT BGT ERROR ;AND EXIT IF IT WON'T ; ; PICK AN MCR BUFFER, LOAD IT AND QUEUE IT ; MOV #6,R3 ;SETUP TO PICK 6 NODES (96 BYTES) CALL ..PICV ;AND TRY TO GET THEM BCS ERROR ;NO NODES - EXIT MOV R4,R1 ;SAVE THE MCR BUFFER ADDRESS MOV .CRTSK,R3 ;GET MY ATL ADDRESS MOV A.TI(R3),M.TI(R4) ;AND USE IT TO GET MY TI ADDRESS MOV RQSPIP+R.QSTN+2,M.TN(R4) ;MOVE TASK NAME TO MCR BUFFER MOV #CMDLIN,R2 ;POINT TO THE NEW COMMAND MOV (R2),R3 ;GET THE COMMAND LENGTH ADD R5,R3 ;CALCULATE THE TOTAL COMMAND LENGTH MOV R3,M.BC(R4) ;PUT THE LENGTH IN THE BUFFER ADD #M.BF,R4 ;POINT TO THE 1ST DATA BYTE ; ; XFER IN THE COMMAND LINE & FILESPEC ; MOV (R2)+,R3 ;GET THE COMMAND LINE LENGTH 50$: MOVB (R2)+,(R4)+ ;TRANSFER THE COMMAND TO THE MCR BUFFER SOB R3,50$ ;... 60$: MOVB (R0)+,(R4)+ ;AND THEN COPY THE FILESPEC SOB R5,60$ ;... ; ; SETUP HEADER & BUFFER FOR CORRECT MCR PROMPT SEQUENCE ; MOV .CRTSK,R3 ;GET MY ATL ADDRESS MOV #77406,-(SP) ;STACK UP A PDR TO ALLOW FULL MEMORY ACCESS MOV A.HA(R3),-(SP) ;AND SET UP MY HEADER ADDR AS THE APR CALL ..SPD3 ;AND MAP APR #3 ONTO MY OWN TASK HEADER CMP (SP)+,(SP)+ ;THROW AWAY THE OLD PDR,PAR PAIR .INH ;DON'T ALLOW TASK SWITCHING MOVB #33,(R4) ;LOAD AN ESCAPE - ASSUME NO PROMPT BIT #HF.RMC,60000+H.EAF ;IS MY MCR PROMPT BIT SET? BEQ 90$ ;NO - EVERYTHING IS OK MOVB #15,(R4) ;YES - SET THE MCR BUFFER TO REPROMPT TOO 90$: BIC #HF.RMC,60000+H.EAF ;AND CLEAR MY REPROMPT IN ANY CASE .ENB ;RE-ENABLE INTERRUPTS ; ; QUEUE THE BUFFER & REQUEST ...PIP ; MOV #.MCRLH,R4 ;POINT TO MCR BUFFER LISTHEAD CALL ..NADD ;AND ADD IT TO THE QUEUE (R1 HAS THE ADDR) DIR$ #RQSPIP,ERROR ;REQUEST ...PIP ERROR: EXIT$S ;DONE .END TYPE