/* ---------------------------------------------------------------- BORG * * Translate ASCII output of Ken Borgendale's LP3820 program to * EBCDIC for easier printing from CMS with FAL's LPR program. * * If an argument is specified, it is used as the translation * range. * * This is assumed to be the EBCDIC-to-ASCII table that will be * used by FAL's LPR program: * * 0 1 2 3 4 5 6 7 8 9 A B C D E F * +-------------------------------------------------+ * 0 | 00 01 02 03 1A 09 1A 7F 1A 1A 1A 0B 0C 0D 0E 0F | 0 * 1 | 10 11 12 13 1A 0A 08 1A 18 19 1A 1A 1C 1D 1E 1F | 1 * 2 | 1A 1A 1C 1A 1A 0A 17 1B 1A 1A 1A 1A 1A 05 06 07 | 2 * 3 | 1A 1A 16 1A 1A 1E 1A 04 1A 1A 1A 1A 14 15 1A 1A | 3 * 4 | 20 A6 E1 80 EB 90 9F E2 AB 8B 9B 2E 3C 28 2B 7C | 4 * 5 | 26 A9 AA 9C DB A5 99 E3 A8 9E 21 24 2A 29 3B 5E | 5 * 6 | 2D 2F DF DC 9A DD DE 98 9D AC BA 2C 25 5F 3E 3F | 6 * 7 | D7 88 94 B0 B1 B2 FC D6 FB 60 3A 23 40 27 3D 22 | 7 * 8 | F8 61 62 63 64 65 66 67 68 69 96 A4 F3 AF AE C5 | 8 * 9 | 8C 6A 6B 6C 6D 6E 6F 70 71 72 97 87 CE 93 F1 FE | 9 * A | C8 7E 73 74 75 76 77 78 79 7A EF C0 DA 5B F2 F9 | A * B | B5 B6 FD B7 B8 B9 E6 BB BC BD 8D D9 BF 5D D8 C4 | B * C | 7B 41 42 43 44 45 46 47 48 49 CB CA BE E8 EC ED | C * D | 7D 4A 4B 4C 4D 4E 4F 50 51 52 A1 AD F5 F4 A3 8F | D * E | 5C E7 53 54 55 56 57 58 59 5A A0 85 8E E9 E4 D1 | E * F | 30 31 32 33 34 35 36 37 38 39 B3 F7 F0 FA A7 FF | F * +-------------------------------------------------+ * 0 1 2 3 4 5 6 7 8 9 A B C D E F * * ASCII characters that cannot be produced by FAL's EBCDIC-to- * ASCII translation are converted to an octal specification * before the ASCII-to-EBCDIC translation is done. The translation * is done using a table that is the inverse of FAL's EBCDIC-to- * ASCII table, feeble as that is, in order to recover all the * characters in the code page. */ Signal On Error Signal On Novalue Signal On Syntax fala2e =, /* Inverse of FAL's E2A table. */ '00 01 02 03 37 2D 2E 2F 16 05 25 0B 0C 0D 0E 0F', '10 11 12 13 3C 3D 32 26 18 19 04 27 1C 1D 1E 1F', '40 5A 7F 7B 5B 6C 50 7D 4D 5D 5C 4E 6B 60 4B 61', 'F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 7A 5E 4C 7E 6E 6F', '7C C1 C2 C3 C4 C5 C6 C7 C8 C9 D1 D2 D3 D4 D5 D6', 'D7 D8 D9 E2 E3 E4 E5 E6 E7 E8 E9 AD E0 BD 5F 6D', '79 81 82 83 84 85 86 87 88 89 91 92 93 94 95 96', '97 98 99 A2 A3 A4 A5 A6 A7 A8 A9 C0 4F D0 A1 07' fala2e = fala2e, '43 00 00 00 00 EB 00 9B 71 00 00 49 90 BA EC DF', '45 00 00 9D 72 00 8A 9A 67 56 64 4A 53 68 59 46', 'EA DA 00 DE 8B 55 41 FE 58 51 52 48 69 DB 8E 8D', '73 74 75 FA 00 B0 B1 B3 B4 B5 6A B7 B8 B9 CC BC', 'AB 00 00 00 BF 8F 00 00 A0 00 CB CA 00 00 9C 00', '00 EF 00 00 00 00 77 70 BE BB AC 54 63 65 66 62', '00 42 47 57 EE 00 B6 E1 CD ED 00 44 CE CF 00 AA', 'FC 9E AE 8C DD DC 00 FB 80 AF FD 78 76 B2 9F FF' nonFAL =, /* Preserve ASCII values FAL doesn't generate: */ ' change' Arg(1) 'x81 x5c323031', /* udieresis to "\201". */ '| change' Arg(1) 'x82 x5c323032', /* eacute to "\202". */ '| change' Arg(1) 'x83 x5c323033', /* acircumflex to "\203". */ '| change' Arg(1) 'x84 x5c323034', /* adieresis to "\204". */ '| change' Arg(1) 'x86 x5c323036', /* aring to "\206". */ '| change' Arg(1) 'x89 x5c323131', /* edieresis to "\211". */ '| change' Arg(1) 'x8A x5c323132', /* egrave to "\212". */ '| change' Arg(1) 'x91 x5c323231' /* ae to "\221". */ nonFAL = nonFAL, '| change' Arg(1) 'x92 x5c323232', /* AE to "\222". */ '| change' Arg(1) 'x95 x5c323235', /* ograve to "\225". */ '| change' Arg(1) 'xA2 x5c323432', /* oacute to "\242". */ '| change' Arg(1) 'xB4 x5c323634', /* SF090000 to "\264". */ '| change' Arg(1) 'xC1 x5c333031', /* SF070000 to "\301". */ '| change' Arg(1) 'xC2 x5c333032', /* SF060000 to "\302". */ '| change' Arg(1) 'xC3 x5c333033', /* SF080000 to "\303". */ '| change' Arg(1) 'xC6 x5c333036' /* atilde to "\306". */ nonFAL = nonFAL, '| change' Arg(1) 'xC7 x5c333037', /* Atilde to "\307". */ '| change' Arg(1) 'xC9 x5c333131', /* quotedblbase to "\311". */ '| change' Arg(1) 'xCC x5c333134', /* quoteleft to "\314". */ '| change' Arg(1) 'xCD x5c333135', /* emdash to "\315". */ '| change' Arg(1) 'xCF x5c333137', /* currency to "\317". */ '| change' Arg(1) 'xD0 x5c333230', /* eth to "\320". */ '| change' Arg(1) 'xD2 x5c333232', /* Ecircumflex to "\322". */ '| change' Arg(1) 'xD3 x5c333233' /* Edieresis to "\323". */ nonFAL = nonFAL, '| change' Arg(1) 'xD4 x5c333234', /* Egrave to "\324". */ '| change' Arg(1) 'xD5 x5c333235', /* dotlessi to "\325". */ '| change' Arg(1) 'xE0 x5c333430', /* Oacute to "\340". */ '| change' Arg(1) 'xE5 x5c333435', /* Otilde to "\345". */ '| change' Arg(1) 'xEA x5c333532', /* Ucircumflex to "\352". */ '| change' Arg(1) 'xEE x5c333536', /* macron to "\356". */ '| change' Arg(1) 'xF6 x5c333636' /* divide to "\366". */ 'CALLPIPE (endchar ? name BORG)', /* LP3820 output to EBCDIC: */ '*: |', /* Connect input to caller. */ nonFAL '|', /* Values FAL doesn't preserve.*/ 'x: xlate' Arg(1) '|', /* Translate rest to EBCDIC. */ 'deblock crlf |', /* Deblock for CMS. */ 'deblock fixed 4096 |', /* Split huge bitmaps for RSCS.*/ '*:', /* Connect output to caller. */ '?', 'var fala2e |', /* Load ASCII-to-EBCDIC table. */ 'change / // |', /* Dehumanize it. */ 'spec 1-* x2c 1 |', 'x:' /* Feed to XLATE stage. */ Error: Exit RC*(RC<>12) /* RC = 0 if end-of-file. */ /*-------------------------------------------------------------------*/ /* Error routines */ /*-------------------------------------------------------------------*/ Novalue: Say 'Novalue condition for symbol' Condition('D') 'on line' , Sigl':' Sourceline(Sigl) Exit 20 /* Exit with error setting. */ Syntax: Say 'Syntax error on line' Sigl':' Sourceline(Sigl) Say 'Error was:' Errortext(RC) Exit 24 /* Exit with error setting. */