.TITLE ASCR50 .PSECT UTILS R50BFR: .BLKB 3. ;USED BY "ASCR50" WHILE CON- .EVEN ;VERTING ASCII TO PACKED RAD50. ASCR50:: ; CONVERT AN ASCII STRING TO PACKED RAD50 FORMAT AND PUT ; IT WHERE SPECIFIED BY THE CALLER. CONVERSION IS ; TERMINATED IF A NON-RAD50 CHARACTER IS ENCOUNTERED. ; CALL: JSR R5,ASCR50 ; ADRS OF ASCII STRING. ; NUMBER OF CHARS TO BE CONVERTED. ; ADRS OF PLACE TO PUT RESULT. MOV R0,-(SP) ;SAVE R0... MOV R1,-(SP) ;...R1... MOV R2,-(SP) ;...R2... MOV R3,-(SP) ;...R3... MOV R4,-(SP) ;...AND R4. MOV (R5)+,R0 ;GET ADRS OF ASCII STRNG ;TO BE CONVERTED. MOV (R5)+,R2 ;NBR OF CHARS TO CONVRT. MOV (R5)+,R1 ;ADRS OF DST FOR RESULT. ;PUT A RAD50 EQUIVALENT INTO R50BFR FOR EACH OF ;THE NEXT THREE ASCII CHARACTERS IN THE STRING ;TO BE CONVERTED. 5$: TST R2 ;ARE WE FINISHED? BEQ 55$ ;YES... MOV #R50BFR,R3 ;NO. POINT INTO R50BFR. MOV #3.,R4 ;RDY TO MOV THREE CHARS. 10$: ;DETERMINE WHICH ASCII CHARACTER THIS IS AND ;PUT ITS RAD50 EQUIVALENT INTO R50BFR. CMPB (R0),#' ; ;THIS CHAR A SPACE? BNE 15$ ;NO... MOVB #0,(R3)+ ;YES. LOAD R50 EQUIV. BR 40$ 15$: CMPB (R0),#'$ ;...A DOLLAR SIGN? BNE 20$ ;NO... MOVB #33,(R3)+ ;YES. BR 40$ 20$: CMPB (R0),#'. ;...A PERIOD? BNE 25$ MOVB #34,(R3)+ BR 40$ 25$: CMPB (R0),#'0 ;IS IT A 0 THRU... BLT 30$ ;... CMPB (R0),#'9 ;...9 CHARACTER? BGT 30$ MOV R1,-(SP) MOVB (R0),R1 ;CONVERT THE ASCII SUB #22,R1 ;NUMBER TO RAD50. MOVB R1,(R3)+ ;LOAD IT INTO R50BFR. MOV (SP)+,R1 BR 40$ 30$: CMPB (R0),#'A ;IS IT AN A THRU... BLT 35$ ;... CMPB (R0),#'Z ;...Z CHARACTER? BGT 35$ ;NO. NONE OF THE ABOVE. MOV R1,-(SP) ;YES. MOVB (R0),R1 ;CONVERT THAT. SUB #100,R1 MOVB R1,(R3)+ MOV (SP)+,R1 BR 40$ 35$: ;THIS IS NOT A VALID RAD50 CHARACTER, OR WE ;HAVE CONVERTED ALL ASCII CHARS INTO R50BFR AND ;BFR IS NOT YET FULL. MOVB #0,(R3)+ ;A R50 SPACE IN R50BFR. SOB R4,35$ ;FILL OUT R50BFR. CLR R2 ;TO TERMINATE SCAN. BR 50$ ;GO PACK THIS LAST BFR? 40$: ;WE HAVE PUT A VALID RAD50 CHAR INTO R50BFR. ;MAKE SURE LAST CHAR TO BE CONVERTED FILLS LAST ;SLOT OF R50BFR, OR GO PAD OUT R50BFR WITH RAD50 ;SPACES. TSTB (R0)+ ;ADV TO NXT ASCII CHAR. DEC R2 ;COUNT CHAR JUST DONE. BNE 45$ ;BR IF MORE TO DO. ;NO MORE TO DO. CMP R4,#1. ;DID WE JUST FILL LAST ;R50BFR SLOT? BEQ 45$ ;YES... DEC R4 ;NO. COUNT LST BFR FILL. BR 35$ ;GO TO PAD OUT R50BFR. 45$: SOB R4,10$ ;R50BFR LOADED WITH 3? ;FALL THRU IF YES. 50$: ;PACK THE THREE RAD50 CHARACTERS IN R50BFR INTO ;ONE WORD, USING THE FORMULA: ;(1STCHAR X (50X50)) + (2NDCHAR X 50) + 3RDCHAR. ;REF: FORTRAN LANGUAGE REF MANUAL, PA. A-3. MOV #R50BFR,R3 ;POINT FROM R50BFR. MOV R1,-(SP) MOVB (R3)+,R1 ;1STCHAR... MUL #3100,R1 ;...X (50 X 50) MOV R1,R4 ; + MOVB (R3)+,R1 ;2NDCHAR... MUL #50,R1 ;...X 50 ADD R1,R4 ADD (R3),R4 ; + 3RDCHAR. MOV (SP)+,R1 ;MOVE THE THREE PACKED RAD50 CHARS TO THE DEST. MOV R4,(R1)+ ;1 3-CHAR WORD IN PLACE. BR 5$ ;GO DO IT AGAIN. 55$: ;THE RAD50 CONVERSION IS COMPLETE. MOV (SP)+,R4 ;RESTORE R4... MOV (SP)+,R3 ;...R3... MOV (SP)+,R2 ;...R2... MOV (SP)+,R1 ;...R1... MOV (SP)+,R0 ;...AND R0. RTS R5 ;RETURN TO CALLER. .END