diff options
Diffstat (limited to 'contrib/global/nvi-1.34.diff')
-rw-r--r-- | contrib/global/nvi-1.34.diff | 900 |
1 files changed, 0 insertions, 900 deletions
diff --git a/contrib/global/nvi-1.34.diff b/contrib/global/nvi-1.34.diff deleted file mode 100644 index f289e9a..0000000 --- a/contrib/global/nvi-1.34.diff +++ /dev/null @@ -1,900 +0,0 @@ -diff -c -r -N /usr/src/usr.bin/vi/USD.doc/vi.man/vi.1 ./USD.doc/vi.man/vi.1 -*** /usr/src/usr.bin/vi/USD.doc/vi.man/vi.1 Wed Aug 17 08:36:39 1994 ---- ./USD.doc/vi.man/vi.1 Sat Dec 14 11:54:14 1996 -*************** -*** 39,59 **** - .Nd text editors - .Sh SYNOPSIS - .Nm \&ex -! .Op Fl eFRrsv - .Op Fl c Ar cmd - .Op Fl t Ar tag - .Op Fl w Ar size - .\".Op Fl X Ar \&aw - .Op Ar "file ..." - .Nm \&vi -! .Op Fl eFRrv - .Op Fl c Ar cmd - .Op Fl t Ar tag - .Op Fl w Ar size - .\".Op Fl X Ar \&aw - .Op Ar "file ..." - .Nm view -! .Op Fl eFRrv - .Op Fl c Ar cmd - .Op Fl t Ar tag - .Op Fl w Ar size ---- 39,59 ---- - .Nd text editors - .Sh SYNOPSIS - .Nm \&ex -! .Op Fl eFGRrsv - .Op Fl c Ar cmd - .Op Fl t Ar tag - .Op Fl w Ar size - .\".Op Fl X Ar \&aw - .Op Ar "file ..." - .Nm \&vi -! .Op Fl eFGRrv - .Op Fl c Ar cmd - .Op Fl t Ar tag - .Op Fl w Ar size - .\".Op Fl X Ar \&aw - .Op Ar "file ..." - .Nm view -! .Op Fl eFGRrv - .Op Fl c Ar cmd - .Op Fl t Ar tag - .Op Fl w Ar size -*************** -*** 124,129 **** ---- 124,131 ---- - Don't copy the entire file when first starting to edit. - (The default is to make a copy in case someone else modifies - the file during your edit session.) -+ .It Fl G -+ Start editing in gtags mode, as if the gtagsmode option was set. - .It Fl R - Start editing in read-only mode, as if the command name was - .Nm view , -*************** -*** 377,382 **** ---- 379,385 ---- - Move the cursor down - .Li count - lines to the first nonblank character of that line. -+ In gtags select mode, <control-M> select current line as a tag. - .It Sy "[count] <control-P>" - .It Sy "[count] k" - Move the cursor up -*************** -*** 402,408 **** - .Nm \&ex - commands or cancel partial commands. - .It Sy "<control-]>" -! Push a tag reference onto the tag stack. - .It Sy "<control-^>" - Switch to the most recently edited file. - .It Sy "[count] <space>" ---- 405,412 ---- - .Nm \&ex - commands or cancel partial commands. - .It Sy "<control-]>" -! Push a tag reference onto the tag stack. In gtagsmode, if at the first column -! of line, locate function references otherwise function definitions. - .It Sy "<control-^>" - Switch to the most recently edited file. - .It Sy "[count] <space>" -*************** -*** 780,785 **** ---- 784,793 ---- - Grow or shrink the current screen. - .It Sy "rew[ind][!]" - Rewind the argument list. -+ .It Sy "rta[g][!] tagstring" -+ Edit the file refering the specified tag. (Only in gtagsmode) -+ .It Sy "se[lect]" -+ Select a tag from gtags list. - .It Sy "se[t] [option[=[value]] ...] [nooption ...] [option? ...] [all]" - Display or set editor options. - .It Sy "sh[ell]" -*************** -*** 901,906 **** ---- 909,916 ---- - style) expressions. - .It Sy "flash [on]" - Flash the screen instead of beeping the keyboard on error. -+ .It Sy "gtagsmode, gt [off]" -+ Use GTAGS and GRTAGS instead of tags. - .It Sy "hardtabs, ht [8]" - Set the spacing between hardware tab settings. - .It Sy "ignorecase, ic [off]" -diff -c -r -N /usr/src/usr.bin/vi/common/Makefile ./common/Makefile -*** /usr/src/usr.bin/vi/common/Makefile Mon Sep 12 07:01:45 1994 ---- ./common/Makefile Sat Dec 14 11:55:27 1996 -*************** -*** 9,15 **** - LINKS+= ${BINDIR}/${VI} ${BINDIR}/view - MAN1= ${.CURDIR}/../USD.doc/vi.man/vi.1 - -! CFLAGS+=-I. -I${.CURDIR} - DPADD+= ${LIBCURSES} ${LIBTERMCAP} ${LIBUTIL} - LDADD+= -lcurses -ltermcap -lutil - ---- 9,15 ---- - LINKS+= ${BINDIR}/${VI} ${BINDIR}/view - MAN1= ${.CURDIR}/../USD.doc/vi.man/vi.1 - -! CFLAGS+=-I. -I${.CURDIR} -DGTAGS - DPADD+= ${LIBCURSES} ${LIBTERMCAP} ${LIBUTIL} - LDADD+= -lcurses -ltermcap -lutil - -diff -c -r -N /usr/src/usr.bin/vi/common/exf.c ./common/exf.c -*** /usr/src/usr.bin/vi/common/exf.c Tue May 30 15:35:44 1995 ---- ./common/exf.c Sat Dec 14 11:54:15 1996 -*************** -*** 156,162 **** ---- 156,169 ---- - * Required FRP initialization; the only flag we keep is the - * cursor information. - */ -+ #ifdef GTAGS -+ /* -+ * we must keep gtagstmp information too. -+ */ -+ F_CLR(frp, ~(FR_CURSORSET|FR_GTAGSTMP)); -+ #else - F_CLR(frp, ~FR_CURSORSET); -+ #endif - - /* - * Required EXF initialization: -*************** -*** 290,295 **** ---- 297,305 ---- - * an error. - */ - if (rcv_name == NULL) -+ #ifdef GTAGS -+ if (!F_ISSET(frp, FR_GTAGSTMP)) -+ #endif - switch (file_lock(oname, - &ep->fcntl_fd, ep->db->fd(ep->db), 0)) { - case LOCK_FAILED: -diff -c -r -N /usr/src/usr.bin/vi/common/gs.h ./common/gs.h -*** /usr/src/usr.bin/vi/common/gs.h Wed Aug 17 08:36:42 1994 ---- ./common/gs.h Sat Dec 14 11:54:15 1996 -*************** -*** 48,53 **** ---- 48,56 ---- - - sigset_t blockset; /* Signal mask. */ - -+ #ifdef GTAGS -+ char *gtagstmp; /* gtagstmp made by -t option */ -+ #endif - #ifdef DEBUG - FILE *tracefp; /* Trace file pointer. */ - #endif -diff -c -r -N /usr/src/usr.bin/vi/common/main.c ./common/main.c -*** /usr/src/usr.bin/vi/common/main.c Tue May 30 15:35:45 1995 ---- ./common/main.c Sat Dec 14 11:54:15 1996 -*************** -*** 98,103 **** ---- 98,106 ---- - SCR *sp; - u_int flags, saved_vi_mode; - int ch, eval, flagchk, readonly, silent, snapshot; -+ #ifdef GTAGS -+ int gtags = 0; -+ #endif - char *excmdarg, *myname, *p, *tag_f, *trace_f, *wsizearg; - char path[MAXPATHLEN]; - -*************** -*** 134,140 **** ---- 137,147 ---- - excmdarg = tag_f = trace_f = wsizearg = NULL; - silent = 0; - snapshot = 1; -+ #ifdef GTAGS -+ while ((ch = getopt(argc, argv, "c:eFGRrsT:t:vw:X:")) != EOF) -+ #else - while ((ch = getopt(argc, argv, "c:eFRrsT:t:vw:X:")) != EOF) -+ #endif - switch (ch) { - case 'c': /* Run the command. */ - excmdarg = optarg; -*************** -*** 146,151 **** ---- 153,163 ---- - case 'F': /* No snapshot. */ - snapshot = 0; - break; -+ #ifdef GTAGS -+ case 'G': /* gtags mode. */ -+ gtags = 1; -+ break; -+ #endif - case 'R': /* Readonly. */ - readonly = 1; - break; -*************** -*** 245,250 **** ---- 257,266 ---- - goto err; - if (readonly) /* Global read-only bit. */ - O_SET(sp, O_READONLY); -+ #ifdef GTAGS -+ if (gtags) /* Global gtags bit. */ -+ O_SET(sp, O_GTAGSMODE); -+ #endif - if (silent) { /* Ex batch mode. */ - O_CLR(sp, O_AUTOPRINT); - O_CLR(sp, O_PROMPT); -*************** -*** 515,520 **** ---- 531,539 ---- - LIST_INIT(&gp->cutq); - LIST_INIT(&gp->seqq); - -+ #ifdef GTAGS -+ gp->gtagstmp = NULL; -+ #endif - /* Set a flag if we're reading from the tty. */ - if (isatty(STDIN_FILENO)) - F_SET(gp, G_STDIN_TTY); -*************** -*** 554,559 **** ---- 573,584 ---- - SCR *sp; - char *tty; - -+ #ifdef GTAGS -+ if (gp->gtagstmp) { -+ if (!strncmp(gp->gtagstmp, _PATH_GTAGSTMP, strlen(_PATH_GTAGSTMP))) -+ (void)unlink(gp->gtagstmp); -+ } -+ #endif - /* Default buffer storage. */ - (void)text_lfree(&gp->dcb_store.textq); - -diff -c -r -N /usr/src/usr.bin/vi/common/msg.c ./common/msg.c -*** /usr/src/usr.bin/vi/common/msg.c Thu Aug 18 10:10:54 1994 ---- ./common/msg.c Sat Dec 14 11:54:15 1996 -*************** -*** 338,343 **** ---- 338,352 ---- - #else - pid = ""; - #endif -+ #ifdef GTAGS -+ if (F_ISSET(sp->frp, FR_GTAGSTMP)) { -+ if (file_lline(sp, ep, &last)) { -+ return (1); -+ } -+ msgq(sp, M_INFO, "[GTAGS SELECT MODE] %d lines", last); -+ return (0); -+ } -+ #endif - /* - * See nvi/exf.c:file_init() for a description of how and - * when the read-only bit is set. -diff -c -r -N /usr/src/usr.bin/vi/common/options.c ./common/options.c -*** /usr/src/usr.bin/vi/common/options.c Tue May 30 15:35:46 1995 ---- ./common/options.c Sat Dec 14 11:54:15 1996 -*************** -*** 103,108 **** ---- 103,112 ---- - {"extended", NULL, OPT_0BOOL, 0}, - /* O_FLASH HPUX */ - {"flash", NULL, OPT_1BOOL, 0}, -+ #ifdef GTAGS -+ /* O_GTAGSMODE SPECIAL */ -+ {"gtagsmode", NULL, OPT_0BOOL, 0}, -+ #endif - /* O_HARDTABS 4BSD */ - {"hardtabs", NULL, OPT_NUM, 0}, - /* O_IGNORECASE 4BSD */ -*************** -*** 228,233 **** ---- 232,240 ---- - {"eb", O_ERRORBELLS}, /* 4BSD */ - {"ed", O_EDCOMPATIBLE}, /* 4BSD */ - {"ex", O_EXRC}, /* System V (undocumented) */ -+ #ifdef GTAGS -+ {"gt", O_GTAGSMODE}, /* Special */ -+ #endif - {"ht", O_HARDTABS}, /* 4BSD */ - {"ic", O_IGNORECASE}, /* 4BSD */ - {"li", O_LINES}, /* 4.4BSD */ -diff -c -r -N /usr/src/usr.bin/vi/common/pathnames.h ./common/pathnames.h -*** /usr/src/usr.bin/vi/common/pathnames.h Wed Aug 17 08:36:43 1994 ---- ./common/pathnames.h Sat Dec 14 11:54:15 1996 -*************** -*** 43,45 **** ---- 43,48 ---- - #define _PATH_TAGS "tags" - #define _PATH_TMP "/tmp" - #define _PATH_TTY "/dev/tty" -+ #ifdef GTAGS -+ #define _PATH_GTAGSTMP "/var/tmp/gtags" -+ #endif -diff -c -r -N /usr/src/usr.bin/vi/common/screen.h ./common/screen.h -*** /usr/src/usr.bin/vi/common/screen.h Wed Aug 17 08:36:43 1994 ---- ./common/screen.h Sat Dec 14 11:54:15 1996 -*************** -*** 87,92 **** ---- 87,95 ---- - #define FR_TMPEXIT 0x100 /* Modified temporary file, no exit. */ - #define FR_TMPFILE 0x200 /* If file has no name. */ - #define FR_UNLOCKED 0x400 /* File couldn't be locked. */ -+ #ifdef GTAGS -+ #define FR_GTAGSTMP 0x800 /* File is gtags temporary file. */ -+ #endif - u_int16_t flags; - }; - -diff -c -r -N /usr/src/usr.bin/vi/ex/ex_tag.c ./ex/ex_tag.c -*** /usr/src/usr.bin/vi/ex/ex_tag.c Thu Aug 18 10:13:20 1994 ---- ./ex/ex_tag.c Sat Dec 14 11:54:15 1996 -*************** -*** 64,69 **** ---- 64,72 ---- - #include "vi.h" - #include "excmd.h" - #include "tag.h" -+ #ifdef GTAGS -+ #include "pathnames.h" -+ #endif - - static char *binary_search __P((char *, char *, char *)); - static int compare __P((char *, char *, char *)); -*************** -*** 71,76 **** ---- 74,288 ---- - static int search __P((SCR *, char *, char *, char **)); - static int tag_get __P((SCR *, char *, char **, char **, char **)); - -+ #ifdef DEBUG -+ void -+ trace(fp) -+ FILE *fp; -+ { -+ SCR *sp; -+ TAG *tp; -+ FREF *frp; -+ int scr, fref, tag; -+ -+ fprintf(fp, "------------------------------------\n"); -+ scr = 0; -+ for (sp = __global_list->dq.cqh_first; sp != (void *)&__global_list->dq; sp = sp->q.cqe_next) { -+ fprintf(fp, "screen %d {\n", ++scr); -+ fref = 0; -+ for (frp = sp->frefq.cqh_first; -+ frp != (FREF *)&sp->frefq; frp = frp->q.cqe_next) { -+ fprintf(fp, " FREF %d ", ++fref); -+ if (F_ISSET(frp, FR_GTAGSTMP)) -+ fprintf(fp, "<%s>\n", frp->name); -+ else -+ fprintf(fp, "%s\n", frp->name); -+ } -+ tag = 0; -+ if (!EXP(sp)) -+ continue; -+ fprintf(fp, " ................................\n"); -+ for (tp = EXP(sp)->tagq.tqh_first; tp != NULL; tp = tp->q.tqe_next) { -+ fprintf(fp, " TAG %d ", ++tag); -+ if (F_ISSET(tp->frp, FR_GTAGSTMP)) -+ fprintf(fp, "<%s>\n", tp->frp->name); -+ else -+ fprintf(fp, "%s\n", tp->frp->name); -+ } -+ fprintf(fp, "}\n"); -+ } -+ fprintf(fp, "------------------------------------\n"); -+ } -+ #endif -+ #ifdef GTAGS -+ /* -+ * getentry -- -+ * get tag information from current line. -+ * -+ * gtags temporary file format. -+ * <tag> <lineno> <file> <image> -+ * -+ * sample. -+ * +------------------------------------------------ -+ * |main 30 main.c main(argc, argv) -+ * |func 21 subr.c func(arg) -+ */ -+ static int -+ getentry(buf, tag, file, line) -+ char *buf, *tag, *file, *line; -+ { -+ char *p; -+ -+ p = tag; -+ while (*buf && !isspace(*buf)) /* tag name */ -+ *p++ = *buf++; -+ *p = 0; -+ while (*buf && isspace(*buf)) /* skip blanks */ -+ buf++; -+ p = line; -+ while (*buf && !isspace(*buf)) /* line no */ -+ *p++ = *buf++; -+ *p = 0; -+ while (*buf && isspace(*buf)) /* skip blanks */ -+ buf++; -+ p = file; -+ while (*buf && !isspace(*buf)) /* file name */ -+ *p++ = *buf++; -+ *p = 0; -+ -+ /* value check */ -+ if (strlen(tag) && strlen(line) && strlen(file) && atoi(line) > 0) -+ return 1; /* OK */ -+ return 0; /* ERROR */ -+ } -+ -+ /* -+ * gtag_get -- -+ * Get a gtag from the GTAGS files. -+ */ -+ static int -+ gtag_get(sp, ref, gtagselect, tag, tagp, filep, searchp) -+ SCR *sp; -+ int ref; -+ int *gtagselect; -+ char *tag, **tagp, **filep, **searchp; -+ { -+ static char name[80], file[200], line[10], gtagstmp[80]; -+ char command[200]; -+ char buf[BUFSIZ+1]; -+ FILE *fp; -+ -+ sprintf(gtagstmp, "%s.XXXXXXXX", _PATH_GTAGSTMP); -+ if (mktemp(gtagstmp) == 0) { -+ msgq(sp, M_ERR, "cannot generate temporary file name"); -+ return (1); -+ } -+ sprintf(command, "global -%s '%s' > %s; chmod 600 %s", -+ ref ? "rx" : "x", tag, gtagstmp, gtagstmp); -+ if (system(command)) { -+ msgq(sp, M_ERR, "cannot exec global"); -+ goto err; -+ } -+ if (!(fp = fopen(gtagstmp, "r"))) { -+ msgq(sp, M_ERR, "tag file cannot open."); -+ goto err; -+ } -+ if (!(fgets(buf, BUFSIZ, fp))) { -+ msgq(sp, M_ERR, "%s: tag not found", tag); -+ fclose(fp); -+ goto err; -+ } -+ -+ if (getentry(buf, name, file, line) == 0) { -+ msgq(sp, M_ERR, "%s: illegal tag entry", tag); -+ fclose(fp); -+ goto err; -+ } -+ -+ if (!(fgets(buf, BUFSIZ, fp))) { /* just one line */ -+ fclose(fp); -+ (void)unlink(gtagstmp); -+ *gtagselect = 0; /* go to user's file immediately */ -+ *tagp = strdup(name); -+ *filep = file; -+ *searchp = line; -+ if (*tagp == NULL) { -+ msgq(sp, M_SYSERR, NULL); -+ return (1); -+ } -+ return (0); -+ } -+ fclose(fp); -+ *gtagselect = 1; /* go to gtags select mode */ -+ *tagp = strdup(name); -+ *filep = gtagstmp; -+ *searchp = "1"; -+ if (*tagp == NULL) { -+ msgq(sp, M_SYSERR, NULL); -+ return (1); -+ } -+ return (0); -+ err: -+ (void)unlink(gtagstmp); -+ return (1); -+ } -+ -+ /* -+ * ex_gtagselect -- -+ * The tag code can be entered from gtag select mode. -+ */ -+ int -+ ex_gtagselect(sp, ep, cmdp) -+ SCR *sp; -+ EXF *ep; -+ EXCMDARG *cmdp; -+ { -+ if (!F_ISSET(sp->frp, FR_GTAGSTMP)) { -+ msgq(sp, M_ERR, "illegal tag entry"); -+ return (1); -+ } -+ cmdp->cmd = &cmds[C_TAG]; -+ cmdp->flags |= (E_GTAGSELECT|E_FORCE); -+ return ex_tagpush(sp, ep, cmdp); -+ } -+ -+ /* -+ * should_delete -- -+ * 1: should delete, 0: should not delete -+ */ -+ int -+ should_delete(gtagstmp) -+ char *gtagstmp; -+ { -+ SCR *sp; -+ TAG *tp; -+ int tagcnt = 0; -+ -+ /* make sure */ -+ if (strncmp(gtagstmp, _PATH_GTAGSTMP, strlen(_PATH_GTAGSTMP))) -+ return 0; -+ /* this gtag is generated by -t option. don't delete here */ -+ if (__global_list->gtagstmp && !strcmp(gtagstmp, __global_list->gtagstmp)) -+ return 0; -+ -+ for (sp = __global_list->dq.cqh_first; sp != (void *)&__global_list->dq; sp = sp->q.cqe_next) { -+ if (!EXP(sp)) -+ continue; -+ for (tp = EXP(sp)->tagq.tqh_first; tp != NULL; tp = tp->q.tqe_next) { -+ if (!tp->frp || !F_ISSET(tp->frp, FR_GTAGSTMP)) -+ continue; -+ if (!strcmp(tp->frp->name, gtagstmp)) -+ ++tagcnt; -+ } -+ } -+ if (tagcnt == 1) -+ return 1; -+ if (tagcnt > 1) -+ return 0; -+ /* IMPOSSIBLE */ -+ return 0; -+ } -+ #endif -+ - /* - * ex_tagfirst -- - * The tag code can be entered from main, i.e. "vi -t tag". -*************** -*** 86,96 **** ---- 298,317 ---- - u_int flags; - int sval; - char *p, *tag, *name, *search; -+ #ifdef GTAGS -+ int gtagselect = 0; -+ #endif - - /* Taglength may limit the number of characters. */ - if ((tl = O_VAL(sp, O_TAGLENGTH)) != 0 && strlen(tagarg) > tl) - tagarg[tl] = '\0'; - -+ #ifdef GTAGS -+ if (O_ISSET(sp, O_GTAGSMODE)) { -+ if (gtag_get(sp, 0, >agselect, tagarg, &tag, &name, &search)) -+ return (1); -+ } else -+ #endif - /* Get the tag information. */ - if (tag_get(sp, tagarg, &tag, &name, &search)) - return (1); -*************** -*** 106,111 **** ---- 327,336 ---- - * The historic tags file format (from a long, long time ago...) - * used a line number, not a search string. I got complaints, so - * people are still using the format. -+ #ifdef GTAGS -+ * Yes, gtags use the old format. Search string is very flexible -+ * but is not suitable to treat duplicate entries. -+ #endif - */ - if (isdigit(search[0])) { - m.lno = atoi(search); -*************** -*** 132,137 **** ---- 357,371 ---- - frp->lno = m.lno; - frp->cno = m.cno; - F_SET(frp, FR_CURSORSET); -+ #ifdef GTAGS -+ if (gtagselect) { -+ F_SET(frp, FR_GTAGSTMP); -+ if (!(sp->gp->gtagstmp = strdup(name))) { -+ msgq(sp, M_SYSERR, NULL); -+ return (1); -+ } -+ } -+ #endif - - /* Might as well make this the default tag. */ - if ((EXP(sp)->tlast = strdup(tagarg)) == NULL) { -*************** -*** 142,153 **** ---- 376,399 ---- - } - - /* Free a tag or tagf structure from a queue. */ -+ #ifdef GTAGS - #define FREETAG(tp) { \ -+ if (F_ISSET(tp->frp, FR_GTAGSTMP)) \ -+ if (should_delete(tp->frp->name)) \ -+ unlink(tp->frp->name); \ - TAILQ_REMOVE(&exp->tagq, (tp), q); \ - if ((tp)->search != NULL) \ - free((tp)->search); \ - FREE((tp), sizeof(TAGF)); \ - } -+ #else -+ #define FREETAG(tp) { \ -+ TAILQ_REMOVE(&exp->tagq, (tp), q); \ -+ if ((tp)->search != NULL) \ -+ free((tp)->search); \ -+ FREE((tp), sizeof(TAGF)); \ -+ } -+ #endif - #define FREETAGF(tfp) { \ - TAILQ_REMOVE(&exp->tagfq, (tfp), q); \ - free((tfp)->name); \ -*************** -*** 182,189 **** ---- 428,464 ---- - int sval; - long tl; - char *name, *p, *search, *tag; -+ #ifdef GTAGS -+ int gtagselect = 0; -+ char *line; -+ size_t len; -+ char tagbuf[80], namebuf[200], linebuf[10]; -+ #endif - - exp = EXP(sp); -+ #ifdef GTAGS -+ /* -+ * Enter from gtag select mode. -+ * get tag information from current line. -+ */ -+ if (F_ISSET(cmdp, E_GTAGSELECT)) { -+ if ((line = file_gline(sp, ep, sp->lno, &len)) == NULL) { -+ GETLINE_ERR(sp, sp->lno); -+ return (1); -+ } -+ if (getentry(line, tagbuf, namebuf, linebuf) == 0) { -+ msgq(sp, M_ERR, "illegal tag entry"); -+ return (1); -+ } -+ if (!(tag = strdup(tagbuf))) { -+ msgq(sp, M_SYSERR, NULL); -+ return (1); -+ } -+ name = namebuf; -+ search = linebuf; -+ goto getfref; -+ } -+ #endif - switch (cmdp->argc) { - case 1: - if (exp->tlast != NULL) -*************** -*** 207,216 **** ---- 482,504 ---- - if ((tl = O_VAL(sp, O_TAGLENGTH)) != 0 && strlen(exp->tlast) > tl) - exp->tlast[tl] = '\0'; - -+ #ifdef GTAGS -+ if (O_ISSET(sp, O_GTAGSMODE)) { -+ if (gtag_get(sp, F_ISSET(cmdp->cmd, E_REFERENCE), >agselect, -+ exp->tlast, &tag, &name, &search)) -+ return (1); -+ } else if (F_ISSET(cmdp->cmd, E_REFERENCE)) { -+ msgq(sp, M_ERR, "Please set gtagsmode"); -+ return (1); -+ } else -+ #endif - /* Get the tag information. */ - if (tag_get(sp, exp->tlast, &tag, &name, &search)) - return (1); - -+ #ifdef GTAGS -+ getfref: -+ #endif - /* Get the (possibly new) FREF structure. */ - if ((frp = file_add(sp, name)) == NULL) - goto err; -*************** -*** 305,310 **** ---- 593,603 ---- - sp->cno = m.cno; - break; - } -+ #ifdef GTAGS -+ if (gtagselect) { -+ F_SET(frp, FR_GTAGSTMP); -+ } -+ #endif - return (0); - } - -*************** -*** 490,495 **** ---- 783,793 ---- - for (cnt = 1, tp = exp->tagq.tqh_first; tp != NULL; - ++cnt, tp = tp->q.tqe_next) { - len = strlen(name = tp->frp->name); /* The original name. */ -+ #ifdef GTAGS -+ if (F_ISSET(tp->frp, FR_GTAGSTMP)) { -+ (void)ex_printf(EXCOOKIE, "%2d [GTAGS]\n", cnt); -+ } else -+ #endif - if (len > maxlen || len + tp->slen > sp->cols) - if (tp == NULL || tp->search == NULL) - (void)ex_printf(EXCOOKIE, -diff -c -r -N /usr/src/usr.bin/vi/ex/excmd.c ./ex/excmd.c -*** /usr/src/usr.bin/vi/ex/excmd.c Thu Aug 18 10:13:29 1994 ---- ./ex/excmd.c Sat Dec 14 11:54:15 1996 -*************** -*** 319,324 **** ---- 319,331 ---- - "!", - "rew[ind][!]", - "re-edit all the files in the file argument list"}, -+ #ifdef GTAGS -+ /* C_RTAG */ -+ {"rtag", ex_tagpush, E_NOGLOBAL|E_REFERENCE, -+ "!w1o", -+ "rta[g][!] [string]", -+ "edit the file containing the tag"}, -+ #endif - /* C_SUBSTITUTE */ - {"substitute", ex_substitute, E_ADDR2|E_NORC, - "s", -*************** -*** 329,334 **** ---- 336,348 ---- - "!f1o", - "sc[ript][!] [file]", - "run a shell in a screen"}, -+ #ifdef GTAGS -+ /* C_GTAGSELECT */ -+ {"select", ex_gtagselect, E_NOGLOBAL, -+ "", -+ "sel[ect]", -+ "edit the file containing the tag"}, -+ #endif - /* C_SET */ - {"set", ex_set, E_NOGLOBAL, - "wN", -diff -c -r -N /usr/src/usr.bin/vi/ex/excmd.h.stub ./ex/excmd.h.stub -*** /usr/src/usr.bin/vi/ex/excmd.h.stub Wed Aug 17 08:36:28 1994 ---- ./ex/excmd.h.stub Sat Dec 14 11:54:15 1996 -*************** -*** 69,74 **** ---- 69,79 ---- - #define E_NORC 0x0800000 /* Not from a .exrc or EXINIT. */ - #define E_ZERO 0x1000000 /* 0 is a legal addr1. */ - #define E_ZERODEF 0x2000000 /* 0 is default addr1 of empty files. */ -+ -+ #ifdef GTAGS -+ #define E_REFERENCE 0x4000000 /* locate function references */ -+ #define E_GTAGSELECT 0x8000000 /* current line is gtags entry */ -+ #endif - u_int32_t flags; - char *syntax; /* Syntax script. */ - char *usage; /* Usage line. */ -*************** -*** 234,239 **** ---- 239,245 ---- - EXPROTO(ex_fg); - EXPROTO(ex_file); - EXPROTO(ex_global); -+ EXPROTO(ex_gtagselect); - EXPROTO(ex_help); - EXPROTO(ex_insert); - EXPROTO(ex_join); -diff -c -r -N /usr/src/usr.bin/vi/svi/svi_refresh.c ./svi/svi_refresh.c -*** /usr/src/usr.bin/vi/svi/svi_refresh.c Tue May 30 15:35:56 1995 ---- ./svi/svi_refresh.c Sat Dec 14 11:54:16 1996 -*************** -*** 725,731 **** ---- 725,736 ---- - EXF *ep; - { - size_t cols, curlen, endpoint, len, midpoint; -+ #ifdef GTAGS -+ char *p, buf[30]; -+ recno_t last; -+ #else - char *p, buf[20]; -+ #endif - - /* Clear the mode line. */ - MOVE(sp, INFOLINE(sp), 0); -*************** -*** 746,751 **** ---- 751,765 ---- - - curlen = 0; - if (sp->q.cqe_next != (void *)&sp->gp->dq) { -+ #ifdef GTAGS -+ if (F_ISSET(sp->frp, FR_GTAGSTMP)) { -+ if (file_lline(sp, ep, &last)) { -+ return (1); -+ } -+ sprintf(buf, "[GTAGS SELECT MODE] %d lines", last); -+ p = buf; -+ } else { -+ #endif - for (p = sp->frp->name; *p != '\0'; ++p); - while (--p > sp->frp->name) { - if (*p == '/') { -*************** -*** 758,764 **** - break; - } - } -! - MOVE(sp, INFOLINE(sp), 0); - standout(); - for (; *p != '\0'; ++p) ---- 772,780 ---- - break; - } - } -! #ifdef GTAGS -! } -! #endif - MOVE(sp, INFOLINE(sp), 0); - standout(); - for (; *p != '\0'; ++p) -diff -c -r -N /usr/src/usr.bin/vi/vi/v_ex.c ./vi/v_ex.c -*** /usr/src/usr.bin/vi/vi/v_ex.c Thu Aug 18 10:15:03 1994 ---- ./vi/v_ex.c Sat Dec 14 11:54:16 1996 -*************** -*** 298,303 **** ---- 298,308 ---- - ARGS *ap[2], a; - EXCMDARG cmd; - -+ #ifdef GTAGS -+ if (O_ISSET(sp, O_GTAGSMODE) && vp->m_start.cno == 0) -+ excmd(&cmd, C_RTAG, 0, OOBLNO, 0, 0, ap, &a, vp->keyword); -+ else -+ #endif - excmd(&cmd, C_TAG, 0, OOBLNO, 0, 0, ap, &a, vp->keyword); - return (sp->s_ex_cmd(sp, ep, &cmd, &vp->m_final)); - } -diff -c -r -N /usr/src/usr.bin/vi/vi/v_scroll.c ./vi/v_scroll.c -*** /usr/src/usr.bin/vi/vi/v_scroll.c Thu Aug 18 10:15:15 1994 ---- ./vi/v_scroll.c Sat Dec 14 11:54:16 1996 -*************** -*** 255,260 **** ---- 255,269 ---- - EXF *ep; - VICMDARG *vp; - { -+ #ifdef GTAGS -+ EXCMDARG cmd; -+ -+ if (F_ISSET(sp->frp, FR_GTAGSTMP)) { -+ memset(&cmd, 0, sizeof(EXCMDARG)); -+ cmd.cmd = &cmds[C_GTAGSELECT]; -+ return (sp->s_ex_cmd(sp, ep, &cmd, &vp->m_final)); -+ } -+ #endif - /* - * If it's a script window, exec the line, - * otherwise it's the same as v_down(). |