summaryrefslogtreecommitdiffstats
path: root/contrib/global/nvi-1.34.diff
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/global/nvi-1.34.diff')
-rw-r--r--contrib/global/nvi-1.34.diff900
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, &gtagselect, 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), &gtagselect,
-+ 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().
OpenPOWER on IntegriCloud