1:
2: /*
3: * RCS common definitions and data structures
4: */
5: #define RCSBASE "$Header: /usr/src/new/rcs/src/RCS/rcsbase.h,v 3.7 83/10/19 04:22:11 lepreau Exp $"
6: /*****************************************************************************
7: * INSTRUCTIONS:
8: * =============
9: * For USG Unix, define USG; for BSD Unix, don't (see ifdef USG).
10: * For 4.2 bsd, define V4_2BSD; this will replace the routines
11: * getwd() and rename() with the corresponding ones in the C-library.
12: * V4_2BSD also selects different definitions for the macros NCPFN and NCPPN
13: * (max. number of characters per filename, number of characters per path name).
14: * Define STRICT_LOCKING appropriately (see STRICT_LOCKING).
15: * Change BYTESIZ if necessary.
16: *****************************************************************************
17: *
18: * Copyright (C) 1982 by Walter F. Tichy
19: * Purdue University
20: * Computer Science Department
21: * West Lafayette, IN 47907
22: *
23: * All rights reserved. No part of this software may be sold or distributed
24: * in any form or by any means without the prior written permission of the
25: * author.
26: * Report problems and direct all inquiries to Tichy@purdue (ARPA net).
27: */
28:
29:
30: /* $Log: rcsbase.h,v $
31: * Revision 3.7 83/10/19 04:22:11 lepreau
32: * Make teeny logsize big
33: *
34: * Revision 3.6 83/01/15 16:43:28 wft
35: * 4.2 prerelease
36: *
37: * Revision 3.6 83/01/15 16:43:28 wft
38: * Replaced dbm.h with BYTESIZ, fixed definition of rindex().
39: * Added variants of NCPFN and NCPPN for bsd 4.2, selected by defining V4_2BSD.
40: * Added macro DELNUMFORM to have uniform format for printing delta text nodes.
41: * Added macro DELETE to mark deleted deltas.
42: *
43: * Revision 3.5 82/12/10 12:16:56 wft
44: * Added two forms of DATEFORM, one using %02d, the other %.2d.
45: *
46: * Revision 3.4 82/12/04 20:01:25 wft
47: * added LOCKER, Locker, and USG (redefinition of rindex).
48: *
49: * Revision 3.3 82/12/03 12:22:04 wft
50: * Added dbm.h, stdio.h, RCSBASE, RCSSEP, RCSSUF, WORKMODE, TMPFILE3,
51: * PRINTDATE, PRINTTIME, map, and ctab; removed Suffix. Redefined keyvallength
52: * using NCPPN. Changed putc() to abort on write error.
53: *
54: * Revision 3.2 82/10/18 15:03:52 wft
55: * added macro STRICT_LOCKING, removed RCSUMASK.
56: * renamed JOINFILE[1,2] to JOINFIL[1,2].
57: *
58: * Revision 3.1 82/10/11 19:41:17 wft
59: * removed NBPW, NBPC, NCPW.
60: * added typdef int void to aid compiling
61: */
62:
63:
64:
65: #include <stdio.h>
66: #undef putc /* will be redefined */
67:
68:
69: #ifdef USG
70: # define rindex strrchr
71: # define DATEFORM "%.2d.%.2d.%.2d.%.2d.%.2d.%.2d"
72: #else
73: # define DATEFORM "%02d.%02d.%02d.%02d.%02d.%02d"
74: #endif
75: /* Make sure one of %02d or %.2d prints a number with a field width 2, with
76: * leading zeroes. For example, 0, 1, and 22 must be printed as 00, 01, and
77: * 22. Otherwise, there will be problems with the dates.
78: */
79:
80: #define PRINTDATE(file,date) fprintf(file,"%.2s/%.2s/%.2s",date,date+3,date+6)
81: #define PRINTTIME(file,date) fprintf(file,"%.2s:%.2s:%.2s",date+9,date+12,date+15)
82: /* print RCS format date and time in nice format from a string */
83:
84: /*
85: * Parameters
86: */
87: #define BYTESIZ 8 /* number of bits in a byte */
88:
89: #define STRICT_LOCKING 1 /* 0 sets the default locking to non-strict; */
90: /* used in experimental environments. */
91: /* 1 sets the default locking to strict; */
92: /* used in production environments. */
93: #define hshsize 239 /* hashtable size; MUST be prime and -1 mod 4 */
94: /* other choices: 547 or 719 */
95: #define strtsize (hshsize * 50) /* string table size */
96: #ifdef pdp11
97: # define logsize 1024 /* size of logmessage */
98: #else
99: # define logsize 4096
100: #endif
101: #define revlength 30 /* max. length of revision numbers */
102: #define datelength 20 /* length of a date in RCS format */
103: #define joinlength 20 /* number of joined revisions permitted */
104: #define RCSDIR "RCS/" /* subdirectory for RCS files */
105: #define RCSSUF 'v' /* suffix for RCS files */
106: #define RCSSEP ',' /* separator for RCSSUF */
107: #define KDELIM '$' /* delimiter for keywords */
108: #define VDELIM ':' /* separates keywords from values */
109: #define DEFAULTSTATE "Exp" /* default state of revisions */
110: #ifdef V4_2BSD
111: # define NCPFN 256 /* number of characters per filename */
112: # define NCPPN 1024 /* number of characters per pathname */
113: #else
114: # define NCPFN 14 /* number of characters per filename */
115: # define NCPPN 6*NCPFN /* number of characters per pathname */
116: #endif
117: #define keylength 20 /* buffer length for expansion keywords */
118: #define keyvallength NCPPN+revlength+datelength+60
119: /* buffer length for keyword expansion */
120:
121:
122:
123: #define true 1
124: #define false 0
125: #define nil 0
126: #define elsif else if
127: #define elif else if
128:
129:
130: /* temporary file names */
131:
132: #define NEWRCSFILE ",RCSnewXXXXXX"
133: #define DIFFILE ",RCSciXXXXXX"
134: #define TMPFILE1 ",RCSt1XXXXXX"
135: #define TMPFILE2 ",RCSt2XXXXXX"
136: #define TMPFILE3 ",RCSt3XXXXXX"
137: #define JOINFIL2 ",RCSj2XXXXXX"
138: #define JOINFIL3 ",RCSj3XXXXXX"
139:
140:
141: #define putc(x,p) (--(p)->_cnt>=0? ((int)(*(p)->_ptr++=(unsigned)(x))):fflsbuf((unsigned)(x),p))
142: /* This version of putc prints a char, but aborts on write error */
143:
144: #define GETC(in,out,echo) (echo?putc(getc(in),out):getc(in))
145: /* GETC writes a del-character (octal 177) on end of file */
146:
147: #define WORKMODE(RCSmode) (RCSmode&~0222)|((lockflag||!StrictLocks)?0600:0000)
148: /* computes mode of working file: same as RCSmode, but write permission */
149: /* determined by lockflag and StrictLocks. */
150:
151:
152: /* character classes and token codes */
153: enum tokens {
154: /* char classes*/ DIGIT, IDCHAR, NEWLN, LETTER, PERIOD, SBEGIN, SPACE, UNKN,
155: /* tokens */ COLON, DATE, EOFILE, ID, KEYW, NUM, SEMI, STRING,
156: };
157:
158: #define AT SBEGIN /* class SBEGIN (string begin) is returned by lex. anal. */
159: #define SDELIM '@' /* the actual character is needed for string handling*/
160: /* these must be changed consistently, for instance to:
161: * #define DQUOTE SBEGIN
162: * #define SDELIM '"'
163: * #define AT IDCHAR
164: * there should be no overlap among SDELIM, KDELIM, and VDELIM
165: */
166:
167: /* other characters */
168:
169: #define ACCENT IDCHAR
170: #define AMPER IDCHAR
171: #define BACKSL IDCHAR
172: #define BAR IDCHAR
173: #define COMMA UNKN
174: #define DIVIDE IDCHAR
175: #define DOLLAR IDCHAR
176: #define DQUOTE IDCHAR
177: #define EQUAL IDCHAR
178: #define EXCLA IDCHAR
179: #define GREAT IDCHAR
180: #define HASH IDCHAR
181: #define INSERT UNKN
182: #define LBRACE IDCHAR
183: #define LBRACK IDCHAR
184: #define LESS IDCHAR
185: #define LPARN IDCHAR
186: #define MINUS IDCHAR
187: #define PERCNT IDCHAR
188: #define PLUS IDCHAR
189: #define QUEST IDCHAR
190: #define RBRACE IDCHAR
191: #define RBRACK IDCHAR
192: #define RPARN IDCHAR
193: #define SQUOTE IDCHAR
194: #define TILDE IDCHAR
195: #define TIMES IDCHAR
196: #define UNDER IDCHAR
197: #define UPARR IDCHAR
198:
199:
200:
201:
202: /***************************************
203: * Data structures for the symbol table
204: ***************************************/
205:
206:
207: /* Hash table entry */
208: struct hshentry {
209: char * num; /* pointer to revision number (ASCIZ) */
210: char * date; /* pointer to date of checking */
211: char * author; /* login of person checking in */
212: char * lockedby; /* who locks the revision */
213: char * log; /* log message requested at checkin */
214: char * state; /* state of revision (Exp by default) */
215: struct branchhead * branches; /* list of first revisions on branches*/
216: struct hshentry * next; /* next revision on same branch */
217: int insertlns;/* lines inserted (computed by rlog) */
218: int deletelns;/* lines deleted (computed by rlog) */
219: char selector; /* marks entry for selection/deletion */
220: };
221:
222: /* list element for branch lists */
223: struct branchhead {
224: struct hshentry * hsh;
225: struct branchhead * nextbranch;
226: };
227:
228: /* accesslist element */
229: struct access {
230: char * login;
231: struct access * nextaccess;
232: };
233:
234: /* list element for locks */
235: struct lock {
236: char * login;
237: struct hshentry * delta;
238: struct lock * nextlock;
239: };
240:
241: /* list element for symbolic names */
242: struct assoc {
243: char * symbol;
244: struct hshentry * delta;
245: struct assoc * nextassoc;
246: };
247:
248:
249: /* common variables (getadmin and getdelta())*/
250: extern char * Comment;
251: extern struct access * AccessList;
252: extern struct assoc * Symbols;
253: extern struct lock * Locks;
254: extern struct hshentry * Head;
255: extern int StrictLocks;
256: extern int TotalDeltas;
257: static char copyright[]="Copyright (C) 1982 by Walter F. Tichy";
258:
259: /* common variables (lexical analyzer)*/
260: extern enum tokens map[];
261: #define ctab (&map[1])
262: extern struct hshentry hshtab[];
263: extern struct hshentry * nexthsh;
264: extern enum tokens nexttok;
265: extern int hshenter;
266: extern char * NextString;
267: extern char * cmdid;
268:
269: /* common routines */
270: extern int serror();
271: extern int faterror();
272: extern int fatserror();
273:
274: /*
275: * Markers for keyword expansion (used in co and ident)
276: */
277: #define AUTHOR "Author"
278: #define DATE "Date"
279: #define "Header"
280: #define LOCKER "Locker"
281: #define LOG "Log"
282: #define REVISION "Revision"
283: #define SOURCE "Source"
284: #define STATE "State"
285:
286: enum markers { Nomatch, Author, Date, Header,
287: Locker, Log, Revision, Source, State };
288:
289: #define DELNUMFORM "\n\n%s\n%s\n"
290: /* used by putdtext and scanlogtext */
291: #define DELETE 'D'
292: /* set by rcs -o and used by puttree() in rcssyn */
293:
294: typedef int void;