diff --git a/src/hammer.cxx b/src/hammer.cxx
deleted file mode 100644
index e7f3cb7496419a3b6ca50176ff6b4c4e2b91323f..0000000000000000000000000000000000000000
--- a/src/hammer.cxx
+++ /dev/null
@@ -1,164 +0,0 @@
-#include "hammer.hxx"
-
-namespace hammer {
-
-  typedef variant<BytesResult, UintResult, IntResult, NullResult, SequenceResult> AnyResult;
-
-  const BytesResult::result_type BytesResult::result() { return _bytes; }
-  const UintResult::result_type UintResult::result() { return _uint; }
-  const IntResult::result_type IntResult::result() { return _sint; }
-  const SequenceResult::result_type SequenceResult::result() { return _seq; }
-
-  template<>
-  BytesResult Parser<BytesResult>::parse(const string &input) {
-    HParseResult *res = h_parse(_parser, reinterpret_cast<const uint8_t*>(input.c_str()), input.size());
-    return BytesResult(vector<uint8_t>(res->ast->bytes.token, res->ast->bytes.token+res->ast->bytes.len));
-  }
-
-  template<>
-  BytesResult Parser<BytesResult>::parse(const uint8_t *input, size_t length) {
-    HParseResult *res = h_parse(_parser, input, length);
-    return BytesResult(vector<uint8_t>(res->ast->bytes.token, res->ast->bytes.token+res->ast->bytes.len));
-  }
-
-  template<>
-  UintResult Parser<UintResult>::parse(const string &input) {
-    HParseResult *res = h_parse(_parser, reinterpret_cast<const uint8_t*>(input.c_str()), input.size());
-    return UintResult(res->ast->uint);
-  }
-
-  template<>
-  UintResult Parser<UintResult>::parse(const uint8_t *input, size_t length) {
-    HParseResult *res = h_parse(_parser, input, length);
-    return UintResult(res->ast->uint);
-  }
-
-  template<>
-  IntResult Parser<IntResult>::parse(const string &input) {
-    HParseResult *res = h_parse(_parser, reinterpret_cast<const uint8_t*>(input.c_str()), input.size());
-    return IntResult(res->ast->sint);
-  }
-
-  template<>
-  IntResult Parser<IntResult>::parse(const uint8_t *input, size_t length) {
-    HParseResult *res = h_parse(_parser, input, length);
-    return IntResult(res->ast->sint);
-  }
-
-  template<>
-  NullResult Parser<NullResult>::parse(const string &input) {
-    HParseResult *res = h_parse(_parser, reinterpret_cast<const uint8_t*>(input.c_str()), input.size());
-    return NullResult();
-  }
-
-  template<>
-  NullResult Parser<NullResult>::parse(const uint8_t *input, size_t length) {
-    HParseResult *res = h_parse(_parser, input, length);
-    return NullResult();
-  }
-
-  vector<AnyResult> make_seq(HCountedArray *seq) {
-    vector<AnyResult> ret;
-    for (size_t i=0; i<seq->used; ++i) {
-      switch(seq->elements[i]->token_type) {
-      case TT_NONE:
-	ret.push_back(NullResult());
-	break;
-      case TT_BYTES:
-	ret.push_back(BytesResult(vector<uint8_t>(seq->elements[i]->bytes.token, seq->elements[i]->bytes.token+seq->elements[i]->bytes.len)));
-	break;
-      case TT_SINT:
-	ret.push_back(IntResult(seq->elements[i]->sint));
-	break;
-      case TT_UINT:
-	ret.push_back(UintResult(seq->elements[i]->uint));
-	break;
-      case TT_SEQUENCE:
-	ret.push_back(make_seq(seq->elements[i]->seq));
-	break;
-      default:
-	//TODO some kind of error
-	break;
-      }
-    }
-    return ret;
-  }
-
-  template<>
-  SequenceResult Parser<SequenceResult>::parse(const string &input) {
-    HParseResult *res = h_parse(_parser, reinterpret_cast<const uint8_t*>(input.c_str()), input.size());
-    return SequenceResult(make_seq(res->ast->seq));
-  }
-
-  template<>
-  SequenceResult Parser<SequenceResult>::parse(const uint8_t *input, size_t length) {
-    HParseResult *res = h_parse(_parser, input, length);
-    return SequenceResult(make_seq(res->ast->seq));
-  }
-
-  template<class T>
-  Many<T> Parser<T>::many() {
-    return Many<T>(*this);
-  }
-
-  template<>
-  Many<UintResult> Parser<UintResult>::many() {
-    return Many<UintResult>(*this);
-  }
-
-  template<class T>
-  RepeatN Parser<T>::many(size_t n) {
-    return RepeatN(this, n);
-  }
-
-  template<class T>
-  Optional<T> Parser<T>::optional() {
-    return Optional<T>(this);
-  }
-
-  template<class T>
-  RepeatN Parser<T>::operator[](size_t n) {
-    return RepeatN(this, n);
-  }
-
-  IntRange<IntResult> Int64::in_range(const int64_t lower, const int64_t upper) {
-    Int64 p = Int64();
-    return IntRange<IntResult>(p, lower, upper);
-  }
-
-  IntRange<IntResult> Int32::in_range(const int32_t lower, const int32_t upper) {
-    Int32 p = Int32();
-    return IntRange<IntResult>(p, lower, upper);
-  }
-
-  IntRange<IntResult> Int16::in_range(const int16_t lower, const int16_t upper) {
-    Int16 p = Int16();
-    return IntRange<IntResult>(p, lower, upper);
-  }
-
-  IntRange<IntResult> Int8::in_range(const int8_t lower, const int8_t upper) {
-    Int8 p = Int8();
-    return IntRange<IntResult>(p, lower, upper);
-  }
-
-  IntRange<UintResult> Uint64::in_range(const uint64_t lower, const uint64_t upper) {
-    Uint64 p = Uint64();
-    return IntRange<UintResult>(p, lower, upper);
-  }
-
-  IntRange<UintResult> Uint32::in_range(const uint32_t lower, const uint32_t upper) {
-    Uint32 p = Uint32();
-    return IntRange<UintResult>(p, lower, upper);
-  }
-
-  IntRange<UintResult> Uint16::in_range(const uint16_t lower, const uint16_t upper) {
-    Uint16 p = Uint16();
-    return IntRange<UintResult>(p, lower, upper);
-  }
-
-  IntRange<UintResult> Uint8::in_range(const uint8_t lower, const uint8_t upper) {
-    Uint8 p = Uint8();
-    return IntRange<UintResult>(p, lower, upper);
-  }
-  
-}
diff --git a/src/hammer.hxx b/src/hammer.hxx
deleted file mode 100644
index 8f3200c8aaee5d394e759d73fc0d5f9d30ebae43..0000000000000000000000000000000000000000
--- a/src/hammer.hxx
+++ /dev/null
@@ -1,491 +0,0 @@
-#ifndef HAMMER_HAMMER__HXX
-#define HAMMER_HAMMER__HXX
-
-#include "hammer.h"
-#include <list>
-#include <string>
-#include <vector>
-#include <boost/variant.hpp>
-
-using std::list; using std::string; using std::vector;
-using boost::variant;
-
-namespace hammer {
-
-  template<typename T>
-  class ParseResult {
-  public:
-    typedef T result_type;
-  protected:
-    ParseResult() { }
-  };
-
-  class BytesResult : public ParseResult<vector<uint8_t> > {
-  public:
-    typedef vector<uint8_t> result_type;
-    BytesResult(const vector<uint8_t> res) : _bytes(res) { }
-    const result_type result();
-  private:
-    BytesResult() { }
-    result_type _bytes;
-  };
-
-  class UintResult : public ParseResult<uint64_t> {
-  public:
-    typedef uint64_t result_type;
-    UintResult(const uint64_t res) : _uint(res) { }
-    const result_type result();
-  private:
-    UintResult() { }
-    result_type _uint;
-  };
-
-  class IntResult : public ParseResult<int64_t> {
-  public:
-    typedef int64_t result_type;
-    IntResult(const int64_t res) : _sint(res) { }
-    const result_type result();
-  private:
-    IntResult() { }
-    result_type _sint;
-  };
-
-  class NullResult: public ParseResult<void*> {
-  public:
-    NullResult() { }
-    typedef void* result_type;
-    const result_type result() { return NULL; }
-  };
-
-  class SequenceResult : public ParseResult<vector<variant<BytesResult, UintResult, IntResult, NullResult, SequenceResult> > > {
-  public:
-    typedef vector<variant<BytesResult, UintResult, IntResult, NullResult, SequenceResult> > result_type;
-    SequenceResult(result_type res) : _seq(res) { }
-    const result_type result();
-  private:
-    SequenceResult() { }
-    result_type _seq;
-  };
-
-  /* forward declarations */
-  template<class T> class Many;
-  class Many1;
-  template<class T> class Optional;
-  class RepeatN;
-  template<class T> class IntRange;
-
-  template<typename T>
-  class Parser {
-  public:
-    typedef T result_type;
-    result_type parse(const string &input);
-    result_type parse(const uint8_t *input, size_t length);
-    Many<T> many();
-    RepeatN many(size_t n);
-    Optional<T> optional();
-    RepeatN operator[](size_t n);
-    HParser* parser() { return _parser; }
-  protected:
-    HParser* _parser;
-    Parser() { }
-    //    Parser(const Parser &p) : _parser(p.parser()) { } // hopefully we don't need a copy constructor...
-  };
-
-  class Token : public Parser<BytesResult> {
-  public:
-    Token(string &str) : _tok(str) { 
-      _parser = h_token(reinterpret_cast<const uint8_t*>(str.c_str()), str.size());
-    }
-    Token(const uint8_t *str, size_t length) : _tok(reinterpret_cast<const char*>(str), length) {
-      _parser = h_token(str, length);
-    }
-  private:
-    string _tok;
-  };
-
-  class Ch : public Parser<UintResult> {
-  public:
-    friend class Parser;
-    Ch(const uint8_t c) : _c(c) {
-      _parser = h_ch(c);
-    }
-  private:
-    uint8_t _c;
-  };
-
-  class ChRange : public Parser<UintResult> {
-  public:
-    ChRange(const uint8_t lower, const uint8_t upper) : _lower(lower), _upper(upper) { 
-      _parser = h_ch_range(lower, upper); 
-    }
-  private:
-    uint8_t _lower, _upper;
-  };
-
-  class SignedBits : public Parser<IntResult> {
-  public:
-    SignedBits(size_t len) : _len(len) {
-      _parser = h_bits(len, true);
-    }
-  private:
-    size_t _len;
-  };
-
-  class UnsignedBits : public Parser<UintResult> {
-  public:
-    UnsignedBits(size_t len) : _len(len) {
-      _parser = h_bits(len, false);
-    }
-  private:
-    size_t _len;
-  };
-
-  class Int64 : public Parser<IntResult> {
-  public:
-    Int64() {
-      _parser = h_int64();
-    }
-    IntRange<IntResult> in_range(const int64_t lower, const int64_t upper);
-  };
-
-  class Int32 : public Parser<IntResult> {
-  public:
-    Int32() {
-      _parser = h_int32();
-    }
-    IntRange<IntResult> in_range(const int32_t lower, const int32_t upper);
-  };
-
-  class Int16 : public Parser<IntResult> {
-  public:
-    Int16() { 
-      _parser = h_int16();
-    }
-    IntRange<IntResult> in_range(const int16_t lower, const int16_t upper);
-  };
-
-  class Int8 : public Parser<IntResult> {
-  public:
-    Int8() {
-      _parser = h_int8();
-    }
-    IntRange<IntResult> in_range(const int8_t lower, const int8_t upper);
-  };
-
-  class Uint64 : public Parser<UintResult> {
-  public:
-    Uint64() {
-      _parser = h_uint64(); 
-    }
-    IntRange<UintResult> in_range(const uint64_t lower, const uint64_t upper);
-  };
-
-  class Uint32 : public Parser<UintResult> {
-  public:
-    Uint32() { 
-      _parser = h_uint32();
-    }
-    IntRange<UintResult> in_range(const uint32_t lower, const uint32_t upper);
-  };
-
-  class Uint16 : public Parser<UintResult> {
-  public:
-    Uint16() {
-      _parser = h_uint16(); 
-    }
-    IntRange<UintResult> in_range(const uint16_t lower, const uint16_t upper);
-  };
-
-  class Uint8 : public Parser<UintResult> {
-  public:
-    Uint8() { 
-      _parser = h_uint8();
-    } 
-    IntRange<UintResult> in_range(const uint8_t lower, const uint8_t upper);
-  };
-
-  template<class T>
-  class IntRange : public Parser<T> {
-  public:
-    IntRange(Parser<T> &p, const int64_t lower, const int64_t upper) : _p(p), _lower(lower), _upper(upper) {
-      this->_parser = h_int_range(p.parser(), lower, upper);
-    }
-  private:
-    Parser<T> _p;
-    int64_t _lower, _upper;
-  };
-
-  template<class T>
-  class Whitespace : public Parser<T> {
-  public:
-    typedef typename T::result_type result_type;
-    Whitespace(Parser<T> &p) : _p(p) {
-      this->_parser = h_whitespace(p.parser()); 
-    }
-  private: 
-    Parser<T> _p;
-  };
-
-  template<class T, class U>
-  class Left : public Parser<T> {
-  public:
-    typedef typename T::result_type result_type;
-    Left(Parser<T> &p, Parser<U> &q) : _p(p), _q(q) {
-      this->_parser = h_left(p.parser(), q.parser());
-    }
-  private:
-    Parser<T> _p;
-    Parser<U> _q;
-  };
-
-  template<class T, class U>
-  class Right : public Parser<U> {
-  public:
-    typedef typename U::result_type result_type;
-    Right(Parser<T> &p, Parser<U> &q) : _p(p), _q(q) {
-      this->_parser = h_right(p.parser(), q.parser());
-    }
-  private:
-    Parser<T> _p;
-    Parser<U> _q;
-  };
-
-  template <class T, class U, class V>
-  class Middle : public Parser<U> {
-  public:
-    typedef typename U::result_type result_type;
-    Middle(Parser<T> &p, Parser<U> &x, Parser<V> &q) : _p(p), _x(x), _q(q) {
-      this->_parser = h_middle(p.parser(), x.parser(), q.parser()); 
-    }
-  private:
-    Parser<T> _p;
-    Parser<U> _x;
-    Parser<V> _q;
-  };
-
-  /* what are we doing about h_action? */
-
-  class In : public Parser<UintResult> {
-  public:
-    In(string &charset) : _charset(charset) {
-      _parser = h_in(reinterpret_cast<const uint8_t*>(charset.c_str()), charset.size());
-    }
-    In(const uint8_t *charset, size_t length) : _charset(reinterpret_cast<const char*>(charset), length) {
-	_parser = h_in(charset, length);
-      }
-  private:
-    string _charset;
-  };
-
-  class NotIn : public Parser<UintResult> {
-  public:
-    NotIn(string &charset) : _charset(charset) {
-      _parser = h_not_in(reinterpret_cast<const uint8_t*>(charset.c_str()), charset.size());
-    }
-    NotIn(const uint8_t *charset, size_t length) : _charset(reinterpret_cast<const char*>(charset), length) {
-      _parser = h_not_in(charset, length);
-    }
-  private:
-    string _charset;
-  };
-
-  class End : public Parser<NullResult> {
-  public:
-    End() {
-      _parser = h_end_p();
-    }
-  };
-
-  class Nothing : public Parser<NullResult> {
-  public:
-    Nothing() {
-      _parser = h_nothing_p();
-    } 
-  };
-
-  class Sequence : public Parser<SequenceResult> {
-    friend class Parser;
-  public:
-    Sequence(list<Parser> &ps) : _ps(ps) { 
-      void *parsers[ps.size()];
-      size_t i = 0;
-      for (list<Parser>::iterator it=ps.begin(); it != ps.end(); ++it, ++i) {
-	parsers[i] = const_cast<HParser*>(it->parser());
-      }
-      _parser = h_sequence__a(parsers);
-    }
-    // maybe also a begin and end iterator version
-  private:
-    list<Parser> _ps;
-  };
-
-  class Choice : public Parser<SequenceResult> {
-  public:
-    Choice(list<Parser<SequenceResult> > &ps) : _ps(ps) { 
-      void *parsers[ps.size()];
-      size_t i = 0;
-      for (list<Parser<SequenceResult> >::iterator it=ps.begin(); it != ps.end(); ++it, ++i) {
-	parsers[i] = const_cast<HParser*>(it->parser());
-      }
-      _parser = h_choice__a(parsers);      
-    }
-  private:
-    list<Parser<SequenceResult> > _ps;
-  };
-
-  template<class T, class U>
-  class ButNot : public Parser<T> {
-  public:
-    typedef typename T::result_type result_type;
-    ButNot(Parser<T> &p, Parser<U> &q) : _p(p), _q(q) {
-      this->_parser = h_butnot(p.parser(), q.parser());
-    }
-  private:
-    Parser<T> _p;
-    Parser<U> _q;
-  };
-
-  template<class T, class U>
-  class Difference : public Parser<T> {
-  public:
-    typedef typename T::result_type result_type;
-    Difference(Parser<T> &p, Parser<U> &q) : _p(p), _q(q) {
-      this->_parser = h_difference(p.parser(), q.parser());
-    }
-  private:
-    Parser<T> _p;
-    Parser<U> _q;
-  };
-
-  template<class T, class U>
-  class Xor : public Parser<variant<T, U> > {
-  public:
-    typedef variant<T, U> result_type;
-    Xor(Parser<T> &p, Parser<U> &q) : _p(p), _q(q) {
-      this->_parser = h_xor(p.parser(), q.parser());
-    }
-  private:
-    Parser<T> _p;
-    Parser<U> _q;
-  };
-
-  template<class T>
-  class Many : public Parser<SequenceResult> {
-  public:
-    Many(Parser<T> &p) : _p(p) {
-      _parser = h_many(p.parser());
-    }
-  private:
-    Parser<T> _p;
-  };
-
-  class Many1 : public Parser<SequenceResult> {
-  public:
-    Many1(Parser &p) : _p(p) {
-      _parser = h_many1(p.parser());
-    }
-  private:
-    Parser _p;
-  };
-
-  class RepeatN: public Parser<SequenceResult> {
-  public:
-    RepeatN(Parser &p, const size_t n) : _p(p), _n(n) {
-      _parser = h_repeat_n(p.parser(), n);
-    }
-  private:
-    Parser _p;
-    size_t _n;
-  };
-  
-  template<class T>
-  class Optional : public Parser<T> {
-  public:
-    typedef typename T::result_type result_type;
-    Optional(Parser<T> &p) : _p(p) { 
-      this->_parser = h_optional(p.parser());
-    }
-  private:
-    Parser<T> _p;
-  };
-
-  class Ignore : public Parser<NullResult> {
-  public:
-    Ignore(Parser &p) : _p(p) {
-      _parser = h_ignore(p.parser());
-    }
-  private:
-    Parser _p;
-  };
-
-  class SepBy : public Parser<SequenceResult> {
-  public:
-    SepBy(Parser &p, Parser &sep) : _p(p), _sep(sep) {
-      _parser = h_sepBy(p.parser(), sep.parser()); 
-    }
-  private:
-    Parser _p, _sep;
-  };
-
-  class SepBy1 : public Parser<SequenceResult> {
-  public:
-    SepBy1(Parser &p, Parser &sep) : _p(p), _sep(sep) {
-      _parser = h_sepBy1(p.parser(), sep.parser());
-    }
-  private:
-    Parser _p, _sep;
-  };
-
-  class Epsilon : public Parser<NullResult> {
-  public:
-    Epsilon() {
-      _parser = h_epsilon_p();
-    }
-  };
-
-  template<class T>
-  class LengthValue : public Parser<SequenceResult> {
-  public:
-    LengthValue(Parser<UintResult> &length, Parser<T> &value) : _length(length), _value(value) {
-      _parser = h_length_value(length.parser(), value.parser());
-    }
-  private:
-    Parser<UintResult> _length;
-    Parser<T> _value;
-  };
-
-  /* FIXME attr_bool */
-
-  class And : public Parser<NullResult> {
-  public:
-    And(Parser &p) : _p(p) {
-      _parser = h_and(p.parser());
-    }
-  private:
-    Parser _p;
-  };
-
-  class Not : public Parser<NullResult> {
-  public:
-    Not(Parser &p) : _p(p) {
-      _parser = h_not(p.parser());
-    }
-  private:
-    Parser _p;
-  };
-
-  template<class T>
-  class Indirect : public Parser<T> {
-  public:
-    typedef typename T::result_type result_type;
-    Indirect(Parser<T> &p) : _p(p) {
-      this->_parser = h_indirect();
-      h_bind_indirect(this->_parser, p.parser());
-    }
-  private:
-    Parser<T> _p;
-  };
-
-}
-
-#endif