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