12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013 |
- %
- % $Id$
- % This file is part of the FPC documentation.
- % Copyright (C) 1997, 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.
- %
- \chapter{The DOS unit.}
- \FPCexampledir{dosex}
- This chapter describes the \var{DOS} unit for Free pascal. The \var{DOS}
- unit gives access to some operating system calls related to files, the
- file system, date and time. Except for the \palmos target, this unit is
- available to all supported platforms.
- The unit was first written for \dos by Florian kl\"ampfl. It was ported to
- \linux by Mark May\footnote{Current e-mail address \textsf{[email protected]}},
- and enhanced by Micha\"el Van Canneyt. The \amiga version was ported by
- Nils Sjoholm.
- Under non-\dos systems, some of the functionality is lost, as it is either impossible
- or meaningless to implement it. Other than that, the functionality for all
- operating systems is the same.
- This chapter is divided in three sections:
- \begin{itemize}
- \item The first section lists the pre-defined constants, types and variables.
- \item The second section gives an overview of all functions available,
- grouped by category.
- \item The third section describes the functions which appear in the
- interface part of the DOS unit.
- \end{itemize}
- \section{Types, Variables, Constants}
- \subsection {Constants}
- The DOS unit implements the following constants:
- \subsubsection{File attributes}
- The File Attribute constants are used in \seep{FindFirst}, \seep{FindNext} to
- determine what type of special file to search for in addition to normal files.
- These flags are also used in the \seep{SetFAttr} and \seep{GetFAttr} routines to
- set and retrieve attributes of files. For their definitions consult
- \seet{fileattributes}.
- \begin{FPCltable}{lll}{Possible file attributes}{fileattributes}
- \hline
- Constant & Description & Value\\ \hline
- \var{readonly} & Read only file & \$01\\
- \var{hidden} & Hidden file & \$02 \\
- \var{sysfile} & System file & \$04\\
- \var{volumeid} & Volume label & \$08\\
- \var{directory} & Directory & \$10\\
- \var{archive} & Archive & \$20\\
- \var{anyfile} & Any of the above special files & \$3F\\
- \hline
- \end{FPCltable}
- \subsubsection{fmXXXX}
- These constants are used in the \var{Mode} field of the \var{TextRec}
- record. Gives information on the filemode of the text I/O. For their
- definitions consult \seet{fmxxxconstants}.
- \begin{FPCltable}{lll}{Possible mode constants}{fmxxxconstants}
- \hline
- Constant & Description & Value\\ \hline
- \var{fmclosed} & File is closed & \$D7B0\\
- \var{fminput} & File is read only & \$D7B1 \\
- \var{fmoutput} & File is write only & \$D7B2\\
- \var{fminout} & File is read and write & \$D7B3\\
- \hline
- \end{FPCltable}
- \subsubsection{Other}
- The following constants are not portable, and should not be used. They
- are present for compatibility only.
- \begin{verbatim}
- {Bitmasks for CPU Flags}
- fcarry = $0001;
- fparity = $0004;
- fauxiliary = $0010;
- fzero = $0040;
- fsign = $0080;
- foverflow = $0800;
- \end{verbatim}
-
- \subsection{Types}
- The following string types are defined for easy handling of
- filenames :
- \begin{verbatim}
- ComStr = String[255]; { For command-lines }
- PathStr = String[255]; { For full path for file names }
- DirStr = String[255]; { For Directory and (DOS) drive string }
- NameStr = String[255]; { For Name of file }
- ExtStr = String[255]; { For Extension of file }
- \end{verbatim}
- \begin{verbatim}
- SearchRec = Packed Record
- Fill : array[1..21] of byte;
- { Fill replaced with declarations below, for Linux}
- Attr : Byte; {attribute of found file}
- Time : LongInt; {last modify date of found file}
- Size : LongInt; {file size of found file}
- Reserved : Word; {future use}
- Name : String[255]; {name of found file}
- SearchSpec: String[255]; {search pattern}
- NamePos: Word; {end of path, start of name position}
- End;
- \end{verbatim}
- Under \linux, the \var{Fill} array is replaced with the following:
- \begin{verbatim}
- SearchNum: LongInt; {to track which search this is}
- SearchPos: LongInt; {directory position}
- DirPtr: LongInt; {directory pointer for reading directory}
- SearchType: Byte; {0=normal, 1=open will close}
- SearchAttr: Byte; {attribute we are searching for}
- Fill: Array[1..07] of Byte; {future use}
- \end{verbatim}
- This is because the searching meachanism on Unix systems is substantially
- different from \dos's, and the calls have to be mimicked.
- \begin{verbatim}
- const
- filerecnamelength = 255;
- type
- FileRec = Packed Record
- Handle,
- Mode,
- RecSize : longint;
- _private : array[1..32] of byte;
- UserData : array[1..16] of byte;
- name : array[0..filerecnamelength] of char;
- End;
- \end{verbatim}
- \var{FileRec} is used for internal representation of typed and untyped files.
- Text files are handled by the following types :
- \begin{verbatim}
- const
- TextRecNameLength = 256;
- TextRecBufSize = 256;
- type
- TextBuf = array[0..TextRecBufSize-1] of char;
- TextRec = Packed Record
- Handle,
- Mode,
- bufsize,
- _private,
- bufpos,
- bufend : longint;
- bufptr : ^textbuf;
- openfunc,
- inoutfunc,
- flushfunc,
- closefunc : pointer;
- UserData : array[1..16] of byte;
- name : array[0..textrecnamelength-1] of char;
- buffer : textbuf;
- End;
- \end{verbatim}
- Remark that this is not binary compatible with the Turbo Pascal definition
- of \var{TextRec}, since the sizes of the different fields are different.
- \begin{verbatim}
- Registers = record
- case i : integer of
- 0 : (ax,f1,bx,f2,cx,f3,dx,f4,bp,f5,si,
- f51,di,f6,ds,f7,es,f8,flags,fs,gs : word);
- 1 : (al,ah,f9,f10,bl,bh,f11,f12,
- cl,ch,f13,f14,dl,dh : byte);
- 2 : (eax, ebx, ecx, edx, ebp, esi, edi : longint);
- End;
- \end{verbatim}
- The \var{registers} type is used in the \var{MSDos} call.
- \begin{verbatim}
- DateTime = record
- Year: Word;
- Month: Word;
- Day: Word;
- Hour: Word;
- Min: Word;
- Sec: word;
- End;
- \end{verbatim}
- The \var{DateTime} type is used in \seep{PackTime} and \seep{UnPackTime} for
- setting/reading file times with \seep{GetFTime} and \seep{SetFTime}.
- \subsection{Variables}
- \begin{verbatim}
- DosError : integer;
- \end{verbatim}
- The \var{DosError} variable is used by the procedures in the \dos unit to
- report errors. It can have the following values :
- \begin{center}
- \begin{tabular}{cl}
- 2 & File not found. \\
- 3 & path not found. \\
- 5 & Access denied. \\
- 6 & Invalid handle. \\
- 8 & Not enough memory. \\
- 10 & Invalid environment. \\
- 11 & Invalid format. \\
- 18 & No more files.
- \end{tabular}
- \end{center}
- Other values are possible, but are not documented.
- %\begin{verbatim}
- % drivestr : array [0..26] of pchar;
- %\end{verbatim}
- %This variable is defined in the \linux version of the \dos unit. It is used
- %in the \seef{DiskFree} and \seef{DiskSize} calls.
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- % Functions and procedures by category
- \section{Function list by category}
- What follows is a listing of the available functions, grouped by category.
- For each function there is a reference to the page where you can find the
- function.
- \subsection{File handling}
- Routines to handle files on disk.
- \begin{funclist}
- \funcrefl{FExpand}{Dos:FExpand}{Expand filename to full path}
- \procref{FindClose}{Close finfirst/findnext session}
- \procref{FindFirst}{Start find of file}
- \procref{FindNext}{Find next file}
- \funcrefl{FSearch}{Dos:FSearch}{Search for file in a path}
- \procref{FSplit}{Split filename in parts}
- \procref{GetFAttr}{Return file attributes}
- \procref{GetFTime}{Return file time}
- \funcref{GetLongName}{Convert short filename to long filename (DOS only)}
- \funcref{GetShortName}{Convert long filename to short filename (DOS only)}
- \procref{SetFAttr}{Set file attributes}
- \procref{SetFTime}{Set file time}
- \end{funclist}
- \subsection{Directory and disk handling}
- Routines to handle disk information.
- \begin{funclist}
- \procref{AddDisk}{Add disk to list of disks (UNIX only)}
- \funcref{DiskFree}{Return size of free disk space}
- \funcref{DiskSize}{Return total disk size}
- \end{funclist}
- \subsection{Process handling}
- Functions to handle process information and starting new processes.
- \begin{funclist}
- \funcref{DosExitCode}{Exit code of last executed program}
- \funcref{EnvCount}{Return number of environment variables}
- \funcref{EnvStr}{Return environment string pair}
- \procref{Exec}{Execute program}
- \funcrefl{GetEnv}{Dos:GetEnv}{Return specified environment string}
- \end{funclist}
- \subsection{System information}
- Functions for retrieving and setting general system information such as date
- and time.
- \begin{funclist}
- \funcref{DosVersion}{Get OS version}
- \procref{GetCBreak}{Get setting of control-break handling flag}
- \procrefl{GetDate}{Dos:GetDate}{Get system date}
- \procref{GetIntVec}{Get interrupt vector status}
- \procrefl{GetTime}{Dos:GetTime}{Get system time}
- \procref{GetVerify}{Get verify flag}
- \procref{Intr}{Execute an interrupt}
- \procref{Keep}{Keep process in memory and exit}
- \procref{MSDos}{Execute MS-dos function call}
- \procref{PackTime}{Pack time for file time}
- \procref{SetCBreak}{Set control-break handling flag}
- \procref{SetDate}{Set system date}
- \procref{SetIntVec}{Set interrupt vectors}
- \procref{SetTime}{Set system time}
- \procref{SetVerify}{Set verify flag}
- \procref{SwapVectors}{Swap interrupt vectors}
- \procref{UnPackTime}{Unpack file time}
- \end{funclist}
- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
- % Functions and procedures
- \section{Functions and Procedures}
- \begin{procedure}{AddDisk}
- \Declaration
- Procedure AddDisk (Const S : String);
- \Description
- \var{AddDisk} adds a filename \var{S} to the internal list of disks. It is
- implemented for systems which do not use DOS type drive letters.
- This list is used to determine which disks to use in the \seef{DiskFree}
- and \seef{DiskSize} calls.
- The \seef{DiskFree} and \seef{DiskSize} functions need a file on the
- specified drive, since this is required for the \var{statfs} system call.
- The names are added sequentially. The dos
- initialization code presets the first three disks to:
- \begin{itemize}
- \item \var{'.'} for the current drive,
- \item \var{'/fd0/.'} for the first floppy-drive (linux only).
- \item \var{'/fd1/.'} for the second floppy-drive (linux only).
- \item \var{'/'} for the first hard disk.
- \end{itemize}
- The first call to \var{AddDisk} will therefore add a name for the second
- harddisk, The second call for the third drive, and so on until 23 drives
- have been added (corresponding to drives \var{'D:'} to \var{'Z:'})
- \Errors
- None
- \SeeAlso
- \seef{DiskFree}, \seef{DiskSize}
- \end{procedure}
- \begin{function}{DiskFree}
- \Declaration
- Function DiskFree (Drive: byte) : int64;
- \Description
- \var{DiskFree} returns the number of free bytes on a disk. The parameter
- \var{Drive} indicates which disk should be checked. This parameter is 1 for
- floppy \var{a:}, 2 for floppy \var{b:}, etc. A value of 0 returns the free
- space on the current drive.
- \textbf{For \unix only:}\\
- The \var{diskfree} and \var{disksize} functions need a file on the
- specified drive, since this is required for the \var{statfs} system call.
- These filenames are set in the initialization of the dos unit, and have
- been preset to :
- \begin{itemize}
- \item \var{'.'} for the current drive,
- \item \var{'/fd0/.'} for the first floppy-drive (linux only).
- \item \var{'/fd1/.'} for the second floppy-drive (linux only).
- \item \var{'/'} for the first hard disk.
- \end{itemize}
- There is room for 1-26 drives. You can add a drive with the
- \seep{AddDisk} procedure.
- These settings can be coded in \var{dos.pp}, in the initialization part.
- \Errors
- -1 when a failure occurs, or an invalid drive number is given.
- \SeeAlso
- \seef{DiskSize}, \seep{AddDisk}
- \end{function}
- \FPCexample{ex6}
- \begin{function}{DiskSize}
- \Declaration
- Function DiskSize (Drive: byte) : int64;
- \Description
- \var{DiskSize} returns the total size (in bytes) of a disk. The parameter
- \var{Drive} indicates which disk should be checked. This parameter is 1 for
- floppy \var{a:}, 2 for floppy \var{b:}, etc. A value of 0 returns the size
- of the current drive.
- \textbf{For \unix only:}\\
- The \var{diskfree} and \var{disksize} functions need a file on the specified drive, since this
- is required for the \var{statfs} system call.
- These filenames are set in the initialization of the dos unit, and have
- been preset to :
- \begin{itemize}
- \item \var{'.'} for the current drive,
- \item \var{'/fd0/.'} for the first floppy-drive (linux only).
- \item \var{'/fd1/.'} for the second floppy-drive (linux only).
- \item \var{'/'} for the first hard disk.
- \end{itemize}
- There is room for 1-26 drives. You can add a drive with the
- \seep{AddDisk} procedure.
- These settings can be coded in \var{dos.pp}, in the initialization part.
- \Errors
- -1 when a failure occurs, or an invalid drive number is given.
- \SeeAlso
- \seef{DiskFree}, \seep{AddDisk}
- \end{function}
- For an example, see \seef{DiskFree}.
- \begin{function}{DosExitCode}
- \Declaration
- Function DosExitCode : Word;
- \Description
- \var{DosExitCode} contains (in the low byte) the exit-code of a program
- executed with the \var{Exec} call.
- \Errors
- None.
- \SeeAlso
- \seep{Exec}
- \end{function}
- \FPCexample{ex5}
- \begin{function}{DosVersion}
- \Declaration
- Function DosVersion : Word;
- \Description
- \var{DosVersion} returns the operating system or kernel version. The
- low byte contains the major version number, while the high byte
- contains the minor version number.
- \Portability
- On systems where versions consists of more then two numbers,
- only the first two numbers will be returned. For example Linux version 2.1.76
- will give you DosVersion 2.1. Some operating systems, such as \freebsd, do not
- have system calls to return the kernel version, in that case a value of 0 will
- be returned.
- \Errors
- None.
- \SeeAlso
- \end{function}
- \FPCexample{ex1}
- \begin{function}{EnvCount}
- \Declaration
- Function EnvCount : longint;\Description
- \var{EnvCount} returns the number of environment variables.
- \Errors
- None.
- \SeeAlso
- \seef{EnvStr}, \seef{Dos:GetEnv}
- \end{function}
- \begin{function}{EnvStr}
- \Declaration
- Function EnvStr (Index: integer) : string;\Description
- \var{EnvStr} returns the \var{Index}-th \var{Name=Value} pair from the list
- of environment variables.
- The index of the first pair is zero.
- \Errors
- The length is limited to 255 characters.
- \SeeAlso
- \seef{EnvCount}, \seef{Dos:GetEnv}
- \end{function}
- \FPCexample{ex13}
- \begin{procedure}{Exec}
- \Declaration
- Procedure Exec (const Path: pathstr; const ComLine: comstr);
- \Description
- \var{Exec} executes the program in \var{Path}, with the options given by
- \var{ComLine}.
- After the program has terminated, the procedure returns. The Exit value of
- the program can be consulted with the \var{DosExitCode} function.
- \Errors
- Errors are reported in \var{DosError}.
- \SeeAlso
- \seef{DosExitCode}
- \end{procedure}
- For an example, see \seef{DosExitCode}
- \begin{functionl}{FExpand}{Dos:FExpand}
- \Declaration
- Function FExpand (const path: pathstr) : pathstr;
- \Description
- \var{FExpand} takes its argument and expands it to a complete filename, i.e.
- a filename starting from the root directory of the current drive, prepended
- with the drive-letter or volume name (when supported).
- \Portability
- On case sensitive file systems (such as \unix and \linux), the resulting
- name is left as it is, otherwise it is converted to uppercase.
- \Errors
- \seep{FSplit}
- \SeeAlso
- \lstinputlisting{dosex/ex5.pp}
- \end{functionl}
- \begin{procedure}{FindClose}
- \Declaration
- Procedure FindClose (Var F: SearchRec);
- \Description
- \var{FindClose} frees any resources associated with the search record
- \var{F}.
- This call is needed to free any internal resources allocated by the
- \seef{FindFirst} or \seef{FindNext} calls.
- The \linux implementation of the \dos unit therefore keeps a table of open
- directories, and when the table is full, closes one of the directories, and
- reopens another. This system is adequate but slow if you use a lot of
- \var{searchrecs}.
- So, to speed up the findfirst/findnext system, the \var{FindClose} call was
- implemented. When you don't need a \var{searchrec} any more, you can tell
- this to the \dos unit by issuing a \var{FindClose} call. The directory
- which is kept open for this \var{searchrec} is then closed, and the table slot
- freed.
- \Portability
- It is recommended to use the \linux call \var{Glob} when looking for files
- on \linux.
- \Errors
- Errors are reported in DosError.
- \SeeAlso
- \seef{Glob}.
- \end{procedure}
- \begin{procedure}{FindFirst}
- \Declaration
- Procedure FindFirst (const Path: pathstr; Attr: word; var F: SearchRec);
- \Description
- \var{FindFirst} searches the file specified in \var{Path}. Normal files,
- as well as all special files which have the attributes specified in
- \var{Attr} will be returned.
- It returns a \var{SearchRec} record for further searching in \var{F}.
- \var{Path} can contain the wildcard characters \var{?} (matches any single
- character) and \var{*} (matches 0 ore more arbitrary characters). In this
- case \var{FindFirst} will return the first file which matches the specified
- criteria.
- If \var{DosError} is different from zero, no file(s) matching the criteria
- was(were) found.
- \Portability
- On \ostwo, you cannot issue two different \var{FindFirst} calls. That is,
- you must close any previous search operation with \seep{FindClose} before
- starting a new one. Failure to do so will end in a Run-Time Error 6
- (Invalid file handle)
- \Errors
- Errors are reported in DosError.
- \SeeAlso
- \seep{FindNext},
- \seep{FindClose}
- \end{procedure}
- \FPCexample{ex7}
- \begin{procedure}{FindNext}
- \Declaration
- Procedure FindNext (var f: searchRec);
- \Description
- \var{FindNext} takes as an argument a \var{SearchRec} from a previous
- \var{FindNext} call, or a \var{FindFirst} call, and tries to find another
- file which matches the criteria, specified in the \var{FindFirst} call.
- If \var{DosError} is different from zero, no more files matching the
- criteria were found.
- \Errors
- \var{DosError} is used to report errors.
- \SeeAlso
- \seep{FindFirst}, \seep{FindClose}
- \end{procedure}
- For an example, see \seep{FindFirst}.
- \begin{functionl}{FSearch}{Dos:FSearch}
- \Declaration
- Function FSearch (Path: pathstr; DirList: string) : pathstr;
- \Description
- \var{FSearch} searches the file \var{Path} in all directories listed in
- \var{DirList}. The full name of the found file is returned.
- \var{DirList} must be a list of directories, separated by semi-colons.
- When no file is found, an empty string is returned.
- \Portability
- On \unix systems, \var{DirList} can also be separated by colons, as is
- customary on those environments.
- \Errors
- None.
- \SeeAlso
- \seefl{FExpand}{Dos:FExpand}
- \end{functionl}
- \FPCexample{ex10}
-
- \begin{procedure}{FSplit}
- \Declaration
- Procedure FSplit (path: pathstr; \\ var dir: dirstr; var name: namestr;
- var ext: extstr);
- \Description
- \var{FSplit} splits a full file name into 3 parts : A \var{Path}, a
- \var{Name} and an extension (in \var{ext}.)
- The extension is taken to be all letters after the {\em last} dot (.). For
- \dos, however, an exception is made when \var{LFNSupport=False}, then
- the extension is defined as all characters after the {\em first} dot.
- \Errors
- None.
- \SeeAlso
- \seefl{FSearch}{Dos:FSearch}
- \end{procedure}
- \FPCexample{ex12}
- \begin{procedure}{GetCBreak}
- \Declaration
- Procedure GetCBreak (var breakvalue: boolean);
- \Description
- \var{GetCBreak} gets the status of CTRL-Break checking under \dos and \amiga.
- When \var{BreakValue} is \var{false}, then \dos only checks for the
- CTRL-Break key-press when I/O is performed. When it is set to \var{True},
- then a check is done at every system call.
- \Portability
- Under non-\dos and non-\amiga operating systems, \var{BreakValue} always returns
- \var{True}.
- \Errors
- None
- \SeeAlso
- \seep{SetCBreak}
- \end{procedure}
- \begin{procedurel}{GetDate}{Dos:GetDate}
- \Declaration
- Procedure GetDate (var year, month, mday, wday: word);\Description
- \var{GetDate} returns the system's date. \var{Year} is a number in the range
- 1980..2099.\var{mday} is the day of the month,
- \var{wday} is the day of the week, starting with Sunday as day 0.
- \Errors
- None.
- \SeeAlso
- \seepl{GetTime}{Dos:GetTime},\seep{SetDate}
- \end{procedurel}
- \FPCexample{ex2}
- \begin{functionl}{GetEnv}{Dos:GetEnv}
- \Declaration
- Function GetEnv (EnvVar: String) : String;
- \Description
- \var{Getenv} returns the value of the environment variable \var{EnvVar}.
- When there is no environment variable \var{EnvVar} defined, an empty
- string is returned.
- \Portability
- Under some operating systems (such as \unix), case is important when looking
- for \var{EnvVar}.
- \Errors
- None.
- \SeeAlso
- \seef{EnvCount}, \seef{EnvStr}
- \end{functionl}
- \FPCexample{ex14}
- \begin{procedure}{GetFAttr}
- \Declaration
- Procedure GetFAttr (var F; var Attr: word);
- \Description
- \var{GetFAttr} returns the file attributes of the file-variable \var{f}.
- \var{F} can be a untyped or typed file, or of type \var{Text}. \var{f} must
- have been assigned, but not opened. The attributes can be examined with the
- following constants :
- \begin{itemize}
- \item \var{ReadOnly}
- \item \var{Hidden}
- \item \var{SysFile}
- \item \var{VolumeId}
- \item \var{Directory}
- \item \var{Archive}
- \end{itemize}
- Under \linux, supported attributes are:
- \begin{itemize}
- \item \var{Directory}
- \item \var{ReadOnly} if the current process doesn't have access to the file.
- \item \var{Hidden} for files whose name starts with a dot \var{('.')}.
- \end{itemize}
- \Errors
- Errors are reported in \var{DosError}
- \SeeAlso
- \seep{SetFAttr}
- \end{procedure}
- \FPCexample{ex8}
- \begin{procedure}{GetFTime}
- \Declaration
- Procedure GetFTime (var F; var Time: longint);
- \Description
- \var{GetFTime} returns the modification time of a file.
- This time is encoded and must be decoded with \var{UnPackTime}.
- \var{F} must be a file type, which has been assigned, and
- opened.
- \Errors
- Errors are reported in \var{DosError}
- \SeeAlso
- \seep{SetFTime}, \seep{PackTime},\seep{UnPackTime}
- \end{procedure}
- \FPCexample{ex9}
- \begin{procedure}{GetIntVec}
- \Declaration
- Procedure GetIntVec (IntNo: byte; var Vector: pointer);
- \Description
- \var{GetIntVec} returns the address of interrupt vector
- \var{IntNo}.
- \Portability
- This call does nothing, it is present for compatibility only.
- \Errors
- None.
- \SeeAlso
- \seep{SetIntVec}
- \end{procedure}
- \begin{function}{GetLongName}
- \Declaration
- function GetLongName(var p : String) : boolean;\Description
- This function is only implemented in the GO32V2 version of \fpc.
- \var{GetLongName} changes the filename \var{p} to a long filename
- if the \dos call to do this is successful. The resulting string
- is the long file name corresponding to the short filename \var{p}.
- The function returns \var{True} if the \dos call was successful,
- \var{False} otherwise.
- This function should only be necessary when using the DOS extender
- under Windows 95 and higher.
- \Errors
- If the \dos call was not succesfull, \var{False} is returned.
- \SeeAlso
- \seef{GetShortName}
- \end{function}
- \begin{function}{GetShortName}
- \Declaration
- function GetShortName(var p : String) : boolean;\Description
- This function is only implemented in the GO32V2 version of \fpc.
- \var{GetShortName} changes the filename \var{p} to a short filename
- if the \dos call to do this is successful. The resulting string
- is the short file name corresponding to the long filename \var{p}.
- The function returns \var{True} if the \dos call was successful,
- \var{False} otherwise.
- This function should only be necessary when using the DOS extender
- under Windows 95 and higher.
- \Errors
- If the \dos call was not successful, \var{False} is returned.
- \SeeAlso
- \seef{GetLongName}
- \end{function}
- \begin{procedurel}{GetTime}{Dos:GetTime}
- \Declaration
- Procedure GetTime (var hour, minute, second, sec100: word);
- \Description
- \var{GetTime} returns the system's time. \var{Hour} is a on a 24-hour time
- scale. \var{sec100} is in hundredth of a
- second.
- \Portability
- Certain operating systems (such as \amiga), always set the \var{sec100} field
- to zero.
- \Errors
- None.
- \SeeAlso
- \seepl{GetDate}{Dos:GetDate},
- \seep{SetTime}
- \end{procedurel}
- \FPCexample{ex3}
- \begin{procedure}{GetVerify}
- \Declaration
- Procedure GetVerify (var verify: boolean);
- \Description
- \var{GetVerify} returns the status of the verify flag under \dos. When
- \var{Verify} is \var{True}, then \dos checks data which are written to disk,
- by reading them after writing. If \var{Verify} is \var{False}, then data
- written to disk are not verified.
- \Portability
- Under non-\dos systems (excluding \ostwo applications running under vanilla DOS),
- Verify is always \var{True}.
- \Errors
- None.
- \SeeAlso
- \seep{SetVerify}
- \end{procedure}
- \begin{procedure}{Intr}
- \Declaration
- Procedure Intr (IntNo: byte; var Regs: registers);
- \Description
- \var{Intr} executes a software interrupt number \var{IntNo} (must be between
- 0 and 255), with processor registers set to \var{Regs}. After the interrupt call
- returned, the processor registers are saved in \var{Regs}.
- \Portability
- Under non-\dos operating systems, this call does nothing.
- \Errors
- None.
- \SeeAlso
- \seep{MSDos}, see the \linux unit.
- \end{procedure}
- \begin{procedure}{Keep}
- \Declaration
- Procedure Keep (ExitCode: word);
- \Description
- \var{Keep} terminates the program, but stays in memory. This is used for TSR
- (Terminate Stay Resident) programs which catch some interrupt.
- \var{ExitCode} is the same parameter as the \var{Halt} function takes.
- \Portability
- This call does nothing, it is present for compatibility only.
- \Errors
- None.
- \SeeAlso
- \seem{Halt}{}
- \end{procedure}
- \begin{procedure}{MSDos}
- \Declaration
- Procedure MSDos (var regs: registers);
- \Description
- \var{MSDos} executes an operating system. This is the same as doing a
- \var{Intr} call with the interrupt number for an os call.
- \Portability
- Under non-\dos operating systems, this call does nothing. On \dos systems,
- this calls interrupt \$21.
- \Errors
- None.
- \SeeAlso
- \seep{Intr}
- \end{procedure}
- \begin{procedure}{PackTime}
- \Declaration
- Procedure PackTime (var T: datetime; var P: longint);
- \Description
- \var{UnPackTime} converts the date and time specified in \var{T}
- to a packed-time format which can be fed to \var{SetFTime}.
- \Errors
- None.
- \SeeAlso
- \seep{SetFTime}, \seep{FindFirst}, \seep{FindNext}, \seep{UnPackTime}
- \end{procedure}
- \FPCexample{ex4}
- \begin{procedure}{SetCBreak}
- \Declaration
- Procedure SetCBreak (breakvalue: boolean);
- \Description
- \var{SetCBreak} sets the status of CTRL-Break checking. When
- \var{BreakValue} is \var{false}, then \dos only checks for the CTRL-Break
- key-press when I/O is performed. When it is set to \var{True}, then a
- check is done at every system call.
- \Portability
- Under non-\dos and non-\amiga operating systems, this call does nothing.
- \Errors
- None.
- \SeeAlso
- \seep{GetCBreak}
- \end{procedure}
- \begin{procedure}{SetDate}
- \Declaration
- Procedure SetDate (year,month,day: word);
- \Description
- \var{SetDate} sets the system's internal date. \var{Year} is a number
- between 1980 and 2099.
- \Portability
- On a \linux machine, there must be root privileges, otherwise this
- routine will do nothing. On other \unix systems, this call currently
- does nothing.
- \Errors
- None.
- \SeeAlso
- \seep{Dos:GetDate},
- \seep{SetTime}
- \end{procedure}
- \begin{procedure}{SetFAttr}
- \Declaration
- Procedure SetFAttr (var F; Attr: word);
- \Description
- \var{SetFAttr} sets the file attributes of the file-variable \var{F}.
- \var{F} can be a untyped or typed file, or of type \var{Text}. \var{F} must
- have been assigned, but not opened. The attributes can be a sum of the
- following constants:
- \begin{itemize}
- \item \var{ReadOnly}
- \item \var{Hidden}
- \item \var{SysFile}
- \item \var{VolumeId}
- \item \var{Directory}
- \item \var{Archive}
- \end{itemize}
- \Portability
- Under \unix like systems (such as \linux and \beos) the call exists, but is not implemented,
- i.e. it does nothing.
- \Errors
- Errors are reported in \var{DosError}.
- \SeeAlso
- \seep{GetFAttr}
- \end{procedure}
- \begin{procedure}{SetFTime}
- \Declaration
- Procedure SetFTime (var F; Time: longint);
- \Description
- \var{SetFTime} sets the modification time of a file,
- this time is encoded and must be encoded with \var{PackTime}.
- \var{F} must be a file type, which has been assigned, and
- opened.
- \Portability
- Under \unix like systems (such as \linux and \beos) the call exists, but is not implemented,
- i.e. it does nothing.
- \Errors
- Errors are reported in \var{DosError}
- \SeeAlso
- \seep{GetFTime}, \seep{PackTime},\seep{UnPackTime}
- \end{procedure}
- \begin{procedure}{SetIntVec}
- \Declaration
- Procedure SetIntVec (IntNo: byte; Vector: pointer);
- \Description
- \var{SetIntVec} sets interrupt vector \var{IntNo} to \var{Vector}.
- \var{Vector} should point to an interrupt procedure.
- \Portability
- This call does nothing, it is present for compatibility only.
- \Errors
- None.
- \SeeAlso
- \seep{GetIntVec}
- \end{procedure}
- \begin{procedure}{SetTime}
- \Declaration
- Procedure SetTime (hour,minute,second,sec100: word);
- \Description
- \var{SetTime} sets the system's internal clock. The \var{Hour} parameter is
- on a 24-hour time scale.
- \Portability
- On a \linux machine, there must be root privileges, otherwise this
- routine will do nothing. On other \unix systems, this call currently
- does nothing.
- \Errors
- None.
- \SeeAlso
- \seep{Dos:GetTime}, \seep{SetDate}
- \end{procedure}
- \begin{procedure}{SetVerify}
- \Declaration
- Procedure SetVerify (verify: boolean);
- \Description
- \var{SetVerify} sets the status of the verify flag under \dos. When
- \var{Verify} is \var{True}, then \dos checks data which are written to disk,
- by reading them after writing. If \var{Verify} is \var{False}, then data
- written to disk are not verified.
- \Portability
- Under non-\dos operating systems (excluding \ostwo applications running
- under vanilla dos), Verify is always \var{True}.
- \Errors
- None.
- \SeeAlso
- \seep{SetVerify}
- \end{procedure}
- \begin{procedure}{SwapVectors}
- \Declaration
- Procedure SwapVectors ;
- \Description
- \var{SwapVectors} swaps the contents of the internal table of interrupt
- vectors with the current contents of the interrupt vectors.
- This is called typically in before and after an \var{Exec} call.
- \Portability
- Under certain operating systems, this routine may be implemented
- as an empty stub.
- \Errors
- None.
- \SeeAlso
- \seep{Exec}, \seep{SetIntVec}
- \end{procedure}
- \begin{procedure}{UnPackTime}
- \Declaration
- Procedure UnPackTime (p: longint; var T: datetime);
- \Description
- \var{UnPackTime} converts the file-modification time in \var{p}
- to a \var{DateTime} record. The file-modification time can be
- returned by \var{GetFTime}, \var{FindFirst} or \var{FindNext} calls.
- \Errors
- None.
- \SeeAlso
- \seep{GetFTime}, \seep{FindFirst}, \seep{FindNext}, \seep{PackTime}
- \end{procedure}
- For an example, see \seep{PackTime}.
|