HP 3000 Manuals

Converting from Character: [ DATA TYPES CONVERSION Programmer's Guide ] MPE/iX 5.0 Documentation


DATA TYPES CONVERSION Programmer's Guide

Converting from Character: 

This section offers suggestions about converting from one character set
to another, and from ASCII (character) numbers to numeric data types.

To Other Character 

Since all characters are 8 bits long and all are byte-aligned, there is
no incompatibility between between languages or environments.

You may want to convert between different character sets.  ASCII and
EBCDIC are the supported English character sets; several native language
character sets like the Japenese EBCDIK and JISCII are also supported.

Between ASCII and EBCDIC.  The CTRANSLATE intrinsic accepts a string of
characters in either ASCII or EBCDIC, and returns a string translated
into the other.  The translation string is returned the same buffer
unless you specify another.

ASCII and EBCDIC are described in Chapter 2 of this book, and their code
equivalents are in Appendix A.

Between Native Languages.  The Native Language Subsystem (NLS) supports
six character sets containing the following native languages:

 *  USASCII supports NATIVE-3000, an artificial language

 *  ROMAN8 supports:
      NATIVE-3000
      American English
      Canadian French
      Danish
      Dutch
      English
      Finnish
      French
      German
      Italian
      Norwegian
      Portuguese
      Spanish
      Swedish
      Icelandic

 *  KANA8 supports:
      NATIVE-3000
      KATAKANA

 *  ARABIC8 supports:
      Arabic
      Western Arabic

 *  Greek8 supports Greek

 *  Turkish8 supports Turkish

Use the intrinsic NLINFO or generate a report from the NLUTIL utility to
review information about a character's native language format.  For more
information, refer to MPE XL Intrinsics Reference Manual (32650-90028).

Use the intrinsic CTRANSLATE to translate between EBCDIK and JIS(KANA8).
EBCDIK is a Hewlett-Packard's Japanese version of EBCDIC. JIS is a
Japanese International Standard code (JISCII is a Japanese version of US
ASCII); KANA8 is an 8-bit JIS code.

Use the intrinsic NLREPCHAR to replace nondisplayable characters.  It
accepts a character array containing nondisplayable characters and
returns another character array with replacement characters.  (NLINFO can
tell you if the character is nondisplayable because it is a control code
or an undefined graphic character).

Between Numeric Formats.  If you are sending data files to, or receiving
data from, a foreign country, you may discover that numbers are
represented differently in different native languages.  The following
intrinsics are used for converting ASCII numbers between native language
formats:

 *  NLCONVNUM takes data in a foreign language (one that is supported in
    NATIVE-3000) and translates it to the system's native language.  It
    accepts a foreign language number with decimal and thousands
    separators and returns an ASCII number with NATIVE-3000 decimal and
    thousands separators.  As an option, the decimal and thousands
    separators can be stripped.

 *  NLFMTNUM takes native language data and translates it to a foreign
    language that is supported by NATIVE-3000.  It accepts an ASCII
    number string, which may include NATIVE-3000 decimal separator,
    thousands separator, and currency symbol or name.  It returns a
    string with the same number, but formatted with the decimal
    separator, thousands separator, and currency symbol or name of the
    native language you specify.

 *  NLNUMSPEC accepts a string as a logical byte array (minimum 60 bytes)
    and a language identification number.  It returns the string encoded
    with information (number specifications) about the characteristics of
    the language, such as
      Direction (left-to-right or right-to-left),
      Digit range.
      Symbols for digits, currency, mathematical operations, and
      thousands and decimal separators.

For further information about the Native Language Subsystem, refer to
Native Language Programmer's Guide (32650-90022).

To Integer 

Individual languages may have simple assignment commands to accept
characters and interpret the symbol as its value.  For example, STRREAD
in Pascal or READ in FORTRAN will read an ASCII number and format a
variable as the value the character string represents.

The intrinsic DBINARY accepts an octal-based, a hexadecimal-based, or a
signed decimal-based number in ASCII characters, and returns a 32-bit
binary integer in twos complement (signed) form.

A character string beginning with a percent sign (%) is treated as octal
(base 8) value.  A string beginning with a dollar sign ($) is treated as
a hexadecimal (base 16) number.  A string begining with a plus sign (+),
a minus sign (-), or a number (1 through 9, no leading blanks allowed) is
treated as a decimal (base 10) number.

The intrinsic BINARY performs a similar operation; it converts a numeric
ASCII string into a 16-bit binary value.  A parameter indicates the
number of input bytes.

The compiler utility procedures, EXTIN' (CM) and HPEXTIN (NM) can also be
used to convert from ASCII to integer.  Any fractions in the input number
string will be truncated in integer results.

To Real 

As with converting from character to integer (above), the simplest way to
convert character to real type may be an assignment statement within the
language.

The compiler utility procedures EXTIN' (CM) and HPEXTIN (NM) accept a
byte array (a character string of ASCII digits passed by reference) and
convert it into an internal representation.  Leading blanks in the input
string are ignored.  A parameter can be set to treat trailing blanks as
zeros.  Dollar signs and other currency symbols and commas for thousands
separators are counted in the input length, but are ignored in the
output.

In the datatype parameter, you specify which internal representation you
want:  an integer of 16 bits or 32 bits, or a real of 32 bits or 64 bits.
The result parameter is a 32-bit pointer to the first word of result
storage, according to the type specified.  Other parameters let you
specify field width, decimal places, exponents, and fractions.

To Packed Decimal 

In MPE V, system instructions use packed decimals; for compatibility, MPE
XL has compiler library procedures that run in NM and emulate the MPE V
instruction set.  In MPE XL, the packed decimal type is used only in
COBOL or RPG, however.  Within COBOL and RPG, use the MOVE command to
convert easily between types by assignment.

The NM compiler procedure HPPACCVAD accepts ASCII digits and returns the
packed decimal digits used by MPE V and in COBOL and RPG. The rightmost
source digit indicates the sign; all other digits must be unsigned or be
leading blanks.  Blanks between digits are illegal.  Leading blanks are
converted to packed-decimal zeros.  An all-blank field converts to an
unsigned zero.  If the source has more digits than the target, the result
is left-truncated; if the target is the larger, the result is padded with
zeros on the left.

Because this procedure is external and general, it may not be as
efficient as code optimized by the NM COBOL compiler.  Packed-decimal
procedures must be declared as intrinsics to be called from within
high-level NM languages.  If speed is a primary concern, consider doing
packed-decimal operations within HP COBOL II/XL or HP RPG/XL.



MPE/iX 5.0 Documentation