C ***  ASCII TO EBCIDIC CONVERSION PROGRAM
C *
C *  PROGRAMMER: SCOTT HOWARD
C *              ALFRED UNIVERSITY
C *
C *   IBUF - THE INTEGER BUFFER CONTAINING THE DATA
C *   NCHAR - THE NUMBER OF CHARACTERS TO CONVERT
C *
C *  IF IBUF <0 THEN CONVERSION IS ASCII TO EBCIDIC
C *  IF IBUF >0 THEN CONVERSION IS EBCIDIC TO ASCII
C *
      SUBROUTINE ASCIIC( IBUF, NCHAR )
c *
      DIMENSION IAE(128), IEA(256), IBUF(2)
C *
      DATA IAE(  1),IAE(  2),IAE(  3),IAE(  4) /  0,  1,  2,  3/
      DATA IAE(  5),IAE(  6),IAE(  7),IAE(  8) /  4,  9,  6,  7/
      DATA IAE(  9),IAE( 10),IAE( 11),IAE( 12) /  8,  5, 37, 11/
      DATA IAE( 13),IAE( 14),IAE( 15),IAE( 16) / 12, 21, 14, 15/
      DATA IAE( 17),IAE( 18),IAE( 19),IAE( 20) / 16, 17, 18, 19/
      DATA IAE( 21),IAE( 22),IAE( 23),IAE( 24) / 20, 10, 22, 23/
      DATA IAE( 25),IAE( 26),IAE( 27),IAE( 28) / 24, 25, 26, 27/
      DATA IAE( 29),IAE( 30),IAE( 31),IAE( 32) / 28, 29, 30, 31/
      DATA IAE( 33),IAE( 34),IAE( 35),IAE( 36) / 64, 90,127,123/
      DATA IAE( 37),IAE( 38),IAE( 39),IAE( 40) / 91,108, 80,125/
      DATA IAE( 41),IAE( 42),IAE( 43),IAE( 44) / 77, 93, 92, 78/
      DATA IAE( 45),IAE( 46),IAE( 47),IAE( 48) /107, 96, 75, 97/
      DATA IAE( 49),IAE( 50),IAE( 51),IAE( 52) /240,241,242,243/
      DATA IAE( 53),IAE( 54),IAE( 55),IAE( 56) /244,245,246,247/
      DATA IAE( 57),IAE( 58),IAE( 59),IAE( 60) /248,249,122, 94/
      DATA IAE( 61),IAE( 62),IAE( 63),IAE( 64) / 76,126,110,111/
      DATA IAE( 65),IAE( 66),IAE( 67),IAE( 68) /124,193,194,195/
      DATA IAE( 69),IAE( 70),IAE( 71),IAE( 72) /196,197,198,199/
      DATA IAE( 73),IAE( 74),IAE( 75),IAE( 76) /200,201,209,210/
      DATA IAE( 77),IAE( 78),IAE( 79),IAE( 80) /211,212,213,214/
      DATA IAE( 81),IAE( 82),IAE( 83),IAE( 84) /215,216,217,226/
      DATA IAE( 85),IAE( 86),IAE( 87),IAE( 88) /227,228,229,230/
      DATA IAE( 89),IAE( 90),IAE( 91),IAE( 92) /231,232,233, 79/
      DATA IAE( 93),IAE( 94),IAE( 95),IAE( 96) /177, 95,106,109/
      DATA IAE( 97),IAE( 98),IAE( 99),IAE(100) /125,129,130,131/
      DATA IAE(101),IAE(102),IAE(103),IAE(104) /132,133,134,135/
      DATA IAE(105),IAE(106),IAE(107),IAE(108) /136,137,145,146/
      DATA IAE(109),IAE(110),IAE(111),IAE(112) /147,148,149,150/
      DATA IAE(113),IAE(114),IAE(115),IAE(116) /151,152,153,162/
      DATA IAE(117),IAE(118),IAE(119),IAE(120) /163,164,165,166/
      DATA IAE(121),IAE(122),IAE(123),IAE(124) /167,168,169,178/
      DATA IAE(125),IAE(126),IAE(127),IAE(128) / 79,179, 27,255/
