text: /*
   * Copyright 1995, 2003 Perforce Software.  All rights reserved.
   *
   * This file is part of Perforce - the FAST SCM System.
   */
  
  /*
   * PathSys.h - OS specific pathnames
   *
   * Public classes:
   *
   *	PathSys - a StrBuf with virtual path manipulations
   *
   * Public methods:
   *
   *	StrBuf::Set() - set value in local syntax
   *	StrBuf::Text() - get value in local syntax
   *
   *	PathSys::SetCanon() - combine (local) root and canonical path
   *	PathSys::SetLocal() - combine (local) root and local path
   *
   *		If root is empty, local is used.
   *		If local is empty, results are not defined.
   *		If canonical path is empty, trailing slash is appended to path.
   *		(Trailing slash might cause problems with Stat() on windows.)
   *		Local can begin with relative references.
   *
   *	PathSys::GetCanon() - strip root and return rest as canon
   *	PathSys::ToParent() - strip (and return) last element of path
   *
   * NB: SetLocal() can take "this" as root, but SetCanon() cannot.
   *
   * Static functions:
   *
   *	Create() - returns an appropriate PathSys, given an OS type flag.
   *	GetOS() - returns a string for the OS name
   */
  
  class PathSys : public StrBuf {
  
      public:
      	virtual		~PathSys();
  
  	virtual void	SetCanon( const StrPtr &root, const StrPtr &canon ) = 0;
  	virtual void	SetLocal( const StrPtr &root, const StrPtr &local ) = 0;
  
  	virtual int	GetCanon( const StrPtr &root, StrBuf &t ) = 0;
  	virtual int	ToParent( StrBuf *file = 0 ) = 0;
  	virtual int	IsUnderRoot( const StrPtr &root ) = 0;
  	virtual void	SetCharSet( int = 0 );
  
  	void		Expand();
  
  	static PathSys *Create();
  	static PathSys *Create( const StrPtr &os, Error *e );
  	static const char *GetOS();
  
      private:
  	static PathSys *Create( int os );
  } ;
  
  