osutil.inl
上传用户:hzhsqp
上传日期:2007-01-06
资源大小:1600k
文件大小:26k
源码类别:

IP电话/视频会议

开发平台:

Visual C++

  1. /*
  2.  * osutil.inl
  3.  *
  4.  * Operating System Classes Inline Function Definitions
  5.  *
  6.  * Portable Windows Library
  7.  *
  8.  * Copyright (c) 1993-1998 Equivalence Pty. Ltd.
  9.  *
  10.  * The contents of this file are subject to the Mozilla Public License
  11.  * Version 1.0 (the "License"); you may not use this file except in
  12.  * compliance with the License. You may obtain a copy of the License at
  13.  * http://www.mozilla.org/MPL/
  14.  *
  15.  * Software distributed under the License is distributed on an "AS IS"
  16.  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
  17.  * the License for the specific language governing rights and limitations
  18.  * under the License.
  19.  *
  20.  * The Original Code is Portable Windows Library.
  21.  *
  22.  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
  23.  *
  24.  * Portions are Copyright (C) 1993 Free Software Foundation, Inc.
  25.  * All Rights Reserved.
  26.  *
  27.  * Contributor(s): ______________________________________.
  28.  *
  29.  * $Log: osutil.inl,v $
  30.  * Revision 1.74  2000/05/25 11:07:26  robertj
  31.  * Added PConfig::HasKey() function to determine if value actually set.
  32.  *
  33.  * Revision 1.73  2000/04/05 02:50:16  robertj
  34.  * Added microseconds to PTime class.
  35.  *
  36.  * Revision 1.72  2000/01/06 14:09:42  robertj
  37.  * Fixed problems with starting up timers,losing up to 10 seconds
  38.  *
  39.  * Revision 1.71  1999/08/22 12:13:43  robertj
  40.  * Fixed warning when using inlines on older GNU compiler
  41.  *
  42.  * Revision 1.70  1999/07/06 04:45:59  robertj
  43.  * Fixed being able to case an unsigned to a PTimeInterval.
  44.  * Improved resolution of PTimer::Tick() to be millisecond accurate.
  45.  *
  46.  * Revision 1.69  1999/03/09 03:08:39  robertj
  47.  * Changes for new documentation system
  48.  *
  49.  * Revision 1.68  1998/11/30 08:57:17  robertj
  50.  * Fixed problem where if += is used on PFilePath, it no longer may be normalised.
  51.  *
  52.  * Revision 1.67  1998/11/19 05:17:35  robertj
  53.  * Added PWaitAndSignal class for easier mutexing.
  54.  *
  55.  * Revision 1.66  1998/11/01 04:56:52  robertj
  56.  * Added BOOl return value to Parse() to indicate there are parameters available.
  57.  *
  58.  * Revision 1.65  1998/10/30 12:23:56  robertj
  59.  * Added ability to get all key values as a dictionary.
  60.  *
  61.  * Revision 1.64  1998/10/30 05:24:30  robertj
  62.  * Added return value to << and >> operators for shifting arguments.
  63.  *
  64.  * Revision 1.63  1998/10/29 05:35:16  robertj
  65.  * Fixed porblem with GetCount() == 0 if do not call Parse() function.
  66.  *
  67.  * Revision 1.62  1998/10/28 03:26:42  robertj
  68.  * Added multi character arguments (-abc style) and options precede parameters mode.
  69.  *
  70.  * Revision 1.61  1998/10/28 00:59:48  robertj
  71.  * New improved argument parsing.
  72.  *
  73.  * Revision 1.60  1998/09/24 07:24:00  robertj
  74.  * Moved structured fiel into separate module so don't need silly implementation file for GNU C.
  75.  *
  76.  * Revision 1.59  1998/09/23 06:21:04  robertj
  77.  * Added open source copyright license.
  78.  *
  79.  * Revision 1.58  1998/01/26 00:31:38  robertj
  80.  * Added functions to get/set 64bit integers from a PConfig.
  81.  * Added multiply and divide operators to PTimeInterval.
  82.  *
  83.  * Revision 1.57  1998/01/04 08:04:27  robertj
  84.  * Changed gmtime and locatime to use operating system specific functions.
  85.  *
  86.  * Revision 1.56  1997/10/03 13:38:26  robertj
  87.  * Fixed race condition on socket close in Select() function.
  88.  *
  89.  * Revision 1.55  1997/08/07 11:58:02  robertj
  90.  * Added ability to get registry data from other applications and anywhere in system registry.
  91.  *
  92.  * Revision 1.54  1997/02/09 03:55:22  robertj
  93.  * Changed PProcess::Current() from pointer to reference.
  94.  *
  95.  * Revision 1.53  1997/01/12 04:21:39  robertj
  96.  * Added IsPast() and IsFuture() functions for time comparison.
  97.  *
  98.  * Revision 1.52  1996/09/14 13:09:23  robertj
  99.  * Major upgrade:
  100.  *   rearranged sockets to help support IPX.
  101.  *   added indirect channel class and moved all protocols to descend from it,
  102.  *   separating the protocol from the low level byte transport.
  103.  *
  104.  * Revision 1.51  1996/05/23 09:59:04  robertj
  105.  * Added mutex to timer list.
  106.  *
  107.  * Revision 1.50  1996/05/18 09:18:25  robertj
  108.  * Added mutex to timer list.
  109.  *
  110.  * Revision 1.49  1996/05/15 10:09:53  robertj
  111.  * Changed millisecond access functions to get 64 bit integer.
  112.  *
  113.  * Revision 1.48  1996/05/09 12:15:34  robertj
  114.  * Resolved C++ problems with 64 bit PTimeInterval for Mac platform.
  115.  *
  116.  * Revision 1.47  1996/04/15 12:33:04  robertj
  117.  * Fixed SetReadTimeout/SetWriteTimeout to use const reference so works with GNU compiler.
  118.  *
  119.  * Revision 1.46  1996/04/15 10:57:57  robertj
  120.  * Moved some functions from INL to serial.cxx so unix linker can make smaller executables.
  121.  *
  122.  * Revision 1.45  1996/04/14 02:53:32  robertj
  123.  * Split serial and pipe channel into separate compilation units for Linux executable size reduction.
  124.  *
  125.  * Revision 1.44  1996/04/09 03:31:33  robertj
  126.  * Fixed bug in config GetTime() cannot use PTime(0) in western hemisphere.
  127.  *
  128.  * Revision 1.43  1996/03/31 08:48:14  robertj
  129.  * Fixed WriteString() so works with sockets.
  130.  *
  131.  * Revision 1.42  1996/03/17 05:43:21  robertj
  132.  * Changed PTimeInterval to 64 bit integer.
  133.  *
  134.  * Revision 1.41  1996/02/25 03:02:45  robertj
  135.  * Added consts to all GetXxxx functions in PConfig.
  136.  *
  137.  * Revision 1.40  1996/02/15 14:47:33  robertj
  138.  * Fixed bugs in time zone compensation (some in the C library).
  139.  *
  140.  * Revision 1.39  1996/02/13 13:06:55  robertj
  141.  * Changed GetTimeZone() so can specify the standard/daylight time.
  142.  *
  143.  * Revision 1.38  1996/02/08 12:12:01  robertj
  144.  * Changed zone parameter in PTime to indicate the time zone as minutes not enum.
  145.  *
  146.  * Revision 1.37  1996/01/28 14:10:12  robertj
  147.  * Added time functions to PConfig.
  148.  *
  149.  * Revision 1.36  1996/01/28 02:51:59  robertj
  150.  * Added assert into all Compare functions to assure comparison between compatible objects.
  151.  *
  152.  * Revision 1.35  1996/01/03 23:15:34  robertj
  153.  * Fixed some PTime bugs.
  154.  *
  155.  * Revision 1.34  1996/01/03 11:09:33  robertj
  156.  * Added Universal Time and Time Zones to PTime class.
  157.  *
  158.  * Revision 1.33  1995/12/23 03:49:46  robertj
  159.  * Chnaged version numbers.
  160.  * Added directory constructor from C string literal.
  161.  *
  162.  * Revision 1.32  1995/12/10 11:32:44  robertj
  163.  * Added extra user information to processes and applications.
  164.  *
  165.  * Revision 1.31  1995/08/12 22:30:05  robertj
  166.  * Work around for  GNU bug: can't have private copy constructor with multiple inheritance.
  167.  *
  168.  * Revision 1.30  1995/07/31 12:15:44  robertj
  169.  * Removed PContainer from PChannel ancestor.
  170.  *
  171.  * Revision 1.29  1995/04/22 00:49:19  robertj
  172.  * Fixed missing common construct code call in edit box constructor.
  173.  *
  174.  * Revision 1.28  1995/03/12 04:41:16  robertj
  175.  * Moved GetHandle() function from PFile to PChannel.
  176.  *
  177.  * Revision 1.27  1995/01/27  11:11:19  robertj
  178.  * Changed single string default constructor to be section name not file name.
  179.  *
  180.  * Revision 1.26  1995/01/18  09:00:40  robertj
  181.  * Added notifiers to timers.
  182.  *
  183.  * Revision 1.25  1995/01/15  04:51:09  robertj
  184.  * Mac compatibility.
  185.  * Added structure function to structured files.
  186.  *
  187.  * Revision 1.24  1995/01/11  09:45:02  robertj
  188.  * Documentation and normalisation.
  189.  *
  190.  * Revision 1.23  1995/01/09  12:34:25  robertj
  191.  * Removed unnecesary return value from I/O functions.
  192.  *
  193.  * Revision 1.22  1994/10/24  00:07:01  robertj
  194.  * Changed PFilePath and PDirectory so descends from either PString or
  195.  *     PCaselessString depending on the platform.
  196.  *
  197.  * Revision 1.21  1994/10/23  04:49:00  robertj
  198.  * Chnaged PDirectory to descend of PString.
  199.  * Added PDirectory Exists() function.
  200.  * Implemented PPipeChannel.
  201.  *
  202.  * Revision 1.20  1994/09/25  10:41:19  robertj
  203.  * Moved PFile::DestroyContents() to cxx file.
  204.  * Added PTextFile constructors for DOS/NT platforms.
  205.  * Added Pipe channel.
  206.  *
  207.  * Revision 1.19  1994/08/21  23:43:02  robertj
  208.  * Added "remove on close" feature for temporary files.
  209.  * Added "force" option to Remove/Rename etc to override write protection.
  210.  * Removed default argument when of PString type (MSC crashes).
  211.  *
  212.  * Revision 1.18  1994/07/27  05:58:07  robertj
  213.  * Synchronisation.
  214.  *
  215.  * Revision 1.17  1994/07/21  12:33:49  robertj
  216.  * Moved cooperative threads to common.
  217.  *
  218.  * Revision 1.16  1994/07/17  10:46:06  robertj
  219.  * Moved file handle to PChannel.
  220.  *
  221.  * Revision 1.15  1994/07/02  03:03:49  robertj
  222.  * Time interval and timer redesign.
  223.  *
  224.  * Revision 1.14  1994/06/25  11:55:15  robertj
  225.  * Unix version synchronisation.
  226.  *
  227.  * Revision 1.13  1994/04/20  12:17:44  robertj
  228.  * assert stuff
  229.  *
  230.  * Revision 1.12  1994/04/01  14:06:48  robertj
  231.  * Text file streams.
  232.  *
  233.  * Revision 1.11  1994/03/07  07:45:40  robertj
  234.  * Major upgrade
  235.  *
  236.  * Revision 1.10  1994/01/13  03:14:51  robertj
  237.  * Added AsString() function to convert a time to a string.
  238.  *
  239.  * Revision 1.9  1994/01/03  04:42:23  robertj
  240.  * Mass changes to common container classes and interactors etc etc etc.
  241.  *
  242.  * Revision 1.8  1993/12/31  06:47:59  robertj
  243.  * Made inlines optional for debugging purposes.
  244.  *
  245.  * Revision 1.7  1993/08/31  03:38:02  robertj
  246.  * Changed PFile::Status to PFile::Info due to X-Windows compatibility.
  247.  * Added copy constructor and assignement operator due to G++ wierdness.
  248.  *
  249.  * Revision 1.6  1993/08/27  18:17:47  robertj
  250.  * Moved a lot of code from MS-DOS platform specific to common files.
  251.  *
  252.  * Revision 1.5  1993/08/21  04:40:19  robertj
  253.  * Added Copy() function.
  254.  *
  255.  * Revision 1.4  1993/08/21  01:50:33  robertj
  256.  * Made Clone() function optional, default will assert if called.
  257.  *
  258.  * Revision 1.3  1993/07/14  12:49:16  robertj
  259.  * Fixed RCS keywords.
  260.  *
  261.  */
  262. ///////////////////////////////////////////////////////////////////////////////
  263. // PTimeInterval
  264. PINLINE PTimeInterval::PTimeInterval(int millisecs)
  265.   : milliseconds(millisecs) { }
  266. PINLINE PTimeInterval::PTimeInterval(unsigned millisecs)
  267.   : milliseconds(millisecs) { }
  268. PINLINE PTimeInterval::PTimeInterval(PInt64 millisecs)
  269.   : milliseconds(millisecs) { }
  270. PINLINE PObject * PTimeInterval::Clone() const
  271.   { return PNEW PTimeInterval(milliseconds); }
  272. PINLINE PInt64 PTimeInterval::GetMilliSeconds() const
  273.   { return milliseconds; }
  274. PINLINE DWORD PTimeInterval::GetInterval() const
  275.   { return (DWORD)milliseconds; }
  276. PINLINE long PTimeInterval::GetSeconds() const
  277.   { return (long)(milliseconds/1000); }
  278. PINLINE long PTimeInterval::GetMinutes() const
  279.   { return (long)(milliseconds/60000); }
  280. PINLINE int PTimeInterval::GetHours() const
  281.   { return (int)(milliseconds/3600000); }
  282. PINLINE int PTimeInterval::GetDays() const
  283.   { return (int)(milliseconds/86400000); }
  284. PINLINE PTimeInterval PTimeInterval::operator+(const PTimeInterval & t) const
  285.   { return PTimeInterval(milliseconds + t.milliseconds); }
  286. PINLINE PTimeInterval & PTimeInterval::operator+=(const PTimeInterval & t)
  287.   { milliseconds += t.milliseconds; return *this; }
  288. PINLINE PTimeInterval PTimeInterval::operator-(const PTimeInterval & t) const
  289.   { return PTimeInterval(milliseconds - t.milliseconds); }
  290. PINLINE PTimeInterval & PTimeInterval::operator-=(const PTimeInterval & t)
  291.   { milliseconds -= t.milliseconds; return *this; }
  292. PINLINE PTimeInterval PTimeInterval::operator*(int f) const
  293.   { return PTimeInterval(milliseconds * f); }
  294. PINLINE PTimeInterval & PTimeInterval::operator*=(int f)
  295.   { milliseconds *= f; return *this; }
  296. PINLINE PTimeInterval PTimeInterval::operator/(int f) const
  297.   { return PTimeInterval(milliseconds / f); }
  298. PINLINE PTimeInterval & PTimeInterval::operator/=(int f)
  299.   { milliseconds /= f; return *this; }
  300. PINLINE BOOL PTimeInterval::operator==(const PTimeInterval & t) const
  301.   { return milliseconds == t.milliseconds; }
  302. PINLINE BOOL PTimeInterval::operator!=(const PTimeInterval & t) const
  303.   { return milliseconds != t.milliseconds; }
  304. PINLINE BOOL PTimeInterval::operator> (const PTimeInterval & t) const
  305.   { return milliseconds > t.milliseconds; }
  306. PINLINE BOOL PTimeInterval::operator>=(const PTimeInterval & t) const
  307.   { return milliseconds >= t.milliseconds; }
  308. PINLINE BOOL PTimeInterval::operator< (const PTimeInterval & t) const
  309.   { return milliseconds < t.milliseconds; }
  310. PINLINE BOOL PTimeInterval::operator<=(const PTimeInterval & t) const
  311.   { return milliseconds <= t.milliseconds; }
  312. PINLINE BOOL PTimeInterval::operator==(long msecs) const
  313.   { return (long)milliseconds == msecs; }
  314. PINLINE BOOL PTimeInterval::operator!=(long msecs) const
  315.   { return (long)milliseconds != msecs; }
  316. PINLINE BOOL PTimeInterval::operator> (long msecs) const
  317.   { return (long)milliseconds > msecs; }
  318. PINLINE BOOL PTimeInterval::operator>=(long msecs) const
  319.   { return (long)milliseconds >= msecs; }
  320. PINLINE BOOL PTimeInterval::operator< (long msecs) const
  321.   { return (long)milliseconds < msecs; }
  322. PINLINE BOOL PTimeInterval::operator<=(long msecs) const
  323.   { return (long)milliseconds <= msecs; }
  324. ///////////////////////////////////////////////////////////////////////////////
  325. // PTime
  326. PINLINE PObject * PTime::Clone() const
  327.   { return PNEW PTime(theTime, microseconds); }
  328. PINLINE void PTime::PrintOn(ostream & strm) const
  329.   { strm << AsString(); }
  330. PINLINE PInt64 PTime::GetTimestamp() const
  331.   { return theTime*(PInt64)1000000 + microseconds; }
  332. PINLINE time_t PTime::GetTimeInSeconds() const
  333.   { return theTime; }
  334. PINLINE long PTime::GetMicrosecond() const
  335.   { return microseconds; }
  336. PINLINE int PTime::GetSecond() const
  337.   { struct tm ts; return os_localtime(&theTime, &ts)->tm_sec; }
  338. PINLINE int PTime::GetMinute() const
  339.   { struct tm ts; return os_localtime(&theTime, &ts)->tm_min; }
  340. PINLINE int PTime::GetHour() const
  341.   { struct tm ts; return os_localtime(&theTime, &ts)->tm_hour; }
  342. PINLINE int PTime::GetDay() const
  343.   { struct tm ts; return os_localtime(&theTime, &ts)->tm_mday; }
  344. PINLINE PTime::Months PTime::GetMonth() const
  345.   { struct tm ts; return (Months)(os_localtime(&theTime, &ts)->tm_mon+January); }
  346. PINLINE int PTime::GetYear() const
  347.   { struct tm ts; return os_localtime(&theTime, &ts)->tm_year+1900; }
  348. PINLINE PTime::Weekdays PTime::GetDayOfWeek() const
  349.   { struct tm ts; return (Weekdays)os_localtime(&theTime, &ts)->tm_wday; }
  350. PINLINE int PTime::GetDayOfYear() const
  351.   { struct tm ts; return os_localtime(&theTime, &ts)->tm_yday; }
  352. PINLINE BOOL PTime::IsPast() const
  353.   { return theTime < time(NULL); }
  354. PINLINE BOOL PTime::IsFuture() const
  355.   { return theTime > time(NULL); }
  356. PINLINE PString PTime::AsString(const PString & format, int zone) const
  357.   { return AsString((const char *)format, zone); }
  358. PINLINE int PTime::GetTimeZone() 
  359.   { return GetTimeZone(IsDaylightSavings() ? DaylightSavings : StandardTime); }
  360. ///////////////////////////////////////////////////////////////////////////////
  361. // PTimer
  362. PINLINE BOOL PTimer::IsRunning() const
  363.   { return state == Starting || state == Running; }
  364. PINLINE BOOL PTimer::IsPaused() const
  365.   { return state == Paused; }
  366. PINLINE const PNotifier & PTimer::GetNotifier() const
  367.   { return callback; }
  368. PINLINE void PTimer::SetNotifier(const PNotifier & func)
  369.   { callback = func; }
  370. ///////////////////////////////////////////////////////////////////////////////
  371. PINLINE PChannelStreamBuffer::PChannelStreamBuffer(const PChannelStreamBuffer & sbuf)
  372.   : channel(sbuf.channel) { }
  373. PINLINE PChannelStreamBuffer &
  374.           PChannelStreamBuffer::operator=(const PChannelStreamBuffer & sbuf)
  375.   { channel = sbuf.channel; return *this; }
  376. PINLINE PChannel::PChannel(const PChannel &)
  377.   { PAssertAlways("Cannot copy channels"); }
  378. PINLINE PChannel & PChannel::operator=(const PChannel &)
  379.   { PAssertAlways("Cannot assign channels"); return *this; }
  380. PINLINE void PChannel::SetReadTimeout(const PTimeInterval & time)
  381.   { readTimeout = time; }
  382. PINLINE PTimeInterval PChannel::GetReadTimeout() const
  383.   { return readTimeout; }
  384. PINLINE PINDEX PChannel::GetLastReadCount() const
  385.   { return lastReadCount; }
  386. PINLINE void PChannel::SetWriteTimeout(const PTimeInterval & time)
  387.   { writeTimeout = time; }
  388. PINLINE PTimeInterval PChannel::GetWriteTimeout() const
  389.   { return writeTimeout; }
  390. PINLINE PINDEX PChannel::GetLastWriteCount() const
  391.   { return lastWriteCount; }
  392. PINLINE int PChannel::GetHandle() const
  393.   { return os_handle; }
  394. PINLINE PChannel::Errors PChannel::GetErrorCode() const
  395.   { return lastError; }
  396. PINLINE int PChannel::GetErrorNumber() const
  397.   { return osError; }
  398. PINLINE void PChannel::AbortCommandString()
  399.   { abortCommandString = TRUE; }
  400. ///////////////////////////////////////////////////////////////////////////////
  401. // PIndirectChannel
  402. PINLINE PIndirectChannel::~PIndirectChannel()
  403.   { Close(); }
  404. PINLINE PChannel * PIndirectChannel::GetReadChannel() const
  405.   { return readChannel; }
  406. PINLINE PChannel * PIndirectChannel::GetWriteChannel() const
  407.   { return writeChannel; }
  408. ///////////////////////////////////////////////////////////////////////////////
  409. // PDirectory
  410. PINLINE PDirectory::PDirectory()
  411.   : PFilePathString(".") { Construct(); }
  412. PINLINE PDirectory::PDirectory(const char * cpathname)  
  413.   : PFilePathString(cpathname) { Construct(); }
  414.   
  415. PINLINE PDirectory::PDirectory(const PString & pathname)
  416.   : PFilePathString(pathname) { Construct(); }
  417.   
  418. PINLINE void PDirectory::DestroyContents()
  419.   { Close(); PFilePathString::DestroyContents(); }
  420. PINLINE BOOL PDirectory::Exists() const
  421.   { return Exists(*this); }
  422. PINLINE BOOL PDirectory::Change() const
  423.   { return Change(*this); }
  424. PINLINE BOOL PDirectory::Create(int perm) const
  425.   { return Create(*this, perm); }
  426. PINLINE BOOL PDirectory::Remove()
  427.   { Close(); return Remove(*this); }
  428. ///////////////////////////////////////////////////////////////////////////////
  429. PINLINE PFilePath::PFilePath()
  430.   { }
  431. PINLINE PFilePath::PFilePath(const PFilePath & path)
  432.   : PFilePathString(path) { }
  433. PINLINE PFilePath & PFilePath::operator=(const char * cstr)
  434.   { return operator=(PString(cstr)); }
  435. PINLINE PFilePath & PFilePath::operator=(const PFilePath & path)
  436.   { PFilePathString::operator=(path); return *this; }
  437. PINLINE PFilePath & PFilePath::operator+=(const PString & str)
  438.   { operator=(*this + str); return *this; }
  439. PINLINE PFilePath & PFilePath::operator+=(const char * cstr)
  440.   { operator=(*this + cstr); return *this; }
  441. PINLINE PFilePath & PFilePath::operator+=(char ch)
  442.   { operator=(*this + ch); return *this; }
  443. ///////////////////////////////////////////////////////////////////////////////
  444. PINLINE PFile::PFile()
  445.   { os_handle = -1; removeOnClose = FALSE; }
  446. PINLINE PFile::PFile(OpenMode mode, int opts)
  447.   { os_handle = -1; removeOnClose = FALSE; Open(mode, opts); }
  448. PINLINE PFile::PFile(const PFilePath & name, OpenMode mode, int opts)
  449.   { os_handle = -1; removeOnClose = FALSE; Open(name, mode, opts); }
  450. PINLINE BOOL PFile::Exists() const
  451.   { return Exists(path); }
  452. PINLINE BOOL PFile::Access(OpenMode mode)
  453.   { return ConvertOSError(Access(path, mode) ? 0 : -1); }
  454. PINLINE BOOL PFile::Remove(BOOL force)
  455.   { Close(); return ConvertOSError(Remove(path, force) ? 0 : -1); }
  456. PINLINE BOOL PFile::Copy(const PFilePath & newname, BOOL force)
  457.   { return ConvertOSError(Copy(path, newname, force) ? 0 : -1); }
  458. PINLINE BOOL PFile::GetInfo(PFileInfo & info)
  459.   { return ConvertOSError(GetInfo(path, info) ? 0 : -1); }
  460. PINLINE BOOL PFile::SetPermissions(int permissions)
  461.   { return ConvertOSError(SetPermissions(path, permissions) ? 0 : -1); }
  462. PINLINE const PFilePath & PFile::GetFilePath() const
  463.   { return path; }
  464.       
  465. PINLINE PString PFile::GetName() const
  466.   { return path; }
  467. PINLINE off_t PFile::GetPosition() const
  468.   { return _lseek(GetHandle(), 0, SEEK_CUR); }
  469. ///////////////////////////////////////////////////////////////////////////////
  470. PINLINE PTextFile::PTextFile()
  471.   { }
  472. PINLINE PTextFile::PTextFile(OpenMode mode, int opts)
  473.   { Open(mode, opts); }
  474. PINLINE PTextFile::PTextFile(const PFilePath & name, OpenMode mode, int opts)
  475.   { Open(name, mode, opts); }
  476. ///////////////////////////////////////////////////////////////////////////////
  477. // PConfig
  478. #ifdef _PCONFIG
  479. PINLINE PConfig::PConfig(Source src)
  480.   : defaultSection("Options") { Construct(src, "", ""); }
  481. PINLINE PConfig::PConfig(Source src, const PString & appname)
  482.   : defaultSection("Options") { Construct(src, appname, ""); }
  483. PINLINE PConfig::PConfig(Source src, const PString & appname, const PString & manuf)
  484.   : defaultSection("Options") { Construct(src, appname, manuf); }
  485. PINLINE PConfig::PConfig(const PString & section, Source src)
  486.   : defaultSection(section) { Construct(src, "", ""); }
  487. PINLINE PConfig::PConfig(const PString & section, Source src, const PString & appname)
  488.   : defaultSection(section) { Construct(src, appname, ""); }
  489. PINLINE PConfig::PConfig(const PString & section,
  490.                          Source src,
  491.                          const PString & appname,
  492.                          const PString & manuf)
  493.   : defaultSection(section) { Construct(src, appname, manuf); }
  494. PINLINE PConfig::PConfig(const PFilePath & filename, const PString & section)
  495.   : defaultSection(section) { Construct(filename); }
  496. PINLINE void PConfig::SetDefaultSection(const PString & section)
  497.   { defaultSection = section; }
  498. PINLINE PString PConfig::GetDefaultSection() const
  499.   { return defaultSection; }
  500. PINLINE PStringList PConfig::GetKeys() const
  501.   { return GetKeys(defaultSection); }
  502. PINLINE PStringToString PConfig::GetAllKeyValues() const
  503.   { return GetAllKeyValues(defaultSection); }
  504. PINLINE void PConfig::DeleteSection()
  505.   { DeleteSection(defaultSection); }
  506. PINLINE void PConfig::DeleteKey(const PString & key)
  507.   { DeleteKey(defaultSection, key); }
  508. PINLINE BOOL PConfig::HasKey(const PString & key) const
  509.   { return HasKey(defaultSection, key); }
  510. PINLINE PString PConfig::GetString(const PString & key) const
  511.   { return GetString(defaultSection, key, PString()); }
  512. PINLINE PString PConfig::GetString(const PString & key, const PString & dflt) const
  513.   { return GetString(defaultSection, key, dflt); }
  514. PINLINE void PConfig::SetString(const PString & key, const PString & value)
  515.   { SetString(defaultSection, key, value); }
  516. PINLINE BOOL PConfig::GetBoolean(const PString & key, BOOL dflt) const
  517.   { return GetBoolean(defaultSection, key, dflt); }
  518. PINLINE void PConfig::SetBoolean(const PString & key, BOOL value)
  519.   { SetBoolean(defaultSection, key, value); }
  520. PINLINE long PConfig::GetInteger(const PString & key, long dflt) const
  521.   { return GetInteger(defaultSection, key, dflt); }
  522. PINLINE void PConfig::SetInteger(const PString & key, long value)
  523.   { SetInteger(defaultSection, key, value); }
  524. PINLINE PInt64 PConfig::GetInt64(const PString & key, PInt64 dflt) const
  525.   { return GetInt64(defaultSection, key, dflt); }
  526. PINLINE void PConfig::SetInt64(const PString & key, PInt64 value)
  527.   { SetInt64(defaultSection, key, value); }
  528. PINLINE double PConfig::GetReal(const PString & key, double dflt) const
  529.   { return GetReal(defaultSection, key, dflt); }
  530. PINLINE void PConfig::SetReal(const PString & key, double value)
  531.   { SetReal(defaultSection, key, value); }
  532. PINLINE PTime PConfig::GetTime(const PString & key) const
  533.   { return GetTime(defaultSection, key); }
  534. PINLINE PTime PConfig::GetTime(const PString & key, const PTime & dflt) const
  535.   { return GetTime(defaultSection, key, dflt); }
  536. PINLINE void PConfig::SetTime(const PString & key, const PTime & value)
  537.   { SetTime(defaultSection, key, value); }
  538. #endif
  539. ///////////////////////////////////////////////////////////////////////////////
  540. // PArgList
  541. PINLINE void PArgList::SetArgs(int argc, char ** argv)
  542.   { SetArgs(PStringArray(argc, argv)); }
  543. PINLINE BOOL PArgList::Parse(const PString & theArgumentSpec, BOOL optionsBeforeParams)
  544.   { return Parse((const char *)theArgumentSpec, optionsBeforeParams); }
  545. PINLINE BOOL PArgList::HasOption(char option) const
  546.   { return GetOptionCount(option) != 0; }
  547. PINLINE BOOL PArgList::HasOption(const char * option) const
  548.   { return GetOptionCount(option) != 0; }
  549. PINLINE BOOL PArgList::HasOption(const PString & option) const
  550.   { return GetOptionCount(option) != 0; }
  551. PINLINE PINDEX PArgList::GetCount() const
  552.   { return parameterIndex.GetSize()-shift; }
  553. PINLINE PString PArgList::operator[](PINDEX num) const
  554.   { return GetParameter(num); }
  555. PINLINE PArgList & PArgList::operator<<(int sh)
  556.   { Shift(sh); return *this; }
  557. PINLINE PArgList & PArgList::operator>>(int sh)
  558.   { Shift(-sh); return *this; }
  559. ///////////////////////////////////////////////////////////////////////////////
  560. // PSemaphore
  561. PINLINE PWaitAndSignal::PWaitAndSignal(PSemaphore & sem)
  562.   : semaphore(sem) { semaphore.Wait(); }
  563. PINLINE PWaitAndSignal::~PWaitAndSignal()
  564.   { semaphore.Signal(); }
  565. ///////////////////////////////////////////////////////////////////////////////
  566. // PThread
  567. #ifndef P_PLATFORM_HAS_THREADS
  568. PINLINE PThread * PThread::Current()
  569.   { return PProcess::Current().currentThread; }
  570. PINLINE BOOL PThread::IsTerminated() const
  571.   { return status == Terminated; }
  572. PINLINE void PThread::Resume()
  573.   { Suspend(FALSE); }
  574. PINLINE BOOL PThread::IsSuspended() const
  575.   { return suspendCount > 0; }
  576. PINLINE void PThread::SetPriority(Priority priorityLevel)
  577.   { basePriority = priorityLevel; }
  578. PINLINE PThread::Priority PThread::GetPriority() const
  579.   { return basePriority; }
  580. #endif
  581. ///////////////////////////////////////////////////////////////////////////////
  582. // PProcess
  583. PINLINE PArgList & PProcess::GetArguments()
  584.   { return arguments; }
  585. PINLINE const PString & PProcess::GetManufacturer() const
  586.   { return manufacturer; }
  587. PINLINE const PString & PProcess::GetName() const
  588.   { return productName; }
  589. PINLINE const PFilePath & PProcess::GetFile() const
  590.   { return executableFile; }
  591. PINLINE PTimerList * PProcess::GetTimerList()
  592.   { return &timers; }
  593. PINLINE void PProcess::SetTerminationValue(int value)
  594.   { terminationValue = value; }
  595. PINLINE int PProcess::GetTerminationValue() const
  596.   { return terminationValue; }
  597. // End Of File ///////////////////////////////////////////////////////////////