Your message dated: Fri, 07 Aug 2015 09:47:14 -0700 -------- > The change was initially thought to be benign and attempted to allows for > the simh source to be useful on systems with other than ASCII character > sets (i.e. EBCDIC). There are other issues with simulators running on hosts > with EBCDIC character sets which are unrelated to the source code. If/when > those are also addressed, weâll revisit how to solve the non ASCII source > code issue as well.
One of things that I frequently did when moving character specific packages to different machines is to run all input and output through two translation vectors/arrays/etc. For example the old language grammer package "Lang-pak" (written in fortran) has the following two arrays and support routines to translate terminal I/O. When I moved the code to a Cyber, all I had to do to change character sets is redo the arrays. Of course this doesn't address the architectual differences, but converting data item to "standard" format using things like htons, htonl ntohs, ntohl can help alot. -ron BLOCKDATA COMMON /TRANS/ IE2A(256), IA2E(256) DATA IE2A + / 0, 1, 2, 3, 156, 9, 134, 127, + 151, 141, 142, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 157, 133, 8, 135, + 24, 25, 146, 143, 28, 29, 30, 31, + 128, 129, 130, 131, 132, 10, 23, 27, + 136, 137, 138, 139, 140, 5, 6, 7, + 144, 145, 22, 147, 148, 149, 150, 4, + 152, 153, 154, 155, 20, 21, 158, 26, + 32, 160, 161, 162, 163, 164, 165, 166, + 167, 168, 91, 46, 60, 40, 43, 93, + 38, 169, 170, 171, 172, 173, 174, 175, + 176, 177, 33, 36, 42, 41, 59, 94, + 45, 47, 178, 179, 180, 181, 182, 183, + 184, 185, 124, 44, 37, 95, 62, 63, + 186, 187, 188, 189, 190, 191, 192, 193, + 194, 96, 58, 35, 64, 39, 61, 34, + 195, 97, 98, 99, 100, 101, 102, 103, + 104, 105, 196, 197, 198, 199, 200, 201, + 202, 106, 107, 108, 109, 110, 111, 112, + 113, 114, 203, 204, 205, 206, 207, 208, + 209, 126, 115, 116, 117, 118, 119, 120, + 121, 122, 210, 211, 212, 213, 214, 215, + 216, 217, 218, 219, 220, 221, 222, 223, + 224, 225, 226, 227, 228, 229, 230, 231, + 123, 65, 66, 67, 68, 69, 70, 71, + 72, 73, 232, 233, 234, 235, 236, 237, + 125, 74, 75, 76, 77, 78, 79, 80, + 81, 82, 238, 239, 240, 241, 242, 243, + 92, 159, 83, 84, 85, 86, 87, 88, + 89, 90, 244, 245, 246, 247, 248, 249, + 48, 49, 50, 51, 52, 53, 54, 55, + 56, 57, 250, 251, 252, 253, 254, 255/ DATA IA2E + / 0, 1, 2, 3, 55, 45, 46, 47, + 22, 5, 37, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 60, 61, 50, 38, + 24, 25, 63, 39, 28, 29, 30, 31, + 64, 90, 127, 123, 91, 108, 80, 125, + 77, 93, 92, 78, 107, 96, 75, 97, + 240, 241, 242, 243, 244, 245, 246, 247, + 248, 249, 122, 94, 76, 126, 110, 111, + 124, 193, 194, 195, 196, 197, 198, 199, + 200, 201, 209, 210, 211, 212, 213, 214, + 215, 216, 217, 226, 227, 228, 229, 230, + 231, 232, 233, 74, 224, 79, 95, 109, + 121, 129, 130, 131, 132, 133, 134, 135, + 136, 137, 145, 146, 147, 148, 149, 150, + 151, 152, 153, 162, 163, 164, 165, 166, + 167, 168, 169, 192, 106, 208, 161, 7, + 32, 33, 34, 35, 36, 37, 6, 23, + 40, 41, 42, 43, 44, 9, 10, 27, + 48, 49, 50, 51, 52, 53, 54, 8, + 56, 57, 58, 59, 4, 20, 62, 225, + 65, 66, 67, 68, 69, 70, 71, 72, + 73, 81, 82, 83, 84, 85, 86, 87, + 88, 89, 98, 99, 100, 101, 102, 103, + 104, 105, 112, 113, 114, 115, 116, 117, + 118, 119, 120, 128, 138, 139, 140, 141, + 142, 143, 144, 154, 155, 156, 157, 158, + 159, 160, 170, 171, 172, 173, 174, 175, + 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, + 202, 203, 204, 205, 206, 207, 218, 219, + 220, 221, 222, 223, 234, 235, 236, 237, + 238, 239, 250, 251, 252, 253, 254, 255/ END subroutine tread(in,kf,ilen) character*1000 inputline character*480 request dimension in(1) common /trans/ ie2a(256), ia2e(256) common /iocom/ iout request='' irlen=0 10 read (*,'(a)') inputline ilen = len(inputline) 1 if (inputline(ilen:ilen).eq.' '.and.ilen.gt.0) then ilen = ilen - 1 goto 1 endif request(irlen+1:irlen+ilen) = inputline(1:ilen) irlen = irlen + ilen if (inputline(ilen:ilen).eq.'$') then irlen = irlen - 1 goto 10 endif ilen = irlen do 2 i = 1, ilen in(kf+i-1) = ia2e(ichar(request(I:I))+1) 2 continue return end subroutine twrite(in,kf,ilen) character*1000 outputline character*1000 encodestring dimension in(1) common /iocom/ iout outputline = encodestring(in,kf,ilen) write(iout,'(a)') outputline(1:ilen) return end character*(*) function encodestring(LN,kf,LEN) dimension ln(1) COMMON /TRANS/ IE2A(256), IA2E(256) encodestring = '' do 1 i = 1, len encodestring(i:i) = char(ie2a(ln(i+kf-1)+1)) 1 continue return end =============================================================================== Ron Young r...@embarqmail.com
_______________________________________________ Simh mailing list Simh@trailing-edge.com http://mailman.trailing-edge.com/mailman/listinfo/simh