1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
|
/*
* HT Editor
* codeanaly.h
*
* Copyright (C) 1999, 2000, 2001 Sebastian Biallas (sb@web-productions.de)
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
*/
#ifndef CODEANALY_H
#define CODEANALY_H
#include "global.h"
#include "common.h"
#include "stream.h"
#include "analy.h"
#define SIGNADDR dword
#define ERR_SYNTAX "syntax error."
#define ERR_MISSING "missing `%s'."
#define ERR_INVCHAR "invalid char `%c'."
#define WARN_DUPLICATE_LABEL "duplicate label `%s'.\nOnly first one will be analysed."
#define WARN_NOSIGNFILE "no sign file."
class analyser;
struct sign {
SIGNADDR signaddr;
dword length;
char *label;
sign *left, *right;
};
class codeanalyser: public object {
public:
analyser *a;
bool active;
sign *signs;
ht_stream *signfile;
int curline;
bool error;
char *buffer, *bufptr, *bufend;
void init(analyser *A);
int load(ht_object_stream *f);
virtual void done();
virtual OBJECT_ID object_id();
void addsign(sign **Sign, SIGNADDR Signaddr, char *label);
void addsign(SIGNADDR Signaddr, char *label);
void beginanalysis();
void consume(char *str);
void continueanalysis();
void doscan(ADDR Addr, char *label);
void doscan(ADDR Addr, char *label, SIGNADDR Signaddr);
bool labelmatch(char *signlabel, char *codelabel);
void loaddefs(char *name);
char *nextchar();
char *nexttoken();
void raiseerror(char *msg, ...);
void raisewarning(char *msg, ...);
virtual void store(ht_object_stream *f);
};
#endif
|