ncbi_os_mac.hpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:5k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: ncbi_os_mac.hpp,v $
  4.  * PRODUCTION Revision 1000.0  2003/10/29 15:01:51  gouriano
  5.  * PRODUCTION PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.6
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. #ifndef NCBI_OS_MAC__HPP
  10. #define NCBI_OS_MAC__HPP
  11. /*  $Id: ncbi_os_mac.hpp,v 1000.0 2003/10/29 15:01:51 gouriano Exp $
  12.  * ===========================================================================
  13.  *
  14.  *                            PUBLIC DOMAIN NOTICE
  15.  *               National Center for Biotechnology Information
  16.  *
  17.  *  This software/database is a "United States Government Work" under the
  18.  *  terms of the United States Copyright Act.  It was written as part of
  19.  *  the author's official duties as a United States Government employee and
  20.  *  thus cannot be copyrighted.  This software/database is freely available
  21.  *  to the public for use. The National Library of Medicine and the U.S.
  22.  *  Government have not placed any restriction on its use or reproduction.
  23.  *
  24.  *  Although all reasonable efforts have been taken to ensure the accuracy
  25.  *  and reliability of the software and data, the NLM and the U.S.
  26.  *  Government do not and cannot warrant the performance or results that
  27.  *  may be obtained by using this software or data. The NLM and the U.S.
  28.  *  Government disclaim all warranties, express or implied, including
  29.  *  warranties of performance, merchantability or fitness for any particular
  30.  *  purpose.
  31.  *
  32.  *  Please cite the author in any work or product based on this material.
  33.  *
  34.  * ===========================================================================
  35.  *
  36.  * Author:  Denis Vakatov
  37.  *
  38.  * File Description:
  39.  *   Mac specifics
  40.  *
  41.  */
  42. #include <corelib/ncbistd.hpp>
  43. #include <corelib/ncbistl.hpp>
  44. #include <corelib/ncbistr.hpp>
  45. #if !defined(NCBI_OS_MAC)
  46. #  error "ncbi_os_mac.hpp must be used on MAC platforms only"
  47. #endif
  48. #include <cassert>
  49. #include <cstring>
  50. #include <Files.h>
  51. #include <MacTypes.h>
  52. // If this variable gets set to true, then we should throw rather than exit() or abort().
  53. extern bool g_Mac_SpecialEnvironment;
  54. // Enable the coding style used by the special environment in question.
  55. #define gMacSpecialEnvironment g_Mac_SpecialEnvironment
  56. BEGIN_NCBI_SCOPE
  57. /////////////////////////////////////////////////////////////////////////////
  58. //   COSErrException_Mac
  59. //
  60. class COSErrException_Mac : public exception
  61. {
  62.     OSErr m_OSErr;
  63.     
  64. public:
  65.     // Report description of "os_err" (along with "what" if specified)
  66.     COSErrException_Mac(const OSErr&  os_err,
  67.                         const string& what = kEmptyStr) THROWS_NONE;
  68.     ~COSErrException_Mac(void) THROWS_NONE;
  69.     const OSErr& GetOSErr(void) const THROWS_NONE { return m_OSErr; }
  70. };
  71. /* Copy a C string (up to a limit) onto a Pascal string. */
  72. inline
  73. unsigned char*
  74. Pstrncpy(unsigned char *dest, const char *src, size_t len)
  75. {
  76. assert(len <= 255);
  77. if (len > 255) {
  78. len = 255;
  79. }
  80. dest[0] = static_cast<unsigned char>(len);
  81. memcpy(dest + 1, src, len);
  82. return dest;
  83. }
  84. /* Copy a C string to a Pascal string. */
  85. inline
  86. unsigned char*
  87. Pstrcpy(unsigned char *dest, const char *src)
  88. {
  89. return Pstrncpy(dest, src, std::strlen(src));
  90. }
  91. /* Copy a Pascal string to a Pascal string. */
  92. inline
  93. unsigned char*
  94. PstrPcpy(unsigned char *dest, const unsigned char *src)
  95. {
  96. return static_cast<unsigned char *>(
  97. std::memcpy(dest, src, static_cast<size_t>(src[0]+1) )
  98. );
  99. }
  100. class PString {
  101. public:
  102.     PString(const unsigned char* str) { PstrPcpy(m_Str, str); }
  103.     friend bool operator==(const PString& one, const PString& other) {
  104.         return std::memcmp(one.m_Str, other.m_Str, one.m_Str[0]) == 0;
  105.     }
  106. private:
  107.     Str255 m_Str;
  108. };
  109. extern OSErr FSpGetDirectoryID(const FSSpec *spec, long *theDirID, Boolean *isDirectory);
  110. extern OSErr FSpCheckObjectLock(const FSSpec *spec);
  111. extern OSErr FSpGetFileSize(const FSSpec *spec, long *dataSize, long *rsrcSize);
  112. extern OSErr GetDirItems(short vRefNum, long dirID, ConstStr255Param name,
  113.     Boolean getFiles, Boolean getDirectories, FSSpecPtr items,
  114.     short reqItemCount, short *actItemCount, short *itemIndex);
  115. extern OSErr MacPathname2FSSpec(const char *inPathname, FSSpec *outFSS);
  116. extern OSErr MacFSSpec2FullPathname(const FSSpec *inFSS, char **outPathname);
  117. END_NCBI_SCOPE
  118. /* --------------------------------------------------------------------------
  119.  * $Log: ncbi_os_mac.hpp,v $
  120.  * Revision 1000.0  2003/10/29 15:01:51  gouriano
  121.  * PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.6
  122.  *
  123.  * Revision 1.6  2003/02/27 22:04:20  lebedev
  124.  * COSErrException_Mac changed from runtime_error to exception
  125.  *
  126.  * Revision 1.5  2002/07/11 14:17:53  gouriano
  127.  * exceptions replaced by CNcbiException-type ones
  128.  *
  129.  * Revision 1.4  2001/12/18 21:40:01  juran
  130.  * Copy Pascal-string-related functions from Josh's pstring.c.  (Public domain)
  131.  * Move PStr from ncbifile.cpp, rename to PString.
  132.  * Add extern prototypes for MoreFiles functions copied to our .cpp.
  133.  *
  134.  * Revision 1.3  2001/12/03 22:59:04  juran
  135.  * Don't forget MacTypes.h.
  136.  *
  137.  * Revision 1.2  2001/12/03 22:00:34  juran
  138.  * Add g_Mac_SpecialEnvironment global.
  139.  * Include prerequisite corelib headers.
  140.  *
  141.  * Revision 1.1  2001/11/19 18:06:58  juran
  142.  * Mac OS-specific header.
  143.  * Initial check-in.
  144.  *
  145.  * ==========================================================================
  146.  */
  147. #endif  /* NCBI_OS_MAC__HPP */