rcs.h revision 17721
117721Speter/* $CVSid: @(#)rcs.h 1.18 94/09/23 $	 */
217721Speter
317721Speter/*
417721Speter * Copyright (c) 1992, Brian Berliner and Jeff Polk
517721Speter * Copyright (c) 1989-1992, Brian Berliner
617721Speter *
717721Speter * You may distribute under the terms of the GNU General Public License as
817721Speter * specified in the README file that comes with the CVS 1.4 kit.
917721Speter *
1017721Speter * RCS source control definitions needed by rcs.c and friends
1117721Speter */
1217721Speter
1317721Speter#define	RCS		"rcs"
1417721Speter#define	RCS_CI		"ci"
1517721Speter#define	RCS_CO		"co"
1617721Speter#define	RCS_RLOG	"rlog"
1717721Speter#define	RCS_DIFF	"rcsdiff"
1817721Speter#define	RCS_RCSMERGE	"rcsmerge"
1917721Speter#define	RCS_MERGE_PAT	"^>>>>>>> "	/* runs "grep" with this pattern */
2017721Speter#define	RCSEXT		",v"
2117721Speter#define RCSPAT		"*,v"
2217721Speter#define	RCSHEAD		"head"
2317721Speter#define	RCSBRANCH	"branch"
2417721Speter#define	RCSSYMBOLS	"symbols"
2517721Speter#define	RCSDATE		"date"
2617721Speter#define	RCSDESC		"desc"
2717721Speter#define RCSEXPAND	"expand"
2817721Speter
2917721Speter/* Used by the version of death support which resulted from old
3017721Speter   versions of CVS (e.g. 1.5 if you define DEATH_SUPPORT and not
3117721Speter   DEATH_STATE).  Only a hacked up RCS (used by those old versions of
3217721Speter   CVS) will put this into RCS files.  Considered obsolete.  */
3317721Speter#define RCSDEAD		"dead"
3417721Speter
3517721Speter#define	DATEFORM	"%02d.%02d.%02d.%02d.%02d.%02d"
3617721Speter#define	SDATEFORM	"%d.%d.%d.%d.%d.%d"
3717721Speter
3817721Speter/*
3917721Speter * Opaque structure definitions used by RCS specific lookup routines
4017721Speter */
4117721Speter#define VALID	0x1			/* flags field contains valid data */
4217721Speter#define	INATTIC	0x2			/* RCS file is located in the Attic */
4317721Speter#define PARTIAL 0x4			/* RCS file not completly parsed */
4417721Speter
4517721Speterstruct rcsnode
4617721Speter{
4717721Speter    int refcount;
4817721Speter    int flags;
4917721Speter    char *path;
5017721Speter    char *head;
5117721Speter    char *branch;
5217721Speter    char *symbols_data;
5317721Speter    char *expand;
5417721Speter    List *symbols;
5517721Speter    List *versions;
5617721Speter};
5717721Speter
5817721Spetertypedef struct rcsnode RCSNode;
5917721Speter
6017721Speterstruct rcsversnode
6117721Speter{
6217721Speter    char *version;
6317721Speter    char *date;
6417721Speter    char *author;
6517721Speter    char *next;
6617721Speter    int dead;
6717721Speter    List *branches;
6817721Speter};
6917721Spetertypedef struct rcsversnode RCSVers;
7017721Speter
7117721Speter/*
7217721Speter * CVS reserves all even-numbered branches for its own use.  "magic" branches
7317721Speter * (see rcs.c) are contained as virtual revision numbers (within symbolic
7417721Speter * tags only) off the RCS_MAGIC_BRANCH, which is 0.  CVS also reserves the
7517721Speter * ".1" branch for vendor revisions.  So, if you do your own branching, you
7617721Speter * should limit your use to odd branch numbers starting at 3.
7717721Speter */
7817721Speter#define	RCS_MAGIC_BRANCH	0
7917721Speter
8017721Speter/*
8117721Speter * exported interfaces
8217721Speter */
8317721SpeterRCSNode *RCS_parse PROTO((const char *file, const char *repos));
8417721SpeterRCSNode *RCS_parsercsfile PROTO((char *rcsfile));
8517721Speterchar *RCS_check_kflag PROTO((const char *arg));
8617721Speterchar *RCS_getdate PROTO((RCSNode * rcs, char *date, int force_tag_match));
8717721Speterchar *RCS_gettag PROTO((RCSNode * rcs, char *symtag, int force_tag_match,
8817721Speter			int return_both));
8917721Speterchar *RCS_getversion PROTO((RCSNode * rcs, char *tag, char *date,
9017721Speter		      int force_tag_match, int return_both));
9117721Speterchar *RCS_magicrev PROTO((RCSNode *rcs, char *rev));
9217721Speterint RCS_isbranch PROTO((RCSNode *rcs, const char *rev));
9317721Speterint RCS_nodeisbranch PROTO((RCSNode *rcs, const char *tag));
9417721Speterchar *RCS_whatbranch PROTO((RCSNode *rcs, const char *tag));
9517721Speterchar *RCS_head PROTO((RCSNode * rcs));
9617721Speterint RCS_datecmp PROTO((char *date1, char *date2));
9717721Spetertime_t RCS_getrevtime PROTO((RCSNode * rcs, char *rev, char *date, int fudge));
9817721SpeterList *RCS_symbols PROTO((RCSNode *rcs));
9917721Spetervoid RCS_check_tag PROTO((const char *tag));
10017721Spetervoid freercsnode PROTO((RCSNode ** rnodep));
10117721Speterchar *RCS_getbranch PROTO((RCSNode * rcs, char *tag, int force_tag_match));
10217721Speter
10317721Speterint RCS_isdead PROTO((RCSNode *, const char *));
10417721Speterchar *RCS_getexpand PROTO ((RCSNode *));
105