LB:[11,10]DRGCL.MAC;2/-AU/-BF=LB:[11,10]DRGCL.MAC;1 -3,3 -20 ; R. J. D. KIRKMAN 28-JUL-78 ; ; RJDK001 ADD TM049 PUTMCR COMMAND LINE FROM RSX11MBL16 ; -104,104 < < ;+ ; **-$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 /