xref: /freebsd/contrib/nvi/ex/tag.h (revision b8ba871b)
1b8ba871bSPeter Wemm /*-
2b8ba871bSPeter Wemm  * Copyright (c) 1992, 1993, 1994
3b8ba871bSPeter Wemm  *	The Regents of the University of California.  All rights reserved.
4b8ba871bSPeter Wemm  * Copyright (c) 1992, 1993, 1994, 1995, 1996
5b8ba871bSPeter Wemm  *	Keith Bostic.  All rights reserved.
6b8ba871bSPeter Wemm  * Copyright (c) 1994, 1996
7b8ba871bSPeter Wemm  *	Rob Mayoff.  All rights reserved.
8b8ba871bSPeter Wemm  *
9b8ba871bSPeter Wemm  * See the LICENSE file for redistribution information.
10b8ba871bSPeter Wemm  */
11b8ba871bSPeter Wemm 
12b8ba871bSPeter Wemm /*
13b8ba871bSPeter Wemm  * Cscope connection information.  One of these is maintained per cscope
14b8ba871bSPeter Wemm  * connection, linked from the EX_PRIVATE structure.
15b8ba871bSPeter Wemm  */
16b8ba871bSPeter Wemm struct _csc {
17b8ba871bSPeter Wemm 	SLIST_ENTRY(_csc) q;	/* Linked list of cscope connections. */
18b8ba871bSPeter Wemm 
19b8ba871bSPeter Wemm 	char		*dname;	/* Base directory of this cscope connection. */
20b8ba871bSPeter Wemm 	size_t		 dlen;	/* Length of base directory. */
21b8ba871bSPeter Wemm 	pid_t		 pid;	/* PID of the connected cscope process. */
22b8ba871bSPeter Wemm 	struct timespec	 mtim;	/* Last modification time of cscope database. */
23b8ba871bSPeter Wemm 
24b8ba871bSPeter Wemm 	FILE	*from_fp;	/* from cscope: FILE. */
25b8ba871bSPeter Wemm 	int	 from_fd;	/* from cscope: file descriptor. */
26b8ba871bSPeter Wemm 	FILE	*to_fp;		/* to cscope: FILE. */
27b8ba871bSPeter Wemm 	int	 to_fd;		/* to cscope: file descriptor. */
28b8ba871bSPeter Wemm 
29b8ba871bSPeter Wemm 	char   **paths;		/* Array of search paths for this cscope. */
30b8ba871bSPeter Wemm 	char	*pbuf;		/* Search path buffer. */
31b8ba871bSPeter Wemm 	size_t	 pblen;		/* Search path buffer length. */
32b8ba871bSPeter Wemm 
33b8ba871bSPeter Wemm 	char	 buf[1];	/* Variable length buffer. */
34b8ba871bSPeter Wemm };
35b8ba871bSPeter Wemm 
36b8ba871bSPeter Wemm /*
37b8ba871bSPeter Wemm  * Tag file information.  One of these is maintained per tag file, linked
38b8ba871bSPeter Wemm  * from the EXPRIVATE structure.
39b8ba871bSPeter Wemm  */
40b8ba871bSPeter Wemm struct _tagf {			/* Tag files. */
41b8ba871bSPeter Wemm 	TAILQ_ENTRY(_tagf) q;	/* Linked list of tag files. */
42b8ba871bSPeter Wemm 	char	*name;		/* Tag file name. */
43b8ba871bSPeter Wemm 	int	 errnum;	/* Errno. */
44b8ba871bSPeter Wemm 
45b8ba871bSPeter Wemm #define	TAGF_ERR	0x01	/* Error occurred. */
46b8ba871bSPeter Wemm #define	TAGF_ERR_WARN	0x02	/* Error reported. */
47b8ba871bSPeter Wemm 	u_int8_t flags;
48b8ba871bSPeter Wemm };
49b8ba871bSPeter Wemm 
50b8ba871bSPeter Wemm /*
51b8ba871bSPeter Wemm  * Tags are structured internally as follows:
52b8ba871bSPeter Wemm  *
53b8ba871bSPeter Wemm  * +----+    +----+	+----+     +----+
54b8ba871bSPeter Wemm  * | EP | -> | Q1 | <-- | T1 | <-- | T2 |
55b8ba871bSPeter Wemm  * +----+    +----+ --> +----+ --> +----+
56b8ba871bSPeter Wemm  *	     |
57b8ba871bSPeter Wemm  *	     +----+     +----+
58b8ba871bSPeter Wemm  *	     | Q2 | <-- | T1 |
59b8ba871bSPeter Wemm  *	     +----+ --> +----+
60b8ba871bSPeter Wemm  *	     |
61b8ba871bSPeter Wemm  *	     +----+	+----+
62b8ba871bSPeter Wemm  *	     | Q3 | <-- | T1 |
63b8ba871bSPeter Wemm  *	     +----+ --> +----+
64b8ba871bSPeter Wemm  *
65b8ba871bSPeter Wemm  * Each Q is a TAGQ, or tag "query", which is the result of one tag or cscope
66b8ba871bSPeter Wemm  * command.  Each Q references one or more TAG's, or tagged file locations.
67b8ba871bSPeter Wemm  *
68b8ba871bSPeter Wemm  * tag:		put a new Q at the head	(^])
69b8ba871bSPeter Wemm  * tagnext:	T1 -> T2 inside Q	(^N)
70b8ba871bSPeter Wemm  * tagprev:	T2 -> T1 inside Q	(^P)
71b8ba871bSPeter Wemm  * tagpop:	discard Q		(^T)
72b8ba871bSPeter Wemm  * tagtop:	discard all Q
73b8ba871bSPeter Wemm  */
74b8ba871bSPeter Wemm struct _tag {			/* Tag list. */
75b8ba871bSPeter Wemm 	TAILQ_ENTRY(_tag) q;	/* Linked list of tags. */
76b8ba871bSPeter Wemm 
77b8ba871bSPeter Wemm 				/* Tag pop/return information. */
78b8ba871bSPeter Wemm 	FREF	*frp;		/* Saved file. */
79b8ba871bSPeter Wemm 	recno_t	 lno;		/* Saved line number. */
80b8ba871bSPeter Wemm 	size_t	 cno;		/* Saved column number. */
81b8ba871bSPeter Wemm 
82b8ba871bSPeter Wemm 	char	*fname;		/* Filename. */
83b8ba871bSPeter Wemm 	size_t	 fnlen;		/* Filename length. */
84b8ba871bSPeter Wemm 	recno_t	 slno;		/* Search line number. */
85b8ba871bSPeter Wemm 	CHAR_T	*search;	/* Search string. */
86b8ba871bSPeter Wemm 	size_t	 slen;		/* Search string length. */
87b8ba871bSPeter Wemm 	CHAR_T	*msg;		/* Message string. */
88b8ba871bSPeter Wemm 	size_t	 mlen;		/* Message string length. */
89b8ba871bSPeter Wemm 
90b8ba871bSPeter Wemm 	CHAR_T	 buf[1];	/* Variable length buffer. */
91b8ba871bSPeter Wemm };
92b8ba871bSPeter Wemm 
93b8ba871bSPeter Wemm struct _tagq {			/* Tag queue. */
94b8ba871bSPeter Wemm 	TAILQ_ENTRY(_tagq) q;	/* Linked list of tag queues. */
95b8ba871bSPeter Wemm 				/* This queue's tag list. */
96b8ba871bSPeter Wemm 	TAILQ_HEAD(_tagqh, _tag) tagq[1];
97b8ba871bSPeter Wemm 
98b8ba871bSPeter Wemm 	TAG	*current;	/* Current TAG within the queue. */
99b8ba871bSPeter Wemm 
100b8ba871bSPeter Wemm 	char	*tag;		/* Tag string. */
101b8ba871bSPeter Wemm 	size_t	 tlen;		/* Tag string length. */
102b8ba871bSPeter Wemm 
103b8ba871bSPeter Wemm #define	TAG_CSCOPE	0x01	/* Cscope tag. */
104b8ba871bSPeter Wemm 	u_int8_t flags;
105b8ba871bSPeter Wemm 
106b8ba871bSPeter Wemm 	char	 buf[1];	/* Variable length buffer. */
107b8ba871bSPeter Wemm };
108