4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
23 * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
26 /* Copyright (c) 1988 AT&T */
27 /* All Rights Reserved */
30 * cscope - interactive C symbol cross-reference
32 * global type, data, and function definitions
35 #include <ctype.h> /* isalpha, isdigit, etc. */
36 #include <signal.h> /* SIGINT and SIGQUIT */
37 #include <stdio.h> /* standard I/O package */
38 #include <sys/types.h>
39 #include "constants.h" /* misc. constants */
40 #include "invlib.h" /* inverted index library */
41 #include "library.h" /* library function return values */
42 #include "mouse.h" /* mouse interface */
45 typedef enum { /* boolean data type */
50 typedef enum { /* findinit return code */
56 typedef struct history
{ /* command history */
59 struct history
*previous
;
63 typedef enum { /* keyword type */
64 DECL
, /* type declaration */
65 FLOW
, /* control flow (do, if, for, while, switch, etc.) */
66 MISC
/* misc.: sizeof or table placeholder for compression */
69 /* digraph data for text compression */
70 extern char dichar1
[]; /* 16 most frequent first chars */
71 extern char dichar2
[]; /* 8 most frequent second chars */
72 /* using the above as first chars */
73 extern char dicode1
[]; /* digraph first character code */
74 extern char dicode2
[]; /* digraph second character code */
76 /* main.c global data */
77 extern char *editor
, *home
, *shell
; /* environment variables */
78 extern BOOL compress
; /* compress the characters in the crossref */
79 extern int cscopedepth
; /* cscope invocation nesting depth */
80 extern char currentdir
[]; /* current directory */
81 extern BOOL dbtruncated
; /* database symbols are truncated to 8 chars */
82 extern char **dbvpdirs
; /* directories (including current) in */
83 /* database view path */
84 extern int dbvpndirs
; /* number of directories in database */
86 extern int dispcomponents
; /* file path components to display */
87 extern BOOL editallprompt
; /* prompt between editing files */
88 extern int fileargc
; /* file argument count */
89 extern char **fileargv
; /* file argument values */
90 extern int fileversion
; /* cross-reference file version */
91 extern BOOL incurses
; /* in curses */
92 extern INVCONTROL invcontrol
; /* inverted file control structure */
93 extern BOOL invertedindex
; /* the database has an inverted index */
94 extern BOOL isuptodate
; /* consider the crossref up-to-date */
95 extern BOOL linemode
; /* use line oriented user interface */
96 extern char *namefile
; /* file of file names */
97 extern char *newreffile
; /* new cross-reference file name */
98 extern FILE *newrefs
; /* new cross-reference */
99 extern BOOL noacttimeout
; /* no activity timeout occurred */
100 extern BOOL ogs
; /* display OGS book and subsystem names */
101 extern FILE *postings
; /* new inverted index postings */
102 extern char *prependpath
; /* prepend path to file names */
103 extern BOOL returnrequired
; /* RETURN required after selection number */
104 extern int symrefs
; /* cross-reference file */
105 extern char temp1
[]; /* temporary file name */
106 extern char temp2
[]; /* temporary file name */
107 extern long totalterms
; /* total inverted index terms */
108 extern BOOL truncatesyms
; /* truncate symbols to 8 characters */
110 /* command.c global data */
111 extern BOOL caseless
; /* ignore letter case when searching */
112 extern BOOL
*change
; /* change this line */
113 extern BOOL changing
; /* changing text */
114 extern char newpat
[]; /* new pattern */
115 extern char pattern
[]; /* symbol or text pattern */
117 /* crossref.c global data */
118 extern long dboffset
; /* new database offset */
119 extern BOOL errorsfound
; /* prompt before clearing error messages */
120 extern long fileindex
; /* source file name index */
121 extern long lineoffset
; /* source line database offset */
122 extern long npostings
; /* number of postings */
123 extern int symbols
; /* number of symbols */
125 /* dir.c global data */
126 extern char **incdirs
; /* #include directories */
127 extern char **srcdirs
; /* source directories */
128 extern char **srcfiles
; /* source files */
129 extern int nincdirs
; /* number of #include directories */
130 extern int nsrcdirs
; /* number of source directories */
131 extern int nsrcfiles
; /* number of source files */
132 extern int msrcfiles
; /* maximum number of source files */
134 /* display.c global data */
135 extern int *displine
; /* screen line of displayed reference */
136 extern int disprefs
; /* displayed references */
137 extern int field
; /* input field */
138 extern unsigned fldcolumn
; /* input field column */
139 extern int mdisprefs
; /* maximum displayed references */
140 extern int selectlen
; /* selection number field length */
141 extern int nextline
; /* next line to be shown */
142 extern int topline
; /* top line of page */
143 extern int bottomline
; /* bottom line of page */
144 extern int totallines
; /* total reference lines */
145 extern FILE *refsfound
; /* references found file */
146 extern FILE *nonglobalrefs
; /* non-global references file */
148 /* exec.c global data */
149 extern pid_t childpid
; /* child's process ID */
151 /* find.c global data */
152 extern char block
[]; /* cross-reference file block */
153 extern int blocklen
; /* length of disk block read */
154 extern char blockmark
; /* mark character to be searched for */
155 extern long blocknumber
; /* block number */
156 extern char *blockp
; /* pointer to current character in block */
157 extern char lastfilepath
[]; /* last file that full path was computed for */
159 /* lookup.c global data */
160 extern struct keystruct
{
164 struct keystruct
*next
;
167 /* scanner.l global data */
168 extern int first
; /* buffer index for first char of symbol */
169 extern int last
; /* buffer index for last char of symbol */
170 extern int lineno
; /* symbol line number */
171 extern FILE *yyin
; /* input file descriptor */
172 extern int yyleng
; /* input line length */
173 extern int yylineno
; /* input line number */
175 extern unsigned char yytext
[]; /* input line text */
177 extern char yytext
[]; /* input line text */
180 /* vpinit.c global data */
181 extern char *argv0
; /* command name */
183 /* cscope functions called from more than one function or between files */
185 void egrepcaseless(int i
);
186 char *egrepinit(char *expression
);
187 int egrep(char *f
, FILE *o
, char *fo
);
190 BOOL
command(int commandc
);
191 void clearprompt(void);
192 BOOL
readrefs(char *filename
);
193 BOOL
changestring(void);
197 void crossref(char *srcfile
);
198 void savesymbol(int token
);
199 void putfilename(char *srcfile
);
200 void putposting(char *term
, int type
);
201 void putstring(char *s
);
202 void warning(char *text
);
205 void sourcedir(char *dirlist
);
206 void includedir(char *dirlist
);
207 void makefilelist(void);
208 void incfile(char *file
, int type
);
209 BOOL
infilelist(char *file
);
210 void addsrcfile(char *path
);
211 void freefilelist(void);
218 void jumpback(int sig
);
220 BOOL
writerefsfound(void);
221 void countrefs(void);
222 void myperror(char *text
);
223 void putmsg(char *msg
);
224 void clearmsg2(void);
225 void putmsg2(char *msg
);
226 void seekline(int line
);
227 void ogsnames(char *file
, char **subsystem
, char **book
);
228 char *pathcomponents(char *path
, int components
);
229 void strtoupper(char *s
);
234 void edit(char *file
, char *linenum
);
237 void findsymbol(void);
239 void findallfcns(void);
240 void findcalledby(void);
241 void findcalling(void);
242 void findassignments(void);
243 char *findgreppat(void);
244 char *findegreppat(char *egreppat
);
246 void findinclude(void);
247 FINDINIT
findinit(void);
248 void findcleanup(void);
249 void initprogress(void);
250 void progress(char *format
, long n1
, long n2
);
252 BOOL
matchrest(void);
253 void getstring(char *s
);
254 char *scanpast(int c
);
255 char *readblock(void);
256 long dbseek(long offset
);
262 void addcmd(int f
, char *s
);
264 HISTORY
*currentcmd(void);
265 HISTORY
*prevcmd(void);
266 HISTORY
*nextcmd(void);
269 void catchint(int sig
);
272 int getaline(char s
[], size_t size
, int firstchar
, BOOL iscaseless
);
273 void askforchar(void);
274 void askforreturn(void);
275 void shellpath(char *out
, int limit
, char *in
);
278 void initsymtab(void);
279 struct keystruct
*lookup(char *ident
);
284 void entercurses(void);
285 void exitcurses(void);
286 void myexit(int sig
) __NORETURN
;
287 void cannotopen(char *file
);
288 void cannotwrite(char *file
);
293 extern void initscanner(char *srcfile
);
294 extern int yylex(void);
295 extern int execute(char *, ...);