#include "config.h"
#include <unistd.h>
#include <sys/types.h>
#include <ctype.h>
#include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "constants.h"
#include "invlib.h"
#include "library.h"
#ifndef RETSIGTYPE
#if SVR2 || BSD && !sun
#define RETSIGTYPE int
#else
#define RETSIGTYPE void
#endif
#endif
typedef enum {
NO,
YES
} BOOL;
typedef enum {
NOERROR,
NOTSYMBOL,
REGCMPERROR
} FINDINIT;
typedef struct {
int button;
int percent;
int x1;
int y1;
int x2;
int y2;
} MOUSE;
struct cmd {
struct cmd *prev, *next;
int field;
char *text;
};
extern char dichar1[];
extern char dichar2[];
extern char dicode1[];
extern char dicode2[];
#define IS_A_DICODE(inchar1, inchar2) \
(dicode1[(unsigned char)(inchar1)] && dicode2[(unsigned char)(inchar2)])
#define DICODE_COMPRESS(inchar1, inchar2) \
((0200 - 2) + dicode1[(unsigned char)(inchar1)] \
+ dicode2[(unsigned char)(inchar2)])
extern char *editor, *home, *shell, *lineflag;
extern BOOL lineflagafterfile;
extern char *argv0;
extern BOOL compress;
extern BOOL dbtruncated;
extern int dispcomponents;
#if CCS
extern BOOL displayversion;
#endif
extern BOOL editallprompt;
extern int fileargc;
extern char **fileargv;
extern int fileversion;
extern BOOL incurses;
extern BOOL invertedindex;
extern BOOL isuptodate;
extern BOOL kernelmode;
extern BOOL linemode;
extern BOOL recurse_dir;
extern char *namefile;
extern char *newreffile;
extern FILE *newrefs;
extern BOOL ogs;
extern FILE *postings;
extern char *prependpath;
extern FILE *refsfound;
extern BOOL select_large;
extern int symrefs;
extern char temp1[];
extern char temp2[];
extern long totalterms;
extern BOOL trun_syms;
extern char tempstring[8192];
extern BOOL caseless;
extern BOOL *change;
extern BOOL changing;
extern int selecting;
extern int curdispline;
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 currentdir[];
extern char **incdirs;
extern char **srcdirs;
extern char **srcfiles;
extern int nincdirs;
extern int nsrcdirs;
extern int nsrcfiles;
extern int msrcfiles;
extern int booklen;
extern int *displine;
extern int disprefs;
extern int fcnlen;
extern int field;
extern int filelen;
extern unsigned fldcolumn;
extern int mdisprefs;
extern int nextline;
extern FILE *nonglobalrefs;
extern int numlen;
extern int topline;
extern int bottomline;
extern long searchcount;
extern int subsystemlen;
extern int totallines;
extern const char dispchars[];
extern char block[];
extern char blockmark;
extern long blocknumber;
extern char *blockp;
extern int blocklen;
extern struct keystruct {
char *text;
char delim;
struct keystruct *next;
} keyword[];
extern BOOL mouse;
#if UNIXPC
extern BOOL unixpcmouse;
#endif
char *filepath(char *file);
char *findcalledby(char *pattern);
char *findcalling(char *pattern);
char *findallfcns(char *dummy);
char *finddef(char *pattern);
char *findfile(char *dummy);
char *findinclude(char *pattern);
char *findsymbol(char *pattern);
char *findregexp(char *egreppat);
char *findstring(char *pattern);
char *inviewpath(char *file);
char *lookup(char *ident);
char *mygetenv(char *variable, char *deflt);
char *pathcomponents(char *path, int components);
char *readblock(void);
char *scanpast(char c);
void addcmd(int f, char *s);
void addsrcfile(char *name, char *path);
void askforchar(void);
void askforreturn(void);
void atfield(void);
void cannotwrite(char *file);
void cannotopen(char *file);
void clearmsg2(void);
void crossref(char *srcfile);
void dispinit(void);
void display(void);
void drawscrollbar(int top, int bot);
void edit(char *file, char *linenum);
void editall(void);
void editref(int);
void entercurses(void);
void exitcurses(void);
void findcleanup(void);
void freesrclist(void);
void freeinclist(void);
void freecrossref(void);
void freefilelist(void);
void help(void);
void incfile(char *file, char *type);
void includedir(char *dirname);
void initsymtab(void);
void makefilelist(void);
void mousecleanup(void);
void mousemenu(void);
void mouseinit(void);
void mousereinit(void);
void myexit(int sig);
void myperror(char *text);
void ogsnames(char *file, char **subsystem, char **book);
void progress(char *what, long current, long max);
void putfilename(char *srcfile);
void postmsg(char *msg);
void postmsg2(char *msg);
void posterr(char *msg,...);
void putposting(char *term, int type);
void putstring(char *s);
void rebuild(void);
void resetcmd(void);
void seekline(int line);
void setfield(void);
void shellpath(char *out, int limit, char *in);
void sourcedir(char *dirlist);
void myungetch(int c);
void warning(char *text);
void writestring(char *s);
BOOL command(int commandc);
BOOL infilelist(char *file);
BOOL readrefs(char *filename);
BOOL search(void);
BOOL writerefsfound(void);
FILE *myfopen(char *path, char *mode);
FINDINIT findinit(char *pattern);
MOUSE *getmouseaction(char leading_char);
struct cmd *currentcmd(void);
struct cmd *prevcmd(void);
struct cmd *nextcmd(void);
int egrep(char *file, FILE *output, char *format);
int getline(char s[], unsigned size, int firstchar, BOOL iscaseless);
int mygetch(void);
int myopen(char *path, int flag, int mode);
int hash(char *ss);
int execute(char *a, ...);
long dbseek(long offset);