C *
      DATA IEA(  1),IEA(  2),IEA(  3),IEA(  4) /  0,  1,  2,  3/
      DATA IEA(  5),IEA(  6),IEA(  7),IEA(  8) /  4,  9,  6,  7/
      DATA IEA(  9),IEA( 10),IEA( 11),IEA( 12) /  8,  5, 21, 11/
      DATA IEA( 13),IEA( 14),IEA( 15),IEA( 16) / 12, 13, 14, 15/
      DATA IEA( 17),IEA( 18),IEA( 19),IEA( 20) / 16, 17, 18, 19/
      DATA IEA( 21),IEA( 22),IEA( 23),IEA( 24) / 20, 10, 22, 23/
      DATA IEA( 25),IEA( 26),IEA( 27),IEA( 28) / 24, 25, 26, 27/
      DATA IEA( 29),IEA( 30),IEA( 31),IEA( 32) / 28, 29, 30, 31/
      DATA IEA( 33),IEA( 34),IEA( 35),IEA( 36) / 35, 28, 29, 30/
      DATA IEA( 37),IEA( 38),IEA( 39),IEA( 40) / 31, 25, 47, 94/
      DATA IEA( 41),IEA( 42),IEA( 43),IEA( 44) / 61, 35,  4,  8/
      DATA IEA( 45),IEA( 46),IEA( 47),IEA( 48) / 32,  9, 35, 35/
      DATA IEA( 49),IEA( 50),IEA( 51),IEA( 52) / 35, 24, 35, 35/
      DATA IEA( 53),IEA( 54),IEA( 55),IEA( 56) / 35, 35, 35, 35/
      DATA IEA( 57),IEA( 58),IEA( 59),IEA( 60) / 35, 35, 35, 35/
      DATA IEA( 61),IEA( 62),IEA( 63),IEA( 64) / 17, 19, 35, 35/
      DATA IEA( 65),IEA( 66),IEA( 67),IEA( 68) / 32, 35, 35, 35/
      DATA IEA( 69),IEA( 70),IEA( 71),IEA( 72) / 35, 35, 35, 35/
      DATA IEA( 73),IEA( 74),IEA( 75),IEA( 76) / 35, 35, 96, 46/
      DATA IEA( 77),IEA( 78),IEA( 79),IEA( 80) / 60, 40, 43,124/
      DATA IEA( 81),IEA( 82),IEA( 83),IEA( 84) / 38, 35, 35, 35/
      DATA IEA( 85),IEA( 86),IEA( 87),IEA( 88) / 35, 35, 35, 35/
      DATA IEA( 89),IEA( 90),IEA( 91),IEA( 92) / 35, 35, 33, 36/
      DATA IEA( 93),IEA( 94),IEA( 95),IEA( 96) / 42, 41, 59,126/
      DATA IEA( 97),IEA( 98),IEA( 99),IEA(100) / 45, 47, 35, 35/
      DATA IEA(101),IEA(102),IEA(103),IEA(104) / 35, 35, 35, 35/
      DATA IEA(105),IEA(106),IEA(107),IEA(108) / 35, 35, 94, 44/
      DATA IEA(109),IEA(110),IEA(111),IEA(112) / 37, 95, 62, 63/
      DATA IEA(113),IEA(114),IEA(115),IEA(116) / 35, 35, 35, 35/
      DATA IEA(117),IEA(118),IEA(119),IEA(120) / 35, 35, 35, 35/
      DATA IEA(121),IEA(122),IEA(123),IEA(124) / 35, 35, 58, 35/
      DATA IEA(125),IEA(126),IEA(127),IEA(128) / 64, 39, 61, 34/
      DATA IEA(129),IEA(130),IEA(131),IEA(132) / 35, 97, 98, 99/
      DATA IEA(133),IEA(134),IEA(135),IEA(136) /100,101,102,103/
      DATA IEA(137),IEA(138),IEA(139),IEA(140) /104,105, 35, 35/
      DATA IEA(141),IEA(142),IEA(143),IEA(144) / 35, 35, 35, 35/
      DATA IEA(145),IEA(146),IEA(147),IEA(148) / 35,106,107,108/
      DATA IEA(149),IEA(150),IEA(151),IEA(152) /109,110,111,112/
      DATA IEA(153),IEA(154),IEA(155),IEA(156) /113,114, 35, 35/
      DATA IEA(157),IEA(158),IEA(159),IEA(160) / 35, 35, 35, 35/
      DATA IEA(161),IEA(162),IEA(163),IEA(164) / 35, 35,115,116/
      DATA IEA(165),IEA(166),IEA(167),IEA(168) /117,118,119,120/
      DATA IEA(169),IEA(170),IEA(171),IEA(172) /121,122, 35, 35/
      DATA IEA(173),IEA(174),IEA(175),IEA(176) / 35, 35, 35, 35/
      DATA IEA(177),IEA(178),IEA(179),IEA(180) / 12, 92,123,125/
      DATA IEA(181),IEA(182),IEA(183),IEA(184) / 91, 93,  0, 35/
      DATA IEA(185),IEA(186),IEA(187),IEA(188) / 35, 35, 35, 35/
      DATA IEA(189),IEA(190),IEA(191),IEA(192) / 91, 93, 35,126/
      DATA IEA(193),IEA(194),IEA(195),IEA(196) / 32, 65, 66, 67/
      DATA IEA(197),IEA(198),IEA(199),IEA(200) / 68, 69, 70, 71/
      DATA IEA(201),IEA(202),IEA(203),IEA(204) / 72, 73, 35, 35/
      DATA IEA(205),IEA(206),IEA(207),IEA(208) / 35, 35, 35, 35/
      DATA IEA(209),IEA(210),IEA(211),IEA(212) / 35, 74, 75, 76/
      DATA IEA(213),IEA(214),IEA(215),IEA(216) / 77, 78, 79, 80/
      DATA IEA(217),IEA(218),IEA(219),IEA(220) / 81, 82, 35, 35/
      DATA IEA(221),IEA(222),IEA(223),IEA(224) / 35, 35, 35, 35/
      DATA IEA(225),IEA(226),IEA(227),IEA(228) / 45, 35, 83, 84/
      DATA IEA(229),IEA(230),IEA(231),IEA(232) / 85, 86, 87, 88/
      DATA IEA(233),IEA(234),IEA(235),IEA(236) / 89, 90, 35, 35/
      DATA IEA(237),IEA(238),IEA(239),IEA(240) / 35, 35, 35, 35/
      DATA IEA(241),IEA(242),IEA(243),IEA(244) / 48, 49, 50, 51/
      DATA IEA(245),IEA(246),IEA(247),IEA(248) / 52, 53, 54, 55/
      DATA IEA(249),IEA(250),IEA(251),IEA(252) / 56, 57, 35, 35/
      DATA IEA(253),IEA(254),IEA(255),IEA(256) / 35, 35, 35,127/
C *
C *  DETERMINE FUNCTION
      IF( NCHAR .GT. 0 )GO TO 1000
      IF( NCHAR .LT. 0 )GO TO 2000
      GO TO 9000
C *
C *  CONVERSION IS EBCIDIC TO ASCII
C *
1000  DO 1010 I=1,NCHAR
      INDEX = IBUF(I) - (IBUF(I)/256)*256
      IF( INDEX.LT.0 .OR. INDEX.GT.255 )GO TO 1010
      INDEX = INDEX + 1
      IBUF(I) = IEA( INDEX )
1010  CONTINUE
      GO TO 9000
C *
C *  CONVERSION IS ASCII TO EBCIDIC
C *
2000  NC = -NCHAR
      DO 2010 I=1,NC
      INDEX = IBUF(I) - (IBUF(I)/256)*256
      IF( INDEX.LT.0 .OR. INDEX.GT.127 )GO TO 2010
      INDEX = INDEX + 1
      IBUF(I) = IAE( INDEX )
2010  CONTINUE
C *
C *  END OF CONVERSION
9000  RETURN
      END
