Update Function CONVERT_HEX_TO_CHAR

This commit is contained in:
2026-02-25 23:00:47 +00:00
parent 9efa6994f0
commit fd60a90744

View File

@@ -1 +1,196 @@
@\@^@
SET PATH *LIBL ;
CREATE OR REPLACE FUNCTION CISTOOLS.CONVERT_HEX_TO_CHAR (
HEX_STRING VARCHAR(32000) )
RETURNS VARCHAR(16000)
LANGUAGE SQL
SPECIFIC CISTOOLS.CONVERT_HEX_TO_CHAR
NOT DETERMINISTIC
READS SQL DATA
CALLED ON NULL INPUT
SET OPTION ALWBLK = *ALLREAD ,
ALWCPYDTA = *OPTIMIZE ,
COMMIT = *CHG ,
DECRESULT = (31, 31, 00) ,
DYNDFTCOL = *NO ,
DYNUSRPRF = *USER ,
SRTSEQ = *HEX
BEGIN ATOMIC
DECLARE WRESULT VARCHAR ( 16000 ) DEFAULT '' ;
DECLARE I INTEGER DEFAULT 1 ;
DECLARE LEN INTEGER ;
DECLARE PAIR CHAR ( 2 ) ;
DECLARE DECIMAL_VAL INTEGER ;
DECLARE CHAR_VAL CHAR ( 1 ) ;
-- Handle null input
IF HEX_STRING IS NULL THEN
RETURN '' ;
END IF ;
SET LEN = LENGTH ( TRIM ( HEX_STRING ) ) ;
-- Ensure even length (hex pairs)
IF MOD ( LEN , 2 ) <> 0 THEN
SET LEN = LEN - 1 ;
END IF ;
WHILE I <= LEN DO
SET PAIR = UPPER ( SUBSTR ( HEX_STRING , I , 2 ) ) ;
-- Convert hex pair to decimal
SET DECIMAL_VAL =
CASE SUBSTR ( PAIR , 1 , 1 )
WHEN '0' THEN 0
WHEN '1' THEN 16
WHEN '2' THEN 32
WHEN '3' THEN 48
WHEN '4' THEN 64
WHEN '5' THEN 80
WHEN '6' THEN 96
WHEN '7' THEN 112
WHEN '8' THEN 128
WHEN '9' THEN 144
WHEN 'A' THEN 160
WHEN 'B' THEN 176
WHEN 'C' THEN 192
WHEN 'D' THEN 208
WHEN 'E' THEN 224
WHEN 'F' THEN 240
ELSE 0
END +
CASE SUBSTR ( PAIR , 2 , 1 )
WHEN '0' THEN 0
WHEN '1' THEN 1
WHEN '2' THEN 2
WHEN '3' THEN 3
WHEN '4' THEN 4
WHEN '5' THEN 5
WHEN '6' THEN 6
WHEN '7' THEN 7
WHEN '8' THEN 8
WHEN '9' THEN 9
WHEN 'A' THEN 10
WHEN 'B' THEN 11
WHEN 'C' THEN 12
WHEN 'D' THEN 13
WHEN 'E' THEN 14
WHEN 'F' THEN 15
ELSE 0
END ;
-- Convert EBCDIC to ASCII using correct mappings
SET CHAR_VAL =
CASE DECIMAL_VAL
-- EBCDIC to ASCII character mappings
WHEN 64 THEN ' ' -- Space
WHEN 75 THEN '.' -- Period
WHEN 76 THEN '<' -- Less than
WHEN 77 THEN '(' -- Left parenthesis
WHEN 78 THEN '+' -- Plus sign
WHEN 79 THEN '|' -- Vertical bar
WHEN 80 THEN '&' -- Ampersand
WHEN 90 THEN '!' -- Exclamation mark
WHEN 91 THEN '$' -- Dollar sign
WHEN 92 THEN '*' -- Asterisk
WHEN 93 THEN ')' -- Right parenthesis
WHEN 94 THEN ';' -- Semicolon
WHEN 96 THEN '-' -- Hyphen/minus
WHEN 97 THEN '/' -- Slash
WHEN 107 THEN ',' -- Comma
WHEN 108 THEN '%' -- Percent
WHEN 109 THEN '_' -- Underscore
WHEN 110 THEN '>' -- Greater than
WHEN 111 THEN '?' -- Question mark
WHEN 122 THEN ':' -- Colon
WHEN 123 THEN '#' -- Number sign
WHEN 124 THEN '@' -- At sign
WHEN 125 THEN '''' -- Apostrophe
WHEN 126 THEN '=' -- Equals sign
WHEN 127 THEN '"' -- Quotation mark
-- Letters A-I (EBCDIC C1-C9)
WHEN 193 THEN 'A'
WHEN 194 THEN 'B'
WHEN 195 THEN 'C'
WHEN 196 THEN 'D'
WHEN 197 THEN 'E'
WHEN 198 THEN 'F'
WHEN 199 THEN 'G'
WHEN 200 THEN 'H'
WHEN 201 THEN 'I'
-- Letters J-R (EBCDIC D1-D9)
WHEN 209 THEN 'J'
WHEN 210 THEN 'K'
WHEN 211 THEN 'L'
WHEN 212 THEN 'M'
WHEN 213 THEN 'N'
WHEN 214 THEN 'O'
WHEN 215 THEN 'P'
WHEN 216 THEN 'Q'
WHEN 217 THEN 'R'
-- Letters S-Z (EBCDIC E2-E9)
WHEN 226 THEN 'S'
WHEN 227 THEN 'T'
WHEN 228 THEN 'U'
WHEN 229 THEN 'V'
WHEN 230 THEN 'W'
WHEN 231 THEN 'X'
WHEN 232 THEN 'Y'
WHEN 233 THEN 'Z'
-- Numbers 0-9 (EBCDIC F0-F9)
WHEN 240 THEN '0'
WHEN 241 THEN '1'
WHEN 242 THEN '2'
WHEN 243 THEN '3'
WHEN 244 THEN '4'
WHEN 245 THEN '5'
WHEN 246 THEN '6'
WHEN 247 THEN '7'
WHEN 248 THEN '8'
WHEN 249 THEN '9'
-- Lowercase letters a-i (EBCDIC 81-89)
WHEN 129 THEN 'a'
WHEN 130 THEN 'b'
WHEN 131 THEN 'c'
WHEN 132 THEN 'd'
WHEN 133 THEN 'e'
WHEN 134 THEN 'f'
WHEN 135 THEN 'g'
WHEN 136 THEN 'h'
WHEN 137 THEN 'i'
-- Lowercase letters j-r (EBCDIC 91-99)
WHEN 145 THEN 'j'
WHEN 146 THEN 'k'
WHEN 147 THEN 'l'
WHEN 148 THEN 'm'
WHEN 149 THEN 'n'
WHEN 150 THEN 'o'
WHEN 151 THEN 'p'
WHEN 152 THEN 'q'
WHEN 153 THEN 'r'
-- Lowercase letters s-z (EBCDIC A2-A9)
WHEN 162 THEN 's'
WHEN 163 THEN 't'
WHEN 164 THEN 'u'
WHEN 165 THEN 'v'
WHEN 166 THEN 'w'
WHEN 167 THEN 'x'
WHEN 168 THEN 'y'
WHEN 169 THEN 'z'
-- For unmapped characters, return space
ELSE ' '
END ;
SET WRESULT = WRESULT || CHAR_VAL ;
SET I = I + 2 ;
END WHILE ;
RETURN WRESULT ;
END ;
COMMENT ON PARAMETER SPECIFIC FUNCTION CISTOOLS.CONVERT_HEX_TO_CHAR
( HEX_STRING IS 'Hexadecimal String' ) ;
LABEL ON SPECIFIC FUNCTION CISTOOLS.CONVERT_HEX_TO_CHAR
IS 'Convert Hex To Char' ;
GRANT ALTER , EXECUTE
ON SPECIFIC FUNCTION CISTOOLS.CONVERT_HEX_TO_CHAR
TO AMAPICS WITH GRANT OPTION ;
GRANT EXECUTE
ON SPECIFIC FUNCTION CISTOOLS.CONVERT_HEX_TO_CHAR
TO PUBLIC ;