From: <hp...@we...> - 2022-06-28 14:58:15
|
Hello René! Am 27.06.2022 um 17:00 schrieb René Jansen: > That is good news. Sorry, that was yesterday. Today I have to withdraw my statement Xlate would work with a table on secondary stream. It does not. My error was, by chance the numbers and the blank don't need to be transliterated, therefore at a too quick, first glance the output looked ok. By comparing the complete 4k output file, a ROM for the HP41, prepared using NetRexx Pipelines against the result obtained by using OS/2 Pipelines, the only difference are the four letters within 'C PPC 1981', the rest is identical. Digging for the reason of this slight discrepancy I found several errors or deviations from the role model (as I know it): i) Stage Xrange fails. Example: PIPE (sep !) xrange 00-ff ! ... Expected output: one record of 256 characters from '00'x to 'FF'x. Question: the manual states "NetRexx uses UTF-16 (ASCII) and CMS uses EBCDIC" -- is this hint related to the arguments of Xrange or its output? ii) Specs documentation error Specs conversion d2x is tagged with "(4) NetRexx Pipelines only. Not yet implemented in CMS" iii) Specs fails without output placement In contrast to the role model, where following works > pipe literal 1!spec w1 d2x!term NetRexx insists on ...!spec w1 d2x 1!... Yes, I know, this looks like a littleness, but it reminds me the story about changing 'trace i' in paragraph "Dealing with reality" of Michael Cowlishaw's "The REXX Language". iv) Specs output differs from role model On CMS: > pipe literal 1!spec w1 d2x!term > 00000001 > Ready; Result from NetRexx Pipelines is somewhat shorter. v) Specs x2c works varying First: what is a character in regard to Pipelines? While analysing all input to failing Xlate I checked the transliteration table: > address '' ripe '"(MkR_5 sep !) literal', > '3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A', > '3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A', > '202122232425262728292A2B2C2D2E2F', > '303132333435363738393A3B3C3D3E3F', > '000102030405060708090A0B0C0D0E0F', > '101112131415161718191A1B1C1D1E1F', > '404142434445463A3A3A3A3A3A3A3A3A', > '3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A', > '3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A', > '3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A', > '3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A', > '3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A', > '3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A', > '3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A', > '3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A', > '3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A!space 0!spec *-* x2c 1!', > 'fblock 16!spec *-* c2x 1!term' ... what is nothing but a simple conversion to characters and back again to hex for the display. Result is: > 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A > 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A > 202122232425262728292A2B2C2D2E2F > 303132333435363738393A3B3C3D3E3F > 0123456789ABCDEF > 101112131415161718191A1B1C1D1E1F > 404142434445463A3A3A3A3A3A3A3A3A > 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A > 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A > 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A > 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A > 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A > 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A > 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A > 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A > 3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A3A Have fun... ;) vi) Specs strips output unasked > address '' ripe '"(MkR_5 sep !) literal', > '000102030405060708090A0B0C0D0E0F!space 0!spec *-* x2c 1!', > 'fblock 1!spec 1 c2x 1!fblock 32!term' returns: 0123456789ABCDEF instead of 000102030405060708090A0B0C0D0E0F To cure this I had to code: > ... fblock 1!spec pad 0 1 c2x 1.2 r!fblock 32!term vii) Xlate ignores a transliteration table on secondary input stream. Since Xrange 00-ff fails I had to put it this way: > address '' ripe '"(MkR_5 sep ! end ?) literal', > '000102030405060708090A0B0C0D0E0F', > '101112131415161718191A1B1C1D1E1F', > '202122232425262728292A2B2C2D2E2F', > '303132333435363738393A3B3C3D3E3F', > '404142434445464748494A4B4C4D4E4F', > '505152535455565758595A5B5C5D5E5F', > '606162636465666768696A6B6C6D6E6F', > '707172737475767778797A7B7C7D7E7F', > '808182838485868788898A8B8C8D8E8F', > '909192939495969798999A9B9C9D9E9F', > 'A0A1A2A3A4A5A6A7A8A9AAABACADAEAF', > 'B0B1B2B3B4B5B6B7B8B9BABBBCBDBEBF', > 'C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF', > 'D0D1D2D3D4D5D6D7D8D9DADBDCDDDEDF', > 'E0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF', > 'F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF!space 0!spec *-* x2c 1!', > 'a: xlate *-*!fblock 1!spec pad 0 1 c2x 1.2 r!fblock 32!term', > '? literal FF!dup 255!join *!spec *-* x2c 1!a:' Result: > 000102030405060708090A0B0C0D0E0F > 101112131415161718191A1B1C1D1E1F > 202122232425262728292A2B2C2D2E2F > 303132333435363738393A3B3C3D3E3F > 404142434445464748494A4B4C4D4E4F > 505152535455565758595A5B5C5D5E5F > 604142434445464748494A4B4C4D4E4F > 505152535455565758595A7B7C7D7E7F > 808182838485868788898A8B8C8D8E8F > 909192939495969798999A9B9C9D9E9F > A0A1A2A3A4A5A6A7A8A9AAABACADAEAF > B0B1B2B3B49CB6B7B8B9BABBBCBDBEBF > C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF > D0D1D2D3D4D5D6D7D8D9DADBDCDDDEDF > C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF > D0D1D2D3D4D5D6F7D8D9DADBDCDDDE78 Expected result would be 16 rows of 32 'F'. viii) Address documentation error This is related to ooRexx, but maybe someone here is also interested: > address '' ripe '"(MkR_6 sep !) cons!', > 'spec recno from 61440 d2x 1.4 r pad 0 w1 d2x nw.3 r!cons', > with input stem rom. output REPLACE USING (f) > Error 98.997: REPLACE or APPEND cannot be specified with a Stream object USING target. This can not be educed from the RRT diagram. BTW, I used keyword USING since STREAM (what IMO would be more 'natural' when using a stream object) failed with: > Error 98.920: Unable to open file "D:\...\C PPC 1981.hpmclist.txt" for writing; open result was "ERROR:13". No explanation found for "ERROR:13". ix) default REPLACE does in fact APPEND > address '' ripe '"(MkR_6 sep !) cons!', > 'spec recno from 61440 d2x 1.4 r pad 0 w1 d2x nw.3 r!cons', > with input stem rom. output USING (f) Result: output appended to previously written file. Expected result: overwrite previously written file. Best, M. |