HP3000-L Archives

February 2001, Week 1

HP3000-L@RAVEN.UTC.EDU

Options: Use Monospaced Font
Show Text Part by Default
Show All Mail Headers

Message: [<< First] [< Prev] [Next >] [Last >>]
Topic: [<< First] [< Prev] [Next >] [Last >>]
Author: [<< First] [< Prev] [Next >] [Last >>]

Print Reply
Subject:
From:
"Sexton, Mark # EL MONTE" <[log in to unmask]>
Reply To:
Sexton, Mark # EL MONTE
Date:
Thu, 1 Feb 2001 17:23:47 -0500
Content-Type:
text/plain
Parts/Attachments:
text/plain (130 lines)
Below is some SPL code we use to do this:

> -----Original Message-----
> From: Michael Berkowitz [mailto:[log in to unmask]]
> Sent: Thursday, February 01, 2001 1:43 PM
> To: [log in to unmask]
> Subject: [HP3000-L] EBCDIC to ASCII
>
>
> Is there a program, either from CSL, or part of other popular
> programs(MPEX
> or QEDIT) that will ask for an EBCDIC number in Hex and give
> you the ASCII
> equivalent in Hex, Octal and Character(if printable).  Yes I
> can use the
> tables in the FCOPY manual, but an online program would be nicer and
> cleaner.  Many of the businesses that do EDI with us are on
> IBM mainframe
> and AS/400 and give us EBCDIC values for element and record
> separators.
>
> Thanks
>
> Mike Berkowitz
> Guess? Inc.
>


<<------ Translate ASCII to EBCDIC -------->>

PROCEDURE ASCII'2'EBCDIC(ASCII'DATA,CHAR'CNT,EBCDIC'DATA);
  VALUE CHAR'CNT;
  INTEGER CHAR'CNT;
  BYTE ARRAY ASCII'DATA,
             EBCDIC'DATA;
  OPTION VARIABLE;

BEGIN
INTEGER CNTR;
LOGICAL PROC'BIT'MAP = Q-4;
BYTE POINTER TO'LOC;

INTEGER ARRAY EBCDIC'CHAR(0:255) = PB :=

000,001,002,003,055,045,046,047,022,005,037,011,012,
013,014,015,016,017,018,019,060,061,050,038,024,025,
063,039,028,029,030,031,064,079,127,123,091,108,080,
125,077,093,092,078,107,096,075,097,240,241,242,243,
244,245,246,247,248,249,122,094,076,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,
074,224,090,095,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,007,032,033,
034,035,036,021,006,023,040,041,042,043,044,009,010,
027,048,049,026,051,052,053,054,008,056,057,058,059,
004,020,062,225,065,066,067,068,069,070,071,072,073,
081,082,083,084,085,086,087,088,089,098,099,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

     ;

<<----- Start of Procedure Mainline ------->>
IF PROC'BIT'MAP.(15:1) THEN
  @TO'LOC := @EBCDIC'DATA
ELSE
  @TO'LOC := @ASCII'DATA;

FOR CNTR := 0 UNTIL (CHAR'CNT - 1) DO
  TO'LOC(CNTR) := BYTE(EBCDIC'CHAR(ASCII'DATA(CNTR)));

END;

<<------ Translate EBCDIC to ASCII -------->>

PROCEDURE EBCDIC'2'ASCII(EBCDIC'DATA,CHAR'CNT,ASCII'DATA);
  VALUE CHAR'CNT;
  INTEGER CHAR'CNT;
  BYTE ARRAY EBCDIC'DATA,
             ASCII'DATA;
  OPTION VARIABLE;

BEGIN
INTEGER CNTR;
LOGICAL PROC'BIT'MAP = Q-4;
BYTE POINTER TO'LOC;

INTEGER ARRAY ASCII'CHAR(0:255) = PB :=

000,001,002,003,156,009,134,127,151,141,142,011,012,
013,014,015,016,017,018,019,157,133,008,135,024,025,
146,143,028,029,030,031,128,129,130,131,132,010,023,
027,136,137,138,139,140,005,006,007,144,145,022,147,
148,149,150,004,152,153,154,155,020,021,158,026,032,
160,161,162,163,164,165,166,167,168,091,046,060,040,
043,033,038,169,170,171,172,173,174,175,176,177,093,
036,042,041,059,094,045,047,178,179,180,181,182,183,
184,185,124,044,037,095,062,063,186,187,188,189,190,
191,192,193,194,096,058,035,064,039,061,034,195,097,
098,099,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,065,066,
067,068,069,070,071,072,073,232,233,234,235,236,237,
125,074,075,076,077,078,079,080,081,082,238,239,240,
241,242,243,092,159,083,084,085,086,087,088,089,090,
244,245,246,247,248,249,048,049,050,051,052,053,054,
055,056,057,250,251,252,253,254,255

     ;

<<----- Start of Procedure Mainline ------->>
IF PROC'BIT'MAP.(15:1) THEN
  @TO'LOC := @ASCII'DATA
ELSE
  @TO'LOC := @EBCDIC'DATA;

FOR CNTR := 0 UNTIL (CHAR'CNT - 1) DO
  TO'LOC(CNTR) := BYTE(ASCII'CHAR(EBCDIC'DATA(CNTR)));

END;

         <<  End of PASCIEBC >>

ATOM RSS1 RSS2