From: Hans-Bernhard B. <br...@us...> - 2006-04-21 10:45:51
|
Update of /cvsroot/cscope/cscope/src In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24733 Modified Files: alloc.c build.c command.c crossref.c dir.c display.c egrep.y exec.c find.c global.h library.h lookup.c main.c Log Message: Overall signed/unsigned cleanup. Re-formatting to 4-space indentation and no dangling open braces. Index: alloc.c =================================================================== RCS file: /cvsroot/cscope/cscope/src/alloc.c,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -r1.6 -r1.7 *** alloc.c 8 Jan 2004 14:07:20 -0000 1.6 --- alloc.c 21 Apr 2006 10:45:48 -0000 1.7 *************** *** 45,52 **** * succeed more reliably than the defined(__STDC__) one I replaced */ #if STDC_HEADERS ! #include <stdlib.h> ! # else char *calloc(), *malloc(), *realloc(), *strcpy(); ! # endif /* allocate a string */ --- 45,52 ---- * succeed more reliably than the defined(__STDC__) one I replaced */ #if STDC_HEADERS ! # include <stdlib.h> ! #else char *calloc(), *malloc(), *realloc(), *strcpy(); ! #endif /* allocate a string */ *************** *** 58,94 **** } - /* version of malloc that only returns if successful */ void * ! mymalloc(int size) { ! return(alloctest(malloc((unsigned) size))); } - /* version of calloc that only returns if successful */ void * ! mycalloc(int nelem, int size) { ! return(alloctest(calloc((unsigned) nelem, (unsigned) size))); } - /* version of realloc that only returns if successful */ void * ! myrealloc(void *p, int size) { ! return(alloctest(realloc(p, (unsigned) size))); } - /* check for memory allocation failure */ static void * alloctest(void *p) { ! if (p == NULL) { ! postfatal("\n%s: out of storage\n", argv0); ! /* NOTREACHED */ ! } ! return(p); } --- 58,94 ---- } + /* version of malloc that only returns if successful */ void * ! mymalloc(size_t size) { ! return(alloctest(malloc((unsigned) size))); } + /* version of calloc that only returns if successful */ void * ! mycalloc(size_t nelem, size_t size) { ! return(alloctest(calloc((unsigned) nelem, (unsigned) size))); } + /* version of realloc that only returns if successful */ void * ! myrealloc(void *p, size_t size) { ! return(alloctest(realloc(p, (unsigned) size))); } + /* check for memory allocation failure */ static void * alloctest(void *p) { ! if (p == NULL) { ! postfatal("\n%s: out of storage\n", argv0); ! /* NOTREACHED */ ! } ! return(p); } Index: build.c =================================================================== RCS file: /cvsroot/cscope/cscope/src/build.c,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -r1.9 -r1.10 *** build.c 8 Jul 2005 11:16:29 -0000 1.9 --- build.c 21 Apr 2006 10:45:48 -0000 1.10 *************** *** 73,84 **** INVCONTROL invcontrol; /* inverted file control structure */ - /* Local variables: */ static char *newinvname; /* new inverted index file name */ static char *newinvpost; /* new inverted index postings file name */ static long traileroffset; /* file trailer offset */ - /* Internal prototypes: */ [...1238 lines suppressed...] ! unlink(old); ! if (rename(new, old) == -1) { ! myperror("cscope"); ! postfatal("cscope: cannot rename file %s to file %s\n", ! new, old); ! /* NOTREACHED */ ! } } + /* process the #included file in the old database */ static void putinclude(char *s) { ! dbputc(INCLUDE); ! skiprefchar(); ! putstring(s); ! incfile(s + 1, s); } Index: command.c =================================================================== RCS file: /cvsroot/cscope/cscope/src/command.c,v retrieving revision 1.29 retrieving revision 1.30 diff -C2 -r1.29 -r1.30 *** command.c 8 Jul 2005 11:00:20 -0000 1.29 --- command.c 21 Apr 2006 10:45:48 -0000 1.30 *************** *** 50,54 **** int selecting; ! int curdispline = 0; BOOL caseless; /* ignore letter case when searching */ --- 50,54 ---- int selecting; ! unsigned int curdispline = 0; [...1704 lines suppressed...] + + /* restrict the width of displayed columns */ + /* HBB FIXME 20060419: magic number alert! */ + i = (COLS - 5) / 3; + if (ogs == YES) { + i = (COLS - 7) / 5; + } + if (filelen > i && i > 4) { + filelen = i; + } + if (subsystemlen > i && i > 9) { + subsystemlen = i; + } + if (booklen > i && i > 4) { + booklen = i; + } + if (fcnlen > i && i > 8) { + fcnlen = i; + } } Index: crossref.c =================================================================== RCS file: /cvsroot/cscope/cscope/src/crossref.c,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -r1.12 -r1.13 *** crossref.c 29 Apr 2003 14:08:45 -0000 1.12 --- crossref.c 21 Apr 2006 10:45:48 -0000 1.13 *************** *** 69,84 **** int nsrcoffset; /* number of file name database offsets */ long *srcoffset; /* source file name database offsets */ ! int symbols; /* number of symbols */ static char *filename; /* file name for warning messages */ static long fcnoffset; /* function name database offset */ static long macrooffset; /* macro name database offset */ ! static int msymbols = SYMBOLINC; /* maximum number of symbols */ struct symbol { /* symbol data */ ! int type; /* type */ ! int first; /* index of first character in text */ ! int last; /* index of last+1 character in text */ ! int length; /* symbol length */ ! int fcn_level; /* function level of the symbol */ }; static struct symbol *symbol; --- 69,85 ---- int nsrcoffset; /* number of file name database offsets */ long *srcoffset; /* source file name database offsets */ ! unsigned long symbols; /* number of symbols */ static char *filename; /* file name for warning messages */ static long fcnoffset; /* function name database offset */ static long macrooffset; /* macro name database offset */ ! static unsigned long msymbols = SYMBOLINC; /* maximum number of symbols */ ! struct symbol { /* symbol data */ ! int type; /* type */ ! unsigned int first; /* index of first character in text */ ! unsigned int last; /* index of last+1 character in text */ ! unsigned int length; /* symbol length */ ! unsigned int fcn_level; /* function level of the symbol */ }; static struct symbol *symbol; *************** *** 90,191 **** crossref(char *srcfile) { ! int i; ! int length; /* symbol length */ ! int entry_no; /* function level of the symbol */ ! int token; /* current token */ ! struct stat st; ! ! if (! ((stat(srcfile, &st) == 0) ! && S_ISREG(st.st_mode))) { ! cannotopen(srcfile); ! errorsfound = YES; ! return; ! } ! entry_no = 0; ! /* open the source file */ ! if ((yyin = myfopen(srcfile, "r")) == NULL) { ! cannotopen(srcfile); ! errorsfound = YES; ! return; ! } ! filename = srcfile; /* save the file name for warning messages */ ! putfilename(srcfile); /* output the file name */ ! dbputc('\n'); ! dbputc('\n'); ! ! /* read the source file */ ! initscanner(srcfile); ! fcnoffset = macrooffset = 0; ! symbols = 0; ! if (symbol == NULL) { ! symbol = mymalloc(msymbols * sizeof(struct symbol)); ! } ! for (;;) { ! /* get the next token */ ! switch (token = yylex()) { ! default: ! /* if requested, truncate C symbols */ ! length = last - first; ! if (trun_syms == YES && length > 8 && ! token != INCLUDE && token != NEWFILE) { ! length = 8; ! last = first + 8; ! } ! /* see if the token has a symbol */ ! if (length == 0) { ! savesymbol(token, entry_no); ! break; ! } ! /* update entry_no if see function entry */ ! if (token == FCNDEF) { ! entry_no++; ! } ! /* see if the symbol is already in the list */ ! for (i = 0; i < symbols; ++i) { ! if (length == symbol[i].length ! && strncmp(my_yytext + first, ! my_yytext + symbol[i].first, ! length) == 0 ! && entry_no == symbol[i].fcn_level ! && token == symbol[i].type ! ) { /* could be a::a() */ ! break; ! } ! } ! if (i == symbols) { /* if not already in list */ ! savesymbol(token, entry_no); ! } ! break; ! case NEWLINE: /* end of line containing symbols */ ! entry_no = 0; /* reset entry_no for each line */ #ifdef USING_LEX ! --yyleng; /* remove the newline */ #endif ! putcrossref(); /* output the symbols and source line */ ! lineno = myylineno; /* save the symbol line number */ #ifndef USING_LEX ! /* HBB 20010425: replaced yyleng-- by this chunk: */ ! if (my_yytext) ! *my_yytext = '\0'; ! my_yyleng = 0; #endif ! break; ! case LEXEOF: /* end of file; last line may not have \n */ /* if there were symbols, output them and the source line */ ! if (symbols > 0) { ! putcrossref(); ! } ! (void) fclose(yyin); /* close the source file */ ! ! /* output the leading tab expected by the next call */ ! dbputc('\t'); ! return; ! } } } --- 91,192 ---- crossref(char *srcfile) { ! unsigned int i; ! unsigned int length; /* symbol length */ ! unsigned int entry_no; /* function level of the symbol */ ! int token; /* current token */ ! struct stat st; ! ! if (! ((stat(srcfile, &st) == 0) ! && S_ISREG(st.st_mode))) { ! cannotopen(srcfile); ! errorsfound = YES; ! return; ! } ! entry_no = 0; ! /* open the source file */ ! if ((yyin = myfopen(srcfile, "r")) == NULL) { ! cannotopen(srcfile); ! errorsfound = YES; ! return; ! } ! filename = srcfile; /* save the file name for warning messages */ ! putfilename(srcfile); /* output the file name */ ! dbputc('\n'); ! dbputc('\n'); ! ! /* read the source file */ ! initscanner(srcfile); ! fcnoffset = macrooffset = 0; ! symbols = 0; ! if (symbol == NULL) { ! symbol = mymalloc(msymbols * sizeof(struct symbol)); ! } ! for (;;) { ! /* get the next token */ ! switch (token = yylex()) { ! default: ! /* if requested, truncate C symbols */ ! length = last - first; ! if (trun_syms == YES && length > 8 && ! token != INCLUDE && token != NEWFILE) { ! length = 8; ! last = first + 8; ! } ! /* see if the token has a symbol */ ! if (length == 0) { ! savesymbol(token, entry_no); ! break; ! } ! /* update entry_no if see function entry */ ! if (token == FCNDEF) { ! entry_no++; ! } ! /* see if the symbol is already in the list */ ! for (i = 0; i < symbols; ++i) { ! if (length == symbol[i].length ! && strncmp(my_yytext + first, ! my_yytext + symbol[i].first, ! length) == 0 ! && entry_no == symbol[i].fcn_level ! && token == symbol[i].type ! ) { /* could be a::a() */ ! break; ! } ! } ! if (i == symbols) { /* if not already in list */ ! savesymbol(token, entry_no); ! } ! break; ! case NEWLINE: /* end of line containing symbols */ ! entry_no = 0; /* reset entry_no for each line */ #ifdef USING_LEX ! --yyleng; /* remove the newline */ #endif ! putcrossref(); /* output the symbols and source line */ ! lineno = myylineno; /* save the symbol line number */ #ifndef USING_LEX ! /* HBB 20010425: replaced yyleng-- by this chunk: */ ! if (my_yytext) ! *my_yytext = '\0'; ! my_yyleng = 0; #endif ! break; ! case LEXEOF: /* end of file; last line may not have \n */ /* if there were symbols, output them and the source line */ ! if (symbols > 0) { ! putcrossref(); ! } ! (void) fclose(yyin); /* close the source file */ ! ! /* output the leading tab expected by the next call */ ! dbputc('\t'); ! return; } + } } *************** *** 195,211 **** savesymbol(int token, int num) { ! /* make sure there is room for the symbol */ ! if (symbols == msymbols) { ! msymbols += SYMBOLINC; ! symbol = myrealloc(symbol, ! msymbols * sizeof(struct symbol)); ! } ! /* save the symbol */ ! symbol[symbols].type = token; ! symbol[symbols].first = first; ! symbol[symbols].last = last; ! symbol[symbols].length = last - first; ! symbol[symbols].fcn_level = num; ! ++symbols; } --- 196,211 ---- savesymbol(int token, int num) { ! /* make sure there is room for the symbol */ ! if (symbols == msymbols) { ! msymbols += SYMBOLINC; ! symbol = myrealloc(symbol, msymbols * sizeof(struct symbol)); ! } ! /* save the symbol */ ! symbol[symbols].type = token; ! symbol[symbols].first = first; ! symbol[symbols].last = last; ! symbol[symbols].length = last - first; ! symbol[symbols].fcn_level = num; ! ++symbols; } *************** *** 234,377 **** putcrossref(void) { ! int i, j; ! unsigned char c; ! BOOL blank; /* blank indicator */ ! int symput = 0; /* symbols output */ ! int type; ! ! /* output the source line */ ! lineoffset = dboffset; ! dboffset += fprintf(newrefs, "%d ", lineno); #ifdef PRINTF_RETVAL_BROKEN ! dboffset = ftell(newrefs); /* fprintf doesn't return chars written */ #endif ! /* HBB 20010425: added this line: */ ! my_yytext[my_yyleng] = '\0'; ! blank = NO; ! for (i = 0; i < my_yyleng; ++i) { ! /* change a tab to a blank and compress blanks */ ! if ((c = my_yytext[i]) == ' ' || c == '\t') { ! blank = YES; ! } ! /* look for the start of a symbol */ ! else if (symput < symbols && i == symbol[symput].first) { ! ! /* check for compressed blanks */ ! if (blank == YES) { ! blank = NO; ! dbputc(' '); ! } ! dbputc('\n'); /* symbols start on a new line */ ! /* output any symbol type */ ! if ((type = symbol[symput].type) != IDENT) { ! dbputc('\t'); ! dbputc(type); ! } ! else { ! type = ' '; ! } ! /* output the symbol */ ! j = symbol[symput].last; ! c = my_yytext[j]; ! my_yytext[j] = '\0'; ! if (invertedindex == YES) { ! putposting(my_yytext + i, type); ! } ! writestring(my_yytext + i); ! dbputc('\n'); ! my_yytext[j] = c; ! i = j - 1; ! ++symput; } ! else { ! /* HBB: try to save some time by early-out handling of ! * non-compressed mode */ ! if (compress == NO) { ! if (blank == YES) { ! dbputc(' '); ! blank = NO; ! } ! j = i + strcspn(my_yytext+i, "\t "); ! if (symput < symbols ! && j >= symbol[symput].first) ! j = symbol[symput].first; ! c = my_yytext[j]; ! my_yytext[j] = '\0'; ! writestring(my_yytext + i); ! my_yytext[j] = c; ! i = j - 1; ! /* finished this 'i', continue with the blank */ ! continue; ! } ! ! /* check for compressed blanks */ ! if (blank == YES) { ! if (dicode2[c]) { ! c = DICODE_COMPRESS(' ', c); ! } ! else { ! dbputc(' '); ! } ! } ! /* compress digraphs */ ! else if (IS_A_DICODE(c, my_yytext[i + 1]) ! && symput < symbols ! && i + 1 != symbol[symput].first ! ) { ! c = DICODE_COMPRESS(c, my_yytext[i + 1]); ! ++i; ! } ! dbputc((int) c); ! blank = NO; ! /* skip compressed characters */ ! if (c < ' ') { ! ++i; ! /* skip blanks before a preprocesor keyword */ ! /* note: don't use isspace() because \f and \v ! are used for keywords */ ! while ((j = my_yytext[i]) == ' ' || j == '\t') { ! ++i; ! } ! /* skip the rest of the keyword */ ! while (isalpha((unsigned char)my_yytext[i])) { ! ++i; ! } ! /* skip space after certain keywords */ ! if (keyword[c].delim != '\0') { ! while ((j = my_yytext[i]) == ' ' || j == '\t') { ! ++i; ! } ! } ! /* skip a '(' after certain keywords */ ! if (keyword[c].delim == '(' ! && my_yytext[i] == '(') { ! ++i; ! } ! --i; /* compensate for ++i in for() */ ! } /* if compressed char */ ! } /* else: not a symbol */ ! } /* for(i) */ ! ! /* ignore trailing blanks */ ! dbputc('\n'); dbputc('\n'); ! ! /* output any #define end marker */ ! /* note: must not be part of #define so putsource() doesn't discard it ! so findcalledbysub() can find it and return */ ! if (symput < symbols && symbol[symput].type == DEFINEEND) { ! dbputc('\t'); ! dbputc(DEFINEEND); ! dbputc('\n'); ! dbputc('\n'); /* mark beginning of next source line */ ! macrooffset = 0; ! } ! symbols = 0; } --- 234,371 ---- putcrossref(void) { ! unsigned int i, j; ! unsigned char c; ! BOOL blank; /* blank indicator */ ! unsigned int symput = 0; /* symbols output */ ! int type; ! ! /* output the source line */ ! lineoffset = dboffset; ! dboffset += fprintf(newrefs, "%d ", lineno); #ifdef PRINTF_RETVAL_BROKEN ! dboffset = ftell(newrefs); /* fprintf doesn't return chars written */ #endif ! /* HBB 20010425: added this line: */ ! my_yytext[my_yyleng] = '\0'; ! blank = NO; ! for (i = 0; i < my_yyleng; ++i) { ! /* change a tab to a blank and compress blanks */ ! if ((c = my_yytext[i]) == ' ' || c == '\t') { ! blank = YES; ! } else if (symput < symbols && i == symbol[symput].first) { ! /* look for the start of a symbol */ ! ! /* check for compressed blanks */ ! if (blank == YES) { ! blank = NO; ! dbputc(' '); ! } ! dbputc('\n'); /* symbols start on a new line */ ! /* output any symbol type */ ! if ((type = symbol[symput].type) != IDENT) { ! dbputc('\t'); ! dbputc(type); ! } else { ! type = ' '; ! } ! /* output the symbol */ ! j = symbol[symput].last; ! c = my_yytext[j]; ! my_yytext[j] = '\0'; ! if (invertedindex == YES) { ! putposting(my_yytext + i, type); ! } ! writestring(my_yytext + i); ! dbputc('\n'); ! my_yytext[j] = c; ! i = j - 1; ! ++symput; ! } else { ! /* HBB: try to save some time by early-out handling of ! * non-compressed mode */ ! if (compress == NO) { ! if (blank == YES) { ! dbputc(' '); ! blank = NO; ! } ! j = i + strcspn(my_yytext+i, "\t "); ! if (symput < symbols ! && j >= symbol[symput].first) ! j = symbol[symput].first; ! c = my_yytext[j]; ! my_yytext[j] = '\0'; ! writestring(my_yytext + i); ! my_yytext[j] = c; ! i = j - 1; ! /* finished this 'i', continue with the blank */ ! continue; ! } ! ! /* check for compressed blanks */ ! if (blank == YES) { ! if (dicode2[c]) { ! c = DICODE_COMPRESS(' ', c); ! } else { ! dbputc(' '); } ! } else if (IS_A_DICODE(c, my_yytext[i + 1]) ! && symput < symbols ! && i + 1 != symbol[symput].first) { ! /* compress digraphs */ ! c = DICODE_COMPRESS(c, my_yytext[i + 1]); ! ++i; ! } ! dbputc((int) c); ! blank = NO; ! /* skip compressed characters */ ! if (c < ' ') { ! ++i; ! /* skip blanks before a preprocesor keyword */ ! /* note: don't use isspace() because \f and \v ! are used for keywords */ ! while ((j = my_yytext[i]) == ' ' || j == '\t') { ! ++i; ! } ! /* skip the rest of the keyword */ ! while (isalpha((unsigned char)my_yytext[i])) { ! ++i; ! } ! /* skip space after certain keywords */ ! if (keyword[c].delim != '\0') { ! while ((j = my_yytext[i]) == ' ' || j == '\t') { ! ++i; ! } ! } ! /* skip a '(' after certain keywords */ ! if (keyword[c].delim == '(' ! && my_yytext[i] == '(') { ! ++i; ! } ! --i; /* compensate for ++i in for() */ ! } /* if compressed char */ ! } /* else: not a symbol */ ! } /* for(i) */ ! ! /* ignore trailing blanks */ ! dbputc('\n'); ! dbputc('\n'); ! ! /* output any #define end marker */ ! /* note: must not be part of #define so putsource() doesn't discard it ! so findcalledbysub() can find it and return */ ! if (symput < symbols && symbol[symput].type == DEFINEEND) { ! dbputc('\t'); ! dbputc(DEFINEEND); dbputc('\n'); ! dbputc('\n'); /* mark beginning of next source line */ ! macrooffset = 0; ! } ! symbols = 0; } Index: dir.c =================================================================== RCS file: /cvsroot/cscope/cscope/src/dir.c,v retrieving revision 1.25 retrieving revision 1.26 diff -C2 -r1.25 -r1.26 *** dir.c 19 Apr 2006 15:20:21 -0000 1.25 --- dir.c 21 Apr 2006 10:45:48 -0000 1.26 *************** *** 56,68 **** char **srcdirs; /* source directories */ char **srcfiles; /* source files */ ! int nincdirs; /* number of #include directories */ ! int nsrcdirs; /* number of source directories */ ! int nsrcfiles; /* number of source files */ ! int msrcfiles = SRCINC; /* maximum number of source files */ static char **incnames; /* #include directory names without view pathing */ ! static int mincdirs = DIRINC; /* maximum number of #include directories */ ! static int msrcdirs; /* maximum number of source directories */ ! static int nvpsrcdirs; /* number of view path source directories */ static struct listitem { /* source file names without view pathing */ --- 56,68 ---- char **srcdirs; /* source directories */ char **srcfiles; /* source files */ ! unsigned long nincdirs; /* number of #include directories */ ! unsigned long nsrcdirs; /* number of source directories */ ! unsigned long nsrcfiles; /* number of source files */ ! unsigned long msrcfiles = SRCINC; /* maximum number of source files */ static char **incnames; /* #include directory names without view pathing */ ! static unsigned long mincdirs = DIRINC; /* maximum number of #include directories */ ! static unsigned long msrcdirs; /* maximum number of source directories */ ! static unsigned long nvpsrcdirs; /* number of view path source directories */ static struct listitem { /* source file names without view pathing */ *************** *** 92,97 **** /* get the current directory name */ if (getcwd(currentdir, PATHLEN) == NULL) { ! (void) fprintf(stderr, "cscope: warning: cannot get current directory name\n"); ! (void) strcpy(currentdir, "<unknown>"); } /* see if there is a view path and this directory is in it */ --- 92,97 ---- /* get the current directory name */ if (getcwd(currentdir, PATHLEN) == NULL) { ! fprintf(stderr, "cscope: warning: cannot get current directory name\n"); ! strcpy(currentdir, "<unknown>"); } /* see if there is a view path and this directory is in it */ *************** *** 118,150 **** sourcedir(char *dirlist) { ! char path[PATHLEN + 1]; ! char *dir; ! int i; ! makevpsrcdirs(); /* make the view source directory list */ ! dirlist = stralloc(dirlist); /* don't change environment variable text */ ! /* parse the directory list */ ! dir = strtok(dirlist, DIRSEPS); ! while (dir != NULL) { ! int dir_len = strlen(dir); ! ! addsrcdir(dir); ! ! /* if it isn't a full path name and there is a ! multi-directory view path */ ! if (*dirlist != '/' && vpndirs > 1) { ! /* compute its path from higher view path source dirs */ ! for (i = 1; i < nvpsrcdirs; ++i) { ! (void) sprintf(path, "%.*s/%s", ! PATHLEN - 2 - dir_len, ! srcdirs[i], dir); ! addsrcdir(path); ! } ! } ! dir = strtok(NULL, DIRSEPS); ! } ! free(dirlist); /* HBB 20000421: avoid memory leaks */ } --- 118,150 ---- sourcedir(char *dirlist) { ! char path[PATHLEN + 1]; ! char *dir; ! unsigned int i; ! makevpsrcdirs(); /* make the view source directory list */ ! dirlist = stralloc(dirlist); /* don't change environment variable text */ ! /* parse the directory list */ ! dir = strtok(dirlist, DIRSEPS); ! while (dir != NULL) { ! int dir_len = strlen(dir); ! ! addsrcdir(dir); ! ! /* if it isn't a full path name and there is a ! multi-directory view path */ ! if (*dirlist != '/' && vpndirs > 1) { ! /* compute its path from higher view path source dirs */ ! for (i = 1; i < nvpsrcdirs; ++i) { ! sprintf(path, "%.*s/%s", ! PATHLEN - 2 - dir_len, ! srcdirs[i], dir); ! addsrcdir(path); ! } ! } ! dir = strtok(NULL, DIRSEPS); ! } ! free(dirlist); /* HBB 20000421: avoid memory leaks */ } *************** *** 186,218 **** includedir(char *dirlist) { ! char path[PATHLEN + 1]; ! char *dir; ! int i; ! makevpsrcdirs(); /* make the view source directory list */ ! dirlist = stralloc(dirlist); /* don't change environment variable text */ ! /* parse the directory list */ ! dir = strtok(dirlist, DIRSEPS); ! while (dir != NULL) { ! int dir_len = strlen(dir); ! ! addincdir(dir, dir); ! ! /* if it isn't a full path name and there is a ! multi-directory view path */ ! if (*dirlist != '/' && vpndirs > 1) { ! /* compute its path from higher view path source dirs */ ! for (i = 1; i < nvpsrcdirs; ++i) { ! (void) sprintf(path, "%.*s/%s", ! PATHLEN - 2 - dir_len, ! srcdirs[i], dir); ! addincdir(dir, path); ! } ! } ! dir = strtok(NULL, DIRSEPS); ! } ! free(dirlist); /* HBB 20000421: avoid leaks */ } --- 186,218 ---- includedir(char *dirlist) { ! char path[PATHLEN + 1]; ! char *dir; ! unsigned int i; ! makevpsrcdirs(); /* make the view source directory list */ ! dirlist = stralloc(dirlist); /* don't change environment variable text */ ! /* parse the directory list */ ! dir = strtok(dirlist, DIRSEPS); ! while (dir != NULL) { ! size_t dir_len = strlen(dir); ! ! addincdir(dir, dir); ! ! /* if it isn't a full path name and there is a ! multi-directory view path */ ! if (*dirlist != '/' && vpndirs > 1) { ! /* compute its path from higher view path source dirs */ ! for (i = 1; i < nvpsrcdirs; ++i) { ! sprintf(path, "%.*s/%s", ! PATHLEN - 2 - dir_len, ! srcdirs[i], dir); ! addincdir(dir, path); ! } ! } ! dir = strtok(NULL, DIRSEPS); ! } ! free(dirlist); /* HBB 20000421: avoid leaks */ } *************** *** 263,372 **** makefilelist(void) { ! static BOOL firstbuild = YES; /* first time through */ ! FILE *names; /* name file pointer */ ! char dir[PATHLEN + 1]; ! char path[PATHLEN + 1]; ! char line[PATHLEN * 10]; ! char *file; ! char *s; ! int i; ! makevpsrcdirs(); /* make the view source directory list */ ! /* if -i was NOT given and there are source file arguments */ ! if (namefile == NULL && fileargc > 0) { ! /* put them in a list that can be expanded */ ! for (i = 0; i < fileargc; ++i) { ! file = fileargv[i]; ! if (infilelist(file) == NO) { ! if ((s = inviewpath(file)) != NULL) { ! addsrcfile(s); ! } else { ! (void) fprintf(stderr, "cscope: cannot find file %s\n", ! file); ! errorsfound = YES; ! } ! } } ! return; ! } ! ! /* see if a file name file exists */ ! if (namefile == NULL && vpaccess(NAMEFILE, READ) == 0) { ! namefile = NAMEFILE; } ! if (namefile == NULL) { ! /* No namefile --> make a list of all the source files ! * in the directories */ ! for (i = 0; i < nsrcdirs; ++i) { ! scan_dir(srcdirs[i], recurse_dir); ! } ! return; } ! /* Came here --> there is a file of source file names */ ! if (strcmp(namefile, "-") == 0) ! names = stdin; ! else if ((names = vpfopen(namefile, "r")) == NULL) { ! cannotopen(namefile); ! myexit(1); ! } ! ! /* get the names in the file */ ! while (fgets(line, 10*PATHLEN, names) != NULL) { ! char *point_in_line = line + (strlen(line) - 1); ! size_t length_of_name = 0; ! int unfinished_option = 0; ! BOOL done = NO; ! ! /* Kill away \n left at end of fgets()'d string: */ ! if (*point_in_line == '\n') ! *point_in_line = '\0'; ! /* Parse whitespace-terminated strings in line: */ ! point_in_line = line; ! while (sscanf(point_in_line, "%s", path) == 1) { ! /* Have to store this length --- inviewpath() will ! * modify path, later! */ ! length_of_name = strlen(path); ! if (*path == '-') { /* if an option */ ! if (unfinished_option) { ! /* Can't have another option directly after an ! * -I or -p option with no name after it! */ ! (void) fprintf(stderr, "\ cscope: Syntax error in namelist file %s: unfinished -I or -p option\n", ! namefile); ! unfinished_option = 0; ! } ! i = path[1]; ! switch (i) { ! case 'c': /* ASCII characters only in crossref */ ! compress = NO; ! break; ! case 'k': /* ignore DFLT_INCDIR */ ! kernelmode = YES; ! break; ! case 'q': /* quick search */ ! invertedindex = YES; ! break; ! case 'T': /* truncate symbols to 8 characters */ ! trun_syms = YES; ! break; ! case 'I': /* #include file directory */ ! case 'p': /* file path components to display */ ! s = path + 2; /* for "-Ipath" */ ! if (*s == '\0') { /* if "-I path" */ ! unfinished_option = i; ! break; ! } ! ! /* this code block used several times in here ! * --> make it a macro to avoid unnecessary ! * duplication */ #define HANDLE_OPTION_ARGUMENT(i, s) \ switch (i) { \ --- 263,372 ---- makefilelist(void) { ! static BOOL firstbuild = YES; /* first time through */ ! FILE *names; /* name file pointer */ ! char dir[PATHLEN + 1]; ! char path[PATHLEN + 1]; ! char line[PATHLEN * 10]; ! char *file; ! char *s; ! unsigned int i; ! makevpsrcdirs(); /* make the view source directory list */ ! /* if -i was NOT given and there are source file arguments */ ! if (namefile == NULL && fileargc > 0) { ! /* put them in a list that can be expanded */ ! for (i = 0; i < fileargc; ++i) { ! file = fileargv[i]; ! if (infilelist(file) == NO) { ! if ((s = inviewpath(file)) != NULL) { ! addsrcfile(s); ! } else { ! fprintf(stderr, "cscope: cannot find file %s\n", ! file); ! errorsfound = YES; } ! } } + return; + } ! /* see if a file name file exists */ ! if (namefile == NULL && vpaccess(NAMEFILE, READ) == 0) { ! namefile = NAMEFILE; ! } ! ! if (namefile == NULL) { ! /* No namefile --> make a list of all the source files ! * in the directories */ ! for (i = 0; i < nsrcdirs; ++i) { ! scan_dir(srcdirs[i], recurse_dir); } + return; + } ! /* Came here --> there is a file of source file names */ ! if (strcmp(namefile, "-") == 0) ! names = stdin; ! else if ((names = vpfopen(namefile, "r")) == NULL) { ! cannotopen(namefile); ! myexit(1); ! } ! ! /* get the names in the file */ ! while (fgets(line, 10*PATHLEN, names) != NULL) { ! char *point_in_line = line + (strlen(line) - 1); ! size_t length_of_name = 0; ! int unfinished_option = 0; ! BOOL done = NO; ! ! /* Kill away \n left at end of fgets()'d string: */ ! if (*point_in_line == '\n') ! *point_in_line = '\0'; ! /* Parse whitespace-terminated strings in line: */ ! point_in_line = line; ! while (sscanf(point_in_line, "%s", path) == 1) { ! /* Have to store this length --- inviewpath() will ! * modify path, later! */ ! length_of_name = strlen(path); ! if (*path == '-') { /* if an option */ ! if (unfinished_option) { ! /* Can't have another option directly after an ! * -I or -p option with no name after it! */ ! fprintf(stderr, "\ cscope: Syntax error in namelist file %s: unfinished -I or -p option\n", ! namefile); ! unfinished_option = 0; ! } ! i = path[1]; ! switch (i) { ! case 'c': /* ASCII characters only in crossref */ ! compress = NO; ! break; ! case 'k': /* ignore DFLT_INCDIR */ ! kernelmode = YES; ! break; ! case 'q': /* quick search */ ! invertedindex = YES; ! break; ! case 'T': /* truncate symbols to 8 characters */ ! trun_syms = YES; ! break; ! case 'I': /* #include file directory */ ! case 'p': /* file path components to display */ ! s = path + 2; /* for "-Ipath" */ ! if (*s == '\0') { /* if "-I path" */ ! unfinished_option = i; ! break; ! } ! ! /* this code block used several times in here ! * --> make it a macro to avoid unnecessary ! * duplication */ #define HANDLE_OPTION_ARGUMENT(i, s) \ switch (i) { \ *************** *** 382,386 **** case 'p': /* file path components to display */ \ if (*(s) < '0' || *(s) > '9') { \ ! (void) fprintf(stderr, \ "cscope: -p option in file %s: missing or invalid numeric value\n", \ namefile); \ --- 382,386 ---- case 'p': /* file path components to display */ \ if (*(s) < '0' || *(s) > '9') { \ ! fprintf(stderr, \ "cscope: -p option in file %s: missing or invalid numeric value\n", \ namefile); \ *************** *** 394,474 **** } /* switch(i) */ ! /* ... and now call it for the first time */ ! HANDLE_OPTION_ARGUMENT(i, s) ! break; ! default: ! (void) fprintf(stderr, "cscope: only -I, -c, -k, -p, and -T options can be in file %s\n", ! namefile); ! } /* switch(i) */ ! } /* if('-') */ ! else if (*path == '"') { ! /* handle quoted filenames... */ ! size_t in = 1, out = 0; ! char *newpath = mymalloc(PATHLEN + 1); ! ! while (in < PATHLEN && point_in_line[in] != '\0') { ! if (point_in_line[in] == '"') { ! newpath[out] = '\0'; ! /* Tell outer loop to skip over this entire quoted string */ ! length_of_name = in + 1; ! break; /* found end of quoted string */ ! } else if (point_in_line[in] == '\\' ! && in < PATHLEN - 1 ! && (point_in_line[in + 1]== '"' ! || point_in_line[in + 1] == '\\')) { ! /* un-escape \" or \\ sequence */ ! newpath[out++] = point_in_line[in + 1]; ! in += 2; ! } else { ! newpath[out++] = point_in_line[in++]; ! } ! } /* while(in) */ ! if (in >= PATHLEN) { /* safeguard against almost-overflow */ ! newpath[out]='\0'; ! } ! ! /* If an -I or -p arguments was missing before, ! * treat this name as the argument: */ ! HANDLE_OPTION_ARGUMENT(unfinished_option, newpath); ! if (! done) { ! if ((s = inviewpath(newpath)) != NULL) { ! addsrcfile(s); ! } else { ! (void) fprintf(stderr, ! "cscope: cannot find file %s\n", ! newpath); ! errorsfound = YES; ! } ! } ! } /* if(quoted name) */ ! else { ! /* ... so this is an ordinary file name, unquoted */ ! ! /* If an -I or -p arguments was missing before, ! * treat this name as the argument: */ ! HANDLE_OPTION_ARGUMENT(unfinished_option, path); ! if (!done) { ! if ((s = inviewpath(path)) != NULL) { ! addsrcfile(s); ! } else { ! (void) fprintf(stderr, "cscope: cannot find file %s\n", ! path); ! errorsfound = YES; ! } ! } ! } /* else(ordinary name) */ ! ! point_in_line += length_of_name; ! while (isspace((unsigned char) *point_in_line)) ! point_in_line ++; ! } /* while(sscanf(line)) */ ! } /* while(fgets(line)) */ ! ! if (names == stdin) ! clearerr(stdin); ! else ! (void) fclose(names); ! firstbuild = NO; ! return; } --- 394,474 ---- } /* switch(i) */ ! /* ... and now call it for the first time */ ! HANDLE_OPTION_ARGUMENT(i, s) ! break; ! default: ! fprintf(stderr, "cscope: only -I, -c, -k, -p, and -T options can be in file %s\n", ! namefile); ! } /* switch(i) */ ! } /* if('-') */ ! else if (*path == '"') { ! /* handle quoted filenames... */ ! size_t in = 1, out = 0; ! char *newpath = mymalloc(PATHLEN + 1); ! ! while (in < PATHLEN && point_in_line[in] != '\0') { ! if (point_in_line[in] == '"') { ! newpath[out] = '\0'; ! /* Tell outer loop to skip over this entire quoted string */ ! length_of_name = in + 1; ! break; /* found end of quoted string */ ! } else if (point_in_line[in] == '\\' ! && in < PATHLEN - 1 ! && (point_in_line[in + 1]== '"' ! || point_in_line[in + 1] == '\\')) { ! /* un-escape \" or \\ sequence */ ! newpath[out++] = point_in_line[in + 1]; ! in += 2; ! } else { ! newpath[out++] = point_in_line[in++]; ! } ! } /* while(in) */ ! if (in >= PATHLEN) { /* safeguard against almost-overflow */ ! newpath[out]='\0'; ! } ! ! /* If an -I or -p arguments was missing before, ! * treat this name as the argument: */ ! HANDLE_OPTION_ARGUMENT(unfinished_option, newpath); ! if (! done) { ! if ((s = inviewpath(newpath)) != NULL) { ! addsrcfile(s); ! } else { ! fprintf(stderr, ! "cscope: cannot find file %s\n", ! newpath); ! errorsfound = YES; ! } ! } ! } /* if(quoted name) */ ! else { ! /* ... so this is an ordinary file name, unquoted */ ! ! /* If an -I or -p arguments was missing before, ! * treat this name as the argument: */ ! HANDLE_OPTION_ARGUMENT(unfinished_option, path); ! if (!done) { ! if ((s = inviewpath(path)) != NULL) { ! addsrcfile(s); ! } else { ! fprintf(stderr, "cscope: cannot find file %s\n", ! path); ! errorsfound = YES; ! } ! } ! } /* else(ordinary name) */ ! ! point_in_line += length_of_name; ! while (isspace((unsigned char) *point_in_line)) ! point_in_line ++; ! } /* while(sscanf(line)) */ ! } /* while(fgets(line)) */ ! ! if (names == stdin) ! clearerr(stdin); ! else ! fclose(names); ! firstbuild = NO; ! return; } *************** *** 515,520 **** } - /* see if this is a source file */ static BOOL issrcfile(char *path) --- 515,520 ---- } + /* see if this is a source file */ static BOOL issrcfile(char *path) *************** *** 580,638 **** } - /* add an include file to the source file list */ void incfile(char *file, char *type) { ! char name[PATHLEN + 1]; ! char path[PATHLEN + 1]; ! char *s; ! int i; ! ! /* see if the file is already in the source file list */ ! if (infilelist(file) == YES) { ! return; ! } ! /* look in current directory if it was #include "file" */ ! if (type[0] == '"' && (s = inviewpath(file)) != NULL) { ! addsrcfile(s); ! } else { ! int file_len = strlen(file); ! /* search for the file in the #include directory list */ ! for (i = 0; i < nincdirs; ++i) { ! ! /* don't include the file from two directories */ ! (void) sprintf(name, "%.*s/%s", ! PATHLEN - 2 - file_len, incnames[i], ! file); ! if (infilelist(name) == YES) { ! break; ! } ! /* make sure it exists and is readable */ ! (void) sprintf(path, "%.*s/%s", ! PATHLEN - 2 - file_len, incdirs[i], ! file); ! if (access(compath(path), READ) == 0) { ! addsrcfile(path); ! break; ! } ! } } } - /* see if the file is already in the list */ BOOL infilelist(char *path) { ! struct listitem *p; ! for (p = srcnames[hash(compath(path)) % HASHMOD]; p != NULL; p = p->next) { ! if (strequal(path, p->text)) { ! return(YES); ! } } ! return(NO); } --- 580,639 ---- } + /* add an include file to the source file list */ void incfile(char *file, char *type) { ! char name[PATHLEN + 1]; ! char path[PATHLEN + 1]; ! char *s; ! unsigned int i; ! /* see if the file is already in the source file list */ ! if (infilelist(file) == YES) { ! return; ! } ! /* look in current directory if it was #include "file" */ ! if (type[0] == '"' && (s = inviewpath(file)) != NULL) { ! addsrcfile(s); ! } else { ! size_t file_len = strlen(file); ! ! /* search for the file in the #include directory list */ ! for (i = 0; i < nincdirs; ++i) { ! /* don't include the file from two directories */ ! sprintf(name, "%.*s/%s", ! PATHLEN - 2 - file_len, incnames[i], ! file); ! if (infilelist(name) == YES) { ! break; ! } ! /* make sure it exists and is readable */ ! sprintf(path, "%.*s/%s", ! PATHLEN - 2 - file_len, incdirs[i], ! file); ! if (access(compath(path), READ) == 0) { ! addsrcfile(path); ! break; ! } } + } } + /* see if the file is already in the list */ BOOL infilelist(char *path) { ! struct listitem *p; ! for (p = srcnames[hash(compath(path)) % HASHMOD]; ! p != NULL; ! p = p->next) { ! if (strequal(path, p->text)) { ! return(YES); } ! } ! return(NO); } *************** *** 642,667 **** inviewpath(char *file) { ! static char path[PATHLEN + 1]; ! int i; ! /* look for the file */ ! if (access(compath(file), READ) == 0) { ! return(file); ! } ! /* if it isn't a full path name and there is a multi-directory view path */ ! if (*file != '/' && vpndirs > 1) { ! int file_len = strlen(file); ! ! /* compute its path from higher view path source dirs */ ! for (i = 1; i < nvpsrcdirs; ++i) { ! (void) sprintf(path, "%.*s/%s", ! PATHLEN - 2 - file_len, srcdirs[i], ! file); ! if (access(compath(path), READ) == 0) { ! return(path); ! } ! } } ! return(NULL); } --- 643,670 ---- inviewpath(char *file) { ! static char path[PATHLEN + 1]; ! unsigned int i; ! /* look for the file */ ! if (access(compath(file), READ) == 0) { ! return(file); ! } ! ! /* if it isn't a full path name and there is a multi-directory ! * view path */ ! if (*file != '/' && vpndirs > 1) { ! int file_len = strlen(file); ! ! /* compute its path from higher view path source dirs */ ! for (i = 1; i < nvpsrcdirs; ++i) { ! sprintf(path, "%.*s/%s", ! PATHLEN - 2 - file_len, srcdirs[i], ! file); ! if (access(compath(path), READ) == 0) { ! return(path); ! } } ! } ! return(NULL); } Index: display.c =================================================================== RCS file: /cvsroot/cscope/cscope/src/display.c,v retrieving revision 1.26 retrieving revision 1.27 diff -C2 -r1.26 -r1.27 *** display.c 27 Oct 2004 11:32:46 -0000 1.26 --- display.c 21 Apr 2006 10:45:48 -0000 1.27 *************** *** 65,81 **** int booklen; /* OGS book name display field length */ int *displine; /* screen line of displayed reference */ ! int disprefs; /* displayed references */ int field; /* input field */ int filelen; /* file name display field length */ int fcnlen; /* function name display field length */ ! int mdisprefs; /* maximum displayed references */ ! int nextline; /* next line to be shown */ FILE *nonglobalrefs; /* non-global references file */ int numlen; /* line number display field length */ ! int topline = 1; /* top line of page */ int bottomline; /* bottom line of page */ long searchcount; /* count of files searched */ int subsystemlen; /* OGS subsystem name display field length */ ! int totallines; /* total reference lines */ unsigned fldcolumn; /* input field column */ --- 65,81 ---- int booklen; /* OGS book name display field length */ int *displine; /* screen line of displayed reference */ ! unsigned int disprefs; /* displayed references */ int field; /* input field */ int filelen; /* file name display field length */ int fcnlen; /* function name display field length */ ! unsigned int mdisprefs; /* maximum displayed references */ ! unsigned int nextline; /* next line to be shown */ FILE *nonglobalrefs; /* non-global references file */ int numlen; /* line number display field length */ ! unsigned int topline = 1; /* top line of page */ int bottomline; /* bottom line of page */ long searchcount; /* count of files searched */ int subsystemlen; /* OGS subsystem name display field length */ ! unsigned int totallines; /* total reference lines */ unsigned fldcolumn; /* input field column */ *************** *** 144,374 **** display(void) { ! char *subsystem; /* OGS subsystem name */ ! char *book; /* OGS book name */ ! char file[PATHLEN + 1]; /* file name */ ! char function[PATLEN + 1]; /* function name */ ! char linenum[NUMLEN + 1]; /* line number */ ! int screenline; /* screen line number */ ! int width; /* source line display width */ ! int i; ! char *s; ! ! /* see if this is the initial display */ ! erase(); ! if (refsfound == NULL) { #if CCS ! if (displayversion == YES) { ! printw("cscope %s", ESG_REL); ! } ! else { ! printw("cscope"); ! } #else ! printw("Cscope version %d%s", FILEVERSION, FIXVERSION); #endif ! move(0, COLS - (int) sizeof(helpstring)); ! addstr(helpstring); ! } else if (totallines == 0) { ! /* if no references were found */ ! /* redisplay the last message */ ! addstr(lastmsg); } else { ! /* display the pattern */ ! if (changing == YES) { ! printw("Change \"%s\" to \"%s\"", Pattern, newpat); ! } else { ! printw("%c%s: %s", toupper((unsigned char)fields[field].text2[0]), ! fields[field].text2 + 1, Pattern); ! } ! /* display the column headings */ ! move(2, 2); ! if (ogs == YES && field != FILENAME) { ! printw("%-*s ", subsystemlen, "Subsystem"); ! printw("%-*s ", booklen, "Book"); ! } ! if (dispcomponents > 0) ! printw("%-*s ", filelen, "File"); ! if (field == SYMBOL || field == CALLEDBY || field == CALLING) { ! printw("%-*s ", fcnlen, "Function"); ! } ! if (field != FILENAME) { ! addstr("Line"); ! } ! addch('\n'); ! /* if at end of file go back to beginning */ ! if (nextline > totallines) { ! seekline(1); ! } ! /* calculate the source text column */ ! width = COLS - numlen - 3; if (ogs == YES) { ! width -= subsystemlen + booklen + 2; } if (dispcomponents > 0) { ! width -= filelen + 1; ! } ! if (field == SYMBOL || field == CALLEDBY || field == CALLING) { ! width -= fcnlen + 1; } ! /* until the max references have been displayed or ! there is no more room */ ! topline = nextline; ! for (disprefs = 0, screenline = REFLINE; ! disprefs < mdisprefs && screenline <= lastdispline; ! ++disprefs, ++screenline) { ! /* read the reference line */ ! if (fscanf(refsfound, "%s%s%s %[^\n]", file, function, ! linenum, tempstring) < 4) { ! break; ! } ! ++nextline; ! displine[disprefs] = screenline; ! ! /* if no mouse, display the selection number */ ! if (mouse == YES) { ! addch(' '); ! } else { ! printw("%c", dispchars[disprefs]); ! } ! ! /* display any change mark */ ! if (changing == YES && ! change[topline + disprefs - 1] == YES) { ! addch('>'); ! } else { ! addch(' '); ! } ! ! /* display the file name */ ! if (field == FILENAME) { ! printw("%-*s ", filelen, file); ! } else { ! /* if OGS, display the subsystem and book names */ ! if (ogs == YES) { ! ogsnames(file, &subsystem, &book); ! printw("%-*.*s ", subsystemlen, subsystemlen, subsystem); ! printw("%-*.*s ", booklen, booklen, book); ! } ! /* display the requested path components */ ! if (dispcomponents > 0) { ! printw("%-*.*s ", filelen, filelen, ! pathcomponents(file, dispcomponents)); ! } ! } /* else(field == FILENAME) */ ! ! /* display the function name */ ! if (field == SYMBOL || field == CALLEDBY || field == CALLING) { ! printw("%-*.*s ", fcnlen, fcnlen, function); ! } ! if (field == FILENAME) { ! addch('\n'); /* go to next line */ ! continue; ! } ! ! /* display the line number */ ! printw("%*s ", numlen, linenum); ! /* there may be tabs in egrep output */ ! while ((s = strchr(tempstring, '\t')) != NULL) { ! *s = ' '; ! } ! ! /* display the source line */ ! s = tempstring; ! for (;;) { ! /* see if the source line will fit */ ! if ((i = strlen(s)) > width) { ! /* find the nearest blank */ ! for (i = width; s[i] != ' ' && i > 0; --i) { ! ; ! } ! if (i == 0) { ! i = width; /* no blank */ ! } ! } ! /* print up to this point */ ! printw("%.*s", i, s); ! s += i; ! /* if line didn't wrap around */ ! if (i < width) { ! addch('\n'); /* go to next line */ ! } ! /* skip blanks */ ! while (*s == ' ') { ! ++s; ! } ! /* see if there is more text */ ! if (*s == '\0') { ! break; ! } ! /* if the source line is too long */ ! if (++screenline > lastdispline) { ! ! /* if this is the first displayed line, ! display what will fit on the screen */ ! if (topline == nextline -1) { ! disprefs++; ! /* break out of two loops */ ! goto endrefs; ! } ! /* erase the reference */ ! while (--screenline >= displine[disprefs]) { ! move(screenline, 0); ! clrtoeol(); ! } ! ++screenline; ! /* go back to the beginning of this reference */ ! --nextline; ! seekline(nextline); ! goto endrefs; ! } ! /* indent the continued source line */ ! move(screenline, COLS - width); ! } /* for(ever) */ ! } /* for(reference output lines) */ ! endrefs: ! /* position the cursor for the message */ ! i = FLDLINE - 1; ! if (screenline < i) { ! addch('\n'); ! } ! else { ! move(i, 0); ! } ! /* check for more references */ ! i = totallines - nextline + 1; ! bottomline = nextline; ! if (i > 0) { ! s = "s"; ! if (i == 1) { ! s = ""; ! } ! printw("* %d more line%s - press the space bar to display more *", i, s); ! } ! /* if this is the last page of references */ ! else if (topline > 1 && nextline > totallines) { ! addstr("* Press the space bar to display the first lines again *"); ! } } ! /* display the input fields */ ! move(FLDLINE, 0); ! for (i = 0; i < FIELDS; ++i) { ! printw("%s %s:\n", fields[i].text1, fields[i].text2); } ! /* display any prompt */ ! if (changing == YES) { ! move(PRLINE, 0); ! addstr(selprompt); } ! drawscrollbar(topline, nextline); /* display the scrollbar */ ! refresh(); } --- 144,374 ---- display(void) { ! char *subsystem; /* OGS subsystem name */ ! char *book; /* OGS book name */ ! char file[PATHLEN + 1]; /* file name */ ! char function[PATLEN + 1]; /* function name */ ! char linenum[NUMLEN + 1]; /* line number */ ! int screenline; /* screen line number */ ! int width; /* source line display width */ ! int i; ! char *s; ! ! /* see if this is the initial display */ ! erase(); ! if (refsfound == NULL) { #if CCS ! if (displayversion == YES) { ! printw("cscope %s", ESG_REL); ! } ! else { ! printw("cscope"); ! } #else ! printw("Cscope version %d%s", FILEVERSION, FIXVERSION); #endif ! move(0, COLS - (int) sizeof(helpstring)); ! addstr(helpstring); ! } else if (totallines == 0) { ! /* if no references were found */ ! /* redisplay the last message */ ! addstr(lastmsg); ! } else { ! /* display the pattern */ ! if (changing == YES) { ! printw("Change \"%s\" to \"%s\"", Pattern, newpat); } else { ! printw("%c%s: %s", toupper((unsigned char)fields[field].text2[0]), ! fields[field].text2 + 1, Pattern); ! } ! /* display the column headings */ ! move(2, 2); ! if (ogs == YES && field != FILENAME) { ! printw("%-*s ", subsystemlen, "Subsystem"); ! printw("%-*s ", booklen, "Book"); ! } ! if (dispcomponents > 0) ! printw("%-*s ", filelen, "File"); ! if (field == SYMBOL || field == CALLEDBY || field == CALLING) { ! printw("%-*s ", fcnlen, "Function"); ! } ! if (field != FILENAME) { ! addstr("Line"); ! } ! addch('\n'); ! /* if at end of file go back to beginning */ ! if (nextline > totallines) { ! seekline(1); ! } ! /* calculate the source text column */ ! width = COLS - numlen - 3; + if (ogs == YES) { + width -= subsystemlen + booklen + 2; + } + if (dispcomponents > 0) { + width -= filelen + 1; + } + if (field == SYMBOL || field == CALLEDBY || field == CALLING) { + width -= fcnlen + 1; + } + + /* until the max references have been displayed or + there is no more room */ + topline = nextline; + for (disprefs = 0, screenline = REFLINE; + disprefs < mdisprefs && screenline <= lastdispline; + ++disprefs, ++screenline) { + /* read the reference line */ + if (fscanf(refsfound, "%s%s%s %[^\n]", file, function, + linenum, tempstring) < 4) { + break; + } + ++nextline; + displine[disprefs] = screenline; + + /* if no mouse, display the selection number */ + if (mouse == YES) { + addch(' '); + } else { + printw("%c", dispchars[disprefs]); + } + + /* display any change mark */ + if (changing == YES && + change[topline + disprefs - 1] == YES) { + addch('>'); + } else { + addch(' '); + } + + /* display the file name */ + if (field == FILENAME) { + printw("%-*s ", filelen, file); + } else { + /* if OGS, display the subsystem and book names */ if (ogs == YES) { ! ogsnames(file, &subsystem, &book); ! printw("%-*.*s ", subsystemlen, subsystemlen, subsystem); ! printw("%-*.*s ", booklen, booklen, book); } + /* display the requested path components */ if (dispcomponents > 0) { ! printw("%-*.*s ", filelen, filelen, ! pathcomponents(file, dispcomponents)); } + } /* else(field == FILENAME) */ ! /* display the function name */ ! if (field == SYMBOL || field == CALLEDBY || field == CALLING) { ! printw("%-*.*s ", fcnlen, fcnlen, function); ! } ! if (field == FILENAME) { ! addch('\n'); /* go to next line */ ! continue; ! } ! ! /* display the line number */ ! printw("%*s ", numlen, linenum); ! /* there may be tabs in egrep output */ ! while ((s = strchr(tempstring, '\t')) != NULL) { ! *s = ' '; ! } ! ! /* display the source line */ ! s = tempstring; ! for (;;) { ! /* see if the source line will fit */ ! if ((i = strlen(s)) > width) { ! /* find the nearest blank */ ! for (i = width; s[i] != ' ' && i > 0; --i) { ! ; ! } ! if (i == 0) { ! i = width; /* no blank */ ! } ! } ! /* print up to this point */ ! printw("%.*s", i, s); ! s += i; ! /* if line didn't wrap around */ ! if (i < width) { ! addch('\n'); /* go to next line */ ! } ! /* skip blanks */ ! while (*s == ' ') { ! ++s; ! } ! /* see if there is more text */ ! if (*s == '\0') { ! break; ! } ! /* if the source line is too long */ ! if (++screenline > lastdispline) { ! ! /* if this is the first displayed line, ! display what will fit on the screen */ ! if (topline == nextline -1) { ! disprefs++; ! /* break out of two loops */ ! goto endrefs; ! } ! /* erase the reference */ ! while (--screenline >= displine[disprefs]) { ! move(screenline, 0); ! clrtoeol(); ! } ! ++screenline; ! /* go back to the beginning of this reference */ ! --nextline; ! seekline(nextline); ! goto endrefs; ! } ! /* indent the continued source line */ ! move(screenline, COLS - width); ! } /* for(ever) */ ! } /* for(reference output lines) */ ! endrefs: ! /* position the cursor for the message */ ! i = FLDLINE - 1; ! if (screenline < i) { ! addch('\n'); } ! else { ! move(i, 0); } ! /* check for more references */ ! i = totallines - nextline + 1; ! bottomline = nextline; ! if (i > 0) { ! s = "s"; ! if (i == 1) { ! s = ""; ! } ! printw("* %d more line%s - press the space bar to display more *", i, s); ! } ! /* if this is the last page of references */ ! else if (topline > 1 && nextline > totallines) { ! addstr("* Press the space bar to display the first lines again *"); } ! } ! /* display the input fields */ ! move(FLDLINE, 0); ! for (i = 0; i < FIELDS; ++i) { ! printw("%s %s:\n", fields[i].text1, fields[i].text2); ! } ! /* display any prompt */ ! if (changing == YES) { ! move(PRLINE, 0); ! addstr(selprompt); ! } ! drawscrollbar(topline, nextline); /* display the scrollbar */ ! refresh(); } *************** *** 412,420 **** search(void) { - char *subsystem; /* OGS subsystem name */ - char *book; /* OGS book name */ - char file[PATHLEN + 1]; /* file name */ - char function[PATLEN + 1]; /* function name */ - char linenum[NUMLEN + 1]; /* line number */ char *findresult = NULL; /* find function output */ BOOL funcexist = YES; /* find "function" error */ --- 412,415 ---- *************** *** 422,426 **** sighandler_t savesig; /* old value of signal */ FP f; /* searching function */ ! int c, i; /* open the references found file for writing */ --- 417,421 ---- sighandler_t savesig; /* old value of signal */ FP f; /* searching function */ ! int c; /* open the references found file for writing */ *************** *** 434,438 **** searchcount = 0; savesig = signal(SIGINT, jumpback); ! if (sigsetjmp(env,1) == 0) { f = fields[field].findfcn; if (f == findregexp || f == findstring) { --- 429,433 ---- searchcount = 0; savesig = signal(SIGINT, jumpback); ! if (sigsetjmp(env, 1) == 0) { f = fields[field].findfcn; if (f == findregexp || f == findstring) { *************** *** 688,692 **** void ! seekline(int line) { int c; --- 683,687 ---- void ! seekline(unsigned int line) { int c; Index: egrep.y =================================================================== RCS file: /cvsroot/cscope/cscope/src/egrep.y,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -r1.10 -r1.11 *** egrep.y 14 Mar 2005 17:23:05 -0000 1.10 --- egrep.y 21 Apr 2006 10:45:48 -0000 1.11 *************** *** 62,70 **** static int state[NSTATES]; static char out[NSTATES]; ! static int line; static int name[MAXLIN]; ! static int left[MAXLIN]; ! static int right[MAXLIN]; ! static int parent[MAXLIN]; static int foll[MAXLIN]; static int positions[MAXPOS]; --- 62,70 ---- static int state[NSTATES]; static char out[NSTATES]; ! static unsigned int line; static int name[MAXLIN]; ! static unsigned int left[MAXLIN]; ! static unsigned int right[MAXLIN]; ! static unsigned int parent[MAXLIN]; static int foll[MAXLIN]; static int positions[MAXPOS]; *************** *** 92,100 **** static void overflo(void); static void add(int *array, int n); ! static void follow(int v); static int unary(int x, int d); static int node(int x, int l, int r); ! static int cclenter(int x); ! static int enter(int x); static int yylex(void); --- 92,100 ---- static void overflo(void); static void add(int *array, int n); ! static void follow(unsigned int v); static int unary(int x, int d); static int node(int x, int l, int r); ! static unsigned int cclenter(int x); ! static unsigned int enter(int x); static int yylex(void); *************** *** 152,155 **** --- 152,156 ---- message = s; longjmp(env, 1); + return 1; /* silence a warning */ } *************** *** 228,251 **** synerror(void) { ! yyerror("Syntax error"); } ! static int enter(int x) { ! if(line >= MAXLIN) overflo(); ! name[line] = x; ! left[line] = 0; ! right[line] = 0; ! return(line++); } ! static int cclenter(int x) { ! int linno; ! linno = enter(x); ! right[linno] = count; ! return (linno); } --- 229,254 ---- synerror(void) { ! yyerror("Syntax error"); ... [truncated message content] |