implementation module pdExtInt; // winos import StdEnv; /* hexdigit :: !Int -> Char; hexdigit i | i<10 = toChar (toInt '0'+i); = toChar (toInt 'A'+i-10); hex :: !Int -> String; hex i #! i1 =(i bitand 0xf0) >> 4; #! i2 =i bitand 0xf; = toString (hexdigit i1)+++toString (hexdigit i2); hex_byte :: !Char -> String; hex_byte i # s = hex (toInt i); = "0x" +++ s; hex_int :: !Int -> String; hex_int i #! b0 = hex (i bitand 0x000000ff); #! b1 = hex ((i bitand 0x0000ff00) >> 8); #! b2 = hex ((i bitand 0x00ff0000) >> 16); #! b3 = hex ((i bitand 0xff000000) >> 24); = "0x" +++ b3 +++ b2 +++ b1 +++ b0; */ FromIntToString :: !Int -> String; FromIntToString v = { (toChar v), (toChar (v>>8)), (toChar (v>>16)), (toChar (v>>24)) }; FromStringToInt :: !String !Int -> Int; FromStringToInt array i = (toInt v0)+(toInt v1<<8)+(toInt v2<<16)+(toInt v3<<24); where { v0 = array.[i]; v1 = array.[i+1]; v2 = array.[i+2]; v3 = array.[i+3]; } WriteLong :: !*{#Char} !Int !Int -> *{#Char}; WriteLong array i v = { array & [i] = (toChar v) , [i+1] = (toChar (v>>8)), [i+2] = (toChar (v>>16)) , [i+3] = (toChar (v>>24))}; //import DebugUtilities; FromStringToIntU :: !*{#Char} !Int -> (!Int,!*{#Char}); FromStringToIntU array i /* #! (s_array,array) = usize array; | F (toString i +++ " - " +++ toString s_array) i < 0 || ((i + 3) > (dec s_array)) = abort "error"; */ #! (v0,array) = array![i]; #! (v1,array) = array![i+1]; #! (v2,array) = array![i+2]; #! (v3,array) = array![i+3]; #! i = (toInt v0)+(toInt v1<<8)+(toInt v2<<16)+(toInt v3<<24); = (i,array); print_string :: !String -> String; print_string s = ps2 0 (size s) ""; where { ps2 i limit d | i == limit = d; #! v = FromStringToInt s i; #! w = hex_word i +++ ": " +++ hex_int v +++ ", "; = ps2 (i + 4) limit (d +++ w); } hexdigit :: !Int -> Char; hexdigit i | i<10 = toChar (toInt '0'+i); = toChar (toInt 'A'+i-10); hex :: !Int -> String; hex i #! i1 =(i bitand 0xf0) >> 4; #! i2 =i bitand 0xf; = toString (hexdigit i1)+++toString (hexdigit i2); hex_byte :: !Char -> String; hex_byte i # s = hex (toInt i); = "0x" +++ s; hex_word :: !Int -> String; hex_word w #! b0 = hex (w bitand 0x000000ff); #! b1 = hex ((w bitand 0x0000ff00) >> 8); = b1 +++ b0; hex_int :: !Int -> String; hex_int i #! b0 = hex (i bitand 0x000000ff); #! b1 = hex ((i bitand 0x0000ff00) >> 8); #! b2 = hex ((i bitand 0x00ff0000) >> 16); #! b3 = hex ((i bitand 0xff000000) >> 24); = /*"0x" +++ */ b3 +++ b2 +++ b1 +++ b0; hex_int_without_prefixed_zeroes :: !Int -> String; hex_int_without_prefixed_zeroes i #! b0 = hex (i bitand 0x000000ff); #! b1 = hex ((i bitand 0x0000ff00) >> 8); #! b2 = hex ((i bitand 0x00ff0000) >> 16); #! b3 = hex ((i bitand 0xff000000) >> 24); #! s = /*"0x" +++ */ b3 +++ b2 +++ b1 +++ b0; #! l = [ c \\ c <-: s ]; # s = { c \\ c <- (strip_leading_zeroes l)}; = if ((size s) == 0) "0" s; where { strip_leading_zeroes [] = []; strip_leading_zeroes ['0':xs] = strip_leading_zeroes xs; strip_leading_zeroes l = l; }