#include <ctype.h>
#include <signal.h>
#include <stdio.h>
#include <sys/types.h>
#include "constants.h"
#include "invlib.h"
#include "library.h"
#include "mouse.h"
#define SIGTYPE void
typedef enum {
NO,
YES
} BOOL;
typedef enum {
NOERROR,
NOTSYMBOL,
REGCMPERROR
} FINDINIT;
typedef struct history {
int field;
char *text;
struct history *previous;
struct history *next;
} HISTORY;
typedef enum {
DECL,
FLOW,
MISC
} KEYWORD;
extern char dichar1[];
extern char dichar2[];
extern char dicode1[];
extern char dicode2[];
extern char *editor, *home, *shell;
extern BOOL compress;
extern int cscopedepth;
extern char currentdir[];
extern BOOL dbtruncated;
extern char **dbvpdirs;
extern int dbvpndirs;
extern int dispcomponents;
extern BOOL editallprompt;
extern int fileargc;
extern char **fileargv;
extern int fileversion;
extern BOOL incurses;
extern INVCONTROL invcontrol;
extern BOOL invertedindex;
extern BOOL isuptodate;
extern BOOL linemode;
extern char *namefile;
extern char *newreffile;
extern FILE *newrefs;
extern BOOL noacttimeout;
extern BOOL ogs;
extern FILE *postings;
extern char *prependpath;
extern BOOL returnrequired;
extern int symrefs;
extern char temp1[];
extern char temp2[];
extern long totalterms;
extern BOOL truncatesyms;
extern BOOL caseless;
extern BOOL *change;
extern BOOL changing;
extern char newpat[];
extern char pattern[];
extern long dboffset;
extern BOOL errorsfound;
extern long fileindex;
extern long lineoffset;
extern long npostings;
extern int symbols;
extern char **incdirs;
extern char **srcdirs;
extern char **srcfiles;
extern int nincdirs;
extern int nsrcdirs;
extern int nsrcfiles;
extern int msrcfiles;
extern int *displine;
extern int disprefs;
extern int field;
extern unsigned fldcolumn;
extern int mdisprefs;
extern int selectlen;
extern int nextline;
extern int topline;
extern int bottomline;
extern int totallines;
extern FILE *refsfound;
extern FILE *nonglobalrefs;
extern pid_t childpid;
extern char block[];
extern int blocklen;
extern char blockmark;
extern long blocknumber;
extern char *blockp;
extern char lastfilepath[];
extern struct keystruct {
char *text;
char delim;
KEYWORD type;
struct keystruct *next;
} keyword[];
extern int first;
extern int last;
extern int lineno;
extern FILE *yyin;
extern int yyleng;
extern int yylineno;
#if hpux
extern unsigned char yytext[];
#else
extern char yytext[];
#endif
extern char *argv0;
void egrepcaseless(int i);
char *egrepinit(char *expression);
int egrep(char *f, FILE *o, char *fo);
BOOL command(int commandc);
void clearprompt(void);
BOOL readrefs(char *filename);
BOOL changestring(void);
void mark(int i);
void crossref(char *srcfile);
void savesymbol(int token);
void putfilename(char *srcfile);
void putposting(char *term, int type);
void putstring(char *s);
void warning(char *text);
void sourcedir(char *dirlist);
void includedir(char *dirlist);
void makefilelist(void);
void incfile(char *file, int type);
BOOL infilelist(char *file);
void addsrcfile(char *path);
void freefilelist(void);
void dispinit(void);
void display(void);
void setfield(void);
void atfield(void);
void jumpback(int sig);
BOOL search(void);
BOOL writerefsfound(void);
void countrefs(void);
void myperror(char *text);
void putmsg(char *msg);
void clearmsg2(void);
void putmsg2(char *msg);
void seekline(int line);
void ogsnames(char *file, char **subsystem, char **book);
char *pathcomponents(char *path, int components);
void strtoupper(char *s);
void editref(int i);
void editall(void);
void edit(char *file, char *linenum);
void findsymbol(void);
void finddef(void);
void findallfcns(void);
void findcalledby(void);
void findcalling(void);
void findassignments(void);
char *findgreppat(void);
char *findegreppat(char *egreppat);
void findfile(void);
void findinclude(void);
FINDINIT findinit(void);
void findcleanup(void);
void initprogress(void);
void progress(char *format, long n1, long n2);
BOOL match(void);
BOOL matchrest(void);
void getstring(char *s);
char *scanpast(int c);
char *readblock(void);
long dbseek(long offset);
void help(void);
void addcmd(int f, char *s);
void resetcmd(void);
HISTORY *currentcmd(void);
HISTORY *prevcmd(void);
HISTORY *nextcmd(void);
void catchint(int sig);
int ungetch(int c);
int mygetch(void);
int getaline(char s[], size_t size, int firstchar, BOOL iscaseless);
void askforchar(void);
void askforreturn(void);
void shellpath(char *out, int limit, char *in);
void initsymtab(void);
struct keystruct *lookup(char *ident);
int hash(char *s);
void rebuild(void);
void entercurses(void);
void exitcurses(void);
void myexit(int sig) __NORETURN;
void cannotopen(char *file);
void cannotwrite(char *file);
void initmenu(void);
extern void initscanner(char *srcfile);
extern int yylex(void);
extern int execute(char *, ...);