[Simh] Problem with default builds
Ron Young
rly1 at embarqmail.com
Fri Aug 7 13:50:40 EDT 2015
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 rly1 at embarqmail.com
More information about the Simh
mailing list