home *** CD-ROM | disk | FTP | other *** search
/ Chip 2005 June / ccd0605.iso / LINUX / gopchop-1.1.7.tar.tar / gopchop-1.1.7.tar / gopchop-1.1.7 / src / Parser.h < prev    next >
C/C++ Source or Header  |  2003-04-27  |  3KB  |  117 lines

  1. /*
  2. #
  3. # header for Parser class
  4. #
  5. # $Id: Parser.h,v 1.10 2003/04/27 04:13:19 nemies Exp $
  6. #
  7. # Copyright (C) 2001-2003 Kees Cook
  8. # kees@outflux.net, http://outflux.net/
  9. # This program is free software; you can redistribute it and/or
  10. # modify it under the terms of the GNU General Public License
  11. # as published by the Free Software Foundation; either version 2
  12. # of the License, or (at your option) any later version.
  13. # This program is distributed in the hope that it will be useful,
  14. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16. # GNU General Public License for more details.
  17. # You should have received a copy of the GNU General Public License
  18. # along with this program; if not, write to the Free Software
  19. # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  20. # http://www.gnu.org/copyleft/gpl.html
  21. #
  22. */
  23.  
  24. #ifndef _PARSER_H_
  25. #define _PARSER_H_
  26.  
  27. #include "GOPchop.h"
  28. // FIXME: do config.h magic...
  29. // open
  30. #include <sys/types.h>
  31. #include <sys/stat.h>
  32. #include <fcntl.h>
  33. // everything
  34. #include <stdlib.h>
  35. #include <unistd.h>
  36. #include <stdio.h>
  37. // mmap
  38. #include <sys/mman.h>
  39. // strlen
  40. #include <string.h>
  41.  
  42. // What state is the parser in?
  43. #define PARSER_STATE_UNLOADED 0
  44. #define PARSER_STATE_READY    1
  45. #define PARSER_STATE_PARSING  2
  46. #define PARSER_STATE_FINISHED 3
  47.  
  48. class Parser
  49. {
  50.   public:
  51.     Parser(size_t window = 10485760);
  52.     virtual ~ Parser();
  53.     // take a pathname and a function for loading percent
  54.     int init(char *pathname, void (*ticker) (char *, float));
  55.     //virtual int parse(void);
  56.  
  57.     // return collected error strings
  58.     char *getError();
  59.  
  60.     // return mmap'd filename
  61.     char *getFilename();
  62.  
  63.     // return file size
  64.     off_t getSize();
  65.  
  66.     // reset all state
  67.     void reset(void);
  68.  
  69.     // see if we have access to bytes
  70.     uint8_t *bytesAvail(off_t location, size_t bytes);
  71.  
  72.     // has everything been parsed?
  73.     int getParsingState();
  74.  
  75.   protected:
  76.     char *filename;
  77.     int fd;
  78.     off_t filesize;
  79.  
  80.     size_t pagesize;
  81.     size_t mmap_max;            // our max mmap memory size
  82.     uint8_t *mmap_ptr;
  83.     size_t mmap_len;
  84.     off_t mmap_offset;
  85.  
  86.     off_t location;
  87.     uint8_t *start;
  88.     int parsing_state;
  89.  
  90.     char report_errors;
  91.  
  92.     // loading call-back
  93.     void (*tick) (char *task, float done);
  94.  
  95.     // Error messages
  96.     void clearError();
  97.     void addError(const char *fmt, ...);
  98.     char *error;
  99.  
  100.     // Parsing utilities
  101.     int consume(size_t bytes, uint8_t * match);
  102.     int verify(uint8_t * source, size_t bytes, uint8_t * match);
  103.     uint8_t *examine(size_t bytes);
  104.     uint8_t *attach(size_t bytes);
  105.     int forwardMatch(size_t bytes, uint8_t * match);
  106.     int forwardBitMatch(int bits, uint8_t value);
  107.  
  108.     void setParsingState(int state);
  109. };
  110.  
  111. #endif // _PARSER_H_
  112.  
  113. /* vi:set ai ts=4 sw=4 expandtab: */
  114.