summaryrefslogtreecommitdiff
path: root/contrib/global/nvi-1.66.diff
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/global/nvi-1.66.diff')
-rw-r--r--contrib/global/nvi-1.66.diff673
1 files changed, 673 insertions, 0 deletions
diff --git a/contrib/global/nvi-1.66.diff b/contrib/global/nvi-1.66.diff
new file mode 100644
index 0000000000000..bf1400b5679ab
--- /dev/null
+++ b/contrib/global/nvi-1.66.diff
@@ -0,0 +1,673 @@
+diff -c -r -N /usr/src/usr.bin/nvi-1.66.org/build/Makefile ./build/Makefile
+*** /usr/src/usr.bin/nvi-1.66.org/build/Makefile Tue May 5 15:57:21 1998
+--- ./build/Makefile Sun Aug 16 03:22:53 1998
+***************
+*** 3,9 ****
+ # from: @(#)Makefile.in 8.56 (Berkeley) 5/18/96
+
+ WARNS= 0
+! CPPFLAGS+=-I${.CURDIR} -I${.CURDIR}/../include
+
+ LDADD+= -lcurses -ltermcap
+ DPADD+= ${LIBCURSES} ${LIBTERMCAP}
+--- 3,9 ----
+ # from: @(#)Makefile.in 8.56 (Berkeley) 5/18/96
+
+ WARNS= 0
+! CPPFLAGS+=-I${.CURDIR} -I${.CURDIR}/../include -DGTAGS
+
+ LDADD+= -lcurses -ltermcap
+ DPADD+= ${LIBCURSES} ${LIBTERMCAP}
+diff -c -r -N /usr/src/usr.bin/nvi-1.66.org/common/main.c ./common/main.c
+*** /usr/src/usr.bin/nvi-1.66.org/common/main.c Tue May 5 15:57:26 1998
+--- ./common/main.c Sun Aug 16 03:27:19 1998
+***************
+*** 63,68 ****
+--- 63,71 ----
+ size_t len;
+ u_int flags;
+ int ch, fd, flagchk, lflag, startup, readonly, rval, silent;
++ #ifdef GTAGS
++ int gtags = 0;
++ #endif
+ char *tag_f, *wsizearg;
+ char path[256];
+
+***************
+*** 113,123 ****
+--- 116,135 ----
+ /* Set the file snapshot flag. */
+ F_SET(gp, G_SNAPSHOT);
+
++ #ifdef GTAGS
++ #ifdef DEBUG
++ while ((ch = getopt(argc, argv, "c:D:eFGlRrsT:t:vw:")) != EOF)
++ #else
++ while ((ch = getopt(argc, argv, "c:eFGlRrst:vw:")) != EOF)
++ #endif
++ #else
+ #ifdef DEBUG
+ while ((ch = getopt(argc, argv, "c:D:eFlRrsT:t:vw:")) != EOF)
+ #else
+ while ((ch = getopt(argc, argv, "c:eFlRrst:vw:")) != EOF)
+ #endif
++ #endif
++
+ switch (ch) {
+ case 'c': /* Run the command. */
+ /*
+***************
+*** 167,172 ****
+--- 179,189 ----
+ case 'F': /* No snapshot. */
+ F_CLR(gp, G_SNAPSHOT);
+ break;
++ #ifdef GTAGS
++ case 'G': /* gtags mode. */
++ gtags = 1;
++ break;
++ #endif
+ case 'l': /* Set lisp, showmatch options. */
+ lflag = 1;
+ break;
+***************
+*** 258,263 ****
+--- 275,284 ----
+ { int oargs[4], *oargp = oargs;
+ if (readonly) /* Command-line options. */
+ *oargp++ = O_READONLY;
++ #ifdef GTAGS
++ if (gtags)
++ *oargp++ = O_GTAGSMODE;
++ #endif
+ if (lflag) {
+ *oargp++ = O_LISP;
+ *oargp++ = O_SHOWMATCH;
+diff -c -r -N /usr/src/usr.bin/nvi-1.66.org/common/options.c ./common/options.c
+*** /usr/src/usr.bin/nvi-1.66.org/common/options.c Tue May 5 15:57:26 1998
+--- ./common/options.c Sun Aug 16 03:29:51 1998
+***************
+*** 80,85 ****
+--- 80,89 ----
+ {"filec", NULL, OPT_STR, 0},
+ /* O_FLASH HPUX */
+ {"flash", NULL, OPT_1BOOL, 0},
++ #ifdef GTAGS
++ /* O_GTAGSMODE FreeBSD, NetBSD */
++ {"gtagsmode", NULL, OPT_0BOOL, 0},
++ #endif
+ /* O_HARDTABS 4BSD */
+ {"hardtabs", NULL, OPT_NUM, 0},
+ /* O_ICLOWER 4.4BSD */
+***************
+*** 240,245 ****
+--- 244,252 ----
+ {"eb", O_ERRORBELLS}, /* 4BSD */
+ {"ed", O_EDCOMPATIBLE}, /* 4BSD */
+ {"ex", O_EXRC}, /* System V (undocumented) */
++ #ifdef GTAGS
++ {"gt", O_GTAGSMODE}, /* FreeBSD, NetBSD */
++ #endif
+ {"ht", O_HARDTABS}, /* 4BSD */
+ {"ic", O_IGNORECASE}, /* 4BSD */
+ {"li", O_LINES}, /* 4.4BSD */
+diff -c -r -N /usr/src/usr.bin/nvi-1.66.org/docs/USD.doc/vi.man/vi.1 ./docs/USD.doc/vi.man/vi.1
+*** /usr/src/usr.bin/nvi-1.66.org/docs/USD.doc/vi.man/vi.1 Tue May 5 15:57:31 1998
+--- ./docs/USD.doc/vi.man/vi.1 Sun Aug 16 03:34:12 1998
+***************
+*** 40,46 ****
+ .SH SYNOPSIS
+ .B ex
+ [\c
+! .B -eFRrsv\c
+ ] [\c
+ .BI -c " cmd"\c
+ ] [\c
+--- 40,46 ----
+ .SH SYNOPSIS
+ .B ex
+ [\c
+! .B -eFGRrsv\c
+ ] [\c
+ .BI -c " cmd"\c
+ ] [\c
+***************
+*** 51,57 ****
+ .br
+ .B vi
+ [\c
+! .B -eFlRrv\c
+ ] [\c
+ .BI -c " cmd"\c
+ ] [\c
+--- 51,57 ----
+ .br
+ .B vi
+ [\c
+! .B -eFGlRrv\c
+ ] [\c
+ .BI -c " cmd"\c
+ ] [\c
+***************
+*** 62,68 ****
+ .br
+ .B view
+ [\c
+! .B -eFRrv\c
+ ] [\c
+ .BI -c " cmd"\c
+ ] [\c
+--- 62,68 ----
+ .br
+ .B view
+ [\c
+! .B -eFGRrv\c
+ ] [\c
+ .BI -c " cmd"\c
+ ] [\c
+***************
+*** 135,140 ****
+--- 135,143 ----
+ (The default is to make a copy in case someone else modifies
+ the file during your edit session.)
+ .TP
++ .B \-G
++ Start editing in gtags mode, as if the gtagsmode option was set.
++ .TP
+ .B \-l
+ Start editing with the lisp and showmatch options set.
+ .TP
+***************
+*** 441,446 ****
+--- 444,451 ----
+ .TP
+ .B "<control-]>"
+ Push a tag reference onto the tag stack.
++ In gtagsmode, if at the first column of line,
++ locate function references otherwise function definitions.
+ .TP
+ .B "<control-^>"
+ Switch to the most recently edited file.
+***************
+*** 952,957 ****
+--- 957,965 ----
+ .B "rew[ind][!]"
+ Rewind the argument list.
+ .TP
++ .B "rta[g][!] tagstring"
++ Edit the file refering the specified tag. (Only in gtagsmode)
++ .TP
+ .B "se[t] [option[=[value]] ...] [nooption ...] [option? ...] [all]"
+ Display or set editor options.
+ .TP
+***************
+*** 1121,1126 ****
+--- 1129,1137 ----
+ .TP
+ .B "flash [on]"
+ Flash the screen instead of beeping the keyboard on error.
++ .TP
++ .B "gtagsmode, gt [off]"
++ Use GTAGS and GRTAGS instead of tags.
+ .TP
+ .B "hardtabs, ht [8]"
+ Set the spacing between hardware tab settings.
+diff -c -r -N /usr/src/usr.bin/nvi-1.66.org/ex/ex.h ./ex/ex.h
+*** /usr/src/usr.bin/nvi-1.66.org/ex/ex.h Tue May 5 15:57:37 1998
+--- ./ex/ex.h Sun Aug 16 03:35:58 1998
+***************
+*** 162,167 ****
+--- 162,170 ----
+ #define E_NEWLINE 0x00800000 /* Found ending <newline>. */
+ #define E_USELASTCMD 0x01000000 /* Use the last command. */
+ #define E_VISEARCH 0x02000000 /* It's really a vi search command. */
++ #ifdef GTAGS
++ #define E_REFERENCE 0x04000000 /* locate function references */
++ #endif
+ u_int32_t flags; /* Current flags. */
+ };
+
+diff -c -r -N /usr/src/usr.bin/nvi-1.66.org/ex/ex_cmd.c ./ex/ex_cmd.c
+*** /usr/src/usr.bin/nvi-1.66.org/ex/ex_cmd.c Tue May 5 15:57:37 1998
+--- ./ex/ex_cmd.c Sun Aug 16 03:38:03 1998
+***************
+*** 302,307 ****
+--- 302,314 ----
+ "!",
+ "rew[ind][!]",
+ "re-edit all the files in the file argument list"},
++ #ifdef GTAGS
++ /* C_RTAG */
++ {"rtag", ex_rtag_push, E_NEWSCREEN,
++ "!w1o",
++ "rta[g][!] [string]",
++ "edit the file containing the tag"},
++ #endif
+ /*
+ * !!!
+ * Adding new commands starting with 's' may break the substitute command code
+diff -c -r -N /usr/src/usr.bin/nvi-1.66.org/ex/ex_tag.c ./ex/ex_tag.c
+*** /usr/src/usr.bin/nvi-1.66.org/ex/ex_tag.c Tue May 5 15:57:41 1998
+--- ./ex/ex_tag.c Sun Aug 16 03:46:43 1998
+***************
+*** 46,51 ****
+--- 46,55 ----
+ static int compare __P((char *, char *, char *));
+ static void ctag_file __P((SCR *, TAGF *, char *, char **, size_t *));
+ static int ctag_search __P((SCR *, char *, char *));
++ #ifdef GTAGS
++ static int getentry __P((char *, char **, char **, char **));
++ static TAGQ *gtag_slist __P((SCR *, char *, int));
++ #endif
+ static int ctag_sfile __P((SCR *, TAGF *, TAGQ *, char *));
+ static TAGQ *ctag_slist __P((SCR *, char *));
+ static char *linear_search __P((char *, char *, char *));
+***************
+*** 89,94 ****
+--- 93,117 ----
+ return (0);
+ }
+
++ #ifdef GTAGS
++ /*
++ * ex_rtag_push -- ^]
++ * :rtag[!] [string]
++ *
++ * Enter a new TAGQ context based on a ctag string.
++ *
++ * PUBLIC: int ex_rtag_push __P((SCR *, EXCMD *));
++ */
++ int
++ ex_rtag_push(sp, cmdp)
++ SCR *sp;
++ EXCMD *cmdp;
++ {
++ F_SET(cmdp, E_REFERENCE);
++ return ex_tag_push(sp, cmdp);
++ }
++ #endif
++
+ /*
+ * ex_tag_push -- ^]
+ * :tag[!] [string]
+***************
+*** 138,143 ****
+--- 161,172 ----
+ }
+
+ /* Get the tag information. */
++ #ifdef GTAGS
++ if (O_ISSET(sp, O_GTAGSMODE)) {
++ if ((tqp = gtag_slist(sp, exp->tag_last, F_ISSET(cmdp, E_REFERENCE))) == NULL)
++ return (1);
++ } else
++ #endif
+ if ((tqp = ctag_slist(sp, exp->tag_last)) == NULL)
+ return (1);
+
+***************
+*** 963,969 ****
+--- 992,1120 ----
+ (void)nonblank(sp, sp->lno, &sp->cno);
+ return (0);
+ }
++ #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 = buf;
++
++ for (*tag = p; *p && !isspace(*p); p++) /* tag name */
++ ;
++ if (*p == 0)
++ goto err;
++ *p++ = 0;
++ for (; *p && isspace(*p); p++) /* (skip blanks) */
++ ;
++ if (*p == 0)
++ goto err;
++ *line = p; /* line no */
++ for (*line = p; *p && !isspace(*p); p++)
++ ;
++ if (*p == 0)
++ goto err;
++ *p++ = 0;
++ for (; *p && isspace(*p); p++) /* (skip blanks) */
++ ;
++ if (*p == 0)
++ goto err;
++ *file = p; /* file name */
++ for (*file = p; *p && !isspace(*p); p++)
++ ;
++ if (*p == 0)
++ goto err;
++ *p = 0;
++
++ /* value check */
++ if (strlen(*tag) && strlen(*line) && strlen(*file) && atoi(*line) > 0)
++ return 1; /* OK */
++ err:
++ return 0; /* ERROR */
++ }
++
++ /*
++ * gtag_slist --
++ * Search the list of tags files for a tag, and return tag queue.
++ */
++ static TAGQ *
++ gtag_slist(sp, tag, ref)
++ SCR *sp;
++ char *tag;
++ int ref;
++ {
++ EX_PRIVATE *exp;
++ TAGF *tfp;
++ TAGQ *tqp;
++ size_t len;
++ int echk;
++ TAG *tp;
++ char *name, *file, *line;
++ char command[BUFSIZ];
++ char buf[BUFSIZ];
++ FILE *fp;
++
++ /* Allocate and initialize the tag queue structure. */
++ len = strlen(tag);
++ CALLOC_GOTO(sp, tqp, TAGQ *, 1, sizeof(TAGQ) + len + 1);
++ CIRCLEQ_INIT(&tqp->tagq);
++ tqp->tag = tqp->buf;
++ memcpy(tqp->tag, tag, (tqp->tlen = len) + 1);
++
++ /*
++ * Find the tag, only display missing file messages once, and
++ * then only if we didn't find the tag.
++ */
++ snprintf(command, sizeof(command), "global -%s '%s' 2>/dev/null", ref ? "rx" : "x", tag);
++ if (fp = popen(command, "r")) {
++ while (fgets(buf, sizeof(buf), fp)) {
++ if (buf[strlen(buf)-1] == '\n') /* chop(buf) */
++ buf[strlen(buf)-1] = 0;
++ else
++ while (fgetc(fp) != '\n')
++ ;
++ if (getentry(buf, &name, &file, &line) == 0) {
++ echk = 1;
++ F_SET(tfp, TAGF_ERR);
++ break;
++ }
++ CALLOC_GOTO(sp, tp,
++ TAG *, 1, sizeof(TAG) + strlen(file) + 1 + strlen(line) + 1);
++ tp->fname = tp->buf;
++ strcpy(tp->fname, file);
++ tp->fnlen = strlen(file);
++ tp->search = tp->fname + tp->fnlen + 1;
++ strcpy(tp->search, line);
++ CIRCLEQ_INSERT_TAIL(&tqp->tagq, tp, q);
++ }
++ pclose(fp);
++ }
++
++ /* Check to see if we found anything. */
++ if (tqp->tagq.cqh_first == (void *)&tqp->tagq) {
++ msgq_str(sp, M_ERR, tag, "162|%s: tag not found");
++ free(tqp);
++ return (NULL);
++ }
+
++ tqp->current = tqp->tagq.cqh_first;
++ return (tqp);
++
++ alloc_err:
++ return (NULL);
++ }
++ #endif
+ /*
+ * ctag_slist --
+ * Search the list of tags files for a tag, and return tag queue.
+diff -c -r -N /usr/src/usr.bin/nvi-1.66.org/include/ex_def.h ./include/ex_def.h
+*** /usr/src/usr.bin/nvi-1.66.org/include/ex_def.h Tue May 5 15:57:42 1998
+--- ./include/ex_def.h Sun Aug 16 03:49:40 1998
+***************
+*** 47,78 ****
+ #define C_RECOVER 46
+ #define C_RESIZE 47
+ #define C_REWIND 48
+! #define C_SUBSTITUTE 49
+! #define C_SCRIPT 50
+! #define C_SET 51
+! #define C_SHELL 52
+! #define C_SOURCE 53
+! #define C_STOP 54
+! #define C_SUSPEND 55
+! #define C_T 56
+! #define C_TAG 57
+! #define C_TAGNEXT 58
+! #define C_TAGPOP 59
+! #define C_TAGPREV 60
+! #define C_TAGTOP 61
+! #define C_TCLCMD 62
+! #define C_UNDO 63
+! #define C_UNABBREVIATE 64
+! #define C_UNMAP 65
+! #define C_V 66
+! #define C_VERSION 67
+! #define C_VISUAL_EX 68
+! #define C_VISUAL_VI 69
+! #define C_VIUSAGE 70
+! #define C_WRITE 71
+! #define C_WN 72
+! #define C_WQ 73
+! #define C_XIT 74
+! #define C_YANK 75
+! #define C_Z 76
+! #define C_SUBTILDE 77
+--- 47,79 ----
+ #define C_RECOVER 46
+ #define C_RESIZE 47
+ #define C_REWIND 48
+! #define C_RTAG 49
+! #define C_SUBSTITUTE 50
+! #define C_SCRIPT 51
+! #define C_SET 52
+! #define C_SHELL 53
+! #define C_SOURCE 54
+! #define C_STOP 55
+! #define C_SUSPEND 56
+! #define C_T 57
+! #define C_TAG 58
+! #define C_TAGNEXT 59
+! #define C_TAGPOP 60
+! #define C_TAGPREV 61
+! #define C_TAGTOP 62
+! #define C_TCLCMD 63
+! #define C_UNDO 64
+! #define C_UNABBREVIATE 65
+! #define C_UNMAP 66
+! #define C_V 67
+! #define C_VERSION 68
+! #define C_VISUAL_EX 69
+! #define C_VISUAL_VI 70
+! #define C_VIUSAGE 71
+! #define C_WRITE 72
+! #define C_WN 73
+! #define C_WQ 74
+! #define C_XIT 75
+! #define C_YANK 76
+! #define C_Z 77
+! #define C_SUBTILDE 78
+diff -c -r -N /usr/src/usr.bin/nvi-1.66.org/include/ex_extern.h ./include/ex_extern.h
+*** /usr/src/usr.bin/nvi-1.66.org/include/ex_extern.h Tue May 5 15:57:42 1998
+--- ./include/ex_extern.h Sun Aug 16 03:50:24 1998
+***************
+*** 92,97 ****
+--- 92,100 ----
+ char *, char **, size_t *, regex_t *, u_int));
+ void re_error __P((SCR *, int, regex_t *));
+ int ex_tag_first __P((SCR *, char *));
++ #ifdef GTAGS
++ int ex_rtag_push __P((SCR *, EXCMD *));
++ #endif
+ int ex_tag_push __P((SCR *, EXCMD *));
+ int ex_tag_next __P((SCR *, EXCMD *));
+ int ex_tag_prev __P((SCR *, EXCMD *));
+diff -c -r -N /usr/src/usr.bin/nvi-1.66.org/include/options_def.h ./include/options_def.h
+*** /usr/src/usr.bin/nvi-1.66.org/include/options_def.h Tue May 5 15:57:42 1998
+--- ./include/options_def.h Sun Aug 16 03:54:45 1998
+***************
+*** 16,77 ****
+ #define O_EXTENDED 15
+ #define O_FILEC 16
+ #define O_FLASH 17
+! #define O_HARDTABS 18
+! #define O_ICLOWER 19
+! #define O_IGNORECASE 20
+! #define O_KEYTIME 21
+! #define O_LEFTRIGHT 22
+! #define O_LINES 23
+! #define O_LISP 24
+! #define O_LIST 25
+! #define O_LOCKFILES 26
+! #define O_MAGIC 27
+! #define O_MATCHTIME 28
+! #define O_MESG 29
+! #define O_MODELINE 30
+! #define O_MSGCAT 31
+! #define O_NOPRINT 32
+! #define O_NUMBER 33
+! #define O_OCTAL 34
+! #define O_OPEN 35
+! #define O_OPTIMIZE 36
+! #define O_PARAGRAPHS 37
+! #define O_PRINT 38
+! #define O_PROMPT 39
+! #define O_READONLY 40
+! #define O_RECDIR 41
+! #define O_REDRAW 42
+! #define O_REMAP 43
+! #define O_REPORT 44
+! #define O_RULER 45
+! #define O_SCROLL 46
+! #define O_SEARCHINCR 47
+! #define O_SECTIONS 48
+! #define O_SECURE 49
+! #define O_SHELL 50
+! #define O_SHELLMETA 51
+! #define O_SHIFTWIDTH 52
+! #define O_SHOWMATCH 53
+! #define O_SHOWMODE 54
+! #define O_SIDESCROLL 55
+! #define O_SLOWOPEN 56
+! #define O_SOURCEANY 57
+! #define O_TABSTOP 58
+! #define O_TAGLENGTH 59
+! #define O_TAGS 60
+! #define O_TERM 61
+! #define O_TERSE 62
+! #define O_TILDEOP 63
+! #define O_TIMEOUT 64
+! #define O_TTYWERASE 65
+! #define O_VERBOSE 66
+! #define O_W1200 67
+! #define O_W300 68
+! #define O_W9600 69
+! #define O_WARN 70
+! #define O_WINDOW 71
+! #define O_WRAPLEN 72
+! #define O_WRAPMARGIN 73
+! #define O_WRAPSCAN 74
+! #define O_WRITEANY 75
+! #define O_OPTIONCOUNT 76
+--- 16,78 ----
+ #define O_EXTENDED 15
+ #define O_FILEC 16
+ #define O_FLASH 17
+! #define O_GTAGSMODE 18
+! #define O_HARDTABS 19
+! #define O_ICLOWER 20
+! #define O_IGNORECASE 21
+! #define O_KEYTIME 22
+! #define O_LEFTRIGHT 23
+! #define O_LINES 24
+! #define O_LISP 25
+! #define O_LIST 26
+! #define O_LOCKFILES 27
+! #define O_MAGIC 28
+! #define O_MATCHTIME 29
+! #define O_MESG 30
+! #define O_MODELINE 31
+! #define O_MSGCAT 32
+! #define O_NOPRINT 33
+! #define O_NUMBER 34
+! #define O_OCTAL 35
+! #define O_OPEN 36
+! #define O_OPTIMIZE 37
+! #define O_PARAGRAPHS 38
+! #define O_PRINT 39
+! #define O_PROMPT 40
+! #define O_READONLY 41
+! #define O_RECDIR 42
+! #define O_REDRAW 43
+! #define O_REMAP 44
+! #define O_REPORT 45
+! #define O_RULER 46
+! #define O_SCROLL 47
+! #define O_SEARCHINCR 48
+! #define O_SECTIONS 49
+! #define O_SECURE 50
+! #define O_SHELL 51
+! #define O_SHELLMETA 52
+! #define O_SHIFTWIDTH 53
+! #define O_SHOWMATCH 54
+! #define O_SHOWMODE 55
+! #define O_SIDESCROLL 56
+! #define O_SLOWOPEN 57
+! #define O_SOURCEANY 58
+! #define O_TABSTOP 59
+! #define O_TAGLENGTH 60
+! #define O_TAGS 61
+! #define O_TERM 62
+! #define O_TERSE 63
+! #define O_TILDEOP 64
+! #define O_TIMEOUT 65
+! #define O_TTYWERASE 66
+! #define O_VERBOSE 67
+! #define O_W1200 68
+! #define O_W300 69
+! #define O_W9600 70
+! #define O_WARN 71
+! #define O_WINDOW 72
+! #define O_WRAPLEN 73
+! #define O_WRAPMARGIN 74
+! #define O_WRAPSCAN 75
+! #define O_WRITEANY 76
+! #define O_OPTIONCOUNT 77
+diff -c -r -N /usr/src/usr.bin/nvi-1.66.org/vi/v_ex.c ./vi/v_ex.c
+*** /usr/src/usr.bin/nvi-1.66.org/vi/v_ex.c Tue May 5 15:57:45 1998
+--- ./vi/v_ex.c Sun Aug 16 03:55:38 1998
+***************
+*** 221,226 ****
+--- 221,231 ----
+ ARGS *ap[2], a;
+ EXCMD cmd;
+
++ #ifdef GTAGS
++ if (O_ISSET(sp, O_GTAGSMODE) && vp->m_start.cno == 0)
++ ex_cinit(&cmd, C_RTAG, 0, OOBLNO, 0, 0, ap);
++ else
++ #endif
+ ex_cinit(&cmd, C_TAG, 0, OOBLNO, 0, 0, ap);
+ ex_cadd(&cmd, &a, VIP(sp)->keyw, strlen(VIP(sp)->keyw));
+ return (v_exec_ex(sp, vp, &cmd));