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, Version 1.0 only 6 * (the "License"). You may not use this file except in compliance 7 * with the License. 8 * 9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 * or http://www.opensolaris.org/os/licensing. 11 * See the License for the specific language governing permissions 12 * and limitations under the License. 13 * 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 21 */ 22 /* Copyright (c) 1988 AT&T */ 23 /* All Rights Reserved */ 24 25 26 /* 27 * cscope - interactive C symbol cross-reference 28 * 29 * global type, data, and function definitions 30 */ 31 32 /* 33 * Copyright 2004 Sun Microsystems, Inc. All rights reserved. 34 * Use is subject to license terms. 35 */ 36 37 #pragma ident "%Z%%M% %I% %E% SMI" 38 39 #include <ctype.h> /* isalpha, isdigit, etc. */ 40 #include <signal.h> /* SIGINT and SIGQUIT */ 41 #include <stdio.h> /* standard I/O package */ 42 #include <sys/types.h> 43 #include "constants.h" /* misc. constants */ 44 #include "invlib.h" /* inverted index library */ 45 #include "library.h" /* library function return values */ 46 #include "mouse.h" /* mouse interface */ 47 #define SIGTYPE void 48 49 typedef enum { /* boolean data type */ 50 NO, 51 YES 52 } BOOL; 53 54 typedef enum { /* findinit return code */ 55 NOERROR, 56 NOTSYMBOL, 57 REGCMPERROR 58 } FINDINIT; 59 60 typedef struct history { /* command history */ 61 int field; 62 char *text; 63 struct history *previous; 64 struct history *next; 65 } HISTORY; 66 67 typedef enum { /* keyword type */ 68 DECL, /* type declaration */ 69 FLOW, /* control flow (do, if, for, while, switch, etc.) */ 70 MISC /* misc.: sizeof or table placeholder for compression */ 71 } KEYWORD; 72 73 /* digraph data for text compression */ 74 extern char dichar1[]; /* 16 most frequent first chars */ 75 extern char dichar2[]; /* 8 most frequent second chars */ 76 /* using the above as first chars */ 77 extern char dicode1[]; /* digraph first character code */ 78 extern char dicode2[]; /* digraph second character code */ 79 80 /* main.c global data */ 81 extern char *editor, *home, *shell; /* environment variables */ 82 extern BOOL compress; /* compress the characters in the crossref */ 83 extern int cscopedepth; /* cscope invocation nesting depth */ 84 extern char currentdir[]; /* current directory */ 85 extern BOOL dbtruncated; /* database symbols are truncated to 8 chars */ 86 extern char **dbvpdirs; /* directories (including current) in */ 87 /* database view path */ 88 extern int dbvpndirs; /* number of directories in database */ 89 /* view path */ 90 extern int dispcomponents; /* file path components to display */ 91 extern BOOL editallprompt; /* prompt between editing files */ 92 extern int fileargc; /* file argument count */ 93 extern char **fileargv; /* file argument values */ 94 extern int fileversion; /* cross-reference file version */ 95 extern BOOL incurses; /* in curses */ 96 extern INVCONTROL invcontrol; /* inverted file control structure */ 97 extern BOOL invertedindex; /* the database has an inverted index */ 98 extern BOOL isuptodate; /* consider the crossref up-to-date */ 99 extern BOOL linemode; /* use line oriented user interface */ 100 extern char *namefile; /* file of file names */ 101 extern char *newreffile; /* new cross-reference file name */ 102 extern FILE *newrefs; /* new cross-reference */ 103 extern BOOL noacttimeout; /* no activity timeout occurred */ 104 extern BOOL ogs; /* display OGS book and subsystem names */ 105 extern FILE *postings; /* new inverted index postings */ 106 extern char *prependpath; /* prepend path to file names */ 107 extern BOOL returnrequired; /* RETURN required after selection number */ 108 extern int symrefs; /* cross-reference file */ 109 extern char temp1[]; /* temporary file name */ 110 extern char temp2[]; /* temporary file name */ 111 extern long totalterms; /* total inverted index terms */ 112 extern BOOL truncatesyms; /* truncate symbols to 8 characters */ 113 114 /* command.c global data */ 115 extern BOOL caseless; /* ignore letter case when searching */ 116 extern BOOL *change; /* change this line */ 117 extern BOOL changing; /* changing text */ 118 extern char newpat[]; /* new pattern */ 119 extern char pattern[]; /* symbol or text pattern */ 120 121 /* crossref.c global data */ 122 extern long dboffset; /* new database offset */ 123 extern BOOL errorsfound; /* prompt before clearing error messages */ 124 extern long fileindex; /* source file name index */ 125 extern long lineoffset; /* source line database offset */ 126 extern long npostings; /* number of postings */ 127 extern int symbols; /* number of symbols */ 128 129 /* dir.c global data */ 130 extern char **incdirs; /* #include directories */ 131 extern char **srcdirs; /* source directories */ 132 extern char **srcfiles; /* source files */ 133 extern int nincdirs; /* number of #include directories */ 134 extern int nsrcdirs; /* number of source directories */ 135 extern int nsrcfiles; /* number of source files */ 136 extern int msrcfiles; /* maximum number of source files */ 137 138 /* display.c global data */ 139 extern int *displine; /* screen line of displayed reference */ 140 extern int disprefs; /* displayed references */ 141 extern int field; /* input field */ 142 extern unsigned fldcolumn; /* input field column */ 143 extern int mdisprefs; /* maximum displayed references */ 144 extern int selectlen; /* selection number field length */ 145 extern int nextline; /* next line to be shown */ 146 extern int topline; /* top line of page */ 147 extern int bottomline; /* bottom line of page */ 148 extern int totallines; /* total reference lines */ 149 extern FILE *refsfound; /* references found file */ 150 extern FILE *nonglobalrefs; /* non-global references file */ 151 152 /* exec.c global data */ 153 extern pid_t childpid; /* child's process ID */ 154 155 /* find.c global data */ 156 extern char block[]; /* cross-reference file block */ 157 extern int blocklen; /* length of disk block read */ 158 extern char blockmark; /* mark character to be searched for */ 159 extern long blocknumber; /* block number */ 160 extern char *blockp; /* pointer to current character in block */ 161 extern char lastfilepath[]; /* last file that full path was computed for */ 162 163 /* lookup.c global data */ 164 extern struct keystruct { 165 char *text; 166 char delim; 167 KEYWORD type; 168 struct keystruct *next; 169 } keyword[]; 170 171 /* scanner.l global data */ 172 extern int first; /* buffer index for first char of symbol */ 173 extern int last; /* buffer index for last char of symbol */ 174 extern int lineno; /* symbol line number */ 175 extern FILE *yyin; /* input file descriptor */ 176 extern int yyleng; /* input line length */ 177 extern int yylineno; /* input line number */ 178 #if hpux 179 extern unsigned char yytext[]; /* input line text */ 180 #else 181 extern char yytext[]; /* input line text */ 182 #endif 183 184 /* vpinit.c global data */ 185 extern char *argv0; /* command name */ 186 187 /* cscope functions called from more than one function or between files */ 188 /* cgrep.c */ 189 void egrepcaseless(int i); 190 char *egrepinit(char *expression); 191 int egrep(char *f, FILE *o, char *fo); 192 193 /* command.c */ 194 BOOL command(int commandc); 195 void clearprompt(void); 196 BOOL readrefs(char *filename); 197 BOOL changestring(void); 198 void mark(int i); 199 200 /* crossref.c */ 201 void crossref(char *srcfile); 202 void savesymbol(int token); 203 void putfilename(char *srcfile); 204 void putposting(char *term, int type); 205 void putstring(char *s); 206 void warning(char *text); 207 208 /* dir.c */ 209 void sourcedir(char *dirlist); 210 void includedir(char *dirlist); 211 void makefilelist(void); 212 void incfile(char *file, int type); 213 BOOL infilelist(char *file); 214 void addsrcfile(char *path); 215 void freefilelist(void); 216 217 /* display.c */ 218 void dispinit(void); 219 void display(void); 220 void setfield(void); 221 void atfield(void); 222 void jumpback(int sig); 223 BOOL search(void); 224 BOOL writerefsfound(void); 225 void countrefs(void); 226 void myperror(char *text); 227 void putmsg(char *msg); 228 void clearmsg2(void); 229 void putmsg2(char *msg); 230 void seekline(int line); 231 void ogsnames(char *file, char **subsystem, char **book); 232 char *pathcomponents(char *path, int components); 233 void strtoupper(char *s); 234 235 /* edit.c */ 236 void editref(int i); 237 void editall(void); 238 void edit(char *file, char *linenum); 239 240 /* find.c */ 241 void findsymbol(void); 242 void finddef(void); 243 void findallfcns(void); 244 void findcalledby(void); 245 void findcalling(void); 246 void findassignments(void); 247 char *findgreppat(void); 248 char *findegreppat(char *egreppat); 249 void findfile(void); 250 void findinclude(void); 251 FINDINIT findinit(void); 252 void findcleanup(void); 253 void initprogress(void); 254 void progress(char *format, long n1, long n2); 255 BOOL match(void); 256 BOOL matchrest(void); 257 void getstring(char *s); 258 char *scanpast(int c); 259 char *readblock(void); 260 long dbseek(long offset); 261 262 /* help.c */ 263 void help(void); 264 265 /* history.c */ 266 void addcmd(int f, char *s); 267 void resetcmd(void); 268 HISTORY *currentcmd(void); 269 HISTORY *prevcmd(void); 270 HISTORY *nextcmd(void); 271 272 /* input.c */ 273 void catchint(int sig); 274 int ungetch(int c); 275 int mygetch(void); 276 int getline(char s[], size_t size, int firstchar, BOOL iscaseless); 277 void askforchar(void); 278 void askforreturn(void); 279 void shellpath(char *out, int limit, char *in); 280 281 /* lookup.c */ 282 void initsymtab(void); 283 struct keystruct *lookup(char *ident); 284 int hash(char *s); 285 286 /* main.c */ 287 void rebuild(void); 288 void entercurses(void); 289 void exitcurses(void); 290 void myexit(int sig); 291 void cannotopen(char *file); 292 void cannotwrite(char *file); 293 294 /* menu.c */ 295 void initmenu(void); 296 297 extern void initscanner(char *srcfile); 298 extern int yylex(void); 299 extern int execute(char *, ...); 300