/* vi:set ts=8 sts=4 sw=4:
 *
 * CSCOPE support for Vim added by Andy Kahn <kahn@zk3.dec.com>
 * Ported to Win32 by Sergey Khorev <sergey.khorev@gmail.com>
 *
 * The basic idea/structure of cscope for Vim was borrowed from Nvi.
 * There might be a few lines of code that look similar to what Nvi
 * has.  If this is a problem and requires inclusion of the annoying
 * BSD license, then sue me; I'm not worth much anyway.
 */

#if defined(FEAT_CSCOPE) || defined(PROTO)

#if defined(UNIX)
# include <sys/types.h>		/* pid_t */
# include <sys/stat.h>		/* dev_t, ino_t */
#else
# if defined (WIN32)
#  ifndef WIN32_LEAN_AND_MEAN
#   define WIN32_LEAN_AND_MEAN
#  endif
#  include <windows.h>
# endif
#endif

#define CSCOPE_SUCCESS		0
#define CSCOPE_FAILURE		-1
#define CSCOPE_MAX_CONNECTIONS	8   /* you actually need more? */

#define	CSCOPE_DBFILE		"cscope.out"
#define	CSCOPE_PROMPT		">> "

/*
 * s 0name	Find this C symbol
 * g 1name	Find this definition
 * d 2name	Find functions called by this function
 * c 3name	Find functions calling this function
 * t 4string	find text string (cscope 12.9)
 * t 4name	Find assignments to (cscope 13.3)
 *   5pattern	change pattern -- NOT USED
 * e 6pattern	Find this egrep pattern
 * f 7name	Find this file
 * i 8name	Find files #including this file
 */
#define	FIND_USAGE "find c|d|e|f|g|i|s|t name"
#define FIND_HELP "\n\
       c: Find functions calling this function\n\
       d: Find functions called by this function\n\
       e: Find this egrep pattern\n\
       f: Find this file\n\
       g: Find this definition\n\
       i: Find files #including this file\n\
       s: Find this C symbol\n\
       t: Find assignments to\n"


typedef struct {
    char *  name;
    int     (*func) __ARGS((exarg_T *eap));
    char *  help;
    char *  usage;
    int	    cansplit;		/* if supports splitting window */
} cscmd_T;

typedef struct csi {
    char *	    fname;	/* cscope db name */
    char *	    ppath;	/* path to prepend (the -P option) */
    char *	    flags;	/* additional cscope flags/options (e.g, -p2) */
#if defined(UNIX)
    pid_t	    pid;	/* PID of the connected cscope process. */
    dev_t	    st_dev;	/* ID of dev containing cscope db */
    ino_t	    st_ino;	/* inode number of cscope db */
#else
# if defined(WIN32)
    DWORD	    pid;	/* PID of the connected cscope process. */
    HANDLE	    hProc;	/* cscope process handle */
    DWORD	    nVolume;	/* Volume serial number, instead of st_dev */
    DWORD	    nIndexHigh;	/* st_ino has no meaning in the Windows */
    DWORD	    nIndexLow;
# endif
#endif

    FILE *	    fr_fp;	/* from cscope: FILE. */
    FILE *	    to_fp;	/* to cscope: FILE. */
} csinfo_T;

typedef enum { Add, Find, Help, Kill, Reset, Show } csid_e;

typedef enum {
    Store,
    Get,
    Free,
    Print
} mcmd_e;


#endif	/* FEAT_CSCOPE */

/* the end */
