include std/console.e include std/get.e include std/io.e include std/text.e include std/math.e sequence parameters = command_line() if length(parameters) != 3 then puts(1,""" Usage: unicode.ex xxx where xxx are hex digits.""") maybe_any_key() abort(1) end if sequence buf = upper(parameters[3]) sequence letterdigit = ('A' <= buf and buf <= 'F') * #F sequence decdigit = ('0' <= buf and buf <= '9') * #F integer bad_digit_location = find(0, letterdigit or decdigit ) if bad_digit_location then printf(2,"Cannot process %s as a hex number number. It was at digit %d\n", parameters[3..3] & bad_digit_location) maybe_any_key() abort(1) end if sequence nibbles = repeat(0,3-length(buf)) & or_bits( and_bits(letterdigit,buf - 'A' + 10), and_bits(decdigit,buf-'0') ) integer start = shift_bits( or_bits(or_bits(shift_bits(nibbles[1],-8),shift_bits(nibbles[2],-4)),nibbles[3]), -8) integer ofd = open("unicode-" & parameters[3] & ".txt","wb") procedure puts4(integer fd, object x) if sequence(x) then for i = 1 to length(x) do puts4(fd, x[i]) end for else put_integer32(fd,x) end if end procedure procedure printf4(integer fd, sequence fmt, sequence args) puts4(fd,sprintf(fmt,args)) end procedure printf(2,"Wriring out utf32 %x to %x to unicode-%s.txt\n", start+{0,#FF} & parameters[3..3]) printf4(ofd,"The following is the unicode characters from %x to %x.\n", start+{0,#FF}) for i = start to start+#F0 by #10 do printf4(ofd,"%04x ", {i}) for j = 1 to #F do put_integer32(ofd,i+j) end for put_integer32(ofd,10) end for close(ofd)