structure binaryInput = struct val END = ~1; (* reached end of file *) val ERROR = ~2; (* binary digits not multiple of 8 *) exception input_Exception of string fun isbinary(c) = c = #"0" orelse c = #"1"; fun startBinaryEight(file, NONE) = END | startBinaryEight (file, SOME c) = if isbinary(c) then ord(c)-ord(#"0") else startBinaryEight(file, TextIO.input1(file)); ; fun finishBinaryEight(i, file, num) = if i=END then END else finishBinaryEight1(i, file, TextIO.input1(file), num) and finishBinaryEight1(i, file, NONE, 1) = i | finishBinaryEight1(i, file, NONE, num) = ERROR | finishBinaryEight1(i, file, SOME c, 1) = 2*i + ord(c)-ord(#"0") | finishBinaryEight1(i, file, SOME c, num) = if isbinary(c) then finishBinaryEight(2*i + ord(c)-ord(#"0"), file, num-1) else finishBinaryEight1(i, file, TextIO.input1(file), num) ; fun printList(nil) = (print("nil")) | printList(x::xs) = ( print(Word8.toString(x)); print(","); printList(xs)) ; fun getBinList(file, li) = let val outli=[]; val i = finishBinaryEight(startBinaryEight(file, TextIO.input1(file)), file, 7) in (* print("In getBinList: "); print("li = "); printList(li); print("\n"); print(Int.toString(i)); print("\n"); *) if (i=ERROR) then raise input_Exception("The binary input is not a multiple of octets\n") else if (i=END) then li else getBinList(file, li @ [Word8.fromInt(i)]) end ; fun getBinArr(file) = Word8Array.fromList(getBinList(file, [])); end;