PROGRAM C 100 READ(5,110,END=200) I 110 FORMAT(A1) J = ICDC( I ) WRITE(5,120) J 120 FORMAT(I8) GO TO 100 200 STOP END INTEGER FUNCTION ICDC( ICHAR ) C C This subroutine converts a character from ASCII to an C internal display number code. C COMMON /MAPPER/ IDC(65), MAPIN(128) LOGICAL DONE LOGICAL*1 ICHAR DATA DONE/.FALSE./ DATA IDC/ "55, "66, "64, "60, "53, "63, "67, "70, 1 "51, "52, "47, "45, "56, "46, "57, "50, 2 "33, "34, "35, "36, "37, "40, "41, "42, 3 "43, "44, "00, "77, "72, "54, "73, "71, 4 "74, "01, "02, "03, "04, "05, "06, "07, 5 "10, "11, "12, "13, "14, "15, "16, "17, 6 "20, "21, "22, "23, "24, "25, "26, "27, 7 "30, "31, "32, "61, "75, "62, "76, "65, "70/ C C - CALCULATE MAPPING. IF( DONE ) GO TO 2100 DONE = .TRUE. NREC = 1 MAPIN(1) = NREC MAPIN(2) = NREC DO 1000 I=1,52 NREC = NREC + 1 1000 MAPIN(2+I) = NREC DO 2000 I=55,128,2 NREC = NREC + 1 MAPIN(I) = NREC 2000 MAPIN(I+1) = NREC C C - CALCULATE CHARACTER NUMBER. 2100 IF( ICHAR .LT. "40 ) GO TO 2300 ICASE = 0 NCHAR = ICHAR IF( NCHAR .LT. "141 ) GO TO 2200 ICASE = 4 NCHAR = NCHAR - "40 2200 NCHAR = NCHAR - "40 IOFF = NCHAR+1 NCHAR = IDC( IOFF ) NCHAR = ( NCHAR*8 + ICASE)/4 + 1 IF( ( NCHAR .LT. 1 ) .OR. ( NCHAR .GT. 128 ) ) GO TO 2300 ICDC = MAPIN( NCHAR ) RETURN C C - ERROR, INVALID CHARACTER. 2300 WRITE(5,2310) ICHAR 2310 FORMAT(/,' Invalid character: ',A1) STOP END