.TITLE RADASC .IDENT /V01/ .ENABLE LC ; ; This module converts a RAD50 string to ASCII. ; ; Author: V01 25-Jan-80 Phil Stephensen-Payne ; ; Calling Sequence: ; ; This subroutine is called via the standard FORTRAN callin sequence as:- ; ; CALL RADASC(RCOUNT,RADSTR,ASCSTR [,STATUS]) ; or ; STATUS = RADASC(RCOUNT,RADSTR,ASCSTR) ; ; Where:- ; RCOUNT = Number of RAD50 words to convert ; RADSTR = Address of RAD50 string ; ASCSTR = Address of output ASCII string ; STATUS = Optional error return ; ; Errors returned: ; ; STATUS = 0 if the operation was completed successfully ; = -1 if there was a parameter error ; ; External references: ; ; This module calls the subroutine PRMCHK ; ; ; WORK REGISTERS ARE:- ; ; R0 = ADDRESS OF NEXT WORD IN OUTPUT STRING ; R1 = WORD TO TRANSLATE ; R3 = NUMBER OF WORDS LEFT TO TRANSLATE ; R5 = ADDRESS OF NEXT WORD TO TRANSLATE ; ; RADASC:: ; ; THE ROUTINE FIRST CHECKS THAT THERE ARE A VALID NUMBER OF INPUT ; PARAMETERS (4) AND IF NOT EXITS WITH AN ERROR. OTHERWISE IT THEN STORES ; THE VALUES OF THE PARAMETERS GIVEN. ; MOV #4,R0 ;CHECK FOR 4 PARAMETERS CALL PRMCHK ;CHECK THEM BCS RADEND ;If CS parameter error - exit at once MOVB @2(R5),R3 ;GET NUMBER OF WORDS TO TRANSLATE BNE 20$ ;IF NE SOME - CARRY ON CLR R0 ;ELSE TERMINATE SUCCESSFULYY BR RADEND ; ; 20$: MOV 6(R5),R0 ;GET ADDRESS OF OUTPUT STRING MOV 4(R5),R5 ;GET ADDRESS OF INPUT BUFFER BIT #1,R5 ;WORD-ALIGNED? BEQ 30$ ;IF EQ YES - CARRY ON MOV #-1,R0 ;NO - FLAG ERROR BR RADEND ;AND FLAG IT ; 30$: ; ; THE ROUTINE THEN EXTRACTS THE NEXT RAD50 WORD AND CALLS THE ; SYSTEM CONVERSION ROUTINE TO CONVERT IT. ; RADLOP: MOV (R5)+,R1 ;GET WORD TO TRANSLATE CALL $C5TA ;CONVERT TO ASCII SOB R3,RADLOP ;TRANSLATE NEXT WORD CLR R0 ;CLEAR RETURN STATUS ; RADEND: RETURN ;RETURN TO CALLER .END