322 lines
11 KiB
C
322 lines
11 KiB
C
|
/*===========================================================================
|
||
|
Copyright (c) 1998-2000, The Santa Cruz Operation
|
||
|
All rights reserved.
|
||
|
|
||
|
Redistribution and use in source and binary forms, with or without
|
||
|
modification, are permitted provided that the following conditions are met:
|
||
|
|
||
|
*Redistributions of source code must retain the above copyright notice,
|
||
|
this list of conditions and the following disclaimer.
|
||
|
|
||
|
*Redistributions in binary form must reproduce the above copyright notice,
|
||
|
this list of conditions and the following disclaimer in the documentation
|
||
|
and/or other materials provided with the distribution.
|
||
|
|
||
|
*Neither name of The Santa Cruz Operation nor the names of its contributors
|
||
|
may be used to endorse or promote products derived from this software
|
||
|
without specific prior written permission.
|
||
|
|
||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS
|
||
|
IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||
|
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||
|
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
|
||
|
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||
|
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||
|
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||
|
INTERRUPTION)
|
||
|
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||
|
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||
|
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
|
||
|
DAMAGE.
|
||
|
=========================================================================*/
|
||
|
|
||
|
/* cscope - interactive C symbol cross-reference
|
||
|
*
|
||
|
* global type, data, and function definitions
|
||
|
*/
|
||
|
|
||
|
#ifndef CSCOPE_GLOBAL_H
|
||
|
#define CSCOPE_GLOBAL_H
|
||
|
|
||
|
//#include "config.h"
|
||
|
#include <unistd.h>
|
||
|
#include <sys/types.h>
|
||
|
#include <ctype.h> /* isalpha, isdigit, etc. */
|
||
|
#include <signal.h> /* SIGINT and SIGQUIT */
|
||
|
#include <stdio.h> /* standard I/O package */
|
||
|
#include <stdlib.h> /* standard library functions */
|
||
|
|
||
|
#include <string.h> /* string functions */
|
||
|
|
||
|
#include "constants.h" /* misc. constants */
|
||
|
#include "invlib.h" /* inverted index library */
|
||
|
#include "library.h" /* library function return values */
|
||
|
|
||
|
typedef void (*sighandler_t)(int);
|
||
|
|
||
|
#include <stdarg.h>
|
||
|
|
||
|
#include <fcntl.h>
|
||
|
|
||
|
typedef enum { /* boolean data type */
|
||
|
NO,
|
||
|
YES
|
||
|
} BOOL;
|
||
|
|
||
|
typedef enum { /* findinit return code */
|
||
|
NOERROR,
|
||
|
NOTSYMBOL,
|
||
|
REGCMPERROR
|
||
|
} FINDINIT;
|
||
|
|
||
|
typedef struct { /* mouse action */
|
||
|
int button;
|
||
|
int percent;
|
||
|
int x1;
|
||
|
int y1;
|
||
|
int x2;
|
||
|
int y2;
|
||
|
} MOUSE;
|
||
|
|
||
|
struct cmd { /* command history struct */
|
||
|
struct cmd *prev, *next; /* list ptrs */
|
||
|
int field; /* input field number */
|
||
|
char *text; /* input field text */
|
||
|
};
|
||
|
|
||
|
#ifndef R_OK
|
||
|
# define READ R_OK
|
||
|
#else
|
||
|
# define READ 4
|
||
|
#endif
|
||
|
#ifdef W_OK
|
||
|
# define WRITE W_OK
|
||
|
#else
|
||
|
# define WRITE 2
|
||
|
#endif
|
||
|
|
||
|
#define O_TEXT 0x00
|
||
|
#define O_BINARY 0x00
|
||
|
|
||
|
#ifndef DFLT_INCDIR
|
||
|
# define DFLT_INCDIR "/usr/include"
|
||
|
#endif
|
||
|
|
||
|
/* digraph data for text compression */
|
||
|
extern char dichar1[]; /* 16 most frequent first chars */
|
||
|
extern char dichar2[]; /* 8 most frequent second chars
|
||
|
using the above as first chars */
|
||
|
extern char dicode1[]; /* digraph first character code */
|
||
|
extern char dicode2[]; /* digraph second character code */
|
||
|
|
||
|
/* and some macros to help using dicodes: */
|
||
|
/* Check if a given pair of chars is compressable as a dicode: */
|
||
|
#define IS_A_DICODE(inchar1, inchar2) \
|
||
|
(dicode1[(unsigned char)(inchar1)] && dicode2[(unsigned char)(inchar2)])
|
||
|
/* Combine the pair into a dicode */
|
||
|
#define DICODE_COMPRESS(inchar1, inchar2) \
|
||
|
((0200 - 2) + dicode1[(unsigned char)(inchar1)] \
|
||
|
+ dicode2[(unsigned char)(inchar2)])
|
||
|
|
||
|
/* main.c global data */
|
||
|
extern char *editor, *home, *shell, *lineflag; /* environment variables */
|
||
|
extern char *home; /* Home directory */
|
||
|
extern BOOL lineflagafterfile;
|
||
|
extern char *argv0; /* command name */
|
||
|
extern BOOL compress; /* compress the characters in the crossref */
|
||
|
extern BOOL dbtruncated; /* database symbols truncated to 8 chars */
|
||
|
extern int dispcomponents; /* file path components to display */
|
||
|
#if CCS
|
||
|
extern BOOL displayversion; /* display the C Compilation System version */
|
||
|
#endif
|
||
|
extern BOOL editallprompt; /* prompt between editing files */
|
||
|
extern unsigned int fileargc; /* file argument count */
|
||
|
extern char **fileargv; /* file argument values */
|
||
|
extern int fileversion; /* cross-reference file version */
|
||
|
extern BOOL incurses; /* in curses */
|
||
|
extern BOOL invertedindex; /* the database has an inverted index */
|
||
|
extern BOOL isuptodate; /* consider the crossref up-to-date */
|
||
|
extern BOOL kernelmode; /* don't use DFLT_INCDIR - bad for kernels */
|
||
|
extern BOOL linemode; /* use line oriented user interface */
|
||
|
extern BOOL verbosemode; /* print extra information on line mode */
|
||
|
extern BOOL recurse_dir; /* recurse dirs when searching for src files */
|
||
|
extern char *namefile; /* file of file names */
|
||
|
extern BOOL ogs; /* display OGS book and subsystem names */
|
||
|
extern char *prependpath; /* prepend path to file names */
|
||
|
extern FILE *refsfound; /* references found file */
|
||
|
extern char temp1[]; /* temporary file name */
|
||
|
extern char temp2[]; /* temporary file name */
|
||
|
extern long totalterms; /* total inverted index terms */
|
||
|
extern BOOL trun_syms; /* truncate symbols to 8 characters */
|
||
|
extern char tempstring[TEMPSTRING_LEN + 1]; /* global dummy string buffer */
|
||
|
extern char *tmpdir; /* temporary directory */
|
||
|
|
||
|
/* command.c global data */
|
||
|
extern BOOL caseless; /* ignore letter case when searching */
|
||
|
extern BOOL *change; /* change this line */
|
||
|
extern BOOL changing; /* changing text */
|
||
|
extern int selecting;
|
||
|
extern unsigned int curdispline;
|
||
|
extern char newpat[]; /* new pattern */
|
||
|
extern char Pattern[]; /* symbol or text pattern */
|
||
|
|
||
|
/* crossref.c global data */
|
||
|
extern long dboffset; /* new database offset */
|
||
|
extern BOOL errorsfound; /* prompt before clearing error messages */
|
||
|
extern long lineoffset; /* source line database offset */
|
||
|
extern long npostings; /* number of postings */
|
||
|
extern unsigned long symbols; /* number of symbols */
|
||
|
|
||
|
/* dir.c global data */
|
||
|
extern char currentdir[]; /* current directory */
|
||
|
extern char **incdirs; /* #include directories */
|
||
|
extern char **srcdirs; /* source directories */
|
||
|
extern char **srcfiles; /* source files */
|
||
|
extern unsigned long nincdirs; /* number of #include directories */
|
||
|
extern unsigned long nsrcdirs; /* number of source directories */
|
||
|
extern unsigned long nsrcfiles; /* number of source files */
|
||
|
extern unsigned long msrcfiles; /* maximum number of source files */
|
||
|
|
||
|
/* display.c global data */
|
||
|
extern int booklen; /* OGS book name display field length */
|
||
|
extern int *displine; /* screen line of displayed reference */
|
||
|
extern unsigned int disprefs; /* displayed references */
|
||
|
extern int fcnlen; /* function name display field length */
|
||
|
extern int field; /* input field */
|
||
|
extern int filelen; /* file name display field length */
|
||
|
extern unsigned fldcolumn; /* input field column */
|
||
|
extern unsigned int mdisprefs; /* maximum displayed references */
|
||
|
extern unsigned int nextline; /* next line to be shown */
|
||
|
extern FILE *nonglobalrefs; /* non-global references file */
|
||
|
extern int numlen; /* line number display field length */
|
||
|
extern unsigned int topline; /* top line of page */
|
||
|
extern int bottomline; /* bottom line of page */
|
||
|
extern long searchcount; /* count of files searched */
|
||
|
extern int subsystemlen; /* OGS subsystem name display field length */
|
||
|
extern unsigned int totallines; /* total reference lines */
|
||
|
extern const char dispchars[]; /* display chars for jumping to lines */
|
||
|
|
||
|
/* find.c global data */
|
||
|
extern char block[]; /* cross-reference file block */
|
||
|
extern char blockmark; /* mark character to be searched for */
|
||
|
extern long blocknumber; /* block number */
|
||
|
extern char *blockp; /* pointer to current character in block */
|
||
|
extern int blocklen; /* length of disk block read */
|
||
|
|
||
|
/* lookup.c global data */
|
||
|
extern struct keystruct {
|
||
|
char *text;
|
||
|
char delim;
|
||
|
struct keystruct *next;
|
||
|
} keyword[];
|
||
|
|
||
|
/* mouse.c global data */
|
||
|
extern BOOL mouse; /* mouse interface */
|
||
|
|
||
|
#if UNIXPC
|
||
|
extern BOOL unixpcmouse; /* UNIX PC mouse interface */
|
||
|
#endif
|
||
|
|
||
|
/* cscope functions called from more than one function or between files */
|
||
|
|
||
|
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 *findassign(char *pattern);
|
||
|
char *findregexp(char *egreppat);
|
||
|
char *findstring(char *pattern);
|
||
|
char *inviewpath(char *file);
|
||
|
char *lookup(char *ident);
|
||
|
char *pathcomponents(char *path, int components);
|
||
|
char *read_block(void);
|
||
|
char *scanpast(char c);
|
||
|
|
||
|
char ** parse_options(int *argc, char **argv);
|
||
|
void error_usage(void);
|
||
|
void longusage(void);
|
||
|
void usage(void);
|
||
|
extern BOOL remove_symfile_onexit;
|
||
|
extern BOOL onesearch; /* one search only in line mode */
|
||
|
extern char *reflines; /* symbol reference lines file */
|
||
|
|
||
|
void addcmd(int f, char *s);
|
||
|
void addsrcfile(char *path);
|
||
|
void askforchar(void);
|
||
|
void askforreturn(void);
|
||
|
void atchange(void);
|
||
|
void atfield(void);
|
||
|
void cannotwrite(char *file);
|
||
|
void cannotopen(char *file);
|
||
|
void clearmsg(void);
|
||
|
void clearmsg2(void);
|
||
|
void countrefs(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 postfatal(const char *msg,...);
|
||
|
void putposting(char *term, int type);
|
||
|
void fetch_string_from_dbase(char *, size_t);
|
||
|
void resetcmd(void);
|
||
|
void seekline(unsigned 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);
|
||
|
|
||
|
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 mygetline(char p[], char s[], unsigned size, int firstchar, BOOL iscaseless);
|
||
|
int mygetch(void);
|
||
|
int hash(char *ss);
|
||
|
int execute(char *a, ...);
|
||
|
long dbseek(long offset);
|
||
|
|
||
|
|
||
|
#endif /* CSCOPE_GLOBAL_H */
|