MODULE--------------------------------------------------------------------------; IMPORT Fingerprint, Text; IMPORT TextUtils; FingerprintFmt
PROCEDURE--------------------------------------------------------------------------Hex (fp : Fingerprint.T) : TEXT = CONST digit = ARRAY OF CHAR {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'}; VAR res : ARRAY [0..15] OF CHAR; BEGIN FOR b := 0 TO 7 DO WITH byte = fp.byte[b] DO WITH h = byte DIV 16, l = byte MOD 16 DO res[2*b + 0] := digit[h]; res[2*b + 1] := digit[l]; END; END; END; RETURN Text.FromChars(res); END Hex;
PROCEDUREScan (t : TEXT; VAR fp : Fingerprint.T) : BOOLEAN = CONST digits = "0123456789ABCDEF"; VAR tfp := TextUtils.Compress(t); len := Text.Length(tfp); BEGIN IF len # 16 THEN RETURN FALSE END; FOR i := 0 TO 7 DO WITH h = Text.GetChar(tfp, 2*i), l = Text.GetChar(tfp, 2*i + 1) DO WITH hh = Text.FindChar(digits, h), ll = Text.FindChar(digits, l) DO IF hh = -1 OR ll = -1 THEN RETURN FALSE; END; fp.byte[i] := 16 * hh + ll; END; END; END; RETURN TRUE; END Scan; BEGIN END FingerprintFmt.