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

Defined variables

copyright defined in line 291; never used

Defined struct's

access defined in line 261; used 56 times
assoc defined in line 274; used 28 times
branchhead defined in line 255; used 31 times
hshentry defined in line 240; used 250 times
lock defined in line 267; used 58 times

Defined enum's

markers defined in line 337; used 20 times
tokens defined in line 185; used 18 times

Defined macros

ACCENT defined in line 201; used 1 times
AMPER defined in line 202; used 1 times
AT defined in line 190; used 1 times
AUTHOR defined in line 326; used 1 times
BACKSL defined in line 203; used 1 times
BAR defined in line 204; used 1 times
COMMA defined in line 205; used 1 times
DATE defined in line 327; used 2 times
DEFAULTSTATE defined in line 141; used 1 times
DELETE defined in line 342; used 4 times
DELNUMFORM defined in line 340; used 2 times
DIFFILE defined in line 165; used 1 times
DIVIDE defined in line 206; used 1 times
DOLLAR defined in line 207; used 1 times
DQUOTE defined in line 208; used 1 times
EQUAL defined in line 209; used 1 times
EXCLA defined in line 210; used 1 times
GETC defined in line 176; used 28 times
GREAT defined in line 211; used 1 times
HASH defined in line 212; used 1 times
HEADER defined in line 328; used 1 times
IDH defined in line 329; used 1 times
INSERT defined in line 213; used 1 times
JOINFIL2 defined in line 169; used 1 times
JOINFIL3 defined in line 170; used 1 times
LBRACE defined in line 214; used 1 times
LBRACK defined in line 215; used 1 times
LESS defined in line 216; used 1 times
LOCKER defined in line 330; used 1 times
LOG defined in line 331; used 1 times
LPARN defined in line 217; used 1 times
MINUS defined in line 218; used 1 times
NCPFN defined in line 146; used 7 times
PERCNT defined in line 219; used 1 times
PLUS defined in line 220; used 1 times
PRINTDATE defined in line 111; used 4 times
PRINTTIME defined in line 112; used 4 times
QUEST defined in line 221; used 1 times
RBRACE defined in line 222; used 1 times
RBRACK defined in line 223; used 1 times
RCSDIR defined in line 136; used 1 times
RCSFILE defined in line 332; used 1 times
RCSSEP defined in line 138; used 3 times
RCSSUF defined in line 137; used 2 times
REVISION defined in line 333; used 1 times
RPARN defined in line 224; used 1 times
SOURCE defined in line 334; used 1 times
SQUOTE defined in line 225; used 1 times
STATE defined in line 335; used 1 times
TILDE defined in line 226; used 1 times
TIMES defined in line 227; used 1 times
TMPFILE3 defined in line 168; used 1 times
UNDER defined in line 228; used 1 times
UPARR defined in line 229; used 1 times
VOID defined in line 308; used 362 times
WORKMODE defined in line 179; used 2 times
elif defined in line 159; used 2 times
joinlength defined in line 135; used 2 times
nil defined in line 157; used 382 times
putc defined in line 173; used 2 times
rindex defined in line 101; used 7 times
strtsize defined in line 127; used 4 times

Usage of this include

Last modified: 1988-02-18
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 4062
Valid CSS Valid XHTML 1.0 Strict