<?xml version="1.0" encoding="ISO8859-1"?>
<fpdoc-descriptions>
<!--  
   $Id$
    This file is part of the FPC documentation. -->
    Copyright (C) 1999, by Michael Van Canneyt 
  
    The FPC documentation is free text; you can redistribute it and/or 
    modify it under the terms of the GNU Library General Public License as 
    published by the Free Software Foundation; either version 2 of the 
    License, or (at your option) any later version. 
  
    The FPC Documentation 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 
    Library General Public License for more details. 
  
    You should have received a copy of the GNU Library General Public 
    License along with the FPC documentation; see the file COPYING.LIB.  If not, 
    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, 
    Boston, MA 02111-1307, USA. 
 -->
<package name="rtl">
<module name="sysutils">
<short>Various system utilities.</short>
<!-- \FPCexampledir{sysutex} -->
<descr>
This documentation describes the <file>sysutils</file> unit. The <file>sysutils</file> unit
was started by Gertjan Schouten, and completed by Michael Van Canneyt.
It aims to be compatible to the Delphi <file>sysutils</file> unit, but in contrast
with  the latter, it is designed to work on multiple platforms. It is implemented
on all supported platforms.
</descr>

<topic name="StringFunctions">
<short>String functions</short>
<descr>
<p>
Functions for handling strings.
</p>
<table>
<th><td>Name</td><td>Description</td></th>
<tr><td><link id="AnsiCompareStr"/></td><td>Compare two strings</td></tr>
<tr><td><link id="AnsiCompareText"/></td><td>Compare two strings, case insensitive</td></tr>
<tr><td><link id="AnsiExtractQuotedStr"/></td><td>Removes quotes from string</td></tr>
<tr><td><link id="AnsiLastChar"/></td><td>Get last character of string</td></tr>
<tr><td><link id="AnsiLowerCase"/></td><td>Convert string to all-lowercase</td></tr>
<tr><td><link id="AnsiQuotedStr"/></td><td>Qoutes a string</td></tr>
<tr><td><link id="AnsiStrComp"/></td><td>Compare strings case-sensitive</td></tr>
<tr><td><link id="AnsiStrIComp"/></td><td>Compare strings case-insensitive</td></tr>
<tr><td><link id="AnsiStrLComp"/></td><td>Compare L characters of strings case sensitive</td></tr>
<tr><td><link id="AnsiStrLIComp"/></td><td>Compare L characters of strings case insensitive</td></tr>
<tr><td><link id="AnsiStrLastChar"/></td><td>Get last character of string</td></tr>
<tr><td><link id="AnsiStrLower"/></td><td>Convert string to all-lowercase</td></tr>
<tr><td><link id="AnsiStrUpper"/></td><td>Convert string to all-uppercase</td></tr>
<tr><td><link id="AnsiUpperCase"/></td><td>Convert string to all-uppercase</td></tr>
<tr><td><link id="AppendStr"/></td><td>Append 2 strings</td></tr>
<tr><td><link id="AssignStr"/></td><td>Assign value of strings on heap</td></tr>
<tr><td><link id="CompareStr"/></td><td>Compare two strings case sensitive</td></tr>
<tr><td><link id="CompareText"/></td><td>Compare two strings case insensitive</td></tr>
<tr><td><link id="DisposeStr"/></td><td>Remove string from heap</td></tr>
<tr><td><link id="IsValidIdent"/></td><td>Is string a valid pascal identifier</td></tr>
<tr><td><link id="LastDelimiter"/></td><td>Last occurance of character in a string</td></tr>
<tr><td><link id="LeftStr"/></td><td>Get first N characters of a string</td></tr>
<tr><td><link id="LoadStr"/></td><td>Load string from resources</td></tr>
<tr><td><link id="LowerCase"/></td><td>Convert string to all-lowercase</td></tr>
<tr><td><link id="NewStr"/></td><td>Allocate new string on heap</td></tr>
<tr><td><link id="RightStr"/></td><td>Get last N characters of a string</td></tr>
<tr><td><link id="StrAlloc"/></td><td>Allocate memory for string</td></tr>
<tr><td><link id="StrBufSize"/></td><td>Reserve memory for a string</td></tr>
<tr><td><link id="StrDispose"/></td><td>Remove string from heap</td></tr>
<tr><td><link id="StrPas"/></td><td>Convert PChar to pascal string</td></tr>
<tr><td><link id="StrPCopy"/></td><td>Copy pascal string</td></tr>
<tr><td><link id="StrPLCopy"/></td><td>Copy N bytes of pascal string</td></tr>
<tr><td><link id="UpperCase"/></td><td>Convert string to all-uppercase</td></tr>
</table>
</descr>
</topic>

<topic name="FormatStrings">
<short>Formatting strings</short>
<descr>
<p>
Functions for formatting strings.
</p>
<table>
<th><td>Name</td><td>Description</td></th>
<tr><td><link id="AdjustLineBreaks"/></td><td>Convert line breaks to line breaks for system</td></tr>
<tr><td><link id="FormatBuf"/></td><td>Format a buffer</td></tr>
<tr><td><link id="Format"/></td><td>Format arguments in string</td></tr>
<tr><td><link id="FmtStr"/></td><td>Format buffer</td></tr>
<tr><td><link id="QuotedStr"/></td><td>Quote a string</td></tr>
<tr><td><link id="StrFmt"/></td><td>Format arguments in a string</td></tr>
<tr><td><link id="StrLFmt"/></td><td>Format maximum L characters in a string</td></tr>
<tr><td><link id="TrimLeft"/></td><td>Remove whitespace at the left of a string</td></tr>
<tr><td><link id="TrimRight"/></td><td>Remove whitespace at the right of a string</td></tr>
<tr><td><link id="Trim"/></td><td>Remove whitespace at both ends of a string</td></tr>
</table>
</descr>
</topic>

<topic name="FormatChars">
<short>Date and time formatting characters</short>
<descr>
<p>
Various date and time formatting routines accept a format string.
to format the date and or time. The following characters can be used
to control the date and time formatting:
</p>
<dl>
<dt>c</dt><dd>shortdateformat + ' ' + shorttimeformat</dd>
<dt>d</dt><dd>day of month</dd>
<dt>dd</dt><dd>day of month (leading zero)</dd>
<dt>ddd</dt><dd>day of week (abbreviation)</dd>
<dt>dddd</dt><dd>day of week (full)</dd>
<dt>ddddd</dt><dd>shortdateformat</dd>
<dt>dddddd</dt><dd>longdateformat</dd>
<dt>m</dt><dd>month</dd>
<dt>mm</dt><dd>month (leading zero)</dd>
<dt>mmm</dt><dd>month (abbreviation)</dd>
<dt>mmmm</dt><dd>month (full)</dd>
<dt>y</dt><dd>year (four digits)</dd>
<dt>yy</dt><dd>year (two digits)</dd>
<dt>yyyy</dt><dd>year (with century)</dd>
<dt>h</dt><dd>hour</dd>
<dt>hh</dt><dd>hour (leading zero)</dd>
<dt>n</dt><dd>minute</dd>
<dt>nn</dt><dd>minute (leading zero)</dd>
<dt>s</dt><dd>second</dd>
<dt>ss</dt><dd>second (leading zero)</dd>
<dt>t</dt><dd>shorttimeformat</dd>
<dt>tt</dt><dd>longtimeformat</dd>
<dt>am/pm</dt><dd>use 12 hour clock and display am and pm accordingly</dd>
<dt>a/p</dt><dd>use 12 hour clock and display a and p accordingly</dd>
<dt>/</dt><dd>insert date seperator</dd>
<dt>:</dt><dd>insert time seperator</dd>
<dt>"xx"</dt><dd>literal text</dd>
<dt>'xx'</dt><dd>literal text</dd>
</dl>
</descr>
</topic>

<topic name="PCharFunctions">
<short>PChar related functions</short>
<descr>
<p>
Most PChar functions are the same as their counterparts in the <file>STRINGS</file>
unit. The following functions are the same :
</p>
<ol>
<li><link id="StrCat"/> : Concatenates two <var>PChar</var> strings.</li>
<li><link id="StrComp"/> : Compares two <var>PChar</var> strings.</li>
<li><link id="StrCopy"/> : Copies a <var>PChar</var> string.</li>
<li><link id="StrECopy"/> : Copies a <var>PChar</var> string and returns a pointer to
the terminating null byte.</li>
<li><link id="StrEnd"/> : Returns a pointer to the terminating null byte.</li>
<li><link id="StrIComp"/> : Case insensitive compare of 2 <var>PChar</var> strings.</li>
<li><link id="StrLCat"/> : Appends at most L characters from one <var>PChar</var> to
another <var>PChar</var>.
</li>
<li><link id="StrLComp"/> : Case sensitive compare of at most L characters of 2 <var>PChar</var> strings.
</li>
<li><link id="StrLCopy"/> : Copies at most L characters from one <var>PChar</var> to another.
</li>
<li><link id="StrLen"/> : Returns the length (exclusive terminating null byte)
of a <var>PChar</var> string.</li>
<li> <link id="StrLIComp"/> : Case insensitive compare of at most L characters of 2
 <var>PChar</var> strings.
</li>
<li> <link id="StrLower"/> : Converts a <var>PChar</var> to all lowercase letters.
</li>
<li> <link id="StrMove"/> : Moves one <var>PChar</var> to another.
</li>
<li> <link id="StrNew"/> : Makes a copy of a <var>PChar</var> on the heap, and returns
a pointer to this copy.
</li>
<li> <link id="StrPos"/> : Returns the position of one <var>PChar</var> string in
another?
</li>
<li> <link id="StrRScan"/> : returns a pointer to the last occurrence of on
 <var>PChar</var> string in another one.
</li>
<li> <link id="StrScan"/> : returns a pointer to the first occurrence of on
 <var>PChar</var> string in another one.
</li>
<li> <link id="StrUpper"/> : Converts a <var>PChar</var> to all uppercase
letters.</li>
</ol>
<p>
The subsequent functions are different from their counterparts in
<file>STRINGS</file>, although the same examples can be used.
</p>
</descr>
</topic>


<topic name="IORoutines">
<short>File input/output routines</short>
<descr>
<p>
Functions for reading/writing to file.
</p>
<table>
<th><td>Name</td><td>Description</td></th>
<tr><td><link id="FileCreate"/></td><td>Create a file and return handle</td></tr>
<tr><td><link id="FileOpen"/></td><td>Open file end return handle</td></tr>
<tr><td><link id="FileRead"/></td><td>Read from file</td></tr>
<tr><td><link id="FileSeek"/></td><td>Set file position</td></tr>
<tr><td><link id="FileTruncate"/></td><td>Truncate file length</td></tr>
<tr><td><link id="FileWrite"/></td><td>Write to file</td></tr>
<tr><td><link id="FileClose"/></td><td>Close file handle</td></tr>
</table>
</descr>
</topic>

<topic name="FileNameRoutines">
<short>FileName handling routines</short>
<descr>
<p>
Functions for file manipulation.
</p>
<table>
<th><td>Name</td><td>Description</td></th>
<tr><td><link id="AddDisk"/></td><td>Add sisk to list of disk drives</td></tr>
<tr><td><link id="ChangeFileExt"/></td><td>Change extension of file name</td></tr>
<tr><td><link id="CreateDir"/></td><td>Create a directory</td></tr>
<tr><td><link id="DeleteFile"/></td><td>Delete a file</td></tr>
<tr><td><link id="DiskFree"/></td><td>Free space on disk</td></tr>
<tr><td><link id="DiskSize"/></td><td>Total size of disk</td></tr>
<tr><td><link id="ExpandFileName"/></td><td>Create full file name</td></tr>
<tr><td><link id="ExpandUNCFileName"/></td><td>Create full UNC file name</td></tr>
<tr><td><link id="ExtractFileDir"/></td><td>Extract directory part of filename</td></tr>
<tr><td><link id="ExtractFileDrive"/></td><td>Extract drive part of filename</td></tr>
<tr><td><link id="ExtractFileExt"/></td><td>Extract extension part of filename</td></tr>
<tr><td><link id="ExtractFileName"/></td><td>Extract name part of filename</td></tr>
<tr><td><link id="ExtractFilePath"/></td><td>Extrct path part of filename</td></tr>
<tr><td><link id="ExtractRelativePath"/></td><td>Construct relative path between two files</td></tr>
<tr><td><link id="FileAge"/></td><td>Return file age</td></tr>
<tr><td><link id="FileDateToDateTime"/></td><td>Convert file date to system date</td></tr>
<tr><td><link id="FileExists"/></td><td>Determine whether a file exists on disk</td></tr>
<tr><td><link id="FileGetAttr"/></td><td>Get attributes of file</td></tr>
<tr><td><link id="FileGetDate"/></td><td>Get date of last file modification</td></tr>
<tr><td><link id="FileSearch"/></td><td>Search for file in path</td></tr>
<tr><td><link id="FileSetAttr"/></td><td>Get file attributes</td></tr>
<tr><td><link id="FileSetDate"/></td><td>Get file dates</td></tr>
<tr><td><link id="FindFirst"/></td><td>Start finding a file</td></tr>
<tr><td><link id="FindNext"/></td><td>Find next file</td></tr>
<tr><td><link id="GetCurrentDir"/></td><td>Return current working directory</td></tr>
<tr><td><link id="RemoveDir"/></td><td>Remove a directory from disk</td></tr>
<tr><td><link id="RenameFile"/></td><td>Rename a file on disk</td></tr>
<tr><td><link id="SetCurrentDir"/></td><td>Set current working directory</td></tr>
<tr><td><link id="SetDirSeparators"/></td><td>Set directory separator characters</td></tr>
<tr><td><link id="FindClose"/></td><td>Stop searching a file</td></tr>
<tr><td><link id="DoDirSeparators"/></td><td>Replace directory separator characters</td></tr>
</table>
</descr>
</topic>

<topic name="DateTimeRoutines">
<short>Date/time routines</short>
<descr>
<p>
Functions for date and time handling.
</p>
<table>
<th><td>Name</td><td>Description</td></th>
<tr><td><link id="DateTimeToFileDate"/></td><td>Convert DateTime type to file date</td></tr>
<tr><td><link id="DateTimeToStr"/></td><td>Construct string representation of DateTime</td></tr>
<tr><td><link id="DateTimeToString"/></td><td>Construct string representation of DateTime</td></tr>
<tr><td><link id="DateTimeToSystemTime"/></td><td>Convert DateTime to system time</td></tr>
<tr><td><link id="DateTimeToTimeStamp"/></td><td>Convert DateTime to timestamp</td></tr>
<tr><td><link id="DateToStr"/></td><td>Construct string representation of date</td></tr>
<tr><td><link id="Date"/></td><td>Get current date</td></tr>
<tr><td><link id="DayOfWeek"/></td><td>Get day of week</td></tr>
<tr><td><link id="DecodeDate"/></td><td>Decode DateTime to year month and day</td></tr>
<tr><td><link id="DecodeTime"/></td><td>Decode DateTime to hours, minutes and seconds</td></tr>
<tr><td><link id="EncodeDate"/></td><td>Encode year, day and month to DateTime</td></tr>
<tr><td><link id="EncodeTime"/></td><td>Encode hours, minutes and seconds to DateTime</td></tr>
<tr><td><link id="FormatDateTime"/></td><td>Return string representation of DateTime</td></tr>
<tr><td><link id="IncMonth"/></td><td>Add 1 to month</td></tr>
<tr><td><link id="IsLeapYear"/></td><td>Determine if year is leap year</td></tr>
<tr><td><link id="MSecsToTimeStamp"/></td><td>Convert nr of milliseconds to timestamp</td></tr>
<tr><td><link id="Now"/></td><td>Get current date and time</td></tr>
<tr><td><link id="StrToDateTime"/></td><td>Convert string to DateTime</td></tr>
<tr><td><link id="StrToDate"/></td><td>Convert string to date</td></tr>
<tr><td><link id="StrToTime"/></td><td>Convert string to time</td></tr>
<tr><td><link id="SystemTimeToDateTime"/></td><td>Convert system time to datetime</td></tr>
<tr><td><link id="TimeStampToDateTime"/></td><td>Convert time stamp to DateTime</td></tr>
<tr><td><link id="TimeStampToMSecs"/></td><td>Convert Timestamp to number of millicseconds</td></tr>
<tr><td><link id="TimeToStr"/></td><td>return string representation of Time</td></tr>
<tr><td><link id="Time"/></td><td>Get current tyme</td></tr>
</table>
</descr>
</topic>
<topic name="ConversionRoutines">
<short>Miscellaneous conversion routines</short>
<descr>
<p>
Functions for various conversions.
</p>
<table>
<th><td>Name</td><td>Description</td></th>
<tr><td><link id="BCDToInt"/></td><td>Convert BCD number to integer</td></tr>
<tr><td><link id="CompareMem"/></td><td>Compare two memory regions</td></tr>
<tr><td><link id="FloatToStrF"/></td><td>Convert float to formatted string</td></tr>
<tr><td><link id="FloatToStr"/></td><td>Convert float to string</td></tr>
<tr><td><link id="FloatToText"/></td><td>Convert float to string</td></tr>
<tr><td><link id="FormatFloat"/></td><td>Format a floating point value</td></tr>
<tr><td><link id="GetDirs"/></td><td>Split string in list of directories</td></tr>
<tr><td><link id="IntToHex"/></td><td>return hexadecimal representation of integer</td></tr>
<tr><td><link id="IntToStr"/></td><td>return decumal representation of integer</td></tr>
<tr><td><link id="StrToIntDef"/></td><td>Convert string to integer with default value</td></tr>
<tr><td><link id="StrToInt"/></td><td>Convert string to integer</td></tr>
<tr><td><link id="StrToFloat"/></td><td>Convert string to float</td></tr>
<tr><td><link id="TextToFloat"/></td><td>Convert null-terminated string to float</td></tr>
</table>
</descr>
</topic>

<element name="TDateTime">
<short>Type describing date/time</short>
<descr>
<p>
Many functions return or require a <var>TDateTime</var> type, which contains
a date and time in encoded form. The date and time are converted to a double
as follows:
</p>
<ul>
<li> The date part is stored in the integer part of the double as the
number of days passed since January 1, 1900.
</li>
<li> The time part is stored in the fractional part of the double, as
the number of milliseconds passed since midnight (00:00), divided by the
total number of milliseconds in a day.
</li>
</ul>
</descr>
</element>

<element name="Date">
<short>Return the current date.</short>
<descr>
<var>Date</var> returns the current date in <var>TDateTime</var> format.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="Time"/>
<link id="Now"/>
</seealso>
<example file="sysutex/ex1"/>
</element>


<element name="DateTimeToFileDate">
<short>Convert a <var>TDateTime</var> value to a file age (integer)</short>
<descr>
<var>DateTimeToFileDate</var> function converts a date/time indication in
<var>TDateTime</var> format to a filedate function, such as returned for
instance by the <link id="FileAge"/> function.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="Time"/>
<link id="Date"/>
<link id="FileDateToDateTime"/>,
<link id="DateTimeToSystemTime"/>
<link id="DateTimeToTimeStamp"/>
</seealso>
<example file="sysutex/ex2"/>
</element>



<element name="DateTimeToStr">
<short>Converts a <var>TDateTime</var> value to a string using a predefined format.</short>
<descr>
<var>DateTimeToStr</var> returns a string representation of
<var>DateTime</var> using the formatting specified in
<var>ShortDateTimeFormat</var>. It corresponds to a call to
<var>FormatDateTime('c',DateTime)</var> (see <link id="formatchars"/>).
</descr>
<errors>
None.
</errors>
<seealso>
<link id="FormatDateTime"/>
</seealso>
<example file="sysutex/ex3"/>
</element>



<element name="DateTimeToString">
<short>Converts a <var>TDateTime</var> value to a string with a given format.</short>
<descr>
<var>DateTimeToString</var> returns in <var>Result</var> a string representation of
<var>DateTime</var> using the formatting specified in <var>FormatStr</var>.

for a list of characters that can be used in the <var>FormatStr</var> formatting
string, see <link id="formatchars"/>.
</descr>
<errors>
In case a wrong formatting character is found, an <var>EConvertError</var> is
raised.
</errors>
<seealso>
<link id="FormatDateTime"/>
<link id="formatchars"/>.
</seealso>
<example file="sysutex/ex4"/>
</element>



<element name="DateTimeToSystemTime">
<short>Converts a <var>TDateTime</var> value to a systemtime structure.</short>
<descr>
<var>DateTimeToSystemTime</var> converts a date/time pair in <var>DateTime</var>, with
<var>TDateTime</var> format to a system time <var>SystemTime</var>.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="DateTimeToFileDate"/>
<link id="SystemTimeToDateTime"/>,
<link id="DateTimeToTimeStamp"/>
</seealso>
<example file="sysutex/ex5"/>
</element>



<element name="DateTimeToTimeStamp">
<short>Converts a <var>TDateTime</var> value to a TimeStamp structure.</short>
<descr>
<var>DateTimeToSystemTime</var> converts a date/time pair in <var>DateTime</var>, with
<var>TDateTime</var> format to a <var>TTimeStamp</var> format.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="DateTimeToFileDate"/>
<link id="SystemTimeToDateTime"/>,
<link id="DateTimeToSystemTime"/>
</seealso>
<example file="sysutex/ex6"/>
</element>

<element name="DateToStr">
<short>Converts a <var>TDateTime</var> value to a date string with a predefined format.</short>
<descr>
<var>DateToStr</var> converts <var>Date</var> to a string representation. It uses
<var>ShortDateFormat</var> as it's formatting string. It is hence completely
equivalent to a <var>FormatDateTime('ddddd', Date)</var>.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="TimeToStr"/>
<link id="DateTimeToStr"/>
<link id="FormatDateTime"/>,
<link id="StrToDate"/>
</seealso>
<example file="sysutex/ex7"/>
</element>

<element name="DayOfWeek">
<short>Returns the day of the week.</short>
<descr>
<var>DayOfWeek</var> returns the day of the week from <var>DateTime</var>.
<var>Sunday</var> is counted as day 1, <var>Saturday</var> is counted as
day 7. The result of <var>DayOfWeek</var> can serve as an index to
the <var>LongDayNames</var> constant array, to retrieve the name of
the day.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="Date"/>
<link id="DateToStr"/>
</seealso>
<example file="sysutex/ex8"/>
</element>


<element name="DecodeDate">
<short>Decode a <var>TDateTime</var> to a year,month,day triplet</short>
<descr>
<var>DecodeDate</var> decodes the Year, Month and Day stored in <var>Date</var>,
and returns them in the <var>Year</var>, <var>Month</var> and <var>Day</var> variables.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="EncodeDate"/>
<link id="DecodeTime"/>.
</seealso>
<example file="sysutex/ex9"/>
</element>




<element name="DecodeTime">
<short>Decode a <var>TDateTime</var> to a hour,minute,second,millisec quartet</short>
<descr>
<var>DecodeDate</var> decodes the hours, minutes, second and milliseconds stored
in <var>Time</var>, and returns them in the <var>Hour</var>, <var>Minute</var> and
<var>Second</var> and <var>MilliSecond</var> variables.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="EncodeTime"/>
<link id="DecodeDate"/>.
</seealso>
<example file="sysutex/ex10"/>
</element>

<element name="EncodeDate">
<short>Encode a Year,Month,Day to a <var>TDateTime</var> value.</short>
<descr>
<p>
<var>EncodeDate</var> encodes the <var>Year</var>, <var>Month</var> and <var>Day</var> variables to
a date in <var>TDateTime</var> format. It does the opposite of the
<link id="DecodeDate"/> procedure.
</p>
<p>
The parameters must lie withing valid ranges (boundaries included):
</p>
<dl>
<dt>Year</dt><dd> must be between 1 and 9999.</dd>
<dt>Month</dt><dd> must be within the range 1-12.</dd>
<dt>Day</dt><dd> msut be between 1 and 31.</dd>
</dl>
</descr>
<errors>
In case one of the parameters is out of it's valid range, 0 is returned.
</errors>
<seealso>
<link id="EncodeTime"/>
<link id="DecodeDate"/>
</seealso>
<example file="sysutex/ex11"/>
</element>

<element name="EncodeTime">
<short>Encode a Hour,Min,Sec,millisec to a <var>TDateTime</var> value.</short>
<descr>
<p>
<var>EncodeTime</var> encodes the <var>Hour</var>, <var>Minute</var>, <var>Second</var>,
<var>MilliSecond</var> variables to a <var>TDateTime</var> format result.
It does the opposite of the <link id="DecodeTime"/> procedure.
</p>
<p>
The parameters must have a valid range (boundaries included):
</p>
<dl>
<dt>Hour</dt><dd> must be between 0 and 23.</dd>
<dt>Minute,second</dt><dd> must both be between 0 and 59.</dd>
<dt>Millisecond</dt><dd> must be between 0 and 999.</dd>
</dl>
</descr>
<errors>
In case one of the parameters is outside of it's valid range, 0 is returned.
</errors>
<seealso>
<link id="EncodeDate"/>
<link id="DecodeTime"/>
</seealso>
<example file="sysutex/ex12"/>
</element>

<element name="FileDateToDateTime">
<short>Convert a <var>FileDate</var> value to a <var>TDateTime</var>
value.</short>
<descr>
<var>FileDateToDateTime</var> converts the date/time encoded in <var>filedate</var>
to a <var>TDateTime</var> encoded form. It can be used to convert date/time values
returned by the <link id="FileAge"/> or <link id="FindFirst"/>/<link id="FindNext"/>
functions to <var>TDateTime</var> form.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="DateTimeToFileDate"/>
</seealso>
<example file="sysutex/ex13"/>
</element>

<element name="FormatDateTime">
<short>Return a string representation of a <var>TDateTime</var> value with a given
format.</short>
<descr>
<var>FormatDateTime</var> formats the date and time encoded in <var>DateTime</var>
according to the formatting given in <var>FormatStr</var>. The complete list
of formatting characters can be found in <link id="formatchars"/>.
</descr>
<errors>
On error (such as an invalid character in the formatting string), and
<var>EConvertError</var> exception is raised.
</errors>
<seealso>
<link id="DateTimeToStr"/>
<link id="DateToStr"/>
<link id="TimeToStr"/>
<link id="StrToDateTime"/>
</seealso>
<example file="sysutex/ex14"/>
</element>

