Annotation of 43BSDReno/contrib/rcs/src/rcsbase.h, revision 1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.