; ; ;----------------------------------------------------------------------------- ; ; SUBROUTINE: A S C E B C ; ; AUTHOR: Jan H. Belgraver ; ; DATE: 11-JAN-83 ; ; VERSION: V1.0 ; ; MODIFIED BY: ; ; PURPOSE: Conversion of ASCII code to EBCDIC and vice versa. ; Both conversion tables are as given in RSX-11M V4.0 ; I/O Operations Reference Manual, Appendix G. ; ; FORTRAN call: CALL ASCEBC (IN, LEN, OUT, MOD) ; ARGUMENTS: ; I IN String to be converted ; I LEN Array dimension in bytes ; O OUT Converted string ; I MOD Conversion mode ; 0 ASCII ---> EBCDIC ; 1 EBCDIC ---> ASCII ; ;----------------------------------------------------------------------------- ; ; ; ; .TITLE ASCEBC .IDENT /V1.0/ ; ; .GLOBL ASCEBC .NLIST BEX ; ; ASCEBC: MOV @4(R5),R2 TST R2 ; Empty string BLE RTSPC ; Yes, exit MOV 2(R5),R3 ; R3= Address input string MOV 6(R5),R4 ; R4= Address output string TST @10(R5) ; Which conversion mode? BGT 10$ ; Yes, convert EBCDIC to ASCII 1$: MOVB (R3)+,R0 ; Fetch character MOVB CATE(R0),(R4)+ ; Character is index in table SOB R2,1$ ; Get next character until done BR RTSPC 10$: MOVB (R3)+,R0 ; Fetch character BIC #177400,R0 ; Clear high, and thus sign-bit MOV #CETA,R1 ; Fetch table address ADD R0,R1 ; R1 points to requested character MOVB (R1),(R4)+ ; Save converted character value SOB R2,10$ ; Get next character until done RTSPC: RTS PC .PAGE ;----------------------------------------------------------------------------- ; ; Table CETA converts EBCDIC values to ASCII ; ;----------------------------------------------------------------------------- CETA: .BYTE 000,001,002,003,040,011,040,177,040,040 .BYTE 040,013,014,015,016,017,020,021,022,023 .BYTE 040,040,010,040,030,031,040,040,040,035 .BYTE 040,037,040,040,034,040,040,012,027,033 .BYTE 040,040,040,040,040,005,006,007,040,040 .BYTE 026,040,040,036,040,004,040,040,040,040 ; 50. .BYTE 024,025,040,032,040,040,040,040,040,040 .BYTE 040,040,040,040,133,056,074,050,053,135 .BYTE 046,040,040,040,040,040,040,040,040,040 .BYTE 041,044,052,051,073,136,055,057,040,040 .BYTE 040,040,040,040,040,040,174,054,045,137 ; 100. .BYTE 076,077,137,040,040,040,040,040,040,040 .BYTE 040,140,072,043,100,047,075,042,040,141 .BYTE 142,143,144,145,146,147,150,151,040,040 .BYTE 040,040,040,040,040,152,153,154,155,156 .BYTE 157,160,161,162,040,040,040,040,040,040 ; 150. .BYTE 040,176,163,164,165,166,167,170,171,172 .BYTE 040,040,040,040,040,040,040,040,040,040 .BYTE 040,040,040,040,040,040,040,040,040,040 .BYTE 040,040,173,101,102,103,104,105,106,107 .BYTE 110,111,040,040,040,040,040,040,175,112 ; 150. .BYTE 113,114,115,116,117,120,121,122,040,040 .BYTE 040,040,040,040,134,040,123,124,125,126 .BYTE 127,130,131,132,040,040,040,040,040,040 .BYTE 060,061,062,063,064,065,066,067,070,071 .BYTE 040,040,040,040,040,040 ; 250. .EVEN .PAGE ;----------------------------------------------------------------------------- ; ; Table CATE converts ASCII values to EBCDIC ; ;----------------------------------------------------------------------------- CATE: .BYTE 000,001,002,003,067,055,056,057 .BYTE 026,005,045,013,014,015,016,017 .BYTE 020,021,022,023,074,075,062,046 .BYTE 030,031,077,047,042,035,065,037 .BYTE 100,132,177,173,133,154,120,175 ; 40 .BYTE 115,135,134,116,153,140,113,141 .BYTE 360,361,362,363,364,365,366,367 .BYTE 370,371,172,136,114,176,156,157 .BYTE 174,301,302,303,304,305,306,307 ; 100 .BYTE 310,311,321,322,323,324,325,326 .BYTE 327,330,331,342,343,344,345,346 .BYTE 347,350,351,112,340,117,137,155 .BYTE 171,201,202,203,204,205,206,207 ; 140 .BYTE 210,211,221,222,223,224,225,226 .BYTE 227,230,231,242,243,244,245,246 .BYTE 247,250,251,300,152,320,241,377 .END