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