.TITLE TRNLOG - TRANSLATE LOGICAL NAME TO ITS LOWEST LEVEL .IDENT /01/ ; COPYRIGHT (C) 1980 ; MANAGEMENT SCIENCE ASSOCIATES, INC. ; 5100 CENTRE AVENUE ; PITTSBURGH, PENNA. 15232 ; ; AUTHOR: MARK PILANT ; FEBRUARY 1980 ; OFFSETS INTO ARG BLOCK LOG= 4 ;LOGICAL NAME EQV= 8 ;EQUIVALENCT NAME LEN= 12 ;LENGTH ; NEEDED STORAGE EQVDSC: .LONG 512 .ADDRESS EQVBUF EQVBUF: .BLKB 512 TMPDSC: .LONG 512 .ADDRESS TMPBUF NAMDSC: .LONG 512 .ADDRESS TMPBUF TMPBUF: .BLKB 512 SCRDSC: .LONG 512 .ADDRESS SCRBUF OUTDSC: .LONG 512 .ADDRESS SCRBUF SCRBUF: .BLKB 512 ; FORMAT CONTROL STRING FMTDSC: .ASCID \!AD!AS\ CFMT: .ASCID \!AS:!AS\ NCFMT: .ASCID \!AS!AS\ .PAGE .SBTTL TRNLOG - TRANSLATE LOGICAL NAME ; ROUTINE: TRNLOG ; ; CALL: CALL TRNLOG(LOGICAL_NAME,EQUIVALENT_STRING,LENGTH) ; ; WHERE: LOGICAL_NAME - THE LOGICAL NAME TO TRANSLATE ; EQUIVALENT_STRING - THE FULLY TRANSLATED LOGICAL NAME ; LENGTH - THE LENGTH OF THE EQUIVALENT NAME STRING .ENTRY TRNLOG,^M ; START THINGS OFF... CLRW EQVDSC ;SET LENGTH TO ZERO MOVAL @LOG(AP),R6 ;GET ADDR OF LOGICAL NAME DESCR 10$: $TRNLOG_S LOGNAM=(R6),- ;DO INITIAL TRANSLATION RSLLEN=NAMDSC,- RSLBUF=TMPDSC,- DSBMSK=#0 BLBS R0,20$ ;XFER IF NO ERRORS $EXIT_S R0 ;ELSE EXIT WITH STATUS IN R0 20$: CMPW R0,#SS$_NOTRAN ;ANY TRANSLATION DONE? BEQL 30$ ;XFER IF NONE MOVAL NAMDSC,R6 ;ELSE SET ADDR OF LOGICAL NAME BRB 10$ ; AND TRANSLATE AGAIN 30$: LOCC #^A/:/,NAMDSC,TMPBUF ;LOCATE ANY COLON IN NAME BEQL TRNDUN ;XFER IF NO COLON...TRANSLATE DONE PUSHR #^M ;SAVE LENGTH AND ADDR PUSHAL EQVDSC ;ADDR OF INPUT PUSHAB 1(R1) ;ADDR OF ADDITIONAL TEXT SUBL3 #1,R0,-(SP) ;NUMBER OF BYTES IN ADDITIONAL TEXT PUSHAQ OUTDSC ;WHERE TO PUT OUTPUT PUSHAW SCRDSC ;WHERE TO PUT LENGTH PUSHAQ FMTDSC ;ADDR OF CONTROL STRING CALLS #6,SYS$FAO ;FORMAT STRING BLBS R0,40$ ;XFER IF ALL OK $EXIT_S R0 ;ELSE EXIT WITH STATUS 40$: MOVW SCRDSC,EQVDSC ;XFER SIZE MOVC3 EQVDSC,SCRBUF,EQVBUF ;XFER TEXT POPR #^M ;RESTORE LENGTH AND ADDR SUBL3 #TMPBUF,R1,NAMDSC ;SET NEW LENGTH $TRNLOG_S LOGNAM=NAMDSC,- ;TRANSLATE NEW NAME RSLLEN=NAMDSC,- RSLBUF=TMPDSC,- DSBMSK=#0 CMPW R0,#SS$_NOTRAN ;TRANSLATION DONE? BEQL TRNDUN ;XFER IF NOT BLBS R0,30$ ;XFER IF ALL ELSE OK $EXIT_S R0 ;ELSE EXIT WITH STATUS TRNDUN: MOVAL CFMT,R2 ;SET TO ADD COLON $GETDEV_S DEVNAM=NAMDSC,- ;SEE IF REAL DEVICE PRIBUF=OUTDSC,- SCDBUF=OUTDSC BLBS R0,10$ ;XFER IF REAL DEVICE MOVAL NCFMT,R2 ;ELSE NO COLON 10$: PUSHAQ EQVDSC ;GET ADDR OF SECOND PART PUSHAQ NAMDSC ;GET ADDR OF FIRST PART PUSHAQ @EQV(AP) ;WHERE TO PUT RESULT PUSHAW @LEN(AP) ;WHERE TO PUT LENGTH PUSHAQ (R2) ;GET ADDR OF CONTROL STRING CALLS #5,SYS$FAO ;FORMAT STRING BLBS R0,20$ ;XFER IF NO ERRORS $EXIT_S R0 20$: RET .END