#!/usr/bin/ruby

# Copyright (C) 2008, IWAMURO Motonori
# All rights reserved.
#
# License: BSD License (revised)
# see http://vmi.jp/software/ruby/COPYING

def bytes(seq)
  puts "B[" + seq.unpack("C*").map {|c| format("%02X", c)}.join(" ") + "]"
end

def bits(seq)
  puts "b[" + seq.unpack("B*")[0].scan(/.{8}/).join(" ") + "]"
end

STDOUT.sync = true
print "> "
STDIN.each do |line|
  line.chomp!
  case line
  when ''
    # nop
  when 'q'
    exit
  when /[01]{8}/
    line.gsub!(/[^01]+/, '')
    if (line.length & 7) != 0
      puts "Error: not 8bit sequence."
    else
      bytes([line].pack("B*"))
    end
  when /[0-9A-F]{2,6}/i
    seq = line.split(/\s+/).map do |e| e.hex end.pack("U*")
    bytes(seq)
    bits(seq)
  end
  print "> "
end

