;******************************************************************************* ; E B A S C I . M A C ;******************************************************************************* .TITLE EBCDIC TO ASCII CONVERSION ROUTINE .IDENT /EAC1.0/ .NLIST BEX .ENABL LC .SBTTL AUTHOR'S CREDITS ; PROGRAMMER: HENRY TUMBLIN ; THE JACKSON LABORATORY COMPUTER SERVICE ; DATE: FEBRUARY 1,1978 ; VERSION: 1.0 ; RESIDENCE: DB1:[1,20]EBASCI.MAC ; FOR: SYSTEMS/UTILITY SUBROUTINES ; MODULE NAME: EBASCI ; MACHINE/SYSTEM: PDP11/45-IAS V2.0 ; TYPE/LANGUAGE: SUBROUTINE/ASSEMBLER ; ABSTRACT: THIS SUBROUTINE WILL TRANSLATE AN EBCDIC ; STRING TO ITS ASCII EQUIVALENT. IF THERE ; IS A NON-TRANSLATABLE CHARACTER, IT IS ; FLAGGED AS A QUESTION MARK IN THE OUTPUT ; STRING. THIS ROUTINE WAS ORIGINALLY ; RELEASED FROM DECUS, BUT THE TRANSLATION ; TABLE HAD A COUPLE OF BUGS IN IT WHICH ; I HAVE SINCE TAKEN CARE OF. ; FORTRAN CALL: CALL EBASCI(LEN,STRNG) ; WHERE: ; LEN IS THE LENGTH(IN BYTES) OF THE STRING, ; STRNG IS THE ARRAY CONTAINING THE STRING. ; EDITS: FEBRUARY 1, 1978 - FIXED ERROR IN TRANSLATION TABLE ; AND DOCUMENTED FOR JAX STANDARD. HRT. ;******************************************************************************* .SBTTL CODE AREA ;******************************************************************************* .PSECT EBSPUR,RO,I,REL ; EBASCI:: MOV R0,-(SP) ;SAVE WORK REGISTERS MOV R1,-(SP) MOV R2,-(SP) ; MOV @2(R5),R2 ;FIRST PARAM-NO. OF BYTES MOV 4(R5),R1 ;SECOND PARAM - STRING OF BYTES ; 1$: CLR R0 BISB @R1,R0 ;GET A BYTE MOVB CONTAB(R0),(R1)+ ;CONVERT AND REPLACE SOB R2,1$ ;DONE? MOV (SP)+,R2 MOV (SP)+,R1 MOV (SP)+,R0 ;RESTORE REGISTER RTS PC CONTAB: .BYTE 000,001,002,003,077,011,077,177,077,077,077,013,014,015,016,017 ;00-0F .BYTE 020,021,022,023,077,077,010,077,030,031,077,077,034,035,036,037 ;10-1F .BYTE 077,077,077,077,077,012,027,033,077,077,077,077,077,005,006,007 ;20-2F .BYTE 077,077,026,077,077,077,077,004,077,077,077,077,024,025,077,032 ;30-3F .BYTE 040,077,077,077,077,077,077,077,077,077,133,056,074,050,053,041 ;40-4F .BYTE 046,077,077,077,077,077,077,077,077,077,135,044,052,051,073,136 ;50-5F .BYTE 055,057,077,077,077,077,077,077,077,077,174,054,045,137,076,077 ;60-6F .BYTE 077,077,077,077,077,077,077,077,077,140,072,043,100,047,075,042 ;70-7F .BYTE 077,141,142,143,144,145,146,147,150,151,077,077,077,077,077,077 ;80-8F .BYTE 077,152,153,154,155,156,157,160,161,162,077,077,077,077,077,077 ;90-9F .BYTE 077,176,163,164,165,166,167,170,171,172,077,077,077,077,077,077 ;A0-AF .BYTE 077,077,077,077,077,077,077,077,077,077,077,077,077,077,077,077 ;B0-BF .BYTE 173,101,102,103,104,105,106,107,110,111,077,077,077,077,077,077 ;C0-CF .BYTE 175,112,113,114,115,116,117,120,121,122,077,077,077,077,077,077 ;D0-DF .BYTE 134,077,123,124,125,126,127,130,131,132,077,077,077,077,077,077 ;E0-EF .BYTE 060,061,062,063,064,065,066,067,070,071,077,077,077,077,077,077 ;F0-FF ; ;******************************************************************************* .END