.TITLE DRGCL .IDENT /03/ ; ; COPYRIGHT (C) 1974, 1976 ; DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASS. ; ; THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED ; OR COPIED IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE. ; ; VERSION 03 ; ; D. N. CUTLER 20-SEP-73 ; ; PREVIOUSLY MODIFIED BY: ; ; D. N. CUTLER ; ; MODIFIED BY: ; ; R. J. D. KIRKMAN 28-JUL-78 ; ; RJDK001 ADD TM049 PUTMCR COMMAND LINE FROM RSX11MBL16 ; ;+ ; **-$DRGCL-GET MCR COMMAND LINE ; ; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO TRANSFER A 1 TO 80. BYTE COMMAND LINE ; TO THE LAST MCR FUNCTION TASK REQUESTED BY THE MCR DISPATCHER. ; ; DPB FORMAT: ; ; WD. 00 -- DIC(127.),DPB SIZE(41.). ; WD. 01 -- FIRST WORD OF 80. BYTE BUFFER. ; . ; . ; . ; WD. 50 -- LAST WORD OF 80. BYTE BUFFER. ; ; INPUTS: ; ; R2=ADDRESS OF THE TASK STATUS WORD OF THE CURRENT TASK. ; R3=ADDRESS OF THE 80. BYTE BUFFER IN THE DPB. ; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK. ; R5=ADDRESS OF THE TCB OF THE CURRENT TASK. ; ; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO TASK) ; ; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED. ; DIRECTIVE STATUS EQUAL TO THE LENGTH OF THE COMMAND LINE ; IN BYTES IS RETURNED. ; C=1 IF DIRECTIVE IS REJECTED. ; DIRECTIVE STATUS OF 'D.RS80' IS RETURNED IF THE ISSUING ; TASK IS NOT THE LAST TASK THAT WAS REQUESTED ; BY THE MCR DISPATCHER. ;- .IF DF M$$CRX .ENABL LSB $DRGCL::CALL 30$ ;SEARCH FOR TASK COMMAND BUFFER BCC 10$ ;IF CC ONE FOUND DRSTS D.RS80 ;SET DIRECTIVE STATUS 10$: CMP (R0)+,(R0)+ ;POINT TO COMMAND TEXT 20$: INC 2(SP) ;INCREMENT BYTE COUNT MOVB (R0),(R3) ;INSERT BYTE INTO USER BUFFER CMPB #33,(R0)+ ;ALTMODE TERMINATOR? BEQ 25$ ;IF EQ YES CMPB #15,(R3)+ ;CARRIAGE RETURN? BNE 20$ ;IF NE NO 25$: SUB #2,2(SP) ;ADJUST TO PROPER BYTE COUNT ;+ ; **-$RLMCB-RELEASE MCR COMMAND BUFFER ; ; INPUTS: ; ; R5=ADDRESS OF THE TCB OF THE CURRENT TASK. ; ; OUTPUTS: ; ; IF THE COMMAND LINE CURRENTLY IN THE MCR COMMAND BUFFER IS ; FOR THE CURRENT TASK, THEN THE BUFFER IS RELEASED AND $MCRTN ; IS CLEARED. ;- $RLMCB::CALL 30$ ;SEARCH FOR TASK COMMAND BUFFER BCS 50$ ;IF CS NONE FOUND MOV (R0),(R1) ;REMOVE BUFFER FROM LIST MOV #84.,R1 ;SET LENGTH OF BUFFER TO RELEASE CALLR $DEACB ;DEALLOCATE BUFFER ; ; SUBROUTINE TO SEARCH FOR COMMAND BUFFER FOR CURRENT TASK ; 30$: MOV #$MCRCB,R0 ;POINT TO COMMAND BUFFER LISTHEAD 40$: MOV R0,R1 ;SAVE ADDRESS OF PREVIOUS BUFFER MOV (R1),R0 ;GET ADDRESS OF NEXT BUFFER SEC ;ASSUME END OF LIST BEQ 50$ ;IF EQ YES CMP R5,2(R0) ;TCB ADDRESS MATCH? BNE 40$ ;IF NE NO 50$: RETURN ; .DSABL LSB ;+ ; **-$DRPCL-PUT MCR COMMAND LINE ; ; THIS DIRECTIVE INSTRUCTS THE SYSTEM TO QUEUE AN 80 BYTE COMMAND LINE ; TO MCR. ; ; DPB FORMAT: ; ; WD. 00 -- DIC(79.),DPB SIZE(3.) ; WD. 01 -- SIZE OF SUPPLIED COMMAND LINE ; WD. 02 -- ADDRESS OF COMMAND LINE ; ; INPUTS: ; ; R2=ADDRESS OF THE SECOND TASK STATUS OF THE CURRENT TASK. ; R3=ADDRESS OF THE SIZE WORD IN THE DPB. ; R4=ADDRESS OF THE HEADER OF THE CURRENT TASK. ; R5=ADDRESS OF THE TCB OF THE CURRENT TASK. ; ; OUTPUTS: (DIRECTIVE STATUS AND PS RETURNED TO THE TASK) ; ; C=0 IF DIRECTIVE IS SUCCESSFULLY COMPLETED. ; DIRECTIVE STATUS OF '+1' IS RETURNED. ; C=1 IF DIRECTIVE IS REJECTED. ; DIRECTIVE STATUS OF D.RS1 IS RETURNED IF A COMMAND LINE ; BUFFER COULD NOT BE ALLOCATED. ; DIRECTIVE STATUS OF D.RS98 IS RETURNED IF PART OF THE ; BUFFER IS OUTSIDE THE TASK'S ADDRESS SPACE. ; ; [ D.RS1 IS STANDARD NO SPACE REPLY ; [ D.RS98 IS STANDARD LOUSY CALL REPLY ;- $DRPCL::MOV (R3)+,-(SP) ;SAVE SIZE OF BUFFER MOV (R3),R3 ;PICK UP BUFFER ADDRESS .IF DF A$$CHK!M$$MGE MOV (SP),R1 ;PICK UP SIZE TO ADDRESS CHECK CALL $ACHKP ;ADDRESS CHECK BUFFER .ENDC CMP #80.,(SP) ;LEGAL SIZE ? BLO 20$ ;IF LO NO MOV #84.,R1 ;SET SIZE OF COMMAND LINE BUFFER CALL $ALOCB ;ATTEMPT TO ALLOCATE BUFFER BCS 30$ ;IF CS ALLOCATION FAILURE MOV R0,R1 ;COPY ADDRESS OF ALLOCATED BUFFER TST (R0)+ ;SKIP OVER LINK WORD MOV T.UCB(R5),(R0)+ ;SET UCB ADRESS 10$: MOVB (R3)+,(R0)+ ;COPY BYTE OF COMMAND LINE DEC (SP) ;MORE TO GO BGT 10$ ;IF GT YES TST (SP)+ ;CLEAN STACK CALLR $QMCRL ;QUEUE COMMAND LINE AND RETURN 20$: DRSTS D.RS98 ;PART OF BUFFER OUT OF RANGE 30$: DRSTS D.RS1 ;NODE ALLOCATION FAILURE .ENDC .END