; ; CALC VERSION X01-06 ; ; CALLED BY MAINLINE (CALC.FOR) ; ; SIMULATES RSX-11M'S GETMCR SYSTEM CALL ; ; FOR USE UNDER VMS VERSION 2.0 OR LATTER ; .TITLE GETMCR .IDENT /X01.06/ .ENABLE DEBUG .PSECT RWDATA WRT,RD,BYTE .MCALL $CLIDEF,$CLIREQDESC $CLIDEF TABLE: $CLIREQDESC RQTYPE=CLI$K_GETCMD .PSECT PURE RD,NOWRT,BYTE ; ; LINE=4 ;DISPLACEMENT OFF AP TO ADDRESS OF LINE (LOGICAL*1 LINE(80)) LEND=8 ;DISPLACEMENT OFF AP TO ADDRESS OF LEND (INTEGER*2) .ENTRY GETMCR,^M ;SAVE REGS USED BY MOVC CMPL (AP),#2 ;MUST CALL WITH TWO ARGUMENTS BEQL 10$ ;OTHERWISE HALT ;HALT IMMEDIATELY 10$: MOVC5 #0,0,#0,#CLI$K_WORKAREA,TABLE ;ZERO OUT TABLE MOVB #CLI$K_GETCMD,CLI$B_RQTYPE+TABLE ;AND SET REQUEST TYPE SO ;ROUTINE WILL BE RE- ;USABLE PUSHAQ TABLE ;SET UP FOR RECALLING CLI CALLS #1,@#SYS$CLI ;RECALL CLI BLBC R0,20$ ;BRANCH IF CALL TO SYS$CLI FAILS MOVZWL CLI$W_RQSIZE+TABLE,R0 ;GET LENGTH OF COMMAND LINE BNEQ 30$ ;SEE IF THERE WAS ANY GIVEN 20$: CLRW @LEND(AP) ;IF NOT, ZERO OUT LEND (LINE END) RET ;AND RETURN 30$: CMPW R0,#80 ;SEE IF THERE WERE 80. OR MORE CHARACTERS BLSSU 40$ ;BRANCH IF FEWER MOVL #79,R0 ;OTHERWISE, PASS ONLY 79 OF THEM ;PLUS A PRECEDING BLANK 40$: MOVW R0,@LEND(AP) ;UPDATE LEND (LINE END) INCW @LEND(AP) ;INCLUDE COUNT OF PRECEDING BLANK MOVL LINE(AP),R1 ;GET START ADDRESS OF LINE VECTOR MOVB #^A/ /,(R1)+ ;PRECEED BLANK SO IT LOOKS SOMETHING ;LIKE RSX-11M'S GETMCR MOVC3 R0,@,(R1) RET .END