From fd60a907444996d0cacd585068ff9cce9ba18bc6 Mon Sep 17 00:00:00 2001 From: Alex Zaw Date: Wed, 25 Feb 2026 23:00:47 +0000 Subject: [PATCH] Update Function CONVERT_HEX_TO_CHAR --- CISTOOLS/Functions/CONVERT_HEX_TO_CHAR.sql | 197 ++++++++++++++++++++- 1 file changed, 196 insertions(+), 1 deletion(-) diff --git a/CISTOOLS/Functions/CONVERT_HEX_TO_CHAR.sql b/CISTOOLS/Functions/CONVERT_HEX_TO_CHAR.sql index 8322ec0..6a7cc72 100644 --- a/CISTOOLS/Functions/CONVERT_HEX_TO_CHAR.sql +++ b/CISTOOLS/Functions/CONVERT_HEX_TO_CHAR.sql @@ -1 +1,196 @@ -@@\@^@ % %@@@@Kmmm@M@ %m@M]@]@ %@M]@@@ %@@ %@Kmmm@ %@@ %@@@ %@@@@ %@@@@~@\@k@ %@~@\@k@ %@~@\@k@ %@~@Mk@k@]@k@ %@~@\@k@ %@~@\@k@ %@~@\@@@ %@@ %@@@M@@]@@}}@^@ %@@@@@^@ %@@@^@ %@@@M@@]@^@ %@m@@^@ %@m@@M@@]@^@ %``@ȁ@@@ %@m@@@@ %@}}@^@ %@@^@ %@@~@@M@@M@m@]@]@^@ %``@ŕ@@@M@]@ %@@M@@k@@]@Ln@@@ %@@~@@`@@^@ %@@^@ %@@L~@@@ %@@~@@M@@M@m@k@@k@@]@]@^@ %``@Ö@@@@@ %@m@~@ %@@M@@k@@k@@]@ %@}}@@@ %@}}@@@ %@}}@@@ %@}}@@@ %@}}@@@ %@}}@@@ %@}}@@@ %@}}@@@ %@}}@@@ %@}}@@@ %@}}@@@ %@}}@@@ %@}}@@@ %@}}@@@ %@}}@@@ %@}}@@@ %@@ %@N@ %@@M@@k@@k@@]@ %@}}@@@ %@}}@@@ %@}}@@@ %@}}@@@ %@}}@@@ %@}}@@@ %@}}@@@ %@}}@@@ %@}}@@@ %@}}@@@ %@}}@@@ %@}}@@@ %@}}@@@ %@}}@@@ %@}}@@@ %@}}@@@ %@@ %@^@ %``@Ö@@@@@@@ %@m@~@ %@m@ %``@@@@@@ %@@@}@}@@``@◁@ %@@@}K}@@``@ׅ@ %@@@}L}@@``@Ӆ@@ %@@@}M}@@``@Ӆ@@ %@@@}N}@@``@ד@@ %@@@}O}@@``@兙@@ %@@@}P}@@``@@ %@@@}Z}@@``@ŧ@@ %@@@}[}@@``@Ė@@ %@@@}\}@@``@@ %@@@}]}@@``@ى@@ %@@@}^}@@``@⅔@ %@@@}`}@@``@Ȩa@ %@@@}a}@@``@Ⓛ@ %@@@}k}@@``@Ö@ %@@@}l}@@``@ׅ@ %@@@}m}@@``@䕄@ %@@@}n}@@``@Ǚ@@ %@@@}o}@@``@ؤ@@ %@@@}z}@@``@Ö@ %@@@}{}@@``@դ@@ %@@@}|}@@``@@@ %@@@}}}}@@``@@ %@@@}~}@@``@Ř@@ %@@@}}@@``@ؤ@@ %``@Ӆ@`@M@`]@ %@@ \ No newline at end of file +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 ; +