#ifndef _ARTUTILS_H
#define _ARTUTILS_H
#include "art.h"
#if defined(sparc)
#include <sys/byteorder.h>
#endif
extern FileOffset errorRoot, errorMsg, remoteStartNode;
extern FileOffset q_position;
extern FILE *HatFileRandom, *HatFileSeq, *OutputFile, *BridgeFile;
extern char* progname; /* browser program name */
extern unsigned filesize, outputsize;
extern Bool hat_interrupted;
typedef enum {
Literal, Variable, Constructor, ConstrFields, Abstract
} AtomType;
typedef struct {
char* srcname;
int line;
int column;
int lineend;
int columnend;
} SrcRef;
typedef struct {
char* idname;
char* modname;
char* srcname;
char fixity;
char arity;
int defnline;
int defncolumn;
int defnlineend;
int defncolumnend;
Bool isTraced;
AtomType atomtype;
} Ident;
void finalise (void);
FILE* openFile (char* base, char* ext);
int sizeFile (char* base, char* ext);
int freadAt (FileOffset fo, void* ptr
,int size, int nmemb, FILE* stream);
FileOffset readFO (void);
char* readString (void);
int q_fread (void* ptr, int size, int nmemb, FILE* stream);
FileOffset q_readFO (void);
char* q_readString (void);
char q_peek (void);
char q_tag (void);
void q_init (void);
void readModuleAt (FileOffset fo, char** modname, char** srcname
,Bool* traced);
Ident* readAtomAt (FileOffset fo);
Ident* readValueAt (FileOffset fo);
SrcRef* readSRAt (FileOffset fo);
FileOffset q_skipNode (char tag);
FileOffset currentfilepos (void);
FileOffset readTraceAt (FileOffset fo, char** expr, SrcRef** sr
,int* infix,int followHidden,int depth);
char* infixPrint ( char* str1, int arg1
, char* strfn, int fn
, char* str2, int arg2);
#define noFixity ((char)3)
#define isInfix(fix) ((fix%4)!=3)
#define isInfixL(fix) ((fix%4)==2)
#define isInfixR(fix) ((fix%4)==1)
#define isInfixN(fix) ((fix%4)==0)
#define priority(fix) (fix/4)
/* prototypes for common ui */
void openHatFile (char* prog, char* arg);
void closeHatFile (void);
FileOffset getBridgeValue (void);
FileOffset getErrorLoc (void);
char* errorMessage (void);
char* versionNumber (void);
int getNodeType (FileOffset fo);
FileOffset parentNode (FileOffset fo);
char* getNm (FileOffset fo);
char* getNmMod (FileOffset fo);
int getFixity (FileOffset fo);
Bool isLiteral (FileOffset fo);
Bool isConstructor (FileOffset fo);
Bool isConstrFields (FileOffset fo);
Bool isLambda (FileOffset fo);
Bool isDoLambda (FileOffset fo);
char* identName (Ident* id);
char* identModName (Ident* id);
char* identSrcFile (Ident* id);
int identFixity (Ident* id);
int identArity (Ident* id);
int identDefnLine (Ident* id);
int identDefnCol (Ident* id);
int identDefnLineEnd(Ident* id);
int identDefnColEnd (Ident* id);
Bool identIsTraced (Ident* id);
int getExpArity (FileOffset fo);
FileOffset getExpArg (FileOffset fo, int n);
FileOffset peekExpArg (FileOffset fo, int n);
FileOffset getFieldLabel (FileOffset fo, int n);
FileOffset getSrcRef (FileOffset fo);
FileOffset getDefnRef (FileOffset fo);
FileOffset peekTrace (FileOffset fo);
FileOffset getResult (FileOffset fo, Bool stopAtHidden);
FileOffset getResultNoCycle(FileOffset fo, Bool stopAtHidden);
FileOffset peekResult (FileOffset fo);
char* srFile (SrcRef* sr);
int srLine (SrcRef* sr);
int srColumn (SrcRef* sr);
int srLineEnd (SrcRef* sr);
int srColumnEnd (SrcRef* sr);
/* prototypes for other tools */
void ctrlC (int sig);
int fileoffset_compare (FileOffset i, FileOffset j);
#endif
syntax highlighted by Code2HTML, v. 0.9.1