<element name="IncMonth">
<short>Increases the month in a <var>TDateTime</var> value with a given amount.</short>
<descr>
<var>IncMonth</var> increases the month number in <var>DateTime</var> with
<var>NumberOfMonths</var>. It wraps the result as to get a month between 1 and
12, and updates the year accordingly. <var>NumberOfMonths</var> can be negative,
and can be larger than 12 (in absolute value).
</descr>
<errors>
None.
</errors>
<seealso>
<link id="Date"/>
<link id="Time"/>
<link id="Now"/>
</seealso>
<example file="sysutex/ex15"/>
</element>

<element name="IsLeapYear">
<short>Determine whether a year is a leap year.</short>
<descr>
<var>IsLeapYear</var> returns <var>True</var> if <var>Year</var> is a leap year,
<var>False</var> otherwise.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="IncMonth"/>
<link id="Date"/>
</seealso>
<example file="sysutex/ex16"/>
</element>

<element name="MSecsToTimeStamp">
<short>Convert a number of milliseconds to a <var>TDateTime</var> value.</short>
<descr>
<p>
<var>MSecsTiTimeStamp</var> converts the given number of milliseconds to
a <var>TTimeStamp</var> date/time notation.
</p>
<p>
Use <var>TTimeStamp</var> variables if you need to keep very precise track of
time.
</p>
</descr>
<errors>
None.
</errors>
<seealso>
<link id="TimeStampToMSecs"/>
<link id="DateTimeToTimeStamp"/>
</seealso>
<example file="sysutex/ex17"/>
</element>

<element name="Now">
<short>Returns the current date and time.</short>
<descr>
<var>Now</var> returns the current date and time. It is equivalent to
<var>Date+Time</var>.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="Date"/>
<link id="Time"/>
</seealso>
<example file="sysutex/ex18"/>
</element>

<element name="StrToDate">
<short>Convert a date string to a <var>TDateTime</var> value.</short>
<descr>
<p>
<var>StrToDate</var> converts the string <var>S</var> to a <var>TDateTime</var> date
value. The Date must consist of 1 to three digits, separated by the
<var>DateSeparator</var> character. If two numbers are given, they
are supposed to form the day and month of the current year. If only
one number is given, it is supposed to represent the day of the
current month. (This is <em>not</em> supported in Delphi)
</p>
<p>
The order of the digits (y/m/d, m/d/y, d/m/y) is determined from the
<var>ShortDateFormat</var> variable.
</p>
</descr>
<errors>
On error (e.g. an invalid date or invalid character),
an <var>EConvertError</var> exception is raised.
</errors>
<seealso>
<link id="StrToTime"/>
<link id="DateToStr"/>
<link id="TimeToStr"/>
</seealso>
<example file="sysutex/ex19"/>
</element>

<element name="StrToDateTime">
<short>Convert a date/time string to a <var>TDateTime</var> value.</short>
<descr>
<p>
<var>StrToDateTime</var> converts the string <var>S</var> to a <var>TDateTime</var> date
and time value. The Date must consist of 1 to three digits, separated by the
<var>DateSeparator</var> character. If two numbers are given, they
are supposed to form the day and month of the current year. If only
one number is given, it is supposed to represent the day of the
current month. (This is <em>not</em> supported in Delphi)
</p>
<p>
The order of the digits (y/m/d, m/d/y, d/m/y) is determined from the
<var>ShortDateFormat</var> variable.
</p>
</descr>
<errors>
On error (e.g. an invalid date or invalid character),
an <var>EConvertError</var> exception is raised.
</errors>
<seealso>
<link id="StrToDate"/>
<link id="StrToTime"/>
<link id="DateTimeToStr"/>
</seealso>
<example file="sysutex/ex20"/>
</element>

<element name="StrToTime">
<short>Convert a time string to a <var>TDateTime</var> value.</short>
<descr>
<var>StrToTime</var> converts the string <var>S</var> to a <var>TDateTime</var> time
value. The time must consist of 1 to 4 digits, separated by the
<var>TimeSeparator</var> character. If two numbers are given, they
are supposed to form the hour and minutes.
</descr>
<errors>
On error (e.g. an invalid date or invalid character),
an <var>EConvertError</var> exception is raised.
</errors>
<seealso>
<link id="StrToDate"/>
<link id="StrToDateTime"/>
<link id="TimeToStr"/>
</seealso>
<example file="sysutex/ex21"/>
</element>

<element name="SystemTimeToDateTime">
<short>Convert a system time to a <var>TDateTime</var> value.</short>
<descr>
<var>SystemTimeToDateTime</var> converts a <var>TSystemTime</var> record to a
<var>TDateTime</var> style date/time indication.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="DateTimeToSystemTime"/>
</seealso>
<example file="sysutex/ex22"/>
</element>

<element name="Time">
<short>Returns the current time.</short>
<descr>
<var>Time</var> returns the current time in <var>TDateTime</var> format. The date
part of the <var>TDateTimeValue</var> is set to zero.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="Now"/>
<link id="Date"/>
</seealso>
<example file="sysutex/ex23"/>
</element>


<element name="TimeStampToDateTime">
<short>Convert a TimeStamp value to a <var>TDateTime</var> value.</short>
<descr>
<var>TimeStampToDateTime</var> converts <var>TimeStamp</var> to a <var>TDateTime</var>
format variable. It is the inverse operation of <link id="DateTimeToTimeStamp"/>.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="DateTimeToTimeStamp"/>
<link id="TimeStampToMSecs"/>
</seealso>
<example file="sysutex/ex24"/>
</element>

<element name="TimeStampToMSecs">
<short>Converts a timestamp to a number of milliseconds.</short>
<descr>
<p>
<var>TimeStampToMSecs</var> converts <var>TimeStamp</var> to the number of seconds
since <var>1/1/0001</var>.
</p>
<p>
Use <var>TTimeStamp</var> variables if you need to keep very precise track of
time.
</p>
<p>
For an example, see <link id="MSecsToTimeStamp"/>.
</p>
</descr>
<errors>
None.
</errors>
<seealso>
<link id="MSecsToTimeStamp"/>
<link id="TimeStampToDateTime"/>
</seealso>
</element>

<element name="TimeToStr">
<short>Convert a <var>TDateTime</var> time to a string using a predefined format.</short>
<descr>
<var>TimeToStr</var> converts the time in <var>Time</var> to a string. It uses
the <var>ShortTimeFormat</var> variable to see what formatting needs to be
applied. It is therefor entirely equivalent to a
<var>FormatDateTime('t',Time)</var> call.
</descr>
<errors>
None.
</errors>
<seealso>
</seealso>
<example file="sysutex/ex25"/>
</element>

<element name="AddDisk">
<short>Add a disk to the list of known disks (Unix only)</short>
<descr>
<p>
On Linux  both the <link id="DiskFree"/> and <link id="DiskSize"/> functions need a
file on the specified drive, since is required for the statfs system call.
</p>
<p>
These filenames are set in drivestr[0..26], and the first 4 have been
preset to :
</p>
<dl>
<dt>Disk 0</dt><dd><var>'.'</var> default drive - hence current directory is used.</dd>
<dt>Disk 1</dt><dd><var>'/fd0/.'</var> floppy drive 1.</dd>
<dt>Disk 2</dt><dd><var>'/fd1/.'</var> floppy drive 2.</dd>
<dt>Disk 3</dt><dd><var>'/'</var> <file>C:</file> equivalent of DOS is the root partition.</dd>
</dl>
<p>
Drives 4..26 can be set by your own applications with the <var>AddDisk</var> call.
</p>
<p>
The <var>AddDisk</var> call adds <var>Path</var> to the names of drive files, and
returns the number of the disk that corresponds to this drive. If you
add more than 21 drives, the count is wrapped to 4.
</p>
</descr>
<errors>
None.
</errors>
<seealso>
<link id="DiskFree"/>
<link id="DiskSize"/>
</seealso>
</element>

<element name="CreateDir">
<short>Create a new directory</short>
<descr>
<p>
<var>CreateDir</var> creates a new directory with name <var>NewDir</var>.
If the directory doesn't contain an absolute path, then the directory is
created below the current working directory.
</p>
<p>
The function returns <var>True</var> if the directory was successfully
created, <var>False</var> otherwise.
</p>
</descr>
<errors>
In case of an error, the function returns <var>False</var>.
</errors>
<seealso>
<link id="RemoveDir"/>
</seealso>
<example file="sysutex/ex26"/>
</element>

<element name="DiskFree">
<short>Return the amount of free diskspace</short>
<descr>
<p>
<var>DiskFree</var> returns the free space (in bytes) on disk <var>Drive</var>.
Drive is the number of the disk drive:
</p>
<dl>
<dt>0</dt><dd> for the current drive.</dd>
<dt>1</dt><dd> for the first floppy drive.</dd>
<dt>2</dt><dd> for the second floppy drive.</dd>
<dt>3</dt><dd> for the first hard-disk partition.</dd>
<dt>4-26</dt><dd> for all other drives and partitions.</dd>
</dl>
<remark>
Under linux, and Unix in general, the concept of disk is
different than the dos one, since the filesystem is seen as one big
directory tree. For this reason, the <var>DiskFree</var> and <link id="DiskSize"/>
functions must be mimicked using filenames that reside on the partitions.
For more information, see <link id="AddDisk"/>.
</remark>
</descr>
<errors>
On error, <var>-1</var> is returned.
</errors>
<seealso>
<link id="DiskSize">DiskSize</link>
<link id="AddDisk"/>
</seealso>
<example file="sysutex/ex27"/>
</element>

<element name="DiskSize">
<short>Return the total amount of diskspace.</short>
<descr>
<p>
<var>DiskSize</var> returns the size (in bytes) of disk <var>Drive</var>.
Drive is the number of the disk drive:
</p>
<dl>
<dt>0</dt><dd> for the current drive.</dd>
<dt>1</dt><dd> for the first floppy drive.</dd>
<dt>2</dt><dd> for the second floppy drive.</dd>
<dt>3</dt><dd> for the first hard-disk parttion.</dd>
<dt>4-26</dt><dd> for all other drives and partitions.</dd>
</dl>
<remark>
Under linux, and Unix in general, the concept of disk is
different than the dos one, since the filesystem is seen as one big
directory tree. For this reason, the <link id="DiskFree"/> and <var>DiskSize</var>
functions must be mimicked using filenames that reside on the partitions.
For more information, see <link id="AddDisk"/>
</remark>
<p>
For an example, see <link id="DiskFree">DiskFree</link>.
</p>
</descr>
<errors>
On error, <var>-1</var> is returned.
</errors>
<seealso>
<link id="DiskFree"/>
<link id="AddDisk"/>
</seealso>
</element>


<element name="GetCurrentDir">
<short>Return the current working directory of the application.</short>
<descr>
<var>GetCurrentDir</var> returns the current working directory.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="SetCurrentDir"/>
<link id="DiskFree"/>
<link id="DiskSize"/>
</seealso>
<example file="sysutex/ex28"/>
</element>

