## ## 'awk' PROGRAM NAME: hex2ascii_awkprog ## ## in $FEDIR/scripts ## where FEDIR=/apps/nns_com/fea ## ######################################################################## ## PURPOSE: ## ## ** This awk program is called by ## $FEDIR/scripts/hex2ascii ## ** to translate an input file containing pairs of hex-codes ## ** in its records into a file containing an ASCII text character ## ** in place of each pair of hex-codes. ## ## Example: ## TRANSLATES a line (record) containing ## "2F43444D444154412F......" ## TO ## "/CDMDATA/..." ## ## The 'hex2ascii' script reads a file (or piped data-stream) of pairs of ## hex-codes in each line. It translates each line of hex-codes into ## lines of ASCII text. The lines need not be the same length. ## ## [In fact, the 'hex2ascii' utility was originally meant to translate ## filenames, of varying length, from a hex-code format to ## their more human-readable ASCII format.] ## ## This 'hex2ascii_awkprog' awk program uses a binary-search scheme ## on a table of 256 hex-codes and ASCII characters. Actually, the ## table is two arrays: hex(.) and ascii(.) of length 256. ## ######################################################################## ## PROCESSING LOGIC of this AWK-PROG: ## ## Reads sequentially through the input file and, for each line ## ('record') translates each pair of hex-codes in the line into ## an ASCII character. ## ## When the end of each line is reached (i.e. the last of the pairs ## of hex-codes in the line is translated), the concatenated ASCII ## characters created from that line are output as one line ('record') ## to stdout. ## ## [TABLE OF HEXCODES & ASCII CHARACTERS: ## The BEGIN section of the awk program builds a table of ## of 256 hex-codes and ASCII characters.] ## ## [BINARY SEARCH FUNCTION: ## The bottom of the awk program holds a binary-search function ## that is called on to do a relatively fast table lookup for ## each pair of hex-codes. ## ## The input to the binary-search function is a pair ## of hex-codes. Output is an ASCII character. ## ## NOTE: The binary-search method is sometimes referred to as ## the 'telephone book' lookup method.] ## ######################################################################## ## THIS 'awk' PROGRAM IS ## CALLED BY: $FEDIR/scripts/hex2ascii ## ## which could be called by ## 1) a script with a GUI that prompts for the name of ## the file containing pairs of hex-codes, ## OR ## 2) a cron job script, ## OR ## 3) manually (via a short alias). ## ######################################################################## ## TEST FILES: Test files with pairs of hex codes representing ## ASCII filenames (with slashes and periods) are in ## in directory /apps/nns_com/fea/demos_hex_ascii. ######################################################################## ## MAINTENANCE HISTORY: ## Written by: Blaise Montandon 16feb2001 Based on 'hex2ascii' and ## 'simtec_generic2Dels_2stl_awkprog' ## in $FEDIR/scripts ## Updated by: Blaise Montandon 19feb2001 Improve DEBUG, Test output. ## ######################################################################## ######################################################################## ## NOTE1: THERE IS NO REQUIREMENT THAT THE INPUT RECORDS BE SORTED IN ## ANY WAY, BUT EACH SHOULD CONTAIN AN EVEN NUMBER OF HEX ## CHARACTERS (0-9,A-F). ######################################################################### ######################################################################## ## NOTE2: AS A RULE OF THUMB, WE USE *next* AS SOON AS POSSIBLE IN THE ## main awk logic --- to skip unnecessary processing. ######################################################################## ######################################################################## ## NOTE3: The awk variable 'NR' contains the current record count, ## and the awk variable 'NF' contains the number of white-space ## separated fields in the current record. ######################################################################## BEGIN { ## The FILE_IN var must be set in the calling 'awk' command. # printf ("#ASCII OUTPUT FROM HEX-CODE INPUT FILE: %-65s\n",FILE_IN) DEBUG=DE_BUG # DEBUG=0 # DEBUG=1 ## *FOR TESTING* : if (DEBUG==1) { print "" print "#TEST - 'DEBUG' var value:"DEBUG print "" } load_hex_ascii_table(hex,ascii,256) ## *FOR TESTING* -- show the just-generated data: if (DEBUG==1) { print "" print "#TEST - ASCII TABLE CHECK:" print " (Table was loaded using the keyboard-generated ASCII codes" print " --- only the printable codes (alphanumeric & some symbols)" print " --- rather than using the '\\x' awk-'string-constant'" print " form of ASCII codes.)" print " ASCIIchar 47 (/) = "ascii[47] print " ASCIIchar 65 (A) = "ascii[65] print " ASCIIchar 90 (Z) = "ascii[90] print " ASCIIchar 97 (a) = "ascii[97] print " ASCIIchar 122 (z) = "ascii[122] print " |" print " Decimal-index." print "" } # inCNT=0 # goodCNT=0 # outCNT=0 errCNT=0 } { ## START OF awk-BODY (main-section) ############################################################################## ## RECORD PROCESSING SECTION: ############################################################################## ## 1) Check that the rec-len is a multiple of 2. ## If not, print an errmsg to stdout and get next record and return to ## this step. ## ## 2) 'Loop through' the pairs of hex-codes, incrementing the pair count, j. ## Convert each hex-code to an ASCII character. Concatenate that character ## to variable 'ASCIIchars'. At the end of the record, 'print' the string ## contained in var 'ASCIIchars' to stdout. ############################################################################## RECORD=toupper($0) # inCNT++ ############################################################ ## EXIT, WITH MSG TO STDOUT, IF A REC HAS MORE THAN 1 FIELD ## --- i.e. if it has embedded spaces. ############################################################ if (NF > 1) { print "" print "#ERROR: There are embedded spaces in input rec number "NR print "#ERROR: There should be pairs of hex-codes (chars 0-9,A-F) only." print "" errCNT++ # exit next } ############################################################ ## EXIT, WITH MSG TO STDOUT, if the number of characters in ## the rec is NOT A MULTIPLE OF 2. ############################################################ recLEN = length($0) remainder = recLEN % 2 if (remainder != 0) { print "" print "#ERROR: There are an ODD NUMBER of characters in input rec number "NR print "#ERROR: There should be *PAIRS* of hex-codes (chars 0-9,A-F)." print "" errCNT++ # exit next } # goodCNT++ ############################################################# ## LOOKUP THE ASCII CHARACTER FOR EACH PAIR OF HEX-CODES, AND ## CONCATENATE THE ASCII CHARACTER TO VAR 'ASCIIstring'. ############################################################ numPAIRS = recLEN / 2 ASCIIstring = "" for ( i=1; i<=recLEN; ++i ) { char[i]=substr($0,i,1) } for ( i=1; i<=numPAIRS; ++i ) { hexpair = char[2*i-1] char[2*i] ASCIIindex=binarySearch(hex, 256, hexpair) ASCIIchar=ascii[ASCIIindex] if (ASCIIchar == "") { print "" print "#ERROR: There seems to be no ASCII character corresponding" print "#ERROR: to hex-pair: "hexpair" in record-number: "NR print "" errCNT++ # exit next } ASCIIstring = ASCIIstring ASCIIchar ## *FOR TESTING* -- show the just-generated data: if (DEBUG==1) { print "" print "#DEBUG - REC-CNT="NR" PAIR-CNT="i" hexpair="hexpair" ASCIIchar="ASCIIchar print "" } } ## *FOR TESTING* -- show the just-generated data: if (DEBUG==1) { print "" print "#DEBUG - REC-CNT="NR" inRECORD="$0 print "#DEBUG - REC-CNT="NR" ASCIIstring="ASCIIstring print "" } ############################################################ ## PRINT 'ASCIIstring' to stdout ############################################################ print ASCIIstring # outCNT++ } ## END OF awk-BODY (main-section) END { if (errCNT>0) { printf "#ERROR(S) WERE FOUND. ERR COUNT: %10i\n",errCNT } if (DEBUG==1) { # printf ("#DEBUG END - IN-REC COUNT: %10i\n",inCNT) printf ("#DEBUG END - IN-REC COUNT: %10i\n",NR) # printf ("#DEBUG END - GOOD-REC COUNT: %10i\n",goodCNT) # printf ("#DEBUG END - OUT-REC COUNT: %10i\n",outCNT) printf ("#DEBUG END - FILEIN: %-65s\n",FILE_IN) } } ## END OF awk-END (END-section) ######################################################################## ## *awk-FUNCTIONS* FOLLOW. ## - 'binarySearch' ## - 'load_hex_ascii_table' ######################################################################## ## NOTE: *function* statement is not recognized within ## awk BEGIN, *body=main*, and END sections. ######################################################################## ######################################################################## ## START OF function *binarySearch* ######################################################################## ## DESCRIPTION OF A BINARY SEARCH ALGORITHM ## ## from http://www.ics.hawaii.edu/~yongsi/ics665/principle.html ## ## We have a sorted array A and a key K. Our task is to determine whether ## the key K is present in this array A. If we do find A[i] = K, ## return the array index i. Otherwise, return i = -1. ## ## The search Binary search works in the following way: ## ## 1. Compare K with the middle value (M) in remaiding part of array A. ## 2. If K = M, we are done. ## 3. If K < M, we continue our search to the lower end of array A and ## entirely ignore the other end. ## 4. If K > M, we continue, but confine ourselves to the higher end. ## ######################################################################## ## EXAMPLE: A = {1 3 4 6 8 9 11}. K = 4. ## ## M = 6 ## Compare K with 6. It is smaller. Continue search with A = 1 3 4. ## M = 3 ## Compare K with 3. It is bigger. Continue search with A = 3 4. (4 only?) ## M = 4 ## Compare K with 4. It is equal. We are done, we found K in A. ######################################################################## ## ## The algorithm (C-like) for Binary Search is listed below: ######################################################################## function binarySearch(ARRAY,ARRAY_SIZE,KEY, low,high,middle) { low=1 high=ARRAY_SIZE while ( low <= high ) { middle = int( (low+high)/2 ) ## FOR TESTING: # print "low= "low" high="high" middle="middle if ( KEY == ARRAY[ middle ] ) { return middle } else if ( KEY < ARRAY[ middle ] ) { high = middle - 1 } else { low = middle + 1 } } return -1 } ######################################################################## ## START OF function *load_hex_ascii_table* ######################################################################## ## In the ASCII standard: ## numbers 0-9 are hex 30-39 ## Alpha-upper-case A-Z are hex 41-5A ## Alpha-lower-case a-z are hex 61-7A ######################################################################## ## The ASCII codes (the printable ones) were entered via keyboard ## (or the 'Edit,Insert Ctrl Code' option of 'nedit'). ###### ## We do not need all of them, because, in this awk-prog, the binary ## search is done on the HEX array, not the ASCII array. ###### ## As required for successful lookups in the HEX array, the HEX ## array IS sorted --- and is FULLY populated. ######################################################################## function load_hex_ascii_table(HEX_ARRAY,ASCII_ARRAY,ARRAY_SIZE) { HEX_ARRAY[0]="00";ASCII_ARRAY[0]=""; HEX_ARRAY[1]="01";ASCII_ARRAY[1]=""; HEX_ARRAY[2]="02";ASCII_ARRAY[2]=""; HEX_ARRAY[3]="03";ASCII_ARRAY[3]=""; HEX_ARRAY[4]="04";ASCII_ARRAY[4]=""; HEX_ARRAY[5]="05";ASCII_ARRAY[5]=""; HEX_ARRAY[6]="06";ASCII_ARRAY[6]=""; HEX_ARRAY[7]="07";ASCII_ARRAY[7]=""; HEX_ARRAY[8]="08";ASCII_ARRAY[8]=""; HEX_ARRAY[9]="09";ASCII_ARRAY[9]=""; HEX_ARRAY[10]="0A";ASCII_ARRAY[10]=""; HEX_ARRAY[11]="0B";ASCII_ARRAY[11]=""; HEX_ARRAY[12]="0C";ASCII_ARRAY[12]=""; HEX_ARRAY[13]="0D";ASCII_ARRAY[13]=""; HEX_ARRAY[14]="0E";ASCII_ARRAY[14]=""; HEX_ARRAY[15]="0F";ASCII_ARRAY[15]=""; HEX_ARRAY[16]="10";ASCII_ARRAY[16]=""; HEX_ARRAY[17]="11";ASCII_ARRAY[17]=""; HEX_ARRAY[18]="12";ASCII_ARRAY[18]=""; HEX_ARRAY[19]="13";ASCII_ARRAY[19]=""; HEX_ARRAY[20]="14";ASCII_ARRAY[20]=""; HEX_ARRAY[21]="15";ASCII_ARRAY[21]=""; HEX_ARRAY[22]="16";ASCII_ARRAY[22]=""; HEX_ARRAY[23]="17";ASCII_ARRAY[23]=""; HEX_ARRAY[24]="18";ASCII_ARRAY[24]=""; HEX_ARRAY[25]="19";ASCII_ARRAY[25]=""; HEX_ARRAY[26]="1A";ASCII_ARRAY[26]=""; HEX_ARRAY[27]="1B";ASCII_ARRAY[27]=""; HEX_ARRAY[28]="1C";ASCII_ARRAY[28]=""; HEX_ARRAY[29]="1D";ASCII_ARRAY[29]=""; HEX_ARRAY[30]="1E";ASCII_ARRAY[30]=""; HEX_ARRAY[31]="1F";ASCII_ARRAY[31]=""; HEX_ARRAY[32]="20";ASCII_ARRAY[32]=" "; HEX_ARRAY[33]="21";ASCII_ARRAY[33]="!"; HEX_ARRAY[34]="22";ASCII_ARRAY[34]="\""; HEX_ARRAY[35]="23";ASCII_ARRAY[35]="#"; HEX_ARRAY[36]="24";ASCII_ARRAY[36]="$"; HEX_ARRAY[37]="25";ASCII_ARRAY[37]="%"; HEX_ARRAY[38]="26";ASCII_ARRAY[38]="&"; HEX_ARRAY[39]="27";ASCII_ARRAY[39]="'"; HEX_ARRAY[40]="28";ASCII_ARRAY[40]="("; HEX_ARRAY[41]="29";ASCII_ARRAY[41]=")"; HEX_ARRAY[42]="2A";ASCII_ARRAY[42]="*"; HEX_ARRAY[43]="2B";ASCII_ARRAY[43]="+"; HEX_ARRAY[44]="2C";ASCII_ARRAY[44]=","; HEX_ARRAY[45]="2D";ASCII_ARRAY[45]="-"; HEX_ARRAY[46]="2E";ASCII_ARRAY[46]="."; HEX_ARRAY[47]="2F";ASCII_ARRAY[47]="/"; HEX_ARRAY[48]="30";ASCII_ARRAY[48]="0"; HEX_ARRAY[49]="31";ASCII_ARRAY[49]="1"; HEX_ARRAY[50]="32";ASCII_ARRAY[50]="2"; HEX_ARRAY[51]="33";ASCII_ARRAY[51]="3"; HEX_ARRAY[52]="34";ASCII_ARRAY[52]="4"; HEX_ARRAY[53]="35";ASCII_ARRAY[53]="5"; HEX_ARRAY[54]="36";ASCII_ARRAY[54]="6"; HEX_ARRAY[55]="37";ASCII_ARRAY[55]="7"; HEX_ARRAY[56]="38";ASCII_ARRAY[56]="8"; HEX_ARRAY[57]="39";ASCII_ARRAY[57]="9"; HEX_ARRAY[58]="3A";ASCII_ARRAY[58]=":"; HEX_ARRAY[59]="3B";ASCII_ARRAY[59]=";"; HEX_ARRAY[60]="3C";ASCII_ARRAY[60]="<"; HEX_ARRAY[61]="3D";ASCII_ARRAY[61]="="; HEX_ARRAY[62]="3E";ASCII_ARRAY[62]=">"; HEX_ARRAY[63]="3F";ASCII_ARRAY[63]="?"; HEX_ARRAY[64]="40";ASCII_ARRAY[64]="@"; HEX_ARRAY[65]="41";ASCII_ARRAY[65]="A"; HEX_ARRAY[66]="42";ASCII_ARRAY[66]="B"; HEX_ARRAY[67]="43";ASCII_ARRAY[67]="C"; HEX_ARRAY[68]="44";ASCII_ARRAY[68]="D"; HEX_ARRAY[69]="45";ASCII_ARRAY[69]="E"; HEX_ARRAY[70]="46";ASCII_ARRAY[70]="F"; HEX_ARRAY[71]="47";ASCII_ARRAY[71]="G"; HEX_ARRAY[72]="48";ASCII_ARRAY[72]="H"; HEX_ARRAY[73]="49";ASCII_ARRAY[73]="I"; HEX_ARRAY[74]="4A";ASCII_ARRAY[74]="J"; HEX_ARRAY[75]="4B";ASCII_ARRAY[75]="K"; HEX_ARRAY[76]="4C";ASCII_ARRAY[76]="L"; HEX_ARRAY[77]="4D";ASCII_ARRAY[77]="M"; HEX_ARRAY[78]="4E";ASCII_ARRAY[78]="N"; HEX_ARRAY[79]="4F";ASCII_ARRAY[79]="O"; HEX_ARRAY[80]="50";ASCII_ARRAY[80]="P"; HEX_ARRAY[81]="51";ASCII_ARRAY[81]="Q"; HEX_ARRAY[82]="52";ASCII_ARRAY[82]="R"; HEX_ARRAY[83]="53";ASCII_ARRAY[83]="S"; HEX_ARRAY[84]="54";ASCII_ARRAY[84]="T"; HEX_ARRAY[85]="55";ASCII_ARRAY[85]="U"; HEX_ARRAY[86]="56";ASCII_ARRAY[86]="V"; HEX_ARRAY[87]="57";ASCII_ARRAY[87]="W"; HEX_ARRAY[88]="58";ASCII_ARRAY[88]="X"; HEX_ARRAY[89]="59";ASCII_ARRAY[89]="Y"; HEX_ARRAY[90]="5A";ASCII_ARRAY[90]="Z"; HEX_ARRAY[91]="5B";ASCII_ARRAY[91]="["; HEX_ARRAY[92]="5C";ASCII_ARRAY[92]="\\"; HEX_ARRAY[93]="5D";ASCII_ARRAY[93]="]"; HEX_ARRAY[94]="5E";ASCII_ARRAY[94]="^"; HEX_ARRAY[95]="5F";ASCII_ARRAY[95]="_"; HEX_ARRAY[96]="60";ASCII_ARRAY[96]="`"; HEX_ARRAY[97]="61";ASCII_ARRAY[97]="a"; HEX_ARRAY[98]="62";ASCII_ARRAY[98]="b"; HEX_ARRAY[99]="63";ASCII_ARRAY[99]="c"; HEX_ARRAY[100]="64";ASCII_ARRAY[100]="d"; HEX_ARRAY[101]="65";ASCII_ARRAY[101]="e"; HEX_ARRAY[102]="66";ASCII_ARRAY[102]="f"; HEX_ARRAY[103]="67";ASCII_ARRAY[103]="g"; HEX_ARRAY[104]="68";ASCII_ARRAY[104]="h"; HEX_ARRAY[105]="69";ASCII_ARRAY[105]="i"; HEX_ARRAY[106]="6A";ASCII_ARRAY[106]="j"; HEX_ARRAY[107]="6B";ASCII_ARRAY[107]="k"; HEX_ARRAY[108]="6C";ASCII_ARRAY[108]="l"; HEX_ARRAY[109]="6D";ASCII_ARRAY[109]="m"; HEX_ARRAY[110]="6E";ASCII_ARRAY[110]="n"; HEX_ARRAY[111]="6F";ASCII_ARRAY[111]="o"; HEX_ARRAY[112]="70";ASCII_ARRAY[112]="p"; HEX_ARRAY[113]="71";ASCII_ARRAY[113]="q"; HEX_ARRAY[114]="72";ASCII_ARRAY[114]="r"; HEX_ARRAY[115]="73";ASCII_ARRAY[115]="s"; HEX_ARRAY[116]="74";ASCII_ARRAY[116]="t"; HEX_ARRAY[117]="75";ASCII_ARRAY[117]="u"; HEX_ARRAY[118]="76";ASCII_ARRAY[118]="v"; HEX_ARRAY[119]="77";ASCII_ARRAY[119]="w"; HEX_ARRAY[120]="78";ASCII_ARRAY[120]="x"; HEX_ARRAY[121]="79";ASCII_ARRAY[121]="y"; HEX_ARRAY[122]="7A";ASCII_ARRAY[122]="z"; HEX_ARRAY[123]="7B";ASCII_ARRAY[123]="{"; HEX_ARRAY[124]="7C";ASCII_ARRAY[124]="|"; HEX_ARRAY[125]="7D";ASCII_ARRAY[125]="}"; HEX_ARRAY[126]="7E";ASCII_ARRAY[126]="~"; HEX_ARRAY[127]="7F";ASCII_ARRAY[127]=""; HEX_ARRAY[128]="80";ASCII_ARRAY[128]=""; HEX_ARRAY[129]="81";ASCII_ARRAY[129]=""; HEX_ARRAY[130]="82";ASCII_ARRAY[130]=""; HEX_ARRAY[131]="83";ASCII_ARRAY[131]=""; HEX_ARRAY[132]="84";ASCII_ARRAY[132]=""; HEX_ARRAY[133]="85";ASCII_ARRAY[133]=""; HEX_ARRAY[134]="86";ASCII_ARRAY[134]=""; HEX_ARRAY[135]="87";ASCII_ARRAY[135]=""; HEX_ARRAY[136]="88";ASCII_ARRAY[136]=""; HEX_ARRAY[137]="89";ASCII_ARRAY[137]=""; HEX_ARRAY[138]="8A";ASCII_ARRAY[138]=""; HEX_ARRAY[139]="8B";ASCII_ARRAY[139]=""; HEX_ARRAY[140]="8C";ASCII_ARRAY[140]=""; HEX_ARRAY[141]="8D";ASCII_ARRAY[141]=""; HEX_ARRAY[142]="8E";ASCII_ARRAY[142]=""; HEX_ARRAY[143]="8F";ASCII_ARRAY[143]=""; HEX_ARRAY[144]="90";ASCII_ARRAY[144]=""; HEX_ARRAY[145]="91";ASCII_ARRAY[145]=""; HEX_ARRAY[146]="92";ASCII_ARRAY[146]=""; HEX_ARRAY[147]="93";ASCII_ARRAY[147]=""; HEX_ARRAY[148]="94";ASCII_ARRAY[148]=""; HEX_ARRAY[149]="95";ASCII_ARRAY[149]=""; HEX_ARRAY[150]="96";ASCII_ARRAY[150]=""; HEX_ARRAY[151]="97";ASCII_ARRAY[151]=""; HEX_ARRAY[152]="98";ASCII_ARRAY[152]=""; HEX_ARRAY[153]="99";ASCII_ARRAY[153]=""; HEX_ARRAY[154]="9A";ASCII_ARRAY[154]=""; HEX_ARRAY[155]="9B";ASCII_ARRAY[155]=""; HEX_ARRAY[156]="9C";ASCII_ARRAY[156]=""; HEX_ARRAY[157]="9D";ASCII_ARRAY[157]=""; HEX_ARRAY[158]="9E";ASCII_ARRAY[158]=""; HEX_ARRAY[159]="9F";ASCII_ARRAY[159]=""; HEX_ARRAY[160]="A0";ASCII_ARRAY[160]=""; HEX_ARRAY[161]="A1";ASCII_ARRAY[161]=""; HEX_ARRAY[162]="A2";ASCII_ARRAY[162]=""; HEX_ARRAY[163]="A3";ASCII_ARRAY[163]=""; HEX_ARRAY[164]="A4";ASCII_ARRAY[164]=""; HEX_ARRAY[165]="A5";ASCII_ARRAY[165]=""; HEX_ARRAY[166]="A6";ASCII_ARRAY[166]=""; HEX_ARRAY[167]="A7";ASCII_ARRAY[167]=""; HEX_ARRAY[168]="A8";ASCII_ARRAY[168]=""; HEX_ARRAY[169]="A9";ASCII_ARRAY[169]=""; HEX_ARRAY[170]="AA";ASCII_ARRAY[170]=""; HEX_ARRAY[171]="AB";ASCII_ARRAY[171]=""; HEX_ARRAY[172]="AC";ASCII_ARRAY[172]=""; HEX_ARRAY[173]="AD";ASCII_ARRAY[173]=""; HEX_ARRAY[174]="AE";ASCII_ARRAY[174]=""; HEX_ARRAY[175]="AF";ASCII_ARRAY[175]=""; HEX_ARRAY[176]="B0";ASCII_ARRAY[176]=""; HEX_ARRAY[177]="B1";ASCII_ARRAY[177]=""; HEX_ARRAY[178]="B2";ASCII_ARRAY[178]=""; HEX_ARRAY[179]="B3";ASCII_ARRAY[179]=""; HEX_ARRAY[180]="B4";ASCII_ARRAY[180]=""; HEX_ARRAY[181]="B5";ASCII_ARRAY[181]=""; HEX_ARRAY[182]="B6";ASCII_ARRAY[182]=""; HEX_ARRAY[183]="B7";ASCII_ARRAY[183]=""; HEX_ARRAY[184]="B8";ASCII_ARRAY[184]=""; HEX_ARRAY[185]="B9";ASCII_ARRAY[185]=""; HEX_ARRAY[186]="BA";ASCII_ARRAY[186]=""; HEX_ARRAY[187]="BB";ASCII_ARRAY[187]=""; HEX_ARRAY[188]="BC";ASCII_ARRAY[188]=""; HEX_ARRAY[189]="BD";ASCII_ARRAY[189]=""; HEX_ARRAY[190]="BE";ASCII_ARRAY[190]=""; HEX_ARRAY[191]="BF";ASCII_ARRAY[191]=""; HEX_ARRAY[192]="C0";ASCII_ARRAY[192]=""; HEX_ARRAY[193]="C1";ASCII_ARRAY[193]=""; HEX_ARRAY[194]="C2";ASCII_ARRAY[194]=""; HEX_ARRAY[195]="C3";ASCII_ARRAY[195]=""; HEX_ARRAY[196]="C4";ASCII_ARRAY[196]=""; HEX_ARRAY[197]="C5";ASCII_ARRAY[197]=""; HEX_ARRAY[198]="C6";ASCII_ARRAY[198]=""; HEX_ARRAY[199]="C7";ASCII_ARRAY[199]=""; HEX_ARRAY[200]="C8";ASCII_ARRAY[200]=""; HEX_ARRAY[201]="C9";ASCII_ARRAY[201]=""; HEX_ARRAY[202]="CA";ASCII_ARRAY[202]=""; HEX_ARRAY[203]="CB";ASCII_ARRAY[203]=""; HEX_ARRAY[204]="CC";ASCII_ARRAY[204]=""; HEX_ARRAY[205]="CD";ASCII_ARRAY[205]=""; HEX_ARRAY[206]="CE";ASCII_ARRAY[206]=""; HEX_ARRAY[207]="CF";ASCII_ARRAY[207]=""; HEX_ARRAY[208]="D0";ASCII_ARRAY[208]=""; HEX_ARRAY[209]="D1";ASCII_ARRAY[209]=""; HEX_ARRAY[210]="D2";ASCII_ARRAY[210]=""; HEX_ARRAY[211]="D3";ASCII_ARRAY[211]=""; HEX_ARRAY[212]="D4";ASCII_ARRAY[212]=""; HEX_ARRAY[213]="D5";ASCII_ARRAY[213]=""; HEX_ARRAY[214]="D6";ASCII_ARRAY[214]=""; HEX_ARRAY[215]="D7";ASCII_ARRAY[215]=""; HEX_ARRAY[216]="D8";ASCII_ARRAY[216]=""; HEX_ARRAY[217]="D9";ASCII_ARRAY[217]=""; HEX_ARRAY[218]="DA";ASCII_ARRAY[218]=""; HEX_ARRAY[219]="DB";ASCII_ARRAY[219]=""; HEX_ARRAY[220]="DC";ASCII_ARRAY[220]=""; HEX_ARRAY[221]="DD";ASCII_ARRAY[221]=""; HEX_ARRAY[222]="DE";ASCII_ARRAY[222]=""; HEX_ARRAY[223]="DF";ASCII_ARRAY[223]=""; HEX_ARRAY[224]="E0";ASCII_ARRAY[224]=""; HEX_ARRAY[225]="E1";ASCII_ARRAY[225]=""; HEX_ARRAY[226]="E2";ASCII_ARRAY[226]=""; HEX_ARRAY[227]="E3";ASCII_ARRAY[227]=""; HEX_ARRAY[228]="E4";ASCII_ARRAY[228]=""; HEX_ARRAY[229]="E5";ASCII_ARRAY[229]=""; HEX_ARRAY[230]="E6";ASCII_ARRAY[230]=""; HEX_ARRAY[231]="E7";ASCII_ARRAY[231]=""; HEX_ARRAY[232]="E8";ASCII_ARRAY[232]=""; HEX_ARRAY[233]="E9";ASCII_ARRAY[233]=""; HEX_ARRAY[234]="EA";ASCII_ARRAY[234]=""; HEX_ARRAY[235]="EB";ASCII_ARRAY[235]=""; HEX_ARRAY[236]="EC";ASCII_ARRAY[236]=""; HEX_ARRAY[237]="ED";ASCII_ARRAY[237]=""; HEX_ARRAY[238]="EE";ASCII_ARRAY[238]=""; HEX_ARRAY[239]="EF";ASCII_ARRAY[239]=""; HEX_ARRAY[240]="F0";ASCII_ARRAY[240]=""; HEX_ARRAY[241]="F1";ASCII_ARRAY[241]=""; HEX_ARRAY[242]="F2";ASCII_ARRAY[242]=""; HEX_ARRAY[243]="F3";ASCII_ARRAY[243]=""; HEX_ARRAY[244]="F4";ASCII_ARRAY[244]=""; HEX_ARRAY[245]="F5";ASCII_ARRAY[245]=""; HEX_ARRAY[246]="F6";ASCII_ARRAY[246]=""; HEX_ARRAY[247]="F7";ASCII_ARRAY[247]=""; HEX_ARRAY[248]="F8";ASCII_ARRAY[248]=""; HEX_ARRAY[249]="F9";ASCII_ARRAY[249]=""; HEX_ARRAY[250]="FA";ASCII_ARRAY[250]=""; HEX_ARRAY[251]="FB";ASCII_ARRAY[251]=""; HEX_ARRAY[252]="FC";ASCII_ARRAY[252]=""; HEX_ARRAY[253]="FD";ASCII_ARRAY[253]=""; HEX_ARRAY[254]="FE";ASCII_ARRAY[254]=""; HEX_ARRAY[255]="FF";ASCII_ARRAY[255]=""; return } ## END OF awk program