1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
|
/*
* sccsname.h: Part of GNU CSSC.
*
*
* Copyright (C) 1997,2001 Free Software Foundation, Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*
* CSSC was originally Based on MySC, by Ross Ridge, which was
* placed in the Public Domain.
*
*
* Defines the class sccs_name.
*
* @(#) CSSC sccsname.h 1.1 93/11/09 17:17:50
*
*/
#ifndef CSSC__SCCSNAME_H__
#define CSSC__SCCSNAME_H__
#ifdef __GNUC__
#pragma interface
#endif
mystring base_part(const mystring &name);
mystring canonify_filename(const char* fname);
class sccs_name
{
mystring sname; // name of the s. file.
mystring gname;
// We hold separate strings for the part before
// and the part after the character that changes:
// dir/s.foo.c
// dir/p.foo.c
// dir/z.foo.c
// In these cases, name_front is "dir/" and name_rear is ".foo.c".
mystring name_front, name_rear;
file_lock *lock_ptr;
int lock_cnt;
void create();
void
destroy()
{
if (lock_cnt > 0)
delete lock_ptr;
}
sccs_name &operator =(sccs_name const &);
sccs_name(sccs_name const &);
public:
static int valid_filename(const char *name);
/* The initialisers on the following line have been re-ordered
* to follow the declaration order.
*/
sccs_name(): lock_ptr(0), lock_cnt(0) {}
sccs_name &operator =(const mystring& n); /* undefined */
int valid() const { return sname.length(); }
void make_valid();
const char * c_str() const { return sname.c_str(); }
mystring sub_file(char insertme) const;
mystring sfile() const { return sname; }
mystring gfile() const { return gname; }
mystring pfile() const { return sub_file('p'); }
mystring qfile() const { return sub_file('q'); }
#if 0
mystring lfile() const { return base_part(_file('l')); }
#endif
mystring xfile() const { return sub_file('x'); }
mystring zfile() const { return sub_file('z'); }
int
lock()
{
if (lock_cnt++ == 0)
{
mystring zf = zfile();
lock_ptr = new file_lock(zf);
return lock_ptr->failed();
}
return 0;
}
void
unlock()
{
if (--lock_cnt == 0)
{
delete lock_ptr;
}
}
~sccs_name()
{
destroy();
}
};
#endif /* __SCCSNAME_H__ */
/* Local variables: */
/* mode: c++ */
/* End: */
|