<element name="RemoveDir">
<short>Remove a directory from the filesystem.</short>
<descr>
<p>
<var>RemoveDir</var> removes directory <var>Dir</var> from the disk.
If the directory is not absolue, it is appended to the current working
directory.
</p>
<p>
For an example, see <link id="CreateDir"/>.
</p>
</descr>
<errors>
In case of error (e.g. the directory isn't empty) the function returns
<var>False</var>. If successful, <var>True</var> is returned.
</errors>
<seealso>
</seealso>
</element>


<element name="SetCurrentDir">
<short>Set the current directory of the application.</short>
<descr>
<var>SetCurrentDir</var> sets the current working directory of your program
to <var>NewDir</var>. It returns <var>True</var> if the function was successfull,
<var>False</var> otherwise.
</descr>
<errors>
In case of error, <var>False</var> is returned.
</errors>
<seealso>
<link id="GetCurrentDir"/>
</seealso>
</element>

<example file="sysutex/ex29"/>


<element name="ChangeFileExt">
<short>Change the extension of a filename.</short>
<descr>
<p>
<var>ChangeFileExt</var> changes the file extension in <var>FileName</var> to
<var>Extension</var>.
The extension <var>Extension</var> includes the starting <var>.</var> (dot).
The previous extension of <var>FileName</var> are all characters after the
last <var>.</var>, the <var>.</var> character included.
</p>
<p>
If <var>FileName</var> doesn't have an extension, <var>Extension</var> is just
appended.
</p>
</descr>
<errors>
None.
</errors>
<seealso>
<link id="ExtractFileName"/>
<link id="ExtractFilePath"/>
<link id="ExpandFileName"/>
</seealso>
</element>


<element name="DeleteFile">
<short>Delete a file from the filesystem.</short>
<descr>
<var>DeleteFile</var> deletes file <var>FileName</var> from disk. The function
returns <var>True</var> if the file was successfully removed, <var>False</var>
otherwise.
</descr>
<errors>
On error, <var>False</var> is returned.
</errors>
<seealso>
<link id="FileCreate"/>
<link id="FileExists"/>
</seealso>
<example file="sysutex/ex31"/>
</element>



<element name="DoDirSeparators">
<short>Convert known directory separators to the current directory separator.</short>
<descr>
This function replaces all known directory separators
to the directory separator character for the current system.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="ExtractFileName"/>
<link id="ExtractFilePath"/>
</seealso>
<example file="sysutex/ex32"/>
</element>



<element name="ExpandFileName">
<short>Expand a relative filename to an absolute filename.</short>
<descr>
<var>ExpandFileName</var> expands the filename to an absolute filename.
It changes all directory separator characters to the one appropriate for the
system first.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="ExtractFileName"/>
<link id="ExtractFilePath"/>
<link id="ExtractFileDir"/>,
<link id="ExtractFileDrive"/>
<link id="ExtractFileExt"/>
<link id="ExtractRelativePath"/>
</seealso>
<example file="sysutex/ex33"/>
</element>

<element name="ExpandUNCFileName">
<short>Expand a relative filename to an absolute UNC filename.</short>
<descr>
<var>ExpandUNCFileName</var> runs <link id="ExpandFileName"/> on <var>FileName</var>
and then attempts to replace the driveletter by the name of a shared disk.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="ExtractFileName"/>
<link id="ExtractFilePath"/>
<link id="ExtractFileDir"/>,
<link id="ExtractFileDrive"/>
<link id="ExtractFileExt"/>
<link id="ExtractRelativePath"/>
</seealso>
</element>


<element name="ExtractFileDir">
<short>Extract the directory part of a filename.</short>
<descr>
<var>ExtractFileDir</var> returns only the directory part of <var>FileName</var>,
not including a driveletter. The directory name has NO ending directory
separator, in difference with <link id="ExtractFilePath"/>.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="ExtractFileName"/>
<link id="ExtractFilePath"/>
<link id="ExtractFileDir"/>,
<link id="ExtractFileDrive"/>
<link id="ExtractFileExt"/>
<link id="ExtractRelativePath"/>
</seealso>
<example file="sysutex/ex34"/>
</element>


<element name="ExtractFileDrive">
<short>Extract the drive part from a filename.</short>
<descr>
<p>
<var>Extracts</var> the drive letter from a filename. Note that some
operating systems do not support drive letters.
</p>
<p>
For an example, see <link id="ExtractFileDir"/>.
</p>
</descr>
<errors>
</errors>
<seealso>
<link id="ExtractFileName"/>
<link id="ExtractFilePath"/>
<link id="ExtractFileDir"/>,
<link id="ExtractFileDrive"/>
<link id="ExtractFileExt"/>
<link id="ExtractRelativePath"/>
</seealso>
</element>

<element name="ExtractFileExt">
<short>Return the extension from a filename.</short>
<descr>
<p>
<var>ExtractFileExt</var> returns the extension (including the
<var>.</var>(dot) character) of <var>FileName</var>.
</p>
<p>
For an example, see <link id="ExtractFileDir"/>.
</p>
</descr>
<errors>
None.
</errors>
<seealso>
<link id="ExtractFileName"/>
<link id="ExtractFilePath"/>
<link id="ExtractFileDir"/>,
<link id="ExtractFileDrive"/>
<link id="ExtractFileExt"/>
<link id="ExtractRelativePath"/>
</seealso>
</element>


<element name="ExtractFileName">
<short>Extract the filename part from a full path filename.</short>
<descr>
<p>
<var>ExtractFileName</var> returns the filename part from <var>FileName</var>.
The filename consists of all characters after the last directory separator
character ('/' or '\') or drive letter.
</p>
<p>
The full filename can always be reconstucted by concatenating the result
of <link id="ExtractFilePath"/> and <var>ExtractFileName</var>.
</p>
<p>
For an example, see <link id="ExtractFileDir"/>.
</p>
</descr>
<errors>
None.
</errors>
<seealso>
<link id="ExtractFileName"/>
<link id="ExtractFilePath"/>
<link id="ExtractFileDir"/>,
<link id="ExtractFileDrive"/>
<link id="ExtractFileExt"/>
<link id="ExtractRelativePath"/>
</seealso>
</element>


<element name="ExtractFilePath">
<short>Extract the path from a filename.</short>
<descr>
<p>
<var>ExtractFilePath</var> returns the path part (including driveletter) from
<var>FileName</var>. The path consists of all characters before the last
directory separator character ('/' or '\'), including the directory
separator itself.
In case there is only a drive letter, that will be returned.
</p>
<p>
The full filename can always be reconstucted by concatenating the result
of <var>ExtractFilePath</var> and <link id="ExtractFileName"/>.
</p>
<p>
For an example, see <link id="ExtractFileDir"/>.
</p>
</descr>
<errors>
None.
</errors>
<seealso>
<link id="ExtractFileName"/>
<link id="ExtractFilePath"/>
<link id="ExtractFileDir"/>,
<link id="ExtractFileDrive"/>
<link id="ExtractFileExt"/>
<link id="ExtractRelativePath"/>
</seealso>
</element>


<element name="ExtractRelativePath">
<short>Extract a relative path from a filename, given a base directory.</short>
<descr>
<var>ExtractRelativePath</var> constructs a relative path to go from
<var>BaseName</var> to <var>DestName</var>. If <var>DestName</var> is on another drive
(Not on Linux) then the whole <var>Destname</var> is returned.

<em> Note:</em> This function does not exist in the Delphi unit.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="ExtractFileName"/>
<link id="ExtractFilePath"/>
<link id="ExtractFileDir"/>,
<link id="ExtractFileDrive"/>
<link id="ExtractFileExt"/>,
</seealso>
<example file="sysutex/ex35"/>
</element>

<element name="FileAge">
<short>Return the timestamp of a file.</short>
<descr>
<var>FileAge</var> returns the last modification time of file <var>FileName</var>.
The FileDate format can be transformed to <var>TDateTime</var> format with the
<link id="FileDateToDateTime"/> function.
</descr>
<errors>
In case of errors, <var>-1</var> is returned.
</errors>
<seealso>
<link id="FileDateToDateTime"/>
<link id="FileExists"/>
<link id="FileGetAttr"/>
</seealso>
<example file="sysutex/ex36"/>
</element>

<element name="FileClose">
<short>Close a file handle.</short>
<descr>
<p>
<var>FileClose</var> closes the file handle <var>Handle</var>. After this call,
attempting to read or write from the handle will result in an error.
</p>
<p>
For an example, see <link id="FileCreate"/>
</p>
</descr>
<errors>
None.
</errors>
<seealso>
<link id="FileCreate"/>
<link id="FileWrite"/>
<link id="FileOpen"/>
<link id="FileRead"/>,
<link id="FileTruncate"/>
<link id="FileSeek"/>
</seealso>
</element>

<element name="FileCreate">
<short>Create a new file and return a handle to it.</short>
<descr>
<var>FileCreate</var> creates a new file with name <var>FileName</var> on the disk and
returns a file handle which can be used to read or write from the file with
the <link id="FileRead"/> and <link id="FileWrite"/> functions.

If a file with name <var>FileName</var> already existed on the disk, it is
overwritten.
</descr>
<errors>
If an error occurs (e.g. disk full or non-existent path), the function
returns <var>-1</var>.
</errors>
<seealso>
<link id="FileClose"/>
<link id="FileWrite"/>
<link id="FileOpen"/>
<link id="FileRead"/>,
<link id="FileTruncate"/>
<link id="FileSeek"/>
</seealso>
<example file="sysutex/ex37"/>
</element>



<element name="FileExists">
<short>Check whether a file exists in the filesystem.</short>
<descr>
<var>FileExists</var> returns <var>True</var> if a file with name <var>FileName</var>
exists on the disk, <var>False</var> otherwise.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="FileAge"/>
<link id="FileGetAttr"/>
<link id="FileSetAttr"/>
</seealso>
<example file="sysutex/ex38"/>
</element>

<element name="FileGetAttr">
<short>Return attributes of a file.</short>
<descr>
<p>
<var>FileGetAttr</var> returns the attribute settings of file
<var>FileName</var>. The attribute is a <var>OR</var>-ed combination
of the following constants:
</p>
<dl>
<dt>faReadOnly</dt><dd> The file is read-only.</dd>
<dt>faHidden</dt>
<dd>
The file is hidden. (On unix, this means that the filename starts with a dot)
</dd>
<dt>faSysFile</dt>
<dd>
The file is a system file (On unix, this means that the file is a character, block or FIFO file).
</dd>
<dt>faVolumeId</dt>
<dd> Volume Label. Not possible under unix.</dd>
<dt>faDirectory</dt><dd> File is a directory.</dd>
<dt>faArchive</dt><dd> file is an archive. Not possible on Unix</dd>
</dl>
</descr>
<errors>
In case of error, -1 is returned.
</errors>
<seealso>
<link id="FileSetAttr"/>
<link id="FileAge"/>
<link id="FileGetDate"/>.
</seealso>
<example file="sysutex/ex40"/>
</element>



<element name="FileGetDate">
<short>Return the file time of an opened file.</short>
<descr>
<var>FileGetdate</var> returns the filetime of the opened file with filehandle
<var>Handle</var>. It is the same as <link id="FileAge"/>, with this difference that
<var>FileAge</var> only needs the file name, while <var>FilegetDate</var> needs an
open file handle.
</descr>
<errors>
On error, -1 is returned.
</errors>
<seealso>
<link id="FileAge"/>
</seealso>
<example file="sysutex/ex39"/>
</element>



<element name="FileOpen">
<short>Open an existing file and return a filehandle</short>
<descr>
<p>
<var>FileOpen</var> opens a file with name <var>FileName</var> with mode <var>Mode</var>.
<var>Mode</var> can be one of the following constants:
</p>
<dl>
<dt>fmOpenRead</dt><dd> The file is opened for reading.</dd>
<dt>fmOpenWrite</dt><dd> The file is opened for writing.</dd>
<dt>fmOpenReadWrite</dt><dd> The file is opened for reading and
writing.</dd>
</dl>
<p>
If the file has been successfully opened, it can be read  from or written to
(depending on the <var>Mode</var> parameter) with the <link id="FileRead"/> and
<var>FileWrite</var> functions.
</p>
<remark>
Remark that you cannot open a file if it doesn't exist yet, i.e. it will not
be created for you. If you want tp create a new file, or overwrite an old
one, use the <link id="FileCreate"/> function.
</remark>
<p>
For an example, see <link id="FileOpen"/>
</p>
</descr>
<errors>
On Error, -1 is returned.
</errors>
<seealso>
<link id="FileClose"/>
<link id="FileWrite"/>
<link id="FileCreate"/>
<link id="FileRead"/>,
<link id="FileTruncate"/>
<link id="FileSeek"/>
</seealso>
</element>

<element name="FileRead">
<short>Read data from a filehandle in a buffer.</short>
<descr>
<p>
<var>FileRead</var> reads <var>Count</var> bytes from file-handle <var>Handle</var> and
stores them into <var>Buffer</var>. Buffer must be at least <var>Count</var> bytes
long. No checking on this is performed, so be careful not to overwrite any
memory.  <var>Handle</var> must be the result of a <link id="FileOpen"/> call.
</p>
<p>
For an example, see <link id="FileCreate"/>
</p>
</descr>
<errors>
On error, -1 is returned.
</errors>
<seealso>
<link id="FileClose"/>
<link id="FileWrite"/>
<link id="FileCreate"/>
<link id="FileOpen"/>,
<link id="FileTruncate"/>
<link id="FileSeek"/>
</seealso>
</element>


<element name="FileSearch">
<short>Search for a file in a path.</short>
<descr>
<var>FileSearch</var> looks for the file <var>Name</var> in <var>DirList</var>, where
dirlist is a list of directories, separated by semicolons or colons.
It returns the full filename of the first match found.
</descr>
<errors>
On error, an empty string is returned.
</errors>
<seealso>
<link id="ExpandFileName"/>
<link id="FindFirst"/>
</seealso>
<example file="sysutex/ex41"/>
</element>

<element name="FileSeek">
<short>Set the current file position on a file handle.</short>
<descr>
<p>
<var>FileSeek</var> sets the file pointer on position <var>Offset</var>, starting from
<var>Origin</var>. Origin can be one of the following values:
</p>
<dl>
<dt>fsFromBeginning</dt>
<dd> <var>Offset</var> is relative to the first byte of the file. This
position is zero-based. i.e. the first byte is at offset 0.
</dd>
<dt>fsFromCurrent</dt><dd><var>Offset</var> is relative to the current position.</dd>
<dt>fsFromEnd</dt>
<dd><var>Offset</var> is relative to the end of the file. 
This means that <var>Offset</var> can only be zero or negative in this case.
</dd>
</dl>
<p>
If successfull, the function returns the new file position, relative to the
beginning of the file.
</p>
<remark>
The abovementioned constants do not exist in Delphi.
</remark>
</descr>
<errors>
On error, -1 is returned.
</errors>
<seealso>
<link id="FileClose"/>
<link id="FileWrite"/>
<link id="FileCreate"/>
<link id="FileOpen"/>
<link id="FileRead"/>
<link id="FileTruncate"/>
</seealso>
<example file="sysutex/ex42"/>
</element>

<element name="FileSetAttr">
<short>Set the attributes of a file.</short>
<descr>
<p>
<var>FileSetAttr</var> sets the attributes of <var>FileName</var> to <var>Attr</var>.
If the function was successful, 0 is returned, -1 otherwise.
<var>Attr</var> can be set to an OR-ed combination of the pre-defined
<var>faXXX</var> constants.
</p>
<p>
This function is not implemented on Unixes.
</p>
</descr>
<errors>
On error, -1 is returned (always on Unixes).
</errors>
<seealso>
<link id="FileGetAttr"/>
<link id="FileGetDate"/>
<link id="FileSetDate"/>.
</seealso>
</element>


<element name="FileSetDate">
<short>Set the date of a file.</short>
<descr>
<p>
<var>FileSetDate</var> sets the file date of the file with handle <var>Handle</var>
to <var>Age</var>, where <var>Age</var> is a DOS date-and-time stamp value.
</p>
<p>
The function returns zero if successfull. (not on unixes, where it is not
implemented)
</p>
</descr>
<errors>
On Unix, -1 is always returned, since this is impossible to implement.
On Windows and DOS, a negative error code is returned.
</errors>
<seealso>
</seealso>
</element>


<element name="FileTruncate">
<short>Truncate an open file to a given size.</short>
<descr>
<p>
<var>FileTruncate</var> truncates the file with handle <var>Handle</var> to
<var>Size</var> bytes. The file must have been opened for writing prior
to this call. The function returns <var>True</var> is successful, <var>False</var>
otherwise.
</p>
<p>
For an example, see <link id="FileCreate"/>.
</p>
</descr>
<errors>
On error, the function returns <var>False</var>.
</errors>
<seealso>
<link id="FileClose"/>
<link id="FileWrite"/>
<link id="FileCreate"/>
<link id="FileOpen"/>
<link id="FileRead"/>
<link id="FileSeek"/>
</seealso>
</element>


<element name="FileWrite">
<short>Write data from a buffer to a given filehandle.</short>
<descr>
<p>
<var>FileWrite</var> writes <var>Count</var> bytes from <var>Buffer</var> to the file with
handle <var>Handle</var>. Prior to this call, the file must have been opened
for writing. <var>Buffer</var> must be at least <var>Count</var> bytes large, or
a memory access error may occur.
</p>
<p>
The function returns the number of bytes written, or -1 in case of an
error.
</p>
<p>
For an example, see <link id="FileCreate"/>.
</p>
</descr>
<errors>
In case of error, -1 is returned.
</errors>
<seealso>
<link id="FileClose"/>
<link id="FileCreate"/>
<link id="FileOpen"/>
<link id="FileRead"/>
<link id="FileTruncate"/>
<link id="FileSeek"/>
</seealso>
</element>


<element name="FindClose">
<short>Close a find handle</short>
<descr>
<p>
<var>FindClose</var> ends a series of <link id="FindFirst"/>/<link id="FindNext"/> calls,
and frees any memory used by these calls. It is <em> absolutely</em> necessary
to do this call, or huge memory losses may occur.
</p>
<p>
For an example, see <link id="FindFirst"/>.
</p>
</descr>
<errors>
None.
</errors>
<seealso>
<link id="FindFirst"/>
<link id="FindNext"/>
</seealso>
</element>


<element name="FindFirst">
<short>Start a file search and return a findhandle</short>
<descr>
<p>
<var>FindFirst</var> looks for files that match the name (possibly with
wildcards) in <var>Path</var> and attributes <var>Attr</var>. It then fills up the
<var>Rslt</var> record with data gathered about the file. It returns 0 if a file
matching the specified criteria is found, a nonzero value (-1 on linux)
otherwise.
</p>
<p>
The <var>Rslt</var> record can be fed to subsequent calls to <var>FindNext</var>, in
order to find other files matching the specifications.
</p>
<remark> 
A <var>FindFirst</var> call must <em> always</em> be followed by a
<link id="FindClose">FindClose</link> call with the same <var>Rslt</var> record. Failure to do so will
result in memory loss.
</remark>
</descr>
<errors>
On error the function returns -1 on linux, a nonzero error code on Windows.
</errors>
<seealso>
<link id="FindClose"/>{FindCloseSys}, <link id="FindNext"/>.
</seealso>
<example file="sysutex/ex43"/>
</element>



<element name="FindNext">
<short>Find the next entry in a findhandle.</short>
<descr>
<p>
<var>FindNext</var> finds a next occurrence of a search sequence initiated by
<var>FindFirst</var>. If another record matching the criteria in Rslt is found, 0
is returned, a nonzero constant is returned otherwise.
</p>
<remark>
The last <var>FindNext</var> call must <em> always</em> be followed by a
<var>FindClose</var> call with the same <var>Rslt</var> record. Failure to do so will
result in memory loss.
</remark>
<p>
For an example, see <link id="FindFirst"/>
</p>
</descr>
<errors>
On error (no more file is found), a nonzero constant is returned.
</errors>
<seealso>
<link id="FindFirst"/>
<link id="FindClose"/>
</seealso>
</element>


<element name="GetDirs">
<short>Return a list of directory names from a path.</short>
<descr>
<var>GetDirs</var> splits DirName in a null-byte separated list of directory names,
<var>Dirs</var> is an array of <var>PChars</var>, pointing to these directory names.
The function returns the number of directories found, or -1 if none were found.
DirName must contain only OSDirSeparator as Directory separator chars.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="ExtractRelativePath"/>
</seealso>
<example file="sysutex/ex45"/>
</element>



<element name="RenameFile">
<short>Rename a file.</short>
<descr>
<var>RenameFile</var> renames a file from <var>OldName</var> to <var>NewName</var>. The
function returns <var>True</var> if successful, <var>False</var> otherwise.

<em> Remark:</em> you cannot rename across disks or partitions.
</descr>
<errors>
On Error, <var>False</var> is returned.
</errors>
<seealso>
<link id="DeleteFile"/>
</seealso>
<example file="sysutex/ex44"/>
</element>


<element name="SetDirSeparators">
<short>Set the directory separators to the known directory separators.</short>
<descr>
<var>SetDirSeparators</var> returns <var>FileName</var> with all possible
DirSeparators replaced by <var>OSDirSeparator</var>.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="ExpandFileName"/>
<link id="ExtractFilePath"/>
<link id="ExtractFileDir"/>
</seealso>
<example file="sysutex/ex47"/>
</element>


<element name="StrAlloc">
<short>Allocate a null-terminated string on the heap.</short>
<descr>
<p>
<var>StrAlloc</var> reserves memory on the heap for a string with length <var>Len</var>,
terminating <var>#0</var> included, and returns a pointer to it.
</p>
<p>
Additionally, <var>StrAlloc</var> allocates 4 extra bytes to store the size of
the allocated memory. Therefore this function is NOT compatible with the
<link id="StrAlloc"/> function of the <var>Strings</var> unit.
</p>
<p>
For an example, see <link id="StrBufSize"/>.
</p>
</descr>
<errors>
None.
</errors>
<seealso>
<link id="StrBufSize"/>
<link id="StrDispose"/>
<link id="StrAlloc"/>
</seealso>
</element>


<element name="StrBufSize">
<short>Return the size of a null-terminated string allocated on the heap.</short>
<descr>
<var>StrBufSize</var> returns the memory allocated for <var>Str</var>. This function
ONLY gives the correct result if <var>Str</var> was allocated using
<link id="StrAlloc">StrAlloc</link>.
</descr>
<errors>
If no more memory is available, a runtime error occurs.
</errors>
<seealso>
<link id="StrAlloc">StrAlloc</link>
<link id="StrDispose"/>
</seealso>
<example file="sysutex/ex46"/>
</element>




<element name="StrDispose">
<short>Dispose of a null-terminated string on the heap.</short>
<descr>
<p>
<var>StrDispose</var> frees any memory allocated for <var>Str</var>. This function
will only function correctly if <var>Str</var> has been allocated using
<link id="StrAlloc">StrAlloc</link> from the <file>SysUtils</file> unit.
</p>
<p>
For an example, see <link id="StrBufSize"/>.
</p>
</descr>
<errors>
If an invalid pointer is passed, or a pointer not allocated with
<var>StrAlloc</var>, an error may occur.
</errors>
<seealso>
<link id="StrBufSize"/>
<link id="StrAlloc"/>
<link id="StrDispose"/>
</seealso>
</element>


<element name="StrPCopy">
<short>Copy an ansistring to a null-terminated string.</short>
<descr>
<p>
<var>StrPCopy</var> Converts the Ansistring in <var>Source</var> to a Null-terminated
string, and copies it to <var>Dest</var>. <var>Dest</var> needs enough room to contain
the string <var>Source</var>, i.e. <var>Length(Source)+1</var> bytes.
</p>
<p>
For an example, see <link id="StrPCopy"/>.
</p>
</descr>
<errors>
No checking is performed to see whether <var>Dest</var> points to enough memory
to contain <var>Source</var>.
</errors>
<seealso>
<link id="StrPLCopy"/>
<link id="StrPCopy"/>
</seealso>
</element>


<element name="StrPLCopy">
<short>Copy a limited number of characters from an ansistring to a
null-terminated string.</short>
<descr>
<var>StrPLCopy</var> Converts maximally <var>MaxLen</var> characters of the
Ansistring in <var>Source</var> to a Null-terminated  string, and copies
it to <var>Dest</var>. <var>Dest</var> needs enough room to contain
the  characters.
</descr>
<errors>
No checking is performed to see whether <var>Dest</var> points to enough memory
to contain L characters of <var>Source</var>.
</errors>
<seealso>
<link id="StrPCopy"/>.
</seealso>
</element>


<element name="StrPas">
<short>Convert a null-terminated string to an ansistring.</short>
<descr>
<p>
Converts a null terminated string in <var>Str</var> to an Ansitring, and returns
this string. This string is NOT truncated at 255 characters as is the
</p>
<p>
For an example, see <link id="StrPas"/>.
</p>
</descr>
<errors>
None.
</errors>
<seealso>
<link id="StrPas"/>
</seealso>
</element>


<element name="AdjustLineBreaks">
<short>Convert possible line-endings to the currently valid line ending.</short>
<descr>
<var>AdjustLineBreaks</var> will change all <var>#13</var> characters with
<var>#13#10</var> on Windowsnt and dos. On linux, all <var>#13#10</var>
character pairs are converted to <var>#10</var> and single <var>#13</var>
characters also.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="AnsiCompareStr"/>
<link id="AnsiCompareText"/>
</seealso>
<example file="sysutex/ex48"/>
</element>


<element name="AnsiCompareStr">
<short>Compare 2 ansistrings, case sensitive, ignoring accents characters.</short>
<descr>
<p>
<var>AnsiCompareStr</var> compares two strings and returns the following
result:
</p>
<dl>
<dt>&lt; 0</dt><dd>  if <var>S1&lt;S2</var>.</dd>
<dt>0</dt><dd>if <var>S1=S2</var>.</dd>
<dt>&gt; 0</dt><dd> if <var>S1&gt;S2</var>.</dd>
</dl>
<p>
The comparision takes into account Ansi characters, i.e. it takes
care of strange accented characters. Contrary to <link id="AnsiCompareText"/>,
the comparision is case sensitive.
</p>
</descr>
<errors>
None.
</errors>
<seealso>
<link id="AdjustLineBreaks"/>
<link id="AnsiCompareText"/>
</seealso>
<example file="sysutex/ex49"/>
</element>

<element name="AnsiCompareText">
<short>Compare 2 ansistrings, case insensitive, ignoring accents characters.</short>
<descr>
<p>
<var>AnsiCompareText</var> compares two strings and returns the following
result:
</p>
<dl>
<dt>&lt;0</dt><dd>if <var>S1&lt;S2</var>.</dd>
<dt>0</dt><dd>if <var>S1=S2</var>.</dd>
<dt>&gt;0</dt><dd>if <var>S1&gt;S2</var>.</dd>
</dl>
<p>
the comparision takes into account Ansi characters, i.e. it takes
care of strange accented characters. Contrary to <link id="AnsiCompareStr"/>,
the comparision is case insensitive.
</p>
</descr>
<errors>
None.
</errors>
<seealso>
<link id="AdjustLineBreaks"/>
<link id="AnsiCompareText"/>
</seealso>
<example file="sysutex/ex50"/>
</element>

<element name="AnsiExtractQuotedStr">
<short>Removes the first quoted string from a string.</short>
<descr>
<var>AnsiExtractQuotedStr</var> returns the first quoted string in
<var>Src</var>, and deletes the result from <var>Src</var>. The resulting
string has with <var>Quote</var> characters removed from the beginning and 
end of the string (if they are present), and double <var>Quote</var> 
characters replaced by a single <var>Quote</var> characters. 
As such, it revereses the action of <link id="AnsiQuotedStr"/>.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="AnsiQuotedStr"/>
</seealso>
<example file="sysutex/ex51"/>
</element>

<element name="AnsiLastChar">
<short>Return a pointer to the last character of a string.</short>
<descr>
This function returns a pointer to the last character of <var>S</var>.
Since multibyte characters are not yet supported, this is the same
as <var>@S[Length(S)])</var>.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="AnsiStrLastChar"/>
</seealso>
<example file="sysutex/ex52"/>
</element>



<element name="AnsiLowerCase">
<short>Return a lowercase version of a string.</short>
<descr>
<p>
<var>AnsiLowerCase</var> converts the string <var>S</var> to lowercase characters
and returns the resulting string.
It takes into account the operating system language
settings when doing this, so spcial characters are converted correctly as
well.
</p>
<remark> 
On linux, no language setting is taken in account yet.
</remark>
</descr>
<errors>
None.
</errors>
<seealso>
<link id="AnsiUpperCase"/>
<link id="AnsiStrLower"/>
<link id="AnsiStrUpper"/>
</seealso>
<example file="sysutex/ex53"/>
</element>



<element name="AnsiQuotedStr">
<short>Return a quoted version of a string.</short>
<descr>
<p>
<var>AnsiQuotedString</var> quotes the string <var>S</var> and returns the result.
This means that it puts the <var>Quote</var> character at both the beginning and
end of the string and replaces any occurrence of <var>Quote</var> in <var>S</var>
with 2 <var>Quote</var> characters. The action of <var>AnsiQuotedString</var> can be
reversed by <link id="AnsiExtractQuotedStr"/>.
</p>
<p>
For an example, see <link id="AnsiExtractQuotedStr"/>
</p>
</descr>
<errors>
None.
</errors>
<seealso>
<link id="AnsiExtractQuotedStr"/>
</seealso>
</element>


<element name="AnsiStrComp">
<short>Compare two null-terminated strings. Case sensitive.</short>
<descr>
<p>
<var>AnsiStrComp</var> compares 2 <var>PChar</var> strings, and returns the following
result:
</p>
<dl>
<dt>&lt;0</dt><dd>  if <var>S1&lt;S2</var>.</dd>
<dt>0</dt><dd>  if <var>S1=S2</var>.</dd>
<dt>&gt;0</dt><dd>  if <var>S1>S2</var>.</dd>
</dl>
<p>
The comparision of the two strings is case-sensitive.
The function does not yet take internationalization settings into account.
</p>
</descr>
<errors>
None.
</errors>
<seealso>
<link id="AnsiCompareText"/>
<link id="AnsiCompareStr"/>
</seealso>
<example file="sysutex/ex54"/>
</element>

<element name="AnsiStrIComp">
<short>Compare two null-terminated strings. Case insensitive.</short>
<descr>
<p>
<var>AnsiStrIComp</var> compares 2 <var>PChar</var> strings, and returns the following
result:
</p>
<dl>
<dt>&lt;0</dt><dd>  if <var>S1&lt;S2</var>.</dd>
<dt>0</dt><dd>  if <var>S1=S2</var>.</dd>
<dt>>0</dt><dd>  if <var>S1>S2</var>.</dd>
</dl>
<p>
The comparision of the two strings is case-insensitive.
The function does not yet take internationalization settings into account.
</p>
</descr>
<errors>
None.
</errors>
<seealso>
<link id="AnsiCompareText"/>
<link id="AnsiCompareStr"/>
</seealso>
<example file="sysutex/ex55"/>
</element>

<element name="AnsiStrLastChar">
<short>Return a pointer to the last character of a string.</short>
<descr>
<p>
Return a pointer to the last character of the null-terminated string.
</p>
</descr>
<errors>
None.
</errors>
<seealso>
<link id="AnsiCompareText"/>
<link id="AnsiCompareStr"/>
</seealso>
<example file="sysutex/ex56"/>
</element>

<element name="AnsiStrLIComp">
<short>Compares a given number of characters of a string, case insensitive.</short>
<descr>
<p>
<var>AnsiStrLIComp</var> compares the first <var>Maxlen</var> characters of
2 <var>PChar</var> strings, <var>S1</var> and <var>S2</var>, and returns the following
result:
</p>
<dl>
<dt>&lt;0</dt><dd>  if <var>S1&lt;S2</var>.</dd>
<dt>0</dt><dd>  if <var>S1=S2</var>.</dd>
<dt>&gt;0</dt><dd>  if <var>S1&gt;S2</var>.</dd>
</dl>
<p>
The comparision of the two strings is case-insensitive.
The function does not yet take internationalization settings into account.
</p>
</descr>
<errors>
None.
</errors>
<seealso>
<link id="AnsiCompareText"/>
<link id="AnsiCompareStr"/>
</seealso>
<example file="sysutex/ex57"/>
</element>


<element name="AnsiStrLower">
<short>Convert a null-terminated string to all-lowercase characters.</short>
<descr>
<p>
<var>AnsiStrLower</var> converts the PChar <var>Str</var> to lowercase characters
and returns the resulting pchar. Note that <var>Str</var> itself is modified,
not a copy, as in the case of <link id="AnsiLowerCase"/>.
It takes into account the operating system language
settings when doing this, so special characters are converted correctly as
well.
</p>
<remark> 
On unix, no language setting is taken in account yet.
</remark>
</descr>
<errors>
None.
</errors>
<seealso>
<link id="AnsiStrUpper"/>
<link id="AnsiLowerCase"/>
</seealso>
<example file="sysutex/ex59"/>
</element>

<element name="AnsiStrUpper">
<short>Convert a null-terminated string to all-uppercase characters.</short>
<descr>
<p>
<var>AnsiStrUpper</var> converts the <var>PChar</var> <var>Str</var> to uppercase characters
and returns the resulting string. Note that <var>Str</var> itself is modified,
not a copy, as in the case of <link id="AnsiUpperCase"/>.
It takes into account the operating system language
settings when doing this, so special characters are converted correctly as
well.
</p>
<remark> On linux, no language setting is taken in account yet.
</remark>
</descr>
<errors>
None.
</errors>
<seealso>
<link id="AnsiUpperCase"/>
<link id="AnsiStrLower"/>
<link id="AnsiLowerCase"/>
</seealso>
<example file="sysutex/ex60"/>
</element>



<element name="AnsiUpperCase">
<short>Return an uppercase version of a string, taking into account special
characters.</short>
<descr>
<p>
<var>AnsiUpperCase</var> converts the string <var>S</var> to uppercase characters
and returns the resulting string.
It takes into account the operating system language
settings when doing this, so special characters are converted correctly as
well.
</p>
<remark>
On linux, no language setting is taken in account yet.
</remark>
</descr>
<errors>
None.
</errors>
<seealso>
<link id="AnsiStrUpper"/>
<link id="AnsiStrLower"/>
<link id="AnsiLowerCase"/>
</seealso>
<example file="sysutex/ex61"/>
</element>


<element name="AppendStr">
<short>Append one ansistring to another.</short>
<descr>
<p>
<var>AppendStr</var> appends <var>S</var> to Dest.
</p>
<p>
This function is provided for Delphi
compatibility only, since it is completely equivalent to <var>Dest:=Dest+S</var>.
</p>
</descr>
<errors>
None.
</errors>
<seealso>
<link id="AssignStr"/>
<link id="NewStr"/>
<link id="DisposeStr"/>
</seealso>
<example file="sysutex/ex62"/>
</element>



<element name="AssignStr">
<short>Assigns an ansistring to a null-terminated string.</short>
<descr>
<p>
<var>AssignStr</var> allocates <var>S</var> to <var>P</var>. The old value of <var>P</var> is
disposed of.
</p>
<p>
This function is provided for Delphi compatibility only. <var>AnsiStrings</var>
are managed on the heap and should be preferred to the mechanism of
dynamically allocated strings.
</p>
</descr>
<errors>
None.
</errors>
<seealso>
<link id="NewStr"/>
<link id="AppendStr"/>
<link id="DisposeStr"/>
</seealso>
<example file="sysutex/ex63"/>
</element>



<element name="BCDToInt">
<short>Convert a BCD coded integer to a normal integer.</short>
<descr>
<var>BCDToInt</var> converts a <var>BCD</var> coded integer to a normal integer.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="StrToInt"/>
<link id="IntToStr"/>
</seealso>
<example file="sysutex/ex64"/>
</element>




<element name="CompareMem">
<short>Compare two memory areas.</short>
<descr>
<p>
<var>CompareMem</var> compares, byte by byte,  2 memory areas pointed
to by <var>P1</var> and <var>P2</var>, for a length of <var>L</var> bytes.
</p>
<p>
It returns the following values:
</p>
<dl>
<dt>&lt;0</dt><dd> if at some position the byte at <var>P1</var> is less than the byte at the
same postion at <var>P2</var>.
</dd>
<dt>0</dt><dd> if all <var>L</var> bytes are the same.</dd>
<dt>&gt;0</dt><dd>if at some position the byte at <var>P1</var> is greater than the
byte at the same postion at <var>P2</var>.</dd>
</dl>
</descr>
<errors>
</errors>
<seealso>
</seealso>
</element>


<element name="CompareStr">
<short>Compare 2 ansistrings case-sensitively, ignoring special characters.</short>
<descr>
<p>
<var>CompareStr</var> compares two strings, <var>S1</var> and <var>S2</var>,
and returns the following
result:
</p>
<dl>
<dt>&lt;0</dt><dd>  if <var>S1&lt;S2</var>.</dd>
<dt>0</dt><dd>  if <var>S1=S2</var>.</dd>
<dt>&gt;0</dt><dd>  if <var>S1&gt;S2</var>.</dd>
</dl>
<p>
The comparision of the two strings is case-sensitive.
The function does not take internationalization settings into account, it
simply compares ASCII values.
</p>
</descr>
<errors>
None.
</errors>
<seealso>
<link id="AnsiCompareText"/>
<link id="AnsiCompareStr"/>
<link id="CompareText"/>
</seealso>
<example file="sysutex/ex65"/>
</element>



<element name="CompareText">
<short>Compare 2 ansistrings case insensitive.</short>
<descr>
<p>
<var>CompareText</var> compares two strings, <var>S1</var> and <var>S2</var>,
and returns the following
result:
</p>
<dl>
<dt>&lt;0</dt><dd>  if <var>S1&lt;S2</var>.</dd>
<dt>0</dt><dd>  if <var>S1=S2</var>.</dd>
<dt>&gt;0</dt><dd>  if <var>S1&gt;S2</var>.</dd>
</dl>
<p>
The comparision of the two strings is case-insensitive.
The function does not take internationalization settings into account, it
simply compares ASCII values.
</p>
</descr>
<errors>
None.
</errors>
<seealso>
<link id="AnsiCompareText"/>
<link id="AnsiCompareStr"/>
<link id="CompareStr"/>
</seealso>
<example file="sysutex/ex66"/>
</element>

<element name="DisposeStr">
<short>Dispose an ansistring from the heap.</short>
<descr>
<p>
<var>DisposeStr</var> removes the dynamically allocated string <var>S</var> from the
heap, and releases the occupied memory.
</p>
<p>
This function is provided for Delphi compatibility only. <var>AnsiStrings</var>
are managed on the heap and should be preferred to the mechanism of
dynamically allocated strings.
</p>
<p>
For an example, see <link id="DisposeStr"/>.
</p>
</descr>
<errors>
None.
</errors>
<seealso>
<link id="NewStr"/>
<link id="AppendStr"/>
<link id="AssignStr"/>
</seealso>
</element>


<element name="FloatToStr">
<short>Convert a float value to a string using a fixed format.</short>
<descr>
<p>
<var>FloatToStr</var> converts the floating point variable <var>Value</var> to a
string representation.  It will choose the shortest possible notation of the
two following formats:
</p>
<dl>
<dt>Fixed format</dt><dd> will represent the string in fixed notation,
</dd><dt>Decimal format</dt><dd> will represent the string in scientific
notation.</dd>
</dl>
<p>
More information on these formats can be found in <link id="FloatToStrF"/>.
<var>FloatToStr</var> is completely equivalent to the following call:
</p>
<code>
FloatToStrF(Value, ffGeneral,15, 0);
</code>
</descr>
<errors>
None.
</errors>
<seealso>
<link id="FloatToStrF"/>
<link id="FormatFloat"/>
<link id="StrToFloat"/>
</seealso>
<example file="sysutex/ex67"/>
</element>

<element name="FloatToStrF">
<short>Convert a float value to a string using a given format.</short>
<descr>
<p>
<var>FloatToStrF</var> converts the floating point number <var>value</var> to a string
representation, according to the settings of the parameters <var>Format</var>,
<var>Precision</var> and <var>Digits</var>.
</p>
<p>
The meaning of the <var>Precision</var> and <var>Digits</var> parameter depends on the
<var>Format</var> parameter. The format is controlled mainly by the <var>Format</var>
parameter. It can have one of the following values:
</p>
<dl>
<dt>ffcurrency</dt>
<dd> Money format. <var>Value</var> is converted to a string using
the global variables <var>CurrencyString</var>, <var>CurrencyFormat</var> and
<var>NegCurrencyFormat</var>. The <var>Digits</var> paramater specifies the number of digits
following the decimal point and should be in the range -1 to 18. If Digits
equals <var>-1</var>, <var>CurrencyDecimals</var> is assumed. The <var>Precision</var> parameter is ignored.
</dd>
<dt>ffExponent</dt>
<dd> Scientific format. <var>Value</var> is converted to a
string using scientific notation: 1 digit before the decimal point, possibly
preceded by a minus sign if <var>Value</var> is negative. The number of
digits after the decimal point is controlled by <var>Precision</var> and must lie
in the range 0 to 15.
</dd>
<dt>ffFixed</dt>
<dd> Fixed point format. <var>Value</var> is converted to a string
using fixed point notation. The result is composed of all digits of the
integer part of <var>Value</var>, preceded by a minus sign if <var>Value</var> is
negative. Following the integer part is <var>DecimalSeparator</var> and then the
fractional part of <var>Value</var>, rounded off to <var>Digits</var> numbers.
If the number is too large then the result will be in scientific notation.
</dd>
<dt>ffGeneral</dt>
<dd> General number format. The argument is converted to a
string using <var>ffExponent</var> or <var>ffFixed</var> format, depending on wich one
gives the shortest string. There will be no trailing zeroes. If <var>Value</var>
is less than <var>0.00001</var> or if the number of decimals left of the decimal
point is larger than <var>Precision</var> then scientific notation is used, and
<var>Digits</var> is the minimum number of digits in the exponent. Otherwise
<var>Digits</var> is ignored.
</dd>
<dt>ffnumber</dt>
<dd> Is the same as <var>ffFixed</var>, except that thousand separators
are inserted in the resultig string.
</dd>
</dl>
</descr>
<errors>
None.
</errors>
<seealso>
<link id="FloatToStr"/>
<link id="FloatToText"/>
</seealso>
<example file="sysutex/ex68"/>
</element>

<element name="FloatToText">
<short>Return a string representation of a float, with a given format.</short>
<descr>
<p>
<var>FloatToText</var> converts the floating point variable <var>Value</var> to a
string representation and stores it in <var>Buffer</var>.  The conversion is
governed by <var>format</var>, <var>Precisison</var> and <var>Digits</var>.
more information on these parameters can be found in <link id="FloatToStrF"/>.
<var>Buffer</var> should point to enough space to hold the result. No checking on
this is performed.
</p>
<p>
The result is the number of characters that was copied in <var>Buffer</var>.
</p>
</descr>
<errors>
None.
</errors>
<seealso>
<link id="FloatToStr"/>
<link id="FloatToStrF"/>
</seealso>
<example file="sysutex/ex69"/>
</element>

<element name="FmtStr">
<short>Format a string with given arguments.</short>
<descr>
<var>FmtStr</var> calls <link id="Format"/> with <var>Fmt</var> and <var>Args</var> as arguments,
and stores the result in <var>Res</var>. For more information on how the
resulting string is composed, see <link id="Format"/>.
</descr>
<errors>
In case of error, a <var>EConvertError</var> exception is raised.
</errors>
<seealso>
<link id="Format"/>
<link id="FormatBuf"/>.
</seealso>
<example file="sysutex/ex70"/>
</element>

<element name="Format">
<short>Format a string with given arguments.</short>
<descr>
<p>
Format replaces all placeholders in<var>Fmt</var> with the arguments passed in
<var>Args</var> and returns the resulting string. A placeholder looks as follows:
</p>
<code>
'%' [Index':'] ['-'] [Width] ['.' Precision] ArgType
</code>
<p>
elements between single quotes must be typed as shown without the quotes,
and elements between square brackets <var>[ ]</var> are optional. The meaning
of the different elements is shown below:
</p>
<dl>
<dt>'%'</dt>
<dd> starts the placeholder. If you want to insert a literal
<var>%</var> character, then you must insert two of them : <var>%%</var>.
</dd>
<dt>Index ':'</dt>
<dd> takes the <var>Index</var>-th element in the argument array
as the element to insert.
</dd>
<dt>'-'</dt>
<dd> tells <var>Format</var> to left-align the inserted text. The default
behaviour is to right-align inserted text. This can only take effect if the
<var>Width</var> element is also specified.
</dd>
<dt>Width</dt>
<dd> the inserted string must have at least have <var>Width</var>
characters. If not, the inserted string will be padded with spaces. By
default, the string is left-padded, resulting in a right-aligned string.
This behaviour can be changed by the <var>'-'</var> character.
</dd>
<dt>'.' Precision</dt>
<dd> Indicates the precision to be used when converting
the argument. The exact meaning of this parameter depends on <var>ArgType</var>.
</dd>
</dl>
<p>
The <var>Index</var>, <var>Width</var> and <var>Precision</var> parameters can be replaced
by <var>*</var>, in which case their value will be read from the next element in
the <var>Args</var> array. This value must be an integer, or an
<var>EConvertError</var> exception will be raised.
</p>
<p>
The argument type is determined from <var>ArgType</var>. It can have one of the
following values (case insensitive):
</p>
<dl>
<dt>D</dt>
<dd>
Decimal format. The next argument in the <var>Args</var> array should be
an integer. The argument is converted to a decimal string,. If precision is
specified, then the string will have at least <var>Precision</var> digits in it.
If needed, the string is (left) padded with zeroes.
</dd>
<dt>E</dt>
<dd>
<p>
Scientific format. The next argument in the <var>Args</var> array should
be a Floating point value. The argument is converted to a decimal string
using scientific notation, using <link id="FloatToStrF"/>, where the optional
precision is used to specify the total number of decimals. (defalt a valueof
15 is used). The exponent is formatted using maximally 3 digits.
</p>
<p>
In short, the <var>E</var> specifier formats it's argument as follows:
</p>
<code>
FloatToStrF(Argument,ffexponent,Precision,3)
</code>
</dd>
<dt>F</dt>
<dd>
<p>Fixed point format. The next argument in the <var>Args</var> array
should be a floating point value. The argument is converted to a
decimal string, using fixed notation (see <link id="FloatToStrF"/>).
<var>Precision</var> indicates the number of digits following the
decimal point.
</p>
<p>
In short, the <var>F</var> specifier formats it's argument as follows:
</p>
<code>
FloatToStrF(Argument,ffFixed,ffixed,9999,Precision)
</code>
</dd>
<dt>G</dt>
<dd>
<p>
 General number format. The next argument in the <var>Args</var> array
should be a floating point value. The argument is converted to a decimal
string using fixed point notation or scientific notation, depending on which
gives the shortest result. <var>Precision</var> is used to determine the number
of digits after the decimal point.
</p>
<p>
In short, the <var>G</var> specifier formats it's argument as follows:
</p>
<code>
FloatToStrF(Argument,ffGeneral,Precision,3)
</code>
</dd>
<dt>M</dt>
<dd>
<p>Currency format. the next argument in the var{Args} array must
be a floating point value. The argument is converted to a decimal string
using currency notation. This means that fixed-point notation is used, but
that the currency symbol is appended. If precision is specified, then
then it overrides the <var>CurrencyDecimals</var> global variable used in the
<link id="FloatToStrF"/>
</p>
<p>
In short, the <var>M</var> specifier formats it's argument as follows:
</p>
<code>
FloatToStrF(Argument,ffCurrency,9999,Precision)
</code>
</dd>
<dt>N</dt>
<dd> Number format. This is the same as fixed point format, except that
thousand separators are inserted in the resulting string.
</dd>
<dt>P</dt>
<dd> Pointer format. The next argument in the <var>Args</var> array must be a
pointer (typed or untyped). The pointer value is converted to a string of
length 8, representing the hexadecimal value of the pointer.
</dd>
<dt>S</dt>
<dd> String format. The next argument in the <var>Args</var> array must be
a string. The argument is simply copied to the result string. If
<var>Precision</var> is specified, then only <var>Precision</var> characters are
copied to the result string.
</dd>
<dt>X</dt>
<dd> hexadecimal format. The next argument in the <var>Args</var> array must
be an integer. The argument is converted to a hexadecimal string with just
enough characters to contain the value of the integer. If <var>Precision</var>
is specified then the resulting hexadecimal representation will have at
least <var>Precision</var> characters in it (with a maximum value of 32).
</dd>
</dl>
</descr>
<errors>
<p>
In case of error, an <var>EConversionError</var> exception is raised. Possible
errors are:
</p>
<ol>
<li> Errors in the format specifiers.</li>
<li> The next argument is not of the type needed by a specifier.</li>
<li> The number of arguments is not sufficient for all format specifiers.</li>
</ol>
</errors>
<seealso>
<link id="FormatBuf"/>
</seealso>
<example file="sysutex/ex71"/>
</element>

<element name="FormatBuf">
<short>Format a string with given arguments and store the result in a buffer.</short>
<descr>
<var>FormatBuf</var> calls formatfloat with <var>Buf</var>.
</descr>
<errors>
</errors>
<seealso>
</seealso>
<example file="sysutex/ex72"/>
</element>

<element name="FormatFloat">
<short>Format a float according to a certain mask.</short>
<descr>
<p>
<var>FormatFloat</var> formats the floating-point value given by <var>Value</var> using 
the format specifications in <var>Format</var>. The format specifier can give
format specifications for positive, negative or zero values (separated by 
a semicolon).
</p>
<p>
If the formatspecifier is empty or the value needs more than 18 digits to
be correctly represented, the result is formatted with a call to 
<link id="FloatToStrF"/> with the <var>ffGeneral</var> format option.
</p>
<p>
The following format specifiers are supported:
</p>
<dl>
<dt>0</dt>
<dd> is a digit place holder. If there is a corresponding digit in 
the value being formatted, then it replaces the 0. If not, the 0 is left
as-is.
</dd>
<dt>#</dt>
<dd> is also a digit place holder. If there is a corresponding digit in
the value being formatted, then it replaces the #. If not, it is removed.
by a space.
</dd>
<dt>.</dt>
<dd> determines the location of the decimal point. Only the first '.'
character is taken into account. If the value contains digits after the
decimal point, then it is replaced by the value of the <var>DecimalSeparator</var>
character.
</dd>
<dt>,</dt>
<dd> determines the use of the thousand separator character in the
output string. If the format string contains one or more ',' charactes, 
then thousand separators will be used. The <var>ThousandSeparator</var> character
is used.
</dd>
<dt>E+</dt>
<dd> determines the use of scientific notation. If 'E+' or 'E-' (or
their lowercase counterparts) are present then scientific notation is used.
The number of digits in the output string is determined by the number of
<var>0</var> characters after the '<var>E+</var>'
</dd>
<dt>;</dt>
<dd> This character separates sections for positive, negative, and zero numbers in the
format string.	
</dd>
</dl>
</descr>
<errors>
If an error occurs, an exception is raised.
</errors>
<seealso>
<link id="FloatToStr"/>
</seealso>
<example file="sysutex/ex89"/>
</element>


<element name="IntToHex">
<short>Convert an integer value to a hexadecimal string.</short>
<descr>
<var>IntToHex</var> converts <var>Value</var> to a hexadecimal string
representation. The result will contain at least <var>Digits</var>
characters. If <var>Digits</var> is less than the needed number of characters,
the string will NOT be truncated. If <var>Digits</var> is larger than the needed
number of characters, the result is padded with zeroes.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="IntToStr"/>, <var>StrToInt</var>
</seealso>
<example file="sysutex/ex73"/>
</element>



<element name="IntToStr">
<short>Convert an integer value to a decimal string.</short>
<descr>
<var>IntToStr</var> coverts <var>Value</var> to it's string representation.
The resulting string has only as much characters as needed to represent
the value. If the value is negative a minus sign is prepended to the
string.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="IntToHex"/>
<link id="StrToInt"/>
</seealso>
<example file="sysutex/ex74"/>
</element>



<element name="IsValidIdent">
<short>Check whether a string is a valid identifier name.</short>
<descr>
<var>IsValidIdent</var> returns <var>True</var> if <var>Ident</var> can be used as a
compoent name. It returns <var>False</var> otherwise. <var>Ident</var> must consist of
a letter or underscore, followed by a combination of letters, numbers or
underscores to be a valid identifier.
</descr>
<errors>
None.
</errors>
<seealso>
</seealso>
<example file="sysutex/ex75"/>
</element>



<element name="LastDelimiter">
<short>Return the last occurrence of a set of delimiters in a string.</short>
<descr>
<var>LastDelimiter</var> returns the <em> last</em> occurrence of any character in
the set <var>Delimiters</var> in the string <var>S</var>.
</descr>
<errors>
</errors>
<seealso>
</seealso>
<example file="sysutex/ex88"/>
</element>

<element name="LeftStr">
<short>Return a number of characters starting at the left of a string.</short>
<descr>
<var>LeftStr</var> returns the <var>Count</var> leftmost characters of <var>S</var>.
It is equivalent to a call to <var>Copy(S,1,Count)</var>.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="RightStr"/>
<link id="TrimLeft"/>
<link id="TrimRight"/>
<link id="Trim"/>
</seealso>
<example file="sysutex/ex76"/>
</element>



<element name="LoadStr">
<short>Load a string from the resource tables.</short>
<descr>
This function is not yet implemented. resources are not yet supported.
</descr>
<errors>
</errors>
<seealso>
</seealso>
</element>

<element name="LowerCase">
<short>Return a lowercase version of a string.</short>
<descr>
<var>LowerCase</var> returns the lowercase equivalent of <var>S</var>. Ansi characters
are not taken into account, only ASCII codes below 127 are converted. It is
completely equivalent to the lowercase function of the system unit, and is
provided for compatiibility only.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="AnsiLowerCase"/>
<link id="UpperCase"/>
<link id="AnsiUpperCase"/>
</seealso>
<example file="sysutex/ex77"/>
</element>



<element name="NewStr">
<short>Allocate a new ansistring on the heap.</short>
<descr>
<p>
<var>NewStr</var> assigns a new dynamic string on the heap, copies <var>S</var> into
it, and returns a pointer to the newly assigned string.
</p>
<p>
This function is obsolete, and shouldn't be used any more. The
<var>AnsiString</var> mechanism also allocates ansistrings on the heap, and
should be preferred over this mechanism.
</p>
<p>
For an example, see <link id="AssignStr"/>.
</p>
</descr>
<errors>
If not enough memory is present, an EOutOfMemory exception will be raised.
</errors>
<seealso>
<link id="AssignStr"/>
<link id="DisposeStr"/>
</seealso>
</element>


<element name="QuotedStr">
<short>Return a quotes version of a string.</short>
<descr>
<var>QuotedStr</var> returns the string <var>S</var>, quoted with single quotes. This means
that <var>S</var> is enclosed in single quotes, and every single quote in <var>S</var>
is doubled. It is equivalent to a call to <var>AnsiQuotedStr(s, '''')</var>.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="AnsiQuotedStr"/>
<link id="AnsiExtractQuotedStr"/>.
</seealso>
<example file="sysutex/ex78"/>
</element>


<element name="RightStr">
<short>Return a number of characters from a string, starting at the end.</short>
<descr>
<p>
<var>RightStr</var> returns the <var>Count</var> rightmost characters of <var>S</var>.
It is equivalent to a call to <var>Copy(S,Length(S)+1-Count,Count)</var>.
</p>
<p>
If <var>Count</var> is larger than the actual length of <var>S</var> only the real
length will be used.
</p>
</descr>
<errors>
None.
</errors>
<seealso>
<link id="LeftStr"/>
<link id="Trim"/>
<link id="TrimLeft"/>
<link id="TrimRight"/>
</seealso>
<example file="sysutex/ex79"/>
</element>



<element name="StrFmt">
<short>Format a string with given arguments, store the result in a buffer.</short>
<descr>
<var>StrFmt</var> will format <var>fmt</var> with <var>Args</var>, as the <link id="Format"/>
function does, and it will store the result in <var>Buffer</var>. The function
returns <var>Buffer</var>. <var>Buffer</var> should point to enough space to contain
the whole result.
</descr>
<errors>
for a list of errors, see <link id="Format"/>.
</errors>
<seealso>
<link id="StrLFmt"/>
<link id="FmtStr"/>
<link id="Format"/>
<link id="FormatBuf"/>
</seealso>
<example file="sysutex/ex80"/>
</element>



<element name="StrLFmt">
<short>Format a string with given arguments, but with limited length.</short>
<descr>
<var>StrLFmt</var> will format <var>fmt</var> with <var>Args</var>, as the <link id="Format"/>
function does, and it will store maximally <var>Maxlen characters</var> of the
result in <var>Buffer</var>. The function returns <var>Buffer</var>. <var>Buffer</var>
should point to enough space to contain <var>MaxLen</var> characters.
</descr>
<errors>
for a list of errors, see <link id="Format"/>.
</errors>
<seealso>
<link id="StrFmt"/>
<link id="FmtStr"/>
<link id="Format"/>
<link id="FormatBuf"/>
</seealso>
<example file="sysutex/ex81"/>
</element>


<element name="StrToFloat">
<short>Convert a string to a floating-point value.</short>
<descr>
<var>StrToFloat</var> converts the string <var>S</var> to a floating point value.
<var>S</var> should contain a valid stroing representation of a floating point 
value (either in decimal or scientific notation). If the string
contains a decimal value, then the decimal separator character can either be
a '.' or the value of the <var>DecimalSeparator</var> variable.
</descr>
<errors>
If the string <var>S</var> doesn't contain a valid floating point string, then an
exception will be raised.
</errors>
<seealso>
<link id="TextToFloat"/>
<link id="FloatToStr"/>
<link id="FormatFloat"/>
<link id="StrToInt"/>
</seealso>
<example file="sysutex/ex90"/>
</element>



<element name="StrToInt">
<short>Convert a string to an integer value.</short>
<descr>
<p>
<var>StrToInt</var> will convert the string <var>S</var>to an integer.
If the string contains invalid characters or has an invalid format,
then an <var>EConvertError</var> is raised.
</p>
<p>
To be successfully converted, a string can contain a combination
of <var>numerical</var> characters, possibly preceded by a minus sign (<var>-</var>).
Spaces are not allowed.
</p>
</descr>
<errors>
In case of error, an <var>EConvertError</var> is raised.
</errors>
<seealso>
<link id="IntToStr"/>
<link id="StrToIntDef"/>
</seealso>
<example file="sysutex/ex82"/>
</element>



<element name="StrToIntDef">
<short>Convert a string to an integer value, with a default value.</short>
<descr>
<p>
<var>StrToIntDef</var> will convert a string to an integer. If the string contains
invalid characters or has an invalid format, then <var>Default</var> is returned.
</p>
<p>
To be successfully converted, a string can contain a combination of
<var>numerical</var> characters, possibly preceded by a minus sign (<var>-</var>).
Spaces are not allowed.
</p>
</descr>
<errors>
None.
</errors>
<seealso>
<link id="IntToStr"/>
<link id="StrToInt"/>
</seealso>
<example file="sysutex/ex83"/>
</element>


<element name="TextToFloat">
<short>Convert a buffer to a float value.</short>
<descr>
<p>
<var>TextToFloat</var> converts the string in <var>Buffer</var> to a floating point 
value. <var>Buffer</var> should contain a valid stroing representation of a 
floating point value (either in decimal or scientific notation). 
If the buffer contains a decimal value, then the decimal separator 
character can either be a '.' or the value of the <var>DecimalSeparator</var> 
variable.
</p>
<p>
The function returns <var>True</var> if the conversion was successful.
</p>
</descr>
<errors>
If there is an invalid character in the buffer, then the function returns
<var>False</var>
</errors>
<seealso>
<link id="StrToFloat"/>
<link id="FloatToStr"/>
<link id="FormatFloat"/>
</seealso>
<example file="sysutex/ex91"/>
</element>

<element name="Trim">
<short>Trim whitespace from the ends of a string.</short>
<descr>
<p>
<var>Trim</var> strips blank characters (spaces) at the beginning and end of <var>S</var>
and returns the resulting string. Only <var>#32</var> characters are stripped.
</p>
<p>
If the string contains only spaces, an empty string is returned.
</p>
</descr>
<errors>
None.
</errors>
<seealso>
<link id="TrimLeft"/>
<link id="TrimRight"/>
</seealso>
<example file="sysutex/ex84"/>
</element>

<element name="TrimLeft">
<short>Trim whitespace from the beginning of a string.</short>
<descr>
<var>TrimLeft</var> strips blank characters (spaces) at the beginning of <var>S</var>
and returns the resulting string. Only <var>#32</var> characters are stripped.

If the string contains only spaces, an empty string is returned.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="Trim"/>
<link id="TrimRight"/>
</seealso>
<example file="sysutex/ex85"/>
</element>

<element name="TrimRight">
<short>Trim whitespace from the end of a string.</short>
<descr>
<var>Trim</var> strips blank characters (spaces) at the end of <var>S</var>
and returns the resulting string. Only <var>#32</var> characters are stripped.

If the string contains only spaces, an empty string is returned.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="Trim"/>
<link id="TrimLeft"/>
</seealso>
<example file="sysutex/ex86"/>
</element>


<element name="UpperCase">
<short>Return an uppercase version of a string.</short>
<descr>
<var>UpperCase</var> returns the uppercase equivalent of <var>S</var>. Ansi characters
are not taken into account, only ASCII codes below 127 are converted. It is
completely equivalent to the <var>UpCase</var> function of the system unit, and is
provided for compatiibility only.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="AnsiLowerCase"/>
<link id="LowerCase"/>
<link id="AnsiUpperCase"/>
</seealso>
<example file="sysutex/ex87"/>
</element>

<element name="Unix">
<short>Unix unit.</short>
</element>

<element name="errors">
<short>Error descriptions.</short>
</element>

<element name="sysconst">
<short>Error and other message strings.</short>
</element>

<element name="GetLastOSError">
<short>Return the last code from the OS.</short>
<descr>
<p>
<var>GetLastOSError</var> returns the error code from the last operating
system call. It does not reset this code. In general, it should be called
when an operating system call reported an error condition. In that case,
<var>GetLastOSError</var> gives extended information about the error.
</p>
<p>
No assumptions should be made about the resetting of the error code by
subsequent OS calls. This may be platform dependent.
</p>
</descr>
<seealso>
<link id="RaiseLastOSError"/>
</seealso>
</element>

<!-- procedure Visibility: default -->
<element name="RaiseLastOSError">
<short>Raise an exception with the last Operating System error code.</short>
<descr>
<var>RaiseLastOSError</var> raises an <link id="EOSError"/> exception with
the error code returned by <var>GetLastOSError</var>. If the Error code is
nonzero, then the corresponding error message will be returned. If the error
code is zero, a standard message will be returned.
</descr>
<errors>
This procedure may not be implemented on all platforms. If it is not, then a
normal <link id="Exception"/> will be raised.
</errors>
<seealso>
<link id="EOSError"/>
<link id="GetLastOSError"/>
<link id="Exception"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="GetEnvironmentVariable">
<short>Return the value of an environment variable.</short>
<descr>
<p>
<var>GetEnvironmentVariable</var> returns the value of the <var>EnvVar</var>
environment variable. If the specified variable does not exist or
<var>EnvVar</var> is empty, an empty string is returned.
</p>
</descr>
<seealso>
<link id="GetEnvironmentString"/>
<link id="GetEnvironmentVariableCount"/>
<example file="sysutex/ex93"/>
</seealso>

</element>

<!-- function Visibility: default -->
<element name="GetEnvironmentVariableCount">
<short>Return the number of variables in the environment.</short>
<descr>
<p>
<var>GetEnvironmentVariableCount</var> returns the number of variables in
the environment. The number is 1 based, but the result may be zero if there
are no environment variables.
</p>
</descr>
<errors>
If there is no environment, -1 may be returned.
</errors>
<seealso>
<link id="GetEnvironmentString"/>
<link id="GetEnvironmentVariable"/>
</seealso>
<example file="sysutex/ex92"/>
</element>

<element name="GetEnvironmentString">
<short>Return an environment variable by index.</short>
<descr>
<p>
<var>GetEnvironmentString</var> returns the <var>Index</var>-th environment
variable. The index is 1 based, and is bounded from above by the result of <link
id="GetEnvironmentVariableCount"/>.
</p>
<p>
For an example, <link id="GetEnvironmentVariableCount"/>.
</p>
</descr>
<errors>
If there is no environment, -1 may be returned.
</errors>
<seealso>
<link id="GetEnvironmentVariable"/>
<link id="GetEnvironmentVariableCount"/>
</seealso>
</element>

<!-- procedure Visibility: default -->
<element name="Sleep">
<short>Suspend execution of a program for a certain time.</short>
<descr>
<p>
<var>Sleep</var> suspends the execution of the program for
the specified number of milliseconds (<var>milliseconds</var>). 
After the specified period has expired, program execution resumes.
</p>
<remark>The indicated time is not exact, i.e. it is a minimum time. No
guarantees are made as to the exact duration of the suspension. 
</remark>
</descr>
</element>

<!-- function Visibility: default -->
<element name="ExecuteProcess">
<short>Execute another process (program).</short>
<descr>
<var>ExecuteProcess</var> will execute the program in <var>Path</var>,
passing it the arguments in <var>ComLine</var>. <var>ExecuteProcess</var>
will then wait for the program to finish, and will return the exit code of
the executed program. In case <var>ComLine</var> is a single string, it will
be split out in an array of strings, taking into account common whitespace
and quote rules.
</descr>
<errors>
In case the program could not be executed or an other error occurs, 
an <link id="EOSError"/> exception  will be raised.
</errors>
<seealso>
<link id="EOSError"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="GetAppConfigDir">
<short>Return the appropriate directory for the application's configuration files.</short>
<descr>
<p>
<var>GetAppConfigDir</var> returns the name of a directory in which the
application should store its configuration files on the current OS. 
If the parameter <var>Global</var> is <var>True</var> then the directory 
returned is a global
directory, i.e. valid for all users on the system. If the parameter
<var>Global</var> is false, then the directory is specific for the user who
is executing the program. On systems that do not support multi-user
environments, these two directories may be the same.
</p>
<p>
The directory which is returned is the name of the directory where the application is
supposed to store files. This does not mean that the directory exists, or
that the user can write in this directory (especially if
<var>Global</var>=<var>True</var>). It just returns the  name of the
appropriate location.
</p>
<p>
On systems where the operating system provides a call to determine this
location, this call will be used. On systems where there is no such call, 
an algorithm is used which reflects common practice on that system.
</p>
<p>
The application name is deduced from the binary name via the <link id="ApplicationName"/>
call, but can be configured by means of the <link id="OnGetApplicationName"/> callback.
</p>
</descr>
<errors>
None.
</errors>
<seealso>
<link id="GetAppConfigFile"/>
<link id="ApplicationName"/>
<link id="OnGetApplicationName"/>
<link id="CreateDir"/>
<link id="SysConfigDir"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="GetAppConfigFile">
<short>Return an appropriate name for an application configuration file.</short>
<descr>
<p>
<var>GetAppConfigFile</var> returns the name of a file in which the
application can store its configuration parameters. The <var>Global</var>
parameter determines whether it is a global configuration file
(value <var>True</var>) or a personal configuration file (value
<var>False</var>). The parameter <var>SubDir</var>, in case it is set to
<var>True</var>, will insert the name of a
directory before the filename. This can be used in case the application
needs to store other data than configuration data in an application-specific
directory. Default behaviour is to set this to <var>False</var>.
</p>
<p>
No assumptions should be made about the existence or writeability of this 
file, or the directory where the file should reside. 
</p>
<p>
On systems where the operating system provides a call to determine the
location of configuration files, this call will be used. On systems 
where there is no such call, an algorithm is used which reflects common 
practice on that system.
</p>
<p>
The application name is deduced from the binary name via the <link id="ApplicationName"/>
call, but can be configured by means of the <link id="OnGetApplicationName"/> callback.
</p>
</descr>
<errors>
None.
</errors>
<seealso>
<link id="GetAppConfigDir"/>
<link id="OnGetApplicationName"/>
<link id="ApplicationName"/>
<link id="CreateDir"/>
<link id="ConfigExtension"/>
<link id="SysConfigDir"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="ApplicationName">
<short>Return a default application name</short>
<descr>
<var>ApplicationName</var> returns the name of the current application.
Standard this is equal to the result of <var>ParamStr(0)</var>, but it can 
be customized by setting the <link id="OnGetApplicationName"/> callback.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="GetAppConfigDir"/>
<link id="OnGetApplicationName"/>
<link id="GetAppConfigFile"/>
<link id="ConfigExtension"/>
</seealso>
</element>

<!-- constant Visibility: default -->
<element name="ConfigExtension">
<short>Default application configuration file extension.</short>
<descr>
<var>ConfigExtension</var> is the default extension used by the
<link id="GetAppConfigFile"/> call. It can be set to any valid extension for
the current OS.
</descr>
<errors>
</errors>
<seealso>
</seealso>
</element>

<!-- constant Visibility: default -->
<element name="SysConfigDir">
<short>System configuration directory.</short>
<descr>
<p>
<var>SysConfigDir</var> is the default system configuration directory. It is
set at application startup by the <file>sysutils</file> initialization
routines.
</p>
<p>
This directory may be returned by the <link id="GetAppConfigDir"/> call on
some systems.
</p>
</descr>
<errors>
</errors>
<seealso>
<link id="GetAppConfigDir"/>
</seealso>
</element>

<!-- function type Visibility: default -->
<element name="TGetAppNameEvent">
<short>Callback type to get customized application name.</short>
<descr>
This callback type is used by the <link id="OnGetApplicationName"/> to
return an alternative application name.
</descr>
<errors>
</errors>
<seealso>
</seealso>
</element>

<!-- variable Visibility: default -->
<element name="OnGetApplicationName">
<short>Callback to get a customized application name.</short>
<descr>
<p>
By default, the configuration file routines <link id="GetAppConfigDir"/> and
<link id="GetAppConfigFile"/> use a default application name to construct a
directory or filename. This callback can be used to provide an alternative
application name.
</p>
<p>
Since the result of this callback will be used to construct a filename, care 
should be taken that the returned name does not contain directory separator
characters or characters that cannot appear in a filename.
</p>
</descr>
<errors>
</errors>
<seealso>
<link id="TGetAppNameEvent"/>
<link id="ApplicationName"/>
<link id="GetAppConfigDir"/>
<link id="GetAppConfigFile"/>
</seealso>
</element>

<!-- pointer type Visibility: default -->
<element name="PDayTable">
<short>Pointer to TDayTable type.</short>
</element>

<!-- array type Visibility: default -->
<element name="TDayTable">
<short>Array of day names.</short>
</element>

<!-- constant Visibility: default -->
<element name="HoursPerDay">
<short>Number of hours in a day.</short>
</element>

<!-- constant Visibility: default -->
<element name="MinsPerHour">
<short>Number of minutes per hour.</short>
</element>

<!-- constant Visibility: default -->
<element name="SecsPerMin">
<short>Number of seconds per minute</short>
</element>

<!-- constant Visibility: default -->
<element name="MSecsPerSec">
<short>Number of milliseconds per second</short>
</element>

<!-- constant Visibility: default -->
<element name="MinsPerDay">
<short>Number of minutes per day.</short>
</element>

<!-- constant Visibility: default -->
<element name="SecsPerDay">
<short>Number of seconds per day</short>
</element>

<!-- constant Visibility: default -->
<element name="MSecsPerDay">
<short>Number of milliseconds per day</short>
</element>

<!-- constant Visibility: default -->
<element name="DateDelta">
<short>Days between 1/1/0001 and 12/31/1899</short>
</element>

<!-- constant Visibility: default -->
<element name="UnixDateDelta">
<short>Number of days between 1.1.1900 and 1.1.1970</short>
</element>

<!-- constant Visibility: default -->
<element name="MonthDays">
<short>Array with number of days in the months for leap and non-leap years.</short>
</element>

<!-- constant Visibility: default -->
<element name="TwoDigitYearCenturyWindow">
<short>Window to determine what century 2 digit years are in.</short>
</element>

<!-- record type Visibility: default -->
<element name="TSystemTime">
<short>System time structure</short>
<descr>The System time structure contains the date/time in a
human-understandable format.
</descr>
</element>

<!-- variable Visibility: default -->
<element name="TSystemTime.Year">
<short>Year part</short>
</element>

<!-- variable Visibility: default -->
<element name="TSystemTime.Month">
<short>Month part</short>
</element>

<!-- variable Visibility: default -->
<element name="TSystemTime.Day">
<short>Day of month part</short>
</element>

<!-- variable Visibility: default -->
<element name="TSystemTime.Hour">
<short>Hour of the day</short>
</element>

<!-- variable Visibility: default -->
<element name="TSystemTime.Minute">
<short>Minute of the hour</short>
</element>

<!-- variable Visibility: default -->
<element name="TSystemTime.Second">
<short>Second of the minute</short>
</element>

<!-- variable Visibility: default -->
<element name="TSystemTime.MilliSecond">
<short>Milliseconds in the second</short>
</element>

<!-- record type Visibility: default -->
<element name="TTimeStamp">
<short>TimeStamp structure</short>
<descr>
<var>TTimeStamp</var> contains a timestamp, with the date and time parts
specified as separate <var>TDateTime</var> values.
</descr>
</element>

<!-- variable Visibility: default -->
<element name="TTimeStamp.Time">
<short>Time part</short>
</element>

<!-- variable Visibility: default -->
<element name="TTimeStamp.Date">
<short>Date part</short>
</element>

<!-- function Visibility: default -->
<element name="TryEncodeDate">
<short>Try to encode a date, and indicate success.</short>
<descr>
<var>TryEncodeDate</var> will check the validity of the <var>Year</var>,
<var>Month</var> and <var>Day</var> arguments, and if they are all valid,
then they will be encoded as a <var>TDateTime</var> value and returned in
<var>D</var>. The function will return <var>True</var> in this case. If an
inbvalid argument is passed, then <var>False</var> will be returned.
</descr>
<errors>
None. If an error occurs during the encoding, <var>False</var> is returned.
</errors>
<seealso>
<link id="EncodeDate"/>
<link id="DecodeDateFully"/>
<link id="DecodeDate"/>
<link id="TryEncodeTime"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="TryEncodeTime">
<short>Try to encode a time, and indicate success.</short>
<descr>
<var>TryEncodeTime</var> will check the validity of the <var>Hour</var>,
<var>Min</var>, <var>Sec</var> and <var>MSec</var> arguments, and will
encode them in a <var>TDateTime</var> value which is returned in
<var>T</var>. If the arguments are valid, then <var>True</var> is returned,
otherwise <var>False</var> is returned.
</descr>
<errors>
None. If an error occurs during the encoding, <var>False</var> is returned.
</errors>
<seealso>
<link id="EncodeTime"/>
<link id="DecodeTime"/>
<link id="TryEncodeDate"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="DecodeDateFully">
<short>Decode a date with additional date of the week.</short>
<descr>
<var>DecodeDateFully</var>, like <link id="DecodeDate"/>, decodes 
<var>DateTime</var> in its parts and returns these in <var>Year</var>, 
<var>Month</var>, <var>Day</var> but in addition returns the day of 
the week in <var>DOW</var>.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="EncodeDate"/>
<link id="TryEncodeDate"/>
<link id="DecodeDate"/>
</seealso>
</element>

<!-- procedure Visibility: default -->
<element name="GetLocalTime">
<short>Get the local time.</short>
<descr>
<var>GetLocalTime</var> returns the system time in a <link id="TSystemTime"/>
format.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="Now"/>
<link id="Date"/>
<link id="Time"/>
<link id="TSystemTime"/>
</seealso>
</element>

<!-- pointer type Visibility: default -->
<element name="PString">
<short>Pointer to a ansistring</short>
</element>

<!-- enumeration type Visibility: default -->
<element name="TFloatFormat">
<short>Formats for the FloatToText function.</short>
<descr>
<var>TFloatFormat</var> is used to determine how a float value should be
formatted in the <link id="FloatToText"/> function.
</descr>
<seealso>
<link id="FloatToText"/>
<link id="FloatToStrF"/>
</seealso>
</element>

<!-- enumeration value Visibility: default -->
<element name="TFloatFormat.ffGeneral">
<short>General number format.</short>
</element>

<!-- enumeration value Visibility: default -->
<element name="TFloatFormat.ffExponent">
<short>Scientific format.</short>
</element>

<!-- enumeration value Visibility: default -->
<element name="TFloatFormat.ffFixed">
<short>Fixed point format.</short>
</element>

<!-- enumeration value Visibility: default -->
<element name="TFloatFormat.ffNumber">
<short>Fixed point format with thousand separatord</short>
</element>

<!-- enumeration value Visibility: default -->
<element name="TFloatFormat.ffCurrency">
<short>Monetary format.</short>
</element>

<!-- enumeration type Visibility: default -->
<element name="TFloatValue">
<short>Type of float to return in the buffer for TextToFloat.</short>
<descr>
<var>TFloatValue</var> determines which kind of value should be returned in
the (untyped) buffer used by the <link id="TextToFloat"/> function.
</descr>
<seealso>
<link id="TextToFloat"/>
</seealso>
</element>

<!-- enumeration value Visibility: default -->
<element name="TFloatValue.fvExtended">
<short>Extended value</short>
</element>

<!-- enumeration value Visibility: default -->
<element name="TFloatValue.fvCurrency">
<short>Currency value</short>
</element>

<!-- enumeration value Visibility: default -->
<element name="TFloatValue.fvSingle">
<short>Single value</short>
</element>

<!-- enumeration value Visibility: default -->
<element name="TFloatValue.fvReal">
<short>Real value</short>
</element>

<!-- enumeration value Visibility: default -->
<element name="TFloatValue.fvDouble">
<short>Double value</short>
</element>

<!-- enumeration value Visibility: default -->
<element name="TFloatValue.fvComp">
<short>Comp value</short>
</element>

<!-- set type Visibility: default -->
<element name="TReplaceFlags">
<short>Flags for StringReplace function</short>
<descr>
<var>TReplaceFlags</var> determines the behaviour of the 
<link id="StringReplace"/> function.
</descr>
<seealso>
<link id="StringReplace"/>.
</seealso>
</element>

<!-- enumeration value Visibility: default -->
<element name="TReplaceFlags.rfReplaceAll">
<short>Replace all occurrences of the search string with the replacement string.</short>
</element>

<!-- enumeration value Visibility: default -->
<element name="TReplaceFlags.rfIgnoreCase">
<short>Search case insensitive.</short>
</element>

<!-- record type Visibility: default -->
<element name="TFloatRec">
<short>Record descriing a float value</short>
<descr>
<var>TFloatRec</var> is used to descibe a floating point value by the
<link id="FloatToDecimal"/> function.
</descr>
<seealso>
<link id="FloatToDecimal"/>
</seealso>
</element>

<!-- variable Visibility: default -->
<element name="TFloatRec.Exponent">
<short>Exponent part</short>
</element>

<!-- variable Visibility: default -->
<element name="TFloatRec.Negative">
<short>Sign part</short>
</element>

<!-- variable Visibility: default -->
<element name="TFloatRec.Digits">
<short>Digits of fraction</short>
</element>

<!-- constant Visibility: default -->
<element name="MinDateTime">
<short>Minimum <var>TDateTime</var> value.</short>
</element>

<!-- constant Visibility: default -->
<element name="MaxDateTime">
<short>Maximum <var>TDateTime</var> value.</short>
</element>

<!-- constant Visibility: default -->
<element name="MinCurrency">
<short>Minimum Currency value</short>
</element>

<!-- constant Visibility: default -->
<element name="MaxCurrency">
<short>Maximum currency value</short>
</element>

<!-- enumeration type Visibility: default -->
<element name="TTextLineBreakStyle">
<short>Line break style</short>
<descr>
<var>TTextLineBreakStyle</var> describes the style of linebreaks to be used
in the <link id="AdjustLineBreaks"/> function.
</descr>
<seealso>
<link id="AdjustLineBreaks"/>
</seealso>
</element>

<!-- enumeration value Visibility: default -->
<element name="TTextLineBreakStyle.tlbsLF">
<short>Linefeed only</short>
</element>
<element name="TTextLineBreakStyle.tlbsCR">
<short>Carriage-return only</short>
</element>

<!-- enumeration value Visibility: default -->
<element name="TTextLineBreakStyle.tlbsCRLF">
<short>Carriage-return and linefeed characters</short>
</element>

<!-- constant Visibility: default -->
<element name="DefaultTextLineBreakStyle">
<short>Default line break style for the current platform.</short>
</element>

<!-- constant Visibility: default -->
<element name="LeadBytes">
<short>Lead bytes in Multi-Byte character sets</short>
<descr>
<var>LeadBytes</var> contains the set of bytes that serve as lead byte in a
MBCS string.
</descr>
</element>

<!-- constant Visibility: default -->
<element name="EmptyStr">
<short>Empty String Constant</short>
</element>

<!-- constant Visibility: default -->
<element name="NullStr">
<short>Pointer to an empty string</short>
</element>

<!-- constant Visibility: default -->
<element name="EmptyWideStr">
<short>Empty wide string.</short>
</element>

<!-- function Visibility: default -->
<element name="CompareMemRange">
<short>Compare 2 memory locations</short>
<descr>
<p>
<var>CompareMemRange</var> compares the 2 memory locations pointed to by
<var>P1</var> and <var>P2</var> byte per byte. It stops comparing after
<var>Length</var> bytes have been compared, or when it has encountered 2
different bytes. The result is then
</p>
<dl>
<dt>&gt;0</dt><dd> if a byte in range <var>P1</var> was found that is bigger than the
corresponding byte in range <var>P2</var>.</dd>
<dt>0</dt><dd> if all bytes in range <var>P1</var> are the same as the corresponding 
bytes in range <var>P2</var>.</dd>
<dt>&lt;0</dt><dd> if a byte in range <var>P1</var> was found that is less than the
corresponding byte in range <var>P2</var>.</dd>
</dl>
</descr>
<errors>
None.
</errors>
<seealso>
<link id="SameText"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="SameText">
<short>Checks whether 2 strings are the same (case insensitive)</short>
<descr>
<var>SameText</var> calls <link id="CompareText"/> with <var>S1</var> and
<var>S2</var> as parameters and returns <var>True</var> if the result of
that call is zero, or <var>False</var> otherwise.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="CompareText"/>
<link id="AnsiSameText"/>
<link id="AnsiSameStr"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="AnsiSameText">
<short>Checks whether 2 strings are the same (case insensitive)</short>
<descr>
<var>SameText</var> calls <link id="AnsiCompareText"/> with <var>S1</var> and
<var>S2</var> as parameters and returns <var>True</var> if the result of
that call is zero, or <var>False</var> otherwise.
</descr>
<errors>
</errors>
<seealso>
<link id="AnsiCompareText"/>
<link id="SameText"/>
<link id="AnsiSameStr"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="AnsiSameStr">
<short>Checks whether 2 strings are the same (case sensitive)</short>
<descr>
<var>SameText</var> calls <link id="AnsiCompareStr"/> with <var>S1</var> and
<var>S2</var> as parameters and returns <var>True</var> if the result of
that call is zero, or <var>False</var> otherwise.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="AnsiCompareStr"/>
<link id="SameText"/>
<link id="AnsiSameText"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="AnsiStrLComp">
<short>Compare a limited number of characters of 2 strings</short>
<descr>
<var>AnsiStrLComp</var> functions the same as <link id="AnsiStrComp"/>, but
compares at most <var>MaxLen</var> characters, if this is less than one of
the lengths of the passed strings. If the first <var>MaxLen</var> characters
in both strings are the same, then zero is returned.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="AnsiStrComp"/>
<link id="AnsiStrIComp"/>
<link id="AnsiStrLIComp"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="TryStrToInt">
<short>Try to convert a string to an integer, and report on success.</short>
<descr>
<var>TryStrToInt</var> tries to convert the string <var>S</var> to an
integer, and returns <var>True</var> if this was succesful. In that case the
converted integer is returned in <var>I</var>. If the conversion failed,
(an invalid string, or the value is out of range) then <var>False</var> is returned.
</descr>
<errors>
None. On error, <var>False</var> is returned.
</errors>
<seealso>
<link id="StrToInt"/>
<link id="TryStrToInt64"/>
<link id="StrToIntDef"/>
<link id="StrToInt64"/>
<link id="StrToInt64Def"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="StrToInt64">
<short>Convert a string to an Int64 value.</short>
<descr>
<p>
<var>StrToInt64</var> converts the string <var>S</var> to a Int64 value, and
returns this value. The string can only contain numerical characters, and
optionally a minus sign as the first character. Whitespace is not allowed.
</p>
<p>
Hexadecimal values (starting with the $ character) are supported.
</p>
</descr>
<errors>
On error, a <link id="EConvertError"/> exception is raised.
</errors>
<seealso>
<link id="TryStrToInt64"/>
<link id="StrToInt64Def"/>
<link id="StrToInt"/>
<link id="TryStrToInt"/>
<link id="StrToIntDef"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="TryStrToInt64">
<short>Try to convert a string to an int64 value, and report on success.</short>
<descr>
<p>
<var>TryStrToInt64</var> tries to convert the string <var>S</var> to a Int64 value, and
returns this value in <var>I</var> if successful. If the conversion was
succesful, the function result is <var>True</var>, or <var>False</var>
otherwise.
The string can only contain numerical characters, and
optionally a minus sign as the first character. Whitespace is not allowed.
</p>
<p>
Hexadecimal values (starting with the $ character) are supported.
</p>
</descr>
<errors>
None. On error, <var>False</var> is returned.
</errors>
<seealso>
<link id="StrToInt64"/>
<link id="StrToInt64Def"/>
<link id="StrToInt"/>
<link id="TryStrToInt"/>
<link id="StrToIntDef"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="StrToInt64Def">
<short>Convert a string to an Int64 value, with a default value</short>
<descr>
<var>StrToInt64Def</var> tries to convert the string <var>S</var> to a Int64
value, and returns this value. If the conversion fails for some reason, the
value <var>Default</var> is returned instead.
</descr>
<errors>
None. On error, the <var>Default</var> value is returned.
</errors>
<seealso>
<link id="StrToInt64"/>
<link id="TryStrToInt64"/>
<link id="StrToInt"/>
<link id="TryStrToInt"/>
<link id="StrToIntDef"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="StrToFloatDef">
<short>Convert a string to a float, with a default value.</short>
<descr>
<var>StrToFloatDef</var> tries to convert the string <var>S</var> to a
floating point value, and returns this value. If the conversion fails for
some reason, the value <var>Default</var> is returned instead.
</descr>
<errors>
None. On error, the <var>Default</var> value is returned.
</errors>
<seealso>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="FloatToDateTime">
<short>Convert a float to a <var>TDateTime</var> value.</short>
<descr>
<var>FloatToDateTime</var> converts the <var>Value</var> floating point
value to a <var>TDateTime</var> value. It checks whether <var>Value</var> is
in the valid range of dates (determined by <link id="MinDateTime"/> and
<link id="MaxDateTime"/>). If not, an <link id="EConvertError"/> exception
is raised.
</descr>
<errors>
If <var>Value</var> is out of range, an <link id="EConvertError"/> exception
is raised.
</errors>
<seealso>
<link id="EConvertError"/>
<link id="MinDateTime"/>
<link id="MaxDateTime"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="FloattoCurr">
<short>Convert a float to a Currency value.</short>
<descr>
<var>FloatToCurr</var> converts the <var>Value</var> floating point
value to a <var>Currency</var> value. It checks whether <var>Value</var> is
in the valid range of currencies (determined by <link id="MinCurrency"/> and
<link id="MaxCurrency"/>). If not, an <link id="EConvertError"/> exception
is raised.
</descr>
<errors>
If <var>Value</var> is out of range, an <link id="EConvertError"/> exception
is raised.
</errors>
<seealso>
<link id="EConvertError"/>
<link id="TryFloatToCurr"/>
<link id="MinCurrency"/>
<link id="MaxCurrency"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="TryFloatToCurr">
<short>Try to convert a float value to a currency value and report on success.</short>
<descr>
<var>TryFloatToCurr</var> tries convert the <var>Value</var> floating point
value to a <var>Currency</var> value. If successful, the function returns
<var>True</var> and the resulting currency value is returned in
<var>AResult</var>. It checks whether <var>Value</var> is
in the valid range of currencies (determined by <link id="MinCurrency"/> and
<link id="MaxCurrency"/>). If not, <var>False</var> is returned.
</descr>
<errors>
If <var>Value</var> is out of range, <var>False</var> is returned.
</errors>
<seealso>
<link id="FloatToCurr"/>
<link id="MinCurrency"/>
<link id="MaxCurrency"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="CurrToStr">
<short>Convert a currency value to a string.</short>
<descr>
<p>
<var>CurrToStr</var> will convert a currency value to a string with a
maximum of 15 digits, and precision 2. Calling <var>CurrToStr</var> 
is equivalent to calling <link id="FloatToStrF"/>:
</p>
<code>
  FloatToStrF(Value,ffNumber,15,2);
</code>
</descr>
<errors>
None.
</errors>
<seealso>
<link id="FloatToStrF"/>
<link id="StrToCurr"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="StrToCurr">
<short>Convert a string to a currency value</short>
<descr>
<var>StrToCurr</var> converts a string to a currency value and returns the
value. The string
should contain a valid currency amount, without currency symbol. If the
conversion fails, an <link id="EConvertError"/> exception is raised.
</descr>
<errors>
On error, an <link id="EConvertError"/> exception is raised.
</errors>
<seealso>
<link id="CurrToStr"/>
<link id="StrToCurrDef"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="StrToCurrDef">
<short>Convert a string to a currency value, using a default value</short>
<descr>
<var>StrToCurrDef</var> converts a string to a currency value and returns the
value. The string should contain a valid currency amount, without currency 
symbol. If the conversion fails, the fallback <var>Default</var> value is returned.
</descr>
<errors>
On error, the <var>Default</var> value is returned.
</errors>
<seealso>
<link id="CurrToStr"/>
<link id="StrToCurr"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="StrToBool">
<short>Convert a string to a boolean value</short>
<descr>
<var>StrToBool</var> will convert the string <var>S</var> to a boolean
value. The string <var>S</var> can contain one of <var>'True'</var>,
<var>'False'</var> (case is ignored) or a numerical value. If it contains a
numerical value, 0 is converted to <var>False</var>, all other values result
in <var>True</var>. If the string <var>S</var> contains no valid boolean,
then  an <link id="EConvertError"/> exception is raised.
</descr>
<errors>
On error, an <link id="EConvertError"/> exception is raised.
</errors>
<seealso>
<link id="BoolToStr"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="BoolToStr">
<short>Convert a boolean value to a string.</short>
<descr>
<var>BoolToStr</var> converts the boolean <var>B</var> to one of
the strings <var>'TRUE'</var> or <var>'FALSE'</var>
</descr>
<errors>
None.
</errors>
<seealso>
<link id="StrToBool"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="StringReplace">
<short>Replace occurrences of one substring with another in a string.</short>
<descr>
<var>StringReplace</var> searches the string <var>S</var> for
occurrences of the string <var>OldPattern</var> and, if it is found,
replaces it with <var>NewPattern</var>. It returns the resulting string. The
behaviour of <var>StringReplace</var> can be runed with <var>Flags</var>,
which is of type <link id="TReplaceFlags"/>. Standard behaviour is to
replace only the first occurrence of <var>OldPattern</var>, and to search
case sensitively.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="TReplaceFlags"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="FloatToTextFmt">
<short>Convert a float value to a string using a given mask.</short>
<descr>
<p>
<var>FloatToTextFmt</var> returns a textual representation of
<var>Value</var> in the memory location pointed to by <var>Buffer</var>. it
uses the formatting specification in <var>Format</var> to do this. The
return value is the number of characters that were written in the buffer.
</p>
<p>
For a list of valid formatting characters, see <link id="FormatFloat"/>
</p>
</descr>
<errors>
No length checking is performed on the buffer. The buffer should point to
enough memory to hold the complete string. If this is not the case, an
access violation may occur.
</errors>
<seealso>
<link id="FormatFloat"/>
</seealso>
</element>

<!-- procedure Visibility: default -->
<element name="FloatToDecimal">
<short>Convert a float value to a <var>TFloatRec</var> value.</short>
<descr>
<var>FloatToDecimal</var> converts the float <var>Value</var> to a
float description in the <var>Result</var> <link id="TFloatRec"/> format.
It will store <var>Precision</var> digits in the <var>Digits</var> field, of
which at most <var>Decimal</var> decimals.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="TFloatRec"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="IsDelimiter">
<short>Check whether a given string is a delimiter character.</short>
<descr>
<var>IsDelimiter</var> checks whether the <var>Index</var>-th character in the
string <var>S</var> is a delimiter character as passed in
<var>Delimiters</var>. If <var>Index</var> is out of range, <var>False</var>
is returned.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="LastDelimiter"/>
</seealso>
</element>

<!-- enumeration type Visibility: default -->
<element name="TMbcsByteType">
<short>Type of multi-byte character set.</short>
<descr>
</descr>
<errors>
</errors>
<seealso>
</seealso>
</element>

<!-- enumeration value Visibility: default -->
<element name="TMbcsByteType.mbSingleByte">
<short>Single bytes</short>
</element>

<!-- enumeration value Visibility: default -->
<element name="TMbcsByteType.mbLeadByte">
<short>Uses lead-byte</short>
</element>

<!-- enumeration value Visibility: default -->
<element name="TMbcsByteType.mbTrailByte">
<short>Uses trailing byte</short>
</element>

<!-- function Visibility: default -->
<element name="ByteType">
<short>Return the type of byte in an ansistring for a multi-byte character set</short>
<descr>
<var>ByteType</var> returns the type of byte in the ansistring <var>S</var>
at (1-based) position <var>Index</var>. 
</descr>
<errors>
No checking on the index is performed.
</errors>
<seealso>
<link id="TMbcsByteType"/>
<link id="StrByteType"/>
</seealso>

</element>

<!-- function Visibility: default -->
<element name="StrByteType">
<short>Return the type of byte in a null-terminated string for a multi-byte character set</short>
<descr>
<var>StrByteType</var> returns the type of byte in the null-terminated
string <var>Str</var> at (0-based) position <var>Index</var>. 
</descr>
<errors>
No checking on the index is performed.
</errors>
<seealso>
<link id="TMbcsByteType"/>
<link id="ByteType"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="ByteToCharLen">
<short>Convert a length in bytes to a length in characters.</short>
<descr>
<var>ByteToCharLen</var> returns the number of bytes in <var>S</var>, but
limits the result to <var>MaxLen</var>
</descr>
<errors>
This function does not take into account MBCS yet.
</errors>
<seealso>
<link id="CharToByteLen"/>
<link id="ByteToCharIndex"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="CharToByteLen">
<short>Convert a length in characters to a length in bytes.</short>
<descr>
<var>CharToByteLen</var> returns the number of bytes in <var>S</var>, but
limits the result to <var>MaxLen</var>
</descr>
<errors>
This function does not take into account MBCS yet.
</errors>
<seealso>
<link id="ByteToCharLen"/>
<link id="ByteToCharIndex"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="ByteToCharIndex">
<short>Convert a character index in Bytes to an Index in characters</short>
<descr>
<var>ByteToCharIndex</var> returns the index (in characters) of the
<var>Index</var>-th byte in <var>S</var>.
</descr>
<errors>
This function does not take into account MBCS yet.
</errors>
<seealso>
<link id="CharToByteLen"/>
<link id="ByteToCharLen"/>
</seealso>
</element>

<!-- constant Visibility: default -->
<element name="SwitchChars">
<short>Characters which start a command-line switch</short>
<descr>
The characters in this set will be used by the <link id="FindCmdLineSwitch"/> 
function to determine whether a command-line
argument is a switch (an option) or a value. If the first character of an
argument is in <var>SwitchChars</var>, it will be considered an option or
switch.
</descr>
<errors>
</errors>
<seealso>
<link id="FindCmdLineSwitch"/>
</seealso>
</element>

<!-- set type Visibility: default -->
<element name="TSysCharSet">
<short>Set of characters.</short>
<descr>
Generic set of characters type.
</descr>
<errors>
</errors>
<seealso>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="FindCmdLineSwitch">
<short>Check whether a certain switch is present on the command-line.</short>
<descr>
<var>FindCmdLineSwitch</var> will check all command-line arguments for the
presence of the option <var>Switch</var>. It will return <var>True</var> if
it was found, <var>False</var> otherwise. Characters that appear in
<var>Chars</var> (default is <link id="SwitchChars"/>) are assumed to
indicate an option (switch). If the parameter <var>IgnoreCase</var> is
<var>True</var>, case will be ignored when looking for the switch. Default
is to search case sensitive.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="SwitchChars"/>
</seealso>
</element>

<!-- alias type Visibility: default -->
<element name="THandle">
<short>File Handle type.</short>
<descr>
<var>THandle</var> refers to the definition of <var>THandle</var> in the
system unit, and is provided for backward compatibility only.
</descr>
</element>

<!-- procedure type Visibility: default -->
<element name="TProcedure">
<short>Procedural type</short>
<descr>
<var>TProcedure</var> is a general definition of a procedural callback.
</descr>
</element>

<!-- alias type Visibility: default -->
<element name="TFileName">
<short>Filename type</short>
<descr>
<var>TFileName</var> is used in the <link id="TSearchRec"/> definition.
</descr>
<seealso>
<link id="TSearchRec"/>
</seealso>
</element>

<!-- set type Visibility: default -->
<element name="TIntegerSet">
<short>Set with size of integer.</short>
<descr>
<var>TIntegerSet</var> is a generic integer subrange set definition whose
size fits in a single integer.
</descr>
</element>

<!-- record type Visibility: default -->
<element name="LongRec">
<short>Record describing a longint value</short>
<descr>
<var>LongRec</var> can be used to extract the parts of an long Integer: the
high and low word, or the 4 separate bytes as a zero-based array of bytes.
Note that the meaning of High and Low parts are different on various CPUs.
</descr>
<seealso>
<link id="WordRec"/>
<link id="Int64Rec"/>
</seealso>
</element>

<!-- record type Visibility: default -->
<element name="WordRec">
<short>Record describing a word value.</short>
<descr>
<var>LongRec</var> can be used to extract the parts of a word: the
high and low byte. Note that the meaning of the High and Low parts
are different on various CPUs.
</descr>
<seealso>
<link id="LongRec"/>
<link id="Int64Rec"/>
</seealso>
</element>

<!-- variable Visibility: default -->
<element name="WordRec.Lo">
<short>Low byte of the word.</short>
</element>

<!-- variable Visibility: default -->
<element name="WordRec.Hi">
<short>High byte of the word</short>
</element>

<!-- record type Visibility: default -->
<element name="Int64Rec">
<short>Record describing an Int64 value</short>
<descr>
<var>Int64Rec</var> can be used to extract the parts of a Int64: the
high and low cardinal, or a zero-based array of 4 words, or a zero based
array of 8 bytes. Note that the meaning of the High and Low parts
are different on various CPUs.
</descr>
<seealso>
<link id="LongRec"/>
<link id="WordRec"/>
</seealso>
</element>

<!-- pointer type Visibility: default -->
<element name="PByteArray">
<short>Pointer to an array of byte.</short>
<descr>
Generic pointer to <link id="TByteArray"/>. Use to access memory regions as
a byte array.
</descr>
<seealso>
<link id="TByteArray"/>
<link id="PWordArray"/>
<link id="TWordArray"/>
</seealso>
</element>

<!-- array type Visibility: default -->
<element name="TByteArray">
<short>Array of bytes</short>
<descr>
<var>TByteArray</var> is a generic array definition, mostly for use as a
base type of the <link id="PByteArray"/> type.
</descr>
<seealso>
<link id="PByteArray"/>
<link id="PWordArray"/>
<link id="TWordArray"/>
</seealso>
</element>

<!-- pointer type Visibility: default -->
<element name="PWordArray">
<short>Pointer to an array of word.</short>
<descr>
Generic pointer to <link id="TWordArray"/>. Use to access memory regions as
a word array.
</descr>
<seealso>
<link id="TWordArray"/>
<link id="PByteArray"/>
<link id="TByteArray"/>
</seealso>
</element>

<!-- array type Visibility: default -->
<element name="TWordArray">
<short></short>
<descr>
<var>TWordArray</var> is a generic array definition, mostly for use as a
base type of the <link id="PWordArray"/> type.
</descr>
<errors>
</errors>
<seealso>
<link id="PWordArray"/>
<link id="PByteArray"/>
<link id="TByteArray"/>
</seealso>
</element>

<!-- record type Visibility: default -->
<element name="TMethod">
<short>Record describing a method.</short>
<descr>
<var>TMethod</var> describes a general method pointer, and is used in
Run-Time Type Information handling.
</descr>
</element>

<!-- variable Visibility: default -->
<element name="TMethod.Code">
<short>Pointer to method code.</short>
</element>

<!-- variable Visibility: default -->
<element name="TMethod.Data">
<short>Pointer to object instance.</short>
</element>

<!-- object Visibility: default -->
<element name="Exception">
<short>Base class of all exceptions.</short>
<descr>
<var>Exception</var> is the base class for all exception handling routines
in the RTL and FCL. While it is possible to raise an exception with any
class descending from <var>TObject</var>, it is recommended to use
<var>Exception</var> as the basis of exception class objects:
the <var>Exception</var> class introduces properties to associate a message
and a help context with the exception being raised. What is more, the
<file>SysUtils</file> unit sets the necessary hooks to catch and display
unhandled exceptions: in such cases, the message displayed to the end user, 
will be the message stored in the exception class.
</descr>
<seealso>
<link id="ExceptObject"/>
<link id="ExceptAddr"/>
<link id="ExceptionErrorMessage"/>
<link id="ShowException"/>
<link id="Abort"/>
</seealso>
</element>

<!-- constructor Visibility: public -->
<element name="Exception.Create">
<short>Constructs a new exception object with a given message.</short>
<var>Create</var> allocates a new exception object on the heap, and stores
<var>Msg</var> in the <link id="Exception.Message">Message</link> property.
<errors>
Construction may fail if there is not enough memory on the heap.
</errors>
<seealso>
<link id="Exception.CreateFmt"/>
<link id="Exception.Message"/>
</seealso>
</element>

<!-- constructor Visibility: public -->
<element name="Exception.CreateFmt">
<short>Constructs a new exception object and formats a new message.</short>
<p>
<var>CreateFmt</var> allocates a new exception object on the heap, and
fills the  <link id="Exception.Message">Message</link> property with the result of a call to <link
id="Format"/> with <var>Msg</var> and <var>Args</var> as arguments.
</p>
<p>Using <var>CreateFmt</var> is equivalent to using the following code:</p>
<code>
  Exception.Create(Format(Msg,Args));
</code>
<errors>
Construction may fail if there is not enough memory on the heap.
</errors>
<seealso>
<link id="Exception.Create"/>
<link id="Exception.Message"/>
<link id="Format"/>
</seealso>
</element>

<!-- constructor Visibility: public -->
<element name="Exception.CreateRes">
<short>Constructs a new exception object and gets the message from a resource.</short>
<p>
<var>CreateRes</var> allocates a new exception object on the heap, and stores
fetches the resource string <var>ResString</var> from the resources and
stores it in the <link id="Exception.Message">Message</link> property.
</p>
<remark>
Resources are not yet implemented in Free Pascal.
</remark>
<errors>
Construction may fail if there is not enough memory on the heap.
</errors>
<seealso>
<link id="Exception.Create"/>
<link id="Exception.CreateFmt"/>
<link id="Exception.CreateResFmt"/>
<link id="Exception.Message"/>
</seealso>
</element>

<!-- constructor Visibility: public -->
<element name="Exception.CreateResFmt">
<short>Constructs a new exception object and formats the message from a
reasource.</short>
<descr>
<var>CreateResFmt</var> does the same as <link
id="Exception.CreateFmt">CreateFmt</link>, but fetches
the message from the resource string <var>ResString</var>.
</descr>
<errors>
Construction may fail if there is not enough memory on the heap.
</errors>
<seealso>
<link id="Exception.Create"/>
<link id="Exception.CreateFmt"/>
<link id="Exception.CreateRes"/>
<link id="Exception.Message"/>
</seealso>
</element>

<!-- constructor Visibility: public -->
<element name="Exception.CreateHelp">
<short>Constructs a new exception object and sets the help context.</short>
<descr>
<var>CreateHelp</var> does the same as the <link
id="Exception.Create">Create</link> constructor,
but additionally stores <var>AHelpContext</var> in the <link
id="Exception.HelpContext">HelpContext</link> property.
</descr>
<seealso>
<link id="Exception.Create"/>
</seealso>
</element>

<!-- constructor Visibility: public -->
<element name="Exception.CreateFmtHelp">
<short>Constructs a new exception object and sets the help context and
formats the message</short>
<descr>
<var>CreateFmtHelp</var> does the same as the <link
id="Exception.CreateFmt">CreateFmt</link> constructor,
but additionally stores <var>AHelpContext</var> in the <link
id="Exception.HelpContext">HelpContext</link> property.
</descr>
<seealso>
<link id="Exception.CreateFmt"/>
</seealso>
</element>

<!-- constructor Visibility: public -->
<element name="Exception.CreateResHelp">
<short>Constructs a new exception object and sets the help context and
gets the message from a resource</short>
<descr>
<var>CreateResHelp</var> does the same as the <link
id="Exception.CreateRes">CreateRes</link> constructor,
but additionally stores <var>AHelpContext</var> in the <link
id="Exception.HelpContext">HelpContext</link> property.
</descr>
<seealso>
<link id="Exception.CreateRes"/>
</seealso>
</element>

<!-- constructor Visibility: public -->
<element name="Exception.CreateResFmtHelp">
<short>Constructs a new exception object and sets the help context and
formats the message from a resource</short>
<descr>
<var>CreateResFmtHelp</var> does the same as the <link
id="Exception.CreateResFmt">CreateResFmt</link> constructor,
but additionally stores <var>AHelpContext</var> in the <link
id="Exception.HelpContext">HelpContext</link> property.
</descr>
<seealso>
<link id="Exception.CreateResFmt"/>
</seealso>
</element>

<!-- property Visibility: public -->
<element name="Exception.helpcontext">
<short>Help context associated with the exception.</short>
<descr>
<var>HelpContext</var> is the help context associated with the exception,
and can be used to provide context-sensitive help when the exception error
message is displayed. It should be set in the exception constructor.
</descr>
<seealso>
<link id="Exception.CreateHelp"/>
<link id="Exception.Message"/>
</seealso>
</element>

<!-- property Visibility: public -->
<element name="Exception.message">
<short>Message associated with the exception.</short>
<descr>
<var>Message</var> provides additional information about the exception. It
is shown to the user in e.g. the <link id="ShowException"/> routine, and
should be set in the constructor when the exception is raised.
</descr>
<seealso>
<link id="Exception.Create"/>
<link id="Exception.HelpContext"/>
</seealso>
</element>

<!-- "class of" type Visibility: default -->
<element name="ExceptClass">
<short>Exception Class reference</short>
<descr>
<var>ExceptClass</var> is a <link id="Exception"/> class reference.
</descr>
<seealso>
<link id="Exception"/>
</seealso>
</element>

<!-- object Visibility: default -->
<element name="EExternal">
<short>External Exception.</short>
<descr>
<var>EExternal</var> is the base exception for all external exceptions, as
reported by the CPU or operating system, as opposed to internal exceptions,
which are raised by the program itself. The <file>SysUtils</file> unit
converts all operating system errors to descendents of <var>EExternal</var>.
</descr>
<seealso>
<link id="EInterror"/>
<link id="EExternal"/>
<link id="EMathError"/>
<link id="EExternalException"/>
<link id="EAccessViolation"/>
<link id="EPrivilege"/>
<link id="EStackOverflow"/>
<link id="EControlC"/>
</seealso>
</element>

<!-- object Visibility: default -->
<element name="EIntError">
<short>Integer operation error.</short>
<descr>
<var>EInterror</var> is used when the operating system or CPU signals an
integer operation error, e.g.,  an overflow.
</descr>
</element>

<!-- object Visibility: default -->
<element name="EDivByZero">
<short>Division by zero error.</short>
<descr>
<var>EDivByZero</var> is used when the operating system or CPU signals a
division by zero error.
</descr>
<link id="EIntError"/>
<link id="ERangeError"/>
<link id="EIntOverflow"/>
</element>

<!-- object Visibility: default -->
<element name="ERangeError">
<short>Range check error.</short>
<descr>
<var>ERangeError</var> is raised by the Free Pascal runtime library if
range checking is on, and a range check error occurs.
</descr>
<seealso>
<link id="EIntError"/>
<link id="EDivByZero"/>
<link id="EIntOverflow"/>
</seealso>
</element>

<!-- object Visibility: default -->
<element name="EIntOverflow">
<short>Integer overflow error.</short>
<descr>
<var>EIntOverflow</var> is used when the operating system or CPU signals a
integer overflow error.
</descr>
<seealso>
<link id="EIntError"/>
<link id="EDivByZero"/>
<link id="ERangeError"/>
</seealso>
</element>

<!-- object Visibility: default -->
<element name="EMathError">
<short>Mathematical error</short>
<descr>
<var>EMathError</var> is used when the operating system or CPU signals a
floating point overflow error.
</descr>
<seealso>
<link id="EIntError"/>
<link id="EIntOverflow"/>
<link id="EDivByZero"/>
<link id="ERangeError"/>
</seealso>
</element>

<!-- object Visibility: default -->
<element name="EInvalidOp">
<short>Invalid operation.</short>
<descr>
<var>EInvalidOp</var> is raised when an invalid operation is encountered.
</descr>
</element>

<!-- object Visibility: default -->
<element name="EZeroDivide">
<short>Division by zero error.</short>
<descr>
<var>EZeroDivide</var> occurs when a float division by zero occurs.
</descr>
<seealso>
<link id="EIntError"/>
<link id="EIntOverflow"/>
<link id="EDivByZero"/>
<link id="ERangeError"/>
</seealso>
</element>

<!-- object Visibility: default -->
<element name="EOverflow">
<short>Float overflow error.</short>
<descr>
<var>EOverflow</var> occurs when a float operation overflows. (i.e. result
is too big to represent).
</descr>
<seealso>
<link id="EIntError"/>
<link id="EIntOverflow"/>
<link id="EDivByZero"/>
<link id="ERangeError"/>
<link id="EUnderFlow"/>
</seealso>
</element>

<!-- object Visibility: default -->
<element name="EUnderflow">
<short>Float underflow error</short>
<descr>
<var>EOverflow</var> occurs when a float operation underflows (i.e. result
is too small to represent).
</descr>
<seealso>
<link id="EIntError"/>
<link id="EIntOverflow"/>
<link id="EDivByZero"/>
<link id="ERangeError"/>
<link id="EOverFlow"/>
</seealso>
</element>

<!-- object Visibility: default -->
<element name="EInOutError">
<short>Input/Output error</short>
<descr>
<var>EInOutError</var> is raised when a IO routine of Free Pascal returns an
error. The error is converted to an <var>EInOutError</var> only if the
input/output checking feature of FPC is turned on. The error code of the
input/output operation is returned in <link
id="EInOutError.ErrorCode">ErrorCode</link>.
</descr>
<seealso>
<link id="EInOutError.ErrorCode"/>
</seealso>
</element>

<!-- variable Visibility: public -->
<element name="EInOutError.ErrorCode">
<short>Error code for Input/Output operation.</short>
<descr>
<var>ErrorCode</var> contains the error code from the I/O operation which
raised the <link id="EInoutError"/> exception. An explanation of the error
codes can be found in the user's manual.
</descr>
</element>

<!-- object Visibility: default -->
<element name="EHeapMemoryError">
<short>Heap memory error</short>
<descr>
<var>EHeapMemoryError</var> is raised when an error occurs in heap
(dynamically allocated) memory.
</descr>
<seealso>
<link id="EHeapException"/>
<link id="EoutOfMemory"/>
<link id="EInvalidPointer"/>
</seealso>
</element>

<!-- alias type Visibility: default -->
<element name="EHeapException">
<short>Heap exception</short>
<descr>
<var>EHeapMemoryError</var> is raised when an error occurs in the heap
management routines.
</descr>
<seealso>
<link id="EHeapMemoryError"/>
<link id="EoutOfMemory"/>
<link id="EInvalidPointer"/>
</seealso>
</element>

<!-- object Visibility: default -->
<element name="EExternalException">
<short>External exception</short>
<descr>
<var>EExternalException</var> is raised when an external routine raises an
exception.
</descr>
<seealso>
<link id="EExternal"/>
</seealso>
</element>

<!-- object Visibility: default -->
<element name="EInvalidPointer">
<short>Invalid pointer operation</short>
<descr>
<var>EInvalidPointer</var> is raised when an invalid heap pointer is used.
</descr>
<seealso>
<link id="EHeapException"/>
<link id="EHeapMemoryError"/>
<link id="EOutOfMemory"/>
</seealso>
</element>

<!-- object Visibility: default -->
<element name="EOutOfMemory">
<short>Out of memory error.</short>
<descr>
<var>EOutOfMemory</var> occurs when memory can no longer be allocated on the
heap. An instance of <var>EOutOfMemory</var> is allocated on the heap at
program startup, so it is available when needed.
</descr>
<seealso>
<link id="EHeapException"/>
<link id="EHeapMemoryError"/>
<link id="EInvalidPointer"/>
</seealso>
</element>

<!-- object Visibility: default -->
<element name="EInvalidCast">
<short>Invalid typecast error.</short>
<descr>
<var>EInvalidCast</var> is raised when an invalid typecast error (using the
<var>as</var> operator) is encountered.
</descr>
<seealso>
<link id="EIntfCastError"/>
</seealso>
</element>

<!-- object Visibility: default -->
<element name="EVariantError">
<short>Variant error.</short>
<descr>
<var>EVariantError</var> is raised by the internal variant routines.
</descr>
</element>

<!-- object Visibility: default -->
<element name="EAccessViolation">
<short>Access Violation error</short>
<descr>
<var>EAccessViolation</var> is raised when the OS reports an Access
Violation, i.e. when invalid memory is accessed.
</descr>
</element>

<!-- object Visibility: default -->
<element name="EPrivilege">
<short>Privileged instruction error.</short>
<descr>
<var>EPrivilege</var> is raised when the OS reports that an invalid
instruction was executed.
</descr>
</element>

<!-- object Visibility: default -->
<element name="EStackOverflow">
<short>Stack overflow error.</short>
<descr>
<var>EStackOverflow</var> occurs when the stack has grown too big (e.g. by
infinite recursion).
</descr>
</element>

<!-- object Visibility: default -->
<element name="EControlC">
<short>Control-C (abort) was pressed on the console.</short>
<descr>
<var>EControlC</var> is raised when the user has pressed CTRL-C in a
console application.
</descr>
</element>

<!-- object Visibility: default -->
<element name="EConvertError">
<short>Conversion error.</short>
<descr>
<var>EConvertError</var> is raised by the various conversion routines in the
<file>SysUtils</file> unit. The message will contain more specific error
information.
</descr>
</element>

<!-- object Visibility: default -->
<element name="EAbort">
<short>Abort error.</short>
<descr>
<var>Abort</var> is raised by the <link id="Abort"/> procedure. It is not
displayed in GUI applications, and serves only to immediatly abort the current
procedure, and return control to the main program loop. 
</descr>
<seealso>
<link id="Abort"/>
</seealso>
</element>

<!-- object Visibility: default -->
<element name="EAbstractError">
<short>Abstract error.</short>
<descr>
<var>EAbstractError</var> is raised when an abstract error occurs, i.e. when
an unimplemented abstract method is called.
</descr>
</element>

<!-- object Visibility: default -->
<element name="EAssertionFailed">
<short>Assertion failed error.</short>
<descr>
<var>EAssertionFailed</var> is raised when an application that is compiled
with assertions, encounters an invalid assertion. 
</descr>
<errors>
</errors>
<seealso>
</seealso>
</element>

<!-- object Visibility: default -->
<element name="EPropReadOnly">
<short>Read-only property error.</short>
<descr>
<var>EPropReadOnly</var> is raised when an attempt is made to write to a
read-only property.
</descr>
<link id="EPropWriteOnly"/>
</element>

<!-- object Visibility: default -->
<element name="EPropWriteOnly">
<short>Write-only property error.</short>
<descr>
<var>EPropWriteOnly</var> is raised when an attempt is made to read from a
write-only property.
</descr>
<seealso>
<link id="EPropReadOnly"/>
</seealso>
</element>

<!-- object Visibility: default -->
<element name="EIntfCastError">
<short>Invalid interface cast error.</short>
<descr>
<var>EIntfCastError</var> is raised when an invalid interface cast is
encountered.
</descr>
<seealso>
<link id="EInvalidCast"/>
</seealso>
</element>

<!-- object Visibility: default -->
<element name="EInvalidContainer">
<short>Invalid container error.</short>
<descr>
<var>EInvalidContainer</var> is not yet used by Free Pascal, and is provided
for Delphi compatibility only.
</descr>
</element>

<!-- object Visibility: default -->
<element name="EInvalidInsert">
<short>Invalid insert error.</short>
<descr>
<var>EInvalidInsert</var> is not yet used by Free Pascal, and is provided
for Delphi compatibility only.
</descr>
</element>

<!-- object Visibility: default -->
<element name="EPackageError">
<short>Package error.</short>
<descr>
<var>EPackageError</var> is not yet used by Free Pascal, and is provided
for Delphi compatibility only.
</descr>
</element>

<!-- object Visibility: default -->
<element name="EOSError">
<short>Operating system error.</short>
<descr>
<var>EOSError</var> is raised when some Operating System call fails. The
<link id="EOSError.ErrorCode">ErrorCode</link> property contains the
operating system error code.
</descr>
<seealso>
<link id="EOSError.ErrorCode"/>
</seealso>
</element>

<!-- variable Visibility: public -->
<element name="EOSError.ErrorCode">
<short>Operating system error code.</short>
<descr>
<var>ErrorCode</var> contains the error code reported by the operating
system for the call which caused the <link id="EOSError"/> to be raised.
</descr>
<seealso>
<link id="EOSError"/>
</seealso>
</element>

<!-- object Visibility: default -->
<element name="ESafecallException">
<short>SafeCall exception.</short>
<descr>
<var>ESafecallException</var> is not yet used by Free Pascal, and is provided
for Delphi compatibility only.
</descr>
</element>

<!-- object Visibility: default -->
<element name="ENoThreadSupport">
<short>No Thread support error.</short>
<descr>
<var>ENoThreadSupport</var> is raised when some thread routines are invoked,
and thread support was not enabled when the program was compiled. 
</descr>
</element>

<!-- function Visibility: default -->
<element name="ExceptObject">
<short>Current Exception object.</short>
<descr>
<var>ExceptObject</var> returns the currently treated exception object when
an exception is raised, and the stack is unwound.
</descr>
<errors>
If there is no exception, the function returns <var>Nil</var>
</errors>
<seealso>
<link id="ExceptAddr"/>
<link id="ExceptionErrorMessage"/>
<link id="ShowException"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="ExceptAddr">
<short>Current exception address.</short>
<descr>
<var>ExceptAddr</var> returns the address from the currently treated
exception object when an exception is raised, and the stack is unwound.
</descr>
<seealso>
<link id="ExceptObject"/>
<link id="ExceptionErrorMessage"/>
<link id="ShowException"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="ExceptionErrorMessage">
<short>Return a message describing the exception.</short>
<descr>
<p>
<var>ExceptionErrorMessage</var> creates a string that describes the
exception object <var>ExceptObject</var> at address <var>ExceptAddr</var>.
It can be used to display exception messages. The string will be stored in
the memory pointed to by <var>Buffer</var>, and will at most have
<var>Size</var> characters.
</p>
<p>
The routine checks whether <var>ExceptObject</var> is a <link
id="Exception"/> object or not, and adapts the output accordingly.
</p>
</descr>
<seealso>
<link id="ExceptObject"/>
<link id="ExceptAddr"/>
<link id="ShowException"/>
</seealso>
</element>

<!-- procedure Visibility: default -->
<element name="ShowException">
<short>Show the current exception to the user.</short>
<descr>
<p>
<var>ShowException</var> shows a message stating that a <var>ExceptObject</var>
was raised at address <var>ExceptAddr</var>. It uses <link
id="ExceptionErrorMessage"/> to create the message, and is aware of the fact
whether the application is a console application or a GUI application. For a
console application, the message is written to standard error output. For a
GUI application, <link id="OnShowException"/> is executed.
</p>
</descr>
<errors>
<p>
If, for a GUI application, <link id="OnShowException"/> is not set, no
message will be displayed to the user.
</p>
<p>
The exception message can be at most 255 characters long: It is possible
that no memory can be allocated on the heap, so ansistrings are not
available, so a shortstring is used to display the message.
</p>
</errors>
<seealso>
<link id="ExceptObject"/>
<link id="ExceptAddr"/>
<link id="ExceptionErrorMessage"/>
</seealso>
</element>

<!-- procedure Visibility: default -->
<element name="Abort">
<short>Abort program execution.</short>
<descr>
<var>Abort</var> raises an <link id="EAbort"/> exception.
</descr>
<seealso>
<link id="Abort"/>
</seealso>
</element>

<!-- procedure Visibility: default -->
<element name="OutOfMemoryError">
<short>Raise an <var>EOutOfMemory</var> exception</short>
<descr>
<var>OutOfMemoryError</var> raises an <link id="EOutOfMemory"/> exception,
with an exception object that has been allocated on the heap at program
startup. The program should neved create an <link id="EOutOfMemory"/>
exception, but always call this routine.
</descr>
<seealso>
<link id="EOutOfMemory"/>
</seealso>
</element>

<!-- procedure Visibility: default -->
<element name="Beep">
<short>Sound the system bell.</short>
<descr>
<var>Beep</var> sounds the system bell, if one is available.
</descr>
<errors>
This routine may not be implemented on all platforms.
</errors>
</element>

<!-- function Visibility: default -->
<element name="SysErrorMessage">
<short>Format a system error message.</short>
<descr>
<var>SysErrorMessage</var> returns a string that describes the operating
system error code <var>ErrorCode</var>.
</descr>
<errors>
This routine may not be implemented on all platforms.
</errors>
<seealso>
<link id="EOSError"/>
</seealso>
</element>

<!-- function type Visibility: default -->
<element name="TTerminateProc">
<short>Terminate procedure procedural variable.</short>
<descr>
<var>TTerminateProc</var> is the procedural type which should be used when
adding exit procedures. 
</descr>
<seealso>
<link id="AddTerminateProc"/>
</seealso>
</element>

<!-- procedure Visibility: default -->
<element name="AddTerminateProc">
<short>Add a procedure to the exit chain.</short>
<descr>
<var>AddTerminateProc</var> adds <var>TermProc</var> to the list of exit
procedures. When the program exits, the list of exit procedures is run over,
and all procedures are called one by one, in the reverse order that they
were added to the exit chain.
</descr>
<errors>
If no memory is available on the heap, an exception may be raised.
</errors>
<seealso>
<link id="TTerminateProc"/>
<link id="CallTerminateProcs"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="CallTerminateProcs">
<short>Call the exit chain procedures.</short>
<descr>
<var>CallTerminateProcs</var> is run on program exit. It executes all
terminate procedures that were added to the exit chain with <link
id="AddTerminateProc"/>, and does this in reverse order. 
</descr>
<errors>
If one of the exit procedure raises an exception, it is <em>not</em> caught, 
and the remaining exit procedures will not be executed.
</errors>
<seealso>
<link id="TTerminateProc"/>
<link id="AddTerminateProc"/>
</seealso>
</element>

<!-- variable Visibility: default -->
<element name="OnShowException">
<short>Callback to show unhandled exceptions.</short>
<descr>
<var>OnShowException</var> is the callback that <link id="ShowException"/>
uses to display a message in a GUI application. For GUI applications, this
variable should always be set. Note that no memory may be available when
this callback is called, so the callback should already have all resources 
it needs, when the callback is set.
</descr>
<seealso>
<link id="ShowException"/>
<link id="ExceptionErrorMessage"/>
</seealso>
</element>

<!-- constant Visibility: default -->
<element name="filerecnamelength">
<short>Length of filerec filename field.</short>
<descr>
<var>filerecnamelength</var> describes the length of the <link
id="FileRec"/> filename field.
</descr>
</element>

<!-- record type Visibility: default -->
<element name="FileRec">
<short>Record describing an untyped file.</short>
<descr>
<p>
<var>FileRec</var> describes a untyped file. This record is made available
so it can be used to implement drivers for other than the normal file system
file records.
</p>
</descr>
<seealso>
<link id="TFileRec"/>
<link id="TextRec"/>
<link id="TTextRec"/>
</seealso>
</element>

<!-- variable Visibility: default -->
<element name="FileRec.Handle">
<short>Operating system file handle.</short>
</element>

<!-- variable Visibility: default -->
<element name="FileRec.Mode">
<short>Current file mode.</short>
</element>

<!-- variable Visibility: default -->
<element name="FileRec.RecSize">
<short>Record data size</short>
</element>

<!-- variable Visibility: default -->
<element name="FileRec._private">
<short>Private data. Do not use</short>
</element>

<!-- variable Visibility: default -->
<element name="FileRec.UserData">
<short>User data. Only use when implementing new type.</short>
</element>

<!-- variable Visibility: default -->
<element name="FileRec.name">
<short>File name</short>
</element>

<!-- constant Visibility: default -->
<element name="TextRecNameLength">
<short>Length of text file record filename field </short>
</element>

<!-- constant Visibility: default -->
<element name="TextRecBufSize">
<short>Buffer size of text file record.</short>
<var>TextRecBufSize</var> is the size of the default buffer in <link
id="TextRec"/>
</element>

<!-- array type Visibility: default -->
<element name="TextBuf">
<short>Text record buffer array type</short>
<descr>
<var>TextBuf</var> is the type for the default buffer in <link
id="TextRec"/>
</descr>
</element>

<!-- record type Visibility: default -->
<element name="TextRec">
<short>Record describing a text file type</short>
<descr>
<p>
<var>TextRec</var> describes a text file. This record is made available
so it can be used to implement drivers for other than the normal file system
file records.
</p>
<p>
To implement a driver, an <var>Assign</var> procedure must be implemented,
which fills in the various fields of the record. Most notably, the callback
functions must be filled in appropriately. 
After this, the normal file operations will handle all necessary calls to the
various callbacks.
</p>
</descr>
<seealso>
<link id="TTextRec"/>
<link id="TFileRec"/>
<link id="FileRec"/>
</seealso>
</element>

<!-- variable Visibility: default -->
<element name="TextRec.Handle">
<short>Operating system handle for file.</short>
</element>

<!-- variable Visibility: default -->
<element name="TextRec.Mode">
<short>Open mode</short>
</element>

<!-- variable Visibility: default -->
<element name="TextRec.bufsize">
<short>Size of buffer.</short>
</element>

<!-- variable Visibility: default -->
<element name="TextRec._private">
<short>Private data. Do not use.</short>
</element>

<!-- variable Visibility: default -->
<element name="TextRec.bufpos">
<short>Current buffer position.</short>
</element>

<!-- variable Visibility: default -->
<element name="TextRec.bufend">
<short>Current buffer end.</short>
</element>

<!-- variable Visibility: default -->
<element name="TextRec.bufptr">
<short>Pointer to current buffer.</short>
</element>

<!-- variable Visibility: default -->
<element name="TextRec.openfunc">
<short>File open function. Allocates handle.</short>
</element>

<!-- variable Visibility: default -->
<element name="TextRec.inoutfunc">
<short>Read/write function</short>
</element>

<!-- variable Visibility: default -->
<element name="TextRec.flushfunc">
<short>Flush buffer function</short>
</element>

<!-- variable Visibility: default -->
<element name="TextRec.closefunc">
<short>Close handle function.</short>
</element>

<!-- variable Visibility: default -->
<element name="TextRec.UserData">
<short>User data for text rec.</short>
</element>

<!-- variable Visibility: default -->
<element name="TextRec.name">
<short>File name</short>
</element>

<!-- variable Visibility: default -->
<element name="TextRec.buffer">
<short>Default buffer.</short>
</element>

<!-- constant Visibility: default -->
<element name="HexDisplayPrefix">
<short>String to prepend to hexadecimal values</short>
<descr>
<var>HexDisplayPrefix</var> is used by the formatting routines to indicate
that the number which follows the prefix is in Hexadecimal notation.
</descr>
<errors>
Currently unused in Free Pascal.
</errors>
</element>

<!-- constant Visibility: default -->
<element name="PathDelim">
<short>Path (directory) delimiter.</short>
<descr>
<var>PathDelim</var> refers to the system unit's <var>DirectorySeparator</var>
constant, it is for Delphi compatibility only.
</descr>
<seealso>
<link id="DriveDelim"/>
<link id="PathSep"/>
</seealso>
</element>

<!-- constant Visibility: default -->
<element name="DriveDelim">
<short>Drive letter delimiter</short>
<descr>
<var>DriveDelim</var> refers to the system unit's <var>DriveSeparator</var>
constant, it is for Delphi compatibility only.
</descr>
<seealso>
<link id="PathDelim"/>
<link id="PathSep"/>
</seealso>
</element>

<!-- constant Visibility: default -->
<element name="PathSep">
<short>Path separator. (Separates paths in search path lists)</short>
<descr>
<var>PathSep</var> refers to the system unit's <var>PathSeparator</var>
constant, it is for Delphi compatibility only.
</descr>
<seealso>
<link id="PathDelim"/>
<link id="DriveDelim"/>
</seealso>
</element>

<!-- alias type Visibility: default -->
<element name="TFileRec">
<short>Record describing an untyped file.</short>
<descr>
Alias for <link id="FileRec"/> for Delphi compatibility.
</descr>
</element>

<!-- alias type Visibility: default -->
<element name="TTextRec">
<short>Record describing a text file.</short>
<descr>
Alias for <link id="TextRec"/> for Delphi compatibility.
</descr>
</element>

<!-- array type Visibility: default -->
<element name="TCaseTranslationTable">
<short>Type for case conversion tables.</short>
<descr>
<var>TCaseTranslationTable</var> is the type for a lookup table that can
convert 255 ascii characters.
</descr>
<seealso>
<link id="UpperCaseTable"/>
<link id="LowerCaseTable"/>
</seealso>
</element>

<!-- variable Visibility: default -->
<element name="UpperCaseTable">
<short>Table for conversion of characters to uppercase.</short>
<descr>
<var>UpperCaseTable</var> is used by the <link id="UpperCase"/> routine (and
friends) to convert a string to all-uppercase characters. It is filled with
the appropriate entries by the <file>SysUtils</file> unit initialization routines.
</descr>
<seealso>
<link id="TCaseTranslationTable"/>
<link id="LowerCaseTable"/>
<link id="UpperCase"/>
</seealso>
</element>

<!-- variable Visibility: default -->
<element name="LowerCaseTable">
<short>Table for conversion of characters to lowercase.</short>
<descr>
<var>LowerCaseTable</var> is used by the <link id="LowerCase"/> routine (and
friends) to convert a string to all-lowercase characters. It is filled with
the appropriate entries by the <file>SysUtils</file> unit initialization
routines.
</descr>
<seealso>
<link id="TCaseTranslationTable"/>
<link id="UpperCaseTable"/>
<link id="LowerCase"/>
</seealso>
</element>

<!-- constant Visibility: default -->
<element name="DateSeparator">
<short>Date separator character (subject to locale).</short>
<descr>
<var>DateSeparator</var> is the character used by various date/time
conversion routines as the character that separates the day from the month
and the month from the year in a date notation. It is used by the date
formatting routines. This constant is initialized by the
initialization routines of the <file>SysUtils</file> unit.
</descr>
<seealso>
<link id="LongDateFormat"/>
<link id="FormatDateTime"/>
<link id="DateSeparator"/>
</seealso>
</element>

<!-- constant Visibility: default -->
<element name="ShortDateFormat">
<short>Short Date Format string (subject to locale).</short>
<descr>
<var>ShortDateFormat</var> contains a template to format a date in a short
format. It is used by the date formatting routines.
This constant is initialized by the initialization routines of the <file>SysUtils</file> unit.
</descr>
<seealso>
<link id="LongDateFormat"/>
<link id="FormatDateTime"/>
<link id="DateSeparator"/>
</seealso>
</element>

<!-- constant Visibility: default -->
<element name="LongDateFormat">
<short>Long date format string (subject to locale).</short>
<descr>
<var>LongDateFormat</var> contains a template to format a date in a long
format. It is used by the date formatting routines.
This constant is initialized by the initialization routines of the <file>SysUtils</file> unit.
</descr>
<seealso>
<link id="ShortDateFormat"/>
<link id="FormatDateTime"/>
<link id="DateSeparator"/>
</seealso>
</element>

<!-- constant Visibility: default -->
<element name="ShortMonthNames">
<short>Names of months, abbreviated form.</short>
<descr>
<var>ShortMonthNames</var> is an array with the abbreviated names of months.
It is used by the date formatting routines.
This constant is initialized by the initialization routines of the <file>SysUtils</file> unit.
</descr>
<seealso>
<link id="ShortDateFormat"/>
<link id="FormatDateTime"/>
<link id="LongMonthNames"/>
<link id="ShortDayNames"/>
</seealso>
</element>

<!-- constant Visibility: default -->
<element name="LongMonthNames">
<short>Full names of months.</short>
<descr>
<var>LongMonthNames</var> is an array with the full names of months.
It is used by the date formatting routines.
This constant is initialized by the initialization routines of the <file>SysUtils</file> unit.
</descr>
<seealso>
<link id="ShortDateFormat"/>
<link id="FormatDateTime"/>
<link id="ShortMonthNames"/>
</seealso>
</element>

<!-- constant Visibility: default -->
<element name="ShortDayNames">
<short>Names of days, abbreviated form.</short>
<descr>
<var>ShortDayNames</var> is an array with the abbreviated names of days.
It is used by the date formatting routines.
This constant is initialized by the initialization routines of the <file>SysUtils</file> unit.
</descr>
<seealso>
<link id="ShortDateFormat"/>
<link id="FormatDateTime"/>
<link id="LongDayNames"/>
<link id="ShortMonthNames"/>
</seealso>
</element>

<!-- constant Visibility: default -->
<element name="LongDayNames">
<short>Full names of days.</short>
<descr>
<var>LongDayNames</var> is an array with the full names of days.
It is used by the date formatting routines.
This constant is initialized by the initialization routines of the <file>SysUtils</file> unit.
</descr>
<seealso>
<link id="ShortDateFormat"/>
<link id="FormatDateTime"/>
<link id="ShortDayNames"/>
<link id="ShortMonthNames"/>
</seealso>
</element>

<!-- constant Visibility: default -->
<element name="ShortTimeFormat">
<short>Short time format string (subject to locale).</short>
<descr>
<var>ShortTimeFormat</var> contains a template to format a time in a short
notation. It is used by the time formatting routines.
This constant is initialized by the initialization routines of the <file>SysUtils</file> unit.
</descr>
<seealso>
<link id="LongTimeFormat"/>
<link id="FormatDateTime"/>
<link id="TimeSeparator"/>
</seealso>
</element>

<!-- constant Visibility: default -->
<element name="LongTimeFormat">
<short>Long time format string (subject to locale)</short>
<descr>
<var>LongTimeFormat</var> contains a template to format a time in full
notation. It is used by the time formatting routines.
This constant is initialized by the initialization routines of the <file>SysUtils</file> unit.
</descr>
<seealso>
<link id="ShortTimeFormat"/>
<link id="FormatDateTime"/>
<link id="TimeSeparator"/>
</seealso>
</element>

<!-- constant Visibility: default -->
<element name="TimeSeparator">
<short>Time separator character.</short>
<descr>
<var>TimeSeparator</var> is used by the time formatting routines to separate
the hours from the minutes and the minutes from the seconds.
It is used by the time formatting routines.
This constant is initialized by the initialization routines of the <file>SysUtils</file> unit.
</descr>
<seealso>
<link id="ShortTimeFormat"/>
<link id="FormatDateTime"/>
<link id="LongTimeFormat"/>
<link id="TimeAMString"/>
<link id="TimePMString"/>
</seealso>
</element>

<!-- constant Visibility: default -->
<element name="TimeAMString">
<short>AM indicator string.</short>
<descr>
<var>TimeAMString</var> is used to display the AM symbol in the time
formatting routines.
It is used by the time formatting routines.
This constant is initialized by the initialization routines of the <file>SysUtils</file> unit.</descr>
<errors>
</errors>
<seealso>
<link id="ShortTimeFormat"/>
<link id="FormatDateTime"/>
<link id="LongTimeFormat"/>
<link id="TimePMString"/>
</seealso>
</element>

<!-- constant Visibility: default -->
<element name="TimePMString">
<short>PM indicator string.</short>
<descr>
<var>TimePMString</var> is used to display the PM symbol in the time
formatting routines.
It is used by the time formatting routines.
This constant is initialized by the initialization routines of the <file>SysUtils</file> unit.
</descr>
<seealso>
<link id="ShortTimeFormat"/>
<link id="FormatDateTime"/>
<link id="LongTimeFormat"/>
<link id="TimeAMString"/>
</seealso>
</element>

<!-- constant Visibility: default -->
<element name="DecimalSeparator">
<short>Decimal point separator.</short>
<descr>
<var>DecimalSeparator</var> is used to display the decimal symbol in
floating point numbers or currencies.
It is used by the float formatting routines.
This constant is initialized by the initialization routines of the
<file>SysUtils</file> unit.
</descr>
<seealso>
<link id="ThousandSeparator"/>
<link id="Format"/>
<link id="FormatFloat"/>
<link id="FloatToStr"/>
</seealso>
</element>

<!-- constant Visibility: default -->
<element name="ThousandSeparator">
<short>Thousand grouping character.</short>
<descr>
<var>ThousandSeparator</var> is used to separate groups of thousands in 
floating point numbers or currencies. It is used by the float formatting routines.
This constant is initialized by the initialization routines of the
<file>SysUtils</file> unit.
</descr>
<seealso>
<link id="DecimalSeparator"/>
<link id="Format"/>
<link id="FormatFloat"/>
<link id="FloatToStr"/>
</seealso>
</element>

<!-- constant Visibility: default -->
<element name="CurrencyDecimals">
<short>Number of decimals in currency amounts.</short>
<descr>
<var>CurrencyDecimals</var> is the number of decimals to be used when
formatting a currency. It is used by the float formatting routines.
This constant is initialized by the initialization routines of the
<file>SysUtils</file> unit.
</descr>
<seealso>
<link id="Format"/>
<link id="DecimalSeparator"/>
</seealso>
</element>

<!-- constant Visibility: default -->
<element name="CurrencyFormat">
<short>Format string for currencies.</short>
<descr>
<var>CurrencyFormat</var> is the default format string for positive currencies.
It is used by the float formatting routines.
This constant is initialized by the initialization routines of the
<file>SysUtils</file> unit.
</descr>
<seealso>
<link id="CurrencyDecimals"/>
<link id="NegCurrFormat"/>
<link id="CurrencyString"/>
<link id="Format"/>
<link id="FloatToText"/>
</seealso>
</element>

<!-- constant Visibility: default -->
<element name="NegCurrFormat">
<short>Format string for negative currencies.</short>
<descr>
<var>CurrencyFormat</var> is the default format string for negative currencies.
It is used by the float formatting routines.
This constant is initialized by the initialization routines of the
<file>SysUtils</file> unit.
</descr>
<seealso>
<link id="CurrencyDecimals"/>
<link id="CurrencyFormat"/>
<link id="CurrencyString"/>
<link id="Format"/>
<link id="FloatToText"/>
</seealso>
</element>

<!-- constant Visibility: default -->
<element name="CurrencyString">
<short>Name of currency.</short>
<descr>
<var>CurrencyString</var> is the currency symbol for the current locale.
It is used by the float formatting routines.
This constant is initialized by the initialization routines of the
<file>SysUtils</file> unit.
</descr>
<seealso>
<link id="CurrencyDecimals"/>
<link id="NegCurrFormat"/>
<link id="CurrencyFormat"/>
<link id="Format"/>
<link id="FloatToText"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="strlen">
<short>Length of a null-terminated string.</short>
<descr>
Returns the length of the null-terminated string <var>P</var>.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="StrNew"/>
</seealso>
<example file="stringex/ex1"/>
</element>

<!-- function Visibility: default -->
<element name="strcopy">
<short>Copy a null-terminated string</short>
<descr>
Copy the null terminated string in <var>Source</var> to <var>Dest</var>, and
returns a pointer to <var>Dest</var>. <var>Dest</var> needs enough room to contain
<var>Source</var>, i.e. <var>StrLen(Source)+1</var> bytes.
</descr>
<errors>
No length checking is performed.
</errors>
<seealso>
<link id="StrPCopy"/>
<link id="StrLCopy"/>
<link id="StrECopy"/>
</seealso>
<example file="stringex/ex4"/>
</element>

<!-- function Visibility: default -->
<element name="strlcopy">
<short>Copy a null-terminated string, limited in length.</short>
<descr>
Copies <var>MaxLen</var> characters from <var>Source</var> to <var>Dest</var>, and makes
<var>Dest</var> a null terminated string. 
</descr>
<errors>
No length checking is performed.
</errors>
<seealso>
<link id="StrCopy"/>
<link id="StrECopy"/>
</seealso>
<example file="stringex/ex5"/>
</element>

<!-- function Visibility: default -->
<element name="strecopy">
<short>Copy a null-terminated string, return a pointer to the end.</short>
<descr>
Copies the Null-terminated string in <var>Source</var> to <var>Dest</var>, and
returns a pointer to the end (i.e. the terminating Null-character) of the
copied string.
</descr>
<errors>
No length checking is performed.
</errors>
<seealso>
<link id="StrLCopy"/>
<link id="StrCopy"/>
</seealso>
<example file="stringex/ex6"/>
</element>

<!-- function Visibility: default -->
<element name="strend">
<short>Return a pointer to the end of a null-terminated string</short>
<descr>
Returns a pointer to the end of <var>P</var>. (i.e. to the terminating
null-character.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="StrLen"/>
</seealso>
<example file="stringex/ex7"/>
</element>

<!-- function Visibility: default -->
<element name="strcat">
<short>Concatenate 2 null-terminated strings.</short>
<descr>
Attaches <var>Source</var> to <var>Dest</var> and returns <var>Dest</var>.
</descr>
<errors>
No length checking is performed.
</errors>
<seealso>
<link id="StrLCat"/>
</seealso>
<example file="stringex/ex11"/>
</element>

<!-- function Visibility: default -->
<element name="strcomp">
<short>Compare 2 null-terminated strings, case sensitive.</short>
<descr>
<p>
Compares the null-terminated strings <var>S1</var> and <var>S2</var>.
The result is 
</p>
<ul>
<li> A negative <var>Longint</var> when <var>S1&lt;S2</var>.
</li>
<li> 0 when <var>S1=S2</var>.
</li>
<li> A positive <var>Longint</var> when <var>S1&gt;S2</var>.
</li>
</ul>
<p>
For an example, see <link id="StrLComp"/>.
</p>
</descr>
<errors>
None.
</errors>
<seealso>
<link id="StrLComp"/>
<link id="StrIComp"/>
<link id="StrLIComp"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="strlcomp">
<short>Compare limited number of characters of 2 null-terminated strings </short>
<descr>
<p>
Compares maximum <var>L</var> characters of the null-terminated strings 
<var>S1</var> and <var>S2</var>. 
The result is 
</p>
<ul>
<li> A negative <var>Longint</var> when <var>S1&lt;S2</var>.
</li>
<li> 0 when <var>S1=S2</var>.
</li>
<li> A positive <var>Longint</var> when <var>S1&gt;S2</var>.
</li>
</ul>
</descr>
<errors>
None.
</errors>
<seealso>
<link id="StrComp"/>
<link id="StrIComp"/>
<link id="StrLIComp"/>
</seealso>
<example file="stringex/ex8"/>
</element>

<!-- function Visibility: default -->
<element name="stricomp">
<short>Compare 2 null-terminated strings, case insensitive.</short>
<descr>
<p>
Compares the null-terminated strings <var>S1</var> and <var>S2</var>, ignoring case.
The result is 
</p>
<ul>
<li> A negative <var>Longint</var> when <var>S1&lt;S2</var>.
</li>
<li> 0 when <var>S1=S2</var>.
</li>
<li> A positive <var>Longint</var> when <var>S1&gt;S2</var>.
</li>
</ul>
</descr>
<errors>
None.
</errors>
<seealso>
<link id="StrLComp"/>
<link id="StrComp"/>
<link id="StrLIComp"/>
</seealso>
<example file="stringex/ex8"/>
</element>

<!-- function Visibility: default -->
<element name="strmove">
<short>Move a null-terminated string to new location.</short>
<descr>
Copies <var>MaxLen</var> characters from <var>Source</var> to <var>Dest</var>. No
terminating null-character is copied.
Returns <var>Dest</var>
</descr>
<errors>
None.
</errors>
<seealso>
<link id="StrLCopy"/>
<link id="StrCopy"/>
</seealso>
<example file="stringex/ex10"/>
</element>

<!-- function Visibility: default -->
<element name="strlcat">
<short>Concatenate 2 null-terminated strings, with length boundary.</short>
<descr>
Adds <var>MaxLen</var> characters from <var>Source</var> to <var>Dest</var>, and adds a
terminating null-character. Returns <var>Dest</var>.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="StrCat"/>
</seealso>
<example file="stringex/ex12"/>
</element>

<!-- function Visibility: default -->
<element name="strscan">
<short>Find first occurrence of a character in a null-terminated string.</short>
<descr>
Returns a pointer to the first occurrence of the character <var>C</var> in the
null-terminated string <var>P</var>. If <var>C</var> does not occur, returns
<var>Nil</var>.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="StrRScan"/>
<link id="StrPos"/>
</seealso>
<example file="stringex/ex13"/>
</element>

<!-- function Visibility: default -->
<element name="strrscan">
<short>Find last occurrence of a character in a null-terminated string.</short>
<descr>
<p>
Returns a pointer to the last occurrence of the character <var>C</var> in the
null-terminated string <var>P</var>. If <var>C</var> does not occur, returns
<var>Nil</var>.
</p>
<p>
For an example, see <link id="StrScan"/>.
</p>
</descr>
<errors>
None.
</errors>
<seealso>
<link id="StrScan"/>
<link id="StrPos"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="strlower">
<short>Convert null-terminated string to all-lowercase.</short>
<descr>
Converts <var>P</var> to an all-lowercase string. Returns <var>P</var>.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="StrUpper"/>
</seealso>
<example file="stringex/ex14"/>
</element>

<!-- function Visibility: default -->
<element name="strupper">
<short>Convert null-terminated string to all-uppercase</short>
<descr>
<p>
Converts <var>P</var> to an all-uppercase string. Returns <var>P</var>.
</p>
<p>
For an example, see <link id="StrLower"/>
</p>
</descr>
<errors>
None.
</errors>
<seealso>
<link id="StrLower"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="strlicomp">
<short>Compare limited number of characters in 2 null-terminated strings,
ignoring case.</short>
<descr>
<p>
Compares maximum <var>L</var> characters of the null-terminated strings <var>S1</var> 
and <var>S2</var>, ignoring case.
The result is 
</p>
<ul>
<li> A negative <var>Longint</var> when <var>S1&lt;S2</var>.
</li>
<li> 0 when <var>S1=S2</var>.
</li>
<li> A positive <var>Longint</var> when <var>S1&gt;S2</var>.
</li>
</ul>
<p>
For an example, see <link id="StrIComp"/>
</p>
</descr>
<errors>
None.
</errors>
<seealso>
<link id="StrLComp"/>
<link id="StrComp"/>
<link id="StrIComp"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="strpos">
<short>Find position of one null-terminated substring in another.</short>
<descr>
Returns a pointer to the first occurrence of <var>S2</var> in <var>S1</var>.
If <var>S2</var> does not occur in <var>S1</var>, returns <var>Nil</var>.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="StrScan"/>
<link id="StrRScan"/>
</seealso>
<example file="stringex/ex15"/>
</element>

<!-- function Visibility: default -->
<element name="strnew">
<short>Allocate room for new null-terminated string.</short>
<descr>
Copies <var>P</var> to the Heap, and returns a pointer to the copy.
</descr>
<errors>
Returns <var>Nil</var> if no memory was available for the copy.
</errors>
<seealso>
<link id="StrCopy"/>
<link id="StrDispose"/>
</seealso>
<example file="stringex/ex16"/>
</element>

<!-- function Visibility: default -->
<element name="AnsiCompareFileName">
<short>Compare 2 filenames.</short>
<descr>
<p>
<var>AnsiCompareFileName</var> compares 2 filenames <var>S1</var> and
<var>S2</var>, and returns
</p>
<dl>
<dt>&lt; 0</dt>
<dd>if <var>S1</var>&lt;<var>S2</var>. </dd>
<dt>= 0</dt> <dd>if <var>S1=S2</var>. </dd>
<dt>&gt; 0</dt>
<dd>if <var>S1</var>&gt;<var>S2</var>. </dd>
</dl>
<p>
The function actually checks <var>FileNameCaseSensitive</var> and returns
the result of <link id="AnsiCompareStr"/> or <link id="AnsiCompareText"/> 
depending on whether <var>FileNameCaseSensitive</var> is <var>True</var> or
<var>False</var>
</p>
</descr>
<errors>
None.
</errors>
<seealso>
<link id="AnsiCompareStr"/>
<link id="AnsiCompareText"/>
<link id="AnsiLowerCaseFileName"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="AnsiLowerCaseFileName">
<short>Convert filename to lowercase.</short>
<descr>
<p>
<var>AnsiLowerCaseFileName</var> simply returns the result of 
</p>
<code>
AnsiLowerCase(S);
</code>
</descr>
<seealso>
<link id="AnsiLowerCase"/>
<link id="AnsiCompareFileName"/>
<link id="AnsiUpperCaseFileName"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="AnsiUpperCaseFileName">
<short>Convert filename to uppercase.</short>
<descr>
<p>
<var>AnsiUpperCaseFileName</var> simply returns the result of
</p>
<code>
AnsiUpperCase(S);
</code>
</descr>
<seealso>
<link id="AnsiUpperCase"/>
<link id="AnsiCompareFileName"/>
<link id="AnsiLowerCaseFileName"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="AnsiPos">
<short>Return Position of one ansistring in another.</short>
<descr>
<var>AnsiPos</var> does the same as the standard <var>Pos</var> function.
</descr>
<seealso>
<link id="AnsiStrPos"/>
<link id="AnsiStrScan"/>
<link id="AnsiStrRScan"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="AnsiStrPos">
<short>Return position of one null-terminated substring in another</short>
<descr>
<var>AnsiStrPos</var> returns a pointer to the first occurrence of
<var>SubStr</var> in <var>Str</var>. If <var>SubStr</var> does not occur in
<var>Str</var> then <var>Nil</var> is returned.
</descr>
<errors>
An access violation may occur if either <var>Str</var> or <var>SubStr</var>
point to invalid memory.
</errors>
<seealso>
<link id="AnsiPos"/>
<link id="AnsiStrScan"/>
<link id="AnsiStrRScan"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="AnsiStrRScan">
<short>Find last occurrence of a character in a null-terminated string.</short>
<descr>
<var>AnsiStrPos</var> returns a pointer to the <em>last</em> occurrence of
the character <var>Chr</var> in <var>Str</var>. If <var>Chr</var> does not occur in
<var>Str</var> then <var>Nil</var> is returned.
</descr>
<errors>
An access violation may occur if <var>Str</var> points to invalid memory.
</errors>
<seealso>
<link id="AnsiPos"/>
<link id="AnsiStrScan"/>
<link id="AnsiStrPos"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="AnsiStrScan">
<short>Find first occurrence of a character in a null-terminated string.</short>
<descr>
<var>AnsiStrPos</var> returns a pointer to the <em>first</em> occurrence of
the character <var>Chr</var> in <var>Str</var>. If <var>Chr</var> does not occur in
<var>Str</var> then <var>Nil</var> is returned.
</descr>
<errors>
An access violation may occur if <var>Str</var> points to invalid memory.
</errors>
<seealso>
<link id="AnsiPos"/>
<link id="AnsiStrScan"/>
<link id="AnsiStrPos"/>
</seealso>
</element>

<!-- constant Visibility: default -->
<element name="DirSeparators">
<short>Characters that are known directory separators.</short>
<descr>
<var>DirSeparators</var> is a set of characters which are known directory
separator characters on all supported platforms. This set is used by the
<link id="SetDirSeparators"/> call to correct pathnames for the current
platform.
</descr>
<seealso>
<link id="DoDirSeparators"/>
<link id="SetDirSeparators"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="IncludeTrailingPathDelimiter">
<short>Add trailing directory separator to a pathname, if needed.</short>
<descr>
<var>IncludeTrailingPathDelimiter</var> adds a trailing path delimiter
character (<link id="PathDelim"/>) to <var>Path</var> if none is present
yet, and returns the result. If <var>Path</var> is empty, nothing is added.
</descr>
<seealso>
<link id="IncludeTrailingBackslash"/>
<link id="ExcludeTrailingPathDelimiter"/>
<link id="PathDelim"/>
<link id="IsPathDelimiter"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="IncludeTrailingBackslash">
<short>Add trailing directory separator to a pathname, if needed.</short>
<descr>
<var>IncludeTrailingBackslash</var> is provided for backwards compatibility
with Delphi. Use <link id="IncludeTrailingPathDelimiter"/> instead.
</descr>
<seealso>
<link id="IncludeTrailingPathDelimiter"/>
<link id="ExcludeTrailingPathDelimiter"/>
<link id="PathDelim"/>
<link id="IsPathDelimiter"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="ExcludeTrailingPathDelimiter">
<short>Strip trailing directory separator from a pathname, if needed.</short>
<descr>
<var>ExcludeTrailingPathDelimiter</var> removes the trailing path delimiter
character (<link id="PathDelim"/>) from <var>Path</var> if it is present,
and returns the result. 
</descr>
<seealso>
<link id="ExcludeTrailingBackslash"/>
<link id="IncludeTrailingPathDelimiter"/>
<link id="PathDelim"/>
<link id="IsPathDelimiter"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="ExcludeTrailingBackSlash">
<short>Strip trailing directory separator from a pathname, if needed.</short>
<descr>
<var>ExcludeTrailingBackslash</var> is provided for backwards compatibility
with Delphi. Use <link id="ExcludeTrailingPathDelimiter"/> instead.
</descr>
<seealso>
<link id="IncludeTrailingPathDelimiter"/>
<link id="ExcludeTrailingPathDelimiter"/>
<link id="PathDelim"/>
<link id="IsPathDelimiter"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="IsPathDelimiter">
<short>Is the character at the given position a pathdelimiter ?</short>
<descr>
<var>IsPathDelimiter</var> returns <var>True</var> if the character at
position <var>Index</var> equals <link id="PathDelim"/>, i.e. if it is a
path delimiter character for the current platform.
</descr>
<errors>
<link id="IncludeTrailingPathDelimiter"/>
<link id="ExcludeTrailingPathDelimiter"/>
<link id="PathDelim"/>
</errors>
<seealso>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="SameFileName">
<short>Are two filenames referring to the same file ?</short>
<descr>
<var>SameFileName</var> returns <var>True</var> if calling <link
id="AnsiCompareFileName"/> with arguments <var>S1</var> and <var>S2</var>
returns 0, and returns <var>False</var> otherwise.
</descr>
<errors>
None.
</errors>
<seealso>
<link id="AnsiCompareFileName"/>
</seealso>
</element>

<!-- record type Visibility: default -->
<element name="TSearchRec">
<short>Record describing a search handle or result </short>
<descr>
<p>
<var>TSearchRec</var> is a search handle description record. It is
initialized by a call to <link id="FindFirst"/> and can be used to do
subsequent calls to <link id="FindNext"/>. It contains the result of these
function calls. It must be used to close the search sequence with a call to
<link id="FindClose"/>. 
</p>
<remark>
Not all fields of this record should be used. Some of the fields are for
internal use only.
</remark>
</descr>
<seealso>
<link id="FindFirst"/>
<link id="FindNext"/>
<link id="FindClose"/>
</seealso>
</element>

<!-- variable Visibility: default -->
<element name="TSearchRec.Time">
<short>Timestamp of the file.</short>
</element>

<!-- variable Visibility: default -->
<element name="TSearchRec.Size">
<short>Size of the file.</short>
</element>

<!-- variable Visibility: default -->
<element name="TSearchRec.Attr">
<short>Attributes of the file.</short>
</element>

<!-- variable Visibility: default -->
<element name="TSearchRec.Name">
<short>File name (no directory part)</short>
</element>

<!-- variable Visibility: default -->
<element name="TSearchRec.ExcludeAttr">
<short>Attributes to exclude from search (do not use).</short>
</element>

<!-- variable Visibility: default -->
<element name="TSearchRec.FindHandle">
<short>Internal OS handle (do not use).</short>
</element>

<!-- constant Visibility: default -->
<element name="faReadOnly">
<short>Read-Only file.</short>
<descr>
Attribute of a file, meaning the file is read-only. 
Used in <link id="TSearchRec"/> and <link id="FindFirst"/>
</descr>
<seealso>
<link id="TSearchRec"/>
<link id="FindFirst"/>
</seealso>
</element>

<!-- constant Visibility: default -->
<element name="faHidden">
<short>Hidden file.</short>
<descr>Attribute of a file, meaning the file is hidden. On unix, this means
the filename starts with a dot character.</descr>
<descr>
Attribute of a file, meaning the file is read-only. 
Used in <link id="TSearchRec"/> and <link id="FindFirst"/>
</descr>
<seealso>
<link id="TSearchRec"/>
<link id="FindFirst"/>
</seealso>
</element>

<!-- constant Visibility: default -->
<element name="faSysFile">
<short>System file (Dos/Windows only)</short>
<descr>
Attribute of a file, meaning the file is a system file. 
Used in <link id="TSearchRec"/> and <link id="FindFirst"/>
</descr>
<seealso>
<link id="TSearchRec"/>
<link id="FindFirst"/>
</seealso>
</element>

<!-- constant Visibility: default -->
<element name="faVolumeId">
<short>Volume id (Dos/Windows only)</short>
<descr>
Attribute of a file, meaning the file contains the volume ID. 
Used in <link id="TSearchRec"/> and <link id="FindFirst"/>
</descr>
<seealso>
<link id="TSearchRec"/>
<link id="FindFirst"/>
</seealso>
</element>

<!-- constant Visibility: default -->
<element name="faDirectory">
<short>File is a directory</short>
<descr>
Attribute of a file, meaning the file is a directory. 
Used in <link id="TSearchRec"/> and <link id="FindFirst"/>
</descr>
<seealso>
<link id="TSearchRec"/>
<link id="FindFirst"/>
</seealso>
</element>

<!-- constant Visibility: default -->
<element name="faArchive">
<short>Archive bit is set</short>
<descr>
Attribute of a file, meaning the file has the archive bit set.
Used in <link id="TSearchRec"/> and <link id="FindFirst"/>
</descr>
<seealso>
<link id="TSearchRec"/>
<link id="FindFirst"/>
</seealso>
</element>

<!-- constant Visibility: default -->
<element name="faAnyFile">
<short>Match any file</short>
<descr>
Use this attribute in the <link id="FindFirst"/> call to find all matching
files.
</descr>
<seealso>
<link id="FindFirst"/>
</seealso>
</element>

<!-- constant Visibility: default -->
<element name="fmOpenRead">
<short>Open file in read-only mode</short>
<descr>
<var>fmOpenRead</var> is used in the <link id="FileOpen"/> call to open a
file in read-only mode.
</descr>
<seealso>
<link id="FileOpen"/>
</seealso>
</element>

<!-- constant Visibility: default -->
<element name="fmOpenWrite">
<short>Open file in write-only mode</short>
<descr>
<var>fmOpenWrite</var> is used in the <link id="FileOpen"/> call to open a
file in write-only mode.
</descr>
<seealso>
<link id="FileOpen"/>
</seealso>
</element>

<!-- constant Visibility: default -->
<element name="fmOpenReadWrite">
<short>Open file in read/write mode.</short>
<descr>
<var>fmOpenReadWrite</var> is used in the <link id="FileOpen"/> call to open a
file in read-write mode.
</descr>
<seealso>
<link id="FileOpen"/>
</seealso>
</element>

<!-- constant Visibility: default -->
<element name="fmShareCompat">
<short>Open file in DOS share-compatibility mode</short>
<descr>
<var>fmOpenShareCompat</var> is used in the <link id="FileOpen"/> call
OR-ed together with one of <link id="fmOpenReadWrite"/>, <link
id="fmOpenRead"/> or <link id="fmOpenWrite"/>,to open a
file in a sharing modus that is equivalent to sharing implemented in MS-DOS.
</descr>
<seealso>
<link id="FileOpen"/>
</seealso>
</element>

<!-- constant Visibility: default -->
<element name="fmShareExclusive">
<short>Lock file for exclusive use</short>
<descr>
<var>fmOpenShareExclusive</var> is used in the <link id="FileOpen"/> call
OR-ed together with one of <link id="fmOpenReadWrite"/>, <link
id="fmOpenRead"/> or <link id="fmOpenWrite"/>, to open a
file exclusively.
</descr>
<seealso>
<link id="FileOpen"/>
</seealso>
</element>

<!-- constant Visibility: default -->
<element name="fmShareDenyWrite">
<short>Lock file so other processes can only read.</short>
<descr>
<var>fmOpenShareExclusive</var> is used in the <link id="FileOpen"/> call
OR-ed together with one of <link id="fmOpenReadWrite"/>, <link
id="fmOpenRead"/> or <link id="fmOpenWrite"/>, to open a
file exclusively.
</descr>
<seealso>
<link id="FileOpen"/>
</seealso>
</element>

<!-- constant Visibility: default -->
<element name="fmShareDenyRead">
<short>Lock file so other processes cannot read.</short>
<descr>
<var>fmOpenShareExclusive</var> is used in the <link id="FileOpen"/> call
OR-ed together with one of <link id="fmOpenReadWrite"/>, <link
id="fmOpenRead"/> or <link id="fmOpenWrite"/>, to open a
file so other processes cannot read from it.
</descr>
<seealso>
<link id="FileOpen"/>
</seealso>
</element>

<!-- constant Visibility: default -->
<element name="fmShareDenyNone">
<short>Do not lock file.</short>
<descr>
<var>fmOpenShareExclusive</var> is used in the <link id="FileOpen"/> call
OR-ed together with one of <link id="fmOpenReadWrite"/>, <link
id="fmOpenRead"/> or <link id="fmOpenWrite"/>, to open a
file so other processes can read/write the file as well.
</descr>
<seealso>
<link id="FileOpen"/>
</seealso>
</element>

<!-- constant Visibility: default -->
<element name="fsFromBeginning">
<short>Start seek operation from beginning of file.</short>
<descr>
<var>fsFromBeginning</var> is used to indicate in the <link id="FileSeek"/>
call that a seek operation should be started at the start of the file.
</descr>
<seealso>
<link id="FileSeek"/>
</seealso>
</element>

<!-- constant Visibility: default -->
<element name="fsFromCurrent">
<short>Start seek operation from current position in file.</short>
<descr>
<var>fsFromBeginning</var> is used to indicate in the <link id="FileSeek"/>
call that a seek operation should be started at the current position in the file.
</descr>
<seealso>
<link id="FileSeek"/>
</seealso>
</element>

<!-- constant Visibility: default -->
<element name="fsFromEnd">
<short>Start seek operation from end of file.</short>
<descr>
<var>fsFromBeginning</var> is used to indicate in the <link id="FileSeek"/>
call that a seek operation should be started at the last position in the file.
</descr>
<seealso>
<link id="FileSeek"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="DirectoryExists">
<short>Check whether a directory exists in the file system.</short>
<descr>
<var>DirectoryExists</var> checks whether <var>Directory</var> exists in the
filesystem and is actually a directory. If this is the case, the function
returns <var>True</var>, otherwise <var>False</var> is returned.
</descr>
<seealso>
<link id="FileExists"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="FileIsReadOnly">
<short>Check whether a file is read-only.</short>
<descr>
<var>FileIsReadOnly</var> checks whether <var>FileName</var> exists in the
filesystem and is a read-only file. If this is the case, the function
returns <var>True</var>, otherwise <var>False</var> is returned.
</descr>
<seealso>
<link id="FileExists"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="GetFileHandle">
<short>Extract OS handle from an untyped file or text file.</short>
<descr>
<var>GetFileHandle</var> returns the operating system handle for the file
descriptor <var>F</var>. It can be used in various file operations which are
not directly supported by the pascal language.
</descr>
</element>

<!-- function Visibility: default -->
<element name="InterLockedIncrement">
<short>Thread-safe integer increment.</short>
<descr>
<var>InterlockedIncrement</var> increments <var>Target</var> in a
thread-safe way, and returns the new value of <var>Target</var>
</descr>
<seealso>
<link id="InterlockedDecrement"/>
<link id="InterlockedExchange"/>
<link id="InterlockedExchangeAdd"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="InterLockedDecrement">
<short>Thread-safe integer decrement</short>
<descr>
<var>InterlockedDecrement</var> decrements <var>Target</var> in a
thread-safe way, and returns the new value of <var>Target</var>
</descr>
<seealso>
<link id="InterlockedIncrement"/>
<link id="InterlockedExchange"/>
<link id="InterlockedExchangeAdd"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="InterLockedExchange">
<short>Thread-safe exchange of 2 values.</short>
<descr>
<var>InterlockedDecrement</var> replaces <var>Target</var> with
<var>Source</var> in a thread-safe way, and returns the old value 
of <var>Target</var>
</descr>
<seealso>
<link id="InterlockedIncrement"/>
<link id="InterlockedDecrement"/>
<link id="InterlockedExchange"/>
<link id="InterlockedExchangeAdd"/>
</seealso>
</element>

<!-- function Visibility: default -->
<element name="InterLockedExchangeAdd">
<short>Thread-safe exchange of 2 values</short>
<descr>
<var>InterlockedDecrement</var> adds to <var>Target</var> the value of 
<var>Source</var> in a thread-safe way, and returns the old value 
of <var>Target</var>
</descr>
<seealso>
<link id="InterlockedIncrement"/>
<link id="InterlockedDecrement"/>
<link id="InterlockedExchange"/>
</seealso>
</element>

<!-- procedure Visibility: default -->
<element name="FreeAndNil">
<short>Free object if needed, and set object reference to <var>Nil</var></short>
<descr>
<var>FreeAndNil</var> will free the object in <var>Obj</var> and will
set the reference in <var>Obj</var> to <var>Nil</var>. The reference is set
to <var>Nil</var> first, so if an exception occurs in the destructor of the
object, the reference will be <var>Nil</var> anyway.
</descr>
<errors>
Exceptions that occur during the destruction of <var>Obj</var> are not
caught.
</errors>
</element>

<element name="GetTempDir">
<short>Return name of system's temporary directory</short>
<descr>
<p>
<var>GetTempDir</var> returns the temporary directory of the system. If
<var>Global</var> is <var>True</var> (the default value) it returns the 
system temporary directory, if it is <var>False</var> then a directory 
private to the user is returned. The returned name will end with a 
directory delimiter character.
</p>
<p>
These directories may be the same. No guarantee is made that this directory
exists or is writeable by the user.
</p>
<p>
The <link id="OnGetTempDir"/> handler may be set to provide custom handling
of this routine: One could implement callbacks which take into consideration 
frameworks like KDE or GNOME, and return a different value from the default
system implementation.
</p>
</descr>
<errors>
On error, an empty string is returned.
</errors>
<seealso>
<link id="OnGetTempDir"/>
<link id="GetTempFileName"/>
</seealso>
</element>

<element name="GetTempFileName">
<short>Return the name of a temporary file.</short>
<descr>
<p>
<var>GetTempFileName</var> returns the name of a temporary file in directory
<var>Dir</var>. The name of the file starts with <var>Prefix</var>.
</p>
<p>
If <var>Dir</var> is empty, the value returned by <var>GetTempDir</var> is
used, and if <var>Prefix</var> is empty, 'TMP' is used.
</p>
<p>
The <link id="OnGetTempFile"/> handler may be set to provide custom handling
of this routine: One could implement callbacks which take into consideration
frameworks like KDE or GNOME, and return a different value from the default
system implementation.
</p>
</descr>
<errors>
On error, an empty string is returned.
</errors>
<seealso>
<link id="GetTempDir"/>
<link id="OnGetTempFile"/>
</seealso>
</element>

<element name="OnGetTempDir">
<short>Handler for <link id="#rtl.sysutils.GetTempDir">GetTempDir</link> function.</short>
<descr>
<var>OnGetTempDir</var> can be used to provide custom behaviour for the
<link id="GetTempDir"/> function. Note that the returned name should have a
trailing directory delimiter character.
</descr>
<seealso>
<link id="GetTempDir"/>
<link id="OnGetTempFile"/>
</seealso>
</element>

<element name="OnGetTempFile">
<short>Handler for <link id="#rtl.sysutils.GetTempFileName">GetTempFileName</link> function.</short>
<descr>
<var>OnGetTempDir</var> can be used to provide custom behaviour for the
<link id="GetTempFileName"/> function. Note that the values for
<var>Prefix</var> and <var>Dir</var> should be observed.
</descr>
<seealso>
<link id="OnGetTempDir"/>
<link id="GetTempFileName"/>
</seealso>
</element>

<element name="TGetTempDirEvent">
<short>Function prototype for <link id="#rtl.sysutils.OnGetTempDir">OnGetTempDir</link> handler.</short>
</element>

<element name="TGetTempFileEvent">
<short>Function prototype for <link id="#rtl.sysutils.OnGetTempFile">OnGetTempFile</link> handler.</short>
</element>

</module>
</package>
</fpdoc-descriptions>
