1 /* 2 * CDDL HEADER START 3 * 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. 7 * 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. 12 * 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] 18 * 19 * CDDL HEADER END 20 */ 21 22 /* 23 * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved. 24 */ 25 26 /* Copyright (c) 1988 AT&T */ 27 /* All Rights Reserved */ 28 29 /* 30 * cscope - interactive C symbol cross-reference 31 * 32 * global type, data, and function definitions 33 */ 34 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 */ 43 #define SIGTYPE void 44 45 typedef enum { /* boolean data type */ 46 NO, 47 YES 48 } BOOL; 49 50 typedef enum { /* findinit return code */ 51 NOERROR, 52 NOTSYMBOL, 53 REGCMPERROR 54 } FINDINIT; 55 56 typedef struct history { /* command history */ 57 int field; 58 char *text; 59 struct history *previous; 60 struct history *next; 61 } HISTORY; 62 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 */ 67 } KEYWORD; 68 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 */ 75 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 */ 85 /* view path */ 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 */ 109 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 */ 116 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 */ 124 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 */ 133 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 */ 147 148 /* exec.c global data */ 149 extern pid_t childpid; /* child's process ID */ 150 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 */ 158 159 /* lookup.c global data */ 160 extern struct keystruct { 161 char *text; 162 char delim; 163 KEYWORD type; 164 struct keystruct *next; 165 } keyword[]; 166 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 */ 174 #if hpux 175 extern unsigned char yytext[]; /* input line text */ 176 #else 177 extern char yytext[]; /* input line text */ 178 #endif 179 180 /* vpinit.c global data */ 181 extern char *argv0; /* command name */ 182 183 /* cscope functions called from more than one function or between files */ 184 /* cgrep.c */ 185 void egrepcaseless(int i); 186 char *egrepinit(char *expression); 187 int egrep(char *f, FILE *o, char *fo); 188 189 /* command.c */ 190 BOOL command(int commandc); 191 void clearprompt(void); 192 BOOL readrefs(char *filename); 193 BOOL changestring(void); 194 void mark(int i); 195 196 /* crossref.c */ 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); 203 204 /* dir.c */ 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); 212 213 /* display.c */ 214 void dispinit(void); 215 void display(void); 216 void setfield(void); 217 void atfield(void); 218 void jumpback(int sig); 219 BOOL search(void); 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); 230 231 /* edit.c */ 232 void editref(int i); 233 void editall(void); 234 void edit(char *file, char *linenum); 235 236 /* find.c */ 237 void findsymbol(void); 238 void finddef(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); 245 void findfile(void); 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); 251 BOOL match(void); 252 BOOL matchrest(void); 253 void getstring(char *s); 254 char *scanpast(int c); 255 char *readblock(void); 256 long dbseek(long offset); 257 258 /* help.c */ 259 void help(void); 260 261 /* history.c */ 262 void addcmd(int f, char *s); 263 void resetcmd(void); 264 HISTORY *currentcmd(void); 265 HISTORY *prevcmd(void); 266 HISTORY *nextcmd(void); 267 268 /* input.c */ 269 void catchint(int sig); 270 int ungetch(int c); 271 int mygetch(void); 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); 276 277 /* lookup.c */ 278 void initsymtab(void); 279 struct keystruct *lookup(char *ident); 280 int hash(char *s); 281 282 /* main.c */ 283 void rebuild(void); 284 void entercurses(void); 285 void exitcurses(void); 286 void myexit(int sig) __NORETURN; 287 void cannotopen(char *file); 288 void cannotwrite(char *file); 289 290 /* menu.c */ 291 void initmenu(void); 292 293 extern void initscanner(char *srcfile); 294 extern int yylex(void); 295 extern int execute(char *, ...); 296