RTL
RTL
RTL
Free Pascal version 2.6.0: Reference guide for RTL units. Document version 2.6 December 2011
Contents
0.1 1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 102
Used units . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 Constants, types and variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 1.3.1 1.3.2 Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 CreateShellArgV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 FpAccess . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 FpAlarm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 FpChdir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 FpChmod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 FpChown . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145 FpClose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 FpClosedir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146 FpDup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147 FpDup2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 FpExecv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149 FpExecve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 FpExit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 FpFcntl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 fpfdllset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 fpFD_CLR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 fpFD_ISSET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 fpFD_SET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152 fpFD_ZERO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 FpFork . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 FPFStat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 FpFtruncate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
1.4
Procedures and functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142 1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.4.9 1.4.10 1.4.11 1.4.12 1.4.13 1.4.14 1.4.15 1.4.16 1.4.17 1.4.18 1.4.19 1.4.20 1.4.21 1.4.22
CONTENTS
1.4.23 1.4.24 1.4.25 1.4.26 1.4.27 1.4.28 1.4.29 1.4.30 1.4.31 1.4.32 1.4.33 1.4.34 1.4.35 1.4.36 1.4.37 1.4.38 1.4.39 1.4.40 1.4.41 1.4.42 1.4.43 1.4.44 1.4.45 1.4.46 1.4.47 1.4.48 1.4.49 1.4.50 1.4.51 1.4.52 1.4.53 1.4.54 1.4.55 1.4.56 1.4.57 1.4.58 1.4.59 1.4.60 1.4.61 1.4.62
FpGetcwd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 FpGetegid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 FpGetEnv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 fpgeterrno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 FpGeteuid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156 FpGetgid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 FpGetgroups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 FpGetpgrp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157 FpGetpid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 FpGetppid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 fpGetPriority . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 FpGetRLimit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 FpGetsid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 FpGetuid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 FpIOCtl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160 FpKill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 FpLink . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 FpLseek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 fpLstat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 FpMkdir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 FpMkfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 Fpmmap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 Fpmunmap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 FpNanoSleep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 fpNice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 FpOpen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 FpOpendir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 FpPause . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 FpPipe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 FpPoll . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 FppRead . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 FppWrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172 FpRead . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 FpReaddir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 fpReadLink . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 FpReadV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 FpRename . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 FpRmdir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 fpSelect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 fpseterrno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
CONTENTS
1.4.63 1.4.64 1.4.65 1.4.66 1.4.67 1.4.68 1.4.69 1.4.70 1.4.71 1.4.72 1.4.73 1.4.74 1.4.75 1.4.76 1.4.77 1.4.78 1.4.79 1.4.80 1.4.81 1.4.82 1.4.83 1.4.84 1.4.85 1.4.86 1.4.87 1.4.88 1.4.89 1.4.90 1.4.91 1.4.92 1.4.93 1.4.94 1.4.95 1.4.96 1.4.97 1.4.98 1.4.99 1.4.100 1.4.101 1.4.102
FpSetgid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 fpSetPriority . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 FpSetRLimit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 FpSetsid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 fpsettimeofday . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 FpSetuid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 FPSigaction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 FpSigAddSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 FpSigDelSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 FpsigEmptySet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 FpSigFillSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 FpSigIsMember . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 FpSignal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 FpSigPending . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 FpSigProcMask . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 FpSigSuspend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 FpSigTimedWait . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184 FpSleep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 FpStat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185 fpSymlink . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 fpS_ISBLK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187 fpS_ISCHR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 fpS_ISDIR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 fpS_ISFIFO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188 fpS_ISLNK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 fpS_ISREG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189 fpS_ISSOCK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 fptime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 FpTimes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 FpUmask . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 FpUname . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 FpUnlink . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 FpUtime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 FpWait . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 FpWaitPid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193 FpWrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 FpWriteV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 FreeShellArgV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194 wexitStatus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 wifexited . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
CONTENTS
Used units . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 Constants, types and variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 2.3.1 2.3.2 2.3.3 Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211 ActivateClassGroup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 BeginGlobalLoading . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 BinToHex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 Bounds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 CheckSynchronize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 ClassGroupOf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 CollectionsEqual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 EndGlobalLoading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 ExtractStrings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 FindClass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 FindGlobalComponent . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 FindIdentToInt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 FindIntToIdent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 FindNestedComponent . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 GetClass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 GetFixupInstanceNames . . . . . . . . . . . . . . . . . . . . . . . . . . 216 GetFixupReferenceNames . . . . . . . . . . . . . . . . . . . . . . . . . 217 GlobalFixupReferences . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 GroupDescendentsWith . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 HexToBin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217 IdentToInt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 InitComponentRes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 InitInheritedComponent . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 IntToIdent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218 InvalidPoint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 LineStart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 NotifyGlobalLoading . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 ObjectBinaryToText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219
2.4
Procedures and functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.4.8 2.4.9 2.4.10 2.4.11 2.4.12 2.4.13 2.4.14 2.4.15 2.4.16 2.4.17 2.4.18 2.4.19 2.4.20 2.4.21 2.4.22 2.4.23 2.4.24 2.4.25 2.4.26 2.4.27 2.4.28
CONTENTS
2.4.29 2.4.30 2.4.31 2.4.32 2.4.33 2.4.34 2.4.35 2.4.36 2.4.37 2.4.38 2.4.39 2.4.40 2.4.41 2.4.42 2.4.43 2.4.44 2.4.45 2.4.46 2.4.47 2.4.48 2.4.49 2.4.50 2.4.51 2.4.52 2.4.53 2.4.54 2.4.55 2.4.56 2.5 2.6 2.7 2.8 2.9 2.5.1 2.6.1 2.7.1 2.8.1 2.9.1 2.10.1
ObjectResourceToText . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 ObjectTextToBinary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 ObjectTextToResource . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 Point . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 PointsEqual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 ReadComponentRes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 ReadComponentResEx . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 ReadComponentResFile . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 Rect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 RedirectFixupReferences . . . . . . . . . . . . . . . . . . . . . . . . . . 222 RegisterClass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 RegisterClassAlias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 RegisterClasses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 RegisterComponents . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 RegisterFindGlobalComponentProc . . . . . . . . . . . . . . . . . . . . 223 RegisterInitComponentHandler . . . . . . . . . . . . . . . . . . . . . . . 223 RegisterIntegerConsts . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 RegisterNoIcon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 RegisterNonActiveX . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 RemoveFixupReferences . . . . . . . . . . . . . . . . . . . . . . . . . . 225 RemoveFixups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 SmallPoint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 StartClassGroup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 UnRegisterClass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 UnRegisterClasses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226 UnregisterFindGlobalComponentProc . . . . . . . . . . . . . . . . . . . 226 UnRegisterModuleClasses . . . . . . . . . . . . . . . . . . . . . . . . . 226 WriteComponentResFile . . . . . . . . . . . . . . . . . . . . . . . . . . 227 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
EBitsError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 EClassNotFound . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 EComponentError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 EFCreateError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 EFilerError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
CONTENTS
2.11 EInvalidImage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 2.11.1 2.12.1 2.13.1 2.14.1 2.15.1 2.16.1 2.17.1 2.18.1 2.19.1 2.20.1 2.21.1 2.22.1 2.23.1 2.24.1 2.24.2 2.24.3 2.24.4 2.25.1 2.25.2 2.25.3 2.26.1 2.26.2 2.26.3 2.26.4 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 IDesignerNotify.Modied . . . . . . . . . . . . . . . . . . . . . . . . . . 231 IDesignerNotify.Notication . . . . . . . . . . . . . . . . . . . . . . . . 231 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 IInterfaceComponentReference.GetComponent . . . . . . . . . . . . . . 232 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 Property overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 IInterfaceList.Get . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 2.12 EInvalidOperation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 2.13 EListError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 2.14 EMethodNotFound . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 2.15 EOutOfResources . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 2.16 EParserError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 2.17 EReadError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 2.18 EResNotFound . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 2.19 EStreamError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 2.20 EStringListError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 2.21 EThread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 2.22 EThreadDestroyCalled . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 2.23 EWriteError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 2.24 IDesignerNotify . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
CONTENTS
2.26.5 2.26.6 2.26.7 2.26.8 2.26.9 2.26.10 2.26.11 2.26.12 2.26.13 2.26.14 2.26.15 2.26.16 2.26.17 2.26.18 2.26.19 2.26.20 2.26.21 2.26.22 2.26.23 2.27.1 2.27.2 2.27.3 2.27.4 2.28.1 2.28.2 2.28.3 2.28.4 2.29.1 2.29.2 2.29.3 2.29.4 2.29.5 2.29.6 2.29.7 2.29.8 2.30.1
IInterfaceList.GetCapacity . . . . . . . . . . . . . . . . . . . . . . . . . 233 IInterfaceList.GetCount . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 IInterfaceList.Put . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 IInterfaceList.SetCapacity . . . . . . . . . . . . . . . . . . . . . . . . . . 234 IInterfaceList.SetCount . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 IInterfaceList.Clear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 IInterfaceList.Delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 IInterfaceList.Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 IInterfaceList.First . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 IInterfaceList.IndexOf . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 IInterfaceList.Add . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 IInterfaceList.Insert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 IInterfaceList.Last . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 IInterfaceList.Remove . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 IInterfaceList.Lock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 IInterfaceList.Unlock . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 IInterfaceList.Capacity . . . . . . . . . . . . . . . . . . . . . . . . . . . 236 IInterfaceList.Count . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 IInterfaceList.Items . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 IStreamPersist.LoadFromStream . . . . . . . . . . . . . . . . . . . . . . 238 IStreamPersist.SaveToStream . . . . . . . . . . . . . . . . . . . . . . . . 238 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238 IStringsAdapter.ReferenceStrings . . . . . . . . . . . . . . . . . . . . . . 238 IStringsAdapter.ReleaseStrings . . . . . . . . . . . . . . . . . . . . . . . 238 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 IVCLComObject.GetTypeInfoCount . . . . . . . . . . . . . . . . . . . . 239 IVCLComObject.GetTypeInfo . . . . . . . . . . . . . . . . . . . . . . . 239 IVCLComObject.GetIDsOfNames . . . . . . . . . . . . . . . . . . . . . 240 IVCLComObject.Invoke . . . . . . . . . . . . . . . . . . . . . . . . . . 240 IVCLComObject.SafeCallException . . . . . . . . . . . . . . . . . . . . 240 IVCLComObject.FreeOnRelease . . . . . . . . . . . . . . . . . . . . . . 240 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
CONTENTS
2.30.2 2.30.3 2.30.4 2.30.5 2.30.6 2.30.7 2.30.8 2.30.9 2.30.10 2.30.11 2.30.12 2.30.13 2.30.14 2.30.15 2.30.16 2.30.17 2.30.18 2.30.19 2.30.20 2.30.21 2.30.22 2.30.23 2.30.24 2.30.25 2.31.1 2.31.2 2.31.3 2.31.4 2.31.5 2.31.6 2.31.7 2.31.8 2.31.9 2.31.10 2.31.11 2.31.12 2.31.13 2.31.14 2.31.15
Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 TAbstractObjectReader.NextValue . . . . . . . . . . . . . . . . . . . . . 241 TAbstractObjectReader.ReadValue . . . . . . . . . . . . . . . . . . . . . 242 TAbstractObjectReader.BeginRootComponent . . . . . . . . . . . . . . . 242 TAbstractObjectReader.BeginComponent . . . . . . . . . . . . . . . . . 242 TAbstractObjectReader.BeginProperty . . . . . . . . . . . . . . . . . . . 243 TAbstractObjectReader.Read . . . . . . . . . . . . . . . . . . . . . . . . 243 TAbstractObjectReader.ReadBinary . . . . . . . . . . . . . . . . . . . . 243 TAbstractObjectReader.ReadFloat . . . . . . . . . . . . . . . . . . . . . 243 TAbstractObjectReader.ReadSingle . . . . . . . . . . . . . . . . . . . . . 244 TAbstractObjectReader.ReadDate . . . . . . . . . . . . . . . . . . . . . . 244 TAbstractObjectReader.ReadCurrency . . . . . . . . . . . . . . . . . . . 244 TAbstractObjectReader.ReadIdent . . . . . . . . . . . . . . . . . . . . . 244 TAbstractObjectReader.ReadInt8 . . . . . . . . . . . . . . . . . . . . . . 245 TAbstractObjectReader.ReadInt16 . . . . . . . . . . . . . . . . . . . . . 245 TAbstractObjectReader.ReadInt32 . . . . . . . . . . . . . . . . . . . . . 246 TAbstractObjectReader.ReadInt64 . . . . . . . . . . . . . . . . . . . . . 246 TAbstractObjectReader.ReadSet . . . . . . . . . . . . . . . . . . . . . . 246 TAbstractObjectReader.ReadStr . . . . . . . . . . . . . . . . . . . . . . 247 TAbstractObjectReader.ReadString . . . . . . . . . . . . . . . . . . . . . 247 TAbstractObjectReader.ReadWideString . . . . . . . . . . . . . . . . . . 247 TAbstractObjectReader.ReadUnicodeString . . . . . . . . . . . . . . . . 247 TAbstractObjectReader.SkipComponent . . . . . . . . . . . . . . . . . . 248 TAbstractObjectReader.SkipValue . . . . . . . . . . . . . . . . . . . . . 248 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 TAbstractObjectWriter.BeginCollection . . . . . . . . . . . . . . . . . . 249 TAbstractObjectWriter.BeginComponent . . . . . . . . . . . . . . . . . . 249 TAbstractObjectWriter.BeginList . . . . . . . . . . . . . . . . . . . . . . 249 TAbstractObjectWriter.EndList . . . . . . . . . . . . . . . . . . . . . . . 250 TAbstractObjectWriter.BeginProperty . . . . . . . . . . . . . . . . . . . 250 TAbstractObjectWriter.EndProperty . . . . . . . . . . . . . . . . . . . . 250 TAbstractObjectWriter.Write . . . . . . . . . . . . . . . . . . . . . . . . 250 TAbstractObjectWriter.WriteBinary . . . . . . . . . . . . . . . . . . . . 250 TAbstractObjectWriter.WriteBoolean . . . . . . . . . . . . . . . . . . . . 251 TAbstractObjectWriter.WriteFloat . . . . . . . . . . . . . . . . . . . . . 251 TAbstractObjectWriter.WriteSingle . . . . . . . . . . . . . . . . . . . . . 251 TAbstractObjectWriter.WriteDate . . . . . . . . . . . . . . . . . . . . . . 251 TAbstractObjectWriter.WriteCurrency . . . . . . . . . . . . . . . . . . . 251
CONTENTS
2.31.16 2.31.17 2.31.18 2.31.19 2.31.20 2.31.21 2.31.22 2.31.23 2.31.24 2.32.1 2.32.2 2.32.3 2.32.4 2.32.5 2.32.6 2.32.7 2.32.8 2.32.9 2.32.10 2.32.11 2.32.12 2.32.13 2.32.14 2.32.15 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.33.6 2.33.7 2.33.8 2.33.9 2.34.1 2.34.2 2.34.3 2.34.4
TAbstractObjectWriter.WriteIdent . . . . . . . . . . . . . . . . . . . . . 252 TAbstractObjectWriter.WriteInteger . . . . . . . . . . . . . . . . . . . . 252 TAbstractObjectWriter.WriteUInt64 . . . . . . . . . . . . . . . . . . . . 252 TAbstractObjectWriter.WriteVariant . . . . . . . . . . . . . . . . . . . . 252 TAbstractObjectWriter.WriteMethodName . . . . . . . . . . . . . . . . . 252 TAbstractObjectWriter.WriteSet . . . . . . . . . . . . . . . . . . . . . . 253 TAbstractObjectWriter.WriteString . . . . . . . . . . . . . . . . . . . . . 253 TAbstractObjectWriter.WriteWideString . . . . . . . . . . . . . . . . . . 253 TAbstractObjectWriter.WriteUnicodeString . . . . . . . . . . . . . . . . 253 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254 Property overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254 TBasicAction.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254 TBasicAction.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254 TBasicAction.HandlesTarget . . . . . . . . . . . . . . . . . . . . . . . . 254 TBasicAction.UpdateTarget . . . . . . . . . . . . . . . . . . . . . . . . . 255 TBasicAction.ExecuteTarget . . . . . . . . . . . . . . . . . . . . . . . . 255 TBasicAction.Execute . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 TBasicAction.RegisterChanges . . . . . . . . . . . . . . . . . . . . . . . 256 TBasicAction.UnRegisterChanges . . . . . . . . . . . . . . . . . . . . . 256 TBasicAction.Update . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256 TBasicAction.ActionComponent . . . . . . . . . . . . . . . . . . . . . . 256 TBasicAction.OnExecute . . . . . . . . . . . . . . . . . . . . . . . . . . 257 TBasicAction.OnUpdate . . . . . . . . . . . . . . . . . . . . . . . . . . 257 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 Property overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258 TBasicActionLink.Create . . . . . . . . . . . . . . . . . . . . . . . . . . 258 TBasicActionLink.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . 258 TBasicActionLink.Execute . . . . . . . . . . . . . . . . . . . . . . . . . 258 TBasicActionLink.Update . . . . . . . . . . . . . . . . . . . . . . . . . 259 TBasicActionLink.Action . . . . . . . . . . . . . . . . . . . . . . . . . . 259 TBasicActionLink.OnChange . . . . . . . . . . . . . . . . . . . . . . . . 259 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 TBinaryObjectReader.Create . . . . . . . . . . . . . . . . . . . . . . . . 260 TBinaryObjectReader.Destroy . . . . . . . . . . . . . . . . . . . . . . . 260
CONTENTS
2.34.5 2.34.6 2.34.7 2.34.8 2.34.9 2.34.10 2.34.11 2.34.12 2.34.13 2.34.14 2.34.15 2.34.16 2.34.17 2.34.18 2.34.19 2.34.20 2.34.21 2.34.22 2.34.23 2.34.24 2.34.25 2.34.26 2.34.27 2.35.1 2.35.2 2.35.3 2.35.4 2.35.5 2.35.6 2.35.7 2.35.8 2.35.9 2.35.10 2.35.11 2.35.12 2.35.13 2.35.14 2.35.15 2.35.16
TBinaryObjectReader.NextValue . . . . . . . . . . . . . . . . . . . . . . 261 TBinaryObjectReader.ReadValue . . . . . . . . . . . . . . . . . . . . . . 261 TBinaryObjectReader.BeginRootComponent . . . . . . . . . . . . . . . . 261 TBinaryObjectReader.BeginComponent . . . . . . . . . . . . . . . . . . 261 TBinaryObjectReader.BeginProperty . . . . . . . . . . . . . . . . . . . . 261 TBinaryObjectReader.Read . . . . . . . . . . . . . . . . . . . . . . . . . 262 TBinaryObjectReader.ReadBinary . . . . . . . . . . . . . . . . . . . . . 262 TBinaryObjectReader.ReadFloat . . . . . . . . . . . . . . . . . . . . . . 262 TBinaryObjectReader.ReadSingle . . . . . . . . . . . . . . . . . . . . . 262 TBinaryObjectReader.ReadDate . . . . . . . . . . . . . . . . . . . . . . 262 TBinaryObjectReader.ReadCurrency . . . . . . . . . . . . . . . . . . . . 263 TBinaryObjectReader.ReadIdent . . . . . . . . . . . . . . . . . . . . . . 263 TBinaryObjectReader.ReadInt8 . . . . . . . . . . . . . . . . . . . . . . . 263 TBinaryObjectReader.ReadInt16 . . . . . . . . . . . . . . . . . . . . . . 263 TBinaryObjectReader.ReadInt32 . . . . . . . . . . . . . . . . . . . . . . 264 TBinaryObjectReader.ReadInt64 . . . . . . . . . . . . . . . . . . . . . . 264 TBinaryObjectReader.ReadSet . . . . . . . . . . . . . . . . . . . . . . . 264 TBinaryObjectReader.ReadStr . . . . . . . . . . . . . . . . . . . . . . . 264 TBinaryObjectReader.ReadString . . . . . . . . . . . . . . . . . . . . . . 264 TBinaryObjectReader.ReadWideString . . . . . . . . . . . . . . . . . . . 265 TBinaryObjectReader.ReadUnicodeString . . . . . . . . . . . . . . . . . 265 TBinaryObjectReader.SkipComponent . . . . . . . . . . . . . . . . . . . 265 TBinaryObjectReader.SkipValue . . . . . . . . . . . . . . . . . . . . . . 265 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266 TBinaryObjectWriter.Create . . . . . . . . . . . . . . . . . . . . . . . . 266 TBinaryObjectWriter.Destroy . . . . . . . . . . . . . . . . . . . . . . . . 266 TBinaryObjectWriter.BeginCollection . . . . . . . . . . . . . . . . . . . 267 TBinaryObjectWriter.BeginComponent . . . . . . . . . . . . . . . . . . 267 TBinaryObjectWriter.BeginList . . . . . . . . . . . . . . . . . . . . . . . 267 TBinaryObjectWriter.EndList . . . . . . . . . . . . . . . . . . . . . . . . 267 TBinaryObjectWriter.BeginProperty . . . . . . . . . . . . . . . . . . . . 267 TBinaryObjectWriter.EndProperty . . . . . . . . . . . . . . . . . . . . . 267 TBinaryObjectWriter.Write . . . . . . . . . . . . . . . . . . . . . . . . . 268 TBinaryObjectWriter.WriteBinary . . . . . . . . . . . . . . . . . . . . . 268 TBinaryObjectWriter.WriteBoolean . . . . . . . . . . . . . . . . . . . . 268 TBinaryObjectWriter.WriteFloat . . . . . . . . . . . . . . . . . . . . . . 268 TBinaryObjectWriter.WriteSingle . . . . . . . . . . . . . . . . . . . . . 268 TBinaryObjectWriter.WriteDate . . . . . . . . . . . . . . . . . . . . . . 268
10
CONTENTS
2.35.17 2.35.18 2.35.19 2.35.20 2.35.21 2.35.22 2.35.23 2.35.24 2.35.25 2.35.26 2.36.1 2.36.2 2.36.3 2.36.4 2.36.5 2.36.6 2.36.7 2.36.8 2.36.9 2.36.10 2.36.11 2.36.12 2.36.13 2.36.14 2.36.15 2.36.16 2.36.17 2.36.18 2.36.19 2.36.20 2.36.21 2.36.22 2.36.23 2.37.1 2.37.2 2.37.3 2.37.4 2.37.5
TBinaryObjectWriter.WriteCurrency . . . . . . . . . . . . . . . . . . . . 269 TBinaryObjectWriter.WriteIdent . . . . . . . . . . . . . . . . . . . . . . 269 TBinaryObjectWriter.WriteInteger . . . . . . . . . . . . . . . . . . . . . 269 TBinaryObjectWriter.WriteUInt64 . . . . . . . . . . . . . . . . . . . . . 269 TBinaryObjectWriter.WriteMethodName . . . . . . . . . . . . . . . . . 269 TBinaryObjectWriter.WriteSet . . . . . . . . . . . . . . . . . . . . . . . 269 TBinaryObjectWriter.WriteString . . . . . . . . . . . . . . . . . . . . . . 270 TBinaryObjectWriter.WriteWideString . . . . . . . . . . . . . . . . . . . 270 TBinaryObjectWriter.WriteUnicodeString . . . . . . . . . . . . . . . . . 270 TBinaryObjectWriter.WriteVariant . . . . . . . . . . . . . . . . . . . . . 270 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 Property overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 TBits.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 TBits.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 TBits.GetFSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272 TBits.SetOn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272 TBits.Clear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272 TBits.Clearall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 TBits.AndBits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 TBits.OrBits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 TBits.XorBits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 TBits.NotBits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 TBits.Get . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 TBits.Grow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 TBits.Equals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275 TBits.SetIndex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275 TBits.FindFirstBit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275 TBits.FindNextBit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276 TBits.FindPrevBit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276 TBits.OpenBit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276 TBits.Bits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277 TBits.Size . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 Property overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 TCollection.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278 TCollection.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
11
CONTENTS
2.37.6 2.37.7 2.37.8 2.37.9 2.37.10 2.37.11 2.37.12 2.37.13 2.37.14 2.37.15 2.37.16 2.37.17 2.37.18 2.37.19 2.37.20 2.37.21 2.38.1 2.38.2 2.38.3 2.38.4 2.38.5 2.38.6 2.38.7 2.39.1 2.39.2 2.39.3 2.39.4 2.39.5 2.39.6 2.39.7 2.39.8 2.39.9 2.39.10 2.40.1 2.40.2 2.40.3 2.40.4
TCollection.Owner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 TCollection.Add . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 TCollection.Assign . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279 TCollection.BeginUpdate . . . . . . . . . . . . . . . . . . . . . . . . . . 279 TCollection.Clear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280 TCollection.EndUpdate . . . . . . . . . . . . . . . . . . . . . . . . . . . 280 TCollection.Delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280 TCollection.GetEnumerator . . . . . . . . . . . . . . . . . . . . . . . . . 281 TCollection.GetNamePath . . . . . . . . . . . . . . . . . . . . . . . . . 281 TCollection.Insert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281 TCollection.FindItemID . . . . . . . . . . . . . . . . . . . . . . . . . . . 281 TCollection.Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282 TCollection.Sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282 TCollection.Count . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282 TCollection.ItemClass . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 TCollection.Items . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 Property overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284 TCollectionEnumerator.Create . . . . . . . . . . . . . . . . . . . . . . . 284 TCollectionEnumerator.GetCurrent . . . . . . . . . . . . . . . . . . . . . 284 TCollectionEnumerator.MoveNext . . . . . . . . . . . . . . . . . . . . . 284 TCollectionEnumerator.Current . . . . . . . . . . . . . . . . . . . . . . . 284 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285 Property overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285 TCollectionItem.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . 285 TCollectionItem.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . . 285 TCollectionItem.GetNamePath . . . . . . . . . . . . . . . . . . . . . . . 286 TCollectionItem.Collection . . . . . . . . . . . . . . . . . . . . . . . . . 286 TCollectionItem.ID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286 TCollectionItem.Index . . . . . . . . . . . . . . . . . . . . . . . . . . . 287 TCollectionItem.DisplayName . . . . . . . . . . . . . . . . . . . . . . . 287 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287 Interfaces overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288 Property overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
12
CONTENTS
2.40.5 2.40.6 2.40.7 2.40.8 2.40.9 2.40.10 2.40.11 2.40.12 2.40.13 2.40.14 2.40.15 2.40.16 2.40.17 2.40.18 2.40.19 2.40.20 2.40.21 2.40.22 2.40.23 2.40.24 2.40.25 2.40.26 2.40.27 2.40.28 2.40.29 2.40.30 2.40.31 2.40.32 2.40.33 2.40.34 2.40.35 2.40.36 2.40.37 2.41.1 2.41.2 2.41.3 2.41.4 2.41.5 2.41.6
TComponent.WriteState . . . . . . . . . . . . . . . . . . . . . . . . . . 288 TComponent.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289 TComponent.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289 TComponent.BeforeDestruction . . . . . . . . . . . . . . . . . . . . . . 289 TComponent.DestroyComponents . . . . . . . . . . . . . . . . . . . . . 290 TComponent.Destroying . . . . . . . . . . . . . . . . . . . . . . . . . . 290 TComponent.ExecuteAction . . . . . . . . . . . . . . . . . . . . . . . . 290 TComponent.FindComponent . . . . . . . . . . . . . . . . . . . . . . . . 290 TComponent.FreeNotication . . . . . . . . . . . . . . . . . . . . . . . 291 TComponent.RemoveFreeNotication . . . . . . . . . . . . . . . . . . . 291 TComponent.FreeOnRelease . . . . . . . . . . . . . . . . . . . . . . . . 291 TComponent.GetEnumerator . . . . . . . . . . . . . . . . . . . . . . . . 291 TComponent.GetNamePath . . . . . . . . . . . . . . . . . . . . . . . . . 291 TComponent.GetParentComponent . . . . . . . . . . . . . . . . . . . . . 292 TComponent.HasParent . . . . . . . . . . . . . . . . . . . . . . . . . . . 292 TComponent.InsertComponent . . . . . . . . . . . . . . . . . . . . . . . 292 TComponent.RemoveComponent . . . . . . . . . . . . . . . . . . . . . . 292 TComponent.SafeCallException . . . . . . . . . . . . . . . . . . . . . . 293 TComponent.SetSubComponent . . . . . . . . . . . . . . . . . . . . . . 293 TComponent.UpdateAction . . . . . . . . . . . . . . . . . . . . . . . . . 293 TComponent.IsImplementorOf . . . . . . . . . . . . . . . . . . . . . . . 293 TComponent.ReferenceInterface . . . . . . . . . . . . . . . . . . . . . . 294 TComponent.ComObject . . . . . . . . . . . . . . . . . . . . . . . . . . 294 TComponent.Components . . . . . . . . . . . . . . . . . . . . . . . . . 294 TComponent.ComponentCount . . . . . . . . . . . . . . . . . . . . . . . 294 TComponent.ComponentIndex . . . . . . . . . . . . . . . . . . . . . . . 295 TComponent.ComponentState . . . . . . . . . . . . . . . . . . . . . . . 295 TComponent.ComponentStyle . . . . . . . . . . . . . . . . . . . . . . . 295 TComponent.DesignInfo . . . . . . . . . . . . . . . . . . . . . . . . . . 296 TComponent.Owner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296 TComponent.VCLComObject . . . . . . . . . . . . . . . . . . . . . . . 296 TComponent.Name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296 TComponent.Tag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297 Property overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297 TComponentEnumerator.Create . . . . . . . . . . . . . . . . . . . . . . 297 TComponentEnumerator.GetCurrent . . . . . . . . . . . . . . . . . . . . 298 TComponentEnumerator.MoveNext . . . . . . . . . . . . . . . . . . . . 298
13
CONTENTS
2.41.7 2.42.1 2.42.2 2.42.3 2.42.4 2.42.5 2.42.6 2.42.7 2.42.8 2.43.1 2.43.2 2.43.3 2.43.4 2.43.5 2.43.6 2.43.7 2.43.8 2.43.9 2.43.10 2.43.11 2.43.12 2.43.13 2.44.1 2.44.2 2.44.3 2.44.4 2.44.5 2.44.6 2.44.7 2.44.8 2.44.9 2.45.1 2.45.2 2.45.3 2.45.4 2.45.5
TComponentEnumerator.Current . . . . . . . . . . . . . . . . . . . . . . 298 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299 Property overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299 TCustomMemoryStream.Read . . . . . . . . . . . . . . . . . . . . . . . 299 TCustomMemoryStream.Seek . . . . . . . . . . . . . . . . . . . . . . . 299 TCustomMemoryStream.SaveToStream . . . . . . . . . . . . . . . . . . 299 TCustomMemoryStream.SaveToFile . . . . . . . . . . . . . . . . . . . . 300 TCustomMemoryStream.Memory . . . . . . . . . . . . . . . . . . . . . 300 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301 Property overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301 TDataModule.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301 TDataModule.CreateNew . . . . . . . . . . . . . . . . . . . . . . . . . . 302 TDataModule.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302 TDataModule.AfterConstruction . . . . . . . . . . . . . . . . . . . . . . 302 TDataModule.BeforeDestruction . . . . . . . . . . . . . . . . . . . . . . 302 TDataModule.DesignOffset . . . . . . . . . . . . . . . . . . . . . . . . . 303 TDataModule.DesignSize . . . . . . . . . . . . . . . . . . . . . . . . . . 303 TDataModule.OnCreate . . . . . . . . . . . . . . . . . . . . . . . . . . . 303 TDataModule.OnDestroy . . . . . . . . . . . . . . . . . . . . . . . . . . 303 TDataModule.OldCreateOrder . . . . . . . . . . . . . . . . . . . . . . . 304 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304 Property overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304 TFiler.DeneProperty . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304 TFiler.DeneBinaryProperty . . . . . . . . . . . . . . . . . . . . . . . . 305 TFiler.Root . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305 TFiler.LookupRoot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305 TFiler.Ancestor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305 TFiler.IgnoreChildren . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306 Property overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306 TFileStream.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306 TFileStream.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
14
CONTENTS
2.45.6 2.46.1 2.46.2 2.46.3 2.46.4 2.46.5 2.46.6 2.46.7 2.46.8 2.46.9 2.46.10 2.46.11 2.46.12 2.46.13 2.46.14 2.46.15 2.46.16 2.46.17 2.46.18 2.46.19 2.46.20 2.46.21 2.46.22 2.46.23 2.46.24 2.46.25 2.46.26 2.46.27 2.47.1 2.47.2 2.47.3 2.47.4 2.47.5 2.47.6 2.47.7 2.48.1 2.48.2
TFileStream.FileName . . . . . . . . . . . . . . . . . . . . . . . . . . . 307 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308 Property overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308 TFPList.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308 TFPList.AddList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308 TFPList.Add . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309 TFPList.Clear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309 TFPList.Delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309 TFPList.Error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309 TFPList.Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 TFPList.Expand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 TFPList.Extract . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 TFPList.First . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 TFPList.GetEnumerator . . . . . . . . . . . . . . . . . . . . . . . . . . . 311 TFPList.IndexOf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311 TFPList.Insert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311 TFPList.Last . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311 TFPList.Move . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312 TFPList.Assign . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312 TFPList.Remove . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312 TFPList.Pack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312 TFPList.Sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313 TFPList.ForEachCall . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313 TFPList.Capacity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313 TFPList.Count . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314 TFPList.Items . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314 TFPList.List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314 Property overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315 TFPListEnumerator.Create . . . . . . . . . . . . . . . . . . . . . . . . . 315 TFPListEnumerator.GetCurrent . . . . . . . . . . . . . . . . . . . . . . . 315 TFPListEnumerator.MoveNext . . . . . . . . . . . . . . . . . . . . . . . 315 TFPListEnumerator.Current . . . . . . . . . . . . . . . . . . . . . . . . . 315 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
15
CONTENTS
2.48.3 2.48.4 2.48.5 2.48.6 2.48.7 2.48.8 2.48.9 2.49.1 2.49.2 2.49.3 2.49.4 2.49.5 2.50.1 2.50.2 2.50.3 2.50.4 2.50.5 2.50.6 2.50.7 2.50.8 2.50.9 2.50.10 2.50.11 2.50.12 2.50.13 2.50.14 2.50.15 2.50.16 2.50.17 2.50.18 2.50.19 2.50.20 2.50.21 2.50.22 2.51.1 2.51.2 2.51.3
Property overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316 THandleStream.SetSize . . . . . . . . . . . . . . . . . . . . . . . . . . . 316 THandleStream.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . 316 THandleStream.Read . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317 THandleStream.Write . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317 THandleStream.Seek . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317 THandleStream.Handle . . . . . . . . . . . . . . . . . . . . . . . . . . . 317 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318 Interfaces overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318 TInterfacedPersistent.QueryInterface . . . . . . . . . . . . . . . . . . . . 318 TInterfacedPersistent.AfterConstruction . . . . . . . . . . . . . . . . . . 318 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318 Interfaces overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319 Property overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319 TInterfaceList.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319 TInterfaceList.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . . . 319 TInterfaceList.Clear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320 TInterfaceList.Delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320 TInterfaceList.Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . 320 TInterfaceList.First . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320 TInterfaceList.GetEnumerator . . . . . . . . . . . . . . . . . . . . . . . 321 TInterfaceList.IndexOf . . . . . . . . . . . . . . . . . . . . . . . . . . . 321 TInterfaceList.Add . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321 TInterfaceList.Insert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321 TInterfaceList.Last . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322 TInterfaceList.Remove . . . . . . . . . . . . . . . . . . . . . . . . . . . 322 TInterfaceList.Lock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322 TInterfaceList.Unlock . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322 TInterfaceList.Expand . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 TInterfaceList.Capacity . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 TInterfaceList.Count . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 TInterfaceList.Items . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324 Property overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
16
CONTENTS
2.51.4 2.51.5 2.51.6 2.51.7 2.52.1 2.52.2 2.52.3 2.52.4 2.52.5 2.52.6 2.52.7 2.52.8 2.52.9 2.52.10 2.52.11 2.52.12 2.52.13 2.52.14 2.52.15 2.52.16 2.52.17 2.52.18 2.52.19 2.52.20 2.52.21 2.52.22 2.52.23 2.52.24 2.52.25 2.52.26 2.52.27 2.53.1 2.53.2 2.53.3 2.53.4 2.53.5 2.53.6 2.53.7
TInterfaceListEnumerator.Create . . . . . . . . . . . . . . . . . . . . . . 324 TInterfaceListEnumerator.GetCurrent . . . . . . . . . . . . . . . . . . . 324 TInterfaceListEnumerator.MoveNext . . . . . . . . . . . . . . . . . . . . 325 TInterfaceListEnumerator.Current . . . . . . . . . . . . . . . . . . . . . 325 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326 Property overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326 TList.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326 TList.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326 TList.AddList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327 TList.Add . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327 TList.Clear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327 TList.Delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327 TList.Error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328 TList.Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328 TList.Expand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328 TList.Extract . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328 TList.First . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329 TList.GetEnumerator . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329 TList.IndexOf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329 TList.Insert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329 TList.Last . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330 TList.Move . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330 TList.Assign . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330 TList.Remove . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330 TList.Pack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331 TList.Sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331 TList.Capacity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331 TList.Count . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332 TList.Items . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332 TList.List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332 Property overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333 TListEnumerator.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . 333 TListEnumerator.GetCurrent . . . . . . . . . . . . . . . . . . . . . . . . 333 TListEnumerator.MoveNext . . . . . . . . . . . . . . . . . . . . . . . . 333 TListEnumerator.Current . . . . . . . . . . . . . . . . . . . . . . . . . . 333
17
CONTENTS
2.54 TMemoryStream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334 2.54.1 2.54.2 2.54.3 2.54.4 2.54.5 2.54.6 2.54.7 2.54.8 2.55.1 2.55.2 2.55.3 2.56.1 2.56.2 2.56.3 2.56.4 2.56.5 2.56.6 2.56.7 2.57.1 2.57.2 2.57.3 2.57.4 2.57.5 2.57.6 2.57.7 2.57.8 2.57.9 2.57.10 2.57.11 2.57.12 2.57.13 2.57.14 2.57.15 2.57.16 2.57.17 2.57.18 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334 TMemoryStream.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . . 334 TMemoryStream.Clear . . . . . . . . . . . . . . . . . . . . . . . . . . . 334 TMemoryStream.LoadFromStream . . . . . . . . . . . . . . . . . . . . . 334 TMemoryStream.LoadFromFile . . . . . . . . . . . . . . . . . . . . . . 335 TMemoryStream.SetSize . . . . . . . . . . . . . . . . . . . . . . . . . . 335 TMemoryStream.Write . . . . . . . . . . . . . . . . . . . . . . . . . . . 335 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336 TOwnedCollection.Create . . . . . . . . . . . . . . . . . . . . . . . . . . 336 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337 Property overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337 TOwnerStream.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337 TOwnerStream.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . . . 337 TOwnerStream.Source . . . . . . . . . . . . . . . . . . . . . . . . . . . 337 TOwnerStream.SourceOwner . . . . . . . . . . . . . . . . . . . . . . . . 338 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338 Property overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339 TParser.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339 TParser.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339 TParser.CheckToken . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339 TParser.CheckTokenSymbol . . . . . . . . . . . . . . . . . . . . . . . . 339 TParser.Error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340 TParser.ErrorFmt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340 TParser.ErrorStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340 TParser.HexToBinary . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340 TParser.NextToken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341 TParser.SourcePos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341 TParser.TokenComponentIdent . . . . . . . . . . . . . . . . . . . . . . . 341 TParser.TokenFloat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342 TParser.TokenInt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342 TParser.TokenString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342 TParser.TokenWideString . . . . . . . . . . . . . . . . . . . . . . . . . . 343
18
CONTENTS
2.57.19 2.57.20 2.57.21 2.57.22 2.58.1 2.58.2 2.58.3 2.58.4 2.58.5 2.59.1 2.59.2 2.59.3 2.59.4 2.59.5 2.59.6 2.59.7 2.60.1 2.60.2 2.60.3 2.60.4 2.60.5 2.60.6 2.60.7 2.60.8 2.60.9 2.60.10 2.60.11 2.60.12 2.60.13 2.60.14 2.60.15 2.60.16 2.60.17 2.60.18 2.60.19 2.60.20 2.60.21
TParser.TokenSymbolIs . . . . . . . . . . . . . . . . . . . . . . . . . . . 343 TParser.FloatType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343 TParser.SourceLine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344 TParser.Token . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345 TPersistent.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345 TPersistent.Assign . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345 TPersistent.GetNamePath . . . . . . . . . . . . . . . . . . . . . . . . . . 345 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346 TProxyStream.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346 TProxyStream.Read . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346 TProxyStream.Write . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346 TProxyStream.Seek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347 TProxyStream.Check . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348 Property overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349 TReader.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349 TReader.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349 TReader.BeginReferences . . . . . . . . . . . . . . . . . . . . . . . . . . 349 TReader.CheckValue . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350 TReader.DeneProperty . . . . . . . . . . . . . . . . . . . . . . . . . . . 350 TReader.DeneBinaryProperty . . . . . . . . . . . . . . . . . . . . . . . 350 TReader.EndOfList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350 TReader.EndReferences . . . . . . . . . . . . . . . . . . . . . . . . . . . 350 TReader.FixupReferences . . . . . . . . . . . . . . . . . . . . . . . . . . 351 TReader.NextValue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351 TReader.Read . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351 TReader.ReadBoolean . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351 TReader.ReadChar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351 TReader.ReadWideChar . . . . . . . . . . . . . . . . . . . . . . . . . . . 352 TReader.ReadUnicodeChar . . . . . . . . . . . . . . . . . . . . . . . . . 352 TReader.ReadCollection . . . . . . . . . . . . . . . . . . . . . . . . . . 352 TReader.ReadComponent . . . . . . . . . . . . . . . . . . . . . . . . . . 352 TReader.ReadComponents . . . . . . . . . . . . . . . . . . . . . . . . . 352
19
CONTENTS
2.60.22 2.60.23 2.60.24 2.60.25 2.60.26 2.60.27 2.60.28 2.60.29 2.60.30 2.60.31 2.60.32 2.60.33 2.60.34 2.60.35 2.60.36 2.60.37 2.60.38 2.60.39 2.60.40 2.60.41 2.60.42 2.60.43 2.60.44 2.60.45 2.60.46 2.60.47 2.60.48 2.60.49 2.60.50 2.60.51 2.61.1 2.61.2 2.61.3 2.61.4 2.61.5 2.61.6 2.61.7 2.61.8
TReader.ReadFloat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353 TReader.ReadSingle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353 TReader.ReadDate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353 TReader.ReadCurrency . . . . . . . . . . . . . . . . . . . . . . . . . . . 353 TReader.ReadIdent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353 TReader.ReadInteger . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354 TReader.ReadInt64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354 TReader.ReadSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354 TReader.ReadListBegin . . . . . . . . . . . . . . . . . . . . . . . . . . . 354 TReader.ReadListEnd . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354 TReader.ReadRootComponent . . . . . . . . . . . . . . . . . . . . . . . 355 TReader.ReadVariant . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355 TReader.ReadString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355 TReader.ReadWideString . . . . . . . . . . . . . . . . . . . . . . . . . . 355 TReader.ReadUnicodeString . . . . . . . . . . . . . . . . . . . . . . . . 355 TReader.ReadValue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356 TReader.CopyValue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356 TReader.Driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356 TReader.Owner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356 TReader.Parent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356 TReader.OnError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357 TReader.OnPropertyNotFound . . . . . . . . . . . . . . . . . . . . . . . 357 TReader.OnFindMethod . . . . . . . . . . . . . . . . . . . . . . . . . . 357 TReader.OnSetMethodProperty . . . . . . . . . . . . . . . . . . . . . . . 357 TReader.OnSetName . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358 TReader.OnReferenceName . . . . . . . . . . . . . . . . . . . . . . . . 358 TReader.OnAncestorNotFound . . . . . . . . . . . . . . . . . . . . . . . 358 TReader.OnCreateComponent . . . . . . . . . . . . . . . . . . . . . . . 358 TReader.OnFindComponentClass . . . . . . . . . . . . . . . . . . . . . . 358 TReader.OnReadStringProperty . . . . . . . . . . . . . . . . . . . . . . 359 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359 Property overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359 TRecall.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360 TRecall.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360 TRecall.Store . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360 TRecall.Forget . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360 TRecall.Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
20
CONTENTS
2.62.1 2.62.2 2.62.3 2.62.4 2.62.5 2.63.1 2.63.2 2.63.3 2.63.4 2.63.5 2.63.6 2.63.7 2.63.8 2.63.9 2.63.10 2.63.11 2.63.12 2.63.13 2.63.14 2.63.15 2.63.16 2.63.17 2.63.18 2.63.19 2.63.20 2.63.21 2.63.22 2.63.23 2.63.24 2.63.25 2.63.26 2.63.27 2.63.28 2.63.29 2.63.30 2.63.31 2.64.1 2.64.2
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361 TResourceStream.Create . . . . . . . . . . . . . . . . . . . . . . . . . . 361 TResourceStream.CreateFromID . . . . . . . . . . . . . . . . . . . . . . 361 TResourceStream.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . 362 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362 Property overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363 TStream.SetSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363 TStream.Read . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363 TStream.Write . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363 TStream.Seek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364 TStream.ReadBuffer . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364 TStream.WriteBuffer . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365 TStream.CopyFrom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365 TStream.ReadComponent . . . . . . . . . . . . . . . . . . . . . . . . . . 365 TStream.ReadComponentRes . . . . . . . . . . . . . . . . . . . . . . . . 366 TStream.WriteComponent . . . . . . . . . . . . . . . . . . . . . . . . . 366 TStream.WriteComponentRes . . . . . . . . . . . . . . . . . . . . . . . 366 TStream.WriteDescendent . . . . . . . . . . . . . . . . . . . . . . . . . 366 TStream.WriteDescendentRes . . . . . . . . . . . . . . . . . . . . . . . 367 TStream.WriteResourceHeader . . . . . . . . . . . . . . . . . . . . . . . 367 TStream.FixupResourceHeader . . . . . . . . . . . . . . . . . . . . . . . 367 TStream.ReadResHeader . . . . . . . . . . . . . . . . . . . . . . . . . . 368 TStream.ReadByte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368 TStream.ReadWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368 TStream.ReadDWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368 TStream.ReadQWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369 TStream.ReadAnsiString . . . . . . . . . . . . . . . . . . . . . . . . . . 369 TStream.WriteByte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369 TStream.WriteWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370 TStream.WriteDWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370 TStream.WriteQWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370 TStream.WriteAnsiString . . . . . . . . . . . . . . . . . . . . . . . . . . 370 TStream.Position . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371 TStream.Size . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371 Interfaces overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372
21
CONTENTS
2.64.3 2.64.4 2.64.5 2.64.6 2.64.7 2.64.8 2.64.9 2.64.10 2.64.11 2.64.12 2.64.13 2.64.14 2.64.15 2.64.16 2.64.17 2.64.18 2.64.19 2.65.1 2.65.2 2.65.3 2.65.4 2.65.5 2.65.6 2.65.7 2.65.8 2.65.9 2.65.10 2.65.11 2.65.12 2.65.13 2.65.14 2.65.15 2.65.16 2.65.17 2.65.18 2.65.19 2.65.20 2.66.1
Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372 Property overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372 TStreamAdapter.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . 372 TStreamAdapter.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . . 372 TStreamAdapter.Read . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373 TStreamAdapter.Write . . . . . . . . . . . . . . . . . . . . . . . . . . . 373 TStreamAdapter.Seek . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373 TStreamAdapter.SetSize . . . . . . . . . . . . . . . . . . . . . . . . . . 373 TStreamAdapter.CopyTo . . . . . . . . . . . . . . . . . . . . . . . . . . 374 TStreamAdapter.Commit . . . . . . . . . . . . . . . . . . . . . . . . . . 374 TStreamAdapter.Revert . . . . . . . . . . . . . . . . . . . . . . . . . . . 374 TStreamAdapter.LockRegion . . . . . . . . . . . . . . . . . . . . . . . . 374 TStreamAdapter.UnlockRegion . . . . . . . . . . . . . . . . . . . . . . . 375 TStreamAdapter.Stat . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375 TStreamAdapter.Clone . . . . . . . . . . . . . . . . . . . . . . . . . . . 375 TStreamAdapter.Stream . . . . . . . . . . . . . . . . . . . . . . . . . . . 375 TStreamAdapter.StreamOwnership . . . . . . . . . . . . . . . . . . . . . 376 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376 Property overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376 TStringList.InsertItem . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377 TStringList.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377 TStringList.Add . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377 TStringList.Clear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377 TStringList.Delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377 TStringList.Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378 TStringList.Find . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378 TStringList.IndexOf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378 TStringList.Insert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378 TStringList.Sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379 TStringList.CustomSort . . . . . . . . . . . . . . . . . . . . . . . . . . . 379 TStringList.Duplicates . . . . . . . . . . . . . . . . . . . . . . . . . . . 379 TStringList.Sorted . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 379 TStringList.CaseSensitive . . . . . . . . . . . . . . . . . . . . . . . . . . 380 TStringList.OnChange . . . . . . . . . . . . . . . . . . . . . . . . . . . 380 TStringList.OnChanging . . . . . . . . . . . . . . . . . . . . . . . . . . 380 TStringList.OwnsObjects . . . . . . . . . . . . . . . . . . . . . . . . . . 381 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
22
CONTENTS
2.66.2 2.66.3 2.66.4 2.66.5 2.66.6 2.66.7 2.66.8 2.66.9 2.66.10 2.66.11 2.66.12 2.66.13 2.66.14 2.66.15 2.66.16 2.66.17 2.66.18 2.66.19 2.66.20 2.66.21 2.66.22 2.66.23 2.66.24 2.66.25 2.66.26 2.66.27 2.66.28 2.66.29 2.66.30 2.66.31 2.66.32 2.66.33 2.66.34 2.66.35 2.66.36 2.66.37 2.66.38 2.66.39 2.66.40 2.66.41
Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382 Property overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383 TStrings.Error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383 TStrings.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383 TStrings.Add . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383 TStrings.AddObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384 TStrings.Append . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384 TStrings.AddStrings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384 TStrings.Assign . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384 TStrings.BeginUpdate . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385 TStrings.Clear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385 TStrings.Delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385 TStrings.EndUpdate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386 TStrings.Equals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386 TStrings.Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386 TStrings.GetEnumerator . . . . . . . . . . . . . . . . . . . . . . . . . . 387 TStrings.GetText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387 TStrings.IndexOf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387 TStrings.IndexOfName . . . . . . . . . . . . . . . . . . . . . . . . . . . 387 TStrings.IndexOfObject . . . . . . . . . . . . . . . . . . . . . . . . . . . 388 TStrings.Insert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388 TStrings.InsertObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388 TStrings.LoadFromFile . . . . . . . . . . . . . . . . . . . . . . . . . . . 389 TStrings.LoadFromStream . . . . . . . . . . . . . . . . . . . . . . . . . 389 TStrings.Move . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389 TStrings.SaveToFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390 TStrings.SaveToStream . . . . . . . . . . . . . . . . . . . . . . . . . . . 390 TStrings.SetText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390 TStrings.GetNameValue . . . . . . . . . . . . . . . . . . . . . . . . . . 391 TStrings.ExtractName . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391 TStrings.TextLineBreakStyle . . . . . . . . . . . . . . . . . . . . . . . . 391 TStrings.Delimiter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391 TStrings.DelimitedText . . . . . . . . . . . . . . . . . . . . . . . . . . . 392 TStrings.StrictDelimiter . . . . . . . . . . . . . . . . . . . . . . . . . . . 392 TStrings.QuoteChar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392 TStrings.NameValueSeparator . . . . . . . . . . . . . . . . . . . . . . . 393 TStrings.ValueFromIndex . . . . . . . . . . . . . . . . . . . . . . . . . . 393 TStrings.Capacity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393 TStrings.CommaText . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393 TStrings.Count . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 394
23
CONTENTS
2.66.42 2.66.43 2.66.44 2.66.45 2.66.46 2.66.47 2.67.1 2.67.2 2.67.3 2.67.4 2.67.5 2.67.6 2.67.7 2.68.1 2.68.2 2.68.3 2.68.4 2.68.5 2.68.6 2.68.7 2.68.8 2.68.9 2.68.10 2.69.1 2.70.1 2.70.2 2.70.3 2.70.4 2.70.5 2.70.6 2.70.7 2.70.8 2.70.9 2.70.10 2.70.11 2.70.12
TStrings.Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395 TStrings.Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395 TStrings.Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395 TStrings.Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396 TStrings.Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396 TStrings.StringsAdapter . . . . . . . . . . . . . . . . . . . . . . . . . . . 397 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397 Property overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397 TStringsEnumerator.Create . . . . . . . . . . . . . . . . . . . . . . . . . 397 TStringsEnumerator.GetCurrent . . . . . . . . . . . . . . . . . . . . . . 397 TStringsEnumerator.MoveNext . . . . . . . . . . . . . . . . . . . . . . . 398 TStringsEnumerator.Current . . . . . . . . . . . . . . . . . . . . . . . . 398 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 398 Property overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399 TStringStream.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399 TStringStream.Read . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399 TStringStream.ReadString . . . . . . . . . . . . . . . . . . . . . . . . . 399 TStringStream.Seek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399 TStringStream.Write . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400 TStringStream.WriteString . . . . . . . . . . . . . . . . . . . . . . . . . 400 TStringStream.DataString . . . . . . . . . . . . . . . . . . . . . . . . . . 400 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401 Property overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401 TThread.Synchronize . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401 TThread.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401 TThread.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401 TThread.AfterConstruction . . . . . . . . . . . . . . . . . . . . . . . . . 402 TThread.Start . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402 TThread.Resume . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402 TThread.Suspend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402 TThread.Terminate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402 TThread.WaitFor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403
24
CONTENTS
2.70.13 2.70.14 2.70.15 2.70.16 2.70.17 2.70.18 2.70.19 2.71.1 2.71.2 2.71.3 2.71.4 2.71.5 2.71.6 2.71.7 2.71.8 2.71.9 2.71.10 2.71.11 2.72.1 2.72.2 2.72.3 2.72.4 2.72.5 2.72.6 2.72.7 2.72.8 2.72.9 2.72.10 2.72.11 2.72.12 2.72.13 2.72.14 2.72.15 2.72.16 2.72.17 2.72.18 2.72.19 2.72.20
TThread.FreeOnTerminate . . . . . . . . . . . . . . . . . . . . . . . . . 403 TThread.Handle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403 TThread.Priority . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403 TThread.Suspended . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403 TThread.ThreadID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404 TThread.OnTerminate . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404 TThread.FatalException . . . . . . . . . . . . . . . . . . . . . . . . . . . 404 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404 Property overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405 TThreadList.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405 TThreadList.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405 TThreadList.Add . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405 TThreadList.Clear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405 TThreadList.LockList . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406 TThreadList.Remove . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406 TThreadList.UnlockList . . . . . . . . . . . . . . . . . . . . . . . . . . . 406 TThreadList.Duplicates . . . . . . . . . . . . . . . . . . . . . . . . . . . 406 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407 Property overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408 TWriter.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408 TWriter.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408 TWriter.DeneProperty . . . . . . . . . . . . . . . . . . . . . . . . . . . 408 TWriter.DeneBinaryProperty . . . . . . . . . . . . . . . . . . . . . . . 408 TWriter.Write . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409 TWriter.WriteBoolean . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409 TWriter.WriteCollection . . . . . . . . . . . . . . . . . . . . . . . . . . 409 TWriter.WriteComponent . . . . . . . . . . . . . . . . . . . . . . . . . . 409 TWriter.WriteChar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409 TWriter.WriteWideChar . . . . . . . . . . . . . . . . . . . . . . . . . . . 410 TWriter.WriteDescendent . . . . . . . . . . . . . . . . . . . . . . . . . . 410 TWriter.WriteFloat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410 TWriter.WriteSingle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410 TWriter.WriteDate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410 TWriter.WriteCurrency . . . . . . . . . . . . . . . . . . . . . . . . . . . 411 TWriter.WriteIdent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411 TWriter.WriteInteger . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411
25
CONTENTS
2.72.21 2.72.22 2.72.23 2.72.24 2.72.25 2.72.26 2.72.27 2.72.28 2.72.29 2.72.30 2.72.31 2.72.32 2.72.33 2.72.34 3
TWriter.WriteSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411 TWriter.WriteListBegin . . . . . . . . . . . . . . . . . . . . . . . . . . . 411 TWriter.WriteListEnd . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412 TWriter.WriteRootComponent . . . . . . . . . . . . . . . . . . . . . . . 412 TWriter.WriteString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412 TWriter.WriteWideString . . . . . . . . . . . . . . . . . . . . . . . . . . 412 TWriter.WriteUnicodeString . . . . . . . . . . . . . . . . . . . . . . . . 412 TWriter.WriteVariant . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413 TWriter.RootAncestor . . . . . . . . . . . . . . . . . . . . . . . . . . . . 413 TWriter.OnFindAncestor . . . . . . . . . . . . . . . . . . . . . . . . . . 413 TWriter.OnWriteMethodProperty . . . . . . . . . . . . . . . . . . . . . . 413 TWriter.OnWriteStringProperty . . . . . . . . . . . . . . . . . . . . . . 414 TWriter.Driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414 TWriter.PropertyPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414 415
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416 Constants, types and variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416 4.2.1 4.3.1 4.3.2 4.3.3 4.3.4 Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416 CAlloc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416 Free . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416 Malloc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417 ReAlloc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417 418 Procedures and functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418 Constants, types and variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418 5.2.1 5.2.2 5.2.3 Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418 Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421 AssignCrt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422 ClrEol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423 ClrScr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424 cursorbig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424 cursoroff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424 cursoron . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425
5.3
Procedures and functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422 5.3.1 5.3.2 5.3.3 5.3.4 5.3.5 5.3.6
26
CONTENTS
5.3.7 5.3.8 5.3.9 5.3.10 5.3.11 5.3.12 5.3.13 5.3.14 5.3.15 5.3.16 5.3.17 5.3.18 5.3.19 5.3.20 5.3.21 5.3.22 5.3.23 6
Delay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425 DelLine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425 GotoXY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426 HighVideo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427 InsLine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427 KeyPressed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428 LowVideo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428 NormVideo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429 NoSound . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429 ReadKey . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429 Sound . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 430 TextBackground . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 430 TextColor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431 TextMode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432 WhereX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432 WhereY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432 Window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433 434
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434 Procedures and functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434 6.2.1 SetCThreadManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434 435
Used units . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435 Constants, types and variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435 7.3.1 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.4.6 7.4.7 7.4.8 7.4.9 7.4.10 7.4.11 7.4.12 Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435 operator *(clongdouble, Double): Double . . . . . . . . . . . . . . . . . 440 operator *(Double, clongdouble): Double . . . . . . . . . . . . . . . . . 440 operator +(clongdouble, Double): Double . . . . . . . . . . . . . . . . . 441 operator +(Double, clongdouble): Double . . . . . . . . . . . . . . . . . 441 operator -(clongdouble, Double): Double . . . . . . . . . . . . . . . . . . 441 operator -(Double, clongdouble): Double . . . . . . . . . . . . . . . . . . 441 operator /(clongdouble, Double): Double . . . . . . . . . . . . . . . . . . 442 operator /(Double, clongdouble): Double . . . . . . . . . . . . . . . . . . 442 operator :=(clongdouble): Double . . . . . . . . . . . . . . . . . . . . . 442 operator :=(Double): clongdouble . . . . . . . . . . . . . . . . . . . . . 442 operator <(clongdouble, Double): Boolean . . . . . . . . . . . . . . . . . 442 operator <(Double, clongdouble): Boolean . . . . . . . . . . . . . . . . . 443 27 Procedures and functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440
CONTENTS
operator <=(clongdouble, Double): Boolean . . . . . . . . . . . . . . . . 443 operator <=(Double, clongdouble): Boolean . . . . . . . . . . . . . . . . 443 operator =(clongdouble, Double): Boolean . . . . . . . . . . . . . . . . . 443 operator =(Double, clongdouble): Boolean . . . . . . . . . . . . . . . . . 444 operator >(clongdouble, Double): Boolean . . . . . . . . . . . . . . . . . 444 operator >(Double, clongdouble): Boolean . . . . . . . . . . . . . . . . . 444 operator >=(clongdouble, Double): Boolean . . . . . . . . . . . . . . . . 444 operator >=(Double, clongdouble): Boolean . . . . . . . . . . . . . . . . 445 446
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446 Procedures and functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446 8.2.1 SetCWidestringManager . . . . . . . . . . . . . . . . . . . . . . . . . . 446 447
Used units . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447 Constants, types and variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447 9.3.1 9.4.1 9.4.2 9.4.3 9.4.4 9.4.5 9.4.6 9.4.7 9.4.8 9.4.9 9.4.10 9.4.11 9.4.12 9.4.13 9.4.14 9.4.15 9.4.16 9.4.17 9.4.18 9.4.19 9.4.20 9.4.21 Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447 CompareDate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449 CompareDateTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450 CompareTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451 DateOf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452 DateTimeToDosDateTime . . . . . . . . . . . . . . . . . . . . . . . . . 453 DateTimeToJulianDate . . . . . . . . . . . . . . . . . . . . . . . . . . . 453 DateTimeToMac . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453 DateTimeToModiedJulianDate . . . . . . . . . . . . . . . . . . . . . . 454 DateTimeToUnix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454 DayOf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454 DayOfTheMonth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454 DayOfTheWeek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455 DayOfTheYear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455 DaysBetween . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456 DaysInAMonth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456 DaysInAYear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457 DaysInMonth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458 DaysInYear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458 DaySpan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459 DecodeDateDay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459 DecodeDateMonthWeek . . . . . . . . . . . . . . . . . . . . . . . . . . 460 28 Procedures and functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449
CONTENTS
9.4.22 9.4.23 9.4.24 9.4.25 9.4.26 9.4.27 9.4.28 9.4.29 9.4.30 9.4.31 9.4.32 9.4.33 9.4.34 9.4.35 9.4.36 9.4.37 9.4.38 9.4.39 9.4.40 9.4.41 9.4.42 9.4.43 9.4.44 9.4.45 9.4.46 9.4.47 9.4.48 9.4.49 9.4.50 9.4.51 9.4.52 9.4.53 9.4.54 9.4.55 9.4.56 9.4.57 9.4.58 9.4.59 9.4.60 9.4.61
DecodeDateTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461 DecodeDateWeek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461 DecodeDayOfWeekInMonth . . . . . . . . . . . . . . . . . . . . . . . . 462 DosDateTimeToDateTime . . . . . . . . . . . . . . . . . . . . . . . . . 462 EncodeDateDay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463 EncodeDateMonthWeek . . . . . . . . . . . . . . . . . . . . . . . . . . 463 EncodeDateTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463 EncodeDateWeek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464 EncodeDayOfWeekInMonth . . . . . . . . . . . . . . . . . . . . . . . . 464 EncodeTimeInterval . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464 EndOfADay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465 EndOfAMonth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465 EndOfAWeek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466 EndOfAYear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467 EndOfTheDay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467 EndOfTheMonth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468 EndOfTheWeek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468 EndOfTheYear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469 HourOf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469 HourOfTheDay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470 HourOfTheMonth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470 HourOfTheWeek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470 HourOfTheYear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471 HoursBetween . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471 HourSpan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472 IncDay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473 IncHour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473 IncMilliSecond . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474 IncMinute . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 474 IncSecond . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475 IncWeek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475 IncYear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476 InvalidDateDayError . . . . . . . . . . . . . . . . . . . . . . . . . . . . 476 InvalidDateMonthWeekError . . . . . . . . . . . . . . . . . . . . . . . . 477 InvalidDateTimeError . . . . . . . . . . . . . . . . . . . . . . . . . . . . 477 InvalidDateWeekError . . . . . . . . . . . . . . . . . . . . . . . . . . . . 477 InvalidDayOfWeekInMonthError . . . . . . . . . . . . . . . . . . . . . . 478 IsInLeapYear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 478 IsPM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479 IsSameDay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 479
29
CONTENTS
9.4.62 9.4.63 9.4.64 9.4.65 9.4.66 9.4.67 9.4.68 9.4.69 9.4.70 9.4.71 9.4.72 9.4.73 9.4.74 9.4.75 9.4.76 9.4.77 9.4.78 9.4.79 9.4.80 9.4.81 9.4.82 9.4.83 9.4.84 9.4.85 9.4.86 9.4.87 9.4.88 9.4.89 9.4.90 9.4.91 9.4.92 9.4.93 9.4.94 9.4.95 9.4.96 9.4.97 9.4.98 9.4.99 9.4.100 9.4.101
IsSameMonth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480 IsToday . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480 IsValidDate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480 IsValidDateDay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 481 IsValidDateMonthWeek . . . . . . . . . . . . . . . . . . . . . . . . . . . 481 IsValidDateTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 482 IsValidDateWeek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483 IsValidTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 484 JulianDateToDateTime . . . . . . . . . . . . . . . . . . . . . . . . . . . 484 MacTimeStampToUnix . . . . . . . . . . . . . . . . . . . . . . . . . . . 485 MacToDateTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485 MilliSecondOf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485 MilliSecondOfTheDay . . . . . . . . . . . . . . . . . . . . . . . . . . . 485 MilliSecondOfTheHour . . . . . . . . . . . . . . . . . . . . . . . . . . . 486 MilliSecondOfTheMinute . . . . . . . . . . . . . . . . . . . . . . . . . . 486 MilliSecondOfTheMonth . . . . . . . . . . . . . . . . . . . . . . . . . . 486 MilliSecondOfTheSecond . . . . . . . . . . . . . . . . . . . . . . . . . . 486 MilliSecondOfTheWeek . . . . . . . . . . . . . . . . . . . . . . . . . . 487 MilliSecondOfTheYear . . . . . . . . . . . . . . . . . . . . . . . . . . . 487 MilliSecondsBetween . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488 MilliSecondSpan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488 MinuteOf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489 MinuteOfTheDay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489 MinuteOfTheHour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490 MinuteOfTheMonth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490 MinuteOfTheWeek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491 MinuteOfTheYear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491 MinutesBetween . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491 MinuteSpan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492 ModiedJulianDateToDateTime . . . . . . . . . . . . . . . . . . . . . . 493 MonthOf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493 MonthOfTheYear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493 MonthsBetween . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494 MonthSpan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495 NthDayOfWeek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 495 PreviousDayOfWeek . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496 RecodeDate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 496 RecodeDateTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497 RecodeDay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 498 RecodeHour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499
30
CONTENTS
9.4.102 9.4.103 9.4.104 9.4.105 9.4.106 9.4.107 9.4.108 9.4.109 9.4.110 9.4.111 9.4.112 9.4.113 9.4.114 9.4.115 9.4.116 9.4.117 9.4.118 9.4.119 9.4.120 9.4.121 9.4.122 9.4.123 9.4.124 9.4.125 9.4.126 9.4.127 9.4.128 9.4.129 9.4.130 9.4.131 9.4.132 9.4.133 9.4.134 9.4.135 9.4.136 9.4.137 9.4.138 9.4.139 9.4.140 9.4.141
RecodeMilliSecond . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 499 RecodeMinute . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 500 RecodeMonth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 501 RecodeSecond . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 501 RecodeTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502 RecodeYear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503 SameDate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503 SameDateTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504 SameTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505 ScanDateTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 506 SecondOf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 506 SecondOfTheDay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 506 SecondOfTheHour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507 SecondOfTheMinute . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507 SecondOfTheMonth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 508 SecondOfTheWeek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 508 SecondOfTheYear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 508 SecondsBetween . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 508 SecondSpan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509 StartOfADay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 510 StartOfAMonth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511 StartOfAWeek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511 StartOfAYear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512 StartOfTheDay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513 StartOfTheMonth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513 StartOfTheWeek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514 StartOfTheYear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514 TimeOf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515 Today . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515 Tomorrow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 516 TryEncodeDateDay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 516 TryEncodeDateMonthWeek . . . . . . . . . . . . . . . . . . . . . . . . . 517 TryEncodeDateTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517 TryEncodeDateWeek . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518 TryEncodeDayOfWeekInMonth . . . . . . . . . . . . . . . . . . . . . . 519 TryEncodeTimeInterval . . . . . . . . . . . . . . . . . . . . . . . . . . . 520 TryJulianDateToDateTime . . . . . . . . . . . . . . . . . . . . . . . . . 520 TryModiedJulianDateToDateTime . . . . . . . . . . . . . . . . . . . . 520 TryRecodeDateTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . 520 UnixTimeStampToMac . . . . . . . . . . . . . . . . . . . . . . . . . . . 521
31
CONTENTS
9.4.142 9.4.143 9.4.144 9.4.145 9.4.146 9.4.147 9.4.148 9.4.149 9.4.150 9.4.151 9.4.152 9.4.153 9.4.154 9.4.155 9.4.156 9.4.157 9.4.158 9.4.159 9.4.160 9.4.161
UnixToDateTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522 WeekOf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522 WeekOfTheMonth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522 WeekOfTheYear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523 WeeksBetween . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523 WeeksInAYear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 524 WeeksInYear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525 WeekSpan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 525 WithinPastDays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 526 WithinPastHours . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 527 WithinPastMilliSeconds . . . . . . . . . . . . . . . . . . . . . . . . . . . 528 WithinPastMinutes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 529 WithinPastMonths . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 530 WithinPastSeconds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 531 WithinPastWeeks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 532 WithinPastYears . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533 YearOf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 534 YearsBetween . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535 YearSpan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536 Yesterday . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536 538
10.1 Used units . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 538 10.2 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 538 10.3 System information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 538 10.4 Process handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539 10.5 Directory and disk handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539 10.6 File handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540 10.7 File open mode constants. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540 10.8 File attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540 10.9 Constants, types and variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541 10.9.1 10.9.2 10.9.3 10.10.1 10.10.2 10.10.3 10.10.4 10.10.5 Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541 Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545 AddDisk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545 DiskFree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 546 DiskSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 546 DosExitCode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547 DosVersion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548
32
CONTENTS
10.10.10 FExpand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550 10.10.11 FindClose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550 10.10.12 FindFirst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 551 10.10.13 FindNext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552 10.10.14 FSearch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552 10.10.15 FSplit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553 10.10.16 GetCBreak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553 10.10.17 GetDate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554 10.10.18 GetEnv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554 10.10.19 GetFAttr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555 10.10.20 GetFTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 556 10.10.21 GetIntVec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 556 10.10.22 GetLongName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 557 10.10.23 GetMsCount . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 557 10.10.24 GetShortName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 557 10.10.25 GetTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558 10.10.26 GetVerify . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558 10.10.27 Intr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 559 10.10.28 Keep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 559 10.10.29 MSDos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 559 10.10.30 PackTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 560 10.10.31 SetCBreak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 560 10.10.32 SetDate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 561 10.10.33 SetFAttr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 561 10.10.34 SetFTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 562 10.10.35 SetIntVec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 562 10.10.36 SetTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 562 10.10.37 SetVerify . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 562 10.10.38 SwapVectors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563 10.10.39 UnixDateToDt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563 10.10.40 UnpackTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563 10.10.41 weekday . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564 11 Reference for unit dxeload 565
33
CONTENTS
11.2.1
12.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566 12.2 Constants, types and variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566 12.2.1 12.2.2 12.3.1 12.3.2 12.3.3 12.3.4 12.3.5 12.3.6 Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566 Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566 FreeLibrary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567 GetProcAddress . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567 GetProcedureAddress . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567 LoadLibrary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567 SafeLoadLibrary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 568 UnloadLibrary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 568 569
13.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569 13.2 Procedures and functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569 13.2.1 npxsetup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569 570
14.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570 14.2 Constants, types and variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570 14.2.1 14.3.1 14.3.2 14.3.3 14.3.4 14.3.5 Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570 CloseExeFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571 FindExeSection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571 GetModuleByAddr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571 OpenExeFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571 ReadDebugLink . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572 573 14.3 Procedures and functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 571
15.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573 15.2 Constants, types and variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573 15.2.1 15.2.2 15.2.3 15.3.1 15.3.2 Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573 Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 574 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 574 GetLongOpts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575 GetOpt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575 578 34
CONTENTS
16.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 578 16.2 Real mode callbacks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 578 16.3 Executing software interrupts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 579 16.4 Software interrupts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 581 16.5 Hardware interrupts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 581 16.6 Disabling interrupts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583 16.7 Creating your own interrupt handlers . . . . . . . . . . . . . . . . . . . . . . . . . 583 16.8 Protected mode interrupts vs. Real mode interrupts . . . . . . . . . . . . . . . . . . 583 16.9 Handling interrupts with DPMI . . . . . . . . . . . . . . . . . . . . . . . . . . . . 583 16.10 Interrupt redirection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 584 16.11 Processor access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 584 16.12 I/O port access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 584 16.13 dos memory access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 584 16.14 FPC specialities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 584 16.15 Selectors and descriptors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585 16.16 What is DPMI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585 16.17 Constants, types and variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585 16.17.1 16.17.2 16.17.3 16.18.1 16.18.2 16.18.3 16.18.4 16.18.5 16.18.6 16.18.7 16.18.8 16.18.9 Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 585 Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 588 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 588 allocate_ldt_descriptors . . . . . . . . . . . . . . . . . . . . . . . . . . . 589 allocate_memory_block . . . . . . . . . . . . . . . . . . . . . . . . . . . 591 copyfromdos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 591 copytodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 592 create_code_segment_alias_descriptor . . . . . . . . . . . . . . . . . . . 592 disable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 592 dpmi_dosmemllchar . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593 dpmi_dosmemllword . . . . . . . . . . . . . . . . . . . . . . . . . . . 593 dpmi_dosmemget . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593
16.18.10 dpmi_dosmemmove . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 593 16.18.11 dpmi_dosmemput . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594 16.18.12 enable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594 16.18.13 free_ldt_descriptor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 594 16.18.14 free_memory_block . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595 16.18.15 free_rm_callback . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595 16.18.16 get_cs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595 16.18.17 get_descriptor_access_right . . . . . . . . . . . . . . . . . . . . . . . . . 596 16.18.18 get_ds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596 16.18.19 get_exception_handler . . . . . . . . . . . . . . . . . . . . . . . . . . . 596
35
CONTENTS
16.18.20 get_linear_addr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596 16.18.21 get_meminfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 597 16.18.22 get_next_selector_increment_value . . . . . . . . . . . . . . . . . . . . . 598 16.18.23 get_page_size . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 598 16.18.24 get_pm_exception_handler . . . . . . . . . . . . . . . . . . . . . . . . . 599 16.18.25 get_pm_interrupt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599 16.18.26 get_rm_callback . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 599 16.18.27 get_rm_interrupt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 602 16.18.28 get_run_mode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 603 16.18.29 get_segment_base_address . . . . . . . . . . . . . . . . . . . . . . . . . 603 16.18.30 get_segment_limit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604 16.18.31 get_ss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 604 16.18.32 global_dos_alloc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 605 16.18.33 global_dos_free . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 606 16.18.34 inportb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 606 16.18.35 inportl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 607 16.18.36 inportw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 607 16.18.37 lock_code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 608 16.18.38 lock_data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 608 16.18.39 lock_linear_region . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 608 16.18.40 map_device_in_memory_block . . . . . . . . . . . . . . . . . . . . . . . 609 16.18.41 outportb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 609 16.18.42 outportl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 610 16.18.43 outportw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 610 16.18.44 realintr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 610 16.18.45 request_linear_region . . . . . . . . . . . . . . . . . . . . . . . . . . . . 611 16.18.46 segment_to_descriptor . . . . . . . . . . . . . . . . . . . . . . . . . . . 611 16.18.47 seg_llchar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612 16.18.48 seg_llword . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613 16.18.49 seg_move . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613 16.18.50 set_descriptor_access_right . . . . . . . . . . . . . . . . . . . . . . . . . 614 16.18.51 set_exception_handler . . . . . . . . . . . . . . . . . . . . . . . . . . . . 614 16.18.52 set_pm_exception_handler . . . . . . . . . . . . . . . . . . . . . . . . . 614 16.18.53 set_pm_interrupt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 614 16.18.54 set_rm_interrupt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 615 16.18.55 set_segment_base_address . . . . . . . . . . . . . . . . . . . . . . . . . 616 16.18.56 set_segment_limit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 616 16.18.57 tb_offset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617 16.18.58 tb_segment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617 16.18.59 tb_size . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617
36
CONTENTS
16.18.60 transfer_buffer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 617 16.18.61 unlock_code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 618 16.18.62 unlock_data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 618 16.18.63 unlock_linear_region . . . . . . . . . . . . . . . . . . . . . . . . . . . . 618 17 Reference for unit gpm 620
17.1 Used units . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 620 17.2 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 620 17.3 Constants, types and variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 620 17.3.1 17.3.2 17.3.3 17.4.1 17.4.2 17.4.3 17.4.4 17.4.5 17.4.6 17.4.7 17.4.8 17.4.9 17.4.10 17.4.11 17.4.12 17.4.13 17.4.14 17.4.15 17.4.16 17.4.17 Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 620 Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 622 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 624 Gpm_AnyDouble . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625 Gpm_AnySingle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625 Gpm_AnyTriple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 625 gpm_close . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 626 gpm_tvalues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 626 gpm_tvaluesM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 626 gpm_getevent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 626 gpm_getsnapshot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 628 gpm_lowerroi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 628 gpm_open . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 628 gpm_poproi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629 gpm_pushroi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629 gpm_raiseroi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629 gpm_repeat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 629 Gpm_StrictDouble . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 630 Gpm_StrictSingle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 630 Gpm_StrictTriple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 630 631
18.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 631 18.2 Categorized functions: Text and font handling . . . . . . . . . . . . . . . . . . . . 631 18.3 Categorized functions: Filled drawings . . . . . . . . . . . . . . . . . . . . . . . . 631 18.4 Categorized functions: Drawing primitives . . . . . . . . . . . . . . . . . . . . . . 632 18.5 Categorized functions: Color management . . . . . . . . . . . . . . . . . . . . . . 632 18.6 Categorized functions: Screen management . . . . . . . . . . . . . . . . . . . . . . 633 18.7 Categorized functions: Initialization . . . . . . . . . . . . . . . . . . . . . . . . . . 633 18.8 Target specic issues: Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634 18.9 Target specic issues: DOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635 37
CONTENTS
18.10 A word about mode selection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 635 18.11 Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 639 18.12 Constants, types and variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 640 18.12.1 18.12.2 18.12.3 18.13.1 18.13.2 18.13.3 18.13.4 18.13.5 18.13.6 18.13.7 18.13.8 18.13.9 Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 640 Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 656 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 662 Arc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 664 Bar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 664 Bar3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 665 ClearDevice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 665 Closegraph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 665 DetectGraph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 665 DrawPoly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 666 Ellipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 666 FillEllipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 666
18.13.10 FillPoly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 666 18.13.11 FloodFill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 667 18.13.12 GetArcCoords . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 667 18.13.13 GetAspectRatio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 667 18.13.14 GetColor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 667 18.13.15 GetDefaultPalette . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 668 18.13.16 GetDirectVideo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 668 18.13.17 GetDriverName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 668 18.13.18 GetFillPattern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 668 18.13.19 GetFillSettings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669 18.13.20 GetGraphMode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669 18.13.21 GetLineSettings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669 18.13.22 GetMaxColor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669 18.13.23 GetMaxMode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 670 18.13.24 GetMaxX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 670 18.13.25 GetMaxY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 670 18.13.26 GetModeName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 670 18.13.27 GetModeRange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 671 18.13.28 GetPalette . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 671 18.13.29 GetPaletteSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 671 18.13.30 GetTextSettings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 671 18.13.31 GetViewSettings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672 18.13.32 GetX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672 18.13.33 GetY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672
38
CONTENTS
18.13.34 GraphDefaults . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672 18.13.35 GraphErrorMsg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 673 18.13.36 GraphResult . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 673 18.13.37 InitGraph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 673 18.13.38 InstallUserDriver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 674 18.13.39 InstallUserFont . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 674 18.13.40 LineRel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 674 18.13.41 LineTo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675 18.13.42 MoveRel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675 18.13.43 MoveTo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 675 18.13.44 OutText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 676 18.13.45 PieSlice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 676 18.13.46 queryadapterinfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 676 18.13.47 Rectangle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 676 18.13.48 RegisterBGIDriver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 677 18.13.49 RegisterBGIfont . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 677 18.13.50 RestoreCrtMode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 677 18.13.51 Sector . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 677 18.13.52 SetAspectRatio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 678 18.13.53 SetColor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 678 18.13.54 SetDirectVideo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 678 18.13.55 SetFillPattern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 678 18.13.56 SetFillStyle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 679 18.13.57 SetGraphMode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 679 18.13.58 SetLineStyle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 679 18.13.59 SetPalette . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 680 18.13.60 SetTextJustify . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 680 18.13.61 SetTextStyle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 681 18.13.62 SetUserCharSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 681 18.13.63 SetViewPort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 682 18.13.64 SetWriteMode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 682 18.13.65 TextHeight . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 682 18.13.66 TextWidth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 682 19 Reference for unit heaptrc 684
19.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 684 19.2 Controlling HeapTrc with environment variables . . . . . . . . . . . . . . . . . . . 684 19.3 HeapTrc Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 685 19.4 Constants, types and variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 686 19.4.1 Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 686
39
CONTENTS
20.1 Used units . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 690 20.2 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 690 20.3 Constants, types and variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 690 20.3.1 20.3.2 20.4.1 20.4.2 20.4.3 20.4.4 20.4.5 20.4.6 20.4.7 20.4.8 20.4.9 20.4.10 20.4.11 20.4.12 20.4.13 Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 690 Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 693 ftok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 697 msgctl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 697 msgget . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 699 msgrcv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 700 msgsnd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 700 semctl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 701 semget . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 706 semop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 706 semtimedop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 707 shmat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 707 shmctl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 708 shmdt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 710 shmget . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 710 712
21.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 712 21.2 Unix specic notes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 712 21.3 Writing a keyboard driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713 21.4 Keyboard scan codes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 716 21.5 Constants, types and variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 718 21.5.1 21.5.2 21.6.1 21.6.2 21.6.3 21.6.4 21.6.5 Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 718 Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 723 AddSequence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 724 AddSpecialSequence . . . . . . . . . . . . . . . . . . . . . . . . . . . . 724 DoneKeyboard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 725 FindSequence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 725 FunctionKeyName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 725 40
CONTENTS
21.6.6 21.6.7 21.6.8 21.6.9 21.6.10 21.6.11 21.6.12 21.6.13 21.6.14 21.6.15 21.6.16 21.6.17 21.6.18 21.6.19 21.6.20 21.6.21 21.6.22 21.6.23 21.6.24 21.6.25 21.6.26
GetKeyboardDriver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 726 GetKeyEvent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 726 GetKeyEventChar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 727 GetKeyEventCode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 727 GetKeyEventFlags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 728 GetKeyEventShiftState . . . . . . . . . . . . . . . . . . . . . . . . . . . 729 GetKeyEventUniCode . . . . . . . . . . . . . . . . . . . . . . . . . . . . 729 InitKeyboard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 730 IsFunctionKey . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 730 KeyEventToString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 731 KeyPressed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 731 PollKeyEvent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 731 PollShiftStateEvent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 732 PutKeyEvent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 733 RawReadKey . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 734 RawReadString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 734 RestoreStartMode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 734 SetKeyboardDriver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 734 ShiftStateToString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 735 TranslateKeyEvent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 735 TranslateKeyEventUniCode . . . . . . . . . . . . . . . . . . . . . . . . . 735 736
22.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 736 22.2 Procedures and functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 736 22.2.1 GetLineInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 736 737
23.1 Used units . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 737 23.2 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 737 23.3 Constants, types and variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 737 23.3.1 23.3.2 23.4.1 23.4.2 23.4.3 23.4.4 23.4.5 23.4.6 23.4.7 Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 737 Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 748 capget . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 750 capset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 750 epoll_create . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 751 epoll_ctl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 751 epoll_wait . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 752 fdatasync . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 752 futex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 752 41
CONTENTS
24.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 756 24.2 Procedures and functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 756 24.2.1 GetLineInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 756 757
25.1 Used units . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 757 25.2 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 757 25.3 Geometrical functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 757 25.4 Statistical functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 758 25.5 Number converting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 758 25.6 Exponential and logarithmic functions . . . . . . . . . . . . . . . . . . . . . . . . 758 25.7 Hyperbolic functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 759 25.8 Trigoniometric functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 759 25.9 Angle unit conversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 759 25.10 Min/max determination . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 759 25.11 Constants, types and variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 760 25.11.1 25.11.2 25.12.1 25.12.2 25.12.3 25.12.4 25.12.5 25.12.6 25.12.7 25.12.8 25.12.9 Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 760 Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 761 arccos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 763 arccosh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 764 arcosh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 764 arcsin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 765 arcsinh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 765 arctan2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 766 arctanh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 766 arsinh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 767 artanh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 767
25.12.10 ceil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 768 25.12.11 ClearExceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 768 25.12.12 CompareValue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 768 25.12.13 cosecant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 769 25.12.14 cosh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 769 25.12.15 cot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 769 25.12.16 cotan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 770 42
CONTENTS
25.12.17 csc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 770 25.12.18 cycletorad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 770 25.12.19 degtograd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 771 25.12.20 degtorad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 771 25.12.21 DivMod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 772 25.12.22 EnsureRange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 772 25.12.23 oor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 772 25.12.24 Frexp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 773 25.12.25 GetExceptionMask . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 774 25.12.26 GetPrecisionMode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 774 25.12.27 GetRoundMode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 774 25.12.28 gradtodeg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 774 25.12.29 gradtorad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 775 25.12.30 hypot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 775 25.12.31 ifthen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 776 25.12.32 InRange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 776 25.12.33 intpower . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 776 25.12.34 IsInnite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 777 25.12.35 IsNan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 777 25.12.36 IsZero . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 777 25.12.37 ldexp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 778 25.12.38 lnxp1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 778 25.12.39 log10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 779 25.12.40 log2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 779 25.12.41 logn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 780 25.12.42 Max . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 780 25.12.43 MaxIntValue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 781 25.12.44 maxvalue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 782 25.12.45 mean . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 783 25.12.46 meanandstddev . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 783 25.12.47 Min . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 784 25.12.48 MinIntValue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 785 25.12.49 minvalue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 785 25.12.50 momentskewkurtosis . . . . . . . . . . . . . . . . . . . . . . . . . . . . 786 25.12.51 norm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 787 25.12.52 operator **(oat, oat): oat . . . . . . . . . . . . . . . . . . . . . . . . 788 25.12.53 operator **(Int64, Int64): Int64 . . . . . . . . . . . . . . . . . . . . . . . 788 25.12.54 popnstddev . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 788 25.12.55 popnvariance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 789 25.12.56 power . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 790
43
CONTENTS
25.12.57 radtocycle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 790 25.12.58 radtodeg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 791 25.12.59 radtograd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 791 25.12.60 randg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 792 25.12.61 RandomFrom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 792 25.12.62 RandomRange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 793 25.12.63 RoundTo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 793 25.12.64 SameValue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 793 25.12.65 sec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 793 25.12.66 secant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 794 25.12.67 SetExceptionMask . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 794 25.12.68 SetPrecisionMode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 794 25.12.69 SetRoundMode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 794 25.12.70 Sign . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 795 25.12.71 SimpleRoundTo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 795 25.12.72 sincos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 795 25.12.73 sinh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 796 25.12.74 stddev . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 796 25.12.75 sum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 797 25.12.76 sumInt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 798 25.12.77 sumofsquares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 798 25.12.78 sumsandsquares . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 798 25.12.79 tan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 799 25.12.80 tanh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 800 25.12.81 totalvariance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 800 25.12.82 variance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 801 25.13 EInvalidArgument . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 802 25.13.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 802 803
26.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 803 26.2 Constants, types and variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 804 26.2.1 26.3.1 26.3.2 26.3.3 26.3.4 26.3.5 26.3.6 Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 804 operator *(Tmatrix2_double, Double): Tmatrix2_double . . . . . . . . . 806 operator *(Tmatrix2_double, Tmatrix2_double): Tmatrix2_double . . . . 806 operator *(Tmatrix2_double, Tvector2_double): Tvector2_double . . . . 807 operator *(Tmatrix2_extended, extended): Tmatrix2_extended . . . . . . 807 operator *(Tmatrix2_extended, Tmatrix2_extended): Tmatrix2_extended . 807 operator *(Tmatrix2_extended, Tvector2_extended): Tvector2_extended . 807 26.3 Procedures and functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 806
44
CONTENTS
26.3.7 26.3.8 26.3.9 26.3.10 26.3.11 26.3.12 26.3.13 26.3.14 26.3.15 26.3.16 26.3.17 26.3.18 26.3.19 26.3.20 26.3.21 26.3.22 26.3.23 26.3.24 26.3.25 26.3.26 26.3.27 26.3.28 26.3.29 26.3.30 26.3.31 26.3.32 26.3.33 26.3.34 26.3.35 26.3.36 26.3.37 26.3.38 26.3.39 26.3.40 26.3.41 26.3.42 26.3.43 26.3.44 26.3.45 26.3.46
operator *(Tmatrix2_single, single): Tmatrix2_single . . . . . . . . . . . 808 operator *(Tmatrix2_single, Tmatrix2_single): Tmatrix2_single . . . . . 808 operator *(Tmatrix2_single, Tvector2_single): Tvector2_single . . . . . . 808 operator *(Tmatrix3_double, Double): Tmatrix3_double . . . . . . . . . 808 operator *(Tmatrix3_double, Tmatrix3_double): Tmatrix3_double . . . . 809 operator *(Tmatrix3_double, Tvector3_double): Tvector3_double . . . . 809 operator *(Tmatrix3_extended, extended): Tmatrix3_extended . . . . . . 809 operator *(Tmatrix3_extended, Tmatrix3_extended): Tmatrix3_extended . 809 operator *(Tmatrix3_extended, Tvector3_extended): Tvector3_extended . 810 operator *(Tmatrix3_single, single): Tmatrix3_single . . . . . . . . . . . 810 operator *(Tmatrix3_single, Tmatrix3_single): Tmatrix3_single . . . . . 810 operator *(Tmatrix3_single, Tvector3_single): Tvector3_single . . . . . . 811 operator *(Tmatrix4_double, Double): Tmatrix4_double . . . . . . . . . 811 operator *(Tmatrix4_double, Tmatrix4_double): Tmatrix4_double . . . . 811 operator *(Tmatrix4_double, Tvector4_double): Tvector4_double . . . . 811 operator *(Tmatrix4_extended, extended): Tmatrix4_extended . . . . . . 812 operator *(Tmatrix4_extended, Tmatrix4_extended): Tmatrix4_extended . 812 operator *(Tmatrix4_extended, Tvector4_extended): Tvector4_extended . 812 operator *(Tmatrix4_single, single): Tmatrix4_single . . . . . . . . . . . 812 operator *(Tmatrix4_single, Tmatrix4_single): Tmatrix4_single . . . . . 813 operator *(Tmatrix4_single, Tvector4_single): Tvector4_single . . . . . . 813 operator *(Tvector2_double, Double): Tvector2_double . . . . . . . . . . 813 operator *(Tvector2_double, Tvector2_double): Tvector2_double . . . . . 813 operator *(Tvector2_extended, extended): Tvector2_extended . . . . . . 814 operator *(Tvector2_extended, Tvector2_extended): Tvector2_extended . 814 operator *(Tvector2_single, single): Tvector2_single . . . . . . . . . . . 814 operator *(Tvector2_single, Tvector2_single): Tvector2_single . . . . . . 814 operator *(Tvector3_double, Double): Tvector3_double . . . . . . . . . . 815 operator *(Tvector3_double, Tvector3_double): Tvector3_double . . . . . 815 operator *(Tvector3_extended, extended): Tvector3_extended . . . . . . 815 operator *(Tvector3_extended, Tvector3_extended): Tvector3_extended . 815 operator *(Tvector3_single, single): Tvector3_single . . . . . . . . . . . 816 operator *(Tvector3_single, Tvector3_single): Tvector3_single . . . . . . 816 operator *(Tvector4_double, Double): Tvector4_double . . . . . . . . . . 816 operator *(Tvector4_double, Tvector4_double): Tvector4_double . . . . . 816 operator *(Tvector4_extended, extended): Tvector4_extended . . . . . . 817 operator *(Tvector4_extended, Tvector4_extended): Tvector4_extended . 817 operator *(Tvector4_single, single): Tvector4_single . . . . . . . . . . . 817 operator *(Tvector4_single, Tvector4_single): Tvector4_single . . . . . . 817 operator **(Tvector2_double, Tvector2_double): Double . . . . . . . . . 818
45
CONTENTS
26.3.47 26.3.48 26.3.49 26.3.50 26.3.51 26.3.52 26.3.53 26.3.54 26.3.55 26.3.56 26.3.57 26.3.58 26.3.59 26.3.60 26.3.61 26.3.62 26.3.63 26.3.64 26.3.65 26.3.66 26.3.67 26.3.68 26.3.69 26.3.70 26.3.71 26.3.72 26.3.73 26.3.74 26.3.75 26.3.76 26.3.77 26.3.78 26.3.79 26.3.80 26.3.81 26.3.82 26.3.83 26.3.84 26.3.85 26.3.86
operator **(Tvector2_extended, Tvector2_extended): extended . . . . . . 818 operator **(Tvector2_single, Tvector2_single): single . . . . . . . . . . . 818 operator **(Tvector3_double, Tvector3_double): Double . . . . . . . . . 818 operator **(Tvector3_extended, Tvector3_extended): extended . . . . . . 819 operator **(Tvector3_single, Tvector3_single): single . . . . . . . . . . . 819 operator **(Tvector4_double, Tvector4_double): Double . . . . . . . . . 819 operator **(Tvector4_extended, Tvector4_extended): extended . . . . . . 819 operator **(Tvector4_single, Tvector4_single): single . . . . . . . . . . . 820 operator +(Tmatrix2_double, Double): Tmatrix2_double . . . . . . . . . 820 operator +(Tmatrix2_double, Tmatrix2_double): Tmatrix2_double . . . . 820 operator +(Tmatrix2_extended, extended): Tmatrix2_extended . . . . . . 820 operator +(Tmatrix2_extended, Tmatrix2_extended): Tmatrix2_extended 821 operator +(Tmatrix2_single, single): Tmatrix2_single . . . . . . . . . . . 821 operator +(Tmatrix2_single, Tmatrix2_single): Tmatrix2_single . . . . . 821 operator +(Tmatrix3_double, Double): Tmatrix3_double . . . . . . . . . 821 operator +(Tmatrix3_double, Tmatrix3_double): Tmatrix3_double . . . . 822 operator +(Tmatrix3_extended, extended): Tmatrix3_extended . . . . . . 822 operator +(Tmatrix3_extended, Tmatrix3_extended): Tmatrix3_extended 822 operator +(Tmatrix3_single, single): Tmatrix3_single . . . . . . . . . . . 822 operator +(Tmatrix3_single, Tmatrix3_single): Tmatrix3_single . . . . . 823 operator +(Tmatrix4_double, Double): Tmatrix4_double . . . . . . . . . 823 operator +(Tmatrix4_double, Tmatrix4_double): Tmatrix4_double . . . . 823 operator +(Tmatrix4_extended, extended): Tmatrix4_extended . . . . . . 823 operator +(Tmatrix4_extended, Tmatrix4_extended): Tmatrix4_extended 824 operator +(Tmatrix4_single, single): Tmatrix4_single . . . . . . . . . . . 824 operator +(Tmatrix4_single, Tmatrix4_single): Tmatrix4_single . . . . . 824 operator +(Tvector2_double, Double): Tvector2_double . . . . . . . . . . 824 operator +(Tvector2_double, Tvector2_double): Tvector2_double . . . . 825 operator +(Tvector2_extended, extended): Tvector2_extended . . . . . . 825 operator +(Tvector2_extended, Tvector2_extended): Tvector2_extended . 825 operator +(Tvector2_single, single): Tvector2_single . . . . . . . . . . . 825 operator +(Tvector2_single, Tvector2_single): Tvector2_single . . . . . . 826 operator +(Tvector3_double, Double): Tvector3_double . . . . . . . . . . 826 operator +(Tvector3_double, Tvector3_double): Tvector3_double . . . . 826 operator +(Tvector3_extended, extended): Tvector3_extended . . . . . . 826 operator +(Tvector3_extended, Tvector3_extended): Tvector3_extended . 827 operator +(Tvector3_single, single): Tvector3_single . . . . . . . . . . . 827 operator +(Tvector3_single, Tvector3_single): Tvector3_single . . . . . . 827 operator +(Tvector4_double, Double): Tvector4_double . . . . . . . . . . 827 operator +(Tvector4_double, Tvector4_double): Tvector4_double . . . . 828
46
CONTENTS
26.3.87 26.3.88 26.3.89 26.3.90 26.3.91 26.3.92 26.3.93 26.3.94 26.3.95 26.3.96 26.3.97 26.3.98 26.3.99
operator +(Tvector4_extended, extended): Tvector4_extended . . . . . . 828 operator +(Tvector4_extended, Tvector4_extended): Tvector4_extended . 828 operator +(Tvector4_single, single): Tvector4_single . . . . . . . . . . . 828 operator +(Tvector4_single, Tvector4_single): Tvector4_single . . . . . . 829 operator -(Tmatrix2_double): Tmatrix2_double . . . . . . . . . . . . . . 829 operator -(Tmatrix2_double, Double): Tmatrix2_double . . . . . . . . . . 829 operator -(Tmatrix2_double, Tmatrix2_double): Tmatrix2_double . . . . 829 operator -(Tmatrix2_extended): Tmatrix2_extended . . . . . . . . . . . . 830 operator -(Tmatrix2_extended, extended): Tmatrix2_extended . . . . . . 830 operator -(Tmatrix2_extended, Tmatrix2_extended): Tmatrix2_extended . 830 operator -(Tmatrix2_single): Tmatrix2_single . . . . . . . . . . . . . . . 830 operator -(Tmatrix2_single, single): Tmatrix2_single . . . . . . . . . . . 831 operator -(Tmatrix2_single, Tmatrix2_single): Tmatrix2_single . . . . . . 831
26.3.100 operator -(Tmatrix3_double): Tmatrix3_double . . . . . . . . . . . . . . 831 26.3.101 operator -(Tmatrix3_double, Double): Tmatrix3_double . . . . . . . . . . 831 26.3.102 operator -(Tmatrix3_double, Tmatrix3_double): Tmatrix3_double . . . . 832 26.3.103 operator -(Tmatrix3_extended): Tmatrix3_extended . . . . . . . . . . . . 832 26.3.104 operator -(Tmatrix3_extended, extended): Tmatrix3_extended . . . . . . 832 26.3.105 operator -(Tmatrix3_extended, Tmatrix3_extended): Tmatrix3_extended . 832 26.3.106 operator -(Tmatrix3_single): Tmatrix3_single . . . . . . . . . . . . . . . 833 26.3.107 operator -(Tmatrix3_single, single): Tmatrix3_single . . . . . . . . . . . 833 26.3.108 operator -(Tmatrix3_single, Tmatrix3_single): Tmatrix3_single . . . . . . 833 26.3.109 operator -(Tmatrix4_double): Tmatrix4_double . . . . . . . . . . . . . . 833 26.3.110 operator -(Tmatrix4_double, Double): Tmatrix4_double . . . . . . . . . . 834 26.3.111 operator -(Tmatrix4_double, Tmatrix4_double): Tmatrix4_double . . . . 834 26.3.112 operator -(Tmatrix4_extended): Tmatrix4_extended . . . . . . . . . . . . 834 26.3.113 operator -(Tmatrix4_extended, extended): Tmatrix4_extended . . . . . . 834 26.3.114 operator -(Tmatrix4_extended, Tmatrix4_extended): Tmatrix4_extended . 835 26.3.115 operator -(Tmatrix4_single): Tmatrix4_single . . . . . . . . . . . . . . . 835 26.3.116 operator -(Tmatrix4_single, single): Tmatrix4_single . . . . . . . . . . . 835 26.3.117 operator -(Tmatrix4_single, Tmatrix4_single): Tmatrix4_single . . . . . . 835 26.3.118 operator -(Tvector2_double): Tvector2_double . . . . . . . . . . . . . . 836 26.3.119 operator -(Tvector2_double, Double): Tvector2_double . . . . . . . . . . 836 26.3.120 operator -(Tvector2_double, Tvector2_double): Tvector2_double . . . . . 836 26.3.121 operator -(Tvector2_extended): Tvector2_extended . . . . . . . . . . . . 836 26.3.122 operator -(Tvector2_extended, extended): Tvector2_extended . . . . . . . 837 26.3.123 operator -(Tvector2_extended, Tvector2_extended): Tvector2_extended . 837 26.3.124 operator -(Tvector2_single): Tvector2_single . . . . . . . . . . . . . . . 837 26.3.125 operator -(Tvector2_single, single): Tvector2_single . . . . . . . . . . . . 837 26.3.126 operator -(Tvector2_single, Tvector2_single): Tvector2_single . . . . . . 838
47
CONTENTS
26.3.127 operator -(Tvector3_double): Tvector3_double . . . . . . . . . . . . . . 838 26.3.128 operator -(Tvector3_double, Double): Tvector3_double . . . . . . . . . . 838 26.3.129 operator -(Tvector3_double, Tvector3_double): Tvector3_double . . . . . 838 26.3.130 operator -(Tvector3_extended): Tvector3_extended . . . . . . . . . . . . 839 26.3.131 operator -(Tvector3_extended, extended): Tvector3_extended . . . . . . . 839 26.3.132 operator -(Tvector3_extended, Tvector3_extended): Tvector3_extended . 839 26.3.133 operator -(Tvector3_single): Tvector3_single . . . . . . . . . . . . . . . 839 26.3.134 operator -(Tvector3_single, single): Tvector3_single . . . . . . . . . . . . 840 26.3.135 operator -(Tvector3_single, Tvector3_single): Tvector3_single . . . . . . 840 26.3.136 operator -(Tvector4_double): Tvector4_double . . . . . . . . . . . . . . 840 26.3.137 operator -(Tvector4_double, Double): Tvector4_double . . . . . . . . . . 840 26.3.138 operator -(Tvector4_double, Tvector4_double): Tvector4_double . . . . . 841 26.3.139 operator -(Tvector4_extended): Tvector4_extended . . . . . . . . . . . . 841 26.3.140 operator -(Tvector4_extended, extended): Tvector4_extended . . . . . . . 841 26.3.141 operator -(Tvector4_extended, Tvector4_extended): Tvector4_extended . 841 26.3.142 operator -(Tvector4_single): Tvector4_single . . . . . . . . . . . . . . . 842 26.3.143 operator -(Tvector4_single, single): Tvector4_single . . . . . . . . . . . . 842 26.3.144 operator -(Tvector4_single, Tvector4_single): Tvector4_single . . . . . . 842 26.3.145 operator /(Tmatrix2_double, Double): Tmatrix2_double . . . . . . . . . . 842 26.3.146 operator /(Tmatrix2_extended, extended): Tmatrix2_extended . . . . . . 843 26.3.147 operator /(Tmatrix2_single, single): Tmatrix2_single . . . . . . . . . . . 843 26.3.148 operator /(Tmatrix3_double, Double): Tmatrix3_double . . . . . . . . . . 843 26.3.149 operator /(Tmatrix3_extended, extended): Tmatrix3_extended . . . . . . 843 26.3.150 operator /(Tmatrix3_single, single): Tmatrix3_single . . . . . . . . . . . 844 26.3.151 operator /(Tmatrix4_double, Double): Tmatrix4_double . . . . . . . . . . 844 26.3.152 operator /(Tmatrix4_extended, extended): Tmatrix4_extended . . . . . . 844 26.3.153 operator /(Tmatrix4_single, single): Tmatrix4_single . . . . . . . . . . . 844 26.3.154 operator /(Tvector2_double, Double): Tvector2_double . . . . . . . . . . 845 26.3.155 operator /(Tvector2_extended, extended): Tvector2_extended . . . . . . . 845 26.3.156 operator /(Tvector2_single, single): Tvector2_single . . . . . . . . . . . . 845 26.3.157 operator /(Tvector3_double, Double): Tvector3_double . . . . . . . . . . 845 26.3.158 operator /(Tvector3_extended, extended): Tvector3_extended . . . . . . . 846 26.3.159 operator /(Tvector3_single, single): Tvector3_single . . . . . . . . . . . . 846 26.3.160 operator /(Tvector4_double, Double): Tvector4_double . . . . . . . . . . 846 26.3.161 operator /(Tvector4_extended, extended): Tvector4_extended . . . . . . . 846 26.3.162 operator /(Tvector4_single, single): Tvector4_single . . . . . . . . . . . . 847 26.3.163 operator :=(Tmatrix2_double): Tmatrix2_extended . . . . . . . . . . . . 847 26.3.164 operator :=(Tmatrix2_double): Tmatrix2_single . . . . . . . . . . . . . . 847 26.3.165 operator :=(Tmatrix2_double): Tmatrix3_double . . . . . . . . . . . . . 847 26.3.166 operator :=(Tmatrix2_double): Tmatrix3_extended . . . . . . . . . . . . 848
48
CONTENTS
26.3.167 operator :=(Tmatrix2_double): Tmatrix3_single . . . . . . . . . . . . . . 848 26.3.168 operator :=(Tmatrix2_double): Tmatrix4_double . . . . . . . . . . . . . 848 26.3.169 operator :=(Tmatrix2_double): Tmatrix4_extended . . . . . . . . . . . . 848 26.3.170 operator :=(Tmatrix2_double): Tmatrix4_single . . . . . . . . . . . . . . 849 26.3.171 operator :=(Tmatrix2_extended): Tmatrix2_double . . . . . . . . . . . . 849 26.3.172 operator :=(Tmatrix2_extended): Tmatrix2_single . . . . . . . . . . . . . 849 26.3.173 operator :=(Tmatrix2_extended): Tmatrix3_double . . . . . . . . . . . . 849 26.3.174 operator :=(Tmatrix2_extended): Tmatrix3_extended . . . . . . . . . . . 850 26.3.175 operator :=(Tmatrix2_extended): Tmatrix3_single . . . . . . . . . . . . . 850 26.3.176 operator :=(Tmatrix2_extended): Tmatrix4_double . . . . . . . . . . . . 850 26.3.177 operator :=(Tmatrix2_extended): Tmatrix4_extended . . . . . . . . . . . 850 26.3.178 operator :=(Tmatrix2_extended): Tmatrix4_single . . . . . . . . . . . . . 851 26.3.179 operator :=(Tmatrix2_single): Tmatrix2_double . . . . . . . . . . . . . . 851 26.3.180 operator :=(Tmatrix2_single): Tmatrix2_extended . . . . . . . . . . . . . 851 26.3.181 operator :=(Tmatrix2_single): Tmatrix3_double . . . . . . . . . . . . . . 851 26.3.182 operator :=(Tmatrix2_single): Tmatrix3_extended . . . . . . . . . . . . . 852 26.3.183 operator :=(Tmatrix2_single): Tmatrix3_single . . . . . . . . . . . . . . 852 26.3.184 operator :=(Tmatrix2_single): Tmatrix4_double . . . . . . . . . . . . . . 852 26.3.185 operator :=(Tmatrix2_single): Tmatrix4_extended . . . . . . . . . . . . . 852 26.3.186 operator :=(Tmatrix2_single): Tmatrix4_single . . . . . . . . . . . . . . 853 26.3.187 operator :=(Tmatrix3_double): Tmatrix2_double . . . . . . . . . . . . . 853 26.3.188 operator :=(Tmatrix3_double): Tmatrix2_extended . . . . . . . . . . . . 853 26.3.189 operator :=(Tmatrix3_double): Tmatrix2_single . . . . . . . . . . . . . . 853 26.3.190 operator :=(Tmatrix3_double): Tmatrix3_extended . . . . . . . . . . . . 854 26.3.191 operator :=(Tmatrix3_double): Tmatrix3_single . . . . . . . . . . . . . . 854 26.3.192 operator :=(Tmatrix3_double): Tmatrix4_double . . . . . . . . . . . . . 854 26.3.193 operator :=(Tmatrix3_double): Tmatrix4_extended . . . . . . . . . . . . 854 26.3.194 operator :=(Tmatrix3_double): Tmatrix4_single . . . . . . . . . . . . . . 855 26.3.195 operator :=(Tmatrix3_extended): Tmatrix2_double . . . . . . . . . . . . 855 26.3.196 operator :=(Tmatrix3_extended): Tmatrix2_extended . . . . . . . . . . . 855 26.3.197 operator :=(Tmatrix3_extended): Tmatrix2_single . . . . . . . . . . . . . 856 26.3.198 operator :=(Tmatrix3_extended): Tmatrix3_double . . . . . . . . . . . . 856 26.3.199 operator :=(Tmatrix3_extended): Tmatrix3_single . . . . . . . . . . . . . 856 26.3.200 operator :=(Tmatrix3_extended): Tmatrix4_double . . . . . . . . . . . . 856 26.3.201 operator :=(Tmatrix3_extended): Tmatrix4_extended . . . . . . . . . . . 857 26.3.202 operator :=(Tmatrix3_extended): Tmatrix4_single . . . . . . . . . . . . . 857 26.3.203 operator :=(Tmatrix3_single): Tmatrix2_double . . . . . . . . . . . . . . 857 26.3.204 operator :=(Tmatrix3_single): Tmatrix2_extended . . . . . . . . . . . . . 857 26.3.205 operator :=(Tmatrix3_single): Tmatrix2_single . . . . . . . . . . . . . . 858 26.3.206 operator :=(Tmatrix3_single): Tmatrix3_double . . . . . . . . . . . . . . 858
49
CONTENTS
26.3.207 operator :=(Tmatrix3_single): Tmatrix3_extended . . . . . . . . . . . . . 858 26.3.208 operator :=(Tmatrix3_single): Tmatrix4_double . . . . . . . . . . . . . . 858 26.3.209 operator :=(Tmatrix3_single): Tmatrix4_extended . . . . . . . . . . . . . 859 26.3.210 operator :=(Tmatrix3_single): Tmatrix4_single . . . . . . . . . . . . . . 859 26.3.211 operator :=(Tmatrix4_double): Tmatrix2_double . . . . . . . . . . . . . 859 26.3.212 operator :=(Tmatrix4_double): Tmatrix2_extended . . . . . . . . . . . . 859 26.3.213 operator :=(Tmatrix4_double): Tmatrix2_single . . . . . . . . . . . . . . 860 26.3.214 operator :=(Tmatrix4_double): Tmatrix3_double . . . . . . . . . . . . . 860 26.3.215 operator :=(Tmatrix4_double): Tmatrix3_extended . . . . . . . . . . . . 860 26.3.216 operator :=(Tmatrix4_double): Tmatrix3_single . . . . . . . . . . . . . . 860 26.3.217 operator :=(Tmatrix4_double): Tmatrix4_extended . . . . . . . . . . . . 861 26.3.218 operator :=(Tmatrix4_double): Tmatrix4_single . . . . . . . . . . . . . . 861 26.3.219 operator :=(Tmatrix4_extended): Tmatrix2_double . . . . . . . . . . . . 861 26.3.220 operator :=(Tmatrix4_extended): Tmatrix2_extended . . . . . . . . . . . 861 26.3.221 operator :=(Tmatrix4_extended): Tmatrix2_single . . . . . . . . . . . . . 862 26.3.222 operator :=(Tmatrix4_extended): Tmatrix3_double . . . . . . . . . . . . 862 26.3.223 operator :=(Tmatrix4_extended): Tmatrix3_extended . . . . . . . . . . . 862 26.3.224 operator :=(Tmatrix4_extended): Tmatrix3_single . . . . . . . . . . . . . 862 26.3.225 operator :=(Tmatrix4_extended): Tmatrix4_double . . . . . . . . . . . . 863 26.3.226 operator :=(Tmatrix4_extended): Tmatrix4_single . . . . . . . . . . . . . 863 26.3.227 operator :=(Tmatrix4_single): Tmatrix2_double . . . . . . . . . . . . . . 863 26.3.228 operator :=(Tmatrix4_single): Tmatrix2_extended . . . . . . . . . . . . . 863 26.3.229 operator :=(Tmatrix4_single): Tmatrix2_single . . . . . . . . . . . . . . 864 26.3.230 operator :=(Tmatrix4_single): Tmatrix3_double . . . . . . . . . . . . . . 864 26.3.231 operator :=(Tmatrix4_single): Tmatrix3_extended . . . . . . . . . . . . . 864 26.3.232 operator :=(Tmatrix4_single): Tmatrix3_single . . . . . . . . . . . . . . 864 26.3.233 operator :=(Tmatrix4_single): Tmatrix4_double . . . . . . . . . . . . . . 865 26.3.234 operator :=(Tmatrix4_single): Tmatrix4_extended . . . . . . . . . . . . . 865 26.3.235 operator :=(Tvector2_double): Tvector2_extended . . . . . . . . . . . . . 865 26.3.236 operator :=(Tvector2_double): Tvector2_single . . . . . . . . . . . . . . 865 26.3.237 operator :=(Tvector2_double): Tvector3_double . . . . . . . . . . . . . . 866 26.3.238 operator :=(Tvector2_double): Tvector3_extended . . . . . . . . . . . . . 866 26.3.239 operator :=(Tvector2_double): Tvector3_single . . . . . . . . . . . . . . 866 26.3.240 operator :=(Tvector2_double): Tvector4_double . . . . . . . . . . . . . . 866 26.3.241 operator :=(Tvector2_double): Tvector4_extended . . . . . . . . . . . . . 867 26.3.242 operator :=(Tvector2_double): Tvector4_single . . . . . . . . . . . . . . 867 26.3.243 operator :=(Tvector2_extended): Tvector2_double . . . . . . . . . . . . . 867 26.3.244 operator :=(Tvector2_extended): Tvector2_single . . . . . . . . . . . . . 867 26.3.245 operator :=(Tvector2_extended): Tvector3_double . . . . . . . . . . . . . 868 26.3.246 operator :=(Tvector2_extended): Tvector3_extended . . . . . . . . . . . 868
50
CONTENTS
26.3.247 operator :=(Tvector2_extended): Tvector3_single . . . . . . . . . . . . . 868 26.3.248 operator :=(Tvector2_extended): Tvector4_double . . . . . . . . . . . . . 868 26.3.249 operator :=(Tvector2_extended): Tvector4_extended . . . . . . . . . . . 869 26.3.250 operator :=(Tvector2_extended): Tvector4_single . . . . . . . . . . . . . 869 26.3.251 operator :=(Tvector2_single): Tvector2_double . . . . . . . . . . . . . . 869 26.3.252 operator :=(Tvector2_single): Tvector2_extended . . . . . . . . . . . . . 869 26.3.253 operator :=(Tvector2_single): Tvector3_double . . . . . . . . . . . . . . 870 26.3.254 operator :=(Tvector2_single): Tvector3_extended . . . . . . . . . . . . . 870 26.3.255 operator :=(Tvector2_single): Tvector3_single . . . . . . . . . . . . . . . 870 26.3.256 operator :=(Tvector2_single): Tvector4_double . . . . . . . . . . . . . . 870 26.3.257 operator :=(Tvector2_single): Tvector4_extended . . . . . . . . . . . . . 871 26.3.258 operator :=(Tvector2_single): Tvector4_single . . . . . . . . . . . . . . . 871 26.3.259 operator :=(Tvector3_double): Tvector2_double . . . . . . . . . . . . . . 871 26.3.260 operator :=(Tvector3_double): Tvector2_extended . . . . . . . . . . . . . 871 26.3.261 operator :=(Tvector3_double): Tvector2_single . . . . . . . . . . . . . . 872 26.3.262 operator :=(Tvector3_double): Tvector3_extended . . . . . . . . . . . . . 872 26.3.263 operator :=(Tvector3_double): Tvector3_single . . . . . . . . . . . . . . 872 26.3.264 operator :=(Tvector3_double): Tvector4_double . . . . . . . . . . . . . . 872 26.3.265 operator :=(Tvector3_double): Tvector4_extended . . . . . . . . . . . . . 873 26.3.266 operator :=(Tvector3_double): Tvector4_single . . . . . . . . . . . . . . 873 26.3.267 operator :=(Tvector3_extended): Tvector2_double . . . . . . . . . . . . . 873 26.3.268 operator :=(Tvector3_extended): Tvector2_extended . . . . . . . . . . . 873 26.3.269 operator :=(Tvector3_extended): Tvector2_single . . . . . . . . . . . . . 874 26.3.270 operator :=(Tvector3_extended): Tvector3_double . . . . . . . . . . . . . 874 26.3.271 operator :=(Tvector3_extended): Tvector3_single . . . . . . . . . . . . . 874 26.3.272 operator :=(Tvector3_extended): Tvector4_double . . . . . . . . . . . . . 874 26.3.273 operator :=(Tvector3_extended): Tvector4_extended . . . . . . . . . . . 875 26.3.274 operator :=(Tvector3_extended): Tvector4_single . . . . . . . . . . . . . 875 26.3.275 operator :=(Tvector3_single): Tvector2_double . . . . . . . . . . . . . . 875 26.3.276 operator :=(Tvector3_single): Tvector2_extended . . . . . . . . . . . . . 875 26.3.277 operator :=(Tvector3_single): Tvector2_single . . . . . . . . . . . . . . . 876 26.3.278 operator :=(Tvector3_single): Tvector3_double . . . . . . . . . . . . . . 876 26.3.279 operator :=(Tvector3_single): Tvector3_extended . . . . . . . . . . . . . 876 26.3.280 operator :=(Tvector3_single): Tvector4_double . . . . . . . . . . . . . . 876 26.3.281 operator :=(Tvector3_single): Tvector4_extended . . . . . . . . . . . . . 877 26.3.282 operator :=(Tvector3_single): Tvector4_single . . . . . . . . . . . . . . . 877 26.3.283 operator :=(Tvector4_double): Tvector2_double . . . . . . . . . . . . . . 877 26.3.284 operator :=(Tvector4_double): Tvector2_extended . . . . . . . . . . . . . 877 26.3.285 operator :=(Tvector4_double): Tvector2_single . . . . . . . . . . . . . . 878 26.3.286 operator :=(Tvector4_double): Tvector3_double . . . . . . . . . . . . . . 878
51
CONTENTS
26.3.287 operator :=(Tvector4_double): Tvector3_extended . . . . . . . . . . . . . 878 26.3.288 operator :=(Tvector4_double): Tvector3_single . . . . . . . . . . . . . . 878 26.3.289 operator :=(Tvector4_double): Tvector4_extended . . . . . . . . . . . . . 879 26.3.290 operator :=(Tvector4_double): Tvector4_single . . . . . . . . . . . . . . 879 26.3.291 operator :=(Tvector4_extended): Tvector2_double . . . . . . . . . . . . . 879 26.3.292 operator :=(Tvector4_extended): Tvector2_extended . . . . . . . . . . . 880 26.3.293 operator :=(Tvector4_extended): Tvector2_single . . . . . . . . . . . . . 880 26.3.294 operator :=(Tvector4_extended): Tvector3_double . . . . . . . . . . . . . 880 26.3.295 operator :=(Tvector4_extended): Tvector3_extended . . . . . . . . . . . 880 26.3.296 operator :=(Tvector4_extended): Tvector3_single . . . . . . . . . . . . . 881 26.3.297 operator :=(Tvector4_extended): Tvector4_double . . . . . . . . . . . . . 881 26.3.298 operator :=(Tvector4_extended): Tvector4_single . . . . . . . . . . . . . 881 26.3.299 operator :=(Tvector4_single): Tvector2_double . . . . . . . . . . . . . . 881 26.3.300 operator :=(Tvector4_single): Tvector2_extended . . . . . . . . . . . . . 882 26.3.301 operator :=(Tvector4_single): Tvector2_single . . . . . . . . . . . . . . . 882 26.3.302 operator :=(Tvector4_single): Tvector3_double . . . . . . . . . . . . . . 882 26.3.303 operator :=(Tvector4_single): Tvector3_extended . . . . . . . . . . . . . 883 26.3.304 operator :=(Tvector4_single): Tvector3_single . . . . . . . . . . . . . . . 883 26.3.305 operator :=(Tvector4_single): Tvector4_double . . . . . . . . . . . . . . 883 26.3.306 operator :=(Tvector4_single): Tvector4_extended . . . . . . . . . . . . . 883 26.3.307 operator ><(Tvector3_double, Tvector3_double): Tvector3_double . . . . 884 26.3.308 operator ><(Tvector3_extended, Tvector3_extended): Tvector3_extended 884 26.3.309 operator ><(Tvector3_single, Tvector3_single): Tvector3_single . . . . . 884 26.4 Tmatrix2_double . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 885 26.4.1 26.4.2 26.4.3 26.4.4 26.4.5 26.4.6 26.4.7 26.4.8 26.4.9 26.4.10 26.4.11 26.4.12 26.5.1 26.5.2 26.5.3 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 885 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 885 Tmatrix2_double.init_zero . . . . . . . . . . . . . . . . . . . . . . . . . 885 Tmatrix2_double.init_identity . . . . . . . . . . . . . . . . . . . . . . . 885 Tmatrix2_double.init . . . . . . . . . . . . . . . . . . . . . . . . . . . . 885 Tmatrix2_double.get_column . . . . . . . . . . . . . . . . . . . . . . . . 886 Tmatrix2_double.get_row . . . . . . . . . . . . . . . . . . . . . . . . . . 886 Tmatrix2_double.set_column . . . . . . . . . . . . . . . . . . . . . . . . 886 Tmatrix2_double.set_row . . . . . . . . . . . . . . . . . . . . . . . . . . 886 Tmatrix2_double.determinant . . . . . . . . . . . . . . . . . . . . . . . . 886 Tmatrix2_double.inverse . . . . . . . . . . . . . . . . . . . . . . . . . . 886 Tmatrix2_double.transpose . . . . . . . . . . . . . . . . . . . . . . . . . 887 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 887 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 887 Tmatrix2_extended.init_zero . . . . . . . . . . . . . . . . . . . . . . . . 887
52
CONTENTS
26.5.4 26.5.5 26.5.6 26.5.7 26.5.8 26.5.9 26.5.10 26.5.11 26.5.12 26.6.1 26.6.2 26.6.3 26.6.4 26.6.5 26.6.6 26.6.7 26.6.8 26.6.9 26.6.10 26.6.11 26.6.12 26.7.1 26.7.2 26.7.3 26.7.4 26.7.5 26.7.6 26.7.7 26.7.8 26.7.9 26.7.10 26.7.11 26.7.12 26.8.1 26.8.2 26.8.3 26.8.4
Tmatrix2_extended.init_identity . . . . . . . . . . . . . . . . . . . . . . 887 Tmatrix2_extended.init . . . . . . . . . . . . . . . . . . . . . . . . . . . 888 Tmatrix2_extended.get_column . . . . . . . . . . . . . . . . . . . . . . . 888 Tmatrix2_extended.get_row . . . . . . . . . . . . . . . . . . . . . . . . 888 Tmatrix2_extended.set_column . . . . . . . . . . . . . . . . . . . . . . . 888 Tmatrix2_extended.set_row . . . . . . . . . . . . . . . . . . . . . . . . . 888 Tmatrix2_extended.determinant . . . . . . . . . . . . . . . . . . . . . . 888 Tmatrix2_extended.inverse . . . . . . . . . . . . . . . . . . . . . . . . . 889 Tmatrix2_extended.transpose . . . . . . . . . . . . . . . . . . . . . . . . 889 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 889 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 889 Tmatrix2_single.init_zero . . . . . . . . . . . . . . . . . . . . . . . . . . 889 Tmatrix2_single.init_identity . . . . . . . . . . . . . . . . . . . . . . . . 890 Tmatrix2_single.init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 890 Tmatrix2_single.get_column . . . . . . . . . . . . . . . . . . . . . . . . 890 Tmatrix2_single.get_row . . . . . . . . . . . . . . . . . . . . . . . . . . 890 Tmatrix2_single.set_column . . . . . . . . . . . . . . . . . . . . . . . . 890 Tmatrix2_single.set_row . . . . . . . . . . . . . . . . . . . . . . . . . . 891 Tmatrix2_single.determinant . . . . . . . . . . . . . . . . . . . . . . . . 891 Tmatrix2_single.inverse . . . . . . . . . . . . . . . . . . . . . . . . . . . 891 Tmatrix2_single.transpose . . . . . . . . . . . . . . . . . . . . . . . . . 891 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 891 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 892 Tmatrix3_double.init_zero . . . . . . . . . . . . . . . . . . . . . . . . . 892 Tmatrix3_double.init_identity . . . . . . . . . . . . . . . . . . . . . . . 892 Tmatrix3_double.init . . . . . . . . . . . . . . . . . . . . . . . . . . . . 892 Tmatrix3_double.get_column . . . . . . . . . . . . . . . . . . . . . . . . 892 Tmatrix3_double.get_row . . . . . . . . . . . . . . . . . . . . . . . . . . 893 Tmatrix3_double.set_column . . . . . . . . . . . . . . . . . . . . . . . . 893 Tmatrix3_double.set_row . . . . . . . . . . . . . . . . . . . . . . . . . . 893 Tmatrix3_double.determinant . . . . . . . . . . . . . . . . . . . . . . . . 893 Tmatrix3_double.inverse . . . . . . . . . . . . . . . . . . . . . . . . . . 893 Tmatrix3_double.transpose . . . . . . . . . . . . . . . . . . . . . . . . . 893 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 894 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 894 Tmatrix3_extended.init_zero . . . . . . . . . . . . . . . . . . . . . . . . 894 Tmatrix3_extended.init_identity . . . . . . . . . . . . . . . . . . . . . . 894
53
CONTENTS
26.8.5 26.8.6 26.8.7 26.8.8 26.8.9 26.8.10 26.8.11 26.8.12 26.9.1 26.9.2 26.9.3 26.9.4 26.9.5 26.9.6 26.9.7 26.9.8 26.9.9 26.9.10 26.9.11 26.9.12 26.10.1 26.10.2 26.10.3 26.10.4 26.10.5 26.10.6 26.10.7 26.10.8 26.10.9
Tmatrix3_extended.init . . . . . . . . . . . . . . . . . . . . . . . . . . . 894 Tmatrix3_extended.get_column . . . . . . . . . . . . . . . . . . . . . . . 895 Tmatrix3_extended.get_row . . . . . . . . . . . . . . . . . . . . . . . . 895 Tmatrix3_extended.set_column . . . . . . . . . . . . . . . . . . . . . . . 895 Tmatrix3_extended.set_row . . . . . . . . . . . . . . . . . . . . . . . . . 895 Tmatrix3_extended.determinant . . . . . . . . . . . . . . . . . . . . . . 895 Tmatrix3_extended.inverse . . . . . . . . . . . . . . . . . . . . . . . . . 895 Tmatrix3_extended.transpose . . . . . . . . . . . . . . . . . . . . . . . . 896 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 896 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 896 Tmatrix3_single.init_zero . . . . . . . . . . . . . . . . . . . . . . . . . . 896 Tmatrix3_single.init_identity . . . . . . . . . . . . . . . . . . . . . . . . 896 Tmatrix3_single.init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 897 Tmatrix3_single.get_column . . . . . . . . . . . . . . . . . . . . . . . . 897 Tmatrix3_single.get_row . . . . . . . . . . . . . . . . . . . . . . . . . . 897 Tmatrix3_single.set_column . . . . . . . . . . . . . . . . . . . . . . . . 897 Tmatrix3_single.set_row . . . . . . . . . . . . . . . . . . . . . . . . . . 897 Tmatrix3_single.determinant . . . . . . . . . . . . . . . . . . . . . . . . 898 Tmatrix3_single.inverse . . . . . . . . . . . . . . . . . . . . . . . . . . . 898 Tmatrix3_single.transpose . . . . . . . . . . . . . . . . . . . . . . . . . 898 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 898 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 898 Tmatrix4_double.init_zero . . . . . . . . . . . . . . . . . . . . . . . . . 899 Tmatrix4_double.init_identity . . . . . . . . . . . . . . . . . . . . . . . 899 Tmatrix4_double.init . . . . . . . . . . . . . . . . . . . . . . . . . . . . 899 Tmatrix4_double.get_column . . . . . . . . . . . . . . . . . . . . . . . . 899 Tmatrix4_double.get_row . . . . . . . . . . . . . . . . . . . . . . . . . . 899 Tmatrix4_double.set_column . . . . . . . . . . . . . . . . . . . . . . . . 900 Tmatrix4_double.set_row . . . . . . . . . . . . . . . . . . . . . . . . . . 900
26.10.10 Tmatrix4_double.determinant . . . . . . . . . . . . . . . . . . . . . . . . 900 26.10.11 Tmatrix4_double.inverse . . . . . . . . . . . . . . . . . . . . . . . . . . 900 26.10.12 Tmatrix4_double.transpose . . . . . . . . . . . . . . . . . . . . . . . . . 900 26.11 Tmatrix4_extended . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 901 26.11.1 26.11.2 26.11.3 26.11.4 26.11.5 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 901 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 901 Tmatrix4_extended.init_zero . . . . . . . . . . . . . . . . . . . . . . . . 901 Tmatrix4_extended.init_identity . . . . . . . . . . . . . . . . . . . . . . 901 Tmatrix4_extended.init . . . . . . . . . . . . . . . . . . . . . . . . . . . 901
54
CONTENTS
26.11.10 Tmatrix4_extended.determinant . . . . . . . . . . . . . . . . . . . . . . 902 26.11.11 Tmatrix4_extended.inverse . . . . . . . . . . . . . . . . . . . . . . . . . 903 26.11.12 Tmatrix4_extended.transpose . . . . . . . . . . . . . . . . . . . . . . . . 903 26.12 Tmatrix4_single . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 903 26.12.1 26.12.2 26.12.3 26.12.4 26.12.5 26.12.6 26.12.7 26.12.8 26.12.9 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 903 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 903 Tmatrix4_single.init_zero . . . . . . . . . . . . . . . . . . . . . . . . . . 903 Tmatrix4_single.init_identity . . . . . . . . . . . . . . . . . . . . . . . . 904 Tmatrix4_single.init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 904 Tmatrix4_single.get_column . . . . . . . . . . . . . . . . . . . . . . . . 904 Tmatrix4_single.get_row . . . . . . . . . . . . . . . . . . . . . . . . . . 904 Tmatrix4_single.set_column . . . . . . . . . . . . . . . . . . . . . . . . 904 Tmatrix4_single.set_row . . . . . . . . . . . . . . . . . . . . . . . . . . 905
26.12.10 Tmatrix4_single.determinant . . . . . . . . . . . . . . . . . . . . . . . . 905 26.12.11 Tmatrix4_single.inverse . . . . . . . . . . . . . . . . . . . . . . . . . . . 905 26.12.12 Tmatrix4_single.transpose . . . . . . . . . . . . . . . . . . . . . . . . . 905 26.13 Tvector2_double . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 905 26.13.1 26.13.2 26.13.3 26.13.4 26.13.5 26.13.6 26.13.7 26.14.1 26.14.2 26.14.3 26.14.4 26.14.5 26.14.6 26.14.7 26.15.1 26.15.2 26.15.3 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 905 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 906 Tvector2_double.init_zero . . . . . . . . . . . . . . . . . . . . . . . . . 906 Tvector2_double.init_one . . . . . . . . . . . . . . . . . . . . . . . . . . 906 Tvector2_double.init . . . . . . . . . . . . . . . . . . . . . . . . . . . . 906 Tvector2_double.length . . . . . . . . . . . . . . . . . . . . . . . . . . . 906 Tvector2_double.squared_length . . . . . . . . . . . . . . . . . . . . . . 906 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 907 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 907 Tvector2_extended.init_zero . . . . . . . . . . . . . . . . . . . . . . . . 907 Tvector2_extended.init_one . . . . . . . . . . . . . . . . . . . . . . . . . 907 Tvector2_extended.init . . . . . . . . . . . . . . . . . . . . . . . . . . . 907 Tvector2_extended.length . . . . . . . . . . . . . . . . . . . . . . . . . . 907 Tvector2_extended.squared_length . . . . . . . . . . . . . . . . . . . . . 908 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 908 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 908 Tvector2_single.init_zero . . . . . . . . . . . . . . . . . . . . . . . . . . 908
55
CONTENTS
26.15.4 26.15.5 26.15.6 26.15.7 26.16.1 26.16.2 26.16.3 26.16.4 26.16.5 26.16.6 26.16.7 26.17.1 26.17.2 26.17.3 26.17.4 26.17.5 26.17.6 26.17.7 26.18.1 26.18.2 26.18.3 26.18.4 26.18.5 26.18.6 26.18.7 26.19.1 26.19.2 26.19.3 26.19.4 26.19.5 26.19.6 26.19.7 26.20.1 26.20.2 26.20.3
Tvector2_single.init_one . . . . . . . . . . . . . . . . . . . . . . . . . . 908 Tvector2_single.init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 908 Tvector2_single.length . . . . . . . . . . . . . . . . . . . . . . . . . . . 909 Tvector2_single.squared_length . . . . . . . . . . . . . . . . . . . . . . 909 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 909 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 909 Tvector3_double.init_zero . . . . . . . . . . . . . . . . . . . . . . . . . 909 Tvector3_double.init_one . . . . . . . . . . . . . . . . . . . . . . . . . . 909 Tvector3_double.init . . . . . . . . . . . . . . . . . . . . . . . . . . . . 910 Tvector3_double.length . . . . . . . . . . . . . . . . . . . . . . . . . . . 910 Tvector3_double.squared_length . . . . . . . . . . . . . . . . . . . . . . 910 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 910 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 910 Tvector3_extended.init_zero . . . . . . . . . . . . . . . . . . . . . . . . 910 Tvector3_extended.init_one . . . . . . . . . . . . . . . . . . . . . . . . . 911 Tvector3_extended.init . . . . . . . . . . . . . . . . . . . . . . . . . . . 911 Tvector3_extended.length . . . . . . . . . . . . . . . . . . . . . . . . . . 911 Tvector3_extended.squared_length . . . . . . . . . . . . . . . . . . . . . 911 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 911 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 911 Tvector3_single.init_zero . . . . . . . . . . . . . . . . . . . . . . . . . . 912 Tvector3_single.init_one . . . . . . . . . . . . . . . . . . . . . . . . . . 912 Tvector3_single.init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 912 Tvector3_single.length . . . . . . . . . . . . . . . . . . . . . . . . . . . 912 Tvector3_single.squared_length . . . . . . . . . . . . . . . . . . . . . . 912 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 912 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 913 Tvector4_double.init_zero . . . . . . . . . . . . . . . . . . . . . . . . . 913 Tvector4_double.init_one . . . . . . . . . . . . . . . . . . . . . . . . . . 913 Tvector4_double.init . . . . . . . . . . . . . . . . . . . . . . . . . . . . 913 Tvector4_double.length . . . . . . . . . . . . . . . . . . . . . . . . . . . 913 Tvector4_double.squared_length . . . . . . . . . . . . . . . . . . . . . . 913 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 914 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 914 Tvector4_extended.init_zero . . . . . . . . . . . . . . . . . . . . . . . . 914
56
CONTENTS
26.20.4 26.20.5 26.20.6 26.20.7 26.21.1 26.21.2 26.21.3 26.21.4 26.21.5 26.21.6 26.21.7
Tvector4_extended.init_one . . . . . . . . . . . . . . . . . . . . . . . . . 914 Tvector4_extended.init . . . . . . . . . . . . . . . . . . . . . . . . . . . 914 Tvector4_extended.length . . . . . . . . . . . . . . . . . . . . . . . . . . 914 Tvector4_extended.squared_length . . . . . . . . . . . . . . . . . . . . . 915 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 915 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 915 Tvector4_single.init_zero . . . . . . . . . . . . . . . . . . . . . . . . . . 915 Tvector4_single.init_one . . . . . . . . . . . . . . . . . . . . . . . . . . 915 Tvector4_single.init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 915 Tvector4_single.length . . . . . . . . . . . . . . . . . . . . . . . . . . . 916 Tvector4_single.squared_length . . . . . . . . . . . . . . . . . . . . . . 916 917
27.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 917 27.2 Constants, types and variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 917 27.2.1 27.2.2 27.3.1 27.3.2 Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 917 Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 918 emms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 919 femms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 919 920
28.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 920 28.2 Writing a custom mouse driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . 920 28.3 Constants, types and variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 922 28.3.1 28.3.2 28.3.3 28.4.1 28.4.2 28.4.3 28.4.4 28.4.5 28.4.6 28.4.7 28.4.8 28.4.9 28.4.10 28.4.11 Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 922 Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 923 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 924 DetectMouse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 924 DoneMouse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 925 GetMouseButtons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 925 GetMouseDriver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 926 GetMouseEvent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 926 GetMouseX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 926 GetMouseY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 927 HideMouse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 927 InitMouse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 928 PollMouseEvent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 929 PutMouseEvent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 929 57
CONTENTS
29.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 931 29.2 Constants, types and variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 931 29.2.1 29.2.2 29.2.3 29.3.1 29.3.2 29.3.3 29.3.4 29.3.5 29.3.6 29.3.7 29.3.8 29.3.9 29.3.10 29.3.11 29.3.12 29.3.13 29.3.14 29.3.15 29.3.16 29.4.1 29.4.2 29.4.3 29.4.4 29.4.5 29.4.6 29.4.7 29.4.8 29.4.9 29.4.10 29.4.11 Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 931 Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 933 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 937 Abstract . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 937 CallPointerConstructor . . . . . . . . . . . . . . . . . . . . . . . . . . . 937 CallPointerLocal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 938 CallPointerMethod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 938 CallPointerMethodLocal . . . . . . . . . . . . . . . . . . . . . . . . . . 938 CallVoidConstructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 939 CallVoidLocal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 939 CallVoidMethod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 939 CallVoidMethodLocal . . . . . . . . . . . . . . . . . . . . . . . . . . . . 940 DisposeStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 940 LongDiv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 940 LongMul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 940 NewStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 941 RegisterObjects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 941 RegisterType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 942 SetStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 943 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 944 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 944 TBufStream.Init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 944 TBufStream.Done . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 945 TBufStream.Close . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 945 TBufStream.Flush . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 945 TBufStream.Truncate . . . . . . . . . . . . . . . . . . . . . . . . . . . . 946 TBufStream.Seek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 946 TBufStream.Open . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 947 TBufStream.Read . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 947 TBufStream.Write . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 947
58
CONTENTS
29.5.1 29.5.2 29.5.3 29.5.4 29.5.5 29.5.6 29.5.7 29.5.8 29.5.9 29.5.10 29.5.11 29.5.12 29.5.13 29.5.14 29.5.15 29.5.16 29.5.17 29.5.18 29.5.19 29.5.20 29.5.21 29.5.22 29.5.23 29.5.24 29.5.25 29.5.26 29.6.1 29.6.2 29.6.3 29.6.4 29.6.5 29.6.6 29.6.7 29.6.8 29.6.9 29.6.10 29.7.1 29.7.2
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 948 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 948 TCollection.Init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 948 TCollection.Load . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 949 TCollection.Done . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 949 TCollection.At . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 950 TCollection.IndexOf . . . . . . . . . . . . . . . . . . . . . . . . . . . . 950 TCollection.GetItem . . . . . . . . . . . . . . . . . . . . . . . . . . . . 951 TCollection.LastThat . . . . . . . . . . . . . . . . . . . . . . . . . . . . 952 TCollection.FirstThat . . . . . . . . . . . . . . . . . . . . . . . . . . . . 952 TCollection.Pack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 953 TCollection.FreeAll . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 954 TCollection.DeleteAll . . . . . . . . . . . . . . . . . . . . . . . . . . . . 955 TCollection.Free . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 956 TCollection.Insert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 956 TCollection.Delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 957 TCollection.AtFree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 957 TCollection.FreeItem . . . . . . . . . . . . . . . . . . . . . . . . . . . . 958 TCollection.AtDelete . . . . . . . . . . . . . . . . . . . . . . . . . . . . 958 TCollection.ForEach . . . . . . . . . . . . . . . . . . . . . . . . . . . . 959 TCollection.SetLimit . . . . . . . . . . . . . . . . . . . . . . . . . . . . 960 TCollection.Error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 960 TCollection.AtPut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 961 TCollection.AtInsert . . . . . . . . . . . . . . . . . . . . . . . . . . . . 961 TCollection.Store . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 962 TCollection.PutItem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 962 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 962 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 963 TDosStream.Init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 963 TDosStream.Done . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 963 TDosStream.Close . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 964 TDosStream.Truncate . . . . . . . . . . . . . . . . . . . . . . . . . . . . 964 TDosStream.Seek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 965 TDosStream.Open . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 966 TDosStream.Read . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 966 TDosStream.Write . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 967 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 967 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 967
59
CONTENTS
29.7.3 29.7.4 29.7.5 29.7.6 29.7.7 29.8.1 29.8.2 29.8.3 29.8.4 29.8.5 29.8.6 29.9.1 29.10.1 29.10.2 29.10.3 29.10.4 29.10.5 29.10.6 29.10.7 29.10.8 29.10.9
TMemoryStream.Init . . . . . . . . . . . . . . . . . . . . . . . . . . . . 967 TMemoryStream.Done . . . . . . . . . . . . . . . . . . . . . . . . . . . 968 TMemoryStream.Truncate . . . . . . . . . . . . . . . . . . . . . . . . . 968 TMemoryStream.Read . . . . . . . . . . . . . . . . . . . . . . . . . . . 969 TMemoryStream.Write . . . . . . . . . . . . . . . . . . . . . . . . . . . 969 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 969 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 969 TObject.Init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 969 TObject.Free . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 970 TObject.Is_Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 970 TObject.Done . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 971 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 971 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 971 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 971 TRect.Empty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 972 TRect.Equals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 973 TRect.Contains . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 973 TRect.Copy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 973 TRect.Union . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 974 TRect.Intersect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 974 TRect.Move . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 975
29.10.10 TRect.Grow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 976 29.10.11 TRect.Assign . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 976 29.11 TResourceCollection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 977 29.11.1 29.11.2 29.11.3 29.11.4 29.11.5 29.11.6 29.12.1 29.12.2 29.12.3 29.12.4 29.12.5 29.12.6 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 977 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 977 TResourceCollection.KeyOf . . . . . . . . . . . . . . . . . . . . . . . . 977 TResourceCollection.GetItem . . . . . . . . . . . . . . . . . . . . . . . . 978 TResourceCollection.FreeItem . . . . . . . . . . . . . . . . . . . . . . . 978 TResourceCollection.PutItem . . . . . . . . . . . . . . . . . . . . . . . . 978 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 978 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 979 TResourceFile.Init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 979 TResourceFile.Done . . . . . . . . . . . . . . . . . . . . . . . . . . . . 979 TResourceFile.Count . . . . . . . . . . . . . . . . . . . . . . . . . . . . 979 TResourceFile.KeyAt . . . . . . . . . . . . . . . . . . . . . . . . . . . . 980
60
CONTENTS
29.12.10 TResourceFile.Delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . 981 29.12.11 TResourceFile.Put . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 981 29.13 TSortedCollection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 981 29.13.1 29.13.2 29.13.3 29.13.4 29.13.5 29.13.6 29.13.7 29.13.8 29.13.9 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 981 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 982 TSortedCollection.Init . . . . . . . . . . . . . . . . . . . . . . . . . . . . 982 TSortedCollection.Load . . . . . . . . . . . . . . . . . . . . . . . . . . . 982 TSortedCollection.KeyOf . . . . . . . . . . . . . . . . . . . . . . . . . . 982 TSortedCollection.IndexOf . . . . . . . . . . . . . . . . . . . . . . . . . 983 TSortedCollection.Compare . . . . . . . . . . . . . . . . . . . . . . . . 983 TSortedCollection.Search . . . . . . . . . . . . . . . . . . . . . . . . . . 984 TSortedCollection.Insert . . . . . . . . . . . . . . . . . . . . . . . . . . 985
29.13.10 TSortedCollection.Store . . . . . . . . . . . . . . . . . . . . . . . . . . . 986 29.14 TStrCollection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 987 29.14.1 29.14.2 29.14.3 29.14.4 29.14.5 29.14.6 29.15.1 29.15.2 29.15.3 29.15.4 29.15.5 29.15.6 29.15.7 29.15.8 29.15.9 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 987 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 987 TStrCollection.Compare . . . . . . . . . . . . . . . . . . . . . . . . . . 987 TStrCollection.GetItem . . . . . . . . . . . . . . . . . . . . . . . . . . . 988 TStrCollection.FreeItem . . . . . . . . . . . . . . . . . . . . . . . . . . 988 TStrCollection.PutItem . . . . . . . . . . . . . . . . . . . . . . . . . . . 988 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 989 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 989 TStream.Init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 989 TStream.Get . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 989 TStream.StrRead . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 990 TStream.GetPos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 991 TStream.GetSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 991 TStream.ReadStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 992 TStream.Open . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 993
29.15.10 TStream.Close . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 993 29.15.11 TStream.Reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 993 29.15.12 TStream.Flush . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 994 29.15.13 TStream.Truncate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 994 29.15.14 TStream.Put . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 994 29.15.15 TStream.StrWrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 995 29.15.16 TStream.WriteStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 995
61
CONTENTS
29.15.17 TStream.Seek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 995 29.15.18 TStream.Error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 995 29.15.19 TStream.Read . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 996 29.15.20 TStream.Write . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 996 29.15.21 TStream.CopyFrom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 997 29.16 TStringCollection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 997 29.16.1 29.16.2 29.16.3 29.16.4 29.16.5 29.16.6 29.17.1 29.17.2 29.17.3 29.17.4 29.17.5 29.18.1 29.18.2 29.18.3 29.18.4 29.18.5 29.18.6 29.19.1 29.19.2 29.19.3 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 997 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 998 TStringCollection.GetItem . . . . . . . . . . . . . . . . . . . . . . . . . 998 TStringCollection.Compare . . . . . . . . . . . . . . . . . . . . . . . . . 998 TStringCollection.FreeItem . . . . . . . . . . . . . . . . . . . . . . . . . 999 TStringCollection.PutItem . . . . . . . . . . . . . . . . . . . . . . . . . 999 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 999 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1000 TStringList.Load . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1000 TStringList.Done . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1000 TStringList.Get . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1000 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1001 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1001 TStrListMaker.Init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1001 TStrListMaker.Done . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1001 TStrListMaker.Put . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1001 TStrListMaker.Store . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1002 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1002 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1002 TUnSortedStrCollection.Insert . . . . . . . . . . . . . . . . . . . . . . . 1002 1004
30.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1004 30.2 Constants, types and variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1004 30.2.1 30.2.2 Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1004 Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1004 1006
31.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1006 31.2 Utility routines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1006 31.3 Terminal functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1007 31.4 System information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1007 62
CONTENTS
31.5 Signals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1007 31.6 Process handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1008 31.7 Directory handling routines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1008 31.8 Pipes, FIFOs and streams . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1009 31.9 General File handling routines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1009 31.10 File Input/Output routines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1010 31.11 Constants, types and variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1011 31.11.1 31.11.2 31.11.3 31.12.1 31.12.2 31.12.3 31.12.4 31.12.5 31.12.6 31.12.7 31.12.8 31.12.9 Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1011 Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1049 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1057 Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1058 Alarm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1059 AssignPipe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1060 AssignStream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1061 Basename . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1062 CFMakeRaw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1063 CFSetISpeed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1063 CFSetOSpeed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1063 Chmod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1063
31.12.10 Chown . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1065 31.12.11 Clone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1066 31.12.12 CloseDir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1068 31.12.13 CreateShellArgV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1068 31.12.14 Dirname . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1069 31.12.15 Dup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1069 31.12.16 Dup2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1070 31.12.17 EpochToLocal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1071 31.12.18 Execl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1071 31.12.19 Execle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1072 31.12.20 Execlp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1073 31.12.21 Execv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1074 31.12.22 Execve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1075 31.12.23 Execvp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1076 31.12.24 ExitProcess . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1077 31.12.25 Fcntl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1077 31.12.26 fdClose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1078 31.12.27 fdFlush . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1078 31.12.28 fdOpen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1078 31.12.29 fdRead . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1079
63
CONTENTS
31.12.30 fdSeek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1080 31.12.31 fdTruncate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1081 31.12.32 fdWrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1081 31.12.33 FD_Clr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1081 31.12.34 FD_IsSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1082 31.12.35 FD_Set . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1082 31.12.36 FD_Zero . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1082 31.12.37 FExpand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1082 31.12.38 Flock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1083 31.12.39 FNMatch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1083 31.12.40 Fork . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1084 31.12.41 FReName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1084 31.12.42 FSearch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1085 31.12.43 FSplit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1086 31.12.44 FSStat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1086 31.12.45 FStat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1087 31.12.46 GetDate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1088 31.12.47 GetDateTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1089 31.12.48 GetDomainName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1089 31.12.49 GetEGid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1090 31.12.50 GetEnv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1090 31.12.51 GetEpochTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1091 31.12.52 GetEUid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1091 31.12.53 GetFS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1092 31.12.54 GetGid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1092 31.12.55 GetHostName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1093 31.12.56 GetLocalTimezone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1093 31.12.57 GetPid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1094 31.12.58 GetPPid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1094 31.12.59 GetPriority . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1095 31.12.60 GetTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1095 31.12.61 GetTimeOfDay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1096 31.12.62 GetTimezoneFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1096 31.12.63 GetUid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1096 31.12.64 Glob . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1097 31.12.65 Globfree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1098 31.12.66 IOCtl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1098 31.12.67 IOperm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1098 31.12.68 IoPL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1099 31.12.69 IsATTY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1099
64
CONTENTS
31.12.70 Kill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1099 31.12.71 Link . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1100 31.12.72 LocalToEpoch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1101 31.12.73 Lstat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1102 31.12.74 mkFifo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1103 31.12.75 MMap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1103 31.12.76 MUnMap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1105 31.12.77 NanoSleep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1105 31.12.78 Nice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1106 31.12.79 Octal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1107 31.12.80 OpenDir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1107 31.12.81 Pause . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1108 31.12.82 PClose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1109 31.12.83 POpen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1109 31.12.84 ReadDir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1110 31.12.85 ReadLink . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1110 31.12.86 ReadTimezoneFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1111 31.12.87 SeekDir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1112 31.12.88 Select . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1112 31.12.89 SelectText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1113 31.12.90 SetDate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1113 31.12.91 SetDateTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1114 31.12.92 SetPriority . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1114 31.12.93 SetTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1115 31.12.94 Shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1115 31.12.95 SigAction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1115 31.12.96 Signal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1117 31.12.97 SigPending . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1118 31.12.98 SigProcMask . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1118 31.12.99 SigRaise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1118 31.12.100SigSuspend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1119 31.12.101StringToPPChar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1119 31.12.102SymLink . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1120 31.12.103SysCall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1121 31.12.104Sysinfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1122 31.12.105S_ISBLK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1123 31.12.106S_ISCHR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1123 31.12.107S_ISDIR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1123 31.12.108S_ISFIFO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1124 31.12.109S_ISLNK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1124
65
CONTENTS
31.12.110S_ISREG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1125 31.12.111S_ISSOCK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1125 31.12.112TCDrain . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1125 31.12.113TCFlow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1125 31.12.114TCFlush . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1126 31.12.115TCGetAttr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1126 31.12.116TCGetPGrp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1127 31.12.117TCSendBreak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1127 31.12.118TCSetAttr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1128 31.12.119TCSetPGrp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1128 31.12.120TellDir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1128 31.12.121TTYname . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1129 31.12.122Umask . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1129 31.12.123Uname . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1129 31.12.124UnLink . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1130 31.12.125Utime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1130 31.12.126WaitPid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1131 31.12.127WaitProcess . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1132 31.12.128WEXITSTATUS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1132 31.12.129WIFEXITED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1132 31.12.130WIFSIGNALED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1133 31.12.131WIFSTOPPED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1133 31.12.132WSTOPSIG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1133 31.12.133WTERMSIG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1133 31.12.134W_EXITCODE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1134 31.12.135W_STOPCODE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1134 32 Reference for unit ports 1135
32.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1135 32.2 Constants, types and variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1135 32.2.1 32.3.1 32.3.2 32.3.3 32.4.1 32.4.2 32.4.3 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1135 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1136 Property overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1136 tport.pp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1136 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1137 Property overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1137 tportl.pp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1137 32.3 tport . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1136
66
CONTENTS
33.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1138 33.2 Constants, types and variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1138 33.2.1 33.3.1 33.3.2 33.3.3 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1138 AssignLst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1138 InitPrinter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1139 IsLstAvailable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1139 1140 33.3 Procedures and functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1138
34.1 Used units . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1140 34.2 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1140 34.3 Constants, types and variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1140 34.3.1 34.3.2 34.4.1 34.4.2 34.4.3 34.4.4 34.4.5 34.4.6 34.4.7 34.4.8 34.4.9 34.4.10 34.4.11 34.4.12 34.4.13 34.4.14 34.4.15 34.4.16 34.4.17 34.4.18 34.4.19 34.4.20 34.4.21 Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1140 Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1161 Accept . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1164 Bind . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1165 CloseSocket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1166 Connect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1166 fpaccept . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1168 fpbind . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1169 fpconnect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1170 fpgetpeername . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1172 fpgetsockname . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1172 fpgetsockopt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1173 fplisten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1173 fprecv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1173 fprecvfrom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1174 fpsend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1174 fpsendto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1175 fpsetsockopt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1175 fpshutdown . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1176 fpsocket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1176 fpsocketpair . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1177 HostAddrToStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1177 HostAddrToStr6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1177 67
CONTENTS
34.4.22 34.4.23 34.4.24 34.4.25 34.4.26 34.4.27 34.4.28 34.4.29 34.4.30 34.4.31 34.4.32 34.4.33 34.4.34 34.4.35 34.4.36 34.4.37 34.4.38 34.4.39
HostToNet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1177 htonl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1178 htons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1178 NetAddrToStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1178 NetAddrToStr6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1178 NetToHost . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1179 NToHl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1179 NToHs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1179 ShortHostToNet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1179 ShortNetToHost . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1180 Sock2File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1180 Sock2Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1180 socketerror . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1180 Str2UnixSockAddr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1181 StrToHostAddr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1181 StrToHostAddr6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1181 StrToNetAddr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1181 StrToNetAddr6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1182 1183
35.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1183 35.2 Procedures and functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1183 35.2.1 35.2.2 35.2.3 35.2.4 35.2.5 35.2.6 35.2.7 35.2.8 35.2.9 35.2.10 35.2.11 35.2.12 35.2.13 35.2.14 35.2.15 35.2.16 35.2.17 35.2.18 stralloc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1183 strcat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1183 strcomp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1184 strcopy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1184 strdispose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1185 strecopy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1185 strend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1186 stricomp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1187 stripos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1187 striscan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1188 strlcat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1188 strlcomp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1189 strlcopy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1189 strlen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1190 strlicomp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1190 strlower . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1191 strmove . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1191 strnew . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1192
68
CONTENTS
strpas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1193 strpcopy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1193 strpos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1194 strriscan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1194 strrscan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1195 strscan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1195 strupper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1195 1196
36.1 Used units . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1196 36.2 Constants, types and variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1196 36.2.1 36.2.2 36.2.3 36.3.1 36.3.2 36.3.3 36.3.4 36.3.5 36.3.6 36.3.7 36.3.8 36.3.9 36.3.10 36.3.11 36.3.12 36.3.13 36.3.14 36.3.15 36.3.16 36.3.17 36.3.18 36.3.19 36.3.20 36.3.21 36.3.22 36.3.23 36.3.24 36.3.25 Resource strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1196 Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1196 Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1197 AddChar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1198 AddCharR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1198 AnsiContainsStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1198 AnsiContainsText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1198 AnsiEndsStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1199 AnsiEndsText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1199 AnsiIndexStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1199 AnsiIndexText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1200 AnsiLeftStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1200 AnsiMatchStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1200 AnsiMatchText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1200 AnsiMidStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1201 AnsiProperCase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1201 AnsiReplaceStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1201 AnsiReplaceText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1202 AnsiResemblesText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1202 AnsiReverseString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1202 AnsiRightStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1202 AnsiStartsStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1203 AnsiStartsText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1203 BinToHex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1203 Copy2Space . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1204 Copy2SpaceDel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1204 Copy2Symb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1204 Copy2SymbDel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1205
69
CONTENTS
36.3.26 36.3.27 36.3.28 36.3.29 36.3.30 36.3.31 36.3.32 36.3.33 36.3.34 36.3.35 36.3.36 36.3.37 36.3.38 36.3.39 36.3.40 36.3.41 36.3.42 36.3.43 36.3.44 36.3.45 36.3.46 36.3.47 36.3.48 36.3.49 36.3.50 36.3.51 36.3.52 36.3.53 36.3.54 36.3.55 36.3.56 36.3.57 36.3.58 36.3.59 36.3.60 36.3.61 36.3.62 36.3.63 36.3.64 36.3.65
Dec2Numb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1205 DecodeSoundexInt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1205 DecodeSoundexWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1205 DelChars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1206 DelSpace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1206 DelSpace1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1206 DupeString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1206 ExtractDelimited . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1207 ExtractSubstr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1207 ExtractWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1208 ExtractWordPos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1208 FindPart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1208 GetCmdLineArg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1209 Hex2Dec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1209 HexToBin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1210 IfThen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1210 IntToBin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1210 IntToRoman . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1211 IsEmptyStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1211 IsWild . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1211 IsWordPresent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1212 LeftBStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1212 LeftStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1212 MidBStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1213 MidStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1213 NPos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1213 Numb2Dec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1214 Numb2USA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1214 PadCenter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1214 PadLeft . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1214 PadRight . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1215 PosEx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1215 PosSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1215 PosSetEx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1215 RandomFrom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1216 Removeleadingchars . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1216 RemovePadChars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1216 RemoveTrailingChars . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1217 ReverseString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1217 RightBStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1217
70
CONTENTS
36.3.66 36.3.67 36.3.68 36.3.69 36.3.70 36.3.71 36.3.72 36.3.73 36.3.74 36.3.75 36.3.76 36.3.77 36.3.78 36.3.79 36.3.80 36.3.81 36.3.82 36.3.83 36.3.84 36.3.85 36.3.86 36.3.87
RightStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1217 RomanToInt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1218 RPos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1218 RPosex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1218 SearchBuf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1219 Soundex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1219 SoundexCompare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1219 SoundexInt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1220 SoundexProc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1220 SoundexSimilar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1221 SoundexWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1221 StringsReplace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1221 StuffString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1222 Tab2Space . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1222 TrimLeftSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1222 TrimRightSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1222 TrimSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1223 WordCount . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1223 WordPosition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1223 XorDecode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1224 XorEncode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1224 XorString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1224 1225
37.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1225 37.2 A string consisting of widechars. . . . . . . . . . . . . . . . . . . . . . . . . . . . 1225 37.3 Miscellaneous functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1225 37.4 Operating System functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1226 37.5 String handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1226 37.6 Mathematical routines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1227 37.7 Memory management functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1228 37.8 File handling functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1228 37.9 Constants, types and variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1229 37.9.1 37.9.2 37.9.3 37.10.1 37.10.2 37.10.3 Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1229 Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1252 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1276 abs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1279 AbstractError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1279 AcquireExceptionObject . . . . . . . . . . . . . . . . . . . . . . . . . . 1279
71
CONTENTS
AddExitProc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1280 Addr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1280 Align . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1281 AllocMem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1281 AnsiToUtf8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1281 Append . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1281
37.10.10 arctan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1282 37.10.11 ArrayStringToPPchar . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1282 37.10.12 Assert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1283 37.10.13 Assign . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1283 37.10.14 Assigned . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1284 37.10.15 BasicEventCreate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1285 37.10.16 basiceventdestroy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1285 37.10.17 basiceventResetEvent . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1285 37.10.18 basiceventSetEvent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1285 37.10.19 basiceventWaitFor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1285 37.10.20 BeginThread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1286 37.10.21 BEtoN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1286 37.10.22 binStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1286 37.10.23 BlockRead . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1287 37.10.24 BlockWrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1288 37.10.25 Break . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1288 37.10.26 BsfByte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1289 37.10.27 BsfDWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1290 37.10.28 BsfQWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1290 37.10.29 BsfWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1290 37.10.30 BsrByte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1290 37.10.31 BsrDWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1291 37.10.32 BsrQWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1291 37.10.33 BsrWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1291 37.10.34 chdir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1291 37.10.35 chr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1292 37.10.36 Close . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1292 37.10.37 CloseThread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1293 37.10.38 CompareByte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1293 37.10.39 CompareChar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1294 37.10.40 CompareChar0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1296 37.10.41 CompareDWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1296 37.10.42 CompareWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1297 37.10.43 Concat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1298
72
CONTENTS
37.10.44 Continue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1299 37.10.45 Copy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1300 37.10.46 cos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1300 37.10.47 Cseg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1301 37.10.48 Dec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1301 37.10.49 DefaultAnsi2UnicodeMove . . . . . . . . . . . . . . . . . . . . . . . . . 1302 37.10.50 DefaultAnsi2WideMove . . . . . . . . . . . . . . . . . . . . . . . . . . 1302 37.10.51 DefaultUnicode2AnsiMove . . . . . . . . . . . . . . . . . . . . . . . . . 1302 37.10.52 DefaultWide2AnsiMove . . . . . . . . . . . . . . . . . . . . . . . . . . 1303 37.10.53 Delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1303 37.10.54 Dispose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1304 37.10.55 DoneCriticalsection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1305 37.10.56 DoneThread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1305 37.10.57 Dseg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1305 37.10.58 DumpExceptionBackTrace . . . . . . . . . . . . . . . . . . . . . . . . . 1306 37.10.59 Dump_Stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1306 37.10.60 DynArraySetLength . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1306 37.10.61 EndThread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1306 37.10.62 EnterCriticalsection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1307 37.10.63 EnumResourceLanguages . . . . . . . . . . . . . . . . . . . . . . . . . . 1307 37.10.64 EnumResourceNames . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1308 37.10.65 EnumResourceTypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1308 37.10.66 EOF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1308 37.10.67 EOLn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1309 37.10.68 Erase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1310 37.10.69 Error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1310 37.10.70 Exclude . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1310 37.10.71 Exit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1312 37.10.72 exp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1313 37.10.73 FilePos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1313 37.10.74 FileSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1314 37.10.75 FillByte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1315 37.10.76 FillChar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1315 37.10.77 FillDWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1316 37.10.78 FillQWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1316 37.10.79 FillWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1317 37.10.80 FindResource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1317 37.10.81 FindResourceEx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1318 37.10.82 oat_raise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1318 37.10.83 Flush . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1318
73
CONTENTS
37.10.84 FlushThread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1319 37.10.85 FPower10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1319 37.10.86 frac . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1320 37.10.87 Freemem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1320 37.10.88 Freememory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1321 37.10.89 FreeResource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1321 37.10.90 GetCurrentThreadId . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1321 37.10.91 getdir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1321 37.10.92 GetFPCHeapStatus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1322 37.10.93 GetHeapStatus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1322 37.10.94 GetMem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1322 37.10.95 GetMemory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1323 37.10.96 GetMemoryManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1323 37.10.97 GetProcessID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1323 37.10.98 GetResourceManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1323 37.10.99 GetThreadID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1324 37.10.100GetThreadManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1324 37.10.101GetUnicodeStringManager . . . . . . . . . . . . . . . . . . . . . . . . . 1324 37.10.102GetVariantManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1324 37.10.103GetWideStringManager . . . . . . . . . . . . . . . . . . . . . . . . . . . 1325 37.10.104get_caller_addr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1325 37.10.105get_caller_frame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1325 37.10.106get_cmdline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1325 37.10.107get_frame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1326 37.10.108halt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1326 37.10.109hexStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1326 37.10.110hi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1327 37.10.111High . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1328 37.10.112HINSTANCE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1329 37.10.113Inc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1329 37.10.114Include . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1330 37.10.115IndexByte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1330 37.10.116IndexChar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1331 37.10.117IndexChar0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1332 37.10.118IndexDWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1332 37.10.119IndexQWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1333 37.10.120Indexword . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1333 37.10.121InitCriticalSection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1334 37.10.122InitThread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1334 37.10.123InitThreadVars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1334
74
CONTENTS
37.10.124Insert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1335 37.10.125int . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1335 37.10.126InterlockedCompareExchange . . . . . . . . . . . . . . . . . . . . . . . 1336 37.10.127InterLockedDecrement . . . . . . . . . . . . . . . . . . . . . . . . . . . 1336 37.10.128InterLockedExchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1336 37.10.129InterLockedExchangeAdd . . . . . . . . . . . . . . . . . . . . . . . . . . 1337 37.10.130InterLockedIncrement . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1337 37.10.131IOResult . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1338 37.10.132IsMemoryManagerSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1339 37.10.133Is_IntResource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1339 37.10.134KillThread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1339 37.10.135LeaveCriticalsection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1340 37.10.136Length . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1340 37.10.137LEtoN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1341 37.10.138ln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1341 37.10.139lo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1342 37.10.140LoadResource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1342 37.10.141LockResource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1343 37.10.142longjmp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1343 37.10.143Low . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1343 37.10.144lowerCase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1344 37.10.145MakeLangID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1344 37.10.146MemSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1344 37.10.147mkdir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1345 37.10.148Move . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1345 37.10.149MoveChar0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1345 37.10.150New . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1346 37.10.151NtoBE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1346 37.10.152NtoLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1347 37.10.153Null . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1347 37.10.154OctStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1347 37.10.155odd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1348 37.10.156Ofs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1348 37.10.157operator *(variant, variant): variant . . . . . . . . . . . . . . . . . . . . . 1349 37.10.158operator **(variant, variant): variant . . . . . . . . . . . . . . . . . . . . 1349 37.10.159operator +(variant, variant): variant . . . . . . . . . . . . . . . . . . . . . 1349 37.10.160operator -(variant): variant . . . . . . . . . . . . . . . . . . . . . . . . . 1350 37.10.161operator -(variant, variant): variant . . . . . . . . . . . . . . . . . . . . . 1350 37.10.162operator /(variant, variant): variant . . . . . . . . . . . . . . . . . . . . . 1350 37.10.163operator :=(ansistring): olevariant . . . . . . . . . . . . . . . . . . . . . . 1351
75
CONTENTS
37.10.164operator :=(ansistring): variant . . . . . . . . . . . . . . . . . . . . . . . 1351 37.10.165operator :=(Boolean): olevariant . . . . . . . . . . . . . . . . . . . . . . 1351 37.10.166operator :=(Boolean): variant . . . . . . . . . . . . . . . . . . . . . . . . 1351 37.10.167operator :=(Byte): olevariant . . . . . . . . . . . . . . . . . . . . . . . . 1351 37.10.168operator :=(Byte): variant . . . . . . . . . . . . . . . . . . . . . . . . . . 1352 37.10.169operator :=(Char): olevariant . . . . . . . . . . . . . . . . . . . . . . . . 1352 37.10.170operator :=(Char): variant . . . . . . . . . . . . . . . . . . . . . . . . . . 1352 37.10.171operator :=(comp): olevariant . . . . . . . . . . . . . . . . . . . . . . . . 1352 37.10.172operator :=(comp): variant . . . . . . . . . . . . . . . . . . . . . . . . . 1352 37.10.173operator :=(currency): olevariant . . . . . . . . . . . . . . . . . . . . . . 1352 37.10.174operator :=(currency): variant . . . . . . . . . . . . . . . . . . . . . . . . 1353 37.10.175operator :=(Double): olevariant . . . . . . . . . . . . . . . . . . . . . . . 1353 37.10.176operator :=(Double): variant . . . . . . . . . . . . . . . . . . . . . . . . 1353 37.10.177operator :=(DWord): olevariant . . . . . . . . . . . . . . . . . . . . . . . 1353 37.10.178operator :=(DWord): variant . . . . . . . . . . . . . . . . . . . . . . . . 1353 37.10.179operator :=(extended): olevariant . . . . . . . . . . . . . . . . . . . . . . 1353 37.10.180operator :=(extended): variant . . . . . . . . . . . . . . . . . . . . . . . . 1354 37.10.181operator :=(Int64): olevariant . . . . . . . . . . . . . . . . . . . . . . . . 1354 37.10.182operator :=(Int64): variant . . . . . . . . . . . . . . . . . . . . . . . . . . 1354 37.10.183operator :=(longbool): olevariant . . . . . . . . . . . . . . . . . . . . . . 1354 37.10.184operator :=(longbool): variant . . . . . . . . . . . . . . . . . . . . . . . . 1354 37.10.185operator :=(LongInt): olevariant . . . . . . . . . . . . . . . . . . . . . . 1354 37.10.186operator :=(LongInt): variant . . . . . . . . . . . . . . . . . . . . . . . . 1355 37.10.187operator :=(olevariant): ansistring . . . . . . . . . . . . . . . . . . . . . . 1355 37.10.188operator :=(olevariant): Boolean . . . . . . . . . . . . . . . . . . . . . . 1355 37.10.189operator :=(olevariant): Byte . . . . . . . . . . . . . . . . . . . . . . . . 1355 37.10.190operator :=(olevariant): Char . . . . . . . . . . . . . . . . . . . . . . . . 1355 37.10.191operator :=(olevariant): comp . . . . . . . . . . . . . . . . . . . . . . . . 1355 37.10.192operator :=(olevariant): currency . . . . . . . . . . . . . . . . . . . . . . 1356 37.10.193operator :=(olevariant): Double . . . . . . . . . . . . . . . . . . . . . . . 1356 37.10.194operator :=(olevariant): DWord . . . . . . . . . . . . . . . . . . . . . . . 1356 37.10.195operator :=(olevariant): extended . . . . . . . . . . . . . . . . . . . . . . 1356 37.10.196operator :=(olevariant): Int64 . . . . . . . . . . . . . . . . . . . . . . . . 1356 37.10.197operator :=(olevariant): longbool . . . . . . . . . . . . . . . . . . . . . . 1357 37.10.198operator :=(olevariant): LongInt . . . . . . . . . . . . . . . . . . . . . . 1357 37.10.199operator :=(olevariant): QWord . . . . . . . . . . . . . . . . . . . . . . . 1357 37.10.200operator :=(olevariant): Real . . . . . . . . . . . . . . . . . . . . . . . . 1357 37.10.201operator :=(olevariant): ShortInt . . . . . . . . . . . . . . . . . . . . . . 1357 37.10.202operator :=(olevariant): shortstring . . . . . . . . . . . . . . . . . . . . . 1357 37.10.203operator :=(olevariant): single . . . . . . . . . . . . . . . . . . . . . . . . 1358
76
CONTENTS
37.10.204operator :=(olevariant): SmallInt . . . . . . . . . . . . . . . . . . . . . . 1358 37.10.205operator :=(olevariant): TDateTime . . . . . . . . . . . . . . . . . . . . . 1358 37.10.206operator :=(olevariant): TError . . . . . . . . . . . . . . . . . . . . . . . 1358 37.10.207operator :=(olevariant): UnicodeString . . . . . . . . . . . . . . . . . . . 1358 37.10.208operator :=(olevariant): variant . . . . . . . . . . . . . . . . . . . . . . . 1358 37.10.209operator :=(olevariant): WideChar . . . . . . . . . . . . . . . . . . . . . 1359 37.10.210operator :=(olevariant): widestring . . . . . . . . . . . . . . . . . . . . . 1359 37.10.211operator :=(olevariant): Word . . . . . . . . . . . . . . . . . . . . . . . . 1359 37.10.212operator :=(olevariant): wordbool . . . . . . . . . . . . . . . . . . . . . . 1359 37.10.213operator :=(QWord): olevariant . . . . . . . . . . . . . . . . . . . . . . . 1359 37.10.214operator :=(QWord): variant . . . . . . . . . . . . . . . . . . . . . . . . 1360 37.10.215operator :=(Real): olevariant . . . . . . . . . . . . . . . . . . . . . . . . 1360 37.10.216operator :=(Real): variant . . . . . . . . . . . . . . . . . . . . . . . . . . 1360 37.10.217operator :=(real48): Double . . . . . . . . . . . . . . . . . . . . . . . . . 1360 37.10.218operator :=(real48): extended . . . . . . . . . . . . . . . . . . . . . . . . 1360 37.10.219operator :=(ShortInt): olevariant . . . . . . . . . . . . . . . . . . . . . . 1360 37.10.220operator :=(ShortInt): variant . . . . . . . . . . . . . . . . . . . . . . . . 1360 37.10.221operator :=(shortstring): olevariant . . . . . . . . . . . . . . . . . . . . . 1361 37.10.222operator :=(shortstring): variant . . . . . . . . . . . . . . . . . . . . . . . 1361 37.10.223operator :=(single): olevariant . . . . . . . . . . . . . . . . . . . . . . . . 1361 37.10.224operator :=(single): variant . . . . . . . . . . . . . . . . . . . . . . . . . 1361 37.10.225operator :=(SmallInt): olevariant . . . . . . . . . . . . . . . . . . . . . . 1361 37.10.226operator :=(SmallInt): variant . . . . . . . . . . . . . . . . . . . . . . . . 1361 37.10.227operator :=(TDateTime): olevariant . . . . . . . . . . . . . . . . . . . . . 1362 37.10.228operator :=(TDateTime): variant . . . . . . . . . . . . . . . . . . . . . . 1362 37.10.229operator :=(TError): olevariant . . . . . . . . . . . . . . . . . . . . . . . 1362 37.10.230operator :=(TError): variant . . . . . . . . . . . . . . . . . . . . . . . . . 1362 37.10.231operator :=(UCS4String): variant . . . . . . . . . . . . . . . . . . . . . . 1362 37.10.232operator :=(UnicodeString): olevariant . . . . . . . . . . . . . . . . . . . 1362 37.10.233operator :=(UnicodeString): variant . . . . . . . . . . . . . . . . . . . . . 1363 37.10.234operator :=(UTF8String): variant . . . . . . . . . . . . . . . . . . . . . . 1363 37.10.235operator :=(variant): ansistring . . . . . . . . . . . . . . . . . . . . . . . 1363 37.10.236operator :=(variant): Boolean . . . . . . . . . . . . . . . . . . . . . . . . 1363 37.10.237operator :=(variant): Byte . . . . . . . . . . . . . . . . . . . . . . . . . . 1363 37.10.238operator :=(variant): Char . . . . . . . . . . . . . . . . . . . . . . . . . . 1363 37.10.239operator :=(variant): comp . . . . . . . . . . . . . . . . . . . . . . . . . 1364 37.10.240operator :=(variant): currency . . . . . . . . . . . . . . . . . . . . . . . . 1364 37.10.241operator :=(variant): Double . . . . . . . . . . . . . . . . . . . . . . . . 1364 37.10.242operator :=(variant): DWord . . . . . . . . . . . . . . . . . . . . . . . . 1364 37.10.243operator :=(variant): extended . . . . . . . . . . . . . . . . . . . . . . . . 1364
77
CONTENTS
37.10.244operator :=(variant): Int64 . . . . . . . . . . . . . . . . . . . . . . . . . . 1364 37.10.245operator :=(variant): longbool . . . . . . . . . . . . . . . . . . . . . . . . 1365 37.10.246operator :=(variant): LongInt . . . . . . . . . . . . . . . . . . . . . . . . 1365 37.10.247operator :=(variant): olevariant . . . . . . . . . . . . . . . . . . . . . . . 1365 37.10.248operator :=(variant): QWord . . . . . . . . . . . . . . . . . . . . . . . . 1365 37.10.249operator :=(variant): Real . . . . . . . . . . . . . . . . . . . . . . . . . . 1365 37.10.250operator :=(variant): ShortInt . . . . . . . . . . . . . . . . . . . . . . . . 1365 37.10.251operator :=(variant): shortstring . . . . . . . . . . . . . . . . . . . . . . . 1366 37.10.252operator :=(variant): single . . . . . . . . . . . . . . . . . . . . . . . . . 1366 37.10.253operator :=(variant): SmallInt . . . . . . . . . . . . . . . . . . . . . . . . 1366 37.10.254operator :=(variant): TDateTime . . . . . . . . . . . . . . . . . . . . . . 1366 37.10.255operator :=(variant): TError . . . . . . . . . . . . . . . . . . . . . . . . . 1366 37.10.256operator :=(variant): unicodestring . . . . . . . . . . . . . . . . . . . . . 1366 37.10.257operator :=(variant): UTF8String . . . . . . . . . . . . . . . . . . . . . . 1367 37.10.258operator :=(variant): WideChar . . . . . . . . . . . . . . . . . . . . . . . 1367 37.10.259operator :=(variant): widestring . . . . . . . . . . . . . . . . . . . . . . . 1367 37.10.260operator :=(variant): Word . . . . . . . . . . . . . . . . . . . . . . . . . 1367 37.10.261operator :=(variant): wordbool . . . . . . . . . . . . . . . . . . . . . . . 1367 37.10.262operator :=(WideChar): olevariant . . . . . . . . . . . . . . . . . . . . . 1367 37.10.263operator :=(WideChar): variant . . . . . . . . . . . . . . . . . . . . . . . 1368 37.10.264operator :=(widestring): olevariant . . . . . . . . . . . . . . . . . . . . . 1368 37.10.265operator :=(widestring): variant . . . . . . . . . . . . . . . . . . . . . . . 1368 37.10.266operator :=(Word): olevariant . . . . . . . . . . . . . . . . . . . . . . . . 1368 37.10.267operator :=(Word): variant . . . . . . . . . . . . . . . . . . . . . . . . . 1368 37.10.268operator :=(wordbool): olevariant . . . . . . . . . . . . . . . . . . . . . . 1369 37.10.269operator :=(wordbool): variant . . . . . . . . . . . . . . . . . . . . . . . 1369 37.10.270operator <(variant, variant): Boolean . . . . . . . . . . . . . . . . . . . . 1369 37.10.271operator <=(variant, variant): Boolean . . . . . . . . . . . . . . . . . . . 1369 37.10.272operator =(variant, variant): Boolean . . . . . . . . . . . . . . . . . . . . 1370 37.10.273operator >(variant, variant): Boolean . . . . . . . . . . . . . . . . . . . . 1370 37.10.274operator >=(variant, variant): Boolean . . . . . . . . . . . . . . . . . . . 1370 37.10.275operator and(variant, variant): variant . . . . . . . . . . . . . . . . . . . . 1371 37.10.276operator div(variant, variant): variant . . . . . . . . . . . . . . . . . . . . 1371 37.10.277operator mod(variant, variant): variant . . . . . . . . . . . . . . . . . . . 1371 37.10.278operator not(variant): variant . . . . . . . . . . . . . . . . . . . . . . . . 1372 37.10.279operator or(variant, variant): variant . . . . . . . . . . . . . . . . . . . . 1372 37.10.280operator shl(variant, variant): variant . . . . . . . . . . . . . . . . . . . . 1372 37.10.281operator shr(variant, variant): variant . . . . . . . . . . . . . . . . . . . . 1372 37.10.282operator xor(variant, variant): variant . . . . . . . . . . . . . . . . . . . . 1373 37.10.283Ord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1373
78
CONTENTS
37.10.284Pack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1374 37.10.285Paramcount . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1374 37.10.286ParamStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1375 37.10.287pi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1375 37.10.288Pos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1376 37.10.289Pred . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1377 37.10.290prefetch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1377 37.10.291ptr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1377 37.10.292RaiseList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1378 37.10.293Random . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1378 37.10.294Randomize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1379 37.10.295Read . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1379 37.10.296ReadBarrier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1380 37.10.297ReadDependencyBarrier . . . . . . . . . . . . . . . . . . . . . . . . . . 1380 37.10.298ReadLn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1381 37.10.299ReadStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1381 37.10.300ReadWriteBarrier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1382 37.10.301Real2Double . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1382 37.10.302ReAllocMem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1383 37.10.303ReAllocMemory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1383 37.10.304ReleaseExceptionObject . . . . . . . . . . . . . . . . . . . . . . . . . . 1383 37.10.305Rename . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1383 37.10.306Reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1384 37.10.307ResumeThread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1385 37.10.308Rewrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1385 37.10.309rmdir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1386 37.10.310RolByte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1386 37.10.311RolDWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1387 37.10.312RolQWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1387 37.10.313RolWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1387 37.10.314RorByte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1388 37.10.315RorDWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1388 37.10.316RorQWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1388 37.10.317RorWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1388 37.10.318round . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1389 37.10.319RTLEventCreate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1389 37.10.320RTLeventdestroy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1390 37.10.321RTLeventResetEvent . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1390 37.10.322RTLeventSetEvent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1390 37.10.323RTLeventsync . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1390
79
CONTENTS
37.10.324RTLeventWaitFor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1390 37.10.325RunError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1391 37.10.326SarInt64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1391 37.10.327SarLongint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1391 37.10.328SarShortint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1392 37.10.329SarSmallint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1392 37.10.330Seek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1392 37.10.331SeekEOF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1393 37.10.332SeekEOLn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1394 37.10.333Seg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1394 37.10.334Setjmp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1395 37.10.335SetLength . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1396 37.10.336SetMemoryManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1396 37.10.337SetResourceManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1397 37.10.338SetString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1397 37.10.339SetTextBuf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1397 37.10.340SetTextLineEnding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1398 37.10.341SetThreadManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1399 37.10.342SetUnicodeStringManager . . . . . . . . . . . . . . . . . . . . . . . . . 1399 37.10.343SetVariantManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1399 37.10.344SetWideStringManager . . . . . . . . . . . . . . . . . . . . . . . . . . . 1400 37.10.345ShortCompareText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1400 37.10.346sin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1400 37.10.347SizeOf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1401 37.10.348SizeofResource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1401 37.10.349Space . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1402 37.10.350Sptr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1402 37.10.351sqr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1402 37.10.352sqrt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1403 37.10.353Sseg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1403 37.10.354Str . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1404 37.10.355StringOfChar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1404 37.10.356StringToPPChar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1405 37.10.357StringToUnicodeChar . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1405 37.10.358StringToWideChar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1406 37.10.359strlen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1406 37.10.360strpas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1406 37.10.361Succ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1407 37.10.362SuspendThread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1407 37.10.363Swap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1407
80
CONTENTS
37.10.364SwapEndian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1408 37.10.365SysAllocMem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1408 37.10.366SysAssert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1408 37.10.367SysBackTraceStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1409 37.10.368SysFlushStdIO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1409 37.10.369SysFreemem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1409 37.10.370SysFreememSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1409 37.10.371SysGetFPCHeapStatus . . . . . . . . . . . . . . . . . . . . . . . . . . . 1410 37.10.372SysGetHeapStatus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1410 37.10.373SysGetmem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1410 37.10.374SysInitExceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1410 37.10.375SysInitFPU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1411 37.10.376SysInitStdIO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1411 37.10.377SysMemSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1411 37.10.378SysReAllocMem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1411 37.10.379SysResetFPU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1411 37.10.380SysSetCtrlBreakHandler . . . . . . . . . . . . . . . . . . . . . . . . . . 1412 37.10.381SysTryResizeMem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1412 37.10.382ThreadGetPriority . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1412 37.10.383ThreadSetPriority . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1412 37.10.384ThreadSwitch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1413 37.10.385trunc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1413 37.10.386Truncate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1413 37.10.387TryEnterCriticalsection . . . . . . . . . . . . . . . . . . . . . . . . . . . 1414 37.10.388UCS4StringToUnicodeString . . . . . . . . . . . . . . . . . . . . . . . . 1414 37.10.389UCS4StringToWideString . . . . . . . . . . . . . . . . . . . . . . . . . . 1414 37.10.390Unassigned . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1415 37.10.391UnicodeCharLenToString . . . . . . . . . . . . . . . . . . . . . . . . . . 1415 37.10.392UnicodeCharLenToStrVar . . . . . . . . . . . . . . . . . . . . . . . . . . 1415 37.10.393UnicodeCharToString . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1415 37.10.394UnicodeCharToStrVar . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1416 37.10.395UnicodeStringToUCS4String . . . . . . . . . . . . . . . . . . . . . . . . 1416 37.10.396UnicodeToUtf8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1416 37.10.397UniqueString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1417 37.10.398UnlockResource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1417 37.10.399UnPack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1417 37.10.400upCase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1417 37.10.401UTF8Decode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1418 37.10.402UTF8Encode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1418 37.10.403Utf8ToAnsi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1419
81
CONTENTS
37.10.404Utf8ToUnicode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1419 37.10.405Val . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1419 37.10.406VarArrayGet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1420 37.10.407VarArrayPut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1420 37.10.408VarArrayRedim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1421 37.10.409VarCast . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1421 37.10.410WaitForThreadTerminate . . . . . . . . . . . . . . . . . . . . . . . . . . 1421 37.10.411WideCharLenToString . . . . . . . . . . . . . . . . . . . . . . . . . . . 1421 37.10.412WideCharLenToStrVar . . . . . . . . . . . . . . . . . . . . . . . . . . . 1422 37.10.413WideCharToString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1422 37.10.414WideCharToStrVar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1422 37.10.415WideStringToUCS4String . . . . . . . . . . . . . . . . . . . . . . . . . . 1422 37.10.416Write . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1423 37.10.417WriteBarrier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1423 37.10.418WriteLn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1423 37.10.419WriteStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1424 37.11 IDispatch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1425 37.11.1 37.11.2 37.11.3 37.11.4 37.11.5 37.11.6 37.12.1 37.12.2 37.12.3 37.13.1 37.13.2 37.13.3 37.13.4 37.13.5 37.13.6 37.13.7 37.14.1 37.15.1 37.15.2 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1425 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1425 IDispatch.GetTypeInfoCount . . . . . . . . . . . . . . . . . . . . . . . . 1425 IDispatch.GetTypeInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . 1425 IDispatch.GetIDsOfNames . . . . . . . . . . . . . . . . . . . . . . . . . 1425 IDispatch.Invoke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1425 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1426 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1426 IEnumerable.GetEnumerator . . . . . . . . . . . . . . . . . . . . . . . . 1426 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1426 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1427 Property overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1427 IEnumerator.GetCurrent . . . . . . . . . . . . . . . . . . . . . . . . . . . 1427 IEnumerator.MoveNext . . . . . . . . . . . . . . . . . . . . . . . . . . . 1427 IEnumerator.Reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1428 IEnumerator.Current . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1428 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1428 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1428 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1428
82
CONTENTS
37.15.3 37.15.4 37.15.5 37.16.1 37.16.2 37.16.3 37.16.4 37.16.5 37.17.1 37.17.2 37.18.1 37.18.2 37.18.3 37.18.4 37.18.5 37.18.6 37.18.7 37.18.8 37.19.1 37.19.2 37.19.3 37.19.4 37.19.5 37.19.6 37.19.7 37.19.8 37.19.9
IUnknown.QueryInterface . . . . . . . . . . . . . . . . . . . . . . . . . . 1429 IUnknown._AddRef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1429 IUnknown._Release . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1429 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1429 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1429 Property overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1429 TAggregatedObject.Create . . . . . . . . . . . . . . . . . . . . . . . . . 1430 TAggregatedObject.Controller . . . . . . . . . . . . . . . . . . . . . . . 1430 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1430 Interfaces overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1430 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1430 Interfaces overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1431 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1431 Property overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1431 TInterfacedObject.AfterConstruction . . . . . . . . . . . . . . . . . . . . 1431 TInterfacedObject.BeforeDestruction . . . . . . . . . . . . . . . . . . . . 1431 TInterfacedObject.NewInstance . . . . . . . . . . . . . . . . . . . . . . . 1431 TInterfacedObject.RefCount . . . . . . . . . . . . . . . . . . . . . . . . 1432 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1432 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1433 TObject.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1433 TObject.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1434 TObject.newinstance . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1434 TObject.FreeInstance . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1434 TObject.SafeCallException . . . . . . . . . . . . . . . . . . . . . . . . . 1434 TObject.DefaultHandler . . . . . . . . . . . . . . . . . . . . . . . . . . . 1435 TObject.Free . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1435
37.19.10 TObject.InitInstance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1435 37.19.11 TObject.CleanupInstance . . . . . . . . . . . . . . . . . . . . . . . . . . 1435 37.19.12 TObject.ClassType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1436 37.19.13 TObject.ClassInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1436 37.19.14 TObject.ClassName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1436 37.19.15 TObject.ClassNameIs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1436 37.19.16 TObject.ClassParent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1437 37.19.17 TObject.InstanceSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1437 37.19.18 TObject.InheritsFrom . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1437
83
CONTENTS
37.19.19 TObject.StringMessageTable . . . . . . . . . . . . . . . . . . . . . . . . 1437 37.19.20 TObject.MethodAddress . . . . . . . . . . . . . . . . . . . . . . . . . . 1438 37.19.21 TObject.MethodName . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1438 37.19.22 TObject.FieldAddress . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1438 37.19.23 TObject.AfterConstruction . . . . . . . . . . . . . . . . . . . . . . . . . 1438 37.19.24 TObject.BeforeDestruction . . . . . . . . . . . . . . . . . . . . . . . . . 1439 37.19.25 TObject.DefaultHandlerStr . . . . . . . . . . . . . . . . . . . . . . . . . 1439 37.19.26 TObject.Dispatch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1439 37.19.27 TObject.DispatchStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1439 37.19.28 TObject.GetInterface . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1440 37.19.29 TObject.GetInterfaceByStr . . . . . . . . . . . . . . . . . . . . . . . . . 1440 37.19.30 TObject.GetInterfaceWeak . . . . . . . . . . . . . . . . . . . . . . . . . 1440 37.19.31 TObject.GetInterfaceEntry . . . . . . . . . . . . . . . . . . . . . . . . . 1441 37.19.32 TObject.GetInterfaceEntryByStr . . . . . . . . . . . . . . . . . . . . . . 1441 37.19.33 TObject.GetInterfaceTable . . . . . . . . . . . . . . . . . . . . . . . . . 1441 37.19.34 TObject.UnitName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1441 37.19.35 TObject.Equals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1442 37.19.36 TObject.GetHashCode . . . . . . . . . . . . . . . . . . . . . . . . . . . 1442 37.19.37 TObject.ToString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1442 38 Reference for unit sysutils 1443
38.1 Used units . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1443 38.2 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1443 38.3 Localization support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1443 38.4 Miscellaneous conversion routines . . . . . . . . . . . . . . . . . . . . . . . . . . 1444 38.5 Date/time routines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1444 38.6 FileName handling routines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1445 38.7 File input/output routines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1446 38.8 PChar related functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1447 38.9 Date and time formatting characters . . . . . . . . . . . . . . . . . . . . . . . . . . 1448 38.10 Formatting strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1449 38.11 String functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1449 38.12 Constants, types and variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1450 38.12.1 38.12.2 38.12.3 38.13.1 38.13.2 38.13.3 Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1450 Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1457 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1464 AbandonSignalHandler . . . . . . . . . . . . . . . . . . . . . . . . . . . 1469 Abort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1469 AddDisk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1469
84
CONTENTS
AddTerminateProc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1470 AdjustLineBreaks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1470 AnsiCompareFileName . . . . . . . . . . . . . . . . . . . . . . . . . . . 1470 AnsiCompareStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1471 AnsiCompareText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1472 AnsiDequotedStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1473
38.13.10 AnsiExtractQuotedStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1473 38.13.11 AnsiLastChar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1474 38.13.12 AnsiLowerCase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1474 38.13.13 AnsiLowerCaseFileName . . . . . . . . . . . . . . . . . . . . . . . . . . 1475 38.13.14 AnsiPos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1475 38.13.15 AnsiQuotedStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1475 38.13.16 AnsiSameStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1476 38.13.17 AnsiSameText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1476 38.13.18 AnsiStrComp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1476 38.13.19 AnsiStrIComp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1477 38.13.20 AnsiStrLastChar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1478 38.13.21 AnsiStrLComp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1479 38.13.22 AnsiStrLIComp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1479 38.13.23 AnsiStrLower . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1480 38.13.24 AnsiStrPos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1481 38.13.25 AnsiStrRScan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1481 38.13.26 AnsiStrScan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1481 38.13.27 AnsiStrUpper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1482 38.13.28 AnsiUpperCase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1482 38.13.29 AnsiUpperCaseFileName . . . . . . . . . . . . . . . . . . . . . . . . . . 1483 38.13.30 AppendStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1483 38.13.31 ApplicationName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1484 38.13.32 AssignStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1484 38.13.33 BCDToInt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1485 38.13.34 Beep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1485 38.13.35 BoolToStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1485 38.13.36 ByteToCharIndex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1486 38.13.37 ByteToCharLen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1486 38.13.38 ByteType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1486 38.13.39 CallTerminateProcs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1486 38.13.40 ChangeFileExt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1487 38.13.41 CharToByteLen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1487 38.13.42 CompareMem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1487 38.13.43 CompareMemRange . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1488
85
CONTENTS
38.13.44 CompareStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1488 38.13.45 CompareText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1489 38.13.46 ComposeDateTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1490 38.13.47 ConcatPaths . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1490 38.13.48 CreateDir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1491 38.13.49 CreateGUID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1491 38.13.50 CurrentYear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1492 38.13.51 CurrToStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1492 38.13.52 CurrToStrF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1492 38.13.53 Date . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1492 38.13.54 DateTimeToFileDate . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1493 38.13.55 DateTimeToStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1493 38.13.56 DateTimeToString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1494 38.13.57 DateTimeToSystemTime . . . . . . . . . . . . . . . . . . . . . . . . . . 1495 38.13.58 DateTimeToTimeStamp . . . . . . . . . . . . . . . . . . . . . . . . . . . 1496 38.13.59 DateToStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1496 38.13.60 DayOfWeek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1497 38.13.61 DecodeDate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1497 38.13.62 DecodeDateFully . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1498 38.13.63 DecodeTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1498 38.13.64 DeleteFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1499 38.13.65 DirectoryExists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1499 38.13.66 DiskFree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1499 38.13.67 DiskSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1500 38.13.68 DisposeStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1501 38.13.69 DoDirSeparators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1501 38.13.70 EncodeDate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1502 38.13.71 EncodeTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1502 38.13.72 ExceptAddr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1503 38.13.73 ExceptFrameCount . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1503 38.13.74 ExceptFrames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1503 38.13.75 ExceptionErrorMessage . . . . . . . . . . . . . . . . . . . . . . . . . . . 1504 38.13.76 ExceptObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1504 38.13.77 ExcludeLeadingPathDelimiter . . . . . . . . . . . . . . . . . . . . . . . 1504 38.13.78 ExcludeTrailingBackslash . . . . . . . . . . . . . . . . . . . . . . . . . . 1505 38.13.79 ExcludeTrailingPathDelimiter . . . . . . . . . . . . . . . . . . . . . . . 1505 38.13.80 ExecuteProcess . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1505 38.13.81 ExeSearch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1506 38.13.82 ExpandFileName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1506 38.13.83 ExpandUNCFileName . . . . . . . . . . . . . . . . . . . . . . . . . . . 1507
86
CONTENTS
38.13.84 ExtractFileDir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1507 38.13.85 ExtractFileDrive . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1508 38.13.86 ExtractFileExt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1508 38.13.87 ExtractFileName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1508 38.13.88 ExtractFilePath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1509 38.13.89 ExtractRelativepath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1509 38.13.90 ExtractShortPathName . . . . . . . . . . . . . . . . . . . . . . . . . . . 1510 38.13.91 FileAge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1510 38.13.92 FileClose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1510 38.13.93 FileCreate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1511 38.13.94 FileDateToDateTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1512 38.13.95 FileExists . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1512 38.13.96 FileGetAttr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1513 38.13.97 FileGetDate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1514 38.13.98 FileIsReadOnly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1515 38.13.99 FileOpen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1515 38.13.100FileRead . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1516 38.13.101FileSearch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1516 38.13.102FileSeek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1517 38.13.103FileSetAttr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1518 38.13.104FileSetDate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1518 38.13.105FileTruncate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1518 38.13.106FileWrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1519 38.13.107FindClose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1519 38.13.108FindCmdLineSwitch . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1519 38.13.109FindFirst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1520 38.13.110FindNext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1521 38.13.111FloattoCurr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1521 38.13.112FloatToDateTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1522 38.13.113FloatToDecimal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1522 38.13.114FloatToStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1522 38.13.115FloatToStrF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1523 38.13.116FloatToText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1525 38.13.117FloatToTextFmt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1526 38.13.118FmtStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1527 38.13.119ForceDirectories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1527 38.13.120Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1528 38.13.121FormatBuf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1534 38.13.122FormatCurr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1535 38.13.123FormatDateTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1535
87
CONTENTS
38.13.124FormatFloat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1536 38.13.125FreeAndNil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1537 38.13.126GetAppCongDir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1538 38.13.127GetAppCongFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1538 38.13.128GetCurrentDir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1539 38.13.129GetDirs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1539 38.13.130GetEnvironmentString . . . . . . . . . . . . . . . . . . . . . . . . . . . 1540 38.13.131GetEnvironmentVariable . . . . . . . . . . . . . . . . . . . . . . . . . . 1540 38.13.132GetEnvironmentVariableCount . . . . . . . . . . . . . . . . . . . . . . . 1540 38.13.133GetFileHandle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1541 38.13.134GetLastOSError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1541 38.13.135GetLocalTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1542 38.13.136GetModuleName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1542 38.13.137GetTempDir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1542 38.13.138GetTempFileName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1542 38.13.139GetUserDir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1543 38.13.140GuidCase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1543 38.13.141GUIDToString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1543 38.13.142HookSignal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1544 38.13.143IncAMonth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1544 38.13.144IncludeLeadingPathDelimiter . . . . . . . . . . . . . . . . . . . . . . . . 1544 38.13.145IncludeTrailingBackslash . . . . . . . . . . . . . . . . . . . . . . . . . . 1545 38.13.146IncludeTrailingPathDelimiter . . . . . . . . . . . . . . . . . . . . . . . . 1545 38.13.147IncMonth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1545 38.13.148InquireSignal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1546 38.13.149IntToHex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1546 38.13.150IntToStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1547 38.13.151IsDelimiter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1547 38.13.152IsEqualGUID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1548 38.13.153IsLeapYear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1548 38.13.154IsPathDelimiter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1548 38.13.155IsValidIdent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1549 38.13.156LastDelimiter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1549 38.13.157LeftStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1550 38.13.158LoadStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1550 38.13.159LowerCase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1550 38.13.160MSecsToTimeStamp . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1551 38.13.161NewStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1552 38.13.162Now . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1552 38.13.163OutOfMemoryError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1552
88
CONTENTS
38.13.164QuotedStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1553 38.13.165RaiseLastOSError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1553 38.13.166RemoveDir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1554 38.13.167RenameFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1554 38.13.168ReplaceDate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1554 38.13.169ReplaceTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1555 38.13.170RightStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1555 38.13.171SafeLoadLibrary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1555 38.13.172SameFileName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1556 38.13.173SameText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1556 38.13.174SetCurrentDir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1556 38.13.175SetDirSeparators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1556 38.13.176ShowException . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1557 38.13.177Sleep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1557 38.13.178SScanf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1557 38.13.179StrAlloc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1558 38.13.180StrBufSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1558 38.13.181StrByteType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1559 38.13.182strcat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1559 38.13.183StrCharLength . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1560 38.13.184strcomp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1560 38.13.185strcopy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1560 38.13.186StrDispose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1561 38.13.187strecopy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1561 38.13.188strend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1562 38.13.189StrFmt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1562 38.13.190stricomp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1563 38.13.191StringReplace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1564 38.13.192StringToGUID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1564 38.13.193strlcat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1565 38.13.194strlcomp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1565 38.13.195strlcopy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1566 38.13.196strlen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1567 38.13.197StrLFmt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1567 38.13.198strlicomp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1568 38.13.199strlower . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1568 38.13.200strmove . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1569 38.13.201strnew . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1569 38.13.202StrNextChar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1570 38.13.203StrPas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1570
89
CONTENTS
38.13.204StrPCopy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1570 38.13.205StrPLCopy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1571 38.13.206strpos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1571 38.13.207strrscan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1571 38.13.208strscan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1572 38.13.209StrToBool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1572 38.13.210StrToBoolDef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1572 38.13.211StrToCurr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1573 38.13.212StrToCurrDef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1573 38.13.213StrToDate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1573 38.13.214StrToDateDef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1574 38.13.215StrToDateTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1574 38.13.216StrToDateTimeDef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1575 38.13.217StrToFloat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1576 38.13.218StrToFloatDef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1577 38.13.219StrToInt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1577 38.13.220StrToInt64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1578 38.13.221StrToInt64Def . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1578 38.13.222StrToIntDef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1578 38.13.223StrToQWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1579 38.13.224StrToQWordDef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1579 38.13.225StrToTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1579 38.13.226StrToTimeDef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1580 38.13.227strupper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1581 38.13.228Supports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1581 38.13.229SysErrorMessage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1581 38.13.230SystemTimeToDateTime . . . . . . . . . . . . . . . . . . . . . . . . . . 1582 38.13.231TextToFloat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1582 38.13.232Time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1583 38.13.233TimeStampToDateTime . . . . . . . . . . . . . . . . . . . . . . . . . . . 1584 38.13.234TimeStampToMSecs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1584 38.13.235TimeToStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1585 38.13.236Trim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1585 38.13.237TrimLeft . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1586 38.13.238TrimRight . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1587 38.13.239TryEncodeDate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1587 38.13.240TryEncodeTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1588 38.13.241TryFloatToCurr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1588 38.13.242TryStringToGUID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1588 38.13.243TryStrToBool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1589
90
CONTENTS
38.13.244TryStrToCurr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1589 38.13.245TryStrToDate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1589 38.13.246TryStrToDateTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1590 38.13.247TryStrToFloat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1590 38.13.248TryStrToInt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1591 38.13.249TryStrToInt64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1591 38.13.250TryStrToQWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1591 38.13.251TryStrToTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1591 38.13.252UnhookSignal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1592 38.13.253UpperCase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1592 38.13.254VendorName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1593 38.13.255WideCompareStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1593 38.13.256WideCompareText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1593 38.13.257WideFmtStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1594 38.13.258WideFormat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1594 38.13.259WideFormatBuf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1594 38.13.260WideLowerCase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1595 38.13.261WideSameStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1595 38.13.262WideSameText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1595 38.13.263WideUpperCase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1595 38.13.264WrapText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1596 38.14 EAbort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1596 38.14.1 38.15.1 38.16.1 38.17.1 38.18.1 38.19.1 38.20.1 38.21.1 38.22.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1596 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1596 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1596 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1596 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1596 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1597 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1597 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1597 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1597 38.15 EAbstractError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1596 38.16 EAccessViolation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1596 38.17 EAssertionFailed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1596 38.18 EBusError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1596 38.19 EControlC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1597 38.20 EConvertError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1597 38.21 EDivByZero . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1597 38.22 EExternal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1597 38.23 EExternalException . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1597
91
CONTENTS
38.23.1 38.24.1 38.25.1 38.25.2 38.25.3 38.26.1 38.27.1 38.28.1 38.29.1 38.30.1 38.31.1 38.32.1 38.33.1 38.34.1 38.35.1 38.36.1 38.37.1 38.38.1 38.39.1 38.40.1 38.41.1
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1597 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1597 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1598 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1598 EHeapMemoryError.FreeInstance . . . . . . . . . . . . . . . . . . . . . 1598 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1598 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1598 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1598 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1599 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1599 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1599 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1599 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1599 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1599 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1599 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1600 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1600 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1600 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1600 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1600 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1600
38.26 EInOutError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1598 38.27 EInterror . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1598 38.28 EIntfCastError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1598 38.29 EIntOverow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1599 38.30 EInvalidCast . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1599 38.31 EInvalidContainer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1599 38.32 EInvalidInsert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1599 38.33 EInvalidOp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1599 38.34 EInvalidPointer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1599 38.35 EMathError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1599 38.36 ENoThreadSupport . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1600 38.37 ENotImplemented . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1600 38.38 ENoWideStringSupport . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1600 38.39 EOSError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1600 38.40 EOutOfMemory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1600 38.41 EOverow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1600 38.42 EPackageError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1601
92
CONTENTS
38.42.1 38.43.1 38.44.1 38.45.1 38.46.1 38.47.1 38.48.1 38.49.1 38.50.1 38.50.2 38.50.3 38.51.1 38.51.2 38.51.3 38.51.4 38.51.5 38.51.6 38.51.7 38.51.8 38.51.9
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1601 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1601 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1601 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1601 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1601 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1601 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1601 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1602 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1602 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1602 EVariantError.CreateCode . . . . . . . . . . . . . . . . . . . . . . . . . . 1602 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1602 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1603 Property overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1603 Exception.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1603 Exception.CreateFmt . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1603 Exception.CreateRes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1603 Exception.CreateResFmt . . . . . . . . . . . . . . . . . . . . . . . . . . 1604 Exception.CreateHelp . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1604 Exception.CreateFmtHelp . . . . . . . . . . . . . . . . . . . . . . . . . . 1604
38.43 EPrivilege . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1601 38.44 EPropReadOnly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1601 38.45 EPropWriteOnly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1601 38.46 ERangeError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1601 38.47 ESafecallException . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1601 38.48 EStackOverow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1601 38.49 EUnderow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1602 38.50 EVariantError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1602
38.51.10 Exception.CreateResHelp . . . . . . . . . . . . . . . . . . . . . . . . . . 1604 38.51.11 Exception.CreateResFmtHelp . . . . . . . . . . . . . . . . . . . . . . . . 1605 38.51.12 Exception.HelpContext . . . . . . . . . . . . . . . . . . . . . . . . . . . 1605 38.51.13 Exception.Message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1605 38.52 EZeroDivide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1605 38.52.1 38.53.1 38.53.2 38.53.3 38.53.4 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1605 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1606 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1606 IReadWriteSync.BeginRead . . . . . . . . . . . . . . . . . . . . . . . . 1606 IReadWriteSync.EndRead . . . . . . . . . . . . . . . . . . . . . . . . . 1606 38.53 IReadWriteSync . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1606
93
CONTENTS
38.53.5 38.53.6 38.54.1 38.54.2 38.54.3 38.54.4 38.54.5 38.54.6 38.54.7 38.54.8 38.54.9 38.55.1 38.55.2 38.55.3 38.55.4 38.55.5 38.55.6 38.55.7 38.55.8 38.55.9
IReadWriteSync.BeginWrite . . . . . . . . . . . . . . . . . . . . . . . . 1606 IReadWriteSync.EndWrite . . . . . . . . . . . . . . . . . . . . . . . . . 1607 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1607 Interfaces overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1607 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1607 TMultiReadExclusiveWriteSynchronizer.Create . . . . . . . . . . . . . . 1607 TMultiReadExclusiveWriteSynchronizer.Destroy . . . . . . . . . . . . . 1608 TMultiReadExclusiveWriteSynchronizer.Beginwrite . . . . . . . . . . . . 1608 TMultiReadExclusiveWriteSynchronizer.Endwrite . . . . . . . . . . . . . 1608 TMultiReadExclusiveWriteSynchronizer.Beginread . . . . . . . . . . . . 1608 TMultiReadExclusiveWriteSynchronizer.Endread . . . . . . . . . . . . . 1609 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1609 Interfaces overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1609 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1609 TSimpleRWSync.Create . . . . . . . . . . . . . . . . . . . . . . . . . . 1609 TSimpleRWSync.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . . 1610 TSimpleRWSync.Beginwrite . . . . . . . . . . . . . . . . . . . . . . . . 1610 TSimpleRWSync.Endwrite . . . . . . . . . . . . . . . . . . . . . . . . . 1610 TSimpleRWSync.Beginread . . . . . . . . . . . . . . . . . . . . . . . . 1610 TSimpleRWSync.Endread . . . . . . . . . . . . . . . . . . . . . . . . . 1611 1612
39.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1612 39.2 Constants, types and variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1612 39.2.1 39.2.2 39.3.1 39.3.2 39.3.3 39.3.4 39.3.5 39.3.6 39.3.7 39.3.8 39.3.9 39.3.10 39.3.11 Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1612 Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1617 Bounds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1623 CenterPoint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1623 EqualRect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1623 InateRect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1624 IntersectRect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1624 IsRectEmpty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1624 OffsetRect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1624 Point . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1625 PtInRect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1625 Rect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1625 Size . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1625
94
CONTENTS
39.3.12 39.4.1 39.4.2 39.4.3 39.4.4 39.5.1 39.5.2 39.5.3 39.5.4 39.6.1 39.6.2 39.6.3 39.6.4 39.6.5 39.6.6 39.6.7 39.6.8 39.6.9 39.6.10 39.6.11
UnionRect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1626 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1626 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1626 IClassFactory.CreateInstance . . . . . . . . . . . . . . . . . . . . . . . . 1626 IClassFactory.LockServer . . . . . . . . . . . . . . . . . . . . . . . . . . 1626 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1627 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1627 ISequentialStream.Read . . . . . . . . . . . . . . . . . . . . . . . . . . . 1627 ISequentialStream.Write . . . . . . . . . . . . . . . . . . . . . . . . . . 1627 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1627 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1628 IStream.Seek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1628 IStream.SetSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1628 IStream.CopyTo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1628 IStream.Commit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1629 IStream.Revert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1629 IStream.LockRegion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1629 IStream.UnlockRegion . . . . . . . . . . . . . . . . . . . . . . . . . . . 1629 IStream.Stat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1630 IStream.Clone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1630 1631
40.1 Used units . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1631 40.2 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1631 40.3 Auxiliary functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1631 40.4 Getting or setting property values . . . . . . . . . . . . . . . . . . . . . . . . . . . 1632 40.5 Examining published property information . . . . . . . . . . . . . . . . . . . . . . 1632 40.6 Constants, types and variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1633 40.6.1 40.6.2 40.7.1 40.7.2 40.7.3 40.7.4 40.7.5 40.7.6 Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1633 Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1634 FindPropInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1640 GetEnumName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1641 GetEnumNameCount . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1642 GetEnumProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1642 GetEnumValue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1643 GetFloatProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1643
95
CONTENTS
40.7.7 40.7.8 40.7.9 40.7.10 40.7.11 40.7.12 40.7.13 40.7.14 40.7.15 40.7.16 40.7.17 40.7.18 40.7.19 40.7.20 40.7.21 40.7.22 40.7.23 40.7.24 40.7.25 40.7.26 40.7.27 40.7.28 40.7.29 40.7.30 40.7.31 40.7.32 40.7.33 40.7.34 40.7.35 40.7.36 40.7.37 40.7.38 40.7.39 40.7.40 40.7.41 40.7.42 40.7.43 40.8.1
GetInt64Prop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1644 GetInterfaceProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1645 GetMethodProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1645 GetObjectProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1647 GetObjectPropClass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1648 GetOrdProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1649 GetPropInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1650 GetPropInfos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1650 GetPropList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1651 GetPropValue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1652 GetRawInterfaceProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1653 GetSetProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1653 GetStrProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1654 GetTypeData . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1655 GetUnicodeStrProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1655 GetVariantProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1656 GetWideStrProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1656 IsPublishedProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1656 IsStoredProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1657 PropIsType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1658 PropType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1659 SetEnumProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1660 SetFloatProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1660 SetInt64Prop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1661 SetInterfaceProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1661 SetMethodProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1661 SetObjectProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1662 SetOrdProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1662 SetPropValue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1663 SetRawInterfaceProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1663 SetSetProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1663 SetStrProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1664 SetToString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1664 SetUnicodeStrProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1665 SetVariantProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1666 SetWideStrProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1666 StringToSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1666 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1667
96
CONTENTS
40.9.1
41.1 Used units . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1668 41.2 Constants, types and variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1668 41.2.1 41.2.2 41.2.3 41.3.1 41.3.2 41.3.3 41.3.4 41.3.5 41.3.6 41.3.7 41.3.8 41.3.9 41.3.10 41.3.11 41.3.12 41.3.13 41.3.14 41.3.15 41.3.16 41.3.17 41.3.18 41.3.19 41.3.20 41.3.21 41.3.22 41.3.23 41.3.24 41.3.25 41.3.26 41.3.27 41.3.28 41.3.29 41.3.30 41.3.31 Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1668 Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1675 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1684 AssignPipe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1684 AssignStream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1685 FpExecL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1686 FpExecLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1687 FpExecLP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1688 FpExecLPE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1689 FpExecV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1689 FpExecVP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1690 FpExecVPE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1691 fpFlock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1692 fpfStatFS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1692 fpfsync . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1693 fpgettimeofday . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1693 fpStatFS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1693 fpSystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1694 FSearch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1694 fStatFS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1695 fsync . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1696 GetDomainName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1696 GetHostName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1697 GetLocalTimezone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1697 GetTimezoneFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1698 PClose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1698 POpen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1698 ReadTimezoneFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1699 SeekDir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1700 SelectText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1700 Shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1700 SigRaise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1701 StatFS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1702 TellDir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1703
97
CONTENTS
42.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1705 42.2 Constants, types and variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1705 42.2.1 42.2.2 Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1705 Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1706 1719
43.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1719 43.2 Constants, types and variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1719 43.2.1 43.2.2 43.3.1 43.3.2 43.3.3 43.3.4 43.3.5 43.3.6 43.3.7 43.3.8 43.3.9 43.3.10 43.3.11 Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1719 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1719 ArrayStringToPPchar . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1720 Basename . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1720 Dirname . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1721 EpochToLocal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1721 FNMatch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1722 FSplit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1723 GetFS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1723 GregorianToJulian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1724 JulianToGregorian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1724 LocalToEpoch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1724 StringToPPChar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1725 1727
44.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1727 44.2 Examples utility unit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1728 44.3 Writing a custom video driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1728 44.4 Constants, types and variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1732 44.4.1 44.4.2 44.4.3 44.5.1 44.5.2 44.5.3 Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1732 Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1736 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1738 ClearScreen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1739 DefaultErrorHandler . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1739 DoneVideo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1740
98
CONTENTS
44.5.4 44.5.5 44.5.6 44.5.7 44.5.8 44.5.9 44.5.10 44.5.11 44.5.12 44.5.13 44.5.14 44.5.15 44.5.16 44.5.17 44.5.18
GetCapabilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1740 GetCursorType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1741 GetLockScreenCount . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1742 GetVideoDriver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1743 GetVideoMode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1743 GetVideoModeCount . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1744 GetVideoModeData . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1745 InitVideo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1745 LockScreenUpdate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1745 SetCursorPos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1746 SetCursorType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1747 SetVideoDriver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1747 SetVideoMode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1748 UnlockScreenUpdate . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1748 UpdateScreen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1748 1750
45.1 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1750 45.2 Constants, types and variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1750 45.2.1 45.3.1 45.3.2 45.3.3 45.3.4 45.3.5 45.3.6 Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1750 delay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1750 keypressed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1750 nosound . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1751 readkey . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1751 sound . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1751 textmode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1751 1752 45.3 Procedures and functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1750
46.1 Used units . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1752 46.2 Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1752 46.3 Procedures and functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1752 46.3.1 46.3.2 46.3.3 46.3.4 46.3.5 46.3.6 46.3.7 46.3.8 46.3.9 fpIOperm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1752 fpIoPL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1753 ReadPort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1753 ReadPortB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1753 ReadPortL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1754 ReadPortW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1754 WritePort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1754 WritePortB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1755 WritePortl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1755 99
CONTENTS
46.3.10
WritePortW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1755
100
CONTENTS
0.1
Overview
The Run-Time Library is the basis of all Free Pascal programs. It contains the basic units that most programs will use, and are made available on all platforms supported by Free pascal (well, more or less). There are units for compatibility with the Turbo Pascal Run-Time library, and there are units for compatibility with Delphi. On top of these two sets, there are also a series of units to handle keyboard/mouse and text screens in a cross-platform way. Other units include platform specic units that implement the specics of a platform, these are usually needed to support the Turbo Pascal or Delphi units. Units that fall outside the above outline do not belong in the RTL, but should be included in the packages, or in the FCL.
101
Chapter 1
1.2
Overview
The BaseUnix unit was implemented by Marco Van de Voort. It contains basic unix functionality. It supersedes the Linux unit of version 1.0.X of the compiler, but does not implement all functionality of the linux unit. People that have code which heavily uses the old Linux unit, must fetch this unit from the sources or older distributions and manually compile it. In 2.0.x and 2.2.x releases this unit was included as oldlinux, but starting with 2.4.0 this unit has been removed \ from the release distribution. For porting FPC to new unix-like platforms, it should be sufcient to implement the functionality in this unit for the new platform.
1.3
1.3.1
ARG_MAX = UnixType . ARG_MAX Maximum number of arguments to a program. BITSINWORD = 8 * (cuLong) Number of bits in a word. ESysE2BIG = 7 102
System error: Argument list too long ESysEACCES = 13 System error: Permission denied ESysEADDRINUSE = 98 System error: Address already in use ESysEADDRNOTAVAIL = 99 System error: Cannot assign requested address ESysEADV = 68 System error: Advertise error ESysEAFNOSUPPORT = 97 System error: Address family not supported by protocol ESysEAGAIN = 11 System error: Try again ESysEALREADY = 114 System error: Operation already in progress ESysEBADE = 52 System error: Invalid exchange ESysEBADF = 9 System error: Bad le number ESysEBADFD = 77 System error: File descriptor in bad state ESysEBADMSG = 74 System error: Not a data message ESysEBADR = 53 System error: Invalid request descriptor ESysEBADRQC = 56 103
System error: Invalid request code ESysEBADSLT = 57 System error: Invalid slot ESysEBFONT = 59 System error: Bad font le format ESysEBUSY = 16 System error: Device or resource busy ESysECHILD = 10 System error: No child processes ESysECHRNG = 44 System error: Channel number out of range ESysECOMM = 70 System error: Communication error on send ESysECONNABORTED = 103 System error: Software caused connection abort ESysECONNREFUSED = 111 System error: Connection refused ESysECONNRESET = 104 System error: Connection reset by peer ESysEDEADLK = 35 System error: Resource deadlock would occur ESysEDEADLOCK = 58 System error: File locking deadlock error ESysEDESTADDRREQ = 89 System error: Destination address required ESysEDOM = 33 104
System error: Math argument out of domain of func ESysEDOTDOT = 73 System error: RFS specic error ESysEDQUOT = 122 System error: Quota exceeded ESysEEXIST = 17 System error: File exists ESysEFAULT = 14 System error: Bad address ESysEFBIG = 27 System error: File too large ESysEHOSTDOWN = 112 System error: Host is down ESysEHOSTUNREACH = 113 System error: No route to host ESysEIDRM = 43 System error: Identier removed ESysEILSEQ = 84 System error: Illegal byte sequence ESysEINPROGRESS = 115 System error: Operation now in progress ESysEINTR = 4 System error: Interrupted system call ESysEINVAL = 22 System error: Invalid argument ESysEIO = 5 105
System error: I/O error ESysEISCONN = 106 System error: Transport endpoint is already connected ESysEISDIR = 21 System error: Is a directory ESysEISNAM = 120 System error: Is a named type le ESysEL2HLT = 51 System error: Level 2 halted ESysEL2NSYNC = 45 System error: Level 2 not synchronized ESysEL3HLT = 46 System error: Level 3 halted ESysEL3RST = 47 System error: Level 3 reset ESysELIBACC = 79 System error: Can not access a needed shared library ESysELIBBAD = 80 System error: Accessing a corrupted shared library ESysELIBEXEC = 83 System error: Cannot exec a shared library directly ESysELIBMAX = 82 System error: Attempting to link in too many shared libraries ESysELIBSCN = 81 System error: .lib section in a.out corrupted ESysELNRNG = 48 106
System error: Link number out of range ESysELOOP = 40 System error: Too many symbolic links encountered ESysEMFILE = 24 System error: Too many open les ESysEMLINK = 31 System error: Too many links ESysEMSGSIZE = 90 System error: Message too long ESysEMULTIHOP = 72 System error: Multihop attempted ESysENAMETOOLONG = 36 System error: File name too long ESysENAVAIL = 119 System error: No XENIX semaphores available ESysENETDOWN = 100 System error: Network is down ESysENETRESET = 102 System error: Network dropped connection because of reset ESysENETUNREACH = 101 System error: Network is unreachable ESysENFILE = 23 System error: File table overow ESysENOANO = 55 System error: No anode ESysENOBUFS = 105 107
System error: No buffer space available ESysENOCSI = 50 System error: No CSI structure available ESysENODATA = 61 System error: No data available ESysENODEV = 19 System error: No such device ESysENOENT = 2 System error: No such le or directory ESysENOEXEC = 8 System error: Exec format error ESysENOLCK = 37 System error: No record locks available ESysENOLINK = 67 System error: Link has been severed ESysENOMEM = 12 System error: Out of memory ESysENOMSG = 42 System error: No message of desired type ESysENONET = 64 System error: Machine is not on the network ESysENOPKG = 65 System error: Package not installed ESysENOPROTOOPT = 92 System error: Protocol not available ESysENOSPC = 28 108
System error: No space left on device ESysENOSR = 63 System error: Out of streams resources ESysENOSTR = 60 System error: Device not a stream ESysENOSYS = 38 System error: Function not implemented ESysENOTBLK = 15 System error: Block device required ESysENOTCONN = 107 System error: Transport endpoint is not connected ESysENOTDIR = 20 System error: Not a directory ESysENOTEMPTY = 39 System error: Directory not empty ESysENOTNAM = 118 System error: Not a XENIX named type le ESysENOTSOCK = 88 System error: Socket operation on non-socket ESysENOTTY = 25 System error: Not a typewriter ESysENOTUNIQ = 76 System error: Name not unique on network ESysENXIO = 6 System error: No such device or address ESysEOPNOTSUPP = 95 109
System error: Operation not supported on transport endpoint ESysEOVERFLOW = 75 System error: Value too large for dened data type ESysEPERM = 1 System error: Operation not permitted. ESysEPFNOSUPPORT = 96 System error: Protocol family not supported ESysEPIPE = 32 System error: Broken pipe ESysEPROTO = 71 System error: Protocol error ESysEPROTONOSUPPORT = 93 System error: Protocol not supported ESysEPROTOTYPE = 91 System error: Protocol wrong type for socket ESysERANGE = 34 System error: Math result not representable ESysEREMCHG = 78 System error: Remote address changed ESysEREMOTE = 66 System error: Object is remote ESysEREMOTEIO = 121 System error: Remote I/O error ESysERESTART = 85 System error: Interrupted system call should be restarted ESysEROFS = 30 110
System error: Read-only le system ESysESHUTDOWN = 108 System error: Cannot send after transport endpoint shutdown ESysESOCKTNOSUPPORT = 94 System error: Socket type not supported ESysESPIPE = 29 System error: Illegal seek ESysESRCH = 3 System error: No such process ESysESRMNT = 69 System error: Srmount error ESysESTALE = 116 System error: Stale NFS le handle ESysESTRPIPE = 86 System error: Streams pipe error ESysETIME = 62 System error: Timer expired ESysETIMEDOUT = 110 System error: Connection timed out ESysETOOMANYREFS = 109 System error: Too many references: cannot splice ESysETXTBSY = 26 System error: Text (code segment) le busy ESysEUCLEAN = 117 System error: Structure needs cleaning ESysEUNATCH = 49 111
System error: Protocol driver not attached ESysEUSERS = 87 System error: Too many users ESysEWOULDBLOCK = ESysEAGAIN System error: Operation would block ESysEXDEV = 18 System error: Cross-device link ESysEXFULL = 54 System error: Exchange full FD_MAXFDSET = 1024 Maximum elements in a TFDSet (137) array. FPE_FLTDIV = 3 Value signalling oating point divide by zero in case of SIGFPE signal FPE_FLTINV = 7 Value signalling oating point invalid operation in case of SIGFPE signal FPE_FLTOVF = 4 Value signalling oating point overow in case of SIGFPE signal FPE_FLTRES = 6 Value signalling oating point inexact result in case of SIGFPE signal FPE_FLTSUB = 8 Value signalling oating point subscript out of range in case of SIGFPE signal FPE_FLTUND = 5 Value signalling oating point underow in case of SIGFPE signal FPE_INTDIV = 1 Value signalling integer divide in case of SIGFPE signal FPE_INTOVF = 2 112
Value signalling integer overow in case of SIGFPE signal F_GetFd = 1 fpFCntl (151) command: Get close-on-exec ag F_GetFl = 3 fpFCntl (151) command: Get ledescriptor ags F_GetLk = 5 fpFCntl (151) command: Get lock F_GetOwn = 9 fpFCntl (151) command: get owner of ledescriptor events F_OK = 0 fpAccess (142) call test: le exists. F_SetFd = 2 fpFCntl (151) command: Set close-on-exec ag F_SetFl = 4 fpFCntl (151) command: Set ledescriptor ags F_SetLk = 6 fpFCntl (151) command: Set lock F_SetLkW = 7 fpFCntl (151) command: Test lock F_SetOwn = 8 fpFCntl (151) command: Set owner of ledescriptor events ln2bitmask = 1 shl ln2bitsinword - 1 Last bit in word. ln2bitsinword = 5 Power of 2 number of bits in word. MAP_ANON = MAP_ANONYMOUS 113
Anonymous memory mapping (data private to application) MAP_ANONYMOUS = $20 FpMMap (165) map type: Dont use a le MAP_FAILED = (-1) Memory mapping failed error code MAP_FIXED = $10 FpMMap (165) map type: Interpret addr exactly MAP_PRIVATE = $2 FpMMap (165) map type: Changes are private MAP_SHARED = $1 FpMMap (165) map type: Share changes MAP_TYPE = $f FpMMap (165) map type: Bitmask for type of mapping NAME_MAX = UnixType . NAME_MAX Maximum lename length. O_APPEND = $400 fpOpen (168) le open mode: Append to le O_CREAT = $40 fpOpen (168) le open mode: Create if le does not yet exist. O_DIRECT = $4000 fpOpen (168) le open mode: Minimize caching effects O_DIRECTORY = $10000 fpOpen (168) le open mode: File must be directory. O_EXCL = $80 fpOpen (168) le open mode: Open exclusively O_NDELAY = O_NONBLOCK 114
fpOpen (168) le open mode: Alias for O_NonBlock (115) O_NOCTTY = $100 fpOpen (168) le open mode: No TTY control. O_NOFOLLOW = $20000 fpOpen (168) le open mode: Fail if le is symbolic link. O_NONBLOCK = $800 fpOpen (168) le open mode: Open in non-blocking mode O_RDONLY = 0 fpOpen (168) le open mode: Read only O_RDWR = 2 fpOpen (168) le open mode: Read/Write O_SYNC = $1000 fpOpen (168) le open mode: Write to disc at once O_TRUNC = $200 fpOpen (168) le open mode: Truncate le to length 0 O_WRONLY = 1 fpOpen (168) le open mode: Write only PATH_MAX = UnixType . PATH_MAX Maximum pathname length. POLLERR = $0008 Error condition on output le descriptor POLLHUP = $0010 Hang up POLLIN = $0001 Data is available for reading POLLNVAL = $0020 115
Invalid request, le descriptor not open. POLLOUT = $0004 Writing data will not block the write call POLLPRI = $0002 Urgent data is available for reading. POLLRDBAND = $0080 Priority data ready for reading. POLLRDNORM = $0040 Same as POLLIN. POLLWRBAND = $0200 Priority data my be written. POLLWRNORM = $0100 Equivalent to POLLOUT. PRIO_PGRP = UnixType . PRIO_PGRP Easy access alias for unixtype.PRIO_PGRP (1705) PRIO_PROCESS = UnixType . PRIO_PROCESS Easy access alias for unixtype.PRIO_PROCESS (1705) PRIO_USER = UnixType . PRIO_USER Easy access alias for unixtype.PRIO_USER (1705) PROT_EXEC = $4 FpMMap (165) memory access: page can be executed PROT_NONE = $0 FpMMap (165) memory access: page can not be accessed PROT_READ = $1 FpMMap (165) memory access: page can be read PROT_WRITE = $2 116
FpMMap (165) memory access: page can be written RLIMIT_AS = 9 RLimit request address space limit RLIMIT_CORE = 4 RLimit request max core le size RLIMIT_CPU = 0 RLimit request CPU time in ms RLIMIT_DATA = 2 RLimit request max data size RLIMIT_FSIZE = 1 Rlimit request maximum lesize RLIMIT_LOCKS = 10 RLimit request maximum le locks held RLIMIT_MEMLOCK = 8 RLimit request max locked-in-memory address space RLIMIT_NOFILE = 7 RLimit request max number of open les RLIMIT_NPROC = 6 RLimit request max number of processes RLIMIT_RSS = 5 RLimit request max resident set size RLIMIT_STACK = 3 RLimit request max stack size R_OK = 4 fpAccess (142) call test: read allowed SA_INTERRUPT = $20000000 117
Sigaction options: ? SA_NOCLDSTOP = 1 Sigaction options: Do not receive notication when child processes stop SA_NOCLDWAIT = 2 Sigaction options: ? SA_NODEFER = $40000000 Sigaction options: Do not mask signal in its own signal handler SA_NOMASK = SA_NODEFER Sigaction options: Do not prevent the signal from being received when it is handled. SA_ONESHOT = SA_RESETHAND Sigaction options: Restore the signal action to the default state. SA_ONSTACK = $08000000 SA_ONSTACK is used in the fpsigaction (180) to indicate the signal handler must be called on an alternate signal stack provided by fpsigaltstack (1225). If an alternate stack is not available, the default stack will be used. SA_RESETHAND = $80000000 Sigaction options: Restore signal action to default state when signal handler exits. SA_RESTART = $10000000 Sigaction options: Provide behaviour compatible with BSD signal semantics SA_RESTORER = $04000000 Signal restorer handler SA_SIGINFO = 4 Sigaction options: The signal handler takes 3 arguments, not one. SEEK_CUR = 1 fpLSeek (162) option: Set position relative to current position. SEEK_END = 2 fpLSeek (162) option: Set position relative to end of le. 118
SEEK_SET = 0 fpLSeek (162) option: Set absolute position. SIGABRT = 6 Signal: ABRT (Abort) SIGALRM = 14 Signal: ALRM (Alarm clock) SIGBUS = 7 Signal: BUS (bus error) SIGCHLD = 17 Signal: CHLD (child status changed) SIGCONT = 18 Signal: CONT (Continue) SIGFPE = 8 Signal: FPE (Floating point error) SIGHUP = 1 Signal: HUP (Hangup) SIGILL = 4 Signal: ILL (Illegal instruction) SIGINT = 2 Signal: INT (Interrupt) SIGIO = 29 Signal: IO (I/O operation possible) SIGIOT = 6 Signal: IOT (IOT trap) SIGKILL = 9 Signal: KILL (unblockable) 119
SIGPIPE = 13 Signal: PIPE (Broken pipe SIGPOLL = SIGIO Signal: POLL (Pollable event) SIGPROF = 27 Signal: PROF (Proling alarm) SIGPWR = 30 Signal: PWR (power failure restart) SIGQUIT = 3 Signal: QUIT SIGSEGV = 11 Signal: SEGV (Segmentation violation) SIGSTKFLT = 16 Signal: STKFLT (Stack Fault) SIGSTOP = 19 Signal: STOP (Stop, unblockable) SIGTerm = 15 Signal: TERM (Terminate) SIGTRAP = 5 Signal: TRAP (Trace trap) SIGTSTP = 20 Signal: TSTP (keyboard stop) SIGTTIN = 21 Signal: TTIN (Terminal input, background) SIGTTOU = 22 Signal: TTOU (Terminal output, background) 120
SIGUNUSED = 31 Signal: Unused SIGURG = 23 Signal: URG (Socket urgent condition) SIGUSR1 = 10 Signal: USR1 (User-dened signal 1) SIGUSR2 = 12 Signal: USR2 (User-dened signal 2) SIGVTALRM = 26 Signal: VTALRM (Virtual alarm clock) SIGWINCH = 28 Signal: WINCH (Window/Terminal size change) SIGXCPU = 24 Signal: XCPU (CPU limit exceeded) SIGXFSZ = 25 Signal: XFSZ (File size limit exceeded) SIG_BLOCK = 0 Sigprocmask ags: Add signals to the set of blocked signals. SIG_DFL = 0 Signal handler: Default signal handler SIG_ERR = -1 Signal handler: error SIG_IGN = 1 Signal handler: Ignore signal SIG_MAXSIG = UnixType . SIG_MAXSIG Maximum system signal number. 121
SIG_SETMASK = 2 Sigprocmask ags: Set of blocked signals is given. SIG_UNBLOCK = 1 Sigprocmask ags: Remove signals from the set set of blocked signals. SI_PAD_SIZE = 128 div (longint) - 3 Signal information pad size. SYS_NMLN = UnixType . SYS_NMLN Max system name length. S_IFBLK = 24576 File (#rtl.baseunix.stat (136) record) mode: Block device S_IFCHR = 8192 File (#rtl.baseunix.stat (136) record) mode: Character device S_IFDIR = 16384 File (#rtl.baseunix.stat (136) record) mode: Directory S_IFIFO = 4096 File (#rtl.baseunix.stat (136) record) mode: FIFO S_IFLNK = 40960 File (#rtl.baseunix.stat (136) record) mode: Link S_IFMT = 61440 File (#rtl.baseunix.stat (136) record) mode: File type bit mask S_IFREG = 32768 File (#rtl.baseunix.stat (136) record) mode: Regular le S_IFSOCK = 49152 File (#rtl.baseunix.stat (136) record) mode: Socket S_IRGRP = %0000100000 Mode ag: Read by group. 122
S_IROTH = %0000000100 Mode ag: Read by others. S_IRUSR = %0100000000 Mode ag: Read by owner. S_IRWXG = S_IRGRP or S_IWGRP or S_IXGRP Mode ag: Read, write, execute by groups. S_IRWXO = S_IROTH or S_IWOTH or S_IXOTH Mode ag: Read, write, execute by others. S_IRWXU = S_IRUSR or S_IWUSR or S_IXUSR Mode ag: Read, write, execute by user. S_IWGRP = %0000010000 Mode ag: Write by group. S_IWOTH = %0000000010 Mode ag: Write by others. S_IWUSR = %0010000000 Mode ag: Write by owner. S_IXGRP = %0000001000 Mode ag: Execute by group. S_IXOTH = %0000000001 Mode ag: Execute by others. S_IXUSR = %0001000000 Mode ag: Execute by owner. UTSNAME_DOMAIN_LENGTH = UTSNAME_LENGTH Max length of utsname (141) domain name. UTSNAME_LENGTH = SYS_NMLN Max length of utsname (141) system name, release, version, machine. 123
UTSNAME_NODENAME_LENGTH = UTSNAME_LENGTH Max length of utsname (141) node name. WNOHANG = 1 #rtl.baseunix.fpWaitpid (193) option: Do not wait for processes to terminate. wordsinfdset = FD_MAXFDSET div BITSINWORD Number of words in a TFDSet (137) array wordsinsigset = SIG_MAXSIG div BITSINWORD Number of words in a signal set. WUNTRACED = 2 #rtl.baseunix.fpWaitpid (193) option: Also report children wich were stopped but not yet reported W_OK = 2 fpAccess (142) call test: write allowed X_OK = 1 fpAccess (142) call test: execute allowed _STAT_VER = _STAT_VER_LINUX Stat version number _STAT_VER_KERNEL = 1 Current version of stat record _STAT_VER_LINUX = 3 Version of linux stat record _STAT_VER_LINUX_OLD = 1 Old kernel denition of stat _STAT_VER_SVR4 = 2 SVR 4 denition of stat
124
1.3.2
Types
Blkcnt64_t = cuint64 64-bit block count Blkcnt_t = cuint Block count type. Blksize_t = cuint Block size type. cbool = UnixType.cbool Boolean type cchar = UnixType.cchar Alias for #rtl.UnixType.cchar (1707) cdouble = UnixType.cdouble Double precision real format. cfloat = UnixType.cfloat Floating-point real format cint = UnixType.cint C type: integer (natural size) cint16 = UnixType.cint16 C type: 16 bits sized, signed integer. cint32 = UnixType.cint32 C type: 32 bits sized, signed integer. cint64 = UnixType.cint64 C type: 64 bits sized, signed integer. cint8 = UnixType.cint8 C type: 8 bits sized, signed integer. clock_t = UnixType.clock_t 125
Clock ticks type clong = UnixType.clong C type: long signed integer (double sized) clonglong = UnixType.clonglong C type: 64-bit (double long) signed integer. coff_t = UnixType.TOff Character offset type cschar = UnixType.cschar Signed character type cshort = UnixType.cshort C type: short signed integer (half sized) csigned = UnixType.csigned csigned is an alias for cint (125). csint = UnixType.csint Signed integer csize_t = UnixType.size_t Character size type cslong = UnixType.cslong The size is CPU dependent. cslonglong = UnixType.cslonglong cslonglong is an alias for clonglong (126). csshort = UnixType.csshort Short signed integer type cuchar = UnixType.cuchar Alias for #rtl.UnixType.cuchar (1708) cuint = UnixType.cuint 126
C type: unsigned integer (natural size) cuint16 = UnixType.cuint16 C type: 16 bits sized, unsigned integer. cuint32 = UnixType.cuint32 C type: 32 bits sized, unsigned integer. cuint64 = UnixType.cuint64 C type: 64 bits sized, unsigned integer. cuint8 = UnixType.cuint8 C type: 8 bits sized, unsigned integer. culong = UnixType.culong C type: long unsigned integer (double sized) culonglong = UnixType.culonglong C type: 64-bit (double long) unsigned integer. cunsigned = UnixType.cunsigned Alias for #rtl.unixtype.cunsigned (1709) cushort = UnixType.cushort C type: short unsigned integer (half sized) dev_t = UnixType.dev_t Device descriptor type. Dir = record dd_fd : Integer; dd_loc : LongInt; dd_size : Integer; dd_buf : pDirent; dd_nextoff : Cardinal; dd_max : Integer; dd_lock : pointer; end
127
Dirent = packed record d_fileno : ino64_t; d_off : off_t; d_reclen : cushort; d_type : cuchar; d_name : Array[0..(255+1)-1] of Char; end
Record used in the fpReadDir (174) function to return les in a directory. FLock = record l_type : cshort; l_whence : cshort; l_start : kernel_off_t; l_len : kernel_off_t; l_pid : pid_t; end
Lock description type for fpFCntl (151) lock call. FLock64 = record l_type : cshort; l_whence : cshort; l_start : kernel_loff_t; l_len : kernel_loff_t; l_pid : pid_t; end
FLock64 is the record used in the FpFcntl (151) le locking call. It is the same as the FLock (128) type, only contains 64-bit offsets. gid_t = UnixType.gid_t Group ID type. ino_t = UnixType.ino_t Inode type. iovec = record iov_base : pointer; iov_len : size_t; end
iovec is used in fpreadv (175) for IO to multiple buffers to describe a buffer location. kernel_gid_t = cuint kernel_gid_t may differ from the libc type used to describe group IDs. 128
kernel_loff_t = clonglong Long kernel offset type kernel_mode_t = cuint kernel_mode_t may differ from the libc type used to describe le modes. kernel_off_t = clong Kernel offset type kernel_uid_t = cuint kernel_uid_t may differ from the libc type used to describe user IDs. mode_t = UnixType.mode_t Inode mode type. nlink_t = UnixType.nlink_t Number of links type. off_t = UnixType.off_t Offset type. PBlkCnt = ^Blkcnt_t pointer to TBlkCnt (136) type. PBlkSize = ^Blksize_t Pointer to TBlkSize (136) type. pcbool = UnixType.pcbool Pointer to boolean type cbool (125) pcchar = UnixType.pcchar Alias for #rtl.UnixType.pcchar (1710) pcdouble = UnixType.pcdouble Pointer to cdouble (125) type. pcfloat = UnixType.pcfloat Pointer to coat (125) type. 129
pcint = UnixType.pcint Pointer to cInt (125) type. pcint16 = UnixType.pcint16 Pointer to 16-bit signed integer type pcint32 = UnixType.pcint32 Pointer to signed 32-bit integer type pcint64 = UnixType.pcint64 Pointer to signed 64-bit integer type pcint8 = UnixType.pcint8 Pointer to 8-bits signed integer type pClock = UnixType.pClock Pointer to TClock (136) type. pclong = UnixType.pclong Pointer to cLong (126) type. pclonglong = UnixType.pclonglong Pointer to longlong type. pcschar = UnixType.pcschar Pointer to character type cschar (126). pcshort = UnixType.pcshort Pointer to cShort (126) type. pcsigned = UnixType.pcsigned Pointer to signed integer type csigned (126). pcsint = UnixType.pcsint Pointer to signed integer type csint (126) pcsize_t = UnixType.psize_t Pointer to csize_t 130
pcslong = UnixType.pcslong Pointer ot the signed long cslong (126) pcslonglong = UnixType.pcslonglong Pointer to Signed longlong type cslonglong (126) pcsshort = UnixType.pcsshort Pointer to short signed integer type csshort (126) pcuchar = UnixType.pcuchar Alias for #rtl.UnixType.pcuchar (1711) pcuint = UnixType.pcuint Pointer to cUInt (127) type. pcuint16 = UnixType.pcuint16 Pointer to 16-bit unsigned integer type pcuint32 = UnixType.pcuint32 Pointer to unsigned 32-bit integer type pcuint64 = UnixType.pcuint64 Pointer to unsigned 64-bit integer type pcuint8 = UnixType.pcuint8 Pointer to 8-bits unsigned integer type pculong = UnixType.pculong Pointer to cuLong (127) type. pculonglong = UnixType.pculonglong Unsigned longlong type pcunsigned = UnixType.pcunsigned Alias for #rtl.unixtype.pcunsigned (1712) pcushort = UnixType.pcushort Pointer to cuShort (127) type. 131
pDev = UnixType.pDev Pointer to TDev (136) type. pDir = ^Dir Pointer to TDir (136) record pDirent = ^Dirent Pointer to TDirent (136) record. pFDSet = ^TFDSet Pointer to TFDSet (137) type. pFilDes = ^TFilDes Pointer to TFilDes (137) type. pfpstate = ^tfpstate Pointer to tfpstate (137) record. pGid = UnixType.pGid Pointer to TGid (137) type. pGrpArr = ^TGrpArr Pointer to TGrpArr (137) array. pid_t = UnixType.pid_t Process ID type. pIno = UnixType.pIno Pointer to TIno (138) type. piovec = ^tiovec pointer to a iovec (128) record pMode = UnixType.pMode Pointer to TMode (138) type. pnLink = UnixType.pnLink Pointer to TnLink (138) type. 132
pOff = UnixType.pOff Pointer to TOff (138) type. pollfd = record fd : cint; events : cshort; revents : cshort; end
pollfd is used in the fpPoll (172) call to describe the various actions. pPid = UnixType.pPid Pointer to TPid (138) type. ppollfd = ^pollfd Pointer to tpollfd. PRLimit = ^TRLimit Pointer to TRLimit (139) record psigactionrec = ^sigactionrec Pointer to SigActionRec (135) record type. PSigContext = ^TSigContext Pointer to #rtl.baseunix.TSigContext (139) record type. psiginfo = ^tsiginfo Pointer to #rtl.baseunix.TSigInfo (140) record type. psigset = ^tsigset Pointer to SigSet (136) type. pSize = UnixType.pSize Pointer to TSize (140) type. pSize_t = UnixType.pSize_t Pointer to Size_t pSocklen = UnixType.pSocklen 133
Pointer to TSockLen (140) type. psSize = UnixType.psSize Pointer to TsSize (140) type PStat = ^Stat Pointer to TStat (140) type. pstatfs = UnixType.PStatFs This is an alias for the type dened in the #rtl.ctypes (435) unit. pthread_cond_t = UnixType.pthread_cond_t Thread conditional variable type. pthread_mutex_t = UnixType.pthread_mutex_t Thread mutex type. pthread_t = UnixType.pthread_t Posix thread type. pTime = UnixType.pTime Pointer to TTime (140) type. ptimespec = UnixType.ptimespec Pointer to timespec (137) type. ptimeval = UnixType.ptimeval Pointer to timeval (137) type. ptimezone = ^timezone Pointer to TimeZone (138) record. ptime_t = UnixType.ptime_t Pointer to time_t (138) type. PTms = ^tms Pointer to TTms (141) type. Pucontext = ^Tucontext 134
Pointer to TUContext (141) type. pUid = UnixType.pUid Pointer to TUid (141) type. pUtimBuf = ^UTimBuf Pointer to TUTimBuf (141) type. PUtsName = ^TUtsName Pointer to TUtsName (141) type. rlim_t = culong rlim_t is used as the type for the various elds in the TRLimit (139) record. sigactionhandler = sigactionhandler_t When installing a signal handler, the actual signal handler must be of type SigActionHandler. sigactionhandler_t = procedure(signal: LongInt;info: psiginfo; context: PSigContext) of object Standard signal action handler prototype sigactionrec = record sa_handler : sigactionhandler_t; sa_flags : culong; sa_restorer : sigrestorerhandler_t; sa_mask : sigset_t; end
Record used in fpSigAction (180) call. signalhandler = signalhandler_t Simple signal handler prototype signalhandler_t = procedure(signal: LongInt) of object Standard signal handler prototype sigrestorerhandler = sigrestorerhandler_t Alias for sigrestorerhandler_t (136) type. sigrestorerhandler_t = procedure of object 135
Standard signal action restorer prototype sigset = sigset_t Signal set type sigset_t = Array[0..wordsinsigset-1] of culong Signal set type size_t = UnixType.size_t Size specication type. socklen_t = UnixType.socklen_t Socket address length type. ssize_t = UnixType.ssize_t Small size type. Stat = packed record end
Record describing an inode (le) in the FPFstat (153) call. TBlkCnt = Blkcnt_t Alias for Blkcnt_t (125) type. TBlkSize = Blksize_t Alias for blksize_t (125) type. TClock = UnixType.TClock Alias for clock_t (126) type. TDev = UnixType.TDev Alias for dev_t (127) type. TDir = Dir Alias for Dir (127) type. TDirent = Dirent Alias for Dirent (128) type. 136
TFDSet = Array[0..(FD_MAXFDSETdivBITSINWORD)-1] of culong File descriptor set for fpSelect (176) call. TFilDes = Array[0..1] of cint Array of le descriptors as used in fpPipe (171) call. tfpreg = record significand : Array[0..3] of Word; exponent : Word; end
Record describing oating point register in signal handler. tfpstate = record cw : Cardinal; sw : Cardinal; tag : Cardinal; ipoff : Cardinal; cssel : Cardinal; dataoff : Cardinal; datasel : Cardinal; st : Array[0..7] of tfpreg; status : Cardinal; end
Record describing oating point unit in signal handler. TGid = UnixType.TGid Alias for gid_t (128) type. TGrpArr = Array[0..0] of TGid Array of gid_t (128) IDs timespec = UnixType.timespec Short time specication type. timeval = UnixType.timeval Time specication type. timezone = packed record tz_minuteswest : cint; tz_dsttime : cint; end
137
Record describing a timezone time_t = UnixType.time_t Time span type TIno = UnixType.TIno Alias for ino_t (128) type. TIOCtlRequest = UnixType.TIOCtlRequest Easy access alias for unixtype.TIOCtlRequest (1717) tiovec = iovec Alias for the iovec (128) record type. TMode = UnixType.TMode Alias for mode_t (129) type. tms = packed record tms_utime : clock_t; tms_stime : clock_t; tms_cutime : clock_t; tms_cstime : clock_t; end
Record containing timings for fpTimes (190) call. TnLink = UnixType.TnLink Alias for nlink_t (129) type. TOff = UnixType.TOff Alias for off_t (129) type. TPid = UnixType.TPid Alias for pid_t (132) type. tpollfd = pollfd Alias for pollfd type TRLimit = record rlim_cur : rlim_t; rlim_max : rlim_t; end
138
TRLimit is the structure used by the kernel to return resource limit information in. tsigactionhandler = sigactionhandler_t Alias for sigactionhandler_t (135) type. tsigaltstack = record ss_sp : pointer; ss_flags : LongInt; ss_size : LongInt; end
Provide the location of an alternate signal handler stack. TSigContext = record gs : Word; __gsh : Word; fs : Word; __fsh : Word; es : Word; __esh : Word; ds : Word; __dsh : Word; edi : Cardinal; esi : Cardinal; ebp : Cardinal; esp : Cardinal; ebx : Cardinal; edx : Cardinal; ecx : Cardinal; eax : Cardinal; trapno : Cardinal; err : Cardinal; eip : Cardinal; cs : Word; __csh : Word; eflags : Cardinal; esp_at_signal : Cardinal; ss : Word; __ssh : Word; fpstate : pfpstate; oldmask : Cardinal; cr2 : Cardinal; end
This type is CPU dependent. Cross-platform code should not use the contents of this record. tsiginfo = record si_signo : LongInt; si_errno : LongInt; si_code : LongInt; 139
This type describes the signal that occurred. tsignalhandler = signalhandler_t Alias for signalhandler_t (135) type. tsigrestorerhandler = sigrestorerhandler_t Alias for sigrestorerhandler_t (136) type. tsigset = sigset_t Alias for SigSet (136) type. TSize = UnixType.TSize Alias for size_t (136) type TSocklen = UnixType.TSocklen Alias for socklen_t (136) type. TsSize = UnixType.TsSize Alias for ssize_t (136) type TStat = Stat Alias for Stat (136) type. tstatfs = UnixType.TStatFs Record describing a le system in the baseunix.fpstatfs (1225) call. TTime = UnixType.TTime Alias for TTime (140) type. Ttimespec = UnixType.Ttimespec Alias for TimeSpec (137) type. TTimeVal = UnixType.TTimeVal Alias for timeval (137) type. 140
TTimeZone = timezone Alias for TimeZone (138) record. TTms = tms Alias for Tms (138) record type. TUcontext = record uc_flags : Cardinal; uc_link : Pucontext; uc_stack : tsigaltstack; uc_mcontext : TSigContext; uc_sigmask : tsigset; end
This structure is used to describe the user context in a program or thread. It is not used in this unit, but is provided for completeness. TUid = UnixType.TUid Alias for uid_t (141) type. TUtimBuf = UTimBuf Alias for UtimBuf (141) type. TUtsName = UtsName Alias for UtsName (141) type. uid_t = UnixType.uid_t User ID type UTimBuf = record actime : time_t; modtime : time_t; end
Record used in fpUtime (192) to set le access and modicaton times. UtsName = record Sysname : Array[0..UTSNAME_LENGTH-1] of Char; Nodename : Array[0..UTSNAME_NODENAME_LENGTH-1] of Char; Release : Array[0..UTSNAME_LENGTH-1] of Char; Version : Array[0..UTSNAME_LENGTH-1] of Char; Machine : Array[0..UTSNAME_LENGTH-1] of Char; Domain : Array[0..UTSNAME_DOMAIN_LENGTH-1] of Char; end
The elements of this record are null-terminated C style strings, you cannot access them directly. Note that the Domain eld is a GNU extension, and may not be available on all platforms. 141
1.4
1.4.1
Synopsis: Create a null-terminated array of strings from a command-line string Declaration: function CreateShellArgV(const prog: string) : PPChar function CreateShellArgV(const prog: Ansistring) : PPChar Visibility: default Description: CreateShellArgV creates a command-line string for executing a shell command using sh -c. The result is a null-terminated array of null-terminated strings suitable for use in fpExecv (149) and friends. Errors: If no more memory is available, a heap error may occur. See also: fpExecv (149), FreeShellArgV (194)
1.4.2
FpAccess
Synopsis: Check le access Declaration: function FpAccess(pathname: PChar;aMode: cint) : cint function FpAccess(pathname: AnsiString;aMode: cint) : cint Visibility: default Description: FpAccess tests users access rights on the specied le. Mode is a mask existing of one or more of the following: R_OKUser has read rights. W_OKUser has write rights. X_OKUser has execute rights. F_OKFile exists. The test is done with the real user ID, instead of the effective user ID. If the user has the requested rights, zero is returned. If access is denied, or an error occurred, a nonzero value is returned. Errors: Extended error information can be retrieved using fpGetErrno (156). sys_eaccessThe requested access is denied, either to the le or one of the directories in its path. sys_einvalMode was incorrect. sys_enoentA directory component in Path doesnt exist or is a dangling symbolic link. sys_enotdirA directory component in Path is not a directory. sys_enomemInsufcient kernel memory. sys_eloopPath has a circular symbolic link. See also: FpChown (145), FpChmod (144) Listing: ./bunixex/ex26.pp
142
Program Example26 ; { Program t o demonstrate t h e Access f u n c t i o n . } Uses BaseUnix ; begin i f fpAccess ( / e t c / passwd ,W_OK) = 0 then begin W r i t e l n ( B e t t e r check your system . ) ; W r i t e l n ( I can w r i t e t o t h e / e t c / passwd f i l e ! ) ; end ; end .
1.4.3
FpAlarm
Synopsis: Schedule an alarm signal to be delivered Declaration: function FpAlarm(seconds: cuint) : cuint Visibility: default Description: FpAlarm schedules an alarm signal to be delivered to your process in Seconds seconds. When Seconds seconds have elapsed, the system will send a SIGALRM signal to the current process. If Seconds is zero, then no new alarm will be set. Whatever the value of Seconds, any previous alarm is cancelled. The function returns the number of seconds till the previously scheduled alarm was due to be delivered, or zero if there was none. A negative value indicates an error. See also: fpSigAction (180), fpPause (171) Listing: ./bunixex/ex59.pp
Program Example59 ; { Program t o demonstrate t h e Alarm f u n c t i o n . } Uses BaseUnix ; Procedure AlarmHandler ( Sig : c i n t ) ; cdecl ; begin W r i t e l n ( Got t o alarm h a n d l e r ) ; end ; begin W r i t e l n ( S e t t i n g alarm h a n d l e r ) ; f p S i g n a l (SIGALRM, S i g n a l H a n d l e r ( @AlarmHandler ) ) ; W r i t e l n ( Scheduling Alarm i n 1 0 seconds ) ; fpAlarm ( 1 0 ) ; W r i t e l n ( Pausing ) ; fpPause ; W r i t e l n ( Pause r e t u r n e d ) ; end .
143
1.4.4
FpChdir
Synopsis: Change current working directory. Declaration: function FpChdir(path: PChar) : cint function FpChdir(path: AnsiString) : cint Visibility: default Description: fpChDir sets the current working directory to Path. It returns zero if the call was succesful, -1 on error. Note: There exist a portable alterative to fpChDir: system.chdir. Please use fpChDir only if you are writing Unix specic code. System.chdir will work on all operating systems. Errors: Extended error information can be retrieved using fpGetErrno (156). See also: fpGetCwd (155)
1.4.5
FpChmod
Synopsis: Change le permission bits Declaration: function FpChmod(path: PChar;Mode: TMode) : cint function FpChmod(path: AnsiString;Mode: TMode) : cint Visibility: default Description: fpChmod sets the Mode bits of the le in Path to Mode. Mode can be specied by or-ing the following values: S_ISUIDSet user ID on execution. S_ISGIDSet Group ID on execution. S_ISVTXSet sticky bit. S_IRUSRRead by owner. S_IWUSRWrite by owner. S_IXUSRExecute by owner. S_IRGRPRead by group. S_IWGRPWrite by group. S_IXGRPExecute by group. S_IROTHRead by others. S_IWOTHWrite by others. S_IXOTHExecute by others. S_IRWXORead, write, execute by others. S_IRWXGRead, write, execute by groups. S_IRWXURead, write, execute by user. If the function is successful, zero is returned. A nonzero return value indicates an error. Errors: The following error codes are returned: sys_epermThe effective UID doesnt match the ownership of the le, and is not zero. Owner or group were not specied correctly. 144
sys_eaccessOne of the directories in Path has no search (=execute) permission. sys_enoentA directory entry in Path does not exist or is a symbolic link pointing to a non-existent directory. sys_enomemInsufcient kernel memory. sys_erofsThe le is on a read-only lesystem. sys_eloopPath has a reference to a circular symbolic link, i.e. a symbolic link, whose expansion points to itself. See also: fpChown (145), fpAccess (142) Listing: ./bunixex/ex23.pp
Program Example23 ; { Program t o demonstrate t h e Chmod f u n c t i o n . } Uses BaseUnix , Unix ; Var F : Text ; begin { Create a f i l e } Assign ( f , t e s t e x 2 1 ) ; Rewrite ( F ) ; W r i t e l n ( f , # ! / b i n / sh ) ; W r i t e l n ( f , echo Some t e x t f o r t h i s f i l e ) ; Close ( F ) ; fpChmod ( t e s t e x 2 1 , & 7 7 7 ) ; { F i l e i s now e x e c u t a b l e } fpexecl ( . / testex21 , [ ] ) ; end .
1.4.6
FpChown
Synopsis: Change owner of le Declaration: function FpChown(path: PChar;owner: TUid;group: TGid) : cint function FpChown(path: AnsiString;owner: TUid;group: TGid) : cint Visibility: default Description: fpChown sets the User ID and Group ID of the le in Path to Owner,Group. The function returns zero if the call was succesfull, a nonzero return value indicates an error. Errors: The following error codes are returned: sys_epermThe effective UID doesnt match the ownership of the le, and is not zero. Owner or group were not specied correctly. sys_eaccessOne of the directories in Path has no search (=execute) permission. sys_enoentA directory entry in Path does not exist or is a symbolic link pointing to a non-existent directory. sys_enomemInsufcient kernel memory. sys_erofsThe le is on a read-only lesystem. 145
sys_eloopPath has a reference to a circular symbolic link, i.e. a symbolic link, whose expansion points to itself. See also: fpChmod (144), fpAccess (142) Listing: ./bunixex/ex24.pp
Program Example24 ; { Program t o demonstrate t h e Chown f u n c t i o n . } Uses BaseUnix ; Var UID : TUid ; GID : TGid ; F : Text ; begin W r i t e l n ( T h i s w i l l o n l y work i f you are r o o t . ) ; Write ( E n t e r a UID : ) ; readln ( UID ) ; Write ( E n t e r a GID : ) ; readln ( GID ) ; Assign ( f , t e s t . t x t ) ; Rewrite ( f ) ; W r i t e l n ( f , The owner o f t h i s f i l e should become : ) ; W r i t e l n ( f , UID : , UID ) ; W r i t e l n ( f , GID : , GID ) ; Close ( F ) ; i f fpChown ( t e s t . t x t , UID , GID) < >0 then i f f p g e t e r r n o =ESysEPERM then W r i t e l n ( You are n o t r o o t ! ) else W r i t e l n ( Chmod f a i l e d w i t h e x i t code : , f p g e t e r r n o ) else W r i t e l n ( Changed owner s u c c e s s f u l l y ! ) ; end .
1.4.7
FpClose
Synopsis: Close le descriptor Declaration: function FpClose(fd: cint) : cint Visibility: default Description: FpClose closes a le with le descriptor Fd. The function returns zero if the le was closed successfully, a nonzero return value indicates an error. For an example, see FpOpen (168). Errors: Extended error information can be retrieved using fpGetErrno (156). See also: FpOpen (168), FpRead (173), FpWrite (194), FpFTruncate (154), FpLSeek (162)
1.4.8
FpClosedir
Declaration: function FpClosedir(var dirp: Dir) : cint Visibility: default Description: FpCloseDir closes the directory pointed to by dirp. It returns zero if the directory was closed succesfully, -1 otherwise. For an example, see fpOpenDir (169). Errors: Extended error information can be retrieved using fpGetErrno (156). See also: FpOpenDir (169), FpReadDir (174)
1.4.9
FpDup
Synopsis: Duplicate a le handle Declaration: function FpDup(fildes: cint) : cint function FpDup(var oldfile: text;var newfile: text) : cint function FpDup(var oldfile: File;var newfile: File) : cint Visibility: default Description: FpDup returns a le descriptor that is a duplicate of the le descriptor fildes. The second and third forms make NewFile an exact copy of OldFile, after having ushed the buffer of OldFile in case it is a Text le or untyped le. Due to the buffering mechanism of Pascal, these calls do not have the same functionality as the dup call in C. The internal Pascal buffers are not the same after this call, but when the buffers are ushed (e.g. after output), the output is sent to the same le. Doing an lseek will, however, work as in C, i.e. doing a lseek will change the leposition in both les. The function returns a negative value in case of an error, a positive value is a le handle, and indicates succes. Errors: A negative value can be one of the following error codes: sys_ebadfOldFile hasnt been assigned. sys_emleMaximum number of open les for the process is reached. See also: fpDup2 (148) Listing: ./bunixex/ex31.pp
program Example31 ; { Program t o demonstrate t h e Dup f u n c t i o n . } uses baseunix ; var f : t e x t ; begin i f fpdup ( o u t p u t , f ) < >0 then W r i t e l n ( Dup F a i l e d ! ) ; writeln ( This i s w r i t t e n to stdout . ) ; w r i t e l n ( f , T h i s i s w r i t t e n t o t h e dup f i l e , and f l u s h e d ) ; f l u s h ( f ) ; writeln end .
147
1.4.10
FpDup2
Synopsis: Duplicate one lehandle to another Declaration: function FpDup2(fildes: cint;fildes2: cint) : cint function FpDup2(var oldfile: text;var newfile: text) : cint function FpDup2(var oldfile: File;var newfile: File) : cint Visibility: default Description: Makes fildes2 or NewFile an exact copy of fildes or OldFile, after having ushed the buffer of OldFile in the case of text or untyped les. After a call to fdup2, the 2 le descriptors point to the same physical device (a le, socket, or a terminal). NewFile can be an assigned le. If newfile or fildes was open, it is closed rst. Due to the buffering mechanism of Pascal, this has not the same functionality as the dup2 call in C. The internal Pascal buffers are not the same after this call, but when the buffers are ushed (e.g. after output), the output is sent to the same le. Doing an lseek will, however, work as in C, i.e. doing a lseek will change the leposition in both les. The function returns the new le descriptor number, on error -1 is returned, and the error can be retrieved with fpgeterrno (156) Errors: In case of error, the following error codes can be reported: sys_ebadfOldFile (or fildes) hasnt been assigned. sys_emleMaximum number of open les for the process is reached. See also: fpDup (147) Listing: ./bunixex/ex32.pp
program Example31 ; { Program t o demonstrate t h e FpDup2 f u n c t i o n . } uses BaseUnix ; var f : t e x t ; i : longint ; begin Assign ( f , t e x t . t x t ) ; Rewrite ( F ) ; For i : = 1 to 1 0 do w r i t e l n ( F , L i n e : , i ) ; i f fpdup2 ( o u t p u t , f )= 1 then W r i t e l n ( Dup2 F a i l e d ! ) ; writeln ( This i s w r i t t e n to stdout . ) ; w r i t e l n ( f , T h i s i s w r i t t e n t o t h e dup f i l e , and f l u s h e d ) ; flush ( f ) ; writeln ; { Remove f i l e . Comment t h i s i f you want t o check f l u s h i n g . } fpUnlink ( text . t x t ) ; end .
148
1.4.11
FpExecv
Synopsis: Execute process Declaration: function FpExecv(path: PChar;argv: PPChar) : cint function FpExecv(path: AnsiString;argv: PPChar) : cint Visibility: default Description: Replaces the currently running program with the program, specied in path. It gives the program the options in argvp. This is a pointer to an array of pointers to null-terminated strings. The last pointer in this array should be nil. The current environment is passed to the program. On success, execv does not return. Errors: On error, -1 is returned. Extended error information can be retrieved with fpGetErrNo (156) sys_eaccesFile is not a regular le, or has no execute permission. A compononent of the path has no search permission. sys_epermThe le system is mounted \textit{noexec}. sys_e2bigArgument list too big. sys_enoexecThe magic number in the le is incorrect. sys_enoentThe le does not exist. sys_enomemNot enough memory for kernel. sys_enotdirA component of the path is not a directory. sys_eloopThe path contains a circular reference (via symlinks). See also: fpExecve (150), fpFork (153) Listing: ./bunixex/ex8.pp
Program Example8 ; { Program t o demonstrate t h e Execv f u n c t i o n . } Uses Unix , s t r i n g s ; Const Arg0 : PChar = / b i n / l s ; Arg1 : Pchar = l ; Var PP : PPchar ;
begin GetMem ( PP, 3 SizeOf ( Pchar ) ) ; PP [ 0 ] : = Arg0 ; PP [ 1 ] : = Arg1 ; PP [ 3 ] : = N i l ; { Execute / b i n / l s l , w i t h c u r r e n t environment } fpExecv ( / b i n / l s , pp ) ; end .
149
1.4.12
FpExecve
Synopsis: Execute process using environment Declaration: function FpExecve(path: PChar;argv: PPChar;envp: PPChar) : cint function FpExecve(path: AnsiString;argv: PPChar;envp: PPChar) : cint Visibility: default Description: Replaces the currently running program with the program, specied in path. It gives the program the options in argv, and the environment in envp. They are pointers to an array of pointers to null-terminated strings. The last pointer in this array should be nil. On success, execve does not return. Errors: Extended error information can be retrieved with fpGetErrno (156), and includes the following: sys_eaccesFile is not a regular le, or has no execute permission. A compononent of the path has no search permission. sys_epermThe le system is mounted \textit{noexec}. sys_e2bigArgument list too big. sys_enoexecThe magic number in the le is incorrect. sys_enoentThe le does not exist. sys_enomemNot enough memory for kernel. sys_enotdirA component of the path is not a directory. sys_eloopThe path contains a circular reference (via symlinks). See also: fpExecv (149), fpFork (153) Listing: ./bunixex/ex7.pp
Program Example7 ; { Program t o demonstrate t h e Execve f u n c t i o n . } Uses BaseUnix , s t r i n g s ; Const Arg0 : PChar = / b i n / l s ; Arg1 : Pchar = l ; Var PP : PPchar ;
begin GetMem ( PP, 3 SizeOf ( Pchar ) ) ; PP [ 0 ] : = Arg0 ; PP [ 1 ] : = Arg1 ; PP [ 3 ] : = N i l ; { Execute / b i n / l s l , w i t h c u r r e n t environment } { Envp i s d e f i n e d i n system . i n c } fpExecVe ( / b i n / l s , pp , envp ) ; end .
150
1.4.13
FpExit
Synopsis: Exit the current process Declaration: procedure FpExit(Status: cint) Visibility: default Description: FpExit exits the currently running process, and report Status as the exit status. Remark: If this call is executed, the normal unit nalization code will not be executed. This may lead to unexpected errors and stray les on your system. It is therefore recommended to use the Halt call instead. Errors: None. See also: FpFork (153), FpExecve (150)
1.4.14
FpFcntl
Synopsis: File control operations. Declaration: function FpFcntl(fildes: cint;cmd: cint) : cint function FpFcntl(fildes: cint;cmd: cint;arg: cint) : cint function FpFcntl(fildes: cint;cmd: cint;var arg: FLock) : cint Visibility: default Description: Read/set a les attributes. Fildes a valid le descriptor. Cmd speciees what to do, and is one of the following: F_GetFdRead the close_on_exec ag. If the low-order bit is 0, then the le will remain open across execve calls. F_GetFlRead the descriptors ags. F_GetOwnGet the Process ID of the owner of a socket. F_SetFdSet the close_on_exec ag of fildes. (only the least siginicant bit is used). F_GetLkReturn the flock record that prevents this process from obtaining the lock, or set the l_type eld of the lock of there is no obstruction. Arg is the ock record. F_SetLkSet the lock or clear it (depending on l_type in the flock structure). if the lock is held by another process, an error occurs. F_GetLkwSame as for F_Setlk, but wait until the lock is released. F_SetOwnSet the Process or process group that owns a socket. The function returns 0 if successful, -1 otherwise. Errors: On error, -1 is returned. Use fpGetErrno (156) for extended error information. sys_ebadfFd has a bad le descriptor. sys_eagain or sys_eaccessFor \textbf{F_SetLk}, if the lock is held by another process.
151
1.4.15
fpfdllset
Synopsis: Set all ledescriptors in the set. Declaration: function fpfdfillset(var nset: TFDSet) : cint Visibility: default Description: fpfdfillset sets all ledescriptors in nset. See also: FpSelect (176), FpFD_ZERO (153), FpFD_IsSet (152), FpFD_Clr (152), FpFD_Set (152)
1.4.16
fpFD_CLR
Synopsis: Clears a ledescriptor in a set Declaration: function fpFD_CLR(fdno: cint;var nset: TFDSet) : cint Visibility: default Description: FpFD_Clr clears le descriptor fdno in ledescriptor set nset. For an example, see FpSelect (176). Errors: None. See also: FpSelect (176), FpFD_ZERO (153), FpFD_Set (152), FpFD_IsSet (152)
1.4.17
fpFD_ISSET
Synopsis: Check whether a ledescriptor is set Declaration: function fpFD_ISSET(fdno: cint;const nset: TFDSet) : cint Visibility: default Description: FpFD_Set Checks whether le descriptor fdNo in ledescriptor set fds is set. It returns zero if the descriptor is not set, 1 if it is set. If the number of the ledescriptor it wrong, -1 is returned. For an example, see FpSelect (176). Errors: If an invald le descriptor number is passed, -1 is returned. See also: FpSelect (176), FpFD_ZERO (153), FpFD_Clr (152), FpFD_Set (152)
1.4.18
fpFD_SET
Synopsis: Set a ledescriptor in a set Declaration: function fpFD_SET(fdno: cint;var nset: TFDSet) : cint Visibility: default Description: FpFD_Set sets le descriptor fdno in ledescriptor set nset. For an example, see FpSelect (176). Errors: None. See also: FpSelect (176), FpFD_ZERO (153), FpFD_Clr (152), FpFD_IsSet (152)
152
1.4.19
fpFD_ZERO
Synopsis: Clear all le descriptors in set Declaration: function fpFD_ZERO(out nset: TFDSet) : cint Visibility: default Description: FpFD_ZERO clears all the ledescriptors in the le descriptor set nset. For an example, see FpSelect (176). Errors: None. See also: FpSelect (176), FpFD_Clr (152), FpFD_Set (152), FpFD_IsSet (152)
1.4.20
FpFork
Synopsis: Create child process Declaration: function FpFork : TPid Visibility: default Description: FpFork creates a child process which is a copy of the parent process. FpFork returns the process ID in the parent process, and zero in the childs process. (you can get the parents PID with fpGetPPid (158)). Errors: On error, -1 is returned to the parent, and no child is created. sys_eagainNot enough memory to create child process. See also: fpExecve (150), #rtl.linux.Clone (737)
1.4.21
FPFStat
Synopsis: Retrieve le information about a le descriptor. Declaration: function FpFStat(fd: cint;var sb: Stat) : cint function FPFStat(var F: Text;var Info: Stat) : Boolean function FPFStat(var F: File;var Info: Stat) : Boolean Visibility: default Description: FpFStat gets information about the le specied in one of the following: Fda valid le descriptor. Fan opened text le or untyped le. and stores it in Info, which is of type stat (136). The function returns zero if the call was succesfull, a nonzero return value indicates failure. Errors: Extended error information can be retrieved using fpGetErrno (156). sys_enoentPath does not exist. See also: FpStat (185), FpLStat (163) Listing: ./bunixex/ex28.pp 153
program example28 ; { Program t o demonstrate t h e F S t a t f u n c t i o n . } uses BaseUnix ; var f : t e x t ; i : byte ; info : stat ; begin { Make a f i l e } assign ( f , t e s t . f i l ) ; rewrite ( f ) ; f o r i : = 1 to 1 0 do w r i t e l n ( f , T e s t l i n e # , i ) ; close ( f ) ; { Do t h e c a l l on made f i l e . } i f f p s t a t ( t e s t . f i l , i n f o ) < >0 then begin w r i t e l n ( F s t a t f a i l e d . Errno : , f p g e t e r r n o ) ; halt ( 1 ) ; end ; writeln ; w r i t e l n ( R e s u l t o f f s t a t on f i l e t e s t . f i l . ) ; w r i t e l n ( Inode : , info . st_ino ) ; w r i t e l n ( Mode : , i n f o . st_mode ) ; writeln ( nlink : , info . st_nlink ); writeln ( uid : , info . st_uid ) ; writeln ( gid : , info . st_gid ) ; w r i t e l n ( rdev : , i n f o . st_rdev ) ; w r i t e l n ( Size : , info . st_size ) ; writeln ( Blksize : , info . st_blksize ) ; w r i t e l n ( Blocks : , info . st_blocks ) ; w r i t e l n ( atime : , i n f o . st_atime ) ; w r i t e l n ( mtime : , i n f o . st_mtime ) ; writeln ( ctime : , i n f o . st_ctime ) ; { Remove f i l e } erase ( f ) ; end .
1.4.22
FpFtruncate
Synopsis: Truncate le on certain size. Declaration: function FpFtruncate(fd: cint;flength: TOff) : cint Visibility: default Description: FpFTruncate sets the length of a le in fd on flength bytes, where flength must be less than or equal to the current length of the le in fd. The function returns zero if the call was successful, a nonzero return value indicates that an error occurred. Errors: Extended error information can be retrieved using fpGetErrno (156). See also: FpOpen (168), FpClose (146), FpRead (173), FpWrite (194), FpLSeek (162)
154
1.4.23
FpGetcwd
Synopsis: Retrieve the current working directory. Declaration: function FpGetcwd(path: PChar;siz: TSize) : PChar function FpGetcwd : AnsiString Visibility: default Description: fpgetCWD returns the current working directory of the running process. It is returned in Path, which points to a memory location of at least siz bytes. If the function is succesful, a pointer to Path is returned, or a string with the result. On error Nil or an empty string are returned. Errors: On error Nil or an empty string are returned. See also: FpGetPID (158), FpGetUID (160)
1.4.24
FpGetegid
Synopsis: Return effective group ID Declaration: function FpGetegid : TGid Visibility: default Description: FpGetegid returns the effective group ID of the currently running process. Errors: None. See also: FpGetGid (157), FpGetUid (160), FpGetEUid (156), FpGetPid (158), FpGetPPid (158), fpSetUID (180), FpSetGid (178) Listing: ./bunixex/ex18.pp
Program Example18 ; { Program t o demonstrate t h e GetGid and GetEGid f u n c t i o n s . } Uses BaseUnix ; begin w r i t e l n ( Group I d = , f p g e t g i d , E f f e c t i v e group I d = , f p g e t e g i d ) ; end .
1.4.25
FpGetEnv
Synopsis: Return value of environment variable. Declaration: function FpGetEnv(name: PChar) : PChar function FpGetEnv(name: string) : PChar Visibility: default Description: FPGetEnv returns the value of the environment variable in Name. If the variable is not dened, nil is returned. The value of the environment variable may be the empty string. A PChar is returned to accomodate for strings longer than 255 bytes, TERMCAP and LS_COLORS, for instance.
155
, fpGetenv ( PATH ) ) ;
1.4.26
fpgeterrno
Synopsis: Retrieve extended error information. Declaration: function fpgeterrno : LongInt Visibility: default Description: fpgeterrno returns extended information on the latest error. It is set by all functions that communicate with the kernel or C library. Errors: None. See also: fpseterrno (178)
1.4.27
FpGeteuid
Synopsis: Return effective user ID Declaration: function FpGeteuid : TUid Visibility: default Description: FpGeteuid returns the effective user ID of the currently running process. Errors: None. See also: FpGetUid (160), FpGetGid (157), FpGetEGid (155), FpGetPid (158), FpGetPPid (158), fpSetUID (180), FpSetGid (178) Listing: ./bunixex/ex17.pp
Program Example17 ; { Program t o demonstrate t h e GetUid and GetEUid f u n c t i o n s . } Uses BaseUnix ; begin w r i t e l n ( User I d = , f p g e t u i d , E f f e c t i v e user I d = , f p g e t e u i d ) ; end .
156
1.4.28
FpGetgid
Synopsis: Return real group ID Declaration: function FpGetgid : TGid Visibility: default Description: FpGetgid returns the real group ID of the currently running process. Errors: None. See also: FpGetEGid (155), FpGetUid (160), FpGetEUid (156), FpGetPid (158), FpGetPPid (158), fpSetUID (180), FpSetGid (178) Listing: ./bunixex/ex18.pp
Program Example18 ; { Program t o demonstrate t h e GetGid and GetEGid f u n c t i o n s . } Uses BaseUnix ; begin w r i t e l n ( Group I d = , f p g e t g i d , E f f e c t i v e group I d = , f p g e t e g i d ) ; end .
1.4.29
FpGetgroups
Synopsis: Get the list of supplementary groups. Declaration: function FpGetgroups(gidsetsize: cint;var grouplist: TGrpArr) : cint Visibility: default Description: FpGetgroups returns up to gidsetsize groups in GroupList If the function is successful, then number of groups that were stored is returned. On error, -1 is returned. Errors: On error, -1 is returned. Extended error information can be retrieved with fpGetErrNo (156) See also: FpGetpgrp (157), FpGetGID (157), FpGetEGID (155)
1.4.30
FpGetpgrp
Synopsis: Get process group ID Declaration: function FpGetpgrp : TPid Visibility: default Description: FpGetpgrp returns the process group ID of the current process. Errors: None. See also: fpGetPID (158), fpGetPPID (158), FpGetGID (157), FpGetUID (160)
157
1.4.31
FpGetpid
Synopsis: Return current process ID Declaration: function FpGetpid : TPid Visibility: default Description: FpGetpid returns the process ID of the currently running process. Note: There exist a portable alterative to fpGetpid: system.GetProcessID. Please use fpGetpid only if you are writing Unix specic code. System.GetProcessID will work on all operating systems. Errors: None. See also: FpGetPPid (158) Listing: ./bunixex/ex16.pp
Program Example16 ; { Program t o demonstrate t h e GetPid , GetPPid f u n c t i o n . } Uses BaseUnix ; begin W r i t e l n ( Process I d = , f p g e t p i d , Parent process I d = , f p g e t p p i d ) ; end .
1.4.32
FpGetppid
Synopsis: Return parent process ID Declaration: function FpGetppid : TPid Visibility: default Description: FpGetppid returns the Process ID of the parent process. Errors: None. See also: FpGetPid (158) Listing: ./bunixex/ex16.pp
Program Example16 ; { Program t o demonstrate t h e GetPid , GetPPid f u n c t i o n . } Uses BaseUnix ; begin W r i t e l n ( Process I d = , f p g e t p i d , Parent process I d = , f p g e t p p i d ) ; end .
158
1.4.33
fpGetPriority
Synopsis: Return process priority Declaration: function fpGetPriority(Which: cint;Who: cint) : cint Visibility: default Description: GetPriority returns the priority with which a process is running. Which process(es) is determined by the Which and Who variables. Which can be one of the pre-dened Prio_Process, Prio_PGrp, Prio_User, in which case Who is the process ID, Process group ID or User ID, respectively. For an example, see FpNice (168). Errors: Error information is returned solely by the FpGetErrno (156) function: a priority can be a positive or negative value. sys_esrchNo process found using which and who. sys_einvalWhich was not one of Prio_Process, Prio_Grp or Prio_User. See also: FpSetPriority (178), FpNice (168)
1.4.34
FpGetRLimit
Synopsis: Get process resource limits Declaration: function FpGetRLimit(resource: cint;rlim: PRLimit) : cint Visibility: default Description: FpGetRLimit gets the resource limits for the current process: resource determines the resource of which the kernel should return the limits (one of the many RLIMIT_* constants). rlim should point to a TRLimit (139) record and on success will contain the resource limits. The function returns zero if the resource limits were correctly returned. Errors: On error, -1 is returned and fpgeterrno (156) can be used to retrieve the error code. See also: FpSetRLimit (179)
1.4.35
FpGetsid
Synopsis: Get current session ID Declaration: function FpGetsid(pid: TPid) : TPid Visibility: default Description: FpGetsid returns the session ID of the process pid. The return value is the session ID of the process. (it equals the PID of the session leader). The process pid must be in the same session as the current process. Errors: On error, -1 is returned, and extended error information can be obtained with fpGetErrno. See also: FpGetpgrp (157), FpGetpid (158), FpGetPpid (158)
159
1.4.36
FpGetuid
Synopsis: Return current user ID Declaration: function FpGetuid : TUid Visibility: default Description: FpGetuid returns the real user ID of the currently running process. Errors: None. See also: FpGetGid (157), FpGetEUid (156), FpGetEGid (155), FpGetPid (158), FpGetPPid (158), fpSetUID (180) Listing: ./bunixex/ex17.pp
Program Example17 ; { Program t o demonstrate t h e GetUid and GetEUid f u n c t i o n s . } Uses BaseUnix ; begin w r i t e l n ( User I d = , f p g e t u i d , E f f e c t i v e user I d = , f p g e t e u i d ) ; end .
1.4.37
FpIOCtl
Synopsis: General kernel IOCTL call. Declaration: function FpIOCtl(Handle: cint;Ndx: TIOCtlRequest;Data: Pointer) : cint Visibility: default Description: This is a general interface to the Unix/ linux ioctl call. It performs various operations on the ledescriptor Handle. Ndx describes the operation to perform. Data points to data needed for the Ndx function. The structure of this data is function-dependent, so we dont elaborate on this here. For more information on this, see various manual pages under linux. Errors: Extended error information can be retrieved using fpGetErrno (156). Listing: ./bunixex/ex54.pp
Program Example54 ; uses BaseUnix , Termio ; { Program t o demonstrate t h e I O C t l f u n c t i o n . } var t i o s : Termios ; begin { $ i f d e f FreeBSD } f p I O C t l ( 1 ,TIOCGETA, @tios ) ; { $endif } WriteLn ( I n p u t Flags
: $ , hexstr ( t i o s . c_iflag , 8 ) ) ;
160
WriteLn ( Output Flags : $ , h e x s t r ( t i o s . c _ o f l a g , 8 ) ) ; WriteLn ( L i n e Flags : $ , hexstr ( t i o s . c_lflag , 8 ) ) ; WriteLn ( C o n t r o l Flags : $ , h e x s t r ( t i o s . c _ c f l a g , 8 ) ) ; end .
1.4.38
FpKill
Synopsis: Send a signal to a process Declaration: function FpKill(pid: TPid;sig: cint) : cint Visibility: default Description: fpKill sends a signal Sig to a process or process group. If Pid>0 then the signal is sent to Pid, if it equals -1, then the signal is sent to all processes except process 1. If Pid<-1 then the signal is sent to process group -Pid. The return value is zero, except in case three, where the return value is the number of processes to which the signal was sent. Errors: Extended error information can be retrieved using fpGetErrno (156): sys_einvalAn invalid signal is sent. sys_esrchThe Pid or process group dont exist. sys_epermThe effective userid of the current process doesnt math the one of process Pid. See also: FpSigAction (180), FpSignal (183)
1.4.39
FpLink
Synopsis: Create a hard link to a le Declaration: function FpLink(existing: PChar;newone: PChar) : cint function FpLink(existing: AnsiString;newone: AnsiString) : cint Visibility: default Description: fpLink makes NewOne point to the same le als Existing. The two les then have the same inode number. This is known as a hard link. The function returns zero if the call was succesfull, and returns a non-zero value if the call failed. Errors: The following error codes are returned: sys_exdevExisting and NewOne are not on the same lesystem. sys_epermThe lesystem containing Existing and NewOne doesnt support linking les. sys_eaccessWrite access for the directory containing NewOne is disallowed, or one of the directories in Existing or NewOne has no search (=execute) permission. sys_enoentA directory entry in Existing or NewOne does not exist or is a symbolic link pointing to a non-existent directory. sys_enotdirA directory entry in Existing or NewOne is nor a directory. sys_enomemInsufcient kernel memory. sys_erofsThe les are on a read-only lesystem. sys_eexistNewOne already exists. 161
sys_emlinkExisting has reached maximal link count. sys_eloopexisting or NewOne has a reference to a circular symbolic link, i.e. a symbolic link, whose expansion points to itself. sys_enospcThe device containing NewOne has no room for another entry. sys_epermExisting points to . or .. of a directory. See also: fpSymLink (186), fpUnLink (191) Listing: ./bunixex/ex21.pp
Program Example21 ; { Program t o demonstrate t h e L i n k and UnLink f u n c t i o n s . } Uses BaseUnix ; Var F : Text ; S : String ; begin Assign ( F , t e s t . t x t ) ; Rewrite ( F ) ; Writeln ( F , This i s w r i t t e n to t e s t . t x t ) ; Close ( f ) ; { new . t x t and t e s t . t x t are now t h e same f i l e } i f f p L i n k ( t e s t . t x t , new . t x t ) < >0 then w r i t e l n ( E r r o r when l i n k i n g ! ) ; { Removing t e s t . t x t s t i l l l e a v e s new . t x t } I f f p U n l i n k ( t e s t . t x t ) < >0 then W r i t e l n ( E r r o r when u n l i n k i n g ! ) ; Assign ( f , new . t x t ) ; Reset ( F ) ; While not EOF( f ) do begin Readln ( F , S ) ; Writeln ( > , s ) ; end ; Close ( f ) ; { Remove new . t x t a l s o } I f not FPUnlink ( new . t x t ) < >0 then W r i t e l n ( E r r o r when u n l i n k i n g ! ) ; end .
1.4.40
FpLseek
Synopsis: Set le pointer position. Declaration: function FpLseek(fd: cint;offset: TOff;whence: cint) : TOff Visibility: default Description: FpLSeek sets the current leposition of le fd to Offset, starting from Whence, which can be one of the following: Seek_SetOffset is the absolute position in the le. Seek_CurOffset is relative to the current position.
162
Seek_endOffset is relative to the end of the le. The function returns the new leposition, or -1 of an error occurred. For an example, see FpOpen (168). Errors: Extended error information can be retrieved using fpGetErrno (156). See also: FpOpen (168), FpWrite (194), FpClose (146), FpRead (173), FpFTruncate (154)
1.4.41
fpLstat
fpLstat(path: PChar;Info: PStat) : cint fpLstat(path: Ansistring;Info: PStat) : cint fpLstat(path: PChar;var Info: Stat) : cint fpLstat(Filename: ansistring;var Info: Stat) : cint
Synopsis: Return information about symbolic link. Do not follow the link Declaration: function function function function Visibility: default Description: FpLstat gets information about the link specied in Path (or FileName, and stores it in Info, which points to a record of type TStat. Contrary to FpFstat (153), it stores information about the link, not about the le the link points to. The function returns zero if the call was succesful, a nonzero return value indicates failure. failed. Errors: Extended error information is returned by the FpGetErrno (156) function. sys_enoentPath does not exist. See also: FpFStat (153), #rtl.unix.StatFS (1702) Listing: ./unixex/ex29.pp
program example29 ; { Program t o demonstrate t h e L S t a t f u n c t i o n . } uses BaseUnix , Unix ; var f : t e x t ; i : byte ; info : stat ; begin { Make a f i l e } assign ( f , t e s t . f i l ) ; rewrite ( f ) ; f o r i : = 1 to 1 0 do w r i t e l n ( f , T e s t l i n e # , i ) ; close ( f ) ; { Do t h e c a l l on made f i l e . } i f f p s t a t ( t e s t . f i l , i n f o ) < >0 then begin w r i t e l n ( F s t a t f a i l e d . Errno : , f p g e t e r r n o ) ; halt ( 1 ) ; end ; writeln ; w r i t e l n ( R e s u l t o f s t a t on f i l e t e s t . f i l . ) ; w r i t e l n ( Inode : , info . st_ino ) ;
163
writeln writeln writeln writeln writeln writeln writeln writeln writeln writeln writeln If
( ( ( ( ( ( ( ( ( ( (
Mode nlink uid gid rdev Size Blksize Blocks atime mtime ctime
: : : : : : : : : : :
, info , info , info , info , info , info , info , info , info , info , info
. st_mode ) ; . st_nlink ); . st_uid ) ; . st_gid ) ; . st_rdev ) ; . st_size ) ; . st_blksize ) ; . st_blocks ) ; . st_atime ) ; . st_mtime ) ; . st_ctime ) ;
f p l s t a t ( t e s t . l n k , @info ) < >0 then begin w r i t e l n ( L S t a t f a i l e d . Errno : , f p g e t e r r n o ) ; halt ( 1 ) ; end ; writeln ; w r i t e l n ( R e s u l t o f f s t a t on f i l e t e s t . l n k . ) ; w r i t e l n ( Inode : , info . st_ino ) ; w r i t e l n ( Mode : , i n f o . st_mode ) ; writeln ( nlink : , info . st_nlink ); writeln ( uid : , info . st_uid ) ; writeln ( gid : , info . st_gid ) ; w r i t e l n ( rdev : , i n f o . st_rdev ) ; w r i t e l n ( Size : , info . st_size ) ; writeln ( Blksize : , info . st_blksize ) ; w r i t e l n ( Blocks : , info . st_blocks ) ; w r i t e l n ( atime : , i n f o . st_atime ) ; w r i t e l n ( mtime : , i n f o . st_mtime ) ; writeln ( ctime : , i n f o . st_ctime ) ; { Remove f i l e and l i n k } erase ( f ) ; fpunlink ( test . lnk ) ; end .
if
1.4.42
FpMkdir
Synopsis: Create a new directory Declaration: function FpMkdir(path: PChar;Mode: TMode) : cint function FpMkdir(path: AnsiString;Mode: TMode) : cint Visibility: default Description: FpMkDir creates a new directory Path, and sets the new directorys mode to Mode. Path can be an absolute path or a relative path. Note that only the last element of the directory will be created, higher level directories must already exist, and must be writeable by the current user. On succes, 0 is returned. if the function fails, -1 is returned. Note: There exist a portable alterative to fpMkDir: system.mkdir. Please use fpMkDir only if you are writing Unix specic code. System.mkdir will work on all operating systems. Errors: Extended error information can be retrieved using fpGetErrno (156).
164
1.4.43
FpMkfo
Synopsis: Create FIFO (named pipe) in le system Declaration: function FpMkfifo(path: PChar;Mode: TMode) : cint function FpMkfifo(path: AnsiString;Mode: TMode) : cint Visibility: default Description: fpMkFifo creates named a named pipe in the lesystem, with name Path and mode Mode. The function returns zero if the command was succesful, and nonzero if it failed. Errors: The error codes include: sys_emleToo many le descriptors for this process. sys_enleThe system le table is full.
1.4.44
Fpmmap
Synopsis: Create memory map of a le Declaration: function Fpmmap(start: pointer;len: size_t;prot: cint;flags: cint; fd: cint;offst: off_t) : pointer Visibility: default Description: FpMMap maps or unmaps les or devices into memory. The different arguments determine what and how the le is mapped: adrAddress where to mmap the device. This address is a hint, and may not be followed. lenSize (in bytes) of area to be mapped. protProtection of mapped memory. This is a OR-ed combination of the following constants: PROT_EXECThe memory can be executed. PROT_READThe memory can be read. PROT_WRITEThe memory can be written. PROT_NONEThe memory can not be accessed. agsContains some options for the mmap call. It is an OR-ed combination of the following constants: MAP_FIXEDDo not map at another address than the given address. If the address cannot be used, MMap will fail. MAP_SHAREDShare this map with other processes that map this object. MAP_PRIVATECreate a private map with copy-on-write semantics. MAP_ANONYMOUSfd does not have to be a le descriptor. One of the options MAP_SHARED and MAP_PRIVATE must be present, but not both at the same time. fdFile descriptor from which to map. offOffset to be used in le descriptor fd. The function returns a pointer to the mapped memory, or a -1 in case of en error. Errors: On error, -1 is returned and extended error information is returned by the FpGetErrno (156) function. 165
Sys_EBADFfd is not a valid le descriptor and MAP_ANONYMOUS was not specied. Sys_EACCESMAP_PRIVATE was specied, but fd is not open for reading. Or MAP_SHARED was asked and PROT_WRITE is set, fd is not open for writing Sys_EINVALOne of the record elds Start, length or offset is invalid. Sys_ETXTBUSYMAP_DENYWRITE was set but the object specied by fd is open for writing. Sys_EAGAINfd is locked, or too much memory is locked. Sys_ENOMEMNot enough memory for this operation. See also: FpMUnMap (166) Listing: ./unixex/ex66.pp
Program Example66 ; { Program t o demonstrate t h e MMap f u n c t i o n . } Uses BaseUnix , Unix ; Var S : fd : Len : // args P : String ; cint ; longint ; : tmmapargs ; PChar ;
begin s := This i s the s t r i n g ; Len : = Length (S ) ; f d : = fpOpen ( t e s t f i l e . t x t , O_wrOnly or o _ c r e a t ) ; I f f d =1 then Halt ( 1 ) ; I f f p W r i t e ( fd , S [ 1 ] , Len)= 1 then Halt ( 2 ) ; fpClose ( fd ) ; f d : = fpOpen ( t e s t f i l e . t x t , O_rdOnly ) ; i f f d =1 then Halt ( 3 ) ; P: = Pchar ( fpmmap ( n i l , l e n + 1 ,PROT_READ or PROT_WRITE, MAP_PRIVATE, fd , 0 ) ) ; I f l o n g i n t (P)= 1 then Halt ( 4 ) ; W r i t e l n ( Read i n memory : ,P ) ; fpclose ( fd ) ; i f fpMUnMap ( P , Len ) < >0 Then Halt ( fpgeterrno ) ; end .
1.4.45
Fpmunmap
Synopsis: Unmap previously mapped memory block Declaration: function Fpmunmap(start: pointer;len: size_t) : cint Visibility: default
166
Description: FpMUnMap unmaps the memory block of size Len, pointed to by Adr, which was previously allocated with FpMMap (165). The function returns True if successful, False otherwise. For an example, see FpMMap (165). Errors: In case of error the function returns a nonzero value, extended error information is returned by the FpGetErrno (156) function. See FpMMap (165) for possible error values. See also: FpMMap (165)
1.4.46
FpNanoSleep
Synopsis: Suspend process for a short time Declaration: function FpNanoSleep(req: ptimespec;rem: ptimespec) : cint Visibility: default Description: FpNanoSleep suspends the process till a time period as specied in req has passed. Then the function returns. If the call was interrupted (e.g. by some signal) then the function may return earlier, and rem will contain the remaining time till the end of the intended period. In this case the return value will be -1, and ErrNo will be set to EINTR If the function returns without error, the return value is zero. Errors: If an error occurred or the call was interrupted, -1 is returned. Extended error information can be retrieved using fpGetErrno (156). See also: FpPause (171), FpAlarm (143) Listing: ./bunixex/ex72.pp
program example72 ; { Program t o demonstrate t h e NanoSleep f u n c t i o n . } uses BaseUnix ; Var Req ,Rem : TimeSpec ; Res : L o n g i n t ; begin With Req do begin tv_sec :=10; tv_nsec : = 1 0 0 ; end ; Write ( NanoSleep r e t u r n e d : ) ; Flush ( Output ) ; Res : = ( fpNanoSleep (@Req,@rem ) ) ; Writeln ( res ) ; I f ( res < >0) then With rem do begin W r i t e l n ( Remaining seconds : , tv_sec ) ; W r i t e l n ( Remaining nanoseconds : , tv_nsec ) ; end ; end .
167
1.4.47
fpNice
Synopsis: Set process priority Declaration: function fpNice(N: cint) : cint Visibility: default Description: Nice adds -N to the priority of the running process. The lower the priority numerically, the less the process is favored. Only the superuser can specify a negative N, i.e. increase the rate at which the process is run. If the function is succesful, zero is returned. On error, a nonzero value is returned. Errors: Extended error information is returned by the FpGetErrno (156) function. sys_epermA non-superuser tried to specify a negative N, i.e. do a priority increase. See also: FpGetPriority (159), FpSetPriority (178) Listing: ./unixex/ex15.pp
Program Example15 ; { Program t o demonstrate t h e Nice and Get / S e t P r i o r i t y f u n c t i o n s . } Uses BaseUnix , Unix ; begin writeln ( Setting p r i o r i t y to 5 ) ; f p s e t p r i o r i t y ( prio_process , fpgetpid , 5 ) ; w r i t e l n ( New p r i o r i t y = , f p g e t p r i o r i t y ( p r i o _ p r o c e s s , f p g e t p i d ) ) ; w r i t e l n ( Doing n i c e 1 0 ) ; fpnice ( 1 0 ) ; w r i t e l n ( New P r i o r i t y = , f p g e t p r i o r i t y ( p r i o _ p r o c e s s , f p g e t p i d ) ) ; end .
1.4.48
FpOpen
FpOpen(path: FpOpen(path: FpOpen(path: FpOpen(path: FpOpen(path: FpOpen(path: PChar;flags: cint;Mode: TMode) : cint PChar;flags: cint) : cint AnsiString;flags: cint) : cint AnsiString;flags: cint;Mode: TMode) : cint string;flags: cint) : cint string;flags: cint;Mode: TMode) : cint
Synopsis: Open le and return le descriptor Declaration: function function function function function function Visibility: default Description: FpOpen opens a le in Path with ags flags and mode Mode One of the following: O_RdOnlyFile is opened Read-only O_WrOnlyFile is opened Write-only O_RdWrFile is opened Read-Write The ags may beOR-ed with one of the following constants:
168
O_CreatFile is created if it doesnt exist. O_ExclIf the le is opened with O_Creat and it already exists, the call wil fail. O_NoCttyIf the le is a terminal device, it will NOT become the process controlling terminal. O_TruncIf the le exists, it will be truncated. O_Appendthe le is opened in append mode. Before each write, the le pointer is positioned at the end of the le. O_NonBlockThe le is opened in non-blocking mode. No operation on the le descriptor will cause the calling process to wait till. O_NDelayIdem as O_NonBlock O_SyncThe le is opened for synchronous IO. Any write operation on the le will not return untill the data is physically written to disk. O_NoFollowif the le is a symbolic link, the open fails. (linux 2.1.126 and higher only) O_Directoryif the le is not a directory, the open fails. (linux 2.1.126 and higher only) Path can be of type PChar or String. The optional mode argument species the permissions to set when opening the le. This is modied by the umask setting. The real permissions are Mode and not umask. The return value of the function is the ledescriptor, or a negative value if there was an error. Errors: Extended error information can be retrieved using fpGetErrno (156). See also: FpClose (146), FpRead (173), FpWrite (194), FpFTruncate (154), FpLSeek (162) Listing: ./bunixex/ex19.pp
Program Example19 ; { Program t o demonstrate t h e fdOpen , f d w r i t e and fdCLose f u n c t i o n s . } Uses BaseUnix ; Const L i n e : S t r i n g [ 8 0 ] = T h i s i s easy w r i t i n g ! ; Var FD : C i n t ; begin FD: = fpOpen ( Test . d a t , O_WrOnly or O_Creat ) ; i f FD>0 then begin i f length ( L i n e )<> f p w r i t e ( FD, L i n e [ 1 ] , Length ( L i n e ) ) then W r i t e l n ( E r r o r when w r i t i n g t o f i l e ! ) ; f p C l o s e (FD ) ; end ; end .
1.4.49
FpOpendir
Synopsis: Open a directory for reading Declaration: function FpOpendir(dirname: PChar) : pDir function FpOpendir(dirname: AnsiString) : pDir function FpOpendir(dirname: shortString) : pDir
169
Visibility: default Description: FpOpenDir opens the directory DirName, and returns a pdir pointer to a Dir (127) record, which can be used to read the directory structure. If the directory cannot be opened, nil is returned. Errors: Extended error information can be retrieved using fpGetErrno (156). See also: FpCloseDir (146), FpReadDir (174) Listing: ./bunixex/ex35.pp
Program Example35 ; { Program t o demonstrate t h e OpenDir , ReadDir , SeekDir and T e l l D i r f u n c t i o n s . } Uses BaseUnix ; Var TheDir : PDir ; ADirent : PDirent ; Entry : Longint ; begin TheDir : = fpOpenDir ( . / . ) ; Repeat // E n t r y : = f p T e l l D i r ( TheDir ) ; A D i r e n t : = fpReadDir ( TheDir ^ ) ; I f ADirent <> N i l then With A D i r e n t ^ do begin W r i t e l n ( E n t r y No : , E n t r y ) ; W r i t e l n ( Inode : , d_fileno ) ; // Writeln ( Offset : , d_off ) ; W r i t e l n ( Reclen : , d_reclen ) ; W r i t e l n ( Name : , pchar (@d_name [ 0 ] ) ) ; end ; Until ADirent=Nil ; Repeat Write ( E n t r y No . you would l i k e t o see again ( 1 t o s t o p ) : ) ; ReadLn ( E n t r y ) ; I f Entry <>1 then begin // f p S e e k D i r ( TheDir , E n t r y ) ; / / n o t implemented f o r v a r i o u s p l a t f o r m s A D i r e n t : = fpReadDir ( TheDir ^ ) ; I f ADirent <> N i l then With A D i r e n t ^ do begin W r i t e l n ( E n t r y No : , E n t r y ) ; W r i t e l n ( Inode : , d_fileno ) ; // Writeln ( Offset : , off ); W r i t e l n ( Reclen : , d_reclen ) ; W r i t e l n ( Name : , pchar (@d_name [ 0 ] ) ) ; end ; end ; U n t i l E n t r y =1; f p C l o s e D i r ( TheDir ^ ) ; end .
170
1.4.50
FpPause
Synopsis: Wait for a signal to arrive Declaration: function FpPause : cint Visibility: default Description: FpPause puts the process to sleep and waits until the application receives a signal. If a signal handler is installed for the received sigal, the handler will be called and after that pause will return control to the process. For an example, see fpAlarm (143).
1.4.51
FpPipe
Synopsis: Create a set of pipe le handlers Declaration: function FpPipe(var fildes: TFilDes) : cint Visibility: default Description: FpPipe creates a pipe, i.e. two le objects, one for input, one for output. The lehandles are returned in the array fildes. The input handle is in the 0-th element of the array, the output handle is in the 1-st element. The function returns zero if everything went succesfully, a nonzero return value indicates an error. Errors: In case the function fails, the following return values are possible: sys_emleToo many le descriptors for this process. sys_enleThe system le table is full. See also: #rtl.unix.POpen (1698), fpMkFifo (165) Listing: ./bunixex/ex36.pp
Program Example36 ; { Program t o demonstrate t h e AssignPipe f u n c t i o n . } Uses BaseUnix , Unix ; Var p i p i , p i p o : Text ; s : String ; begin W r i t e l n ( A s s i g n i n g Pipes . ) ; I f a s s i g n p i p e ( p i p i , p i p o ) < >0 then Writeln ( Error assigning pipes ! , fpgeterr no ) ; W r i t e l n ( W r i t i n g t o pipe , and f l u s h i n g . ) ; W r i t e l n ( pipo , T h i s i s a t e x t s t r i n g ) ; c l o s e ( p i p o ) ; W r i t e l n ( Reading from p i p e . ) ; While not eof ( p i p i ) do begin Readln ( p i p i , s ) ; W r i t e l n ( Read from p i p e : , s ) ; end ; close ( p i p i ) ; w r i t e l n ( Closed p i p e s . ) ;
171
writeln end .
1.4.52
FpPoll
Synopsis: Poll a le descriptor for events. Declaration: function FpPoll(fds: ppollfd;nfds: cuint;timeout: clong) : cint Visibility: default Description: fpPoll waits for events on le descriptors. fds points to an array of tpollfd records, each of these records describes a le descriptor on which to wait for events. The number of le descriptors is given by nfds. >timeout species the maximum time (in milliseconds) to wait for events. On timeout, the result value is 0. If an event occurred on some descriptors, then the return value is the number of descriptors on which an event (or error) occured. The revents eld of the tpollfd records will contain the events for the le descriptor it described. See also: tpollfd (138)
1.4.53
FppRead
Synopsis: Positional read: read from le descriptor at a certain position. Declaration: function FpPRead(fd: cint;buf: PChar;nbytes: TSize;offset: TOff) : TsSize function FppRead(fd: cint;var buf;nbytes: TSize;offset: TOff) : TsSize Visibility: default Description: FpPRead reads nbytes bytes from le descriptor fd into buffer buf starting at offset offset. Offset is measured from the start of the le. This function can only be used on les, not on pipes or sockets (i.e. any seekable le descriptor). The function returns the number of bytes actually read, or -1 on error. Errors: On error, -1 is returned. See also: FpReadV (175), FpPWrite (172)
1.4.54
FppWrite
Synopsis: Positional write: write to le descriptor at a certain position. Declaration: function FpPWrite(fd: cint;buf: PChar;nbytes: TSize;offset: TOff) : TsSize function FppWrite(fd: cint;const buf;nbytes: TSize;offset: TOff) : TsSize Visibility: default Description: FpPWrite writes nbytes bytes from buffer buf into le descriptor fd starting at offset offset. Offset is measured from the start of the le. This function can only be used on les, not on pipes or sockets (i.e. any seekable le descriptor). The function returns the number of bytes actually written, or -1 on error. Errors: On error, -1 is returned. See also: FpPRead (172), FpWriteV (194) 172
1.4.55
FpRead
Synopsis: Read data from le descriptor Declaration: function FpRead(fd: cint;buf: PChar;nbytes: TSize) : TsSize function FpRead(fd: cint;var buf;nbytes: TSize) : TsSize Visibility: default Description: FpdRead reads at most nbytes bytes from the le descriptor fd, and stores them in buf. The function returns the number of bytes actually read, or -1 if an error occurred. No checking on the length of buf is done. Errors: Extended error information can be retrieved using fpGetErrno (156). See also: FpOpen (168), FpClose (146), FpWrite (194), FpFTruncate (154), FpLSeek (162) Listing: ./bunixex/ex20.pp
Program Example20 ; { Program t o demonstrate t h e fdRead and f d T r u n c a t e f u n c t i o n s . } Uses BaseUnix ; Const Data : s t r i n g [ 1 0 ] = 1234567890 ; Var FD : c i n t ; l : longint ; begin FD: = fpOpen ( t e s t . d a t , o_wronly or o_creat , & 6 6 6 ) ; i f fd >0 then begin { F i l l f i l e w i t h data } f o r l : = 1 to 1 0 do i f f p W r i t e ( FD, Data [ 1 ] , 1 0 ) < > 1 0 then begin w r i t e l n ( E r r o r when w r i t i n g ! ) ; halt ( 1 ) ; end ; f p C l o s e (FD ) ; FD: = fpOpen ( t e s t . d a t , o _ r d o n l y ) ; { Read data again } I f FD>0 then begin For l : = 1 to 5 do i f fpRead ( FD, Data [ 1 ] , 1 0 ) < > 1 0 then begin W r i t e l n ( E r r o r when Reading ! ) ; Halt ( 2 ) ; end ; f p C l o s e (FD ) ; { Truncating f i l e at 6 0 bytes } { For t r u n c a t i n g , f i l e must be open o r w r i t e } FD: = fpOpen ( t e s t . d a t , o_wronly , & 6 6 6 ) ; i f FD>0 then begin i f f p f T r u n c a t e (FD,60) < >0 then
173
1.4.56
FpReaddir
Synopsis: Read entry from directory Declaration: function FpReaddir(var dirp: Dir) : pDirent Visibility: default Description: FpReadDir reads the next entry in the directory pointed to by dirp. It returns a pdirent pointer to a dirent (128) record describing the entry. If the next entry cant be read, Nil is returned. For an example, see FpOpenDir (169). Errors: Extended error information can be retrieved using fpGetErrno (156). See also: FpCloseDir (146), FpOpenDir (169)
1.4.57
fpReadLink
Synopsis: Read destination of symbolic link Declaration: function fpReadLink(name: PChar;linkname: PChar;maxlen: size_t) : cint function fpReadLink(Name: ansistring) : ansistring Visibility: default Description: FpReadLink returns the le the symbolic link name is pointing to. The rst form of this function accepts a buffer linkname of length maxlen where the lename will be stored. It returns the actual number of characters stored in the buffer. The second form of the function returns simply the name of the le. Errors: On error, the rst form of the function returns -1; the second one returns an empty string. Extended error information is returned by the FpGetErrno (156) function. SYS_ENOTDIRA part of the path in Name is not a directory. SYS_EINVALmaxlen is not positive, or the le is not a symbolic link. SYS_ENAMETOOLONGA pathname, or a component of a pathname, was too long. SYS_ENOENTthe link name does not exist. SYS_EACCESNo permission to search a directory in the path SYS_ELOOPToo many symbolic links were encountered in translating the pathname. SYS_EIOAn I/O error occurred while reading from the le system. SYS_EFAULTThe buffer is not part of the the processs memory space. SYS_ENOMEMNot enough kernel memory was available. See also: FpSymLink (186) Listing: ./unixex/ex62.pp 174
Program Example62 ; { Program t o demonstrate t h e ReadLink f u n c t i o n . } Uses BaseUnix , Unix ; Var F : Text ; S : String ; begin Assign ( F , t e s t . t x t ) ; Rewrite ( F ) ; Writeln ( F , This i s w r i t t e n to t e s t . t x t ) ; Close ( f ) ; { new . t x t and t e s t . t x t are now t h e same f i l e } i f fpSymLink ( t e s t . t x t , new . t x t ) < >0 then w r i t e l n ( E r r o r when s y m l i n k i n g ! ) ; S: = fpReadLink ( new . t x t ) ; I f S= then Writeln ( Error reading l i n k ! ) Else W r i t e l n ( L i n k p o i n t s t o : ,S ) ; { Now remove l i n k s } I f f p U n l i n k ( new . t x t ) < >0 then W r i t e l n ( E r r o r when u n l i n k i n g ! ) ; I f f p U n l i n k ( t e s t . t x t ) < >0 then W r i t e l n ( E r r o r when u n l i n k i n g ! ) ; end .
1.4.58
FpReadV
Synopsis: Vector read: Read into multiple buffers Declaration: function FpReadV(fd: cint;const iov: piovec;iovcnt: cint) : TsSize Visibility: default Description: FpReadV reads data from le descriptor fd and writes it into iovcnt buffers described by the tiovec (138) buffers pointed to by iov. It works like fpRead (173) only on multiple buffers. Errors: On error, -1 is returned. See also: FpWriteV (194), FpPWrite (172), FpPRead (172)
1.4.59
FpRename
Synopsis: Rename le Declaration: function FpRename(old: PChar;newpath: PChar) : cint function FpRename(old: AnsiString;newpath: AnsiString) : cint Visibility: default Description: FpRename renames the le Old to NewPath. NewPath can be in a different directory than Old, but it cannot be on another partition (device). Any existing le on the new location will be replaced. If the operation fails, then the Old le will be preserved. 175
The function returns zero on succes, a nonzero value indicates failure. Note: There exist a portable alterative to fpRename: system.rename. Please use fpRename only if you are writing Unix specic code. System.rename will work on all operating systems. Errors: Extended error information can be retrieved using fpGetErrno (156). sys_eisdirNewPath exists and is a directory, but Old is not a directory. sys_exdevNewPath and Old are on different devices. sys_enotempty or sys_eexistNewPath is an existing, non-empty directory. sys_ebusyOld or NewPath is a directory and is in use by another process. sys_einvalNewPath is part of Old. sys_emlinkOldPath or NewPath already have tha maximum amount of links pointing to them. sys_enotdirpart of Old or NewPath is not directory. sys_efaultFor the pchar case: One of the pointers points to an invalid address. sys_eaccessaccess is denied when attempting to move the le. sys_enametoolongEither Old or NewPath is too long. sys_enoenta directory component in Old or NewPath didnt exist. sys_enomemnot enough kernel memory. sys_erofsNewPath or Old is on a read-only le system. sys_elooptoo many symbolic links were encountered trying to expand Old or NewPath sys_enospcthe lesystem has no room for the new directory entry. See also: FpUnLink (191)
1.4.60
FpRmdir
Synopsis: Remove a directory. Declaration: function FpRmdir(path: PChar) : cint function FpRmdir(path: AnsiString) : cint Visibility: default Description: FpRmdir removes the directory Path from the system. The directory must be empty for this call to succeed, and the user must have the necessary permissions in the parent directory. Only the last component of the directory is removed, i.e. higher-lying directories are not removed. On success, zero is returned. A nonzero return value indicates failure. Note: There exist a portable alterative to fpRmDir: system.rmdir. Please use fpRmDir only if you are writing Unix specic code. System.rmdir will work on all operating systems. Errors: Extended error information can be retrieved using fpGetErrno (156).
1.4.61
fpSelect
Synopsis: Wait for events on le descriptors Declaration: function FPSelect(N: cint;readfds: pFDSet;writefds: pFDSet; exceptfds: pFDSet;TimeOut: ptimeval) : cint function fpSelect(N: cint;readfds: pFDSet;writefds: pFDSet; exceptfds: pFDSet;TimeOut: cint) : cint function fpSelect(var T: Text;TimeOut: ptimeval) : cint function fpSelect(var T: Text;TimeOut: time_t) : cint 176
Visibility: default Description: FpSelect checks one of the le descriptors in the FDSets to see if the following I/O operation on the le descriptors will block. readfds, writefds and exceptfds are pointers to arrays of 256 bits. If you want a le descriptor to be checked, you set the corresponding element in the array to 1. The other elements in the array must be set to zero. Three arrays are passed : The entries in readfds are checked to see if the following read operation will block. The entries in writefds are checked to see if the following write operation will block, while entries in exceptfds are cheked to see if an exception occorred on them. You can use the functions fpFD_ZERO (153), fpFD_Clr (152), fpFD_Set (152) or fpFD_IsSet (152) to manipulate the individual elements of a set. The pointers can be Nil. N is the value of the largest le descriptor in one of the sets, + 1. In other words, it is the position of the last bit which is set in the array of bits. TimeOut can be used to set a time limit. If TimeOut can be two types : 1.TimeOut is of type ptimeval and contains a zero time, the call returns immediately. If TimeOut is Nil, the kernel will wait forever, or until a status changed. 2.TimeOut is of type cint. If it is -1, this has the same effect as a Timeout of type PTime which is Nil. Otherwise, TimeOut contains a time in milliseconds. When the TimeOut is reached, or one of the le descriptors has changed, the Select call returns. On return, it will have modied the entries in the array which have actually changed, and it returns the number of entries that have been changed. If the timout was reached, and no decsriptor changed, zero is returned; The arrays of indexes are undened after that. On error, -1 is returned. The variant with the text le will execute the FpSelect call on the le descriptor associated with the text le T Errors: On error, the function returns -1. Extended error information can be retrieved using fpGetErrno (156). SYS_EBADFAn invalid descriptor was specied in one of the sets. SYS_EINTRA non blocked signal was caught. SYS_EINVALN is negative or too big. SYS_ENOMEMSelect was unable to allocate memory for its internal tables. See also: fpFD_ZERO (153), fpFD_Clr (152), fpFD_Set (152), fpFD_IsSet (152) Listing: ./bunixex/ex33.pp
Program Example33 ; { Program t o demonstrate t h e S e l e c t f u n c t i o n . } Uses BaseUnix ; Var FDS : T f d s e t ; begin f p f d _ z e r o (FDS ) ; f p f d _ s e t ( 0 ,FDS ) ; W r i t e l n ( Press t h e <ENTER> t o c o n t i n u e t h e program . ) ;
177
{ Wait u n t i l F i l e d e s c r i p t o r 0 ( = I n p u t ) changes } f p S e l e c t ( 1 ,@FDS, n i l , n i l , n i l ) ; { Get r i d o f <ENTER> i n b u f f e r } readln ; W r i t e l n ( Press <ENTER> key i n l e s s than 2 seconds . . . ) ; Fpfd_zero (FDS ) ; FpFd_set ( 0 , FDS ) ; i f f p S e l e c t ( 1 ,@FDS, n i l , n i l , 2 0 0 0 ) > 0 then W r i t e l n ( Thank you ! ) { FD_ISSET ( 0 ,FDS ) would be t r u e here . } else W r i t e l n ( Too l a t e ! ) ; end .
1.4.62
fpseterrno
Synopsis: Set extended error information. Declaration: procedure fpseterrno(err: LongInt) Visibility: default Description: fpseterrno sets the extended information on the latest error. It is called by all functions that communicate with the kernel or C library. Unless a direct kernel call is performed, there should never be any need to call this function. See also: fpgeterrno (156)
1.4.63
FpSetgid
Synopsis: Set the current group ID Declaration: function FpSetgid(gid: TGid) : cint Visibility: default Description: fpSetUID sets the group ID of the current process. This call will only work if it is executed as root, or the program is setgid root. On success, zero is returned, on error -1 is returned. Errors: Extended error information can be retrieved with fpGetErrNo (156). See also: FpSetUid (180), FpGetGid (157), FpGetUid (160), FpGetEUid (156), FpGetEGid (155), FpGetPid (158), FpGetPPid (158)
1.4.64
fpSetPriority
Synopsis: Set process priority Declaration: function fpSetPriority(Which: cint;Who: cint;What: cint) : cint Visibility: default Description: fpSetPriority sets the priority with which a process is running. Which process(es) is determined by the Which and Who variables. Which can be one of the pre-dened constants:
178
Prio_ProcessWho is interpreted as process ID Prio_PGrpWho is interpreted as process group ID Prio_UserWho is interpreted as user ID Prio is a value in the range -20 to 20. For an example, see FpNice (168). The function returns zero on success, -1 on failure Errors: Extended error information is returned by the FpGetErrno (156) function. sys_esrchNo process found using which and who. sys_einvalWhich was not one of Prio_Process, Prio_Grp or Prio_User. sys_epermA process was found, but neither its effective or real user ID match the effective user ID of the caller. sys_eaccesA non-superuser tried to a priority increase. See also: FpGetPriority (159), FpNice (168)
1.4.65
FpSetRLimit
Synopsis: Set process resource limits Declaration: function FpSetRLimit(Resource: cint;rlim: PRLimit) : cint Visibility: default Description: FpGetRLimit sets the resource limits for the current process: resource determines the resource of which the kernel should set the limits (one of the many RLIMIT_* constants). rlim should point to a TRLimit (139) record which contains the new limits for the resource indicated in resource. The function returns zero if the resource limits were successfully set. Errors: On error, -1 is returned and fpgeterrno (156) can be used to retrieve the error code. See also: FpGetRLimit (159)
1.4.66
FpSetsid
Synopsis: Create a new session. Declaration: function FpSetsid : TPid Visibility: default Description: FpSetsid creates a new session (process group). It returns the new process group id (as returned by FpGetpgrp (157). This call will fail if the current process is already the process group leader. Errors: On error, -1 is returned. Extended error information can be retrieved with fpGetErrNo (156)
179
1.4.67
fpsettimeofday
Synopsis: Set kernel time Declaration: function fpsettimeofday(tp: ptimeval;tzp: ptimezone) : cint Visibility: default Description: FpSetTimeOfDay sets the kernel time to the number of seconds since 00:00, January 1 1970, GMT specied in the tp record. This time NOT corrected any way, not taking into account timezones, daylight savings time and so on. It is simply a wrapper to the kernel system call. See also: #rtl.unix.FPGetTimeOfDay (1693)
1.4.68
FpSetuid
Synopsis: Set the current user ID Declaration: function FpSetuid(uid: TUid) : cint Visibility: default Description: fpSetUID sets the user ID of the current process. This call will only work if it is executed as root, or the program is setuid root. On success, zero is returned, on error -1 is returned. Errors: Extended error information can be retrieved with fpGetErrNo (156). See also: FpGetGid (157), FpGetUid (160), FpGetEUid (156), FpGetEGid (155), FpGetPid (158), FpGetPPid (158), FpSetGid (178)
1.4.69
FPSigaction
Synopsis: Install signal handler Declaration: function FPSigaction(sig: cint;act: psigactionrec;oact: psigactionrec) : cint Visibility: default Description: FPSigaction changes the action to take upon receipt of a signal. Act and Oact are pointers to a SigActionRec (135) record. Sig species the signal, and can be any signal except SIGKILL or SIGSTOP. If Act is non-nil, then the new action for signal Sig is taken from it. If OAct is non-nil, the old action is stored there. Sa_Handler may be SIG_DFL for the default action or SIG_IGN to ignore the signal. Sa_Mask Species which signals should be ignord during the execution of the signal handler. Sa_Flags Speciees a series of ags which modify the behaviour of the signal handler. You can or none or more of the following : SA_NOCLDSTOPIf sig is SIGCHLD do not receive notication when child processes stop. SA_ONESHOT or SA_RESETHANDRestore the signal action to the default state once the signal handler has been called. SA_RESTARTFor compatibility with BSD signals. SA_NOMASK or SA_NODEFERDo not prevent the signal from being received from within its own signal handler. 180
Errors: Extended error information can be retrieved using fpGetErrno (156). sys_einvalan invalid signal was specied, or it was SIGKILL or SIGSTOP. sys_efaultAct,OldAct point outside this process address space sys_eintrSystem call was interrupted. See also: FpSigProcMask (184), FpSigPending (183), FpSigSuspend (184), FpKill (161) Listing: ./bunixex/ex57.pp
Program example57 ; { Program t o demonstrate t h e S i g A c t i o n f u n c t i o n . } { do a k i l l USR1 p i d from a n o t h e r t e r m i n a l t o see what happens . r e p l a c e p i d w i t h t h e r e a l p i d o f t h i s program . You can g e t t h i s p i d by r u n n i n g ps . } uses BaseUnix ; Var oa , na : PSigActionRec ; Procedure DoSig ( s i g : c i n t ) ; cdecl ; begin writeln ( Receiving s i g n a l : , sig ) ; end ; begin new( na ) ; new( oa ) ; na ^ . sa_Handler : = S i g A c t i o n H a n d l e r ( @DoSig ) ; f i l l c h a r ( na ^ . Sa_Mask , s i z e o f ( na ^ . sa_mask ) , # 0 ) ; na ^ . Sa_Flags : = 0 ; { $ i f d e f Linux } / / Linux s p e c i f i c na ^ . Sa_Restorer : = N i l ; { $endif } i f f p S i g A c t i o n ( SigUsr1 , na , oa ) < >0 then begin writeln ( Error : , fpgeterrno , . ) ; halt ( 1 ) ; end ; W r i t e l n ( Send USR1 s i g n a l o r press <ENTER> t o e x i t ) ; readln ; end .
1.4.70
FpSigAddSet
Synopsis: Set a signal in a signal set. Declaration: function FpSigAddSet(var nset: tsigset;signo: cint) : cint Visibility: default
181
Description: FpSigAddSet adds signal Signo to the signal set nset. The function returns 0 on success. Errors: If an invalid signal number is given, -1 is returned. See also: FpSigEmptySet (182), FpSigFillSet (182), FpSigDelSet (182), FpSigIsMember (182)
1.4.71
FpSigDelSet
Synopsis: Remove a signal from a signal set. Declaration: function FpSigDelSet(var nset: tsigset;signo: cint) : cint Visibility: default Description: FpSigDelSet removes signal Signo to the signal set nset. The function returns 0 on success. Errors: If an invalid signal number is given, -1 is returned. See also: FpSigEmptySet (182), FpSigFillSet (182), FpSigAddSet (181), FpSigIsMember (182)
1.4.72
FpsigEmptySet
Synopsis: Clear all signals from signal set. Declaration: function FpsigEmptySet(var nset: tsigset) : cint Visibility: default Description: FpSigEmptySet clears all signals from the signal set nset. Errors: None. This function always returns zero. See also: FpSigFillSet (182), FpSigAddSet (181), FpSigDelSet (182), FpSigIsMember (182)
1.4.73
FpSigFillSet
Synopsis: Set all signals in signal set. Declaration: function FpSigFillSet(var nset: tsigset) : cint Visibility: default Description: FpSigFillSet sets all signals in the signal set nset. Errors: None. This function always returns zero. See also: FpSigEmptySet (182), FpSigAddSet (181), FpSigDelSet (182), FpSigIsMember (182)
1.4.74
FpSigIsMember
Synopsis: Check whether a signal appears in a signal set. Declaration: function FpSigIsMember(const nset: tsigset;signo: cint) : cint Visibility: default Description: FpSigIsMember checks whether SigNo appears in the set nset. If it is a member, then 1 is returned. If not, zero is returned. Errors: If an invalid signal number is given, -1 is returned. See also: FpSigEmptySet (182), FpSigFillSet (182), FpSigAddSet (181), FpSigDelSet (182) 182
1.4.75
FpSignal
Synopsis: Install signal handler (deprecated) Declaration: function FpSignal(signum: LongInt;Handler: signalhandler) : signalhandler Visibility: default Description: FPSignal installs a new signal handler (specied by Handler) for signal SigNum. This call has a subset of the functionality provided by the FpSigAction (180) call. The return value for FpSignal is the old signal handler, or nil on error. Errors: Extended error information can be retrieved using fpGetErrno (156). SIG_ERRAn error occurred. See also: FpSigAction (180), FpKill (161) Listing: ./bunixex/ex58.pp
Program example58 ; { Program t o demonstrate t h e S i g n a l f u n c t i o n . } { do a k i l l USR1 p i d from a n o t h e r t e r m i n a l t o see what happens . r e p l a c e p i d w i t h t h e r e a l p i d o f t h i s program . You can g e t t h i s p i d by r u n n i n g ps . } uses BaseUnix ; Procedure DoSig ( s i g : c i n t ) ; cdecl ; begin writeln ( Receiving s i g n a l : , sig ) ; end ; begin i f f p S i g n a l ( SigUsr1 , S i g n a l H a n d l e r ( @DoSig ) ) = s i g n a l h a n d l e r ( SIG_ERR ) then begin w r i t e l n ( E r r o r : , fpGetErrno , . ) ; halt ( 1 ) ; end ; W r i t e l n ( Send USR1 s i g n a l o r press <ENTER> t o e x i t ) ; readln ; end .
1.4.76
FpSigPending
Synopsis: Return set of currently pending signals Declaration: function FpSigPending(var nset: tsigset) : cint Visibility: default Description: fpSigpending allows the examination of pending signals (which have been raised while blocked.) The signal mask of pending signals is returned. 183
Errors: None See also: fpSigAction (180), fpSigProcMask (184), fpSigSuspend (184), fpSignal (183), fpKill (161)
1.4.77
FpSigProcMask
Synopsis: Set list of blocked signals Declaration: function FpSigProcMask(how: cint;nset: psigset;oset: psigset) : cint function FpSigProcMask(how: cint;const nset: tsigset;var oset: tsigset) : cint Visibility: default Description: Changes the list of currently blocked signals. The behaviour of the call depends on How : SIG_BLOCKThe set of blocked signals is the union of the current set and the nset argument. SIG_UNBLOCKThe signals in nset are removed from the set of currently blocked signals. SIG_SETMASKThe list of blocked signals is set so nset. If oset is non-nil, then the old set is stored in it. Errors: Errno is used to report errors. sys_efaultoset or nset point to an adress outside the range of the process. sys_eintrSystem call was interrupted. See also: fpSigAction (180), fpSigPending (183), fpSigSuspend (184), fpKill (161)
1.4.78
FpSigSuspend
Synopsis: Set signal mask and suspend process till signal is received Declaration: function FpSigSuspend(const sigmask: tsigset) : cint Visibility: default Description: fpSigSuspend temporarily replaces the signal mask for the process with the one given in SigMask, and then suspends the process until a signal is received. Errors: None See also: fpSigAction (180), fpSigProcMask (184), fpSigPending (183), fpSignal (183), fpKill (161)
1.4.79
FpSigTimedWait
Synopsis: Wait for signal, with timeout Declaration: function FpSigTimedWait(const sigset: tsigset;info: psiginfo; timeout: ptimespec) : cint Visibility: default Description: FpSigTimedWait will suspend the current thread and wait for one of the signals in sigset to be delivered. information on the delivered signal is placed in the location provided by info (or in info itself, if the Var variant of the call is used). If the signal is not delivered within the time limit set in timeout, then the call will return -1, and fpGetErrno will return EAGAIN. On success, the signal number is returned. 184
Errors: On error, -1 is returned, and extended error information can be obtained with fpGetErrno. See also: FpSigSuspend (184)
1.4.80
FpSleep
Synopsis: Suspend process for several seconds Declaration: function FpSleep(seconds: cuint) : cuint Visibility: default Description: FpSleep suspends the process till a time period as specied in seconds has passed, then the function returns. If the call was interrupted (e.g. by some signal) then the function may return earlier, and the return value is the remaining time till the end of the intended period. If the function returns without error, the return value is zero. See also: fpPause (171), fpAlarm (143), fpNanoSleep (167) Listing: ./bunixex/ex73.pp
program example73 ; { Program t o demonstrate t h e FpSleep f u n c t i o n . } uses BaseUnix ; Var Res : L o n g i n t ; begin Write ( Sleep r e t u r n e d : ) ; Flush ( Output ) ; Res : = ( f p S l e e p ( 1 0 ) ) ; Writeln ( res ) ; I f ( res < >0) then W r i t e l n ( Remaining seconds end .
: , res ) ;
1.4.81
FpStat
Synopsis: Retrieve le information about a le descriptor. Declaration: function FpStat(path: PChar;var buf: Stat) : cint function FpStat(path: AnsiString;var buf: Stat) : cint function FpStat(path: string;var buf: Stat) : cint Visibility: default Description: FpFStat gets information about the le specied in Path, and stores it in Info, which is of type stat (136). The function returns zero if the call was succesfull, a nonzero return value indicates failure. Errors: Extended error information can be retrieved using fpGetErrno (156). sys_enoentPath does not exist.
185
1.4.82
fpSymlink
Synopsis: Create a symbolic link Declaration: function fpSymlink(oldname: PChar;newname: PChar) : cint Visibility: default Description: SymLink makes NewName point to the le in OldName, which doesnt necessarily exist. The two les DO NOT have the same inode number. This is known as a soft link. The permissions of the link are irrelevant, as they are not used when following the link. Ownership of the le is only checked in case of removal or renaming of the link. The function returns zero if the call was succesful, a nonzero value if the call failed. 186
Errors: Extended error information is returned by the FpGetErrno (156) function. sys_epermThe lesystem containing oldpath and newpath does not support linking les. sys_eaccessWrite access for the directory containing Newpath is disallowed, or one of the directories in OldPath or NewPath has no search (=execute) permission. sys_enoentA directory entry in OldPath or NewPath does not exist or is a symbolic link pointing to a non-existent directory. sys_enotdirA directory entry in OldPath or NewPath is nor a directory. sys_enomemInsufcient kernel memory. sys_erofsThe les are on a read-only lesystem. sys_eexistNewPath already exists. sys_eloopOldPath or NewPath has a reference to a circular symbolic link, i.e. a symbolic link, whose expansion points to itself. sys_enospcThe device containing NewPath has no room for another entry. See also: FpLink (161), FpUnLink (191), FpReadLink (174) Listing: ./unixex/ex22.pp
Program Example22 ; { Program t o demonstrate t h e SymLink and UnLink f u n c t i o n s . } Uses baseunix , Unix ; Var F : Text ; S : String ; begin Assign ( F , t e s t . t x t ) ; Rewrite ( F ) ; Writeln ( F , This i s w r i t t e n to t e s t . t x t ) ; Close ( f ) ; { new . t x t and t e s t . t x t are now t h e same f i l e } i f fpSymLink ( t e s t . t x t , new . t x t ) < >0 then w r i t e l n ( E r r o r when s y m l i n k i n g ! ) ; { Removing t e s t . t x t s t i l l l e a v e s new . t x t P o i n t i n g now t o a none x i s t e n t f i l e ! } I f f p U n l i n k ( t e s t . t x t ) < >0 then W r i t e l n ( E r r o r when u n l i n k i n g ! ) ; Assign ( f , new . t x t ) ; { T h i s should f a i l , s i n c e t h e s y m b o l i c l i n k p o i n t s t o a none x i s t e n t f i l e ! } { $ i } Reset ( F ) ; { $i+} I f IOResult =0 then W r i t e l n ( T h i s shouldn t happen ) ; { Now remove new . t x t a l s o } I f f p U n l i n k ( new . t x t ) < >0 then W r i t e l n ( E r r o r when u n l i n k i n g ! ) ; end .
187
1.4.83
fpS_ISBLK
Synopsis: Is le a block device Declaration: function fpS_ISBLK(m: TMode) : Boolean Visibility: default Description: FpS_ISBLK checks the le mode m to see whether the le is a block device le. If so it returns True. See also: FpFStat (153), FpS_ISLNK (189), FpS_ISREG (189), FpS_ISDIR (188), FpS_ISCHR (188), FpS_ISFIFO (188), FpS_ISSOCK (190)
1.4.84
fpS_ISCHR
Synopsis: Is le a character device Declaration: function fpS_ISCHR(m: TMode) : Boolean Visibility: default Description: FpS_ISCHR checks the le mode m to see whether the le is a character device le. If so it returns True. See also: FpFStat (153), FpS_ISLNK (189), FpS_ISREG (189), FpS_ISDIR (188), FpS_ISBLK (187), FpS_ISFIFO (188), FpS_ISSOCK (190)
1.4.85
fpS_ISDIR
Synopsis: Is le a directory Declaration: function fpS_ISDIR(m: TMode) : Boolean Visibility: default Description: fpS_ISDIR checks the le mode m to see whether the le is a directory. If so, it returns True See also: FpFStat (153), FpS_ISLNK (189), FpS_ISREG (189), FpS_ISCHR (188), FpS_ISBLK (187), fpS_ISFIFO (188), FpS_ISSOCK (190)
1.4.86
fpS_ISFIFO
Synopsis: Is le a FIFO Declaration: function fpS_ISFIFO(m: TMode) : Boolean Visibility: default Description: FpS_ISFIFO checks the le mode m to see whether the le is a fo (a named pipe). If so it returns True. See also: FpFStat (153), FpS_ISLNK (189), FpS_ISREG (189), FpS_ISCHR (188), FpS_ISBLK (187), FpS_ISDIR (188), FpS_ISSOCK (190)
188
1.4.87
fpS_ISLNK
Synopsis: Is le a symbolic link Declaration: function fpS_ISLNK(m: TMode) : Boolean Visibility: default Description: FpS_ISLNK checks the le mode m to see whether the le is a symbolic link. If so it returns True See also: FpFStat (153), FpS_ISFIFO (188), FpS_ISREG (189), FpS_ISCHR (188), FpS_ISBLK (187), FpS_ISDIR (188), FpS_ISSOCK (190) Listing: ./bunixex/ex53.pp
Program Example53 ; { Program t o demonstrate t h e S_ISLNK f u n c t i o n . } Uses BaseUnix , Unix ; Var I n f o : S t a t ; begin i f f p L S t a t ( paramstr ( 1 ) , @info ) = 0 then begin i f fpS_ISLNK ( i n f o . st_mode ) then Writeln ( F i l e i s a l i n k ) ; i f fpS_ISREG ( i n f o . st_mode ) then Writeln ( F i l e i s a r e g u l a r f i l e ) ; i f fpS_ISDIR ( i n f o . st_mode ) then Writeln ( F i l e i s a d i r e c t o r y ) ; i f fpS_ISCHR ( i n f o . st_mode ) then Writeln ( F i l e i s a character device f i l e ) ; i f fpS_ISBLK ( i n f o . st_mode ) then Writeln ( F i l e i s a block device f i l e ) ; i f fpS_ISFIFO ( i n f o . st_mode ) then W r i t e l n ( F i l e i s a named p i p e ( FIFO ) ) ; i f fpS_ISSOCK ( i n f o . st_mode ) then Writeln ( F i l e i s a socket ) ; end ; end .
1.4.88
fpS_ISREG
Synopsis: Is le a regular le Declaration: function fpS_ISREG(m: TMode) : Boolean Visibility: default Description: FpS_ISREG checks the le mode m to see whether the le is a regular le. If so it returns True See also: FpFStat (153), FpS_ISFIFO (188), FpS_ISLNK (189), FpS_ISCHR (188), FpS_ISBLK (187), FpS_ISDIR (188), FPS_ISSOCK (190)
189
1.4.89
fpS_ISSOCK
Synopsis: Is le a unix socket Declaration: function fpS_ISSOCK(m: TMode) : Boolean Visibility: default Description: FpS_ISSOCK checks the le mode m to see whether the le is a socket. If so it returns True. See also: FpFStat (153), FpS_ISFIFO (188), FpS_ISLNK (189), FpS_ISCHR (188), FpS_ISBLK (187), FpS_ISDIR (188), FpS_ISREG (189)
1.4.90
fptime
Synopsis: Return the current unix time Declaration: function FpTime(var tloc: TTime) : TTime function fptime : time_t Visibility: default Description: FpTime returns the number of seconds since 00:00:00 GMT, january 1, 1970. it is adjusted to the local time zone, but not to DST. The result is also stored in tloc, if it is specied. Errors: On error, -1 is returned. Extended error information can be retrieved using fpGetErrno (156). Listing: ./bunixex/ex1.pp
Program Example1 ; { Program t o demonstrate t h e f p t i m e f u n c t i o n . } Uses baseunix ; begin Write ( Secs p a s t t h e s t a r t o f t h e Epoch ( 0 0 : 0 0 1 / 1 / 1 9 8 0 ) : ) ; Writeln ( fptime ) ; end .
1.4.91
FpTimes
Synopsis: Return execution times for the current process Declaration: function FpTimes(var buffer: tms) : TClock Visibility: default Description: fpTimes stores the execution time of the current process and child processes in buffer. The return value (on linux) is the number of clock ticks since boot time. On error, -1 is returned, and extended error information can be retrieved with fpGetErrno (156). See also: fpUTime (192)
190
1.4.92
FpUmask
Synopsis: Set le creation mask. Declaration: function FpUmask(cmask: TMode) : TMode Visibility: default Description: fpUmask changes the le creation mask for the current user to cmask. The current mask is returned. See also: fpChmod (144) Listing: ./bunixex/ex27.pp
Program Example27 ; { Program t o demonstrate t h e Umask f u n c t i o n . } Uses BaseUnix ; begin W r i t e l n ( Old Umask was : , fpUmask ( & 1 1 1 ) ) ; WRiteln ( New Umask i s : ,&111); end .
1.4.93
FpUname
Synopsis: Return system name. Declaration: function FpUname(var name: UtsName) : cint Visibility: default Description: Uname gets the name and conguration of the current linux kernel, and returns it in the name record. On success, 0 is returned, on error, -1 is returned. Errors: Extended error information can be retrieved using fpGetErrno (156). See also: FpUTime (192)
1.4.94
FpUnlink
Synopsis: Unlink (i.e. remove) a le. Declaration: function FpUnlink(path: PChar) : cint function FpUnlink(path: AnsiString) : cint Visibility: default Description: FpUnlink decreases the link count on le Path. Path can be of type AnsiString or PChar. If the link count is zero, the le is removed from the disk. The function returns zero if the call was succesfull, a nonzero value indicates failure. Note: There exist a portable alterative to erase les: system.erase. Please use fpUnlink only if you are writing Unix specic code. System.erase will work on all operating systems. For an example, see FpLink (161). 191
Errors: Extended error information can be retrieved using fpGetErrno (156). sys_eaccessYou have no write access right in the directory containing Path, or you have no search permission in one of the directory components of Path. sys_epermThe directory containing pathname has the sticky-bit set and the processs effective uid is neither the uid of the le to be deleted nor that of the directory containing it. sys_enoentA component of the path doesnt exist. sys_enotdirA directory component of the path is not a directory. sys_eisdirPath refers to a directory. sys_enomemInsufcient kernel memory. sys_erofsPath is on a read-only lesystem. See also: FpLink (161), FpSymLink (186)
1.4.95
FpUtime
Synopsis: Set access and modication times of a le (touch). Declaration: function FpUtime(path: PChar;times: pUtimBuf) : cint function FpUtime(path: AnsiString;times: pUtimBuf) : cint Visibility: default Description: FpUtime sets the access and modication times of the le specied in Path. the times record contains 2 elds, actime, and modtime, both of type time_t (commonly a longint). They should be lled with an epoch-like time, specifying, respectively, the last access time, and the last modication time. For some lesystem (most notably, FAT), these times are the same. The function returns zero on success, a nonzero return value indicates failure. Errors: Extended error information can be retrieved using fpGetErrno (156). sys_eaccessOne of the directories in Path has no search (=execute) permission. sys_enoentA directory entry in Path does not exist or is a symbolic link pointing to a non-existent directory. Other errors may occur, but arent documented. See also: FpTime (190), FpChown (145), FpAccess (142) Listing: ./bunixex/ex25.pp
Program Example25 ; { Program t o demonstrate t h e UTime f u n c t i o n . } Uses Dos , BaseUnix , Unix , U n i x U t i l ; Var u t i m : u t i m b u f ; dow , msec , year , month , day , hour , minute , second : Word ; begin { Set access and m o d i f i c a t i o n t i m e o f e x e c u t a b l e source } GetTime ( hour , minute , second , msec ) ; GetDate ( year , month , day , dow ) ; u t i m . actime : = LocalToEpoch ( year , month , day , hour , minute , second ) ;
192
u t i m . modtime : = u t i m . actime ; i f Fputime ( ex25 . pp , @utim) < >0 then w r i t e l n ( C a l l t o UTime f a i l e d ! ) else begin Write ( Set access and m o d i f i c a t i o n t i m e s t o : Write ( Hour : 2 , : , minute : 2 , : , second , , ) ; W r i t e l n ( Day : 2 , / , month : 2 , / , year : 4 ) ; end ; end .
);
1.4.96
FpWait
Synopsis: Wait for a child to exit. Declaration: function FpWait(var stat_loc: cint) : TPid Visibility: default Description: fpWait suspends the current process and waits for any child to exit or stop due to a signal. It reports the exit status of the exited child in stat_loc. The return value of the function is the process ID of the child that exited, or -1 on error. Errors: Extended error information can be retrieved using fpgetErrno (156). See also: fpFork (153), fpExecve (150), fpWaitPid (193)
1.4.97
FpWaitPid
Synopsis: Wait for a process to terminate Declaration: function FpWaitpid(pid: TPid;stat_loc: pcint;options: cint) : TPid function FpWaitPid(pid: TPid;var Status: cint;Options: cint) : TPid Visibility: default Description: fpWaitPid waits for a child process with process ID Pid to exit. The value of Pid can be one of the following: Pid < -1Causes fpWaitPid to wait for any child process whose process group ID equals the absolute value of pid. Pid = -1Causes fpWaitPid to wait for any child process. Pid = 0Causes fpWaitPid to wait for any child process whose process group ID equals the one of the calling process. Pid > 0Causes fpWaitPid to wait for the child whose process ID equals the value of Pid. The Options parameter can be used to specify further how fpWaitPid behaves: WNOHANGCauses fpWaitpid to return immediately if no child hasexited. WUNTRACEDCauses fpWaitPid to return also for children which are stopped, but whose status has not yet been reported. __WCLONECauses fpWaitPid also to wait for threads created by the #rtl.linux.Clone (737) call.
193
The exit status of the process that caused fpWaitPID is reported in stat_loc or Status. Upon return, it returns the process id of the process that exited, 0 if no process exited, or -1 in case of failure. For an example, see fpFork (153). Errors: Extended error information can be retrieved using fpgetErrno (156). See also: fpFork (153), fpExecve (150), fpWait (193)
1.4.98
FpWrite
Synopsis: Write data to le descriptor Declaration: function FpWrite(fd: cint;buf: PChar;nbytes: TSize) : TsSize function FpWrite(fd: cint;const buf;nbytes: TSize) : TsSize Visibility: default Description: FpWrite writes at most nbytes bytes from buf to le descriptor fd. The function returns the number of bytes actually written, or -1 if an error occurred. Errors: Extended error information can be retrieved using fpGetErrno (156). See also: FpOpen (168), FpClose (146), FpRead (173), FpFTruncate (154), FpLSeek (162)
1.4.99
FpWriteV
Synopsis: Vector write: Write from multiple buffers to a le descriptor Declaration: function FpWriteV(fd: cint;const iov: piovec;iovcnt: cint) : TsSize Visibility: default Description: FpWriteV writes data to le descriptor fd. The data is taken from iovcnt buffers described by the tiovec (138) buffers pointed to by iov. It works like fpWrite (194) only from multiple buffers. Errors: On error, -1 is returned. See also: FpReadV (175), FpPWrite (172), FpPRead (172)
1.4.100
FreeShellArgV
Synopsis: Free the result of a CreateShellArgV (142) function Declaration: procedure FreeShellArgV(p: PPChar) Visibility: default Description: FreeShellArgV frees the memory pointed to by P, which was allocated by a call to CreateShellArgV (142). Errors: None. See also: CreateShellArgV (142)
194
1.4.101
wexitStatus
Synopsis: Extract the exit status from the fpWaitPID (193) result. Declaration: function wexitStatus(Status: cint) : cint Visibility: default Description: WEXITSTATUS can be used to extract the exit status from Status, the result of the FpWaitPID (193) call. See also: FpWaitPID (193), WTERMSIG (196), WSTOPSIG (195), WIFEXITED (195), WIFSIGNALED (195)
1.4.102
wifexited
Synopsis: Check whether the process exited normally Declaration: function wifexited(Status: cint) : Boolean Visibility: default Description: WIFEXITED checks Status and returns True if the status indicates that the process terminated normally, i.e. was not stopped by a signal. See also: FpWaitPID (193), WTERMSIG (196), WSTOPSIG (195), WIFSIGNALED (195), WEXITSTATUS (195)
1.4.103
wifsignaled
Synopsis: Check whether the process was exited by a signal. Declaration: function wifsignaled(Status: cint) : Boolean Visibility: default Description: WIFSIGNALED returns True if Status indicates that the process exited because it received a signal. See also: FpWaitPID (193), WTERMSIG (196), WSTOPSIG (195), WIFEXITED (195), WEXITSTATUS (195)
1.4.104
wstopsig
Synopsis: Return the exit code from the process. Declaration: function wstopsig(Status: cint) : cint Visibility: default Description: WSTOPSIG is an alias for WEXITSTATUS (195). See also: FpWaitPID (193), WTERMSIG (196), WIFEXITED (195), WIFSIGNALED (195), WEXITSTATUS (195)
195
1.4.105
wtermsig
Synopsis: Return the signal that caused a process to exit. Declaration: function wtermsig(Status: cint) : cint Visibility: default Description: WTERMSIG extracts from Status the signal number which caused the process to exit. See also: FpWaitPID (193), WSTOPSIG (195), WIFEXITED (195), WIFSIGNALED (195), WEXITSTATUS (195)
196
Chapter 2
2.2
Overview
This documentation describes the FPC classes unit. The Classes unit contains basic classes for the Free Component Library (FCL): a TList (325) class for maintaining lists of pointers, TStringList (376) for lists of strings, TCollection (277) to manage collections of objects TStream (362) classes to support streaming. Furthermore it introduces methods for object persistence, and classes that understand an ownerowned relationship, with automatic memory management.
2.3
2.3.1
dupAccept = Types . dupAccept Duplicate values can be added to the list. dupError = Types . dupError If an attempt is made to add a duplicate value to the list, an EStringListError (230) exception is raised. dupIgnore = Types . dupIgnore Duplicate values will not be be added to the list, but no error will be triggered. FilerSignature : Array[1..4] of Char = TPF0 Constant that is found at the start of a binary stream containing a streamed component. fmCreate = $FF00 TFileStream.Create (1) creates a new le if needed. fmOpenRead = 0 TFileStream.Create (1) opens a le with read-only access. fmOpenReadWrite = 2 TFileStream.Create (1) opens a le with read-write access. fmOpenWrite = 1 TFileStream.Create (1) opens a le with write-only access. MASK = 31 Bitmask with all bits on. MaxBitFlags = $7FFFFFE0 Maximum number of bits in TBits collection. MaxBitRec = MaxBitFlags div ((cardinal) * 8) Maximum number of bit records in TBits. MaxListSize = Maxint div 16 This constant sets the maximum number of elements in a TList (325). scAlt = $8000 198
Indicates ALT key in a keyboard shortcut. scCtrl = $4000 indicates CTRL key in a keyboard shortcut. scNone = 0 Indicates no special key is presed in a keyboard shortcut. scShift = $2000 Indicates Shift key in a keyboard shortcut. soFromBeginning = 0 Seek (1) starts relative to the stream origin. soFromCurrent = 1 Seek (1) starts relative to the current position in the stream. soFromEnd = 2 Seek (1) starts relative to the stream end. toEOF = (0) Value returned by TParser.Token (1) when the end of the input stream was reached. toFloat = (4) Value returned by TParser.Token (1) when a oating point value was found in the input stream. toInteger = (3) Value returned by TParser.Token (1) when an integer was found in the input stream. toString = (2) Value returned by TParser.Token (1) when a string was found in the input stream. toSymbol = (1) Value returned by TParser.Token (1) when a symbol was found in the input stream. toWString = (5) Value returned by TParser.Token (1) when a widestring was found in the input stream.
199
2.3.2
Types
= -MaxLongint..MaxLongint This documentation describes the FPC classes unit. The Classes unit contains basic classes for the Free Component Library (FCL): a TList (325) class for maintaining lists of pointers, TStringList (376) for lists of strings, TCollection (277) to manage collections of objects TStream (362) classes to support streaming. Furthermore it introduces methods for object persistence, and classes that understand an ownerowned relationship, with automatic memory management. HMODULE = PtrInt FPC doesnt support modules yet, so this is a dummy type. HRSRC = TFPResourceHandle This type is provided for Delphi compatibilty, it is used for resource streams. PPointerList = ^TPointerList Pointer to an array of pointers. PStringItem = ^TStringItem Pointer to a TStringItem (210) record. PStringItemList = ^TStringItemList Pointer to a TStringItemList (210). TActiveXRegType = (axrComponentOnly,axrIncludeDescendants)
Table 2.2: Enumeration values for type TActiveXRegType Value axrComponentOnly axrIncludeDescendants Explanation
This type is provided for compatibility only, and is currently not used in Free Pascal. TAlignment = (taLeftJustify,taRightJustify,taCenter)
200
Table 2.3: Enumeration values for type TAlignment Value taCenter taLeftJustify taRightJustify Explanation Text is displayed centered. Text is displayed aligned to the left Text is displayed aligned to the right.
The TAlignment type is used to specify the alignment of the text in controls that display a text. TAncestorNotFoundEvent = procedure(Reader: TReader; const ComponentName: string; ComponentClass: TPersistentClass; var Component: TComponent) of object This event occurs when an ancestor component cannot be found. TBasicActionClass = Class of TBasicAction TBasicAction (253) class reference. TBasicActionLinkClass = Class of TBasicActionLink TBasicActionLink (257) class reference. TBiDiMode = (bdLeftToRight,bdRightToLeft,bdRightToLeftNoAlign, bdRightToLeftReadingOnly)
Table 2.4: Enumeration values for type TBiDiMode Value bdLeftToRight bdRightToLeft bdRightToLeftNoAlign bdRightToLeftReadingOnly Explanation Texts read from left to right. Texts read from right to left. Texts read from right to left, but not right-aligned Texts read from right to left
TBiDiMode describes bi-directional support for displaying texts. TBitArray = Array[0..MaxBitRec-1] of Cardinal Array to store bits. TCollectionItemClass = Class of TCollectionItem TCollectionItemClass is used by the TCollection.ItemClass (1) property of TCollection (277) to identify the descendent class of TCollectionItem (285) which should be created and managed. TCollectionNotification = (cnAdded,cnExtracting,cnDeleting) 201
Table 2.5: Enumeration values for type TCollectionNotication Value cnAdded cnDeleting cnExtracting Explanation An item is added to the collection. An item is deleted from the collection. An item is extracted from the collection.
TCollectionNotification is used in the TCollection (277) class to send notications about changes to the collection. TCollectionSortCompare = function(Item1: TCollectionItem; Item2: TCollectionItem) : Integer TCollectionSortCompare is the prototype for a callback used in the TCollection.Sort (1) method. The procedure should compare Item1 and Item2 and return an integer: Result < 0 if Item1 comes before Item2 Result = 0 if Item1 is at the same level as Item2 Result > 0 if Item1 comes after Item2 TComponentClass = Class of TComponent The TComponentClass type is used when constructing TComponent (287) descendent instances and when registering components. TComponentName = String Names of components are of type TComponentName. By specifying a different type, the Object inspector can handle this property differently than a standard string property. TComponentState= Set of (csLoading,csReading,csWriting,csDestroying, csDesigning,csAncestor,csUpdating,csFixups, csFreeNotification,csInline,csDesignInstance) Indicates the state of the component during the streaming process. TComponentStyle= Set of (csInheritable,csCheckPropAvail,csSubComponent, csTransient) Describes the style of the component. TCreateComponentEvent = procedure(Reader: TReader; ComponentClass: TComponentClass; var Component: TComponent) of object Event handler type, occurs when a component instance must be created when a component is read from a stream. TDataModuleClass = Class of TDataModule 202
TDataModuleClass denes the class pointer for TDataModule (301). TDuplicates = Types.TDuplicates Type to describe what to do with duplicate values in a TStringlist (376). TExceptionClass = Class of Exception TExceptionClass is the class pointer for the Exception (1602) class, dened in the SysUtils (1443) unit. TFilerFlag = (ffInherited,ffChildPos,ffInline)
Table 2.6: Enumeration values for type TFilerFlag Value ffChildPos ffInherited ffInline Explanation The position of the child on its parent is included. Stored object is an inherited object. Used for frames.
The TFiler class uses this enumeration type to decide whether the streamed object was streamed as part of an inherited form or not. TFilerFlags = Set of TFilerFlag Set of TFilerFlag (203) TFindAncestorEvent = procedure(Writer: TWriter;Component: TComponent; const Name: string; var Ancestor: TComponent; var RootAncestor: TComponent) of object Event that occurs w TFindComponentClassEvent = procedure(Reader: TReader; const ClassName: string; var ComponentClass: TComponentClass) of object Event handler type, occurs when a component class pointer must be found when reading a component from a stream. TFindGlobalComponent = function(const Name: string) : TComponent TFindGlobalComponent is a callback used to nd a component in a global scope. It is used when the streaming system needs to nd a component which is not part of the component which is currently being streamed. It should return the component with name Name, or Nil if none is found. The variable FindGlobalComponent (215) is a callback of type TFindGlobalComponent. It can be set by the IDE when an unknown reference is found, to offer the designer to redirect the link to a new component. 203
TFindMethodEvent = procedure(Reader: TReader;const MethodName: string; var Address: Pointer;var Error: Boolean) of object If a TReader (347) instance needs to locate a method and it doesnt nd it in the streamed form, then the OnFindMethod (1) event handler will be called, if one is installed. This event can be assigned in order to use different locating methods. If a method is found, then its address should be returned in Address. The Error should be set to True if the reader should raise an exception after the event was handled. If it is set to False no exception will be raised, even if no method was found. On entry, Error will be set to True. TGetChildProc = procedure(Child: TComponent) of object Callback used when obtaining child components. TGetStrProc = procedure(const S: string) of object This event is used as a callback to retrieve string values. It is used, among other things, to pass along string properties in property editors. THandle = System.THandle This type is used as the handle for THandleStream (316) stream descendents THelpEvent = function(Command: Word;Data: LongInt;var CallHelp: Boolean) : Boolean of object This event is used for display of online help. THelpType = (htKeyword,htContext)
Table 2.7: Enumeration values for type THelpType Value htContext htKeyword Explanation Help type: Context ID help. Help type: Keyword help
Enumeration type specifying the kind of help requested. TIdentMapEntry = record Value : Integer; Name : string; end
TIdentMapEntry is used internally by the IdentToInt (218) and IntToIdent (218) calls to store the mapping between the identiers and the integers they represent. TIdentToInt = function(const Ident: string;var Int: LongInt) : Boolean 204
TIdentToInt is a callback used to look up identiers (Ident) and return an integer value corresponding to this identier (Int). The callback should return True if a value corresponding to integer Ident was found, False if not. A callback of type TIdentToInt should be specied when an integer is registered using the RegisterIntegerConsts (224) call. TInitComponentHandler = function(Instance: TComponent; RootAncestor: TClass) : Boolean TInitComponentHandler is a callback type. It is used in the InitInheritedComponent (218) call to initialize a component. Callbacks of this type are registered with the RegisterInitComponentHandler (223) call. TIntToIdent = function(Int: LongInt;var Ident: string) : Boolean TIdentToInt is a callback used to look up integers (Ident) and return an identier (Ident) that can be used to represent this integer value in an IDE. The callback should return True if a value corresponding to integer Ident was found, False if not. A callback of type TIntToIdent should be specied when an integer is registered using the RegisterIntegerConsts (224) call. TLeftRight = taLeftJustify..taRightJustify TLeftRight is a subrange type based on the TAlignment (201) enumerated type. It contains only the left and right alignment constants. TListAssignOp = (laCopy,laAnd,laOr,laXor,laSrcUnique,laDestUnique)
Table 2.8: Enumeration values for type TListAssignOp Value laAnd laCopy laDestUnique laOr laSrcUnique laXor Explanation Remove all elements not rst second list Clear list and copy all strings from second list. Keep all elements that exists only in list2 Add all elements from second (and optional third) list, eliminate duplicates Just keep all elements that exist only in source list Remove elements in second lists, Add all elements from second list not in rst list
This type determines what operation TList.Assign (1) or TFPList.assign (1) performs. TListCallback = Types.TListCallback TListCallback is the method callback prototype for the function that is passed to the TFPList.ForEachCall (1) call. The data argument will be lled with all the pointers in the list (one per call) and the arg argument is the Arg argument passed to the ForEachCall call. TListNotification = (lnAdded,lnExtracted,lnDeleted)
205
Table 2.9: Enumeration values for type TListNotication Value lnAdded lnDeleted lnExtracted Explanation List change notication: Element added to the list. List change notication: Element deleted from the list. List change notication: Element extracted from the list.
Kind of list notication event. TListSortCompare = function(Item1: Pointer;Item2: Pointer) : Integer Callback type for the list sort algorithm. TListStaticCallback = Types.TListStaticCallback TListCallback is the procedurald callback prototype for the function that is passed to the TFPList.ForEachCall (1) call. The data argument will be lled with all the pointers in the list (one per call) and the arg argument is the Arg argument passed to the ForEachCall call. TNotifyEvent = procedure(Sender: TObject) of object Most event handlers are implemented as a property of type TNotifyEvent. When this is set to a certain method of a class, when the event occurs, the method will be called, and the class that generated the event will pass itself along as the Sender argument. TObjectTextEncoding = (oteDFM,oteLFM)
Table 2.10: Enumeration values for type TObjectTextEncoding Value oteDFM oteLFM Explanation Characters are in DFM (Delphi) format: widechar encoded. Characters are in LFM format: UTF-8 encoded.
TObjectTextEncoding is an enumerated type which denotes the encoding of non ascii characters in an object stream le. It is needed for correct encoding when reading string values in the text stream. TOperation = (opInsert,opRemove)
Table 2.11: Enumeration values for type TOperation Value opInsert opRemove Explanation A new component is being inserted in the child component list. A component is being removed from the child component list.
TPersistentClass = Class of TPersistent TPersistentClass is the class reference type for the TPersistent (344) class. TPoint = Types.TPoint This record describes a coordinate. It is used to handle the Top (1) and Left (1) properties of TComponent (287). X represents the X-Coordinate of the point described by the record. Y represents the Y-Coordinate of the point described by the record. TPointerList = Array[0..MaxListSize-1] of Pointer Type for an Array of pointers. TPropertyNotFoundEvent = procedure(Reader: TReader; Instance: TPersistent; var PropName: string;IsPath: Boolean; var Handled: Boolean; var Skip: Boolean) of object TPropertyNotFoundEvent is the prototype for the TReader.OnPropertyNotFound (1) event. Reader is the sender of the event, Instance is the instance that is being streamed. PropInfo is a pointer to the RTTI information for the property being read. Handled should be set to True if the handler redirected the unknown property succesfully, and Skip should be set to True if the value should be skipped. IsPath determines whether the property refers to a sub-property. TReadComponentsProc = procedure(Component: TComponent) of object Callback type when reading a component from a stream TReaderError = procedure(Reader: TReader;const Message: string; var Handled: Boolean) of object Event handler type, called when an error occurs during the streaming. TReaderProc = procedure(Reader: TReader) of object The TReaderProc reader procedure is a callback procedure which will be used by a TPersistent (344) descendent to read user properties from a stream during the streaming process. The Reader argument is the writer object which can be used read properties from the stream. TReadWriteStringPropertyEvent = procedure(Sender: TObject; const Instance: TPersistent; PropInfo: PPropInfo; var Content: string) of object TReadWriteStringPropertyEvent is the prototype for the TReader.OnReadStringProperty (1) event handler. Reader is the sender of the event, Instance is the instance that is being streamed. PropInfo is a pointer to the RTTI information for the property being read. Content is the string as it was read from the stream. 207
TRect = Types.TRect TRect describes a rectangle in space with its upper-left (in (Top,Left>)) and lower-right (in (Bottom ,Right)) corners. TReferenceNameEvent = procedure(Reader: TReader;var Name: string) of object Occurs when a named object needs to be looked up. TSeekOrigin = (soBeginning,soCurrent,soEnd)
Table 2.12: Enumeration values for type TSeekOrigin Value soBeginning soCurrent soEnd Explanation Offset is interpreted relative to the start of the stream. Offset is interpreted relative to the current position in the stream. Offset is interpreted relative to the end of the stream.
Species the origin of the TStream.Seek (1) method. TSetMethodPropertyEvent = procedure(Reader: TReader; Instance: TPersistent; PropInfo: PPropInfo; const TheMethodName: string; var Handled: Boolean) of object TSetMethodPropertyEvent is the prototype for the TReader.OnSetMethodProperty (1) event. Reader is the sender of the event, Instance is the instance that is being streamed. PropInfo is a pointer to the RTTI information for the property being read, and TheMethodName is the name of the method that the property should be set to. Handled should be set to True if the handler set the property succesfully. TSetNameEvent = procedure(Reader: TReader;Component: TComponent; var Name: string) of object Occurs when the reader needs to set a components name. TShiftState = Set of TShiftStateEnum This type is used when describing a shortcut key or when describing what special keys are pressed on a keyboard when a key event is generated. The set contains the special keys that can be used in combination with a normal key. TShiftStateEnum = (ssShift,ssAlt,ssCtrl,ssLeft,ssRight,ssMiddle, ssDouble,ssMeta,ssSuper,ssHyper,ssAltGr,ssCaps,ssNum, ssScroll,ssTriple,ssQuad,ssExtra1,ssExtra2)
208
Table 2.13: Enumeration values for type TShiftStateEnum Value ssAlt ssAltGr ssCaps ssCtrl ssDouble ssExtra1 ssExtra2 ssHyper ssLeft ssMeta ssMiddle ssNum ssQuad ssRight ssScroll ssShift ssSuper ssTriple Explanation Alt key pressed Alt-GR key pressed. Caps lock key pressed Ctrl key pressed Double mouse click. Extra key 1 Extra key 2 Hyper key pressed. Left mouse button pressed. Meta key pressed. Middle mouse button pressed. Num lock key pressed Quadruple mouse click Right mouse button pressed. Scroll lock key pressed Shift key pressed Super key pressed. Triple mouse click
Keyboard/Mouse shift state enumerator TShortCut = Low(Word)..High(Word) Enumeration type to identify shortcut key combinations. TSmallPoint = record x : SmallInt; y : SmallInt; end
Same as TPoint (207), only the X and Y ranges are limited to 2-byte integers instead of 4-byte integers. TStreamOwnership = (soReference,soOwned)
Table 2.14: Enumeration values for type TStreamOwnership Value soOwned soReference Explanation Stream is owned: it will be freed when the adapter is freed. Stream is referenced only, it is not freed by the adapter
The ownership of a streamadapter determines what happens with the stream on which a TStreamAdapter (371) acts, when the adapter is freed. TStreamProc = procedure(Stream: TStream) of object 209
Procedure type used in streaming. TStringItem = record FString : string; FObject : TObject; end
The TStringItem is used to store the string and object items in a TStringList (376) string list instance. It should never be used directly. TStringItemList = Array[0..MaxListSize] of TStringItem This declaration is provided for Delphi compatibility, it is not used in Free Pascal. TStringListSortCompare = function(List: TStringList;Index1: Integer; Index2: Integer) : Integer Callback type used in stringlist compares. TSynchronizeProcVar = procedure Synchronize callback type TThreadMethod = procedure of object Procedure variable used when synchronizing threads. TThreadPriority = (tpIdle,tpLowest,tpLower,tpNormal,tpHigher,tpHighest, tpTimeCritical)
Table 2.15: Enumeration values for type TThreadPriority Value tpHigher tpHighest tpIdle tpLower tpLowest tpNormal tpTimeCritical Explanation Thread runs at high priority Thread runs at highest possible priority. Thread only runs when other processes are idle. Thread runs at a lower priority. Thread runs at the lowest priority. Thread runs at normal process priority. Thread runs at realtime priority.
Enumeration specifying the priority at which a thread runs. TValueType = (vaNull,vaList,vaInt8,vaInt16,vaInt32,vaExtended,vaString, vaIdent,vaFalse,vaTrue,vaBinary,vaSet,vaLString,vaNil, vaCollection,vaSingle,vaCurrency,vaDate,vaWString,vaInt64, vaUTF8String,vaUString,vaQWord)
210
Table 2.16: Enumeration values for type TValueType Value vaBinary vaCollection vaCurrency vaDate vaExtended vaFalse vaIdent vaInt16 vaInt32 vaInt64 vaInt8 vaList vaLString vaNil vaNull vaQWord vaSet vaSingle vaString vaTrue vaUString vaUTF8String vaWString Explanation Binary data follows. Collection follows Currency value follows Date value follows Extended value. Boolean False value. Identier. Integer value, 16 bits long. Integer value, 32 bits long. Integer value, 64 bits long. Integer value, 8 bits long. Identies the start of a list of values Ansistring data follows. Nil pointer. Empty value. Ends a list. QWord (64-bit word) value Set data follows. Single type follows. String value. Boolean True value. UnicodeString value UTF8 encoded unicode string. Widestring value follows.
Enumerated type used to identify the kind of streamed property TWriteMethodPropertyEvent = procedure(Writer: TWriter; Instance: TPersistent; PropInfo: PPropInfo; const MethodValue: TMethod; const DefMethodValue: TMethod; var Handled: Boolean) of object TWriteMethodPropertyEvent is the prototype for the TWriter.OnWriteMethodProperty (1) event. Writer is the sender of the event, Instance is the instance that is being streamed. PropInfo is a pointer to the RTTI information for the property being written, and MethodValue is the value of the method that the property was set to. DefMethodCodeValue is set to the default value of the property (Nil or the parent value). Handled should be set to True if the handler set the property succesfully. TWriterProc = procedure(Writer: TWriter) of object The TWriterProc writer procedure is a callback procedure which will be used by a TPersistent (344) descendent to write user properties from a stream during the streaming process. The Writer argument is the writer object which can be used write properties to the stream.
2.3.3
Variables
AddDataModule can be set by an IDE or a streaming mechanism to receive notication when a new instance of a TDataModule (301) descendent is created. ApplicationHandleException : procedure(Sender: TObject) of object ApplicationHandleException can be set by an application object to handle any exceptions that may occur when a TDataModule (301) is created. ApplicationShowException : procedure(E: Exception) of object Unused. CreateVCLComObjectProc : procedure(Component: TComponent) = nil CreateVCLComObjectProc is called by TComponent if it needs to create a IVCLComObject interface for itself (when the ComObject property is read). It passes itself as the Component parameter. GlobalNameSpace : IReadWriteSync An interface protecting the global namespace. Used when reading/writing to the global namespace list during streaming of forms. MainThreadID : TThreadID ID of main thread. Unused at this point.
RegisterComponentsProc : procedure(const Page: string;ComponentClasses: Array of TCom RegisterComponentsProc can be set by an IDE to be notied when new components are being registered. Application programmers should never have to set RegisterComponentsProc RegisterNoIconProc : procedure(ComponentClasses: Array of TComponentClass) RegisterNoIconProc can be set by an IDE to be notied when new components are being registered, and which do not need an Icon in the component palette. Application programmers should never have to set RegisterComponentsProc RemoveDataModule : procedure(DataModule: TDataModule) of object RemoveDataModule can be set by an IDE or a streaming mechanism to receive notication when an instance of a TDataModule (301) descendent is freed. WakeMainThread : TNotifyEvent = nil WakeMainThread is called by the TThread.synchronize (1) call. It should alert the main program thread that a thread is waiting for synchronization. The call is executed by the thread, and should therefore NOT synchronize the thread, but should somehow signal the main thread that a thread is waiting for synchronization. For example, by sending a message.
212
2.4
2.4.1
Synopsis: Activates a class group Declaration: function ActivateClassGroup(AClass: TPersistentClass) : TPersistentClass Visibility: default Description: ActivateClassGroup activates the group of classes to which AClass belongs. The function returns the class that was last used to activate the class group. The class registration and streaming mechanism allows to organize the classes in groups. This allows an IDE to form groups of classes, which can be enabled or disabled. It is not needed at Run-Time. Errors: If AClass does not belong to a class group, an exception is raised. See also: StartClassGroup (225), GroupDescendentsWith (217), ClassGroupOf (214)
2.4.2
BeginGlobalLoading
Synopsis: Not yet implemented Declaration: procedure BeginGlobalLoading Visibility: default Description: Not yet implemented
2.4.3
BinToHex
Synopsis: Convert a binary buffer to a hexadecimal string Declaration: procedure BinToHex(BinValue: PChar;HexValue: PChar;BinBufSize: Integer) Visibility: default Description: BinToHex converts the byte values in BinValue to a string consisting of 2-charachter hexadecimal strings in HexValue. BufSize species the length of BinValue, which means that HexValue must have size 2*BufSize. For example a buffer containing the byte values 255 and 0 will be converted to FF00. Errors: No length checking is done, so if an invalid size is specied, an exception may follow. See also: HexToBin (217)
2.4.4
Bounds
Synopsis: Returns a TRect structure with the bounding rect of the given location and size. Declaration: function Bounds(ALeft: Integer;ATop: Integer;AWidth: Integer; AHeight: Integer) : TRect Visibility: default Description: Bounds returns a TRect (208) record with the given origin (ALeft,ATop) and dimensions (AWidth,AHeight) lled in. The bottom-right corner is calculated by adding AWidth to ALeft and AHeight to ATop. As a result, a rectangle with width/height set to 0 is exactly 1 pixel. See also: Rect (222) 213
2.4.5
CheckSynchronize
Synopsis: Check whether there are any synchronize calls in the synchronize queue. Declaration: function CheckSynchronize(timeout: LongInt) : Boolean Visibility: default Description: CheckSynchronize should be called regularly by the main application thread to handle any TThread.synchronize (1) calls that may be waiting for execution by the main thread. See also: TThread.synchronize (1)
2.4.6
ClassGroupOf
Synopsis: Returns the class group to which an instance or class belongs Declaration: function ClassGroupOf(AClass: TPersistentClass) : TPersistentClass function ClassGroupOf(Instance: TPersistent) : TPersistentClass Visibility: default Description: ClassGroupOf returns the class group to which AClass or Instance belongs. Errors: The result is Nil if no matching class group is found. See also: StartClassGroup (225), ActivateClassGroup (213), GroupDescendentsWith (217)
2.4.7
CollectionsEqual
Synopsis: Returns True if two collections are equal. Declaration: function CollectionsEqual(C1: TCollection;C2: TCollection) : Boolean function CollectionsEqual(C1: TCollection;C2: TCollection; Owner1: TComponent;Owner2: TComponent) : Boolean Visibility: default Description: CollectionsEqual is not yet implemented. It simply returns False
2.4.8
EndGlobalLoading
Synopsis: Not yet implemented. Declaration: procedure EndGlobalLoading Visibility: default Description: Not yet implemented.
214
2.4.9
ExtractStrings
Synopsis: Split a string in different words. Declaration: function ExtractStrings(Separators: TSysCharSet;WhiteSpace: TSysCharSet; Content: PChar;Strings: TStrings) : Integer Visibility: default Description: ExtractStrings splits Content (a null-terminated string) into words, and adds the words to the Strings stringlist. The words are separated by Separators and any characters in whitespace are stripped from the strings. The space and CR/LF characters are always considered whitespace. Errors: No length checking is performed on Content. If no null-termination character is present, an access violation may occur. Likewise, if Strings is not valid, an access violation may occur.
2.4.10
FindClass
Synopsis: Returns the class pointer of a class with given name. Declaration: function FindClass(const AClassName: string) : TPersistentClass Visibility: default Description: FindClass searches for the class named ClassName in the list of registered classes and returns a class pointer to the denition. If no class with the given name could be found, an exception is raised. The GetClass (216) function does not raise an exception when it does not nd the class, but returns a Nil pointer instead. See also: RegisterClass (222), GetClass (216)
2.4.11
FindGlobalComponent
Synopsis: Callback used when a component must be found. Declaration: function FindGlobalComponent(const Name: string) : TComponent Visibility: default Description: FindGlobalComponent is a callback of type TFindGlobalComponent (203). It can be set by the IDE when an unknown reference is found, to offer the user to redirect the link to a new component. It is a callback used to nd a component in a global scope. It is used when the streaming system needs to nd a component which is not part of the component which is currently being streamed. It should return the component with name Name, or Nil if none is found. See also: TFindGlobalComponent (203)
2.4.12
FindIdentToInt
Synopsis: Return the string to integer converter for an integer type Declaration: function FindIdentToInt(AIntegerType: Pointer) : TIdentToInt Visibility: default Description: FindIdentToInt returns the handler that handles the conversion of a string representation to an integer that can be used in component streaming, when IdentToInt (218) is called. Errors: Nil is returned if no handler is registered for the given type. 215
2.4.13
FindIntToIdent
Synopsis: Return the integer to string converter for an integer type Declaration: function FindIntToIdent(AIntegerType: Pointer) : TIntToIdent Visibility: default Description: FindIntToIdent returns the handler that handles the conversion of an integer to a string representation that can be used in component streaming, when IntToIdent (218) is called. Errors: Nil is returned if no handler is registered for the given type. See also: IntToIdent (218), TIntToIdent (205), FindIdentToInt (215)
2.4.14
FindNestedComponent
Synopsis: Finds the component with name path starting at the indicated root component. Declaration: function FindNestedComponent(Root: TComponent;APath: string; CStyle: Boolean) : TComponent Visibility: default Description: FindNestedComponent will descend through the list of owned components (starting at Root) and will return the component whose name path matches NamePath. As a path separator the characters . (dot), - (dash) and > (greater than) can be used See also: GlobalFixupReferences (217)
2.4.15
GetClass
Synopsis: Returns the class pointer of a class with given name. Declaration: function GetClass(const AClassName: string) : TPersistentClass Visibility: default Description: GetClass searches for the class named ClassName in the list of registered classes and returns a class pointer to the denition. If no class with the given name could be found, Nil is returned. The FindClass (215) function will raise an exception if the does not nd the class. See also: RegisterClass (222), GetClass (216)
2.4.16
GetFixupInstanceNames
Synopsis: Returns the names of elements that need to be resolved for the root component, whose reference contains ReferenceRootName Declaration: procedure GetFixupInstanceNames(Root: TComponent; const ReferenceRootName: string; Names: TStrings) Visibility: default Description: GetFixupInstanceNames examines the list of unresolved references and returns the names of classes that contain unresolved references to the Root component in the list Names. The list is not cleared prior to lling it. See also: GetFixupReferenceNames (217), GlobalFixupReferences (217) 216
2.4.17
GetFixupReferenceNames
Synopsis: Returns the names of elements that need to be resolved for the root component. Declaration: procedure GetFixupReferenceNames(Root: TComponent;Names: TStrings) Visibility: default Description: GetFixupReferenceNames examines the list of unresolved references and returns the names of properties that must be resolved for the component Root in the list Names. The list is not cleared prior to lling it. See also: GetFixupInstanceNames (216), GlobalFixupReferences (217)
2.4.18
GlobalFixupReferences
Synopsis: Called to resolve unresolved references after forms are loaded. Declaration: procedure GlobalFixupReferences Visibility: default Description: GlobalFixupReferences runs over the list of unresolved references and tries to resolve them. This routine should under normal circumstances not be called in an application programmers code. It is called automatically by the streaming system after a component has been instantiated and its properties read from a stream. It will attempt to resolve references to other global components. See also: GetFixupReferenceNames (217), GetFixupInstanceNames (216)
2.4.19
GroupDescendentsWith
Synopsis: Add class to the group of another class. Declaration: procedure GroupDescendentsWith(AClass: TPersistentClass; AClassGroup: TPersistentClass) Visibility: default Description: GroupDescendentsWith adds AClass to the group that AClassGroup belongs to. If AClassGroup belongs to more than 1 group, then it is added to the group which contains the nearest ancestor. The class registration and streaming mechanism allows to organize the classes in groups. This allows an IDE to form groups of classes, which can be enabled or disabled. It is not needed at Run-Time. See also: StartClassGroup (225), ActivateClassGroup (213), ClassGroupOf (214)
2.4.20
HexToBin
Synopsis: Convert a hexadecimal string to a binary buffer Declaration: function HexToBin(HexValue: PChar;BinValue: PChar;BinBufSize: Integer) : Integer Visibility: default Description: HexToBin scans the hexadecimal string representation in HexValue and transforms every 2 character hexadecimal number to a byte and stores it in BinValue. The buffer size is the size of the binary buffer. Scanning will stop if the size of the binary buffer is reached or when an invalid character is encountered. The return value is the number of stored bytes. 217
Errors: No length checking is done, so if an invalid size is specied, an exception may follow. See also: BinToHex (213)
2.4.21
IdentToInt
Synopsis: Looks up an integer value in a integer-to-identier map list. Declaration: function IdentToInt(const Ident: string;var Int: LongInt; const Map: Array of TIdentMapEntry) : Boolean Visibility: default Description: IdentToInt searches Map for an entry whose Name eld matches Ident and returns the corresponding integer value in Int. If a match was found, the function returns True, otherwise, False is returned. See also: TIdentToInt (205), TIntToIdent (205), IntToIdent (218), TIdentMapEntry (204)
2.4.22
InitComponentRes
Synopsis: Provided for Delphi compatibility only Declaration: function InitComponentRes(const ResName: string;Instance: TComponent) : Boolean Visibility: default Description: This function is provided for Delphi compatibility. It always returns false. See also: ReadComponentRes (221)
2.4.23
InitInheritedComponent
Synopsis: Initializes a component descending from RootAncestor Declaration: function InitInheritedComponent(Instance: TComponent; RootAncestor: TClass) : Boolean Visibility: default Description: InitInheritedComponent should be called from a constructor to read properties of the component Instance from the streaming system. The RootAncestor class is the root class from which Instance is a descendent. This must be one of TDatamodule, TCustomForm or TFrame. The function returns True if the properties were successfully read from a stream or False if some error occurred. See also: ReadComponentRes (221), ReadComponentResEx (221), ReadComponentResFile (221)
2.4.24
IntToIdent
Synopsis: Looks up an identier for an integer value in a identier-to-integer map list. Declaration: function IntToIdent(Int: LongInt;var Ident: string; const Map: Array of TIdentMapEntry) : Boolean Visibility: default 218
Description: IdentToInt searches Map for an entry whose Value eld matches Int and returns the corresponding identier in Ident. If a match was found, the function returns True, otherwise, False is returned. See also: TIdentToInt (205), TintToIdent (205), IdentToInt (218), TIdentMapEntry (204)
2.4.25
InvalidPoint
Synopsis: Check whether a point is invalid. Declaration: function InvalidPoint(X: Integer;Y: Integer) : Boolean function InvalidPoint(const At: TPoint) : Boolean function InvalidPoint(const At: TSmallPoint) : Boolean Visibility: default Description: InvalidPoint returns True if the X and Y coordinates (of the TPoint or TSmallPoint records, if one of these versions is used) are -1. See also: TPoint (207), TSmallPoint (209), PointsEqual (221)
2.4.26
LineStart
Synopsis: Finds the start of a line in Buffer before BufPos. Declaration: function LineStart(Buffer: PChar;BufPos: PChar) : PChar Visibility: default Description: LineStart reversely scans Buffer starting at BufPos for a linefeed character. It returns a pointer at the linefeed character.
2.4.27
NotifyGlobalLoading
Synopsis: Not yet implemented. Declaration: procedure NotifyGlobalLoading Visibility: default Description: Not yet implemented.
2.4.28
ObjectBinaryToText
Synopsis: Converts an object stream from a binary to a text format. Declaration: procedure ObjectBinaryToText(Input: TStream;Output: TStream; Encoding: TObjectTextEncoding) procedure ObjectBinaryToText(Input: TStream;Output: TStream) Visibility: default Description: ObjectBinaryToText reads an object stream in binary format from Input and writes the object stream in text format to Output. No components are instantiated during the process, this is a pure conversion routine. See also: ObjectTextToBinary (220) 219
2.4.29
ObjectResourceToText
Synopsis: Converts an object stream from a (windows) resource to a text format. Declaration: procedure ObjectResourceToText(Input: TStream;Output: TStream) Visibility: default Description: ObjectResourceToText reads the resource header from the Input stream and then passes the streams to ObjectBinaryToText (219) See also: ObjectBinaryToText (219), ObjectTextToResource (220)
2.4.30
ObjectTextToBinary
Synopsis: Converts an object stream from a text to a binary format. Declaration: procedure ObjectTextToBinary(Input: TStream;Output: TStream) Visibility: default Description: Converts an object stream from a text to a binary format.
2.4.31
ObjectTextToResource
Synopsis: Converts an object stream from a text to a (windows) resource format. Declaration: procedure ObjectTextToResource(Input: TStream;Output: TStream) Visibility: default Description: ObjectTextToResource reads an object stream in text format from Input and writes a resource stream to Output. Note that for the current implementation of this method in Free Pascal, the output stream should support positioning. (e.g. it should not be a pipe) See also: ObjectBinaryToText (219), ObjectResourceToText (220)
2.4.32
Point
Synopsis: Returns a TPoint record with the given coordinates. Declaration: function Point(AX: Integer;AY: Integer) : TPoint Visibility: default Description: Point returns a TPoint (207) record with the given coordinates AX and AY lled in. See also: TPoint (207), SmallPoint (225), Rect (222), Bounds (213)
220
2.4.33
PointsEqual
Synopsis: Check whether two TPoint variables are equal. Declaration: function PointsEqual(const P1: TPoint;const P2: TPoint) : Boolean function PointsEqual(const P1: TSmallPoint;const P2: TSmallPoint) : Boolean Visibility: default Description: PointsEqual compares the P1 and P2 points (of type TPoint (207) or TSmallPoint (209)) and returns True if the X and Y coordinates of the points are equal, or False otherwise. See also: TPoint (207), TSmallPoint (209), InvalidPoint (219)
2.4.34
ReadComponentRes
Synopsis: Read component properties from a resource in the current module Declaration: function ReadComponentRes(const ResName: string;Instance: TComponent) : TComponent Visibility: default Description: This function is provided for Delphi compatibility. It always returns Nil.
2.4.35
ReadComponentResEx
Synopsis: Read component properties from a resource in the specied module Declaration: function ReadComponentResEx(HInstance: THandle;const ResName: string) : TComponent Visibility: default Description: This function is provided for Delphi compatibility. It always returns Nil.
2.4.36
ReadComponentResFile
Synopsis: Read component properties from a specied resource le Declaration: function ReadComponentResFile(const FileName: string; Instance: TComponent) : TComponent Visibility: default Description: ReadComponentResFile starts reading properties for Instance from the le FileName. It creates a lestream from FileName and then calls the TStream.ReadComponentRes (1) method to read the state of the component from the stream. See also: TStream.ReadComponentRes (1), WriteComponentResFile (227)
221
2.4.37
Rect
Synopsis: Returns a TRect record with the given coordinates. Declaration: function Rect(ALeft: Integer;ATop: Integer;ARight: Integer; ABottom: Integer) : TRect Visibility: default Description: Rect returns a TRect (208) record with the given top-left (ALeft,ATop) and bottom-right (ABottom,ARight) corners lled in. No checking is done to see whether the coordinates are valid. See also: TRect (208), Point (220), SmallPoint (225), Bounds (213)
2.4.38
RedirectFixupReferences
Synopsis: Redirects references under the root object from OldRootName to NewRootName Declaration: procedure RedirectFixupReferences(Root: TComponent; const OldRootName: string; const NewRootName: string) Visibility: default Description: RedirectFixupReferences examines the list of unresolved references and replaces references to a root object named OldRootName with references to root object NewRootName. An application programmer should never need to call RedirectFixupReferences. This function can be used by an IDE to support redirection of broken component links. See also: RemoveFixupReferences (225)
2.4.39
RegisterClass
Synopsis: Registers a class with the streaming system. Declaration: procedure RegisterClass(AClass: TPersistentClass) Visibility: default Description: RegisterClass registers the class AClass in the streaming system. After the class has been registered, it can be read from a stream when a reference to this class is encountered. See also: RegisterClasses (223), RegisterClassAlias (222), RegisterComponents (223), UnregisterClass (226)
2.4.40
RegisterClassAlias
Synopsis: Registers a class alias with the streaming system. Declaration: procedure RegisterClassAlias(AClass: TPersistentClass; const Alias: string) Visibility: default Description: RegisterClassAlias registers a class alias in the streaming system. If a reference to a class Alias is encountered in a stream, then an instance of the class AClass will be created instead by the streaming code. See also: RegisterClass (222), RegisterClasses (223), RegisterComponents (223), UnregisterClass (226) 222
2.4.41
RegisterClasses
Synopsis: Registers multiple classes with the streaming system. Declaration: procedure RegisterClasses(AClasses: Array of TPersistentClass) Visibility: default Description: RegisterClasses registers the specied classes AClass in the streaming system. After the classes have been registered, they can be read from a stream when a reference to this class is encountered. See also: RegisterClass (222), RegisterClassAlias (222), RegisterComponents (223), UnregisterClass (226)
2.4.42
RegisterComponents
Synopsis: Registers components for the component palette. Declaration: procedure RegisterComponents(const Page: string; ComponentClasses: Array of TComponentClass) Visibility: default Description: RegisterComponents registers the component on the appropriate component page. The component pages can be used by an IDE to display the known components so an application programmer may pick and use the components in his programs. Registercomponents inserts the component class in the correct component page. If the RegisterComponentsProc procedure is set, this is called as well. Note that this behaviour is different from Delphis behaviour where an exception will be raised if the procedural variable is not set. See also: RegisterClass (222), RegisterNoIcon (224)
2.4.43
RegisterFindGlobalComponentProc
Declaration: procedure RegisterFindGlobalComponentProc (AFindGlobalComponent: TFindGlobalComponent) Visibility: default Description: RegisterFindGlobalComponentProc registers a global component search callback AFindGlobalComponent. When FindGlobalComponent (215) is called, then this callback will be used to search for the component. Errors: None. See also: FindGlobalComponent (215), UnRegisterFindGlobalComponentProc (226)
2.4.44
RegisterInitComponentHandler
Synopsis: Register a component initialization handler Declaration: procedure RegisterInitComponentHandler(ComponentClass: TComponentClass; Handler: TInitComponentHandler) Visibility: default
223
Description: RegisterInitComponentHandler registers a component initialization handler Handler for the component ComponentClass. This handler will be used to initialize descendents of ComponentClass in the InitInheritedComponent (218) call. See also: InitInheritedComponent (218), TInitComponentHandler (205)
2.4.45
RegisterIntegerConsts
Synopsis: Registers some integer-to-identier mappings. Declaration: procedure RegisterIntegerConsts(IntegerType: Pointer; IdentToIntFn: TIdentToInt; IntToIdentFn: TIntToIdent) Visibility: default Description: RegisterIntegerConsts registers a pair of callbacks to be used when an integer of type IntegerType must be mapped to an identier (using IntToIdentFn) or when an identier must be mapper to an integer (using IdentToIntFn). Component programmers can use RegisterIntegerConsts to associate a series of identier strings with integer values for a property. A necessary condition is that the property should have a separate type declared using the type integer syntax. If a type of integer is dened in this way, an IDE can show symbolic names for the values of these properties. The IntegerType should be a pointer to the type information of the integer type. The IntToIdentFn and IdentToIntFn are two callbacks that will be used when converting between the identier and integer value and vice versa. The functions IdentToInt (218) and IntToIdent (218) can be used to implement these callback functions. See also: TIdentToInt (205), TIntToIdent (205), IdentToInt (218), IntToIdent (218)
2.4.46
RegisterNoIcon
Synopsis: Registers components that have no icon on the component palette. Declaration: procedure RegisterNoIcon(ComponentClasses: Array of TComponentClass) Visibility: default Description: RegisterNoIcon performs the same function as RegisterComponents (223) except that it calls RegisterNoIconProc (212) instead of RegisterComponentsProc (212) See also: RegisterNoIconProc (212), RegisterComponents (223)
2.4.47
RegisterNonActiveX
Synopsis: Register non-activex component. Declaration: procedure RegisterNonActiveX(ComponentClasses: Array of TComponentClass; AxRegType: TActiveXRegType) Visibility: default Description: Not yet implemented in Free Pascal
224
2.4.48
RemoveFixupReferences
Synopsis: Removes references to rootname from the xup list. Declaration: procedure RemoveFixupReferences(Root: TComponent;const RootName: string) Visibility: default Description: RemoveFixupReferences examines the list of unresolved references and removes references to a root object pointing at Root or a root component named RootName. An application programmer should never need to call RemoveFixupReferences. This function can be used by an IDE to support removal of broken component links. See also: RedirectFixupReferences (222)
2.4.49
RemoveFixups
Synopsis: Removes Instance from the xup list. Declaration: procedure RemoveFixups(Instance: TPersistent) Visibility: default Description: RemoveFixups removes all entries for component Instance from the list of unresolved references.a See also: RedirectFixupReferences (222), RemoveFixupReferences (225)
2.4.50
SmallPoint
Synopsis: Returns a TSmallPoint record with the given coordinates. Declaration: function SmallPoint(AX: SmallInt;AY: SmallInt) : TSmallPoint Visibility: default Description: SmallPoint returns a TSmallPoint (209) record with the given coordinates AX and AY lled in. See also: TSmallPoint (209), Point (220), Rect (222), Bounds (213)
2.4.51
StartClassGroup
Synopsis: Start new class group. Declaration: procedure StartClassGroup(AClass: TPersistentClass) Visibility: default Description: StartClassGroup starts a new class group and adds AClass to it. The class registration and streaming mechanism allows to organize the classes in groups. This allows an IDE to form groups of classes, which can be enabled or disabled. It is not needed at Run-Time. See also: GroupDescendentsWith (217), ActivateClassGroup (213), ClassGroupOf (214)
225
2.4.52
UnRegisterClass
Synopsis: Unregisters a class from the streaming system. Declaration: procedure UnRegisterClass(AClass: TPersistentClass) Visibility: default Description: UnregisterClass removes the class AClass from the class denitions in the streaming system. See also: UnRegisterClasses (226), UnRegisterModuleClasses (226), RegisterClass (222)
2.4.53
UnRegisterClasses
Synopsis: Unregisters multiple classes from the streaming system. Declaration: procedure UnRegisterClasses(AClasses: Array of TPersistentClass) Visibility: default Description: UnregisterClasses removes the classes in AClasses from the class denitions in the streaming system.
2.4.54
UnregisterFindGlobalComponentProc
Declaration: procedure UnregisterFindGlobalComponentProc (AFindGlobalComponent: TFindGlobalComponen Visibility: default Description: UnRegisterFindGlobalComponentProc unregisters the previously registered global component search callback AFindGlobalComponent. After this call, when FindGlobalComponent (215) is called, then this callback will be no longer be used to search for the component. Errors: None. See also: FindGlobalComponent (215), RegisterFindGlobalComponentProc (223)
2.4.55
UnRegisterModuleClasses
Synopsis: Unregisters classes registered by module. Declaration: procedure UnRegisterModuleClasses(Module: HMODULE) Visibility: default Description: UnRegisterModuleClasses unregisters all classes which reside in the module Module. For each registered class, the denition pointer is checked to see whether it resides in the module, and if it does, the denition is removed. See also: UnRegisterClass (226), UnRegisterClasses (226), RegisterClasses (223)
226
2.4.56
WriteComponentResFile
Synopsis: Write component properties to a specied resource le Declaration: procedure WriteComponentResFile(const FileName: string; Instance: TComponent) Visibility: default Description: WriteComponentResFile starts writing properties of Instance to the le FileName. It creates a lestream from FileName and then calls TStream.WriteComponentRes (1) method to write the state of the component to the stream. See also: TStream.WriteComponentRes (1), ReadComponentResFile (221)
2.5
2.5.1
EBitsError
Description
When an index of a bit in a TBits (270) is out of the valid range (0 to Count-1) then a EBitsError exception is raised.
2.6
2.6.1
EClassNotFound
Description
When the streaming system needs to create a component, it looks for the class pointer (VMT) in the list of registered classes by its name. If this name is not found, then an EClassNotFound is raised. See also: EFilerError (228)
2.7
2.7.1
EComponentError
Description
When an error occurs during the registration of a component, or when naming a component, then a EComponentError is raised. Possible causes are: 1. An name with an illegal character was assigned to a component. 2. A component with the same name and owner already exists. 3. The component registration system isnt set up properly. See also: TComponent (287), TComponent.Name (1)
2.8
2.8.1
EFCreateError
Description
When the operating system reports an error during creation of a new le in the Filestream Constructor (1), a EFCreateError is raised. See also: EStreamError (229), EFOpenError (228) 227
2.9
2.9.1
EFilerError
Description
This class serves as an ancestor class for exceptions that are raised when an error occurs during component streaming. A EFilerError exception is raised when a class is registered twice. See also: EStreamError (229), EReadError (229)
2.10
2.10.1
EFOpenError
Description
When the operating system reports an error during the opening of a le in the Filestream Constructor (1), a EFOpenError is raised. See also: EStreamError (229), EFCreateError (227)
2.11
2.11.1
EInvalidImage
Description
This exception is not used by Free Pascal but is provided for Delphi compatibility.
2.12
2.12.1
EInvalidOperation
Description
This exception is not used in Free Pascal, it is dened for Delphi compatibiliy purposes only.
2.13
2.13.1
EListError
Description
If an error occurs in one of the TList (325) or TStrings (381) methods, then a EListError exception is raised. This can occur in one of the following cases: 1. There is not enough memory to expand the list. 2. The list tried to grow beyond its maximal capacity. 3. An attempt was made to reduce the capacity of the list below the current element count. 4. An attempt was made to set the list count to a negative value. 5. A non-existent element of the list was referenced. (i.e. the list index was out of bounds) 6. An attempt was made to move an item to a position outside the lists bounds. See also: TList (325), TStrings (381)
228
2.14
2.14.1
EMethodNotFound
Description
This exception is no longer used in the streaming system. This error is replaced by a EReadError (229). See also: EFilerError (228), EReadError (229)
2.15
2.15.1
EOutOfResources
Description
This exception is not used in Free Pascal, it is dened for Delphi compatibiliy purposes only.
2.16
2.16.1
EParserError
Description
When an error occurs during the parsing of a stream, an EParserError is raised. Usually this indicates that an invalid token was found on the input stream, or the token read from the stream wasnt the expected token. See also: TParser (338)
2.17
2.17.1
EReadError
Description
If an error occurs when reading from a stream, a EReadError exception is raised. Possible causes for this are: 1. Not enough data is available when reading from a stream 2. The stream containing a components data contains invalid data. this will occurr only when reading a component from a stream. See also: EFilerError (228), EWriteError (230)
2.18
2.18.1
EResNotFound
Description
This exception is not used by Free Pascal but is provided for Delphi compatibility.
2.19
2.19.1
EStreamError
Description
An EStreamError is raised when an error occurs during reading from or writng to a stream: Possible causes are 229
1. Not enough data is available in the stream. 2. Trying to seek beyond the beginning or end of the stream. 3. Trying to set the capacity of a memory stream and no memory is available. 4. Trying to write to a read-only stream, such as a resource stream. 5. Trying to read from a write-only stream. See also: EFCreateError (227)
2.20
2.20.1
EStringListError
Description
When an error occurs in one of the methods of TStrings (381) then an EStringListError is raised. This can have one of the following causes: 1. There is not enough memory to expand the list. 2. The list tried to grow beyond its maximal capacity. 3. A non-existent element of the list was referenced. (i.e. the list index was out of bounds) 4. An attempt was made to add a duplicate entry to a TStringList (376) when TStringList.AllowDuplicates (1) is False. See also: TStrings (381), TStringList (376)
2.21
2.21.1
EThread
Description
2.22
2.22.1
EThreadDestroyCalled
Description
2.23
2.23.1
EWriteError
Description
If an error occurs when writing to a stream, a EWriteError exception is raised. Possible causes for this are: 1. The stream doesnt allow writing. 2. An error occurred when writing a property to a stream. See also: EFilerError (228), EReadError (229) 230
2.24
2.24.1
IDesignerNotify
Description
IDesignerNotify is an interface that can be used to communicate changes to a designer mechanism. It offers functionality for detecting changes, and notications when the component is destroyed.
2.24.2
Page 231 231
Method overview
Property Modied Notication Description Notify that the component is modied. Notication of owner changes
2.24.3
IDesignerNotify.Modied
Synopsis: Notify that the component is modied. Declaration: procedure Modified Visibility: default Description: Modified can be used to notify a designer of changes, indicating that components should be streamed.
2.24.4
IDesignerNotify.Notication
Synopsis: Notication of owner changes Declaration: procedure Notification(AnObject: TPersistent;Operation: TOperation) Visibility: default Description: Notification is the interface counterpart of TComponent.Notication (1) which is used to communicate adds to the components. See also: TComponent.Notication (1)
2.25
2.25.1
IInterfaceComponentReference
Description
IInterfaceComponentReference is an interface to return the component that implements a given interface. It is implemented by TComponent (287). See also: TComponent (287)
2.25.2
Page 232
Method overview
Property GetComponent Description Return component instance
231
2.25.3
IInterfaceComponentReference.GetComponent
Synopsis: Return component instance Declaration: function GetComponent : TComponent Visibility: default Description: GetComponent returns the component instance. Errors: None. See also: TComponent (287)
2.26
2.26.1
IInterfaceList
Description
IInterfaceList is an interface for maintaining a list of interfaces, strongly resembling the standard TList (325) class. It offers the same list of public methods as TList, with the exception that it uses interfaces instead of pointers. All interfaces in the list should descend from IUnknown. More detailed descriptions of how the various methods behave can be found in the TList reference. See also: TList (325)
2.26.2
Page 235 234 234 235 235 233 233 233 235 235 236 236 233 236 234 234 236
Method overview
Property Add Clear Delete Exchange First Get GetCapacity GetCount IndexOf Insert Last Lock Put Remove SetCapacity SetCount Unlock Description Add an interface to the list Clear the list Remove an interface from the list Exchange 2 interfaces in the list Return the rst non-empty interface in the list. Retrieve an interface pointer from the list. Return the capacity of the list. Return the current number of elements in the list. Return the index of an interface. Insert an interface in the list. Returns the last non-nil interface in the list. Lock the list Write an item to the list Remove an interface from the list Set the capacity of the list Set the number of items in the list Unlock the list.
2.26.3
Page 236 237 237
Property overview
Property Capacity Count Items Access rw rw rw Description Capacity of the list Current number of elements in the list. Provides Index-based, sequential, access to the interfaces in the list.
232
2.26.4
IInterfaceList.Get
Synopsis: Retrieve an interface pointer from the list. Declaration: function Get(i: Integer) : IUnknown Visibility: default Description: Get returns the interface pointer at position i in the list. It serves as the Read method for the Items (1) property. See also: IInterfaceList.Items (1), TList.Items (1)
2.26.5
IInterfaceList.GetCapacity
Synopsis: Return the capacity of the list. Declaration: function GetCapacity : Integer Visibility: default Description: GetCapacity returns the current capacity of the list. It serves as the Read method for the Capacity (1) property. See also: IInterfaceList.Capacity (1), TList.Capacity (1)
2.26.6
IInterfaceList.GetCount
Synopsis: Return the current number of elements in the list. Declaration: function GetCount : Integer Visibility: default Description: It serves as the Read method for the Count (1) property. See also: IInterfaceList.Count (1), TList.Count (1)
2.26.7
IInterfaceList.Put
Synopsis: Write an item to the list Declaration: procedure Put(i: Integer;item: IUnknown) Visibility: default Description: Put writes the interface Item at position I in the list. It servers as the Write method for the Items (1) property. See also: IInterfaceList.Items (1), TList.Items (1)
233
2.26.8
IInterfaceList.SetCapacity
Synopsis: Set the capacity of the list Declaration: procedure SetCapacity(NewCapacity: Integer) Visibility: default Description: SetCapacity sets the capacity of the list to NewCapacity. It serves as the Write method for the Capacity (1) property. See also: IInterfaceList.Capacity (1), TList.Capacity (1)
2.26.9
IInterfaceList.SetCount
Synopsis: Set the number of items in the list Declaration: procedure SetCount(NewCount: Integer) Visibility: default Description: SetCount sets the count of the list to NewCount. It serves as the Write method for the Capacity (1) See also: IInterfaceList.Count (1), TList.Count (1)
2.26.10
IInterfaceList.Clear
Synopsis: Clear the list Declaration: procedure Clear Visibility: default Description: Clear removes all interfaces from the list. All interfaces in the list will be cleared (i.e. their reference count will decrease with 1) See also: TList.Clear (1)
2.26.11
IInterfaceList.Delete
Synopsis: Remove an interface from the list Declaration: procedure Delete(index: Integer) Visibility: default Description: Delete removes the interface at position Index from the list. It does this by explicitly clearing the interface and then removing the slot. See also: TList.Clear (1), IInterfaceList.Add (1), IInterfaceList.Delete (1), IInterfaceList.Insert (1)
234
2.26.12
IInterfaceList.Exchange
Synopsis: Exchange 2 interfaces in the list Declaration: procedure Exchange(index1: Integer;index2: Integer) Visibility: default Description: Exchange exchanges 2 interfaces in the list at locations index1 and Index2. See also: TList.Exchange (1), IInterfaceList.Add (1), IInterfaceList.Delete (1), IInterfaceList.Insert (1)
2.26.13
IInterfaceList.First
Synopsis: Return the rst non-empty interface in the list. Declaration: function First : IUnknown Visibility: default Description: First returns the rst non-empty interface in the list. See also: TList.First (1), IInterfaceList.IndexOf (1), IInterfaceList.Last (1)
2.26.14
IInterfaceList.IndexOf
Synopsis: Return the index of an interface. Declaration: function IndexOf(item: IUnknown) : Integer Visibility: default Description: IndexOf returns the location in the list of the interface Item. If there is no such interface in the list, then -1 is returned. See also: TList.IndexOf (1), IInterfaceList.First (1), IInterfaceList.Last (1)
2.26.15
IInterfaceList.Add
Synopsis: Add an interface to the list Declaration: function Add(item: IUnknown) : Integer Visibility: default Description: Add adds the interface Item to the list, and returns the position at which it has been added. See also: TList.Add (1), IInterfaceList.Insert (1), IInterfaceList.Delete (1)
2.26.16
IInterfaceList.Insert
Synopsis: Insert an interface in the list. Declaration: procedure Insert(i: Integer;item: IUnknown) Visibility: default Description: Insert inserts the interface Item in the list, at position I, shifting all items one position. See also: TList.Insert (1), IInterfaceList.Add (1), IInterfaceList.Delete (1) 235
2.26.17
IInterfaceList.Last
Synopsis: Returns the last non-nil interface in the list. Declaration: function Last : IUnknown Visibility: default Description: Last returns the last non-empty interface in the list. See also: TList.Last (1), IInterfaceList.First (1), IInterfaceList.IndexOf (1)
2.26.18
IInterfaceList.Remove
Synopsis: Remove an interface from the list Declaration: function Remove(item: IUnknown) : Integer Visibility: default Description: Remove searches for the rst occurrence of Item in the list and deletes it. See also: TList.Remove (1), IInterfaceList.Delete (1), IInterfaceList.IndexOf (1)
2.26.19
IInterfaceList.Lock
Synopsis: Lock the list Declaration: procedure Lock Visibility: default Description: Lock locks the list. After a call to lock, the object list can only be accessed by the current thread, untill UnLock (1) is called. See also: TList.Lock (1), IInterfaceList.Unlock (1)
2.26.20
IInterfaceList.Unlock
Synopsis: Unlock the list. Declaration: procedure Unlock Visibility: default Description: Unlock unlocks a locked list. After a call to UnLock, other threads are again able to access the list. See also: TList.UnLock (1), IInterfaceList.Lock (1)
2.26.21
IInterfaceList.Capacity
Synopsis: Capacity of the list Declaration: Property Capacity : Integer Visibility: default Access: Read,Write 236
Description: Capacity is the maximum number of elements the list can hold without needing to reallocate memory for the list. It can be set to improve speed when adding a lot of items to the list. See also: TList.Capacity (1), IInterfaceList.Count (1)
2.26.22
IInterfaceList.Count
Synopsis: Current number of elements in the list. Declaration: Property Count : Integer Visibility: default Access: Read,Write Description: Count is the current number of elements in the list. Setting it to a larger number will allocate empty slots. Setting it to a smaller number will clear any interfaces that fall outside the new border. See also: IInterfaceList.Capacity (1), TList.Count (1)
2.26.23
IInterfaceList.Items
Synopsis: Provides Index-based, sequential, access to the interfaces in the list. Declaration: Property Items[index: Integer]: IUnknown; default Visibility: default Access: Read,Write Description: Items is the default property of the interface list and provides index-based array access to the interfaces in the list. Allowed values for Index include 0 to Count-1 See also: IInterfaceList.Count (1), TList.Items (1)
2.27
2.27.1
IStreamPersist
Description
IStreamPersist denes an interface for object persistence streaming to a stream. Any class implementing this interface is expected to be able to save or load its state from or to a stream. See also: TPersistent (344), TComponent (287), TStream (362)
2.27.2
Page 238 238
Method overview
Property LoadFromStream SaveToStream Description Load persistent data from stream. Save persistent data to stream.
237
2.27.3
IStreamPersist.LoadFromStream
Synopsis: Load persistent data from stream. Declaration: procedure LoadFromStream(Stream: TStream) Visibility: default Description: LoadFromStream is the method called when the object should load its state from the stream stream. It should be able to read the data which was written using the SavetoStream method. See also: TPersistent (344), TComponent (287), TStream (362), IStreamPersist.SaveToStream (1)
2.27.4
IStreamPersist.SaveToStream
Synopsis: Save persistent data to stream. Declaration: procedure SaveToStream(Stream: TStream) Visibility: default Description: SaveFromStream is the method called when the object should load its state from the stream stream. The data written by this method should be readable by the LoadFromStream method. See also: TPersistent (344), TComponent (287), TStream (362), IStreamPersist.LoadFromStream (1)
2.28
2.28.1
IStringsAdapter
Description
2.28.2
Page 238 238
Method overview
Property ReferenceStrings ReleaseStrings Description Add a reference to the indicated strings. Release the reference to the strings.
2.28.3
IStringsAdapter.ReferenceStrings
Synopsis: Add a reference to the indicated strings. Declaration: procedure ReferenceStrings(S: TStrings) Visibility: default
2.28.4
IStringsAdapter.ReleaseStrings
Synopsis: Release the reference to the strings. Declaration: procedure ReleaseStrings Visibility: default
238
2.29
2.29.1
IVCLComObject
Description
IVCLComObject is used by TComponent to implement the IUnknown interface used by COM automation servers. Partially, it is the translation to pascal of the IDispatch interface denition by Microsoft. If TComponent needs to return an IUnknown interface, it creates a IVCLComObject interface instead. See also: TComponent.VCLComObject (1)
2.29.2
Page 240 240 239 239 240 240
Method overview
Property FreeOnRelease GetIDsOfNames GetTypeInfo GetTypeInfoCount Invoke SafeCallException Description Is called by TComponent.FreeOnRelease The IDispatch:GetIDsOfNames call for automation servers. The IDispatch:GetTypeInfo call for automation servers The IDispatch:GetTypeInfoCount call for automation servers The IDispatch:Invoke call for automation servers. This method can be invoked if an exception occurs during Invoke
2.29.3
IVCLComObject.GetTypeInfoCount
Synopsis: The IDispatch:GetTypeInfoCount call for automation servers Declaration: function GetTypeInfoCount(out Count: Integer) : HRESULT Visibility: default Description: GetTypeInfoCount must return in Count either 0 or 1 to indicate that it provides type information (1) or not (0). Errors: On error, a nonzero (different from S_OK) return value must be returned. See also: IVCLComObject.GetTypeInfo (1)
2.29.4
IVCLComObject.GetTypeInfo
Synopsis: The IDispatch:GetTypeInfo call for automation servers Declaration: function GetTypeInfo(Index: Integer;LocaleID: Integer;out TypeInfo) : HRESULT Visibility: default Description: GetTypeInfo must return the Index-th entry in the type information of the component in TypeInfo. The LocaleID argument can be used to indicate the locale of the caller, as different type information can be returned depending on the locale. Errors: On error, a nonzero (different from S_OK) return value must be returned. See also: IVCLComObject.GetTypeInfoCount (1)
239
2.29.5
IVCLComObject.GetIDsOfNames
Synopsis: The IDispatch:GetIDsOfNames call for automation servers. Declaration: function GetIDsOfNames(const IID: TGuid;Names: Pointer; NameCount: Integer;LocaleID: Integer; DispIDs: Pointer) : HRESULT Visibility: default Description: GetIDsOfNames must return in DispIDs the dispatch Ids for the NameCount names of the methods listed in Names. The LocaleID indicates the locale of the caller. Errors: On error, a nonzero (different from S_OK) return value must be returned. See also: IVCLComObject.Invoke (1)
2.29.6
IVCLComObject.Invoke
Synopsis: The IDispatch:Invoke call for automation servers. Declaration: function Invoke(DispID: Integer;const IID: TGuid;LocaleID: Integer; Flags: Word;var Params;VarResult: Pointer; ExcepInfo: Pointer;ArgErr: Pointer) : HRESULT Visibility: default Description: Invoke must invoke the method designated by DispID. IID can be ignored. LocaleID is used by the caller to indicate the locale it is using. The Flags argument describes the context in which Invoke is called: a method, or property getter/setter. The Params argument contains the parameters to the call. The result should be in VarResult. On error, ExcepInfo and ArgError should be lled. The function should return 0 (S_OK) if all went well. See also: IVCLComObject.GetIDsOfNames (1)
2.29.7
IVCLComObject.SafeCallException
Synopsis: This method can be invoked if an exception occurs during Invoke Declaration: function SafeCallException(ExceptObject: TObject;ExceptAddr: Pointer) : HRESULT Visibility: default Description: SafeCallException is called to handle an exception during invocation of the Invoke method. The TObject implementation of this method returns E_UNEXPECTED. See also: IVCLComObject.Invoke (1)
2.29.8
IVCLComObject.FreeOnRelease
240
Description: FreeOnRelease is called by TComponent.FreeOnRelease (1) for the IVCLComObject interface implemented by TComponent. See also: TComponent.FreeOnRelease (1)
2.30
2.30.1
TAbstractObjectReader
Description
The Free Pascal streaming mechanism, while compatible with Delphis mechanism, differs from it in the sense that the streaming mechanism uses a driver class when streaming components. The TAbstractObjectReader class is the base driver class for reading property values from streams. It consists entirely of abstract methods, which must be implemented by descendent classes. Different streaming mechanisms can be implemented by making a descendent from TAbstractObjectReader. The TBinaryObjectReader (259) class is such a descendent class, which streams data in binary (Delphi compatible) format. All methods described in this class, mustbe implemented by descendent classes. See also: TBinaryObjectReader (259)
2.30.2
Page 242 243 242 241 243 243 244 244 243 244 245 246 246 245 246 244 247 247 247 242 247 248 248
Method overview
Property BeginComponent BeginProperty BeginRootComponent NextValue Read ReadBinary ReadCurrency ReadDate ReadFloat ReadIdent ReadInt16 ReadInt32 ReadInt64 ReadInt8 ReadSet ReadSingle ReadStr ReadString ReadUnicodeString ReadValue ReadWideString SkipComponent SkipValue Description Marks the reading of a new component. Marks the reading of a property value. Starts the reading of the root component. Returns the type of the next value in the stream. Read raw data from stream Read binary data from the stream. Read a currency value from the stream. Read a date value from the stream. Read a oat value from the stream. Read an identier from the stream. Read a 16-bit integer from the stream. Read a 32-bit integer from the stream. Read a 64-bit integer from the stream. Read an 8-bit integer from the stream. Reads a set from the stream. Read a single (real-type) value from the stream. Read a shortstring from the stream Read a string of type StringType from the stream. Read a unicode string value Reads the type of the next value. Read a widestring value from the stream. Skip till the end of the component. Skip the current value.
2.30.3
TAbstractObjectReader.NextValue
Virtual; 241 Abstract
Synopsis: Returns the type of the next value in the stream. Declaration: function NextValue : TValueType;
Visibility: public Description: This function should return the type of the next value in the stream, but should not read the actual value, i.e. the stream position should not be altered by this method. This is used to peek in the stream what value is next. See also: TAbstractObjectReader.ReadValue (1)
2.30.4
TAbstractObjectReader.ReadValue
Virtual; Abstract
Synopsis: Reads the type of the next value. Declaration: function ReadValue : TValueType; Visibility: public Description: This function returns the type of the next value in the stream and reads it. i.e. after the call to this method, the stream is positioned to read the value of the type returned by this function. See also: TAbstractObjectReader.ReadValue (1)
2.30.5
TAbstractObjectReader.BeginRootComponent
Virtual; Abstract
Synopsis: Starts the reading of the root component. Declaration: procedure BeginRootComponent; Visibility: public Description: This function can be used to initialize the driver class for reading a component. It is called once at the beginning of the read process, and is immediatly followed by a call to BeginComponent (1). See also: TAbstractObjectReader.BeginComponent (1)
2.30.6
TAbstractObjectReader.BeginComponent
Synopsis: Marks the reading of a new component. Declaration: procedure BeginComponent(var Flags: TFilerFlags;var AChildPos: Integer; var CompClassName: string;var CompName: string) ; Virtual; Abstract Visibility: public Description: This method is called when the streaming process wants to start reading a new component. Descendent classes should override this method to read the start of a component new component denition and return the needed arguments. Flags should be lled with any ags that were found at the component denition, as well as AChildPos. The CompClassName should be lled with the class name of the streamed component, and the CompName argument should be lled with the name of the component. AChildPos is used to change the ordering in which components appear below their parent component when streaming descendent forms. See also: TAbstractObjectReader.BeginRootComponent (1), TAbstractObjectReader.BeginProperty (1)
242
2.30.7
TAbstractObjectReader.BeginProperty
Virtual; Abstract
Synopsis: Marks the reading of a property value. Declaration: function BeginProperty : string; Visibility: public Description: BeginProperty is called by the streaming system when it wants to read a new property. The return value of the function is the name of the property which can be read from the stream. See also: TAbstractObjectReader.BeginComponent (1)
2.30.8
TAbstractObjectReader.Read
Virtual; Abstract
Synopsis: Read raw data from stream Declaration: procedure Read(var Buf;Count: LongInt); Visibility: public Description: Read is introduced for Delphi compatibility to read raw data from the component stream. This should not be used in production code as it will totally mess up the streaming. See also: TBinaryObjectReader.Read (1), TReader.Read (1)
2.30.9
TAbstractObjectReader.ReadBinary
Virtual; Abstract
Synopsis: Read binary data from the stream. Declaration: procedure ReadBinary(const DestData: TMemoryStream); Visibility: public Description: ReadBinary is called when binary data should be read from the stream (i.e. after ReadValue (1) returned a valuetype of vaBinary). The data should be stored in the DestData memory stream by descendent classes. See also: TAbstractObjectReader.ReadFloat (1), TAbstractObjectReader.ReadDate (1), TAbstractObjectReader.ReadSingle (1), TAbstractObjectReader.ReadIdent (1), TAbstractObjectReader.ReadInt8 (1), TAbstractObjectReader.ReadInt16 (1), TAbstractObjectReader.ReadInt32 (1), TAbstractObjectReader.ReadInt64 (1), TabstractObjectReader.ReadSet (1), TabstractObjectReader.ReadStr (1), TabstractObjectReader.ReadString (1)
2.30.10
TAbstractObjectReader.ReadFloat
Virtual; Abstract
Synopsis: Read a oat value from the stream. Declaration: function ReadFloat : Extended; Visibility: public Description: ReadFloat is called by the streaming system when it wants to read a oat from the stream (i.e. after ReadValue (1) returned a valuetype of vaExtended). The return value should be the value of the oat. See also: TAbstractObjectReader.ReadFloat (1), TAbstractObjectReader.ReadDate (1), TAbstractObjectReader.ReadSingle (1), TAbstractObjectReader.ReadIdent (1), TAbstractObjectReader.ReadInt8 (1), TAbstractObjectReader.ReadInt16 (1), TAbstractObjectReader.ReadInt32 (1), TAbstractObjectReader.ReadInt64 (1), TabstractObjectReader.ReadSet (1), TabstractObjectReader.ReadStr (1), TabstractObjectReader.ReadString (1) 243
2.30.11
TAbstractObjectReader.ReadSingle
Virtual; Abstract
Synopsis: Read a single (real-type) value from the stream. Declaration: function ReadSingle : Single; Visibility: public Description: ReadSingle is called by the streaming system when it wants to read a single-type oat from the stream (i.e. after ReadValue (1) returned a valuetype of vaSingle). The return value should be the value of the oat. See also: TAbstractObjectReader.ReadFloat (1), TAbstractObjectReader.ReadDate (1), TAbstractObjectReader.ReadSingle (1), TAbstractObjectReader.ReadIdent (1), TAbstractObjectReader.ReadInt8 (1), TAbstractObjectReader.ReadInt16 (1), TAbstractObjectReader.ReadInt32 (1), TAbstractObjectReader.ReadInt64 (1), TabstractObjectReader.ReadSet (1), TabstractObjectReader.ReadStr (1), TabstractObjectReader.ReadString (1)
2.30.12
TAbstractObjectReader.ReadDate
Virtual; Abstract
Synopsis: Read a date value from the stream. Declaration: function ReadDate : TDateTime; Visibility: public Description: ReadDate is called by the streaming system when it wants to read a date/time value from the stream (i.e. after ReadValue (1) returned a valuetype of vaDate). The return value should be the date/time value. (This value can be stored as a oat, since TDateTime is nothing but a oat.) See also: TAbstractObjectReader.ReadFloat (1), TAbstractObjectReader.ReadSingle (1), TAbstractObjectReader.ReadIdent (1), TAbstractObjectReader.ReadInt8 (1), TAbstractObjectReader.ReadInt16 (1), TAbstractObjectReader.ReadInt32 (1), TAbstractObjectReader.ReadInt64 (1), TabstractObjectReader.ReadSet (1), TabstractObjectReader.ReadStr (1), TabstractObjectReader.ReadString (1)
2.30.13
TAbstractObjectReader.ReadCurrency
Virtual; Abstract
Synopsis: Read a currency value from the stream. Declaration: function ReadCurrency : Currency; Visibility: public Description: ReadCurrency is called when a currency-typed value should be read from the stream. This abstract method should be overidden by descendent classes, and should return the currency value read from the stream. See also: TAbstractObjectWriter.WriteCurrency (1)
2.30.14
TAbstractObjectReader.ReadIdent
Virtual; Abstract
Synopsis: Read an identier from the stream. Declaration: function ReadIdent(ValueType: TValueType) : string; Visibility: public
244
Description: ReadIdent is called by the streaming system if it expects to read an identier of type ValueType from the stream after a call to ReadValue (1) returned vaIdent. The identier should be returned as a string. Note that in some cases the identier does not actually have to be in the stream. The following table indicates which identiers must actually be read: Table 2.17: ValueType vaIdent vaNil vaFalse vaTrue vaNull Expected value Read from stream. Nil. This does not have to be read from the stream. False. This does not have to be read from the stream. True. This does not have to be read from the stream. Null. This does not have to be read from the stream.
See also: TAbstractObjectReader.ReadFloat (1), TAbstractObjectReader.ReadDate (1), TAbstractObjectReader.ReadSingle (1), TAbstractObjectReader.ReadInt8 (1), TAbstractObjectReader.ReadInt16 (1), TAbstractObjectReader.ReadInt32 (1), TAbstractObjectReader.ReadInt64 (1), TabstractObjectReader.ReadSet (1), TabstractObjectReader.ReadStr (1), TabstractObjectReader.ReadString (1)
2.30.15
TAbstractObjectReader.ReadInt8
Virtual; Abstract
Synopsis: Read an 8-bit integer from the stream. Declaration: function ReadInt8 : ShortInt; Visibility: public Description: ReadInt8 is called by the streaming process if it expects to read an integer value with a size of 8 bits (1 byte) from the stream (i.e. after ReadValue (1) returned a valuetype of vaInt8). The return value is the value if the integer. Note that the size of the value in the stream does not actually have to be 1 byte. See also: TAbstractObjectReader.ReadFloat (1), TAbstractObjectReader.ReadDate (1), TAbstractObjectReader.ReadSingle (1), TAbstractObjectReader.ReadIdent (1), TAbstractObjectReader.ReadInt16 (1), TAbstractObjectReader.ReadInt32 (1), TAbstractObjectReader.ReadInt64 (1), TabstractObjectReader.ReadSet (1), TabstractObjectReader.ReadStr (1), TabstractObjectReader.ReadString (1)
2.30.16
TAbstractObjectReader.ReadInt16
Virtual; Abstract
Synopsis: Read a 16-bit integer from the stream. Declaration: function ReadInt16 : SmallInt; Visibility: public Description: ReadInt16 is called by the streaming process if it expects to read an integer value with a size of 16 bits (2 bytes) from the stream (i.e. after ReadValue (1) returned a valuetype of vaInt16). The return value is the value if the integer. Note that the size of the value in the stream does not actually have to be 2 bytes. See also: TAbstractObjectReader.ReadFloat (1), TAbstractObjectReader.ReadDate (1), TAbstractObjectReader.ReadSingle (1), TAbstractObjectReader.ReadIdent (1), TAbstractObjectReader.ReadInt8 (1), TAbstractObjectReader.ReadInt32 (1), TAbstractObjectReader.ReadInt64 (1), TabstractObjectReader.ReadSet (1), TabstractObjectReader.ReadStr (1), TabstractObjectReader.ReadString (1) 245
2.30.17
TAbstractObjectReader.ReadInt32
Virtual; Abstract
Synopsis: Read a 32-bit integer from the stream. Declaration: function ReadInt32 : LongInt; Visibility: public Description: ReadInt32 is called by the streaming process if it expects to read an integer value with a size of 32 bits (4 bytes) from the stream (i.e. after ReadValue (1) returned a valuetype of vaInt32). The return value is the value of the integer. Note that the size of the value in the stream does not actually have to be 4 bytes. See also: TAbstractObjectReader.ReadFloat (1), TAbstractObjectReader.ReadDate (1), TAbstractObjectReader.ReadSingle (1), TAbstractObjectReader.ReadIdent (1), TAbstractObjectReader.ReadInt8 (1), TAbstractObjectReader.ReadInt16 (1), TAbstractObjectReader.ReadInt64 (1), TabstractObjectReader.ReadSet (1), TabstractObjectReader.ReadStr (1), TabstractObjectReader.ReadString (1)
2.30.18
TAbstractObjectReader.ReadInt64
Virtual; Abstract
Synopsis: Read a 64-bit integer from the stream. Declaration: function ReadInt64 : Int64; Visibility: public Description: ReadInt64 is called by the streaming process if it expects to read an int64 value with a size of 64 bits (8 bytes) from the stream (i.e. after ReadValue (1) returned a valuetype of vaInt64). The return value is the value if the integer. Note that the size of the value in the stream does not actually have to be 8 bytes. See also: TAbstractObjectReader.ReadFloat (1), TAbstractObjectReader.ReadDate (1), TAbstractObjectReader.ReadSingle (1), TAbstractObjectReader.ReadIdent (1), TAbstractObjectReader.ReadInt8 (1), TAbstractObjectReader.ReadInt16 (1), TAbstractObjectReader.ReadInt32 (1), TabstractObjectReader.ReadSet (1), TabstractObjectReader.ReadStr (1), TabstractObjectReader.ReadString (1)
2.30.19
TAbstractObjectReader.ReadSet
Virtual; Abstract
Synopsis: Reads a set from the stream. Declaration: function ReadSet(EnumType: Pointer) : Integer; Visibility: public Description: This method is called by the streaming system if it expects to read a set from the stream (i.e. after ReadValue (1) returned a valuetype of vaSet). The return value is the contents of the set, encoded in a bitmask the following way: For each (enumerated) value in the set, the bit corresponding to the ordinal value of the enumerated value should be set. i.e. as 1 shl ord(value). See also: TAbstractObjectReader.ReadFloat (1), TAbstractObjectReader.ReadDate (1), TAbstractObjectReader.ReadSingle (1), TAbstractObjectReader.ReadIdent (1), TAbstractObjectReader.ReadInt8 (1), TAbstractObjectReader.ReadInt16 (1), TAbstractObjectReader.ReadInt32 (1), TAbstractObjectReader.ReadInt64 (1), TabstractObjectReader.ReadStr (1), TabstractObjectReader.ReadString (1)
246
2.30.20
TAbstractObjectReader.ReadStr
Virtual; Abstract
Synopsis: Read a shortstring from the stream Declaration: function ReadStr : string; Visibility: public Description: ReadStr is called by the streaming system if it expects to read a string from the stream (i.e. after ReadValue (1) returned a valuetype of vaLString,vaWstring or vaString). The return value is the string. See also: TAbstractObjectReader.ReadFloat (1), TAbstractObjectReader.ReadDate (1), TAbstractObjectReader.ReadSingle (1), TAbstractObjectReader.ReadIdent (1), TAbstractObjectReader.ReadInt8 (1), TAbstractObjectReader.ReadInt16 (1), TAbstractObjectReader.ReadInt32 (1), TAbstractObjectReader.ReadInt64 (1), TabstractObjectReader.ReadSet (1), TabstractObjectReader.ReadString (1)
2.30.21
TAbstractObjectReader.ReadString
Virtual
Synopsis: Read a string of type StringType from the stream. Declaration: function ReadString(StringType: TValueType) : string; ; Abstract Visibility: public Description: ReadStr is called by the streaming system if it expects to read a string from the stream (i.e. after ReadValue (1) returned a valuetype of vaLString,vaWstring or vaString). The return value is the string. See also: TAbstractObjectReader.ReadFloat (1), TAbstractObjectReader.ReadDate (1), TAbstractObjectReader.ReadSingle (1), TAbstractObjectReader.ReadIdent (1), TAbstractObjectReader.ReadInt8 (1), TAbstractObjectReader.ReadInt16 (1), TAbstractObjectReader.ReadInt32 (1), TAbstractObjectReader.ReadInt64 (1), TabstractObjectReader.ReadSet (1), TabstractObjectReader.ReadStr (1)
2.30.22
TAbstractObjectReader.ReadWideString
Virtual; Abstract
Synopsis: Read a widestring value from the stream. Declaration: function ReadWideString : WideString; Visibility: public Description: ReadWideString is called when a widestring-typed value should be read from the stream. This abstract method should be overidden by descendent classes. See also: TAbstractObjectWriter.WriteWideString (1)
2.30.23
TAbstractObjectReader.ReadUnicodeString
Virtual; Abstract
Synopsis: Read a unicode string value Declaration: function ReadUnicodeString : UnicodeString; Visibility: public
247
Description: ReadUnicodeString should read a UnicodeString value from the stream. (indicated by the vaUString value type). Descendent classes should override this method to actually read a UnicodeString value. See also: TBinaryObjectWriter.WriteUnicodeString (1), TAbstractObjectReader.ReadWideString (1)
2.30.24
TAbstractObjectReader.SkipComponent
Virtual
Synopsis: Skip till the end of the component. Declaration: procedure SkipComponent(SkipComponentInfos: Boolean); ; Abstract Visibility: public Description: This method is used to skip the entire declaration of a component in the stream. Each descendent of TAbstractObjectReader should implement this in a way which is optimal for the implemented stream format. See also: TAbstractObjectReader.BeginComponent (1), TAbstractObjectReader.SkipValue (1)
2.30.25
TAbstractObjectReader.SkipValue
Virtual; Abstract
Synopsis: Skip the current value. Declaration: procedure SkipValue; Visibility: public Description: SkipValue should be used when skipping a value in the stream; The method should determine the type of the value which should be skipped by itself, if this is necessary. See also: TAbstractObjectReader.SkipComponent (1)
2.31
2.31.1
TAbstractObjectWriter
Description
248
2.31.2
Page 249 249 249 250 250 250 250 250 251 251 251 251 252 252 252 253 251 253 252 253 252 253
Method overview
Property BeginCollection BeginComponent BeginList BeginProperty EndList EndProperty Write WriteBinary WriteBoolean WriteCurrency WriteDate WriteFloat WriteIdent WriteInteger WriteMethodName WriteSet WriteSingle WriteString WriteUInt64 WriteUnicodeString WriteVariant WriteWideString Description Start writing a collection. Start writing a component Start writing a list. Start writing a property Mark the end of a list. Marks the end of writing of a property. Write raw data to stream Writes binary data to the stream. Writes a boolean value to the stream. Write a currency value to the stream Writes a date type to the stream. Writes a oat value to the stream. Writes an identier to the stream. Writes an integer value to the stream Writes a methodname to the stream. Writes a set value to the stream. Writes a single-type real value to the stream. Writes a string value to the stream. Write an unsigned 64-bit integer Write a unicode string to the stream. Write a variant to the stream Write a widestring value to the stream
2.31.3
TAbstractObjectWriter.BeginCollection
Virtual; Abstract
Synopsis: Start writing a collection. Declaration: procedure BeginCollection; Visibility: public Description: Start writing a collection.
2.31.4
TAbstractObjectWriter.BeginComponent
Synopsis: Start writing a component Declaration: procedure BeginComponent(Component: TComponent;Flags: TFilerFlags; ChildPos: Integer); Virtual; Abstract Visibility: public Description: Start writing a component
2.31.5
TAbstractObjectWriter.BeginList
Virtual; Abstract
Synopsis: Start writing a list. Declaration: procedure BeginList; Visibility: public Description: Start writing a list. 249
2.31.6
TAbstractObjectWriter.EndList
Virtual; Abstract
Synopsis: Mark the end of a list. Declaration: procedure EndList; Visibility: public Description: Mark the end of a list.
2.31.7
TAbstractObjectWriter.BeginProperty
Virtual; Abstract
Synopsis: Start writing a property Declaration: procedure BeginProperty(const PropName: string); Visibility: public Description: Start writing a property
2.31.8
TAbstractObjectWriter.EndProperty
Virtual; Abstract
Synopsis: Marks the end of writing of a property. Declaration: procedure EndProperty; Visibility: public Description: Marks the end of writing of a property.
2.31.9
TAbstractObjectWriter.Write
Virtual; Abstract
Synopsis: Write raw data to stream Declaration: procedure Write(const Buffer;Count: LongInt); Visibility: public Description: Write is introduced for Delphi compatibility to write raw data to the component stream. This should not be used in new production code as it will totally mess up the streaming. See also: TBinaryObjectWriter.Write (1), TWriter.Write (1)
2.31.10
TAbstractObjectWriter.WriteBinary
Virtual; Abstract
Synopsis: Writes binary data to the stream. Declaration: procedure WriteBinary(const Buffer;Count: LongInt); Visibility: public Description: Writes binary data to the stream.
250
2.31.11
TAbstractObjectWriter.WriteBoolean
Virtual; Abstract
Synopsis: Writes a boolean value to the stream. Declaration: procedure WriteBoolean(Value: Boolean); Visibility: public Description: Writes a boolean value to the stream.
2.31.12
TAbstractObjectWriter.WriteFloat
Virtual; Abstract
Synopsis: Writes a oat value to the stream. Declaration: procedure WriteFloat(const Value: Extended); Visibility: public Description: Writes a oat value to the stream.
2.31.13
TAbstractObjectWriter.WriteSingle
Virtual; Abstract
Synopsis: Writes a single-type real value to the stream. Declaration: procedure WriteSingle(const Value: Single); Visibility: public Description: Writes a single-type real value to the stream.
2.31.14
TAbstractObjectWriter.WriteDate
Virtual; Abstract
Synopsis: Writes a date type to the stream. Declaration: procedure WriteDate(const Value: TDateTime); Visibility: public Description: Writes a date type to the stream.
2.31.15
TAbstractObjectWriter.WriteCurrency
Virtual; Abstract
Synopsis: Write a currency value to the stream Declaration: procedure WriteCurrency(const Value: Currency); Visibility: public Description: WriteCurrency is called when a currency-typed value should be written to the stream. This abstract method should be overidden by descendent classes. See also: TAbstractObjectReader.ReadCurrency (1)
251
2.31.16
TAbstractObjectWriter.WriteIdent
Virtual; Abstract
Synopsis: Writes an identier to the stream. Declaration: procedure WriteIdent(const Ident: string); Visibility: public Description: Writes an identier to the stream.
2.31.17
TAbstractObjectWriter.WriteInteger
Virtual; Abstract
Synopsis: Writes an integer value to the stream Declaration: procedure WriteInteger(Value: Int64); Visibility: public Description: Writes an integer value to the stream
2.31.18
TAbstractObjectWriter.WriteUInt64
Virtual; Abstract
Synopsis: Write an unsigned 64-bit integer Declaration: procedure WriteUInt64(Value: QWord); Visibility: public Description: WriteUInt64 must be overridden by descendent classes to write a 64-bit unsigned Value (valuetype vaQWord) to the stream. Errors: None. See also: TBinaryObjectWriter.WriteUInt64 (1)
2.31.19
TAbstractObjectWriter.WriteVariant
Virtual; Abstract
Synopsis: Write a variant to the stream Declaration: procedure WriteVariant(const Value: Variant); Visibility: public Description: WriteVariant must be overridden by descendent classes to write a simple variant type to the stream. WriteVariant does not write arrays types or complex types. See also: TBinaryObjectWriter.WriteVariant (1)
2.31.20
TAbstractObjectWriter.WriteMethodName
Virtual; Abstract
Synopsis: Writes a methodname to the stream. Declaration: procedure WriteMethodName(const Name: string); Visibility: public Description: Writes a methodname to the stream.
252
2.31.21
TAbstractObjectWriter.WriteSet
Virtual; Abstract
Synopsis: Writes a set value to the stream. Declaration: procedure WriteSet(Value: LongInt;SetType: Pointer); Visibility: public Description: Writes a set value to the stream.
2.31.22
TAbstractObjectWriter.WriteString
Virtual; Abstract
Synopsis: Writes a string value to the stream. Declaration: procedure WriteString(const Value: string); Visibility: public Description: Writes a string value to the stream.
2.31.23
TAbstractObjectWriter.WriteWideString
Virtual; Abstract
Synopsis: Write a widestring value to the stream Declaration: procedure WriteWideString(const Value: WideString); Visibility: public Description: WriteCurrency is called when a currency-typed value should be written to the stream. This abstract method should be overidden by descendent classes. See also: TAbstractObjectReader.ReadWideString (1)
2.31.24
TAbstractObjectWriter.WriteUnicodeString
Virtual
Synopsis: Write a unicode string to the stream. Declaration: procedure WriteUnicodeString(const Value: UnicodeString); ; Abstract Visibility: public Description: WriteUnicodeString must be overridden by descendent classes to write a unicodestring (valuetype vaUString) value to the stream. See also: TBinaryObjectWriter.WriteUnicodeString (1)
2.32
2.32.1
TBasicAction
Description
TBasicAction implements a basic action class from which all actions are derived. It introduces all basic methods of an action, and implements functionality to maintain a list of clients, i.e. components that are connected with this action. Do not create instances of TBasicAction. Instead, create a descendent class and create an instance of this class instead. See also: TBasicActionLink (257), TComponent (287) 253
2.32.2
Page 254 254 255 255 254 256 256 256 255
Method overview
Property Create Destroy Execute ExecuteTarget HandlesTarget RegisterChanges UnRegisterChanges Update UpdateTarget Description Creates a new instance of a TBasicAction (253) class. Destroys the action. Triggers the OnExecute (1) event Executes the action on the Target object Determines whether Target can be handled by this action Registers a new client with the action. Unregisters a client from the list of clients Triggers the OnUpdate (1) event Notify client controls when the action updates itself.
2.32.3
Page 256 257 257
Property overview
Property ActionComponent OnExecute OnUpdate Access rw rw rw Description Returns the component that initiated the action. Event triggered when the action executes. Event trigged when the application is idle.
2.32.4
TBasicAction.Create
Override
Synopsis: Creates a new instance of a TBasicAction (253) class. Declaration: constructor Create(AOwner: TComponent); Visibility: public Description: Create calls the inherited constructor, and then initializes the list of clients controls (or action lists). Under normal circumstances it should not be necessary to create a TBasicAction descendent manually, actions are created in an IDE. See also: Destroy (1), AssignClient (1)
2.32.5
TBasicAction.Destroy
Override
Synopsis: Destroys the action. Declaration: destructor Destroy; Visibility: public Description: Destroy cleans up the list of client controls and then calls the inherited destructor. An application programmer should not call Destroy directly; Instead Free should be called, if it needs to be called at all. Normally the controlling class (e.g. a TActionList) will destroy the action.
2.32.6
TBasicAction.HandlesTarget
Virtual
Synopsis: Determines whether Target can be handled by this action Declaration: function HandlesTarget(Target: TObject) : Boolean; Visibility: public
254
Description: HandlesTarget returns True if Target is a valid client for this action and if so, if it is in a suitable state to execute the action. An application programmer should never need to call HandlesTarget directly, it will be called by the action itself when needed. In TBasicAction this method is empty; descendent classes should override this method to implement appropriate checks. See also: UpdateTarget (1), ExecuteTarget (1)
2.32.7
TBasicAction.UpdateTarget
Virtual
Synopsis: Notify client controls when the action updates itself. Declaration: procedure UpdateTarget(Target: TObject); Visibility: public Description: UpdateTarget should update the client control specied by Target when the action updates itself. In TBasicAction, the implementation of UpdateTarget is empty. Descendent classes should override and implement UpdateTarget to actually update the Target object. An application programmer should never need to call HandlesTarget directly, it will be called by the action itself when needed. See also: HandlesTarget (1), ExecuteTarget (1)
2.32.8
TBasicAction.ExecuteTarget
Virtual
Synopsis: Executes the action on the Target object Declaration: procedure ExecuteTarget(Target: TObject); Visibility: public Description: ExecuteTarget performs the action on the Target object. In TBasicAction this method does nothing. Descendent classes should implement the action to be performed. For instance an action to post data in a dataset could call the Post method of the dataset. An application programmer should never call ExecuteTarget directly. See also: HandlesTarget (1), UpdateTarget (1), Execute (1)
2.32.9
TBasicAction.Execute
Dynamic
Synopsis: Triggers the OnExecute (1) event Declaration: function Execute : Boolean; Visibility: public Description: Execute triggers the OnExecute event, if one is assigned. It returns True if the event handler was called, False otherwise.
255
2.32.10
TBasicAction.RegisterChanges
Synopsis: Registers a new client with the action. Declaration: procedure RegisterChanges(Value: TBasicActionLink) Visibility: public Description: RegisterChanges adds Value to the list of clients. See also: UnregisterChanges (1)
2.32.11
TBasicAction.UnRegisterChanges
Synopsis: Unregisters a client from the list of clients Declaration: procedure UnRegisterChanges(Value: TBasicActionLink) Visibility: public Description: UnregisterChanges removes Value from the list of clients. This is called for instance when the action is destroyed, or when the client is assigned a new action. See also: UnregisterChanges (1), Destroy (1)
2.32.12
TBasicAction.Update
Virtual
Synopsis: Triggers the OnUpdate (1) event Declaration: function Update : Boolean; Visibility: public Description: Update triggers the OnUpdate event, if one is assigned. It returns True if the event was triggered, or False if no event was assigned. Application programmers should never run Update directly. The Update method is called automatically by the action mechanism; Normally this is in the Idle time of an application. An application programmer should assign the OnUpdate (1) event, and perform any checks in that handler. See also: OnUpdate (1), Execute (1), UpdateTarget (1)
2.32.13
TBasicAction.ActionComponent
Synopsis: Returns the component that initiated the action. Declaration: Property ActionComponent : TComponent Visibility: public Access: Read,Write Description: ActionComponent is set to the component that caused the action to execute, e.g. a toolbutton or a menu item. The property is set just before the action executes, and is reset to nil after the action was executed. See also: Execute (1), OnExecute (1)
256
2.32.14
TBasicAction.OnExecute
Synopsis: Event triggered when the action executes. Declaration: Property OnExecute : TNotifyEvent Visibility: public Access: Read,Write Description: OnExecute is the event triggered when the action is activated (executed). The event is triggered e.g. when the user clicks e.g. on a menu item or a button associated to the action. The application programmer should provide a OnExecute event handler to execute whatever code is necessary when the button is pressed or the menu item is chosen. Note that assigning an OnExecute handler will result in the Execute (1) method returning a True value. Predened actions (such as dataset actions) will check the result of Execute and will not perform their normal task if the OnExecute handler was called. See also: Execute (1), OnUpdate (1)
2.32.15
TBasicAction.OnUpdate
Synopsis: Event trigged when the application is idle. Declaration: Property OnUpdate : TNotifyEvent Visibility: public Access: Read,Write Description: OnUpdate is the event triggered when the application is idle, and the action is being updated. The OnUpdate event can be used to set the state of the action, for instance disable it if the action cannot be executed at this point in time. See also: Update (1), OnExecute (1)
2.33
2.33.1
TBasicActionLink
Description
TBasicActionLink links an Action to its clients. With each client for an action, a TBasicActionLink class is instantiated to handle the communication between the action and the client. It passes events between the action and its clients, and thus presents the action with a uniform interface to the clients. An application programmer should never use a TBasicActionLink instance directly; They are created automatically when an action is associated with a component. Component programmers should create specialized descendents of TBasicActionLink which communicate changes in the action to the component. See also: TBasicAction (253)
2.33.2
Page 258 258 258 259
Method overview
Property Create Destroy Execute Update Description Creates a new instance of the TBasicActionLink class Destroys the TBasicActionLink instance. Calls the actions Execute method. Calls the actions Update method 257
2.33.3
Page 259 259
Property overview
Property Action OnChange Access rw rw Description The action to which the link was assigned. Event handler triggered when the actions properties change
2.33.4
TBasicActionLink.Create
Virtual
Synopsis: Creates a new instance of the TBasicActionLink class Declaration: constructor Create(AClient: TObject); Visibility: public Description: Create creates a new instance of a TBasicActionLink and assigns AClient as the client of the link. Application programmers should never instantiate TBasicActionLink classes directly. An instance is created automatically when an action is assigned to a control (client). Component programmers can override the create constructor to initialize further properties. See also: Destroy (1)
2.33.5
TBasicActionLink.Destroy
Override
Synopsis: Destroys the TBasicActionLink instance. Declaration: destructor Destroy; Visibility: public Description: Destroy unregisters the TBasicActionLink with the action, and then calls the inherited destructor. Application programmers should never call Destroy directly. If a link should be destroyed at all, the Free method should be called instead. See also: Create (1)
2.33.6
TBasicActionLink.Execute
Virtual
Synopsis: Calls the actions Execute method. Declaration: function Execute(AComponent: TComponent) : Boolean; Visibility: public Description: Execute sets the ActionComponent (1) property of the associated Action (1) to AComponent and then calls the Actions execute (1) method. After the action has executed, the ActionComponent property is cleared again. The return value of the function is the return value of the Actions execute method. Application programmers should never call Execute directly. This method will be called automatically when the associated control is activated. (e.g. a button is clicked on) Component programmers should call Execute whenever the action should be activated. See also: Action (1), TBasicAction.ActionComponent (1), TBasicAction.Execute (1), TBasicAction.onExecute (1) 258
2.33.7
TBasicActionLink.Update
Virtual
Synopsis: Calls the actions Update method Declaration: function Update : Boolean; Visibility: public Description: Update calls the associated Actions Update (1) methoda. Component programmers can override the Update method to provide additional processing when the Update method occurs.
2.33.8
TBasicActionLink.Action
Synopsis: The action to which the link was assigned. Declaration: Property Action : TBasicAction Visibility: public Access: Read,Write Description: Action represents the Action (253) which was assigned to the client. Setting this property will unregister the client at the old action (if one existed) and registers the client at the new action. See also: TBasicAction (253)
2.33.9
TBasicActionLink.OnChange
Synopsis: Event handler triggered when the actions properties change Declaration: Property OnChange : TNotifyEvent Visibility: public Access: Read,Write Description: OnChange is the event triggered when the actions properties change. Application programmers should never need to assign this event. Component programmers can assign this event to have a client control reect any changes in an Actions properties. See also: Change (1), TBasicAction.Change (1)
2.34
2.34.1
TBinaryObjectReader
Description
The TBinaryObjectReader class reads component data stored in binary form in a le. For this, it overrides or implements all abstract methods from TAbstractObjectReader (241). No new functionality is added by this class, it is a driver class for the streaming system. It should never be necessary to create an instance of this class directly. Instead, the TStream.WriteComponent (1) call should be used. See also: TAbstractObjectReader (241), TBinaryObjectWriter (266)
259
2.34.2
Page 261 261 261 260 260 261 262 262 263 262 262 263 263 264 264 263 264 262 264 264 265 261 265 265 265
Method overview
Property BeginComponent BeginProperty BeginRootComponent Create Destroy NextValue Read ReadBinary ReadCurrency ReadDate ReadFloat ReadIdent ReadInt16 ReadInt32 ReadInt64 ReadInt8 ReadSet ReadSingle ReadStr ReadString ReadUnicodeString ReadValue ReadWideString SkipComponent SkipValue Description Start reading a component. Start reading a property. Start reading the root component. Creates a new binary data reader instance. Destroys the binary data reader. Return the type of the next value. Read raw data from stream Start reading a binary value. Read a currency value from the stream. Read a date. Read a oat value Read an identier Read a 16-bits integer. Read a 32-bits integer. Read a 64-bits integer. Read an 8-bits integer. Read a set Read a single-size oat value Read a short string Read a string Read a unicode string value Read the next value in the stream Read a widestring value from the stream. Skip a components data Skip a values data
2.34.3
TBinaryObjectReader.Create
Synopsis: Creates a new binary data reader instance. Declaration: constructor Create(Stream: TStream;BufSize: Integer) Visibility: public Description: Create instantiates a new binary component data reader. The Stream stream is the stream from which data will be read. The BufSize argument is the size of the internal buffer that will be used by the reader. This can be used to optimize the reading process. See also: TAbstractObjectReader (241)
2.34.4
TBinaryObjectReader.Destroy
Override
Synopsis: Destroys the binary data reader. Declaration: destructor Destroy; Visibility: public Description: Destroy frees the buffer allocated when the instance was created. It also positions the stream on the last used position in the stream (the buffering may cause the reader to read more bytes than were actually used.) See also: TBinaryObjectReader.Create (1)
260
2.34.5
TBinaryObjectReader.NextValue
Override
Synopsis: Return the type of the next value. Declaration: function NextValue : TValueType; Visibility: public Description: NextValue returns the type of the next value in a binary stream, but does not read the value. This method is simply the implementation for a binary stream of the abstract method introduced in TAbstractObjectReader (241)
2.34.6
TBinaryObjectReader.ReadValue
Override
Synopsis: Read the next value in the stream Declaration: function ReadValue : TValueType; Visibility: public Description: NextValue reads the next value in a binary stream and returns the type of the read value. This method is simply the implementation for a binary stream of the abstract method introduced in TAbstractObjectReader (241)
2.34.7
TBinaryObjectReader.BeginRootComponent
Override
Synopsis: Start reading the root component. Declaration: procedure BeginRootComponent; Visibility: public Description: BeginRootComponent starts reading the root component in a binary stream. This method is simply the implementation for a binary stream of the abstract method introduced in TAbstractObjectReader (241)
2.34.8
TBinaryObjectReader.BeginComponent
Synopsis: Start reading a component. Declaration: procedure BeginComponent(var Flags: TFilerFlags;var AChildPos: Integer; var CompClassName: string;var CompName: string) ; Override Visibility: public Description: This method is simply the implementation for a binary stream of the abstract method introduced in TAbstractObjectReader (241)
2.34.9
TBinaryObjectReader.BeginProperty
Override
Synopsis: Start reading a property. Declaration: function BeginProperty : string; Visibility: public Description: This method is simply the implementation for a binary stream of the abstract method introduced in TAbstractObjectReader (241) 261
2.34.10
TBinaryObjectReader.Read
Override
Synopsis: Read raw data from stream Declaration: procedure Read(var Buf;Count: LongInt); Visibility: public Description: Read is introduced for Delphi compatibility to read raw data from the component stream. This should not be used in production code as it will totally mess up the streaming. See also: TAbstractObjectReader.Read (1), TReader.Read (1)
2.34.11
TBinaryObjectReader.ReadBinary
Override
Synopsis: Start reading a binary value. Declaration: procedure ReadBinary(const DestData: TMemoryStream); Visibility: public Description: ReadBinary reads a binary valye from a binary stream. This method is simply the implementation for a binary stream of the abstract method introduced in TAbstractObjectReader (241)
2.34.12
TBinaryObjectReader.ReadFloat
Override
Synopsis: Read a oat value Declaration: function ReadFloat : Extended; Visibility: public Description: ReadFloat reads a oat value from a binary stream. This method is simply the implementation for a binary stream of the abstract method introduced in TAbstractObjectReader (241)
2.34.13
TBinaryObjectReader.ReadSingle
Override
Synopsis: Read a single-size oat value Declaration: function ReadSingle : Single; Visibility: public Description: ReadSingle reads a single-sized oat value from a binary stream. This method is simply the implementation for a binary stream of the abstract method introduced in TAbstractObjectReader (241)
2.34.14
Synopsis: Read a date.
TBinaryObjectReader.ReadDate
Override
262
Description: ReadDate reads a date value from a binary stream. This method is simply the implementation for a binary stream of the abstract method introduced in TAbstractObjectReader (241)
2.34.15
TBinaryObjectReader.ReadCurrency
Override
Synopsis: Read a currency value from the stream. Declaration: function ReadCurrency : Currency; Visibility: public Description: var>ReadCurrency reads a currency-typed value from a binary stream. It is the implementation of the method introduced in TAbstractObjectReader (241). See also: TAbstractObjectReader.ReadCurrency (1), TBinaryObjectWriter.WriteCurrency (1)
2.34.16
TBinaryObjectReader.ReadIdent
Override
Synopsis: Read an identier Declaration: function ReadIdent(ValueType: TValueType) : string; Visibility: public Description: ReadIdent reads an identier from a binary stream. This method is simply the implementation for a binary stream of the abstract method introduced in TAbstractObjectReader (241)
2.34.17
TBinaryObjectReader.ReadInt8
Override
Synopsis: Read an 8-bits integer. Declaration: function ReadInt8 : ShortInt; Visibility: public Description: Read8Int reads an 8-bits signed integer from a binary stream. This method is simply the implementation for a binary stream of the abstract method introduced in TAbstractObjectReader (241)
2.34.18
TBinaryObjectReader.ReadInt16
Override
Synopsis: Read a 16-bits integer. Declaration: function ReadInt16 : SmallInt; Visibility: public Description: Read16Int reads a 16-bits signed integer from a binary stream. This method is simply the implementation for a binary stream of the abstract method introduced in TAbstractObjectReader (241)
263
2.34.19
TBinaryObjectReader.ReadInt32
Override
Synopsis: Read a 32-bits integer. Declaration: function ReadInt32 : LongInt; Visibility: public Description: Read32Int reads a 32-bits signed integer from a binary stream. This method is simply the implementation for a binary stream of the abstract method introduced in TAbstractObjectReader (241)
2.34.20
TBinaryObjectReader.ReadInt64
Override
Synopsis: Read a 64-bits integer. Declaration: function ReadInt64 : Int64; Visibility: public Description: Read64Int reads a 64-bits signed integer from a binary stream. This method is simply the implementation for a binary stream of the abstract method introduced in TAbstractObjectReader (241)
2.34.21
Synopsis: Read a set
TBinaryObjectReader.ReadSet
Override
Declaration: function ReadSet(EnumType: Pointer) : Integer; Visibility: public Description: ReadSet reads a set from a binary stream.
This method is simply the implementation for a binary stream of the abstract method introduced in TAbstractObjectReader (241)
2.34.22
TBinaryObjectReader.ReadStr
Override
Synopsis: Read a short string Declaration: function ReadStr : string; Visibility: public Description: ReadStr reads a short string from a binary stream. This method is simply the implementation for a binary stream of the abstract method introduced in TAbstractObjectReader (241)
2.34.23
TBinaryObjectReader.ReadString
Override
Synopsis: Read a string Declaration: function ReadString(StringType: TValueType) : string; Visibility: public
264
Description: ReadStr reads a string of type StringType from a binary stream. This method is simply the implementation for a binary stream of the abstract method introduced in TAbstractObjectReader (241)
2.34.24
TBinaryObjectReader.ReadWideString
Override
Synopsis: Read a widestring value from the stream. Declaration: function ReadWideString : WideString; Visibility: public Description: var>ReadWideString reads a widestring-typed value from a binary stream. It is the implementation of the method introduced in TAbstractObjectReader (241). See also: TAbstractObjectReader.ReadWideString (1), TBinaryObjectWriter.WriteWideString (1)
2.34.25
TBinaryObjectReader.ReadUnicodeString
Override
Synopsis: Read a unicode string value Declaration: function ReadUnicodeString : UnicodeString; Visibility: public Description: ReadUnicodeString is overridden by TBinaryObjectReaderto read a UnicodeString value from the binary stream. See also: TAbstractObjectReader.ReadUnicodeString (1)
2.34.26
TBinaryObjectReader.SkipComponent
Override
Synopsis: Skip a components data Declaration: procedure SkipComponent(SkipComponentInfos: Boolean); Visibility: public Description: SkipComponent skips the data of a component in a binary stream. This method is simply the implementation for a binary stream of the abstract method introduced in TAbstractObjectReader (241).
2.34.27
TBinaryObjectReader.SkipValue
Override
Synopsis: Skip a values data Declaration: procedure SkipValue; Visibility: public Description: SkipComponent skips the data of the next value in a binary stream. This method is simply the implementation for a binary stream of the abstract method introduced in TAbstractObjectReader (241)
265
2.35
2.35.1
TBinaryObjectWriter
Description
2.35.2
Page 267 267 267 267 266 266 267 267 268 268 268 269 268 268 269 269 269 269 268 270 269 270 270 270
Method overview
Property BeginCollection BeginComponent BeginList BeginProperty Create Destroy EndList EndProperty Write WriteBinary WriteBoolean WriteCurrency WriteDate WriteFloat WriteIdent WriteInteger WriteMethodName WriteSet WriteSingle WriteString WriteUInt64 WriteUnicodeString WriteVariant WriteWideString Description Start writing a collection. Start writing a component Start writing a list. Start writing a property Creates a new instance of a binary object writer. Destroys an instance of the binary object writer. Mark the end of a list. Marks the end of writing of a property. Write raw data to stream Writes binary data to the stream. Writes a boolean value to the stream. Write a currency-valued type to a stream Writes a date type to the stream. Writes a oat value to the stream. Writes an identier to the stream. Writes an integer value to the stream. Writes a methodname to the stream. Writes a set value to the stream. Writes a single-type real value to the stream. Writes a string value to the stream. Write an unsigned 64-bit integer Write a unicode string to the stream. Write a variant to the stream Write a widestring-valued type to a stream
2.35.3
TBinaryObjectWriter.Create
Synopsis: Creates a new instance of a binary object writer. Declaration: constructor Create(Stream: TStream;BufSize: Integer) Visibility: public Description: Creates a new instance of a binary object writer.
2.35.4
TBinaryObjectWriter.Destroy
Override
Synopsis: Destroys an instance of the binary object writer. Declaration: destructor Destroy; Visibility: public Description: Destroys an instance of the binary object writer.
266
2.35.5
TBinaryObjectWriter.BeginCollection
Override
2.35.6
TBinaryObjectWriter.BeginComponent
Synopsis: Start writing a component Declaration: procedure BeginComponent(Component: TComponent;Flags: TFilerFlags; ChildPos: Integer); Override Visibility: public
2.35.7
TBinaryObjectWriter.BeginList
Override
2.35.8
TBinaryObjectWriter.EndList
Override
Synopsis: Mark the end of a list. Declaration: procedure EndList; Visibility: public
2.35.9
TBinaryObjectWriter.BeginProperty
Override
Synopsis: Start writing a property Declaration: procedure BeginProperty(const PropName: string); Visibility: public
2.35.10
TBinaryObjectWriter.EndProperty
Override
Synopsis: Marks the end of writing of a property. Declaration: procedure EndProperty; Visibility: public
267
2.35.11
TBinaryObjectWriter.Write
Override
Synopsis: Write raw data to stream Declaration: procedure Write(const Buffer;Count: LongInt); Visibility: public Description: Write is introduced for Delphi compatibility to write raw data to the component stream. This should not be used in new production code as it will totally mess up the streaming. See also: TAbstractObjectWriter.Write (1), TWriter.Write (1)
2.35.12
TBinaryObjectWriter.WriteBinary
Override
Synopsis: Writes binary data to the stream. Declaration: procedure WriteBinary(const Buffer;Count: LongInt); Visibility: public
2.35.13
TBinaryObjectWriter.WriteBoolean
Override
Synopsis: Writes a boolean value to the stream. Declaration: procedure WriteBoolean(Value: Boolean); Visibility: public
2.35.14
TBinaryObjectWriter.WriteFloat
Override
Synopsis: Writes a oat value to the stream. Declaration: procedure WriteFloat(const Value: Extended); Visibility: public
2.35.15
TBinaryObjectWriter.WriteSingle
Override
Synopsis: Writes a single-type real value to the stream. Declaration: procedure WriteSingle(const Value: Single); Visibility: public
2.35.16
TBinaryObjectWriter.WriteDate
Override
Synopsis: Writes a date type to the stream. Declaration: procedure WriteDate(const Value: TDateTime); Visibility: public
268
2.35.17
TBinaryObjectWriter.WriteCurrency
Override
Synopsis: Write a currency-valued type to a stream Declaration: procedure WriteCurrency(const Value: Currency); Visibility: public Description: WriteCurrency writes a currency-typed value to a binary stream. It is the implementation of the method introduced in TAbstractObjectWriter (248). See also: TAbstractObjectWriter.WriteCurrency (1)
2.35.18
TBinaryObjectWriter.WriteIdent
Override
Synopsis: Writes an identier to the stream. Declaration: procedure WriteIdent(const Ident: string); Visibility: public
2.35.19
TBinaryObjectWriter.WriteInteger
Override
Synopsis: Writes an integer value to the stream. Declaration: procedure WriteInteger(Value: Int64); Visibility: public
2.35.20
TBinaryObjectWriter.WriteUInt64
Override
Synopsis: Write an unsigned 64-bit integer Declaration: procedure WriteUInt64(Value: QWord); Visibility: public Description: WriteUInt64 is overridden by TBinaryObjectWriter to write an unsigned 64-bit integer (QWord) to the stream. It tries to use the smallest possible storage for the value that is passed. (largest valuetype will be vaQWord). See also: TAbstractObjectWriter.WriteUInt64 (1)
2.35.21
TBinaryObjectWriter.WriteMethodName
Override
Synopsis: Writes a methodname to the stream. Declaration: procedure WriteMethodName(const Name: string); Visibility: public
2.35.22
TBinaryObjectWriter.WriteSet
Override
Synopsis: Writes a set value to the stream. Declaration: procedure WriteSet(Value: LongInt;SetType: Pointer); Visibility: public 269
2.35.23
TBinaryObjectWriter.WriteString
Override
Synopsis: Writes a string value to the stream. Declaration: procedure WriteString(const Value: string); Visibility: public
2.35.24
TBinaryObjectWriter.WriteWideString
Override
Synopsis: Write a widestring-valued type to a stream Declaration: procedure WriteWideString(const Value: WideString); Visibility: public Description: WriteWidestring writes a widestring-typed value to a binary stream. It is the implementation of the method introduced in TAbstractObjectWriter (248). See also: TAbstractObjectWriter.WriteWidestring (1)
2.35.25
TBinaryObjectWriter.WriteUnicodeString
Override
Synopsis: Write a unicode string to the stream. Declaration: procedure WriteUnicodeString(const Value: UnicodeString); Visibility: public Description: WriteUnicodeString is overridden TBinaryObjectWriter to write a unicodestring (valuetype vaUString) value to the stream. It simply writes the character length and then all widecharacters. See also: TAbstractObjectWriter.WriteUnicodeString (1)
2.35.26
TBinaryObjectWriter.WriteVariant
Override
Synopsis: Write a variant to the stream Declaration: procedure WriteVariant(const VarValue: Variant); Visibility: public Description: WriteVariant is overridden by TBinaryObjectWriter to write a simple variant type to the stream. WriteVariant does not write arrays types or complex types. Only null, integer (ordinal) oat and string types are written. Errors: If a non-supported type is written, then an EWriteError exception is.
2.36
2.36.1
TBits
Description
TBits can be used to store collections of bits in an indexed array. This is especially useful for storing collections of booleans: Normally the size of a boolean is the size of the smallest enumerated type, i.e. 1 byte. Since a bit can take 2 values it can be used to store a boolean as well. Since TBits
270
can store 8 bits in a byte, it takes 8 times less space to store an array of booleans in a TBits class then it would take to stoe them in a conventional array. TBits introduces methods to store and retrieve bit values, apply masks, and search for bits.
2.36.2
Page 273 272 273 271 271 275 275 276 276 274 272 274 274 276 273 275 272 273
Method overview
Property AndBits Clear Clearall Create Destroy Equals FindFirstBit FindNextBit FindPrevBit Get GetFSize Grow NotBits OpenBit OrBits SetIndex SetOn XorBits Description Performs an and operation on the bits. Clears a particular bit. Clears all bits in the array. Creates a new bits collection. Destroys a bit collection Determines whether the bits of 2 arrays are equal. Find rst bit with a particular value Searches the next bit with a particular value. Searches the previous bit with a particular value. Retrieve the value of a particular bit Returns the number of records used to store the bits. Expands the bits array to the requested size. Performs a not operation on the bits. Returns the position of the rst bit that is set to False. Performs an or operation on the bits. Sets the start position for FindNextBit (1) and FindPrevBit (1) Turn a particular bit on. Performs a xor operation on the bits.
2.36.3
Page 277 277
Property overview
Property Bits Size Access rw rw Description Access to all bits in the array. Current size of the array of bits.
2.36.4
TBits.Create
Virtual
Synopsis: Creates a new bits collection. Declaration: constructor Create(TheSize: LongInt); Visibility: public Description: Create creates a new bit collection with initial size TheSize. The size of the collection can be changed later on. All bits are initially set to zero. See also: Destroy (1)
2.36.5
TBits.Destroy
Override
271
Description: Destroy destroys a previously created bit collection and releases all memory used to store the bit collection. Destroy should never be called directly, Free should be used instead. Errors: None. See also: Create (1)
2.36.6
TBits.GetFSize
Synopsis: Returns the number of records used to store the bits. Declaration: function GetFSize : LongInt Visibility: public Description: GetFSize returns the number of records used to store the current number of bits. Errors: None. See also: Size (1)
2.36.7
TBits.SetOn
Synopsis: Turn a particular bit on. Declaration: procedure SetOn(Bit: LongInt) Visibility: public Description: SetOn turns on the bit at position bit, i.e. sets it to 1. If bit is at a position bigger than the current size, the collection is expanded to the required size using Grow (1). Errors: If bit is larger than the maximum allowed bits array size or is negative, an EBitsError (227) exception is raised. See also: Bits (1), Clear (1)
2.36.8
TBits.Clear
Synopsis: Clears a particular bit. Declaration: procedure Clear(Bit: LongInt) Visibility: public Description: Clear clears the bit at position bit. If the array If bit is at a position bigger than the current size, the collection is expanded to the required size using Grow (1). Errors: If bit is larger than the maximum allowed bits array size or is negative, an EBitsError (227) exception is raised. See also: Bits (1), seton (1)
272
2.36.9
TBits.Clearall
Synopsis: Clears all bits in the array. Declaration: procedure Clearall Visibility: public Description: ClearAll clears all bits in the array, i.e. sets them to zero. ClearAll works faster than clearing all individual bits, since it uses the packed nature of the bits. Errors: None. See also: Bits (1), clear (1)
2.36.10
TBits.AndBits
Synopsis: Performs an and operation on the bits. Declaration: procedure AndBits(BitSet: TBits) Visibility: public Description: andbits performs an and operation on the bits in the array with the bits of array BitSet. If BitSet contains less bits than the current array, then all bits which have no counterpart in BitSet are cleared. Errors: None. See also: ClearAll (1), OrBits (1), XOrBits (1), NotBits (1)
2.36.11
TBits.OrBits
Synopsis: Performs an or operation on the bits. Declaration: procedure OrBits(BitSet: TBits) Visibility: public Description: andbits performs an or operation on the bits in the array with the bits of array BitSet. If BitSet contains less bits than the current array, then all bits which have no counterpart in BitSet are left untouched. If the current array contains less bits than BitSet then it is grown to the size of BitSet before the or operation is performed. Errors: None. See also: ClearAll (1), andBits (1), XOrBits (1), NotBits (1)
2.36.12
TBits.XorBits
Synopsis: Performs a xor operation on the bits. Declaration: procedure XorBits(BitSet: TBits) Visibility: public
273
Description: XorBits performs a xor operation on the bits in the array with the bits of array BitSet. If BitSet contains less bits than the current array, then all bits which have no counterpart in BitSet are left untouched. If the current array contains less bits than BitSet then it is grown to the size of BitSet before the xor operation is performed. Errors: None. See also: ClearAll (1), andBits (1), OrBits (1), NotBits (1)
2.36.13
TBits.NotBits
Synopsis: Performs a not operation on the bits. Declaration: procedure NotBits(BitSet: TBits) Visibility: public Description: NotBits performs a not operation on the bits in the array with the bits of array Bitset. If BitSet contains less bits than the current array, then all bits which have no counterpart in BitSet are left untouched. Errors: None. See also: ClearAll (1), andBits (1), OrBits (1), XOrBits (1)
2.36.14
TBits.Get
Synopsis: Retrieve the value of a particular bit Declaration: function Get(Bit: LongInt) : Boolean Visibility: public Description: Get returns True if the bit at position bit is set, or False if it is not set. Errors: If bit is not a valid bit index then an EBitsError (227) exception is raised. See also: Bits (1), FindFirstBit (1), seton (1)
2.36.15
TBits.Grow
Synopsis: Expands the bits array to the requested size. Declaration: procedure Grow(NBit: LongInt) Visibility: public Description: Grow expands the bit array so it can at least contain nbit bits. If nbit is less than the current size, nothing happens. Errors: If there is not enough memory to complete the operation, then an EBitsError (227)is raised. See also: Size (1)
274
2.36.16
TBits.Equals
Overload
Synopsis: Determines whether the bits of 2 arrays are equal. Declaration: function Equals(Obj: TObject) : Boolean; Override; function Equals(BitSet: TBits) : Boolean; Overload Visibility: default Description: equals returns True if all the bits in BitSet are the same as the ones in the current BitSet; if not, False is returned. If the sizes of the two BitSets are different, the arrays are still reported equal when all the bits in the larger set, which are not present in the smaller set, are zero. Errors: None. See also: ClearAll (1), andBits (1), OrBits (1), XOrBits (1)
2.36.17
TBits.SetIndex
Synopsis: Sets the start position for FindNextBit (1) and FindPrevBit (1) Declaration: procedure SetIndex(Index: LongInt) Visibility: public Description: SetIndex sets the search start position forFindNextBit (1) and FindPrevBit (1) to Index. This means that these calls will start searching from position Index. This mechanism provides an alternative to FindFirstBit (1) which can also be used to position for the FindNextBit and FindPrevBit calls. Errors: None. See also: FindNextBit (1), FindPrevBit (1), FindFirstBit (1), OpenBit (1)
2.36.18
TBits.FindFirstBit
Synopsis: Find rst bit with a particular value Declaration: function FindFirstBit(State: Boolean) : LongInt Visibility: public Description: FindFirstBit searches for the rst bit with value State. It returns the position of this bit, or -1 if no such bit was found. The search starts at position 0 in the array. If the rst search returned a positive result, the found position is saved, and the FindNextBit (1) and FindPrevBit (1) will use this position to resume the search. To start a search from a certain position, the start position can be set with the SetIndex (1) instead. Errors: None. See also: FindNextBit (1), FindPrevBit (1), OpenBit (1), SetIndex (1)
275
2.36.19
TBits.FindNextBit
Synopsis: Searches the next bit with a particular value. Declaration: function FindNextBit : LongInt Visibility: public Description: FindNextBit resumes a previously started search. It searches for the next bit with the value specied in the FindFirstBit (1). The search is done towards the end of the array and starts at the position last reported by one of the Find calls or at the position set with SetIndex (1). If another bit with the same value is found, its position is returned. If no more bits with the same value are present in the array, -1 is returned. Errors: None. See also: FindFirstBit (1), FindPrevBit (1), OpenBit (1), SetIndex (1)
2.36.20
TBits.FindPrevBit
Synopsis: Searches the previous bit with a particular value. Declaration: function FindPrevBit : LongInt Visibility: public Description: FindPrevBit resumes a previously started search. It searches for the previous bit with the value specied in the FindFirstBit (1). The search is done towards the beginning of the array and starts at the position last reported by one of the Find calls or at the position set with SetIndex (1). If another bit with the same value is found, its position is returned. If no more bits with the same value are present in the array, -1 is returned. Errors: None. See also: FindFirstBit (1), FindNextBit (1), OpenBit (1), SetIndex (1)
2.36.21
TBits.OpenBit
Synopsis: Returns the position of the rst bit that is set to False. Declaration: function OpenBit : LongInt Visibility: public Description: OpenBit returns the position of the rst bit whose value is 0 (False), or -1 if no open bit was found. This call is equivalent to FindFirstBit(False), except that it doesnt set the position for the next searches. Errors: None. See also: FindNextBit (1), FindPrevBit (1), FindFirstBit (1), SetIndex (1)
276
2.36.22
TBits.Bits
Synopsis: Access to all bits in the array. Declaration: Property Bits[Bit: LongInt]: Boolean; default Visibility: public Access: Read,Write Description: Bits allows indexed access to all of the bits in the array. It gives True if the bit is 1, False otherwise; Assigning to this property will set, respectively clear the bit. Errors: If an index is specied which is out of the allowed range then an EBitsError (227) exception is raised. See also: Size (1)
2.36.23
TBits.Size
Synopsis: Current size of the array of bits. Declaration: Property Size : LongInt Visibility: public Access: Read,Write Description: Size is the current size of the bit array. Setting this property will adjust the size; this is equivalent to calling Grow(Value-1) Errors: If an invalid size (negative or too large) is specied, a EBitsError (227) exception is raised. See also: Bits (1)
2.37
2.37.1
TCollection
Description
TCollection implements functionality to manage a collection of named objects. Each of these objects needs to be a descendent of the TCollectionItem (285) class. Exactly which type of object is managed can be seen from the TCollection.ItemClass (1) property. Normally, no TCollection is created directly. Instead, a descendents of TCollection and TCollectionItem (285) are created as a pair. See also: TCollectionItem (285)
277
2.37.2
Page 279 279 279 280 278 280 278 280 282 281 281 281 281 279 282
Method overview
Property Add Assign BeginUpdate Clear Create Delete Destroy EndUpdate Exchange FindItemID GetEnumerator GetNamePath Insert Owner Sort Description Creates and adds a new item to the collection. Assigns one collection to another. Start an update batch. Removes all items from the collection. Creates a new collection. Delete an item from the collection. Destroys the collection and frees all the objects it manages. Ends an update batch. Exchange 2 items in the collection Searches for an Item in the collection, based on its TCollectionItem.ID (1) property. Create an IEnumerator instance Overrides TPersistent.GetNamePath (1) to return a proper pathname. Insert an item in the collection. Owner of the collection. Sort the items in the collection
2.37.3
Page 282 283 283
Property overview
Property Count ItemClass Items Access r r rw Description Number of items in the collection. Class pointer for each item in the collection. Indexed array of items in the collection.
2.37.4
TCollection.Create
Synopsis: Creates a new collection. Declaration: constructor Create(AItemClass: TCollectionItemClass) Visibility: public Description: Create instantiates a new instance of the TCollection class which will manage objects of class AItemClass. It creates the list used to hold all objects, and stores the AItemClass for the adding of new objects to the collection. See also: TCollection.ItemClass (1), TCollection.Destroy (1)
2.37.5
TCollection.Destroy
Override
Synopsis: Destroys the collection and frees all the objects it manages. Declaration: destructor Destroy; Visibility: public Description: Destroy rst clears the collection, and then frees all memory allocated to this instance. Dont call Destroy directly, call Free instead. See also: TCollection.Create (1)
278
2.37.6
TCollection.Owner
Synopsis: Owner of the collection. Declaration: function Owner : TPersistent Visibility: public Description: Owner returns a reference to the owner of the collection. This property is required by the object inspector to be able to show the collection.
2.37.7
TCollection.Add
Synopsis: Creates and adds a new item to the collection. Declaration: function Add : TCollectionItem Visibility: public Description: Add instantiates a new item of class TCollection.ItemClass (1) and adds it to the list. The newly created object is returned. See also: TCollection.ItemClass (1), TCollection.Clear (1)
2.37.8
TCollection.Assign
Override
Synopsis: Assigns one collection to another. Declaration: procedure Assign(Source: TPersistent); Visibility: public Description: Assign assigns the contents of one collection to another. It does this by clearing the items list, and adding as much elements as there are in the Source collection; it assigns to each created element the contents of its counterpart in the Source element. Two collections cannot be assigned to each other if instances of the ItemClass classes cannot be assigned to each other. Errors: If the objects in the collections cannot be assigned to one another, then an EConvertError is raised. See also: TPersistent.Assign (1), TCollectionItem (285)
2.37.9
TCollection.BeginUpdate
Virtual
Synopsis: Start an update batch. Declaration: procedure BeginUpdate; Visibility: public Description: BeginUpdate is called at the beginning of a batch update. It raises the update count with 1. Call BeginUpdate at the beginning of a series of operations that will change the state of the collection. This will avoid the call to TCollection.Update (1) for each operation. At the end of the operations, a corresponding call to EndUpdate must be made. It is best to do this in the context of a Try ... finally block:
279
With MyCollection Do try BeginUpdate; // Some Lengthy operations finally EndUpdate; end; This insures that the number of calls to BeginUpdate always matches the number of calls to TCollection.EndUpdate (1), even in case of an exception. See also: TCollection.EndUpdate (1), TCollection.Changed (1), TCollection.Update (1)
2.37.10
TCollection.Clear
Synopsis: Removes all items from the collection. Declaration: procedure Clear Visibility: public Description: Clear will clear the collection, i.e. each item in the collection is destroyed and removed from memory. After a call to Clear, Count is zero. See also: TCollection.Add (1), TCollectionItem.Destroy (1), TCollection.Destroy (1)
2.37.11
TCollection.EndUpdate
Virtual
Synopsis: Ends an update batch. Declaration: procedure EndUpdate; Visibility: public Description: EndUpdate signals the end of a series of operations that change the state of the collection, possibly triggering an update event. It does this by decreasing the update count with 1 and calling TCollection.Changed (1) it should always be used in conjunction with TCollection.BeginUpdate (1), preferably in the Finally section of a Try ... Finally block. See also: TCollection.BeginUpdate (1), TCollection.Changed (1), TCollection.Update (1)
2.37.12
TCollection.Delete
Synopsis: Delete an item from the collection. Declaration: procedure Delete(Index: Integer) Visibility: public Description: Delete deletes the item at (zero based) position Index from the collection. This will result in a cnDeleted notication. Errors: If an invalid index is specied, an EListError exception is raised. See also: TCollection.Items (1), TCollection.Insert (1), TCollection.Clear (1)
280
2.37.13
TCollection.GetEnumerator
Synopsis: Create an IEnumerator instance Declaration: function GetEnumerator : TCollectionEnumerator Visibility: public Description: GetEnumerator is the implementation of the IEnumerable (1426) interface for TCollection. It creates a TCollectionEnumerator (283) instance and returns its IEnumerator (1426) interface. See also: TCollectionEnumerator (283), IEnumerator (1426), IEnumerable (1426)
2.37.14
TCollection.GetNamePath
Override
Synopsis: Overrides TPersistent.GetNamePath (1) to return a proper pathname. Declaration: function GetNamePath : string; Visibility: public Description: GetNamePath returns the name path for this collection. If the following conditions are satised: 1.There is an owner object. 2.The owner object returns a non-empty name path. 3.The TCollection.Propname (1) property is not empty collection has an owner and the owning object has a name, then the function returns the owner name, followed by the propname. If one of the conditions is not satised, then the classname is returned. See also: TCollection.GetOwner (1), TCollection.Propname (1)
2.37.15
TCollection.Insert
Synopsis: Insert an item in the collection. Declaration: function Insert(Index: Integer) : TCollectionItem Visibility: public Description: Insert creates a new item instance and inserts it in the collection at position Index, and returns the new instance. In contrast, TCollection.Add (1) adds a new item at the end. Errors: None. See also: TCollection.Add (1), TCollection.Delete (1), TCollection.Items (1)
2.37.16
TCollection.FindItemID
Synopsis: Searches for an Item in the collection, based on its TCollectionItem.ID (1) property. Declaration: function FindItemID(ID: Integer) : TCollectionItem Visibility: public
281
Description: FindItemID searches through the collection for the item that has a value of ID for its TCollectionItem.ID (1) property, and returns the found item. If no such item is found in the collection, Nil is returned. The routine performs a linear search, so this can be slow on very large collections. See also: TCollection.Items (1), TCollectionItem.ID (1)
2.37.17
TCollection.Exchange
Synopsis: Exchange 2 items in the collection Declaration: procedure Exchange(const Index1: Integer;const index2: Integer) Visibility: public Description: Exchange exchanges the items at indexes Index1 and Index2 in the collection. Errors: If one of the two indexes is invalid (less than zero or larger than the number of items) an EListError exception is raised. See also: Items (1), TCollectionItem.Index (1)
2.37.18
TCollection.Sort
Synopsis: Sort the items in the collection Declaration: procedure Sort(const Compare: TCollectionSortCompare) Visibility: public Description: Sort sorts the items in the collection, and uses the Compare procedure to compare 2 items in the collection. It is more efcient do use this method than to perform the sort manually, because the list items are manipulated directly. For more information on how the Compare function should behave, see the TCollectionSortCompare (202) type. See also: TCollectionSortCompare (202)
2.37.19
TCollection.Count
Synopsis: Number of items in the collection. Declaration: Property Count : Integer Visibility: public Access: Read Description: Count contains the number of items in the collection. Remark: The items in the collection are identied by their TCollectionItem.Index (1) property, which is a zero-based index, meaning that it can take values between 0 and Count-1, borders included. See also: TCollectionItem.Index (1), TCollection.Items (1)
282
2.37.20
TCollection.ItemClass
Synopsis: Class pointer for each item in the collection. Declaration: Property ItemClass : TCollectionItemClass Visibility: public Access: Read Description: ItemClass is the class pointer with which each new item in the collection is created. It is the value that was passed to the collections constructor when it was created, and does not change during the lifetime of the collection. See also: TCollectionItem (285), TCollection.Items (1)
2.37.21
TCollection.Items
Synopsis: Indexed array of items in the collection. Declaration: Property Items[Index: Integer]: TCollectionItem Visibility: public Access: Read,Write Description: Items provides indexed access to the items in the collection. Since the array is zero-based, Index should be an integer between 0 and Count-1. It is possible to set or retrieve an element in the array. When setting an element of the array, the object that is assigned should be compatible with the class of the objects in the collection, as given by the TCollection.ItemClass (1) property. Adding an element to the array can be done with the TCollection.Add (1) method. The array can be cleared with the TCollection.Clear (1) method. Removing an element of the array should be done by freeing that element. See also: TCollection.Count (1), TCollection.ItemClass (1), TCollection.Clear (1), TCollection.Add (1)
2.38
2.38.1
TCollectionEnumerator
Description
TCollectionEnumerator implements the #rtl.system.IEnumerator (1426) interface for the TCollection (277) class, so the TCollection class can be used in a for ... in loop. It is returned by the TCollection.GetEnumerator (1) method of TCollection. See also: TCollection (277), TCollection.GetEnumerator (1), #rtl.system.IEnumerator (1426)
2.38.2
Page 284 284 284
Method overview
Property Create GetCurrent MoveNext Description Initialize a new instance of TCollectionEnumerator Return the current pointer in the list Move the position of the enumerator to the next position in the collection.
283
2.38.3
Page 284
Property overview
Property Current Access r Description Current pointer in the list
2.38.4
TCollectionEnumerator.Create
Synopsis: Initialize a new instance of TCollectionEnumerator Declaration: constructor Create(ACollection: TCollection) Visibility: public Description: Create initializes a new instance of TCollectionEnumerator and keeps a reference to the collection ACollection that will be enumerated. See also: TCollection (277)
2.38.5
TCollectionEnumerator.GetCurrent
Synopsis: Return the current pointer in the list Declaration: function GetCurrent : TCollectionItem Visibility: public Description: GetCurrent returns the current TCollectionItem (285) instance in the enumerator. Errors: No checking is done on the validity of the current position. See also: MoveNext (1), TCollectionItem (285)
2.38.6
TCollectionEnumerator.MoveNext
Synopsis: Move the position of the enumerator to the next position in the collection. Declaration: function MoveNext : Boolean Visibility: public Description: MoveNext puts the pointer on the next item in the collection, and returns True if this succeeded, or False if the pointer is past the last element in the list. Errors: Note that if False is returned, calling GetCurrent will result in an exception. See also: GetCurrent (1)
2.38.7
TCollectionEnumerator.Current
Synopsis: Current pointer in the list Declaration: Property Current : TCollectionItem Visibility: public Access: Read Description: Current redenes GetCurrent (1) as a property. See also: GetCurrent (1) 284
2.39
2.39.1
TCollectionItem
Description
TCollectionItem and TCollection (277) form a pair of base classes that manage a collection of named objects. The TCollectionItem is the named object that is managed, it represents one item in the collection. An item in the collection is represented by three properties: TCollectionItem.DisplayName (1), TCollection.Index (1) and TCollectionItem.ID (1). A TCollectionItem object is never created directly. To manage a set of named items, it is necessary to make a descendent of TCollectionItem to which needed properties and methods are added. This descendant can then be managed with a TCollection (277) class. The managing collection will create and destroy its items by itself, it should therefore never be necessary to create TCollectionItem descendents manually. See also: TCollection (277)
2.39.2
Page 285 285 286
Method overview
Property Create Destroy GetNamePath Description Creates a new instance of this collection item. Destroyes this collection item. Returns the namepath of this collection item.
2.39.3
Page 286 287 286 287
Property overview
Property Collection DisplayName ID Index Access rw rw r rw Description Pointer to the collection managing this item. Name of the item, displayed in the object inspector. Initial index of this item. Index of the item in its managing collection TCollection.Items (1) property.
2.39.4
TCollectionItem.Create
Virtual
Synopsis: Creates a new instance of this collection item. Declaration: constructor Create(ACollection: TCollection); Visibility: public Description: Create instantiates a new item in a TCollection (277). It is called by the TCollection.Add (1) function and should under normal circumstances never be called directly. called See also: TCollectionItem.Destroy (1)
2.39.5
TCollectionItem.Destroy
Override
Synopsis: Destroyes this collection item. Declaration: destructor Destroy; Visibility: public
285
Description: Destroy removes the item from the managing collection and Destroys the item instance. This is the only way to remove items from a collection; See also: TCollectionItem.Create (1)
2.39.6
TCollectionItem.GetNamePath
Override
Synopsis: Returns the namepath of this collection item. Declaration: function GetNamePath : string; Visibility: public Description: GetNamePath overrides the TPersistent.GetNamePath (1) method to return the name of the managing collection and appends its TCollectionItem.Index (1) property. See also: TCollectionItem.Collection (1), TPersistent.GetNamePath (1), TCollectionItem.Index (1)
2.39.7
TCollectionItem.Collection
Synopsis: Pointer to the collection managing this item. Declaration: Property Collection : TCollection Visibility: public Access: Read,Write Description: Collection points to the collection managing this item. This property can be set to point to a new collection. If this is done, the old collection will be notied that the item should no longer be managed, and the new collection is notied that it should manage this item as well. See also: TCollection (277)
2.39.8
TCollectionItem.ID
Synopsis: Initial index of this item. Declaration: Property ID : Integer Visibility: public Access: Read Description: ID is the initial value of TCollectionItem.Index (1); it doesnt change after the index changes. It can be used to uniquely identify the item. The ID property doesnt change as items are added and removed from the collection. While the TCollectionItem.Index (1) property forms a continuous series, ID does not. If items are removed from the collection, their ID is not used again, leaving gaps. Only when the collection is initialiiy created, the ID and Index properties will be equal. See also: TCollection.Items (1), TCollectionItem.Index (1)
286
2.39.9
TCollectionItem.Index
Synopsis: Index of the item in its managing collection TCollection.Items (1) property. Declaration: Property Index : Integer Visibility: public Access: Read,Write Description: Index is the current index of the item in its managing collections TCollection.Items (1) property. This property may change as items are added and removed from the collection. The index of an item is zero-based, i.e. the rst item has index zero. The last item has index Count-1 where Count is the number of items in the collection. The Index property of the items in a collection form a continuous series ranging from 0 to Count-1. The TCollectionItem.ID (1) property does not form a continuous series, but can also be used to identify an item. See also: TCollectionItem.ID (1), TCollection.Items (1)
2.39.10
TCollectionItem.DisplayName
Synopsis: Name of the item, displayed in the object inspector. Declaration: Property DisplayName : string Visibility: public Access: Read,Write Description: DisplayName contains the name of this item as shown in the object inspector. For TCollectionItem this returns always the class name of the managing collection, followed by the index of the item. TCollectionItem does not implement any functionality to store the DisplayName property. The property can be set, but this will have no effect other than that the managing collection is notied of a change. The actual displayname will remain unchanged. To store the DisplayName property,TCollectionItem descendants should override the TCollectionItem.SetDisplayName (1) and TCollectionItem.GetDisplayName (1) to add storage functionality. See also: TCollectionItem.Index (1), TCollectionItem.ID (1), TCollectionItem.GetDisplayName (1), TCollectionItem.SetDisplayName (1)
2.40
2.40.1
TComponent
Description
TComponent is the base class for any set of classes that needs owner-owned functionality, and which needs support for property streaming. All classes that should be handled by an IDE (Integrated Development Environment) must descend from TComponent, as it includes all support for streaming all its published properties. Components can own other components. TComponent introduces methods for enumerating the child components. It also allows to name the owned components with a unique name. Furthermore, functionality for sending notications when a component is removed from the list or removed from memory alltogether is also introduced in TComponent TComponent introduces a form of automatic memory management: When a component is destroyed, all its child components will be destroyed rst. 287
2.40.2
Page 231 1428
Interfaces overview
Property IInterfaceComponentReference IUnknown Description Interface for checking component references Basic interface for all COM-based interfaces
2.40.3
Page 289 289 289 290 290 290 290 291 291 291 291 292 292 292 293 294 292 291 293 293 293 288
Method overview
Property BeforeDestruction Create Destroy DestroyComponents Destroying ExecuteAction FindComponent FreeNotication FreeOnRelease GetEnumerator GetNamePath GetParentComponent HasParent InsertComponent IsImplementorOf ReferenceInterface RemoveComponent RemoveFreeNotication SafeCallException SetSubComponent UpdateAction WriteState Description Overrides standard BeforeDestruction. Creates a new instance of the component. Destroys the instance of the component. Destroy child components. Called when the component is being destroyed Standard action execution method. Finds and returns the named component in the owned components. Ask the component to notify called when it is being destroyed. Part of the IVCLComObject interface. Create an IEnumerator instance Returns the name path of this component. Returns the parent component. Does the component have a parent ? Insert the given component in the list of owned components. Checks if the current component is the implementor of the interface Interface implementation of Notication Remove the given component from the list of owned components. Remove a component from the Free Notication list. Part of the IVCLComObject Interface. Sets the csSubComponent style. Updates the state of an action. Writes the component to a stream.
2.40.4
Page 294 294 295 294 295 295 296 296 296 297 296
Property overview
Property ComObject ComponentCount ComponentIndex Components ComponentState ComponentStyle DesignInfo Name Owner Tag VCLComObject Access r r rw r r r rw rws r rw rw Description Interface reference implemented by the component Count of owned components Index of component in its owners list. Indexed list (zero-based) of all owned components. Current components state. Current components style. Information for IDE designer. Name of the component. Owner of this component. Tag value of the component. Not implemented.
2.40.5
TComponent.WriteState
Virtual
Description: WriteState writes the components current state to a stream through the writer (407) object writer. Values for all published properties of the component can be written to the stream. Normally there is no need to call WriteState directly. The streaming system calls WriteState itself. The TComponent (287) implementation of WriteState simply calls TWriter.WriteData (1). Descendent classes can, however, override WriteStateto provide additional processing of stream data. See also: ReadState (1), TStream.WriteComponent (1), TWriter.WriteData (1)
2.40.6
TComponent.Create
Virtual
Synopsis: Creates a new instance of the component. Declaration: constructor Create(AOwner: TComponent); Visibility: public Description: Create creates a new instance of a TComponent class. If AOwner is not Nil, the new component attempts to insert itself in the list of owned components of the owner. See also: Insert (1), Owner (1)
2.40.7
TComponent.Destroy
Override
Synopsis: Destroys the instance of the component. Declaration: destructor Destroy; Visibility: public Description: Destroy sends a opRemove notication to all components in the free-notication list. After that, all owned components are destroyed by calling DestroyComponents (1) (and hence removed from the list of owned components). When this is done, the component removes itself from its owners child component list. After that, the parents destroy method is called. See also: Notication (1), Owner (1), DestroyComponents (1), Components (1)
2.40.8
TComponent.BeforeDestruction
Override
Synopsis: Overrides standard BeforeDestruction. Declaration: procedure BeforeDestruction; Visibility: public Description: BeforeDestruction is overridden by TComponent to set the csDestroying ag in TComponent.ComponentState (1) See also: TComponent.ComponentState (1)
289
2.40.9
TComponent.DestroyComponents
Synopsis: Destroy child components. Declaration: procedure DestroyComponents Visibility: public Description: DestroyComponents calls the destructor of all owned components, till no more components are left in the Components (1) array. Calling the destructor of an owned component has as the effect that the component will remove itself from the list of owned components, if nothing has disrupted the sequence of destructors. Errors: If an overridden destroy method does not call its intherited destructor or raises an exception, its TComponent.Destroy (1) destructor will not be called, which may result in an endless loop. See also: Destroy (1), Components (1)
2.40.10
TComponent.Destroying
Synopsis: Called when the component is being destroyed Declaration: procedure Destroying Visibility: public Description: Destroying sets the csDestroying ag in the components state (1) property, and does the same for all owned components. It is not necessary to call Destroying directly, the destructor Destroy (1) does this automatically. See also: State (1), Destroy (1)
2.40.11
TComponent.ExecuteAction
Dynamic
Synopsis: Standard action execution method. Declaration: function ExecuteAction(Action: TBasicAction) : Boolean; Visibility: public Description: ExecuteAction checks whether Action handles the current component, and if yes, calls the ExecuteAction method, passing itself as a parameter. The function returns True if the action handles the current component. See also: TBasicAction (253), TBasicAction.ExecuteAction (1), TBasicAction.HandlesTarget (1), TComponent.UpdateAction (1)
2.40.12
TComponent.FindComponent
Synopsis: Finds and returns the named component in the owned components. Declaration: function FindComponent(const AName: string) : TComponent Visibility: public Description: FindComponent searches the component with name AName in the list of owned components. If AName is empty, then Nil is returned. See also: Components (1), Name (1) 290
2.40.13
TComponent.FreeNotication
Synopsis: Ask the component to notify called when it is being destroyed. Declaration: procedure FreeNotification(AComponent: TComponent) Visibility: public Description: FreeNotification inserts AComponent in the freenotication list. When the component is destroyed, the Notication (1) method is called for all components in the freenotication list. See also: Components (1), Notication (1), TComponent.RemoveFreeNotication (1)
2.40.14
TComponent.RemoveFreeNotication
Synopsis: Remove a component from the Free Notication list. Declaration: procedure RemoveFreeNotification(AComponent: TComponent) Visibility: public Description: RemoveFreeNotification removes AComponent from the freenotication list. See also: TComponent.FreeNotication (1)
2.40.15
TComponent.FreeOnRelease
Synopsis: Part of the IVCLComObject interface. Declaration: procedure FreeOnRelease Visibility: public Description: Provided for Delphi compatibility, but is not yet impltmentedd.
2.40.16
TComponent.GetEnumerator
Synopsis: Create an IEnumerator instance Declaration: function GetEnumerator : TComponentEnumerator Visibility: public Description: GetEnumerator is the implementation of the IEnumerable (1426) interface for TComponent. It creates a TComponentEnumerator (297) instance and returns its IEnumerator (1426) interface. The enumerator enumerates all child components of the component instance. See also: TComponentEnumerator (297), IEnumerator (1426), IEnumerable (1426)
2.40.17
TComponent.GetNamePath
Override
Synopsis: Returns the name path of this component. Declaration: function GetNamePath : string; Visibility: public Description: GetNamePath returns the name of the component as it will be shown in the object inspector. TComponent overrides GetNamePath so it returns the Name (1) property of the component. See also: Name (1), TPersistent.GetNamePath (1) 291
2.40.18
TComponent.GetParentComponent
Dynamic
Synopsis: Returns the parent component. Declaration: function GetParentComponent : TComponent; Visibility: public Description: GetParentComponent can be implemented to return the parent component of this component. The implementation of this method in TComponent always returns Nil. Descendent classes must override this method to return the visual parent of the component. See also: HasParent (1), Owner (1)
2.40.19
TComponent.HasParent
Dynamic
Synopsis: Does the component have a parent ? Declaration: function HasParent : Boolean; Visibility: public Description: HasParent can be implemented to return whether the parent of the component exists. The implementation of this method in TComponent always returns False, and should be overridden by descendent classes to return True when a parent is available. If HasParent returns True, then GetParentComponent (1) will return the parent component. See also: HasParent (1), Owner (1)
2.40.20
TComponent.InsertComponent
Synopsis: Insert the given component in the list of owned components. Declaration: procedure InsertComponent(AComponent: TComponent) Visibility: public Description: InsertComponent attempts to insert AComponent in the list with owned components. It rst calls ValidateComponent (287) to see whether the component can be inserted. It then checks whether there are no name conicts by calling ValidateRename (1). If neither of these checks have raised an exception the component is inserted, and notied of the insert. See also: RemoveComponent (1), Insert (1), ValidateContainer (1), ValidateRename (1), Notication (1)
2.40.21
TComponent.RemoveComponent
Synopsis: Remove the given component from the list of owned components. Declaration: procedure RemoveComponent(AComponent: TComponent) Visibility: public Description: RemoveComponent will send an opRemove notication to AComponent and will then proceed to remove AComponent from the list of owned components. See also: InsertComponent (1), Remove (1), ValidateRename (1), Notication (1)
292
2.40.22
TComponent.SafeCallException
Synopsis: Part of the IVCLComObject Interface. Declaration: function SafeCallException(ExceptObject: TObject;ExceptAddr: Pointer) : HRESULT; Override Visibility: public Description: Provided for Delphi compatibility, but not implemented.
2.40.23
TComponent.SetSubComponent
Synopsis: Sets the csSubComponent style. Declaration: procedure SetSubComponent(ASubComponent: Boolean) Visibility: public Description: SetSubComponent includes csSubComponent in the ComponentStyle (1) property if ASubComponent is True, and excludes it again if ASubComponent is False. See also: TComponent.ComponentStyle (1)
2.40.24
TComponent.UpdateAction
Dynamic
Synopsis: Updates the state of an action. Declaration: function UpdateAction(Action: TBasicAction) : Boolean; Visibility: public Description: UpdateAction checks whether Action handles the current component, and if yes, calls the UpdateTarget method, passing itself as a parameter. The function returns True if the action handles the current component. See also: TBasicAction (253), TBasicAction.UpdateTarget (1), TBasicAction.HandlesTarget (1), TBasicAction.ExecuteAction (1)
2.40.25
TComponent.IsImplementorOf
Synopsis: Checks if the current component is the implementor of the interface Declaration: function IsImplementorOf(const Intf: IInterface) : Boolean Visibility: public Description: IsImplementorOf returns True if the current component implements the given interface. The interface should descend from IInterfaceComponentReference (231) and the GetComponent method should return the current instance. See also: IInterfaceComponentReference (231)
293
2.40.26
TComponent.ReferenceInterface
Synopsis: Interface implementation of Notication Declaration: procedure ReferenceInterface(const intf: IInterface;op: TOperation) Visibility: public Description: ReferenceInterface can be used to notify an interface of a component operation: it is the equivalent of the TComponent.Notication (1) method of TComponent for interfaces. If the interface implements IInterfaceComponentReference (231), then the component that implements the interface is notied of the given operation Op. Errors: None. See also: TComponent.Notication (1), IInterfaceComponentReference (231)
2.40.27
TComponent.ComObject
Synopsis: Interface reference implemented by the component Declaration: Property ComObject : IUnknown Visibility: public Access: Read Description: ComObject returns the COM interface represented by the component. If the component does not represent a COM interface, reading this property will raise an EComponentError (227). See also: EComponentError (227)
2.40.28
TComponent.Components
Synopsis: Indexed list (zero-based) of all owned components. Declaration: Property Components[Index: Integer]: TComponent Visibility: public Access: Read Description: Components provides indexed access to the list of owned components. Index can range from 0 to ComponentCount-1 (1). See also: ComponentCount (1), Owner (1)
2.40.29
TComponent.ComponentCount
Synopsis: Count of owned components Declaration: Property ComponentCount : Integer Visibility: public Access: Read Description: ComponentCount returns the number of components that the current component owns. It can be used to determine the valid index range in the Component (1) array. See also: Components (1), Owner (1) 294
2.40.30
TComponent.ComponentIndex
Synopsis: Index of component in its owners list. Declaration: Property ComponentIndex : Integer Visibility: public Access: Read,Write Description: ComponentIndex is the index of the current component in its owners list of components. If the component has no owner, the value of this property is -1. See also: Components (1), ComponentCount (1), Owner (1)
2.40.31
TComponent.ComponentState
Synopsis: Current components state. Declaration: Property ComponentState : TComponentState Visibility: public Access: Read Description: ComponentState indicates the current state of the component. It is a set of ags which indicate the various stages in the lifetime of a component. The following values can occur in this set: Table 2.18: Component states Flag csLoading csReading csWriting csDestroying csAncestor csUpdating csFixups csFreeNotication csInline csDesignInstance Meaning The component is being loaded from stream Component properties are being read from stream. Component properties are weing written to stream. The component or one of its owners is being destoyed. The component is being streamed as part of a frame The component is being updated References to other components are being resolved The component has freenotications. The component is being loaded as part of a frame ? not used.
The component state is set by various actions such as reading it from stream, destroying it etc. See also: SetAncestor (1), SetDesigning (1), SetInline (1), SetDesignInstance (1), Updating (1), Updated (1), Loaded (1)
2.40.32
TComponent.ComponentStyle
Synopsis: Current components style. Declaration: Property ComponentStyle : TComponentStyle Visibility: public Access: Read Description: Current components style. 295
2.40.33
TComponent.DesignInfo
Synopsis: Information for IDE designer. Declaration: Property DesignInfo : LongInt Visibility: public Access: Read,Write Description: DesignInformation can be used by an IDE to store design information in the component. It should not be used by an application programmer. See also: Tag (1)
2.40.34
TComponent.Owner
Synopsis: Owner of this component. Declaration: Property Owner : TComponent Visibility: public Access: Read Description: Owner returns the owner of this component. The owner cannot be set except by explicitly inserting the component in another components owned components list using that components InsertComponent (1) method, or by removing the component from its owners owned component list using the RemoveComponent (1) method. See also: Components (1), InsertComponent (1), RemoveComponent (1)
2.40.35
TComponent.VCLComObject
Synopsis: Not implemented. Declaration: Property VCLComObject : Pointer Visibility: public Access: Read,Write Description: VCLComObject is not yet implemented in Free Pascal.
2.40.36
TComponent.Name
Synopsis: Name of the component. Declaration: Property Name : TComponentName Visibility: published Access: Read,Write Description: Name is the name of the component. This name should be a valid identier, i.e. must start with a letter or underscore, and can contain only letters, numbers and the underscore character. When attempting to set the name of a component, the name will be checked for validity. Furthermore, when a component is owned by another component, the name must be either empty or must be unique among the child component names. By "letters", 7-bit letters are meant. 296
Errors: Attempting to set the name to an invalid value will result in an exception being raised. See also: ValidateRename (1), Owner (1)
2.40.37
TComponent.Tag
Synopsis: Tag value of the component. Declaration: Property Tag : PtrInt Visibility: published Access: Read,Write Description: Tag can be used to store an integer value in the component. This value is streamed together with all other published properties. It can be used for instance to quickly identify a component in an event handler. See also: Name (1)
2.41
2.41.1
TComponentEnumerator
Description
TComponentEnumerator implements the #rtl.system.IEnumerator (1426) interface for the TComponent (287) class, so the TComponent class can be used in a for ... in loop over the TComponent.Components (1) child components of the component. It is returned by the TComponent.GetEnumerator (1) method of TComponent. See also: TComponent (287), TComponent.GetEnumerator (1), #rtl.system.IEnumerator (1426)
2.41.2
Page 297 298 298
Method overview
Property Create GetCurrent MoveNext Description Initialize a new instance of TComponentEnumerator Return the current pointer in the list Move the position of the enumerator to the next position in the children of the component.
2.41.3
Page 298
Property overview
Property Current Access r Description Current pointer in the list
2.41.4
TComponentEnumerator.Create
Synopsis: Initialize a new instance of TComponentEnumerator Declaration: constructor Create(AComponent: TComponent) Visibility: public Description: Create initializes a new instance of TComponentEnumerator and keeps a reference to the component AComponent that will be enumerated. See also: TComponent (287) 297
2.41.5
TComponentEnumerator.GetCurrent
Synopsis: Return the current pointer in the list Declaration: function GetCurrent : TComponent Visibility: public Description: GetCurrent returns the current TComponent (287) child component instance in the enumerator. Errors: No checking is done on the validity of the current position. See also: MoveNext (1), TComponent.Components (1)
2.41.6
TComponentEnumerator.MoveNext
Synopsis: Move the position of the enumerator to the next position in the children of the component. Declaration: function MoveNext : Boolean Visibility: public Description: MoveNext puts the pointer on the next child in the components child components, and returns True if this succeeded, or False if the pointer is past the last child in the list. Errors: Note that if False is returned, calling GetCurrent will result in an exception. See also: GetCurrent (1)
2.41.7
TComponentEnumerator.Current
Synopsis: Current pointer in the list Declaration: Property Current : TComponent Visibility: public Access: Read Description: Current redenes GetCurrent (1) as a property. See also: GetCurrent (1)
2.42
2.42.1
TCustomMemoryStream
Description
TCustomMemoryStream is the parent class for streams that stored their data in memory. It introduces all needed functions to handle reading from and navigating through the memory, and introduces a Memory (1) property which points to the memory area where the stream data is kept. The only thing which TCustomMemoryStream does not do is obtain memory to store data when writing data or the writing of data. This functionality is implemented in descendent streams such as TMemoryStream (334). The reason for this approach is that this way it is possible to create e.g. read-only descendents of TCustomMemoryStream that point to a xed part in memory which can be read from, but not written to. Remark: Since TCustomMemoryStream is an abstract class, do not create instances of TMemoryStream directly. Instead, create instances of descendents such as TMemoryStream (334). See also: TMemoryStream (334), TStream (362) 298
2.42.2
Page 299 300 299 299
Method overview
Property Read SaveToFile SaveToStream Seek Description Reads Count bytes from the stream into buffer. Writes the contents of the stream to a le. Writes the contents of the memory stream to another stream. Sets a new position in the stream.
2.42.3
Page 300
Property overview
Property Memory Access r Description Pointer to the data kept in the memory stream.
2.42.4
TCustomMemoryStream.Read
Override
Synopsis: Reads Count bytes from the stream into buffer. Declaration: function Read(var Buffer;Count: LongInt) : LongInt; Visibility: public Description: Read reads Count bytes from the stream into the memory pointed to by buffer. It returns the number of bytes actually read. This method overrides the TStream.Read (1) method of TStream (362). It will read as much bytes as are still available in the memory area pointer to by Memory (1). After the bytes are read, the internal stream position is updated. See also: TCustomMemoryStream.Memory (1), TStream.Read (1)
2.42.5
TCustomMemoryStream.Seek
Synopsis: Sets a new position in the stream. Declaration: function Seek(const Offset: Int64;Origin: TSeekOrigin) : Int64 ; Override Visibility: public Description: Seek overrides the abstract TStream.Seek (1) method. It simply updates the internal stream position, and returns the new position. Errors: No checking is done whether the new position is still a valid position, i.e. whether the position is still within the range 0..Size. Attempting a seek outside the valid memory range of the stream may result in an exception at the next read or write operation. See also: TStream.Position (1), TStream.Size (1), TCustomMemoryStream.Memory (1)
2.42.6
TCustomMemoryStream.SaveToStream
Synopsis: Writes the contents of the memory stream to another stream. Declaration: procedure SaveToStream(Stream: TStream) Visibility: public
299
Description: SaveToStream writes the contents of the memory stream to Stream. The content of Stream is not cleared rst. The current position of the memory stream is not changed by this action. Remark: This method will work much faster than the use of the TStream.CopyFrom (1) method: Seek(0,soFromBeginning); Stream.CopyFrom(Self,Size); because the CopyFrom method copies the contents in blocks, while SaveToStream writes the contents of the memory as one big block. Errors: If an error occurs when writing to Stream an EStreamError (229) exception will be raised. See also: TCustomMemoryStream.SaveToFile (1), TStream.CopyFrom (1)
2.42.7
TCustomMemoryStream.SaveToFile
Synopsis: Writes the contents of the stream to a le. Declaration: procedure SaveToFile(const FileName: string) Visibility: public Description: SaveToFile writes the contents of the stream to a le with name FileName. It simply creates a lestream and writes the contents of the memorystream to this le stream using TCustomMemoryStream.SaveToStream (1). Remark: This method will work much faster than the use of the TStream.CopyFrom (1) method: Stream:=TFileStream.Create(fmCreate,FileName); Seek(0,soFromBeginning); Stream.CopyFrom(Self,Size); because the CopyFrom method copies the contents in blocks, while SaveToFile writes the contents of the memory as one big block. Errors: If an error occurs when creating or writing to the le, an EStreamError (229) exception may occur. See also: TCustomMemoryStream.SaveToStream (1), TFileStream (306), TStream.CopyFrom (1)
2.42.8
TCustomMemoryStream.Memory
Synopsis: Pointer to the data kept in the memory stream. Declaration: Property Memory : Pointer Visibility: public Access: Read Description: Memory points to the memory area where stream keeps its data. The property is read-only, so the pointer cannot be set this way. Remark: Do not write to the memory pointed to by Memory, since the memory content may be read-only, and thus writing to it may cause errors. See also: TStream.Size (1)
300
2.43
2.43.1
TDataModule
Description
TDataModule is a container for non-visual objects which can be used in an IDE to group nonvisual objects which can be used by various other containers (forms) in a project. Notably, data access components are typically stored on a datamodule. Web components and services can also be implemented as descendents of datamodules. TDataModule introduces some events which make it easier to program, and provides the needed streaming capabilities for persistent storage. An IDE will typically allow to create a descendent of TDataModule which contains non-visual components in its published property list. See also: TDataModule.OnCreate (1)
2.43.2
Page 302 302 301 302 302
Method overview
Property AfterConstruction BeforeDestruction Create CreateNew Destroy Description Overrides standard TObject (1432) behaviour. Create a new instance of a TDataModule. Destroys the TDataModule instance.
2.43.3
Page 303 303 304 303 303
Property overview
Property DesignOffset DesignSize OldCreateOrder OnCreate OnDestroy Access rw rw rw rw rw Description Position property needed for manipulation in an IDE. Size property needed for manipulation in an IDE. Determines when OnCreate and OnDestroy are triggered. Event handler, called when the datamodule is created. Event handler, called when the datamodule is destroyed.
2.43.4
TDataModule.Create
Override
Synopsis: Create a new instance of a TDataModule. Declaration: constructor Create(AOwner: TComponent); Visibility: public Description: Create creates a new instance of the TDatamodule and calls TDatamodule.CreateNew (1). After that it reads the published properties from a stream using InitInheritedComponent (218) if a descendent class is instantiated. If the OldCreateOrder (1) property is True, the TDataModule.OnCreate (1) event is called. Errors: An exception can be raised during the streaming operation. See also: TDataModule.CreateNew (1)
301
2.43.5
Synopsis:
TDataModule.CreateNew
Declaration: constructor CreateNew(AOwner: TComponent) constructor CreateNew(AOwner: TComponent;CreateMode: Integer); Visibility: default
Virtual
Description: CreateNew creates a new instance of the class, but bypasses the streaming mechanism. The CreateMode parameter (by default zero) is not used in TDataModule. If the AddDataModule (212) handler is set, then it is called, with the newly created instance as an argument. See also: TDataModule.Create (1), AddDataModule (212), TDataModule.OnCreate (1)
2.43.6
TDataModule.Destroy
Override
Synopsis: Destroys the TDataModule instance. Declaration: destructor Destroy; Visibility: public Description: Destroy destroys the TDataModule instance. If the OldCreateOrder (1) property is True the OnDestroy (1) event handler is called prior to destroying the data module. Before calling the inherited destroy, the RemoveDataModule (212) handler is called if it is set, and Self is passed as a parameter. Errors: An event can be raised during the OnDestroy event handler. See also: TDataModule.OnDestroy (1), RemoveDataModule (212)
2.43.7
TDataModule.AfterConstruction
Override
Synopsis: Overrides standard TObject (1432) behaviour. Declaration: procedure AfterConstruction; Visibility: public Description: AfterConstruction calls the OnCreate (1) handler if the OldCreateOrder (1) property is False. See also: TDataModule.OldCreateOrder (1), TDataModule.OnCreate (1)
2.43.8
Synopsis:
TDataModule.BeforeDestruction
Override
Description: BeforeDestruction calls the OnDestroy (1) handler if the OldCreateOrder (1) property is False. See also: TDataModule.OldCreateOrder (1), TDataModule.OnDestroy (1)
302
2.43.9
TDataModule.DesignOffset
Synopsis: Position property needed for manipulation in an IDE. Declaration: Property DesignOffset : TPoint Visibility: public Access: Read,Write Description: DesignOffset is the position of the datamodule when displayed in an IDE. It is streamed to the form le, and should not be used at run-time. See also: TDataModule.DesignSize (1)
2.43.10
TDataModule.DesignSize
Synopsis: Size property needed for manipulation in an IDE. Declaration: Property DesignSize : TPoint Visibility: public Access: Read,Write Description: DesignSize is the size of the datamodule when displayed in an IDE. It is streamed to the form le, and should not be used at run-time. See also: TDataModule.DesignOffset (1)
2.43.11
TDataModule.OnCreate
Synopsis: Event handler, called when the datamodule is created. Declaration: Property OnCreate : TNotifyEvent Visibility: published Access: Read,Write Description: The OnCreate event is triggered when the datamodule is created and streamed. The exact moment of triggering is dependent on the value of the OldCreateOrder (1) property. See also: TDataModule.Create (1), TDataModule.CreateNew (1), TDataModule.OldCreateOrder (1)
2.43.12
TDataModule.OnDestroy
Synopsis: Event handler, called when the datamodule is destroyed. Declaration: Property OnDestroy : TNotifyEvent Visibility: published Access: Read,Write Description: The OnDestroy event is triggered when the datamodule is destroyed The exact moment of triggering is dependent on the value of the OldCreateOrder (1) property. See also: TDataModule.Destroy (1), TDataModule.OnCreate (1), TDataModule.Create (1), TDataModule.CreateNew (1), TDataModule.OldCreateOrder (1) 303
2.43.13
TDataModule.OldCreateOrder
Synopsis: Determines when OnCreate and OnDestroy are triggered. Declaration: Property OldCreateOrder : Boolean Visibility: published Access: Read,Write Description: OldCreateOrder determines when exactly the OnCreate (1) and OnDestroy (1) event handlers are called. If set to True, then the OnCreate event handler is called after the data module was streamed. If it is set to False, then the handler is called prior to the streaming process. If set to True, then the OnDestroy event handler is called before the data module is removed from the streaming system. If it is set to False, then the handler is called after the data module was removed from the streaming process. See also: TDataModule.OnDestroy (1), TDataModule.OnCreate (1), TDataModule.Destroy (1), TDataModule.Create (1), TDataModule.CreateNew (1), TDataModule.OldCreateOrder (1)
2.44
2.44.1
TFiler
Description
2.44.2
Page 305 304
Method overview
Property DeneBinaryProperty DeneProperty Description
2.44.3
Page 305 306 305 305
Property overview
Property Ancestor IgnoreChildren LookupRoot Root Access rw rw r rw Description Ancestor component from which an inherited component is streamed. Determines whether children will be streamed as well. Component used to look up ancestor components. The root component is the initial component which is being streamed.
2.44.4
Synopsis:
TFiler.DeneProperty
Declaration: procedure DefineProperty(const Name: string;ReadData: TReaderProc; WriteData: TWriterProc;HasData: Boolean) ; Virtual; Abstract Visibility: public Description: 304
2.44.5
Synopsis:
TFiler.DeneBinaryProperty
Declaration: procedure DefineBinaryProperty(const Name: string;ReadData: TStreamProc; WriteData: TStreamProc;HasData: Boolean) ; Virtual; Abstract Visibility: public Description:
2.44.6
TFiler.Root
Synopsis: The root component is the initial component which is being streamed. Declaration: Property Root : TComponent Visibility: public Access: Read,Write Description: The streaming process will stream a component and all the components which it owns. The Root component is the component which is initially streamed. See also: LookupRoot (1)
2.44.7
TFiler.LookupRoot
Synopsis: Component used to look up ancestor components. Declaration: Property LookupRoot : TComponent Visibility: public Access: Read Description: When comparing inherited components values against parent values, the values are compared with the component in LookupRoot. Initially, it is set to Root (1). See also: Root (1)
2.44.8
TFiler.Ancestor
Synopsis: Ancestor component from which an inherited component is streamed. Declaration: Property Ancestor : TPersistent Visibility: public Access: Read,Write Description: When streaming a component, this is the parent component. Only properties that differ from the parents property value will be streamed. See also: Root (1), LookupRoot (1)
305
2.44.9
TFiler.IgnoreChildren
Synopsis: Determines whether children will be streamed as well. Declaration: Property IgnoreChildren : Boolean Visibility: public Access: Read,Write Description: By default, all children (i.e. owned objects) will also be streamed when streaming a component. This property can be used to prevent owned objects from being streamed.
2.45
2.45.1
TFileStream
Description
TFileStream is a TStream (362) descdendent that stores or reads its data from a named le in the lesystem of the operating system. To this end, it overrides some of the methods in TStream and implements them for the case of les on disk, and it adds the FileName (1) property to the list of public properties. See also: TFileStream.Create (1), TStream (362)
2.45.2
Page 306 307
Method overview
Property Create Destroy Description Creates a le stream. Destroys the le stream.
2.45.3
Page 307
Property overview
Property FileName Access r Description The lename of the stream.
2.45.4
TFileStream.Create
Synopsis: Creates a le stream. Declaration: constructor Create(const AFileName: string;Mode: Word) constructor Create(const AFileName: string;Mode: Word;Rights: Cardinal) Visibility: default Description: Create creates a new instance of a TFileStream class. It opens the le AFileName with mode Mode, which can have one of the following values: Table 2.19: fmCreate fmOpenRead fmOpenWrite fmOpenReadWrite TFileStream.Create (1) creates a new le if needed. TFileStream.Create (1) opens a le with read-only access. TFileStream.Create (1) opens a le with write-only access. TFileStream.Create (1) opens a le with read-write access.
306
After the le has been opened in the requested mode and a handle has been obtained from the operating system, the inherited constructor is called. Errors: If the le could not be opened in the requested mode, an EFOpenError (228) exception is raised. See also: TStream (362), TFileStream.FileName (1), THandleStream.Create (1)
2.45.5
TFileStream.Destroy
Override
Synopsis: Destroys the le stream. Declaration: destructor Destroy; Visibility: public Description: Destroy closes the le (causing possible buffered data to be written to disk) and then calls the inherited destructor. Do not call destroy directly, instead call the Free method. Destroy does not check whether Self is nil, while Free does. See also: TFileStream.Create (1)
2.45.6
TFileStream.FileName
Synopsis: The lename of the stream. Declaration: Property FileName : string Visibility: public Access: Read Description: FileName is the name of the le that the stream reads from or writes to. It is the name as passed in the constructor of the stream; it cannot be changed. To write to another le, the stream must be freed and created again with the new lename. See also: TFileStream.Create (1)
2.46
2.46.1
TFPList
Description
TFPList is a class that can be used to manage collections of pointers. It introduces methods and properties to store the pointers, search in the list of pointers, sort them. It manages its memory by itself, no intervention for that is needed. Contrary to TList (325), TFPList has no notication mechanism. If no notication mechanism is used, it is better to use TFPList instead of TList, as the performance of TFPList is much higher. To manage collections of strings, it is better to use a TStrings (381) descendent such as TStringList (376). To manage general objects, a TCollection (277) class exists, from which a descendent can be made to manage collections of various kinds. See also: TStrings (381), TCollection (277)
307
2.46.2
Page 309 308 312 309 309 308 309 310 310 310 310 313 311 311 311 311 312 312 312 313
Method overview
Property Add AddList Assign Clear Delete Destroy Error Exchange Expand Extract First ForEachCall GetEnumerator IndexOf Insert Last Move Pack Remove Sort Description Adds a new pointer to the list. Add all pointers from another list Assign performs the given operation on the list. Clears the pointer list. Removes a pointer from the list. Destroys the list and releases the memory used to store the list elements. Raises an EListError (228) exception. Exchanges two pointers in the list. Increases the capacity of the list if needed. Remove the rst occurrence of a pointer from the list. Returns the rst non-nil pointer in the list. Call a procedure or method for each pointer in the list. Create an IEnumerator instance Returns the index of a given pointer. Inserts a new pointer in the list at a given position. Returns the last non-nil pointer in the list. Moves a pointer from one position in the list to another. Removes Nil pointers from the list and frees unused memory. Removes a value from the list. Sorts the pointers in the list.
2.46.3
Page 313 314 314 314
Property overview
Property Capacity Count Items List Access rw rw rw r Description Current capacity (i.e. number of pointers that can be stored) of the list. Current number of pointers in the list. Provides access to the pointers in the list. Memory array where pointers are stored.
2.46.4
TFPList.Destroy
Override
Synopsis: Destroys the list and releases the memory used to store the list elements. Declaration: destructor Destroy; Visibility: public Description: Destroy destroys the list and releases the memory used to store the list elements. The elements themselves are in no way touched, i.e. any meomory they point to must be explicitly released before calling the destructor.
2.46.5
TFPList.AddList
Synopsis: Add all pointers from another list Declaration: procedure AddList(AList: TFPList) Visibility: public Description: AddList adds all pointers from AList to the list. If a pointer is already present, it is added a second time. 308
2.46.6
TFPList.Add
Synopsis: Adds a new pointer to the list. Declaration: function Add(Item: Pointer) : Integer Visibility: public Description: Add adds a new pointer to the list after the last pointer (i.e. at position Count, thus increasing the item count with 1. If the list is at full capacity, the capacity of the list is expanded, using the Grow (1) method. To insert a pointer at a certain position in the list, use the Insert (1) method instead. See also: Delete (1), Grow (1), Insert (1)
2.46.7
TFPList.Clear
Synopsis: Clears the pointer list. Declaration: procedure Clear Visibility: public Description: Clear removes all pointers from the list, and sets the capacity to 0, thus freeing any memory allocated to maintain the list. See also: Destroy (1)
2.46.8
TFPList.Delete
Synopsis: Removes a pointer from the list. Declaration: procedure Delete(Index: Integer) Visibility: public Description: Delete removes the pointer at position Index from the list, shifting all following pointers one position up (or to the left). The memory the pointer is pointing to is not deallocated.
2.46.9
TFPList.Error
Synopsis: Raises an EListError (228) exception. Declaration: class procedure Error(const Msg: string;Data: PtrInt) Visibility: public Description: Error raises an EListError (228) exception, with a message formatted with Msg and Data.
309
2.46.10
TFPList.Exchange
Synopsis: Exchanges two pointers in the list. Declaration: procedure Exchange(Index1: Integer;Index2: Integer) Visibility: public Description: Exchange exchanges the pointers at positions Index1 and Index2. Both pointers must be withing the current range of the list, or an EListError (228) exception will be raised.
2.46.11
TFPList.Expand
Synopsis: Increases the capacity of the list if needed. Declaration: function Expand : TFPList Visibility: public Description: Expand increases the capacity of the list if the current element count matches the current list capacity. The capacity is increased according to the following algorithm: 1.If the capacity is less than 3, the capacity is increased with 4. 2.If the capacity is larger than 3 and less than 8, the capacity is increased with 8. 3.If the capacity is larger than 8, the capacity is increased with 16. The return value is Self. See also: Capacity (1)
2.46.12
TFPList.Extract
Synopsis: Remove the rst occurrence of a pointer from the list. Declaration: function Extract(Item: Pointer) : Pointer Visibility: public Description: Extract searches for the rst occurrence of Item in the list and deletes it from the list. If Item was found, its value is returned. If Item was not found, Nil is returned. See also: TFPList.Delete (1)
2.46.13
TFPList.First
Synopsis: Returns the rst non-nil pointer in the list. Declaration: function First : Pointer Visibility: public Description: First returns the value of the rst non-nil pointer in the list. If there are no pointers in the list or all pointers equal Nil, then Nil is returned. See also: Last (1)
310
2.46.14
TFPList.GetEnumerator
Synopsis: Create an IEnumerator instance Declaration: function GetEnumerator : TFPListEnumerator Visibility: public Description: GetEnumerator is the implementation of the IEnumerable (1426) interface for TFPList. It creates a TFPListEnumerator (314) instance and returns its IEnumerator (1426) interface. See also: TFPListEnumerator (314), IEnumerator (1426), IEnumerable (1426)
2.46.15
TFPList.IndexOf
Synopsis: Returns the index of a given pointer. Declaration: function IndexOf(Item: Pointer) : Integer Visibility: public Description: IndexOf searches for the pointer Item in the list of pointers, and returns the index of the pointer, if found. If no pointer with the value Item was found, -1 is returned.
2.46.16
TFPList.Insert
Synopsis: Inserts a new pointer in the list at a given position. Declaration: procedure Insert(Index: Integer;Item: Pointer) Visibility: public Description: Insert inserts pointer Item at position Index in the list. All pointers starting from Index are shifted to the right. If Index is not a valid position, then a EListError (228) exception is raised. See also: Add (1), Delete (1)
2.46.17
TFPList.Last
Synopsis: Returns the last non-nil pointer in the list. Declaration: function Last : Pointer Visibility: public Description: Last returns the value of the last non-nil pointer in the list. If there are no pointers in the list or all pointers equal Nil, then Nil is returned. See also: First (1)
311
2.46.18
TFPList.Move
Synopsis: Moves a pointer from one position in the list to another. Declaration: procedure Move(CurIndex: Integer;NewIndex: Integer) Visibility: public Description: Move moves the pointer at position CurIndex to position NewIndex. This is done by storing the value at position CurIndex, deleting the pointer at position CurIndex, and reinserting the value at position NewIndex If CurIndex or Newindex are not inside the valid range of indices, an EListError (228) exception is raised. See also: Exchange (1)
2.46.19
TFPList.Assign
Synopsis: Assign performs the given operation on the list. Declaration: procedure Assign(ListA: TFPList;AOperator: TListAssignOp;ListB: TFPList) Visibility: public Description: Assign can be used to merge or assign lists It is an extended version of the usual TPersistent.Assign mechanism. The arguments ListA and ListB are used as sources of pointers to add or remove elements from the current list, depending on the operation AOperation. The available operations are documented in the TListAssignOp (205) type. See also: TFPList.Add (1), TFPList.Clear (1)
2.46.20
TFPList.Remove
Synopsis: Removes a value from the list. Declaration: function Remove(Item: Pointer) : Integer Visibility: public Description: Remove searches Item in the list, and, if it nds it, deletes the item from the list. Only the rst occurrence of Item is removed. See also: Delete (1), IndexOf (1), Insert (1)
2.46.21
TFPList.Pack
Synopsis: Removes Nil pointers from the list and frees unused memory. Declaration: procedure Pack Visibility: public Description: Pack removes all nil pointers from the list. The capacity of the list is then set to the number of pointers in the list. This method can be used to free unused memory if the list has grown to very large sizes and has a lot of unneeded nil pointers in it. See also: TFPList.Clear (1)
312
2.46.22
TFPList.Sort
Synopsis: Sorts the pointers in the list. Declaration: procedure Sort(Compare: TListSortCompare) Visibility: public Description: Sort> sorts the pointers in the list. Two pointers are compared by passing them to the Compare function. The result of this function determines how the pointers will be sorted: If the result of this function is negative, the rst pointer is assumed to be less than the second and will be moved before the second in the list. If the function result is positive, the rst pointer is assumed to be greater than the second and will be moved after the second in the list. if the function result is zero, the pointers are assumed to be equal and no moving will take place. The sort is done using a quicksort algorithm.
2.46.23
TFPList.ForEachCall
Synopsis: Call a procedure or method for each pointer in the list. Declaration: procedure ForEachCall(proc2call: TListCallback;arg: pointer) procedure ForEachCall(proc2call: TListStaticCallback;arg: pointer) Visibility: default Description: ForEachCall iterates over all pointers in the list and calls proc2call, passing it the pointer and the additional arg data pointer. Proc2Call can be a method or a static procedure. Errors: None. See also: TListStaticCallback (206), TListCallback (205)
2.46.24
TFPList.Capacity
Synopsis: Current capacity (i.e. number of pointers that can be stored) of the list. Declaration: Property Capacity : Integer Visibility: public Access: Read,Write Description: Capacity contains the number of pointers the list can store before it starts to grow. If a new pointer is added to the list using add (1) or insert (1), and there is not enough memory to store the new pointer, then the list will try to allocate more memory to store the new pointer. Since this is a time consuming operation, it is important that this operation be performed as little as possible. If it is known how many pointers there will be before lling the list, it is a good idea to set the capacity rst before lling. This ensures that the list doesnt need to grow, and will speed up lling the list. See also: SetCapacity (1), Count (1)
313
2.46.25
TFPList.Count
Synopsis: Current number of pointers in the list. Declaration: Property Count : Integer Visibility: public Access: Read,Write Description: Count is the current number of (possibly Nil) pointers in the list. Since the list is zero-based, the index of the largest pointer is Count-1.
2.46.26
TFPList.Items
Synopsis: Provides access to the pointers in the list. Declaration: Property Items[Index: Integer]: Pointer; default Visibility: public Access: Read,Write Description: Items is used to access the pointers in the list. It is the default property of the TFPList class, so it can be omitted. The list is zero-based, so Index must be in the range 0 to Count-1.
2.46.27
TFPList.List
Synopsis: Memory array where pointers are stored. Declaration: Property List : PPointerList Visibility: public Access: Read Description: List points to the memory space where the pointers are stored. This can be used to quickly copy the list of pinters to another location.
2.47
2.47.1
TFPListEnumerator
Description
TFPListEnumerator implements the #rtl.system.IEnumerator (1426) interface for the TFPList (307) class, so the TFPList class can be used in a for ... in loop. It is returned by the TFPList.GetEnumerator (1) method of TFPList. See also: TFPList (307), TFPList.GetEnumerator (1), #rtl.system.IEnumerator (1426)
2.47.2
Page 315 315 315
Method overview
Property Create GetCurrent MoveNext Description Initialize a new instance of TFPListEnumerator Return the current pointer in the list Move the position of the enumerator to the next position in the list. 314
2.47.3
Page 315
Property overview
Property Current Access r Description Current pointer in the list
2.47.4
TFPListEnumerator.Create
Synopsis: Initialize a new instance of TFPListEnumerator Declaration: constructor Create(AList: TFPList) Visibility: public Description: Create initializes a new instance of TFPListEnumerator and keeps a reference to the list AList that will be enumerated. See also: TFPList (307)
2.47.5
TFPListEnumerator.GetCurrent
Synopsis: Return the current pointer in the list Declaration: function GetCurrent : Pointer Visibility: public Description: GetCurrent returns the current pointer in the enumerator. Errors: No checking is done on the validity of the current position. See also: MoveNext (1)
2.47.6
TFPListEnumerator.MoveNext
Synopsis: Move the position of the enumerator to the next position in the list. Declaration: function MoveNext : Boolean Visibility: public Description: MoveNext puts the pointer on the next item in the list, and returns True if this succeeded, or False if the pointer is past the last element in the list. Errors: Note that if False is returned, calling GetCurrent will result in an exception. See also: GetCurrent (1)
2.47.7
TFPListEnumerator.Current
Synopsis: Current pointer in the list Declaration: Property Current : Pointer Visibility: public Access: Read Description: Current redenes GetCurrent (1) as a property. See also: GetCurrent (1) 315
2.48
2.48.1
THandleStream
Description
THandleStream is an abstract descendent of the TStream (362) class that provides methods for a stream to handle all reading and writing to and from a handle, provided by the underlying OS. To this end, it overrides the Read (1) and Write (1) methods of TStream. Remark: ThandleStream does not obtain a handle from the OS by itself, it just handles reading and writing to such a handle by wrapping the system calls for reading and writing; Descendent classes should obtain a handle from the OS by themselves and pass it on in the inherited constructor. Contrary to Delphi, no seek is implemented for THandleStream, since pipes and sockets do not support this. The seek is implemented in descendent methods that support it. See also: TStream (362), TFileStream (306)
2.48.2
Page 316 317 317 316 317
Method overview
Property Create Read Seek SetSize Write Description Create a handlestream from an OS Handle. Overrides standard read method. Overrides the Seek method. Overrides standard write method.
2.48.3
Page 317
Property overview
Property Handle Access r Description The OS handle of the stream.
2.48.4
THandleStream.SetSize
Declaration: procedure SetSize(NewSize: LongInt); Override procedure SetSize(const NewSize: Int64); Override Visibility: default
2.48.5
THandleStream.Create
Synopsis: Create a handlestream from an OS Handle. Declaration: constructor Create(AHandle: THandle) Visibility: public Description: Create creates a new instance of a THandleStream class. It stores AHandle in an internal variable and then calls the inherited constructor. See also: TStream (362)
316
2.48.6
THandleStream.Read
Override
Synopsis: Overrides standard read method. Declaration: function Read(var Buffer;Count: LongInt) : LongInt; Visibility: public Description: Read overrides the Read (1) method of TStream. It uses the Handle (1) property to read the Count bytes into Buffer If no error occurs while reading, the number of bytes actually read will be returned. Errors: If the operating system reports an error while reading from the handle, -1 is returned. See also: TStream.Read (1), THandleStream.Write (1), THandleStream.Handle (1)
2.48.7
THandleStream.Write
Override
Synopsis: Overrides standard write method. Declaration: function Write(const Buffer;Count: LongInt) : LongInt; Visibility: public Description: Write overrides the Write (1) method of TStream. It uses the Handle (1) property to write the Count bytes from Buffer. If no error occurs while writing, the number of bytes actually written will be returned. Errors: If the operating system reports an error while writing to the handle, 0 is returned. See also: TStream.Read (1), THandleStream.Write (1), THandleStream.Handle (1)
2.48.8
THandleStream.Seek
Synopsis: Overrides the Seek method. Declaration: function Seek(const Offset: Int64;Origin: TSeekOrigin) : Int64 ; Override Visibility: public Description: seek uses the FileSeek (1517) method to position the stream on the desired position. Note that handle stream descendents (notably pipes) can override the method to prevent the seek.
2.48.9
THandleStream.Handle
Synopsis: The OS handle of the stream. Declaration: Property Handle : THandle Visibility: public Access: Read Description: Handle represents the Operating system handle to which reading and writing is done. The handle can be read only, i.e. it cannot be set after the THandlestream instance was created. It should be passed to the constructor THandleStream.Create (1) See also: THandleStream (316), THandleStream.Create (1) 317
2.49
2.49.1
TInterfacedPersistent
Description
TInterfacedPersistent is a direct descendent of TPersistent (344) which implements the #rtl.system.IInterface (1253) interface. In particular, it implements the QueryInterface as a public method. See also: IInterface (1253)
2.49.2
Page 1253
Interfaces overview
Property IInterface Description Basic interface for all COM based interfaces
2.49.3
Page 318 318
Method overview
Property AfterConstruction QueryInterface Description Overrides the standard AfterConstruction method. Implementation of IInterface.QueryInterface
2.49.4
TInterfacedPersistent.QueryInterface
Virtual
Synopsis: Implementation of IInterface.QueryInterface Declaration: function QueryInterface(const IID: TGuid;out Obj) : HRESULT; Visibility: public Description: QueryInterface simply calls GetInterface using the specied IID, and returns the correct values. See also: TObject.GetInterface (1440)
2.49.5
TInterfacedPersistent.AfterConstruction
Override
Synopsis: Overrides the standard AfterConstruction method. Declaration: procedure AfterConstruction; Visibility: public Description: AfterConstruction is overridden to do some extra interface housekeeping: a reference to the IInterface interface of the owning class is obtained (if it exists).
2.50
2.50.1
TInterfaceList
Description
TInterfaceList is a standard implementation of the IInterfaceList (232) interface. It uses a TThreadList (404) instance to store the list of interfaces. See also: IInterfaceList (232), TList (325)
318
2.50.2
Page 232
Interfaces overview
Property IInterfaceList Description Interface for maintaining a list of interfaces.
2.50.3
Page 321 320 319 320 319 320 323 320 321 321 321 322 322 322 322
Method overview
Property Add Clear Create Delete Destroy Exchange Expand First GetEnumerator IndexOf Insert Last Lock Remove Unlock Description Add an interface to the list Removes all interfaces from the list. Create a new instance of TInterfaceList Delete an interface from the list. Destroys the list of interfaces Exchange 2 interfaces in the list Expands the list Returns the rst non-Nil element in the list. Create an IEnumerator instance Returns the index of an interface. Insert an interface to the list Returns the last non-Nil element in the list. Lock the list Remove an interface from the list UnLocks a locked list
2.50.4
Page 323 323 323
Property overview
Property Capacity Count Items Access rw rw rw Description The current capacity of the list. The current number of elements in the list. Array-based access to the lists items.
2.50.5
TInterfaceList.Create
Synopsis: Create a new instance of TInterfaceList Declaration: constructor Create Visibility: public Description: Create creates a new instance of the TInterfaceList class. It sets up the internal structures needed to store the list of interfaces. See also: Destroy (1)
2.50.6
TInterfaceList.Destroy
Override
Synopsis: Destroys the list of interfaces Declaration: destructor Destroy; Visibility: public Description: Destroy rst calls Clear (1) and then frees the TInterfaceList instance from memory. Note that the Clear method decreases the reference count of all interfaces. See also: Create (1), Clear (1) 319
2.50.7
TInterfaceList.Clear
Synopsis: Removes all interfaces from the list. Declaration: procedure Clear Visibility: public Description: Clear is the implementation of the IInterfaceList.Clear (1) method. It removes all interfaces from the list. It does this by setting each element in the list to Nil, in this way the reference count of each interface in the list is descreased. See also: IInterfaceList.Clear (1), Add (1), Destroy (1), TList.Clear (1), TFPList.Clear (1)
2.50.8
TInterfaceList.Delete
Synopsis: Delete an interface from the list. Declaration: procedure Delete(index: Integer) Visibility: public Description: Delete is the implementation of the IInterfaceList.Delete (1) method. It clears the slot rst and then removes the element from the list. See also: IInterfaceList.Delete (1), TInterfaceList.Remove (1), TInterfaceList.Add (1), TList.Delete (1), TFPList.Delete (1)
2.50.9
TInterfaceList.Exchange
Synopsis: Exchange 2 interfaces in the list Declaration: procedure Exchange(index1: Integer;index2: Integer) Visibility: public Description: Exchange is the implementation of the IInterfaceList.Exchange (1) method. It exchanges the position of 2 interfaces in the list. See also: IInterfaceList.Exchange (1), TInterfaceList.Delete (1), TInterfaceList.Add (1), TList.Exchange (1), TFPList.Exchange (1)
2.50.10
TInterfaceList.First
Synopsis: Returns the rst non-Nil element in the list. Declaration: function First : IUnknown Visibility: public Description: First is the implementation of the IInterfaceList.First (1) method. It returns the rst non-Nil element from the list. See also: IInterfaceList.First (1), TList.First (1)
320
2.50.11
TInterfaceList.GetEnumerator
Synopsis: Create an IEnumerator instance Declaration: function GetEnumerator : TInterfaceListEnumerator Visibility: public Description: GetEnumerator is the implementation of the IEnumerable (1426) interface for TInterfaceList. It creates a TInterfaceListEnumerator (324) instance and returns its IEnumerator (1426) interface. The enumerator enumerates all interfaces in the list. See also: TInterfaceListEnumerator (324), IEnumerator (1426), IEnumerable (1426)
2.50.12
TInterfaceList.IndexOf
Synopsis: Returns the index of an interface. Declaration: function IndexOf(item: IUnknown) : Integer Visibility: public Description: IndexOf is the implementation of the IInterfaceList.IndexOf (1) method. It returns the zero-based index in the list of the indicated interface, or -1 if the index is not in the list. See also: IInterfaceList.IndexOf (1), TList.IndexOf (1)
2.50.13
TInterfaceList.Add
Synopsis: Add an interface to the list Declaration: function Add(item: IUnknown) : Integer Visibility: public Description: Add is the implementation of the IInterfaceList.Add (1) method. It adds an interface to the list, and returns the location of the new element in the list. This operation will increment the reference count of the interface. See also: IInterfaceList.Add (1), TInterfaceList.Delete (1), TInterfaceList.Insert (1), TList.Add (1), TFPList.Add (1)
2.50.14
TInterfaceList.Insert
Synopsis: Insert an interface to the list Declaration: procedure Insert(i: Integer;item: IUnknown) Visibility: public Description: Insert is the implementation of the IInterfaceList.Insert (1) method. It inserts an interface in the list at the indicated position. This operation will increment the reference count of the interface. See also: IInterfaceList.Insert (1), TInterfaceList.Delete (1), TInterfaceList.Add (1), TList.Insert (1), TFPList.Insert (1)
321
2.50.15
TInterfaceList.Last
Synopsis: Returns the last non-Nil element in the list. Declaration: function Last : IUnknown Visibility: public Description: Last is the implementation of the IInterfaceList.Last (1) method. It returns the last non-Nil element from the list. See also: IInterfaceList.Last (1), TInterfaceList.First (1), TList.Last (1), TFPList.Last (1)
2.50.16
TInterfaceList.Remove
Synopsis: Remove an interface from the list Declaration: function Remove(item: IUnknown) : Integer Visibility: public Description: Remove is the implementation of the IInterfaceList.Remove (1) method. It removes the rst occurrence of the interface from the list. See also: IInterfaceList.Remove (1), TInterfaceList.Delete (1), TInterfaceList.IndexOf (1), TList.Remove (1), TFPList.Remove (1)
2.50.17
TInterfaceList.Lock
Synopsis: Lock the list Declaration: procedure Lock Visibility: public Description: Lock locks the list. It is the implementation of the IInterfaceList.Lock (1) method. It limits access to the list to the current thread. See also: IInterfaceList.Lock (1), TInterfaceList.UnLock (1), TThreadList.LockList (1)
2.50.18
TInterfaceList.Unlock
Synopsis: UnLocks a locked list Declaration: procedure Unlock Visibility: public Description: UnLock unlocks the list. It is the implementation of the IInterfaceList.UnLock (1) method. After a call to unlock, the current thread releases the list for manipulation by other threads. See also: IInterfaceList.UnLock (1), TInterfaceList.Lock (1), TThreadList.UnLockList (1)
322
2.50.19
TInterfaceList.Expand
Synopsis: Expands the list Declaration: function Expand : TInterfaceList Visibility: public Description: Expand calls the expand method from the internally used list. It returns itself. See also: TList.Expand (1)
2.50.20
TInterfaceList.Capacity
Synopsis: The current capacity of the list. Declaration: Property Capacity : Integer Visibility: public Access: Read,Write Description: Capacity is the number of elements that the list can contain without needing to allocate more memory. See also: IInterfaceList.Capacity (1), TInterfaceList.Count (1), TList.Capacity (1), TFPList.Capacity (1)
2.50.21
TInterfaceList.Count
Synopsis: The current number of elements in the list. Declaration: Property Count : Integer Visibility: public Access: Read,Write Description: Count is the number of elements in the list. This can include Nil elements. Note that the elements are zero-based, and thus are indexed from 0 to Count-1. See also: IInterfaceList.Count (1), TInterfaceList.Items (1), TInterfaceList.Capacity (1), TList.Count (1), TFPList.Count (1)
2.50.22
TInterfaceList.Items
Synopsis: Array-based access to the lists items. Declaration: Property Items[Index: Integer]: IUnknown; default Visibility: public Access: Read,Write Description: Items provides indexed access to the elements in the list. Note that the elements are zero-based, and thus are indexed from 0 to Count-1. The items are read-write. It is not possible to add elements to the list by accessing an element with index larger or equal to Count (1). See also: IInterfaceList.Items (1), TInterfaceList.Count (1), TList.Items (1), TFPList.Items (1)
323
2.51
2.51.1
TInterfaceListEnumerator
Description
TInterfaceListEnumerator implements the #rtl.system.IEnumerator (1426) interface for the TInterfaceList (318) class, so the TInterfaceList class can be used in a for ... in loop over the TInterfaceList.Components (1) child components of the component. It is returned by the TInterfaceList.GetEnumerator (1) method of TInterfaceList. See also: TInterfaceList (318), TInterfaceList.GetEnumerator (1), #rtl.system.IEnumerator (1426)
2.51.2
Page 324 324 325
Method overview
Property Create GetCurrent MoveNext Description Initialize a new instance of TInterfaceListEnumerator Return the current pointer in the list Move the position of the enumerator to the next position in the children of the component.
2.51.3
Page 325
Property overview
Property Current Access r Description Current pointer in the list
2.51.4
TInterfaceListEnumerator.Create
Synopsis: Initialize a new instance of TInterfaceListEnumerator Declaration: constructor Create(AList: TInterfaceList) Visibility: public Description: Create initializes a new instance of TInterfaceListEnumerator and keeps a reference to the component AComponent that will be enumerated. See also: TInterfaceList (318)
2.51.5
TInterfaceListEnumerator.GetCurrent
Synopsis: Return the current pointer in the list Declaration: function GetCurrent : IUnknown Visibility: public Description: GetCurrent returns the current interface in the TInterfaceList (318) list. Errors: No checking is done on the validity of the current position. See also: MoveNext (1), TInterfaceList.Components (1)
324
2.51.6
TInterfaceListEnumerator.MoveNext
Synopsis: Move the position of the enumerator to the next position in the children of the component. Declaration: function MoveNext : Boolean Visibility: public Description: MoveNext puts the pointer on the next interface in the list, and returns True if this succeeded, or False if the pointer is past the last interface in the list. Errors: Note that if False is returned, calling GetCurrent will result in an exception. See also: GetCurrent (1)
2.51.7
TInterfaceListEnumerator.Current
Synopsis: Current pointer in the list Declaration: Property Current : IUnknown Visibility: public Access: Read Description: Current redenes GetCurrent (1) as a property. See also: GetCurrent (1)
2.52
2.52.1
TList
Description
TList is a class that can be used to manage collections of pointers. It introduces methods and properties to store the pointers, search in the list of pointers, sort them. It manages its memory by itself, no intervention for that is needed. It has an event notication mechanism which allows to notify of list changes. This slows down some of TList mechanisms, and if no notication is used, TFPList (307) may be used instead. To manage collections of strings, it is better to use a TStrings (381) descendent such as TStringList (376). To manage general objects, a TCollection (277) class exists, from which a descendent can be made to manage collections of various kinds. See also: TStrings (381), TCollection (277)
325
2.52.2
Page 327 327 330 327 326 327 326 328 328 328 328 329 329 329 329 330 330 331 330 331
Method overview
Property Add AddList Assign Clear Create Delete Destroy Error Exchange Expand Extract First GetEnumerator IndexOf Insert Last Move Pack Remove Sort Description Adds a new pointer to the list. Add all pointers from another list Copy the contents of other lists. Clears the pointer list. Class to manage collections of pointers. Removes a pointer from the list. Destroys the list and releases the memory used to store the list elements. Raises an EListError (228) exception. Exchanges two pointers in the list. Increases the capacity of the list if needed. Remove the rst occurrence of a pointer from the list. Returns the rst non-nil pointer in the list. Create an IEnumerator instance Returns the index of a given pointer. Inserts a new pointer in the list at a given position. Returns the last non-nil pointer in the list. Moves a pointer from one position in the list to another. Removes Nil pointers from the list and frees unused memory. Removes a value from the list. Sorts the pointers in the list.
2.52.3
Page 331 332 332 332
Property overview
Property Capacity Count Items List Access rw rw rw r Description Current capacity (i.e. number of pointers that can be stored) of the list. Current number of pointers in the list. Provides access to the pointers in the list. Memory array where pointers are stored.
2.52.4
TList.Create
Synopsis: Class to manage collections of pointers. Declaration: constructor Create Visibility: public Description: TList.Create creates a new instance of TList. It clears the list and prepares it for use. See also: TList (325), TList.Destroy (1)
2.52.5
TList.Destroy
Override
Synopsis: Destroys the list and releases the memory used to store the list elements. Declaration: destructor Destroy; Visibility: public Description: Destroy destroys the list and releases the memory used to store the list elements. The elements themselves are in no way touched, i.e. any meomory they point to must be explicitly released before calling the destructor. 326
2.52.6
TList.AddList
Synopsis: Add all pointers from another list Declaration: procedure AddList(AList: TList) Visibility: public Description: AddList adds all pointers from AList to the list. If a pointer is already present, it is added a second time. See also: TList.Assign (1), TFPList.AddList (1)
2.52.7
TList.Add
Synopsis: Adds a new pointer to the list. Declaration: function Add(Item: Pointer) : Integer Visibility: public Description: Add adds a new pointer to the list after the last pointer (i.e. at position Count, thus increasing the item count with 1. If the list is at full capacity, the capacity of the list is expanded, using the Grow (1) method. To insert a pointer at a certain position in the list, use the Insert (1) method instead. See also: Delete (1), Grow (1), Insert (1)
2.52.8
TList.Clear
Virtual
Synopsis: Clears the pointer list. Declaration: procedure Clear; Visibility: public Description: Clear removes all pointers from the list, and sets the capacity to 0, thus freeing any memory allocated to maintain the list. See also: Destroy (1)
2.52.9
TList.Delete
Synopsis: Removes a pointer from the list. Declaration: procedure Delete(Index: Integer) Visibility: public Description: Delete removes the pointer at position Index from the list, shifting all following pointers one position up (or to the left). The memory the pointer is pointing to is not deallocated.
327
2.52.10
TList.Error
Virtual
Synopsis: Raises an EListError (228) exception. Declaration: class procedure Error(const Msg: string;Data: PtrInt); Visibility: public Description: Error raises an EListError (228) exception, with a message formatted with Msg and Data.
2.52.11
TList.Exchange
Synopsis: Exchanges two pointers in the list. Declaration: procedure Exchange(Index1: Integer;Index2: Integer) Visibility: public Description: Exchange exchanges the pointers at positions Index1 and Index2. Both pointers must be withing the current range of the list, or an EListError (228) exception will be raised.
2.52.12
TList.Expand
Synopsis: Increases the capacity of the list if needed. Declaration: function Expand : TList Visibility: public Description: Expand increases the capacity of the list if the current element count matches the current list capacity. The capacity is increased according to the following algorithm: 1.If the capacity is less than 3, the capacity is increased with 4. 2.If the capacity is larger than 3 and less than 8, the capacity is increased with 8. 3.If the capacity is larger than 8, the capacity is increased with 16. The return value is Self. See also: Capacity (1)
2.52.13
TList.Extract
Synopsis: Remove the rst occurrence of a pointer from the list. Declaration: function Extract(item: Pointer) : Pointer Visibility: public Description: Extract searched for an occurence of item, and if a match is found, the match is deleted from the list. If no match is found, nothing is deleted. If Item was found, the result is Item. If Item was not found, the result is Nil. A lnExtracted notication event is triggered if an element is extracted from the list. See also: TList.Delete (1), TList.IndexOf (1), TList.Remove (1)
328
2.52.14
TList.First
Synopsis: Returns the rst non-nil pointer in the list. Declaration: function First : Pointer Visibility: public Description: First returns the value of the rst non-nil pointer in the list. If there are no pointers in the list or all pointers equal Nil, then Nil is returned. See also: Last (1)
2.52.15
TList.GetEnumerator
Synopsis: Create an IEnumerator instance Declaration: function GetEnumerator : TListEnumerator Visibility: public Description: GetEnumerator is the implementation of the IEnumerable (1426) interface for TList. It creates a TListEnumerator (332) instance and returns its IEnumerator (1426) interface. See also: TListEnumerator (332), IEnumerator (1426), IEnumerable (1426)
2.52.16
TList.IndexOf
Synopsis: Returns the index of a given pointer. Declaration: function IndexOf(Item: Pointer) : Integer Visibility: public Description: IndexOf searches for the pointer Item in the list of pointers, and returns the index of the pointer, if found. If no pointer with the value Item was found, -1 is returned.
2.52.17
TList.Insert
Synopsis: Inserts a new pointer in the list at a given position. Declaration: procedure Insert(Index: Integer;Item: Pointer) Visibility: public Description: Insert inserts pointer Item at position Index in the list. All pointers starting from Index are shifted to the right. If Index is not a valid position, then a EListError (228) exception is raised. See also: Add (1), Delete (1)
329
2.52.18
TList.Last
Synopsis: Returns the last non-nil pointer in the list. Declaration: function Last : Pointer Visibility: public Description: Last returns the value of the last non-nil pointer in the list. If there are no pointers in the list or all pointers equal Nil, then Nil is returned. See also: First (1)
2.52.19
TList.Move
Synopsis: Moves a pointer from one position in the list to another. Declaration: procedure Move(CurIndex: Integer;NewIndex: Integer) Visibility: public Description: Move moves the pointer at position CurIndex to position NewIndex. This is done by storing the value at position CurIndex, deleting the pointer at position CurIndex, and reinserting the value at position NewIndex If CurIndex or Newindex are not inside the valid range of indices, an EListError (228) exception is raised. See also: Exchange (1)
2.52.20
TList.Assign
Synopsis: Copy the contents of other lists. Declaration: procedure Assign(ListA: TList;AOperator: TListAssignOp;ListB: TList) Visibility: public Description: Assign can be used to merge or assign lists It is an extended version of the usual TPersistent.Assign mechanism. The arguments ListA and ListB are used as sources of pointers to add or remove elements from the current list, depending on the operation AOperation. The available operations are documented in the TListAssignOp (205) type. See also: TList.Clear (1)
2.52.21
TList.Remove
Synopsis: Removes a value from the list. Declaration: function Remove(Item: Pointer) : Integer Visibility: public Description: Remove searches Item in the list, and, if it nds it, deletes the item from the list. Only the rst occurrence of Item is removed. See also: Delete (1), IndexOf (1), Insert (1)
330
2.52.22
TList.Pack
Synopsis: Removes Nil pointers from the list and frees unused memory. Declaration: procedure Pack Visibility: public Description: Pack removes all nil pointers from the list. The capacity of the list is then set to the number of pointers in the list. This method can be used to free unused memory if the list has grown to very large sizes and has a lot of unneeded nil pointers in it. See also: TList.Clear (1)
2.52.23
TList.Sort
Synopsis: Sorts the pointers in the list. Declaration: procedure Sort(Compare: TListSortCompare) Visibility: public Description: Sort> sorts the pointers in the list. Two pointers are compared by passing them to the Compare function. The result of this function determines how the pointers will be sorted: If the result of this function is negative, the rst pointer is assumed to be less than the second and will be moved before the second in the list. If the function result is positive, the rst pointer is assumed to be greater than the second and will be moved after the second in the list. if the function result is zero, the pointers are assumed to be equal and no moving will take place. The sort is done using a quicksort algorithm.
2.52.24
TList.Capacity
Synopsis: Current capacity (i.e. number of pointers that can be stored) of the list. Declaration: Property Capacity : Integer Visibility: public Access: Read,Write Description: Capacity contains the number of pointers the list can store before it starts to grow. If a new pointer is added to the list using add (1) or insert (1), and there is not enough memory to store the new pointer, then the list will try to allocate more memory to store the new pointer. Since this is a time consuming operation, it is important that this operation be performed as little as possible. If it is known how many pointers there will be before lling the list, it is a good idea to set the capacity rst before lling. This ensures that the list doesnt need to grow, and will speed up lling the list. See also: SetCapacity (1), Count (1)
331
2.52.25
TList.Count
Synopsis: Current number of pointers in the list. Declaration: Property Count : Integer Visibility: public Access: Read,Write Description: Count is the current number of (possibly Nil) pointers in the list. Since the list is zero-based, the index of the largest pointer is Count-1.
2.52.26
TList.Items
Synopsis: Provides access to the pointers in the list. Declaration: Property Items[Index: Integer]: Pointer; default Visibility: public Access: Read,Write Description: Items is used to access the pointers in the list. It is the default property of the TList class, so it can be omitted. The list is zero-based, so Index must be in the range 0 to Count-1.
2.52.27
TList.List
Synopsis: Memory array where pointers are stored. Declaration: Property List : PPointerList Visibility: public Access: Read Description: List points to the memory space where the pointers are stored. This can be used to quickly copy the list of pinters to another location.
2.53
2.53.1
TListEnumerator
Description
TListEnumerator implements the #rtl.system.IEnumerator (1426) interface for the TList (325) class, so the TList class can be used in a for ... in loop. It is returned by the TList.GetEnumerator (1) method of TList. See also: TList (325), TList.GetEnumerator (1), #rtl.system.IEnumerator (1426)
2.53.2
Page 333 333 333
Method overview
Property Create GetCurrent MoveNext Description Initialize a new instance of TListEnumerator Return the current pointer in the list Move the position of the enumerator to the next position in the list. 332
2.53.3
Page 333
Property overview
Property Current Access r Description Current pointer in the list
2.53.4
TListEnumerator.Create
Synopsis: Initialize a new instance of TListEnumerator Declaration: constructor Create(AList: TList) Visibility: public Description: Create initializes a new instance of TListEnumerator and keeps a reference to the list AList that will be enumerated. See also: TList (325)
2.53.5
TListEnumerator.GetCurrent
Synopsis: Return the current pointer in the list Declaration: function GetCurrent : Pointer Visibility: public Description: GetCurrent returns the current pointer in the enumerator. Errors: No checking is done on the validity of the current position. See also: MoveNext (1)
2.53.6
TListEnumerator.MoveNext
Synopsis: Move the position of the enumerator to the next position in the list. Declaration: function MoveNext : Boolean Visibility: public Description: MoveNext puts the pointer on the next item in the list, and returns True if this succeeded, or False if the pointer is past the last element in the list. Errors: Note that if False is returned, calling GetCurrent will result in an exception. See also: GetCurrent (1)
2.53.7
TListEnumerator.Current
Synopsis: Current pointer in the list Declaration: Property Current : Pointer Visibility: public Access: Read Description: Current redenes GetCurrent (1) as a property. See also: GetCurrent (1) 333
2.54
2.54.1
TMemoryStream
Description
TMemoryStream is a TStream (362) descendent that stores its data in memory. It descends directly from TCustomMemoryStream (298) and implements the necessary to allocate and de-allocate memory directly from the heap. It implements the Write (1) method which is missing in TCustomMemoryStream. TMemoryStream also introduces methods to load the contents of another stream or a le into the memory stream. It is not necessary to do any memory management manually, as the stream will allocate or de-allocate memory as needed. When the stream is freed, all allocated memory will be freed as well. See also: TCustomMemoryStream (298), TStream (362)
2.54.2
Page 334 334 335 334 335 335
Method overview
Property Clear Destroy LoadFromFile LoadFromStream SetSize Write Description Zeroes the position, capacity and size of the stream. Frees any allocated memory and destroys the memory stream. Loads the contents of a le into memory. Loads the contents of a stream into memory. Sets the size for the memory stream. Writes data to the streams memory.
2.54.3
TMemoryStream.Destroy
Override
Synopsis: Frees any allocated memory and destroys the memory stream. Declaration: destructor Destroy; Visibility: public Description: Destroy clears the memory stream, thus in effect freeing any memory allocated for it, and then frees the memory stream.
2.54.4
TMemoryStream.Clear
Synopsis: Zeroes the position, capacity and size of the stream. Declaration: procedure Clear Visibility: public Description: Clear sets the position and size to 0, and sets the capacity of the stream to 0, thus freeing all memory allocated for the stream. See also: TStream.Size (1), TStream.Position (1), TCustomMemoryStream.Memory (1)
2.54.5
TMemoryStream.LoadFromStream
Synopsis: Loads the contents of a stream into memory. Declaration: procedure LoadFromStream(Stream: TStream)
334
Visibility: public Description: LoadFromStream loads the contents of Stream into the memorybuffer of the stream. Any previous contents of the memory stream are overwritten. Memory is allocated as needed. Remark: The LoadFromStream uses the Size (1) property of Stream to determine how much memory must be allocated. Some streams do not allow the stream size to be determined, so care must be taken when using this method. This method will work much faster than the use of the TStream.CopyFrom (1) method: Seek(0,soFromBeginning); CopyFrom(Stream,Stream.Size); because the CopyFrom method copies the contents in blocks, while LoadFromStream reads the contents of the stream as one big block. Errors: If an error occurs when reading from the stream, an EStreamError (229) may occur. See also: TStream.CopyFrom (1), TMemoryStream.LoadFromFile (1)
2.54.6
TMemoryStream.LoadFromFile
Synopsis: Loads the contents of a le into memory. Declaration: procedure LoadFromFile(const FileName: string) Visibility: public Description: LoadFromFile loads the contents of the le with name FileName into the memory stream. The current contents of the memory stream is replaced by the contents of the le. Memory is allocated as needed. The LoadFromFile method simply creates a lestream and then calls the TMemoryStream.LoadFromStream (1) method. See also: TMemoryStream.LoadFromStream (1)
2.54.7
TMemoryStream.SetSize
Override
Synopsis: Sets the size for the memory stream. Declaration: procedure SetSize(NewSize: PtrInt); Visibility: public Description: SetSize sets the size of the memory stream to NewSize. This will set the capacity of the stream to NewSize and correct the current position in the stream when needed. See also: TStream.Position (1), TStream.Size (1)
2.54.8
TMemoryStream.Write
Override
Synopsis: Writes data to the streams memory. Declaration: function Write(const Buffer;Count: LongInt) : LongInt; Visibility: public
335
Description: Write writes Count bytes from Buffer to the streams memory, starting at the current position in the stream. If more memory is needed than currently allocated, more memory will be allocated. Any contents in the memory stream at the current position will be overwritten. The function returns the number of bytes actually written (which should under normal circumstances always equal Count). This method overrides the TStream.Write (1) method. Errors: If no more memory could be allocated, then an exception will be raised. See also: TCustomMemoryStream.Read (1)
2.55
2.55.1
TOwnedCollection
Description
TOwnedCollection automatically maintains owner information, so it can be displayed in an IDE. Collections that should be displayed in an IDE should descend from TOwnedCollection or must implement a GetOwner function. See also: TCollection (277)
2.55.2
Page 336
Method overview
Property Create Description Create a new TOwnerCollection instance.
2.55.3
TOwnedCollection.Create
Synopsis: Create a new TOwnerCollection instance. Declaration: constructor Create(AOwner: TPersistent;AItemClass: TCollectionItemClass) Visibility: public Description: Create creates a new instance of TOwnedCollection and stores the AOwner references. It will the value returned in the TCollection.Owner (1) property of the collection. The ItemClass class reference is passed on to the inherited constructor, and will be used to create new instances in the Insert (1) and Add (1) methods. See also: TCollection.Create (1), TCollection.Owner (1)
2.56
2.56.1
TOwnerStream
Description
TOwnerStream can be used when creating stream chains such as when using encryption and compression streams. It keeps a reference to the source stream and will automatically free the source stream when ready (if the SourceOwner (1) property is set to True). See also: TStream (362), TOwnerStream.Source (1), TOwnerStream.SourceOwner (1)
336
2.56.2
Page 337 337
Method overview
Property Create Destroy Description Create a new instance of TOwnerStream. Destroys the TOwnerStream instance and the source stream.
2.56.3
Page 337 338
Property overview
Property Source SourceOwner Access r rw Description Reference to the source stream. Indicates whether the ownerstream owns its source
2.56.4
TOwnerStream.Create
Synopsis: Create a new instance of TOwnerStream. Declaration: constructor Create(ASource: TStream) Visibility: public Description: Create instantiates a new instance of TOwnerStream and stores the reference to AStream. If SourceOwner is True, the soure stream will also be freed when the instance is destroyed. See also: TOwnerStream.Destroy (1), TOwnerStream.Source (1), TOwnerStream.SourceOwner (1)
2.56.5
TOwnerStream.Destroy
Override
Synopsis: Destroys the TOwnerStream instance and the source stream. Declaration: destructor Destroy; Visibility: public Description: Destroy frees the source stream if the SourceOwner property is True. See also: TOwnerStream.Create (1), TOwnerStream.Source (1), TOwnerStream.SourceOwner (1)
2.56.6
TOwnerStream.Source
Synopsis: Reference to the source stream. Declaration: Property Source : TStream Visibility: public Access: Read Description: Source is the source stream. It should be used by descendent streams to access the source stream to read from or write to. Do not free the Source reference directly if SourceOwner is True. In that case the owner stream instance will free the source stream itself. See also: TOwnerStream.Create (1)
337
2.56.7
TOwnerStream.SourceOwner
Synopsis: Indicates whether the ownerstream owns its source Declaration: Property SourceOwner : Boolean Visibility: public Access: Read,Write Description: SourceOwner indicates whether the TOwnerStream owns its Source stream or not. If this property is True then the Source stream is freed when the TOwnerStream instance is freed. See also: TOwnerStream.Source (1), TOwnerStream.Destroy (1)
2.57
2.57.1
TParser
Description
This class breaks a stream of text data in tokens. Its primary use is to help reading the contents of a form le (usually a le with dfm, xfm or lfm extension), and for this reason it isnt suitable to be used as a general parser. The parser is always positioned on a certain token, whose type is stored in the Token (1) property. Various methods are provided to obtain the token value in the desired format. To advance to the next token, invoke NextToken (1) method. See also: TParser.Token (1), TParser.NextToken (1)
2.57.2
Page 339 339 339 339 340 340 340 340 341 341 341 342 342 342 343 343
Method overview
Property CheckToken CheckTokenSymbol Create Destroy Error ErrorFmt ErrorStr HexToBinary NextToken SourcePos TokenComponentIdent TokenFloat TokenInt TokenString TokenSymbolIs TokenWideString Description Checks whether the token if of the given type. Checks whether the token equals the given symbol Creates a new parser instance. Destroys the parser instance. Raises an EParserError (229) exception with the given message Raises an EParserError (229) exception and formats the message. Raises an EParserError (229) exception with the given message Writes hexadecimal data to a stream. Reads the next token and returns its type. Returns the current position in the stream. Returns the path of a subcomponent starting from the current token. Returns the current token as a oat. Returns the current token as an integer. Returns the current token as a string. Returns True if the token equals the given symbol. Returns the current token as a widestring
338
2.57.3
Page 343 344 344
Property overview
Property FloatType SourceLine Token Access r r r Description The type of a oat token. Current source line number. The type of the current token.
2.57.4
TParser.Create
Synopsis: Creates a new parser instance. Declaration: constructor Create(Stream: TStream) Visibility: public Description: Create creates a new TParser instance, using Stream as the stream to read data from, and reads the rst token from the stream. Errors: If an error occours while parsing the rst token, an EParserError (229) exception is raised. See also: TParser.NextToken (1), TParser.Token (1)
2.57.5
TParser.Destroy
Override
Synopsis: Destroys the parser instance. Declaration: destructor Destroy; Visibility: public Description: Destroys the parser instance. Errors: None.
2.57.6
TParser.CheckToken
Synopsis: Checks whether the token if of the given type. Declaration: procedure CheckToken(T: Char) Visibility: public Description: Checks whether the token if of the given type. Errors: If current token isnt of type T, an EParserError (229) exception is raised. See also: TParser.Token (1)
2.57.7
TParser.CheckTokenSymbol
Synopsis: Checks whether the token equals the given symbol Declaration: procedure CheckTokenSymbol(const S: string) Visibility: public Description: CheckTokenSymbol performs a case-insensitive comparison of current token value with S. Current token must be of type toSymbol (199), otherwise an EParserError (229) exception is raised. 339
Errors: If the comparison fails, or current token isnt a symbol, an EParserError (229) exception is raised. See also: TParser.TokenSymbolIs (1), toSymbol (199)
2.57.8
TParser.Error
Synopsis: Raises an EParserError (229) exception with the given message Declaration: procedure Error(const Ident: string) Visibility: public Description: Raises an EParserError (229) exception with the given message
2.57.9
TParser.ErrorFmt
Synopsis: Raises an EParserError (229) exception and formats the message. Declaration: procedure ErrorFmt(const Ident: string;const Args: Array of const) Visibility: public Description: Raises an EParserError (229) exception and formats the message.
2.57.10
TParser.ErrorStr
Synopsis: Raises an EParserError (229) exception with the given message Declaration: procedure ErrorStr(const Message: string) Visibility: public Description: Raises an EParserError (229) exception with the given message
2.57.11
TParser.HexToBinary
Synopsis: Writes hexadecimal data to a stream. Declaration: procedure HexToBinary(Stream: TStream) Visibility: public Description: HexToBinary reads a sequence of hexadecimal characters from the input stream and converts them to a sequence of bytes which is written to Stream. Each byte is represented by two contiguous hexadecimal characters. Whitespace is allowed between hexadecimal characters if it doesnt appear between two characters that form the same byte. HexToBinary stops when the rst non-hexadecimal and non-whitespace character is found, or the end of the input stream is reached. Remark: This method begins reading after the current token: that is, current token, even if its a valid hexadecimal value, isnt included. Errors: If a single hexadecimal character is found, an EParserError (229) exception is raised.
340
2.57.12
TParser.NextToken
Synopsis: Reads the next token and returns its type. Declaration: function NextToken : Char Visibility: public Description: NextToken parses the next token in the stream and returns its type. The type of the token can also be retrieved later reading Token (1) property. If the end of the stream is reached, toEOF (199) is returned. For details about token types, see TParser.Token (1) Errors: If an error occours while parsing the token, an EParserError (229) exception is raised. See also: TParser.Token (1)
2.57.13
TParser.SourcePos
Synopsis: Returns the current position in the stream. Declaration: function SourcePos : LongInt Visibility: public Description: This is not the character position relative to the current source line, but the byte offset from the Remark: beginning of the stream. Errors: None. See also: TParser.SourceLine (1)
2.57.14
TParser.TokenComponentIdent
Synopsis: Returns the path of a subcomponent starting from the current token. Declaration: function TokenComponentIdent : string Visibility: public Description: If current token is toSymbol (199), TokenComponentIdent tries to nd subcomponent names separated by a dot (.). The returned string is the longest subcomponent path found. If there are no subcomponents, current symbol is returned. Remark: After this method has been called, subsequent calls to TokenString (1) or TokenWideString (1) return the same value returned by TokenComponentIdent. Example If source stream contains a.b.c and TParser is positioned on the rst token (a), this method returns a.b.c. Errors: If Token (1) isnt toSymbol (199), or no valid symbol is found after a dot, an EParserError (229) exception is raised. See also: TParser.NextToken (1), TParser.Token (1), TParser.TokenString (1), TParser.TokenWideString (1), toSymbol (199)
341
2.57.15
TParser.TokenFloat
Synopsis: Returns the current token as a oat. Declaration: function TokenFloat : Extended Visibility: public Description: If current token type is toFloat (199), this method returns the token value as a oat. To specify a negative number, no space must exist between unary minus and number. Floating point numbers can be postxed with a character that species the oating point type. See FloatType (1) for further information. Remark: In the input stream the decimal separator, if present, must be a dot (.). Errors: If Token (1) isnt toFloat (199), an EParserError (229) exception is raised. See also: TParser.FloatType (1), TParser.NextToken (1), TParser.Token (1), toFloat (199)
2.57.16
TParser.TokenInt
Synopsis: Returns the current token as an integer. Declaration: function TokenInt : Int64 Visibility: public Description: If current token type is toInteger (199), this method returns the token value as an integer. In the input stream an integer can be an hexadecimal (prexed by $ character) or decimal number. Decimal numbers can be prexed by an unary minus: if this is the case, no space must exist between minus and number. Errors: If Token (1) isnt toInteger (199), an EConvertError (1) exception is raised. See also: TParser.NextToken (1), TParser.Token (1), toInteger (199)
2.57.17
TParser.TokenString
Synopsis: Returns the current token as a string. Declaration: function TokenString : string Visibility: public Description: If current token type is toString (199) or toWString (199), this method returns the contents of the string. That is, enclosing quotes are removed, embedded quotes are unescaped and control strings are converted to the appropriate sequence of characters. If current token type isnt a string, a string containing the token representation in the input stream is returned, without any conversion: hexadecimal integers are returned with the leading $, and oating point sufxes like s, c or d are kept. For tokens whose type isnt a special type, return value of TokenString equals Token (1). Remark: If Token (1) is toWString (199), TokenWideString (1) should be used instead. Errors: None. See also: TParser.NextToken (1), TParser.TokenWideString (1), TParser.Token (1), toString (199), toWString (199)
342
2.57.18
TParser.TokenWideString
Synopsis: Returns the current token as a widestring Declaration: function TokenWideString : WideString Visibility: public Description: If current token type is toWString (199), this method returns the contents of the string. That is, enclosing quotes are removed, embedded quotes are unescaped and control strings are converted to the appropriate sequence of characters. If current token isnt a widestring, TokenWideString behaviour is the same as TokenString (1). Errors: None. See also: TParser.NextToken (1), TokenString (1), TParser.Token (1), toWString (199)
2.57.19
TParser.TokenSymbolIs
Synopsis: Returns True if the token equals the given symbol. Declaration: function TokenSymbolIs(const S: string) : Boolean Visibility: public Description: TokenSymbolIs performs a case-insensitive comparison of current token value with S. If current token isnt of type toSymbol (199), or comparison fails, False is returned. Errors: None. See also: TParser.CheckTokenSymbol (1), TParser.Token (1)
2.57.20
TParser.FloatType
Synopsis: The type of a oat token. Declaration: Property FloatType : Char Visibility: public Access: Read Description: Floating point numbers can be postxed with a character specifying the type of oating point value. When specied, this property holds the character postxed to the number. It can be one of the following values: Table 2.20: s or S c or C d or D Value is a single. Value is a currency. Value is a date.
If Token (1) isnt toFloat (199) or one of the above characters wasnt specied, FloatType is the null character (zero). See also: TParser.NextToken (1), TParser.Token (1), TParser.TokenFloat (1), toFloat (199) 343
2.57.21
TParser.SourceLine
Synopsis: Current source line number. Declaration: Property SourceLine : Integer Visibility: public Access: Read Description: Current source line number. See also: TParser.SourcePos (1)
2.57.22
TParser.Token
Synopsis: The type of the current token. Declaration: Property Token : Char Visibility: public Access: Read Description: This property holds the type of the current token. When Token isnt one of the special token types (whose value can be retrieved with specic methods) it is the character representing the current token. Special token types: Table 2.21: toEOF (199) toSymbol (199) toString (199) toInteger (199) toFloat (199) toWString (199) Value returned by TParser.Token (1) when the end of the input stream was reached. Value returned by TParser.Token (1) when a symbol was found in the input stream. Value returned by TParser.Token (1) when a string was found in the input stream. Value returned by TParser.Token (1) when an integer was found in the input stream. Value returned by TParser.Token (1) when a oating point value was found in the input stream. Value returned by TParser.Token (1) when a widestring was found in the input stream.
To advance to the next token, use NextToken (1) method. See also: TParser.CheckToken (1), TParser.NextToken (1), TParser.TokenComponentIdent (1), TParser.TokenFloat (1), TParser.TokenInt (1), TParser.TokenString (1), TParser.TokenWideString (1)
2.58
2.58.1
TPersistent
Description
TPersistent is the basic class for the streaming system. Since it is compiled in the {$M+} state, the compiler generates RTTI (Run-Time Type Information) for it and all classes that descend from it. This information can be used to stream all properties of classes. It also introduces functionality to assign the contents of 2 classes to each other. See also: TComponent (287)
344
2.58.2
Page 345 345 345
Method overview
Property Assign Destroy GetNamePath Description Assign the contents of one class to another. Destroys the TPersistent instance. Returns a string that can be used to identify the class instance.
2.58.3
TPersistent.Destroy
Override
Synopsis: Destroys the TPersistent instance. Declaration: destructor Destroy; Visibility: public Description: Destroy disposes of the persistent object. This method should never be called directly. Instead the Free method should be used.
2.58.4
TPersistent.Assign
Virtual
Synopsis: Assign the contents of one class to another. Declaration: procedure Assign(Source: TPersistent); Visibility: public Description: Assign copies the contents of Source to Self, if the classes of the destination and source classes are compatible. The TPersistent implementation of Assign does nothing but calling the AssignTo (1) method of source. This means that if the destination class does not know how to assign the contents of the source class, the source class instance is asked to assign itself to the destination class. This means that it is necessary to implement only one of the two methods so that two classes can be assiged to one another. Remark: In general, a statement of the form Destination:=Source; (where Destination and Source are classes) does not achieve the same as a statement of the form Destination.Assign(Source); After the former statement, both Source and Destination will point to the same object. The latter statemtent will copy the contents of the Source class to the Destination class. See also: AssignTo (1)
2.58.5
TPersistent.GetNamePath
Virtual
Synopsis: Returns a string that can be used to identify the class instance. Declaration: function GetNamePath : string; Visibility: public
345
Description: GetNamePath returns a string that can be used to identify the class instance. This can be used to display a name for this instance in a Object designer. GetNamePath constructs a name by recursively prepending the Classname of the Owner instance to the Classname of this instance, separated by a dot. See also: TPersistent.GetOwner (1)
2.59
2.59.1
TProxyStream
Description
TProxyStream is a proxy class for the #rtl.types.IStream (1627) interface. It implements all stream methods by relaying them to the IStream interface. See also: #rtl.types.IStream (1627), TStreamAdapter (371)
2.59.2
Page 347 346 346 347 346
Method overview
Property Check Create Read Seek Write Description Check errors Create a new instance of the TProxyStream class.
2.59.3
TProxyStream.Create
Synopsis: Create a new instance of the TProxyStream class. Declaration: constructor Create(const Stream: IStream) Visibility: public Description: Create initializes a new instance of the TProxyStream class. It saves var stream for use in the other methods. See also: #rtl.types.IStream (1627)
2.59.4
Visibility: public
TProxyStream.Read
Override
2.59.5
Visibility: public
TProxyStream.Write
Override
346
2.59.6
TProxyStream.Seek
Declaration: function Seek(const Offset: Int64;Origin: TSeekOrigin) : Int64 ; Override Visibility: public
2.59.7
TProxyStream.Check
Virtual
Synopsis: Check errors Declaration: procedure Check(err: LongInt); Visibility: public Description: Check will check the result of the IStream interface. This method must be overridden by descendent classes to return interface-specic errors. See also: #rtl.types.IStream (1627)
2.60
2.60.1
TReader
Description
The TReader class is a reader class that implements generic component streaming capabilities, independent of the format of the data in the stream. It uses a driver class TAbstractObjectReader (241) to do the actual reading of data. The interface of the TReader class should be identical to the interface in Delphi. Note that the TReader design is such that it can read a single component from a stream. It will read all children of this component, but it is not designed to read multiple components in succession from one stream. It should never be necessary to create an instance of this class directly. Instead, the TStream.ReadComponent (1) call should be used. See also: TFiler (304), TWriter (407), TAbstractObjectReader (241)
347
2.60.2
Page 349 350 356 349 350 350 349 350 350 351 351 351 351 351 352 352 352 353 353 353 353 354 354 354 354 355 354 353 355 352 355 356 355 352 355
Method overview
Property BeginReferences CheckValue CopyValue Create DeneBinaryProperty DeneProperty Destroy EndOfList EndReferences FixupReferences NextValue Read ReadBoolean ReadChar ReadCollection ReadComponent ReadComponents ReadCurrency ReadDate ReadFloat ReadIdent ReadInt64 ReadInteger ReadListBegin ReadListEnd ReadRootComponent ReadSet ReadSingle ReadString ReadUnicodeChar ReadUnicodeString ReadValue ReadVariant ReadWideChar ReadWideString Description Initializes the component referencing mechanism. Raises an exception if the next value in the stream is not of type Value Copy a value to a writer. Creates a new reader class Reads a user-dened binary property from the stream. Reads a user-dened property from the stream. Destroys a reader class. Returns true if the stream contains an end-of-list marker. Finalizes the component referencing mechanism. Tries to resolve all unresolved component references. Returns the type of the next value. Read raw data from stream Reads a boolean from the stream. Reads a character from the stream. Reads a collection from the stream. Starts reading a component from the stream. Starts reading child components from the stream. Read a currency value from the stream. Reads a date from the stream Reads a oat from the stream. Reads an identier from the stream. Reads a 64-bit integer from the stream. Reads an integer from the stream Checks for the beginning of a list. Checks for the end of a list. Starts reading a root component. Read a set value from the stream Reads a single-type real from the stream. Reads a string from the stream. Read unicode character Read a UnicodeString value from the stream Reads the next value type from the stream. Read a variant from the stream Read widechar from the stream Read a WideString value from the stream.
348
2.60.3
Page 356 358 358 357 358 357 357 359 358 357 358 356 356
Property overview
Property Driver OnAncestorNotFound OnCreateComponent OnError OnFindComponentClass OnFindMethod OnPropertyNotFound OnReadStringProperty OnReferenceName OnSetMethodProperty OnSetName Owner Parent Access r rw rw rw rw rw rw rw rw rw rw rw rw Description The driver in use for streaming the data. Handler called when the ancestor component cannot be found. Handler called when a component needs to be created. Handler called when an error occurs. Handler called when a component class reference needs to be found. Handler to nd or change a method address. Handler for treating missing properties. Handler for translating strings when read from the stream. Handler called when another component is referenced. Handler for setting method properties. Handler called when setting a component name. Owner of the component being read Parent of the component being read.
2.60.4
TReader.Create
Synopsis: Creates a new reader class Declaration: constructor Create(Stream: TStream;BufSize: Integer) Visibility: public Description: Creates a new reader class
2.60.5
TReader.Destroy
Override
Synopsis: Destroys a reader class. Declaration: destructor Destroy; Visibility: public Description: Destroys a reader class.
2.60.6
TReader.BeginReferences
Synopsis: Initializes the component referencing mechanism. Declaration: procedure BeginReferences Visibility: public Description: When streaming components, the streaming mechanism keeps a list of existing components that can be referenced to. This method initializes up that system.
349
2.60.7
TReader.CheckValue
Synopsis: Raises an exception if the next value in the stream is not of type Value Declaration: procedure CheckValue(Value: TValueType) Visibility: public Description: Raises an exception if the next value in the stream is not of type Value
2.60.8
TReader.DeneProperty
Synopsis: Reads a user-dened property from the stream. Declaration: procedure DefineProperty(const Name: string;AReadData: TReaderProc; WriteData: TWriterProc;HasData: Boolean) ; Override Visibility: public Description: Reads a user-dened property from the stream.
2.60.9
TReader.DeneBinaryProperty
Synopsis: Reads a user-dened binary property from the stream. Declaration: procedure DefineBinaryProperty(const Name: string; AReadData: TStreamProc; WriteData: TStreamProc;HasData: Boolean) ; Override Visibility: public Description: Reads a user-dened binary property from the stream.
2.60.10
TReader.EndOfList
Synopsis: Returns true if the stream contains an end-of-list marker. Declaration: function EndOfList : Boolean Visibility: public Description: Returns true if the stream contains an end-of-list marker.
2.60.11
TReader.EndReferences
Synopsis: Finalizes the component referencing mechanism. Declaration: procedure EndReferences Visibility: public Description: When streaming components, the streaming mechanism keeps a list of existing components that can be referenced to. This method cleans up that system.
350
2.60.12
TReader.FixupReferences
Synopsis: Tries to resolve all unresolved component references. Declaration: procedure FixupReferences Visibility: public Description: Tries to resolve all unresolved component references.
2.60.13
TReader.NextValue
Synopsis: Returns the type of the next value. Declaration: function NextValue : TValueType Visibility: public Description: Returns the type of the next value.
2.60.14
TReader.Read
Virtual
Synopsis: Read raw data from stream Declaration: procedure Read(var Buf;Count: LongInt); Visibility: public Description: Read is introduced for Delphi compatibility to read raw data from the component stream. This should not be used in new production code as it will totally mess up the streaming. See also: TAbstractObjectReader.Read (1), TBinaryObjectReader.Read (1)
2.60.15
TReader.ReadBoolean
Synopsis: Reads a boolean from the stream. Declaration: function ReadBoolean : Boolean Visibility: public Description: Reads a boolean from the stream.
2.60.16
TReader.ReadChar
Synopsis: Reads a character from the stream. Declaration: function ReadChar : Char Visibility: public Description: Reads a character from the stream.
351
2.60.17
TReader.ReadWideChar
Synopsis: Read widechar from the stream Declaration: function ReadWideChar : WideChar Visibility: public Description: TReader.ReadWideChar reads a widechar from the stream. This actually reads a widestring and returns the rst character. See also: TReader.ReadWideString (1), TWriter.WriteWideChar (1)
2.60.18
TReader.ReadUnicodeChar
Synopsis: Read unicode character Declaration: function ReadUnicodeChar : UnicodeChar Visibility: public Description: ReadUnicodeChar reads a single unicode character from the stream. It does this by reading a UnicodeString string from the stream and returning the rst character. Errors: If the string has a length different from 1, an EReadError exception will occur. See also: TReader.ReadUnicodeString (1)
2.60.19
TReader.ReadCollection
Synopsis: Reads a collection from the stream. Declaration: procedure ReadCollection(Collection: TCollection) Visibility: public Description: Reads a collection from the stream.
2.60.20
TReader.ReadComponent
Synopsis: Starts reading a component from the stream. Declaration: function ReadComponent(Component: TComponent) : TComponent Visibility: public Description: Starts reading a component from the stream.
2.60.21
TReader.ReadComponents
Synopsis: Starts reading child components from the stream. Declaration: procedure ReadComponents(AOwner: TComponent;AParent: TComponent; Proc: TReadComponentsProc) Visibility: public Description: Starts reading child components from the stream.
352
2.60.22
TReader.ReadFloat
Synopsis: Reads a oat from the stream. Declaration: function ReadFloat : Extended Visibility: public Description: Reads a oat from the stream.
2.60.23
TReader.ReadSingle
Synopsis: Reads a single-type real from the stream. Declaration: function ReadSingle : Single Visibility: public Description: Reads a single-type real from the stream.
2.60.24
TReader.ReadDate
Synopsis: Reads a date from the stream Declaration: function ReadDate : TDateTime Visibility: public Description: Reads a date from the stream
2.60.25
TReader.ReadCurrency
Synopsis: Read a currency value from the stream. Declaration: function ReadCurrency : Currency Visibility: public Description: ReadCurrency reads a currency typed value from the stream and returns the result. This method does nothing except call the driver method of the driver being used. See also: TWriter.WriteCurrency (1)
2.60.26
TReader.ReadIdent
Synopsis: Reads an identier from the stream. Declaration: function ReadIdent : string Visibility: public Description: Reads an identier from the stream.
353
2.60.27
TReader.ReadInteger
Synopsis: Reads an integer from the stream Declaration: function ReadInteger : LongInt Visibility: public Description: Reads an integer from the stream
2.60.28
TReader.ReadInt64
Synopsis: Reads a 64-bit integer from the stream. Declaration: function ReadInt64 : Int64 Visibility: public Description: Reads a 64-bit integer from the stream.
2.60.29
TReader.ReadSet
Synopsis: Read a set value from the stream Declaration: function ReadSet(EnumType: Pointer) : Integer Visibility: public Description: ReadSet reads a set of elements with type EnumType and returns them as an integer where each element is encoded in a bit of the integer. Thus, at most an enumerated type with 32 elements can be read with this function. Errors: No checking is performed on the validity of EnumType. It is assumed to be a valid PTypeInfo pointer. See also: TWriter.WriteSet (1)
2.60.30
TReader.ReadListBegin
Synopsis: Checks for the beginning of a list. Declaration: procedure ReadListBegin Visibility: public Description: Checks for the beginning of a list.
2.60.31
TReader.ReadListEnd
Synopsis: Checks for the end of a list. Declaration: procedure ReadListEnd Visibility: public Description: Checks for the end of a list.
354
2.60.32
TReader.ReadRootComponent
Synopsis: Starts reading a root component. Declaration: function ReadRootComponent(ARoot: TComponent) : TComponent Visibility: public Description: Starts reading a root component.
2.60.33
TReader.ReadVariant
Synopsis: Read a variant from the stream Declaration: function ReadVariant : Variant Visibility: public Description: ReadVariant reads the next value from the stream and returns it as a variant. No variant array can be read from the stream, only single values. Errors: If no variant manager is installed, the function will raise an EReadError exception. If the next value is not a simple value, again an EReadError exception is raised. exception is See also: TBinaryObjectWriter.WriteVariant (1)
2.60.34
TReader.ReadString
Synopsis: Reads a string from the stream. Declaration: function ReadString : string Visibility: public Description: Reads a string from the stream.
2.60.35
TReader.ReadWideString
Synopsis: Read a WideString value from the stream. Declaration: function ReadWideString : WideString Visibility: public Description: ReadWidestring reads a widestring typed value from the stream and returns the result. This method does nothing except call the driver method of the driver being used. See also: TWriter.WriteWideString (1)
2.60.36
TReader.ReadUnicodeString
Synopsis: Read a UnicodeString value from the stream Declaration: function ReadUnicodeString : UnicodeString Visibility: public Description: ReadUnicodeString reads a UnicodeString string from the stream. The stream can contain a string from any type, it will be converted to UniCodeString. See also: TAbstractObjectReader.ReadUnicodeString (1), TWriter.WriteUnicodeString (1) 355
2.60.37
TReader.ReadValue
Synopsis: Reads the next value type from the stream. Declaration: function ReadValue : TValueType Visibility: public Description: Reads the next value type from the stream.
2.60.38
TReader.CopyValue
Synopsis: Copy a value to a writer. Declaration: procedure CopyValue(Writer: TWriter) Visibility: public Description: CopyValue reads the next value from the reader stream, and writes it to the passed Writer.
2.60.39
TReader.Driver
Synopsis: The driver in use for streaming the data. Declaration: Property Driver : TAbstractObjectReader Visibility: public Access: Read Description: The driver in use for streaming the data.
2.60.40
TReader.Owner
Synopsis: Owner of the component being read Declaration: Property Owner : TComponent Visibility: public Access: Read,Write Description: Owner of the component being read
2.60.41
TReader.Parent
Synopsis: Parent of the component being read. Declaration: Property Parent : TComponent Visibility: public Access: Read,Write Description: Parent of the component being read.
356
2.60.42
TReader.OnError
Synopsis: Handler called when an error occurs. Declaration: Property OnError : TReaderError Visibility: public Access: Read,Write Description: Handler called when an error occurs.
2.60.43
TReader.OnPropertyNotFound
Synopsis: Handler for treating missing properties. Declaration: Property OnPropertyNotFound : TPropertyNotFoundEvent Visibility: public Access: Read,Write Description: OnPropertyNotFound can be used to take appropriate action when a property is read from a stream and no such property is found in the RTTI information of the Instance that is being read from the stream. It can be set at runtime, or at designtime by an IDE. For more information about the meaning of the various arguments to the event handler, see TPropertyNotFoundEvent (207). See also: TPropertyNotFoundEvent (207), TReader.OnSetMethodProperty (1), TReader.OnReadStringProperty (1)
2.60.44
TReader.OnFindMethod
Synopsis: Handler to nd or change a method address. Declaration: Property OnFindMethod : TFindMethodEvent Visibility: public Access: Read,Write Description: Handler to nd or change a method address.
2.60.45
TReader.OnSetMethodProperty
Synopsis: Handler for setting method properties. Declaration: Property OnSetMethodProperty : TSetMethodPropertyEvent Visibility: public Access: Read,Write Description: OnSetMethodProperty can be set to handle the setting of method properties. This handler can be used by an IDE to prevent methods from actually being assigned when an object is being streamed in the designer. See also: TReader.OnReadStringProperty (1), TReader.OnPropertyNotFound (1)
357
2.60.46
TReader.OnSetName
Synopsis: Handler called when setting a component name. Declaration: Property OnSetName : TSetNameEvent Visibility: public Access: Read,Write Description: Handler called when setting a component name.
2.60.47
TReader.OnReferenceName
Synopsis: Handler called when another component is referenced. Declaration: Property OnReferenceName : TReferenceNameEvent Visibility: public Access: Read,Write Description: Handler called when another component is referenced.
2.60.48
TReader.OnAncestorNotFound
Synopsis: Handler called when the ancestor component cannot be found. Declaration: Property OnAncestorNotFound : TAncestorNotFoundEvent Visibility: public Access: Read,Write Description: Handler called when the ancestor component cannot be found.
2.60.49
TReader.OnCreateComponent
Synopsis: Handler called when a component needs to be created. Declaration: Property OnCreateComponent : TCreateComponentEvent Visibility: public Access: Read,Write Description: Handler called when a component needs to be created.
2.60.50
TReader.OnFindComponentClass
Synopsis: Handler called when a component class reference needs to be found. Declaration: Property OnFindComponentClass : TFindComponentClassEvent Visibility: public Access: Read,Write Description: Handler called when a component class reference needs to be found. 358
2.60.51
TReader.OnReadStringProperty
Synopsis: Handler for translating strings when read from the stream. Declaration: Property OnReadStringProperty : TReadWriteStringPropertyEvent Visibility: public Access: Read,Write Description: OnReadStringProperty is called whenever a string property is read from the stream. It can be used e.g. by a translation mechanism to translate the strings on the y, when a form is loaded. See TReadWriteStringPropertyEvent (207) for a description of the various parameters. See also: TReader.OnPropertyNotFound (1), TReader.OnSetMethodProperty (1), TReadWriteStringPropertyEvent (207)
2.61
2.61.1
TRecall
Description
TRecall is a helper class used to copy published properties of a class (the reference object) in another class (the storage object). The reference object and storage object must be assignable to each other. The TRecall can be used to store the state of a persistent class, and restore it at a later time. When a TRecall object is created, it gets passed a reference instance and a storage instance. It immediatly stores the properties of the reference object in the storage object. The Store (1) method can be called throughout the lifetime of the reference object to update the stored properties. When the TRecall instance is destroyed then the properties are copied from the storage object to the reference object. The storage object is freed automatically. If the properties should not be copied back from the storage to the reference object, the Forget (1) can be called. See also: TRecall.Create (1), TRecall.Destroy (1), TRecall.Forget (1), TRecall.Store (1), TPersistent.Assign (1)
2.61.2
Page 360 360 360 360
Method overview
Property Create Destroy Forget Store Description Creates a new instance of TRecall. Copies the stored properties to the reference object and destroys the TRecall instance. Clear the reference property. Assigns the reference instance to the storage instance.
2.61.3
Page 361
Property overview
Property Reference Access r Description The reference object.
359
2.61.4
TRecall.Create
Synopsis: Creates a new instance of TRecall. Declaration: constructor Create(AStorage: TPersistent;AReference: TPersistent) Visibility: public Description: Create creates a new instance of TRecall and initializes the Reference and Storage instances. It calls Store (1) to assign the reference object properties to the storage instance. See also: TRecall.Store (1), TRecall.Destroy (1)
2.61.5
TRecall.Destroy
Override
Synopsis: Copies the stored properties to the reference object and destroys the TRecall instance. Declaration: destructor Destroy; Visibility: public Description: Destroy assigns the storage instance to the reference instance, if the latter is still valid. After this, it frees the storage and calls the inherited destroy. Errors: Destroy does not check whether the reference (1) instance is still valid. If the reference pointer was invalidated, call TRecall.Forget (1) to clear the reference instance. See also: TRecall.Store (1), TRecall.Forget (1)
2.61.6
TRecall.Store
Synopsis: Assigns the reference instance to the storage instance. Declaration: procedure Store Visibility: public Description: Store assigns the reference instance to the storage instance. This will only work if the two classes can be assigned to each other. This method can be used to refresh the storage. Errors: Store does not check whether the reference (1) instance is still valid. If the reference pointer was invalidated, call TRecall.Forget (1) to clear the reference instance.
2.61.7
TRecall.Forget
Synopsis: Clear the reference property. Declaration: procedure Forget Visibility: public Description: Forget sets the Reference (1) property to Nil. When the TRecall instance is destroyed, the reference instance will not be restored. Note that after a call to Forget, a call to Store (1) has no effect. Errors: None. See also: TRecall.Reference (1), TRecall.Store (1), TRecall.Destroy (1) 360
2.61.8
TRecall.Reference
Synopsis: The reference object. Declaration: Property Reference : TPersistent Visibility: public Access: Read Description: Reference is the instance of the reference object. Do not free the reference directly. Call Forget (1) to clear the reference and then free the reference object. See also: TRecall.Forget (1)
2.62
2.62.1
TResourceStream
Description
2.62.2
Page 361 361 362
Method overview
Property Create CreateFromID Destroy Description Creates a new instance of a resource stream. Creates a new instance of a resource stream with a resource Destroys the instance of the resource stream.
2.62.3
TResourceStream.Create
Synopsis: Creates a new instance of a resource stream. Declaration: constructor Create(Instance: THandle;const ResName: string; ResType: PChar) Visibility: public Description: Creates a new instance of a resource stream.
2.62.4
TResourceStream.CreateFromID
Synopsis: Creates a new instance of a resource stream with a resource Declaration: constructor CreateFromID(Instance: THandle;ResID: Integer; ResType: PChar) Visibility: public Description: The resource is loaded from the loaded module (identied by the handle Instance), identier ResID and type ResType.
361
2.62.5
TResourceStream.Destroy
Override
Synopsis: Destroys the instance of the resource stream. Declaration: destructor Destroy; Visibility: public Description: Destroys the instance of the resource stream.
2.63
2.63.1
TStream
Description
TStream is the base class for all streaming classes. It denes methods for reading (1), writing (1) from and to streams, as well as functions to determine the size of the stream as well as the current position of the stream. Descendent classes such as TMemoryStream (334) or TFileStream (306) then override these methods to write streams to memory or le. See also: TMemoryStream (334), TFileStream (306), TStringStream (398)
2.63.2
Page 365 367 363 369 364 368 365 366 368 369 368 368 364 363 363 370 365 369 366 366 366 367 370 370 367 370
Method overview
Property CopyFrom FixupResourceHeader Read ReadAnsiString ReadBuffer ReadByte ReadComponent ReadComponentRes ReadDWord ReadQWord ReadResHeader ReadWord Seek SetSize Write WriteAnsiString WriteBuffer WriteByte WriteComponent WriteComponentRes WriteDescendent WriteDescendentRes WriteDWord WriteQWord WriteResourceHeader WriteWord Description Copy data from one stream to another Not implemented in FPC Reads data from the stream to a buffer and returns the number of bytes read. Read an ansistring from the stream and return its value. Reads data from the stream to a buffer Read a byte from the stream and return its value. Reads component data from a stream Reads component data and resource header from a stream Read a DWord from the stream and return its value. Read a QWord value from the stream and return its value Read a resource header from the stream. Read a word from the stream and return its value. Sets the current position in the stream Sets the size of the stream Writes data from a buffer to the stream and returns the number of bytes written. Write an ansistring to the stream. Writes data from the stream to the buffer Write a byte to the stream. Write component data to the stream Write resource header and component data to a stream Write component data to a stream, relative to an ancestor Write resource header and component data to a stream, relative to an ancestor Write a DWord to the stream. Write a QWord value to the stream Write resource header to the stream Write a word to the stream. 362
2.63.3
Page 371 371
Property overview
Property Position Size Access rw rw Description The current position in the stream. The current size of the stream.
2.63.4
TStream.SetSize
Synopsis: Sets the size of the stream Declaration: procedure SetSize(NewSize: LongInt); Virtual; Overload procedure SetSize(const NewSize: Int64); Virtual; Overload Visibility: default Description: SetSize is the write handler for the TStream.Size (1) property. The TStream implementation of SetSize does nothing, but descendent classes may override this methods to allow programmers to set the size of the stream. See also: TStream.GetSize (1), TStream.Size (1)
2.63.5
TStream.Read
Virtual
Synopsis: Reads data from the stream to a buffer and returns the number of bytes read. Declaration: function Read(var Buffer;Count: LongInt) : LongInt; Visibility: public Description: Read attempts to read Count from the stream to Buffer and returns the number of bytes actually read. This method should be used when the number of bytes is not determined. If a specic number of bytes is expected, use TSTream.ReadBuffer (1) instead. As implemented in TStream, Read does nothing but raises an EStreamError (229) exception to indicate that reading is not supported. Descendent classes that allow reading must override this method to do the actual reading. Errors: In case a descendent class does not allow reading from the stream, an exception is raised. See also: TStream.Write (1), TStream.ReadBuffer (1)
2.63.6
TStream.Write
Virtual
Synopsis: Writes data from a buffer to the stream and returns the number of bytes written. Declaration: function Write(const Buffer;Count: LongInt) : LongInt; Visibility: public Description: Write attempts to write Count bytes from Buffer to the stream. It returns the actual number of bytes written to the stream. This method should be used when the number of bytes that should be written is not determined. If a specic number of bytes should be written, use TSTream.WriteBuffer (1) instead. As implemented in TStream, Write does nothing but raises EStreamError (229) exception to indicate that writing is not supported. Descendent classes that allow writing must override this method to do the actual writing. 363
Errors: In case a descendent class does not allow writing to the stream, an exception is raised. See also: TStream.Read (1), TStream.WriteBuffer (1)
2.63.7
TStream.Seek
Synopsis: Sets the current position in the stream Declaration: function Seek(Offset: LongInt;Origin: Word) : LongInt; Virtual ; Overload function Seek(const Offset: Int64;Origin: TSeekOrigin) : Int64; Virtual ; Overload Visibility: default Description: Seek sets the position of the stream to Offset bytes from Origin. Origin can have one of the following values: Table 2.22: Constant soFromBeginning soFromCurrent soFromEnd Meaning Set the position relative to the start of the stream. Set the position relative to the current position in the stream. Set the position relative to the end of the stream.
Offset should be negative when the origin is SoFromEnd. It should be positive for soFromBeginning and can have both signs for soFromCurrent This is an abstract method, which must be overridden by descendent classes. They may choose not to implement this method for all values of Origin and Offset. Errors: An exception may be raised if this method is called with an invalid pair of Offset,Origin values. e.g. a negative offset for soFromBeginning. See also: TStream.Position (1)
2.63.8
TStream.ReadBuffer
Synopsis: Reads data from the stream to a buffer Declaration: procedure ReadBuffer(var Buffer;Count: LongInt) Visibility: public Description: ReadBuffer reads Count bytes of the stream into Buffer. If the stream does not contain Count bytes, then an exception is raised. ReadBuffer should be used to read in a xed number of bytes, such as when reading structures or the content of variables. If the number of bytes is not determined, use TStream.Read (1) instead. ReadBuffer uses Read internally to do the actual reading. Errors: If the stream does not allow to read Count bytes, then an exception is raised. See also: TStream.Read (1), TStream.WriteBuffer (1)
364
2.63.9
TStream.WriteBuffer
Synopsis: Writes data from the stream to the buffer Declaration: procedure WriteBuffer(const Buffer;Count: LongInt) Visibility: public Description: WriteBuffer writes Count bytes to the stream from Buffer. If the stream does not allow Count bytes to be written, then an exception is raised. WriteBuffer should be used to read in a xed number of bytes, such as when writing structures or the content of variables. If the number of bytes is not determined, use TStream.Write (1) instead. WriteBuffer uses Write internally to do the actual reading. Errors: If the stream does not allow to write Count bytes, then an exception is raised. See also: TStream.Write (1), TStream.ReadBuffer (1)
2.63.10
TStream.CopyFrom
Synopsis: Copy data from one stream to another Declaration: function CopyFrom(Source: TStream;Count: Int64) : Int64 Visibility: public Description: CopyFrom reads Count bytes from Source and writes them to the current stream. This updates the current position in the stream. After the action is completed, the number of bytes copied is returned. This can be used to quickly copy data from one stream to another or to copy the whole contents of the stream. See also: TStream.Read (1), TStream.Write (1)
2.63.11
TStream.ReadComponent
Synopsis: Reads component data from a stream Declaration: function ReadComponent(Instance: TComponent) : TComponent Visibility: public Description: ReadComponent reads a component state from the stream and transfers this state to Instance. If Instance is nil, then it is created rst based on the type stored in the stream. ReadComponent returns the component as it is read from the stream. ReadComponent simply creates a TReader (347) object and calls its ReadRootComponent (1) method. Errors: If an error occurs during the reading of the component, an EFilerError (228) exception is raised. See also: TStream.WriteComponent (1), TStream.ReadComponentRes (1), TReader.ReadRootComponent (1)
365
2.63.12
TStream.ReadComponentRes
Synopsis: Reads component data and resource header from a stream Declaration: function ReadComponentRes(Instance: TComponent) : TComponent Visibility: public Description: ReadComponentRes reads a resource header from the stream, and then calls ReadComponent (1) to read the component state from the stream into Instance. This method is usually called by the global streaming method when instantiating forms and datamodules as created by an IDE. It should be used mainly on Windows, to store components in Windows resources. Errors: If an error occurs during the reading of the component, an EFilerError (228) exception is raised. See also: TStream.ReadComponent (1), TStream.WriteComponentRes (1)
2.63.13
TStream.WriteComponent
Synopsis: Write component data to the stream Declaration: procedure WriteComponent(Instance: TComponent) Visibility: public Description: WriteComponent writes the published properties of Instance to the stream, so they can later be read with TStream.ReadComponent (1). This method is intended to be used by an IDE, to preserve the state of a form or datamodule as designed in the IDE. WriteComponent simply calls WriteDescendent (1) with Nil ancestor. See also: TStream.ReadComponent (1), TStream.WriteComponentRes (1)
2.63.14
TStream.WriteComponentRes
Synopsis: Write resource header and component data to a stream Declaration: procedure WriteComponentRes(const ResName: string;Instance: TComponent) Visibility: public Description: WriteComponentRes writes a ResName resource header to the stream and then calls WriteComponent (1) to write the published properties of Instance to the stream. This method is intened for use by an IDE that can use it to store forms or datamodules as designed in a Windows resource stream. See also: TStream.WriteComponent (1), TStream.ReadComponentRes (1)
2.63.15
TStream.WriteDescendent
Synopsis: Write component data to a stream, relative to an ancestor Declaration: procedure WriteDescendent(Instance: TComponent;Ancestor: TComponent) Visibility: public
366
Description: WriteDescendent writes the state of Instance to the stream where it differs from Ancestor, i.e. only the changed properties are written to the stream. WriteDescendent creates a TWriter (407) object and calls its WriteDescendent (1) object. The writer is passed a binary driver object (266) by default.
2.63.16
TStream.WriteDescendentRes
Synopsis: Write resource header and component data to a stream, relative to an ancestor Declaration: procedure WriteDescendentRes(const ResName: string;Instance: TComponent; Ancestor: TComponent) Visibility: public Description: WriteDescendentRes writes a ResName resource header, and then calls WriteDescendent (1) to write the state of Instance to the stream where it differs from Ancestor, i.e. only the changed properties are written to the stream. This method is intened for use by an IDE that can use it to store forms or datamodules as designed in a Windows resource stream.
2.63.17
TStream.WriteResourceHeader
Synopsis: Write resource header to the stream Declaration: procedure WriteResourceHeader(const ResName: string; var FixupInfo: Integer) Visibility: public Description: WriteResourceHeader writes a resource-le header for a resource called ResName. It returns in FixupInfo the argument that should be passed on to TStream.FixupResourceHeader (1). WriteResourceHeader should not be used directly. It is called by the TStream.WriteComponentRes (1) and TStream.WriteDescendentRes (1) methods. See also: TStream.FixupResourceHeader (1), TStream.WriteComponentRes (1), TStream.WriteDescendentRes (1)
2.63.18
TStream.FixupResourceHeader
Synopsis: Not implemented in FPC Declaration: procedure FixupResourceHeader(FixupInfo: Integer) Visibility: public Description: FixupResourceHeader is used to write the size of the resource after a component was written to stream. The size is determined from the current position, and it is written at position FixupInfo. After that the current position is restored. FixupResourceHeader should never be called directly; it is handled by the streaming system. See also: TStream.WriteResourceHeader (1), TStream.WriteComponentRes (1), TStream.WriteDescendentRes (1)
367
2.63.19
TStream.ReadResHeader
Synopsis: Read a resource header from the stream. Declaration: procedure ReadResHeader Visibility: public Description: ReadResourceHeader reads a reasource le header from the stream. It positions the stream just beyond the header. ReadResourceHeader should not be called directly, it is called by the streaming system when needed. Errors: If the resource header is invalid an EInvalidImage (228) exception is raised. See also: TStream.ReadComponentRes (1), EInvalidImage (228)
2.63.20
TStream.ReadByte
Synopsis: Read a byte from the stream and return its value. Declaration: function ReadByte : Byte Visibility: public Description: ReadByte reads one byte from the stream and returns its value. Errors: If the byte cannot be read, a EStreamError (229) exception will be raised. This is a utility function which symply calls the Read (1) function. See also: TStream.Read (1), TStream.WriteByte (1), TStream.ReadWord (1), TStream.ReadDWord (1), TStream.ReadAnsiString (1)
2.63.21
TStream.ReadWord
Synopsis: Read a word from the stream and return its value. Declaration: function ReadWord : Word Visibility: public Description: ReadWord reads one Word (i.e. 2 bytes) from the stream and returns its value. This is a utility function which symply calls the Read (1) function. Errors: If the word cannot be read, a EStreamError (229) exception will be raised. See also: TStream.Read (1), TStream.WriteWord (1), TStream.ReadByte (1), TStream.ReadDWord (1), TStream.ReadAnsiString (1)
2.63.22
TStream.ReadDWord
Synopsis: Read a DWord from the stream and return its value. Declaration: function ReadDWord : Cardinal Visibility: public Description: ReadDWord reads one DWord (i.e. 4 bytes) from the stream and returns its value. This is a utility function which simply calls the Read (1) function. 368
Errors: If the DWord cannot be read, a EStreamError (229) exception will be raised. See also: TStream.Read (1), TStream.WriteDWord (1), TStream.ReadByte (1), TStream.ReadWord (1), TStream.ReadAnsiString (1)
2.63.23
TStream.ReadQWord
Synopsis: Read a QWord value from the stream and return its value Declaration: function ReadQWord : QWord Visibility: public Description: ReadQWord reads a QWord value (8 bytes) from the stream and returns its value. Errors: If not enough bytes are available on the stream, an EStreamError (229) exception will be raised. See also: TStream.Read (1), TStream.WriteByte (1), TStream.ReadWord (1), TStream.ReadDWord (1), TStream.ReadAnsiString (1)
2.63.24
TStream.ReadAnsiString
Synopsis: Read an ansistring from the stream and return its value. Declaration: function ReadAnsiString : string Visibility: public Description: ReadAnsiString reads an ansistring from the stream and returns its value. This is a utility function which simply calls the read function several times. The Ansistring should be stored as 4 bytes (a DWord) representing the length of the string, and then the string value itself. The WriteAnsiString (1) function writes an ansistring in such a format. Errors: If the AnsiString cannot be read, a EStreamError (229) exception will be raised. See also: TStream.Read (1), TStream.WriteAnsiString (1), TStream.ReadByte (1), TStream.ReadWord (1), TStream.ReadDWord (1)
2.63.25
TStream.WriteByte
Synopsis: Write a byte to the stream. Declaration: procedure WriteByte(b: Byte) Visibility: public Description: WriteByte writes the byte B to the stream. This is a utility function which simply calls the Write (1) function. The byte can be read from the stream using the ReadByte (1) function. Errors: If an error occurs when attempting to write, an EStreamError (229) exception will be raised. See also: TStream.Write (1), TStream.ReadByte (1), TStream.WriteWord (1), TStream.WriteDWord (1), TStream.WriteAnsiString (1)
369
2.63.26
TStream.WriteWord
Synopsis: Write a word to the stream. Declaration: procedure WriteWord(w: Word) Visibility: public Description: WriteWord writes the word W (i.e. 2 bytes) to the stream. This is a utility function which simply calls the Write (1) function. The word can be read from the stream using the ReadWord (1) function. Errors: If an error occurs when attempting to write, an EStreamError (229) exception will be raised. See also: TStream.Write (1), TStream.ReadWord (1), TStream.WriteByte (1), TStream.WriteDWord (1), TStream.WriteAnsiString (1)
2.63.27
TStream.WriteDWord
Synopsis: Write a DWord to the stream. Declaration: procedure WriteDWord(d: Cardinal) Visibility: public Description: WriteDWord writes the DWord D (i.e. 4 bytes) to the stream. This is a utility function which simply calls the Write (1) function. The DWord can be read from the stream using the ReadDWord (1) function. Errors: If an error occurs when attempting to write, an EStreamError (229) exception will be raised. See also: TStream.Write (1), TStream.ReadDWord (1), TStream.WriteByte (1), TStream.WriteWord (1), TStream.WriteAnsiString (1)
2.63.28
TStream.WriteQWord
Synopsis: Write a QWord value to the stream Declaration: procedure WriteQWord(q: QWord) Visibility: public Description: WriteQWord writes the word W (i.e. 8 bytes) to the stream. This is a utility function which simply calls the Write (1) function. The word can be read from the stream using the ReadQWord (1) function. Errors: If an error occurs when attempting to write, an EStreamError (229) exception will be raised. See also: TStream.Write (1), TStream.ReadByte (1), TStream.WriteWord (1), TStream.WriteDWord (1), TStream.WriteAnsiString (1)
2.63.29
TStream.WriteAnsiString
Synopsis: Write an ansistring to the stream. Declaration: procedure WriteAnsiString(const S: string) Visibility: public
370
Description: WriteAnsiString writes the AnsiString S (i.e. 4 bytes) to the stream. This is a utility function which simply calls the Write (1) function. The ansistring is written as a 4 byte length specier, followed by the ansistrings content. The ansistring can be read from the stream using the ReadAnsiString (1) function. Errors: If an error occurs when attempting to write, an EStreamError (229) exception will be raised. See also: TStream.Write (1), TStream.ReadAnsiString (1), TStream.WriteByte (1), TStream.WriteWord (1), TStream.WriteDWord (1)
2.63.30
TStream.Position
Synopsis: The current position in the stream. Declaration: Property Position : Int64 Visibility: public Access: Read,Write Description: Position can be read to determine the current position in the stream. It can be written to to set the (absolute) position in the stream. The position is zero-based, so to set the position at the beginning of the stream, the position must be set to zero. Remark: Not all TStream descendants support setting the position in the stream, so this should be used with care. Errors: Some descendents may raise an EStreamError (229) exception if they do not support setting the stream position. See also: TStream.Size (1), TStream.Seek (1)
2.63.31
TStream.Size
Synopsis: The current size of the stream. Declaration: Property Size : Int64 Visibility: public Access: Read,Write Description: Size can be read to determine the stream size or to set the stream size. Remark: Not all descendents of TStream support getting or setting the stream size; they may raise an exception if the Size property is read or set. See also: TStream.Position (1), TStream.Seek (1)
2.64
2.64.1
TStreamAdapter
Description
371
2.64.2
Page 1627
Interfaces overview
Property IStream Description COM stream abstraction
2.64.3
Page 375 374 374 372 372 374 373 374 373 373 375 375 373
Method overview
Property Clone Commit CopyTo Create Destroy LockRegion Read Revert Seek SetSize Stat UnlockRegion Write Description Clone the stream Commit data to the stream Copy data to destination stream Create a new instance of TStreamAdapter Free the TStreamAdapter instance Lock a region of the stream Read from the stream. Revert operations on the stream Set the stream position Set the stream size Return statistical data about the stream Unlock a region of the stream Write to the stream
2.64.4
Page 375 376
Property overview
Property Stream StreamOwnership Access r rw Description Stream on which adaptor works Determines what happens with the stream when the adaptor is freed
2.64.5
TStreamAdapter.Create
Synopsis: Create a new instance of TStreamAdapter Declaration: constructor Create(Stream: TStream;Ownership: TStreamOwnership) Visibility: public Description: Create creates a new instance of TStreamAdaptor. It initializes TStreamAdapter.Stream (1) with Stream and initializes StreamOwnerShip (1) with Ownership. TStreamAdapter is an abstract class: descendents must be created that implement the actual functionality. See also: StreamOwnerShip (1), TStreamAdapter.Stream (1)
2.64.6
TStreamAdapter.Destroy
Override
Synopsis: Free the TStreamAdapter instance Declaration: destructor Destroy; Visibility: public Description: Explicitly free the TStreamAdapter instance. Normally, this is done automatically if a reference to the IStream interface is freed.
372
2.64.7
TStreamAdapter.Read
Virtual
Synopsis: Read from the stream. Declaration: function Read(pv: Pointer;cb: DWORD;pcbRead: PDWord) : HRESULT; Visibility: public Description: Read implements #rtl.types.ISequentialStream.Read (1627) by reading from the stream specied at creation. Errors: This function must be overridden and will raise a runerror 217 when called directly. See also: #rtl.types.ISequentialStream.Read (1627)
2.64.8
TStreamAdapter.Write
Synopsis: Write to the stream Declaration: function Write(pv: Pointer;cb: DWORD;pcbWritten: PDWord) : HRESULT ; Virtual Visibility: public Description: Write implements #rtl.types.ISequentialStream.Write (1627) by writing to the stream specied at creation. Errors: This function must be overridden and will raise a runerror 217 when called directly. See also: #rtl.types.ISequentialStream.Write (1627)
2.64.9
TStreamAdapter.Seek
Synopsis: Set the stream position Declaration: function Seek(dlibMove: Largeint;dwOrigin: LongInt; out libNewPosition: Largeint) : HRESULT; Visibility: public Description: Seek implements #rtl.types.IStream.Seek (1628) by setting the position of the stream specied at creation. Errors: This function must be overridden and will raise a runerror 217 when called directly. See also: #rtl.types.IStream.Seek (1628) Virtual
2.64.10
TStreamAdapter.SetSize
Virtual
Synopsis: Set the stream size Declaration: function SetSize(libNewSize: Largeint) : HRESULT; Visibility: public Description: SetSize implements #rtl.types.IStream.Setsize (1628) by setting the size of the stream specied at creation. Errors: This function must be overridden and will raise a runerror 217 when called directly. See also: #rtl.types.IStream.Setsize (1628) 373
2.64.11
TStreamAdapter.CopyTo
Synopsis: Copy data to destination stream Declaration: function CopyTo(stm: IStream;cb: Largeint;out cbRead: Largeint; out cbWritten: Largeint) : HRESULT; Virtual Visibility: public Description: CopyTo implements #rtl.types.IStream.CopyTo (1628). Errors: This function must be overridden and will raise a runerror 217 when called directly.
2.64.12
TStreamAdapter.Commit
Virtual
Synopsis: Commit data to the stream Declaration: function Commit(grfCommitFlags: LongInt) : HRESULT; Visibility: public Description: Commit implements #rtl.types.IStream.Commit (1629). Errors: This function must be overridden and will raise a runerror 217 when called directly. See also: #rtl.types.IStream.Commit (1629)
2.64.13
TStreamAdapter.Revert
Virtual
Synopsis: Revert operations on the stream Declaration: function Revert : HRESULT; Visibility: public Description: Revert implements #rtl.types.IStream.Revert (1629). Errors: This function must be overridden and will raise a runerror 217 when called directly. See also: #rtl.types.IStream.Revert (1629)
2.64.14
TStreamAdapter.LockRegion
Synopsis: Lock a region of the stream Declaration: function LockRegion(libOffset: Largeint;cb: Largeint; dwLockType: LongInt) : HRESULT; Virtual Visibility: public Description: LockRegion implements #rtl.types.IStream.LockRegion (1629). Errors: This function must be overridden and will raise a runerror 217 when called directly. See also: #rtl.types.IStream.LockRegion (1629)
374
2.64.15
TStreamAdapter.UnlockRegion
Synopsis: Unlock a region of the stream Declaration: function UnlockRegion(libOffset: Largeint;cb: Largeint; dwLockType: LongInt) : HRESULT; Virtual Visibility: public Description: UnLockRegion implements #rtl.types.IStream.UnLockRegion (1629). Errors: This function must be overridden and will raise a runerror 217 when called directly. See also: #rtl.types.IStream.UnLockRegion (1629)
2.64.16
TStreamAdapter.Stat
Synopsis: Return statistical data about the stream Declaration: function Stat(out statstg: TStatStg;grfStatFlag: LongInt) : HRESULT ; Virtual Visibility: public Description: Stat implements #rtl.types.IStream.Stat (1630). Errors: This function must be overridden and will raise a runerror 217 when called directly. See also: #rtl.types.IStream.Stat (1630)
2.64.17
TStreamAdapter.Clone
Virtual
Synopsis: Clone the stream Declaration: function Clone(out stm: IStream) : HRESULT; Visibility: public Description: Clone implements #rtl.types.IStream.Clone (1630). Errors: This function must be overridden and will raise a runerror 217 when called directly. See also: #rtl.types.IStream.Clone (1630)
2.64.18
TStreamAdapter.Stream
Synopsis: Stream on which adaptor works Declaration: Property Stream : TStream Visibility: public Access: Read Description: This is the stream on which the adaptor works. It was specied at rreation.
375
2.64.19
TStreamAdapter.StreamOwnership
Synopsis: Determines what happens with the stream when the adaptor is freed Declaration: Property StreamOwnership : TStreamOwnership Visibility: public Access: Read,Write Description: StreamOwnership determines what happens when the adaptor
2.65
2.65.1
TStringList
Description
TStringList is a descendent class of TStrings (381) that implements all of the abstract methods introduced there. It also introduces some additional methods: Sort the list, or keep the list sorted at all times Special handling of duplicates in sorted lists Notication of changes in the list See also: TStrings (381), TStrings.Duplicates (1), TStrings.Sorted (1)
2.65.2
Page 377 377 379 377 377 378 378 378 378 377 379
Method overview
Property Add Clear CustomSort Delete Destroy Exchange Find IndexOf Insert InsertItem Sort Description Implements the TStrings.Add (1) function. Implements the TStrings.Clear (1) function. Sort the stringlist using a custom sort algorithm Implements the TStrings.Delete (1) function. Destroys the stringlist. Implements the TStrings.Exchange (1) function. Locates the index for a given string in sorted lists. Overrides the TStrings.IndexOf (1) property. Overrides the TStrings.Insert (1) method. Sorts the strings in the list.
2.65.3
Page 380 379 380 380 381 379
Property overview
Property CaseSensitive Duplicates OnChange OnChanging OwnsObjects Sorted Access rw rw rw rw rw rw Description Describes the behaviour of a sorted list with respect to duplicate strings. Event triggered after the list was modied. Event triggered when the list is about to be modied. Determines whether the stringlist owns its objects or not. Determines whether the list is sorted or not.
376
2.65.4
TStringList.InsertItem
Declaration: procedure InsertItem(Index: Integer;const S: string); Virtual procedure InsertItem(Index: Integer;const S: string;O: TObject) ; Virtual Visibility: default
2.65.5
TStringList.Destroy
Override
Synopsis: Destroys the stringlist. Declaration: destructor Destroy; Visibility: public Description: Destroy clears the stringlist, release all memory allocated for the storage of the strings, and then calls the inherited destroy method. Remark: Any objects associated to strings in the list will not be destroyed; it is the responsability of the caller to destroy all objects associated with strings in the list.
2.65.6
TStringList.Add
Override
Synopsis: Implements the TStrings.Add (1) function. Declaration: function Add(const S: string) : Integer; Visibility: public Description: Add will add S to the list. If the list is sorted and the string S is already present in the list and TStringList.Duplicates (1) is dupError then an EStringListError (230) exception is raised. If Duplicates is set to dupIgnore then the return value is underned. If the list is sorted, new strings will not necessarily be added to the end of the list, rather they will be inserted at their alphabetical position. Errors: If the list is sorted and the string S is already present in the list and TStringList.Duplicates (1) is dupError then an EStringListError (230) exception is raised. See also: TStringList.Insert (1), TStringList.Duplicates (1)
2.65.7
TStringList.Clear
Override
Synopsis: Implements the TStrings.Clear (1) function. Declaration: procedure Clear; Visibility: public Description: Implements the TStrings.Clear (1) function.
2.65.8
TStringList.Delete
Override
Synopsis: Implements the TStrings.Delete (1) function. Declaration: procedure Delete(Index: Integer); Visibility: public Description: Implements the TStrings.Delete (1) function. 377
2.65.9
TStringList.Exchange
Override
Synopsis: Implements the TStrings.Exchange (1) function. Declaration: procedure Exchange(Index1: Integer;Index2: Integer); Visibility: public Description: Exchange will exchange two items in the list as described in TStrings.Exchange (1). Remark: Exchange will not check whether the list os sorted or not; if Exchange is called on a sorted list and the strings are not identical, the sort order of the list will be destroyed. See also: TStringList.Sorted (1), TStrings.Exchange (1)
2.65.10
TStringList.Find
Virtual
Synopsis: Locates the index for a given string in sorted lists. Declaration: function Find(const S: string;out Index: Integer) : Boolean; Visibility: public Description: Find returns True if the string S is present in the list. Upon exit, the Index parameter will contain the position of the string in the list. If the string is not found, the function will return False and Index will contain the position where the string will be inserted if it is added to the list. Remark: 1.Use this method only on sorted lists. For unsorted lists, use TStringList.IndexOf (1) instead. 2.Find uses a binary search method to locate the string
2.65.11
TStringList.IndexOf
Override
Synopsis: Overrides the TStrings.IndexOf (1) property. Declaration: function IndexOf(const S: string) : Integer; Visibility: public Description: IndexOf overrides the ancestor method TStrings.indexOf (1). It tries to optimize the search by executing a binary search if the list is sorted. The function returns the position of S if it is found in the list, or -1 if the string is not found in the list. See also: TStrings.IndexOf (1), TStringList.Find (1)
2.65.12
TStringList.Insert
Override
Synopsis: Overrides the TStrings.Insert (1) method. Declaration: procedure Insert(Index: Integer;const S: string); Visibility: public Description: Insert will insert the string S at position Index in the list. If the list is sorted, an EStringListError (230) exception will be raised instead. Index is a zero-based position. Errors: If Index contains an invalid value (less than zero or larger than Count, or the list is sorted, an EStringListError (230) exception will be raised. See also: TStringList.Add (1), TStrings.Insert (1), TStringList.InsertObject (1) 378
2.65.13
TStringList.Sort
Virtual
Synopsis: Sorts the strings in the list. Declaration: procedure Sort; Visibility: public Description: Sort will sort the strings in the list using the quicksort algorithm. If the list has its TStringList.Sorted (1) property set to True then nothing will be done. See also: TStringList.Sorted (1)
2.65.14
TStringList.CustomSort
Virtual
Synopsis: Sort the stringlist using a custom sort algorithm Declaration: procedure CustomSort(CompareFn: TStringListSortCompare); Visibility: public Description: CustomSort sorts the stringlist with a custom comparison function. The function should compare 2 elements in the list, and return a negative number if the rst item is before the second. It should return 0 if the elements are equal, and a positive result indicates that the second elements should be before the rst. See also: TStringList.Sorted (1), TStringList.Sort (1)
2.65.15
TStringList.Duplicates
Synopsis: Describes the behaviour of a sorted list with respect to duplicate strings. Declaration: Property Duplicates : TDuplicates Visibility: public Access: Read,Write Description: Duplicates describes what to do in case a duplicate value is added to the list: Table 2.23: dupIgnore dupError dupAccept Duplicate values will not be be added to the list, but no error will be triggered. If an attempt is made to add a duplicate value to the list, an EStringListError (230) exception is raised. Duplicate values can be added to the list.
2.65.16
TStringList.Sorted
Synopsis: Determines whether the list is sorted or not. Declaration: Property Sorted : Boolean Visibility: public 379
Access: Read,Write Description: Sorted can be set to True in order to cause the list of strings to be sorted. Further additions to the list will be inserted at the correct position so the list remains sorted at all times. Setting the property to False has no immediate effect, but will allow strings to be inserted at any position. Remark: 1.When Sorted is True, TStringList.Insert (1) cannot be used. For sorted lists, TStringList.Add (1) should be used instead. 2.If Sorted is True, the TStringList.Duplicates (1) setting has effect. This setting is ignored when Sorted is False. See also: TStringList.Sort (1), TStringList.Duplicates (1), TStringList.Add (1), TstringList.Insert (1)
2.65.17
Synopsis:
TStringList.CaseSensitive
Declaration: Property CaseSensitive : Boolean Visibility: public Access: Read,Write Description: Indicates whether locating strings happens in a case sensitive manner.
2.65.18
TStringList.OnChange
Synopsis: Event triggered after the list was modied. Declaration: Property OnChange : TNotifyEvent Visibility: public Access: Read,Write Description: OnChange can be assigned to respond to changes that have occurred in the list. The handler is called whenever strings are added, moved, modied or deleted from the list. The Onchange event is triggered after the modication took place. When the modication is about to happen, an TstringList.OnChanging (1) event occurs. See also: TStringList.OnChanging (1)
2.65.19
TStringList.OnChanging
Synopsis: Event triggered when the list is about to be modied. Declaration: Property OnChanging : TNotifyEvent Visibility: public Access: Read,Write Description: OnChanging can be assigned to respond to changes that will occurred in the list. The handler is called whenever strings will be added, moved, modied or deleted from the list. The Onchanging event is triggered before the modication will take place. When the modication has happened, an TstringList.OnChange (1) event occurs. See also: TStringList.OnChange (1) 380
2.65.20
TStringList.OwnsObjects
Synopsis: Determines whether the stringlist owns its objects or not. Declaration: Property OwnsObjects : Boolean Visibility: public Access: Read,Write Description: OwnsObjects can be set to true to let the stringlist instance own the objects in the list: if an element is removed from the list, the associated object (if there is any) will be freed as well. The same is true if the list is cleared or destroyed. See also: TStrings.Objects (1)
2.66
2.66.1
TStrings
Description
TStrings implements an abstract class to manage an array of strings. It introduces methods to set and retrieve strings in the array, searching for a particular string, concatenating the strings and so on. It also allows an arbitrary object to be associated with each string. It also introduces methods to manage a series of name=value settings, as found in many conguration les. An instance of TStrings is never created directly, instead a descendent class such as TStringList (376) should be created. This is because TStrings is an abstract class which does not implement all methods; TStrings also doesnt store any strings, this is the functionality introduced in descendents such as TStringList (376). See also: TStringList (376)
381
2.66.2
Page 383 384 384 384 384 385 385 385 383 386 386 383 386 391 387 391 387 387 387 388 388 388 389 389 389 390 390 390
Method overview
Property Add AddObject AddStrings Append Assign BeginUpdate Clear Delete Destroy EndUpdate Equals Error Exchange ExtractName GetEnumerator GetNameValue GetText IndexOf IndexOfName IndexOfObject Insert InsertObject LoadFromFile LoadFromStream Move SaveToFile SaveToStream SetText Description Add a string to the list Add a string and associated object to the list. Add contents of another stringlist to this list. Add a string to the list. Assign the contents of another stringlist to this one. Mark the beginning of an update batch. Removes all strings and associated objects from the list. Delete a string from the list. Frees all strings and objects, and removes the list from memory. Mark the end of an update batch. Compares the contents of two stringlists. Raises an EStringListError (230) exception. Exchanges two strings in the list. Extract the name part of a string Create an IEnumerator instance Return both name and value of a name,value pair based on its index. Returns the contents as a PChar Find a string in the list and return its position. Finds the index of a name in the name-value pairs. Finds an object in the list and returns its index. Insert a string in the list. Insert a string and associated object in the list. Load the contents of a le as a series of strings. Load the contents of a stream as a series of strings. Move a string from one place in the list to another. Save the contents of the list to a le. Save the contents of the string to a stream. Set the contents of the list from a PChar.
382
2.66.3
Page 393 393 394 392 391 395 393 395 392 392 396 397 396 391 393 395
Property overview
Property Capacity CommaText Count DelimitedText Delimiter Names NameValueSeparator Objects QuoteChar StrictDelimiter Strings StringsAdapter Text TextLineBreakStyle ValueFromIndex Values Access rw rw r rw rw r rw rw rw rw rw rw rw rw rw rw Description Capacity of the list, i.e. number of strings that the list can currently hold before it tries to expand. Contents of the list as a comma-separated string. Number of strings in the list. Get or set all strings in the list in a delimited form. Delimiter character used in DelimitedText (392). Name parts of the name-value pairs in the list. Value of the character used to separate name,value pairs Indexed access to the objects associated with the strings in the list. Quote character used in DelimitedText (392). Should only the delimiter character be considered a delimiter Indexed access to the strings in the list. Not implemented in Free Pascal. Contents of the list as one big string. Determines which line breaks to use in the Text (396) property Return the value part of a string based on its index. Value parts of the name-value pairs in the list.
2.66.4
TStrings.Error
Synopsis: Raises an EStringListError (230) exception. Declaration: procedure Error(const Msg: string;Data: Integer) procedure Error(const Msg: PString;Data: Integer) Visibility: default Description: Error raises an EStringListError (230) exception. It passes Msg as a format with Data as the only argument. This method can be used by descendent objects to raise an error. See also: EStringListError (230)
2.66.5
TStrings.Destroy
Override
Synopsis: Frees all strings and objects, and removes the list from memory. Declaration: destructor Destroy; Visibility: public Description: Destroy is the destructor of TStrings it does nothing except calling the inherited destructor.
2.66.6
TStrings.Add
Virtual
Synopsis: Add a string to the list Declaration: function Add(const S: string) : Integer; Visibility: public 383
Description: Add adds S at the end of the list and returns the index of S in the list (which should equal Tstrings.Count (1) See also: TStrings.Items (1), TStrings.AddObject (1), TStrings.Insert (1), TStrings.Delete (1), TStrings.Strings (1), TStrings.Count (1)
2.66.7
TStrings.AddObject
Virtual
Synopsis: Add a string and associated object to the list. Declaration: function AddObject(const S: string;AObject: TObject) : Integer; Visibility: public Description: AddObject adds S to the list of strings, and associates AObject with it. It returns the index of S. Remark: An object added to the list is not automatically destroyed by the list of the list is destroyed or the string it is associated with is deleted. It is the responsibility of the application to destroy any objects associated with strings. See also: TStrings.Add (1), Tstrings.Items (1), TStrings.Objects (1), Tstrings.InsertObject (1)
2.66.8
TStrings.Append
Synopsis: Add a string to the list. Declaration: procedure Append(const S: string) Visibility: public Description: Append does the same as TStrings.Add (1), only it does not return the index of the inserted string. See also: TStrings.Add (1)
2.66.9
TStrings.AddStrings
Virtual
Synopsis: Add contents of another stringlist to this list. Declaration: procedure AddStrings(TheStrings: TStrings); Visibility: public Description: AddStrings adds the contents of TheStrings to the stringlist. Any associated objects are added as well. See also: TStrings.Add (1), TStrings.Assign (1)
2.66.10
TStrings.Assign
Override
Synopsis: Assign the contents of another stringlist to this one. Declaration: procedure Assign(Source: TPersistent); Visibility: public Description: Assign replaces the contents of the stringlist with the contents of Source if Source is also of type TStrings. Any associated objects are copied as well. See also: TStrings.Add (1), TStrings.AddStrings (1), TPersistent.Assign (1) 384
2.66.11
TStrings.BeginUpdate
Synopsis: Mark the beginning of an update batch. Declaration: procedure BeginUpdate Visibility: public Description: BeginUpdate increases the update count by one. It is advisable to call BeginUpdate before lengthy operations on the stringlist. At the end of these operation, TStrings.EndUpdate (1) should be called to mark the end of the operation. Descendent classes may use this information to perform optmizations. e.g. updating the screen only once after many strings were added to the list. All TStrings methods that modify the string list call BeginUpdate before the actual operation, and call endUpdate when the operation is nished. Descendent classes should also call these methods when modifying the string list. Remark: Always put the corresponding call to TStrings.EndUpdate (1) in the context of a Finally block, to ensure that the update count is always descreased at the end of the operation, even if an exception occurred: With MyStrings do try BeginUpdate; // Some lengthy operation. Finally EndUpdate end; See also: TStrings.EndUpdate (1)
2.66.12
TStrings.Clear
Virtual; Abstract
Synopsis: Removes all strings and associated objects from the list. Declaration: procedure Clear; Visibility: public Description: Clear will remove all strings and their associated objects from the list. After a call to clear, TStrings.Count (1) is zero. Since it is an abstract method, TStrings itself does not implement Clear. Descendent classes such as TStringList (376) implement this method. See also: TStrings.Items (1), TStrings.Delete (1), TStrings.Count (1)
2.66.13
TStrings.Delete
Virtual; Abstract
Synopsis: Delete a string from the list. Declaration: procedure Delete(Index: Integer); Visibility: public Description: Delete deletes the string at position Index from the list. The associated object is also removed from the list, but not destroyed. Index is zero-based, and should be in the range 0 to Count-1. Since it is an abstract method, TStrings itself does not implement Delete. Descendent classes such as TStringList (376) implement this method. 385
Errors: If Index is not in the allowed range, an EStringListError (230) is raised. See also: TStrings.Insert (1), TStrings.Items (1), TStrings.Clear (1)
2.66.14
TStrings.EndUpdate
Synopsis: Mark the end of an update batch. Declaration: procedure EndUpdate Visibility: public Description: EndUpdate should be called at the end of a lengthy operation on the stringlist, but only if there was a call to BeginUpdate before the operation was started. It is best to put the call to EndUpdate in the context of a Finally block, so it will be called even if an exception occurs. For more information, see TStrings.BeginUpdate (1). See also: TStrings.BeginUpdate (1)
2.66.15
TStrings.Equals
Synopsis: Compares the contents of two stringlists. Declaration: function Equals(Obj: TObject) : Boolean; Override; Overload function Equals(TheStrings: TStrings) : Boolean; Overload Visibility: default Description: Equals compares the contents of the stringlist with the contents of TheStrings. If the contents match, i.e. the stringlist contain an equal amount of strings, and all strings match, then True is returned. If the number of strings in the lists is is unequal, or they contain one or more different strings, False is returned. Remark: 1.The strings are compared case-insensitively. 2.The associated objects are not compared See also: Tstrings.Items (1), TStrings.Count (1), TStrings.Assign (1)
2.66.16
TStrings.Exchange
Virtual
Synopsis: Exchanges two strings in the list. Declaration: procedure Exchange(Index1: Integer;Index2: Integer); Visibility: public Description: Exchange exchanges the strings at positions Index1 and Index2. The associated objects are also exchanged. Both indexes must be in the range of valid indexes, i.e. must have a value between 0 and Count-1. Errors: If either Index1 or Index2 is not in the range of valid indexes, an EStringListError (230) exception is raised. See also: TStrings.Move (1), TStrings.Strings (1), TStrings.Count (1)
386
2.66.17
TStrings.GetEnumerator
Synopsis: Create an IEnumerator instance Declaration: function GetEnumerator : TStringsEnumerator Visibility: public Description: GetEnumerator is the implementation of the IEnumerable (1426) interface for TStrings. It creates a TStringsEnumerator (397) instance and returns its IEnumerator (1426) interface. See also: TStringsEnumerator (397), IEnumerator (1426), IEnumerable (1426)
2.66.18
TStrings.GetText
Virtual
Synopsis: Returns the contents as a PChar Declaration: function GetText : PChar; Visibility: public Description: GetText allocates a memory buffer and compies the contents of the stringlist to this buffer as a series of strings, separated by an end-of-line marker. The buffer is zero terminated. Remark: The caller is responsible for freeing the returned memory buffer.
2.66.19
TStrings.IndexOf
Virtual
Synopsis: Find a string in the list and return its position. Declaration: function IndexOf(const S: string) : Integer; Visibility: public Description: IndexOf searches the list for S. The search is case-insensitive. If a matching entry is found, its position is returned. if no matching string is found, -1 is returned. Remark: 1.Only the rst occurrence of the string is returned. 2.The returned position is zero-based, i.e. 0 indicates the rst string in the list. See also: TStrings.IndexOfObject (1), TStrings.IndexOfName (1), TStrings.Strings (1)
2.66.20
TStrings.IndexOfName
Virtual
Synopsis: Finds the index of a name in the name-value pairs. Declaration: function IndexOfName(const Name: string) : Integer; Visibility: public Description: IndexOfName searches in the list of strings for a name-value pair with name part Name. If such a pair is found, it returns the index of the pair in the stringlist. If no such pair is found, the function returns -1. The search is done case-insensitive. Remark: 1.Only the rst occurrence of a matching name-value pair is returned. 2.The returned position is zero-based, i.e. 0 indicates the rst string in the list. See also: TStrings.IndexOf (1), TStrings.IndexOfObject (1), TStrings.Strings (1) 387
2.66.21
TStrings.IndexOfObject
Virtual
Synopsis: Finds an object in the list and returns its index. Declaration: function IndexOfObject(AObject: TObject) : Integer; Visibility: public Description: IndexOfObject searchs through the list of strings till it nd a string associated with AObject, and returns the index of this string. If no such string is found, -1 is returned. Remark: 1.Only the rst occurrence of a string with associated object AObject is returned; if more strings in the list can be associated with AObject, they will not be found by this routine. 2.The returned position is zero-based, i.e. 0 indicates the rst string in the list.
2.66.22
TStrings.Insert
Virtual; Abstract
Synopsis: Insert a string in the list. Declaration: procedure Insert(Index: Integer;const S: string); Visibility: public Description: Insert inserts the string S at position Index in the list. Index is a zero-based position, and can have values from 0 to Count. If Index equals Count then the string is appended to the list. Remark: 1.All methods that add strings to the list use Insert to add a string to the list. 2.If the string has an associated object, use TStrings.InsertObject (1) instead. Errors: If Index is less than zero or larger than Count then an EStringListError (230) exception is raised. See also: TStrings.Add (1), TStrings.InsertObject (1), TStrings.Append (1), TStrings.Delete (1)
2.66.23
TStrings.InsertObject
Synopsis: Insert a string and associated object in the list. Declaration: procedure InsertObject(Index: Integer;const S: string;AObject: TObject) Visibility: public Description: InsertObject inserts the string S and its associated objectAObject at position Index in the list. Index is a zero-based position, and can have values from 0 to Count. If Index equals Count then the string is appended to the list. Errors: If Index is less than zero or larger than Count then an EStringListError (230) exception is raised. See also: TStrings.Insert (1), TStrings.AddObject (1), TStrings.Append (1), TStrings.Delete (1)
388
2.66.24
TStrings.LoadFromFile
Virtual
Synopsis: Load the contents of a le as a series of strings. Declaration: procedure LoadFromFile(const FileName: string); Visibility: public Description: LoadFromFile loads the contents of a le into the stringlist. Each line in the le (as marked by the end-of-line marker of the particular OS the application runs on) becomes one string in the stringlist. This action replaces the contents of the stringlist, it does not append the strings to the current content. LoadFromFile simply creates a le stream (306) with the given lename, and then executes TStrings.LoadfromStream (1); after that the le stream object is destroyed again. See also: TStrings.LoadFromStream (1), TStrings.SaveToFile (1), Tstrings.SaveToStream (1)
2.66.25
TStrings.LoadFromStream
Virtual
Synopsis: Load the contents of a stream as a series of strings. Declaration: procedure LoadFromStream(Stream: TStream); Visibility: public Description: LoadFromStream loads the contents of Stream into the stringlist. Each line in the stream (as marked by the end-of-line marker of the particular OS the application runs on) becomes one string in the stringlist. This action replaces the contents of the stringlist, it does not append the strings to the current content. See also: TStrings.LoadFromFile (1), TStrings.SaveToFile (1), Tstrings.SaveToStream (1)
2.66.26
TStrings.Move
Virtual
Synopsis: Move a string from one place in the list to another. Declaration: procedure Move(CurIndex: Integer;NewIndex: Integer); Visibility: public Description: Move moves the string at position CurIndex so it has position NewIndex after the move operation. The object associated to the string is also moved. CurIndex and NewIndex should be in the range of 0 to Count-1. Remark: NewIndex is not the position in the stringlist before the move operation starts. The move operation 1.removes the string from position CurIndex 2.inserts the string at position NewIndex This may not lead to the desired result if NewIndex is bigger than CurIndex. Consider the following example: With MyStrings do begin Clear; Add(String 0); Add(String 1);
389
Add(String 2); Add(String 3); Add(String 4); Move(1,3); end; After the Move operation has completed, String 1 will be between String 3 and String 4. Errors: If either CurIndex or NewIndex is outside the allowed range, an EStringListError (230) is raised. See also: TStrings.Exchange (1)
2.66.27
TStrings.SaveToFile
Virtual
Synopsis: Save the contents of the list to a le. Declaration: procedure SaveToFile(const FileName: string); Visibility: public Description: SaveToFile saves the contents of the stringlist to the le with name FileName. It writes the strings to the le, separated by end-of-line markers, so each line in the le will contain 1 string from the stringlist. SaveToFile creates a le stream (306) with name FileName, calls TStrings.SaveToStream (1) and then destroys the le stream object. Errors: An EStreamError (229) exception can be raised if the le FileName cannot be opened, or if it cannot be written to. See also: TStrings.SaveToStream (1), Tstrings.LoadFromStream (1), TStrings.LoadFromFile (1)
2.66.28
TStrings.SaveToStream
Virtual
Synopsis: Save the contents of the string to a stream. Declaration: procedure SaveToStream(Stream: TStream); Visibility: public Description: SaveToStream saves the contents of the stringlist to Stream. It writes the strings to the stream, separated by end-of-line markers, so each line in the stream will contain 1 string from the stringlist. Errors: An EStreamError (229) exception can be raised if the stream cannot be written to. See also: TStrings.SaveToFile (1), Tstrings.LoadFromStream (1), TStrings.LoadFromFile (1)
2.66.29
TStrings.SetText
Virtual
Synopsis: Set the contents of the list from a PChar. Declaration: procedure SetText(TheText: PChar); Visibility: public Description: SetText parses the contents of TheText and lls the stringlist based on the contents. It regards TheText as a series of strings, separated by end-of-line markers. Each of these strings is added to the stringlist. See also: TStrings.Text (1) 390
2.66.30
TStrings.GetNameValue
Synopsis: Return both name and value of a name,value pair based on its index. Declaration: procedure GetNameValue(Index: Integer;out AName: string; out AValue: string) Visibility: public Description: Return both name and value of a name,value pair based on its index.
2.66.31
TStrings.ExtractName
Synopsis: Extract the name part of a string Declaration: function ExtractName(const S: string) : string Visibility: public Description: ExtractName returns the name part (the part before the NameValueSeparator (1) character) of the string. If the character is not present, an empty string is returned. The resulting string is not trimmed, it can end or start with spaces. See also: NameValueSeparator (1)
2.66.32
TStrings.TextLineBreakStyle
Synopsis: Determines which line breaks to use in the Text (396) property Declaration: Property TextLineBreakStyle : TTextLineBreakStyle Visibility: public Access: Read,Write Description: TextLineBreakStyle determines which linebreak style is used when constructing the Text property: the same rules are used as in the writing to text les: tlbsLFLines are separated with a linefeed character #10. tlbsCRLFLines are separated with a carriage-return/linefeed character pair: #13#10. tlbsCRLines are separated with a carriage-return character #13. It has no effect when setting the text property. See also: Text (396)
2.66.33
TStrings.Delimiter
Synopsis: Delimiter character used in DelimitedText (392). Declaration: Property Delimiter : Char Visibility: public Access: Read,Write Description: Delimiter is the delimiter character used to separate the different strings in the stringlist when they are read or set through the DelimitedText (1) property. See also: TStrings.DelimitedText (1) 391
2.66.34
TStrings.DelimitedText
Synopsis: Get or set all strings in the list in a delimited form. Declaration: Property DelimitedText : string Visibility: public Access: Read,Write Description: DelimitedText returns all strings, properly quoted with QuoteChar (1) and separated by the Delimiter (1) character. Strings are quoted if they contain a space or any character with ASCII value less than 32. The CommaText (1) property is a special case of delimited text where the delimiter character is a comma and the quote character is a double quote. If StrictDelimiter (1) is set to True, then no quoting is done (The QuoteChar property is disregarded completely): the returned text will contain the items in the stringlist, separated by the Delimiter character. When writing the DelimitedText property, the text will be split at all occurrences of the Delimiter character, again disregarding the QuoteChar property. See also: TStrings.Delimiter (1), TStrings.Text (1), TStrings.QuoteChar (1), TStrings.CommaText (1)
2.66.35
TStrings.StrictDelimiter
Synopsis: Should only the delimiter character be considered a delimiter Declaration: Property StrictDelimiter : Boolean Visibility: public Access: Read,Write Description: StrictDelimiter can be used to indicate that only the delimiter character should be considered a delimiter when setting DelimitedText (1): under normal circumstances, quotes and spaces are considered specially (see the TStrings.CommaText (1) property for more information). When StrictDelimiter is set to True then only the Delimiter (1) character is considered when splitting the text in items: no quoting whatsoever is performed (or expected) when writing the DelimitedText property. See also: DelimitedText (1), CommaText (1), Delimiter (1)
2.66.36
TStrings.QuoteChar
Synopsis: Quote character used in DelimitedText (392). Declaration: Property QuoteChar : Char Visibility: public Access: Read,Write Description: QuoteChar is the character used by the DelimitedText (1) property to quote strings that have a space or non-printing character in it.
392
2.66.37
TStrings.NameValueSeparator
Synopsis: Value of the character used to separate name,value pairs Declaration: Property NameValueSeparator : Char Visibility: public Access: Read,Write Description: NameValueSeparator is the character used to separate name,value pair. By default, this is the equal sign (=), resulting in Name=Value pairs. It can be set to a colon for Name : Value pairs.
2.66.38
TStrings.ValueFromIndex
Synopsis: Return the value part of a string based on its index. Declaration: Property ValueFromIndex[Index: Integer]: string Visibility: public Access: Read,Write Description: ValueFromIndex returns the value part of a string based on the string index. The value part are all characters in the string after the NameValueSeparator (1) character, or all characters if the NameValueSeparator character is not present.
2.66.39
TStrings.Capacity
Synopsis: Capacity of the list, i.e. number of strings that the list can currently hold before it tries to expand. Declaration: Property Capacity : Integer Visibility: public Access: Read,Write Description: Capacity is the number of strings that the list can hold before it tries to allocate more memory. TStrings returns TStrings.Count (1) when read. Trying to set the capacity has no effect. Descendent classes such as TStringlist (376) can override this property such that it actually sets the new capacity. See also: TStringList (376), TStrings.Count (1)
2.66.40
TStrings.CommaText
Synopsis: Contents of the list as a comma-separated string. Declaration: Property CommaText : string Visibility: public Access: Read,Write Description: CommaText represents the stringlist as a single string, consisting of a comma-separated concatenation of the strings in the list. If one of the strings contains spaces, commas or quotes it will be enclosed by double quotes. Any double quotes in a string will be doubled. For instance the following strings: 393
Comma,string Quote"string Space string NormalSttring is converted to "Comma,string","Quote""String","Space string",NormalString Conversely, when setting the CommaText property, the text will be parsed according to the rules outlined above, and the strings will be set accordingly. Note that spaces will in this context be regarded as string separators, unless the string as a whole is contained in double quotes. Spaces that occur next to a delimiter will be ignored. The following string: "Comma,string" , "Quote""String",Space string,, NormalString Will be converted to Comma,String Quote"String Space String NormalString This is a special case of the TStrings.DelimitedText (1) property where the quote character is always the double quote, and the delimiter is always the colon. See also: TStrings.Text (1), TStrings.SetText (1)
2.66.41
TStrings.Count
Synopsis: Number of strings in the list. Declaration: Property Count : Integer Visibility: public Access: Read Description: Count is the current number of strings in the list. TStrings does not implement this property; descendent classes should override the property read handler to return the correct value. Strings in the list are always uniquely identied by their Index; the index of a string is zero-based, i.e. its supported range is 0 to Count-1. trying to access a string with an index larger than or equal to Count will result in an error. Code that iterates over the list in a stringlist should always take into account the zero-based character of the list index. See also: TStrings.Strings (1), TStrings.Objects (1), TStrings.Capacity (1)
394
2.66.42
TStrings.Names
Synopsis: Name parts of the name-value pairs in the list. Declaration: Property Names[Index: Integer]: string Visibility: public Access: Read Description: Names provides indexed access to the names of the name-value pairs in the list. It returns the name part of the Index-th string in the list. Remark: The index is not an index based on the number of name-value pairs in the list. It is the name part of the name-value pair a string Index in the list. If the string at position Index is not a name-value pair (i.e. does not contain the equal sign (=)), then an empty name is returned. See also: TStrings.Values (1), TStrings.IndexOfName (1)
2.66.43
TStrings.Objects
Synopsis: Indexed access to the objects associated with the strings in the list. Declaration: Property Objects[Index: Integer]: TObject Visibility: public Access: Read,Write Description: Objects provides indexed access to the objects associated to the strings in the list. Index is a zero-based index and must be in the range of 0 to Count-1. Setting the objects property will not free the previously associated object, if there was one. The caller is repsonsible for freeing the object that was previously associated to the string. TStrings does not implement any storage for objects. Reading the Objects property will always return Nil, Setting the property will have no effect. It is the responsability of the descendent classes to provide storage for the associated objects. Errors: If an Index outside the valid range is specied, an EStringListError (230) exception will be raised. See also: TStrings.Strings (1), TStrings.IndexOfObject (1), TStrings.Names (1), TStrings.Values (1)
2.66.44
TStrings.Values
Synopsis: Value parts of the name-value pairs in the list. Declaration: Property Values[Name: string]: string Visibility: public Access: Read,Write Description: Values represents the value parts of the name-value pairs in the list. When reading this property, if there is a name-value pair in the list of strings that has name part Name, then the corresponding value is returned. If there is no such pair, an empty string is returned. When writing this value, rst it is checked whether there exists a name-value pair in the list with name Name. If such a pair is found, its value part is overwritten with the specied value. If no such pair is found, a new name-value pair is added with the specied Name and value. Remark: 395
1.Names are compared case-insensitively. 2.Any character, including whitespace, up till the rst equal (=) sign in a string is considered part of the name. See also: TStrings.Names (1), TStrings.Strings (1), TStrings.Objects (1)
2.66.45
TStrings.Strings
Synopsis: Indexed access to the strings in the list. Declaration: Property Strings[Index: Integer]: string; default Visibility: public Access: Read,Write Description: Strings is the default property of TStrings. It provides indexed read-write access to the list of strings. Reading it will return the string at position Index in the list. Writing it will set the string at position Index. Index is the position of the string in the list. It is zero-based, i.e. valued values range from 0 (the rst string in the list) till Count-1 (the last string in the list). When browsing through the strings in the list, this fact must be taken into account. To access the objects associated with the strings in the list, use the TStrings.Objects (1) property. The name parts of name-value pairs can be accessed with the TStrings.Names (1) property, and the values can be set or read through the TStrings.Values (1) property. Searching through the list can be done using the TStrings.IndexOf (1) method. Errors: If Index is outside the allowed range, an EStringListError (230) exception is raised. See also: TStrings.Count (1), TStrings.Objects (1), TStrings.Names (1), TStrings.Values (1), TStrings.IndexOf (1)
2.66.46
TStrings.Text
Synopsis: Contents of the list as one big string. Declaration: Property Text : string Visibility: public Access: Read,Write Description: Text returns, when read, the contents of the stringlist as one big string consisting of all strings in the list, separated by an end-of-line marker. When this property is set, the string will be cut into smaller strings, based on the positions of end-of-line markers in the string. Any previous content of the stringlist will be lost. Remark: If any of the strings in the list contains an end-of-line marker, then the resulting string will appear to contain more strings than actually present in the list. To avoid this ambiguity, use the TStrings.CommaText (1) property instead. See also: TStrings.Strings (1), TStrings.Count (1), TStrings.CommaText (1)
396
2.66.47
TStrings.StringsAdapter
Synopsis: Not implemented in Free Pascal. Declaration: Property StringsAdapter : IStringsAdapter Visibility: public Access: Read,Write Description: Not implemented in Free Pascal.
2.67
2.67.1
TStringsEnumerator
Description
TStringsEnumerator implements the #rtl.system.IEnumerator (1426) interface for the TStrings (381) class, so the TStrings class can be used in a for ... in loop. It is returned by the TStrings.GetEnumerator (1) method of TStrings. See also: TStrings (381), TStrings.GetEnumerator (1), #rtl.system.IEnumerator (1426)
2.67.2
Page 397 397 398
Method overview
Property Create GetCurrent MoveNext Description Initialize a new instance of TStringsEnumerator Return the current pointer in the list Move the position of the enumerator to the next position in the list.
2.67.3
Page 398
Property overview
Property Current Access r Description Current pointer in the list
2.67.4
TStringsEnumerator.Create
Synopsis: Initialize a new instance of TStringsEnumerator Declaration: constructor Create(AStrings: TStrings) Visibility: public Description: Create initializes a new instance of TStringsEnumerator and keeps a reference to the stringlist AStrings that will be enumerated. See also: TStrings (381)
2.67.5
TStringsEnumerator.GetCurrent
Synopsis: Return the current pointer in the list Declaration: function GetCurrent : string Visibility: public
397
Description: GetCurrent returns the current string item in the enumerator. Errors: No checking is done on the validity of the current position. See also: MoveNext (1), TStringItem (210)
2.67.6
TStringsEnumerator.MoveNext
Synopsis: Move the position of the enumerator to the next position in the list. Declaration: function MoveNext : Boolean Visibility: public Description: MoveNext puts the pointer on the next item in the stringlist, and returns True if this succeeded, or False if the pointer is past the last element in the list. Errors: Note that if False is returned, calling GetCurrent will result in an exception. See also: GetCurrent (1)
2.67.7
TStringsEnumerator.Current
Synopsis: Current pointer in the list Declaration: Property Current : string Visibility: public Access: Read Description: Current redenes GetCurrent (1) as a property. See also: GetCurrent (1)
2.68
2.68.1
TStringStream
Description
TStringStream stores its data in an ansistring. The contents of this string is available as the DataString (1) property. It also introduces some methods to read or write parts of the stringstreams data as a string. The main purpose of a TStringSTream is to be able to treat a string as a stream from which can be read. See also: TStream (362), TStringStream.DataString (1), TStringStream.ReadString (1), TStringStream.WriteString (1)
2.68.2
Page 399 399 399 399 400 400
Method overview
Property Create Read ReadString Seek Write WriteString Description Creates a new stringstream and sets its initial content. Reads from the stream. Reads a string of length Count Sets the position in the stream. Write overries the TStream.Write (1) method. WriteString writes a string to the stream. 398
2.68.3
Page 400
Property overview
Property DataString Access r Description Contains the contents of the stream in string form
2.68.4
TStringStream.Create
Synopsis: Creates a new stringstream and sets its initial content. Declaration: constructor Create(const AString: string) Visibility: public Description: Create creates a new TStringStream instance and sets its initial content to Astring. The position is still 0 but the size of the stream will equal the length of the string. See also: TStringStream.DataString (1)
2.68.5
TStringStream.Read
Override
Synopsis: Reads from the stream. Declaration: function Read(var Buffer;Count: LongInt) : LongInt; Visibility: public Description: Read overrides the Read (1) from TStream (362). It tries to read Count bytes into Buffer. It returns the number of bytes actually read. The position of the stream is advanced with the number of bytes actually read; When the reading has reached the end of the DataString (1), then the reading stops, i.e. it is not possible to read beyond the end of the datastring. See also: TStream.Read (1), TStringStream.Write (1), TStringStream.DataString (1)
2.68.6
TStringStream.ReadString
Synopsis: Reads a string of length Count Declaration: function ReadString(Count: LongInt) : string Visibility: public Description: ReadString reads Count bytes from the stream and returns the read bytes as a string. If less than Count bytes were available, the string has as many characters as bytes could be read. The ReadString method is a wrapper around the Read (1) method. It does not do the same stringas the TStream.ReadAnsiString (1) method, which rst reads a length integer to determine the length of the string to be read. See also: TStringStream.Read (1), TStream.ReadAnsiString (1)
2.68.7
TStringStream.Seek
Override
Synopsis: Sets the position in the stream. Declaration: function Seek(Offset: LongInt;Origin: Word) : LongInt; Visibility: public Description: Seek implements the abstract Seek (1) method. 399
2.68.8
TStringStream.Write
Override
Synopsis: Write overries the TStream.Write (1) method. Declaration: function Write(const Buffer;Count: LongInt) : LongInt; Visibility: public Description: Write overries the TStream.Write (1) method.
2.68.9
TStringStream.WriteString
Synopsis: WriteString writes a string to the stream. Declaration: procedure WriteString(const AString: string) Visibility: public Description: WriteString writes a string to the stream.
2.68.10
TStringStream.DataString
Synopsis: Contains the contents of the stream in string form Declaration: Property DataString : string Visibility: public Access: Read Description: Contains the contents of the stream in string form
2.69
2.69.1
TTextObjectWriter
Description
2.70
2.70.1
TThread
Description
The TThread class encapsulates the native thread support of the operating system. To create a thread, declare a descendent of the TThread object and override the Execute (1) method. In this method, the tthreads code should be executed. To run a thread, create an instance of the tthread descendent, and call its execute method. See also: EThread (230), TThread.Execute (1)
400
2.70.2
Page 402 401 401 402 402 402 401 402 403
Method overview
Property AfterConstruction Create Destroy Resume Start Suspend Synchronize Terminate WaitFor Description Code to be executed after construction but before execute. Creates a new thread. Destroys the thread object. Resumes the threads execution. Starts a thread thread that was created in a suspended state. Suspends the threads execution. Synchronizes the thread by executing the method in the main thread. Signals the thread it should terminate. Waits for the thread to terminate and returns the exit status.
2.70.3
Page 404 403 403 404 403 403 404
Property overview
Property FatalException FreeOnTerminate Handle OnTerminate Priority Suspended ThreadID Access r rw r rw rw rw r Description Exception that occured during thread execution Indicates whether the thread should free itself when it stops executing. Returns the thread handle. Event called when the thread terminates. Returns the thread priority. Indicates whether the thread is suspended. Returns the thread ID.
2.70.4
TThread.Synchronize
Synopsis: Synchronizes the thread by executing the method in the main thread. Declaration: procedure Synchronize(AMethod: TThreadMethod) class procedure Synchronize(AThread: TThread;AMethod: TThreadMethod) Visibility: default Description: Synchronizes the thread by executing the method in the main thread.
2.70.5
TThread.Create
Synopsis: Creates a new thread. Declaration: constructor Create(CreateSuspended: Boolean;const StackSize: SizeUInt) Visibility: public Description: Creates a new thread.
2.70.6
TThread.Destroy
Override
Synopsis: Destroys the thread object. Declaration: destructor Destroy; Visibility: public Description: Destroys the thread object.
401
2.70.7
TThread.AfterConstruction
Override
Synopsis: Code to be executed after construction but before execute. Declaration: procedure AfterConstruction; Visibility: public Description: AfterConstruction is overridden in TThread but currently does not do anything useful.
2.70.8
TThread.Start
Synopsis: Starts a thread thread that was created in a suspended state. Declaration: procedure Start Visibility: public Description: The effect of this method is currently the same as calling TThread.Resume after creating a thread in a suspended state. This method was added for Delphi-compatibility, where it was introduced after TThread.Suspend and TThread.Resume were deprecated. See also: TThread.Create (1)
2.70.9
TThread.Resume
Synopsis: Resumes the threads execution. Declaration: procedure Resume Visibility: public Description: Resumes the threads execution. See also: TThread.Start (1), TThread.Suspend (1)
2.70.10
TThread.Suspend
Synopsis: Suspends the threads execution. Declaration: procedure Suspend Visibility: public Description: On non-Windows platforms, a thread can only suspend itself. Other threads can wake up a suspended thread by calling TThread.Resume. See also: TThread.Resume (1)
2.70.11
TThread.Terminate
Synopsis: Signals the thread it should terminate. Declaration: procedure Terminate Visibility: public Description: Signals the thread it should terminate.
402
2.70.12
TThread.WaitFor
Synopsis: Waits for the thread to terminate and returns the exit status. Declaration: function WaitFor : Integer Visibility: public Description: Waits for the thread to terminate and returns the exit status.
2.70.13
TThread.FreeOnTerminate
Synopsis: Indicates whether the thread should free itself when it stops executing. Declaration: Property FreeOnTerminate : Boolean Visibility: public Access: Read,Write Description: Indicates whether the thread should free itself when it stops executing.
2.70.14
TThread.Handle
Synopsis: Returns the thread handle. Declaration: Property Handle : TThreadID Visibility: public Access: Read Description: Returns the thread handle.
2.70.15
TThread.Priority
Synopsis: Returns the thread priority. Declaration: Property Priority : TThreadPriority Visibility: public Access: Read,Write Description: Returns the thread priority.
2.70.16
TThread.Suspended
Synopsis: Indicates whether the thread is suspended. Declaration: Property Suspended : Boolean Visibility: public Access: Read,Write Description: Indicates whether the thread is suspended.
403
2.70.17
TThread.ThreadID
Synopsis: Returns the thread ID. Declaration: Property ThreadID : TThreadID Visibility: public Access: Read Description: Returns the thread ID.
2.70.18
TThread.OnTerminate
Synopsis: Event called when the thread terminates. Declaration: Property OnTerminate : TNotifyEvent Visibility: public Access: Read,Write Description: Event called when the thread terminates.
2.70.19
TThread.FatalException
Synopsis: Exception that occured during thread execution Declaration: Property FatalException : TObject Visibility: public Access: Read Description: FatalException contains the exception that occurred during the threads execution.
2.71
2.71.1
TThreadList
Description
TThreadList is a thread-safe Tlist (325) implementation. Unlike TList, it can be accessed readwrite by multiple threads: the list implementation will take care of locking the list when adding or removing items from the list. See also: TList (325)
2.71.2
Page 405 405 405 405 406 406 406
Method overview
Property Add Clear Create Destroy LockList Remove UnlockList Description Adds an element to the list. Removes all emements from the list. Creates a new thread-safe list. Destroys the list instance. Locks the list for exclusive access. Removes an item from the list. Unlocks the list after it was locked. 404
2.71.3
Page 406
Property overview
Property Duplicates Access rw Description Describes what to do with duplicates
2.71.4
TThreadList.Create
Synopsis: Creates a new thread-safe list. Declaration: constructor Create Visibility: public Description: Create instantiates a new TThreadList instance. It initializes a critical section and an internal list object. See also: TThreadList.Destroy (1)
2.71.5
TThreadList.Destroy
Override
Synopsis: Destroys the list instance. Declaration: destructor Destroy; Visibility: public Description: Destroy nalizes the critical section, clears the internal list object and calls the inherited destructor. See also: TThreadList.Create (1)
2.71.6
TThreadList.Add
Synopsis: Adds an element to the list. Declaration: procedure Add(Item: Pointer) Visibility: public Description: Add attempts to lock the list and adds the pointer Item to the list. After the pointer was added, the list is unlocked again. See also: LockList (1), Clear (1), Remove (1), UnlockList (1)
2.71.7
TThreadList.Clear
Synopsis: Removes all emements from the list. Declaration: procedure Clear Visibility: public Description: Clear attempts to lock the list and then clears the list; all items are removed from the list. After the list is cleared, it is again unlocked. See also: LockList (1), Add (1), Remove (1), UnlockList (1)
405
2.71.8
TThreadList.LockList
Synopsis: Locks the list for exclusive access. Declaration: function LockList : TList Visibility: public Description: LockList locks the list for exclusive access. Locklist uses an internal critical section, so all rules for multiple locking of critical sections apply to locklist/unlocklist as well. See also: Clear (1), Add (1), Remove (1), UnlockList (1)
2.71.9
TThreadList.Remove
Synopsis: Removes an item from the list. Declaration: procedure Remove(Item: Pointer) Visibility: public Description: Remove attempts to lock the list and then removes Item from the list. After the item is removed, the list is again unlocked. See also: LockList (1), Add (1), Clear (1), UnlockList (1)
2.71.10
TThreadList.UnlockList
Synopsis: Unlocks the list after it was locked. Declaration: procedure UnlockList Visibility: public Description: UnLockList unlocks the list when it was locked for exclusive access. UnLocklist and LockList use an internal critical section, so all rules for multiple locking/unlocking of critical sections apply. See also: Clear (1), Add (1), Remove (1), lockList (1)
2.71.11
TThreadList.Duplicates
Synopsis: Describes what to do with duplicates Declaration: Property Duplicates : TDuplicates Visibility: public Access: Read,Write Description: Duplicates describes what the threadlist should do when a duplicate pointer is added to the list. It is identical in behaviour to the Duplicates (1) property of TStringList (376). See also: TDuplicates (203)
406
2.72
2.72.1
TWriter
Description
The TWriter class is a writer class that implements generic component streaming capabilities, independent of the format of the data in the stream. It uses a driver class TAbstractObjectWriter (248) to do the actual reading of data. The interface of the TWriter class should be identical to the interface in Delphi. Note that the TWriter design is such that it will write a single component to a stream. It will write all children of this component, but it is not designed to write multiple components in succession to one stream. It should never be necessary to create an instance of this class directly. Instead, the TStream.WriteComponent (1) call should be used. See also: TFiler (304), TWriter (407), TAbstractObjectReader (241)
2.72.2
Page 408 408 408 408 409 409 409 409 409 411 410 410 410 411 411 411 412 412 411 410 412 412 413 410 412
Method overview
Property Create DeneBinaryProperty DeneProperty Destroy Write WriteBoolean WriteChar WriteCollection WriteComponent WriteCurrency WriteDate WriteDescendent WriteFloat WriteIdent WriteInteger WriteListBegin WriteListEnd WriteRootComponent WriteSet WriteSingle WriteString WriteUnicodeString WriteVariant WriteWideChar WriteWideString Description Creates a new Writer with a stream and bufsize. Callback used when dening and streaming custom properties. Callback used when dening and streaming custom properties. Destroys the writer instance. Write raw data to stream Write boolean value to the stream. Write a character to the stream. Write a collection to the stream. Stream a component to the stream. Write a currency value to the stream Write a date to the stream. Write a descendent component to the stream. Write a oat to the stream. Write an identier to the stream. Write an integer to the stream. Write a start-of-list marker to the stream. Write an end-of-list marker to the stream. Write a root component to the stream. Write a set value to the stream Write a single-type real to the stream. Write a string to the stream. Write a unicode string to the stream. Write a variant to the stream Write widechar to stream Write a widestring value to the stream
407
2.72.3
Page 414 413 413 414 414 413
Property overview
Property Driver OnFindAncestor OnWriteMethodProperty OnWriteStringProperty PropertyPath RootAncestor Access r rw rw rw r rw Description Driver used when writing to the stream. Event occurring when an ancestor component must be found. Handler from writing method properties. Event handler for translating strings written to stream. Path to the property that is currently being written Ancestor of root component.
2.72.4
TWriter.Create
Synopsis: Creates a new Writer with a stream and bufsize. Declaration: constructor Create(ADriver: TAbstractObjectWriter) constructor Create(Stream: TStream;BufSize: Integer) Visibility: default Description: Creates a new Writer with a stream and bufsize.
2.72.5
TWriter.Destroy
Override
Synopsis: Destroys the writer instance. Declaration: destructor Destroy; Visibility: public Description: Destroys the writer instance.
2.72.6
TWriter.DeneProperty
Synopsis: Callback used when dening and streaming custom properties. Declaration: procedure DefineProperty(const Name: string;ReadData: TReaderProc; AWriteData: TWriterProc;HasData: Boolean) ; Override Visibility: public Description: Callback used when dening and streaming custom properties.
2.72.7
TWriter.DeneBinaryProperty
Synopsis: Callback used when dening and streaming custom properties. Declaration: procedure DefineBinaryProperty(const Name: string;ReadData: TStreamProc; AWriteData: TStreamProc;HasData: Boolean) ; Override Visibility: public Description: Callback used when dening and streaming custom properties.
408
2.72.8
TWriter.Write
Virtual
Synopsis: Write raw data to stream Declaration: procedure Write(const Buffer;Count: LongInt); Visibility: public Description: Write is introduced for Delphi compatibility to write raw data to the component stream. This should not be used in new production code as it will totally mess up the streaming. See also: TBinaryObjectWriter.Write (1), TAbstractObjectWriter.Write (1)
2.72.9
TWriter.WriteBoolean
Synopsis: Write boolean value to the stream. Declaration: procedure WriteBoolean(Value: Boolean) Visibility: public Description: Write boolean value to the stream.
2.72.10
TWriter.WriteCollection
Synopsis: Write a collection to the stream. Declaration: procedure WriteCollection(Value: TCollection) Visibility: public Description: Write a collection to the stream.
2.72.11
TWriter.WriteComponent
Synopsis: Stream a component to the stream. Declaration: procedure WriteComponent(Component: TComponent) Visibility: public Description: Stream a component to the stream.
2.72.12
TWriter.WriteChar
Synopsis: Write a character to the stream. Declaration: procedure WriteChar(Value: Char) Visibility: public Description: Write a character to the stream.
409
2.72.13
TWriter.WriteWideChar
Synopsis: Write widechar to stream Declaration: procedure WriteWideChar(Value: WideChar) Visibility: public Description: WriteWideChar writes a widechar to the stream. This actually writes a widestring of length 1. See also: TReader.ReadWideChar (1), TWriter.WriteWideString (1)
2.72.14
TWriter.WriteDescendent
Synopsis: Write a descendent component to the stream. Declaration: procedure WriteDescendent(ARoot: TComponent;AAncestor: TComponent) Visibility: public Description: Write a descendent component to the stream.
2.72.15
TWriter.WriteFloat
Synopsis: Write a oat to the stream. Declaration: procedure WriteFloat(const Value: Extended) Visibility: public Description: Write a oat to the stream.
2.72.16
TWriter.WriteSingle
Synopsis: Write a single-type real to the stream. Declaration: procedure WriteSingle(const Value: Single) Visibility: public Description: Write a single-type real to the stream.
2.72.17
TWriter.WriteDate
Synopsis: Write a date to the stream. Declaration: procedure WriteDate(const Value: TDateTime) Visibility: public Description: Write a date to the stream.
410
2.72.18
TWriter.WriteCurrency
Synopsis: Write a currency value to the stream Declaration: procedure WriteCurrency(const Value: Currency) Visibility: public Description: WriteCurrency writes a currency typed value to the stream. This method does nothing except call the driver method of the driver being used. See also: TReader.ReadCurrency (1)
2.72.19
TWriter.WriteIdent
Synopsis: Write an identier to the stream. Declaration: procedure WriteIdent(const Ident: string) Visibility: public Description: Write an identier to the stream.
2.72.20
TWriter.WriteInteger
Synopsis: Write an integer to the stream. Declaration: procedure WriteInteger(Value: LongInt); Overload procedure WriteInteger(Value: Int64); Overload Visibility: default Description: Write an integer to the stream.
2.72.21
TWriter.WriteSet
Synopsis: Write a set value to the stream Declaration: procedure WriteSet(Value: LongInt;SetType: Pointer) Visibility: public Description: WriteSet writes a set Value consisting of elements with type EnumType. The set must be encoded as an integer where each element is encoded in a bit of the integer. Thus, at most an enumerated type with 32 elements can be written with this method. Errors: No checking is performed on the validity of EnumType. It is assumed to be a valid PTypeInfo pointer. See also: TReader.ReadSet (1)
2.72.22
TWriter.WriteListBegin
Synopsis: Write a start-of-list marker to the stream. Declaration: procedure WriteListBegin Visibility: public Description: Write a start-of-list marker to the stream. 411
2.72.23
TWriter.WriteListEnd
Synopsis: Write an end-of-list marker to the stream. Declaration: procedure WriteListEnd Visibility: public Description: Write an end-of-list marker to the stream.
2.72.24
TWriter.WriteRootComponent
Synopsis: Write a root component to the stream. Declaration: procedure WriteRootComponent(ARoot: TComponent) Visibility: public Description: Write a root component to the stream.
2.72.25
TWriter.WriteString
Synopsis: Write a string to the stream. Declaration: procedure WriteString(const Value: string) Visibility: public Description: Write a string to the stream.
2.72.26
TWriter.WriteWideString
Synopsis: Write a widestring value to the stream Declaration: procedure WriteWideString(const Value: WideString) Visibility: public Description: WriteWidestring writes a currency typed value to the stream. This method does nothing except call the driver method of the driver being used. See also: TReader.ReadWideString (1)
2.72.27
TWriter.WriteUnicodeString
Synopsis: Write a unicode string to the stream. Declaration: procedure WriteUnicodeString(const Value: UnicodeString) Visibility: public Description: WriteUnicodeString writes Value, a UnicodeString string to the stream. It simply passes the string on to the WriteUnicodeString method of the writer driver class. See also: TBinaryObjectWriter.WriteUnicodeString (1), TReader.ReadUnicodeString (1)
412
2.72.28
TWriter.WriteVariant
Synopsis: Write a variant to the stream Declaration: procedure WriteVariant(const VarValue: Variant) Visibility: public Description: WriteVariant writes Value, a simple variant, o the stream. It simply passes the string on to the WriteVariant method of the writer driver class. See also: TBinaryObjectWriter.WriteVariant (1), TReader.ReadVariant (1)
2.72.29
TWriter.RootAncestor
Synopsis: Ancestor of root component. Declaration: Property RootAncestor : TComponent Visibility: public Access: Read,Write Description: Ancestor of root component.
2.72.30
TWriter.OnFindAncestor
Synopsis: Event occurring when an ancestor component must be found. Declaration: Property OnFindAncestor : TFindAncestorEvent Visibility: public Access: Read,Write Description: Event occurring when an ancestor component must be found.
2.72.31
TWriter.OnWriteMethodProperty
Synopsis: Handler from writing method properties. Declaration: Property OnWriteMethodProperty : TWriteMethodPropertyEvent Visibility: public Access: Read,Write Description: OnWriteMethodProperty can be set by an IDE or some streaming mechanism which handles dummy values for method properties; It can be used to write a real value to the stream which will be interpreted correctly when the stream is read. See TWriteMethodPropertyEvent (211) for a description of the arguments. See also: TWriteMethodPropertyEvent (211), TReader.OnSetMethodProperty (1)
413
2.72.32
TWriter.OnWriteStringProperty
Synopsis: Event handler for translating strings written to stream. Declaration: Property OnWriteStringProperty : TReadWriteStringPropertyEvent Visibility: public Access: Read,Write Description: OnWriteStringProperty is called whenever a string property is written to the stream. It can be used e.g. by a translation mechanism to translate the strings on the y, when a form is written. See TReadWriteStringPropertyEvent (207) for a description of the various parameters. See also: TReader.OnPropertyNotFound (1), TReader.OnSetMethodProperty (1), TReadWriteStringPropertyEvent (207)
2.72.33
TWriter.Driver
Synopsis: Driver used when writing to the stream. Declaration: Property Driver : TAbstractObjectWriter Visibility: public Access: Read Description: Driver used when writing to the stream.
2.72.34
TWriter.PropertyPath
Synopsis: Path to the property that is currently being written Declaration: Property PropertyPath : string Visibility: public Access: Read Description: PropertyPath is set to the property name of the class currently being written to stream. This is only done when TPersistent (344) descendent class properties are written.
414
Chapter 3
The clocale offers no API by itself: it just initializes the internationalization settings of the sysutils (1443) unit with the values provided by the C library found on most Unix or Linux systems that are POSIX compliant. The clocale should simply be included in the uses clause of the program, preferably as one of the rst units, and the initialization section of the unit will do all the work. Note that including this unit, links your program to the C library of the system. It makes no sense to use this unit on a non-posix system: Windows, OS/2 or DOS - therefore it should always be between an ifdef statement: program myprogram; uses {$ifdef unix}clocale{$endif}, classes, sysutils;
415
Chapter 4
The cmem memory manager sets the system units memory manager to a C-based memory manager: all memory management calls are shunted through to the C memory manager, using Malloc (417), Free (416) and ReAlloc (417). For this reason, the cmem unit should be the rst unit of the uses clause of the program. The unit also offers the C memory calls directly as external declarations from the C library, but it is recommended to use the normal FPC routines for this. Obviously, including this unit links your program to the C library.
4.2
4.2.1
LibName = c LibName is the name of the library that is actually used. On most systems, this is simply "libc.so".
4.3
4.3.1
Synopsis: Allocate memory based on item size and count Declaration: function CAlloc(unitSize: ptruint;UnitCount: ptruint) : pointer Visibility: default Description: Calloc allocates memory to hold UnitCount units of size UnitSize each. The memory is one block of memory. It returns a pointer to the newly allocated memory block. See also: Malloc (417), Free (416), Realloc (417)
4.3.2
Free
Declaration: procedure Free(P: pointer) Visibility: default Description: Free returns the memory block pointed to by P to the system. After Free was called, the pointer P is no longer valid. See also: Malloc (417), ReAlloc (417)
4.3.3
Malloc
Synopsis: Malloc external declaration. Declaration: function Malloc(Size: ptruint) : Pointer Visibility: default Description: Malloc is the external declaration of the C librarys malloc call. It accepts a size parameter, and returns a pointer to a memory block of the requested size or Nil if no more memory could be allocated. See also: Free (416), ReAlloc (417)
4.3.4
ReAlloc
Synopsis: Reallocates a memory block Declaration: function ReAlloc(P: Pointer;Size: ptruint) : pointer Visibility: default Description: ReAlloc re-allocates a block of memory pointed to by p. The new block will have size Size, and as much data as was available or as much data as ts is copied from the old to the new location. See also: Malloc (417), Free (416)
417
Chapter 5
This chapter describes the CRT unit for Free Pascal, both under dos linux and Windows. The unit was rst written for dos by Florian klaemp. The unit was ported to linux by Mark May and enhanced by Michael Van Canneyt and Peter Vreman. It works on the linux console, and in xterm and rxvt windows under X-Windows. The functionality for both is the same, except that under linux the use of an early implementation (versions 0.9.1 and earlier of the compiler) the crt unit automatically cleared the screen at program startup. There are some caveats when using the CRT unit: Programs using the CRT unit will not be usable when input/output is being redirected on the command-line. For similar reasons they are not usable as CGI-scripts for use with a webserver. The use of the CRT unit and the graph unit may not always be supported. The CRT unit is not thread safe. On linux or other unix OSes , executing other programs that expect special terminal behaviour (using one of the special functions in the linux unit) will not work. The terminal is set in RAW mode, which will destroy most terminal emulation settings.
5.2
5.2.1
418
Blue color attribute Brown = 6 Brown color attribute BW40 = 0 40 columns black and white screen mode. BW80 = 2 80 columns black and white screen mode. C40 = CO40 40 columns color screen mode. C80 = CO80 80 columns color screen mode. CO40 = 1 40 columns color screen mode. CO80 = 3 80 columns color screen mode. ConsoleMaxX = 1024
ConsoleMaxY = 1024
Cyan = 3 Cyan color attribute DarkGray = 8 Dark gray color attribute Flushing = False
Green color attribute LightBlue = 9 Light Blue color attribute LightCyan = 11 Light cyan color attribute LightGray = 7 Light gray color attribute LightGreen = 10 Light green color attribute LightMagenta = 13 Light magenta color attribute LightRed = 12 Light red color attribute Magenta = 5 Magenta color attribute Mono = 7 Monochrome screen mode (hercules screens) Red = 4 Red color attribute ScreenHeight : LongInt = 25 Current screen height. ScreenWidth : LongInt = 80 Current screen width White = 15 White color attribute Yellow = 14 Yellow color attribute 420
5.2.2
Types
= 1..255 This chapter describes the CRT unit for Free Pascal, both under dos linux and Windows. The unit was rst written for dos by Florian klaemp. The unit was ported to linux by Mark May and enhanced by Michael Van Canneyt and Peter Vreman. It works on the linux console, and in xterm and rxvt windows under X-Windows. The functionality for both is the same, except that under linux the use of an early implementation (versions 0.9.1 and earlier of the compiler) the crt unit automatically cleared the screen at program startup. There are some caveats when using the CRT unit: Programs using the CRT unit will not be usable when input/output is being redirected on the command-line. For similar reasons they are not usable as CGI-scripts for use with a webserver. The use of the CRT unit and the graph unit may not always be supported. The CRT unit is not thread safe. On linux or other unix OSes , executing other programs that expect special terminal behaviour (using one of the special functions in the linux unit) will not work. The terminal is set in RAW mode, which will destroy most terminal emulation settings. PConsoleBuf = ^TConsoleBuf
5.2.3
Variables
CheckBreak : Boolean Check for CTRL-Break keystroke. Not used. CheckEOF : Boolean Check for EOF on standard input. Not used. CheckSnow : Boolean Check snow on CGA screens. Not used. ConsoleBuf : PConsoleBuf
421
DirectVideo : Boolean The DirectVideo variable controls the writing to the screen. If it is True, the the cursor is set via direct port access. If False, then the BIOS is used. This is dened under dos only. LastMode : Word = 3 The Lastmode variable tells you which mode was last selected for the screen. It is dened on DOS only. TextAttr : Byte = $07 The TextAttr variable controls the attributes with which characters are written to screen. WindMax : Word = $184f The upper byte of WindMax contains the Y coordinate while the lower byte contains the X coordinate. The use of this variable is deprecated, use WindMaxX and WindMaxY instead. WindMaxX : DWord X coordinate of lower right corner of the dened window WindMaxY : DWord Y coordinate of lower right corner of the dened window WindMin : Word = $0 The upper byte of WindMin contains the Y coordinate while the lower byte contains the X coordinate. The use of this variable is deprecated, use WindMinX and WindMinY instead. WindMinX : DWord X coordinate of upper left corner of the dened window WindMinY : DWord Y coordinate of upper left corner of the dened window
5.3
5.3.1
Synopsis: Assign le to CRT. Declaration: procedure AssignCrt(var F: Text) Visibility: default Description: AssignCrt Assigns a le F to the console. Everything written to the le F goes to the console instead. If the console contains a window, everything is written to the window instead. 422
5.3.2
ClrEol
Synopsis: Clear from cursor position till end of line. Declaration: procedure ClrEol Visibility: default Description: ClrEol clears the current line, starting from the cursor position, to the end of the window. The cursor doesnt move Errors: None. See also: DelLine (425), InsLine (427), ClrScr (424) Listing: ./crtex/ex9.pp
Program Example9 ; uses C r t ; { Program t o demonstrate t h e C l r E o l f u n c t i o n . } var I , J : integer ; begin For I : = 1 to 1 5 do For J : = 1 to 8 0 do begin gotoxy ( j , i ) ; Write ( j mod 1 0 ) ; end ; Window ( 5 , 5 , 7 5 , 1 2 ) ; Write ( T h i s l i n e w i l l be c l e a r e d from , here t i l l t h e r i g h t o f t h e window ) ; GotoXY ( 2 7 ,WhereY ) ; ReadKey ; ClrEol ; WriteLn ; end .
423
5.3.3
ClrScr
Synopsis: Clear current window. Declaration: procedure ClrScr Visibility: default Description: ClrScr clears the current window (using the current colors), and sets the cursor in the top left corner of the current window. Errors: None. See also: Window (433) Listing: ./crtex/ex8.pp
Program Example8 ; uses C r t ; { Program t o demonstrate t h e C l r S c r f u n c t i o n . } begin W r i t e l n ( Press any key t o c l e a r t h e screen ) ; ReadKey ; ClrScr ; W r i t e l n ( Have f u n w i t h t h e c l e a r e d screen ) ; end .
5.3.4
cursorbig
Synopsis: Show big cursor Declaration: procedure cursorbig Visibility: default Description: CursorBig makes the cursor a big rectangle. Not implemented on unixes. Errors: None. See also: CursorOn (425), CursorOff (424)
5.3.5
cursoroff
Synopsis: Hide cursor Declaration: procedure cursoroff Visibility: default Description: CursorOff switches the cursor off (i.e. the cursor is no longer visible). Not implemented on unixes. Errors: None. See also: CursorOn (425), CursorBig (424)
424
5.3.6
cursoron
Synopsis: Display cursor Declaration: procedure cursoron Visibility: default Description: CursorOn switches the cursor on. Not implemented on unixes. Errors: None. See also: CursorBig (424), CursorOff (424)
5.3.7
Delay
Synopsis: Delay program execution. Declaration: procedure Delay(MS: Word) Visibility: default Description: Delay waits a specied number of milliseconds. The number of specied seconds is an approximation, and may be off a lot, if system load is high. Errors: None See also: Sound (430), NoSound (429) Listing: ./crtex/ex15.pp
Program Example15 ; uses C r t ; { Program t o demonstrate t h e Delay f u n c t i o n . } var i : longint ; begin WriteLn ( Counting Down ) ; f o r i : = 1 0 downto 1 do begin WriteLn ( i ) ; Delay ( 1 0 0 0 ) ; { Wait one second } end ; WriteLn ( BOOM ! ! ! ) ; end .
5.3.8
DelLine
Synopsis: Delete line at cursor position. Declaration: procedure DelLine Visibility: default Description: DelLine removes the current line. Lines following the current line are scrolled 1 line up, and an empty line is inserted at the bottom of the current window. The cursor doesnt move. Errors: None. 425
See also: ClrEol (423), InsLine (427), ClrScr (424) Listing: ./crtex/ex11.pp
Program Example10 ; uses C r t ; { Program t o demonstrate t h e I n s L i n e f u n c t i o n . } begin ClrScr ; WriteLn ; WriteLn ( WriteLn ( WriteLn ( WriteLn ( WriteLn ; WriteLn (
1 2 2 3
); ); ); );
Oops , L i n e 2 i s l i s t e d t w i c e , , l e t s delete the l i n e at the cursor postion ) ; GotoXY ( 1 , 3 ) ; ReadKey ; DelLine ; GotoXY ( 1 , 1 0 ) ; end .
5.3.9
GotoXY
Synopsis: Set cursor position on screen. Declaration: procedure GotoXY(X: tcrtcoord;Y: tcrtcoord) Visibility: default Description: GotoXY positions the cursor at (X,Y), X in horizontal, Y in vertical direction relative to the origin of the current window. The origin is located at (1,1), the upper-left corner of the window. Errors: None. See also: WhereX (432), WhereY (432), Window (433) Listing: ./crtex/ex6.pp
Program Example6 ; uses C r t ; { Program t o demonstrate t h e GotoXY f u n c t i o n . } begin ClrScr ; GotoXY ( 1 0 , 1 0 ) ; Write ( 10 ,10 ) ; GotoXY ( 7 0 , 2 0 ) ; Write ( 70 ,20 ) ; GotoXY ( 1 , 2 2 ) ; end .
426
5.3.10
HighVideo
Synopsis: Switch to highlighted text mode Declaration: procedure HighVideo Visibility: default Description: HighVideo switches the output to highlighted text. (It sets the high intensity bit of the video attribute) Errors: None. See also: TextColor (431), TextBackground (430), LowVideo (428), NormVideo (429) Listing: ./crtex/ex14.pp
Program Example14 ; uses C r t ; { Program t o demonstrate t h e LowVideo , HighVideo , NormVideo f u n c t i o n s . } begin LowVideo ; WriteLn ( T h i s i s w r i t t e n w i t h LowVideo ) ; HighVideo ; WriteLn ( T h i s i s w r i t t e n w i t h HighVideo ) ; NormVideo ; WriteLn ( T h i s i s w r i t t e n w i t h NormVideo ) ; end .
5.3.11
InsLine
Synopsis: Insert an empty line at cursor position Declaration: procedure InsLine Visibility: default Description: InsLine inserts an empty line at the current cursor position. Lines following the current line are scrolled 1 line down, causing the last line to disappear from the window. The cursor doesnt move. Errors: None. See also: ClrEol (423), DelLine (425), ClrScr (424) Listing: ./crtex/ex10.pp
Program Example10 ; uses C r t ; { Program t o demonstrate t h e I n s L i n e f u n c t i o n . } begin ClrScr ; WriteLn ; WriteLn ( L i n e 1 ) ; WriteLn ( L i n e 3 ) ; WriteLn ;
427
5.3.12
KeyPressed
Synopsis: Check if there is a keypress in the keybuffer Declaration: function KeyPressed : Boolean Visibility: default Description: Keypressed scans the keyboard buffer and sees if a key has been pressed. If this is the case, True is returned. If not, False is returned. The Shift, Alt, Ctrl keys are not reported. The key is not removed from the buffer, and can hence still be read after the KeyPressed function has been called. Errors: None. See also: ReadKey (429) Listing: ./crtex/ex2.pp
Program Example2 ; uses C r t ; { Program t o demonstrate t h e KeyPressed f u n c t i o n . } begin WriteLn ( W a i t i n g u n t i l a key i s pressed ) ; repeat u n t i l KeyPressed ; { The key i s n o t Read , so i t should a l s o be o u t p u t t e d a t t h e commandline } end .
5.3.13
LowVideo
Synopsis: Switch to low intensity colors. Declaration: procedure LowVideo Visibility: default Description: LowVideo switches the output to non-highlighted text. (It clears the high intensity bit of the video attribute) For an example, see HighVideo (427) Errors: None. See also: TextColor (431), TextBackground (430), HighVideo (427), NormVideo (429)
428
5.3.14
NormVideo
Synopsis: Return to normal (startup) modus Declaration: procedure NormVideo Visibility: default Description: NormVideo switches the output to the defaults, read at startup. (The defaults are read from the cursor position at startup) For an example, see HighVideo (427) Errors: None. See also: TextColor (431), TextBackground (430), LowVideo (428), HighVideo (427)
5.3.15
NoSound
Synopsis: Stop system speaker Declaration: procedure NoSound Visibility: default Description: NoSound stops the speaker sound. This call is not supported on all operating systems. Errors: None. See also: Sound (430) Listing: ./crtex/ex16.pp
Program Example16 ; uses C r t ; { Program t o demonstrate t h e Sound and NoSound f u n c t i o n . } var i : longint ; begin WriteLn ( You w i l l hear some tones from your speaker ) ; while ( i <15000) do begin inc ( i , 5 0 0 ) ; Sound ( i ) ; Delay ( 1 0 0 ) ; end ; WriteLn ( Q u i e t now ! ) ; NoSound ; { Stop n o i s e } end .
5.3.16
ReadKey
Synopsis: Read key from keybuffer Declaration: function ReadKey : Char Visibility: default 429
Description: ReadKey reads 1 key from the keyboard buffer, and returns this. If an extended or function key has been pressed, then the zero ASCII code is returned. You can then read the scan code of the key with a second ReadKey call. Key mappings under Linux can cause the wrong key to be reported by ReadKey, so caution is needed when using ReadKey. Errors: None. See also: KeyPressed (428) Listing: ./crtex/ex3.pp
Program Example3 ; uses C r t ; { Program t o demonstrate t h e ReadKey f u n c t i o n . } var ch : char ; begin w r i t e l n ( Press L e f t / Right , Esc= Q u i t ) ; repeat ch : = ReadKey ; case ch of # 0 : begin ch : = ReadKey ; { Read ScanCode } case ch of # 7 5 : WriteLn ( L e f t ) ; # 7 7 : WriteLn ( R i g h t ) ; end ; end ; # 2 7 : WriteLn ( ESC ) ; end ; u n t i l ch =#27 { Esc } end .
5.3.17
Sound
Synopsis: Sound system speaker Declaration: procedure Sound(Hz: Word) Visibility: default Description: Sound sounds the speaker at a frequency of hz. Under Windows, a system sound is played and the frequency parameter is ignored. On other operating systems, this routine may not be implemented. Errors: None. See also: NoSound (429)
5.3.18
TextBackground
430
Visibility: default Description: TextBackground sets the background color to CL. CL can be one of the predened color constants. Errors: None. See also: TextColor (431), HighVideo (427), LowVideo (428), NormVideo (429) Listing: ./crtex/ex13.pp
Program Example13 ; uses C r t ; { Program t o demonstrate t h e TextBackground f u n c t i o n . } begin T e x t C o l o r ( White ) ; WriteLn ( T h i s i s w r i t t e n i n w i t h t h e d e f a u l t background c o l o r ) ; TextBackground ( Green ) ; WriteLn ( T h i s i s w r i t t e n i n w i t h a Green background ) ; TextBackground ( Brown ) ; WriteLn ( T h i s i s w r i t t e n i n w i t h a Brown background ) ; TextBackground ( Black ) ; WriteLn ( Back w i t h a b l a c k background ) ; end .
5.3.19
TextColor
Synopsis: Set text color Declaration: procedure TextColor(Color: Byte) Visibility: default Description: TextColor sets the foreground color to CL. CL can be one of the predened color constants. Errors: None. See also: TextBackground (430), HighVideo (427), LowVideo (428), NormVideo (429) Listing: ./crtex/ex12.pp
Program Example12 ; uses C r t ; { Program t o demonstrate t h e T e x t C o l o r f u n c t i o n . } begin WriteLn ( T h i s i s w r i t t e n T e x t C o l o r ( Red ) ; WriteLn ( T h i s i s w r i t t e n T e x t C o l o r ( White ) ; WriteLn ( T h i s i s w r i t t e n TextColor ( LightBlue ) ; WriteLn ( T h i s i s w r i t t e n end .
431
5.3.20
TextMode
Synopsis: Set screen mode. Declaration: procedure TextMode(Mode: Word) Visibility: default Description: TextMode sets the textmode of the screen (i.e. the number of lines and columns of the screen). The lower byte is use to set the VGA text mode. This procedure is only implemented on dos. Errors: None. See also: Window (433)
5.3.21
WhereX
Synopsis: Return X (horizontal) cursor position Declaration: function WhereX : tcrtcoord Visibility: default Description: WhereX returns the current X-coordinate of the cursor, relative to the current window. The origin is (1,1), in the upper-left corner of the window. Errors: None. See also: GotoXY (426), WhereY (432), Window (433) Listing: ./crtex/ex7.pp
Program Example7 ; uses C r t ; { Program t o demonstrate t h e WhereX and WhereY f u n c t i o n s . } begin W r i t e l n ( Cursor p o s t i o n : X= ,WhereX , Y= ,WhereY ) ; end .
5.3.22
WhereY
Synopsis: Return Y (vertical) cursor position Declaration: function WhereY : tcrtcoord Visibility: default Description: WhereY returns the current Y-coordinate of the cursor, relative to the current window. The origin is (1,1), in the upper-left corner of the window. Errors: None. See also: GotoXY (426), WhereX (432), Window (433) Listing: ./crtex/ex7.pp 432
Program Example7 ; uses C r t ; { Program t o demonstrate t h e WhereX and WhereY f u n c t i o n s . } begin W r i t e l n ( Cursor p o s t i o n : X= ,WhereX , Y= ,WhereY ) ; end .
5.3.23
Window
Synopsis: Create new window on screen. Declaration: procedure Window(X1: Byte;Y1: Byte;X2: Byte;Y2: Byte) Visibility: default Description: Window creates a window on the screen, to which output will be sent. (X1,Y1) are the coordinates of the upper left corner of the window, (X2,Y2) are the coordinates of the bottom right corner of the window. These coordinates are relative to the entire screen, with the top left corner equal to (1,1). Further coordinate operations, except for the next Window call, are relative to the windows top left corner. Errors: None. See also: GotoXY (426), WhereX (432), WhereY (432), ClrScr (424) Listing: ./crtex/ex5.pp
Program Example5 ; uses C r t ; { Program t o demonstrate t h e Window f u n c t i o n . } begin ClrScr ; WriteLn ( C r e a t i n g a window from 3 0 , 1 0 t o 5 0 , 2 0 ) ; Window ( 3 0 , 1 0 , 5 0 , 2 0 ) ; WriteLn ( We are now w r i t i n g i n t h i s s m a l l window we j u s t created , we + can t g e t o u t s i d e i t when w r i t i n g l o n g l i n e s l i k e t h i s one ) ; Write ( Press any key t o c l e a r t h e window ) ; ReadKey ; ClrScr ; Write ( The window i s c l e a r e d , press any key t o r e s t o r e t o f u l l s c r e e n ) ; ReadKey ; { F u l l Screen i s 8 0 x25 } Window ( 1 , 1 , 8 0 , 2 5 ) ; Clrscr ; W r i t e l n ( Back i n F u l l Screen ) ; end .
433
Chapter 6
The CThreads unit initializes the system units thread management routines with an implementation based on the POSIX thread managing routines in the C library. This assures that C libraries that are thread-aware still work if they are linked to by a FPC program. It doesnt offer any API by itself: the initialization section of the unit just initializes the ThreadManager record in the System (1225) unit. This is done using the SetCThreadManager (434) call The cthreads unit simply needs to be included in the uses clause of the program, preferably the very rst unit, and the initialization section of the unit will do all the work. Note that including this unit links your program to the C library of the system. It makes no sense to use this unit on a non-posix system: Windows, OS/2 or DOS, therefor it should always between an ifdef statement: program myprogram; uses {$ifdef unix}cthreads{$endif}, classes, sysutils; The Lazarus IDE inserts this conditional automatically for each new started program.
6.2
6.2.1
Synopsis: Sets the thread manager to the C thread manager Declaration: procedure SetCThreadManager Visibility: default Description: SetCThreadManager actually sets the thread manager to the C thread manager. It can be called to re-set the thread manager if the thread manager was set to some other thread manager during the life-time of the program.
434
Chapter 7
7.2
Overview
The ctypes unit contains the denitions of commonly found C types. It can be used when interfaces to C libraries need to be dened. The types here are correct on all platforms, 32 or 64 bit. The main advantage of using this le is to make sure that all C header import units use the same denitions for basic C types. The h2pas program can include the ctypes unit automatically in the units it generates. The -C command-line switch can be used for this.
7.3
7.3.1
cbool = UnixType.cbool C boolean (longbool) cchar = UnixType.cchar C character type (No signedness specication, 8 bit integer) cdouble = UnixType.cdouble Double precision oating point type (double) 435
cfloat = UnixType.cfloat Single precision oating point type (single) cint = UnixType.cint C integer (commonly 32 bit) cint16 = UnixType.cint16 16-bit signed integer. cint32 = UnixType.cint32 32-bit signed integer (commonly: int) cint64 = UnixType.cint64 64-bit integer cint8 = UnixType.cint8 8-bit signed integer clong = UnixType.clong long integer (32/64 bit, depending on CPU register size) clongdouble = packed Array[0..15] of Byte Long precision oating point type (extended/double, depending on CPU) clonglong = UnixType.clonglong Long (64-bit) integer coff_t = UnixType.TOff Generic type to indicate offset cschar = UnixType.cschar C signed character type (8 bit signed integer) cshort = UnixType.cshort Short integer (16 bit) csigned = UnixType.csigned Signed integer (commonly 32 bit) 436
csint = UnixType.csint Signed integer (commonly 32 bit) csize_t = UnixType.size_t Generic type to contain a size of all kinds of structures cslong = UnixType.cslong Signed long integer (32/64 bit, depending on CPU register size) cslonglong = UnixType.cslonglong Signed long (64-bit) integer csshort = UnixType.csshort Short signed integer (16 bit) cuchar = UnixType.cuchar C unsigned character type (8 bit unsigned integer). cuint = UnixType.cuint Unsigned integer (commonly 32 bit) cuint16 = UnixType.cuint16 16-bit unsigned integer. cuint32 = UnixType.cuint32 32-bit unsigned integer cuint64 = UnixType.cuint64 Unsigned 64-bit integer cuint8 = UnixType.cuint8 8-bit unsigned integer culong = UnixType.culong Unsigned long integer (32/64 bit, depending on CPU register size) culonglong = UnixType.culonglong Unsigned long (64-bit) integer 437
cunsigned = UnixType.cunsigned Unsigned integer (commonly 32 bit) cushort = UnixType.cushort Short unsigned integer (16 bit) pcbool = UnixType.pcbool Pointer to cbool (435) type. pcchar = UnixType.pcchar Pointer to cchar (435) type. pcdouble = UnixType.pcdouble Pointer to cdouble (435) type. pcfloat = UnixType.pcfloat Pointer to coat (436) type. pcint = UnixType.pcint Pointer to cint (436) type. pcint16 = UnixType.pcint16 Pointer to cint16 (436) type. pcint32 = UnixType.pcint32 Pointer to cint32 (436) type. pcint64 = UnixType.pcint64 Pointer to cint64 (436) type. pcint8 = UnixType.pcint8 Pointer to cint8 (436) type. pclong = UnixType.pclong Pointer to clong (436) type. Pclongdouble = ^clongdouble Pointer to clongdouble (436) type. 438
pclonglong = UnixType.pclonglong Pointer to clonglong (436) type. pcschar = UnixType.pcschar Pointer to cschar (436) type. pcshort = UnixType.pcshort Pointer to cshort (436) type. pcsigned = UnixType.pcsigned Pointer to csigned (436) type. pcsint = UnixType.pcsint Pointer to csint (437) type. pcsize_t = UnixType.psize_t Pointer to generic size type pcslong = UnixType.pcslong Pointer to cslong (437) type. pcslonglong = UnixType.pcslonglong Pointer to cslonglong (437) type. pcsshort = UnixType.pcsshort Pointer to csshort (437) type. pcuchar = UnixType.pcuchar Pointer to cuchar (437) type. pcuint = UnixType.pcuint Pointer to cuint (437) type. pcuint16 = UnixType.pcuint16 Pointer to cuint16 (437) type. pcuint32 = UnixType.pcuint32 Pointer to cuint32 (437) type. 439
pcuint64 = UnixType.pcuint64 Pointer to cuint64 (437) type. pcuint8 = UnixType.pcuint8 Pointer to cuint8 (437) type. pculong = UnixType.pculong Pointer to culong (437) type. pculonglong = UnixType.pculonglong Pointer to culonglong (437) type. pcunsigned = UnixType.pcunsigned Pointer to cunsigned (438) type. pcushort = UnixType.pcushort Pointer to cushort (438) type.
7.4
7.4.1
Synopsis: Implement multiplication of clongdouble and double. Declaration: operator operator *(clongdouble, Double): Double(const c: clongdouble; const e: Double) : Double Visibility: default Description: This operator allows to multiply a double typed value with a clongdouble typed value. the result is a double typed value.
7.4.2
Synopsis: Implement multiplication of double and clongdouble. Declaration: operator operator *(Double, clongdouble): Double(const e: Double; const c: clongdouble) : Double Visibility: default Description: This operator allows to multiply a clongdouble typed value with a double typed value. The result is a double typed value.
440
7.4.3
Synopsis:
Declaration: operator operator +(clongdouble, Double): Double(const c: clongdouble; const e: Double) : Double Visibility: default Description: This operator allows to add clongdouble and double typed values. The result is a double typed value.
7.4.4
Synopsis: Implement addition of clongdouble and double. Declaration: operator operator +(Double, clongdouble): Double(const e: Double; const c: clongdouble) : Double Visibility: default Description: This operator allows to add double and clongdouble typed values. The result is a double typed value.
7.4.5
Synopsis: Implement subtraction of double and clongdouble. Declaration: operator operator -(clongdouble, Double): Double(const c: clongdouble; const e: Double) : Double Visibility: default Description: This operator allows to subtract a double typed value from a clongdouble typed value. The result is a double typed value.
7.4.6
Synopsis: Implement subtraction of clongdouble and double. Declaration: operator operator -(Double, clongdouble): Double(const e: Double; const c: clongdouble) : Double Visibility: default Description: This operator allows to subtract a clongdouble typed value from a double typed value. The result is a double typed value.
441
7.4.7
Synopsis: Implement division of double and clongdouble. Declaration: operator operator /(clongdouble, Double): Double(const c: clongdouble; const e: Double) : Double Visibility: default Description: This operator allows to divide a clongdouble typed value by a double typed value. the result is a double typed value.
7.4.8
Synopsis: Implement division of clongdouble and double. Declaration: operator operator /(Double, clongdouble): Double(const e: Double; const c: clongdouble) : Double Visibility: default Description: This operator allows to divide a double typed value by a clongdouble typed value. the result is a double typed value.
7.4.9
Synopsis: Implement assignment of a clongdouble to a double type. Declaration: operator operator :=(clongdouble): Double(const v: clongdouble) : Double Visibility: default Description: This operator allows to assign a clongdouble to a Double type.
7.4.10
Synopsis: Implement assignment of a double to a clongdouble type. Declaration: operator operator :=(Double): clongdouble(const v: Double) : clongdouble Visibility: default Description: This operator allows to assign a double to a clongdouble type.
7.4.11
Synopsis: Implement less than comparison between double and clongdouble. Declaration: operator operator <(clongdouble, Double): Boolean(const c: clongdouble; const e: Double) : Boolean Visibility: default Description: This operator compares the values of a clongdouble typed value and a double typed value, and returns True if the clongdouble value is less than the double value. 442
7.4.12
Synopsis: Implement less than comparison between clongdouble and double. Declaration: operator operator <(Double, clongdouble): Boolean(const e: Double; const c: clongdouble) : Boolean Visibility: default Description: This operator compares the values of a double typed value and a clongdouble typed value, and returns True if the double value is less than the clongdouble value.
7.4.13
Synopsis: Implement greater than or equal comparison between double and clongdouble. Declaration: operator operator <=(clongdouble, Double): Boolean(const c: clongdouble; const e: Double) : Boolean Visibility: default Description: This operator compares the values of a clongdouble typed value and a double typed value, and returns True if the clongdouble value is less than or equal to the double value.
7.4.14
Synopsis: Implement less than or equal comparison between clongdouble and double. Declaration: operator operator <=(Double, clongdouble): Boolean(const e: Double; const c: clongdouble) : Boolean Visibility: default Description: This operator compares the values of a double typed value and a clongdouble typed value, and returns True if the double value is less than or equal to the clongdouble value.
7.4.15
Synopsis: Implement equality of clongdouble and double. Declaration: operator operator =(clongdouble, Double): Boolean(const c: clongdouble; const e: Double) : Boolean Visibility: default Description: This operator compares the values of a double typed value and a clongdouble typed value, and returns True if the values are equal (only double precision is used).
443
7.4.16
Synopsis: Implement equality of double and clongdouble. Declaration: operator operator =(Double, clongdouble): Boolean(const e: Double; const c: clongdouble) : Boolean Visibility: default Description: This operator compares the values of a clongdouble typed value and a double typed value, and returns True if the values are equal (only double precision is used).
7.4.17
Synopsis: Implement greater than comparison between double and clongdouble. Declaration: operator operator >(clongdouble, Double): Boolean(const c: clongdouble; const e: Double) : Boolean Visibility: default Description: This operator compares the values of a clongdouble typed value and a double typed value, and returns True if the clongdouble value is greater than the double value.
7.4.18
Synopsis: Implement greater than comparison between clongdouble and double. Declaration: operator operator >(Double, clongdouble): Boolean(const e: Double; const c: clongdouble) : Boolean Visibility: default Description: This operator compares the values of a double typed value and a clongdouble typed value, and returns True if the double value is greater than the clongdouble value.
7.4.19
Synopsis: Implement greater than or equal comparison between double and clongdouble. Declaration: operator operator >=(clongdouble, Double): Boolean(const c: clongdouble; const e: Double) : Boolean Visibility: default Description: This operator compares the values of a clongdouble typed value and a double typed value, and returns True if the clongdouble value is greater than or equal to the double value.
444
7.4.20
Synopsis: Implement greater than or equal comparison between clongdouble and double. Declaration: operator operator >=(Double, clongdouble): Boolean(const e: Double; const c: clongdouble) : Boolean Visibility: default Description: This operator compares the values of a double typed value and a clongdouble typed value, and returns True if the double value is greater than or equal to the clongdouble value.
445
Chapter 8
The cwstring unit offers no API by itself: it just initializes the widestring manager record of the system (1225) unit with an implementation that uses collation and conversion routines which are provided by the C library found on most Unix or Linux systems that are POSIX compliant. The cwstring should simply be included in the uses clause of the program, preferably as one of the rst units, and the initialization section of the unit will do all the work. Note that including this unit links your program to the C library of the system. It makes no sense to use this unit on a non-POSIX system like Windows, OS/2 or DOS. Therefor it should always be enclosed with an ifdef statement: program myprogram; uses {$ifdef unix}cwstring,{$endif} classes, sysutils;
8.2
8.2.1
Synopsis: Set the Widestring manager of the system unit to the C version Declaration: procedure SetCWidestringManager Visibility: default Description: SetCWidestringManager actually sets the widestring manager record of the system unit. It is called automatically by the initialization section of the unit.
446
Chapter 9
9.2
Overview
DateUtils contains a large number of date/time manipulation routines, all based on the TDateTime type. There are routines for date/time math, for comparing dates and times, for composing dates and decomposing dates in their constituent parts.
9.3
9.3.1
ApproxDaysPerMonth : Double = 30.4375 Average number of days in a month, measured over a year. Used in MonthsBetween (494). ApproxDaysPerYear : Double = 365.25 Average number of days in a year, measured over 4 years. Used in YearsBetween (535). DayFriday = 5 ISO day number for Friday DayMonday = 1 447
ISO day number for Monday DaySaturday = 6 ISO day number for Saturday DaysPerWeek = 7 Number of days in a week. DaysPerYear : Array[Boolean] of Word = (365, 366) Array with number of days in a year. The boolean index indicates whether it is a leap year or not. DaySunday = 7 ISO day number for Sunday DayThursday = 4 ISO day number for Thursday DayTuesday = 2 ISO day number for Tuesday DayWednesday = 3 ISO day number for Wednesday MonthsPerYear = 12 Number of months in a year OneHour = 1 / HoursPerDay One hour as a fraction of a day (suitable for TDateTime) OneMillisecond = 1 / MSecsPerDay One millisecond as a fraction of a day (suitable for TDateTime) OneMinute = 1 / MinsPerDay One minute as a fraction of a day (suitable for TDateTime) OneSecond = 1 / SecsPerDay One second as a fraction of a day (suitable for TDateTime) RecodeLeaveFieldAsIs = (Word) 448
Bitmask deciding what to do with each TDateTime eld in recode routines WeeksPerFortnight = 2 Number of weeks in fortnight YearsPerCentury = 100 Number of years in a century YearsPerDecade = 10 Number of years in a decade YearsPerMillennium = 1000 Number of years in a millenium
9.4
9.4.1
Synopsis: Compare 2 dates, disregarding the time of day Declaration: function CompareDate(const A: TDateTime;const B: TDateTime) : TValueRelationship Visibility: default Description: CompareDate compares the date parts of two timestamps A and B and returns the following results: < 0if the day part of A is earlier than the day part of B. 0if A and B are the on same day (times may differ) . > 0if the day part of A is later than the day part of B. See also: CompareTime (451), CompareDateTime (450), SameDate (503), SameTime (505), SameDateTime (504) Listing: ./datutex/ex99.pp
Program Example99 ; { T h i s program demonstrates t h e CompareDate f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Const Fmt = dddd dd mmmm yyyy ; Procedure Test ( D1 , D2 : TDateTime ) ; Var Cmp : I n t e g e r ;
449
begin Write ( FormatDateTime ( Fmt , D1 ) , i s Cmp: = CompareDate ( D1 , D2 ) ; I f Cmp<0 then w r i t e ( e a r l i e r than ) else i f Cmp>0 then Write ( l a t e r than ) else Write ( equal t o ) ; W r i t e l n ( FormatDateTime ( Fmt , D2 ) ) ; end ; Var D, N : TDateTime ; Begin D: = Today ; N: =Now; Test (D,D ) ; Test (N,N ) ; Test (D+1 ,D ) ; Test (D1,D ) ; Test (D+OneSecond ,D ) ; Test (DOneSecond ,D ) ; Test (N+OneSecond ,N ) ; Test (NOneSecond ,N ) ; End .
);
9.4.2
CompareDateTime
Synopsis: Compare 2 dates, taking into account the time of day Declaration: function CompareDateTime(const A: TDateTime;const B: TDateTime) : TValueRelationship Visibility: default Description: CompareDateTime compares two timestamps A and B and returns the following results: < 0if A is earlier in date/time than B. 0if A and B are the same date/time . > 0if A is later in date/time than B. See also: CompareTime (451), CompareDate (449), SameDate (503), SameTime (505), SameDateTime (504) Listing: ./datutex/ex98.pp
Program Example98 ; { T h i s program demonstrates t h e CompareDateTime f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Const Fmt = dddd dd mmmm yyyy hh : nn : ss . zzz ;
450
Procedure Test ( D1 , D2 : TDateTime ) ; Var Cmp : I n t e g e r ; begin Write ( FormatDateTime ( Fmt , D1 ) , i s Cmp: = CompareDateTime ( D1 , D2 ) ; I f Cmp<0 then w r i t e ( e a r l i e r than ) else i f Cmp>0 then Write ( l a t e r than ) else Write ( equal t o ) ; W r i t e l n ( FormatDateTime ( Fmt , D2 ) ) ; end ; Var D, N : TDateTime ; Begin D: = Today ; N: =Now; Test (D,D ) ; Test (N,N ) ; Test (D+1 ,D ) ; Test (D1,D ) ; Test (D+OneSecond ,D ) ; Test (DOneSecond ,D ) ; Test (N+OneSecond ,N ) ; Test (NOneSecond ,N ) ; End .
);
9.4.3
CompareTime
Synopsis: Compares two times of the day, disregarding the date part. Declaration: function CompareTime(const A: TDateTime;const B: TDateTime) : TValueRelationship Visibility: default Description: CompareTime compares the time parts of two timestamps A and B and returns the following results: < 0if the time part of A is earlier than the time part of B. 0if A and B have the same time part (dates may differ) . > 0if the time part of A is later than the time part of B. See also: CompareDateTime (450), CompareDate (449), SameDate (503), SameTime (505), SameDateTime (504) Listing: ./datutex/ex100.pp
451
Program Example100 ; { T h i s program demonstrates t h e CompareTime f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Const Fmt = dddd dd mmmm yyyy hh : nn : ss . zzz ; Procedure Test ( D1 , D2 : TDateTime ) ; Var Cmp : I n t e g e r ; begin Write ( FormatDateTime ( Fmt , D1 ) , has ) ; Cmp: = CompareDateTime ( D1 , D2 ) ; I f Cmp<0 then w r i t e ( e a r l i e r t i m e than ) else i f Cmp>0 then Write ( l a t e r t i m e than ) else Write ( equal t i m e w i t h ) ; W r i t e l n ( FormatDateTime ( Fmt , D2 ) ) ; end ; Var D, N : TDateTime ; Begin D: = Today ; N: =Now; Test (D,D ) ; Test (N,N ) ; Test (N+1 ,N ) ; Test (N1,N ) ; Test (N+OneSecond ,N ) ; Test (NOneSecond ,N ) ; End .
9.4.4
DateOf
Synopsis: Extract the date part from a DateTime indication. Declaration: function DateOf(const AValue: TDateTime) : TDateTime Visibility: default Description: DateOf extracts the date part from AValue and returns the result. Since the TDateTime is actually a double with the date part encoded in the integer part, this operation corresponds to a call to Trunc. See also: TimeOf (515), YearOf (534), MonthOf (493), DayOf (454), HourOf (469), MinuteOf (489), SecondOf (506), MilliSecondOf (485) Listing: ./datutex/ex1.pp 452
Program Example1 ; { T h i s program demonstrates t h e DateOf f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Begin W r i t e l n ( Date i s : , DateTimeToStr ( DateOf (Now ) ) ) ; End .
9.4.5
DateTimeToDosDateTime
Synopsis: Convert TDateTime format to DOS date/time format Declaration: function DateTimeToDosDateTime(const AValue: TDateTime) : LongInt Visibility: default Description: DateTimeToDosDatetime takes Value, a TDateTime formatted timestamp, and recodes it to a MS-DOS encoded date/time value. This is a longint with the date/time encoded in the bits as: 0-4Seconds divided by 2 5-10Minutes 11-15Hours 16-20Day 21-24Month 25-31Years since 1980 See also: DosDateTimeToDateTime (462)
9.4.6
DateTimeToJulianDate
Synopsis: Converts a TDateTime value to a Julian date representation Declaration: function DateTimeToJulianDate(const AValue: TDateTime) : Double Visibility: default Description: DateTimeToJulianDate converts the AValue date/time indication to a julian (as opposed to Gregorian) date. See also: JulianDateToDateTime (484), TryJulianDateToDateTime (520), DateTimeToModiedJulianDate (454), TryModiedJulianDateToDateTime (520)
9.4.7
DateTimeToMac
Synopsis: Convert a TDateTime timestamp to a Mac timestamp Declaration: function DateTimeToMac(const AValue: TDateTime) : Int64 Visibility: default Description: DateTimeToMac converts the TDateTime value AValue to a valid Mac timestamp indication and returns the result. 453
Errors: None. See also: UnixTimeStampToMac (521), MacToDateTime (485), MacTimeStampToUnix (485)
9.4.8
DateTimeToModiedJulianDate
Synopsis: Convert a TDateTime value to a modied Julian date representation Declaration: function DateTimeToModifiedJulianDate(const AValue: TDateTime) : Double Visibility: default Description: Not yet implemented. Errors: Currently, trying to use this function will raise an exception. See also: DateTimeToJulianDate (453), JulianDateToDateTime (484), TryJulianDateToDateTime (520), TryModiedJulianDateToDateTime (520)
9.4.9
DateTimeToUnix
Synopsis: Convert a TDateTime value to Unix epoch time Declaration: function DateTimeToUnix(const AValue: TDateTime) : Int64 Visibility: default Description: DateTimeToUnix converts a TDateTime value to a epoch time (i.e. the time elapsed since 1/1/1970). See also: UnixToDateTime (522)
9.4.10
DayOf
Synopsis: Extract the day (of month) part from a DateTime value Declaration: function DayOf(const AValue: TDateTime) : Word Visibility: default Description: DayOf returns the day of the month part of the AValue date/time indication. It is a number between 1 and 31. For an example, see YearOf (534) See also: YearOf (534), WeekOf (522), MonthOf (493), HourOf (469), MinuteOf (489), SecondOf (506), MilliSecondOf (485)
9.4.11
DayOfTheMonth
Synopsis: Extract the day (of month) part of a DateTime value Declaration: function DayOfTheMonth(const AValue: TDateTime) : Word Visibility: default
454
Description: DayOfTheMonth returns the number of days that have passed since the start of the month till the moment indicated by AValue. This is a one-based number, i.e. the rst day of the month will return 1. For an example, see the WeekOfTheMonth (522) function. See also: DayOfTheYear (455), WeekOfTheMonth (522), HourOfTheMonth (470), MinuteOfTheMonth (490), SecondOfTheMonth (508), MilliSecondOfTheMonth (486)
9.4.12
DayOfTheWeek
Synopsis: Extracts the day of the week from a DateTime value Declaration: function DayOfTheWeek(const AValue: TDateTime) : Word Visibility: default Description: DayOfTheWeek returns the number of days that have passed since the start of the week till the moment indicated by AValue. This is a one-based number, i.e. the rst day of the week will return 1. See also: DayOfTheYear (455), DayOfTheMonth (454), HourOfTheWeek (470), MinuteOfTheWeek (491), SecondOfTheWeek (508), MilliSecondOfTheWeek (487) Listing: ./datutex/ex42.pp
Program Example42 ; { T h i s program demonstrates t h e WeekOfTheMonth f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Var N : TDateTime ; Begin N: =Now; Writeln ( Writeln ( Writeln ( Writeln ( Writeln ( End .
Day o f t h e Week Hour o f t h e Week Minute o f t h e Week Second o f t h e Week M i l l i S e c o n d o f t h e Week MilliSecondOfTheWeek (N ) ) ;
: : : : :
9.4.13
DayOfTheYear
Synopsis: Extracts the day of the year from a TDateTime value Declaration: function DayOfTheYear(const AValue: TDateTime) : Word Visibility: default Description: DayOfTheYear returns the number of days that have passed since the start of the year till the moment indicated by AValue. This is a one-based number, i.e. January 1 will return 1. For an example, see the WeekOfTheYear (523) function. See also: WeekOfTheYear (523), HourOfTheYear (471), MinuteOfTheYear (491), SecondOfTheYear (508), MilliSecondOfTheYear (487) 455
9.4.14
DaysBetween
Synopsis: Number of whole days between two DateTime values. Declaration: function DaysBetween(const ANow: TDateTime;const AThen: TDateTime) : Integer Visibility: default Description: DaysBetween returns the number of whole days between ANow and AThen. This means the fractional part of a day (hours, minutes, etc.) is dropped. See also: YearsBetween (535), MonthsBetween (494), WeeksBetween (523), HoursBetween (471), MinutesBetween (491), SecondsBetween (508), MilliSecondsBetween (488) Listing: ./datutex/ex58.pp
Program Example58 ; { T h i s program demonstrates t h e DaysBetween f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Procedure Test (ANow, AThen : TDateTime ) ; begin Write ( Number o f days between ) ; Write ( DateTimeToStr ( AThen ) , and , DateTimeToStr (ANow ) ) ; W r i t e l n ( : , DaysBetween (ANow, AThen ) ) ; end ; Var D1 , D2 : TDateTime ; Begin D1: =Now; D2: = Today 23/24; Test ( D1 , D2 ) ; D2: = Today 1; Test ( D1 , D2 ) ; D2: = Today 25/24; Test ( D1 , D2 ) ; D2: = Today 26/24; Test ( D1 , D2 ) ; D2: = Today 5.4; Test ( D1 , D2 ) ; D2: = Today 2.5; Test ( D1 , D2 ) ; End .
9.4.15
DaysInAMonth
Synopsis: Number of days in a month of a certain year. Declaration: function DaysInAMonth(const AYear: Word;const AMonth: Word) : Word Visibility: default
456
Description: DaysInYMonth returns the number of days in the month AMonth in the yearAYear. The return value takes leap years into account. See also: WeeksInAYear (524), WeeksInYear (525), DaysInYear (458), DaysInAYear (457), DaysInMonth (458) Listing: ./datutex/ex17.pp
Program Example17 ; { T h i s program demonstrates t h e DaysInAMonth f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Var Y ,M : Word ; Begin For Y: = 1 9 9 2 to 2 0 1 0 do For M: = 1 to 1 2 do W r i t e l n ( LongMonthNames [m] , ,Y , has , DaysInAMonth ( Y ,M) , days . ) ; End .
9.4.16
DaysInAYear
Synopsis: Number of days in a particular year. Declaration: function DaysInAYear(const AYear: Word) : Word Visibility: default Description: DaysInAYear returns the number of weeks in the year AYear. The return value is either 365 or 366. See also: WeeksInAYear (524), WeeksInYear (525), DaysInYear (458), DaysInMonth (458), DaysInAMonth (456) Listing: ./datutex/ex15.pp
Program Example15 ; { T h i s program demonstrates t h e DaysInAYear f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Var Y : Word ; Begin For Y: = 1 9 9 2 to 2 0 1 0 do W r i t e l n ( Y , has , DaysInAYear (Y ) , days . ) ; End .
457
9.4.17
DaysInMonth
Synopsis: Return the number of days in the month in which a date occurs. Declaration: function DaysInMonth(const AValue: TDateTime) : Word Visibility: default Description: DaysInMonth returns the number of days in the month in which AValue falls. The return value takes leap years into account. See also: WeeksInAYear (524), WeeksInYear (525), DaysInYear (458), DaysInAYear (457), DaysInAMonth (456) Listing: ./datutex/ex16.pp
Program Example16 ; { T h i s program demonstrates t h e DaysInMonth f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Var Y ,M : Word ; Begin For Y: = 1 9 9 2 to 2 0 1 0 do For M: = 1 to 1 2 do W r i t e l n ( LongMonthNames [m] , ,Y , has , DaysInMonth ( EncodeDate ( Y ,M, 1 ) ) , days . ) ; End .
9.4.18
DaysInYear
Synopsis: Return the number of days in the year in which a date occurs. Declaration: function DaysInYear(const AValue: TDateTime) : Word Visibility: default Description: daysInYear returns the number of days in the year part of AValue. The return value is either 365 or 366. See also: WeeksInAYear (524), WeeksInYear (525), DaysInAYear (457), DaysInMonth (458), DaysInAMonth (456) Listing: ./datutex/ex14.pp
Program Example14 ; { T h i s program demonstrates t h e DaysInYear f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Var Y : Word ; Begin For Y: = 1 9 9 2 to 2 0 1 0 do W r i t e l n ( Y , has , DaysInYear ( EncodeDate ( Y , 1 , 1 ) ) , days . ) ; End .
458
9.4.19
DaySpan
Synopsis: Calculate the approximate number of days between two DateTime values. Declaration: function DaySpan(const ANow: TDateTime;const AThen: TDateTime) : Double Visibility: default Description: DaySpan returns the number of Days between ANow and AThen, including any fractional parts of a Day. See also: YearSpan (536), MonthSpan (495), WeekSpan (525), HourSpan (472), MinuteSpan (492), SecondSpan (509), MilliSecondSpan (488), DaysBetween (456) Listing: ./datutex/ex66.pp
Program Example66 ; { T h i s program demonstrates t h e DaySpan f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Procedure Test (ANow, AThen : TDateTime ) ; begin Write ( Number o f days between ) ; Write ( DateTimeToStr ( AThen ) , and , DateTimeToStr (ANow ) ) ; W r i t e l n ( : , DaySpan (ANow, AThen ) ) ; end ; Var D1 , D2 : TDateTime ; Begin D1: =Now; D2: = Today 23/24; Test ( D1 , D2 ) ; D2: = Today 1; Test ( D1 , D2 ) ; D2: = Today 25/24; Test ( D1 , D2 ) ; D2: = Today 26/24; Test ( D1 , D2 ) ; D2: = Today 5.4; Test ( D1 , D2 ) ; D2: = Today 2.5; Test ( D1 , D2 ) ; End .
9.4.20
DecodeDateDay
Synopsis: Decode a DateTime value in year and year of day. Declaration: procedure DecodeDateDay(const AValue: TDateTime;out AYear: Word; out ADayOfYear: Word) Visibility: default
459
Description: DecodeDateDay decomposes the date indication in AValue and returns the various components in AYear, ADayOfYear. See also: EncodeDateTime (463), EncodeDateMonthWeek (463), EncodeDateWeek (464), EncodeDateDay (463), DecodeDateTime (461), DecodeDateWeek (461), DecodeDateMonthWeek (460) Listing: ./datutex/ex83.pp
Program Example83 ; { T h i s program demonstrates t h e DecodeDateDay f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Var Y , DoY : Word ; TS : TDateTime ; Begin DecodeDateDay (Now, Y , DoY ) ; TS: = EncodeDateDay ( Y , DoY ) ; W r i t e l n ( Today i s : , DateToStr ( TS ) ) ; End .
9.4.21
DecodeDateMonthWeek
Synopsis: Decode a DateTime value in a month, week of month and day of week Declaration: procedure DecodeDateMonthWeek(const AValue: TDateTime;out AYear: Word; out AMonth: Word;out AWeekOfMonth: Word; out ADayOfWeek: Word) Visibility: default Description: DecodeDateMonthWeek decomposes the date indication in AValue and returns the various components in AYear, AMonthAWeekOfMonth and ADayOfWeek. See also: EncodeDateTime (463), EncodeDateMonthWeek (463), EncodeDateWeek (464), EncodeDateDay (463), DecodeDateTime (461), DecodeDateWeek (461), DecodeDateDay (459) Listing: ./datutex/ex85.pp
Program Example85 ; { T h i s program demonstrates t h e DecodeDateMonthWeek f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Var Y ,M,Wom, Dow : Word ; TS : TDateTime ; Begin DecodeDateMonthWeek (Now, Y ,M,WoM,DoW) ; TS: = EncodeDateMonthWeek ( Y ,M,WoM, Dow ) ; W r i t e l n ( Today i s : , DateToStr ( TS ) ) ; End .
460
9.4.22
DecodeDateTime
Synopsis: Decode a datetime value in a date and time value Declaration: procedure DecodeDateTime(const AValue: TDateTime;out AYear: Word; out AMonth: Word;out ADay: Word;out AHour: Word; out AMinute: Word;out ASecond: Word; out AMilliSecond: Word) Visibility: default Description: DecodeDateTime decomposes the date/time indication in AValue and returns the various components in AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond See also: EncodeDateTime (463), EncodeDateMonthWeek (463), EncodeDateWeek (464), EncodeDateDay (463), DecodeDateWeek (461), DecodeDateDay (459), DecodeDateMonthWeek (460) Listing: ./datutex/ex79.pp
Program Example79 ; { T h i s program demonstrates t h e DecodeDateTime f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Var Y , Mo, D, H, Mi , S ,MS : Word ; TS : TDateTime ; Begin DecodeDateTime (Now, Y , Mo, D, H, Mi , S ,MS) ; TS: = EncodeDateTime ( Y , Mo, D, H, Mi , S ,MS) ; W r i t e l n ( Now i s : , DateTimeToStr ( TS ) ) ; End .
9.4.23
DecodeDateWeek
Synopsis: Decode a DateTime value in a week of year and day of week. Declaration: procedure DecodeDateWeek(const AValue: TDateTime;out AYear: Word; out AWeekOfYear: Word;out ADayOfWeek: Word) Visibility: default Description: DecodeDateWeek decomposes the date indication in AValue and returns the various components in AYear, AWeekOfYear, ADayOfWeek. See also: EncodeDateTime (463), EncodeDateMonthWeek (463), EncodeDateWeek (464), EncodeDateDay (463), DecodeDateTime (461), DecodeDateDay (459), DecodeDateMonthWeek (460) Listing: ./datutex/ex81.pp
Program Example81 ; { T h i s program demonstrates t h e DecodeDateWeek f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ;
461
Var Y ,W, Dow : Word ; TS : TDateTime ; Begin DecodeDateWeek (Now, Y ,W, Dow ) ; TS: = EncodeDateWeek ( Y ,W, Dow ) ; W r i t e l n ( Today i s : , DateToStr ( TS ) ) ; End .
9.4.24
DecodeDayOfWeekInMonth
Synopsis: Decode a DateTime value in year, month, day of week parts Declaration: procedure DecodeDayOfWeekInMonth(const AValue: TDateTime; out AYear: Word;out AMonth: Word; out ANthDayOfWeek: Word; out ADayOfWeek: Word) Visibility: default Description: DecodeDayOfWeekInMonth decodes the date AValue in a AYear, AMonth, ADayOfweek and ANthDayOfweek. (This is the N-th time that this weekday occurs in the month, e.g. the third saturday of the month.) See also: NthDayOfWeek (495), EncodeDateMonthWeek (463), #rtl.sysutils.DayOfWeek (1497), EncodeDayOfWeekInMonth (464), TryEncodeDayOfWeekInMonth (519) Listing: ./datutex/ex105.pp
Program Example105 ; { T h i s program demonstrates t h e DecodeDayOfWeekInMonth f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Var Y ,M,NDoW,DoW : Word ; D : TDateTime ; Begin DecodeDayOfWeekInMonth ( Date , Y ,M,NDoW,DoW) ; D: = EncodeDayOfWeekInMonth ( Y ,M,NDoW,DoW) ; Write ( DateToStr (D) , i s t h e ,NDow, t h ) ; W r i t e l n ( formatdateTime ( dddd ,D) , o f t h e month . ) ; End .
9.4.25
DosDateTimeToDateTime
Synopsis: Convert DOS date/time format to TDateTime format Declaration: function DosDateTimeToDateTime(AValue: LongInt) : TDateTime Visibility: default Description: DosDateTimeToDateTime takes a DOS encoded date/time AValue and recodes it as a TDateTime value. The bit encoding of the DOS date/time is explained in the DateTimeToDosDateTime (453) function. 462
9.4.26
EncodeDateDay
Synopsis: Encodes a year and day of year to a DateTime value Declaration: function EncodeDateDay(const AYear: Word;const ADayOfYear: Word) : TDateTime Visibility: default Description: EncodeDateDay encodes the values AYear and ADayOfYear to a date value and returns this value. For an example, see DecodeDateDay (459). Errors: If any of the arguments is not valid, then an EConvertError exception is raised. See also: EncodeDateMonthWeek (463), DecodeDateDay (459), EncodeDateTime (463), EncodeDateWeek (464), TryEncodeDateTime (517), TryEncodeDateMonthWeek (517), TryEncodeDateWeek (518)
9.4.27
EncodeDateMonthWeek
Synopsis: Encodes a year, month, week of month and day of week to a DateTime value Declaration: function EncodeDateMonthWeek(const AYear: Word;const AMonth: Word; const AWeekOfMonth: Word; const ADayOfWeek: Word) : TDateTime Visibility: default Description: EncodeDateTime encodes the values AYearAMonth, WeekOfMonth,ADayOfWeek, to a date value and returns this value. For an example, see DecodeDateMonthWeek (460). Errors: If any of the arguments is not valid, then an EConvertError exception is raised. See also: DecodeDateMonthWeek (460), EncodeDateTime (463), EncodeDateWeek (464), EncodeDateDay (463), TryEncodeDateTime (517), TryEncodeDateWeek (518), TryEncodeDateMonthWeek (517), TryEncodeDateDay (516), NthDayOfWeek (495)
9.4.28
EncodeDateTime
Synopsis: Encodes a DateTime value from all its parts Declaration: function EncodeDateTime(const AYear: Word;const AMonth: Word; const ADay: Word;const AHour: Word; const AMinute: Word;const ASecond: Word; const AMilliSecond: Word) : TDateTime Visibility: default Description: EncodeDateTime encodes the values AYearAMonth, ADay,AHour, AMinute,ASecond and AMilliSecond to a date/time valueand returns this value. For an example, see DecodeDateTime (461). Errors: If any of the arguments is not valid, then an EConvertError exception is raised. 463
See also: DecodeDateTime (461), EncodeDateMonthWeek (463), EncodeDateWeek (464), EncodeDateDay (463), TryEncodeDateTime (517), TryEncodeDateWeek (518), TryEncodeDateDay (516), TryEncodeDateMonthWeek (517)
9.4.29
EncodeDateWeek
Synopsis: Encode a TDateTime value from a year, week and day of week triplet Declaration: function EncodeDateWeek(const AYear: Word;const AWeekOfYear: Word; const ADayOfWeek: Word) : TDateTime function EncodeDateWeek(const AYear: Word;const AWeekOfYear: Word) : TDateTime Visibility: default Description: EncodeDateWeek encodes the values AYear, AWeekOfYear and ADayOfWeek to a date value and returns this value. For an example, see DecodeDateWeek (461). Errors: If any of the arguments is not valid, then an EConvertError exception is raised. See also: EncodeDateMonthWeek (463), DecodeDateWeek (461), EncodeDateTime (463), EncodeDateDay (463), TryEncodeDateTime (517), TryEncodeDateWeek (518), TryEncodeDateMonthWeek (517)
9.4.30
EncodeDayOfWeekInMonth
Synopsis: Encodes a year, month, week, day of week specication to a TDateTime value Declaration: function EncodeDayOfWeekInMonth(const AYear: Word;const AMonth: Word; const ANthDayOfWeek: Word; const ADayOfWeek: Word) : TDateTime Visibility: default Description: EncodeDayOfWeekInMonth encodes AYear, AMonth, ADayOfweek and ANthDayOfweek to a valid date stamp and returns the result. ANthDayOfweekis the N-th time that this weekday occurs in the month, e.g. the third saturday of the month. For an example, see DecodeDayOfWeekInMonth (462). Errors: If any of the values is not in range, then an EConvertError exception will be raised. See also: NthDayOfWeek (495), EncodeDateMonthWeek (463), #rtl.sysutils.DayOfWeek (1497), DecodeDayOfWeekInMonth (462), TryEncodeDayOfWeekInMonth (519)
9.4.31
EncodeTimeInterval
Synopsis: Encode an interval as a TDateTime value. Declaration: function EncodeTimeInterval(Hour: Word;Minute: Word;Second: Word; MilliSecond: Word) : TDateTime Visibility: default Description: EncodeTimeInterval encodes a time interval expressed in Hour, Min, Sec, MSec as a TDateTime value and returns the value in Time. 464
Errors: If Min, Sec, MSec do not contain a valid time indication, then an EConvertError exception is raised. See also: TryEncodeTimeInterval (??)
9.4.32
EndOfADay
Synopsis: Calculates a DateTime value representing the end of a specied day Declaration: function EndOfADay(const AYear: Word;const AMonth: Word; const ADay: Word) : TDateTime; Overload function EndOfADay(const AYear: Word;const ADayOfYear: Word) : TDateTime ; Overload Visibility: default Description: EndOfADay returns a TDateTime value with the date/time indication of the last moment (23:59:59.999) of the day given by AYear, AMonth, ADay. The day may also be indicated with a AYear, ADayOfYear pair. See also: StartOfTheDay (513), StartOfADay (510), StartOfTheWeek (514), StartOfAWeek (511), StartOfAMonth (511), StartOfTheMonth (513), EndOfTheWeek (468), EndOfAWeek (466), EndOfTheYear (469), EndOfAYear (467), EndOfTheMonth (468), EndOfAMonth (465), EndOfTheDay (467) Listing: ./datutex/ex39.pp
Program Example39 ; { T h i s program demonstrates t h e EndOfADay f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Const Fmt = " End o f t h e day : " dd mmmm yyyy hh : nn : ss ; Var Y ,M, D : Word ; Begin Y: = YearOf ( Today ) ; M: = MonthOf ( Today ) ; D: = DayOf ( Today ) ; W r i t e l n ( FormatDateTime ( Fmt , EndOfADay ( Y ,M,D ) ) ) ; DecodeDateDay ( Today , Y ,D ) ; W r i t e l n ( FormatDateTime ( Fmt , EndOfADay ( Y ,D ) ) ) ; End .
9.4.33
EndOfAMonth
Synopsis: Calculate a datetime value representing the last day of the indicated month Declaration: function EndOfAMonth(const AYear: Word;const AMonth: Word) : TDateTime Visibility: default Description: EndOfAMonth e returns a TDateTime value with the date of the last day of the month indicated by the AYear, AMonth pair. 465
See also: StartOfTheMonth (513), StartOfAMonth (511), EndOfTheMonth (468), EndOfTheYear (469), EndOfAYear (467), StartOfAWeek (511), StartOfTheWeek (514) Listing: ./datutex/ex31.pp
Program Example31 ; { T h i s program demonstrates t h e EndOfAMonth f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Const Fmt = " L a s t day o f t h i s month : " dd mmmm yyyy ; Var Y ,M : Word ; Begin Y: = YearOf ( Today ) ; M: = MonthOf ( Today ) ; W r i t e l n ( FormatDateTime ( Fmt , EndOfAMonth ( Y ,M ) ) ) ; End .
9.4.34
EndOfAWeek
Synopsis: Return the last moment of day of the week, given a year and a week in the year. Declaration: function EndOfAWeek(const AYear: Word;const AWeekOfYear: Word; const ADayOfWeek: Word) : TDateTime function EndOfAWeek(const AYear: Word;const AWeekOfYear: Word) : TDateTime Visibility: default Description: EndOfAWeek returns a TDateTime value with the date of the last moment (23:59:59:999) on the indicated day of the week indicated by the AYear, AWeek, ADayOfWeek values. The default value for ADayOfWeek is 7. See also: StartOfTheWeek (514), EndOfTheWeek (468), EndOfAWeek (466), StartOfAMonth (511), EndOfTheYear (469), EndOfAYear (467), EndOfTheMonth (468), EndOfAMonth (465) Listing: ./datutex/ex35.pp
Program Example35 ; { T h i s program demonstrates t h e EndOfAWeek f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Const Fmt = " L a s t day o f t h i s week : " dd mmmm yyyy hh : nn : ss ; Fmt2 = " Last 1 day o f t h i s week : " dd mmmm yyyy hh : nn : ss ; Var Y ,W : Word ; Begin Y: = YearOf ( Today ) ;
466
W: = WeekOf ( Today ) ; W r i t e l n ( FormatDateTime ( Fmt , EndOfAWeek ( Y ,W) ) ) ; W r i t e l n ( FormatDateTime ( Fmt2 , EndOfAWeek ( Y ,W, 6 ) ) ) ; End .
9.4.35
EndOfAYear
Synopsis: Calculate a DateTime value representing the last day of a year Declaration: function EndOfAYear(const AYear: Word) : TDateTime Visibility: default Description: StartOfAYear returns a TDateTime value with the date of the last day of the year AYear (December 31). See also: StartOfTheYear (514), EndOfTheYear (469), EndOfAYear (467), EndOfTheMonth (468), EndOfAMonth (465), StartOfAWeek (511), StartOfTheWeek (514) Listing: ./datutex/ex27.pp
Program Example27 ; { T h i s program demonstrates t h e EndOfAYear f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Const Fmt = " L a s t day o f t h i s year : " dd mmmm yyyy ; Begin W r i t e l n ( FormatDateTime ( Fmt , EndOfAYear ( YearOf ( Today ) ) ) ) ; End .
9.4.36
EndOfTheDay
Synopsis: Calculate a datetime value that represents the end of a given day. Declaration: function EndOfTheDay(const AValue: TDateTime) : TDateTime Visibility: default Description: EndOfTheDay extracts the date part of AValue and returns a TDateTime value with the date/time indication of the last moment (23:59:59.999) of this day. See also: StartOftheDay (513), StartOfADay (510), StartOfTheWeek (514), StartOfAWeek (511), StartOfAMonth (511), StartOfTheMonth (513), EndOfTheWeek (468), EndOfAWeek (466), EndOfTheYear (469), EndOfAYear (467), EndOfTheMonth (468), EndOfAMonth (465), EndOfADay (465) Listing: ./datutex/ex37.pp
Program Example37 ; { T h i s program demonstrates t h e EndOfTheDay f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ;
467
9.4.37
EndOfTheMonth
Synopsis: Calculate a DateTime value representing the last day of the month, given a day in that month. Declaration: function EndOfTheMonth(const AValue: TDateTime) : TDateTime Visibility: default Description: EndOfTheMonth extracts the year and month parts of AValue and returns a TDateTime value with the date of the rst day of that year and month as the EndOfAMonth (465) function. See also: StartOfAMonth (511), StartOfTheMonth (513), EndOfAMonth (465), EndOfTheYear (469), EndOfAYear (467), StartOfAWeek (511), StartOfTheWeek (514) Listing: ./datutex/ex29.pp
Program Example29 ; { T h i s program demonstrates t h e EndOfTheMonth f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Const Fmt = " l a s t day o f t h i s month : " dd mmmm yyyy ; Begin W r i t e l n ( FormatDateTime ( Fmt , EndOfTheMonth ( Today ) ) ) ; End .
9.4.38
EndOfTheWeek
Synopsis: Calculate a DateTime value which represents the end of a week, given a date in that week. Declaration: function EndOfTheWeek(const AValue: TDateTime) : TDateTime Visibility: default Description: EndOfTheWeek extracts the year and week parts of AValue and returns a TDateTime value with the date of the last day of that week as the EndOfAWeek (466) function. See also: StartOfAWeek (511), StartOfTheWeek (514), EndOfAWeek (466), StartOfAMonth (511), EndOfTheYear (469), EndOfAYear (467), EndOfTheMonth (468), EndOfAMonth (465) Listing: ./datutex/ex33.pp
468
Program Example33 ; { T h i s program demonstrates t h e EndOfTheWeek f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Const Fmt = " l a s t day o f t h i s week : " dd mmmm yyyy ; Begin W r i t e l n ( FormatDateTime ( Fmt , EndOfTheWeek ( Today ) ) ) ; End .
9.4.39
EndOfTheYear
Synopsis: Calculate a DateTime value representing the last day of a year, given a date in that year. Declaration: function EndOfTheYear(const AValue: TDateTime) : TDateTime Visibility: default Description: EndOfTheYear extracts the year part of AValue and returns a TDateTime value with the date of the last day of that year (December 31), as the EndOfAYear (467) function. See also: StartOfAYear (512), StartOfTheYear (514), EndOfTheMonth (468), EndOfAMonth (465), StartOfAWeek (511), StartOfTheWeek (514), EndOfAYear (467) Listing: ./datutex/ex25.pp
Program Example25 ; { T h i s program demonstrates t h e EndOfTheYear f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Const Fmt = " L a s t day o f t h i s year : " dd mmmm yyyy ; Begin W r i t e l n ( FormatDateTime ( Fmt , EndOfTheYear ( Today ) ) ) ; End .
9.4.40
HourOf
Synopsis: Extract the hour part from a DateTime value. Declaration: function HourOf(const AValue: TDateTime) : Word Visibility: default Description: HourOf returns the hour of the day part of the AValue date/time indication. It is a number between 0 and 23. For an example, see YearOf (534) See also: YearOf (534), WeekOf (522), MonthOf (493), DayOf (454), MinuteOf (489), SecondOf (506), MilliSecondOf (485) 469
9.4.41
HourOfTheDay
Synopsis: Calculate the hour of a given DateTime value Declaration: function HourOfTheDay(const AValue: TDateTime) : Word Visibility: default Description: HourOfTheDay returns the number of hours that have passed since the start of the day till the moment indicated by AValue. This is a zero-based number, i.e. 00:59:59 will return 0. See also: HourOfTheYear (471), HourOfTheMonth (470), HourOfTheWeek (470), MinuteOfTheDay (489), SecondOfTheDay (506), MilliSecondOfTheDay (485) Listing: ./datutex/ex43.pp
Program Example43 ; { T h i s program demonstrates t h e HourOfTheDay f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Var N : TDateTime ; Begin N: =Now; Writeln ( Writeln ( Writeln ( Writeln ( End .
: : : :
9.4.42
HourOfTheMonth
Synopsis: Calculate the number of hours passed since the start of the month. Declaration: function HourOfTheMonth(const AValue: TDateTime) : Word Visibility: default Description: HourOfTheMonth returns the number of hours that have passed since the start of the month till the moment indicated by AValue. This is a zero-based number, i.e. 00:59:59 on the rst day of the month will return 0. For an example, see the WeekOfTheMonth (522) function. See also: WeekOfTheMonth (522), DayOfTheMonth (454), MinuteOfTheMonth (490), SecondOfTheMonth (508), MilliSecondOfTheMonth (486)
9.4.43
HourOfTheWeek
Synopsis: Calculate the number of hours elapsed since the start of the week. Declaration: function HourOfTheWeek(const AValue: TDateTime) : Word Visibility: default
470
Description: HourOfTheWeek returns the number of hours that have passed since the start of the Week till the moment indicated by AValue. This is a zero-based number, i.e. 00:59:59 on the rst day of the week will return 0. For an example, see the DayOfTheWeek (455) function. See also: HourOfTheYear (471), HourOfTheMonth (470), HourOfTheDay (470), DayOfTheWeek (455), MinuteOfTheWeek (491), SecondOfTheWeek (508), MilliSecondOfTheWeek (487)
9.4.44
HourOfTheYear
Synopsis: Calculate the number of hours passed since the start of the year. Declaration: function HourOfTheYear(const AValue: TDateTime) : Word Visibility: default Description: HourOfTheYear returns the number of hours that have passed since the start of the year (January 1, 00:00:00) till the moment indicated by AValue. This is a zero-based number, i.e. January 1 00:59:59 will return 0. For an example, see the WeekOfTheYear (523) function. See also: WeekOfTheYear (523), DayOfTheYear (455), MinuteOfTheYear (491), SecondOfTheYear (508), MilliSecondOfTheYear (487)
9.4.45
HoursBetween
Synopsis: Calculate the number of whole hours between two DateTime values. Declaration: function HoursBetween(const ANow: TDateTime;const AThen: TDateTime) : Int64 Visibility: default Description: HoursBetween returns the number of whole hours between ANow and AThen. This means the fractional part of an hour (minutes,seconds etc.) is dropped. See also: YearsBetween (535), MonthsBetween (494), WeeksBetween (523), DaysBetween (456), MinutesBetween (491), SecondsBetween (508), MilliSecondsBetween (488) Listing: ./datutex/ex59.pp
Program Example59 ; { T h i s program demonstrates t h e HoursBetween f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Procedure Test (ANow, AThen : TDateTime ) ; begin Write ( Number o f hours between ) ; Write ( DateTimeToStr ( AThen ) , and , DateTimeToStr (ANow ) ) ; W r i t e l n ( : , HoursBetween (ANow, AThen ) ) ; end ; Var D1 , D2 : TDateTime ;
471
Begin D1: =Now; D2: =D1(59OneMinute ) ; Test ( D1 , D2 ) ; D2: =D1(61OneMinute ) ; Test ( D1 , D2 ) ; D2: =D1(122OneMinute ) ; Test ( D1 , D2 ) ; D2: =D1(306OneMinute ) ; Test ( D1 , D2 ) ; D2: =D1(5.4OneHour ) ; Test ( D1 , D2 ) ; D2: =D1(2.5OneHour ) ; Test ( D1 , D2 ) ; End .
9.4.46
HourSpan
Synopsis: Calculate the approximate number of hours between two DateTime values. Declaration: function HourSpan(const ANow: TDateTime;const AThen: TDateTime) : Double Visibility: default Description: HourSpan returns the number of Hours between ANow and AThen, including any fractional parts of a Hour. See also: YearSpan (536), MonthSpan (495), WeekSpan (525), DaySpan (459), MinuteSpan (492), SecondSpan (509), MilliSecondSpan (488), HoursBetween (471) Listing: ./datutex/ex67.pp
Program Example67 ; { T h i s program demonstrates t h e HourSpan f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Procedure Test (ANow, AThen : TDateTime ) ; begin Write ( Number o f hours between ) ; Write ( DateTimeToStr ( AThen ) , and , DateTimeToStr (ANow ) ) ; W r i t e l n ( : , HourSpan (ANow, AThen ) ) ; end ; Var D1 , D2 : TDateTime ; Begin D1: =Now; D2: =D1(59OneMinute ) ; Test ( D1 , D2 ) ; D2: =D1(61OneMinute ) ; Test ( D1 , D2 ) ; D2: =D1(122OneMinute ) ;
472
Test ( D1 , D2 ) ; D2: =D1(306OneMinute ) ; Test ( D1 , D2 ) ; D2: =D1(5.4OneHour ) ; Test ( D1 , D2 ) ; D2: =D1(2.5OneHour ) ; Test ( D1 , D2 ) ; End .
9.4.47
IncDay
Synopsis: Increase a DateTime value with a number of days. Declaration: function IncDay(const AValue: TDateTime;const ANumberOfDays: Integer) : TDateTime function IncDay(const AValue: TDateTime) : TDateTime Visibility: default Description: IncDay adds ANumberOfDays days to AValue and returns the resulting date/time.ANumberOfDays can be positive or negative. See also: IncYear (476), #rtl.sysutils.IncMonth (1545), IncWeek (475), IncHour (473), IncMinute (474), IncSecond (475), IncMilliSecond (474) Listing: ./datutex/ex74.pp
Program Example74 ; { T h i s program demonstrates t h e IncDay f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Begin W r i t e l n ( One Day from today i s , DateToStr ( IncDay ( Today , 1 ) ) ) ; W r i t e l n ( One Day ago from today i s , DateToStr ( IncDay ( Today , 1 ) ) ) ; End .
9.4.48
IncHour
Synopsis: Increase a DateTime value with a number of hours. Declaration: function IncHour(const AValue: TDateTime;const ANumberOfHours: Int64) : TDateTime function IncHour(const AValue: TDateTime) : TDateTime Visibility: default Description: IncHour adds ANumberOfHours hours to AValue and returns the resulting date/time.ANumberOfHours can be positive or negative. See also: IncYear (476), #rtl.sysutils.IncMonth (1545), IncWeek (475), IncDay (473), IncMinute (474), IncSecond (475), IncMilliSecond (474) Listing: ./datutex/ex75.pp
473
Program Example75 ; { T h i s program demonstrates t h e IncHour f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Begin W r i t e l n ( One Hour from now i s , DateTimeToStr ( IncHour (Now, 1 ) ) ) ; W r i t e l n ( One Hour ago from now i s , DateTimeToStr ( IncHour (Now, 1 ) ) ) ; End .
9.4.49
IncMilliSecond
Synopsis: Increase a DateTime value with a number of milliseconds. Declaration: function IncMilliSecond(const AValue: TDateTime; const ANumberOfMilliSeconds: Int64) : TDateTime function IncMilliSecond(const AValue: TDateTime) : TDateTime Visibility: default Description: IncMilliSecond adds ANumberOfMilliSeconds milliseconds to AValue and returns the resulting date/time.ANumberOfMilliSeconds can be positive or negative. See also: IncYear (476), #rtl.sysutils.IncMonth (1545), IncWeek (475), IncDay (473), IncHour (473), IncSecond (475), IncMilliSecond (474) Listing: ./datutex/ex78.pp
Program Example78 ; { T h i s program demonstrates t h e I n c M i l l i S e c o n d f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Begin W r i t e l n ( One M i l l i S e c o n d from now i s , TimeToStr ( I n c M i l l i S e c o n d (Now, 1 ) ) ) ; W r i t e l n ( One M i l l i S e c o n d ago from now i s , TimeToStr ( I n c M i l l i S e c o n d (Now, 1 ) ) ) ; End .
9.4.50
IncMinute
Synopsis: Increase a DateTime value with a number of minutes. Declaration: function IncMinute(const AValue: TDateTime; const ANumberOfMinutes: Int64) : TDateTime function IncMinute(const AValue: TDateTime) : TDateTime Visibility: default Description: IncMinute adds ANumberOfMinutes minutes to AValue and returns the resulting date/time.ANumberOfMinutes can be positive or negative. See also: IncYear (476), #rtl.sysutils.IncMonth (1545), IncWeek (475), IncDay (473), IncHour (473), IncSecond (475), IncMilliSecond (474) 474
Listing: ./datutex/ex76.pp
Program Example76 ; { T h i s program demonstrates t h e I n c M i n u t e f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Begin W r i t e l n ( One Minute from now i s , TimeToStr ( I n c M i n u t e ( Time , 1 ) ) ) ; W r i t e l n ( One Minute ago from now i s , TimeToStr ( I n c M i n u t e ( Time , 1 ) ) ) ; End .
9.4.51
IncSecond
Synopsis: Increase a DateTime value with a number of seconds. Declaration: function IncSecond(const AValue: TDateTime; const ANumberOfSeconds: Int64) : TDateTime function IncSecond(const AValue: TDateTime) : TDateTime Visibility: default Description: IncSecond adds ANumberOfSeconds seconds to AValue and returns the resulting date/time.ANumberOfSeconds can be positive or negative. See also: IncYear (476), #rtl.sysutils.IncMonth (1545), IncWeek (475), IncDay (473), IncHour (473), IncSecond (475), IncMilliSecond (474) Listing: ./datutex/ex77.pp
Program Example77 ; { T h i s program demonstrates t h e IncSecond f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Begin W r i t e l n ( One Second from now i s , TimeToStr ( IncSecond ( Time , 1 ) ) ) ; W r i t e l n ( One Second ago from now i s , TimeToStr ( IncSecond ( Time , 1 ) ) ) ; End .
9.4.52
IncWeek
Synopsis: Increase a DateTime value with a number of weeks. Declaration: function IncWeek(const AValue: TDateTime;const ANumberOfWeeks: Integer) : TDateTime function IncWeek(const AValue: TDateTime) : TDateTime Visibility: default Description: IncWeek adds ANumberOfWeeks weeks to AValue and returns the resulting date/time.ANumberOfWeeks can be positive or negative. See also: IncYear (476), #rtl.sysutils.IncMonth (1545), IncDay (473), IncHour (473), IncMinute (474), IncSecond (475), IncMilliSecond (474) 475
Listing: ./datutex/ex73.pp
Program Example73 ; { T h i s program demonstrates t h e IncWeek f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Begin W r i t e l n ( One Week from today i s , DateToStr ( IncWeek ( Today , 1 ) ) ) ; W r i t e l n ( One Week ago from today i s , DateToStr ( IncWeek ( Today , 1 ) ) ) ; End .
9.4.53
IncYear
Synopsis: Increase a DateTime value with a number of years. Declaration: function IncYear(const AValue: TDateTime;const ANumberOfYears: Integer) : TDateTime function IncYear(const AValue: TDateTime) : TDateTime Visibility: default Description: IncYear adds ANumberOfYears years to AValue and returns the resulting date/time. ANumberOfYears can be positive or negative. See also: #rtl.sysutils.IncMonth (1545), IncWeek (475), IncDay (473), IncHour (473), IncMinute (474), IncSecond (475), IncMilliSecond (474) Listing: ./datutex/ex71.pp
Program Example71 ; { T h i s program demonstrates t h e IncYear f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Begin W r i t e l n ( One year from today i s , DateToStr ( IncYear ( Today , 1 ) ) ) ; W r i t e l n ( One year ago from today i s , DateToStr ( IncYear ( Today , 1 ) ) ) ; End .
9.4.54
InvalidDateDayError
Synopsis: Raise an EConvertError exception when a day is not a valid day of a year. Declaration: procedure InvalidDateDayError(const AYear: Word;const ADayOfYear: Word) Visibility: default Description: InvalidDateDayError raises an EConvertError (1597) exception and formats the error message with an appropriate description made up from the parts AYear and ADayOfYear. Normally this function should not be needed, the conversion routines call it when they have received invalid arguments. See also: InvalidDateWeekError (477), InvalidDateTimeError (477), InvalidDateMonthWeekError (477), InvalidDayOfWeekInMonthError (478) 476
9.4.55
InvalidDateMonthWeekError
Synopsis: Raise an EConvertError exception when a Year,Month,WeekOfMonth,DayofWeek is invalid. Declaration: procedure InvalidDateMonthWeekError(const AYear: Word; const AMonth: Word; const AWeekOfMonth: Word; const ADayOfWeek: Word) Visibility: default Description: InvalidDateMonthWeekError raises an EConvertError (1597) exception and formats the error message with an appropriate description made up from the parts AYear, Amonth, AWeekOfMonth and ADayOfWeek. Normally this function should not be needed, the conversion routines call it when they have received invalid arguments. See also: InvalidDateWeekError (477), InvalidDateTimeError (477), InvalidDateDayError (476), InvalidDayOfWeekInMonthError (478)
9.4.56
InvalidDateTimeError
Synopsis: Raise an EConvertError about an invalid date-time specication. Declaration: procedure InvalidDateTimeError(const AYear: Word;const AMonth: Word; const ADay: Word;const AHour: Word; const AMinute: Word;const ASecond: Word; const AMilliSecond: Word; const ABaseDate: TDateTime) procedure InvalidDateTimeError(const AYear: Word;const AMonth: Word; const ADay: Word;const AHour: Word; const AMinute: Word;const ASecond: Word; const AMilliSecond: Word) Visibility: default Description: InvalidDateTimeError raises an EConvertError (1597) exception and formats the error message with an appropriate description made up from the parts AYear, AMonth, ADay,AHour, AMinute, ASecond and AMilliSecond. Normally this function should not be needed, the conversion routines call it when they have received invalid arguments. See also: InvalidDateWeekError (477), InvalidDateDayError (476), InvalidDateMonthWeekError (477), InvalidDayOfWeekInMonthError (478)
9.4.57
InvalidDateWeekError
Synopsis: Raise an EConvertError with an invalid Year, WeekOfyear and DayOfWeek specication Declaration: procedure InvalidDateWeekError(const AYear: Word; const AWeekOfYear: Word; const ADayOfWeek: Word) Visibility: default
477
Description: InvalidDateWeekError raises an EConvertError (1597) exception and formats the error message with an appropriate description made up from the parts AYear, AWeek, ADayOfWeek Normally this function should not be needed, the conversion routines call it when they have received invalid arguments. See also: InvalidDateTimeError (477), InvalidDateDayError (476), InvalidDateMonthWeekError (477), InvalidDayOfWeekInMonthError (478)
9.4.58
InvalidDayOfWeekInMonthError
Synopsis: Raise an EConvertError exception when a Year,Month,NthDayofWeek,DayofWeek is invalid. Declaration: procedure InvalidDayOfWeekInMonthError(const AYear: Word; const AMonth: Word; const ANthDayOfWeek: Word; const ADayOfWeek: Word) Visibility: default Description: InvalidDayOfWeekInMonthError raises an EConvertError (1597) exception and formats the error message with an appropriate description made up from the parts AYear, Amonth, ANthDayOfWeek and ADayOfWeek. Normally this function should not be needed, the conversion routines call it when they have received invalid arguments. See also: InvalidDateWeekError (477), InvalidDateTimeError (477), InvalidDateDayError (476), InvalidDateMonthWeekError (477)
9.4.59
IsInLeapYear
Synopsis: Determine whether a date is in a leap year. Declaration: function IsInLeapYear(const AValue: TDateTime) : Boolean Visibility: default Description: IsInLeapYear returns True if the year part of AValue is leap year, or False if not. See also: YearOf (534), IsPM (479), IsToday (480), IsSameDay (479) Listing: ./datutex/ex3.pp
Program Example3 ; { T h i s program demonstrates t h e IsInLeapYear f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Begin W r i t e l n ( C u r r e n t year i s l e a p year : , IsInLeapYear ( Date ) ) ; End .
478
9.4.60
IsPM
Synopsis: Determine whether a time is PM or AM. Declaration: function IsPM(const AValue: TDateTime) : Boolean Visibility: default Description: IsPM returns True if the time part of AValue is later then 12:00 (PM, or afternoon). See also: YearOf (534), IsInLeapYear (478), IsToday (480), IsSameDay (479) Listing: ./datutex/ex4.pp
Program Example4 ; { T h i s program demonstrates t h e IsPM f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Begin W r i t e l n ( C u r r e n t t i m e i s PM : End .
, IsPM (Now ) ) ;
9.4.61
IsSameDay
Synopsis: Check if two date/time indications are the same day. Declaration: function IsSameDay(const AValue: TDateTime;const ABasis: TDateTime) : Boolean Visibility: default Description: IsSameDay checks whether AValue and ABasis have the same date part, and returns True if they do, False if not. See also: Today (515), Yesterday (536), Tomorrow (516), IsToday (480) Listing: ./datutex/ex21.pp
Program Example21 ; { T h i s program demonstrates t h e IsSameDay f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Var I : Integer ; D : TDateTime ; Begin For I : = 1 to 3 do begin D: = Today+Random(3) 1; Write ( FormatDateTime ( dd mmmm yyyy " i s today : " ,D ) ) ; W r i t e l n ( IsSameDay (D, Today ) ) ; end ; End .
479
9.4.62
IsSameMonth
Synopsis: Check if 2 dates are in the same month. Declaration: function IsSameMonth(const Avalue: TDateTime;const ABasis: TDateTime) : Boolean Visibility: default Description: IsSameMonth will return True if the two dates Avalue and ABasis occur in the same year and month. (i.e. if their month and year parts match). Otherwise, False is returned. See also: IsSameDay (479), IsToday (480), SameDate (503)
9.4.63
IsToday
Synopsis: Check whether a given date is today. Declaration: function IsToday(const AValue: TDateTime) : Boolean Visibility: default Description: IsToday returns True if AValue is todays date, and False otherwise. See also: Today (515), Yesterday (536), Tomorrow (516), IsSameDay (479) Listing: ./datutex/ex20.pp
Program Example20 ; { T h i s program demonstrates t h e IsToday f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Begin W r i t e l n ( Today : , IsToday ( Today ) ) ; W r i t e l n ( Tomorrow : , IsToday ( Tomorrow ) ) ; W r i t e l n ( Yesterday : , IsToday ( Yesterday ) ) ; End .
9.4.64
IsValidDate
Synopsis: Check whether a set of values is a valid date indication. Declaration: function IsValidDate(const AYear: Word;const AMonth: Word; const ADay: Word) : Boolean Visibility: default Description: IsValidDate returns True when the values AYear, AMonth, ADay form a valid date indication. If one of the values is not valid (e.g. the day is invalid or does not exist in that particular month), False is returned. AYear must be in the range 1..9999 to be valid. See also: IsValidTime (484), IsValidDateTime (482), IsValidDateDay (481), IsValidDateWeek (483), IsValidDateMonthWeek (481) Listing: ./datutex/ex5.pp 480
Program Example5 ; { T h i s program demonstrates t h e I s V a l i d D a t e f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Var Y ,M, D : Word ; Begin For Y: = 2 0 0 0 to 2 0 0 4 do For M: = 1 to 1 2 do For D: = 1 to 3 1 do I f Not I s V a l i d D a t e ( Y ,M,D ) then W r i t e l n (D, i s n o t a v a l i d day i n ,Y , / ,M) ; End .
9.4.65
IsValidDateDay
Synopsis: Check whether a given year/day of year combination is a valid date. Declaration: function IsValidDateDay(const AYear: Word;const ADayOfYear: Word) : Boolean Visibility: default Description: IsValidDateDay returns True if AYear and ADayOfYear form a valid date indication, or False otherwise. AYear must be in the range 1..9999 to be valid. The ADayOfYear value is checked to see whether it falls within the valid range of dates for AYear. See also: IsValidDate (480), IsValidTime (484), IsValidDateTime (482), IsValidDateWeek (483), IsValidDateMonthWeek (481) Listing: ./datutex/ex9.pp
Program Example9 ; { T h i s program demonstrates t h e Is V al id D at eD a y f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Var Y : Word ; Begin For Y: = 1 9 9 6 to 2 0 0 4 do i f I sV al i dD at e Da y ( Y , 3 6 6 ) then W r i t e l n ( Y , i s a l e a p year ) ; End .
9.4.66
IsValidDateMonthWeek
Synopsis: Check whether a given year/month/week/day of the week combination is a valid day 481
Declaration: function IsValidDateMonthWeek(const AYear: Word;const AMonth: Word; const AWeekOfMonth: Word; const ADayOfWeek: Word) : Boolean Visibility: default Description: IsValidDateMonthWeek returns True if AYear, AMonthAWeekOfMonth and ADayOfWeek form a valid date indication, or False otherwise. AYear must be in the range 1..9999 to be valid. The AWeekOfMonth,ADayOfWeek values are checked to see whether the combination falls within the valid range of weeks for the AYear,AMonth combination. See also: IsValidDate (480), IsValidTime (484), IsValidDateTime (482), IsValidDateDay (481), IsValidDateWeek (483) Listing: ./datutex/ex11.pp
Program Example11 ; { T h i s program demonstrates t h e IsValidDateMonthWeek f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Var Y ,W, D : Word ; B : Boolean ; Begin For Y: = 2 0 0 0 to 2 0 0 4 do begin B: = True ; For W: = 4 to 6 do For D: = 1 to 7 do I f B then begin B: = IsValidDateMonthWeek ( Y, 1 2 ,W,D ) ; I f Not B then i f ( D= 1 ) then W r i t e l n ( December ,Y , has e x a c t l y ,W, weeks . ) else W r i t e l n ( December ,Y , has ,W, weeks and ,D1, days . ) ; end ; end ; End .
9.4.67
IsValidDateTime
Synopsis: Check whether a set of values is a valid date and time indication. Declaration: function IsValidDateTime(const AYear: Word;const AMonth: Word; const ADay: Word;const AHour: Word; const AMinute: Word;const ASecond: Word; const AMilliSecond: Word) : Boolean Visibility: default
482
Description: IsValidTime returns True when the values AYear, AMonth, ADay, AHour, AMinute, ASecond and AMilliSecond form a valid date and time indication. If one of the values is not valid (e.g. the seconds are larger than 60), False is returned. AYear must be in the range 1..9999 to be valid. See also: IsValidDate (480), IsValidTime (484), IsValidDateDay (481), IsValidDateWeek (483), IsValidDateMonthWeek (481) Listing: ./datutex/ex7.pp
Program Example7 ; { T h i s program demonstrates t h e I s V a l i d D a t e T i m e f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Var Y , Mo,D : Word ; H,M, S ,MS : Word ; I : Integer ; Begin For I : = 1 to 1 0 do begin Y:=2000+Random ( 5 ) ; Mo: =Random ( 1 5 ) ; D: =Random ( 4 0 ) ; H: =Random ( 3 2 ) ; M: =Random ( 9 0 ) ; S: =Random ( 9 0 ) ; MS: =Random( 1 5 0 0 ) ; I f Not I s V a l i d D a t e T i m e ( Y , Mo, D, H,M, S ,MS) then W r i t e l n ( Y , ,Mo, ,D, ,H, : ,M, : ,S , . ,MS, i s n o t a v a l i d date / t i m e . ) ; end ; End .
9.4.68
IsValidDateWeek
Synopsis: Check whether a given year/week/day of the week combination is a valid day. Declaration: function IsValidDateWeek(const AYear: Word;const AWeekOfYear: Word; const ADayOfWeek: Word) : Boolean Visibility: default Description: IsValidDateWeek returns True if AYear, AWeekOfYear and ADayOfWeek form a valid date indication, or False otherwise. AYear must be in the range 1..9999 to be valid. The ADayOfWeek,ADayOfWeek values are checked to see whether the combination falls within the valid range of weeks for AYear. See also: IsValidDate (480), IsValidTime (484), IsValidDateTime (482), IsValidDateDay (481), IsValidDateMonthWeek (481) Listing: ./datutex/ex10.pp
483
Program Example10 ; { T h i s program demonstrates t h e IsValidDateWeek f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Var Y ,W, D : Word ; B : Boolean ; Begin For Y: = 2 0 0 0 to 2 0 0 4 do begin B: = True ; For W: = 5 1 to 5 4 do For D: = 1 to 7 do I f B then begin B: = IsValidDateWeek ( Y ,W,D ) ; I f Not B then i f ( D= 1 ) then W r i t e l n ( Y , has e x a c t l y ,W, weeks . ) else W r i t e l n ( Y , has ,W, weeks and ,D1, days . ) ; end ; end ; End .
9.4.69
IsValidTime
Synopsis: Check whether a set of values is a valid time indication. Declaration: function IsValidTime(const AHour: Word;const AMinute: Word; const ASecond: Word;const AMilliSecond: Word) : Boolean Visibility: default Description: Check whether a set of values is a valid time indication.
9.4.70
JulianDateToDateTime
Synopsis: Convert a Julian date representation to a TDateTime value. Declaration: function JulianDateToDateTime(const AValue: Double) : TDateTime Visibility: default Description: JulianDateToDateTime converts the Julian AValue date/time indication to a regular TDateTime date/time indication. See also: DateTimeToJulianDate (453), TryJulianDateToDateTime (520), DateTimeToModiedJulianDate (454), TryModiedJulianDateToDateTime (520)
484
9.4.71
MacTimeStampToUnix
Synopsis: Convert a Mac timestamp to a Unix timestamp Declaration: function MacTimeStampToUnix(const AValue: Int64) : Int64 Visibility: default Description: MacTimeStampToUnix converts the Mac timestamp indication in AValue to a unix timestamp indication (epoch time) Errors: None. See also: UnixTimeStampToMac (521), DateTimeToMac (453), MacToDateTime (485)
9.4.72
MacToDateTime
Synopsis: Convert a Mac timestamp to a TDateTime timestamp Declaration: function MacToDateTime(const AValue: Int64) : TDateTime Visibility: default Description: MacToDateTime converts the Mac timestamp indication in AValue to a valid TDateTime indication. Errors: None. See also: UnixTimeStampToMac (521), DateTimeToMac (453), MacTimeStampToUnix (485)
9.4.73
MilliSecondOf
Synopsis: Extract the millisecond part from a DateTime value. Declaration: function MilliSecondOf(const AValue: TDateTime) : Word Visibility: default Description: MillisecondOf returns the second of the minute part of the AValue date/time indication. It is a number between 0 and 999. For an example, see YearOf (534) See also: YearOf (534), WeekOf (522), MonthOf (493), DayOf (454), HourOf (469), MinuteOf (489), MilliSecondOf (485)
9.4.74
MilliSecondOfTheDay
Synopsis: Calculate the number of milliseconds elapsed since the start of the day Declaration: function MilliSecondOfTheDay(const AValue: TDateTime) : LongWord Visibility: default Description: MilliSecondOfTheDay returns the number of milliseconds that have passed since the start of the Day (00:00:00.000) till the moment indicated by AValue. This is a zero-based number, i.e. 00:00:00.000 will return 0. For an example, see the HourOfTheDay (470) function. See also: MilliSecondOfTheYear (487), MilliSecondOfTheMonth (486), MilliSecondOfTheWeek (487), MilliSecondOfTheHour (486), MilliSecondOfTheMinute (486), MilliSecondOfTheSecond (486), HourOfTheDay (470), MinuteOfTheDay (489), SecondOfTheDay (506) 485
9.4.75
MilliSecondOfTheHour
Synopsis: Calculate the number of milliseconds elapsed since the start of the hour Declaration: function MilliSecondOfTheHour(const AValue: TDateTime) : LongWord Visibility: default Description: MilliSecondOfTheHour returns the number of milliseconds that have passed since the start of the Hour (HH:00:00.000) till the moment indicated by AValue. This is a zero-based number, i.e. HH:00:00.000 will return 0. For an example, see the MinuteOfTheHour (490) function. See also: MilliSecondOfTheYear (487), MilliSecondOfTheMonth (486), MilliSecondOfTheWeek (487), MilliSecondOfTheDay (485), MilliSecondOfTheMinute (486), MilliSecondOfTheSecond (486), MinuteOfTheHour (490), SecondOfTheHour (507)
9.4.76
MilliSecondOfTheMinute
Synopsis: Calculate the number of milliseconds elapsed since the start of the minute Declaration: function MilliSecondOfTheMinute(const AValue: TDateTime) : LongWord Visibility: default Description: MilliSecondOfTheMinute returns the number of milliseconds that have passed since the start of the Minute (HH:MM:00.000) till the moment indicated by AValue. This is a zero-based number, i.e. HH:MM:00.000 will return 0. For an example, see the SecondOfTheMinute (507) function. See also: MilliSecondOfTheYear (487), MilliSecondOfTheMonth (486), MilliSecondOfTheWeek (487), MilliSecondOfTheDay (485), MilliSecondOfTheHour (486), MilliSecondOfTheMinute (486), MilliSecondOfTheSecond (486), SecondOfTheMinute (507)
9.4.77
MilliSecondOfTheMonth
Synopsis: Calculate number of milliseconds elapsed since the start of the month. Declaration: function MilliSecondOfTheMonth(const AValue: TDateTime) : LongWord Visibility: default Description: MilliSecondOfTheMonth returns the number of milliseconds that have passed since the start of the month (00:00:00.000) till the moment indicated by AValue. This is a zero-based number, i.e. 00:00:00.000 on the rst of the month will return 0. For an example, see the WeekOfTheMonth (522) function. See also: WeekOfTheMonth (522), DayOfTheMonth (454), HourOfTheMonth (470), MinuteOfTheMonth (490), SecondOfTheMonth (508), MilliSecondOfTheMonth (486)
9.4.78
MilliSecondOfTheSecond
Synopsis: Calculate the number of milliseconds elapsed since the start of the second Declaration: function MilliSecondOfTheSecond(const AValue: TDateTime) : Word Visibility: default 486
Description: MilliSecondOfTheSecond returns the number of milliseconds that have passed since the start of the second (HH:MM:SS.000) till the moment indicated by AValue. This is a zero-based number, i.e. HH:MM:SS.000 will return 0. See also: MilliSecondOfTheYear (487), MilliSecondOfTheMonth (486), MilliSecondOfTheWeek (487), MilliSecondOfTheDay (485), MilliSecondOfTheHour (486), MilliSecondOfTheMinute (486), SecondOfTheMinute (507) Listing: ./datutex/ex46.pp
Program Example46 ; { T h i s program demonstrates t h e MilliSecondOfTheSecond f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Var N : TDateTime ; Begin N: =Now; W r i t e l n ( M i l l i S e c o n d o f t h e Second : MilliSecondOfTheSecond (N ) ) ; End .
9.4.79
MilliSecondOfTheWeek
Synopsis: Calculate the number of milliseconds elapsed since the start of the week Declaration: function MilliSecondOfTheWeek(const AValue: TDateTime) : LongWord Visibility: default Description: MilliSecondOfTheWeek returns the number of milliseconds that have passed since the start of the Week (00:00:00.000) till the moment indicated by AValue. This is a zero-based number, i.e. 00:00:00.000 on the rst of the Week will return 0. For an example, see the DayOfTheWeek (455) function. See also: MilliSecondOfTheYear (487), MilliSecondOfTheMonth (486), MilliSecondOfTheDay (485), MilliSecondOfTheHour (486), MilliSecondOfTheMinute (486), MilliSecondOfTheSecond (486), DayOfTheWeek (455), HourOfTheWeek (470), MinuteOfTheWeek (491), SecondOfTheWeek (508)
9.4.80
MilliSecondOfTheYear
Synopsis: Calculate the number of milliseconds elapsed since the start of the year. Declaration: function MilliSecondOfTheYear(const AValue: TDateTime) : Int64 Visibility: default Description: MilliSecondOfTheYear returns the number of milliseconds that have passed since the start of the year (January 1, 00:00:00.000) till the moment indicated by AValue. This is a zero-based number, i.e. January 1 00:00:00.000 will return 0. For an example, see the WeekOfTheYear (523) function. See also: WeekOfTheYear (523), DayOfTheYear (455), HourOfTheYear (471), MinuteOfTheYear (491), SecondOfTheYear (508), MilliSecondOfTheYear (487) 487
9.4.81
MilliSecondsBetween
Synopsis: Calculate the number of whole milliseconds between two DateTime values. Declaration: function MilliSecondsBetween(const ANow: TDateTime; const AThen: TDateTime) : Int64 Visibility: default Description: MillisSecondsBetween returns the number of whole milliseconds between ANow and AThen. This means a fractional part of a millisecond is dropped. See also: YearsBetween (535), MonthsBetween (494), WeeksBetween (523), DaysBetween (456), HoursBetween (471), MinutesBetween (491), SecondsBetween (508) Listing: ./datutex/ex62.pp
Program Example62 ; { T h i s program demonstrates t h e MilliSecondsBetween f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Procedure Test (ANow, AThen : TDateTime ) ; begin Write ( Number o f m i l l i s e c o n d s between ) ; Write ( TimeToStr ( AThen ) , and , TimeToStr (ANow ) ) ; W r i t e l n ( : , MilliSecondsBetween (ANow, AThen ) ) ; end ; Var D1 , D2 : TDateTime ; Begin D1: =Now; D2: =D1(0.9 OneMilliSecond ) ; Test ( D1 , D2 ) ; D2: =D1(1.0 OneMilliSecond ) ; Test ( D1 , D2 ) ; D2: =D1(1.1 OneMilliSecond ) ; Test ( D1 , D2 ) ; D2: =D1(2.5 OneMilliSecond ) ; Test ( D1 , D2 ) ; End .
9.4.82
MilliSecondSpan
Synopsis: Calculate the approximate number of milliseconds between two DateTime values. Declaration: function MilliSecondSpan(const ANow: TDateTime;const AThen: TDateTime) : Double Visibility: default Description: MilliSecondSpan returns the number of milliseconds between ANow and AThen. Since millisecond is the smallest fraction of a TDateTime indication, the returned number will always be an integer value. 488
See also: YearSpan (536), MonthSpan (495), WeekSpan (525), DaySpan (459), HourSpan (472), MinuteSpan (492), SecondSpan (509), MilliSecondsBetween (488) Listing: ./datutex/ex70.pp
Program Example70 ; { T h i s program demonstrates t h e MilliSecondSpan f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Procedure Test (ANow, AThen : TDateTime ) ; begin Write ( Number o f m i l l i s e c o n d s between ) ; Write ( TimeToStr ( AThen ) , and , TimeToStr (ANow ) ) ; W r i t e l n ( : , MilliSecondSpan (ANow, AThen ) ) ; end ; Var D1 , D2 : TDateTime ; Begin D1: =Now; D2: =D1(0.9 OneMilliSecond ) ; Test ( D1 , D2 ) ; D2: =D1(1.0 OneMilliSecond ) ; Test ( D1 , D2 ) ; D2: =D1(1.1 OneMilliSecond ) ; Test ( D1 , D2 ) ; D2: =D1(2.5 OneMilliSecond ) ; Test ( D1 , D2 ) ; End .
9.4.83
MinuteOf
Synopsis: Extract the minute part from a DateTime value. Declaration: function MinuteOf(const AValue: TDateTime) : Word Visibility: default Description: MinuteOf returns the minute of the hour part of the AValue date/time indication. It is a number between 0 and 59. For an example, see YearOf (534) See also: YearOf (534), WeekOf (522), MonthOf (493), DayOf (454), HourOf (469), SecondOf (506), MilliSecondOf (485)
9.4.84
MinuteOfTheDay
Synopsis: Calculate the number of minutes elapsed since the start of the day Declaration: function MinuteOfTheDay(const AValue: TDateTime) : Word Visibility: default
489
Description: MinuteOfTheDay returns the number of minutes that have passed since the start of the Day (00:00:00) till the moment indicated by AValue. This is a zero-based number, i.e. 00:00:59 will return 0. For an example, see the HourOfTheDay (470) function. See also: MinuteOfTheYear (491), MinuteOfTheMonth (490), MinuteOfTheWeek (491), MinuteOfTheHour (490), HourOfTheDay (470), SecondOfTheDay (506), MilliSecondOfTheDay (485)
9.4.85
MinuteOfTheHour
Synopsis: Calculate the number of minutes elapsed since the start of the hour Declaration: function MinuteOfTheHour(const AValue: TDateTime) : Word Visibility: default Description: MinuteOfTheHour returns the number of minutes that have passed since the start of the Hour (HH:00:00) till the moment indicated by AValue. This is a zero-based number, i.e. HH:00:59 will return 0. See also: MinuteOfTheYear (491), MinuteOfTheMonth (490), MinuteOfTheWeek (491), MinuteOfTheDay (489), SecondOfTheHour (507), MilliSecondOfTheHour (486) Listing: ./datutex/ex44.pp
Program Example44 ; { T h i s program demonstrates t h e MinuteOfTheHour f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Var N : TDateTime ; Begin N: =Now; W r i t e l n ( Minute o f t h e Hour : , MinuteOfTheHour (N ) ) ; W r i t e l n ( Second o f t h e Hour : , SecondOfTheHour (N ) ) ; W r i t e l n ( M i l l i S e c o n d o f t h e Hour : , MilliSecondOfTheHour (N ) ) ; End .
9.4.86
MinuteOfTheMonth
Synopsis: Calculate number of minutes elapsed since the start of the month. Declaration: function MinuteOfTheMonth(const AValue: TDateTime) : Word Visibility: default Description: MinuteOfTheMonth returns the number of minutes that have passed since the start of the Month (00:00:00) till the moment indicated by AValue. This is a zero-based number, i.e. 00:00:59 on the rst day of the month will return 0. For an example, see the WeekOfTheMonth (522) function. See also: WeekOfTheMonth (522), DayOfTheMonth (454), HourOfTheMonth (470), MinuteOfTheMonth (490), SecondOfTheMonth (508), MilliSecondOfTheMonth (486) 490
9.4.87
MinuteOfTheWeek
Synopsis: Calculate the number of minutes elapsed since the start of the week Declaration: function MinuteOfTheWeek(const AValue: TDateTime) : Word Visibility: default Description: MinuteOfTheWeek returns the number of minutes that have passed since the start of the week (00:00:00) till the moment indicated by AValue. This is a zero-based number, i.e. 00:00:59 on the rst day of the week will return 0. For an example, see the DayOfTheWeek (455) function. See also: MinuteOfTheYear (491), MinuteOfTheMonth (490), MinuteOfTheDay (489), MinuteOfTheHour (490), DayOfTheWeek (455), HourOfTheWeek (470), SecondOfTheWeek (508), MilliSecondOfTheWeek (487)
9.4.88
MinuteOfTheYear
Synopsis: Calculate the number of minutes elapsed since the start of the year Declaration: function MinuteOfTheYear(const AValue: TDateTime) : LongWord Visibility: default Description: MinuteOfTheYear returns the number of minutes that have passed since the start of the year (January 1, 00:00:00) till the moment indicated by AValue. This is a zero-based number, i.e. January 1 00:00:59 will return 0. For an example, see the WeekOfTheYear (523) function. See also: WeekOfTheYear (523), DayOfTheYear (455), HourOfTheYear (471), MinuteOfTheYear (491), SecondOfTheYear (508), MilliSecondOfTheYear (487)
9.4.89
MinutesBetween
Synopsis: Calculate the number of whole minutes between two DateTime values. Declaration: function MinutesBetween(const ANow: TDateTime;const AThen: TDateTime) : Int64 Visibility: default Description: MinutesBetween returns the number of whole minutes between ANow and AThen. This means the fractional part of a minute (seconds, milliseconds etc.) is dropped. See also: YearsBetween (535), MonthsBetween (494), WeeksBetween (523), DaysBetween (456), HoursBetween (471), SecondsBetween (508), MilliSecondsBetween (488) Listing: ./datutex/ex60.pp
Program Example60 ; { T h i s program demonstrates t h e MinutesBetween f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Procedure Test (ANow, AThen : TDateTime ) ;
491
begin Write ( Number o f minutes between ) ; Write ( TimeToStr ( AThen ) , and , TimeToStr (ANow ) ) ; W r i t e l n ( : , MinutesBetween (ANow, AThen ) ) ; end ; Var D1 , D2 : TDateTime ; Begin D1: =Now; D2: =D1(59OneSecond ) ; Test ( D1 , D2 ) ; D2: =D1(61OneSecond ) ; Test ( D1 , D2 ) ; D2: =D1(122OneSecond ) ; Test ( D1 , D2 ) ; D2: =D1(306OneSecond ) ; Test ( D1 , D2 ) ; D2: =D1(5.4 OneMinute ) ; Test ( D1 , D2 ) ; D2: =D1(2.5 OneMinute ) ; Test ( D1 , D2 ) ; End .
9.4.90
MinuteSpan
Synopsis: Calculate the approximate number of minutes between two DateTime values. Declaration: function MinuteSpan(const ANow: TDateTime;const AThen: TDateTime) : Double Visibility: default Description: MinuteSpan returns the number of minutes between ANow and AThen, including any fractional parts of a minute. See also: YearSpan (536), MonthSpan (495), WeekSpan (525), DaySpan (459), HourSpan (472), SecondSpan (509), MilliSecondSpan (488), MinutesBetween (491) Listing: ./datutex/ex68.pp
Program Example68 ; { T h i s program demonstrates t h e MinuteSpan f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Procedure Test (ANow, AThen : TDateTime ) ; begin Write ( Number o f minutes between ) ; Write ( TimeToStr ( AThen ) , and , TimeToStr (ANow ) ) ; W r i t e l n ( : , MinuteSpan (ANow, AThen ) ) ; end ; Var
492
D1 , D2 : TDateTime ; Begin D1: =Now; D2: =D1(59OneSecond ) ; Test ( D1 , D2 ) ; D2: =D1(61OneSecond ) ; Test ( D1 , D2 ) ; D2: =D1(122OneSecond ) ; Test ( D1 , D2 ) ; D2: =D1(306OneSecond ) ; Test ( D1 , D2 ) ; D2: =D1(5.4 OneMinute ) ; Test ( D1 , D2 ) ; D2: =D1(2.5 OneMinute ) ; Test ( D1 , D2 ) ; End .
9.4.91
ModiedJulianDateToDateTime
Synopsis: Convert a modied Julian date representation to a TDateTime value. Declaration: function ModifiedJulianDateToDateTime(const AValue: Double) : TDateTime Visibility: default Description: Not yet implemented. Errors: Currently, trying to use this function will raise an exception. See also: DateTimeToJulianDate (453), JulianDateToDateTime (484), TryJulianDateToDateTime (520), DateTimeToModiedJulianDate (454), TryModiedJulianDateToDateTime (520)
9.4.92
MonthOf
Synopsis: Extract the month from a given date. Declaration: function MonthOf(const AValue: TDateTime) : Word Visibility: default Description: MonthOf returns the month part of the AValue date/time indication. It is a number between 1 and 12. For an example, see YearOf (534) See also: YearOf (534), DayOf (454), WeekOf (522), HourOf (469), MinuteOf (489), SecondOf (506), MilliSecondOf (485)
9.4.93
MonthOfTheYear
Synopsis: Extract the month of a DateTime indication. Declaration: function MonthOfTheYear(const AValue: TDateTime) : Word Visibility: default
493
Description: MonthOfTheYear extracts the month part of Avalue and returns it. It is an alias for MonthOf (493), and is provided for completeness only, corresponding to the other PartOfTheYear functions. For an example, see the WeekOfTheYear (523) function. See also: MonthOf (493), WeekOfTheYear (523), DayOfTheYear (455), HourOfTheYear (471), MinuteOfTheYear (491), SecondOfTheYear (508), MilliSecondOfTheYear (487)
9.4.94
MonthsBetween
Synopsis: Calculate the number of whole months between two DateTime values Declaration: function MonthsBetween(const ANow: TDateTime;const AThen: TDateTime) : Integer Visibility: default Description: MonthsBetween returns the number of whole months between ANow and AThen. This number is an approximation, based on an average number of days of 30.4375 per month (average over 4 years). This means the fractional part of a month is dropped. See also: YearsBetween (535), WeeksBetween (523), DaysBetween (456), HoursBetween (471), MinutesBetween (491), SecondsBetween (508), MilliSecondsBetween (488) Listing: ./datutex/ex56.pp
Program Example56 ; { T h i s program demonstrates t h e MonthsBetween f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Procedure Test (ANow, AThen : TDateTime ) ; begin Write ( Number o f months between ) ; Write ( DateToStr ( AThen ) , and , DateToStr (ANow ) ) ; W r i t e l n ( : , MonthsBetween (ANow, AThen ) ) ; end ; Var D1 , D2 : TDateTime ; Begin D1: = Today ; D2: = Today 364; Test ( D1 , D2 ) ; D2: = Today 365; Test ( D1 , D2 ) ; D2: = Today 366; Test ( D1 , D2 ) ; D2: = Today 390; Test ( D1 , D2 ) ; D2: = Today 368; Test ( D1 , D2 ) ; D2: = Today 1000; Test ( D1 , D2 ) ; End .
494
9.4.95
MonthSpan
Synopsis: Calculate the approximate number of months between two DateTime values. Declaration: function MonthSpan(const ANow: TDateTime;const AThen: TDateTime) : Double Visibility: default Description: MonthSpan returns the number of month between ANow and AThen, including any fractional parts of a month. This number is an approximation, based on an average number of days of 30.4375 per month (average over 4 years). See also: YearSpan (536), WeekSpan (525), DaySpan (459), HourSpan (472), MinuteSpan (492), SecondSpan (509), MilliSecondSpan (488), MonthsBetween (494) Listing: ./datutex/ex64.pp
Program Example64 ; { T h i s program demonstrates t h e MonthSpan f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Procedure Test (ANow, AThen : TDateTime ) ; begin Write ( Number o f months between ) ; Write ( DateToStr ( AThen ) , and , DateToStr (ANow ) ) ; W r i t e l n ( : , MonthSpan (ANow, AThen ) ) ; end ; Var D1 , D2 : TDateTime ; Begin D1: = Today ; D2: = Today 364; Test ( D1 , D2 ) ; D2: = Today 365; Test ( D1 , D2 ) ; D2: = Today 366; Test ( D1 , D2 ) ; D2: = Today 390; Test ( D1 , D2 ) ; D2: = Today 368; Test ( D1 , D2 ) ; D2: = Today 1000; Test ( D1 , D2 ) ; End .
9.4.96
NthDayOfWeek
Synopsis: Calculate which occurrence of weekday in the month a given day represents Declaration: function NthDayOfWeek(const AValue: TDateTime) : Word Visibility: default 495
Description: NthDayOfWeek returns the occurence of the weekday of AValue in the month. This is the N-th time that this weekday occurs in the month (e.g. the third saturday of the month). See also: EncodeDateMonthWeek (463), #rtl.sysutils.DayOfWeek (1497), DecodeDayOfWeekInMonth (462), EncodeDayOfWeekInMonth (464), TryEncodeDayOfWeekInMonth (519) Listing: ./datutex/ex104.pp
Program Example104 ; { T h i s program demonstrates t h e NthDayOfWeek f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Begin Write ( Today i s t h e , NthDayOfWeek ( Today ) , t h ) ; W r i t e l n ( formatdateTime ( dddd , Today ) , o f t h e month . ) ; End .
9.4.97
PreviousDayOfWeek
Synopsis: Given a day of the week, return the previous day of the week. Declaration: function PreviousDayOfWeek(DayOfWeek: Word) : Word Visibility: default Description: PreviousDayOfWeek returns the previous day of the week. If the current day is the rst day of the week (1) then the last day will be returned (7). Remark: Note that the days of the week are in ISO notation, i.e. 1-based. See also: Yesterday (536) Listing: ./datutex/ex22.pp
Program Example22 ; { T h i s program demonstrates t h e PreviousDayOfWeek f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Var D : Word ; Begin For D: = 1 to 7 do W r i t e l n ( P r e v i o u s day o f ,D, i s : End .
, PreviousDayOfWeek (D ) ) ;
9.4.98
RecodeDate
Synopsis: Replace date part of a TDateTime value with another date. Declaration: function RecodeDate(const AValue: TDateTime;const AYear: Word; const AMonth: Word;const ADay: Word) : TDateTime
496
Visibility: default Description: RecodeDate replaces the date part of the timestamp AValue with the date specied in AYear, AMonth, ADay. All other parts (the time part) of the date/time stamp are left untouched. Errors: If one of the AYear, AMonth, ADay values is not within a valid range then an EConvertError exception is raised. See also: RecodeYear (503), RecodeMonth (501), RecodeDay (498), RecodeHour (499), RecodeMinute (500), RecodeSecond (501), RecodeDate (496), RecodeTime (502), RecodeDateTime (497) Listing: ./datutex/ex94.pp
Program Example94 ; { T h i s program demonstrates t h e RecodeDate f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Const Fmt = dddd dd mmmm yyyy hh : nn : ss ; Var S : AnsiString ; Begin S: = FormatDateTime ( Fmt , RecodeDate (Now, 2 0 0 1 , 1 , 1 ) ) ; W r i t e l n ( T h i s moment on t h e f i r s t o f t h e m i l l e n i u m : End .
,S ) ;
9.4.99
RecodeDateTime
Synopsis: Replace selected parts of a TDateTime value with other values Declaration: function RecodeDateTime(const AValue: TDateTime;const AYear: Word; const AMonth: Word;const ADay: Word; const AHour: Word;const AMinute: Word; const ASecond: Word;const AMilliSecond: Word) : TDateTime Visibility: default Description: RecodeDateTime replaces selected parts of the timestamp AValue with the date/time values specied in AYear, AMonth, ADay, AHour, AMinute, ASecond and AMilliSecond. If any of these values equals the pre-dened constant RecodeLeaveFieldAsIs (449), then the corresponding part of the date/time stamp is left untouched. Errors: If one of the values AYear, AMonth, ADay, AHour, AMinute, ASecondAMilliSecond is not within a valid range (RecodeLeaveFieldAsIs excepted) then an EConvertError exception is raised. See also: RecodeYear (503), RecodeMonth (501), RecodeDay (498), RecodeHour (499), RecodeMinute (500), RecodeSecond (501), RecodeMilliSecond (499), RecodeDate (496), RecodeTime (502), TryRecodeDateTime (520) Listing: ./datutex/ex96.pp
497
Program Example96 ; { T h i s program demonstrates t h e RecodeDateTime f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Const Fmt = dddd dd mmmm yyyy hh : nn : ss ; Var S : AnsiString ; D : TDateTime ; Begin D: =Now; D: = RecodeDateTime (D, 2 0 0 0 , 2 , RecodeLeaveFieldAsIs , 0 , 0 , 0 , 0 ) ; S: = FormatDateTime ( Fmt ,D ) ; W r i t e l n ( T h i s moment i n f e b r u a r i 2 0 0 0 : ,S ) ; End .
9.4.100
RecodeDay
Synopsis: Replace day part of a TDateTime value with another day. Declaration: function RecodeDay(const AValue: TDateTime;const ADay: Word) : TDateTime Visibility: default Description: RecodeDay replaces the Day part of the timestamp AValue with ADay. All other parts of the date/time stamp are left untouched. Errors: If the ADay value is not within a valid range (1 till the number of days in the month) then an EConvertError exception is raised. See also: RecodeYear (503), RecodeMonth (501), RecodeHour (499), RecodeMinute (500), RecodeSecond (501), RecodeMilliSecond (499), RecodeDate (496), RecodeTime (502), RecodeDateTime (497) Listing: ./datutex/ex89.pp
Program Example89 ; { T h i s program demonstrates t h e RecodeDay f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Const Fmt = dddd dd mmmm yyyy hh : nn : ss ; Var S : AnsiString ; Begin S: = FormatDateTime ( Fmt , RecodeDay (Now, 1 ) ) ; W r i t e l n ( T h i s moment on t h e f i r s t o f t h e month : End .
,S ) ;
498
9.4.101
RecodeHour
Synopsis: Replace hours part of a TDateTime value with another hour. Declaration: function RecodeHour(const AValue: TDateTime;const AHour: Word) : TDateTime Visibility: default Description: RecodeHour replaces the Hour part of the timestamp AValue with AHour. All other parts of the date/time stamp are left untouched. Errors: If the AHour value is not within a valid range (0..23) then an EConvertError exception is raised. See also: RecodeYear (503), RecodeMonth (501), RecodeDay (498), RecodeMinute (500), RecodeSecond (501), RecodeMilliSecond (499), RecodeDate (496), RecodeTime (502), RecodeDateTime (497) Listing: ./datutex/ex90.pp
Program Example90 ; { T h i s program demonstrates t h e RecodeHour f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Const Fmt = dddd dd mmmm yyyy hh : nn : ss ; Var S : AnsiString ; Begin S: = FormatDateTime ( Fmt , RecodeHour (Now, 0 ) ) ; W r i t e l n ( Today , i n t h e f i r s t hour : ,S ) ; End .
9.4.102
RecodeMilliSecond
Synopsis: Replace milliseconds part of a TDateTime value with another millisecond. Declaration: function RecodeMilliSecond(const AValue: TDateTime; const AMilliSecond: Word) : TDateTime Visibility: default Description: RecodeMilliSecond replaces the millisecond part of the timestamp AValue with AMilliSecond. All other parts of the date/time stamp are left untouched. Errors: If the AMilliSecond value is not within a valid range (0..999) then an EConvertError exception is raised. See also: RecodeYear (503), RecodeMonth (501), RecodeDay (498), RecodeHour (499), RecodeMinute (500), RecodeSecond (501), RecodeDate (496), RecodeTime (502), RecodeDateTime (497) Listing: ./datutex/ex93.pp
499
Program Example93 ; { T h i s program demonstrates t h e RecodeMilliSecond f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Const Fmt = dddd dd mmmm yyyy hh : nn : ss . zzz ; Var S : AnsiString ; Begin S: = FormatDateTime ( Fmt , RecodeMilliSecond (Now, 0 ) ) ; W r i t e l n ( T h i s moment , m i l l i s e c o n d s s t r i p p e d : ,S ) ; End .
9.4.103
RecodeMinute
Synopsis: Replace minutse part of a TDateTime value with another minute. Declaration: function RecodeMinute(const AValue: TDateTime;const AMinute: Word) : TDateTime Visibility: default Description: RecodeMinute replaces the Minute part of the timestamp AValue with AMinute. All other parts of the date/time stamp are left untouched. Errors: If the AMinute value is not within a valid range (0..59) then an EConvertError exception is raised. See also: RecodeYear (503), RecodeMonth (501), RecodeDay (498), RecodeHour (499), RecodeSecond (501), RecodeMilliSecond (499), RecodeDate (496), RecodeTime (502), RecodeDateTime (497) Listing: ./datutex/ex91.pp
Program Example91 ; { T h i s program demonstrates t h e RecodeMinute f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Const Fmt = dddd dd mmmm yyyy hh : nn : ss ; Var S : AnsiString ; Begin S: = FormatDateTime ( Fmt , RecodeMinute (Now, 0 ) ) ; W r i t e l n ( T h i s moment i n t h e f i r s t minute o f t h e hour : ,S ) ; End .
500
9.4.104
RecodeMonth
Synopsis: Replace month part of a TDateTime value with another month. Declaration: function RecodeMonth(const AValue: TDateTime;const AMonth: Word) : TDateTime Visibility: default Description: RecodeMonth replaces the Month part of the timestamp AValue with AMonth. All other parts of the date/time stamp are left untouched. Errors: If the AMonth value is not within a valid range (1..12) then an EConvertError exception is raised. See also: RecodeYear (503), RecodeDay (498), RecodeHour (499), RecodeMinute (500), RecodeSecond (501), RecodeMilliSecond (499), RecodeDate (496), RecodeTime (502), RecodeDateTime (497) Listing: ./datutex/ex88.pp
Program Example88 ; { T h i s program demonstrates t h e RecodeMonth f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Const Fmt = dddd dd mmmm yyyy hh : nn : ss ; Var S : AnsiString ; Begin S: = FormatDateTime ( Fmt , RecodeMonth (Now, 5 ) ) ; W r i t e l n ( T h i s moment i n May : ,S ) ; End .
9.4.105
RecodeSecond
Synopsis: Replace seconds part of a TDateTime value with another second. Declaration: function RecodeSecond(const AValue: TDateTime;const ASecond: Word) : TDateTime Visibility: default Description: RecodeSecond replaces the Second part of the timestamp AValue with ASecond. All other parts of the date/time stamp are left untouched. Errors: If the ASecond value is not within a valid range (0..59) then an EConvertError exception is raised. See also: RecodeYear (503), RecodeMonth (501), RecodeDay (498), RecodeHour (499), RecodeMinute (500), RecodeMilliSecond (499), RecodeDate (496), RecodeTime (502), RecodeDateTime (497) Listing: ./datutex/ex92.pp
501
Program Example92 ; { T h i s program demonstrates t h e RecodeSecond f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Const Fmt = dddd dd mmmm yyyy hh : nn : ss ; Var S : AnsiString ; Begin S: = FormatDateTime ( Fmt , RecodeSecond (Now, 0 ) ) ; W r i t e l n ( T h i s moment , seconds s t r i p p e d : ,S ) ; End .
9.4.106
RecodeTime
Synopsis: Replace time part of a TDateTime value with another time. Declaration: function RecodeTime(const AValue: TDateTime;const AHour: Word; const AMinute: Word;const ASecond: Word; const AMilliSecond: Word) : TDateTime Visibility: default Description: RecodeTime replaces the time part of the timestamp AValue with the date specied in AHour, AMinute, ASecond and AMilliSecond. All other parts (the date part) of the date/time stamp are left untouched. Errors: If one of the values AHour, AMinute, ASecondAMilliSecond is not within a valid range then an EConvertError exception is raised. See also: RecodeYear (503), RecodeMonth (501), RecodeDay (498), RecodeHour (499), RecodeMinute (500), RecodeSecond (501), RecodeMilliSecond (499), RecodeDate (496), RecodeDateTime (497) Listing: ./datutex/ex95.pp
Program Example95 ; { T h i s program demonstrates t h e RecodeTime f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Const Fmt = dddd dd mmmm yyyy hh : nn : ss ; Var S : AnsiString ; Begin S: = FormatDateTime ( Fmt , RecodeTime (Now, 8 , 0 , 0 , 0 ) ) ; W r i t e l n ( Today , 8 AM : ,S ) ; End .
502
9.4.107
RecodeYear
Synopsis: Replace year part of a TDateTime value with another year. Declaration: function RecodeYear(const AValue: TDateTime;const AYear: Word) : TDateTime Visibility: default Description: RecodeYear replaces the year part of the timestamp AValue with AYear. All other parts of the date/time stamp are left untouched. Errors: If the AYear value is not within a valid range (1..9999) then an EConvertError exception is raised. See also: RecodeMonth (501), RecodeDay (498), RecodeHour (499), RecodeMinute (500), RecodeSecond (501), RecodeMilliSecond (499), RecodeDate (496), RecodeTime (502), RecodeDateTime (497) Listing: ./datutex/ex87.pp
Program Example87 ; { T h i s program demonstrates t h e RecodeYear f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Const Fmt = dddd dd mmmm yyyy hh : nn : ss ; Var S : AnsiString ; Begin S: = FormatDateTime ( Fmt , RecodeYear (Now, 1 9 9 9 ) ) ; W r i t e l n ( T h i s moment i n 1 9 9 9 : ,S ) ; End .
9.4.108
SameDate
Synopsis: Check whether two TDateTime values have the same date part. Declaration: function SameDate(const A: TDateTime;const B: TDateTime) : Boolean Visibility: default Description: SameDate compares the date parts of two timestamps A and B and returns True if they are equal, False if they are not. The function simply checks whether CompareDate (449) returns zero. See also: CompareDateTime (450), CompareDate (449), CompareTime (451), SameDateTime (504), SameTime (505) Listing: ./datutex/ex102.pp
Program Example102 ; { T h i s program demonstrates t h e SameDate f u n c t i o n }
503
Uses S y s U t i l s , D a t e U t i l s ; Const Fmt = dddd dd mmmm yyyy hh : nn : ss . zzz ; Procedure Test ( D1 , D2 : TDateTime ) ; begin Write ( FormatDateTime ( Fmt , D1 ) , i s t h e same date as ) ; W r i t e l n ( FormatDateTime ( Fmt , D2 ) , : , SameDate ( D1 , D2 ) ) ; end ; Var D, N : TDateTime ; Begin D: = Today ; N: =Now; Test (D,D ) ; Test (N,N ) ; Test (N+1 ,N ) ; Test (N1,N ) ; Test (N+OneSecond ,N ) ; Test (NOneSecond ,N ) ; End .
9.4.109
SameDateTime
Synopsis: Check whether two TDateTime values have the same date and time parts. Declaration: function SameDateTime(const A: TDateTime;const B: TDateTime) : Boolean Visibility: default Description: SameDateTime compares the date/time parts of two timestamps A and B and returns True if they are equal, False if they are not. The function simply checks whether CompareDateTime (450) returns zero. See also: CompareDateTime (450), CompareDate (449), CompareTime (451), SameDate (503), SameTime (505) Listing: ./datutex/ex101.pp
Program Example101 ; { T h i s program demonstrates t h e SameDateTime f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Const Fmt = dddd dd mmmm yyyy hh : nn : ss . zzz ; Procedure Test ( D1 , D2 : TDateTime ) ; begin Write ( FormatDateTime ( Fmt , D1 ) , i s t h e same d a t e t i m e as ) ; W r i t e l n ( FormatDateTime ( Fmt , D2 ) , : , SameDateTime ( D1 , D2 ) ) ;
504
end ; Var D, N : TDateTime ; Begin D: = Today ; N: =Now; Test (D,D ) ; Test (N,N ) ; Test (N+1 ,N ) ; Test (N1,N ) ; Test (N+OneSecond ,N ) ; Test (NOneSecond ,N ) ; End .
9.4.110
SameTime
Synopsis: Check whether two TDateTime values have the same time part. Declaration: function SameTime(const A: TDateTime;const B: TDateTime) : Boolean Visibility: default Description: SameTime compares the time parts of two timestamps A and B and returns True if they are equal, False if they are not. The function simply checks whether CompareTime (451) returns zero. See also: CompareDateTime (450), CompareDate (449), CompareTime (451), SameDateTime (504), SameDate (503) Listing: ./datutex/ex103.pp
Program Example102 ; { T h i s program demonstrates t h e SameTime f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Const Fmt = dddd dd mmmm yyyy hh : nn : ss . zzz ; Procedure Test ( D1 , D2 : TDateTime ) ; begin Write ( FormatDateTime ( Fmt , D1 ) , i s t h e same t i m e as ) ; W r i t e l n ( FormatDateTime ( Fmt , D2 ) , : , SameTime ( D1 , D2 ) ) ; end ; Var D, N : TDateTime ; Begin D: = Today ; N: =Now; Test (D,D ) ; Test (N,N ) ;
505
9.4.111
ScanDateTime
Synopsis: Scans a string for a DateTime pattern and returns the date/time Declaration: function ScanDateTime(const Pattern: string;const s: string; const fmt: TFormatSettings;startpos: Integer) : TDateTime; Overload function ScanDateTime(const Pattern: string;const s: string; startpos: Integer) : TDateTime; Overload Visibility: default Description: ScanDateTime scans string S for the date/time pattern Pattern, starting at position StartPos (default 1). Optionally, the format settings fmt can be specied. In effect, this function does the opposite of what FormatDateTime (1535) does. The Pattern variable must contain a valid date/time pattern: note that not all possible formatdatetime patterns can be recognized, e.g., hn cannot be detected properly. Errors: In case of an error, a EConvertError (1597) exception is raised. See also: FormatDateTime (1535)
9.4.112
SecondOf
Synopsis: Extract the second part from a DateTime value. Declaration: function SecondOf(const AValue: TDateTime) : Word Visibility: default Description: SecondOf returns the second of the minute part of the AValue date/time indication. It is a number between 0 and 59. For an example, see YearOf (534) See also: YearOf (534), WeekOf (522), MonthOf (493), DayOf (454), HourOf (469), MinuteOf (489), MilliSecondOf (485)
9.4.113
SecondOfTheDay
Synopsis: Calculate the number of seconds elapsed since the start of the day Declaration: function SecondOfTheDay(const AValue: TDateTime) : LongWord Visibility: default Description: SecondOfTheDay returns the number of seconds that have passed since the start of the Day (00:00:00) till the moment indicated by AValue. This is a zero-based number, i.e. 00:00:00.999 return 0. For an example, see the HourOfTheDay (470) function. 506
See also: SecondOfTheYear (508), SecondOfTheMonth (508), SecondOfTheWeek (508), SecondOfTheHour (507), SecondOfTheMinute (507), HourOfTheDay (470), MinuteOfTheDay (489), MilliSecondOfTheDay (485)
9.4.114
SecondOfTheHour
Synopsis: Calculate the number of seconds elapsed since the start of the hour Declaration: function SecondOfTheHour(const AValue: TDateTime) : Word Visibility: default Description: SecondOfTheHour returns the number of seconds that have passed since the start of the Hour (HH:00:00) till the moment indicated by AValue. This is a zero-based number, i.e. HH:00:00.999 return 0. For an example, see the MinuteOfTheHour (490) function. See also: SecondOfTheYear (508), SecondOfTheMonth (508), SecondOfTheWeek (508), SecondOfTheDay (506), SecondOfTheMinute (507), MinuteOfTheHour (490), MilliSecondOfTheHour (486)
9.4.115
SecondOfTheMinute
Synopsis: Calculate the number of seconds elapsed since the start of the minute Declaration: function SecondOfTheMinute(const AValue: TDateTime) : Word Visibility: default Description: SecondOfTheMinute returns the number of seconds that have passed since the start of the minute (HH:MM:00) till the moment indicated by AValue. This is a zero-based number, i.e. HH:MM:00.999 return 0. See also: SecondOfTheYear (508), SecondOfTheMonth (508), SecondOfTheWeek (508), SecondOfTheDay (506), SecondOfTheHour (507), MilliSecondOfTheMinute (486) Listing: ./datutex/ex45.pp
Program Example45 ; { T h i s program demonstrates t h e SecondOfTheMinute f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Var N : TDateTime ; Begin N: =Now; W r i t e l n ( Second o f t h e Minute : , SecondOfTheMinute (N ) ) ; W r i t e l n ( M i l l i S e c o n d o f t h e Minute : , Mi lli Sec on dOf The Min ute (N ) ) ; End .
507
9.4.116
SecondOfTheMonth
Synopsis: Calculate number of seconds elapsed since the start of the month. Declaration: function SecondOfTheMonth(const AValue: TDateTime) : LongWord Visibility: default Description: SecondOfTheMonth returns the number of seconds that have passed since the start of the month (00:00:00) till the moment indicated by AValue. This is a zero-based number, i.e. 00:00:00.999 on the rst day of the month will return 0. For an example, see the WeekOfTheMonth (522) function. See also: WeekOfTheMonth (522), DayOfTheMonth (454), HourOfTheMonth (470), MinuteOfTheMonth (490), MilliSecondOfTheMonth (486)
9.4.117
SecondOfTheWeek
Synopsis: Calculate the number of seconds elapsed since the start of the week Declaration: function SecondOfTheWeek(const AValue: TDateTime) : LongWord Visibility: default Description: SecondOfTheWeek returns the number of seconds that have passed since the start of the week (00:00:00) till the moment indicated by AValue. This is a zero-based number, i.e. 00:00:00.999 on the rst day of the week will return 0. For an example, see the DayOfTheWeek (455) function. See also: SecondOfTheYear (508), SecondOfTheMonth (508), SecondOfTheDay (506), SecondOfTheHour (507), SecondOfTheMinute (507), DayOfTheWeek (455), HourOfTheWeek (470), MinuteOfTheWeek (491), MilliSecondOfTheWeek (487)
9.4.118
SecondOfTheYear
Synopsis: Calculate the number of seconds elapsed since the start of the year. Declaration: function SecondOfTheYear(const AValue: TDateTime) : LongWord Visibility: default Description: SecondOfTheYear returns the number of seconds that have passed since the start of the year (January 1, 00:00:00) till the moment indicated by AValue. This is a zero-based number, i.e. January 1 00:00:00.999 will return 0. For an example, see the WeekOfTheYear (523) function. See also: WeekOfTheYear (523), DayOfTheYear (455), HourOfTheYear (471), MinuteOfTheYear (491), SecondOfTheYear (508), MilliSecondOfTheYear (487)
9.4.119
SecondsBetween
Synopsis: Calculate the number of whole seconds between two DateTime values. Declaration: function SecondsBetween(const ANow: TDateTime;const AThen: TDateTime) : Int64 Visibility: default 508
Description: SecondsBetween returns the number of whole seconds between ANow and AThen. This means the fractional part of a second (milliseconds etc.) is dropped. See also: YearsBetween (535), MonthsBetween (494), WeeksBetween (523), DaysBetween (456), HoursBetween (471), MinutesBetween (491), MilliSecondsBetween (488) Listing: ./datutex/ex61.pp
Program Example61 ; { T h i s program demonstrates t h e SecondsBetween f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Procedure Test (ANow, AThen : TDateTime ) ; begin Write ( Number o f seconds between ) ; Write ( TimeToStr ( AThen ) , and , TimeToStr (ANow ) ) ; W r i t e l n ( : , SecondsBetween (ANow, AThen ) ) ; end ; Var D1 , D2 : TDateTime ; Begin D1: =Now; D2: =D1(999 OneMilliSecond ) ; Test ( D1 , D2 ) ; D2: =D1(1001 OneMilliSecond ) ; Test ( D1 , D2 ) ; D2: =D1(2001 OneMilliSecond ) ; Test ( D1 , D2 ) ; D2: =D1(5001 OneMilliSecond ) ; Test ( D1 , D2 ) ; D2: =D1(5.4OneSecond ) ; Test ( D1 , D2 ) ; D2: =D1(2.5OneSecond ) ; Test ( D1 , D2 ) ; End .
9.4.120
SecondSpan
Synopsis: Calculate the approximate number of seconds between two DateTime values. Declaration: function SecondSpan(const ANow: TDateTime;const AThen: TDateTime) : Double Visibility: default Description: SecondSpan returns the number of seconds between ANow and AThen, including any fractional parts of a second. See also: YearSpan (536), MonthSpan (495), WeekSpan (525), DaySpan (459), HourSpan (472), MinuteSpan (492), MilliSecondSpan (488), SecondsBetween (508) Listing: ./datutex/ex69.pp 509
Program Example69 ; { T h i s program demonstrates t h e SecondSpan f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Procedure Test (ANow, AThen : TDateTime ) ; begin Write ( Number o f seconds between ) ; Write ( TimeToStr ( AThen ) , and , TimeToStr (ANow ) ) ; W r i t e l n ( : , SecondSpan (ANow, AThen ) ) ; end ; Var D1 , D2 : TDateTime ; Begin D1: =Now; D2: =D1(999 OneMilliSecond ) ; Test ( D1 , D2 ) ; D2: =D1(1001 OneMilliSecond ) ; Test ( D1 , D2 ) ; D2: =D1(2001 OneMilliSecond ) ; Test ( D1 , D2 ) ; D2: =D1(5001 OneMilliSecond ) ; Test ( D1 , D2 ) ; D2: =D1(5.4OneSecond ) ; Test ( D1 , D2 ) ; D2: =D1(2.5OneSecond ) ; Test ( D1 , D2 ) ; End .
9.4.121
StartOfADay
Synopsis: Return the start of a day as a DateTime value, given a day indication Declaration: function StartOfADay(const AYear: Word;const AMonth: Word; const ADay: Word) : TDateTime; Overload function StartOfADay(const AYear: Word;const ADayOfYear: Word) : TDateTime; Overload Visibility: default Description: StartOfADay returns a TDateTime value with the date/time indication of the start (0:0:0.000) of the day given by AYear, AMonth, ADay. The day may also be indicated with a AYear, ADayOfYear pair. See also: StartOfTheDay (513), StartOfTheWeek (514), StartOfAWeek (511), StartOfAMonth (511), StartOfTheMonth (513), EndOfTheWeek (468), EndOfAWeek (466), EndOfTheYear (469), EndOfAYear (467), EndOfTheMonth (468), EndOfAMonth (465), EndOfTheDay (467), EndOfADay (465) Listing: ./datutex/ex38.pp
Program Example38 ;
510
{ T h i s program demonstrates t h e StartOfADay f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Const Fmt = " S t a r t o f t h e day : " dd mmmm yyyy hh : nn : ss ; Var Y ,M, D : Word ; Begin Y: = YearOf ( Today ) ; M: = MonthOf ( Today ) ; D: = DayOf ( Today ) ; W r i t e l n ( FormatDateTime ( Fmt , StartOfADay ( Y ,M,D ) ) ) ; DecodeDateDay ( Today , Y ,D ) ; W r i t e l n ( FormatDateTime ( Fmt , StartOfADay ( Y ,D ) ) ) ; End .
9.4.122
StartOfAMonth
Synopsis: Return rst date of month, given a year/month pair. Declaration: function StartOfAMonth(const AYear: Word;const AMonth: Word) : TDateTime Visibility: default Description: StartOfAMonth e returns a TDateTime value with the date of the rst day of the month indicated by the AYear, AMonth pair. See also: StartOfTheMonth (513), EndOfTheMonth (468), EndOfAMonth (465), EndOfTheYear (469), EndOfAYear (467), StartOfAWeek (511), StartOfTheWeek (514) Listing: ./datutex/ex30.pp
Program Example30 ; { T h i s program demonstrates t h e StartOfAMonth f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Const Fmt = " F i r s t day o f t h i s month : " dd mmmm yyyy ; Var Y ,M : Word ; Begin Y: = YearOf ( Today ) ; M: = MonthOf ( Today ) ; W r i t e l n ( FormatDateTime ( Fmt , StartOfAMonth ( Y ,M ) ) ) ; End .
9.4.123
StartOfAWeek
Synopsis: Return a day of the week, given a year, week and day in the week.
511
Declaration: function StartOfAWeek(const AYear: Word;const AWeekOfYear: Word; const ADayOfWeek: Word) : TDateTime function StartOfAWeek(const AYear: Word;const AWeekOfYear: Word) : TDateTime Visibility: default Description: StartOfAWeek returns a TDateTime value with the date of the indicated day of the week indicated by the AYear, AWeek, ADayOfWeek values. The default value for ADayOfWeek is 1. See also: StartOfTheWeek (514), EndOfTheWeek (468), EndOfAWeek (466), StartOfAMonth (511), EndOfTheYear (469), EndOfAYear (467), EndOfTheMonth (468), EndOfAMonth (465) Listing: ./datutex/ex34.pp
Program Example34 ; { T h i s program demonstrates t h e StartOfAWeek f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Const Fmt = " F i r s t day o f t h i s week : " dd mmmm yyyy hh : nn : ss ; Fmt2 = " Second day o f t h i s week : " dd mmmm yyyy hh : nn : ss ; Var Y ,W : Word ; Begin Y: = YearOf ( Today ) ; W: = WeekOf ( Today ) ; W r i t e l n ( FormatDateTime ( Fmt , StartOfAWeek ( Y ,W) ) ) ; W r i t e l n ( FormatDateTime ( Fmt2 , StartOfAWeek ( Y ,W, 2 ) ) ) ; End .
9.4.124
StartOfAYear
Synopsis: Return the rst day of a given year. Declaration: function StartOfAYear(const AYear: Word) : TDateTime Visibility: default Description: StartOfAYear returns a TDateTime value with the date of the rst day of the year AYear (January 1). See also: StartOfTheYear (514), EndOfTheYear (469), EndOfAYear (467), EndOfTheMonth (468), EndOfAMonth (465), StartOfAWeek (511), StartOfTheWeek (514) Listing: ./datutex/ex26.pp
Program Example26 ; { T h i s program demonstrates t h e StartOfAYear f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ;
512
Const Fmt = " F i r s t day o f t h i s year : " dd mmmm yyyy ; Begin W r i t e l n ( FormatDateTime ( Fmt , StartOfAYear ( YearOf ( Today ) ) ) ) ; End .
9.4.125
StartOfTheDay
Synopsis: Calculate the start of the day as a DateTime value, given a moment in the day. Declaration: function StartOfTheDay(const AValue: TDateTime) : TDateTime Visibility: default Description: StartOfTheDay extracts the date part of AValue and returns a TDateTime value with the date/time indication of the start (0:0:0.000) of this day. See also: StartOfADay (510), StartOfTheWeek (514), StartOfAWeek (511), StartOfAMonth (511), StartOfTheMonth (513), EndOfTheWeek (468), EndOfAWeek (466), EndOfTheYear (469), EndOfAYear (467), EndOfTheMonth (468), EndOfAMonth (465), EndOftheDay (467), EndOfADay (465) Listing: ./datutex/ex36.pp
Program Example36 ; { T h i s program demonstrates t h e StartOfTheDay f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Const Fmt = " S t a r t o f t h e day : " dd mmmm yyyy hh : nn : ss ;
9.4.126
StartOfTheMonth
Synopsis: Calculate the rst day of the month, given a date in that month. Declaration: function StartOfTheMonth(const AValue: TDateTime) : TDateTime Visibility: default Description: StartOfTheMonth extracts the year and month parts of AValue and returns a TDateTime value with the date of the rst day of that year and month as the StartOfAMonth (511) function. See also: StartOfAMonth (511), EndOfTheYear (469), EndOfAYear (467), EndOfTheMonth (468), EndOfAMonth (465), StartOfAWeek (511), StartOfTheWeek (514) Listing: ./datutex/ex28.pp
513
Program Example28 ; { T h i s program demonstrates t h e StartOfTheMonth f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Const Fmt = " F i r s t day o f t h i s month : " dd mmmm yyyy ; Begin W r i t e l n ( FormatDateTime ( Fmt , StartOfTheMonth ( Today ) ) ) ; End .
9.4.127
StartOfTheWeek
Synopsis: Return the rst day of the week, given a date. Declaration: function StartOfTheWeek(const AValue: TDateTime) : TDateTime Visibility: default Description: StartOfTheWeek extracts the year and week parts of AValue and returns a TDateTime value with the date of the rst day of that week as the StartOfAWeek (511) function. See also: StartOfAWeek (511), EndOfTheWeek (468), EndOfAWeek (466), StartOfAMonth (511), EndOfTheYear (469), EndOfAYear (467), EndOfTheMonth (468), EndOfAMonth (465) Listing: ./datutex/ex32.pp
Program Example32 ; { T h i s program demonstrates t h e StartOfTheWeek f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Const Fmt = " F i r s t day o f t h i s week : " dd mmmm yyyy ; Begin W r i t e l n ( FormatDateTime ( Fmt , StartOfTheWeek ( Today ) ) ) ; End .
9.4.128
StartOfTheYear
Synopsis: Return the rst day of the year, given a date in this year. Declaration: function StartOfTheYear(const AValue: TDateTime) : TDateTime Visibility: default Description: StartOfTheYear extracts the year part of AValue and returns a TDateTime value with the date of the rst day of that year (January 1), as the StartOfAYear (512) function. See also: StartOfAYear (512), EndOfTheYear (469), EndOfAYear (467) Listing: ./datutex/ex24.pp 514
Program Example24 ; { T h i s program demonstrates t h e StartOfTheYear f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Const Fmt = " F i r s t day o f t h i s year : " dd mmmm yyyy ; Begin W r i t e l n ( FormatDateTime ( Fmt , StartOfTheYear ( Today ) ) ) ; End .
9.4.129
TimeOf
Synopsis: Extract the time part from a DateTime indication. Declaration: function TimeOf(const AValue: TDateTime) : TDateTime Visibility: default Description: TimeOf extracts the time part from AValue and returns the result. Since the TDateTime is actually a double with the time part encoded in the fractional part, this operation corresponds to a call to Frac. See also: DateOf (452), YearOf (534), MonthOf (493), DayOf (454), HourOf (469), MinuteOf (489), SecondOf (506), MilliSecondOf (485) Listing: ./datutex/ex2.pp
Program Example2 ; { T h i s program demonstrates t h e TimeOf f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Begin W r i t e l n ( Time i s : End .
9.4.130
Today
Synopsis: Return the current date Declaration: function Today : TDateTime Visibility: default Description: Today is an alias for the Date (1492) function in the sysutils (1443) unit. For an example, see Yesterday (536) See also: Date (1492), Yesterday (536), Tomorrow (516)
515
9.4.131
Tomorrow
Synopsis: Return the next day Declaration: function Tomorrow : TDateTime Visibility: default Description: Tomorrow returns tomorrows date. Tomorrow is determined from the system clock, i.e. it is Today (515) +1. See also: Today (515), Yesterday (536) Listing: ./datutex/ex19.pp
Program Example19 ; { T h i s program demonstrates t h e Tomorrow f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Begin W r i t e l n ( FormatDateTime ( " Today i s " dd mmmm yyyy , Today ) ) ; W r i t e l n ( FormatDateTime ( " Tomorrow w i l l be " dd mmmm yyyy , Tomorrow ) ) ; End .
9.4.132
TryEncodeDateDay
Synopsis: Encode a year and day of year to a TDateTime value Declaration: function TryEncodeDateDay(const AYear: Word;const ADayOfYear: Word; out AValue: TDateTime) : Boolean Visibility: default Description: TryEncodeDateDay encodes the values AYear and ADayOfYear to a date value and returns this value in AValue. If the encoding was succcesful, True is returned. False is returned if any of the arguments is not valid. See also: EncodeDateDay (463), EncodeDateTime (463), EncodeDateMonthWeek (463), EncodeDateWeek (464), TryEncodeDateTime (517), TryEncodeDateMonthWeek (517), TryEncodeDateWeek (518) Listing: ./datutex/ex84.pp
Program Example84 ; { T h i s program demonstrates t h e TryEncodeDateDay f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Var Y , DoY : Word ; TS : TDateTime ; Begin DecodeDateDay (Now, Y , DoY ) ; I f TryEncodeDateDay ( Y , DoY , TS ) then
516
9.4.133
TryEncodeDateMonthWeek
Synopsis: Encode a year, month, week of month and day of week to a TDateTime value Declaration: function TryEncodeDateMonthWeek(const AYear: Word;const AMonth: Word; const AWeekOfMonth: Word; const ADayOfWeek: Word; out AValue: TDateTime) : Boolean Visibility: default Description: TryEncodeDateTime encodes the values AYearAMonth, WeekOfMonth,ADayOfWeek, to a date value and returns this value in AValue. If the encoding was succesful, True is returned, False if any of the arguments is not valid. See also: DecodeDateMonthWeek (460), EncodeDateTime (463), EncodeDateWeek (464), EncodeDateDay (463), EncodeDateMonthWeek (463), TryEncodeDateTime (517), TryEncodeDateWeek (518), TryEncodeDateDay (516), NthDayOfWeek (495) Listing: ./datutex/ex86.pp
Program Example86 ; { T h i s program demonstrates t h e TryEncodeDateMonthWeek f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Var Y ,M,Wom, Dow : Word ; TS : TDateTime ; Begin DecodeDateMonthWeek (Now, Y ,M,WoM,DoW) ; I f TryEncodeDateMonthWeek ( Y ,M,WoM, Dow, TS ) then W r i t e l n ( Today i s : , DateToStr ( TS ) ) else W r i t e l n ( I n v a l i d year / month / week / dow i n d i c a t i o n ) ; End .
9.4.134
TryEncodeDateTime
Synopsis: Encode a Year, Month, Day, Hour, minute, seconds, milliseconds tuplet to a TDateTime value Declaration: function TryEncodeDateTime(const AYear: Word;const AMonth: Word; const ADay: Word;const AHour: Word; const AMinute: Word;const ASecond: Word; const AMilliSecond: Word; out AValue: TDateTime) : Boolean Visibility: default 517
Description: EncodeDateTime encodes the values AYearAMonth, ADay,AHour, AMinute,ASecond and AMilliSecond to a date/time valueand returns this value in AValue. If the date was encoded succesfully, True is returned, False is returned if one of the arguments is not valid. See also: EncodeDateTime (463), EncodeDateMonthWeek (463), EncodeDateWeek (464), EncodeDateDay (463), TryEncodeDateDay (516), TryEncodeDateWeek (518), TryEncodeDateMonthWeek (517) Listing: ./datutex/ex80.pp
Program Example79 ; { T h i s program demonstrates t h e TryEncodeDateTime f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Var Y , Mo, D, H, Mi , S ,MS : Word ; TS : TDateTime ; Begin DecodeDateTime (Now, Y , Mo, D, H, Mi , S ,MS) ; I f TryEncodeDateTime ( Y , Mo, D, H, Mi , S ,MS, TS ) then W r i t e l n ( Now i s : , DateTimeToStr ( TS ) ) else W r i t e l n ( Wrong date / t i m e i n d i c a t i o n ) ; End .
9.4.135
TryEncodeDateWeek
Synopsis: Encode a year, week and day of week triplet to a TDateTime value Declaration: function TryEncodeDateWeek(const AYear: Word;const AWeekOfYear: Word; out AValue: TDateTime;const ADayOfWeek: Word) : Boolean function TryEncodeDateWeek(const AYear: Word;const AWeekOfYear: Word; out AValue: TDateTime) : Boolean Visibility: default Description: TryEncodeDateWeek encodes the values AYear, AWeekOfYear and ADayOfWeek to a date value and returns this value in AValue. If the encoding was succcesful, True is returned. False is returned if any of the arguments is not valid. See also: EncodeDateMonthWeek (463), EncodeDateWeek (464), EncodeDateTime (463), EncodeDateDay (463), TryEncodeDateTime (517), TryEncodeDateMonthWeek (517), TryEncodeDateDay (516) Listing: ./datutex/ex82.pp
Program Example82 ; { T h i s program demonstrates t h e TryEncodeDateWeek f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ;
518
Var Y ,W, Dow : Word ; TS : TDateTime ; Begin DecodeDateWeek (Now, Y ,W, Dow ) ; I f TryEncodeDateWeek ( Y ,W, TS , Dow ) then W r i t e l n ( Today i s : , DateToStr ( TS ) ) else W r i t e l n ( I n v a l i d date / week i n d i c a t i o n ) ; End .
9.4.136
TryEncodeDayOfWeekInMonth
Synopsis: Encode a year, month, week, day of week triplet to a TDateTime value Declaration: function TryEncodeDayOfWeekInMonth(const AYear: Word;const AMonth: Word; const ANthDayOfWeek: Word; const ADayOfWeek: Word; out AValue: TDateTime) : Boolean Visibility: default Description: EncodeDayOfWeekInMonth encodes AYear, AMonth, ADayOfweek and ANthDayOfweek to a valid date stamp and returns the result in AValue. ANthDayOfweekis the N-th time that this weekday occurs in the month, e.g. the third saturday of the month. The function returns True if the encoding was succesful, False if any of the values is not in range. See also: NthDayOfWeek (495), EncodeDateMonthWeek (463), #rtl.sysutils.DayOfWeek (1497), DecodeDayOfWeekInMonth (462), EncodeDayOfWeekInMonth (464) Listing: ./datutex/ex106.pp
Program Example105 ; { T h i s program demonstrates t h e DecodeDayOfWeekInMonth f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Var Y ,M,NDoW,DoW : Word ; D : TDateTime ; Begin DecodeDayOfWeekInMonth ( Date , Y ,M,NDoW,DoW) ; I f TryEncodeDayOfWeekInMonth ( Y ,M,NDoW,DoW,D ) then begin Write ( DateToStr (D) , i s t h e ,NDow, t h ) ; W r i t e l n ( formatdateTime ( dddd ,D) , o f t h e month . ) ; end else W r i t e l n ( I n v a l i d year / month / NthDayOfweek c o m bi n a ti o n ) ; End .
519
9.4.137
TryEncodeTimeInterval
Synopsis: Try to encode an interval as a TDateTime value. Declaration: function TryEncodeTimeInterval(Hour: Word;Min: Word;Sec: Word; MSec: Word;out Time: TDateTime) : Boolean Visibility: default Description: TryEncodeTimeInterval encodes a time interval expressed in Hour, Min, Sec, MSec as a TDateTime value and returns the value in Time. It returns True if Min, Sec, MSec contain valid time values (i.e. less than 60, 60 resp. MSec). The number of hours may be larger than 24. See also: EncodeTimeInterval (??)
9.4.138
TryJulianDateToDateTime
Synopsis: Convert a Julian date representation to a TDateTime value. Declaration: function TryJulianDateToDateTime(const AValue: Double; out ADateTime: TDateTime) : Boolean Visibility: default Description: Try to convert a Julian date to a regular TDateTime date/time representation. See also: DateTimeToJulianDate (453), JulianDateToDateTime (484), DateTimeToModiedJulianDate (454), TryModiedJulianDateToDateTime (520)
9.4.139
TryModiedJulianDateToDateTime
Synopsis: Convert a modied Julian date representation to a TDateTime value. Declaration: function TryModifiedJulianDateToDateTime(const AValue: Double; out ADateTime: TDateTime) : Boolean Visibility: default Description: Not yet implemented. Errors: Currently, trying to use this function will raise an exception. See also: DateTimeToJulianDate (453), JulianDateToDateTime (484), TryJulianDateToDateTime (520), DateTimeToModiedJulianDate (454), ModiedJulianDateToDateTime (493)
9.4.140
TryRecodeDateTime
Synopsis: Replace selected parts of a TDateTime value with other values Declaration: function TryRecodeDateTime(const AValue: TDateTime;const AYear: Word; const AMonth: Word;const ADay: Word; const AHour: Word;const AMinute: Word; const ASecond: Word;const AMilliSecond: Word; out AResult: TDateTime) : Boolean Visibility: default
520
Description: TryRecodeDateTime replaces selected parts of the timestamp AValue with the date/time values specied in AYear, AMonth, ADay, AHour, AMinute, ASecond and AMilliSecond. If any of these values equals the pre-dened constant RecodeLeaveFieldAsIs (449), then the corresponding part of the date/time stamp is left untouched. The resulting date/time is returned in AValue. The function returns True if the encoding was succesful. It returns False if one of the values AYear, AMonth, ADay, AHour, AMinute, ASecondAMilliSecond is not within a valid range. See also: RecodeYear (503), RecodeMonth (501), RecodeDay (498), RecodeHour (499), RecodeMinute (500), RecodeSecond (501), RecodeMilliSecond (499), RecodeDate (496), RecodeTime (502), RecodeDateTime (497) Listing: ./datutex/ex97.pp
Program Example97 ; { T h i s program demonstrates t h e TryRecodeDateTime f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Const Fmt = dddd dd mmmm yyyy hh : nn : ss ; Var S : AnsiString ; D : TDateTime ; Begin I f TryRecodeDateTime (Now, 2 0 0 0 , 2 , RecodeLeaveFieldAsIs , 0 , 0 , 0 , 0 ,D ) then begin S: = FormatDateTime ( Fmt ,D ) ; W r i t e l n ( T h i s moment i n f e b r u a r i 2 0 0 0 : ,S ) ; end else W r i t e l n ( T h i s moment d i d / does n o t e x i s t i n f e b r u a r i 2000 ) ; End .
9.4.141
UnixTimeStampToMac
Synopsis: Convert Unix Timestamp to a Mac Timestamp Declaration: function UnixTimeStampToMac(const AValue: Int64) : Int64 Visibility: default Description: UnixTimeStampToMac converts the unix epoch time in AValue to a valid Mac timestamp indication and returns the result. Errors: None. See also: DateTimeToMac (453), MacToDateTime (485), MacTimeStampToUnix (485)
521
9.4.142
UnixToDateTime
Synopsis: Convert Unix epoch time to a TDateTime value Declaration: function UnixToDateTime(const AValue: Int64) : TDateTime Visibility: default Description: UnixToDateTime converts epoch time (time elapsed since 1/1/1970) to a TDateTime value. See also: DateTimeToUnix (454)
9.4.143
WeekOf
Synopsis: Extract week (of the year) from a given date. Declaration: function WeekOf(const AValue: TDateTime) : Word Visibility: default Description: WeekOf returns the week-of-the-year part of the AValue date/time indication. It is a number between 1 and 53. For an example, see YearOf (534) See also: YearOf (534), DayOf (454), MonthOf (493), HourOf (469), MinuteOf (489), SecondOf (506), MilliSecondOf (485)
9.4.144
WeekOfTheMonth
Synopsis: Extract the week of the month (and optionally month and year) from a DateTime value Declaration: function WeekOfTheMonth(const AValue: TDateTime) : Word; Overload function WeekOfTheMonth(const AValue: TDateTime;out AYear: Word; out AMonth: Word) : Word; Overload Visibility: default Description: WeekOfTheMonth extracts the week of the month from Avalue and returns it, and optionally returns the year and month as well (in AYear, AMonth respectively). Remark: Note that weeks are numbered from 1 using the ISO 8601 standard, and the day of the week as well. This means that the year and month may not be the same as the year part of the date, since the week may start in the previous year as the rst week of the year is the week with at least 4 days in it. See also: WeekOfTheYear (523), DayOfTheMonth (454), HourOfTheMonth (470), MinuteOfTheMonth (490), SecondOfTheMonth (508), MilliSecondOfTheMonth (486) Listing: ./datutex/ex41.pp
Program Example41 ; { T h i s program demonstrates t h e WeekOfTheMonth f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Var N : TDateTime ; Begin
522
Week o f t h e Month Day o f t h e Month Hour o f t h e Month Minute o f t h e Month Second o f t h e Month M i l l i S e c o n d o f t h e Month MilliSecondOfTheMonth (N ) ) ;
: : : : : :
9.4.145
WeekOfTheYear
Synopsis: Extract the week of the year (and optionally year) of a DateTime indication. Declaration: function WeekOfTheYear(const AValue: TDateTime) : Word; Overload function WeekOfTheYear(const AValue: TDateTime;out AYear: Word) : Word ; Overload Visibility: default Description: WeekOfTheYear extracts the week of the year from Avalue and returns it, and optionally returns the year as well. It returns the same value as WeekOf (522). Remark: Note that weeks are numbered from 1 using the ISO 8601 standard, and the day of the week as well. This means that the year may not be the same as the year part of the date, since the week may start in the previous year as the rst week of the year is the week with at least 4 days in it. See also: WeekOf (522), MonthOfTheYear (493), DayOfTheYear (455), HourOfTheYear (471), MinuteOfTheYear (491), SecondOfTheYear (508), MilliSecondOfTheYear (487) Listing: ./datutex/ex40.pp
Program Example40 ; { T h i s program demonstrates t h e WeekOfTheYear f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Var N : TDateTime ; Begin N: =Now; Writeln ( Writeln ( Writeln ( Writeln ( Writeln ( Writeln ( Writeln ( End .
Month o f t h e year Week o f t h e year Day o f t h e year Hour o f t h e year Minute o f t h e year Second o f t h e year M i l l i S e c o n d o f t h e year MilliSecondOfTheYear (N ) ) ;
: : : : : : :
9.4.146
WeeksBetween
Synopsis: Calculate the number of whole weeks between two DateTime values 523
Declaration: function WeeksBetween(const ANow: TDateTime;const AThen: TDateTime) : Integer Visibility: default Description: WeeksBetween returns the number of whole weeks between ANow and AThen. This means the fractional part of a Week is dropped. See also: YearsBetween (535), MonthsBetween (494), DaysBetween (456), HoursBetween (471), MinutesBetween (491), SecondsBetween (508), MilliSecondsBetween (488) Listing: ./datutex/ex57.pp
Program Example57 ; { T h i s program demonstrates t h e WeeksBetween f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Procedure Test (ANow, AThen : TDateTime ) ; begin Write ( Number o f weeks between ) ; Write ( DateToStr ( AThen ) , and , DateToStr (ANow ) ) ; W r i t e l n ( : , WeeksBetween (ANow, AThen ) ) ; end ; Var D1 , D2 : TDateTime ; Begin D1: = Today ; D2: = Today 7; Test ( D1 , D2 ) ; D2: = Today 8; Test ( D1 , D2 ) ; D2: = Today 14; Test ( D1 , D2 ) ; D2: = Today 35; Test ( D1 , D2 ) ; D2: = Today 36; Test ( D1 , D2 ) ; D2: = Today 17; Test ( D1 , D2 ) ; End .
9.4.147
WeeksInAYear
Synopsis: Return the number of weeks in a given year Declaration: function WeeksInAYear(const AYear: Word) : Word Visibility: default Description: WeeksInAYear returns the number of weeks in the year AYear. The return value is either 52 or 53. Remark: The rst week of the year is determined according to the ISO 8601 standard: It is the rst week that has at least 4 days in it, i.e. it includes a thursday. 524
See also: WeeksInYear (525), DaysInYear (458), DaysInAYear (457), DaysInMonth (458), DaysInAMonth (456) Listing: ./datutex/ex13.pp
Program Example13 ; { T h i s program demonstrates t h e WeeksInAYear f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Var Y : Word ; Begin For Y: = 1 9 9 2 to 2 0 1 0 do W r i t e l n ( Y , has , WeeksInAYear (Y ) , weeks . ) ; End .
9.4.148
WeeksInYear
Synopsis: return the number of weeks in the year, given a date Declaration: function WeeksInYear(const AValue: TDateTime) : Word Visibility: default Description: WeeksInYear returns the number of weeks in the year part of AValue. The return value is either 52 or 53. Remark: The rst week of the year is determined according to the ISO 8601 standard: It is the rst week that has at least 4 days in it, i.e. it includes a thursday. See also: WeeksInAYear (524), DaysInYear (458), DaysInAYear (457), DaysInMonth (458), DaysInAMonth (456) Listing: ./datutex/ex12.pp
Program Example12 ; { T h i s program demonstrates t h e WeeksInYear f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Var Y : Word ; Begin For Y: = 1 9 9 2 to 2 0 1 0 do W r i t e l n ( Y , has , WeeksInYear ( EncodeDate ( Y , 2 , 1 ) ) , weeks . ) ; End .
9.4.149
WeekSpan
Synopsis: Calculate the approximate number of weeks between two DateTime values. Declaration: function WeekSpan(const ANow: TDateTime;const AThen: TDateTime) : Double 525
Visibility: default Description: WeekSpan returns the number of weeks between ANow and AThen, including any fractional parts of a week. See also: YearSpan (536), MonthSpan (495), DaySpan (459), HourSpan (472), MinuteSpan (492), SecondSpan (509), MilliSecondSpan (488), WeeksBetween (523) Listing: ./datutex/ex65.pp
Program Example57 ; { T h i s program demonstrates t h e WeekSpan f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Procedure Test (ANow, AThen : TDateTime ) ; begin Write ( Number o f weeks between ) ; Write ( DateToStr ( AThen ) , and , DateToStr (ANow ) ) ; W r i t e l n ( : ,WeekSpan (ANow, AThen ) ) ; end ; Var D1 , D2 : TDateTime ; Begin D1: = Today ; D2: = Today 7; Test ( D1 , D2 ) ; D2: = Today 8; Test ( D1 , D2 ) ; D2: = Today 14; Test ( D1 , D2 ) ; D2: = Today 35; Test ( D1 , D2 ) ; D2: = Today 36; Test ( D1 , D2 ) ; D2: = Today 17; Test ( D1 , D2 ) ; End .
9.4.150
WithinPastDays
Synopsis: Check whether two datetimes are only a number of days apart Declaration: function WithinPastDays(const ANow: TDateTime;const AThen: TDateTime; const ADays: Integer) : Boolean Visibility: default Description: WithinPastDays compares the timestamps ANow and AThen and returns True if the difference between them is at most ADays days apart, or False if they are further apart. Remark: Since this function uses the DaysBetween (456) function to calculate the difference in days, this means that fractional days do not count, and the fractional part is simply dropped, so for two dates actually 2 and a half days apart, the result will also be True 526
See also: WithinPastYears (533), WithinPastMonths (530), WithinPastWeeks (532), WithinPastHours (527), WithinPastMinutes (529), WithinPastSeconds (531), WithinPastMilliSeconds (528) Listing: ./datutex/ex50.pp
Program Example50 ; { T h i s program demonstrates t h e WithinPastDays f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Procedure Test (ANow, AThen : TDateTime ; ADays : I n t e g e r ) ; begin Write ( DateTimeToStr ( AThen ) , and , DateTimeToStr (ANow ) ) ; Write ( are w i t h i n , ADays , days : ) ; W r i t e l n ( WithinPastDays (ANow, AThen , ADays ) ) ; end ; Var D1 , D2 : TDateTime ; Begin D1: =Now; D2: = Today 23/24; Test ( D1 , D2 , 1 ) ; D2: = Today 1; Test ( D1 , D2 , 1 ) ; D2: = Today 25/24; Test ( D1 , D2 , 1 ) ; D2: = Today 26/24; Test ( D1 , D2 , 5 ) ; D2: = Today 5.4; Test ( D1 , D2 , 5 ) ; D2: = Today 2.5; Test ( D1 , D2 , 1 ) ; Test ( D1 , D2 , 2 ) ; Test ( D1 , D2 , 3 ) ; End .
9.4.151
WithinPastHours
Synopsis: Check whether two datetimes are only a number of hours apart Declaration: function WithinPastHours(const ANow: TDateTime;const AThen: TDateTime; const AHours: Int64) : Boolean Visibility: default Description: WithinPastHours compares the timestamps ANow and AThen and returns True if the difference between them is at most AHours hours apart, or False if they are further apart. Remark: Since this function uses the HoursBetween (471) function to calculate the difference in Hours, this means that fractional hours do not count, and the fractional part is simply dropped, so for two dates actually 2 and a half hours apart, the result will also be True See also: WithinPastYears (533), WithinPastMonths (530), WithinPastWeeks (532), WithinPastDays (526), WithinPastMinutes (529), WithinPastSeconds (531), WithinPastMilliSeconds (528) 527
Listing: ./datutex/ex51.pp
Program Example51 ; { T h i s program demonstrates t h e WithinPastHours f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Procedure Test (ANow, AThen : TDateTime ; AHours : I n t e g e r ) ; begin Write ( DateTimeToStr ( AThen ) , and , DateTimeToStr (ANow ) ) ; Write ( are w i t h i n , AHours , hours : ) ; W r i t e l n ( WithinPastHours (ANow, AThen , AHours ) ) ; end ; Var D1 , D2 : TDateTime ; Begin D1: =Now; D2: =D1(59OneMinute ) ; Test ( D1 , D2 , 1 ) ; D2: =D1(61OneMinute ) ; Test ( D1 , D2 , 1 ) ; D2: =D1(122OneMinute ) ; Test ( D1 , D2 , 1 ) ; D2: =D1(306OneMinute ) ; Test ( D1 , D2 , 5 ) ; D2: =D1(5.4OneHour ) ; Test ( D1 , D2 , 5 ) ; D2: =D1(2.5OneHour ) ; Test ( D1 , D2 , 1 ) ; Test ( D1 , D2 , 2 ) ; Test ( D1 , D2 , 3 ) ; End .
9.4.152
WithinPastMilliSeconds
Synopsis: Check whether two datetimes are only a number of milliseconds apart Declaration: function WithinPastMilliSeconds(const ANow: TDateTime; const AThen: TDateTime; const AMilliSeconds: Int64) : Boolean Visibility: default Description: WithinPastMilliSeconds compares the timestamps ANow and AThen and returns True if the difference between them is at most AMilliSeconds milliseconds apart, or False if they are further apart. Remark: Since this function uses the MilliSecondsBetween (488) function to calculate the difference in milliseconds, this means that fractional milliseconds do not count, and the fractional part is simply dropped, so for two dates actually 2 and a half milliseconds apart, the result will also be True See also: WithinPastYears (533), WithinPastMonths (530), WithinPastWeeks (532), WithinPastDays (526), WithinPastHours (527), WithinPastMinutes (529), WithinPastSeconds (531)
528
Listing: ./datutex/ex54.pp
Program Example54 ; { T h i s program demonstrates t h e W i t h i n P a s t M i l l i S e c o n d s f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Procedure Test (ANow, AThen : TDateTime ; A M i l l i S e c o n d s : I n t e g e r ) ; begin Write ( TimeToStr ( AThen ) , and , TimeToStr (ANow ) ) ; Write ( are w i t h i n , A M i l l i S e c o n d s , m i l l i s e c o n d s : ) ; W r i t e l n ( W i t h i n P a s t M i l l i S e c o n d s (ANow, AThen , A M i l l i S e c o n d s ) ) ; end ; Var D1 , D2 : TDateTime ; Begin D1: =Now; D2: =D1(0.9 OneMilliSecond ) ; Test ( D1 , D2 , 1 ) ; D2: =D1(1.0 OneMilliSecond ) ; Test ( D1 , D2 , 1 ) ; D2: =D1(1.1 OneMilliSecond ) ; Test ( D1 , D2 , 1 ) ; D2: =D1(2.5 OneMilliSecond ) ; Test ( D1 , D2 , 1 ) ; Test ( D1 , D2 , 2 ) ; Test ( D1 , D2 , 3 ) ; End .
9.4.153
WithinPastMinutes
Synopsis: Check whether two datetimes are only a number of minutes apart Declaration: function WithinPastMinutes(const ANow: TDateTime;const AThen: TDateTime; const AMinutes: Int64) : Boolean Visibility: default Description: WithinPastMinutes compares the timestamps ANow and AThen and returns True if the difference between them is at most AMinutes minutes apart, or False if they are further apart. Remark: Since this function uses the MinutesBetween (491) function to calculate the difference in Minutes, this means that fractional minutes do not count, and the fractional part is simply dropped, so for two dates actually 2 and a half minutes apart, the result will also be True See also: WithinPastYears (533), WithinPastMonths (530), WithinPastWeeks (532), WithinPastDays (526), WithinPastHours (527), WithinPastSeconds (531), WithinPastMilliSeconds (528) Listing: ./datutex/ex52.pp
Program Example52 ; { T h i s program demonstrates t h e W i t h i n P a s t M i n u t e s f u n c t i o n }
529
Uses S y s U t i l s , D a t e U t i l s ; Procedure Test (ANow, AThen : TDateTime ; AMinutes : I n t e g e r ) ; begin Write ( DateTimeToStr ( AThen ) , and , DateTimeToStr (ANow ) ) ; Write ( are w i t h i n , AMinutes , Minutes : ) ; W r i t e l n ( W i t h i n P a s t M i n u t e s (ANow, AThen , AMinutes ) ) ; end ; Var D1 , D2 : TDateTime ; Begin D1: =Now; D2: =D1(59OneSecond ) ; Test ( D1 , D2 , 1 ) ; D2: =D1(61OneSecond ) ; Test ( D1 , D2 , 1 ) ; D2: =D1(122OneSecond ) ; Test ( D1 , D2 , 1 ) ; D2: =D1(306OneSecond ) ; Test ( D1 , D2 , 5 ) ; D2: =D1(5.4 OneMinute ) ; Test ( D1 , D2 , 5 ) ; D2: =D1(2.5 OneMinute ) ; Test ( D1 , D2 , 1 ) ; Test ( D1 , D2 , 2 ) ; Test ( D1 , D2 , 3 ) ; End .
9.4.154
WithinPastMonths
Synopsis: Check whether two datetimes are only a number of months apart Declaration: function WithinPastMonths(const ANow: TDateTime;const AThen: TDateTime; const AMonths: Integer) : Boolean Visibility: default Description: WithinPastMonths compares the timestamps ANow and AThen and returns True if the difference between them is at most AMonths months apart, or False if they are further apart. Remark: Since this function uses the MonthsBetween (494) function to calculate the difference in Months, this means that fractional months do not count, and the fractional part is simply dropped, so for two dates actually 2 and a half months apart, the result will also be True See also: WithinPastYears (533), WithinPastWeeks (532), WithinPastDays (526), WithinPastHours (527), WithinPastMinutes (529), WithinPastSeconds (531), WithinPastMilliSeconds (528) Listing: ./datutex/ex48.pp
Program Example48 ; { T h i s program demonstrates t h e WithinPastMonths f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ;
530
Procedure Test (ANow, AThen : TDateTime ; AMonths : I n t e g e r ) ; begin Write ( DateToStr ( AThen ) , and , DateToStr (ANow ) ) ; Write ( are w i t h i n , AMonths , months : ) ; W r i t e l n ( WithinPastMonths (ANow, AThen , AMonths ) ) ; end ; Var D1 , D2 : TDateTime ; Begin D1: = Today ; D2: = Today 364; Test ( D1 , D2 , 1 2 ) ; D2: = Today 365; Test ( D1 , D2 , 1 2 ) ; D2: = Today 366; Test ( D1 , D2 , 1 2 ) ; D2: = Today 390; Test ( D1 , D2 , 1 2 ) ; D2: = Today 368; Test ( D1 , D2 , 1 1 ) ; D2: = Today 1000; Test ( D1 , D2 , 3 1 ) ; Test ( D1 , D2 , 3 2 ) ; Test ( D1 , D2 , 3 3 ) ; End .
9.4.155
WithinPastSeconds
Synopsis: Check whether two datetimes are only a number of seconds apart Declaration: function WithinPastSeconds(const ANow: TDateTime;const AThen: TDateTime; const ASeconds: Int64) : Boolean Visibility: default Description: WithinPastSeconds compares the timestamps ANow and AThen and returns True if the difference between them is at most ASeconds seconds apart, or False if they are further apart. Remark: Since this function uses the SecondsBetween (508) function to calculate the difference in seconds, this means that fractional seconds do not count, and the fractional part is simply dropped, so for two dates actually 2 and a half seconds apart, the result will also be True See also: WithinPastYears (533), WithinPastMonths (530), WithinPastWeeks (532), WithinPastDays (526), WithinPastHours (527), WithinPastMinutes (529), WithinPastMilliSeconds (528) Listing: ./datutex/ex53.pp
Program Example53 ; { T h i s program demonstrates t h e WithinPastSeconds f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Procedure Test (ANow, AThen : TDateTime ; ASeconds : I n t e g e r ) ;
531
begin Write ( DateTimeToStr ( AThen ) , and , DateTimeToStr (ANow ) ) ; Write ( are w i t h i n , ASeconds , seconds : ) ; W r i t e l n ( WithinPastSeconds (ANow, AThen , ASeconds ) ) ; end ; Var D1 , D2 : TDateTime ; Begin D1: =Now; D2: =D1(999 OneMilliSecond ) ; Test ( D1 , D2 , 1 ) ; D2: =D1(1001 OneMilliSecond ) ; Test ( D1 , D2 , 1 ) ; D2: =D1(2001 OneMilliSecond ) ; Test ( D1 , D2 , 1 ) ; D2: =D1(5001 OneMilliSecond ) ; Test ( D1 , D2 , 5 ) ; D2: =D1(5.4OneSecond ) ; Test ( D1 , D2 , 5 ) ; D2: =D1(2.5OneSecond ) ; Test ( D1 , D2 , 1 ) ; Test ( D1 , D2 , 2 ) ; Test ( D1 , D2 , 3 ) ; End .
9.4.156
WithinPastWeeks
Synopsis: Check whether two datetimes are only a number of weeks apart Declaration: function WithinPastWeeks(const ANow: TDateTime;const AThen: TDateTime; const AWeeks: Integer) : Boolean Visibility: default Description: WithinPastWeeks compares the timestamps ANow and AThen and returns True if the difference between them is at most AWeeks weeks apart, or False if they are further apart. Remark: Since this function uses the WeeksBetween (523) function to calculate the difference in Weeks, this means that fractional Weeks do not count, and the fractional part is simply dropped, so for two dates actually 2 and a half weeks apart, the result will also be True See also: WithinPastYears (533), WithinPastMonths (530), WithinPastDays (526), WithinPastHours (527), WithinPastMinutes (529), WithinPastSeconds (531), WithinPastMilliSeconds (528) Listing: ./datutex/ex49.pp
Program Example49 ; { T h i s program demonstrates t h e WithinPastWeeks f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Procedure Test (ANow, AThen : TDateTime ; AWeeks : I n t e g e r ) ; begin Write ( DateToStr ( AThen ) , and , DateToStr (ANow ) ) ;
532
Write ( are w i t h i n ,AWeeks , weeks : ) ; W r i t e l n ( WithinPastWeeks (ANow, AThen , AWeeks ) ) ; end ; Var D1 , D2 : TDateTime ; Begin D1: = Today ; D2: = Today 7; Test ( D1 , D2 , 1 ) ; D2: = Today 8; Test ( D1 , D2 , 1 ) ; D2: = Today 14; Test ( D1 , D2 , 1 ) ; D2: = Today 35; Test ( D1 , D2 , 5 ) ; D2: = Today 36; Test ( D1 , D2 , 5 ) ; D2: = Today 17; Test ( D1 , D2 , 1 ) ; Test ( D1 , D2 , 2 ) ; Test ( D1 , D2 , 3 ) ; End .
9.4.157
WithinPastYears
Synopsis: Check whether two datetimes are only a number of years apart Declaration: function WithinPastYears(const ANow: TDateTime;const AThen: TDateTime; const AYears: Integer) : Boolean Visibility: default Description: WithinPastYears compares the timestamps ANow and AThen and returns True if the difference between them is at most AYears years apart, or False if they are further apart. Remark: Since this function uses the YearsBetween (535) function to calculate the difference in years, this means that fractional years do not count, and the fractional part is simply dropped, so for two dates actually 2 and a half years apart, the result will also be True See also: WithinPastMonths (530), WithinPastWeeks (532), WithinPastDays (526), WithinPastHours (527), WithinPastMinutes (529), WithinPastSeconds (531), WithinPastMilliSeconds (528) Listing: ./datutex/ex47.pp
Program Example47 ; { T h i s program demonstrates t h e Wi th i nP as tY e ar s f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Procedure Test (ANow, AThen : TDateTime ; AYears : I n t e g e r ) ; begin Write ( DateToStr ( AThen ) , and , DateToStr (ANow ) ) ; Write ( are w i t h i n , AYears , years : ) ; W r i t e l n ( W it hi n Pa st Ye ar s (ANow, AThen , AYears ) ) ;
533
end ; Var D1 , D2 : TDateTime ; Begin D1: = Today ; D2: = Today 364; Test ( D1 , D2 , 1 ) ; D2: = Today 365; Test ( D1 , D2 , 1 ) ; D2: = Today 366; Test ( D1 , D2 , 1 ) ; D2: = Today 390; Test ( D1 , D2 , 1 ) ; D2: = Today 368; Test ( D1 , D2 , 1 ) ; D2: = Today 1000; Test ( D1 , D2 , 1 ) ; Test ( D1 , D2 , 2 ) ; Test ( D1 , D2 , 3 ) ; End .
9.4.158
YearOf
Synopsis: Extract the year from a given date. Declaration: function YearOf(const AValue: TDateTime) : Word Visibility: default Description: YearOf returns the year part of the AValue date/time indication. It is a number between 1 and 9999. See also: MonthOf (493), DayOf (454), WeekOf (522), HourOf (469), MinuteOf (489), SecondOf (506), MilliSecondOf (485) Listing: ./datutex/ex23.pp
Program Example23 ; { T h i s program demonstrates t h e YearOf f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Var D : TDateTime ; Begin D: =Now; Writeln ( Writeln ( Writeln ( Writeln ( Writeln ( Writeln ( Writeln (
: : : : : : :
534
, M i l l i S e c o n d O f (D ) ) ;
9.4.159
YearsBetween
Synopsis: Calculate the number of whole years between two DateTime values Declaration: function YearsBetween(const ANow: TDateTime;const AThen: TDateTime) : Integer Visibility: default Description: YearsBetween returns the number of whole years between ANow and AThen. This number is an approximation, based on an average number of days of 365.25 per year (average over 4 years). This means the fractional part of a year is dropped. See also: MonthsBetween (494), WeeksBetween (523), DaysBetween (456), HoursBetween (471), MinutesBetween (491), SecondsBetween (508), MilliSecondsBetween (488), YearSpan (536) Listing: ./datutex/ex55.pp
Program Example55 ; { T h i s program demonstrates t h e YearsBetween f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Procedure Test (ANow, AThen : TDateTime ) ; begin Write ( Number o f years between ) ; Write ( DateToStr ( AThen ) , and , DateToStr (ANow ) ) ; W r i t e l n ( : , YearsBetween (ANow, AThen ) ) ; end ; Var D1 , D2 : TDateTime ; Begin D1: = Today ; D2: = Today 364; Test ( D1 , D2 ) ; D2: = Today 365; Test ( D1 , D2 ) ; D2: = Today 366; Test ( D1 , D2 ) ; D2: = Today 390; Test ( D1 , D2 ) ; D2: = Today 368; Test ( D1 , D2 ) ; D2: = Today 1000; Test ( D1 , D2 ) ; End .
535
9.4.160
YearSpan
Synopsis: Calculate the approximate number of years between two DateTime values. Declaration: function YearSpan(const ANow: TDateTime;const AThen: TDateTime) : Double Visibility: default Description: YearSpan returns the number of years between ANow and AThen, including any fractional parts of a year. This number is an approximation, based on an average number of days of 365.25 per year (average over 4 years). See also: MonthSpan (495), WeekSpan (525), DaySpan (459), HourSpan (472), MinuteSpan (492), SecondSpan (509), MilliSecondSpan (488), YearsBetween (535) Listing: ./datutex/ex63.pp
Program Example63 ; { T h i s program demonstrates t h e YearSpan f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Procedure Test (ANow, AThen : TDateTime ) ; begin Write ( Number o f years between ) ; Write ( DateToStr ( AThen ) , and , DateToStr (ANow ) ) ; W r i t e l n ( : , YearSpan (ANow, AThen ) ) ; end ; Var D1 , D2 : TDateTime ; Begin D1: = Today ; D2: = Today 364; Test ( D1 , D2 ) ; D2: = Today 365; Test ( D1 , D2 ) ; D2: = Today 366; Test ( D1 , D2 ) ; D2: = Today 390; Test ( D1 , D2 ) ; D2: = Today 368; Test ( D1 , D2 ) ; D2: = Today 1000; Test ( D1 , D2 ) ; End .
9.4.161
Yesterday
Synopsis: Return the previous day. Declaration: function Yesterday : TDateTime Visibility: default
536
Description: Yesterday returns yesterdays date. Yesterday is determined from the system clock, i.e. it is Today (515) -1. See also: Today (515), Tomorrow (516) Listing: ./datutex/ex18.pp
Program Example18 ; { T h i s program demonstrates t h e Yesterday f u n c t i o n } Uses S y s U t i l s , D a t e U t i l s ; Begin W r i t e l n ( FormatDateTime ( " Today i s " dd mmmm yyyy , Today ) ) ; W r i t e l n ( FormatDateTime ( " Yesterday was " dd mmmm yyyy , Yesterday ) ) ; End .
537
Chapter 10
10.2
Overview
The DOS unit gives access to some operating system calls related to les, the le system, date and time. Except for the PalmOS target, this unit is available to all supported platforms. The unit was rst written for dos by Florian Klaemp. It was ported to linux by Mark May and enhanced by Michael 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 is the same for all operating systems. Because the DOS unit is a Turbo Pascal compatibility unit, it is no longer actively developed: the interface is frozen and it is maintained only for the purpose of porting Turbo Pascal programs. For new development, it is recommended to use the sysutils (1443) unit instead.
10.3
System information
Functions for retrieving and setting general system information such as date and time.
538
Table 10.2: Name DosVersion (102) GetCBreak (553) GetDate (554) GetIntVec (556) GetTime (558) GetVerify (558) Intr (559) Keep (559) MSDos (559) PackTime (560) SetCBreak (560) SetDate (561) SetIntVec (562) SetTime (562) SetVerify (562) SwapVectors (563) UnPackTime (563) Description Get OS version Get setting of control-break handling ag Get system date Get interrupt vector status Get system time Get verify ag Execute an interrupt Keep process in memory and exit Execute MS-dos function call Pack time for le time Set control-break handling ag Set system date Set interrupt vectors Set system time Set verify ag Swap interrupt vectors Unpack le time
10.4
Process handling
Functions to handle process information and starting new processes. Table 10.3: Name DosExitCode (102) EnvCount (549) EnvStr (549) Exec (550) GetEnv (554) Description Exit code of last executed program Return number of environment variables Return environment string pair Execute program Return specied environment string
10.5
Routines to handle disk information. Table 10.4: Name AddDisk (545) DiskFree (546) DiskSize (546) Description Add disk to list of disks (UNIX only) Return size of free disk space Return total disk size
539
10.6
File handling
Routines to handle les on disk. Table 10.5: Name FExpand (550) FindClose (550) FindFirst (551) FindNext (552) FSearch (552) FSplit (553) GetFAttr (555) GetFTime (556) GetLongName (557) GetShortName (557) SetFAttr (561) SetFTime (562) Description Expand lename to full path Close nrst/ndnext session Start nd of le Find next le Search for le in a path Split lename in parts Return le attributes Return le time Convert short lename to long lename (DOS only) Convert long lename to short lename (DOS only) Set le attributes Set le time
10.7
These constants are used in the Mode eld of the TextRec record. Gives information on the lemode of the text I/O. For their denitions consult the following table: Table 10.6: Possible mode constants Constant fmclosed fminput fmoutput fminout Description File is closed File is read only File is write only File is read and write Value $D7B0 $D7B1 $D7B2 $D7B3
10.8
File attributes
The File Attribute constants are used in FindFirst (551), FindNext (552) to determine what type of special le to search for in addition to normal les. These ags are also used in the SetFAttr (561) and GetFAttr (555) routines to set and retrieve attributes of les. For their denitions consult leattributes (540).
540
Table 10.7: Possible le attributes Constant readonly hidden sysfile volumeid directory archive anyfile Description Read-Only le attribute Hidden le attribute System le attribute Volumd ID le attribute Directory le attribute Archive le attribute Match any le attribute Value $01 $02 $04 $08 $10 $20 $3F
10.9
10.9.1
anyfile = $3F Match any le attribute archive = $20 Archive le attribute directory = $10 Directory le attribute fauxiliary = $0010 CPU auxiliary ag. Not used. fcarry = $0001 CPU carry ag. Not used. FileNameLen = 255 Maximum length of a lename filerecnamelength = 255 Maximum length of FileName part in FileRec (543) fmclosed = $D7B0 File is closed fminout = $D7B3
541
File is read and write fminput = $D7B1 File is read only fmoutput = $D7B2 File is write only foverflow = $0800 CPU overow ag. Not used. fparity = $0004 CPU parity ag. Not used. fsign = $0080 CPU sign ag. Not used. fzero = $0040 CPU zero ag. Not used. hidden = $02 Hidden le attribute readonly = $01 Read-Only le attribute sysfile = $04 System le attribute TextRecBufSize = 256 Size of default buffer in TextRec (545) TextRecNameLength = 256 Maximum length of lename in TextRec (545) volumeid = $08 Volumd ID le attribute
542
10.9.2
Types
ComStr = string Command-line string type DateTime = packed record Year : Word; Month : Word; Day : Word; Hour : Word; Min : Word; Sec : Word; end
The DateTime type is used in PackTime (560) and UnPackTime (563) for setting/reading le times with GetFTime (556) and SetFTime (562). DirStr = string Full directory string type. ExtStr = string Filename extension string type. FileRec = packed record Handle : THandle; Mode : LongInt; RecSize : SizeInt; _private : Array[1..3*SizeOf(SizeInt)+5*SizeOf(pointer)] of Byte; UserData : Array[1..32] of Byte; name : Array[0..filerecnamelength] of Char; end
FileRec is used for internal representation of typed and untyped les. NameStr = string Fill lename string type. PathStr = string Full File path string type. Registers = packed record end
This structure is only dened on a i386 compatible 32-bit platform, and is not used anywhere: it is dened for Turbo Pascal backwards compatibility only. 543
SearchRec = packed record SearchPos : TOff; SearchNum : LongInt; DirPtr : Pointer; SearchType : Byte; SearchAttr : Byte; Mode : Word; Fill : Array[1..1] of Byte; Attr : Byte; Time : LongInt; Size : LongInt; Reserved : Word; Name : string; SearchSpec : string; NamePos : Word; end
SearchRec is lled by the FindFirst (551) call and can be used in subsequent FindNext (552) calls to search for les. The structure of this record depends on the platform. Only the following elds are present on all platforms: Attr File attributes. Time File modication time. Size File size Name File name (name part only, no path) Mode File access mode (linux only) TextBuf = Array[0..TextRecBufSize-1] of Char Type for default buffer in TextRec (545) TextRec = packed record Handle : THandle; Mode : LongInt; bufsize : SizeInt; _private : SizeInt; bufpos : SizeInt; bufend : SizeInt; bufptr : ^TextBuf; openfunc : pointer; inoutfunc : pointer; flushfunc : pointer; closefunc : pointer; UserData : Array[1..32] of Byte; name : Array[0..textrecnamelength-1] of Char; LineEnd : TLineEndStr; buffer : TextBuf; end
544
TextRec describes the internal working of a Text le. Remark that this is not binary compatible with the Turbo Pascal denition of TextRec, since the sizes of the different elds are different. TLineEndStr = string TLineEndStr is used in the TextRec (545) record to indicate the end-of-line sequence for a text le.
10.9.3
Variables
DosError : Integer The DosError variable is used by the procedures in the dos unit to report errors. It can have the following values : Table 10.8: Dos error codes Value 2 3 5 6 8 10 11 18 Meaning File not found. Path not found. Access denied. Invalid handle. Not enough memory. Invalid environment. Invalid format. No more les.
10.10
10.10.1
Synopsis: Add disk denition to list if drives (Unix only) Declaration: function AddDisk(const path: string) : Byte Visibility: default Description: AddDisk adds a lename 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 DiskFree (546) and DiskSize (546) calls. The DiskFree (546) and DiskSize (546) functions need a le on the specied drive, since this is required for the statfs system call. The names are added sequentially. The dos initialization code presets the rst three disks to: . for the current drive, /fd0/. for the rst oppy-drive (linux only). /fd1/. for the second oppy-drive (linux only). / for the rst hard disk. 545
The rst call to 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 D: to Z:) Errors: None See also: DiskFree (546), DiskSize (546)
10.10.2
DiskFree
Synopsis: Get free size on Disk. Declaration: function DiskFree(drive: Byte) : Int64 Visibility: default Description: DiskFree returns the number of free bytes on a disk. The parameter Drive indicates which disk should be checked. This parameter is 1 for oppy a:, 2 for oppy b:, etc. A value of 0 returns the free space on the current drive. Remark: For Unices: The diskfree and disksize functions need a le on the specied drive, since this is required for the statfs system call. These lenames are set in the initialization of the dos unit, and have been preset to : . for the current drive, /fd0/. for the rst oppy-drive (linux only). /fd1/. for the second oppy-drive (linux only). / for the rst hard disk. There is room for 1-26 drives. You can add a drive with the AddDisk (545) procedure. These settings can be coded in dos.pp, in the initialization part. Errors: -1 when a failure occurs, or an invalid drive number is given. See also: DiskSize (546), AddDisk (545) Listing: ./dosex/ex6.pp
Program Example6 ; uses Dos ; { Program t o demonstrate t h e D i s k S i z e and DiskFree f u n c t i o n . } begin WriteLn ( T h i s p a r t i t i o n s i z e has , DiskSize ( 0 ) , b y t e s ) ; WriteLn ( C u r r e n t l y , DiskFree ( 0 ) , b y t e s are f r e e ) ; end .
10.10.3
DiskSize
Synopsis: Get total size of disk. Declaration: function DiskSize(drive: Byte) : Int64 Visibility: default
546
Description: DiskSize returns the total size (in bytes) of a disk. The parameter Drive indicates which disk should be checked. This parameter is 1 for oppy a:, 2 for oppy b:, etc. A value of 0 returns the size of the current drive. Remark: For unix only: The diskfree and disksize functions need a le on the specied drive, since this is required for the statfs system call. These lenames are set in the initialization of the dos unit, and have been preset to : . for the current drive, /fd0/. for the rst oppy-drive (linux only). /fd1/. for the second oppy-drive (linux only). / for the rst hard disk. There is room for 1-26 drives. You can add a drive with the AddDisk (545) procedure. These settings can be coded in dos.pp, in the initialization part. For an example, see DiskFree (546). Errors: -1 when a failure occurs, or an invalid drive number is given. See also: DiskFree (546), AddDisk (545)
10.10.4
DosExitCode
Synopsis: Exit code of last executed program. Declaration: function DosExitCode : Word Visibility: default Description: DosExitCode contains (in the low byte) the exit-code of a program executed with the Exec call. Errors: None. See also: Exec (550) Listing: ./dosex/ex5.pp
Program Example5 ; uses Dos ; { Program t o demonstrate t h e Exec and DosExitCode f u n c t i o n . } begin { $IFDEF Unix } WriteLn ( E x e c u t i n g / b i n / l s l a ) ; Exec ( / b i n / l s , l a ) ; { $ELSE } WriteLn ( E x e c u t i n g D i r ) ; Exec ( GetEnv ( COMSPEC ) , /C d i r ) ; { $ENDIF } WriteLn ( Program r e t u r n e d w i t h ExitCode , Lo ( DosExitCode ) ) ; end .
547
10.10.5
DosVersion
Synopsis: Current OS version Declaration: function DosVersion : Word Visibility: default Description: 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. Remark: On systems where versions consists of more then two numbers, only the rst 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. Listing: ./dosex/ex1.pp
Program Example1 ; uses Dos ; { Program t o demonstrate t h e DosVersion f u n c t i o n . } var OS : string [ 3 2 ] ; V e r s i o n : word ; begin { $IFDEF LINUX } OS: = L i n u x ; { $ENDIF } { $ i f d e f FreeBSD } OS: = FreeBSD ; { $endif } { $ i f d e f NetBSD } OS: = NetBSD ; { $endif } { $ifdef Solaris } OS: = S o l a r i s ; { $endif } { $ i f d e f QNX} OS: = QNX ; { $endif } { $IFDEF DOS} OS: = Dos ; { $ENDIF } V e r s i o n : = DosVersion ; WriteLn ( C u r r e n t ,OS, v e r s i o n i s end .
, Lo ( V e r s i o n ) , . , Hi ( V e r s i o n ) ) ;
10.10.6
DTToUnixDate
Synopsis: Convert a DateTime to unix timestamp Declaration: function DTToUnixDate(DT: DateTime) : LongInt Visibility: default 548
Description: DTToUnixDate converts the DateTime value in DT to a unix timestamp. It is an internal function, implemented on Unix platforms, and should not be used. Errors: None. See also: UnixDateToDT (563), PackTime (560), UnpackTime (563), GetTime (558), SetTime (562)
10.10.7
EnvCount
Synopsis: Return the number of environment variables Declaration: function EnvCount : LongInt Visibility: default Description: EnvCount returns the number of environment variables. Errors: None. See also: EnvStr (549), GetEnv (554)
10.10.8
EnvStr
Synopsis: Return environment variable by index Declaration: function EnvStr(Index: LongInt) : string Visibility: default Description: EnvStr returns the Index-th Name=Value pair from the list of environment variables. The index of the rst pair is zero. Errors: The length is limited to 255 characters. See also: EnvCount (549), GetEnv (554) Listing: ./dosex/ex13.pp
Program Example13 ; uses Dos ; { Program t o demonstrate t h e EnvCount and EnvStr f u n c t i o n . } var i : Longint ; begin WriteLn ( C u r r e n t Environment i s : ) ; f o r i : = 1 to EnvCount do WriteLn ( EnvStr ( i ) ) ; end .
549
10.10.9
Exec
Synopsis: Execute another program, and wait for it to nish. Declaration: procedure Exec(const path: PathStr;const comline: ComStr) Visibility: default Description: Exec executes the program in Path, with the options given by ComLine. The program name should not appear again in ComLine, it is specied in Path. Comline contains only the parameters that are passed to the program. After the program has terminated, the procedure returns. The Exit value of the program can be consulted with the DosExitCode function. For an example, see DosExitCode (102) Errors: Errors are reported in DosError. See also: DosExitCode (102)
10.10.10
FExpand
Synopsis: Expand a relative path to an absolute path Declaration: function FExpand(const path: PathStr) : PathStr Visibility: default Description: FExpand takes its argument and expands it to a complete lename, i.e. a lename starting from the root directory of the current drive, prepended with the drive-letter or volume name (when supported). Remark: On case sensitive le systems (such as unix and linux), the resulting name is left as it is, otherwise it is converted to uppercase. Errors: FSplit (553) Listing: ./dosex/ex11.pp
Program Example11 ; uses Dos ; { Program t o demonstrate t h e FExpand f u n c t i o n . } begin WriteLn ( Expanded Name o f t h i s program i s end .
, FExpand ( ParamStr ( 0 ) ) ) ;
10.10.11
FindClose
Synopsis: Dispose resources allocated by a FindFirst (551)/FindNext (552) sequence. Declaration: procedure FindClose(var f: SearchRec) Visibility: default
550
Description: FindClose frees any resources associated with the search record F. This call is needed to free any internal resources allocated by the FindFirst (551) or FindNext (552) calls. The unix 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 searchrecs. So, to speed up the ndrst/ndnext system, the FindClose call was implemented. When you dont need a searchrec any more, you can tell this to the dos unit by issuing a FindClose call. The directory which is kept open for this searchrec is then closed, and the table slot freed. Remark: It is recommended to use the linux call Glob when looking for les on linux. Errors: Errors are reported in DosError. See also: FindFirst (551), FindNext (552)
10.10.12
FindFirst
Synopsis: Start search for one or more les. Declaration: procedure FindFirst(const path: PathStr;attr: Word;var f: SearchRec) Visibility: default Description: FindFirst searches the le specied in Path. Normal les, as well as all special les which have the attributes specied in Attr will be returned. It returns a SearchRec record for further searching in F. Path can contain the wildcard characters ? (matches any single character) and * (matches 0 ore more arbitrary characters). In this case FindFirst will return the rst le which matches the specied criteria. If DosError is different from zero, no le(s) matching the criteria was(were) found. Remark: On os/2, you cannot issue two different FindFirst calls. That is, you must close any previous search operation with FindClose (550) before starting a new one. Failure to do so will end in a Run-Time Error 6 (Invalid le handle) Errors: Errors are reported in DosError. See also: FindNext (552), FindClose (550) Listing: ./dosex/ex7.pp
Program Example7 ; uses Dos ; { Program t o demonstrate t h e F i n d F i r s t and FindNext f u n c t i o n . } var D i r : SearchRec ; begin FindFirst ( . , archive , Dir ) ; WriteLn ( FileName +Space ( 3 2 ) , F i l e S i z e : 9 ) ; while ( DosError = 0 ) do begin W r i t e l n ( D i r .Name+Space(40Length ( D i r .Name ) ) , D i r . Size : 9 ) ; FindNext ( D i r ) ; end ; FindClose ( D i r ) ; end .
551
10.10.13
FindNext
Synopsis: Find next matching le after FindFirst (551) Declaration: procedure FindNext(var f: SearchRec) Visibility: default Description: FindNext takes as an argument a SearchRec from a previous FindNext call, or a FindFirst call, and tries to nd another le which matches the criteria, specied in the FindFirst call. If DosError is different from zero, no more les matching the criteria were found. For an example, see FindFirst (551). Errors: DosError is used to report errors. See also: FindFirst (551), FindClose (550)
10.10.14
FSearch
Synopsis: Search a le in searchpath Declaration: function FSearch(path: PathStr;dirlist: string) : PathStr Visibility: default Description: FSearch searches the le Path in all directories listed in DirList. The full name of the found le is returned. DirList must be a list of directories, separated by semi-colons. When no le is found, an empty string is returned. Remark: On unix systems, DirList can also be separated by colons, as is customary on those environments. Errors: None. See also: FExpand (550) Listing: ./dosex/ex10.pp
program Example10 ; uses Dos ; { Program t o demonstrate t h e FSearch f u n c t i o n . } var s : p a t h s t r ; begin s : = FSearch ( ParamStr ( 1 ) , GetEnv ( PATH ) ) ; i f s= then WriteLn ( ParamStr ( 1 ) , n o t Found i n PATH ) else W r i t e l n ( ParamStr ( 1 ) , Found i n PATH a t , s ) ; end .
552
10.10.15
FSplit
Synopsis: Split a full-path lename in parts. Declaration: procedure FSplit(path: PathStr;var dir: DirStr;var name: NameStr; var ext: ExtStr) Visibility: default Description: FSplit splits a full le name into 3 parts : A Path, a Name and an extension (in ext.) The extension is taken to be all letters after the last dot (.). For dos, however, an exception is made when LFNSupport=False, then the extension is dened as all characters after the rst dot. Errors: None. See also: FSearch (552) Listing: ./dosex/ex12.pp
program Example12 ; uses Dos ; { Program t o demonstrate t h e F S p l i t f u n c t i o n . } var d i r : d i r s t r ; name : namestr ; ext : e x t s t r ; begin F S p l i t ( ParamStr ( 1 ) , d i r , name, e x t ) ; WriteLn ( S p l i t t e d , ParamStr ( 1 ) , i n : ) ; WriteLn ( Path : , dir ); WriteLn ( Name : ,name ) ; WriteLn ( E x t e n s i o n : , e x t ) ; end .
10.10.16
GetCBreak
Synopsis: Get control-Break ag Declaration: procedure GetCBreak(var breakvalue: Boolean) Visibility: default Description: GetCBreak gets the status of CTRL-Break checking under dos and Amiga. When BreakValue is false, then dos only checks for the CTRL-Break key-press when I/O is performed. When it is set to True, then a check is done at every system call. Remark: Under non-dos and non-Amiga operating systems, BreakValue always returns True. Errors: None See also: SetCBreak (560)
553
10.10.17
GetDate
Synopsis: Get the current date Declaration: procedure GetDate(var year: Word;var month: Word;var mday: Word; var wday: Word) Visibility: default Description: GetDate returns the systems date. Year is a number in the range 1980..2099.mday is the day of the month, wday is the day of the week, starting with Sunday as day 0. Errors: None. See also: GetTime (558), SetDate (561) Listing: ./dosex/ex2.pp
Program Example2 ; uses Dos ; { Program t o demonstrate t h e GetDate f u n c t i o n . } const DayStr : array [ 0 . . 6 ] of s t r i n g [ 3 ] = ( Sun , Mon , Tue , Wed , Thu , F r i , Sat ) ; MonthStr : array [ 1 . . 1 2 ] of s t r i n g [ 3 ] = ( Jan , Feb , Mar , Apr , May , Jun , J u l , Aug , Sep , Oct , Nov , Dec ) ; var Year , Month , Day ,WDay : word ; begin GetDate ( Year , Month , Day ,WDay ) ; WriteLn ( C u r r e n t date ) ; WriteLn ( DayStr [WDay] , , , Day , , MonthStr [ Month ] , , Year , . ) ; end .
10.10.18
GetEnv
Synopsis: Get environment variable by name. Declaration: function GetEnv(envvar: string) : string Visibility: default Description: Getenv returns the value of the environment variable EnvVar. When there is no environment variable EnvVar dened, an empty string is returned. Remark: Under some operating systems (such as unix), case is important when looking for EnvVar. Errors: None. See also: EnvCount (549), EnvStr (549) Listing: ./dosex/ex14.pp
Program Example14 ; uses Dos ; { Program t o demonstrate t h e GetEnv f u n c t i o n . } begin
554
, GetEnv ( PATH ) ) ;
10.10.19
GetFAttr
Synopsis: Get le attributes Declaration: procedure GetFAttr(var f;var attr: Word) Visibility: default Description: GetFAttr returns the le attributes of the le-variable f. F can be a untyped or typed le, or of type Text. f must have been assigned, but not opened. The attributes can be examined with the following constants : ReadOnly Hidden SysFile VolumeId Directory Archive Under linux, supported attributes are: Directory ReadOnly if the current process doesnt have access to the le. Hidden for les whose name starts with a dot (.). Errors: Errors are reported in DosError See also: SetFAttr (561) Listing: ./dosex/ex8.pp
Program Example8 ; uses Dos ; { Program t o demonstrate t h e G e t F A t t r f u n c t i o n . } var A t t r : Word ; f : File ; begin Assign ( f , ParamStr ( 1 ) ) ; GetFAttr ( f , A t t r ) ; WriteLn ( F i l e , ParamStr ( 1 ) , has a t t r i b u t e , A t t r ) ; i f ( A t t r and a r c h i v e ) < >0 then WriteLn ( A r c h i v e ) ; i f ( A t t r and d i r e c t o r y ) < >0 then WriteLn ( D i r e c t o r y ) ; i f ( A t t r and r e a d o n l y ) < >0 then WriteLn ( ReadOnly ) ; i f ( A t t r and s y s f i l e ) < >0 then WriteLn ( System ) ; i f ( A t t r and hidden ) < >0 then WriteLn ( Hidden ) ; end .
555
10.10.20
GetFTime
Synopsis: Get le last modication time. Declaration: procedure GetFTime(var f;var time: LongInt) Visibility: default Description: GetFTime returns the modication time of a le. This time is encoded and must be decoded with UnPackTime. F must be a le type, which has been assigned, and opened. Errors: Errors are reported in DosError See also: SetFTime (562), PackTime (560), UnPackTime (563) Listing: ./dosex/ex9.pp
Program Example9 ; uses Dos ; { Program t o demonstrate t h e GetFTime f u n c t i o n . } Function L0 (w: word ) : s t r i n g ; var s : string ; begin S t r (w, s ) ; i f w<10 then L0 : = 0 +s else L0 : = s ; end ; var f : File ; Time : L o n g i n t ; DT : DateTime ; begin i f Paramcount >0 then Assign ( f , ParamStr ( 1 ) ) else Assign ( f , ex9 . pp ) ; Reset ( f ) ; GetFTime ( f , Time ) ; Close ( f ) ; UnPackTime ( Time , DT ) ; Write ( F i l e , ParamStr ( 1 ) , i s l a s t m o d i f i e d on ) ; W r i t e l n ( L0 (DT . Month ) , , L0 (DT . Day ) , ,DT . Year , a t , L0 (DT . Hour ) , : , L0 (DT . Min ) ) ; end .
10.10.21
GetIntVec
Synopsis: Get interrupt vector Declaration: procedure GetIntVec(intno: Byte;var vector: pointer) Visibility: default
556
Description: GetIntVec returns the address of interrupt vector IntNo. Remark: This call does nothing, it is present for compatibility only. Modern systems do not allow low level access to the hardware. Errors: None. See also: SetIntVec (562)
10.10.22
GetLongName
Synopsis: Get the long lename of a DOS 8.3 lename. Declaration: function GetLongName(var p: string) : Boolean Visibility: default Description: This function is only implemented in the GO32V2 and Win32 versions of Free Pascal. GetLongName changes the lename p to a long lename if the API call to do this is successful. The resulting string is the long le name corresponding to the short lename p. The function returns True if the API call was successful, False otherwise. This function should only be necessary when using the DOS extender under Windows 95 and higher. Errors: If the API call was not succesfull, False is returned. See also: GetShortName (557)
10.10.23
GetMsCount
Synopsis: Number of milliseconds since a starting point. Declaration: function GetMsCount : Int64 Visibility: default Description: GetMSCount returns a number of milliseconds elapsed since a certain moment in time. This moment in time is implementation dependent. This function is used for timing purposes: Substracting the results of 2 subsequent calls to this function returns the number of milliseconds elapsed between the two calls. This call is not very reliable, it is recommended to use some system specic calls for timings. See also: GetTime (558)
10.10.24
GetShortName
Synopsis: Get the short (8.3) lename of a long lename. Declaration: function GetShortName(var p: string) : Boolean Visibility: default Description: This function is only implemented in the GO32V2 and Win32 versions of Free Pascal. GetShortName changes the lename p to a short lename if the API call to do this is successful. The resulting string is the short le name corresponding to the long lename p. The function returns True if the API call was successful, False otherwise. This function should only be necessary when using the DOS extender under Windows 95 and higher. 557
Errors: If the API call was not successful, False is returned. See also: GetLongName (557)
10.10.25
GetTime
Synopsis: Return the current time Declaration: procedure GetTime(var hour: Word;var minute: Word;var second: Word; var sec100: Word) Visibility: default Description: GetTime returns the systems time. Hour is a on a 24-hour time scale. sec100 is in hundredth of a second. Remark: Certain operating systems (such as Amiga), always set the sec100 eld to zero. Errors: None. See also: GetDate (554), SetTime (562) Listing: ./dosex/ex3.pp
Program Example3 ; uses Dos ; { Program t o demonstrate t h e GetTime f u n c t i o n . } Function L0 (w: word ) : s t r i n g ; var s : string ; begin S t r (w, s ) ; i f w<10 then L0 : = 0 +s else L0 : = s ; end ; var Hour , Min , Sec , HSec : word ; begin GetTime ( Hour , Min , Sec , HSec ) ; WriteLn ( C u r r e n t t i m e ) ; WriteLn ( L0 ( Hour ) , : , L0 ( Min ) , : , L0 ( Sec ) ) ; end .
10.10.26
GetVerify
Synopsis: Get verify ag Declaration: procedure GetVerify(var verify: Boolean) Visibility: default
558
Description: GetVerify returns the status of the verify ag under dos. When Verify is True, then dos checks data which are written to disk, by reading them after writing. If Verify is False, then data written to disk are not veried. Remark: Under non-dos systems (excluding os/2 applications running under vanilla DOS), Verify is always True. Errors: None. See also: SetVerify (562)
10.10.27
Intr
Synopsis: Execute interrupt Declaration: procedure Intr(intno: Byte;var regs: Registers) Visibility: default Description: Intr executes a software interrupt number IntNo (must be between 0 and 255), with processor registers set to Regs. After the interrupt call returned, the processor registers are saved in Regs. Remark: Under non-dos operating systems, this call does nothing. Errors: None. See also: MSDos (559)
10.10.28
Keep
Synopsis: Terminate and stay resident. Declaration: procedure Keep(exitcode: Word) Visibility: default Description: Keep terminates the program, but stays in memory. This is used for TSR (Terminate Stay Resident) programs which catch some interrupt. ExitCode is the same parameter as the Halt function takes. Remark: This call does nothing, it is present for compatibility only. Errors: None.
10.10.29
MSDos
Synopsis: Execute MS-DOS system call Declaration: procedure MSDos(var regs: Registers) Visibility: default Description: MSDos executes an operating system call. This is the same as doing a Intr call with the interrupt number for an os call. Remark: Under non-dos operating systems, this call does nothing. On DOS systems, this calls interrupt $21. Errors: None. See also: Intr (559)
559
10.10.30
PackTime
Synopsis: Pack DateTime value to a packed-time format. Declaration: procedure PackTime(var t: DateTime;var p: LongInt) Visibility: default Description: UnPackTime converts the date and time specied in T to a packed-time format which can be fed to SetFTime. Errors: None. See also: SetFTime (562), FindFirst (551), FindNext (552), UnPackTime (563) Listing: ./dosex/ex4.pp
Program Example4 ; uses Dos ; { Program t o demonstrate t h e PackTime and UnPackTime f u n c t i o n s . } var DT : DateTime ; Time : l o n g i n t ; begin with DT do begin Year : = 2 0 0 8 ; Month : = 1 1 ; Day : = 1 1 ; Hour : = 1 1 ; Min : = 1 1 ; Sec : = 1 1 ; end ; PackTime (DT, Time ) ; WriteLn ( Packed Time : , Time ) ; UnPackTime ( Time , DT ) ; WriteLn ( Unpacked Again : ) ; with DT do begin WriteLn ( Year , Year ) ; WriteLn ( Month , Month ) ; WriteLn ( Day , Day ) ; WriteLn ( Hour , Hour ) ; WriteLn ( Min , Min ) ; WriteLn ( Sec , Sec ) ; end ; end .
10.10.31
SetCBreak
Synopsis: Set Control-Break ag status Declaration: procedure SetCBreak(breakvalue: Boolean) Visibility: default
560
Description: SetCBreak sets the status of CTRL-Break checking. When BreakValue is false, then dos only checks for the CTRL-Break key-press when I/O is performed. When it is set to True, then a check is done at every system call. Remark: Under non-dos and non-Amiga operating systems, this call does nothing. Errors: None. See also: GetCBreak (553)
10.10.32
SetDate
Synopsis: Set system date Declaration: procedure SetDate(year: Word;month: Word;day: Word) Visibility: default Description: SetDate sets the systems internal date. Year is a number between 1980 and 2099. Remark: On a unix machine, there must be root privileges, otherwise this routine will do nothing. On other unix systems, this call currently does nothing. Errors: None. See also: GetDate (554), SetTime (562)
10.10.33
SetFAttr
Synopsis: Set le attributes Declaration: procedure SetFAttr(var f;attr: Word) Visibility: default Description: SetFAttr sets the le attributes of the le-variable F. F can be a untyped or typed le, or of type Text. F must have been assigned, but not opened. The attributes can be a sum of the following constants: ReadOnly Hidden SysFile VolumeId Directory Archive Remark: 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 DosError. See also: GetFAttr (555)
561
10.10.34
SetFTime
Synopsis: Set le modication time. Declaration: procedure SetFTime(var f;time: LongInt) Visibility: default Description: SetFTime sets the modication time of a le, this time is encoded and must be encoded with PackTime. F must be a le type, which has been assigned, and opened. Remark: 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 DosError See also: GetFTime (556), PackTime (560), UnPackTime (563)
10.10.35
SetIntVec
Synopsis: Set interrupt vector Declaration: procedure SetIntVec(intno: Byte;vector: pointer) Visibility: default Description: SetIntVec sets interrupt vector IntNo to Vector. Vector should point to an interrupt procedure. Remark: This call does nothing, it is present for compatibility only. Errors: None. See also: GetIntVec (556)
10.10.36
SetTime
Synopsis: Set system time Declaration: procedure SetTime(hour: Word;minute: Word;second: Word;sec100: Word) Visibility: default Description: SetTime sets the systems internal clock. The Hour parameter is on a 24-hour time scale. Remark: 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. See also: GetTime (558), SetDate (561)
10.10.37
SetVerify
562
Description: SetVerify sets the status of the verify ag under dos. When Verify is True, then dos checks data which are written to disk, by reading them after writing. If Verify is False, then data written to disk are not veried. Remark: Under non-dos operating systems (excluding os/2 applications running under vanilla dos), Verify is always True. Errors: None. See also: SetVerify (562)
10.10.38
SwapVectors
Synopsis: Swap interrupt vectors Declaration: procedure SwapVectors Visibility: default Description: 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 Exec call. Remark: Under certain operating systems, this routine may be implemented as an empty stub. Errors: None. See also: Exec (550), SetIntVec (562)
10.10.39
UnixDateToDt
Synopsis: Convert a unix timestamp to a DateTime record Declaration: procedure UnixDateToDt(SecsPast: LongInt;var Dt: DateTime) Visibility: default Description: DTToUnixDate converts the unix timestamp value in SecsPast to a DateTime representation in DT. It is an internal function, implemented on Unix platforms, and should not be used. Errors: None. See also: DTToUnixDate (548), PackTime (560), UnpackTime (563), GetTime (558), SetTime (562)
10.10.40
UnpackTime
Synopsis: Unpack packed le time to a DateTime value Declaration: procedure UnpackTime(p: LongInt;var t: DateTime) Visibility: default Description: UnPackTime converts the le-modication time in p to a DateTime record. The le-modication time can be returned by GetFTime, FindFirst or FindNext calls. For an example, see PackTime (560). Errors: None. See also: GetFTime (556), FindFirst (551), FindNext (552), PackTime (560)
563
10.10.41
weekday
Synopsis: Return the day of the week Declaration: function weekday(y: LongInt;m: LongInt;d: LongInt) : LongInt Visibility: default Description: WeekDay returns the day of the week on which the day Y/M/D falls. Sunday is represented by 0, Saturday is 6. Errors: On error, -1 is returned. See also: PackTime (560), UnpackTime (563), GetTime (558), SetTime (562)
564
Chapter 11
The dxeload unit was implemented by Pierre Mueller for dos, it allows to load a DXE le (an object le with 1 entry point) into memory and return a pointer to the entry point. It exists only for dos.
11.2
11.2.1
Synopsis: Load DXE le in memory Declaration: function dxe_load(filename: string) : pointer Visibility: default Description: dxe_load loads the contents of the le filename into memory. It performs the necessary relocations in the object code, and returns then a pointer to the entry point of the code. For an example, see the emu387 (569) unit in the RTL. Errors: If an error occurs during the load or relocations, Nil is returned.
565
Chapter 12
The Dynlibs unit provides support for dynamically loading shared libraries. It is available only on those platforms that support shared libraries. The functionality available here may only be a part of the functionality available on each separate platform, in the interest of portability. On unix platforms, using this unit will cause the program to be linked to the C library, as most shared libraries are implemented in C and the dynamical linker too.
12.2
12.2.1
NilHandle = (0) Correctly typed Nil handle - returned on error by LoadLibrary (567) SharedSuffix = so SharedSuffix contains the extension of a shared library (dynamically loadable library) on the current platform. It does not contain the . (dot) character. This can be used to determine the name of a shared library in a platform independent way.
12.2.2
Types
HModule = TLibHandle Alias for TLibHandle (566) type. TLibHandle = PtrInt TLibHandle should be considered an opaque type. It is dened differently on various platforms. The denition shown here depends on the platform for which the documentation was generated.
566
12.3
12.3.1
Synopsis: For compatibility with Delphi/Windows: Unload a library Declaration: function FreeLibrary(Lib: TLibHandle) : Boolean Visibility: default Description: FreeLibrary provides the same functionality as UnloadLibrary (568), and is provided for compatibility with Delphi. See also: UnloadLibrary (568)
12.3.2
GetProcAddress
Synopsis: For compatibility with Delphi/Windows: Get the address of a procedure Declaration: function GetProcAddress(Lib: TLibHandle;const ProcName: AnsiString) : Pointer Visibility: default Description: GetProcAddress provides the same functionality as GetProcedureAddress (567), and is provided for compatibility with Delphi. See also: GetProcedureAddress (567)
12.3.3
GetProcedureAddress
Synopsis: Get the address of a procedure or symbol in a dynamic library. Declaration: function GetProcedureAddress(Lib: TLibHandle;const ProcName: AnsiString) : Pointer Visibility: default Description: GetProcedureAddress returns a pointer to the location in memory of the symbol ProcName in the dynamically loaded library specied by its handle lib. If the symbol cannot be found or the handle is invalid, Nil is returned. On Windows, only an exported procedure or function can be searched this way. On Unix platforms the location of any exported symbol can be retrieved this way. Errors: If the symbol cannot be found, Nil is returned. See also: LoadLibrary (567), UnLoadLibrary (568)
12.3.4
LoadLibrary
Synopsis: Load a dynamic library and return a handle to it. Declaration: function LoadLibrary(const Name: AnsiString) : TLibHandle Visibility: default
567
Description: LoadLibrary loads a dynamic library in le Name and returns a handle to it. If the library cannot be loaded, NilHandle (566) is returned. No assumptions should be made about the location of the loaded library if a relative pathname is specied. The behaviour is dependent on the platform. Therefore it is best to specify an absolute pathname if possible. Errors: On error, NilHandle (566) is returned. See also: UnloadLibrary (568), GetProcedureAddress (567)
12.3.5
SafeLoadLibrary
Synopsis: Saves the control word and loads a library Declaration: function SafeLoadLibrary(const Name: AnsiString) : TLibHandle Visibility: default Description: SafeLoadLibary saves the FPU control word, and calls LoadLibrary (567) with library name Name. After that function has returned, the FPU control word is saved again. (only on Intel i386 CPUS). See also: LoadLibrary (567)
12.3.6
UnloadLibrary
Synopsis: Unload a previously loaded library Declaration: function UnloadLibrary(Lib: TLibHandle) : Boolean Visibility: default Description: UnloadLibrary unloads a previously loaded library (specied by the handle lib). The call returns True if succesful, False otherwisa. Errors: On error, False is returned. See also: LoadLibrary (567), GetProcedureAddress (567)
568
Chapter 13
The emu387 unit was written by Pierre Mueller for dos. It sets up the coprocessor emulation for FPC under dos. It is not necessary to use this unit on other OS platforms because they either simply do not run on a machine without coprocessor, or they provide the coprocessor emulation themselves. It shouldnt be necessary to use the function in this unit, it should be enough to place this unit in the uses clause of your program to enable the coprocessor emulation under dos. The unit initialization code will try and load the coprocessor emulation code and initialize it.
13.2
13.2.1
Synopsis: Set up coprocessor emulation. Declaration: procedure npxsetup(prog_name: string) Visibility: default Description: npxsetup checks whether a coprocessor is found. If not, it loads the le wmemu387.dxe into memory and initializes the code in it. If the environment variable 387 is set to N, then the emulation will be loaded, even if there is a coprocessor present. If the variable doesnt exist, or is set to any other value, the unit will try to detect the presence of a coprocessor unit. The function searches the le wmemu387.dxe in the following way: 1.If the environment variable EMU387 is set, then it is assumed to point at the wmemu387.dxe le. 2.if the environment variable EMU387 does not exist, then the function will take the path part of prog_name and look in that directory for the le wmemu387.dxe. It should never be necessary to call this function, because the initialization code of the unit contains a call to the function with as an argument paramstr(0). This means that you should deliver the le wmemu387.dxe together with your program. Errors: If there is an error, an error message is printed to standard error, and the program is halted, since any oating-point code is bound to fail anyhow.
569
Chapter 14
The exeinfo unit implements some cross-platform routines to examine the contents of an executable: information about sections, mapping addresses to loaded modules etc. It is mainly used by the lineinfo (736) and lnfodwrf (756) unit to examine the binary for debug info.
14.2
14.2.1
TExeFile = record f : File; size : Int64; isopen : Boolean; nsects : LongInt; sechdrofs : ptruint; secstrofs : ptruint; processaddress : ptruint; FunctionRelative : Boolean; ImgOffset : ptruint; filename : string; buf : Array[0..4095] of Byte; bufsize : LongInt; bufcnt : LongInt; end
TExeFile is a record used in the various calls of this unit. It contains a le descriptor, and various elds that describe the executable. The structure of TExeFile is opaque, that is, one shouldnt rely on the exactness of this structure, it may change any time in the future.
570
14.3
14.3.1
Synopsis: Close a previously opened le. Declaration: function CloseExeFile(var e: TExeFile) : Boolean Visibility: default Description: CloseExeFile closes an executable le image previously opened with OpenExeFile (571), and represented by e. The function returns True if the le was closed succesfully, or False if something went wrong. Errors: In case of an error, False is returned. See also: OpenExeFile (571)
14.3.2
FindExeSection
Synopsis: Find a section in the binary image. Declaration: function FindExeSection(var e: TExeFile;const secname: string; var secofs: LongInt;var seclen: LongInt) : Boolean Visibility: default Description: FindExeSection examines the binary that was opened with OpenExeFile (571) (represented by e) and searches for the section named secname. If found, the section offset is returned in secofs and the section length (in bytes) is returned in seclen. The function returns True if the section was found, False if not. See also: OpenExeFile (571)
14.3.3
GetModuleByAddr
Synopsis: Return the module name by address Declaration: procedure GetModuleByAddr(addr: pointer;var baseaddr: pointer; var filename: string) Visibility: default Description: GetModuleByAddr returns the name of the module that contains address addr. If succesful, it returns True and returns the lename in FileName and the base address at which it is loaded in BaseAddr.
14.3.4
OpenExeFile
Synopsis: Open an executable le Declaration: function OpenExeFile(var e: TExeFile;const fn: string) : Boolean Visibility: default
571
Description: OpenExeFile opens the executable le fn and initializes the structure e for subsequent calls to routines in the exeinfo unit. The function returns True if the le was opened succesfully, false otherwise. See also: FindExeSection (571), CloseExeFile (571), ReadDebugLink (572)
14.3.5
ReadDebugLink
Synopsis: Read the location of a debug info lename Declaration: function ReadDebugLink(var e: TExeFile;var dbgfn: string) : Boolean Visibility: default Description: ReadDebugLink examines the .gnu_debuglink section to see if the debug information is stored in an external le. If so, then the name of the le with the debug information is returned in the dbgfn parameter. The function returns false if there is no external debug information le, or if the le with debug information does not exist. It is searched next to the binary le or in the current directory. See also: OpenExeFile (571), CloseExeFile (571)
572
Chapter 15
This document describes the GETOPTS unit for Free Pascal. It was written for linux by Michael Van Canneyt. It now also works for all supported platforms. The getopts unit provides a mechanism to handle command-line options in a structured way, much like the GNU getopts mechanism. It allows you to dene the valid options for you program, and the unit will then parse the command-line options for you, and inform you of any errors.
15.2
15.2.1
EndOfOptions = #255 Returned by getopt (575),getlongopts (575) to indicate that there are no more options. No_Argument = 0 Species that a long option does not take an argument. Optional_Argument = 2 Species that a long option optionally takes an argument. OptSpecifier : Set of Char = [-] Character indicating an option on the command-line. Required_Argument = 1 Species that a long option needs an argument.
573
15.2.2
Types
Orderings = (require_order,permute,return_in_order)
Table 15.1: Enumeration values for type Orderings Value permute require_order return_in_order Explanation Change command-line options. Dont touch the ordering of the command-line options Return options in the correct order.
Command-line ordering options. POption = ^TOption Pointer to TOption (574) record. TOption = record Name : string; Has_arg : Integer; Flag : PChar; Value : Char; end
The TOption type is used to communicate the long options to GetLongOpts (575). The Name eld is the name of the option. Has_arg species if the option wants an argument, Flag is a pointer to a char, which is set to Value, if it is non-nil.
15.2.3
Variables
OptArg : string Set to the argument of an option, if the option needs one. OptErr : Boolean Indicates whether getopt() prints error messages. OptInd : LongInt when all options have been processed, optind is the index of the rst non-option parameter. This is a read-only variable. Note that it can become equal to paramcount+1. OptOpt : Char In case of an error, contains the character causing the error.
574
15.3
15.3.1
Synopsis: Return next long option. Declaration: function GetLongOpts(ShortOpts: string;LongOpts: POption; var Longind: LongInt) : Char Visibility: default Description: Returns the next option found on the command-line, taking into account long options as well. If no more options are found, returns EndOfOptions. If the option requires an argument, it is returned in the OptArg variable. ShortOptions is a string containing all possible one-letter options. (see Getopt (575) for its description and use) LongOpts is a pointer to the rst element of an array of Option records, the last of which needs a name of zero length. The function tries to match the names even partially (i.e. -app will match e.g. the append option), but will report an error in case of ambiguity. If the option needs an argument, set Has_arg to Required_argument, if the option optionally has an argument, set Has_arg to Optional_argument. If the option needs no argument, set Has_arg to zero. Required arguments can be specied in two ways : 1.Pasted to the option : -option=value 2.As a separate argument : -option value Optional arguments can only be specied through the rst method. Errors: see Getopt (575). See also: Getopt (575)
15.3.2
GetOpt
Synopsis: Get next short option. Declaration: function GetOpt(ShortOpts: string) : Char Visibility: default Description: Returns the next option found on the command-line. If no more options are found, returns EndOfOptions. If the option requires an argument, it is returned in the OptArg variable. ShortOptions is a string containing all possible one-letter options. If a letter is followed by a colon (:), then that option needs an argument. If a letter is followed by 2 colons, the option has an optional argument. If the rst character of shortoptions is a + then options following a non-option are regarded as non-options (standard Unix behavior). If it is a -, then all nonoptions are treated as arguments of a option with character #0. This is useful for applications that require their options in the exact order as they appear on the command-line. If the rst character of shortoptions is none of the above, options and non-options are permuted, so all non-options are behind all options. This allows options and non-options to be in random order on the command line. Errors: Errors are reported through giving back a ? character. OptOpt then gives the character which caused the error. If OptErr is True then getopt prints an error-message to stdout. See also: GetLongOpts (575)
575
Listing: ./optex/optex.pp
program t e s t o p t ; { Program t o depmonstrate t h e g e t o p t s f u n c t i o n . } { V a l i d c a l l s t o t h i s program are optex verbose add me d e l e t e you optex append c r e a t e c h i l d optex ab c me d you and so on } uses g e t o p t s ; var c : char ; optionindex : Longint ; t h e o p t s : array [ 1 . . 7 ] of TOption ; begin with t h e o p t s [ 1 ] do begin name: = add ; has_arg : = 1 ; f l a g := n i l ; value :=#0; end ; with t h e o p t s [ 2 ] do begin name: = append ; has_arg : = 0 ; f l a g := n i l ; value :=#0; end ; with t h e o p t s [ 3 ] do begin name: = d e l e t e ; has_arg : = 1 ; f l a g := n i l ; value :=#0; end ; with t h e o p t s [ 4 ] do begin name: = verbose ; has_arg : = 0 ; f l a g := n i l ; value :=#0; end ; with t h e o p t s [ 5 ] do begin name: = c r e a t e ; has_arg : = 1 ; f l a g := n i l ; value := c end ; with t h e o p t s [ 6 ] do begin name: = f i l e ; has_arg : = 1 ;
576
f l a g := n i l ; value :=#0; end ; with t h e o p t s [ 7 ] do begin name: = ; has_arg : = 0 ; f l a g := n i l ; end ; c :=#0; repeat c : = g e t l o n g o p t s ( abc : d :012 , @theopts [ 1 ] , o p t i o n i n d e x ) ; case c of 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 : begin w r i t e l n ( Got o p t i n d : , c ) end ; # 0 : begin w r i t e ( Long o p t i o n : , t h e o p t s [ o p t i o n i n d e x ] . name ) ; i f t h e o p t s [ o p t i o n i n d e x ] . has_arg >0 then w r i t e l n ( With v a l u e : , optarg ) else writeln end ; a : w r i t e l n ( Option a . ) ; b : w r i t e l n ( Option b . ) ; c : w r i t e l n ( Option c : , o p t a r g ) ; d : w r i t e l n ( Option d : , o p t a r g ) ; ? , : : writeln ( Error with opt : , optopt ) ; end ; { case } u n t i l c= e n d o f o p t i o n s ; i f o p t i n d <=paramcount then begin w r i t e ( Non o p t i o n s : ) ; while o p t i n d <=paramcount do begin w r i t e ( paramstr ( o p t i n d ) , ) ; inc ( o p t i n d ) end ; writeln end end .
577
Chapter 16
This document describes the GO32 unit for the Free Pascal compiler under dos. It was donated by Thomas Schatzl (tom_at_work@geocities.com), for which my thanks. This unit was rst written for dos by Florian Klaemp. Only the GO32V2 DPMI mode is discussed by me here due to the fact that new applications shouldnt be created with the older GO32V1 model. The go32v2 version is much more advanced and better. Additionally a lot of functions only work in DPMI mode anyway. I hope the following explanations and introductions arent too confusing at all. If you notice an error or bug send it to the FPC mailing list or directly to me. So lets get started and happy and error free coding I wish you.... Thomas Schatzl, 25. August 1998
16.2
The callback mechanism can be thought of as the converse of calling a real mode procedure (i.e. interrupt), which allows your program to pass information to a real mode program, or obtain services from it in a manner thats transparent to the real mode program. In order to make a real mode callback available, you must rst get the real mode callback address of your procedure and the selector and offset of a register data structure. This real mode callback address (this is a segment:offset address) can be passed to a real mode program via a software interrupt, a dos memory block or any other convenient mechanism. When the real mode program calls the callback (via a far call), the DPMI host saves the registers contents in the supplied register data structure, switches into protected mode, and enters the callback routine with the following settings: interrupts disabled %CS:%EIP = 48 bit pointer specied in the original call to get_rm_callback (599) %DS:%ESI = 48 bit pointer to to real mode SS:SP %ES:%EDI = 48 bit pointer of real mode register data structure. %SS:%ESP = locked protected mode stack All other registers undened The callback procedure can then extract its parameters from the real mode register data structure and/or copy parameters from the real mode stack to the protected mode stack. Recall that the segment 578
register elds of the real mode register data structure contain segment or paragraph addresses that are not valid in protected mode. Far pointers passed in the real mode register data structure must be translated to virtual addresses before they can be used with a protected mode program. The callback procedure exits by executing an IRET with the address of the real mode register data structure in %ES:%EDI, passing information back to the real mode caller by modifying the contents of the real mode register data structure and/or manipulating the contents of the real mode stack. The callback procedure is responsible for setting the proper address for resumption of real mode execution into the real mode register data structure; typically, this is accomplished by extracting the return address from the real mode stack and placing it into the %CS:%EIP elds of the real mode register data structure. After the IRET, the DPMI host switches the CPU back into real mode, loads ALL registers with the contents of the real mode register data structure, and nally returns control to the real mode program. All variables and code touched by the callback procedure MUST be locked to prevent page faults. See also: get_rm_callback (599), free_rm_callback (595), lock_code (608), lock_data (608)
16.3
Simply execute a realintr() call with the desired interrupt number and the supplied register data structure. But some of these interrupts require you to supply them a pointer to a buffer where they can store data to or obtain data from in memory. These interrupts are real mode functions and so they only can access the rst Mb of linear address space, not FPCs data segment. For this reason FPC supplies a pre-initialized dos memory location within the GO32 unit. This buffer is internally used for dos functions too and so its contents may change when calling other procedures. Its size can be obtained with tb_size (617) and its linear address via transfer_buffer (617). Another way is to allocate a completely new dos memory area via the global_dos_alloc (605) function for your use and supply its real mode address. See also: tb_size (617), transfer_buffer (617), global_dos_alloc (605), global_dos_free (606), realintr (610) Listing: ./go32ex/softint.pp
uses go32 ; var r : trealregs ; begin r . ah : = $30 ; r . a l : = $01 ; r e a l i n t r ( $21 , r ) ; W r i t e l n ( DOS v , r . a l , . , r . ah , d e t e c t e d ) ; end .
Listing: ./go32ex/rmpmint.pp
uses crt , go32 ; var r : trealregs ; axreg : Word ; oldint21h : tseginfo ;
579
newint21h : t s e g i n f o ; procedure i n t 2 1 h _ h a n d l e r ; assembler ; asm cmpw $0x3001 , % ax jne . LCallOld movw $0x3112 , % ax iret . LCallOld : l j m p %cs : o l d i n t 2 1 h end ; procedure resume ; begin Writeln ; Write ( press any key t o resume ) ; readkey ; gotoxy ( 1 , wherey ) ; c l r e o l ; end ; begin clrscr ; W r i t e l n ( E x e c u t i n g r e a l mode i n t e r r u p t ) ; resume ; r . ah : = $30 ; r . a l : = $01 ; r e a l i n t r ( $21 , r ) ; W r i t e l n ( DOS v , r . a l , . , r . ah , d e t e c t e d ) ; resume ; W r i t e l n ( E x e c u t i n g p r o t e c t e d mode i n t e r r u p t w i t h o u t our own , handler ) ; Writeln ; asm movb $0x30 , % ah movb $0x01 , % a l i n t $0x21 movw %ax , axreg end ; W r i t e l n ( DOS v , r . a l , . , r . ah , d e t e c t e d ) ; resume ; W r i t e l n ( As you can see t h e DPMI h o s t s d e f a u l t p r o t e c t e d mode , handler ) ; W r i t e l n ( s i m p l y r e d i r e c t s i t t o t h e r e a l mode h a n d l e r ) ; resume ; W r i t e l n ( Now exchanging t h e p r o t e c t e d mode i n t e r r u p t w i t h our , own h a n d l e r ) ; resume ; newint21h . o f f s e t : = @int21h_handler ; newint21h . segment : = get_cs ; g e t _ p m _ i n t e r r u p t ( $21 , o l d i n t 2 1 h ) ; s e t _ p m _ i n t e r r u p t ( $21 , newint21h ) ; W r i t e l n ( E x e c u t i n g r e a l mode i n t e r r u p t again ) ; resume ; r . ah : = $30 ; r . a l : = $01 ; r e a l i n t r ( $21 , r ) ; W r i t e l n ( DOS v , r . a l , . , r . ah , d e t e c t e d ) ; Writeln ; W r i t e l n ( See , i t d i d n t change i n any way . ) ; resume ; W r i t e l n ( Now c a l l i n g p r o t e c t e d mode i n t e r r u p t ) ;
580
resume ; asm movb $0x30 , % ah movb $0x01 , % a l i n t $0x21 movw %ax , axreg end ; W r i t e l n ( DOS v , l o ( axreg ) , . , h i ( axreg ) , d e t e c t e d ) ; Writeln ; W r i t e l n ( Now you can see t h a t t h e r e s a d i s t i n c t i o n between , t h e two ways o f c a l l i n g i n t e r r u p t s . . . ) ; s e t _ p m _ i n t e r r u p t ( $21 , o l d i n t 2 1 h ) ; end .
16.4
Software interrupts
Ordinarily, a handler installed with set_pm_interrupt (614) only services software interrupts that are executed in protected mode; real mode software interrupts can be redirected by set_rm_interrupt (615). See also: set_rm_interrupt (615), get_rm_interrupt (602), set_pm_interrupt (614), get_pm_interrupt (599), lock_data (608), lock_code (608), enable (594), disable (592), outportb (609)
16.5
Hardware interrupts
Hardware interrupts are generated by hardware devices when something unusual happens; this could be a keypress or a mouse move or any other action. This is done to minimize CPU time, else the CPU would have to check all installed hardware for data in a big loop (this method is called polling) and this would take much time. A standard IBM-PC has two interrupt controllers, that are responsible for these hardware interrupts: both allow up to 8 different interrupt sources (IRQs, interrupt requests). The second controller is connected to the rst through IRQ 2 for compatibility reasons, e.g. if controller 1 gets an IRQ 2, he hands the IRQ over to controller 2. Because of this up to 15 different hardware interrupt sources can be handled. IRQ 0 through IRQ 7 are mapped to interrupts 8h to Fh and the second controller (IRQ 8 to 15) is mapped to interrupt 70h to 77h. All of the code and data touched by these handlers MUST be locked (via the various locking functions) to avoid page faults at interrupt time. Because hardware interrupts are called (as in real mode) with interrupts disabled, the handler has to enable them before it returns to normal program execution. Additionally a hardware interrupt must send an EOI (end of interrupt) command to the responsible controller; this is acomplished by sending the value 20h to port 20h (for the rst controller) or A0h (for the second controller). The following example shows how to redirect the keyboard interrupt. Listing: ./go32ex/keyclick.pp
{$ASMMODE ATT } {$MODE FPC} uses crt , go32 ; const k b d i n t = $9 ;
581
var oldint9_handler : tseginfo ; newint9_handler : t s e g i n f o ; clickproc : pointer ; backupDS : Word ; e x t e r n a l name _ _ _ v 2 p r t 0 _ d s _ a l i a s ; procedure i n t 9 _ h a n d l e r ; assembler ; asm cli p u s h l %ds p u s h l %es pushl % f s p u s h l %gs pushal movw %cs : backupDS , % ax movw %ax , % ds movw %ax , % es movw dosmemselector , % ax movw %ax , % f s call clickproc popal p o p l %gs popl % f s p o p l %es p o p l %ds l j m p %cs : o l d i n t 9 _ h a n d l e r end ; procedure int9_dummy ; begin end ; procedure c l i c k e r ; begin sound ( 5 0 0 ) ; d e l a y ( 1 0 ) ; nosound ; end ; procedure clicker_dummy ; begin end ; procedure i n s t a l l _ c l i c k ; begin c l i c k p r o c : = @clicker ; lock_data ( clickproc , sizeof ( c l i c k p r o c ) ) ; l o c k _ d a t a ( dosmemselector , s i z e o f ( dosmemselector ) ) ; lock_code ( @clicker , l o n g i n t ( @clicker_dummy ) l o n g i n t ( @ c l i c k e r ) ) ; lock_code ( @int9_handler , l o n g i n t ( @int9_dummy) l o n g i n t ( @int9_handler ) ) ; n e w i n t 9 _ h a n d l e r . o f f s e t : = @int9_handler ; n e w i n t 9 _ h a n d l e r . segment : = get_cs ; get_pm_interrupt ( kbdint , oldint9_handler ) ; set_pm_interrupt ( kbdint , newint9_handler ) ; end ; procedure r e m o v e _ c l i c k ; begin set_pm_interrupt ( kbdint , oldint9_handler ) ; u nl o ck _ da t a ( dosmemselector , s i z e o f ( dosmemselector ) ) ; u nl o ck _ da t a ( c l i c k p r o c , s i z e o f ( c l i c k p r o c ) ) ;
582
unlock_code ( @clicker , l o n g i n t ( @clicker_dummy) l o n g i n t ( @ c l i c k e r ) ) ; unlock_code ( @int9_handler , l o n g i n t ( @int9_dummy) l o n g i n t ( @int9_handler ) ) ; end ; var ch : char ; begin install_click ; W r i t e l n ( E n t e r any message . Press r e t u r n when f i n i s h e d ) ; while ( ch < > # 1 3 ) do begin ch : = readkey ; w r i t e ( ch ) ; end ; remove_click ; end .
16.6
Disabling interrupts
The GO32 unit provides the two procedures disable() and enable() to disable and enable all interrupts.
16.7
Interrupt redirection with FPC pascal is done via the set_pm_interrupt() for protected mode interrupts or via the set_rm_interrupt() for real mode interrupts.
16.8
As mentioned before, theres a distinction between real mode interrupts and protected mode interrupts; the latter are protected mode programs, while the former must be real mode programs. To call a protected mode interrupt handler, an assembly int call must be issued, while the other is called via the realintr() or intr() function. Consequently, a real mode interrupt then must either reside in dos memory (<1MB) or the application must allocate a real mode callback address via the get_rm_callback() function.
16.9
The interrupt functions are real-mode procedures; they normally cant be called in protected mode without the risk of an protection fault. So the DPMI host creates an interrupt descriptor table for the application. Initially all software interrupts (except for int 31h, 2Fh and 21h function 4Ch) or external hardware interrupts are simply directed to a handler that reects the interrupt in real-mode, i.e. the DPMI hosts default handlers switch the CPU to real-mode, issue the interrupt and switch back to protected mode. The contents of general registers and ags are passed to the real mode handler and the modied registers and ags are returned to the protected mode handler. Segment registers and stack pointer are not passed between modes.
583
16.10
Interrupt redirection
Interrupts are program interruption requests, which in one or another way get to the processor; theres a distinction between software and hardware interrupts. The former are explicitely called by an int instruction and are a bit comparable to normal functions. Hardware interrupts come from external devices like the keyboard or mouse. Functions that handle hardware interrupts are called handlers.
16.11
Processor access
These are some functions to access various segment registers (%cs, %ds, %ss) which makes your work a bit easier. See also: get_cs (595), get_ds (596), get_ss (604)
16.12
The I/O port access is done via the various inportb (606), outportb (609) functions which are available. Additionally Free Pascal supports the Turbo Pascal PORT[]-arrays but it is by no means recommened to use them, because theyre only for compatibility purposes. See also: outportb (609), inportb (606)
16.13
Dos memory is accessed by the predened dosmemselector selector; the GO32 unit additionally provides some functions to help you with standard tasks, like copying memory from heap to dos memory and the likes. Because of this it is strongly recommened to use them, but you are still free to use the provided standard memory accessing functions which use 48 bit pointers. The third, but only thought for compatibility purposes, is using the mem[]-arrays. These arrays map the whole 1 Mb dos space. They shouldnt be used within new programs. To convert a segment:offset real mode address to a protected mode linear address you have to multiply the segment by 16 and add its offset. This linear address can be used in combination with the DOSMEMSELECTOR variable. See also: dosmemget (586), dosmemput (586), dosmemmove (586), dosmemllchar (585), dosmemllword (586), seg_move (613), seg_llchar (612), seg_llword (613)
16.14
FPC specialities
The %ds and %es selector MUST always contain the same value or some system routines may crash when called. The %fs selector is preloaded with the DOSMEMSELECTOR variable at startup, and it MUST be restored after use, because again FPC relys on this for some functions. Luckily we asm programmers can still use the %gs selector for our own purposes, but for how long ? See also: get_cs (595), get_ds (596), get_ss (604), allocate_ldt_descriptors (589), free_ldt_descriptor (594), segment_to_descriptor (611), get_next_selector_increment_value (598), get_segment_base_address (603), set_segment_base_address (616), set_segment_limit (616), create_code_segment_alias_descriptor (592)
584
16.15
Descriptors are a bit like real mode segments; they describe (as the name implies) a memory area in protected mode. A descriptor contains information about segment length, its base address and the attributes of it (i.e. type, access rights, ...). These descriptors are stored internally in a so-called descriptor table, which is basically an array of such descriptors. Selectors are roughly an index into this table. Because these segments can be up to 4 GB in size, 32 bits arent sufcient anymore to describe a single memory location like in real mode. 48 bits are now needed to do this, a 32 bit address and a 16 bit sized selector. The GO32 unit provides the tseginfo record to store such a pointer. But due to the fact that most of the time data is stored and accessed in the %ds selector, FPC assumes that all pointers point to a memory location of this selector. So a single pointer is still only 32 bits in size. This value represents the offset from the data segment base address to this memory location.
16.16
What is DPMI
The dos Protected Mode Interface helps you with various aspects of protected mode programming. These are roughly divided into descriptor handling, access to dos memory, management of interrupts and exceptions, calls to real mode functions and other stuff. Additionally it automatically provides swapping to disk for memory intensive applications. A DPMI host (either a Windows dos box or CWSDPMI.EXE) provides these functions for your programs.
16.17
16.17.1
auxcarryflag = $010 Check for auxiliary carry ag in trealregs (588) carryflag = $001 Check for carry ag in trealregs (588) directionflag = $400 Check for direction ag in trealregs (588)
dosmemfillchar : procedure(seg: Word;ofs: Word;count: LongInt;c: Char) = @dpmi_dosmem Sets a region of dos memory to a specic byte value. Parameters: seg real mode segment. ofs real mode offset. count number of bytes to set. c value to set memory to.
585
dosmemfillword : procedure(seg: Word;ofs: Word;count: LongInt;w: Word) = @dpmi_dosmem Sets a region of dos memory to a specic word value. Parameters: seg real mode segment. ofs real mode offset. count number of words to set. w value to set memory to. Notes: No range check is performed. dosmemget : procedure(seg: Word;ofs: Word;var data;count: LongInt) = @dpmi_dosmemget Copies data from the dos memory onto the heap. Parameters: seg source real mode segment. ofs source real mode offset. data destination. count number of bytes to copy. Notes: No range checking is performed. For an example, see global_dos_alloc (605). dosmemmove : procedure(sseg: Word;sofs: Word;dseg: Word;dofs: Word;count: LongInt) = Copies count bytes of data between two dos real mode memory locations. Parameters: sseg source real mode segment. sofs source real mode offset. dseg destination real mode segment. dofs destination real mode offset. count number of bytes to copy. Notes: No range check is performed in any way. dosmemput : procedure(seg: Word;ofs: Word;var data;count: LongInt) = @dpmi_dosmemput Copies heap data to dos real mode memory. Parameters: 586
seg destination real mode segment. ofs destination real mode offset. data source. count number of bytes to copy. Notes: No range checking is performed. For an example, see global_dos_alloc (605). interruptflag = $200 Check for interrupt ag in trealregs (588) overflowflag = $800 Check for overow ag in trealregs (588) parityflag = $004 Check for parity ag in trealregs (588) rm_dpmi = 4 get_run_mode (603) return value: DPMI (e.g. dos box or 386Max) rm_raw = 1 get_run_mode (603) return value: raw (without HIMEM) rm_unknown = 0 get_run_mode (603) return value: Unknown runmode rm_vcpi = 3 get_run_mode (603) return value: VCPI (with HIMEM and EMM386) rm_xms = 2 get_run_mode (603) return value: XMS (with HIMEM, without EMM386) signflag = $080 Check for sign ag in trealregs (588) trapflag = $100 Check for trap ag in trealregs (588) zeroflag = $040 Check for zero ag in trealregs (588) 587
16.17.2
Types
registers = trealregs Alias for trealregs (588) tmeminfo = record available_memory : LongInt; available_pages : LongInt; available_lockable_pages : LongInt; linear_space : LongInt; unlocked_pages : LongInt; available_physical_pages : LongInt; total_physical_pages : LongInt; free_linear_space : LongInt; max_pages_in_paging_file : LongInt; reserved0 : LongInt; reserved1 : LongInt; reserved2 : LongInt; end
tmeminfo Holds information about the memory allocation, etc. NOTE: The value of a eld is -1 (0ffffffffh) if the value is unknown, its only guaranteed, that available_memory contains a valid value. The size of the pages can be determined by the get_page_size() function. trealregs = record end
The trealregs type contains the data structure to pass register values to a interrupt handler or real mode callback. tseginfo = record offset : pointer; segment : Word; end
This record is used to store a full 48-bit pointer. This may be either a protected mode selector:offset address or in real mode a segment:offset address, depending on application. See also: Selectors and descriptors, dos memory access, Interrupt redirection
16.17.3
Variables
dosmemselector : Word Selector to the dos memory. The whole dos memory is automatically mapped to this single descriptor at startup. This selector is the recommened way to access dos memory. int31error : Word This variable holds the result of a DPMI interrupt call. Any nonzero value must be treated as a critical failure. 588
16.18
16.18.1
Synopsis: Allocate a number of descriptors Declaration: function allocate_ldt_descriptors(count: Word) : Word Visibility: default Description: Allocates a number of new descriptors. Parameters: count:\ species the number of requested unique descriptors. Return value: The base selector. Remark: Notes: The descriptors allocated must be initialized by the application with other function calls. This function returns descriptors with a limit and size value set to zero. If more than one descriptor was requested, the function returns a base selector referencing the rst of a contiguous array of descriptors. The selector values for subsequent descriptors in the array can be calculated by adding the value returned by the get_next_selector_increment_value (598) function. Errors: Check the int31error (588) variable. See also: free_ldt_descriptor (594), get_next_selector_increment_value (598), segment_to_descriptor (611), create_code_segment_alias_descriptor (592), set_segment_limit (616), set_segment_base_address (616) Listing: ./go32ex/seldes.pp
{ $mode d e l p h i } uses crt , go32 ; const maxx = 8 0 ; maxy = 2 5 ; bytespercell = 2; s c r e e n s i z e = maxx maxy b y t e s p e r c e l l ; l i n B 8 0 0 0 = $B800 1 6 ; type string80 = string [ 8 0 ] ; var t e x t _ s a v e : array [ 0 . . s c r e e n s i z e 1] of b y t e ; t e x t _ o l d x , t e x t _ o l d y : Word ; t e x t _ s e l : Word ; procedure s t a t u s ( s : s t r i n g 8 0 ) ; begin gotoxy ( 1 , 1 ) ; c l r e o l ; w r i t e ( s ) ; readkey ; end ; procedure s e l i n f o ( s e l : Word ) ;
589
begin gotoxy ( 1 , 2 4 ) ; c l r e o l ; w r i t e l n ( D e s c r i p t o r base address : $ , h e x s t r ( get_segment_base_address ( s e l ) , 8 ) ) ; clreol ; write ( Descriptor l i m i t : , get_segment_limit ( sel ) ) ; end ; function makechar ( ch : char ; c o l o r : b y t e ) : Word ; begin r e s u l t : = b y t e ( ch ) or ( c o l o r shl 8 ) ; end ; begin seg_move ( dosmemselector , linB8000 , get_ds , l o n g i n t ( @text_save ) , screensize ) ; t e x t _ o l d x : = wherex ; t e x t _ o l d y : = wherey ; s e g _ f i l l w o r d ( dosmemselector , linB8000 , s c r e e n s i z e div 2 , makechar ( , Black or ( Black shl 4 ) ) ) ; status ( Creating selector t e x t _ s e l to a part of + t e x t screen memory ) ; text_sel : = allocate_ldt_descriptors (1); set_segment_base_address ( t e x t _ s e l , l i n B 8 0 0 0 + b y t e s p e r c e l l maxx 1 ) ; set_segment_limit ( text_sel , screensize 1 bytespercell maxx 3 ) ; selinfo ( text_sel ) ; s t a t u s ( and c l e a r i n g e n t i r e memory s e l e c t e d by t e x t _ s e l + descriptor ) ; s e g _ f i l l w o r d ( t e x t _ s e l , 0 , ( g e t _ s e g m e n t _ l i m i t ( t e x t _ s e l ) + 1 ) div 2 , makechar ( , L i g h t B l u e shl 4 ) ) ; s t a t u s ( N o t i c e t h a t o n l y t h e memory d e s c r i b e d by t h e + d e s c r i p t o r changed , n o t h i n g e l s e ) ; s t a t u s ( Now r e d u c i n g i t s l i m i t and base and s e t t i n g i t s + d e s c r i b e d memory ) ; set_segment_base_address ( t e x t _ s e l , get_segment_base_address ( t e x t _ s e l ) + b y t e s p e r c e l l maxx ) ; set_segment_limit ( text_sel , g e t _ s e g m e n t _ l i m i t ( t e x t _ s e l ) b y t e s p e r c e l l maxx 2 ) ; selinfo ( text_sel ) ; s t a t u s ( N o t i c e t h a t t h e base addr i n c r e a s e d by one l i n e b u t + t h e l i m i t decreased by 2 l i n e s ) ; s t a t u s ( T h i s should g i v e you t h e h i n t t h a t t h e l i m i t i s + r e l a t i v e t o t h e base ) ; s e g _ f i l l w o r d ( t e x t _ s e l , 0 , ( g e t _ s e g m e n t _ l i m i t ( t e x t _ s e l ) + 1 ) div 2 , makechar ( # 1 7 6 , LightMagenta or Brown shl 4 ) ) ; s t a t u s ( Now l e t s g e t c r a z y and copy 1 0 l i n e s o f data from + t h e p r e v i o u s l y saved screen ) ; seg_move ( get_ds , l o n g i n t ( @text_save ) , t e x t _ s e l , maxx b y t e s p e r c e l l 2 , maxx b y t e s p e r c e l l 1 0 ) ; s t a t u s ( At l a s t f r e e i n g t h e d e s c r i p t o r and r e s t o r i n g t h e o l d + screen c o n t e n t s . . ) ; s t a t u s ( I hope t h i s l i t t l e program may g i v e you some h i n t s on + working w i t h d e s c r i p t o r s ) ;
590
16.18.2
allocate_memory_block
Synopsis: Allocate a block of linear memory Declaration: function allocate_memory_block(size: LongInt) : LongInt Visibility: default Description: Allocates a block of linear memory. Parameters: size:Size of requested linear memory block in bytes. Returned values: blockhandle - the memory handle to this memory block. Linear address of the requested memory. Remark: warning According to my DPMI docs this function is not implemented correctly. Normally you should also get a blockhandle to this block after successful operation. This handle can then be used to free the memory block afterwards or use this handle for other purposes. Since the function isnt implemented correctly, and doesnt return a blockhandle, the block cant be deallocated and is hence unusuable ! This function doesnt allocate any descriptors for this block, its the applications resposibility to allocate and initialize for accessing this memory. Errors: Check the int31error (588) variable. See also: free_memory_block (595)
16.18.3
copyfromdos
Synopsis: Copy data from DOS to to heap Declaration: procedure copyfromdos(var addr;len: LongInt) Visibility: default Description: Copies data from the pre-allocated dos memory transfer buffer to the heap. Parameters: addrdata to copy to. lennumber of bytes to copy to heap. Notes: Can only be used in conjunction with the dos memory transfer buffer. Errors: Check the int31error (588) variable. See also: tb_size (617), transfer_buffer (617), copytodos (592)
591
16.18.4
copytodos
Synopsis: Copy data from heap to DOS memory Declaration: procedure copytodos(var addr;len: LongInt) Visibility: default Description: Copies data from heap to the pre-allocated dos memory buffer. Parameters: addrdata to copy from. lennumber of bytes to copy to dos memory buffer. Notes: This function fails if you try to copy more bytes than the transfer buffer is in size. It can only be used in conjunction with the transfer buffer. Errors: Check the int31error (588) variable. See also: tb_size (617), transfer_buffer (617), copyfromdos (591)
16.18.5
create_code_segment_alias_descriptor
Synopsis: Create new descriptor from existing descriptor Declaration: function create_code_segment_alias_descriptor(seg: Word) : Word Visibility: default Description: Creates a new descriptor that has the same base and limit as the specied descriptor. Parameters: segDescriptor. Return values: The data selector (alias). Notes: In effect, the function returns a copy of the descriptor. The descriptor alias returned by this function will not track changes to the original descriptor. In other words, if an alias is created with this function, and the base or limit of the original segment is then changed, the two descriptors will no longer map the same memory. Errors: Check the int31error (588) variable. See also: allocate_ldt_descriptors (589), set_segment_limit (616), set_segment_base_address (616)
16.18.6
disable
Synopsis: Disable hardware interrupts Declaration: procedure disable Visibility: default Description: Disables all hardware interrupts by execution a CLI instruction. Errors: None. See also: enable (594)
592
16.18.7
dpmi_dosmemllchar
Synopsis: Fill DOS memory with a character Declaration: procedure dpmi_dosmemfillchar(seg: Word;ofs: Word;count: LongInt; c: Char) Visibility: default Description: dpmi_dosmemfillchar lls the DOS memory reagion indicated by seg,ofs with count characters c. See also: dpmi_dosmemput (594), dpmi_dosmemget (593), dpmi_dosmemmove (593), dpmi_dosmemllword (593)
16.18.8
dpmi_dosmemllword
Synopsis: Fill DOS memory with a word value Declaration: procedure dpmi_dosmemfillword(seg: Word;ofs: Word;count: LongInt; w: Word) Visibility: default Description: dpmi_dosmemfillword lls the DOS memory reagion indicated by seg,ofs with count words W. See also: dpmi_dosmemput (594), dpmi_dosmemget (593), dpmi_dosmemllchar (593), dpmi_dosmemmove (593)
16.18.9
dpmi_dosmemget
Synopsis: Move data from DOS memory to DPMI memory Declaration: procedure dpmi_dosmemget(seg: Word;ofs: Word;var data;count: LongInt) Visibility: default Description: dpmi_dosmemput moves count bytes of data from the DOS memory location indicated by seg and ofs to DPMI memory indicated by data. See also: dpmi_dosmemput (594), dpmi_dosmemmove (593), dpmi_dosmemllchar (593), dpmi_dosmemllword (593)
16.18.10
dpmi_dosmemmove
Synopsis: Move DOS memory Declaration: procedure dpmi_dosmemmove(sseg: Word;sofs: Word;dseg: Word;dofs: Word; count: LongInt) Visibility: default Description: dpmi_dosmemmove moves count bytes from DOS memory sseg,sofs to dseg,dofs. See also: dpmi_dosmemput (594), dpmi_dosmemget (593), dpmi_dosmemllchar (593), dpmi_dosmemllword (593)
593
16.18.11
dpmi_dosmemput
Synopsis: Move data from DPMI memory to DOS memory. Declaration: procedure dpmi_dosmemput(seg: Word;ofs: Word;var data;count: LongInt) Visibility: default Description: dpmi_dosmemput moves count bytes of data from data to the DOS memory location indicated by seg and ofs. See also: dpmi_dosmemget (593), dpmi_dosmemmove (593), dpmi_dosmemllchar (593), dpmi_dosmemllword (593)
16.18.12
enable
Synopsis: Enable hardware interrupts Declaration: procedure enable Visibility: default Description: Enables all hardware interrupts by executing a STI instruction. Errors: None. See also: disable (592)
16.18.13
free_ldt_descriptor
Synopsis: Free a descriptor Declaration: function free_ldt_descriptor(d: Word) : Boolean Visibility: default Description: Frees a previously allocated descriptor. Parameters: desThe descriptor to be freed. Return value: True if successful, False otherwise. Notes: After this call this selector is invalid and must not be used for any memory operations anymore. Each descriptor allocated with allocate_ldt_descriptors (589) must be freed individually with this function, even if it was previously allocated as a part of a contiguous array of descriptors. For an example, see allocate_ldt_descriptors (589). Errors: Check the int31error (588) variable. See also: allocate_ldt_descriptors (589), get_next_selector_increment_value (598)
594
16.18.14
free_memory_block
Synopsis: Free allocated memory block Declaration: function free_memory_block(blockhandle: LongInt) : Boolean Visibility: default Description: Frees a previously allocated memory block. Parameters: blockhandlethe handle to the memory area to free. Return value: True if successful, false otherwise. Notes: Frees memory that was previously allocated with allocate_memory_block (591) . This function doesnt free any descriptors mapped to this block, its the applications responsibility. Errors: Check int31error (588) variable. See also: allocate_memory_block (591)
16.18.15
free_rm_callback
Synopsis: Release real mode callback. Declaration: function free_rm_callback(var intaddr: tseginfo) : Boolean Visibility: default Description: Releases a real mode callback address that was previously allocated with the get_rm_callback (599) function. Parameters: intaddrreal mode address buffer returned by get_rm_callback (599) . Return values: True if successful, False if not For an example, see get_rm_callback (599). Errors: Check the int31error (588) variable. See also: set_rm_interrupt (615), get_rm_callback (599)
16.18.16
get_cs
Synopsis: Get CS selector Declaration: function get_cs : Word Visibility: default Description: Returns the cs selector. Return value: The content of the cs segment register. For an example, see set_pm_interrupt (614). Errors: None. See also: get_ds (596), get_ss (604)
595
16.18.17
get_descriptor_access_right
Synopsis: Get descriptors access rights Declaration: function get_descriptor_access_right(d: Word) : LongInt Visibility: default Description: Gets the access rights of a descriptor. Parameters: dselector to descriptor. Return value: Access rights bit eld. Errors: Check the int31error (588) variable. See also: set_descriptor_access_right (614)
16.18.18
get_ds
Synopsis: Get DS Selector Declaration: function get_ds : Word Visibility: default Description: Returns the ds selector. Return values: The content of the ds segment register. Errors: None. See also: get_cs (595), get_ss (604)
16.18.19
get_exception_handler
Synopsis: Return current exception handler Declaration: function get_exception_handler(e: Byte;var intaddr: tseginfo) : Boolean Visibility: default Description: get_exception_handler returns the exception handler for exception E in intaddr. It returns True if the call was successful, False if not. See also: set_exception_handler (614), get_pm_exception_handler (599)
16.18.20
get_linear_addr
Synopsis: Convert physical to linear address Declaration: function get_linear_addr(phys_addr: LongInt;size: LongInt) : LongInt Visibility: default Description: Converts a physical address into a linear address. Parameters:
596
phys_addrphysical address of device. sizeSize of region to map in bytes. Return value: Linear address that can be used to access the physical memory. Notes: Its the applications resposibility to allocate and set up a descriptor for access to the memory. This function shouldnt be used to map real mode addresses. Errors: Check the int31error (588) variable. See also: allocate_ldt_descriptors (589), set_segment_limit (616), set_segment_base_address (616)
16.18.21
get_meminfo
Synopsis: Return information on the available memory Declaration: function get_meminfo(var meminfo: tmeminfo) : Boolean Visibility: default Description: Returns information about the amount of available physical memory, linear address space, and disk space for page swapping. Parameters: meminfobuffer to ll memory information into. Return values: Due to an implementation bug this function always returns False, but it always succeeds. Remark: Notes: Only the rst eld of the returned structure is guaranteed to contain a valid value. Any elds that are not supported by the DPMI host will be set by the host to -1 (0FFFFFFFFH) to indicate that the information is not available. The size of the pages used by the DPMI host can be obtained with the get_page_size (598) function. Errors: Check the int31error (588) variable. See also: get_page_size (598) Listing: ./go32ex/meminfo.pp
uses go32 ; var meminfo : tmeminfo ; begin get_meminfo ( meminfo ) ; i f ( i n t 3 1 e r r o r < > 0 ) then begin W r i t e l n ( E r r o r g e t t i n g DPMI memory i n f o r m a t i o n . . . H a l t i n g ) ; W r i t e l n ( DPMI e r r o r number : , i n t 3 1 e r r o r ) ; end else begin with meminfo do begin Writeln ( Largest a v a i l a b l e f r e e block : , available_memory div 1 0 2 4 , k b y t e s ) ; i f ( a v a i l a b l e _ p a g e s < > 1) then W r i t e l n ( Maximum a v a i l a b l e unlocked pages : , available_pages ) ; i f ( a v a i l a b l e _ l o c k a b l e _ p a g e s < > 1) then
597
if
if
if
if
if
if
W r i t e l n ( Maximum l o c k a b l e a v a i l a b l e pages : , available_lockable_pages ) ; ( l i n e a r _ s p a c e < > 1) then W r i t e l n ( L i n e a r address space s i z e : , l i n e a r _ s p a c e get_page_size div 1 0 2 4 , k b y t e s ) ; ( unlocked_pages < > 1) then W r i t e l n ( T o t a l number o f unlocked pages : , unlocked_pages ) ; ( a v a i l a b l e _ p h y s i c a l _ p a g e s < > 1) then W r i t e l n ( T o t a l number o f f r e e pages : , available_physical_pages ) ; ( t o t a l _ p h y s i c a l _ p a g e s < > 1) then W r i t e l n ( T o t a l number o f p h y s i c a l pages : , total_physical_pages ) ; ( f r e e _ l i n e a r _ s p a c e < > 1) then W r i t e l n ( Free l i n e a r address space : , f r e e _ l i n e a r _ s p a c e get_page_size div 1 0 2 4 , kbytes ) ; ( max_p ages_ in_pa ging_ file < > 1) then W r i t e l n ( Maximum s i z e o f paging f i l e : , max _page s_in_ pagi ng_fi le get_page_size div 1 0 2 4 , kbytes ) ;
16.18.22
get_next_selector_increment_value
Synopsis: Return selector increment value Declaration: function get_next_selector_increment_value : Word Visibility: default Description: Returns the selector increment value when allocating multiple subsequent descriptors via allocate_ldt_descriptors (589). Return value: Selector increment value. Remark: Notes: Because allocate_ldt_descriptors (589) only returns the selector for the rst descriptor and so the value returned by this function can be used to calculate the selectors for subsequent descriptors in the array. Errors: Check the int31error (588) variable. See also: allocate_ldt_descriptors (589), free_ldt_descriptor (594)
16.18.23
get_page_size
Synopsis: Return the page size Declaration: function get_page_size : LongInt Visibility: default Description: Returns the size of a single memory page. Return value: Size of a single page in bytes.
598
Remark: The returned size is typically 4096 bytes. For an example, see get_meminfo (597). Errors: Check the int31error (588) variable. See also: get_meminfo (597)
16.18.24
get_pm_exception_handler
Synopsis: Get protected mode exception handler Declaration: function get_pm_exception_handler(e: Byte;var intaddr: tseginfo) : Boolean Visibility: default Description: get_pm_exception_handler returns the protected mode exception handler for exception E in intaddr. It returns True if the call was successful, False if not. See also: get_exception_handler (596), set_pm_exception_handler (614)
16.18.25
get_pm_interrupt
Synopsis: Return protected mode interrupt handler Declaration: function get_pm_interrupt(vector: Byte;var intaddr: tseginfo) : Boolean Visibility: default Description: Returns the address of a current protected mode interrupt handler. Parameters: vectorinterrupt handler number you want the address to. intaddrbuffer to store address. Return values: True if successful, False if not. Remark: The returned address is a protected mode selector:offset address. For an example, see set_pm_interrupt (614). Errors: Check the int31error (588) variable. See also: set_pm_interrupt (614), set_rm_interrupt (615), get_rm_interrupt (602)
16.18.26
get_rm_callback
Synopsis: Return real mode callback Declaration: function get_rm_callback(pm_func: pointer;const reg: trealregs; var rmcb: tseginfo) : Boolean Visibility: default Description: Returns a unique real mode segment:offset address, known as a "real mode callback," that will transfer control from real mode to a protected mode procedure. Parameters:
599
pm_funcpointer to the protected mode callback function. regsupplied registers structure. rmcbbuffer to real mode address of callback function. Return values: True if successful, otherwise False. Remark: Callback addresses obtained with this function can be passed by a protected mode program for example to an interrupt handler, device driver, or TSR, so that the real mode program can call procedures within the protected mode program or notify the protected mode program of an event. The contents of the supplied regs structure is not valid after function call, but only at the time of the actual callback. Errors: Check the int31error (588) variable. See also: free_rm_callback (595) Listing: ./go32ex/callback.pp
{$ASMMODE ATT } {$MODE FPC} uses crt , go32 ; const mouseint = $33 ; var mouse_regs : t r e a l r e g s ; e x t e r n a l name ___v2prt0_rmcb_regs ; mouse_seginfo : t s e g i n f o ; var mouse_numbuttons : l o n g i n t ; mouse_action : word ; mouse_x , mouse_y : Word ; mouse_b : Word ; u s e r p r o c _ i n s t a l l e d : Longbool ; userproc_length : Longint ; u se r pr o c_ pr o c : p o i n t e r ; procedure c a l l b a c k _ h a n d l e r ; assembler ; asm pushw %ds p u s h l %eax movw %es , % ax movw %ax , % ds cmpl $1 , USERPROC_INSTALLED j n e . LNoCallback pushal movw DOSmemSELECTOR, % ax movw %ax , % f s c a l l USERPROC_PROC popal . LNoCallback :
600
p o p l %eax popw %ds p u s h l %eax movl (% e s i ) , % eax movl %eax , % es : 4 2 ( % e d i ) addw $4 , % es :46(% e d i ) p o p l %eax iret end ; procedure mouse_dummy ; begin end ; procedure t e x t u s e r p r o c ; begin mouse_b : = mouse_regs . bx ; mouse_x : = ( mouse_regs . cx shr 3 ) + 1 ; mouse_y : = ( mouse_regs . dx shr 3 ) + 1 ; end ; procedure i n s t a l l _ m o u s e ( u s e r p r o c : p o i n t e r ; u s e r p r o c l e n : l o n g i n t ) ; var r : t r e a l r e g s ; begin r . eax : = $0 ; r e a l i n t r ( mouseint , r ) ; i f ( r . eax < > $FFFF ) then begin W r i t e l n ( No M i c r o s o f t c o m p a t i b l e mouse found ) ; W r i t e l n ( A M i c r o s o f t c o m p a t i b l e mouse d r i v e r i s necessary , t o run t h i s example ) ; halt ; end ; i f ( r . bx = $ f f f f ) then mouse_numbuttons : = 2 else mouse_numbuttons : = r . bx ; W r i t e l n ( mouse_numbuttons , b u t t o n M i c r o s o f t c o m p a t i b l e mouse , found . ) ; i f ( u s e r p r o c < > n i l ) then begin u se r pr o c_ pr o c : = u s e r p r o c ; userproc_installed : = true ; userproc_length : = userproclen ; lock_code ( userproc_proc , u s e r p r o c _ l e n g t h ) ; end else begin u se r pr o c_ pr o c : = n i l ; userproc_length : = 0 ; userproc_installed : = false ; end ; l o c k _ d a t a ( mouse_x , s i z e o f ( mouse_x ) ) ; l o c k _ d a t a ( mouse_y , s i z e o f ( mouse_y ) ) ; l o c k _ d a t a ( mouse_b , s i z e o f ( mouse_b ) ) ; l o c k _ d a t a ( mouse_action , s i z e o f ( mouse_action ) ) ; lock_data ( userproc_installed , sizeof ( us erp ro c_i nst all ed ) ) ; l o c k _ d a t a ( userproc_proc , s i z e o f ( u se r pr o c_ p ro c ) ) ; l o c k _ d a t a ( mouse_regs , s i z e o f ( mouse_regs ) ) ; l o c k _ d a t a ( mouse_seginfo , s i z e o f ( mouse_seginfo ) ) ; lock_code ( @callback_handler , l o n g i n t (@mouse_dummy) l o n g i n t ( @callback_handler ) ) ; g e t _ r m _ c a l l b a c k ( @callback_handler , mouse_regs , mouse_seginfo ) ; r . eax : = $0c ; r . ecx : = $ 7 f ;
601
r . edx : = l o n g i n t ( mouse_seginfo . o f f s e t ) ; r . es : = mouse_seginfo . segment ; r e a l i n t r ( mouseint , r ) ; r . eax : = $01 ; r e a l i n t r ( mouseint , r ) ; end ; procedure remove_mouse ; var r : trealregs ; begin r . eax : = $02 ; r e a l i n t r ( mouseint , r ) ; r . eax : = $0c ; r . ecx : = 0 ; r . edx : = 0 ; r . es : = 0 ; r e a l i n t r ( mouseint , r ) ; f r e e _ r m _ c a l l b a c k ( mouse_seginfo ) ; i f ( u s e r p r o c _ i n s t a l l e d ) then begin unlock_code ( userproc_proc , u s e r p r o c _ l e n g t h ) ; u se r pr o c_ pr o c : = n i l ; userproc_length : = 0 ; userproc_installed : = false ; end ; u nl o ck _ da t a ( mouse_x , s i z e o f ( mouse_x ) ) ; u nl o ck _ da t a ( mouse_y , s i z e o f ( mouse_y ) ) ; u nl o ck _ da t a ( mouse_b , s i z e o f ( mouse_b ) ) ; u nl o ck _ da t a ( mouse_action , s i z e o f ( mouse_action ) ) ; u nl o ck _ da t a ( userproc_proc , s i z e o f ( u se r pr o c_ p ro c ) ) ; u nl o ck _ da t a ( u s e r p r o c _ i n s t a l l e d , s i z e o f ( u s e r p r o c _ i n s t a l l e d ) ) ; u nl o ck _ da t a ( mouse_regs , s i z e o f ( mouse_regs ) ) ; u nl o ck _ da t a ( mouse_seginfo , s i z e o f ( mouse_seginfo ) ) ; unlock_code ( @callback_handler , l o n g i n t (@mouse_dummy) l o n g i n t ( @callback_handler ) ) ; f i l l c h a r ( mouse_seginfo , s i z e o f ( mouse_seginfo ) , 0 ) ; end ;
begin i n s t a l l _ m o u s e ( @textuserproc , 4 0 0 ) ; W r i t e l n ( Press any key t o e x i t . . . ) ; while ( not keypressed ) do begin gotoxy ( 1 , wherey ) ; w r i t e ( MouseX : , mouse_x : 2 , MouseY : B u t t o n s : , mouse_b : 2 ) ; end ; remove_mouse ; end .
, mouse_y : 2 ,
16.18.27
get_rm_interrupt
Synopsis: Get real mode interrupt vector Declaration: function get_rm_interrupt(vector: Byte;var intaddr: tseginfo) : Boolean Visibility: default Description: Returns the contents of the current machines real mode interrupt vector for the specied interrupt.
602
Parameters: vectorinterrupt vector number. intaddrbuffer to store real mode segment:offset address. Return values: True if successful, False otherwise. Remark: The returned address is a real mode segment address, which isnt valid in protected mode. Errors: Check the int31error (588) variable. See also: set_rm_interrupt (615), set_pm_interrupt (614), get_pm_interrupt (599)
16.18.28
get_run_mode
Synopsis: Return current run mode Declaration: function get_run_mode : Word Visibility: default Description: Returns the current mode your application runs with. Return values: One of the constants used by this function. Errors: None. See also: get_run_mode (603) Listing: ./go32ex/getrunmd.pp
uses go32 ; begin case ( get_run_mode ) of rm_unknown : W r i t e l n ( Unknown environment found ) ; rm_raw : W r i t e l n ( You are c u r r e n t l y r u n n i n g i n raw mode , ( w i t h o u t HIMEM) ) ; rm_xms : W r i t e l n ( You are c u r r e n t l y u s i n g HIMEM . SYS o n l y ) ; rm_vcpi : W r i t e l n ( VCPI s e r v e r d e t e c t e d . You r e u s i n g HIMEM and , EMM386 ) ; rm_dpmi : W r i t e l n ( DPMI d e t e c t e d . You r e u s i n g a DPMI h o s t l i k e , a windows DOS box o r CWSDPMI ) ; end ; end .
16.18.29
get_segment_base_address
Synopsis: Return base address from descriptor table Declaration: function get_segment_base_address(d: Word) : LongInt Visibility: default 603
Description: Returns the 32-bit linear base address from the descriptor table for the specied segment. Parameters: dselector of the descriptor you want the base address of. Return values: Linear base address of specied descriptor. For an example, see allocate_ldt_descriptors (589). Errors: Check the int31error (588) variable. See also: allocate_ldt_descriptors (589), set_segment_base_address (616), allocate_ldt_descriptors (589), set_segment_limit (616), get_segment_limit (604)
16.18.30
get_segment_limit
Synopsis: Return segment limite from descriptor Declaration: function get_segment_limit(d: Word) : LongInt Visibility: default Description: Returns a descriptors segment limit. Parameters: dselector. Return value: Limit of the descriptor in bytes. Errors: Returns zero if descriptor is invalid. See also: allocate_ldt_descriptors (589), set_segment_limit (616), set_segment_base_address (616), get_segment_base_address (603)
16.18.31
get_ss
Synopsis: Return SS selector Declaration: function get_ss : Word Visibility: default Description: Returns the ss selector. Return values: The content of the ss segment register. Errors: None. See also: get_ds (596), get_cs (595)
604
16.18.32
global_dos_alloc
Synopsis: Allocate DOS real mode memory Declaration: function global_dos_alloc(bytes: LongInt) : LongInt Visibility: default Description: Allocates a block of dos real mode memory. Parameters: bytessize of requested real mode memory. Return values: The low word of the returned value contains the selector to the allocated dos memory block, the high word the corresponding real mode segment value. The offset value is always zero. This function allocates memory from dos memory pool, i.e. memory below the 1 MB boundary that is controlled by dos. Such memory blocks are typically used to exchange data with real mode programs, TSRs, or device drivers. The function returns both the real mode segment base address of the block and one descriptor that can be used by protected mode applications to access the block. This function should only used for temporary buffers to get real mode information (e.g. interrupts that need a data structure in ES:(E)DI), because every single block needs an unique selector. The returned selector should only be freed by a global_dos_free (606) call. Errors: Check the int31error (588) variable. See also: global_dos_free (606) Listing: ./go32ex/buffer.pp
uses go32 ; procedure d o s a l l o c ( var s e l e c t o r : word ; var segment : word ; s i z e : l o n g i n t ) ; var res : l o n g i n t ; begin res : = global_dos_alloc ( size ) ; s e l e c t o r : = word ( r e s ) ; segment : = word ( r e s shr 1 6 ) ; end ; procedure d o s f r e e ( s e l e c t o r : word ) ; begin global_dos_free ( selector ) ; end ; type VBEInfoBuf = packed record S i g n a t u r e : array [ 0 . . 3 ] of char ; V e r s i o n : Word ; r e s e r v e d : array [ 0 . . 5 0 5 ] of b y t e ; end ; var selector , segment : Word ; r : trealregs ;
605
i n f o b u f : VBEInfoBuf ; begin f i l l c h a r ( r , sizeof ( r ) , 0 ) ; f i l l c h a r ( i n f o b u f , s i z e o f ( VBEInfoBuf ) , 0 ) ; d o s a l l o c ( s e l e c t o r , segment , s i z e o f ( VBEInfoBuf ) ) ; i f ( i n t 3 1 e r r o r < >0) then begin W r i t e l n ( E r r o r w h i l e a l l o c a t i n g r e a l mode memory , h a l t i n g ) ; halt ; end ; i n f o b u f . S i g n a t u r e : = VBE2 ; dosmemput ( segment , 0 , i n f o b u f , s i z e o f ( i n f o b u f ) ) ; r . ax : = $4f00 ; r . es : = segment ; r e a l i n t r ( $10 , r ) ; dosmemget ( segment , 0 , i n f o b u f , s i z e o f ( i n f o b u f ) ) ; dosfree ( s e l e c t o r ) ; i f ( r . ax < > $ 4 f ) then begin W r i t e l n ( VBE BIOS e x t e n s i o n n o t a v a i l a b l e , f u n c t i o n c a l l , failed ); halt ; end ; i f ( i n f o b u f . s i g n a t u r e [ 0 ] = V ) and ( i n f o b u f . s i g n a t u r e [ 1 ] = E ) and ( i n f o b u f . s i g n a t u r e [ 2 ] = S ) and ( i n f o b u f . s i g n a t u r e [ 3 ] = A ) then begin W r i t e l n ( VBE v e r s i o n , h i ( i n f o b u f . v e r s i o n ) , . , lo ( i n f o b u f . version ) , detected ) ; end ; end .
16.18.33
global_dos_free
Synopsis: Free DOS memory block Declaration: function global_dos_free(selector: Word) : Boolean Visibility: default Description: Frees a previously allocated dos memory block. Parameters: selectorselector to the dos memory block. Return value: True if successful, False otherwise. Remark: The descriptor allocated for the memory block is automatically freed and hence invalid for further use. This function should only be used for memory allocated by global_dos_alloc (605). For an example, see global_dos_alloc (605). Errors: Check the int31error (588) variable. See also: global_dos_alloc (605)
16.18.34
inportb
606
Declaration: function inportb(port: Word) : Byte Visibility: default Description: Reads 1 byte from the selected I/O port. Parameters: portthe I/O port number which is read. Return values: Current I/O port value. Errors: None. See also: outportb (609), inportw (607), inportl (607)
16.18.35
inportl
Synopsis: Read longint from I/O port Declaration: function inportl(port: Word) : LongInt Visibility: default Description: Reads 1 longint from the selected I/O port. Parameters: portthe I/O port number which is read. Return values: Current I/O port value. Errors: None. See also: outportb (609), inportb (606), inportw (607)
16.18.36
inportw
Synopsis: Read word from I/O port Declaration: function inportw(port: Word) : Word Visibility: default Description: Reads 1 word from the selected I/O port. Parameters: portthe I/O port number which is read. Return values: Current I/O port value. Errors: None. See also: outportw (610), inportb (606), inportl (607)
607
16.18.37
lock_code
Synopsis: Lock code memory range Declaration: function lock_code(functionaddr: pointer;size: LongInt) : Boolean Visibility: default Description: Locks a memory range which is in the code segment selector. Parameters: functionaddraddress of the function to be locked. sizesize in bytes to be locked. Return values: True if successful, False otherwise. For an example, see get_rm_callback (599). Errors: Check the int31error (588) variable. See also: lock_linear_region (608), lock_data (608), unlock_linear_region (618), unlock_data (618), unlock_code (618)
16.18.38
lock_data
Synopsis: Lock data memory range Declaration: function lock_data(var data;size: LongInt) : Boolean Visibility: default Description: Locks a memory range which resides in the data segment selector. Parameters: dataaddress of data to be locked. sizelength of data to be locked. Return values: True if successful, False otherwise. For an example, see get_rm_callback (599). Errors: Check the int31error (588) variable. See also: lock_linear_region (608), lock_code (608), unlock_linear_region (618), unlock_data (618), unlock_code (618)
16.18.39
lock_linear_region
Synopsis: Lock linear memory region Declaration: function lock_linear_region(linearaddr: LongInt;size: LongInt) : Boolean Visibility: default Description: Locks a memory region to prevent swapping of it. Parameters: linearaddrthe linear address of the memory are to be locked. 608
sizesize in bytes to be locked. Return value: True if successful, False otherwise. Errors: Check the int31error (588) variable. See also: lock_data (608), lock_code (608), unlock_linear_region (618), unlock_data (618), unlock_code (618)
16.18.40
map_device_in_memory_block
Synopsis: Map a device into programs memory space Declaration: function map_device_in_memory_block(handle: LongInt;offset: LongInt; pagecount: LongInt;device: LongInt) : Boolean Visibility: default Description: map_device_in_memory_block allows to map a device in memory. This function is a direct call of the extender. For more information about its arguments, see the extender documentation.
16.18.41
outportb
Synopsis: Write byte to I/O port Declaration: procedure outportb(port: Word;data: Byte) Visibility: default Description: Sends 1 byte of data to the specied I/O port. Parameters: portthe I/O port number to send data to. datavalue sent to I/O port. Return values: None. Errors: None. See also: inportb (606), outportl (610), outportw (610) Listing: ./go32ex/outport.pp
uses crt , go32 ; begin o u t p o r t b ( $61 , $ f f ) ; delay ( 5 0 ) ; o u t p o r t b ( $61 , $0 ) ; end .
609
16.18.42
outportl
Synopsis: Write longint to I/O port Declaration: procedure outportl(port: Word;data: LongInt) Visibility: default Description: Sends 1 longint of data to the specied I/O port. Parameters: portthe I/O port number to send data to. datavalue sent to I/O port. Return values: None. For an example, see outportb (609). Errors: None. See also: inportl (607), outportw (610), outportb (609)
16.18.43
outportw
Synopsis: Write word to I/O port Declaration: procedure outportw(port: Word;data: Word) Visibility: default Description: Sends 1 word of data to the specied I/O port. Parameters: portthe I/O port number to send data to. datavalue sent to I/O port. Return values: None. For an example, see outportb (609). Errors: None. See also: inportw (607), outportl (610), outportb (609)
16.18.44
realintr
Synopsis: Simulate interrupt Declaration: function realintr(intnr: Word;var regs: trealregs) : Boolean Visibility: default Description: Simulates an interrupt in real mode. Parameters: intnrinterrupt number to issue in real mode. regsregisters data structure.
610
Return values: The supplied registers data structure contains the values that were returned by the real mode interrupt. True if successful, False if not. Remark: The function transfers control to the address specied by the real mode interrupt vector of intnr. The real mode handler must return by executing an IRET. Errors: Check the int31error (588) variable. Listing: ./go32ex/ags.pp
uses go32 ; var r : trealregs ; begin r . ax : = $5300 ; r . bx : = 0 ; r e a l i n t r ( $15 , r ) ; i f ( ( r . f l a g s and c a r r y f l a g ) = 0 ) then begin W r i t e l n ( APM v , ( r . ah and $ f ) , . , ( r . a l shr 4 ) , ( r . a l and $ f ) , d e t e c t e d ) ; end else W r i t e l n ( APM n o t p r e s e n t ) ; end .
16.18.45
request_linear_region
Synopsis: Request linear address region. Declaration: function request_linear_region(linearaddr: LongInt;size: LongInt; var blockhandle: LongInt) : Boolean Visibility: default Description: request_linear_region requests a linear range of addresses of size Size, starting at linearaddr. If successful, True is returned, and a handle to the address region is returned in blockhandle. Errors: On error, False is returned.
16.18.46
segment_to_descriptor
Synopsis: Map segment address to descriptor Declaration: function segment_to_descriptor(seg: Word) : Word Visibility: default Description: Maps a real mode segment (paragraph) address onto an descriptor that can be used by a protected mode program to access the same memory. Parameters: segthe real mode segment you want the descriptor to.
611
Return values: Descriptor to real mode segment address. Remark: The returned descriptors limit will be set to 64 kB. Multiple calls to this function with the same segment address will return the same selector. Descriptors created by this function can never be modied or freed. Programs which need to examine various real mode addresses using the same selector should use the function allocate_ldt_descriptors (589) and change the base address as necessary. For an example, see seg_llchar (612). Errors: Check the int31error (588) variable. See also: allocate_ldt_descriptors (589), free_ldt_descriptor (594), set_segment_base_address (616)
16.18.47
seg_llchar
Synopsis: Fill segment with byte value Declaration: procedure seg_fillchar(seg: Word;ofs: LongInt;count: LongInt;c: Char) Visibility: default Description: Sets a memory area to a specic value. Parameters: segselector to memory area. ofsoffset to memory. countnumber of bytes to set. cbyte data which is set. Return values: None. Notes: No range check is done in any way. Errors: None. See also: seg_move (613), seg_llword (613), dosmemllchar (585), dosmemllword (586), dosmemget (586), dosmemput (586), dosmemmove (586) Listing: ./go32ex/vgasel.pp
uses go32 ; var v g a s e l : Word ; r : trealregs ; begin r . eax : = $13 ; r e a l i n t r ( $10 , r ) ; v g a s e l : = s e g m e n t _ t o _ d e s c r i p t o r ( $A000 ) ; s e g _ f i l l c h a r ( vgasel , 0 , 6 4 0 0 0 , # 1 5 ) ; readln ; r . eax : = $3 ; r e a l i n t r ( $10 , r ) ; end .
612
16.18.48
seg_llword
Synopsis: Fill segment with word value Declaration: procedure seg_fillword(seg: Word;ofs: LongInt;count: LongInt;w: Word) Visibility: default Description: Sets a memory area to a specic value. Parameters: segselector to memory area. ofsoffset to memory. countnumber of words to set. wword data which is set. Return values: None. Notes: No range check is done in any way. For an example, see allocate_ldt_descriptors (589). Errors: None. See also: seg_move (613), seg_llchar (612), dosmemllchar (585), dosmemllword (586), dosmemget (586), dosmemput (586), dosmemmove (586)
16.18.49
seg_move
Synopsis: Move data between 2 locations Declaration: procedure seg_move(sseg: Word;source: LongInt;dseg: Word;dest: LongInt; count: LongInt) Visibility: default Description: Copies data between two memory locations. Parameters: ssegsource selector. sourcesource offset. dsegdestination selector. destdestination offset. countsize in bytes to copy. Return values: None. Remark: Overlapping is only checked if the source selector is equal to the destination selector. No range check is done. For an example, see allocate_ldt_descriptors (589). Errors: None. See also: seg_llchar (612), seg_llword (613), dosmemllchar (585), dosmemllword (586), dosmemget (586), dosmemput (586), dosmemmove (586)
613
16.18.50
set_descriptor_access_right
Synopsis: Set access rights to memory descriptor Declaration: function set_descriptor_access_right(d: Word;w: Word) : LongInt Visibility: default Description: set_descriptor_access_right sets the access rights for descriptor d to w
16.18.51
set_exception_handler
Synopsis: Set exception handler Declaration: function set_exception_handler(e: Byte;const intaddr: tseginfo) : Boolean Visibility: default Description: set_exception_handler sets the exception handler for exception E to intaddr. It returns True if the call was successful, False if not. See also: get_exception_handler (596), set_pm_exception_handler (614)
16.18.52
set_pm_exception_handler
Synopsis: Set protected mode exception handler Declaration: function set_pm_exception_handler(e: Byte;const intaddr: tseginfo) : Boolean Visibility: default Description: set_pm_exception_handler sets the protected mode exception handler for exception E to intaddr. It returns True if the call was successful, False if not. See also: set_exception_handler (614), get_pm_exception_handler (599)
16.18.53
set_pm_interrupt
Synopsis: Set protected mode interrupt handler Declaration: function set_pm_interrupt(vector: Byte;const intaddr: tseginfo) : Boolean Visibility: default Description: Sets the address of the protected mode handler for an interrupt. Parameters: vectornumber of protected mode interrupt to set. intaddrselector:offset address to the interrupt vector. Return values: True if successful, False otherwise. Remark: The address supplied must be a valid selector:offset protected mode address. Errors: Check the int31error (588) variable. 614
See also: get_pm_interrupt (599), set_rm_interrupt (615), get_rm_interrupt (602) Listing: ./go32ex/intpm.pp
uses crt , go32 ; const i n t 1 c = $1c ; var oldint1c : tseginfo ; newint1c : t s e g i n f o ; int1c_counter : Longint ; i n t 1 c _ d s : Word ; e x t e r n a l name _ _ _ v 2 p r t 0 _ d s _ a l i a s ; procedure i n t 1 c _ h a n d l e r ; assembler ; asm cli pushw %ds pushw %ax movw %cs : i n t 1 c _ d s , % ax movw %ax , % ds i n c l int1c_counter popw %ax popw %ds sti iret end ; var i : L o n g i n t ; begin newint1c . o f f s e t : = @int1c_handler ; newint1c . segment : = get_cs ; get_pm_interrupt ( int1c , oldint1c ) ; W r i t e l n ( Press any key t o e x i t ) ; s e t _ p m _ i n t e r r u p t ( i n t 1 c , newint1c ) ; while ( not keypressed ) do begin gotoxy ( 1 , wherey ) ; w r i t e ( Number o f i n t e r r u p t s occured : end ; set_pm_interrupt ( int1c , oldint1c ) ; end .
, int1c_counter ) ;
16.18.54
set_rm_interrupt
Synopsis: Set real mode interrupt handler Declaration: function set_rm_interrupt(vector: Byte;const intaddr: tseginfo) : Boolean Visibility: default
615
Description: Sets a real mode interrupt handler. Parameters: vectorthe interrupt vector number to set. intaddraddress of new interrupt vector. Return values: True if successful, otherwise False. Remark: The address supplied MUST be a real mode segment address, not a selector:offset address. So the interrupt handler must either reside in dos memory (below 1 Mb boundary) or the application must allocate a real mode callback address with get_rm_callback (599). Errors: Check the int31error (588) variable. See also: get_rm_interrupt (602), set_pm_interrupt (614), get_pm_interrupt (599), get_rm_callback (599)
16.18.55
set_segment_base_address
Synopsis: Set descriptors base address Declaration: function set_segment_base_address(d: Word;s: LongInt) : Boolean Visibility: default Description: Sets the 32-bit linear base address of a descriptor. Parameters: dselector. snew base address of the descriptor. Errors: Check the int31error (588) variable. See also: allocate_ldt_descriptors (589), get_segment_base_address (603), allocate_ldt_descriptors (589), set_segment_limit (616), get_segment_base_address (603), get_segment_limit (604)
16.18.56
set_segment_limit
Synopsis: Set descriptor limit Declaration: function set_segment_limit(d: Word;s: LongInt) : Boolean Visibility: default Description: Sets the limit of a descriptor. Parameters: dselector. snew limit of the descriptor. Return values: Returns True if successful, else False. Remark: The new limit specied must be the byte length of the segment - 1. Segment limits bigger than or equal to 1MB must be page aligned, they must have the lower 12 bits set. For an example, see allocate_ldt_descriptors (589). Errors: Check the int31error (588) variable. See also: allocate_ldt_descriptors (589), set_segment_base_address (616), get_segment_limit (604), set_segment_limit (616) 616
16.18.57
tb_offset
Synopsis: Return DOS transfer buffer offset Declaration: function tb_offset : LongInt Visibility: default Description: tb_offset returns the DOS transfer buffer segment. See also: transfer_buffer (617), tb_segment (617), tb_size (617)
16.18.58
tb_segment
Synopsis: Return DOS transfer buffer segment Declaration: function tb_segment : LongInt Visibility: default Description: tb_segment returns the DOS transfer buffer segment. See also: transfer_buffer (617), tb_offset (617), tb_size (617)
16.18.59
tb_size
Synopsis: Return DOS transfer memory buffer size Declaration: function tb_size : LongInt Visibility: default Description: Returns the size of the pre-allocated dos memory buffer. Return values: The size of the pre-allocated dos memory buffer. This block always seems to be 16k in size, but dont rely on this. Errors: None. See also: transfer_buffer (617), copyfromdos (591), copytodos (592)
16.18.60
transfer_buffer
Synopsis: Return offset of DOS transfer buffer Declaration: function transfer_buffer : LongInt Visibility: default Description: transfer_buffer returns the offset of the transfer buffer. Errors: None. See also: tb_size (617)
617
16.18.61
unlock_code
Synopsis: Unlock code segment Declaration: function unlock_code(functionaddr: pointer;size: LongInt) : Boolean Visibility: default Description: Unlocks a memory range which resides in the code segment selector. Parameters: functionaddraddress of function to be unlocked. sizesize bytes to be unlocked. Return value: True if successful, False otherwise. For an example, see get_rm_callback (599). Errors: Check the int31error (588) variable. See also: unlock_linear_region (618), unlock_data (618), lock_linear_region (608), lock_data (608), lock_code (608)
16.18.62
unlock_data
Synopsis: Unlock data segment Declaration: function unlock_data(var data;size: LongInt) : Boolean Visibility: default Description: Unlocks a memory range which resides in the data segment selector. Parameters: dataaddress of memory to be unlocked. sizesize bytes to be unlocked. Return values: True if successful, False otherwise. For an example, see get_rm_callback (599). Errors: Check the int31error (588) variable. See also: unlock_linear_region (618), unlock_code (618), lock_linear_region (608), lock_data (608), lock_code (608)
16.18.63
unlock_linear_region
Synopsis: Unlock linear memory region Declaration: function unlock_linear_region(linearaddr: LongInt;size: LongInt) : Boolean Visibility: default Description: Unlocks a previously locked linear region range to allow it to be swapped out again if needed. Parameters: linearaddrlinear address of the memory to be unlocked. 618
sizesize bytes to be unlocked. Return values: True if successful, False otherwise. Errors: Check the int31error (588) variable. See also: unlock_data (618), unlock_code (618), lock_linear_region (608), lock_data (608), lock_code (608)
619
Chapter 17
17.2
Overview
The GPM unit implements an interface to libgpm, the console program for mouse handling. This unit was created by Peter Vreman, and is only available on linux. When this unit is used, your program is linked to the C libraries, so you must take care of the C library version. Also, it will only work with version 1.17 or higher of the libgpm library.
17.3
17.3.1
GPM_BOT = 2 Bottom of area. GPM_B_LEFT = 4 Left mouse button identier. GPM_B_MIDDLE = 2 Middle mouse button identier. GPM_B_RIGHT = 1 620
Right mouse button identier. GPM_DOUBLE = 32 Mouse double click event. GPM_DOWN = 4 Mouse button down event. GPM_DRAG = 2 Mouse drag event. GPM_ENTER = 512 Enter area event. GPM_HARD = 256 ? GPM_LEAVE = 1024 Leave area event. GPM_LFT = 4 Left side of area. GPM_MAGIC = $47706D4C Constant identifying GPM in gpm_Open (102). GPM_MFLAG = 128 Motion ag. GPM_MOVE = 1 Mouse move event. GPM_NODE_CTL = GPM_NODE_DEV Control socket GPM_NODE_DEV = /dev/gpmctl Device socket lename GPM_NODE_DIR = _PATH_VARRUN 621
Where to write socket. GPM_NODE_DIR_MODE = 0775 Mode of socket. GPM_NODE_FIFO = /dev/gpmdata FIFO name GPM_NODE_PID = /var/run/gpm.pid Name of PID le. GPM_RGT = 8 Right side of area. GPM_SINGLE = 16 Mouse single click event. GPM_TOP = 1 Top of area. GPM_TRIPLE = 64 Mouse triple click event. GPM_UP = 8 Mouse button up event. _PATH_DEV = /dev/ Location of /dev directory. _PATH_VARRUN = /var/run/ Location of run PID les directory.
17.3.2
Types
622
Pointer to TGpmEvent (623) record Pgpmroi = Pgpm_roi Pointer to TGpmRoi (623) record. Pgpm_connect = ^TGpm_connect Pointer to TGpm_Connect (624) record. Pgpm_event = ^Tgpm_event Pointer to TGpm_Event (624) record Pgpm_roi = ^Tgpm_roi Pointer to Tgpm_roi (624) record. Tgpmconnect = Tgpm_connect Alias for TGpm_Connect (624) record. TGpmEtype = LongInt Type for event type. Tgpmevent = Tgpm_event Alias for TGPM_EVent (624) record TGpmHandler = function(var event: Tgpmevent;clientdata: pointer) : LongInt of object Mouse event handler callback. TGpmMargin = LongInt Type to hold area margin. Tgpmroi = Tgpm_roi Alias for TGpm_roi (624)Record Tgpm_connect = packed record eventMask : Word; defaultMask : Word; minMod : Word; maxMod : Word; pid : LongInt; vc : LongInt; end
623
GPM server connection information. Tgpm_event = packed record buttons : Byte; modifiers : Byte; vc : Word; dx : Word; dy : Word; x : Word; y : Word; EventType : TGpmEtype; clicks : LongInt; margin : TGpmMargin; wdx : Word; wdy : Word; end
Tgpm_event describes the events that are reported by GPM. Tgpm_roi = packed record xmin : Integer; xmax : Integer; ymin : Integer; ymax : Integer; minmod : Word; maxmod : Word; eventmask : Word; owned : Word; handler : TGpmHandler; clientdata : pointer; prev : Pgpm_roi; next : Pgpm_roi; end
17.3.3
Variables
gpm_current_roi : Pgpm_roi Internal gpm library variable. Do not use. gpm_handler : TGpmHandler Internal gpm library variable. Do not use. gpm_roi : Pgpm_roi Internal gpm library variable. Do not use. gpm_roi_data : pointer 624
Internal gpm library variable. Do not use. gpm_roi_handler : TGpmHandler Internal gpm library variable. Do not use.
17.4
17.4.1
Synopsis: Check whether event has double click event. Declaration: function Gpm_AnyDouble(EventType: LongInt) : Boolean Visibility: default Description: Gpm_AnyDouble returns True if EventType contains the GPM_DOUBLE ag, False otherwise. Errors: None. See also: Gpm_StrictSingle (630), Gpm_AnySingle (625), Gpm_StrictDouble (630), Gpm_StrictTriple (630), Gpm_AnyTriple (625)
17.4.2
Gpm_AnySingle
Synopsis: Check whether event has a single click event. Declaration: function Gpm_AnySingle(EventType: LongInt) : Boolean Visibility: default Description: Gpm_AnySingle returns True if EventType contains the GPM_SINGLE ag, False otherwise. Errors: None. See also: Gpm_StrictSingle (630), Gpm_AnyDouble (625), Gpm_StrictDouble (630), Gpm_StrictTriple (630), Gpm_AnyTriple (625)
17.4.3
Gpm_AnyTriple
Synopsis: Check whether event has a triple click event. Declaration: function Gpm_AnyTriple(EventType: LongInt) : Boolean Visibility: default Description: Gpm_AnySingle returns True if EventType contains the GPM_TRIPLE ag, False otherwise. Errors: None. See also: Gpm_StrictSingle (630), Gpm_AnyDouble (625), Gpm_StrictDouble (630), Gpm_StrictTriple (630), Gpm_AnySingle (625)
625
17.4.4
gpm_close
Synopsis: Close connection to GPM server. Declaration: function gpm_close : LongInt Visibility: default Description: Gpm_Close closes the current connection, and pops the connection stack; this means that the previous connection becomes active again. The function returns -1 if the current connection is not the last one, and it returns 0 if the current connection is the last one. for an example, see Gpm_GetEvent (626). Errors: None. See also: Gpm_Open (628)
17.4.5
gpm_tvalues
Synopsis: Change coordinates to t physical screen. Declaration: function gpm_fitvalues(var x: LongInt;var y: LongInt) : LongInt Visibility: default Description: Gpm_fitValues changes x and y so they t in the visible screen. The actual mouse pointer is not affected by this function. Errors: None. See also: Gpm_FitValuesM (626)
17.4.6
gpm_tvaluesM
Synopsis: Change coordinates to t margin. Declaration: function gpm_fitvaluesM(var x: LongInt;var y: LongInt;margin: LongInt) : LongInt Visibility: default Description: Gpm_FitValuesM changes x and y so they t in the margin indicated by margin. If margin is -1, then the values are tted to the screen. The actual mouse pointer is not affected by this function. Errors: None. See also: Gpm_FitValues (626)
17.4.7
gpm_getevent
Synopsis: Get event from event queue. Declaration: function gpm_getevent(var event: Tgpm_event) : LongInt Visibility: default
626
Description: Gpm_GetEvent Reads an event from the le descriptor gpm_fd. This le is only for internal use and should never be called by a client application. It returns 1 on succes, and -1 on failue. Errors: On error, -1 is returned. See also: Gpm_GetSnapshot (628) Listing: ./gpmex/gpmex.pp
program gpmex ; { Example program t o demonstrate t h e use o f t h e gpm u n i t . } uses gpm ; var connect : TGPMConnect ; event : tgpmevent ; begin connect . EventMask : =GPM_MOVE or GPM_DRAG or GPM_DOWN or GPM_UP; connect . DefaultMask : = 0 ; connect . MinMod : = 0 ; connect . MaxMod : = 0 ; i f Gpm_Open( connect ,0)= 1 then begin W r i t e l n ( No mouse h a n d l e r p r e s e n t . ) ; Halt ( 1 ) ; end ; W r i t e l n ( C l i c k r i g h t b u t t o n t o end . ) ; Repeat gpm_getevent ( Event ) ; With Event do begin Write ( Pos = ( ,X , , ,Y , ) B u t t o n s : ( ) ; i f ( b u t t o n s and Gpm_b_left ) < >0 then write ( l e f t ) ; i f ( b u t t o n s and Gpm_b_right ) < >0 then write ( r i g h t ) ; i f ( b u t t o n s and Gpm_b_middle ) < >0 then Write ( middle ) ; Write ( ) Event : ) ; Case EventType and $F of GPM_MOVE : w r i t e ( Move ) ; GPM_DRAG : w r i t e ( Drag ) ; GPM_DOWN: w r i t e ( Down ) ; GPM_UP : w r i t e ( Up ) ; end ; Writeln ; end ; U n t i l ( Event . B u t t o n s and gpm_b_right ) < >0; gpm_close ; end .
627
17.4.8
gpm_getsnapshot
Synopsis: Return servers current image of mouse state. Declaration: function gpm_getsnapshot(eptr: Pgpmevent) : LongInt function gpm_getsnapshot(var eptr: Tgpmevent) : LongInt Visibility: default Description: Gpm_GetSnapshot returns the picture that the server has of the current situation in Event. This call will not read the current situation from the mouse le descriptor, but returns a buffered version. The function returns the number of mouse buttons, or -1 if this information is not available. Errors: None. See also: Gpm_GetEvent (626)
17.4.9
gpm_lowerroi
Synopsis: Lower a region of interest in the stack. Declaration: function gpm_lowerroi(which: Pgpm_roi;after: Pgpm_roi) : Pgpm_roi Visibility: default Description: Gpm_LowerRoi lowers the region of interest which after after. If after is Nil, the region of interest is moved to the bottom of the stack. The return value is the new top of the region-of-interest stack. Errors: None. See also: Gpm_RaiseRoi (629), Gpm_PopRoi (629), Gpm_PushRoi (629)
17.4.10
gpm_open
Synopsis: Open connection to GPM server. Declaration: function gpm_open(var conn: Tgpm_connect;flag: LongInt) : LongInt Visibility: default Description: Gpm_Open opens a new connection to the mouse server. The connection is described by the elds of the conn record of type TGPMConnect (623). if Flag is 0, then the application only receives events that come from its own terminal device. If it is negative it will receive all events. If the value is positive then it is considered a console number to which to connect. The return value is -1 on error, or the le descriptor used to communicate with the client. Under an X-Term the return value is -2. for an example, see Gpm_GetEvent (626). Errors: On Error, the return value is -1. See also: Gpm_Open (628)
628
17.4.11
gpm_poproi
Synopsis: Pop region of interest from the stack. Declaration: function gpm_poproi(which: Pgpm_roi) : Pgpm_roi Visibility: default Description: Gpm_PopRoi pops the topmost region of interest from the stack. It returns the next element on the stack, or Nil if the current element was the last one. Errors: None. See also: Gpm_RaiseRoi (629), Gpm_LowerRoi (628), Gpm_PushRoi (629)
17.4.12
gpm_pushroi
Synopsis: Push region of interest on the stack. Declaration: function gpm_pushroi(x1: LongInt;y1: LongInt;x2: LongInt;y2: LongInt; mask: LongInt;fun: TGpmHandler;xtradata: pointer) : Pgpm_roi Visibility: default Description: Gpm_PushRoi puts a new region of interest on the stack. The region of interest is dened by a rectangle described by the corners (X1,Y1) and (X2,Y2). The mask describes which events the handler {fun} will handle; ExtraData will be put in the xtradata eld of the {TGPM_Roi} record passed to the fun handler. Errors: None. See also: Gpm_RaiseRoi (629), Gpm_PopRoi (629), Gpm_LowerRoi (628)
17.4.13
gpm_raiseroi
Synopsis: Raise region of interest in the stack. Declaration: function gpm_raiseroi(which: Pgpm_roi;before: Pgpm_roi) : Pgpm_roi Visibility: default Description: Gpm_RaiseRoi raises the region of interestwhich till it is on top of region before. If before is nil then the region is put on top of the stack. The returned value is the top of the stack. Errors: None. See also: Gpm_PushRoi (629), Gpm_PopRoi (629), Gpm_LowerRoi (628)
17.4.14
gpm_repeat
Synopsis: Check for presence of mouse event. Declaration: function gpm_repeat(millisec: LongInt) : LongInt Visibility: default Description: Gpm_Repeat returns 1 of no mouse event arrives in the next millisec miiliseconds, it returns 0 otherwise. 629
17.4.15
Gpm_StrictDouble
Synopsis: Check whether event contains only a double-click event. Declaration: function Gpm_StrictDouble(EventType: LongInt) : Boolean Visibility: default Description: Gpm_StrictDouble returns true if EventType contains only a doubleclick event, False otherwise. Errors: None. See also: Gpm_StrictSingle (630), Gpm_AnyTriple (625), Gpm_AnyDouble (625), Gpm_StrictTriple (630), Gpm_AnySingle (625)
17.4.16
Gpm_StrictSingle
Synopsis: Check whether event contains only a single-click event. Declaration: function Gpm_StrictSingle(EventType: LongInt) : Boolean Visibility: default Description: Gpm_StrictDouble returns True if EventType contains only a singleclick event, False otherwise. Errors: None. See also: Gpm_AnyTriple (625), Gpm_StrictDouble (630), Gpm_AnyDouble (625), Gpm_StrictTriple (630), Gpm_AnySingle (625)
17.4.17
Gpm_StrictTriple
Synopsis: Check whether event contains only a triple-click event. Declaration: function Gpm_StrictTriple(EventType: LongInt) : Boolean Visibility: default Description: Gpm_StrictTriple returns true if EventType contains only a triple click event, False otherwise. Errors: None. See also: Gpm_AnyTriple (625), Gpm_StrictDouble (630), Gpm_AnyDouble (625), Gpm_StrictSingle (630), Gpm_AnySingle (625)
630
Chapter 18
This document describes the GRAPH unit for Free Pascal, for all platforms. The unit was rst written for dos by Florian Klaemp, but was later completely rewritten by Carl-Eric Codere to be completely portable. The unit is provided for compatibility only: It is recommended to use more modern graphical systems. The graph unit will allow to recompile old programs. They will work to some extent, but if the application has heavy graphical needs, its recommended to use another set of graphical routines, suited to the platform the program should work on.
18.2
Functions to set texts on the screen. Table 18.1: Name GetTextSettings (671) InstallUserFont (674) OutText (676) OutTextXY (663) RegisterBGIFont (677) SetTextJustify (680) SetTextStyle (681) SetUserCharSize (681) TextHeight (682) TextWidth (682) Description Get current text settings Install a new font Write text at current cursor position Write text at coordinates X,Y Register a new font Set text justication Set text style Set text size Calculate height of text Calculate width of text
18.3
631
Table 18.2: Name Bar3D (665) Bar (664) FloodFill (667) FillEllipse (666) FillPoly (666) GetFillPattern (668) GetFillSettings (669) SetFillPattern (678) SetFillStyle (679) Description Draw a lled 3D-style bar Draw a lled rectangle Fill starting from coordinate Draw a lled ellipse Draw a lled polygone Get current ll pattern Get current ll settings Set current ll pattern Set current ll settings
18.4
Functions for simple drawing. Table 18.3: Name Arc (664) Circle (662) DrawPoly (666) Ellipse (666) GetArcCoords (667) GetLineSettings (669) Line (663) LineRel (674) LineTo (675) MoveRel (675) MoveTo (675) PieSlice (676) PutPixel (663) Rectangle (676) Sector (677) SetLineStyle (679) Description Draw an arc Draw a complete circle Draw a polygone with N points Draw an ellipse Get arc coordinates Get current line drawing settings Draw line between 2 points Draw line relative to current position Draw line from current position to absolute position Move cursor relative to current position Move cursor to absolute position Draw a pie slice Draw 1 pixel Draw a non-lled rectangle Draw a sector Set current line drawing style
18.5
632
Table 18.4: Name GetBkColor (662) GetColor (667) GetDefaultPalette (668) GetMaxColor (669) GetPaletteSize (671) GetPixel (662) GetPalette (671) SetAllPalette (663) SetBkColor (664) SetColor (678) SetPalette (680) SetRGBPalette (664) Description Get current background color Get current foreground color Get default palette entries Get maximum valid color Get size of palette for current mode Get color of selected pixel Get palette entry Set all colors in palette Set background color Set foreground color Set palette entry Set palette entry with RGB values
18.6
General drawing screen management functions. Table 18.5: Name ClearViewPort (662) GetImage (662) GetMaxX (670) GetMaxY (670) GetX (672) GetY (672) ImageSize (662) GetViewSettings (672) PutImage (663) SetActivePage (663) SetAspectRatio (678) SetViewPort (682) SetVisualPage (664) SetWriteMode (682) Description Clear the current viewport Copy image from screen to memory Get maximum X coordinate Get maximum Y coordinate Get current X position Get current Y position Get size of selected image Get current viewport settings Copy image from memory to screen Set active video page Set aspect ratio for drawing routines Set current viewport Set visual page Set write mode for screen operations
18.7
633
Table 18.6: Name ClearDevice (665) CloseGraph (665) DetectGraph (665) GetAspectRatio (667) GetModeRange (671) GraphDefaults (1) GetDriverName (668) GetGraphMode (669) GetMaxMode (670) GetModeName (670) GraphErrorMsg (1) GraphResult (1) InitGraph (673) InstallUserDriver (674) RegisterBGIDriver (677) RestoreCRTMode (677) SetGraphMode (679) Description Empty the graphics screen Finish drawing session, return to text mode Detect graphical modes Get aspect ratio of screen Get range of valid modes for current driver Set defaults Return name of graphical driver Return current or last used graphics mode Get maximum mode for current driver Get name of current mode String representation of graphical error Result of last drawing operation Initialize graphics drivers Install a new driver Register a new driver Go back to text mode Set graphical mode
18.8
There are several issues on Linux that need to be taken care of: The Linux version of the Graph unit uses the libvga library. This library works on the console, not under X. If you get an error similar to /usr/bin/ld: cannot find -lvga This can mean one of two things: either libvga and its development package is not installed properly, or the directory where it is installed is not in the linker path. To remedy the former, you should install both the libvga package and libvga-devel package (or compile and install from scratch). To remedy the latter, you should add the path to the compiler command-line using the -Fl option. Programs using libvga need root privileges to run. You can make them setuid root with the following command: chown root.root myprogram chmod u+s myprogram The libvga library will give up the root privileges after it is initialized. there is an experimental version of the Graphics library available that uses GGI to do all the drawing, but it is not well tested. Its called ggigraph and is distributed in source form only. Do not use the CRT unit together with the Graph unit: the console may end up in an unusable state. Instead, the ncurses unit may function ne.
634
18.9
VESA modes (i.e., anything but 320x200x256 and 640x480x16) do not work under most installations of Windows NT, Windows 2000 and Windows XP. They also do not work for some people under Windows 98 and Windows ME, depending on their graphics drivers. However, the graph unit cannot detect this, because no errors are returned from the system. In such cases, the screen simply turns black, or will show garbage. Nothing can be done about this, the reason is missing or buggy support in the graphics drivers of the operating system.
18.10
The graph unit was implemented for compatibility with the old Turbo Pascal graph unit. For this reason, the mode constants as they were dened in the Turbo Pascal graph unit are retained. However, since 1. Video cards have evolved very much 2. Free Pascal runs on multiple platforms it was decided to implement new mode and graphic driver constants, which are more independent of the specic platform the program runs on. In this section we give a short explanation of the new mode system. the following drivers were dened: D1bit = 11; D2bit = 12; D4bit = 13; D6bit = 14; D8bit = 15; D12bit = 16; D15bit = 17; D16bit = 18; D24bit = 19; D32bit = 20; D64bit = 21;
{ 64 colors Half-brite mode - Amiga } { 4096 color modes HAM mode - Amiga }
lowNewDriver = 11; highNewDriver = 21; Each of these drivers species a desired color-depth. The following modes have been dened: detectMode m320x200 = m320x256 = m320x400 = m512x384 = m640x200 = m640x256 = m640x350 = = 30000; 30001; 30002; { 30003; { 30004; { 30005; { 30006; { 30007; {
amiga resolution (PAL) } amiga/atari resolution } mac resolution } vga resolution } amiga resolution (PAL) } vga resolution } 635
m640x400 = 30008; m640x480 = 30009; m800x600 = 30010; m832x624 = 30011; { mac resolution } m1024x768 = 30012; m1280x1024 = 30013; m1600x1200 = 30014; m2048x1536 = 30015; lowNewMode = 30001; highNewMode = 30015; These modes start at 30000 because Borland specied that the mode number should be ascending with increasing X resolution, and the new constants shouldnt interfere with the old ones. The above constants can be used to set a certain color depth and resultion, as demonstrated in the below example. If other modes than the ones above are supported by the graphics card, you will not be able to select them with this mechanism. For this reason, there is also a dynamic mode number, which is assigned at run-time. This number increases with increasing X resolution. It can be queried with the getmoderange call. This call will return the range of modes which are valid for a certain graphics driver. The numbers are guaranteed to be consecutive, and can be used to search for a certain resolution, as in the second example below. Thus, the getmoderange function can be used to detect all available modes and drivers, as in the third example below: Listing: ./graphex/inigraph1.pp
Program i n i g r a p h 1 ; { Program t o demonstrate s t a t i c g r a p h i c s mode s e l e c t i o n } uses graph ;
const TheLine = We are now i n 6 4 0 x 4 8 0 x 2 5 6 c o l o r s ! + ( press < Return > t o c o n t i n u e ) ; var gd , gm , lo , hi , e r r o r , tw , t h : i n t e g e r ; found : boolean ; begin { We want an 8 b i t mode } gd : = D 8 b i t ; gm : = m640x480 ; i n i t g r a p h ( gd , gm, ) ; { Make sure you always check g r a p h r e s u l t ! } e r r o r : = gr a p hR e s ul t ; i f ( e r r o r < > grOk ) Then begin w r i t e l n ( 640x480x256 i s n o t supported ! ) ; halt (1) end ; { We are now i n 640 x480x256 }
636
s e t C o l o r ( cyan ) ; r e c t a n g l e ( 0 , 0 , getmaxx , getmaxy ) ; { W r i t e a n i c e message i n t h e c e n t e r o f t h e screen } setTextStyle ( defaultFont , horizDir , 1 ) ; tw : = TextWidth ( TheLine ) ; t h : = T e x t H e i g h t ( TheLine ) ; outTextXY ( ( getMaxX TW) div 2 , ( getMaxY TH ) div 2 , TheLine ) ; { Wait f o r r e t u r n } readln ; { Back t o t e x t mode } c l o s e g r a ph ; end .
Listing: ./graphex/inigraph2.pp
Program i n i g r a p h 2 ; { Program t o demonstrate dynamic g r a p h i c s mode s e l e c t i o n } uses graph ; const TheLine = We are now i n 6 4 0 x 4 8 0 x 2 5 6 c o l o r s ! + ( press < Return > t o c o n t i n u e ) ; var th , tw , gd , gm , lo , hi , e r r o r : i n t e g e r ; found : boolean ; begin { We want an 8 b i t mode } gd : = D 8 b i t ; { Get a l l a v a i l a b l e r e s o l u t i o n s f o r t h i s b i t d e p t h } getmoderange ( gd , lo , h i ) ; { I f t h e h i g h e s t a v a i l a b l e mode number i s 1 , no r e s o l u t i o n s are supported f o r t h i s b i t d e p t h } i f h i = 1 then begin w r i t e l n ( no 8 b i t modes supported ! ) ; halt end ; found : = f a l s e ; { Search a l l r e s o l u t i o n s f o r 640 x480 } f o r gm : = l o to h i do begin i n i t g r a p h ( gd , gm, ) ; { Make sure you always check g r a p h r e s u l t ! } e r r o r : = gr a p hR e s ul t ; i f ( e r r o r = grOk ) and ( getmaxx = 6 3 9 ) and ( getmaxy = 4 7 9 ) then begin found : = t r u e ; break ; end ; end ; i f not found then CloseGraph ( ) ; begin
637
w r i t e l n ( 640x480x256 i s n o t supported ! ) ; halt (1) end ; { We are now i n 640 x480x256 } s e t C o l o r ( cyan ) ; r e c t a n g l e ( 0 , 0 , getmaxx , getmaxy ) ; { W r i t e a n i c e message i n t h e c e n t e r o f t h e screen } setTextStyle ( defaultFont , horizDir , 1 ) ; TW: = TextWidth ( TheLine ) ; TH: = T e x t H e i g h t ( TheLine ) ; outTextXY ( ( getMaxX TW) div 2 , ( getMaxY TH ) div 2 , TheLine ) ; { Wait f o r r e t u r n } readln ; { Back t o t e x t mode } c l o s e g r a ph ; end .
Listing: ./graphex/modrange.pp
Program GetModeRange_Example ; { T h i s program demonstrates how t o f i n d a l l a v a i l a b l e graph modes } uses graph ;
const { C u r r e n t l y , o n l y 4 , 8 , 1 5 and 1 6 b i t modes are supported b u t t h i s may change i n t h e f u t u r e } gdnames : array [ D 4 b i t . . D 1 6 b i t ] of s t r i n g [ 6 ] = ( 4 b i t , 6 b i t , 8 b i t , 12 b i t , 15 b i t , 16 b i t ) ; procedure WriteRes ( const depth : i n t e g e r ) ; var tw , t h : i n t e g e r ; v , t e x t : String ; begin t e x t : = C u r r e n t r e s o l u t i o n i s ; s t r ( getmaxx + 1 , v ) ; t e x t : = t e x t + v + x ; s t r ( getmaxy + 1 , v ) ; t e x t : = t e x t + v + x + gdnames [ depth ] ; setTextStyle ( defaultFont , horizDir , 1 ) ; TW: = TextWidth ( t e x t ) ; TH: = T e x t H e i g h t ( t e x t ) ; outTextXY ( ( getMaxX TW) div 2 , ( getMaxY TH ) div 2 , t e x t ) ; end ; var t : text ; l i n e : string ; gd , c , low , high , r e s : i n t e g e r ; begin a s s i g n ( t , modes . t x t ) ; rewrite ( t ) ; close ( t ) ; f o r gd : = D 4 b i t to D 1 6 b i t do begin { Get t h e a v a i l a b l e mode numbers f o r t h i s d r i v e r }
638
getModeRange ( gd , low , high ) ; append ( t ) ; w r i t e ( t , gdnames [ gd ] ) ; W r i t e l n ( t , : low modenr = , low , , h i g h modenr = , high ) ; close ( t ) ; { I f h i g h i s 1 , no r e s o l u t i o n s are supported f o r t h i s b i t d e p t h } i f high = 1 then begin append ( t ) ; w r i t e l n ( t , No modes supported ! ) ; writeln ( t ) ; close ( t ) ; end else { E n t e r a l l supported r e s o l u t i o n s f o r t h i s b i t d e p t h and w r i t e t h e i r c h a r a c t e r i s t i c s t o t h e f i l e } f o r c : = low to high do begin append ( t ) ; w r i t e l n ( t , t e s t i n g mode n r , c ) ; close ( t ) ; i n i t g r a p h ( gd , c , ) ; res : = g r a p h r e s u l t ; append ( t ) ; { An e r r o r o c c u r r e d when e n t e r i n g t h e mode ? } i f r e s < > grok then w r i t e l n ( t , grapherrormsg ( r e s ) ) else begin w r i t e ( t , maxx : , getmaxx , , maxy : , getmaxy ) ; W r i t e l n ( t , , maxcolor : , getmaxcolor ) ; c l os e g r a ph ; end ; writeln ( t ) ; WriteRes ( gd ) ; close ( t ) ; end ; append ( t ) ; writeln ( t ) ; close ( t ) ; end ; W r i t e l n ( A l l supported modes are l i s t e d i n modes . t x t f i l e s ) ; end .
18.11
Requirements
The unit Graph exports functions and procedures for graphical output. It requires at least a VGAcompatible Card or a VGA-Card with software-driver (min. 512Kb video memory).
639
18.12
18.12.1
AnsiToASCIITransTable : TCharsetTransTable = (#$00, #$01, #$02, #$03, #$04, #$05, #$0 Default ansi transliteration table. BkSlashFill = 5 Fill style: Diagonal (backslash) lines black = 0 Color code: black. blue = 1 Color code: blue BoldFont = 10 Font number: Bold font. BottomText = 0 Vertical text alignment: Align text to bottom brown = 6 Color code: brown CenterLn = 2 Line style: centered line CenterText = 1 Horizontal text alignment: Center text CGA = 1 Graphic driver for CGA cards CGAC0 = 0 CGA Graphic driver mode C0 640
CGAC1 = 1 CGA Graphic driver mode C1 CGAC2 = 2 CGA Graphic driver mode C2 CGAC3 = 3 CGA Graphic driver mode C3 CGAHi = 4 CGA Graphic driver Hi-res mode ClipOff = False Viewport clipping off ClipOn = True Viewport clipping on CloseDotFill = 11 Fill style: Closely spaced dotted lines CopyPut = 0 Draw operation: use Copy CurrentDriver = -128 Currently used driver cyan = 3 Color code: Cyan D12bit = 16 Mode: Depth 12 bit D15bit = 17 Mode: Depth 15 bit D16bit = 18 Mode: Depth 16 bit 641
D1bit = 11 Mode: Depth 1 bit D24bit = 19 Mode: Depth 24 bit D2bit = 12 Mode: Depth 2 bit D32bit = 20 Mode: Depth 32 bit D4bit = 13 Mode: Depth 4 bit D64bit = 21 Mode: Depth 64 bit D6bit = 14 Mode: Depth 6 bit D8bit = 15 Mode: Depth 8 bit darkgray = 8 Color code: Dark gray DashedLn = 3 Line style: dashed line Default = 0 Default mode DefaultFont = 0 Font number: Normal font Detect = 0 Mode: Detect mode. 642
detectMode = 30000 Mode: Autodetect optimal mode DottedLn = 1 Line style: Dotted line DrawTextBackground : Boolean = False Should the background of texts be drawn or should it be left untouched ? EGA = 3 Graphic driver for EGA cards EGA64 = 4 Graphic driver for EGA 64 cards EGA64Hi = 1 EGA64 graphic driver high resolution mode EGA64Lo = 0 EGA64 graphic driver low resolution mode EGABlack = 0 Color code: EGA Black EGABlue = 1 Color code: EGA blue EGABrown = 20 Color code: EGA brown EGACyan = 3 Color code: EGA cyan EGADarkgray = 56 Color code: EGA dark gray EGAGreen = 2 Color code: EGA green 643
EGAHi = 1 EGA graphic driver high resolution mode EGALightblue = 57 Color code: EGA Light blue EGALightcyan = 59 Color code: EGA Light cyan EGALightgray = 7 Color code: EGA Light gray EGALightgreen = 58 Color code: EGA Light green EGALightmagenta = 61 Color code: EGA light magenta EGALightred = 60 Color code: EGA light red EGALo = 0 EGA graphic driver low resolution mode EGAMagenta = 5 Color code: EGA magenta EGAMono = 5 Graphic driver for EGA monochrome cards EGAMonoHi = 3 EGAMono graphic driver high resolution mode EGARed = 4 Color code: EGA red EGAWhite = 63 Color code: EGA white 644
EGAYellow = 62 Color code: EGA yellow EmptyFill = 0 Fill style: Do not ll EuroFont = 9 Font number: ? fillpatternTable : Array[0..12] of FillPatternType = (($00, $00, $00, $00, $00, $00, Table with standard ll patterns G1024x768x16 = 30 Mode: Resolution 1024x768, 16 colors G1024x768x16M = 25 Mode: Resolution 1024x768, 16M colors G1024x768x16M32 = 36 Mode: Resolution 1024x758, 16M 32-bit colors G1024x768x256 = 12 Mode: Resolution 1024x768, 256 colors G1024x768x32K = 23 Mode: Resolution 1024x768, 32K colors G1024x768x64K = 24 Mode: Resolution 1024x768, 64K colors G1152x864x16 = 38 Mode: Resolution 1152x864, 16 colors G1152x864x16M = 42 Mode: Resolution 1152x864, 16M colors G1152x864x16M32 = 43 Mode: Resolution 1152x864, 16M 32-bitcolors 645
G1152x864x256 = 39 Mode: Resolution 1152x864, 256 colors G1152x864x32K = 40 Mode: Resolution 1152x864, 32K colors G1152x864x64K = 41 Mode: Resolution 1152x864, 64K colors G1280x1024x16 = 31 Mode: Resolution 1280x1024, 16 colors G1280x1024x16M = 28 Mode: Resolution 1280x1024, 16M colors G1280x1024x16M32 = 37 Mode: Resolution 1280x1024, 16M 32-bit colors G1280x1024x256 = 13 Mode: Resolution 1280x1024, 256 colors G1280x1024x32K = 26 Mode: Resolution 1280x1024, 32K colors G1280x1024x64K = 27 Mode: Resolution 1280x1024, 64K colors G1600x1200x16 = 44 Mode: Resolution 1600x1200, 16 colors G1600x1200x16M = 48 Mode: Resolution 1600x1200, 16M colors G1600x1200x16M32 = 49 Mode: Resolution 1600x1200, 16M 32-bit colors G1600x1200x256 = 45 Mode: Resolution 1600x1200, 256 colors 646
G1600x1200x32K = 46 Mode: Resolution 1600x1200, 32K colors G1600x1200x64K = 47 Mode: Resolution 1600x1200, 64K colors G320x200x16 = 1 Mode: Resulution 320x200, 16 colors G320x200x16M = 16 Mode: Resolution 320x200, 16M colors G320x200x16M32 = 33 Mode: Resolution 320x200, 16M 32-bit colors G320x200x256 = 5 Mode: Resolution 320x200, 256 colors G320x200x32K = 14 Mode: Resolution 320x200, 32K colors G320x200x64K = 15 Mode: Resolution 320x200, 64K colors G320x240x256 = 6 Mode: Resolution 320x240, 256 colors G320x400x256 = 7 Mode: Resolution 320x400, 256 colors G360x480x256 = 8 Mode: Resolution 360x480, 256 colors G640x200x16 = 2 Mode: Resolution x, colors G640x350x16 = 3 Mode: Resolution x, colors 647
G640x480x16 = 4 Mode: Resolution x, colors G640x480x16M = 19 Mode: Resolution 640x480, 16M colors G640x480x16M32 = 34 Mode: Resolution 640x480, 16M 32-bit colors G640x480x2 = 9 Mode: Resolution 640x480, 2 colors G640x480x256 = 10 Mode: Resolution 640x480, 256 colors G640x480x32K = 17 Mode: Resolution 640x480, 32K colors G640x480x64K = 18 Mode: Resolution 640x480, 64K colors G720x348x2 = 32 Mode: Resolution 720x348, 2 colors G800x600x16 = 29 Mode: Resolution 800x600, 16 colors G800x600x16M = 22 Mode: Resolution 800x600, 16M colors G800x600x16M32 = 35 Mode: Resolution 800x600, 16M 32-bit colors G800x600x256 = 11 Mode: Resolution 800x600, 256 colors G800x600x32K = 20 Mode: Resolution 800x600, 32K colors 648
G800x600x64K = 21 Mode: Resolution 800x600, 64K colors GothicFont = 4 Font number: Gothic font GraphStringTransTable : PCharsetTransTable = Nil Table used when transliterating strings. green = 2 Color code: green grError = -11 Error: Unknown error. grFileNotFound = -3 Error: File for driver not found. grFontNotFound = -8 Error: font description le not found. grInvalidDriver = -4 Error: Invalid driver specied grInvalidFont = -13 Error: Invalid font description grInvalidFontNum = -14 Error: Invalid font number grInvalidMode = -10 Error: Invalid mode specied. grInvalidVersion = -18 Error: Invalid version. grIOerror = -12 Error: Unspecied Input/Output error. 649
grNoFloodMem = -7 Error: Could not allocate memory for ood operation. grNoFontMem = -9 Error: Not enough memory to load font. grNoInitGraph = -1 Error: Graphical system not initialized grNoLoadMem = -5 Error: Memory error. grNoScanMem = -6 Error: Could not allocate memory for scan grNotDetected = -2 Error: Graphics device not detected. grOk = 0 Graphical operation went OK. HatchFill = 7 Fill style: Hatch lines HercMono = 7 Mode: Hercules, mono color HercMonoHi = 0 Mode: Hercules card, monochrome, high resolution highNewDriver = 21 Mode: highest number for new driver highNewMode = 30015 Mode: Highest possible value of the new modes. HorizDir = 0 Text write direction: Horizontal 650
InterleaveFill = 9 Fill style: Interleaving lines LCOMFont = 8 Font number: ? LeftText = 0 Horizontal text alignment: Align text left lightblue = 9 Color code: Light blue lightcyan = 11 Color code: Light cyan lightgray = 7 Color code: Light gray lightgreen = 10 Color code: Light green lightmagenta = 13 Color code: Light magenta lightred = 12 Color code: Light red LineFill = 2 Fill style: Fill using horizontal lines lowNewDriver = 11 Mode: lowest number for new driver lowNewMode = 30001 Mode: Lowest possible value of the new modes. LowRes = 6 Mode: Low resolution. 651
LtBkSlashFill = 6 Fill style: Light diagonal (backslash) lines LtSlashFill = 3 Fill style: Light diagonal (slash) lines m1024x768 = 30012 Mode: Resolution 1024x768 m1280x1024 = 30013 Mode: Resolution 1280x1024 m1600x1200 = 30014 Mode: Resolution 1600x1200 m2048x1536 = 30015 Mode: Resolution 2048x1536 m320x200 = 30001 Mode: Resolution 320x200 m320x256 = 30002 Mode: Resolution 320x256 m320x400 = 30003 Mode: Resolution 320x400 m512x384 = 30004 Mode: Resolution 512x384 m640x200 = 30005 Mode: Resolution 640x200 m640x256 = 30006 Mode: Resolution 640x256 m640x350 = 30007 Mode: Resolution 640x350 652
m640x400 = 30008 Mode: Resolution 640x400 m640x480 = 30009 Mode: Resolution 640x480 m800x600 = 30010 Mode: Resolution 800x600 m832x624 = 30011 Mode: Resolution 832x624 magenta = 5 Color code: Magenta MaxColors = 255 Max amount of colors in a palette maxsmallint = (smallint) Maximum value for smallint type MCGA = 2 Graphic driver for MCGA cards MCGAC0 = 0 MCGA Graphic driver mode C0 MCGAC1 = 1 MCGA Graphic driver mode C1 MCGAC2 = 2 MCGA Graphic driver mode C2 MCGAC3 = 3 MCGA Graphic driver mode C3 MCGAHi = 5 MCGA Graphic driver high resolution mode 653
MCGAMed = 4 MCGA Graphic driver medium resolution mode NormalPut = 0 Draw operation: Use Normal (copy) operation NormWidth = 1 Line width: Normal width NotPut = 4 Draw operation: use NOT OrPut = 2 Draw operation: use OR red = 4 Color code: Red
resolutions : Array[lowNewMode..highNewMode] of TResolutionRec = ((x: 320; y: 200), ( Array with actual resolutions of the new modes RightText = 2 Horizontal text alignment: Align text right SansSerifFont = 3 Font number: Sans Serif font ScriptFont = 5 Font number: Script font SimpleFont = 6 Font number: Simple font SlashFill = 4 Fill style: Diagonal (slash) lines SmallFont = 2 Font number: Small font 654
SolidFill = 1 Fill style: Solid ll. SolidLn = 0 Line style: Solid line ThickWidth = 3 Line width: double width TopOff = False Top off TopOn = True Top on TopText = 2 Vertical text alignment: Align text to top TriplexFont = 1 Font number: Triplex font TSCRFont = 7 Font number: Terminal font UserBitLn = 4 Line style: User dened UserCharSize = 0 User character size UserFill = 12 Fill style: User-dened ll. VertDir = 1 Text write direction: Vertical VESA = 10 Mode: VESA graphics adaptor. 655
VGA = 9 Mode: VGA graphics adaptor. VGAHi = 2 Mode: VGA high resolution (640x480) VGALo = 0 Mode: VGA low resolution (640x200) VGAMed = 1 Mode: VGA medium resolution (640x350) white = 15 Color code: White WideDotFill = 10 Fill style: Widely spaced dotted lines XHatchFill = 8 Fill style: Heavy hatch lines XORPut = 1 Draw operation: use XOR yellow = 14 Color code: Yellow
18.12.2
Types
ArcCoordsType = record x : SmallInt; y : SmallInt; xstart : SmallInt; ystart : SmallInt; xend : SmallInt; yend : SmallInt; end
Describe the last arc which was drawn on screen CircleProc = procedure(X: SmallInt;Y: SmallInt;Radius: Word) 656
Standard circle drawing routine prototype. clrviewproc = procedure Standard clearviewport routine prototype defpixelproc = procedure(X: SmallInt;Y: SmallInt) This is the standard putpixel routine used by all function drawing routines, it will use the viewport settings, as well as clip, and use the current foreground color to plot the desired pixel. ellipseproc = procedure(X: SmallInt;Y: SmallInt;XRadius: Word; YRadius: Word;stAngle: Word;EndAngle: Word; fp: patternlineproc) Standard ellipse drawing routine prototype. FillPatternType = Array[1..8] of Byte Bit pattern used when drawing lines. Set bits are drawn. FillSettingsType = record pattern : Word; color : Word; end
Record describing ll mode GetBkColorProc = function : Word GetBkColorProc is the procedure prototype for the GetBkColor (662) method handler in TModeInfo (661). The function should return the color code of the background color. getimageproc = procedure(X1: SmallInt;Y1: SmallInt;X2: SmallInt; Y2: SmallInt;var Bitmap) Standard GetImage (662) procedure prototype. getpixelproc = function(X: SmallInt;Y: SmallInt) : Word Standard pixel fetching routine prototype getrgbpaletteproc = procedure(ColorNum: SmallInt;var RedValue: SmallInt; var GreenValue: SmallInt; var BlueValue: SmallInt) This routine prototype is a hook for GetRGBPalette (662) getscanlineproc = procedure(X1: SmallInt;X2: SmallInt;Y: SmallInt; var data) 657
This routine is used for FloodFill (667) It returns an entire screen scan line with a word for each pixel in the scanline. Also handy for GetImage. graphfreememprc = procedure(var P: Pointer;size: Word) Procedure prototype, used when heap memory is freed by the graph routines. graphgetmemprc = procedure(var P: pointer;size: Word) Procedure prototype, used when heap memory is needed by the graph routines. graph_float = single The platforms preferred oating point size for fast graph operations hlineproc = procedure(x: SmallInt;x2: SmallInt;y: SmallInt) Standard procedure prototype to draw a single horizontal line imagesizeproc = function(X1: SmallInt;Y1: SmallInt;X2: SmallInt; Y2: SmallInt) : LongInt Standard ImageSize (662) calculation procedure prototype. initmodeproc = procedure Standard routine prototype to initialize a mode. lineproc = procedure(X1: SmallInt;Y1: SmallInt;X2: SmallInt; Y2: SmallInt) Standard line drawing routine prototype. LineSettingsType = record linestyle : Word; pattern : Word; thickness : Word; end
Record describing current line drawing mode OutTextXYProc = procedure(x: SmallInt;y: SmallInt; const TextString: string) This routine prototype is a hook for OutTextXY (663) PaletteType = record Size : LongInt; Colors : Array[0..MaxColors] of RGBRec; end
658
Record describing palette. patternlineproc = procedure(x1: SmallInt;x2: SmallInt;y: SmallInt) Standard procedure prototype to draw a patterned line PCharsetTransTable = ^TCharsetTransTable Pointer to TCharsetTransTable (660) array. PModeInfo = ^TModeInfo Pointer to TModeInfo (661) record PointType = record x : SmallInt; y : SmallInt; end
Record describing a point in a 2 dimensional plane putimageproc = procedure(X: SmallInt;Y: SmallInt;var Bitmap; BitBlt: Word) Standard PutImage (663) procedure prototype. putpixelproc = procedure(X: SmallInt;Y: SmallInt;Color: Word) Standard pixel drawing routine prototype restorestateproc = procedure Standard routine prototype to restore the graphical state at a closegraph call. RGBRec = packed record Red : SmallInt; Green : SmallInt; Blue : SmallInt; end
Record describing palette RGB color savestateproc = procedure Standard routine prototype to save the graphical state before a mode is set. setactivepageproc = procedure(page: Word) Standard SetActivePage (663) procedure prototype. 659
SetAllPaletteProc = procedure(const Palette: PaletteType) This routine prototype is a hook for SetAllPalette (663) SetBkColorProc = procedure(ColorNum: Word) SetBkColorProc is the procedure prototype for the SetBkColor (664) method handler in TModeInfo (661). The procedure gets passed the color code for the color to set as background color. setrgbpaletteproc = procedure(ColorNum: SmallInt;RedValue: SmallInt; GreenValue: SmallInt;BlueValue: SmallInt) This routine prototype is a hook for SetRGBPalette (664) setvisualpageproc = procedure(page: Word) Standard SetVisualPage (664) procedure prototype. TCharsetTransTable = Array[Char] of Char Character transliteration table, with entries for 256 characters TextSettingsType = record font : Word; direction : Word; charsize : Word; horiz : Word; vert : Word; end
Record describing how texts are drawn. TModeInfo = record DriverNumber : SmallInt; ModeNumber : SmallInt; internModeNumber : SmallInt; MaxColor : LongInt; PaletteSize : LongInt; XAspect : Word; YAspect : Word; MaxX : Word; MaxY : Word; DirectColor : Boolean; Hardwarepages : Byte; ModeName : string; DirectPutPixel : defpixelproc; GetPixel : getpixelproc; PutPixel : putpixelproc; SetRGBPalette : setrgbpaletteproc; GetRGBPalette : getrgbpaletteproc; SetAllPalette : SetAllPaletteProc; 660
SetVisualPage : setvisualpageproc; SetActivePage : setactivepageproc; ClearViewPort : clrviewproc; PutImage : putimageproc; GetImage : getimageproc; ImageSize : imagesizeproc; GetScanLine : getscanlineproc; Line : lineproc; InternalEllipse : ellipseproc; PatternLine : patternlineproc; HLine : hlineproc; VLine : vlineproc; Circle : CircleProc; InitMode : initmodeproc; OutTextXY : OutTextXYProc; SetBKColor : SetBkColorProc; GetBKColor : GetBkColorProc; next : PModeInfo; end
Record describing a graphical mode. TNewModeInfo = record modeInfo : Array[lowNewDriver..highNewDriver] of PModeInfo; loHiModeNr : Array[lowNewDriver..highNewDriver] of ; end
Mode information for new modes.a TResolutionRec = record x : LongInt; y : LongInt; end
Record describing resolution ViewPortType = record x1 : SmallInt; y1 : SmallInt; x2 : SmallInt; y2 : SmallInt; Clip : Boolean; end
Record describing a viewport vlineproc = procedure(x: SmallInt;y: SmallInt;y2: SmallInt) Standard procedure prototype to draw a single vertical line 661
18.12.3
Variables
Circle : CircleProc Circle draws a complete circle with center at (X,Y), radius radius. ClearViewPort : clrviewproc Clears the current viewport. The current background color is used as lling color. The pointer is set at (0,0). DirectPutPixel : defpixelproc Hook to directly draw a pixel on the screen. GetBkColor : GetBkColorProc GetBkColor returns the current background color (the palette entry). GetImage : getimageproc GetImage Places a copy of the screen area (X1,Y1) to X2,Y2 in BitMap GetPixel : getpixelproc GetPixel returns the color of the point at (X,Y) GetRGBPalette : getrgbpaletteproc Hook to set a RGB palette entries. GetScanLine : getscanlineproc Hook to get a scan line from the screen. GraphFreeMemPtr : graphfreememprc Hook to free heap memory. GraphGetMemPtr : graphgetmemprc Hook to get heap memory HLine : hlineproc Hook to draw a solid horizontal line ImageSize : imagesizeproc ImageSize returns the number of bytes needed to store the image in the rectangle dened by (X1,Y1) and (X2,Y2). 662
InternalEllipse : ellipseproc Hook to draw an ellipse Line : lineproc Line draws a line starting from (X1,Y1 to (X2,Y2), in the current line style and color. The current position is put to (X2,Y2) OutTextXY : OutTextXYProc OutText puts TextString on the screen, at position (X,Y), using the current font and text settings. The current position is moved to the end of the text. PatternLine : patternlineproc Hook to draw a patterned line PutImage : putimageproc PutImage Places the bitmap in Bitmap on the screen at (X1,Y1). How determines how the bitmap will be placed on the screen. Possible values are : CopyPut XORPut ORPut AndPut NotPut PutPixel : putpixelproc Puts a point at (X,Y) using color Color RestoreVideoState : restorestateproc Hook to restore a saved video mode SaveVideoState : savestateproc Hook to save the current video state SetActivePage : setactivepageproc Sets Page as the active page for all graphical output. SetAllPalette : SetAllPaletteProc Sets the current palette to Palette. Palette is an untyped variable, usually pointing to a record of type PaletteType 663
SetBkColor : SetBkColorProc Sets the background color to Color. SetRGBPalette : setrgbpaletteproc SetRGBPalette sets the ColorNr-th entry in the palette to the color with RGB-values Red, Green Blue. SetVisualPage : setvisualpageproc SetVisualPage sets the video page to page number Page. VLine : vlineproc Hook to draw a solid vertical line
18.13
18.13.1
Synopsis: Draw part of a circle Declaration: procedure Arc(X: SmallInt;Y: SmallInt;StAngle: Word;EndAngle: Word; Radius: Word) Visibility: default Description: Arc draws part of a circle with center at (X,Y), radius radius, starting from angle start, stopping at angle stop. These angles are measured counterclockwise. Errors: None. See also: Circle (662), Ellipse (666), GetArcCoords (667), PieSlice (676), Sector (677)
18.13.2
Bar
Synopsis: Draw lled rectangle Declaration: procedure Bar(x1: SmallInt;y1: SmallInt;x2: SmallInt;y2: SmallInt) Visibility: default Description: Draws a rectangle with corners at (X1,Y1) and (X2,Y2) and lls it with the current color and ll-style. Errors: None. See also: Bar3D (665), Rectangle (676)
664
18.13.3
Bar3D
Synopsis: Draw lled 3-dimensional rectangle Declaration: procedure Bar3D(x1: SmallInt;y1: SmallInt;x2: SmallInt;y2: SmallInt; depth: Word;top: Boolean) Visibility: default Description: Bar3d draws a 3-dimensional Bar with corners at (X1,Y1) and (X2,Y2) and lls it with the current color and ll-style. Depth species the number of pixels used to show the depth of the bar. If Top is true; then a 3-dimensional top is drawn. Errors: None. See also: Bar (664), Rectangle (676)
18.13.4
ClearDevice
Synopsis: Clear the complete screen Declaration: procedure ClearDevice Visibility: default Description: Clears the graphical screen (with the current background color), and sets the pointer at (0,0). Errors: None. See also: ClearViewPort (662), SetBkColor (664)
18.13.5
Closegraph
Synopsis: Close graphical system. Declaration: procedure Closegraph Visibility: default Description: Closes the graphical system, and restores the screen modus which was active before the graphical modus was activated. Errors: None. See also: InitGraph (673)
18.13.6
DetectGraph
Synopsis: Detect correct graphical driver to use Declaration: procedure DetectGraph(var GraphDriver: SmallInt;var GraphMode: SmallInt) Visibility: default Description: DetectGraph checks the hardware in the PC and determines the driver and screen-modus to be used. These are returned in Driver and Modus, and can be fed to InitGraph. See the InitGraph for a list of drivers and modi. Errors: None. See also: InitGraph (673) 665
18.13.7
DrawPoly
Synopsis: Draw a polygone Declaration: procedure DrawPoly(NumPoints: Word;var polypoints) Visibility: default Description: DrawPoly draws a polygone with NumberOfPoints corner points, using the current color and line-style. PolyPoints is an array of type PointType (659). Errors: None. See also: Bar (664), Bar3D (665), Rectangle (676)
18.13.8
Ellipse
Synopsis: Draw an ellipse Declaration: procedure Ellipse(X: SmallInt;Y: SmallInt;stAngle: Word;EndAngle: Word; XRadius: Word;YRadius: Word) Visibility: default Description: Ellipse draws part of an ellipse with center at (X,Y). XRadius and Yradius are the horizontal and vertical radii of the ellipse. Start and Stop are the starting and stopping angles of the part of the ellipse. They are measured counterclockwise from the X-axis (3 oclock is equal to 0 degrees). Only positive angles can be specied. Errors: None. See also: Arc (664), Circle (662), FillEllipse (666)
18.13.9
FillEllipse
Synopsis: Draw and ll an ellipse Declaration: procedure FillEllipse(X: SmallInt;Y: SmallInt;XRadius: Word; YRadius: Word) Visibility: default Description: Ellipse draws an ellipse with center at (X,Y). XRadius and Yradius are the horizontal and vertical radii of the ellipse. The ellipse is lled with the current color and ll-style. Errors: None. See also: Arc (664), Circle (662), GetArcCoords (667), PieSlice (676), Sector (677)
18.13.10
FillPoly
Synopsis: Draw, close and ll a polygone Declaration: procedure FillPoly(NumPoints: Word;var PolyPoints) Visibility: default Description: FillPoly draws a polygone with NumberOfPoints corner points and lls it using the current color and line-style. PolyPoints is an array of type PointType. 666
Errors: None. See also: Bar (664), Bar3D (665), Rectangle (676)
18.13.11
FloodFill
Synopsis: Fill an area with a given color Declaration: procedure FloodFill(x: SmallInt;y: SmallInt;Border: Word) Visibility: default Description: Fills the area containing the point (X,Y), bounded by the color BorderColor. Errors: None See also: SetColor (678), SetBkColor (664)
18.13.12
GetArcCoords
Synopsis: Return coordinates of last drawn arc or ellipse. Declaration: procedure GetArcCoords(var ArcCoords: ArcCoordsType) Visibility: default Description: GetArcCoords returns the coordinates of the latest Arc or Ellipse call. Errors: None. See also: Arc (664), Ellipse (666)
18.13.13
GetAspectRatio
Synopsis: Return screen resolution Declaration: procedure GetAspectRatio(var Xasp: Word;var Yasp: Word) Visibility: default Description: GetAspectRatio determines the effective resolution of the screen. The aspect ration can then be calculated as Xasp/Yasp. Errors: None. See also: InitGraph (673), SetAspectRatio (678)
18.13.14
GetColor
Synopsis: Return current drawing color Declaration: function GetColor : Word Visibility: default Description: GetColor returns the current drawing color (the palette entry). Errors: None. See also: GetColor (667), SetBkColor (664) 667
18.13.15
GetDefaultPalette
Synopsis: Return default palette Declaration: procedure GetDefaultPalette(var Palette: PaletteType) Visibility: default Description: GetDefaultPalette returns the current palette in Palette. Errors: None. See also: GetColor (667), GetBkColor (662)
18.13.16
GetDirectVideo
Synopsis: Determine whether direct video mode is active. Declaration: function GetDirectVideo : Boolean Visibility: default Description: Determine whether direct video mode is active.
18.13.17
GetDriverName
Synopsis: Return current driver name Declaration: function GetDriverName : string Visibility: default Description: GetDriverName returns a string containing the name of the current driver. Errors: None. See also: GetModeName (670), InitGraph (673)
18.13.18
GetFillPattern
Synopsis: Return current ll pattern Declaration: procedure GetFillPattern(var FillPattern: FillPatternType) Visibility: default Description: GetFillPattern returns an array with the current ll-pattern in FillPattern Errors: None See also: SetFillPattern (678)
668
18.13.19
GetFillSettings
Synopsis: Return current ll settings Declaration: procedure GetFillSettings(var Fillinfo: FillSettingsType) Visibility: default Description: GetFillSettings returns the current ll-settings in FillInfo Errors: None. See also: SetFillPattern (678)
18.13.20
GetGraphMode
Synopsis: Get current graphical modus Declaration: function GetGraphMode : SmallInt Visibility: default Description: GetGraphMode returns the current graphical modus Errors: None. See also: InitGraph (673)
18.13.21
GetLineSettings
Synopsis: Get current line drawing settings Declaration: procedure GetLineSettings(var ActiveLineInfo: LineSettingsType) Visibility: default Description: GetLineSettings returns the current Line settings in LineInfo Errors: None. See also: SetLineStyle (679)
18.13.22
GetMaxColor
Synopsis: return maximum number of colors Declaration: function GetMaxColor : Word Visibility: default Description: GetMaxColor returns the maximum color-number which can be set with SetColor. Contrary to Turbo Pascal, this color isnt always guaranteed to be white (for instance in 256+ color modes). Errors: None. See also: SetColor (678), GetPaletteSize (671)
669
18.13.23
GetMaxMode
Synopsis: Return biggest mode for the current driver Declaration: function GetMaxMode : SmallInt Visibility: default Description: GetMaxMode returns the highest modus for the current driver. Errors: None. See also: InitGraph (673)
18.13.24
GetMaxX
Synopsis: Return maximal X coordinate Declaration: function GetMaxX : SmallInt Visibility: default Description: GetMaxX returns the maximum horizontal screen length Errors: None. See also: GetMaxY (670)
18.13.25
GetMaxY
Synopsis: Return maximal Y coordinate Declaration: function GetMaxY : SmallInt Visibility: default Description: GetMaxY returns the maximum number of screen lines Errors: None. See also: GetMaxY (670)
18.13.26
GetModeName
Synopsis: Return description a modus Declaration: function GetModeName(ModeNumber: SmallInt) : string Visibility: default Description: GetModeName Returns a string with the name of modus Modus Errors: None. See also: GetDriverName (668), InitGraph (673)
670
18.13.27
GetModeRange
Synopsis: Return lowest and highest modus of current driver Declaration: procedure GetModeRange(GraphDriver: SmallInt;var LoMode: SmallInt; var HiMode: SmallInt) Visibility: default Description: GetModeRange returns the Lowest and Highest modus of the currently installed driver. If no modes are supported for this driver, HiModus will be -1. Errors: None. See also: InitGraph (673)
18.13.28
GetPalette
Synopsis: Return current palette Declaration: procedure GetPalette(var Palette: PaletteType) Visibility: default Description: GetPalette returns in Palette the current palette. Errors: None. See also: GetPaletteSize (671), SetPalette (680)
18.13.29
GetPaletteSize
Synopsis: Return maximal number of entries in current palette Declaration: function GetPaletteSize : SmallInt Visibility: default Description: GetPaletteSize returns the maximum number of entries in the current palette. Errors: None. See also: GetPalette (671), SetPalette (680)
18.13.30
GetTextSettings
Synopsis: Return current text style Declaration: procedure GetTextSettings(var TextInfo: TextSettingsType) Visibility: default Description: GetTextSettings returns the current text style settings : The font, direction, size and placement as set with SetTextStyle and SetTextJustify Errors: None. See also: SetTextStyle (681), SetTextJustify (680)
671
18.13.31
GetViewSettings
Synopsis: Return current viewport Declaration: procedure GetViewSettings(var viewport: ViewPortType) Visibility: default Description: GetViewSettings returns the current viewport and clipping settings in ViewPort. Errors: None. See also: SetViewPort (682)
18.13.32
GetX
Synopsis: Return current cursor X position Declaration: function GetX : SmallInt Visibility: default Description: GetX returns the X-coordinate of the current position of the graphical pointer Errors: None. See also: GetY (672)
18.13.33
GetY
Synopsis: Return current cursor Y position Declaration: function GetY : SmallInt Visibility: default Description: GetY returns the Y-coordinate of the current position of the graphical pointer Errors: None. See also: GetX (672)
18.13.34
GraphDefaults
Synopsis: Reset graphical mode to defaults Declaration: procedure GraphDefaults Visibility: default Description: GraphDefaults resets all settings for viewport, palette, foreground and background pattern, linestyle and pattern, lling style, lling color and pattern, font, text-placement and text size. Errors: None. See also: SetViewPort (682), SetFillStyle (679), SetColor (678), SetBkColor (664), SetLineStyle (679)
672
18.13.35
GraphErrorMsg
Synopsis: Return a description of an error Declaration: function GraphErrorMsg(ErrorCode: SmallInt) : string Visibility: default Description: GraphErrorMsg returns a string describing the error Errorcode. This string can be used to let the user know what went wrong. Errors: None. See also: GraphResult (1)
18.13.36
GraphResult
Synopsis: Result of last graphical operation Declaration: function GraphResult : SmallInt Visibility: default Description: GraphResult returns an error-code for the last graphical operation. If the returned value is zero, all went well. A value different from zero means an error has occurred. besides all operations which draw something on the screen, the following procedures also can produce a GraphResult different from zero: InstallUserFont (674) SetLineStyle (679) SetWriteMode (682) SetFillStyle (679) SetTextJustify (680) SetGraphMode (679) SetTextStyle (681) Errors: None. See also: GraphErrorMsg (1)
18.13.37
InitGraph
Synopsis: Initialize grpahical system Declaration: procedure InitGraph(var GraphDriver: SmallInt;var GraphMode: SmallInt; const PathToDriver: string) Visibility: default Description: InitGraph initializes the graph package. GraphDriver has two valid values: GraphDriver=0 which performs an auto detect and initializes the highest possible mode with the most colors. 1024x768x64K is the highest possible resolution supported by the driver, if you need a higher resolution, you must edit MODES.PPI. If you need another mode, then set GraphDriver to a value different from zero and graphmode to the mode you wish (VESA modes where 640x480x256 is 101h etc.). PathToDriver is only needed, if you use the BGI fonts from Borland. Free Pascal does not offer BGI fonts like Borland, these must be obtained separately. Example code: 673
var gd,gm : integer; PathToDriver : string; begin gd:=detect; { highest possible resolution } gm:=0; { not needed, auto detection } PathToDriver:=C:\PP\BGI; { path to BGI fonts, drivers arent needed } InitGraph(gd,gm,PathToDriver); if GraphResult<>grok then halt; ..... { whatever you need } CloseGraph; { restores the old graphics mode } end. Errors: None. See also: Modes (635), DetectGraph (665), CloseGraph (665), GraphResult (1)
18.13.38
InstallUserDriver
Synopsis: Install a user driver Declaration: function InstallUserDriver(Name: string;AutoDetectPtr: Pointer) : SmallInt Visibility: default Description: InstallUserDriver adds the device-driver DriverPath to the list of .BGI drivers. AutoDetectPtr is a pointer to a possible auto-detect function. Errors: None. See also: InitGraph (673), InstallUserFont (674)
18.13.39
InstallUserFont
Synopsis: Install a user-dened font Declaration: function InstallUserFont(const FontFileName: string) : SmallInt Visibility: default Description: InstallUserFont adds the font in FontPath to the list of fonts of the .BGI system. Errors: None. See also: InitGraph (673), InstallUserDriver (674)
18.13.40
LineRel
Synopsis: Draw a line starting from current position in given direction Declaration: procedure LineRel(Dx: SmallInt;Dy: SmallInt) Visibility: default
674
Description: LineRel draws a line starting from the current pointer position to the point(DX,DY), \textbf{relative} to the current position, in the current line style and color. The Current Position is set to the endpoint of the line. Errors: None. See also: Line (663), LineTo (675)
18.13.41
LineTo
Synopsis: Draw a line starting from current position to a given point Declaration: procedure LineTo(X: SmallInt;Y: SmallInt) Visibility: default Description: LineTo draws a line starting from the current pointer position to the point(DX,DY, \textbf{relative} to the current position, in the current line style and color. The Current position is set to the end of the line. Errors: None. See also: LineRel (674), Line (663)
18.13.42
MoveRel
Synopsis: Move cursor relative to current position Declaration: procedure MoveRel(Dx: SmallInt;Dy: SmallInt) Visibility: default Description: MoveRel moves the pointer to the point (DX,DY), relative to the current pointer position Errors: None. See also: MoveTo (675)
18.13.43
MoveTo
Synopsis: Move cursor to absolute position. Declaration: procedure MoveTo(X: SmallInt;Y: SmallInt) Visibility: default Description: MoveTo moves the pointer to the point (X,Y). Errors: None. See also: MoveRel (675)
675
18.13.44
OutText
Synopsis: Write text on the screen at the current location. Declaration: procedure OutText(const TextString: string) Visibility: default Description: OutText puts TextString on the screen, at the current pointer position, using the current font and text settings. The current position is moved to the end of the text. Errors: None. See also: OutTextXY (663)
18.13.45
PieSlice
Synopsis: Draw a pie-slice Declaration: procedure PieSlice(X: SmallInt;Y: SmallInt;stangle: SmallInt; endAngle: SmallInt;Radius: Word) Visibility: default Description: PieSlice draws and lls a sector of a circle with center (X,Y) and radius Radius, starting at angle Start and ending at angle Stop. Errors: None. See also: Arc (664), Circle (662), Sector (677)
18.13.46
queryadapterinfo
Synopsis: Function called to retrieve the current video adapter settings. Declaration: function queryadapterinfo : PModeInfo Visibility: default
18.13.47
Rectangle
Synopsis: Draw a rectangle on the screen. Declaration: procedure Rectangle(x1: SmallInt;y1: SmallInt;x2: SmallInt;y2: SmallInt) Visibility: default Description: Draws a rectangle with corners at (X1,Y1) and (X2,Y2), using the current color and style. Errors: None. See also: Bar (664), Bar3D (665)
676
18.13.48
RegisterBGIDriver
Synopsis: Register a new BGI driver. Declaration: function RegisterBGIDriver(driver: pointer) : SmallInt Visibility: default Description: Registers a user-dened BGI driver Errors: None. See also: InstallUserDriver (674), RegisterBGIFont (677)
18.13.49
RegisterBGIfont
Synopsis: Register a new BGI font Declaration: function RegisterBGIfont(font: pointer) : SmallInt Visibility: default Description: Registers a user-dened BGI driver Errors: None. See also: InstallUserFont (674), RegisterBGIDriver (677)
18.13.50
RestoreCrtMode
Synopsis: Restore text screen Declaration: procedure RestoreCrtMode Visibility: default Description: Restores the screen modus which was active before the graphical modus was started. To get back to the graph mode you were last in, you can use SetGraphMode(GetGraphMode) Errors: None. See also: InitGraph (673)
18.13.51
Sector
Synopsis: Draw and ll a sector of an ellipse Declaration: procedure Sector(x: SmallInt;y: SmallInt;StAngle: Word;EndAngle: Word; XRadius: Word;YRadius: Word) Visibility: default Description: Sector draws and lls a sector of an ellipse with center (X,Y) and radii XRadius and YRadius, starting at angle Start and ending at angle Stop. Errors: None. See also: Arc (664), Circle (662), PieSlice (676)
677
18.13.52
SetAspectRatio
Synopsis: Set aspect ration of the screen Declaration: procedure SetAspectRatio(Xasp: Word;Yasp: Word) Visibility: default Description: Sets the aspect ratio of the current screen to Xasp/Yasp. Errors: None See also: InitGraph (673), GetAspectRatio (667)
18.13.53
SetColor
Synopsis: Set foreground drawing color Declaration: procedure SetColor(Color: Word) Visibility: default Description: Sets the foreground color to Color. Errors: None. See also: GetColor (667), SetBkColor (664), SetWriteMode (682)
18.13.54
SetDirectVideo
Synopsis: Attempt to enter direct video mode. Declaration: procedure SetDirectVideo(DirectAccess: Boolean) Visibility: default Description: SetDirectVideo attempts to enter direct video mode. In that mode, everything is drawn straight in the video buffer.
18.13.55
SetFillPattern
Synopsis: Set drawing ll pattern Declaration: procedure SetFillPattern(Pattern: FillPatternType;Color: Word) Visibility: default Description: SetFillPattern sets the current ll-pattern to FillPattern, and the lling color to Color The pattern is an 8x8 raster, corresponding to the 64 bits in FillPattern. Errors: None See also: GetFillPattern (668), SetFillStyle (679), SetWriteMode (682)
678
18.13.56
SetFillStyle
Synopsis: Set drawing ll style Declaration: procedure SetFillStyle(Pattern: Word;Color: Word) Visibility: default Description: SetFillStyle sets the lling pattern and color to one of the predened lling patterns. Pattern can be one of the following predened constants : EmptyFillUses backgroundcolor. SolidFillUses lling color LineFillFills with horizontal lines. ltSlashFillFills with lines from left-under to top-right. SlashFillIdem as previous, thick lines. BkSlashFillFills with thick lines from left-Top to bottom-right. LtBkSlashFillIdem as previous, normal lines. HatchFillFills with a hatch-like pattern. XHatchFillFills with a hatch pattern, rotated 45 degrees. InterLeaveFill WideDotFillFills with dots, wide spacing. CloseDotFillFills with dots, narrow spacing. UserFillFills with a user-dened pattern. Errors: None. See also: SetFillPattern (678), SetWriteMode (682)
18.13.57
SetGraphMode
Synopsis: Set graphical mode Declaration: procedure SetGraphMode(Mode: SmallInt) Visibility: default Description: SetGraphMode sets the graphical mode and clears the screen. Errors: None. See also: InitGraph (673)
18.13.58
SetLineStyle
Synopsis: Set line drawing style Declaration: procedure SetLineStyle(LineStyle: Word;Pattern: Word;Thickness: Word) Visibility: default Description: SetLineStyle sets the drawing style for lines. You can specify a LineStyle which is one of the following pre-dened constants:
679
Solidlndraws a solid line. DottedlnDraws a dotted line. Centerlndraws a non-broken centered line. Dashedlndraws a dashed line. UserBitlnDraws a User-dened bit pattern. If UserBitln is specied then Pattern contains the bit pattern. In all another cases, Pattern is ignored. The parameter Width indicates how thick the line should be. You can specify one of the following pre-dened constants: NormWidthNormal line width ThickWidthDouble line width Errors: None. See also: GetLineSettings (669), SetWriteMode (682)
18.13.59
SetPalette
Synopsis: Set palette entry using color constant Declaration: procedure SetPalette(ColorNum: Word;Color: ShortInt) Visibility: default Description: SetPalette changes the ColorNr-th entry in the palette to NewColor Errors: None. See also: SetAllPalette (663), SetRGBPalette (664)
18.13.60
SetTextJustify
Synopsis: Set text placement style Declaration: procedure SetTextJustify(horiz: Word;vert: Word) Visibility: default Description: SetTextJustify controls the placement of new text, relative to the (graphical) cursor position. Horizontal controls horizontal placement, and can be one of the following pre-dened constants: LeftTextText is set left of the pointer. CenterTextText is set centered horizontally on the pointer. RightTextText is set to the right of the pointer. Vertical controls the vertical placement of the text, relative to the (graphical) cursor position. Its value can be one of the following pre-dened constants : BottomTextText is placed under the pointer. CenterTextText is placed centered vertically on the pointer. TopTextText is placed above the pointer. Errors: None. See also: OutText (676), OutTextXY (663) 680
18.13.61
Synopsis: Set text style
SetTextStyle
Declaration: procedure SetTextStyle(font: Word;direction: Word;charsize: Word) Visibility: default Description: SetTextStyle controls the style of text to be put on the screen. pre-dened constants for Font are: DefaultFontThe default font TriplexFontA special font SmallFontA smaller font SansSerifFontA sans-serif font (like Arial) GothicFontA gothic font ScriptFontA script font SimpleFontA simple font TSCRFontTerminal screen font LCOMFont? EuroFont? BoldFontA bold typeface font Pre-dened constants for Direction are : HorizDirWrite horizontal VertDirWrite vertical Errors: None. See also: GetTextSettings (671)
18.13.62
SetUserCharSize
Synopsis: Set user character size for vector font Declaration: procedure SetUserCharSize(Multx: Word;Divx: Word;Multy: Word;Divy: Word) Visibility: default Description: Sets the width and height of vector-fonts. The horizontal size is given by Xasp1/Xasp2, and the vertical size by Yasp1/Yasp2. Errors: None. See also: SetTextStyle (681)
681
18.13.63
SetViewPort
Synopsis: Set the graphical drawing window Declaration: procedure SetViewPort(X1: SmallInt;Y1: SmallInt;X2: SmallInt; Y2: SmallInt;Clip: Boolean) Visibility: default Description: Sets the current graphical viewport (window) to the rectangle dened by the top-left corner (X1,Y1) and the bottom-right corner (X2,Y2). If Clip is true, anything drawn outside the viewport (window) will be clipped (i.e. not drawn). Coordinates specied after this call are relative to the top-left corner of the viewport. Errors: None. See also: GetViewSettings (672)
18.13.64
SetWriteMode
Synopsis: Specify binary operation to perform when drawing on screen Declaration: procedure SetWriteMode(WriteMode: SmallInt) Visibility: default Description: SetWriteMode controls the drawing of lines on the screen. It controls the binary operation used when drawing lines on the screen. Mode can be one of the following pre-dened constants: CopyPutDraw as specied using current bitmask and color XORPutDraw XOR-ing current bitmask and color Errors: None. See also: SetColor (678), SetBkColor (664), SetLineStyle (679), SetFillStyle (679)
18.13.65
TextHeight
Synopsis: Return height (in pixels) of the given string Declaration: function TextHeight(const TextString: string) : Word Visibility: default Description: TextHeight returns the height (in pixels) of the string S in the current font and text-size. Errors: None. See also: TextWidth (682)
18.13.66
TextWidth
Synopsis: Return width (in pixels) of the given string Declaration: function TextWidth(const TextString: string) : Word Visibility: default Description: TextHeight returns the width (in pixels) of the string S in the current font and text-size. 682
683
Chapter 19
This document describes the HEAPTRC unit for Free Pascal. It was written by Pierre Muller. It is system independent, and works on all supported systems. The HEAPTRC unit can be used to debug your memory allocation/deallocation. It keeps track of the calls to getmem/freemem, and, implicitly, of New/Dispose statements. When the program exits, or when you request it explicitly. It displays the total memory used, and then dumps a list of blocks that were allocated but not freed. It also displays where the memory was allocated. If there are any inconsistencies, such as memory blocks being allocated or freed twice, or a memory block that is released but with wrong size, this will be displayed also. The information that is stored/displayed can be customized using some constants.
19.2
The HeapTrc unit can be controlled with the HEAPTRC environment variable. The contents of this variable controls the initial setting of some constants in the unit. HEAPTRC consists of one or more of the following strings, separated by spaces: keepreleased If this string occurs, then the KeepReleased (686) variable is set to True disabled If this string occurs, then the UseHeapTrace (687) variable is set to False and the heap trace is disabled. It does not make sense to combine this value with other values. nohalt If this string occurs, then the HaltOnError (686) variable is set to False, so the program continues executing even in case of a heap error. log=lename If this string occurs, then the output of heaptrc is sent to the specied Filename. (see also SetHeapTraceOutput (689)) The following are valid values for the HEAPTRC variable: HEAPTRC=disabled HEAPTRC="keepreleased log=heap.log" HEAPTRC="log=myheap.log nohalt" Note that these strings are case sensitive, and the name of the variable too. 684
19.3
HeapTrc Usage
All that you need to do is to include heaptrc in the uses clause of your program. Make sure that it is the rst unit in the clause, otherwise memory allocated in initialization code of units that precede the heaptrc unit will not be accounted for, causing an incorrect memory usage report. If you use the -gh switch, the compiler will insert the unit by itself, so you dont have to include it in your uses clause. The below example shows how to use the heaptrc unit. This is the memory dump shown when running this program in a standard way: Marked memory at 0040FA50 invalid Wrong size : 128 allocated 64 freed 0x00408708 0x0040CB49 0x0040C481 Call trace for block 0x0040FA50 size 128 0x0040CB3D 0x0040C481 If you use the lineinfo unit (or use the -gl switch) as well, then heaptrc will also give you the lenames and line-numbers of the procedures in the backtrace: Marked memory at 00410DA0 invalid Wrong size : 128 allocated 64 freed 0x004094B8 0x0040D8F9 main, line 25 of heapex.pp 0x0040D231 Call trace for block 0x00410DA0 size 128 0x0040D8ED main, line 23 of heapex.pp 0x0040D231 If lines without lename/line-number occur, this means there is a unit which has no debug info included. Listing: ./heapex/heapex.pp
Program heapex ; { Program used t o demonstrate t h e usage o f h e a p t r c u n i t } Uses h e a p t r c ; Var P1 : ^ L o n g i n t ; P2 : P o i n t e r ; I : longint ; begin New( P1 ) ; / / causes p r e v i o u s a l l o c a t i o n n o t t o be dea l l o c a t e d New( P1 ) ; Dispose ( P1 ) ; For I : = 1 to 1 0 do begin GetMem ( P2 , 1 2 8 ) ; / / When I i s even , d e a l l o c a t e b l o c k . We l o o s e 5 t i m e s 128
685
/ / b y t e s t h i s way . I f ( I mod 2 ) = 0 Then FreeMem ( P2 , 1 2 8 ) ; end ; GetMem( P2 , 1 2 8 ) ; / / T h i s w i l l provoke an e r r o r and a memory dump Freemem ( P2 , 6 4 ) ; end .
19.4
19.4.1
add_tail : Boolean = True If add\_tail is True (the default) then a check is also performed on the memory location just behind the allocated memory. HaltOnError : Boolean = True If HaltOnError is set to True then an illegal call to FreeMem will cause the memory manager to execute a halt(1) instruction, causing a memory dump. By Default it is set to True. HaltOnNotReleased : Boolean = False HaltOnNotReleased can be set to True to make the DumpHeap (687) procedure halt (exit code 203) the program if any memory was not released when the dump is made. If it is False (the default) then DumpHeap just returns. keepreleased : Boolean = False If keepreleased is set to true, then a list of freed memory blocks is kept. This is useful if you suspect that the same memory block is released twice. However, this option is very memory intensive, so use it sparingly, and only when its really necessary. maxprintedblocklength : Integer = 128 maxprintedblocklength determines the maximum number of bytes written by a memory block dump, as produced when printleakedblock (687) or printfaultyblock (686) are true. If the size of the memory block is larger than this size, then only the rst maxprintedblocklength will be included in the dump. printfaultyblock : Boolean = False printleakedblock can be set to True to print a memory dump of daulty memory blocks (in case a memory override occurs) The block is printed as a series of hexadecimal numbers, representing the bytes in the memory block. At most maxprintedblocklength (686) bytes of the memory block will be printed. printleakedblock : Boolean = False
686
printleakedblock can be set to True to print a memory dump of unreleased blocks when the heaptrc unit produces a summary of memory leaks. The block is printed as a series of hexadecimal numbers, representing the bytes in the memory block. At most maxprintedblocklength (686) bytes of the memory block will be printed. quicktrace : Boolean = True Quicktrace determines whether the memory manager checks whether a block that is about to be released is allocated correctly. This is a rather time consuming search, and slows program execution signicantly, so by default it is set to True. tracesize = 8 Tracesize species how many levels of calls are displayed of the call stack during the memory dump. If you specify keepreleased:=True then half the TraceSize is reserved for the GetMem call stack, and the other half is reserved for the FreeMem call stack. For example, the default value of 8 will cause eight levels of call frames to be dumped for the getmem call if keepreleased is False. If KeepReleased is true, then 4 levels of call frames will be dumped for the GetMem call and 4 frames wil be dumped for the FreeMem call. If you want to change this value, you must recode the heaptrc unit. usecrc : Boolean = True If usecrc is True (the default) then a crc check is performed on locations before and after the allocated memory. This is useful to detect memory overwrites. useheaptrace : Boolean = True This variable must be set at program startup, through the help of an environment variable.
19.4.2
Types
tdisplayextrainfoProc = procedure(var ptext: text;p: pointer) The TDisplayExtraInfoType is a procedural type used in the SetHeapExtraInfo (688) call to display a memory location which was previously lled with TFillExtraInfoProc (687) tFillExtraInfoProc = procedure(p: pointer) The TFillExtraInfoProc is a procedural type used in the SetHeapExtraInfo (688) call to ll a memory location with extra data for displaying.
19.5
19.5.1
Synopsis: Dump memory usage report to stderr. Declaration: procedure DumpHeap Visibility: default 687
Description: DumpHeap dumps to standard output a summary of memory usage. It is called automatically by the heaptrc unit when your program exits (by installing an exit procedure), but it can be called at any time. Errors: None. See also: MarkHeap (1)
19.5.2
SetHeapExtraInfo
Synopsis: Store extra information in blocks. Declaration: procedure SetHeapExtraInfo(size: ptruint;fillproc: tFillExtraInfoProc; displayproc: tdisplayextrainfoProc) Visibility: default Description: You can use SetHeapExtraInfo to store extra info in the blocks that the heaptrc unit reserves when tracing getmem calls. Size indicates the size (in bytes) that the trace mechanism should reserve for your extra information. For each call to getmem, FillProc will be called, and passed a pointer to the memory reserved. When dumping the memory summary, the extra info is shown by calling displayproc and passing it the memory location which was lled by fillproc. It should write the information in readable form to the text le provided in the call to displayproc Errors: You can only call SetHeapExtraInfo if no memroy has been allocated yet. If memory was already allocated prior to the call to SetHeapExtraInfo, then an error will be displayed on standard error output, and a DumpHeap (687) is executed. See also: DumpHeap (687), SetHeapTraceOutput (689) Listing: ./heapex/setinfo.pp
Program heapex ; { Program used t o demonstrate t h e usage o f h e a p t r c u n i t } Uses h e a p t r c ; Var P1 : ^ L o n g i n t ; P2 : P o i n t e r ; I : longint ; Marker : L o n g i n t ; Procedure SetMarker ( P : p o i n t e r ) ; Type PLongint = ^ L o n g i n t ; begin PLongint (P ) ^ : = Marker ; end ; Procedure Part1 ;
begin / / Blocks a l l o c a t e d here are marked w i t h $FFAAFFAA = 5570646 Marker : = $FFAAFFAA ; New( P1 ) ;
688
New( P1 ) ; Dispose ( P1 ) ; For I : = 1 to 1 0 do begin GetMem ( P2 , 1 2 8 ) ; I f ( I mod 2 ) = 0 Then FreeMem ( P2 , 1 2 8 ) ; end ; GetMem( P2 , 1 2 8 ) ; end ; Procedure Part2 ;
begin / / Blocks a l l o c a t e d here are marked w i t h $FAFAFAFA = 84215046 Marker : = $FAFAFAFA ; New( P1 ) ; New( P1 ) ; Dispose ( P1 ) ; For I : = 1 to 1 0 do begin GetMem ( P2 , 1 2 8 ) ; I f ( I mod 2 ) = 0 Then FreeMem ( P2 , 1 2 8 ) ; end ; GetMem( P2 , 1 2 8 ) ; end ; begin S e t E x t r a I n f o ( SizeOf ( Marker ) , @SetMarker ) ; Writeln ( Part 1 ) ; part1 ; Writeln ( Part 2 ) ; part2 ; end .
19.5.3
SetHeapTraceOutput
Synopsis: Specify lename for heap trace output. Declaration: procedure SetHeapTraceOutput(const name: string) Visibility: default Description: SetHeapTraceOutput sets the lename into which heap trace info will be written. By default information is written to standard output, this function allows you to redirect the information to a le with full lename name. Errors: If the le cannot be written to, errors will occur when writing the trace. See also: SetHeapExtraInfo (688)
689
Chapter 20
20.2
Overview
This document describes the IPC unit for Free Pascal. It was written for linux by Michael Van Canneyt. It gives all the functionality of System V Inter-Process Communication: shared memory, semaphores and messages. It works only on the linux operating system. Many constants here are provided for completeness only, and should under normal circumstances not be used by the programmer.
20.3
20.3.1
IPC_CREAT = 1 shl 9 Create if key is nonexistent IPC_EXCL = 2 shl 9 fail if key exists IPC_INFO = 3 For ipcs call 690
IPC_NOWAIT = 4 shl 9 return error on wait IPC_RMID = 0 Remove resource IPC_SET = 1 set ipc_perm options IPC_STAT = 2 get ipc_perm options MSGMAX = 4056 Internal Message control code. Do not use MSGMNB = 16384 Internal Message control code. Do not use MSGMNI = 128 Internal Message control code. Do not use MSG_EXCEPT = 2 shl 12 Internal Message control code. Do not use MSG_NOERROR = 1 shl 12 Internal Message control code. Do not use SEM_GETALL = 13 Semaphore operation: Get all semaphore values SEM_GETNCNT = 14 Semaphore operation: Get number of processes waiting for resource. SEM_GETPID = 11 Semaphore operation: Get process ID of last operation. SEM_GETVAL = 12 Semaphore operation: Get current value of semaphore 691
SEM_GETZCNT = 15 Semaphore operation: Get number of processes waiting for semaphores to reach zero SEM_SEMMNI = 128 Semaphore operation: ? SEM_SEMMNS = SEM_SEMMNI * SEM_SEMMSL Semaphore operation: ? SEM_SEMMSL = 32 Semaphore operation: ? SEM_SEMOPM = 32 Semaphore operation: ? SEM_SEMVMX = 32767 Semaphore operation: ? SEM_SETALL = 17 Semaphore operation: Set all semaphore values SEM_SETVAL = 16 Semaphore operation: Set semaphore value SEM_UNDO = $1000 Constant for use in semop (706) SHM_LOCK = 11 This constant is used in the shmctl (708) call. SHM_R = 4 shl 6 This constant is used in the shmctl (708) call. SHM_RDONLY = 1 shl 12 This constant is used in the shmctl (708) call. SHM_REMAP = 4 shl 12 This constant is used in the shmctl (708) call. 692
SHM_RND = 2 shl 12 This constant is used in the shmctl (708) call. SHM_UNLOCK = 12 This constant is used in the shmctl (708) call. SHM_W = 2 shl 6 This constant is used in the shmctl (708) call.
20.3.2
Types
key_t = TKey Alias for TKey (694) type msglen_t = culong Message length type msgqnum_t = culong Message queue number type PIPC_Perm = ^TIPC_Perm Pointer to TIPC_Perm (694) record. PMSG = ^TMSG Pointer to TMSG (694) record PMSGbuf = ^TMSGbuf Pointer to TMsgBuf (695) rcord PMSGinfo = ^TMSGinfo Pointer to TMSGinfo (695) record PMSQid_ds = ^TMSQid_ds Pointer to TMSQid_ds (695) PSEMbuf = ^TSEMbuf Pointer to TSembuf (695) record.
693
PSEMid_ds = ^TSEMid_ds Pointer to TSEMid_ds (696) record. PSEMinfo = ^TSEMinfo Pointer to TSEMinfo (696) record. PSEMun = ^TSEMun Pointer to TSEMun (696) record PShmid_DS = ^TShmid_ds Pointer to TSHMid_ds (696) record. PSHMinfo = ^TSHMinfo
TIPC_Perm = record key : TKey; uid : kernel_uid_t; gid : kernel_gid_t; cuid : kernel_uid_t; cgid : kernel_gid_t; mode : kernel_mode_t; seq : cushort; end
TIPC_Perm is used in all IPC systems to specify the permissions. It should never be used directly. TKey = cint Type returned by the ftok (697) key generating function. TMSG = record msg_next : PMSG; msg_type : LongInt; msg_spot : PChar; msg_stime : LongInt; msg_ts : Integer; end
Record used in the handling of message queues. Do not use directly. TMSGbuf = record mtype : clong; mtext : Array[0..0] of Char; end
694
The TMSGbuf record is a record containing the data of a record. you should never use this record directly, instead you should make your own record that follows the structure of the TMSGbuf record, but that has a size that is big enough to accomodate your messages. The mtype eld should always be present, and should always be lled. TMSGinfo = record msgpool : cint; msgmap : cint; msgmax : cint; msgmnb : cint; msgmni : cint; msgssz : cint; msgtql : cint; msgseg : cushort; end
Internal message system record. Do not use directly. TMSQid_ds = record msg_perm : TIPC_Perm; msg_first : PMSG; msg_last : PMSG; msg_stime : time_t; msg_rtime : time_t; msg_ctime : time_t; msg_cbytes : Word; msg_qnum : Word; msg_qbytes : Word; msg_lspid : ipc_pid_t; msg_lrpid : ipc_pid_t; end
This record should never be used directly, it is an internal kernel record. Its elds may change at any time. TSEMbuf = record sem_num : cushort; sem_op : cshort; sem_flg : cshort; end
The TSEMbuf record is used in the semop (706) call, and is used to specify which operations you want to do. TSEMid_ds = record sem_perm : TIPC_Perm; sem_otime : time_t; sem_ctime : time_t; sem_base : pointer; sem_pending : pointer; 695
Structure returned by the semctl (701) call, contains all data of a semahore TSEMinfo semmap semmni semmns semmnu semmsl semopm semume semusz semvmx semaem end = : : : : : : : : : : record cint; cint; cint; cint; cint; cint; cint; cint; cint; cint;
Record used in semctl (701) call. TShmid_ds = record shm_perm : TIPC_Perm; shm_segsz : size_t; shm_atime : time_t; shm_dtime : time_t; shm_ctime : time_t; shm_cpid : pid_t; shm_lpid : pid_t; shm_nattch : culong; __unused4 : culong; __unused5 : culong; end
Record used in the shmctl (708) call to set or retrieve settings for shared memory. TSHMinfo shmmax shmmin shmmni shmseg shmall end = : : : : : record cint; cint; cint; cint; cint;
Record used by the shared memory system, Do not use directly. 696
20.4
20.4.1
Synopsis: Create token from lename Declaration: function ftok(Path: PChar;ID: cint) : TKey Visibility: default Description: ftok returns a key that can be used in a semget (706)shmget (710) or msgget (699) call to access a new or existing IPC resource. Path is the name of a le in the le system, ID is a character of your choice. The ftok call does the same as its C couterpart, so a pascal program and a C program will access the same resource if they use the same Path and ID For an example, see msgctl (697), semctl (701) or shmctl (708). Errors: ftok returns -1 if the le in Path doesnt exist. See also: semget (706), shmget (710), msgget (699)
20.4.2
msgctl
Synopsis: Perform various operations on a message queue Declaration: function msgctl(msqid: cint;cmd: cint;buf: PMSQid_ds) : cint Visibility: default Description: msgctl performs various operations on the message queue with id ID. Which operation is performed, depends on the cmd parameter, which can have one of the following values: IPC_STATIn this case, the msgctl call lls the TMSQid_ds structure with information about the message queue. IPC_SETin this case, the msgctl call sets the permissions of the queue as specied in the ipc_perm record inside buf. IPC_RMIDIf this is specied, the message queue will be removed from the system. buf contains the data that are needed by the call. It can be Nil in case the message queue should be removed. The function returns True if successfull, False otherwise. Errors: On error, False is returned, and IPCerror is set accordingly. See also: msgget (699), msgsnd (700), msgrcv (700) Listing: ./ipcex/msgtool.pp
program msgtool ; Uses i p c , baseunix ; Type PMyMsgBuf TMyMsgBuf mtype : mtext :
697
, fpgeterrno ) ;
Procedure SendMessage ( I d : L o n g i n t ; Var Buf : TMyMsgBuf ; MType : L o n g i n t ; Const MText : S t r i n g ) ; begin W r i t e l n ( Sending message . ) ; Buf . mtype : = mtype ; Buf . Mtext : = mtext ; I f msgsnd ( Id , PMsgBuf ( @Buf) ,256 ,0)= 1 then DoError ( msgsnd ) ; end ; Procedure ReadMessage ( ID : L o n g i n t ; Var Buf : TMyMsgBuf ; MType : l o n g i n t ) ; begin W r i t e l n ( Reading message . ) ; Buf . MType : = MType ; I f msgrcv ( ID , PMSGBuf ( @Buf) , 2 5 6 , mtype ,0) < > 1 then W r i t e l n ( Type : , b u f . mtype , Text : , b u f . mtext ) else DoError ( msgrcv ) ; end ; Procedure RemoveQueue ( ID : L o n g i n t ) ; begin I f m s g c t l ( i d , IPC_RMID , N i l )<>1 then W r i t e l n ( Removed Queue w i t h i d , I d ) ; end ; Procedure ChangeQueueMode ( ID , mode : l o n g i n t ) ; Var QueueDS : TMSQid_ds ; begin I f m s g c t l ( Id , IPC_STAT ,@QueueDS)= 1 then DoError ( m s g c t l : s t a t ) ; W r i t e l n ( Old p e r m i s s i o n s : ,QueueDS . msg_perm . mode ) ; QueueDS . msg_perm . mode: =Mode ; i f m s g c t l ( ID , IPC_SET ,@QueueDS) = 0 then W r i t e l n ( New p e r m i s s i o n s : ,QueueDS . msg_perm . mode ) else DoError ( m s g c t l : IPC_SET ) ; end ; procedure usage ;
698
Usage : msgtool s ( end ) <type > < t e x t > ( max 2 5 5 c h a r a c t e r s ) ) ; r ( e c e i v e ) < type > ) ; d( elete ) ) ; m( ode ) < decimal mode> ) ;
Function S t r T o I n t ( S : S t r i n g ) : l o n g i n t ; Var M : l o n g i n t ; C : Integer ; begin v a l ( S ,M,C ) ; I f C< >0 Then DoError ( S t r T o I n t : S t r T o I n t : =M; end ; Var Key : TKey ; ID : l o n g i n t ; Buf : TMyMsgBuf ; const i p c k e y = . # 0 ; begin I f Paramcount <1 then Usage ; key : = Ftok ( @ipckey [ 1 ] , ord ( M ) ) ; ID : = msgget ( key , IPC_CREAT or 4 3 8 ) ; I f ID <0 then DoError ( MsgGet ) ; Case upCase ( Paramstr ( 1 ) [ 1 ] ) of S : I f ParamCount< >3 then Usage else SendMessage ( i d , Buf , S t r T o I n t ( Paramstr ( 2 ) ) , paramstr ( 3 ) ) ; R : I f ParamCount< >2 then Usage else ReadMessage ( i d , buf , s t r t o i n t ( Paramstr ( 2 ) ) ) ; D : I f ParamCount< >1 then Usage else RemoveQueue ( ID ) ; M : I f ParamCount< >2 then Usage else ChangeQueueMode ( i d , s t r t o i n t ( paramstr ( 2 ) ) ) ; else Usage end ; end .
+S ) ;
20.4.3
msgget
Synopsis: Return message queue ID, possibly creating the queue 699
Declaration: function msgget(key: TKey;msgflg: cint) : cint Visibility: default Description: msgget returns the ID of the message queue described by key. Depending on the ags in msgflg, a new queue is created. msgflg can have one or more of the following values (combined by ORs): IPC_CREATThe queue is created if it doesnt already exist. IPC_EXCLIf used in combination with IPC_CREAT, causes the call to fail if the queue already exists. It cannot be used by itself. Optionally, the ags can be ORed with a permission mode, which is the same mode that can be used in the le system. For an example, see msgctl (697). Errors: On error, -1 is returned, and IPCError is set. See also: ftok (697), msgsnd (700), msgrcv (700), msgctl (697)
20.4.4
msgrcv
Synopsis: Retrieve a message from the queue Declaration: function msgrcv(msqid: cint;msgp: PMSGbuf;msgsz: size_t;msgtyp: clong; msgflg: cint) : cint Visibility: default Description: msgrcv retrieves a message of type msgtyp from the message queue with ID msqid. msgtyp corresponds to the mtype eld of the TMSGbuf record. The message is stored in the MSGbuf structure pointed to by msgp. The msgflg parameter can be used to control the behaviour of the msgrcv call. It consists of an ORed combination of the following ags: 0No special meaning. IPC_NOWAITif no messages are available, then the call returns immediatly, with the ENOMSG error. MSG_NOERRORIf the message size is wrong (too large), no error is generated, instead the message is truncated. Normally, in such cases, the call returns an error (E2BIG) The function returns True if the message was received correctly, False otherwise. For an example, see msgctl (697). Errors: In case of error, False is returned, and IPCerror is set. See also: msgget (699), msgsnd (700), msgctl (697)
20.4.5
msgsnd
Synopsis: Send a message to the messague queue Declaration: function msgsnd(msqid: cint;msgp: PMSGbuf;msgsz: size_t;msgflg: cint) : cint Visibility: default 700
Description: msgsend sends a message to a message queue with ID msqid. msgp is a pointer to a message buffer, that should be based on the TMsgBuf type. msgsiz is the size of the message (NOT of the message buffer record !) The msgflg can have a combination of the following values (ORed together): 0No special meaning. The message will be written to the queue. If the queue is full, then the process is blocked. IPC_NOWAITIf the queue is full, then no message is written, and the call returns immediatly. The function returns True if the message was sent successfully, False otherwise. For an example, see msgctl (697). Errors: In case of error, the call returns False, and IPCerror is set. See also: msgget (699), msgrcv (700), msgctl (697)
20.4.6
semctl
Synopsis: Perform various control operations on a semaphore set Declaration: function semctl(semid: cint;semnum: cint;cmd: cint;var arg: TSEMun) : cint Visibility: default Description: semctl performs various operations on the semaphore semnum w ith semaphore set id ID. The arg parameter supplies the data needed for each call. This is a variant record that should be lled differently, according to the command: Type TSEMun = record case longint of 0 : ( val : longint ); 1 : ( buf : PSEMid_ds ); 2 : ( arr : PWord ); 3 : ( padbuf : PSeminfo ); 4 : ( padpad : pointer ); end; Which operation is performed, depends on the cmd parameter, which can have one of the following values: IPC_STATIn this case, the arg record should have its buf eld set to the address of a TSEMid_ds record. The semctl call lls this TSEMid_ds structure with information about the semaphore set. IPC_SETIn this case, the arg record should have its buf eld set to the address of a TSEMid_ds record. The semctl call sets the permissions of the queue as specied in the ipc_perm record. IPC_RMIDIf this is specied, the semaphore set is removed from from the system. GETALLIn this case, the arr eld of arg should point to a memory area where the values of the semaphores will be stored. The size of this memory area is \var{SizeOf(Word)* Number of semaphores in the set}. This call will then ll the memory array with all the values of the semaphores. 701
GETNCNTThis will ll the val eld of the arg union with the number of processes waiting for resources. GETPIDsemctl returns the process ID of the process that performed the last semop (706) call. GETVALsemctl returns the value of the semaphore with number semnum. GETZCNTsemctl returns the number of processes waiting for semaphores that reach value zero. SETALLIn this case, the arr eld of arg should point to a memory area where the values of the semaphores will be retrieved from. The size of this memory area is \var{SizeOf(Word)* Number of semaphores in the set}. This call will then set the values of the semaphores from the memory array. SETVALThis will set the value of semaphore semnum to the value in the val eld of the arg parameter. The function returns -1 on error. Errors: The function returns -1 on error, and IPCerror is set accordingly. See also: semget (706), semop (706) Listing: ./ipcex/semtool.pp
Program semtool ; { Program t o demonstrate t h e use o f semaphores } Uses i p c , baseunix ; Const MaxSemValue = 5 ; Procedure DoError ( Const Msg : S t r i n g ) ; var error : cint ; begin e r r o r := fpgeterrno ; W r i t e l n ( E r r o r : ,msg , Code : , e r r o r ) ; Halt ( 1 ) ; end ; Function getsemval ( ID , Member : l o n g i n t ) : l o n g i n t ; Var S : TSEMun ; begin GetSemVal : = SemCtl ( i d , member , SEM_GETVAL, S ) ; end ; Procedure DispVal ( ID , member : l o n g i n t ) ; begin w r i t e l n ( Value f o r member ,member , i s end ;
, GetSemVal ( ID , Member ) ) ;
702
begin o p t s . b u f : =@semds ; I f s e m c t l ( Id , 0 , IPC_STAT , o p t s )<>1 then GetMemberCount : = semds . sem_nsems else GetMemberCount := 1; end ; Function OpenSem ( Key : TKey ) : L o n g i n t ; begin OpenSem: = semget ( Key , 0 , 4 3 8 ) ; I f OpenSem=1 then DoError ( OpenSem ) ; end ; Function CreateSem ( Key : TKey ; Members : L o n g i n t ) : L o n g i n t ; Var Count : L o n g i n t ; Semopts : TSemun ; begin / / t h e semmsl c o n s t a n t seems k e r n e l s p e c i f i c { I f members>semmsl then DoError ( Sorry , maximum number o f semaphores i n s e t exceeded ) ; } W r i t e l n ( T r y i n g t o c r e a t e a new semaphore s e t w i t h , members , members . ) ; CreateSem : = semget ( key , members , IPC_CREAT or IPC_Excl or 4 3 8 ) ; I f CreateSem=1 then DoError ( Semaphore s e t a l r e a d y e x i s t s . ) ; Semopts . v a l : = MaxSemValue ; { I n i t i a l v a l u e o f semaphores } For Count : = 0 to Members1 do s e m c t l ( CreateSem , count , SEM_SETVAL, semopts ) ; end ; Procedure lockSem ( ID , Member : L o n g i n t ) ; Var l o c k : TSEMbuf ; begin With l o c k do begin sem_num : = 0 ; sem_op:= 1; sem_flg : =IPC_NOWAIT ; end ; i f ( member < 0 ) or ( member>GetMemberCount ( ID ) 1) then DoError ( semaphore member o u t o f range ) ; i f getsemval ( ID , member ) = 0 then DoError ( Semaphore r e s o u r c e s exhausted ( no l o c k ) ) ; l o c k . sem_num: = member ; W r i t e l n ( A t t e m p t i n g t o l o c k member ,member , o f semaphore , ID ) ; i f semop ( Id , @lock ,1)= 1 then DoError ( Lock f a i l e d ) else W r i t e l n ( Semaphore r e s o u r c e s decremented by one ) ; d i s p v a l ( ID , Member ) ; end ;
703
Procedure UnlockSem ( ID , Member : L o n g i n t ) ; Var Unlock : TSEMbuf ; begin With Unlock do begin sem_num : = 0 ; sem_op : = 1 ; sem_flg : =IPC_NOWAIT ; end ; i f ( member < 0 ) or ( member>GetMemberCount ( ID ) 1) then DoError ( semaphore member o u t o f range ) ; i f getsemval ( ID , member)= MaxSemValue then DoError ( Semaphore n o t l o c k e d ) ; Unlock . sem_num: = member ; W r i t e l n ( A t t e m p t i n g t o u n l o c k member ,member , o f semaphore , ID ) ; i f semop ( Id , @unlock ,1)= 1 then DoError ( Unlock f a i l e d ) else W r i t e l n ( Semaphore r e s o u r c e s incremented by one ) ; d i s p v a l ( ID , Member ) ; end ; Procedure RemoveSem ( ID : l o n g i n t ) ; var S : TSemun ; begin I f s e m c t l ( Id , 0 , IPC_RMID , s)<>1 then W r i t e l n ( Semaphore removed ) else DoError ( Couldn t remove semaphore ) ; end ;
Procedure ChangeMode ( ID , Mode : l o n g i n t ) ; Var r c : l o n g i n t ; o p t s : TSEMun ; semds : TSEMid_ds ; begin o p t s . b u f : =@semds ; I f not s e m c t l ( Id , 0 , IPC_STAT , o p t s )<>1 then DoError ( Couldn t s t a t semaphore ) ; W r i t e l n ( Old p e r m i s s i o n s were : , semds . sem_perm . mode ) ; semds . sem_perm . mode: =mode ; I f s e m c t l ( i d , 0 , IPC_SET , o p t s )<>1 then W r i t e l n ( Set p e r m i s s i o n s t o ,mode ) else DoError ( Couldn t s e t p e r m i s s i o n s ) ; end ; Procedure PrintSem ( ID : l o n g i n t ) ; Var I , c n t : l o n g i n t ;
704
begin c n t : = getmembercount ( ID ) ; W r i t e l n ( Semaphore , ID , has , cnt , Members ) ; For I : = 0 to cnt 1 Do DispVal ( i d , i ) ; end ; Procedure USage ; begin Writeln ( Writeln ( Writeln ( Writeln ( Writeln ( Writeln ( halt ( 1 ) ; end ;
Usage : semtool c ( r e a t e ) < count > ) ; l ( ock ) < member> ) ; u ( n l o c k ) < member> ) ; d( elete ) ) ; m( ode ) < mode> ) ; p( rint ) );
Function S t r T o I n t ( S : S t r i n g ) : l o n g i n t ; Var M : l o n g i n t ; C : Integer ; begin v a l ( S ,M,C ) ; I f C< >0 Then DoError ( S t r T o I n t : S t r T o I n t : =M; end ; Var Key : TKey ; ID : L o n g i n t ;
+S ) ;
const i p c k e y = . # 0 ; begin I f ParamCount <1 then USage ; key : = f t o k ( @ipckey [ 1 ] ,ORD( s ) ) ; Case UpCase ( Paramstr ( 1 ) [ 1 ] ) of C : begin i f paramcount < >2 then usage ; CreateSem ( key , s t r t o i n t ( paramstr ( 2 ) ) ) ; end ; L : begin i f paramcount < >2 then usage ; ID : =OpenSem ( key ) ; LockSem ( ID , s t r t o i n t ( paramstr ( 2 ) ) ) ; end ; U : begin i f paramcount < >2 then usage ; ID : =OpenSem ( key ) ; UnLockSem ( ID , s t r t o i n t ( paramstr ( 2 ) ) ) ; end ; M : begin i f paramcount < >2 then usage ; ID : =OpenSem ( key ) ;
705
ChangeMode ( ID , s t r t o i n t ( paramstr ( 2 ) ) ) ; end ; D : Begin ID : =OpenSem( Key ) ; RemoveSem( I d ) ; end ; P : begin ID : =OpenSem( Key ) ; PrintSem ( I d ) ; end ; else Usage end ; end .
20.4.7
semget
Synopsis: Return the ID of a semaphore set, possibly creating the set Declaration: function semget(key: TKey;nsems: cint;semflg: cint) : cint Visibility: default Description: msgget returns the ID of the semaphore set described by key. Depending on the ags in semflg, a new queue is created. semflg can have one or more of the following values (combined by ORs): IPC_CREATThe queue is created if it doesnt already exist. IPC_EXCLIf used in combination with IPC_CREAT, causes the call to fail if the set already exists. It cannot be used by itself. Optionally, the ags can be ORed with a permission mode, which is the same mode that can be used in the le system. if a new set of semaphores is created, then there will be nsems semaphores in it. Errors: On error, -1 is returned, and IPCError is set. See also: ftok (697), semop (706), semctl (701)
20.4.8
semop
Synopsis: Perform semaphore operation. Declaration: function semop(semid: cint;sops: PSEMbuf;nsops: cuint) : cint Visibility: default Description: semop performs a set of operations on a message queue. sops points to an array of type TSEMbuf. The array should contain nsops elements. The elds of the TSEMbuf (695) structure TSEMbuf = record sem_num : word; sem_op : integer; sem_flg : integer; 706
should be lled as follows: sem_numThe number of the semaphore in the set on which the operation must be performed. sem_opThe operation to be performed. The operation depends on the sign of sem_op: A positive number is simply added to the current value of the semaphore. If 0 (zero) is specied, then the process is suspended until the specied semaphore reaches zero. If a negative number is specied, it is substracted from the current value of the semaphore. If the value would become negative then the process is suspended until the value becomes big enough, unless IPC_NOWAIT is specied in the sem_flg. sem_gOptional ags: if IPC_NOWAIT is specied, then the calling process will never be suspended. The function returns True if the operations were successful, False otherwise. Errors: In case of error, False is returned, and IPCerror is set. See also: semget (706), semctl (701)
20.4.9
semtimedop
Synopsis: Perform semaphore operation using timeout. Declaration: function semtimedop(semid: cint;sops: PSEMbuf;nsops: cuint; timeOut: ptimespec) : cint Visibility: default Description: semop performs a set of operations on a message queue, just as semop (706). sops points to an array of type TSEMbuf. The array should contain nsops elements. The timeOut argument points to a time specication: if the operations cannot be performed withing the specied, time, the function will return with an error. For more information on the actual operations, see semop (706). See also: semop (706)
20.4.10
shmat
Synopsis: Attach a shared memory block. Declaration: function shmat(shmid: cint;shmaddr: pointer;shmflg: cint) : pointer Visibility: default Description: shmat attaches a shared memory block with identied shmid to the current process. The function returns a pointer to the shared memory block. If shmaddr is Nil, then the system chooses a free unmapped memory region, as high up in memory space as possible. If shmaddr is non-nil, and SHM_RND is in shmflg, then the returned address is shmaddr, rounded down to SHMLBA. If SHM_RND is not specied, then shmaddr must be a page-aligned address. The parameter shmflg can be used to control the behaviour of the shmat call. It consists of a ORed combination of the following constants: SHM_RNDThe suggested address in shmaddr is rounded down to SHMLBA.
707
SHM_RDONLYthe shared memory is attached for read access only. Otherwise the memory is attached for read-write. The process then needs read-write permissions to access the shared memory. For an example, see shmctl (708). Errors: If an error occurs, -1 is returned, and IPCerror is set. See also: shmget (710), shmdt (710), shmctl (708)
20.4.11
shmctl
Synopsis: Perform control operations on a shared memory block. Declaration: function shmctl(shmid: cint;cmd: cint;buf: PShmid_DS) : cint Visibility: default Description: shmctl performs various operations on the shared memory block identied by identier shmid. The buf parameter points to a TSHMid_ds record. The cmd parameter is used to pass which operation is to be performed. It can have one of the following values : IPC_STATshmctl lls the TSHMid_ds record that buf points to with the available information about the shared memory block. IPC_SETapplies the values in the ipc_perm record that buf points to, to the shared memory block. IPC_RMIDthe shared memory block is destroyed (after all processes to which the block is attached, have detached from it). If successful, the function returns True, False otherwise. Errors: If an error occurs, the function returns False, and IPCerror is set. See also: shmget (710), shmat (707), shmdt (710) Listing: ./ipcex/shmtool.pp
Program shmtool ; uses i p c , s t r i n g s , Baseunix ; Const SegSize = 1 0 0 ; var key : Tkey ; shmid , c n t r : l o n g i n t ; s e g p t r : pchar ; Procedure USage ; begin Writeln ( writeln ( writeln ( writeln ( halt ( 1 ) ; end ;
708
Procedure Writeshm ( ID : L o n g i n t ; p t r : pchar ; S : s t r i n g ) ; begin strpcopy ( ptr , s ) ; end ; Procedure Readshm ( ID : l o n g i n t ; p t r : pchar ) ; begin W r i t e l n ( Read : end ;
, ptr ) ;
Procedure removeshm ( ID : L o n g i n t ) ; begin s h m c t l ( ID , IPC_RMID , N i l ) ; w r i t e l n ( Shared memory marked f o r d e l e t i o n ) ; end ; Procedure CHangeMode ( ID : l o n g i n t ; mode : S t r i n g ) ; Var m : word ; code : i n t e g e r ; data : TSHMid_ds ; begin v a l ( mode ,m, code ) ; i f code < >0 then usage ; I f s h m c t l ( shmid , IPC_STAT , @data)= 1 then begin writeln ( Error : shmctl : , fpgeterrno ) ; halt ( 1 ) ; end ; w r i t e l n ( Old p e r m i s s i o n s : , data . shm_perm . mode ) ; data . shm_perm . mode: =m; I f s h m c t l ( shmid , IPC_SET , @data)= 1 then begin writeln ( Error : shmctl : , f pgeterrno ) ; halt ( 1 ) ; end ; w r i t e l n ( New p e r m i s s i o n s : , data . shm_perm . mode ) ; end ; const f t o k p a t h = . # 0 ; begin i f paramcount <1 then usage ; key : = f t o k ( pchar ( @ftokpath [ 1 ] ) , ord ( S ) ) ; shmid : = shmget ( key , segsize , IPC_CREAT or IPC_EXCL or 4 3 8 ) ; I f shmid=1 then begin W r i t e l n ( Shared memory e x i s t s . Opening as c l i e n t ) ; shmid : = shmget ( key , segsize , 0 ) ; I f shmid = 1 then begin W r i t e l n ( shmget : E r r o r ! , f p g e t e r r n o ) ; halt ( 1 ) ;
709
end end else W r i t e l n ( C r e a t i n g new shared memory segment . ) ; s e g p t r : = shmat ( shmid , n i l , 0 ) ; i f l o n g i n t ( s e g p t r )= 1 then begin W r i t e l n ( Shmat : e r r o r ! , f p g e t e r r n o ) ; halt ( 1 ) ; end ; case upcase ( paramstr ( 1 ) [ 1 ] ) of W : writeshm ( shmid , s e g p t r , paramstr ( 2 ) ) ; R : readshm ( shmid , s e g p t r ) ; D : removeshm ( shmid ) ; M : changemode ( shmid , paramstr ( 2 ) ) ; else begin w r i t e l n ( paramstr ( 1 ) ) ; usage ; end ; end ; end .
20.4.12
shmdt
Synopsis: Detach shared memory block. Declaration: function shmdt(shmaddr: pointer) : cint Visibility: default Description: shmdt detaches the shared memory at address shmaddr. This shared memory block is unavailable to the current process, until it is attached again by a call to shmat (707). The function returns True if the memory block was detached successfully, False otherwise. Errors: On error, False is returned, and IPCerror is set. See also: shmget (710), shmat (707), shmctl (708)
20.4.13
shmget
Synopsis: Return the ID of a shared memory block, possibly creating it Declaration: function shmget(key: TKey;size: size_t;flag: cint) : cint Visibility: default Description: shmget returns the ID of a shared memory block, described by key. Depending on the ags in flag, a new memory block is created. flag can have one or more of the following values (combined by ORs): IPC_CREATThe queue is created if it doesnt already exist. IPC_EXCLIf used in combination with IPC_CREAT, causes the call to fail if the queue already exists. It cannot be used by itself.
710
Optionally, the ags can be ORed with a permission mode, which is the same mode that can be used in the le system. if a new memory block is created, then it will have size Size bytes in it. Errors: On error, -1 is returned, and IPCError is set.
711
Chapter 21
The Keyboard unit implements a keyboard access layer which is system independent. It can be used to poll the keyboard state and wait for certain events. Waiting for a keyboard event can be done with the GetKeyEvent (726) function, which will return a driver-dependent key event. This key event can be translated to a interpretable event by the TranslateKeyEvent (735) function. The result of this function can be used in the other event examining functions. A custom keyboard driver can be installed using the SetKeyboardDriver (734) function. The current keyboard driver can be retrieved using the GetKeyboardDriver (726) function. The last section of this chapter demonstrates how to make a keyboard driver.
21.2
On Unix, applications run on a "terminal", and the application writes to the screen and reads from the keyboard by communicating with the terminal. Unix keyboard handling is mostly backward compatible with the DEC vt100 and vt220 terminals from tens of years ago. The vt100 and vt220 had very different keyboards than todays PCs and this is where the problems start. To make it worse the protocol of both terminals has not been very well designed. Because of this, the keyboard unit on Unix operating systems does a best effort to provide keyboard functionality. An implementation with full keyboard facilities like on other operating systems is not possible. The exception is the Linux kernel. The terminal emulation of the Linux kernel is from a PC keyboard viewpoint hopeless as well, but unlike other terminal emulators it is congurable. On the Linux console, the Free Pascal keyboard unit tries to implement full functionality. Users of applications using the keyboard unit should expect the following: Full functionality on the Linux console. It must be the bare console, SSH into another machine will kill the full functionality. Limited functionality otherwise. Notes about Linux full functionality: The keyboard is reprogrammed. If the keyboard is for whatever reason not restored in its original state, please load your keymap to reinitialize it. 712
Alt+function keys generate keycodes for those keys. To switch virtual consoles, use ctrl+alt+function key. Unlike what youre used to with other Unix software, escape works as you intuitively expect, it generates the keycode for an escape key without a delay. The limited functionality does include these quirks: Escape must be pressed two times before it has effect. On the Linux console, when the users runs the program by logging into another machine: Shift+F1 and Shift+F12 will generate keycodes for F11 and F12. Shift+arrow keys, shift+ins, shift+del, shift+home, shift+end do not work. The same is true about the control and alt combinations. Alt+function keys will switch virtual consoles instead of generating the right key sequences. Ctrl+function keys will generate the keycodes for the function keys without ctrl In Xterm: Shift+insert pastes the x clipboard, no keycode will be generated. In Konsole: Shift+insert pastes the x clipboard, no keycode will be generated. Shift+arrow keys doesnt work, nor does ctrl+arrow keys If you have a non-standard terminal, some keys may not work at all. When in limited functionality mode, the user can work around using an escape prex: Esc+1 = F1, Esc+2 = F2. Esc before another key is equal to alt+key. In such cases, if the terminal does output an escape sequence for those keys, please submit a bug report so we can add them.
21.3
Writing a keyboard driver means that hooks must be created for most of the keyboard unit functions. The TKeyBoardDriver record contains a eld for each of the possible hooks: TKeyboardDriver = Record InitDriver : Procedure; DoneDriver : Procedure; GetKeyEvent : Function : TKeyEvent; PollKeyEvent : Function : TKeyEvent; GetShiftState : Function : Byte; TranslateKeyEvent : Function (KeyEvent: TKeyEvent): TKeyEvent; TranslateKeyEventUniCode: Function (KeyEvent: TKeyEvent): TKeyEvent; end; 713
The meaning of these hooks is explained below: InitDriver Called to initialize and enable the driver. Guaranteed to be called only once. This should initialize all needed things for the driver. DoneDriver Called to disable and clean up the driver. Guaranteed to be called after a call to initDriver. This should clean up all things initialized by InitDriver. GetKeyEvent Called by GetKeyEvent (726). Must wait for and return the next key event. It should NOT store keys. PollKeyEvent Called by PollKeyEvent (731). It must return the next key event if there is one. Should not store keys. GetShiftState Called by PollShiftStateEvent (732). Must return the current shift state. TranslateKeyEvent Should translate a raw key event to a cOrrect key event, i.e. should ll in the shiftstate and convert function key scancodes to function key keycodes. If the TranslateKeyEvent is not lled in, a default translation function will be called which converts the known scancodes from the tables in the previous section to a correct keyevent. TranslateKeyEventUniCode Should translate a key event to a unicode key representation. Strictly speaking, only the GetKeyEvent and PollKeyEvent hooks must be implemented for the driver to function correctly. The example unit demonstrates how a keyboard driver can be installed. It takes the installed driver, and hooks into the GetKeyEvent function to register and log the key events in a le. This driver can work on top of any other driver, as long as it is inserted in the uses clause after the real driver unit, and the real driver unit should set the driver record in its initialization section. Note that with a simple extension of this unit could be used to make a driver that is capable of recording and storing a set of keyboard strokes, and replaying them at a later time, so a keyboard macro capable driver. This driver could sit on top of any other driver. Listing: ./kbdex/logkeys.pp
unit logkeys ; interface Procedure St ar tK ey Log gi ng ; Procedure StopKeyLogging ; Function IsKeyLogging : Boolean ; Procedure SetKeyLogFileName ( FileName : S t r i n g ) ;
implementation uses s y s u t i l s , keyboard ; var NewKeyBoardDriver , OldKeyBoardDriver : TKeyboardDriver ; A c t i v e , Logging : Boolean ; LogFileName : S t r i n g ; KeyLog : Text ; Function TimeStamp : S t r i n g ;
714
begin TimeStamp : = FormatDateTime ( hh : nn : ss , Time ( ) ) ; end ; Procedure St ar tK ey Log gi ng ; begin Logging : = True ; W r i t e l n ( KeyLog , S t a r t l o g g i n g k e y s t r o k e s a t : , TimeStamp ) ; end ; Procedure StopKeyLogging ; begin W r i t e l n ( KeyLog , Stop l o g g i n g k e y s t r o k e s a t : , TimeStamp ) ; Logging : = False ; end ; Function IsKeyLogging : Boolean ; begin IsKeyLogging : = Logging ; end ; Function LogGetKeyEvent : TKeyEvent ; Var K : TKeyEvent ; begin K: = O l d k e y b o a r d D r i v e r . GetKeyEvent ( ) ; I f Logging then begin Write ( KeyLog , TimeStamp , : Key event : ) ; W r i t e l n ( KeyLog , KeyEventToString ( TranslateKeyEvent (K ) ) ) ; end ; LogGetKeyEvent : =K ; end ; Procedure Lo gI ni tK eyB oa rd ; begin OldKeyBoardDriver . I n i t D r i v e r ( ) ; Assign ( KeyLog , logFileName ) ; Rewrite ( KeyLog ) ; A c t i v e : = True ; S t a r t K ey Log gi ng ; end ; Procedure LogDoneKeyBoard ; begin StopKeyLogging ; Close ( KeyLog ) ; A c t i v e : = False ; OldKeyBoardDriver . DoneDriver ( ) ; end ;
715
Procedure SetKeyLogFileName ( FileName : S t r i n g ) ; begin I f Not A c t i v e then LogFileName : = FileName ; end ; Initialization GetKeyBoardDriver ( OldKeyBoardDriver ) ; NewKeyBoardDriver : = OldKeyBoardDriver ; NewKeyBoardDriver . GetKeyEvent : = @LogGetKeyEvent ; NewKeyBoardDriver . I n i t D r i v e r : = @LogInitKeyboard ; NewKeyBoardDriver . DoneDriver : = @LogDoneKeyboard ; LogFileName : = keyboard . l o g ; Logging : = False ; SetKeyboardDriver ( NewKeyBoardDriver ) ; end .
Listing: ./kbdex/ex9.pp
program example9 ; { T h i s program demonstrates t h e l o g k e y s u n i t } uses keyboard , l o g k e y s ; Var K : TKeyEvent ; begin InitKeyBoard ; W r i t e l n ( Press keys , press " q " t o end , " s " t o g g l e s l o g g i n g . ) ; Repeat K: = GetKeyEvent ; K: = TranslateKeyEvent (K ) ; W r i t e l n ( Got key : , KeyEventToString (K ) ) ; i f GetKeyEventChar (K)= s then i f IsKeyLogging then StopKeyLogging else St ar tK ey Log gi ng ; U n t i l ( GetKeyEventChar (K)= q ) ; DoneKeyBoard ; end .
21.4
Special physical keys are encoded with the DOS scan codes for these keys in the second byte of the TKeyEvent (723) type. A complete list of scan codes can be found in the below table. This is the list of keys that is used by the default key event translation mechanism. When writing a keyboard driver, either these constants should be returned by the various key event functions, or the TranslateKeyEvent hook should be implemented by the driver.
716
Table 21.1: Key Scancodes Code 00 01 02 04 05 06 07 08 09 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1E 1F 20 21 22 23 24 25 26 27 28 29 2B 2C 2D 2E 2F 30 31 32 33 34 35 37 3B 3C Key NoKey ALT-Esc ALT-Space CTRL-Ins SHIFT-Ins CTRL-Del SHIFT-Del ALT-Back ALT-SHIFT-Back SHIFT-Tab ALT-Q ALT-W ALT-E ALT-R ALT-T ALT-Y ALT-U ALT-I ALT-O ALT-P ALT-LftBrack ALT-RgtBrack ALT-A ALT-S ALT-D ALT-F ALT-G ALT-H ALT-J ALT-K ALT-L ALT-SemiCol ALT-Quote ALT-OpQuote ALT-BkSlash ALT-Z ALT-X ALT-C ALT-V ALT-B ALT-N ALT-M ALT-Comma ALT-Period ALT-Slash ALT-GreyAst F1 F2 Code 3D 3E 3F 40 41 42 43 44 47 48 49 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F Key F3 F4 F5 F6 F7 F8 F9 F10 Home Up PgUp Left Center Right ALT-GrayPlus end Down PgDn Ins Del SHIFT-F1 SHIFT-F2 SHIFT-F3 SHIFT-F4 SHIFT-F5 SHIFT-F6 SHIFT-F7 SHIFT-F8 SHIFT-F9 SHIFT-F10 CTRL-F1 CTRL-F2 CTRL-F3 CTRL-F4 CTRL-F5 CTRL-F6 CTRL-F7 CTRL-F8 CTRL-F9 CTRL-F10 ALT-F1 ALT-F2 ALT-F3 ALT-F4 ALT-F5 ALT-F6 ALT-F7 ALT-F8 Code 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F 90 91 94 97 98 99 9B 9D 9F A0 A1 A2 A3 A5 Key ALT-F9 ALT-F10 CTRL-PrtSc CTRL-Left CTRL-Right CTRL-end CTRL-PgDn CTRL-Home ALT-1 ALT-2 ALT-3 ALT-4 ALT-5 ALT-6 ALT-7 ALT-8 ALT-9 ALT-0 ALT-Minus ALT-Equal CTRL-PgUp F11 F12 SHIFT-F11 SHIFT-F12 CTRL-F11 CTRL-F12 ALT-F11 ALT-F12 CTRL-Up CTRL-Minus CTRL-Center CTRL-GreyPlus CTRL-Down CTRL-Tab ALT-Home ALT-Up ALT-PgUp ALT-Left ALT-Right ALT-end ALT-Down ALT-PgDn ALT-Ins ALT-Del ALT-Tab
717
A list of scan codes for special keys and combinations with the SHIFT, ALT and CTRL keys can be found in the following table: They are for quick reference only. Table 21.2: Special keys scan codes Key NoKey F1 F2 F3 F4 F5 F6 F7 F8 F9 F10 F11 F12 Home Up PgUp Left Center Right end Down PgDn Ins Del Tab GreyPlus Code 00 3B 3C 3D 3E 3F 40 41 42 43 44 85 86 47 48 49 4B 4C 4D 4F 50 51 52 53 8 SHIFT-Key 54 55 56 57 58 59 5A 5A 5B 5C 87 88 CTRL-Key 5E 5F 60 61 62 63 64 65 66 67 89 8A 77 8D 84 73 8F 74 75 91 76 04 06 94 90 Alt-Key 68 69 6A 6B 6C 6D 6E 6F 70 71 8B 8C 97 98 99 9B 9D 9F A0 A1 A2 A3 A5 4E
05 07 0F
21.5
21.5.1
AltPrefix : Byte = 0 Keycode for alternate prex key for Alt key. Unix Only CtrlPrefix : Byte = 0 Keycode for alternate prex key for Ctrl key. Unix only errKbdBase = 1010 Base of keyboard routine error reporting constants. errKbdInitError = errKbdBase + 0
718
Failed to initialize keyboard driver errKbdNotImplemented = errKbdBase + 1 Keyboard driver not implemented. kbAlt = 8 Alt key modier kbASCII = $00 Ascii code key event kbCtrl = 4 Control key modier kbdApps = $FF17 Application key (popup-menu) pressed. kbdDelete = $FF2A Delete key pressed kbdDown = $FF27 Arrow down key pressed kbdEnd = $FF26 End key pressed kbdF1 = $FF01 F1 function key pressed. kbdF10 = $FF0A F10 function key pressed. kbdF11 = $FF0B F12 function key pressed. kbdF12 = $FF0C F12 function key pressed. kbdF13 = $FF0D 719
F13 function key pressed. kbdF14 = $FF0E F14 function key pressed. kbdF15 = $FF0F F15 function key pressed. kbdF16 = $FF10 F16 function key pressed. kbdF17 = $FF11 F17 function key pressed. kbdF18 = $FF12 F18 function key pressed. kbdF19 = $FF13 F19 function key pressed. kbdF2 = $FF02 F2 function key pressed. kbdF20 = $FF14 F20 function key pressed. kbdF3 = $FF03 F3 function key pressed. kbdF4 = $FF04 F4 function key pressed. kbdF5 = $FF05 F5 function key pressed. kbdF6 = $FF06 F6 function key pressed. kbdF7 = $FF07 720
F7 function key pressed. kbdF8 = $FF08 F8 function key pressed. kbdF9 = $FF09 F9 function key pressed. kbdHome = $FF20 Home key pressed kbdInsert = $FF29 Insert key pressed kbdLeft = $FF23 Arrow left key pressed kbdLWin = $FF15 Left windows key pressed. kbdMiddle = $FF24 Middle key pad key pressed (numerical 5) kbdPgDn = $FF28 Page down key pressed kbdPgUp = $FF22 Page Up key pressed kbdRight = $FF25 Arrow right key pressed kbdRWin = $FF16 Right windows key pressed. kbdUp = $FF21 Arrow up key pressed kbFnKey = $02 721
function key pressed. kbLeftShift = 1 Left shift key modier kbPhys = $03 Physical key code event kbReleased = $04 Key release event kbRightShift = 2 Right shift key modier kbShift = kbLeftShift or kbRightShift Shift key modier kbUniCode = $01 Unicode code key event SAnd : string = AND This constant is used as the And word in key descriptions. This constant is used by the key event description routines. It can be changed to localize the key descriptions when needed. ShiftPrefix : Byte = 0 Keycode for alternate prex key for Shift key. Unix Only SKeyPad : Array[0..($FF2F-kbdHome)] of
This constant describes all keypad keys. This constant is used by the key event description routines. It can be changed to localize the key descriptions when needed. SLeftRight : Array[1..2] of = (LEFT, RIGHT)
This constant contains strings to describe left and right keys. This constant is used by the key event description routines. It can be changed to localize the key descriptions when needed. SScanCode : string = Key with scancode This constant contains a string to denote a scancode key event. This constant is used by the key event description routines. It can be changed to localize the key descriptions when needed. SShift : Array[1..3] of = (SHIFT, CTRL, ALT) 722
This constant describes the various modier keys. This constant is used by the key event description routines. It can be changed to localize the key descriptions when needed. SUnicodeChar : string = Unicode character This constant contains a string to denote a unicode key event. This constant is used by the key event description routines. It can be changed to localize the key descriptions when needed. SUnknownFunctionKey : string = Unknown function key : This constant contains a string to denote that an unknown function key was found. This constant is used by the key event description routines. It can be changed to localize the key descriptions when needed.
21.5.2
Types
PTreeElement = ^TTreeElement Pointer to TTreeElement (724) record TKeyboardDriver = record InitDriver : procedure; DoneDriver : procedure; GetKeyEvent : function : TKeyEvent; PollKeyEvent : function : TKeyEvent; GetShiftState : function : Byte; TranslateKeyEvent : function(KeyEvent: TKeyEvent) : TKeyEvent; TranslateKeyEventUniCode : function(KeyEvent: TKeyEvent) : TKeyEvent; end
The TKeyboardDriver record can be used to install a custom keyboard driver with the SetKeyboardDriver (734) function. The various elds correspond to the different functions of the keyboard unit interface. For more information about this record see kbddriver (713) TKeyEvent = Cardinal The TKeyEvent type is the base type for all keyboard events. The key stroke is encoded in the 4 bytes of the TKeyEvent type. The various elds of the key stroke encoding can be obtained by typecasting the TKeyEvent type to the TKeyRecord (723) type. TKeyRecord = packed record KeyCode : Word; ShiftState : Byte; Flags : Byte; end
723
Meaning Depending on flags either the physical representation of a key (under DOS scancode, ascii code pair), or the t Shift-state when this key was pressed (or shortly after) Determine how to interpret KeyCode
The shift-state can be checked using the various shift-state constants, and the ags in the last byte can be checked using one of the kbASCII, kbUniCode, kbFnKey, kbPhys, kbReleased constants. If there are two keys returning the same char-code, theres no way to nd out which one was pressed (Gray+ and Simple+). If it needs to be known which was pressed, the untranslated keycodes must be used, but these are system dependent. System dependent constants may be dened to cover those, with possibily having the same name (but different value). Tprocedure = procedure Procedure prototype TTreeElement = record Next : PTreeElement; Parent : PTreeElement; Child : PTreeElement; CanBeTerminal : Boolean; char : Byte; ScanValue : Byte; CharValue : Byte; SpecialHandler : Tprocedure; end
TTreeELement is used to describe key scancode sequences, and is used to handle special key combinations in AddSpecialSequence (724) on unix platforms. There should be no need to handle records of this type.
21.6
21.6.1
Visibility: default
21.6.2
AddSpecialSequence
Synopsis: Add a handler for a special key sequence Declaration: function AddSpecialSequence(const St: string;Proc: Tprocedure) : PTreeElement Visibility: default 724
Description: AddSpecialSequence adds a sequence of key combinations to the keyboard handler. When the key combination specied in st is encountered, then Proc will be executed. The function returns the element in the special key sequence handling tree which handles st. See also: AddSequence (724)
21.6.3
DoneKeyboard
Synopsis: Deactivate keyboard driver. Declaration: procedure DoneKeyboard Visibility: default Description: DoneKeyboard de-initializes the keyboard interface if the keyboard driver is active. If the keyboard driver is not active, the function does nothing. This will cause the keyboard driver to clear up any allocated memory, or restores the console or terminal the program was running in to its initial state before the call to InitKeyBoard (730). This function should be called on program exit. Failing to do so may leave the terminal or console window in an unusable state. Its exact action depends on the platform on which the program is running. On Unix the default keyboard driver restores the line ending of system.output to #10. For an example, see most other functions. Errors: None. See also: InitKeyBoard (730)
21.6.4
FindSequence
Declaration: function FindSequence(const St: string;var AChar: Byte;var Ascan: Byte) : Boolean Visibility: default
21.6.5
FunctionKeyName
Synopsis: Return string representation of a function key code. Declaration: function FunctionKeyName(KeyCode: Word) : string Visibility: default Description: FunctionKeyName returns a string representation of the function key with code KeyCode. This can be an actual function key, or one of the cursor movement keys. Errors: In case KeyCode does not contain a function code, the SUnknownFunctionKey string is returned, appended with the KeyCode. See also: ShiftStateToString (735), KeyEventToString (731) Listing: ./kbdex/ex8.pp
725
Program Example8 ; { Program t o demonstrate t h e FunctionKeyName f u n c t i o n . } Uses keyboard ; Var K : TkeyEvent ; begin InitKeyboard ; W r i t e l n ( Press f u n c t i o n keys , press " q " t o end . ) ; Repeat K: = GetKeyEvent ; K: = TranslateKeyEvent (K ) ; I f I s F u n c t i o n K e y ( k ) then begin Write ( Got f u n c t i o n key : ) ; W r i t e l n ( FunctionKeyName ( TkeyRecord (K ) . KeyCode ) ) ; end ; U n t i l ( GetKeyEventChar (K)= q ) ; DoneKeyboard ; end .
21.6.6
GetKeyboardDriver
Synopsis: Return the current keyboard driver record. Declaration: procedure GetKeyboardDriver(var Driver: TKeyboardDriver) Visibility: default Description: GetKeyBoardDriver returns in Driver the currently active keyboard driver. This function can be used to enhance an existing keyboarddriver. For more information on getting and setting the keyboard driver kbddriver (713). Errors: None. See also: SetKeyboardDriver (734)
21.6.7
GetKeyEvent
Synopsis: Get the next raw key event, wait if needed. Declaration: function GetKeyEvent : TKeyEvent Visibility: default Description: GetKeyEvent returns the last keyevent if it is available, or waits for one if none is available. A non-blocking version is available in PollKeyEvent (731). The returned key is encoded as a TKeyEvent type variable, and is normally the physical key scan code, (the scan code is driver dependent) which can be translated with one of the translation functions TranslateKeyEvent (735) or TranslateKeyEventUniCode (735). See the types section for a description of how the key is described. Errors: If no key became available (e.g. when the driver does not support it), 0 is returned. 726
See also: PutKeyEvent (733), PollKeyEvent (731), TranslateKeyEvent (735), TranslateKeyEventUniCode (735) Listing: ./kbdex/ex1.pp
program example1 ; { T h i s program demonstrates t h e GetKeyEvent f u n c t i o n } uses keyboard ; Var K : TKeyEvent ; begin InitKeyBoard ; W r i t e l n ( Press keys , press " q " t o end . ) ; Repeat K: = GetKeyEvent ; K: = TranslateKeyEvent (K ) ; Write ( Got key event w i t h ) ; Case GetKeyEventFlags (K ) of kbASCII : W r i t e l n ( ASCII key ) ; kbUniCode : W r i t e l n ( Unicode key ) ; kbFnKey : W r i t e l n ( F u n c t i o n key ) ; kbPhys : W r i t e l n ( P h y s i c a l key ) ; kbReleased : W r i t e l n ( Released key event ) ; end ; W r i t e l n ( Got key : , KeyEventToString (K ) ) ; U n t i l ( GetKeyEventChar (K)= q ) ; DoneKeyBoard ; end .
21.6.8
GetKeyEventChar
Synopsis: Get the character key part of a key event. Declaration: function GetKeyEventChar(KeyEvent: TKeyEvent) : Char Visibility: default Description: GetKeyEventChar returns the charcode part of the given KeyEvent, if it contains a translated character key keycode. The charcode is simply the ascii code of the character key that was pressed. It returns the null character if the key was not a character key, but e.g. a function key. For an example, see GetKeyEvent (726) Errors: None. See also: GetKeyEventUniCode (729), GetKeyEventShiftState (729), GetKeyEventFlags (728), GetKeyEventCode (727), GetKeyEvent (726)
21.6.9
GetKeyEventCode
Synopsis: Translate function key part of a key event code. Declaration: function GetKeyEventCode(KeyEvent: TKeyEvent) : Word
727
Visibility: default Description: GetKeyEventCode returns the translated function keycode part of the given KeyEvent, if it contains a translated function key. If the key pressed was not a function key, the null character is returned. Errors: None. See also: GetKeyEventUniCode (729), GetKeyEventShiftState (729), GetKeyEventFlags (728), GetKeyEventChar (727), GetKeyEvent (726) Listing: ./kbdex/ex2.pp
Program Example2 ; { Program t o demonstrate t h e GetKeyEventCode f u n c t i o n . } Uses keyboard ; Var K : TKeyEvent ; begin InitKeyBoard ; W r i t e l n ( Press f u n c t i o n keys , o r press " q " t o end . ) ; Repeat K: = GetKeyEvent ; K: = TranslateKeyEvent (K ) ; I f ( GetKeyEventFlags (K)<> KbfnKey ) then W r i t e l n ( Not a f u n c t i o n key ) else begin Write ( Got key ( , GetKeyEventCode (K ) ) ; W r i t e l n ( ) : , KeyEventToString (K ) ) ; end ; U n t i l ( GetKeyEventChar (K)= q ) ; DoneKeyboard ; end .
21.6.10
GetKeyEventFlags
Synopsis: Extract the ags from a key event. Declaration: function GetKeyEventFlags(KeyEvent: TKeyEvent) : Byte Visibility: default Description: GetKeyEventFlags returns the ags part of the given KeyEvent. For an example, see GetKeyEvent (726) Errors: None. See also: GetKeyEventUniCode (729), GetKeyEventShiftState (729), GetKeyEventCode (727), GetKeyEventChar (727), GetKeyEvent (726)
728
21.6.11
GetKeyEventShiftState
Synopsis: Return the current state of the shift keys. Declaration: function GetKeyEventShiftState(KeyEvent: TKeyEvent) : Byte Visibility: default Description: GetKeyEventShiftState returns the shift-state values of the given KeyEvent. This can be used to detect which of the modier keys Shift, Alt or Ctrl were pressed. If none were pressed, zero is returned. Note that this function does not always return expected results; In a unix X-Term, the modier keys do not always work. Errors: None. See also: GetKeyEventUniCode (729), GetKeyEventFlags (728), GetKeyEventCode (727), GetKeyEventChar (727), GetKeyEvent (726) Listing: ./kbdex/ex3.pp
Program Example3 ; { Program t o demonstrate t h e G e t K e y E v e n t S h i f t S t a t e f u n c t i o n . } Uses keyboard ; Var K : TKeyEvent ; S : Byte ; begin InitKeyBoard ; Write ( Press keys combined w i t h CTRL / SHIFT / ALT ) ; W r i t e l n ( , o r press " q " t o end . ) ; Repeat K: = GetKeyEvent ; K: = TranslateKeyEvent (K ) ; S: = G e t K e y E v e n t S h i f t S t a t e (K ) ; I f ( S= 0 ) then W r i t e l n ( No s p e c i a l keys pressed ) else begin W r i t e l n ( Detected s p e c i a l keys : , S h i f t S t a t e T o S t r i n g ( K , False ) ) ; W r i t e l n ( Got key : , KeyEventToString (K ) ) ; end ; U n t i l ( GetKeyEventChar (K)= q ) ; DoneKeyboard ; end .
21.6.12
GetKeyEventUniCode
Synopsis: Return the unicode key event. Declaration: function GetKeyEventUniCode(KeyEvent: TKeyEvent) : Word Visibility: default
729
Description: GetKeyEventUniCode returns the unicode part of the given KeyEvent if it contains a translated unicode character. Errors: None. See also: GetKeyEventShiftState (729), GetKeyEventFlags (728), GetKeyEventCode (727), GetKeyEventChar (727), GetKeyEvent (726)
21.6.13
InitKeyboard
Synopsis: Initialize the keyboard driver. Declaration: procedure InitKeyboard Visibility: default Description: InitKeyboard initializes the keyboard driver. If the driver is already active, it does nothing. When the driver is initialized, it will do everything necessary to ensure the functioning of the keyboard, including allocating memory, initializing the terminal etc. This function should be called once, before using any of the keyboard functions. When it is called, the DoneKeyboard (725) function should also be called before exiting the program or changing the keyboard driver with SetKeyboardDriver (734). On Unix, the default keyboard driver sets terminal in raw mode. In raw mode the line feed behaves as an actual linefeed, i.e. the cursor is moved down one line. while the x coordinate does not change. To compensate, the default keyboard sets driver line ending of system.output to #13#10. For an example, see most other functions. Errors: None. See also: DoneKeyboard (725), SetKeyboardDriver (734)
21.6.14
IsFunctionKey
Synopsis: Check whether a given event is a function key event. Declaration: function IsFunctionKey(KeyEvent: TKeyEvent) : Boolean Visibility: default Description: IsFunctionKey returns True if the given key event in KeyEvent was a function key or not. Errors: None. See also: GetKeyEvent (726) Listing: ./kbdex/ex7.pp
program example1 ; { T h i s program demonstrates t h e GetKeyEvent f u n c t i o n } uses keyboard ; Var K : TKeyEvent ; begin
730
InitKeyBoard ; W r i t e l n ( Press keys , press " q " t o end . ) ; Repeat K: = GetKeyEvent ; K: = TranslateKeyEvent (K ) ; I f I s F u n c t i o n K e y (K ) then W r i t e l n ( Got f u n c t i o n key : , KeyEventToString (K ) ) else W r i t e l n ( n o t a f u n c t i o n key . ) ; U n t i l ( GetKeyEventChar (K)= q ) ; DoneKeyBoard ; end .
21.6.15
KeyEventToString
Synopsis: Return a string describing the key event. Declaration: function KeyEventToString(KeyEvent: TKeyEvent) : string Visibility: default Description: KeyEventToString translates the key event in KeyEvent to a human-readable description of the pressed key. It will use the constants described in the constants section to do so. For an example, see most other functions. Errors: If an unknown key is passed, the scancode is returned, prexed with the SScanCode string. See also: FunctionKeyName (725), ShiftStateToString (735)
21.6.16
KeyPressed
Synopsis: Check event queue for key press Declaration: function KeyPressed : Boolean Visibility: default Description: KeyPressed checks the keyboard event queue to see whether a key event is present, and returns True if a key event is available. This function simply calls PollKeyEvent (731) and checks for a valid result. Errors: None. See also: PollKeyEvent (731), GetKeyEvent (726)
21.6.17
PollKeyEvent
Synopsis: Get next key event, but does not wait. Declaration: function PollKeyEvent : TKeyEvent Visibility: default Description: PollKeyEvent checks whether a key event is available, and returns it if one is found. If no event is pending, it returns 0. Note that this does not remove the key from the pending keys. The key should still be retrieved from the pending key events list with the GetKeyEvent (726) function. 731
Errors: None. See also: PutKeyEvent (733), GetKeyEvent (726) Listing: ./kbdex/ex4.pp
program example4 ; { T h i s program demonstrates t h e PollKeyEvent f u n c t i o n } uses keyboard ; Var K : TKeyEvent ; begin InitKeyBoard ; W r i t e l n ( Press keys , press " q " t o end . ) ; Repeat K: = PollKeyEvent ; I f k < >0 then begin K: = GetKeyEvent ; K: = TranslateKeyEvent (K ) ; writeln ; W r i t e l n ( Got key : , KeyEventToString (K ) ) ; end else write ( . ) ; U n t i l ( GetKeyEventChar (K)= q ) ; DoneKeyBoard ; end .
21.6.18
PollShiftStateEvent
Synopsis: Check current shift state. Declaration: function PollShiftStateEvent : TKeyEvent Visibility: default Description: PollShiftStateEvent returns the current shiftstate in a keyevent. This will return 0 if there is no key event pending. Errors: None. See also: PollKeyEvent (731), GetKeyEvent (726) Listing: ./kbdex/ex6.pp
program example6 ; { T h i s program demonstrates t h e P o l l S h i f t S t a t e E v e n t f u n c t i o n } uses keyboard ; Var K : TKeyEvent ;
732
begin InitKeyBoard ; W r i t e l n ( Press keys , press " q " t o end . ) ; Repeat K: = PollKeyEvent ; I f k < >0 then begin K: = P o l l S h i f t S t a t e E v e n t ; W r i t e l n ( Got s h i f t s t a t e : , S h i f t S t a t e T o S t r i n g ( K , False ) ) ; / / Consume t h e key . K: = GetKeyEvent ; K: = TranslateKeyEvent (K ) ; end { else write ( . ) } ; U n t i l ( GetKeyEventChar (K)= q ) ; DoneKeyBoard ; end .
21.6.19
PutKeyEvent
Synopsis: Put a key event in the event queue. Declaration: procedure PutKeyEvent(KeyEvent: TKeyEvent) Visibility: default Description: PutKeyEvent adds the given KeyEvent to the input queue. Please note that depending on the implementation this can hold only one value, i.e. when calling PutKeyEvent multiple times, only the last pushed key will be remembered. Errors: None See also: PollKeyEvent (731), GetKeyEvent (726) Listing: ./kbdex/ex5.pp
program example5 ; { T h i s program demonstrates t h e PutKeyEvent f u n c t i o n } uses keyboard ; Var K , k2 : TKeyEvent ; begin InitKeyBoard ; W r i t e l n ( Press keys , press " q " t o end . ) ; K2 : = 0 ; Repeat K: = GetKeyEvent ; I f k < >0 then begin i f ( k2 mod 2 ) = 0 then K2 : =K+1 else
733
K2 : = 0 ; K: = TranslateKeyEvent (K ) ; W r i t e l n ( Got key : , KeyEventToString (K ) ) ; i f ( K2< >0) then begin PutKeyEvent ( k2 ) ; K2 : = TranslateKeyEVent ( K2 ) ; W r i t e l n ( Put key : , KeyEventToString ( K2 ) ) end end U n t i l ( GetKeyEventChar (K)= q ) ; DoneKeyBoard ; end .
21.6.20
Visibility: default
RawReadKey
21.6.21
Visibility: default
RawReadString
21.6.22
Visibility: default
RestoreStartMode
21.6.23
SetKeyboardDriver
Synopsis: Set a new keyboard driver. Declaration: function SetKeyboardDriver(const Driver: TKeyboardDriver) : Boolean Visibility: default Description: SetKeyBoardDriver sets the keyboard driver to Driver, if the current keyboard driver is not yet initialized. If the current keyboard driver is initialized, then SetKeyboardDriver does nothing. Before setting the driver, the currently active driver should be disabled with a call to DoneKeyboard (725). The function returns True if the driver was set, False if not. For more information on setting the keyboard driver, see kbddriver (713). Errors: None. See also: GetKeyboardDriver (726), DoneKeyboard (725)
734
21.6.24
ShiftStateToString
Synopsis: Return description of key event shift state Declaration: function ShiftStateToString(KeyEvent: TKeyEvent;UseLeftRight: Boolean) : string Visibility: default Description: ShiftStateToString returns a string description of the shift state of the key event KeyEvent. This can be an empty string. The shift state is described using the strings in the SShift constant. For an example, see PollShiftStateEvent (732). Errors: None. See also: FunctionKeyName (725), KeyEventToString (731)
21.6.25
TranslateKeyEvent
Synopsis: Translate raw event to ascii key event Declaration: function TranslateKeyEvent(KeyEvent: TKeyEvent) : TKeyEvent Visibility: default Description: TranslateKeyEvent performs ASCII translation of the KeyEvent. It translates a physical key to a function key if the key is a function key, and translates the physical key to the ordinal of the ascii character if there is an equivalent character key. For an example, see GetKeyEvent (726) Errors: None. See also: TranslateKeyEventUniCode (735)
21.6.26
TranslateKeyEventUniCode
Synopsis: Translate raw event to UNICode key event Declaration: function TranslateKeyEventUniCode(KeyEvent: TKeyEvent) : TKeyEvent Visibility: default Description: TranslateKeyEventUniCode performs Unicode translation of the KeyEvent. It is not yet implemented for all platforms. Errors: If the function is not yet implemented, then the ErrorCode of the system unit will be set to errKbdNotImplemented See also: TranslateKeyEvent (735)
735
Chapter 22
The lineinfo provides a routine that reads the debug information of an executable (if any exists) and returns source code information about this address. It works with Stabs debug information. Note that this unit is not thread-safe, and that its behaviour is undened if multiple threads try to write a backtrace at the same time. For DWARF debug information, the lnfodwrf (756) unit must be used.
22.2
22.2.1
Synopsis: Return source line information about an address. Declaration: function GetLineInfo(addr: ptruint;var func: string;var source: string; var line: LongInt) : Boolean Visibility: default Description: GetLineInfo returns source line information about the address addr. It searches this information in the stabs debugging information found in the binary: If the le was compiled without debug information, nothing will be returned. Upon succesful retrieval of the debug information, True is returned, and the func parameter is lled with the name of the function in which the address is located. The source parameter contains the name of the le in which the function was implemented, and line contains the line number in the source le for addr. Errors: If no debug information is found, False is returned.
736
Chapter 23
23.2
Overview
The linux unit contains linux specic operating system calls. The platform independent functionality of the FPC 1.0.X version of the linux unit has been split out over the unix (1668), baseunix (102) and unixutil (1719) units. The X86-specic parts have been moved to the X86 (1752) unit. People wanting to use the old version (FPC 1.0.X and before) of the linux can use the oldlinux (1006) unit instead.
23.3
23.3.1
CAP_AUDIT_CONTROL = 30 Allow manipulation of kernel auditing features CAP_AUDIT_WRITE = 29 Allow writing to kernel audit log CAP_CHOWN = 0
737
Perform chown operation CAP_DAC_OVERRIDE = 1 Bypass le operation (rwx) checks CAP_DAC_READ_SEARCH = 2 Bypass le read-only operation checks CAP_FOWNER = 3 Bypass owner ID checks CAP_FSETID = 4 Do not clear SUID/GUID bits on modied les CAP_FS_MASK = $1f ? CAP_IPC_LOCK = 14 Allow memory locking calls CAP_IPC_OWNER = 15 Bypass permission checks on IPC operations CAP_KILL = 5 Bypass permission checks for sending signals CAP_LEASE = 28 Allow le leases CAP_LINUX_IMMUTABLE = 9 Allow setting ext2 le attributes CAP_MKNOD = 27 Allow creation of special les through mknod calls CAP_NET_ADMIN = 12 Allow network operations (e.g. setting socket options) CAP_NET_BIND_SERVICE = 10 738
Allow binding to ports less than 1024 CAP_NET_BROADCAST = 11 Allow socket broadcast operations CAP_NET_RAW = 13 Allow use of RAW and PACKET sockets CAP_SETGID = 6 Allow GID manipulations CAP_SETPCAP = 8 Allow to set other process capabilities CAP_SETUID = 7 Allow process ID manipulations CAP_SYS_ADMIN = 21 Allow various system administration calls CAP_SYS_BOOT = 22 Allow reboot calls CAP_SYS_CHROOT = 18 Allow chroot calls. CAP_SYS_MODULE = 16 Allow loading/unloading of kernel modules CAP_SYS_NICE = 23 Allowing raising process and thread priorities CAP_SYS_PACCT = 20 Allow acct calls CAP_SYS_PTRACE = 19 Allow ptrace calls CAP_SYS_RAWIO = 17 739
Allow raw I/O port operations CAP_SYS_RESOURCE = 24 Allow use of special resources or raising of resource limits CAP_SYS_TIME = 25 Allow system or real-time clock modication CAP_SYS_TTY_CONFIG = 26 Allow vhangup calls CLONE_CHILD_CLEARTID = $00200000 Clone option: Erase child thread ID in child memory space when child exits. CLONE_CHILD_SETTID = $01000000 Clone option: Store child thread ID in child memory. CLONE_DETACHED = $00400000 Clone option: Start clone detached. CLONE_FILES = $00000400 Clone (102) option: open les shared between processes CLONE_FS = $00000200 Clone (102) option: fs info shared between processes CLONE_NEWNS = $00020000 Clone options: Start child in new (lesystem) namespace. CLONE_PARENT = $00008000 Clone options: Set child parent to parent of calling process. CLONE_PARENT_SETTID = $00100000 Clone option: Store child thread ID in memory in both parent and child. CLONE_PID = $00001000 Clone (102) option: PID shared between processes CLONE_PTRACE = $00002000 740
Clone options: if parent is traced, trace child also CLONE_SETTLS = $00080000 Clone option: The newtls parameter is the TLS descriptor of the child CLONE_SIGHAND = $00000800 Clone (102) option: signal handlers shared between processes CLONE_STOPPED = $02000000 Clone option: Start child in stopped state. CLONE_SYSVSEM = $00040000 Clone option: Caller and child share the same semaphore undo values CLONE_THREAD = $00010000 Clone options: Set child in thread group of calling process. CLONE_UNTRACED = $00800000 Clone option: Do not allow a ptrace call on this clone. CLONE_VFORK = $00004000 Clone options: suspend parent till child execs CLONE_VM = $00000100 Clone (102) option: VM shared between processes CSIGNAL = $000000ff Clone (102) option: Signal mask to be sent at exit EPOLLERR = $08 event_wait error condition on le descriptor EPOLLET = $80000000 Set event_wait edge trigger behaviour on le descriptor EPOLLHUP = $10 event_wait hang up event EPOLLIN = $01 741
event_wait input le descriptor ready event EPOLLONESHOT = $40000000 Set single-shot behaviour on epoll_wait. EPOLLOUT = $04 event_wait output le descriptor ready event EPOLLPRI = $02 event_wait high priority data available on input le descriptor EPOLL_CTL_ADD = 1 Add ledescriptor to list of events EPOLL_CTL_DEL = 2 Delete event for ledescriptor EPOLL_CTL_MOD = 3 Modify event for ledescriptor FUTEX_CMP_REQUEUE = 4 Futex option: requeue waiting processes on other futex, but check its value rst FUTEX_FD = 2 Futex option: Associate le descriptor with futex. FUTEX_LOCK_PI = 6 Futex option: Undocumented FUTEX_OP_ADD = 1 Futex operation: Undocumented FUTEX_OP_ANDN = 3 Futex operation: Undocumented FUTEX_OP_CMP_EQ = 0 Futex operation: Undocumented FUTEX_OP_CMP_GE = 5 742
Futex operation: Undocumented FUTEX_OP_CMP_GT = 4 Futex operation: Undocumented FUTEX_OP_CMP_LE = 3 Futex operation: Undocumented FUTEX_OP_CMP_LT = 2 Futex operation: Undocumented FUTEX_OP_CMP_NE = 1 Futex operation: Undocumented FUTEX_OP_OPARG_SHIFT = 8 Futex operation: Undocumented FUTEX_OP_OR = 2 Futex operation: Undocumented FUTEX_OP_SET = 0 Futex operation: Undocumented FUTEX_OP_XOR = 4 Futex operation: Undocumented FUTEX_REQUEUE = 3 Futex option: requeue waiting processes on other futex. FUTEX_TRYLOCK_PI = 8 Futex option: Undocumented FUTEX_UNLOCK_PI = 7 Futex option: Undocumented FUTEX_WAIT = 0 Futex option: Wait on futex till wake call arrives. FUTEX_WAKE = 1 743
Futex option: wakes any waiting processes on this futex FUTEX_WAKE_OP = 5 Futex option: Undocumented GIO_CMAP = $4B70 IOCTL: Get colour palette on VGA+ GIO_FONT = $4B60 IOCTL: Get font in expanded form. GIO_FONTX = $4B6B IOCTL: Get font in consolefontdesc record. GIO_SCRNMAP = $4B40 IOCTL: get screen mapping from kernel GIO_UNIMAP = $4B66 IOCTL: get unicode-to-font mapping from kernel GIO_UNISCRNMAP = $4B69 IOCTL: get full Unicode screen mapping KB_101 = 2 IOCTL: Keyboard types: 101 keys KB_84 = 1 IOCTL: Keyboard types: 84 keys KB_OTHER = 3 IOCTL: Keyboard types: other type KDADDIO = $4B34 IOCTL: add i/o port as valid KDDELIO = $4B35 IOCTL: delete i/o port as valid KDDISABIO = $4B37 744
IOCTL: disable i/o to video board KDENABIO = $4B36 IOCTL: enable i/o to video board KDFONTOP = $4B72 IOCTL: font operations KDGETKEYCODE = $4B4C IOCTL: read kernel keycode table entry KDGETLED = $4B31 IOCTL: return current led state KDGETMODE = $4B3B IOCTL: get current mode KDGKBDIACR = $4B4A IOCTL: read kernel accent table KDGKBTYPE = $4B33 IOCTL: get keyboard type KDMAPDISP = $4B3C IOCTL: map display into address space KDMKTONE = $4B30 IOCTL: generate tone KDSETKEYCODE = $4B4D IOCTL: write kernel keycode table entry KDSETLED = $4B32 IOCTL: set led state KDSETMODE = $4B3A IOCTL: set text/graphics mode KDSIGACCEPT = $4B4E 745
IOCTL: accept kbd generated signals KDSKBDIACR = $4B4B IOCTL: write kernel accent table KDUNMAPDISP = $4B3D IOCTL: unmap display from address space KD_GRAPHICS = 1 IOCTL: Tty modes: graphics mode KD_TEXT = 0 IOCTL: Tty modes: Text mode KD_TEXT0 = 2 IOCTL: Tty modes: Text mode (obsolete) KD_TEXT1 = 3 IOCTL: Tty modes: Text mode (obsolete) KIOCSOUND = $4B2F IOCTL: start/stop sound generation (0 for off) LED_CAP = 4 IOCTL: LED_CAP : caps lock led LED_NUM = 2 IOCTL: LED_SCR : Num lock led LED_SCR = 1 IOCTL: LED_SCR : scroll lock led LINUX_CAPABILITY_VERSION = $19980330 Current capability version in use by kernel MAP_DENYWRITE = $800 Read-only MAP_EXECUTABLE = $1000 746
Memory area is marked as executable MAP_GROWSDOWN = $100 Memory map grows down, like stack MAP_LOCKED = $2000 Memory pages are locked MAP_NORESERVE = $4000 Do not check for reservations PIO_CMAP = $4B71 IOCTL: Set colour palette on VGA+ PIO_FONT = $4B61 IOCTL: Use font in expanded form. PIO_FONTRESET = $4B6D IOCTL: Reset to default font PIO_FONTX = $4B6C IOCTL: Set font in consolefontdesc record. PIO_SCRNMAP = $4B41 IOCTL: put screen mapping table in kernel PIO_UNIMAP = $4B67 IOCTL: put unicode-to-font mapping in kernel PIO_UNIMAPCLR = $4B68 IOCTL: clear table, possibly advise hash algorithm PIO_UNISCRNMAP = $4B6A IOCTL: set full Unicode screen mapping POLLMSG = $0400 Unused in linux POLLRDHUP = $2000 747
Peer Shutdown/closed writing half of connection POLLREMOVE = $1000 Undocumented linux extension of Poll SPLICE_F_GIFT = 8 Pages spliced in are a gift SPLICE_F_MORE = 4 Expect more data SPLICE_F_MOVE = 1 Move pages instead of copying SPLICE_F_NONBLOCK = 2 Dont block on pipe splicing operations SYNC_FILE_RANGE_WAIT_AFTER = 4 Wait upon write-out of specied pages in the range after performing any write. SYNC_FILE_RANGE_WAIT_BEFORE = 1 Wait for write-out of previously-submitted specied pages before writing more data. SYNC_FILE_RANGE_WRITE = 2 Initiate write of all dirty pages in the specied range.
23.3.2
Types
Data structure used in EPOLL IOCTL call. EPoll_Event = record Events : cuint32; Data : TEPoll_Data; end
Pointer to EPoll_Data (748) record PEpoll_Event = ^EPoll_Event Pointer to EPoll_Event (748) type PSysInfo = ^TSysInfo Pointer to TSysInfo (749) record. Puser_cap_data = ^user_cap_data Pointer to user_cap_data (750) record Puser_cap_header = ^user_cap_header Pointer to user_cap_header (750) record TCloneFunc = function(args: pointer) : LongInt of object Clone function prototype. TEPoll_Data = EPoll_Data Alias for EPoll_Data (748) type TEPoll_Event = EPoll_Event Alias for EPoll_Event (748) type TSysInfo = record uptime : clong; loads : Array[0..2] of culong; totalram : culong; freeram : culong; sharedram : culong; bufferram : culong; totalswap : culong; freeswap : culong; procs : cushort; pad : cushort; totalhigh : culong; freehigh : culong; mem_unit : cuint; _f : Array[0..19-2*sizeof(clong)-sizeof(cint)] of cchar; end
749
user_cap_data describes the set of capabilities for the indicated thread. user_cap_header = packed record version : Cardinal; pid : Cardinal; end
user_cap_header describes the root user capabilities for the current thread, as set by getcap (102) and setcap (102)
23.4
23.4.1
Synopsis: Return the capabilities for the indicated thread Declaration: function capget(header: Puser_cap_header;data: Puser_cap_data) : cint Visibility: default Description: capget returns the capabilities of the indicated thread in header. The thread is identied by the process ID, or -1 for all caller (and child) process IDs. Refer to the linux man pages (7 capabilities) for more info. Errors: On success, zero is returned, on error -1 is returned, and fperrno is set to the error. See also: capset (750)
23.4.2
capset
Synopsis: Set the capabilities for the indicated thread Declaration: function capset(header: Puser_cap_header;data: Puser_cap_data) : cint Visibility: default Description: capget sets the capabilities of the indicated thread in header. The thread is identied by the process ID, or -1 for all caller (and child) process IDs. Refer to the linux man pages (7 capabilities) for more info. Errors: On success, zero is returned, on error -1 is returned, and fperrno is set to the error. See also: capget (750)
750
23.4.3
epoll_create
Synopsis: Create new epoll le descriptor Declaration: function epoll_create(size: cint) : cint Visibility: default Description: epoll_create creates a new epoll le descriptor. The size argument indicates to the kernel approximately how many structures should be allocated, but is by no means an upper limit. On success, a le descriptor is returned that can be used in subsequent epoll_ctl (751) or epoll_wait (752) calls, and should be closed using the fpClose (146) call. Errors: On error, -1 is returned, and errno (156) is set. See also: epoll_ctl (751), epoll_wait (752), fpClose (146)
23.4.4
epoll_ctl
Synopsis: Modify an epoll le descriptor Declaration: function epoll_ctl(epfd: cint;op: cint;fd: cint;event: PEpoll_Event) : cint Visibility: default Description: epoll_ctl performs the op operation on epoll le descriptor epfd. The operation will be monitored on le descriptor fd, and is optionally controlled by event. op can be one of the following values: EPOLL_CTL_ADDAdd ledescriptor to list of events EPOLL_CTL_MODModify event for ledescriptor EPOLL_CTL_DELDelete event for ledescriptor The events eld in event_data is a bitmask of one or more of the following values: EPOLLINThe le is ready for read operations EPOLLOUTThe le is ready for write operations. EPOLLPRIUrgent data is available for read operations. EPOLLERRAn error condition is signaled on the le descriptor. EPOLLHUPA Hang up happened on the le descriptor. EPOLLETSet the Edge Triggered behaviour for the le descriptor. EPOLLONESHOTSet One-Shot behaviour for the le descriptor. The event will be triggered only once. Errors: On error -1 is returned, and errno is set accordingly. See also: epoll_create (751), epoll_wait (752), fpClose (146)
751
23.4.5
epoll_wait
Synopsis: Wait for an event on an epoll le descriptor. Declaration: function epoll_wait(epfd: cint;events: PEpoll_Event;maxevents: cint; timeout: cint) : cint Visibility: default Description: epoll_wait waits for timeout milliseconds for an event to occur on epoll le descriptor epfd. If timeout is -1, it waits indenitely, if timeour is zero, it does not wait, but returns immediatly, even if no events were detected. On return, data for at most maxevents will be returned in the memory pointed to by events. The function returns the number of le descriptors for which events were reported. This can be zero if the timeout was reached. Errors: On error -1 is returned, and errno is set accordingly. See also: epoll_create (751), epoll_ctl (751), fpClose (146)
23.4.6
fdatasync
Synopsis: Synchronize the data in memory with the data on storage device Declaration: function fdatasync(fd: cint) : cint Visibility: default Description: fdatasync does the same as fpfsync but does not ush the metadata, unless it is vital to the correct reading/writing of the le. In practice, this means that unless the le size changed, the le metadata will not be synced. See also: #rtl.unix.fsync (1696)
23.4.7
futex
Synopsis: Perform a futex operation Declaration: function futex(uaddr: pcint;op: cint;val: cint;timeout: ptimespec; addr2: pcint;val3: cint) : cint function futex(var uaddr;op: cint;val: cint;timeout: ptimespec; var addr2;val3: cint) : cint function futex(var uaddr;op: cint;val: cint;var timeout: TTimeSpec; var addr2;val3: cint) : cint function futex(uaddr: pcint;op: cint;val: cint;timeout: ptimespec) : cint function futex(var uaddr;op: cint;val: cint;timeout: ptimespec) : cint function futex(var uaddr;op: cint;val: cint;var timeout: TTimeSpec) : cint Visibility: default Description: futex performs an operation on a memory futex as described in the kernel manual page for futex. The mutex is located at uaddr, the operation op is one of the following constants: FUTEX_WAITFutex option: Wait on futex till wake call arrives. FUTEX_WAKEFutex option: Wait on futex till wake call arrives. 752
FUTEX_FDFutex option: Associate le descriptor with futex. FUTEX_REQUEUEFutex option: requeue waiting processes on other futex. FUTEX_CMP_REQUEUEFutex option: requeue waiting processes on other futex, but check its value rst The value to check for is indicated in val, and a timeout can be specied in timeout. The optional arguments addr2 and val3 are used only with the FUTEX_REQUEUE and FUTEX_CMP_REQUEUE operations. In case of an error, -1 is return. All other return values must be interpreted according to the operation performed. This call directly interfaces with the Linux kernel, more information can be found in the kernel manual pages. Errors: On error, -1 is returned. Use fpgeterrno (156) to get the error code.
23.4.8
futex_op
Synopsis: Futex operation: Declaration: function futex_op(op: cint;oparg: cint;cmp: cint;cmparg: cint) : cint Visibility: default Description: FUTEX_OP Performs an operation on a futex: FUTEX_OP := ((op and $F) shl 28) or ((cmp and $F) shl 24) or ((oparg and $FFF) shl 12) or (cmparg and $FFF);
23.4.9
sched_yield
Synopsis: Yield the processor to another thread. Declaration: procedure sched_yield Visibility: default Description: sched_yield yields the processor to another thread. The current thread is put at the back of its queue. If there is only 1 thread in the application, the thread continues to run. The call always returns zero.
23.4.10
sync_le_range
Synopsis: Force committing of data to disk Declaration: function sync_file_range(fd: cint;offset: off64_t;nbytes: off64_t; flags: cuint) : cint Visibility: default Description: sync_file_range forces the linux kernel to write any data pages of a specied le (le descriptor fd) to disk. The range of the le is specied by the offset offset and the number of bytes nbytes. Options is an OR-ed combination of
753
SYNC_FILE_RANGE_WAIT_BEFOREWait for write-out of previously-submitted specied pages before writing more data. SYNC_FILE_RANGE_WRITEInitiate write of all dirty pages in the specied range. SYNC_FILE_RANGE_WAIT_AFTERWait upon write-out of specied pages in the range after performing any write. If none is specied, the operation does nothing. Errors: On return -1 is returned and fperrno is set to the actual error code. See the linux man page for more on the error codes. See also: fdatasync (752)
23.4.11
Sysinfo
Synopsis: Return kernel system information Declaration: function Sysinfo(Info: PSysInfo) : cint Visibility: default Description: SysInfo returns system information in Info. Returned information in Info includes: uptimeNumber of seconds since boot. loads1, 5 and 15 minute load averages. totalramtotal amount of main memory. freeramamount of free memory. sharedramamount of shared memory. bufferramamount of memory used by buffers. totalswaptotal amount of swapspace. freeswapamount of free swapspace. procsnumber of current processes. Errors: None. See also: #rtl.baseunix.fpUname (191) Listing: ./linuxex/ex64.pp
program Example64 ; { Example t o demonstrate t h e S y s I n f o f u n c t i o n . S y s i n f o i s Linuxo n l y . } { $ i f d e f Linux } Uses L i n u x ; Function Mb( L : L o n g i n t ) : l o n g i n t ; begin Mb: = L div ( 1 0 2 4 1 0 2 4 ) ; end ; Var I n f o : TSysInfo ;
754
D,M, Secs ,H : l o n g i n t ; { $endif } begin { $ i f d e f Linux } I f Not S y s I n f o ( I n f o ) then Halt ( 1 ) ; With I n f o do begin D: = Uptime div ( 3 6 0 0 2 4 ) ; UpTime : = UpTime mod ( 3 6 0 0 2 4 ) ; h : = uptime div 3 6 0 0 ; uptime : = uptime mod 3 6 0 0 ; m: = uptime div 6 0 ; secs : = uptime mod 6 0 ; W r i t e l n ( Uptime : , d , days , , h , hours , ,m, min , , secs , s . ) ; W r i t e l n ( Loads : , Loads [ 1 ] , / , Loads [ 2 ] , / , Loads [ 3 ] ) ; W r i t e l n ( T o t a l Ram : ,Mb( t o t a l r a m ) , Mb. ) ; W r i t e l n ( Free Ram : ,Mb( freeram ) , Mb. ) ; W r i t e l n ( Shared Ram : ,Mb( sharedram ) , Mb. ) ; W r i t e l n ( B u f f e r Ram : ,Mb( b u f f e r r a m ) , Mb. ) ; W r i t e l n ( T o t a l Swap : ,Mb( t o t a l s w a p ) , Mb. ) ; W r i t e l n ( Free Swap : ,Mb( freeswap ) , Mb. ) ; end ; { $endif } end .
755
Chapter 24
The lnfodwrf provides a routine that reads the debug information of an executable (if any exists) and returns source code information about this address. It works with DWARF debug information. Note that this unit is not thread-safe, and that its behaviour is undened if multiple threads try to write a backtrace at the same time. For stabs debug information, the lineinfo (736) unit must be used.
24.2
24.2.1
Synopsis: Return source line information about an address. Declaration: function GetLineInfo(addr: ptruint;var func: string;var source: string; var line: LongInt) : Boolean Visibility: default Description: GetLineInfo returns source line information about the address addr. It searches this information in the DWARF debugging information found in the binary: If the le was compiled without debug information, nothing will be returned. Upon succesful retrieval of the debug information, True is returned, and the func parameter is lled with the name of the function in which the address is located. The source parameter contains the name of the le in which the function was implemented, and line contains the line number in the source le for addr. Errors: If no debug information is found, False is returned.
756
Chapter 25
25.2
Overview
This document describes the math unit. The math unit was initially written by Florian Klaemp. It provides mathematical functions which arent covered by the system unit. This chapter starts out with a denition of all types and constants that are dened, after which an overview is presented of the available functions, grouped by category, and the last part contains a complete explanation of each function. The following things must be taken into account when using this unit: 1. This unit is compiled in Object Pascal mode so all integers are 32 bit. 2. Some overloaded functions exist for data arrays of integers and oats. When using the address operator (@) to pass an array of data to such a function, make sure the address is typecasted to the right type, or turn on the typed address operator feature. failing to do so, will cause the compiler not be able to decide which function you want to call.
25.3
Geometrical functions
Table 25.2: Name hypot (775) norm (787) Description Hypotenuse of triangle Euclidian norm
757
25.4
Statistical functions
Table 25.3: Name mean (783) meanandstddev (783) momentskewkurtosis (786) popnstddev (788) popnvariance (789) randg (792) stddev (796) sum (797) sumofsquares (798) sumsandsquares (798) totalvariance (800) variance (801) Description Mean of values Mean and standard deviation of values Moments, skew and kurtosis Population standarddeviation Population variance Gaussian distributed randum value Standard deviation Sum of values Sum of squared values Sum of values and squared values Total variance of values variance of values
25.5
Number converting
Table 25.4: Name ceil (768) oor (772) frexp (773) Description Round to innity Round to minus innity Return mantissa and exponent
25.6
758
25.7
Hyperbolic functions
Table 25.6: Name arcosh (764) arsinh (767) artanh (767) cosh (769) sinh (796) tanh (800) Description caculate reverse hyperbolic cosine caculate reverse hyperbolic sine caculate reverse hyperbolic tangent calculate hyperbolic cosine calculate hyperbolic sine calculate hyperbolic tangent
25.8
Trigoniometric functions
Table 25.7: Name arccos (763) arcsin (765) arctan2 (766) cotan (770) sincos (795) tan (799) Description calculate reverse cosine calculate reverse sine calculate reverse tangent calculate cotangent calculate sine and cosine calculate tangent
25.9
Routines to convert angles between different angle units. Table 25.8: Name cycletorad (770) degtograd (771) degtorad (771) gradtodeg (774) gradtorad (775) radtocycle (790) radtodeg (791) radtograd (791) Description convert cycles to radians convert degrees to grads convert degrees to radians convert grads to degrees convert grads to radians convert radians to cycles convert radians to degrees convert radians to grads
25.10
Min/max determination
759
Table 25.9: Name max (780) maxIntValue (781) maxvalue (782) min (784) minIntValue (785) minvalue (785) Description Maximum of 2 values Maximum of an array of integer values Maximum of an array of values Minimum of 2 values Minimum of an array of integer values Minimum of an array of values
25.11
25.11.1
EqualsValue = 0 Values are the same GreaterThanValue = (TValueRelationship) First values is greater than second value Infinity = 1.0 / 0.0 Value is innity LessThanValue = (TValueRelationship) First value is less than second value MaxExtended = 1.1e + 4932 Maximum value of extended type MaxFloat = MaxExtended Maximum value of oat type MinExtended = 3.4e - 4932 Minimum value (closest to zero) of extended type MinFloat = MinExtended Minimum value (closest to zero) of oat type NaN = 0.0 / 0.0 Value is Not a Number 760
NegativeValue = (TValueSign) Value is negative NegInfinity = (-1.0) / 0.0 Value is negative (minus) innity PositiveValue = (TValueSign) Value is positive ZeroValue = 0 Value is zero
25.11.2
= -1..1
Types
This document describes the math unit. The math unit was initially written by Florian Klaemp. It provides mathematical functions which arent covered by the system unit. This chapter starts out with a denition of all types and constants that are dened, after which an overview is presented of the available functions, grouped by category, and the last part contains a complete explanation of each function. The following things must be taken into account when using this unit: 1. This unit is compiled in Object Pascal mode so all integers are 32 bit. 2. Some overloaded functions exist for data arrays of integers and oats. When using the address operator (@) to pass an array of data to such a function, make sure the address is typecasted to the right type, or turn on the typed address operator feature. failing to do so, will cause the compiler not be able to decide which function you want to call. = -1..1 This document describes the math unit. The math unit was initially written by Florian Klaemp. It provides mathematical functions which arent covered by the system unit. This chapter starts out with a denition of all types and constants that are dened, after which an overview is presented of the available functions, grouped by category, and the last part contains a complete explanation of each function. The following things must be taken into account when using this unit: 1. This unit is compiled in Object Pascal mode so all integers are 32 bit. 2. Some overloaded functions exist for data arrays of integers and oats. When using the address operator (@) to pass an array of data to such a function, make sure the address is typecasted to the right type, or turn on the typed address operator feature. failing to do so, will cause the compiler not be able to decide which function you want to call. = -37..37 761
This document describes the math unit. The math unit was initially written by Florian Klaemp. It provides mathematical functions which arent covered by the system unit. This chapter starts out with a denition of all types and constants that are dened, after which an overview is presented of the available functions, grouped by category, and the last part contains a complete explanation of each function. The following things must be taken into account when using this unit: 1. This unit is compiled in Object Pascal mode so all integers are 32 bit. 2. Some overloaded functions exist for data arrays of integers and oats. When using the address operator (@) to pass an array of data to such a function, make sure the address is typecasted to the right type, or turn on the typed address operator feature. failing to do so, will cause the compiler not be able to decide which function you want to call. float = extended All calculations are done with the Float type. This allows to recompile the unit with a different oat type to obtain a desired precision. The pointer type PFloat (762) is used in functions that accept an array of values of arbitrary length. PFloat = ^float Pointer to Float (762) type. PInteger = ObjPas.PInteger Pointer to integer type TFPUException = (exInvalidOp,exDenormalized,exZeroDivide,exOverflow, exUnderflow,exPrecision)
Table 25.10: Enumeration values for type TFPUException Value exDenormalized exInvalidOp exOverow exPrecision exUnderow exZeroDivide Explanation Invalid operation error Float overow error Precision error Float underow error Division by zero error.
Type describing Floating Point processor exceptions. TFPUExceptionMask = Set of TFPUException Type to set the Floating Point Unit exception mask. TFPUPrecisionMode = (pmSingle,pmReserved,pmDouble,pmExtended)
762
Table 25.11: Enumeration values for type TFPUPrecisionMode Value pmDouble pmExtended pmReserved pmSingle Explanation Double-type precision Extended-type precision ? Single-type precision
Type describing the default precision for the Floating Point processor. TFPURoundingMode = (rmNearest,rmDown,rmUp,rmTruncate)
Table 25.12: Enumeration values for type TFPURoundingMode Value rmDown rmNearest rmTruncate rmUp Explanation Round to biggest integer smaller than value. Round to nearest integer value Cut off fractional part. Round to smallest integer larger than value.
Type describing the rounding mode for the Floating Point processor. tpaymenttime = (ptendofperiod,ptstartofperiod)
Table 25.13: Enumeration values for type tpaymenttime Value ptendofperiod ptstartofperiod Explanation End of period. Start of period.
25.12
25.12.1
Synopsis: Return inverse cosine Declaration: function arccos(x: float) : float Visibility: default Description: Arccos returns the inverse cosine of its argument x. The argument x should lie between -1 and 1 (borders included). Errors: If the argument x is not in the allowed range, an EInvalidArgument exception is raised.
763
See also: arcsin (765), arcosh (764), arsinh (767), artanh (767) Listing: ./mathex/ex1.pp
Program Example1 ; { Program t o demonstrate t h e arccos f u n c t i o n . } Uses math ; Procedure WriteRadDeg (X : f l o a t ) ; begin W r i t e l n (X : 8 : 5 , rad = , radtodeg ( x ) : 8 : 5 , degrees . ) end ; begin WriteRadDeg WriteRadDeg WriteRadDeg WriteRadDeg WriteRadDeg WriteRadDeg end .
25.12.2
arccosh
Synopsis: Return inverse hyperbolic cosine Declaration: function arccosh(x: float) : float Visibility: default Description: arccosh returns the inverse hyperbolic cosine of its argument x. This function is an alias for arcosh (764), provided for Delphi compatibility. See also: arcosh (764)
25.12.3
arcosh
Synopsis: Return inverse hyperbolic cosine Declaration: function arcosh(x: float) : float Visibility: default Description: Arcosh returns the inverse hyperbolic cosine of its argument x. The argument x should be larger than 1. The arccosh variant of this function is supplied for Delphi compatibility. Errors: If the argument x is not in the allowed range, an EInvalidArgument exception is raised. See also: cosh (769), sinh (796), arcsin (765), arsinh (767), artanh (767), tanh (800) Listing: ./mathex/ex3.pp
764
Program Example3 ; { Program t o demonstrate t h e arcosh f u n c t i o n . } Uses math ; begin W r i t e l n ( arcosh ( 1 ) ) ; W r i t e l n ( arcosh ( 2 ) ) ; end .
25.12.4
arcsin
Synopsis: Return inverse sine Declaration: function arcsin(x: float) : float Visibility: default Description: Arcsin returns the inverse sine of its argument x. The argument x should lie between -1 and 1. Errors: If the argument x is not in the allowed range, an EInvalidArgument exception is raised. See also: arccos (763), arcosh (764), arsinh (767), artanh (767) Listing: ./mathex/ex2.pp
Program Example1 ; { Program t o demonstrate t h e a r c s i n f u n c t i o n . } Uses math ; Procedure WriteRadDeg (X : f l o a t ) ; begin W r i t e l n (X : 8 : 5 , rad = , radtodeg ( x ) : 8 : 5 , degrees . ) end ; begin WriteRadDeg WriteRadDeg WriteRadDeg WriteRadDeg WriteRadDeg WriteRadDeg end .
( ( ( ( ( (
25.12.5
arcsinh
Synopsis: Return inverse hyperbolic sine Declaration: function arcsinh(x: float) : float Visibility: default
765
Description: arcsinh returns the inverse hyperbolic sine of its argument x. This function is an alias for arsinh (767), provided for Delphi compatibility. See also: arsinh (767)
25.12.6
arctan2
Synopsis: Return arctangent of (y/x) Declaration: function arctan2(y: float;x: float) : float Visibility: default Description: arctan2 calculates arctan(y/x), and returns an angle in the correct quadrant. The returned angle will be in the range $-\pi$ to $\pi$ radians. The values of x and y must be between -2\{}64 and 2\{}64, moreover x should be different from zero. On Intel systems this function is implemented with the native intel fpatan instruction. Errors: If x is zero, an overow error will occur. See also: arccos (763), arcosh (764), arsinh (767), artanh (767) Listing: ./mathex/ex6.pp
Program Example6 ; { Program t o demonstrate t h e a r c t a n 2 f u n c t i o n . } Uses math ; Procedure WriteRadDeg (X : f l o a t ) ; begin W r i t e l n (X : 8 : 5 , rad = , radtodeg ( x ) : 8 : 5 , degrees . ) end ; begin WriteRadDeg ( a r c t a n 2 ( 2 , 1 ) ) ; end .
25.12.7
arctanh
Synopsis: Return inverse hyperbolic tangent Declaration: function arctanh(x: float) : float Visibility: default Description: arcsinh returns the inverse hyperbolic tangent of its argument x. This function is an alias for artanh (767), provided for Delphi compatibility. See also: artanh (767)
766
25.12.8
arsinh
Synopsis: Return inverse hyperbolic sine Declaration: function arsinh(x: float) : float Visibility: default Description: arsinh returns the inverse hyperbolic sine of its argument x. The arscsinh variant of this function is supplied for Delphi compatibility. Errors: None. See also: arcosh (764), arccos (763), arcsin (765), artanh (767) Listing: ./mathex/ex4.pp
Program Example4 ; { Program t o demonstrate t h e a r s i n h f u n c t i o n . } Uses math ; begin Writeln ( arsinh ( 0 ) ) ; Writeln ( arsinh ( 1 ) ) ; end .
25.12.9
artanh
Synopsis: Return inverse hyperbolic tangent Declaration: function artanh(x: float) : float Visibility: default Description: artanh returns the inverse hyperbolic tangent of its argument x, where x should lie in the interval [-1,1], borders included. The arctanh variant of this function is supplied for Delphi compatibility. Errors: In case x is not in the interval [-1,1], an EInvalidArgument exception is raised. See also: arcosh (764), arccos (763), arcsin (765), artanh (767) Listing: ./mathex/ex5.pp
Program Example5 ; { Program t o demonstrate t h e a r t a n h f u n c t i o n . } Uses math ; begin Writeln ( artanh ( 0 ) ) ; Writeln ( artanh ( 0 . 5 ) ) ; end .
767
25.12.10
ceil
Synopsis: Return the lowest integer number greater than or equal to argument Declaration: function ceil(x: float) : Integer Visibility: default Description: Ceil returns the lowest integer number greater than or equal to x. The absolute value of x should be less than maxint. Errors: If the asolute value of x is larger than maxint, an overow error will occur. See also: oor (772) Listing: ./mathex/ex7.pp
Program Example7 ; { Program t o demonstrate t h e C e i l f u n c t i o n . } Uses math ; begin W r i t e l n ( C e i l ( 3 . 7 ) ) ; / / should be 3 Writeln ( C e i l ( 3 . 7 ) ) ; / / should be 4 W r i t e l n ( C e i l ( 4 . 0 ) ) ; / / should be 4 end .
25.12.11
ClearExceptions
Synopsis: Clear Floating Point Unit exceptions Declaration: procedure ClearExceptions(RaisePending: Boolean) Visibility: default Description: Clear Floating Point Unit exceptions
25.12.12
CompareValue
Synopsis: Compare 2 values Declaration: function CompareValue(const A: Integer;const B: Integer) : TValueRelationship function CompareValue(const A: Int64;const B: Int64) : TValueRelationship function CompareValue(const A: QWord;const B: QWord) : TValueRelationship function CompareValue(const A: Extended;const B: Extended; delta: Extended) : TValueRelationship Visibility: default Description: CompareValue compares 2 integer or oating point values A and B and returns one of the following values: -1if A<B 768
25.12.13
cosecant
Synopsis: Calculate cosecant Declaration: function cosecant(x: float) : float Visibility: default Description: cosecant calculates the cosecant (1/sin(x)) of its argument x. Errors: If 0 or 180 degrees is specied, an exception will be raised. See also: secant (794)
25.12.14
cosh
Synopsis: Return hyperbolic cosine Declaration: function cosh(x: float) : float Visibility: default Description: Cosh returns the hyperbolic cosine of its argument {x}. Errors: None. See also: arcosh (764), sinh (796), arsinh (767) Listing: ./mathex/ex8.pp
Program Example8 ; { Program t o demonstrate t h e cosh f u n c t i o n . } Uses math ; begin W r i t e l n ( Cosh ( 0 ) ) ; W r i t e l n ( Cosh ( 1 ) ) ; end .
25.12.15
cot
Synopsis: Alias for Cotan Declaration: function cot(x: float) : float Visibility: default Description: cot is an alias for the cotan (770) function. See also: cotan (770) 769
25.12.16
cotan
Synopsis: Return cotangent Declaration: function cotan(x: float) : float Visibility: default Description: Cotan returns the cotangent of its argument x. The argument x must be in radians. x should be different from zero. Errors: If x is zero then a overow error will occur. See also: tanh (800) Listing: ./mathex/ex9.pp
Program Example9 ; { Program t o demonstrate t h e cotan f u n c t i o n . } Uses math ; begin w r i t e l n ( cotan ( p i / 2 ) ) ; W r i t e l n ( cotan ( p i / 3 ) ) ; W r i t e l n ( cotan ( p i / 4 ) ) ; end .
25.12.17
csc
Synopsis: Alias for cosecant Declaration: function csc(x: float) : float Visibility: default Description: csc is an alias for the cosecant (769) function. See also: cosecant (769)
25.12.18
cycletorad
Synopsis: Convert cycle angle to radians angle Declaration: function cycletorad(cycle: float) : float Visibility: default Description: Cycletorad transforms its argument cycle (an angle expressed in cycles) to radians. (1 cycle is $2 \pi$ radians). Errors: None. See also: degtograd (771), degtorad (771), radtodeg (791), radtograd (791), radtocycle (790) Listing: ./mathex/ex10.pp
770
Program Example10 ; { Program t o demonstrate t h e c y c l e t o r a d f u n c t i o n . } Uses math ; begin w r i t e l n ( cos ( c y c l e t o r a d ( 1 / 6 ) ) ) ; / / Should p r i n t 1 / 2 w r i t e l n ( cos ( c y c l e t o r a d ( 1 / 8 ) ) ) ; / / should be s q r t ( 2 ) / 2 end .
25.12.19
degtograd
Synopsis: Convert degree angle to grads angle Declaration: function degtograd(deg: float) : float Visibility: default Description: Degtograd transforms its argument deg (an angle in degrees) to grads. (90 degrees is 100 grad.) Errors: None. See also: cycletorad (770), degtorad (771), radtodeg (791), radtograd (791), radtocycle (790) Listing: ./mathex/ex11.pp
Program Example11 ; { Program t o demonstrate t h e degtograd f u n c t i o n . } Uses math ; begin w r i t e l n ( degtograd ( 9 0 ) ) ; w r i t e l n ( degtograd ( 1 8 0 ) ) ; w r i t e l n ( degtograd ( 2 7 0 ) ) end .
25.12.20
degtorad
Synopsis: Convert degree angle to radians angle. Declaration: function degtorad(deg: float) : float Visibility: default Description: Degtorad converts its argument deg (an angle in degrees) to radians. (pi radians is 180 degrees) Errors: None. See also: cycletorad (770), degtograd (771), radtodeg (791), radtograd (791), radtocycle (790) Listing: ./mathex/ex12.pp
771
Program Example12 ; { Program t o demonstrate t h e degtorad f u n c t i o n . } Uses math ; begin w r i t e l n ( degtorad ( 4 5 ) ) ; w r i t e l n ( degtorad ( 9 0 ) ) ; w r i t e l n ( degtorad ( 1 8 0 ) ) ; w r i t e l n ( degtorad ( 2 7 0 ) ) ; w r i t e l n ( degtorad ( 3 6 0 ) ) ; end .
25.12.21
DivMod
Synopsis: Return DIV and MOD of arguments Declaration: procedure DivMod(Dividend: Integer;Divisor: Word;var Result: Word; var Remainder: Word) procedure DivMod(Dividend: Integer;Divisor: Word;var Result: SmallInt; var Remainder: SmallInt) procedure DivMod(Dividend: DWord;Divisor: DWord;var Result: DWord; var Remainder: DWord) procedure DivMod(Dividend: Integer;Divisor: Integer;var Result: Integer; var Remainder: Integer) Visibility: default Description: DivMod returns Dividend DIV Divisor in Result, and Dividend MOD Divisor in Remainder
25.12.22
EnsureRange
Synopsis: Change value to it falls in specied range. Declaration: function EnsureRange(const AValue: Integer;const AMin: Integer; const AMax: Integer) : Integer; Overload function EnsureRange(const AValue: Int64;const AMin: Int64; const AMax: Int64) : Int64; Overload Visibility: default Description: EnsureRange returns Value if AValue is in the range AMin..AMax. It returns AMin if the value is less than AMin, or AMax if the value is larger than AMax. See also: InRange (776)
25.12.23
oor
Synopsis: Return the largest integer smaller than or equal to argument Declaration: function floor(x: float) : Integer Visibility: default 772
Description: Floor returns the largest integer smaller than or equal to x. The absolute value of x should be less than maxint. Errors: If x is larger than maxint, an overow will occur. See also: ceil (768) Listing: ./mathex/ex13.pp
Program Example13 ; { Program t o demonstrate t h e f l o o r f u n c t i o n . } Uses math ; begin W r i t e l n ( C e i l ( 3 . 7 ) ) ; / / should be 4 Writeln ( C e i l ( 3 . 7 ) ) ; / / should be 3 W r i t e l n ( C e i l ( 4 . 0 ) ) ; / / should be 4 end .
25.12.24
Frexp
Synopsis: Return mantissa and exponent. Declaration: procedure Frexp(X: float;var Mantissa: float;var Exponent: Integer) Visibility: default Description: Frexp returns the mantissa and exponent of its argument x in mantissa and exponent. Errors: None Listing: ./mathex/ex14.pp
Program Example14 ; { Program t o demonstrate t h e f r e x p f u n c t i o n . } Uses math ; Procedure d o f r e x p ( Const X : extended ) ; var man : extended ; exp : l o n g i n t ; begin man : = 0 ; exp : = 0 ; f r e x p ( x , man , exp ) ; w r i t e ( x , has ) ; W r i t e l n ( mantissa ,man , and exponent , exp ) ; end ;
773
d o f r e x p ( 1 . 0 3 e 2); d o f r e x p ( 1 . 0 2 e1 ) ; d o f r e x p ( 1 . 0 3 e2 ) ; end .
25.12.25
GetExceptionMask
Synopsis: Get the Floating Point Unit exception mask. Declaration: function GetExceptionMask : TFPUExceptionMask Visibility: default Description: Get the Floating Point Unit exception mask.
25.12.26
GetPrecisionMode
Synopsis: Return the Floating Point Unit precision mode. Declaration: function GetPrecisionMode : TFPUPrecisionMode Visibility: default Description: Return the Floating Point Unit precision mode.
25.12.27
GetRoundMode
Synopsis: Return the Floating Point Unit rounding mode. Declaration: function GetRoundMode : TFPURoundingMode Visibility: default Description: Return the Floating Point Unit rounding mode.
25.12.28
gradtodeg
Synopsis: Convert grads angle to degrees angle Declaration: function gradtodeg(grad: float) : float Visibility: default Description: Gradtodeg converts its argument grad (an angle in grads) to degrees. (100 grad is 90 degrees) Errors: None. See also: cycletorad (770), degtograd (771), radtodeg (791), radtograd (791), radtocycle (790), gradtorad (775) Listing: ./mathex/ex15.pp
774
Program Example15 ; { Program t o demonstrate t h e gradtodeg f u n c t i o n . } Uses math ; begin w r i t e l n ( gradtodeg ( 1 0 0 ) ) ; w r i t e l n ( gradtodeg ( 2 0 0 ) ) ; w r i t e l n ( gradtodeg ( 3 0 0 ) ) ; end .
25.12.29
gradtorad
Synopsis: Convert grads angle to radians angle Declaration: function gradtorad(grad: float) : float Visibility: default Description: Gradtorad converts its argument grad (an angle in grads) to radians. (200 grad is pi degrees). Errors: None. See also: cycletorad (770), degtograd (771), radtodeg (791), radtograd (791), radtocycle (790), gradtodeg (774) Listing: ./mathex/ex16.pp
Program Example16 ; { Program t o demonstrate t h e g r a d t o r a d f u n c t i o n . } Uses math ; begin writeln ( gradtorad ( 1 0 0 ) ) ; writeln ( gradtorad ( 2 0 0 ) ) ; writeln ( gradtorad ( 3 0 0 ) ) ; end .
25.12.30
hypot
Synopsis: Return hypotenuse of triangle Declaration: function hypot(x: float;y: float) : float Visibility: default Description: Hypot returns the hypotenuse of the triangle where the sides adjacent to the square angle have lengths x and y. The function uses Pythagoras rule for this. Errors: None. Listing: ./mathex/ex17.pp
775
Program Example17 ; { Program t o demonstrate t h e hypot f u n c t i o n . } Uses math ; begin W r i t e l n ( hypot ( 3 , 4 ) ) ; / / should be 5 end .
25.12.31
ifthen
Synopsis: Return one of two values, depending on a boolean condition Declaration: function ifthen(val: Boolean;const iftrue: Integer; const iffalse: Integer) : Integer; Overload function ifthen(val: Boolean;const iftrue: Int64;const iffalse: Int64) : Int64; Overload function ifthen(val: Boolean;const iftrue: Double;const iffalse: Double) : Double; Overload Visibility: default Description: ifthen returns iftrue if val is True, and iffalse if val is False. This function can be used in expressions.
25.12.32
InRange
Synopsis: Check whether value is in range. Declaration: function InRange(const AValue: Integer;const AMin: Integer; const AMax: Integer) : Boolean; Overload function InRange(const AValue: Int64;const AMin: Int64; const AMax: Int64) : Boolean; Overload Visibility: default Description: InRange returns True if AValue is in the range AMin..AMax. It returns False if Value lies outside the specied range. See also: EnsureRange (772)
25.12.33
intpower
Synopsis: Return integer power. Declaration: function intpower(base: float;const exponent: Integer) : float Visibility: default Description: Intpower returns base to the power exponent, where exponent is an integer value. Errors: If base is zero and the exponent is negative, then an overow error will occur. See also: power (790) 776
Listing: ./mathex/ex18.pp
Program Example18 ; { Program t o demonstrate t h e i n t p o w e r f u n c t i o n . } Uses math ; Procedure DoIntpower ( X : extended ; Pow : I n t e g e r ) ; begin w r i t e l n (X : 8 : 4 , ^ ,Pow : 2 , = , i n t p o w e r ( X , pow ) : 8 : 4 ) ; end ; begin d o i n t p o w er ( 0 . 0 , 0 ) ; d o i n t p o w er ( 1 . 0 , 0 ) ; d o i n t p o w er ( 2 . 0 , 5 ) ; d o i n t p o w er ( 4 . 0 , 3 ) ; d o i n t p o w er ( 2 . 0 , 1 ) ; d o i n t p o w er ( 2 . 0 , 2 ) ; d o i n t p o w er ( 2 . 0 , 4 ) ; d o i n t p o w er ( 4 . 0 , 3 ) ; end .
25.12.34
IsInnite
Synopsis: Check whether value is innite Declaration: function IsInfinite(const d: Double) : Boolean Visibility: default Description: IsInfinite returns True if the double d contains the innite value. See also: IsZero (777), IsInnite (777)
25.12.35
IsNan
Synopsis: Check whether value is Not a Number Declaration: function IsNan(const d: Single) : Boolean; Overload function IsNan(const d: Extended) : Boolean; Overload Visibility: default Description: IsNan returns True if the double d contains Not A Number (a value which cannot be represented correctly in double format). See also: IsZero (777), IsInnite (777)
25.12.36
IsZero
777
Declaration: function IsZero(const A: Single;Epsilon: Single) : Boolean; Overload function IsZero(const A: Single) : Boolean; Overload function IsZero(const A: Extended;Epsilon: Extended) : Boolean ; Overload function IsZero(const A: Extended) : Boolean; Overload Visibility: default Description: IsZero checks whether the oat value A is zero, up to a precision of Epsilon. It returns True if Abs(A) is less than Epsilon. The default value for Epsilon depends on the type of the argument: it is 1E-4 for Single, 1E-12 for Double and 1E-16 for extended. See also: IsNan (777), IsInnite (777), SameValue (793)
25.12.37
ldexp
Synopsis: Return (2 to the power p) times x Declaration: function ldexp(x: float;const p: Integer) : float Visibility: default Description: Ldexp returns (2 to the power p) times x. Errors: None. See also: lnxp1 (778), log10 (779), log2 (779), logn (780) Listing: ./mathex/ex19.pp
Program Example19 ; { Program t o demonstrate t h e l d e x p f u n c t i o n . } Uses math ; begin writeln ( ldexp ( 2 , 4 ) : 8 : 4 ) ; writeln ( ldexp ( 0 . 5 , 3 ) : 8 : 4 ) ; end .
25.12.38
lnxp1
Synopsis: Return natural logarithm of 1+X Declaration: function lnxp1(x: float) : float Visibility: default Description: Lnxp1 returns the natural logarithm of 1+X. The result is more precise for small values of x. x should be larger than -1. Errors: If $x\leq -1$ then an EInvalidArgument exception will be raised. See also: ldexp (778), log10 (779), log2 (779), logn (780)
778
Listing: ./mathex/ex20.pp
Program Example20 ; { Program t o demonstrate t h e l n x p 1 f u n c t i o n . } Uses math ; begin writeln ( lnxp1 ( 0 ) ) ; writeln ( lnxp1 ( 0 . 5 ) ) ; writeln ( lnxp1 ( 1 ) ) ; end .
25.12.39
log10
Synopsis: Return 10-Based logarithm. Declaration: function log10(x: float) : float Visibility: default Description: Log10 returns the 10-base logarithm of X. Errors: If x is less than or equal to 0 an invalid fpu operation error will occur. See also: ldexp (778), lnxp1 (778), log2 (779), logn (780) Listing: ./mathex/ex21.pp
Program Example21 ; { Program t o demonstrate t h e log10 f u n c t i o n . } Uses math ; begin W r i t e l n ( Log10 ( 1 0 ) : 8 : 4 ) ; W r i t e l n ( Log10 ( 1 0 0 ) : 8 : 4 ) ; W r i t e l n ( Log10 ( 1 0 0 0 ) : 8 : 4 ) ; W r i t e l n ( Log10 ( 1 ) : 8 : 4 ) ; W r i t e l n ( Log10 ( 0 . 1 ) : 8 : 4 ) ; W r i t e l n ( Log10 ( 0 . 0 1 ) : 8 : 4 ) ; W r i t e l n ( Log10 ( 0 . 0 0 1 ) : 8 : 4 ) ; end .
25.12.40
log2
Synopsis: Return 2-based logarithm Declaration: function log2(x: float) : float Visibility: default Description: Log2 returns the 2-base logarithm of X. Errors: If x is less than or equal to 0 an invalid fpu operation error will occur. 779
See also: ldexp (778), lnxp1 (778), log10 (779), logn (780) Listing: ./mathex/ex22.pp
Program Example22 ; { Program t o demonstrate t h e l o g 2 f u n c t i o n . } Uses math ; begin W r i t e l n ( Log2 ( 2 ) : 8 : 4 ) ; W r i t e l n ( Log2 ( 4 ) : 8 : 4 ) ; W r i t e l n ( Log2 ( 8 ) : 8 : 4 ) ; W r i t e l n ( Log2 ( 1 ) : 8 : 4 ) ; W r i t e l n ( Log2 ( 0 . 5 ) : 8 : 4 ) ; W r i t e l n ( Log2 ( 0 . 2 5 ) : 8 : 4 ) ; W r i t e l n ( Log2 ( 0 . 1 2 5 ) : 8 : 4 ) ; end .
25.12.41
logn
Synopsis: Return N-based logarithm. Declaration: function logn(n: float;x: float) : float Visibility: default Description: Logn returns the n-base logarithm of X. Errors: If x is less than or equal to 0 an invalid fpu operation error will occur. See also: ldexp (778), lnxp1 (778), log10 (779), log2 (779) Listing: ./mathex/ex23.pp
Program Example23 ; { Program t o demonstrate t h e l o g n f u n c t i o n . } Uses math ; begin W r i t e l n ( Logn ( 3 , 4 ) : 8 : 4 ) ; W r i t e l n ( Logn ( 2 , 4 ) : 8 : 4 ) ; W r i t e l n ( Logn ( 6 , 9 ) : 8 : 4 ) ; W r i t e l n ( Logn ( exp ( 1 ) , exp ( 1 ) ) : 8 : 4 ) ; W r i t e l n ( Logn ( 0 . 5 , 1 ) : 8 : 4 ) ; W r i t e l n ( Logn ( 0 . 2 5 , 3 ) : 8 : 4 ) ; W r i t e l n ( Logn ( 0 . 1 2 5 , 5 ) : 8 : 4 ) ; end .
25.12.42
Max
780
Declaration: function Max(a: Integer;b: Integer) : Integer; Overload function Max(a: Int64;b: Int64) : Int64; Overload function Max(a: Extended;b: Extended) : Extended; Overload Visibility: default Description: Max returns the maximum of Int1 and Int2. Errors: None. See also: min (784), maxIntValue (781), maxvalue (782) Listing: ./mathex/ex24.pp
Program Example24 ; { Program t o demonstrate t h e max f u n c t i o n . } Uses math ; Var A,B : Cardinal ; begin A: = 1 ; b : = 2 ; w r i t e l n ( max ( a , b ) ) ; end .
25.12.43
MaxIntValue
Synopsis: Return largest element in integer array Declaration: function MaxIntValue(const Data: Array of Integer) : Integer Visibility: default Description: MaxIntValue returns the largest integer out of the Data array. This function is provided for Delphi compatibility, use the maxvalue (782) function instead. Errors: None. See also: maxvalue (782), minvalue (785), minIntValue (785) Listing: ./mathex/ex25.pp
Program Example25 ; { Program t o demonstrate t h e MaxIntValue f u n c t i o n . } { Make sore i n t e g e r i s 3 2 b i t } { $mode o b j f p c } Uses math ; Type TExArray = Array [ 1 . . 1 0 0 ] of I n t e g e r ; Var
781
I : Integer ; ExArray : TExArray ; begin Randomize ; f o r I : = low ( e x a r r a y ) to high ( e x a r r a y ) do ExArray [ i ] : = Random( I )Random( 1 0 0 ) ; W r i t e l n ( MaxIntValue ( ExArray ) ) ; end .
25.12.44
Declaration: function function function function Visibility: default
maxvalue
maxvalue(const maxvalue(const maxvalue(const maxvalue(const data: data: data: data: Array of Extended) : Extended PExtended;const N: Integer) : Extended Array of Integer) : Integer PInteger;const N: Integer) : Integer
Description: Maxvalue returns the largest value in the data array with integer or oat values. The return value has the same type as the elements of the array. The third and fourth forms accept a pointer to an array of N integer or oat values. Errors: None. See also: maxIntValue (781), minvalue (785), minIntValue (785) Listing: ./mathex/ex26.pp
program Example26 ; { Program t o demonstrate t h e MaxValue f u n c t i o n . } { Make sore i n t e g e r i s 3 2 b i t } { $mode o b j f p c } uses math ; var i : 1 . . 1 0 0 ; f _ a r r a y : array [ 1 . . 1 0 0 ] of F l o a t ; i _ a r r a y : array [ 1 . . 1 0 0 ] of I n t e g e r ; Pf_array : P f l o a t ; PI_array : Pinteger ; begin randomize ; P f _ a r r a y : = @f_array [ 1 ] ; P i _ a r r a y : = @i_array [ 1 ] ; f o r i : = low ( f _ a r r a y ) to high ( f _ a r r a y ) do f _ a r r a y [ i ] : = ( randomrandom ) 1 0 0 ; f o r i : = low ( i _ a r r a y ) to high ( i _ a r r a y ) do i _ a r r a y [ i ] : = random ( I )random ( 1 0 0 ) ;
782
: : : :
25.12.45
mean
Synopsis: Return mean value of array Declaration: function mean(const data: Array of Extended) : float function mean(const data: PExtended;const N: LongInt) : float Visibility: default Description: Mean returns the average value of data. The second form accepts a pointer to an array of N values. Errors: None. See also: meanandstddev (783), momentskewkurtosis (786), sum (797) Listing: ./mathex/ex27.pp
Program Example27 ; { Program t o demonstrate t h e Mean f u n c t i o n . } Uses math ; Type TExArray = Array [ 1 . . 1 0 0 ] of F l o a t ; Var I : Integer ; ExArray : TExArray ; begin Randomize ; f o r I : = low ( ExArray ) to high ( ExArray ) do ExArray [ i ] : = ( RandomRandom) 1 0 0 ; W r i t e l n ( Max : , MaxValue ( ExArray ) : 8 : 4 ) ; W r i t e l n ( Min : , MinValue ( ExArray ) : 8 : 4 ) ; W r i t e l n ( Mean : ,Mean ( ExArray ) : 8 : 4 ) ; W r i t e l n ( Mean ( b ) : ,Mean ( @ExArray [ 1 ] , 1 0 0 ) : 8 : 4 ) ; end .
25.12.46
meanandstddev
Synopsis: Return mean and standard deviation of array Declaration: procedure meanandstddev(const data: Array of Extended;var mean: float; var stddev: float) procedure meanandstddev(const data: PExtended;const N: LongInt; var mean: float;var stddev: float) Visibility: default 783
Description: meanandstddev calculates the mean and standard deviation of data and returns the result in mean and stddev, respectively. Stddev is zero if there is only one value. The second form accepts a pointer to an array of N values. Errors: None. See also: mean (783), sum (797), sumofsquares (798), momentskewkurtosis (786) Listing: ./mathex/ex28.pp
Program Example28 ; { Program t o demonstrate t h e Meanandstddev f u n c t i o n . } Uses math ; Type TExArray = Array [ 1 . . 1 0 0 ] of Extended ; Var I : Integer ; ExArray : TExArray ; Mean , stddev : Extended ; begin Randomize ; f o r I : = low ( ExArray ) to high ( ExArray ) do ExArray [ i ] : = ( RandomRandom) 1 0 0 ; MeanAndStdDev ( ExArray , Mean , StdDev ) ; W r i t e l n ( Mean : ,Mean : 8 : 4 ) ; W r i t e l n ( StdDev : , StdDev : 8 : 4 ) ; MeanAndStdDev ( @ExArray [ 1 ] , 1 0 0 , Mean , StdDev ) ; W r i t e l n ( Mean ( b ) : ,Mean : 8 : 4 ) ; W r i t e l n ( StdDev ( b ) : , StdDev : 8 : 4 ) ; end .
25.12.47
Min
Synopsis: Return smallest of two values. Declaration: function Min(a: Integer;b: Integer) : Integer; Overload function Min(a: Int64;b: Int64) : Int64; Overload function Min(a: Extended;b: Extended) : Extended; Overload Visibility: default Description: min returns the smallest value of Int1 and Int2; Errors: None. See also: max (780) Listing: ./mathex/ex29.pp
Program Example29 ; { Program t o demonstrate t h e min f u n c t i o n . }
784
25.12.48
MinIntValue
Synopsis: Return smallest value in integer array Declaration: function MinIntValue(const Data: Array of Integer) : Integer Visibility: default Description: MinIntvalue returns the smallest value in the Data array. This function is provided for Delphi compatibility, use minvalue instead. Errors: None See also: minvalue (785), maxIntValue (781), maxvalue (782) Listing: ./mathex/ex30.pp
Program Example30 ; { Program t o demonstrate t h e M i n I n t V a l u e f u n c t i o n . } { Make sore i n t e g e r i s 3 2 b i t } { $mode o b j f p c } Uses math ; Type TExArray = Array [ 1 . . 1 0 0 ] of I n t e g e r ; Var I : Integer ; ExArray : TExArray ; begin Randomize ; f o r I : = low ( ExArray ) to high ( ExArray ) do ExArray [ i ] : = Random( I )Random( 1 0 0 ) ; W r i t e l n ( M i n I n t V a l u e ( ExArray ) ) ; end .
25.12.49
minvalue
785
Array of Extended) : Extended PExtended;const N: Integer) : Extended Array of Integer) : Integer PInteger;const N: Integer) : Integer
Description: Minvalue returns the smallest value in the data array with integer or oat values. The return value has the same type as the elements of the array. The third and fourth forms accept a pointer to an array of N integer or oat values. Errors: None. See also: maxIntValue (781), maxvalue (782), minIntValue (785) Listing: ./mathex/ex31.pp
program Example31 ; { Program t o demonstrate t h e MinValue f u n c t i o n . } { Make sure i n t e g e r i s 3 2 b i t } { $mode o b j f p c } uses math ; var i : 1 . . 1 0 0 ; f _ a r r a y : array [ 1 . . 1 0 0 ] of F l o a t ; i _ a r r a y : array [ 1 . . 1 0 0 ] of I n t e g e r ; Pf_array : P f l o a t ; PI_array : Pinteger ; begin randomize ; P f _ a r r a y : = @f_array [ 1 ] ; P i _ a r r a y : = @i_array [ 1 ] ; f o r i : = low ( f _ a r r a y ) to high ( f _ a r r a y ) do f _ a r r a y [ i ] : = ( randomrandom ) 1 0 0 ; f o r i : = low ( i _ a r r a y ) to high ( i _ a r r a y ) do i _ a r r a y [ i ] : = random ( I )random ( 1 0 0 ) ; Writeln ( Writeln ( Writeln ( Writeln ( end . Min Min Min Min Float Float (b ) Integer Integer ( b ) : : : : , MinValue ( f _ a r r a y ) : 8 : 4 ) ; , MinValue ( P f _ a r r a y , 1 0 0 ) : 8 : 4 ) ; , MinValue ( i _ a r r a y ) : 8 ) ; , MinValue ( P i _ a r r a y , 1 0 0 ) : 8 ) ;
25.12.50
momentskewkurtosis
Synopsis: Return 4 rst moments of distribution Declaration: procedure momentskewkurtosis(const data: Array of Extended; out m1: float;out m2: float;out m3: float; out m4: float;out skew: float; out kurtosis: float) 786
procedure momentskewkurtosis(const data: PExtended;const N: Integer; out m1: float;out m2: float;out m3: float; out m4: float;out skew: float; out kurtosis: float) Visibility: default Description: momentskewkurtosis calculates the 4 rst moments of the distribution of valuesin data and returns them in m1,m2,m3 and m4, as well as the skew and kurtosis. Errors: None. See also: mean (783), meanandstddev (783) Listing: ./mathex/ex32.pp
program Example32 ; { Program t o demonstrate t h e momentskewkurtosis f u n c t i o n . } uses math ; var d i s t a r r a y : array [ 1 . . 1 0 0 0 ] of f l o a t ; I : longint ; m1, m2, m3, m4, skew , k u r t o s i s : f l o a t ; begin randomize ; f o r I : = low ( d i s t a r r a y ) to high ( d i s t a r r a y ) do d i s t a r r a y [ i ] : = random ; momentskewkurtosis ( D i s t A r r a y , m1, m2, m3, m4, skew , k u r t o s i s ) ; Writeln Writeln Writeln Writeln Writeln Writeln end . ( ( ( ( ( ( 1 s t moment 2nd moment 3 r d moment 4 t h moment Skew kurtosis : : : : : : ,m1 : 8 : 6 ) ; ,m2 : 8 : 6 ) ; ,m3 : 8 : 6 ) ; ,m4 : 8 : 6 ) ; , skew : 8 : 6 ) ; , kurtosis :8:6);
25.12.51
norm
Synopsis: Return Euclidian norm Declaration: function norm(const data: Array of Extended) : float function norm(const data: PExtended;const N: Integer) : float Visibility: default Description: Norm calculates the Euclidian norm of the array of data. This equals sqrt(sumofsquares(data)). The second form accepts a pointer to an array of N values. Errors: None. See also: sumofsquares (798) Listing: ./mathex/ex33.pp 787
program Example33 ; { Program t o demonstrate t h e norm f u n c t i o n . } uses math ; var v : array [ 1 . . 1 0 ] of F l o a t ; I :1..10; begin f o r I : = low ( v ) to high ( v ) do v [ i ] : = random ; w r i t e l n ( norm ( v ) ) ; end .
25.12.52
Declaration: operator operator **(float, float): float(bas: float;expo: float) : float Visibility: default
25.12.53
Declaration: operator operator **(Int64, Int64): Int64(bas: Int64;expo: Int64) : Int64 Visibility: default
25.12.54
popnstddev
Synopsis: Return population variance Declaration: function popnstddev(const data: Array of Extended) : float function popnstddev(const data: PExtended;const N: Integer) : float Visibility: default Description: Popnstddev returns the square root of the population variance of the values in the Data array. It returns zero if there is only one value. The second form of this function accepts a pointer to an array of N values. Errors: None. See also: popnvariance (789), mean (783), meanandstddev (783), stddev (796), momentskewkurtosis (786) Listing: ./mathex/ex35.pp
Program Example35 ; { Program t o demonstrate t h e PopnStdDev f u n c t i o n . } Uses Math ; Type
788
TExArray = Array [ 1 . . 1 0 0 ] of F l o a t ; Var I : Integer ; ExArray : TExArray ; begin Randomize ; f o r I : = low ( ExArray ) to high ( ExArray ) do ExArray [ i ] : = ( RandomRandom) 1 0 0 ; W r i t e l n ( Max : , MaxValue ( ExArray ) : 8 : 4 ) ; W r i t e l n ( Min : , MinValue ( ExArray ) : 8 : 4 ) ; W r i t e l n ( Pop . stddev . : , PopnStdDev ( ExArray ) : 8 : 4 ) ; W r i t e l n ( Pop . stddev . ( b ) : , PopnStdDev ( @ExArray [ 1 ] , 1 0 0 ) : 8 : 4 ) ; end .
25.12.55
popnvariance
Synopsis: Return population variance Declaration: function popnvariance(const data: PExtended;const N: Integer) : float function popnvariance(const data: Array of Extended) : float Visibility: default Description: Popnvariance the population variance of the values in the Data array. It returns zero if there is only one value. The second form of this function accepts a pointer to an array of N values. Errors: None. See also: popnstddev (788), mean (783), meanandstddev (783), stddev (796), momentskewkurtosis (786) Listing: ./mathex/ex36.pp
Program Example36 ; { Program t o demonstrate t h e PopnVariance f u n c t i o n . } Uses math ; Var I : Integer ; ExArray : Array [ 1 . . 1 0 0 ] of F l o a t ; begin Randomize ; f o r I : = low ( ExArray ) to high ( ExArray ) do ExArray [ i ] : = ( RandomRandom) 1 0 0 ; W r i t e l n ( Max : , MaxValue ( ExArray ) : 8 : 4 ) ; W r i t e l n ( Min : , MinValue ( ExArray ) : 8 : 4 ) ; W r i t e l n ( Pop . v a r . : , PopnVariance ( ExArray ) : 8 : 4 ) ; W r i t e l n ( Pop . v a r . ( b ) : , PopnVariance ( @ExArray [ 1 ] , 1 0 0 ) : 8 : 4 ) ; end .
789
25.12.56
power
Synopsis: Return real power. Declaration: function power(base: float;exponent: float) : float Visibility: default Description: power raises base to the power power. This is equivalent to exp(power*ln(base)). Therefore base should be non-negative. Errors: None. See also: intpower (776) Listing: ./mathex/ex34.pp
Program Example34 ; { Program t o demonstrate t h e power f u n c t i o n . } Uses Math ; procedure dopower ( x , y : f l o a t ) ; begin w r i t e l n ( x : 8 : 6 , ^ , y : 8 : 6 , = , power ( x , y ) : 8 : 6 ) end ; begin dopower ( 2 , 2 ) ; dopower ( 2 , 2 ) ; dopower ( 2 , 0 . 0 ) ; end .
25.12.57
radtocycle
Synopsis: Convert radians angle to cycle angle Declaration: function radtocycle(rad: float) : float Visibility: default Description: Radtocycle converts its argument rad (an angle expressed in radians) to an angle in cycles. (1 cycle equals 2 pi radians) Errors: None. See also: degtograd (771), degtorad (771), radtodeg (791), radtograd (791), cycletorad (770) Listing: ./mathex/ex37.pp
Program Example37 ; { Program t o demonstrate t h e r a d t o c y c l e f u n c t i o n . } Uses math ; begin
790
25.12.58
radtodeg
Synopsis: Convert radians angle to degrees angle Declaration: function radtodeg(rad: float) : float Visibility: default Description: Radtodeg converts its argument rad (an angle expressed in radians) to an angle in degrees. (180 degrees equals pi radians) Errors: None. See also: degtograd (771), degtorad (771), radtocycle (790), radtograd (791), cycletorad (770) Listing: ./mathex/ex38.pp
Program Example38 ; { Program t o demonstrate t h e radtodeg f u n c t i o n . } Uses math ; begin w r i t e l n ( radtodeg (2 p i ) : 8 : 6 ) ; w r i t e l n ( radtodeg ( p i ) : 8 : 6 ) ; w r i t e l n ( radtodeg ( p i / 2 ) : 8 : 6 ) ; end .
25.12.59
radtograd
Synopsis: Convert radians angle to grads angle Declaration: function radtograd(rad: float) : float Visibility: default Description: Radtodeg converts its argument rad (an angle expressed in radians) to an angle in grads. (200 grads equals pi radians) Errors: None. See also: degtograd (771), degtorad (771), radtocycle (790), radtodeg (791), cycletorad (770) Listing: ./mathex/ex39.pp
Program Example39 ; { Program t o demonstrate t h e r a d t o g r a d f u n c t i o n . } Uses math ;
791
25.12.60
randg
Synopsis: Return gaussian distributed random number. Declaration: function randg(mean: float;stddev: float) : float Visibility: default Description: randg returns a random number which - when produced in large quantities - has a Gaussian distribution with mean mean and standarddeviation stddev. Errors: None. See also: mean (783), stddev (796), meanandstddev (783) Listing: ./mathex/ex40.pp
Program Example40 ; { Program t o demonstrate t h e randg f u n c t i o n . } Uses Math ; Var I : Integer ; ExArray : Array [ 1 . . 1 0 0 0 0 ] of F l o a t ; ; Mean , stddev : F l o a t ; begin Randomize ; f o r I : = low ( ExArray ) to high ( ExArray ) do ExArray [ i ] : = Randg ( 1 , 0 . 2 ) ; MeanAndStdDev ( ExArray , Mean , StdDev ) ; W r i t e l n ( Mean : ,Mean : 8 : 4 ) ; W r i t e l n ( StdDev : , StdDev : 8 : 4 ) ; end .
25.12.61
RandomFrom
Synopsis: Return a random element of an array of numbers Declaration: function RandomFrom(const AValues: Array of Double) : Double; Overload function RandomFrom(const AValues: Array of Integer) : Integer ; Overload function RandomFrom(const AValues: Array of Int64) : Int64; Overload Visibility: default Description: RandomFrom returns a random element from the array AValues. The return value has the same type as the type of the array elements. See also: #rtl.system.Random (1378), RandomRange (793) 792
25.12.62
RandomRange
Synopsis: Return a random number in a range Declaration: function RandomRange(const aFrom: Integer;const aTo: Integer) : Integer function RandomRange(const aFrom: Int64;const aTo: Int64) : Int64 Visibility: default Description: RandomRange returns a random value in the range AFrom to ATo. AFrom and ATo do not need to be in increasing order. The upper border is not included in the generated value, but the lower border is. See also: #rtl.system.Random (1378), RandomFrom (792)
25.12.63
RoundTo
Synopsis: Round to the specied number of digits Declaration: function RoundTo(const AVAlue: Extended;const Digits: TRoundToRange) : Extended Visibility: default Description: RoundTo rounds the specied oat AVAlue to the specied number of digits and returns the result. This result is accurate to "10 to the power Digits". It uses the standard Round function for this. See also: TRoundToRange (1225), SimpleRoundTo (795)
25.12.64
SameValue
Synopsis: Check whether 2 oat values are the same Declaration: function SameValue(const A: Extended;const B: Extended) : Boolean ; Overload function SameValue(const A: Single;const B: Single) : Boolean; Overload function SameValue(const A: Extended;const B: Extended; Epsilon: Extended) : Boolean; Overload function SameValue(const A: Single;const B: Single;Epsilon: Single) : Boolean; Overload Visibility: default Description: SameValue returns True if the oating-point values A and B are the same, i.e. whether the absolute value of their their difference is smaller than Epsilon. If their difference is larger, then False is returned. If unspecied, the default value for Epsilon is 0.0. See also: MinFloat (760), IsZero (777)
25.12.65
sec
Synopsis: Alias for secant Declaration: function sec(x: float) : float Visibility: default 793
Description: sec is an alias for the secant (794) function. See also: secant (794)
25.12.66
secant
Synopsis: Calculate secant Declaration: function secant(x: float) : float Visibility: default Description: Secant calculates the secant (1/cos(x)) of its argument x. Errors: If 90 or 270 degrees is specied, an exception will be raised. See also: cosecant (769)
25.12.67
SetExceptionMask
Synopsis: Set the Floating Point Unit exception mask. Declaration: function SetExceptionMask(const Mask: TFPUExceptionMask) : TFPUExceptionMask Visibility: default Description: Set the Floating Point Unit exception mask.
25.12.68
SetPrecisionMode
Synopsis: Set the Floating Point Unit precision mode. Declaration: function SetPrecisionMode(const Precision: TFPUPrecisionMode) : TFPUPrecisionMode Visibility: default Description: Set the Floating Point Unit precision mode.
25.12.69
SetRoundMode
Synopsis: Set the Floating Point Unit rounding mode. Declaration: function SetRoundMode(const RoundMode: TFPURoundingMode) : TFPURoundingMode Visibility: default Description: Set the Floating Point Unit rounding mode.
794
25.12.70
Declaration: function function function function Visibility: default
Sign
Sign(const Sign(const Sign(const Sign(const AValue: AValue: AValue: AValue: Integer) : TValueSign; Overload Int64) : TValueSign; Overload Double) : TValueSign; Overload Extended) : TValueSign; Overload
Description: Sign returns the sign of its argument, which can be an Integer, 64 bit integer, or a double. The returned value is an integer which is -1, 0 or 1, and can be used to do further calculations with.
25.12.71
SimpleRoundTo
Synopsis: Round to the specied number of digits (rounding up if needed) Declaration: function SimpleRoundTo(const AValue: Extended; const Digits: TRoundToRange) : Extended Visibility: default Description: SimplRoundTo rounds the specied oat AVAlue to the specied number of digits, but rounds up, and returns the result. This result is accurate to "10 to the power Digits". It uses the standard Round function for this. See also: TRoundToRange (1225), RoundTo (793)
25.12.72
sincos
Synopsis: Return sine and cosine of argument Declaration: procedure sincos(theta: float;out sinus: float;out cosinus: float) Visibility: default Description: Sincos calculates the sine and cosine of the angle theta, and returns the result in sinus and cosinus. On Intel hardware, This calculation will be faster than making 2 calls to calculate the sine and cosine separately. Errors: None. See also: arcsin (765), arccos (763) Listing: ./mathex/ex41.pp
Program Example41 ; { Program t o demonstrate t h e s i n c o s f u n c t i o n . } Uses math ; Procedure dosincos ( Angle : F l o a t ) ; Var Sine , Cosine : F l o a t ;
795
begin s i n c o s ( angle , sine , c o s i n e ) ; Write ( Angle : , Angle : 8 : 6 ) ; Write ( Sine : , s i n e : 8 : 6 ) ; Write ( Cosine : , c o s i n e : 8 : 6 ) ; end ; begin dosincos ( p i ) ; dosincos ( p i / 2 ) ; dosincos ( p i / 3 ) ; dosincos ( p i / 4 ) ; dosincos ( p i / 6 ) ; end .
25.12.73
sinh
Synopsis: Return hyperbolic sine Declaration: function sinh(x: float) : float Visibility: default Description: Sinh returns the hyperbolic sine of its argument x. See also: cosh (769), arsinh (767), tanh (800), artanh (767) Listing: ./mathex/ex42.pp
Program Example42 ; { Program t o demonstrate t h e s i n h f u n c t i o n . } Uses math ; begin writeln ( sinh ( 0 ) ) ; writeln ( sinh ( 1 ) ) ; writeln ( sinh ( 1)); end .
25.12.74
stddev
Synopsis: Return standard deviation of data Declaration: function stddev(const data: Array of Extended) : float function stddev(const data: PExtended;const N: Integer) : float Visibility: default Description: Stddev returns the standard deviation of the values in Data. It returns zero if there is only one value. The second form of the function accepts a pointer to an array of N values. Errors: None. 796
See also: mean (783), meanandstddev (783), variance (801), totalvariance (800) Listing: ./mathex/ex43.pp
Program Example40 ; { Program t o demonstrate t h e stddev f u n c t i o n . } Uses Math ; Var I : Integer ; ExArray : Array [ 1 . . 1 0 0 0 0 ] of F l o a t ; begin Randomize ; f o r I : = low ( ExArray ) to high ( ExArray ) do ExArray [ i ] : = Randg ( 1 , 0 . 2 ) ; W r i t e l n ( StdDev : , StdDev ( ExArray ) : 8 : 4 ) ; W r i t e l n ( StdDev ( b ) : , StdDev ( @ExArray [ 0 ] , 1 0 0 0 0 ) : 8 : 4 ) ; end .
25.12.75
sum
Synopsis: Return sum of values Declaration: function sum(const data: Array of Extended) : float function sum(const data: PExtended;const N: LongInt) : float Visibility: default Description: Sum returns the sum of the values in the data array. The second form of the function accepts a pointer to an array of N values. Errors: None. See also: sumofsquares (798), sumsandsquares (798), totalvariance (800), variance (801) Listing: ./mathex/ex44.pp
Program Example44 ; { Program t o demonstrate t h e Sum f u n c t i o n . } Uses math ; Var I : 1..100; ExArray : Array [ 1 . . 1 0 0 ] of F l o a t ; begin Randomize ; f o r I : = low ( ExArray ) to high ( ExArray ) do ExArray [ i ] : = ( RandomRandom) 1 0 0 ; W r i t e l n ( Max : , MaxValue ( ExArray ) : 8 : 4 ) ; W r i t e l n ( Min : , MinValue ( ExArray ) : 8 : 4 ) ; W r i t e l n ( Sum : ,Sum( ExArray ) : 8 : 4 ) ; W r i t e l n ( Sum ( b ) : ,Sum( @ExArray [ 1 ] , 1 0 0 ) : 8 : 4 ) ; end .
797
25.12.76
sumInt
Synopsis: Return the sum of an array of integers Declaration: function sumInt(const data: PInt64;const N: LongInt) : Int64 function sumInt(const data: Array of Int64) : Int64 Visibility: default Description: SumInt returns the sum of the N integers in the Data array, where this can be an open array or a pointer to an array. Errors: An overow may occur.
25.12.77
sumofsquares
Synopsis: Return sum of squares of values Declaration: function sumofsquares(const data: Array of Extended) : float function sumofsquares(const data: PExtended;const N: Integer) : float Visibility: default Description: Sumofsquares returns the sum of the squares of the values in the data array. The second form of the function accepts a pointer to an array of N values. Errors: None. See also: sum (797), sumsandsquares (798), totalvariance (800), variance (801) Listing: ./mathex/ex45.pp
Program Example45 ; { Program t o demonstrate t h e SumOfSquares f u n c t i o n . } Uses math ; Var I : 1..100; ExArray : Array [ 1 . . 1 0 0 ] of F l o a t ; begin Randomize ; f o r I : = low ( ExArray ) to high ( ExArray ) do ExArray [ i ] : = ( RandomRandom) 1 0 0 ; W r i t e l n ( Max : , MaxValue ( ExArray ) : 8 : 4 ) ; W r i t e l n ( Min : , MinValue ( ExArray ) : 8 : 4 ) ; W r i t e l n ( Sum squares : , SumOfSquares ( ExArray ) : 8 : 4 ) ; W r i t e l n ( Sum squares ( b ) : , SumOfSquares ( @ExArray [ 1 ] , 1 0 0 ) : 8 : 4 ) ; end .
25.12.78
sumsandsquares
798
Declaration: procedure sumsandsquares(const data: Array of Extended;var sum: float; var sumofsquares: float) procedure sumsandsquares(const data: PExtended;const N: Integer; var sum: float;var sumofsquares: float) Visibility: default Description: sumsandsquares calculates the sum of the values and the sum of the squares of the values in the data array and returns the results in sum and sumofsquares. The second form of the function accepts a pointer to an array of N values. Errors: None. See also: sum (797), sumofsquares (798), totalvariance (800), variance (801) Listing: ./mathex/ex46.pp
Program Example45 ; { Program t o demonstrate t h e SumOfSquares f u n c t i o n . } Uses math ; Var I : 1..100; ExArray : Array [ 1 . . 1 0 0 ] of F l o a t s , ss : f l o a t ; begin Randomize ; f o r I : = low ( ExArray ) to high ( ExArray ) do ExArray [ i ] : = ( RandomRandom) 1 0 0 ; W r i t e l n ( Max : , MaxValue ( ExArray ) : 8 : 4 ) ; W r i t e l n ( Min : , MinValue ( ExArray ) : 8 : 4 ) ; SumsAndSquares ( ExArray , S , SS ) ; W r i t e l n ( Sum : ,S : 8 : 4 ) ; W r i t e l n ( Sum squares : ,SS : 8 : 4 ) ; SumsAndSquares ( @ExArray [ 1 ] , 1 0 0 , S , SS ) ; W r i t e l n ( Sum ( b ) : ,S : 8 : 4 ) ; W r i t e l n ( Sum squares ( b ) : ,SS : 8 : 4 ) ; end .
25.12.79
tan
Synopsis: Return tangent Declaration: function tan(x: float) : float Visibility: default Description: Tan returns the tangent of x. The argument x must be in radians. Errors: If x (normalized) is pi/2 or 3pi/2 then an overow will occur. See also: tanh (800), arcsin (765), sincos (795), arccos (763) Listing: ./mathex/ex47.pp
799
Program Example47 ; { Program t o demonstrate t h e Tan f u n c t i o n . } Uses math ; Procedure DoTan ( Angle : F l o a t ) ; begin Write ( Angle : , RadToDeg ( Angle ) : 8 : 6 ) ; W r i t e l n ( Tangent : , Tan ( Angle ) : 8 : 6 ) ; end ; begin DoTan ( 0 ) ; DoTan ( Pi ) ; DoTan ( Pi / 3 ) ; DoTAn ( Pi / 4 ) ; DoTan ( Pi / 6 ) ; end .
25.12.80
tanh
Synopsis: Return hyperbolic tangent Declaration: function tanh(x: float) : float Visibility: default Description: Tanh returns the hyperbolic tangent of x. Errors: None. See also: arcsin (765), sincos (795), arccos (763) Listing: ./mathex/ex48.pp
Program Example48 ; { Program t o demonstrate t h e Tanh f u n c t i o n . } Uses math ; begin w r i t e l n ( tanh ( 0 ) ) ; w r i t e l n ( tanh ( 1 ) ) ; w r i t e l n ( tanh ( 1 ) ) ; end .
25.12.81
totalvariance
Synopsis: Return total varians of values Declaration: function totalvariance(const data: Array of Extended) : float function totalvariance(const data: PExtended;const N: Integer) : float
800
Visibility: default Description: TotalVariance returns the total variance of the values in the data array. It returns zero if there is only one value. The second form of the function accepts a pointer to an array of N values. Errors: None. See also: variance (801), stddev (796), mean (783) Listing: ./mathex/ex49.pp
Program Example49 ; { Program t o demonstrate t h e T o t a l V a r i a n c e f u n c t i o n . } Uses math ; Type TExArray = Array [ 1 . . 1 0 0 ] of F l o a t ; Var I : Integer ; ExArray : TExArray ; TV : f l o a t ; begin Randomize ; f o r I : = 1 to 1 0 0 do ExArray [ i ] : = ( RandomRandom) 1 0 0 ; TV: = T o t a l V a r i a n c e ( ExArray ) ; Writeln ( Total variance : ,TV : 8 : 4 ) ; TV: = T o t a l V a r i a n c e ( @ExArray [ 1 ] , 1 0 0 ) ; W r i t e l n ( T o t a l Variance ( b ) : ,TV : 8 : 4 ) ; end .
25.12.82
variance
Synopsis: Return variance of values Declaration: function variance(const data: Array of Extended) : float function variance(const data: PExtended;const N: Integer) : float Visibility: default Description: Variance returns the variance of the values in the data array. It returns zero if there is only one value. The second form of the function accepts a pointer to an array of N values. Errors: None. See also: totalvariance (800), stddev (796), mean (783) Listing: ./mathex/ex50.pp
801
Program Example50 ; { Program t o demonstrate t h e Variance f u n c t i o n . } Uses math ; Var I : 1..100; ExArray : Array [ 1 . . 1 0 0 ] of F l o a t ; V : float ; begin Randomize ; f o r I : = low ( ExArray ) to high ( ExArray ) do ExArray [ i ] : = ( RandomRandom) 1 0 0 ; V: = Variance ( ExArray ) ; W r i t e l n ( Variance : ,V : 8 : 4 ) ; V: = Variance ( @ExArray [ 1 ] , 1 0 0 ) ; W r i t e l n ( Variance ( b ) : ,V : 8 : 4 ) ; end .
25.13
25.13.1
EInvalidArgument
Description
802
Chapter 26
The unit matrix is a unit that provides objects for the common two, three and four dimensional vectors matrixes. These vectors and matrixes are very common in computer graphics and are often implemented from scratch by programmers while every implementation provides exactly the same functionality. It makes therefore sense to provide this functionality in the runtime library. This eliminates the need for programmers to reinvent the wheel and also allows libraries that use matrix operations to become more compatible. The matrix unit does not provide n-dimensional matrixes. The functionality needs of a general matrix unit varies from application to application; one can think of reduced memory usage tricks for matrixes that only have data around the diagonal etc., desire for parallelization etc. etc. It is believed that programmers that do use n-dimensional matrices would not necessarily bent from such a unit in the runtime library. Design goals: Provide common dimensions, two three and four. Provide multiple oating point precisions, single, double, extended. Simple trivial binary representation; it is possible to typecast vectors into other implementations that use the same trivial representation. No dynamic memory management in the background. It must be possible to write expressions like matrix A * B * C without worrying about memory management. Design decisions: Class object model is ruled out. The objects object model, without virtual methods, is suitable. Operator overloading is a good way to allow programmers to write matrix expressions. 3 dimensions * 3 precision means 9 vector and 9 matrix objects. Macros have been used in the source to take care of this.
803
26.2
26.2.1
Tmatrix2_double_data = Array[0..1,0..1] of Double This is the matrix internal data for a matrix. It uses a simple array structure so data from other libraries that dene their own matrix type as a simple array structure can simply be moved to and from this data, or typecasted into it. As this is the only eld in the object, the object itself can be used just as ne for typecasting purposes etc. Tmatrix2_extended_data = Array[0..1,0..1] of extended This is the matrix internal data for a matrix. It uses a simple array structure so data from other libraries that dene their own matrix type as a simple array structure can simply be moved to and from this data, or typecasted into it. As this is the only eld in the object, the object itself can be used just as ne for typecasting purposes etc. Tmatrix2_single_data = Array[0..1,0..1] of single This is the matrix internal data for a matrix. It uses a simple array structure so data from other libraries that dene their own matrix type as a simple array structure can simply be moved to and from this data, or typecasted into it. As this is the only eld in the object, the object itself can be used just as ne for typecasting purposes etc. Tmatrix3_double_data = Array[0..2,0..2] of Double This is the matrix internal data for a matrix. It uses a simple array structure so data from other libraries that dene their own matrix type as a simple array structure can simply be moved to and from this data, or typecasted into it. As this is the only eld in the object, the object itself can be used just as ne for typecasting purposes etc. Tmatrix3_extended_data = Array[0..2,0..2] of extended This is the matrix internal data for a matrix. It uses a simple array structure so data from other libraries that dene their own matrix type as a simple array structure can simply be moved to and from this data, or typecasted into it. As this is the only eld in the object, the object itself can be used just as ne for typecasting purposes etc. Tmatrix3_single_data = Array[0..2,0..2] of single This is the matrix internal data for a matrix. It uses a simple array structure so data from other libraries that dene their own matrix type as a simple array structure can simply be moved to and from this data, or typecasted into it. As this is the only eld in the object, the object itself can be used just as ne for typecasting purposes etc. Tmatrix4_double_data = Array[0..3,0..3] of Double This is the matrix internal data for a matrix. It uses a simple array structure so data from other libraries that dene their own matrix type as a simple array structure can simply be moved to and from this data, or typecasted into it. As this is the only eld in the object, the object itself can be used just as ne for typecasting purposes etc. 804
Tmatrix4_extended_data = Array[0..3,0..3] of extended This is the matrix internal data for a matrix. It uses a simple array structure so data from other libraries that dene their own matrix type as a simple array structure can simply be moved to and from this data, or typecasted into it. As this is the only eld in the object, the object itself can be used just as ne for typecasting purposes etc. Tmatrix4_single_data = Array[0..3,0..3] of single This is the matrix internal data for a matrix. It uses a simple array structure so data from other libraries that dene their own matrix type as a simple array structure can simply be moved to and from this data, or typecasted into it. As this is the only eld in the object, the object itself can be used just as ne for typecasting purposes etc. Tvector2_double_data = Array[0..1] of Double This is the vector internal data for a vector. It uses a simple array structure so data from other libraries that dene their own vector type as a simple array structure can simply be moved to and from this data, or typecasted into it. As this is the only eld in the object, the object itself can be used just as ne for typecasting purposes etc. Tvector2_extended_data = Array[0..1] of extended This is the vector internal data for a vector. It uses a simple array structure so data from other libraries that dene their own vector type as a simple array structure can simply be moved to and from this data, or typecasted into it. As this is the only eld in the object, the object itself can be used just as ne for typecasting purposes etc. Tvector2_single_data = Array[0..1] of single This is the vector internal data for a vector. It uses a simple array structure so data from other libraries that dene their own vector type as a simple array structure can simply be moved to and from this data, or typecasted into it. As this is the only eld in the object, the object itself can be used just as ne for typecasting purposes etc. Tvector3_double_data = Array[0..2] of Double This is the vector internal data for a vector. It uses a simple array structure so data from other libraries that dene their own vector type as a simple array structure can simply be moved to and from this data, or typecasted into it. As this is the only eld in the object, the object itself can be used just as ne for typecasting purposes etc. Tvector3_extended_data = Array[0..2] of extended This is the vector internal data for a vector. It uses a simple array structure so data from other libraries that dene their own vector type as a simple array structure can simply be moved to and from this data, or typecasted into it. As this is the only eld in the object, the object itself can be used just as ne for typecasting purposes etc. Tvector3_single_data = Array[0..2] of single
805
This is the vector internal data for a vector. It uses a simple array structure so data from other libraries that dene their own vector type as a simple array structure can simply be moved to and from this data, or typecasted into it. As this is the only eld in the object, the object itself can be used just as ne for typecasting purposes etc. Tvector4_double_data = Array[0..3] of Double This is the vector internal data for a vector. It uses a simple array structure so data from other libraries that dene their own vector type as a simple array structure can simply be moved to and from this data, or typecasted into it. As this is the only eld in the object, the object itself can be used just as ne for typecasting purposes etc. Tvector4_extended_data = Array[0..3] of extended This is the vector internal data for a vector. It uses a simple array structure so data from other libraries that dene their own vector type as a simple array structure can simply be moved to and from this data, or typecasted into it. As this is the only eld in the object, the object itself can be used just as ne for typecasting purposes etc. Tvector4_single_data = Array[0..3] of single This is the vector internal data for a vector. It uses a simple array structure so data from other libraries that dene their own vector type as a simple array structure can simply be moved to and from this data, or typecasted into it. As this is the only eld in the object, the object itself can be used just as ne for typecasting purposes etc.
26.3
26.3.1
Declaration: operator operator *(Tmatrix2_double, Double): Tmatrix2_double (const m: Tmatrix2_doubl const x: Double) : Tmatrix2_double Visibility: default Description: This operator allows you to multiply a matrix with a scalar. All elements in the matrix are multiplied by the scalar, the result is returned as a new matrix.
26.3.2
Declaration: operator operator *(Tmatrix2_double, Tmatrix2_double): Tmatrix2_double (const m1: Tmat const m2: Tmatr : Tmatrix2_dou Visibility: default Description: This operator allows you to multipy two two-dimensional single precision matrices. A new matrix is returned which is the product of both matrices. The product is calculated using the well known matrix multiplication algorithm. 806
26.3.3
Declaration: operator operator *(Tmatrix2_double, Tvector2_double): Tvector2_double (const m: Tmatr const v: Tvecto : Tvector2_dou Visibility: default Description: This operator allows you to multipy a two-dimensional double precision matrices with a two dimensional double precision vector. A new vector is returned which is the product of the matrix and the vector. The product is calculated using the well known matrix-vector multiplication algorithm.
26.3.4
Declaration: operator operator *(Tmatrix2_extended, extended): Tmatrix2_extended (const m: Tmatrix2 const x: extended) : Tmatrix2_extend Visibility: default Description: This operator allows you to multiply a matrix with a scalar. All elements in the matrix are multiplied by the scalar, the result is returned as a new matrix.
26.3.5
Declaration:
operator (const m1 const m2: : Tmatri Visibility: default Description: This operator allows you to multipy two two-dimensional single precision matrices. A new matrix is returned which is the product of both matrices. The product is calculated using the well known matrix multiplication algorithm.
26.3.6
Declaration:
807
Description: This operator allows you to multipy a two-dimensional extended precision matrices with a two dimensional extended precision vector. A new vector is returned which is the product of the matrix and the vector. The product is calculated using the well known matrix-vector multiplication algorithm.
26.3.7
Declaration: operator operator *(Tmatrix2_single, single): Tmatrix2_single (const m: Tmatrix2_singl const x: single) : Tmatrix2_single Visibility: default Description: This operator allows you to multiply a matrix with a scalar. All elements in the matrix are multiplied by the scalar, the result is returned as a new matrix.
26.3.8
Declaration: operator operator *(Tmatrix2_single, Tmatrix2_single): Tmatrix2_single (const m1: Tmat const m2: Tmatr : Tmatrix2_sin Visibility: default Description: This operator allows you to multipy two two-dimensional single precision matrices. A new matrix is returned which is the product of both matrices. The product is calculated using the well known matrix multiplication algorithm.
26.3.9
Declaration: operator operator *(Tmatrix2_single, Tvector2_single): Tvector2_single (const m: Tmatr const v: Tvecto : Tvector2_sin Visibility: default Description: This operator allows you to multipy a two-dimensional single precision matrices with a two dimensional single precision vector. A new vector is returned which is the product of the matrix and the vector. The product is calculated using the well known matrix-vector multiplication algorithm.
26.3.10
Declaration: operator operator *(Tmatrix3_double, Double): Tmatrix3_double (const m: Tmatrix3_doubl const x: Double) : Tmatrix3_double 808
Visibility: default Description: This operator allows you to multiply a matrix with a scalar. All elements in the matrix are multiplied by the scalar, the result is returned as a new matrix.
26.3.11
Declaration: operator operator *(Tmatrix3_double, Tmatrix3_double): Tmatrix3_double (const m1: Tmat const m2: Tmatr : Tmatrix3_dou Visibility: default Description: This operator allows you to multipy two two-dimensional single precision matrices. A new matrix is returned which is the product of both matrices. The product is calculated using the well known matrix multiplication algorithm.
26.3.12
Declaration: operator operator *(Tmatrix3_double, Tvector3_double): Tvector3_double (const m: Tmatr const v: Tvecto : Tvector3_dou Visibility: default Description: This operator allows you to multipy a three-dimensional double precision matrices with a three dimensional double precision vector. A new vector is returned which is the product of the matrix and the vector. The product is calculated using the well known matrix-vector multiplication algorithm.
26.3.13
Declaration: operator operator *(Tmatrix3_extended, extended): Tmatrix3_extended (const m: Tmatrix3 const x: extended) : Tmatrix3_extend Visibility: default Description: This operator allows you to multiply a matrix with a scalar. All elements in the matrix are multiplied by the scalar, the result is returned as a new matrix.
26.3.14
809
Declaration:
operator (const m1 const m2: : Tmatri Visibility: default Description: This operator allows you to multipy two two-dimensional single precision matrices. A new matrix is returned which is the product of both matrices. The product is calculated using the well known matrix multiplication algorithm.
26.3.15
Declaration:
operator (const m: const v: : Tvecto Visibility: default Description: This operator allows you to multipy a three-dimensional extended precision matrices with a three dimensional extended precision vector. A new vector is returned which is the product of the matrix and the vector. The product is calculated using the well known matrix-vector multiplication algorithm.
26.3.16
Declaration: operator operator *(Tmatrix3_single, single): Tmatrix3_single (const m: Tmatrix3_singl const x: single) : Tmatrix3_single Visibility: default Description: This operator allows you to multiply a matrix with a scalar. All elements in the matrix are multiplied by the scalar, the result is returned as a new matrix.
26.3.17
Declaration: operator operator *(Tmatrix3_single, Tmatrix3_single): Tmatrix3_single (const m1: Tmat const m2: Tmatr : Tmatrix3_sin Visibility: default Description: This operator allows you to multipy two two-dimensional single precision matrices. A new matrix is returned which is the product of both matrices. The product is calculated using the well known matrix multiplication algorithm. 810
26.3.18
Declaration: operator operator *(Tmatrix3_single, Tvector3_single): Tvector3_single (const m: Tmatr const v: Tvecto : Tvector3_sin Visibility: default Description: This operator allows you to multipy a three-dimensional single precision matrices with a three dimensional single precision vector. A new vector is returned which is the product of the matrix and the vector. The product is calculated using the well known matrix-vector multiplication algorithm.
26.3.19
Declaration: operator operator *(Tmatrix4_double, Double): Tmatrix4_double (const m: Tmatrix4_doubl const x: Double) : Tmatrix4_double Visibility: default Description: This operator allows you to multiply a matrix with a scalar. All elements in the matrix are multiplied by the scalar, the result is returned as a new matrix.
26.3.20
Declaration: operator operator *(Tmatrix4_double, Tmatrix4_double): Tmatrix4_double (const m1: Tmat const m2: Tmatr : Tmatrix4_dou Visibility: default Description: This operator allows you to multipy two two-dimensional single precision matrices. A new matrix is returned which is the product of both matrices. The product is calculated using the well known matrix multiplication algorithm.
26.3.21
Declaration: operator operator *(Tmatrix4_double, Tvector4_double): Tvector4_double (const m: Tmatr const v: Tvecto : Tvector4_dou Visibility: default Description: This operator allows you to multipy a four-dimensional double precision matrices with a four dimensional double precision vector. A new vector is returned which is the product of the matrix and the vector. The product is calculated using the well known matrix-vector multiplication algorithm. 811
26.3.22
Declaration: operator operator *(Tmatrix4_extended, extended): Tmatrix4_extended (const m: Tmatrix4 const x: extended) : Tmatrix4_extend Visibility: default Description: This operator allows you to multiply a matrix with a scalar. All elements in the matrix are multiplied by the scalar, the result is returned as a new matrix.
26.3.23
Declaration:
operator (const m1 const m2: : Tmatri Visibility: default Description: This operator allows you to multipy two two-dimensional single precision matrices. A new matrix is returned which is the product of both matrices. The product is calculated using the well known matrix multiplication algorithm.
26.3.24
Declaration:
operator (const m: const v: : Tvecto Visibility: default Description: This operator allows you to multipy a four-dimensional extended precision matrices with a four dimensional extended precision vector. A new vector is returned which is the product of the matrix and the vector. The product is calculated using the well known matrix-vector multiplication algorithm.
26.3.25
Declaration: operator operator *(Tmatrix4_single, single): Tmatrix4_single (const m: Tmatrix4_singl const x: single) : Tmatrix4_single Visibility: default
812
Description: This operator allows you to multiply a matrix with a scalar. All elements in the matrix are multiplied by the scalar, the result is returned as a new matrix.
26.3.26
Declaration: operator operator *(Tmatrix4_single, Tmatrix4_single): Tmatrix4_single (const m1: Tmat const m2: Tmatr : Tmatrix4_sin Visibility: default Description: This operator allows you to multipy two two-dimensional single precision matrices. A new matrix is returned which is the product of both matrices. The product is calculated using the well known matrix multiplication algorithm.
26.3.27
Declaration: operator operator *(Tmatrix4_single, Tvector4_single): Tvector4_single (const m: Tmatr const v: Tvecto : Tvector4_sin Visibility: default Description: This operator allows you to multipy a four-dimensional single precision matrices with a four dimensional single precision vector. A new vector is returned which is the product of the matrix and the vector. The product is calculated using the well known matrix-vector multiplication algorithm.
26.3.28
Declaration: operator operator *(Tvector2_double, Double): Tvector2_double (const x: Tvector2_doubl y: Double) : Tvector2_double Visibility: default Description: This operator allows you to multiply a vector by a scalar value. Each vector element is multiplied by the scalar value; the result is returned as a new vector.
26.3.29
Declaration: operator operator *(Tvector2_double, Tvector2_double): Tvector2_double (const x: Tvect const y: Tvecto : Tvector2_dou 813
Visibility: default Description: This operator returns a vector that contains the element by element multiplication of the two multiplied vectors.
26.3.30
Declaration: operator operator *(Tvector2_extended, extended): Tvector2_extended (const x: Tvector2 y: extended) : Tvector2_extend Visibility: default Description: This operator allows you to multiply a vector by a scalar value. Each vector element is multiplied by the scalar value; the result is returned as a new vector.
26.3.31
Declaration:
operator (const x: const y: : Tvecto Visibility: default Description: This operator returns a vector that contains the element by element multiplication of the two multiplied vectors.
26.3.32
Declaration: operator operator *(Tvector2_single, single): Tvector2_single (const x: Tvector2_singl y: single) : Tvector2_single Visibility: default Description: This operator allows you to multiply a vector by a scalar value. Each vector element is multiplied by the scalar value; the result is returned as a new vector.
26.3.33
Declaration: operator operator *(Tvector2_single, Tvector2_single): Tvector2_single (const x: Tvect const y: Tvecto : Tvector2_sin 814
Visibility: default Description: This operator returns a vector that contains the element by element multiplication of the two multiplied vectors.
26.3.34
Declaration: operator operator *(Tvector3_double, Double): Tvector3_double (const x: Tvector3_doubl y: Double) : Tvector3_double Visibility: default Description: This operator allows you to multiply a vector by a scalar value. Each vector element is multiplied by the scalar value; the result is returned as a new vector.
26.3.35
Declaration: operator operator *(Tvector3_double, Tvector3_double): Tvector3_double (const x: Tvect const y: Tvecto : Tvector3_dou Visibility: default Description: This operator returns a vector that contains the element by element multiplication of the two multiplied vectors.
26.3.36
Declaration: operator operator *(Tvector3_extended, extended): Tvector3_extended (const x: Tvector3 y: extended) : Tvector3_extend Visibility: default Description: This operator allows you to multiply a vector by a scalar value. Each vector element is multiplied by the scalar value; the result is returned as a new vector.
26.3.37
Declaration:
Visibility: default Description: This operator returns a vector that contains the element by element multiplication of the two multiplied vectors.
26.3.38
Declaration: operator operator *(Tvector3_single, single): Tvector3_single (const x: Tvector3_singl y: single) : Tvector3_single Visibility: default Description: This operator allows you to multiply a vector by a scalar value. Each vector element is multiplied by the scalar value; the result is returned as a new vector.
26.3.39
Declaration: operator operator *(Tvector3_single, Tvector3_single): Tvector3_single (const x: Tvect const y: Tvecto : Tvector3_sin Visibility: default Description: This operator returns a vector that contains the element by element multiplication of the two multiplied vectors.
26.3.40
Declaration: operator operator *(Tvector4_double, Double): Tvector4_double (const x: Tvector4_doubl y: Double) : Tvector4_double Visibility: default Description: This operator allows you to multiply a vector by a scalar value. Each vector element is multiplied by the scalar value; the result is returned as a new vector.
26.3.41
Declaration: operator operator *(Tvector4_double, Tvector4_double): Tvector4_double (const x: Tvect const y: Tvecto : Tvector4_dou
816
Visibility: default Description: This operator returns a vector that contains the element by element multiplication of the two multiplied vectors.
26.3.42
Declaration: operator operator *(Tvector4_extended, extended): Tvector4_extended (const x: Tvector4 y: extended) : Tvector4_extend Visibility: default Description: This operator allows you to multiply a vector by a scalar value. Each vector element is multiplied by the scalar value; the result is returned as a new vector.
26.3.43
Declaration:
operator (const x: const y: : Tvecto Visibility: default Description: This operator returns a vector that contains the element by element multiplication of the two multiplied vectors.
26.3.44
Declaration: operator operator *(Tvector4_single, single): Tvector4_single (const x: Tvector4_singl y: single) : Tvector4_single Visibility: default Description: This operator allows you to multiply a vector by a scalar value. Each vector element is multiplied by the scalar value; the result is returned as a new vector.
26.3.45
Declaration: operator operator *(Tvector4_single, Tvector4_single): Tvector4_single (const x: Tvect const y: Tvecto : Tvector4_sin 817
Visibility: default Description: This operator returns a vector that contains the element by element multiplication of the two multiplied vectors.
26.3.46
Declaration: operator operator **(Tvector2_double, Tvector2_double): Double (const x: Tvector2_doub const y: Tvector2_doubl : Double Visibility: default Description: This operator returns the internal product of the two vectors, that is, the elements of the two vectors are element-wise multiplied, and then added together.
26.3.47
Declaration: operator operator **(Tvector2_extended, Tvector2_extended): extended (const x: Tvector const y: Tvector2 : extended Visibility: default Description: This operator returns the internal product of the two vectors, that is, the elements of the two vectors are element-wise multiplied, and then added together.
26.3.48
Declaration: operator operator **(Tvector2_single, Tvector2_single): single (const x: Tvector2_sing const y: Tvector2_singl : single Visibility: default Description: This operator returns the internal product of the two vectors, that is, the elements of the two vectors are element-wise multiplied, and then added together.
26.3.49
Declaration: operator operator **(Tvector3_double, Tvector3_double): Double (const x: Tvector3_doub const y: Tvector3_doubl : Double
818
Visibility: default Description: This operator returns the internal product of the two vectors, that is, the elements of the two vectors are element-wise multiplied, and then added together.
26.3.50
Declaration: operator operator **(Tvector3_extended, Tvector3_extended): extended (const x: Tvector const y: Tvector3 : extended Visibility: default Description: This operator returns the internal product of the two vectors, that is, the elements of the two vectors are element-wise multiplied, and then added together.
26.3.51
Declaration: operator operator **(Tvector3_single, Tvector3_single): single (const x: Tvector3_sing const y: Tvector3_singl : single Visibility: default Description: This operator returns the internal product of the two vectors, that is, the elements of the two vectors are element-wise multiplied, and then added together.
26.3.52
Declaration: operator operator **(Tvector4_double, Tvector4_double): Double (const x: Tvector4_doub const y: Tvector4_doubl : Double Visibility: default Description: This operator returns the internal product of the two vectors, that is, the elements of the two vectors are element-wise multiplied, and then added together.
26.3.53
Declaration: operator operator **(Tvector4_extended, Tvector4_extended): extended (const x: Tvector const y: Tvector4 : extended
819
Visibility: default Description: This operator returns the internal product of the two vectors, that is, the elements of the two vectors are element-wise multiplied, and then added together.
26.3.54
Declaration: operator operator **(Tvector4_single, Tvector4_single): single (const x: Tvector4_sing const y: Tvector4_singl : single Visibility: default Description: This operator returns the internal product of the two vectors, that is, the elements of the two vectors are element-wise multiplied, and then added together.
26.3.55
Declaration: operator operator +(Tmatrix2_double, Double): Tmatrix2_double (const m: Tmatrix2_doubl const x: Double) : Tmatrix2_double Visibility: default Description: This operator allows you to add a scalar value to a matrix. The scalar is added to all elements of the matrix, the result is returned as a new vector.
26.3.56
Declaration: operator operator +(Tmatrix2_double, Tmatrix2_double): Tmatrix2_double (const m1: Tmat const m2: Tmatr : Tmatrix2_dou Visibility: default Description: This operator allows you to add two two-dimensional double precision matrices together. A new matrix is returned with all elements of the two matrices added together.
26.3.57
Declaration: operator operator +(Tmatrix2_extended, extended): Tmatrix2_extended (const m: Tmatrix2 const x: extended) : Tmatrix2_extend
820
Visibility: default Description: This operator allows you to add a scalar value to a matrix. The scalar is added to all elements of the matrix, the result is returned as a new vector.
26.3.58
Declaration:
operator (const m1 const m2: : Tmatri Visibility: default Description: This operator allows you to add two two-dimensional extended precision matrices together. A new matrix is returned with all elements of the two matrices added together.
26.3.59
Declaration: operator operator +(Tmatrix2_single, single): Tmatrix2_single (const m: Tmatrix2_singl const x: single) : Tmatrix2_single Visibility: default Description: This operator allows you to add a scalar value to a matrix. The scalar is added to all elements of the matrix, the result is returned as a new vector.
26.3.60
Declaration: operator operator +(Tmatrix2_single, Tmatrix2_single): Tmatrix2_single (const m1: Tmat const m2: Tmatr : Tmatrix2_sin Visibility: default Description: This operator allows you to add two two-dimensional single precision matrices together. A new matrix is returned with all elements of the two matrices added together.
26.3.61
Declaration: operator operator +(Tmatrix3_double, Double): Tmatrix3_double (const m: Tmatrix3_doubl const x: Double) : Tmatrix3_double 821
Visibility: default Description: This operator allows you to add a scalar value to a matrix. The scalar is added to all elements of the matrix, the result is returned as a new vector.
26.3.62
Declaration: operator operator +(Tmatrix3_double, Tmatrix3_double): Tmatrix3_double (const m1: Tmat const m2: Tmatr : Tmatrix3_dou Visibility: default Description: This operator allows you to add two three-dimensional double precision matrices together. A new matrix is returned with all elements of the two matrices added together.
26.3.63
Declaration: operator operator +(Tmatrix3_extended, extended): Tmatrix3_extended (const m: Tmatrix3 const x: extended) : Tmatrix3_extend Visibility: default Description: This operator allows you to add a scalar value to a matrix. The scalar is added to all elements of the matrix, the result is returned as a new vector.
26.3.64
Declaration:
operator (const m1 const m2: : Tmatri Visibility: default Description: This operator allows you to add two three-dimensional extended precision matrices together. A new matrix is returned with all elements of the two matrices added together.
26.3.65
Declaration: operator operator +(Tmatrix3_single, single): Tmatrix3_single (const m: Tmatrix3_singl const x: single) : Tmatrix3_single 822
Visibility: default Description: This operator allows you to add a scalar value to a matrix. The scalar is added to all elements of the matrix, the result is returned as a new vector.
26.3.66
Declaration: operator operator +(Tmatrix3_single, Tmatrix3_single): Tmatrix3_single (const m1: Tmat const m2: Tmatr : Tmatrix3_sin Visibility: default Description: This operator allows you to add two three-dimensional single precision matrices together. A new matrix is returned with all elements of the two matrices added together.
26.3.67
Declaration: operator operator +(Tmatrix4_double, Double): Tmatrix4_double (const m: Tmatrix4_doubl const x: Double) : Tmatrix4_double Visibility: default Description: This operator allows you to add a scalar value to a matrix. The scalar is added to all elements of the matrix, the result is returned as a new vector.
26.3.68
Declaration: operator operator +(Tmatrix4_double, Tmatrix4_double): Tmatrix4_double (const m1: Tmat const m2: Tmatr : Tmatrix4_dou Visibility: default Description: This operator allows you to add two four-dimensional double precision matrices together. A new matrix is returned with all elements of the two matrices added together.
26.3.69
Declaration: operator operator +(Tmatrix4_extended, extended): Tmatrix4_extended (const m: Tmatrix4 const x: extended) : Tmatrix4_extend
823
Visibility: default Description: This operator allows you to add a scalar value to a matrix. The scalar is added to all elements of the matrix, the result is returned as a new vector.
26.3.70
Declaration:
operator (const m1 const m2: : Tmatri Visibility: default Description: This operator allows you to add two four-dimensional extended precision matrices together. A new matrix is returned with all elements of the two matrices added together.
26.3.71
Declaration: operator operator +(Tmatrix4_single, single): Tmatrix4_single (const m: Tmatrix4_singl const x: single) : Tmatrix4_single Visibility: default Description: This operator allows you to add a scalar value to a matrix. The scalar is added to all elements of the matrix, the result is returned as a new vector.
26.3.72
Declaration: operator operator +(Tmatrix4_single, Tmatrix4_single): Tmatrix4_single (const m1: Tmat const m2: Tmatr : Tmatrix4_sin Visibility: default Description: This operator allows you to add two four-dimensional single precision matrices together. A new matrix is returned with all elements of the two matrices added together.
26.3.73
Declaration: operator operator +(Tvector2_double, Double): Tvector2_double (const x: Tvector2_doubl y: Double) : Tvector2_double 824
Visibility: default Description: This operator allows you to add a scalar value to a vector. The scalar is added to all elements of the vector, the result is returned as a new vector.
26.3.74
Declaration: operator operator +(Tvector2_double, Tvector2_double): Tvector2_double (const x: Tvect const y: Tvecto : Tvector2_dou Visibility: default Description: This operator allows you to add two two-dimensional vectors with double precision together. The result is a new vector which consists of the sums of the individual elements of the two vectors.
26.3.75
Declaration: operator operator +(Tvector2_extended, extended): Tvector2_extended (const x: Tvector2 y: extended) : Tvector2_extend Visibility: default Description: This operator allows you to add a scalar value to a vector. The scalar is added to all elements of the vector, the result is returned as a new vector.
26.3.76
Declaration:
operator (const x: const y: : Tvecto Visibility: default Description: This operator allows you to add two two-dimensional vectors with extended precision together. The result is a new vector which consists of the sums of the individual elements of the two vectors.
26.3.77
Declaration: operator operator +(Tvector2_single, single): Tvector2_single (const x: Tvector2_singl y: single) : Tvector2_single 825
Visibility: default Description: This operator allows you to add a scalar value to a vector. The scalar is added to all elements of the vector, the result is returned as a new vector.
26.3.78
Declaration: operator operator +(Tvector2_single, Tvector2_single): Tvector2_single (const x: Tvect const y: Tvecto : Tvector2_sin Visibility: default Description: This operator allows you to add two two-dimensional vectors with single precision together. The result is a new vector which consists of the sums of the individual elements of the two vectors.
26.3.79
Declaration: operator operator +(Tvector3_double, Double): Tvector3_double (const x: Tvector3_doubl y: Double) : Tvector3_double Visibility: default Description: This operator allows you to add a scalar value to a vector. The scalar is added to all elements of the vector, the result is returned as a new vector.
26.3.80
Declaration: operator operator +(Tvector3_double, Tvector3_double): Tvector3_double (const x: Tvect const y: Tvecto : Tvector3_dou Visibility: default Description: This operator allows you to add two three-dimensional vectors with double precision together. The result is a new vector which consists of the sums of the individual elements of the two vectors.
26.3.81
Declaration: operator operator +(Tvector3_extended, extended): Tvector3_extended (const x: Tvector3 y: extended) : Tvector3_extend
826
Visibility: default Description: This operator allows you to add a scalar value to a vector. The scalar is added to all elements of the vector, the result is returned as a new vector.
26.3.82
Declaration:
operator (const x: const y: : Tvecto Visibility: default Description: This operator allows you to add two three-dimensional vectors with extended precision together. The result is a new vector which consists of the sums of the individual elements of the two vectors.
26.3.83
Declaration: operator operator +(Tvector3_single, single): Tvector3_single (const x: Tvector3_singl y: single) : Tvector3_single Visibility: default Description: This operator allows you to add a scalar value to a vector. The scalar is added to all elements of the vector, the result is returned as a new vector.
26.3.84
Declaration: operator operator +(Tvector3_single, Tvector3_single): Tvector3_single (const x: Tvect const y: Tvecto : Tvector3_sin Visibility: default Description: This operator allows you to add two three-dimensional vectors with single precision together. The result is a new vector which consists of the sums of the individual elements of the two vectors.
26.3.85
Declaration: operator operator +(Tvector4_double, Double): Tvector4_double (const x: Tvector4_doubl y: Double) : Tvector4_double 827
Visibility: default Description: This operator allows you to add a scalar value to a vector. The scalar is added to all elements of the vector, the result is returned as a new vector.
26.3.86
Declaration: operator operator +(Tvector4_double, Tvector4_double): Tvector4_double (const x: Tvect const y: Tvecto : Tvector4_dou Visibility: default Description: This operator allows you to add two four-dimensional vectors with single precision together. The result is a new vector which consists of the sums of the individual elements of the two vectors.
26.3.87
Declaration: operator operator +(Tvector4_extended, extended): Tvector4_extended (const x: Tvector4 y: extended) : Tvector4_extend Visibility: default Description: This operator allows you to add a scalar value to a vector. The scalar is added to all elements of the vector, the result is returned as a new vector.
26.3.88
Declaration:
operator (const x: const y: : Tvecto Visibility: default Description: This operator allows you to add two two-dimensional vectors with extended precision together. The result is a new vector which consists of the sums of the individual elements of the two vectors.
26.3.89
Declaration: operator operator +(Tvector4_single, single): Tvector4_single (const x: Tvector4_singl y: single) : Tvector4_single 828
Visibility: default Description: This operator allows you to add a scalar value to a vector. The scalar is added to all elements of the vector, the result is returned as a new vector.
26.3.90
Declaration: operator operator +(Tvector4_single, Tvector4_single): Tvector4_single (const x: Tvect const y: Tvecto : Tvector4_sin Visibility: default Description: This operator allows you to add two four-dimensional vectors with single precision together. The result is a new vector which consists of the sums of the individual elements of the two vectors.
26.3.91
Synopsis: Negate two-dimensional double precision matrix. Declaration: operator operator -(Tmatrix2_double): Tmatrix2_double (const m1: Tmatrix2_double) : Tmatrix2_double Visibility: default Description: This operation returns a matrix with all elements negated.
26.3.92
Declaration: operator operator -(Tmatrix2_double, Double): Tmatrix2_double (const m: Tmatrix2_doubl const x: Double) : Tmatrix2_double Visibility: default Description: This operator allows you to subtract a scalar value from a matrix. The scalar is subtracted from all elements of the matrix, the result is returned as a new matrix.
26.3.93
Declaration: operator operator -(Tmatrix2_double, Tmatrix2_double): Tmatrix2_double (const m1: Tmat const m2: Tmatr : Tmatrix2_dou Visibility: default Description: This operator allows you to subtract a two-dimensional double precision matrix from another. A new matrix is returned with all elements of the two matrices subtracted from each other. 829
26.3.94
Declaration: operator operator -(Tmatrix2_extended): Tmatrix2_extended (const m1: Tmatrix2_extended : Tmatrix2_extended Visibility: default Description: This operation returns a matrix with all elements negated.
26.3.95
Declaration: operator operator -(Tmatrix2_extended, extended): Tmatrix2_extended (const m: Tmatrix2 const x: extended) : Tmatrix2_extend Visibility: default Description: This operator allows you to subtract a scalar value from a matrix. The scalar is subtracted from all elements of the matrix, the result is returned as a new matrix.
26.3.96
Declaration:
operator (const m1 const m2: : Tmatri Visibility: default Description: This operator allows you to subtract a two-dimensional extended precision matrix from another. A new matrix is returned with all elements of the two matrices subtracted from each other.
26.3.97
Synopsis: Negate two-dimensional single precision matrix. Declaration: operator operator -(Tmatrix2_single): Tmatrix2_single (const m1: Tmatrix2_single) : Tmatrix2_single Visibility: default Description: This operation returns a matrix with all elements negated.
830
26.3.98
Declaration: operator operator -(Tmatrix2_single, single): Tmatrix2_single (const m: Tmatrix2_singl const x: single) : Tmatrix2_single Visibility: default Description: This operator allows you to subtract a scalar value from a matrix. The scalar is subtracted from all elements of the matrix, the result is returned as a new matrix.
26.3.99
Declaration: operator operator -(Tmatrix2_single, Tmatrix2_single): Tmatrix2_single (const m1: Tmat const m2: Tmatr : Tmatrix2_sin Visibility: default Description: This operator allows you to subtract a two-dimensional single precision matrix from another. A new matrix is returned with all elements of the two matrices subtracted from each other.
26.3.100
Synopsis: Negate three-dimensional double precision matrix. Declaration: operator operator -(Tmatrix3_double): Tmatrix3_double (const m1: Tmatrix3_double) : Tmatrix3_double Visibility: default Description: This operation returns a matrix with all elements negated.
26.3.101
Declaration: operator operator -(Tmatrix3_double, Double): Tmatrix3_double (const m: Tmatrix3_doubl const x: Double) : Tmatrix3_double Visibility: default Description: This operator allows you to subtract a scalar value from a matrix. The scalar is subtracted from all elements of the matrix, the result is returned as a new matrix.
831
26.3.102
Declaration: operator operator -(Tmatrix3_double, Tmatrix3_double): Tmatrix3_double (const m1: Tmat const m2: Tmatr : Tmatrix3_dou Visibility: default Description: This operator allows you to subtract a three-dimensional double precision matrix from another. A new matrix is returned with all elements of the two matrices subtracted from each other.
26.3.103
Declaration: operator operator -(Tmatrix3_extended): Tmatrix3_extended (const m1: Tmatrix3_extended : Tmatrix3_extended Visibility: default Description: This operation returns a matrix with all elements negated.
26.3.104
Declaration: operator operator -(Tmatrix3_extended, extended): Tmatrix3_extended (const m: Tmatrix3 const x: extended) : Tmatrix3_extend Visibility: default Description: This operator allows you to substract a scalar value from a matrix. The scalar is subtracted from all elements of the matrix, the result is returned as a new matrix.
26.3.105
Declaration:
operator (const m1 const m2: : Tmatri Visibility: default Description: This operator allows you to subtract a three-dimensional extended precision matrix from another. A new matrix is returned with all elements of the two matrices subtracted from each other.
832
26.3.106
Synopsis: Negate three-dimensional single precision matrix. Declaration: operator operator -(Tmatrix3_single): Tmatrix3_single (const m1: Tmatrix3_single) : Tmatrix3_single Visibility: default Description: This operation returns a matrix with all elements negated.
26.3.107
Declaration: operator operator -(Tmatrix3_single, single): Tmatrix3_single (const m: Tmatrix3_singl const x: single) : Tmatrix3_single Visibility: default Description: This operator allows you to subtract a scalar value from a matrix. The scalar is subtracted from all elements of the matrix, the result is returned as a new matrix.
26.3.108
Declaration: operator operator -(Tmatrix3_single, Tmatrix3_single): Tmatrix3_single (const m1: Tmat const m2: Tmatr : Tmatrix3_sin Visibility: default Description: This operator allows you to subtract a three-dimensional single precision matrix from another. A new matrix is returned with all elements of the two matrices subtracted from each other.
26.3.109
Synopsis: Negate four-dimensional double precision matrix. Declaration: operator operator -(Tmatrix4_double): Tmatrix4_double (const m1: Tmatrix4_double) : Tmatrix4_double Visibility: default Description: This operation returns a matrix with all elements negated.
833
26.3.110
Declaration: operator operator -(Tmatrix4_double, Double): Tmatrix4_double (const m: Tmatrix4_doubl const x: Double) : Tmatrix4_double Visibility: default Description: This operator allows you to subtract a scalar value from a matrix. The scalar is subtracted from all elements of the matrix, the result is returned as a new matrix.
26.3.111
Declaration: operator operator -(Tmatrix4_double, Tmatrix4_double): Tmatrix4_double (const m1: Tmat const m2: Tmatr : Tmatrix4_dou Visibility: default Description: This operator allows you to subtract a four-dimensional double precision matrix from another. A new matrix is returned with all elements of the two matrices subtracted from each other.
26.3.112
Declaration: operator operator -(Tmatrix4_extended): Tmatrix4_extended (const m1: Tmatrix4_extended : Tmatrix4_extended Visibility: default Description: This operation returns a matrix with all elements negated.
26.3.113
Declaration: operator operator -(Tmatrix4_extended, extended): Tmatrix4_extended (const m: Tmatrix4 const x: extended) : Tmatrix4_extend Visibility: default Description: This operator allows you to subtract a scalar value from a matrix. The scalar is subtracted from all elements of the matrix, the result is returned as a new matrix.
834
26.3.114
Declaration:
operator (const m1 const m2: : Tmatri Visibility: default Description: This operator allows you to subtract a four-dimensional extended precision matrix from another. A new matrix is returned with all elements of the two matrices subtracted from each other.
26.3.115
Synopsis: Negate four-dimensional single precision matrix. Declaration: operator operator -(Tmatrix4_single): Tmatrix4_single (const m1: Tmatrix4_single) : Tmatrix4_single Visibility: default Description: This operation returns a matrix with all elements negated.
26.3.116
Declaration: operator operator -(Tmatrix4_single, single): Tmatrix4_single (const m: Tmatrix4_singl const x: single) : Tmatrix4_single Visibility: default Description: This operator allows you to subtract a scalar value from a matrix. The scalar is subtracted from all elements of the matrix, the result is returned as a new matrix.
26.3.117
Declaration: operator operator -(Tmatrix4_single, Tmatrix4_single): Tmatrix4_single (const m1: Tmat const m2: Tmatr : Tmatrix4_sin Visibility: default Description: This operator allows you to subtract a four-dimensional single precision matrix from another. A new matrix is returned with all elements of the two matrices subtracted from each other.
835
26.3.118
Synopsis: Negate two-dimensional vector. Declaration: operator operator -(Tvector2_double): Tvector2_double (const x: Tvector2_double) : Tvector2_double Visibility: default Description: This operation returns a vector in the opposite direction of the vector that is passed. In order to do so, all values in the vector are negated.
26.3.119
Declaration: operator operator -(Tvector2_double, Double): Tvector2_double (const x: Tvector2_doubl y: Double) : Tvector2_double Visibility: default Description: This operator allows you to subtract a scalar value from a vector. The scalar is subtracted from all elements of the vector, the result is returned as a new vector.
26.3.120
Declaration: operator operator -(Tvector2_double, Tvector2_double): Tvector2_double (const x: Tvect const y: Tvecto : Tvector2_dou Visibility: default Description: This operator allows you to subtract two two-dimensional vectors with double precision from each other. The result is a new vector which consists of the difference of the individual elements of the two vectors.
26.3.121
Declaration: operator operator -(Tvector2_extended): Tvector2_extended (const x: Tvector2_extended) : Tvector2_extended Visibility: default Description: This operation returns a vector in the opposite direction of the vector that is passed. In order to do so, all values in the vector are negated.
836
26.3.122
Declaration: operator operator -(Tvector2_extended, extended): Tvector2_extended (const x: Tvector2 y: extended) : Tvector2_extend Visibility: default Description: This operator allows you to subtract a scalar value from a vector. The scalar is subtracted from all elements of the vector, the result is returned as a new vector.
26.3.123
Declaration:
operator (const x: const y: : Tvecto Visibility: default Description: This operator allows you to subtract two two-dimensional vectors with extended precision from each other. The result is a new vector which consists of the difference of the individual elements of the two vectors.
26.3.124
Synopsis: Negate two-dimensional vector. Declaration: operator operator -(Tvector2_single): Tvector2_single (const x: Tvector2_single) : Tvector2_single Visibility: default Description: This operation returns a vector in the opposite direction of the vector that is passed. In order to do so, all values in the vector are negated.
26.3.125
Declaration: operator operator -(Tvector2_single, single): Tvector2_single (const x: Tvector2_singl y: single) : Tvector2_single Visibility: default Description: This operator allows you to subtract a scalar value from a vector. The scalar is subtracted from all elements of the vector, the result is returned as a new vector.
837
26.3.126
Declaration: operator operator -(Tvector2_single, Tvector2_single): Tvector2_single (const x: Tvect const y: Tvecto : Tvector2_sin Visibility: default Description: This operator allows you to subtract two two-dimensional vectors with single precision from each other. The result is a new vector which consists of the difference of the individual elements of the two vectors.
26.3.127
Synopsis: Negate three-dimensional vector. Declaration: operator operator -(Tvector3_double): Tvector3_double (const x: Tvector3_double) : Tvector3_double Visibility: default Description: This operation returns a vector in the opposite direction of the vector that is passed. In order to do so, all values in the vector are negated.
26.3.128
Declaration: operator operator -(Tvector3_double, Double): Tvector3_double (const x: Tvector3_doubl y: Double) : Tvector3_double Visibility: default Description: This operator allows you to subtract a scalar value from a vector. The scalar is subtracted from all elements of the vector, the result is returned as a new vector.
26.3.129
Declaration: operator operator -(Tvector3_double, Tvector3_double): Tvector3_double (const x: Tvect const y: Tvecto : Tvector3_dou Visibility: default Description: This operator allows you to subtract two two-dimensional vectors with double precision from each other. The result is a new vector which consists of the difference of the individual elements of the two vectors.
838
26.3.130
Declaration: operator operator -(Tvector3_extended): Tvector3_extended (const x: Tvector3_extended) : Tvector3_extended Visibility: default Description: This operation returns a vector in the opposite direction of the vector that is passed. In order to do so, all values in the vector are negated.
26.3.131
Declaration: operator operator -(Tvector3_extended, extended): Tvector3_extended (const x: Tvector3 y: extended) : Tvector3_extend Visibility: default Description: This operator allows you to subtract a scalar value from a vector. The scalar is subtracted from all elements of the vector, the result is returned as a new vector.
26.3.132
Declaration:
operator (const x: const y: : Tvecto Visibility: default Description: This operator allows you to subtract two three-dimensional vectors with extended precision from each other. The result is a new vector which consists of the difference of the individual elements of the two vectors.
26.3.133
Synopsis: Negate three-dimensional vector. Declaration: operator operator -(Tvector3_single): Tvector3_single (const x: Tvector3_single) : Tvector3_single Visibility: default Description: This operation returns a vector in the opposite direction of the vector that is passed. In order to do so, all values in the vector are negated.
839
26.3.134
Declaration: operator operator -(Tvector3_single, single): Tvector3_single (const x: Tvector3_singl y: single) : Tvector3_single Visibility: default Description: This operator allows you to subtract a scalar value from a vector. The scalar is subtracted from all elements of the vector, the result is returned as a new vector.
26.3.135
Declaration: operator operator -(Tvector3_single, Tvector3_single): Tvector3_single (const x: Tvect const y: Tvecto : Tvector3_sin Visibility: default Description: This operator allows you to subtract two three-dimensional vectors with single precision from each other. The result is a new vector which consists of the difference of the individual elements of the two vectors.
26.3.136
Synopsis: Negate four-dimensional vector. Declaration: operator operator -(Tvector4_double): Tvector4_double (const x: Tvector4_double) : Tvector4_double Visibility: default Description: This operation returns a vector in the opposite direction of the vector that is passed. In order to do so, all values in the vector are negated.
26.3.137
Declaration: operator operator -(Tvector4_double, Double): Tvector4_double (const x: Tvector4_doubl y: Double) : Tvector4_double Visibility: default Description: This operator allows you to subtract a scalar value from a vector. The scalar is subtracted from all elements of the vector, the result is returned as a new vector.
840
26.3.138
Declaration: operator operator -(Tvector4_double, Tvector4_double): Tvector4_double (const x: Tvect const y: Tvecto : Tvector4_dou Visibility: default Description: This operator allows you to subtract two four-dimensional vectors with double precision from each other. The result is a new vector which consists of the difference of the individual elements of the two vectors.
26.3.139
Declaration: operator operator -(Tvector4_extended): Tvector4_extended (const x: Tvector4_extended) : Tvector4_extended Visibility: default Description: This operation returns a vector in the opposite direction of the vector that is passed. In order to do so, all values in the vector are negated.
26.3.140
Declaration: operator operator -(Tvector4_extended, extended): Tvector4_extended (const x: Tvector4 y: extended) : Tvector4_extend Visibility: default Description: This operator allows you to subtract a scalar value from a vector. The scalar is subtracted from all elements of the vector, the result is returned as a new vector.
26.3.141
Declaration:
operator (const x: const y: : Tvecto Visibility: default Description: This operator allows you to subtract two four-dimensional vectors with extended precision from each other. The result is a new vector which consists of the difference of the individual elements of the two vectors. 841
26.3.142
Synopsis: Negate four-dimensional vector. Declaration: operator operator -(Tvector4_single): Tvector4_single (const x: Tvector4_single) : Tvector4_single Visibility: default Description: This operation returns a vector in the opposite direction of the vector that is passed. In order to do so, all values in the vector are negated.
26.3.143
Declaration: operator operator -(Tvector4_single, single): Tvector4_single (const x: Tvector4_singl y: single) : Tvector4_single Visibility: default Description: This operator allows you to subtract a scalar value from a vector. The scalar is subtracted from all elements of the vector, the result is returned as a new vector.
26.3.144
Declaration: operator operator -(Tvector4_single, Tvector4_single): Tvector4_single (const x: Tvect const y: Tvecto : Tvector4_sin Visibility: default Description: This operator allows you to subtract two four-dimensional vectors with single precision from each other. The result is a new vector which consists of the difference of the individual elements of the two vectors.
26.3.145
Declaration: operator operator /(Tmatrix2_double, Double): Tmatrix2_double (const m: Tmatrix2_doubl const x: Double) : Tmatrix2_double Visibility: default Description: This operator allows you to divide a matrix by a scalar. All elements in the matrix are divided by the scalar, the result is returned as a new matrix.
842
26.3.146
Declaration: operator operator /(Tmatrix2_extended, extended): Tmatrix2_extended (const m: Tmatrix2 const x: extended) : Tmatrix2_extend Visibility: default Description: This operator allows you to divide a matrix by a scalar. All elements in the matrix are divided by the scalar, the result is returned as a new matrix.
26.3.147
Declaration: operator operator /(Tmatrix2_single, single): Tmatrix2_single (const m: Tmatrix2_singl const x: single) : Tmatrix2_single Visibility: default Description: This operator allows you to divide a matrix by a scalar. All elements in the matrix are divided by the scalar, the result is returned as a new matrix.
26.3.148
Declaration: operator operator /(Tmatrix3_double, Double): Tmatrix3_double (const m: Tmatrix3_doubl const x: Double) : Tmatrix3_double Visibility: default Description: This operator allows you to divide a matrix by a scalar. All elements in the matrix are divided by the scalar, the result is returned as a new matrix.
26.3.149
Declaration: operator operator /(Tmatrix3_extended, extended): Tmatrix3_extended (const m: Tmatrix3 const x: extended) : Tmatrix3_extend Visibility: default Description: This operator allows you to divide a matrix by a scalar. All elements in the matrix are divided by the scalar, the result is returned as a new matrix.
843
26.3.150
Declaration: operator operator /(Tmatrix3_single, single): Tmatrix3_single (const m: Tmatrix3_singl const x: single) : Tmatrix3_single Visibility: default Description: This operator allows you to divide a matrix by a scalar. All elements in the matrix are divided by the scalar, the result is returned as a new matrix.
26.3.151
Declaration: operator operator /(Tmatrix4_double, Double): Tmatrix4_double (const m: Tmatrix4_doubl const x: Double) : Tmatrix4_double Visibility: default Description: This operator allows you to divide a matrix by a scalar. All elements in the matrix are divided by the scalar, the result is returned as a new matrix.
26.3.152
Declaration: operator operator /(Tmatrix4_extended, extended): Tmatrix4_extended (const m: Tmatrix4 const x: extended) : Tmatrix4_extend Visibility: default Description: This operator allows you to divide a matrix by a scalar. All elements in the matrix are divided by the scalar, the result is returned as a new matrix.
26.3.153
Declaration: operator operator /(Tmatrix4_single, single): Tmatrix4_single (const m: Tmatrix4_singl const x: single) : Tmatrix4_single Visibility: default Description: This operator allows you to divide a matrix by a scalar. All elements in the matrix are divided by the scalar, the result is returned as a new matrix.
844
26.3.154
Declaration: operator operator /(Tvector2_double, Double): Tvector2_double (const x: Tvector2_doubl y: Double) : Tvector2_double Visibility: default Description: This operator allows you to divide a vector by a scalar value. Each vector element is divided by the scalar value; the result is returned as a new vector.
26.3.155
Declaration: operator operator /(Tvector2_extended, extended): Tvector2_extended (const x: Tvector2 y: extended) : Tvector2_extend Visibility: default Description: This operator allows you to divide a vector by a scalar value. Each vector element is divided by the scalar value; the result is returned as a new vector.
26.3.156
Declaration: operator operator /(Tvector2_single, single): Tvector2_single (const x: Tvector2_singl y: single) : Tvector2_single Visibility: default Description: This operator allows you to divide a vector by a scalar value. Each vector element is divided by the scalar value; the result is returned as a new vector.
26.3.157
Declaration: operator operator /(Tvector3_double, Double): Tvector3_double (const x: Tvector3_doubl y: Double) : Tvector3_double Visibility: default Description: This operator allows you to divide a vector by a scalar value. Each vector element is divided by the scalar value; the result is returned as a new vector.
845
26.3.158
Declaration: operator operator /(Tvector3_extended, extended): Tvector3_extended (const x: Tvector3 y: extended) : Tvector3_extend Visibility: default Description: This operator allows you to divide a vector by a scalar value. Each vector element is divided by the scalar value; the result is returned as a new vector.
26.3.159
Declaration: operator operator /(Tvector3_single, single): Tvector3_single (const x: Tvector3_singl y: single) : Tvector3_single Visibility: default Description: This operator allows you to divide a vector by a scalar value. Each vector element is divided by the scalar value; the result is returned as a new vector.
26.3.160
Declaration: operator operator /(Tvector4_double, Double): Tvector4_double (const x: Tvector4_doubl y: Double) : Tvector4_double Visibility: default Description: This operator allows you to divide a vector by a scalar value. Each vector element is divided by the scalar value; the result is returned as a new vector.
26.3.161
Declaration: operator operator /(Tvector4_extended, extended): Tvector4_extended (const x: Tvector4 y: extended) : Tvector4_extend Visibility: default Description: This operator allows you to divide a vector by a scalar value. Each vector element is divided by the scalar value; the result is returned as a new vector.
846
26.3.162
Declaration: operator operator /(Tvector4_single, single): Tvector4_single (const x: Tvector4_singl y: single) : Tvector4_single Visibility: default Description: This operator allows you to divide a vector by a scalar value. Each vector element is divided by the scalar value; the result is returned as a new vector.
26.3.163
Synopsis: Allow assignment of two-dimensional double precision matrix to two-dimensional extended precision matrix Declaration: operator operator :=(Tmatrix2_double): Tmatrix2_extended (const v: Tmatrix2_double) : Tmatrix2_extended Visibility: default Description: This operator allows you to use a two-dimensional matrix with double precision values wherever a two-dimensional matrix with extended precision is expected.
26.3.164
Synopsis: Allow assignment of two-dimensional double precision matrix to two-dimensional single precision matrix Declaration: operator operator :=(Tmatrix2_double): Tmatrix2_single (const v: Tmatrix2_double) : Tmatrix2_single Visibility: default Description: This operator allows you to use a two-dimensional matrix with double precision values wherever a two-dimensional matrix with single precision is expected. Some accurace is lost because of the conversion.
26.3.165
Synopsis: Allow assignment of two-dimensional double precision matrix to three-dimensional double precision matrix Declaration: operator operator :=(Tmatrix2_double): Tmatrix3_double (const v: Tmatrix2_double) : Tmatrix3_double Visibility: default Description: This operator allows you to use a two-dimensional matrix with double precision values wherever a three-dimensional matrix with double precision is expected. The extra elds are set to 0.
847
26.3.166
Synopsis: Allow assignment of two-dimensional double precision matrix to three-dimensional extended precision matrix Declaration: operator operator :=(Tmatrix2_double): Tmatrix3_extended (const v: Tmatrix2_double) : Tmatrix3_extended Visibility: default Description: This operator allows you to use a two-dimensional matrix with double precision values wherever a three-dimensional matrix with extended precision is expected. The extra elds are set to 0.
26.3.167
Synopsis: Allow assignment of two-dimensional single precision matrix to three-dimensional single precision matrix Declaration: operator operator :=(Tmatrix2_double): Tmatrix3_single (const v: Tmatrix2_double) : Tmatrix3_single Visibility: default Description: This operator allows you to use a two-dimensional matrix with single precision values wherever a three-dimensional matrix with single precision is expected. The extra elds are set to 0 and some accuracy is lost because of the conversion.
26.3.168
Synopsis: Allow assignment of two-dimensional double precision matrix to four-dimensional double precision matrix Declaration: operator operator :=(Tmatrix2_double): Tmatrix4_double (const v: Tmatrix2_double) : Tmatrix4_double Visibility: default Description: This operator allows you to use a two-dimensional matrix with double precision values wherever a four-dimensional matrix with double precision is expected. The extra elds are set to 0.
26.3.169
Synopsis: Allow assignment of two-dimensional double precision matrix to four-dimensional extended precision matrix Declaration: operator operator :=(Tmatrix2_double): Tmatrix4_extended (const v: Tmatrix2_double) : Tmatrix4_extended Visibility: default Description: This operator allows you to use a two-dimensional matrix with double precision values wherever a four-dimensional matrix with extended precision is expected. The extra elds are set to 0.
848
26.3.170
Synopsis: Allow assignment of two-dimensional double precision matrix to four-dimensional single precision matrix Declaration: operator operator :=(Tmatrix2_double): Tmatrix4_single (const v: Tmatrix2_double) : Tmatrix4_single Visibility: default Description: This operator allows you to use a two-dimensional matrix with double precision values wherever a four-dimensional matrix with single precision is expected. The extra elds are set to 0 and some precision is lost because of the conversion.
26.3.171
Synopsis: Allow assignment of two-dimensional extended precision matrix to two-dimensional double precision matrix Declaration: operator operator :=(Tmatrix2_extended): Tmatrix2_double (const v: Tmatrix2_extended) : Tmatrix2_double Visibility: default Description: This operator allows you to use a two-dimensional two with extended precision values wherever a two-dimensional matrix with double precision is expected. Some accuracy is lost because of the conversion.
26.3.172
Synopsis: Allow assignment of two-dimensional extended precision matrix to two-dimensional single precision matrix Declaration: operator operator :=(Tmatrix2_extended): Tmatrix2_single (const v: Tmatrix2_extended) : Tmatrix2_single Visibility: default Description: This operator allows you to use a two-dimensional matrix with extended precision values wherever a two-dimensional matrix with single precision is expected. Some accuracy is lost because of the conversion.
26.3.173
Synopsis: Allow assignment of two-dimensional extended precision matrix to three-dimensional double precision matrix Declaration: operator operator :=(Tmatrix2_extended): Tmatrix3_double (const v: Tmatrix2_extended) : Tmatrix3_double Visibility: default
849
Description: This operator allows you to use a two-dimensional matrix with extended precision values wherever a three-dimensional matrix with double precision is expected. The extra elds are set to 0 and some accuracy is lost because of the conversion.
26.3.174
Synopsis: Allow assignment of two-dimensional extended precision matrix to three-dimensional extended precision matrix
Declaration: operator operator :=(Tmatrix2_extended): Tmatrix3_extended (const v: Tmatrix2_extended : Tmatrix3_extended Visibility: default Description: This operator allows you to use a two-dimensional matrix with extended precision values wherever a three-dimensional matrix with extended precision is expected. The extra elds are set to 0.
26.3.175
Synopsis: Allow assignment of two-dimensional extended precision matrix to three-dimensional single precision matrix Declaration: operator operator :=(Tmatrix2_extended): Tmatrix3_single (const v: Tmatrix2_extended) : Tmatrix3_single Visibility: default Description: This operator allows you to use a two-dimensional matrix with extended precision values wherever a three-dimensional matrix with single precision is expected. The extra elds are set to 0 and some accuracy is lost because of the conversion.
26.3.176
Synopsis: Allow assignment of two-dimensional extended precision matrix to four-dimensional double precision matrix Declaration: operator operator :=(Tmatrix2_extended): Tmatrix4_double (const v: Tmatrix2_extended) : Tmatrix4_double Visibility: default Description: This operator allows you to use a two-dimensional matrix with extended precision values wherever a four-dimensional matrix with double precision is expected. The extra elds are set to 0 and some accuracy is lost because of the conversion.
26.3.177
Synopsis: Allow assignment of two-dimensional extended precision matrix to four-dimensional extended precision matrix
Visibility: default Description: This operator allows you to use a two-dimensional matrix with single precision values wherever a four-dimensional matrix with single precision is expected. The extra elds are set to 0.
26.3.178
Synopsis: Allow assignment of two-dimensional extended precision matrix to four-dimensional single precision matrix Declaration: operator operator :=(Tmatrix2_extended): Tmatrix4_single (const v: Tmatrix2_extended) : Tmatrix4_single Visibility: default Description: This operator allows you to use a two-dimensional matrix with extended precision values wherever a four-dimensional matrix with single precision is expected. The extra elds are set to 0 and some precision is lost because of the conversion.
26.3.179
Synopsis: Allow assignment of two-dimensional single precision matrix to two-dimensional double precision matrix Declaration: operator operator :=(Tmatrix2_single): Tmatrix2_double (const v: Tmatrix2_single) : Tmatrix2_double Visibility: default Description: This operator allows you to use a two-dimensional matrix with single precision values wherever a two-dimensional matrix with double precision is expected.
26.3.180
Synopsis: Allow assignment of two-dimensional single precision matrix to two-dimensional extended precision matrix Declaration: operator operator :=(Tmatrix2_single): Tmatrix2_extended (const v: Tmatrix2_single) : Tmatrix2_extended Visibility: default Description: This operator allows you to use a two-dimensional matrix with single precision values wherever a two-dimensional matrix with extended precision is expected.
26.3.181
Synopsis: Allow assignment of two-dimensional single precision matrix to three-dimensional double precision matrix Declaration: operator operator :=(Tmatrix2_single): Tmatrix3_double (const v: Tmatrix2_single) : Tmatrix3_double 851
Visibility: default Description: This operator allows you to use a two-dimensional matrix with single precision values wherever a three-dimensional matrix with double precision is expected. The extra elds are set to 0.
26.3.182
Synopsis: Allow assignment of two-dimensional single precision matrix to three-dimensional extended precision matrix Declaration: operator operator :=(Tmatrix2_single): Tmatrix3_extended (const v: Tmatrix2_single) : Tmatrix3_extended Visibility: default Description: This operator allows you to use a two-dimensional matrix with single precision values wherever a three-dimensional matrix with extended precision is expected. The extra elds are set to 0.
26.3.183
Synopsis: Allow assignment of two-dimensional single precision matrix to three-dimensional single precision matrix Declaration: operator operator :=(Tmatrix2_single): Tmatrix3_single (const v: Tmatrix2_single) : Tmatrix3_single Visibility: default Description: This operator allows you to use a two-dimensional matrix with single precision values wherever a three-dimensional matrix with single precision is expected. The extra elds are set to 0.
26.3.184
Synopsis: Allow assignment of two-dimensional single precision matrix to four-dimensional double precision matrix Declaration: operator operator :=(Tmatrix2_single): Tmatrix4_double (const v: Tmatrix2_single) : Tmatrix4_double Visibility: default Description: This operator allows you to use a two-dimensional matrix with single precision values wherever a four-dimensional matrix with double precision is expected. The extra elds are set to 0.
26.3.185
Synopsis: Allow assignment of two-dimensional single precision matrix to four-dimensional extended precision matrix Declaration: operator operator :=(Tmatrix2_single): Tmatrix4_extended (const v: Tmatrix2_single) : Tmatrix4_extended
852
Visibility: default Description: This operator allows you to use a two-dimensional matrix with single precision values wherever a four-dimensional matrix with extended precision is expected. The extra elds are set to 0.
26.3.186
Synopsis: Allow assignment of two-dimensional single precision matrix to four-dimensional single precision matrix Declaration: operator operator :=(Tmatrix2_single): Tmatrix4_single (const v: Tmatrix2_single) : Tmatrix4_single Visibility: default Description: This operator allows you to use a two-dimensional matrix with single precision values wherever a four-dimensional matrix with single precision is expected. The extra elds are set to 0.
26.3.187
Synopsis: Allow assignment of three-dimensional double precision matrix to two-dimensional double precision matrix Declaration: operator operator :=(Tmatrix3_double): Tmatrix2_double (const v: Tmatrix3_double) : Tmatrix2_double Visibility: default Description: This operator allows you to use a three-dimensional matrix with double precision values wherever a two-dimensional matrix with double precision is expected. The surplus elds are thrown away.
26.3.188
Synopsis: Allow assignment of three-dimensional double precision matrix to two-dimensional extended precision matrix Declaration: operator operator :=(Tmatrix3_double): Tmatrix2_extended (const v: Tmatrix3_double) : Tmatrix2_extended Visibility: default Description: This operator allows you to use a three-dimensional matrix with double precision values wherever a two-dimensional matrix with extended precision is expected. The surplus elds are thrown away.
26.3.189
Synopsis: Allow assignment of three-dimensional double precision matrix to two-dimensional single precision matrix Declaration: operator operator :=(Tmatrix3_double): Tmatrix2_single (const v: Tmatrix3_double) : Tmatrix2_single
853
Visibility: default Description: This operator allows you to use a three-dimensional matrix with double precision values wherever a two-dimensional matrix with single precision is expected. The surplus elds are thrown away and some accuracy is lost because of the conversion.
26.3.190
Synopsis: Allow assignment of three-dimensional double precision matrix to three-dimensional extended precision matrix Declaration: operator operator :=(Tmatrix3_double): Tmatrix3_extended (const v: Tmatrix3_double) : Tmatrix3_extended Visibility: default Description: This operator allows you to use a three-dimensional matrix with double precision values wherever a three-dimensional matrix with extended precision is expected.
26.3.191
Synopsis: Allow assignment of three-dimensional double precision matrix to three-dimensional single precision matrix Declaration: operator operator :=(Tmatrix3_double): Tmatrix3_single (const v: Tmatrix3_double) : Tmatrix3_single Visibility: default Description: This operator allows you to use a three-dimensional matrix with double precision values wherever a three-dimensional matrix with single precision is expected. Some precision is lost because of the conversion.
26.3.192
Synopsis: Allow assignment of three-dimensional double precision matrix to four-dimensional double precision matrix Declaration: operator operator :=(Tmatrix3_double): Tmatrix4_double (const v: Tmatrix3_double) : Tmatrix4_double Visibility: default Description: This operator allows you to use a three-dimensional matrix with double precision values wherever a four-dimensional matrix with double precision is expected.
26.3.193
Synopsis: Allow assignment of three-dimensional double precision matrix to four-dimensional extended precision matrix
854
Declaration: operator operator :=(Tmatrix3_double): Tmatrix4_extended (const v: Tmatrix3_double) : Tmatrix4_extended Visibility: default Description: This operator allows you to use a three-dimensional matrix with double precision values wherever a four-dimensional matrix with extended precision is expected.
26.3.194
Synopsis: Allow assignment of three-dimensional double precision matrix to four-dimensional single precision matrix Declaration: operator operator :=(Tmatrix3_double): Tmatrix4_single (const v: Tmatrix3_double) : Tmatrix4_single Visibility: default Description: This operator allows you to use a three-dimensional matrix with double precision values wherever a four-dimensional matrix with single precision is expected. Some precision is lost because of the conversion.
26.3.195
Synopsis: Allow assignment of three-dimensional extended precision matrix to two-dimensional double precision matrix Declaration: operator operator :=(Tmatrix3_extended): Tmatrix2_double (const v: Tmatrix3_extended) : Tmatrix2_double Visibility: default Description: This operator allows you to use a three-dimensional matrix with extended precision values wherever a two-dimensional matrix with double precision is expected. The surplus elds are thrown away and some accuracy is lost becuase of the conversion.
26.3.196
Synopsis: Allow assignment of three-dimensional extended precision matrix to two-dimensional extended precision matrix
Declaration: operator operator :=(Tmatrix3_extended): Tmatrix2_extended (const v: Tmatrix3_extended : Tmatrix2_extended Visibility: default Description: This operator allows you to use a three-dimensional matrix with extended precision values wherever a two-dimensional matrix with extended precision is expected. The surplus elds are thrown away.
855
26.3.197
Synopsis: Allow assignment of three-dimensional extended precision matrix to two-dimensional single precision matrix Declaration: operator operator :=(Tmatrix3_extended): Tmatrix2_single (const v: Tmatrix3_extended) : Tmatrix2_single Visibility: default Description: This operator allows you to use a three-dimensional matrix with extended precision values wherever a two-dimensional matrix with single precision is expected. The surplus elds are thrown away and some precision is lost because of the conversion.
26.3.198
Synopsis: Allow assignment of three-dimensional extended precision matrix to three-dimensional double precision matrix Declaration: operator operator :=(Tmatrix3_extended): Tmatrix3_double (const v: Tmatrix3_extended) : Tmatrix3_double Visibility: default Description: This operator allows you to use a three-dimensional matrix with extended precision values wherever a three-dimensional matrix with double precision is expected. Some precision is lost because of the conversion.
26.3.199
Synopsis: Allow assignment of three-dimensional extended precision matrix to three-dimensional single precision matrix Declaration: operator operator :=(Tmatrix3_extended): Tmatrix3_single (const v: Tmatrix3_extended) : Tmatrix3_single Visibility: default Description: This operator allows you to use a three-dimensional matrix with extended precision values wherever a three-dimensional matrix with single precision is expected. Some precision is lost because of the conversion.
26.3.200
Synopsis: Allow assignment of three-dimensional extended precision matrix to four-dimensional double precision matrix Declaration: operator operator :=(Tmatrix3_extended): Tmatrix4_double (const v: Tmatrix3_extended) : Tmatrix4_double Visibility: default Description: This operator allows you to use a three-dimensional matrix with extended precision values wherever a four-dimensional matrix with double precision is expected. Some precision is lost because of the conversion. 856
26.3.201
Synopsis: Allow assignment of three-dimensional extended precision matrix to four-dimensional extended precision matrix
Declaration: operator operator :=(Tmatrix3_extended): Tmatrix4_extended (const v: Tmatrix3_extended : Tmatrix4_extended Visibility: default Description: This operator allows you to use a three-dimensional matrix with extended precision values wherever a four-dimensional matrix with extended precision is expected.
26.3.202
Synopsis: Allow assignment of three-dimensional extended precision matrix to four-dimensional single precision matrix Declaration: operator operator :=(Tmatrix3_extended): Tmatrix4_single (const v: Tmatrix3_extended) : Tmatrix4_single Visibility: default Description: This operator allows you to use a three-dimensional matrix with extended precision values wherever a four-dimensional matrix with single precision is expected. Some precision is lost because of the conversion.
26.3.203
Synopsis: Allow assignment of three-dimensional single precision matrix to two-dimensional double precision matrix Declaration: operator operator :=(Tmatrix3_single): Tmatrix2_double (const v: Tmatrix3_single) : Tmatrix2_double Visibility: default Description: This operator allows you to use a three-dimensional matrix with single precision values wherever a two-dimensional matrix with double precision is expected. The surplus elds are thrown away.
26.3.204
Synopsis: Allow assignment of three-dimensional single precision matrix to two-dimensional extended precision matrix Declaration: operator operator :=(Tmatrix3_single): Tmatrix2_extended (const v: Tmatrix3_single) : Tmatrix2_extended Visibility: default Description: This operator allows you to use a three-dimensional matrix with single precision values wherever a two-dimensional matrix with extended precision is expected. The surplus elds are thrown away.
857
26.3.205
Synopsis: Allow assignment of three-dimensional single precision matrix to two-dimensional single precision matrix Declaration: operator operator :=(Tmatrix3_single): Tmatrix2_single (const v: Tmatrix3_single) : Tmatrix2_single Visibility: default Description: This operator allows you to use a three-dimensional matrix with single precision values wherever a two-dimensional matrix with single precision is expected. The surplus elds are thrown away.
26.3.206
Synopsis: Allow assignment of three-dimensional single precision matrix to three-dimensional double precision matrix Declaration: operator operator :=(Tmatrix3_single): Tmatrix3_double (const v: Tmatrix3_single) : Tmatrix3_double Visibility: default Description: This operator allows you to use a three-dimensional matrix with single precision values wherever a three-dimensional matrix with double precision is expected.
26.3.207
Synopsis: Allow assignment of three-dimensional single precision matrix to three-dimensional extended precision matrix Declaration: operator operator :=(Tmatrix3_single): Tmatrix3_extended (const v: Tmatrix3_single) : Tmatrix3_extended Visibility: default Description: This operator allows you to use a three-dimensional matrix with single precision values wherever a three-dimensional matrix with extended precision is expected.
26.3.208
Synopsis: Allow assignment of three-dimensional single precision matrix to four-dimensional double precision matrix Declaration: operator operator :=(Tmatrix3_single): Tmatrix4_double (const v: Tmatrix3_single) : Tmatrix4_double Visibility: default Description: This operator allows you to use a three-dimensional matrix with single precision values wherever a four-dimensional matrix with double precision is expected.
858
26.3.209
Synopsis: Allow assignment of three-dimensional single precision matrix to four-dimensional extended precision matrix Declaration: operator operator :=(Tmatrix3_single): Tmatrix4_extended (const v: Tmatrix3_single) : Tmatrix4_extended Visibility: default Description: This operator allows you to use a three-dimensional matrix with single precision values wherever a four-dimensional matrix with extended precision is expected.
26.3.210
Synopsis: Allow assignment of three-dimensional single precision matrix to four-dimensional single precision matrix Declaration: operator operator :=(Tmatrix3_single): Tmatrix4_single (const v: Tmatrix3_single) : Tmatrix4_single Visibility: default Description: This operator allows you to use a three-dimensional matrix with single precision values wherever a four-dimensional matrix with single precision is expected.
26.3.211
Synopsis: Allow assignment of four-dimensional double precision matrix to two-dimensional double precision matrix Declaration: operator operator :=(Tmatrix4_double): Tmatrix2_double (const v: Tmatrix4_double) : Tmatrix2_double Visibility: default Description: This operator allows you to use a four-dimensional matrix with double precision values wherever a two-dimensional matrix with double precision is expected. The surplus elds are thrown away.
26.3.212
Synopsis: Allow assignment of four-dimensional double precision matrix to two-dimensional extended precision matrix Declaration: operator operator :=(Tmatrix4_double): Tmatrix2_extended (const v: Tmatrix4_double) : Tmatrix2_extended Visibility: default Description: This operator allows you to use a four-dimensional matrix with double precision values wherever a two-dimensional matrix with extended precision is expected. The surplus elds are thrown away.
859
26.3.213
Synopsis: Allow assignment of four-dimensional double precision matrix to two-dimensional single precision matrix Declaration: operator operator :=(Tmatrix4_double): Tmatrix2_single (const v: Tmatrix4_double) : Tmatrix2_single Visibility: default Description: This operator allows you to use a four-dimensional matrix with double precision values wherever a two-dimensional matrix with single precision is expected. The surplus elds are thrown away and some precision is lost in the conversion.
26.3.214
Synopsis: Allow assignment of four-dimensional double precision matrix to three-dimensional double precision matrix Declaration: operator operator :=(Tmatrix4_double): Tmatrix3_double (const v: Tmatrix4_double) : Tmatrix3_double Visibility: default Description: This operator allows you to use a four-dimensional matrix with double precision values wherever a three-dimensional matrix with double precision is expected. The surplus elds are thrown away.
26.3.215
Synopsis: Allow assignment of four-dimensional double precision matrix to three-dimensional extended precision matrix Declaration: operator operator :=(Tmatrix4_double): Tmatrix3_extended (const v: Tmatrix4_double) : Tmatrix3_extended Visibility: default Description: This operator allows you to use a four-dimensional matrix with double precision values wherever a three-dimensional matrix with extended precision is expected. The surplus elds are thrown away.
26.3.216
Synopsis: Allow assignment of four-dimensional double precision matrix to three-dimensional single precision matrix Declaration: operator operator :=(Tmatrix4_double): Tmatrix3_single (const v: Tmatrix4_double) : Tmatrix3_single Visibility: default Description: This operator allows you to use a four-dimensional matrix with double precision values wherever a three-dimensional matrix with single precision is expected. The surplus elds are thrown away and some precision is lost because of the conversion. 860
26.3.217
Synopsis: Allow assignment of four-dimensional double precision matrix to four-dimensional extended precision matrix Declaration: operator operator :=(Tmatrix4_double): Tmatrix4_extended (const v: Tmatrix4_double) : Tmatrix4_extended Visibility: default Description: This operator allows you to use a four-dimensional matrix with double precision values wherever a four-dimensional matrix with extended precision is expected.
26.3.218
Synopsis: Allow assignment of four-dimensional single precision matrix to four-dimensional single precision matrix Declaration: operator operator :=(Tmatrix4_double): Tmatrix4_single (const v: Tmatrix4_double) : Tmatrix4_single Visibility: default Description: This operator allows you to use a four-dimensional matrix with double precision values wherever a four-dimensional matrix with single precision is expected. Some precision is lost because of the conversion.
26.3.219
Synopsis: Allow assignment of four-dimensional extended precision matrix to two-dimensional double precision matrix Declaration: operator operator :=(Tmatrix4_extended): Tmatrix2_double (const v: Tmatrix4_extended) : Tmatrix2_double Visibility: default Description: This operator allows you to use a four-dimensional matrix with extended precision values wherever a two-dimensional matrix with double precision is expected. The surplus elds are thrown away and some precision is lost in the conversion.
26.3.220
Synopsis: Allow assignment of four-dimensional extended precision matrix to two-dimensional extended precision matrix
Declaration: operator operator :=(Tmatrix4_extended): Tmatrix2_extended (const v: Tmatrix4_extended : Tmatrix2_extended Visibility: default Description: This operator allows you to use a four-dimensional matrix with single precision values wherever a two-dimensional matrix with single precision is expected. The surplus elds are thrown away. 861
26.3.221
Synopsis: Allow assignment of four-dimensional extended precision matrix to two-dimensional single precision matrix Declaration: operator operator :=(Tmatrix4_extended): Tmatrix2_single (const v: Tmatrix4_extended) : Tmatrix2_single Visibility: default Description: This operator allows you to use a four-dimensional matrix with extended precision values wherever a two-dimensional matrix with single precision is expected. The surplus elds are thrown away and some precision is lost in the conversion.
26.3.222
Synopsis: Allow assignment of four-dimensional extended precision matrix to three-dimensional double precision matrix Declaration: operator operator :=(Tmatrix4_extended): Tmatrix3_double (const v: Tmatrix4_extended) : Tmatrix3_double Visibility: default Description: This operator allows you to use a four-dimensional matrix with extended precision values wherever a three-dimensional matrix with double precision is expected. The surplus elds are thrown away.
26.3.223
Synopsis: Allow assignment of four-dimensional extended precision matrix to three-dimensional extended precision matrix
Declaration: operator operator :=(Tmatrix4_extended): Tmatrix3_extended (const v: Tmatrix4_extended : Tmatrix3_extended Visibility: default Description: This operator allows you to use a four-dimensional matrix with extended precision values wherever a three-dimensional matrix with double precision is expected. The surplus elds are thrown away.
26.3.224
Synopsis: Allow assignment of four-dimensional extended precision matrix to three-dimensional single precision matrix Declaration: operator operator :=(Tmatrix4_extended): Tmatrix3_single (const v: Tmatrix4_extended) : Tmatrix3_single Visibility: default Description: This operator allows you to use a four-dimensional matrix with extended precision values wherever a three-dimensional matrix with single precision is expected. The surplus elds are thrown away and some precision is lost because of the conversion. 862
26.3.225
Synopsis: Allow assignment of four-dimensional extended precision matrix to four-dimensional double precision matrix Declaration: operator operator :=(Tmatrix4_extended): Tmatrix4_double (const v: Tmatrix4_extended) : Tmatrix4_double Visibility: default Description: This operator allows you to use a four-dimensional matrix with extended precision values wherever a four-dimensional matrix with double precision is expected.
26.3.226
Synopsis: Allow assignment of four-dimensional extended precision matrix to four-dimensional single precision matrix Declaration: operator operator :=(Tmatrix4_extended): Tmatrix4_single (const v: Tmatrix4_extended) : Tmatrix4_single Visibility: default Description: This operator allows you to use a four-dimensional matrix with extended precision values wherever a four-dimensional matrix with single precision is expected. Some precision is lost because of the conversion.
26.3.227
Synopsis: Allow assignment of four-dimensional single precision matrix to two-dimensional double precision matrix Declaration: operator operator :=(Tmatrix4_single): Tmatrix2_double (const v: Tmatrix4_single) : Tmatrix2_double Visibility: default Description: This operator allows you to use a four-dimensional matrix with single precision values wherever a two-dimensional matrix with double precision is expected. The surplus elds are thrown away.
26.3.228
Synopsis: Allow assignment of four-dimensional single precision matrix to two-dimensional extended precision matrix Declaration: operator operator :=(Tmatrix4_single): Tmatrix2_extended (const v: Tmatrix4_single) : Tmatrix2_extended Visibility: default Description: This operator allows you to use a four-dimensional matrix with single precision values wherever a two-dimensional matrix with extended precision is expected. The surplus elds are thrown away.
863
26.3.229
Synopsis: Allow assignment of four-dimensional single precision matrix to two-dimensional single precision matrix Declaration: operator operator :=(Tmatrix4_single): Tmatrix2_single (const v: Tmatrix4_single) : Tmatrix2_single Visibility: default Description: This operator allows you to use a four-dimensional matrix with single precision values wherever a two-dimensional matrix with single precision is expected. The surplus elds are thrown away.
26.3.230
Synopsis: Allow assignment of four-dimensional single precision matrix to three-dimensional double precision matrix Declaration: operator operator :=(Tmatrix4_single): Tmatrix3_double (const v: Tmatrix4_single) : Tmatrix3_double Visibility: default Description: This operator allows you to use a four-dimensional matrix with single precision values wherever a three-dimensional matrix with double precision is expected. The surplus elds are thrown away.
26.3.231
Synopsis: Allow assignment of four-dimensional single precision matrix to three-dimensional extended precision matrix Declaration: operator operator :=(Tmatrix4_single): Tmatrix3_extended (const v: Tmatrix4_single) : Tmatrix3_extended Visibility: default Description: This operator allows you to use a four-dimensional matrix with single precision values wherever a three-dimensional matrix with extended precision is expected. The surplus elds are thrown away.
26.3.232
Synopsis: Allow assignment of four-dimensional single precision matrix to three-dimensional single precision matrix Declaration: operator operator :=(Tmatrix4_single): Tmatrix3_single (const v: Tmatrix4_single) : Tmatrix3_single Visibility: default Description: This operator allows you to use a four-dimensional matrix with single precision values wherever a three-dimensional matrix with single precision is expected. The surplus elds are thrown away.
864
26.3.233
Synopsis: Allow assignment of four-dimensional single precision matrix to four-dimensional double precision matrix Declaration: operator operator :=(Tmatrix4_single): Tmatrix4_double (const v: Tmatrix4_single) : Tmatrix4_double Visibility: default Description: This operator allows you to use a four-dimensional matrix with single precision values wherever a four-dimensional matrix with double precision is expected.
26.3.234
Synopsis: Allow assignment of four-dimensional single precision matrix to four-dimensional extended precision matrix Declaration: operator operator :=(Tmatrix4_single): Tmatrix4_extended (const v: Tmatrix4_single) : Tmatrix4_extended Visibility: default Description: This operator allows you to use a four-dimensional matrix with single precision values wherever a four-dimensional matrix with extended precision is expected.
26.3.235
Synopsis: Allow assignment of double precision vector to extended precision vector Declaration: operator operator :=(Tvector2_double): Tvector2_extended (const v: Tvector2_double) : Tvector2_extended Visibility: default Description: This operator allows you to use a vector with double precision values wherever an extended precision vector is expected.
26.3.236
Synopsis: Allow assignment of double precision vector to single precision vector Declaration: operator operator :=(Tvector2_double): Tvector2_single (const v: Tvector2_double) : Tvector2_single Visibility: default Description: This operator allows you to use a vector with double precision values wherever a single precision vector is expected, at the cost of loosing some precision.
865
26.3.237
Synopsis: Allow assignment of two-dimensional double precision vector to three-dimensional double precision vector Declaration: operator operator :=(Tvector2_double): Tvector3_double (const v: Tvector2_double) : Tvector3_double Visibility: default Description: This operator allows you to use a two-dimensional vector with double precision values wherever a three-dimensional vector with double precision is expected. The third dimension is set to 0.0.
26.3.238
Synopsis: Allow assignment of two-dimensional double precision vector to three-dimensional extended precision vector Declaration: operator operator :=(Tvector2_double): Tvector3_extended (const v: Tvector2_double) : Tvector3_extended Visibility: default Description: This operator allows you to use a two-dimensional vector with double precision values wherever a three-dimensional vector with extended precision is expected. The third dimension is set to 0.0.
26.3.239
Synopsis: Allow assignment of two-dimensional double precision vector to three-dimensional single precision vector Declaration: operator operator :=(Tvector2_double): Tvector3_single (const v: Tvector2_double) : Tvector3_single Visibility: default Description: This operator allows you to use a two-dimensional vector with double precision values wherever a three-dimensional vector with single precision is expected. Some accuracy is lost because of the conversion and the third dimension is set to 0.0.
26.3.240
Synopsis: Allow assignment of two-dimensional double precision vector to four-dimensional double precision vector Declaration: operator operator :=(Tvector2_double): Tvector4_double (const v: Tvector2_double) : Tvector4_double Visibility: default Description: This operator allows you to use a two-dimensional vector with double precision values wherever a four-dimensional vector with double precision is expected. The third and fourth dimensions are set to 0.0. 866
26.3.241
Synopsis: Allow assignment of two-dimensional double precision vector to four-dimensional extended precision vector Declaration: operator operator :=(Tvector2_double): Tvector4_extended (const v: Tvector2_double) : Tvector4_extended Visibility: default Description: This operator allows you to use a two-dimensional vector with single precision values wherever a four-dimensional vector with extended precision is expected. The third and fourth dimensions are set to 0.0.
26.3.242
Synopsis: Allow assignment of two-dimensional double precision vector to four-dimensional single precision vector Declaration: operator operator :=(Tvector2_double): Tvector4_single (const v: Tvector2_double) : Tvector4_single Visibility: default Description: This operator allows you to use a two-dimensional vector with double precision values wherever a four-dimensional vector with single precision is expected. Some accurace is lost because of the conversion and the third and fourth dimensions are set to 0.0.
26.3.243
Synopsis: Allow assignment of extended precision vector to double precision vector Declaration: operator operator :=(Tvector2_extended): Tvector2_double (const v: Tvector2_extended) : Tvector2_double Visibility: default Description: This operator allows you to use a vector with extended precision values wherever a double precision vector is expected, at the cost of loosing some precision.
26.3.244
Synopsis: Allow assignment of extended precision vector to single precision vector Declaration: operator operator :=(Tvector2_extended): Tvector2_single (const v: Tvector2_extended) : Tvector2_single Visibility: default Description: This operator allows you to use a vector with extended precision values wherever a single precision vector is expected, at the cost of loosing some precision.
867
26.3.245
Synopsis: Allow assignment of two-dimensional extended precision vector to three-dimensional double precision vector Declaration: operator operator :=(Tvector2_extended): Tvector3_double (const v: Tvector2_extended) : Tvector3_double Visibility: default Description: This operator allows you to use a two-dimensional vector with extended precision values wherever a three-dimensional vector with double precision is expected. Some accuracy is lost because of the conversion and the third dimension is set to 0.0.
26.3.246
Synopsis: Allow assignment of two-dimensional extened precision vector to three-dimensional extended precision vector
Declaration: operator operator :=(Tvector2_extended): Tvector3_extended (const v: Tvector2_extended : Tvector3_extended Visibility: default Description: This operator allows you to use a two-dimensional vector with extended precision values wherever a three-dimensional vector with extended precision is expected. The third dimension is set to 0.0.
26.3.247
Synopsis: Allow assignment of two-dimensional extended precision vector to three-dimensional single precision vector Declaration: operator operator :=(Tvector2_extended): Tvector3_single (const v: Tvector2_extended) : Tvector3_single Visibility: default Description: This operator allows you to use a two-dimensional vector with extended precision values wherever a three-dimensional vector with single precision is expected. Some accuracy is lost because of the conversion and the third dimension is set to 0.0.
26.3.248
Synopsis: Allow assignment of two-dimensional extended precision vector to four-dimensional double precision vector Declaration: operator operator :=(Tvector2_extended): Tvector4_double (const v: Tvector2_extended) : Tvector4_double Visibility: default Description: This operator allows you to use a two-dimensional vector with extended precision values wherever a four-dimensional vector with double precision is expected. Some accuracy is lost because of the conversion and the third and fourth dimensions are set to 0.0. 868
26.3.249
Synopsis: Allow assignment of two-dimensiona extended precision vector to four-dimensional extended precision vector
Declaration: operator operator :=(Tvector2_extended): Tvector4_extended (const v: Tvector2_extended : Tvector4_extended Visibility: default Description: This operator allows you to use a two-dimensional vector with extended precision values wherever a four-dimensional vector with extended precision is expected. The third and fourth dimensions are set to 0.0.
26.3.250
Synopsis: Allow assignment of two-dimensional extended precision vector to four-dimensional single precision vector Declaration: operator operator :=(Tvector2_extended): Tvector4_single (const v: Tvector2_extended) : Tvector4_single Visibility: default Description: This operator allows you to use a two-dimensional vector with extended precision values wherever a four-dimensional vector with single precision is expected. Some accuracy is lost because of the conversion and the third and fourth dimensions are set to 0.0.
26.3.251
Synopsis: Allow assignment of single precision vector to double precision vector Declaration: operator operator :=(Tvector2_single): Tvector2_double (const v: Tvector2_single) : Tvector2_double Visibility: default Description: This operator allows you to use a vector with single precision values wherever a double precision vector is expected.
26.3.252
Synopsis: Allow assignment of single precision vector to extended precision vector Declaration: operator operator :=(Tvector2_single): Tvector2_extended (const v: Tvector2_single) : Tvector2_extended Visibility: default Description: This operator allows you to use a vector with single precision values wherever an extended precision vector is expected.
869
26.3.253
Synopsis: Allow assignment of two-dimensional single precision vector to three-dimensional double precision vector Declaration: operator operator :=(Tvector2_single): Tvector3_double (const v: Tvector2_single) : Tvector3_double Visibility: default Description: This operator allows you to use a two-dimensional vector with single precision values wherever a three-dimensional vector with double precision is expected. The third dimension is set to 0.0.
26.3.254
Synopsis: Allow assignment of two-dimensional single precision vector to three-dimensional extended precision vector Declaration: operator operator :=(Tvector2_single): Tvector3_extended (const v: Tvector2_single) : Tvector3_extended Visibility: default Description: This operator allows you to use a two-dimensional vector with single precision values wherever a three-dimensional vector with extended precision is expected. The third dimension is set to 0.0.
26.3.255
Synopsis: Allow assignment of two-dimensional single precision vector to three-dimensional single precision vector Declaration: operator operator :=(Tvector2_single): Tvector3_single (const v: Tvector2_single) : Tvector3_single Visibility: default Description: This operator allows you to use a two-dimensional vector with single precision values wherever a three-dimensional vector with single precision is expected. The third dimension is set to 0.0.
26.3.256
Synopsis: Allow assignment of two-dimensional single precision vector to four-dimensional double precision vector Declaration: operator operator :=(Tvector2_single): Tvector4_double (const v: Tvector2_single) : Tvector4_double Visibility: default Description: This operator allows you to use a two-dimensional vector with single precision values wherever a four-dimensional vector with double precision is expected. The third and fourth dimensions are set to 0.0.
870
26.3.257
Synopsis: Allow assignment of two-dimensional single precision vector to four-dimensional extended precision vector Declaration: operator operator :=(Tvector2_single): Tvector4_extended (const v: Tvector2_single) : Tvector4_extended Visibility: default Description: This operator allows you to use a two-dimensional vector with single precision values wherever a four-dimensional vector with extended precision is expected. The third and fourth dimensions are set to 0.0.
26.3.258
Synopsis: Allow assignment of two-dimensional single precision vector to four-dimensional single precision vector Declaration: operator operator :=(Tvector2_single): Tvector4_single (const v: Tvector2_single) : Tvector4_single Visibility: default Description: This operator allows you to use a two-dimensional vector with single precision values wherever a four-dimensional vector with single precision is expected. The third and fourth dimensions are set to 0.0.
26.3.259
Synopsis: Allow assignment of three-dimensional double precision vector to two-dimensional double precision vector Declaration: operator operator :=(Tvector3_double): Tvector2_double (const v: Tvector3_double) : Tvector2_double Visibility: default Description: This operator allows you to use a three-dimensional vector with double precision values wherever a two-dimensional vector with double precision is expected. The third dimension is thrown away.
26.3.260
Synopsis: Allow assignment of three-dimensional double precision vector to two-dimensional extended precision vector Declaration: operator operator :=(Tvector3_double): Tvector2_extended (const v: Tvector3_double) : Tvector2_extended Visibility: default Description: This operator allows you to use a three-dimensional vector with double precision values wherever a two-dimensional vector with extended precision is expected. The third dimension is thrown away. 871
26.3.261
Synopsis: Allow assignment of three-dimensional double precision vector to two-dimensional single precision vector Declaration: operator operator :=(Tvector3_double): Tvector2_single (const v: Tvector3_double) : Tvector2_single Visibility: default Description: This operator allows you to use a three-dimensional vector with double precision values wherever a two-dimensional vector with single precision is expected. The third dimension is thrown away and some precision is lost because of the conversion.
26.3.262
Synopsis: Allow assignment of three-dimensional double precision vector to three-dimensional extended precision vector Declaration: operator operator :=(Tvector3_double): Tvector3_extended (const v: Tvector3_double) : Tvector3_extended Visibility: default Description: This operator allows you to use a three-dimensional vector with double precision values wherever a three-dimensional vector with extended precision is expected.
26.3.263
Synopsis: Allow assignment of three-dimensional double precision vector to three-dimensional single precision vector Declaration: operator operator :=(Tvector3_double): Tvector3_single (const v: Tvector3_double) : Tvector3_single Visibility: default Description: This operator allows you to use a three-dimensional vector with double precision values wherever a three-dimensional vector with single precision is expected. Some precision is lost because of the conversion.
26.3.264
Synopsis: Allow assignment of three-dimensional double precision vector to four-dimensional double precision vector Declaration: operator operator :=(Tvector3_double): Tvector4_double (const v: Tvector3_double) : Tvector4_double Visibility: default Description: This operator allows you to use a three-dimensional vector with double precision values wherever a four-dimensional vector with double precision is expected. The fourth dimension is set to 0. 872
26.3.265
Synopsis: Allow assignment of three-dimensional double precision vector to four-dimensional extended precision vector Declaration: operator operator :=(Tvector3_double): Tvector4_extended (const v: Tvector3_double) : Tvector4_extended Visibility: default Description: This operator allows you to use a three-dimensional vector with double precision values wherever a four-dimensional vector with extended precision is expected. The fourth dimension is set to 0.
26.3.266
Synopsis: Allow assignment of three-dimensional double precision vector to four-dimensional single precision vector Declaration: operator operator :=(Tvector3_double): Tvector4_single (const v: Tvector3_double) : Tvector4_single Visibility: default Description: This operator allows you to use a three-dimensional vector with single precision values wherever a four-dimensional vector with double precision is expected. The fourth dimension is set to 0 and some precision is lost because of the conversion.
26.3.267
Synopsis: Allow assignment of three-dimensional extended precision vector to two-dimensional double precision vector Declaration: operator operator :=(Tvector3_extended): Tvector2_double (const v: Tvector3_extended) : Tvector2_double Visibility: default Description: This operator allows you to use a three-dimensional vector with extended precision values wherever a two-dimensional vector with double precision is expected. The third dimension is thrown away and some precision is lost because of the conversion.
26.3.268
Synopsis: Allow assignment of three-dimensional extended precision vector to two-dimensional extended precision vector
Declaration: operator operator :=(Tvector3_extended): Tvector2_extended (const v: Tvector3_extended : Tvector2_extended Visibility: default Description: This operator allows you to use a three-dimensional vector with extended precision values wherever a two-dimensional vector with extended precision is expected. The third dimension is thrown away. 873
26.3.269
Synopsis: Allow assignment of three-dimensional extended precision vector to two-dimensional single precision vector Declaration: operator operator :=(Tvector3_extended): Tvector2_single (const v: Tvector3_extended) : Tvector2_single Visibility: default Description: This operator allows you to use a three-dimensional vector with extended precision values wherever a two-dimensional vector with single precision is expected. The third dimension is thrown away and some precision is lost because of the conversion.
26.3.270
Synopsis: Allow assignment of three-dimensional extended precision vector to three-dimensional double precision vector Declaration: operator operator :=(Tvector3_extended): Tvector3_double (const v: Tvector3_extended) : Tvector3_double Visibility: default Description: This operator allows you to use a three-dimensional vector with extended precision values wherever a three-dimensional vector with double precision is expected. Some precision is lost because of the conversion.
26.3.271
Synopsis: Allow assignment of three-dimensional single precision vector to three-dimensional double precision vector Declaration: operator operator :=(Tvector3_extended): Tvector3_single (const v: Tvector3_extended) : Tvector3_single Visibility: default Description: This operator allows you to use a three-dimensional vector with single precision values wherever a three-dimensional vector with double precision is expected. Some precision is lost because of the conversion.
26.3.272
Synopsis: Allow assignment of three-dimensional extended precision vector to four-dimensional double precision vector Declaration: operator operator :=(Tvector3_extended): Tvector4_double (const v: Tvector3_extended) : Tvector4_double Visibility: default
874
Description: This operator allows you to use a three-dimensional vector with extended precision values wherever a four-dimensional vector with double precision is expected. The fourth dimension is set to 0 and some accuracy is lost because of the conversion.
26.3.273
Synopsis: Allow assignment of three-dimensional extended precision vector to four-dimensional extended precision vector
Declaration: operator operator :=(Tvector3_extended): Tvector4_extended (const v: Tvector3_extended : Tvector4_extended Visibility: default Description: This operator allows you to use a three-dimensional vector with extended precision values wherever a four-dimensional vector with extended precision is expected. The fourth dimension is set to 0.
26.3.274
Synopsis: Allow assignment of three-dimensional extended precision vector to four-dimensional single precision vector Declaration: operator operator :=(Tvector3_extended): Tvector4_single (const v: Tvector3_extended) : Tvector4_single Visibility: default Description: This operator allows you to use a three-dimensional vector with extended precision values wherever a four-dimensional vector with single precision is expected. The fourth dimension is set to 0 and some accuracy is lost because of the conversion.
26.3.275
Synopsis: Allow assignment of three-dimensional single precision vector to two-dimensional double precision vector Declaration: operator operator :=(Tvector3_single): Tvector2_double (const v: Tvector3_single) : Tvector2_double Visibility: default Description: This operator allows you to use a three-dimensional vector with single precision values wherever a two-dimensional vector with double precision is expected. The third dimension is thrown away.
26.3.276
Synopsis: Allow assignment of three-dimensional single precision vector to two-dimensional extended precision vector Declaration: operator operator :=(Tvector3_single): Tvector2_extended (const v: Tvector3_single) : Tvector2_extended 875
Visibility: default Description: This operator allows you to use a three-dimensional vector with single precision values wherever a two-dimensional vector with extended precision is expected. The third dimension is thrown away.
26.3.277
Synopsis: Allow assignment of three-dimensional single precision vector to two-dimensional single precision vector Declaration: operator operator :=(Tvector3_single): Tvector2_single (const v: Tvector3_single) : Tvector2_single Visibility: default Description: This operator allows you to use a three-dimensional vector with single precision values wherever a two-dimensional vector with single precision is expected. The third dimension is thrown away.
26.3.278
Synopsis: Allow assignment of three-dimensional single precision vector to three-dimensional double precision vector Declaration: operator operator :=(Tvector3_single): Tvector3_double (const v: Tvector3_single) : Tvector3_double Visibility: default Description: This operator allows you to use a three-dimensional vector with single precision values wherever a three-dimensional vector with double precision is expected.
26.3.279
Synopsis: Allow assignment of three-dimensional single precision vector to three-dimensional extended precision vector Declaration: operator operator :=(Tvector3_single): Tvector3_extended (const v: Tvector3_single) : Tvector3_extended Visibility: default Description: This operator allows you to use a three-dimensional vector with single precision values wherever a three-dimensional vector with extended precision is expected.
26.3.280
Synopsis: Allow assignment of three-dimensional single precision vector to four-dimensional double precision vector Declaration: operator operator :=(Tvector3_single): Tvector4_double (const v: Tvector3_single) : Tvector4_double
876
Visibility: default Description: This operator allows you to use a three-dimensional vector with single precision values wherever a four-dimensional vector with double precision is expected. The fourth dimension is set to 0.
26.3.281
Synopsis: Allow assignment of three-dimensional single precision vector to four-dimensional extended precision vector Declaration: operator operator :=(Tvector3_single): Tvector4_extended (const v: Tvector3_single) : Tvector4_extended Visibility: default Description: This operator allows you to use a three-dimensional vector with single precision values wherever a four-dimensional vector with extended precision is expected. The fourth dimension is set to 0.
26.3.282
Synopsis: Allow assignment of three-dimensional single precision vector to four-dimensional single precision vector Declaration: operator operator :=(Tvector3_single): Tvector4_single (const v: Tvector3_single) : Tvector4_single Visibility: default Description: This operator allows you to use a three-dimensional vector with single precision values wherever a four-dimensional vector with single precision is expected. The fourth dimension is set to 0.
26.3.283
Synopsis: Allow assignment of four-dimensional double precision vector to two-dimensional double precision vector Declaration: operator operator :=(Tvector4_double): Tvector2_double (const v: Tvector4_double) : Tvector2_double Visibility: default Description: This operator allows you to use a four-dimensional vector with double precision values wherever a two-dimensional vector with double precision is expected. The third and fourth dimensions are thrown away.
26.3.284
Synopsis: Allow assignment of four-dimensional double precision vector to two-dimensional extended precision vector Declaration: operator operator :=(Tvector4_double): Tvector2_extended (const v: Tvector4_double) : Tvector2_extended 877
Visibility: default Description: This operator allows you to use a four-dimensional vector with double precision values wherever a two-dimensional vector with extended precision is expected. The third and fourth dimensions are thrown away.
26.3.285
Synopsis: Allow assignment of four-dimensional double precision vector to two-dimensional single precision vector Declaration: operator operator :=(Tvector4_double): Tvector2_single (const v: Tvector4_double) : Tvector2_single Visibility: default Description: This operator allows you to use a four-dimensional vector with double precision values wherever a two-dimensional vector with single precision is expected. The third and fourth dimensions are thrown away and some accuracy is lost because of the conversion.
26.3.286
Synopsis: Allow assignment of four-dimensional double precision vector to three-dimensional double precision vector Declaration: operator operator :=(Tvector4_double): Tvector3_double (const v: Tvector4_double) : Tvector3_double Visibility: default Description: This operator allows you to use a four-dimensional vector with double precision values wherever a three-dimensional vector with double precision is expected. The fourth dimension is thrown away.
26.3.287
Synopsis: Allow assignment of four-dimensional double precision vector to three-dimensional extended precision vector Declaration: operator operator :=(Tvector4_double): Tvector3_extended (const v: Tvector4_double) : Tvector3_extended Visibility: default Description: This operator allows you to use a four-dimensional vector with double precision values wherever a three-dimensional vector with extended precision is expected. The fourth dimension is thrown away.
26.3.288
Synopsis: Allow assignment of four-dimensional double precision vector to three-dimensional single precision vector
878
Declaration: operator operator :=(Tvector4_double): Tvector3_single (const v: Tvector4_double) : Tvector3_single Visibility: default Description: This operator allows you to use a four-dimensional vector with double precision values wherever a three-dimensional vector with single precision is expected. The fourth dimension is thrown away and some accuracy is lost because of the conversion.
26.3.289
Synopsis: Allow assignment of four-dimensional single precision vector to four-dimensional extended precision vector Declaration: operator operator :=(Tvector4_double): Tvector4_extended (const v: Tvector4_double) : Tvector4_extended Visibility: default Description: This operator allows you to use a four-dimensional vector with double precision values wherever a four-dimensional vector with extended precision is expected.
26.3.290
Synopsis: Allow assignment of four-dimensional double precision vector to four-dimensional single precision vector Declaration: operator operator :=(Tvector4_double): Tvector4_single (const v: Tvector4_double) : Tvector4_single Visibility: default Description: This operator allows you to use a four-dimensional vector with double precision values wherever a four-dimensional vector with single precision is expected. Some accuracy is lost because of the conversion.
26.3.291
Synopsis: Allow assignment of four-dimensional extended precision vector to two-dimensional double precision vector Declaration: operator operator :=(Tvector4_extended): Tvector2_double (const v: Tvector4_extended) : Tvector2_double Visibility: default Description: This operator allows you to use a four-dimensional vector with extended precision values wherever a two-dimensional vector with double precision is expected. The third and fourth dimensions are thrown away and some accuracy is lost because of the conversion.
879
26.3.292
Synopsis: Allow assignment of four-dimensional extended precision vector to two-dimensional extended precision vector
Declaration: operator operator :=(Tvector4_extended): Tvector2_extended (const v: Tvector4_extended : Tvector2_extended Visibility: default Description: This operator allows you to use a four-dimensional vector with extended precision values wherever a two-dimensional vector with extended precision is expected. The third and fourth dimensions are thrown away.
26.3.293
Synopsis: Allow assignment of four-dimensional extended precision vector to two-dimensional single precision vector Declaration: operator operator :=(Tvector4_extended): Tvector2_single (const v: Tvector4_extended) : Tvector2_single Visibility: default Description: This operator allows you to use a four-dimensional vector with extended precision values wherever a two-dimensional vector with single precision is expected. The third and fourth dimensions are thrown away and some accuracy is los because of the conversion.
26.3.294
Synopsis: Allow assignment of four-dimensional extended precision vector to three-dimensional double precision vector Declaration: operator operator :=(Tvector4_extended): Tvector3_double (const v: Tvector4_extended) : Tvector3_double Visibility: default Description: This operator allows you to use a four-dimensional vector with extended precision values wherever a three-dimensional vector with double precision is expected. The fourth dimension is thrown away and some accuracy is lost because of the conversion.
26.3.295
Synopsis: Allow assignment of four-dimensional extended precision vector to three-dimensional extended precision vector
Declaration: operator operator :=(Tvector4_extended): Tvector3_extended (const v: Tvector4_extended : Tvector3_extended Visibility: default
880
Description: This operator allows you to use a four-dimensional vector with extended precision values wherever a three-dimensional vector with extended precision is expected. The fourth dimensions are thrown away.
26.3.296
Synopsis: Allow assignment of four-dimensional extended precision vector to three-dimensional single precision vector Declaration: operator operator :=(Tvector4_extended): Tvector3_single (const v: Tvector4_extended) : Tvector3_single Visibility: default Description: This operator allows you to use a four-dimensional vector with extended precision values wherever a three-dimensional vector with single precision is expected. The fourth dimension is thrown away and some accuracy is los because of the conversion.
26.3.297
Synopsis: Allow assignment of four-dimensional single precision vector to four-dimensional double precision vector Declaration: operator operator :=(Tvector4_extended): Tvector4_double (const v: Tvector4_extended) : Tvector4_double Visibility: default Description: This operator allows you to use a four-dimensional vector with extended precision values wherever a four-dimensional vector with double precision is expected. Some accuracy is lost because of the conversion.
26.3.298
Synopsis: Allow assignment of four-dimensional extended precision vector to four-dimensional single precision vector Declaration: operator operator :=(Tvector4_extended): Tvector4_single (const v: Tvector4_extended) : Tvector4_single Visibility: default Description: This operator allows you to use a four-dimensional vector with extended precision values wherever a four-dimensional vector with single precision is expected. Some accuracy is lost because of the conversion.
26.3.299
Synopsis: Allow assignment of four-dimensional single precision vector to two-dimensional double precision vector
881
Declaration: operator operator :=(Tvector4_single): Tvector2_double (const v: Tvector4_single) : Tvector2_double Visibility: default Description: This operator allows you to use a four-dimensional vector with single precision values wherever a two-dimensional vector with double precision is expected. The third and fourth dimensions are thrown away.
26.3.300
Synopsis: Allow assignment of four-dimensional single precision vector to two-dimensional extended precision vector Declaration: operator operator :=(Tvector4_single): Tvector2_extended (const v: Tvector4_single) : Tvector2_extended Visibility: default Description: This operator allows you to use a four-dimensional vector with single precision values wherever a two-dimensional vector with extended precision is expected. The third and fourth dimensions are thrown away.
26.3.301
Synopsis: Allow assignment of four-dimensional single precision vector to two-dimensional single precision vector Declaration: operator operator :=(Tvector4_single): Tvector2_single (const v: Tvector4_single) : Tvector2_single Visibility: default Description: This operator allows you to use a four-dimensional vector with single precision values wherever a two-dimensional vector with single precision is expected. The third and fourth dimensions are thrown away.
26.3.302
Synopsis: Allow assignment of four-dimensional single precision vector to three-dimensional double precision vector Declaration: operator operator :=(Tvector4_single): Tvector3_double (const v: Tvector4_single) : Tvector3_double Visibility: default Description: This operator allows you to use a four-dimensional vector with single precision values wherever a three-dimensional vector with double precision is expected. The fourth dimension is thrown away.
882
26.3.303
Synopsis: Allow assignment of four-dimensional single precision vector to three-dimensional extended precision vector Declaration: operator operator :=(Tvector4_single): Tvector3_extended (const v: Tvector4_single) : Tvector3_extended Visibility: default Description: This operator allows you to use a four-dimensional vector with single precision values wherever a three-dimensional vector with extended precision is expected. The fourth dimension is thrown away.
26.3.304
Synopsis: Allow assignment of four-dimensional single precision vector to three-dimensional single precision vector Declaration: operator operator :=(Tvector4_single): Tvector3_single (const v: Tvector4_single) : Tvector3_single Visibility: default Description: This operator allows you to use a four-dimensional vector with single precision values wherever a three-dimensional vector with single precision is expected. The fourth dimension is thrown away.
26.3.305
Synopsis: Allow assignment of four-dimensional single precision vector to four-dimensional double precision vector Declaration: operator operator :=(Tvector4_single): Tvector4_double (const v: Tvector4_single) : Tvector4_double Visibility: default Description: This operator allows you to use a four-dimensional vector with single precision values wherever a four-dimensional vector with double precision is expected.
26.3.306
Synopsis: Allow assignment of four-dimensional single precision vector to four-dimensional extended precision vector Declaration: operator operator :=(Tvector4_single): Tvector4_extended (const v: Tvector4_single) : Tvector4_extended Visibility: default Description: This operator allows you to use a four-dimensional vector with single precision values wherever a four-dimensional vector with extended precision is expected.
883
26.3.307
Declaration: operator operator ><(Tvector3_double, Tvector3_double): Tvector3_double (const x: Tvec const y: Tvect : Tvector3_do Visibility: default Description: This operator returns the external product of two three dimensional vector. It is a vector orthonormal to the two multiplied vectors. The length of that vector is equal to the surface area of a parallelogram with the two vectors as sides. The external product is often used to get a vector orthonormal to two other vectors, but of a predened length. In order to do so, the result vector from the external product, is divided by its length, and then multiplied by the desired size.
26.3.308
operator (const x const y: : Tvect Visibility: default Description: This operator returns the external product of two three dimensional vector. It is a vector orthonormal to the two multiplied vectors. The length of that vector is equal to the surface area of a parallelogram with the two vectors as sides. The external product is often used to get a vector orthonormal to two other vectors, but of a predened length. In order to do so, the result vector from the external product, is divided by its length, and then multiplied by the desired size.
26.3.309
Declaration: operator operator ><(Tvector3_single, Tvector3_single): Tvector3_single (const x: Tvec const y: Tvect : Tvector3_si Visibility: default Description: This operator returns the external product of two three dimensional vector. It is a vector orthonormal to the two multiplied vectors. The length of that vector is equal to the surface area of a parallelogram with the two vectors as sides. The external product is often used to get a vector orthonormal to two other vectors, but of a predened length. In order to do so, the result vector from the external product, is divided by its length, and then multiplied by the desired size. 884
26.4
26.4.1
Tmatrix2_double
Description
26.4.2
Page 886 886 886 885 885 885 886 886 886 887
Method overview
Property determinant get\_column get\_row init init\_identity init\_zero inverse set\_column set\_row transpose Description Calculates the determinant of the matrix. Returns the c-th column of the matrix as vector. Returns the r-th row of the matrix as vector. Initializes the matrix, setting its elements to the values passed to the constructor. Initializes the matrix and sets its elements to the identity matrix. Initializes the matrix and sets its elements to zero Calculates the inverse of the matrix. Sets c-th column of the matrix with a vector. Sets r-th row of the matrix with a vector. Returns the transposition of the matrix.
26.4.3
Tmatrix2_double.init_zero
Synopsis: Initializes the matrix and sets its elements to zero Declaration: constructor init_zero Visibility: default
26.4.4
Tmatrix2_double.init_identity
Synopsis: Initializes the matrix and sets its elements to the identity matrix. Declaration: constructor init_identity Visibility: default Description: Initializes the matrix and sets its elements to the identity matrix, that is, elements to 1 on the leftupper to right-lower diagonal, the rest zero.
26.4.5
Tmatrix2_double.init
Synopsis: Initializes the matrix, setting its elements to the values passed to the constructor. Declaration: constructor init(aa: Double;ab: Double;ba: Double;bb: Double) Visibility: default Description: Initializes the matrix, setting its elements to the values passed to the constructor. The order of the values is left to right, then top to bottom.
885
26.4.6
Tmatrix2_double.get_column
Synopsis: Returns the c-th column of the matrix as vector. Declaration: function get_column(c: Byte) : Tvector2_double Visibility: default Description: Returns the c-th column of the matrix as vector. The column numbering starts at 0.
26.4.7
Tmatrix2_double.get_row
Synopsis: Returns the r-th row of the matrix as vector. Declaration: function get_row(r: Byte) : Tvector2_double Visibility: default Description: Returns the r-th row of the matrix as vector. The row numbering starts at 0.
26.4.8
Tmatrix2_double.set_column
Synopsis: Sets c-th column of the matrix with a vector. Declaration: procedure set_column(c: Byte;const v: Tvector2_double) Visibility: default Description: Replaces the c-th column of the matrix with vector v. The column numbering starts at 0.
26.4.9
Tmatrix2_double.set_row
Synopsis: Sets r-th row of the matrix with a vector. Declaration: procedure set_row(r: Byte;const v: Tvector2_double) Visibility: default Description: Replaces the r-th row of the matrix with vector v. The row numbering starts at 0.
26.4.10
Tmatrix2_double.determinant
Synopsis: Calculates the determinant of the matrix. Declaration: function determinant : Double Visibility: default Description: Returns the determinant of the matrix.
26.4.11
Tmatrix2_double.inverse
Synopsis: Calculates the inverse of the matrix. Declaration: function inverse(Adeterminant: Double) : Tmatrix2_double Visibility: default Description: Tmatrix2_double.inverse returns a new matrix that is the inverse of the matrix. You must pass the determinant of the matrix as parameter. 886
26.4.12
Tmatrix2_double.transpose
Synopsis: Returns the transposition of the matrix. Declaration: function transpose : Tmatrix2_double Visibility: default Description: Tmatrix2_double.transpose returns a new matrix that is the transposition of the matrix, that is, the matrix with the x and y coordinates of the values swapped.
26.5
26.5.1
Tmatrix2_extended
Description
26.5.2
Page 888 888 888 888 887 887 889 888 888 889
Method overview
Property determinant get\_column get\_row init init\_identity init\_zero inverse set\_column set\_row transpose Description Calculates the determinant of the matrix. Returns the c-th column of the matrix as vector. Returns the r-th row of the matrix as vector. Initializes the matrix, setting its elements to the values passed to the constructor. Initializes the matrix and sets its elements to the identity matrix. Initializes the matrix and sets its elements to zero Calculates the inverse of the matrix. Sets c-th column of the matrix with a vector. Sets r-th row of the matrix with a vector. Returns the transposition of the matrix.
26.5.3
Tmatrix2_extended.init_zero
Synopsis: Initializes the matrix and sets its elements to zero Declaration: constructor init_zero Visibility: default
26.5.4
Tmatrix2_extended.init_identity
Synopsis: Initializes the matrix and sets its elements to the identity matrix. Declaration: constructor init_identity Visibility: default Description: Initializes the matrix and sets its elements to the identity matrix, that is, elements to 1 on the leftupper to right-lower diagonal, the rest zero.
887
26.5.5
Tmatrix2_extended.init
Synopsis: Initializes the matrix, setting its elements to the values passed to the constructor. Declaration: constructor init(aa: extended;ab: extended;ba: extended;bb: extended) Visibility: default Description: Initializes the matrix, setting its elements to the values passed to the constructor. The order of the values is left to right, then top to bottom.
26.5.6
Tmatrix2_extended.get_column
Synopsis: Returns the c-th column of the matrix as vector. Declaration: function get_column(c: Byte) : Tvector2_extended Visibility: default Description: Returns the c-th column of the matrix as vector. The column numbering starts at 0.
26.5.7
Tmatrix2_extended.get_row
Synopsis: Returns the r-th row of the matrix as vector. Declaration: function get_row(r: Byte) : Tvector2_extended Visibility: default Description: Returns the r-th row of the matrix as vector. The row numbering starts at 0.
26.5.8
Tmatrix2_extended.set_column
Synopsis: Sets c-th column of the matrix with a vector. Declaration: procedure set_column(c: Byte;const v: Tvector2_extended) Visibility: default Description: Replaces the c-th column of the matrix with vector v. The column numbering starts at 0.
26.5.9
Tmatrix2_extended.set_row
Synopsis: Sets r-th row of the matrix with a vector. Declaration: procedure set_row(r: Byte;const v: Tvector2_extended) Visibility: default Description: Replaces the r-th row of the matrix with vector v. The row numbering starts at 0.
26.5.10
Tmatrix2_extended.determinant
Synopsis: Calculates the determinant of the matrix. Declaration: function determinant : extended Visibility: default Description: Returns the determinant of the matrix. 888
26.5.11
Tmatrix2_extended.inverse
Synopsis: Calculates the inverse of the matrix. Declaration: function inverse(Adeterminant: extended) : Tmatrix2_extended Visibility: default Description: Tmatrix2_extended.inverse returns a new matrix that is the inverse of the matrix. You must pass the determinant of the matrix as parameter.
26.5.12
Tmatrix2_extended.transpose
Synopsis: Returns the transposition of the matrix. Declaration: function transpose : Tmatrix2_extended Visibility: default Description: Tmatrix2_extended.transpose returns a new matrix that is the transposition of the matrix, that is, the matrix with the x and y coordinates of the values swapped.
26.6
26.6.1
Tmatrix2_single
Description
26.6.2
Page 891 890 890 890 890 889 891 890 891 891
Method overview
Property determinant get\_column get\_row init init\_identity init\_zero inverse set\_column set\_row transpose Description Calculates the determinant of the matrix. Returns the c-th column of the matrix as vector. Returns the r-th row of the matrix as vector. Initializes the matrix, setting its elements to the values passed to the constructor. Initializes the matrix and sets its elements to the identity matrix. Initializes the matrix and sets its elements to zero Calculates the inverse of the matrix. Sets c-th column of the matrix with a vector. Sets r-th row of the matrix with a vector. Returns the transposition of the matrix.
26.6.3
Tmatrix2_single.init_zero
Synopsis: Initializes the matrix and sets its elements to zero Declaration: constructor init_zero Visibility: default
889
26.6.4
Tmatrix2_single.init_identity
Synopsis: Initializes the matrix and sets its elements to the identity matrix. Declaration: constructor init_identity Visibility: default Description: Initializes the matrix and sets its elements to the identity matrix, that is, elements to 1 on the leftupper to right-lower diagonal, the rest zero.
26.6.5
Tmatrix2_single.init
Synopsis: Initializes the matrix, setting its elements to the values passed to the constructor. Declaration: constructor init(aa: single;ab: single;ba: single;bb: single) Visibility: default Description: Initializes the matrix, setting its elements to the values passed to the constructor. The order of the values is left to right, then top to bottom.
26.6.6
Tmatrix2_single.get_column
Synopsis: Returns the c-th column of the matrix as vector. Declaration: function get_column(c: Byte) : Tvector2_single Visibility: default Description: Returns the c-th column of the matrix as vector. The column numbering starts at 0.
26.6.7
Tmatrix2_single.get_row
Synopsis: Returns the r-th row of the matrix as vector. Declaration: function get_row(r: Byte) : Tvector2_single Visibility: default Description: Returns the r-th row of the matrix as vector. The row numbering starts at 0.
26.6.8
Tmatrix2_single.set_column
Synopsis: Sets c-th column of the matrix with a vector. Declaration: procedure set_column(c: Byte;const v: Tvector2_single) Visibility: default Description: Replaces the c-th column of the matrix with vector v. The column numbering starts at 0.
890
26.6.9
Tmatrix2_single.set_row
Synopsis: Sets r-th row of the matrix with a vector. Declaration: procedure set_row(r: Byte;const v: Tvector2_single) Visibility: default Description: Replaces the r-th row of the matrix with vector v. The row numbering starts at 0.
26.6.10
Tmatrix2_single.determinant
Synopsis: Calculates the determinant of the matrix. Declaration: function determinant : single Visibility: default Description: Returns the determinant of the matrix.
26.6.11
Tmatrix2_single.inverse
Synopsis: Calculates the inverse of the matrix. Declaration: function inverse(Adeterminant: single) : Tmatrix2_single Visibility: default Description: Tmatrix2_single.inverse returns a new matrix that is the inverse of the matrix. You must pass the determinant of the matrix as parameter.
26.6.12
Tmatrix2_single.transpose
Synopsis: Returns the transposition of the matrix. Declaration: function transpose : Tmatrix2_single Visibility: default Description: Tmatrix2_single.transpose returns a new matrix that is the transposition of the matrix, that is, the matrix with the x and y coordinates of the values swapped.
26.7
26.7.1
Tmatrix3_double
Description
891
26.7.2
Page 893 892 893 892 892 892 893 893 893 893
Method overview
Property determinant get\_column get\_row init init\_identity init\_zero inverse set\_column set\_row transpose Description Calculates the determinant of the matrix. Returns the c-th column of the matrix as vector. Returns the r-th row of the matrix as vector. Initializes the matrix, setting its elements to the values passed to the constructor. Initializes the matrix and sets its elements to the identity matrix. Initializes the matrix and sets its elements to zero Calculates the inverse of the matrix. Sets c-th column of the matrix with a vector. Sets r-th row of the matrix with a vector. Returns the transposition of the matrix.
26.7.3
Tmatrix3_double.init_zero
Synopsis: Initializes the matrix and sets its elements to zero Declaration: constructor init_zero Visibility: default
26.7.4
Tmatrix3_double.init_identity
Synopsis: Initializes the matrix and sets its elements to the identity matrix. Declaration: constructor init_identity Visibility: default Description: Initializes the matrix and sets its elements to the identity matrix, that is, elements to 1 on the leftupper to right-lower diagonal, the rest zero.
26.7.5
Tmatrix3_double.init
Synopsis: Initializes the matrix, setting its elements to the values passed to the constructor. Declaration: constructor init(aa: Double;ab: Double;ac: Double;ba: Double;bb: Double; bc: Double;ca: Double;cb: Double;cc: Double) Visibility: default Description: Initializes the matrix, setting its elements to the values passed to the constructor. The order of the values is left to right, then top to bottom.
26.7.6
Tmatrix3_double.get_column
Synopsis: Returns the c-th column of the matrix as vector. Declaration: function get_column(c: Byte) : Tvector3_double Visibility: default Description: Returns the c-th column of the matrix as vector. The column numbering starts at 0.
892
26.7.7
Tmatrix3_double.get_row
Synopsis: Returns the r-th row of the matrix as vector. Declaration: function get_row(r: Byte) : Tvector3_double Visibility: default Description: Returns the r-th row of the matrix as vector. The row numbering starts at 0.
26.7.8
Tmatrix3_double.set_column
Synopsis: Sets c-th column of the matrix with a vector. Declaration: procedure set_column(c: Byte;const v: Tvector3_double) Visibility: default Description: Replaces the c-th column of the matrix with vector v. The column numbering starts at 0.
26.7.9
Tmatrix3_double.set_row
Synopsis: Sets r-th row of the matrix with a vector. Declaration: procedure set_row(r: Byte;const v: Tvector3_double) Visibility: default Description: Replaces the r-th row of the matrix with vector v. The row numbering starts at 0.
26.7.10
Tmatrix3_double.determinant
Synopsis: Calculates the determinant of the matrix. Declaration: function determinant : Double Visibility: default Description: Returns the determinant of the matrix.
26.7.11
Tmatrix3_double.inverse
Synopsis: Calculates the inverse of the matrix. Declaration: function inverse(Adeterminant: Double) : Tmatrix3_double Visibility: default Description: Tmatrix3_double.inverse returns a new matrix that is the inverse of the matrix. You must pass the determinant of the matrix as parameter.
26.7.12
Tmatrix3_double.transpose
Synopsis: Returns the transposition of the matrix. Declaration: function transpose : Tmatrix3_double Visibility: default Description: Tmatrix2_double.transpose returns a new matrix that is the transposition of the matrix, that is, the matrix with the x and y coordinates of the values swapped. 893
26.8
26.8.1
Tmatrix3_extended
Description
26.8.2
Page 895 895 895 894 894 894 895 895 895 896
Method overview
Property determinant get\_column get\_row init init\_identity init\_zero inverse set\_column set\_row transpose Description Calculates the determinant of the matrix. Returns the c-th column of the matrix as vector. Returns the r-th row of the matrix as vector. Initializes the matrix, setting its elements to the values passed to the constructor. Initializes the matrix and sets its elements to the identity matrix. Initializes the matrix and sets its elements to zero Calculates the inverse of the matrix. Sets r-th column of the matrix with a vector. Sets r-th row of the matrix with a vector. Returns the transposition of the matrix.
26.8.3
Tmatrix3_extended.init_zero
Synopsis: Initializes the matrix and sets its elements to zero Declaration: constructor init_zero Visibility: default
26.8.4
Tmatrix3_extended.init_identity
Synopsis: Initializes the matrix and sets its elements to the identity matrix. Declaration: constructor init_identity Visibility: default Description: Initializes the matrix and sets its elements to the identity matrix, that is, elements to 1 on the leftupper to right-lower diagonal, the rest zero.
26.8.5
Tmatrix3_extended.init
Synopsis: Initializes the matrix, setting its elements to the values passed to the constructor. Declaration: constructor init(aa: extended;ab: extended;ac: extended;ba: extended; bb: extended;bc: extended;ca: extended;cb: extended; cc: extended) Visibility: default Description: Initializes the matrix, setting its elements to the values passed to the constructor. The order of the values is left to right, then top to bottom.
894
26.8.6
Tmatrix3_extended.get_column
Synopsis: Returns the c-th column of the matrix as vector. Declaration: function get_column(c: Byte) : Tvector3_extended Visibility: default Description: Returns the c-th column of the matrix as vector. The column numbering starts at 0.
26.8.7
Tmatrix3_extended.get_row
Synopsis: Returns the r-th row of the matrix as vector. Declaration: function get_row(r: Byte) : Tvector3_extended Visibility: default Description: Returns the r-th row of the matrix as vector. The row numbering starts at 0.
26.8.8
Tmatrix3_extended.set_column
Synopsis: Sets r-th column of the matrix with a vector. Declaration: procedure set_column(c: Byte;const v: Tvector3_extended) Visibility: default Description: Replaces the c-th column of the matrix with vector v. The column numbering starts at 0.
26.8.9
Tmatrix3_extended.set_row
Synopsis: Sets r-th row of the matrix with a vector. Declaration: procedure set_row(r: Byte;const v: Tvector3_extended) Visibility: default Description: Replaces the r-th row of the matrix with vector v. The row numbering starts at 0.
26.8.10
Tmatrix3_extended.determinant
Synopsis: Calculates the determinant of the matrix. Declaration: function determinant : extended Visibility: default Description: Returns the determinant of the matrix.
26.8.11
Tmatrix3_extended.inverse
Synopsis: Calculates the inverse of the matrix. Declaration: function inverse(Adeterminant: extended) : Tmatrix3_extended Visibility: default Description: Tmatrix3_extended.inverse returns a new matrix that is the inverse of the matrix. You must pass the determinant of the matrix as parameter. 895
26.8.12
Tmatrix3_extended.transpose
Synopsis: Returns the transposition of the matrix. Declaration: function transpose : Tmatrix3_extended Visibility: default Description: Tmatrix2_extended.transpose returns a new matrix that is the transposition of the matrix, that is, the matrix with the x and y coordinates of the values swapped.
26.9
26.9.1
Tmatrix3_single
Description
26.9.2
Page 898 897 897 897 896 896 898 897 897 898
Method overview
Property determinant get\_column get\_row init init\_identity init\_zero inverse set\_column set\_row transpose Description Calculates the determinant of the matrix. Returns the c-th column of the matrix as vector. Returns the r-th row of the matrix as vector. Initializes the matrix, setting its elements to the values passed to the constructor. Initializes the matrix and sets its elements to the identity matrix. Initializes the matrix and sets its elements to zero Calculates the inverse of the matrix. Sets c-th column of the matrix with a vector. Sets r-th row of the matrix with a vector. Returns the transposition of the matrix.
26.9.3
Tmatrix3_single.init_zero
Synopsis: Initializes the matrix and sets its elements to zero Declaration: constructor init_zero Visibility: default
26.9.4
Tmatrix3_single.init_identity
Synopsis: Initializes the matrix and sets its elements to the identity matrix. Declaration: constructor init_identity Visibility: default Description: Initializes the matrix and sets its elements to the identity matrix, that is, elements to 1 on the leftupper to right-lower diagonal, the rest zero.
896
26.9.5
Tmatrix3_single.init
Synopsis: Initializes the matrix, setting its elements to the values passed to the constructor. Declaration: constructor init(aa: single;ab: single;ac: single;ba: single;bb: single; bc: single;ca: single;cb: single;cc: single) Visibility: default Description: Initializes the matrix, setting its elements to the values passed to the constructor. The order of the values is left to right, then top to bottom.
26.9.6
Tmatrix3_single.get_column
Synopsis: Returns the c-th column of the matrix as vector. Declaration: function get_column(c: Byte) : Tvector3_single Visibility: default Description: Returns the c-th column of the matrix as vector. The column numbering starts at 0.
26.9.7
Tmatrix3_single.get_row
Synopsis: Returns the r-th row of the matrix as vector. Declaration: function get_row(r: Byte) : Tvector3_single Visibility: default Description: Returns the r-th row of the matrix as vector. The row numbering starts at 0.
26.9.8
Tmatrix3_single.set_column
Synopsis: Sets c-th column of the matrix with a vector. Declaration: procedure set_column(c: Byte;const v: Tvector3_single) Visibility: default Description: Replaces the c-th column of the matrix with vector v. The column numbering starts at 0.
26.9.9
Tmatrix3_single.set_row
Synopsis: Sets r-th row of the matrix with a vector. Declaration: procedure set_row(r: Byte;const v: Tvector3_single) Visibility: default Description: Replaces the r-th row of the matrix with vector v. The row numbering starts at 0.
897
26.9.10
Tmatrix3_single.determinant
Synopsis: Calculates the determinant of the matrix. Declaration: function determinant : single Visibility: default Description: Returns the determinant of the matrix.
26.9.11
Tmatrix3_single.inverse
Synopsis: Calculates the inverse of the matrix. Declaration: function inverse(Adeterminant: single) : Tmatrix3_single Visibility: default Description: Tmatrix3_single.inverse returns a new matrix that is the inverse of the matrix. You must pass the determinant of the matrix as parameter.
26.9.12
Tmatrix3_single.transpose
Synopsis: Returns the transposition of the matrix. Declaration: function transpose : Tmatrix3_single Visibility: default Description: Tmatrix2_single.transpose returns a new matrix that is the transposition of the matrix, that is, the matrix with the x and y coordinates of the values swapped.
26.10
26.10.1
Tmatrix4_double
Description
26.10.2
Page 900 899 899 899 899 899 900 900 900 900
Method overview
Description Calculates the determinant of the matrix. Returns the c-th column of the matrix as vector. Returns the r-th row of the matrix as vector. Initializes the matrix, setting its elements to the values passed to the constructor. Initializes the matrix and sets its elements to the identity matrix. Initializes the matrix and sets its elements to zero Calculates the inverse of the matrix. Sets c-th column of the matrix with a vector. Sets r-th row of the matrix with a vector. Returns the transposition of the matrix.
Property determinant get\_column get\_row init init\_identity init\_zero inverse set\_column set\_row transpose
898
26.10.3
Tmatrix4_double.init_zero
Synopsis: Initializes the matrix and sets its elements to zero Declaration: constructor init_zero Visibility: default
26.10.4
Tmatrix4_double.init_identity
Synopsis: Initializes the matrix and sets its elements to the identity matrix. Declaration: constructor init_identity Visibility: default Description: Initializes the matrix and sets its elements to the identity matrix, that is, elements to 1 on the leftupper to right-lower diagonal, the rest zero.
26.10.5
Tmatrix4_double.init
Synopsis: Initializes the matrix, setting its elements to the values passed to the constructor. Declaration: constructor init(aa: Double;ab: Double;ac: Double;ad: Double;ba: Double; bb: Double;bc: Double;bd: Double;ca: Double;cb: Double; cc: Double;cd: Double;da: Double;db: Double;dc: Double; dd: Double) Visibility: default Description: Initializes the matrix, setting its elements to the values passed to the constructor. The order of the values is left to right, then top to bottom.
26.10.6
Tmatrix4_double.get_column
Synopsis: Returns the c-th column of the matrix as vector. Declaration: function get_column(c: Byte) : Tvector4_double Visibility: default Description: Returns the c-th column of the matrix as vector. The column numbering starts at 0.
26.10.7
Tmatrix4_double.get_row
Synopsis: Returns the r-th row of the matrix as vector. Declaration: function get_row(r: Byte) : Tvector4_double Visibility: default Description: Returns the r-th row of the matrix as vector. The row numbering starts at 0.
899
26.10.8
Tmatrix4_double.set_column
Synopsis: Sets c-th column of the matrix with a vector. Declaration: procedure set_column(c: Byte;const v: Tvector4_double) Visibility: default Description: Replaces the c-th column of the matrix with vector v. The column numbering starts at 0.
26.10.9
Tmatrix4_double.set_row
Synopsis: Sets r-th row of the matrix with a vector. Declaration: procedure set_row(r: Byte;const v: Tvector4_double) Visibility: default Description: Replaces the r-th row of the matrix with vector v. The row numbering starts at 0.
26.10.10
Tmatrix4_double.determinant
Synopsis: Calculates the determinant of the matrix. Declaration: function determinant : Double Visibility: default Description: Returns the determinant of the matrix. Note: Calculating the determinant of a 4*4 matrix requires quite a few operations.
26.10.11
Tmatrix4_double.inverse
Synopsis: Calculates the inverse of the matrix. Declaration: function inverse(Adeterminant: Double) : Tmatrix4_double Visibility: default Description: Tmatrix4_double.inverse returns a new matrix that is the inverse of the matrix. You must pass the determinant of the matrix as parameter. Note: Calculating the inverse of a 4*4 matrix requires quite a few operations.
26.10.12
Tmatrix4_double.transpose
Synopsis: Returns the transposition of the matrix. Declaration: function transpose : Tmatrix4_double Visibility: default Description: Tmatrix2_double.transpose returns a new matrix that is the transposition of the matrix, that is, the matrix with the x and y coordinates of the values swapped.
900
26.11
26.11.1
Tmatrix4_extended
Description
26.11.2
Page 902 902 902 901 901 901 903 902 902 903
Method overview
Description Calculates the determinant of the matrix. Returns the c-th column of the matrix as vector. Returns the r-th row of the matrix as vector. Initializes the matrix, setting its elements to the values passed to the constructor. Initializes the matrix and sets its elements to the identity matrix. Initializes the matrix and sets its elements to zero Calculates the inverse of the matrix. Sets c-th column of the matrix with a vector. Sets r-th row of the matrix with a vector. Returns the transposition of the matrix.
Property determinant get\_column get\_row init init\_identity init\_zero inverse set\_column set\_row transpose
26.11.3
Tmatrix4_extended.init_zero
Synopsis: Initializes the matrix and sets its elements to zero Declaration: constructor init_zero Visibility: default
26.11.4
Tmatrix4_extended.init_identity
Synopsis: Initializes the matrix and sets its elements to the identity matrix. Declaration: constructor init_identity Visibility: default Description: Initializes the matrix and sets its elements to the identity matrix, that is, elements to 1 on the leftupper to right-lower diagonal, the rest zero.
26.11.5
Tmatrix4_extended.init
Synopsis: Initializes the matrix, setting its elements to the values passed to the constructor. Declaration: constructor init(aa: extended;ab: extended;ac: extended;ad: extended; ba: extended;bb: extended;bc: extended;bd: extended; ca: extended;cb: extended;cc: extended;cd: extended; da: extended;db: extended;dc: extended;dd: extended) Visibility: default Description: Initializes the matrix, setting its elements to the values passed to the constructor. The order of the values is left to right, then top to bottom.
901
26.11.6
Tmatrix4_extended.get_column
Synopsis: Returns the c-th column of the matrix as vector. Declaration: function get_column(c: Byte) : Tvector4_extended Visibility: default Description: Returns the c-th column of the matrix as vector. The column numbering starts at 0.
26.11.7
Tmatrix4_extended.get_row
Synopsis: Returns the r-th row of the matrix as vector. Declaration: function get_row(r: Byte) : Tvector4_extended Visibility: default Description: Returns the r-th row of the matrix as vector. The row numbering starts at 0.
26.11.8
Tmatrix4_extended.set_column
Synopsis: Sets c-th column of the matrix with a vector. Declaration: procedure set_column(c: Byte;const v: Tvector4_extended) Visibility: default Description: Replaces the c-th column of the matrix with vector v. The column numbering starts at 0.
26.11.9
Tmatrix4_extended.set_row
Synopsis: Sets r-th row of the matrix with a vector. Declaration: procedure set_row(r: Byte;const v: Tvector4_extended) Visibility: default Description: Replaces the r-th row of the matrix with vector v. The row numbering starts at 0.
26.11.10
Tmatrix4_extended.determinant
Synopsis: Calculates the determinant of the matrix. Declaration: function determinant : extended Visibility: default Description: Returns the determinant of the matrix. Note: Calculating the determinant of a 4*4 matrix requires quite a few operations.
902
26.11.11
Tmatrix4_extended.inverse
Synopsis: Calculates the inverse of the matrix. Declaration: function inverse(Adeterminant: extended) : Tmatrix4_extended Visibility: default Description: Tmatrix4_extended.inverse returns a new matrix that is the inverse of the matrix. You must pass the determinant of the matrix as parameter. Note: Calculating the inverse of a 4*4 matrix requires quite a few operations.
26.11.12
Tmatrix4_extended.transpose
Synopsis: Returns the transposition of the matrix. Declaration: function transpose : Tmatrix4_extended Visibility: default Description: Tmatrix2_extended.transpose returns a new matrix that is the transposition of the matrix, that is, the matrix with the x and y coordinates of the values swapped.
26.12
26.12.1
Tmatrix4_single
Description
26.12.2
Page 905 904 904 904 904 903 905 904 905 905
Method overview
Description Calculates the determinant of the matrix. Returns the c-th column of the matrix as vector. Returns the r-th row of the matrix as vector. Initializes the matrix, setting its elements to the values passed to the constructor. Initializes the matrix and sets its elements to the identity matrix. Initializes the matrix and sets its elements to zero Calculates the inverse of the matrix. Sets c-th column of the matrix with a vector. Sets r-th row of the matrix with a vector. Returns the transposition of the matrix.
Property determinant get\_column get\_row init init\_identity init\_zero inverse set\_column set\_row transpose
26.12.3
Tmatrix4_single.init_zero
Synopsis: Initializes the matrix and sets its elements to zero Declaration: constructor init_zero Visibility: default
903
26.12.4
Tmatrix4_single.init_identity
Synopsis: Initializes the matrix and sets its elements to the identity matrix. Declaration: constructor init_identity Visibility: default Description: Initializes the matrix and sets its elements to the identity matrix, that is, elements to 1 on the leftupper to right-lower diagonal, the rest zero.
26.12.5
Tmatrix4_single.init
Synopsis: Initializes the matrix, setting its elements to the values passed to the constructor. Declaration: constructor init(aa: single;ab: single;ac: single;ad: single;ba: single; bb: single;bc: single;bd: single;ca: single;cb: single; cc: single;cd: single;da: single;db: single;dc: single; dd: single) Visibility: default Description: Initializes the matrix, setting its elements to the values passed to the constructor. The order of the values is left to right, then top to bottom.
26.12.6
Tmatrix4_single.get_column
Synopsis: Returns the c-th column of the matrix as vector. Declaration: function get_column(c: Byte) : Tvector4_single Visibility: default Description: Returns the c-th column of the matrix as vector. The column numbering starts at 0.
26.12.7
Tmatrix4_single.get_row
Synopsis: Returns the r-th row of the matrix as vector. Declaration: function get_row(r: Byte) : Tvector4_single Visibility: default Description: Returns the r-th row of the matrix as vector. The row numbering starts at 0.
26.12.8
Tmatrix4_single.set_column
Synopsis: Sets c-th column of the matrix with a vector. Declaration: procedure set_column(c: Byte;const v: Tvector4_single) Visibility: default Description: Replaces the c-th column of the matrix with vector v. The column numbering starts at 0.
904
26.12.9
Tmatrix4_single.set_row
Synopsis: Sets r-th row of the matrix with a vector. Declaration: procedure set_row(r: Byte;const v: Tvector4_single) Visibility: default Description: Replaces the r-th row of the matrix with vector v. The row numbering starts at 0.
26.12.10
Tmatrix4_single.determinant
Synopsis: Calculates the determinant of the matrix. Declaration: function determinant : single Visibility: default Description: Returns the determinant of the matrix. Note: Calculating the determinant of a 4*4 matrix requires quite a few operations.
26.12.11
Tmatrix4_single.inverse
Synopsis: Calculates the inverse of the matrix. Declaration: function inverse(Adeterminant: single) : Tmatrix4_single Visibility: default Description: Tmatrix4_single.inverse returns a new matrix that is the inverse of the matrix. You must pass the determinant of the matrix as parameter. Note: Calculating the inverse of a 4*4 matrix requires quite a few operations.
26.12.12
Tmatrix4_single.transpose
Synopsis: Returns the transposition of the matrix. Declaration: function transpose : Tmatrix4_single Visibility: default Description: Tmatrix2_single.transpose returns a new matrix that is the transposition of the matrix, that is, the matrix with the x and y coordinates of the values swapped.
26.13
26.13.1
Tvector2_double
Description
905
26.13.2
Page 906 906 906 906 906
Method overview
Description Initializes the vector, setting its elements to the values passed to the constructor. Initializes the vector and sets its elements to one Initializes the vector and sets its elements to zero Calculates the length of the vector. Calculates the squared length of the vector.
26.13.3
Tvector2_double.init_zero
Synopsis: Initializes the vector and sets its elements to zero Declaration: constructor init_zero Visibility: default
26.13.4
Tvector2_double.init_one
Synopsis: Initializes the vector and sets its elements to one Declaration: constructor init_one Visibility: default
26.13.5
Tvector2_double.init
Synopsis: Initializes the vector, setting its elements to the values passed to the constructor. Declaration: constructor init(a: Double;b: Double) Visibility: default
26.13.6
Tvector2_double.length
Synopsis: Calculates the length of the vector. Declaration: function length : Double Visibility: default Description: Calculate the length of the vector: length=sqrt(data[0]**2+data[1]**2). Try to use squared_length (1) if you are able to, as it is faster.
26.13.7
Tvector2_double.squared_length
Synopsis: Calculates the squared length of the vector. Declaration: function squared_length : Double Visibility: default Description: Calculate the squared length of the vector: squared_length=data[0]**2+data[1]**2.
906
26.14
26.14.1
Tvector2_extended
Description
26.14.2
Page 907 907 907 907 908
Method overview
Description Initializes the vector, setting its elements to the values passed to the constructor. Initializes the vector and sets its elements to one Initializes the vector and sets its elements to zero Calculates the length of the vector. Calculates the squared length of the vector.
26.14.3
Tvector2_extended.init_zero
Synopsis: Initializes the vector and sets its elements to zero Declaration: constructor init_zero Visibility: default
26.14.4
Tvector2_extended.init_one
Synopsis: Initializes the vector and sets its elements to one Declaration: constructor init_one Visibility: default
26.14.5
Tvector2_extended.init
Synopsis: Initializes the vector, setting its elements to the values passed to the constructor. Declaration: constructor init(a: extended;b: extended) Visibility: default
26.14.6
Tvector2_extended.length
Synopsis: Calculates the length of the vector. Declaration: function length : extended Visibility: default Description: Calculate the length of the vector: length=sqrt(data[0]**2+data[1]**2). Try to use squared_length (1) if you are able to, as it is faster.
907
26.14.7
Tvector2_extended.squared_length
Synopsis: Calculates the squared length of the vector. Declaration: function squared_length : extended Visibility: default Description: Calculate the squared length of the vector: squared_length=data[0]**2+data[1]**2.
26.15
26.15.1
Tvector2_single
Description
26.15.2
Page 908 908 908 909 909
Method overview
Description Initializes the vector, setting its elements to the values passed to the constructor. Initializes the vector and sets its elements to one Initializes the vector and sets its elements to zero Calculates the length of the vector. Calculates the squared length of the vector.
26.15.3
Tvector2_single.init_zero
Synopsis: Initializes the vector and sets its elements to zero Declaration: constructor init_zero Visibility: default
26.15.4
Tvector2_single.init_one
Synopsis: Initializes the vector and sets its elements to one Declaration: constructor init_one Visibility: default
26.15.5
Tvector2_single.init
Synopsis: Initializes the vector, setting its elements to the values passed to the constructor. Declaration: constructor init(a: single;b: single) Visibility: default
908
26.15.6
Tvector2_single.length
Synopsis: Calculates the length of the vector. Declaration: function length : single Visibility: default Description: Calculate the length of the vector: length=sqrt(data[0]**2+data[1]**2). Try to use squared_length (1) if you are able to, as it is faster.
26.15.7
Tvector2_single.squared_length
Synopsis: Calculates the squared length of the vector. Declaration: function squared_length : single Visibility: default Description: Calculate the squared length of the vector: squared_length=data[0]**2+data[1]**2.
26.16
26.16.1
Tvector3_double
Description
26.16.2
Page 910 909 909 910 910
Method overview
Description Initializes the vector, setting its elements to the values passed to the constructor. Initializes the vector and sets its elements to one Initializes the vector and sets its elements to zero Calculates the length of the vector. Calculates the squared length of the vector.
26.16.3
Tvector3_double.init_zero
Synopsis: Initializes the vector and sets its elements to zero Declaration: constructor init_zero Visibility: default
26.16.4
Tvector3_double.init_one
Synopsis: Initializes the vector and sets its elements to one Declaration: constructor init_one Visibility: default
909
26.16.5
Tvector3_double.init
Synopsis: Initializes the vector, setting its elements to the values passed to the constructor. Declaration: constructor init(a: Double;b: Double;c: Double) Visibility: default
26.16.6
Tvector3_double.length
Synopsis: Calculates the length of the vector. Declaration: function length : Double Visibility: default Description: Calculate the length of the vector: length=sqrt(data[0]**2+data[1]**2+data[2]**2). Try to use squared_length (1) if you are able to, as it is faster.
26.16.7
Tvector3_double.squared_length
Synopsis: Calculates the squared length of the vector. Declaration: function squared_length : Double Visibility: default Description: Calculate the squared length of the vector: squared_length=data[0]**2+data[1]**2+data[2]**2.
26.17
26.17.1
Tvector3_extended
Description
26.17.2
Page 911 911 910 911 911
Method overview
Description Initializes the vector, setting its elements to the values passed to the constructor. Initializes the vector and sets its elements to one Initializes the vector and sets its elements to zero Calculates the length of the vector. Calculates the squared length of the vector.
26.17.3
Tvector3_extended.init_zero
Synopsis: Initializes the vector and sets its elements to zero Declaration: constructor init_zero Visibility: default
910
26.17.4
Tvector3_extended.init_one
Synopsis: Initializes the vector and sets its elements to one Declaration: constructor init_one Visibility: default
26.17.5
Tvector3_extended.init
Synopsis: Initializes the vector, setting its elements to the values passed to the constructor. Declaration: constructor init(a: extended;b: extended;c: extended) Visibility: default
26.17.6
Tvector3_extended.length
Synopsis: Calculates the length of the vector. Declaration: function length : extended Visibility: default Description: Calculate the length of the vector: length=sqrt(data[0]**2+data[1]**2+data[2]**2). Try to use squared_length (1) if you are able to, as it is faster.
26.17.7
Tvector3_extended.squared_length
Synopsis: Calculates the squared length of the vector. Declaration: function squared_length : extended Visibility: default Description: Calculate the squared length of the vector: squared_length=data[0]**2+data[1]**2+data[2]**2.
26.18
26.18.1
Tvector3_single
Description
26.18.2
Page 912 912 912 912 912
Method overview
Description Initializes the vector, setting its elements to the values passed to the constructor. Initializes the vector and sets its elements to one Initializes the vector and sets its elements to zero Calculates the length of the vector. Calculates the squared length of the vector.
911
26.18.3
Tvector3_single.init_zero
Synopsis: Initializes the vector and sets its elements to zero Declaration: constructor init_zero Visibility: default
26.18.4
Tvector3_single.init_one
Synopsis: Initializes the vector and sets its elements to one Declaration: constructor init_one Visibility: default
26.18.5
Tvector3_single.init
Synopsis: Initializes the vector, setting its elements to the values passed to the constructor. Declaration: constructor init(a: single;b: single;c: single) Visibility: default
26.18.6
Tvector3_single.length
Synopsis: Calculates the length of the vector. Declaration: function length : single Visibility: default Description: Calculate the length of the vector: length=sqrt(data[0]**2+data[1]**2+data[2]**2). Try to use squared_length (1) if you are able to, as it is faster.
26.18.7
Tvector3_single.squared_length
Synopsis: Calculates the squared length of the vector. Declaration: function squared_length : single Visibility: default Description: Calculate the squared length of the vector: squared_length=data[0]**2+data[1]**2+data[2]**2.
26.19
26.19.1
Tvector4_double
Description
912
26.19.2
Page 913 913 913 913 913
Method overview
Description Initializes the vector, setting its elements to the values passed to the constructor. Initializes the vector and sets its elements to one Initializes the vector and sets its elements to zero Calculates the length of the vector. Calculates the squared length of the vector.
26.19.3
Tvector4_double.init_zero
Synopsis: Initializes the vector and sets its elements to zero Declaration: constructor init_zero Visibility: default
26.19.4
Tvector4_double.init_one
Synopsis: Initializes the vector and sets its elements to one Declaration: constructor init_one Visibility: default
26.19.5
Tvector4_double.init
Synopsis: Initializes the vector, setting its elements to the values passed to the constructor. Declaration: constructor init(a: Double;b: Double;c: Double;d: Double) Visibility: default
26.19.6
Tvector4_double.length
Synopsis: Calculates the length of the vector. Declaration: function length : Double Visibility: default Description: Calculate the length of the vector: length=sqrt(data[0]**2+data[1]**2+data[2]**2+data[3]**2). Try to use squared_length (1) if you are able to, as it is faster.
26.19.7
Tvector4_double.squared_length
Synopsis: Calculates the squared length of the vector. Declaration: function squared_length : Double Visibility: default Description: Calculate the squared length of the vector: squared_length=data[0]**2+data[1]**2+data[2]**2+data[3]**2.
913
26.20
26.20.1
Tvector4_extended
Description
26.20.2
Page 914 914 914 914 915
Method overview
Description Initializes the vector, setting its elements to the values passed to the constructor. Initializes the vector and sets its elements to one Initializes the vector and sets its elements to zero Calculates the length of the vector. Calculates the squared length of the vector.
26.20.3
Tvector4_extended.init_zero
Synopsis: Initializes the vector and sets its elements to zero Declaration: constructor init_zero Visibility: default
26.20.4
Tvector4_extended.init_one
Synopsis: Initializes the vector and sets its elements to one Declaration: constructor init_one Visibility: default
26.20.5
Tvector4_extended.init
Synopsis: Initializes the vector, setting its elements to the values passed to the constructor. Declaration: constructor init(a: extended;b: extended;c: extended;d: extended) Visibility: default
26.20.6
Tvector4_extended.length
Synopsis: Calculates the length of the vector. Declaration: function length : extended Visibility: default Description: Calculate the length of the vector: length=sqrt(data[0]**2+data[1]**2+data[2]**2+data[3]**2). Try to use squared_length (1) if you are able to, as it is faster.
914
26.20.7
Tvector4_extended.squared_length
Synopsis: Calculates the squared length of the vector. Declaration: function squared_length : extended Visibility: default Description: Calculate the squared length of the vector: squared_length=data[0]**2+data[1]**2+data[2]**2+data[3]**2.
26.21
26.21.1
Tvector4_single
Description
26.21.2
Page 915 915 915 916 916
Method overview
Description Initializes the vector, setting its elements to the values passed to the constructor. Initializes the vector and sets its elements to one Initializes the vector and sets its elements to zero Calculates the length of the vector. Calculates the squared length of the vector.
26.21.3
Tvector4_single.init_zero
Synopsis: Initializes the vector and sets its elements to zero Declaration: constructor init_zero Visibility: default
26.21.4
Tvector4_single.init_one
Synopsis: Initializes the vector and sets its elements to one Declaration: constructor init_one Visibility: default
26.21.5
Tvector4_single.init
Synopsis: Initializes the vector, setting its elements to the values passed to the constructor. Declaration: constructor init(a: single;b: single;c: single;d: single) Visibility: default
915
26.21.6
Tvector4_single.length
Synopsis: Calculates the length of the vector. Declaration: function length : single Visibility: default Description: Calculate the length of the vector: length=sqrt(data[0]**2+data[1]**2+data[2]**2+data[3]**2). Try to use squared_length (1) if you are able to, as it is faster.
26.21.7
Tvector4_single.squared_length
Synopsis: Calculates the squared length of the vector. Declaration: function squared_length : single Visibility: default Description: Calculate the squared length of the vector: squared_length=data[0]**2+data[1]**2+data[2]**2+data[3]**2.
916
Chapter 27
This document describes the MMX unit. This unit allows you to use the MMX capabilities of the Free Pascal compiler. It was written by Florian Klaemp for the I386 processor. It should work on all platforms that use the Intel processor.
27.2
27.2.1
is_amd_3d_cpu : Boolean = False The is_amd_3d_cpu initialized constant allows you to determine if the computer has the AMD 3D extensions. It is set correctly in the units initialization code. is_amd_3d_dsp_cpu : Boolean = False The is_amd_3d_dsp_cpu initialized constant allows you to determine if the computer has the AMD 3D DSP extensions. It is set correctly in the units initialization code. is_amd_3d_mmx_cpu : Boolean = False The is_amd_3d_mmx_cpu initialized constant allows you to determine if the computer has the AMD 3D MMX extensions. It is set correctly in the units initialization code. is_mmx_cpu : Boolean = False The is_mmx_cpu initialized constant allows you to determine if the computer has MMX extensions. It is set correctly in the units initialization code. is_sse2_cpu : Boolean = False The is_sse2_cpu initialized constant allows you to determine if the computer has the SSE2 extensions. It is set correctly in the units initialization code. is_sse_cpu : Boolean = False The is_sse_cpu initialized constant allows you to determine if the computer has the SSE extensions. It is set correctly in the units initialization code. 917
27.2.2
Types
pmmxbyte = ^tmmxbyte Pointer to tmmxbyte (918) array type pmmxcardinal = ^tmmxcardinal Pointer to tmmxcardinal (918) array type pmmxinteger = ^tmmxinteger Pointer to tmmxinteger (918) array type pmmxlongint = ^tmmxlongint Pointer to tmmxlongint (918) array type pmmxshortint = ^tmmxshortint Pointer to tmmxshortint (918) array type pmmxsingle = ^tmmxsingle Pointer to tmmxsingle (918) array type pmmxword = ^tmmxword Pointer to tmmxword (918) array type tmmxbyte = Array[0..7] of Byte Array of bytes, 64 bits in size tmmxcardinal = Array[0..1] of Cardinal Array of cardinals, 64 bits in size tmmxinteger = Array[0..3] of Integer Array of integers, 64 bits in size tmmxlongint = Array[0..1] of LongInt Array of longint, 64 bits in size tmmxshortint = Array[0..7] of ShortInt Array of shortints, 64 bits in size tmmxsingle = Array[0..1] of single Array of singles, 64 bits in size tmmxword = Array[0..3] of Word Array of words, 64 bits in size 918
27.3
27.3.1
Synopsis: Reset oating point registers Declaration: procedure emms Visibility: default Description: Emms sets all oating point registers to empty. This procedure must be called after you have used any MMX instructions, if you want to use oating point arithmetic. If you just want to move oating point data around, it isnt necessary to call this function, the compiler doesnt use the FPU registers when moving data. Only when doing calculations, you should use this function. The following code demonstrates this: Program MMXDemo; uses mmx; var d1 : double; a : array[0..10000] of double; i : longint; begin d1:=1.0; {$mmx+} { floating point data is used, but we do _no_ arithmetic } for i:=0 to 10000 do a[i]:=d2; { this is done with 64 bit moves } {$mmx-} emms; { clear fpu } { now we can do floating point arithmetic again } end. See also: femms (919)
27.3.2
femms
Synopsis: Reset oating point registers - AMD version Declaration: procedure femms Visibility: default Description: femms executes the femms assembler instruction for AMD processors. it is not supported by all assemblers, hence it is coded as byte codes. See also: emms (919)
919
Chapter 28
The Mouse unit implements a platform independent mouse handling interface. It is implemented identically on all platforms supported by Free Pascal and can be enhanced with custom drivers, should this be needed. It is intended to be used only in text-based screens, for instance in conjunction with the keyboard and video unit. No support for graphical screens is implemented, and there are (currently) no plans to implement this.
28.2
The mouse unit has support for adding a custom mouse driver. This can be used to add support for mouses not supported by the standard Free Pascal driver, but also to enhance an existing driver for instance to log mouse events or to implement a record and playback function. The following unit shows how a mouse driver can be enhanced by adding some logging capabilities to the driver. Listing: ./mouseex/logmouse.pp
u n i t logmouse ; interface Procedure Procedure Function Procedure StartMouseLogging ; StopMouseLogging ; IsMouseLogging : Boolean ; SetMouseLogFileName ( FileName : S t r i n g ) ;
implementation uses s y s u t i l s , Mouse ; var NewMouseDriver , OldMouseDriver : TMouseDriver ; A c t i v e , Logging : Boolean ; LogFileName : S t r i n g ; MouseLog : Text ;
920
Function TimeStamp : S t r i n g ; begin TimeStamp : = FormatDateTime ( hh : nn : ss , Time ( ) ) ; end ; Procedure StartMouseLogging ; begin Logging : = True ; W r i t e l n ( MouseLog , S t a r t l o g g i n g mouse events a t : , TimeStamp ) ; end ; Procedure StopMouseLogging ; begin W r i t e l n ( MouseLog , Stop l o g g i n g mouse events a t : , TimeStamp ) ; Logging : = False ; end ; Function IsMouseLogging : Boolean ; begin IsMouseLogging : = Logging ; end ; Procedure LogGetMouseEvent ( Var Event : TMouseEvent ) ; Var M : TMouseEvent ; begin OldMouseDriver . GetMouseEvent (M) ; I f Logging then begin Write ( MouseLog , TimeStamp , : Mouse ) ; With M do begin Case A c t i o n of MouseActionDown : Write ( MouseLog , down ) ; MouseActionUp : Write ( MouseLog , up ) ; MouseActionMove : Write ( MouseLog , move ) ; end ; Write ( MouseLog , event a t ,X , , ,Y ) ; I f ( Buttons < >0) then begin Write ( MouseLog , f o r b u t t o n s : ) ; I f ( B u t t o n s and MouseLeftbutton ) < >0 then Write ( MouseLog , L e f t ) ; I f ( B u t t o n s and MouseRightbutton ) < >0 then Write ( MouseLog , R i g h t ) ; I f ( B u t t o n s and MouseMiddlebutton ) < >0 then Write ( MouseLog , Middle ) ; end ; W r i t e l n ( MouseLog ) ; end ; end ;
921
end ; Procedure LogInitMouse ; begin OldMouseDriver . I n i t D r i v e r ( ) ; Assign ( MouseLog , logFileName ) ; Rewrite ( MouseLog ) ; A c t i v e : = True ; StartMouseLogging ; end ; Procedure LogDoneMouse ; begin StopMouseLogging ; Close ( MouseLog ) ; A c t i v e : = False ; OldMouseDriver . DoneDriver ( ) ; end ; Procedure SetMouseLogFileName ( FileName : S t r i n g ) ; begin I f Not A c t i v e then LogFileName : = FileName ; end ; Initialization GetMouseDriver ( OldMouseDriver ) ; NewMouseDriver : = OldMouseDriver ; NewMouseDriver . GetMouseEvent : = @LogGetMouseEvent ; NewMouseDriver . I n i t D r i v e r : = @LogInitMouse ; NewMouseDriver . DoneDriver : =@LogDoneMouse ; LogFileName : = Mouse . l o g ; Logging : = False ; SetMouseDriver ( NewMouseDriver ) ; end .
28.3
28.3.1
errMouseBase = 1030 Base for mouse error codes. errMouseInitError = errMouseBase + 0 Mouse initialization error errMouseNotImplemented = errMouseBase + 1 Mouse driver not implemented.
922
MouseActionDown = $0001 Mouse button down event signal. MouseActionMove = $0004 Mouse cursor move event signal. MouseActionUp = $0002 Mouse button up event signal. MouseEventBufSize = 16 The mouse unit has a mechanism to buffer mouse events. This constant denes the size of the event buffer. MouseLeftButton = $01 Left mouse button event. MouseMiddleButton = $04 Middle mouse button event. MouseRightButton = $02 Right mouse button event.
28.3.2
Types
PMouseEvent = ^TMouseEvent Pointer to TMouseEvent (924) record. TMouseDriver = record UseDefaultQueue : Boolean; InitDriver : procedure; DoneDriver : procedure; DetectMouse : function : Byte; ShowMouse : procedure; HideMouse : procedure; GetMouseX : function : Word; GetMouseY : function : Word; GetMouseButtons : function : Word; SetMouseXY : procedure(x: Word;y: Word); GetMouseEvent : procedure(var MouseEvent: TMouseEvent); PollMouseEvent : function(var MouseEvent: TMouseEvent) : Boolean; PutMouseEvent : procedure(const MouseEvent: TMouseEvent); end
923
The TMouseDriver record is used to implement a mouse driver in the SetMouseDriver (929) function. Its elds must be lled in before calling the SetMouseDriver (929) function. TMouseEvent = packed record buttons : Word; x : Word; y : Word; Action : Word; end
The TMouseEvent is the central type of the mouse unit, it is used to describe all mouse events. The Buttons eld describes which buttons were down when the event occurred. The x,y elds describe where the event occurred on the screen. The Action describes what action was going on when the event occurred. The Buttons and Action eld can be examined using the constants dened in the unit interface.
28.3.3
Variables
MouseButtons : Byte This variable keeps track of the last known mouse button state. Do not use. MouseIntFlag : Byte This variable keeps track of the last known internal mouse state. Do not use. MouseWhereX : Word This variable keeps track of the last known cursor position. Do not use. MouseWhereY : Word This variable keeps track of the last known cursor position. Do not use.
28.4
28.4.1
Synopsis: Detect the presence of a mouse. Declaration: function DetectMouse : Byte Visibility: default Description: DetectMouse detects whether a mouse is attached to the system or not. If there is no mouse, then zero is returned. If a mouse is attached, then the number of mouse buttons is returnead. This function should be called after the mouse driver was initialized. Errors: None. See also: InitMouse (928), DoneMouse (925) 924
Listing: ./mouseex/ex1.pp
Program Example1 ; { Program t o demonstrate t h e DetectMouse f u n c t i o n . } Uses mouse ; Var B u t t o n s : Byte ; begin InitMouse ; B u t t o n s : = DetectMouse ; I f B u t t o n s =0 then W r i t e l n ( No mouse p r e s e n t . ) else W r i t e l n ( Found mouse w i t h , Buttons , b u t t o n s . ) ; DoneMouse ; end .
28.4.2
DoneMouse
Synopsis: Deinitialize mouse driver. Declaration: procedure DoneMouse Visibility: default Description: DoneMouse De-initializes the mouse driver. It cleans up any memory allocated when the mouse was initialized, or removes possible mouse hooks from memory. The mouse functions will not work after DoneMouse was called. If DoneMouse is called a second time, it will exit at once. InitMouse should be called before DoneMouse can be called again. For an example, see most other mouse functions. Errors: None. See also: DetectMouse (924), InitMouse (928)
28.4.3
GetMouseButtons
Synopsis: Get the state of the mouse buttons Declaration: function GetMouseButtons : Word Visibility: default Description: GetMouseButtons returns the current button state of the mouse, i.e. it returns a or-ed combination of the following constants: MouseLeftButtonWhen the left mouse button is held down. MouseRightButtonWhen the right mouse button is held down. MouseMiddleButtonWhen the middle mouse button is held down. Errors: None. See also: GetMouseEvent (926), GetMouseX (926), GetMouseY (927) 925
Listing: ./mouseex/ex2.pp
Program Example2 ; { Program t o demonstrate t h e GetMouseButtons f u n c t i o n . } Uses mouse ; begin InitMouse ; W r i t e l n ( Press r i g h t mouse b u t t o n t o e x i t program ) ; While ( GetMouseButtons <>MouseRightButton ) do ; DoneMouse ; end .
28.4.4
GetMouseDriver
Synopsis: Get a copy of the currently active mouse driver. Declaration: procedure GetMouseDriver(var Driver: TMouseDriver) Visibility: default Description: GetMouseDriver returns the currently set mouse driver. It can be used to retrieve the current mouse driver, and override certain callbacks. A more detailed explanation about getting and setting mouse drivers can be found in mousedrv (920). For an example, see the section on writing a custom mouse driver, mousedrv (920) Errors: None. See also: SetMouseDriver (929)
28.4.5
GetMouseEvent
Synopsis: Get next mouse event from the queue. Declaration: procedure GetMouseEvent(var MouseEvent: TMouseEvent) Visibility: default Description: GetMouseEvent returns the next mouse event (a movement, button press or button release), and waits for one if none is available in the queue. Some mouse drivers can implement a mouse event queue which can hold multiple events till they are fetched. Others dont, and in that case, a one-event queue is implemented for use with PollMouseEvent (929). Errors: None. See also: GetMouseButtons (925), GetMouseX (926), GetMouseY (927)
28.4.6
GetMouseX
Synopsis: Query the current horizontal position of the mouse cursor. Declaration: function GetMouseX : Word
926
Visibility: default Description: GetMouseX returns the current X position of the mouse. X is measured in characters, starting at 0 for the left side of the screen. Errors: None. See also: GetMouseButtons (925), GetMouseEvent (926), GetMouseY (927) Listing: ./mouseex/ex4.pp
Program Example4 ; { Program t o demonstrate t h e GetMouseX , GetMouseY f u n c t i o n s . } Uses mouse ; Var X , Y : Word ; begin InitMouse ; W r i t e l n ( Move mouse c u r s o r t o square 1 0 , 1 0 t o end ) ; Repeat X: = GetMouseX ; Y: = GetMouseY ; W r i t e l n ( X , Y = ( ,X , , ,Y , ) ) ; U n t i l ( X= 9 ) and ( Y= 9 ) ; DoneMouse ; end .
28.4.7
GetMouseY
Synopsis: Query the current vertical position of the mouse cursor. Declaration: function GetMouseY : Word Visibility: default Description: GetMouseY returns the current Y position of the mouse. Y is measured in characters, starting at 0 for the top of the screen. For an example, see GetMouseX (926) Errors: None. See also: GetMouseButtons (925), GetMouseEvent (926), GetMouseX (926)
28.4.8
HideMouse
Synopsis: Hide the mouse cursor. Declaration: procedure HideMouse Visibility: default Description: HideMouse hides the mouse cursor. This may or may not be implemented on all systems, and depends on the driver. 927
28.4.9
InitMouse
Synopsis: Initialize the FPC mouse driver. Declaration: procedure InitMouse Visibility: default Description: InitMouse Initializes the mouse driver. This will allocate any data structures needed for the mouse to function. All mouse functions can be used after a call to InitMouse. A call to InitMouse must always be followed by a call to DoneMouse (925) at program exit. Failing to do so may leave the mouse in an unusable state, or may result in memory leaks. For an example, see most other functions. Errors: None. See also: DoneMouse (925), DetectMouse (924)
928
28.4.10
PollMouseEvent
Synopsis: Query next mouse event. Do not wait if none available. Declaration: function PollMouseEvent(var MouseEvent: TMouseEvent) : Boolean Visibility: default Description: PollMouseEvent checks whether a mouse event is available, and returns it in MouseEvent if one is found. The function result is True in that case. If no mouse event is pending, the function result is False, and the contents of MouseEvent is undened. Note that after a call to PollMouseEvent, the event should still be removed from the mouse event queue with a call to GetMouseEvent. Errors: None. See also: GetMouseEvent (926), PutMouseEvent (929)
28.4.11
PutMouseEvent
Synopsis: Put a mouse event in the venet queue. Declaration: procedure PutMouseEvent(const MouseEvent: TMouseEvent) Visibility: default Description: PutMouseEvent adds MouseEvent to the input queue. The next call to GetMouseEvent (926) or PollMouseEvent will then return MouseEvent. Please note that depending on the implementation the mouse event queue can hold only one value. Errors: None. See also: GetMouseEvent (926), PollMouseEvent (929)
28.4.12
SetMouseDriver
Synopsis: Set a new mouse driver. Declaration: procedure SetMouseDriver(const Driver: TMouseDriver) Visibility: default Description: SetMouseDriver sets the mouse driver to Driver. This function should be called before InitMouse (928) is called, or after DoneMouse is called. If it is called after the mouse has been initialized, it does nothing. For more information on setting the mouse driver, mousedrv (920). For an example, see mousedrv (920) See also: InitMouse (928), DoneMouse (925), GetMouseDriver (926)
929
28.4.13
SetMouseXY
Synopsis: Set the mouse cursor position. Declaration: procedure SetMouseXY(x: Word;y: Word) Visibility: default Description: SetMouseXY places the mouse cursor on X,Y. X and Y are zero based character coordinates: 0,0 is the top-left corner of the screen, and the position is in character cells (i.e. not in pixels). Errors: None. See also: GetMouseX (926), GetMouseY (927) Listing: ./mouseex/ex7.pp
Program Example7 ; { Program t o demonstrate t h e SetMouseXY f u n c t i o n . } Uses mouse ; begin InitMouse ; W r i t e l n ( C l i c k r i g h t mouse b u t t o n t o q u i t . ) ; SetMouseXY ( 4 0 , 1 2 ) ; Repeat W r i t e l n ( GetMouseX , , , GetMouseY ) ; I f ( GetMouseX > 7 0 ) then SetMouseXY ( 1 0 , GetMouseY ) ; I f ( GetMouseY > 2 0 ) then SetMouseXY ( GetMouseX , 5 ) ; U n t i l ( GetMouseButtons=MouseRightButton ) ; DoneMouse ; end .
28.4.14
ShowMouse
Synopsis: Show the mouse cursor. Declaration: procedure ShowMouse Visibility: default Description: ShowMouse shows the mouse cursor if it was previously hidden. The capability to hide or show the mouse cursor depends on the driver. For an example, see HideMouse (927) Errors: None. See also: HideMouse (927)
930
Chapter 29
This document documents the objects unit. The unit was implemented by many people, and was mainly taken from the FreeVision sources. It has been ported to all supported platforms. The methods and elds that are in a Private part of an object declaration have been left out of this documentation.
29.2
29.2.1
coIndexError = -1 Collection list error: Index out of range coOverflow = -2 Collection list error: Overow DefaultTPCompatible : Boolean = False DefaultTPCompatible is used to initialize tstream.tpcompatible (1). MaxBytes = 128 * 1024 * 128 Maximum data size (in bytes) MaxCollectionSize = MaxBytes div (Pointer) Maximum collection size (in items) MaxPtrs = MaxBytes div (Pointer) Maximum data size (in pointers) 931
MaxReadBytes = $7fffffff Maximum data that can be read from a stream (not used) MaxTPCompatibleCollectionSize = 65520 div 4 Maximum collection size (in items, same value as in TP) MaxWords = MaxBytes div (Word) Maximum data size (in words)
RCollection : TStreamRec = (ObjType: 50; VmtLink: (^(TCollection)); Load: @TCollectio Default stream record for the TCollection (948) object.
RStrCollection : TStreamRec = (ObjType: 69; VmtLink: (^(TStrCollection)); Load: @TStr Default stream record for the TStrCollection (987) object.
RStringCollection : TStreamRec = (ObjType: 51; VmtLink: (^(TStringCollection)); Load: Default stream record for the TStringCollection (997) object.
RStringList : TStreamRec = (ObjType: 52; VmtLink: (^(TStringList)); Load: @TStringLis Default stream record for the TStringList (999) object.
RStrListMaker : TStreamRec = (ObjType: 52; VmtLink: (^(TStrListMaker)); Load: Nil; St Default stream record for the TStrListMaker (1001) object. stCreate = $3C00 Stream initialization mode: Create new le stError = -1 Stream error codes: Access error stGetError = -5 Stream error codes: Get object error stInitError = -2 Stream error codes: Initialize error stOk = 0 Stream error codes: No error 932
stOpen = $3D02 Stream initialization mode: Read/write access stOpenError = -8 Stream error codes: Error opening stream stOpenRead = $3D00 Stream initialization mode: Read access only stOpenWrite = $3D01 Stream initialization mode: Write access only stPutError = -6 Stream error codes: Put object error stReadError = -3 Stream error codes: Stream read error StreamError : Pointer = Nil Pointer to default stream error handler. stSeekError = -7 Stream error codes: Seek error in stream stWriteError = -4 Stream error codes: Stream write error vmtHeaderSize = 8 Size of the VMT header in an object (not used).
29.2.2
Types
AsciiZ = Array[0..255] of Char Filename - null terminated array of characters. FNameStr = String Filename - shortstring version.
933
Record describing a longint (in Words) PBufStream = ^TBufStream Pointer to TBufStream (944) object. PByteArray = ^TByteArray Pointer to TByteArray (936) PCharSet = ^TCharSet Pointer to TCharSet (936). PCollection = ^TCollection Pointer to TCollection (948) object. PDosStream = ^TDosStream Pointer to TDosStream (962) object. PItemList = ^TItemList Pointer to TItemList (936) object. PMemoryStream = ^TMemoryStream Pointer to TMemoryStream (967) object. PObject = ^TObject Pointer to TObject (969) object. PPoint = ^TPoint Pointer to TPoint (971) record. PPointerArray = ^TPointerArray Pointer to TPointerArray (936) PRect = ^TRect Pointer to TRect (971) object. 934
PResourceCollection = ^TResourceCollection Pointer to TResourceCollection (977) object. PResourceFile = ^TResourceFile Pointer to TResourceFile (978) object. PSortedCollection = ^TSortedCollection Pointer to TSortedCollection (981) object. PStrCollection = ^TStrCollection Pointer to TStrCollection (987) object. PStream = ^TStream Pointer type to TStream (989) PStreamRec = ^TStreamRec Pointer to TStreamRec (936) PStrIndex = ^TStrIndex Pointer to TStrIndex (936) array. PString = PShortString Pointer to a shortstring. PStringCollection = ^TStringCollection Pointer to TStringCollection (997) object. PStringList = ^TStringList Pointer to TStringList (999) object. PStrListMaker = ^TStrListMaker Pointer to TStrListMaker (1001) object. PtrRec = packed record Ofs : Word; Seg : Word; end
PUnSortedStrCollection = ^TUnSortedStrCollection Pointer to TUnsortedStrCollection (1002) object. PWordArray = ^TWordArray Pointer to TWordArray (937) Sw_Integer = LongInt Alias for longint Sw_Word = Cardinal Alias for Cardinal TByteArray = Array[0..MaxBytes-1] of Byte Array with maxmimum allowed number of bytes. TCharSet = Set of Char Generic set of characters type. TItemList = Array[0..MaxCollectionSize-1] of Pointer Pointer array type used in a TCollection (948) TPointerArray = Array[0..MaxPtrs-1] of Pointer Array with maxmimum allowed number of pointers TStreamRec = packed record ObjType : Sw_Word; VmtLink : pointer; Load : Pointer; Store : Pointer; Next : PStreamRec; end
TSreamRec is used by the Objects unit streaming mechanism: when an object is registered, a TStreamRec record is added to a list of records. This list is used when objects need to be streamed from/streamed to a stream. It contains all the information needed to stream the object. TStrIndex = Array[0..9999] of TStrIndexRec Pointer array type used in a TStringList (999)
936
TStrIndexRec = packed record Key : Sw_Word; Count : Word; Offset : Word; end
Record type used in a TStringList (999) to store the strings TWordArray = Array[0..MaxWords-1] of Word Array with maxmimum allowed number of words. WordRec = packed record Hi : Byte; Lo : Byte; end
29.2.3
Variables
invalidhandle : THandle Value for invalid handle. Initial value for le stream handles or when the stream is closed.
29.3
29.3.1
Synopsis: Abstract error handler. Declaration: procedure Abstract Visibility: default Description: When implementing abstract methods, do not declare them as abstract. Instead, dene them simply as virtual. In the implementation of such abstract methods, call the Abstract procedure. This allows explicit control of what happens when an abstract method is called. The current implementation of Abstract terminates the program with a run-time error 211. Errors: None.
29.3.2
CallPointerConstructor
Synopsis: Call a constructor with a pointer argument. Declaration: function CallPointerConstructor(Ctor: pointer;Obj: pointer;VMT: pointer; Param1: pointer) : pointer Visibility: default
937
Description: CallVoidConstructor calls the constructor of an object. Ctor is the address of the constructor, Obj is a pointer to the instance. If it is Nil, then a new instance is allocated. VMT is a pointer to the objects VMT. Param1 is passed to the constructor. The return value is a pointer to the instance. Note that this can only be used on constructors that require a pointer as the sole argument. It can also be used to call a constructor with a single argument by reference. Errors: If the constructor expects other arguments than a pointer, the stack may be corrupted. See also: CallVoidConstructor (939), CallPointerMethod (938), CallVoidLocal (939), CallPointerLocal (938), CallVoidMethodLocal (940), CallPointerMethodLocal (938)
29.3.3
CallPointerLocal
Synopsis: Call a local nested function with a pointer argument Declaration: function CallPointerLocal(Func: pointer;Frame: Pointer;Param1: pointer) : pointer Visibility: default Description: CallPointerLocal calls the local procedure with address Func, where Frame is the frame of the wrapping function. It passes Param1 to the local function. Errors: If the local function expects other parameters than a pointer, the stack may become corrupted. See also: CallPointerMethod (938), CallVoidMethod (939), CallVoidLocal (939), CallVoidMethodLocal (940), CallPointerMethodLocal (938), CallVoidConstructor (939), CallPointerConstructor (937)
29.3.4
CallPointerMethod
Synopsis: Call a method with a single pointer argument Declaration: function CallPointerMethod(Method: pointer;Obj: pointer;Param1: pointer) : pointer Visibility: default Description: CallPointerMethod calls the method with address Method for instance Obj. It passes Param1 to the method as the single argument. It returns a pointer to the instance. Errors: If the method expects other parameters than a single pointer, the stack may become corrupted. See also: CallVoidMethod (939), CallVoidLocal (939), CallPointerLocal (938), CallVoidMethodLocal (940), CallPointerMethodLocal (938), CallVoidConstructor (939), CallPointerConstructor (937)
29.3.5
CallPointerMethodLocal
Synopsis: Call a local procedure of a method with a pointer argument Declaration: function CallPointerMethodLocal(Func: pointer;Frame: Pointer; Obj: pointer;Param1: pointer) : pointer Visibility: default Description: CallPointerMethodLocal calls the local procedure with address Func, where Frame is the frame of the wrapping method. It passes Param1 to the local function.
938
Errors: If the local function expects other parameters than a pointer, the stack may become corrupted. See also: CallPointerMethod (938), CallVoidMethod (939), CallPointerLocal (938), CallVoidLocal (939), CallVoidMethodLocal (940), CallVoidConstructor (939), CallPointerConstructor (937)
29.3.6
CallVoidConstructor
Synopsis: Call a constructor with no arguments Declaration: function CallVoidConstructor(Ctor: pointer;Obj: pointer;VMT: pointer) : pointer Visibility: default Description: CallVoidConstructor calls the constructor of an object. Ctor is the address of the constructor, Obj is a pointer to the instance. If it is Nil, then a new instance is allocated. VMT is a pointer to the objects VMT. The return value is a pointer to the instance. Note that this can only be used on constructors that require no arguments. Errors: If the constructor expects arguments, the stack may be corrupted. See also: CallPointerConstructor (937), CallPointerMethod (938), CallVoidLocal (939), CallPointerLocal (938), CallVoidMethodLocal (940), CallPointerMethodLocal (938)
29.3.7
CallVoidLocal
Synopsis: Call a local nested procedure. Declaration: function CallVoidLocal(Func: pointer;Frame: Pointer) : pointer Visibility: default Description: CallVoidLocal calls the local procedure with address Func, where Frame is the frame of the wrapping function. Errors: If the local function expects parameters, the stack may become corrupted. See also: CallPointerMethod (938), CallVoidMethod (939), CallPointerLocal (938), CallVoidMethodLocal (940), CallPointerMethodLocal (938), CallVoidConstructor (939), CallPointerConstructor (937)
29.3.8
CallVoidMethod
Synopsis: Call an object method Declaration: function CallVoidMethod(Method: pointer;Obj: pointer) : pointer Visibility: default Description: CallVoidMethod calls the method with address Method for instance Obj. It returns a pointer to the instance. Errors: If the method expects parameters, the stack may become corrupted. See also: CallPointerMethod (938), CallVoidLocal (939), CallPointerLocal (938), CallVoidMethodLocal (940), CallPointerMethodLocal (938), CallVoidConstructor (939), CallPointerConstructor (937)
939
29.3.9
CallVoidMethodLocal
Synopsis: Call a local procedure of a method Declaration: function CallVoidMethodLocal(Func: pointer;Frame: Pointer;Obj: pointer) : pointer Visibility: default Description: CallVoidMethodLocal calls the local procedure with address Func, where Frame is the frame of the wrapping method. Errors: If the local function expects parameters, the stack may become corrupted. See also: CallPointerMethod (938), CallVoidMethod (939), CallPointerLocal (938), CallVoidLocal (939), CallPointerMethodLocal (938), CallVoidConstructor (939), CallPointerConstructor (937)
29.3.10
DisposeStr
Synopsis: Dispose of a shortstring which was allocated on the heap. Declaration: procedure DisposeStr(P: PString) Visibility: default Description: DisposeStr removes a dynamically allocated string from the heap. For an example, see NewStr (941). Errors: None. See also: NewStr (941), SetStr (943)
29.3.11
LongDiv
Synopsis: Overow safe divide Declaration: function LongDiv(X: LongInt;Y: Integer) : Integer Visibility: default Description: LongDiv divides X by Y. The result is of type Integer instead of type Longint, as you would get normally. Errors: If Y is zero, a run-time error will be generated. See also: LongMul (940)
29.3.12
LongMul
Synopsis: Overow safe multiply. Declaration: function LongMul(X: Integer;Y: Integer) : LongInt Visibility: default Description: LongMul multiplies X with Y. The result is of type Longint. This avoids possible overow errors you would normally get when multiplying X and Y that are too big. Errors: None. See also: LongDiv (940) 940
29.3.13
NewStr
Synopsis: Allocate a copy of a shortstring on the heap. Declaration: function NewStr(const S: string) : PString Visibility: default Description: NewStr makes a copy of the string S on the heap, and returns a pointer to this copy. If the string is empty then Nil is returned. The allocated memory is not based on the declared size of the string passed to NewStr, but is baed on the actual length of the string. Errors: If not enough memory is available, an out of memory error will occur. See also: DisposeStr (940), SetStr (943) Listing: ./objectex/ex40.pp
Program ex40 ; { Program t o demonstrate t h e NewStr f u n c t i o n } Uses O b j e c t s ; Var S : S t r i n g ; P : PString ; begin S: = Some r e a l l y c u t e s t r i n g ; P: = NewStr (S ) ; I f P^<>S then W r i t e l n ( Ohoh . . . Something i s wrong ! ! ) ; DisposeStr (P ) ; end .
29.3.14
RegisterObjects
Synopsis: Register standard objects. Declaration: procedure RegisterObjects Visibility: default Description: RegisterObjects registers the following objects for streaming: 1.TCollection, see TCollection (948). 2.TStringCollection, see TStringCollection (997). 3.TStrCollection, see TStrCollection (987). Errors: None. See also: RegisterType (942)
941
29.3.15
RegisterType
Synopsis: Register new object for streaming. Declaration: procedure RegisterType(var S: TStreamRec) Visibility: default Description: RegisterType registers a new type for streaming. An object cannot be streamed unless it has been registered rst. The stream record S needs to have the following elds set: ObjType: Sw_WordThis should be a unique identier. Each possible type should have its own identier. VmtLink: pointerThis should contain a pointer to the VMT (Virtual Method Table) of the object you try to register. Load : Pointeris a pointer to a method that initializes an instance of that object, and reads the initial values from a stream. This method should accept as its sole argument a PStream type variable. Store: Pointeris a pointer to a method that stores an instance of the object to a stream. This method should accept as its sole argument a PStream type variable. The VMT of the object can be retrieved with the following expression: VmtLink: Ofs(TypeOf(MyType)^); Errors: In case of error (if a object with the same ObjType) is already registered), run-time error 212 occurs. Listing: ./objectex/myobject.pp
Unit MyObject ;
Interface Uses O b j e c t s ; Type PMyObject = ^ TMyObject ; TMyObject = Object ( TObject ) Field : Longint ; Constructor I n i t ; Constructor Load ( Var Stream : TStream ) ; Destructor Done ; Procedure S t o r e ( Var Stream : TStream ) ; Function G e t F i e l d : L o n g i n t ; Procedure S e t F i e l d ( Value : L o n g i n t ) ; end ; Implementation Constructor TMyobject . I n i t ; begin Inherited I n i t ; F i e l d := 1; end ;
942
Constructor TMyobject . Load ( Var Stream : TStream ) ; begin Stream . Read ( F i e l d , Sizeof ( F i e l d ) ) ; end ; Destructor TMyObject . Done ; begin end ; Function TMyObject . G e t F i e l d : L o n g i n t ; begin GetField := Field ; end ; Procedure TMyObject . S e t F i e l d ( Value : L o n g i n t ) ; begin F i e l d : = Value ; end ; Procedure TMyObject . S t o r e ( Var Stream : TStream ) ; begin Stream . Write ( F i e l d , SizeOf ( F i e l d ) ) ; end ; Const MyObjectRec : TStreamRec = ( Objtype : 6 6 6 ; v m t l i n k : Ofs ( TypeOf ( TMyObject ) ^ ) ; Load : @TMyObject . Load ; S t o r e : @TMyObject . S t o r e ; ); begin RegisterObjects ; RegisterType ( MyObjectRec ) ; end .
29.3.16
SetStr
Synopsis: Allocate a copy of a shortstring on the heap. Declaration: procedure SetStr(var p: PString;const s: string) Visibility: default Description: SetStr makes a copy of the string S on the heap and returns the pointer to this copy in P. If P pointed to another string (i.e. was not Nil, the memory is released rst. Contrary to NewStr (941), if the string is empty then a pointer to an empty string is returned. The allocated memory is not based on the declared size of the string passed to NewStr, but is based on the actual length of the string. Errors: If not enough memory is available, an out of memory error will occur. 943
29.4
29.4.1
TBufStream
Description
Bufstream implements a buffered le stream. That is, all data written to the stream is written to memory rst. Only when the buffer is full, or on explicit request, the data is written to disk. Also, when reading from the stream, rst the buffer is checked if there is any unread data in it. If so, this is read rst. If not the buffer is lled again, and then the data is read from the buffer. The size of the buffer is xed and is set when constructing the le. This is useful if you need heavy throughput for your stream, because it speeds up operations.
29.4.2
Page 945 945 945 944 947 947 946 946 947
Method overview
Property Close Done Flush Init Open Read Seek Truncate Write Description Flush data and Close the le. Close the le and cleans up the instance. FLush data from buffer, and write it to stream. Initialize an instance of TBufStream and open the le. Open the le if it is closed. Read data from the le to a buffer in memory. Set current position in le. Flush buffer, and truncate the le at current position. Write data to the le from a buffer in memory.
29.4.3
TBufStream.Init
Synopsis: Initialize an instance of TBufStream and open the le. Declaration: constructor Init(FileName: FNameStr;Mode: Word;Size: Word) Visibility: default Description: Init instantiates an instance of TBufStream. The name of the le that contains (or will contain) the data of the stream is given in FileName. The Mode parameter determines whether a new le should be created and what access rights you have on the le. It can be one of the following constants: stCreateCreates a new le. stOpenReadRead access only. stOpenWriteWrite access only. stOpenRead and write access. The Size parameter determines the size of the buffer that will be created. It should be different from zero. For an example see TBufStream.Flush (1). Errors: On error, Status is set to stInitError, and ErrorInfo is set to the dos error code. See also: TDosStream.Init (1), TBufStream.Done (1)
944
29.4.4
TBufStream.Done
Virtual
Synopsis: Close the le and cleans up the instance. Declaration: destructor Done; Visibility: default Description: Done ushes and closes the le if it was open and cleans up the instance of TBufStream. For an example see TBufStream.Flush (1). Errors: None. See also: TDosStream.Done (1), TBufStream.Init (1), TBufStream.Close (1)
29.4.5
TBufStream.Close
Virtual
Synopsis: Flush data and Close the le. Declaration: procedure Close; Visibility: default Description: Close ushes and closes the le if it was open, and sets Handle to -1. Contrary to Done (1) it does not clean up the instance of TBufStream For an example see TBufStream.Flush (1). Errors: None. See also: TStream.Close (1), TBufStream.Init (1), TBufStream.Done (1)
29.4.6
TBufStream.Flush
Virtual
Synopsis: FLush data from buffer, and write it to stream. Declaration: procedure Flush; Visibility: default Description: When the stream is in write mode, the contents of the buffer are written to disk, and the buffer position is set to zero. When the stream is in read mode, the buffer position is set to zero. Errors: Write errors may occur if the le was in write mode. see Write (1) for more info on the errors. See also: TStream.Close (1), TBufStream.Init (1), TBufStream.Done (1) Listing: ./objectex/ex15.pp
Program ex15 ; { Program t o demonstrate t h e TStream . Flush method } Uses O b j e c t s ; Var L : S t r i n g ; P : PString ; S : PBufStream ; { Only one w i t h Flush implemented . } begin
945
L : = Some c o n s t a n t s t r i n g ; { Buffer size of 100 } S: =New( PBufStream , I n i t ( t e s t . d a t , s t c r e a t e , 1 0 0 ) ) ; W r i t e l n ( W r i t i n g " , L , " t o stream w i t h handle ,S ^ . Handle ) ; S ^ . W r i t e S t r (@L) ; { At t h i s moment , t h e r e i s no data on d i s k y e t . } S ^ . Flush ; { Now t h e r e i s . } S ^ . W r i t e S t r (@L) ; { Close c a l l s f l u s h f i r s t } S ^ . Close ; W r i t e l n ( Closed stream . F i l e handle i s ,S ^ . Handle ) ; S ^ . Open ( stOpenRead ) ; P: =S ^ . ReadStr ; L : =P ^ ; DisposeStr (P ) ; W r i t e l n ( Read " , L , " from stream w i t h handle ,S ^ . Handle ) ; S ^ . Close ; Dispose ( S , Done ) ; end .
29.4.7
TBufStream.Truncate
Virtual
Synopsis: Flush buffer, and truncate the le at current position. Declaration: procedure Truncate; Visibility: default Description: If the status of the stream is stOK, then Truncate tries to ush the buffer, and then truncates the stream size to the current le position. For an example, see TDosStream.Truncate (1). Errors: Errors can be those of Flush (1) or TDosStream.Truncate (1). See also: TStream.Truncate (1), TDosStream.Truncate (1), TStream.GetSize (1)
29.4.8
TBufStream.Seek
Virtual
Synopsis: Set current position in le. Declaration: procedure Seek(Pos: LongInt); Visibility: default Description: If the streams status is stOK, then Seek sets the le position to Pos. Pos is a zero-based offset, counted from the beginning of the le. For an example, see TStream.Seek (1); Errors: In case an error occurs, the streams status is set to stSeekError, and the OS error code is stored in ErrorInfo. See also: TStream.Seek (1), TStream.GetPos (1)
946
29.4.9
TBufStream.Open
Virtual
Synopsis: Open the le if it is closed. Declaration: procedure Open(OpenMode: Word); Visibility: default Description: If the streams status is stOK, and the stream is closed then Open re-opens the le stream with mode OpenMode. This call can be used after a Close (1) call. For an example, see TDosStream.Open (1). Errors: If an error occurs when re-opening the le, then Status is set to stOpenError, and the OS error code is stored in ErrorInfo See also: TStream.Open (1), TBufStream.Close (1)
29.4.10
TBufStream.Read
Virtual
Synopsis: Read data from the le to a buffer in memory. Declaration: procedure Read(var Buf;Count: LongInt); Visibility: default Description: If the Stream is open and the stream status is stOK then Read will read Count bytes from the stream and place them in Buf. Read will rst try to read the data from the streams internal buffer. If insufcient data is available, the buffer will be lled before contiunuing to read. This process is repeated until all needed data has been read. For an example, see TStream.Read (1). Errors: In case of an error, Status is set to StReadError, and ErrorInfo gets the OS specic error, or 0 when an attempt was made to read beyond the end of the stream. See also: TStream.Read (1), TBufStream.Write (1)
29.4.11
TBufStream.Write
Virtual
Synopsis: Write data to the le from a buffer in memory. Declaration: procedure Write(var Buf;Count: LongInt); Visibility: default Description: If the Stream is open and the stream status is stOK then Write will write Count bytes from Buf and place them in the stream. Write will rst try to write the data to the streams internal buffer. When the internal buffer is full, then the contents will be written to disk. This process is repeated until all data has been written. For an example, see TStream.Read (1). Errors: In case of an error, Status is set to StWriteError, and ErrorInfo gets the OS specic error. See also: TStream.Write (1), TBufStream.Read (1)
947
29.5
29.5.1
TCollection
Description
The TCollection object manages a collection of pointers or objects. It also provides a series of methods to manipulate these pointers or objects. Whether or not objects are used depends on the kind of calls you use. All kinds come in 2 avors, one for objects, one for pointers.
29.5.2
Page 950 958 957 961 961 957 955 949 960 952 959 956 954 958 951 950 948 956 952 949 953 962 960 962
Method overview
Property At AtDelete AtFree AtInsert AtPut Delete DeleteAll Done Error FirstThat ForEach Free FreeAll FreeItem GetItem IndexOf Init Insert LastThat Load Pack PutItem SetLimit Store Description Return the item at a certain index. Delete item at certain position. Free an item at the indicates position, calling its destructor. Insert an element at a certain position in the collection. Set collection item, overwriting an existing value. Delete an item from the collection, but does not destroy it. Delete all elements from the collection. Objects are not destroyed. Clean up collection, release all memory. Set error code. Return rst item which matches a test. Execute procedure for each item in the list. Free item from collection, calling its destructor. Release all objects from the collection. Destroy a non-nil item. Read one item off the stream. Find the position of a certain item. Instantiate a new collection. Insert a new item in the collection at the end. Return last item which matches a test. Initialize a new collection and load collection from a stream. Remove all >Nil pointers from the collection. Put one item on the stream Set maximum number of elements in the collection. Write collection to a stream.
29.5.3
TCollection.Init
Synopsis: Instantiate a new collection. Declaration: constructor Init(ALimit: Sw_Integer;ADelta: Sw_Integer) Visibility: default Description: Init initializes a new instance of a collection. It sets the (initial) maximum number of items in the collection to ALimit. ADelta is the increase size : The number of memory places that will be allocatiod in case ALimit is reached, and another element is added to the collection. For an example, see TCollection.ForEach (1). Errors: None. See also: TCollection.Load (1), TCollection.Done (1)
948
29.5.4
TCollection.Load
Synopsis: Initialize a new collection and load collection from a stream. Declaration: constructor Load(var S: TStream) Visibility: default Description: Load initializes a new instance of a collection. It reads from stream S the item count, the item limit count, and the increase size. After that, it reads the specied number of items from the stream. Errors: Errors returned can be those of GetItem (1). See also: TCollection.Init (1), TCollection.GetItem (1), TCollection.Done (1) Listing: ./objectex/ex22.pp
Program ex22 ; { Program t o demonstrate t h e T C o l l e c t i o n . Load method } Uses Objects , MyObject ; { For TMyObject d e f i n i t i o n and r e g i s t r a t i o n } Var C M I S : : : : PCollection ; PMyObject ; Longint ; PMemoryStream ;
begin C: =New( P C o l l e c t i o n , I n i t ( 1 0 0 , 1 0 ) ) ; For I : = 1 to 1 0 0 do begin M: =New( PMyObject , I n i t ) ; M^ . S e t F i e l d (100 I ) ; C^ . I n s e r t (M) ; end ; W r i t e l n ( I n s e r t e d ,C^ . Count , o b j e c t s ) ; S: =New( PMemorySTream , I n i t ( 1 0 0 0 , 1 0 ) ) ; C^ . S t o r e (S ^ ) ; C^ . F r e e A l l ; Dispose (C, Done ) ; S ^ . Seek ( 0 ) ; C^ . Load (S ^ ) ; W r i t e l n ( Read ,C^ . Count , o b j e c t s from stream . ) ; Dispose ( S , Done ) ; Dispose (C, Done ) ; end .
29.5.5
TCollection.Done
Virtual
Synopsis: Clean up collection, release all memory. Declaration: destructor Done; Visibility: default Description: Done frees all objects in the collection, and then releases all memory occupied by the instance. For an example, see TCollection.ForEach (1). 949
29.5.6
TCollection.At
Synopsis: Return the item at a certain index. Declaration: function At(Index: Sw_Integer) : Pointer Visibility: default Description: At returns the item at position Index. Errors: If Index is less than zero or larger than the number of items in the collection, seepl{Error}{TCollection.Error} is called with coIndexError and Index as arguments, resulting in a run-time error. See also: TCollection.Insert (1) Listing: ./objectex/ex23.pp
Program ex23 ; { Program t o demonstrate t h e T C o l l e c t i o n . At method } Uses Objects , MyObject ; { For TMyObject d e f i n i t i o n and r e g i s t r a t i o n } Var C : P C o l l e c t i o n ; M : PMyObject ; I : Longint ; begin C: =New( P C o l l e c t i o n , I n i t ( 1 0 0 , 1 0 ) ) ; For I : = 1 to 1 0 0 do begin M: =New( PMyObject , I n i t ) ; M^ . S e t F i e l d (100 I ) ; C^ . I n s e r t (M) ; end ; For I : = 0 to C^ . Count 1 do begin M: =C^ . At ( I ) ; W r i t e l n ( O b j e c t , i , has f i e l d : end ; C^ . F r e e A l l ; Dispose (C, Done ) ; end .
,M^ . G e t F i e l d ) ;
29.5.7
TCollection.IndexOf
Virtual
Synopsis: Find the position of a certain item. Declaration: function IndexOf(Item: Pointer) : Sw_Integer; Visibility: default Description: IndexOf returns the index of Item in the collection. If Item isnt present in the collection, -1 is returned. 950
Errors: If the item is not present, -1 is returned. See also: TCollection.At (1), TCollection.GetItem (1), TCollection.Insert (1) Listing: ./objectex/ex24.pp
Program ex24 ; { Program t o demonstrate t h e T C o l l e c t i o n . IndexOf method } Uses Objects , MyObject ; { For TMyObject d e f i n i t i o n and r e g i s t r a t i o n } Var C : P C o l l e c t i o n ; M, Keep : PMyObject ; I : Longint ; begin Randomize ; C: =New( P C o l l e c t i o n , I n i t ( 1 0 0 , 1 0 ) ) ; Keep : = N i l ; For I : = 1 to 1 0 0 do begin M: =New( PMyObject , I n i t ) ; M^ . S e t F i e l d ( I 1); I f Random< 0 . 1 then Keep : =M; C^ . I n s e r t (M) ; end ; I f Keep= N i l then begin W r i t e l n ( Please run again . No o b j e c t s e l e c t e d ) ; Halt ( 1 ) ; end ; W r i t e l n ( S e l e c t e d o b j e c t has f i e l d : , Keep ^ . G e t F i e l d ) ; Write ( S e l e c t e d o b j e c t has i n d e x : ,C^ . IndexOf ( Keep ) ) ; W r i t e l n ( should match i t s f i e l d . ) ; C^ . F r e e A l l ; Dispose (C, Done ) ; end .
29.5.8
TCollection.GetItem
Virtual
Synopsis: Read one item off the stream. Declaration: function GetItem(var S: TStream) : Pointer; Visibility: default Description: GetItem reads a single item off the stream S, and returns a pointer to this item. This method is used internally by the Load method, and should not be used directly. Errors: Possible errors are the ones from TStream.Get (1). See also: TStream.Get (1), TCollection.Store (1)
951
29.5.9
TCollection.LastThat
Synopsis: Return last item which matches a test. Declaration: function LastThat(Test: Pointer) : Pointer Visibility: default Description: This function returns the last item in the collection for which Test returns a non-nil result. Test is a function that accepts 1 argument: a pointer to an object, and that returns a pointer as a result. Errors: None. See also: TCollection.FirstThat (1) Listing: ./objectex/ex25.pp
Program ex21 ; { Program t o demonstrate t h e T C o l l e c t i o n . Foreach method } Uses Objects , MyObject ; { For TMyObject d e f i n i t i o n and r e g i s t r a t i o n } Var C : P C o l l e c t i o n ; M : PMyObject ; I : Longint ; Function CheckField ( Dummy : P o i n t e r ; P : PMyObject ) : L o n g i n t ; begin I f P ^ . G e t F i e l d <56 then C h e c k f i e l d :=1 else CheckField : = 0 ; end ; begin C: =New( P C o l l e c t i o n , I n i t ( 1 0 0 , 1 0 ) ) ; For I : = 1 to 1 0 0 do begin M: =New( PMyObject , I n i t ) ; M^ . S e t F i e l d ( I ) ; C^ . I n s e r t (M) ; end ; W r i t e l n ( I n s e r t e d ,C^ . Count , o b j e c t s ) ; W r i t e l n ( L a s t one f o r which F i e l d <56 has i n d e x ( should be 5 4 ) : , C^ . IndexOf (C^ . L a s t T h a t ( @CheckField ) ) ) ; C^ . F r e e A l l ; Dispose (C, Done ) ; end .
29.5.10
TCollection.FirstThat
Synopsis: Return rst item which matches a test. Declaration: function FirstThat(Test: Pointer) : Pointer Visibility: default
952
Description: This function returns the rst item in the collection for which Test returns a non-nil result. Test is a function that accepts 1 argument: a pointer to an object, and that returns a pointer as a result. Errors: None. See also: TCollection.LastThat (1) Listing: ./objectex/ex26.pp
Program ex21 ; { Program t o demonstrate t h e T C o l l e c t i o n . F i r s t T h a t method } Uses Objects , MyObject ; { For TMyObject d e f i n i t i o n and r e g i s t r a t i o n } Var C : P C o l l e c t i o n ; M : PMyObject ; I : Longint ; Function CheckField ( Dummy : P o i n t e r ; P : PMyObject ) : L o n g i n t ; begin I f P ^ . G e t F i e l d >56 then C h e c k f i e l d :=1 else CheckField : = 0 ; end ; begin C: =New( P C o l l e c t i o n , I n i t ( 1 0 0 , 1 0 ) ) ; For I : = 1 to 1 0 0 do begin M: =New( PMyObject , I n i t ) ; M^ . S e t F i e l d ( I ) ; C^ . I n s e r t (M) ; end ; W r i t e l n ( I n s e r t e d ,C^ . Count , o b j e c t s ) ; W r i t e l n ( f i r s t one f o r which F i e l d >56 has i n d e x ( should be 5 6 ) : , C^ . IndexOf (C^ . F i r s t T h a t ( @CheckField ) ) ) ; C^ . F r e e A l l ; Dispose (C, Done ) ; end .
29.5.11
TCollection.Pack
Synopsis: Remove all >Nil pointers from the collection. Declaration: procedure Pack Visibility: default Description: Pack removes all Nil pointers from the collection, and adjusts Count to reect this change. No memory is freed as a result of this call. In order to free any memory, you can call SetLimit with an argument of Count after a call to Pack. Errors: None. See also: TCollection.SetLimit (1) 953
Listing: ./objectex/ex26.pp
Program ex21 ; { Program t o demonstrate t h e T C o l l e c t i o n . F i r s t T h a t method } Uses Objects , MyObject ; { For TMyObject d e f i n i t i o n and r e g i s t r a t i o n } Var C : P C o l l e c t i o n ; M : PMyObject ; I : Longint ; Function CheckField ( Dummy : P o i n t e r ; P : PMyObject ) : L o n g i n t ; begin I f P ^ . G e t F i e l d >56 then C h e c k f i e l d :=1 else CheckField : = 0 ; end ; begin C: =New( P C o l l e c t i o n , I n i t ( 1 0 0 , 1 0 ) ) ; For I : = 1 to 1 0 0 do begin M: =New( PMyObject , I n i t ) ; M^ . S e t F i e l d ( I ) ; C^ . I n s e r t (M) ; end ; W r i t e l n ( I n s e r t e d ,C^ . Count , o b j e c t s ) ; W r i t e l n ( f i r s t one f o r which F i e l d >56 has i n d e x ( should be 5 6 ) : , C^ . IndexOf (C^ . F i r s t T h a t ( @CheckField ) ) ) ; C^ . F r e e A l l ; Dispose (C, Done ) ; end .
29.5.12
TCollection.FreeAll
Synopsis: Release all objects from the collection. Declaration: procedure FreeAll Visibility: default Description: FreeAll calls the destructor of each object in the collection. It doesnt release any memory occumpied by the collection itself, but it does set Count to zero. See also: TCollection.DeleteAll (1), TCollection.FreeItem (1) Listing: ./objectex/ex28.pp
Program ex28 ; { Program t o demonstrate t h e T C o l l e c t i o n . F r e e A l l method } Uses Objects , MyObject ; { For TMyObject d e f i n i t i o n and r e g i s t r a t i o n } Var C : P C o l l e c t i o n ;
954
M : PMyObject ; I : Longint ; begin Randomize ; C: =New( P C o l l e c t i o n , I n i t ( 1 2 0 , 1 0 ) ) ; For I : = 1 to 1 0 0 do begin M: =New( PMyObject , I n i t ) ; M^ . S e t F i e l d ( I 1); C^ . I n s e r t (M) ; end ; W r i t e l n ( Added 1 0 0 Items . ) ; C^ . F r e e A l l ; W r i t e l n ( Freed a l l o b j e c t s . ) ; Dispose (C, Done ) ; end .
29.5.13
TCollection.DeleteAll
Synopsis: Delete all elements from the collection. Objects are not destroyed. Declaration: procedure DeleteAll Visibility: default Description: DeleteAll deletes all elements from the collection. It just sets the Count variable to zero. Contrary to FreeAll (1), DeletAll doesnt call the destructor of the objects. Errors: None. See also: TCollection.FreeAll (1), TCollection.Delete (1) Listing: ./objectex/ex29.pp
Program ex29 ; { Program t o demonstrate t h e T C o l l e c t i o n . D e l e t e A l l method Compare w i t h example 2 8 , where F r e e A l l i s used . } Uses Objects , MyObject ; { For TMyObject d e f i n i t i o n and r e g i s t r a t i o n } Var C : P C o l l e c t i o n ; M : PMyObject ; I : Longint ; begin Randomize ; C: =New( P C o l l e c t i o n , I n i t ( 1 2 0 , 1 0 ) ) ; For I : = 1 to 1 0 0 do begin M: =New( PMyObject , I n i t ) ; M^ . S e t F i e l d ( I 1); C^ . I n s e r t (M) ; end ; W r i t e l n ( Added 1 0 0 Items . ) ;
955
29.5.14
TCollection.Free
Synopsis: Free item from collection, calling its destructor. Declaration: procedure Free(Item: Pointer) Visibility: default Description: Free Deletes Item from the collection, and calls the destructor Done of the object. Errors: If the Item is not in the collection, Error will be called with coIndexError. See also: TCollection.FreeItem (1) Listing: ./objectex/ex30.pp
Program ex30 ; { Program t o demonstrate t h e T C o l l e c t i o n . Free method } Uses Objects , MyObject ; { For TMyObject d e f i n i t i o n and r e g i s t r a t i o n } Var C : P C o l l e c t i o n ; M : PMyObject ; I : Longint ; begin Randomize ; C: =New( P C o l l e c t i o n , I n i t ( 1 2 0 , 1 0 ) ) ; For I : = 1 to 1 0 0 do begin M: =New( PMyObject , I n i t ) ; M^ . S e t F i e l d ( I 1); C^ . I n s e r t (M) ; end ; W r i t e l n ( Added 1 0 0 Items . ) ; With C^ do While Count >0 do Free ( At ( Count 1 ) ) ; W r i t e l n ( Freed a l l o b j e c t s . ) ; Dispose (C, Done ) ; end .
29.5.15
TCollection.Insert
Virtual
Synopsis: Insert a new item in the collection at the end. Declaration: procedure Insert(Item: Pointer); Visibility: default Description: Insert inserts Item in the collection. TCollection inserts this item at the end, but descendent objects may insert it at another place. 956
29.5.16
TCollection.Delete
Synopsis: Delete an item from the collection, but does not destroy it. Declaration: procedure Delete(Item: Pointer) Visibility: default Description: Delete deletes Item from the collection. It doesnt call the items destructor, though. For this the Free (1) call is provided. Errors: If the Item is not in the collection, Error will be called with coIndexError. See also: TCollection.AtDelete (1), TCollection.Free (1) Listing: ./objectex/ex31.pp
Program ex31 ; { Program t o demonstrate t h e T C o l l e c t i o n . D e l e t e method } Uses Objects , MyObject ; { For TMyObject d e f i n i t i o n and r e g i s t r a t i o n } Var C : P C o l l e c t i o n ; M : PMyObject ; I : Longint ; begin Randomize ; C: =New( P C o l l e c t i o n , I n i t ( 1 2 0 , 1 0 ) ) ; For I : = 1 to 1 0 0 do begin M: =New( PMyObject , I n i t ) ; M^ . S e t F i e l d ( I 1); C^ . I n s e r t (M) ; end ; W r i t e l n ( Added 1 0 0 Items . ) ; With C^ do While Count >0 do Delete ( At ( Count 1 ) ) ; W r i t e l n ( Freed a l l o b j e c t s ) ; Dispose (C, Done ) ; end .
29.5.17
TCollection.AtFree
Synopsis: Free an item at the indicates position, calling its destructor. Declaration: procedure AtFree(Index: Sw_Integer) Visibility: default Description: AtFree deletes the item at position Index in the collection, and calls the items destructor if it is not Nil.
957
Errors: If Index isnt valid then Error (1) is called with CoIndexError. See also: TCollection.Free (1), TCollection.AtDelete (1) Listing: ./objectex/ex32.pp
Program ex32 ; { Program t o demonstrate t h e T C o l l e c t i o n . AtFree method } Uses Objects , MyObject ; { For TMyObject d e f i n i t i o n and r e g i s t r a t i o n } Var C : P C o l l e c t i o n ; M : PMyObject ; I : Longint ; begin Randomize ; C: =New( P C o l l e c t i o n , I n i t ( 1 2 0 , 1 0 ) ) ; For I : = 1 to 1 0 0 do begin M: =New( PMyObject , I n i t ) ; M^ . S e t F i e l d ( I 1); C^ . I n s e r t (M) ; end ; W r i t e l n ( Added 1 0 0 Items ) ; With C^ do While Count >0 do AtFree ( Count 1); W r i t e l n ( Freed a l l o b j e c t s . ) ; Dispose (C, Done ) ; end .
29.5.18
TCollection.FreeItem
Virtual
Synopsis: Destroy a non-nil item. Declaration: procedure FreeItem(Item: Pointer); Visibility: default Description: FreeItem calls the destructor of Item if it is not nil. Remark: This function is used internally by the TCollection object, and should not be called directly. Errors: None. See also: TCollection.Free (1), TCollection.AtFree (1)
29.5.19
TCollection.AtDelete
Synopsis: Delete item at certain position. Declaration: procedure AtDelete(Index: Sw_Integer) Visibility: default Description: AtDelete deletes the pointer at position Index in the collection. It doesnt call the objects destructor. 958
Errors: If Index isnt valid then Error (1) is called with CoIndexError. See also: TCollection.Delete (1) Listing: ./objectex/ex33.pp
Program ex33 ; { Program t o demonstrate t h e T C o l l e c t i o n . A t D e l e t e method } Uses Objects , MyObject ; { For TMyObject d e f i n i t i o n and r e g i s t r a t i o n } Var C : P C o l l e c t i o n ; M : PMyObject ; I : Longint ; begin Randomize ; C: =New( P C o l l e c t i o n , I n i t ( 1 2 0 , 1 0 ) ) ; For I : = 1 to 1 0 0 do begin M: =New( PMyObject , I n i t ) ; M^ . S e t F i e l d ( I 1); C^ . I n s e r t (M) ; end ; W r i t e l n ( Added 1 0 0 Items . ) ; With C^ do While Count >0 do A t D e l e t e ( Count 1); W r i t e l n ( Freed a l l o b j e c t s . ) ; Dispose (C, Done ) ; end .
29.5.20
TCollection.ForEach
Synopsis: Execute procedure for each item in the list. Declaration: procedure ForEach(Action: Pointer) Visibility: default Description: ForEach calls Action for each element in the collection, and passes the element as an argument to Action. Action is a procedural type variable that accepts a pointer as an argument. Errors: None. See also: TCollection.FirstThat (1), TCollection.LastThat (1) Listing: ./objectex/ex21.pp
Program ex21 ; { Program t o demonstrate t h e T C o l l e c t i o n . Foreach method } Uses Objects , MyObject ; { For TMyObject d e f i n i t i o n and r e g i s t r a t i o n } Var C : P C o l l e c t i o n ;
959
,P ^ . G e t F i e l d ) ;
begin C: =New( P C o l l e c t i o n , I n i t ( 1 0 0 , 1 0 ) ) ; For I : = 1 to 1 0 0 do begin M: =New( PMyObject , I n i t ) ; M^ . S e t F i e l d (100 I ) ; C^ . I n s e r t (M) ; end ; W r i t e l n ( I n s e r t e d ,C^ . Count , o b j e c t s ) ; C^ . ForEach ( @ P r i n t F i e l d ) ; C^ . F r e e A l l ; Dispose (C, Done ) ; end .
29.5.21
TCollection.SetLimit
Virtual
Synopsis: Set maximum number of elements in the collection. Declaration: procedure SetLimit(ALimit: Sw_Integer); Visibility: default Description: SetLimit sets the maximum number of elements in the collection. ALimit must not be less than Count, and should not be larger than MaxCollectionSize For an example, see Pack (1). Errors: None. See also: TCollection.Init (1)
29.5.22
TCollection.Error
Virtual
Synopsis: Set error code. Declaration: procedure Error(Code: Integer;Info: Integer); Visibility: default Description: Error is called by the various TCollection methods in case of an error condition. The default behaviour is to make a call to RunError with an error of 212-Code. This method can be overridden by descendent objects to implement a different error-handling. See also: Abstract (937)
960
29.5.23
TCollection.AtPut
Synopsis: Set collection item, overwriting an existing value. Declaration: procedure AtPut(Index: Sw_Integer;Item: Pointer) Visibility: default Description: AtPut sets the element at position Index in the collection to Item. Any previous value is overwritten. For an example, see Pack (1). Errors: If Index isnt valid then Error (1) is called with CoIndexError.
29.5.24
TCollection.AtInsert
Synopsis: Insert an element at a certain position in the collection. Declaration: procedure AtInsert(Index: Sw_Integer;Item: Pointer) Visibility: default Description: AtInsert inserts Item in the collection at position Index, shifting all elements by one position. In case the current limit is reached, the collection will try to expand with a call to SetLimit Errors: If Index isnt valid then Error (1) is called with CoIndexError. If the collection fails to expand, then coOverFlow is passd to Error. See also: TCollection.Insert (1) Listing: ./objectex/ex34.pp
Program ex34 ; { Program t o demonstrate t h e T C o l l e c t i o n . A t I n s e r t method } Uses Objects , MyObject ; { For TMyObject d e f i n i t i o n and r e g i s t r a t i o n } Var C : P C o l l e c t i o n ; M : PMyObject ; I : Longint ; Procedure P r i n t F i e l d ( Dummy : P o i n t e r ; P : PMyObject ) ; begin Writeln ( F i e l d : end ;
,P ^ . G e t F i e l d ) ;
begin Randomize ; C: =New( P C o l l e c t i o n , I n i t ( 1 2 0 , 1 0 ) ) ; W r i t e l n ( I n s e r t i n g 1 0 0 r e c o r d s a t random p l a c e s . ) ; For I : = 1 to 1 0 0 do begin M: =New( PMyObject , I n i t ) ; M^ . S e t F i e l d ( I 1); I f I =1 then C^ . I n s e r t (M)
961
else With C^ do A t I n s e r t (Random( Count ) ,M) ; end ; W r i t e l n ( Values : ) ; C^ . Foreach ( @ P r i n t F i e l d ) ; Dispose (C, Done ) ; end .
29.5.25
TCollection.Store
Synopsis: Write collection to a stream. Declaration: procedure Store(var S: TStream) Visibility: default Description: Store writes the collection to the stream S. It does this by writeing the current Count, Limit and Delta to the stream, and then writing each item to the stream. The contents of the stream are then suitable for instantiating another collection with Load (1). For an example, see TCollection.Load (1). Errors: Errors returned are those by TStream.Put (1). See also: TCollection.Load (1), TCollection.PutItem (1)
29.5.26
TCollection.PutItem
Virtual
Synopsis: Put one item on the stream Declaration: procedure PutItem(var S: TStream;Item: Pointer); Visibility: default Description: PutItem writes Item to stream S. This method is used internaly by the TCollection object, and should not be called directly. Errors: Errors are those returned by TStream.Put (1). See also: Store (1), GetItem (1)
29.6
29.6.1
TDosStream
Description
TDosStream is a stream that stores its contents in a le. it overrides a couple of methods of TStream (989) for this. In addition to the elds inherited from TStream (see TStream (989)), there are some extra elds, that describe the le. (mainly the name and the OS le handle) No buffering in memory is done when using TDosStream. All data are written directly to the le. For a stream that buffers in memory, see TBufStream (944).
962
29.6.2
Page 964 963 963 966 966 965 964 967
Method overview
Property Close Done Init Open Read Seek Truncate Write Description Close the le. Closes the le and cleans up the instance. Instantiate a new instance of TDosStream. Open the le stream Read data from the stream to a buffer. Set le position. Truncate the le on the current position. Write data from a buffer to the stream.
29.6.3
TDosStream.Init
Synopsis: Instantiate a new instance of TDosStream. Declaration: constructor Init(FileName: FNameStr;Mode: Word) Visibility: default Description: Init instantiates an instance of TDosStream. The name of the le that contains (or will contain) the data of the stream is given in FileName. The Mode parameter determines whether a new le should be created and what access rights you have on the le. It can be one of the following constants: stCreateCreates a new le. stOpenReadRead access only. stOpenWriteWrite access only. stOpenRead and write access. For an example, see TDosStream.Truncate (1). Errors: On error, Status (1) is set to stInitError, and ErrorInfo is set to the dos error code. See also: TDosStream.Done (1)
29.6.4
TDosStream.Done
Virtual
Synopsis: Closes the le and cleans up the instance. Declaration: destructor Done; Visibility: default Description: Done closes the le if it was open and cleans up the instance of TDosStream. for an example, see e.g. TDosStream.Truncate (1). Errors: None. See also: TDosStream.Init (1), TDosStream.Close (1)
963
29.6.5
TDosStream.Close
Virtual
Synopsis: Close the le. Declaration: procedure Close; Visibility: default Description: Close closes the le if it was open, and sets Handle to -1. Contrary to Done (1) it does not clean up the instance of TDosStream For an example, see TDosStream.Open (1). Errors: None. See also: TStream.Close (1), TDosStream.Init (1), TDosStream.Done (1)
29.6.6
TDosStream.Truncate
Virtual
Synopsis: Truncate the le on the current position. Declaration: procedure Truncate; Visibility: default Description: If the status of the stream is stOK, then Truncate tries to truncate the stream size to the current le position. Errors: If an error occurs, the streams status is set to stError and ErrorInfo is set to the OS error code. See also: TStream.Truncate (1), TStream.GetSize (1) Listing: ./objectex/ex16.pp
Program ex16 ; { Program t o demonstrate t h e TStream . Truncate method } Uses O b j e c t s ; Var L : S t r i n g ; P : PString ; S : PDosStream ; { Only one w i t h Truncate implemented . } begin L : = Some c o n s t a n t s t r i n g ; { Buffer size of 100 } S: =New( PDosStream , I n i t ( t e s t . d a t , s t c r e a t e ) ) ; W r i t e l n ( W r i t i n g " , L , " t o stream w i t h handle ,S ^ . Handle ) ; S ^ . W r i t e S t r (@L) ; S ^ . W r i t e S t r (@L) ; { Close c a l l s f l u s h f i r s t } S ^ . Close ; S ^ . Open ( stOpen ) ; W r i t e l n ( Size o f stream i s : ,S ^ . GetSize ) ; P: =S ^ . ReadStr ; L : =P ^ ; DisposeStr (P ) ; W r i t e l n ( Read " , L , " from stream w i t h handle ,S ^ . Handle ) ;
964
,S ^ . GetSize ) ;
29.6.7
TDosStream.Seek
Virtual
Synopsis: Set le position. Declaration: procedure Seek(Pos: LongInt); Visibility: default Description: If the streams status is stOK, then Seek sets the le position to Pos. Pos is a zero-based offset, counted from the beginning of the le. Errors: In case an error occurs, the streams status is set to stSeekError, and the OS error code is stored in ErrorInfo. See also: TStream.Seek (1), TStream.GetPos (1) Listing: ./objectex/ex17.pp
Program ex17 ; { Program t o demonstrate t h e TStream . Seek method } Uses O b j e c t s ; Var L : S t r i n g ; Marker : Word ; P : PString ; S : PDosStream ; begin L : = Some c o n s t a n t s t r i n g ; { Buffer size of 100 } S: =New( PDosStream , I n i t ( t e s t . d a t , s t c r e a t e ) ) ; W r i t e l n ( W r i t i n g " , L , " t o stream . ) ; S ^ . W r i t e S t r (@L) ; Marker : =S ^ . GetPos ; W r i t e l n ( Set marker a t , Marker ) ; L : = Some o t h e r c o n s t a n t S t r i n g ; W r i t e l n ( W r i t i n g " , L , " t o stream . ) ; S ^ . W r i t e S t r (@L) ; S ^ . Close ; S ^ . Open ( stOpenRead ) ; W r i t e l n ( Size o f stream i s : ,S ^ . GetSize ) ; W r i t e l n ( Seeking t o marker ) ; S ^ . Seek ( Marker ) ; P: =S ^ . ReadStr ; L : =P ^ ; DisposeStr (P ) ; W r i t e l n ( Read " , L , " from stream . ) ; S ^ . Close ; Dispose ( S , Done ) ; end .
965
29.6.8
TDosStream.Open
Virtual
Synopsis: Open the le stream Declaration: procedure Open(OpenMode: Word); Visibility: default Description: If the streams status is stOK, and the stream is closed then Open re-opens the le stream with mode OpenMode. This call can be used after a Close (1) call. Errors: If an error occurs when re-opening the le, then Status is set to stOpenError, and the OS error code is stored in ErrorInfo See also: TStream.Open (1), TDosStream.Close (1) Listing: ./objectex/ex14.pp
Program ex14 ; { Program t o demonstrate t h e TStream . Close method } Uses O b j e c t s ; Var L : S t r i n g ; P : PString ; S : PDosStream ; { Only one w i t h Close implemented . } begin L : = Some c o n s t a n t s t r i n g ; S: =New( PDosStream , I n i t ( t e s t . d a t , s t c r e a t e ) ) ; W r i t e l n ( W r i t i n g " , L , " t o stream w i t h handle ,S ^ . Handle ) ; S ^ . W r i t e S t r (@L) ; S ^ . Close ; W r i t e l n ( Closed stream . F i l e handle i s ,S ^ . Handle ) ; S ^ . Open ( stOpenRead ) ; P: =S ^ . ReadStr ; L : =P ^ ; DisposeStr (P ) ; W r i t e l n ( Read " , L , " from stream w i t h handle ,S ^ . Handle ) ; S ^ . Close ; Dispose ( S , Done ) ; end .
29.6.9
TDosStream.Read
Virtual
Synopsis: Read data from the stream to a buffer. Declaration: procedure Read(var Buf;Count: LongInt); Visibility: default Description: If the Stream is open and the stream status is stOK then Read will read Count bytes from the stream and place them in Buf. For an example, see TStream.Read (1). Errors: In case of an error, Status is set to StReadError, and ErrorInfo gets the OS specic error, or 0 when an attempt was made to read beyond the end of the stream. See also: TStream.Read (1), TDosStream.Write (1) 966
29.6.10
TDosStream.Write
Virtual
Synopsis: Write data from a buffer to the stream. Declaration: procedure Write(var Buf;Count: LongInt); Visibility: default Description: If the Stream is open and the stream status is stOK then Write will write Count bytes from Buf and place them in the stream. For an example, see TStream.Read (1). Errors: In case of an error, Status is set to StWriteError, and ErrorInfo gets the OS specic error. See also: TStream.Write (1), TDosStream.Read (1)
29.7
29.7.1
TMemoryStream
Description
The TMemoryStream object implements a stream that stores its data in memory. The data is stored on the heap, with the possibility to specify the maximum amout of data, and the the size of the memory blocks being used. See also: TStream (989)
29.7.2
Page 968 967 969 968 969
Method overview
Property Done Init Read Truncate Write Description Clean up memory and destroy the object instance. Initialize memory stream, reserves memory for stream data. Read data from the stream to a location in memory. Set the stream size to the current position. Write data to the stream.
29.7.3
TMemoryStream.Init
Synopsis: Initialize memory stream, reserves memory for stream data. Declaration: constructor Init(ALimit: LongInt;ABlockSize: Word) Visibility: default Description: Init instantiates a new TMemoryStream object. The memorystreamobject will initially allocate at least ALimit bytes memory, divided into memory blocks of size ABlockSize. The number of blocks needed to get to ALimit bytes is rounded up. By default, the number of blocks is 1, and the size of a block is 8192. This is selected if you specify 0 as the blocksize. For an example, see e.g TStream.CopyFrom (1). Errors: If the stream cannot allocate the initial memory needed for the memory blocks, then the streams status is set to stInitError. See also: TMemoryStream.Done (1)
967
29.7.4
TMemoryStream.Done
Virtual
Synopsis: Clean up memory and destroy the object instance. Declaration: destructor Done; Visibility: default Description: Done releases the memory blocks used by the stream, and then cleans up the memory used by the stream object itself. For an example, see e.g TStream.CopyFrom (1). Errors: None. See also: TMemoryStream.Init (1)
29.7.5
TMemoryStream.Truncate
Virtual
Synopsis: Set the stream size to the current position. Declaration: procedure Truncate; Visibility: default Description: Truncate sets the size of the memory stream equal to the current position. It de-allocates any memory-blocks that are no longer needed, so that the new size of the stream is the current position in the stream, rounded up to the rst multiple of the stream blocksize. Errors: If an error occurs during memory de-allocation, the streams status is set to stError See also: TStream.Truncate (1) Listing: ./objectex/ex20.pp
Program ex20 ; { Program t o demonstrate t h e TMemoryStream . Truncate method } Uses O b j e c t s ; Var L P S I : : : : String ; PString ; PMemoryStream ; Longint ;
begin L : = Some c o n s t a n t s t r i n g ; { Buffer size of 100 } S: =New( PMemoryStream , I n i t ( 1 0 0 0 , 1 0 0 ) ) ; W r i t e l n ( W r i t i n g 1 0 0 t i m e s " , L , " t o stream . ) ; For I : = 1 to 1 0 0 do S ^ . W r i t e S t r (@L) ; Writeln ( Finished . ) ; S ^ . Seek ( 1 0 0 ) ; S ^ . Truncate ; W r i t e l n ( Truncated a t b y t e 1 0 0 . ) ; Dispose ( S , Done ) ; Writeln ( Finished . ) ; end .
968
29.7.6
TMemoryStream.Read
Virtual
Synopsis: Read data from the stream to a location in memory. Declaration: procedure Read(var Buf;Count: LongInt); Visibility: default Description: Read reads Count bytes from the stream to Buf. It updates the position of the stream. For an example, see TStream.Read (1). Errors: If there is not enough data available, no data is read, and the streams status is set to stReadError. See also: TStream.Read (1), TMemoryStream.Write (1)
29.7.7
TMemoryStream.Write
Virtual
Synopsis: Write data to the stream. Declaration: procedure Write(var Buf;Count: LongInt); Visibility: default Description: Write copies Count bytes from Buf to the stream. It updates the position of the stream. If not enough memory is available to hold the extra Count bytes, then the stream will try to expand, by allocating as much blocks with size BlkSize (as specied in the constuctor call Init (1)) as needed. For an example, see TStream.Read (1). Errors: If the stream cannot allocate more memory, then the status is set to stWriteError See also: TStream.Write (1), TMemoryStream.Read (1)
29.8
29.8.1
TObject
Description
This type serves as the basic object for all other objects in the Objects unit.
29.8.2
Page 971 970 969 970
Method overview
Property Done Free Init Is\_Object Description Destroy an object. Destroy an object and release all memory. Construct (initialize) a new object Check whether a pointer points to an object.
29.8.3
TObject.Init
Synopsis: Construct (initialize) a new object Declaration: constructor Init Visibility: default
969
Description: Instantiates a new object of type TObject. It lls the instance up with Zero bytes. For an example, see Free (1) Errors: None. See also: TObject.Free (1), TObject.Done (1)
29.8.4
TObject.Free
Synopsis: Destroy an object and release all memory. Declaration: procedure Free Visibility: default Description: Free calls the destructor of the object, and releases the memory occupied by the instance of the object. Errors: No checking is performed to see whether self is nil and whether the object is indeed allocated on the heap. See also: TObject.Init (1), TObject.Done (1) Listing: ./objectex/ex7.pp
program ex7 ; { Program t o demonstrate t h e TObject . Free c a l l } Uses O b j e c t s ; Var O : PObject ; begin / / A l l o c a t e memory f o r o b j e c t . O: =New( PObject , I n i t ) ; / / Free memory o f o b j e c t . O^ . f r e e ; end .
29.8.5
TObject.Is_Object
Synopsis: Check whether a pointer points to an object. Declaration: function Is_Object(P: Pointer) : Boolean Visibility: default Description: Is_Object returns True if the pointer P points to an instance of a TObject descendent, it returns false otherwise.
970
29.8.6
TObject.Done
Virtual
Synopsis: Destroy an object. Declaration: destructor Done; Visibility: default Description: Done, the destructor of TObject does nothing. It is mainly intended to be used in the TObject.Free (1) method. The destructore Done does not free the memory occupied by the object. Errors: None. See also: TObject.Free (1), TObject.Init (1) Listing: ./objectex/ex8.pp
program ex8 ; { Program t o demonstrate t h e TObject . Done c a l l } Uses O b j e c t s ; Var O : PObject ; begin / / A l l o c a t e memory f o r o b j e c t . O: =New( PObject , I n i t ) ; O^ . Done ; end .
29.9
29.9.1
TPoint
Description
29.10
29.10.1
TRect
Description
29.10.2
Page 976 973 973 972 973 976 974 975 974
Method overview
Description Set rectangle corners. Determine if a point is inside the rectangle Copy cornerpoints from another rectangle. Is the surface of the rectangle zero Do the corners of the rectangles match Expand rectangle with certain size. Reduce rectangle to intersection with another rectangle Move rectangle along a vector. Enlarges rectangle to encompas another rectangle. 971
Property Assign Contains Copy Empty Equals Grow Intersect Move Union
29.10.3
TRect.Empty
Synopsis: Is the surface of the rectangle zero Declaration: function Empty : Boolean Visibility: default Description: Empty returns True if the rectangle dened by the corner points A, B has zero or negative surface. Errors: None. See also: TRect.Equals (1), TRect.Contains (1) Listing: ./objectex/ex1.pp
Program ex1 ; { Program t o demonstrate TRect . Empty } Uses o b j e c t s ;
Var ARect , BRect : TRect ; P : TPoint ; begin With ARect . A do begin X: = 1 0 ; Y: = 1 0 ; end ; With ARect . B do begin X: = 2 0 ; Y: = 2 0 ; end ; { O f f s e t B by ( 5 , 5 ) } With BRect . A do begin X: = 1 5 ; Y: = 1 5 ; end ; With BRect . B do begin X: = 2 5 ; Y: = 2 5 ; end ; { Point } With P do begin X: = 1 5 ; Y: = 1 5 ; end ; W r i t e l n ( A empty : , ARect . Empty ) ; W r i t e l n ( B empty : , BRect . Empty ) ; W r i t e l n ( A Equals B : , ARect . Equals ( BRect ) ) ; W r i t e l n ( A Contains ( 1 5 , 1 5 ) : , ARect . Contains (P ) ) ; end .
972
29.10.4
TRect.Equals
Synopsis: Do the corners of the rectangles match Declaration: function Equals(R: TRect) : Boolean Visibility: default Description: Equals returns True if the rectangle has the same corner points A,B as the rectangle R, and False otherwise. For an example, see TRect.Empty (1) Errors: None. See also: TRect.Empty (1), TRect.Contains (1)
29.10.5
TRect.Contains
Synopsis: Determine if a point is inside the rectangle Declaration: function Contains(P: TPoint) : Boolean Visibility: default Description: Contains returns True if the point P is contained in the rectangle (including borders), False otherwise. Errors: None. See also: TRect.Intersect (1), TRect.Equals (1)
29.10.6
TRect.Copy
Synopsis: Copy cornerpoints from another rectangle. Declaration: procedure Copy(R: TRect) Visibility: default Description: Assigns the rectangle R to the object. After the call to Copy, the rectangle R has been copied to the object that invoked Copy. Errors: None. See also: TRect.Assign (1) Listing: ./objectex/ex2.pp
Program ex2 ; { Program t o demonstrate TRect . Copy } Uses o b j e c t s ; Var ARect , BRect , CRect : TRect ; begin ARect . Assign ( 1 0 , 1 0 , 2 0 , 2 0 ) ; BRect . Assign ( 1 5 , 1 5 , 2 5 , 2 5 ) ;
973
CRect . Copy ( ARect ) ; I f ARect . Equals ( CRect ) Then W r i t e l n ( ARect equals CRect ) Else W r i t e l n ( ARect does n o t equal CRect ! ) ; end .
29.10.7
TRect.Union
Synopsis: Enlarges rectangle to encompas another rectangle. Declaration: procedure Union(R: TRect) Visibility: default Description: Union enlarges the current rectangle so that it becomes the union of the current rectangle with the rectangle R. Errors: None. See also: TRect.Intersect (1) Listing: ./objectex/ex3.pp
Program ex3 ; { Program t o demonstrate TRect . Union } Uses o b j e c t s ;
Var ARect , BRect , CRect : TRect ; begin ARect . Assign ( 1 0 , 1 0 , 2 0 , 2 0 ) ; BRect . Assign ( 1 5 , 1 5 , 2 5 , 2 5 ) ; { CRect i s union o f ARect and BRect } CRect . Assign ( 1 0 , 1 0 , 2 5 , 2 5 ) ; { Calculate i t e x p l i c i t l y } ARect . Union ( BRect ) ; I f ARect . Equals ( CRect ) Then W r i t e l n ( ARect equals CRect ) Else W r i t e l n ( ARect does n o t equal CRect ! ) ; end .
29.10.8
TRect.Intersect
Synopsis: Reduce rectangle to intersection with another rectangle Declaration: procedure Intersect(R: TRect) Visibility: default Description: Intersect makes the intersection of the current rectangle with R. If the intersection is empty, then the rectangle is set to the empty rectangle at coordinate (0,0).
974
Var ARect , BRect , CRect : TRect ; begin ARect . Assign ( 1 0 , 1 0 , 2 0 , 2 0 ) ; BRect . Assign ( 1 5 , 1 5 , 2 5 , 2 5 ) ; { CRect i s i n t e r s e c t i o n o f ARect and BRect } CRect . Assign ( 1 5 , 1 5 , 2 0 , 2 0 ) ; { Calculate i t e x p l i c i t l y } ARect . I n t e r s e c t ( BRect ) ; I f ARect . Equals ( CRect ) Then W r i t e l n ( ARect equals CRect ) Else W r i t e l n ( ARect does n o t equal CRect ! ) ; BRect . Assign ( 2 5 , 2 5 , 3 0 , 3 0 ) ; A r e c t . I n t e r s e c t ( BRect ) ; I f ARect . Empty Then W r i t e l n ( ARect i s empty ) ; end .
29.10.9
TRect.Move
Synopsis: Move rectangle along a vector. Declaration: procedure Move(ADX: Sw_Integer;ADY: Sw_Integer) Visibility: default Description: Move moves the current rectangle along a vector with components (ADX,ADY). It adds ADX to the X-coordinate of both corner points, and ADY to both end points. Errors: None. See also: TRect.Grow (1) Listing: ./objectex/ex5.pp
Program ex5 ; { Program t o demonstrate TRect . Move } Uses o b j e c t s ;
975
begin ARect . Assign ( 1 0 , 1 0 , 2 0 , 2 0 ) ; ARect . Move ( 5 , 5 ) ; / / B r e c t should be where new ARect i s . BRect . Assign ( 1 5 , 1 5 , 2 5 , 2 5 ) ; I f ARect . Equals ( BRect ) Then W r i t e l n ( ARect equals BRect ) Else W r i t e l n ( ARect does n o t equal BRect ! ) ; end .
29.10.10
TRect.Grow
Synopsis: Expand rectangle with certain size. Declaration: procedure Grow(ADX: Sw_Integer;ADY: Sw_Integer) Visibility: default Description: Grow expands the rectangle with an amount ADX in the X direction (both on the left and right side of the rectangle, thus adding a length 2*ADX to the width of the rectangle), and an amount ADY in the Y direction (both on the top and the bottom side of the rectangle, adding a length 2*ADY to the height of the rectangle. ADX and ADY can be negative. If the resulting rectangle is empty, it is set to the empty rectangle at (0,0). Errors: None. See also: TRect.Move (1) Listing: ./objectex/ex6.pp
Program ex6 ; { Program t o demonstrate TRect . Grow } Uses o b j e c t s ;
Var ARect , BRect : TRect ; begin ARect . Assign ( 1 0 , 1 0 , 2 0 , 2 0 ) ; ARect . Grow ( 5 , 5 ) ; / / B r e c t should be where new ARect i s . BRect . Assign ( 5 , 5 , 2 5 , 2 5 ) ; I f ARect . Equals ( BRect ) Then W r i t e l n ( ARect equals BRect ) Else W r i t e l n ( ARect does n o t equal BRect ! ) ; end .
29.10.11
TRect.Assign
Declaration: procedure Assign(XA: Sw_Integer;YA: Sw_Integer;XB: Sw_Integer; YB: Sw_Integer) Visibility: default Description: Assign sets the corner points of the rectangle to (XA,YA) and (Xb,Yb). For an example, see TRect.Copy (1). Errors: None. See also: TRect.Copy (1)
29.11
29.11.1
TResourceCollection
Description
A TResourceCollection manages a collection of resource names. It stores the position and the size of a resource, as well as the name of the resource. It stores these items in records that look like this: TYPE TResourceItem = packed RECORD Posn: LongInt; Size: LongInt; Key : String; End; PResourceItem = ^TResourceItem; It overrides some methods of TStringCollection in order to accomplish this. Remark: Remark that the TResourceCollection manages the names of the resources and their assiciated positions and sizes, it doesnt manage the resources themselves.
29.11.2
Page 978 978 977 978
Method overview
Description Release memory occupied by item. Read an item from the stream. Return the key of an item in the collection. Write an item to the stream.
29.11.3
TResourceCollection.KeyOf
Virtual
Synopsis: Return the key of an item in the collection. Declaration: function KeyOf(Item: Pointer) : Pointer; Visibility: default Description: KeyOf returns the key of an item in the collection. For resources, the key is a pointer to the string with the resource name. Errors: None. See also: TStringCollection.Compare (1) 977
29.11.4
TResourceCollection.GetItem
Virtual
Synopsis: Read an item from the stream. Declaration: function GetItem(var S: TStream) : Pointer; Visibility: default Description: GetItem reads a resource item from the stream S. It reads the position, size and name from the stream, in that order. It DOES NOT read the resource itself from the stream. The resulting item is not inserted in the collection. This call is manly for internal use by the TCollection.Load (1) method. Errors: Errors returned are those by TStream.Read (1) See also: TCollection.Load (1), TStream.Read (1)
29.11.5
TResourceCollection.FreeItem
Virtual
Synopsis: Release memory occupied by item. Declaration: procedure FreeItem(Item: Pointer); Visibility: default Description: FreeItem releases the memory occupied by Item. It de-allocates the name, and then the resourceitem record. It does NOT remove the item from the collection. Errors: None. See also: TCollection.FreeItem (1)
29.11.6
TResourceCollection.PutItem
Virtual
Synopsis: Write an item to the stream. Declaration: procedure PutItem(var S: TStream;Item: Pointer); Visibility: default Description: PutItem writes Item to the stream S. It does this by writing the position and size and name of the resource item to the stream. This method is used primarily by the Store (1) method. Errors: Errors returned are those by TStream.Write (1). See also: TCollection.Store (1)
29.12
29.12.1
TResourceFile
Description
978
29.12.2
Page 979 981 979 980 980 979 980 981 980
Method overview
Description Number of resources in the le Delete a resource from the le Destroy the instance and remove it from memory. Writes the resources to the stream. Return a resource by key name. Instantiate a new instance. Return the key of the item at a certain position. Set a resource by key name. Write resources to a new stream.
Property Count Delete Done Flush Get Init KeyAt Put SwitchTo
29.12.3
TResourceFile.Init
Synopsis: Instantiate a new instance. Declaration: constructor Init(AStream: PStream) Visibility: default Description: Init instantiates a new instance of a TResourceFile object. If AStream is not nil then it is considered as a stream describing an executable image on disk. Init will try to position the stream on the start of the resources section, and read all resources from the stream. Errors: None. See also: TResourceFile.Done (1)
29.12.4
TResourceFile.Done
Virtual
Synopsis: Destroy the instance and remove it from memory. Declaration: destructor Done; Visibility: default Description: Done cleans up the instance of the TResourceFile Object. If Stream was specied at initialization, then Stream is disposed of too. Errors: None. See also: TResourceFile.Init (1)
29.12.5
TResourceFile.Count
Synopsis: Number of resources in the le Declaration: function Count : Sw_Integer Visibility: default Description: Count returns the number of resources. If no resources were read, zero is returned. Errors: None. See also: TResourceFile.Init (1) 979
29.12.6
TResourceFile.KeyAt
Synopsis: Return the key of the item at a certain position. Declaration: function KeyAt(I: Sw_Integer) : string Visibility: default Description: KeyAt returns the key (the name) of the I-th resource. Errors: In case I is invalid, TCollection.Error will be executed. See also: TResourceFile.Get (1)
29.12.7
TResourceFile.Get
Synopsis: Return a resource by key name. Declaration: function Get(Key: string) : PObject Visibility: default Description: Get returns a pointer to a instance of a resource identied by Key. If Key cannot be found in the list of resources, then Nil is returned. Errors: Errors returned may be those by TStream.Get
29.12.8
TResourceFile.SwitchTo
Synopsis: Write resources to a new stream. Declaration: function SwitchTo(AStream: PStream;Pack: Boolean) : PStream Visibility: default Description: SwitchTo switches to a new stream to hold the resources in. AStream will be the new stream after the call to SwitchTo. If Pack is true, then all the known resources will be copied from the current stream to the new stream (AStream). If Pack is False, then only the current resource is copied. The return value is the value of the original stream: Stream. The Modified ag is set as a consequence of this call. Errors: Errors returned can be those of TStream.Read (1) and TStream.Write (1). See also: TResourceFile.Flush (1)
29.12.9
TResourceFile.Flush
Synopsis: Writes the resources to the stream. Declaration: procedure Flush Visibility: default Description: If the Modified ag is set to True, then Flush writes the resources to the stream Stream. It sets the Modified ag to true after that. Errors: Errors can be those by TStream.Seek (1) and TStream.Write (1). See also: TResourceFile.SwitchTo (1) 980
29.12.10
TResourceFile.Delete
Synopsis: Delete a resource from the le Declaration: procedure Delete(Key: string) Visibility: default Description: Delete deletes the resource identied by Key from the collection. It sets the Modified ag to true. Errors: None. See also: TResourceFile.Flush (1)
29.12.11
TResourceFile.Put
Synopsis: Set a resource by key name. Declaration: procedure Put(Item: PObject;Key: string) Visibility: default Description: Put sets the resource identied by Key to Item. If no such resource exists, a new one is created. The item is written to the stream. Errors: Errors returned may be those by TStream.Put (1) and TStream.Seek See also: Get (1)
29.13
29.13.1
TSortedCollection
Description
TSortedCollection is an abstract class, implementing a sorted collection. You should never use an instance of TSortedCollection directly, instead you should declare a descendent type, and override the Compare (1) method. Because the collection is ordered, TSortedCollection overrides some TCollection methods, to provide faster routines for lookup. The Compare (1) method decides how elements in the collection should be ordered. Since TCollection has no way of knowing how to order pointers, you must override the compare method. Additionally, TCollection provides a means to lter out duplicates. if you set Duplicates to False (the default) then duplicates will not be allowed. The example below denes a descendent of TSortedCollection which is used in the examples.
981
29.13.2
Page 983 983 982 985 982 982 984 986
Method overview
Description Compare two items in the collection. Return index of an item in the collection. Instantiates a new instance of a TSortedCollection Insert new item in collection. Return the key of an item Instantiates a new instance of a TSortedCollection and loads it from stream. Search for item with given key. Write the collection to the stream.
29.13.3
TSortedCollection.Init
Synopsis: Instantiates a new instance of a TSortedCollection Declaration: constructor Init(ALimit: Sw_Integer;ADelta: Sw_Integer) Visibility: default Description: Init calls the inherited constuctor (see TCollection.Init (1)) and sets the Duplicates ag to false. You should not call this method directly, since TSortedCollection is a abstract class. Instead, the descendent classes should call it via the inherited keyword. Errors: None. See also: TSortedCollection.Load (1), TCollection.Done (1)
29.13.4
TSortedCollection.Load
Synopsis: Instantiates a new instance of a TSortedCollection and loads it from stream. Declaration: constructor Load(var S: TStream) Visibility: default Description: Load calls the inherited constuctor (see TCollection.Load (1)) and reads the Duplicates ag from the stream.. You should not call this method directly, since TSortedCollection is a abstract class. Instead, the descendent classes should call it via the inherited keyword. For an example, see TCollection.Load (1). Errors: None. See also: TSortedCollection.Init (1), TCollection.Done (1)
29.13.5
TSortedCollection.KeyOf
Virtual
Synopsis: Return the key of an item Declaration: function KeyOf(Item: Pointer) : Pointer; Visibility: default
982
Description: KeyOf returns the key associated with Item. TSortedCollection returns the item itself as the key, descendent objects can override this method to calculate a (unique) key based on the item passed (such as hash values). Keys are used to sort the objects, they are used to search and sort the items in the collection. If descendent types override this method then it allows possibly for faster search/sort methods based on keys rather than on the objects themselves. Errors: None. See also: TSortedCollection.IndexOf (1), TSortedCollection.Compare (1)
29.13.6
TSortedCollection.IndexOf
Virtual
Synopsis: Return index of an item in the collection. Declaration: function IndexOf(Item: Pointer) : Sw_Integer; Visibility: default Description: IndexOf returns the index of Item in the collection. It searches for the object based on its key. If duplicates are allowed, then it returns the index of last object that matches Item. In case Item is not found in the collection, -1 is returned. For an example, see TCollection.IndexOf (1) Errors: None. See also: TSortedCollection.Search (1), TSortedCollection.Compare (1)
29.13.7
TSortedCollection.Compare
Virtual
Synopsis: Compare two items in the collection. Declaration: function Compare(Key1: Pointer;Key2: Pointer) : Sw_Integer; Visibility: default Description: Compare is an abstract method that should be overridden by descendent objects in order to compare two items in the collection. This method is used in the Search (1) method and in the Insert (1) method to determine the ordering of the objects. The function should compare the two keys of items and return the following function results: Result < 0If Key1 is logically before Key2 (Key1<Key2) Result = 0If Key1 and Key2 are equal. (Key1=Key2) Result > 0If Key1 is logically after Key2 (Key1>Key2) Errors: An abstract run-time error will be generated if you call TSortedCollection.Compare directly. See also: TSortedCollection.IndexOf (1), TSortedCollection.Search (1) Listing: ./objectex/mysortc.pp
983
Unit MySortC ; Interface Uses O b j e c t s ; Type PMySortedCollection = ^ TMySortedCollection ; T M y S o r t e d C o l l e c t i o n = Object ( T S o r t e d C o l l e c t i o n ) Function Compare ( Key1 , Key2 : P o i n t e r ) : Sw_integer ; v i r t u a l ; end ; Implementation Uses MyObject ; Function T M y S o r t e d C o l l e c t i o n . Compare ( Key1 , Key2 : P o i n t e r ) : s w _ i n t e g e r ; begin Compare : = PMyobject ( Key1 ) ^ . G e t F i e l d PMyObject ( Key2 ) ^ . G e t F i e l d ; end ; end .
29.13.8
TSortedCollection.Search
Virtual
Synopsis: Search for item with given key. Declaration: function Search(Key: Pointer;var Index: Sw_Integer) : Boolean; Visibility: default Description: Search looks for the item with key Key and returns the position of the item (if present) in the collection in Index. Instead of a linear search as TCollection does, TSortedCollection uses a binary search based on the keys of the objects. It uses the Compare (1) function to implement this search. If the item is found, Search returns True, otherwise False is returned. Errors: None. See also: TCollection.IndexOf (1) Listing: ./objectex/ex36.pp
Program ex36 ; { Program t o demonstrate t h e T S o r t e d C o l l e c t i o n . I n s e r t method } Uses Objects , MyObject , MySortC ; { For TMyObject , T M y S o r t e d C o l l e c t i o n d e f i n i t i o n and r e g i s t r a t i o n } Var C : P S o r t e d C o l l e c t i o n ; M : PMyObject ; I : Longint ; Procedure P r i n t F i e l d ( Dummy : P o i n t e r ; P : PMyObject ) ;
984
,P ^ . G e t F i e l d ) ;
begin Randomize ; C: =New( PMySortedCollection , I n i t ( 1 2 0 , 1 0 ) ) ; C^ . D u p l i c a t e s : = True ; W r i t e l n ( I n s e r t i n g 1 0 0 r e c o r d s a t random p l a c e s . ) ; For I : = 1 to 1 0 0 do begin M: =New( PMyObject , I n i t ) ; M^ . S e t F i e l d (Random ( 1 0 0 ) ) ; C^ . I n s e r t (M) end ; M: =New( PMyObject , I n i t ) ; Repeat ; Write ( Value t o search f o r ( 1 s t o p s ) : ) ; read ( I ) ; I f I <>1 then begin M^ . S e t F i e l d ( i ) ; I f Not C^ . Search ( M, I ) then W r i t e l n ( No such v a l u e found ) else begin Write ( Value , PMyObject (C^ . At ( I ) ) ^ . G e t F i e l d ) ; Writeln ( present at p o s i t i o n , I ) ; end ; end ; U n t i l I =1; Dispose (M, Done ) ; Dispose (C, Done ) ; end .
29.13.9
TSortedCollection.Insert
Virtual
Synopsis: Insert new item in collection. Declaration: procedure Insert(Item: Pointer); Visibility: default Description: Insert inserts an item in the collection at the correct position, such that the collection is ordered at all times. You should never use Atinsert (1), since then the collection ordering is not guaranteed. If Item is already present in the collection, and Duplicates is False, the item will not be inserted. Errors: None. See also: TCollection.AtInsert (1) Listing: ./objectex/ex35.pp
985
Program ex35 ; { Program t o demonstrate t h e T S o r t e d C o l l e c t i o n . I n s e r t method } Uses Objects , MyObject , MySortC ; { For TMyObject , T M y S o r t e d C o l l e c t i o n d e f i n i t i o n and r e g i s t r a t i o n } Var C : P S o r t e d C o l l e c t i o n ; M : PMyObject ; I : Longint ; Procedure P r i n t F i e l d ( Dummy : P o i n t e r ; P : PMyObject ) ; begin Writeln ( F i e l d : end ;
,P ^ . G e t F i e l d ) ;
begin Randomize ; C: =New( PMySortedCollection , I n i t ( 1 2 0 , 1 0 ) ) ; W r i t e l n ( I n s e r t i n g 1 0 0 r e c o r d s a t random p l a c e s . ) ; For I : = 1 to 1 0 0 do begin M: =New( PMyObject , I n i t ) ; M^ . S e t F i e l d (Random ( 1 0 0 ) ) ; C^ . I n s e r t (M) end ; W r i t e l n ( Values : ) ; C^ . Foreach ( @ P r i n t F i e l d ) ; Dispose (C, Done ) ; end .
29.13.10
TSortedCollection.Store
Synopsis: Write the collection to the stream. Declaration: procedure Store(var S: TStream) Visibility: default Description: Store writes the collection to the stream S. It does this by calling the inherited TCollection.Store (1), and then writing the Duplicates ag to the stream. After a Store, the collection can be loaded from the stream with the constructor Load (1) For an example, see TCollection.Load (1). Errors: Errors can be those of TStream.Put (1). See also: TSortedCollection.Load (1)
986
29.14
29.14.1
TStrCollection
Description
The TStrCollection object manages a sorted collection of null-terminated strings (pchar strings). To this end, it overrides the Compare (1) method of TSortedCollection, and it introduces methods to read/write strings from a stream.
29.14.2
Page 987 988 988 988
Method overview
Description Compare two strings in the collection. Free null-terminated string from the collection. Read a null-terminated string from the stream. Write a null-terminated string to the stream.
29.14.3
TStrCollection.Compare
Virtual
Synopsis: Compare two strings in the collection. Declaration: function Compare(Key1: Pointer;Key2: Pointer) : Sw_Integer; Visibility: default Description: TStrCollection overrides the Compare function so it compares the two keys as if they were pointers to strings. The compare is done case sensitive. It returns -1if the rst string is alphabetically earlier than the second string. 0if the two strings are equal. 1if the rst string is alphabetically later than the second string. Errors: None. See also: TSortedCollection.Compare (1) Listing: ./objectex/ex38.pp
Program ex38 ; { Program t o demonstrate t h e T S t r C o l l e c t i o n . Compare method } Uses Objects , S t r i n g s ; Var C S I P : : : : PStrCollection ; String ; longint ; Pchar ;
987
S: = S t r i n g w i t h v a l u e +S ; P: = S t r A l l o c ( Length (S ) + 1 ) ; C^ . I n s e r t ( StrPCopy ( P , S ) ) ; end ; For I : = 0 to 9 8 do With C^ do I f Compare ( At ( I ) , At ( I + 1 ) ) = 0 then W r i t e l n ( D u p l i c a t e s t r i n g found a t p o s i t i o n Dispose (C, Done ) ; end .
, I );
29.14.4
TStrCollection.GetItem
Virtual
Synopsis: Read a null-terminated string from the stream. Declaration: function GetItem(var S: TStream) : Pointer; Visibility: default Description: GetItem reads a null-terminated string from the stream S and returns a pointer to it. It doesnt insert the string in the collection. This method is primarily introduced to be able to load and store the collection from and to a stream. Errors: The errors returned are those of TStream.StrRead (1). See also: TStrCollection.PutItem (1)
29.14.5
TStrCollection.FreeItem
Virtual
Synopsis: Free null-terminated string from the collection. Declaration: procedure FreeItem(Item: Pointer); Visibility: default Description: TStrCollection overrides FreeItem so that the string pointed to by Item is disposed from memory. Errors: None. See also: TCollection.FreeItem (1)
29.14.6
TStrCollection.PutItem
Virtual
Synopsis: Write a null-terminated string to the stream. Declaration: procedure PutItem(var S: TStream;Item: Pointer); Visibility: default Description: PutItem writes the string pointed to by Item to the stream S. This method is primarily used in the Load and Store methods, and should not be used directly. Errors: Errors are those of TStream.StrWrite (1). See also: TStrCollection.GetItem (1)
988
29.15
29.15.1
TStream
Description
The TStream object is the ancestor for all streaming objects, i.e. objects that have the capability to store and retrieve data. It denes a number of methods that are common to all objects that implement streaming, many of them are virtual, and are only implemented in the descendent types. Programs should not instantiate objects of type TStream directly, but instead instantiate a descendant type, such as TDosStream, TMemoryStream. See also: PStream (935), TDosStream (962), TMemoryStream (967)
29.15.2
Page 993 997 995 994 989 991 991 989 993 994 996 992 993 995 990 995 994 996 995
Method overview
Description Close the stream Copy data from another stream. Set stream status Flush the stream data from the buffer, if any. Read an object denition from the stream. Return current position in the stream Return the size of the stream. Constructor for TStream instance Open the stream Write an object to the stream. Read data from stream to buffer. Read a shortstring from the stream. Reset the stream Set stream position. Read a null-terminated string from the stream. Write a null-terminated string to the stream. Truncate the stream size on current position. Write a number of bytes to the stream. Write a pascal string to the stream.
Property Close CopyFrom Error Flush Get GetPos GetSize Init Open Put Read ReadStr Reset Seek StrRead StrWrite Truncate Write WriteStr
29.15.3
TStream.Init
Synopsis: Constructor for TStream instance Declaration: constructor Init Visibility: default Description: Init initializes a TStream instance. Descendent streams should always call the inherited Init.
29.15.4
TStream.Get
Synopsis: Read an object denition from the stream. Declaration: function Get : PObject Visibility: default
989
Description: Get reads an object denition from a stream, and returns a pointer to an instance of this object. Errors: On error, TStream.Status (1) is set, and NIL is returned. See also: TStream.Put (1) Listing: ./objectex/ex9.pp
Program ex9 ; { Program t o demonstrate TStream . Get and TStream . Put } Uses Objects , MyObject ; Var Obj : PMyObject ; S : PStream ; begin Obj : =New( PMyObject , I n i t ) ; Obj ^ . S e t F i e l d ( $1111 ) ; W r i t e l n ( F i e l d v a l u e : , Obj ^ . G e t F i e l d ) ; { Since Stream i s an a b s t r a c t type , we i n s t a n t i a t e a TMemoryStream } S: =New( PMemoryStream , I n i t ( 1 0 0 , 1 0 ) ) ; S ^ . Put ( Obj ) ; Writeln ( Disposing o b j e c t ) ; S ^ . Seek ( 0 ) ; Dispose ( Obj , Done ) ; W r i t e l n ( Reading o b j e c t ) ; Obj : = PMyObject (S ^ . Get ) ; W r i t e l n ( F i e l d Value : , Obj ^ . G e t F i e l d ) ; Dispose ( Obj , Done ) ; end . { D e f i n i t i o n and r e g i s t r a t i o n o f TMyObject }
29.15.5
TStream.StrRead
Synopsis: Read a null-terminated string from the stream. Declaration: function StrRead : PChar Visibility: default Description: StrRead reads a string from the stream, allocates memory for it, and returns a pointer to a nullterminated copy of the string on the heap. Errors: On error, Nil is returned. See also: TStream.StrWrite (1), TStream.ReadStr (1) Listing: ./objectex/ex10.pp
Program ex10 ; { Program t o demonstrate t h e TStream . StrRead TStream . S t r W r i t e f u n c t i o n s } Uses o b j e c t s ;
990
Var P : PChar ; S : PStream ; begin P: = Constant Pchar s t r i n g ; W r i t e l n ( W r i t i n g t o stream : " ,P , " ) ; S: =New( PMemoryStream , I n i t ( 1 0 0 , 1 0 ) ) ; S ^ . S t r W r i t e (P ) ; S ^ . Seek ( 0 ) ; P: = N i l ; P: =S ^ . StrRead ; DisPose ( S , Done ) ; W r i t e l n ( Read from stream : " ,P , " ) ; Freemem ( P , S t r l e n (P ) + 1 ) ; end .
29.15.6
TStream.GetPos
Virtual
Synopsis: Return current position in the stream Declaration: function GetPos : LongInt; Visibility: default Description: If the streams status is stOk, GetPos returns the current position in the stream. Otherwise it returns -1 Errors: -1 is returned if the status is an error condition. See also: TStream.Seek (1), TStream.GetSize (1) Listing: ./objectex/ex11.pp
Program ex11 ; { Program t o demonstrate t h e TStream . GetPos f u n c t i o n } Uses o b j e c t s ; Var L : S t r i n g ; S : PStream ; begin L : = Some k i n d o f s t r i n g ; S: =New( PMemoryStream , I n i t ( 1 0 0 , 1 0 ) ) ; W r i t e l n ( Stream p o s i t i o n b e f o r e w r i t e : ,S ^ . GetPos ) ; S ^ . W r i t e S t r (@L) ; W r i t e l n ( Stream p o s i t i o n a f t e r w r i t e : ,S ^ . GetPos ) ; Dispose ( S , Done ) ; end .
29.15.7
TStream.GetSize
Virtual 991
Synopsis: Return the size of the stream. Declaration: function GetSize : LongInt;
Visibility: default Description: If the streams status is stOk then GetSize returns the size of the stream, otherwise it returns -1. Errors: -1 is returned if the status is an error condition. See also: TStream.Seek (1), TStream.GetPos (1) Listing: ./objectex/ex12.pp
Program ex12 ; { Program t o demonstrate t h e TStream . GetSize f u n c t i o n } Uses o b j e c t s ; Var L : S t r i n g ; S : PStream ; begin L : = Some k i n d o f s t r i n g ; S: =New( PMemoryStream , I n i t ( 1 0 0 , 1 0 ) ) ; W r i t e l n ( Stream s i z e b e f o r e w r i t e : ,S ^ . GetSize ) ; S ^ . W r i t e S t r (@L) ; W r i t e l n ( Stream s i z e a f t e r w r i t e : ,S ^ . GetSize ) ; Dispose ( S , Done ) ; end .
29.15.8
TStream.ReadStr
Synopsis: Read a shortstring from the stream. Declaration: function ReadStr : PString Visibility: default Description: ReadStr reads a string from the stream, copies it to the heap and returns a pointer to this copy. The string is saved as a pascal string, and hence is NOT null terminated. Errors: On error (e.g. not enough memory), Nil is returned. See also: TStream.StrRead (1) Listing: ./objectex/ex13.pp
Program ex13 ; { Program t o demonstrate t h e TStream . ReadStr TStream . W r i t e S t r f u n c t i o n s } Uses o b j e c t s ; Var P : P S t r i n g ; L : String ; S : PStream ; begin
992
L : = Constant s t r i n g l i n e ; W r i t e l n ( W r i t i n g t o stream : " , L , " ) ; S: =New( PMemoryStream , I n i t ( 1 0 0 , 1 0 ) ) ; S ^ . W r i t e S t r (@L) ; S ^ . Seek ( 0 ) ; P: =S ^ . ReadStr ; L : =P ^ ; DisposeStr (P ) ; DisPose ( S , Done ) ; W r i t e l n ( Read from stream : " , L , " ) ; end .
29.15.9
TStream.Open
Virtual
Synopsis: Open the stream Declaration: procedure Open(OpenMode: Word); Visibility: default Description: Open is an abstract method, that should be overridden by descendent objects. Since opening a stream depends on the streams type this is not surprising. For an example, see TDosStream.Open (1). Errors: None. See also: TStream.Close (1), TStream.Reset (1)
29.15.10
TStream.Close
Virtual
Synopsis: Close the stream Declaration: procedure Close; Visibility: default Description: Close is an abstract method, that should be overridden by descendent objects. Since Closing a stream depends on the streams type this is not surprising. for an example, see TDosStream.Open (1). Errors: None. See also: TStream.Open (1), TStream.Reset (1)
29.15.11
TStream.Reset
Synopsis: Reset the stream Declaration: procedure Reset Visibility: default Description: Reset sets the streams status to 0, as well as the ErrorInfo Errors: None. See also: TStream.Open (1), TStream.Close (1) 993
29.15.12
TStream.Flush
Virtual
Synopsis: Flush the stream data from the buffer, if any. Declaration: procedure Flush; Visibility: default Description: Flush is an abstract method that should be overridden by descendent objects. It serves to enable the programmer to tell streams that implement a buffer to clear the buffer. for an example, see TBufStream.Flush (1). Errors: None. See also: TStream.Truncate (1)
29.15.13
TStream.Truncate
Virtual
Synopsis: Truncate the stream size on current position. Declaration: procedure Truncate; Visibility: default Description: Truncate is an abstract procedure that should be overridden by descendent objects. It serves to enable the programmer to truncate the size of the stream to the current le position. For an example, see TDosStream.Truncate (1). Errors: None. See also: TStream.Seek (1)
29.15.14
TStream.Put
Synopsis: Write an object to the stream. Declaration: procedure Put(P: PObject) Visibility: default Description: Put writes the object pointed to by P. P should be non-nil. The object type must have been registered with RegisterType (942). After the object has been written, it can be read again with Get (1). For an example, see TStream.Get (1); Errors: No check is done whether P is Nil or not. Passing Nil will cause a run-time error 216 to be generated. If the object has not been registered, the status of the stream will be set to stPutError. See also: TStream.Get (1)
994
29.15.15
TStream.StrWrite
Synopsis: Write a null-terminated string to the stream. Declaration: procedure StrWrite(P: PChar) Visibility: default Description: StrWrite writes the null-terminated string P to the stream. P can only be 65355 bytes long. For an example, see TStream.StrRead (1). Errors: None. See also: TStream.WriteStr (1), TStream.StrRead (1), TStream.ReadStr (1)
29.15.16
TStream.WriteStr
Synopsis: Write a pascal string to the stream. Declaration: procedure WriteStr(P: PString) Visibility: default Description: StrWrite writes the pascal string pointed to by P to the stream. For an example, see TStream.ReadStr (1). Errors: None. See also: TStream.StrWrite (1), TStream.StrRead (1), TStream.ReadStr (1)
29.15.17
TStream.Seek
Virtual
Synopsis: Set stream position. Declaration: procedure Seek(Pos: LongInt); Visibility: default Description: Seek sets the position to Pos. This position is counted from the beginning, and is zero based. (i.e. seeek(0) sets the position pointer on the rst byte of the stream) For an example, see TDosStream.Seek (1). Errors: If Pos is larger than the stream size, Status is set to StSeekError. See also: TStream.GetPos (1), TStream.GetSize (1)
29.15.18
TStream.Error
Virtual
Synopsis: Set stream status Declaration: procedure Error(Code: Integer;Info: Integer); Visibility: default Description: Error sets the streams status to Code and ErrorInfo to Info. If the StreamError procedural variable is set, Error executes it, passing Self as an argument. This method should not be called directly from a program. It is intended to be used in descendent objects. Errors: None. 995
29.15.19
TStream.Read
Virtual
Synopsis: Read data from stream to buffer. Declaration: procedure Read(var Buf;Count: LongInt); Visibility: default Description: Read is an abstract method that should be overridden by descendent objects. Read reads Count bytes from the stream into Buf. It updates the position pointer, increasing its value with Count. Buf must be large enough to contain Count bytes. Errors: No checking is done to see if Buf is large enough to contain Count bytes. See also: TStream.Write (1), TStream.ReadStr (1), TStream.StrRead (1) Listing: ./objectex/ex18.pp
program ex18 ; { Program t o demonstrate t h e TStream . Read method } Uses O b j e c t s ; Var Buf1 , Buf2 : Array [ 1 . . 1 0 0 0 ] of Byte ; I : longint ; S : PMemorySTream ; begin For I : = 1 to 1 0 0 0 do Buf1 [ I ] : = Random( 1 0 0 0 ) ; Buf2 : = Buf1 ; S: =New( PMemoryStream , I n i t ( 1 0 0 , 1 0 ) ) ; S ^ . Write ( Buf1 , SizeOf ( Buf1 ) ) ; S ^ . Seek ( 0 ) ; For I : = 1 to 1 0 0 0 do Buf1 [ I ] : = 0 ; S ^ . Read ( Buf1 , SizeOf ( Buf1 ) ) ; For I : = 1 to 1 0 0 0 do I f Buf1 [ I ] < > buf2 [ i ] then Writeln ( B u f f e r d i f f e r s at p o s i t i o n Dispose ( S , Done ) ; end .
, I );
29.15.20
TStream.Write
Virtual
Synopsis: Write a number of bytes to the stream. Declaration: procedure Write(var Buf;Count: LongInt); Visibility: default Description: Write is an abstract method that should be overridden by descendent objects. Write writes Count bytes to the stream from Buf. It updates the position pointer, increasing its value with Count. For an example, see TStream.Read (1). Errors: No checking is done to see if Buf actually contains Count bytes. See also: TStream.Read (1), TStream.WriteStr (1), TStream.StrWrite (1) 996
29.15.21
TStream.CopyFrom
Synopsis: Copy data from another stream. Declaration: procedure CopyFrom(var S: TStream;Count: LongInt) Visibility: default Description: CopyFrom reads Count bytes from stream S and stores them in the current stream. It uses the Read (1) method to read the data, and the Write (1) method to write in the current stream. Errors: None. See also: Read (1), Write (1) Listing: ./objectex/ex19.pp
Program ex19 ; { Program t o demonstrate t h e TStream . CopyFrom f u n c t i o n } Uses o b j e c t s ; Var P : P S t r i n g ; L : String ; S1 , S2 : PStream ; begin L : = Constant s t r i n g l i n e ; W r i t e l n ( W r i t i n g t o stream 1 : " , L , " ) ; S1 : =New( PMemoryStream , I n i t ( 1 0 0 , 1 0 ) ) ; S2 : =New( PMemoryStream , I n i t ( 1 0 0 , 1 0 ) ) ; S1 ^ . W r i t e S t r (@L) ; S1 ^ . Seek ( 0 ) ; W r i t e l n ( Copying c o n t e n t s o f stream 1 t o stream 2 ) ; S2 ^ . Copyfrom ( S1 ^ , S1 ^ . GetSize ) ; S2 ^ . Seek ( 0 ) ; P: = S2 ^ . ReadStr ; L : =P ^ ; DisposeStr (P ) ; Dispose ( S1 , Done ) ; Dispose ( S2 , Done ) ; W r i t e l n ( Read from stream 2 : " , L , " ) ; end .
29.16
29.16.1
TStringCollection
Description
The TStringCollection object manages a sorted collection of pascal strings. To this end, it overrides the Compare (1) method of TSortedCollection, and it introduces methods to read/write strings from a stream.
997
29.16.2
Page 998 999 998 999
Method overview
Description Compare two strings in the collection. Dispose a string in the collection from memory. Get string from the stream. Write a string to the stream.
29.16.3
TStringCollection.GetItem
Virtual
Synopsis: Get string from the stream. Declaration: function GetItem(var S: TStream) : Pointer; Visibility: default Description: GetItem reads a string from the stream S and returns a pointer to it. It doesnt insert the string in the collection. This method is primarily introduced to be able to load and store the collection from and to a stream. Errors: The errors returned are those of TStream.ReadStr (1). See also: TStringCollection.PutItem (1)
29.16.4
TStringCollection.Compare
Virtual
Synopsis: Compare two strings in the collection. Declaration: function Compare(Key1: Pointer;Key2: Pointer) : Sw_Integer; Visibility: default Description: TStringCollection overrides the Compare function so it compares the two keys as if they were pointers to strings. The compare is done case sensitive. It returns the following results: -1if the rst string is alphabetically earlier than the second string. 0if the two strings are equal. 1if the rst string is alphabetically later than the second string. Errors: None. See also: TSortedCollection.Compare (1) Listing: ./objectex/ex37.pp
Program ex37 ; { Program t o demonstrate t h e T S t r i n g C o l l e c t i o n . Compare method } Uses O b j e c t s ; Var C : P S t r i n g C o l l e c t i o n ; S : String ; I : longint ; begin Randomize ;
998
C: =New( P S t r i n g C o l l e c t i o n , I n i t ( 1 2 0 , 1 0 ) ) ; C^ . D u p l i c a t e s : = True ; { D u p l i c a t e s a l l o w e d } W r i t e l n ( I n s e r t i n g 1 0 0 r e c o r d s a t random p l a c e s . ) ; For I : = 1 to 1 0 0 do begin S t r (Random( 1 0 0 ) ,S ) ; S: = S t r i n g w i t h v a l u e +S ; C^ . I n s e r t ( NewStr (S ) ) ; end ; For I : = 0 to 9 8 do With C^ do I f Compare ( At ( i ) , At ( I + 1 ) ) = 0 then W r i t e l n ( D u p l i c a t e s t r i n g found a t p o s i t i o n , i ) ; Dispose (C, Done ) ; end .
29.16.5
TStringCollection.FreeItem
Virtual
Synopsis: Dispose a string in the collection from memory. Declaration: procedure FreeItem(Item: Pointer); Visibility: default Description: TStringCollection overrides FreeItem so that the string pointed to by Item is disposed from memory. Errors: None. See also: TCollection.FreeItem (1)
29.16.6
TStringCollection.PutItem
Virtual
Synopsis: Write a string to the stream. Declaration: procedure PutItem(var S: TStream;Item: Pointer); Visibility: default Description: PutItem writes the string pointed to by Item to the stream S. This method is primarily used in the Load and Store methods, and should not be used directly. Errors: Errors are those of TStream.WriteStr (1). See also: TStringCollection.GetItem (1)
29.17
29.17.1
TStringList
Description
A TStringList object can be used to read a collection of strings stored in a stream. If you register this object with the RegisterType (942) function, you cannot register the TStrListMaker object.
999
29.17.2
Page 1000 1000 1000
Method overview
Description Clean up the instance Return a string by key name Load stringlist from stream.
29.17.3
TStringList.Load
Synopsis: Load stringlist from stream. Declaration: constructor Load(var S: TStream) Visibility: default Description: The Load constructor reads the TStringList object from the stream S. It also reads the descriptions of the strings from the stream. The string descriptions are stored as an array of TstrIndexrec records, where each record describes a string on the stream. These records are kept in memory. Errors: If an error occurs, a stream error is triggered. See also: TStringList.Done (1)
29.17.4
TStringList.Done
Virtual
Synopsis: Clean up the instance Declaration: destructor Done; Visibility: default Description: The Done destructor frees the memory occupied by the string descriptions, and destroys the object. Errors: None. See also: Load (1), TObject.Done (1)
29.17.5
TStringList.Get
Synopsis: Return a string by key name Declaration: function Get(Key: Sw_Word) : string Visibility: default Description: Get reads the string with key Key from the list of strings on the stream, and returns this string. If there is no string with such a key, an empty string is returned. Errors: If no string with key Key is found, an empty string is returned. A stream error may result if the stream doesnt contain the needed strings. See also: TStrListMaker.Put (1)
1000
29.18
29.18.1
TStrListMaker
Description
The TStrListMaker object can be used to generate a stream with strings, which can be read with the TStringList object. If you register this object with the RegisterType (942) function, you cannot register the TStringList object.
29.18.2
Page 1001 1001 1001 1002
Method overview
Description Clean up the instance and free all related memory. Instantiate a new instance of TStrListMaker Add a new string to the list with associated key. Write the strings to the stream.
29.18.3
TStrListMaker.Init
Synopsis: Instantiate a new instance of TStrListMaker Declaration: constructor Init(AStrSize: Sw_Word;AIndexSize: Sw_Word) Visibility: default Description: The Init constructor creates a new instance of the TstrListMaker object. It allocates AStrSize bytes on the heap to hold all the strings you wish to store. It also allocates enough room for AIndexSize key description entries (of the type TStrIndexrec). AStrSize must be large enough to contain all the strings you wish to store. If not enough memory is allocated, other memory will be overwritten. The same is true for AIndexSize : maximally AIndexSize strings can be written to the stream. Errors: None. See also: TObject.Init (1), TStrListMaker.Done (1)
29.18.4
TStrListMaker.Done
Virtual
Synopsis: Clean up the instance and free all related memory. Declaration: destructor Done; Visibility: default Description: The Done destructor de-allocates the memory for the index description records and the string data, and then destroys the object. Errors: None. See also: TObject.Done (1), TStrListMaker.Init (1)
29.18.5
TStrListMaker.Put
Synopsis: Add a new string to the list with associated key. Declaration: procedure Put(Key: Sw_Word;S: string)
1001
Visibility: default Description: Put adds they string S with key Key to the collection of strings. This action doesnt write the string to a stream. To write the strings to the stream, see the Store (1) method. Errors: None. See also: TStrListMaker.Store (1)
29.18.6
TStrListMaker.Store
Synopsis: Write the strings to the stream. Declaration: procedure Store(var S: TStream) Visibility: default Description: Store writes the collection of strings to the stream S. The collection can then be read with the TStringList object. Errors: A stream error may occur when writing the strings to the stream. See also: TStringList.Load (1), TStrListMaker.Put (1)
29.19
29.19.1
TUnSortedStrCollection
Description
The TUnSortedStrCollection object manages an unsorted list of strings. To this end, it overrides the TStringCollection.Insert (1) method to add strings at the end of the collection, rather than in the alphabetically correct position. Take care, the Search (1) and IndexOf (1) methods will not work on an unsorted string collection.
29.19.2
Page 1002
Method overview
Description Insert a new string in the collection.
Property Insert
29.19.3
TUnSortedStrCollection.Insert
Virtual
Synopsis: Insert a new string in the collection. Declaration: procedure Insert(Item: Pointer); Visibility: default Description: Insert inserts a string at the end of the collection, instead of on its alphabetical place, resulting in an unsorted collection of strings. Errors: None. See also: TCollection.Insert (1) Listing: ./objectex/ex39.pp
1002
Program ex39 ; { Program t o demonstrate t h e T U n s o r t e d S t r C o l l e c t i o n . I n s e r t method } Uses Objects , S t r i n g s ; Var C S I P : : : : PUnsortedStrCollection ; String ; longint ; Pchar ;
begin Randomize ; C: =New( P U n s o r t e d S t r C o l l e c t i o n , I n i t ( 1 2 0 , 1 0 ) ) ; W r i t e l n ( I n s e r t i n g 1 0 0 r e c o r d s a t random p l a c e s . ) ; For I : = 1 to 1 0 0 do begin S t r (Random( 1 0 0 ) ,S ) ; S: = S t r i n g w i t h v a l u e +S ; C^ . I n s e r t ( NewStr (S ) ) ; end ; For I : = 0 to 9 9 do W r i t e l n ( I : 2 , : , P S t r i n g (C^ . At ( i ) ) ^ ) ; Dispose (C, Done ) ; end .
1003
Chapter 30
The objpas unit is meant for compatibility with Object Pascal as implemented by Delphi. The unit is loaded automatically by the Free Pascal compiler whenever the Delphi or objfpc mode is entered, either through the command line switches -Sd or -Sh or with the {$MODE DELPHI} or {$MODE OBJFPC} directives. It redenes some basic pascal types, introduces some functions for compatibility with Delphis system unit, and introduces some methods for the management of the resource string tables.
30.2
30.2.1
30.2.2
Types
Integer = LongInt In OBJPAS mode and in DELPHI mode, an Integer has a size of 32 bit. In TP or regular FPC mode, an integer is 16 bit. IntegerArray = Array[0..$effffff] of Integer Generic array of integer (1004) PInteger = ^Integer Pointer to Integer (1004) type. PIntegerArray = ^IntegerArray Pointer to TIntegerArray (1005) type. 1004
PointerArray = Array[0..512*1024*1024-2] of Pointer Generic Array of pointers. PPointerArray = ^PointerArray Pointer to PointerArray (1005) PString = PAnsiString Pointer to ansistring type. TBoundArray = Array of Integer Array of integer, used in interfaces. TIntegerArray = IntegerArray Alias for IntegerArray (1004) TPointerArray = PointerArray Alias for PointerArray (1005)
1005
Chapter 31
This document describes the LINUX unit for Free Pascal. The unit was written by Michael van Canneyt. It works only on the Linux/X86 operating system.
31.2
Utility routines
Auxiliary functions that are useful in connection with the other functions. Table 31.1: Name CreateShellArgV (1068) EpochToLocal (1071) FD_Clr (1081) FD_IsSet (1082) FD_Set (1082) FD_ZERO (1082) LocalToEpoch (1101) MMap (1103) MUnMap (1105) Octal (1107) S_ISBLK (1123) S_ISCHR (1123) S_ISDIR (1123) S_ISFIFO (1124) S_ISLNK (1124) S_ISREG (1125) S_ISSOCK (1125) StringToPPchar (1119) Description Create an array of pchars from string Convert epoch time to local time Clear item of select ledescriptors Check item of select ledescriptors Set item of select ledescriptors Clear all items in select ledecriptors Convert local time to epoch time Map a le into memory Unmap previously mapped memory le Convert octal to digital Check le mode for block device Check le mode for character device Check le mode for directory Check le mode for FIFO Check le mode for symboloc link Check le mode for regular le Check le mode for socket Create an array of pchars from string
1006
31.3
Terminal functions
Functions for controlling the terminal to which the process is connected. Table 31.2: Name CFMakeRaw (1063) CFSetISpeed (1063) CFSetOSpeed (1063) IOCtl (1098) IsATTY (1099) TCDrain (1125) TCFlow (1125) TCFlush (1126) TCGetAttr (1126) TCGetPGrp (1127) TCSendBreak (1127) TCSetAttr (1128) TCSetPGrp (1128) TTYName (1129) Description Set terminal to raw mode Set terminal reading speed Set terminal writing speed General IO control call See if ledescriptor is a terminal Wait till all output was written Suspend transmission or receipt of data Discard data written to terminal Get terminal attributes Return PID of foreground process Send data for specic time Set terminal attributes Set foreground process Name of tty le
31.4
System information
Functions for retrieving system information such as date and time. Table 31.3: Name GetDate (1088) GetDateTime (1089) GetDomainName (1089) GetEpochTime (1091) GetHostName (1093) GetLocalTimezone (1093) GetTime (1095) GetTimeOfDay (1096) GetTimezoneFile (1096) ReadTimezoneFile (1111) SysInfo (1122) Uname (1129) Description Return system date Return system date and time Return system domain name Return epoch time Return system host name Return system timezone Return system time Return system time Return name of timezone le Read timezone le contents Return general system information Return system information
31.5
Signals
1007
Table 31.4: Name Alarm (1059) Kill (1099) pause (1108) SigAction (1115) Signal (1117) SigPending (1118) SigProcMask (1118) SigRaise (1118) SigSuspend (1119) NanoSleep (1105) Description Send alarm signal to self Send arbitrary signal to process Wait for signal to arrive Set signal action Set signal action See if signals are waiting Set signal processing mask Send signal to self Sets signal mask and waits for signal Waits for a specic amount of time
31.6
Process handling
Functions for managing processes and programs. Table 31.5: Name Clone (1066) Execl (1071) Execle (1072) Execlp (1073) Execv (1074) Execve (1075) Execvp (1076) Fork (1084) GetEGid (1090) GetEnv (1090) GetEUid (1091) GetGid (1092) GetPid (1094) GetPPid (1094) GetPriority (1095) GetUid (1096) Nice (1106) SetPriority (1114) Shell (1115) WaitPid (1131) Description Create a thread Execute process with command-line list Execute process with command-line list and environment Search in path and execute process with command list Execute process Execute process with environment Search in path and execute process Spawn child process Get effective group id Get environment variable Get effective user id Get group id Get process id Get parent process id Get process priority Get user id Change priority of process Change priority of process Execute shell command Wait for child process to terminate
31.7
1008
Table 31.6: Name CloseDir (1068) Glob (1097) GlobFree (1098) OpenDir (1107) ReadDir (1110) SeekDir (1112) TellDir (1128) Description Close directory handle Return les matching a search expression Free result of Glob Open directory for reading Read directory entry Seek directory Seek directory
31.8
Functions for creating and managing pipes. Table 31.7: Name AssignPipe (1060) AssignStream (1061) MkFifo (1103) PClose (1109) POpen (1109) Description Create a pipe Create pipes to programs input and output Make a fo Close a pipe Open a pipe for to programs input or output
31.9
1009
Table 31.8: Name Access (1058) BaseName (1062) Chown (1065) Chmod (1063) DirName (1069) FSplit (1086) FExpand (1082) FLock (1083) FNMatch (1083) FSearch (1085) FSStat (1086) FStat (1087) FRename (1084) LStat (1102) Link (1100) ReadLink (1110) SymLink (1120) Umask (1129) UnLink (1130) Utime (1130) Description Check access rights on le Return name part of le Change owner of le Change access rights on le Return directory part of le Split lename in parts Return full-grown lename Set lock on a le Match lename to searchpattern Search for a le in a path Return lesystem information Return le information Rename le Return information on a link Create a link Read contents of a symbolic link Create a symbolic link Set the le creation mask Remove a le Change le timestamps
31.10
Functions for handling le input/output. Table 31.9: Name Dup (1069) Dup2 (1070) Fcntl (1077) fdClose (1078) fdFlush (1078) fdOpen (1078) fdRead (1079) fdSeek (1080) fdTruncate (1081) fdWrite (1081) GetFS (1092) Select (1112) SelectText (1113) Description Duplicate a le handle Copy one le handle to another General le control Close le descriptor Flush le descriptor Open new le descriptor Read from le descriptor Position in le Truncate le Write to le descriptor Get le descriptor of pascal le Wait for input from le descriptor Wait for input from pascal le
1010
31.11
31.11.1
B0 = $0000000
B110 = $0000003
B115200 = $0001002
B1200 = $0000009
B134 = $0000004
B150 = $0000005
B1800 = $000000A
B19200 = $000000E
B200 = $0000006
B230400 = $0001003
B2400 = $000000B
B300 = $0000007
B38400 = $000000F
B460800 = $0001004
B4800 = $000000C
B50 = $0000001
B57600 = $0001001
B75 = $0000002
B9600 = $000000D
BRKINT = $0000002
BS0 = $0000000
BS1 = $0002000
BSDLY = $0002000
CBAUD = $000100F
CBAUDEX = $0001000
CIBAUD = $100F0000
CLOCAL = $0000800
CLONE_FILES = $00000400 Clone (1066) option: open les shared between processes CLONE_FS = $00000200 Clone (1066) option: fs info shared between processes CLONE_PID = $00001000 Clone (1066) option: PID shared between processes CLONE_SIGHAND = $00000800 Clone (1066) option: signal handlers shared between processes CLONE_VM = $00000100 Clone (1066) option: VM shared between processes CMSPAR = $40000000
CR1 = $0000200
CR2 = $0000400
CR3 = $0000600
CRDLY = $0000600
CREAD = $0000080
CRTSCTS = $80000000
CS5 = $0000000
CS6 = $0000010
CS7 = $0000020
CS8 = $0000030
CSIGNAL = $000000ff Clone (1066) option: Signal mask to be sent at exit CSIZE = $0000030
CSTOPB = $0000040
ECHO = $0000008
ECHOCTL = $0000200
ECHOE = $0000010
ECHOK = $0000020
ECHOKE = $0000800
1013
ECHONL = $0000040
ECHOPRT = $0000400
EXTA = B19200
EXTB = B38400
FF0 = $0000000
FF1 = $0008000
FFDLY = $0008000
FIOASYNC = $5452
FIOCLEX = $5451
FIONBIO = $5421
FIONCLEX = $5450
FIONREAD = $541B
FLUSHO = $0001000
fs_ext = $137d File system type (FSStat (1086)): (ext) Extended fs_ext2 = $ef53 File system type (FSStat (1086)): (ext2) Second extended fs_iso = $9660 File system type (FSStat (1086)): ISO 9660 fs_minix = $137f File system type (FSStat (1086)): Minix 1014
fs_minix_30 = $138f File system type (FSStat (1086)): Minix 3.0 fs_minux_V2 = $2468 File system type (FSStat (1086)): Minix V2 fs_msdos = $4d44 File system type (FSStat (1086)): MSDOS (FAT) fs_nfs = $6969 File system type (FSStat (1086)): NFS fs_old_ext2 = $ef51 File system type (FSStat (1086)): (ext2) Old second extended fs_proc = $9fa0 File system type (FSStat (1086)): PROC fs fs_xia = $012FD16D File system type (FSStat (1086)): XIA F_GetFd = 1 FCntl (1077) command: Get close-on-exec ag F_GetFl = 3 FCntl (1077) command: Get ledescriptor ags F_GetLk = 5 FCntl (1077) command: Get lock F_GetOwn = 9 FCntl (1077) command: get owner of ledescriptor events F_OK = 0 Access (1058) call test: le exists. F_SetFd = 2 FCntl (1077) command: Set close-on-exec ag 1015
F_SetFl = 4 FCntl (1077) command: Set ledescriptor ags F_SetLk = 6 FCntl (1077) command: Set lock F_SetLkW = 7 FCntl (1077) command: Test lock F_SetOwn = 8 FCntl (1077) command: Set owner of ledescriptor events HUPCL = $0000400
ICANON = $0000002
ICRNL = $0000100
IEXTEN = $0008000
IGNBRK = $0000001
IGNCR = $0000080
IGNPAR = $0000004
IMAXBEL = $0002000
INLCR = $0000040
INPCK = $0000010
IOCtl_TCGETS = $5401 IOCTL call number: get Terminal Control settings ISIG = $0000001
IUCLC = $0000200
IXANY = $0000800
IXOFF = $0001000
IXON = $0000400
LOCK_EX = 2 FLock (1083) Exclusive lock LOCK_NB = 4 FLock (1083) Non-blocking operation LOCK_SH = 1 FLock (1083) Shared lock LOCK_UN = 8 FLock (1083) unlock MAP_ANONYMOUS = $20 MMap (1103) map type: Dont use a le MAP_DENYWRITE = $800 MMap (1103) option: Ignored. MAP_EXECUTABLE = $1000 MMap (1103) option: Ignored. MAP_FIXED = $10 MMap (1103) map type: Interpret addr exactly MAP_GROWSDOWN = $100 MMap (1103) option: Memory grows downward (like a stack) MAP_LOCKED = $2000 MMap (1103) option: lock the pages in memory. 1017
MAP_NORESERVE = $4000 MMap (1103) option: Do not reserve swap pages for this memory. MAP_PRIVATE = 2 MMap (1103) map type: Changes are private MAP_SHARED = $1 MMap (1103) map type: Share changes MAP_TYPE = $f MMap (1103) map type: Bitmask for type of mapping MINSIGSTKSZ = 2048
NCC = 8 Number of control characters in termio (1054) record. NCCS = 32 Number of control characters in termios (1054) record. NL0 = $0000000
NL1 = $0000100
NLDLY = $0000100
NOFLSH = $0000080
OCRNL = $0000008
OFDEL = $0000080
OFILL = $0000040
OLCUC = $0000002
ONLCR = $0000004
1018
ONLRET = $0000020
ONOCR = $0000010
Open_Accmode = 3 Bitmask to determine access mode in open ags. Open_Append = 2 shl 9 File open mode: Append to le Open_Creat = 1 shl 6 File open mode: Create if le does not yet exist. Open_Direct = 4 shl 12 File open mode: Minimize caching effects Open_Directory = 2 shl 15 File open mode: File must be directory. Open_Excl = 2 shl 6 File open mode: Open exclusively Open_LargeFile = 1 shl 15 File open mode: Open for 64-bit I/O Open_NDelay = Open_NonBlock File open mode: Alias for Open_NonBlock (1019) Open_NoCtty = 4 shl 6 File open mode: No TTY control. Open_NoFollow = 4 shl 15 File open mode: Fail if le is symbolic link. Open_NonBlock = 4 shl 9 File open mode: Open in non-blocking mode Open_RdOnly = 0 1019
File open mode: Read only Open_RdWr = 2 File open mode: Read/Write Open_Sync = 1 shl 12 File open mode: Write to disc at once Open_Trunc = 1 shl 9 File open mode: Truncate le to length 0 Open_WrOnly = 1 File open mode: Write only OPOST = $0000001
PARENB = $0000100
PARMRK = $0000008
PARODD = $0000200
PENDIN = $0004000
Prio_PGrp = 1 Get/set process group priority Prio_Process = 0 Get/Set process priority Prio_User = 2 Get/set user priority PROT_EXEC = $4 MMap (1103) memory access: page can be executed PROT_NONE = $0 MMap (1103) memory access: page can not be accessed 1020
PROT_READ = $1 MMap (1103) memory access: page can be read PROT_WRITE = $2 MMap (1103) memory access: page can be written P_IN = 1 Input le descriptor of pipe pair. P_OUT = 2 Output le descriptor of pipe pair. R_OK = 4 Access (1058) call test: read allowed SA_INTERRUPT = $20000000 Sigaction options: ? SA_NOCLDSTOP = 1 Sigaction options: Do not receive notication when child processes stop SA_NOMASK = $40000000 Sigaction options: Do not prevent the signal from being received when it is handled. SA_ONESHOT = $80000000 Sigaction options: Restore the signal action to the default state. SA_ONSTACK = SA_STACK Socket option SA_RESTART = $10000000 Sigaction options: Provide behaviour compatible with BSD signal semantics SA_SHIRQ = $04000000 Sigaction options: ? SA_STACK = $08000000 Sigaction options: Call the signal handler on an alternate signal stack. 1021
Seek_Cur = 1 Seek option: Set position relative to current position. Seek_End = 2 Seek option: Set position relative to end of le. Seek_set = 0 Seek option: Set absolute position. SIGABRT = 6 Signal: ABRT (Abort) SIGALRM = 14 Signal: ALRM (Alarm clock) SIGBUS = 7 Signal: BUS (bus error) SIGCHLD = 17 Signal: CHLD (child status changed) SIGCONT = 18 Signal: CONT (Continue) SIGFPE = 8 Signal: FPE (Floating point error) SIGHUP = 1 Signal: HUP (Hangup) SIGILL = 4 Signal: ILL (Illegal instruction) SIGINT = 2 Signal: INT (Interrupt) SIGIO = 29 Signal: IO (I/O operation possible) 1022
SIGIOT = 6 Signal: IOT (IOT trap) SIGKILL = 9 Signal: KILL (unblockable) SIGPIPE = 13 Signal: PIPE (Broken pipe SIGPOLL = SIGIO Signal: POLL (Pollable event) SIGPROF = 27 Signal: PROF (Proling alarm) SIGPWR = 30 Signal: PWR (power failure restart) SIGQUIT = 3 Signal: QUIT SIGSEGV = 11 Signal: SEGV (Segmentation violation) SIGSTKFLT = 16 Signal: STKFLT (Stack Fault) SIGSTKSZ = 8192 Signal Stack size error SIGSTOP = 19 Signal: STOP (Stop, unblockable) SIGTerm = 15 Signal: TERM (Terminate) SIGTRAP = 5 Signal: TRAP (Trace trap) 1023
SIGTSTP = 20 Signal: TSTP (keyboard stop) SIGTTIN = 21 Signal: TTIN (Terminal input, background) SIGTTOU = 22 Signal: TTOU (Terminal output, background) SIGUNUSED = 31 Signal: Unused SIGURG = 23 Signal: URG (Socket urgent condition) SIGUSR1 = 10 Signal: USR1 (User-dened signal 1) SIGUSR2 = 12 Signal: USR2 (User-dened signal 2) SIGVTALRM = 26 Signal: VTALRM (Virtual alarm clock) SIGWINCH = 28 Signal: WINCH (Window/Terminal size change) SIGXCPU = 24 Signal: XCPU (CPU limit exceeded) SIGXFSZ = 25 Signal: XFSZ (File size limit exceeded) SIG_BLOCK = 0 Sigprocmask ags: Add signals to the set of blocked signals. SIG_DFL = 0 Signal handler: Default signal handler 1024
SIG_ERR = -1 Signal handler: error SIG_IGN = 1 Signal handler: Ignore signal SIG_SETMASK = 2 Sigprocmask ags: Set of blocked signals is given. SIG_UNBLOCK = 1 Sigprocmask ags: Remove signals from the set set of blocked signals. SI_PAD_SIZE = 128 / (longint) - 3 Signal information record pad bytes size. Do not use. SS_DISABLE = 2 Socket options SS_ONSTACK = 1 Socket options STAT_IFBLK = $6000 File (stat (1053) record) mode: Block device STAT_IFCHR = $2000 File (stat (1053) record) mode: Character device STAT_IFDIR = $4000 File (stat (1053) record) mode: Directory STAT_IFIFO = $1000 File (stat (1053) record) mode: FIFO STAT_IFLNK = $a000 File (stat (1053) record) mode: Link STAT_IFMT = $f000 File (stat (1053) record) mode: File type bit mask 1025
STAT_IFREG = $8000 File (stat (1053) record) mode: Regular le STAT_IFSOCK = $c000 File (stat (1053) record) mode: Socket STAT_IRGRP = STAT_IROTH shl 3 File (stat (1053) record) mode: Group read permission STAT_IROTH = $4 File (stat (1053) record) mode: Other read permission STAT_IRUSR = STAT_IROTH shl 6 File (stat (1053) record) mode: Owner read permission STAT_IRWXG = STAT_IRWXO shl 3 File (stat (1053) record) mode: Group permission bits mask STAT_IRWXO = $7 File (stat (1053) record) mode: Other permission bits mask STAT_IRWXU = STAT_IRWXO shl 6 File (stat (1053) record) mode: Owner permission bits mask STAT_ISGID = $0400 File (stat (1053) record) mode: GID bit set STAT_ISUID = $0800 File (stat (1053) record) mode: UID bit set STAT_ISVTX = $0200 File (stat (1053) record) mode: Sticky bit set STAT_IWGRP = STAT_IWOTH shl 3 File (stat (1053) record) mode: Group write permission STAT_IWOTH = $2 File (stat (1053) record) mode: Other write permission 1026
STAT_IWUSR = STAT_IWOTH shl 6 File (stat (1053) record) mode: Owner write permission STAT_IXGRP = STAT_IXOTH shl 3 File (stat (1053) record) mode: Others execute permission STAT_IXOTH = $1 File (stat (1053) record) mode: Others execute permission STAT_IXUSR = STAT_IXOTH shl 6 File (stat (1053) record) mode: Others execute permission syscall_nr_access = 33
syscall_nr_acct = 51
syscall_nr_adjtimex = 124
syscall_nr_afs_syscall = 137
syscall_nr_alarm = 27
syscall_nr_bdflush = 134
syscall_nr_break = 17
syscall_nr_brk = 45
syscall_nr_chdir = 12
syscall_nr_chmod = 15
syscall_nr_chown = 16
syscall_nr_chroot = 61
syscall_nr_clone = 120
1027
syscall_nr_close = 6
syscall_nr_creat = 8
syscall_nr_create_module = 127
syscall_nr_delete_module = 129
syscall_nr_dup = 41
syscall_nr_dup2 = 63
syscall_nr_execve = 11
syscall_nr_exit = 1
syscall_nr_fchdir = 133
syscall_nr_fchmod = 94
syscall_nr_fchown = 95
syscall_nr_fcntl = 55
syscall_nr_fdatasync = 148
syscall_nr_flock = 143
syscall_nr_fork = 2
syscall_nr_fstat = 108
syscall_nr_fstatfs = 100
syscall_nr_fsync = 118
syscall_nr_ftime = 35
1028
syscall_nr_ftruncate = 93
syscall_nr_getdents = 141
syscall_nr_getegid = 50
syscall_nr_geteuid = 49
syscall_nr_getgid = 47
syscall_nr_getgroups = 80
syscall_nr_getitimer = 105
syscall_nr_getpgid = 132
syscall_nr_getpgrp = 65
syscall_nr_getpid = 20
syscall_nr_getppid = 64
syscall_nr_getpriority = 96
syscall_nr_getresuid = 165
syscall_nr_getrlimit = 76
syscall_nr_getrusage = 77
syscall_nr_getsid = 147
syscall_nr_gettimeofday = 78
syscall_nr_getuid = 24
syscall_nr_get_kernel_syms = 130
1029
syscall_nr_gtty = 32
syscall_nr_idle = 112
syscall_nr_init_module = 128
syscall_nr_ioctl = 54
syscall_nr_ioperm = 101
syscall_nr_iopl = 110
syscall_nr_ipc = 117
syscall_nr_kill = 37
syscall_nr_link = 9
syscall_nr_lock = 53
syscall_nr_lseek = 19
syscall_nr_lstat = 107
syscall_nr_mkdir = 39
syscall_nr_mknod = 14
syscall_nr_mlock = 150
syscall_nr_mlockall = 152
syscall_nr_mmap = 90
syscall_nr_modify_ldt = 123
syscall_nr_mount = 21
1030
syscall_nr_mprotect = 125
syscall_nr_mpx = 56
syscall_nr_mremap = 163
syscall_nr_msync = 144
syscall_nr_munlock = 151
syscall_nr_munlockall = 153
syscall_nr_munmap = 91
syscall_nr_nanosleep = 162
syscall_nr_nice = 34
syscall_nr_oldfstat = 28
syscall_nr_oldlstat = 84
syscall_nr_oldolduname = 59
syscall_nr_oldstat = 18
syscall_nr_olduname = 109
syscall_nr_open = 5
syscall_nr_pause = 29
syscall_nr_personality = 136
syscall_nr_phys = 52
syscall_nr_pipe = 42
1031
syscall_nr_poll = 168
syscall_nr_prof = 44
syscall_nr_profil = 98
syscall_nr_ptrace = 26
syscall_nr_query_module = 167
syscall_nr_quotactl = 131
syscall_nr_read = 3
syscall_nr_readdir = 89
syscall_nr_readlink = 85
syscall_nr_readv = 145
syscall_nr_reboot = 88
syscall_nr_rename = 38
syscall_nr_rmdir = 40
syscall_nr_sched_getparam = 155
syscall_nr_sched_getscheduler = 157
syscall_nr_sched_get_priority_max = 159
syscall_nr_sched_get_priority_min = 160
syscall_nr_sched_rr_get_interval = 161
syscall_nr_sched_setparam = 154
1032
syscall_nr_sched_setscheduler = 156
syscall_nr_sched_yield = 158
syscall_nr_select = 82
syscall_nr_setdomainname = 121
syscall_nr_setfsgid = 139
syscall_nr_setfsuid = 138
syscall_nr_setgid = 46
syscall_nr_setgroups = 81
syscall_nr_sethostname = 74
syscall_nr_setitimer = 104
syscall_nr_setpgid = 57
syscall_nr_setpriority = 97
syscall_nr_setregid = 71
syscall_nr_setresuid = 164
syscall_nr_setreuid = 70
syscall_nr_setrlimit = 75
syscall_nr_setsid = 66
syscall_nr_settimeofday = 79
syscall_nr_setuid = 23
1033
syscall_nr_setup = 0
syscall_nr_sgetmask = 68
syscall_nr_sigaction = 67
syscall_nr_sigaltstack = 186
syscall_nr_signal = 48
syscall_nr_sigpending = 73
syscall_nr_sigprocmask = 126
syscall_nr_sigreturn = 119
syscall_nr_sigsuspend = 72
syscall_nr_socketcall = 102
syscall_nr_ssetmask = 69
syscall_nr_stat = 106
syscall_nr_statfs = 99
syscall_nr_stime = 25
syscall_nr_stty = 31
syscall_nr_swapoff = 115
syscall_nr_swapon = 87
syscall_nr_symlink = 83
syscall_nr_sync = 36
1034
syscall_nr_sysfs = 135
syscall_nr_sysinfo = 116
syscall_nr_syslog = 103
syscall_nr_time = 13
syscall_nr_times = 43
syscall_nr_truncate = 92
syscall_nr_ulimit = 58
syscall_nr_umask = 60
syscall_nr_umount = 22
syscall_nr_uname = 122
syscall_nr_unlink = 10
syscall_nr_uselib = 86
syscall_nr_ustat = 62
syscall_nr_utime = 30
syscall_nr_vhangup = 111
syscall_nr_vm86 = 166
syscall_nr_vm86old = 113
syscall_nr_wait4 = 114
syscall_nr_waitpid = 7
1035
syscall_nr_write = 4
syscall_nr_writev = 146
syscall_nr__llseek = 140
syscall_nr__newselect = 142
syscall_nr__sysctl = 149
Sys_E2BIG = 7
Sys_EACCES = 13
Sys_EADDRINUSE = 98
Sys_EADDRNOTAVAIL = 99
Sys_EADV = 68
Sys_EAFNOSUPPORT = 97
Sys_EAGAIN = 11
Sys_EALREADY = 114
Sys_EBADE = 52
Sys_EBADF = 9
Sys_EBADFD = 77
Sys_EBADMSG = 74
Sys_EBADR = 53
Sys_EBADRQC = 56
1036
Sys_EBADSLT = 57
Sys_EBFONT = 59
Sys_EBUSY = 16
Sys_ECHILD = 10
Sys_ECHRNG = 44
Sys_ECOMM = 70
Sys_ECONNABORTED = 103
Sys_ECONNREFUSED = 111
Sys_ECONNRESET = 104
Sys_EDEADLK = 35
Sys_EDEADLOCK = 58
Sys_EDESTADDRREQ = 89
Sys_EDOM = 33
Sys_EDOTDOT = 73
Sys_EDQUOT = 122
Sys_EEXIST = 17
Sys_EFAULT = 14
Sys_EFBIG = 27
Sys_EHOSTDOWN = 112
1037
Sys_EHOSTUNREACH = 113
Sys_EIDRM = 43
Sys_EILSEQ = 84
Sys_EINPROGRESS = 115
Sys_EINTR = 4
Sys_EINVAL = 22
Sys_EIO = 5
Sys_EISCONN = 106
Sys_EISDIR = 21
Sys_EISNAM = 120
Sys_EL2HLT = 51
Sys_EL2NSYNC = 45
Sys_EL3HLT = 46
Sys_EL3RST = 47
Sys_ELIBACC = 79
Sys_ELIBBAD = 80
Sys_ELIBEXEC = 83
Sys_ELIBMAX = 82
Sys_ELIBSCN = 81
1038
Sys_ELNRNG = 48
Sys_ELOOP = 40
Sys_EMFILE = 24
Sys_EMLINK = 31
Sys_EMSGSIZE = 90
Sys_EMULTIHOP = 72
Sys_ENAMETOOLONG = 36
Sys_ENAVAIL = 119
Sys_ENETDOWN = 100
Sys_ENETRESET = 102
Sys_ENETUNREACH = 101
Sys_ENFILE = 23
Sys_ENOANO = 55
Sys_ENOBUFS = 105
Sys_ENOCSI = 50
Sys_ENODATA = 61
Sys_ENODEV = 19
Sys_ENOENT = 2
Sys_ENOEXEC = 8
1039
Sys_ENOLCK = 37
Sys_ENOLINK = 67
Sys_ENOMEM = 12
Sys_ENOMSG = 42
Sys_ENONET = 64
Sys_ENOPKG = 65
Sys_ENOPROTOOPT = 92
Sys_ENOSPC = 28
Sys_ENOSR = 63
Sys_ENOSTR = 60
Sys_ENOSYS = 38
Sys_ENOTBLK = 15
Sys_ENOTCONN = 107
Sys_ENOTDIR = 20
Sys_ENOTEMPTY = 39
Sys_ENOTNAM = 118
Sys_ENOTSOCK = 88
Sys_ENOTTY = 25
Sys_ENOTUNIQ = 76
1040
Sys_ENXIO = 6
Sys_EOPNOTSUPP = 95
Sys_EOVERFLOW = 75
Sys_EPERM = 1
Sys_EPFNOSUPPORT = 96
Sys_EPIPE = 32
Sys_EPROTO = 71
Sys_EPROTONOSUPPORT = 93
Sys_EPROTOTYPE = 91
Sys_ERANGE = 34
Sys_EREMCHG = 78
Sys_EREMOTE = 66
Sys_EREMOTEIO = 121
Sys_ERESTART = 85
Sys_EROFS = 30
Sys_ERROR_MAX = $fff
Sys_ESHUTDOWN = 108
Sys_ESOCKTNOSUPPORT = 94
Sys_ESPIPE = 29
1041
Sys_ESRCH = 3
Sys_ESRMNT = 69
Sys_ESTALE = 116
Sys_ESTRPIPE = 86
Sys_ETIME = 62
Sys_ETIMEDOUT = 110
Sys_ETOOMANYREFS = 109
Sys_ETXTBSY = 26
Sys_EUCLEAN = 117
Sys_EUNATCH = 49
Sys_EUSERS = 87
Sys_EWOULDBLOCK = Sys_EAGAIN
Sys_EXDEV = 18
Sys_EXFULL = 54
TAB0 = $0000000
TAB1 = $0000800
TAB2 = $0001000
TAB3 = $0001800
TABDLY = $0001800
1042
TCFLSH = $540B
TCGETA = $5405
TCGETS = $5401
TCIFLUSH = 0
TCIOFF = 2
TCIOFLUSH = 2
TCION = 3
TCOFLUSH = 1
TCOOFF = 0
TCOON = 1
TCSADRAIN = 1
TCSAFLUSH = 2
TCSANOW = 0
TCSBRK = $5409
TCSBRKP = $5425
TCSETA = $5406
TCSETAF = $5408
TCSETAW = $5407
TCSETS = $5402
1043
TCSETSF = $5404
TCSETSW = $5403
TCXONC = $540A
TIOCCONS = $541D
TIOCEXCL = $540C
TIOCGETD = $5424
TIOCGICOUNT = $545D
TIOCGLCKTRMIOS = $5456
TIOCGPGRP = $540F
TIOCGSERIAL = $541E
TIOCGSOFTCAR = $5419
TIOCGWINSZ = $5413
TIOCINQ = FIONREAD
TIOCLINUX = $541C
TIOCMBIC = $5417
TIOCMBIS = $5416
TIOCMGET = $5415
TIOCMIWAIT = $545C
TIOCMSET = $5418
1044
TIOCM_CAR = $040
TIOCM_CD = TIOCM_CAR
TIOCM_CTS = $020
TIOCM_DSR = $100
TIOCM_DTR = $002
TIOCM_LE = $001
TIOCM_OUT1 = $2000
TIOCM_OUT2 = $4000
TIOCM_RI = TIOCM_RNG
TIOCM_RNG = $080
TIOCM_RTS = $004
TIOCM_SR = $010
TIOCM_ST = $008
TIOCNOTTY = $5422
TIOCNXCL = $540D
TIOCOUTQ = $5411
TIOCPKT = $5420
TIOCPKT_DATA = 0
TIOCPKT_DOSTOP = 32
1045
TIOCPKT_FLUSHREAD = 1
TIOCPKT_FLUSHWRITE = 2
TIOCPKT_NOSTOP = 16
TIOCPKT_START = 8
TIOCPKT_STOP = 4
TIOCSCTTY = $540E
TIOCSERCONFIG = $5453
TIOCSERGETLSR = $5459
TIOCSERGETMULTI = $545A
TIOCSERGSTRUCT = $5458
TIOCSERGWILD = $5454
TIOCSERSETMULTI = $545B
TIOCSERSWILD = $5455
TIOCSETD = $5423
TIOCSLCKTRMIOS = $5457
TIOCSPGRP = $5410
TIOCSSERIAL = $541F
TIOCSSOFTCAR = $541A
TIOCSTI = $5412
1046
TIOCSWINSZ = $5414
TIOCTTYGSTRUCT = $5426
TOSTOP = $0000100
VDISCARD = 13
VEOF = 4
VEOL = 11
VEOL2 = 16
VERASE = 2
VINTR = 0
VKILL = 3
VLNEXT = 15
VMIN = 6
VQUIT = 1
VREPRINT = 12
VSTART = 8
VSTOP = 9
VSUSP = 10
VSWTC = 7
VT0 = $0000000
1047
VT1 = $0004000 VTDLY = $0004000 VTIME = 5 VWERASE = 14 Wait_Any = -1 WaitPID (1131): Wait on any process Wait_Clone = $80000000 WaitPID (1131): Wait on clone processes only. Wait_MyPGRP = 0 WaitPID (1131): Wait processes from current process group Wait_NoHang = 1 WaitPID (1131): Do not wait Wait_UnTraced = 2 WaitPID (1131): Also report stopped but untraced processes WNOHANG = $1 Waitpid (1131) option: Do not wait for processes to terminate. WUNTRACED = $2 Waitpid (1131) option: Also report children wich were stopped but not yet reported W_OK = 2 Access (1058) call test: write allowed XCASE = $0000004 XTABS = $0001800 X_OK = 1 Access (1058) call test: execute allowed __WCLONE = $80000000 Waitpid option: Wait for clone children only 1048
31.11.2
Types
ComStr = string Command-line string type. dev_t = Word Device descriptor type dirent = packed record ino : LongInt; off : LongInt; reclen : Word; name : Array[0..255] of Char; end
Record used in the ReadDir (1110) function to return les in a directory. DirStr = string Filename directory part string type. ExtStr = string Filename extension part string type. fdSet = Array[0..7] of LongInt Array containing le descriptor bitmask for the Select (1112) call. NameStr = string Filename name part string type. PathStr = string Filename path part string type. PDir = ^TDir Pointer to TDir (1054) record pdirent = ^dirent Pointer to Dirent (1049) record. pfdset = ^fdSet Pointer to FDSet (1049) array. 1049
pfpstate = ^tfpstate Pointer to tfpstate (1055) record. pglob = ^tglob Pointer to TGlob (1055) record. PSigActionRec = ^SigActionRec Pointer to SigActionRec (1051) record. PSigAltStack = ^SigAltStack Pointer to SigAltStack (1051) record PSigContextRec = ^SigContextRec Pointer to SigContextRec (1052) record PSignalHandler = ^SignalHandler Pointer to SignalHandler (1052) type. PSignalRestorer = ^SignalRestorer Pointer to SignalRestorer (1052) type PSigSet = ^SigSet Pointer to signal set. pstack_t = ^stack_t Pointer to stack_t (1052) record PStat = ^Stat Pointer to Stat (1053) record. PStatFS = ^Statfs Pointer to StatFS (1053) record. PSysCallRegs = ^SysCallRegs Pointer to SysCallRegs (1053) record. PSysInfo = ^TSysinfo Pointer to TSysInfo (1056) record. 1050
ptimeval = ^timeval Pointer to TTimeVal (1056) record ptimezone = ^timezone Pointer to TimeZone (1055) record. PUTimeBuf = ^UTimeBuf Pointer to UTimeBuf (1057) record PUTSName = ^utsname Pointer to UTSName (1057) record. SigActionRec = packed record Handler : record end; Sa_Mask : SigSet; Sa_Flags : LongInt; Sa_restorer : SignalRestorer; end
Record used in SigAction (1115) call. SigAltStack = record ss_sp : pointer; ss_flags : LongInt; ss_size : Size_T; end
Alternate stack registers record SigContextRec = record gs : Word; __gsh : Word; fs : Word; __fsh : Word; es : Word; __esh : Word; ds : Word; __dsh : Word; edi : Cardinal; esi : Cardinal; ebp : Cardinal; esp : Cardinal; ebx : Cardinal; edx : Cardinal; ecx : Cardinal; 1051
eax : Cardinal; trapno : Cardinal; err : Cardinal; eip : Cardinal; cs : Word; __csh : Word; eflags : Cardinal; esp_at_signal : Cardinal; ss : Word; __ssh : Word; fpstate : pfpstate; oldmask : Cardinal; cr2 : Cardinal; end
The above records contain information about the processor state and process state at the moment a signal is sent to your program. SignalHandler = procedure(Sig: LongInt) of object Function prototype for the Signal (1117) call. SignalRestorer = procedure of object Signal restorer function prototype SigSet = LongInt Signal set type Size_T = Cardinal Size type stack_t = SigAltStack Alias for SigAltStack (1051) type Stat = packed record dev : dev_t; pad1 : Word; ino : LongInt; mode : Word; nlink : Word; uid : Word; gid : Word; rdev : dev_t; pad2 : Word; size : LongInt; blksize : LongInt; blocks : LongInt; 1052
Record describing an inode (le) in the fstat (1087) call. Statfs = packed record fstype : LongInt; bsize : LongInt; blocks : LongInt; bfree : LongInt; bavail : LongInt; files : LongInt; ffree : LongInt; fsid : LongInt; namelen : LongInt; spare : Array[0..6] of LongInt; end
Record describing a le system in the fsstat (1086) call. SysCallRegs = record reg1 : LongInt; reg2 : LongInt; reg3 : LongInt; reg4 : LongInt; reg5 : LongInt; reg6 : LongInt; end
Register describing system calls. TCloneFunc = function(args: pointer) : LongInt of object Clone function prototype. TDir = packed record fd : Integer; loc : LongInt; size : Integer; buf : pdirent; nextoff : LongInt; dd_max : Integer; lock : pointer; end
1053
Record used in OpenDir (1107) and ReadDir (1110) calls TDirEnt = dirent Alias for DirEnt (1049) record Termio = packed record c_iflag : Word; c_oflag : Word; c_cflag : Word; c_lflag : Word; c_line : Word; c_cc : Array[0..NCC-1] of Char; end
Terminal I/O description record (small) Termios = record c_iflag : Cardinal; c_oflag : Cardinal; c_cflag : Cardinal; c_lflag : Cardinal; c_line : Char; c_cc : Array[0..NCCS-1] of Byte; c_ispeed : LongInt; c_ospeed : LongInt; end
Terminal I/O description record TFDSet = fdSet Alias for FDSet (1049) type. tfpreg = record significand : Array[0..3] of Word; exponent : Word; end
Record describing oating point register in signal handler. tfpstate = record cw : Cardinal; sw : Cardinal; tag : Cardinal; ipoff : Cardinal; cssel : Cardinal; dataoff : Cardinal; datasel : Cardinal; 1054
Record describing oating point unit in signal handler. tglob = record name : pchar; next : pglob; end
Record containing one entry in the result of Glob (1097) timespec = packed record tv_sec : LongInt; tv_nsec : LongInt; end
Time interval for the NanoSleep (1105) function. timeval = packed record sec : LongInt; usec : LongInt; end
Record specifying a time inteval. timezone = packed record minuteswest : LongInt; dsttime : LongInt; end
Record describing a timezone tmmapargs = record address : LongInt; size : LongInt; prot : LongInt; flags : LongInt; fd : LongInt; offset : LongInt; end
Array describing a pipe pair of ledescriptors. TSigAction = procedure(Sig: LongInt;SigContext: SigContextRec) of object Function prototype for SigAction (1115) call. TStat = Stat Alias for Stat (1053) record. TStatFS = Statfs Alias for StatFS (1053) type. TSysCallRegs = SysCallRegs Alias for SysCallRegs (1053) record TSysinfo = packed record uptime : LongInt; loads : Array[1..3] of LongInt; totalram : LongInt; freeram : LongInt; sharedram : LongInt; bufferram : LongInt; totalswap : LongInt; freeswap : LongInt; procs : Integer; s : string; end
Record with system information, used by the SysInfo (1122) call. TTermio = Termio Alias for TermIO (1054) record TTermios = Termios Alias for Termios (1054) record. TTimeVal = timeval Alias for TimeVal (1055) record. TTimeZone = timezone Alias for TimeZone (1055) record. TUTimeBuf = UTimeBuf 1056
Alias for UTimBuf (1057) record. TUTSName = utsname Alias for UTSName (1057) record. TWinSize = winsize Alias for WinSize (1057) record. UTimBuf = packed record actime : LongInt; modtime : LongInt; end
Record used in Utime (1130) to set le access and modicaton times. UTimeBuf = UTimBuf Alias for UTimBuf (1057) record. utsname = packed record sysname : Array[0..64] of Char; nodename : Array[0..64] of Char; release : Array[0..64] of Char; version : Array[0..64] of Char; machine : Array[0..64] of Char; domainname : Array[0..64] of Char; end
The elements of this record are null-terminated C style strings, you cannot access them directly. winsize = packed record ws_row : Word; ws_col : Word; ws_xpixel : Word; ws_ypixel : Word; end
31.11.3
Variables
Linuxerror is the variable in which the procedures in the linux unit report errors. tzdaylight : Boolean Indicates whether daylight savings time is active. tzname : Array[boolean] of pchar Timezone name. tzseconds : LongInt Seconds west of GMT
31.12
31.12.1
Synopsis: Check le access Declaration: function Access(Path: PathStr;mode: Integer) : Boolean Visibility: default Description: Access tests users access rights on the specied le. Mode is a mask existing of one or more of the following: R_OKUser has read rights. W_OKUser has write rights. X_OKUser has execute rights. F_OKFile exists. The test is done with the real user ID, instead of the effective user ID. If access is denied, or an error occurred, False is returned. Errors: LinuxError is used to report errors: sys_eaccessThe requested access is denied, either to the le or one of the directories in its path. sys_einvalMode was incorrect. sys_enoentA directory component in Path doesnt exist or is a dangling symbolic link. sys_enotdirA directory component in Path is not a directory. sys_enomemInsufcient kernel memory. sys_eloopPath has a circular symbolic link. See also: Chown (1065), Chmod (1063) Listing: ./olinuxex/ex26.pp
1058
Program Example26 ; { Program t o demonstrate t h e Access f u n c t i o n . } Uses o l d l i n u x ; begin i f Access ( / e t c / passwd ,W_OK) then begin W r i t e l n ( B e t t e r check your system . ) ; W r i t e l n ( I can w r i t e t o t h e / e t c / passwd f i l e ! ) ; end ; end .
31.12.2
Alarm
Synopsis: Schedule an alarm signal to be delivered Declaration: function Alarm(Sec: LongInt) : LongInt Visibility: default Description: Alarm schedules an alarm signal to be delivered to your process in Sec seconds. When Sec seconds have elapsed, Linux will send a SIGALRM signal to the current process. If Sec is zero, then no new alarm will be set. Whatever the value of Sec, any previous alarm is cancelled. The function returns the number of seconds till the previously scheduled alarm was due to be delivered, or zero if there was none. See also: SigAction (1115) Listing: ./olinuxex/ex59.pp
Program Example59 ; { Program t o demonstrate t h e Alarm f u n c t i o n . } Uses o l d l i n u x ; Procedure AlarmHandler ( Sig : l o n g i n t ) ; cdecl ; begin W r i t e l n ( Got t o alarm h a n d l e r ) ; end ; begin W r i t e l n ( S e t t i n g alarm h a n d l e r ) ; S i g n a l (SIGALRM, @AlarmHandler ) ; W r i t e l n ( Scheduling Alarm i n 1 0 seconds ) ; Alarm ( 1 0 ) ; W r i t e l n ( Pausing ) ; Pause ; W r i t e l n ( Pause r e t u r n e d ) ; end .
1059
31.12.3
AssignPipe
Synopsis: Create a set of pipe le handlers Declaration: function AssignPipe(var pipe_in: LongInt;var pipe_out: LongInt) : Boolean function AssignPipe(var pipe_in: text;var pipe_out: text) : Boolean function AssignPipe(var pipe_in: File;var pipe_out: File) : Boolean Visibility: default Description: AssignePipe creates a pipe, i.e. two le objects, one for input, one for output. What is written to Pipe_out, can be read from Pipe_in. This call is overloaded. The in and out pipe can take three forms: an typed or untyped le, a text le or a le descriptor. If a text le is passed then reading and writing from/to the pipe can be done through the usual Readln(Pipe_in,...) and Writeln(Pipe_out,...) procedures. The function returns True if everything went succesfully, False otherwise. Errors: In case the function fails and returns False, LinuxError is used to report errors: sys_emleToo many le descriptors for this process. sys_enleThe system le table is full. See also: POpen (1109), MkFifo (1103) Listing: ./olinuxex/ex36.pp
Program Example36 ; { Program t o demonstrate t h e AssignPipe f u n c t i o n . } Uses o l d l i n u x ; Var p i p i , p i p o : Text ; s : String ; begin W r i t e l n ( A s s i g n i n g Pipes . ) ; I f Not a s s i g n p i p e ( p i p i , p i p o ) then Writeln ( Error assigning pipes ! , LinuxError ) ; W r i t e l n ( W r i t i n g t o pipe , and f l u s h i n g . ) ; W r i t e l n ( pipo , T h i s i s a t e x t s t r i n g ) ; c l o s e ( p i p o ) ; W r i t e l n ( Reading from p i p e . ) ; While not eof ( p i p i ) do begin Readln ( p i p i , s ) ; W r i t e l n ( Read from p i p e : , s ) ; end ; close ( p i p i ) ; w r i t e l n ( Closed p i p e s . ) ; writeln end .
1060
31.12.4
AssignStream
Synopsis: Assign stream for in and output to a program Declaration: function AssignStream(var StreamIn: text;var Streamout: text; const Prog: string) : LongInt function AssignStream(var StreamIn: Text;var StreamOut: Text; var StreamErr: Text;const prog: string) : LongInt Visibility: default Description: AssignStream creates a 2 or 3 pipes, i.e. two (or three) le objects, one for input, one for output,(and one for standard error) the other ends of these pipes are connected to standard input and output (and standard error) of Prog. Prog is the name of a program (including path) with options, which will be executed. What is written to StreamOut, will go to the standard input of Prog. Whatever is written by Prog to its standard output can be read from StreamIn. Whatever is written by Prog to its standard error read from StreamErr, if present. Reading and writing happens through the usual Readln(StreamIn,...) and Writeln (StreamOut,...) procedures. Remark: You should not use Reset or Rewrite on a le opened with POpen. This will close the le before re-opening it again, thereby closing the connection with the program. The function returns the process ID of the spawned process, or -1 in case of error. Errors: In case of error (return value -1) LinuxError is used to report errors: sys_emleToo many le descriptors for this process. sys_enleThe system le table is full. Other errors include the ones by the fork and exec programs See also: AssignPipe (1060), POpen (1109) Listing: ./olinuxex/ex38.pp
Program Example38 ; { Program t o demonstrate t h e AssignStream f u n c t i o n . } Uses o l d l i n u x ; Var Si , So : Text ; S : String ; i : longint ; begin i f not ( paramstr ( 1 ) = son ) then begin W r i t e l n ( C a l l i n g son ) ; Assignstream ( Si , So , . / ex38 son ) ; i f l i n u x e r r o r < >0 then begin w r i t e l n ( AssignStream f a i l e d ! ) ; halt ( 1 ) ; end ; W r i t e l n ( Speaking t o son ) ; For i : = 1 to 1 0 do
1061
begin w r i t e l n ( so , H e l l o son ! ) ; i f i o r e s u l t < >0 then w r i t e l n ( Can t speak t o son . . . ) ; end ; For i : = 1 to 3 do w r i t e l n ( so , H e l l o chap ! ) ; c l o s e ( so ) ; while not eof ( s i ) do begin readln ( s i , s ) ; w r i t e l n ( F a t h e r : Son s a i d : ,S ) ; end ; W r i t e l n ( Stopped c o n v e r s a t i o n ) ; Close ( S i ) ; W r i t e l n ( Put down phone ) ; end Else begin W r i t e l n ( T h i s i s t h e son ) ; While not eof ( i n p u t ) do begin readln ( s ) ; i f pos ( H e l l o son ! ,S) < >0 then W r i t e l n ( H e l l o Dad ! ) else w r i t e l n ( Who are you ? ) ; end ; close ( output ) ; end end .
31.12.5
Basename
Synopsis: Return basename of a le Declaration: function Basename(const path: PathStr;const suf: PathStr) : PathStr Visibility: default Description: Returns the lename part of Path, stripping off Suf if it exists. The lename part is the whole name if Path contains no slash, or the part of Path after the last slash. The last character of the result is not a slash, unless the directory is the root directory. Errors: None. See also: DirName (1069), FExpand (1082) Listing: ./olinuxex/ex48.pp
Program Example48 ; { Program t o demonstrate t h e BaseName f u n c t i o n . } Uses o l d l i n u x ; Var S : S t r i n g ; begin S: = FExpand ( Paramstr ( 0 ) ) ;
1062
W r i t e l n ( T h i s program i s c a l l e d : end .
, Basename ( S , ) ) ;
31.12.6
CFMakeRaw
Synopsis: Sets ags in Termios (1054) record. Declaration: procedure CFMakeRaw(var tios: Termios) Visibility: default Description: CFMakeRaw sets the ags in the Termios structure Tios to a state so that the terminal will function in Raw Mode. For an example, see TCGetAttr (1126). Errors: None. See also: CFSetOSpeed (1063), CFSetISpeed (1063)
31.12.7
CFSetISpeed
Synopsis: Set input baud rate in Termios (1054) record Declaration: procedure CFSetISpeed(var tios: Termios;speed: Cardinal) Visibility: default Description: CFSetISpeed Sets the input baudrate in the TermIOS structure Tios to Speed. Errors: None. See also: CFSetOSpeed (1063), CFMakeRaw (1063)
31.12.8
CFSetOSpeed
Synopsis: Set output baud rate in Termios (1054) record Declaration: procedure CFSetOSpeed(var tios: Termios;speed: Cardinal) Visibility: default Description: CFSetOSpeed Sets the output baudrate in the Termios structure Tios to Speed. Errors: None. See also: CFSetISpeed (1063), CFMakeRaw (1063)
31.12.9
Chmod
Synopsis: Change le permission bits Declaration: function Chmod(path: PathStr;Newmode: LongInt) : Boolean Visibility: default Description: Chmod Sets the Mode bits of the le in Path to NewMode. Newmode can be specied by or-ing the following: 1063
S_ISUIDSet user ID on execution. S_ISGIDSet Group ID on execution. S_ISVTXSet sticky bit. S_IRUSRRead by owner. S_IWUSRWrite by owner. S_IXUSRExecute by owner. S_IRGRPRead by group. S_IWGRPWrite by group. S_IXGRPExecute by group. S_IROTHRead by others. S_IWOTHWrite by others. S_IXOTHExecute by others. S_IRWXORead, write, execute by others. S_IRWXGRead, write, execute by groups. S_IRWXURead, write, execute by user. Errors: Errors are returned in LinuxError. sys_epermThe effective UID doesnt match the ownership of the le, and is not zero. Owner or group were not specied correctly. sys_eaccessOne of the directories in Path has no search (=execute) permission. sys_enoentA directory entry in Path does not exist or is a symbolic link pointing to a non-existent directory. sys_enomemInsufcient kernel memory. sys_erofsThe le is on a read-only lesystem. sys_eloopPath has a reference to a circular symbolic link, i.e. a symbolic link, whose expansion points to itself. See also: Chown (1065), Access (1058), Octal (1107) Listing: ./olinuxex/ex23.pp
Program Example23 ; { Program t o demonstrate t h e Chmod f u n c t i o n . } Uses o l d l i n u x ; Var F : Text ; begin { Create a f i l e } Assign ( f , t e s t e x 2 1 ) ; Rewrite ( F ) ; W r i t e l n ( f , # ! / b i n / sh ) ; W r i t e l n ( f , echo Some t e x t f o r t h i s f i l e ) ; Close ( F ) ; { O c t a l ( ) makes t h e c o r r e c t number from a number t h a t LOOKS o c t a l } Chmod ( t e s t e x 2 1 , o c t a l ( 7 7 7 ) ) ; { F i l e i s now e x e c u t a b l e } execl ( . / testex21 ) ; end .
1064
31.12.10
Chown
Synopsis: Change owner of le Declaration: function Chown(path: PathStr;NewUid: LongInt;NewGid: LongInt) : Boolean Visibility: default Description: Chown sets the User ID and Group ID of the le in Path to NewUid, NewGid The function returns True if the call was succesfull, False if the call failed. Errors: Errors are returned in LinuxError. sys_epermThe effective UID doesnt match the ownership of the le, and is not zero. Owner or group were not specied correctly. sys_eaccessOne of the directories in Path has no search (=execute) permission. sys_enoentA directory entry in Path does not exist or is a symbolic link pointing to a non-existent directory. sys_enomemInsufcient kernel memory. sys_erofsThe le is on a read-only lesystem. sys_eloopPath has a reference to a circular symbolic link, i.e. a symbolic link, whose expansion points to itself. See also: Chmod (1063), Access (1058) Listing: ./olinuxex/ex24.pp
Program Example24 ; { Program t o demonstrate t h e Chown f u n c t i o n . } Uses o l d l i n u x ; Var UID , GID : L o n g i n t ; F : Text ; begin W r i t e l n ( T h i s w i l l o n l y work i f you are r o o t . ) ; Write ( E n t e r a UID : ) ; readln ( UID ) ; Write ( E n t e r a GID : ) ; readln ( GID ) ; Assign ( f , t e s t . t x t ) ; Rewrite ( f ) ; W r i t e l n ( f , The owner o f t h i s f i l e should become : ) ; W r i t e l n ( f , UID : , UID ) ; W r i t e l n ( f , GID : , GID ) ; Close ( F ) ; i f not Chown ( t e s t . t x t , UID , GID ) then i f L i n u x E r r o r =Sys_EPERM then W r i t e l n ( You are n o t r o o t ! ) else W r i t e l n ( Chmod f a i l e d w i t h e x i t code : , L i n u x E r r o r ) else W r i t e l n ( Changed owner s u c c e s s f u l l y ! ) ; end .
1065
31.12.11
Clone
Synopsis: Clone current process (create new thread) Declaration: function Clone(func: TCloneFunc;sp: pointer;flags: LongInt; args: pointer) : LongInt Visibility: default Description: Clone creates a child process which is a copy of the parent process, just like Fork (1084) does. In difference with Fork, however, the child process shares some parts of its execution context with its parent, so it is suitable for the implementation of threads: many instances of a program that share the same memory. When the child process is created, it starts executing the function Func, and passes it Args. The return value of Func is either the explicit return value of the function, or the exit code of the child process. The sp pointer points to the memory reserved as stack space for the child process. This address should be the top of the memory block to be used as stack. The Flags determine the behaviour of the Clone call. The low byte of the Flags contains the number of the signal that will be sent to the parent when the child dies. This may be bitwise ORed with the following constants: CLONE_VMParent and child share the same memory space, including memory (un)mapped with subsequent mmap calls. CLONE_FSParent and child have the same view of the lesystem; the chroot, chdir and umask calls affect both processes. CLONE_FILESthe le descriptor table of parent and child is shared. CLONE_SIGHANDthe parent and child share the same table of signal handlers. The signal masks are different, though. CLONE_PIDPArent and child have the same process ID. Clone returns the process ID in the parent process, and -1 if an error occurred. Errors: On error, -1 is returned to the parent, and no child is created. sys_eagainToo many processes are running. sys_enomemNot enough memory to create child process. See also: Fork (1084) Listing: ./olinuxex/ex71.pp
program TestC { l o n e } ; uses oldlinux , Errors , c r t ; const Ready : Boolean = f a l s e ; aChar : Char = a ; function CloneProc ( Arg : P o i n t e r ) : L o n g I n t ; Cdecl ; begin WriteLn ( H e l l o from t h e c l o n e , PChar ( Arg ) ) ; repeat
1066
Write ( aChar ) ; Select (0 , Nil , Nil , Nil , Nil ) ; u n t i l Ready ; WriteLn ( Clone f i n i s h e d . ) ; CloneProc : = 1 ; end ; var PID : L o n g I n t ; procedure MainProc ; begin WriteLn ( cloned process PID : , PID ) ; WriteLn ( Press <ESC> t o k i l l . . . ) ; repeat Write ( . ) ; Select (0 , Nil , Nil , Nil , Nil ) ; i f KeyPressed then case ReadKey of # 2 7 : Ready : = t r u e ; a : aChar : = A ; A : aChar : = a ; b : aChar : = b ; B : aChar : = B ; end ; u n t i l Ready ; WriteLn ( Ready . ) ; end ; const StackSze = 1 6 3 8 4 ; t h e F l a g s = CLONE_VM+CLONE_FS+CLONE_FILES+CLONE_SIGHAND ; aMsg : PChar = Oops ! ; var theStack : Pointer ; E x i t S t a t : LongInt ; begin GetMem( theStack , StackSze ) ; PID : = Clone ( @CloneProc , P o i n t e r ( L o n g I n t ( t h e S t a c k )+ StackSze ) , theFlags , aMsg ) ; i f PID < 0 then WriteLn ( E r r o r : , L i n u x E r r o r , when c l o n i n g . ) else begin MainProc ; case WaitPID ( 0 , @ExitStat , Wait_Untraced or w a i t _ c l o n e ) of 1: WriteLn ( e r r o r : , L i n u x E r r o r , ; , S t r E r r o r ( L i n u x E r r o r ) ) ; 0 : WriteLn ( e r r o r : , L i n u x E r r o r , ; , S t r E r r o r ( L i n u x E r r o r ) ) ; else WriteLn ( Clone e x i t e d w i t h : , E x i t S t a t shr 8 ) ; end ; end ; FreeMem ( theStack , StackSze ) ; end .
1067
31.12.12
CloseDir
Synopsis: Close directory le descriptor Declaration: function CloseDir(p: PDir) : Integer Visibility: default Description: CloseDir closes the directory pointed to by p. It returns zero if the directory was closed succesfully, -1 otherwise. For an example, see OpenDir (1107). Errors: Errors are returned in LinuxError. See also: OpenDir (1107), ReadDir (1110), SeekDir (1112), TellDir (1128)
31.12.13
CreateShellArgV
Synopsis: Create an array of null-terminated strings Declaration: function CreateShellArgV(const prog: string) : ppchar function CreateShellArgV(const prog: Ansistring) : ppchar Visibility: default Description: CreateShellArgV creates an array of 3 PChar pointers that can be used as arguments to ExecVE the rst elements in the array will contain /bin/sh, the second will contain -c, and the third will contain prog. The function returns a pointer to this array, of type PPChar. Errors: None. See also: Shell (1115) Listing: ./olinuxex/ex61.pp
Program ex61 ; { Example program t o demonstrate t h e CreateShellArgV f u n c t i o n } uses o l d l i n u x ; Var S : String ; PP : PPchar ; I : longint ; begin S: = s c r i p t a b c d e f g h i j k ; PP: = CreateShellArgV (S ) ; I :=0; I f PP<> N i l then While PP [ i ] < > N i l do begin W r i t e l n ( Got : " ,PP [ i ] , " ) ; Inc ( i ) ; end ; end .
1068
31.12.14
Dirname
Synopsis: Extract directory part from lename Declaration: function Dirname(const path: PathStr) : PathStr Visibility: default Description: Returns the directory part of Path. The directory is the part of Path before the last slash, or empty if there is no slash. The last character of the result is not a slash, unless the directory is the root directory. Errors: None. See also: BaseName (1062), FExpand (1082) Listing: ./olinuxex/ex47.pp
Program Example47 ; { Program t o demonstrate t h e DirName f u n c t i o n . } Uses o l d l i n u x ; Var S : S t r i n g ; begin S: = FExpand ( Paramstr ( 0 ) ) ; W r i t e l n ( T h i s program i s i n d i r e c t o r y : end .
, Dirname (S ) ) ;
31.12.15
Dup
Synopsis: Duplicate a le handle Declaration: function Dup(oldfile: LongInt;var newfile: LongInt) : Boolean function Dup(var oldfile: text;var newfile: text) : Boolean function Dup(var oldfile: File;var newfile: File) : Boolean Visibility: default Description: Makes NewFile an exact copy of OldFile, after having ushed the buffer of OldFile in case it is a Text le or untyped le. Due to the buffering mechanism of Pascal, this has not the same functionality as the dup call in C. The internal Pascal buffers are not the same after this call, but when the buffers are ushed (e.g. after output), the output is sent to the same le. Doing an lseek will, however, work as in C, i.e. doing a lseek will change the leposition in both les. The function returns False in case of an error, True if successful. Errors: In case of errors, Linuxerror is used to report errors. sys_ebadfOldFile hasnt been assigned. sys_emleMaximum number of open les for the process is reached. See also: Dup2 (1070) Listing: ./olinuxex/ex31.pp
1069
program Example31 ; { Program t o demonstrate t h e Dup f u n c t i o n . } uses o l d l i n u x ; var f : t e x t ; begin i f not dup ( o u t p u t , f ) then W r i t e l n ( Dup F a i l e d ! ) ; writeln ( This i s w r i t t e n to stdout . ) ; w r i t e l n ( f , T h i s i s w r i t t e n t o t h e dup f i l e , and f l u s h e d ) ; f l u s h ( f ) ; writeln end .
31.12.16
Dup2
Synopsis: Duplicate one lehandle to another Declaration: function Dup2(oldfile: LongInt;newfile: LongInt) : Boolean function Dup2(var oldfile: text;var newfile: text) : Boolean function Dup2(var oldfile: File;var newfile: File) : Boolean Visibility: default Description: Makes NewFile an exact copy of OldFile, after having ushed the buffer of OldFile in the case of text or untyped les. NewFile can be an assigned le. If newfile was open, it is closed rst. Due to the buffering mechanism of Pascal, this has not the same functionality as the dup2 call in C. The internal Pascal buffers are not the same after this call, but when the buffers are ushed (e.g. after output), the output is sent to the same le. Doing an lseek will, however, work as in C, i.e. doing a lseek will change the leposition in both les. The function returns True if succesful, false otherwise. Errors: In case of error, Linuxerror is used to report errors. sys_ebadfOldFile hasnt been assigned. sys_emleMaximum number of open les for the process is reached. See also: Dup (1069) Listing: ./olinuxex/ex32.pp
program Example31 ; { Program t o demonstrate t h e Dup f u n c t i o n . } uses o l d l i n u x ; var f : t e x t ; i : longint ; begin Assign ( f , t e x t . t x t ) ;
1070
Rewrite ( F ) ; For i : = 1 to 1 0 do w r i t e l n ( F , L i n e : , i ) ; i f not dup2 ( o u t p u t , f ) then W r i t e l n ( Dup2 F a i l e d ! ) ; writeln ( This i s w r i t t e n to stdout . ) ; w r i t e l n ( f , T h i s i s w r i t t e n t o t h e dup f i l e , and f l u s h e d ) ; flush ( f ) ; writeln ; { Remove f i l e . Comment t h i s i f you want t o check f l u s h i n g . } Unlink ( t e x t . t x t ) ; end .
31.12.17
EpochToLocal
Synopsis: Convert epoch time to local time Declaration: procedure EpochToLocal(epoch: LongInt;var year: Word;var month: Word; var day: Word;var hour: Word;var minute: Word; var second: Word) Visibility: default Description: Converts the epoch time (=Number of seconds since 00:00:00 , January 1, 1970, corrected for your time zone ) to local date and time. This function takes into account the timzeone settings of your system. Errors: None See also: GetEpochTime (1091), LocalToEpoch (1101), GetTime (1095), GetDate (1088) Listing: ./olinuxex/ex3.pp
Program Example3 ; { Program t o demonstrate t h e EpochToLocal f u n c t i o n . } Uses o l d l i n u x ; Var Year , month , day , hour , minute , seconds : Word ; begin EpochToLocal ( GetEpochTime , Year , month , day , hour , minute , seconds ) ; W r i t e l n ( C u r r e n t date : , Day : 2 , / , Month : 2 , / , Year : 4 ) ; W r i t e l n ( C u r r e n t t i m e : , Hour : 2 , : , minute : 2 , : , seconds : 2 ) ; end .
31.12.18
Execl
Synopsis: Execute process (using argument list) Declaration: procedure Execl(const Todo: string) procedure Execl(const Todo: Ansistring) Visibility: default
1071
Description: Replaces the currently running program with the program, specied in path. Path is split into a command and its options. The executable in path is NOT searched in the path. The current environment is passed to the program. On success, execl does not return. Errors: Errors are reported in LinuxError: sys_eaccesFile is not a regular le, or has no execute permission. A compononent of the path has no search permission. sys_epermThe le system is mounted noexec. sys_e2bigArgument list too big. sys_enoexecThe magic number in the le is incorrect. sys_enoentThe le does not exist. sys_enomemNot enough memory for kernel, or to split command line. sys_enotdirA component of the path is not a directory. sys_eloopThe path contains a circular reference (via symlinks). See also: Execve (1075), Execv (1074), Execvp (1076), Execle (1072), Execlp (1073), Fork (1084) Listing: ./olinuxex/ex10.pp
Program Example10 ; { Program t o demonstrate t h e Execl f u n c t i o n . } Uses o l d l i n u x , s t r i n g s ; begin { Execute l s l , w i t h c u r r e n t environment . } { l s i s NOT looked f o r i n PATH environment v a r i a b l e . } Execl ( / b i n / l s l ) ; end .
31.12.19
Execle
Synopsis: Execute process (using argument list, environment) Declaration: procedure Execle(Todo: string;Ep: ppchar) procedure Execle(Todo: AnsiString;Ep: ppchar) Visibility: default Description: Replaces the currently running program with the program, specied in path. Path is split into a command and its options. The executable in path is searched in the path, if it isnt an absolute lename. The environment in ep is passed to the program. On success, execle does not return. Errors: Errors are reported in LinuxError: sys_eaccesFile is not a regular le, or has no execute permission. A compononent of the path has no search permission. sys_epermThe le system is mounted noexec. sys_e2bigArgument list too big. sys_enoexecThe magic number in the le is incorrect. sys_enoentThe le does not exist. 1072
sys_enomemNot enough memory for kernel, or to split command line. sys_enotdirA component of the path is not a directory. sys_eloopThe path contains a circular reference (via symlinks). See also: Execve (1075), Execv (1074), Execvp (1076), Execl (1071), Execlp (1073), Fork (1084) Listing: ./olinuxex/ex11.pp
Program Example11 ; { Program t o demonstrate t h e Execle f u n c t i o n . } Uses o l d l i n u x , s t r i n g s ; begin { Execute l s l , w i t h c u r r e n t environment . } { l s i s NOT looked f o r i n PATH environment v a r i a b l e . } { envp i s d e f i n e d i n t h e system u n i t . } Execle ( / b i n / l s l , envp ) ; end .
31.12.20
Execlp
Synopsis: Execute process (using argument list, environment; search path) Declaration: procedure Execlp(Todo: string;Ep: ppchar) procedure Execlp(Todo: Ansistring;Ep: ppchar) Visibility: default Description: Replaces the currently running program with the program, specied in path. Path is split into a command and its options. The executable in path is searched in the path, if it isnt an absolute lename. The current environment is passed to the program. On success, execlp does not return. Errors: Errors are reported in LinuxError: sys_eaccesFile is not a regular le, or has no execute permission. A compononent of the path has no search permission. sys_epermThe le system is mounted noexec. sys_e2bigArgument list too big. sys_enoexecThe magic number in the le is incorrect. sys_enoentThe le does not exist. sys_enomemNot enough memory for kernel, or to split command line. sys_enotdirA component of the path is not a directory. sys_eloopThe path contains a circular reference (via symlinks). See also: Execve (1075), Execv (1074), Execvp (1076), Execle (1072), Execl (1071), Fork (1084) Listing: ./olinuxex/ex12.pp
1073
Program Example12 ; { Program t o demonstrate t h e Execlp f u n c t i o n . } Uses o l d l i n u x , s t r i n g s ; begin { Execute l s l , w i t h c u r r e n t environment . } { l s i s looked f o r i n PATH environment v a r i a b l e . } { envp i s d e f i n e d i n t h e system u n i t . } Execlp ( l s l , envp ) ; end .
31.12.21
Execv
Synopsis: Execute process Declaration: procedure Execv(const path: PathStr;args: ppchar) procedure Execv(const path: AnsiString;args: ppchar) Visibility: default Description: Replaces the currently running program with the program, specied in path. It gives the program the options in args. This is a pointer to an array of pointers to null-terminated strings. The last pointer in this array should be nil. The current environment is passed to the program. On success, execv does not return. Errors: Errors are reported in LinuxError: sys_eaccesFile is not a regular le, or has no execute permission. A compononent of the path has no search permission. sys_epermThe le system is mounted noexec. sys_e2bigArgument list too big. sys_enoexecThe magic number in the le is incorrect. sys_enoentThe le does not exist. sys_enomemNot enough memory for kernel. sys_enotdirA component of the path is not a directory. sys_eloopThe path contains a circular reference (via symlinks). See also: Execve (1075), Execvp (1076), Execle (1072), Execl (1071), Execlp (1073), Fork (1084) Listing: ./olinuxex/ex8.pp
Program Example8 ; { Program t o demonstrate t h e Execv f u n c t i o n . } Uses o l d l i n u x , s t r i n g s ; Const Arg0 : PChar = / b i n / l s ; Arg1 : Pchar = l ; Var PP : PPchar ;
1074
begin GetMem ( PP, 3 SizeOf ( Pchar ) ) ; PP [ 0 ] : = Arg0 ; PP [ 1 ] : = Arg1 ; PP [ 3 ] : = N i l ; { Execute / b i n / l s l , w i t h c u r r e n t environment } Execv ( / b i n / l s , pp ) ; end .
31.12.22
Execve
Synopsis: Execute process using environment Declaration: procedure Execve(Path: PathStr;args: ppchar;ep: ppchar) procedure Execve(Path: AnsiString;args: ppchar;ep: ppchar) procedure Execve(path: pchar;args: ppchar;ep: ppchar) Visibility: default Description: Replaces the currently running program with the program, specied in path. It gives the program the options in args, and the environment in ep. They are pointers to an array of pointers to nullterminated strings. The last pointer in this array should be nil. On success, execve does not return. Errors: Errors are reported in LinuxError: sys_eaccesFile is not a regular le, or has no execute permission. A compononent of the path has no search permission. sys_epermThe le system is mounted noexec. sys_e2bigArgument list too big. sys_enoexecThe magic number in the le is incorrect. sys_enoentThe le does not exist. sys_enomemNot enough memory for kernel. sys_enotdirA component of the path is not a directory. sys_eloopThe path contains a circular reference (via symlinks). See also: Execve (1075), Execv (1074), Execvp (1076), Execle (1072), Execl (1071), Execlp (1073), Fork (1084) Listing: ./olinuxex/ex7.pp
Program Example7 ; { Program t o demonstrate t h e Execve f u n c t i o n . } Uses o l d l i n u x , s t r i n g s ; Const Arg0 : PChar = / b i n / l s ; Arg1 : Pchar = l ; Var PP : PPchar ;
1075
begin GetMem ( PP, 3 SizeOf ( Pchar ) ) ; PP [ 0 ] : = Arg0 ; PP [ 1 ] : = Arg1 ; PP [ 3 ] : = N i l ; { Execute / b i n / l s l , w i t h c u r r e n t environment } { Envp i s d e f i n e d i n system . i n c } ExecVe ( / b i n / l s , pp , envp ) ; end .
31.12.23
Execvp
Synopsis: Execute process, search path Declaration: procedure Execvp(Path: PathStr;Args: ppchar;Ep: ppchar) procedure Execvp(Path: AnsiString;Args: ppchar;Ep: ppchar) Visibility: default Description: Replaces the currently running program with the program, specied in path. The executable in path is searched in the path, if it isnt an absolute lename. It gives the program the options in args. This is a pointer to an array of pointers to null-terminated strings. The last pointer in this array should be nil. The current environment is passed to the program. On success, execvp does not return. Errors: Errors are reported in LinuxError: sys_eaccesFile is not a regular le, or has no execute permission. A compononent of the path has no search permission. sys_epermThe le system is mounted noexec. sys_e2bigArgument list too big. sys_enoexecThe magic number in the le is incorrect. sys_enoentThe le does not exist. sys_enomemNot enough memory for kernel. sys_enotdirA component of the path is not a directory. sys_eloopThe path contains a circular reference (via symlinks). See also: Execve (1075), Execv (1074), Execle (1072), Execl (1071), Execlp (1073), Fork (1084) Listing: ./olinuxex/ex9.pp
Program Example9 ; { Program t o demonstrate t h e Execvp f u n c t i o n . } Uses o l d l i n u x , s t r i n g s ; Const Arg0 : PChar = l s ; Arg1 : Pchar = l ; Var PP : PPchar ;
begin
1076
GetMem ( PP, 3 SizeOf ( Pchar ) ) ; PP [ 0 ] : = Arg0 ; PP [ 1 ] : = Arg1 ; PP [ 3 ] : = N i l ; { Execute l s l , w i t h c u r r e n t environment . } { l s i s looked f o r i n PATH environment v a r i a b l e . } { Envp i s d e f i n e d i n t h e system u n i t . } Execvp ( l s , pp , envp ) ; end .
31.12.24
ExitProcess
Synopsis: Exit the current process Declaration: procedure ExitProcess(val: LongInt) Visibility: default Description: ExitProcess exits the currently running process, and report Val as the exit status. Remark: If this call is executed, the normal unit nalization code will not be executed. This may lead to unexpected errors and stray les on your system. It is therefore recommended to use the Halt call instead. Errors: None. See also: Fork (1084), ExecVE (1075)
31.12.25
Fcntl
Synopsis: File control operations. Declaration: function Fcntl(Fd: LongInt;Cmd: LongInt) : LongInt procedure Fcntl(Fd: LongInt;Cmd: LongInt;Arg: LongInt) function Fcntl(var Fd: Text;Cmd: LongInt) : LongInt procedure Fcntl(var Fd: Text;Cmd: LongInt;Arg: LongInt) Visibility: default Description: Read a les attributes. Fd is an assigned le, or a valid le descriptor. Cmd speciees what to do, and is one of the following: F_GetFdRead the close_on_exec ag. If the low-order bit is 0, then the le will remain open across execve calls. F_GetFlRead the descriptors ags. F_GetOwnGet the Process ID of the owner of a socket. F_SetFdSet the close_on_exec ag of Fd. (only the least siginicant bit is used). F_GetLkReturn the flock record that prevents this process from obtaining the lock, or set the l_type eld of the lock of there is no obstruction. Arg is a pointer to a ock record. F_SetLkSet the lock or clear it (depending on l_type in the flock structure). if the lock is held by another process, an error occurs. F_GetLkwSame as for F_Setlk, but wait until the lock is released. F_SetOwnSet the Process or process group that owns a socket.
1077
Errors: LinuxError is used to report errors. sys_ebadfFd has a bad le descriptor. sys_eagain or sys_eaccessFor F_SetLk, if the lock is held by another process.
31.12.26
fdClose
Synopsis: Close le descriptor Declaration: function fdClose(fd: LongInt) : Boolean Visibility: default Description: fdClose closes a le with le descriptor Fd. The function returns True if the le was closed successfully, False otherwise. For an example, see fdOpen (1078). Errors: Errors are returned in LinuxError. See also: fdOpen (1078), fdRead (1079), fdWrite (1081), fdTruncate (1081), fdFlush (1078), fdSeek (1080)
31.12.27
fdFlush
Synopsis: Flush kernel le buffer Declaration: function fdFlush(fd: LongInt) : Boolean Visibility: default Description: fdflush ushes the Linux kernel le buffer, so the le is actually written to disk. This is NOT the same as the internal buffer, maintained by Free Pascal. The function returns True if the call was successful, false if an error occurred. For an example, see fdRead (1079). Errors: Errors are returned in LinuxError. See also: fdOpen (1078), fdClose (1078), fdRead (1079), fdWrite (1081), fdTruncate (1081), fdSeek (1080)
31.12.28
Declaration: function function function function Visibility: default
fdOpen
fdOpen(pathname: fdOpen(pathname: fdOpen(pathname: fdOpen(pathname: string;flags: LongInt) : LongInt string;flags: LongInt;mode: LongInt) : LongInt pchar;flags: LongInt) : LongInt pchar;flags: LongInt;mode: LongInt) : LongInt
Description: fdOpen opens a le in PathName with ags flags One of the following: Open_RdOnlyFile is opened Read-only Open_WrOnlyFile is opened Write-only Open_RdWrFile is opened Read-Write The ags may beOR-ed with one of the following constants: 1078
Open_CreatFile is created if it doesnt exist. Open_ExclIf the le is opened with Open_Creat and it already exists, the call wil fail. Open_NoCttyIf the le is a terminal device, it will NOT become the process controlling terminal. Open_TruncIf the le exists, it will be truncated. Open_Appendthe le is opened in append mode. Before each write, the le pointer is positioned at the end of the le. Open_NonBlockThe le is opened in non-blocking mode. No operation on the le descriptor will cause the calling process to wait till. Open_NDelayIdem as Open_NonBlock Open_SyncThe le is opened for synchronous IO. Any write operation on the le will not return untill the data is physically written to disk. Open_NoFollowif the le is a symbolic link, the open fails. (linux 2.1.126 and higher only) Open_Directoryif the le is not a directory, the open fails. (linux 2.1.126 and higher only) PathName can be of type PChar or String. The optional mode argument species the permissions to set when opening the le. This is modied by the umask setting. The real permissions are Mode and not umask. The return value of the function is the ledescriptor, or a negative value if there was an error. Errors: Errors are returned in LinuxError. See also: fdClose (1078), fdRead (1079), fdWrite (1081), fdTruncate (1081), fdFlush (1078), fdSeek (1080) Listing: ./olinuxex/ex19.pp
Program Example19 ; { Program t o demonstrate t h e fdOpen , f d w r i t e and fdCLose f u n c t i o n s . } Uses o l d l i n u x ; Const L i n e : S t r i n g [ 8 0 ] = T h i s i s easy w r i t i n g ! ; Var FD : L o n g i n t ; begin FD: = fdOpen ( Test . d a t , Open_WrOnly or Open_Creat ) ; i f FD>0 then begin i f length ( L i n e )<> f d w r i t e ( FD, L i n e [ 1 ] , Length ( L i n e ) ) then W r i t e l n ( E r r o r when w r i t i n g t o f i l e ! ) ; f d C l o s e (FD ) ; end ; end .
31.12.29
fdRead
Synopsis: Read data from le descriptor Declaration: function fdRead(fd: LongInt;var buf;size: LongInt) : LongInt Visibility: default
1079
Description: fdRead reads at most size bytes from the le descriptor fd, and stores them in buf. The function returns the number of bytes actually read, or -1 if an error occurred. No checking on the length of buf is done. Errors: Errors are returned in LinuxError. See also: fdOpen (1078), fdClose (1078), fdWrite (1081), fdTruncate (1081), fdFlush (1078), fdSeek (1080) Listing: ./olinuxex/ex20.pp
Program Example20 ; { Program t o demonstrate t h e fdRead and f d T r u n c a t e f u n c t i o n s . } Uses o l d l i n u x ; Const Data : s t r i n g [ 1 0 ] = 12345687890 ; Var FD : L o n g i n t ; l : longint ; begin FD: = fdOpen ( t e s t . d a t , open_wronly or open_creat , o c t a l ( 6 6 6 ) ) ; i f fd >0 then begin { F i l l f i l e w i t h data } f o r l : = 1 to 1 0 do i f f d W r i t e ( FD, Data [ 1 ] , 1 0 ) < > 1 0 then begin w r i t e l n ( E r r o r when w r i t i n g ! ) ; halt ( 1 ) ; end ; f d C l o s e (FD ) ; FD: = fdOpen ( t e s t . d a t , open_rdonly ) ; { Read data again } I f FD>0 then begin For l : = 1 to 5 do i f fdRead ( FD, Data [ 1 ] , 1 0 ) < > 1 0 then begin W r i t e l n ( E r r o r when Reading ! ) ; Halt ( 2 ) ; end ; fdCLose (FD ) ; { Truncating f i l e at 6 0 bytes } { For t r u n c a t i n g , f i l e must be open o r w r i t e } FD: = fdOpen ( t e s t . d a t , open_wronly , o c t a l ( 6 6 6 ) ) ; i f FD>0 then begin i f not f d T r u n c a t e (FD, 6 0 ) then W r i t e l n ( E r r o r when t r u n c a t i n g ! ) ; f d C l o s e ( FD ) ; end ; end ; end ; end .
1080
31.12.30
fdSeek
Synopsis: Set le pointer position. Declaration: function fdSeek(fd: LongInt;pos: LongInt;seektype: LongInt) : LongInt Visibility: default Description: fdSeek sets the current leposition of le fd to Pos, starting from SeekType, which can be one of the following: Seek_SetPos is the absolute position in the le. Seek_CurPos is relative to the current position. Seek_endPos is relative to the end of the le. The function returns the new leposition, or -1 of an error occurred. For an example, see fdOpen (1078). Errors: Errors are returned in LinuxError. See also: fdOpen (1078), fdWrite (1081), fdClose (1078), fdRead (1079), fdTruncate (1081), fdFlush (1078)
31.12.31
fdTruncate
Synopsis: Truncate le on certain size. Declaration: function fdTruncate(fd: LongInt;size: LongInt) : Boolean Visibility: default Description: fdTruncate sets the length of a le in fd on size bytes, where size must be less than or equal to the current length of the le in fd. The function returns True if the call was successful, false if an error occurred. Errors: Errors are returned in LinuxError. See also: fdOpen (1078), fdClose (1078), fdRead (1079), fdWrite (1081), fdFlush (1078), fdSeek (1080)
31.12.32
fdWrite
Synopsis: Write data to le descriptor Declaration: function fdWrite(fd: LongInt;const buf;size: LongInt) : LongInt Visibility: default Description: fdWrite writes at most size bytes from buf to le descriptor fd. The function returns the number of bytes actually written, or -1 if an error occurred. Errors: Errors are returned in LinuxError. See also: fdOpen (1078), fdClose (1078), fdRead (1079), fdTruncate (1081), fdSeek (1080), fdFlush (1078)
1081
31.12.33
FD_Clr
Synopsis: Clears a ledescriptor in a set Declaration: procedure FD_Clr(fd: LongInt;var fds: fdSet) Visibility: default Description: FD_Clr clears le descriptor fd in ledescriptor set fds. For an example, see Select (1112). Errors: None. See also: Select (1112), SelectText (1113), GetFS (1092), FD_ZERO (1082), FD_Set (1082), FD_IsSet (1082)
31.12.34
FD_IsSet
Synopsis: Check whether a ledescriptor is set Declaration: function FD_IsSet(fd: LongInt;var fds: fdSet) : Boolean Visibility: default Description: FD_Set Checks whether le descriptor fd in ledescriptor set fds is set. For an example, see Select (1112). Errors: None. See also: Select (1112), SelectText (1113), GetFS (1092), FD_ZERO (1082), FD_Clr (1081), FD_Set (1082)
31.12.35
FD_Set
Synopsis: Set a ledescriptor in a set Declaration: procedure FD_Set(fd: LongInt;var fds: fdSet) Visibility: default Description: FD_Set sets le descriptor fd in ledescriptor set fds. For an example, see Select (1112). Errors: None. See also: Select (1112), SelectText (1113), GetFS (1092), FD_ZERO (1082), FD_Clr (1081), FD_IsSet (1082)
31.12.36
FD_Zero
Synopsis: Clear all le descriptors in set Declaration: procedure FD_Zero(var fds: fdSet) Visibility: default Description: FD_ZERO clears all the ledescriptors in the le descriptor set fds. For an example, see Select (1112). Errors: None. See also: Select (1112), SelectText (1113), GetFS (1092), FD_Clr (1081), FD_Set (1082), FD_IsSet (1082) 1082
31.12.37
FExpand
Synopsis: Expand lename to fully qualied path Declaration: function FExpand(const Path: PathStr) : PathStr Visibility: default Description: FExpand expands Path to a full path, starting from root, eliminating directory references such as . and .. from the result. Errors: None See also: BaseName (1062), DirName (1069) Listing: ./olinuxex/ex45.pp
Program Example45 ; { Program t o demonstrate t h e FExpand f u n c t i o n . } Uses o l d l i n u x ; begin W r i t e l n ( T h i s program i s i n : end .
, FExpand ( Paramstr ( 0 ) ) ) ;
31.12.38
Flock
Synopsis: Lock a le (advisory lock) Declaration: function Flock(fd: LongInt;mode: LongInt) : Boolean function Flock(var T: text;mode: LongInt) : Boolean function Flock(var F: File;mode: LongInt) : Boolean Visibility: default Description: FLock implements le locking. it sets or removes a lock on the le F. F can be of type Text or File, or it can be a linux ledescriptor (a longint) Mode can be one of the following constants : LOCK_SHsets a shared lock. LOCK_EXsets an exclusive lock. LOCK_UNunlocks the le. LOCK_NBThis can be OR-ed together with the other. If this is done the application doesnt block when locking. The function returns True if successful, False otherwise. Errors: If an error occurs, it is reported in LinuxError. See also: Fcntl (1077)
1083
31.12.39
FNMatch
Synopsis: Check whether lename matches wildcard specication Declaration: function FNMatch(const Pattern: string;const Name: string) : Boolean Visibility: default Description: FNMatch returns True if the lename in Name matches the wildcard pattern in Pattern, False otherwise. Pattern can contain the wildcards * (match zero or more arbitrary characters) or ? (match a single character). Errors: None. See also: FSearch (1085), FExpand (1082) Listing: ./olinuxex/ex69.pp
Program Example69 ; { Program t o demonstrate t h e FNMatch f u n c t i o n . } Uses o l d l i n u x ; Procedure TestMatch ( P a t t e r n ,Name : S t r i n g ) ; begin Write ( " ,Name, " ) ; I f FNMatch ( P a t t e r n ,Name ) then Write ( matches ) else Write ( does n o t match ) ; Writeln ( " , Pattern , " . ) ; end ; begin TestMatch ( TestMatch ( TestMatch ( TestMatch ( TestMatch ( TestMatch ( TestMatch ( TestMatch ( end .
31.12.40
Fork
Synopsis: Create child process Declaration: function Fork : LongInt Visibility: default Description: Fork creates a child process which is a copy of the parent process. Fork returns the process ID in the parent process, and zero in the childs process. (you can get the parents PID with GetPPid (1094)). 1084
Errors: On error, -1 is returned to the parent, and no child is created. sys_eagainNot enough memory to create child process. See also: Execve (1075), Clone (1066)
31.12.41
Synopsis: Rename le
FReName
Declaration: function FReName(OldName: Pchar;NewName: Pchar) : Boolean function FReName(OldName: string;NewName: string) : Boolean Visibility: default Description: FRename renames the le OldName to NewName. NewName can be in a different directory than OldName, but it cannot be on another partition (device). Any existing le on the new location will be replaced. If the operation fails, then the OldName le will be preserved. The function returns True on succes, False on failure. Errors: On error, errors are reported in LinuxError. Possible errors include: sys_eisdirNewName exists and is a directory, but OldName is not a directory. sys_exdevNewName and OldName are on different devices. sys_enotempty or sys_eexistNewName is an existing, non-empty directory. sys_ebusyOldName or NewName is a directory and is in use by another process. sys_einvalNewName is part of OldName. sys_emlinkOldPath or NewPath already have tha maximum amount of links pointing to them. sys_enotdirpart of OldName or NewName is not directory. sys_efaultFor the pchar case: One of the pointers points to an invalid address. sys_eaccessaccess is denied when attempting to move the le. sys_enametoolongEither OldName or NewName is too long. sys_enoenta directory component in OldName or NewName didnt exist. sys_enomemnot enough kernel memory. sys_erofsNewName or OldName is on a read-only le system. sys_elooptoo many symbolic links were encountered trying to expand OldName or NewName sys_enospcthe lesystem has no room for the new directory entry. See also: UnLink (1130)
31.12.42
FSearch
Synopsis: Search for le in search path. Declaration: function FSearch(const path: PathStr;dirlist: string) : PathStr Visibility: default Description: FSearch searches in DirList, a colon separated list of directories, for a le named Path. It then returns a path to the found le. 1085
Errors: An empty string if no such le was found. See also: BaseName (1062), DirName (1069), FExpand (1082), FNMatch (1083) Listing: ./olinuxex/ex46.pp
Program Example46 ; { Program t o demonstrate t h e FSearch f u n c t i o n . } Uses o l d l i n u x , s t r i n g s ; begin Writeln ( l s i s i n : end .
31.12.43
FSplit
Synopsis: Split lename into path, name and extension Declaration: procedure FSplit(const Path: PathStr;var Dir: DirStr;var Name: NameStr; var Ext: ExtStr) Visibility: default Description: FSplit splits a full le name into 3 parts : A Path, a Name and an extension (in ext). The extension is taken to be all letters after the last dot (.). Errors: None. See also: FSearch (1085) Listing: ./olinuxex/ex67.pp
Program Example67 ; uses o l d l i n u x ; { Program t o demonstrate t h e F S p l i t f u n c t i o n . } var Path , Name, Ext : s t r i n g ; begin F S p l i t ( ParamStr ( 1 ) , Path , Name, Ext ) ; WriteLn ( S p l i t , ParamStr ( 1 ) , i n : ) ; WriteLn ( Path : , Path ) ; WriteLn ( Name : ,Name ) ; WriteLn ( E x t e n s i o n : , Ext ) ; end .
31.12.44
FSStat
Synopsis: Retrieve lesystem information. Declaration: function FSStat(Path: PathStr;var Info: Statfs) : Boolean function FSStat(Fd: LongInt;var Info: Statfs) : Boolean 1086
Visibility: default Description: FSStat returns in Info information about the lesystem on which the le Path resides, or on which the le with le descriptor fd resides. Info is of type statfs. The function returns True if the call was succesfull, False if the call failed. Errors: LinuxError is used to report errors. sys_enotdirA component of Path is not a directory. sys_einvalInvalid character in Path. sys_enoentPath does not exist. sys_eaccessSearch permission is denied for component inPath. sys_eloopA circular symbolic link was encountered in Path. sys_eioAn error occurred while reading from the lesystem. See also: FStat (1087), LStat (1102) Listing: ./olinuxex/ex30.pp
program Example30 ; { Program t o demonstrate t h e FSStat f u n c t i o n . } uses o l d l i n u x ; var s : s t r i n g ; info : statfs ; begin w r i t e l n ( I n f o about c u r r e n t p a r t i t i o n : ) ; s := . ; while s<> q do begin i f not f s s t a t ( s , i n f o ) then begin w r i t e l n ( F s t a t f a i l e d . Errno : , l i n u x e r r o r ) ; halt ( 1 ) ; end ; writeln ; w r i t e l n ( R e s u l t o f f s s t a t on f i l e , s , . ) ; writeln ( fstype : , info . fstype ) ; writeln ( bsize : , i n f o . bsize ) ; writeln ( bfree : , i n f o . bfree ) ; writeln ( bavail : , info . bavail ) ; writeln ( f i l e s : , info . files ); writeln ( f f r e e : , info . ffree ); writeln ( f s i d : , info . fsid ); w r i t e l n ( Namelen : , i n f o . namelen ) ; w r i t e ( Type name o f f i l e t o do f s s t a t . ( q q u i t s ) : ) ; readln ( s ) end ; end .
1087
31.12.45
Declaration: function function function function Visibility: default
FStat
FStat(Path: PathStr;var Info: Stat) FStat(Fd: LongInt;var Info: Stat) : FStat(var F: Text;var Info: Stat) : FStat(var F: File;var Info: Stat) : : Boolean Boolean Boolean Boolean
Description: FStat gets information about the le specied in one of the following: Patha le on the lesystem. Fda valid le descriptor. Fan opened text le or untyped le. and stores it in Info, which is of type stat. The function returns True if the call was succesfull, False if the call failed. Errors: LinuxError is used to report errors. sys_enoentPath does not exist. See also: FSStat (1086), LStat (1102) Listing: ./olinuxex/ex28.pp
program example28 ; { Program t o demonstrate t h e F S t a t f u n c t i o n . } uses o l d l i n u x ; var f : t e x t ; i : byte ; info : stat ; begin { Make a f i l e } assign ( f , t e s t . f i l ) ; rewrite ( f ) ; f o r i : = 1 to 1 0 do w r i t e l n ( f , T e s t l i n e # , i ) ; close ( f ) ; { Do t h e c a l l on made f i l e . } i f not f s t a t ( t e s t . f i l , i n f o ) then begin w r i t e l n ( F s t a t f a i l e d . Errno : , l i n u x e r r o r ) ; halt ( 1 ) ; end ; writeln ; w r i t e l n ( R e s u l t o f f s t a t on f i l e t e s t . f i l . ) ; w r i t e l n ( Inode : , i n f o . ino ) ; w r i t e l n ( Mode : , i n f o . mode ) ; writeln ( nlink : , info . nlink ); writeln ( uid : , i n f o . uid ) ; writeln ( gid : , i n f o . gid ) ; w r i t e l n ( rdev : , i n f o . rdev ) ; w r i t e l n ( Size : , info . size ) ;
1088
writeln ( Blksize w r i t e l n ( Blocks w r i t e l n ( atime w r i t e l n ( mtime writeln ( ctime { Remove f i l e } erase ( f ) ; end .
: : : : :
31.12.46
GetDate
Synopsis: Return the system date Declaration: procedure GetDate(var Year: Word;var Month: Word;var Day: Word) Visibility: default Description: Returns the current date. Errors: None See also: GetEpochTime (1091), GetTime (1095), GetDateTime (1089), EpochToLocal (1071) Listing: ./olinuxex/ex6.pp
Program Example6 ; { Program t o demonstrate t h e GetDate f u n c t i o n . } Uses o l d l i n u x ; Var Year , Month , Day : Word ; begin GetDate ( Year , Month , Day ) ; W r i t e l n ( Date : , Day : 2 , / , Month : 2 , / , Year : 4 ) ; end .
31.12.47
GetDateTime
Synopsis: Return system date and time Declaration: procedure GetDateTime(var Year: Word;var Month: Word;var Day: Word; var hour: Word;var minute: Word;var second: Word) Visibility: default Description: Returns the current date and time. The time is corrected for the local time zone. This procedure is equivalent to the GetDate (1088) and GetTime calls. Errors: None See also: GetEpochTime (1091), GetTime (1095), EpochToLocal (1071), GetDate (1088) Listing: ./olinuxex/ex60.pp
1089
Program Example6 ; { Program t o demonstrate t h e GetDateTime f u n c t i o n . } Uses o l d l i n u x ; Var Year , Month , Day , Hour , min , sec : Word ; begin GetDateTime ( Year , Month , Day , Hour , min , sec ) ; W r i t e l n ( Date : , Day : 2 , / , Month : 2 , / , Year : 4 ) ; W r i t e l n ( Time : , Hour : 2 , : , Min : 2 , : , Sec : 2 ) ; end .
31.12.48
GetDomainName
Synopsis: Return current domain name Declaration: function GetDomainName : string Visibility: default Description: Get the domain name of the machine on which the process is running. An empty string is returned if the domain is not set. Errors: None. See also: GetHostName (1093) Listing: ./olinuxex/ex39.pp
Program Example39 ; { Program t o demonstrate t h e GetDomainName f u n c t i o n . } Uses o l d l i n u x ; begin W r i t e l n ( Domain name o f t h i s machine i s : end .
, GetDomainName ) ;
31.12.49
GetEGid
Synopsis: Return effective group ID Declaration: function GetEGid : LongInt Visibility: default Description: Get the effective group ID of the currently running process. Errors: None. See also: GetGid (1092) Listing: ./olinuxex/ex18.pp 1090
Program Example18 ; { Program t o demonstrate t h e GetGid and GetEGid f u n c t i o n s . } Uses o l d l i n u x ; begin w r i t e l n ( Group I d = , g e t g i d , E f f e c t i v e group I d = , g e t e g i d ) ; end .
31.12.50
GetEnv
Synopsis: Return value of environment variable. Declaration: function GetEnv(P: string) : Pchar Visibility: default Description: GetEnv returns the value of the environment variable in P. If the variable is not dened, nil is returned. The value of the environment variable may be the empty string. A PChar is returned to accomodate for strings longer than 255 bytes, TERMCAP and LS_COLORS, for instance. Errors: None. Listing: ./olinuxex/ex41.pp
Program Example41 ; { Program t o demonstrate t h e GetEnv f u n c t i o n . } Uses o l d l i n u x ; begin W r i t e l n ( Path i s : end .
, Getenv ( PATH ) ) ;
31.12.51
GetEpochTime
Synopsis: Return the current unix time Declaration: function GetEpochTime : LongInt Visibility: default Description: returns the number of seconds since 00:00:00 gmt, january 1, 1970. it is adjusted to the local time zone, but not to DST. Errors: no errors See also: EpochToLocal (1071), GetTime (1095) Listing: ./olinuxex/ex1.pp
1091
Program Example1 ; { Program t o demonstrate t h e GetEpochTime f u n c t i o n . } Uses o l d l i n u x ; begin Write ( Secs p a s t t h e s t a r t o f t h e Epoch ( 0 0 : 0 0 1 / 1 / 1 9 8 0 ) : ) ; W r i t e l n ( GetEpochTime ) ; end .
31.12.52
GetEUid
Synopsis: Return effective user ID Declaration: function GetEUid : LongInt Visibility: default Description: Get the effective user ID of the currently running process. Errors: None. See also: GetUid (1096) Listing: ./olinuxex/ex17.pp
Program Example17 ; { Program t o demonstrate t h e GetUid and GetEUid f u n c t i o n s . } Uses o l d l i n u x ; begin w r i t e l n ( User I d = , g e t u i d , E f f e c t i v e user I d = , g e t e u i d ) ; end .
31.12.53
GetFS
Synopsis: Return le selector Declaration: function GetFS(var T: Text) : LongInt function GetFS(var F: File) : LongInt Visibility: default Description: GetFS returns the le selector that the kernel provided for your le. In principle you don need this le selector. Only for some calls it is needed, such as the Select (1112) call or so. Errors: In case the le was not opened, then -1 is returned. See also: Select (1112) Listing: ./olinuxex/ex34.pp
1092
Program Example33 ; { Program t o demonstrate t h e S e l e c t T e x t f u n c t i o n . } Uses o l d l i n u x ; Var t v : TimeVal ; begin W r i t e l n ( Press t h e <ENTER> t o c o n t i n u e t h e program . ) ; { Wait u n t i l F i l e d e s c r i p t o r 0 ( = I n p u t ) changes } SelectText ( Input , n i l ) ; { Get r i d o f <ENTER> i n b u f f e r } readln ; W r i t e l n ( Press <ENTER> key i n l e s s than 2 seconds . . . ) ; t v . sec : = 2 ; t v . usec : = 0 ; i f S e l e c t T e x t ( I n p u t , @tv ) > 0 then W r i t e l n ( Thank you ! ) else W r i t e l n ( Too l a t e ! ) ; end .
31.12.54
GetGid
Synopsis: Return real group ID Declaration: function GetGid : LongInt Visibility: default Description: Get the real group ID of the currently running process. Errors: None. See also: GetEGid (1090) Listing: ./olinuxex/ex18.pp
Program Example18 ; { Program t o demonstrate t h e GetGid and GetEGid f u n c t i o n s . } Uses o l d l i n u x ; begin w r i t e l n ( Group I d = , g e t g i d , E f f e c t i v e group I d = , g e t e g i d ) ; end .
31.12.55
GetHostName
Synopsis: Return host name Declaration: function GetHostName : string Visibility: default 1093
Description: Get the hostname of the machine on which the process is running. An empty string is returned if hostname is not set. Errors: None. See also: GetDomainName (1089) Listing: ./olinuxex/ex40.pp
Program Example40 ; { Program t o demonstrate t h e GetHostName f u n c t i o n . } Uses o l d l i n u x ; begin W r i t e l n ( Name o f t h i s machine i s : end .
, GetHostName ) ;
31.12.56
GetLocalTimezone
Synopsis: Return local timzeone information Declaration: procedure GetLocalTimezone(timer: LongInt;var leap_correct: LongInt; var leap_hit: LongInt) procedure GetLocalTimezone(timer: LongInt) Visibility: default Description: GetLocalTimeZone returns the local timezone information. It also initializes the TZSeconds variable, which is used to correct the epoch time to local time. There should never be any need to call this function directly. It is called by the initialization routines of the Linux unit. See also: GetTimezoneFile (1096), ReadTimezoneFile (1111)
31.12.57
GetPid
Synopsis: Return current process ID Declaration: function GetPid : LongInt Visibility: default Description: Get the Process ID of the currently running process. Errors: None. See also: GetPPid (1094) Listing: ./olinuxex/ex16.pp
Program Example16 ; { Program t o demonstrate t h e GetPid , GetPPid f u n c t i o n . } Uses o l d l i n u x ;
1094
31.12.58
GetPPid
Synopsis: Return parent process ID Declaration: function GetPPid : LongInt Visibility: default Description: Get the Process ID of the parent process. Errors: None. See also: GetPid (1094) Listing: ./olinuxex/ex16.pp
Program Example16 ; { Program t o demonstrate t h e GetPid , GetPPid f u n c t i o n . } Uses o l d l i n u x ; begin W r i t e l n ( Process I d = , g e t p i d , Parent process I d = , g e t p p i d ) ; end .
31.12.59
GetPriority
Synopsis: Return process priority Declaration: function GetPriority(Which: Integer;Who: Integer) : Integer Visibility: default Description: GetPriority returns the priority with which a process is running. Which process(es) is determined by the Which and Who variables. Which can be one of the pre-dened Prio_Process, Prio_PGrp, Prio_User, in which case Who is the process ID, Process group ID or User ID, respectively. For an example, see Nice (1106). Errors: Error checking must be done on LinuxError, since a priority can be negative. sys_esrchNo process found using which and who. sys_einvalWhich was not one of Prio_Process, Prio_Grp or Prio_User. See also: SetPriority (1114), Nice (1106)
1095
31.12.60
GetTime
Word;var sec: Word; Word) Word;var sec: Word; Word;var sec: Word)
Synopsis: Return current system time Declaration: procedure GetTime(var hour: Word;var min: var msec: Word;var usec: procedure GetTime(var hour: Word;var min: var sec100: Word) procedure GetTime(var hour: Word;var min: Visibility: default Description: Returns the current time of the day, adjusted to local time. Upon return, the parameters are lled with hourHours since 00:00 today. minminutes in current hour. secseconds in current minute. sec100hundreds of seconds in current second. msecmilliseconds in current second. usecmicroseconds in current second. Errors: None See also: GetEpochTime (1091), GetDate (1088), GetDateTime (1089), EpochToLocal (1071) Listing: ./olinuxex/ex5.pp
Program Example5 ; { Program t o demonstrate t h e GetTime f u n c t i o n . } Uses o l d l i n u x ; Var Hour , Minute , Second : Word ; begin GetTime ( Hour , Minute , Second ) ; W r i t e l n ( Time : , Hour : 2 , : , Minute : 2 , : , Second : 2 ) ; end .
31.12.61
GetTimeOfDay
Synopsis: Return kernel time of day in GMT Declaration: procedure GetTimeOfDay(var tv: timeval) function GetTimeOfDay : LongInt Visibility: default Description: GetTimeOfDay returns the number of seconds since 00:00, January 1 1970, GMT in a timeval record. This time NOT corrected any way, not taking into account timezones, daylight savings time and so on. It is simply a wrapper to the kernel system call. To get the local time, GetTime (1095). Errors: None. See also: GetTime (1095), GetTimeOfDay (1096) 1096
31.12.62
GetTimezoneFile
Synopsis: Return name of timezone information le Declaration: function GetTimezoneFile : string Visibility: default Description: GetTimezoneFile returns the location of the current timezone le. The location of le is determined as follows: 1.If /etc/timezone exists, it is read, and the contents of this le is returned. This should work on Debian systems. 2.If /usr/lib/zoneinfo/localtime exists, then it is returned. (this le is a symlink to the timezone le on SuSE systems) 3.If /etc/localtime exists, then it is returned. (this le is a symlink to the timezone le on RedHat systems) Errors: If no le was found, an empty string is returned. See also: ReadTimezoneFile (1111)
31.12.63
GetUid
Synopsis: Return current user ID Declaration: function GetUid : LongInt Visibility: default Description: Get the real user ID of the currently running process. Errors: None. See also: GetEUid (1091) Listing: ./olinuxex/ex17.pp
Program Example17 ; { Program t o demonstrate t h e GetUid and GetEUid f u n c t i o n s . } Uses o l d l i n u x ; begin w r i t e l n ( User I d = , g e t u i d , E f f e c t i v e user I d = , g e t e u i d ) ; end .
31.12.64
Glob
Synopsis: Find lenames matching a wildcard pattern Declaration: function Glob(const path: PathStr) : pglob Visibility: default Description: Glob returns a pointer to a glob structure which contains all lenames which exist and match the pattern in Path. The pattern can contain wildcard characters, which have their usual meaning. 1097
Errors: Returns nil on error, and LinuxError is set. sys_enomemNo memory on heap for glob structure. othersAs returned by the opendir call, and sys_readdir. See also: GlobFree (1098) Listing: ./olinuxex/ex49.pp
Program Example49 ; { Program t o demonstrate t h e Glob and GlobFree f u n c t i o n s . } Uses o l d l i n u x ; Var G1, G2 : PGlob ; begin G1: = Glob ( ) ; i f L i n u x E r r o r =0 then begin G2: =G1 ; Writeln ( F i l e s i n t h i s d i r e c t o r y : While g2<> N i l do begin W r i t e l n ( g2 ^ . name ) ; g2 : = g2 ^ . n e x t ; end ; GlobFree ( g1 ) ; end ; end .
);
31.12.65
Globfree
Synopsis: Free result of Glob (1097) call Declaration: procedure Globfree(var p: pglob) Visibility: default Description: Releases the memory, occupied by a pglob structure. P is set to nil. For an example, see Glob (1097). Errors: None See also: Glob (1097)
31.12.66
IOCtl
Synopsis: General kernel IOCTL call. Declaration: function IOCtl(Handle: LongInt;Ndx: LongInt;Data: Pointer) : Boolean Visibility: default
1098
Description: This is a general interface to the Unix/ linux ioctl call. It performs various operations on the ledescriptor Handle. Ndx describes the operation to perform. Data points to data needed for the Ndx function. The structure of this data is function-dependent, so we dont elaborate on this here. For more information on this, see various manual pages under linux. Errors: Errors are reported in LinuxError. They are very dependent on the used function, thats why we dont list them here Listing: ./olinuxex/ex54.pp
Program Example54 ; uses o l d l i n u x ; { Program t o demonstrate t h e I O C t l f u n c t i o n . } var t i o s : Termios ; begin I O C t l ( 1 ,TCGETS, @tios ) ; WriteLn ( I n p u t Flags : WriteLn ( Output Flags : WriteLn ( L i n e Flags : WriteLn ( C o n t r o l Flags : end .
$ $ $ $
31.12.67
IOperm
Synopsis: Set permission on IO ports Declaration: function IOperm(From: Cardinal;Num: Cardinal;Value: LongInt) : Boolean Visibility: default Description: IOperm sets permissions on Num ports starting with port From to Value. The function returns True if the call was successfull, False otherwise. Note: This works ONLY as root. Only the rst 0x03ff ports can be set. When doing a Fork (1084), the permissions are reset. When doing a Execve (1075) they are kept. Errors: Errors are returned in LinuxError
31.12.68
IoPL
Synopsis: Set I/O privilege level Declaration: function IoPL(Level: LongInt) : Boolean Visibility: default Description: IoPL sets the I/O privilige level. It is intended for completeness only, one should normally not use it. 1099
31.12.69
IsATTY
Synopsis: Check if lehandle is a TTY (terminal) Declaration: function IsATTY(Handle: LongInt) : Boolean function IsATTY(var f: text) : Boolean Visibility: default Description: Check if the lehandle described by f is a terminal. f can be of type 1.longint for le handles; 2.Text for text variables such as input etc. Returns True if f is a terminal, False otherwise. Errors: No errors are reported See also: IOCtl (1098), TTYName (1129)
31.12.70
Kill
Synopsis: Send a signal to a process Declaration: function Kill(Pid: LongInt;Sig: LongInt) : Integer Visibility: default Description: Send a signal Sig to a process or process group. If Pid>0 then the signal is sent to Pid, if it equals -1, then the signal is sent to all processes except process 1. If Pid<-1 then the signal is sent to process group -Pid. The return value is zero, except in case three, where the return value is the number of processes to which the signal was sent. Errors: LinuxError is used to report errors: sys_einvalAn invalid signal is sent. sys_esrchThe Pid or process group dont exist. sys_epermThe effective userid of the current process doesnt math the one of process Pid. See also: SigAction (1115), Signal (1117)
31.12.71
Link
Synopsis: Create a hard link to a le Declaration: function Link(OldPath: PathStr;NewPath: PathStr) : Boolean Visibility: default Description: Link makes NewPath point to the same le als OldPath. The two les then have the same inode number. This is known as a hard link. The function returns True if the call was succesfull, False if the call failed. Errors: Errors are returned in LinuxError. sys_exdevOldPath and NewPath are not on the same lesystem. sys_epermThe lesystem containing oldpath and newpath doesnt support linking les. 1100
sys_eaccessWrite access for the directory containing Newpath is disallowed, or one of the directories in OldPath or {NewPath} has no search (=execute) permission. sys_enoentA directory entry in OldPath or NewPath does not exist or is a symbolic link pointing to a non-existent directory. sys_enotdirA directory entry in OldPath or NewPath is nor a directory. sys_enomemInsufcient kernel memory. sys_erofsThe les are on a read-only lesystem. sys_eexistNewPath already exists. sys_emlinkOldPath has reached maximal link count. sys_eloopOldPath or NewPath has a reference to a circular symbolic link, i.e. a symbolic link, whose expansion points to itself. sys_enospcThe device containing NewPath has no room for another entry. sys_epermOldPath points to . or .. of a directory. See also: SymLink (1120), UnLink (1130) Listing: ./olinuxex/ex21.pp
Program Example21 ; { Program t o demonstrate t h e L i n k and UnLink f u n c t i o n s . } Uses o l d l i n u x ; Var F : Text ; S : String ; begin Assign ( F , t e s t . t x t ) ; Rewrite ( F ) ; Writeln ( F , This i s w r i t t e n to t e s t . t x t ) ; Close ( f ) ; { new . t x t and t e s t . t x t are now t h e same f i l e } i f not L i n k ( t e s t . t x t , new . t x t ) then w r i t e l n ( E r r o r when l i n k i n g ! ) ; { Removing t e s t . t x t s t i l l l e a v e s new . t x t } I f not U n l i n k ( t e s t . t x t ) then W r i t e l n ( E r r o r when u n l i n k i n g ! ) ; Assign ( f , new . t x t ) ; Reset ( F ) ; While not EOF( f ) do begin Readln ( F , S ) ; Writeln ( > , s ) ; end ; Close ( f ) ; { Remove new . t x t a l s o } I f not U n l i n k ( new . t x t ) then W r i t e l n ( E r r o r when u n l i n k i n g ! ) ; end .
31.12.72
LocalToEpoch
Declaration: function LocalToEpoch(year: Word;month: Word;day: Word;hour: Word; minute: Word;second: Word) : LongInt Visibility: default Description: Converts the Local time to epoch time (=Number of seconds since 00:00:00 , January 1, 1970 ). Errors: None See also: GetEpochTime (1091), EpochToLocal (1071), GetTime (1095), GetDate (1088) Listing: ./olinuxex/ex4.pp
Program Example4 ; { Program t o demonstrate t h e LocalToEpoch f u n c t i o n . } Uses o l d l i n u x ; Var year , month , day , hour , minute , second : Word ; begin Write ( Year : ) ; readln ( Year ) ; Write ( Month : ) ; readln ( Month ) ; Write ( Day : ) ; readln ( Day ) ; Write ( Hour : ) ; readln ( Hour ) ; Write ( Minute : ) ; readln ( Minute ) ; Write ( Seonds : ) ; readln ( Second ) ; Write ( T h i s i s : ) ; Write ( LocalToEpoch ( year , month , day , hour , minute , second ) ) ; W r i t e l n ( seconds p a s t 0 0 : 0 0 1 / 1 / 1 9 8 0 ) ; end .
31.12.73
Lstat
Synopsis: Return information about symbolic link. Do not follow the link Declaration: function Lstat(Filename: PathStr;var Info: Stat) : Boolean Visibility: default Description: LStat gets information about the link specied in Path, and stores it in Info, which is of type stat. Contrary to FStat, it stores information about the link, not about the le the link points to. The function returns True if the call was succesfull, False if the call failed. Errors: LinuxError is used to report errors. sys_enoentPath does not exist. See also: FStat (1087), FSStat (1086) Listing: ./olinuxex/ex29.pp
program example29 ; { Program t o demonstrate t h e L S t a t f u n c t i o n . } uses o l d l i n u x ;
1102
var f : t e x t ; i : byte ; info : stat ; begin { Make a f i l e } assign ( f , t e s t . f i l ) ; rewrite ( f ) ; f o r i : = 1 to 1 0 do w r i t e l n ( f , T e s t l i n e # , i ) ; close ( f ) ; { Do t h e c a l l on made f i l e . } i f not f s t a t ( t e s t . f i l , i n f o ) then begin w r i t e l n ( F s t a t f a i l e d . Errno : , l i n u x e r r o r ) ; halt ( 1 ) ; end ; writeln ; w r i t e l n ( R e s u l t o f f s t a t on f i l e t e s t . f i l . ) ; w r i t e l n ( Inode : , i n f o . ino ) ; w r i t e l n ( Mode : , i n f o . mode ) ; writeln ( nlink : , info . nlink ); writeln ( uid : , i n f o . uid ) ; writeln ( gid : , i n f o . gid ) ; w r i t e l n ( rdev : , i n f o . rdev ) ; w r i t e l n ( Size : , info . size ) ; writeln ( Blksize : , i n f o . blksze ) ; w r i t e l n ( Blocks : , i n f o . blocks ) ; w r i t e l n ( atime : , i n f o . atime ) ; w r i t e l n ( mtime : , i n f o . mtime ) ; writeln ( ctime : , i n f o . ctime ) ; I f not SymLink ( t e s t . f i l , t e s t . l n k ) then w r i t e l n ( L i n k f a i l e d ! Errno : , l i n u x e r r o r ) ; i f not l s t a t ( t e s t . l n k , i n f o ) then begin w r i t e l n ( L S t a t f a i l e d . Errno : , l i n u x e r r o r ) ; halt ( 1 ) ; end ; writeln ; w r i t e l n ( R e s u l t o f f s t a t on f i l e t e s t . l n k . ) ; w r i t e l n ( Inode : , i n f o . ino ) ; w r i t e l n ( Mode : , i n f o . mode ) ; writeln ( nlink : , info . nlink ); writeln ( uid : , i n f o . uid ) ; writeln ( gid : , i n f o . gid ) ; w r i t e l n ( rdev : , i n f o . rdev ) ; w r i t e l n ( Size : , info . size ) ; writeln ( Blksize : , i n f o . blksze ) ; w r i t e l n ( Blocks : , i n f o . blocks ) ; w r i t e l n ( atime : , i n f o . atime ) ; w r i t e l n ( mtime : , i n f o . mtime ) ; writeln ( ctime : , i n f o . ctime ) ; { Remove f i l e and l i n k } erase ( f ) ; unlink ( test . lnk ) ; end .
1103
31.12.74
mkFifo
Synopsis: Create FIFO (named pipe) in le system Declaration: function mkFifo(pathname: string;mode: LongInt) : Boolean Visibility: default Description: MkFifo creates named a named pipe in the lesystem, with name PathName and mode Mode. Errors: LinuxError is used to report errors: sys_emleToo many le descriptors for this process. sys_enleThe system le table is full. See also: POpen (1109), MkFifo (1103)
31.12.75
MMap
Synopsis: Create memory map of a le Declaration: function MMap(const m: tmmapargs) : LongInt Visibility: default Description: MMap maps or unmaps les or devices into memory. The different elds of the argument m determine what and how the mmap maps this: addressAddress where to mmap the device. This address is a hint, and may not be followed. sizeSize (in bytes) of area to be mapped. protProtection of mapped memory. This is a OR-ed combination of the following constants: PROT_EXECThe memory can be executed. PROT_READThe memory can be read. PROT_WRITEThe memory can be written. PROT_NONEThe memory can not be accessed. agsContains some options for the mmap call. It is an OR-ed combination of the following constants: MAP_FIXEDDo not map at another address than the given address. If the address cannot be used, MMap will fail. MAP_SHAREDShare this map with other processes that map this object. MAP_PRIVATECreate a private map with copy-on-write semantics. MAP_ANONYMOUSfd does not have to be a le descriptor. One of the options MAP_SHARED and MAP_PRIVATE must be present, but not both at the same time. fdFile descriptor from which to map. offsetOffset to be used in le descriptor fd. The function returns a pointer to the mapped memory, or a -1 in case of en error. Errors: On error, -1 is returned and LinuxError is set to the error code: Sys_EBADFfd is not a valid le descriptor and MAP_ANONYMOUS was not specied. Sys_EACCESMAP_PRIVATE was specied, but fd is not open for reading. Or MAP_SHARED was asked and PROT_WRITE is set, fd is not open for writing 1104
Sys_EINVALOne of the record elds Start, length or offset is invalid. Sys_ETXTBUSYMAP_DENYWRITE was set but the object specied by fd is open for writing. Sys_EAGAINfd is locked, or too much memory is locked. Sys_ENOMEMNot enough memory for this operation. See also: MUnMap (1105) Listing: ./olinuxex/ex66.pp
Program Example66 ; { Program t o demonstrate t h e MMap f u n c t i o n . } Uses o l d l i n u x ; Var S : S t r i n g ; fd , Len : L o n g i n t ; args : tmmapargs ; P : PChar ; begin S: = T h i s i s a s t r i n g # 0 ; Len : = Length (S ) ; f d : = fdOpen ( t e s t f i l e . t x t , Open_wrOnly or open_creat ) ; I f f d =1 then Halt ( 1 ) ; I f f d W r i t e ( fd , S [ 1 ] , Len)= 1 then Halt ( 2 ) ; fdClose ( fd ) ; fdOpen ( t e s t f i l e . t x t , Open_rdOnly ) ; i f f d =1 then Halt ( 3 ) ; args . address : = 0 ; args . o f f s e t : = 0 ; args . s i z e : = Len +1; args . f d : = Fd ; args . f l a g s : =MAP_PRIVATE ; args . p r o t : =PROT_READ or PROT_WRITE ; P: = Pchar (mmap( args ) ) ; I f l o n g i n t (P)= 1 then Halt ( 4 ) ; W r i t e l n ( Read i n memory : ,P ) ; fdclose ( fd ) ; i f Not MUnMap( P , Len ) Then Halt ( LinuxError ) ; end .
31.12.76
MUnMap
Synopsis: Unmap previously mapped memory block Declaration: function MUnMap(P: Pointer;Size: LongInt) : Boolean Visibility: default
1105
Description: MUnMap unmaps the memory block of size Size, pointed to by P, which was previously allocated with MMap (1103). The function returns True if successful, False otherwise. For an example, see MMap (1103). Errors: In case of error the function returns False and LinuxError is set to an error value. See MMap (1103) for possible error values. See also: MMap (1103)
31.12.77
NanoSleep
Synopsis: Suspend process for a short time Declaration: function NanoSleep(const req: timespec;var rem: timespec) : LongInt Visibility: default Description: NanoSleep suspends the process till a time period as specied in req has passed. Then the function returns. If the call was interrupted (e.g. by some signal) then the function may return earlier, and rem will contain the remaining time till the end of the intended period. In this case the return value will be -1, and LinuxError will be set to EINTR If the function returns without error, the return value is zero. Errors: If the call was interrupted, -1 is returned, and LinuxError is set to EINTR. If invalid time values were specied, then -1 is returned and LinuxError is set to EINVAL. See also: Pause (1108), Alarm (1059) Listing: ./olinuxex/ex72.pp
program example72 ; { Program t o demonstrate t h e NanoSleep f u n c t i o n . } uses o l d l i n u x ; Var Req ,Rem : TimeSpec ; Res : L o n g i n t ; begin With Req do begin tv_sec :=10; tv_nsec : = 1 0 0 ; end ; Write ( NanoSleep r e t u r n e d : ) ; Flush ( Output ) ; Res : = ( NanoSleep ( Req , rem ) ) ; Writeln ( res ) ; I f ( res < >0) then With rem do begin W r i t e l n ( Remaining seconds : , tv_sec ) ; W r i t e l n ( Remaining nanoseconds : , tv_nsec ) ; end ; end .
1106
31.12.78
Nice
Synopsis: Set process priority Declaration: procedure Nice(N: Integer) Visibility: default Description: Nice adds -N to the priority of the running process. The lower the priority numerically, the less the process is favored. Only the superuser can specify a negative N, i.e. increase the rate at which the process is run. Errors: Errors are returned in LinuxError sys_epermA non-superuser tried to specify a negative N, i.e. do a priority increase. See also: GetPriority (1095), SetPriority (1114) Listing: ./olinuxex/ex15.pp
Program Example15 ; { Program t o demonstrate t h e Nice and Get / S e t P r i o r i t y f u n c t i o n s . } Uses o l d l i n u x ; begin writeln ( Setting p r i o r i t y to 5 ) ; s e t p r i o r i t y ( prio_process , getpid , 5 ) ; w r i t e l n ( New p r i o r i t y = , g e t p r i o r i t y ( p r i o _ p r o c e s s , g e t p i d ) ) ; w r i t e l n ( Doing n i c e 1 0 ) ; nice ( 1 0 ) ; w r i t e l n ( New P r i o r i t y = , g e t p r i o r i t y ( p r i o _ p r o c e s s , g e t p i d ) ) ; end .
31.12.79
Octal
Synopsis: Convert octal to decimal value Declaration: function Octal(l: LongInt) : LongInt Visibility: default Description: Octal will convert a number specied as an octal number to its decimal value. This is useful for the Chmod (1063) call, where permissions are specied as octal numbers. Errors: No checking is performed whether the given number is a correct Octal number. e.g. specifying 998 is possible; the result will be wrong in that case. See also: Chmod (1063) Listing: ./olinuxex/ex68.pp
Program Example68 ; { Program t o demonstrate t h e O c t a l f u n c t i o n . } Uses o l d l i n u x ;
1107
31.12.80
OpenDir
Synopsis: Open directory for reading Declaration: function OpenDir(f: pchar) : PDir function OpenDir(f: string) : PDir Visibility: default Description: OpenDir opens the directory f, and returns a pdir pointer to a Dir record, which can be used to read the directory structure. If the directory cannot be opened, nil is returned. Errors: Errors are returned in LinuxError. See also: CloseDir (1068), ReadDir (1110), SeekDir (1112), TellDir (1128) Listing: ./olinuxex/ex35.pp
Program Example35 ; { Program t o demonstrate t h e OpenDir , ReadDir , SeekDir and T e l l D i r f u n c t i o n s . } Uses o l d l i n u x ; Var TheDir : PDir ; ADirent : PDirent ; Entry : Longint ; begin TheDir : = OpenDir ( . / . ) ; Repeat E n t r y : = T e l l D i r ( TheDir ) ; A D i r e n t : = ReadDir ( TheDir ) ; I f ADirent <> N i l then With A D i r e n t ^ do begin W r i t e l n ( E n t r y No : , E n t r y ) ; W r i t e l n ( Inode : , ino ) ; Writeln ( O f f s e t : , off ); W r i t e l n ( Reclen : , reclen ) ; W r i t e l n ( Name : , pchar (@name [ 0 ] ) ) ; end ; Until ADirent=Nil ; Repeat Write ( E n t r y No . you would l i k e t o see again ( 1 t o s t o p ) : ) ; ReadLn ( E n t r y ) ; I f Entry <>1 then begin SeekDir ( TheDir , E n t r y ) ; A D i r e n t : = ReadDir ( TheDir ) ;
1108
I f ADirent <> N i l then With A D i r e n t ^ do begin W r i t e l n ( E n t r y No W r i t e l n ( Inode Writeln ( O f f s e t W r i t e l n ( Reclen W r i t e l n ( Name end ; end ; U n t i l E n t r y =1; C l o s e D i r ( TheDir ) ; end .
: : : : :
31.12.81
Pause
Synopsis: Wait for a signal Declaration: procedure Pause Visibility: default Description: Pause puts the process to sleep and waits until the application receives a signal. If a signal handler is installed for the received sigal, the handler will be called and after that pause will return control to the process. For an example, see Alarm (1059).
31.12.82
PClose
Synopsis: Close le opened with POpen (1109) Declaration: function PClose(var F: text) : LongInt function PClose(var F: File) : LongInt Visibility: default Description: PClose closes a le opened with POpen (1109). It waits for the command to complete, and then returns the exit status of the command. For an example, see POpen (1109) Errors: LinuxError is used to report errors. If it is different from zero, the exit status is not valid. See also: POpen (1109)
31.12.83
POpen
Synopsis: Pipe le to standard input/output of program Declaration: procedure POpen(var F: text;const Prog: string;rw: Char) procedure POpen(var F: File;const Prog: string;rw: Char) Visibility: default
1109
Description: POpen runs the command specied in Cmd, and redirects the standard in or output of the command to the other end of the pipe F. The parameter rw indicates the direction of the pipe. If it is set to W, then F can be used to write data, which will then be read by the command from stdinput. If it is set to R, then the standard output of the command can be read from F. F should be reset or rewritten prior to using it. F can be of type Text or File. A le opened with POpen can be closed with Close, but also with PClose (1109). The result is the same, but PClose returns the exit status of the command Cmd. Errors: Errors are reported in LinuxError and are essentially those of the Execve, Dup and AssignPipe commands. See also: AssignPipe (1060), PClose (1109) Listing: ./olinuxex/ex37.pp
Program Example37 ; { Program t o demonstrate t h e Popen f u n c t i o n . } uses o l d l i n u x ; var f : t e x t ; i : longint ; begin w r i t e l n ( C r e a t i n g a s h e l l s c r i p t t o which echoes i t s arguments ) ; w r i t e l n ( and i n p u t back t o s t d o u t ) ; assign ( f , test21a ) ; rewrite ( f ) ; w r i t e l n ( f , # ! / b i n / sh ) ; w r i t e l n ( f , echo t h i s i s t h e c h i l d speaking . . . . ) ; w r i t e l n ( f , echo g o t arguments \ " $ " \ ) ; writeln ( f , cat ) ; writeln ( f , e x i t 2 ) ; writeln ( f ) ; close ( f ) ; chmod ( t e s t 2 1 a , o c t a l ( 7 5 5 ) ) ; popen ( f , . / t e s t 2 1 a arg1 arg2 , W ) ; i f l i n u x e r r o r < >0 then w r i t e l n ( e r r o r from POpen : L i n u x e r r o r : , L i n u x e r r o r ) ; f o r i : = 1 to 1 0 do w r i t e l n ( f , T h i s i s w r i t t e n t o t h e pipe , and should appear on s t d o u t . ) ; Flush ( f ) ; W r i t e l n ( The s c r i p t e x i t e d w i t h s t a t u s : , PClose ( f ) ) ; writeln ; w r i t e l n ( Press < r e t u r n > t o remove s h e l l s c r i p t . ) ; readln ; assign ( f , test21a ) ; erase ( f ) end .
31.12.84
ReadDir
Synopsis: Read entry from directory Declaration: function ReadDir(p: PDir) : pdirent
1110
Visibility: default Description: ReadDir reads the next entry in the directory pointed to by p. It returns a pdirent pointer to a structure describing the entry. If the next entry cant be read, Nil is returned. For an example, see OpenDir (1107). Errors: Errors are returned in LinuxError. See also: CloseDir (1068), OpenDir (1107), SeekDir (1112), TellDir (1128)
31.12.85
ReadLink
Synopsis: Read destination of symbolic link Declaration: function ReadLink(name: pchar;linkname: pchar;maxlen: LongInt) : LongInt function ReadLink(name: PathStr) : PathStr Visibility: default Description: ReadLink returns the le the symbolic link name is pointing to. The rst form of this function accepts a buffer linkname of length maxlen where the lename will be stored. It returns the actual number of characters stored in the buffer. The second form of the function returns simply the name of the le. Errors: On error, the rst form of the function returns -1; the second one returns an empty string. LinuxError is set to report errors: SYS_ENOTDIRA part of the path in Name is not a directory. SYS_EINVALmaxlen is not positive, or the le is not a symbolic link. SYS_ENAMETOOLONGA pathname, or a component of a pathname, was too long. SYS_ENOENTthe link name does not exist. SYS_EACCESNo permission to search a directory in the path SYS_ELOOPToo many symbolic links were encountered in translating the pathname. SYS_EIOAn I/O error occurred while reading from the le system. SYS_EFAULTThe buffer is not part of the the processs memory space. SYS_ENOMEMNot enough kernel memory was available. See also: SymLink (1120) Listing: ./olinuxex/ex62.pp
Program Example62 ; { Program t o demonstrate t h e ReadLink f u n c t i o n . } Uses o l d l i n u x ; Var F : Text ; S : String ; begin Assign ( F , t e s t . t x t ) ; Rewrite ( F ) ; Writeln ( F , This i s w r i t t e n to t e s t . t x t ) ;
1111
Close ( f ) ; { new . t x t and t e s t . t x t are now t h e same f i l e } i f not SymLink ( t e s t . t x t , new . t x t ) then w r i t e l n ( E r r o r when s y m l i n k i n g ! ) ; S: = ReadLink ( new . t x t ) ; I f S= then Writeln ( Error reading l i n k ! ) Else W r i t e l n ( L i n k p o i n t s t o : ,S ) ; { Now remove l i n k s } I f not U n l i n k ( new . t x t ) then W r i t e l n ( E r r o r when u n l i n k i n g ! ) ; I f not U n l i n k ( t e s t . t x t ) then W r i t e l n ( E r r o r when u n l i n k i n g ! ) ; end .
31.12.86
ReadTimezoneFile
Synopsis: Read the timezone le and initialize time routines Declaration: procedure ReadTimezoneFile(fn: string) Visibility: default Description: ReadTimeZoneFile reads the timezone le fn and initializes the local time routines based on the information found there. There should be no need to call this function. The initialization routines of the linux unit call this routine at unit startup. Errors: None. See also: GetTimezoneFile (1096), GetLocalTimezone (1093)
31.12.87
SeekDir
Synopsis: Seek to position in directory Declaration: procedure SeekDir(p: PDir;off: LongInt) Visibility: default Description: SeekDir sets the directory pointer to the off-th entry in the directory structure pointed to by p. For an example, see OpenDir (1107). Errors: Errors are returned in LinuxError. See also: CloseDir (1068), ReadDir (1110), OpenDir (1107), TellDir (1128)
31.12.88
Select
Synopsis: Wait for events on le descriptors Declaration: function Select(N: LongInt;readfds: pfdset;writefds: pfdset; exceptfds: pfdset;TimeOut: ptimeval) : LongInt function Select(N: LongInt;readfds: pfdset;writefds: pfdset; exceptfds: pfdset;TimeOut: LongInt) : LongInt 1112
Visibility: default Description: Select checks one of the le descriptors in the FDSets to see if its status changed. readfds, writefds and exceptfds are pointers to arrays of 256 bits. If you want a le descriptor to be checked, you set the corresponding element in the array to 1. The other elements in the array must be set to zero. Three arrays are passed : The entries in readfds are checked to see if characters become available for reading. The entries in writefds are checked to see if it is OK to write to them, while entries in exceptfds are cheked to see if an exception occorred on them. You can use the functions FD_ZERO (1082)FD_Clr (1081), FD_Set (1082) or FD_IsSet (1082) to manipulate the individual elements of a set. The pointers can be Nil. N is the largest index of a nonzero entry plus 1. (= the largest le-descriptor + 1). TimeOut can be used to set a time limit. If TimeOut can be two types : 1.TimeOut is of type PTime and contains a zero time, the call returns immediately. If TimeOut is Nil, the kernel will wait forever, or until a status changed. 2.TimeOut is of type Longint. If it is -1, this has the same effect as a Timeout of type PTime which is Nil. Otherwise, TimeOut contains a time in milliseconds. When the TimeOut is reached, or one of the le descriptors has changed, the Select call returns. On return, it will have modied the entries in the array which have actually changed, and it returns the number of entries that have been changed. If the timout was reached, and no decsriptor changed, zero is returned; The arrays of indexes are undened after that. On error, -1 is returned. Errors: On error, the function returns -1, and Errors are reported in LinuxError : SYS_EBADFAn invalid descriptor was specied in one of the sets. SYS_EINTRA non blocked signal was caught. SYS_EINVALN is negative or too big. SYS_ENOMEMSelect was unable to allocate memory for its internal tables. See also: SelectText (1113), GetFS (1092), FD_ZERO (1082), FD_Clr (1081), FD_Set (1082), FD_IsSet (1082) Listing: ./olinuxex/ex33.pp
Program Example33 ; { Program t o demonstrate t h e S e l e c t f u n c t i o n . } Uses o l d l i n u x ; Var FDS : FDSet ; begin FD_Zero ( FDS ) ; FD_Set ( 0 , FDS ) ; W r i t e l n ( Press t h e <ENTER> t o { Wait u n t i l F i l e d e s c r i p t o r 0 S e l e c t ( 1 ,@FDS, n i l , n i l , n i l ) ; { Get r i d o f <ENTER> i n b u f f e r readln ; W r i t e l n ( Press <ENTER> key i n FD_Zero ( FDS ) ;
1113
FD_Set ( 0 , FDS ) ; i f S e l e c t ( 1 ,@FDS, n i l , n i l , 2 0 0 0 ) > 0 then W r i t e l n ( Thank you ! ) { FD_ISSET ( 0 ,FDS ) would be t r u e here . } else W r i t e l n ( Too l a t e ! ) ; end .
31.12.89
SelectText
Synopsis: Wait for event on typed ontyped le. Declaration: function SelectText(var T: Text;TimeOut: ptimeval) : LongInt function SelectText(var T: Text;TimeOut: LongInt) : LongInt Visibility: default Description: SelectText executes the Select (1112) call on a le of type Text. You can specify a timeout in TimeOut. The SelectText call determines itself whether it should check for read or write, depending on how the le was opened : With Reset it is checked for reading, with Rewrite and Append it is checked for writing. Errors: See Select (1112). SYS_EBADF can also mean that the le wasnt opened. See also: Select (1112), GetFS (1092)
31.12.90
SetDate
Synopsis: Set the current system date. Declaration: function SetDate(Year: Word;Month: Word;Day: Word) : Boolean Visibility: default Description: SetDate sets the system date to year, month, day. This is the kernel date, so it is in GMT. The time is not touched. The function returns True if the call was executed corretly, False otherwise. Remark: You must be root to execute this call. Errors: Errors are returned in LinuxError (1058) See also: GetDate (1088), SetTime (1115), SetDateTime (1114)
31.12.91
SetDateTime
Synopsis: Set the current system date and time Declaration: function SetDateTime(Year: Word;Month: Word;Day: Word;hour: Word; minute: Word;second: Word) : Boolean Visibility: default Description: SetDate sets the system date and time to year, month, day, hour, min, Sec. This is the kernel date/time, so it is in GMT. The time is not touched. The function returns True if the call was executed corretly, False otherwise. Remark: You must be root to execute this call. Errors: Errors are returned in LinuxError (1058) See also: SetDate (1113), SetTime (1115), GetDateTime (1089) 1114
31.12.92
SetPriority
Synopsis: Set process priority Declaration: procedure SetPriority(Which: Integer;Who: Integer;What: Integer) Visibility: default Description: SetPriority sets the priority with which a process is running. Which process(es) is determined by the Which and Who variables. Which can be one of the pre-dened constants: Prio_ProcessWho is interpreted as process ID Prio_PGrpWho is interpreted as process group ID Prio_UserWho is interpreted as user ID Prio is a value in the range -20 to 20. For an example, see Nice (1106). Errors: Error checking must be done on LinuxError, since a priority can be negative. sys_esrchNo process found using which and who. sys_einvalWhich was not one of Prio_Process, Prio_Grp or Prio_User. sys_epermA process was found, but neither its effective or real user ID match the effective user ID of the caller. sys_eaccesA non-superuser tried to a priority increase. See also: GetPriority (1095), Nice (1106)
31.12.93
SetTime
Synopsis: Set the current system time. Declaration: function SetTime(Hour: Word;Min: Word;Sec: Word) : Boolean Visibility: default Description: SetTime sets the system time to hour, min, Sec. This is the kernel time, so it is in GMT. The date is not touched. The function returns True if the call was executed corretly, False otherwise. Remark: You must be root to execute this call. Errors: Errors are returned in LinuxError (1058) See also: GetTime (1095), SetDate (1113), SetDateTime (1114)
31.12.94
Shell
Synopsis: Execute and feed command to system shell Declaration: function Shell(const Command: string) : LongInt function Shell(const Command: AnsiString) : LongInt Visibility: default Description: Shell invokes the bash shell (/bin/sh), and feeds it the command Command (using the -c option). The function then waits for the command to complete, and then returns the exit status of the command, or 127 if it could not complete the Fork (1084) or Execve (1075) calls. 1115
Errors: Errors are reported in LinuxError. See also: POpen (1109), Fork (1084), Execve (1075) Listing: ./olinuxex/ex56.pp
program example56 ; uses o l d l i n u x ; { Program t o demonstrate t h e S h e l l f u n c t i o n } Var S : L o n g i n t ; begin W r i t e l n ( Output o f l s l . pp ) ; S: = S h e l l ( l s l . pp ) ; W r i t e l n ( Command e x i t e d wwith s t a t u s : end .
,S ) ;
31.12.95
SigAction
Synopsis: Install signal handler Declaration: procedure SigAction(Signum: LongInt;Act: PSigActionRec; OldAct: PSigActionRec) Visibility: default Description: Changes the action to take upon receipt of a signal. Act and Oldact are pointers to a SigActionRec record. SigNum species the signal, and can be any signal except SIGKILL or SIGSTOP. If Act is non-nil, then the new action for signal SigNum is taken from it. If OldAct is non-nil, the old action is stored there. Sa_Handler may be SIG_DFL for the default action or SIG_IGN to ignore the signal. Sa_Mask Species which signals should be ignord during the execution of the signal handler. Sa_Flags Speciees a series of ags which modify the behaviour of the signal handler. You can or none or more of the following : SA_NOCLDSTOPIf signum is SIGCHLD do not receive notication when child processes stop. SA_ONESHOT or SA_RESETHANDRestore the signal action to the default state once the signal handler has been called. SA_RESTARTFor compatibility with BSD signals. SA_NOMASK or SA_NODEFERDo not prevent the signal from being received from within its own signal handler. Errors: LinuxError is used to report errors. sys_einvalan invalid signal was specied, or it was SIGKILL or SIGSTOP. sys_efaultAct,OldAct point outside this process address space sys_eintrSystem call was interrupted. See also: SigProcMask (1118), SigPending (1118), SigSuspend (1119), Kill (1099) Listing: ./olinuxex/ex57.pp
1116
Program example57 ; { Program t o demonstrate t h e S i g A c t i o n f u n c t i o n . } { do a k i l l USR1 p i d from a n o t h e r t e r m i n a l t o see what happens . r e p l a c e p i d w i t h t h e r e a l p i d o f t h i s program . You can g e t t h i s p i d by r u n n i n g ps . } uses o l d l i n u x ; Var oa , na : PSigActionRec ; Procedure DoSig ( s i g : L o n g i n t ) ; cdecl ; begin writeln ( Receiving s i g n a l : , sig ) ; end ; begin new( na ) ; new( oa ) ; na ^ . Handler . sh : =@DoSig ; na ^ . Sa_Mask : = 0 ; na ^ . Sa_Flags : = 0 ; na ^ . Sa_Restorer : = N i l ; S i g A c t i o n ( SigUsr1 , na , oa ) ; i f L i n u x E r r o r < >0 then begin writeln ( Error : , linuxerror , . ) ; halt ( 1 ) ; end ; W r i t e l n ( Send USR1 s i g n a l o r press <ENTER> t o e x i t ) ; readln ; end .
31.12.96
Signal
Synopsis: Install signal handler (deprecated) Declaration: function Signal(Signum: LongInt;Handler: SignalHandler) : SignalHandler Visibility: default Description: Signal installs a new signal handler for signal SigNum. This call has the same functionality as the SigAction call. The return value for Signal is the old signal handler, or nil on error. Errors: LinuxError is used to report errors : SIG_ERRAn error occurred. See also: SigAction (1115), Kill (1099) Listing: ./olinuxex/ex58.pp
1117
Program example58 ; { Program t o demonstrate t h e S i g n a l f u n c t i o n . } { do a k i l l USR1 p i d from a n o t h e r t e r m i n a l t o see what happens . r e p l a c e p i d w i t h t h e r e a l p i d o f t h i s program . You can g e t t h i s p i d by r u n n i n g ps . } uses o l d l i n u x ; Procedure DoSig ( s i g : L o n g i n t ) ; cdecl ; begin writeln ( Receiving s i g n a l : , sig ) ; end ; begin SigNal ( SigUsr1 , @DoSig ) ; i f L i n u x E r r o r < >0 then begin writeln ( Error : , linuxerror , . ) ; halt ( 1 ) ; end ; W r i t e l n ( Send USR1 s i g n a l o r press <ENTER> t o e x i t ) ; readln ; end .
31.12.97
SigPending
Synopsis: Return set of currently pending signals Declaration: function SigPending : SigSet Visibility: default Description: Sigpending allows the examination of pending signals (which have been raised while blocked.) The signal mask of pending signals is returned. Errors: None See also: SigAction (1115), SigProcMask (1118), SigSuspend (1119), Signal (1117), Kill (1099)
31.12.98
SigProcMask
Synopsis: Set list of blocked signals Declaration: procedure SigProcMask(How: LongInt;SSet: PSigSet;OldSSet: PSigSet) Visibility: default Description: Changes the list of currently blocked signals. The behaviour of the call depends on How : SIG_BLOCKThe set of blocked signals is the union of the current set and the SSet argument. SIG_UNBLOCKThe signals in SSet are removed from the set of currently blocked signals. 1118
SIG_SETMASKThe list of blocked signals is set so SSet. If OldSSet is non-nil, then the old set is stored in it. Errors: LinuxError is used to report errors. sys_efaultSSet or OldSSet point to an adress outside the range of the process. sys_eintrSystem call was interrupted. See also: SigAction (1115), SigPending (1118), SigSuspend (1119), Kill (1099)
31.12.99
SigRaise
Synopsis: Raise a signal (send to current process) Declaration: procedure SigRaise(Sig: Integer) Visibility: default Description: SigRaise sends a Sig signal to the current process. Errors: None. See also: Kill (1099), GetPid (1094) Listing: ./olinuxex/ex65.pp
Program example64 ; { Program t o demonstrate t h e SigRaise f u n c t i o n . } uses o l d l i n u x ; Var oa , na : PSigActionRec ; Procedure DoSig ( s i g : L o n g i n t ) ; cdecl ; begin writeln ( Receiving s i g n a l : , sig ) ; end ; begin new( na ) ; new( oa ) ; na ^ . h a n d l e r . sh : =@DoSig ; na ^ . Sa_Mask : = 0 ; na ^ . Sa_Flags : = 0 ; na ^ . Sa_Restorer : = N i l ; S i g A c t i o n ( SigUsr1 , na , oa ) ; i f L i n u x E r r o r < >0 then begin writeln ( Error : , linuxerror , . ) ; halt ( 1 ) ; end ; W r i t e l n ( Sending USR1 ( , s i g u s r 1 , ) s i g n a l t o s e l f . ) ; SigRaise ( s i g u s r 1 ) ; end .
1119
31.12.100
SigSuspend
Synopsis: Set signal mask and suspend process till signal is received Declaration: procedure SigSuspend(Mask: SigSet) Visibility: default Description: SigSuspend temporarily replaces the signal mask for the process with the one given in Mask, and then suspends the process until a signal is received. Errors: None See also: SigAction (1115), SigProcMask (1118), SigPending (1118), Signal (1117), Kill (1099)
31.12.101
StringToPPChar
Synopsis: Split string in list of null-terminated strings Declaration: function StringToPPChar(var S: string) : ppchar function StringToPPChar(var S: AnsiString) : ppchar function StringToPPChar(S: Pchar) : ppchar Visibility: default Description: StringToPPChar splits the string S in words, replacing any whitespace with zero characters. It returns a pointer to an array of pchars that point to the rst letters of the words in S. This array is terminated by a Nil pointer. The function does not add a zero character to the end of the string unless it ends on whitespace. The function reserves memory on the heap to store the array of PChar; The caller is responsible for freeing this memory. This function can be called to create arguments for the various Exec calls. Errors: None. See also: CreateShellArgV (1068), Execve (1075), Execv (1074) Listing: ./olinuxex/ex70.pp
Program Example70 ; { Program t o demonstrate t h e StringToPPchar f u n c t i o n . } Uses o l d l i n u x ; Var S : S t r i n g ; P : PPChar ; I : longint ; begin / / remark whitespace a t end . S: = T h i s i s a s t r i n g w i t h words . ; P: = StringToPPChar (S ) ; I :=0; While P [ i ] < > N i l do begin W r i t e l n ( Word , i , : ,P [ i ] ) ; Inc ( I ) ;
1120
31.12.102
SymLink
Synopsis: Create a symbolic link Declaration: function SymLink(OldPath: PathStr;NewPath: PathStr) : Boolean Visibility: default Description: SymLink makes Newpath point to the le in OldPath, which doesnt necessarily exist. The two les DO NOT have the same inode number. This is known as a soft link. The permissions of the link are irrelevant, as they are not used when following the link. Ownership of the le is only checked in case of removal or renaming of the link. The function returns True if the call was succesfull, False if the call failed. Errors: Errors are returned in LinuxError. sys_epermThe lesystem containing oldpath and newpath does not support linking les. sys_eaccessWrite access for the directory containing Newpath is disallowed, or one of the directories in OldPath or NewPath has no search (=execute) permission. sys_enoentA directory entry in OldPath or NewPath does not exist or is a symbolic link pointing to a non-existent directory. sys_enotdirA directory entry in OldPath or NewPath is nor a directory. sys_enomemInsufcient kernel memory. sys_erofsThe les are on a read-only lesystem. sys_eexistNewPath already exists. sys_eloopOldPath or NewPath has a reference to a circular symbolic link, i.e. a symbolic link, whose expansion points to itself. sys_enospcThe device containing NewPath has no room for another entry. See also: Link (1100), UnLink (1130), ReadLink (1110) Listing: ./olinuxex/ex22.pp
Program Example22 ; { Program t o demonstrate t h e SymLink and UnLink f u n c t i o n s . } Uses o l d l i n u x ; Var F : Text ; S : String ; begin Assign ( F , t e s t . t x t ) ; Rewrite ( F ) ; Writeln ( F , This i s w r i t t e n to t e s t . t x t ) ; Close ( f ) ; { new . t x t and t e s t . t x t are now t h e same f i l e } i f not SymLink ( t e s t . t x t , new . t x t ) then
1121
w r i t e l n ( E r r o r when s y m l i n k i n g ! ) ; { Removing t e s t . t x t s t i l l l e a v e s new . t x t P o i n t i n g now t o a none x i s t e n t f i l e ! } I f not U n l i n k ( t e s t . t x t ) then W r i t e l n ( E r r o r when u n l i n k i n g ! ) ; Assign ( f , new . t x t ) ; { T h i s should f a i l , s i n c e t h e s y m b o l i c l i n k p o i n t s t o a none x i s t e n t f i l e ! } { $ i } Reset ( F ) ; { $i+} I f IOResult =0 then W r i t e l n ( T h i s shouldn t happen ) ; { Now remove new . t x t a l s o } I f not U n l i n k ( new . t x t ) then W r i t e l n ( E r r o r when u n l i n k i n g ! ) ; end .
31.12.103
SysCall
Synopsis: Execute system call. Declaration: function SysCall(callnr: LongInt;var regs: SysCallRegs) : LongInt Visibility: default Description: SysCall can be used to execute a direct system call. The call parameters must be encoded in regs and the call number must be specied by callnr. The call result is returned, and any modied registers are in regs Errors: None. See also: SysCallregs (1053)
31.12.104
Sysinfo
Synopsis: Return kernel system information Declaration: function Sysinfo(var Info: TSysinfo) : Boolean Visibility: default Description: SysInfo returns system information in Info. Returned information in Info includes: uptimeNumber of seconds since boot. loads1, 5 and 15 minute load averages. totalramtotal amount of main memory. freeramamount of free memory. sharedramamount of shared memory. bufferramamount of memory used by buffers. totalswaptotal amount of swapspace. freeswapamount of free swapspace. procsnumber of current processes.
1122
31.12.105
S_ISBLK
Synopsis: Is le a block device Declaration: function S_ISBLK(m: Word) : Boolean Visibility: default Description: S_ISBLK checks the le mode m to see whether the le is a block device le. If so it returns True. See also: FStat (1087), S_ISLNK (1124), S_ISREG (1125), S_ISDIR (1123), S_ISCHR (1123), S_ISFIFO (1124), S_ISSOCK (1125)
1123
31.12.106
S_ISCHR
Synopsis: Is le a character device Declaration: function S_ISCHR(m: Word) : Boolean Visibility: default Description: S_ISCHR checks the le mode m to see whether the le is a character device le. If so it returns True. See also: FStat (1087), S_ISLNK (1124), S_ISREG (1125), S_ISDIR (1123), S_ISBLK (1123), S_ISFIFO (1124), S_ISSOCK (1125)
31.12.107
S_ISDIR
Synopsis: Is le a directory Declaration: function S_ISDIR(m: Word) : Boolean Visibility: default Description: S_ISDIR checks the le mode m to see whether the le is a directory. If so it returns True See also: FStat (1087), S_ISLNK (1124), S_ISREG (1125), S_ISCHR (1123), S_ISBLK (1123), S_ISFIFO (1124), S_ISSOCK (1125)
31.12.108
Synopsis: Is le a FIFO
S_ISFIFO
Declaration: function S_ISFIFO(m: Word) : Boolean Visibility: default Description: S_ISFIFO checks the le mode m to see whether the le is a fo (a named pipe). If so it returns True. See also: FStat (1087), S_ISLNK (1124), S_ISREG (1125), S_ISCHR (1123), S_ISBLK (1123), S_ISDIR (1123), S_ISSOCK (1125)
31.12.109
S_ISLNK
Synopsis: Is le a symbolic link Declaration: function S_ISLNK(m: Word) : Boolean Visibility: default Description: S_ISLNK checks the le mode m to see whether the le is a symbolic link. If so it returns True See also: FStat (1087), S_ISFIFO (1124), S_ISREG (1125), S_ISCHR (1123), S_ISBLK (1123), S_ISDIR (1123), S_ISSOCK (1125) Listing: ./olinuxex/ex53.pp
1124
Program Example53 ; { Program t o demonstrate t h e S_ISLNK f u n c t i o n . } Uses o l d l i n u x ; Var I n f o : S t a t ; begin i f L S t a t ( paramstr ( 1 ) , i n f o ) then begin i f S_ISLNK ( i n f o . mode ) then Writeln ( F i l e i s a l i n k ) ; i f S_ISREG ( i n f o . mode ) then Writeln ( F i l e i s a r e g u l a r f i l e ) ; i f S_ISDIR ( i n f o . mode ) then Writeln ( F i l e i s a d i r e c t o r y ) ; i f S_ISCHR ( i n f o . mode ) then Writeln ( F i l e i s a character device f i l e ) ; i f S_ISBLK ( i n f o . mode ) then Writeln ( F i l e i s a block device f i l e ) ; i f S_ISFIFO ( i n f o . mode ) then W r i t e l n ( F i l e i s a named p i p e ( FIFO ) ) ; i f S_ISSOCK ( i n f o . mode ) then Writeln ( F i l e i s a socket ) ; end ; end .
31.12.110
S_ISREG
Synopsis: Is le a regular le Declaration: function S_ISREG(m: Word) : Boolean Visibility: default Description: S_ISREG checks the le mode m to see whether the le is a regular le. If so it returns True See also: FStat (1087), S_ISFIFO (1124), S_ISLNK (1124), S_ISCHR (1123), S_ISBLK (1123), S_ISDIR (1123), S_ISSOCK (1125)
31.12.111
S_ISSOCK
Synopsis: Is le a unix socket Declaration: function S_ISSOCK(m: Word) : Boolean Visibility: default Description: S_ISSOCK checks the le mode m to see whether the le is a socket. If so it returns True. See also: FStat (1087), S_ISFIFO (1124), S_ISLNK (1124), S_ISCHR (1123), S_ISBLK (1123), S_ISDIR (1123), S_ISREG (1125)
1125
31.12.112
TCDrain
Synopsis: Terminal control: Wait till all data was transmitted Declaration: function TCDrain(fd: LongInt) : Boolean Visibility: default Description: TCDrain waits until all data to le descriptor Fd is transmitted. The function returns True if the call was succesfull, False otherwise. Errors: Errors are reported in LinuxError See also: TCFlow (1125), TCFlush (1126), TCGetAttr (1126), TCGetPGrp (1127), TCSendBreak (1127), TCSetAttr (1128), TCSetPGrp (1128), TTYName (1129), IsATTY (1099)
31.12.113
TCFlow
Synopsis: Terminal control: Suspend transmission of data Declaration: function TCFlow(fd: LongInt;act: LongInt) : Boolean Visibility: default Description: TCFlow suspends/resumes transmission or reception of data to or from the le descriptor Fd, depending on the action Act. This can be one of the following pre-dened values: TCOOFFsuspend reception/transmission TCOONresume reception/transmission TCIOFFtransmit a stop character to stop input from the terminal TCIONtransmit start to resume input from the terminal. The function returns True if the call was succesfull, False otherwise. Errors: Errors are reported in LinuxError. See also: TCDrain (1125), TCFlush (1126), TCGetAttr (1126), TCGetPGrp (1127), TCSendBreak (1127), TCSetAttr (1128), TCSetPGrp (1128), TTYName (1129), IsATTY (1099)
31.12.114
TCFlush
Synopsis: Terminal control: Discard data buffer Declaration: function TCFlush(fd: LongInt;qsel: LongInt) : Boolean Visibility: default Description: TCFlush discards all data sent or received to/from le descriptor fd. QSel indicates which queue should be discard. It can be one of the following pre-dened values : TCIFLUSHinput buffer TCOFLUSHoutput buffer TCIOFLUSHboth input and output buffers The function returns True if the call was succesfull, False otherwise. Errors: Errors are reported in LinuxError. See also: TCDrain (1125), TCFlow (1125), TCGetAttr (1126), TCGetPGrp (1127), TCSendBreak (1127), TCSetAttr (1128), TCSetPGrp (1128), TTYName (1129), IsATTY (1099) 1126
31.12.115
TCGetAttr
Synopsis: Terminal Control: Get terminal attributes Declaration: function TCGetAttr(fd: LongInt;var tios: Termios) : Boolean Visibility: default Description: TCGetAttr gets the terminal parameters from the terminal referred to by the le descriptor fd and returns them in a TermIOS structure tios. The function returns True if the call was succesfull, False otherwise. Errors: Errors are reported in LinuxError See also: TCDrain (1125), TCFlow (1125), TCFlush (1126), TCGetPGrp (1127), TCSendBreak (1127), TCSetAttr (1128), TCSetPGrp (1128), TTYName (1129), IsATTY (1099) Listing: ./olinuxex/ex55.pp
Program Example55 ; uses o l d l i n u x ; { Program t o demonstrate t h e TCGetAttr / T C S e t A t t r / CFMakeRaw f u n c t i o n s . } procedure ShowTermios ( var begin WriteLn ( I n p u t Flags : WriteLn ( Output Flags : WriteLn ( L i n e Flags : WriteLn ( C o n t r o l Flags : end ; t i o s : Termios ) ; $ $ $ $ , hexstr ( , hexstr ( , hexstr ( , hexstr ( tios tios tios tios . c_iflag . c_oflag . c_lflag . c_cflag ,8)+#13); ,8)); ,8)); ,8));
var oldios , t i o s : Termios ; begin WriteLn ( Old a t t r i b u t e s : ) ; TCGetAttr ( 1 , t i o s ) ; ShowTermios ( t i o s ) ; oldios := t i o s ; W r i t e l n ( S e t t i n g raw t e r m i n a l mode ) ; CFMakeRaw( t i o s ) ; T C S e t A t t r ( 1 ,TCSANOW, t i o s ) ; WriteLn ( C u r r e n t a t t r i b u t e s : ) ; TCGetAttr ( 1 , t i o s ) ; ShowTermios ( t i o s ) ; T C S e t A t t r ( 1 ,TCSANOW, o l d i o s ) ; end .
31.12.116
TCGetPGrp
Synopsis: Terminal control: Get process group Declaration: function TCGetPGrp(fd: LongInt;var id: LongInt) : Boolean Visibility: default
1127
Description: TCGetPGrp returns the process group ID of a foreground process group in Id The function returns True if the call was succesfull, False otherwise. Errors: Errors are reported in LinuxError See also: TCDrain (1125), TCFlow (1125), TCFlush (1126), TCGetAttr (1126), TCSendBreak (1127), TCSetAttr (1128), TCSetPGrp (1128), TTYName (1129), IsATTY (1099)
31.12.117
TCSendBreak
Synopsis: Terminal control: Send break Declaration: function TCSendBreak(fd: LongInt;duration: LongInt) : Boolean Visibility: default Description: TCSendBreak Sends zero-valued bits on an asynchrone serial connection decsribed by le-descriptor Fd, for duration Duration. The function returns True if the action was performed successfully, False otherwise. Errors: Errors are reported in LinuxError. See also: TCDrain (1125), TCFlow (1125), TCFlush (1126), TCGetAttr (1126), TCGetPGrp (1127), TCSetAttr (1128), TCSetPGrp (1128), TTYName (1129), IsATTY (1099)
31.12.118
TCSetAttr
Synopsis: Terminal control: Set attributes Declaration: function TCSetAttr(fd: LongInt;OptAct: LongInt;const tios: Termios) : Boolean Visibility: default Description: TCSetAttr sets the terminal parameters you specify in a TermIOS structureTios for the terminal referred to by the le descriptor Fd. OptAct species an optional action when the set need to be done, this could be one of the following pre-dened values: TCSANOWset immediately. TCSADRAINwait for output. TCSAFLUSHwait for output and discard all input not yet read. The function Returns True if the call was succesfull, False otherwise. For an example, see TCGetAttr (1126). Errors: Errors are reported in LinuxError. See also: TCDrain (1125), TCFlow (1125), TCFlush (1126), TCGetAttr (1126), TCGetPGrp (1127), TCSendBreak (1127), TCSetPGrp (1128), TTYName (1129), IsATTY (1099)
1128
31.12.119
TCSetPGrp
Synopsis: Terminal control: Set process group Declaration: function TCSetPGrp(fd: LongInt;id: LongInt) : Boolean Visibility: default Description: TCSetPGrp Sets the Process Group Id to Id. The function returns True if the call was successful, False otherwise. For an example, see TCGetPGrp (1127). Errors: Errors are returned in LinuxError. See also: TCDrain (1125), TCFlow (1125), TCFlush (1126), TCGetAttr (1126), TCGetPGrp (1127), TCSendBreak (1127), TCSetAttr (1128), TTYName (1129), IsATTY (1099)
31.12.120
TellDir
Synopsis: Return current location in a directory Declaration: function TellDir(p: PDir) : LongInt Visibility: default Description: TellDir returns the current location in the directory structure pointed to by p. It returns -1 on failure. For an example, see OpenDir (1107). Errors: Errors are returned in LinuxError. See also: CloseDir (1068), ReadDir (1110), SeekDir (1112), OpenDir (1107)
31.12.121
TTYname
Synopsis: Terminal control: Get terminal name Declaration: function TTYname(Handle: LongInt) : string function TTYname(var F: Text) : string Visibility: default Description: TTYNameReturns the name of the terminal pointed to by f. f must be a terminal. f can be of type: 1.longint for le handles; 2.Text for text variables such as input etc. Errors: Returns an empty string in case of an error. Linuxerror may be set to indicate what error occurred, but this is uncertain. See also: TCDrain (1125), TCFlow (1125), TCFlush (1126), TCGetAttr (1126), TCGetPGrp (1127), TCSendBreak (1127), TCSetAttr (1128), TCSetPGrp (1128), IsATTY (1099), IOCtl (1098)
1129
31.12.122
Umask
Synopsis: Set le creation mask. Declaration: function Umask(Mask: Integer) : Integer Visibility: default Description: Change the le creation mask for the current user to Mask. The current mask is returned. See also: Chmod (1063) Listing: ./olinuxex/ex27.pp
Program Example27 ; { Program t o demonstrate t h e Umask f u n c t i o n . } Uses o l d l i n u x ; begin W r i t e l n ( Old Umask was : ,Umask ( O c t a l ( 1 1 1 ) ) ) ; WRiteln ( New Umask i s : , Octal ( 1 1 1 ) ) ; end .
31.12.123
Uname
Synopsis: Return system name. Declaration: function Uname(var unamerec: utsname) : Boolean Visibility: default Description: Uname gets the name and conguration of the current linux kernel, and returns it in unamerec. Errors: LinuxError is used to report errors. See also: GetHostName (1093), GetDomainName (1089)
31.12.124
UnLink
Synopsis: Unlink (i.e. remove) a le. Declaration: function UnLink(Path: PathStr) : Boolean function UnLink(Path: pchar) : Boolean Visibility: default Description: UnLink decreases the link count on le Path. Path can be of type PathStr or PChar. If the link count is zero, the le is removed from the disk. The function returns True if the call was succesfull, False if the call failed. For an example, see Link (1100). Errors: Errors are returned in LinuxError. sys_eaccessYou have no write access right in the directory containing Path, or you have no search permission in one of the directory components of Path.
1130
sys_epermThe directory containing pathname has the sticky-bit set and the processs effective uid is neither the uid of the le to be deleted nor that of the directory containing it. sys_enoentA component of the path doesnt exist. sys_enotdirA directory component of the path is not a directory. sys_eisdirPath refers to a directory. sys_enomemInsufcient kernel memory. sys_erofsPath is on a read-only lesystem. See also: Link (1100), SymLink (1120)
31.12.125
Utime
Synopsis: Set access and modication times of a le (touch). Declaration: function Utime(const path: PathStr;utim: UTimeBuf) : Boolean Visibility: default Description: Utime sets the access and modication times of a le. the utimbuf record contains 2 elds, actime, and modtime, both of type Longint. They should be lled with an epoch-like time, specifying, respectively, the last access time, and the last modication time. For some lesystem (most notably, FAT), these times are the same. Errors: Errors are returned in LinuxError. sys_eaccessOne of the directories in Path has no search (=execute) permission. sys_enoentA directory entry in Path does not exist or is a symbolic link pointing to a non-existent directory. Other errors may occur, but arent documented. See also: GetEpochTime (1091), Chown (1065), Access (1058) Listing: ./olinuxex/ex25.pp
Program Example25 ; { Program t o demonstrate t h e UTime f u n c t i o n . } Uses o l d l i n u x ; Var u t i m : u t i m b u f ; year , month , day , hour , minute , second : Word ; begin { Set access and m o d i f i c a t i o n t i m e o f e x e c u t a b l e source } GetTime ( hour , minute , second ) ; GetDate ( year , month , day ) ; u t i m . actime : = LocalToEpoch ( year , month , day , hour , minute , second ) ; u t i m . modtime : = u t i m . actime ; i f not Utime ( ex25 . pp , u t i m ) then w r i t e l n ( C a l l t o UTime f a i l e d ! ) else begin Write ( Set access and m o d i f i c a t i o n t i m e s t o : ) ; Write ( Hour : 2 , : , minute : 2 , : , second , , ) ;
1131
31.12.126
WaitPid
Synopsis: Wait for a process to terminate Declaration: function WaitPid(Pid: LongInt;Status: pointer;Options: LongInt) : LongInt Visibility: default Description: WaitPid waits for a child process with process ID Pid to exit. The value of Pid can be one of the following: Pid < -1Causes WaitPid to wait for any child process whose process group ID equals the absolute value of pid. Pid = -1Causes WaitPid to wait for any child process. Pid = 0Causes WaitPid to wait for any child process whose process group ID equals the one of the calling process. Pid > 0Causes WaitPid to wait for the child whose process ID equals the value of Pid. The Options parameter can be used to specify further how WaitPid behaves: WNOHANGCauses Waitpid to return immediately if no child hasexited. WUNTRACEDCauses WaitPid to return also for children which are stopped, but whose status has not yet been reported. __WCLONECauses WaitPid also to wait for threads created by the Clone (1066) call. Upon return, it returns the exit status of the process, or -1 in case of failure. For an example, see Fork (1084). Errors: Errors are returned in LinuxError. See also: Fork (1084), Execve (1075)
31.12.127
WaitProcess
Synopsis: Wait for process to terminate. Declaration: function WaitProcess(Pid: LongInt) : LongInt Visibility: default Description: WaitProcess waits for process PID to exit. WaitProcess is equivalent to the WaitPID (1131) call: WaitPid(PID,@result,0) Handles of Signal interrupts (errno=EINTR), and returns the Exitcode of Process PID (>=0) or Status if it was terminated Errors: None. See also: WaitPID (1131), WTERMSIG (1133), WSTOPSIG (1133), WIFEXITED (1132), WIFSTOPPED (1133), WIFSIGNALED (1133), W_EXITCODE (1134), W_STOPCODE (1134), WEXITSTATUS (1132) 1132
31.12.128
WEXITSTATUS
Synopsis: Extract the exit status from the WaitPID (1131) result. Declaration: function WEXITSTATUS(Status: Integer) : Integer Visibility: default Description: WEXITSTATUS can be used to extract the exit status from Status, the result of the WaitPID (1131) call. See also: WaitPID (1131), WaitProcess (1132), WTERMSIG (1133), WSTOPSIG (1133), WIFEXITED (1132), WIFSTOPPED (1133), WIFSIGNALED (1133), W_EXITCODE (1134), W_STOPCODE (1134)
31.12.129
WIFEXITED
Synopsis: Check whether the process exited normally Declaration: function WIFEXITED(Status: Integer) : Boolean Visibility: default Description: WIFEXITED checks Status and returns True if the status indicates that the process terminated normally, i.e. was not stopped by a signal. See also: WaitPID (1131), WaitProcess (1132), WTERMSIG (1133), WSTOPSIG (1133), WIFSTOPPED (1133), WIFSIGNALED (1133), W_EXITCODE (1134), W_STOPCODE (1134), WEXITSTATUS (1132)
31.12.130
WIFSIGNALED
Synopsis: Check whether the process was exited by a signal. Declaration: function WIFSIGNALED(Status: Integer) : Boolean Visibility: default Description: WIFSIGNALED returns True if Status indicates that the process exited because it received a signal. See also: WaitPID (1131), WaitProcess (1132), WTERMSIG (1133), WSTOPSIG (1133), WIFEXITED (1132), WIFSTOPPED (1133), W_EXITCODE (1134), W_STOPCODE (1134), WEXITSTATUS (1132)
31.12.131
WIFSTOPPED
Synopsis: Check whether the process is currently stopped. Declaration: function WIFSTOPPED(Status: Integer) : Boolean Visibility: default Description: WIFSTOPPED checks Status and returns true if the process is currently stopped. This is only possible if WUNTRACED was specied in the options of WaitPID (1131). See also: WaitPID (1131), WaitProcess (1132), WTERMSIG (1133), WSTOPSIG (1133), WIFEXITED (1132), WIFSIGNALED (1133), W_EXITCODE (1134), W_STOPCODE (1134), WEXITSTATUS (1132)
1133
31.12.132
WSTOPSIG
Synopsis: Return the exit code from the process. Declaration: function WSTOPSIG(Status: Integer) : Integer Visibility: default Description: WSTOPSIG is an alias for WEXITSTATUS (1132). See also: WaitPID (1131), WaitProcess (1132), WTERMSIG (1133), WIFEXITED (1132), WIFSTOPPED (1133), WIFSIGNALED (1133), W_EXITCODE (1134), W_STOPCODE (1134), WEXITSTATUS (1132)
31.12.133
WTERMSIG
Synopsis: Return the signal that caused a process to exit. Declaration: function WTERMSIG(Status: Integer) : Integer Visibility: default Description: WTERMSIG extracts from Status the signal number which caused the process to exit. See also: WaitPID (1131), WaitProcess (1132), WSTOPSIG (1133), WIFEXITED (1132), WIFSTOPPED (1133), WIFSIGNALED (1133), W_EXITCODE (1134), W_STOPCODE (1134), WEXITSTATUS (1132)
31.12.134
W_EXITCODE
Synopsis: Construct an exit status based on an return code and signal. Declaration: function W_EXITCODE(ReturnCode: Integer;Signal: Integer) : Integer Visibility: default Description: W_EXITCODE combines ReturnCode and Signal to a status code t for WaitPid. See also: WaitPID (1131), WaitProcess (1132), WTERMSIG (1133), WSTOPSIG (1133), WIFEXITED (1132), WIFSTOPPED (1133), WIFSIGNALED (1133), W_STOPCODE (1134), WEXITSTATUS (1132)
31.12.135
W_STOPCODE
Synopsis: Construct an exit status based on a signal. Declaration: function W_STOPCODE(Signal: Integer) : Integer Visibility: default Description: W_STOPCODE constructs an exit status based on Signal, which will cause WIFSIGNALED (1133) to return True See also: WaitPID (1131), WaitProcess (1132), WTERMSIG (1133), WSTOPSIG (1133), WIFEXITED (1132), WIFSTOPPED (1133), WIFSIGNALED (1133), W_EXITCODE (1134), WEXITSTATUS (1132)
1134
Chapter 32
The ports unit implements the port constructs found in Turbo Pascal. It uses classes and default array properties to do this. The unit exists on linux, os/2 and dos. It is implemented only for compatibility with Turbo Pascal. Its usage is discouraged, because using ports is not portable programming, and the operating system may not even allow it (for instance Windows). Under linux, your program must be run as root, or the IOPerm call must be set in order to set appropriate permissions on the port access.
32.2
32.2.1
port : tport Default instance of type TPort (1136). Do not free. This variable is initialized in the unit initialization code, and freed at nalization. Since there is a default property for a variable of this type, a sentence as port[221]:=12; Will result in the integer 12 being written to port 221, if port is dened as a variable of type tport portb : tport Default instance of type TPort (1136). Do not free. This variable is initialized in the unit initialization code, and freed at nalization. Since there is a default property for a variable of this type, a sentence as portb[221]:=12; Will result in the byte 12 being written to port 221, if port is dened as a variable of type tport
1135
portl : tportl Default instance of type TPortL (1137). Do not free. This variable is initialized in the unit initialization code, and freed at nalization. Since there is a default property for a variable of this type, a sentence as portl[221]:=12; Will result in the longint 12 being written to port 221, if port is dened as a variable of type tport portw : tportw Default instance of type TPortW (1137). Do not free. This variable is initialized in the unit initialization code, and freed at nalization. Since there is a default property for a variable of this type, a sentence as portw[221]:=12; Will result in the word 12 being written to port 221, if port is dened as a variable of type tport
32.3
32.3.1
tport
Description
The TPort type is implemented specially for access to the ports in a TP compatible manner. There is no need to create an instance of this type: the standard TP variables are instantiated at unit initialization. See also: port (1135), TPortW (1137), TPortL (1137)
32.3.2
Page 1136
Property overview
Property pp Access rw Description Access integer-sized port by port number
32.3.3
tport.pp
Synopsis: Access integer-sized port by port number Declaration: Property pp[w: LongInt]: Byte; default Visibility: public Access: Read,Write Description: Access integer-sized port by port number
1136
32.4
32.4.1
tportl
Description
The TPortL type is implemented specially for access to the ports in a TP compatible manner. There is no need to create an instance of this type: the standard TP variables are instantiated at unit initialization. See also: portw (1136), TPort (1136), TPortL (1137)
32.4.2
Page 1137
Property overview
Property pp Access rw Description Access Longint-sized port by port number
32.4.3
tportl.pp
Synopsis: Access Longint-sized port by port number Declaration: Property pp[w: LongInt]: LongInt; default Visibility: public Access: Read,Write Description: Access Longint-sized port by port number
32.5
32.5.1
tportw
Description
The TPortW type is implemented specially for access to the ports in a TP compatible manner. There is no need to create an instance of this type: the standard TP variables are instantiated at unit initialization. See also: portw (1136), TPort (1136), TPortL (1137)
32.5.2
Page 1137
Property overview
Property pp Access rw Description Access word-sized port by port number
32.5.3
tportw.pp
Synopsis: Access word-sized port by port number Declaration: Property pp[w: LongInt]: Word; default Visibility: public Access: Read,Write Description: Access word-sized port by port number
1137
Chapter 33
This chapter describes the PRINTER unit for Free Pascal. It was written for dos by Florian Klaemp, and it was written for linux by Michael Van Canneyt, and has been ported to Windows and os/2 as well. Its basic functionality is the same for al supported systems, although there are minor differences on linux/unix.
33.2
33.2.1
Lst : text Lst is the standard printing device. On linux, Lst is set up using AssignLst(/tmp/PID.lst).
33.3
33.3.1
Synopsis: Assign text le to printing device Declaration: procedure AssignLst(var F: text;ToFile: string) Visibility: default Description: AssignLst Assigns to F a printing device - Unix only. ToFile is a string with the following form: |filename options : This sets up a pipe with the program lename, with the given options, such as in the popen() call. filename : Prints to le lename. Filename can contain the string PID (No Quotes), which will be replaced by the PID of your program. When closing lst, the le will be sent to lpr and deleted. (lpr should be in PATH) {filename|} Idem as previous, only the le is NOT sent to lpr, nor is it deleted. (useful for opening /dev/printer or for later printing) 1138
33.3.2
InitPrinter
Synopsis: Initialize the printer Declaration: procedure InitPrinter(const PrinterName: string) Visibility: default Description: Initialize the printer
33.3.3
IsLstAvailable
Synopsis: Determine whether printer is available. Declaration: function IsLstAvailable : Boolean Visibility: default Description: Determine whether printer is available.
1139
Chapter 34
34.2
Overview
This document describes the SOCKETS unit for Free Pascal. it was written for linux by Michael Van Canneyt, and ported to Windows by Florian Klaemp.
34.3
34.3.1
AF_APPLETALK = 5 Address family Appletalk DDP AF_ASH = 18 Address family: Ash AF_ATMPVC = 8 Address family: ATM PVCs AF_ATMSVC = 20 Address family: ATM SVCs 1140
AF_AX25 = 3 Address family Amateur Radio AX.25 AF_BLUETOOTH = 31 Address family: Bluetooth sockets AF_BRIDGE = 7 Address family Multiprotocol bridge AF_DECnet = 12 Address family: Reserved for DECnet project. AF_ECONET = 19 Address family: Acorn Econet AF_INET = 2 Address family Internet IP Protocol AF_INET6 = 10 Address family IP version 6 AF_IPX = 4 Address family Novell IPX AF_IRDA = 23 Address family: IRDA sockets AF_KEY = 15 Address family: PF_KEY key management API AF_LLC = 26 Address family: Linux LLC AF_LOCAL = 1 Address family: Unix socket AF_MAX = 32 Address family Maximum value 1141
AF_NETBEUI = 13 Address family: Reserved for 802.2LLC project AF_NETLINK = 16 Address family: ? AF_NETROM = 6 Address family Amateur radio NetROM AF_PACKET = 17 Address family: Packet family AF_PPPOX = 24 Address family: PPPoX sockets AF_ROSE = 11 Address family: Amateur Radio X.25 PLP AF_ROUTE = AF_NETLINK Address family: Alias to emulate 4.4BSD. AF_SECURITY = 14 Address family: Security callback pseudo AF AF_SNA = 22 Addresss family: Linux SNA project AF_TIPC = 30 Address family: TIPC sockets AF_UNIX = 1 Address family Unix domain sockets AF_UNSPEC = 0 Address family Not specied AF_WANPIPE = 25 Address family: Wanpipe API Sockets 1142
AF_X25 = 9 Address family Reserved for X.25 project EsockEACCESS = ESysEAcces Access forbidden error EsockEBADF = EsysEBADF Alias: bad le descriptor EsockEFAULT = EsysEFAULT Alias: an error occurred EsockEINTR = EsysEINTR Alias : operation interrupted EsockEINVAL = EsysEINVAL Alias: Invalid value specied EsockEMFILE = ESysEmfile Error code ? EsockEMSGSIZE = ESysEMsgSize Wrong message size error EsockENOBUFS = ESysENoBufs No buffer space available error EsockENOTCONN = ESysENotConn Not connected error EsockENOTSOCK = ESysENotSock File descriptor is not a socket error EsockEPROTONOSUPPORT = ESysEProtoNoSupport Protocol not supported error EsockEWOULDBLOCK = ESysEWouldBlock Operation would block error 1143
INADDR_ANY = (0) A bitmask matching any IP address on the local machine. INADDR_NONE = ($FFFFFFFF) A bitmask matching no valid IP address IPPROTO_AH = 51 authentication header. IPPROTO_COMP = 108 Compression Header Protocol. IPPROTO_DSTOPTS = 60 IPv6 destination options. IPPROTO_EGP = 8 Exterior Gateway Protocol. IPPROTO_ENCAP = 98 Encapsulation Header. IPPROTO_ESP = 50 encapsulating security payload. IPPROTO_FRAGMENT = 44 IPv6 fragmentation header. IPPROTO_GRE = 47 General Routing Encapsulation. IPPROTO_HOPOPTS = 0 IPv6 Hop-by-Hop options. IPPROTO_ICMP = 1 Internet Control Message Protocol. IPPROTO_ICMPV6 = 58 ICMPv6. 1144
IPPROTO_IDP = 22 XNS IDP protocol. IPPROTO_IGMP = 2 Internet Group Management Protocol. IPPROTO_IP = 0 Dummy protocol for TCP. IPPROTO_IPIP = 4 IPIP tunnels (older KA9Q tunnels use 94). IPPROTO_IPV6 = 41 IPv6 header. IPPROTO_MAX = 255 Maximum value for IPPROTO options IPPROTO_MTP = 92 Multicast Transport Protocol. IPPROTO_NONE = 59 IPv6 no next header. IPPROTO_PIM = 103 Protocol Independent Multicast. IPPROTO_PUP = 12 PUP protocol. IPPROTO_RAW = 255 Raw IP packets. IPPROTO_ROUTING = 43 IPv6 routing header. IPPROTO_RSVP = 46 Reservation Protocol. 1145
IPPROTO_SCTP = 132 Stream Control Transmission Protocol. IPPROTO_TCP = 6 Transmission Control Protocol. IPPROTO_TP = 29 SO Transport Protocol Class 4. IPPROTO_UDP = 17 User Datagram Protocol. IPV6_ADDRFORM = 1 Change the IPV6 address into a different address family. Deprecated IPV6_ADD_MEMBERSHIP = IPV6_JOIN_GROUP Undocumented Getsockopt option ? IPV6_AUTHHDR = 10 GetSockOpt/SetSockopt: Deliver authentication header messages IPV6_CHECKSUM = 7 Undocumented Getsockopt option ? IPV6_DROP_MEMBERSHIP = IPV6_LEAVE_GROUP Undocumented Getsockopt option ? IPV6_DSTOPTS = 4 Deliver destination option control messages IPV6_HOPLIMIT = 8 Deliver an integer containing the HOP count IPV6_HOPOPTS = 3 Deliver hop option control messages IPV6_IPSEC_POLICY = 34 Undocumented Getsockopt option ? 1146
IPV6_JOIN_ANYCAST = 27 Undocumented Getsockopt option ? IPV6_JOIN_GROUP = 20 GetSockOpt/SetSockopt: Control membership (join group) in multicast groups IPV6_LEAVE_ANYCAST = 28 Undocumented Getsockopt option ? IPV6_LEAVE_GROUP = 21 GetSockOpt/SetSockopt: Control membership (leave group)in multicast groups IPV6_MTU = 24 GetSockOpt/SetSockopt: Get/Set the MTU for the socket IPV6_MTU_DISCOVER = 23 GetSockOpt/SetSockopt: Get/Set Control path MTU Discovery on the socket IPV6_MULTICAST_HOPS = 18 GetSockOpt/SetSockopt: Get/Set the multicast hop limit. IPV6_MULTICAST_IF = 17 GetSockOpt/SetSockopt: Get/Set device for multicast packages on the socket. IPV6_MULTICAST_LOOP = 19 GetSockOpt/SetSockopt: Control whether socket sees multicast packages that it has sent itself IPV6_NEXTHOP = 9 sendmsg: set next hop for IPV6 datagram IPV6_PKTINFO = 2 Change delivery options for incoming IPV6 datagrams IPV6_PKTOPTIONS = 6 Undocumented Getsockopt option ? IPV6_PMTUDISC_DO = 2 Always DF. 1147
IPV6_PMTUDISC_DONT = 0 Never send DF frames. IPV6_PMTUDISC_WANT = 1 Use per route hints. IPV6_RECVERR = 25 GetSockOpt/SetSockopt: Control receiving of asynchroneous error options IPV6_ROUTER_ALERT = 22 GetSockOpt/SetSockopt: Get/Set Pass all forwarded packets containing router alert option IPV6_RTHDR = 5 Deliver routing header control messages IPV6_RTHDR_LOOSE = 0 Hop doesnt need to be neighbour. IPV6_RTHDR_STRICT = 1 Hop must be a neighbour. IPV6_RTHDR_TYPE_0 = 0 IPv6 Routing header type 0. IPV6_RXDSTOPTS = IPV6_DSTOPTS Undocumented Getsockopt option ? IPV6_RXHOPOPTS = IPV6_HOPOPTS Undocumented Getsockopt option ? IPV6_RXSRCRT = IPV6_RTHDR Undocumented Getsockopt option ? IPV6_UNICAST_HOPS = 16 GetSockOpt/SetSockopt: Get/Set unicast hop limit IPV6_V6ONLY = 26 GetSockOpt/SetSockopt: Handle IPV6 connections only 1148
IPV6_XFRM_POLICY = 35 Undocumented Getsockopt option ? IP_ADD_MEMBERSHIP = 35 add an IP group membership IP_ADD_SOURCE_MEMBERSHIP = 39 join source group IP_BLOCK_SOURCE = 38 block data from source IP_DEFAULT_MULTICAST_LOOP = 1 Undocumented ? IP_DEFAULT_MULTICAST_TTL = 1 Undocumented ? IP_DROP_MEMBERSHIP = 36 drop an IP group membership IP_DROP_SOURCE_MEMBERSHIP = 40 leave source group IP_HDRINCL = 3 Header is included with data. IP_MAX_MEMBERSHIPS = 20 Maximum group memberships for multicast messages IP_MSFILTER = 41 Undocumented ? IP_MTU_DISCOVER = 10 Undocumented ? IP_MULTICAST_IF = 32 set/get IP multicast i/f 1149
IP_MULTICAST_LOOP = 34 set/get IP multicast loopback IP_MULTICAST_TTL = 33 set/get IP multicast ttl IP_OPTIONS = 4 IP per-packet options. IP_PKTINFO = 8 Undocumented ? IP_PKTOPTIONS = 9 Undocumented ? IP_PMTUDISC = 10 Undocumented ? IP_PMTUDISC_DO = 2 Always DF. IP_PMTUDISC_DONT = 0 Never send DF frames. IP_PMTUDISC_WANT = 1 Use per route hints. IP_RECVERR = 11 Undocumented ? IP_RECVOPTS = 6 Receive all IP options w/datagram. IP_RECVRETOPTS = IP_RETOPTS Receive IP options for response. IP_RECVTOS = 13 Undocumented ? 1150
IP_RECVTTL = 12 Undocumented ? IP_RETOPTS = 7 Set/get IP per-packet options. IP_ROUTER_ALERT = 5 Undocumented ? IP_TOS = 1 IP type of service and precedence. IP_TTL = 2 IP time to live. IP_UNBLOCK_SOURCE = 37 unblock data from source MCAST_BLOCK_SOURCE = 43 block from given group MCAST_EXCLUDE = 0 Undocumented ? MCAST_INCLUDE = 1 Undocumented ? MCAST_JOIN_GROUP = 42 join any-source group MCAST_JOIN_SOURCE_GROUP = 46 join source-spec gruoup MCAST_LEAVE_GROUP = 45 leave any-source group MCAST_LEAVE_SOURCE_GROUP = 47 leave source-spec group 1151
MCAST_MSFILTER = 48 Undocumented ? MCAST_UNBLOCK_SOURCE = 44 unblock from given group MSG_CONFIRM = $0800 Send ags: Conform connection MSG_CTRUNC = $0008 Receive ags: Control Data was discarded (buffer too small) MSG_DONTROUTE = $0004 Send ags: dont use gateway MSG_DONTWAIT = $0040 Receive ags: Non-blocking operation request. MSG_EOF = MSG_FIN Alias for MSG_FIN MSG_EOR = $0080 Receive ags: End of record MSG_ERRQUERE = $2000 Receive ags: ? MSG_FIN = $0200 Receive ags: ? MSG_MORE = $8000 Receive ags: ? MSG_NOSIGNAL = $4000 Receive ags: Suppress SIG_PIPE signal. MSG_OOB = $0001 Receive ags: receive out-of-band data. 1152
MSG_PEEK = $0002 Receive ags: peek at data, dont remove from buffer. MSG_PROXY = $0010 Receive ags: ? MSG_RST = $1000 Receive ags: ? MSG_SYN = $0400 Receive ags: ? MSG_TRUNC = $0020 Receive ags: packet Data was discarded (buffer too small) MSG_TRYHARD = MSG_DONTROUTE Receive ags: ? MSG_WAITALL = $0100 Receive ags: Wait till operation completed. NoAddress : in_addr = (s_addr: 0) Constant indicating invalid (no) network address. NoAddress6 : in6_addr = (u6_addr16: (0, 0, 0, 0, 0, 0, 0, 0)) Constant indicating invalid (no) IPV6 network address. NoNet : in_addr = (s_addr: 0) Constant indicating invalid (no) network address. NoNet6 : in6_addr = (u6_addr16: (0, 0, 0, 0, 0, 0, 0, 0)) Constant indicating invalid (no) IPV6 network address. PF_APPLETALK = AF_APPLETALK Protocol family: Appletalk DDP PF_ASH = AF_ASH Protocol family: Ash 1153
PF_ATMPVC = AF_ATMPVC Protocol family: ATM PVCs PF_ATMSVC = AF_ATMSVC Protocol family: ATM SVCs PF_AX25 = AF_AX25 Protocol family: Amateur Radio AX.25 PF_BLUETOOTH = AF_BLUETOOTH Protocol family: Bluetooth sockets PF_BRIDGE = AF_BRIDGE Protocol family: Multiprotocol bridge PF_DECnet = AF_DECnet Protocol Family: DECNET project PF_ECONET = AF_ECONET Protocol family: Acorn Econet PF_INET = AF_INET Protocol family: Internet IP Protocol PF_INET6 = AF_INET6 Protocol family: IP version 6 PF_IPX = AF_IPX Protocol family: Novell IPX PF_IRDA = AF_IRDA Protocol family: IRDA sockets PF_KEY = AF_KEY Protocol family: Key management API PF_LLC = AF_LLC Protocol family: Linux LLC 1154
PF_LOCAL = AF_LOCAL Protocol family: Unix socket PF_MAX = AF_MAX Protocol family: Maximum value PF_NETBEUI = AF_NETBEUI Protocol family: Reserved for 802.2LLC project PF_NETLINK = AF_NETLINK Protocol family: ? PF_NETROM = AF_NETROM Protocol family:Amateur radio NetROM PF_PACKET = AF_PACKET Protocol family: Packet family PF_PPPOX = AF_PPPOX Protocol family: PPPoX sockets PF_ROSE = AF_ROSE Protocol family: Amateur Radio X.25 PLP PF_ROUTE = AF_ROUTE Protocol Family: ? PF_SECURITY = AF_SECURITY Protocol family: Security callback pseudo PF PF_SNA = AF_SNA Protocol Family: Linux SNA project PF_TIPC = AF_TIPC Protocol family: TIPC sockets PF_UNIX = AF_UNIX Protocol family: Unix domain sockets 1155
PF_UNSPEC = AF_UNSPEC Protocol family: Unspecied PF_WANPIPE = AF_WANPIPE Protocol family: Wanpipe API Sockets PF_X25 = AF_X25 Protocol family: Reserved for X.25 project SCM_SRCRT = IPV6_RXSRCRT Undocumented Getsockopt option ? SCM_TIMESTAMP = SO_TIMESTAMP Socket option: ? SHUT_RD = 0 Shutdown read part of full duplex socket SHUT_RDWR = 2 Shutdown read and write part of full duplex socket SHUT_WR = 1 Shutdown write part of full duplex socket SOCK_DGRAM = 2 Type of socket: datagram (conn.less) socket (UDP) SOCK_MAXADDRLEN = 255 Maximum socket address length for Bind (1165) call. SOCK_RAW = 3 Type of socket: raw socket SOCK_RDM = 4 Type of socket: reliably-delivered message SOCK_SEQPACKET = 5 Type of socket: sequential packet socket 1156
SOCK_STREAM = 1 Type of socket: stream (connection) type socket (TCP) SOL_ICMPV6 = 58 Socket level values for IPv6: ICMPV6 SOL_IP = 0 Undocumented ? SOL_IPV6 = 41 Socket level values for IPv6: IPV6 SOL_SOCKET = 1 Socket option level: Socket level SOMAXCONN = 128 Maximum queue length speciable by listen. SO_ACCEPTCONN = 30 Socket option: ? SO_ATTACH_FILTER = 26 Socket option: ? SO_BINDTODEVICE = 25 Socket option: ? SO_BROADCAST = 6 Socket option: Broadcast SO_BSDCOMPAT = 14 Socket option: ? SO_DEBUG = 1 Socket option level: debug SO_DETACH_FILTER = 27 Socket option: ? 1157
SO_DONTROUTE = 5 Socket option: Dont route SO_ERROR = 4 Socket option: Error SO_KEEPALIVE = 9 Socket option: keep alive SO_LINGER = 13 Socket option: ? SO_NO_CHECK = 11 Socket option: ? SO_OOBINLINE = 10 Socket option: ? SO_PASSCRED = 16 Socket option: ? SO_PEERCRED = 17 Socket option: ? SO_PEERNAME = 28 Socket option: ? SO_PRIORITY = 12 Socket option: ? SO_RCVBUF = 8 Socket option: receive buffer SO_RCVLOWAT = 18 Socket option: ? SO_RCVTIMEO = 20 Socket option: ? 1158
SO_REUSEADDR = 2 Socket option: Reuse address SO_SECURITY_AUTHENTICATION = 22 Socket option: ? SO_SECURITY_ENCRYPTION_NETWORK = 24 Socket option: ? SO_SECURITY_ENCRYPTION_TRANSPORT = 23 Socket option: ? SO_SNDBUF = 7 Socket option: Send buffer SO_SNDLOWAT = 19 Socket option: ? SO_SNDTIMEO = 21 Socket option: ? SO_TIMESTAMP = 29 Socket option: ? SO_TYPE = 3 Socket option: Type S_IN = 0 Input socket in socket pair. S_OUT = 1 Output socket in socket pair TCP_CONGESTION = 13 Get/set the congestion-control algorithm for this socket TCP_CORK = 3 Get/Set CORK algorithm: Send only complete packets 1159
TCP_DEFER_ACCEPT = 9 Get/Set deferred accept on server socket TCP_INFO = 11 Get TCP connection information (linux only) TCP_KEEPCNT = 6 Get/Set retry count for unacknowledged KEEPALIVE transmissions. TCP_KEEPIDLE = 4 Get/Set inactivity interval between KEEPALIVE transmissions. TCP_KEEPINTVL = 5 Get/Set retry interval for unacknowledged KEEPALIVE transmissions. TCP_LINGER2 = 8 Get/Set Linger2 ag TCP_MAXSEG = 2 Get/Set Maximum segment size TCP_MD5SIG = 14 Get/Set TCP MD5 signature option TCP_NODELAY = 1 Get/Set No delay ag: disable Nagle algorithm TCP_QUICKACK = 12 Get/Set quik ACK packet option. TCP_SYNCNT = 7 Get/Set number of SYN packets to send before givin up on connection establishment TCP_WINDOW_CLAMP = 10 Get/Set maximum packet size UDP_CORK = 1 Get/Set UDP CORK algorithm on datagram sockets 1160
UDP_ENCAP = 100 Get/Set UDP encapsulation ag for IPSec datagram sockets UDP_ENCAP_ESPINUDP = 2 ? Undocumented datagram option, IPSec related UDP_ENCAP_ESPINUDP_NON_IKE = 1 ? Undocumented datagram option, IPSec related UDP_ENCAP_L2TPINUDP = 3 ? Undocumented datagram option, IPSec related
34.3.2
Types
Record used to describe a general IPV6 address. in_addr = packed record end
General inet socket address. linger = packed record l_onoff : cint; l_linger : cint; end
This record is used in the fpsetsockopt (1175) call to specify linger options. PIn6Addr = pin6_addr Pointer to in6_addr (1161) type. pin6_addr = ^in6_addr Pointer to Tin6_addr (1163) PInAddr = pin_addr Alias for pin_addr (1162) PInetSockAddr = psockaddr_in 1161
Pointer to sockaddr_in (1162) PInetSockAddr6 = psockaddr_in6 Pointer to sockaddr_in6 (1163) type pin_addr = ^in_addr Pointer to in_addr (1161) record. plinger = ^linger Pointer to linger (1161) type. psockaddr = ^sockaddr Pointer to TSockAddr (1163) psockaddr_in = ^sockaddr_in Pointer to sockaddr_in (1162) psockaddr_in6 = ^sockaddr_in6 Pointer to sockaddr_in6 (1163) psockaddr_un = ^sockaddr_un Pointer to sockaddr_un (1163) type. sa_family_t = cushort Address family type sockaddr = packed record end
sockaddr is used to store a general socket addres for the Bind (1165), Recv (102) and Send (102) calls. sockaddr_in = packed record end
sockaddr_in is used to store a INET socket addres for the Bind (1165), Recv (102) and Send (102) calls.
1162
sockaddr_in6 = packed record sin6_family : sa_family_t; sin6_port : cuint16; sin6_flowinfo : cuint32; sin6_addr : in6_addr; sin6_scope_id : cuint32; end
Alias for sockaddr_in6 (1163) sockaddr_un = packed record sun_family : sa_family_t; sun_path : Array[0..107] of Char; end
sockaddr_un is used to store a UNIX socket addres for the Bind (1165), Recv (102) and Send (102) calls. TIn6Addr = in6_addr Alias for in6_addr (1161) type. Tin6_addr = in6_addr Alias for sockaddr_in6 (1163) TInAddr = in_addr Alias for in_addr (1161) record type. TInetSockAddr = sockaddr_in Alias for sockaddr_in (1162) TInetSockAddr6 = sockaddr_in6 Alias for sockaddr_in6 (1163) TIn_addr = in_addr Alias for in_addr (1161) record type. TLinger = linger Alias for linger (1161) TSockAddr = sockaddr
Type returned by the SocketPair (102) call. Tsocket = LongInt Alias for easy kylix porting TSockLen = BaseUnix.TSocklen The actual type of TSockLen depends on the platform. TSockPairArray = Array[0..1] of LongInt Array of sockets, used in SocketPair (102) call. TUnixSockAddr = packed record family : sa_family_t; path : Array[0..107] of Char; end
34.4
34.4.1
Synopsis: Accept a connection from a socket (deprecated). Declaration: function Accept(Sock: LongInt;var var SockOut: File) function Accept(Sock: LongInt;var var SockOut: text) function Accept(Sock: LongInt;var var SockOut: text) function Accept(Sock: LongInt;var var SockOut: File) Visibility: default Description: Accept accepts a connection from a socket Sock, which was listening for a connection. If a connection is accepted, a le descriptor is returned. On error -1 is returned. The returned socket may NOT be used to accept more connections. The original socket remains open. The Accept call lls the address of the connecting entity in Addr, and sets its length in Addrlen. Addr should be pointing to enough space, and Addrlen should be set to the amount of space available, prior to the call. The alternate forms of the Accept (1164) command, with the Text or File parameters are equivalent to subsequently calling the regular Accept (1164) function and the Sock2Text (1180) or Sock2File (1180) functions. These functions return True if successful, False otherwise. Errors: On error, -1 is returned, and errors are reported in SocketError, and include the following: SYS_EBADFThe socket descriptor is invalid.
1164
SYS_ENOTSOCKThe descriptor is not a socket. SYS_EOPNOTSUPPThe socket type doesnt support the Listen operation. SYS_EFAULTAddr points outside your address space. SYS_EWOULDBLOCKThe requested operation would block the process. See also: Listen (102), Connect (1166), Bind (1165) Listing: ./sockex/socksvr.pp
Program s e r v e r ; { Program t o t e s t Sockets u n i t by Michael van Canneyt and P e t e r Vreman Server Version , F i r s t Run sock_svr t o l e t i t c r e a t e a s o c k e t and then s o c k _ c l i t o connect t o t h a t s o c k e t } { $mode f p c } uses Sockets ; Var FromName Buffer S Sin , Sout SAddr
: : : : :
procedure p e r r o r ( const S : s t r i n g ) ; begin writeln ( S, SocketError ) ; halt (100); end ; begin S: = f p S o c k e t ( AF_INET ,SOCK_STREAM, 0 ) ; i f S o c k e t E r r o r < >0 then P e r r o r ( Server : Socket : ) ; SAddr . s i n _ f a m i l y : = AF_INET ; { p o r t 5 0 0 0 0 i n network o r d e r } SAddr . s i n _ p o r t : = htons ( 5 0 0 0 ) ; SAddr . s i n _ a d d r . s_addr : = 0 ; i f f p B i n d ( S , @SAddr , s i z e o f ( saddr ))= 1 then P E r r o r ( Server : Bind : ) ; i f f p L i s t e n ( S,1)= 1 then P E r r o r ( Server : L i s t e n : ) ; W r i t e l n ( W a i t i n g f o r Connect from C l i e n t , run now s o c k _ c l i i n an o t h e r t t y ) ; i f Accept ( S , FromName , Sin , Sout ) then P E r r o r ( Server : Accept : +fromname ) ; Reset ( Sin ) ; ReWrite ( Sout ) ; W r i t e l n ( Sout , Message From Server ) ; Flush ( SOut ) ; while not eof ( sin ) do begin Readln ( Sin , B u f f e r ) ; W r i t e l n ( Server : read : , b u f f e r ) ; end ; end .
1165
34.4.2
Bind
Synopsis: Bind a socket to an address (deprecated). Declaration: function Bind(Sock: LongInt;const addr: string) : Boolean Visibility: default Description: Bind binds the socket Sock to address Addr. Addr has length Addrlen. The function returns True if the call was succesful, False if not. The form of the Bind command with the TUnixSockAddr (1164) is equivalent to subsequently calling Str2UnixSockAddr (1181) and the regular Bind function. The function returns True if successfull, False otherwise. Errors: Errors are returned in SocketError and include the following: SYS_EBADFThe socket descriptor is invalid. SYS_EINVALThe socket is already bound to an address, SYS_EACCESSAddress is protected and you dont have permission to open it. More arrors can be found in the Unix man pages. See also: Socket (1140)
34.4.3
CloseSocket
Synopsis: Closes a socket handle. Declaration: function CloseSocket(Sock: LongInt) : LongInt Visibility: default Description: CloseSocket closes a socket handle. It returns 0 if the socket was closed succesfully, -1 if it failed. Errors: On error, -1 is returned. See also: Socket (1140)
34.4.4
Connect
addr: TInetSockAddr; SockOut: text) : Boolean addr: TInetSockAddr; SockOut: File) : Boolean addr: string;var SockIn: text; Boolean addr: string;var SockIn: File; Boolean
Synopsis: Open a connection to a server socket (deprecated). Declaration: function Connect(Sock: LongInt;const var SockIn: text;var function Connect(Sock: LongInt;const var SockIn: File;var function Connect(Sock: LongInt;const var SockOut: text) : function Connect(Sock: LongInt;const var SockOut: File) : Visibility: default
1166
Description: Connect opens a connection to a peer, whose address is described by Addr. AddrLen contains the length of the address. The type of Addr depends on the kind of connection youre trying to make, but is generally one of TSockAddr or TUnixSockAddr. The forms of the Connect (1166) command with the Text or File arguments are equivalent to subsequently calling the regular Connect function and the Sock2Text (1180) or Sock2File (1180) functions. These functions return True if successfull, False otherwise. The Connect function returns a le descriptor if the call was successfull, -1 in case of error. Errors: On error, -1 is returned and errors are reported in SocketError. See also: Listen (102), Bind (1165), Accept (1164) Listing: ./sockex/sockcli.pp
Program C l i e n t ; { Program t o t e s t Sockets u n i t by Michael van Canneyt and P e t e r Vreman C l i e n t Version , F i r s t Run sock_svr t o l e t i t c r e a t e a s o c k e t and then s o c k _ c l i t o connect t o t h a t s o c k e t } uses Sockets ; procedure P E r r o r ( const S : s t r i n g ) ; begin writeln (S, SocketError ) ; halt (100); end ;
: : : : :
begin S: = f p S o c k e t ( AF_INET ,SOCK_STREAM, 0 ) ; i f s=1 then P e r r o r ( C l i e n t : Socket : ) ; SAddr . s i n _ f a m i l y : = AF_INET ; { p o r t 5 0 0 0 0 i n network o r d e r } SAddr . s i n _ p o r t : = htons ( 5 0 0 0 ) ; { l o c a l h o s t : 1 2 7 . 0 . 0 . 1 i n network o r d e r } SAddr . s i n _ a d d r . s_addr : = HostToNet ( ( 1 2 7 shl 2 4 ) or 1 ) ; i f not Connect ( S , SAddr , Sin , Sout ) then P E r r o r ( C l i e n t : Connect : ) ; Reset ( Sin ) ; ReWrite ( Sout ) ; B u f f e r : = T h i s i s a t e x t s t r i n g s e n t by t h e C l i e n t . ; f o r i : = 1 to 1 0 do W r i t e l n ( Sout , B u f f e r ) ; Flush ( Sout ) ; Readln ( SIn , B u f f e r ) ; WriteLn ( B u f f e r ) ; Close ( s o u t ) ;
1167
end .
Listing: ./sockex/pnger.pp
program p f i n g e r ; uses sockets , e r r o r s ; Var Addr : TInetSockAddr ; S : Longint ; Sin , Sout : Text ; Line : string ; begin Addr . s i n _ f a m i l y : = AF_INET ; { p o r t 7 9 i n network o r d e r } Addr . s i n _ p o r t : = 7 9 shl 8 ; { l o c a l h o s t : 1 2 7 . 0 . 0 . 1 i n network o r d e r } Addr . s i n _ a d d r . s_addr : = ( ( 1 shl 2 4 ) or 1 2 7 ) ; S: = f p S o c k e t ( AF_INET ,SOCK_STREAM, 0 ) ; I f Not Connect ( S ,ADDR, SIN ,SOUT ) Then begin W r i t e l n ( Couldn t connect t o l o c a l h o s t ) ; W r i t e l n ( Socket e r r o r : , s t r e r r o r ( S o c k e t E r r o r ) ) ; halt ( 1 ) ; end ; rewrite ( sout ) ; r e s e t ( sin ) ; w r i t e l n ( sout , paramstr ( 1 ) ) ; flush ( sout ) ; while not eof ( sin ) do begin readln ( Sin , l i n e ) ; writeln ( l i n e ) ; end ; fpShutdown ( s , 2 ) ; c l o s e ( sin ) ; close ( sout ) ; end .
34.4.5
fpaccept
Synopsis: Accept a connection from a socket. Declaration: function fpaccept(s: cint;addrx: psockaddr;addrlen: psocklen) : cint Visibility: default Description: Accept accepts a connection from a socket S, which was listening for a connection. If a connection is accepted, a le descriptor is returned (positive number). On error -1 is returned. The returned socket may NOT be used to accept more connections. The original socket remains open. The Accept call lls the address of the connecting entity in Addrx, and sets its length in Addrlen. Addrx should be pointing to enough space, and Addrlen should be set to the amount of space available, prior to the call. Errors: On error, -1 is returned, and errors are reported in SocketError, and include the following: 1168
SYS_EBADFThe socket descriptor is invalid. SYS_ENOTSOCKThe descriptor is not a socket. SYS_EOPNOTSUPPThe socket type doesnt support the Listen operation. SYS_EFAULTAddr points outside your address space. SYS_EWOULDBLOCKThe requested operation would block the process. See also: fpListen (1173), fpConnect (1170), fpBind (1169) Listing: ./sockex/socksvr.pp
Program s e r v e r ; { Program t o t e s t Sockets u n i t by Michael van Canneyt and P e t e r Vreman Server Version , F i r s t Run sock_svr t o l e t i t c r e a t e a s o c k e t and then s o c k _ c l i t o connect t o t h a t s o c k e t } { $mode f p c } uses Sockets ; Var FromName Buffer S Sin , Sout SAddr
: : : : :
procedure p e r r o r ( const S : s t r i n g ) ; begin writeln ( S, SocketError ) ; halt (100); end ; begin S: = f p S o c k e t ( AF_INET ,SOCK_STREAM, 0 ) ; i f S o c k e t E r r o r < >0 then P e r r o r ( Server : Socket : ) ; SAddr . s i n _ f a m i l y : = AF_INET ; { p o r t 5 0 0 0 0 i n network o r d e r } SAddr . s i n _ p o r t : = htons ( 5 0 0 0 ) ; SAddr . s i n _ a d d r . s_addr : = 0 ; i f f p B i n d ( S , @SAddr , s i z e o f ( saddr ))= 1 then P E r r o r ( Server : Bind : ) ; i f f p L i s t e n ( S,1)= 1 then P E r r o r ( Server : L i s t e n : ) ; W r i t e l n ( W a i t i n g f o r Connect from C l i e n t , run now s o c k _ c l i i n an o t h e r t t y ) ; i f Accept ( S , FromName , Sin , Sout ) then P E r r o r ( Server : Accept : +fromname ) ; Reset ( Sin ) ; ReWrite ( Sout ) ; W r i t e l n ( Sout , Message From Server ) ; Flush ( SOut ) ; while not eof ( sin ) do begin Readln ( Sin , B u f f e r ) ; W r i t e l n ( Server : read : , b u f f e r ) ; end ;
1169
end .
34.4.6
fpbind
Synopsis: Bind a socket to an address. Declaration: function fpbind(s: cint;addrx: psockaddr;addrlen: TSockLen) : cint Visibility: default Description: fpBind binds the socket s to address Addrx. Addrx has length Addrlen. The function returns 0 if the call was succesful, -1 if not. Errors: Errors are returned in SocketError and include the following: SYS_EBADFThe socket descriptor is invalid. SYS_EINVALThe socket is already bound to an address, SYS_EACCESSAddress is protected and you dont have permission to open it. More arrors can be found in the Unix man pages. See also: Socket (1140)
34.4.7
fpconnect
Synopsis: Open a connection to a server socket. Declaration: function fpconnect(s: cint;name: psockaddr;namelen: TSockLen) : cint Visibility: default Description: fpConnect uses the socket s to open a connection to a peer, whose address is described by Name. NameLen contains the length of the address. The type of Name depends on the kind of connection you are trying to make, but is generally one of TSockAddr or TUnixSockAddr. The fpConnect function returns zero if the call was successfull, -1 in case of error. Errors: On error, -1 is returned and errors are reported in SocketError. See also: fpListen (1173), fpBind (1169), fpAccept (1168) Listing: ./sockex/sockcli.pp
Program C l i e n t ; { Program t o t e s t Sockets u n i t by Michael van Canneyt and P e t e r Vreman C l i e n t Version , F i r s t Run sock_svr t o l e t i t c r e a t e a s o c k e t and then s o c k _ c l i t o connect t o t h a t s o c k e t } uses Sockets ; procedure P E r r o r ( const S : s t r i n g ) ; begin writeln (S, SocketError ) ; halt (100);
1170
end ;
: : : : :
begin S: = f p S o c k e t ( AF_INET ,SOCK_STREAM, 0 ) ; i f s=1 then P e r r o r ( C l i e n t : Socket : ) ; SAddr . s i n _ f a m i l y : = AF_INET ; { p o r t 5 0 0 0 0 i n network o r d e r } SAddr . s i n _ p o r t : = htons ( 5 0 0 0 ) ; { l o c a l h o s t : 1 2 7 . 0 . 0 . 1 i n network o r d e r } SAddr . s i n _ a d d r . s_addr : = HostToNet ( ( 1 2 7 shl 2 4 ) or 1 ) ; i f not Connect ( S , SAddr , Sin , Sout ) then P E r r o r ( C l i e n t : Connect : ) ; Reset ( Sin ) ; ReWrite ( Sout ) ; B u f f e r : = T h i s i s a t e x t s t r i n g s e n t by t h e C l i e n t . ; f o r i : = 1 to 1 0 do W r i t e l n ( Sout , B u f f e r ) ; Flush ( Sout ) ; Readln ( SIn , B u f f e r ) ; WriteLn ( B u f f e r ) ; Close ( s o u t ) ; end .
Listing: ./sockex/pnger.pp
program p f i n g e r ; uses sockets , e r r o r s ; Var Addr : TInetSockAddr ; S : Longint ; Sin , Sout : Text ; Line : string ; begin Addr . s i n _ f a m i l y : = AF_INET ; { p o r t 7 9 i n network o r d e r } Addr . s i n _ p o r t : = 7 9 shl 8 ; { l o c a l h o s t : 1 2 7 . 0 . 0 . 1 i n network o r d e r } Addr . s i n _ a d d r . s_addr : = ( ( 1 shl 2 4 ) or 1 2 7 ) ; S: = f p S o c k e t ( AF_INET ,SOCK_STREAM, 0 ) ; I f Not Connect ( S ,ADDR, SIN ,SOUT ) Then begin W r i t e l n ( Couldn t connect t o l o c a l h o s t ) ; W r i t e l n ( Socket e r r o r : , s t r e r r o r ( S o c k e t E r r o r ) ) ; halt ( 1 ) ; end ; rewrite ( sout ) ; r e s e t ( sin ) ;
1171
w r i t e l n ( sout , paramstr ( 1 ) ) ; flush ( sout ) ; while not eof ( sin ) do begin readln ( Sin , l i n e ) ; writeln ( l i n e ) ; end ; fpShutdown ( s , 2 ) ; c l o s e ( sin ) ; close ( sout ) ; end .
34.4.8
fpgetpeername
Synopsis: Return the name (address) of the connected peer. Declaration: function fpgetpeername(s: cint;name: psockaddr;namelen: psocklen) : cint Visibility: default Description: fpGetPeerName returns the name of the entity connected to the specied socket S. The Socket must be connected for this call to work. Name should point to enough space to store the name, the amount of space pointed to should be set in Namelen. When the function returns succesfully, Name will be lled with the name, and Name will be set to the length of Name. Errors: Errors are reported in SocketError, and include the following: SYS_EBADFThe socket descriptor is invalid. SYS_ENOBUFSThe system doesnt have enough buffers to perform the operation. SYS_ENOTSOCKThe descriptor is not a socket. SYS_EFAULTAddr points outside your address space. SYS_ENOTCONNThe socket isnt connected. See also: fpConnect (1170), fpSocket (1176)
34.4.9
fpgetsockname
Synopsis: Return name of socket. Declaration: function fpgetsockname(s: cint;name: psockaddr;namelen: psocklen) : cint Visibility: default Description: fpGetSockName returns the current name of the specied socket S. Name should point to enough space to store the name, the amount of space pointed to should be set in Namelen. When the function returns succesfully, Name will be lled with the name, and Namelen will be set to the length of Name. Errors: Errors are reported in SocketError, and include the following: SYS_EBADFThe socket descriptor is invalid. SYS_ENOBUFSThe system doesnt have enough buffers to perform the operation. SYS_ENOTSOCKThe descriptor is not a socket. SYS_EFAULTAddr points outside your address space. See also: fpBind (1169) 1172
34.4.10
fpgetsockopt
Synopsis: Get current socket options Declaration: function fpgetsockopt(s: cint;level: cint;optname: cint;optval: pointer; optlen: psocklen) : cint Visibility: default Description: fpGetSockOpt gets the connection option optname, for socket S. The socket may be obtained from different levels, indicated by Level, which can be one of the following: SOL_SOCKETFrom the socket itself. XXXset Level to XXX, the protocol number of the protocol which should interpret the option. The options are stored in the memory location pointed to by optval. optlen should point to the initial length of optval, and on return will contain the actual length of the stored data. On success, 0 is returned. On Error, -1 is returned. Errors: Errors are reported in SocketError, and include the following: SYS_EBADFThe socket descriptor is invalid. SYS_ENOTSOCKThe descriptor is not a socket. SYS_EFAULTOptVal points outside your address space. See also: fpSetSockOpt (1175)
34.4.11
fplisten
Synopsis: Listen for connections on a socket. Declaration: function fplisten(s: cint;backlog: cint) : cint Visibility: default Description: fpListen listens for up to backlog connections from socket S. The socket S must be of type SOCK_STREAM or Sock_SEQPACKET. The function returns 0 if a connection was accepted, -1 if an error occurred. Errors: Errors are reported in SocketError, and include the following: SYS_EBADFThe socket descriptor is invalid. SYS_ENOTSOCKThe descriptor is not a socket. SYS_EOPNOTSUPPThe socket type doesnt support the Listen operation. See also: fpSocket (1176), fpBind (1169), fpConnect (1170)
34.4.12
fprecv
Synopsis: Receive data on socket Declaration: function fprecv(s: cint;buf: pointer;len: size_t;flags: cint) : ssize_t Visibility: default
1173
Description: fpRecv reads at most len bytes from socket S into address buf. The socket must be in a connected state. Flags can be one of the following: 1Process out-of band data. 4Bypass routing, use a direct interface. ??Wait for full request or report an error. The functions returns the number of bytes actually read from the socket, or -1 if a detectable error occurred. Errors: Errors are reported in SocketError, and include the following: SYS_EBADFThe socket descriptor is invalid. SYS_ENOTCONNThe socket isnt connected. SYS_ENOTSOCKThe descriptor is not a socket. SYS_EFAULTThe address is outside your address space. SYS_EMSGSIZEThe message cannot be sent atomically. SYS_EWOULDBLOCKThe requested operation would block the process. SYS_ENOBUFSThe system doesnt have enough free buffers available. See also: Send (102)
34.4.13
fprecvfrom
Synopsis: Receive data from an unconnected socket Declaration: function fprecvfrom(s: cint;buf: pointer;len: size_t;flags: cint; from: psockaddr;fromlen: psocklen) : ssize_t Visibility: default Description: fpRecvFrom receives data in buffer Buf with maximum length Len from socket S. Receipt is controlled by options in Flags. The location pointed to by from will be lled with the address from the sender, and its length will be stored in fromlen. The function returns the number of bytes received, or -1 on error. AddrLen. Errors: On error, -1 is returned. See also: fpSocket (1176), fprecv (1173)
34.4.14
fpsend
Synopsis: Send data through socket Declaration: function fpsend(s: cint;msg: pointer;len: size_t;flags: cint) : ssize_t Visibility: default Description: fpSend sends Len bytes starting from address Msg to socket S. S must be in a connected state. Options can be passed in Flags. The function returns the number of bytes sent, or -1 if a detectable error occurred. Flags can be one of the following: 1Process out-of band data. 1174
4Bypass routing, use a direct interface. Errors: Errors are reported in SocketError, and include the following: SYS_EBADFThe socket descriptor is invalid. SYS_ENOTSOCKThe descriptor is not a socket. SYS_EFAULTThe address is outside your address space. SYS_EMSGSIZEThe message cannot be sent atomically. SYS_EWOULDBLOCKThe requested operation would block the process. SYS_ENOBUFSThe system doesnt have enough free buffers available. See also: fpRecv (1173)
34.4.15
fpsendto
Synopsis: Send data through an unconnected socket to an address. Declaration: function fpsendto(s: cint;msg: pointer;len: size_t;flags: cint; tox: psockaddr;tolen: TSockLen) : ssize_t Visibility: default Description: fpSendTo sends data from buffer Msg with length len through socket S with options Flags. The data is sent to address tox, which has length toLen Errors: On error, -1 is returned. See also: fpSocket (1176), fpSend (1174), fpRecvFrom (1174)
34.4.16
fpsetsockopt
Synopsis: Set socket options. Declaration: function fpsetsockopt(s: cint;level: cint;optname: cint;optval: pointer; optlen: TSockLen) : cint Visibility: default Description: fpSetSockOpt sets the connection options for socket S. The socket may be manipulated at different levels, indicated by Level, which can be one of the following: SOL_SOCKETTo manipulate the socket itself. XXXset Level to XXX, the protocol number of the protocol which should interprete the option. The actual option is stored in a buffer pointed to by optval, with length optlen. For more information on this call, refer to the unix manual page setsockopt Errors: Errors are reported in SocketError, and include the following: SYS_EBADFThe socket descriptor is invalid. SYS_ENOTSOCKThe descriptor is not a socket. SYS_EFAULTOptVal points outside your address space. See also: fpGetSockOpt (1173) 1175
34.4.17
fpshutdown
Synopsis: Close one end of full duplex connection. Declaration: function fpshutdown(s: cint;how: cint) : cint Visibility: default Description: fpShutDown closes one end of a full duplex socket connection, described by S. The parameter How determines how the connection will be shut down, and can be one of the following: 0Further receives are disallowed. 1Further sends are disallowed. 2Sending nor receiving are allowed. On succes, the function returns 0, on error -1 is returned. Errors: SocketError is used to report errors, and includes the following: SYS_EBADFThe socket descriptor is invalid. SYS_ENOTCONNThe socket isnt connected. SYS_ENOTSOCKThe descriptor is not a socket. See also: fpSocket (1176), fpConnect (1170)
34.4.18
fpsocket
Synopsis: Create new socket Declaration: function fpsocket(domain: cint;xtype: cint;protocol: cint) : cint Visibility: default Description: fpSocket creates a new socket in domain Domain, from type xType using protocol Protocol. The Domain, Socket type and Protocol can be specied using predened constants (see the section on constants for available constants) If succesfull, the function returns a socket descriptor, which can be passed to a subsequent fpBind (1169) call. If unsuccesfull, the function returns -1. for an example, see Accept (1164). Errors: Errors are returned in SocketError, and include the follwing: SYS_EPROTONOSUPPORTThe protocol type or the specied protocol is not supported within this domain. SYS_EMFILEThe per-process descriptor table is full. SYS_ENFILEThe system le table is full. SYS_EACCESSPermission to create a socket of the specied type and/or protocol is denied. SYS_ENOBUFSInsufcient buffer space is available. The socket cannot be created until sufcient resources are freed. See also: SocketPair (102)
1176
34.4.19
fpsocketpair
Synopsis: Create socket pair. Declaration: function fpsocketpair(d: cint;xtype: cint;protocol: cint;sv: pcint) : cint Visibility: default Description: fpSocketPair creates 2 sockets in domain D, from type xType and using protocol Protocol. The pair is returned in sv, and they are indistinguishable. The function returns -1 upon error and 0 upon success. Errors: Errors are reported in SocketError, and are the same as in Socket (1140) See also: Str2UnixSockAddr (1181)
34.4.20
HostAddrToStr
Synopsis: Convert a host address to a string. Declaration: function HostAddrToStr(Entry: in_addr) : AnsiString Visibility: default Description: HostAddrToStr converts the host address in Entry to a string representation in human-readable form (a dotted quad). Basically, it is the same as NetAddrToStr (1178), but with the bytes in correct order. See also: NetAddrToStr (1178), StrToHostAddr (1181), StrToNetAddr (1181)
34.4.21
HostAddrToStr6
Synopsis: Convert a IPV6 host address to a string representation. Declaration: function HostAddrToStr6(Entry: Tin6_addr) : AnsiString Visibility: default Description: HostAddrToStr6 converts the IPV6 host address in Entry to a string representation in humanreadable form. Basically, it is the same as NetAddrToStr6 (1178), but with the bytes in correct order. See also: NetAddrToStr (1178), StrToHostAddr (1181), StrToNetAddr (1181), StrToHostAddr6 (1181)
34.4.22
HostToNet
Synopsis: Convert a host address to a network address Declaration: function HostToNet(Host: in_addr) : in_addr function HostToNet(Host: LongInt) : LongInt Visibility: default Description: HostToNet converts a host address to a network address. It takes care of endianness of the host machine. The address can be specied as a dotted quad or as a longint. Errors: None. See also: NetToHost (1179), NToHS (1179), HToNS (1178), ShortHostToNet (1179), ShortNetToHost (1180) 1177
34.4.23
htonl
Synopsis: Convert long integer from host ordered to network ordered Declaration: function htonl(host: LongInt) : LongInt Visibility: default Description: htonl makes sure that the bytes in host are ordered in the correct way for sending over the network and returns the correctly ordered result. See also: htons (1178), ntohl (1179), ntohs (1179)
34.4.24
htons
Synopsis: Convert short integer from host ordered to network ordered Declaration: function htons(host: Word) : Word Visibility: default Description: htons makes sure that the bytes in host are ordered in the correct way for sending over the network and returns the correctly ordered result. See also: htonl (1178), ntohl (1179), ntohs (1179)
34.4.25
NetAddrToStr
Synopsis: Convert a network address to a string. Declaration: function NetAddrToStr(Entry: in_addr) : AnsiString Visibility: default Description: NetAddrToStr converts the network address in Entry to a string representation in humanreadable form (a dotted quad). See also: HostAddrToStr (1177), StrToNetAddr (1181), StrToHostAddr (1181)
34.4.26
NetAddrToStr6
Synopsis: Convert a IPV6 network address to a string. Declaration: function NetAddrToStr6(Entry: Tin6_addr) : AnsiString Visibility: default Description: NetAddrToStr6 converts the IPV6 network address in Entry to a string representation in humanreadable form. Basically, it is the same as NetAddrToStr6 (1178), but with the bytes in correct order. See also: NetAddrToStr (1178), StrToHostAddr (1181), StrToNetAddr (1181), StrToHostAddr6 (1181)
1178
34.4.27
NetToHost
Synopsis: Convert a network address to a host address. Declaration: function NetToHost(Net: in_addr) : in_addr function NetToHost(Net: LongInt) : LongInt Visibility: default Description: NetToHost converts a network address to a host address. It takes care of endianness of the host machine. The address can be specied as a dotted quad or as a longint. Errors: None. See also: HostToNet (1177), NToHS (1179), HToNS (1178), ShortHostToNet (1179), ShortNetToHost (1180)
34.4.28
NToHl
Synopsis: Convert long integer from network ordered to host ordered Declaration: function NToHl(Net: LongInt) : LongInt Visibility: default Description: ntohs makes sure that the bytes in Net, received from the network, are ordered in the correct way for handling by the host machinen, and returns the correctly ordered result. See also: htonl (1178), htons (1178), ntohs (1179)
34.4.29
NToHs
Synopsis: Convert short integer from network ordered to host ordered Declaration: function NToHs(Net: Word) : Word Visibility: default Description: ntohs makes sure that the bytes in Net, received from the network, are ordered in the correct way for handling by the host machinen, and returns the correctly ordered result. See also: htonl (1178), htons (1178), ntohl (1179)
34.4.30
ShortHostToNet
Synopsis: Convert a host port number to a network port number Declaration: function ShortHostToNet(Host: Word) : Word Visibility: default Description: ShortHostToNet converts a host port number to a network port number. It takes care of endianness of the host machine. Errors: None. See also: ShortNetToHost (1180), HostToNet (1177), NToHS (1179), HToNS (1178)
1179
34.4.31
ShortNetToHost
Synopsis: Convert a network port number to a host port number Declaration: function ShortNetToHost(Net: Word) : Word Visibility: default Description: ShortNetToHost converts a network port number to a host port number. It takes care of endianness of the host machine. Errors: None. See also: ShortNetToHost (1180), HostToNet (1177), NToHS (1179), HToNS (1178)
34.4.32
Sock2File
Synopsis: Convert socket to untyped le descriptors Declaration: procedure Sock2File(Sock: LongInt;var SockIn: File;var SockOut: File) Visibility: default Description: Sock2File transforms a socket Sock into 2 Pascal le descriptors of type File, one for reading from the socket (SockIn), one for writing to the socket (SockOut). Errors: None. See also: Socket (1140), Sock2Text (1180)
34.4.33
Sock2Text
Synopsis: Convert socket to text le descriptors Declaration: procedure Sock2Text(Sock: LongInt;var SockIn: Text;var SockOut: Text) Visibility: default Description: Sock2Text transforms a socket Sock into 2 Pascal le descriptors of type Text, one for reading from the socket (SockIn), one for writing to the socket (SockOut). Errors: None. See also: Socket (1140), Sock2File (1180)
34.4.34
socketerror
Synopsis: Contains the error code for the last socket operation. Declaration: function socketerror : cint Visibility: default Description: SocketError contains the error code for the last socket operation. It can be examined to return the last socket error.
1180
34.4.35
Str2UnixSockAddr
Synopsis: Convert path to TUnixSockAddr (1164) Declaration: procedure Str2UnixSockAddr(const addr: string;var t: TUnixSockAddr; var len: LongInt) Visibility: default Description: Str2UnixSockAddr transforms a Unix socket address in a string to a TUnixSockAddr structure which can be passed to the Bind (1165) call. Errors: None. See also: Socket (1140), Bind (1165)
34.4.36
StrToHostAddr
Synopsis: Convert a string to a host address. Declaration: function StrToHostAddr(IP: AnsiString) : in_addr Visibility: default Description: StrToHostAddr converts the string representation in IP to a host address and returns the host address. Errors: On error, the host address is lled with zeroes. See also: NetAddrToStr (1178), HostAddrToStr (1177), StrToNetAddr (1181)
34.4.37
StrToHostAddr6
Synopsis: Convert a string to a IPV6 host address. Declaration: function StrToHostAddr6(IP: string) : Tin6_addr Visibility: default Description: StrToHostAddr6 converts the string representation in IP to a IPV6 host address and returns the host address. Errors: On error, the address is lled with zeroes. See also: NetAddrToStr6 (1178), HostAddrToStr6 (1177), StrToHostAddr (1181)
34.4.38
StrToNetAddr
Synopsis: Convert a string to a network address. Declaration: function StrToNetAddr(IP: AnsiString) : in_addr Visibility: default Description: StrToNetAddr converts the string representation in IP to a network address and returns the network address. Errors: On error, the network address is lled with zeroes. See also: NetAddrToStr (1178), HostAddrToStr (1177), StrToHostAddr (1181) 1181
34.4.39
StrToNetAddr6
Synopsis: Convert a string to a IPV6 network address Declaration: function StrToNetAddr6(IP: AnsiString) : Tin6_addr Visibility: default Description: StrToNetAddr6 converts the string representation in IP to a IPV6 network address and returns the network address. Errors: On error, the address is lled with zeroes. See also: NetAddrToStr6 (1178), HostAddrToStr6 (1177), StrToHostAddr6 (1181)
1182
Chapter 35
This chapter describes the STRINGS unit for Free Pascal. This unit is system independent, and therefore works on all supported platforms.
35.2
35.2.1
Synopsis: Allocate memory for a new null-terminated string on the heap Declaration: function stralloc(L: SizeInt) : pchar Visibility: default Description: StrAlloc reserves memory on the heap for a string with length Len, terminating #0 included, and returns a pointer to it. Errors: If there is not enough memory, a run-time error occurs. See also: StrNew (1192), StrPCopy (1193)
35.2.2
strcat
Synopsis: Concatenate 2 null-terminated strings. Declaration: function strcat(dest: pchar;source: pchar) : pchar Visibility: default Description: Attaches Source to Dest and returns Dest. Errors: No length checking is performed. See also: StrLCat (1188) Listing: ./stringex/ex11.pp
1183
Program Example11 ; Uses s t r i n g s ; { Program t o demonstrate t h e S t r C a t f u n c t i o n . } Const P1 : PChar = T h i s i s a PChar S t r i n g . ; Var P2 : PChar ; begin P2 : = S t r A l l o c ( StrLen ( P1 ) 2 + 1 ) ; StrMove ( P2 , P1 , StrLen ( P1 ) + 1 ) ; { P2=P1 } StrCat ( P2 , P1 ) ; { Append P2 once more } W r i t e l n ( P2 : ,P2 ) ; StrDispose ( P2 ) ; end .
35.2.3
strcomp
Synopsis: Compare 2 null-terminated strings, case sensitive. Declaration: function strcomp(str1: pchar;str2: pchar) : SizeInt Visibility: default Description: Compares the null-terminated strings S1 and S2. The result is A negative SizeInt when S1<S2. 0 when S1=S2. A positive SizeInt when S1>S2. For an example, see StrLComp (1189). Errors: None. See also: StrLComp (1189), StrIComp (1187), StrLIComp (1190)
35.2.4
strcopy
Synopsis: Copy a null-terminated string Declaration: function strcopy(dest: pchar;source: pchar) : pchar Visibility: default Description: Copy the null terminated string in Source to Dest, and returns a pointer to Dest. Dest needs enough room to contain Source, i.e. StrLen(Source)+1 bytes. Errors: No length checking is performed. See also: StrPCopy (1193), StrLCopy (1189), StrECopy (1185) Listing: ./stringex/ex4.pp
1184
Program Example4 ; Uses s t r i n g s ; { Program t o demonstrate t h e StrCopy f u n c t i o n . } Const P : PCHar = T h i s i s a PCHAR s t r i n g . ; var PP : PChar ; begin PP: = S t r A l l o c ( S t r l e n (P ) + 1 ) ; STrCopy ( PP, P ) ; I f StrComp ( PP, P) < >0 then W r i t e l n ( Ohoh problems . . . ) else W r i t e l n ( A l l i s w e l l : PP= ,PP ) ; StrDispose (PP ) ; end .
35.2.5
strdispose
Synopsis: disposes of a null-terminated string on the heap Declaration: procedure strdispose(p: pchar) Visibility: default Description: Removes the string in P from the heap and releases the memory. Errors: None. See also: StrNew (1192) Listing: ./stringex/ex17.pp
Program Example17 ; Uses s t r i n g s ; { Program t o demonstrate t h e S t r D i s po s e f u n c t i o n . } Const P1 : PChar = T h i s i s a PChar s t r i n g ; var P2 : PChar ; begin P2 : = StrNew ( P1 ) ; W r i t e l n ( P2 : ,P2 ) ; StrDispose ( P2 ) ; end .
35.2.6
strecopy
1185
Declaration: function strecopy(dest: pchar;source: pchar) : pchar Visibility: default Description: Copies the Null-terminated string in Source to Dest, and returns a pointer to the end (i.e. the terminating Null-character) of the copied string. Errors: No length checking is performed. See also: StrLCopy (1189), StrCopy (1184) Listing: ./stringex/ex6.pp
Program Example6 ; Uses s t r i n g s ; { Program t o demonstrate t h e StrECopy f u n c t i o n . } Const P : PChar = T h i s i s a PCHAR s t r i n g . ; Var PP : PChar ; begin PP: = S t r A l l o c ( StrLen (P ) + 1 ) ; I f L o n g i n t ( StrECopy (PP, P)) L o n g i n t (PP)<> StrLen (P ) then W r i t e l n ( Something i s wrong here ! ) else W r i t e l n ( PP= ,PP ) ; StrDispose (PP ) ; end .
35.2.7
strend
Synopsis: Return a pointer to the end of a null-terminated string Declaration: function strend(p: pchar) : pchar Visibility: default Description: Returns a pointer to the end of P. (i.e. to the terminating null-character. Errors: None. See also: StrLen (1190) Listing: ./stringex/ex7.pp
Program Example6 ; Uses s t r i n g s ; { Program t o demonstrate t h e StrEnd f u n c t i o n . } Const P : PChar = T h i s i s a PCHAR s t r i n g . ; begin I f L o n g i n t ( StrEnd (P)) L o n g i n t (P)<> StrLen (P ) then W r i t e l n ( Something i s wrong here ! )
1186
35.2.8
stricomp
Synopsis: Compare 2 null-terminated strings, case insensitive. Declaration: function stricomp(str1: pchar;str2: pchar) : SizeInt Visibility: default Description: Compares the null-terminated strings S1 and S2, ignoring case. The result is A negative SizeInt when S1<S2. 0 when S1=S2. A positive SizeInt when S1>S2. Errors: None. See also: StrLComp (1189), StrComp (1184), StrLIComp (1190) Listing: ./stringex/ex8.pp
Program Example8 ; Uses s t r i n g s ; { Program t o demonstrate t h e StrLComp f u n c t i o n . } Const P1 : PChar = T h i s i s t h e f i r s t s t r i n g . ; P2 : PCHar = T h i s i s t h e second s t r i n g . ; Var L : L o n g i n t ; begin Write ( P1 and P2 are ) ; I f StrComp ( P1 , P2) < >0 then w r i t e ( NOT ) ; w r i t e ( equal . The f i r s t ) ; L:=1; While StrLComp ( P1 , P2 , L ) = 0 do inc ( L ) ; dec ( l ) ; W r i t e l n ( l , c h a r a c t e r s are t h e same . ) ; end .
35.2.9
stripos
Synopsis: Return the position of a substring in a string, case insensitive. Declaration: function stripos(str1: pchar;str2: pchar) : pchar Visibility: default Description: stripos returns the position of str2 in str1. It searches in a case-insensitive manner, and if it nds a match, it returns a pointer to the location of the match. If no match is found, Nil is returned.
1187
Errors: No checks are done on the validity of the pointers, and the pointers are assumed to point to a properly null-terminated string. If either of these conditions are not met, a run-time error may follow. See also: striscan (1188), strpos (1194)
35.2.10
striscan
Synopsis: Scan a string for a character, case-insensitive Declaration: function striscan(p: pchar;c: Char) : pchar Visibility: default Description: striscan does the same as strscan (1195) but compares the characters case-insensitively. It returns a pointer to the rst occurrence of the character c in the null-terminated string p, or Nil if c is not present in the string. See also: strscan (1195), strriscan (1194)
35.2.11
strlcat
Synopsis: Concatenate 2 null-terminated strings, with length boundary. Declaration: function strlcat(dest: pchar;source: pchar;l: SizeInt) : pchar Visibility: default Description: Adds L characters from Source to Dest, and adds a terminating null-character. Returns Dest. Errors: None. See also: StrCat (1183) Listing: ./stringex/ex12.pp
Program Example12 ; Uses s t r i n g s ; { Program t o demonstrate t h e S t r L C a t f u n c t i o n . } Const P1 : PChar = 1234567890 ; Var P2 : PChar ; begin P2 : = S t r A l l o c ( StrLen ( P1 ) 2 + 1 ) ; P2 ^ : = # 0 ; { Zero l e n g t h } StrCat ( P2 , P1 ) ; StrLCat ( P2 , P1 , 5 ) ; W r i t e l n ( P2 = ,P2 ) ; StrDispose ( P2 ) end .
1188
35.2.12
strlcomp
Synopsis: Compare limited number of characters of 2 null-terminated strings Declaration: function strlcomp(str1: pchar;str2: pchar;l: SizeInt) : SizeInt Visibility: default Description: Compares maximum L characters of the null-terminated strings S1 and S2. The result is A negative SizeInt when S1<S2. 0 when S1=S2. A positive SizeInt when S1>S2. Errors: None. See also: StrComp (1184), StrIComp (1187), StrLIComp (1190) Listing: ./stringex/ex8.pp
Program Example8 ; Uses s t r i n g s ; { Program t o demonstrate t h e StrLComp f u n c t i o n . } Const P1 : PChar = T h i s i s t h e f i r s t s t r i n g . ; P2 : PCHar = T h i s i s t h e second s t r i n g . ; Var L : L o n g i n t ; begin Write ( P1 and P2 are ) ; I f StrComp ( P1 , P2) < >0 then w r i t e ( NOT ) ; w r i t e ( equal . The f i r s t ) ; L:=1; While StrLComp ( P1 , P2 , L ) = 0 do inc ( L ) ; dec ( l ) ; W r i t e l n ( l , c h a r a c t e r s are t h e same . ) ; end .
35.2.13
strlcopy
Synopsis: Copy a null-terminated string, limited in length. Declaration: function strlcopy(dest: pchar;source: pchar;maxlen: SizeInt) : pchar Visibility: default Description: Copies MaxLen characters from Source to Dest, and makes Dest a null terminated string. Errors: No length checking is performed. See also: StrCopy (1184), StrECopy (1185) Listing: ./stringex/ex5.pp
1189
Program Example5 ; Uses s t r i n g s ; { Program t o demonstrate t h e StrLCopy f u n c t i o n . } Const P : PCHar = 123456789ABCDEF ; var PP : PCHar ; begin PP: = S t r A l l o c ( 1 1 ) ; Writeln ( F i r s t 1 0 characters of P : StrDispose (PP ) ; end .
, StrLCopy ( PP, P , 1 0 ) ) ;
35.2.14
strlen
Synopsis: Length of a null-terminated string. Declaration: function strlen(p: pchar) : sizeint Visibility: default Description: Returns the length of the null-terminated string P. Errors: None. See also: StrNew (1192) Listing: ./stringex/ex1.pp
Program Example1 ; Uses s t r i n g s ; { Program t o demonstrate t h e StrLen f u n c t i o n . } Const P : PChar = T h i s i s a c o n s t a n t pchar s t r i n g ; begin W r i t e l n ( P : ,p ) ; W r i t e l n ( l e n g t h (P ) : , StrLen (P ) ) ; end .
35.2.15
strlicomp
Synopsis: Compare limited number of characters in 2 null-terminated strings, ignoring case. Declaration: function strlicomp(str1: pchar;str2: pchar;l: SizeInt) : SizeInt Visibility: default Description: Compares maximum L characters of the null-terminated strings S1 and S2, ignoring case. The result is
1190
A negative SizeInt when S1<S2. 0 when S1=S2. A positive SizeInt when S1>S2. For an example, see StrIComp (1187) Errors: None. See also: StrLComp (1189), StrComp (1184), StrIComp (1187)
35.2.16
strlower
Synopsis: Convert null-terminated string to all-lowercase. Declaration: function strlower(p: pchar) : pchar Visibility: default Description: Converts P to an all-lowercase string. Returns P. Errors: None. See also: StrUpper (1195) Listing: ./stringex/ex14.pp
Program Example14 ; Uses s t r i n g s ; { Program t o demonstrate t h e StrLower and StrUpper f u n c t i o n s . } Const P1 : PChar = THIS IS AN UPPERCASE PCHAR STRING ; P2 : PChar = t h i s i s a lowercase s t r i n g ; begin W r i t e l n ( Uppercase : StrLower ( P1 ) ; W r i t e l n ( Lowercase : end .
, StrUpper ( P2 ) ) ; ,P1 ) ;
35.2.17
strmove
Synopsis: Move a null-terminated string to new location. Declaration: function strmove(dest: pchar;source: pchar;l: SizeInt) : pchar Visibility: default Description: Copies MaxLen characters from Source to Dest. No terminating null-character is copied. Returns Dest Errors: None. See also: StrLCopy (1189), StrCopy (1184)
1191
Listing: ./stringex/ex10.pp
Program Example10 ; Uses s t r i n g s ; { Program t o demonstrate t h e StrMove f u n c t i o n . } Const P1 : PCHAR = T h i s i s a pchar s t r i n g . ;
35.2.18
strnew
Synopsis: Allocate room for new null-terminated string. Declaration: function strnew(p: pchar) : pchar Visibility: default Description: Copies P to the Heap, and returns a pointer to the copy. Errors: Returns Nil if no memory was available for the copy. See also: StrCopy (1184), StrDispose (1185) Listing: ./stringex/ex16.pp
Program Example16 ; Uses s t r i n g s ; { Program t o demonstrate t h e StrNew f u n c t i o n . } Const P1 : PChar = T h i s i s a PChar s t r i n g ; var P2 : PChar ; begin P2 : = StrNew ( P1 ) ; I f P1=P2 then w r i t e l n ( T h i s can t be happening . . . ) else w r i t e l n ( P2 : ,P2 ) ; StrDispose ( P2 ) ; end .
1192
35.2.19
strpas
Synopsis: Convert a null-terminated string to a shortstring. Declaration: function strpas(p: pchar) : shortstring Visibility: default Description: Converts a null terminated string in P to a Pascal string, and returns this string. The string is truncated at 255 characters. Errors: None. See also: StrPCopy (1193) Listing: ./stringex/ex3.pp
Program Example3 ; Uses s t r i n g s ; { Program t o demonstrate t h e StrPas f u n c t i o n . } Const P : PChar = T h i s i s a PCHAR s t r i n g ; var S : s t r i n g ; begin S: = StrPas ( P ) ; W r i t e l n ( S : ,S ) ; end .
35.2.20
strpcopy
Synopsis: Copy a pascal string to a null-terminated string Declaration: function strpcopy(d: pchar;const s: string) : pchar Visibility: default Description: Converts the Pascal string in Se to a Null-terminated string, and copies it to D. D needs enough room to contain the string Source, i.e. Length(S)+1 bytes. Errors: No length checking is performed. See also: StrPas (1193) Listing: ./stringex/ex2.pp
Program Example2 ; Uses s t r i n g s ; { Program t o demonstrate t h e StrPCopy f u n c t i o n . } Const S = T h i s i s a normal s t r i n g . ; Var P : Pchar ;
1193
begin p : = S t r A l l o c ( length (S ) + 1 ) ; i f StrPCopy ( P , S)<>P then Writeln ( This i s impossible ! ! ) else writeln ( P ) ; StrDispose (P ) ; end .
35.2.21
strpos
Synopsis: Search for a null-terminated substring in a null-terminated string Declaration: function strpos(str1: pchar;str2: pchar) : pchar Visibility: default Description: Returns a pointer to the rst occurrence of S2 in S1. If S2 does not occur in S1, returns Nil. Errors: None. See also: StrScan (1195), StrRScan (1195) Listing: ./stringex/ex15.pp
Program Example15 ; Uses s t r i n g s ; { Program t o demonstrate t h e StrPos f u n c t i o n . } Const P : PChar = T h i s i s a PChar s t r i n g . ; S : Pchar = i s ; begin W r i t e l n ( P o s i t i o n o f i s i n P : , s i z e i n t ( StrPos ( P , S)) s i z e i n t (P ) ) ; end .
35.2.22
strriscan
Synopsis: Scan a string reversely for a character, case-insensitive Declaration: function strriscan(p: pchar;c: Char) : pchar Visibility: default Description: strriscan does the same as strrscan (1195) but compares the characters case-insensitively. It returns a pointer to the last occurrence of the character c in the null-terminated string p, or Nil if c is not present in the string. See also: strrscan (1195), striscan (1188)
1194
35.2.23
strrscan
Synopsis: Find last occurrence of a character in a null-terminated string. Declaration: function strrscan(p: pchar;c: Char) : pchar Visibility: default Description: Returns a pointer to the last occurrence of the character C in the null-terminated string P. If C does not occur, returns Nil. For an example, see StrScan (1195). Errors: None. See also: StrScan (1195), StrPos (1194)
35.2.24
strscan
Synopsis: Find rst occurrence of a character in a null-terminated string. Declaration: function strscan(p: pchar;c: Char) : pchar Visibility: default Description: Returns a pointer to the rst occurrence of the character C in the null-terminated string P. If C does not occur, returns Nil. Errors: None. See also: StrRScan (1195), StrPos (1194) Listing: ./stringex/ex13.pp
Program Example13 ; Uses s t r i n g s ; { Program t o demonstrate t h e StrScan and StrRScan f u n c t i o n s . } Const P : PChar = T h i s i s a PCHAR s t r i n g . ; S : Char = s ; begin W r i t e l n ( P , s t a r t i n g from f i r s t s : , StrScan ( P , s ) ) ; W r i t e l n ( P , s t a r t i n g from l a s t s : , StrRScan ( P , s ) ) ; end .
35.2.25
strupper
Synopsis: Convert null-terminated string to all-uppercase Declaration: function strupper(p: pchar) : pchar Visibility: default Description: Converts P to an all-uppercase string. Returns P. For an example, see StrLower (1191) Errors: None. See also: StrLower (1191)
1195
Chapter 36
36.2
36.2.1
SErrAmountStrings = Amount of search and replace strings dont match Error message used in stringsreplace function
36.2.2
Constants
AnsiResemblesProc : TCompareTextProc = @SoundexProc This procedural variable is standard set to SoundexProc (1220) but can be overriden with a userdened algorithm. This algorithm should return True if AText resembles AOtherText, or False otherwise. The standard routine compares the soundexes of the two strings and returns True if they are equal. Brackets = [(, ), [, ], {, }] Set of characters that contain all possible bracket characters DigitChars = [0..9] Set of digit characters StdSwitchChars = [-, /] 1196
Standard characters for the SwitchChars argument of GetCmdLineArg (1209). StdWordDelims = [#0.. , ,, ., ;, /, \, :, , ", ] + Brackets Standard word delimiter values. WordDelimiters : Set of Char = [#0..#255] - [a..z, A..Z, 1..9, 0] Standard word delimiters, used in the SearchBuf (1219) call.
36.2.3
Types
= 1..MaxInt Various string handling routines = 1..8 Various string handling routines TCompareTextProc = function(const AText: string;const AOther: string) : Boolean Function prototype for comparing two string in AnsiResemblesText (1202) TStringSeachOption = TStringSearchOption There is an typo error in the original Borland StrUtils unit. This type just refers to the correct TStringSearchOption (1197) and is provided for compatibility only. TStringSearchOption = (soDown,soMatchCase,soWholeWord)
Table 36.2: Enumeration values for type TStringSearchOption Value soDown soMatchCase soWholeWord Explanation Search in down direction. Match case Search whole words only.
Possible options for SearchBuf (1219) call. TStringSearchOptions = Set of TStringSearchOption Set of options for SearchBuf (1219) call.
1197
36.3
36.3.1
Synopsis: Add characters to the left of a string till a certain length Declaration: function AddChar(C: Char;const S: string;N: Integer) : string Visibility: default Description: AddChar adds characters (C) to the left of S till the length N is reached, and returns the resulting string. If the length of S is already equal to or larger than N, then no characters are added. The resulting string can be thought of as a right-aligned version of S, with length N. Errors: None See also: AddCharR (1198), PadLeft (1214), PadRight (1215), PadCenter (1214)
36.3.2
AddCharR
Synopsis: Add chars at the end of a string till it reaches a certain length Declaration: function AddCharR(C: Char;const S: string;N: Integer) : string Visibility: default Description: AddCharR adds characters (C) to the right of S till the length N is reached, and returns the resulting string. If the length of S is already equal to or larger than N, then no characters are added. The resulting string can be thought of as a left-aligned version of S, with length N . Errors: None See also: AddChar (1198)
36.3.3
AnsiContainsStr
Synopsis: Checks whether a string contains a given substring Declaration: function AnsiContainsStr(const AText: string;const ASubText: string) : Boolean Visibility: default Description: AnsiContainsString checks whether AText contains ASubText, and returns True if this is the case, or returns False otherwise. The search is performed case-sensitive. Errors: None See also: AnsiContainsText (1198), AnsiEndsStr (1199), AnsiIndexStr (1199), AnsiStartsStr (1203)
36.3.4
AnsiContainsText
Synopsis: Check whether a string contains a certain substring, ignoring case. Declaration: function AnsiContainsText(const AText: string;const ASubText: string) : Boolean Visibility: default 1198
Description: AnsiContainsString checks whether AText contains ASubText, and returns True if this is the case, or returns False otherwise. The search is performed case-insensitive. See also: AnsiContainsStr (1198), AnsiEndsText (1199), AnsiIndexText (1200), AnsiStartsText (1203)
36.3.5
AnsiEndsStr
Synopsis: Check whether a string ends with a certain substring Declaration: function AnsiEndsStr(const ASubText: string;const AText: string) : Boolean Visibility: default Description: AnsiEndsStr checks AText to see whether it ends with ASubText, and returns True if it does, False if not. The check is performed case-sensitive. Basically, it checks whether the position of ASubText equals the length of AText minus the length of ASubText plus one. Errors: None. See also: AnsiEndsText (1199), AnsiStartsStr (1203), AnsiIndexStr (1199), AnsiContainsStr (1198)
36.3.6
AnsiEndsText
Synopsis: Check whether a string ends with a certain substring, ignoring case. Declaration: function AnsiEndsText(const ASubText: string;const AText: string) : Boolean Visibility: default Description: AnsiEndsStr checks AText to see whether it ends with ASubText , and returns True if it does, False if not. The check is performed case-insensitive. Basically, it checks whether the position of ASubText equals the length of AText minus the length of ASubText plus one. Errors: None See also: AnsiStartsText (1203), AnsiEndsStr (1199), AnsiIndexText (1200), AnsiContainsText (1198)
36.3.7
AnsiIndexStr
Synopsis: Searches, observing case, for a string in an array of strings. Declaration: function AnsiIndexStr(const AText: string;const AValues: Array of ) : Integer Visibility: default Description: AnsiIndexStr matches AText against each string in AValues . If a match is found, the corresponding index (zero-based) in the AValues array is returned. If no match is found, -1 is returned. The strings are matched observing case. Errors: None. See also: AnsiIndexText (1200), AnsiMatchStr (1200), AnsiMatchText (1200)
1199
36.3.8
AnsiIndexText
Synopsis: Searches, case insensitive, for a string in an array of strings. Declaration: function AnsiIndexText(const AText: string;const AValues: Array of ) : Integer Visibility: default Description: AnsiIndexStr matches AText against each string in AValues . If a match is found, the corresponding index (zero-based) in the AValues array is returned. If no match is found, -1 is returned. The strings are matched ignoring case. Errors: None See also: AnsiIndexStr (1199), AnsiMatchStr (1200), AnsiMatchText (1200)
36.3.9
AnsiLeftStr
Synopsis: Copies a number of characters starting at the left of a string Declaration: function AnsiLeftStr(const AText: AnsiString;const ACount: Integer) : AnsiString Visibility: default Description: AnsiLeftStr returns the ACount leftmost characters from AText. If ACount is larger than the length of AText, only as much characters as available in AText will be copied. If ACount is zero or negative, no characters will be copied. The characters are counted as characters, not as Bytes. This function corresponds to the Visual Basic LeftStr function. Errors: None. See also: AnsiMidStr (1201), AnsiRightStr (1202), LeftStr (1212), RightStr (1217), MidStr (1213), LeftBStr (1212), RightBStr (1217), MidBStr (1213)
36.3.10
AnsiMatchStr
Synopsis: Check whether a string occurs in an array of strings, observing case. Declaration: function AnsiMatchStr(const AText: string;const AValues: Array of ) : Boolean Visibility: default Description: AnsiIndexStr matches AText against each string in AValues. If a match is found, it returns True, otherwise False is returned. The strings are matched observing case. This function simply calls AnsiIndexStr (1199) and checks whether it returns -1 or not.
36.3.11
AnsiMatchText
Synopsis: Check whether a string occurs in an array of strings, disregarding case. Declaration: function AnsiMatchText(const AText: string;const AValues: Array of ) : Boolean Visibility: default 1200
Description: AnsiIndexStr matches AText against each string in AValues. If a match is found, it returns True, otherwise False is returned. The strings are matched ignoring case. This function simply calls AnsiIndexText (1200) and checks whether it returns -1 or not.
36.3.12
AnsiMidStr
Synopsis: Returns a number of characters copied from a given location in a string Declaration: function AnsiMidStr(const AText: AnsiString;const AStart: Integer; const ACount: Integer) : AnsiString Visibility: default Description: AnsiMidStr returns ACount characters from AText, starting at position AStart. If AStart+ACount is larger than the length of AText, only as much characters as available in AText (starting from AStart) will be copied. If ACount is zero or negative, no characters will be copied. The characters are counted as characters, not as Bytes. This function corresponds to the Visual Basic MidStr function. Errors: None See also: AnsiLeftStr (1200), AnsiRightStr (1202), LeftStr (1212), RightStr (1217), MidStr (1213), LeftBStr (1212), RightBStr (1217), MidBStr (1213)
36.3.13
AnsiProperCase
Synopsis: Pretty-Print a string: make lowercase and capitalize rst letters of words Declaration: function AnsiProperCase(const S: string;const WordDelims: TSysCharSet) : string Visibility: default Description: AnsiProperCase converts S to an all lowercase string, but capitalizes the rst letter of every word in the string, and returns the resulting string. When searching for words, the characters in WordDelimiters are used to determine the boundaries of words. The constant StdWordDelims (1197) can be used for this.
36.3.14
AnsiReplaceStr
Synopsis: Search and replace all occurrences of a string, case sensitive. Declaration: function AnsiReplaceStr(const AText: string;const AFromText: string; const AToText: string) : string Visibility: default Description: AnsiReplaceString searches AText for all occurrences of the string AFromText and replaces them with AToText, and returns the resulting string. The search is performed observing case. Errors: None. See also: AnsiReplaceText (1202), SearchBuf (1219)
1201
36.3.15
AnsiReplaceText
Synopsis: Search and replace all occurrences of a string, case insensitive. Declaration: function AnsiReplaceText(const AText: string;const AFromText: string; const AToText: string) : string Visibility: default Description: AnsiReplaceString searches AText for all occurrences of the string AFromText and replaces them with AToText , and returns the resulting string. The search is performed ignoring case. Errors: None. See also: AnsiReplaceStr (1201), SearchBuf (1219)
36.3.16
AnsiResemblesText
Synopsis: Check whether 2 strings resemble each other. Declaration: function AnsiResemblesText(const AText: string;const AOther: string) : Boolean Visibility: default Description: AnsiResemblesText will check whether AnsiResemblesProc (1196) is set. If it is not set, False is returned. If it is set, AText and AOtherText are passed to it and its result is returned. Errors: None. See also: AnsiResemblesProc (1196), SoundexProc (1220)
36.3.17
AnsiReverseString
Synopsis: Reverse the letters in a string. Declaration: function AnsiReverseString(const AText: AnsiString) : AnsiString Visibility: default Description: AnsiReverseString returns a string with all characters of AText in reverse order. if the result of this function equals AText, AText is called an anagram. Errors: None.
36.3.18
AnsiRightStr
Synopsis: Copies a number of characters starting at the right of a string Declaration: function AnsiRightStr(const AText: AnsiString;const ACount: Integer) : AnsiString Visibility: default Description: AnsiLeftStr returns the ACount rightmost characters from AText. If ACount is larger than the length of AText, only as much characters as available in AText will be copied. If ACount is zero or negative, no characters will be copied. The characters are counted as characters, not as Bytes. This function corresponds to the Visual Basic RightStr function. 1202
Errors: None. See also: AnsiLeftStr (1200), AnsiMidStr (1201), LeftStr (1212), RightStr (1217), MidStr (1213), LeftBStr (1212), RightBStr (1217), MidBStr (1213)
36.3.19
AnsiStartsStr
Synopsis: Check whether a string starts with a given substring, observing case Declaration: function AnsiStartsStr(const ASubText: string;const AText: string) : Boolean Visibility: default Description: AnsiStartsStr checks AText to see whether it starts with ASubText , and returns True if it does, False if not. The check is performed case-sensitive. Basically, it checks whether the position of ASubText equals 1. See also: AnsiEndsStr (1199), AnsiStartsStr (1203), AnsiIndexStr (1199), AnsiContainsStr (1198)
36.3.20
AnsiStartsText
Synopsis: Check whether a string starts with a given substring, ignoring case Declaration: function AnsiStartsText(const ASubText: string;const AText: string) : Boolean Visibility: default Description: AnsiStartsText checks AText to see whether it starts with ASubText , and returns True if it does, False if not. The check is performed case-insensitive. Basically, it checks whether the position of ASubText equals 1. Errors: None. See also: AnsiEndsText (1199), AnsiStartsStr (1203), AnsiIndexText (1200), AnsiContainsText (1198)
36.3.21
BinToHex
Synopsis: Convert a binary buffer to a hexadecimal string Declaration: procedure BinToHex(BinValue: PChar;HexValue: PChar;BinBufSize: Integer) Visibility: default Description: BinToHex converts the byte values in BinValue to a string consisting of 2-charachter hexadecimal strings in HexValue. BufSize species the length of BinValue, which means that HexValue must have size 2*BufSize. For example a buffer containing the byte values 255 and 0 will be converted to FF00. Errors: No length checking is done, so if an invalid size is specied, an exception may follow. See also: HexToBin (1210)
1203
36.3.22
Copy2Space
Synopsis: Returns all characters in a string till the rst space character (not included). Declaration: function Copy2Space(const S: string) : string Visibility: default Description: Copy2Space determines the position of the rst space in the string S and returns all characters up to this position. The space character itself is not included in the result string. The string S is left untouched. If there is no space in S, then the whole string S is returned. This function simply calls Copy2Symb (1204) with the space (ASCII code 32) as the symbol argument. Errors: None. See also: Copy2Symb (1204), Copy2SpaceDel (1204)
36.3.23
Copy2SpaceDel
Synopsis: Deletes and returns all characters in a string till the rst space character (not included). Declaration: function Copy2SpaceDel(var S: string) : string Visibility: default Description: Copy2SpaceDel determines the position of the rst space in the string S and returns all characters up to this position. The space character itself is not included in the result string. All returned characters, including the space, are deleted from the string S, after which it is right-trimmed. If there is no space in S, then the whole string S is returned, and S itself is emptied. This function simply calls Copy2SymbDel (1205) with the space (ASCII code 32) as the symbol argument. Errors: None. See also: Copy2SymbDel (1205), Copy2Space (1204)
36.3.24
Copy2Symb
Synopsis: Returns all characters in a string till a given character (not included). Declaration: function Copy2Symb(const S: string;Symb: Char) : string Visibility: default Description: Copy2Symb determines the position of the rst occurrence of Symb in the string S and returns all characters up to this position. The Symb character itself is not included in the result string. The string S is left untouched. If Symb does not appear in S, then the whole of S is returned. Errors: None. See also: Copy2Space (1204), Copy2SymbDel (1205)
1204
36.3.25
Copy2SymbDel
Synopsis: Deletes and returns all characters in a string till a given character (not included). Declaration: function Copy2SymbDel(var S: string;Symb: Char) : string Visibility: default Description: Copy2SymbDel determines the position of the rst occurrence of Symb in the string S and returns all characters up to this position. The Symb character itself is not included in the result string. All returned characters and the Symb character, are deleted from the string S, after which it is righttrimmed. If Symb does not appear in S, then the whole of S is returned, and S itself is emptied. Errors: None. See also: Copy2SpaceDel (1204), Copy2Symb (1204)
36.3.26
Dec2Numb
Synopsis: Convert a decimal number to a string representation, using given a base. Declaration: function Dec2Numb(N: LongInt;Len: Byte;Base: Byte) : string Visibility: default Description: Dec2Numb converts N to its representation using base Base. The resulting string is left-padded with zeroes till it has length Len. Base must be in the range 2-36 to be meaningful, but no checking on this is performed. Errors: If Base is out of range, the resulting string will contain unreadable (non-alphanumeric) characters. See also: Hex2Dec (1209), IntToBin (1210), intToRoman (1211), RomanToInt (1218)
36.3.27
DecodeSoundexInt
Synopsis: Decodes the integer representation of a soundex code and returns the original soundex code. Declaration: function DecodeSoundexInt(AValue: Integer) : string Visibility: default Description: DecodeSoundexInt converts the integer value AValue to a soundex string. It performs the reverse operation of the SoundexInt (1220) function. The result is the soundex string corresponding to AValue. . Errors: None. See also: SoundexInt (1220), DecodeSoundexWord (1205), Soundex (1219)
36.3.28
DecodeSoundexWord
Synopsis: Decodes the word-sized representation of a soundex code and returns the original soundex code. Declaration: function DecodeSoundexWord(AValue: Word) : string Visibility: default Description: DecodeSoundexWord converts the integer value AValue to a soundex string. It performs the reverse operation of the SoundexWord (1221) function. The result is the soundex string corresponding to AValue . 1205
Errors: None. See also: SoundexInt (1220), DecodeSoundexInt (1205), Soundex (1219)
36.3.29
DelChars
Synopsis: Delete all occurrences of a given character from a string. Declaration: function DelChars(const S: string;Chr: Char) : string Visibility: default Description: DelChars returns a copy of S with all Chr characters removed from it. Errors: None. See also: DelSpace (1206), DelSpace1 (1206)
36.3.30
DelSpace
Synopsis: Delete all occurrences of a space from a string. Declaration: function DelSpace(const S: string) : string Visibility: default Description: DelSpace returns a copy of S with all spaces (ASCII code 32) removed from it. Errors: None. See also: DelChars (1206), DelSpace1 (1206)
36.3.31
DelSpace1
Synopsis: Reduces sequences of space characters to 1 space character. Declaration: function DelSpace1(const S: string) : string Visibility: default Description: DelSpace1 returns a copy of S with all sequences of spaces reduced to 1 space. Errors: None. See also: DelChars (1206), DelSpace (1206)
36.3.32
DupeString
Synopsis: Creates and concatenates N copies of a string Declaration: function DupeString(const AText: string;ACount: Integer) : string Visibility: default Description: DupeString returns a string consisting of ACount concatenations of AText. Thus DupeString(1234567890,3);
1206
36.3.33
ExtractDelimited
Synopsis: Extract the N-th delimited part from a string. Declaration: function ExtractDelimited(N: Integer;const S: string; const Delims: TSysCharSet) : string Visibility: default Description: ExtractDelimited extracts the N-th part from the string S. The set of characters in Delims are used to mark part boundaries. When a delimiter is encountered, a new part is started and the old part is ended. Another way of stating this is that any (possibly empty) series of characters not in Delims, situated between 2 characters in Delims, it is considered as piece of a part. This means that if 2 delimiter characters appear next to each other, there is an empty part between it. If an N-th part cannot be found, an empty string is returned. However, unlike ExtractWord (1208), an empty string is a valid return value, i.e. a part can be empty. The pre-dened constant StdWordDelims (1197) can be used for the Delims argument. The predened constant Brackets (1196) would be better suited the Delims argument e.g. in case factors in a mathematical expression are searched. Errors: None. See also: ExtractSubStr (1207), ExtractWord (1208), ExtractWordPos (1208)
36.3.34
ExtractSubstr
Synopsis: Extract a word from a string, starting at a given position in the string. Declaration: function ExtractSubstr(const S: string;var Pos: Integer; const Delims: TSysCharSet) : string Visibility: default Description: ExtractSubStr returns all characters from S starting at position Pos till the rst character in Delims, or till the end of S is reached. The delimiter character is not included in the result. Pos is then updated to point to the next rst non-delimiter character in S. If Pos is larger than the Length of S, an empty string is returned. The pre-dened constant StdWordDelims (1197) can be used for the Delims argument. Errors: None. See also: ExtractDelimited (1207), ExtractWord (1208), ExtractWordPos (1208)
1207
36.3.35
ExtractWord
Synopsis: Extract the N-th word out of a string. Declaration: function ExtractWord(N: Integer;const S: string; const WordDelims: TSysCharSet) : string Visibility: default Description: ExtractWord extracts the N-th word from the string S. The set of characters in WordDelims are used to mark word boundaries. A word is dened as any non-empty sequence of characters which are not present in WordDelims: if a character is not in WordDelims, it is considered as part of a word. If an N-th word cannot be found, an empty string is returned. Unlike ExtractDelimited (1207), an empty string is not a valid return value, i.e. is not a word. If an empty string is returned, the index N was out of range. The pre-dened constant StdWordDelims (1197) can be used for the WordDelims argument. Errors: None. See also: ExtractWordPos (1208), ExtractSubStr (1207), ExtractDelimited (1207), IsWordPresent (1212), WordCount (1223), WordPosition (1223)
36.3.36
ExtractWordPos
Synopsis: Extract a word from a string, and return the position where it was located in the string. Declaration: function ExtractWordPos(N: Integer;const S: string; const WordDelims: TSysCharSet;var Pos: Integer) : string Visibility: default Description: ExtractWordPos extracts the N-th word from the string S and returns the position of this word in Pos. The set of characters in WordDelims are used to mark word boundaries. A word is dened as any non-empty sequence of characters which are not present in WordDelims : if a character is not in WordDelims , it is considered as part of a word. If an N -th word cannot be found, an empty string is returned and Pos is zero. Unlike ExtractDelimited (1207), an empty string is not a valid return value, i.e. is not a word. If an empty string is returned, the index N was out of range. The pre-dened constant StdWordDelims (1197) can be used for the WordDelims argument. Errors: None. See also: ExtractWord (1208), ExtractSubStr (1207), IsWordPresent (1212), WordCount (1223), WordPosition (1223)
36.3.37
FindPart
Synopsis: Search for a substring in a string, using wildcards. Declaration: function FindPart(const HelpWilds: string;const InputStr: string) : Integer Visibility: default
1208
Description: FindPart searches the string InputStr and returns the rst string that matches the wildcards specication in HelpWilds . If no match is found, and empty string is returned. Currently, the only valid wildcards is the "?" character. Errors: None. See also: SearchBuf (1219)
36.3.38
GetCmdLineArg
Synopsis: Returns the command-line argument following the given switch. Declaration: function GetCmdLineArg(const Switch: string;SwitchChars: TSysCharSet) : string Visibility: default Description: GetCmdLineArg returns the value for the Switch option on the command-line, if any is given. Command-line arguments are considered switches if they start with one of the characters in the SwitchChars set. The value is the command-line argument following the switch command-line argument. Gnu-style (long) Options of the form switch=value are not supported. The StdSwitchChars (1197) constant can be used as value for the SwitchChars parameter. Errors: The GetCmdLineArg does not check whether the value of the option does not start with a switch character. i.e. myprogram -option1 -option2 will result in "-option2" as the result of the GetCmdLineArg call for option1. See also: StdSwitchChars (1197)
36.3.39
Hex2Dec
Synopsis: Converts a hexadecimal string to a decimal value Declaration: function Hex2Dec(const S: string) : LongInt Visibility: default Description: Hex2Dec converts the hexadecimal value in the string S to its decimal value. Unlike the standard Valor StrToInt functions, there need not be a $ sign in front of the hexadecimal value to indicate that it is indeed a hexadecimal value. Errors: If S does not contain a valid hexadecimal value, an EConvertError exception will be raised. See also: Dec2Numb (1205), IntToBin (1210), intToRoman (1211), RomanToInt (1218)
1209
36.3.40
HexToBin
Synopsis: Convert a hexadecimal string to a binary buffer Declaration: function HexToBin(HexValue: PChar;BinValue: PChar;BinBufSize: Integer) : Integer Visibility: default Description: HexToBin scans the hexadecimal string representation in HexValue and transforms every 2 character hexadecimal number to a byte and stores it in BinValue. The buffer size is the size of the binary buffer. Scanning will stop if the size of the binary buffer is reached or when an invalid character is encountered. The return value is the number of stored bytes. Errors: No length checking is done, so if an invalid size is specied, an exception may follow. See also: BinToHex (1203)
36.3.41
IfThen
Synopsis: Returns one of two strings, depending on a boolean expression Declaration: function IfThen(AValue: Boolean;const ATrue: string; const AFalse: string) : string; Overload Visibility: default Description: IfThen returns ATrue if AValue is True, and returns AFalse if AValue is false. Errors: None. See also: AnsiMatchStr (1200), AnsiMatchText (1200)
36.3.42
IntToBin
Synopsis: Converts an integer to a binary string representation, inserting spaces at xed locations. Declaration: function IntToBin(Value: LongInt;Digits: Integer;Spaces: Integer) : string function IntToBin(Value: LongInt;Digits: Integer) : string function intToBin(Value: Int64;Digits: Integer) : string Visibility: default Description: IntToBin converts Value to a string with its binary (base 2) representation. The resulting string contains at least Digits digits, with spaces inserted every Spaces digits. Spaces should be a nonzero value. If Digits is larger than 32, it is truncated to 32. Errors: If spaces is zero, a division by zero error will occur. See also: Hex2Dec (1209), IntToRoman (1211)
1210
36.3.43
IntToRoman
Synopsis: Represent an integer with roman numerals Declaration: function IntToRoman(Value: LongInt) : string Visibility: default Description: IntToRoman converts Value to a string with the Roman representation of Value. Number up to 1 million can be represented this way. Errors: None. See also: RomanToInt (1218), Hex2Dec (1209), IntToBin (1210)
36.3.44
IsEmptyStr
Synopsis: Check whether a string is empty, disregaring whitespace characters Declaration: function IsEmptyStr(const S: string;const EmptyChars: TSysCharSet) : Boolean Visibility: default Description: IsEmptyStr returns True if the string S only contains characters whitespace characters, all characters in EmptyChars are considered whitespace characters. If a character not present in EmptyChars is found in S, False is returned. Errors: None. See also: IsWild (1211), FindPart (1208), IsWordPresent (1212)
36.3.45
IsWild
Synopsis: Check whether a string matches a wildcard search expression. Declaration: function IsWild(InputStr: string;Wilds: string;IgnoreCase: Boolean) : Boolean Visibility: default Description: IsWild checks InputStr for the presence of the Wilds string. Wilds may contain "?" and "*" wildcard characters, which have their usual meaning: "*" matches any series of characters, possibly empty. "?" matches any single character. The function returns True if a string is found that matches Wilds, False otherwise. If IgnoreCase is True, the non-wildcard characters are matched case insensitively. If it is False, case is observed when searching. Errors: None. See also: SearchBuf (1219), FindPart (1208)
1211
36.3.46
IsWordPresent
Synopsis: Check for the presence of a word in a string. Declaration: function IsWordPresent(const W: string;const S: string; const WordDelims: TSysCharSet) : Boolean Visibility: default Description: IsWordPresent checks for the presence of the word W in the string S. Words are delimited by the characters found in WordDelims. The function returns True if a match is found, False otherwise. The search is performed case sensitive. This function is equivalent to the SearchBuf (1219) function with the soWholeWords option specied. Errors: None. See also: SearchBuf (1219)
36.3.47
LeftBStr
Synopsis: Copies Count characters starting at the left of a string. Declaration: function LeftBStr(const AText: AnsiString;const AByteCount: Integer) : AnsiString Visibility: default Description: LeftBStr returns a string containing the leftmost AByteCount bytes from the string AText . If AByteCount is larger than the length (in bytes) of AText , only as many bytes as available are returned. Errors: None. See also: LeftStr (1212), AnsiLeftStr (1200), RightBStr (1217), MidBStr (1213)
36.3.48
LeftStr
Synopsis: Copies Count characters starting at the left of a string. Declaration: function LeftStr(const AText: AnsiString;const ACount: Integer) : AnsiString function LeftStr(const AText: WideString;const ACount: Integer) : WideString Visibility: default Description: LeftStr returns a string containing the leftmost ACount characters from the string AText . If ACount is larger than the length (in characters) of AText , only as many characters as available are returned. Errors: None. See also: LeftBStr (1212), AnsiLeftStr (1200), RightStr (1217), MidStr (1213)
1212
36.3.49
MidBStr
Synopsis: Copies a number of characters starting at a given position in a string. Declaration: function MidBStr(const AText: AnsiString;const AByteStart: Integer; const AByteCount: Integer) : AnsiString Visibility: default Description: MidBStr returns a string containing the rst AByteCount bytes from the string AText starting at position AByteStart. If AByteStart+AByteCount is larger than the length (in bytes) of AText, only as many bytes as available are returned. If AByteStart is less than 1 or larger than the length of AText, then no characters are returned. Errors: None. See also: LeftBStr (1212), AnsiMidStr (1201), RightBStr (1217), MidStr (1213)
36.3.50
MidStr
AnsiString;const AStart: Integer; Integer) : AnsiString WideString;const AStart: Integer; Integer) : WideString
Synopsis: Copies a number of characters starting at a given position in a string. Declaration: function MidStr(const AText: const ACount: function MidStr(const AText: const ACount: Visibility: default Description: MidStr returns a string containing the rst ACount bytes from the string AText starting at position AStart. If AStart+ACount is larger than the length (in characters) of AText, only as many characters as available are returned. If AStart is less than 1 or larger than the length of AText, then no characters are returned. This function is equivalent to the standard Copy function, and is provided for completeness only. Errors: None. See also: LeftStr (1212), AnsiMidStr (1201), RightStr (1217), MidBStr (1213)
36.3.51
NPos
Synopsis: Returns the position of the N-th occurence of a substring in a string. Declaration: function NPos(const C: string;S: string;N: Integer) : Integer Visibility: default Description: NPos checks S for the position of the N-th occurrence of C. If C occurs less than N times in S, or does not occur in S at all, 0 is returned. If N is less than 1, zero is returned. Errors: None. See also: WordPosition (1223), FindPart (1208)
1213
36.3.52
Numb2Dec
Synopsis: Converts a string representation of a number to its numerical value, given a certain base. Declaration: function Numb2Dec(S: string;Base: Byte) : LongInt Visibility: default Description: Numb2Dec converts the number in string S to a decimal value. It assumes the number is represented using Base as the base. No checking is performed to see whether S contains a valid number using base Base. Errors: None. See also: Hex2Dec (1209), Numb2USA (1214)
36.3.53
Numb2USA
Synopsis: Insert thousand separators. Declaration: function Numb2USA(const S: string) : string Visibility: default Description: Numb2USA inserts thousand separators in the string S at the places where they are supposed to be, i.e. every 3 digits. The string S should contain a valid integer number, i.e. no digital number. No checking on this is done. Errors: None.
36.3.54
PadCenter
Synopsis: Pad the string to a certain length, so the string is centered. Declaration: function PadCenter(const S: string;Len: Integer) : string Visibility: default Description: PadCenter add spaces to the left and right of the string S till the result reaches length Len. If the number of spaces to add is odd, then the extra space will be added at the end. If the string S has length equal to or largert than Len, no spaces are added, and the string S is returned as-is. Errors: None. See also: PadLeft (1214), PadRight (1215), AddChar (1198), AddCharR (1198)
36.3.55
PadLeft
Synopsis: Add spaces to the left of a string till a certain length is reached. Declaration: function PadLeft(const S: string;N: Integer) : string Visibility: default Description: PadLeft add spaces to the left of the string S till the result reaches length Len. If the string S has length equal to or largert than Len, no spaces are added, and the string S is returned as-is. The resulting string is S, right-justied on length Len. Errors: None. See also: PadLeft (1214), PadCenter (1214), AddChar (1198), AddCharR (1198) 1214
36.3.56
PadRight
Synopsis: Add spaces to the right of a string till a certain length is reached. Declaration: function PadRight(const S: string;N: Integer) : string Visibility: default Description: PadRight add spaces to the left of the string S till the result reaches length Len. If the string S has length equal to or largert than Len, no spaces are added, and the string S is returned as-is. The resulting string is S, left-justied on length Len. Errors: None. See also: PadLeft (1214), PadCenter (1214), AddChar (1198), AddCharR (1198)
36.3.57
PosEx
Synopsis: Search for the occurance of a character in a string, starting at a certain position. Declaration: function PosEx(const SubStr: string;const S: string;Offset: Cardinal) : Integer function PosEx(const SubStr: string;const S: string) : Integer function PosEx(c: Char;const S: string;Offset: Cardinal) : Integer Visibility: default Description: PosEx returns the position of the rst occurrence of the character C or the substring SubStr in the string S, starting the search at position Offset (default 1). If C or SubStr does not occur in S after the given Offset, zero is returned. The position Offset is also searched. Errors: None. See also: NPos (1213), AnsiContainsText (1198), AnsiContainsStr (1198)
36.3.58
PosSet
Synopsis: Return the position in a string of any character out of a set of characters Declaration: function PosSet(const c: TSysCharSet;const s: ansistring) : Integer function PosSet(const c: string;const s: ansistring) : Integer Visibility: default Description: PosSet returns the position in s of the rst found character which is in the set c. If none of the characters in c is found in s, then 0 is returned. Errors: None. See also: PosEx (1215), PosSetEx (1215), #rtl.system.pos (1376), RPosEx (1218)
36.3.59
PosSetEx
Synopsis: Return the position in a string of any character out of a set of characters, starting at a certain position Declaration: function PosSetEx(const c: TSysCharSet;const s: ansistring; count: Integer) : Integer function PosSetEx(const c: string;const s: ansistring;count: Integer) : Integer 1215
Visibility: default Description: PosSetEx returns the position in s of the rst found character which is in the set c, and starts searching at character position Count. If none of the characters in c is found in s, then 0 is returned. Errors: None. See also: PosEx (1215), PosSet (1215), #rtl.system.pos (1376), RPosEx (1218)
36.3.60
RandomFrom
Overload
Synopsis: Choose a random string from an array of strings. Declaration: function RandomFrom(const AValues: Array of ) : string; Visibility: default Description: RandomFrom picks at random a valid index in the array AValues and returns the string at that position in the array. Errors: None. See also: AnsiMatchStr (1200), AnsiMatchText (1200)
36.3.61
Removeleadingchars
Synopsis: Remove any leading characters in a set from a string Declaration: procedure Removeleadingchars(var S: AnsiString;const CSet: TSysCharset) Visibility: default Description: Removeleadingchars removes any starting characters from S that appear in the set CSet. It stops removing characters as soon as a character not in CSet is encountered. This is similar in behaviour to TrimLeft (1586) which used whitespace as the set. Errors: None. See also: TrimLeft (1586), RemoveTrailingChars (1217), RemovePadChars (1216), TrimLeftSet (1222)
36.3.62
RemovePadChars
Synopsis: Remove any trailing or leading characters in a set from a string Declaration: procedure RemovePadChars(var S: AnsiString;const CSet: TSysCharset) Visibility: default Description: RemovePadChars removes any leading trailing characters from S that appear in the set CSet, i.e. it starts with the last character and works its way to the start of the string, and it stops removing characters as soon as a character not in CSet is encountered. Then the same procedure is repeated starting from the beginning of the string. This is similar in behaviour to Trim (1585) which used whitespace as the set. Errors: None. See also: Trim (1585), RemoveLeadingChars (1216), RemoveTrailingChars (1217), TrimSet (1223), TrimLeftSet (1222), TrimRightSet (1222)
1216
36.3.63
RemoveTrailingChars
Synopsis: Remove any trailing characters in a set from a string Declaration: procedure RemoveTrailingChars(var S: AnsiString;const CSet: TSysCharset) Visibility: default Description: RemoveTrailingChars removes any trailing characters from S that appear in the set CSet, i.e. it starts with the last character and works its way to the start of the string. It stops removing characters as soon as a character not in CSet is encountered. This is similar in behaviour to TrimRight (1587) which used whitespace as the set. See also: TrimRight (1586), RemoveLeadingChars (1216), TrimRightSet (1222)
36.3.64
ReverseString
Synopsis: Reverse characters in a string Declaration: function ReverseString(const AText: string) : string Visibility: default Description: ReverseString returns a string, made up of the characters in string AText, in reverse order. Errors: None. See also: RandomFrom (1216)
36.3.65
RightBStr
Synopsis: Copy a given number of characters (bytes), counting from the right of a string. Declaration: function RightBStr(const AText: AnsiString;const AByteCount: Integer) : AnsiString Visibility: default Description: RightBStr returns a string containing the rightmost AByteCount bytes from the string AText. If AByteCount is larger than the length (in bytes) of AText, only as many bytes as available are returned. Errors: None. See also: LeftBStr (1212), AnsiRightStr (1202), RightStr (1217), MidBStr (1213)
36.3.66
RightStr
Synopsis: Copy a given number of characters, counting from the right of a string. Declaration: function RightStr(const AText: AnsiString;const ACount: Integer) : AnsiString function RightStr(const AText: WideString;const ACount: Integer) : WideString Visibility: default
1217
Description: RightStr returns a string containing the rightmost ACount characters from the string AText . If ACount is larger than the length (in characters) of AText , only as many characters as available are returned. Errors: None. See also: LeftStr (1212), AnsiRightStr (1202), RightBStr (1217), MidStr (1213)
36.3.67
RomanToInt
Synopsis: Convert a string with a Roman number to its decimal value. Declaration: function RomanToInt(const S: string) : LongInt Visibility: default Description: RomanToInt returns the decimal equivalent of the Roman numerals in the string S. Invalid characters are dropped from S. A negative numeral is supported as well. Errors: None. See also: IntToRoman (1211), Hex2Dec (1209), Numb2Dec (1214)
36.3.68
RPos
Synopsis: Find last occurrence of substring or character in a string Declaration: function RPos(c: Char;const S: AnsiString) : Integer; Overload function RPos(const Substr: AnsiString;const Source: AnsiString) : Integer; Overload Visibility: default Description: RPos looks in S for the character C or the string SubStr. It starts looking at the end of the string, and searches towards the beginning of the string. If a match is found, it returns the position of the match. See also: RPosEx (1218)
36.3.69
RPosex
Synopsis: Find last occurrence substring or character in a string, starting at a certain position Declaration: function RPosEX(C: Char;const S: AnsiString;offs: Cardinal) : Integer ; Overload function RPosex(const Substr: AnsiString;const Source: AnsiString; offs: Cardinal) : Integer; Overload Visibility: default Description: RPos looks in S for the character C or the string SubStr. It starts looking at position Offs (counted from the start of the string), and searches towards the beginning of the string. If a match is found, it returns the position of the match. See also: RPos (1218)
1218
36.3.70
SearchBuf
Synopsis: Search a buffer for a certain string. Declaration: function SearchBuf(Buf: PChar;BufLen: Integer;SelStart: Integer; SelLength: Integer;SearchString: string; Options: TStringSearchOptions) : PChar function SearchBuf(Buf: PChar;BufLen: Integer;SelStart: Integer; SelLength: Integer;SearchString: string) : PChar Visibility: default Description: SearchBuf searches the buffer Buf for the occurrence of SearchString. At must Buflen characters are searched, and the search is started at SelStart+SelLength. If a match is found, a pointer to the position of the match is returned. The parameter Options (1197) species how the search is conducted. It is a set of the following options: Table 36.3: Option soDown soMatchCase soWholeWord Effect Searches forward, starting at the end of the selection. Default is searching up Observe case when searching. Default is to ignore case. Match only whole words. Default also returns parts of words
The standard constant WordDelimiters (1197) is used to mark the boundaries of words. The SelStart parameter is zero based. Errors: Buen must be the real length of the string, no checking on this is performed. See also: FindPart (1208), ExtractWord (1208), ExtractWordPos (1208), ExtractSubStr (1207), IsWordPresent (1212)
36.3.71
Soundex
Synopsis: Compute the soundex of a string Declaration: function Soundex(const AText: string;ALength: TSoundexLength) : string function Soundex(const AText: string) : string Visibility: default Description: Soundex computes a soundex code for AText. The resulting code will at most have ALength characters. The soundex code is computed according to the US system of soundex computing, which may result in inaccurate results in other languages. Errors: None. See also: SoundexCompare (1219), SoundexInt (1220), SoundexProc (1220), SoundexWord (1221), SoundexSimilar (1221)
36.3.72
SoundexCompare
1219
Declaration: function SoundexCompare(const AText: string;const AOther: string; ALength: TSoundexLength) : Integer function SoundexCompare(const AText: string;const AOther: string) : Integer Visibility: default Description: SoundexCompare computes the soundex codes of AText and AOther and feeds these to CompareText. It will return -1 if the soundex code of AText is less than the soundex code of AOther, 0 if they are equal, and 1 if the code of AOther is larger than the code of AText. Errors: None. See also: Soundex (1219), SoundexInt (1220), SoundexProc (1220), SoundexWord (1221), SoundexSimilar (1221)
36.3.73
SoundexInt
Synopsis: Soundex value as an integer. Declaration: function SoundexInt(const AText: string;ALength: TSoundexIntLength) : Integer function SoundexInt(const AText: string) : Integer Visibility: default Description: SoundexInt computes the Soundex (1219) code (with length ALength, default 4) of AText, and converts the code to an integer value. Errors: None. See also: Soundex (1219), SoundexCompare (1219), SoundexProc (1220), SoundexWord (1221), SoundexSimilar (1221)
36.3.74
SoundexProc
Synopsis: Default AnsiResemblesText implementation. Declaration: function SoundexProc(const AText: string;const AOther: string) : Boolean Visibility: default Description: SoundexProc is the standard implementation for the AnsiResemblesText (1202) procedure: By default, AnsiResemblesProc is set to this function. It compares the soundex codes of AOther and AText and returns True if they are equal, or False if they are not. Errors: None. See also: Soundex (1219), SoundexCompare (1219), SoundexInt (1220), SoundexWord (1221), SoundexSimilar (1221)
1220
36.3.75
SoundexSimilar
Synopsis: Check whether 2 strings have equal soundex values Declaration: function SoundexSimilar(const AText: string;const AOther: string; ALength: TSoundexLength) : Boolean function SoundexSimilar(const AText: string;const AOther: string) : Boolean Visibility: default Description: SoundexSimilar returns True if the soundex codes (with length ALength) of AText and AOther are equal, and False if they are not. Errors: None. See also: Soundex (1219), SoundexCompare (1219), SoundexInt (1220), SoundexProc (1220), SoundexWord (1221), Soundex (1219)
36.3.76
SoundexWord
Synopsis: Calculate a word-sized soundex value Declaration: function SoundexWord(const AText: string) : Word Visibility: default Description: SoundexInt computes the Soundex (1219) code (with length 4) of AText , and converts the code to a word-sized value. Errors: None. See also: Soundex (1219), SoundexCompare (1219), SoundexInt (1220), SoundexProc (1220), SoundexSimilar (1221)
36.3.77
StringsReplace
Synopsis: Replace occurrences of a set of strings to another set of strings Declaration: function StringsReplace(const S: string;OldPattern: Array of ; NewPattern: Array of ;Flags: TReplaceFlags) : string Visibility: default Description: StringsReplace scans S for the occurrence of one of the strings in OldPattern and replaces it with the corresponding string in NewPattern. It takes into account Flags, which has the same meaning as in StringReplace (1564). Corresponding strings are matched by location: the N-th string in OldPattern is replaced by the N-th string in NewPattern. Note that this means that the number of strings in both arrays must be the same. Errors: If the number of strings in both arrays is different, then an exception is raised. See also: StringReplace (1564), TReplaceFlags (1463)
1221
36.3.78
StuffString
Synopsis: Replace part of a string with another string. Declaration: function StuffString(const AText: string;AStart: Cardinal; ALength: Cardinal;const ASubText: string) : string Visibility: default Description: StuffString returns a copy of AText with the segment starting at AStart with length ALength, replaced with the string ASubText. Basically it deletes the segment of Atext and inserts the new text in its place. Errors: No checking on the validity of the AStart and ALength parameters is done. Providing invalid values may result in access violation errors. See also: FindPart (1208), DelChars (1206), DelSpace (1206), ExtractSubStr (1207), DupeString (1206)
36.3.79
Tab2Space
Synopsis: Convert tab characters to a number of spaces Declaration: function Tab2Space(const S: string;Numb: Byte) : string Visibility: default Description: Tab2Space returns a copy of S with all tab characters (ASCII character 9) converted to Numb spaces. Errors: None. See also: StuffString (1222), FindPart (1208), ExtractWord (1208), DelChars (1206), DelSpace (1206), DelSpace1 (1206), DupeString (1206)
36.3.80
TrimLeftSet
Synopsis: Remove any leading characters in a set from a string and returns the result Declaration: function TrimLeftSet(const S: string;const CSet: TSysCharSet) : string Visibility: default Description: TrimLeftSet performs the same action as RemoveLeadingChars (1216), but returns the resulting string. Errors: None. See also: TrimLeft (1586), RemoveLeadingChars (1216), RemoveTrailingChars (1217), RemovePadChars (1216), TrimSet (1223), TrimRightSet (1222)
36.3.81
TrimRightSet
Synopsis: Remove any trailing characters in a set from a string and returns the result Declaration: function TrimRightSet(const S: string;const CSet: TSysCharSet) : string Visibility: default
1222
Description: TrimLeftSet performs the same action as RemoveTrailingChars (1217), but returns the resulting string. Errors: None. See also: TrimRight (1587), RemoveLeadingChars (1216), RemoveTrailingChars (1217), RemovePadChars (1216), TrimSet (1223), TrimLeftSet (1222)
36.3.82
TrimSet
Synopsis: Remove any leading or trailing characters in a set from a string and returns the result Declaration: function TrimSet(const S: string;const CSet: TSysCharSet) : string Visibility: default Description: TrimSet performs the same action as RemovePadChars (1216), but returns the resulting string. Errors: None. See also: Trim (1585), RemoveLeadingChars (1216), RemoveTrailingChars (1217), RemovePadChars (1216), TrimRightSet (1222), TrimLeftSet (1222)
36.3.83
WordCount
Synopsis: Count the number of words in a string. Declaration: function WordCount(const S: string;const WordDelims: TSysCharSet) : Integer Visibility: default Description: WordCount returns the number of words in the string S. A word is a non-empty string of characters bounded by one of the characters in WordDelims. The pre-dened StdWordDelims (1197) constant can be used for the WordDelims argument. Errors: None. See also: WordPosition (1223), StdWordDelims (1197), ExtractWord (1208), ExtractWordPos (1208)
36.3.84
WordPosition
Synopsis: Search position of Nth word in a string. Declaration: function WordPosition(const N: Integer;const S: string; const WordDelims: TSysCharSet) : Integer Visibility: default Description: WordPosition returns the position (in characters) of the N-th word in the string S. A word is a non-empty string of characters bounded by one of the characters in WordDelims. If N is out of range, zero is returned. The pre-dened StdWordDelims (1197) constant can be used for the WordDelims argument. Errors: None See also: WordCount (1223), StdWordDelims (1197), ExtractWord (1208), ExtractWordPos (1208)
1223
36.3.85
XorDecode
Synopsis: Decode a string encoded with XorEncode (1224) Declaration: function XorDecode(const Key: string;const Source: string) : string Visibility: default Description: XorDecode decodes Source and returns the original string that was encrypted using XorEncode (1224) with key Key. If a different key is used than the key used to encode the string, the result will be unreadable. Errors: If the string Source is not a valid XorEncode result (e.g. contains non-numerical characters), then a EConversionError exception will be raised. See also: XorEncode (1224), XorString (1224)
36.3.86
XorEncode
Synopsis: Encode a string by XOR-ing its characters using characters of a given key, representing the result as hex values. Declaration: function XorEncode(const Key: string;const Source: string) : string Visibility: default Description: XorEncode encodes the string Source by XOR-ing each character in Source with the corresponding character in Key (repeating Key as often as necessary) and representing the resulting ASCII code as a hexadecimal number (of length 2). The result is therefore twice as long as the original string, and every 2 bytes represent an ASCII code. Feeding the resulting string with the same key Key to the XorDecode (1224) function will result in the original Source string. This function can be used e.g. to trivially encode a password in a conguration le. Errors: None. See also: XorDecode (1224), XorString (1224), Hex2Dec (1209)
36.3.87
XorString
Synopsis: Encode a string by XOR-ing its characters using characters of a given key. Declaration: function XorString(const Key: ShortString;const Src: ShortString) : ShortString Visibility: default Description: XorString encodes the string Src by XOR-ing each character in Source with the corresponding character in Key, repeating Key as often as necessary. The resulting string may contain unreadable characters and may even contain null characters. For this reason it may be a better idea to use the XorEncode (1224) function instead, which will representing each resulting ASCII code as a hexadecimal number (of length 2). Feeding the result again to XorString with the same Key, will result in the original string Src. Errors: None. See also: XorEncode (1224), XorDecode (1224)
1224
Chapter 37
The system unit contains the standard supported functions of Free Pascal. It is the same for all platforms. Basically it is the same as the system unit provided with Borland or Turbo Pascal. Functions are listed in alphabetical order. Arguments of functions or procedures that are optional are put between square brackets. The pre-dened constants and variables are listed in the rst section. The second section contains an overview of all functions, grouped by functionality, and the last section contains the supported functions and procedures.
37.2
UnicodeString is a string of WideChars. The main difference with WideString is that unicodestring is reference counted, and WideString is not reference counted on Windows.
37.3
Miscellaneous functions
1225
Table 37.1: Name Assert (1283) Break (1288) Continue (1299) Exclude (1310) Exit (1312) Include (1330) LongJmp (1343) Ord (1373) Pred (1377) SetJmp (1395) SizeOf (1401) Succ (1407) Description Conditionally abort program with error Abort current loop Next cycle in current loop Exclude an element from a set Exit current function or procedure Include an element into a set Jump to execution point Return ordinal value of enumerated type Return previous value of ordinal type Mark execution point for jump Return size of variable or type Return next value of ordinal type
37.4
Functions that are connected to the operating system. Table 37.2: Name Chdir (1291) Getdir (1321) Halt (1326) Paramcount (1374) Paramstr (1375) Mkdir (1345) Rmdir (1386) Runerror (1391) Description Change working directory Return current working directory Halt program execution Number of parameters with which program was called Retrieve parameters with which program was called Make a directory Remove a directory Abort program execution with error condition
37.5
String handling
1226
Table 37.3: Name BinStr (1286) Chr (1292) Concat (1298) Copy (1300) Delete (1303) HexStr (1326) Insert (1335) Length (1340) Lowercase (1344) OctStr (1347) Pos (1376) SetLength (1396) SetString (1397) Str (1404) StringOfChar (1404) Upcase (1417) Val (1419) Description Construct binary representation of integer Convert ASCII code to character Concatenate two strings Copy part of a string Delete part of a string Construct hexadecimal representation of integer Insert one string in another Return length of string Convert string to all-lowercase Construct octal representation of integer Calculate position of one string in another Set length of a string Set contents and length of a string Convert number to string representation Create string consisting of a number of characters Convert string to all-uppercase Convert string to number
37.6
Mathematical routines
Functions connected to calculating and coverting numbers. Table 37.4: Name Abs (1279) Arctan (1282) Cos (1300) Dec (1301) Exp (1313) Frac (1320) Hi (1327) Inc (1329) Int (1335) Ln (1341) Lo (1342) Odd (1348) Pi (1375) Power (1) Random (1378) Randomize (1379) Round (1389) Sin (1400) Sqr (1402) Sqrt (1403) Swap (1407) Trunc (1413) Description Calculate absolute value Calculate inverse tangent Calculate cosine of angle Decrease value of variable Exponentiate Return fractional part of oating point value Return high byte/word of value Increase value of variable Calculate integer part of oating point value Calculate logarithm Return low byte/word of value Is a value odd or even ? Return the value of pi Raise oat to integer power Generate random number Initialize random number generator Round oating point value to nearest integer number Calculate sine of angle Calculate the square of a value Calculate the square root of a value Swap high and low bytes/words of a variable Truncate a oating point value
1227
37.7
Functions concerning memory issues. Table 37.5: Name Addr (1280) Assigned (1284) CompareByte (1293) CompareChar (1294) CompareDWord (1296) CompareWord (1297) CSeg (1301) Dispose (1304) DSeg (1305) FillByte (1315) FillChar (1315) FillDWord (1316) FillQWord (1316) FillWord (1317) Freemem (1320) Getmem (1322) GetMemoryManager (1323) High (1328) IndexByte (1330) IndexChar (1331) IndexDWord (1332) IndexQWord (1333) IndexWord (1333) IsMemoryManagerSet (1339) Low (1343) Move (1345) MoveChar0 (1345) New (1346) Ofs (1348) Ptr (1377) ReAllocMem (1383) Seg (1394) SetMemoryManager (1396) Sptr (1402) SSeg (1403) Description Return address of variable Check if a pointer is valid Compare 2 memory buffers byte per byte Compare 2 memory buffers byte per byte Compare 2 memory buffers byte per byte Compare 2 memory buffers byte per byte Return code segment Free dynamically allocated memory Return data segment Fill memory region with 8-bit pattern Fill memory region with certain character Fill memory region with 32-bit pattern Fill memory region with 64-bit pattern Fill memory region with 16-bit pattern Release allocated memory Allocate new memory Return current memory manager Return highest index of open array or enumerated Find byte-sized value in a memory range Find char-sized value in a memory range Find DWord-sized (32-bit) value in a memory range Find QWord-sized value in a memory range Find word-sized value in a memory range Is the memory manager set Return lowest index of open array or enumerated Move data from one location in memory to another Move data till rst zero character Dynamically allocate memory for variable Return offset of variable Combine segment and offset to pointer Resize a memory block on the heap Return segment Set a memory manager Return current stack pointer Return stack segment register value
37.8
1228
Table 37.6: Name Append (1281) Assign (1283) Blockread (1287) Blockwrite (1288) Close (1292) Eof (1308) Eoln (1309) Erase (1310) Filepos (1313) Filesize (1314) Flush (1318) IOresult (1338) Read (1379) Readln (1381) Rename (1383) Reset (1384) Rewrite (1385) Seek (1392) SeekEof (1393) SeekEoln (1394) SetTextBuf (1397) Truncate (1413) Write (1423) WriteLn (1423) Description Open a le in append mode Assign a name to a le Read data from a le into memory Write data from memory to a le Close a le Check for end of le Check for end of line Delete le from disk Position in le Size of le Write le buffers to disk Return result of last le IO operation Read from le into variable Read from le into variable and goto next line Rename le on disk Open le for reading Open le for writing Set le position Set le position to end of le Set le position to end of line Set size of le buffer Truncate the le at position Write variable to le Write variable to le and append newline
37.9
37.9.1
AbstractErrorProc : TAbstractErrorProc = Nil If set, the AbstractErrorProc constant is used when an abstract error occurs. If it is not set, then the standard error handling is done: A stack dump is performed, and the program exits with error code 211. The SysUtils unit sets this procedure and raises an exception in its handler. AllFilesMask = * AllFilesMask is the wildcard that can be used to return all les in a directory. On windows and dos based systems, this will be *.*, while for unix systems, this will be *. AllowDirectorySeparators : Set of Char = [\, /] AllowDirectorySeparators is the set of characters which are considered directory separators by the RTL units. By default, this is set to the most common directory separators: forward slash and backslash, so routines will work in a cross-platform manner, no matter which character was used: AllowDirectorySeparators : set of char = [\,/]; 1229
If a more strict behaviour is desired, then AllowDirectorySeparators can be set to the only character allowed on the current operating system, and all RTL routines that handle lenames (splitting lenames, extracting parts of the lename and so on) will use that character only. AllowDriveSeparators : Set of Char = [] AllowDriveSeparators are the characters which are considered to separate the drive part from the directory part in a lename. This will be an empty set on systems that do not support drive letters. Other systems (dos, windows and OS/2) will have the colon (:) character as the only member of this set. AssertErrorProc : TAssertErrorProc = @SysAssert If set, the AbstractErrorProc constant is used when an assert error occurs. If it is not set, then the standard error handling is done: The assertion error message is printed, together with the location of the assertion, and A stack dump is performed, and the program exits with error code 227. The SysUtils unit sets this procedure and raises an exception in its handler. BackTraceStrFunc : TBackTraceStrFunc = @SysBackTraceStr This handler is called to get a standard format for the backtrace routine. CtrlZMarksEOF : Boolean = False CtrlZMarksEOF indicates whether on this system, an CTRL-Z character (ordinal 26) in a le marks the end of the le. This is False on most systems apart from DOS and Windows. To get DOS/Windows-compatible behaviour, this constant can be set to True DefaultStackSize = 4 * 1024 * 1024 Default size for a new threads stack (4MiB by default). DefaultTextLineBreakStyle : TTextLineBreakStyle = tlbsLF DefaultTextLineBreakStyle contains the default OS setting for the TTextLineBreakStyle (1269) type. It is initizliaed by the system unit, and is used to determine the default line ending when writing to text les. This constant is part of a set of constants that describe the OS characteristics. These constants should be used instead of hardcoding OS characteristics. DirectorySeparator = / DirectorySeparator is the character used by the current operating system to separate directory parts in a pathname. This constant is system dependent, and should not be set. This constant is part of a set of constants that describe the OS characteristics. These constants should be used instead of hardcoding OS characteristics. DriveSeparator =
1230
On systems that support driveletters, the DriveSeparator constant denotes the character that separates the drive indicator from the directory part in a lename path. This constant is part of a set of constants that describe the OS characteristics. These constants should be used instead of hardcoding OS characteristics. Erroraddr : pointer = Nil Address where the last error occurred. Errorcode : Word = 0 Last error code. ErrorProc : TErrorProc = Nil If set, the ErrorProc constant is used when a run-time error occurs. If it is not set, then the standard error handling is done: a stack dump is performed, and the program exits with the indicated error code. The SysUtils unit sets this procedure and raises an exception in its handler. ExceptProc : TExceptProc = Nil This constant points to the current exception handling procedure. This routine is called when an unhandled exception occurs, i.e. an exception that is not stopped by a except block. If the handler is not set, the RTL will emit a run-time error 217 when an unhandler exception occurs. It is set by the sysutils (1443) unit. ExitProc : pointer = Nil Exit procedure pointer. ExtensionSeparator = . ExtensionSeparator is the character which separates the lename from the le extension. On all current platforms, this is the . (dot) character. All RTL lename handling routines use this constant. E_NOINTERFACE = ($80004002) Interface call result: Error: not an interface E_NOTIMPL = ($80004001) Interface call result: Interface not implemented E_UNEXPECTED = ($8000FFFF) Interface call result: Unexpected error Filemode : Byte = 2 1231
Default le mode for untyped les. FileNameCaseSensitive : Boolean = True FileNameCaseSensitive is True if case is important when using lenames on the current OS. In this case, the OS will treat les with different cased names as different les. Note that this may depend on the lesystem: Unix operating systems that access a DOS or Windows partition will have this constant set to true, but when writing to the DOS partition, the casing is ignored. This constant is part of a set of constants that describe the OS characteristics. These constants should be used instead of hardcoding OS characteristics. float_flag_denormal = 2 IEC/IEEE oating-point exception ag: ? float_flag_divbyzero = 4 IEC/IEEE oating-point exception ag: Division by zero error float_flag_inexact = 32 IEC/IEEE oating-point exception ag: ? float_flag_invalid = 1 IEC/IEEE oating-point exception ag: Invalid operation error float_flag_overflow = 8 IEC/IEEE oating-point exception ag: Overow error float_flag_underflow = 16 IEC/IEEE oating-point exception ag: Underow error float_round_down = 1 Round down float_round_nearest_even = 0 Round to nearest even number float_round_to_zero = 3 Round in the direction of zero (down for positive, up for negative) float_round_up = 2 Round up 1232
fmAppend = $D7B4 File mode: File is open for writing, appending to the end. fmClosed = $D7B0 File mode: File is closed. fmInOut = $D7B3 File mode: File is open for reading and writing. fmInput = $D7B1 File mode: File is open for reading. fmOutput = $D7B2 File mode: File is open for writing. fpc_in_abs_long = 64 Internal ABS function fpc_in_abs_real = 127 FPC compiler internal procedure index: abs (real) fpc_in_addr_x = 42 FPC compiler internal procedure index: addr fpc_in_arctan_real = 130 FPC compiler internal procedure index: arctan (real) fpc_in_assert_x_y = 41 FPC compiler internal procedure index: assert fpc_in_assigned_x = 19 FPC compiler internal procedure index: assigned fpc_in_bitsizeof_x = 61 FPC compiler internal procedure index: bitsizeof fpc_in_break = 39 FPC compiler internal procedure index: break 1233
fpc_in_bsf_x = 74 FPC compiler internal procedure index: bsf_x fpc_in_bsr_x = 75 FPC compiler internal procedure index: bsr_x fpc_in_chr_byte = 7 FPC compiler internal procedure index: chr fpc_in_concat_x = 18 FPC compiler internal procedure index: concat fpc_in_const_abs = 101 FPC compiler internal procedure index: abs fpc_in_const_odd = 102 FPC compiler internal procedure index: sqr fpc_in_const_ptr = 103 FPC compiler internal procedure index: sqr fpc_in_const_sqr = 100 FPC compiler internal procedure index: sqr fpc_in_const_swap_long = 105 FPC compiler internal procedure index: swap (long) fpc_in_const_swap_qword = 108 FPC compiler internal procedure index: swap (qword) fpc_in_const_swap_word = 104 FPC compiler internal procedure index: swap (word) fpc_in_continue = 40 FPC compiler internal procedure index: continue fpc_in_copy_x = 49 FPC compiler internal procedure index: copy 1234
fpc_in_cos_real = 125 FPC compiler internal procedure index: cos (real) fpc_in_cycle = 52 FPC compiler internal procedure index: cycle fpc_in_dec_x = 36 FPC compiler internal procedure index: dec fpc_in_dispose_x = 47 FPC compiler internal procedure index: dispose fpc_in_exclude_x_y = 38 FPC compiler internal procedure index: exclude fpc_in_exit = 48 FPC compiler internal procedure index: exit fpc_in_exp_real = 124 FPC internal compiler routine: in_exp_real fpc_in_fillchar_x = 55 FPC internal compiler routine: in_llchar_x fpc_in_finalize_x = 45 FPC compiler internal procedure index: nalize fpc_in_frac_real = 122 FPC internal compiler routine: in_frac_real fpc_in_get_caller_addr = 57 FPC internal compiler routine: in_get_caller_addr fpc_in_get_caller_frame = 58 FPC internal compiler routine: in_get_caller_frame fpc_in_get_frame = 56 FPC internal compiler routine: in_get_frame 1235
fpc_in_high_x = 28 FPC compiler internal procedure index: high fpc_in_hi_long = 4 FPC compiler internal procedure index: hi (long) fpc_in_hi_qword = 107 FPC compiler internal procedure index: hi (qword) fpc_in_hi_word = 2 FPC compiler internal procedure index: hi (word) fpc_in_include_x_y = 37 FPC compiler internal procedure index: include fpc_in_inc_x = 35 FPC compiler internal procedure index: inc fpc_in_initialize_x = 50 FPC compiler internal procedure index: initialize fpc_in_int_real = 123 FPC internal compiler routine: in_int_real fpc_in_leave = 51 FPC compiler internal procedure index: leave fpc_in_length_string = 6 FPC compiler internal procedure index: length fpc_in_ln_real = 131 FPC compiler internal procedure index: ln (real) fpc_in_low_x = 27 FPC compiler internal procedure index: low fpc_in_lo_long = 3 FPC compiler internal procedure index: lo (long) 1236
fpc_in_lo_qword = 106 FPC compiler internal procedure index: lo (qword) fpc_in_lo_word = 1 FPC compiler internal procedure index: lo (word) fpc_in_mmx_pcmpeqb = 200 FPC compiler internal procedure index: MMX fpc_in_mmx_pcmpeqd = 202 FPC compiler internal procedure index: MMX fpc_in_mmx_pcmpeqw = 201 FPC compiler internal procedure index: MMX fpc_in_mmx_pcmpgtb = 203 FPC compiler internal procedure index: MMX fpc_in_mmx_pcmpgtd = 205 FPC compiler internal procedure index: MMX fpc_in_mmx_pcmpgtw = 204 FPC compiler internal procedure index: MMX fpc_in_move_x = 54 FPC internal compiler routine: in_move_x fpc_in_new_x = 46 FPC compiler internal procedure index: new fpc_in_ofs_x = 21 FPC compiler internal procedure index: ofs fpc_in_ord_x = 5 FPC compiler internal procedure index: ord fpc_in_pack_x_y_z = 59 FPC compiler internal procedure index: pack 1237
fpc_in_pi_real = 126 FPC internal compiler routine: in_pi_real fpc_in_pred_x = 30 FPC compiler internal procedure index: pred fpc_in_prefetch_var = 109 FPC compiler internal procedure index: prefetch fpc_in_readln_x = 17 FPC compiler internal procedure index: readln fpc_in_readstr_x = 63 Internal read string procedure fpc_in_read_x = 16 FPC compiler internal procedure index: read fpc_in_reset_typedfile = 32 FPC compiler internal procedure index: reset fpc_in_reset_x = 25 FPC compiler internal procedure index: reset fpc_in_rewrite_typedfile = 33 FPC compiler internal procedure index: rewrite fpc_in_rewrite_x = 26 FPC compiler internal procedure index: rewrite fpc_in_rol_x = 67
fpc_in_rol_x_x = 68
fpc_in_ror_x = 65
fpc_in_ror_x_x = 66
1238
fpc_in_round_real = 121 FPC internal compiler routine: in_round_real fpc_in_sar_x = 73 FPC compiler internal procedure index: sar_x fpc_in_sar_x_y = 72 FPC compiler internal procedure index: sar_x_y fpc_in_seg_x = 29 FPC compiler internal procedure index: seg fpc_in_setlength_x = 44 FPC compiler internal procedure index: setlength fpc_in_settextbuf_file_x = 34 FPC compiler internal procedure index: settextbuf fpc_in_sin_real = 132 FPC compiler internal procedure index: sin (real) fpc_in_sizeof_x = 22 FPC compiler internal procedure index: sizeof fpc_in_slice = 53 FPC internal compiler routine: in_slice fpc_in_sqrt_real = 129 FPC compiler internal procedure index: sqrt (real) fpc_in_sqr_real = 128 FPC compiler internal procedure index: sqr (real) fpc_in_str_x_string = 20 FPC compiler internal procedure index: str fpc_in_succ_x = 31 FPC compiler internal procedure index: succ 1239
fpc_in_trunc_real = 120 FPC internal compiler routine: in_trunc_real fpc_in_typeinfo_x = 43 FPC compiler internal procedure index: typeinfo fpc_in_typeof_x = 23 FPC compiler internal procedure index: typeof fpc_in_unpack_x_y_z = 60 FPC compiler internal procedure index: unpack fpc_in_val_x = 24 FPC compiler internal procedure index: val fpc_in_writeln_x = 15 FPC compiler internal procedure index: writeln fpc_in_writestr_x = 62 Internal write string procedure fpc_in_write_x = 14 FPC compiler internal procedure index: write fpc_objc_encode_x = 71 FPC compiler internal procedure index: encode fpc_objc_protocol_x = 70 FPC compiler internal procedure index: protocol fpc_objc_selector_x = 69
growheapsize1 : PtrUInt = 256 * 1024 Grow rate for block less than 256 Kb. growheapsize2 : PtrUInt = 1024 * 1024 Grow rate for block larger than 256 Kb. 1240
growheapsizesmall : PtrUInt = 32 * 1024 Fixed size small blocks grow rate InitProc : Pointer = Nil InitProc is a routine that can be called after all units were initialized. It can be set by units to execute code that can be initialized after all units were initialized. Remark: When setting the value of InitProc, the previous value should always be saved, and called when the installed initialization routine has nished executing. IObjectInstance : TGuid = {D91C9AF4-3C93-420F-A303-BF5BA82BFD23} IObjectInstance is an internal GUID, which should not be used in end-user code. It is used in the as operator. IsMultiThread : longbool = False Indicates whether more than one thread is running in the application. LFNSupport = True LFNSupport determines whether the current OS supports long le names, i.e. lenames that are not of the form 8.3 as on ancient DOS systems. If the value of this constant is True then long lenames are supported. If it is false, then not. This constant is part of a set of constants that describe the OS characteristics. These constants should be used instead of hardcoding OS characteristics. LineEnding = #10 LineEnding is a constant which contains the current line-ending character. This character is system dependent, and is initialized by the system. It should not be set. This constant is part of a set of constants that describe the OS characteristics. These constants should be used instead of hardcoding OS characteristics. maxExitCode = 255 maxExitCode is the maximum value for the Halt (1326) call. maxint = maxsmallint Maximum integer value. MaxKeptOSChunks : DWord = 4 MaxKeptOSChunks tells the heap manager how many free chunks of OS-allocated memory it should keep in memory. When freeing memory, it can happen that a memory block obtained from the OS is completely free. If more than MaxKeptOSChunks such blocks are free, then the heap manager will return them to the OS, to reduce memory requirements. maxLongint = $7fffffff 1241
Maximum longint value. MaxPathLen = 4096 This constant is system dependent. MaxSIntValue = (ValSInt) Maximum String-size value. maxSmallint = 32767 Maximum smallint value. MaxUIntValue = (ValUInt) Maximum unsigned integer value. Max_Frame_Dump : Word = 8 Maximum number of frames to show in error frame dump. ModuleIsCpp : Boolean = False ModuleIsCpp is always false for FPC programs, it is provided for Delphi compatibility only. ModuleIsLib : Boolean = False ModuleIsLib is set by the compiler when linking a library, program or package, and determines whether the current module is a library (or package) (True) or program (False). ModuleIsPackage : Boolean = False ModuleIsLib is set by the compiler when linking a library, program or package, and determines whether the current module is a package (True) or a library or program (False). PathSeparator = : PathSeparator is the character used commonly on the current operating system to separate paths in a list of paths, such as the PATH environment variable. This constant is part of a set of constants that describe the OS characteristics. These constants should be used instead of hardcoding OS characteristics. RaiseMaxFrameCount : LongInt = 16 Maximum number of frames to include in TExceptObject (1263) RaiseProc : TExceptProc = Nil Procedure to raise an exception. 1242
RT_ACCELERATOR = (9) Constant identifying an accelerator resouce RT_ANICURSOR = (21) This constant can be used to specify a resource of type "animated cursor". RT_ANIICON = (22) This constant can be used to specify a resource of type "animated icon". RT_BITMAP = (2) Constant identifying a bitmap resource RT_CURSOR = (1) Constant identifying a cursor resource RT_DIALOG = (5) Constant identifying a dialog resource RT_FONT = (8) Constant identifying a font resource RT_FONTDIR = (7) Constant identifying a font directory resource RT_GROUP_CURSOR = (12) Constant identifying a group cursor resource RT_GROUP_ICON = (14) Constant identifying a group icon resource RT_HTML = (23) This constant can be used to specify a resource of type "HTML data". RT_ICON = (3) Constant identifying an icon resource RT_MANIFEST = (24) This constant can be used to specify a resource of type "Manifest". 1243
RT_MENU = (4) Constant identifying a menu resource RT_MESSAGETABLE = (11) Constant identifying a message data resource RT_RCDATA = (10) Constant identifying a binary data resource RT_STRING = (6) Constant identifying a string table resource RT_VERSION = (16) Constant identifying a version info resource
RuntimeErrorExitCodes : Array[TRuntimeError] of Byte = (0, 203, 204, 200, 201, 215, 2 This array is used by the Error (1310) routine to to convert a TRuntimeError (1268) enumeration type to a process exit code. SafeCallErrorProc : TSafeCallErrorProc = Nil SafeCallErrorProc is a Handler called in case of a safecall calling convention error. Error is the error number (passed by the Windows operating system) and Addr is the address where the error occurred. sLineBreak = LineEnding sLineBreak is an alias for LineEnding (1241) and is supplied for Delphi compatibility. This constant is part of a set of constants that describe the OS characteristics. These constants should be used instead of hardcoding OS characteristics. StackError : Boolean = False Indicate whether there was a stack error. StdErrorHandle = 2 Value of the OS handle for the standard error-output le. StdInputHandle = 0 Value of the OS handle for the standard input le. StdOutputHandle = 1 1244
Value of the OS handle for the standard output le. S_FALSE = 1 Interface call result: Not OK S_OK = 0 Interface call result: OK ThreadingAlreadyUsed : Boolean = False Internal constant for the threading system. Dont use.
UnixGetModuleByAddrHook : procedure(addr: pointer;var baseaddr: pointer;var filename: UnixGetModuleByAddrHook is used on unix systems to retrieve a module name based on an address. It is used in the exeinfo (570) unit to map addresses to module (programs or library) names. UnusedHandle = -1 Value indicating an unused le handle (as reported by the OS). VarAddRefProc : procedure(var v: tvardata) = Nil Callback to increase reference count of a variant. varany = $101 Variant type: Any vararray = $2000 Variant type: variant Array varboolean = 11 Variant type: Boolean type varbyref = $4000 Variant type: By reference varbyte = 17 Variant type: Byte (8 bit) VarClearProc : procedure(var v: tvardata) = Nil Callback to clear a variant. 1245
VarCopyProc : procedure(var d: tvardata;const s: tvardata) = Nil Callback to copy a variant varcurrency = 6 Variant type: Currency vardate = 7 Variant type: Date vardecimal = 14 Variant type: Decimal (BCD) vardispatch = 9 Variant type: dispatch interface vardouble = 5 Variant type: Double oat varempty = 0 Variant type: Empty variant varerror = 10 Variant type: Error type varint64 = 20 Variant type: Integer (64-Bit) varinteger = 3 Variant type: Integer (32-bit) varlongword = 19 Variant type: Word (32 bit) varnull = 1 Variant type: Null (1347) variant varolestr = 8 Variant type: OLE string (widestring) 1246
varqword = 21 Variant type: Word (64-bit) varrecord = 36 Record variant type varshortint = 16 Variant type: Shortint (16 bit) varsingle = 4 Variant type: Single oat varsmallint = 2 Variant type: smallint (8 bit) varstrarg = $48 Variant type: String varstring = $100 Variant type: String VarToLStrProc : procedure(var d: AnsiString;const s: tvardata) = Nil Callback to convert a variant to a ansistring. VarToWStrProc : procedure(var d: WideString;const s: tvardata) = Nil Callback to convert a variant to a widestring. vartypemask = $fff Variant type: Mask to extract type varuint64 = varqword varuint64 denotes an unsigned 64-bit value in a variant. It is one of the values found in the VType eld of the variant record tvardata (1272). varunknown = 13 Variant type: Unknown varustrarg = $49 1247
varustrarg denotes a unicode string argument in DispInvoke call. It will be be converted to varustring in a variant. varustring = $102 varustring denotes a unicode string value in a variant. It is one of the values found in the VType eld of the variant record tvardata (1272). varvariant = 12 Variant type: Variant (arrays only) varword = 18 Variant type: Word (16 bit) varword64 = varqword Variant type: Word (64-bit) vmtAfterConstruction = vmtMethodStart + ((pointer) * 5) VMT Layout: ? vmtAutoTable = vmtParent + ((pointer) * 7) VMT layout: ? vmtBeforeDestruction = vmtMethodStart + ((pointer) * 6) VMT Layout: ? vmtClassName = vmtParent + (pointer) VMT Layout: location of class name. vmtDefaultHandler = vmtMethodStart + ((pointer) * 4) VMT Layout: ? vmtDefaultHandlerStr = vmtMethodStart + ((pointer) * 7) VMT Layout: ? vmtDestroy = vmtMethodStart VMT Layout: Location of destructor pointer. vmtDispatch = vmtMethodStart + ((pointer) * 8)
1248
vmtDispatch is the offset from the VMT start, in bytes to the dispatch table for a class.The dispatch table is used when dispatching messages in TObject.Dispatch (1) vmtDispatchStr = vmtMethodStart + ((pointer) * 9) vmtDispatchStr is the offset from the VMT start, in bytes to the dispatch table for a class.The dispatch table is used when dispatching messages in TObject.DispatchStr (1) vmtDynamicTable = vmtParent + ((pointer) * 2) VMT Layout: location of dynamic methods table. vmtEquals = vmtMethodStart + ((pointer) * 10) vmtEquals contains the offset from the VMT start, of the location of the TObject.Equals (1) method pointer. vmtFieldTable = vmtParent + ((pointer) * 4) VMT Layout: Location of elds table. vmtFreeInstance = vmtMethodStart + ((pointer) * 2) VMT Layout: location of FreeInstance method. vmtGetHashCode = vmtMethodStart + ((pointer) * 11) vmtGetHashCode contains the offset from the VMT start, of the location of the TObject.GetHashCode (1) method pointer. vmtInitTable = vmtParent + ((pointer) * 6) VMT Layout: ? vmtInstanceSize = 0 VMT Layout: Location of class instance size in VMT vmtIntfTable = vmtParent + ((pointer) * 8) VMT layout: Interface table vmtMethodStart = vmtParent + ((pointer) * 10) VMT layout: start of method table. vmtMethodTable = vmtParent + ((pointer) * 3) VMT Layout: Method table start. vmtMsgStrPtr = vmtParent + ((pointer) * 9) 1249
VMT layout: message strings table. vmtNewInstance = vmtMethodStart + (pointer) VMT Layout: location of NewInstance method. vmtParent = (ptruint) * 2 VMT Layout: location of pointer to parent VMT. vmtSafeCallException = vmtMethodStart + ((pointer) * 3) VMT Layout: ? vmtToString = vmtMethodStart + ((pointer) * 12) vmtToString contains the offset from the VMT start, of the location of the TObject.ToString (1) method pointer. vmtTypeInfo = vmtParent + ((pointer) * 5) VMT Layout: Location of class type information. vtAnsiString = 11 TVarRec type: Ansistring vtBoolean = 1 TVarRec type: Boolean vtChar = 2 TVarRec type: Char vtClass = 8 TVarRec type: Class type vtCurrency = 12 TVarRec type: Currency vtExtended = 3 TVarRec type: Extended vtInt64 = 16 TVarRec type: Int64 (signed 64-bit integer) 1250
vtInteger = 0 TVarRec type: Integer vtInterface = 14 TVarRec type: Interface vtObject = 7 TVarRec type: Object instance vtPChar = 6 TVarRec type: PChar vtPointer = 5 TVarRec type: pointer vtPWideChar = 10 TVarRec type: PWideChar vtQWord = 17 TVarRec type: QWord (unsigned 64-bit integer) vtString = 4 TVarRec type: String vtUnicodeString = 18 vtUnicodeString denotes a unicode string argument in the array of const. The TVarRec.VUnicodeString eld will contain the actual value. vtVariant = 13 TVarRec type: Variant vtWideChar = 9 TVarRec type: Widechar vtWideString = 15 TVarRec type: WideString
1251
37.9.2
Types
AnsiChar = Char Alias for 1-byte sized char. Cardinal = LongWord An unsigned 32-bits integer. DWord = LongWord An unsigned 32-bits integer EnumResLangProc = function(ModuleHandle: TFPResourceHMODULE; ResourceType: PChar;ResourceName: PChar; IDLanguage: Word;lParam: PtrInt) : LongBool of object EnumResNameProcs used in the EnumResourceLanguages (1307) call. It is called for all languages for a resource of the specied type and name, and is passed the ModuleHandle, ResourceName , ResourceName and IDLanguage values for each language encountered for the specied resource. Additionally, the lParam parameter from the EnumResourceLanguages is passed unaltered. EnumResNameProc = function(ModuleHandle: TFPResourceHMODULE; ResourceType: PChar;ResourceName: PChar; lParam: PtrInt) : LongBool of object EnumResNameProcs used in the EnumResourceNames (1308) call. It is called for all resources of the specied type, and is passed the ModuleHandle, ResourceType, ResourceName values for each resource encountered. Additionally, the lParam parameter from the EnumResourceNames is passed unaltered. EnumResTypeProc = function(ModuleHandle: TFPResourceHMODULE; ResourceType: PChar;lParam: PtrInt) : LongBool of object EnumResTypeProc is used in the EnumResourceTypes (1308) call. It is called for all resources, and is passed the ModuleHandle, ResourceType values for each resource encountered. Additionally, the lParam parameter from the EnumResourceTypes is passed unaltered. HGLOBAL = PtrUInt This is an opaque type. HMODULE = PtrUInt This is an opaque type. HRESULT = LongInt
1252
32-Bit signed integer. IInterface = IUnknown IInterface is the basic interface from which all COM style interfaces descend. Integer = SmallInt The system unit denes Integer as a signed 16-bit integer. But when DELPHI or OBJFPC mode are active, then the objpas unit redenes Integer as a 32-bit integer. IntegerArray = Array[0..$effffff] of Integer Generic array of integer. jmp_buf = packed record ebx : LongInt; esi : LongInt; edi : LongInt; bp : Pointer; sp : Pointer; pc : Pointer; end
Record type to store processor information. MAKEINTRESOURCE = PChar Alias for the PChar (1254) type. NativeInt = PtrInt NativeInt is dened for Delphi compatibility. It is a signed integer with the size of a pointer, so 32-bit on 32-bit platforms, 64-bit on 64-bit platforms. NativeUint = PtrUInt NativeInt is dened for Delphi compatibility. It is an unsigned integer with the size of a pointer, so 32-bit on 32-bit platforms, 64-bit on 64-bit platforms. PAnsiChar = PChar Alias for PChar (1254) type. PAnsiString = ^AnsiString Pointer to an ansistring type. PBoolean = ^Boolean
1253
Pointer to a Boolean type. PByte = ^Byte Pointer to byte (1) type pcalldesc = ^tcalldesc Pointer to TCallDesc (1262) record. PCardinal = ^Cardinal Pointer to Cardinal (1252) type PChar = ^Char Or the same as a pointer to an array of char. See the reference manual for more information about this type. PClass = ^TClass Pointer to TClass (1262) PComp = ^Comp PComp is a pointer to a complex type. PCurrency = ^Currency Pointer to currency type. PDate = ^TDateTime Pointer to a TDateTime (1262) type. PDateTime = ^TDateTime Pointer to TDatetime PDispatch = ^IDispatch Pointer to IDispatch (1425) interface type pdispdesc = ^tdispdesc Pointer to tdispdesc (1262) record PDouble = ^Double Pointer to double-sized oat value. 1254
PDWord = ^DWord Pointer to DWord (1252) type pdynarrayindex = ^tdynarrayindex Pointer to tdynarrayindex (1262) type. pdynarraytypeinfo = ^tdynarraytypeinfo Pointer to TDynArrayTypeInfo (1263) type. PError = ^TError Pointer to an Error (1310) type. PEventState = pointer Pointer to EventState, which is an opaque type. PExceptObject = ^TExceptObject Pointer to Exception handler procedural type TExceptProc (1263) PExtended = ^Extended Pointer to extended-sized oat value. PGuid = ^TGuid Pointer to TGUID (1264) type. PInt64 = ^Int64 Pointer to Int64 type PInteger = ^Integer Pointer to integer (1253) type PIntegerArray = ^IntegerArray Pointer to IntegerArray (1253) type PInterface = PUnknown Pointer to IInterface (1253) interface pinterfaceentry = ^tinterfaceentry Pointer to tinterfaceentry (1265) record. 1255
pinterfacetable = ^tinterfacetable Pointer to tinterfacetable (1265) record. PJmp_buf = ^jmp_buf Pointer to jmp_buf (1253) record PLongBool = ^LongBool Pointer to a LongBool type. PLongint = ^LongInt Pointer to Longint (1) type PLongWord = ^LongWord Pointer to LongWord type PMemoryManager = ^TMemoryManager Pointer to TMemoryManager (1266) record PMsgStrTable = ^TMsgStrTable Pointer to array of TMsgStrTable (1266) records. PointerArray = Array[0..512*1024*1024-2] of Pointer Generic pointer array. POleVariant = ^OleVariant Pointer to OleVariant type. PPAnsiChar = PPChar Alias for PPChar (1256) type. PPByte = ^PByte PPByte is a pointer to a PByte (1254) type. PPChar = ^PChar Pointer to an array of pointers to null-terminated strings. PPCharArray = ^TPCharArray Pointer to TPCharArray (1266) type. 1256
PPDispatch = ^PDispatch Pointer to PDispatch (1254) pointer type PPDouble = ^PDouble PPDouble is a pointer to a PDouble (1254) type. PPLongint = ^PLongint PPLongint is a pointer to a PLongint (1256) type. PPointer = ^Pointer Pointer to a pointer type. PPointerArray = ^PointerArray Pointer to PointerArray (1256) type PPPChar = ^PPChar PPPChar is a pointer to a PPChar (1256) PPPointer = ^PPointer Pointer to a PPointer (1257) type. PPPWideChar = ^PPWideChar PPPWideChar is a pointer to a PPWideChar (1257) type. PPtrInt = ^PtrInt Pointer to PtrInt (1258) type. PPtrUInt = ^PtrUInt Pointer to unsigned integer of pointer size PPUnknown = ^PUnknown Pointer to untyped pointer PPWideChar = ^PWideChar Pointer to link id="PWideChar"> type. PQWord = ^QWord Pointer to QWord type 1257
PRTLCriticalSection = ^TRTLCriticalSection Pointer to #rtl.system.TRTLCriticalSection (1267) type. PRTLEvent = pointer Pointer to RTLEvent, which is an opaque type. PShortInt = ^ShortInt Pointer to shortint (1) type PShortString = ^ShortString Pointer to a shortstring type. PSingle = ^Single Pointer to single-sized oat value. PSizeInt = ^SizeInt Pointer to a SizeInt (1260) type PSmallInt = ^SmallInt Pointer to smallint (1) type pstringmessagetable = ^TStringMessageTable Pointer to TStringMessageTable (1269) record. PText = ^Text Pointer to text le. PtrInt = LongInt Ptrint is a signed integer type which has always the same size as a pointer. Ptrint is considered harmfull and should almost never be used in actual code, because pointers are normally unsigned. For example, consider the following code: getmem(p,2048); q:=pointer(ptrint(p)+1024)); writeln(q>p); {Assume the address of p becomes $7ffffff0.} {Overflow error.} {Incorrect answer.}
Ptrint might have a valid use when two pointers are substracted from each other if it is unknown which pointer has the largest address. However, even in this case ptrint causes trouble in case the distance is larger than high(ptrint) and must be used with great care. The introduction of the ptrint type was a mistake. Please use ptruint (1259) instead. 1258
PtrUInt = DWord PtrUInt is an unsigned integer type which has always the same size as a pointer. When using integers which will be cast to pointers and vice versa, use this type, never the regular Cardinal type. PUCS2Char = PWideChar Pointer to UCS2Char (1275) character. PUCS4Char = ^UCS4Char Pointer to UCS4Char (1275) PUCS4CharArray = ^TUCS4CharArray Pointer to array of UCS4Char (1275) characters. PUnicodeChar = ^UnicodeChar PUnicodeChar is a pointer to a unicode character, just like PChar is a pointer to a Char ansistring character. PUnicodeString = ^UnicodeString PUnicodeString is a pointer to a UnicodeString string. PUnknown = ^IUnknown Untyped pointer PUTF8String = ^UTF8String Pointer to UTF8String (1276) pvararray = ^tvararray Pointer to TVarArray (1272) type. pvararraybound = ^tvararraybound Pointer to tvararraybound (1272) type. pvararrayboundarray = ^tvararrayboundarray Pointer to tvararrayboundarray (1272) type. pvararraycoorarray = ^tvararraycoorarray Pointer to tvararraycoorarray (1272) type. pvardata = ^tvardata 1259
Pointer to TVarData (1272) record. PVariant = ^Variant Pointer to Variant type. pvariantmanager = ^tvariantmanager Pointer to TVariantManager (1273) record. PVarRec = ^TVarRec Pointer to TVarRec (1274) type. PVmt = ^TVmt Pointer to TVMT (1275) record PWideChar = ^WideChar Pointer to WChar (1276). PWideString = ^WideString Pointer to widestring type PWord = ^Word Pointer to word (1) type PWordBool = ^WordBool Pointer to a WordBool type. Real = Double Alias for real type real48 = Array[0..5] of Byte TP compatible real type (6 bytes) denition SizeInt = LongInt Signed integer type which ts for sizes SizeUInt = DWord Unsigned Integer type which ts for sizes TAbstractErrorProc = procedure 1260
Abstract error handler procedural type. TAllocateThreadVarsHandler = procedure Threadvar allocation callback type for TThreadManager (1270). TAnsiChar = Char Alias for 1-byte sized char. TAssertErrorProc = procedure(const msg: ShortString; const fname: ShortString;lineno: LongInt; erroraddr: pointer) Assert error handler procedural type. TBackTraceStrFunc = function(Addr: Pointer) : ShortString Type for formatting of backtrace dump. TBasicEventCreateHandler = function(EventAttributes: Pointer; AManualReset: Boolean; InitialState: Boolean; const Name: ansistring) : PEventState callback type for creating eventstate in TThreadManager (1270). TBasicEventHandler = procedure(state: PEventState) Generic callback type for handling eventstate in TThreadManager (1270). TBasicEventWaitForHandler = function(timeout: Cardinal; state: PEventState) : LongInt Wait for basic event callback type for TThreadManager (1270). TBeginThreadHandler = function(sa: Pointer;stacksize: PtrUInt; ThreadFunction: TThreadFunc;p: pointer; creationFlags: DWord; var ThreadId: TThreadID) : TThreadID Callback for thread start in TThreadManager (1270). TBoundArray = Array of SizeInt Dynamic array of integer. tcalldesc = packed record calltype : Byte; argcount : Byte; namedargcount : Byte; argtypes : Array[0..255] of Byte; end
1261
tcalldesc is used to encode the arguments to a dispatch call to an OLE dual interface. It is used on windows only. It describes the arguments to a call. TClass = Class of TObject Class of TObject (1432). TCriticalSectionHandler = procedure(var cs) Generic callback type for critical section handling in TThreadManager (1270). TCriticalSectionHandlerTryEnter = function(var cs) : LongInt TCriticalSectionHandlerTryEnter is the function prototype for the TryEnterCriticalsection (1414) function, in the TThreadManager (1270) records TryEnterCriticalSection eld. TCtrlBreakHandler = function(CtrlBreak: Boolean) : Boolean TCtrlBreakHandler is the prototype for the CTRL-C handler. If CtrlBreak is True then Ctrl-Break was hit, otherwise CTRL-C was hit. The handlers should return True to signal that the key-combination was handled. If False is returned, then default handling will be used, which by default means an exception will be raised if the sysutils unit is used. TDate = TDateTime TDate is dened for Delphi compatibility. This type is deprecated, use TDateTime (1262) instead. TDateTime = Double Encoded Date-Time type. tdispdesc = packed record dispid : LongInt; restype : Byte; calldesc : tcalldesc; end
tcalldesc is used to encode a dispatch call to an OLE dispatch interface. It is used on windows only. It describes the dispath call call. tdynarrayindex = SizeInt A variable of type tdynarrayindex will always have the correct size, suitable for serving as an index in a dynamic array. tdynarraytypeinfo = packed record kind : Byte; namelen : Byte; elesize : SizeInt; eletype : pdynarraytypeinfo; vartype : LongInt; end
1262
tdynarraytypeinfo describes the structure of a multi-dimensional dynamical array. It is used in the DynArraySetLength (1306) call. TEndThreadHandler = procedure(ExitCode: DWord) Callback for thread end in TThreadManager (1270). TEntryInformation = record InitFinalTable : Pointer; ThreadvarTablesTable : Pointer; asm_exit : procedure of object; PascalMain : procedure of object; valgrind_used : Boolean; end
TEntryInformation is used to initialize a Free Pascal program or library. Under normal circumstances, there should be no need to use this structure directly: it is used by the system unit and special linking units. TError = LongInt Error type, used in variants. TErrorProc = procedure(ErrNo: LongInt;Address: Pointer;Frame: Pointer) Standard error handler procedural type. TExceptObject = record FObject : TObject; Addr : pointer; Next : PExceptObject; refcount : LongInt; Framecount : LongInt; Frames : PPointer; end
TExceptObject is the exception description record which is found on the exception stack. TExceptProc = procedure(Obj: TObject;Addr: Pointer;FrameCount: LongInt; Frame: PPointer) Exception handler procedural type TextFile = Text Alias for Text le type. TFPCHeapStatus = record MaxHeapSize : PtrUInt; MaxHeapUsed : PtrUInt; 1263
TFPCHeapStatus describes the state of the FPC heap manager. This is not equivalent to the THeapStatus (1265) record dened by Delphi, which contains information not meaningful for the FPC heap manager. The heap status can be retrieved by the GetFPCHeapStatus (1322) call. TFPResourceHandle = PtrUInt TFPResourceHandle represents a handle to a binary resource and is used in the various resource calls. Its actual type and size may differ accross platforms. TFPResourceHGLOBAL = PtrUInt TFPResourceHGLOBAL represents a handle to the global module containing a resource. It is used in the various resource calls. It is an opaque type: its actual type and size may differ accross platforms. TFPResourceHMODULE = PtrUInt TFPResourceHMODULE represents a module (library, executable, other) in which a resource is located. It is used in the various resource calls. It is an opaque type: its actual type and size may differ accross platforms. TGetCurrentThreadIdHandler = function : TThreadID Callback type for retrieving thread ID in TThreadManager (1270). TGuid = packed record end
Standard GUID representation type. THandle = LongInt This type should be considered opaque. It is used to describe le and other handles. THeapStatus = record TotalAddrSpace : Cardinal; TotalUncommitted : Cardinal; TotalCommitted : Cardinal; TotalAllocated : Cardinal; TotalFree : Cardinal; FreeSmall : Cardinal; FreeBig : Cardinal; Unused : Cardinal; Overhead : Cardinal; HeapErrorCode : Cardinal; end
1264
THeapStatus is the record describing the current heap status. It is returned by the GetHeapStatus (1322) call. TInitThreadVarHandler = procedure(var offset: DWord;size: DWord) Threadvar initialization callback type for TThreadManager (1270). TInterfacedClass = Class of TInterfacedObject TInterfacedClass is a descendent of tinterfaceentry = record IID : PGuid; VTable : Pointer; IOffset : PtrUInt; IIDStr : PShortString; end
tinterfaceentry is used to store the list of Interfaces of a class. This list is stored as an array of tinterfaceentry records. tinterfaceentrytype = (etStandard,etVirtualMethodResult, etStaticMethodResult,etFieldValue, etVirtualMethodClass,etStaticMethodClass, etFieldValueClass)
Table 37.7: Enumeration values for type tinterfaceentrytype Value etFieldValue etFieldValueClass etStandard etStaticMethodClass etStaticMethodResult etVirtualMethodClass etVirtualMethodResult Explanation Field value Interface provided by a class eld Standard entry Interface provided by a static class method Statis method Interface provided by a virtual class method Virtual method
This is an internal type for the compiler to encode calls to dispatch interfaces. tinterfacetable = record EntryCount : PtrUInt; Entries : Array[0..0] of tinterfaceentry; end
Record to store list of interfaces of a class. TMemoryManager = record NeedLock : Boolean; 1265
Getmem : function(Size: PtrUInt) : Pointer; Freemem : function(p: pointer) : PtrUInt; FreememSize : function(p: pointer;Size: PtrUInt) : PtrUInt; AllocMem : function(Size: PtrUInt) : Pointer; ReAllocMem : function(var p: pointer;Size: PtrUInt) : Pointer; MemSize : function(p: pointer) : PtrUInt; InitThread : procedure; DoneThread : procedure; RelocateHeap : procedure; GetHeapStatus : function : THeapStatus; GetFPCHeapStatus : function : TFPCHeapStatus; end
TMemoryManager describes the memory manager. For more information about the memory manager, see the programmers reference. TMethod = record Code : Pointer; Data : Pointer; end
TMethod describes a general method pointer, and is used in Run-Time Type Information handling. TMsgStrTable = record name : PShortString; method : pointer; end
Record used in string message handler table. TPCharArray = packed Array[0..(MaxLongintdivSizeOf(PChar))-1] of PChar Array of PChar TProcedure = procedure Simple procedural type. TReleaseThreadVarsHandler = procedure Threadvar release callback type for TThreadManager (1270). TRelocateThreadVarHandler = function(offset: DWord) : pointer Threadvar relocalization callback type for TThreadManager (1270). TResourceHandle = PtrUInt This is an opaque type. 1266
TResourceManager = record HINSTANCEFunc : function : TFPResourceHMODULE; EnumResourceTypesFunc : function(ModuleHandle: TFPResourceHMODULE;EnumFunc: EnumRes lParam: PtrInt) : LongBool; EnumResourceNamesFunc : function(ModuleHandle: TFPResourceHMODULE;ResourceType: PCh EnumFunc: EnumResNameProc;lParam: PtrInt) : LongBool; EnumResourceLanguagesFunc : function(ModuleHandle: TFPResourceHMODULE;ResourceType: ResourceName: PChar;EnumFunc: EnumResLangProc;lParam: PtrInt) : LongBool; FindResourceFunc : function(ModuleHandle: TFPResourceHMODULE;ResourceName: PChar; ResourceType: PChar) : TFPResourceHandle; FindResourceExFunc : function(ModuleHandle: TFPResourceHMODULE;ResourceType: PChar; ResourceName: PChar;Language: Word) : TFPResourceHandle; LoadResourceFunc : function(ModuleHandle: TFPResourceHMODULE;ResHandle: TFPResource : TFPResourceHGLOBAL; SizeofResourceFunc : function(ModuleHandle: TFPResourceHMODULE;ResHandle: TFPResour : LongWord; LockResourceFunc : function(ResData: TFPResourceHGLOBAL) : Pointer; UnlockResourceFunc : function(ResData: TFPResourceHGLOBAL) : LongBool; FreeResourceFunc : function(ResData: TFPResourceHGLOBAL) : LongBool; end
TResourceManager is the record describing the resource manager. Depending on the kind of resources (internal, external), another resource managing handler is installed by the system. The resource manager record is used by all resource handling functions to do the actual work: for each function in the API, a handler function is available. People wishing to implement their own resource manager, must implement all handler functions in their implementation. As soon as resources are used, the compiler will install a resource manager, depending on the platform, this may be an internal or an external resource manager. TRTLCreateEventHandler = function : PRTLEvent Callback type for creating a TRTLEvent type in TThreadManager (1270). TRTLCriticalSection = Opaque type TRTLCriticalSection represents a critical section (a mutex). This is an opaque type, it can differ from operating system to operating system. No assumptions should be made about its structure or contents. TRTLEventHandler = procedure(AEvent: PRTLEvent) Generic TRTLEvent handling type for TThreadManager (1270). TRTLEventHandlerTimeout = procedure(AEvent: PRTLEvent;timeout: LongInt) TRTLEvent timeout handling type for TThreadManager (1270). TRTLEventSyncHandler = procedure(m: trtlmethod;p: TProcedure) Callback type for event sycnhronization in TThreadManager (1270). 1267
trtlmethod = procedure of object Callback type for synchronization event. TRuntimeError = (reNone,reOutOfMemory,reInvalidPtr,reDivByZero, reRangeError,reIntOverflow,reInvalidOp,reZeroDivide, reOverflow,reUnderflow,reInvalidCast,reAccessViolation, rePrivInstruction,reControlBreak,reStackOverflow, reVarTypeCast,reVarInvalidOp,reVarDispatch, reVarArrayCreate,reVarNotArray,reVarArrayBounds, reAssertionFailed,reExternalException,reIntfCastError, reSafeCallError,reQuit,reCodesetConversion)
Table 37.8: Enumeration values for type TRuntimeError Value reAccessViolation reAssertionFailed reCodesetConversion reControlBreak reDivByZero reExternalException reIntfCastError reIntOverow reInvalidCast reInvalidOp reInvalidPtr reNone reOutOfMemory reOverow rePrivInstruction reQuit reRangeError reSafeCallError reStackOverow reUnderow reVarArrayBounds reVarArrayCreate reVarDispatch reVarInvalidOp reVarNotArray reVarTypeCast reZeroDivide Explanation Access Violation Assertion failed error Code set conversion error User pressed CTRL-C Division by zero error An external exception occurred Interface typecast error Integer overow error Invalid (class) typecast error Invalid operation error Invalid pointer error No error Out of memory error Overow error Privileged instruction error Quit signal error Range check error Safecall (IDispInterface) error Stack overow error Underow error Variant array bounds error Variant array creation error Variant Dispatch error. Invalid variant operation error Variant is not an array error. Invalid typecase from variant Division by zero error
TRuntimeError is used in the Error (1310) procedure to indicate what kind of error should be reported. TSafeCallErrorProc = procedure(error: HRESULT;addr: pointer) Prototype of a safecall error handler routine. Error is the error number (passed by the Windows operating system) and Addr is the address where the error occurred. 1268
TSemaphoreDestroyHandler is the function prototype to destroy an existing semaphore, as returned by (ThreadManager.SemaphoreInit). It is used by the thread manager (ThreadManager.SemaphoreDestr TSemaphorePostHandler = procedure(const sem: Pointer) TSemaphorePostHandler is the function prototype to post an event to the semaphore. It should handle a pointer as returned by the ThreadManager.SemaphoreInit procedure. its used by the thread manager ThreadManager.SemaphorePost. TSemaphoreWaitHandler = procedure(const sem: Pointer) TSemaphoreWaitHandler is the function prototype to wait on an event on the semaphore (which should be posted to the semaphore with ThreadManager.SemaphorePost). It should handle a pointer as eturned by the ThreadManager.SemaphoreInit procedure. its used by the thread manager ThreadManager.SemaphoreWait. TSempahoreInitHandler = function : Pointer TSempahoreInitHandler is the function prototype for initializing a semaphore. It is used by the thread manager (ThreadManager.SemaphoreInit) to create semaphores. The function should return a pointer, usable by the other semaphore functions of the thread manager. TStringMessageTable = record count : LongInt; msgstrtable : Array[0..0] of TMsgStrTable; end
Record used to describe the string messages handled by a class. It consists of a count, followed by an array of TMsgStrTable (1266) records. TTextLineBreakStyle = (tlbsLF,tlbsCRLF,tlbsCR)
Table 37.9: Enumeration values for type TTextLineBreakStyle Value tlbsCR tlbsCRLF tlbsLF Explanation Carriage-return (#13, Mac-OS style) Carriage-return, line-feed (#13#30, Windows style) Line-feed only (#10, unix style)
Text line break style. (end of line character) TThreadFunc = function(parameter: pointer) : PtrInt Thread function prototype TThreadGetPriorityHandler = function(threadHandle: TThreadID) : LongInt 1269
Callback type for thread priority getting in TThreadManager (1270). TThreadHandler = function(threadHandle: TThreadID) : DWord Generic thread handler callback for TThreadManager (1270). TThreadID = PtrUInt This is an opaque type, it can differ from operating system to operating system. TThreadManager = record InitManager : function : Boolean; DoneManager : function : Boolean; BeginThread : TBeginThreadHandler; EndThread : TEndThreadHandler; SuspendThread : TThreadHandler; ResumeThread : TThreadHandler; KillThread : TThreadHandler; CloseThread : TThreadHandler; ThreadSwitch : TThreadSwitchHandler; WaitForThreadTerminate : TWaitForThreadTerminateHandler; ThreadSetPriority : TThreadSetPriorityHandler; ThreadGetPriority : TThreadGetPriorityHandler; GetCurrentThreadId : TGetCurrentThreadIdHandler; InitCriticalSection : TCriticalSectionHandler; DoneCriticalSection : TCriticalSectionHandler; EnterCriticalSection : TCriticalSectionHandler; TryEnterCriticalSection : TCriticalSectionHandlerTryEnter; LeaveCriticalSection : TCriticalSectionHandler; InitThreadVar : TInitThreadVarHandler; RelocateThreadVar : TRelocateThreadVarHandler; AllocateThreadVars : TAllocateThreadVarsHandler; ReleaseThreadVars : TReleaseThreadVarsHandler; BasicEventCreate : TBasicEventCreateHandler; BasicEventDestroy : TBasicEventHandler; BasicEventResetEvent : TBasicEventHandler; BasicEventSetEvent : TBasicEventHandler; BasiceventWaitFOr : TBasicEventWaitForHandler; RTLEventCreate : TRTLCreateEventHandler; RTLEventDestroy : TRTLEventHandler; RTLEventSetEvent : TRTLEventHandler; RTLEventResetEvent : TRTLEventHandler; RTLEventWaitFor : TRTLEventHandler; RTLEventSync : TRTLEventSyncHandler; RTLEventWaitForTimeout : TRTLEventHandlerTimeout; SemaphoreInit : TSempahoreInitHandler; SemaphoreDestroy : TSemaphoreDestroyHandler; SemaphorePost : TSemaphorePostHandler; SemaphoreWait : TSemaphoreWaitHandler; end
TThreadManager is a record that contains all callbacks needed for the thread handling routines of the Free Pascal Run-Time Library. The thread manager can be set by the SetThreadManager (1399) 1270
procedure, and the current thread manager can be retrieved with the GetThreadManager (1324) procedure. The Windows RTL will set the thread manager automatically to a system thread manager, based on the Windows threading routines. Unix operating systems provide a unit cthreads which implements threads based on the C library POSIX thread routines. It is not included by default, because it would make the system unit dependent on the C library. For more information about thread programming, see the programmers guide. TThreadSetPriorityHandler = function(threadHandle: TThreadID; Prio: LongInt) : Boolean Callback type for thread priority setting in TThreadManager (1270). TThreadSwitchHandler = procedure Callback type for thread switch in TThreadManager (1270). TTime = TDateTime TTime is dened for Delphi compatibility. This type is deprecated, use TDateTime (1262) instead. TUCS4CharArray = Array[0..$effffff] of UCS4Char Array of UCS4Char (1275) characters.
TUnicodeStringManager = record Wide2AnsiMoveProc : procedure(source: PWideChar;var dest: ansistring;len: SizeInt); Ansi2WideMoveProc : procedure(source: PChar;var dest: widestring;len: SizeInt); UpperWideStringProc : function(const S: WideString) : WideString; LowerWideStringProc : function(const S: WideString) : WideString; CompareWideStringProc : function(const s1: WideString;const s2: WideString) : PtrIn CompareTextWideStringProc : function(const s1: WideString;const s2: WideString) : P CharLengthPCharProc : function(const Str: PChar) : PtrInt; CodePointLengthProc : function(const Str: PChar;MaxLookAead: PtrInt) : PtrInt; UpperAnsiStringProc : function(const s: ansistring) : ansistring; LowerAnsiStringProc : function(const s: ansistring) : ansistring; CompareStrAnsiStringProc : function(const S1: ansistring;const S2: ansistring) : Pt CompareTextAnsiStringProc : function(const S1: ansistring;const S2: ansistring) : P StrCompAnsiStringProc : function(S1: PChar;S2: PChar) : PtrInt; StrICompAnsiStringProc : function(S1: PChar;S2: PChar) : PtrInt; StrLCompAnsiStringProc : function(S1: PChar;S2: PChar;MaxLen: PtrUInt) : PtrInt; StrLICompAnsiStringProc : function(S1: PChar;S2: PChar;MaxLen: PtrUInt) : PtrInt; StrLowerAnsiStringProc : function(Str: PChar) : PChar; StrUpperAnsiStringProc : function(Str: PChar) : PChar; ThreadInitProc : procedure; ThreadFiniProc : procedure; Unicode2AnsiMoveProc : procedure(source: PUnicodeChar;var dest: ansistring;len: Siz Ansi2UnicodeMoveProc : procedure(source: PChar;var dest: unicodestring;len: SizeInt UpperUnicodeStringProc : function(const S: UnicodeString) : UnicodeString; LowerUnicodeStringProc : function(const S: UnicodeString) : UnicodeString; CompareUnicodeStringProc : function(const s1: UnicodeString;const s2: UnicodeString CompareTextUnicodeStringProc : function(const s1: UnicodeString;const s2: UnicodeSt end
1271
TUnicodeStringManager is currently the same as the TUnicodeStringManager (1272) manager record. It performs the same functions: converting unicode strings to ansistrings and vice-versa, performing uppercase to lowercase transformations and comparing strings. tvararray = record dimcount : Word; flags : Word; elementsize : LongInt; lockcount : LongInt; data : pointer; bounds : tvararrayboundarray; end
tvararray is a record describing a variant array. It contains some general data, followed by a number of TVarArrayBound (1272) records equal to the number of dimensions in the array (dimcoun). tvararraybound = record elementcount : LongInt; lowbound : LongInt; end
tvararraybound is used to describe one dimension in a variant array. tvararrayboundarray = Array[0..0] of tvararraybound array of tvararraybound (1272) records. tvararraycoorarray = Array[0..0] of LongInt Array of variant array coordinates tvardata = packed record vtype : tvartype; end
TVarData is a record representation of a variant. It contains the internal structure of a variant and is handled by the various variant handling routines. tvariantmanager = record vartoint : function(const v: variant) : LongInt; vartoint64 : function(const v: variant) : Int64; vartoword64 : function(const v: variant) : QWord; vartobool : function(const v: variant) : Boolean; vartoreal : function(const v: variant) : extended; vartotdatetime : function(const v: variant) : TDateTime; vartocurr : function(const v: variant) : currency; vartopstr : procedure(var s;const v: variant); vartolstr : procedure(var s: ansistring;const v: variant); vartowstr : procedure(var s: widestring;const v: variant); 1272
vartointf : procedure(var intf: IInterface;const v: variant); vartodisp : procedure(var disp: IDispatch;const v: variant); vartodynarray : procedure(var dynarr: pointer;const v: variant;typeinfo: pointer); varfrombool : procedure(var dest: variant;const source: Boolean); varfromint : procedure(var dest: variant;const source: LongInt;const Range: LongInt varfromint64 : procedure(var dest: variant;const source: Int64); varfromword64 : procedure(var dest: variant;const source: QWord); varfromreal : procedure(var dest: variant;const source: extended); varfromtdatetime : procedure(var dest: Variant;const source: TDateTime); varfromcurr : procedure(var dest: Variant;const source: Currency); varfrompstr : procedure(var dest: variant;const source: ShortString); varfromlstr : procedure(var dest: variant;const source: ansistring); varfromwstr : procedure(var dest: variant;const source: WideString); varfromintf : procedure(var dest: variant;const source: IInterface); varfromdisp : procedure(var dest: variant;const source: IDispatch); varfromdynarray : procedure(var dest: variant;const source: pointer;typeinfo: point olevarfrompstr : procedure(var dest: olevariant;const source: shortstring); olevarfromlstr : procedure(var dest: olevariant;const source: ansistring); olevarfromvar : procedure(var dest: olevariant;const source: variant); olevarfromint : procedure(var dest: olevariant;const source: LongInt; const range: ShortInt); varop : procedure(var left: variant;const right: variant;opcode: tvarop); cmpop : function(const left: variant;const right: variant;const opcode: tvarop) : Boolean; varneg : procedure(var v: variant); varnot : procedure(var v: variant); varinit : procedure(var v: variant); varclear : procedure(var v: variant); varaddref : procedure(var v: variant); varcopy : procedure(var dest: variant;const source: variant); varcast : procedure(var dest: variant;const source: variant;vartype: LongInt); varcastole : procedure(var dest: variant;const source: variant;vartype: LongInt); dispinvoke : procedure(dest: pvardata;const source: tvardata;calldesc: pcalldesc; params: pointer) of object; vararrayredim : procedure(var a: variant;highbound: SizeInt); vararrayget : function(const a: variant;indexcount: SizeInt;indices: PLongint) : variant of object; vararrayput : procedure(var a: variant;const value: variant;indexcount: SizeInt; indices: PLongint) of object; writevariant : function(var t: text;const v: variant;width: LongInt) : Pointer; write0Variant : function(var t: text;const v: Variant) : Pointer; end
TVariantManager describes the variant manager as expected by the SetVariantManager (1399) call. tvarop = (opadd,opsubtract,opmultiply,opdivide,opintdivide,opmodulus, opshiftleft,opshiftright,opand,opor,opxor,opcompare,opnegate, opnot,opcmpeq,opcmpne,opcmplt,opcmple,opcmpgt,opcmpge,oppower)
1273
Table 37.10: Enumeration values for type tvarop Value opadd opand opcmpeq opcmpge opcmpgt opcmple opcmplt opcmpne opcompare opdivide opintdivide opmodulus opmultiply opnegate opnot opor oppower opshiftleft opshiftright opsubtract opxor Explanation Variant operation: Variant operation: Variant operation: Variant operation: Variant operation: Variant operation: Variant operation: Variant operation: Variant operation: Variant operation: Variant operation: Variant operation: Variant operation: Variant operation: Variant operation: Variant operation: Variant operation: Variant operation: Variant operation: Variant operation: Variant operation:
Addition. Binary AND operation Compare equal. Compare larger than or equal Compare larger than Compare less than or equal to Compare less than. Compare not equal Compare division integer divide Modulus multiplication negation. Binary NOT operation. Binary OR operation Power Shift left Shift right Substraction binary XOR operation.
tvarop describes a variant operation. It is mainly used for the variant manager to implement the various conversions and mathematical operations on a variant. TVarRec = record end
TVarRec is a record generated by the compiler for each element in a array of const call. The procedure that receives the constant array receives an array of TVarRec elements, with lower bound zero and high bound equal to the number of elements in the array minus one (as returned by High(Args)) tvartype = Word Type with size of variant type. TVmt = record vInstanceSize : SizeInt; vInstanceSize2 : SizeInt; vParent : PVmt; vClassName : PShortString; vDynamicTable : Pointer; vMethodTable : Pointer; vFieldTable : Pointer; vTypeInfo : Pointer; vInitTable : Pointer; 1274
vAutoTable : Pointer; vIntfTable : pinterfacetable; vMsgStrPtr : pstringmessagetable; vDestroy : Pointer; vNewInstance : Pointer; vFreeInstance : Pointer; vSafeCallException : Pointer; vDefaultHandler : Pointer; vAfterConstruction : Pointer; vBeforeDestruction : Pointer; vDefaultHandlerStr : Pointer; vDispatch : Pointer; vDispatchStr : Pointer; vEquals : Pointer; vGetHashCode : Pointer; vToString : Pointer; end
TVMT is a record describing the VMT of a class. Its various elds represent the available information in the VMT, as far as it is common to all classes. TWaitForThreadTerminateHandler = function(threadHandle: TThreadID; TimeoutMs: LongInt) : DWord Callback type for thread termination in TThreadManager (1270). TWideStringManager = TUnicodeStringManager TWideStringManager contains the denition of the widestring manager. UCS2Char = WideChar UCS2 unicode character. UCS4Char = UCS unicode character (unsigned 32 bit word) UCS4String = Array of UCS4Char String of UCS4Char (1275) characters. UInt64 = QWord Unsigned 64-bit integer UnicodeChar = WideChar UnicodeChar is a single character from a UnicodeString. It equals WideChar in all respects. UTF8String = ansistring 1275
UTF-8 unicode (ansi) string. ValReal = Extended ValReal is an alias for the largest available oating point type on the architecture the program runs on. On most processors, it should be one of Double or Extended. ValSInt = LongInt Integer with the same size as the return code of the Val (1419) function. ValUInt = Cardinal Integer with the same size as the return code of the Val (1419) function. WChar = WideChar Wide char (16-bit sized char)
37.9.3
Variables
argc : LongInt argc contains the number of command-line arguments passed to the program by the OS. It is not available on all systems. argv : PPChar argv contains a pointer to a nil-terminated array of null-terminated strings, containing the commandline arguments passed to the program by the OS. It is not available on all systems. DispCallByIDProc : pointer VarDispProc is called by the compiler if it needs to perform an interface call from a variant which contains a dispatch interface. For instance, the following call: Var V : OleVariant; begin (V as IWord).OpenDocument(c:\temp\mydoc.doc); end; where IWord is a dispatch interface is encoded by the compiler and passed to DispCallByIDProc. This pointer must be set by a routine that calls the OS COM handling routines. envp : PPChar envp contains a pointer to a nil-terminated array of null-terminated strings, containing the environment variables passed to the program by the OS. It is not available on all systems. ErrOutput : Text 1276
ErrOutput is provided for Delphi compatibility. ExitCode : LongInt Exit code for the program, will be communicated to the OS on exit. fpc_threadvar_relocate_proc : pointer
InOutRes : Word Result of last I/O operation. Read-Only. Input : Text Standard input text le. IsConsole : Boolean True for console applications, False for GUI applications. IsLibrary : Boolean = false True if the current module is a library. Otherwise module is an excutable mem : Array[0..$7fffffff-1] of Byte mem is an array of bytes, representing the computers memory. This array is available only when compiling for the Dos Go32V2 target. Its use is not recommended, and it is not even available on other platforms. meml : Array[0..($7fffffffdivsizeof(longint))-1] of LongInt memw is an array of longints, representing the computers memory as 32-bit signed integers. This array is available only when compiling for the Dos Go32V2 target. Its use is not recommended, and it is not even available on other platforms. memw : Array[0..($7fffffffdivsizeof(word))-1] of Word memw is an array of words, representing the computers memory as 2-byte words. This array is available only when compiling for the Dos Go32V2 target Its use is not recommended, and it is not even available on other platforms. Output : Text Standard output text le. RandSeed : Cardinal Seed for Random (1378) function. 1277
ReturnNilIfGrowHeapFails : Boolean ReturnNilIfGrowHeapFails describes what happens if there is no more memory available from the operating system. if set to True the memory manager will return Nil. If set to False then a run-time error will occur. softfloat_exception_flags : Byte Current soft oat exception ags softfloat_exception_mask : Byte Current soft oat exception mask softfloat_rounding_mode : Byte softfloat_rounding_mode determines how the software oating-point emulation routines do the rounding. The value can be one of the following: oat_round_nearest_even Round to nearest even number oat_round_down Round down oat_round_up Round up oat_round_to_zero Round in the direction of zero (down for positive, up for negative) StackBottom : Pointer Current stack bottom. StackLength : SizeUInt Maximum stack length. StackTop : Pointer StackTop contains the top of the stack for the current process. It is used to check the heap on some operating systems, and is set by the system unit initialization code. Do not use or modify this value. StdErr : Text Standard diagnostic output text le. StdOut : Text Alias for Output (1277). ThreadID : TThreadID Current Thread ID. widestringmanager : TUnicodeStringManager Contains the current widestring manager. Do not use directly. 1278
37.10
37.10.1
Synopsis: Calculate absolute value Declaration: function abs(l: LongInt) : LongInt function abs(l: Int64) : Int64 function abs(d: ValReal) : ValReal Visibility: default Description: Abs returns the absolute value of a variable. The result of the function has the same type as its argument, which can be any numerical type. Errors: None. See also: Round (1389) Listing: ./refex/ex1.pp
Program Example1 ; { Program t o demonstrate t h e Abs f u n c t i o n . } Var r : real ; i : integer ; begin r : = abs ( 1 . 0 ) ; i : = abs ( 2 1 ) ; end .
{ r :=1.0 } { i :=21 }
37.10.2
AbstractError
Synopsis: Generate an abstract error. Declaration: procedure AbstractError Visibility: default Description: AbstractError generates an abstract error (run-time error 211). If the AbstractErrorProc (1229) constant is set, it will be called instead. Errors: This routine causes a run-time error 211. See also: AbstractErrorProc (1229)
37.10.3
AcquireExceptionObject
Synopsis: Obtain a reference to the current exception object Declaration: function AcquireExceptionObject : Pointer Visibility: default
1279
Description: AcquireExceptionObject returns the current exception object. It raises the reference count of the exception object, so it will not be freed. Calling this method is only valid within an except block. The effect of this function is countered by re-raising an exception via raise; To make sure that the exception object is released when it is no longer needed, ReleaseExceptionObject (1383) must be called when the reference is no longer needed. Errors: If there is no current exception, a run-time error 231 will occur. See also: ReleaseExceptionObject (1383)
37.10.4
AddExitProc
Synopsis: Add an exit procedure to the exit procedure chain. Declaration: procedure AddExitProc(Proc: TProcedure) Visibility: default Description: AddExitProc adds Proc to the exit procedure chain. At program exit, all procedures added in this way will be called in reverse order. Errors: None. See also: ExitProc (1231)
37.10.5
Addr
Synopsis: Return address of a variable Declaration: function Addr(X: TAnytype) : Pointer Visibility: default Description: Addr returns a pointer to its argument, which can be any type, or a function or procedure name. The returned pointer isnt typed. The same result can be obtained by the @ operator, which can return a typed pointer (see the programmers guide). Errors: None See also: SizeOf (1401) Listing: ./refex/ex2.pp
Program Example2 ; { Program t o demonstrate t h e Addr f u n c t i o n . } Const Zero : i n t e g e r = 0 ; Var p : p o i n t e r ; i : Integer ; begin p : = Addr ( p ) ; p : = Addr ( I ) ; p : = Addr ( Zero ) ; end .
1280
37.10.6
Align
Synopsis: Return aligned version of an address Declaration: function Align(Addr: PtrUInt;Alignment: PtrUInt) : PtrUInt function Align(Addr: Pointer;Alignment: PtrUInt) : Pointer Visibility: default Description: Align returns Address, aligned to Alignment bytes. Errors: None.
37.10.7
AllocMem
Synopsis: Allocate and clear memory. Declaration: function AllocMem(Size: PtrUInt) : pointer Visibility: default Description: AllocMem calls getmem GetMem (1322), and clears the allocated memory, i.e. the allocated memory is lled with Size zero bytes. See also: GetMem (1322)
37.10.8
AnsiToUtf8
Synopsis: Convert ansi string to UTF-8 string Declaration: function AnsiToUtf8(const s: ansistring) : UTF8String Visibility: default Description: AnsiToUtf8 converts the ansistring S to a UTF-8 format, that is, it converts the string from whatever codepage is currently in use, to UTF-8. The current codepage is fetched from the system, if internationalization support is enabled. It can be UTF-8, in which case the function simply returns S. Errors: None. See also: Utf8toAnsi (1419)
37.10.9
Append
Synopsis: Open a le in append mode Declaration: procedure Append(var t: Text) Visibility: default Description: Append opens an existing le in append mode. Any data written to F will be appended to the le. Only text les can be opened in append mode. After a call to Append, the le F becomes write-only. File sharing is not taken into account when calling Append. Errors: If the le doesnt exist when appending, a run-time error will be generated. This behaviour has changed on Windows and Linux platforms, where in versions prior to 1.0.6, the le would be created in append mode. 1281
See also: Rewrite (1385), Close (1292), Reset (1384) Listing: ./refex/ex3.pp
Program Example3 ; { Program t o demonstrate t h e Append f u n c t i o n . } Var f : t e x t ; begin Assign ( f , t e s t . t x t ) ; Rewrite ( f ) ; { f i l e i s opened f o r w r i t e , and emptied } Writeln ( F , This i s the f i r s t l i n e of t e x t . t x t ) ; close ( f ) ; Append ( f ) ; { f i l e i s opened f o r w r i t e , b u t NOT emptied . any t e x t w r i t t e n t o i t i s appended . } W r i t e l n ( f , T h i s i s t h e second l i n e o f t e x t . t x t ) ; close ( f ) ; end .
37.10.10
arctan
Synopsis: Calculate inverse tangent Declaration: function arctan(d: ValReal) : ValReal Visibility: default Description: Arctan returns the Arctangent of X, which can be any Real type. The resulting angle is in radial units. Errors: None See also: Sin (1400), Cos (1300) Listing: ./refex/ex4.pp
Program Example4 ; { Program t o demonstrate t h e ArcTan f u n c t i o n . } Var R : Real ; begin R: = ArcTan ( 0 ) ; R: = ArcTan ( 1 ) / p i ; end .
{ R: = 0 } { R: = 0 . 2 5 }
37.10.11
ArrayStringToPPchar
Synopsis: Concert an array of string to an array of null-terminated strings Declaration: function ArrayStringToPPchar(const S: Array of AnsiString; reserveentries: LongInt) : PPChar Visibility: default 1282
Description: ArrayStringToPPchar creates an array of null-terminated strings that point to strings which are the same as the strings in the array S. The function returns a pointer to this array. The array and the strings it contains must be disposed of after being used, because it they are allocated on the heap. The ReserveEntries parameter tells ArrayStringToPPchar to allocate room at the end of the array for another ReserveEntries entries. Errors: If not enough memory is available, an error may occur. See also: StringToPPChar (1405)
37.10.12
Assert
Synopsis: Check validity of a given condition. Declaration: procedure Assert(Expr: Boolean) procedure Assert(Expr: Boolean;const Msg: string) Visibility: default Description: With assertions on, Assert tests if expr is false, and if so, aborts the application with a Runtime error 227 and an optional error message in msg. If expr is true, program execution continues normally. If assertions are not enabled at compile time, this routine does nothing, and no code is generated for the Assert call. Enabling and disabling assertions at compile time is done via the \$C or \$ASSERTIONS compiler switches. These are global switches. The default behavior of the assert call can be changed by setting a new handler in the AssertErrorProc variable. Sysutils overrides the default handler to raise a EAssertionFailed exception. Errors: None. See also: Halt (1326), Runerror (1391)
37.10.13
Declaration: procedure procedure procedure procedure procedure procedure procedure procedure procedure Visibility: default
Assign
Assign(out Assign(out Assign(out Assign(out Assign(out Assign(out Assign(out Assign(out Assign(out f: f: f: f: f: f: t: t: t: File;const Name: string) File;p: PChar) File;c: Char) TypedFile;const Name: string) TypedFile;p: PChar) TypedFile;c: Char) Text;const s: string) Text;p: PChar) Text;c: Char)
Description: Assign assigns a name to F, which can be any le type. This call doesnt open the le, it just assigns a name to a le variable, and marks the le as closed. Errors: None. See also: Reset (1384), Rewrite (1385), Append (1281) Listing: ./refex/ex5.pp
1283
Program Example5 ; { Program t o demonstrate t h e Assign f u n c t i o n . } Var F : t e x t ; begin Assign ( F , ) ; Rewrite ( f ) ; { The f o l l o w i n g can be p u t i n any f i l e by r e d i r e c t i n g i t from t h e command l i n e . } W r i t e l n ( f , T h i s goes t o s t a n d a r d o u t p u t ! ) ; Close ( f ) ; Assign ( F , Test . t x t ) ; rewrite ( f ) ; w r i t e l n ( f , T h i s doesn t go t o s t a n d a r d o u t p u t ! ) ; close ( f ) ; end .
37.10.14
Assigned
Synopsis: Check if a pointer is valid Declaration: function Assigned(P: Pointer) : Boolean Visibility: default Description: Assigned returns True if P is non-nil and retuns False of P is nil. The main use of Assigned is that Procedural variables, method variables and class-type variables also can be passed to Assigned. Errors: None See also: New (1346) Listing: ./refex/ex96.pp
Program Example96 ; { Program t o demonstrate t h e Assigned f u n c t i o n . } Var P : P o i n t e r ; begin I f Not Assigned (P ) then W r i t e l n ( P o i n t e r i s i n i t i a l l y NIL ) ; P: =@P; I f Not Assigned (P ) then Writeln ( I n t e r n a l inconsistency ) else W r i t e l n ( A l l i s w e l l i n FPC ) end .
1284
37.10.15
BasicEventCreate
Synopsis: Obsolete. Dont use Declaration: function BasicEventCreate(EventAttributes: Pointer; AManualReset: Boolean;InitialState: Boolean; const Name: ansistring) : PEventState Visibility: default Description: BasicEventCreate is obsolete, use RTLEventCreate (1389) instead. See also: RTLEventCreate (1389)
37.10.16
basiceventdestroy
Synopsis: Obsolete. Dont use Declaration: procedure basiceventdestroy(state: PEventState) Visibility: default Description: basiceventdestroy is obsolete. Use RTLEventDestroy (1390) instead. See also: RTLEventDestroy (1390)
37.10.17
basiceventResetEvent
Synopsis: Obsolete. Dont use Declaration: procedure basiceventResetEvent(state: PEventState) Visibility: default Description: basiceventResetEvent is obsolete. Use RTLEventResetEvent (1390) instead. See also: RTLEventResetEvent (1390)
37.10.18
basiceventSetEvent
Synopsis: Obsolete. Dont use Declaration: procedure basiceventSetEvent(state: PEventState) Visibility: default Description: basiceventSetEvent is obsolete. Use RTLEventSetEvent (1390) instead. See also: RTLEventSetEvent (1390)
37.10.19
basiceventWaitFor
Synopsis: Obsolete. Dont use Declaration: function basiceventWaitFor(Timeout: Cardinal;state: PEventState) : LongInt Visibility: default Description: basiceventwaitfor is obsolete. Use RTLEventWaitFor (1390) instead. See also: RTLEventWaitFor (1390) 1285
37.10.20
BeginThread
Synopsis: Start a new thread. Declaration: function BeginThread(sa: Pointer;stacksize: SizeUInt; ThreadFunction: TThreadFunc;p: pointer; creationFlags: DWord;var ThreadId: TThreadID) : TThreadID function BeginThread(ThreadFunction: TThreadFunc) : TThreadID function BeginThread(ThreadFunction: TThreadFunc;p: pointer) : TThreadID function BeginThread(ThreadFunction: TThreadFunc;p: pointer; var ThreadId: TThreadID) : TThreadID function BeginThread(ThreadFunction: TThreadFunc;p: pointer; var ThreadId: TThreadID;const stacksize: SizeUInt) : TThreadID Visibility: default Description: BeginThread starts a new thread and executes ThreadFunction in the new thread. If P is specied, then it is passed to ThreadFunction. If ThreadId is specied, it is lled with the thread ID of the newly started thread. If StackSize is specied, it is set as the stack size for the new thread. If none is specied, a default stack size of 4MiB is used. The function returns the thread handle (or ID, on some other operating systems like Linux or \ostwo) on success, or 0 if an error occurred. Note that the thread ID and handle are the same on unix processes, and that the thread ID and thread handle are different on windows systems. Errors: On error, the value "0" is returned. See also: EndThread (1306)
37.10.21
Declaration: function function function function function function Visibility: default
BEtoN
BEtoN(const BEtoN(const BEtoN(const BEtoN(const BEtoN(const BEtoN(const AValue: AValue: AValue: AValue: AValue: AValue: SmallInt) : SmallInt Word) : Word LongInt) : LongInt DWord) : DWord Int64) : Int64 QWord) : QWord
Description: BEToN will rearrange the bytes in a Big-Endian number to the native order for the current processor. That is, for a big-endian processor, it will do nothing, and for a little-endian processor, it will invert the order of the bytes. See also: LEtoN (1341), NtoBE (1346), NtoLE (1347)
37.10.22
binStr
Synopsis: Convert integer to string with binary representation. Declaration: function binStr(Val: LongInt;cnt: Byte) : shortstring function binStr(Val: Int64;cnt: Byte) : shortstring function binStr(Val: QWord;cnt: Byte) : shortstring
1286
Visibility: default Description: BinStr returns a string with the binary representation of Value. The string has at most cnt characters. (i.e. only the cnt rightmost bits are taken into account) To have a complete representation of any longint-type value, 32 bits are needed, i.e. cnt=32 Errors: None. See also: Str (1404), Val (1419), HexStr (1326), OctStr (1347) Listing: ./refex/ex82.pp
Program example82 ; { Program t o demonstrate t h e B i n S t r f u n c t i o n } Const Value = 4 5 6 7 8 ; Var I : l o n g i n t ; begin For I : = 8 to 2 0 do W r i t e l n ( B i n S t r ( Value , I ) : 2 0 ) ; end .
37.10.23
BlockRead
Int64;var Result: Int64) LongInt; Cardinal; Word;var Result: Word) Word;var Result: Integer) Int64)
Synopsis: Read data from an untyped le into memory Declaration: procedure BlockRead(var f: File;var Buf;count: procedure BlockRead(var f: File;var Buf;count: var Result: LongInt) procedure BlockRead(var f: File;var Buf;count: var Result: Cardinal) procedure BlockRead(var f: File;var Buf;count: procedure BlockRead(var f: File;var Buf;count: procedure BlockRead(var f: File;var Buf;count: Visibility: default Description: Blockread reads count or less records from le F. A record is a block of bytes with size specied by the Rewrite (1385) or Reset (1384) statement. The result is placed in Buffer, which must contain enough room for Count records. The function cannot read partial records. If Result is specied, it contains the number of records actually read. If Result isnt specied, and less than Count records were read, a run-time error is generated. This behavior can be controlled by the {$I} switch. Errors: Depending on the state of the {$I} switch, a runtime error can be generated if there is an error. In the {$I-} state, use IOResult to check for errors. See also: Blockwrite (1288), Close (1292), Reset (1384), Assign (1283) Listing: ./refex/ex6.pp
Program Example6 ; { Program t o demonstrate t h e BlockRead and B l o c k W r i t e f u n c t i o n s . }
1287
Var Fin , f o u t : F i l e ; NumRead, NumWritten : Word ; Buf : Array [ 1 . . 2 0 4 8 ] of b y t e ; Total : Longint ; begin Assign ( Fin , Paramstr ( 1 ) ) ; Assign ( Fout , Paramstr ( 2 ) ) ; Reset ( Fin , 1 ) ; Rewrite ( Fout , 1 ) ; Total :=0; Repeat BlockRead ( Fin , buf , Sizeof ( b u f ) , NumRead ) ; BlockWrite ( Fout , Buf , NumRead, NumWritten ) ; inc ( T o t a l , NumWritten ) ; U n t i l ( NumRead= 0 ) or ( NumWritten <>NumRead ) ; Write ( Copied , T o t a l , b y t e s from f i l e , paramstr ( 1 ) ) ; W r i t e l n ( t o f i l e , paramstr ( 2 ) ) ; close ( f i n ) ; close ( f o u t ) ; end .
37.10.24
BlockWrite
Int64; LongInt; Cardinal; Word;var Result: Word) Word; LongInt)
Synopsis: Write data from memory to an untyped le Declaration: procedure BlockWrite(var f: File;const Buf;Count: var Result: Int64) procedure BlockWrite(var f: File;const Buf;Count: var Result: LongInt) procedure BlockWrite(var f: File;const Buf;Count: var Result: Cardinal) procedure BlockWrite(var f: File;const Buf;Count: procedure BlockWrite(var f: File;const Buf;Count: var Result: Integer) procedure BlockWrite(var f: File;const Buf;Count: Visibility: default Description: BlockWrite writes count records from buffer to the le F.A record is a block of bytes with size specied by the Rewrite (1385) or Reset (1384) statement. If the records couldnt be written to disk, a run-time error is generated. This behavior can be controlled by the {$I} switch. Errors: Depending on the state of the {$I} switch, a runtime error can be generated if there is an error. In the {$I-} state, use IOResult to check for errors. See also: Blockread (1287), Close (1292), Rewrite (1385), Assign (1283)
37.10.25
Break
Synopsis: Exit current loop construct. Declaration: procedure Break Visibility: default
1288
Description: Break jumps to the statement following the end of the current repetitive statement. The code between the Break call and the end of the repetitive statement is skipped. The condition of the repetitive statement is NOT evaluated. This can be used with For, var{repeat} and While statements. Note that while this is a procedure, Break is a reserved word and hence cannot be redened. Errors: None. See also: Continue (1299), Exit (1312) Listing: ./refex/ex87.pp
Program Example87 ; { Program t o demonstrate t h e Break f u n c t i o n . } Var I : l o n g i n t ; begin I :=0; While I <10 Do begin Inc ( I ) ; I f I >5 Then Break ; Writeln ( i ) ; end ; I :=0; Repeat Inc ( I ) ; I f I >5 Then Break ; Writeln ( i ) ; U n t i l I >=10; For I : = 1 to 1 0 do begin I f I >5 Then Break ; Writeln ( i ) ; end ; end .
37.10.26
BsfByte
Synopsis: Return the position of the rightmost set bit in an 8-bit value Declaration: function BsfByte(const AValue: Byte) : Byte Visibility: default Description: BsfByte scans the byte AValue, starting at position 0 (rightmost position) and returns the index of the rst set bit. The position is measured from the 0-th, rightmost bit. See also: BsrByte (1290), BsfWord (1290), BsfDWord (1290), BsfQWord (1290)
1289
37.10.27
BsfDWord
Synopsis: Return the position of the rightmost set bit in a 32-bit value Declaration: function BsfDWord(const AValue: DWord) : Cardinal Visibility: default Description: BsfDWord scans the DWord AValue, starting at the leftmost position and working towards position 0, and returns the index of the rst set bit. The position is measured from the 0-th, rightmost bit. See also: BsfByte (1289), BsfWord (1290), BsrDWord (1291), BsfQWord (1290)
37.10.28
BsfQWord
Synopsis: Return the position of the rightmost set bit in a 64-bit value Declaration: function BsfQWord(const AValue: QWord) : Cardinal Visibility: default Description: BsfQWord scans the QWord AValue, starting at the leftmost position and working towards position 0, and returns the index of the rst set bit. The position is measured from the 0-th, rightmost bit. See also: BsfByte (1289), BsfWord (1290), BsfDWord (1290), BsrQWord (1291)
37.10.29
BsfWord
Synopsis: Return the position of the rightmost set bit in a 16-bit value Declaration: function BsfWord(const AValue: Word) : Cardinal Visibility: default Description: BsfWord scans the word AValue, starting at the leftmost position and working towards position 0, and returns the index of the rst set bit. The position is measured from the 0-th, rightmost bit. See also: BsfByte (1289), BsrWord (1291), BsfDWord (1290), BsfQWord (1290)
37.10.30
BsrByte
Synopsis: Return the position of the leftmost set bit in an 8-bit value Declaration: function BsrByte(const AValue: Byte) : Byte Visibility: default Description: BsfByte scans the byte AValue, starting at the leftmost position and working towards position 0, and returns the index of the rst set bit. The position is measured from the 0-th, rightmost bit. See also: BsfByte (1289), BsrWord (1291), BsrDWord (1291), BsrQWord (1291)
1290
37.10.31
BsrDWord
Synopsis: Return the position of the leftmost set bit in a 32-bit value Declaration: function BsrDWord(const AValue: DWord) : Cardinal Visibility: default Description: BsrDWord scans the DWord AValue, starting at the leftmost position and working towards position 0, and returns the index of the rst set bit. The position is measured from the 0-th, rightmost bit. See also: BsrByte (1290), BsrWord (1291), BsfDWord (1290), BsrQWord (1291)
37.10.32
BsrQWord
Synopsis: Return the position of the leftmost set bit in a 64-bit value Declaration: function BsrQWord(const AValue: QWord) : Cardinal Visibility: default Description: BsfQWord scans the QWord AValue, starting at the leftmost position and working towards position 0, and returns the index of the rst set bit. The position is measured from the 0-th, rightmost bit. See also: BsfByte (1289), BsfWord (1290), BsfDWord (1290), BsrQWord (1291)
37.10.33
BsrWord
Synopsis: Return the position of the leftmost set bit in a 16-bit value Declaration: function BsrWord(const AValue: Word) : Cardinal Visibility: default Description: BsrWord scans the word AValue, starting at the leftmost position and working towards position 0, and returns the index of the rst set bit. The position is measured from the 0-th, rightmost bit. See also: BsrByte (1290), BsfWord (1290), BsrDWord (1291), BsrQWord (1291)
37.10.34
chdir
Overload
Synopsis: Change current working directory. Declaration: procedure chdir(const s: string); Visibility: default Description: Chdir changes the working directory of the process to S. Errors: Depending on the state of the {$I} switch, a runtime error can be generated if there is an error. In the {$I-} state, use IOResult to check for errors. See also: Mkdir (1345), Rmdir (1386) Listing: ./refex/ex7.pp
1291
Program Example7 ; { Program t o demonstrate t h e ChDir f u n c t i o n . } begin { $I} ChDir ( ParamStr ( 1 ) ) ; i f I O r e s u l t < >0 then W r i t e l n ( Cannot change t o d i r e c t o r y : end .
, paramstr ( 1 ) ) ;
37.10.35
chr
Synopsis: Convert byte value to character value Declaration: function chr(b: Byte) : Char Visibility: default Description: Chr returns the character which has ASCII value X. Historical note: Originally, Pascal did not have typecasts and chr was a necessary function in order to do certain operations on ASCII values of characters. With the arrival of typecasting a generic approach became possible, making chr mostly obselete. However, chr is not considered deprecated and remains in wide use today. Errors: None. See also: Ord (1373), Str (1404) Listing: ./refex/ex8.pp
Program Example8 ; { Program t o demonstrate t h e Chr f u n c t i o n . } begin Write ( chr ( 1 0 ) , chr ( 1 3 ) ) ; { The same e f f e c t as W r i t e l n ; } end .
37.10.36
Synopsis: Close a le
Close
Declaration: procedure Close(var f: File) procedure Close(var t: Text) Visibility: default Description: Close ushes the buffer of the le F and closes F. After a call to Close, data can no longer be read from or written to F. To reopen a le closed with Close, it isnt necessary to assign the le again. A call to Reset (1384) or Rewrite (1385) is sufcient. Errors: Depending on the state of the {$I} switch, a runtime error can be generated if there is an error. In the {$I-} state, use IOResult to check for errors. 1292
See also: Assign (1283), Reset (1384), Rewrite (1385), Flush (1318) Listing: ./refex/ex9.pp
Program Example9 ; { Program t o demonstrate t h e Close f u n c t i o n . } Var F : t e x t ; begin Assign ( f , Test . t x t ) ; ReWrite ( F ) ; W r i t e l n ( F , Some t e x t w r i t t e n t o Test . t x t ) ; c l o s e ( f ) ; { Flushes c o n t e n t s o f b u f f e r t o d i s k , c l o s e s t h e f i l e . O m i t t i n g t h i s may cause data NOT t o be w r i t t e n t o d i s k . } end .
37.10.37
CloseThread
Synopsis: Close a thread and free up resources used by the thread Declaration: function CloseThread(threadHandle: TThreadID) : DWord Visibility: default Description: CloseThread must be called on any thread started with BeginThread (1286). It must be called after the thread has ended (either by exiting the thread function or after calling EndThread (1306)). Errors: If no threadmanager is installed, an exception may be raised or runtime error 232 may occur if no exceptions are used. See also: BeginThread (1286), EndThread (1306)
37.10.38
CompareByte
Synopsis: Compare 2 memory buffers byte per byte Declaration: function CompareByte(const buf1;const buf2;len: SizeInt) : SizeInt Visibility: default Description: CompareByte compares two memory regions buf1,buf2 on a byte-per-byte basis for a total of len bytes. The function returns one of the following values: less than 0if buf1 and buf2 contain different bytes in the rst len bytes, and the rst such byte is smaller in buf1 than the byte at the same position in buf2. 0if the rst len bytes in buf1 and buf2 are equal. greater than 0if buf1 and buf2 contain different bytes in the rst len bytes, and the rst such byte is larger in buf1 than the byte at the same position in buf2. Errors: None. See also: CompareChar (1294), CompareChar0 (1296), CompareWord (1297), CompareDWord (1296) 1293
Listing: ./refex/ex99.pp
Program Example99 ; { Program t o demonstrate t h e CompareByte f u n c t i o n . } Const ArraySize = 100; H a l f A r r a y S i z e = A r r a y S i z e Div 2 ; Var Buf1 , Buf2 : Array [ 1 . . A r r a y S i z e ] of b y t e ; I : longint ; Procedure CheckPos ( Len : L o n g i n t ) ; Begin Write ( F i r s t , Len , p o s i t i o n s are ) ; i f CompareByte ( Buf1 , Buf2 , Len ) < >0 then Write ( NOT ) ; W r i t e l n ( equal ) ; end ;
begin For I : = 1 to A r r a y S i z e do begin Buf1 [ i ] : = I ; I f I <= H a l f A r r a y S i z e Then Buf2 [ I ] : = I else Buf2 [ i ] : = H a l f A r r a y S i z e I ; end ; CheckPos ( H a l f A r r a y S i z e div 2 ) ; CheckPos ( H a l f A r r a y S i z e ) ; CheckPos ( H a l f A r r a y S i z e + 1 ) ; CheckPos ( H a l f A r r a y S i z e + H a l f A r r a y S i z e Div 2 ) ; end .
37.10.39
CompareChar
Synopsis: ompare 2 memory buffers character per character Declaration: function CompareChar(const buf1;const buf2;len: SizeInt) : SizeInt Visibility: default Description: CompareChar compares two memory regions buf1,buf2 on a character-per-character basis for a total of len characters. The CompareChar0 variant compares len bytes, or until a zero character is found. The function returns one of the following values: -1if buf1 and buf2 contain different characters in the rst len positions, and the rst such character is smaller in buf1 than the character at the same position in buf2. 0if the rst len characters in buf1 and buf2 are equal.
1294
1if buf1 and buf2 contain different characters in the rst len positions, and the rst such character is larger in buf1 than the character at the same position in buf2. Errors: None. See also: CompareByte (1293), CompareChar0 (1296), CompareWord (1297), CompareDWord (1296) Listing: ./refex/ex100.pp
Program Example100 ; { Program t o demonstrate t h e CompareChar f u n c t i o n . } Const ArraySize = 100; H a l f A r r a y S i z e = A r r a y S i z e Div 2 ; Var Buf1 , Buf2 : Array [ 1 . . A r r a y S i z e ] of char ; I : longint ; Procedure CheckPos ( Len : L o n g i n t ) ; Begin Write ( F i r s t , Len , c h a r a c t e r s are ) ; i f CompareChar ( Buf1 , Buf2 , Len ) < >0 then Write ( NOT ) ; W r i t e l n ( equal ) ; end ; Procedure CheckNullPos ( Len : L o n g i n t ) ; Begin Write ( F i r s t , Len , nonn u l l c h a r a c t e r s are ) ; i f CompareChar0 ( Buf1 , Buf2 , Len ) < >0 then Write ( NOT ) ; W r i t e l n ( equal ) ; end ; begin For I : = 1 to A r r a y S i z e do begin Buf1 [ i ] : = chr ( I ) ; I f I <= H a l f A r r a y S i z e Then Buf2 [ I ] : = chr ( I ) else Buf2 [ i ] : = chr ( H a l f A r r a y S i z e I ) ; end ; CheckPos ( H a l f A r r a y S i z e div 2 ) ; CheckPos ( H a l f A r r a y S i z e ) ; CheckPos ( H a l f A r r a y S i z e + 1 ) ; CheckPos ( H a l f A r r a y S i z e + H a l f A r r a y S i z e Div 2 ) ; For I : = 1 to 4 do begin buf1 [ Random( A r r a y S i z e ) + 1 ] : = Chr ( 0 ) ; buf2 [ Random( A r r a y S i z e ) + 1 ] : = Chr ( 0 ) ; end ; Randomize ; CheckNullPos ( H a l f A r r a y S i z e div 2 ) ;
1295
37.10.40
CompareChar0
Synopsis: Compare two buffers character by character till a null-character is reached. Declaration: function CompareChar0(const buf1;const buf2;len: SizeInt) : SizeInt Visibility: default Description: CompareChar0 compares 2 buffers buf1 and buf2 for a maximum length of len or till a null character is reached in either buffer. The result depends on the contents of the buffers: < 0If buf1 contains a character less than the corresponding character in buf2. 0If both buffers are equal > 0If buf1 contains a character greater than the corresponding character in buf2. Errors: None. See also: CompareByte (1293), CompareChar (1294), CompareDWord (1296), CompareWord (1297)
37.10.41
CompareDWord
Synopsis: Compare 2 memory buffers DWord per DWord Declaration: function CompareDWord(const buf1;const buf2;len: SizeInt) : SizeInt Visibility: default Description: CompareDWord compares two memory regions buf1,buf2 on a DWord-per-DWord basis for a total of len DWords. (A DWord is 4 bytes). The function returns one of the following values: -1if buf1 and buf2 contain different DWords in the rst len DWords, and the rst such DWord is smaller in buf1 than the DWord at the same position in buf2. 0if the rst len DWords in buf1 and buf2 are equal. 1if buf1 and buf2 contain different DWords in the rst len DWords, and the rst such DWord is larger in buf1 than the DWord at the same position in buf2. Errors: None. See also: CompareChar (1294), CompareByte (1293), CompareWord (1297) Listing: ./refex/ex101.pp
Program Example101 ; { Program t o demonstrate t h e CompareDWord f u n c t i o n . } Const ArraySize = 100; H a l f A r r a y S i z e = A r r a y S i z e Div 2 ;
1296
Var Buf1 , Buf2 : Array [ 1 . . A r r a y S i z e ] of Dword ; I : longint ; Procedure CheckPos ( Len : L o n g i n t ) ; Begin Write ( F i r s t , Len , DWords are ) ; i f CompareDWord ( Buf1 , Buf2 , Len ) < >0 then Write ( NOT ) ; W r i t e l n ( equal ) ; end ;
begin For I : = 1 to A r r a y S i z e do begin Buf1 [ i ] : = I ; I f I <= H a l f A r r a y S i z e Then Buf2 [ I ] : = I else Buf2 [ i ] : = H a l f A r r a y S i z e I ; end ; CheckPos ( H a l f A r r a y S i z e div 2 ) ; CheckPos ( H a l f A r r a y S i z e ) ; CheckPos ( H a l f A r r a y S i z e + 1 ) ; CheckPos ( H a l f A r r a y S i z e + H a l f A r r a y S i z e Div 2 ) ; end .
37.10.42
CompareWord
Synopsis: Compare 2 memory buffers word per word Declaration: function CompareWord(const buf1;const buf2;len: SizeInt) : SizeInt Visibility: default Description: CompareWord compares two memory regions buf1,buf2 on a Word-per-Word basis for a total of len Words. (A Word is 2 bytes). The function returns one of the following values: -1if buf1 and buf2 contain different Words in the rst len Words, and the rst such Word is smaller in buf1 than the Word at the same position in buf2. 0if the rst len Words in buf1 and buf2 are equal. 1if buf1 and buf2 contain different Words in the rst len Words, and the rst such Word is larger in buf1 than the Word at the same position in buf2. Errors: None. See also: CompareChar (1294), CompareByte (1293), CompareDWord (1296) Listing: ./refex/ex102.pp
1297
Program Example102 ; { Program t o demonstrate t h e CompareWord f u n c t i o n . } Const ArraySize = 100; H a l f A r r a y S i z e = A r r a y S i z e Div 2 ; Var Buf1 , Buf2 : Array [ 1 . . A r r a y S i z e ] of Word ; I : longint ; Procedure CheckPos ( Len : L o n g i n t ) ; Begin Write ( F i r s t , Len , words are ) ; i f CompareWord ( Buf1 , Buf2 , Len ) < >0 then Write ( NOT ) ; W r i t e l n ( equal ) ; end ;
begin For I : = 1 to A r r a y S i z e do begin Buf1 [ i ] : = I ; I f I <= H a l f A r r a y S i z e Then Buf2 [ I ] : = I else Buf2 [ i ] : = H a l f A r r a y S i z e I ; end ; CheckPos ( H a l f A r r a y S i z e div 2 ) ; CheckPos ( H a l f A r r a y S i z e ) ; CheckPos ( H a l f A r r a y S i z e + 1 ) ; CheckPos ( H a l f A r r a y S i z e + H a l f A r r a y S i z e Div 2 ) ; end .
37.10.43
Concat
Synopsis: Append one string to another. Declaration: function Concat(const S1: string;const S2: string;const S3: string; const Sn: string) : string Visibility: default Description: Concat concatenates the strings S1,S2 etc. to one long string. The resulting string is truncated at a length of 255 bytes. The same operation can be performed with the + operation. Errors: None. See also: Copy (1300), Delete (1303), Insert (1335), Pos (1376), Length (1340) Listing: ./refex/ex10.pp
Program Example10 ;
1298
{ Program t o demonstrate t h e Concat f u n c t i o n . } Var S : String ; begin S: = Concat ( T h i s can be done , E a s i e r , w i t h t h e + o p e r a t o r ! ) ; end .
37.10.44
Continue
Synopsis: Continue with next loop cycle. Declaration: procedure Continue Visibility: default Description: Continue jumps to the end of the current repetitive statement. The code between the Continue call and the end of the repetitive statement is skipped. The condition of the repetitive statement is then checked again. This can be used with For, repeat and While statements. Note that while this is a procedure, Continue is a reserved word and hence cannot be redened. Errors: None. See also: Break (1288), Exit (1312) Listing: ./refex/ex86.pp
Program Example86 ; { Program t o demonstrate t h e Continue f u n c t i o n . } Var I : l o n g i n t ; begin I :=0; While I <10 Do begin Inc ( I ) ; I f I <5 Then Continue ; Writeln ( i ) ; end ; I :=0; Repeat Inc ( I ) ; I f I <5 Then Continue ; Writeln ( i ) ; U n t i l I >=10; For I : = 1 to 1 0 do begin I f I <5 Then Continue ; Writeln ( i ) ; end ; end .
1299
37.10.45
Copy
Synopsis: Copy part of a string. Declaration: function Copy(S: AStringType;Index: Integer;Count: Integer) : string function Copy(A: DynArrayType;Index: Integer;Count: Integer) : DynArray Visibility: default Description: Copy returns a string which is a copy if the Count characters in S, starting at position Index. If Count is larger than the length of the string S, the result is truncated. If Index is larger than the length of the string S, then an empty string is returned. Index is 1-based. For dynamical arrays, Copy returns a new dynamical array of the same type as the original one, and copies Count elements from the old array, starting at position Index. Errors: None. See also: Delete (1303), Insert (1335), Pos (1376) Listing: ./refex/ex11.pp
Program Example11 ; { Program t o demonstrate t h e Copy f u n c t i o n . } Var S , T : S t r i n g ; begin T : = 1234567 ; S: =Copy ( T , 1 , 2 ) ; S: =Copy ( T , 4 , 2 ) ; S: =Copy ( T , 4 , 8 ) ; end .
{ S: = 12 } { S: = 45 } { S: = 4 5 6 7 }
37.10.46
cos
Synopsis: Calculate cosine of angle Declaration: function cos(d: ValReal) : ValReal Visibility: default Description: Cos returns the cosine of X, where X is an angle, in radians. If the absolute value of the argument is larger than 263, then the result is undened. Errors: None. See also: Arctan (1282), Sin (1400) Listing: ./refex/ex12.pp
Program Example12 ; { Program t o demonstrate t h e Cos f u n c t i o n . } Var R : Real ; begin
1300
{ R:= 1 } { R: = 0 } { R: = 1 }
37.10.47
Cseg
Synopsis: Return code segment Declaration: function Cseg : Word Visibility: default Description: CSeg returns the Code segment register. In Free Pascal, it returns always a zero, since Free Pascal is a 32/64 bit compiler. Errors: None. See also: DSeg (1305), Seg (1394), Ofs (1348), Ptr (1377) Listing: ./refex/ex13.pp
Program Example13 ; { Program t o demonstrate t h e CSeg f u n c t i o n . } var W : word ; begin W: =CSeg ; {W: = 0 , p r o v i d e d f o r c o m p a t i b i l i t y , FPC i s 3 2 b i t . } end .
37.10.48
Dec
Synopsis: Decrease value of variable Declaration: procedure Dec(var X: TOrdinal) procedure Dec(var X: TOrdinal;Decrement: TOrdinal) Visibility: default Description: Dec decreases the value of X with Decrement. If Decrement isnt specied, then 1 is taken as a default. Errors: A range check can occur, or an underow error, if an attempt it made to decrease X below its minimum value. See also: Inc (1329) Listing: ./refex/ex14.pp
Program Example14 ; { Program t o demonstrate t h e Dec f u n c t i o n . } Var
1301
I L W B Si
: : : : :
begin I :=1; L:=2; W: = 3 ; B: = 4 ; Si : = 5 ; Dec ( i ) ; Dec ( L , 2 ) ; Dec (W, 2 ) ; Dec ( B, 2 ) ; Dec ( Si , 0 ) ; end .
{ { { { {
i :=0 L:=0 W: = 1 B: = 6 Si : = 5
} } } } }
37.10.49
DefaultAnsi2UnicodeMove
Synopsis: Standard widestring manager callback Declaration: procedure DefaultAnsi2UnicodeMove(source: PChar;var dest: unicodestring; len: SizeInt) Visibility: default Description: DefaultAnsi2UnicodeMove is the standard callback used for the widestring manager when an ansistring must be converted to a unicodestring. It simply copies over all characters from the ansistring to the unicodestring, no conversion whatsoever is performed.
37.10.50
DefaultAnsi2WideMove
Synopsis: Standard implementation of Ansi to Widestring conversion routine Declaration: procedure DefaultAnsi2WideMove(source: PChar;var dest: widestring; len: SizeInt) Visibility: default Description: DefaultAnsi2WideMove simply copies each character of the null-terminated ansi-string Source to the corresponding WideChar in Dest. At most Len characters will be copied. Errors: None. See also: DefaultWide2AnsiMove (1303)
37.10.51
DefaultUnicode2AnsiMove
Synopsis: Standard widestring manager callback Declaration: procedure DefaultUnicode2AnsiMove(source: PUnicodeChar; var dest: ansistring;len: SizeInt) Visibility: default
1302
Description: DefaultUnicode2AnsiMove is the standard callback used for the widestring manager when a unicode string must be converted to an ansistring. It replaces all words with value < 256 with their value as ASCII code. Errors: None. See also: WidestringManager (1278)
37.10.52
DefaultWide2AnsiMove
Synopsis: Standard implementation of Widestring to Ansi conversion routine Declaration: procedure DefaultWide2AnsiMove(source: PWideChar;var dest: ansistring; len: SizeInt) Visibility: default Description: DefaultWide2AnsiMove simply copies each character from Source having an ordinal value of less than 255 to the corresponding character in Dest. Characters having an ordinal valuelarger than 255 will be replaced by question marks. At most Len characters will be copied. Errors: None. See also: DefaultAnsi2WideMove (1302)
37.10.53
Declaration: procedure procedure procedure procedure Visibility: default
Delete
Delete(var Delete(var Delete(var Delete(var s: S: S: S: shortstring;index: SizeInt;count: SizeInt) AnsiString;Index: SizeInt;Size: SizeInt) UnicodeString;Index: SizeInt;Size: SizeInt) WideString;Index: SizeInt;Size: SizeInt)
Description: Delete removes Count characters from string S, starting at position Index. All characters after the deleted characters are shifted Count positions to the left, and the length of the string is adjusted. Errors: Shortstring variants third parameter is called Count, in other overloaded variants it is called Index See also: Copy (1300), Pos (1376), Insert (1335) Listing: ./refex/ex15.pp
Program Example15 ; { Program t o demonstrate t h e D e l e t e f u n c t i o n . } Var S : String ; begin S: = T h i s i s n o t easy ! ; Delete ( S , 9 , 4 ) ; { S : = T h i s i s easy ! } end .
1303
37.10.54
Dispose
Synopsis: Free dynamically allocated memory Declaration: procedure Dispose(P: Pointer) procedure Dispose(P: TypedPointer;Des: TProcedure) Visibility: default Description: The rst form Dispose releases the memory allocated with a call to New (1346). The pointer P must be typed. The released memory is returned to the heap. The second form of Dispose accepts as a rst parameter a pointer to an object type, and as a second parameter the name of a destructor of this object. The destructor will be called, and the memory allocated for the object will be freed. Errors: An runtime error will occur if the pointer doesnt point to a location in the heap. See also: New (1346), Getmem (1322), Freemem (1320) Listing: ./refex/ex16.pp
Program Example16 ; { Program t o demonstrate t h e Dispose and New f u n c t i o n s . } Type SS = S t r i n g [ 2 0 ] ; AnObj = Object I : integer ; Constructor I n i t ; Destructor Done ; end ; Var P : ^ SS ; T : ^ AnObj ; Constructor Anobj . I n i t ; begin W r i t e l n ( I n i t i a l i z i n g an i n s t a n c e o f AnObj ! ) ; end ; Destructor AnObj . Done ; begin W r i t e l n ( D e s t r o y i n g an i n s t a n c e o f AnObj ! ) ; end ; begin New ( P ) ; P^ : = H e l l o , World ! ; Dispose ( P ) ; { P i s u nd e f i ne d from here on ! } New( T , I n i t ) ; T^. i :=0; Dispose ( T , Done ) ; end .
1304
37.10.55
DoneCriticalsection
Synopsis: Clean up a critical section. Declaration: procedure DoneCriticalsection(var cs: TRTLCriticalSection) Visibility: default Description: DoneCriticalsection cleans up the critical section CS. After a call to DoneCriticalsection, the critical section can no longer be used with EnterCriticalsection (1307) or LeaveCriticalsection (1340), unless it is again initialized with InitCriticalSection (1334) See also: InitCriticalsection (1334), EnterCriticalsection (1307), LeaveCriticalsection (1340)
37.10.56
DoneThread
Synopsis: End the current thread Declaration: procedure DoneThread Visibility: default Description: DoneThread should be used to end the current thread. It performs the necessary housekeeping before actually ending the thread. Using the operating system calls to end the thread may result in data corruption or memory leaks. See also: BeginThread (1286)
37.10.57
Dseg
Synopsis: Return data segment Declaration: function Dseg : Word Visibility: default Description: DSeg returns the data segment register. In Free Pascal, it returns always a zero, since Free Pascal is a 32/64 bit compiler. Errors: None. See also: CSeg (1301), Seg (1394), Ofs (1348), Ptr (1377) Listing: ./refex/ex17.pp
Program Example17 ; { Program t o demonstrate t h e DSeg f u n c t i o n . } Var W : Word ; begin W: =DSeg ; {W: = 0 , T h i s f u n c t i o n i s p r o v i d e d f o r c o m p a t i b i l i t y , FPC i s a 3 2 b i t c o m i l e r . } end .
1305
37.10.58
DumpExceptionBackTrace
Synopsis: Create backtrace Declaration: procedure DumpExceptionBackTrace(var f: text) Visibility: default Description: DumpExceptionBackTrace writes a backtrace of the current exception to the le f. If no exception is currently being raised, nothing is written. As much frames as available are written. If debug info is available, then le names and line numbers will be written as well. Errors: No check is done to see whether f is opened for writing. See also: dump_stack (1306)
37.10.59
Dump_Stack
Synopsis: Dump stack to the given text le. Declaration: procedure Dump_Stack(var f: text;bp: pointer) Visibility: default Description: Dump_Stack prints a stack dump to the le f, with base frame pointer bp Errors: The le f must be opened for writing or an error will occur. See also: get_caller_addr (1325), get_caller_frame (1325), get_frame (1326)
37.10.60
DynArraySetLength
Synopsis: Set the length of a dynamic array Declaration: procedure DynArraySetLength(var a: Pointer;typeInfo: Pointer; dimCnt: SizeInt;lengthVec: PSizeInt) Visibility: default Description: DynArraySetLength sets the length of the dynamical array a to the rst dimCnt lengths specied in the array lengthVec. The dynamical array type is described in typeInfo which points to a record of type TDynArrayTypeInfo (1263) It should never be necessary to call this function directly, the standard SetLength (1396) function should be used instead. Errors: If an invalid pointer is specied, an error may occur. See also: SetLength (1396), tdynarraytypeinfo (1263)
37.10.61
EndThread
Synopsis: End the current thread. Declaration: procedure EndThread(ExitCode: DWord) procedure EndThread Visibility: default
1306
Description: EndThread ends the current thread. If ExitCode is supplied, it is returned as the exit code for the thread to a function waiting for the thread to terminate (WaitForThreadTerminate (1421)). If it is omitted, zero is used. This function does not return. See also: WaitForThreadTerminate (1421), BeginThread (1286)
37.10.62
EnterCriticalsection
Synopsis: Enter a critical section Declaration: procedure EnterCriticalsection(var cs: TRTLCriticalSection) Visibility: default Description: EnterCriticalSection will suspend the current thread if another thread has currently entered the critical section. When the other thread has left the critical section (through LeaveCriticalSection (1340)), the current thread resumes execution. The result is that only 1 thread is executing code which is protected by a EnterCriticalsection and LeaveCriticalSection pair. The critical section must have been initialized with InitCriticalSection (1334) prior to a call to EnterCriticalsection. A call to EnterCriticalsection must always be matched by a call to LeaveCriticalSection (1340). To avoid problems, it is best to include the code to be execute in a try...finally block, as follows: EnterCriticalSection(Section); Try // Code to be protected goes here. Finally LeaveCriticalSection(Section); end; For performance reasons it is best to limit the code between the entering and leaving of a critical section as short as possible. See also: InitCriticalsection (1334), DoneCriticalsection (1305), LeaveCriticalsection (1340)
37.10.63
EnumResourceLanguages
Synopsis: Enumerate available languages for a resource of given type and name Declaration: function EnumResourceLanguages(ModuleHandle: TFPResourceHMODULE; ResourceType: PChar;ResourceName: PChar; EnumFunc: EnumResLangProc;lParam: PtrInt) : LongBool Visibility: default Description: EnumResourceLanguages enumerates the available languages for a resource of given ResourceName and type ResourceType in the module ModuleHandle. For each language availanle, it calls EnumFunc and passes it ModuleHandle, the type of the resource ResourceType, the name of the resource ResourceName, the language ID, and lParam. It returns False if no resources are available for the specied resource type and module, or True if there are resources available. Errors: None. See also: EnumResourceTypes (1308), EnumResourceNames (1308), EnumResourceLanguages (1307) 1307
37.10.64
EnumResourceNames
Synopsis: Enumerate available resource names for a specied resource type Declaration: function EnumResourceNames(ModuleHandle: TFPResourceHMODULE; ResourceType: PChar;EnumFunc: EnumResNameProc; lParam: PtrInt) : LongBool Visibility: default Description: EnumResourceNames enumerates the names of all resources of type ResourceType in the module ModuleHandle. For each resource available it calls EnumFunc and passes it ModuleHandle, the type of the resource ResourceType, the name of the resource, and lParam. It returns False if no resources are available for the specied resource type and module, or True if there are resources available. Errors: None. See also: EnumResourceTypes (1308), EnumResourceLanguages (1307)
37.10.65
EnumResourceTypes
Synopsis: Enumerate available resource types Declaration: function EnumResourceTypes(ModuleHandle: TFPResourceHMODULE; EnumFunc: EnumResTypeProc;lParam: PtrInt) : LongBool Visibility: default Description: EnumResourceTypes enumerates the types of all resources in the module ModuleHandle. For each resource available it calls EnumFunc and passes it ModuleHandle, the type of the resource, and lParam. It returns False if no resources are available for the specied module, or True if there are resources available. Errors: None. See also: EnumResourceNames (1308), EnumResourceLanguages (1307)
37.10.66
EOF
Synopsis: Check for end of le Declaration: function EOF(var f: File) : Boolean function EOF(var t: Text) : Boolean function EOF : Boolean Visibility: default Description: Eof returns True if the le-pointer has reached the end of the le, or if the le is empty. In all other cases Eof returns False. If no le F is specied, standard input is assumed. Note that calling this function may cause your program to wait: to determine whether you are at EOF, it is necessary to read data. If the le descriptor is not a real le (for instance for standard input or sockets) , then this call may seem to hang the program while it is waiting for data to appear or for the le descriptor to be closed. Errors: Depending on the state of the {$I} switch, a runtime error can be generated if there is an error. In the {$I-} state, use IOResult to check for errors. 1308
See also: Eoln (1309), Assign (1283), Reset (1384), Rewrite (1385) Listing: ./refex/ex18.pp
Program Example18 ; { Program t o demonstrate t h e Eof f u n c t i o n . } Var T1 , T2 : t e x t ; C : Char ; begin { Set f i l e t o read from . Empty means from s t a n d a r d i n p u t . } a s s i g n ( t1 , paramstr ( 1 ) ) ; reset ( t1 ) ; { Set f i l e t o w r i t e t o . Empty means t o s t a n d a r d o u t p u t . } a s s i g n ( t2 , paramstr ( 2 ) ) ; rewrite ( t2 ) ; While not eof ( t 1 ) do begin read ( t1 ,C ) ; w r i t e ( t2 ,C ) ; end ; Close ( t 1 ) ; Close ( t 2 ) ; end .
37.10.67
EOLn
Synopsis: Check for end of line Declaration: function EOLn(var t: Text) : Boolean function EOLn : Boolean Visibility: default Description: Eof returns True if the le pointer has reached the end of a line, which is demarcated by a line-feed character (ASCII value 10), or if the end of the le is reached. In all other cases Eof returns False. If no le F is specied, standard input is assumed. It can only be used on les of type Text. Errors: None. See also: Eof (1308), Assign (1283), Reset (1384), Rewrite (1385) Listing: ./refex/ex19.pp
Program Example19 ; { Program t o demonstrate t h e Eoln f u n c t i o n . } begin { T h i s program w a i t s f o r keyboard i n p u t . } { I t w i l l p r i n t True when an empty l i n e i s p u t i n , and f a l s e when you t y p e a nonempty l i n e . I t w i l l o n l y s t o p when you press e n t e r . } While not Eoln do W r i t e l n ( eoln ) ; end .
1309
37.10.68
Erase
Synopsis: Delete a le from disk Declaration: procedure Erase(var f: File) procedure Erase(var t: Text) Visibility: default Description: Erase removes an unopened le from disk. The le should be assigned with Assign, but not opened with Reset or Rewrite Errors: Depending on the state of the {$I} switch, a runtime error can be generated if there is an error. In the {$I-} state, use IOResult to check for errors. See also: Assign (1283) Listing: ./refex/ex20.pp
Program Example20 ; { Program t o demonstrate t h e Erase f u n c t i o n . } Var F : Text ; begin { Create a f i l e w i t h a l i n e o f t e x t i n i t } Assign ( F , t e s t . t x t ) ; Rewrite ( F ) ; W r i t e l n ( F , Try and f i n d t h i s when I m f i n i s h e d ! ) ; close ( f ) ; { Now remove t h e f i l e } Erase ( f ) ; end .
37.10.69
Error
Synopsis: Generate run-time error Declaration: procedure Error(RunTimeError: TRuntimeError) Visibility: default Description: Error generates a run-time error with an exit code corresponding to RunTimeError. This function is implemented for Delphi compatibility, and is not used by the Free Pascal Run-Time Library. See also: RunError (1391), Halt (1326)
37.10.70
Exclude
Synopsis: Exlude element from a set if it is present. Declaration: procedure Exclude(var S: TSetType;E: TSetElement) Visibility: default Description: Exclude removes E from the set S if it is included inthe set. E should be of the same type as the base type of the set S. Thus, the two following statements do the same thing: 1310
S:=S-[E]; Exclude(S,E); Errors: If the type of the element E is not equal to the base type of the set S, the compiler will generate an error. See also: Include (1330) Listing: ./refex/ex111.pp
program Example111 ; { Program t o demonstrate t h e I n c l u d e / Exclude f u n c t i o n s } Type TEnumA = ( aOne , aTwo , aThree ) ; TEnumAs = Set of TEnumA ; Var SA : TEnumAs ; Procedure P r i n t S e t (S : TEnumAs ) ; var B : Boolean ; procedure DoEl (A : TEnumA ; Desc : S t r i n g ) ; begin I f A i n S then begin I f B then Write ( , ) ; B: = True ; Write ( Desc ) ; end ; end ; begin Write ( [ ) ; B: = False ; DoEl ( aOne , aOne ) ; DoEl ( aTwo , aTwo ) ; DoEl ( aThree , aThree ) ; Writeln ( ] ) end ; begin SA : = [ ] ; Include (SA, aOne ) ; P r i n t S e t (SA ) ; Include (SA, aThree ) ; P r i n t S e t (SA ) ; Exclude (SA, aOne ) ; P r i n t S e t (SA ) ; Exclude (SA, aTwo ) ; P r i n t S e t (SA ) ; Exclude (SA, aThree ) ;
1311
P r i n t S e t (SA ) ; end .
37.10.71
Exit
Synopsis: Exit current subroutine. Declaration: procedure Exit(const X: TAnyType) procedure Exit Visibility: default Description: Exit exits the current subroutine, and returns control to the calling routine. If invoked in the main program routine, exit stops the program. The optional argument X allows to specify a return value, in the case Exit is invoked in a function. The function result will then be equal to X. Errors: None. See also: Halt (1326) Listing: ./refex/ex21.pp
Program Example21 ; { Program t o demonstrate t h e E x i t f u n c t i o n . } Procedure DoAnExit ( Yes : Boolean ) ; { T h i s procedure demonstrates t h e normal E x i t } begin W r i t e l n ( H e l l o from DoAnExit ! ) ; I f Yes then begin Writeln ( B a i l i n g out e a r l y . ) ; exit ; end ; W r i t e l n ( C o n t i n u i n g t o t h e end . ) ; end ; Function P o s i t i v e ( Which : I n t e g e r ) : Boolean ; { T h i s f u n c t i o n demonstrates t h e e x t r a FPC f e a t u r e o f E x i t : You can s p e c i f y a r e t u r n v a l u e f o r t h e f u n c t i o n } begin i f Which >0 then e x i t ( True ) else e x i t ( False ) ; end ; begin { T h i s c a l l w i l l go t o t h e end } DoAnExit ( False ) ; { This c a l l w i l l b a i l out e a r l y } DoAnExit ( True ) ; i f P o s i t i v e ( 1 ) then
1312
37.10.72
Synopsis: Exponentiate
exp
Declaration: function exp(d: ValReal) : ValReal Visibility: default Description: Exp returns the exponent of X, i.e. the number e to the power X. Errors: None. See also: Ln (1341), Power (1) Listing: ./refex/ex22.pp
Program Example22 ; { Program t o demonstrate t h e Exp f u n c t i o n . } begin W r i t e l n ( Exp ( 1 ) : 8 : 2 ) ; { Should p r i n t 2 . 7 2 } end .
37.10.73
FilePos
Synopsis: Get position in le Declaration: function FilePos(var f: File) : Int64 Visibility: default Description: Filepos returns the current record position of the le-pointer in le F. It cannot be invoked with a le of type Text. A compiler error will be generated if this is attempted. Errors: Depending on the state of the {$I} switch, a runtime error can be generated if there is an error. In the {$I-} state, use IOResult to check for errors. See also: Filesize (1314) Listing: ./refex/ex23.pp
Program Example23 ; { Program t o demonstrate t h e F i l e P o s f u n c t i o n . } Var F : F i l e of L o n g i n t ; L , FP : l o n g i n t ; begin { F i l l a f i l e w i t h data : Each p o s i t i o n c o n t a i n s t h e p o s i t i o n ! }
1313
Assign ( F , t e s t . tmp ) ; Rewrite ( F ) ; For L : = 0 to 1 0 0 do begin FP: = FilePos ( F ) ; Write ( F , FP ) ; end ; Close ( F ) ; Reset ( F ) ; { I f a l l goes w e l l , n o t h i n g i s d i s p l a y e d here . } While not ( Eof ( F ) ) do begin FP: = FilePos ( F ) ; Read ( F , L ) ; i f L<>FP then W r i t e l n ( Something wrong : Got , l , on pos ,FP ) ; end ; Close ( F ) ; Erase ( f ) ; end .
37.10.74
Synopsis: Size of le
FileSize
Declaration: function FileSize(var f: File) : Int64 Visibility: default Description: Filesize returns the total number of records in le F. It cannot be invoked with a le of type Text. (under linux and unix, this also means that it cannot be invoked on pipes). If F is empty, 0 is returned. Errors: Depending on the state of the {$I} switch, a runtime error can be generated if there is an error. In the {$I-} state, use IOResult to check for errors. See also: Filepos (1313) Listing: ./refex/ex24.pp
Program Example24 ; { Program t o demonstrate t h e F i l e S i z e f u n c t i o n . } Var F : F i l e Of b y t e ; L : F i l e Of L o n g i n t ; begin Assign ( F , paramstr ( 1 ) ) ; Reset ( F ) ; Writeln ( F i l e size i n bytes : , FileSize (F ) ) ; Close ( F ) ; Assign ( L , paramstr ( 1 ) ) ; Reset ( L ) ; Writeln ( F i l e size i n Longints : , FileSize ( L ) ) ; Close ( f ) ; end .
1314
37.10.75
FillByte
Synopsis: Fill memory region with 8-bit pattern Declaration: procedure FillByte(var x;count: SizeInt;value: Byte) Visibility: default Description: FillByte lls the memory starting at X with Count bytes with value equal to Value. This is useful for quickly zeroing out a memory location. When the size of the memory location to be lled out is a multiple of 2 bytes, it is better to use Fillword (1317), and if it is a multiple of 4 bytes it is better to use FillDWord (1316), these routines are optimized for their respective sizes. Errors: No checking on the size of X is done. See also: Fillchar (1315), FillDWord (1316), Fillword (1317), Move (1345) Listing: ./refex/ex103.pp
Program Example103 ; { Program t o demonstrate t h e F i l l B y t e f u n c t i o n . } Var S : S t r i n g [ 1 0 ] ; I : Byte ; begin For i : = 1 0 downto 0 do begin { F i l l S with i bytes } F i l l B y t e ( S , SizeOf (S ) , 3 2 ) ; { Set Length } SetLength ( S , I ) ; Writeln ( s , ) ; end ; end .
37.10.76
FillChar
Synopsis: Fill memory region with certain character Declaration: procedure FillChar(var x;count: SizeInt;Value: Byte) procedure FillChar(var x;count: SizeInt;Value: Boolean) procedure FillChar(var x;count: SizeInt;Value: Char) Visibility: default Description: Fillchar lls the memory starting at X with Count bytes or characters with value equal to Value. Errors: No checking on the size of X is done. See also: Fillword (1317), Move (1345), FillByte (1315), FillDWord (1316) Listing: ./refex/ex25.pp
1315
Program Example25 ; { Program t o demonstrate t h e F i l l C h a r f u n c t i o n . } Var S : S t r i n g [ 1 0 ] ; I : Byte ; begin For i : = 1 0 downto 0 do begin { F i l l S w i t h i spaces } F i l l C h a r ( S , SizeOf (S ) , ) ; { Set Length } SetLength ( S , I ) ; Writeln ( s , ) ; end ; end .
37.10.77
FillDWord
Synopsis: Fill memory region with 32-bit pattern Declaration: procedure FillDWord(var x;count: SizeInt;value: DWord) Visibility: default Description: Fillword lls the memory starting at X with Count DWords with value equal to Value. A DWord is 4 bytes in size. Errors: No checking on the size of X is done. See also: FillByte (1315), Fillchar (1315), Fillword (1317), Move (1345) Listing: ./refex/ex104.pp
Program Example104 ; { Program t o demonstrate t h e F i l l D W o r d f u n c t i o n . } Const ArraySize = 1000; Var S : Array [ 1 . . A r r a y S i z e ] of DWord ; I : longint ; begin F i l l D W o r d ( S , ArraySize , 0 ) ; For I : = 1 to A r r a y S i z e do I f S [ i ] < >0 then W r i t e l n ( P o s i t i o n , i , n o t zeroed o u t ) ; end .
37.10.78
FillQWord
Declaration: procedure FillQWord(var x;count: SizeInt;value: QWord) Visibility: default Description: FillQWord lls the memory location of x with Count times value. The size of the lled memory location is therefor 8*count bytes. Errors: No checks are made to see if X actually has a minimum size of (Count*8) bytes. Therefor, other variables can be overwritten or the memory may be out of the accessible memory for the program. In the latter case a run-error or exception may be triggered. See also: FillChar (1315), FillWord (1317)
37.10.79
FillWord
Synopsis: Fill memory region with 16-bit pattern Declaration: procedure FillWord(var x;count: SizeInt;Value: Word) Visibility: default Description: Fillword lls the memory starting at X with Count words with value equal to Value. A word is 2 bytes in size. Errors: No checking on the size of X is done. See also: Fillchar (1315), Move (1345) Listing: ./refex/ex76.pp
Program Example76 ; { Program t o demonstrate t h e F i l l W o r d f u n c t i o n . } Var W : Array [ 1 . . 1 0 0 ] of Word ; begin { Quick i n i t i a l i z a t i o n o f a r r a y W } F i l l W o r d (W, 1 0 0 , 0 ) ; end .
37.10.80
FindResource
Synopsis: Locate a resource and return a handle to it. Declaration: function FindResource(ModuleHandle: TFPResourceHMODULE; ResourceName: PChar;ResourceType: PChar) : TFPResourceHandle function FindResource(ModuleHandle: TFPResourceHMODULE; ResourceName: AnsiString;ResourceType: AnsiString) : TFPResourceHandle Visibility: default Description: FindResource searches for a resource with name ResourceName and of type ResourceType in the executable or library identied by ModuleHandle. It returns a TResourceHandle which can be used to load the resource with LoadResource (1342). 1317
Errors: None. In case the resource was not found, 0 is returned. See also: FreeResource (1321), LoadResource (1342), SizeofResource (1401), LockResource (1343), UnlockResource (1417), FreeResource (1321)
37.10.81
FindResourceEx
Synopsis: Find a resource based on type, name, language Declaration: function FindResourceEx(ModuleHandle: TFPResourceHMODULE; ResourceType: PChar;ResourceName: PChar; Language: Word) : TFPResourceHandle function FindResourceEx(ModuleHandle: TFPResourceHMODULE; ResourceType: AnsiString; ResourceName: AnsiString;Language: Word) : TFPResourceHandle Visibility: default Description: FindResourceEx looks in module ModuleHandle for a resource of type ResourceType and name ResourceName with languague ID Language. Both Resourcename and ResourceName can be specied as a null-terminated array of characters, or as an AnsiString. If the requested language/sublanguage is not found, then the search is conducted 1.with only primary language. 2.with the neutral language (LANG_NEUTRAL) 3.with the english language If none of these has returned a match, then the rst available language is returned. If a match is found, a handle to the resource is returned. If none is found, an empty handle (nil or 0) is returned. Errors: None.
37.10.82
oat_raise
Synopsis: Raise oating point exception Declaration: procedure float_raise(i: ShortInt) Visibility: default Description: float_raise raises the oating point exceptions specied by softoat_exception_ags (1278). See also: softoat_exception_ags (1278), softoat_exception_mask (1278)
37.10.83
Flush
Synopsis: Write le buffers to disk Declaration: procedure Flush(var t: Text) Visibility: default Description: Flush empties the internal buffer of an opened le F and writes the contents to disk. The le is \textit{not} closed as a result of this call. 1318
Errors: Depending on the state of the {$I} switch, a runtime error can be generated if there is an error. In the {$I-} state, use IOResult to check for errors. See also: Close (1292) Listing: ./refex/ex26.pp
Program Example26 ; { Program t o demonstrate t h e Flush f u n c t i o n . } Var F : Text ; begin { Assign F t o s t a n d a r d o u t p u t } Assign ( F , ) ; Rewrite ( F ) ; W r i t e l n ( F , T h i s l i n e i s w r i t t e n f i r s t , b u t appears l a t e r ! ) ; { At t h i s p o i n t t h e t e x t i s i n t h e i n t e r n a l p a s c a l b u f f e r , and n o t y e t w r i t t e n t o s t a n d a r d o u t p u t } W r i t e l n ( T h i s l i n e appears f i r s t , b u t i s w r i t t e n l a t e r ! ) ; { A w r i t e l n t o o u t p u t always causes a f l u s h so t h i s t e x t i s w r i t t e n t o screen } Flush ( f ) ; { At t h i s p o i n t , t h e t e x t w r i t t e n t o F i s w r i t t e n t o screen . } Write ( F , F i n i s h i n g ) ; Close ( f ) ; { C l o s i n g a f i l e always causes a f l u s h f i r s t } Writeln ( o f f . ) ; end .
37.10.84
FlushThread
Synopsis: Flush all standard les Declaration: procedure FlushThread Visibility: default Description: FlushThread ushes any buffers from standard le descriptors such as standard input/output/error. It should normally not be called by user code, but is executed when a thread exits. See also: EndThread (1306)
37.10.85
FPower10
Synopsis: Fast multiply with a power of 10 Declaration: function FPower10(val: Extended;Power: LongInt) : Extended Visibility: default Description: FPower10 multplies val with 10 to the power Power. It uses a fast algorithm to calculate the result.
1319
37.10.86
frac
Synopsis: Return fractional part of oating point value. Declaration: function frac(d: ValReal) : ValReal Visibility: default Description: Frac returns the non-integer part of X. Errors: None. See also: Round (1389), Int (1335) Listing: ./refex/ex27.pp
Program Example27 ; { Program t o demonstrate t h e Frac f u n c t i o n . } Var R : Real ; begin W r i t e l n ( Frac ( 1 2 3 . 4 5 6 ) : 0 : 3 ) ; { P r i n t s O. 4 5 6 } W r i t e l n ( Frac ( 1 2 3 . 4 5 6 ) : 0 : 3 ) ; { P r i n t s O. 4 5 6 } end .
37.10.87
Freemem
Synopsis: Release allocated memory Declaration: procedure Freemem(p: pointer;Size: PtrUInt) function Freemem(p: pointer) : PtrUInt Visibility: default Description: Freemem releases the memory occupied by the pointer P, of size Count (in bytes), and returns it to the heap. P should point to the memory allocated to a dynamic variable. Errors: An error will occur when P doesnt point to the heap. See also: Getmem (1322), New (1346), Dispose (1304) Listing: ./refex/ex28.pp
Program Example28 ; { Program t o demonstrate t h e FreeMem and GetMem f u n c t i o n s . } Var P : P o i n t e r ; MM : L o n g i n t ; begin { Get memory f o r P } GetMem ( P , 8 0 ) ; F i l l C h a r ( P^ , 8 0 , ) ; FreeMem ( P , 8 0 ) ; end .
1320
37.10.88
Freememory
Synopsis: Alias for FreeMem (1320) Declaration: procedure Freememory(p: pointer;Size: PtrUInt) function Freememory(p: pointer) : PtrUInt Visibility: default Description: FreeMemory is an alias for FreeMem (1320). See also: FreeMem (1320)
37.10.89
FreeResource
Synopsis: Free a loaded resource Declaration: function FreeResource(ResData: TFPResourceHGLOBAL) : LongBool Visibility: default Description: FreeResource unloads the resource identied by ResData from memory. The resource must have been loaded by LoadResource (1342). It returns True if the operation was succesful, False otherwise. Errors: On error, False is returned. See also: FindResource (1317), LoadResource (1342), SizeofResource (1401), LockResource (1343), UnlockResource (1417), FreeResource (1321)
37.10.90
GetCurrentThreadId
Synopsis: Return the id of the currently running thread. Declaration: function GetCurrentThreadId : TThreadID Visibility: default Description: GetCurrentThreadId returns the ID of the currently running thread. It can be used in calls such as KillThread (1339) or ThreadSetPriority (1412) Errors: None. See also: KillThread (1339), ThreadSetPriority (1412)
37.10.91
getdir
Synopsis: Return the current directory Declaration: procedure getdir(drivenr: Byte;var dir: shortstring) procedure getdir(drivenr: Byte;var dir: ansistring) Visibility: default Description: Getdir returns in dir the current directory on the drive drivenr, where {drivenr} is 1 for the rst oppy drive, 3 for the rst hard disk etc. A value of 0 returns the directory on the current disk. On linux and unix systems, drivenr is ignored, as there is only one directory tree. Errors: An error is returned under dos, if the drive requested isnt ready. 1321
,S ) ;
37.10.92
GetFPCHeapStatus
Synopsis: Return FPC heap manager status information Declaration: function GetFPCHeapStatus : TFPCHeapStatus Visibility: default Description: Return FPC heap manager status information
37.10.93
GetHeapStatus
Synopsis: Return the memory manager heap status. Declaration: function GetHeapStatus : THeapStatus Visibility: default
37.10.94
GetMem
Synopsis: Allocate new memory on the heap Declaration: procedure Getmem(out p: pointer;Size: PtrUInt) function GetMem(size: PtrUInt) : pointer Visibility: default Description: Getmem reserves Size bytes memory on the heap, and returns a pointer to this memory in p. What happens if no more memory is available, depends on the value of the variable ReturnNilIfGrowHeapfails (1278): if the variable is True then Nil is returned. If the variable is False, a run-time error is generated. The default value is False, so by default an error is generated. For an example, see Freemem (1320). Errors: None. See also: Freemem (1320), Dispose (1304), New (1346), returnnilifgrowheapfails (1278)
1322
37.10.95
GetMemory
Synopsis: Alias for GetMem (1322) Declaration: procedure Getmemory(out p: pointer;Size: PtrUInt) function GetMemory(size: PtrUInt) : pointer Visibility: default Description: Getmemory is an alias for GetMem (1322). See also: GetMem (1322)
37.10.96
GetMemoryManager
Synopsis: Return current memory manager Declaration: procedure GetMemoryManager(var MemMgr: TMemoryManager) Visibility: default Description: GetMemoryManager stores the current Memory Manager record in MemMgr. For an example, see the programmers guide. Errors: None. See also: SetMemoryManager (1396), IsMemoryManagerSet (1339)
37.10.97
GetProcessID
Synopsis: Get the current process ID Declaration: function GetProcessID : SizeUInt Visibility: default Description: GetProcessID returns the current process ID. The meaning of the return value of this call is system dependent. Errors: None. See also: GetThreadID (1324)
37.10.98
GetResourceManager
Synopsis: Return the currently active resource manager Declaration: procedure GetResourceManager(var Manager: TResourceManager) Visibility: default Description: GetResourceManager returns the currently active resource manager record in Manager. There is always an active resource manager record. Errors: None. See also: TResourceManager (1267), SetResourceManager (1397)
1323
37.10.99
GetThreadID
Synopsis: Get the current Thread ID. Declaration: function GetThreadID : TThreadID Visibility: default Description: GetThreadID returns the current process ID. The meaning of the return value of this call is system dependent. See also: GetProcessID (1323)
37.10.100
GetThreadManager
Synopsis: Return the current thread manager Declaration: function GetThreadManager(var TM: TThreadManager) : Boolean Visibility: default Description: GetThreadManager returns the currently used thread manager in TM. For more information about thread programming, see the programmers guide. See also: SetThreadManager (1399), TThreadManager (1270)
37.10.101
GetUnicodeStringManager
Synopsis: Return a copy of the currently active unicodetring manager. Declaration: procedure GetUnicodeStringManager(var Manager: TUnicodeStringManager) Visibility: default Description: GetUnicodeStringManager returns a copy of the currently active unicode string manager in Old UnicodeStrings are implemented in different ways on different platforms. Therefore, the Free Pascal Runtime library has no xed implementation of widestring routines. Instead, it denes a UnicodeStringManager record, with callbacks that can be set to an implementation which is most efcient on the current platform. On windows, standard Windows routines will be used. On Unix and Linux, an implementation based on the C library is available (in unit cwstring). It is possible to implement a custom unicodestring manager, optimized for the current application, without having to recompile the complete Run-Time Library. See also: SetUnicodeStringManager (1399), TUnicodeStringManager (1272)
37.10.102
GetVariantManager
Synopsis: Return the current variant manager. Declaration: procedure GetVariantManager(var VarMgr: tvariantmanager) Visibility: default Description: GetVariantManager returns the current variant manager in varmgr. See also: SetVariantManager (1399) 1324
37.10.103
GetWideStringManager
Synopsis: Return a copy of the currently active widestring manager. Declaration: procedure GetWideStringManager(var Manager: TUnicodeStringManager) Visibility: default Description: GetWideStringManager returns a copy of the currently active heap manager in Old WideStrings are implemented in different ways on different platforms. Therefore, the Free Pascal Runtime library has no xed implementation of widestring routines. Instead, it denes a WideString manager record, with callbacks that can be set to an implementation which is most efcient on the current platform. On windows, standard Windows routines will be used. On Unix and Linux, an implementation based on the C library is available (in unit cwstring). It is possible to implement a custom widestring manager, optimized for the current application, without having to recompile the complete Run-Time Library. See also: SetWideStringManager (1400), TWideStringManager (1275)
37.10.104
get_caller_addr
Synopsis: Return the address of the caller. Declaration: function get_caller_addr(framebp: pointer) : pointer Visibility: default Description: get_caller_frame returns a pointer to address ( the return address) of the caller of the routine which has as frame framebp. See also: get_frame (1326), get_caller_frame (1325), Dump_Stack (1306)
37.10.105
get_caller_frame
Synopsis: Return the frame pointer of the caller Declaration: function get_caller_frame(framebp: pointer) : pointer Visibility: default Description: get_caller_frame returns a pointer to the frame of the caller of the routine which has as frame framebp. See also: get_caller_addr (1325), get_frame (1326), Dump_Stack (1306)
37.10.106
get_cmdline
Synopsis: Return the command-line as a null-terminated string Declaration: function get_cmdline : PChar Visibility: default Description: get_cmdline returns the complete command-line as a null-terminated string. It is not recommended to use this function, since it builds a complete value from the actual command-line arguments. Instead, ParamCount (1374) and ParamStr (1375) should be used. See also: ParamCount (1374), ParamStr (1375) 1325
37.10.107
get_frame
Synopsis: Return the current frame Declaration: function get_frame : pointer Visibility: default Description: get_frame returns a pointer to the current stack frame. See also: get_caller_addr (1325), get_caller_frame (1325)
37.10.108
halt
Synopsis: Stop program execution. Declaration: procedure halt(errnum: LongInt) procedure halt Visibility: default Description: Halt stops program execution and returns control to the calling program. The optional argument Errnum species an exit value. If omitted, zero is returned. Errors: None. See also: Exit (1312) Listing: ./refex/ex30.pp
Program Example30 ; { Program t o demonstrate t h e H a l t f u n c t i o n . } begin W r i t e l n ( Before H a l t . ) ; H a l t ( 1 ) ; { Stop w i t h e x i t code 1 } W r i t e l n ( A f t e r H a l t doesn t g e t executed . ) ; end .
37.10.109
Declaration: function function function function Visibility: default
hexStr
hexStr(Val: hexStr(Val: hexStr(Val: hexStr(Val: LongInt;cnt: Byte) : shortstring Int64;cnt: Byte) : shortstring QWord;cnt: Byte) : shortstring Pointer) : shortstring
Description: HexStr returns a string with the hexadecimal representation of Value. The string has exactly cnt charaters. (i.e. only the cnt rightmost nibbles are taken into account) To have a complete representation of a Longint-type value, 8 nibbles are needed, i.e. cnt=8. Errors: None. See also: Str (1404), Val (1419), BinStr (1286)
1326
Listing: ./refex/ex81.pp
Program example81 ; { Program t o demonstrate t h e HexStr f u n c t i o n } Const Value = 4 5 6 7 8 ; Var I : l o n g i n t ; begin For I : = 1 to 1 0 do W r i t e l n ( HexStr ( Value , I ) ) ; end .
37.10.110
Declaration: function function function function function function function Visibility: default
hi
hi(b: hi(i: hi(w: hi(l: hi(l: hi(i: hi(q: Byte) : Byte Integer) : Byte Word) : Byte LongInt) : Word DWord) : Word Int64) : DWord QWord) : DWord
Description: Hi returns the high byte or word from X, depending on the size of X. If the size of X is 4, then the high word is returned. If the size is 2 then the high byte is returned. Hi cannot be invoked on types of size 1, such as byte or char. Errors: None See also: Lo (1342) Listing: ./refex/ex31.pp
Program Example31 ; { Program t o demonstrate t h e Hi f u n c t i o n . } var L : Longint ; W : Word ; begin L : = 1 Shl 1 6 ; W: = 1 Shl 8 ; W r i t e l n ( Hi ( L ) ) ; W r i t e l n ( Hi (W) ) ; end .
{ { { {
1327
37.10.111
High
Synopsis: Return highest index of open array or enumerated Declaration: function High(Arg: TypeOrVariable) : TOrdinal Visibility: default Description: The return value of High depends on its argument: 1.If the argument is an ordinal type, High returns the highest value in the range of the given ordinal type. 2.If the argument is an array type or an array type variable then High returns the highest possible value of its index. 3.If the argument is an open array identier in a function or procedure, then High returns the highest index of the array, as if the array has a zero-based index. 4.If the argument is a set type then it returns the highest value of the underlying ordinal type. The return type is always the same type as the type of the argument (This can lead to some nasty surprises !). Errors: None. See also: Low (1343), Ord (1373), Pred (1377), Succ (1407) Listing: ./refex/ex80.pp
Program example80 ; { Example t o demonstrate t h e High and Low f u n c t i o n s . } Type TEnum = ( North , East , South , West ) ; TRange = 1 4 . . 5 5 ; TArray = Array [ 2 . . 1 0 ] of L o n g i n t ; Function Average ( Row : Array of L o n g i n t ) : Real ; Var I : l o n g i n t ; Temp : Real ;
begin Temp : = Row [ 0 ] ; For I : = 1 to High (Row ) do Temp : = Temp + Row [ i ] ; Average : = Temp / ( High (Row ) + 1 ) ; end ; Var A B C I : : : : TEnum ; TRange ; TArray ; longint ;
( ( ( (
TEnum A TRange B
: : : :
t o , Ord ( high (TEnum ) ) , . ) ; , Ord ( high (A ) ) , . ) ; t o , Ord ( high ( TRange ) ) , . ) ; , Ord ( high (B ) ) , . ) ;
1328
W r i t e l n ( TArray i n d e x goes from : , Ord (Low( TArray ) ) , t o , Ord ( high ( TArray ) ) , . ) ; W r i t e l n ( C i n d e x goes from : ,Low(C) , t o , high (C) , . ) ; For I : =Low(C ) to High (C ) do C[ i ] : = I ; W r i t e l n ( Average : , Average ( c ) ) ; Write ( Type o f r e t u r n v a l u e i s always same as t y p e o f argument : ) ; W r i t e l n ( high ( high ( word ) ) ) ; end .
37.10.112
HINSTANCE
Synopsis: Windows compatibility type for use in resources Declaration: function HINSTANCE : TFPResourceHMODULE Visibility: default Description: This is an opaque type.
37.10.113
Inc
Synopsis: Increase value of integer variable Declaration: procedure Inc(var X: TOrdinal) procedure Inc(var X: TOrdinal;Increment: TOrdinal) Visibility: default Description: Inc increases the value of X with Increment. If Increment isnt specied, then 1 is taken as a default. Errors: If range checking is on, then A range check can occur, or an overow error, when an attempt is made to increase X over its maximum value. See also: Dec (1301) Listing: ./refex/ex32.pp
Program Example32 ; { Program t o demonstrate t h e I n c f u n c t i o n . } Const C : Cardinal L : Longint I : Integer W : Word B : Byte SI : S h o r t I n t CH : Char begin Inc Inc Inc Inc Inc
= = = = = = =
1; 1; 1; 1; 1; 1; A ;
{ { { { {
C: = 2 L:=6 I := 2 W: = 4 B: = 1 0 1
} } } } }
1329
37.10.114
Include
Synopsis: Include element in set if it was not yet present. Declaration: procedure Include(var S: TSetType;E: TSetElement) Visibility: default Description: Include includes E in the set S if it is not yet part of the set. E should be of the same type as the base type of the set S. Thus, the two following statements do the same thing: S:=S+[E]; Include(S,E); For an example, see Exclude (1310) Errors: If the type of the element E is not equal to the base type of the set S, the compiler will generate an error. See also: Exclude (1310)
37.10.115
IndexByte
Synopsis: Search for a byte in a memory range. Declaration: function IndexByte(const buf;len: SizeInt;b: Byte) : SizeInt Visibility: default Description: IndexByte searches the memory at buf for maximally len positions for the byte b and returns its position if it found one. If b is not found then -1 is returned. The position is zero-based. Errors: Buf and Len are not checked to see if they are valid values. See also: IndexChar (1331), IndexDWord (1332), IndexWord (1333), CompareByte (1293) Listing: ./refex/ex105.pp
Program Example105 ; { Program t o demonstrate t h e IndexByte f u n c t i o n . } Const ArraySize = 2 5 6 ; MaxValue = 2 5 6 ; Var B u f f e r : Array [ 1 . . A r r a y S i z e ] of Byte ; I , J : longint ; K : Byte ;
1330
begin Randomize ; For I : = 1 To A r r a y S i z e do B u f f e r [ I ] : = Random( MaxValue ) ; For I : = 1 to 1 0 do begin K: =Random( MaxValue ) ; J : = IndexByte ( B u f f e r , ArraySize , K ) ; i f J=1 then W r i t e l n ( Value ,K , was n o t found i n b u f f e r . ) else W r i t e l n ( Found ,K , a t p o s i t i o n , J , i n b u f f e r ) ; end ; end .
37.10.116
IndexChar
Synopsis: Search for a character in a memory range. Declaration: function IndexChar(const buf;len: SizeInt;b: Char) : SizeInt Visibility: default Description: IndexChar searches the memory at buf for maximally len positions for the character b and returns its position if it found one. If b is not found then -1 is returned. The position is zero-based. The IndexChar0 variant stops looking if a null character is found, and returns -1 in that case. Errors: Buf and Len are not checked to see if they are valid values. See also: IndexByte (1330), IndexDWord (1332), IndexWord (1333), CompareChar (1294) Listing: ./refex/ex108.pp
Program Example108 ; { Program t o demonstrate t h e IndexChar f u n c t i o n . } Const ArraySize = 1000; MaxValue = 2 6 ; Var B u f f e r : Array [ 1 . . A r r a y S i z e ] of Char ; I , J : longint ; K : Char ; begin Randomize ; For I : = 1 To A r r a y S i z e do B u f f e r [ I ] : = chr ( Ord ( A )+Random( MaxValue ) ) ; For I : = 1 to 1 0 do begin K: = chr ( Ord ( A )+Random( MaxValue ) ) ; J : = IndexChar ( B u f f e r , ArraySize , K ) ; i f J=1 then W r i t e l n ( Value ,K , was n o t found i n b u f f e r . ) else W r i t e l n ( Found ,K , a t p o s i t i o n , J , i n b u f f e r ) ;
1331
end ; end .
37.10.117
IndexChar0
Synopsis: Return index of a character in null-terminated array of char. Declaration: function IndexChar0(const buf;len: SizeInt;b: Char) : SizeInt Visibility: default Description: IndexChar0 returns the index of the character b in the null-terminated array Buf. At most len characters will be searched, or the null character if it is encountered rst. If the character is not found, -1 is returned. Errors: On error, -1 is returned. See also: IndexByte (1330), IndexChar (1331), IndexWord (1333), IndexDWord (1332), CompareChar0 (1296)
37.10.118
IndexDWord
Synopsis: Search for a DWord value in a memory range. Declaration: function IndexDWord(const buf;len: SizeInt;b: DWord) : SizeInt Visibility: default Description: IndexChar searches the memory at buf for maximally len positions for the DWord DW and returns its position if it found one. If DW is not found then -1 is returned. The position is zero-based. Errors: Buf and Len are not checked to see if they are valid values. See also: IndexByte (1330), IndexChar (1331), IndexWord (1333), CompareDWord (1296) Listing: ./refex/ex106.pp
Program Example106 ; { Program t o demonstrate t h e IndexDWord f u n c t i o n . } Const ArraySize = 1000; MaxValue = 1 0 0 0 ; Var B u f f e r : Array [ 1 . . A r r a y S i z e ] of DWord ; I , J : longint ; K : DWord ; begin Randomize ; For I : = 1 To A r r a y S i z e do B u f f e r [ I ] : = Random( MaxValue ) ; For I : = 1 to 1 0 do begin K: =Random( MaxValue ) ; J : = IndexDWord ( B u f f e r , ArraySize , K ) ; i f J=1 then
1332
37.10.119
IndexQWord
Synopsis: Return the position of a QWord in a memory range Declaration: function IndexQWord(const buf;len: SizeInt;b: QWord) : SizeInt Visibility: default Description: IndexQWord checks the rst len qwords starting at Buf, and returns the position (zero-based) of b. If b does not appear in the rst len qwords, then -1 is returned. Note that the search is done on QWord boundaries, but that the address of buf need not be on a QWord boundary. Errors: No check is done to see whether the indicated memory range is valid. If it is not, a run-error or exception may be triggered. See also: IndexDWord (1332)
37.10.120
Indexword
Synopsis: Search for a WORD value in a memory range. Declaration: function Indexword(const buf;len: SizeInt;b: Word) : SizeInt Visibility: default Description: IndexChar searches the memory at buf for maximally len positions for the Word W and returns its position if it found one. If W is not found then -1 is returned. Errors: Buf and Len are not checked to see if they are valid values. See also: IndexByte (1330), IndexDWord (1332), IndexChar (1331), CompareWord (1297) Listing: ./refex/ex107.pp
Program Example107 ; { Program t o demonstrate t h e IndexWord f u n c t i o n . } Const ArraySize = 1000; MaxValue = 1 0 0 0 ; Var B u f f e r : Array [ 1 . . A r r a y S i z e ] of Word ; I , J : longint ; K : Word ; begin Randomize ; For I : = 1 To A r r a y S i z e do
1333
B u f f e r [ I ] : = Random( MaxValue ) ; For I : = 1 to 1 0 do begin K: =Random( MaxValue ) ; J : = IndexWord ( B u f f e r , ArraySize , K ) ; i f J=1 then W r i t e l n ( Value ,K , was n o t found i n b u f f e r . ) else W r i t e l n ( Found ,K , a t p o s i t i o n , J , i n b u f f e r ) ; end ; end .
37.10.121
InitCriticalSection
Synopsis: Initialize a critical section Declaration: procedure InitCriticalSection(var cs: TRTLCriticalSection) Visibility: default Description: InitCriticalSection initializes a critical section CS for use. Before using a critical section with EnterCriticalsection (1307) or LeaveCriticalsection (1340) the critical section should be initialized with InitCriticalSection. When a critical section is no longer used, it should be disposed of with DoneCriticalsection (1305) See also: DoneCriticalsection (1305), EnterCriticalsection (1307), LeaveCriticalsection (1340)
37.10.122
InitThread
Synopsis: Initialize a thread Declaration: procedure InitThread(stklen: SizeUInt) Visibility: default Description: Do not use, this is used internally by the thread manager.
37.10.123
InitThreadVars
Synopsis: Initialize threadvars Declaration: procedure InitThreadVars(RelocProc: Pointer) Visibility: default Description: This routine should be called when threading is started. It is called by the compiler and should never be called manually, only from a thread manager. Errors: None. See also: TThreadManager (1270), TThreadManager.InitThreadVar (1)
1334
37.10.124
Insert
Synopsis: Insert one string in another. Declaration: procedure Insert(const source: shortstring;var s: shortstring; index: SizeInt) procedure Insert(source: Char;var s: shortstring;index: SizeInt) procedure Insert(const Source: AnsiString;var S: AnsiString; Index: SizeInt) procedure Insert(const Source: UnicodeString;var S: UnicodeString; Index: SizeInt) procedure Insert(const Source: WideString;var S: WideString; Index: SizeInt) Visibility: default Description: Insert inserts string Source in string S, at position Index, shifting all characters after Index to the right. The resulting string is truncated at 255 characters, if needed. (i.e. for shortstrings) Errors: None. See also: Delete (1303), Copy (1300), Pos (1376) Listing: ./refex/ex33.pp
Program Example33 ; { Program t o demonstrate t h e I n s e r t f u n c t i o n . } Var S : S t r i n g ; begin S: = Free Pascal i s d i f f i c u l t t o use ! ; I n s e r t ( NOT ,S , pos ( d i f f i c u l t ,S ) ) ; writeln ( s ) ; end .
37.10.125
int
Synopsis: Calculate integer part of oating point value. Declaration: function int(d: ValReal) : ValReal Visibility: default Description: Int returns the integer part of any Real X, as a Real. Errors: None. See also: Frac (1320), Round (1389) Listing: ./refex/ex34.pp
Program Example34 ; { Program t o demonstrate t h e I n t f u n c t i o n . } begin
1335
37.10.126
InterlockedCompareExchange
Synopsis: Conditional exchange Declaration: function InterlockedCompareExchange(var Target: LongInt; NewValue: LongInt;Comperand: LongInt) : LongInt function InterlockedCompareExchange(var Target: Pointer; NewValue: Pointer;Comperand: Pointer) : Pointer function InterlockedCompareExchange(var Target: Cardinal; NewValue: Cardinal; Comperand: Cardinal) : Cardinal Visibility: default Description: InterlockedCompareExchange does an compare-and-exchange operation on the specied values in a thread-safe way. The function compares Target and Comparand and exchanges Target with NewValue if Target and Comparand are equal. It returns the old value of Target. This is done in a thread-safe way, i.e., only one processor is accessing the Target variable at a time. Errors: None. See also: InterLockedDecrement (1336), InterLockedIncrement (1337), InterLockedExchange (1336), InterLockedExchangeAdd (1337)
37.10.127
InterLockedDecrement
Synopsis: Thread-safe decrement Declaration: function InterLockedDecrement(var Target: LongInt) : LongInt function InterLockedDecrement(var Target: Pointer) : Pointer function InterLockedDecrement(var Target: Cardinal) : Cardinal Visibility: default Description: InterLockedDecrement decrements Target with 1 and returns the result. This is done in a thread-safe way. (i.e. only one processor is accessing the variable at a time). Errors: None. See also: InterLockedIncrement (1337), InterLockedExchange (1336), InterLockedExchangeAdd (1337), InterlockedCompareExchange (1336)
37.10.128
InterLockedExchange
1336
Declaration: function InterLockedExchange(var Target: LongInt;Source: LongInt) : LongInt function InterLockedExchange(var Target: Pointer;Source: Pointer) : Pointer function InterLockedExchange(var Target: Cardinal;Source: Cardinal) : Cardinal Visibility: default Description: InterLockedExchange stores Source in Target and returns the old value of Target. This is done in a thread-safe way, i.e., only one processor is accessing the Target variable at a time. Errors: None. See also: InterLockedDecrement (1336), InterLockedIncrement (1337), InterLockedExchangeAdd (1337), InterlockedCompareExchange (1336)
37.10.129
InterLockedExchangeAdd
Synopsis: Thread-safe add and exchange of 2 values Declaration: function InterLockedExchangeAdd(var Target: LongInt;Source: LongInt) : LongInt function InterLockedExchangeAdd(var Target: Pointer;Source: Pointer) : Pointer function InterLockedExchangeAdd(var Target: Cardinal;Source: Cardinal) : Cardinal Visibility: default Description: InterLockedExchangeAdd adds to Target the value of Source in a thread-safe way, and returns the old value of Target.This is done in a thread-safe way, i.e., only one processor is accessing the Target variable at a time. Errors: None. See also: InterLockedDecrement (1336), InterLockedIncrement (1337), InterLockedExchange (1336), InterlockedCompareExchange (1336)
37.10.130
InterLockedIncrement
Synopsis: Thread-safe increment Declaration: function InterLockedIncrement(var Target: LongInt) : LongInt function InterLockedIncrement(var Target: Pointer) : Pointer function InterLockedIncrement(var Target: Cardinal) : Cardinal Visibility: default Description: InterLockedIncrement increments Target with 1 and returns the result. This is done in a thread-safe way (i.e. only one processor is accessing the variable at a time). Errors: None. See also: InterLockedDecrement (1336), InterLockedExchange (1336), InterLockedExchangeAdd (1337), InterlockedCompareExchange (1336)
1337
37.10.131
IOResult
Synopsis: Return result of last le IO operation Declaration: function IOResult : Word Visibility: default Description: IOresult contains the result of any input/output call, when the {\$i-} compiler directive is active, disabling IO checking. When the ag is read, it is reset to zero. If IOresult is zero, the operation completed successfully. If non-zero, an error occurred. The following errors can occur: dos errors : 2File not found. 3Path not found. 4Too many open les. 5Access denied. 6Invalid le handle. 12Invalid le-access mode. 15Invalid disk number. 16Cannot remove current directory. 17Cannot rename across volumes. I/O errors : 100Error when reading from disk. 101Error when writing to disk. 102File not assigned. 103File not open. 104File not opened for input. 105File not opened for output. 106Invalid number. Fatal errors : 150Disk is write protected. 151Unknown device. 152Drive not ready. 153Unknown command. 154CRC check failed. 155Invalid drive specied.. 156Seek error on disk. 157Invalid media type. 158Sector not found. 159Printer out of paper. 160Error when writing to device. 161Error when reading from device. 162Hardware failure. 1338
37.10.132
IsMemoryManagerSet
Synopsis: Is the memory manager set Declaration: function IsMemoryManagerSet : Boolean Visibility: default Description: IsMemoryManagerSet will return True if the memory manager has been set to another value than the system heap manager, it will return False otherwise. Errors: None. See also: SetMemoryManager (1396), GetMemoryManager (1323)
37.10.133
Is_IntResource
Synopsis: Check whether a resource is an internal resource Declaration: function Is_IntResource(aStr: PChar) : Boolean Visibility: default Description: Is_IntResource returns True if the resource type is internal (system predened) resource or false if it is a user-dened resource type. Errors: None.
37.10.134
KillThread
Synopsis: Kill a running thread Declaration: function KillThread(threadHandle: TThreadID) : DWord Visibility: default
1339
Description: KillThread causes a running thread to be aborted. The thread is identied by its handle or ID threadHandle. The function returns zero if succesful. A nonzero return value indicates failure. Errors: If a failure occurred, a nonzero result is returned. The meaning is system dependent. See also: WaitForThreadTerminate (1421), EndThread (1306), SuspendThread (1407)
37.10.135
LeaveCriticalsection
Synopsis: Leave a critical section Declaration: procedure LeaveCriticalsection(var cs: TRTLCriticalSection) Visibility: default Description: LeaveCriticalSection signals that the current thread is exiting the critical section CS it has entered with EnterCriticalSection (1307). The critical section must have been initialized with InitCriticalSection (1334) prior to a call to EnterCriticalsection and LeaveCriticalSection. See also: InitCriticalsection (1334), DoneCriticalsection (1305), EnterCriticalsection (1307)
37.10.136
Length
Synopsis: Returns length of a string. Declaration: function Length(S: AStringType) : Integer function Length(A: DynArrayType) : Integer Visibility: default Description: Length returns the length of the string S, which is limited to 255 for shortstrings. If the strings S is empty, 0 is returned. Note: The length of the string S is stored in S[0] for shortstrings only. The Length function should always be used on ansistrings and widestrings. For dynamical arrays, the function returns the number of elements in the array. Length also supports arguments of type PCharand PWideChar, in which case it is identical to the StrLen and WStrLen functions, respectively. In this case, the function actually calculates the length of the null-terminated string, and its execution time is proportional to the string length because the terminating null character is searched through a linear scan. Errors: None. See also: Pos (1376) Listing: ./refex/ex36.pp
Program Example36 ; { Program t o demonstrate t h e Length f u n c t i o n . } Var S : S t r i n g ; I : Integer ; begin
1340
,s );
37.10.137
Declaration: function function function function function function Visibility: default
LEtoN
LEtoN(const LEtoN(const LEtoN(const LEtoN(const LEtoN(const LEtoN(const AValue: AValue: AValue: AValue: AValue: AValue: SmallInt) : SmallInt Word) : Word LongInt) : LongInt DWord) : DWord Int64) : Int64 QWord) : QWord
Description: LEToN will rearrange the bytes in a Little-Endian number to the native order for the current processor. That is, for a little-endian processor, it will do nothing, and for a big-endian processor, it will invert the order of the bytes. See also: BEtoN (1286), NtoBE (1346), NtoLE (1347)
37.10.138
ln
Synopsis: Calculate logarithm Declaration: function ln(d: ValReal) : ValReal Visibility: default Description: Ln returns the natural logarithm of the Real parameter X. X must be positive. Errors: An run-time error will occur when X is negative. See also: Exp (1313), Power (1) Listing: ./refex/ex37.pp
Program Example37 ; { Program t o demonstrate t h e Ln f u n c t i o n . } begin W r i t e l n ( Ln ( 1 ) ) ; { Prints 0 } W r i t e l n ( Ln ( Exp ( 1 ) ) ) ; { P r i n t s 1 } end .
1341
37.10.139
Declaration: function function function function function function function Visibility: default
lo
lo(B: lo(i: lo(w: lo(l: lo(l: lo(i: lo(q: Byte) : Byte Integer) : Byte Word) : Byte LongInt) : Word DWord) : Word Int64) : DWord QWord) : DWord
Description: Lo returns the low byte of its argument if this is of type Integer or Word. It returns the low word of its argument if this is of type Longint or Cardinal. Errors: None. See also: Ord (1373), Chr (1292), Hi (1327) Listing: ./refex/ex38.pp
Program Example38 ; { Program t o demonstrate t h e Lo f u n c t i o n . } Var L : L o n g i n t ; W : Word ; begin L : = ( 1 Shl 1 6 ) + ( 1 Shl 4 ) ; W r i t e l n ( Lo ( L ) ) ; W: = ( 1 Shl 8 ) + ( 1 Shl 4 ) ; W r i t e l n ( Lo (W) ) ; end .
{ { { {
} 16 } } 16 }
37.10.140
LoadResource
Synopsis: Load a resource for use Declaration: function LoadResource(ModuleHandle: TFPResourceHMODULE; ResHandle: TFPResourceHandle) : TFPResourceHGLOBAL Visibility: default Description: LoadResource loads a resource identied by ResHandle from a module identied by ModuleHandleinto memory. It returns a handle to the resource. Loaded resources must be unloaded again using the FreeResource (1321) function. Errors: On error, 0 is returned. See also: FindResource (1317), FreeResource (1321), SizeofResource (1401), LockResource (1343), UnlockResource (1417), FreeResource (1321)
1342
37.10.141
LockResource
Synopsis: Lock a resource Declaration: function LockResource(ResData: TFPResourceHGLOBAL) : Pointer Visibility: default Description: LockResource locks a resource previously loaded by LoadResource into memory. This means that any attempt to modify the resource will fail while it is locked. The function returns a pointer to the resource location in memory. The resource can be freed again using the UnlockResource (1417) function. Errors: if the function fails, Nil is returned. See also: FindResource (1317), FreeResource (1321), SizeofResource (1401), LoadResource (1342), UnlockResource (1417), FreeResource (1321)
37.10.142
longjmp
Synopsis: Jump to address. Declaration: procedure longjmp(var S: jmp_buf;value: LongInt) Visibility: default Description: LongJmp jumps to the adress in the envjmp_buf, and restores the registers that were stored in it at the corresponding SetJmp (1395) call. In effect, program ow will continue at the SetJmp call, which will return value instead of 0. If a value equal to zero is passed, it will be converted to 1 before passing it on. The call will not return, so it must be used with extreme care. This can be used for error recovery, for instance when a segmentation fault occurred. For an example, see SetJmp (1395) Errors: None. See also: SetJmp (1395)
37.10.143
Low
Synopsis: Return lowest index of open array or enumerated Declaration: function Low(Arg: TypeOrVariable) : TOrdinal Visibility: default Description: The return value of Low depends on its argument: 1.If the argument is an ordinal type, Low returns the lowest value in the range of the given ordinal type. 2.If the argument is an array type or an array type variable then Low returns the lowest possible value of its index. 3.If the argument is an open array identier in a function or procedure, then Low returns the lowest element of the array, which is always zero. 4.If the argument is a set type then it returns the lowest value of the underlying ordinal type. The return type is always the same type as the type of the argument. for an example, see High (1328). 1343
Errors: None. See also: High (1328), Ord (1373), Pred (1377), Succ (1407)
37.10.144
lowerCase
Overload
Synopsis: Return lowercase version of a string. Declaration: function lowerCase(const s: shortstring) : shortstring; function lowerCase(c: Char) : Char; Overload function lowercase(const s: ansistring) : ansistring Visibility: default Description: Lowercase returns the lowercase version of its argument C. If its argument is a string, then the complete string is converted to lowercase. The type of the returned value is the same as the type of the argument. Errors: None. See also: Upcase (1417) Listing: ./refex/ex73.pp
program Example73 ; { Program t o demonstrate t h e Lowercase f u n c t i o n . } var c : char ; begin f o r c : = A to Z do w r i t e ( lowercase ( c ) ) ; Writeln ; W r i t e l n ( Lowercase ( ABCDEFGHIJKLMNOPQRSTUVWXYZ ) ) ; end .
37.10.145
MakeLangID
Synopsis: Create a langauge ID Declaration: function MakeLangID(primary: Word;sub: Word) : Word Visibility: default Description: MakeLangID creates a language ID from the primary and sub language IDS.
37.10.146
MemSize
Synopsis: Return the size of a memory block. Declaration: function MemSize(p: pointer) : PtrUInt Visibility: default Description: MemSize returns the size of a memory block on the heap. Errors: Passing an invalid pointer may lead to run-time errors (access violations). See also: GetMem (1322), FreeMem (1320) 1344
37.10.147
mkdir
Overload
Synopsis: Create a new directory. Declaration: procedure mkdir(const s: string); Visibility: default Description: Mkdir creates a new directory S. For an example, see Rmdir (1386). Errors: Depending on the state of the {$I} switch, a runtime error can be generated if there is an error. In the {$I-} state, use IOResult to check for errors. See also: Chdir (1291), Rmdir (1386)
37.10.148
Move
Synopsis: Move data from one location in memory to another Declaration: procedure Move(const source;var dest;count: SizeInt) Visibility: default Description: Move moves Count bytes from Source to Dest. Errors: If either Dest or Source is outside the accessible memory for the process, then a run-time error will be generated. See also: Fillword (1317), Fillchar (1315) Listing: ./refex/ex42.pp
Program Example42 ; { Program t o demonstrate t h e Move f u n c t i o n . } Var S1 , S2 : S t r i n g [ 3 0 ] ; begin S1 : = H e l l o World ! ; S2 : = Bye , bye ! ; Move ( S1 , S2 , Sizeof ( S1 ) ) ; W r i t e l n ( S2 ) ; end .
37.10.149
MoveChar0
Synopsis: Move data till rst zero character Declaration: procedure MoveChar0(const buf1;var buf2;len: SizeInt) Visibility: default Description: MoveChar0 moves Count bytes from buf1 to buf2, and stops moving if a zero character is found. Errors: No checking is done to see if Count stays within the memory allocated to the process. 1345
37.10.150
New
Synopsis: Dynamically allocate memory for variable Declaration: procedure New(var P: Pointer) procedure New(var P: Pointer;Cons: TProcedure) Visibility: default Description: New allocates a new instance of the type pointed to by P, and puts the address in P. If P is an object, then it is possible to specify the name of the constructor with which the instance will be created. For an example, see Dispose (1304). Errors: If not enough memory is available, Nil will be returned. See also: Dispose (1304), Freemem (1320), Getmem (1322)
37.10.151
Declaration: function function function function function function Visibility: default
NtoBE
NtoBE(const NtoBE(const NtoBE(const NtoBE(const NtoBE(const NtoBE(const AValue: AValue: AValue: AValue: AValue: AValue: SmallInt) : SmallInt Word) : Word LongInt) : LongInt DWord) : DWord Int64) : Int64 QWord) : QWord
Description: NToBE will rearrange the bytes in a natively-ordered number to the Big-Endian order. That is, for a Little-Endian processor, it will invert the order of the bytes and for a big-endian processor, it will do nothing. 1346
37.10.152
Declaration: function function function function function function Visibility: default
NtoLE
NtoLE(const NtoLE(const NtoLE(const NtoLE(const NtoLE(const NtoLE(const AValue: AValue: AValue: AValue: AValue: AValue: SmallInt) : SmallInt Word) : Word LongInt) : LongInt DWord) : DWord Int64) : Int64 QWord) : QWord
Description: NToLE will rearrange the bytes in a natively-ordered number to the little-Endian order. That is, for a Big-Endian processor, it will invert the order of the bytes and for a Little-Endian processor, it will do nothing. See also: BEtoN (1286), LEtoN (1341), NtoBE (1346)
37.10.153
Synopsis: Null variant
Null
37.10.154
OctStr
Synopsis: Convert integer to a string with octal representation. Declaration: function OctStr(Val: LongInt;cnt: Byte) : shortstring function OctStr(Val: Int64;cnt: Byte) : shortstring function OctStr(Val: QWord;cnt: Byte) : shortstring Visibility: default Description: OctStr returns a string with the octal representation of Value. The string has exactly cnt charaters. Errors: None. See also: Str (1404), Val (1419), BinStr (1286), HexStr (1326) Listing: ./refex/ex112.pp
Program example112 ; { Program t o demonstrate t h e O c t S t r f u n c t i o n } Const Value = 4 5 6 7 8 ; Var I : l o n g i n t ; begin
1347
37.10.155
Declaration: function function function function Visibility: default
odd
odd(l: odd(l: odd(l: odd(l: LongInt) : Boolean LongWord) : Boolean Int64) : Boolean QWord) : Boolean
Description: Odd returns True if X is odd, or False otherwise. Errors: None. See also: Abs (1279), Ord (1373) Listing: ./refex/ex43.pp
Program Example43 ; { Program t o demonstrate t h e Odd f u n c t i o n . } begin I f Odd ( 1 ) Then W r i t e l n ( E v e r y t h i n g OK w i t h 1 ! ) ; I f Not Odd ( 2 ) Then W r i t e l n ( E v e r y t h i n g OK w i t h 2 ! ) ; end .
37.10.156
Ofs
Synopsis: Return offset of a variable. Declaration: function Ofs(var X) : LongInt Visibility: default Description: Ofs returns the offset of the address of a variable. This function is only supported for compatibility. In Free Pascal, it returns always the complete address of the variable, since Free Pascal is a 32/64 bit compiler. Errors: None. See also: DSeg (1305), CSeg (1301), Seg (1394), Ptr (1377) Listing: ./refex/ex44.pp
1348
37.10.157
Synopsis: Implement multiplication (*) operation on variants. Declaration: operator operator *(variant, variant): variant(const op1: variant; const op2: variant) : variant Visibility: default Description: The implementation of the multiplication * operation is delegated to the variant manager with operation opMultiply. Errors: Execution of this operator may result in an exception if no variant manager is installed or if the types of the operand are not suitable for the operation. See also: operator /(variant, variant): variant (1350)
37.10.158
Synopsis: Implement power (**) operation on variants. Declaration: operator operator **(variant, variant): variant(const op1: variant; const op2: variant) : variant Visibility: default Description: The implementation of the power ** operation is delegated to the variant manager with operation opPower. Errors: Execution of this operator may result in an exception if no variant manager is installed or if the types of the operand are not suitable for the operation. See also: operator *(variant, variant): variant (1349)
37.10.159
Synopsis: Implement addition (+) operation on variants. Declaration: operator operator +(variant, variant): variant(const op1: variant; const op2: variant) : variant Visibility: default 1349
Description: The implementation of the addition + operation is delegated to the variant manager with operation opadd. Errors: Execution of this operator may result in an exception if no variant manager is installed or if the types of the operand are not suitable for the operation. See also: operator -(variant, variant): variant (1350)
37.10.160
Synopsis: Implement - (unary minus, negation) operation on variants. Declaration: operator operator -(variant): variant(const op: variant) : variant Visibility: default Description: The implementation of the unary minus (-) operation is delegated to the variant manager with operation varNeg. Errors: Execution of this operator may result in an exception if no variant manager is installed or if the types of the operand are not suitable for the operation. See also: operator -(variant, variant): variant (1350)
37.10.161
Synopsis: Implement subtraction (-) operation on variants. Declaration: operator operator -(variant, variant): variant(const op1: variant; const op2: variant) : variant Visibility: default Description: The implementation of the subtraction - operation is delegated to the variant manager with operation opSubtract. Errors: Execution of this operator may result in an exception if no variant manager is installed or if the types of the operand are not suitable for the operation. See also: operator -(variant, variant): variant (1350)
37.10.162
Synopsis: Implement division (/) operation on variants. Declaration: operator operator /(variant, variant): variant(const op1: variant; const op2: variant) : variant Visibility: default Description: The implementation of the division / operation is delegated to the variant manager with operation opDivide. Errors: Execution of this operator may result in an exception if no variant manager is installed or if the types of the operand are not suitable for the operation. See also: operator *(variant, variant): variant (1349) 1350
37.10.163
Synopsis:
Declaration: operator operator :=(ansistring): olevariant(const source: ansistring) : olevariant Visibility: default Description:
37.10.164
Synopsis:
Declaration: operator operator :=(ansistring): variant(const source: ansistring) : variant Visibility: default Description:
37.10.165
Synopsis:
Declaration: operator operator :=(Boolean): olevariant(const source: Boolean) : olevariant Visibility: default Description:
37.10.166
Synopsis:
Declaration: operator operator :=(Boolean): variant(const source: Boolean) : variant Visibility: default Description:
37.10.167
Synopsis:
Declaration: operator operator :=(Byte): olevariant(const source: Byte) : olevariant Visibility: default Description:
1351
37.10.168
Synopsis:
Declaration: operator operator :=(Byte): variant(const source: Byte) : variant Visibility: default Description:
37.10.169
Synopsis:
Declaration: operator operator :=(Char): olevariant(const source: Char) : olevariant Visibility: default Description:
37.10.170
Synopsis:
Declaration: operator operator :=(Char): variant(const source: Char) : variant Visibility: default Description:
37.10.171
Visibility: default
37.10.172
Visibility: default
37.10.173
Synopsis:
Declaration: operator operator :=(currency): olevariant(const source: currency) : olevariant Visibility: default Description:
1352
37.10.174
Synopsis:
Declaration: operator operator :=(currency): variant(const source: currency) : variant Visibility: default Description:
37.10.175
Synopsis:
Declaration: operator operator :=(Double): olevariant(const source: Double) : olevariant Visibility: default Description:
37.10.176
Synopsis:
Declaration: operator operator :=(Double): variant(const source: Double) : variant Visibility: default Description:
37.10.177
Synopsis:
Declaration: operator operator :=(DWord): olevariant(const source: DWord) : olevariant Visibility: default Description:
37.10.178
Synopsis:
Declaration: operator operator :=(DWord): variant(const source: DWord) : variant Visibility: default Description:
37.10.179
Declaration: operator operator :=(extended): olevariant(const source: extended) : olevariant Visibility: default 1353
37.10.180
Declaration: operator operator :=(extended): variant(const source: extended) : variant Visibility: default
37.10.181
Synopsis:
Declaration: operator operator :=(Int64): olevariant(const source: Int64) : olevariant Visibility: default Description:
37.10.182
Synopsis:
Declaration: operator operator :=(Int64): variant(const source: Int64) : variant Visibility: default Description:
37.10.183
Synopsis:
Declaration: operator operator :=(longbool): olevariant(const source: longbool) : olevariant Visibility: default Description:
37.10.184
Synopsis:
Declaration: operator operator :=(longbool): variant(const source: longbool) : variant Visibility: default Description:
37.10.185
Synopsis:
Declaration: operator operator :=(LongInt): olevariant(const source: LongInt) : olevariant Visibility: default Description: 1354
37.10.186
Synopsis:
Declaration: operator operator :=(LongInt): variant(const source: LongInt) : variant Visibility: default Description:
37.10.187
Synopsis:
Declaration: operator operator :=(olevariant): ansistring(const source: olevariant) : ansistring Visibility: default Description:
37.10.188
Synopsis:
Declaration: operator operator :=(olevariant): Boolean(const source: olevariant) : Boolean Visibility: default Description:
37.10.189
Synopsis:
Declaration: operator operator :=(olevariant): Byte(const source: olevariant) : Byte Visibility: default Description:
37.10.190
Synopsis:
Declaration: operator operator :=(olevariant): Char(const source: olevariant) : Char Visibility: default Description:
37.10.191
Visibility: default
1355
37.10.192
Synopsis:
Declaration: operator operator :=(olevariant): currency(const source: olevariant) : currency Visibility: default Description:
37.10.193
Synopsis:
Declaration: operator operator :=(olevariant): Double(const source: olevariant) : Double Visibility: default Description:
37.10.194
Synopsis:
Declaration: operator operator :=(olevariant): DWord(const source: olevariant) : DWord Visibility: default Description:
37.10.195
Declaration: operator operator :=(olevariant): extended(const source: olevariant) : extended Visibility: default
37.10.196
Synopsis:
Declaration: operator operator :=(olevariant): Int64(const source: olevariant) : Int64 Visibility: default Description:
1356
37.10.197
Synopsis:
Declaration: operator operator :=(olevariant): longbool(const source: olevariant) : longbool Visibility: default Description:
37.10.198
Synopsis:
Declaration: operator operator :=(olevariant): LongInt(const source: olevariant) : LongInt Visibility: default Description:
37.10.199
Synopsis:
Declaration: operator operator :=(olevariant): QWord(const source: olevariant) : QWord Visibility: default Description:
37.10.200
Visibility: default
37.10.201
Synopsis:
Declaration: operator operator :=(olevariant): ShortInt(const source: olevariant) : ShortInt Visibility: default Description:
37.10.202
Synopsis:
Declaration: operator operator :=(olevariant): shortstring(const source: olevariant) : shortstring Visibility: default Description: 1357
37.10.203
Declaration: operator operator :=(olevariant): single(const source: olevariant) : single Visibility: default
37.10.204
Synopsis:
Declaration: operator operator :=(olevariant): SmallInt(const source: olevariant) : SmallInt Visibility: default Description:
37.10.205
Synopsis:
Declaration: operator operator :=(olevariant): TDateTime(const source: olevariant) : TDateTime Visibility: default Description:
37.10.206
Synopsis:
Declaration: operator operator :=(olevariant): TError(const source: olevariant) : TError Visibility: default Description:
37.10.207
Declaration: operator operator :=(olevariant): UnicodeString (const source: olevariant) : UnicodeString Visibility: default
37.10.208
Synopsis:
Declaration: operator operator :=(olevariant): variant(const source: olevariant) : variant Visibility: default Description: 1358
37.10.209
Synopsis:
Declaration: operator operator :=(olevariant): WideChar(const source: olevariant) : WideChar Visibility: default Description:
37.10.210
Synopsis:
Declaration: operator operator :=(olevariant): widestring(const source: olevariant) : widestring Visibility: default Description:
37.10.211
Synopsis:
Declaration: operator operator :=(olevariant): Word(const source: olevariant) : Word Visibility: default Description:
37.10.212
Synopsis:
Declaration: operator operator :=(olevariant): wordbool(const source: olevariant) : wordbool Visibility: default Description:
37.10.213
Synopsis:
Declaration: operator operator :=(QWord): olevariant(const source: QWord) : olevariant Visibility: default Description:
1359
37.10.214
Synopsis:
Declaration: operator operator :=(QWord): variant(const source: QWord) : variant Visibility: default Description:
37.10.215
Visibility: default
37.10.216
Visibility: default
37.10.217
Synopsis:
Declaration: operator operator :=(real48): Double(b: real48) : Double Visibility: default Description:
37.10.218
Visibility: default
37.10.219
Synopsis:
Declaration: operator operator :=(ShortInt): olevariant(const source: ShortInt) : olevariant Visibility: default Description:
37.10.220
Synopsis:
Declaration: operator operator :=(ShortInt): variant(const source: ShortInt) : variant Visibility: default Description: 1360
37.10.221
Synopsis:
Declaration: operator operator :=(shortstring): olevariant(const source: shortstring) : olevariant Visibility: default Description:
37.10.222
Synopsis:
Declaration: operator operator :=(shortstring): variant(const source: shortstring) : variant Visibility: default Description:
37.10.223
Declaration: operator operator :=(single): olevariant(const source: single) : olevariant Visibility: default
37.10.224
Visibility: default
37.10.225
Synopsis:
Declaration: operator operator :=(SmallInt): olevariant(const source: SmallInt) : olevariant Visibility: default Description:
37.10.226
Synopsis:
Declaration: operator operator :=(SmallInt): variant(const source: SmallInt) : variant Visibility: default Description:
1361
37.10.227
Synopsis:
Declaration: operator operator :=(TDateTime): olevariant(const source: TDateTime) : olevariant Visibility: default Description:
37.10.228
Synopsis:
Declaration: operator operator :=(TDateTime): variant(const source: TDateTime) : variant Visibility: default Description:
37.10.229
Synopsis:
Declaration: operator operator :=(TError): olevariant(const source: TError) : olevariant Visibility: default Description:
37.10.230
Synopsis:
Declaration: operator operator :=(TError): variant(const source: TError) : variant Visibility: default Description:
37.10.231
Declaration: operator operator :=(UCS4String): variant(const source: UCS4String) : variant Visibility: default
37.10.232
Declaration: operator operator :=(UnicodeString): olevariant (const source: UnicodeString) : olevariant Visibility: default 1362
37.10.233
Declaration: operator operator :=(UnicodeString): variant (const source: UnicodeString) : variant Visibility: default
37.10.234
Declaration: operator operator :=(UTF8String): variant(const source: UTF8String) : variant Visibility: default
37.10.235
Synopsis:
Declaration: operator operator :=(variant): ansistring(const source: variant) : ansistring Visibility: default Description:
37.10.236
Synopsis:
Declaration: operator operator :=(variant): Boolean(const source: variant) : Boolean Visibility: default Description:
37.10.237
Synopsis:
Declaration: operator operator :=(variant): Byte(const source: variant) : Byte Visibility: default Description:
37.10.238
Synopsis:
Declaration: operator operator :=(variant): Char(const source: variant) : Char Visibility: default Description:
1363
37.10.239
Visibility: default
37.10.240
Synopsis:
Declaration: operator operator :=(variant): currency(const source: variant) : currency Visibility: default Description:
37.10.241
Synopsis:
Declaration: operator operator :=(variant): Double(const source: variant) : Double Visibility: default Description:
37.10.242
Synopsis:
Declaration: operator operator :=(variant): DWord(const source: variant) : DWord Visibility: default Description:
37.10.243
Declaration: operator operator :=(variant): extended(const source: variant) : extended Visibility: default
37.10.244
Synopsis:
Declaration: operator operator :=(variant): Int64(const source: variant) : Int64 Visibility: default Description:
1364
37.10.245
Synopsis:
Declaration: operator operator :=(variant): longbool(const source: variant) : longbool Visibility: default Description:
37.10.246
Synopsis:
Declaration: operator operator :=(variant): LongInt(const source: variant) : LongInt Visibility: default Description:
37.10.247
Synopsis:
Declaration: operator operator :=(variant): olevariant(const source: variant) : olevariant Visibility: default Description:
37.10.248
Synopsis:
Declaration: operator operator :=(variant): QWord(const source: variant) : QWord Visibility: default Description:
37.10.249
Visibility: default
37.10.250
Synopsis:
Declaration: operator operator :=(variant): ShortInt(const source: variant) : ShortInt Visibility: default Description: 1365
37.10.251
Synopsis:
Declaration: operator operator :=(variant): shortstring(const source: variant) : shortstring Visibility: default Description:
37.10.252
Visibility: default
37.10.253
Synopsis:
Declaration: operator operator :=(variant): SmallInt(const source: variant) : SmallInt Visibility: default Description:
37.10.254
Synopsis:
Declaration: operator operator :=(variant): TDateTime(const source: variant) : TDateTime Visibility: default Description:
37.10.255
Synopsis:
Declaration: operator operator :=(variant): TError(const source: variant) : TError Visibility: default Description:
37.10.256
Declaration: operator operator :=(variant): unicodestring(const source: variant) : unicodestring Visibility: default
1366
37.10.257
Declaration: operator operator :=(variant): UTF8String(const source: variant) : UTF8String Visibility: default
37.10.258
Synopsis:
Declaration: operator operator :=(variant): WideChar(const source: variant) : WideChar Visibility: default Description:
37.10.259
Synopsis:
Declaration: operator operator :=(variant): widestring(const source: variant) : widestring Visibility: default Description:
37.10.260
Synopsis:
Declaration: operator operator :=(variant): Word(const source: variant) : Word Visibility: default Description:
37.10.261
Synopsis:
Declaration: operator operator :=(variant): wordbool(const source: variant) : wordbool Visibility: default Description:
37.10.262
Synopsis:
Declaration: operator operator :=(WideChar): olevariant(const source: WideChar) : olevariant Visibility: default Description: 1367
37.10.263
Synopsis:
Declaration: operator operator :=(WideChar): variant(const source: WideChar) : variant Visibility: default Description:
37.10.264
Synopsis:
Declaration: operator operator :=(widestring): olevariant(const source: widestring) : olevariant Visibility: default Description:
37.10.265
Synopsis:
Declaration: operator operator :=(widestring): variant(const source: widestring) : variant Visibility: default Description:
37.10.266
Synopsis:
Declaration: operator operator :=(Word): olevariant(const source: Word) : olevariant Visibility: default Description:
37.10.267
Synopsis:
Declaration: operator operator :=(Word): variant(const source: Word) : variant Visibility: default Description:
1368
37.10.268
Synopsis:
Declaration: operator operator :=(wordbool): olevariant(const source: wordbool) : olevariant Visibility: default Description:
37.10.269
Synopsis:
Declaration: operator operator :=(wordbool): variant(const source: wordbool) : variant Visibility: default Description:
37.10.270
Synopsis: Implement < (less than) operation on variants. Declaration: operator operator <(variant, variant): Boolean(const op1: variant; const op2: variant) : Boolean Visibility: default Description: The implementation of the "less than" comparison (<) operation is delegated to the variant manager with operation opcmplt. Errors: Execution of this operator may result in an exception if no variant manager is installed or if the types of the operand are not suitable for the operation. See also: operator >(variant, variant): boolean (1370)
37.10.271
Synopsis: Implement <= (less than than or equal) operation on variants. Declaration: operator operator <=(variant, variant): Boolean(const op1: variant; const op2: variant) : Boolean Visibility: default Description: The implementation of the "less than or equal" comparison (<=) operation is delegated to the variant manager with operation opcmple. Errors: Execution of this operator may result in an exception if no variant manager is installed or if the types of the operand are not suitable for the operation. See also: operator <(variant, variant): boolean (1369)
1369
37.10.272
Synopsis: Implement = (equality) operation on variants. Declaration: operator operator =(variant, variant): Boolean(const op1: variant; const op2: variant) : Boolean Visibility: default Description: The implementation of the equality (=) operation is delegated to the variant manager with operation opcmpeq. Errors: Execution of this operator may result in an exception if no variant manager is installed or if the types of the operand are not suitable for the operation. See also: operator <(variant, variant): boolean (1369)
37.10.273
Synopsis: Implement > (greater than) operation on variants. Declaration: operator operator >(variant, variant): Boolean(const op1: variant; const op2: variant) : Boolean Visibility: default Description: The implementation of the "greater than" comparison (>) operation is delegated to the variant manager with operation opcmpgt. Errors: Execution of this operator may result in an exception if no variant manager is installed or if the types of the operand are not suitable for the operation. See also: operator <(variant, variant): boolean (1369)
37.10.274
Synopsis: Implement >= (greater than or equal) operation on variants. Declaration: operator operator >=(variant, variant): Boolean(const op1: variant; const op2: variant) : Boolean Visibility: default Description: The implementation of the "greater than or equal" comparison (>=) operation is delegated to the variant manager with operation opcmpge. Errors: Execution of this operator may result in an exception if no variant manager is installed or if the types of the operand are not suitable for the operation. See also: operator <(variant, variant): boolean (1369)
1370
37.10.275
Synopsis: Implement logical/binary and operation on variants Declaration: operator operator and(variant, variant): variant(const op1: variant; const op2: variant) : variant Visibility: default Description: The implementation of the and operation is delegated to the variant manager with operation opand. Errors: Execution of this operator may result in an exception if no variant manager is installed or if the types of the operand are not suitable for the operation. See also: operator or(variant, variant): variant (1372), operator xor(variant, variant): variant (1373), operator not(variant): variant (1372)
37.10.276
Synopsis: Implement div (integer division) operation on variants. Declaration: operator operator div(variant, variant): variant(const op1: variant; const op2: variant) : variant Visibility: default Description: The implementation of the integer division Div operation is delegated to the variant manager with operation opintdivide. Errors: Execution of this operator may result in an exception if no variant manager is installed or if the types of the operand are not suitable for the operation. See also: operator mod(variant, variant): variant (1371)
37.10.277
Synopsis: Implement mod (modulo) operation on variants. Declaration: operator operator mod(variant, variant): variant(const op1: variant; const op2: variant) : variant Visibility: default Description: The implementation of the modulo Mod operation is delegated to the variant manager with operation opModulus. Errors: Execution of this operator may result in an exception if no variant manager is installed or if the types of the operand are not suitable for the operation. See also: operator div(variant, variant): variant (1371)
1371
37.10.278
Synopsis: Implement logical/binary not operation on variants Declaration: operator operator not(variant): variant(const op: variant) : variant Visibility: default Description: The implementation of the not operation is delegated to the variant manager with operation opnot. Errors: Execution of this operator may result in an exception if no variant manager is installed or if the types of the operand are not suitable for the operation. See also: operator and(variant, variant): variant (1371), operator or(variant, variant): variant (1372), operator xor(variant, variant): variant (1373)
37.10.279
Synopsis: Implement logical/binary or operation on variants Declaration: operator operator or(variant, variant): variant(const op1: variant; const op2: variant) : variant Visibility: default Description: The implementation of the or operation is delegated to the variant manager with operation opor. Errors: Execution of this operator may result in an exception if no variant manager is installed or if the types of the operand are not suitable for the operation. See also: operator and(variant, variant): variant (1371), operator xor(variant, variant): variant (1373), operator not(variant): variant (1372)
37.10.280
Synopsis: Implement binary shl operation on variants. Declaration: operator operator shl(variant, variant): variant(const op1: variant; const op2: variant) : variant Visibility: default Description: The implementation of the shl operation is delegated to the variant manager with operation opshiftleft. Errors: Execution of this operator may result in an exception if no variant manager is installed or if the types of the operand are not suitable for the operation. See also: operator shr(variant, variant): variant (1372)
37.10.281
Synopsis: Implement binary shr operation on variants. Declaration: operator operator shr(variant, variant): variant(const op1: variant; const op2: variant) : variant 1372
Visibility: default Description: The implementation of the shr operation is delegated to the variant manager with operation opshiftright. Errors: Execution of this operator may result in an exception if no variant manager is installed or if the types of the operand are not suitable for the operation. See also: operator shl(variant, variant): variant (1372)
37.10.282
Synopsis: Implement logical/binary xor operation on variants Declaration: operator operator xor(variant, variant): variant(const op1: variant; const op2: variant) : variant Visibility: default Description: The implementation of the xor operation is delegated to the variant manager with operation opxor. Errors: Execution of this operator may result in an exception if no variant manager is installed or if the types of the operand are not suitable for the operation. See also: operator or(variant, variant): variant (1372), operator and(variant, variant): variant (1371), operator not(variant): variant (1372)
37.10.283
Ord
Synopsis: Return ordinal value of an ordinal type. Declaration: function Ord(X: TOrdinal) : LongInt Visibility: default Description: Ord returns the Ordinal value of a ordinal-type variable X. Historical note: Originally, Pascal did not have typecasts and ord was a necessary function in order to do certain operations on non-integer ordinal types. With the arrival of typecasting a generic approach became possible, making ord mostly obselete. However ord is not considered deprecated and remains in wide use today. Errors: None. See also: Chr (1292), Succ (1407), Pred (1377), High (1328), Low (1343) Listing: ./refex/ex45.pp
Program Example45 ; { Program t o demonstrate t h e Ord , Pred , Succ f u n c t i o n s . } Type TEnum = ( Zero , One , Two , Three , Four ) ; Var X : Longint ; Y : TEnum ;
1373
37.10.284
Pack
Synopsis: Create packed array from normal array Declaration: procedure Pack(const A: UnpackedArrayType;StartIndex: TIndexType; out Z: PackedArrayType) Visibility: default Description: Pack will copy the elements of an unpacked array (A) to a packed array (Z). It will start the copy at the index denoted by StartIndex. The type of the index variable StartIndex must match the type of the index of A. The elements are always transferred to the beginning of the packed array Z. (i.e. it starts at Low(Z)). Obviously, the type of the elements of the arrays A and Z must match. See also: unpack (1417)
37.10.285
Paramcount
Synopsis: Return number of command-line parameters passed to the program. Declaration: function Paramcount : LongInt Visibility: default Description: Paramcount returns the number of command-line arguments. If no arguments were given to the running program, 0 is returned. Errors: None. See also: Paramstr (1375) Listing: ./refex/ex46.pp
Program Example46 ; { Program t o demonstrate t h e ParamCount and ParamStr f u n c t i o n s . } Var I : Longint ; begin W r i t e l n ( paramstr ( 0 ) , : Got , ParamCount , commandl i n e parameters : ) ; For i : = 1 to ParamCount do W r i t e l n ( ParamStr ( i ) ) ; end .
1374
37.10.286
ParamStr
Synopsis: Return value of a command-line argument. Declaration: function ParamStr(l: LongInt) : string Visibility: default Description: Paramstr returns the L-th command-line argument. L must be between 0 and Paramcount, these values included. The zeroth argument is the path and le name with which the program was started. The command-line parameters will be truncated to a length of 255, even though the operating system may support bigger command-lines. The Objpas unit (used in objfpc or delphi mode) denes versions of Paramstr which return the full-length command-line arguments, using ansistrings. In the interest of portability, the ParamStr function tries to behave the same on all operating systems: like the original ParamStr function in Turbo Pascal. This means even on Unix, paramstr(0) returns the full path to the program executable. A notable exception is Mac OS X, where the return value depends on how the application was started. It may be that just the name of the application is returned (in case of a command-line launch) In general, its a bad idea to rely on the location of the binary. Often, this goes against best OS practices. Conguration data should (or can) not be stored next to the binary, but on designated locations. What locations these are, is very much operating system dependent. Therefore, ParamStr(0) should be used with care. For an example, see Paramcount (1374). Errors: None. See also: Paramcount (1374)
37.10.287
pi
Synopsis: Return the value of PI. Declaration: function pi : ValReal Visibility: default Description: Pi returns the value of Pi (3.1415926535897932385). Errors: None. See also: Cos (1300), Sin (1400) Listing: ./refex/ex47.pp
Program Example47 ; { Program t o demonstrate t h e P i f u n c t i o n . } begin W r i t e l n ( Pi ) ; W r i t e l n ( Sin ( Pi ) ) ; end .
{ 3.1415926 }
1375
37.10.288
Pos
Synopsis: Search for substring in a string. Declaration: function Pos(const substr: shortstring;const s: shortstring) : SizeInt function Pos(C: Char;const s: shortstring) : SizeInt function Pos(const Substr: ShortString;const Source: AnsiString) : SizeInt function pos(const substr: shortstring;c: Char) : SizeInt function Pos(const Substr: AnsiString;const Source: AnsiString) : SizeInt function Pos(c: Char;const s: AnsiString) : SizeInt function Pos(const Substr: UnicodeString;const Source: UnicodeString) : SizeInt function Pos(c: Char;const s: UnicodeString) : SizeInt function Pos(c: UnicodeChar;const s: UnicodeString) : SizeInt function Pos(c: AnsiString;const s: UnicodeString) : SizeInt function Pos(c: UnicodeString;const s: AnsiString) : SizeInt function Pos(c: ShortString;const s: UnicodeString) : SizeInt function Pos(const Substr: WideString;const Source: WideString) : SizeInt function Pos(c: Char;const s: WideString) : SizeInt function Pos(c: WideChar;const s: WideString) : SizeInt function Pos(c: WideChar;const s: AnsiString) : SizeInt function Pos(c: AnsiString;const s: WideString) : SizeInt function Pos(c: WideString;const s: AnsiString) : SizeInt function Pos(c: ShortString;const s: WideString) : SizeInt function Pos(c: Char;const v: Variant) : SizeInt function Pos(s: ShortString;const v: Variant) : SizeInt function Pos(a: AnsiString;const v: Variant) : SizeInt function Pos(w: WideString;const v: Variant) : SizeInt function Pos(w: UnicodeString;const v: Variant) : SizeInt function Pos(v: Variant;const c: Char) : SizeInt function Pos(v: Variant;const s: ShortString) : SizeInt function Pos(v: Variant;const a: AnsiString) : SizeInt function Pos(v: Variant;const w: WideString) : SizeInt function Pos(v: Variant;const w: UnicodeString) : SizeInt function Pos(v1: Variant;const v2: Variant) : SizeInt Visibility: default Description: Pos returns the index of Substr in S, if S contains Substr. In case Substr isnt found, 0 is returned. The search is case-sensitive. Errors: None See also: Length (1340), Copy (1300), Delete (1303), Insert (1335) Listing: ./refex/ex48.pp
Program Example48 ; { Program t o demonstrate t h e Pos f u n c t i o n . } Var S : String ;
1376
begin S: = The f i r s t space i n t h i s sentence i s a t p o s i t i o n : ; W r i t e l n ( S , pos ( ,S ) ) ; S: = The l a s t l e t t e r o f t h e a l p h a b e t doesn t appear i n t h i s sentence ; I f ( Pos ( Z ,S ) = 0 ) and ( Pos ( z ,S ) = 0 ) then Writeln ( S ) ; end .
37.10.289
Pred
Synopsis: Return previous element for an ordinal type. Declaration: function Pred(X: TOrdinal) : TOrdinal Visibility: default Description: Pred returns the element that precedes the element that was passed to it. If it is applied to the rst value of the ordinal type, and the program was compiled with range checking on ({$R+}), then a run-time error will be generated. for an example, see Ord (1373) Errors: Run-time error 201 is generated when the result is out of range. See also: Ord (1373), Pred (1377), High (1328), Low (1343)
37.10.290
prefetch
Synopsis: Prefetch a memory location Declaration: procedure prefetch(const mem) Visibility: default Description: Prefetch can be used to optimize the CPU behaviour by already loading a memory location. It is mainly used as a hint for those processors that support it. Errors: None.
37.10.291
ptr
Synopsis: Combine segment and offset to pointer Declaration: function ptr(sel: LongInt;off: LongInt) : farpointer Visibility: default Description: Ptr returns a pointer, pointing to the address specied by segment Sel and offset Off. Remark: 1.In the 32/64-bit at-memory model supported by Free Pascal, this function is obsolete. 2.The returned address is simply the offset. Errors: None. See also: Addr (1280)
1377
Listing: ./refex/ex59.pp
Program Example59 ; { Program t o demonstrate t h e P t r ( c o m p a b i l i t y ) f u n c t i o n . } type p S t r i n g = ^ S t r i n g ; Var P : p S t r i n g ; S : String ; begin S: = H e l l o , World ! ; P: = p S t r i n g ( P t r ( Seg (S ) , L o n g i n t ( Ofs (S ) ) ) ) ; {P now p o i n t s t o S ! } Writeln ( P ^ ) ; end .
37.10.292
RaiseList
Synopsis: List of currently raised exceptions. Declaration: function RaiseList : PExceptObject Visibility: default Description: RaiseList returns a pointer to the list of currently raised exceptions (i.e. a pointer to the rst exception block.
37.10.293
Random
Synopsis: Generate random number Declaration: function Random(l: LongInt) : LongInt function Random(l: Int64) : Int64 function Random : extended Visibility: default Description: Random returns a random number larger or equal to 0 and strictly less than L. If the argument L is omitted, a Real number between 0 and 1 is returned. (0 included, 1 excluded) Errors: None. See also: Randomize (1379) Listing: ./refex/ex49.pp
Program Example49 ; { Program t o demonstrate t h e Random and Randomize f u n c t i o n s . } Var I , Count , guess : L o n g i n t ; R : Real ; begin
1378
Randomize ; { T h i s way we generate a new sequence every t i m e t h e program i s run } Count : = 0 ; For i : = 1 to 1 0 0 0 do I f Random> 0 . 5 then inc ( Count ) ; W r i t e l n ( Generated , Count , numbers > 0 . 5 ) ; W r i t e l n ( o u t o f 1 0 0 0 generated numbers . ) ; count : = 0 ; For i : = 1 to 5 do begin w r i t e ( Guess a number between 1 and 5 : ) ; readln ( Guess ) ; I f Guess=Random( 5 ) + 1 then inc ( count ) ; end ; W r i t e l n ( You guessed , Count , o u t o f 5 c o r r e c t . ) ; end .
37.10.294
Randomize
Synopsis: Initialize random number generator Declaration: procedure Randomize Visibility: default Description: Randomize initializes the random number generator of Free Pascal, by giving a value to Randseed, calculated with the system clock. For an example, see Random (1378). Errors: None. See also: Random (1378)
37.10.295
Read
Synopsis: Read from a text le into variable Declaration: procedure Read(var F: Text;Args: Arguments) procedure Read(Args: Arguments) Visibility: default Description: Read reads one or more values from a le F, and stores the result in V1, V2, etc.; If no le F is specied, then standard input is read. If F is of type Text, then the variables V1, V2 etc. must be of type Char, Integer, Real, String. If F is a typed le, then each of the variables must be of the type specied in the declaration of F. Untyped les are not allowed as an argument. In earlier versions of FPC, it was also allowed to read Pchar null-terminated strings, but this has been removed, since there is no buffer checking possible. Errors: If no data is available, empty values are returned (0 for ordinal values, empty strings for string values) See also: Readln (1381), Blockread (1287), Write (1423), Blockwrite (1288) Listing: ./refex/ex50.pp
1379
Program Example50 ; { Program t o demonstrate t h e Read ( Ln ) f u n c t i o n . } Var S : S t r i n g ; C : Char ; F : F i l e of char ; begin Assign ( F , ex50 . pp ) ; Reset ( F ) ; C: = A ; W r i t e l n ( The c h a r a c t e r s b e f o r e t h e f i r s t space i n ex50 . pp are : While not Eof ( f ) and ( C<> ) do Begin Read ( F ,C ) ; Write ( C ) ; end ; Writeln ; Close ( F ) ; W r i t e l n ( Type some words . An empty l i n e ends t h e program . ) ; repeat Readln ( S ) ; u n t i l S= ; end .
);
37.10.296
ReadBarrier
Synopsis: Memory Read Barrier Declaration: procedure ReadBarrier Visibility: default Description: ReadBarrier is a low-level instruction to force a read barrier in the CPU: all memory reads before the instruction will be nished before this instruction, before memory reads after the instruction occur. See also: ReadDependencyBarrier (1380), ReadWriteBarrier (1382), WriteBarrier (1423)
37.10.297
ReadDependencyBarrier
Synopsis: Memory Read Dependency Barrier Declaration: procedure ReadDependencyBarrier Visibility: default Description: ReadDependencyBarrier is a low-level instruction to force a read barrier in the CPU: all memory reads (loads) depending on previous loads are separate from the ones following the instruction. See also: ReadBarrier (1380), ReadWriteBarrier (1382), WriteBarrier (1423)
1380
37.10.298
ReadLn
Synopsis: Read from a text le into variable and goto next line Declaration: procedure ReadLn(var F: Text;Args: Arguments) procedure ReadLn(Args: Arguments) Visibility: default Description: Read reads one or more values from a le F, and stores the result in V1, V2, etc. After that it goes to the next line in the le. The end of the line is marked by the LineEnding character sequence (which is platform dependent). The end-of-line marker is not considered part of the line and is ignored. If no le F is specied, then standard input is read. The variables V1, V2 etc. must be of type Char, Integer, Real, String or PChar. For an example, see Read (1379). Errors: If no data is available, empty values are returned (0 for ordinal values, empty strings for string values) See also: Read (1379), Blockread (1287), Write (1423), Blockwrite (1288)
37.10.299
ReadStr
Synopsis: Read variables from a string Declaration: procedure ReadStr(const S: string;Args: Arguments) Visibility: default Description: ReadStr behaves like Read (1379), except that it reads its input from the string variable S instead of a le. Semantically, the ReadStr call is equivalent to writing the string to a le using the Write call, and then reading them into the various arguments Arg using the Read call from the same le: var F : Text; begin Rewrite(F); Write(F,S); Close(F); Reset(F); Read(F,Args); Close(F); end; Obviously, the ReadStr call does not use a temporary le. ReadStr is dened in the ISO Extended Pascal standard. More information on the allowed arguments and the behaviour of the arguments can be found in the description of Read (1379). See also: Read (1379), WriteStr (1424), Write (1423)
1381
37.10.300
ReadWriteBarrier
Synopsis: Memory read/write barrier Declaration: procedure ReadWriteBarrier Visibility: default Description: ReadWriteBarrier is a low-level instruction to force a read/write barrier in the CPU: both read (Loads) and write (stores) operations before and after the barrier are separate. See also: ReadBarrier (1380), ReadDependencyBarrier (1380), WriteBarrier (1423)
37.10.301
Real2Double
Synopsis: Convert Turbo Pascal style real to double. Declaration: function Real2Double(r: real48) : Double Visibility: default Description: The Real2Double function converts a Turbo Pascal style real (6 bytes long) to a native Free Pascal double type. It can be used e.g. to read old binary TP les with FPC and convert them to Free Pacal binary les. Note that the assignment operator has been overloaded so a Real48 type can be assigned directly to a double or extended. Errors: None. Listing: ./refex/ex110.pp
program Example110 ; { Program t o demonstrate t h e Real2Double f u n c t i o n . } Var i R D E F
: : : : :
begin Assign ( F , r e a l s . d a t ) ; Reset ( f ) ; For I : = 1 to 1 0 do begin Read ( F ,R ) ; D: = Real2Double (R ) ; W r i t e l n ( Real , i , : ,D ) ; D: =R; W r i t e l n ( Real ( d i r e c t t o double ) , i , : ,D ) ; E: =R; W r i t e l n ( Real ( d i r e c t t o Extended ) , i , : ,E ) ; end ; Close ( f ) ; end .
1382
37.10.302
ReAllocMem
Synopsis: Re-allocate memory on the heap Declaration: function ReAllocMem(var p: pointer;Size: PtrUInt) : pointer Visibility: default Description: ReAllocMem resizes the memory pointed to by P so it has size Size. The value of P may change during this operation. The contents of the memory pointed to by P (if any) will be copied to the new location, but may be truncated if the newly allocated memory block is smaller in size. If a larger block is allocated, only the used memory is initialized, extra memory will not be zeroed out. Note that P may be nil, in that case the behaviour of ReAllocMem is equivalent to Getmem. See also: GetMem (1322), FreeMem (1320)
37.10.303
ReAllocMemory
Synopsis: Alias for ReAllocMem (1383) Declaration: function ReAllocMemory(p: pointer;Size: PtrUInt) : pointer Visibility: default Description: ReAllocMemory is an alias for ReAllocMem (1383). See also: ReAllocMem (1383)
37.10.304
ReleaseExceptionObject
Synopsis: Decrease the reference count of the current exception object. Declaration: procedure ReleaseExceptionObject Visibility: default Description: ReleaseExceptionObject decreases the reference count of the current exception object. This should be called whenever a reference to the exception object was obtained via the AcquireExceptionObject (1279) call. Calling this method is only valid within an except block. Errors: If there is no current exception object, a run-time error 231 will occur. See also: AcquireExceptionObject (1279)
37.10.305
Declaration: procedure procedure procedure procedure procedure procedure Visibility: default
Rename
Rename(var Rename(var Rename(var Rename(var Rename(var Rename(var f: f: f: t: t: t: File;const s: string) File;p: PChar) File;c: Char) Text;const s: string) Text;p: PChar) Text;c: Char)
1383
Description: Rename changes the name of the assigned le F to S. F must be assigned, but not opened. Errors: Depending on the state of the {$I} switch, a runtime error can be generated if there is an error. In the {$I-} state, use IOResult to check for errors. See also: Erase (1310) Listing: ./refex/ex77.pp
Program Example77 ; { Program t o demonstrate t h e Rename f u n c t i o n . } Var F : Text ; begin Assign ( F , paramstr ( 1 ) ) ; Rename ( F , paramstr ( 2 ) ) ; end .
37.10.306
Declaration: procedure procedure procedure procedure Visibility: default
Reset
Reset(var Reset(var Reset(var Reset(var f: f: f: t: File;l: LongInt) File) TypedFile) Text)
Description: Reset opens a le F for reading. F can be any le type. If F is a text le, or refers to standard I/O (e.g : ) then it is opened read-only, otherwise it is opened using the mode specied in filemode. If F is an untyped le, the record size can be specied in the optional parameter L. A default value of 128 is used. File sharing is not taken into account when calling Reset. Errors: Depending on the state of the {$I} switch, a runtime error can be generated if there is an error. In the {$I-} state, use IOResult to check for errors. See also: Rewrite (1385), Assign (1283), Close (1292), Append (1281) Listing: ./refex/ex51.pp
Program Example51 ; { Program t o demonstrate t h e Reset f u n c t i o n . } Function F i l e E x i s t s ( Name : S t r i n g ) : boolean ; Var F : F i l e ; begin { $ i } Assign ( F ,Name ) ; Reset ( F ) ; { $I+} F i l e E x i s t s : = ( IoResult = 0 ) and ( Name<> ) ; Close ( f ) ;
1384
37.10.307
ResumeThread
Synopsis: Resume a suspended thread. Declaration: function ResumeThread(threadHandle: TThreadID) : DWord Visibility: default Description: ResumeThread causes a suspended thread (using SuspendThread (1407)) to resume its execution. The thread is identied with its handle or ID threadHandle. The function returns zero if succesful. A nonzero return value indicates failure. Errors: If a failure occurred, a nonzero result is returned. The meaning is system dependent. See also: SuspendThread (1407), KillThread (1339)
37.10.308
Declaration: procedure procedure procedure procedure Visibility: default
Rewrite
Rewrite(var Rewrite(var Rewrite(var Rewrite(var f: f: f: t: File;l: LongInt) File) TypedFile) Text)
Description: Rewrite opens a le F for writing. F can be any le type. If F is an untyped or typed le, then it is opened for reading and writing. If F is an untyped le, the record size can be specied in the optional parameter L. Default a value of 128 is used. if Rewrite nds a le with the same name as F, this le is truncated to length 0. If it doesnt nd such a le, a new le is created. Contrary to Turbo Pascal, Free Pascal opens the le with mode fmoutput. If it should be opened in fminout mode, an extra call to Reset (1384) is needed. File sharing is not taken into account when calling Rewrite. Errors: Depending on the state of the {$I} switch, a runtime error can be generated if there is an error. In the {$I-} state, use IOResult to check for errors. See also: Reset (1384), Assign (1283), Close (1292), Flush (1318), Append (1281) Listing: ./refex/ex52.pp
Program Example52 ; { Program t o demonstrate t h e R e w r i t e f u n c t i o n . } Var F : F i l e ;
1385
I : longint ; begin Assign ( F , Test . tmp ) ; { Create t h e f i l e . Recordsize i s 4 } Rewrite ( F , Sizeof ( I ) ) ; For I : = 1 to 1 0 do BlockWrite ( F , I , 1 ) ; close ( f ) ; { F c o n t a i n s now a b i n a r y r e p r e s e n t a t i o n o f 1 0 l o n g i n t s going from 1 t o 1 0 } end .
37.10.309
rmdir
Overload
Synopsis: Remove directory when empty. Declaration: procedure rmdir(const s: string); Visibility: default Description: Rmdir removes the directory S. Errors: Depending on the state of the {$I} switch, a runtime error can be generated if there is an error. In the {$I-} state, use IOResult to check for errors. See also: Chdir (1291), Mkdir (1345) Listing: ./refex/ex53.pp
Program Example53 ; { Program t o demonstrate t h e MkDir and RmDir f u n c t i o n s . } Const D : S t r i n g [ 8 ] = TEST . DIR ; Var S : S t r i n g ; begin W r i t e l n ( Making d i r e c t o r y ,D ) ; Mkdir ( D ) ; W r i t e l n ( Changing d i r e c t o r y t o ,D ) ; ChDir ( D ) ; GetDir ( 0 , S ) ; W r i t e l n ( C u r r e n t D i r e c t o r y i s : ,S ) ; WRiteln ( Going back ) ; ChDir ( . . ) ; W r i t e l n ( Removing d i r e c t o r y ,D ) ; RmDir ( D ) ; end .
37.10.310
RolByte
Synopsis: Rotate bits of a byte value to the left Declaration: function RolByte(const AValue: Byte) : Byte function RolByte(const AValue: Byte;const Dist: Byte) : Byte 1386
Visibility: default Description: RolByte rotates the bits of the byte AValue with Dist positions to the left. If Dist is not specied, then 1 is assumed. Errors: None. See also: RorByte (1388), RolWord (1387), RolDWord (1387), RolQWord (1387)
37.10.311
RolDWord
Synopsis: Rotate bits of a DWord (cardinal) value to the left Declaration: function RolDWord(const AValue: DWord) : DWord function RolDWord(const AValue: DWord;const Dist: Byte) : DWord Visibility: default Description: RolDWord rotates the bits of the DWord (cardinal) AValue with Dist positions to the left. If Dist is not specied, then 1 is assumed. Errors: None. See also: RolByte (1386), RolWord (1387), RorDWord (1388), RolQWord (1387)
37.10.312
RolQWord
Synopsis: Rotate bits of a QWord (64-bit) value to the left Declaration: function RolQWord(const AValue: QWord) : QWord function RolQWord(const AValue: QWord;const Dist: Byte) : QWord Visibility: default Description: RorQWord rotates the bits of the QWord (64-bit) AValue with Dist positions to the left. If Dist is not specied, then 1 is assumed. Errors: None. See also: RolByte (1386), RolWord (1387), RolDWord (1387), RorQWord (1388)
37.10.313
RolWord
Synopsis: Rotate bits of a word value to the left Declaration: function RolWord(const AValue: Word) : Word function RolWord(const AValue: Word;const Dist: Byte) : Word Visibility: default Description: RolWord rotates the bits of the word AValue with Dist positions to the right. If Dist is not specied, then 1 is assumed. Errors: None. See also: RolByte (1386), RorWord (1388), RolDWord (1387), RolQWord (1387)
1387
37.10.314
RorByte
Synopsis: Rotate bits of a byte value to the right Declaration: function RorByte(const AValue: Byte) : Byte function RorByte(const AValue: Byte;const Dist: Byte) : Byte Visibility: default Description: RorByte rotates the bits of the byte AValue with Dist positions to the right. If Dist is not specied, then 1 is assumed. Errors: None. See also: RolByte (1386), RorWord (1388), RorDWord (1388), RorQWord (1388)
37.10.315
RorDWord
Synopsis: Rotate bits of a DWord (cardinal) value to the right Declaration: function RorDWord(const AValue: DWord) : DWord function RorDWord(const AValue: DWord;const Dist: Byte) : DWord Visibility: default Description: RorDWord rotates the bits of the DWord (cardinal) AValue with Dist positions to the right. If Dist is not specied, then 1 is assumed. Errors: None. See also: RorByte (1388), RolDWord (1387), RorWord (1388), RorQWord (1388)
37.10.316
RorQWord
Synopsis: Rotate bits of a QWord (64-bit) value to the right Declaration: function RorQWord(const AValue: QWord) : QWord function RorQWord(const AValue: QWord;const Dist: Byte) : QWord Visibility: default Description: RorQWord rotates the bits of the QWord (64-bit) AValue with Dist positions to the right. If Dist is not specied, then 1 is assumed. Errors: None. See also: RorByte (1388), RorWord (1388), RorDWord (1388), RolQWord (1387)
37.10.317
RorWord
Synopsis: Rotate bits of a word value to the right Declaration: function RorWord(const AValue: Word) : Word function RorWord(const AValue: Word;const Dist: Byte) : Word Visibility: default Description: RorWord rotates the bits of the word AValue with Dist positions to the right. If Dist is not specied, then 1 is assumed. 1388
Errors: None. See also: RorByte (1388), RolWord (1387), RorDWord (1388), RorQWord (1388)
37.10.318
round
Synopsis: Round oating point value to nearest integer number. Declaration: function round(d: ValReal) : Int64 Visibility: default Description: Round rounds X to the closest integer, which may be bigger or smaller than X. In the case of .5, the algorithm uses "bankers rounding": .5 values are always rounded towards the even number. Errors: None. See also: Frac (1320), Int (1335), Trunc (1413) Listing: ./refex/ex54.pp
Program Example54 ; { Program t o demonstrate t h e Round f u n c t i o n . } begin Writeln Writeln Writeln Writeln Writeln Writeln end .
{ { { { { {
} } } } } }
37.10.319
RTLEventCreate
Synopsis: Create a new RTL event Declaration: function RTLEventCreate : PRTLEvent Visibility: default Description: RTLEventCreate creates and initializes a new RTL event. RTL events are used to notify other threads that a certain condition is met, and to notify other threads of condition changes (conditional variables). The function returns an initialized RTL event, which must be disposed of with RTLEventdestroy (1390) RTLEvent is used mainly for the synchronize method. See also: RTLEventDestroy (1390), RTLEventSetEvent (1390), RTLEventReSetEvent (1390), RTLEventWaitFor (1390)
1389
37.10.320
RTLeventdestroy
Synopsis: Destroy a RTL Event Declaration: procedure RTLeventdestroy(state: PRTLEvent) Visibility: default Description: RTLeventdestroy destroys the RTL event State. After a call to RTLeventdestroy, the State RTL event may no longer be used. See also: RTLEventCreate (1389), RTLEventResetEvent (1390), RTLEventSetEvent (1390)
37.10.321
Synopsis: Reset an event
RTLeventResetEvent
Declaration: procedure RTLeventResetEvent(state: PRTLEvent) Visibility: default Description: RTLeventResetEvent resets the event: this should be used to undo the signaled state of an event. Resetting an event that is not set (or was already reset) has no effect. See also: RTLEventCreate (1389), RTLEventDestroy (1390), RTLEventSetEvent (1390), RTLEventWaitFor (1390)
37.10.322
RTLeventSetEvent
Synopsis: Notify threads of the event. Declaration: procedure RTLeventSetEvent(state: PRTLEvent) Visibility: default Description: RTLeventSetEvent noties other threads which are listening, that the event has occurred. See also: RTLEventCreate (1389), RTLEventResetEvent (1390), RTLEventDestroy (1390), RTLEventWaitFor (1390)
37.10.323
RTLeventsync
Synopsis: Obsolete. Dont use Declaration: procedure RTLeventsync(m: trtlmethod;p: TProcedure) Visibility: default Description: RTLeventsync is obsolete, dont use it.
37.10.324
RTLeventWaitFor
Synopsis: Wait for an event. Declaration: procedure RTLeventWaitFor(state: PRTLEvent) procedure RTLeventWaitFor(state: PRTLEvent;timeout: LongInt) Visibility: default 1390
Description: RTLeventWaitFor suspends the thread till the event occurs. The event will occur when another thread calls RTLEventSetEvent (1390) on State. By default, the thread will be suspended indenitely. However, if TimeOut is specied, then the thread will resume after timeout milliseconds have elapsed. See also: RTLEventCreate (1389), RTLEventDestroy (1390), RTLEventSetEvent (1390), RTLEventWaitFor (1390)
37.10.325
RunError
Synopsis: Generate a run-time error. Declaration: procedure RunError(w: Word) procedure RunError Visibility: default Description: Runerror stops the execution of the program, and generates a run-time error ErrorCode. Errors: None. See also: Exit (1312), Halt (1326) Listing: ./refex/ex55.pp
Program Example55 ; { Program t o demonstrate t h e RunError f u n c t i o n . } begin { The program w i l l s t o p end e m i t a rune r r o r 1 0 6 } RunError ( 1 0 6 ) ; end .
37.10.326
SarInt64
Synopsis: 64-bit Shift Arithmetic Right Declaration: function SarInt64(const AValue: Int64;const Shift: Byte) : Int64 Visibility: default Description: SarInt64 performs an arithmetic right shift for Shift positions on a 64-bit integer AValue and returns the result. Shift is optional, and is 1 by default. The difference with the regular Shr shift operation is that the leftmost bit is preserved during the shift operation. See also: SarShortInt (1392), SarSmallInt (1392), SarLongInt (1391)
37.10.327
SarLongint
Synopsis: 32-bit Shift Arithmetic Right Declaration: function SarLongint(const AValue: LongInt;const Shift: Byte) : LongInt Visibility: default
1391
Description: SarLongint performs an arithmetic right shift for Shift positions on a 32-bit integer AValue and returns the result. Shift is optional, and is 1 by default. The difference with the regular Shr shift operation is that the leftmost bit is preserved during the shift operation. See also: SarShortInt (1392), SarSmallInt (1392), SarInt64 (1391)
37.10.328
SarShortint
Synopsis: 8-bit Shift Arithmetic Right Declaration: function SarShortint(const AValue: ShortInt;const Shift: Byte) : ShortInt Visibility: default Description: SarShortint performs an arithmetic right shift for Shift positions on an 8-bit integer AValue and returns the result. Shift is optional, and is 1 by default. The difference with the regular Shr shift operation is that the leftmost bit is preserved during the shift operation. See also: SarSmallint (1392), SarLongint (1391), SarInt64 (1391)
37.10.329
SarSmallint
Synopsis: 16-bit Shift Arithmetic Right Declaration: function SarSmallint(const AValue: SmallInt;const Shift: Byte) : SmallInt Visibility: default Description: SarSmallint performs an arithmetic right shift for Shift positions on an 16-bit integer AValue and returns the result. Shift is optional, and is 1 by default. The difference with the regular Shr shift operation is that the leftmost bit is preserved during the shift operation. See also: SarShortint (1392), SarLongint (1391), SarInt64 (1391)
37.10.330
Synopsis: Set le position
Seek
Declaration: procedure Seek(var f: File;Pos: Int64) Visibility: default Description: Seek sets the le-pointer for le F to record Nr. Count. The rst record in a le has Count=0. F can be any le type, except Text. If F is an untyped le, with no record size specied in Reset (1384) or Rewrite (1385), 128 is assumed. Errors: Depending on the state of the {$I} switch, a runtime error can be generated if there is an error. In the {$I-} state, use IOResult to check for errors. See also: Eof (1308), SeekEof (1393), SeekEoln (1394) Listing: ./refex/ex56.pp
1392
Program Example56 ; { Program t o demonstrate t h e Seek f u n c t i o n . } Var F : File ; I , j : longint ; begin { Create a f i l e and f i l l i t w i t h data } Assign ( F , t e s t . tmp ) ; Rewrite ( F ) ; { Create f i l e } Close ( f ) ; FileMode : = 2 ; ReSet ( F , Sizeof ( i ) ) ; { Opened read / w r i t e } For I : = 0 to 1 0 do BlockWrite ( F , I , 1 ) ; { Go Back t o t h e b e g i n i n g o f t h e f i l e } Seek ( F , 0 ) ; For I : = 0 to 1 0 do begin BlockRead ( F , J , 1 ) ; I f J<> I then W r i t e l n ( E r r o r : expected , i , , g o t , j ) ; end ; Close ( f ) ; end .
37.10.331
SeekEOF
Synopsis: Set le position to end of le Declaration: function SeekEOF(var t: Text) : Boolean function SeekEOF : Boolean Visibility: default Description: SeekEof returns True is the le-pointer is at the end of the le. It ignores all whitespace. Calling this function has the effect that the le-position is advanced until the rst non-whitespace character or the end-of-le marker is reached. If the end-of-le marker is reached, True is returned. Otherwise, False is returned. If the parameter F is omitted, standard Input is assumed. Remark: The SeekEOF function can only be used on real textles: when assigning the le to other kinds of (virtual) text les, the function may fail, although it will perform a number of tests to guard against wrong usage. Errors: A run-time error is generated if the le F isnt opened. See also: Eof (1308), SeekEoln (1394), Seek (1392) Listing: ./refex/ex57.pp
Program Example57 ; { Program t o demonstrate t h e SeekEof f u n c t i o n . }
1393
Var C : Char ; begin { t h i s w i l l p r i n t a l l c h a r a c t e r s from s t a n d a r d i n p u t except Whitespace c h a r a c t e r s . } While Not SeekEof do begin Read ( C ) ; Write ( C ) ; end ; end .
37.10.332
SeekEOLn
Synopsis: Set le position to end of line Declaration: function SeekEOLn(var t: Text) : Boolean function SeekEOLn : Boolean Visibility: default Description: SeekEoln returns True is the le-pointer is at the end of the current line. It ignores all whitespace. Calling this function has the effect that the le-position is advanced until the rst non-whitespace character or the end-of-line marker is reached. If the end-of-line marker is reached, True is returned. Otherwise, False is returned. The end-of-line marker is dened as #10, the LineFeed character. If the parameter F is omitted, standard Input is assumed. Errors: A run-time error is generated if the le F isnt opened. See also: Eof (1308), SeekEof (1393), Seek (1392) Listing: ./refex/ex58.pp
Program Example58 ; { Program t o demonstrate t h e SeekEoln f u n c t i o n . } Var C : Char ; begin { T h i s w i l l read t h e f i r s t l i n e o f s t a n d a r d o u t p u t and p r i n t a l l c h a r a c t e r s except whitespace . } While not SeekEoln do Begin Read ( c ) ; Write ( c ) ; end ; end .
37.10.333
Seg
Synopsis: Return segment Declaration: function Seg(var X) : LongInt Visibility: default 1394
Description: Seg returns the segment of the address of a variable. This function is only supported for compatibility. In Free Pascal, it returns always 0, since Free Pascal uses a at 32/64 bit memory model. In such a memory model segments have no meaning. Errors: None. See also: DSeg (1305), CSeg (1301), Ofs (1348), Ptr (1377) Listing: ./refex/ex60.pp
Program Example60 ; { Program t o demonstrate t h e Seg f u n c t i o n . } Var W : Word ; begin W: = Seg (W) ; end .
{ W c o n t a i n s i t s own Segment }
37.10.334
Setjmp
Synopsis: Save current execution point. Declaration: function Setjmp(var S: jmp_buf) : LongInt Visibility: default Description: SetJmp lls env with the necessary data for a jump back to the point where it was called. It returns zero if called in this way. If the function returns nonzero, then it means that a call to LongJmp (1343) with env as an argument was made somewhere in the program. Errors: None. See also: LongJmp (1343) Listing: ./refex/ex79.pp
program example79 ; { Program t o demonstrate t h e setjmp , longjmp f u n c t i o n s } procedure dojmp ( var env : jmp_buf ; v a l u e : l o n g i n t ) ; begin value : = 2 ; W r i t e l n ( Going t o jump ! ) ; { T h i s w i l l r e t u r n t o t h e setjmp c a l l , and r e t u r n v a l u e i n s t e a d o f 0 } longjmp ( env , v a l u e ) ; end ; var env : jmp_buf ; begin i f setjmp ( env ) = 0 then begin w r i t e l n ( Passed f i r s t t i m e . ) ;
1395
37.10.335
SetLength
Synopsis: Set length of a string. Declaration: procedure SetLength(var S: AStringType;Len: Integer) procedure SetLength(var A: DynArrayType;Len: Integer) Visibility: default Description: SetLength sets the length of the string S to Len. S can be an ansistring, a short string or a widestring. For ShortStrings, Len can maximally be 255. For AnsiStrings it can have any value. For AnsiString strings, SetLength {\em must} be used to set the length of the string. In the case of a dynamical array A, setlength sets the number of elements. The elements are numbered from index 0, so the count runs from 0 to Len-1. If Zero is specied, the array is cleared. Errors: None. See also: Length (1340) Listing: ./refex/ex85.pp
Program Example85 ; { Program t o demonstrate t h e SetLength f u n c t i o n . } Var S : S t r i n g ; begin F i l l C h a r (S [ 1 ] , 1 0 0 , # 3 2 ) ; Setlength (S, 1 0 0 ) ; W r i t e l n ( " ,S , " ) ; end .
37.10.336
SetMemoryManager
Synopsis: Set a memory manager Declaration: procedure SetMemoryManager(const MemMgr: TMemoryManager) Visibility: default Description: SetMemoryManager sets the current memory manager record to MemMgr. For an example, see the programmers guide. Errors: None. See also: GetMemoryManager (1323), IsMemoryManagerSet (1339)
1396
37.10.337
SetResourceManager
Synopsis: Set the resource manager Declaration: procedure SetResourceManager(const New: TResourceManager) Visibility: default Description: SetResourceManager sets the active resource manager to Manager. After a call to SetResourceManager, the functions in the Manager record will be used to handle resources. Note that it is not supported to change resource managers on-the-y: any resources or information about resources obtained should be discareded prior to a call to SetResourceManager. Typically, SetResourceManager should be called once, at program startup. Errors: None. See also: TResourceManager (1267), GetResourceManager (1323)
37.10.338
Declaration: procedure procedure procedure procedure procedure procedure procedure Visibility: default
SetString
SetString(out SetString(out SetString(out SetString(out SetString(out SetString(out SetString(out S: S: S: S: S: S: S: AnsiString;Buf: PChar;Len: SizeInt) AnsiString;Buf: PWideChar;Len: SizeInt) Shortstring;Buf: PChar;Len: SizeInt) UnicodeString;Buf: PUnicodeChar;Len: SizeInt) UnicodeString;Buf: PChar;Len: SizeInt) WideString;Buf: PWideChar;Len: SizeInt) WideString;Buf: PChar;Len: SizeInt)
Description: SetString sets the length of the string S to Len and if Buf is non-nil, copies Len characters from Buf into S. S can be an ansistring, a short string or a widestring. For ShortStrings, Len can maximally be 255. Errors: None. See also: SetLength (1396)
37.10.339
SetTextBuf
Synopsis: Set size of text le internal buffer Declaration: procedure SetTextBuf(var f: Text;var Buf) procedure SetTextBuf(var f: Text;var Buf;Size: SizeInt) Visibility: default Description: SetTextBuf assigns an I/O buffer to a text le. The new buffer is located at Buf and is Size bytes long. If Size is omitted, then SizeOf(Buf) is assumed. The standard buffer of any text le is 128 bytes long. For heavy I/O operations this may prove too slow. The SetTextBuf procedure allows to set a bigger buffer for the I/O of the application, thus reducing the number of system calls, and thus reducing the load on the system resources. The maximum size of the newly assigned buffer is 65355 bytes. Remark:
1397
Never assign a new buffer to an opened le. A new buffer can be assigned immediately after a call to Rewrite (1385), Reset (1384) or Append, but not after the le was read from/written to. This may cause loss of data. If a new buffer must be assigned after read/write operations have been performed, the le should be ushed rst. This will ensure that the current buffer is emptied. Take care that the assigned buffer is always valid. If a local variable is assigned as a buffer, then after the program exits the local program block, the buffer will no longer be valid, and stack problems may occur. Errors: No checking on Size is done. See also: Assign (1283), Reset (1384), Rewrite (1385), Append (1281) Listing: ./refex/ex61.pp
Program Example61 ; { Program t o demonstrate t h e SetTextBuf f u n c t i o n . } Var Fin , Fout : Text ; Ch : Char ; B u f i n , B u f o u t : Array [ 1 . . 1 0 0 0 0 ] of b y t e ; begin Assign ( Fin , paramstr ( 1 ) ) ; Reset ( F i n ) ; Assign ( Fout , paramstr ( 2 ) ) ; Rewrite ( Fout ) ; { T h i s i s harmless b e f o r e IO has begun } { Try t h i s program again on a b i g f i l e , a f t e r commenting o u t t h e f o l l o w i n g 2 l i n e s and r e c o m p i l i n g i t . } SetTextBuf ( Fin , B u f i n ) ; SetTextBuf ( Fout , B u f o u t ) ; While not eof ( F i n ) do begin Read ( Fin , ch ) ; w r i t e ( Fout , ch ) ; end ; Close ( F i n ) ; Close ( Fout ) ; end .
37.10.340
SetTextLineEnding
Synopsis: Set the end-of-line character for the given text le. Declaration: procedure SetTextLineEnding(var f: Text;Ending: string) Visibility: default Description: SetTextLineEnding sets the end-of-line character for the text le F to Ending. By default, this is the string indicated by DefaultTextLineBreakStyle (1230). Errors: None. See also: DefaultTextLineBreakStyle (1230), TTextLineBreakStyle (1269) 1398
37.10.341
SetThreadManager
Synopsis: Set the thread manager, optionally return the current thread manager. Declaration: function SetThreadManager(const NewTM: TThreadManager; var OldTM: TThreadManager) : Boolean function SetThreadManager(const NewTM: TThreadManager) : Boolean Visibility: default Description: SetThreadManager sets the thread manager to NewTM. If OldTM is given, SetThreadManager uses it to return the previously used thread manager. The function returns True if the threadmanager was set succesfully, False if an error occurred. For more information about thread programming, see the programmers guide. Errors: If an error occurred cleaning up the previous manager, or an error occurred initializing the new manager, False is returned. See also: GetThreadManager (1324), TThreadManager (1270)
37.10.342
SetUnicodeStringManager
Synopsis: Set the unicodestring manager Declaration: procedure SetUnicodeStringManager(const New: TUnicodeStringManager) procedure SetUnicodeStringManager(const New: TUnicodeStringManager; var Old: TUnicodeStringManager) Visibility: default Description: SetUnicodeStringManager sets the current unicodestring manager to New. Optionally, it returns the currently active widestring manager in Old. UnicodeStrings are implemented in different ways on different platforms. Therefore, the Free Pascal Runtime library has no xed implementation of widestring routines. Instead, it denes a UnicodeString manager record, with callbacks that can be set to an implementation which is most efcient on the current platform. On windows, standard Windows routines will be used. On Unix and Linux, an implementation based on the C library is available (in unit cwstring). It is possible to implement a custom unicodestring manager, optimized for the current application, without having to recompile the complete Run-Time Library. See also: TUnicodeStringManager (1272)
37.10.343
SetVariantManager
Synopsis: Set the current variant manager. Declaration: procedure SetVariantManager(const VarMgr: tvariantmanager) Visibility: default Description: SetVariantManager sets the variant manager to varmgr. See also: GetVariantManager (1324)
1399
37.10.344
SetWideStringManager
Synopsis: Set the widestring manager Declaration: procedure SetWideStringManager(const New: TUnicodeStringManager) procedure SetWideStringManager(const New: TUnicodeStringManager; var Old: TUnicodeStringManager) Visibility: default Description: SetWideStringManager sets the current widestring manager to New. Optionally, it returns the currently active widestring manager in Old. WideStrings are implemented in different ways on different platforms. Therefore, the Free Pascal Runtime library has no xed implementation of widestring routines. Instead, it denes a WideString manager record, with callbacks that can be set to an implementation which is most efcient on the current platform. On windows, standard Windows routines will be used. On Unix and Linux, an implementation based on the C library is available (in unit cwstring). It is possible to implement a custom widestring manager, optimized for the current application, without having to recompile the complete Run-Time Library. See also: TWideStringManager (1275)
37.10.345
ShortCompareText
Synopsis: Compare 2 shortstrings Declaration: function ShortCompareText(const S1: shortstring;const S2: shortstring) : SizeInt Visibility: default Description: ShortCompareText compares two shortstrings, S1 and S2, and returns the following result: <0if S1<S2. 0if S1=S2. >0if S1>S2. The comparision of the two strings is case-insensitive. The function does not take internationalization settings into account, it simply compares ASCII values. Errors: None. See also: CompareText (1489)
37.10.346
sin
Synopsis: Calculate sine of angle Declaration: function sin(d: ValReal) : ValReal Visibility: default Description: Sin returns the sine of its argument X, where X is an angle in radians. If the absolute value of the argument is larger than 263, then the result is undened. Errors: None.
1400
See also: Cos (1300), Pi (1375), Exp (1313), Ln (1341) Listing: ./refex/ex62.pp
Program Example62 ; { Program t o demonstrate t h e Sin f u n c t i o n . } begin W r i t e l n ( Sin ( Pi ) : 0 : 1 ) ; { Prints 0.0 } W r i t e l n ( Sin ( Pi / 2 ) : 0 : 1 ) ; { P r i n t s 1 . 0 } end .
37.10.347
SizeOf
Synopsis: Return size of a variable or type. Declaration: function SizeOf(X: TAnyType) : LongInt Visibility: default Description: SizeOf returns the size, in bytes, of any variable or type-identier. Remark: This isnt really a RTL function. Its result is calculated at compile-time, and hard-coded in the executable. Errors: None. See also: Addr (1280) Listing: ./refex/ex63.pp
Program Example63 ; { Program t o demonstrate t h e SizeOf f u n c t i o n . } Var I : Longint ; S : String [ 1 0 ] ; begin W r i t e l n ( SizeOf ( I ) ) ; W r i t e l n ( SizeOf (S ) ) ; end .
{ Prints 4 } { Prints 11 }
37.10.348
SizeofResource
Synopsis: Return the size of a particular resource Declaration: function SizeofResource(ModuleHandle: TFPResourceHMODULE; ResHandle: TFPResourceHandle) : LongWord Visibility: default Description: SizeOfResource returns the size of the resource identied by ResHandle in module identied by ModuleHandle. ResHandle should be obtained from a call to LoadResource (1342) Errors: In case of an error, 0 is returned. See also: FindResource (1317), FreeResource (1321), LoadResource (1342), LockResource (1343), UnlockResource (1417), FreeResource (1321) 1401
37.10.349
Space
Synopsis: Return a string of spaces Declaration: function Space(b: Byte) : shortstring Visibility: default Description: Space returns a shortstring with length B, consisting of spaces. See also: StringOfChar (1404)
37.10.350
Sptr
Synopsis: Return current stack pointer Declaration: function Sptr : Pointer Visibility: default Description: Sptr returns the current stack pointer. Errors: None. See also: SSeg (1403) Listing: ./refex/ex64.pp
program Example64 ; { Program t o demonstrate t h e s p t r f u n c t i o n . } var p : p t r u i n t ; begin p : = ofs ( s p t r ) ; { P Contains now t h e c u r r e n t s t a c k p o s i t i o n . } end .
37.10.351
Declaration: function function function function Visibility: default
sqr
sqr(l: sqr(l: sqr(l: sqr(d: LongInt) Int64) : QWord) : ValReal) : LongInt Int64 QWord : ValReal
Description: Sqr returns the square of its argument X. Errors: None. See also: Sqrt (1403), Ln (1341), Exp (1313) Listing: ./refex/ex65.pp
1402
Program Example65 ; { Program t o demonstrate t h e Sqr f u n c t i o n . } Var i : I n t e g e r ; begin For i : = 1 to 1 0 do w r i t e l n ( Sqr ( i ) : 3 ) ; end .
37.10.352
sqrt
Synopsis: Calculate the square root of a value Declaration: function sqrt(d: ValReal) : ValReal Visibility: default Description: Sqrt returns the square root of its argument X, which must be positive. Errors: If X is negative, then a run-time error is generated. See also: Sqr (1402), Ln (1341), Exp (1313) Listing: ./refex/ex66.pp
Program Example66 ; { Program t o demonstrate t h e S q r t f u n c t i o n . } begin W r i t e l n ( Sqrt ( 4 ) : 0 : 3 ) ; { P r i n t s 2 . 0 0 0 } W r i t e l n ( Sqrt ( 2 ) : 0 : 3 ) ; { P r i n t s 1 . 4 1 4 } end .
37.10.353
Sseg
Synopsis: Return stack segment register value. Declaration: function Sseg : Word Visibility: default Description: SSeg returns the Stack Segment. This function is only supported for compatibility reasons, as Sptr returns the correct contents of the stackpointer. Errors: None. See also: Sptr (1402) Listing: ./refex/ex67.pp
Program Example67 ; { Program t o demonstrate t h e SSeg f u n c t i o n . } Var W : L o n g i n t ;
1403
37.10.354
Str
Synopsis: Convert a numerical value to a string. Declaration: procedure Str(var X: TNumericType;var S: string) Visibility: default Description: Str returns a string which represents the value of X. X can be any numerical type. The actual declaration of Str is not according to pascal syntax, and should be procedure Str(var X: TNumericType[:NumPlaces[:Decimals]];var S: String) Where the optional NumPlaces and Decimals speciers control the formatting of the string: NumPlaces gives the total width of the string, and Decimals the number of decimals after the decimal separator char. Errors: None. See also: Val (1419) Listing: ./refex/ex68.pp
Program Example68 ; { Program t o demonstrate t h e S t r f u n c t i o n . } Var S : S t r i n g ; Function I n t T o S t r ( I : L o n g i n t ) : S t r i n g ; Var S : S t r i n g ; begin Str ( I ,S ) ; I n t T o S t r : =S ; end ; begin S: = + I n t T o S t r ( 233)+ ; Writeln ( S ) ; end .
37.10.355
StringOfChar
Synopsis: Return a string consisting of 1 character repeated N times. Declaration: function StringOfChar(c: Char;l: SizeInt) : AnsiString Visibility: default
1404
Description: StringOfChar creates a new String of length l and lls it with the character c. It is equivalent to the following calls: SetLength(StringOfChar,l); FillChar(Pointer(StringOfChar)^,Length(StringOfChar),c); Errors: None. See also: SetLength (1396) Listing: ./refex/ex97.pp
Program Example97 ; { $H+ } { Program t o demonstrate t h e S t r i n g O f C h a r f u n c t i o n . } Var S : S t r i n g ; begin S: = S t r i n g O f C h a r ( ,40)+ A l i g n e d a t column 4 1 . ; Writeln ( s ) ; end .
37.10.356
StringToPPChar
Synopsis: Split string in list of null-terminated strings Declaration: function StringToPPChar(var S: AnsiString;ReserveEntries: Integer) : PPChar function StringToPPChar(S: PChar;ReserveEntries: Integer) : PPChar Visibility: default Description: StringToPPChar splits the string S in words, replacing any whitespace with zero characters. It returns a pointer to an array of pchars that point to the rst letters of the words in S. This array is terminated by a Nil pointer. The function does not add a zero character to the end of the string unless it ends on whitespace. The function reserves memory on the heap to store the array of PChar; The caller is responsible for freeing this memory. This function is only available on certain platforms. Errors: None. See also: ArrayStringToPPchar (1282)
37.10.357
StringToUnicodeChar
Synopsis: Convert an ansistring to a null-terminated array of unicode characters. Declaration: function StringToUnicodeChar(const Src: AnsiString;Dest: PUnicodeChar; DestSize: SizeInt) : PUnicodeChar Visibility: default 1405
Description: StringToUnicodeChar converts the ansistring S to a unicodestring and places the result in Dest. The size of the memory location pointed to by Dest must be given in DestSize. If the result string is longer than the available size, the result string will be truncated. The function always returns Dest. Errors: No check is performed to see whether Dest points to a valid memory location. See also: UnicodeCharToString (1415), UnicodeCharLenToString (1415)
37.10.358
StringToWideChar
Synopsis: Convert a string to an array of widechars. Declaration: function StringToWideChar(const Src: AnsiString;Dest: PWideChar; DestSize: SizeInt) : PWideChar Visibility: default Description: StringToWideChar converts an ansistring Src to a null-terminated array of WideChars. The destination for this array is pointed to by Dest, and contains room for at least DestSize widechars. Errors: No validity checking is performed on Dest. See also: WideCharToString (1422), WideCharToStrVar (1422), WideCharLenToStrVar (1422), WideCharLenToString (1421)
37.10.359
strlen
Synopsis: Length of a null-terminated string. Declaration: function strlen(p: PChar) : SizeInt Visibility: default Description: Returns the length of the null-terminated string P. Errors: None.
37.10.360
strpas
Synopsis: Convert a null-terminated string to a shortstring. Declaration: function strpas(p: PChar) : shortstring Visibility: default Description: Converts a null terminated string in P to a Pascal string, and returns this string. The string is truncated at 255 characters. Errors: None.
1406
37.10.361
Succ
Synopsis: Return next element of ordinal type. Declaration: function Succ(X: TOrdinal) : TOrdinal Visibility: default Description: Succ returns the element that succeeds the element that was passed to it. If it is applied to the last value of the ordinal type, and the program was compiled with range checking on ({$R+}), then a run-time error will be generated. for an example, see Ord (1373). Errors: Run-time error 201 is generated when the result is out of range. See also: Ord (1373), Pred (1377), High (1328), Low (1343)
37.10.362
SuspendThread
Synopsis: Suspend a running thread. Declaration: function SuspendThread(threadHandle: TThreadID) : DWord Visibility: default Description: SuspendThread suspends a running thread. The thread is identied with its handle or ID threadHandle. The function returns zero if succesful. A nonzero return value indicates failure. Errors: If a failure occurred, a nonzero result is returned. The meaning is system dependent. See also: ResumeThread (1385), KillThread (1339)
37.10.363
Declaration: function function function function function function Visibility: default
Swap
swap(X: Swap(X: swap(X: Swap(X: Swap(X: swap(X: Word) : Word Integer) : Integer LongInt) : LongInt Cardinal) : Cardinal QWord) : QWord Int64) : Int64
Description: Swap swaps the high and low order bytes of X if X is of type Word or Integer, or swaps the high and low order words of X if X is of type Longint or Cardinal. The return type is the type of X Errors: None. See also: Lo (1342), Hi (1327) Listing: ./refex/ex69.pp
1407
Program Example69 ; { Program t o demonstrate t h e Swap f u n c t i o n . } Var W : Word ; L : Longint ; begin W: = $1234 ; W: =Swap(W) ; if W <>$3412 then w r i t e l n ( E r r o r when swapping word ! ) ; L : = $12345678 ; L : =Swap( L ) ; i f L<>$56781234 then w r i t e l n ( E r r o r when swapping L o n g i n t ! ) ; end .
37.10.364
Declaration: function function function function function function Visibility: default
SwapEndian
SwapEndian(const SwapEndian(const SwapEndian(const SwapEndian(const SwapEndian(const SwapEndian(const AValue: AValue: AValue: AValue: AValue: AValue: SmallInt) : SmallInt Word) : Word LongInt) : LongInt DWord) : DWord Int64) : Int64 QWord) : QWord
Description: SwapEndian will swap the endianness of the bytes in its argument. Errors: None. See also: hi (1327), lo (1342), swap (1407), BEToN (1286), NToBE (1346), NToLE (1347), LEToN (1341)
37.10.365
SysAllocMem
Synopsis: System memory manager: Allocate memory Declaration: function SysAllocMem(size: PtrUInt) : Pointer Visibility: default Description: SysFreemSize is the system memory manager implementation for AllocMem (1281) See also: AllocMem (1281)
37.10.366
SysAssert
Synopsis: Standard Assert failure implementation Declaration: procedure SysAssert(const Msg: ShortString;const FName: ShortString; LineNo: LongInt;ErrorAddr: Pointer) Visibility: default 1408
Description: SysAssert is the standard implementation of the assertion failed code. It is the default value of the AssertErrorProc constant. It will print the assert message Msg together with the lename FName and linenumber LineNo to standard error output (StdErr) and will halt the program with exit code 227. The error address ErrorAddr is ignored. See also: AssertErrorProc (1230)
37.10.367
SysBackTraceStr
Synopsis: Format an address suitable for inclusion in a backtrace Declaration: function SysBackTraceStr(Addr: Pointer) : ShortString Visibility: default Description: SysBackTraceStr will create a string representation of the address Addr, suitable for inclusion in a stack backtrace. Errors: None.
37.10.368
Synopsis:
SysFlushStdIO
37.10.369
SysFreemem
Synopsis: System memory manager free routine. Declaration: function SysFreemem(p: pointer) : PtrUInt Visibility: default Description: SysFreeem is the system memory manager implementation for FreeMem (1320) See also: FreeMem (1320)
37.10.370
SysFreememSize
Synopsis: System memory manager free routine. Declaration: function SysFreememSize(p: pointer;Size: PtrUInt) : PtrUInt Visibility: default Description: SysFreemSize is the system memory manager implementation for FreeMem (1320) See also: MemSize (1344)
1409
37.10.371
SysGetFPCHeapStatus
Synopsis: Return the status of the FPC heapmanager Declaration: function SysGetFPCHeapStatus : TFPCHeapStatus Visibility: default Description: SysGetFPCHeapStatus returns the status of the default FPC heapmanager. It is set as the default value of the corresponding GetFPCHeapStatus (1322) function. Errors: None. The result of this function is bogus information if the current heapmanager is not the standard FPC heapmanager. See also: GetFPCHeapStatus (1322)
37.10.372
SysGetHeapStatus
Synopsis: System implementation of GetHeapStatus (1322) Declaration: function SysGetHeapStatus : THeapStatus Visibility: default Description: SysGetHeapStatus is the system implementation of the GetHeapStatus (1322) call. See also: GetHeapStatus (1322)
37.10.373
SysGetmem
Synopsis: System memory manager memory allocator. Declaration: function SysGetmem(Size: PtrUInt) : Pointer Visibility: default Description: SysGetmem is the system memory manager implementation for GetMem (1322) See also: GetMem (1322), GetMemory (1323)
37.10.374
SysInitExceptions
Synopsis: Initialize exceptions. Declaration: procedure SysInitExceptions Visibility: default Description: SysInitExceptions initializes the exception system. This procedure should never be called directly, it is taken care of by the RTL.
1410
37.10.375
SysInitFPU
Synopsis: Initialize the FPU Declaration: procedure SysInitFPU Visibility: default Description: SysInitFPU initializes (resets) the oating point unit, if one is available. It is called for instance when a new thread is started. See also: BeginThread (1286)
37.10.376
SysInitStdIO
Synopsis: Initialize standard input and output. Declaration: procedure SysInitStdIO Visibility: default Description: SysInitStdIO initializes the standard input and output les: Output (1277), Input (1277) and StdErr (1278). This routine is called by the initialization code of the system unit, there should be no need to call it directly.
37.10.377
SysMemSize
Synopsis: System memory manager: free size. Declaration: function SysMemSize(p: pointer) : PtrUInt Visibility: default Description: SysFreemSize is the system memory manager implementation for MemSize (1344) See also: MemSize (1344)
37.10.378
SysReAllocMem
Synopsis: System memory manager: Reallocate memory Declaration: function SysReAllocMem(var p: pointer;size: PtrUInt) : Pointer Visibility: default Description: SysReallocMem is a help routine for the system memory manager implementation for ReAllocMem (1383). See also: ReAllocMem (1383)
37.10.379
SysResetFPU
Synopsis: Reset the oating point unit. Declaration: procedure SysResetFPU Visibility: default Description: SysResetFPU resets the oating point unit. There should normally be no need to call this unit; the compiler itself takes care of this. 1411
37.10.380
SysSetCtrlBreakHandler
Synopsis: System CTRL-C handler Declaration: function SysSetCtrlBreakHandler(Handler: TCtrlBreakHandler) : TCtrlBreakHandler Visibility: default Description: SysSetCtrlBreakHandler sets the CTRL-C handler to the Handler callback, and returns the previous value of the handler. See also: TCtrlBreakHandler (1262)
37.10.381
SysTryResizeMem
Synopsis: System memory manager: attempt to resize memory. Declaration: function SysTryResizeMem(var p: pointer;size: PtrUInt) : Boolean Visibility: default Description: SysTryResizeMem is a help routine for the system memory manager implementation for ReAllocMem (1383), SysReAllocMem (1411) See also: SysReAllocMem (1411), ReAllocMem (1383)
37.10.382
ThreadGetPriority
Synopsis: Return the priority of a thread. Declaration: function ThreadGetPriority(threadHandle: TThreadID) : LongInt Visibility: default Description: ThreadGetPriority returns the priority of thread TThreadID to Prio. The returned priority is a value between -15 and 15. Errors: None. See also: ThreadSetPriority (1412)
37.10.383
ThreadSetPriority
Synopsis: Set the priority of a thread. Declaration: function ThreadSetPriority(threadHandle: TThreadID;Prio: LongInt) : Boolean Visibility: default Description: ThreadSetPriority sets the priority of thread TThreadID to Prio. Priority is a value between -15 and 15. Errors: None. See also: ThreadGetPriority (1412)
1412
37.10.384
ThreadSwitch
Synopsis: Signal possibility of thread switch Declaration: procedure ThreadSwitch Visibility: default Description: ThreadSwitch signals the operating system that the thread should be suspended and that another thread should be executed. This call is a hint only, and may be ignored. See also: SuspendThread (1407), ResumeThread (1385), KillThread (1339)
37.10.385
trunc
Synopsis: Truncate a oating point value. Declaration: function trunc(d: ValReal) : Int64 Visibility: default Description: Trunc returns the integer part of X, which is always smaller than (or equal to) X in absolute value. Errors: None. See also: Frac (1320), Int (1335), Round (1389) Listing: ./refex/ex70.pp
Program Example70 ; { Program t o demonstrate t h e Trunc f u n c t i o n . } begin Writeln Writeln Writeln Writeln end .
{ { { {
123 123 12 12
} } } }
37.10.386
Truncate
Synopsis: Truncate the le at position Declaration: procedure Truncate(var F: File) Visibility: default Description: Truncate truncates the (opened) le F at the current le position. Errors: Depending on the state of the {$I} switch, a runtime error can be generated if there is an error. In the {$I-} state, use IOResult to check for errors. See also: Append (1281), Filepos (1313), Seek (1392) Listing: ./refex/ex71.pp
1413
Program Example71 ; { Program t o demonstrate t h e Truncate f u n c t i o n . } Var F : F i l e of l o n g i n t ; I , L : Longint ; begin Assign ( F , t e s t . tmp ) ; Rewrite ( F ) ; For I : = 1 to 1 0 Do Write ( F , I ) ; W r i t e l n ( F i l e s i z e b e f o r e Truncate : , F i l e S i z e ( F ) ) ; Close ( f ) ; Reset ( F ) ; Repeat Read ( F , I ) ; U n t i l i =5; Truncate ( F ) ; W r i t e l n ( F i l e s i z e a f t e r Truncate : , Filesize (F ) ) ; Close ( f ) ; end .
37.10.387
TryEnterCriticalsection
Synopsis: Try entering a critical section Declaration: function TryEnterCriticalsection(var cs: TRTLCriticalSection) : LongInt Visibility: default Description: TryEnterCriticalsection attempts to enter critical section cs. It returns at once. The return value is zero if another thread owns the critical section, or nonzero if the current thread already owns or succesfully obtained the critical section.
37.10.388
UCS4StringToUnicodeString
Synopsis: Convert a UCS-4 encoded string to a unicode string Declaration: function UCS4StringToUnicodeString(const s: UCS4String) : UnicodeString Visibility: default Description: UCS4StringToUnicodeString converts the UCS-4 encoded string S to a unicode string and returns the resulting string. This function requires the widestring manager. See also: UnicodeStringToUCS4String (1416)
37.10.389
Synopsis:
UCS4StringToWideString
1414
37.10.390
Unassigned
37.10.391
UnicodeCharLenToString
Synopsis: Convert a memory buffer with unicode characters to an ansistring Declaration: function UnicodeCharLenToString(S: PUnicodeChar;Len: SizeInt) : AnsiString Visibility: default Description: UnicodeCharLenToString converts the unicode characters in buffer S with at most len bytes length, to an ansistring and returns the result. This function requires the use of a widestring manager. Errors: No checking is done to see if the pointer S or length len are valid. See also: StringToUnicodeChar (1405), UnicodeCharToString (1415)
37.10.392
UnicodeCharLenToStrVar
Synopsis: Convert a memory buffer with unicode characters to an ansistring Declaration: procedure UnicodeCharLenToStrVar(Src: PUnicodeChar;Len: SizeInt; out Dest: AnsiString) Visibility: default Description: UnicodeCharLenToString converts the unicode characters in buffer S with at most len bytes length, to an ansistring and returns the result in Dest This function does the same as UnicodeCharLenToString (1415). Errors: No checking is done to see if the pointer S or length len are valid. See also: StringToUnicodeChar (1405), UnicodeCharToString (1415), UnicodeCharLenToString (1415), UnicodeCharToStrVar (1416)
37.10.393
UnicodeCharToString
Synopsis: Convert unicode character to string Declaration: function UnicodeCharToString(S: PUnicodeChar) : AnsiString Visibility: default
1415
Description: UnicodeCharToString converts a null-word-terminated array of unicode characters in S to an AnsiString value. It simply calls UnicodeCharLenToString (1415) with the length of the string S. This function requires the use of a widestring manager. Errors: No checking is done to see if the pointer S is valid. See also: StringToUnicodeChar (1405), UnicodeCharLenToString (1415), WidestringManager (1278)
37.10.394
UnicodeCharToStrVar
Synopsis: Convert a null-terminated memory buffer with unicode characters to an ansistring Declaration: procedure UnicodeCharToStrVar(S: PUnicodeChar;out Dest: AnsiString) Visibility: default Description: UnicodeCharLenToString converts the unicode characters in buffer S up to the rst null word, to an ansistring and returns the result in Dest This function does the same as UnicodeCharToString (1415). Errors: No checking is done to see if the pointer S is valid. See also: StringToUnicodeChar (1405), UnicodeCharToString (1415), UnicodeCharLenToString (1415), UnicodeCharToString (1415)
37.10.395
UnicodeStringToUCS4String
Synopsis: Convert a unicode string to a UCS-4 string. Declaration: function UnicodeStringToUCS4String(const s: UnicodeString) : UCS4String Visibility: default Description: UnicodeStringToUCS4String converts a unicode string S to a UCS-4 encoded string, and returns the resulting string. This function requires the widestring manager. See also: UCS4StringToUnicodeString (1414)
37.10.396
Synopsis:
UnicodeToUtf8
Declaration: function UnicodeToUtf8(Dest: PChar;Source: PUnicodeChar; MaxBytes: SizeInt) : SizeInt function UnicodeToUtf8(Dest: PChar;MaxDestBytes: SizeUInt; Source: PUnicodeChar;SourceChars: SizeUInt) : SizeUInt function UnicodeToUtf8(Dest: PChar;Source: PWideChar;MaxBytes: SizeInt) : SizeInt function UnicodeToUtf8(Dest: PChar;MaxDestBytes: SizeUInt; Source: PWideChar;SourceChars: SizeUInt) : SizeUInt Visibility: default Description: 1416
37.10.397
UniqueString
Synopsis: Make sure reference count of string is 1 Declaration: procedure UniqueString(var S: AnsiString) procedure UniqueString(var S: UnicodeString) procedure UniqueString(var S: WideString) Visibility: default Description: UniqueString ensures that the ansistring S has reference count 1. It makes a copy of S if this is necesary, and returns the copy in S Errors: None.
37.10.398
UnlockResource
Synopsis: Unlock a previously locked resource Declaration: function UnlockResource(ResData: TFPResourceHGLOBAL) : LongBool Visibility: default Description: UnlockResource unlocks a previously locked resource. Note that this function does not exist on windows, its only needed on other platforms. Errors: The function returns False if it failed. See also: FindResource (1317), FreeResource (1321), SizeofResource (1401), LoadResource (1342), lockResource (1343), FreeResource (1321)
37.10.399
UnPack
Synopsis: Create unpacked array from packed array Declaration: procedure UnPack(const Z: PackedArrayType;out A: UnpackedArrayType; StartIndex: TIndexType) Visibility: default Description: UnPack will copy the elements of a packed array (Z) to an unpacked array (A). All elements in Z are copied to A, starting at index StartIndex in A. The type of the index variable StartIndex must match the type of the index of A. Obviously, the type of the elements of the arrays A and Z must match. See also: Pack (1374)
37.10.400
Declaration: function function function function function function
upCase
upCase(const s: shortstring) : shortstring upCase(c: Char) : Char upcase(const s: ansistring) : ansistring UpCase(const s: UnicodeString) : UnicodeString UpCase(c: UnicodeChar) : UnicodeChar UpCase(const s: WideString) : WideString 1417
Visibility: default Description: Upcase returns the uppercase version of its argument C. If its argument is a string, then the complete string is converted to uppercase. The type of the returned value is the same as the type of the argument. Errors: None. See also: Lowercase (1344) Listing: ./refex/ex72.pp
program Example72 ; { Program t o demonstrate t h e upcase f u n c t i o n . } var c : char ; begin f o r c : = a to z do w r i t e ( upcase ( c ) ) ; Writeln ; { T h i s doesn t work i n TP , b u t i t does i n Free Pascal } W r i t e l n ( upcase ( a b c d e f g h i j k l m n o p q r s t u v w x y z ) ) ; end .
37.10.401
UTF8Decode
Synopsis: Convert an UTF-8 encoded unicode string to a widestring Declaration: function UTF8Decode(const s: UTF8String) : UnicodeString Visibility: default Description: UTF8Decode converts the UTF-8 encoded unicode string S to a widestring and returns the resulting string. It calls the low-level Utf8ToUnicode (1419) function to do the actual work. For this function to work, a widestring manager must be installed. See also: UTF8Encode (1418), Utf8ToAnsi (1419), SetWideStringManager (1400), Utf8ToUnicode (1419)
37.10.402
UTF8Encode
Synopsis: Convert a widestring to an UTF-8 encoded unicode string Declaration: function UTF8Encode(const s: Ansistring) : UTF8String function UTF8Encode(const s: UnicodeString) : UTF8String function UTF8Encode(const s: WideString) : UTF8String Visibility: default Description: UTF8Encode converts an ansistring or widestring S to the equivalent UTF-8 encoded unicode string and returns this resulting string. It calls the low-level UnicodeToUTF8 (1416) function to do the actual work. For this function to work, a widestring manager must be installed. See also: UTF8Decode (1418), Utf8ToAnsi (1419), UnicodeToUtf8 (1416), SetWideStringManager (1400)
1418
37.10.403
Utf8ToAnsi
Synopsis: Convert a UTF-8 encoded unicode string to an ansistring Declaration: function Utf8ToAnsi(const s: UTF8String) : ansistring Visibility: default Description: Utf8ToAnsi converts an utf8-encode unicode string to an ansistring. It converts the string to a widestring and then converts the widestring to an ansistring. For this function to work, a widestring manager must be installed. See also: UTF8Encode (1418), UTF8Decode (1418), SetWideStringManager (1400)
37.10.404
Utf8ToUnicode
Synopsis: Convert a buffer with UTF-8 characters to widestring characters Declaration: function Utf8ToUnicode(Dest: PUnicodeChar;Source: PChar; MaxChars: SizeInt) : SizeInt function Utf8ToUnicode(Dest: PUnicodeChar;MaxDestChars: SizeUInt; Source: PChar;SourceBytes: SizeUInt) : SizeUInt function Utf8ToUnicode(Dest: PWideChar;Source: PChar;MaxChars: SizeInt) : SizeInt function Utf8ToUnicode(Dest: PWideChar;MaxDestChars: SizeUInt; Source: PChar;SourceBytes: SizeUInt) : SizeUInt Visibility: default Description: Utf8ToUnicode converts the buffer in Source with a length of SourceBytes or for a maximum length of MaxChars (or MaxDestChars) widestring characters to the buffer pointed to by Dest. The function returns the number of copied widestring characters. For this function to work, a widestring manager must be installed. Errors: On error, -1 is returned. See also: UTF8Encode (1418), UTF8Decode (1418), Utf8ToAnsi (1419), SetWideStringManager (1400)
37.10.405
Val
Synopsis: Calculate numerical/enumerated value of a string. Declaration: procedure Val(const S: string;var V;var Code: Word) Visibility: default Description: Val converts the value represented in the string S to a numerical value or an enumerated value, and stores this value in the variable V, which can be of type Longint, Real and Byte or any enumerated type. If the conversion isnt succesfull, then the parameter Code contains the index of the character in S which prevented the conversion. The string S is allowed to contain spaces in the beginning. The string S can contain a number in decimal, hexadecimal, binary or octal format, as described in the language reference. For enumerated values, the string must be the name of the enumerated value. The name is searched case insensitively. The conversion to enumerated exists only as of version 2.3.1 (or later) of the compiler. 1419
Errors: If the conversion doesnt succeed, the value of Code indicates the position where the conversion went wrong. The value of V is then undened. See also: Str (1404) Listing: ./refex/ex74.pp
Program Example74 ; { Program t o demonstrate t h e Val f u n c t i o n . } Var I , Code : I n t e g e r ; begin Val ( ParamStr ( 1 ) , I , Code ) ; I f Code< >0 then Writeln ( Error at p o s i t i o n else W r i t e l n ( Value : , I ) ; end .
, code , :
, Paramstr ( 1 ) [ Code ] )
37.10.406
Synopsis:
VarArrayGet
Declaration: function VarArrayGet(const A: Variant;const Indices: Array of LongInt) : Variant Visibility: default Description:
37.10.407
VarArrayPut
Synopsis: Put a value in a single cell of a variant array Declaration: procedure VarArrayPut(var A: Variant;const Value: Variant; const Indices: Array of LongInt) Visibility: default Description: VarArrayPut puts Value in the variant array A at the location indicated by Indices. Thus the statement VarArrayPut(A,B,[2,1]); is equivalent to A[2,1]:=B; The difference is that the previous is usable when the amount of indices is not known at compile time. Errors: If the number of indices is wrong (or out of range) an exception may be raised. See also: VarArrayGet (1420)
1420
37.10.408
VarArrayRedim
Synopsis: Redimension a variant array Declaration: procedure VarArrayRedim(var A: Variant;HighBound: SizeInt) Visibility: default Description: VarArrayRedim re-sizes the rst dimension of the variant array A, giving it a new high bound HighBound. Obviously, A must be a variant array for this function to work.
37.10.409
VarCast
Synopsis: Cast a variant to a certain type Declaration: procedure VarCast(var dest: variant;const source: variant; vartype: LongInt) Visibility: default Description: VarCast converts the variant in Source to the type indicated in VarType and returns the result in dest. The VarType must be one of the pre-dened VarNNN constants. Errors: If the conversion is not possible because the value cannot be correctly casted, then a run-time error or an exception may occur.
37.10.410
WaitForThreadTerminate
Synopsis: Wait for a thread to terminate. Declaration: function WaitForThreadTerminate(threadHandle: TThreadID; TimeoutMs: LongInt) : DWord Visibility: default Description: WaitForThreadTerminate waits for a thread to nish its execution. The thread is identied by its handle or ID threadHandle. If the thread does not exit within TimeoutMs milliseconds, the function will return with an error value. The function returns the exit code of the thread. See also: EndThread (1306), KillThread (1339)
37.10.411
WideCharLenToString
Synopsis: Convert a length-limited array of widechar to an ansistring Declaration: function WideCharLenToString(S: PWideChar;Len: SizeInt) : AnsiString Visibility: default Description: WideCharLenToString converts at most Len widecharacters from the null-terminated widechar array S to an ansistring, and returns the ansistring. Errors: No validity checking is performed on S. Passing an invalid pointer may lead to access violations. See also: StringToWideChar (1406), WideCharToString (1422), WideCharToStrVar (1422), WideCharLenToStrVar (1422)
1421
37.10.412
WideCharLenToStrVar
Synopsis: Convert a length-limited array of widechar to an ansistring Declaration: procedure WideCharLenToStrVar(Src: PWideChar;Len: SizeInt; out Dest: AnsiString) Visibility: default Description: WideCharLenToString converts at most Len widecharacters from the null-terminated widechar array Src to an ansistring, and returns the ansistring in Dest. Errors: No validity checking is performed on Src. Passing an invalid pointer may lead to access violations. See also: StringToWideChar (1406), WideCharToString (1422), WideCharToStrVar (1422), WideCharLenToString (1421)
37.10.413
WideCharToString
Synopsis: Convert a null-terminated array of widechar to an ansistring Declaration: function WideCharToString(S: PWideChar) : AnsiString Visibility: default Description: WideCharToString converts the null-terminated widechar array S to an ansistring, and returns the ansistring. Errors: No validity checking is performed on Src. Passing an invalid pointer, or an improperly terminated array may lead to access violations. See also: StringToWideChar (1406), WideCharToStrVar (1422), WideCharLenToStrVar (1422), WideCharLenToString (1421)
37.10.414
WideCharToStrVar
Synopsis: Convert a null-terminated array of widechar to an ansistring Declaration: procedure WideCharToStrVar(S: PWideChar;out Dest: AnsiString) Visibility: default Description: WideCharToString converts the null-terminated widechar array S to an ansistring, and returns the ansistring in Dest. Errors: No validity checking is performed on S. Passing an invalid pointer, or an improperly terminated array may lead to access violations. See also: StringToWideChar (1406), WideCharToString (1422), WideCharToStrVar (1422), WideCharLenToString (1421)
37.10.415
WideStringToUCS4String
Synopsis: Convert a widestring to a UCS-4 encoded string. Declaration: function WideStringToUCS4String(const s: WideString) : UCS4String Visibility: default Description: Convert a widestring to a UCS-4 encoded string. 1422
37.10.416
Write
Synopsis: Write variable to a text le Declaration: procedure Write(Args: Arguments) procedure Write(var F: Text;Args: Arguments) Visibility: default Description: Write writes the contents of the variables V1, V2 etc. to the le F. F can be a typed le, or a Text le. If F is a typed le, then the variables V1, V2 etc. must be of the same type as the type in the declaration of F. Untyped les are not allowed. If the parameter F is omitted, standard output is assumed. If F is of type Text, then the necessary conversions are done such that the output of the variables is in human-readable format. This conversion is done for all numerical types. Strings are printed exactly as they are in memory, as well as PChar types. The format of the numerical conversions can be inuenced through the following modiers: OutputVariable : NumChars [: Decimals ] This will print the value of OutputVariable with a minimum of NumChars characters, from which Decimals are reserved for the decimals. If the number cannot be represented with NumChars characters, NumChars will be increased, until the representation ts. If the representation requires less than NumChars characters then the output is lled up with spaces, to the left of the generated string, thus resulting in a right-aligned representation. If no formatting is specied, then the number is written using its natural length, with nothing in front of it if its positive, and a minus sign if its negative. Real numbers are, by default, written in scientic notation. Errors: If an error occurs, a run-time error is generated. This behavior can be controlled with the {$I} switch. See also: WriteLn (1423), Read (1379), Readln (1381), Blockwrite (1288)
37.10.417
WriteBarrier
Synopsis: Memory write barrier Declaration: procedure WriteBarrier Visibility: default Description: WriteBarrier is a low-level instruction to force a write barrier in the CPU: write (store) operations before and after the barrier are separate. See also: ReadBarrier (1380), ReadDependencyBarrier (1380), ReadWriteBarrier (1382)
37.10.418
WriteLn
Synopsis: Write variable to a text le and append newline Declaration: procedure Writeln(Args: Arguments) procedure WriteLn(var F: Text;Args: Arguments) Visibility: default Description: WriteLn does the same as Write (1423) for text les, and emits a Carriage Return - LineFeed character pair after that. If the parameter F is omitted, standard output is assumed. If no variables are specied, a Carriage Return - LineFeed character pair is emitted, resulting in a new line in the le F. Remark: Under linux and unix, the Carriage Return character is omitted, as customary in Unix environments. Errors: If an error occurs, a run-time error is generated. This behavior can be controlled with the {$I} switch. 1423
See also: Write (1423), Read (1379), Readln (1381), Blockwrite (1288) Listing: ./refex/ex75.pp
Program Example75 ; { Program t o demonstrate t h e W r i t e ( l n ) f u n c t i o n . } Var F : F i l e of L o n g i n t ; L : Longint ; begin Write ( T h i s i s on t h e f i r s t l i n e ! ) ; { No CR/ LF p a i r ! } W r i t e l n ( And t h i s t o o . . . ) ; W r i t e l n ( But t h i s i s a l r e a d y on t h e second l i n e . . . ) ; Assign ( f , t e s t . tmp ) ; Rewrite ( f ) ; For L : = 1 to 1 0 do w r i t e ( F , L ) ; { No w r i t e l n a l l o w e d here ! } Close ( f ) ; end .
37.10.419
WriteStr
Synopsis: Write variables to a string Declaration: procedure WriteStr(out S: string;Args: Arguments) Visibility: default Description: WriteStr behaves like Write (1423), except that it stores its output in the string variable S instead of a le. Semantically, the WriteStr call is equivalent to writing the arguments to a le using the Write call, and then reading them into S using the Read call from the same le: var F : Text; begin Rewrite(F); Write(F,Args); Close(F); Reset(F); Read(F,S); Close(F); end; Obviously, the WriteStr call does not use a temporary le. WriteStr is dened in the ISO Extended Pascal standard. More information on the allowed arguments and the possible formatting can be found in the description of Write (1423). See also: Write (1423), ReadStr (1381), Read (1379)
1424
37.11
37.11.1
IDispatch
Description
IDispatch is the pascal denition of the Windows Dispatch interface denition. See also: IUnknown (1428)
37.11.2
Page 1425 1425 1425 1425
Method overview
Description Return IDs of named procedures Return type information about properties Return number of properties. Invoke a dispatch method
37.11.3
IDispatch.GetTypeInfoCount
Synopsis: Return number of properties. Declaration: function GetTypeInfoCount(out count: LongInt) : HRESULT Visibility: default
37.11.4
IDispatch.GetTypeInfo
Synopsis: Return type information about properties Declaration: function GetTypeInfo(Index: LongInt;LocaleID: LongInt;out TypeInfo) : HRESULT Visibility: default
37.11.5
IDispatch.GetIDsOfNames
Synopsis: Return IDs of named procedures Declaration: function GetIDsOfNames(const iid: TGuid;names: Pointer; NameCount: LongInt;LocaleID: LongInt; DispIDs: Pointer) : HRESULT Visibility: default Description: Return the ID of a procedure.
37.11.6
IDispatch.Invoke
Synopsis: Invoke a dispatch method Declaration: function Invoke(DispID: LongInt;const iid: TGuid;LocaleID: LongInt; Flags: Word;var params;VarResult: pointer; ExcepInfo: pointer;ArgErr: pointer) : HRESULT Visibility: default
1425
37.12
37.12.1
IEnumerable
Description
IEnumerable can be used to get an enumerator from a class. If a class implements IEnumerable, it can return an enumerator interface IEnumerator (1426). See also: IEnumerator (1426)
37.12.2
Page 1426
Method overview
Description Return an enumerator interface for this class
Property GetEnumerator
37.12.3
IEnumerable.GetEnumerator
Synopsis: Return an enumerator interface for this class Declaration: function GetEnumerator : IEnumerator Visibility: default Description: GetEnumerator returns a new IEnumerator (1426) interface for this class. This is called by the compiler whenever a for in loop is encountered in the source code to retrieve the enumerator instance. See also: IEnumerator (1426)
37.13
37.13.1
IEnumerator
Description
IEnumerator is the interface needed by the For ... in ... language construct, when operating on classes. It contains all methods that the compiler needs to implement a loop. A for in loop like the following: For O in MyObject do begin // do things end; is treated by the compiler as equivalent to the following code: Var I : IEnumerator; O : TObject; begin I:=MyObject.GetEnumerator; While I.MoveNext do begin O:=I.GetCurrent; // Do things 1426
end; end. Any class that implements the IEnumerable interface must be able to return an IEnumerator instance for the compiler to use in a For in loop. See also: IEnumerable (1426)
37.13.2
Page 1427 1427 1428
Method overview
Description Returns the current element in the iteration cycle Move to the next value Reset the pointer
37.13.3
Page 1428
Property overview
Access r Description Return the current item
Property Current
37.13.4
IEnumerator.GetCurrent
Synopsis: Returns the current element in the iteration cycle Declaration: function GetCurrent : TObject Visibility: default Description: getCurrent should return the object instance representing the current value in the for in loop. GetCurrent will always be called immediatly after IEnumerator.MoveNext (1) returned True. Remark: The actual return type of the interface should not necessarily be TObject, it can be any type. The compiler will check the actual return type with the type of the loop variable, and they should match. See also: IEnumerator.MoveNext (1), IEnumerator.Reset (1)
37.13.5
IEnumerator.MoveNext
Synopsis: Move to the next value Declaration: function MoveNext : Boolean Visibility: default Description: MoveNext should move the current item pointer to the next available item. It should return True if an item is available, False if no more items are available. The rst time it is called It will be called at the beginning of the for loop, so it should position the enumerator on the rst value (if there is one). After MoveNext has returned True, IEnumerator.GetCurrent (1) will be called to retrieve the item. See also: IEnumerator.Reset (1), IEnumerator.GetCurrent (1)
1427
37.13.6
IEnumerator.Reset
Synopsis: Reset the pointer Declaration: procedure Reset Visibility: default Description: Reset can be implemented to put the pointer at the start of the list. It is not mandatory to implement this method, the compiler does not use it. See also: IEnumerator.GetCurrent (1), IEnumerator.MoveNext (1)
37.13.7
IEnumerator.Current
Synopsis: Return the current item Declaration: Property Current : TObject Visibility: default Access: Read Description: Current simply is the redenition of IEnumerator.GetCurrent (1) as a property. It is read-only. See also: IEnumerator.GetCurrent (1), IEnumerator.MoveNext (1)
37.14
37.14.1
IInvokable
Description
IInvokable is a descendent of IInterface (1253), compiled in the {$M+} state, so Run-Time Type Information (RTTI) is generated for it. See also: IDispatch (1425), IInterface (1253)
37.15
37.15.1
IUnknown
Description
IUnknown is dened by windows. Its the basic interface which all COM objects must implement. The denition does not contain any code. See also: IInterface (1253), IDispatch (1425), IInvokable (1428)
37.15.2
Page 1429 1429 1429
Method overview
Description Increase reference count of the interface Decrease reference count of the interface Return pointer to VMT table of interface
1428
37.15.3
IUnknown.QueryInterface
Synopsis: Return pointer to VMT table of interface Declaration: function QueryInterface(const iid: TGuid;out obj) : LongInt Visibility: default
37.15.4
IUnknown._AddRef
Synopsis: Increase reference count of the interface Declaration: function _AddRef : LongInt Visibility: default See also: IUnknown._Release (1)
37.15.5
IUnknown._Release
Synopsis: Decrease reference count of the interface Declaration: function _Release : LongInt Visibility: default See also: IUnknown._AddRef (1)
37.16
37.16.1
TAggregatedObject
Description
TAggregatedObject implements an object whose lifetime is governed by an external object (or interface). It does not implement the IUnknown interface by itself, but delegates all methods to the controller object, as exposed in the Controller (1) property. In effect, the reference count of the aggregated object is the same as that of its controller, and additionally, all interfaces of the controller are exposed by the aggregated object. Note that the aggregated object maintains a non-counted reference to the controller. Aggregated objects should be used when using delegation to implement reference counted objects: the delegated interfaces can be implemented safely by TAggregatedObject descendents. See also: Create (1), Controller (1)
37.16.2
Page 1430
Method overview
Description Create a new instance of TAggregatedObject
Property Create
37.16.3
Page 1430
Property overview
Access r Description Controlling instance
Property Controller
1429
37.16.4
TAggregatedObject.Create
Synopsis: Create a new instance of TAggregatedObject Declaration: constructor Create(const aController: IUnknown) Visibility: public Description: Create creates a new instance of TAggregatedObject on the heap, and stores a reference to aController, so it can be exposed in the Controller (1) property. Errors: If not enough memory is present on the heap, an exception will be raised. If the aController is Nil, exceptions will occur when any of the TAggregatedObject methods (actually, the IUnknown methods) are used. See also: Controller (1)
37.16.5
TAggregatedObject.Controller
Synopsis: Controlling instance Declaration: Property Controller : IUnknown Visibility: public Access: Read Description: Controller exposes the controlling object, with all interfaces it has. The value of the controller is set when the TAggregatedObject instance is created. See also: TAggregatedObject.Create (1)
37.17
37.17.1
TContainedObject
Description
TContainedObject is the base class for contained objects, i.e. objects that do not implement a reference counting mechanism themselves, but are owned by some other object which handles the reference counting mechanism. It implements the IUnknown interface and, more specically, the QueryInterface method of IUnknown. See also: IInterface (1253)
37.17.2
Page 1253
Interfaces overview
Description Basic interface for all COM based interfaces
Property IInterface
37.18
37.18.1
TInterfacedObject
Description
TInterfacedObject is a descendent of TObject (1432) which implements the IUnknown (1428) interface. It can be used as a base class for all classes which need reference counting. See also: IUnknown (1428), TObject (1432) 1430
37.18.2
Page 1428
Interfaces overview
Description Basic interface for all COM-based interfaces
Property IUnknown
37.18.3
Page 1431 1431 1431
Method overview
Description Handle reference count properly. Check reference count. Create a new instance
37.18.4
Page 1432
Property overview
Access r Description Return the current reference count
Property RefCount
37.18.5
TInterfacedObject.AfterConstruction
Override
Synopsis: Handle reference count properly. Declaration: procedure AfterConstruction; Visibility: public Description: AfterConstruction overrides the basic method in TObject and adds some additional reference count handling. Errors: None. See also: BeforeDestruction (1)
37.18.6
TInterfacedObject.BeforeDestruction
Override
Synopsis: Check reference count. Declaration: procedure BeforeDestruction; Visibility: public Description: AfterConstruction overrides the basic method in TObject and adds a reference count check: if the reference count is not zero, an error occurs. Errors: A runtime-error 204 will be generated if the reference count is nonzero when the object is destroyed. See also: AfterConstruction (1)
37.18.7
TInterfacedObject.NewInstance
Override
Synopsis: Create a new instance Declaration: class function NewInstance; Visibility: public Description: NewInstance initializes a new instance of TInterfacedObject (1430) Errors: None. 1431
37.18.8
TInterfacedObject.RefCount
Synopsis: Return the current reference count Declaration: Property RefCount : LongInt Visibility: public Access: Read Description: RefCount returns the current reference count. This reference count cannot be manipulated, except through the methods of IUnknown (1428). When it reaches zero, the class instance is destroyed. See also: IUnknown (1428)
37.19
37.19.1
TObject
Description
TObject is the parent root class for all classes in Object Pascal. If a class has no parent class explicitly declared, it is dependent on TObject. TObject introduces class methods that deal with the class type information, and contains all necessary methods to create an instance at runtime, and to dispatch messages to the correct method (both string and integer messages). See also: TClass (1262)
1432
37.19.2
Page 1438 1439 1436 1436 1436 1437 1436 1435 1433 1435 1439 1434 1439 1439 1442 1438 1435 1434 1442 1440 1440 1441 1441 1441 1440 1437 1435 1437 1438 1438 1434 1434 1437 1442 1441
Method overview
Description Method called after the constructor was called. Method called before the destructor is called. Return a pointer to the type information for this class. Return the current class name. Check whether the class name equals the given name. Return the parent class. Return a "class of" pointer for the current class Finalize the class instance. TObject Constructor Default handler for integer message handlers. Default handler for string messages. TObject destructor. Dispatch an integer message Dispatch a string message. Check if two objects are equal. Return the address of a eld. Check for Nil and call destructor. Clean up instance and free the memory reserved for the instance. Return a hash code for the object Return a reference to an interface Return an interface based on its GUID Return the interface table entry by GUID Return the interface table entry by string Return a pointer to the table of implemented interfaces for a class Get a reference to an interface, not increasing the reference count Check whether class is an ancestor. Initialize a new class instance. Return the size of an instance. Return the address of a method Return the name of a method. Allocate memory on the heap for a new instance Handle exception object Return a pointer to the string message table. Return a string representation for the object Unit name
Property AfterConstruction BeforeDestruction ClassInfo ClassName ClassNameIs ClassParent ClassType CleanupInstance Create DefaultHandler DefaultHandlerStr Destroy Dispatch DispatchStr Equals FieldAddress Free FreeInstance GetHashCode GetInterface GetInterfaceByStr GetInterfaceEntry GetInterfaceEntryByStr GetInterfaceTable GetInterfaceWeak InheritsFrom InitInstance InstanceSize MethodAddress MethodName newinstance SafeCallException StringMessageTable ToString UnitName
37.19.3
TObject.Create
Synopsis: TObject Constructor Declaration: constructor Create Visibility: public Description: Create creates a new instance of TObject. Currently it does nothing. It is also not virtual, so there is in principle no need to call it directly. See also: Destroy (1)
1433
37.19.4
TObject.Destroy
Virtual
Synopsis: TObject destructor. Declaration: destructor Destroy; Visibility: public Description: Destroy is the destructor of TObject. It will clean up the memory assigned to the instance. Descendent classes should override destroy if they want to do additional clean-up. No other destructor should be implemented. It is bad programming practice to call Destroy directly. It is better to call the Free (1) method, because that one will check rst if Self is different from Nil. To clean up an instance and reset the refence to the instance, it is best to use the FreeAndNil (1537) function. See also: Create (1), Free (1)
37.19.5
TObject.newinstance
Virtual
Synopsis: Allocate memory on the heap for a new instance Declaration: class function newinstance; Visibility: public Description: NewInstance allocates memory on the heap for a new instance of the current class. If the memory was allocated, the class will be initialized by a call to InitInstance (1). The function returns the newly initialized instance. Errors: If not enough memory is available, a Nil pointer may be returned, or an exception may be raised. See also: Create (1), InitInstance (1), InstanceSize (1), FreeInstance (1)
37.19.6
TObject.FreeInstance
Virtual
Synopsis: Clean up instance and free the memory reserved for the instance. Declaration: procedure FreeInstance; Visibility: public Description: FreeInstance cleans up an instance of the current class, and releases the heap memory occupied by the class instance. See also: Destroy (1), InitInstance (1), NewInstance (1)
37.19.7
TObject.SafeCallException
Synopsis: Handle exception object Declaration: function SafeCallException(exceptobject: TObject;exceptaddr: pointer) : HRESULT; Virtual Visibility: public Description: SafeCallException should be overridden to handle exceptions in a method marked with the savecall directive. The implementation in TObject simply returns zero. 1434
37.19.8
TObject.DefaultHandler
Virtual
Synopsis: Default handler for integer message handlers. Declaration: procedure DefaultHandler(var message); Visibility: public Description: DefaultHandler is the default handler for messages. If a message has an unknown message ID (i.e. does not appear in the table with integer message handlers), then it will be passed to DefaultHandler by the Dispatch (1) method. See also: Dispatch (1), DefaultHandlerStr (1)
37.19.9
TObject.Free
Synopsis: Check for Nil and call destructor. Declaration: procedure Free Visibility: public Description: Free will check the Self pointer and calls Destroy (1) if it is different from Nil. This is a safer method than calling Destroy directly. If a reference to the object must be reset as well (a recommended technque), then the function FreeAndNil (1537) should be called. Errors: None. See also: Destroy (1), FreeAndNil (1537)
37.19.10
TObject.InitInstance
Synopsis: Initialize a new class instance. Declaration: class function InitInstance(instance: pointer) Visibility: public Description: InitInstance initializes the memory pointer to by Instance. This means that the VMT is initialized, and the interface pointers are set up correctly. The function returns the newly initialized instance. See also: NewInstance (1), Create (1)
37.19.11
TObject.CleanupInstance
Synopsis: Finalize the class instance. Declaration: procedure CleanupInstance Visibility: public Description: CleanUpinstance nalizes the instance, i.e. takes care of all reference counted objects, by decreasing their reference count by 1, and freeing them if their count reaches zero. Normally, CleanupInstance should never be called, it is called automatically when the object is freed with its constructor. Errors: None. See also: Destroy (1), Free (1), InitInstance (1) 1435
37.19.12
TObject.ClassType
Synopsis: Return a "class of" pointer for the current class Declaration: class function ClassType Visibility: public Description: ClassType returns a TClass (1262) class type reference for the current class. See also: TClass (1262), ClassInfo (1), ClassName (1)
37.19.13
TObject.ClassInfo
Synopsis: Return a pointer to the type information for this class. Declaration: class function ClassInfo Visibility: public Description: ClassInfo returns a pointer to the type information for this class. This pointer can be used in the various type information routines.
37.19.14
TObject.ClassName
Synopsis: Return the current class name. Declaration: class function ClassName Visibility: public Description: ClassName returns the class name for the current class, in all-uppercase letters. To check for the class name, use the ClassNameIs (1) class method. Errors: None. See also: ClassInfo (1), ClassType (1), ClassNameIs (1)
37.19.15
TObject.ClassNameIs
Synopsis: Check whether the class name equals the given name. Declaration: class function ClassNameIs(const name: string) Visibility: public Description: ClassNameIs checks whether Name equals the class name. It takes of case sensitivity, i.e. it converts both names to uppercase before comparing. See also: ClassInfo (1), ClassType (1), ClassName (1)
1436
37.19.16
TObject.ClassParent
Synopsis: Return the parent class. Declaration: class function ClassParent Visibility: public Description: ClassParent returns the class of the parent class of the current class. This is always different from Nil, except for TObject. Errors: None. See also: ClassInfo (1), ClassType (1), ClassNameIs (1)
37.19.17
TObject.InstanceSize
Synopsis: Return the size of an instance. Declaration: class function InstanceSize Visibility: public Description: InstanceSize returns the number of bytes an instance takes in memory. This is Just the memory occupied by the class structure, and does not take into account any additional memory that might be allocated by the constructor of the class. Errors: None. See also: InitInstance (1), ClassName (1), ClassInfo (1), ClassType (1)
37.19.18
TObject.InheritsFrom
Synopsis: Check whether class is an ancestor. Declaration: class function InheritsFrom(aclass: TClass) Visibility: public Description: InheritsFrom returns True if AClass is an ancestor class from the current class, and returns false if it is not. See also: ClassName (1), ClassInfo (1), ClassType (1), TClass (1262)
37.19.19
TObject.StringMessageTable
Synopsis: Return a pointer to the string message table. Declaration: class function StringMessageTable Visibility: public Description: StringMessageTable returns a pointer to the string message table, which can be used to look up methods for dispatching a string message. It is used by the DispatchStr (1) method. Errors: If there are no string message handlers, nil is returned. See also: DispatchStr (1), Dispatch (1)
1437
37.19.20
TObject.MethodAddress
Synopsis: Return the address of a method Declaration: class function MethodAddress(const name: shortstring) Visibility: public Description: MethodAddress returns the address of a method, searching the method by its name. The Name parameter species which method should be taken. The search is conducted in a case-insensitive manner. Errors: If no matching method is found, Nil is returned. See also: MethodName (1), FieldAddress (1)
37.19.21
TObject.MethodName
Synopsis: Return the name of a method. Declaration: class function MethodName(address: pointer) Visibility: public Description: MethodName searches the VMT for a method with the specied address and returns the name of the method. Errors: If no method with the matching address is found, an empty string is returned. See also: MethodAddress (1), FieldAddress (1)
37.19.22
TObject.FieldAddress
Synopsis: Return the address of a eld. Declaration: function FieldAddress(const name: shortstring) : pointer Visibility: public Description: FieldAddress returns the address of the eld with name name. The address is the address of the eld in the current class instance. Errors: If no eld with the specied name is found, Nil is returned. See also: MethodAddress (1), MethodName (1)
37.19.23
TObject.AfterConstruction
Virtual
Synopsis: Method called after the constructor was called. Declaration: procedure AfterConstruction; Visibility: public Description: AfterConstruction is a method called after the constructor was called. It does nothing in the implementation of TObject and must be overridden by descendent classes to provide specic behaviour that is executed after the constructor has nished executing. (for instance, call an event handler) Errors: None. See also: BeforeDestruction (1), Create (1) 1438
37.19.24
TObject.BeforeDestruction
Virtual
Synopsis: Method called before the destructor is called. Declaration: procedure BeforeDestruction; Visibility: public Description: BeforeDestruction is a method called before the destructor is called. It does nothing in the implementation of TObject and must be overridden by descendent classes to provide specic behaviour that is executed before the destructor has nished executing. (for instance, call an event handler) Errors: None. See also: AfterConstruction (1), Destroy (1), Free (1)
37.19.25
TObject.DefaultHandlerStr
Virtual
Synopsis: Default handler for string messages. Declaration: procedure DefaultHandlerStr(var message); Visibility: public Description: DefaultHandlerStr is called for string messages which have no handler associated with them in the string message handler table. The implementation of DefaultHandlerStr in TObject does nothing and mut be overridden by descendent classes to provide specic message handling behaviour. See also: DispatchStr (1), Dispatch (1), DefaultHandler (1)
37.19.26
TObject.Dispatch
Virtual
Synopsis: Dispatch an integer message Declaration: procedure Dispatch(var message); Visibility: public Description: Dispatch looks in the message handler table for a handler that handles message. The message is identied by the rst dword (cardinal) in the message structure. If no matching message handler is found, the message is passed to the DefaultHandler (1) method, which can be overridden by descendent classes to add custom handling of messages. See also: DispatchStr (1), DefaultHandler (1)
37.19.27
TObject.DispatchStr
Virtual
Synopsis: Dispatch a string message. Declaration: procedure DispatchStr(var message); Visibility: public Description: DispatchStr extracts the message identier from Message and checks the message handler table to see if a handler for the message is found, and calls the handler, passing along the message. If no handler is found, the default DefaultHandlerStr (1) is called. 1439
Errors: None. See also: DefaultHandlerStr (1), Dispatch (1), DefaultHandler (1)
37.19.28
TObject.GetInterface
Synopsis: Return a reference to an interface Declaration: function GetInterface(const iid: TGuid;out obj) : Boolean function GetInterface(const iidstr: shortstring;out obj) : Boolean Visibility: default Description: GetInterface scans the interface tables and returns a reference to the interface iid. The reference is stored in Obj which should be an interface reference. It returns True if the interface was found, False if not. The reference count of the interface is increased by this call. Errors: If no interface was found, False is returned. See also: GetInterfaceByStr (1)
37.19.29
TObject.GetInterfaceByStr
Synopsis: Return an interface based on its GUID Declaration: function GetInterfaceByStr(const iidstr: shortstring;out obj) : Boolean Visibility: public Description: GetInterfaceByStr returns in obj a pointer to the interface identied by iidstr. The function returns True if the interface is indeed implemented by the class, or False otherwise. The iidstr is the unique GUID by which the interface was declared. Errors: The function returns false if the requested interface is not implemented. See also: TObject.GetInterfaceEntry (1), TObject.GetInterfaceEntryByStr (1)
37.19.30
TObject.GetInterfaceWeak
Synopsis: Get a reference to an interface, not increasing the reference count Declaration: function GetInterfaceWeak(const iid: TGuid;out obj) : Boolean Visibility: public Description: GetInterfaceWeak performs the same function as Getinterface (1), but unlike the latter, it will not increase the reference count of the interface. See also: TObject.GetInterface (1)
1440
37.19.31
TObject.GetInterfaceEntry
Synopsis: Return the interface table entry by GUID Declaration: class function GetInterfaceEntry(const iid: TGuid) Visibility: public Description: GetInterfaceEntry returns the internal interface table entry for the interface identied by iid (the GUID used in the declaration of the interface). If the interface is not implemented by the class, the function returns Nil. See also: TObject.GetInterfaceByStr (1), TObject.GetInterfaceEntryByStr (1)
37.19.32
TObject.GetInterfaceEntryByStr
Synopsis: Return the interface table entry by string Declaration: class function GetInterfaceEntryByStr(const iidstr: shortstring) Visibility: public Description: GetInterfaceEntryByStr returns the internal interface table entry for the interface identied by iidstr (A string representation of the GUID used in the declaration of the interface). If the interface is not implemented by the class, the function returns Nil. See also: TObject.GetInterfaceByStr (1), TObject.GetInterfaceEntry (1)
37.19.33
TObject.GetInterfaceTable
Synopsis: Return a pointer to the table of implemented interfaces for a class Declaration: class function GetInterfaceTable Visibility: public Description: GetInterfaceTable returns a pointer to the internal table of implemented interfaces for a class. The result will always point to a valid address, if the class implements no interfaces the EntryCount eld of the interface table will be zero. See also: TObject.GetInterfaceByStr (1), TObject.GetInterfaceEntry (1)
37.19.34
Synopsis: Unit name
TObject.UnitName
Declaration: class function UnitName Visibility: public Description: UnitName returns the unit name in which the class was dened. The name is obtained from the class denition data the compiler generates for each class.
1441
37.19.35
TObject.Equals
Virtual
Synopsis: Check if two objects are equal. Declaration: function Equals(Obj: TObject) : Boolean; Visibility: public Description: Equals returns True if the object instance pointer (Self) equals the instance pointer Obj. Descendent classes can override to check properties etc. in case the instance pointers are different. See also: TObject.GetHashCode (1), TObject.ToString (1)
37.19.36
TObject.GetHashCode
Virtual
Synopsis: Return a hash code for the object Declaration: function GetHashCode : PtrInt; Visibility: public Description: GetHashCode should return a hash code for the object. By default, the numerical (integer) address of Self is returned. Descendent classes can use this to generate better suitable values to be used in a hash table. See also: TObject.ToString (1), TObject.Equals (1)
37.19.37
TObject.ToString
Virtual
Synopsis: Return a string representation for the object Declaration: function ToString : ansistring; Visibility: public Description: ToString returns by default the class name of the object. It is useful during sending of debug messages. Descendent classes can override this method to give a better description of the object than just the class name. See also: TObject.GetHashCode (1), TObject.Equals (1)
1442
Chapter 38
38.2
Overview
This documentation describes the sysutils unit. The sysutils unit was started by Gertjan Schouten, and completed by Michael Van Canneyt. It aims to be compatible to the Delphi sysutils unit, but in contrast with the latter, it is designed to work on multiple platforms. It is implemented on all supported platforms.
38.3
Localization support
Localization support depends on various constants and structures being initialized correctly. On Windows and OS/2 this is done automatically: a widestring manager is installed by default which helps taking care of the current locale when performing various operations on strings. The various internationalization settings (date/time format, currency, language etc) are also initialized correctly on these platforms. On unixes, the widestring support is in a separate unit: cwstring, which loads the various needed functions from the C library. It should be added manually to the uses clause of your program. No internationalization (or localisation) settings are applied by this unit, these must be initialized separately by including the clocale unit in the uses clause of your program.
1443
38.4
Functions for various conversions. Table 38.2: Name BCDToInt (1485) CompareMem (1487) FloatToStrF (1523) FloatToStr (1522) FloatToText (1525) FormatFloat (1536) GetDirs (1539) IntToHex (1546) IntToStr (1547) StrToIntDef (1578) StrToInt (1577) StrToFloat (1576) TextToFloat (1582) Description Convert BCD number to integer Compare two memory regions Convert oat to formatted string Convert oat to string Convert oat to string Format a oating point value Split string in list of directories return hexadecimal representation of integer return decumal representation of integer Convert string to integer with default value Convert string to integer Convert string to oat Convert null-terminated string to oat
38.5
Date/time routines
1444
Table 38.3: Name DateTimeToFileDate (1493) DateTimeToStr (1493) DateTimeToString (1494) DateTimeToSystemTime (1495) DateTimeToTimeStamp (1496) DateToStr (1496) Date (1492) DayOfWeek (1497) DecodeDate (1497) DecodeTime (1498) EncodeDate (1502) EncodeTime (1502) FormatDateTime (1535) IncMonth (1545) IsLeapYear (1548) MSecsToTimeStamp (1551) Now (1552) StrToDateTime (1574) StrToDate (1573) StrToTime (1579) SystemTimeToDateTime (1582) TimeStampToDateTime (1584) TimeStampToMSecs (1584) TimeToStr (1585) Time (1583) Description Convert DateTime type to le date Construct string representation of DateTime Construct string representation of DateTime Convert DateTime to system time Convert DateTime to timestamp Construct string representation of date Get current date Get day of week Decode DateTime to year month and day Decode DateTime to hours, minutes and seconds Encode year, day and month to DateTime Encode hours, minutes and seconds to DateTime Return string representation of DateTime Add 1 to month Determine if year is leap year Convert nr of milliseconds to timestamp Get current date and time Convert string to DateTime Convert string to date Convert string to time Convert system time to datetime Convert time stamp to DateTime Convert Timestamp to number of millicseconds return string representation of Time Get current tyme
38.6
1445
Table 38.4: Name AnsiCompareFileName (1470) AnsiLowerCaseFileName (1475) AnsiUpperCaseFileName (1483) AddDisk (1469) ChangeFileExt (1487) CreateDir (1491) DeleteFile (1499) DiskFree (1499) DiskSize (1500) ExpandFileName (1506) ExpandUNCFileName (1507) ExtractFileDir (1507) ExtractFileDrive (1508) ExtractFileExt (1508) ExtractFileName (1508) ExtractFilePath (1509) ExtractRelativePath (1509) FileAge (1510) FileDateToDateTime (1512) FileExists (1512) FileGetAttr (1513) FileGetDate (1514) FileSearch (1516) FileSetAttr (1518) FileSetDate (1518) FindFirst (1520) FindNext (1521) GetCurrentDir (1539) RemoveDir (1554) RenameFile (1554) SameFileName (1556) SetCurrentDir (1556) SetDirSeparators (1556) FindClose (1519) DoDirSeparators (1501) Description Compare 2 lenames Create lowercase lename Create uppercase lename Add disk to list of disk drives Change extension of le name Create a directory Delete a le Free space on disk Total size of disk Create full le name Create full UNC le name Extract drive and directory part of lename Extract drive part of lename Extract extension part of lename Extract name part of lename Extrct path part of lename Construct relative path between two les Return le age Convert le date to system date Determine whether a le exists on disk Get attributes of le Get date of last le modication Search for le in path Get le attributes Get le dates Start nding a le Find next le Return current working directory Remove a directory from disk Rename a le on disk Check whether 2 lenames are the same Set current working directory Set directory separator characters Stop searching a le Replace directory separator characters
38.7
1446
Table 38.5: Name FileCreate (1511) FileOpen (1515) FileRead (1516) FileSeek (1517) FileTruncate (1518) FileWrite (1519) FileClose (1510) Description Create a le and return handle Open le end return handle Read from le Set le position Truncate le length Write to le Close le handle
38.8
Most PChar functions are the same as their counterparts in the STRINGS unit. The following functions are the same : 1. StrCat (1559) : Concatenates two PChar strings. 2. StrComp (1560) : Compares two PChar strings. 3. StrCopy (1560) : Copies a PChar string. 4. StrECopy (1561) : Copies a PChar string and returns a pointer to the terminating null byte. 5. StrEnd (1562) : Returns a pointer to the terminating null byte. 6. StrIComp (1563) : Case insensitive compare of 2 PChar strings. 7. StrLCat (1565) : Appends at most L characters from one PChar to another PChar. 8. StrLComp (1565) : Case sensitive compare of at most L characters of 2 PChar strings. 9. StrLCopy (1566) : Copies at most L characters from one PChar to another. 10. StrLen (1567) : Returns the length (exclusive terminating null byte) of a PChar string. 11. StrLIComp (1568) : Case insensitive compare of at most L characters of 2 PChar strings. 12. StrLower (1568) : Converts a PChar to all lowercase letters. 13. StrMove (1569) : Moves one PChar to another. 14. StrNew (1569) : Makes a copy of a PChar on the heap, and returns a pointer to this copy. 15. StrPos (1571) : Returns the position of one PChar string in another? 16. StrRScan (1571) : returns a pointer to the last occurrence of on PChar string in another one. 17. StrScan (1572) : returns a pointer to the rst occurrence of on PChar string in another one. 18. StrUpper (1581) : Converts a PChar to all uppercase letters. The subsequent functions are different from their counterparts in STRINGS, although the same examples can be used.
1447
38.9
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: c shortdateformat + + longtimeformat d day of month dd day of month (leading zero) ddd day of week (abbreviation) dddd day of week (full) ddddd shortdateformat dddddd longdateformat m month mm month (leading zero) mmm month (abbreviation) mmmm month (full) y year (2 digits) yy year (two digits) yyyy year (with century) h hour hh hour (leading zero) n minute nn minute (leading zero) s second ss second (leading zero) t shorttimeformat tt longtimeformat am/pm use 12 hour clock and display am and pm accordingly a/p use 12 hour clock and display a and p accordingly / insert date seperator : insert time seperator "xx" literal text xx literal text z milliseconds
1448
38.10
Formatting strings
Functions for formatting strings. Table 38.6: Name AdjustLineBreaks (1470) FormatBuf (1534) Format (1528) FmtStr (1527) QuotedStr (1553) StrFmt (1562) StrLFmt (1567) TrimLeft (1586) TrimRight (1587) Trim (1585) Description Convert line breaks to line breaks for system Format a buffer Format arguments in string Format buffer Quote a string Format arguments in a string Format maximum L characters in a string Remove whitespace at the left of a string Remove whitespace at the right of a string Remove whitespace at both ends of a string
38.11
String functions
1449
Table 38.7: Name AnsiCompareStr (1471) AnsiCompareText (1472) AnsiExtractQuotedStr (1473) AnsiLastChar (1474) AnsiLowerCase (1474) AnsiQuotedStr (1475) AnsiStrComp (1476) AnsiStrIComp (1477) AnsiStrLComp (1479) AnsiStrLIComp (1479) AnsiStrLastChar (1478) AnsiStrLower (1480) AnsiStrUpper (1482) AnsiUpperCase (1482) AppendStr (1483) AssignStr (1484) CompareStr (1488) CompareText (1489) DisposeStr (1501) IsValidIdent (1549) LastDelimiter (1549) LeftStr (1550) LoadStr (1550) LowerCase (1550) NewStr (1552) RightStr (1555) StrAlloc (1558) StrBufSize (1558) StrDispose (1561) StrPas (1570) StrPCopy (1570) StrPLCopy (1571) UpperCase (1592) Description Compare two strings Compare two strings, case insensitive Removes quotes from string Get last character of string Convert string to all-lowercase Qoutes a string Compare strings case-sensitive Compare strings case-insensitive Compare L characters of strings case sensitive Compare L characters of strings case insensitive Get last character of string Convert string to all-lowercase Convert string to all-uppercase Convert string to all-uppercase Append 2 strings Assign value of strings on heap Compare two strings case sensitive Compare two strings case insensitive Remove string from heap Is string a valid pascal identier Last occurance of character in a string Get rst N characters of a string Load string from resources Convert string to all-lowercase Allocate new string on heap Get last N characters of a string Allocate memory for string Reserve memory for a string Remove string from heap Convert PChar to pascal string Copy pascal string Copy N bytes of pascal string Convert string to all-uppercase
38.12
38.12.1
ConfigExtension : string = .cfg ConfigExtension is the default extension used by the GetAppCongFile (1538) call. It can be set to any valid extension for the current OS. DateDelta = 693594 Days between 1/1/0001 and 12/31/1899 DriveDelim = DriveSeparator 1450
DriveDelim refers to the system units DriveSeparator constant, it is for Delphi compatibility only. EmptyStr : string = Empty String Constant EmptyWideStr : WideString = Empty wide string. faAnyFile = $0000003f Use this attribute in the FindFirst (1520) call to nd all matching les. faArchive = $00000020 Attribute of a le, meaning the le has the archive bit set. Used in TSearchRec (1463) and FindFirst (1520) faDirectory = $00000010 Attribute of a le, meaning the le is a directory. Used in TSearchRec (1463) and FindFirst (1520) faHidden = $00000002 Attribute of a le, meaning the le is read-only. Used in TSearchRec (1463) and FindFirst (1520) faReadOnly = $00000001 Attribute of a le, meaning the le is read-only. Used in TSearchRec (1463) and FindFirst (1520) faSymLink = $00000040 faSymLink means the le (as returned e.g. by FindFirst (1520)/FindNext (1521)), is a symlink. Its ignored under Windows. faSysFile = $00000004 Attribute of a le, meaning the le is a system le. Used in TSearchRec (1463) and FindFirst (1520) faVolumeId = $00000008 Attribute of a le, meaning the entry contains the volume ID. Used in TSearchRec (1463) and FindFirst (1520) feInvalidHandle : THandle = (-1) feInvalidHandle is the return value of FileOpen (1515) in case of an error. filerecnamelength = 255 1451
filerecnamelength describes the length of the FileRec (1457) lename eld. fmOpenRead = $0000 fmOpenRead is used in the FileOpen (1515) call to open a le in read-only mode. fmOpenReadWrite = $0002 fmOpenReadWrite is used in the FileOpen (1515) call to open a le in read-write mode. fmOpenWrite = $0001 fmOpenWrite is used in the FileOpen (1515) call to open a le in write-only mode. fmShareCompat = $0000 fmOpenShareCompat is used in the FileOpen (1515) call OR-ed together with one of fmOpenReadWrite (1452), fmOpenRead (1452) or fmOpenWrite (1452),to open a le in a sharing modus that is equivalent to sharing implemented in MS-DOS. fmShareDenyNone = $0040 fmShareDenyNone is used in the FileOpen (1515) call OR-ed together with one of fmOpenReadWrite (1452), fmOpenRead (1452) or fmOpenWrite (1452), to open a le so other processes can read/write the le as well. fmShareDenyRead = $0030 fmOpenShareRead is used in the FileOpen (1515) call OR-ed together with one of fmOpenReadWrite (1452), fmOpenRead (1452) or fmOpenWrite (1452), to open a le so other processes cannot read from it. This constant only works on Windows, because other operating systems do not support this constants. fmShareDenyWrite = $0020 fmOpenShareWrite is used in the FileOpen (1515) call OR-ed together with one of fmOpenReadWrite (1452), fmOpenRead (1452) or fmOpenWrite (1452), to open a le so other processes cannot write to it, they can only read. fmShareExclusive = $0010 fmOpenShareExclusive is used in the FileOpen (1515) call OR-ed together with one of fmOpenReadWrite (1452), fmOpenRead (1452) or fmOpenWrite (1452), to open a le exclusively. fsFromBeginning = 0 fsFromBeginning is used to indicate in the FileSeek (1517) call that a seek operation should be started at the start of the le. fsFromCurrent = 1 1452
fsFromBeginning is used to indicate in the FileSeek (1517) call that a seek operation should be started at the current position in the le. fsFromEnd = 2 fsFromBeginning is used to indicate in the FileSeek (1517) call that a seek operation should be started at the last position in the le. GUID_NULL : TGuid = {00000000-0000-0000-0000-000000000000} NULL GUID constant HexDisplayPrefix : string = $ HexDisplayPrefix is used by the formatting routines to indicate that the number which follows the prex is in Hexadecimal notation. HoursPerDay = 24 Number of hours in a day. JulianEpoch = (-2415018.5) Starting point of the Julian calendar LeadBytes : Set of Char = [] LeadBytes contains the set of bytes that serve as lead byte in a MBCS string. MaxCurrency : Currency = 922337203685477.0000 Maximum currency value MaxDateTime : TDateTime = 2958465.99999 Maximum TDateTime value. MAX_PATH = MaxPathLen MAX_PATH is the maximum number of characters that a lename (including path) can contain on the current operating system. MinCurrency : Currency = -922337203685477.0000 Minimum Currency value MinDateTime : TDateTime = -693593.0 Minimum TDateTime value. MinsPerDay = HoursPerDay * MinsPerHour 1453
MonthDays : Array[Boolean] of TDayTable = ((31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 3 Array with number of days in the months for leap and non-leap years. MSecsPerDay = SecsPerDay * MSecsPerSec Number of milliseconds per day MSecsPerSec = 1000 Number of milliseconds per second NullStr : PString = @EmptyStr Pointer to an empty string PathDelim = DirectorySeparator PathDelim refers to the system units DirectorySeparator constant, it is for Delphi compatibility only. PathSep = PathSeparator PathSep refers to the system units PathSeparator constant, it is for Delphi compatibility only. pfBCB4Produced = $08000000 Not used in Free Pascal. pfDelphi4Produced = $0C000000 Not used in Free Pascal. pfDesignOnly = $00000002 Package is a design-time only package pfExeModule = $00000000 Package is an executable pfIgnoreDupUnits = $00000008 Ignore duplicate units in package 1454
pfLibraryModule = $80000000 Package is a library pfModuleTypeMask = $C0000000 Mask for module type ags pfNeverBuild = $00000001 Never-build ag was specied when compiling package pfPackageModule = $40000000 Package is a real package (not exe) pfProducerMask = $0C000000 Mask for producer ags pfProducerUndefined = $04000000 Not used in Free Pascal. pfRunOnly = $00000004 Package is a run-time only package pfV3Produced = $00000000 Not used in Free Pascal. RTL_SIGBUS = 4 Bus error signal number (Unix only) RTL_SIGDEFAULT = -1 Default signal handler (Unix only) RTL_SIGFPE = 1 Floating Point Error signal number (Unix only) RTL_SIGILL = 3 Illegal instruction signal number (Unix only) RTL_SIGINT = 0 INTERRUPT signal number (Unix only) 1455
RTL_SIGLAST = RTL_SIGQUIT Last signal number (Unix only) RTL_SIGQUIT = 5 QUIT signal number (Unix only) RTL_SIGSEGV = 2 Segmentation fault signal number (Unix only) SecsPerDay = MinsPerDay * SecsPerMin Number of seconds per day SecsPerMin = 60 Number of seconds per minute SwitchChars = [-] The characters in this set will be used by the FindCmdLineSwitch (1519) function to determine whether a command-line argument is a switch (an option) or a value. If the rst character of an argument is in SwitchChars, it will be considered an option or switch. SysConfigDir : string = SysConfigDir is the default system conguration directory. It is set at application startup by the sysutils initialization routines. This directory may be returned by the GetAppCongDir (1538) call on some systems. TextRecBufSize = 256 Buffer size of text le record. TextRecNameLength = 256 Length of text le record lename eld ufImplicitUnit = $10 Unit was implicitly imported into package (did not appear in package contains list) ufMainUnit = $01 Unit is the main unit of the package ufOrgWeakUnit = $08 Unit is the original weak packaged unit 1456
ufPackageUnit = $02 Unit is a packaged unit (appeared in package contains list) ufWeakPackageUnit = ufPackageUnit or ufWeakUnit Weak (original or not) packaged unit ufWeakUnit = $04 Unit is a weak packaged unit UnixDateDelta = (UnixEpoch) Number of days between 1.1.1900 and 1.1.1970 UnixEpoch = JulianEpoch + (2440587.5) Starting point of the unix calendar (1/1/1970)
38.12.2
Types
EHeapException = EHeapMemoryError EHeapMemoryError is raised when an error occurs in the heap management routines. ExceptClass = Class of Exception ExceptClass is a Exception (1602) class reference. FileRec = packed record Handle : THandle; Mode : LongInt; RecSize : SizeInt; _private : Array[1..3*SizeOf(SizeInt)+5*SizeOf(pointer)] of Byte; UserData : Array[1..32] of Byte; name : Array[0..filerecnamelength] of Char; end
FileRec describes a untyped le. This record is made available so it can be used to implement drivers for other than the normal le system le records. Int128Rec = packed record end
Int128Rec is a record dening a 128-bit integer. It is made up of 2 QWords or 4 DWords or 8 words or 16 bytes.
1457
Int64Rec 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. LongRec = packed record end
LongRec 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. OWordRec = packed record end
OWordRec is a record dening a 128-bit integer. It is made up of 2 QWords or 4 DWords or 8 words or 16 bytes. PByteArray = ^TByteArray Generic pointer to TByteArray (1458). Use to access memory regions as a byte array. PDayTable = ^TDayTable Pointer to TDayTable type. PString = ^ Pointer to a ansistring PSysCharSet = ^TSysCharSet Pointer to TSysCharSet (1463) type. PWordarray = ^TWordArray Generic pointer to TWordArray (1464). Use to access memory regions as a word array. TBeepHandler = procedure TBeepHandler is the prototype used by the OnBeep (1467) handler. This in turn is called by the Beep (1485) call to actually implement the beep functionality. The call takes no arguments. TByteArray = Array[0..32767] of Byte TByteArray is a generic array denition, mostly for use as a base type of the PByteArray (1458) type. 1458
TCreateGUIDFunc = function(out GUID: TGuid) : Integer TCreateGUIDFunc is the prototype for a GUID creation handler. On return, the GUID argument should contain a new (unique) GUID. The return value of the function should be zero for success, nonzero for failure. TDayTable = Array[1..12] of Word Array of day names. TEventType = (etCustom,etInfo,etWarning,etError,etDebug)
Table 38.8: Enumeration values for type TEventType Value etCustom etDebug etError etInfo etWarning Explanation Custom log event, with application-specic meaning Debug message. Error condition message General information event message Warning message
TEventType is a type to be used by logging mechanisms (in particular, the TCustomApplication and TEventLog classes. It can be used to lter events, and write only certain types of event to the event log. TEventTypes = Set of TEventType TEventTypes is a set type of TEventType, dened for convenience. It is used in the custom application classes for logging purposes. TExecuteFlags= Set of (ExecInheritsHandles) TExecuteFlags is a set of ags to inuence the behaviour of the ExecuteProcess (1505) call. TextBuf = Array[0..TextRecBufSize-1] of Char TextBuf is the type for the default buffer in TextRec (1460) TextRec = packed record Handle : THandle; Mode : LongInt; bufsize : SizeInt; _private : SizeInt; bufpos : SizeInt; bufend : SizeInt; bufptr : ^TextBuf; openfunc : pointer; inoutfunc : pointer; flushfunc : pointer; closefunc : pointer; 1459
UserData : Array[1..32] of Byte; name : Array[0..textrecnamelength-1] of Char; LineEnd : TLineEndStr; buffer : TextBuf; end
TextRec describes a text le. This record is made available so it can be used to implement drivers for other than the normal le system le records. To implement a driver, an Assign procedure must be implemented, which lls in the various elds of the record. Most notably, the callback functions must be lled in appropriately. After this, the normal le operations will handle all necessary calls to the various callbacks. TFilename = String TFileName is used in the TSearchRec (1463) denition. TFileRec = FileRec Alias for FileRec (1457) for Delphi compatibility. TFileSearchOption = (sfoImplicitCurrentDir,sfoStripQuotes)
Table 38.9: Enumeration values for type TFileSearchOption Value sfoImplicitCurrentDir sfoStripQuotes Explanation Always search the current directory rst, even if it is not specied. Strip quotes from the components in the search path.
TFileSearchOption enumerates the options that can be used in the FileSearch call to control the behaviour of the search mechanism TFileSearchOptions = Set of TFileSearchOption TFileSearchOptions is a set of TFileSearchOption (1460) values, used in the FileSearch (1516) call when searching for les. TFloatFormat = (ffGeneral,ffExponent,ffFixed,ffNumber,ffCurrency)
Table 38.10: Enumeration values for type TFloatFormat Value ffCurrency ffExponent ffFixed ffGeneral ffNumber Explanation Monetary format. Scientic format. Fixed point format. General number format. Fixed point format with thousand separatord
TFloatFormat is used to determine how a oat value should be formatted in the FloatToText (1525) function. 1460
TFloatRec = record Exponent : Integer; Negative : Boolean; Digits : Array[0..18] of Char; end
TFloatRec is used to descibe a oating point value by the FloatToDecimal (1522) function. TFloatValue = (fvExtended,fvCurrency,fvSingle,fvReal,fvDouble,fvComp)
Table 38.11: Enumeration values for type TFloatValue Value fvComp fvCurrency fvDouble fvExtended fvReal fvSingle Explanation Comp value Currency value Double value Extended value Real value Single value
TFloatValue determines which kind of value should be returned in the (untyped) buffer used by the TextToFloat (1582) function. TFormatSettings = record CurrencyFormat : Byte; NegCurrFormat : Byte; ThousandSeparator : Char; DecimalSeparator : Char; CurrencyDecimals : Byte; DateSeparator : Char; TimeSeparator : Char; ListSeparator : Char; CurrencyString : string; ShortDateFormat : string; LongDateFormat : string; TimeAMString : string; TimePMString : string; ShortTimeFormat : string; LongTimeFormat : string; ShortMonthNames : TMonthNameArray; LongMonthNames : TMonthNameArray; ShortDayNames : TWeekNameArray; LongDayNames : TWeekNameArray; TwoDigitYearCenturyWindow : Word; end
TFormatSettings is a record that contains a copy of all variables which determine formatting in the various string formatting routines. It is used to pass local copies of these values to the various formatting routines in a thread-safe way. 1461
TGetAppNameEvent = function : string This callback type is used by the OnGetApplicationName (1467) to return an alternative application name. TGetTempDirEvent = function(Global: Boolean) : string Function prototype for OnGetTempDir (1467) handler. TGetTempFileEvent = function(const Dir: string;const Prefix: string) : string Function prototype for OnGetTempFile (1467) handler. TGetVendorNameEvent = function : string TGetVendorNameEvent is the function prototype for the OnGetVendorName (1467) callback, used by the VendorName (1593) function. THandle = System.THandle THandle refers to the denition of THandle in the system unit, and is provided for backward compatibility only. TIntegerSet = Set of TIntegerSet is a generic integer subrange set denition whose size ts in a single integer. TLineEndStr = string TLineEndStr is used in the TextRec (1460) record to indicate the end-of-line sequence for a text le. TMbcsByteType = (mbSingleByte,mbLeadByte,mbTrailByte)
Table 38.12: Enumeration values for type TMbcsByteType Value mbLeadByte mbSingleByte mbTrailByte Explanation Uses lead-byte Single bytes Uses trailing byte
Type of multi-byte character set. TMonthNameArray = Array[1..12] of TMonthNameArray is used in the month long and short name arrays. TProcedure = procedure 1462
TProcedure is a general denition of a procedural callback. TReplaceFlags= Set of (rfReplaceAll,rfIgnoreCase) TReplaceFlags determines the behaviour of the StringReplace (1564) function. TSearchRec = record Time : LongInt; Size : Int64; Attr : LongInt; Name : TFilename; ExcludeAttr : LongInt; FindHandle : Pointer; Mode : TMode; PathOnly : AnsiString; end
TSearchRec is a search handle description record. It is initialized by a call to FindFirst (1520) and can be used to do subsequent calls to FindNext (1521). It contains the result of these function calls. It must be used to close the search sequence with a call to FindClose (1519). Remark: Not all elds of this record should be used. Some of the elds are for internal use only. (PathOnly for example, is only provided for Kylix compatibility) TSignalState = (ssNotHooked,ssHooked,ssOverridden)
Table 38.13: Enumeration values for type TSignalState Value ssHooked ssNotHooked ssOverridden Explanation A signal handler is set by the RTL code for the signal. No signal handler is set for the signal. A signal handler was set for the signal by third-party code.
TSignalState indicates the state of a signal handler in a unix system for a particular signal. TSysCharSet = Set of Char Generic set of characters type. TSysLocale = record DefaultLCID : Integer; PriLangID : Integer; SubLangID : Integer; end
TSysLocale describes the current locale. If Fareast or MBCS is True, then the current locale uses a Multi-Byte Character Set. If MiddleEast or RightToLeft is True then words and sentences are read from right to left. 1463
TTerminateProc = function : Boolean TTerminateProc is the procedural type which should be used when adding exit procedures. TTextRec = TextRec Alias for TextRec (1460) for Delphi compatibility. TTimeStamp = record Time : Integer; Date : Integer; end
TTimeStamp contains a timestamp, with the date and time parts specied as separate TDateTime values. TWeekNameArray = Array[1..7] of TWeekNameArray is used in the day long and short name arrays. TWordArray = Array[0..16383] of Word TWordArray is a generic array denition, mostly for use as a base type of the PWordArray (1458) type. WordRec = packed record Hi : Byte; Lo : Byte; end
LongRec 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.
38.12.3
Variables
CurrencyDecimals : Byte CurrencyDecimals is the number of decimals to be used when formatting a currency. It is used by the oat formatting routines. The initialization routines of the SysUtils unit initialize this string with a value conforming to the regional preferences of the user or system regional default. CurrencyFormat : Byte CurrencyFormat is the default format string for positive currencies. It is used by the oat formatting routines. The initialization routines of the SysUtils unit initialize this string with a value conforming to the regional preferences of the user or system regional default. CurrencyString : string
1464
CurrencyString is the currency symbol for the current locale. It is used by the oat formatting routines. The initialization routines of the SysUtils unit initialize this string with a value conforming to the regional preferences of the user or system regional default. DateSeparator : Char DateSeparator 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. The initialization routines of the SysUtils unit initialize this string with a value conforming to the regional preferences of the user or system regional default. DecimalSeparator : Char DecimalSeparator is used to display the decimal symbol in oating point numbers or currencies. It is used by the oat formatting routines. The initialization routines of the SysUtils unit initialize this string with a value conforming to the regional preferences of the user or system regional default.
DefaultFormatSettings : TFormatSettings = (CurrencyFormat:1;NegCurrFormat:5;ThousandS DefaultFormatSettings contains the default settings for all type of formatting constants. If no thread-specic values are specied when a formatting function is called, this record is used as a default. All other formatting constants refer to the elds of this variable using absolute addressing. FalseBoolStrs : Array of FalseBoolStrs contains the strings that will result in a False return value by StrToBool (1572). FormatSettings : TFormatSettings FormatSettings is provided for Delphi compatibility, and refers to the DefaultFormatSettings (1465) variable. ListSeparator : Char ListSeparator is the character used in lists of values. It is locale dependent. LongDateFormat : string LongDateFormat contains a template to format a date in a long format. It is used by the date formatting routines. The initialization routines of the SysUtils unit initialize this string with a value conforming to the regional preferences of the user or system regional default. LongDayNames : TWeekNameArray LongDayNames is an array with the full names of days. It is used by the date formatting routines. The initialization routines of the SysUtils unit initialize this string with a value conforming to the regional preferences of the user or system regional default. LongMonthNames : TMonthNameArray 1465
LongMonthNames is an array with the full names of months. It is used by the date formatting routines. The initialization routines of the SysUtils unit initialize this string with a value conforming to the regional preferences of the user or system regional default. LongTimeFormat : string LongTimeFormat contains a template to format a time in full notation. It is used by the time formatting routines. The initialization routines of the SysUtils unit initialize this string with a value conforming to the regional preferences of the user or system regional default. NegCurrFormat : Byte CurrencyFormat is the default format string for negative currencies. It is used by the oat formatting routines. The initialization routines of the SysUtils unit initialize this string with a value conforming to the regional preferences of the user or system regional default: 0 Left parenthesis, currency symbol, amount, right parenthesis. Ex: ($1.2) 1 Negative sign, currency symbol, amount. Ex: -$1.2 2 Monetary symbol, negative sign, amount. Ex: $-1.2 3 Monetary symbol, amount, negative sign. Ex: $1.24 Left parenthesis, amount, currency symbol, right parenthesis. Ex: (1.2$) 5 Negative sign, amount, currency symbol. Ex: -1.2$ 5 6Amount, negative sign, currency symbol. Ex: 1.2-$ 5 7Amount, currency symbol, negative sign. Ex: 1.2$5 8Negative sign, amount, space, currency symbol (as #5, adding a space before the currency symbol). Ex: -1.2 $ 9 Negative sign, currency symbol, space, amount (as #1, adding a space after the currency symbol). Ex: -$ 1.2 10 Amount, space, currency symbol, negative sign (as #7, adding a space before the currency symbol). Ex: 1.2 $11 Monetary symbol, space, amount, negative sign (as #3, adding a space after the currency symbol). Ex: $ 1.212 Monetary symbol, space, negative sign, amount (as #2, adding a space after the currency symbol). Ex: $ -1.2 13 Amount, negative sign, space, currency symbol (as #6, adding a space before the currency symbol). Ex: 1.2- $ 14 Left parenthesis, currency symbol, space, amount, right parenthesis (as #0, adding a space after the currency symbol). Ex: ($ 1.2) 15 Left parenthesis, amount, space, currency symbol, right parenthesis (as ##4, adding a space before the currency symbol). Ex: (1.2 $) OnBeep : TBeepHandler = nil
1466
OnBeep is calles whenever Beep is called. Beep contains no implementation to actually produce a beep, since there is no way to implement beep in a meaningful way for all possible implementations. OnCreateGUID : TCreateGUIDFunc = nil OnCreateGUID can be set to point to a custom routine that creates GUID values. If set, the CreateGUID (1491) function will use it to obtain a GUID value. If it is not set, a default implementation using random values will be used to create the unique value. The function should return a valid GUID in the GUID parameter, and should return zero in case of success. OnGetApplicationName : TGetAppNameEvent By default, the conguration le routines GetAppCongDir (1538) and GetAppCongFile (1538) use a default application name to construct a directory or lename. This callback can be used to provide an alternative application name. Since the result of this callback will be used to construct a lename, care should be taken that the returned name does not contain directory separator characters or characters that cannot appear in a lename. OnGetTempDir : TGetTempDirEvent OnGetTempDir can be used to provide custom behaviour for the GetTempDir (1542) function. Note that the returned name should have a trailing directory delimiter character. OnGetTempFile : TGetTempFileEvent OnGetTempDir can be used to provide custom behaviour for the GetTempFileName (1542) function. Note that the values for Prefix and Dir should be observed. OnGetVendorName : TGetVendorNameEvent OnGetVendorName must be set in order for VendorName (1593) to return a value. It will then be used in GetAppCongDir (1538) and GetAppCongFile (1538) to determine the conguration directory. Set it to a callback that returns the actual vendor name for the application. OnShowException : procedure(Msg: ShortString) OnShowException is the callback that ShowException (1557) 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. ShortDateFormat : string ShortDateFormat contains a template to format a date in a short format. It is used by the date formatting routines. The initialization routines of the SysUtils unit initialize this string with a value conforming to the regional preferences of the user or system regional default. ShortDayNames : TWeekNameArray ShortDayNames is an array with the abbreviated names of days. It is used by the date formatting routines. The initialization routines of the SysUtils unit initialize this string with a value conforming to the regional preferences of the user or system regional default. 1467
ShortMonthNames : TMonthNameArray ShortMonthNames is an array with the abbreviated names of months. It is used by the date formatting routines. The initialization routines of the SysUtils unit initialize this string with a value conforming to the regional preferences of the user or system regional default. ShortTimeFormat : string ShortTimeFormat contains a template to format a time in a short notation. It is used by the time formatting routines. The initialization routines of the SysUtils unit initialize this string with a value conforming to the regional preferences of the user or system regional default. SysLocale : TSysLocale SysLocale is initialized by the initialization code of the SysUtils unit. For an explanation of the elds, see TSysLocale (1463) ThousandSeparator : Char ThousandSeparator is used to separate groups of thousands in oating point numbers or currencies. It is used by the oat formatting routines. The initialization routines of the SysUtils unit initialize this string with a value conforming to the regional preferences of the user or system regional default. TimeAMString : string TimeAMString is used to display the AM symbol in the time formatting routines. It is used by the time formatting routines. The initialization routines of the SysUtils unit initialize this string with a value conforming to the regional preferences of the user or system regional default. TimePMString : string TimePMString is used to display the PM symbol in the time formatting routines. It is used by the time formatting routines. The initialization routines of the SysUtils unit initialize this string with a value conforming to the regional preferences of the user or system regional default. TimeSeparator : Char TimeSeparator 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. The initialization routines of the SysUtils unit initialize this string with a value conforming to the regional preferences of the user or system regional default. TrueBoolStrs : Array of TrueBoolStrs contains the strings that will result in a True return value by StrToBool (1572). TwoDigitYearCenturyWindow : Word Window to determine what century 2 digit years are in.
1468
38.13
38.13.1
Synopsis: Abandon the signal handler Declaration: procedure AbandonSignalHandler(RtlSigNum: Integer) Visibility: default Description: AbandonSignalHandler tells the system routines that they should not re-install the signal handler for signal RtlSigNum under any circumstances. Normally, signal handlers are re-set when they are called. If AbandonSignalHandler has been called for a signal that is handled by the system code, the signal will not be re-set again.
38.13.2
Abort
Synopsis: Abort program execution. Declaration: procedure Abort Visibility: default Description: Abort raises an EAbort (1596) exception. See also: EAbort (1596)
38.13.3
AddDisk
Synopsis: Add a disk to the list of known disks (Unix only) Declaration: function AddDisk(const path: string) : Byte Visibility: default Description: On Unix-like platforms both the DiskFree (1499) and DiskSize (1500) functions need a le on the specied drive, since is required for the statfs system call. These lenames are set in drivestr[0..26], and the rst 4 have been preset to : Disk 0. default drive - hence current directory is used. Disk 1/fd0/. oppy drive 1. Disk 2/fd1/. oppy drive 2. Disk 3/C: equivalent of DOS is the root partition. Drives 4..26 can be set by your own applications with the AddDisk call. The AddDisk call adds Path to the names of drive les, 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. Errors: None. See also: DiskFree (1499), DiskSize (1500)
1469
38.13.4
AddTerminateProc
Synopsis: Add a procedure to the exit chain. Declaration: procedure AddTerminateProc(TermProc: TTerminateProc) Visibility: default Description: AddTerminateProc adds TermProc 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. Errors: If no memory is available on the heap, an exception may be raised. See also: TTerminateProc (1464), CallTerminateProcs (1486)
38.13.5
AdjustLineBreaks
Synopsis: Convert possible line-endings to the currently valid line ending. Declaration: function AdjustLineBreaks(const S: string) : string function AdjustLineBreaks(const S: string;Style: TTextLineBreakStyle) : string Visibility: default Description: AdjustLineBreaks will change all occurrences of #13 and #10 characters with the correct line-ending characters for the current platform. This is #13#10 on Windows and Dos. On Unix-like platforms, this is #10 and for Mac OS X it is #13. Errors: None. See also: AnsiCompareStr (1471), AnsiCompareText (1472) Listing: ./sysutex/ex48.pp
Program Example48 ; { T h i s program demonstrates t h e A d j u s t L i n e B r e a k s f u n c t i o n } Uses s y s u t i l s ; Const S = T h i s i s a s t r i n g #13 w i t h embedded #10 l i n e f e e d and + #13 CR c h a r a c t e r s ; Begin W r i t e l n ( A d j u s t L i n e B r e a k s (S ) ) ; End .
38.13.6
AnsiCompareFileName
Synopsis: Compare 2 lenames. Declaration: function AnsiCompareFileName(const S1: string;const S2: string) : SizeInt Visibility: default 1470
Description: AnsiCompareFileName compares 2 lenames S1 and S2, and returns < 0if S1<S2. = 0if S1=S2. > 0if S1>S2. The function actually checks FileNameCaseSensitive and returns the result of AnsiCompareStr (1471) or AnsiCompareText (1472) depending on whether FileNameCaseSensitive is True or False Errors: None. See also: AnsiCompareStr (1471), AnsiCompareText (1472), AnsiLowerCaseFileName (1475)
38.13.7
AnsiCompareStr
Synopsis: Compare 2 ansistrings, case sensitive, ignoring accents characters. Declaration: function AnsiCompareStr(const S1: string;const S2: string) : Integer Visibility: default Description: AnsiCompareStr compares two strings and returns the following result: < 0if S1<S2. 0if S1=S2. > 0if S1>S2. The comparision takes into account Ansi characters, i.e. it takes care of strange accented characters. Contrary to AnsiCompareText (1472), the comparision is case sensitive. Remark: A widestring manager must be installed in order for this function to work correctly with various character sets. Errors: None. See also: AdjustLineBreaks (1470), AnsiCompareText (1472) Listing: ./sysutex/ex49.pp
Program Example49 ; { T h i s program demonstrates t h e AnsiCompareStr f u n c t i o n } { $H+ } Uses s y s u t i l s ; Procedure T e s t I t ( S1 , S2 : S t r i n g ) ; Var R : L o n g i n t ; begin R: = AnsiCompareStr ( S1 , S2 ) ; Write ( " , S1 , " i s ) ; I f R<0 then w r i t e ( l e s s than ) else I f R=0 then Write ( equal t o )
1471
else Write ( l a r g e r than ) ; W r i t e l n ( " , S2 , " ) ; end ; Begin Testit ( Testit ( Testit ( Testit ( End .
, , , ,
38.13.8
AnsiCompareText
Synopsis: Compare 2 ansistrings, case insensitive, ignoring accents characters. Declaration: function AnsiCompareText(const S1: string;const S2: string) : Integer Visibility: default Description: AnsiCompareText compares two strings and returns the following result: <0if S1<S2. 0if S1=S2. >0if S1>S2. the comparision takes into account Ansi characters, i.e. it takes care of strange accented characters. Contrary to AnsiCompareStr (1471), the comparision is case insensitive. Remark: A widestring manager must be installed in order for this function to work correctly with various character sets. Errors: None. See also: AdjustLineBreaks (1470), AnsiCompareText (1472) Listing: ./sysutex/ex50.pp
Program Example49 ; { T h i s program demonstrates t h e AnsiCompareText f u n c t i o n } { $H+ } Uses s y s u t i l s ; Procedure T e s t I t ( S1 , S2 : S t r i n g ) ; Var R : L o n g i n t ; begin R: = AnsiCompareText ( S1 , S2 ) ; Write ( " , S1 , " i s ) ; I f R<0 then w r i t e ( l e s s than ) else I f R=0 then Write ( equal t o ) else
1472
Write ( l a r g e r than ) ; W r i t e l n ( " , S2 , " ) ; end ; Begin Testit ( Testit ( Testit ( Testit ( End .
, , , ,
38.13.9
Synopsis:
AnsiDequotedStr
38.13.10
AnsiExtractQuotedStr
Synopsis: Removes the rst quoted string from a string. Declaration: function AnsiExtractQuotedStr(var Src: PChar;Quote: Char) : string Visibility: default Description: AnsiExtractQuotedStr returns the rst quoted string in Src, and deletes the result from Src. The resulting string has with Quote characters removed from the beginning and end of the string (if they are present), and double Quote characters replaced by a single Quote characters. As such, it revereses the action of AnsiQuotedStr (1475). Errors: None. See also: AnsiQuotedStr (1475) Listing: ./sysutex/ex51.pp
Program Example51 ; { T h i s program demonstrates t h e AnsiQuotedStr f u n c t i o n } Uses s y s u t i l s ; Var S : AnsiString ; P : PChar ; Begin S: = He s a i d " H e l l o " and walked on ; P: = Pchar (S ) ; S: = AnsiQuotedStr ( P , " ) ; Writeln ( S ) ; P: = Pchar (S ) ; Writeln ( AnsiExtractQuotedStr (P, " ) ) ; End .
1473
38.13.11
AnsiLastChar
Synopsis: Return a pointer to the last character of a string. Declaration: function AnsiLastChar(const S: string) : PChar Visibility: default Description: This function returns a pointer to the last character of S. Remark: A widestring manager must be installed in order for this function to work correctly with various character sets. If none is installed, this function is the same as @S[Length[S]]. Errors: None. See also: AnsiStrLastChar (1478) Listing: ./sysutex/ex52.pp
Program Example52 ; { T h i s program demonstrates t h e AnsiLastChar f u n c t i o n } Uses s y s u t i l s ; Var S : A n s i S t r i n g ; L : Longint ; Begin S: = T h i s i s an a n s i s t r i n g . ; W r i t e l n ( L a s t c h a r a c t e r o f S i s : , AnsiLastChar (S ) ) ; L : = L o n g i n t ( AnsiLastChar (S)) L o n g i n t (@S[ 1 ] ) + 1 ; W r i t e l n ( Length o f S i s : , L ) ; End .
38.13.12
AnsiLowerCase
Synopsis: Return a lowercase version of a string. Declaration: function AnsiLowerCase(const s: string) : string Visibility: default Description: AnsiLowerCase converts the string S to lowercase 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. Remark: A widestring manager must be installed in order for this function to work correctly with various character sets. Errors: None. See also: AnsiUpperCase (1482), AnsiStrLower (1480), AnsiStrUpper (1482) Listing: ./sysutex/ex53.pp
Program Example53 ; { T h i s program demonstrates t h e AnsiLowerCase f u n c t i o n }
1474
Uses s y s u t i l s ; Procedure T e s t i t ( S : S t r i n g ) ; begin W r i t e l n ( S , > , AnsiLowerCase (S ) ) end ; Begin T e s t i t ( AN UPPERCASE STRING ) ; T e s t i t ( Some mixed STring ) ; T e s t i t ( a lowercase s t r i n g ) ; End .
38.13.13
AnsiLowerCaseFileName
Synopsis: Convert lename to lowercase. Declaration: function AnsiLowerCaseFileName(const s: string) : string Visibility: default Description: AnsiLowerCaseFileName simply returns the result of AnsiLowerCase(S); See also: AnsiLowerCase (1474), AnsiCompareFileName (1470), AnsiUpperCaseFileName (1483)
38.13.14
AnsiPos
Synopsis: Return Position of one ansistring in another. Declaration: function AnsiPos(const substr: string;const s: string) : SizeInt Visibility: default Description: AnsiPos does the same as the standard Pos function. See also: AnsiStrPos (1481), AnsiStrScan (1481), AnsiStrRScan (1481)
38.13.15
AnsiQuotedStr
Synopsis: Return a quoted version of a string. Declaration: function AnsiQuotedStr(const S: string;Quote: Char) : string Visibility: default Description: AnsiQuotedString quotes the string S and returns the result. This means that it puts the Quote character at both the beginning and end of the string and replaces any occurrence of Quote in S with 2 Quote characters. The action of AnsiQuotedString can be reversed by AnsiExtractQuotedStr (1473). For an example, see AnsiExtractQuotedStr (1473) Errors: None. See also: AnsiExtractQuotedStr (1473) 1475
38.13.16
AnsiSameStr
Synopsis: Checks whether 2 strings are the same (case sensitive) Declaration: function AnsiSameStr(const s1: string;const s2: string) : Boolean Visibility: default Description: SameText calls AnsiCompareStr (1471) with S1 and S2 as parameters and returns True if the result of that call is zero, or False otherwise. Remark: A widestring manager must be installed in order for this function to work correctly with various character sets. Errors: None. See also: AnsiCompareStr (1471), SameText (1556), AnsiSameText (1476)
38.13.17
AnsiSameText
Synopsis: Checks whether 2 strings are the same (case insensitive) Declaration: function AnsiSameText(const s1: string;const s2: string) : Boolean Visibility: default Description: SameText calls AnsiCompareText (1472) with S1 and S2 as parameters and returns True if the result of that call is zero, or False otherwise. See also: AnsiCompareText (1472), SameText (1556), AnsiSameStr (1476)
38.13.18
AnsiStrComp
Synopsis: Compare two null-terminated strings. Case sensitive. Declaration: function AnsiStrComp(S1: PChar;S2: PChar) : Integer Visibility: default Description: AnsiStrComp compares 2 PChar strings, and returns the following result: <0if S1<S2. 0if S1=S2. >0if S1>S2. The comparision of the two strings is case-sensitive. Remark: A widestring manager must be installed in order for this function to work correctly with various character sets. Errors: None. See also: AnsiCompareText (1472), AnsiCompareStr (1471) Listing: ./sysutex/ex54.pp
1476
Program Example54 ; { T h i s program demonstrates t h e AnsiStrComp f u n c t i o n } Uses s y s u t i l s ; Procedure T e s t I t ( S1 , S2 : Pchar ) ; Var R : L o n g i n t ; begin R: = AnsiStrComp ( S1 , S2 ) ; Write ( " , S1 , " i s ) ; I f R<0 then w r i t e ( l e s s than ) else I f R=0 then Write ( equal t o ) else Write ( l a r g e r than ) ; W r i t e l n ( " , S2 , " ) ; end ; Begin Testit ( Testit ( Testit ( Testit ( End .
, , , ,
38.13.19
AnsiStrIComp
Synopsis: Compare two null-terminated strings. Case insensitive. Declaration: function AnsiStrIComp(S1: PChar;S2: PChar) : Integer Visibility: default Description: AnsiStrIComp compares 2 PChar strings, and returns the following result: <0if S1<S2. 0if S1=S2. >0if S1>S2. The comparision of the two strings is case-insensitive. Remark: A widestring manager must be installed in order for this function to work correctly with various character sets. Errors: None. See also: AnsiCompareText (1472), AnsiCompareStr (1471) Listing: ./sysutex/ex55.pp
Program Example55 ; { T h i s program demonstrates t h e AnsiStrIComp f u n c t i o n }
1477
Uses s y s u t i l s ; Procedure T e s t I t ( S1 , S2 : Pchar ) ; Var R : L o n g i n t ; begin R: = AnsiStrIComp ( S1 , S2 ) ; Write ( " , S1 , " i s ) ; I f R<0 then w r i t e ( l e s s than ) else I f R=0 then Write ( equal t o ) else Write ( l a r g e r than ) ; W r i t e l n ( " , S2 , " ) ; end ; Begin Testit ( Testit ( Testit ( Testit ( End .
, , , ,
38.13.20
AnsiStrLastChar
Synopsis: Return a pointer to the last character of a string. Declaration: function AnsiStrLastChar(Str: PChar) : PChar Visibility: default Description: Return a pointer to the last character of the null-terminated string. Remark: A widestring manager must be installed in order for this function to work correctly with various character sets. If none is installed, this function is the same as @S[Length[S]]. Errors: None. See also: AnsiCompareText (1472), AnsiCompareStr (1471) Listing: ./sysutex/ex56.pp
Program Example56 ; { T h i s program demonstrates t h e AnsiStrLComp f u n c t i o n } Uses s y s u t i l s ; Procedure T e s t I t ( S1 , S2 : Pchar ; L : l o n g i n t ) ; Var R : L o n g i n t ; begin R: = AnsiStrLComp ( S1 , S2 , L ) ; Write ( F i r s t , L , c h a r a c t e r s o f " , S1 , " are ) ;
1478
I f R<0 then w r i t e ( l e s s than ) else I f R=0 then Write ( equal t o ) else Write ( l a r g e r than ) ; W r i t e l n ( those o f " , S2 , " ) ; end ; Begin Testit ( Testit ( Testit ( Testit ( End .
, , , ,
38.13.21
AnsiStrLComp
Synopsis: Compare a limited number of characters of 2 strings Declaration: function AnsiStrLComp(S1: PChar;S2: PChar;MaxLen: Cardinal) : Integer Visibility: default Description: AnsiStrLComp functions the same as AnsiStrComp (1476), but compares at most MaxLen characters. If the rst MaxLen characters in both strings are the same, then zero is returned. Note that this function processes embedded null characters, treating them as a normal character. Errors: None. See also: AnsiStrComp (1476), AnsiStrIComp (1477), AnsiStrLIComp (1479)
38.13.22
AnsiStrLIComp
Synopsis: Compares a given number of characters of a string, case insensitive. Declaration: function AnsiStrLIComp(S1: PChar;S2: PChar;MaxLen: Cardinal) : Integer Visibility: default Description: AnsiStrLIComp compares the rst Maxlen characters of 2 PChar strings, S1 and S2, and returns the following result: <0if S1<S2. 0if S1=S2. >0if S1>S2. The comparision of the two strings is case-insensitive. Remark: A widestring manager must be installed in order for this function to work correctly with various character sets. Errors: None. See also: AnsiCompareText (1472), AnsiCompareStr (1471) Listing: ./sysutex/ex57.pp 1479
Program Example57 ; { T h i s program demonstrates t h e AnsiStrLIComp f u n c t i o n } Uses s y s u t i l s ; Procedure T e s t I t ( S1 , S2 : Pchar ; L : l o n g i n t ) ; Var R : L o n g i n t ; begin R: = AnsiStrLIComp ( S1 , S2 , L ) ; Write ( F i r s t , L , c h a r a c t e r s o f " , S1 , " are ) ; I f R<0 then w r i t e ( l e s s than ) else I f R=0 then Write ( equal t o ) else Write ( l a r g e r than ) ; W r i t e l n ( those o f " , S2 , " ) ; end ; Begin Testit ( Testit ( Testit ( Testit ( End .
, , , ,
38.13.23
AnsiStrLower
Synopsis: Convert a null-terminated string to all-lowercase characters. Declaration: function AnsiStrLower(Str: PChar) : PChar Visibility: default Description: AnsiStrLower converts the PChar Str to lowercase characters and returns the resulting pchar. Note that Str itself is modied, not a copy, as in the case of AnsiLowerCase (1474). It takes into account the operating system language settings when doing this, so special characters are converted correctly as well. Remark: A widestring manager must be installed in order for this function to work correctly with various character sets. Errors: None. See also: AnsiStrUpper (1482), AnsiLowerCase (1474) Listing: ./sysutex/ex59.pp
Program Example59 ; { T h i s program demonstrates t h e AnsiStrLower f u n c t i o n } Uses s y s u t i l s ;
1480
Procedure T e s t i t ( S : Pchar ) ; begin W r i t e l n ( S , > , AnsiStrLower (S ) ) end ; Begin T e s t i t ( AN UPPERCASE STRING ) ; T e s t i t ( Some mixed STring ) ; T e s t i t ( a lowercase s t r i n g ) ; End .
38.13.24
AnsiStrPos
Synopsis: Return position of one null-terminated substring in another Declaration: function AnsiStrPos(str: PChar;substr: PChar) : PChar Visibility: default Description: AnsiStrPos returns a pointer to the rst occurrence of SubStr in Str. If SubStr does not occur in Str then Nil is returned. Errors: An access violation may occur if either Str or SubStr point to invalid memory. See also: AnsiPos (1475), AnsiStrScan (1481), AnsiStrRScan (1481)
38.13.25
AnsiStrRScan
Synopsis: Find last occurrence of a character in a null-terminated string. Declaration: function AnsiStrRScan(Str: PChar;Chr: Char) : PChar Visibility: default Description: AnsiStrPos returns a pointer to the last occurrence of the character Chr in Str. If Chr does not occur in Str then Nil is returned. Errors: An access violation may occur if Str points to invalid memory. See also: AnsiPos (1475), AnsiStrScan (1481), AnsiStrPos (1481)
38.13.26
AnsiStrScan
Synopsis: Find rst occurrence of a character in a null-terminated string. Declaration: function AnsiStrScan(Str: PChar;Chr: Char) : PChar Visibility: default Description: AnsiStrPos returns a pointer to the rst occurrence of the character Chr in Str. If Chr does not occur in Str then Nil is returned. Errors: An access violation may occur if Str points to invalid memory. See also: AnsiPos (1475), AnsiStrScan (1481), AnsiStrPos (1481)
1481
38.13.27
AnsiStrUpper
Synopsis: Convert a null-terminated string to all-uppercase characters. Declaration: function AnsiStrUpper(Str: PChar) : PChar Visibility: default Description: AnsiStrUpper converts the PCharStr to uppercase characters and returns the resulting string. Note that Str itself is modied, not a copy, as in the case of AnsiUpperCase (1482). It takes into account the operating system language settings when doing this, so special characters are converted correctly as well. Remark: A widestring manager must be installed in order for this function to work correctly with various character sets. Errors: None. See also: AnsiUpperCase (1482), AnsiStrLower (1480), AnsiLowerCase (1474) Listing: ./sysutex/ex60.pp
Program Example60 ; { T h i s program demonstrates t h e AnsiStrUpper f u n c t i o n } Uses s y s u t i l s ; Procedure T e s t i t ( S : Pchar ) ; begin W r i t e l n ( S , > , AnsiStrUpper (S ) ) end ; Begin T e s t i t ( AN UPPERCASE STRING ) ; T e s t i t ( Some mixed STring ) ; T e s t i t ( a lowercase s t r i n g ) ; End .
38.13.28
AnsiUpperCase
Synopsis: Return an uppercase version of a string, taking into account special characters. Declaration: function AnsiUpperCase(const s: string) : string Visibility: default Description: AnsiUpperCase converts the string S 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. Remark: A widestring manager must be installed in order for this function to work correctly with various character sets. Errors: None. See also: AnsiStrUpper (1482), AnsiStrLower (1480), AnsiLowerCase (1474) Listing: ./sysutex/ex61.pp 1482
Program Example60 ; { T h i s program demonstrates t h e AnsiUpperCase f u n c t i o n } Uses s y s u t i l s ; Procedure T e s t i t ( S : S t r i n g ) ; begin W r i t e l n ( S , > , AnsiUpperCase (S ) ) end ; Begin T e s t i t ( AN UPPERCASE STRING ) ; T e s t i t ( Some mixed STring ) ; T e s t i t ( a lowercase s t r i n g ) ; End .
38.13.29
AnsiUpperCaseFileName
Synopsis: Convert lename to uppercase. Declaration: function AnsiUpperCaseFileName(const s: string) : string Visibility: default Description: AnsiUpperCaseFileName simply returns the result of AnsiUpperCase(S); See also: AnsiUpperCase (1482), AnsiCompareFileName (1470), AnsiLowerCaseFileName (1475)
38.13.30
AppendStr
Synopsis: Append one ansistring to another. Declaration: procedure AppendStr(var Dest: string;const S: string) Visibility: default Description: AppendStr appends S to Dest. This function is provided for Delphi compatibility only, since it is completely equivalent to Dest:=Dest+S. Errors: None. See also: AssignStr (1484), NewStr (1552), DisposeStr (1501) Listing: ./sysutex/ex62.pp
Program Example62 ; { T h i s program demonstrates t h e AppendStr f u n c t i o n } Uses s y s u t i l s ; Var S : A n s i S t r i n g ;
1483
38.13.31
ApplicationName
Synopsis: Return a default application name Declaration: function ApplicationName : string Visibility: default Description: ApplicationName returns the name of the current application. Standard this is equal to the lename part minus extension of ParamStr(0), but it can be customized by setting the OnGetApplicationName (1467) callback. Note that the returned value is only the name portion. It does not contain any path or le extension. Errors: None. See also: GetAppCongDir (1538), OnGetApplicationName (1467), GetAppCongFile (1538), CongExtension (1450)
38.13.32
AssignStr
Synopsis: Assigns an ansistring to a null-terminated string. Declaration: procedure AssignStr(var P: PString;const S: string) Visibility: default Description: AssignStr allocates S to P. The old value of P is disposed of. This function is provided for Delphi compatibility only. AnsiStrings are managed on the heap and should be preferred to the mechanism of dynamically allocated strings. Errors: None. See also: NewStr (1552), AppendStr (1483), DisposeStr (1501) Listing: ./sysutex/ex63.pp
Program Example63 ; { T h i s program demonstrates t h e A s s i g n S t r f u n c t i o n } { $H+ } Uses s y s u t i l s ; Var P : P S t r i n g ; Begin P: = NewStr ( A f i r s t A n s i S t r i n g ) ; W r i t e l n ( Before : P = " ,P^ , " ) ; A s s i g n S t r ( P , A Second a n s i s t r i n g ) ; W r i t e l n ( A f t e r : P = " ,P^ , " ) ;
1484
DisposeStr (P ) ; End .
38.13.33
BCDToInt
Synopsis: Convert a BCD coded integer to a normal integer. Declaration: function BCDToInt(Value: Integer) : Integer Visibility: default Description: BCDToInt converts a BCD coded integer to a normal integer. Errors: None. See also: StrToInt (1577), IntToStr (1547) Listing: ./sysutex/ex64.pp
Program Example64 ; { T h i s program demonstrates t h e BCDToInt f u n c t i o n } Uses s y s u t i l s ; Procedure T e s t i t ( L : l o n g i n t ) ; begin W r i t e l n ( L , > , BCDToInt ( L ) ) ; end ; Begin Testit (10); Testit (100); TestIt (23); End .
38.13.34
Beep
Synopsis: Sound the system bell. Declaration: procedure Beep Visibility: default Description: Beep sounds the system bell, if one is available. The actual beep is produced by the OnBeep (1467) callback. The Sysutils unit itself contains no implementation of this call.
38.13.35
BoolToStr
Synopsis: Convert a boolean value to a string. Declaration: function BoolToStr(B: Boolean;UseBoolStrs: Boolean) : string function BoolToStr(B: Boolean;const TrueS: string;const FalseS: string) : string Visibility: default 1485
Description: BoolToStr converts the boolean B to one of the strings TRUE or FALSE Errors: None. See also: StrToBool (1572)
38.13.36
ByteToCharIndex
Synopsis: Convert a character index in Bytes to an Index in characters Declaration: function ByteToCharIndex(const S: string;Index: Integer) : Integer Visibility: default Description: ByteToCharIndex returns the index (in characters) of the Index-th byte in S. Errors: This function does not take into account MBCS yet. See also: CharToByteLen (1487), ByteToCharLen (1486)
38.13.37
ByteToCharLen
Synopsis: Convert a length in bytes to a length in characters. Declaration: function ByteToCharLen(const S: string;MaxLen: Integer) : Integer Visibility: default Description: ByteToCharLen returns the number of bytes in S, but limits the result to MaxLen Errors: This function does not take into account MBCS yet. See also: CharToByteLen (1487), ByteToCharIndex (1486)
38.13.38
ByteType
Synopsis: Return the type of byte in an ansistring for a multi-byte character set Declaration: function ByteType(const S: string;Index: Integer) : TMbcsByteType Visibility: default Description: ByteType returns the type of byte in the ansistring S at (1-based) position Index. Errors: No checking on the index is performed. See also: TMbcsByteType (1462), StrByteType (1559)
38.13.39
CallTerminateProcs
Synopsis: Call the exit chain procedures. Declaration: function CallTerminateProcs : Boolean Visibility: default Description: CallTerminateProcs is run on program exit. It executes all terminate procedures that were added to the exit chain with AddTerminateProc (1470), and does this in reverse order.
1486
Errors: If one of the exit procedure raises an exception, it is not caught, and the remaining exit procedures will not be executed. See also: TTerminateProc (1464), AddTerminateProc (1470)
38.13.40
ChangeFileExt
Synopsis: Change the extension of a lename. Declaration: function ChangeFileExt(const FileName: string;const Extension: string) : string Visibility: default Description: ChangeFileExt changes the le extension in FileName to Extension. The extension Extension includes the starting . (dot). The previous extension of FileName are all characters after the last ., the . character included. If FileName doesnt have an extension, Extension is just appended. Errors: None. See also: ExtractFileName (1508), ExtractFilePath (1509), ExpandFileName (1506)
38.13.41
CharToByteLen
Synopsis: Convert a length in characters to a length in bytes. Declaration: function CharToByteLen(const S: string;MaxLen: Integer) : Integer Visibility: default Description: CharToByteLen returns the number of bytes in S, but limits the result to MaxLen Errors: This function does not take into account MBCS yet. See also: ByteToCharLen (1486), ByteToCharIndex (1486)
38.13.42
CompareMem
Synopsis: Compare two memory areas. Declaration: function CompareMem(P1: Pointer;P2: Pointer;Length: PtrUInt) : Boolean Visibility: default Description: CompareMem compares, byte by byte, 2 memory areas pointed to by P1 and P2, for a length of L bytes. It returns the following values: <0if at some position the byte at P1 is less than the byte at the same postion at P2. 0if all L bytes are the same. >0if at some position the byte at P1 is greater than the byte at the same postion at P2.
1487
38.13.43
CompareMemRange
Synopsis: Compare 2 memory locations Declaration: function CompareMemRange(P1: Pointer;P2: Pointer;Length: PtrUInt) : Integer Visibility: default Description: CompareMemRange compares the 2 memory locations pointed to by P1 and P2 byte per byte. It stops comparing after Length bytes have been compared, or when it has encountered 2 different bytes. The result is then >0if a byte in range P1 was found that is bigger than the corresponding byte in range P2. 0if all bytes in range P1 are the same as the corresponding bytes in range P2. <0if a byte in range P1 was found that is less than the corresponding byte in range P2. Errors: None. See also: SameText (1556)
38.13.44
CompareStr
Synopsis: Compare 2 ansistrings case-sensitively, ignoring special characters. Declaration: function CompareStr(const S1: string;const S2: string) : Integer ; Overload Visibility: default Description: CompareStr compares two strings, S1 and S2, and returns the following result: <0if S1<S2. 0if S1=S2. >0if S1>S2. The comparision of the two strings is case-sensitive. The function does not take internationalization settings into account, it simply compares ASCII values. Errors: None. See also: AnsiCompareText (1472), AnsiCompareStr (1471), CompareText (1489) Listing: ./sysutex/ex65.pp
Program Example65 ; { T h i s program demonstrates t h e CompareStr f u n c t i o n } { $H+ } Uses s y s u t i l s ; Procedure T e s t I t ( S1 , S2 : S t r i n g ) ; Var R : L o n g i n t ; begin R: = CompareStr ( S1 , S2 ) ;
1488
Write ( " , S1 , " i s ) ; I f R<0 then w r i t e ( l e s s than ) else I f R=0 then Write ( equal t o ) else Write ( l a r g e r than ) ; W r i t e l n ( " , S2 , " ) ; end ; Begin Testit ( Testit ( Testit ( Testit ( End .
, , , ,
38.13.45
CompareText
Synopsis: Compare 2 ansistrings case insensitive. Declaration: function CompareText(const S1: string;const S2: string) : Integer Visibility: default Description: CompareText compares two strings, S1 and S2, and returns the following result: <0if S1<S2. 0if S1=S2. >0if S1>S2. The comparision of the two strings is case-insensitive. The function does not take internationalization settings into account, it simply compares ASCII values. Errors: None. See also: AnsiCompareText (1472), AnsiCompareStr (1471), CompareStr (1488) Listing: ./sysutex/ex66.pp
Program Example66 ; { T h i s program demonstrates t h e CompareText f u n c t i o n } { $H+ } Uses s y s u t i l s ; Procedure T e s t I t ( S1 , S2 : S t r i n g ) ; Var R : L o n g i n t ; begin R: = CompareText ( S1 , S2 ) ; Write ( " , S1 , " i s ) ; I f R<0 then w r i t e ( l e s s than ) else I f R=0 then
1489
Write ( equal t o ) else Write ( l a r g e r than ) ; W r i t e l n ( " , S2 , " ) ; end ; Begin Testit ( Testit ( Testit ( Testit ( End .
, , , ,
38.13.46
ComposeDateTime
Synopsis: Add a date and time Declaration: function ComposeDateTime(Date: TDateTime;Time: TDateTime) : TDateTime Visibility: default Description: ComposeDateTime correctly adds Date and Time, also for dates before 1899-12-31. For dates after this date, it is just the mathematical addition. Errors: None. See also: #rtl.dateutils.EncodeDateTime (463)
38.13.47
ConcatPaths
Synopsis: Concatenate an array of paths to form a single path Declaration: function ConcatPaths(const Paths: Array of ) : string Visibility: default Description: ConcatPaths will concatenate the different path components in Paths to a single path. It will insert directory separators between the various components of the path as needed. No directory separators will be added to the beginning or the end of the path, and none will be taken away. See also: IncludeTrailingPathDelimiter (1545), IncludeLeadingPathDelimiter (1544), ExcludeTrailingPathDelimiter (1505), IncludeTrailingPathDelimiter (1545) Listing: ./sysutex/ex96.pp
program ex96 ; { T h i s program demonstrates t h e Concatpaths f u n c t i o n } uses s y s u t i l s ; begin / / w i l l w r i t e / t h i s / path / more / l e v e l s / W r i t e l n ( ConcatPaths ( [ / t h i s / , path , more / l e v e l s / ] ) ) ; / / w i l l w r i t e t h i s / path / more / l e v e l s / W r i t e l n ( ConcatPaths ( [ t h i s / , path , more / l e v e l s / ] ) ) ; / / w i l l w r i t e t h i s / path / more / l e v e l s W r i t e l n ( ConcatPaths ( [ t h i s / , path , more / l e v e l s ] ) ) ; end .
1490
38.13.48
CreateDir
Synopsis: Create a new directory Declaration: function CreateDir(const NewDir: string) : Boolean Visibility: default Description: CreateDir creates a new directory with name NewDir. If the directory doesnt contain an absolute path, then the directory is created below the current working directory. The function returns True if the directory was successfully created, False otherwise. Errors: In case of an error, the function returns False. See also: RemoveDir (1554) Listing: ./sysutex/ex26.pp
Program Example26 ; { T h i s program demonstrates t h e C r e a t e D i r and RemoveDir f u n c t i o n s } { Run t h i s program t w i c e i n t h e same d i r e c t o r y } Uses s y s u t i l s ; Begin I f Not D i r e c t o r y E x i s t s ( NewDir ) then I f Not C r e a t e D i r ( NewDir ) Then Writeln ( Failed to create d i r e c t o r y else W r i t e l n ( Created " NewDir " d i r e c t o r y Else I f Not RemoveDir ( NewDir ) Then W r i t e l n ( F a i l e d t o remove d i r e c t o r y else W r i t e l n ( Removed " NewDir " d i r e c t o r y End .
! ) )
! ) );
38.13.49
CreateGUID
Synopsis: Create a new GUID Declaration: function CreateGUID(out GUID: TGuid) : Integer Visibility: default Description: CreateGUID can be called to create a new GUID (Globally Unique Identier) value. The function returns the new GUID value in GUID and returns zero in case the GUID was created succesfully. If no GUID was created, a nonzero error code is returned. The default mechanism for creating a new GUID is system dependent. If operating system support is available, it is used. If none is available, a default implementation using random numbers is used. The OnCreateGUID callback can be set to hook a custom mechanism behind the CreateGUID function. This can be used to lt the GUID be created by an external GUID creation library. Errors: On error, a nonzero return value is returned. See also: GUIDCase (1543), IsEqualGUID (1548), StringToGUID (1564), TryStringToGUID (1588), GUIDToString (1543) 1491
38.13.50
CurrentYear
Synopsis: Return the current year Declaration: function CurrentYear : Word Visibility: default Description: CurrentYear returns the current year as a 4-digit number. Errors: None. See also: Date (1492), Time (1583), Now (1552)
38.13.51
CurrToStr
Synopsis: Convert a currency value to a string. Declaration: function CurrToStr(Value: Currency) : string function CurrToStr(Value: Currency; const FormatSettings: TFormatSettings) : string Visibility: default Description: CurrToStr will convert a currency value to a string with a maximum of 15 digits, and precision 2. Calling CurrToStr is equivalent to calling FloatToStrF (1523): FloatToStrF(Value,ffNumber,15,2); Errors: None. See also: FloatToStrF (1523), StrToCurr (1573)
38.13.52
CurrToStrF
Synopsis: Format a currency to a string Declaration: function CurrToStrF(Value: Currency;Format: TFloatFormat; Digits: Integer) : string function CurrToStrF(Value: Currency;Format: TFloatFormat; Digits: Integer; const FormatSettings: TFormatSettings) : string Visibility: default Description: CurrToStrF formats the currency Value according to the value in Format, using the number of digits specied in Digits, and a precision of 19. This function simply calls FloatToStrF (1523). See also: FloatToStrF (1523)
38.13.53
Date
Synopsis: Return the current date. Declaration: function Date : TDateTime Visibility: default
1492
Description: Date returns the current date in TDateTime format. Errors: None. See also: Time (1583), Now (1552) Listing: ./sysutex/ex1.pp
Program Example1 ; { T h i s program demonstrates t h e Date f u n c t i o n } uses s y s u t i l s ; Var YY,MM,DD : Word ; Begin W r i t e l n ( Date : , Date ) ; DeCodeDate ( Date , YY,MM,DD ) ; W r i t e l n ( format ( Date i s ( DD/MM/ YY) : % d/%d/%d , [ dd ,mm, yy ] ) ) ; End .
38.13.54
DateTimeToFileDate
Synopsis: Convert a TDateTime value to a le age (integer) Declaration: function DateTimeToFileDate(DateTime: TDateTime) : LongInt Visibility: default Description: DateTimeToFileDate function converts a date/time indication in TDateTime format to a ledate function, such as returned for instance by the FileAge (1510) function. Errors: None. See also: Time (1583), Date (1492), FileDateToDateTime (1512), DateTimeToSystemTime (1495), DateTimeToTimeStamp (1496) Listing: ./sysutex/ex2.pp
Program Example2 ; { T h i s program demonstrates t h e DateTimeToFileDate f u n c t i o n } Uses s y s u t i l s ; Begin W r i t e l n ( F i l e T i m e o f now would be : , DateTimeToFileDate ( Now ) ) ; End .
38.13.55
DateTimeToStr
Synopsis: Converts a TDateTime value to a string using a predened format. Declaration: function DateTimeToStr(DateTime: TDateTime) : string function DateTimeToStr(DateTime: TDateTime; const FormatSettings: TFormatSettings) : string 1493
Visibility: default Description: DateTimeToStr returns a string representation of DateTime using the formatting specied in LongDateTimeFormat. It corresponds to a call to FormatDateTime(c,DateTime) (see formatchars (1448)). Errors: None. See also: FormatDateTime (1535) Listing: ./sysutex/ex3.pp
Program Example3 ; { T h i s program demonstrates t h e DateTimeToStr f u n c t i o n } Uses s y s u t i l s ; Begin W r i t e l n ( Today i s : W r i t e l n ( Today i s : End .
38.13.56
DateTimeToString
Synopsis: Converts a TDateTime value to a string with a given format. Declaration: procedure DateTimeToString(out Result: string;const FormatStr: string; const DateTime: TDateTime) procedure DateTimeToString(out Result: string;const FormatStr: string; const DateTime: TDateTime; const FormatSettings: TFormatSettings) Visibility: default Description: DateTimeToString returns in Result a string representation of DateTime using the formatting specied in FormatStr. for a list of characters that can be used in the FormatStr formatting string, see formatchars (1448). Errors: In case a wrong formatting character is found, an EConvertError is raised. See also: FormatDateTime (1535), formatchars (1448) Listing: ./sysutex/ex4.pp
Program Example4 ; { T h i s program demonstrates t h e DateTimeToString f u n c t i o n } Uses s y s u t i l s ;
1494
Writeln ( S ) ; end ; Procedure Now ( Fmt : s t r i n g ) ; Var S : A n s i S t r i n g ; begin DateTimeToString ( S , Fmt , Time ) ; Writeln ( S ) ; end ; Begin Today ( Today ( Today ( Now ( Now ( Now ( End .
" dddd dd mmmm y ) ; " d mmm yy ) ; " d /mmm/ yy ) ; i s am/ pmh : n : s ) ; i s hh : nn : ssam /pm ) ; is t t );
38.13.57
DateTimeToSystemTime
Synopsis: Converts a TDateTime value to a systemtime structure. Declaration: procedure DateTimeToSystemTime(DateTime: TDateTime; out SystemTime: TSystemTime) Visibility: default Description: DateTimeToSystemTime converts a date/time pair in DateTime, with TDateTime format to a system time SystemTime. Errors: None. See also: DateTimeToFileDate (1493), SystemTimeToDateTime (1582), DateTimeToTimeStamp (1496) Listing: ./sysutex/ex5.pp
Program Example5 ; { T h i s program demonstrates t h e DateTimeToSystemTime f u n c t i o n } Uses s y s u t i l s ; Var ST : TSystemTime ; Begin DateTimeToSystemTime (Now, ST ) ; With St do begin W r i t e l n ( Today i s , year , / , month , / , Day ) ; W r i t e l n ( The t i m e i s , Hour , : , minute , : , Second , . , M i l l i S e c o n d ) ; end ; End .
1495
38.13.58
DateTimeToTimeStamp
Synopsis: Converts a TDateTime value to a TimeStamp structure. Declaration: function DateTimeToTimeStamp(DateTime: TDateTime) : TTimeStamp Visibility: default Description: DateTimeToSystemTime converts a date/time pair in DateTime, with TDateTime format to a TTimeStamp format. Errors: None. See also: DateTimeToFileDate (1493), SystemTimeToDateTime (1582), DateTimeToSystemTime (1495) Listing: ./sysutex/ex6.pp
Program Example6 ; { T h i s program demonstrates t h e DateTimeToTimeStamp f u n c t i o n } Uses s y s u t i l s ; Var TS : TTimeStamp ; Begin TS: = DateTimeToTimeStamp ( Now ) ; With TS do begin W r i t e l n ( Now i s , time , m i l l i s e c o n d p a s t m i d n i g h t ) ; W r i t e l n ( Today i s , Date , days p a s t 1 / 1 / 0 0 0 1 ) ; end ; End .
38.13.59
DateToStr
Synopsis: Converts a TDateTime value to a date string with a predened format. Declaration: function DateToStr(Date: TDateTime) : string function DateToStr(Date: TDateTime; const FormatSettings: TFormatSettings) : string Visibility: default Description: DateToStr converts Date to a string representation. It uses ShortDateFormat as its formatting string. It is hence completely equivalent to a FormatDateTime(ddddd, Date). Errors: None. See also: TimeToStr (1585), DateTimeToStr (1493), FormatDateTime (1535), StrToDate (1573) Listing: ./sysutex/ex7.pp
Program Example7 ; { T h i s program demonstrates t h e DateToStr f u n c t i o n } Uses s y s u t i l s ;
1496
38.13.60
DayOfWeek
Synopsis: Returns the day of the week. Declaration: function DayOfWeek(DateTime: TDateTime) : Integer Visibility: default Description: DayOfWeek returns the day of the week from DateTime. Sunday is counted as day 1, Saturday is counted as day 7. The result of DayOfWeek can serve as an index to the LongDayNames constant array, to retrieve the name of the day. Errors: None. See also: Date (1492), DateToStr (1496) Listing: ./sysutex/ex8.pp
Program Example8 ; { T h i s program demonstrates t h e DayOfWeek f u n c t i o n } Uses s y s u t i l s ; Begin W r i t e l n ( Today s day i s End .
38.13.61
DecodeDate
Synopsis: Decode a TDateTime to a year,month,day triplet Declaration: procedure DecodeDate(Date: TDateTime;out Year: Word;out Month: Word; out Day: Word) Visibility: default Description: DecodeDate decodes the Year, Month and Day stored in Date, and returns them in the Year, Month and Day variables. Errors: None. See also: EncodeDate (1502), DecodeTime (1498) Listing: ./sysutex/ex9.pp
Program Example9 ; { T h i s program demonstrates t h e DecodeDate f u n c t i o n } Uses s y s u t i l s ; Var YY,MM,DD : Word ;
1497
38.13.62
DecodeDateFully
Synopsis: Decode a date with additional date of the week. Declaration: function DecodeDateFully(const DateTime: TDateTime;out Year: Word; out Month: Word;out Day: Word;out DOW: Word) : Boolean Visibility: default Description: DecodeDateFully, like DecodeDate (1497), decodes DateTime in its parts and returns these in Year, Month, Day but in addition returns the day of the week in DOW. Errors: None. See also: EncodeDate (1502), TryEncodeDate (1587), DecodeDate (1497)
38.13.63
DecodeTime
Synopsis: Decode a TDateTime to a hour,minute,second,millisec quartet Declaration: procedure DecodeTime(Time: TDateTime;out Hour: Word;out Minute: Word; out Second: Word;out MilliSecond: Word) Visibility: default Description: DecodeDate decodes the hours, minutes, second and milliseconds stored in Time, and returns them in the Hour, Minute and Second and MilliSecond variables. Errors: None. See also: EncodeTime (1502), DecodeDate (1497) Listing: ./sysutex/ex10.pp
Program Example10 ; { T h i s program demonstrates t h e DecodeTime f u n c t i o n } Uses s y s u t i l s ; Var HH,MM, SS,MS : Word ; Begin DecodeTime ( Time ,HH,MM, SS,MS) ; W r i t e l n ( format ( The t i m e i s %d:%d:%d.%d , [ hh ,mm, ss , ms ] ) ) ; End .
1498
38.13.64
DeleteFile
Synopsis: Delete a le from the lesystem. Declaration: function DeleteFile(const FileName: string) : Boolean Visibility: default Description: DeleteFile deletes le FileName from disk. The function returns True if the le was successfully removed, False otherwise. Errors: On error, False is returned. See also: FileCreate (1511), FileExists (1512) Listing: ./sysutex/ex31.pp
Program Example31 ; { T h i s program demonstrates t h e D e l e t e F i l e f u n c t i o n } Uses s y s u t i l s ; Var Line : String ; F , I : Longint ; Begin F:= FileCreate ( t e s t . t x t ) ; L i n e : = Some s t r i n g l i n e . #10; For I : = 1 to 1 0 do F i l e W r i t e ( F , L i n e [ 1 ] , Length ( L i n e ) ) ; FileClose ( F ) ; DeleteFile ( t e s t . t x t ) ; End .
38.13.65
DirectoryExists
Synopsis: Check whether a directory exists in the le system. Declaration: function DirectoryExists(const Directory: string) : Boolean Visibility: default Description: DirectoryExists checks whether Directory exists in the lesystem and is actually a directory. If this is the case, the function returns True, otherwise False is returned. See also: FileExists (1512)
38.13.66
DiskFree
Synopsis: Return the amount of free diskspace Declaration: function DiskFree(drive: Byte) : Int64 Visibility: default Description: DiskFree returns the free space (in bytes) on disk Drive. Drive is the number of the disk drive:
1499
0for the current drive. 1for the rst oppy drive. 2for the second oppy drive. 3for the rst hard-disk partition. 4-26for all other drives and partitions. Remark: Under Linux, and Unix in general, the concept of disk is different than the dos one, since the lesystem is seen as one big directory tree. For this reason, the DiskFree and DiskSize (1500) functions must be mimicked using lenames that reside on the partitions. For more information, see AddDisk (1469). Errors: On error, -1 is returned. See also: DiskSize (1500), AddDisk (1469) Listing: ./sysutex/ex27.pp
Program Example27 ; { T h i s program demonstrates t h e DiskFree f u n c t i o n } Uses s y s u t i l s ; Begin Write ( Writeln Write ( Writeln End .
, DiskSize ( 0 ) ) ; k) ); , Diskfree ( 0 ) ) ; k) );
38.13.67
DiskSize
Synopsis: Return the total amount of diskspace. Declaration: function DiskSize(drive: Byte) : Int64 Visibility: default Description: DiskSize returns the size (in bytes) of disk Drive. Drive is the number of the disk drive: 0for the current drive. 1for the rst oppy drive. 2for the second oppy drive. 3for the rst hard-disk parttion. 4-26for all other drives and partitions. Remark: Under Linux, and Unix in general, the concept of disk is different than the dos one, since the lesystem is seen as one big directory tree. For this reason, the DiskFree (1499) and DiskSize functions must be mimicked using lenames that reside on the partitions. For more information, see AddDisk (1469) For an example, see DiskFree (1499). Errors: On error, -1 is returned. See also: DiskFree (1499), AddDisk (1469) 1500
38.13.68
DisposeStr
Synopsis: Dispose an ansistring from the heap. Declaration: procedure DisposeStr(S: PString); Overload procedure DisposeStr(S: PShortString); Overload Visibility: default Description: DisposeStr removes the dynamically allocated string S from the heap, and releases the occupied memory. This function is provided for Delphi compatibility only. AnsiStrings are managed on the heap and should be preferred to the mechanism of dynamically allocated strings. For an example, see DisposeStr (1501). Errors: None. See also: NewStr (1552), AppendStr (1483), AssignStr (1484)
38.13.69
DoDirSeparators
Synopsis: Convert known directory separators to the current directory separator. Declaration: procedure DoDirSeparators(var FileName: string) Visibility: default Description: This function replaces all known directory separators in FileName to the directory separator character for the current system. The list of known separators is specied in the AllowDirectorySeparators (1229) constant. Errors: None. See also: ExtractFileName (1508), ExtractFilePath (1509) Listing: ./sysutex/ex32.pp
Program Example32 ; { T h i s program demonstrates t h e DoDirSeparators f u n c t i o n } { $H+ } Uses s y s u t i l s ; Procedure T e s t i t ( F : S t r i n g ) ; begin W r i t e l n ( Before : , F ) ; DoDirSeparators ( F ) ; Writeln ( A f t e r : ,F ) ; end ; Begin Testit Testit Testit Testit End .
( ( ( (
1501
38.13.70
EncodeDate
Synopsis: Encode a Year,Month,Day to a TDateTime value. Declaration: function EncodeDate(Year: Word;Month: Word;Day: Word) : TDateTime Visibility: default Description: EncodeDate encodes the Year, Month and Day variables to a date in TDateTime format. It does the opposite of the DecodeDate (1497) procedure. The parameters must lie withing valid ranges (boundaries included): Yearmust be between 1 and 9999. Monthmust be within the range 1-12. Daymsut be between 1 and 31. Errors: In case one of the parameters is out of its valid range, an EConvertError (1597) exception is raised. See also: EncodeTime (1502), DecodeDate (1497) Listing: ./sysutex/ex11.pp
Program Example11 ; { T h i s program demonstrates t h e EncodeDate f u n c t i o n } Uses s y s u t i l s ; Var YY,MM,DD : Word ; Begin DecodeDate ( Date , YY,MM,DD ) ; WriteLn ( Today i s : , FormatDateTime ( dd mmmm yyyy , EnCodeDate (YY,Mm, Dd ) ) ) ; End .
38.13.71
EncodeTime
Synopsis: Encode a Hour,Min,Sec,millisec to a TDateTime value. Declaration: function EncodeTime(Hour: Word;Minute: Word;Second: Word; MilliSecond: Word) : TDateTime Visibility: default Description: EncodeTime encodes the Hour, Minute, Second, MilliSecond variables to a TDateTime format result. It does the opposite of the DecodeTime (1498) procedure. The parameters must have a valid range (boundaries included): Hourmust be between 0 and 23. Minute,secondmust both be between 0 and 59. Millisecondmust be between 0 and 999. Errors: In case one of the parameters is out of its valid range, an EConvertError (1597) exception is raised. See also: EncodeDate (1502), DecodeTime (1498)
1502
Listing: ./sysutex/ex12.pp
Program Example12 ; { T h i s program demonstrates t h e EncodeTime f u n c t i o n } Uses s y s u t i l s ; Var Hh ,MM, SS,MS : Word ; Begin DeCodeTime ( Time , Hh ,MM, SS,MS) ; W r i t e l n ( Present Time i s : , FormatDateTime ( hh :mm: ss ,EnCodeTime ( HH,MM, SS,MS ) ) ) ; End .
38.13.72
ExceptAddr
Synopsis: Current exception address. Declaration: function ExceptAddr : Pointer Visibility: default Description: ExceptAddr returns the address from the currently treated exception object when an exception is raised, and the stack is unwound. See also: ExceptObject (1504), ExceptionErrorMessage (1504), ShowException (1557)
38.13.73
ExceptFrameCount
Synopsis: Number of frames included in an exception backtrace Declaration: function ExceptFrameCount : LongInt Visibility: default Description: ExceptFrameCount returns the number of frames that are included in an exception stack frame backtrace. The function returns 0 if there is currently no exception being handled. (i.e. it only makes sense to call this function in an finally..end or except..end block. Errors: None. See also: ExceptFrames (1503), ExceptAddr (1503), ExceptObject (1504), #rtl.system.ExceptProc (1231)
38.13.74
Synopsis:
ExceptFrames
Declaration: function ExceptFrames : PPointer Visibility: default Description: See also: ExceptFrameCount (1503), ExceptAddr (1503), ExceptObject (1504), #rtl.system.ExceptProc (1231)
1503
38.13.75
ExceptionErrorMessage
Synopsis: Return a message describing the exception. Declaration: function ExceptionErrorMessage(ExceptObject: TObject; ExceptAddr: Pointer;Buffer: PChar; Size: Integer) : Integer Visibility: default Description: ExceptionErrorMessage creates a string that describes the exception object ExceptObject at address ExceptAddr. It can be used to display exception messages. The string will be stored in the memory pointed to by Buffer, and will at most have Size characters. The routine checks whether ExceptObject is a Exception (1602) object or not, and adapts the output accordingly. See also: ExceptObject (1504), ExceptAddr (1503), ShowException (1557)
38.13.76
ExceptObject
Synopsis: Current Exception object. Declaration: function ExceptObject : TObject Visibility: default Description: ExceptObject returns the currently treated exception object when an exception is raised, and the stack is unwound. Errors: If there is no exception, the function returns Nil See also: ExceptAddr (1503), ExceptionErrorMessage (1504), ShowException (1557)
38.13.77
ExcludeLeadingPathDelimiter
Synopsis: Strip the leading path delimiter of a path Declaration: function ExcludeLeadingPathDelimiter(const Path: string) : string Visibility: default Description: ExcludeLeadingPathDelimiter will remove any path delimiter on the rst position of Path if there is one. if there is none (or the path is empty), it is left untouched. See also: IncludeTrailingPathDelimiter (1545), IncludeLeadingPathDelimiter (1544), ExcludeTrailingPathDelimiter (1505), ConcatPaths (1490) Listing: ./sysutex/ex95.pp
Program Example95 ; { T h i s program demonstrates t h e I n c l u d e L e a d i n g P a t h D e l i m i t e r f u n c t i o n } Uses s y s u t i l s ; Begin / / W i l l p r i n t " / t h i s / path " W r i t e l n ( I n c l u d e L e a d i n g P a t h D e l i m i t e r ( t h i s / path ) ) ; / / The same r e s u l t
1504
W r i t e l n ( I n c l u d e L e a d i n g P a t h D e l i m i t e r ( / t h i s / path ) ) ; End .
38.13.78
ExcludeTrailingBackslash
Synopsis: Strip trailing directory separator from a pathname, if needed. Declaration: function ExcludeTrailingBackslash(const Path: string) : string Visibility: default Description: ExcludeTrailingBackslash is provided for backwards compatibility with Delphi. Use ExcludeTrailingPathDelimiter (1505) instead. See also: IncludeTrailingPathDelimiter (1545), ExcludeTrailingPathDelimiter (1505), PathDelim (1454), IsPathDelimiter (1548)
38.13.79
ExcludeTrailingPathDelimiter
Synopsis: Strip trailing directory separator from a pathname, if needed. Declaration: function ExcludeTrailingPathDelimiter(const Path: string) : string Visibility: default Description: ExcludeTrailingPathDelimiter removes the trailing path delimiter character (PathDelim (1454)) from Path if it is present, and returns the result. See also: ExcludeTrailingBackslash (1505), IncludeTrailingPathDelimiter (1545), PathDelim (1454), IsPathDelimiter (1548)
38.13.80
ExecuteProcess
Synopsis: Execute another process (program). Declaration: function ExecuteProcess(const Path: AnsiString; const ComLine: AnsiString;Flags: TExecuteFlags) : Integer function ExecuteProcess(const Path: AnsiString; const ComLine: Array of AnsiString; Flags: TExecuteFlags) : Integer Visibility: default Description: ExecuteProcess will execute the program in Path, passing it the arguments in ComLine. ExecuteProcess will then wait for the program to nish, and will return the exit code of the executed program. In case ComLine is a single string, it will be split out in an array of strings, taking into account common whitespace and quote rules. The program specied in Path is not searched in the searchpath specied in the PATH environment variable, so the full path to the executable must be specied in Path, although some operating systems may perform this search anyway (notably, windows) Flags can be used to control the passing of le handles: if ExecInheritsHandles is included, the le handles of the current process will be passed on to the newly executed process.
1505
Errors: In case the program could not be executed or an other error occurs, an EOSError (1600) exception will be raised. See also: TExecuteFlags (1459), EOSError (1600)
38.13.81
ExeSearch
Synopsis: Search for an executable Declaration: function ExeSearch(const Name: string;const DirList: string) : string Visibility: default Description: ExeSearch searches for an executable Name in the list of directories DirList (a list of directories, separator by PathSeparator (1242). If the current OS also searches implicitly in the current working directory, the current directory is searched in the rst place. If the executable is found, then the full path of the executable is returned. If it is not found, an empty string is returned. No check is performed whether the found le is actually executable. See also: FileSearch (1516)
38.13.82
ExpandFileName
Synopsis: Expand a relative lename to an absolute lename. Declaration: function ExpandFileName(const FileName: string) : string Visibility: default Description: ExpandFileName expands the lename to an absolute lename. It changes all directory separator characters to the one appropriate for the system rst. Errors: None. See also: ExtractFileName (1508), ExtractFilePath (1509), ExtractFileDir (1507), ExtractFileDrive (1508), ExtractFileExt (1508), ExtractRelativePath (1509) Listing: ./sysutex/ex33.pp
Program Example33 ; { T h i s program demonstrates t h e ExpandFileName f u n c t i o n } Uses s y s u t i l s ; Procedure T e s t i t ( F : S t r i n g ) ; begin W r i t e l n ( F , expands t o : end ;
, ExpandFileName ( F ) ) ;
1506
38.13.83
ExpandUNCFileName
Synopsis: Expand a relative lename to an absolute UNC lename. Declaration: function ExpandUNCFileName(const FileName: string) : string Visibility: default Description: ExpandUNCFileName runs ExpandFileName (1506) on FileName and then attempts to replace the driveletter by the name of a shared disk. Errors: None. See also: ExtractFileName (1508), ExtractFilePath (1509), ExtractFileDir (1507), ExtractFileDrive (1508), ExtractFileExt (1508), ExtractRelativePath (1509)
38.13.84
ExtractFileDir
Synopsis: Extract the drive and directory part of a lename. Declaration: function ExtractFileDir(const FileName: string) : string Visibility: default Description: ExtractFileDir returns only the directory part of FileName, including a driveletter. The directory name has NO ending directory separator, in difference with ExtractFilePath (1509). Errors: None. See also: ExtractFileName (1508), ExtractFilePath (1509), ExtractFileDir (1507), ExtractFileDrive (1508), ExtractFileExt (1508), ExtractRelativePath (1509) Listing: ./sysutex/ex34.pp
Program Example34 ; { T h i s program demonstrates t h e Ex t ra c tF il e Na m e f u n c t i o n } { $H+ } Uses s y s u t i l s ; Procedure T e s t i t ( F : S t r i n g ) ; begin Writeln Writeln Writeln Writeln Writeln Writeln end ; Begin Testit Testit Testit Testit End .
( ( ( ( ( (
: : : : : :
1507
38.13.85
ExtractFileDrive
Synopsis: Extract the drive part from a lename. Declaration: function ExtractFileDrive(const FileName: string) : string Visibility: default Description: Extracts the drive letter from a lename. Note that some operating systems do not support drive letters. For an example, see ExtractFileDir (1507). See also: ExtractFileName (1508), ExtractFilePath (1509), ExtractFileDir (1507), ExtractFileDrive (1508), ExtractFileExt (1508), ExtractRelativePath (1509)
38.13.86
ExtractFileExt
Synopsis: Return the extension from a lename. Declaration: function ExtractFileExt(const FileName: string) : string Visibility: default Description: ExtractFileExt returns the extension (including the .(dot) character) of FileName. For an example, see ExtractFileDir (1507). Errors: None. See also: ExtractFileName (1508), ExtractFilePath (1509), ExtractFileDir (1507), ExtractFileDrive (1508), ExtractFileExt (1508), ExtractRelativePath (1509)
38.13.87
ExtractFileName
Synopsis: Extract the lename part from a full path lename. Declaration: function ExtractFileName(const FileName: string) : string Visibility: default Description: ExtractFileName returns the lename part from FileName. The lename consists of all characters after the last directory separator character (/ or \) or drive letter. The full lename can always be reconstucted by concatenating the result of ExtractFilePath (1509) and ExtractFileName. For an example, see ExtractFileDir (1507). Errors: None. See also: ExtractFileName (1508), ExtractFilePath (1509), ExtractFileDir (1507), ExtractFileDrive (1508), ExtractFileExt (1508), ExtractRelativePath (1509)
1508
38.13.88
ExtractFilePath
Synopsis: Extract the path from a lename. Declaration: function ExtractFilePath(const FileName: string) : string Visibility: default Description: ExtractFilePath returns the path part (including driveletter) from FileName. 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. The full lename can always be reconstucted by concatenating the result of ExtractFilePath and ExtractFileName (1508). For an example, see ExtractFileDir (1507). Errors: None. See also: ExtractFileName (1508), ExtractFilePath (1509), ExtractFileDir (1507), ExtractFileDrive (1508), ExtractFileExt (1508), ExtractRelativePath (1509)
38.13.89
ExtractRelativepath
Synopsis: Extract a relative path from a lename, given a base directory. Declaration: function ExtractRelativepath(const BaseName: string; const DestNAme: string) : string Visibility: default Description: ExtractRelativePath constructs a relative path to go from BaseName to DestName. If DestName is on another drive (Not on Unix-like platforms) then the whole Destname is returned. Note: This function does not exist in the Delphi unit. Errors: None. See also: ExtractFileName (1508), ExtractFilePath (1509), ExtractFileDir (1507), ExtractFileDrive (1508), ExtractFileExt (1508) Listing: ./sysutex/ex35.pp
Program Example35 ; { T h i s program demonstrates t h e E x t r a c t R e l a t i v e P a t h f u n c t i o n } Uses s y s u t i l s ; Procedure T e s t i t ( FromDir , ToDir : S t r i n g ) ; begin Write ( From " , FromDir , " t o " , ToDir , " v i a " ) ; W r i t e l n ( E x t r a c t R e l a t i v e P a t h ( FromDir , ToDir ) , " ) ; end ; Begin Testit Testit Testit Testit End .
( ( ( (
1509
38.13.90
ExtractShortPathName
Synopsis: Returns a 8.3 path name Declaration: function ExtractShortPathName(const FileName: string) : string Visibility: default Description: ExtractShortPathName returns a 8.3 compliant lename that represents the same le as FileName. On platforms other than windows, this is FileName itself. See also: ExtractFilePath (1509), ExtractFileName (1508)
38.13.91
FileAge
Synopsis: Return the timestamp of a le. Declaration: function FileAge(const FileName: string) : LongInt Visibility: default Description: FileAge returns the last modication time of le FileName. The FileDate format can be transformed to TDateTime format with the FileDateToDateTime (1512) function. Errors: In case of errors, -1 is returned. See also: FileDateToDateTime (1512), FileExists (1512), FileGetAttr (1513) Listing: ./sysutex/ex36.pp
Program Example36 ; { T h i s program demonstrates t h e F i l e A g e f u n c t i o n } Uses s y s u t i l s ; Var S : TDateTime ; fa : Longint ; Begin f a : = FileAge ( ex36 . pp ) ; I f Fa<>1 then begin S: = FileDateTodateTime ( f a ) ; W r i t e l n ( I m from , DateTimeToStr (S ) ) end ; End .
38.13.92
FileClose
Synopsis: Close a le handle. Declaration: procedure FileClose(Handle: THandle) Visibility: default Description: FileClose closes the le handle Handle. After this call, attempting to read or write from the handle will result in an error. For an example, see FileCreate (1511) 1510
Errors: None. See also: FileCreate (1511), FileWrite (1519), FileOpen (1515), FileRead (1516), FileTruncate (1518), FileSeek (1517)
38.13.93
FileCreate
Synopsis: Create a new le and return a handle to it. Declaration: function FileCreate(const FileName: string) : THandle function FileCreate(const FileName: string;Rights: Integer) : THandle function FileCreate(const FileName: string;ShareMode: Integer; Rights: Integer) : THandle Visibility: default Description: FileCreate creates a new le with name FileName on the disk and returns a le handle which can be used to read or write from the le with the FileRead (1516) and FileWrite (1519) functions. If a le with name FileName already existed on the disk, it is overwritten. The optional Mode parameter only has an effect under unix, where it can be used to set the mode (read, write, execute, sticky bit, setgid and setuid ags) of the created le to the specied custom value. On other platfors, the Mode parameter is ignored. Errors: If an error occurs (e.g. disk full or non-existent path), the function returns -1. See also: FileClose (1510), FileWrite (1519), FileOpen (1515), FileRead (1516), FileTruncate (1518), FileSeek (1517) Listing: ./sysutex/ex37.pp
Program Example37 ; { T h i s program demonstrates t h e F i l e C r e a t e f u n c t i o n } Uses s y s u t i l s ; Var I , J , F : L o n g i n t ; Begin F:= FileCreate ( t e s t . dat ) ; I f F=1 then Halt ( 1 ) ; For I : = 0 to 1 0 0 do F i l e W r i t e ( F , I , SizeOf ( i ) ) ; FileClose ( f ) ; F : = FileOpen ( t e s t . d a t , fmOpenRead ) ; For I : = 0 to 1 0 0 do begin FileRead ( F , J , SizeOF ( J ) ) ; I f J<> I then W r i t e l n ( Mismatch a t f i l e p o s i t i o n , I ) end ; FileSeek ( F , 0 , fsFromBeginning ) ; Randomize ; Repeat FileSeek ( F , Random( 1 0 0 ) 4 , fsFromBeginning ) ; FileRead ( F , J , SizeOf ( J ) ) ;
1511
W r i t e l n ( Random read : , j ) ; U n t i l J >80; FileClose ( F ) ; F : = FileOpen ( t e s t . d a t , fmOpenWrite ) ; I :=50 SizeOf ( L o n g i n t ) ; I f F i l e T r u n c a t e ( F , I ) then W r i t e l n ( S u c ce s s Fu l l y t r u n c a t e d f i l e t o , I , b y t e s . ) ; FileClose ( F ) ; End .
38.13.94
FileDateToDateTime
Synopsis: Convert a FileDate value to a TDateTime value. Declaration: function FileDateToDateTime(Filedate: LongInt) : TDateTime Visibility: default Description: FileDateToDateTime converts the date/time encoded in filedate to a TDateTime encoded form. It can be used to convert date/time values returned by the FileAge (1510) or FindFirst (1520)/FindNext (1521) functions to TDateTime form. Errors: None. See also: DateTimeToFileDate (1493) Listing: ./sysutex/ex13.pp
Program Example13 ; { T h i s program demonstrates t h e FileDateToDateTime f u n c t i o n } Uses s y s u t i l s ; Var ThisAge : L o n g i n t ; Begin Write ( ex13 . pp c r e a t e d on : ) ; ThisAge : = FileAge ( ex13 . pp ) ; W r i t e l n ( DateTimeToStr ( FileDateToDateTime ( ThisAge ) ) ) ; End .
38.13.95
FileExists
Synopsis: Check whether a particular le exists in the lesystem. Declaration: function FileExists(const FileName: string) : Boolean Visibility: default Description: FileExists returns True if a le with name FileName exists on the disk, False otherwise. On windows, this function will return False if a directory is passed as FileName. On unices, passing a directory name will result in True. The rationale is that on unix, a directory is a le as well. Note that this function accepts a single lename as an argument, without wildcards. To check for the existence of multiple les, see the FindFirst (1520) function. 1512
Errors: None. See also: FindFirst (1520), FileAge (1510), FileGetAttr (1513), FileSetAttr (1518) Listing: ./sysutex/ex38.pp
Program Example38 ; { T h i s program demonstrates t h e F i l e E x i s t s f u n c t i o n } Uses s y s u t i l s ; Begin I f F i l e E x i s t s ( ParamStr ( 0 ) ) Then W r i t e l n ( A l l i s w e l l , I seem t o e x i s t . ) ; End .
38.13.96
FileGetAttr
Synopsis: Return attributes of a le. Declaration: function FileGetAttr(const FileName: string) : LongInt Visibility: default Description: FileGetAttr returns the attribute settings of le FileName. The attribute is a OR-ed combination of the following constants: faReadOnlyThe le is read-only. faHiddenThe le is hidden. (On unix, this means that the lename starts with a dot) faSysFileThe le is a system le (On unix, this means that the le is a character, block or FIFO le). faVolumeIdVolume Label. Only for DOS/Windows on a plain FAT (not VFAT or Fat32) lesystem. faDirectoryFile is a directory. faArchivele should be archived. Not possible on Unix Errors: In case of error, -1 is returned. See also: FileSetAttr (1518), FileAge (1510), FileGetDate (1514) Listing: ./sysutex/ex40.pp
Program Example40 ; { T h i s program demonstrates t h e F i l e G e t A t t r f u n c t i o n } Uses s y s u t i l s ; Procedure T e s t i t ( Name : S t r i n g ) ; Var F : L o n g i n t ; Begin F : = F i l e G e t A t t r (Name ) ; I f F<>1 then begin Writeln ( Testing :
,Name ) ;
1513
I f ( F and faReadOnly ) < >0 then W r i t e l n ( F i l e i s ReadOnly ) ; I f ( F and faHidden ) < >0 then W r i t e l n ( F i l e i s hidden ) ; I f ( F and f a S y s F i l e ) < >0 then W r i t e l n ( F i l e i s a system f i l e ) ; I f ( F and faVolumeID ) < >0 then Writeln ( F i l e i s a disk l a b e l ) ; I f ( F and f a A r c h i v e ) < >0 then Writeln ( F i l e i s a r t c h i v e f i l e ) ; I f ( F and f a D i r e c t o r y ) < >0 then Writeln ( F i l e i s a d i r e c t o r y ) ; end else W r i t e l n ( E r r o r r e a d i n g a t t r i b u t e s o f ,Name ) ; end ; begin testit testit testit testit End .
( ex40 . pp ) ; ( ParamStr ( 0 ) ) ; ( . ); ( / );
38.13.97
FileGetDate
Synopsis: Return the le time of an opened le. Declaration: function FileGetDate(Handle: THandle) : LongInt Visibility: default Description: FileGetdate returns the letime of the opened le with lehandle Handle. It is the same as FileAge (1510), with this difference that FileAge only needs the le name, while FilegetDate needs an open le handle. Errors: On error, -1 is returned. See also: FileAge (1510) Listing: ./sysutex/ex39.pp
Program Example39 ; { T h i s program demonstrates t h e F i l e G e t D a t e f u n c t i o n } Uses s y s u t i l s ; Var F , D : L o n g i n t ; Begin F:= FileCreate ( t e s t . dat ) ; D: = FileGetDate ( F ) ; W r i t e l n ( F i l e c r e a t e d on , DateTimeToStr ( FileDateToDateTime (D ) ) ) ; FileClose ( F ) ; DeleteFile ( t e s t . dat ) ; End .
1514
38.13.98
FileIsReadOnly
Synopsis: Check whether a le is read-only. Declaration: function FileIsReadOnly(const FileName: string) : Boolean Visibility: default Description: FileIsReadOnly checks whether FileName exists in the lesystem and is a read-only le. If this is the case, the function returns True, otherwise False is returned. See also: FileExists (1512)
38.13.99
FileOpen
Synopsis: Open an existing le and return a lehandle Declaration: function FileOpen(const FileName: string;Mode: Integer) : THandle Visibility: default Description: FileOpen opens a le with name FileName with mode Mode. Mode can be one of the following constants: fmOpenReadOpen le in read-only mode fmOpenWriteOpen le in write-only mode fmOpenReadWriteOpen le in read/write mode. Under Windows and Unix, the above mode can be or-ed with one of the following sharing/locking ags: fmShareCompatOpen le in DOS share-compatibility mode fmShareExclusiveLock le for exclusive use fmShareDenyWriteLock le so other processes can only read. fmShareDenyReadLock le so other processes cannot read. fmShareDenyNoneDo not lock le. If the le has been successfully opened, it can be read from or written to (depending on the Mode parameter) with the FileRead (1516) and FileWrite functions. Remark: Remark that you cannot open a le if it doesnt exist yet, i.e. it will not be created for you. If you want tp create a new le, or overwrite an old one, use the FileCreate (1511) function. There are some limitations to the sharing modes. 1.Sharing modes are only available on Unix and Windows platforms. 2.Unix only support sharing modes as of 2.4.0. 3.fmShareDenyRead only works under Windows at this time, and will always result in an error on Unix platforms because its le locking APIs do not support this concept. 4.File locking is advisory on Unix platforms. This means that the locks are only checked when a le is opened using a le locking mode. In other cases, existing locks are simply ignored. In particular, this means that fmShareDenyNone has no effect under Unix, because this can only be implemented as use no locking on those platforms. As a result, opening a le using this mode will always succeed under Unix as far as the locking is concerned, even if the le has already been opened using fmShareExclusive.
1515
5.Under Solaris, closing a single le handle associated with a le will result in all locks on that le (even via other handles) being destroyed due to the behaviour of the underlying API (fcntl). Because of the same reason, on Solaris you cannot use fmShareDenyWrite in combination with fmOpenWrite, nor fmShareExclusive in combination with fmOpenRead although both work with fmOpenReadWrite. For an example, see FileCreate (1511) Errors: On Error, -1 is returned. See also: fmOpenRead (1452), fmOpenWrite (1452), fmOpenReadWrite (1452), fmShareDenyWrite (1452), fmShareExclusive (1452), fmShareDenyRead (1452), fmShareDenyNone (1452), fmShareCompat (1452), FileClose (1510), FileWrite (1519), FileCreate (1511), FileRead (1516), FileTruncate (1518), FileSeek (1517)
38.13.100
FileRead
Synopsis: Read data from a lehandle in a buffer. Declaration: function FileRead(Handle: THandle;out Buffer;Count: LongInt) : LongInt Visibility: default Description: FileRead reads Count bytes from le-handle Handle and stores them into Buffer. Buffer must be at least Count bytes long. No checking on this is performed, so be careful not to overwrite any memory. Handle must be the result of a FileOpen (1515) call. The function returns the number of bytes actually read, or -1 on error. For an example, see FileCreate (1511) Errors: On error, -1 is returned. See also: FileClose (1510), FileWrite (1519), FileCreate (1511), FileOpen (1515), FileTruncate (1518), FileSeek (1517)
38.13.101
FileSearch
Synopsis: Search for a le in a path. Declaration: function FileSearch(const Name: string;const DirList: string; Options: TFileSearchOptions) : string function FileSearch(const Name: string;const DirList: string; ImplicitCurrentDir: Boolean) : string Visibility: default Description: FileSearch looks for the le Name in DirList, where dirlist is a list of directories, separated by semicolons or colons. It returns the full lename of the rst match found. The optional Options parameter may be specied to inuence the behaviour of the search algorithm. It is a set of the following options: sfoImplicitCurrentDirAlways search the current directory rst, even if it is not specied. sfoStripQuotesStrip quotes from the components in the search path. A deprecated form of the function allowed to specify using the boolean ImplicitCurrentDir parameter whether the current directory was searched implicitly or not. By default, the current directory is searched. 1516
Errors: On error, an empty string is returned. See also: ExpandFileName (1506), FindFirst (1520) Listing: ./sysutex/ex41.pp
Program Example41 ; { Program t o demonstrate t h e F i l e S e a r c h f u n c t i o n . } Uses S y s u t i l s ; Const { $ i f d e f unix } FN = f i n d ; P = . : / bin : / usr / bin ; { $else } FN = f i n d . exe ; P = c : \ dos ; c : \ windows ; c : \ windows \ system ; c : \ windows \ system32 ; { $endif } begin Writeln ( f i n d i s i n : end .
, FileSearch ( FN, P ) ) ;
38.13.102
FileSeek
Synopsis: Set the current le position on a le handle. Declaration: function FileSeek(Handle: THandle;FOffset: LongInt;Origin: LongInt) : LongInt function FileSeek(Handle: THandle;FOffset: Int64;Origin: LongInt) : Int64 Visibility: default Description: FileSeek sets the le pointer on position Offset, starting from Origin. Origin can be one of the following values: fsFromBeginningOffset is relative to the rst byte of the le. This position is zero-based. i.e. the rst byte is at offset 0. fsFromCurrentOffset is relative to the current position. fsFromEndOffset is relative to the end of the le. This means that Offset can only be zero or negative in this case. If successfull, the function returns the new le position, relative to the beginning of the le. Remark: The abovementioned constants do not exist in Delphi. Errors: On error, -1 is returned. See also: FileClose (1510), FileWrite (1519), FileCreate (1511), FileOpen (1515), FileRead (1516), FileTruncate (1518) Listing: ./sysutex/ex42.pp
1517
Program Example42 ; { T h i s program demonstrates t h e F i l e S e t A t t r f u n c t i o n } Uses s y s u t i l s ; Begin I f F i l e S e t A t t r ( ex40 . pp , faReadOnly or faHidden ) = 0 then W r i t e l n ( S u c c e s s f u l l y made f i l e hidden and reado n l y . ) else W r i t e l n ( Coulnd t make f i l e hidden and reado n l y . ) ; End .
38.13.103
FileSetAttr
Synopsis: Set the attributes of a le. Declaration: function FileSetAttr(const Filename: string;Attr: LongInt) : LongInt Visibility: default Description: FileSetAttr sets the attributes of FileName to Attr. If the function was successful, 0 is returned, -1 otherwise. Attr can be set to an OR-ed combination of the pre-dened faXXX constants. This function is not implemented on Unixes. Errors: On error, -1 is returned (always on Unixes). See also: FileGetAttr (1513), FileGetDate (1514), FileSetDate (1518)
38.13.104
FileSetDate
Synopsis: Set the date of a le. Declaration: function FileSetDate(Handle: THandle;Age: LongInt) : LongInt function FileSetDate(const FileName: string;Age: LongInt) : LongInt Visibility: default Description: FileSetDate sets the le date of the open le with handle Handle or to Age, where Age is a DOS date-and-time stamp value. Alternatively, the lename may be specied with the FileName argument. This variant of the call is mandatory on unices, since there is no OS support for setting a le timestamp based on a handle. (the handle may not be a real le at all). The function returns zero if successfull. Errors: On Unix, the handle variant always returns -1, since this is impossible to implement. On Windows and DOS, a negative error code is returned.
38.13.105
FileTruncate
Synopsis: Truncate an open le to a given size. Declaration: function FileTruncate(Handle: THandle;Size: Int64) : Boolean Visibility: default 1518
Description: FileTruncate truncates the le with handle Handle to Size bytes. The le must have been opened for writing prior to this call. The function returns True is successful, False otherwise. For an example, see FileCreate (1511). Errors: On error, the function returns False. See also: FileClose (1510), FileWrite (1519), FileCreate (1511), FileOpen (1515), FileRead (1516), FileSeek (1517)
38.13.106
FileWrite
Synopsis: Write data from a buffer to a given lehandle. Declaration: function FileWrite(Handle: THandle;const Buffer;Count: LongInt) : LongInt Visibility: default Description: FileWrite writes Count bytes from Buffer to the le with handle Handle. Prior to this call, the le must have been opened for writing. Buffer must be at least Count bytes large, or a memory access error may occur. The function returns the number of bytes written, or -1 in case of an error. For an example, see FileCreate (1511). Errors: In case of error, -1 is returned. See also: FileClose (1510), FileCreate (1511), FileOpen (1515), FileRead (1516), FileTruncate (1518), FileSeek (1517)
38.13.107
FindClose
Synopsis: Close a nd handle Declaration: procedure FindClose(var F: TSearchRec) Visibility: default Description: FindClose ends a series of FindFirst (1520)/FindNext (1521) calls, and frees any memory used by these calls. It is absolutely necessary to do this call, or huge memory losses may occur. For an example, see FindFirst (1520). Errors: None. See also: FindFirst (1520), FindNext (1521)
38.13.108
FindCmdLineSwitch
Synopsis: Check whether a certain switch is present on the command-line. Declaration: function FindCmdLineSwitch(const Switch: string; const Chars: TSysCharSet;IgnoreCase: Boolean) : Boolean function FindCmdLineSwitch(const Switch: string;IgnoreCase: Boolean) : Boolean function FindCmdLineSwitch(const Switch: string) : Boolean
1519
Visibility: default Description: FindCmdLineSwitch will check all command-line arguments for the presence of the option Switch. It will return True if it was found, False otherwise. Characters that appear in Chars (default is SwitchChars (1456)) are assumed to indicate an option (switch). If the parameter IgnoreCase is True, case will be ignored when looking for the switch. Default is to search case sensitive. Errors: None. See also: SwitchChars (1456)
38.13.109
FindFirst
Synopsis: Start a le search and return a ndhandle Declaration: function FindFirst(const Path: string;Attr: LongInt; out Rslt: TSearchRec) : LongInt Visibility: default Description: FindFirst looks for les that match the name (possibly with wildcards) in Path and extra attributes Attr. It then lls up the Rslt record with data gathered about the le. It returns 0 if a le matching the specied criteria is found, a nonzero value (-1 on Unix-like platforms) otherwise. Attr is an or-ed combination of the following constants: faReadOnlyThe le is read-only. faHiddenThe le is hidden. (On unix, this means that the lename starts with a dot) faSysFileThe le is a system le (On unix, this means that the le is a character, block or FIFO le). faVolumeIdDrive volume Label. Not possible under unix, and on Windows-like systems, this works only for plan FAT (not Fat32 of VFAT) lesystems. faDirectoryFile is a directory. faArchivele needs to be archived. Not possible on Unix It is a common misconception that Attr species a set of attributes which must be matched in order for a le to be included in the list. This is not so: The value of Attr species additional attributes, this means that the returned les are either normal les or have an attribute which is present in Attr. Specically: specifying faDirectory as a value for Attr does not mean that only directories will be returned. Normal les and directories will be returned. The Rslt record can be fed to subsequent calls to FindNext, in order to nd other les matching the specications. Remark: A FindFirst call must always be followed by a FindClose (1519) call with the same Rslt record. Failure to do so will result in memory loss. Errors: On error the function returns -1 on Unix-like platforms, a nonzero error code on Windows. See also: FindClose (1519), FindNext (1521) Listing: ./sysutex/ex43.pp
Program Example43 ; { T h i s program demonstrates t h e F i n d F i r s t f u n c t i o n } Uses S y s U t i l s ;
1520
Var I n f o : TSearchRec ; Count : L o n g i n t ; Begin Count : = 0 ; I f F i n d F i r s t ( , f a A n y F i l e and f a D i r e c t o r y , I n f o ) = 0 then begin Repeat Inc ( Count ) ; With I n f o do begin I f ( A t t r and f a D i r e c t o r y ) = f a D i r e c t o r y then Write ( D i r : ) ; W r i t e l n ( Name: 4 0 , Size : 1 5 ) ; end ; U n t i l FindNext ( i n f o ) < >0; end ; FindClose ( I n f o ) ; W r i t e l n ( F i n i s h e d search . Found , Count , matches ) ; End .
38.13.110
FindNext
Synopsis: Find the next entry in a ndhandle. Declaration: function FindNext(var Rslt: TSearchRec) : LongInt Visibility: default Description: FindNext nds a next occurrence of a search sequence initiated by FindFirst. If another record matching the criteria in Rslt is found, 0 is returned, a nonzero constant is returned otherwise. Remark: The last FindNext call must always be followed by a FindClose call with the same Rslt record. Failure to do so will result in memory loss. For an example, see FindFirst (1520) Errors: On error (no more le is found), a nonzero constant is returned. See also: FindFirst (1520), FindClose (1519)
38.13.111
FloattoCurr
Synopsis: Convert a oat to a Currency value. Declaration: function FloattoCurr(const Value: Extended) : Currency Visibility: default Description: FloatToCurr converts the Value oating point value to a Currency value. It checks whether Value is in the valid range of currencies (determined by MinCurrency (1453) and MaxCurrency (1453)). If not, an EConvertError (1597) exception is raised. Errors: If Value is out of range, an EConvertError (1597) exception is raised. See also: EConvertError (1597), TryFloatToCurr (1588), MinCurrency (1453), MaxCurrency (1453)
1521
38.13.112
FloatToDateTime
Synopsis: Convert a oat to a TDateTime value. Declaration: function FloatToDateTime(const Value: Extended) : TDateTime Visibility: default Description: FloatToDateTime converts the Value oating point value to a TDateTime value. It checks whether Value is in the valid range of dates (determined by MinDateTime (1453) and MaxDateTime (1453)). If not, an EConvertError (1597) exception is raised. Errors: If Value is out of range, an EConvertError (1597) exception is raised. See also: EConvertError (1597), MinDateTime (1453), MaxDateTime (1453)
38.13.113
FloatToDecimal
Synopsis: Convert a oat value to a TFloatRec value. Declaration: procedure FloatToDecimal(out Result: TFloatRec;const Value; ValueType: TFloatValue;Precision: Integer; Decimals: Integer) procedure FloatToDecimal(out Result: TFloatRec;Value: Extended; Precision: Integer;Decimals: Integer) Visibility: default Description: FloatToDecimal converts the oat Value to a oat description in the ResultTFloatRec (1461) format. It will store Precision digits in the Digits eld, of which at most Decimal decimals. Errors: None. See also: TFloatRec (1461)
38.13.114
FloatToStr
Synopsis: Convert a oat value to a string using a xed format. Declaration: function FloatToStr(Value: Double) : string function FloatToStr(Value: Double;const FormatSettings: TFormatSettings) : string function FloatToStr(Value: Single) : string function FloatToStr(Value: Single;const FormatSettings: TFormatSettings) : string function FloatToStr(Value: Currency) : string function FloatToStr(Value: Currency; const FormatSettings: TFormatSettings) : string function FloatToStr(Value: Comp) : string function FloatToStr(Value: Comp;const FormatSettings: TFormatSettings) : string function FloatToStr(Value: Int64) : string function FloatToStr(Value: Int64;const FormatSettings: TFormatSettings) : string Visibility: default
1522
Description: FloatToStr converts the oating point variable Value to a string representation. It will choose the shortest possible notation of the two following formats: Fixed formatwill represent the string in xed notation, Decimal formatwill represent the string in scientic notation. More information on these formats can be found in FloatToStrF (1523). FloatToStr is completely equivalent to the following call: FloatToStrF(Value, ffGeneral,15, 0); Errors: None. See also: FloatToStrF (1523), FormatFloat (1536), StrToFloat (1576) Listing: ./sysutex/ex67.pp
Program Example67 ; { T h i s program demonstrates t h e F l o a t T o S t r f u n c t i o n } Uses s y s u t i l s ; Procedure T e s t i t ( Value : Extended ) ; begin W r i t e l n ( Value , > , FloatToStr ( Value ) ) ; W r i t e l n ( Value , > , FloatToStr (Value ) ) ; end ; Begin Testit Testit Testit Testit Testit Testit Testit Testit End .
38.13.115
FloatToStrF
Synopsis: Convert a oat value to a string using a given format. Declaration: function FloatToStrF(Value: Double;format: TFloatFormat; Precision: Integer;Digits: Integer) : string function FloatToStrF(Value: Double;format: TFloatFormat; Precision: Integer;Digits: Integer; const FormatSettings: TFormatSettings) : string function FloatToStrF(Value: Single;format: TFloatFormat; Precision: Integer;Digits: Integer) : string function FloatToStrF(Value: Single;format: TFloatFormat; Precision: Integer;Digits: Integer; const FormatSettings: TFormatSettings) : string 1523
function FloatToStrF(Value: Comp;format: TFloatFormat; Precision: Integer;Digits: Integer) : string function FloatToStrF(Value: Comp;format: TFloatFormat; Precision: Integer;Digits: Integer; const FormatSettings: TFormatSettings) : string function FloatToStrF(Value: Currency;format: TFloatFormat; Precision: Integer;Digits: Integer) : string function FloatToStrF(Value: Currency;format: TFloatFormat; Precision: Integer;Digits: Integer; const FormatSettings: TFormatSettings) : string function FloatToStrF(Value: Int64;format: TFloatFormat; Precision: Integer;Digits: Integer) : string function FloatToStrF(Value: Int64;format: TFloatFormat; Precision: Integer;Digits: Integer; const FormatSettings: TFormatSettings) : string Visibility: default Description: FloatToStrF converts the oating point number value to a string representation, according to the settings of the parameters Format, Precision and Digits. The meaning of the Precision and Digits parameter depends on the Format parameter. The format is controlled mainly by the Format parameter. It can have one of the following values: ffcurrencyMoney format. Value is converted to a string using the global variables CurrencyString, CurrencyFormat and NegCurrFormat. The Digits paramater species the number of digits following the decimal point and should be in the range -1 to 18. If Digits equals -1, CurrencyDecimals is assumed. The Precision parameter is ignored. ffExponentScientic format. Value is converted to a string using scientic notation: 1 digit before the decimal point, possibly preceded by a minus sign if Value is negative. The number of digits after the decimal point is controlled by Precision and must lie in the range 0 to 15. ffFixedFixed point format. Value is converted to a string using xed point notation. The result is composed of all digits of the integer part of Value, preceded by a minus sign if Value is negative. Following the integer part is DecimalSeparator and then the fractional part of Value, rounded off to Digits numbers. If the number is too large then the result will be in scientic notation. ffGeneralGeneral number format. The argument is converted to a string using ffExponent or ffFixed format, depending on wich one gives the shortest string. There will be no trailing zeroes. If Value is less than 0.00001 or if the number of decimals left of the decimal point is larger than Precision then scientic notation is used, and Digits is the minimum number of digits in the exponent. Otherwise Digits is ignored. ffnumberIs the same as ffFixed, except that thousand separators are inserted in the resulting string. Errors: None. See also: FloatToStr (1522), FloatToText (1525) Listing: ./sysutex/ex68.pp
Program Example68 ; { T h i s program demonstrates t h e F l o a t T o S t r F f u n c t i o n } Uses s y s u t i l s ;
1524
Const Fmt : Array [ TFloatFormat ] of s t r i n g [ 1 0 ] = ( g e n e r a l , exponent , f i x e d , number , Currency ) ; Procedure T e s t i t ( Value : Var I , J : l o n g i n t ; FF : TFloatFormat ; begin For I : = 5 to 1 5 do For J : = 1 to 4 do For FF : = f f g e n e r a l to f f c u r r e n c y do begin Write ( Value , ( Prec : , I : 2 , , Dig : , J , , f m t : , Fmt [ f f ] , ) : ) ; W r i t e l n ( F l o a t T o S t r f ( Value , FF , I , J ) ) ; Write ( Value , ( Prec : , I : 2 , , Dig : , J , , f m t : , Fmt [ f f ] , ) : ) ; W r i t e l n ( F l o a t T o S t r f (Value , FF , I , J ) ) ; end ; end ; Begin Testit Testit Testit Testit Testit Testit Testit Testit Testit Testit Testit End . Extended ) ;
38.13.116
FloatToText
Synopsis: Return a string representation of a oat, with a given format. Declaration: function FloatToText(Buffer: PChar;Value: Extended;format: TFloatFormat; Precision: Integer;Digits: Integer) : LongInt function FloatToText(Buffer: PChar;Value: Extended;format: TFloatFormat; Precision: Integer;Digits: Integer; const FormatSettings: TFormatSettings) : LongInt Visibility: default Description: FloatToText converts the oating point variable Value to a string representation and stores it in Buffer. The conversion is governed by format, Precisison and Digits. more information on these parameters can be found in FloatToStrF (1523). Buffer should point to enough space to hold the result. No checking on this is performed. The result is the number of characters that was copied in Buffer. Errors: None. See also: FloatToStr (1522), FloatToStrF (1523)
1525
Listing: ./sysutex/ex69.pp
Program Example68 ; { T h i s program demonstrates t h e F l o a t T o S t r F f u n c t i o n } Uses s y s u t i l s ; Const Fmt : Array [ TFloatFormat ] of s t r i n g [ 1 0 ] = ( g e n e r a l , exponent , f i x e d , number , Currency ) ; Procedure T e s t i t ( Value : Var I , J : l o n g i n t ; FF : TFloatFormat ; S : ShortString ; begin For I : = 5 to 1 5 do For J : = 1 to 4 do For FF : = f f g e n e r a l to f f c u r r e n c y do begin Write ( Value , ( Prec : , I : 2 , , Dig : , J , , f m t : , Fmt [ f f ] , ) : ) ; SetLength ( S , FloatToText (@S[ 1 ] , Value , FF , I , J ) ) ; Writeln ( S ) ; Write ( Value , ( Prec : , I : 2 , , Dig : , J , , f m t : , Fmt [ f f ] , ) : ) ; SetLength ( S , FloatToText (@S[ 1 ] , Value , FF , I , J ) ) ; Writeln ( S ) ; end ; end ; Begin Testit Testit Testit Testit Testit Testit Testit Testit Testit Testit Testit End . Extended ) ;
38.13.117
FloatToTextFmt
Synopsis: Convert a oat value to a string using a given mask. Declaration: function FloatToTextFmt(Buffer: PChar;Value: Extended;format: PChar; FormatSettings: TFormatSettings) : Integer function FloatToTextFmt(Buffer: PChar;Value: Extended;format: PChar) : Integer Visibility: default Description: FloatToTextFmt returns a textual representation of Value in the memory location pointed to by
1526
Buffer. it uses the formatting specication in Format to do this. The return value is the number of characters that were written in the buffer. For a list of valid formatting characters, see FormatFloat (1536) 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. See also: FormatFloat (1536)
38.13.118
FmtStr
Synopsis: Format a string with given arguments. Declaration: procedure FmtStr(var Res: string;const Fmt: string; const args: Array of const) procedure FmtStr(var Res: string;const Fmt: string; const args: Array of const; const FormatSettings: TFormatSettings) Visibility: default Description: FmtStr calls Format (1528) with Fmt and Args as arguments, and stores the result in Res. For more information on how the resulting string is composed, see Format (1528). Errors: In case of error, a EConvertError exception is raised. See also: Format (1528), FormatBuf (1534) Listing: ./sysutex/ex70.pp
Program Example70 ; { T h i s program demonstrates t h e FmtStr f u n c t i o n } Uses s y s u t i l s ; Var S : A n s i S t r i n g ; Begin S: = ; FmtStr ( S , For some n i c e examples o f f o m a t t i n g see %s . , [ Format ] ) ; Writeln ( S ) ; End .
38.13.119
ForceDirectories
Synopsis: Create a chain of directories Declaration: function ForceDirectories(const Dir: string) : Boolean Visibility: default Description: ForceDirectories tries to create any missing directories in Dir till the whole path in Dir exists. It returns True if Dir already existed or was created succesfully. If it failed to create any of the parts, False is returned.
1527
38.13.120
Format
Synopsis: Format a string with given arguments. Declaration: function Format(const Fmt: string;const Args: Array of const) : string function Format(const Fmt: string;const Args: Array of const; const FormatSettings: TFormatSettings) : string Visibility: default Description: Format replaces all placeholders inFmt with the arguments passed in Args and returns the resulting string. A placeholder looks as follows: % [[Index]:] [-] [Width] [. Precision] ArgType elements between single quotes must be typed as shown without the quotes, and elements between square brackets [ ] are optional. The meaning of the different elements are shown below: %starts the placeholder. If you want to insert a literal % character, then you must insert two of them : %%. Index :takes the Index-th element in the argument array as the element to insert. If index is omitted, then the zeroth argument is taken. -tells Format to left-align the inserted text. The default behaviour is to right-align inserted text. This can only take effect if the Width element is also specied. Widththe inserted string must have at least Width 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 usage of the - character. . PrecisionIndicates the precision to be used when converting the argument. The exact meaning of this parameter depends on ArgType. The Index, Width and Precision parameters can be replaced by *, in which case their value will be read from the next element in the Args array. This value must be an integer, or an EConvertError exception will be raised. The argument type is determined from ArgType. It can have one of the following values (case insensitive): DDecimal format. The next argument in the Args array should be an integer. The argument is converted to a decimal string. If precision is specied, then the string will have at least Precision digits in it. If needed, the string is (left) padded with zeroes. EScientic format. The next argument in the Args array should be a Floating point value. The argument is converted to a decimal string using scientic notation, using FloatToStrF (1523), 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. In short, the E specier formats its argument as follows: FloatToStrF(Argument,ffexponent,Precision,3) FFixed point format. The next argument in the Args array should be a oating point value. The argument is converted to a decimal string, using xed notation (see FloatToStrF (1523)). Precision indicates the number of digits following the decimal point. In short, the F specier formats its argument as follows: FloatToStrF(Argument,ffFixed,ffixed,9999,Precision)
1528
GGeneral number format. The next argument in the Args array should be a oating point value. The argument is converted to a decimal string using xed point notation or scientic notation, depending on which gives the shortest result. Precision is used to determine the number of digits after the decimal point. In short, the G specier formats its argument as follows: FloatToStrF(Argument,ffGeneral,Precision,3) MCurrency format. the next argument in the var{Args} array must be a oating point value. The argument is converted to a decimal string using currency notation. This means that xed-point notation is used, but that the currency symbol is appended. If precision is specied, then then it overrides the CurrencyDecimals global variable used in the FloatToStrF (1523) In short, the M specier formats its argument as follows: FloatToStrF(Argument,ffCurrency,9999,Precision) NNumber format. This is the same as xed point format, except that thousand separators are inserted in the resulting string. PPointer format. The next argument in the Args 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. SString format. The next argument in the Args array must be a string. The argument is simply copied to the result string. If Precision is specied, then only Precision characters are copied to the result string. UUnsigned decimal format. The next argument in the Args array should be an unsigned integer. The argument is converted to a decimal string. If precision is specied, then the string will have at least Precision digits in it. If needed, the string is (left) padded with zeroes. Xhexadecimal format. The next argument in the Args 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 Precision is specied then the resulting hexadecimal representation will have at least Precision characters in it (with a maximum value of 32). Errors: In case of error, an EConversionError exception is raised. Possible errors are: 1.Errors in the format speciers. 2.The next argument is not of the type needed by a specier. 3.The number of arguments is not sufcient for all format speciers. See also: FormatBuf (1534) Listing: ./sysutex/ex71.pp
Program example71 ; { $mode o b j f p c } { T h i s program demonstrates t h e Format f u n c t i o n } Uses s y s u t i l s ; Var P : P o i n t e r ; fmt , S : s t r i n g ; { Expected o u t p u t : [%d ] = > [ 1 0 ]
1529
[%%] = > [%] [%10d ] = > [ 10] [%.4 d ] = > [ 0 0 1 0 ] [%10.4d ] = > [ 0010] [%0: d ] = > [ 1 0 ] [%0:10d ] = > [ 10] [%0:10.4 d ] = > [ 0010] [%0:10d ] = > [ 1 0 ] [%0: 10.4d ] = > [ 0 0 1 0 ] [%.d ] = > [ 0 0 0 1 0 ] } Procedure T e s t I n t e g e r ; begin Try Fmt : = [%d ] ; S: = Format ( Fmt , [ 1 0 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [%%] ; S: = Format ( Fmt , [ 1 0 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [%10d ] ; S: = Format ( Fmt , [ 1 0 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; f m t : = [%.4 d ] ; S: = Format ( fmt , [ 1 0 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [%10.4d ] ; S: = Format ( Fmt , [ 1 0 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [%0: d ] ; S: = Format ( Fmt , [ 1 0 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [%0:10d ] ; S: = Format ( Fmt , [ 1 0 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [%0:10.4 d ] ; S: = Format ( Fmt , [ 1 0 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [%0:10d ] ; S: = Format ( Fmt , [ 1 0 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [%0: 10.4d ] ; S: = Format ( fmt , [ 1 0 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [%.d ] ; S: = Format ( fmt , [ 4 , 5 , 1 0 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; except On E : E x c e p t i o n do begin W r i t e l n ( E x c e p t i o n caught : ,E . Message ) ; end ; end ; w r i t e l n ( Press e n t e r ) ; readln ; end ; { Expected o u t p u t : [%x ] = > [ A ] [%10x ] = > [ A] [%10.4 x ] = > [ 000A ] [%0: x ] = > [ A ] [%0:10 x ] = > [ A] [%0:10.4 x ] = > [ 000A ] [%0:10x ] = > [ A ] [%0: 10.4 x ] = > [ 0 0 0A ] [%.x ] = > [ 0 0 0 0A ] } Procedure TestHexaDecimal ; begin try Fmt : = [%x ] ; S: = Format ( Fmt , [ 1 0 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [%10x ] ; S: = Format ( Fmt , [ 1 0 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [%10.4 x ] ; S: = Format ( Fmt , [ 1 0 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [%0: x ] ; S: = Format ( Fmt , [ 1 0 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [%0:10 x ] ; S: = Format ( Fmt , [ 1 0 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [%0:10.4 x ] ; S: = Format ( Fmt , [ 1 0 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [%0:10x ] ; S: = Format ( Fmt , [ 1 0 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [%0: 10.4 x ] ; S: = Format ( fmt , [ 1 0 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [%.x ] ; S: = Format ( fmt , [ 4 , 5 , 1 0 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ;
1530
,E . Message ) ;
{ Expected o u t p u t : [ 0 x%p ] = > [ 0 x0012D687 ] [ 0 x%10p ] = > [ 0 x 0012D687 ] [ 0 x%10.4p ] = > [ 0 x 0012D687 ] [ 0 x%0:p ] = > [ 0 x0012D687 ] [ 0 x%0:10p ] = > [ 0 x 0012D687 ] [ 0 x %0:10.4p ] = > [ 0 x 0012D687 ] [ 0 x%0:10p ] = > [ 0 x0012D687 ] [ 0 x%0:10.4p ] = > [ 0 x0012D687 ] [%.p ] = > [ 0 0 1 2 D687 ] } Procedure T e s t P o i n t e r ; begin P: = P o i n t e r ( 1 2 3 4 5 6 7 ) ; try Fmt : = [ 0 x%p ] ; S: = Format ( Fmt , [ P ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [ 0 x%10p ] ; S: = Format ( Fmt , [ P ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [ 0 x%10.4p ] ; S: = Format ( Fmt , [ P ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [ 0 x%0:p ] ; S: = Format ( Fmt , [ P ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [ 0 x%0:10p ] ; S: = Format ( Fmt , [ P ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [ 0 x %0:10.4p ] ; S: = Format ( Fmt , [ P ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [ 0 x%0:10p ] ; S: = Format ( Fmt , [ P ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [ 0 x%0:10.4p ] ; S: = Format ( fmt , [ P ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [%.p ] ; S: = Format ( fmt , [ 4 , 5 , P ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; except On E : E x c e p t i o n do begin W r i t e l n ( E x c e p t i o n caught : ,E . Message ) ; end ; end ; w r i t e l n ( Press e n t e r ) ; readln ; end ; { Expected o u t p u t : [%s ] = > [ T h i s i s a s t r i n g ] [%0: s ] = > [ T h i s i s a s t r i n g ] [%0:18 s ] = > [ T h i s i s a s t r i n g ] [%0:18s ] = > [ T h i s i s a s t r i n g ] [%0:18.12 s ] = > [ This i s a s t ] [%.s ] = > [ T h i s i s a s t ] } Procedure T e s t S t r i n g ; begin try Fmt : = [%s ] ; S: = Format ( fmt , [ T h i s i s a s t r i n g ] ) ; W r i t e l n ( f m t : 1 2 , = > , s ) ; f m t : = [%0: s ] ; s : = Format ( fmt , [ T h i s i s a s t r i n g ] ) ; W r i t e l n ( f m t : 1 2 , = > , s ) ; f m t : = [%0:18 s ] ; s : = Format ( fmt , [ T h i s i s a s t r i n g ] ) ; W r i t e l n ( f m t : 1 2 , = > , s ) ;
1531
f m t : = [%0:18s ] ; s : = Format ( fmt , [ T h i s i s a s t r i n g ] ) ; W r i t e l n ( f m t : 1 2 , = > , s ) ; f m t : = [%0:18.12 s ] ; s : = Format ( fmt , [ T h i s i s a s t r i n g ] ) ; W r i t e l n ( f m t : 1 2 , = > , s ) ; f m t : = [%.s ] ; s : = Format ( fmt , [ 1 8 , 1 2 , T h i s i s a s t r i n g ] ) ; W r i t e l n ( f m t : 1 2 , = > , s ) ; except On E : E x c e p t i o n do begin W r i t e l n ( E x c e p t i o n caught : ,E . Message ) ; end ; end ; w r i t e l n ( Press e n t e r ) ; readln ; end ; { Expected o u t p u t : [%e ] = > [1.2340000000000000E+000] [%10e ] = > [1.2340000000000000E+000] [%10.4e ] = > [ 1 . 2 3 4 E+000] [%0: e ] = > [1.2340000000000000E+000] [%0:10e ] = > [1.2340000000000000E+000] [%0:10.4 e ] = > [ 1 . 2 3 4 E+000] [%0:10e ] = > [1.2340000000000000E+000] [%0: 10.4e ] = > [ 1 . 2 3 4 E+000] [%.e ] = > [ 1 . 2 3 4 0E+000] } Procedure T e s t E x p o n e n t i a l ; begin Try Fmt : = [%e ] ; S: = Format ( Fmt , [ 1 . 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [%10e ] ; S: = Format ( Fmt , [ 1 . 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [%10.4e ] ; S: = Format ( Fmt , [ 1 . 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [%0: e ] ; S: = Format ( Fmt , [ 1 . 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [%0:10e ] ; S: = Format ( Fmt , [ 1 . 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [%0:10.4 e ] ; S: = Format ( Fmt , [ 1 . 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [%0:10e ] ; S: = Format ( Fmt , [ 1 . 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [%0: 10.4e ] ; S: = Format ( fmt , [ 1 . 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [%.e ] ; S: = Format ( fmt , [ 4 , 5 , 1 . 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; except On E : E x c e p t i o n do begin W r i t e l n ( E x c e p t i o n caught : ,E . Message ) ; end ; end ; w r i t e l n ( Press e n t e r ) ; readln ; end ; { Expected o u t p u t : [%e] = > [ 1.2340000000000000E+000] [%10e] = > [ 1.2340000000000000E+000] [%10.4e ] = > [ 1 . 2 3 4E+000] [%0: e] = > [ 1.2340000000000000E+000] [%0:10e ] = > [ 1.2340000000000000E+000] [%0:10.4 e ] = > [ 1 . 2 3 4E+000] [%0:10e] = > [ 1.2340000000000000E+000] [%0: 10.4e ] = > [ 1 . 2 3 4E+000] [%.e ] = > [ 1 . 2 3 4 0E+000] } Procedure T e s t N e g a t i v e E x p o n e n t i a l ;
1532
begin Try Fmt : = [%e ] ; S: = Format ( Fmt , [ 1 . 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [%10e ] ; S: = Format ( Fmt , [ 1 . 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [%10.4e ] ; S: = Format ( Fmt , [ 1 . 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [%0: e ] ; S: = Format ( Fmt , [ 1 . 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [%0:10e ] ; S: = Format ( Fmt , [ 1 . 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [%0:10.4 e ] ; S: = Format ( Fmt , [ 1 . 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [%0:10e ] ; S: = Format ( Fmt , [ 1 . 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [%0: 10.4e ] ; S: = Format ( fmt , [ 1 . 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [%.e ] ; S: = Format ( fmt , [ 4 , 5 , 1 . 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; except On E : E x c e p t i o n do begin W r i t e l n ( E x c e p t i o n caught : ,E . Message ) ; end ; end ; w r i t e l n ( Press e n t e r ) ; readln ; end ; { Expected o u t p u t : [%e ] = > [1.2340000000000000E002] [%10e ] = > [1.2340000000000000E002] [%10.4e ] = > [ 1 . 2 3 4 E002] [%0: e ] = > [1.2340000000000000E002] [%0:10e ] = > [1.2340000000000000E002] [%0:10.4 e ] = > [ 1 . 2 3 4 E002] [%0:10e ] = > [1.2300000000000000E002] [%0: 10.4e ] = > [ 1 . 2 3 4 E002] [%.e ] = > [ 1 . 2 3 4 0 E002] } Procedure T e s t S m a l l E x p o n e n t i a l ; begin Try Fmt : = [%e ] ; S: = Format ( Fmt , [ 0 . 0 1 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [%10e ] ; S: = Format ( Fmt , [ 0 . 0 1 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [%10.4e ] ; S: = Format ( Fmt , [ 0 . 0 1 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [%0: e ] ; S: = Format ( Fmt , [ 0 . 0 1 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [%0:10e ] ; S: = Format ( Fmt , [ 0 . 0 1 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [%0:10.4 e ] ; S: = Format ( Fmt , [ 0 . 0 1 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [%0:10e ] ; S: = Format ( Fmt , [ 0 . 0 1 2 3 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [%0: 10.4e ] ; S: = Format ( fmt , [ 0 . 0 1 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [%.e ] ; S: = Format ( fmt , [ 4 , 5 , 0 . 0 1 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; except On E : E x c e p t i o n do begin W r i t e l n ( E x c e p t i o n caught : ,E . Message ) ; end ; end ; w r i t e l n ( Press e n t e r ) ; readln ; end ; { Expected o u t p u t : [%e] = > [ 1.2340000000000000E002] [%10e] = > [ 1.2340000000000000E002] [%10.4e ] = > [ 1 . 2 3 4E002]
1533
= > [ 1.2340000000000000E002] = > [ 1.2340000000000000E002] = > [ 1 . 2 3 4E002] = > [ 1.2340000000000000E002] = > [ 1 . 2 3 4E002] = > [ 1 . 2 3 4 0E002]
} Procedure TestSmallNegExponential ; begin Try Fmt : = [%e ] ; S: = Format ( Fmt , [ 0 . 0 1 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [%10e ] ; S: = Format ( Fmt , [ 0 . 0 1 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [%10.4e ] ; S: = Format ( Fmt , [ 0 . 0 1 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [%0: e ] ; S: = Format ( Fmt , [ 0 . 0 1 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [%0:10e ] ; S: = Format ( Fmt , [ 0 . 0 1 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [%0:10.4 e ] ; S: = Format ( Fmt , [ 0 . 0 1 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [%0:10e ] ; S: = Format ( Fmt , [ 0 . 0 1 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [%0: 10.4e ] ; S: = Format ( fmt , [ 0 . 0 1 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; Fmt : = [%.e ] ; S: = Format ( fmt , [ 4 , 5 , 0 . 0 1 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , = > , s ) ; except On E : E x c e p t i o n do begin W r i t e l n ( E x c e p t i o n caught : ,E . Message ) ; end ; end ; w r i t e l n ( Press e n t e r ) ; readln ; end ; begin TestInteger ; TestHexadecimal ; TestPointer ; teststring ; TestExponential ; TestNegativeExponential ; TestSmallExponential ; TestSmallNegExponential ; end .
38.13.121
FormatBuf
Synopsis: Format a string with given arguments and store the result in a buffer. Declaration: function FormatBuf(var Buffer;BufLen: Cardinal;const Fmt; fmtLen: Cardinal;const Args: Array of const) : Cardinal function FormatBuf(var Buffer;BufLen: Cardinal;const Fmt; fmtLen: Cardinal;const Args: Array of const; const FormatSettings: TFormatSettings) : Cardinal Visibility: default Description: FormatBuf calls Format (1528) and stores the result in Buf. See also: Format (1528)
1534
Listing: ./sysutex/ex72.pp
Program Example72 ; { T h i s program demonstrates t h e FormatBuf f u n c t i o n } Uses s y s u t i l s ; Var S : ShortString ; Const Fmt : S h o r t S t r i n g =
38.13.122
FormatCurr
Synopsis: Format a currency Declaration: function FormatCurr(const Format: string;Value: Currency) : string function FormatCurr(const Format: string;Value: Currency; const FormatSettings: TFormatSettings) : string Visibility: default Description: FormatCurr formats the currency Value according to the formatting rule in Format, and returns the resulting string. For an explanation of the formatting characters, see FormatFloat (1536). See also: FormatFloat (1536), FloatToText (1525)
38.13.123
FormatDateTime
Synopsis: Return a string representation of a TDateTime value with a given format. Declaration: function FormatDateTime(const FormatStr: string;DateTime: TDateTime) : string function FormatDateTime(const FormatStr: string;DateTime: TDateTime; const FormatSettings: TFormatSettings) : string Visibility: default Description: FormatDateTime formats the date and time encoded in DateTime according to the formatting given in FormatStr. The complete list of formatting characters can be found in formatchars (1448). Errors: On error (such as an invalid character in the formatting string), and EConvertError exception is raised. See also: DateTimeToStr (1493), DateToStr (1496), TimeToStr (1585), StrToDateTime (1574) Listing: ./sysutex/ex14.pp 1535
Program Example14 ; { T h i s program demonstrates t h e FormatDateTime f u n c t i o n } Uses s y s u t i l s ; Var ThisMoment : TDateTime ; Begin ThisMoment : =Now; W r i t e l n ( Now : , FormatDateTime ( hh : nn , ThisMoment ) ) ; W r i t e l n ( Now : , FormatDateTime ( DD MM YYYY , ThisMoment ) ) ; W r i t e l n ( Now : , FormatDateTime ( c , ThisMoment ) ) ; End .
38.13.124
FormatFloat
Synopsis: Format a oat according to a certain mask. Declaration: function FormatFloat(const Format: string;Value: Extended) : string function FormatFloat(const Format: string;Value: Extended; const FormatSettings: TFormatSettings) : string Visibility: default Description: FormatFloat formats the oating-point value given by Value using the format specications in Format. The format specier can give format specications for positive, negative or zero values (separated by a semicolon). If the formatspecier is empty or the value needs more than 18 digits to be correctly represented, the result is formatted with a call to FloatToStrF (1523) with the ffGeneral format option. The following format speciers are supported: 0is 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. #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. .determines the location of the decimal point. Only the rst . character is taken into account. If the value contains digits after the decimal point, then it is replaced by the value of the DecimalSeparator character. ,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 ThousandSeparator character is used. E+determines the use of scientic notation. If E+ or E- (or their lowercase counterparts) are present then scientic notation is used. The number of digits in the output string is determined by the number of 0 characters after the E+ ;This character separates sections for positive, negative, and zero numbers in the format string. Errors: If an error occurs, an exception is raised. See also: FloatToStr (1522) Listing: ./sysutex/ex89.pp 1536
Program Example89 ; { T h i s program demonstrates t h e F o r ma t F l o at f u n c t i o n } Uses s y s u t i l s ; Const NrFormat =9; F o r m a t S t r i n g s : Array [ 1 . . NrFormat ] of s t r i n g = ( , 0 , 0.00 , #.## , # ,##0.00 , # ,##0.00;(# ,##0.00) , # , # # 0 . 0 0 ; ; Zero , 0.000E+00 , #.###E0 ) ; NrValue = 5 ; FormatValues : Array [ 1 . . NrValue ] of Double = (1234 , 1234 ,0.5 ,0 , 0.5); Width = 1 2 ; FWidth = 2 0 ; Var I , J : Integer ; S : String ; begin Write ( Format : FWidth ) ; For I : = 1 to NrValue do Write ( FormatValues [ i ] : Width : 2 ) ; Writeln ; For I : = 1 to NrFormat do begin Write ( F o r m a t S t r i n g s [ i ] : FWidth ) ; For J : = 1 to NrValue do begin S: = FormatFloat ( F o r m a t S t r i n g s [ I ] , FormatValues [ j ] ) ; Write (S : Width ) ; end ; Writeln ; end ; End .
38.13.125
FreeAndNil
Synopsis: Free object if needed, and set object reference to Nil Declaration: procedure FreeAndNil(var obj) Visibility: default Description: FreeAndNil will free the object in Obj and will set the reference in Obj to Nil. The reference is set to Nil rst, so if an exception occurs in the destructor of the object, the reference will be Nil anyway. 1537
Errors: Exceptions that occur during the destruction of Obj are not caught.
38.13.126
GetAppCongDir
Synopsis: Return the appropriate directory for the applications conguration les. Declaration: function GetAppConfigDir(Global: Boolean) : string Visibility: default Description: GetAppConfigDir returns the name of a directory in which the application should store its conguration les on the current OS. If the parameter Global is True then the directory returned is a global directory, i.e. valid for all users on the system. If the parameter Global is false, then the directory is specic for the user who is executing the program. On systems that do not support multi-user environments, these two directories may be the same. The directory which is returned is the name of the directory where the application is supposed to store les. This does not mean that the directory exists, or that the user can write in this directory (especially if Global=True). It just returns the name of the appropriate location. Also note that the returned name does not contain a ending path delimiter. 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 reects common practice on that system. The application name is deduced from the binary name via the ApplicationName (1484) call, but can be congured by means of the OnGetApplicationName (1467) callback. If VendorName (1593) is not-empty, then VendorName will also be inserted before the applicationspecic directory. Errors: None. See also: GetAppCongFile (1538), ApplicationName (1484), OnGetApplicationName (1467), CreateDir (1491), SysCongDir (1456), VendorName (1593)
38.13.127
GetAppCongFile
Synopsis: Return an appropriate name for an application conguration le. Declaration: function GetAppConfigFile(Global: Boolean) : string function GetAppConfigFile(Global: Boolean;SubDir: Boolean) : string Visibility: default Description: GetAppConfigFile returns the name of a le in which the application can store its conguration parameters. The Global parameter determines whether it is a global conguration le (value True) or a personal conguration le (value False). The parameter SubDir, in case it is set to True, will insert the name of a directory before the lename. This can be used in case the application needs to store other data than conguration data in an application-specic directory. Default behaviour is to set this to False. The default le extension of the returned le is: .cfg No assumptions should be made about the existence or writeability of this le, or the directory where the le should reside. On systems where the operating system provides a call to determine the location of conguration les, this call will be used. On systems where there is no such call, an algorithm is used which reects common practice on that system. The application name is deduced from the binary name via the ApplicationName (1484) call, but can be congured by means of the OnGetApplicationName (1467) callback. 1538
If VendorName (1593) is not-empty, then VendorName will be inserted in the path for the cong le directory. Errors: None. See also: GetAppCongDir (1538), OnGetApplicationName (1467), ApplicationName (1484), CreateDir (1491), CongExtension (1450), SysCongDir (1456), VendorName (1593)
38.13.128
GetCurrentDir
Synopsis: Return the current working directory of the application. Declaration: function GetCurrentDir : string Visibility: default Description: GetCurrentDir returns the current working directory. Errors: None. See also: SetCurrentDir (1556), DiskFree (1499), DiskSize (1500) Listing: ./sysutex/ex28.pp
Program Example28 ; { T h i s program demonstrates t h e G e t C u r r e n t D i r f u n c t i o n } Uses s y s u t i l s ; Begin Writeln ( Current D i r e c t o r y i s : End .
, GetCurrentDir ) ;
38.13.129
GetDirs
Synopsis: Return a list of directory names from a path. Declaration: function GetDirs(var DirName: string;var Dirs: Array of PChar) : LongInt Visibility: default Description: GetDirs splits DirName in a null-byte separated list of directory names, Dirs is an array of PChars, 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. Errors: None. See also: ExtractRelativePath (1509) Listing: ./sysutex/ex45.pp
Program Example45 ; { T h i s program demonstrates t h e G e t D i r s f u n c t i o n } { $H+ } Uses s y s u t i l s ;
1539
Var D i r s : Array [ 0 . . 1 2 7 ] of pchar ; I , Count : l o n g i n t ; D i r , NewDir : S t r i n g ; Begin Dir := GetCurrentDir ; Writeln ( Dir : , Dir ) ; NewDir : = ; count : = G e t D i r s ( D i r , D i r s ) ; For I : = 0 to Count 1 do begin NewDir : = NewDir+ / +StrPas ( D i r s [ I ] ) ; W r i t e l n ( NewDir ) ; end ; End .
38.13.130
GetEnvironmentString
Synopsis: Return an environment variable by index. Declaration: function GetEnvironmentString(Index: Integer) : string Visibility: default Description: GetEnvironmentString returns the Index-th environment variable. The index is 1 based, and is bounded from above by the result of GetEnvironmentVariableCount (1540). For an example, GetEnvironmentVariableCount (1540). Remark: Note that on Windows, environment strings can start with an equal sign (=). This is a trick used to pass the current working directory to a newly created proces. In this case, extracting the variable name as the characters before the rst equal sign will result in an empty name. Errors: If there is no environment, an empty string is returned. See also: GetEnvironmentVariable (1540), GetEnvironmentVariableCount (1540)
38.13.131
GetEnvironmentVariable
Synopsis: Return the value of an environment variable. Declaration: function GetEnvironmentVariable(const EnvVar: string) : string Visibility: default Description: GetEnvironmentVariable returns the value of the EnvVar environment variable. If the specied variable does not exist or EnvVar is empty, an empty string is returned. See also: GetEnvironmentString (1540), GetEnvironmentVariableCount (1540)
38.13.132
GetEnvironmentVariableCount
Synopsis: Return the number of variables in the environment. Declaration: function GetEnvironmentVariableCount : Integer Visibility: default 1540
Description: GetEnvironmentVariableCount 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. Errors: If there is no environment, -1 may be returned. See also: GetEnvironmentString (1540), GetEnvironmentVariable (1540) Listing: ./sysutex/ex92.pp
{ $h+ } program example92 ; { T h i s program demonstrates t h e GetEnvironmentVariableCount f u n c t i o n } uses s y s u t i l s ; Var I : Integer ; begin For I : = 1 to GetEnvironmentVariableCount do Writeln ( i : 3 , : , GetEnvironmentString ( i ) ) ; end .
38.13.133
GetFileHandle
Synopsis: Extract OS handle from an untyped le or text le. Declaration: function GetFileHandle(var f: File) : THandle function GetFileHandle(var f: Text) : THandle Visibility: default Description: GetFileHandle returns the operating system handle for the le descriptor F. It can be used in various le operations which are not directly supported by the pascal language.
38.13.134
GetLastOSError
Synopsis: Return the last code from the OS. Declaration: function GetLastOSError : Integer Visibility: default Description: GetLastOSError 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, GetLastOSError gives extended information about the error. No assumptions should be made about the resetting of the error code by subsequent OS calls. This may be platform dependent. See also: RaiseLastOSError (1553)
1541
38.13.135
GetLocalTime
Synopsis: Get the local time. Declaration: procedure GetLocalTime(var SystemTime: TSystemTime) Visibility: default Description: GetLocalTime returns the system time in a TSystemTime (1) format. Errors: None. See also: Now (1552), Date (1492), Time (1583), TSystemTime (1)
38.13.136
GetModuleName
Synopsis: Return the name of the current module Declaration: function GetModuleName(Module: HMODULE) : string Visibility: default Description: GetModuleName returns the name of the current module. On windows, this is the name of the executable when executed in an executable, or the name of the library when executed in a library. On all other platforms, the result is always empty, since they provide no such functionality.
38.13.137
GetTempDir
Synopsis: Return name of systems temporary directory Declaration: function GetTempDir(Global: Boolean) : string function GetTempDir : string Visibility: default Description: GetTempDir returns the temporary directory of the system. If Global is True (the default value) it returns the system temporary directory, if it is False then a directory private to the user is returned. The returned name will end with a directory delimiter character. These directories may be the same. No guarantee is made that this directory exists or is writeable by the user. The OnGetTempDir (1467) 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. Errors: On error, an empty string is returned. See also: OnGetTempDir (1467), GetTempFileName (1542)
38.13.138
GetTempFileName
Synopsis: Return the name of a temporary le. Declaration: function GetTempFileName(const Dir: string;const Prefix: string) : string function GetTempFileName : string function GetTempFileName(Dir: PChar;Prefix: PChar;uUnique: DWord; TempFileName: PChar) : DWord 1542
Visibility: default Description: GetTempFileName returns the name of a temporary le in directory Dir. The name of the le starts with Prefix. If Dir is empty, the value returned by GetTempDir is used, and if Prefix is empty, TMP is used. The OnGetTempFile (1467) 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. Errors: On error, an empty string is returned. See also: GetTempDir (1542), OnGetTempFile (1467)
38.13.139
GetUserDir
Synopsis: Returns the current users home directory. Declaration: function GetUserDir : string Visibility: default Description: GetUserDir returns the home directory of the current user. On Unix-like systems (that includes Mac OS X), this is the value of the HOME environment variable. On Windows, this is the PROFILE special folder. On all other platforms, the application installation directory is returned. If non-empty, it contains a trailing path delimiter. See also: GetAppCongDir (1538)
38.13.140
GuidCase
Synopsis: Return the index of a GUID in an array of GUID values Declaration: function GuidCase(const GUID: TGuid;const List: Array of TGuid) : Integer Visibility: default Description: GuidCase returns the index of GUID in the array List, where 0 denotes the rst element in the list. If GUID is not present in the list, -1 is returned. See also: IsEqualGUID (1548)
38.13.141
GUIDToString
Synopsis: Convert a TGUID to a string representation. Declaration: function GUIDToString(const GUID: TGuid) : string Visibility: default Description: GUIDToString converts the GUID identier in GUID to a string representation in the form {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} Where each X is a hexadecimal digit. Errors: None. See also: Supports (1581), #rtl.system.TGUID (1264), StringToGUID (1564), IsEqualGuid (1548) 1543
38.13.142
HookSignal
Synopsis: Hook a specied signal Declaration: procedure HookSignal(RtlSigNum: Integer) Visibility: default Description: HookSignal installs the RTL default signal handler for signal RtlSigNum. It does not check whether the signal is already handled, and should therefor only be called if InquireSignal returns ssNotHooked.
38.13.143
IncAMonth
Synopsis: Increase a date with a certain amount of months Declaration: procedure IncAMonth(var Year: Word;var Month: Word;var Day: Word; NumberOfMonths: Integer) Visibility: default Description: IncAMonth increases the date as specied by Year, Month, Day with NumberOfMonths. It takes care of the number of days in a month when calculating the result. This function does the same as IncMonth (1545), but operates on an already decoded date. See also: IncMonth (1545)
38.13.144
IncludeLeadingPathDelimiter
Synopsis: Prepend a path delimiter if there is not already one. Declaration: function IncludeLeadingPathDelimiter(const Path: string) : string Visibility: default Description: IncludeLeadingPathDelimiter will insert a path delimiter (DirectorySeparator (1230)) in the rst position of Path, if there is not already a directory separator at that position. It will return the resulting string. If the path is empty, a DirectorySeparator character is returned. See also: IncludeTrailingPathDelimiter (1545), ExcludeLeadingPathDelimiter (1504), ExcludeTrailingPathDelimiter (1505), ConcatPaths (1490) Listing: ./sysutex/ex94.pp
Program Example94 ; { T h i s program demonstrates t h e I n c l u d e L e a d i n g P a t h D e l i m i t e r f u n c t i o n } Uses s y s u t i l s ; Begin End .
1544
38.13.145
IncludeTrailingBackslash
Synopsis: Add trailing directory separator to a pathname, if needed. Declaration: function IncludeTrailingBackslash(const Path: string) : string Visibility: default Description: IncludeTrailingBackslash is provided for backwards compatibility with Delphi. Use IncludeTrailingPathDelimiter (1545) instead. See also: IncludeTrailingPathDelimiter (1545), ExcludeTrailingPathDelimiter (1505), PathDelim (1454), IsPathDelimiter (1548)
38.13.146
IncludeTrailingPathDelimiter
Synopsis: Add trailing directory separator to a pathname, if needed. Declaration: function IncludeTrailingPathDelimiter(const Path: string) : string Visibility: default Description: IncludeTrailingPathDelimiter adds a trailing path delimiter character (PathDelim (1454)) to Path if none is present yet, and returns the result. If Path is empty, a path delimiter is returned, for Delphi compatibility. See also: IncludeTrailingBackslash (1545), ExcludeTrailingPathDelimiter (1505), PathDelim (1454), IsPathDelimiter (1548)
38.13.147
IncMonth
Synopsis: Increases the month in a TDateTime value with a given amount. Declaration: function IncMonth(const DateTime: TDateTime;NumberOfMonths: Integer) : TDateTime Visibility: default Description: IncMonth increases the month number in DateTime with NumberOfMonths. It wraps the result as to get a month between 1 and 12, and updates the year accordingly. NumberOfMonths can be negative, and can be larger than 12 (in absolute value). Errors: None. See also: Date (1492), Time (1583), Now (1552) Listing: ./sysutex/ex15.pp
Program Example15 ; { T h i s program demonstrates t h e IncMonth f u n c t i o n } Uses s y s u t i l s ; Var ThisDay : TDateTime ; Begin ThisDay : = Date ; W r i t e l n ( ThisDay :
, DateToStr ( ThisDay ) ) ;
1545
( ( ( ( ( (
6 months ago : , DateToStr ( IncMonth ( ThisDay , 6 ) ) ) ; 6 months from now : , DateToStr ( IncMonth ( ThisDay , 6 ) ) ) ; 1 2 months ago : , DateToStr ( IncMonth ( ThisDay , 1 2 ) ) ) ; 1 2 months from now : , DateToStr ( IncMonth ( ThisDay , 1 2 ) ) ) ; 1 8 months ago : , DateToStr ( IncMonth ( ThisDay , 1 8 ) ) ) ; 1 8 months from now : , DateToStr ( IncMonth ( ThisDay , 1 8 ) ) ) ;
38.13.148
InquireSignal
Synopsis: Check whether a signal handler is set (unix only) Declaration: function InquireSignal(RtlSigNum: Integer) : TSignalState Visibility: default Description: RtlSigNum will check whether the signal RtlSigNum is being handled, and by whom. It returns a TSignalState result to report the state of the signal, which can be one of the following values: ssNotHookedNo signal handler is set for the signal. ssHookedA signal handler is set by the RTL code for the signal. ssOverriddenA signal handler was set for the signal by third-party code. This routine works by resetting the signal handlers, so it is risky to call.
38.13.149
IntToHex
Synopsis: Convert an integer value to a hexadecimal string. Declaration: function IntToHex(Value: Integer;Digits: Integer) : string function IntToHex(Value: Int64;Digits: Integer) : string function IntToHex(Value: QWord;Digits: Integer) : string Visibility: default Description: IntToHex converts Value to a hexadecimal string representation. The result will contain at least Digits characters. If Digits is less than the needed number of characters, the string will NOT be truncated. If Digits is larger than the needed number of characters, the result is padded with zeroes. Errors: None. See also: IntToStr (1547) Listing: ./sysutex/ex73.pp
Program Example73 ; { T h i s program demonstrates t h e IntToHex f u n c t i o n } Uses s y s u t i l s ; Var I : l o n g i n t ; Begin For I : = 0 to 3 1 do
1546
38.13.150
IntToStr
Synopsis: Convert an integer value to a decimal string. Declaration: function IntToStr(Value: Integer) : string function IntToStr(Value: Int64) : string function IntToStr(Value: QWord) : string Visibility: default Description: IntToStr coverts Value to its 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. Errors: None. See also: IntToHex (1546), StrToInt (1577) Listing: ./sysutex/ex74.pp
Program Example74 ; { T h i s program demonstrates t h e I n t T o S t r f u n c t i o n } Uses s y s u t i l s ; Var I : l o n g i n t ; Begin For I : = 0 to 3 1 do begin W r i t e l n ( I n t T o S t r ( 1 shl I ) ) ; W r i t e l n ( I n t T o S t r ( 1 5 shl I ) ) ; end ; End .
38.13.151
IsDelimiter
Synopsis: Check whether a given string is a delimiter character. Declaration: function IsDelimiter(const Delimiters: string;const S: string; Index: Integer) : Boolean Visibility: default Description: IsDelimiter checks whether the Index-th character in the string S is a delimiter character as passed in Delimiters. If Index is out of range, False is returned. Errors: None. See also: LastDelimiter (1549) 1547
38.13.152
IsEqualGUID
Synopsis: Check whether two TGUID variables are equal. Declaration: function IsEqualGUID(const guid1: TGuid;const guid2: TGuid) : Boolean Visibility: default Description: IsEqualGUID checks whether guid1 and guid2 are equal, and returns True if this is the case, or False otherwise. See also: Supports (1581), #rtl.system.TGUID (1264), StringToGUID (1564), GuidToString (1543)
38.13.153
IsLeapYear
Synopsis: Determine whether a year is a leap year. Declaration: function IsLeapYear(Year: Word) : Boolean Visibility: default Description: IsLeapYear returns True if Year is a leap year, False otherwise. Errors: None. See also: IncMonth (1545), Date (1492) Listing: ./sysutex/ex16.pp
Program Example16 ; { T h i s program demonstrates t h e IsLeapYear f u n c t i o n } Uses s y s u t i l s ; Var YY,MM, dd : Word ; Procedure TestYear ( Y : Word ) ; begin W r i t e l n ( Y , i s l e a p year : end ; Begin DeCodeDate ( Date , YY,mm, dd ) ; TestYear ( yy ) ; TestYear ( 2 0 0 0 ) ; TestYear ( 1 9 0 0 ) ; TestYear ( 1 6 0 0 ) ; TestYear ( 1 9 9 2 ) ; TestYear ( 1 9 9 5 ) ; End .
, IsLeapYear (Y ) ) ;
38.13.154
IsPathDelimiter
Synopsis: Is the character at the given position a pathdelimiter ? Declaration: function IsPathDelimiter(const Path: string;Index: Integer) : Boolean 1548
Visibility: default Description: IsPathDelimiter returns True if the character at position Index equals PathDelim (1454), i.e. if it is a path delimiter character for the current platform. Errors: IncludeTrailingPathDelimiter (1545)ExcludeTrailingPathDelimiter (1505)PathDelim (1454)
38.13.155
IsValidIdent
Synopsis: Check whether a string is a valid identier name. Declaration: function IsValidIdent(const Ident: string) : Boolean Visibility: default Description: IsValidIdent returns True if Ident can be used as a compoent name. It returns False otherwise. Ident must consist of a letter or underscore, followed by a combination of letters, numbers or underscores to be a valid identier. Errors: None. Listing: ./sysutex/ex75.pp
Program Example75 ; { T h i s program demonstrates t h e I s V a l i d I d e n t f u n c t i o n } Uses s y s u t i l s ; Procedure T e s t i t ( S : S t r i n g ) ; begin Write ( " ,S , " i s ) ; I f not I s V A l i d I d e n t (S ) then Write ( NOT ) ; Writeln ( a v a l i d i d e n t i f i e r ) ; end ; Begin Testit Testit Testit Testit Testit Testit End .
( ( ( ( ( (
38.13.156
LastDelimiter
Synopsis: Return the last occurrence of a set of delimiters in a string. Declaration: function LastDelimiter(const Delimiters: string;const S: string) : Integer Visibility: default Description: LastDelimiter returns the last occurrence of any character in the set Delimiters in the string S. 1549
Listing: ./sysutex/ex88.pp
Program example88 ; { T h i s program demonstrates t h e L a s t D e l i m i t e r f u n c t i o n } uses S y s U t i l s ; begin Writeln ( L a s t D e l i m i t e r ( \ . : , c : \ filename . ext ) ) ; end .
38.13.157
LeftStr
Synopsis: Return a number of characters starting at the left of a string. Declaration: function LeftStr(const S: string;Count: Integer) : string Visibility: default Description: LeftStr returns the Count leftmost characters of S. It is equivalent to a call to Copy(S,1,Count). Errors: None. See also: RightStr (1555), TrimLeft (1586), TrimRight (1587), Trim (1585) Listing: ./sysutex/ex76.pp
Program Example76 ; { T h i s program demonstrates t h e L e f t S t r f u n c t i o n } Uses s y s u t i l s ; Begin Writeln Writeln Writeln Writeln End .
( ( ( (
38.13.158
LoadStr
Synopsis: Load a string from the resource tables. Declaration: function LoadStr(Ident: Integer) : string Visibility: default Description: This function is not yet implemented. resources are not yet supported.
38.13.159
LowerCase
Synopsis: Return a lowercase version of a string. Declaration: function LowerCase(const s: string) : string; Overload function LowerCase(const V: variant) : string; Overload 1550
Visibility: default Description: LowerCase returns the lowercase equivalent of S. 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. Errors: None. See also: AnsiLowerCase (1474), UpperCase (1592), AnsiUpperCase (1482) Listing: ./sysutex/ex77.pp
Program Example77 ; { T h i s program demonstrates t h e LowerCase f u n c t i o n } Uses s y s u t i l s ; Begin W r i t e l n ( LowerCase ( THIS WILL COME o u t a l l LoWeRcAsE ! ) ) ; End .
38.13.160
MSecsToTimeStamp
Synopsis: Convert a number of milliseconds to a TDateTime value. Declaration: function MSecsToTimeStamp(MSecs: Comp) : TTimeStamp Visibility: default Description: MSecsTiTimeStamp converts the given number of milliseconds to a TTimeStamp date/time notation. Use TTimeStamp variables if you need to keep very precise track of time. Errors: None. See also: TimeStampToMSecs (1584), DateTimeToTimeStamp (1496) Listing: ./sysutex/ex17.pp
Program Example17 ; { T h i s program demonstrates t h e MSecsToTimeStamp f u n c t i o n } Uses s y s u t i l s ; Var MS : Comp ; TS : TTimeStamp ; DT : TDateTime ; Begin TS: = DateTimeToTimeStamp (Now ) ; W r i t e l n ( Now i n days s i n c e 1 / 1 / 0 0 0 1 : ,TS . Date ) ; W r i t e l n ( Now i n m i l l i s e c s s i n c e m i d n i g h t : ,TS . Time ) ; MS: = TimeStampToMSecs ( TS ) ; W r i t e l n ( Now i n m i l l i s e c s s i n c e 1 / 1 / 0 0 0 1 : ,MS) ; MS: =MS100036002; TS: = MSecsToTimeStamp (MS) ; DT: = TimeStampToDateTime ( TS ) ;
1551
, DateTimeToStr (DT ) ) ;
38.13.161
NewStr
Overload
Synopsis: Allocate a new ansistring on the heap. Declaration: function NewStr(const S: string) : PString; Visibility: default Description: NewStr assigns a new dynamic string on the heap, copies S into it, and returns a pointer to the newly assigned string. This function is obsolete, and shouldnt be used any more. The AnsiString mechanism also allocates ansistrings on the heap, and should be preferred over this mechanism. For an example, see AssignStr (1484). Errors: If not enough memory is present, an EOutOfMemory exception will be raised. See also: AssignStr (1484), DisposeStr (1501)
38.13.162
Now
Synopsis: Returns the current date and time. Declaration: function Now : TDateTime Visibility: default Description: Now returns the current date and time. It is equivalent to Date+Time. Errors: None. See also: Date (1492), Time (1583) Listing: ./sysutex/ex18.pp
Program Example18 ; { T h i s program demonstrates t h e Now f u n c t i o n } Uses s y s u t i l s ; Begin W r i t e l n ( Now : End .
, DateTimeToStr (Now ) ) ;
38.13.163
OutOfMemoryError
1552
Description: OutOfMemoryError raises an EOutOfMemory (1600) exception, with an exception object that has been allocated on the heap at program startup. The program should neved create an EOutOfMemory (1600) exception, but always call this routine. See also: EOutOfMemory (1600)
38.13.164
QuotedStr
Synopsis: Return a quotes version of a string. Declaration: function QuotedStr(const S: string) : string Visibility: default Description: QuotedStr returns the string S, quoted with single quotes. This means that S is enclosed in single quotes, and every single quote in S is doubled. It is equivalent to a call to AnsiQuotedStr(s, ). Errors: None. See also: AnsiQuotedStr (1475), AnsiExtractQuotedStr (1473) Listing: ./sysutex/ex78.pp
Program Example78 ; { T h i s program demonstrates t h e QuotedStr f u n c t i o n } Uses s y s u t i l s ; Var S : A n s i S t r i n g ; Begin S: = He s a i d H e l l o and walked on ; Writeln ( S ) ; W r i t e l n ( becomes ) ; W r i t e l n ( QuotedStr (S ) ) ; End .
38.13.165
RaiseLastOSError
Synopsis: Raise an exception with the last Operating System error code. Declaration: procedure RaiseLastOSError Visibility: default Description: RaiseLastOSError raises an EOSError (1600) exception with the error code returned by GetLastOSError. 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. Errors: This procedure may not be implemented on all platforms. If it is not, then a normal Exception (1602) will be raised. See also: EOSError (1600), GetLastOSError (1541), Exception (1602)
1553
38.13.166
RemoveDir
Synopsis: Remove a directory from the lesystem. Declaration: function RemoveDir(const Dir: string) : Boolean Visibility: default Description: RemoveDir removes directory Dir from the disk. If the directory is not absolue, it is appended to the current working directory. For an example, see CreateDir (1491). Errors: In case of error (e.g. the directory isnt empty) the function returns False. If successful, True is returned.
38.13.167
Synopsis: Rename a le.
RenameFile
Declaration: function RenameFile(const OldName: string;const NewName: string) : Boolean Visibility: default Description: RenameFile renames a le from OldName to NewName. The function returns True if successful, False otherwise. Remark: you cannot rename across disks or partitions. Errors: On Error, False is returned. See also: DeleteFile (1499) Listing: ./sysutex/ex44.pp
Program Example44 ; { T h i s program demonstrates t h e RenameFile f u n c t i o n } Uses s y s u t i l s ; Var F : L o n g i n t ; S : String ; Begin S: = Some s h o r t f i l e . ; F : = F i l e C r e a t e ( t e s t . dap ) ; F i l e W r i t e ( F , S [ 1 ] , Length (S ) ) ; FileClose ( F ) ; I f RenameFile ( t e s t . dap , t e s t . d a t ) then W r i t e l n ( S u c c e s s f u l l y renamed f i l e s . ) ; End .
38.13.168
ReplaceDate
Synopsis: Replace the date part of a date/time stamp Declaration: procedure ReplaceDate(var DateTime: TDateTime;const NewDate: TDateTime) Visibility: default 1554
Description: ReplaceDate replaces the date part of DateTime with NewDate. The time part is left unchanged. See also: ReplaceTime (1555)
38.13.169
ReplaceTime
Synopsis: Replace the time part Declaration: procedure ReplaceTime(var dati: TDateTime;NewTime: TDateTime) Visibility: default Description: ReplaceTime replaces the time part in dati with NewTime. The date part remains untouched.
38.13.170
RightStr
Synopsis: Return a number of characters from a string, starting at the end. Declaration: function RightStr(const S: string;Count: Integer) : string Visibility: default
Description: RightStr returns the Count rightmost characters of S. It is equivalent to a call to Copy(S,Length(S)+1-Count,Coun If Count is larger than the actual length of S only the real length will be used. Errors: None. See also: LeftStr (1550), Trim (1585), TrimLeft (1586), TrimRight (1587) Listing: ./sysutex/ex79.pp
Program Example79 ; { T h i s program demonstrates t h e R i g h t S t r f u n c t i o n } Uses s y s u t i l s ; Begin Writeln Writeln Writeln Writeln End .
( ( ( (
38.13.171
SafeLoadLibrary
Synopsis: Load a library safely Declaration: function SafeLoadLibrary(const FileName: AnsiString;ErrorMode: DWord) : HMODULE Visibility: default Description: SafeLoadLibrary saves and restores some registers before and after issuing a call to LoadLibrary. Errors: None. 1555
38.13.172
SameFileName
Synopsis: Are two lenames referring to the same le ? Declaration: function SameFileName(const S1: string;const S2: string) : Boolean Visibility: default Description: SameFileName returns True if calling AnsiCompareFileName (1470) with arguments S1 and S2 returns 0, and returns False otherwise. Errors: None. See also: AnsiCompareFileName (1470)
38.13.173
SameText
Synopsis: Checks whether 2 strings are the same (case insensitive) Declaration: function SameText(const s1: string;const s2: string) : Boolean Visibility: default Description: SameText calls CompareText (1489) with S1 and S2 as parameters and returns True if the result of that call is zero, or False otherwise. Errors: None. See also: CompareText (1489), AnsiSameText (1476), AnsiSameStr (1476)
38.13.174
SetCurrentDir
Synopsis: Set the current directory of the application. Declaration: function SetCurrentDir(const NewDir: string) : Boolean Visibility: default Description: SetCurrentDir sets the current working directory of your program to NewDir. It returns True if the function was successfull, False otherwise. Errors: In case of error, False is returned. See also: GetCurrentDir (1539)
38.13.175
SetDirSeparators
Synopsis: Set the directory separators to the known directory separators. Declaration: function SetDirSeparators(const FileName: string) : string Visibility: default Description: SetDirSeparators returns FileName with all possible DirSeparators replaced by OSDirSeparator. Errors: None. See also: ExpandFileName (1506), ExtractFilePath (1509), ExtractFileDir (1507) Listing: ./sysutex/ex47.pp 1556
38.13.176
ShowException
Synopsis: Show the current exception to the user. Declaration: procedure ShowException(ExceptObject: TObject;ExceptAddr: Pointer) Visibility: default Description: ShowException shows a message stating that a ExceptObject was raised at address ExceptAddr. It uses ExceptionErrorMessage (1504) 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, OnShowException (1467) is executed. Errors: If, for a GUI application, OnShowException (1467) is not set, no message will be displayed to the user. 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. See also: ExceptObject (1504), ExceptAddr (1503), ExceptionErrorMessage (1504)
38.13.177
Sleep
Synopsis: Suspend execution of a program for a certain time. Declaration: procedure Sleep(milliseconds: Cardinal) Visibility: default Description: Sleep suspends the execution of the program for the specied number of milliseconds (milliseconds). After the specied period has expired, program execution resumes. 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.
38.13.178
SScanf
Synopsis: Scan a string for substrings and return the substrings Declaration: function SScanf(const s: string;const fmt: string; const Pointers: Array of Pointer) : Integer Visibility: default Description: SSCanF scans the string S for the elements specied in Fmt, and returns the elements in the pointers in Pointers. The Fmt can contain placeholders of the form %X where X can be one of the following characters: 1557
dPlaceholder for a decimal number. fPlaceholder for a oating point number (an extended) sPlaceholder for a string of arbitrary length. cPlaceholder for a single character The Pointers array contains a list of pointers, each pointer should point to a memory location of a type that corresponds to the type of placeholder in that position: dA pointer to an integer. fA pointer to an extended. sA pointer to an ansistring. cA pointer to a single character. Errors: No error checking is performed on the type of the memory location. See also: Format (1528)
38.13.179
StrAlloc
Synopsis: Allocate a null-terminated string on the heap. Declaration: function StrAlloc(Size: Cardinal) : PChar Visibility: default Description: StrAlloc reserves memory on the heap for a string with length Len, terminating #0 included, and returns a pointer to it. Additionally, StrAlloc allocates 4 extra bytes to store the size of the allocated memory. Therefore this function is NOT compatible with the StrAlloc (1183) function of the Strings unit. For an example, see StrBufSize (1558). Errors: None. See also: StrBufSize (1558), StrDispose (1561), StrAlloc (1183)
38.13.180
StrBufSize
Synopsis: Return the size of a null-terminated string allocated on the heap. Declaration: function StrBufSize(Str: PChar) : SizeUInt Visibility: default Description: StrBufSize returns the memory allocated for Str. This function ONLY gives the correct result if Str was allocated using StrAlloc (1558). Errors: If no more memory is available, a runtime error occurs. See also: StrAlloc (1558), StrDispose (1561) Listing: ./sysutex/ex46.pp
1558
Var P : Pchar ; Begin P: = S t r A l l o c ( Length (S ) + 1 ) ; StrPCopy ( P , S ) ; Write ( P , has l e n g t h , length (S ) ) ; W r i t e l n ( and b u f f e r s i z e , S t r B u f S i z e (P ) ) ; StrDispose (P ) ; End .
38.13.181
StrByteType
Synopsis: Return the type of byte in a null-terminated string for a multi-byte character set Declaration: function StrByteType(Str: PChar;Index: Cardinal) : TMbcsByteType Visibility: default Description: StrByteType returns the type of byte in the null-terminated string Str at (0-based) position Index. Errors: No checking on the index is performed. See also: TMbcsByteType (1462), ByteType (1486)
38.13.182
strcat
Synopsis: Concatenate 2 null-terminated strings. Declaration: function strcat(dest: PChar;source: PChar) : PChar Visibility: default Description: Attaches Source to Dest and returns Dest. Errors: No length checking is performed. See also: StrLCat (1565) Listing: ./stringex/ex11.pp
Program Example11 ; Uses s t r i n g s ; { Program t o demonstrate t h e S t r C a t f u n c t i o n . } Const P1 : PChar = T h i s i s a PChar S t r i n g . ;
1559
Var P2 : PChar ; begin P2 : = S t r A l l o c ( StrLen ( P1 ) 2 + 1 ) ; StrMove ( P2 , P1 , StrLen ( P1 ) + 1 ) ; { P2=P1 } StrCat ( P2 , P1 ) ; { Append P2 once more } W r i t e l n ( P2 : ,P2 ) ; StrDispose ( P2 ) ; end .
38.13.183
StrCharLength
Synopsis: Return the length of a null-terminated string in characters. Declaration: function StrCharLength(const Str: PChar) : Integer Visibility: default Description: StrCharLength returns the length of the null-terminated string Str (a widestring) in characters (not in bytes). It uses the widestring manager to do this.
38.13.184
strcomp
Synopsis: Compare 2 null-terminated strings, case sensitive. Declaration: function strcomp(str1: PChar;str2: PChar) : SizeInt Visibility: default Description: Compares the null-terminated strings S1 and S2. The result is A negative Longint when S1<S2. 0 when S1=S2. A positive Longint when S1>S2. For an example, see StrLComp (1565). Errors: None. See also: StrLComp (1565), StrIComp (1563), StrLIComp (1568)
38.13.185
strcopy
Synopsis: Copy a null-terminated string Declaration: function strcopy(dest: PChar;source: PChar) : PChar Visibility: default Description: Copy the null terminated string in Source to Dest, and returns a pointer to Dest. Dest needs enough room to contain Source, i.e. StrLen(Source)+1 bytes. Errors: No length checking is performed. See also: StrPCopy (1570), StrLCopy (1566), StrECopy (1561)
1560
Listing: ./stringex/ex4.pp
Program Example4 ; Uses s t r i n g s ; { Program t o demonstrate t h e StrCopy f u n c t i o n . } Const P : PCHar = T h i s i s a PCHAR s t r i n g . ; var PP : PChar ; begin PP: = S t r A l l o c ( S t r l e n (P ) + 1 ) ; STrCopy ( PP, P ) ; I f StrComp ( PP, P) < >0 then W r i t e l n ( Ohoh problems . . . ) else W r i t e l n ( A l l i s w e l l : PP= ,PP ) ; StrDispose (PP ) ; end .
38.13.186
StrDispose
Synopsis: Dispose of a null-terminated string on the heap. Declaration: procedure StrDispose(Str: PChar) Visibility: default Description: StrDispose frees any memory allocated for Str. This function will only function correctly if Str has been allocated using StrAlloc (1558) from the SysUtils unit. For an example, see StrBufSize (1558). Errors: If an invalid pointer is passed, or a pointer not allocated with StrAlloc, an error may occur. See also: StrBufSize (1558), StrAlloc (1558), StrDispose (1561)
38.13.187
strecopy
Synopsis: Copy a null-terminated string, return a pointer to the end. Declaration: function strecopy(dest: PChar;source: PChar) : PChar Visibility: default Description: Copies the Null-terminated string in Source to Dest, and returns a pointer to the end (i.e. the terminating Null-character) of the copied string. Errors: No length checking is performed. See also: StrLCopy (1566), StrCopy (1560) Listing: ./stringex/ex6.pp
1561
Program Example6 ; Uses s t r i n g s ; { Program t o demonstrate t h e StrECopy f u n c t i o n . } Const P : PChar = T h i s i s a PCHAR s t r i n g . ; Var PP : PChar ; begin PP: = S t r A l l o c ( StrLen (P ) + 1 ) ; I f L o n g i n t ( StrECopy (PP, P)) L o n g i n t (PP)<> StrLen (P ) then W r i t e l n ( Something i s wrong here ! ) else W r i t e l n ( PP= ,PP ) ; StrDispose (PP ) ; end .
38.13.188
strend
Synopsis: Return a pointer to the end of a null-terminated string Declaration: function strend(p: PChar) : PChar Visibility: default Description: Returns a pointer to the end of P. (i.e. to the terminating null-character. Errors: None. See also: StrLen (1567) Listing: ./stringex/ex7.pp
Program Example6 ; Uses s t r i n g s ; { Program t o demonstrate t h e StrEnd f u n c t i o n . } Const P : PChar = T h i s i s a PCHAR s t r i n g . ; begin I f L o n g i n t ( StrEnd (P)) L o n g i n t (P)<> StrLen (P ) then W r i t e l n ( Something i s wrong here ! ) else Writeln ( A l l i s w e l l . . ) ; end .
38.13.189
StrFmt
Synopsis: Format a string with given arguments, store the result in a buffer.
1562
Declaration: function StrFmt(Buffer: PChar;Fmt: PChar;const args: Array of const) : PChar function StrFmt(Buffer: PChar;Fmt: PChar;const Args: Array of const; const FormatSettings: TFormatSettings) : PChar Visibility: default Description: StrFmt will format fmt with Args, as the Format (1528) function does, and it will store the result in Buffer. The function returns Buffer. Buffer should point to enough space to contain the whole result. Errors: for a list of errors, see Format (1528). See also: StrLFmt (1567), FmtStr (1527), Format (1528), FormatBuf (1534) Listing: ./sysutex/ex80.pp
Program Example80 ; { T h i s program demonstrates t h e StrFmt f u n c t i o n } Uses s y s u t i l s ; Var S : A n s i S t r i n g ; Begin SetLEngth ( S , 8 0 ) ; W r i t e l n ( StrFmt (@S[ 1 ] , For some n i c e examples o f f o m a t t i n g see %s . , [ Format ] ) ) ; End .
38.13.190
stricomp
Synopsis: Compare 2 null-terminated strings, case insensitive. Declaration: function stricomp(str1: PChar;str2: PChar) : SizeInt Visibility: default Description: Compares the null-terminated strings S1 and S2, ignoring case. The result is A negative Longint when S1<S2. 0 when S1=S2. A positive Longint when S1>S2. Errors: None. See also: StrLComp (1565), StrComp (1560), StrLIComp (1568) Listing: ./stringex/ex8.pp
Program Example8 ; Uses s t r i n g s ; { Program t o demonstrate t h e StrLComp f u n c t i o n . } Const P1 : PChar = T h i s i s t h e f i r s t s t r i n g . ;
1563
P2 : PCHar = T h i s i s t h e second s t r i n g . ; Var L : L o n g i n t ; begin Write ( P1 and P2 are ) ; I f StrComp ( P1 , P2) < >0 then w r i t e ( NOT ) ; w r i t e ( equal . The f i r s t ) ; L:=1; While StrLComp ( P1 , P2 , L ) = 0 do inc ( L ) ; dec ( l ) ; W r i t e l n ( l , c h a r a c t e r s are t h e same . ) ; end .
38.13.191
StringReplace
Synopsis: Replace occurrences of one substring with another in a string. Declaration: function StringReplace(const S: string;const OldPattern: string; const NewPattern: string;Flags: TReplaceFlags) : string Visibility: default Description: StringReplace searches the string S for occurrences of the string OldPattern and, if it is found, replaces it with NewPattern. It returns the resulting string. The behaviour of StringReplace can be runed with Flags, which is of type TReplaceFlags (1463). Standard behaviour is to replace only the rst occurrence of OldPattern, and to search case sensitively. Errors: None. See also: TReplaceFlags (1463)
38.13.192
StringToGUID
Synopsis: Convert a string to a native TGUID type. Declaration: function StringToGUID(const S: string) : TGuid Visibility: default Description: StringToGUID converts the string S to a valid GUID. The string S should be of the form {XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX} Where each X is a hexadecimal digit. The dashes and braces are required. Errors: In case S contains an invalid GUID representation, a EConvertError (1597) exception is raised. See also: Supports (1581), #rtl.system.TGUID (1264), GUIDToString (1543), IsEqualGuid (1548)
1564
38.13.193
strlcat
Synopsis: Concatenate 2 null-terminated strings, with length boundary. Declaration: function strlcat(dest: PChar;source: PChar;l: SizeInt) : PChar Visibility: default Description: Adds MaxLen characters from Source to Dest, and adds a terminating null-character. Returns Dest. Errors: None. See also: StrCat (1559) Listing: ./stringex/ex12.pp
Program Example12 ; Uses s t r i n g s ; { Program t o demonstrate t h e S t r L C a t f u n c t i o n . } Const P1 : PChar = 1234567890 ; Var P2 : PChar ; begin P2 : = S t r A l l o c ( StrLen ( P1 ) 2 + 1 ) ; P2 ^ : = # 0 ; { Zero l e n g t h } StrCat ( P2 , P1 ) ; StrLCat ( P2 , P1 , 5 ) ; W r i t e l n ( P2 = ,P2 ) ; StrDispose ( P2 ) end .
38.13.194
strlcomp
Synopsis: Compare limited number of characters of 2 null-terminated strings Declaration: function strlcomp(str1: PChar;str2: PChar;l: SizeInt) : SizeInt Visibility: default Description: Compares maximum L characters of the null-terminated strings S1 and S2. The result is A negative Longint when S1<S2. 0 when S1=S2. A positive Longint when S1>S2. Errors: None. See also: StrComp (1560), StrIComp (1563), StrLIComp (1568) Listing: ./stringex/ex8.pp
1565
Program Example8 ; Uses s t r i n g s ; { Program t o demonstrate t h e StrLComp f u n c t i o n . } Const P1 : PChar = T h i s i s t h e f i r s t s t r i n g . ; P2 : PCHar = T h i s i s t h e second s t r i n g . ; Var L : L o n g i n t ; begin Write ( P1 and P2 are ) ; I f StrComp ( P1 , P2) < >0 then w r i t e ( NOT ) ; w r i t e ( equal . The f i r s t ) ; L:=1; While StrLComp ( P1 , P2 , L ) = 0 do inc ( L ) ; dec ( l ) ; W r i t e l n ( l , c h a r a c t e r s are t h e same . ) ; end .
38.13.195
strlcopy
Synopsis: Copy a null-terminated string, limited in length. Declaration: function strlcopy(dest: PChar;source: PChar;maxlen: SizeInt) : PChar Visibility: default Description: Copies MaxLen characters from Source to Dest, and makes Dest a null terminated string. Errors: No length checking is performed. See also: StrCopy (1560), StrECopy (1561) Listing: ./stringex/ex5.pp
Program Example5 ; Uses s t r i n g s ; { Program t o demonstrate t h e StrLCopy f u n c t i o n . } Const P : PCHar = 123456789ABCDEF ; var PP : PCHar ; begin PP: = S t r A l l o c ( 1 1 ) ; Writeln ( F i r s t 1 0 characters of P : StrDispose (PP ) ; end .
, StrLCopy ( PP, P , 1 0 ) ) ;
1566
38.13.196
strlen
Synopsis: Length of a null-terminated string. Declaration: function strlen(p: PChar) : SizeInt Visibility: default Description: Returns the length of the null-terminated string P. Errors: None. See also: StrNew (1569) Listing: ./stringex/ex1.pp
Program Example1 ; Uses s t r i n g s ; { Program t o demonstrate t h e StrLen f u n c t i o n . } Const P : PChar = T h i s i s a c o n s t a n t pchar s t r i n g ; begin W r i t e l n ( P : ,p ) ; W r i t e l n ( l e n g t h (P ) : , StrLen (P ) ) ; end .
38.13.197
StrLFmt
Synopsis: Format a string with given arguments, but with limited length. Declaration: function StrLFmt(Buffer: PChar;Maxlen: Cardinal;Fmt: PChar; const args: Array of const) : PChar function StrLFmt(Buffer: PChar;Maxlen: Cardinal;Fmt: PChar; const args: Array of const; const FormatSettings: TFormatSettings) : PChar Visibility: default Description: StrLFmt will format fmt with Args, as the Format (1528) function does, and it will store maximally Maxlen characters of the result in Buffer. The function returns Buffer. Buffer should point to enough space to contain MaxLen characters. Errors: for a list of errors, see Format (1528). See also: StrFmt (1562), FmtStr (1527), Format (1528), FormatBuf (1534) Listing: ./sysutex/ex81.pp
Program Example80 ; { T h i s program demonstrates t h e StrFmt f u n c t i o n } Uses s y s u t i l s ; Var S : A n s i S t r i n g ;
1567
Begin SetLEngth ( S , 8 0 ) ; W r i t e l n ( StrLFmt (@S[ 1 ] , 8 0 , For some n i c e examples o f f o m a t t i n g see %s . , [ Format ] ) ) ; End .
38.13.198
strlicomp
Synopsis: Compare limited number of characters in 2 null-terminated strings, ignoring case. Declaration: function strlicomp(str1: PChar;str2: PChar;l: SizeInt) : SizeInt Visibility: default Description: Compares maximum L characters of the null-terminated strings S1 and S2, ignoring case. The result is A negative Longint when S1<S2. 0 when S1=S2. A positive Longint when S1>S2. For an example, see StrIComp (1563) Errors: None. See also: StrLComp (1565), StrComp (1560), StrIComp (1563)
38.13.199
strlower
Synopsis: Convert null-terminated string to all-lowercase. Declaration: function strlower(p: PChar) : PChar Visibility: default Description: Converts P to an all-lowercase string. Returns P. Errors: None. See also: StrUpper (1581) Listing: ./stringex/ex14.pp
Program Example14 ; Uses s t r i n g s ; { Program t o demonstrate t h e StrLower and StrUpper f u n c t i o n s . } Const P1 : PChar = THIS IS AN UPPERCASE PCHAR STRING ; P2 : PChar = t h i s i s a lowercase s t r i n g ; begin W r i t e l n ( Uppercase : StrLower ( P1 ) ; W r i t e l n ( Lowercase : end .
, StrUpper ( P2 ) ) ; ,P1 ) ;
1568
38.13.200
strmove
Synopsis: Move a null-terminated string to new location. Declaration: function strmove(dest: PChar;source: PChar;l: SizeInt) : PChar Visibility: default Description: Copies MaxLen characters from Source to Dest. No terminating null-character is copied. Returns Dest Errors: None. See also: StrLCopy (1566), StrCopy (1560) Listing: ./stringex/ex10.pp
Program Example10 ; Uses s t r i n g s ; { Program t o demonstrate t h e StrMove f u n c t i o n . } Const P1 : PCHAR = T h i s i s a pchar s t r i n g . ;
38.13.201
strnew
Synopsis: Allocate room for new null-terminated string. Declaration: function strnew(p: PChar) : PChar Visibility: default Description: Copies P to the Heap, and returns a pointer to the copy. Errors: Returns Nil if no memory was available for the copy. See also: StrCopy (1560), StrDispose (1561) Listing: ./stringex/ex16.pp
Program Example16 ; Uses s t r i n g s ; { Program t o demonstrate t h e StrNew f u n c t i o n . } Const P1 : PChar = T h i s i s a PChar s t r i n g ;
1569
var P2 : PChar ; begin P2 : = StrNew ( P1 ) ; I f P1=P2 then w r i t e l n ( T h i s can t be happening . . . ) else w r i t e l n ( P2 : ,P2 ) ; StrDispose ( P2 ) ; end .
38.13.202
StrNextChar
Synopsis: Returns a pointer to the location of the next empty character in a null-terminated string Declaration: function StrNextChar(const Str: PChar) : PChar Visibility: default Description: StrNextChar returns a pointer to the null-character that terminates the string Str Errors: if Str is not properly terminated, an access violation may occur.
38.13.203
StrPas
Synopsis: Convert a null-terminated string to an ansistring. Declaration: function StrPas(Str: PChar) : string Visibility: default Description: Converts a null terminated string in Str to an Ansitring, and returns this string. This string is NOT truncated at 255 characters as is the Errors: None. See also: StrPCopy (1570), StrPLCopy (1571)
38.13.204
StrPCopy
Synopsis: Copy an ansistring to a null-terminated string. Declaration: function StrPCopy(Dest: PChar;Source: string) : PChar Visibility: default Description: StrPCopy Converts the Ansistring in Source to a Null-terminated string, and copies it to Dest. Dest needs enough room to contain the string Source, i.e. Length(Source)+1 bytes. Errors: No checking is performed to see whether Dest points to enough memory to contain Source. See also: StrPLCopy (1571), StrPas (1570)
1570
38.13.205
StrPLCopy
Synopsis: Copy a limited number of characters from an ansistring to a null-terminated string. Declaration: function StrPLCopy(Dest: PChar;Source: string;MaxLen: SizeUInt) : PChar Visibility: default Description: StrPLCopy Converts maximally MaxLen characters of the Ansistring in Source to a Nullterminated string, and copies it to Dest. Dest needs enough room to contain the characters. Errors: No checking is performed to see whether Dest points to enough memory to contain L characters of Source. See also: StrPCopy (1570)
38.13.206
strpos
Synopsis: Find position of one null-terminated substring in another. Declaration: function strpos(str1: PChar;str2: PChar) : PChar Visibility: default Description: Returns a pointer to the rst occurrence of S2 in S1. If S2 does not occur in S1, returns Nil. Errors: None. See also: StrScan (1572), StrRScan (1571) Listing: ./stringex/ex15.pp
Program Example15 ; Uses s t r i n g s ; { Program t o demonstrate t h e StrPos f u n c t i o n . } Const P : PChar = T h i s i s a PChar s t r i n g . ; S : Pchar = i s ; begin W r i t e l n ( P o s i t i o n o f i s i n P : , s i z e i n t ( StrPos ( P , S)) s i z e i n t (P ) ) ; end .
38.13.207
strrscan
Synopsis: Find last occurrence of a character in a null-terminated string. Declaration: function strrscan(p: PChar;c: Char) : PChar Visibility: default Description: Returns a pointer to the last occurrence of the character C in the null-terminated string P. If C does not occur, returns Nil. For an example, see StrScan (1572). Errors: None. See also: StrScan (1572), StrPos (1571) 1571
38.13.208
strscan
Synopsis: Find rst occurrence of a character in a null-terminated string. Declaration: function strscan(p: PChar;c: Char) : PChar Visibility: default Description: Returns a pointer to the rst occurrence of the character C in the null-terminated string P. If C does not occur, returns Nil. Errors: None. See also: StrRScan (1571), StrPos (1571) Listing: ./stringex/ex13.pp
Program Example13 ; Uses s t r i n g s ; { Program t o demonstrate t h e StrScan and StrRScan f u n c t i o n s . } Const P : PChar = T h i s i s a PCHAR s t r i n g . ; S : Char = s ; begin W r i t e l n ( P , s t a r t i n g from f i r s t s : , StrScan ( P , s ) ) ; W r i t e l n ( P , s t a r t i n g from l a s t s : , StrRScan ( P , s ) ) ; end .
38.13.209
StrToBool
Synopsis: Convert a string to a boolean value Declaration: function StrToBool(const S: string) : Boolean Visibility: default Description: StrToBool will convert the string S to a boolean value. The string S can contain one of True, False (case is ignored) or a numerical value. If it contains a numerical value, 0 is converted to False, all other values result in True. If the string S contains no valid boolean, then an EConvertError (1597) exception is raised. Errors: On error, an EConvertError (1597) exception is raised. See also: BoolToStr (1485)
38.13.210
StrToBoolDef
Synopsis: Convert string to boolean value, returning default in case of error Declaration: function StrToBoolDef(const S: string;Default: Boolean) : Boolean Visibility: default Description: StrToBoolDef tries to convert the string S to a boolean value, and returns the boolean value in case of success. In case S does not contain a valid boolean string, Default is returned. See also: StrToBool (1572), TryStrToBool (1589) 1572
38.13.211
StrToCurr
Synopsis: Convert a string to a currency value Declaration: function StrToCurr(const S: string) : Currency function StrToCurr(const S: string; const FormatSettings: TFormatSettings) : Currency Visibility: default Description: StrToCurr 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 EConvertError (1597) exception is raised. Errors: On error, an EConvertError (1597) exception is raised. See also: CurrToStr (1492), StrToCurrDef (1573)
38.13.212
StrToCurrDef
Synopsis: Convert a string to a currency value, using a default value Declaration: function StrToCurrDef(const S: string;Default: Currency) : Currency function StrToCurrDef(const S: string;Default: Currency; const FormatSettings: TFormatSettings) : Currency Visibility: default Description: StrToCurrDef 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 Default value is returned. Errors: On error, the Default value is returned. See also: CurrToStr (1492), StrToCurr (1573)
38.13.213
Declaration: function function function function function
StrToDate
Synopsis: Convert a date string to a TDateTime value. StrToDate(const S: ShortString) : TDateTime StrToDate(const S: Ansistring) : TDateTime StrToDate(const S: ShortString;separator: Char) : TDateTime StrToDate(const S: AnsiString;separator: Char) : TDateTime StrToDate(const S: ShortString;const useformat: string; separator: Char) : TDateTime function StrToDate(const S: AnsiString;const useformat: string; separator: Char) : TDateTime function StrToDate(const S: PChar;Len: Integer;const useformat: string; separator: Char) : TDateTime
Visibility: default Description: StrToDate converts the string S to a TDateTime date value. The Date must consist of 1 to three digits, separated by the DateSeparator 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 not supported in Delphi) The order of the digits (y/m/d, m/d/y, d/m/y) is determined from the ShortDateFormat variable. 1573
Errors: On error (e.g. an invalid date or invalid character), an EConvertError exception is raised. See also: StrToTime (1579), DateToStr (1496), TimeToStr (1585) Listing: ./sysutex/ex19.pp
Program Example19 ; { T h i s program demonstrates t h e StrToDate f u n c t i o n } Uses s y s u t i l s ; Procedure T e s t S t r ( S : S t r i n g ) ; begin Writeln ( S, : end ; Begin W r i t e l n ( ShortDateFormat , ShortDateFormat ) ; T e s t S t r ( DateTimeToStr ( Date ) ) ; T e s t S t r ( 05 + DateSeparator + 05 + DateSeparator+ 1999 ) ; T e s t S t r ( 5 + DateSeparator + 5 ) ; TestStr ( 5 ) ; End .
, DateToStr ( StrToDate (S ) ) ) ;
38.13.214
StrToDateDef
Synopsis: Convert string to date, returning a default value Declaration: function StrToDateDef(const S: ShortString;const Defvalue: TDateTime) : TDateTime function StrToDateDef(const S: ShortString;const Defvalue: TDateTime; separator: Char) : TDateTime function StrToDateDef(const S: AnsiString;const Defvalue: TDateTime) : TDateTime function StrToDateDef(const S: AnsiString;const Defvalue: TDateTime; separator: Char) : TDateTime Visibility: default Description: StrToDateDef tries to convert the string S to a valid TDateTime date value, and returns DefValue if S does not contain a valid date indication. Errors: None. See also: StrToDate (1573), TryStrToDate (1589), StrToTimeDef (1580)
38.13.215
StrToDateTime
Synopsis: Convert a date/time string to a TDateTime value. Declaration: function StrToDateTime(const S: string) : TDateTime function StrToDateTime(const s: ShortString; const FormatSettings: TFormatSettings) : TDateTime function StrToDateTime(const s: AnsiString; const FormatSettings: TFormatSettings) : TDateTime 1574
Visibility: default Description: StrToDateTime converts the string S to a TDateTime date and time value. The date and time parts must be separated by a space. For the date part, the same restrictions apply as for the StrToDate (1573) function: The Date must consist of 1 to three numbers, separated by the DateSeparator 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 not supported in Delphi) The order of the 3 numbers (y/m/d, m/d/y, d/m/y) is determined from the ShortDateFormat variable. Errors: On error (e.g. an invalid date or invalid character), an EConvertError exception is raised. See also: StrToDate (1573), StrToTime (1579), DateTimeToStr (1493) Listing: ./sysutex/ex20.pp
Program Example20 ; { T h i s program demonstrates t h e StrToDateTime f u n c t i o n } Uses s y s u t i l s ; Procedure T e s t S t r ( S : S t r i n g ) ; begin Writeln ( S, : end ; Begin W r i t e l n ( ShortDateFormat , ShortDateFormat ) ; T e s t S t r ( DateTimeToStr (Now ) ) ; T e s t S t r ( 05051999 15:50 ) ; T e s t S t r ( 5 5 13:30 ) ; T e s t S t r ( 5 1 : 3 0PM ) ; End .
, DateTimeToStr ( StrToDateTime (S ) ) ) ;
38.13.216
StrToDateTimeDef
Synopsis: Convert string to date/time, returning a default value Declaration: function StrToDateTimeDef(const S: ShortString; const Defvalue: TDateTime) : TDateTime function StrToDateTimeDef(const S: AnsiString;const Defvalue: TDateTime) : TDateTime Visibility: default Description: StrToDateTimeDef tries to convert the string S to a valid TDateTime date and time value, and returns DefValue if S does not contain a valid date-time indication. Errors: None. See also: StrToTimeDef (1580), StrToDateDef (1574), TryStrToDateTime (1590), StrToDateTime (1574)
1575
38.13.217
StrToFloat
Synopsis: Convert a string to a oating-point value. Declaration: function StrToFloat(const S: string) : Extended function StrToFloat(const S: string; const FormatSettings: TFormatSettings) : Extended Visibility: default Description: StrToFloat converts the string S to a oating point value. S should contain a valid string representation of a oating point value (either in decimal or scientic notation). The thousandseparator character may however not be used. Up to and including version 2.2.2 of the compiler, if the string contains a decimal value, then the decimal separator character can either be a . or the value of the DecimalSeparator variable. As of version 2.3.1, the string may contain only the DecimalSeparator character. The dot (.) can no longer be used instead of the DecimalSeparator. Errors: If the string S doesnt contain a valid oating point string, then an exception will be raised. See also: TextToFloat (1582), FloatToStr (1522), FormatFloat (1536), StrToInt (1577) Listing: ./sysutex/ex90.pp
Program Example90 ; { T h i s program demonstrates t h e S t r T o F l o a t f u n c t i o n } { $mode o b j f p c } { $h + } Uses S y s U t i l s ; Const NrValues = 5 ; T e s t S t r : Array [ 1 . . NrValues ] of s t r i n g = ( 1 ,1 , 0,2 , 1 ,2E4 , 0 , 1E4 ) ; Procedure T e s t i t ; Var I : Integer ; E : Extended ; begin W r i t e l n ( Using DecimalSeparator : , DecimalSeparator ) ; For I : = 1 to NrValues do begin Writeln ( Converting : , TestStr [ i ] ) ; Try E: = StrToFloat ( T e s t S t r [ i ] ) ; W r i t e l n ( Converted v a l u e : ,E ) ; except On E : E x c e p t i o n do W r i t e l n ( E x c e p t i o n when c o n v e r t i n g : ,E . Message ) ; end ; end ; end ; Begin
1576
38.13.218
StrToFloatDef
Synopsis: Convert a string to a oat, with a default value. Declaration: function StrToFloatDef(const S: string;const Default: Extended) : Extended function StrToFloatDef(const S: string;const Default: Extended; const FormatSettings: TFormatSettings) : Extended Visibility: default Description: StrToFloatDef tries to convert the string S to a oating point value, and returns this value. If the conversion fails for some reason, the value Default is returned instead. Errors: None. On error, the Default value is returned.
38.13.219
StrToInt
Synopsis: Convert a string to an integer value. Declaration: function StrToInt(const s: string) : Integer Visibility: default Description: StrToInt will convert the string Sto an integer. If the string contains invalid characters or has an invalid format, then an EConvertError is raised. To be successfully converted, a string can contain a combination of numerical characters, possibly preceded by a minus sign (-). Spaces are not allowed. Errors: In case of error, an EConvertError is raised. See also: IntToStr (1547), StrToIntDef (1578) Listing: ./sysutex/ex82.pp
Program Example82 ; { $mode o b j f p c } { T h i s program demonstrates t h e S t r T o I n t f u n c t i o n } Uses s y s u t i l s ; Begin W r i t e l n ( S t r T o I n t ( 1234 ) ) ; W r i t e l n ( S t r T o I n t ( 1234 ) ) ; Writeln ( StrToInt ( 0 ) ) ; Try W r i t e l n ( S t r T o I n t ( 12345678901234567890 ) ) ; except On E : E C on v e rt E rr o r do
1577
38.13.220
StrToInt64
Synopsis: Convert a string to an Int64 value. Declaration: function StrToInt64(const s: string) : Int64 Visibility: default Description: StrToInt64 converts the string S to a Int64 value, and returns this value. The string can only contain numerical characters, and optionally a minus sign as the rst character. Whitespace is not allowed. Hexadecimal values (starting with the $ character) are supported. Errors: On error, a EConvertError (1597) exception is raised. See also: TryStrToInt64 (1591), StrToInt64Def (1578), StrToInt (1577), TryStrToInt (1591), StrToIntDef (1578)
38.13.221
StrToInt64Def
Synopsis: Convert a string to an Int64 value, with a default value Declaration: function StrToInt64Def(const S: string;Default: Int64) : Int64 Visibility: default Description: StrToInt64Def tries to convert the string S to a Int64 value, and returns this value. If the conversion fails for some reason, the value Default is returned instead. Errors: None. On error, the Default value is returned. See also: StrToInt64 (1578), TryStrToInt64 (1591), StrToInt (1577), TryStrToInt (1591), StrToIntDef (1578)
38.13.222
StrToIntDef
Synopsis: Convert a string to an integer value, with a default value. Declaration: function StrToIntDef(const S: string;Default: Integer) : Integer Visibility: default Description: StrToIntDef will convert a string to an integer. If the string contains invalid characters or has an invalid format, then Default is returned. To be successfully converted, a string can contain a combination of numerical characters, possibly preceded by a minus sign (-). Spaces are not allowed. Errors: None. See also: IntToStr (1547), StrToInt (1577) Listing: ./sysutex/ex83.pp
1578
Program Example82 ; { $mode o b j f p c } { T h i s program demonstrates t h e S t r T o I n t f u n c t i o n } Uses s y s u t i l s ; Begin W r i t e l n ( StrToIntDef ( 1234 , 0 ) ) ; W r i t e l n ( StrToIntDef ( 1234 , 0 ) ) ; W r i t e l n ( StrToIntDef ( 0 , 0 ) ) ; Try W r i t e l n ( StrToIntDef ( 12345678901234567890 , 0 ) ) ; except On E : E C on v e rt E rr o r do W r i t e l n ( I n v a l i d number encountered ) ; end ; End .
38.13.223
StrToQWord
Synopsis: Convert a string to a QWord. Declaration: function StrToQWord(const s: string) : QWord Visibility: default Description: TryStrToQWord converts the string S to a valid QWord (unsigned 64-bit) value, and returns the result. Errors: If the string S does not contain a valid QWord value, a EConvertError (1597) exception is raised. See also: TryStrToQWord (1591), StrToQWordDef (1579), StrToInt64 (1578), StrToInt (1577)
38.13.224
StrToQWordDef
Synopsis: Try to convert a string to a QWord, returning a default value in case of failure. Declaration: function StrToQWordDef(const S: string;Default: QWord) : QWord Visibility: default Description: StrToQWordDef tries to convert the string S to a valid QWord (unsigned 64-bit) value, and returns the result. If the conversion fails, the function returns the value passed in Def. See also: StrToQWord (1579), TryStrToQWord (1591), StrToInt64Def (1578), StrToIntDef (1578)
38.13.225
Declaration: function function function function
StrToTime
StrToTime(const StrToTime(const StrToTime(const StrToTime(const S: S: S: S: Shortstring) : TDateTime Ansistring) : TDateTime ShortString;separator: Char) : TDateTime AnsiString;separator: Char) : TDateTime 1579
function StrToTime(const S: string;FormatSettings: TFormatSettings) : TDateTime function StrToTime(const S: PChar;Len: Integer;separator: Char) : TDateTime Visibility: default Description: StrToTime converts the string S to a TDateTime time value. The time must consist of 1 to 4 digits, separated by the TimeSeparator character. If two numbers are given, they are supposed to form the hour and minutes. Errors: On error (e.g. an invalid date or invalid character), an EConvertError exception is raised. See also: StrToDate (1573), StrToDateTime (1574), TimeToStr (1585) Listing: ./sysutex/ex21.pp
Program Example21 ; { T h i s program demonstrates t h e StrToTime f u n c t i o n } Uses s y s u t i l s ; Procedure T e s t S t r ( S : S t r i n g ) ; begin Writeln ( S, : end ; Begin teststr teststr teststr teststr End .
, TimeToStr ( StrToTime (S ) ) ) ;
38.13.226
StrToTimeDef
Synopsis: Convert string to time, returning a default value Declaration: function StrToTimeDef(const S: ShortString;const Defvalue: TDateTime) : TDateTime function StrToTimeDef(const S: ShortString;const Defvalue: TDateTime; separator: Char) : TDateTime function StrToTimeDef(const S: AnsiString;const Defvalue: TDateTime) : TDateTime function StrToTimeDef(const S: AnsiString;const Defvalue: TDateTime; separator: Char) : TDateTime Visibility: default Description: StrToTimeDef tries to convert the string S to a valid TDateTime time value, and returns DefValue if S does not contain a valid time indication. Errors: None. See also: StrToTime (1579), TryStrToTime (1591), StrToDateDef (1574)
1580
38.13.227
strupper
Synopsis: Convert null-terminated string to all-uppercase Declaration: function strupper(p: PChar) : PChar Visibility: default Description: Converts P to an all-uppercase string. Returns P. For an example, see StrLower (1568) Errors: None. See also: StrLower (1568)
38.13.228
Supports
Synopsis: Check whether a class or given interface supports an interface Declaration: function Supports(const Instance: IInterface;const AClass: TClass; out Obj) : Boolean; Overload function Supports(const Instance: IInterface;const IID: TGuid;out Intf) : Boolean; Overload function Supports(const Instance: TObject;const IID: TGuid;out Intf) : Boolean; Overload function Supports(const Instance: TObject;const IID: Shortstring; out Intf) : Boolean; Overload function Supports(const Instance: IInterface;const AClass: TClass) : Boolean; Overload function Supports(const Instance: IInterface;const IID: TGuid) : Boolean ; Overload function Supports(const Instance: TObject;const IID: TGuid) : Boolean ; Overload function Supports(const Instance: TObject;const IID: Shortstring) : Boolean; Overload function Supports(const AClass: TClass;const IID: TGuid) : Boolean ; Overload function Supports(const AClass: TClass;const IID: Shortstring) : Boolean ; Overload Visibility: default Description: Supports checks whether Instance supports the interface identied by IID. It returns True if it is supported, False. Optionally, a pointer to the interface is returned to Intf. Errors: None. See also: StringToGUID (1564)
38.13.229
SysErrorMessage
Synopsis: Format a system error message. Declaration: function SysErrorMessage(ErrorCode: Integer) : string Visibility: default Description: SysErrorMessage returns a string that describes the operating system error code ErrorCode. 1581
Errors: This routine may not be implemented on all platforms. See also: EOSError (1600)
38.13.230
SystemTimeToDateTime
Synopsis: Convert a system time to a TDateTime value. Declaration: function SystemTimeToDateTime(const SystemTime: TSystemTime) : TDateTime Visibility: default Description: SystemTimeToDateTime converts a TSystemTime record to a TDateTime style date/time indication. Errors: None. See also: DateTimeToSystemTime (1495) Listing: ./sysutex/ex22.pp
Program Example22 ; { T h i s program demonstrates t h e SystemTimeToDateTime f u n c t i o n } Uses s y s u t i l s ; Var ST : TSystemTime ; Begin DateTimeToSystemTime (Now, ST ) ; With St do begin W r i t e l n ( Today i s , year , / , month , / , Day ) ; W r i t e l n ( The t i m e i s , Hour , : , minute , : , Second , . , M i l l i S e c o n d ) ; end ; W r i t e l n ( Converted : , DateTimeToStr ( SystemTimeToDateTime ( ST ) ) ) ; End .
38.13.231
TextToFloat
Synopsis: Convert a buffer to a oat value. Declaration: function TextToFloat(Buffer: PChar;out Value: Extended) : Boolean function TextToFloat(Buffer: PChar;out Value: Extended; const FormatSettings: TFormatSettings) : Boolean function TextToFloat(Buffer: PChar;out Value;ValueType: TFloatValue) : Boolean function TextToFloat(Buffer: PChar;out Value;ValueType: TFloatValue; const FormatSettings: TFormatSettings) : Boolean Visibility: default Description: TextToFloat converts the string in Buffer to a oating point value. Buffer should contain a valid stroing representation of a oating point value (either in decimal or scientic notation). If the buffer contains a decimal value, then the decimal separator character can either be a . or the value of the DecimalSeparator variable. The function returns True if the conversion was successful. 1582
Errors: If there is an invalid character in the buffer, then the function returns False See also: StrToFloat (1576), FloatToStr (1522), FormatFloat (1536) Listing: ./sysutex/ex91.pp
Program Example91 ; { T h i s program demonstrates t h e T e x t T o F l o a t f u n c t i o n } { $mode o b j f p c } { $h + } Uses S y s U t i l s ; Const NrValues = 5 ; T e s t S t r : Array [ 1 . . NrValues ] of pchar = ( 1 ,1 , 0,2 , 1 ,2E4 , 0 , 1E4 ) ; Procedure T e s t i t ; Var I : Integer ; E : Extended ; begin W r i t e l n ( Using DecimalSeparator : , DecimalSeparator ) ; For I : = 1 to NrValues do begin Writeln ( Converting : , TestStr [ i ] ) ; I f TextToFloat ( T e s t S t r [ i ] , E ) then W r i t e l n ( Converted v a l u e : ,E) else W r i t e l n ( Unable t o c o n v e r t v a l u e . ) ; end ; end ; Begin DecimalSeparator : = , ; Testit ; DecimalSeparator : = . ; Testit ; End .
38.13.232
Time
Synopsis: Returns the current time. Declaration: function Time : TDateTime Visibility: default Description: Time returns the current time in TDateTime format. The date part of the TDateTimeValue is set to zero. Errors: None. See also: Now (1552), Date (1492) 1583
Listing: ./sysutex/ex23.pp
Program Example23 ; { T h i s program demonstrates t h e Time f u n c t i o n } Uses s y s u t i l s ; Begin W r i t e l n ( The t i m e i s : End .
, TimeToStr ( Time ) ) ;
38.13.233
TimeStampToDateTime
Synopsis: Convert a TimeStamp value to a TDateTime value. Declaration: function TimeStampToDateTime(const TimeStamp: TTimeStamp) : TDateTime Visibility: default Description: TimeStampToDateTime converts TimeStamp to a TDateTime format variable. It is the inverse operation of DateTimeToTimeStamp (1496). Errors: None. See also: DateTimeToTimeStamp (1496), TimeStampToMSecs (1584) Listing: ./sysutex/ex24.pp
Program Example24 ; { T h i s program demonstrates t h e TimeStampToDateTime f u n c t i o n } Uses s y s u t i l s ; Var TS : TTimeStamp ; DT : TDateTime ; Begin TS: = DateTimeToTimeStamp ( Now ) ; With TS do begin W r i t e l n ( Now i s , time , m i l l i s e c o n d p a s t m i d n i g h t ) ; W r i t e l n ( Today i s , Date , days p a s t 1 / 1 / 0 0 0 1 ) ; end ; DT: = TimeStampToDateTime ( TS ) ; W r i t e l n ( Together t h i s i s : , DateTimeToStr (DT ) ) ; End .
38.13.234
TimeStampToMSecs
Synopsis: Converts a timestamp to a number of milliseconds. Declaration: function TimeStampToMSecs(const TimeStamp: TTimeStamp) : comp Visibility: default
1584
Description: TimeStampToMSecs converts TimeStamp to the number of seconds since 1/1/0001. Use TTimeStamp variables if you need to keep very precise track of time. For an example, see MSecsToTimeStamp (1551). Errors: None. See also: MSecsToTimeStamp (1551), TimeStampToDateTime (1584)
38.13.235
TimeToStr
Synopsis: Convert a TDateTime time to a string using a predened format. Declaration: function TimeToStr(Time: TDateTime) : string function TimeToStr(Time: TDateTime; const FormatSettings: TFormatSettings) : string Visibility: default Description: TimeToStr converts the time in Time to a string. It uses the LongTimeFormat variable to see what formatting needs to be applied. It is therefor entirely equivalent to a FormatDateTime(tt,Time) call. Errors: None. Listing: ./sysutex/ex25.pp
Program Example25 ; { T h i s program demonstrates t h e TimeToStr f u n c t i o n } Uses s y s u t i l s ; Begin W r i t e l n ( The c u r r e n t t i m e i s : End .
, TimeToStr ( Time ) ) ;
38.13.236
Trim
Synopsis: Trim whitespace from the ends of a string. Declaration: function Trim(const S: string) : string function Trim(const S: widestring) : widestring Visibility: default Description: Trim strips blank characters (spaces) at the beginning and end of S and returns the resulting string. Only #32 characters are stripped. If the string contains only spaces, an empty string is returned. Errors: None. See also: TrimLeft (1586), TrimRight (1587) Listing: ./sysutex/ex84.pp
1585
Program Example84 ; { T h i s program demonstrates t h e Trim f u n c t i o n } Uses s y s u t i l s ; { $H+ } Procedure T e s t i t ( S : S t r i n g ) ; begin W r i t e l n ( " , Trim (S ) , " ) ; end ; Begin T e s t i t ( ha ha what g e t s l o s t ? ) ; T e s t i t (#10#13 haha ) ; Testit ( ); End .
38.13.237
TrimLeft
Synopsis: Trim whitespace from the beginning of a string. Declaration: function TrimLeft(const S: string) : string function TrimLeft(const S: widestring) : widestring Visibility: default Description: TrimLeft strips blank characters (spaces) at the beginning of S and returns the resulting string. Only #32 characters are stripped. If the string contains only spaces, an empty string is returned. Errors: None. See also: Trim (1585), TrimRight (1587) Listing: ./sysutex/ex85.pp
Program Example85 ; { T h i s program demonstrates t h e T r i m L e f t f u n c t i o n } Uses s y s u t i l s ; { $H+ } Procedure T e s t i t ( S : S t r i n g ) ; begin W r i t e l n ( " , T r i m L e f t (S ) , " ) ; end ; Begin T e s t i t ( ha ha what g e t s l o s t ? ) ; T e s t i t (#10#13 haha ) ; Testit ( ); End .
1586
38.13.238
TrimRight
Synopsis: Trim whitespace from the end of a string. Declaration: function TrimRight(const S: string) : string function TrimRight(const S: widestring) : widestring Visibility: default Description: Trim strips blank characters (spaces) at the end of S and returns the resulting string. Only #32 characters are stripped. If the string contains only spaces, an empty string is returned. Errors: None. See also: Trim (1585), TrimLeft (1586) Listing: ./sysutex/ex86.pp
Program Example86 ; { T h i s program demonstrates t h e T r i m R i g h t f u n c t i o n } Uses s y s u t i l s ; { $H+ } Procedure T e s t i t ( S : S t r i n g ) ; begin W r i t e l n ( " , T r i m R i g h t (S ) , " ) ; end ; Begin T e s t i t ( ha ha what g e t s l o s t ? ) ; T e s t i t (#10#13 haha ) ; Testit ( ); End .
38.13.239
TryEncodeDate
Synopsis: Try to encode a date, and indicate success. Declaration: function TryEncodeDate(Year: Word;Month: Word;Day: Word; out Date: TDateTime) : Boolean Visibility: default Description: TryEncodeDate will check the validity of the Year, Month and Day arguments, and if they are all valid, then they will be encoded as a TDateTime value and returned in Date. The function will return True in this case. If an invalid argument is passed, then False will be returned. Errors: None. If an error occurs during the encoding, False is returned. See also: EncodeDate (1502), DecodeDateFully (1498), DecodeDate (1497), TryEncodeTime (1588)
1587
38.13.240
TryEncodeTime
Synopsis: Try to encode a time, and indicate success. Declaration: function TryEncodeTime(Hour: Word;Min: Word;Sec: Word;MSec: Word; out Time: TDateTime) : Boolean Visibility: default Description: TryEncodeTime will check the validity of the Hour, Min, Sec and MSec arguments, and will encode them in a TDateTime value which is returned in Time. If the arguments are valid, then True is returned, otherwise False is returned. Errors: None. If an error occurs during the encoding, False is returned. See also: EncodeTime (1502), DecodeTime (1498), TryEncodeDate (1587)
38.13.241
TryFloatToCurr
Synopsis: Try to convert a oat value to a currency value and report on success. Declaration: function TryFloatToCurr(const Value: Extended;var AResult: Currency) : Boolean Visibility: default Description: TryFloatToCurr tries convert the Value oating point value to a Currency value. If successful, the function returns True and the resulting currency value is returned in AResult. It checks whether Value is in the valid range of currencies (determined by MinCurrency (1453) and MaxCurrency (1453)). If not, False is returned. Errors: If Value is out of range, False is returned. See also: FloatToCurr (1521), MinCurrency (1453), MaxCurrency (1453)
38.13.242
TryStringToGUID
Synopsis: Try to transform a string to a GUID Declaration: function TryStringToGUID(const S: string;out Guid: TGuid) : Boolean Visibility: default Description: TryStringToGUID tries to convert the string S to a TGUID value, returned in GUID. It returns True if the conversion succeeds, and False if the string S does not contain a valid GUID notation. The string S must be 38 characters long, must start with { and end on }, and contain a valid GUID string (hex number grouped using 8-4-4-4-12 digits). Errors: In case S does not contain a valid GUID number, False is returned. See also: StringToGUID (1564)
1588
38.13.243
TryStrToBool
Synopsis: Try to convert a string to a boolean value Declaration: function TryStrToBool(const S: string;out Value: Boolean) : Boolean Visibility: default Description: TryStrToBool tries to convert the string S to a boolean value, and returns this value in Value. In this case, the function returns True. If S does not contain a valid boolean string, the function returns False, and the contents of Value is indetermined. Valid boolean string constants are in the FalseBoolStrs (1465) (for False values) and TrueBoolStrs (1468) (for True values) variables. See also: StrToBool (1572), StrToBoolDef (1572)
38.13.244
TryStrToCurr
Synopsis: Try to convert a string to a currency Declaration: function TryStrToCurr(const S: string;out Value: Currency) : Boolean function TryStrToCurr(const S: string;out Value: Currency; const FormatSettings: TFormatSettings) : Boolean Visibility: default Description: TryStrToCurr converts the string S to a currency value and returns the value in Value. The function returns True if it was successful, False if not. This is contrary to StrToCurr (1573), which raises an exception when the conversion fails. The function takes into account locale information. See also: StrToCurr (1573), TextToFloat (1582)
38.13.245
TryStrToDate
Synopsis: Try to convert a string with a date indication to a TDateTime value Declaration: function TryStrToDate(const S: ShortString;out Value: TDateTime) : Boolean function TryStrToDate(const S: AnsiString;out Value: TDateTime) : Boolean function TryStrToDate(const S: ShortString;out Value: TDateTime; separator: Char) : Boolean function TryStrToDate(const S: AnsiString;out Value: TDateTime; separator: Char) : Boolean function TryStrToDate(const S: ShortString;out Value: TDateTime; const useformat: string;separator: Char) : Boolean function TryStrToDate(const S: AnsiString;out Value: TDateTime; const useformat: string;separator: Char) : Boolean function TryStrToDate(const S: string;out Value: TDateTime; const FormatSettings: TFormatSettings) : Boolean Visibility: default
1589
Description: TryStrToDate tries to convert the string S to a TDateTime date value, and stores the date in Value. The Date must consist of 1 to three digits, separated by the DateSeparator 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 not supported in Delphi) The order of the digits (y/m/d, m/d/y, d/m/y) is determined from the ShortDateFormat variable. The function returns True if the string contained a valid date indication, False otherwise. See also: StrToDate (1573), StrToTime (1579), TryStrToTime (1591), TryStrToDateTime (1590), DateToStr (1496), TimeToStr (1585)
38.13.246
TryStrToDateTime
Synopsis: Try to convert a string with date/time indication to a TDateTime value Declaration: function TryStrToDateTime(const S: ShortString;out Value: TDateTime) : Boolean function TryStrToDateTime(const S: AnsiString;out Value: TDateTime) : Boolean function TryStrToDateTime(const S: string;out Value: TDateTime; const FormatSettings: TFormatSettings) : Boolean Visibility: default Description: TryStrToDateTime tries to convert the string S to a TDateTime date and time value, and stores the result in Value. The date must consist of 1 to three digits, separated by the DateSeparator 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 not supported in Delphi). The time must consist of 1 to 4 digits, separated by the TimeSeparator character. If two numbers are given, they are supposed to form the hour and minutes. The function returns True if the string contained a valid date and time indication, False otherwise. See also: TryStrToDate (1589), TryStrToTime (1591), StrToDateTime (1574), StrToTime (1579), DateToStr (1496), TimeToStr (1585)
38.13.247
TryStrToFloat
Synopsis: Try to convert a string to a oat. Declaration: function TryStrToFloat(const S: string;out Value: Single) : Boolean function TryStrToFloat(const S: string;out Value: Single; const FormatSettings: TFormatSettings) : Boolean function TryStrToFloat(const S: string;out Value: Double) : Boolean function TryStrToFloat(const S: string;out Value: Double; const FormatSettings: TFormatSettings) : Boolean Visibility: default Description: TryStrToFloat tries to convert the string S to a oating point value, and stores the result in Value. It returns True if the operation was succesful, and False if it failed. This operation takes into account the system settings for oating point representations. Errors: On error, False is returned. See also: StrToFloat (1576) 1590
38.13.248
TryStrToInt
Synopsis: Try to convert a string to an integer, and report on success. Declaration: function TryStrToInt(const s: string;out i: Integer) : Boolean Visibility: default Description: TryStrToInt tries to convert the string S to an integer, and returns True if this was succesful. In that case the converted integer is returned in I. If the conversion failed, (an invalid string, or the value is out of range) then False is returned. Errors: None. On error, False is returned. See also: StrToInt (1577), TryStrToInt64 (1591), StrToIntDef (1578), StrToInt64 (1578), StrToInt64Def (1578)
38.13.249
TryStrToInt64
Synopsis: Try to convert a string to an int64 value, and report on success. Declaration: function TryStrToInt64(const s: string;out i: Int64) : Boolean Visibility: default Description: TryStrToInt64 tries to convert the string S to a Int64 value, and returns this value in I if successful. If the conversion was succesful, the function result is True, or False otherwise. The string can only contain numerical characters, and optionally a minus sign as the rst character. Whitespace is not allowed. Hexadecimal values (starting with the $ character) are supported. Errors: None. On error, False is returned. See also: StrToInt64 (1578), StrToInt64Def (1578), StrToInt (1577), TryStrToInt (1591), StrToIntDef (1578)
38.13.250
TryStrToQWord
Synopsis: Try to convert a string to a QWord value, and report on success Declaration: function TryStrToQWord(const s: string;out Q: QWord) : Boolean Visibility: default Description: TryStrToQWord tries to convert the string S to a valid QWord (unsigned 64-bit) value, and stores the result in I. If the conversion fails, the function returns False, else it returns True. See also: StrToQWord (1579), StrToQWordDef (1579), TryStrToInt64 (1591), TryStrToInt (1591)
38.13.251
TryStrToTime
Synopsis: Try to convert a string with a time indication to a TDateTime value Declaration: function TryStrToTime(const S: ShortString;out Value: TDateTime) : Boolean function TryStrToTime(const S: AnsiString;out Value: TDateTime) : Boolean function TryStrToTime(const S: ShortString;out Value: TDateTime; separator: Char) : Boolean function TryStrToTime(const S: AnsiString;out Value: TDateTime; 1591
separator: Char) : Boolean function TryStrToTime(const S: string;out Value: TDateTime; const FormatSettings: TFormatSettings) : Boolean Visibility: default Description: TryStrToTime tries to convert the string S to a TDateTime time value, and stores the result in Value. The time must consist of 1 to 4 digits, separated by the TimeSeparator character. If two numbers are given, they are supposed to form the hour and minutes. The function returns True if the string contained a valid time indication, False otherwise. See also: TryStrToDate (1589), TryStrToDateTime (1590), StrToDate (1573), StrToTime (1579), DateToStr (1496), TimeToStr (1585)
38.13.252
UnhookSignal
Synopsis: UnHook a specied signal Declaration: procedure UnhookSignal(RtlSigNum: Integer;OnlyIfHooked: Boolean) Visibility: default Description: UnHookSignal de-installs the RTL default signal handler for signal RtlSigNum. If OnlyIfHooked is True then UnhookSignal will rst check if the signal was hooked by the RTL routines, and has not been overridden since.
38.13.253
UpperCase
Synopsis: Return an uppercase version of a string. Declaration: function UpperCase(const s: string) : string Visibility: default Description: UpperCase returns the uppercase equivalent of S. Ansi characters are not taken into account, only ASCII codes below 127 are converted. It is completely equivalent to the UpCase function of the system unit, and is provided for compatiibility only. Errors: None. See also: AnsiLowerCase (1474), LowerCase (1550), AnsiUpperCase (1482) Listing: ./sysutex/ex87.pp
Program Example87 ; { T h i s program demonstrates t h e UpperCase f u n c t i o n } Uses s y s u t i l s ; Begin W r i t e l n ( UpperCase ( t h i s w i l l come OUT ALL uPpErCaSe ! ) ) ; End .
1592
38.13.254
VendorName
Synopsis: Return Application vendor Name Declaration: function VendorName : string Visibility: default Description: VendorName returns the application vendor name. In order to set the application vendor name, the OnGetVendorName (1467) event must be set, and an appropriate return value must be returned. The Vendor name is used in GetAppCongDir (1538) and GetAppCongFile (1538) to determine the conguration directory. Errors: If OnGetVendorName (1467) is not set, an empty string is returned. See also: OnGetVendorName (1467), GetAppCongDir (1538), GetAppCongFile (1538)
38.13.255
WideCompareStr
Synopsis: Compare two widestrings (case sensitive) Declaration: function WideCompareStr(const s1: WideString;const s2: WideString) : PtrInt Visibility: default Description: WideCompareStr compares two widestrings and returns the following result: < 0if S1<S2. 0if S1=S2. > 0if S1>S2. The comparision takes into account wide characters, i.e. it takes care of strange accented characters. Contrary to WideCompareText (1593), the comparision is case sensitive. Errors: None. See also: WideCompareText (1593), WideSameStr (1595), WideSameText (1595)
38.13.256
WideCompareText
Synopsis: Compare two widestrings (ignoring case). Declaration: function WideCompareText(const s1: WideString;const s2: WideString) : PtrInt Visibility: default Description: WideCompareStr compares two widestrings and returns the following result: < 0if S1<S2. 0if S1=S2. > 0if S1>S2. The comparision takes into account wide characters, i.e. it takes care of strange accented characters. Contrary to WideCompareStr (1593), the comparision is case insensitive. Errors: None. See also: WideCompareStr (1593), WideSameStr (1595), WideSameText (1595) 1593
38.13.257
WideFmtStr
Synopsis: Widestring format Declaration: procedure WideFmtStr(var Res: WideString;const Fmt: WideString; const args: Array of const) procedure WideFmtStr(var Res: WideString;const Fmt: WideString; const args: Array of const; const FormatSettings: TFormatSettings) Visibility: default Description: WideFmtStr formats Args according to the format string in Fmt and returns the resulting string in Res. See also: WideFormat (1594), WideFormatBuf (1594), Format (1528)
38.13.258
WideFormat
Synopsis: Format a wide string. Declaration: function WideFormat(const Fmt: WideString;const Args: Array of const) : WideString function WideFormat(const Fmt: WideString;const Args: Array of const; const FormatSettings: TFormatSettings) : WideString Visibility: default Description: WideFormat does the same as Format (1528) but accepts as a formatting string a WideString. The resulting string is also a WideString. For more information about the used formatting characters, see the Format (1528) string. See also: Format (1528)
38.13.259
WideFormatBuf
Synopsis: Format widestring in a buffer. Declaration: function WideFormatBuf(var Buffer;BufLen: Cardinal;const Fmt; fmtLen: Cardinal;const Args: Array of const) : Cardinal function WideFormatBuf(var Buffer;BufLen: Cardinal;const Fmt; fmtLen: Cardinal;const Args: Array of const; const FormatSettings: TFormatSettings) : Cardinal Visibility: default Description: WideFormatBuf calls simply WideFormat (1594) with Fmt (with length FmtLen bytes) and stores maximum BufLen bytes in the buffer buf. It returns the number of copied bytes. See also: WideFmtStr (1594), WideFormat (1594), Format (1528), FormatBuf (1534)
1594
38.13.260
WideLowerCase
Synopsis: Change a widestring to all-lowercase. Declaration: function WideLowerCase(const s: WideString) : WideString Visibility: default Description: WideLowerCase converts the string S to lowercase 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. Remark: On Unix-like platforms, a widestring manager must be installed for this function to work correctly. Errors: None. See also: WideUpperCase (1595)
38.13.261
WideSameStr
Synopsis: Check whether two widestrings are the same (case sensitive) Declaration: function WideSameStr(const s1: WideString;const s2: WideString) : Boolean Visibility: default Description: WideSameStr returns True if WideCompareStr (1593) returns 0 (zero), i.e. when S1 and S2 are the same string (taking into account case). See also: WideSameText (1595), WideCompareStr (1593), WideCompareText (1593), AnsiSameStr (1476)
38.13.262
WideSameText
Synopsis: Check whether two widestrings are the same (ignoring case) Declaration: function WideSameText(const s1: WideString;const s2: WideString) : Boolean Visibility: default Description: WideSameText returns True if WideCompareText (1593) returns 0 (zero), i.e. when S1 and S2 are the same string (taking into account case). See also: WideSameStr (1595), WideCompareStr (1593), WideCompareText (1593), AnsiSameText (1476)
38.13.263
WideUpperCase
Synopsis: Change a widestring to all-lowercase. Declaration: function WideUpperCase(const s: WideString) : WideString Visibility: default Description: WideUpperCase converts the string S 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. Remark: On Unix-like platforms, a widestring manager must be installed for this function to work correctly. Errors: None. See also: WideLowerCase (1595) 1595
38.13.264
WrapText
Synopsis: Word-wrap a text. Declaration: function WrapText(const Line: string;const BreakStr: string; const BreakChars: TSysCharSet;MaxCol: Integer) : string function WrapText(const Line: string;MaxCol: Integer) : string Visibility: default Description: WrapText does a wordwrap at column MaxCol of the string in Line. It breaks the string only at characters which are in BreakChars (default whitespace and hyphen) and inserts then the string BreakStr (default the lineending character for the current OS). See also: StringReplace (1564)
38.14
38.14.1
EAbort
Description
Abort is raised by the Abort (1469) 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. See also: Abort (1469)
38.15
38.15.1
EAbstractError
Description
EAbstractError is raised when an abstract error occurs, i.e. when an unimplemented abstract method is called.
38.16
38.16.1
EAccessViolation
Description
EAccessViolation is raised when the OS reports an Access Violation, i.e. when invalid memory is accessed.
38.17
38.17.1
EAssertionFailed
Description
EAssertionFailed is raised when an application that is compiled with assertions, encounters an invalid assertion.
38.18
38.18.1
EBusError
Description
38.19
38.19.1
EControlC
Description
EControlC is raised when the user has pressed CTRL-C in a console application.
38.20
38.20.1
EConvertError
Description
EConvertError is raised by the various conversion routines in the SysUtils unit. The message will contain more specic error information.
38.21
38.21.1
EDivByZero
Description
EDivByZero is used when the operating system or CPU signals a division by zero error.
38.22
38.22.1
EExternal
Description
EExternal 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 SysUtils unit converts all operating system errors to descendents of EExternal. See also: EInterror (1598), EExternal (1597), EMathError (1599), EExternalException (1597), EAccessViolation (1596), EPrivilege (1601), EStackOverow (1601), EControlC (1597)
38.23
38.23.1
EExternalException
Description
EExternalException is raised when an external routine raises an exception. See also: EExternal (1597)
38.24
38.24.1
EFormatError
Description
EformatError is raised in case of an error in one of the various Format (1528) functions. See also: Format (1528)
1597
38.25
38.25.1
EHeapMemoryError
Description
EHeapMemoryError is raised when an error occurs in heap (dynamically allocated) memory. See also: EHeapException (1457), EoutOfMemory (1600), EInvalidPointer (1599)
38.25.2
Page 1598
Method overview
Description Free the exception instance
Property FreeInstance
38.25.3
EHeapMemoryError.FreeInstance
Override
Synopsis: Free the exception instance Declaration: procedure FreeInstance; Visibility: public Description: FreeInstance checks whether the exception instance may be freed prior to calling the inherited FreeInstance. The exception is only freed in case of normal program shutdown, if a heap error occured, the exception instance is not freed.
38.26
38.26.1
EInOutError
Description
EInOutError is raised when a IO routine of Free Pascal returns an error. The error is converted to an EInOutError only if the input/output checking feature of FPC is turned on. The error code of the input/output operation is returned in ErrorCode (1). See also: EInOutError.ErrorCode (1)
38.27
38.27.1
EInterror
Description
EInterror is used when the operating system or CPU signals an integer operation error, e.g., an overow.
38.28
38.28.1
EIntfCastError
Description
EIntfCastError is raised when an invalid interface cast is encountered. See also: EInvalidCast (1599)
1598
38.29
38.29.1
EIntOverow
Description
EIntOverflow is used when the operating system or CPU signals a integer overow error. See also: EIntError (1598), EDivByZero (1597), ERangeError (1601)
38.30
38.30.1
EInvalidCast
Description
EInvalidCast is raised when an invalid typecast error (using the as operator) is encountered. See also: EIntfCastError (1598)
38.31
38.31.1
EInvalidContainer
Description
EInvalidContainer is not yet used by Free Pascal, and is provided for Delphi compatibility only.
38.32
38.32.1
EInvalidInsert
Description
EInvalidInsert is not yet used by Free Pascal, and is provided for Delphi compatibility only.
38.33
38.33.1
EInvalidOp
Description
38.34
38.34.1
EInvalidPointer
Description
EInvalidPointer is raised when an invalid heap pointer is used. See also: EHeapException (1457), EHeapMemoryError (1598), EOutOfMemory (1600)
38.35
38.35.1
EMathError
Description
EMathError is used when the operating system or CPU signals a oating point overow error. 1599
See also: EIntError (1598), EIntOverow (1599), EDivByZero (1597), ERangeError (1601)
38.36
38.36.1
ENoThreadSupport
Description
ENoThreadSupport is raised when some thread routines are invoked, and thread support was not enabled when the program was compiled.
38.37
38.37.1
ENotImplemented
Description
ENotImplemented can be used to raise an exception when a particular call had been dened, but was not implemented.
38.38
38.38.1
ENoWideStringSupport
Description
ENoWideStringSupport is the exception raised when a run-time 233 occurs, i.e. when widestring routines are called and the application does not contain widestring support.
38.39
38.39.1
EOSError
Description
EOSError is raised when some Operating System call fails. The ErrorCode (1) property contains the operating system error code. See also: EOSError.ErrorCode (1)
38.40
38.40.1
EOutOfMemory
Description
EOutOfMemory occurs when memory can no longer be allocated on the heap. An instance of EOutOfMemory is allocated on the heap at program startup, so it is available when needed. See also: EHeapException (1457), EHeapMemoryError (1598), EInvalidPointer (1599)
38.41
38.41.1
EOverow
Description
EOverflow occurs when a oat operation overows. (i.e. result is too big to represent). See also: EIntError (1598), EIntOverow (1599), EDivByZero (1597), ERangeError (1601), EUnderFlow (1602) 1600
38.42
38.42.1
EPackageError
Description
EPackageError is not yet used by Free Pascal, and is provided for Delphi compatibility only.
38.43
38.43.1
EPrivilege
Description
EPrivilege is raised when the OS reports that an invalid instruction was executed.
38.44
38.44.1
EPropReadOnly
Description
38.45
38.45.1
EPropWriteOnly
Description
EPropWriteOnly is raised when an attempt is made to read from a write-only property. See also: EPropReadOnly (1601)
38.46
38.46.1
ERangeError
Description
ERangeError is raised by the Free Pascal runtime library if range checking is on, and a range check error occurs. See also: EIntError (1598), EDivByZero (1597), EIntOverow (1599)
38.47
38.47.1
ESafecallException
Description
ESafecallException is not yet used by Free Pascal, and is provided for Delphi compatibility only.
38.48
38.48.1
EStackOverow
Description
EStackOverflow occurs when the stack has grown too big (e.g. by innite recursion).
1601
38.49
38.49.1
EUnderow
Description
EOverflow occurs when a oat operation underows (i.e. result is too small to represent). See also: EIntError (1598), EIntOverow (1599), EDivByZero (1597), ERangeError (1601), EOverFlow (1600)
38.50
38.50.1
EVariantError
Description
38.50.2
Page 1602
Method overview
Description Create an instance of EVariantError with a particular error code.
Property CreateCode
38.50.3
EVariantError.CreateCode
Synopsis: Create an instance of EVariantError with a particular error code. Declaration: constructor CreateCode(Code: LongInt) Visibility: default Description: CreateCode calls the inherited constructor, and sets the ErrCode (1) property to Code. See also: ErrCode (1)
38.51
38.51.1
Exception
Description
Exception 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 TObject, it is recommended to use Exception as the basis of exception class objects: the Exception class introduces properties to associate a message and a help context with the exception being raised. What is more, the SysUtils 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. See also: ExceptObject (1504), ExceptAddr (1503), ExceptionErrorMessage (1504), ShowException (1557), Abort (1469)
1602
38.51.2
Page 1603 1603 1604 1604 1603 1604 1605 1604
Method overview
Description Constructs a new exception object with a given message. Constructs a new exception object and formats a new message. Constructs a new exception object and sets the help context and formats the message Constructs a new exception object and sets the help context. Constructs a new exception object and gets the message from a resource. Constructs a new exception object and formats the message from a reasource. Constructs a new exception object and sets the help context and formats the message from a resource Constructs a new exception object and sets the help context and gets the message from a resource
38.51.3
Page 1605 1605
Property overview
Access rw rw Description Help context associated with the exception. Message associated with the exception.
38.51.4
Exception.Create
Synopsis: Constructs a new exception object with a given message. Declaration: constructor Create(const msg: string) Visibility: public Errors: Construction may fail if there is not enough memory on the heap. See also: Exception.CreateFmt (1), Exception.Message (1)
38.51.5
Exception.CreateFmt
Synopsis: Constructs a new exception object and formats a new message. Declaration: constructor CreateFmt(const msg: string;const args: Array of const) Visibility: public Errors: Construction may fail if there is not enough memory on the heap. See also: Exception.Create (1), Exception.Message (1), Format (1528)
38.51.6
Exception.CreateRes
Synopsis: Constructs a new exception object and gets the message from a resource. Declaration: constructor CreateRes(ResString: PString) Visibility: public Errors: Construction may fail if there is not enough memory on the heap. 1603
See also: Exception.Create (1), Exception.CreateFmt (1), Exception.CreateResFmt (1), Exception.Message (1)
38.51.7
Exception.CreateResFmt
Synopsis: Constructs a new exception object and formats the message from a reasource. Declaration: constructor CreateResFmt(ResString: PString;const Args: Array of const) Visibility: public Description: CreateResFmt does the same as CreateFmt (1), but fetches the message from the resource string ResString. Errors: Construction may fail if there is not enough memory on the heap. See also: Exception.Create (1), Exception.CreateFmt (1), Exception.CreateRes (1), Exception.Message (1)
38.51.8
Exception.CreateHelp
Synopsis: Constructs a new exception object and sets the help context. Declaration: constructor CreateHelp(const Msg: string;AHelpContext: Integer) Visibility: public Description: CreateHelp does the same as the Create (1) constructor, but additionally stores AHelpContext in the HelpContext (1) property. See also: Exception.Create (1)
38.51.9
Exception.CreateFmtHelp
Synopsis: Constructs a new exception object and sets the help context and formats the message Declaration: constructor CreateFmtHelp(const Msg: string;const Args: Array of const; AHelpContext: Integer) Visibility: public Description: CreateFmtHelp does the same as the CreateFmt (1) constructor, but additionally stores AHelpContext in the HelpContext (1) property. See also: Exception.CreateFmt (1)
38.51.10
Exception.CreateResHelp
Synopsis: Constructs a new exception object and sets the help context and gets the message from a resource Declaration: constructor CreateResHelp(ResString: PString;AHelpContext: Integer) Visibility: public Description: CreateResHelp does the same as the CreateRes (1) constructor, but additionally stores AHelpContext in the HelpContext (1) property. See also: Exception.CreateRes (1)
1604
38.51.11
Exception.CreateResFmtHelp
Synopsis: Constructs a new exception object and sets the help context and formats the message from a resource Declaration: constructor CreateResFmtHelp(ResString: PString; const Args: Array of const; AHelpContext: Integer) Visibility: public Description: CreateResFmtHelp does the same as the CreateResFmt (1) constructor, but additionally stores AHelpContext in the HelpContext (1) property. See also: Exception.CreateResFmt (1)
38.51.12
Exception.HelpContext
Synopsis: Help context associated with the exception. Declaration: Property HelpContext : LongInt Visibility: public Access: Read,Write Description: HelpContext 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. See also: Exception.CreateHelp (1), Exception.Message (1)
38.51.13
Exception.Message
Synopsis: Message associated with the exception. Declaration: Property Message : string Visibility: public Access: Read,Write Description: Message provides additional information about the exception. It is shown to the user in e.g. the ShowException (1557) routine, and should be set in the constructor when the exception is raised. See also: Exception.Create (1), Exception.HelpContext (1)
38.52
38.52.1
EZeroDivide
Description
EZeroDivide occurs when a oat division by zero occurs. See also: EIntError (1598), EIntOverow (1599), EDivByZero (1597), ERangeError (1601)
1605
38.53
38.53.1
IReadWriteSync
Description
IReadWriteSync is an interface for synchronizing read/write operations. Writers are always guaranteed to have exclusive access: readers may or may not have simultaneous access, depending on the implementation.
38.53.2
Page 1606 1606 1606 1607
Method overview
Description Start a read operation. Start a write operation. End a read operation End a write operation.
38.53.3
IReadWriteSync.BeginRead
Synopsis: Start a read operation. Declaration: procedure BeginRead Visibility: default Description: BeginRead indicates that a read operation is about to be started. If a write operation is in progress, then the call will block untill the write operation nished. Depending on the implementation the call may also block if another read operation is in progress. After BeginRead, any write operation started with BeginWrite (1) will block until EndRead (1) is called. See also: IReadWriteSync.EndRead (1), IReadWriteSync.BeginWrite (1), IReadWriteSync.EndWrite (1)
38.53.4
IReadWriteSync.EndRead
Synopsis: End a read operation Declaration: procedure EndRead Visibility: default Description: EndRead signals the end of a read operation. If there was any blocked write operation, that will be unblocked by a call to EndRead. See also: IReadWriteSync.BeginRead (1), IReadWriteSync.BeginWrite (1), IReadWriteSync.EndWrite (1)
38.53.5
IReadWriteSync.BeginWrite
Synopsis: Start a write operation. Declaration: function BeginWrite : Boolean Visibility: default Description: BeginWrite signals the begin of a write operation. This call will block if any other read or write operation is currently in progress. It will resumt only after all other read or write operations have nished. See also: IReadWriteSync.EndRead (1), IReadWriteSync.EndWrite (1), IReadWriteSync.BeginRead (1) 1606
38.53.6
IReadWriteSync.EndWrite
Synopsis: End a write operation. Declaration: procedure EndWrite Visibility: default Description: EndWrite signals the end of a write operation. After the call to EndWrite any other read or write operations can start. See also: IReadWriteSync.EndRead (1), IReadWriteSync.EndWrite (1), IReadWriteSync.BeginRead (1)
38.54
38.54.1
TMultiReadExclusiveWriteSynchronizer
Description
TMultiReadExclusiveWriteSynchronizer is a default implementation of the IReadWriteSync (1606) interface. It uses a single mutex to protect access to the read/write resource, resulting in a single thread having access to the resource. See also: IReadWriteSync (1606)
38.54.2
Page 1606
Interfaces overview
Description Read/Write synchronizer
Property IReadWriteSync
38.54.3
Page 1608 1608 1607 1608 1609 1608
Method overview
Description Request read access to the resource Request write access to the resource. Create a new instance of the TMultiReadExclusiveWriteSynchronizer class Destroys the TMultiReadExclusiveWriteSynchronizer instance Release read access to the resource Release write access to the resource
38.54.4
TMultiReadExclusiveWriteSynchronizer.Create
Virtual
Synopsis: Create a new instance of the TMultiReadExclusiveWriteSynchronizer class Declaration: constructor Create; Visibility: public Description: Create creates a new instance of TMultiReadExclusiveWriteSynchronizer. It initializes a TRTLCriticalSection. Errors: None. See also: TRTLCriticalSection (1267)
1607
38.54.5
TMultiReadExclusiveWriteSynchronizer.Destroy
Override
Synopsis: Destroys the TMultiReadExclusiveWriteSynchronizer instance Declaration: destructor Destroy; Visibility: public Description: Create destroys the instance of TMultiReadExclusiveWriteSynchronizer. It frees the TRTLCriticalSection it initialized, and calls the inherited destructor. Errors: None. See also: TRTLCriticalSection (1267)
38.54.6
TMultiReadExclusiveWriteSynchronizer.Beginwrite
Synopsis: Request write access to the resource. Declaration: function Beginwrite : Boolean Visibility: public Description: Beginwrite is the implementation of IReadWriteSync.BeginWrite. It simply enters the critical section, and returns True. Errors: None. See also: IReadWriteSync.BeginWrite (1), EndWrite (1)
38.54.7
TMultiReadExclusiveWriteSynchronizer.Endwrite
Synopsis: Release write access to the resource Declaration: procedure Endwrite Visibility: public Description: Beginwrite is the implementation of IReadWriteSync.EndWrite. It simply leaves the critical section. Errors: None. See also: IReadWriteSync.EndWrite (1), BeginWrite (1)
38.54.8
TMultiReadExclusiveWriteSynchronizer.Beginread
Synopsis: Request read access to the resource Declaration: procedure Beginread Visibility: public Description: BeginRead is the implementation of IReadWriteSync.BeginRead. It simply attempts to enter the critical section. Errors: None. See also: IReadWriteSync.BeginRead (1), EndRead (1)
1608
38.54.9
TMultiReadExclusiveWriteSynchronizer.Endread
Synopsis: Release read access to the resource Declaration: procedure Endread Visibility: public Description: EndRead is the implementation of IReadWriteSync.EndRead. It simply leaves the critical section. Errors: None. See also: IReadWriteSync.EndRead (1), BeginRead (1)
38.55
38.55.1
TSimpleRWSync
Description
TSimpleRWSync implements a simple read/write locking mechanism. It controls access to an object: only a single thread is allowed access to an object for either read or write operations. Access is controlled through a single critical section. See also: TMultiReadExclusiveWriteSynchronizer (1607)
38.55.2
Page 1606
Interfaces overview
Description Read/Write synchronizer
Property IReadWriteSync
38.55.3
Page 1610 1610 1609 1610 1611 1610
Method overview
Description Acquire a read lock Acquire a write lock Create a new instance of TSimpleRWSync Removes the TSimpleRWSync instance from memory Release the read lock Release the write lock
38.55.4
TSimpleRWSync.Create
Virtual
Synopsis: Create a new instance of TSimpleRWSync Declaration: constructor Create; Visibility: public Description: Create allocates a new instance of TSimpleRWSync and initializes the critical section for use in the various methods. See also: TSimpleRWSync.Destroy (1)
1609
38.55.5
TSimpleRWSync.Destroy
Override
Synopsis: Removes the TSimpleRWSync instance from memory Declaration: destructor Destroy; Visibility: public Description: Destroy releases the critical section and removes the TSimpleRWSync instance from memory. See also: TSimpleRWSync.Create (1)
38.55.6
TSimpleRWSync.Beginwrite
Synopsis: Acquire a write lock Declaration: function Beginwrite : Boolean Visibility: public Description: Beginwrite waits till all other threads have released their read or write locks on the object, and then aquires a write lock on the object. See also: TSimpleRWSync.BeginRead (1), TSimpleRWSync.EndWrite (1)
38.55.7
TSimpleRWSync.Endwrite
Synopsis: Release the write lock Declaration: procedure Endwrite Visibility: public Description: EndWrite releases the current threads lock on the object, allowing other threads to acquire a read or write lock on the object. See also: TSimpleRWSync.BeginWrite (1), TSimpleRWSync.EndRead (1)
38.55.8
TSimpleRWSync.Beginread
Synopsis: Acquire a read lock Declaration: procedure Beginread Visibility: public Description: BeginRead waits till all other threads have released their read or write locks on the object, and then aquires a read lock on the object. See also: TSimpleRWSync.BeginWrite (1), TSimpleRWSync.EndRead (1)
1610
38.55.9
TSimpleRWSync.Endread
Synopsis: Release the read lock Declaration: procedure Endread Visibility: public Description: EndRead releases the current threads read lock on the object, allowing other threads to acquire a read or write lock on the object. See also: TSimpleRWSync.BeginRead (1), TSimpleRWSync.EndWrite (1)
1611
Chapter 39
Starting with D6, types from Windows specic units that were needed in Kylix were extracted to this unit. So it mostly contains type of Windows origin that are needed in the VCL framework.
39.2
39.2.1
E_FAIL = ($80004005) Dened for Delphi compatibility, this should not be used. E_INVALIDARG = ($80070057) Dened for Delphi compatibility, this should not be used. GUID_NULL : TGUID = {00000000-0000-0000-0000-000000000000} GUID_NULL is the denition of the NULL (empty) GUID. LOCK_EXCLUSIVE = 2 Dened for Delphi compatibility, this should not be used. LOCK_ONLYONCE = 4 Dened for Delphi compatibility, this should not be used. LOCK_WRITE = 1 Dened for Delphi compatibility, this should not be used. RT_RCDATA = (10)
1612
Resource type RCDATA STATFLAG_DEFAULT = 0 Dened for Delphi compatibility, this should not be used. STATFLAG_NONAME = 1 Dened for Delphi compatibility, this should not be used. STATFLAG_NOOPEN = 2 Dened for Delphi compatibility, this should not be used. STGTY_LOCKBYTES = 3 Dened for Delphi compatibility, this should not be used. STGTY_PROPERTY = 4 Dened for Delphi compatibility, this should not be used. STGTY_STORAGE = 1 Dened for Delphi compatibility, this should not be used. STGTY_STREAM = 2 Dened for Delphi compatibility, this should not be used. STG_E_ABNORMALAPIEXIT = ($800300FA) Dened for Delphi compatibility, this should not be used. STG_E_ACCESSDENIED = ($80030005) Dened for Delphi compatibility, this should not be used. STG_E_BADBASEADDRESS = ($80030110) Dened for Delphi compatibility, this should not be used. STG_E_CANTSAVE = ($80030103) Dened for Delphi compatibility, this should not be used. STG_E_DISKISWRITEPROTECTED = ($80030013) Dened for Delphi compatibility, this should not be used. STG_E_DOCFILECORRUPT = ($80030109) 1613
Dened for Delphi compatibility, this should not be used. STG_E_EXTANTMARSHALLINGS = ($80030108) Dened for Delphi compatibility, this should not be used. STG_E_FILEALREADYEXISTS = ($80030050) Dened for Delphi compatibility, this should not be used. STG_E_FILENOTFOUND = ($80030002) Dened for Delphi compatibility, this should not be used. STG_E_INCOMPLETE = ($80030201) Dened for Delphi compatibility, this should not be used. STG_E_INSUFFICIENTMEMORY = ($80030008) Dened for Delphi compatibility, this should not be used. STG_E_INUSE = ($80030100) Dened for Delphi compatibility, this should not be used. STG_E_INVALIDFLAG = ($800300FF) Dened for Delphi compatibility, this should not be used. STG_E_INVALIDFUNCTION = ($80030001) Dened for Delphi compatibility, this should not be used. STG_E_INVALIDHANDLE = ($80030006) Dened for Delphi compatibility, this should not be used. STG_E_INVALIDHEADER = ($800300FB) Dened for Delphi compatibility, this should not be used. STG_E_INVALIDNAME = ($800300FC) Dened for Delphi compatibility, this should not be used. STG_E_INVALIDPARAMETER = ($80030057) Dened for Delphi compatibility, this should not be used. STG_E_INVALIDPOINTER = ($80030009) 1614
Dened for Delphi compatibility, this should not be used. STG_E_LOCKVIOLATION = ($80030021) Dened for Delphi compatibility, this should not be used. STG_E_MEDIUMFULL = ($80030070) Dened for Delphi compatibility, this should not be used. STG_E_NOMOREFILES = ($80030012) Dened for Delphi compatibility, this should not be used. STG_E_NOTCURRENT = ($80030101) Dened for Delphi compatibility, this should not be used. STG_E_OLDDLL = ($80030105) Dened for Delphi compatibility, this should not be used. STG_E_OLDFORMAT = ($80030104) Dened for Delphi compatibility, this should not be used. STG_E_PATHNOTFOUND = ($80030003) Dened for Delphi compatibility, this should not be used. STG_E_PROPSETMISMATCHED = ($800300F0) Dened for Delphi compatibility, this should not be used. STG_E_READFAULT = ($8003001E) Dened for Delphi compatibility, this should not be used. STG_E_REVERTED = ($80030102) Dened for Delphi compatibility, this should not be used. STG_E_SEEKERROR = ($80030019) Dened for Delphi compatibility, this should not be used. STG_E_SHAREREQUIRED = ($80030106) Dened for Delphi compatibility, this should not be used. STG_E_SHAREVIOLATION = ($80030020) 1615
Dened for Delphi compatibility, this should not be used. STG_E_TERMINATED = ($80030202) Dened for Delphi compatibility, this should not be used. STG_E_TOOMANYOPENFILES = ($80030004) Dened for Delphi compatibility, this should not be used. STG_E_UNIMPLEMENTEDFUNCTION = ($800300FE) Dened for Delphi compatibility, this should not be used. STG_E_UNKNOWN = ($800300FD) Dened for Delphi compatibility, this should not be used. STG_E_WRITEFAULT = ($8003001D) Dened for Delphi compatibility, this should not be used. STG_S_BLOCK = $00030201 Dened for Delphi compatibility, this should not be used. STG_S_CONVERTED = $00030200 Dened for Delphi compatibility, this should not be used. STG_S_MONITORING = $00030203 Dened for Delphi compatibility, this should not be used. STG_S_RETRYNOW = $00030202 Dened for Delphi compatibility, this should not be used. STREAM_SEEK_CUR = 1 Dened for Delphi compatibility, this should not be used. STREAM_SEEK_END = 2 Dened for Delphi compatibility, this should not be used. STREAM_SEEK_SET = 0 Dened for Delphi compatibility, this should not be used.
1616
39.2.2
Types
ArgList = Pointer ArgList is dened for Delphi/Kylix compatibility and should not be used. DWORD = LongWord Alias for cardinal type FILETIME = _FILETIME Alias for the _FILETIME type Largeint = Int64 Largeint is an alias for the Int64 type dened in the system unit. This is an alias for Delphi/Kylix compatibility. LargeUint = QWord LargeUInt is an alias for the QWord type dened in the system unit. This is an alias for Delphi/Kylix compatibility. LARGE_INT = Largeint LARGE_INT is an alias for the Int64 type dened in the system unit. This is an alias for Delphi/Kylix compatibility. LARGE_UINT = LargeUint LARGE_UINT is an alias for the QWord type dened in the system unit. This is an alias for Delphi/Kylix compatibility. PByte = System.PByte PByte is dened in the system unit. This is an alias for Delphi/Kylix compatibility. PCLSID = PGUID PCLSID is a pointer to a TCLSID type. PDisplay = Pointer PDisplay is dened for Delphi/Kylix compatibility and should not be used. PDouble = System.PDouble PDouble is dened in the system unit. This is an alias for Delphi/Kylix compatibility. PDWord = ^DWORD 1617
PDWord is equivalent to the PCardinal type. PEvent = Pointer PEvent is dened for Delphi/Kylix compatibility and should not be used. PFileTime = ^TFileTime Pointer to TFileTime type PLargeInt = ^Largeint PLargeInt is an alias for the PInt64 type dened in the system unit. This is an alias for Delphi/Kylix compatibility. PLargeuInt = ^LargeUint PLargeUInt is an alias for the PQWord type dened in the system unit. This is an alias for Delphi/Kylix compatibility. PLongint = System.PLongint PLongint is dened in the system unit. This is an alias for Delphi/Kylix compatibility. POleStr = PWideChar POleStr is a pointer to a (double) null-terminated array of TOleChar characters. PPoint = ^TPoint PPoint is a typed pointer to the TPoint (1621) type. PPOleStr = ^POleStr PPOleStr is a typed pointer to a POleStr variable. PRect = ^TRect PRect is a typed pointer to the TRect (1621) type. PSize = ^TSize PSize is a typed pointer to the TSize (1622) type. PSmallInt = System.PSmallInt PSmallInt is dened in the system unit. This is an alias for Delphi/Kylix compatibility. PSmallPoint = ^TSmallPoint PSmallPoint is a typed pointer to the TSmallPoint (1622) record. 1618
PStatStg = ^TStatStg Pointer to TStatStg record. PXrmOptionDescRec = ^TXrmOptionDescRec PXrmOptionDescRec is dened for Delphi/Kylix compatibility and should not be used. Region = Pointer Region is dened for Delphi/Kylix compatibility and should not be used. STATSTG = TStatStg Alias for the TStatStg type. tagPOINT = TPoint tagPOINT is a simple alias for TPoint (1621) tagSIZE = TSize tagSize is an alias for the TSize (1622) type. tagSTATSTG = record pwcsName : POleStr; dwType : DWORD; cbSize : LARGE_UINT; mtime : TFileTime; ctime : TFileTime; atime : TFileTime; grfMode : DWORD; grfLocksSupported : DWORD; clsid : TCLSID; grfStateBits : DWORD; reserved : DWORD; end
tagSTATSTG is used in the IStream.Stat (1) call. It describes a storage medium (typically a le). TBooleanDynArray = Array of Boolean TBooleanDynArray is a standard denition of a dynamical array of booleans. TByteDynArray = Array of Byte TByteDynArray is a standard denition of a dynamical array of (8-bit, unsigned) bytes. TCardinalDynArray = Array of Cardinal
1619
TCardinalDynArray is a standard denition of a dynamical array of (32-bit, unsigned) cardinals. TCLSID = TGUID TCLSID is an alias for the #rtl.system.TGUID (1264) type. TDoubleDynArray = Array of Double TSoubleDynArray is a standard denition of a dynamical array of doubles. (regular oating point type) TDuplicates = (dupIgnore,dupAccept,dupError)
Table 39.1: Enumeration values for type TDuplicates Value dupAccept dupError dupIgnore Explanation Accept duplicates, adding them to the list. Raise an error when an attempt is made to add a duplicate. Ignore the new item, do not add it to the list.
TDuplicates can be used to indicate how a list structure acts on the addition of a duplicate item to the list. dupIgnore Ignore the new item, do not add it to the list. dupAccept Accept duplicates, adding them to the list. dupError Raise an error when an attempt is made to add a duplicate. TFileTime = _FILETIME Alias for the _FILETIME type TInt64DynArray = Array of Int64 TInt64DynArray is a standard denition of a dynamical array of (64-bit, signed) int64s. TIntegerDynArray = Array of Integer TIntegerDynArray is a standard denition of a dynamical array of (32-bit, signed) integers. TListCallback = procedure(data: pointer;arg: pointer) of object TListCallback is the prototype for a Foreach operation on a list. It will be called with as Data the pointer in the list, and Arg will contain the extra user data added to the Foreach call. It can be used in methods of objects; for a version that can be used as a global procedure, see TListStaticCallback (1621) TListStaticCallback = procedure(data: pointer;arg: pointer) 1620
TListStaticCallback is the prototype for a Foreach operation on a list. It will be called with as Data the pointer in the list, and Arg will contain the extra user data added to the Foreach call. It can be used in plain procedures; for a version that can be used as a method, see TListCallback (1620) TLongWordDynArray = Array of LongWord TLongWordDynArray is a standard denition of a dynamical array of (32-bit, unsigned) LongWords. TOleChar = WideChar TOleChar is an alias for the WideChar type, dened in the system unit. TPoint = packed record X : LongInt; Y : LongInt; end
TPoint is a generic denition of a point in a 2-dimensional discrete plane, where X indicates the horizontal position, and Y the vertical position (positions usually measured in pixels), and 0,0 is the origin of the plane. Usually, the origin is the upper-left corner of the screen, with Y increasing as one moves further down the screen - this is opposite to the mathematical view where Y increases as one moves upwards. The coordinates are integers, (32-bit, signed) so the coordinate system runs from -MaxInt to MaxInt. TPointerDynArray = Array of Pointer Dynamic array of untyped pointers TQWordDynArray = Array of QWord TQWordDynArray is a standard denition of a dynamical array of (64-bit, unsigned) QWords. TRect = packed record end
TRect denes a rectangle in a discrete plane. It is described by the horizontal (left, right) or vertical (top, Bottom) positions (in pixels) of the edges, or, alternatively, by the coordinates of the top left (TopLeft) and bottom right (BottomRight) corners. TShortIntDynArray = Array of ShortInt TShortintDynArray is a standard denition of a dynamical array of (8-bit, signed) shortints. TSingleDynArray = Array of Single TSingleDynArray is a standard denition of a dynamical array of singles. (smallest oating point type) 1621
TSize is a type to describe the size of a rectangular area, where cx is the width, cy is the height (in pixels) of the rectangle. TSmallIntDynArray = Array of SmallInt TSmallintDynArray is a standard denition of a dynamical array of (16-bit, unsigned) integers. TSmallPoint = packed record x : SmallInt; y : SmallInt; end
TSmallPoint denes a point in a 2-dimensional plane, just like TPoint (1621), but the coordinates have a smaller range: The coordinates are smallints (16-bit, signed) and they run from -MaxSmallInt to maxSmallint. TStatStg = tagSTATSTG TStatStg is a record type describing a storage medium. It is uses in the IStream.Stat (1) function. TStringDynArray = Array of AnsiString TStringDynArray is a standard denition of a dynamical array of Ansistrings. TWideStringDynArray = Array of WideString TWideStringDynArray is a standard denition of a dynamical array of WideStrings. TWordDynArray = Array of Word TWordDynArray is a standard denition of a dynamical array of (16-bit, unsigned) words. TXrmOptionDescRec = record end
TXrmOptionDescRec is dened for Delphi/Kylix compatibility and should not be used. Widget = Pointer Widget is dened for Delphi/Kylix compatibility and should not be used. WidgetClass = Pointer
1622
WidgetClass is dened for Delphi/Kylix compatibility and should not be used. XrmOptionDescRec = TXrmOptionDescRec XrmOptionDescRec is dened for Delphi/Kylix compatibility and should not be used. _FILETIME = packed record dwLowDateTime : DWORD; dwHighDateTime : DWORD; end
_FILETIME describes a le time stamp. It is dened or Delphi/Kylix compatibility and should not be used except when implementing or accessing the IStream interface. The TDateTime type should be used instead.
39.3
39.3.1
Synopsis: Create a rectangle, given a position and size Declaration: function Bounds(ALeft: Integer;ATop: Integer;AWidth: Integer; AHeight: Integer) : TRect Visibility: default Description: Bounds returns a TRect structure with the indicated position (Left=ALeft and Top=ATop) and size (Right=ALeft+AWidth and Bottom=ATop+AHeight) See also: Rect (1625), PtInRect (1625), IntersectRect (1624), UnionRect (1626)
39.3.2
CenterPoint
Synopsis: Return the center point of a rectangle Declaration: function CenterPoint(const Rect: TRect) : TPoint Visibility: default Description: CenterPoint returns the center point of the rectangle Rect. See also: PtinRect (1625), IntersectRect (1624), IsRectEmpty (1624), OffsetRect (1624), InateRect (1624), Size (1625), IsRectEmpty (1624)
39.3.3
EqualRect
Synopsis: Check if two rectangles are equal. Declaration: function EqualRect(const r1: TRect;const r2: TRect) : Boolean Visibility: default Description: EqualRect returns True if the rectangles R1 and R2 are equal (i.e. have the position and size). If the rectangles differ, the function returns False See also: Rect (1625), Bounds (1623), PtInRect (1625), IntersectRect (1624), UnionRect (1626), IsRectEmpty (1624), OffsetRect (1624), InateRect (1624), Size (1625) 1623
39.3.4
InateRect
Synopsis: Increase the rectangle in size, keeping it centered Declaration: function InflateRect(var Rect: TRect;dx: Integer;dy: Integer) : Boolean Visibility: default Description: InflateRect inates the rectangle horizontally with dx pixels on each side, and vertically with dy pixels, thus keeping its center point on the same location. It returns true if the operation was succesfully, False if it was not (only possible if the address of Rect is Nil). See also: PtinRect (1625), IntersectRect (1624), IsRectEmpty (1624), OffsetRect (1624), CenterPoint (1623), Size (1625), IsRectEmpty (1624)
39.3.5
IntersectRect
Synopsis: Return the intersection of 2 rectangles Declaration: function IntersectRect(var Rect: TRect;const R1: TRect;const R2: TRect) : Boolean Visibility: default Description: IntersectRect returns the intersection of the 2 rectangles R1 and R2 in Rect. It returns True if the 2 rectangles have an intersection, otherwise False is returned, and Rect is lled with zero. See also: PtinRect (1625), UnionRect (1626), IsRectEmpty (1624), OffsetRect (1624), InateRect (1624), Size (1625)
39.3.6
IsRectEmpty
Synopsis: Check whether a rectangle is empty Declaration: function IsRectEmpty(const Rect: TRect) : Boolean Visibility: default Description: IsRectEmpty returns true if the rectangle is empty, i.e. has a zero or negative width or height. See also: PtinRect (1625), IntersectRect (1624), IsRectEmpty (1624), OffsetRect (1624), InateRect (1624), Size (1625)
39.3.7
OffsetRect
Synopsis: Offset the rectangle Declaration: function OffsetRect(var Rect: TRect;DX: Integer;DY: Integer) : Boolean Visibility: default Description: OffsetRect offsets the rectangle Rect by a horizontal distance DX and a vertical distance DY. The operation returns True if the operation was successfull, false if it was not (only possible if the address of Rect is Nil). See also: PtinRect (1625), IntersectRect (1624), IsRectEmpty (1624), OffsetRect (1624), InateRect (1624), Size (1625), IsRectEmpty (1624)
1624
39.3.8
Point
Synopsis: Create a point Declaration: function Point(x: Integer;y: Integer) : TPoint Visibility: default Description: Point returns a TPoint structure with the given position (X, Y). See also: Rect (1625), PtInRect (1625)
39.3.9
PtInRect
Synopsis: Check whether a point is inside a rectangle. Declaration: function PtInRect(const Rect: TRect;const p: TPoint) : Boolean Visibility: default Description: PtInRect returns True if p is located inside Rect, and False if it is located outside the rectangle. Remark: Note that the bottom, right edges are not considered part of the rectangle, therefor a point located on one of these edges will not be considered part of the rectangle, meaning that for a record (10,10,100,100) the point (90,100) will not be considered part of the record, but 90,0 will be. See also: IntersectRect (1624), UnionRect (1626), IsRectEmpty (1624), OffsetRect (1624), InateRect (1624), Size (1625)
39.3.10
Rect
Synopsis: Create a rectangle record Declaration: function Rect(Left: Integer;Top: Integer;Right: Integer;Bottom: Integer) : TRect Visibility: default Description: Rect returns a rectangle structure with the 4 members Left, Top, Right and Bottom as passed in the arguments. See also: Bounds (1623), PtInRect (1625), IntersectRect (1624), UnionRect (1626), IsRectEmpty (1624), OffsetRect (1624), InateRect (1624), Size (1625)
39.3.11
Size
Synopsis: Return the size of the rectangle Declaration: function Size(AWidth: Integer;AHeight: Integer) : TSize function Size(ARect: TRect) : TSize Visibility: default Description: Size returns a TSize record with the indicated AWidth, AHeight. In the case ARect is passed, the width and height are calculated (taking into account that the right, bottom are not considered part of the rectangle). See also: PtinRect (1625), IntersectRect (1624), IsRectEmpty (1624), OffsetRect (1624), InateRect (1624), CenterPoint (1623), IsRectEmpty (1624) 1625
39.3.12
UnionRect
Synopsis: Return the union of 2 rectangles. Declaration: function UnionRect(var Rect: TRect;const R1: TRect;const R2: TRect) : Boolean Visibility: default Description: UnionRect retuns the rectangle that encompasses both R1 and R2 in Rect. It returns True if the resulting rectangle is not empty, False if the result is an empty rectangle (in which case the result is lled with zeroes) See also: PtinRect (1625), IntersectRect (1624), IsRectEmpty (1624), OffsetRect (1624), InateRect (1624), Size (1625)
39.4
39.4.1
IClassFactory
Description
39.4.2
Page 1626 1626
Method overview
Property CreateInstance LockServer Description Create a new instance of an interface. Lock ActiveX server object.
39.4.3
IClassFactory.CreateInstance
Synopsis: Create a new instance of an interface. Declaration: function CreateInstance(const unkOuter: IUnknown;const riid: TGUID; out vObject) : HResult Visibility: default Description: IClassFactory.CreateInstance is dened for Delphi/Kylix compatibility and should not be used.
39.4.4
IClassFactory.LockServer
Synopsis: Lock ActiveX server object. Declaration: function LockServer(fLock: LongBool) : HResult Visibility: default Description: IClassFactory.LocksServer is dened for Delphi/Kylix compatibility and should not be used.
1626
39.5
39.5.1
ISequentialStream
Description
ISequentialStream is the interface for streams which only support sequential reading of chunks of data. It is dened for Delphi/Kylix compatibility and should not be used. See also: IStream (1627)
39.5.2
Page 1627 1627
Method overview
Property Read Write Description Read data from the stream Write data to the stream
39.5.3
ISequentialStream.Read
Synopsis: Read data from the stream Declaration: function Read(pv: Pointer;cb: DWORD;pcbRead: PDWord) : HRESULT Visibility: default Description: Read reads cbCount bytes from the stream into the memory pointed to by pv and returns the number of bytes read in pcbread. The result is zero for success or an error code. See also: ISequentialStream.Write (1)
39.5.4
ISequentialStream.Write
Synopsis: Write data to the stream Declaration: function Write(pv: Pointer;cb: DWORD;pcbWritten: PDWord) : HRESULT Visibility: default Description: Write writes cbCount bytes from the memory pointed to by pv to the stream and returns the number of bytes written in pcbwritten. The result is zero for success or an error code. See also: ISequentialStream.Read (1)
39.6
39.6.1
IStream
Description
An abstract interface for an external (non pascal) stream, as dened in Microsoft COM interfaces
1627
39.6.2
Page 1630 1629 1628 1629 1629 1628 1628 1630 1629
Method overview
Property Clone Commit CopyTo LockRegion Revert Seek SetSize Stat UnlockRegion Description Clone the stream instance Commit data to the stream Copy data from one stream to another Lock a region of bytes in the stream Revert changes Set the stream position Set the stream size return information about the stream. Unlocks a previously locked region of bytes in the stream
39.6.3
IStream.Seek
Synopsis: Set the stream position Declaration: function Seek(dlibMove: Largeint;dwOrigin: LongInt; out libNewPosition: Largeint) : HResult Visibility: default Description: Seek sets the stream position at dlibMove bytes from dwOrigin (one of the SEEK_* constants) and returns the new absolute position in libNewPosition. The function returns zero on success, or an error code. Errors: On error, a nonzero exit code is returned.
39.6.4
IStream.SetSize
Synopsis: Set the stream size Declaration: function SetSize(libNewSize: Largeint) : HRESULT Visibility: default Description: SetSize sets the size of the stream to libNewSize bytes, if the stream allows it. On sucess, zero is returned. Errors: On error, a nonzero exit code is returned.
39.6.5
IStream.CopyTo
Synopsis: Copy data from one stream to another Declaration: function CopyTo(stm: IStream;cb: Largeint;out cbRead: Largeint; out cbWritten: Largeint) : HRESULT Visibility: default Description: CopyTo copies cb bytes from the stream to target stream stm. cbRead returns how many bytes were read from the stream, cbwrite returns how many bytes were actually written to the destination stream. The function returns zero on success. Errors: On error, a nonzero exit code is returned.
1628
39.6.6
IStream.Commit
Synopsis: Commit data to the stream Declaration: function Commit(grfCommitFlags: LongInt) : HRESULT Visibility: default Description: Commit commits the data in the stream to the underlying medium. Flags is a set of options to control the commit operation (see MSDN for the possible ags). Errors: On error, a nonzero exit code is returned.
39.6.7
IStream.Revert
Synopsis: Revert changes Declaration: function Revert : HRESULT Visibility: default Description: Revert reverts all changes that were done to a transacted stream, i.e. all changes since the last commit. The function returns zero on success. Errors: On error, a nonzero exit code is returned.
39.6.8
IStream.LockRegion
Synopsis: Lock a region of bytes in the stream Declaration: function LockRegion(libOffset: Largeint;cb: Largeint; dwLockType: LongInt) : HRESULT Visibility: default Description: LockRegion locks a region of the storage, starting at libOffset, for cbCount bytes. The applied lock is of type dwLockType. The function returns zero if the lock was succesfully applied. Errors: On error, a nonzero exit code is returned.
39.6.9
IStream.UnlockRegion
Synopsis: Unlocks a previously locked region of bytes in the stream Declaration: function UnlockRegion(libOffset: Largeint;cb: Largeint; dwLockType: LongInt) : HRESULT Visibility: default Description: UnlockRegion removes the lock on a region of the storage, starting at libOffset, for cbCount bytes. The lock must be of type dwLockType. The function returns zero if the lock was succesfully removed. Errors: On error, a nonzero exit code is returned.
1629
39.6.10
IStream.Stat
Synopsis: return information about the stream. Declaration: function Stat(out statstg: TStatStg;grfStatFlag: LongInt) : HRESULT Visibility: default Description: Stat returns information about the stream in statstg, taking into account the ags in grfStatFlag (one of the STATFLAG_ constants). The function returns zero if the call was successful. Errors: On error, a nonzero exit code is returned.
39.6.11
IStream.Clone
Synopsis: Clone the stream instance Declaration: function Clone(out stm: IStream) : HRESULT Visibility: default Description: Clone returns an independent but initially equal copy of the stream in stm. The function returns zero if the call was successful. Errors: On error, a nonzero exit code is returned.
1630
Chapter 40
40.2
Overview
The TypeInfo unit contains many routines which can be used for the querying of the Run-Time Type Information (RTTI) which is generated by the compiler for classes that are compiled under the {$M+} switch. This information can be used to retrieve or set property values for published properties for totally unknown classes. In particular, it can be used to stream classes. The TPersistent class in the Classes unit is compiled in the {$M+} state and serves as the base class for all classes that need to be streamed. The unit should be compatible to the Delphi 5 unit with the same name. The only calls that are still missing are the Variant calls, since Free Pascal does not support the variant type yet. The examples in this chapter use a rttiobj auxiliary unit, which contains an object that has a published property for all supported types. It also contains some auxiliary routines and denitions. This unit is included in the documentation sources, in the directory typinfex.
40.3
Auxiliary functions
1631
Table 40.2: Name GetEnumName (1641) GetEnumValue (1643) GetEnumNameCount (1642) GetTypeData (1655) SetToString (1664) StringToSet (1666) Description Get an enumerated type element name Get ordinal number of an enumerated type, based on the name. Get number of elements in an enumerated type. Skip type name and return a pointer to the type data Convert a set to its string representation Convert a string representation of a set to a set
40.4
Functions to set or set a propertys value. Table 40.3: Name GetEnumProp (1642) GetFloatProp (1643) GetInt64Prop (1644) GetMethodProp (1645) GetObjectProp (1647) GetOrdProp (1649) GetPropValue (1652) GetSetProp (1653) GetStrProp (1654) GetWideStrProp (1656) GetVariantProp (1656) SetEnumProp (1660) SetFloatProp (1660) SetInt64Prop (1661) SetMethodProp (1661) SetObjectProp (1662) SetOrdProp (1662) SetPropValue (1663) SetSetProp (1663) SetStrProp (1664) SetWideStrProp (1666) SetVariantProp (1666) Description Return the value of an enumerated type property Return the value of a oat property Return the value of an Int64 property Return the value of a procedural type property Return the value of an object property Return the value of an ordinal type property Return the value of a property as a variant Return the value of a set property Return the value of a string property Return the value of a widestring property Return the value of a variant property Set the value of an enumerated type property Set the value of a oat property Set the value of an Int64 property Set the value of a procedural type property Set the value of an object property Set the value of an ordinal type property Set the value of a property trhough a variant Set the value of a set property Set the value of a string property Set the value of a widestring property Set the value of a variant property
40.5
1632
Table 40.4: Name FindPropInfo (1640) GetPropInfo (1650) GetPropInfos (1650) GetObjectPropClass (1648) GetPropList (1651) IsPublishedProp (1656) IsStoredProp (1657) PropIsType (1658) PropType (1659) Description Getting property type information, With error checking. Getting property type information, No error checking. Find property information of a certain kind Return the declared class of an object property Get a list of all published properties Is a property published Is a property stored Is a property of a certain kind Return the type of a property
40.6
40.6.1
BooleanIdents : Array[Boolean] of Names for boolean values DotSep : string = . Name separator character
OnGetPropValue : TGetPropValue = Nil This callback is set by the variants unit to enable reading of properties as a variant. If set, it is called by the GetPropValue (1652) function. OnGetVariantprop : TGetVariantProp = Nil This callback is set by the variants unit to enable reading of variant properties If set, it is called by the GetVariantProp (1656) function. OnSetPropValue : TSetPropValue = Nil This callback is set by the variants unit to enable writing of properties as a variant. If set, it is called by the SetPropValue (1663) function. OnSetVariantprop : TSetVariantProp = Nil This callback is set by the variants unit to enable writing of variant properties. If set, it is called by the GetVariantProp (1656) function. ptConst = 3 Constant used in acces method ptField = 0 1633
Property acces directly from eld ptStatic = 1 Property acces via static method ptVirtual = 2 Property acces via virtual method tkAny = [(TTypeKind)..(TTypeKind)] Any property type tkMethods = [tkMethod] Only method properties. (event handlers) tkProperties = tkAny - tkMethods - [tkUnknown] Real properties. (not methods) tkString = tkSString Alias for the tsSString enumeration value
40.6.2
Types
PPropInfo = ^TPropInfo Pointer to TPropInfo (1638) record PPropList = ^TPropList Pointer to TPropList (1638) PPTypeInfo = ^PTypeInfo Pointer to PTypeInfo (1634) pointer PTypeData = ^TTypeData Pointer to TTypeData (1638) record. PTypeInfo = ^TTypeInfo Pointer to TTypeInfo (1638) record PVmtFieldEntry = ^TVmtFieldEntry
1634
Pointer to #rtl.typinfo.TVmtFieldEntry (1639) type. PVmtFieldTable = ^TVmtFieldTable Pointer to #rtl.typinfo.TVmtFieldTable (1640) type. ShortStringBase = string ShortStringBase is the base denition of a short string. TCallConv = (ccReg,ccCdecl,ccPascal,ccStdCall,ccSafeCall,ccCppdecl, ccFar16,ccOldFPCCall,ccInternProc,ccSysCall,ccSoftFloat, ccMWPascal)
Table 40.5: Enumeration values for type TCallConv Value ccCdecl ccCppdecl ccFar16 ccInternProc ccMWPascal ccOldFPCCall ccPascal ccReg ccSafeCall ccSoftFloat ccStdCall ccSysCall Explanation Cdecl calling convention. Cppdecl calling convention Far16 calling convention (Delphi compatibility) InternProc calling convention (compiler internal) MWPascal (MetroWerks Pascal) calling convention. OldFPCCall calling convention (deprecated) Pascal calling convention. Register calling convention SafeCall calling convention. Softoat calling convention. stdcall calling convention. SysCall calling convention.
TCallConv is a type describing the calling convention used by a method. It contains an element for all supported calling conventions. TFloatType = (ftSingle,ftDouble,ftExtended,ftComp,ftCurr)
Table 40.6: Enumeration values for type TFloatType Value ftComp ftCurr ftDouble ftExtended ftSingle Explanation Comp-type oat Currency-type oat Double-sized oat Extended-size oat Single-sized oat
The size of a oat type. TGetPropValue = function(Instance: TObject;const PropName: string; PreferStrings: Boolean) : Variant 1635
The callback function must return the property with name PropName of instance Instance. If PreferStrings is true, it should favour converting the property to a string value. The function needs to return the variant with the property value. TGetVariantProp = function(Instance: TObject;PropInfo: PPropInfo) : Variant The callback function must return the variant property with name PropName of instance Instance. TIntfFlag = (ifHasGuid,ifDispInterface,ifDispatch,ifHasStrGUID)
Table 40.7: Enumeration values for type TIntfFlag Value ifDispatch ifDispInterface ifHasGuid ifHasStrGUID Explanation Interface is a dispatch interface Interface is a dual dispatch interface Interface has GUID identier Interface has a string GUID identier
Type of interface. TIntfFlags = Set of TIntfFlag Set of TIntfFlag (1636). TIntfFlagsBase = Set of TIntfFlag Set of TIntfFlag (1636). TMethodKind = (mkProcedure,mkFunction,mkConstructor,mkDestructor, mkClassProcedure,mkClassFunction,mkClassConstructor, mkClassDestructor,mkOperatorOverload)
Table 40.8: Enumeration values for type TMethodKind Value mkClassConstructor mkClassDestructor mkClassFunction mkClassProcedure mkConstructor mkDestructor mkFunction mkOperatorOverload mkProcedure Explanation Class constructor method. Class destructor method. Class function Class procedure Class constructor Class Desctructor Function method Operator overloader Procedure method.
TOrdType = (otSByte,otUByte,otSWord,otUWord,otSLong,otULong)
Table 40.9: Enumeration values for type TOrdType Value otSByte otSLong otSWord otUByte otULong otUWord Explanation Signed byte Signed longint Signed word Unsigned byte Unsigned longing (Cardinal) Unsigned word
If the property is and ordinal type, then TOrdType determines the size and sign of the ordinal type: TParamFlag = (pfVar,pfConst,pfArray,pfAddress,pfReference,pfOut)
Table 40.10: Enumeration values for type TParamFlag Value pfAddress pfArray pfConst pfOut pfReference pfVar Explanation Parameter is passed by address Parameter is an array parameter Parameter is a const parameter (i.e. cannot be modied) Parameter is a string parameter Parameter is passed by reference Parameter is a var parameter (passed by reference)
TParamFlag describes a parameter. TParamFlags = Set of TParamFlag The kind of parameter for a method TProcInfoProc = procedure(PropInfo: PPropInfo) of object Property info callback method TPropData = packed record PropCount : Word; PropList : record _alignmentdummy : PtrInt; end; end
The TPropData record is not used, but is provided for completeness and compatibility with Delphi.
1637
TPropInfo = packed record PropType : PTypeInfo; GetProc : Pointer; SetProc : Pointer; StoredProc : Pointer; Index : Integer; Default : LongInt; NameIndex : SmallInt; PropProcs : Byte; Name : ShortString; end
The TPropInfo record describes one published property of a class. The property information of a class are stored as an array of TPropInfo records. The Name eld is stored not with 255 characters, but with just as many characters as required to store the name. TPropList = Array[0..65535] of PPropInfo Array of property information pointers TSetPropValue = procedure(Instance: TObject;const PropName: string; const Value: Variant) The callback function must set the property with name PropName of instance Instance to Value. TSetVariantProp = procedure(Instance: TObject;PropInfo: PPropInfo; const Value: Variant) The callback function must set the variant property with name PropName of instance to Value. TTypeData = packed record end
If the typeinfo kind is tkClass, then the property information follows the UnitName string, as an array of TPropInfo (1638) records. TTypeInfo = record Kind : TTypeKind; Name : ShortString; end
The TypeInfo function returns a pointer to a TTypeInfo record. Note that the Name eld is stored with as much bytes as needed to store the name, it is not padded to 255 characters. The type data immediatly follows the TTypeInfo record as a TTypeData (1638) record. TTypeKind = (tkUnknown,tkInteger,tkChar,tkEnumeration,tkFloat,tkSet, tkMethod,tkSString,tkLString,tkAString,tkWString,tkVariant, tkArray,tkRecord,tkInterface,tkClass,tkObject,tkWChar, tkBool,tkInt64,tkQWord,tkDynArray,tkInterfaceRaw,tkProcVar, tkUString,tkUChar,tkHelper) 1638
Table 40.11: Enumeration values for type TTypeKind Value tkArray tkAString tkBool tkChar tkClass tkDynArray tkEnumeration tkFloat tkHelper tkInt64 tkInteger tkInterface tkInterfaceRaw tkLString tkMethod tkObject tkProcVar tkQWord tkRecord tkSet tkSString tkUChar tkUnknown tkUString tkVariant tkWChar tkWString Explanation Array property. Ansistring property. Boolean property. Char property. Class property. Dynamical array property. Enumeration type property. Float property. Helper class type. Int64 property. Integer property. Interface property. Raw interface property. Longstring property. Method property. Object property. Procedural variable QWord property. Record property. Set property. Shortstring property. Unicode character Unknown property type. Unicode string Variant property. Widechar property. Widestring property.
Type of a property. TTypeKinds = Set of TTypeKind Set of TTypeKind (1639) enumeration. TVmtFieldEntry = packed record FieldOffset : PtrUInt; TypeIndex : Word; Name : ShortString; end
TVmtFieldEntry records are generated by the compiler for all elds of a record or class that have RTTI associated with them. They describe the eld as known to the compiler. TVmtFieldTable = packed record Count : Word; ClassTab : Pointer; Fields : Array[0..0] of TVmtFieldEntry; end
1639
TVmtFieldTable describes the elds for which RTTI was generated. A TVmtFieldTable entry is generated by the compiler in the RTI information, it is not something one creates manually. Basically it contains a list of TVmtFieldEntry (1639) values.
40.7
40.7.1
Synopsis: Return property information by property name. Declaration: function FindPropInfo(Instance: TObject;const PropName: string) : PPropInfo function FindPropInfo(Instance: TObject;const PropName: string; AKinds: TTypeKinds) : PPropInfo function FindPropInfo(AClass: TClass;const PropName: string) : PPropInfo function FindPropInfo(AClass: TClass;const PropName: string; AKinds: TTypeKinds) : PPropInfo Visibility: default Description: FindPropInfo examines the published property information of a class and returns a pointer to the property information for property PropName. The class to be examined can be specied in one of two ways: AClassa class pointer. Instancean instance of the class to be investigated. If the property does not exist, a EPropertyError exception will be raised. The GetPropInfo (1650) function has the same function as the FindPropInfo function, but returns Nil if the property does not exist. Errors: Specifying an invalid property name in PropName will result in an EPropertyError exception. See also: GetPropInfo (1650), GetPropList (1651), GetPropInfos (1650) Listing: ./typinfex/ex14.pp
Program example13 ; { T h i s program demonstrates t h e F i n d P r o p I n f o f u n c t i o n } { $mode o b j f p c } uses r t t i o b j , typinfo , sysutils ;
1640
O: = TMyTestObject . Create ; PI : = F i n d P r o p I n f o (O, B o o l e a n F i e l d ) ; Writeln ( FindPropInfo ( Instance , BooleanField ) PI : = F i n d P r o p I n f o (O. ClassType , B y t e F i e l d ) ; W r i t e l n ( F i n d P r o p I n f o ( Class , B y t e F i e l d ) Write ( F i n d P r o p I n f o ( Class , NonExistingProp ) Try PI : = F i n d P r o p I n f o (O, NonExistingProp ) ; except On E : E x c e p t i o n do W r i t e l n ( Caught e x c e p t i o n " ,E . ClassName , end ; O. Free ; end .
, PI ^ .Name ) ;
: , PI ^ .Name ) ; : );
" w i t h message :
,E . Message ) ;
40.7.2
GetEnumName
Synopsis: Return name of enumeration constant. Declaration: function GetEnumName(TypeInfo: PTypeInfo;Value: Integer) : string Visibility: default Description: GetEnumName scans the type information for the enumeration type described by TypeInfo and returns the name of the enumeration constant for the element with ordinal value equal to Value. If Value is out of range, the rst element of the enumeration type is returned. The result is lowercased, but this may change in the future. This can be used in combination with GetOrdProp to stream a property of an enumerated type. Errors: No check is done to determine whether TypeInfo really points to the type information for an enumerated type. See also: GetOrdProp (1649), GetEnumValue (1643) Listing: ./typinfex/ex9.pp
program example9 ; { T h i s program demonstrates t h e GetEnumName , GetEnumValue f u n c t i o n s } { $mode o b j f p c } uses r t t i o b j , t y p i n f o ; Var O : TMyTestObject ; T I : PTypeInfo ; begin O: = TMyTestObject . Create ; T I : = G et P ro p In f o (O, MyEnumField ) ^ . PropType ; W r i t e l n ( GetEnumName : ,GetEnumName ( TI , Ord (O. MyEnumField ) ) ) ; W r i t e l n ( GetEnumValue ( m e f i r s t ) : ,GetEnumName ( TI , GetEnumValue ( TI , m e f i r s t ) ) ) ; O. Free ; end .
1641
40.7.3
GetEnumNameCount
Synopsis: Return number of names in an enumerated type Declaration: function GetEnumNameCount(enum1: PTypeInfo) : SizeInt Visibility: default Description: GetEnumNameCount returns the number of values (names) in the enumerated type, described by enum1 Errors: No checking is done to see whether Enum1 is really type information of an enumerated type. See also: GetEnumValue (1643), GetEnumName (1641)
40.7.4
GetEnumProp
Synopsis: Return the value of an enumeration type property. Declaration: function GetEnumProp(Instance: TObject;const PropName: string) : string function GetEnumProp(Instance: TObject;const PropInfo: PPropInfo) : string Visibility: default Description: GetEnumProp returns the value of an property of an enumerated type and returns the name of the enumerated value for the objetc Instance. The property whose value must be returned can be specied by its property info in PropInfo or by its name in PropName Errors: No check is done to determine whether PropInfo really points to the property information for an enumerated type. Specifying an invalid property name in PropName will result in an EPropertyError exception. See also: SetEnumProp (1660), GetOrdProp (1649), GetStrProp (1654), GetInt64Prop (1644), GetMethodProp (1645), GetSetProp (1653), GetObjectProp (1647), GetEnumProp (1642) Listing: ./typinfex/ex2.pp
program example2 ; { T h i s program demonstrates t h e GetEnumProp f u n c t i o n } { $mode o b j f p c } uses r t t i o b j , t y p i n f o ; Var O : TMyTestObject ; PI : PPropInfo ; T I : PTypeInfo ; begin O: = TMyTestObject . Create ; PI : = G et P ro p In f o (O, MyEnumField ) ; T I : = PI ^ . PropType ; W r i t e l n ( Enum p r o p e r t y : ); W r i t e l n ( Value : ,GetEnumName ( TI , Ord (O. MyEnumField ) ) ) ; W r i t e l n ( Get ( name ) : , GetEnumProp (O, MyEnumField ) ) ; W r i t e l n ( Get ( p r o p i n f o ) : , GetEnumProp (O, PI ) ) ;
1642
SetEnumProp (O, MyEnumField , m e F i r s t ) ; W r i t e l n ( Set ( name , m e F i r s t ) : ,GetEnumName ( TI , Ord (O. MyEnumField ) ) ) ; SetEnumProp (O, PI , meSecond ) ; W r i t e l n ( Set ( p r o p i n f o , meSecond ) : ,GetEnumName ( TI , Ord (O. MyEnumField ) ) ) ; O. Free ; end .
40.7.5
GetEnumValue
Synopsis: Get ordinal value for enumerated type by name Declaration: function GetEnumValue(TypeInfo: PTypeInfo;const Name: string) : Integer Visibility: default Description: GetEnumValue scans the type information for the enumeration type described by TypeInfo and returns the ordinal value for the element in the enumerated type that has identier Name. The identier is searched in a case-insensitive manner. This can be used to set the value of enumerated properties from a stream. For an example, see GetEnumName (1641). Errors: If Name is not found in the list of enumerated values, then -1 is returned. No check is done whether TypeInfo points to the type information for an enumerated type. See also: GetEnumName (1641), SetOrdProp (1662)
40.7.6
GetFloatProp
Synopsis: Return value of oating point property Declaration: function GetFloatProp(Instance: TObject;PropInfo: PPropInfo) : Extended function GetFloatProp(Instance: TObject;const PropName: string) : Extended Visibility: default Description: GetFloatProp returns the value of the oat property described by PropInfo or with name Propname for the object Instance. All oat types are converted to extended. Errors: No checking is done whether Instance is non-nil, or whether PropInfo describes a valid oat property of Instance. Specifying an invalid property name in PropName will result in an EPropertyError exception. See also: SetFloatProp (1660), GetOrdProp (1649), GetStrProp (1654), GetInt64Prop (1644), GetMethodProp (1645), GetSetProp (1653), GetObjectProp (1647), GetEnumProp (1642) Listing: ./typinfex/ex4.pp
program example4 ; { T h i s program demonstrates t h e GetFloatProp f u n c t i o n } { $mode o b j f p c } uses r t t i o b j , t y p i n f o ;
1643
Var O : TMyTestObject ; PI : PPropInfo ; begin O: = TMyTestObject . Create ; W r i t e l n ( Real p r o p e r t y : ) ; PI : = G et P ro p In f o (O, R e a l F i e l d ) ; W r i t e l n ( Value : ,O. R e a l F i e l d ) ; W r i t e l n ( Get ( name ) : , GetFloatProp (O, R e a l F i e l d ) ) ; W r i t e l n ( Get ( p r o p i n f o ) : , GetFloatProp (O, PI ) ) ; S e t F l o a t P r o p (O, R e a l F i e l d , system . Pi ) ; W r i t e l n ( Set ( name , p i ) : ,O. R e a l F i e l d ) ; S e t F l o a t P r o p (O, PI , exp ( 1 ) ) ; W r i t e l n ( Set ( p r o p i n f o , e ) : ,O. R e a l F i e l d ) ; W r i t e l n ( Extended p r o p e r t y : ) ; PI : = G et P ro p In f o (O, E xt en de d Fi el d ) ; W r i t e l n ( Value : ,O. E xt e nd ed Fi e ld ) ; W r i t e l n ( Get ( name ) : , GetFloatProp (O, E xt e nd ed Fi e ld ) ) ; W r i t e l n ( Get ( p r o p i n f o ) : , GetFloatProp (O, PI ) ) ; S e t F l o a t P r o p (O, Ex te n de dF ie l d , system . Pi ) ; W r i t e l n ( Set ( name , p i ) : ,O. E xt e nd ed Fi e ld ) ; S e t F l o a t P r o p (O, PI , exp ( 1 ) ) ; W r i t e l n ( Set ( p r o p i n f o , e ) : ,O. E xt e nd ed Fi e ld ) ; O. Free ; end .
40.7.7
GetInt64Prop
Synopsis: return value of an Int64 property Declaration: function GetInt64Prop(Instance: TObject;PropInfo: PPropInfo) : Int64 function GetInt64Prop(Instance: TObject;const PropName: string) : Int64 Visibility: default Description: Publishing of Int64 properties is not yet supported by Free Pascal. This function is provided for Remark: Delphi compatibility only at the moment. GetInt64Prop returns the value of the property of type Int64 that is described by PropInfo or with name Propname for the object Instance. Errors: No checking is done whether Instance is non-nil, or whether PropInfo describes a valid Int64 property of Instance. Specifying an invalid property name in PropName will result in an EPropertyError exception See also: SetInt64Prop (1661), GetOrdProp (1649), GetStrProp (1654), GetFloatProp (1643), GetMethodProp (1645), GetSetProp (1653), GetObjectProp (1647), GetEnumProp (1642) Listing: ./typinfex/ex15.pp
program example15 ; { T h i s program demonstrates t h e GetInt64Prop f u n c t i o n } { $mode o b j f p c } uses r t t i o b j , t y p i n f o ;
1644
Var O : TMyTestObject ; PI : PPropInfo ; begin O: = TMyTestObject . Create ; Writeln ( Int64 property : ) ; PI : = G et P ro p In f o (O, I n t 6 4 F i e l d ) ; W r i t e l n ( Value : ,O. I n t 6 4 F i e l d ) ; W r i t e l n ( Get ( name ) : , GetInt64Prop (O, I n t 6 4 F i e l d ) ) ; W r i t e l n ( Get ( p r o p i n f o ) : , GetInt64Prop (O, PI ) ) ; S e t I n t 6 4 P r o p (O, I n t 6 4 F i e l d , 1 2 3 4 5 ) ; W r i t e l n ( Set ( name, 1 2 3 4 5 ) : ,O. I n t 6 4 F i e l d ) ; S e t I n t 6 4 P r o p (O, PI , 5 4 3 2 1 ) ; W r i t e l n ( Set ( p r o p i n f o , 5 4 3 2 1 ) : ,O. I n t 6 4 F i e l d ) ; O. Free ; end .
40.7.8
GetInterfaceProp
Synopsis: Return interface-typed property Declaration: function GetInterfaceProp(Instance: TObject;const PropName: string) : IInterface function GetInterfaceProp(Instance: TObject;PropInfo: PPropInfo) : IInterface Visibility: default Description: GetInterfaceProp returns the interface which the property described by PropInfo or with name Propname points to for object Instance. Errors: No checking is done whether Instance is non-nil, or whether PropInfo describes a valid method property of Instance. Specifying an invalid property name in PropName will result in an EPropertyError exception. See also: SetInterfaceProp (1661), GetOrdProp (1649), GetStrProp (1654), GetFloatProp (1643), GetInt64Prop (1644), GetSetProp (1653), GetObjectProp (1647), GetEnumProp (1642)
40.7.9
GetMethodProp
Synopsis: Return value of a method property Declaration: function GetMethodProp(Instance: TObject;PropInfo: PPropInfo) : TMethod function GetMethodProp(Instance: TObject;const PropName: string) : TMethod Visibility: default Description: GetMethodProp returns the method the property described by PropInfo or with name Propname for object Instance. The return type TMethod is dened in the SysUtils unit as: TMethod = packed record Code, Data: Pointer; end; 1645
Data points to the instance of the class with the method Code. Errors: No checking is done whether Instance is non-nil, or whether PropInfo describes a valid method property of Instance. Specifying an invalid property name in PropName will result in an EPropertyError exception. See also: SetMethodProp (1661), GetOrdProp (1649), GetStrProp (1654), GetFloatProp (1643), GetInt64Prop (1644), GetSetProp (1653), GetObjectProp (1647), GetEnumProp (1642) Listing: ./typinfex/ex6.pp
program example6 ; { T h i s program demonstrates t h e GetMethodProp f u n c t i o n } { $mode o b j f p c } uses r t t i o b j , t y p i n f o , s y s u t i l s ; Type T N o t i f y O b j e c t = Class ( TObject ) Procedure N o t i f i c a t i o n 1 ( Sender : TObject ) ; Procedure N o t i f i c a t i o n 2 ( Sender : TObject ) ; end ; Procedure T N o t i f y O b j e c t . N o t i f i c a t i o n 1 ( Sender : TObject ) ; begin Write ( Received n o t i f i c a t i o n 1 o f o b j e c t w i t h c l a s s : ) ; W r i t e l n ( Sender . ClassName ) ; end ; Procedure T N o t i f y O b j e c t . N o t i f i c a t i o n 2 ( Sender : TObject ) ; begin Write ( Received n o t i f i c a t i o n 2 o f o b j e c t w i t h c l a s s : ) ; W r i t e l n ( Sender . ClassName ) ; end ; Var O : PI NO M :
Procedure P r in t M et h o d ( Const M : TMethod ) ; begin I f (M. Data= P o i n t e r (NO ) ) Then I f (M. Code= P o i n t e r ( @TNotifyObject . N o t i f i c a t i o n 1 ) ) then Writeln ( N o t i f i c a t i o n 1 ) else I f (M. Code= P o i n t e r ( @TNotifyObject . N o t i f i c a t i o n 2 ) ) then Writeln ( N o t i f i c a t i o n 2 ) else begin Write ( Unknown method adress ( data : ) ; Write ( h e x S t r ( L o n g i n t (M. data ) , 8 ) ) ; W r i t e l n ( , code : , h e x s t r ( L o n g i n t (M. Code ) , 8 ) , ) ) ; end ;
1646
end ;
begin O: = TMyTestObject . Create ; NO: = T N o t i f y O b j e c t . Create ; O. N o t i f y E v e n t : =@NO. N o t i f i c a t i o n 1 ; PI : = G et P ro p In f o (O, N o t i f y E v e n t ) ; W r i t e l n ( Method p r o p e r t y : ) ; Write ( N o t i f y i n g : O. N o t i f y ; Write ( Get ( name ) : M: = GetMethodProp (O, N o t i f y E v e n t ) ; P r i n t M et h o d (M) ; Write ( N o t i f y i n g : O. N o t i f y ; Write ( Get ( p r o p i n f o ) : M: = GetMethodProp (O, PI ) ; P r i n t M et h o d (M) ; M: = TMethod (@NO. N o t i f i c a t i o n 2 ) ; SetMethodProp (O, N o t i f y E v e n t ,M) ; Write ( Set ( name , N o t i f i c a t i o n 2 ) : M: = GetMethodProp (O, PI ) ; P r i n t M et h o d (M) ; Write ( N o t i f y i n g : O. N o t i f y ; Write ( Set ( p r o p i n f o , N o t i f i c a t i o n 1 ) : M: = TMethod (@NO. N o t i f i c a t i o n 1 ) ; SetMethodProp (O, PI ,M) ; M: = GetMethodProp (O, PI ) ; P r i n t M et h o d (M) ; Write ( N o t i f y i n g : O. N o t i f y ; O. Free ; end .
); );
); );
);
); );
);
40.7.10
GetObjectProp
Synopsis: Return value of an object-type property. Declaration: function GetObjectProp(Instance: TObject;const PropName: string) : TObject function GetObjectProp(Instance: TObject;const PropName: string; MinClass: TClass) : TObject function GetObjectProp(Instance: TObject;PropInfo: PPropInfo) : TObject function GetObjectProp(Instance: TObject;PropInfo: PPropInfo; MinClass: TClass) : TObject Visibility: default Description: GetObjectProp returns the object which the property described by PropInfo with name Propname points to for object Instance. If MinClass is specied, then if the object is not descendent of class MinClass, then Nil is returned. Errors: No checking is done whether Instance is non-nil, or whether PropInfo describes a valid
1647
method property of Instance. Specifying an invalid property name in PropName will result in an EPropertyError exception. See also: SetMethodProp (1661), GetOrdProp (1649), GetStrProp (1654), GetFloatProp (1643), GetInt64Prop (1644), GetSetProp (1653), GetObjectProp (1647), GetEnumProp (1642) Listing: ./typinfex/ex5.pp
program example5 ; { T h i s program demonstrates t h e GetObjectProp f u n c t i o n } { $mode o b j f p c } uses r t t i o b j , t y p i n f o ; Var O : TMyTestObject ; PI : PPropInfo ; NO1,NO2 : TNamedObject ; begin O: = TMyTestObject . Create ; NO1: = TNamedObject . Create ; NO1. ObjectName : = F i r s t named o b j e c t ; NO2: = TNamedObject . Create ; NO2. ObjectName : = Second named o b j e c t ; O. O b j F i e l d : =NO1; Writeln ( Object property : ) ; PI : = G et P ro p In f o (O, O b j F i e l d ) ; Write ( P r o p e r t y c l a s s : ); W r i t e l n ( GetObjectPropClass (O, O b j F i e l d ) . ClassName ) ; Write ( Value : ); W r i t e l n ( (O. O b j F i e l d as TNamedObject ) . ObjectName ) ; Write ( Get ( name ) : ); W r i t e l n ( ( GetObjectProp (O, O b j F i e l d ) As TNamedObject ) . ObjectName ) ; Write ( Get ( p r o p i n f o ) : ); W r i t e l n ( ( GetObjectProp (O, PI , TObject ) as TNamedObject ) . ObjectName ) ; SetObjectProp (O, O b j F i e l d ,NO2 ) ; Write ( Set ( name ,NO2 ) : ); W r i t e l n ( (O. O b j F i e l d as TNamedObject ) . ObjectName ) ; SetObjectProp (O, PI ,NO1 ) ; Write ( Set ( p r o p i n f o ,NO1 ) : ) ; W r i t e l n ( (O. O b j F i e l d as TNamedObject ) . ObjectName ) ; O. Free ; end .
40.7.11
GetObjectPropClass
Synopsis: Return class of property. Declaration: function GetObjectPropClass(Instance: TObject;const PropName: string) : TClass function GetObjectPropClass(AClass: TClass;const PropName: string) : TClass Visibility: default 1648
Description: GetObjectPropClass returns the declared class of the property with name PropName. This may not be the actual class of the property value. For an example, see GetObjectProp (1647). Errors: No checking is done whether Instance is non-nil. Specifying an invalid property name in PropName will result in an EPropertyError exception. See also: SetMethodProp (1661), GetOrdProp (1649), GetStrProp (1654), GetFloatProp (1643), GetInt64Prop (1644)
40.7.12
GetOrdProp
Synopsis: Get the value of an ordinal property Declaration: function GetOrdProp(Instance: TObject;PropInfo: PPropInfo) : Int64 function GetOrdProp(Instance: TObject;const PropName: string) : Int64 Visibility: default Description: GetOrdProp returns the value of the ordinal property described by PropInfo or with name PropName for the object Instance. The value is returned as a longint, which should be typecasted to the needed type. Ordinal properties that can be retrieved include: Integers and subranges of integersThe value of the integer will be returned. Enumerated types and subranges of enumerated typesThe ordinal value of the enumerated type will be returned. SetsIf the base type of the set has less than 31 possible values. If a bit is set in the return value, then the corresponding element of the base ordinal class of the set type must be included in the set. Errors: No checking is done whether Instance is non-nil, or whether PropInfo describes a valid ordinal property of Instance Specifying an invalid property name in PropName will result in an EPropertyError exception. See also: SetOrdProp (1662), GetStrProp (1654), GetFloatProp (1643), GetInt64Prop (1644), GetMethodProp (1645), GetSetProp (1653), GetObjectProp (1647), GetEnumProp (1642) Listing: ./typinfex/ex1.pp
program example1 ; { T h i s program demonstrates t h e GetOrdProp f u n c t i o n } { $mode o b j f p c } uses r t t i o b j , t y p i n f o ; Var O : TMyTestObject ; PI : PPropInfo ; begin O: = TMyTestObject . Create ; W r i t e l n ( Boolean p r o p e r t y W r i t e l n ( Value W r i t e l n ( Ord ( Value )
1649
W r i t e l n ( Get ( name ) : , GetOrdProp (O, B o o l e a n F i e l d ) ) ; PI : = G et P ro p In f o (O, B o o l e a n F i e l d ) ; W r i t e l n ( Get ( p r o p i n f o ) : , GetOrdProp (O, PI ) ) ; SetOrdProp (O, B o o l e a n F i e l d , Ord ( False ) ) ; W r i t e l n ( Set ( name , f a l s e ) : ,O. B o o l e a n F i e l d ) ; SetOrdProp (O, PI , Ord ( True ) ) ; W r i t e l n ( Set ( p r o p i n f o , t r u e ) : ,O. B o o l e a n F i e l d ) ; O. Free ; end .
40.7.13
GetPropInfo
Synopsis: Return property type information, by property name. Declaration: function GetPropInfo(TypeInfo: PTypeInfo;const PropName: string) : PPropInfo function GetPropInfo(TypeInfo: PTypeInfo;const PropName: string; AKinds: TTypeKinds) : PPropInfo function GetPropInfo(Instance: TObject;const PropName: string) : PPropInfo function GetPropInfo(Instance: TObject;const PropName: string; AKinds: TTypeKinds) : PPropInfo function GetPropInfo(AClass: TClass;const PropName: string) : PPropInfo function GetPropInfo(AClass: TClass;const PropName: string; AKinds: TTypeKinds) : PPropInfo Visibility: default Description: GetPropInfo returns a pointer to the TPropInfo record for a the PropName property of a class. The class to examine can be specied in one of three ways: InstanceAn instance of the class. AClassA class pointer to the class. TypeInfoA pointer to the type information of the class. In each of these three ways, if AKinds is specied, if the property has TypeKind which is not included in Akinds, Nil will be returned. For an example, see most of the other functions. Errors: If the property PropName does not exist, Nil is returned. See also: GetPropInfos (1650), GetPropList (1651)
40.7.14
GetPropInfos
Synopsis: Return a list of published properties. Declaration: procedure GetPropInfos(TypeInfo: PTypeInfo;PropList: PPropList) Visibility: default Description: GetPropInfos stores pointers to the property information of all published properties of a class with class info TypeInfo in the list pointed to by Proplist. The PropList pointer must point to a memory location that contains enough space to hold all properties of the class and its parent classes. 1650
Errors: No checks are done to see whether PropList points to a memory area that is big enough to hold all pointers. See also: GetPropInfo (1650), GetPropList (1651) Listing: ./typinfex/ex12.pp
Program example12 ; { T h i s program demonstrates t h e Ge t Pr o pI nf o s f u n c t i o n } uses rttiobj , typinfo ;
Var O : TMyTestObject ; PT : PTypeData ; PI : PTypeInfo ; I , J : Longint ; PP : P P r o p L i s t ; p r I : PPropInfo ; begin O: = TMyTestObject . Create ; PI : =O. C l a s s I n f o ; PT: = GetTypeData ( PI ) ; W r i t e l n ( P r o p e r t y Count : ,PT ^ . PropCount ) ; GetMem ( PP, PT ^ . PropCount SizeOf ( P o i n t e r ) ) ; G e t P r o pI n fo s ( PI , PP ) ; For I : = 0 to PT ^ . PropCount 1 do begin With PP ^ [ i ] ^ do begin Write ( P r o p e r t y , i + 1 : 3 , : ,name : 3 0 ) ; w r i t e l n ( Type : , TypeNames [ t y p i n f o . PropType (O,Name ) ] ) ; end ; end ; FreeMem (PP ) ; O. Free ; end .
40.7.15
GetPropList
Synopsis: Return a list of a certain type of published properties. Declaration: function GetPropList(TypeInfo: PTypeInfo;TypeKinds: TTypeKinds; PropList: PPropList;Sorted: Boolean) : LongInt function GetPropList(TypeInfo: PTypeInfo;out PropList: PPropList) : SizeInt function GetPropList(AClass: TClass;out PropList: PPropList) : Integer function GetPropList(Instance: TObject;out PropList: PPropList) : Integer Visibility: default
1651
Description: GetPropList stores pointers to property information of the class with class info TypeInfo for properties of kind TypeKinds in the list pointed to by Proplist. PropList must contain enough space to hold all properties. The function returns the number of pointers that matched the criteria and were stored in PropList. Errors: No checks are done to see whether PropList points to a memory area that is big enough to hold all pointers. See also: GetPropInfos (1650), GetPropInfo (1650) Listing: ./typinfex/ex13.pp
Program example13 ; { T h i s program demonstrates t h e G e t P r o p L i s t f u n c t i o n } uses rttiobj , typinfo ;
Var O : TMyTestObject ; PT : PTypeData ; PI : PTypeInfo ; I , J : Longint ; PP : P P r o p L i s t ; p r I : PPropInfo ; begin O: = TMyTestObject . Create ; PI : =O. C l a s s I n f o ; PT: = GetTypeData ( PI ) ; W r i t e l n ( T o t a l p r o p e r t y Count : ,PT ^ . PropCount ) ; GetMem ( PP, PT ^ . PropCount SizeOf ( P o i n t e r ) ) ; J : = G e t P r o p L i s t ( PI , OrdinalTypes , PP ) ; W r i t e l n ( O r d i n a l p r o p e r t y Count : , J ) ; For I : = 0 to J 1 do begin With PP ^ [ i ] ^ do begin Write ( P r o p e r t y , i + 1 : 3 , : ,name : 3 0 ) ; w r i t e l n ( Type : , TypeNames [ t y p i n f o . PropType (O,Name ) ] ) ; end ; end ; FreeMem (PP ) ; O. Free ; end .
40.7.16
GetPropValue
Synopsis: Get property value as a string. Declaration: function GetPropValue(Instance: TObject;const PropName: string) : Variant function GetPropValue(Instance: TObject;const PropName: string; PreferStrings: Boolean) : Variant
1652
Visibility: default Description: Due to missing Variant support, GetPropValue is not yet implemented. The declaration is provided for compatibility with Delphi.
40.7.17
GetRawInterfaceProp
Synopsis: Get a raw (CORBA) interface property. Declaration: function GetRawInterfaceProp(Instance: TObject;const PropName: string) : Pointer function GetRawInterfaceProp(Instance: TObject;PropInfo: PPropInfo) : Pointer Visibility: default Description: GetRawInterfaceProp can be used to retrieve the value of a published CORBA interface property with name PropName from object Instance. Alternatively, the required property information can be specied by PropInfo instead of the property name. In difference with the GetInterfaceProp (1645) function, no reference counting is done. Errors: If the property PropName does not exist, an EPropertyError exception is raised. See also: GetInterfaceProp (1645), SetRawInterfaceProp (1663)
40.7.18
GetSetProp
Synopsis: Return the value of a set property. Declaration: function GetSetProp(Instance: TObject;const PropName: string) : string function GetSetProp(Instance: TObject;const PropName: string; Brackets: Boolean) : string function GetSetProp(Instance: TObject;const PropInfo: PPropInfo; Brackets: Boolean) : string Visibility: default Description: GetSetProp returns the contents of a set property as a string. The property to be returned can be specied by its name in PropName or by its property information in PropInfo. The returned set is a string representation of the elements in the set as returned by SetToString (1664). The Brackets option can be used to enclose the string representation in square brackets. Errors: No checking is done whether Instance is non-nil, or whether PropInfo describes a valid ordinal property of Instance Specifying an invalid property name in PropName will result in an EPropertyError exception. See also: SetSetProp (1663), GetStrProp (1654), GetFloatProp (1643), GetInt64Prop (1644), GetMethodProp (1645) Listing: ./typinfex/ex7.pp
program example7 ; { T h i s program demonstrates t h e GetSetProp f u n c t i o n } { $mode o b j f p c }
1653
uses r t t i o b j , t y p i n f o ; Var O : TMyTestObject ; PI : PPropInfo ; Function S e t A s S t r i n g ( ASet : TMyEnums ) : S t r i n g ; Var i : TmyEnum ; begin r e s u l t := ; For i : = m e f i r s t to m e t h i r d do I f i i n ASet then begin I f ( Result <> ) then Result := Result+ , ; R e s u l t : = R e s u l t +MyEnumNames [ i ] ; end ; end ; Var S : TMyEnums ; begin O: = TMyTestObject . Create ; O. S e t F i e l d : = [ m e f i r s t , meSecond , meThird ] ; W r i t e l n ( Set p r o p e r t y : ); W r i t e l n ( Value : W r i t e l n ( Ord ( Value ) : W r i t e l n ( Get ( name ) : PI : = G et P ro p In f o (O, S e t F i e l d ) ; W r i t e l n ( Get ( p r o p i n f o ) : S : = [ meFirst , meThird ] ; SetOrdProp (O, S e t F i e l d , I n t e g e r (S ) ) ; Write ( Set ( name , [ m e f i r s t , m e t h i r d ] ) : W r i t e l n ( S e t A s S t r i n g (O. S e t F i e l d ) ) ; S : = [ meSecond ] ; SetOrdProp (O, PI , I n t e g e r (S ) ) ; Write ( Set ( p r o p i n f o , [ meSecond ] ) : W r i t e l n ( S e t A s S t r i n g (O. S e t F i e l d ) ) ; O. Free ; end .
);
);
40.7.19
GetStrProp
Synopsis: Return the value of a string property. Declaration: function GetStrProp(Instance: TObject;PropInfo: PPropInfo) : Ansistring function GetStrProp(Instance: TObject;const PropName: string) : string Visibility: default Description: GetStrProp returns the value of the string property described by PropInfo or with name PropName for object Instance.
1654
Errors: No checking is done whether Instance is non-nil, or whether PropInfo describes a valid string property of Instance. Specifying an invalid property name in PropName will result in an EPropertyError exception. See also: SetStrProp (1664), SetWideStrProp (1666), GetOrdProp (1649), GetFloatProp (1643), GetInt64Prop (1644), GetMethodProp (1645) Listing: ./typinfex/ex3.pp
program example3 ; { T h i s program demonstrates t h e GetStrProp f u n c t i o n } { $mode o b j f p c } uses r t t i o b j , t y p i n f o ; Var O : TMyTestObject ; PI : PPropInfo ; begin O: = TMyTestObject . Create ; PI : = G et P ro p In f o (O, A n s i S t r i n g F i e l d ) ; Writeln ( S t r i n g property : ) ; W r i t e l n ( Value : ,O. A n s i S t r i n g F i e l d ) ; W r i t e l n ( Get ( name ) : , GetStrProp (O, A n s i S t r i n g F i e l d ) ) ; W r i t e l n ( Get ( p r o p i n f o ) : , GetStrProp (O, PI ) ) ; S e t S t r P r op (O, A n s i S t r i n g F i e l d , F i r s t ) ; W r i t e l n ( Set ( name , F i r s t ) : ,O. A n s i S t r i n g F i e l d ) ; S e t S t r P r op (O, PI , Second ) ; W r i t e l n ( Set ( p r o p i n f o , Second ) : ,O. A n s i S t r i n g F i e l d ) ; O. Free ; end .
40.7.20
GetTypeData
Synopsis: Return a pointer to type data, based on type information. Declaration: function GetTypeData(TypeInfo: PTypeInfo) : PTypeData Visibility: default Description: GetTypeData returns a pointer to the TTypeData record that follows after the TTypeInfo record pointed to by TypeInfo. It essentially skips the Kind and Name elds in the TTypeInfo record. Errors: None.
40.7.21
GetUnicodeStrProp
Synopsis: Get UnicodeString-valued property Declaration: function GetUnicodeStrProp(Instance: TObject;PropInfo: PPropInfo) : UnicodeString function GetUnicodeStrProp(Instance: TObject;const PropName: string) : UnicodeString 1655
Visibility: default Description: GetUnicodeStrProp returns the UnicodeString property from Instance, where the property is identied by the PropInfo pointer or the PropertyName. Errors: If no property of the indicated name exists, or the value is not a unicode string, an exception will occur. See also: GetStrProp (1654), SetUnicodeStrProp (1665)
40.7.22
GetVariantProp
Synopsis: Return the value of a variant property. Declaration: function GetVariantProp(Instance: TObject;PropInfo: PPropInfo) : Variant function GetVariantProp(Instance: TObject;const PropName: string) : Variant Visibility: default Description: Due to mising Variant support, the GetVariantProp function is not yet implemented. Provided for Delphi compatibility only. See also: SetVariantProp (1666)
40.7.23
GetWideStrProp
Synopsis: Read a widestring property Declaration: function GetWideStrProp(Instance: TObject;PropInfo: PPropInfo) : WideString function GetWideStrProp(Instance: TObject;const PropName: string) : WideString Visibility: default Description: GetWideStrProp returns the value of the widestring property described by PropInfo or with name PropName for object Instance. Errors: No checking is done whether Instance is non-nil, or whether PropInfo describes a valid widestring property of Instance. Specifying an invalid property name in PropName will result in an EPropertyError exception. See also: GetStrProp (1654), SetWideStrProp (1666), GetOrdProp (1649), GetFloatProp (1643), GetInt64Prop (1644), GetMethodProp (1645)
40.7.24
IsPublishedProp
Synopsis: Check whether a published property exists. Declaration: function IsPublishedProp(Instance: TObject;const PropName: string) : Boolean function IsPublishedProp(AClass: TClass;const PropName: string) : Boolean Visibility: default
1656
Description: IsPublishedProp returns true if a class has a published property with name PropName. The class can be speced in one of two ways: AClassA class pointer to the class. InstanceAn instance of the class. Errors: No checks are done to ensure Instance or AClass are valid pointers. Specifying an invalid property name in PropName will result in an EPropertyError exception. See also: IsStoredProp (1657), PropIsType (1658) Listing: ./typinfex/ex10.pp
program example10 ; { T h i s program demonstrates t h e I s P u b l i s h e d P r o p f u n c t i o n } { $mode o b j f p c } uses r t t i o b j , t y p i n f o ; Var O : TMyTestObject ; PI : PPropInfo ; begin O: = TMyTestObject . Create ; Writeln ( Property t e s t s : ); Write ( I s P u b l i s h e d P r o p (O, B o o l e a n F i e l d ) : ); W r i t e l n ( I s P u b l i s h e d P r o p (O, B o o l e a n F i e l d ) ) ; Write ( I s P u b l i s h e d P r o p ( Class , B o o l e a n F i e l d ) : ) ; W r i t e l n ( I s P u b l i s h e d P r o p (O. ClassType , B o o l e a n F i e l d ) ) ; Write ( I s P u b l i s h e d P r o p (O, SomeField ) : ); W r i t e l n ( I s P u b l i s h e d P r o p (O, SomeField ) ) ; Write ( I s P u b l i s h e d P r o p ( Class , SomeField ) : ); W r i t e l n ( I s P u b l i s h e d P r o p (O. ClassType , SomeField ) ) ; O. Free ; end .
40.7.25
IsStoredProp
Synopsis: Check whether a property is stored. Declaration: function IsStoredProp(Instance: TObject;PropInfo: PPropInfo) : Boolean function IsStoredProp(Instance: TObject;const PropName: string) : Boolean Visibility: default Description: IsStoredProp returns True if the Stored modier evaluates to True for the property described by PropInfo or with name PropName for object Instance. It returns False otherwise. If the function returns True, this indicates that the property should be written when streaming the object Instance. If there was no stored modier in the declaration of the property, True will be returned.
1657
Errors: No checking is done whether Instance is non-nil, or whether PropInfo describes a valid property of Instance. Specifying an invalid property name in PropName will result in an EPropertyError exception. See also: IsPublishedProp (1656), PropIsType (1658) Listing: ./typinfex/ex11.pp
program example11 ; { T h i s program demonstrates t h e I s S t o r e d P r o p f u n c t i o n } { $mode o b j f p c } uses r t t i o b j , t y p i n f o ; Var O : TMyTestObject ; PI : PPropInfo ; begin O: = TMyTestObject . Create ; W r i t e l n ( Stored t e s t s : ); Write ( I s S t o r e d P r o p (O, S t o r e d I n t e g e r C o n s t F a l s e ) : W r i t e l n ( I s S t o r e d P r o p (O, S t o r e d I n t e g e r C o n s t F a l s e ) ) ; Write ( I s S t o r e d P r o p (O, S t o r e d I n t e g e r C o n s t T r u e ) : W r i t e l n ( I s S t o r e d P r o p (O, S t o r e d I n t e g e r C o n s t T r u e ) ) ; Write ( I s S t o r e d P r o p (O, St ored Int ege rMe thod ) : W r i t e l n ( I s S t o r e d P r o p (O, St ored Int ege rMe thod ) ) ; Write ( I s S t o r e d P r o p (O, S t o r e d I n t e g e r V i r t u a l M e t h o d ) : W r i t e l n ( I s S t o r e d P r o p (O, S t o r e d I n t e g e r V i r t u a l M e t h o d O. Free ; end .
); ); ); ); ));
40.7.26
PropIsType
Synopsis: Check the type of a published property. Declaration: function PropIsType(Instance: TObject;const PropName: string; TypeKind: TTypeKind) : Boolean function PropIsType(AClass: TClass;const PropName: string; TypeKind: TTypeKind) : Boolean Visibility: default Description: PropIsType returns True if the property with name PropName has type TypeKind. It returns False otherwise. The class to be examined can be specied in one of two ways: AClassA class pointer. InstanceAn instance of the class. Errors: No checks are done to ensure Instance or AClass are valid pointers.Specifying an invalid property name in PropName will result in an EPropertyError exception. See also: IsPublishedProp (1656), IsStoredProp (1657), PropType (1659) Listing: ./typinfex/ex16.pp 1658
program example16 ; { T h i s program demonstrates t h e PropIsType f u n c t i o n } { $mode o b j f p c } uses r t t i o b j , t y p i n f o ; Var O : TMyTestObject ; begin O: = TMyTestObject . Create ; Writeln ( Property t e s t s : ); Write ( PropIsType (O, BooleanField , t k B o o l ) : ); W r i t e l n ( PropIsType (O, B o o l e a n F i e l d , t k B o o l ) ) ; Write ( PropIsType ( Class , BooleanField , t k B o o l ) : ) ; W r i t e l n ( PropIsType (O. ClassType , B o o l e a n F i e l d , t k B o o l ) ) ; Write ( PropIsType (O, B y t e F i e l d , t k S t r i n g ) : ); W r i t e l n ( PropisType (O, B y t e F i e l d , t k S t r i n g ) ) ; Write ( PropIsType ( Class , B y t e F i e l d , t k S t r i n g ) : ) ; W r i t e l n ( PropIsType (O. ClassType , B y t e F i e l d , t k S t r i n g ) ) ; O. Free ; end .
40.7.27
PropType
Synopsis: Return the type of a property Declaration: function PropType(Instance: TObject;const PropName: string) : TTypeKind function PropType(AClass: TClass;const PropName: string) : TTypeKind Visibility: default Description: Proptype returns the type of the property PropName for a class. The class to be examined can be specied in one of 2 ways: AClassA class pointer. InstanceAn instance of the class. Errors: No checks are done to ensure Instance or AClass are valid pointers. Specifying an invalid property name in PropName will result in an EPropertyError exception. See also: IsPublishedProp (1656), IsStoredProp (1657), PropIsType (1658) Listing: ./typinfex/ex17.pp
program example17 ; { T h i s program demonstrates t h e PropType f u n c t i o n } { $mode o b j f p c } uses r t t i o b j , t y p i n f o ; Var
1659
O : TMyTestObject ; begin O: = TMyTestObject . Create ; Writeln ( Property t e s t s : ); Write ( PropType (O, B o o l e a n F i e l d ) : ); W r i t e l n ( TypeNames [ PropType (O, B o o l e a n F i e l d ) ] ) ; Write ( PropType ( Class , B o o l e a n F i e l d ) : ) ; W r i t e l n ( TypeNames [ PropType (O. ClassType , B o o l e a n F i e l d ) ] ) ; Write ( PropType (O, B y t e F i e l d ) : ); W r i t e l n ( TypeNames [ PropType (O, B y t e F i e l d ) ] ) ; Write ( PropType ( Class , B y t e F i e l d ) : ); W r i t e l n ( TypeNames [ PropType (O. ClassType , B y t e F i e l d ) ] ) ; O. Free ; end .
40.7.28
SetEnumProp
Synopsis: Set value of an enumerated-type property Declaration: procedure SetEnumProp(Instance: TObject;const PropName: string; const Value: string) procedure SetEnumProp(Instance: TObject;const PropInfo: PPropInfo; const Value: string) Visibility: default Description: SetEnumProp sets the property described by PropInfo or with name PropName to Value. Value must be a string with the name of the enumerate value, i.e. it can be used as an argument to GetEnumValue (1643). For an example, see GetEnumProp (1642). Errors: No checks are done to ensure Instance or PropInfo are valid pointers. Specifying an invalid property name in PropName will result in an EPropertyError exception. See also: GetEnumProp (1642), SetStrProp (1664), SetFloatProp (1660), SetInt64Prop (1661), SetMethodProp (1661)
40.7.29
SetFloatProp
Synopsis: Set value of a oat property. Declaration: procedure SetFloatProp(Instance: TObject;const PropName: string; Value: Extended) procedure SetFloatProp(Instance: TObject;PropInfo: PPropInfo; Value: Extended) Visibility: default Description: SetFloatProp assigns Value to the property described by PropInfo or with name Propname for the object Instance. For an example, see GetFloatProp (1643). Errors: No checking is done whether Instance is non-nil, or whether PropInfo describes a valid oat property of Instance. Specifying an invalid property name in PropName will result in an EPropertyError exception. 1660
See also: GetFloatProp (1643), SetOrdProp (1662), SetStrProp (1664), SetInt64Prop (1661), SetMethodProp (1661)
40.7.30
SetInt64Prop
Synopsis: Set value of a Int64 property Declaration: procedure SetInt64Prop(Instance: TObject;PropInfo: PPropInfo; const Value: Int64) procedure SetInt64Prop(Instance: TObject;const PropName: string; const Value: Int64) Visibility: default Description: SetInt64Prop assigns Value to the property of type Int64 that is described by PropInfo or with name Propname for the object Instance. For an example, see GetInt64Prop (1644). Errors: No checking is done whether Instance is non-nil, or whether PropInfo describes a valid Int64 property of Instance. Specifying an invalid property name in PropName will result in an EPropertyError exception. See also: GetInt64Prop (1644), GetMethodProp (1645), SetOrdProp (1662), SetStrProp (1664), SetFloatProp (1660)
40.7.31
SetInterfaceProp
Synopsis: Set interface-valued property Declaration: procedure SetInterfaceProp(Instance: TObject;const PropName: string; const Value: IInterface) procedure SetInterfaceProp(Instance: TObject;PropInfo: PPropInfo; const Value: IInterface) Visibility: default Description: SetInterfaceProp assigns Value to the the object property described by PropInfo or with name Propname for the object Instance. Errors: No checking is done whether Instance is non-nil, or whether PropInfo describes a valid interface property of Instance. Specifying an invalid property name in PropName will result in an EPropertyError exception. See also: GetInterfaceProp (1645), SetObjectProp (1662), SetOrdProp (1662), SetStrProp (1664), SetFloatProp (1660), SetInt64Prop (1661), SetMethodProp (1661)
40.7.32
SetMethodProp
Synopsis: Set the value of a method property Declaration: procedure SetMethodProp(Instance: TObject;PropInfo: PPropInfo; const Value: TMethod) procedure SetMethodProp(Instance: TObject;const PropName: string; const Value: TMethod) Visibility: default 1661
Description: SetMethodProp assigns Value to the method the property described by PropInfo or with name Propname for object Instance. The type TMethod of the Value parameter is dened in the SysUtils unit as: TMethod = packed record Code, Data: Pointer; end; Data should point to the instance of the class with the method Code. For an example, see GetMethodProp (1645). Errors: No checking is done whether Instance is non-nil, or whether PropInfo describes a valid method property of Instance. Specifying an invalid property name in PropName will result in an EPropertyError exception. See also: GetMethodProp (1645), SetOrdProp (1662), SetStrProp (1664), SetFloatProp (1660), SetInt64Prop (1661)
40.7.33
SetObjectProp
Synopsis: Set the value of an object-type property. Declaration: procedure SetObjectProp(Instance: TObject;const PropName: string; Value: TObject) procedure SetObjectProp(Instance: TObject;PropInfo: PPropInfo; Value: TObject) Visibility: default Description: SetObjectProp assigns Value to the the object property described by PropInfo or with name Propname for the object Instance. For an example, see GetObjectProp (1647). Errors: No checking is done whether Instance is non-nil, or whether PropInfo describes a valid object property of Instance. Specifying an invalid property name in PropName will result in an EPropertyError exception. See also: GetObjectProp (1647), SetOrdProp (1662), SetStrProp (1664), SetFloatProp (1660), SetInt64Prop (1661), SetMethodProp (1661)
40.7.34
SetOrdProp
Synopsis: Set value of an ordinal property Declaration: procedure SetOrdProp(Instance: TObject;PropInfo: PPropInfo;Value: Int64) procedure SetOrdProp(Instance: TObject;const PropName: string; Value: Int64) Visibility: default Description: SetOrdProp assigns Value to the the ordinal property described by PropInfo or with name Propname for the object Instance. Ordinal properties that can be set include: Integers and subranges of integersThe actual value of the integer must be passed. 1662
Enumerated types and subranges of enumerated typesThe ordinal value of the enumerated type must be passed. Subrange typesof integers or enumerated types. Here the ordinal value must be passed. SetsIf the base type of the set has less than 31 possible values. For each possible value; the corresponding bit of Value must be set. For an example, see GetOrdProp (1649). Errors: No checking is done whether Instance is non-nil, or whether PropInfo describes a valid ordinal property of Instance. No range checking is performed. Specifying an invalid property name in PropName will result in an EPropertyError exception. See also: GetOrdProp (1649), SetStrProp (1664), SetFloatProp (1660), SetInt64Prop (1661), SetMethodProp (1661)
40.7.35
SetPropValue
Synopsis: Set property value as variant Declaration: procedure SetPropValue(Instance: TObject;const PropName: string; const Value: Variant) Visibility: default Description: Due to missing Variant support, this function is not yet implemented; it is provided for Delphi compatibility only.
40.7.36
SetRawInterfaceProp
Synopsis: Set a raw (CORBA) interface property. Declaration: procedure SetRawInterfaceProp(Instance: TObject;const PropName: string; const Value: Pointer) procedure SetRawInterfaceProp(Instance: TObject;PropInfo: PPropInfo; const Value: Pointer) Visibility: default Description: SetRawInterfaceProp can be used to set the value of a published CORBA interface with name PropName from object Instance to Value. Alternatively, the required property information can be specied by PropInfo instead of the property name. In difference with the SetInterfaceProp (1661) procedure, no reference counting is done. Errors: If the property PropName does not exist, an EPropertyError exception is raised. See also: SetInterfaceProp (1661), GetRawInterfaceProp (1653)
40.7.37
SetSetProp
Synopsis: Set value of set-typed property. Declaration: procedure SetSetProp(Instance: TObject;const PropName: string; const Value: string) procedure SetSetProp(Instance: TObject;const PropInfo: PPropInfo; const Value: string)
1663
Visibility: default Description: SetSetProp sets the property specied by PropInfo or PropName for object Instance to Value. Value is a string which contains a comma-separated list of values, each value being a string-representation of the enumerated value that should be included in the set. The value should be accepted by the StringToSet (1666) function. The value can be formed using the SetToString (1664) function. For an example, see GetSetProp (1653). Errors: No checking is done whether Instance is non-nil, or whether PropInfo describes a valid ordinal property of Instance. No range checking is performed. Specifying an invalid property name in PropName will result in an EPropertyError exception. See also: GetSetProp (1653), SetOrdProp (1662), SetStrProp (1664), SetFloatProp (1660), SetInt64Prop (1661), SetMethodProp (1661), SetToString (1664), StringToSet (1666)
40.7.38
SetStrProp
Synopsis: Set value of a string property Declaration: procedure SetStrProp(Instance: TObject;const PropName: string; const Value: AnsiString) procedure SetStrProp(Instance: TObject;PropInfo: PPropInfo; const Value: Ansistring) Visibility: default Description: SetStrProp assigns Value to the string property described by PropInfo or with name Propname for object Instance. For an example, see GetStrProp (1654) Errors: No checking is done whether Instance is non-nil, or whether PropInfo describes a valid string property of Instance. Specifying an invalid property name in PropName will result in an EPropertyError exception. See also: GetStrProp (1654), SetWideStrProp (1666), SetOrdProp (1662), SetFloatProp (1660), SetInt64Prop (1661), SetMethodProp (1661)
40.7.39
SetToString
Synopsis: Convert set to a string description Declaration: function SetToString(TypeInfo: PTypeInfo;Value: Integer; Brackets: Boolean) : string function SetToString(PropInfo: PPropInfo;Value: Integer; Brackets: Boolean) : string function SetToString(PropInfo: PPropInfo;Value: Integer) : string Visibility: default Description: SetToString takes an integer representation of a set (as received e.g. by GetOrdProp) and turns it into a string representing the elements in the set, based on the type information found in the PropInfo property information. By default, the string representation is not surrounded by square brackets. Setting the Brackets parameter to True will surround the string representation with brackets. The function returns the string representation of the set. 1664
Errors: No checking is done to see whether PropInfo points to valid property information. See also: GetEnumName (1641), GetEnumValue (1643), StringToSet (1666) Listing: ./typinfex/ex18.pp
program example18 ; { T h i s program demonstrates t h e S e t T o S t r i n g f u n c t i o n } { $mode o b j f p c } uses r t t i o b j , t y p i n f o ; Var O : TMyTestObject ; PI : PPropInfo ; I : longint ; begin O: = TMyTestObject . Create ; PI : = G et P ro p In f o (O, S e t F i e l d ) ; O. S e t F i e l d : = [ m e f i r s t , meSecond , meThird ] ; I : = GetOrdProp (O, PI ) ; W r i t e l n ( Set p r o p e r t y t o s t r i n g : ) ; W r i t e l n ( Value : , S e t T o S t r i n g ( PI , I , False ) ) ; O. S e t F i e l d : = [ m e f i r s t , meSecond ] ; I : = GetOrdProp (O, PI ) ; W r i t e l n ( Value : , S e t T o S t r i n g ( PI , I , True ) ) ; I : = S t r i n g T o S e t ( PI , m e f i r s t ) ; SetOrdProp (O, PI , I ) ; I : = GetOrdProp (O, PI ) ; W r i t e l n ( Value : , S e t T o S t r i n g ( PI , I , False ) ) ; I : = S t r i n g T o S e t ( PI , [ mesecond , m e t h i r d ] ) ; SetOrdProp (O, PI , I ) ; I : = GetOrdProp (O, PI ) ; W r i t e l n ( Value : , S e t T o S t r i n g ( PI , I , True ) ) ; O. Free ; end .
40.7.40
SetUnicodeStrProp
Synopsis: Set UnicodeString-valued property Declaration: procedure SetUnicodeStrProp(Instance: TObject;const PropName: string; const Value: UnicodeString) procedure SetUnicodeStrProp(Instance: TObject;PropInfo: PPropInfo; const Value: UnicodeString) Visibility: default Description: SetUnicodeStrProp sets the UnicodeString property from Instance to Value, where the property is identied by the PropInfo pointer or the PropertyName. Errors: If no property of the indicated name exists, or it is not of type unicodestring, an exception will occur. See also: SetStrProp (1664), GetUnicodeStrProp (1655)
1665
40.7.41
SetVariantProp
Synopsis: Set value of a variant property Declaration: procedure SetVariantProp(Instance: TObject;const PropName: string; const Value: Variant) procedure SetVariantProp(Instance: TObject;PropInfo: PPropInfo; const Value: Variant) Visibility: default Description: Due to missing Variant support, this function is not yet implemented. Provided for Delphi compatibility only.
40.7.42
SetWideStrProp
Synopsis: Set a widestring property Declaration: procedure SetWideStrProp(Instance: TObject;const PropName: string; const Value: WideString) procedure SetWideStrProp(Instance: TObject;PropInfo: PPropInfo; const Value: WideString) Visibility: default Description: SetWideStrProp assigns Value to the widestring property described by PropInfo or with name Propname for object Instance. Errors: No checking is done whether Instance is non-nil, or whether PropInfo describes a valid widestring property of Instance. Specifying an invalid property name in PropName will result in an EPropertyError exception. See also: GetWideStrProp (1656), SetStrProp (1664), SetOrdProp (1662), SetFloatProp (1660), SetInt64Prop (1661), SetMethodProp (1661)
40.7.43
StringToSet
Synopsis: Convert string description to a set. Declaration: function StringToSet(PropInfo: PPropInfo;const Value: string) : Integer function StringToSet(TypeInfo: PTypeInfo;const Value: string) : Integer Visibility: default Description: StringToSet converts the string representation of a set in Value to a integer representation of the set, using the property information found in PropInfo. This property information should point to the property information of a set property. The function returns the integer representation of the set. (i.e, the set value, typecast to an integer) The string representation can be surrounded with square brackets, and must consist of the names of the elements of the base type of the set. The base type of the set should be an enumerated type. The elements should be separated by commas, and may be surrounded by spaces. each of the names will be fed to the GetEnumValue (1643) function. For an example, see SetToString (1664). Errors: No checking is done to see whether PropInfo points to valid property information. If a wrong name is given for an enumerated value, then an EPropertyError will be raised. See also: GetEnumName (1641), GetEnumValue (1643), SetToString (1664) 1666
40.8
40.8.1
EPropertyConvertError
Description
EPropertyConvertError is not used in the Free Pascal implementation of the typinfo unit, but is declared for Delphi compatibility.
40.9
40.9.1
EPropertyError
Description
1667
Chapter 41
41.2
41.2.1
ARG_MAX = UnixType . ARG_MAX Maximum number of arguments to a program. fs_ext = $137d File system type (StatFS (1702)): (ext) Extended fs_ext2 = $ef53 File system type (StatFS (1702)): (ext2) Second extended fs_iso = $9660 File system type (StatFS (1702)): ISO 9660 fs_minix = $137f File system type (StatFS (1702)): Minix fs_minix_30 = $138f 1668
File system type (StatFS (1702)): Minix 3.0 fs_minux_V2 = $2468 File system type (StatFS (1702)): Minix V2 fs_msdos = $4d44 File system type (StatFS (1702)): MSDOS (FAT) fs_nfs = $6969 File system type (StatFS (1702)): NFS fs_old_ext2 = $ef51 File system type (StatFS (1702)): (ext2) Old second extended fs_proc = $9fa0 File system type (StatFS (1702)): PROC fs fs_xia = $012FD16D File system type (StatFS (1702)): XIA IOCtl_TCGETS = $5401 IOCTL call number: get Terminal Control settings LOCK_EX = 2 FpFLock (1692) Exclusive lock LOCK_NB = 4 FpFLock (1692) Non-blocking operation LOCK_SH = 1 FpFLock (1692) Shared lock LOCK_UN = 8 FpFLock (1692) unlock MAP_FAILED = baseunix . MAP_FAILED Error return value for mmap: mmap operation failed. MAP_FIXED = baseunix . MAP_FIXED 1669
#rtl.baseunix.FpMMap (165) map type: Interpret addr exactly MAP_PRIVATE = baseunix . MAP_PRIVATE #rtl.baseunix.FpMMap (165) map type: Changes are private MAP_SHARED = baseunix . MAP_SHARED #rtl.baseunix.FpMMap (165) map type: Share changes MAP_TYPE = baseunix . MAP_TYPE #rtl.baseunix.FpMMap (165) map type: Bitmask for type of mapping MS_ASYNC = 1 Asynchronous operation ag for msync call MS_INVALIDATE = 2 Invalidate other mappings of le ag for msync call MS_SYNC = 4 Synchronous operation ag for msync call NAME_MAX = UnixType . NAME_MAX Maximum lename length. Open_Accmode = 3 Bitmask to determine access mode in open ags. Open_Append = 2 shl 9 File open mode: Append to le Open_Creat = 1 shl 6 File open mode: Create if le does not yet exist. Open_Direct = 4 shl 12 File open mode: Minimize caching effects Open_Directory = 2 shl 15 File open mode: File must be directory. Open_Excl = 2 shl 6 1670
File open mode: Open exclusively Open_LargeFile = 1 shl 15 File open mode: Open for 64-bit I/O Open_NDelay = Open_NonBlock File open mode: Alias for Open_NonBlock (1671) Open_NoCtty = 4 shl 6 File open mode: No TTY control. Open_NoFollow = 4 shl 15 File open mode: Fail if le is symbolic link. Open_NonBlock = 4 shl 9 File open mode: Open in non-blocking mode Open_RdOnly = 0 File open mode: Read only Open_RdWr = 2 File open mode: Read/Write Open_Sync = 1 shl 12 File open mode: Write to disc at once Open_Trunc = 1 shl 9 File open mode: Truncate le to length 0 Open_WrOnly = 1 File open mode: Write only PATH_MAX = UnixType . PATH_MAX Maximum pathname length. PRIO_PGRP = UnixType . PRIO_PGRP #rtl.baseunix.fpGetPriority (159) option: Get process group priority. PRIO_PROCESS = UnixType . PRIO_PROCESS 1671
#rtl.baseunix.fpGetPriority (159) option: Get process priority. PRIO_USER = UnixType . PRIO_USER #rtl.baseunix.fpGetPriority (159) option: Get user priority. PROT_EXEC = baseunix . PROT_EXEC #rtl.baseunix.FpMMap (165) memory access: page can be executed PROT_NONE = baseunix . PROT_NONE #rtl.baseunix.FpMMap (165) memory access: page can not be accessed PROT_READ = baseunix . PROT_READ #rtl.baseunix.FpMMap (165) memory access: page can be read PROT_WRITE = baseunix . PROT_WRITE #rtl.baseunix.FpMMap (165) memory access: page can be written P_IN = 1 Input le descriptor of pipe pair. P_OUT = 2 Output le descriptor of pipe pair. SIG_MAXSIG = UnixType . SIG_MAXSIG Maximum system signal number. STAT_IFBLK = $6000 File (#rtl.baseunix.stat (136) record) mode: Block device STAT_IFCHR = $2000 File (#rtl.baseunix.stat (136) record) mode: Character device STAT_IFDIR = $4000 File (#rtl.baseunix.stat (136) record) mode: Directory STAT_IFIFO = $1000 File (#rtl.baseunix.stat (136) record) mode: FIFO STAT_IFLNK = $a000 1672
File (#rtl.baseunix.stat (136) record) mode: Link STAT_IFMT = $f000 File (#rtl.baseunix.stat (136) record) mode: File type bit mask STAT_IFREG = $8000 File (#rtl.baseunix.stat (136) record) mode: Regular le STAT_IFSOCK = $c000 File (#rtl.baseunix.stat (136) record) mode: Socket STAT_IRGRP = STAT_IROTH shl 3 File (#rtl.baseunix.stat (136) record) mode: Group read permission STAT_IROTH = $4 File (#rtl.baseunix.stat (136) record) mode: Other read permission STAT_IRUSR = STAT_IROTH shl 6 File (#rtl.baseunix.stat (136) record) mode: Owner read permission STAT_IRWXG = STAT_IRWXO shl 3 File (#rtl.baseunix.stat (136) record) mode: Group permission bits mask STAT_IRWXO = $7 File (#rtl.baseunix.stat (136) record) mode: Other permission bits mask STAT_IRWXU = STAT_IRWXO shl 6 File (#rtl.baseunix.stat (136) record) mode: Owner permission bits mask STAT_ISGID = $0400 File (#rtl.baseunix.stat (136) record) mode: GID bit set STAT_ISUID = $0800 File (#rtl.baseunix.stat (136) record) mode: UID bit set STAT_ISVTX = $0200 File (#rtl.baseunix.stat (136) record) mode: Sticky bit set STAT_IWGRP = STAT_IWOTH shl 3 1673
File (#rtl.baseunix.stat (136) record) mode: Group write permission STAT_IWOTH = $2 File (#rtl.baseunix.stat (136) record) mode: Other write permission STAT_IWUSR = STAT_IWOTH shl 6 File (#rtl.baseunix.stat (136) record) mode: Owner write permission STAT_IXGRP = STAT_IXOTH shl 3 File (#rtl.baseunix.stat (136) record) mode: Others execute permission STAT_IXOTH = $1 File (#rtl.baseunix.stat (136) record) mode: Others execute permission STAT_IXUSR = STAT_IXOTH shl 6 File (#rtl.baseunix.stat (136) record) mode: Others execute permission SYS_NMLN = UnixType . SYS_NMLN Max system name length. Wait_Any = -1 #rtl.baseunix.fpWaitPID (193): Wait on any process Wait_Clone = $80000000 #rtl.baseunix.fpWaitPID (193): Wait on clone processes only. Wait_MyPGRP = 0 #rtl.baseunix.fpWaitPID (193): Wait processes from current process group Wait_NoHang = 1 #rtl.baseunix.fpWaitPID (193): Do not wait Wait_UnTraced = 2 #rtl.baseunix.fpWaitPID (193): Also report stopped but untraced processes
1674
41.2.2
Types
cbool = UnixType.cbool Boolean type cchar = UnixType.cchar Alias for #rtl.UnixType.cchar (1707) cdouble = UnixType.cdouble Double precision real format. cfloat = UnixType.cfloat Floating-point real format cint = UnixType.cint C type: integer (natural size) cint16 = UnixType.cint16 C type: 16 bits sized, signed integer. cint32 = UnixType.cint32 C type: 32 bits sized, signed integer. cint64 = UnixType.cint64 C type: 64 bits sized, signed integer. cint8 = UnixType.cint8 C type: 8 bits sized, signed integer. clock_t = UnixType.clock_t Clock ticks type clong = UnixType.clong C type: long signed integer (double sized) clonglong = UnixType.clonglong C type: 64-bit (double long) signed integer. coff_t = UnixType.TOff 1675
character offset type. cschar = UnixType.cschar Signed character type cshort = UnixType.cshort C type: short signed integer (half sized) csigned = UnixType.csigned csigned is an alias for cint (1675). csint = UnixType.csint Signed integer csize_t = UnixType.size_t Character size type. cslong = UnixType.cslong The size is CPU dependent. cslonglong = UnixType.cslonglong cslonglong is an alias for clonglong (1675). csshort = UnixType.csshort Short signed integer type cuchar = UnixType.cuchar Alias for #rtl.UnixType.cuchar (1708) cuint = UnixType.cuint C type: unsigned integer (natural size) cuint16 = UnixType.cuint16 C type: 16 bits sized, unsigned integer. cuint32 = UnixType.cuint32 C type: 32 bits sized, unsigned integer. cuint64 = UnixType.cuint64 1676
C type: 64 bits sized, unsigned integer. cuint8 = UnixType.cuint8 C type: 8 bits sized, unsigned integer. culong = UnixType.culong C type: long unsigned integer (double sized) culonglong = UnixType.culonglong C type: 64-bit (double long) unsigned integer. cunsigned = UnixType.cunsigned Alias for #rtl.unixtype.cunsigned (1709) cushort = UnixType.cushort C type: short unsigned integer (half sized) dev_t = UnixType.dev_t Device descriptor type. gid_t = UnixType.gid_t Group ID type. ino_t = UnixType.ino_t Inode type. mode_t = UnixType.mode_t Inode mode type. nlink_t = UnixType.nlink_t Number of links type. off_t = UnixType.off_t Offset type. pcbool = UnixType.pcbool Pointer to boolean type cbool (1675) pcchar = UnixType.pcchar 1677
Alias for #rtl.UnixType.pcchar (1710) pcdouble = UnixType.pcdouble Pointer to cdouble (125) type. pcfloat = UnixType.pcfloat Pointer to coat (125) type. pcint = UnixType.pcint Pointer to cInt (1675) type. pcint16 = UnixType.pcint16 Pointer to 16-bit signed integer type pcint32 = UnixType.pcint32 Pointer to signed 32-bit integer type pcint64 = UnixType.pcint64 Pointer to signed 64-bit integer type pcint8 = UnixType.pcint8 Pointer to 8-bits signed integer type pClock = UnixType.pClock Pointer to TClock (1682) type. pclong = UnixType.pclong Pointer to cLong (1675) type. pclonglong = UnixType.pclonglong Pointer to longlong type. pcschar = UnixType.pcschar Pointer to character type cschar (1676). pcshort = UnixType.pcshort Pointer to cShort (1676) type. pcsigned = UnixType.pcsigned 1678
Pointer to signed integer type csigned (1676). pcsint = UnixType.pcsint Pointer to signed integer type csint (1676) pcsize_t = UnixType.psize_t Pointer to character size type pcsize_t. pcslong = UnixType.pcslong Pointer ot the signed long cslong (1676) pcslonglong = UnixType.pcslonglong Pointer to Signed longlong type cslonglong (1676) pcsshort = UnixType.pcsshort Pointer to short signed integer type csshort (1676) pcuchar = UnixType.pcuchar Alias for #rtl.UnixType.pcuchar (1711) pcuint = UnixType.pcuint Pointer to cUInt (1676) type. pcuint16 = UnixType.pcuint16 Pointer to 16-bit unsigned integer type pcuint32 = UnixType.pcuint32 Pointer to unsigned 32-bit integer type pcuint64 = UnixType.pcuint64 Pointer to unsigned 64-bit integer type pcuint8 = UnixType.pcuint8 Pointer to 8-bits unsigned integer type pculong = UnixType.pculong Pointer to cuLong (1677) type. pculonglong = UnixType.pculonglong 1679
Unsigned longlong type pcunsigned = UnixType.pcunsigned Alias for #rtl.unixtype.pcunsigned (1712) pcushort = UnixType.pcushort Pointer to cuShort (1677) type. pDev = UnixType.pDev Pointer to TDev (1682) type. pGid = UnixType.pGid Pointer to TGid (1682) type. pid_t = UnixType.pid_t Process ID type. pIno = UnixType.pIno Pointer to TIno (1682) type. pMode = UnixType.pMode Pointer to TMode (1683) type. pnLink = UnixType.pnLink Pointer to TnLink (1683) type. pOff = UnixType.pOff Pointer to TOff (1683) type. pPid = UnixType.pPid Pointer to TPid (1683) type. pSize = UnixType.pSize Pointer to TSize (1683) type. pSize_t = UnixType.pSize_t Pointer to type Size_t. pSocklen = UnixType.pSocklen 1680
Pointer to TSockLen (1683) type. psSize = UnixType.psSize Pointer to TsSize (1683) type pstatfs = UnixType.PStatFs Pointer to statfs type pthread_cond_t = UnixType.pthread_cond_t Thread conditional variable type. pthread_mutex_t = UnixType.pthread_mutex_t Thread mutex type. pthread_t = UnixType.pthread_t Posix thread type. pTime = UnixType.pTime Pointer to TTime (1683) type. ptimespec = UnixType.ptimespec Pointer to timespec (1682) type. ptimeval = UnixType.ptimeval Pointer to timeval (1682) type. ptime_t = UnixType.ptime_t Pointer to time_t (1682) type. pUid = UnixType.pUid Pointer to TUid (1683) type. size_t = UnixType.size_t Size specication type. socklen_t = UnixType.socklen_t Socket address length type. ssize_t = UnixType.ssize_t 1681
Small size type. TClock = UnixType.TClock Alias for clock_t (1675) type. TDev = UnixType.TDev Alias for dev_t (1677) type. TFSearchOption = (NoCurrentDirectory,CurrentDirectoryFirst, CurrentDirectoryLast)
Table 41.2: Enumeration values for type TFSearchOption Value CurrentDirectoryFirst CurrentDirectoryLast NoCurrentDirectory Explanation Search the current directory rst, before all directories in the search path. Search the current directory last, after all directories in the search path Do not search the current directory unless it is specied in the search path.
Describes the search strategy used by FSearch (1694) TGid = UnixType.TGid Alias for gid_t (1677) type. timespec = UnixType.timespec Short time specication type. timeval = UnixType.timeval Time specication type. time_t = UnixType.time_t Time span type TIno = UnixType.TIno Alias for ino_t (1677) type. TIOCtlRequest = UnixType.TIOCtlRequest Alias for the TIOCtlRequest (1717) type in unixtypes TMode = UnixType.TMode 1682
Alias for mode_t (1677) type. TnLink = UnixType.TnLink Alias for nlink_t (1677) type. TOff = UnixType.TOff Alias for off_t (1677) type. TPid = UnixType.TPid Alias for pid_t (1680) type. Tpipe = baseunix.tfildes Array describing a pipe pair of ledescriptors. TSize = UnixType.TSize Alias for size_t (1681) type TSocklen = UnixType.TSocklen Alias for socklen_t (1681) type. TsSize = UnixType.TsSize Alias for ssize_t (1682) type tstatfs = UnixType.TStatFs Record describing a le system in the fpstatfs (1693) call. TTime = UnixType.TTime Alias for TTime (1683) type. Ttimespec = UnixType.Ttimespec Alias for TimeSpec (1682) type. TTimeVal = UnixType.TTimeVal Alias for timeval (1682) type. TUid = UnixType.TUid Alias for uid_t (1683) type. uid_t = UnixType.uid_t User ID type 1683
41.2.3
Variables
tzdaylight : Boolean Indicates whether daylight savings time is active. tzname : Array[boolean] of PChar Timezone name.
41.3
41.3.1
Synopsis: Create a set of pipe le handlers Declaration: function AssignPipe(var pipe_in: cint;var pipe_out: cint) : cint function AssignPipe(var pipe_in: text;var pipe_out: text) : cint function AssignPipe(var pipe_in: File;var pipe_out: File) : cint Visibility: default Description: AssignePipe creates a pipe, i.e. two le objects, one for input, one for output. What is written to Pipe_out, can be read from Pipe_in. This call is overloaded. The in and out pipe can take three forms: an typed or untyped le, a text le or a le descriptor. If a text le is passed then reading and writing from/to the pipe can be done through the usual Readln(Pipe_in,...) and Writeln(Pipe_out,...) procedures. The function returns True if everything went succesfully, False otherwise. Errors: In case the function fails and returns False, extended error information is returned by the FpGetErrno (156) function: sys_emleToo many le descriptors for this process. sys_enleThe system le table is full. See also: POpen (1698), #rtl.baseunix.FpMkFifo (165) Listing: ./unixex/ex36.pp
Program Example36 ; { Program t o demonstrate t h e AssignPipe f u n c t i o n . } Uses BaseUnix , Unix ; Var p i p i , p i p o : Text ; s : String ; begin W r i t e l n ( A s s i g n i n g Pipes . ) ; I f a s s i g n p i p e ( p i p i , p i p o ) < >0 then Writeln ( Error assigning pipes ! , fpgeterr no ) ; W r i t e l n ( W r i t i n g t o pipe , and f l u s h i n g . ) ; W r i t e l n ( pipo , T h i s i s a t e x t s t r i n g ) ; c l o s e ( p i p o ) ;
1684
W r i t e l n ( Reading from p i p e . ) ; While not eof ( p i p i ) do begin Readln ( p i p i , s ) ; W r i t e l n ( Read from p i p e : , s ) ; end ; close ( p i p i ) ; w r i t e l n ( Closed p i p e s . ) ; writeln end .
41.3.2
AssignStream
Synopsis: Assign stream for in and output to a program Declaration: function AssignStream(var StreamIn: text;var Streamout: text; const Prog: ansiString; const args: Array of ansistring) : cint function AssignStream(var StreamIn: text;var Streamout: text; var streamerr: text;const Prog: ansiString; const args: Array of ansistring) : cint Visibility: default Description: AssignStream creates a 2 or 3 pipes, i.e. two (or three) le objects, one for input, one for output,(and one for standard error) the other ends of these pipes are connected to standard input and output (and standard error) of Prog. Prog is the path of a program (including path). The options for the program can be specied in Args. What is written to StreamOut, will go to the standard input of Prog. Whatever is written by Prog to its standard output can be read from StreamIn. Whatever is written by Prog to its standard error read from StreamErr, if present. Reading and writing happens through the usual Readln(StreamIn,...) and Writeln (StreamOut,...) procedures. Remark: You should not use Reset or Rewrite on a le opened with POpen. This will close the le before re-opening it again, thereby closing the connection with the program. The function returns the process ID of the spawned process, or -1 in case of error. Errors: Extended error information is returned by the FpGetErrno (156) function. sys_emleToo many le descriptors for this process. sys_enleThe system le table is full. Other errors include the ones by the fork and exec programs See also: AssignPipe (1684), POpen (1698) Listing: ./unixex/ex38.pp
Program Example38 ; { Program t o demonstrate t h e AssignStream f u n c t i o n . } Uses BaseUnix , Unix ; Var Si , So : Text ;
1685
S : String ; i : longint ; begin i f not ( paramstr ( 1 ) = son ) then begin W r i t e l n ( C a l l i n g son ) ; Assignstream ( Si , So , . / ex38 , [ son ] ) ; i f f p g e t e r r n o < >0 then begin w r i t e l n ( AssignStream f a i l e d ! ) ; halt ( 1 ) ; end ; W r i t e l n ( Speaking t o son ) ; For i : = 1 to 1 0 do begin w r i t e l n ( so , H e l l o son ! ) ; i f i o r e s u l t < >0 then w r i t e l n ( Can t speak t o son . . . ) ; end ; For i : = 1 to 3 do w r i t e l n ( so , H e l l o chap ! ) ; c l o s e ( so ) ; while not eof ( s i ) do begin readln ( s i , s ) ; w r i t e l n ( F a t h e r : Son s a i d : ,S ) ; end ; W r i t e l n ( Stopped c o n v e r s a t i o n ) ; Close ( S i ) ; W r i t e l n ( Put down phone ) ; end Else begin W r i t e l n ( T h i s i s t h e son ) ; While not eof ( i n p u t ) do begin readln ( s ) ; i f pos ( H e l l o son ! ,S) < >0 then W r i t e l n ( H e l l o Dad ! ) else w r i t e l n ( Who are you ? ) ; end ; close ( output ) ; end end .
41.3.3
FpExecL
Synopsis: Execute process (using argument list, environment) Declaration: function FpExecL(const PathName: AnsiString; const S: Array of AnsiString) : cint Visibility: default Description: FpExecL replaces the currently running program with the program, specied in PathName. S is an array of command options. The executable in PathName must be an absolute pathname. The current process environment is passed to the program. On success, FpExecL does not return. 1686
Errors: Extended error information is returned by the FpGetErrno (156) function: sys_eaccesFile is not a regular le, or has no execute permission. A compononent of the path has no search permission. sys_epermThe le system is mounted noexec. sys_e2bigArgument list too big. sys_enoexecThe magic number in the le is incorrect. sys_enoentThe le does not exist. sys_enomemNot enough memory for kernel, or to split command line. sys_enotdirA component of the path is not a directory. sys_eloopThe path contains a circular reference (via symlinks). See also: FpExecve (150), FpExecv (1689), FpExecvp (1690), FpExecle (1687), FpExeclp (1688), FpFork (153) Listing: ./unixex/ex77.pp
Program Example77 ; { Program t o demonstrate t h e FPExecL f u n c t i o n . } Uses Unix , s t r i n g s ; begin { Execute l s l , w i t h c u r r e n t environment . } { l s i s NOT looked f o r i n PATH environment v a r i a b l e . } FpExecL ( / b i n / l s , [ l ] ) ; end .
41.3.4
FpExecLE
Synopsis: Execute process (using argument list, environment) Declaration: function FpExecLE(const PathName: AnsiString; const S: Array of AnsiString;MyEnv: PPChar) : cint Visibility: default Description: FpExecLE replaces the currently running program with the program, specied in PathName. S is an array of command options. The executable in PathName must be an absolute pathname. The environment in MyEnv is passed to the program. On success, FpExecLE does not return. Errors: Extended error information is returned by the FpGetErrno (156) function: sys_eaccesFile is not a regular le, or has no execute permission. A compononent of the path has no search permission. sys_epermThe le system is mounted noexec. sys_e2bigArgument list too big. sys_enoexecThe magic number in the le is incorrect. sys_enoentThe le does not exist. sys_enomemNot enough memory for kernel, or to split command line. sys_enotdirA component of the path is not a directory. 1687
sys_eloopThe path contains a circular reference (via symlinks). See also: FpExecve (150), FpExecv (1689), FpExecvp (1690), FpExecl (1686), FpExeclp (1688), FpFork (153) Listing: ./unixex/ex11.pp
Program Example11 ; { Program t o demonstrate t h e Execle f u n c t i o n . } Uses Unix , s t r i n g s ; begin { Execute l s l , w i t h c u r r e n t environment . } { l s i s NOT looked f o r i n PATH environment v a r i a b l e . } { envp i s d e f i n e d i n t h e system u n i t . } Execle ( / b i n / l s l , envp ) ; end .
41.3.5
FpExecLP
Synopsis: Execute process (using argument list, environment; search path) Declaration: function FpExecLP(const PathName: AnsiString; const S: Array of AnsiString) : cint Visibility: default Description: FpExecLP replaces the currently running program with the program, specied in PathName. S is an array of command options. The executable in PathName is searched in the path, if it isnt an absolute lename. The current environment is passed to the program. On success, FpExecLP does not return. Errors: Extended error information is returned by the FpGetErrno (156) function: sys_eaccesFile is not a regular le, or has no execute permission. A compononent of the path has no search permission. sys_epermThe le system is mounted noexec. sys_e2bigArgument list too big. sys_enoexecThe magic number in the le is incorrect. sys_enoentThe le does not exist. sys_enomemNot enough memory for kernel, or to split command line. sys_enotdirA component of the path is not a directory. sys_eloopThe path contains a circular reference (via symlinks). See also: FpExecve (150), FpExecv (1689), FpExecvp (1690), FpExecle (1687), FpExecl (1686), FpFork (153) Listing: ./unixex/ex76.pp
1688
Program Example76 ; { Program t o demonstrate t h e FpExeclp f u n c t i o n . } Uses Unix , s t r i n g s ; begin { Execute l s l , w i t h c u r r e n t environment . } { l s i s looked f o r i n PATH environment v a r i a b l e . } { envp i s d e f i n e d i n t h e system u n i t . } FpExeclp ( l s , [ l ] ) ; end .
41.3.6
FpExecLPE
Synopsis: Execute a program in the path, and pass it an environment Declaration: function FpExecLPE(const PathName: AnsiString; const S: Array of AnsiString;env: PPChar) : cint Visibility: default Description: FpExecLPE does the same as FpExecLP (1688), but additionally it species the environment for the new process in env, a pointer to a null-terminated array of null-terminated strings. Errors: On success, this function does not return. See also: FpExecLP (1688), FpExecLE (1687)
41.3.7
FpExecV
Synopsis: Execute process Declaration: function FpExecV(const PathName: AnsiString;args: PPChar) : cint Visibility: default Description: FpExecV replaces the currently running program with the program, specied in PathName. It gives the program the options in args. This is a pointer to an array of pointers to null-terminated strings. The last pointer in this array should be nil. The current environment is passed to the program. On success, FpExecV does not return. Errors: Extended error information is returned by the FpGetErrno (156) function: sys_eaccesFile is not a regular le, or has no execute permission. A compononent of the path has no search permission. sys_epermThe le system is mounted noexec. sys_e2bigArgument list too big. sys_enoexecThe magic number in the le is incorrect. sys_enoentThe le does not exist. sys_enomemNot enough memory for kernel. sys_enotdirA component of the path is not a directory. sys_eloopThe path contains a circular reference (via symlinks). 1689
See also: FpExecve (150), FpExecvp (1690), FpExecle (1687), FpExecl (1686), FpExeclp (1688), FpFork (153) Listing: ./unixex/ex8.pp
Program Example8 ; { Program t o demonstrate t h e Execv f u n c t i o n . } Uses Unix , s t r i n g s ; Const Arg0 : PChar = / b i n / l s ; Arg1 : Pchar = l ; Var PP : PPchar ;
begin GetMem ( PP, 3 SizeOf ( Pchar ) ) ; PP [ 0 ] : = Arg0 ; PP [ 1 ] : = Arg1 ; PP [ 3 ] : = N i l ; { Execute / b i n / l s l , w i t h c u r r e n t environment } fpExecv ( / b i n / l s , pp ) ; end .
41.3.8
FpExecVP
Synopsis: Execute process, search path Declaration: function FpExecVP(const PathName: AnsiString;args: PPChar) : cint Visibility: default Description: FpExecVP replaces the currently running program with the program, specied in PathName. The executable in path is searched in the path, if it isnt an absolute lename. It gives the program the options in args. This is a pointer to an array of pointers to null-terminated strings. The last pointer in this array should be nil. The current environment is passed to the program. On success, execvp does not return. Errors: Extended error information is returned by the FpGetErrno (156) function: sys_eaccesFile is not a regular le, or has no execute permission. A compononent of the path has no search permission. sys_epermThe le system is mounted noexec. sys_e2bigArgument list too big. sys_enoexecThe magic number in the le is incorrect. sys_enoentThe le does not exist. sys_enomemNot enough memory for kernel. sys_enotdirA component of the path is not a directory. sys_eloopThe path contains a circular reference (via symlinks). See also: FpExecve (150), FpExecv (1689), FpExecle (1687), FpExecl (1686), FpExeclp (1688), FpFork (153)
1690
Listing: ./unixex/ex79.pp
Program Example79 ; { Program t o demonstrate t h e FpExecVP f u n c t i o n . } Uses Unix , s t r i n g s ; Const Arg0 : PChar = l s ; Arg1 : Pchar = l ; Var PP : PPchar ;
begin GetMem ( PP, 3 SizeOf ( Pchar ) ) ; PP [ 0 ] : = Arg0 ; PP [ 1 ] : = Arg1 ; PP [ 2 ] : = N i l ; { Execute l s l , w i t h c u r r e n t environment . } { l s i s looked f o r i n PATH environment v a r i a b l e . } fpExecvp ( l s , pp ) ; end .
41.3.9
FpExecVPE
Synopsis: Execute process, search path using environment Declaration: function FpExecVPE(const PathName: AnsiString;args: PPChar;env: PPChar) : cint Visibility: default Description: FpExecVP replaces the currently running program with the program, specied in PathName. The executable in path is searched in the path, if it isnt an absolute lename. It gives the program the options in args. This is a pointer to an array of pointers to null-terminated strings. The last pointer in this array should be nil. The environment in Env is passed to the program. On success, execvp does not return. Errors: Extended error information is returned by the FpGetErrno (156) function: sys_eaccesFile is not a regular le, or has no execute permission. A compononent of the path has no search permission. sys_epermThe le system is mounted noexec. sys_e2bigArgument list too big. sys_enoexecThe magic number in the le is incorrect. sys_enoentThe le does not exist. sys_enomemNot enough memory for kernel. sys_enotdirA component of the path is not a directory. sys_eloopThe path contains a circular reference (via symlinks). See also: FpExecve (150), FpExecv (1689), FpExecle (1687), FpExecl (1686), FpExeclp (1688), FpFork (153) Listing: ./unixex/ex79.pp 1691
Program Example79 ; { Program t o demonstrate t h e FpExecVP f u n c t i o n . } Uses Unix , s t r i n g s ; Const Arg0 : PChar = l s ; Arg1 : Pchar = l ; Var PP : PPchar ;
begin GetMem ( PP, 3 SizeOf ( Pchar ) ) ; PP [ 0 ] : = Arg0 ; PP [ 1 ] : = Arg1 ; PP [ 2 ] : = N i l ; { Execute l s l , w i t h c u r r e n t environment . } { l s i s looked f o r i n PATH environment v a r i a b l e . } fpExecvp ( l s , pp ) ; end .
41.3.10
fpFlock
Synopsis: Lock a le (advisory lock) Declaration: function fpFlock(var T: text;mode: cint) : cint function fpFlock(var F: File;mode: cint) : cint function fpFlock(fd: cint;mode: cint) : cint Visibility: default Description: FpFLock implements le locking. it sets or removes a lock on the le F. F can be of type Text or File, or it can be a linux ledescriptor (a longint) Mode can be one of the following constants : LOCK_SHsets a shared lock. LOCK_EXsets an exclusive lock. LOCK_UNunlocks the le. LOCK_NBThis can be OR-ed together with the other. If this is done the application doesnt block when locking. The function returns zero if successful, a nonzero return value indicates an error. Errors: Extended error information is returned by the FpGetErrno (156) function: See also: #rtl.baseunix.FpFcntl (151), FSync (1696)
41.3.11
fpfStatFS
Synopsis: Retrieve lesystem information. Declaration: function fpfStatFS(Fd: cint;Info: pstatfs) : cint Visibility: default
1692
Description: fpStatFS returns in Info information about the lesystem on which the open le descriptor fd resides. Info is of type tstatfs. The function returns 0 if the call was succesfull, or an error code if the call failed. Errors: On error, a non-zero error code is returned See also: fpStatFS (1693), #rtl.baseunix.fpfStat (153)
41.3.12
fpfsync
Synopsis: Flush cached data to disk Declaration: function fpfsync(fd: cint) : cint Visibility: default Description: fpfsync forces the system to write all paged (in-memory) changes to le descriptor fd to disk. If the call was succesful, 0 is returned. Errors: On error, a nonzero error-code is returned.
41.3.13
fpgettimeofday
Synopsis: Return kernel time of day in GMT Declaration: function fpgettimeofday(tp: ptimeval;tzp: ptimezone) : cint Visibility: default Description: FpGetTimeOfDay returns the number of seconds since 00:00, January 1 1970, GMT in a timeval record. This time NOT corrected any way, not taking into account timezones, daylight savings time and so on. It is simply a wrapper to the kernel system call. Errors: None.
41.3.14
fpStatFS
Synopsis: Retrieve lesystem information. Declaration: function fpStatFS(Path: PChar;Info: pstatfs) : cint Visibility: default Description: fpStatFS returns in Info information about the lesystem on which the le or path Path resides. Info is of type tstatfs. The function returns 0 if the call was succesfull, or an error code if the call failed. Errors: On error, a non-zero error code is returned See also: fpFStatFS (1692), #rtl.baseunix.fpStat (185)
1693
41.3.15
fpSystem
Synopsis: Execute and feed command to system shell Declaration: function fpSystem(const Command: string) : cint function fpSystem(const Command: AnsiString) : cint Visibility: default Description: Shell invokes the bash shell (/bin/sh), and feeds it the command Command (using the -c option). The function then waits for the command to complete, and then returns the exit status of the command, or 127 if it could not complete the FpFork (153) or FpExecve (150) calls. Errors: Errors are reported in (fpget)ErrNo (156) See also: POpen (1698), Shell (1700), FpFork (153), FpExecve (150) Listing: ./unixex/ex80.pp
program example56 ; uses Unix ; { Program t o demonstrate t h e S h e l l f u n c t i o n } Var S : L o n g i n t ; begin W r i t e l n ( Output o f l s l . pp ) ; S: = fpSystem ( l s l . pp ) ; W r i t e l n ( Command e x i t e d wwith s t a t u s : end .
,S ) ;
41.3.16
FSearch
Synopsis: Search for le in search path. Declaration: function FSearch(const path: AnsiString;dirlist: Ansistring; CurrentDirStrategy: TFSearchOption) : AnsiString function FSearch(const path: AnsiString;dirlist: AnsiString) : AnsiString Visibility: default Description: FSearch searches in DirList, a colon separated list of directories, for a le named Path. It then returns a path to the found le. The CurrentDirStrategy determines how the current directory is treated when searching: NoCurrentDirectoryDo not search the current directory unless it is specied in the search path. CurrentDirectoryFirstSearch the current directory rst, before all directories in the search path. CurrentDirectoryLastSearch the current directory last, after all directories in the search path It is mainly provided to mimic DOS search path behaviour. Default behaviour is to search the current directory rst. Errors: An empty string if no such le was found.
1694
41.3.17
fStatFS
Synopsis: Retrieve lesystem information from a le descriptor. Declaration: function fStatFS(Fd: cint;var Info: tstatfs) : cint Visibility: default Description: fStatFS returns in Info information about the lesystem on which the le with le descriptor fd resides. Info is of type TStatFS (1718). The function returns zero if the call was succesful, a nonzero value is returned if the call failed. Errors: Extended error information is returned by the FpGetErrno (156) function: sys_enotdirA component of Path is not a directory. sys_einvalInvalid character in Path. sys_enoentPath does not exist. sys_eaccessSearch permission is denied for component inPath. sys_eloopA circular symbolic link was encountered in Path. sys_eioAn error occurred while reading from the lesystem. See also: StatFS (1702), #rtl.baseunix.FpLStat (163) Listing: ./unixex/ex91.pp
program Example30 ; { Program t o demonstrate t h e FSStat f u n c t i o n . } uses BaseUnix , Unix , UnixType ; var s : s t r i n g ; fd : c i n t ; info : tstatfs ; begin w r i t e l n ( I n f o about c u r r e n t p a r t i t i o n : s := . ; while s<> q do begin Fd : = fpOpen ( S , O_RDOnly ) ;
);
1695
i f ( fd > = 0 ) then begin i f f p f s t a t f s ( fd , @info ) < >0 then begin w r i t e l n ( F s t a t f a i l e d . Errno : , f p g e t e r r n o ) ; halt ( 1 ) ; end ; FpClose ( f d ) ; writeln ; w r i t e l n ( R e s u l t o f f s s t a t on f i l e , s , . ) ; { $ i f d e f i n e d ( L i n u x ) o r d e f i n e d ( sunos ) } / / SysV l i k e . writeln ( fstype : , info . fstype ) ; { $else } / / BSD l i k e , i n c l Mac OS X . writeln ( fstype : , info . ftype ) ; { $endif } writeln ( bsize writeln ( bfree writeln ( bavail writeln ( f i l e s writeln ( f f r e e { $ i f d e f FreeBSD } writeln ( f s i d { $else } writeln ( f s i d w r i t e l n ( Namelen { $endif } w r i t e ( Type name readln ( s ) end ; end ; end . : : : : : , info , info , info , info , info . bsize ) ; . bfree ) ; . bavail ) ; . files ); . ffree );
41.3.18
fsync
Synopsis: Synchronize les kernel data with disk. Declaration: function fsync(fd: cint) : cint Visibility: default Description: Fsync synchronizes the kernel data for le fd (the cache) with the disk. The call will not return till all le data was written to disk. If the call was succesfull, 0 is returned. On failure, a nonzero value is returned. Errors: Extended error information is returned by the FpGetErrno (156) function: See also: FpFLock (1692)
41.3.19
GetDomainName
Synopsis: Return current domain name Declaration: function GetDomainName : string 1696
Visibility: default Description: Get the domain name of the machine on which the process is running. An empty string is returned if the domain is not set. Errors: None. See also: GetHostName (1697) Listing: ./unixex/ex39.pp
Program Example39 ; { Program t o demonstrate t h e GetDomainName f u n c t i o n . } Uses Unix ; begin W r i t e l n ( Domain name o f t h i s machine i s : end .
, GetDomainName ) ;
41.3.20
GetHostName
Synopsis: Return host name Declaration: function GetHostName : string Visibility: default Description: Get the hostname of the machine on which the process is running. An empty string is returned if hostname is not set. Errors: None. See also: GetDomainName (1696) Listing: ./unixex/ex40.pp
Program Example40 ; { Program t o demonstrate t h e GetHostName f u n c t i o n . } Uses u n i x ; begin W r i t e l n ( Name o f t h i s machine i s : end .
, GetHostName ) ;
41.3.21
GetLocalTimezone
Synopsis: Return local timzeone information Declaration: procedure GetLocalTimezone(timer: cint;var leap_correct: cint; var leap_hit: cint) procedure GetLocalTimezone(timer: cint) Visibility: default 1697
Description: GetLocalTimeZone returns the local timezone information. It also initializes the TZSeconds variable, which is used to correct the epoch time to local time. There should never be any need to call this function directly. It is called by the initialization routines of the Linux unit. See also: GetTimezoneFile (1698), ReadTimezoneFile (1699)
41.3.22
GetTimezoneFile
Synopsis: Return name of timezone information le Declaration: function GetTimezoneFile : string Visibility: default Description: GetTimezoneFile returns the location of the current timezone le. The location of le is determined as follows: 1.If /etc/timezone exists, it is read, and the contents of this le is returned. This should work on Debian systems. 2.If /usr/lib/zoneinfo/localtime exists, then it is returned. (this le is a symlink to the timezone le on SuSE systems) 3.If /etc/localtime exists, then it is returned. (this le is a symlink to the timezone le on RedHat systems) Errors: If no le was found, an empty string is returned. See also: ReadTimezoneFile (1699)
41.3.23
PClose
Synopsis: Close le opened with POpen (1698) Declaration: function PClose(var F: File) : cint function PClose(var F: text) : cint Visibility: default Description: PClose closes a le opened with POpen (1698). It waits for the command to complete, and then returns the exit status of the command. For an example, see POpen (1698) Errors: Extended error information is returned by the FpGetErrno (156) function. See also: POpen (1698)
41.3.24
POpen
Synopsis: Pipe le to standard input/output of program Declaration: function POpen(var F: text;const Prog: Ansistring;rw: Char) : cint function POpen(var F: File;const Prog: Ansistring;rw: Char) : cint Visibility: default
1698
Description: POpen runs the command specied in Prog, and redirects the standard in or output of the command to the other end of the pipe F. The parameter rw indicates the direction of the pipe. If it is set to W, then F can be used to write data, which will then be read by the command from stdinput. If it is set to R, then the standard output of the command can be read from F. F should be reset or rewritten prior to using it. F can be of type Text or File. A le opened with POpen can be closed with Close, but also with PClose (1698). The result is the same, but PClose returns the exit status of the command Prog. Errors: Extended error information is returned by the FpGetErrno (156) function. Errors are essentially those of the Execve, Dup and AssignPipe commands. See also: AssignPipe (1684), PClose (1698) Listing: ./unixex/ex37.pp
Program Example37 ; { Program t o demonstrate t h e Popen f u n c t i o n . } uses BaseUnix , Unix ; var f : t e x t ; i : longint ; begin w r i t e l n ( C r e a t i n g a s h e l l s c r i p t t o which echoes i t s arguments ) ; w r i t e l n ( and i n p u t back t o s t d o u t ) ; assign ( f , test21a ) ; rewrite ( f ) ; w r i t e l n ( f , # ! / b i n / sh ) ; w r i t e l n ( f , echo t h i s i s t h e c h i l d speaking . . . . ) ; w r i t e l n ( f , echo g o t arguments \ " $ " \ ) ; writeln ( f , cat ) ; writeln ( f , e x i t 2 ) ; writeln ( f ) ; close ( f ) ; fpchmod ( t e s t 2 1 a , & 7 5 5 ) ; popen ( f , . / t e s t 2 1 a arg1 arg2 , W ) ; i f f p g e t e r r n o < >0 then w r i t e l n ( e r r o r from POpen : e r r n o : , f p g e t e r r n o ) ; f o r i : = 1 to 1 0 do w r i t e l n ( f , T h i s i s w r i t t e n t o t h e pipe , and should appear on s t d o u t . ) ; Flush ( f ) ; W r i t e l n ( The s c r i p t e x i t e d w i t h s t a t u s : , PClose ( f ) ) ; writeln ; w r i t e l n ( Press < r e t u r n > t o remove s h e l l s c r i p t . ) ; readln ; assign ( f , test21a ) ; erase ( f ) end .
41.3.25
ReadTimezoneFile
Synopsis: Read the timezone le and initialize time routines Declaration: procedure ReadTimezoneFile(fn: string)
1699
Visibility: default Description: ReadTimeZoneFile reads the timezone le fn and initializes the local time routines based on the information found there. There should be no need to call this function. The initialization routines of the linux unit call this routine at unit startup. Errors: None. See also: GetTimezoneFile (1698), GetLocalTimezone (1697)
41.3.26
SeekDir
Synopsis: Seek to position in directory Declaration: procedure SeekDir(p: pDir;loc: clong) Visibility: default Description: SeekDir sets the directory pointer to the loc-th entry in the directory structure pointed to by p. For an example, see #rtl.baseunix.fpOpenDir (169). Errors: Extended error information is returned by the FpGetErrno (156) function: See also: #rtl.baseunix.fpCloseDir (146), #rtl.baseunix.fpReadDir (174), #rtl.baseunix.fpOpenDir (169), TellDir (1703)
41.3.27
SelectText
Synopsis: Wait for event on text le. Declaration: function SelectText(var T: Text;TimeOut: ptimeval) : cint function SelectText(var T: Text;TimeOut: cint) : cint Visibility: default Description: SelectText executes the FpSelect (176) call on a le of type Text. You can specify a timeout in TimeOut. The SelectText call determines itself whether it should check for read or write, depending on how the le was opened : With Reset it is checked for reading, with Rewrite and Append it is checked for writing. Errors: See #rtl.baseunix.FpSelect (176). SYS_EBADF can also mean that the le wasnt opened. See also: #rtl.baseunix.FpSelect (176)
41.3.28
Shell
Synopsis: Execute and feed command to system shell Declaration: function Shell(const Command: string) : cint function Shell(const Command: AnsiString) : cint Visibility: default Description: Shell invokes the bash shell (/bin/sh), and feeds it the command Command (using the -c option). The function then waits for the command to complete, and then returns the exit status of the command, or 127 if it could not complete the FpFork (153) or FpExecve (150) calls. 1700
Errors: Extended error information is returned by the FpGetErrno (156) function: See also: POpen (1698), FpSystem (1694), FpFork (153), FpExecve (150) Listing: ./unixex/ex56.pp
program example56 ; uses Unix ; { Program t o demonstrate t h e S h e l l f u n c t i o n } Var S : L o n g i n t ; begin W r i t e l n ( Output o f l s l . pp ) ; S: = S h e l l ( l s l . pp ) ; W r i t e l n ( Command e x i t e d wwith s t a t u s : end .
,S ) ;
41.3.29
SigRaise
Synopsis: Raise a signal (send to current process) Declaration: procedure SigRaise(sig: Integer) Visibility: default Description: SigRaise sends a Sig signal to the current process. Errors: None. See also: #rtl.baseunix.FpKill (161), #rtl.baseunix.FpGetPid (158) Listing: ./unixex/ex65.pp
Program example64 ; { Program t o demonstrate t h e SigRaise f u n c t i o n . } uses Unix , BaseUnix ; Var oa , na : P S i g A c t i o n r e c ; Procedure DoSig ( s i g : L o n g i n t ) ; cdecl ; begin writeln ( Receiving s i g n a l : , sig ) ; end ; begin new( na ) ; new( oa ) ; na ^ . sa_handler : = S i g A c t i o n H a n d l e r ( @DoSig ) ; f i l l c h a r ( na ^ . Sa_Mask , s i z e o f ( na ^ . Sa_Mask ) , # 0 ) ; na ^ . Sa_Flags : = 0 ; { $ i f d e f Linux }
1701
/ / t h i s member i s l i n u x only , and a f a i k even t h e r e arcane na ^ . Sa_Restorer : = N i l ; { $endif } i f f p S i g A c t i o n ( SigUsr1 , na , oa ) < >0 then begin writeln ( Error : , fpgeterrno ) ; halt ( 1 ) ; end ; W r i t e l n ( Sending USR1 ( , s i g u s r 1 , ) s i g n a l t o s e l f . ) ; SigRaise ( s i g u s r 1 ) ; end .
41.3.30
StatFS
Synopsis: Retrieve lesystem information from a path. Declaration: function StatFS(Path: PChar;var Info: tstatfs) : cint function StatFS(Path: ansistring;var Info: tstatfs) : cint Visibility: default Description: StatFS returns in Info information about the lesystem on which the le Path resides. Info is of type TStatFS (1718). The function returns zero if the call was succesful, a nonzero value is returned if the call failed. Errors: Extended error information is returned by the FpGetErrno (156) function: sys_enotdirA component of Path is not a directory. sys_einvalInvalid character in Path. sys_enoentPath does not exist. sys_eaccessSearch permission is denied for component inPath. sys_eloopA circular symbolic link was encountered in Path. sys_eioAn error occurred while reading from the lesystem. See also: #rtl.baseunix.FpStat (185), #rtl.baseunix.FpLStat (163) Listing: ./unixex/ex91.pp
program Example30 ; { Program t o demonstrate t h e FSStat f u n c t i o n . } uses BaseUnix , Unix , UnixType ; var s : s t r i n g ; fd : c i n t ; info : tstatfs ; begin w r i t e l n ( I n f o about c u r r e n t p a r t i t i o n : s := . ; while s<> q do begin Fd : = fpOpen ( S , O_RDOnly ) ; i f ( fd > = 0 ) then
);
1702
begin i f f p f s t a t f s ( fd , @info ) < >0 then begin w r i t e l n ( F s t a t f a i l e d . Errno : , f p g e t e r r n o ) ; halt ( 1 ) ; end ; FpClose ( f d ) ; writeln ; w r i t e l n ( R e s u l t o f f s s t a t on f i l e , s , . ) ; { $ i f d e f i n e d ( L i n u x ) o r d e f i n e d ( sunos ) } / / SysV l i k e . writeln ( fstype : , info . fstype ) ; { $else } / / BSD l i k e , i n c l Mac OS X . writeln ( fstype : , info . ftype ) ; { $endif } writeln ( bsize writeln ( bfree writeln ( bavail writeln ( f i l e s writeln ( f f r e e { $ i f d e f FreeBSD } writeln ( f s i d { $else } writeln ( f s i d w r i t e l n ( Namelen { $endif } w r i t e ( Type name readln ( s ) end ; end ; end . : : : : : , info , info , info , info , info . bsize ) ; . bfree ) ; . bavail ) ; . files ); . ffree );
41.3.31
TellDir
Synopsis: Return current location in a directory Declaration: function TellDir(p: pDir) : TOff Visibility: default Description: TellDir returns the current location in the directory structure pointed to by p. It returns -1 on failure. For an example, see #rtl.baseunix.fpOpenDir (169). See also: #rtl.baseunix.fpCloseDir (146), #rtl.baseunix.fpReadDir (174), #rtl.baseunix.fpOpenDir (169), SeekDir (1700)
41.3.32
WaitProcess
Synopsis: Wait for process to terminate. Declaration: function WaitProcess(Pid: cint) : cint Visibility: default 1703
Description: WaitProcess waits for process PID to exit. WaitProcess is equivalent to the #rtl.baseunix.FpWaitPID (193) call: FpWaitPid(PID,@result,0) Handles of Signal interrupts (errno=EINTR), and returns the Exitcode of Process PID (>=0) or Status if it was terminated Errors: None. See also: #rtl.baseunix.FpWaitPID (193), #rtl.baseunix.WTERMSIG (196), #rtl.baseunix.WSTOPSIG (195), #rtl.baseunix.WIFEXITED (195), WIFSTOPPED (1704), #rtl.baseunix.WIFSIGNALED (195), W_EXITCODE (1704), W_STOPCODE (1704), #rtl.baseunix.WEXITSTATUS (195)
41.3.33
WIFSTOPPED
Synopsis: Check whether the process is currently stopped. Declaration: function WIFSTOPPED(Status: Integer) : Boolean Visibility: default Description: WIFSTOPPED checks Status and returns true if the process is currently stopped. This is only possible if WUNTRACED was specied in the options of FpWaitPID (193). See also: #rtl.baseunix.FpWaitPID (193), WaitProcess (1703), #rtl.baseunix.WTERMSIG (196), #rtl.baseunix.WSTOPSIG (195), #rtl.baseunix.WIFEXITED (195), #rtl.baseunix.WIFSIGNALED (195), W_EXITCODE (1704), W_STOPCODE (1704), #rtl.baseunix.WEXITSTATUS (195)
41.3.34
W_EXITCODE
Synopsis: Construct an exit status based on an return code and signal. Declaration: function W_EXITCODE(ReturnCode: Integer;Signal: Integer) : Integer Visibility: default Description: W_EXITCODE combines ReturnCode and Signal to a status code t for WaitPid. See also: #rtl.baseunix.FpWaitPID (193), WaitProcess (1703), #rtl.baseunix.WTERMSIG (196), #rtl.baseunix.WSTOPSIG (195), #rtl.baseunix.WIFEXITED (195), WIFSTOPPED (1704), #rtl.baseunix.WIFSIGNALED (195), W_EXITCODE (1704), W_STOPCODE (1704), #rtl.baseunix.WEXITSTATUS (195)
41.3.35
W_STOPCODE
Synopsis: Construct an exit status based on a signal. Declaration: function W_STOPCODE(Signal: Integer) : Integer Visibility: default Description: W_STOPCODE constructs an exit status based on Signal, which will cause WIFSIGNALED (195) to return True See also: #rtl.baseunix.FpWaitPID (193), WaitProcess (1703), #rtl.baseunix.WTERMSIG (196), #rtl.baseunix.WSTOPSIG (195), #rtl.baseunix.WIFEXITED (195), WIFSTOPPED (1704), #rtl.baseunix.WIFSIGNALED (195), W_EXITCODE (1704), #rtl.baseunix.WEXITSTATUS (195)
1704
Chapter 42
The unixtype unit contains the denitions of basic unix types. It was initially implemented by Marco van de Voort. When porting to a new unix platform, this unit should be adapted to the sizes and conventions of the platform to which the compiler is ported.
42.2
42.2.1
ARG_MAX = 131072 Max number of command-line arguments. NAME_MAX = 255 Max length (in bytes) of lename PATH_MAX = 4095 Max length (in bytes) of pathname Prio_PGrp = 1 #rtl.baseunix.fpGetPriority (159) option: Get process group priority. Prio_Process = 0 #rtl.baseunix.fpGetPriority (159) option: Get process priority. Prio_User = 2 #rtl.baseunix.fpGetPriority (159) option: Get user priority. 1705
SIG_MAXSIG = 128 Maximum signal number. SYS_NMLN = 65 Max system namelength _PTHREAD_MUTEX_ADAPTIVE_NP = 3 Mutex options: _PTHREAD_MUTEX_DEFAULT = _PTHREAD_MUTEX_NORMAL Mutex options: _PTHREAD_MUTEX_ERRORCHECK = _PTHREAD_MUTEX_ERRORCHECK_NP Mutex options: _PTHREAD_MUTEX_ERRORCHECK_NP = 2 Mutex options: double lock returns an error code. _PTHREAD_MUTEX_FAST_NP = _PTHREAD_MUTEX_ADAPTIVE_NP Mutex options: Fast mutex _PTHREAD_MUTEX_NORMAL = _PTHREAD_MUTEX_TIMED_NP Mutex options: _PTHREAD_MUTEX_RECURSIVE = _PTHREAD_MUTEX_RECURSIVE_NP Mutex options: _PTHREAD_MUTEX_RECURSIVE_NP = 1 Mutex options: recursive mutex _PTHREAD_MUTEX_TIMED_NP = 0 Mutex options: ?
42.2.2
Types
1706
cchar = cint8 C type: 8-bit signed integer cdouble = Double Double precision real format. cfloat = single Floating-point real format cint = cint32 C type: integer (natural size) cint16 = SmallInt C type: 16 bits sized, signed integer. cint32 = LongInt C type: 32 bits sized, signed integer. cint64 = Int64 C type: 64 bits sized, signed integer. cint8 = ShortInt C type: 8 bits sized, signed integer. clock_t = culong Clock ticks type clong = LongInt C type: long signed integer (double sized) clongdouble = extended Usually translates to an extended, but is CPU dependent. clonglong = cint64 C type: 64-bit (double long) signed integer. cschar = cint8 Signed character type 1707
cshort = cint16 C type: short signed integer (half sized) csigned = cint csigned is an alias for cint (1707). csint = cint32 Signed integer cslong = LongInt The size is CPU dependent. cslonglong = cint64 cslonglong is an alias for clonglong (1707). csshort = cint16 Short signed integer type cuchar = cuint8 C type: 8-bit unsigned integer cuint = cuint32 C type: unsigned integer (natural size) cuint16 = Word C type: 16 bits sized, unsigned integer. cuint32 = LongWord C type: 32 bits sized, unsigned integer. cuint64 = QWord C type: 64 bits sized, unsigned integer. cuint8 = Byte C type: 8 bits sized, unsigned integer. culong = Cardinal C type: long unsigned integer (double sized) 1708
culonglong = cuint64 C type: 64-bit (double long) unsigned integer. cunsigned = cuint Alias for #rtl.unixtype.cuint (1708) cushort = cuint16 C type: short unsigned integer (half sized) dev_t = cuint64 Device descriptor type. gid_t = cuint32 Group ID type. ino64_t = cuint64 ino64_t is an inode type capable of containing 64-bit inodes. ino_t = clong Inode type. ipc_pid_t = cushort Process ID kDev_t = cushort Kernel device type mbstate_t = record __count : cint; __value : mbstate_value_t; end
This type should never be used directly. It is part of the mbstate_t (1709) type. mode_t = cuint32 1709
Inode mode type. nlink_t = cuint32 Number of links type. off64_t = cint64 64-bit offset type. off_t = cint Offset type. pcbool = ^cbool Pointer to boolean type cbool (1706) pcchar = ^cchar Pointer to #rtl.UnixType.cchar (1707) pcdouble = ^cdouble Pointer to cdouble (1707) type. pcfloat = ^cfloat Pointer to coat (1707) type. pcint = ^cint Pointer to cInt (1707) type. pcint16 = ^cint16 Pointer to 16-bit signed integer type pcint32 = ^cint32 Pointer to signed 32-bit integer type pcint64 = ^cint64 Pointer to signed 64-bit integer type pcint8 = ^cint8 Pointer to 8-bits signed integer type pClock = ^clock_t 1710
Pointer to TClock (1716) type. pclong = ^clong Pointer to cLong (1707) type. pclongdouble = ^clongdouble Pointer to the long double type clongdouble (1707) pclonglong = ^clonglong Pointer to longlong type. pcschar = ^cschar Pointer to character type cschar (1707). pcshort = ^cshort Pointer to cShort (1708) type. pcsigned = ^csigned Pointer to signed integer type csigned (1708). pcsint = ^csint Pointer to signed integer type csint (1708) pcslong = ^cslong Pointer ot the signed long cslong (1708) pcslonglong = ^cslonglong Pointer to Signed longlong type cslonglong (1708) pcsshort = ^csshort Pointer to short signed integer type csshort (1708) pcuchar = ^cuchar Pointer to #rtl.UnixType.cuchar (1708) pcuint = ^cuint Pointer to cUInt (1708) type. pcuint16 = ^cuint16 1711
Pointer to 16-bit unsigned integer type pcuint32 = ^cuint32 Pointer to unsigned 32-bit integer type pcuint64 = ^cuint64 Pointer to unsigned 64-bit integer type pcuint8 = ^cuint8 Pointer to 8-bits unsigned integer type pculong = ^culong Pointer to cuLong (1708) type. pculonglong = ^culonglong Unsigned longlong type pcunsigned = ^cunsigned Pointer to #rtl.unixtype.cunsigned (1709) pcushort = ^cushort Pointer to cuShort (1709) type. pDev = ^dev_t Pointer to TDev (1716) type. pGid = ^gid_t Pointer to TGid (1716) type. pid_t = cint Process ID type. pIno = ^ino_t Pointer to TIno (1717) type. pIno64 = ^ino64_t Pointer to ino64_t (1709) pkDev = ^kDev_t 1712
Pointer to TkDev (1717) type. pmbstate_t = ^mbstate_t Pointer to mbstate_t (1709) type pMode = ^mode_t Pointer to TMode (1717) type. pnLink = ^nlink_t Pointer to TnLink (1717) type. pOff = ^off_t Pointer to TOff (1717) type. pOff64 = ^off64_t Pointer to off64_t type pPid = ^pid_t Pointer to TPid (1717) type. pSize = ^size_t Pointer to TSize (1717) type. psize_t = pSize Pointer to size_t (1716) type. pSockLen = ^socklen_t Pointer to TSockLen (1717) type. pSSize = ^ssize_t Pointer to TsSize (1717) type PStatFS = ^TStatfs Pointer to TStatFS (1718) type. pthread_attr_t = record __detachstate : cint; __schedpolicy : cint; __schedparam : sched_param; __inheritsched : cint; 1713
__scope : cint; __guardsize : size_t; __stackaddr_set : cint; __stackaddr : pointer; __stacksize : size_t; end
pthread_attr_t describes the thread attributes. It should be considered an opaque record, the names of the elds can change anytime. Use the appropriate functions to set the thread attributes. pthread_condattr_t = record __dummy : cint; end
pthread_condattr_t describes the attributes of a thread mutex. It should be considered an opaque record, the names of the elds can change anytime.
pthread_cond_t = record __c_lock : _pthread_fastlock; __c_waiting : pointer; __padding : Array[0..48-1-sizeof(_pthread_fastlock)-sizeof(pointer)-sizeof(clonglon __align : clonglong; end
pthread_cond_t describes a thread conditional variable. It should be considered an opaque record, the names of the elds can change anytime. pthread_key_t = cuint Thread local storage key (opaque) pthread_mutexattr_t = record __mutexkind : cint; end
pthread_mutexattr_t describes the attributes of a thread mutex. It should be considered an opaque record, the names of the elds can change anytime. pthread_mutex_t = record __m_reserved : cint; __m_count : cint; __m_owner : pointer; __m_kind : cint; __m_lock : _pthread_fastlock; end
_pthread_mutex_t describes a thread mutex. It should be considered an opaque record, the names of the elds can change anytime. 1714
pthread_rwlockattr_t describes the attributes of a lock. It should be considered an opaque record, the names of the elds can change anytime. pthread_rwlock_t = record __rw_readers : cint; __rw_writer : pointer; __rw_read_waiting : pointer; __rw_write_waiting : pointer; __rw_kind : cint; __rw_pshared : cint; end
pthread_rwlock_t describes a lock. It should be considered an opaque record, the names of the elds can change anytime. pthread_t = culong Thread description record pTime = ^time_t Pointer to TTime (1718) type. ptimespec = ^timespec Pointer to timespec (1716) record. ptimeval = ^timeval Pointer to timeval (1716) record. ptime_t = ^time_t Pointer to time_t (1717) type. pUid = ^uid_t Pointer to TUid (1718) type. pwchar_t = ^wchar_t Pointer to wchar_t (1718) type. sched_param = record __sched_priority : cint; end
1715
Scheduling parameter description record. sem_t = record __sem_lock : _pthread_fastlock; __sem_value : cint; __sem_waiting : pointer; end
sem_t describes a thread semaphore. It should be considered an opaque record, the names of the elds can change anytime. size_t = cuint32 Size specication type. socklen_t = cuint32 Socket address length type. ssize_t = cint32 Small size type. TClock = clock_t Alias for clock_t (1707) type. TDev = dev_t Alias for dev_t (1709) type. TGid = gid_t Alias for gid_t (1709) type. timespec = packed record tv_sec : time_t; tv_nsec : clong; end
Record specifying time interval. timeval = packed record tv_sec : time_t; tv_usec : clong; end
time_t = clong Time span type TIno = ino_t Alias for ino_t (1709) type. TIno64 = ino64_t Alias for ino64_t (1709) TIOCtlRequest = cint Opaque type used in FpIOCtl (160) TkDev = kDev_t Alias for kDev_t (1709) type. TMode = mode_t Alias for mode_t (1710) type. TnLink = nlink_t Alias for nlink_t (1710) type. TOff = off_t Alias for off_t (1710) type. TOff64 = off64_t Alias for off64_t type. TPid = pid_t Alias for pid_t (1712) type. TSize = size_t Alias for size_t (1716) type TSockLen = socklen_t Alias for socklen_t (1716) type. TSSize = ssize_t Alias for ssize_t (1716) type 1717
TStatfs = packed record fstype : cint; bsize : cint; blocks : culong; bfree : culong; bavail : culong; files : culong; ffree : culong; fsid : Array[0..1] of cint; namelen : cint; frsize : cint; spare : Array[0..4] of cint; end
Record describing a le system in the baseunix.fpstatfs (102) call. TTime = time_t Alias for TTime (1718) type. TTimeSpec = timespec Alias for TimeSpec (1716) type. TTimeVal = timeval Alias for TimeVal (1716) record. TUid = uid_t Alias for uid_t (1718) type. uid_t = cuint32 User ID type wchar_t = cint32 Wide character type. wint_t = cint32 Wide character size type. _pthread_fastlock = record __status : clong; __spinlock : cint; end
_pthread_fastlock describes a thread mutex. It should be considered an opaque record, the names of the elds can change anytime. 1718
Chapter 43
The UnixUtil unit contains some of the routines that were present in the old Linux unit, but which do not really belong in the unix (1668) or baseunix (102) units. Most of the functions described here have cross-platform counterparts in the SysUtils (1443) unit. It is therefore recommended to use that unit.
43.2
43.2.1
ComStr = string Command-line string type. DirStr = string Filename directory part string type. ExtStr = string Filename extension part string type. NameStr = string Filename name part string type. PathStr = string Filename full path string type.
43.2.2
Variables
43.3
43.3.1
Synopsis: Concert an array of string to an array of null-terminated strings Declaration: function ArrayStringToPPchar(const S: Array of AnsiString; reserveentries: LongInt) : ppchar Visibility: default Description: ArrayStringToPPchar creates an array of null-terminated strings that point to strings which are the same as the strings in the array S. The function returns a pointer to this array. The array and the strings it contains must be disposed of after being used, because it they are allocated on the heap. The ReserveEntries parameter tells ArrayStringToPPchar to allocate room at the end of the array for another ReserveEntries entries. Errors: If not enough memory is available, an error may occur. See also: StringToPPChar (1725)
43.3.2
Basename
Synopsis: Return basename of a le Declaration: function Basename(const path: PathStr;const suf: PathStr) : PathStr Visibility: default Description: Returns the lename part of Path, stripping off Suf if it exists. The lename part is the whole name if Path contains no slash, or the part of Path after the last slash. The last character of the result is not a slash, unless the directory is the root directory. Errors: None. See also: DirName (1721) Listing: ./unutilex/ex48.pp
Program Example48 ; { Program t o demonstrate t h e BaseName f u n c t i o n . } Uses Dos , Unix , U n i x U t i l ; Var S : S t r i n g ; begin S: = FExpand ( Paramstr ( 0 ) ) ; W r i t e l n ( T h i s program i s c a l l e d : end .
, Basename ( S , ) ) ;
1720
43.3.3
Dirname
Synopsis: Extract directory part from lename Declaration: function Dirname(const path: PathStr) : PathStr Visibility: default Description: Returns the directory part of Path. The directory is the part of Path before the last slash, or empty if there is no slash. The last character of the result is not a slash, unless the directory is the root directory. Errors: None. See also: BaseName (1720) Listing: ./unutilex/ex47.pp
Program Example47 ; { Program t o demonstrate t h e DirName f u n c t i o n . } Uses Dos , Unix , U n i x U t i l ; Var S : S t r i n g ; begin S: = FExpand ( Paramstr ( 0 ) ) ; W r i t e l n ( T h i s program i s i n d i r e c t o r y : end .
, Dirname (S ) ) ;
43.3.4
EpochToLocal
Synopsis: Convert epoch time to local time Declaration: procedure EpochToLocal(epoch: LongInt;var year: Word;var month: Word; var day: Word;var hour: Word;var minute: Word; var second: Word) Visibility: default Description: Converts the epoch time (=Number of seconds since 00:00:00 , January 1, 1970, corrected for your time zone ) to local date and time. This function takes into account the timzeone settings of your system. Errors: None See also: LocalToEpoch (1724) Listing: ./unutilex/ex3.pp
Program Example3 ; { Program t o demonstrate t h e EpochToLocal f u n c t i o n . } Uses BaseUnix , Unix , U n i x U t i l ; Var Year , month , day , hour , minute , seconds : Word ;
1721
begin EpochToLocal ( FPTime , Year , month , day , hour , minute , seconds ) ; W r i t e l n ( C u r r e n t date : , Day : 2 , / , Month : 2 , / , Year : 4 ) ; W r i t e l n ( C u r r e n t t i m e : , Hour : 2 , : , minute : 2 , : , seconds : 2 ) ; end .
43.3.5
FNMatch
Synopsis: Check whether lename matches wildcard specication Declaration: function FNMatch(const Pattern: string;const Name: string) : Boolean Visibility: default Description: FNMatch returns True if the lename in Name matches the wildcard pattern in Pattern, False otherwise. Pattern can contain the wildcards * (match zero or more arbitrary characters) or ? (match a single character). Errors: None. See also: #rtl.unix.FSearch (1694) Listing: ./unutilex/ex69.pp
Program Example69 ; { Program t o demonstrate t h e FNMatch f u n c t i o n . } Uses u n i x u t i l ; Procedure TestMatch ( P a t t e r n ,Name : S t r i n g ) ; begin Write ( " ,Name, " ) ; I f FNMatch ( P a t t e r n ,Name ) then Write ( matches ) else Write ( does n o t match ) ; Writeln ( " , Pattern , " . ) ; end ; begin TestMatch ( TestMatch ( TestMatch ( TestMatch ( TestMatch ( TestMatch ( TestMatch ( TestMatch ( end .
1722
43.3.6
FSplit
Synopsis: Split lename into path, name and extension Declaration: procedure FSplit(const Path: PathStr;var Dir: DirStr;var Name: NameStr; var Ext: ExtStr) Visibility: default Description: FSplit splits a full le name into 3 parts : A Path, a Name and an extension (in ext). The extension is taken to be all letters after the last dot (.). Errors: None. See also: #rtl.unix.FSearch (1694) Listing: ./unutilex/ex67.pp
Program Example67 ; uses U n i x U t i l ; { Program t o demonstrate t h e F S p l i t f u n c t i o n . } var Path , Name, Ext : s t r i n g ; begin F S p l i t ( ParamStr ( 1 ) , Path , Name, Ext ) ; WriteLn ( S p l i t , ParamStr ( 1 ) , i n : ) ; WriteLn ( Path : , Path ) ; WriteLn ( Name : ,Name ) ; WriteLn ( E x t e n s i o n : , Ext ) ; end .
43.3.7
GetFS
Synopsis: Return le selector Declaration: function GetFS(var T: Text) : LongInt function GetFS(var F: File) : LongInt Visibility: default Description: GetFS returns the le selector that the kernel provided for your le. In principle you don need this le selector. Only for some calls it is needed, such as the #rtl.baseunix.fpSelect (176) call or so. Errors: In case the le was not opened, then -1 is returned. See also: #rtl.baseunix.fpSelect (176) Listing: ./unutilex/ex34.pp
Program Example33 ; { Program t o demonstrate t h e S e l e c t T e x t f u n c t i o n . } Uses Unix ;
1723
Var t v : TimeVal ; begin W r i t e l n ( Press t h e <ENTER> t o c o n t i n u e t h e program . ) ; { Wait u n t i l F i l e d e s c r i p t o r 0 ( = I n p u t ) changes } SelectText ( Input , n i l ) ; { Get r i d o f <ENTER> i n b u f f e r } readln ; W r i t e l n ( Press <ENTER> key i n l e s s than 2 seconds . . . ) ; t v . tv_sec : = 2 ; t v . tv_sec : = 0 ; i f S e l e c t T e x t ( I n p u t , @tv ) > 0 then W r i t e l n ( Thank you ! ) else W r i t e l n ( Too l a t e ! ) ; end .
43.3.8
GregorianToJulian
Synopsis: Converts a gregorian date to a julian date Declaration: function GregorianToJulian(Year: LongInt;Month: LongInt;Day: LongInt) : LongInt Visibility: default Description: GregorianToJulian takes a gregorian date and converts it to a Julian day. Errors: None. See also: JulianToGregorian (1724)
43.3.9
JulianToGregorian
Synopsis: Converts a julian date to a gregorian date Declaration: procedure JulianToGregorian(JulianDN: LongInt;var Year: Word; var Month: Word;var Day: Word) Visibility: default Description: JulianToGregorian takes a julian day and converts it to a gregorian date. (Start of the Julian Date count is from 0 at 12 noon 1 JAN -4712 (4713 BC),) Errors: None. See also: GregorianToJulian (1724)
43.3.10
LocalToEpoch
Synopsis: Convert local time to epoch (unix) time Declaration: function LocalToEpoch(year: Word;month: Word;day: Word;hour: Word; minute: Word;second: Word) : LongInt Visibility: default
1724
Description: Converts the Local time to epoch time (=Number of seconds since 00:00:00 , January 1, 1970 ). Errors: None See also: EpochToLocal (1721) Listing: ./unutilex/ex4.pp
Program Example4 ; { Program t o demonstrate t h e LocalToEpoch f u n c t i o n . } Uses U n i x U t i l ; Var year , month , day , hour , minute , second : Word ; begin Write ( Year : ) ; readln ( Year ) ; Write ( Month : ) ; readln ( Month ) ; Write ( Day : ) ; readln ( Day ) ; Write ( Hour : ) ; readln ( Hour ) ; Write ( Minute : ) ; readln ( Minute ) ; Write ( Seonds : ) ; readln ( Second ) ; Write ( T h i s i s : ) ; Write ( LocalToEpoch ( year , month , day , hour , minute , second ) ) ; W r i t e l n ( seconds p a s t 0 0 : 0 0 1 / 1 / 1 9 8 0 ) ; end .
43.3.11
StringToPPChar
Synopsis: Split string in list of null-terminated strings Declaration: function StringToPPChar(S: PChar;ReserveEntries: Integer) : ppchar function StringToPPChar(var S: string;ReserveEntries: Integer) : ppchar function StringToPPChar(var S: AnsiString;ReserveEntries: Integer) : ppchar Visibility: default Description: StringToPPChar splits the string S in words, replacing any whitespace with zero characters. It returns a pointer to an array of pchars that point to the rst letters of the words in S. This array is terminated by a Nil pointer. The function does not add a zero character to the end of the string unless it ends on whitespace. The function reserves memory on the heap to store the array of PChar; The caller is responsible for freeing this memory. This function can be called to create arguments for the various Exec calls. Errors: None. See also: ArrayStringToPPchar (1720), #rtl.baseunix.FpExecve (150) Listing: ./unutilex/ex70.pp
Program Example70 ; { Program t o demonstrate t h e StringToPPchar f u n c t i o n . }
1725
Uses U n i x U t i l ; Var S : S t r i n g ; P : PPChar ; I : longint ; begin / / remark whitespace a t end . S: = T h i s i s a s t r i n g w i t h words . ; P: = StringToPPChar ( S , 0 ) ; I :=0; While P [ i ] < > N i l do begin W r i t e l n ( Word , i , : ,P [ i ] ) ; Inc ( I ) ; end ; FreeMem ( P , i SizeOf ( Pchar ) ) ; end .
1726
Chapter 44
The Video unit implements a screen access layer which is system independent. It can be used to write on the screen in a system-independent way, which should be optimal on all platforms for which the unit is implemented. The working of the Video is simple: After calling InitVideo (1745), the array VideoBuf contains a representation of the video screen of size ScreenWidth*ScreenHeight, going from left to right and top to bottom when walking the array elements: VideoBuf[0] contains the character and color code of the top-left character on the screen. VideoBuf[ScreenWidth] contains the data for the character in the rst column of the second row on the screen, and so on. To write to the screen, the text to be written should be written to the VideoBuf array. Calling UpdateScreen (1748) will then cp the text to the screen in the most optimal way. (an example can be found further on). The color attribute is a combination of the foreground and background color, plus the blink bit. The bits describe the various color combinations: bits 0-3 The foreground color. Can be set using all color constants. bits 4-6 The background color. Can be set using a subset of the color constants. bit 7 The blinking bit. If this bit is set, the character will appear blinking. Each possible color has a constant associated with it, see the constants section for a list of constants. The foreground and background color can be combined to a color attribute with the following code: Attr:=ForeGroundColor + (BackGroundColor shl 4); The color attribute can be logically or-ed with the blink attribute to produce a blinking character: Atrr:=Attr or blink; But not all drivers may support this. The contents of the VideoBuf array may be modied: This is writing to the screen. As soon as everything that needs to be written in the array is in the VideoBuf array, calling UpdateScreen will copy the contents of the array screen to the screen, in a manner that is as efcient as possible. 1727
The updating of the screen can be prohibited to optimize performance; To this end, the LockScreenUpdate (1745) function can be used: This will increment an internal counter. As long as the counter differs from zero, calling UpdateScreen (1748) will not do anything. The counter can be lowered with UnlockScreenUpdate (1748). When it reaches zero, the next call to UpdateScreen (1748) will actually update the screen. This is useful when having nested procedures that do a lot of screen writing. The video unit also presents an interface for custom screen drivers, thus it is possible to override the default screen driver with a custom screen driver, see the SetVideoDriver (1747) call. The current video driver can be retrieved using the GetVideoDriver (1743) call. Remark: The video unit should not be used together with the crt unit. Doing so will result in very strange behaviour, possibly program crashes.
44.2
The examples in this section make use of the unit vidutil, which contains the TextOut function. This function writes a text to the screen at a given location. It looks as follows: Listing: ./videoex/vidutil.pp
unit v i d u t i l ; Interface uses video ; Procedure TextOut ( X , Y : Word ; Const S : S t r i n g ) ; Implementation Procedure TextOut ( X , Y : Word ; Const S : S t r i n g ) ; Var W, P , I ,M : Word ; begin P : = ( ( X1)+(Y1) ScreenWidth ) ; M: = Length (S ) ; I f P+M>ScreenWidth ScreenHeight then M: = ScreenWidth ScreenHeightP ; For I : = 1 to M do VideoBuf ^ [ P+ I 1]:=Ord (S [ i ] ) + ( $07 shl 8 ) ; end ; end .
44.3
Writing a custom video driver is not difcult, and generally means implementing a couple of functions, which whould be registered with the SetVideoDriver (1747) function. The various functions that can be implemented are located in the TVideoDriver (1737) record: TVideoDriver = Record 1728
InitDriver DoneDriver UpdateScreen ClearScreen SetVideoMode GetVideoModeCount GetVideoModeData SetCursorPos GetCursorType SetCursorType GetCapabilities end;
: : : : : : : : : : :
Procedure; Procedure; Procedure(Force : Boolean); Procedure; Function (Const Mode : TVideoMode) : Boolean; Function : Word; Function(Index : Word; Var Data : TVideoMode) : Boolean; procedure (NewCursorX, NewCursorY: Word); function : Word; procedure (NewType: Word); Function : Word;
Not all of these functions must be implemented. In fact, the only absolutely necessary function to write a functioning driver is the UpdateScreen function. The general calls in the Video unit will check which functionality is implemented by the driver. The functionality of these calls is the same as the functionality of the calls in the video unit, so the expected behaviour can be found in the previous section. Some of the calls, however, need some additional remarks. InitDriver Called by InitVideo, this function should initialize any data structures needed for the functionality of the driver, maybe do some screen initializations. The function is guaranteed to be called only once; It can only be called again after a call to DoneVideo. The variables ScreenWidth and ScreenHeight should be initialized correctly after a call to this function, as the InitVideo call will initialize the VideoBuf and OldVideoBuf arrays based on their values. DoneDriver This should clean up any structures that have been initialized in the InitDriver function. It should possibly also restore the screen as it was before the driver was initialized. The VideoBuf and OldVideoBuf arrays will be disposed of by the general DoneVideo call. UpdateScreen This is the only required function of the driver. It should update the screen based on the VideoBuf arrays contents. It can optimize this process by comparing the values with values in the OldVideoBuf array. After updating the screen, the UpdateScreen procedure should update the OldVideoBuf by itself. If the Force parameter is True, the whole screen should be updated, not just the changed values. ClearScreen If there is a faster way to clear the screen than to write spaces in all character cells, then it can be implemented here. If the driver does not implement this function, then the general routines will write spaces in all video cells, and will call UpdateScreen(True). SetVideoMode Should set the desired video mode, if available. It should return True if the mode was set, False if not. GetVideoModeCount Should return the number of supported video modes. If no modes are supported, this function should not be implemented; the general routines will return 1. (for the current mode) GetVideoModeData Should return the data for the Index-th mode; Index is zero based. The function should return true if the data was returned correctly, false if Index contains an invalid index. If this is not implemented, then the general routine will return the current video mode when Index equals 0. GetCapabilities If this function is not implemented, zero (i.e. no capabilities) will be returned by the general function. 1729
The following unit shows how to override a video driver, with a driver that writes debug information to a le. The unit can be used in any of the demonstration programs, by simply including it in the uses clause. Setting DetailedVideoLogging to True will create a more detailed log (but will also slow down functioning) Listing: ./videoex/viddbg.pp
u n i t viddbg ; Interface uses v i d e o ;
Procedure S t a r t V i d e o L o g g i n g ; Procedure StopVideoLogging ; Function Is Vi de oL og gi ng : Boolean ; Procedure SetVideoLogFileName ( FileName : S t r i n g ) ; Const D e t a i l e d V i d e o L o g g i n g : Boolean = False ; Implementation uses s y s u t i l s , keyboard ; var NewVideoDriver , OldVideoDriver : TVideoDriver ; A c t i v e , Logging : Boolean ; LogFileName : S t r i n g ; VideoLog : Text ; Function TimeStamp : S t r i n g ; begin TimeStamp : = FormatDateTime ( hh : nn : ss , Time ( ) ) ; end ; Procedure S t a r t V i d e o L o g g i n g ; begin Logging : = True ; W r i t e l n ( VideoLog , S t a r t l o g g i n g v i d e o o p e r a t i o n s a t : , TimeStamp ) ; end ; Procedure StopVideoLogging ; begin W r i t e l n ( VideoLog , Stop l o g g i n g v i d e o o p e r a t i o n s a t : , TimeStamp ) ; Logging : = False ; end ; Function Is Vi de oL og gi ng : Boolean ; begin I s V i de oL og gi ng : = Logging ; end ;
1730
Var ColUpd , RowUpd : Array [ 0 . . 1 0 2 4 ] of I n t e g e r ; Procedure D u m p S c r e e n S t a t i s t i c s ( Force : Boolean ) ; Var I , Count : I n t e g e r ; begin I f Force then Write ( VideoLog , f o r c e d ) ; W r i t e l n ( VideoLog , v i d e o update a t , TimeStamp , : ) ; F i l l C h a r ( Colupd , SizeOf ( ColUpd ) , # 0 ) ; F i l l C h a r ( Rowupd , SizeOf (RowUpd ) , # 0 ) ; Count : = 0 ; For I : = 0 to VideoBufSize div SizeOf ( T V i d e o C e l l ) do begin I f VideoBuf ^ [ i ] < > OldVideoBuf ^ [ i ] then begin Inc ( Count ) ; Inc ( ColUpd [ I mod ScreenWidth ] ) ; Inc (RowUpd [ I div ScreenHeight ] ) ; end ; end ; Write ( VideoLog , Count , v i d e o c e l l s d i f f e r e d d i v i d e d over ) ; Count : = 0 ; For I : = 0 to ScreenWidth 1 do I f ColUpd [ I ] < >0 then Inc ( Count ) ; Write ( VideoLog , Count , columns and ) ; Count : = 0 ; For I : = 0 to ScreenHeight 1 do I f RowUpd [ I ] < >0 then Inc ( Count ) ; W r i t e l n ( VideoLog , Count , rows . ) ; I f D e t a i l e d V i d e o L o g g i n g Then begin For I : = 0 to ScreenWidth 1 do I f ( ColUpd [ I ] < > 0 ) then W r i t e l n ( VideoLog , Col , i , : , ColUpd [ I ] : 3 , rows changed ) ; For I : = 0 to ScreenHeight 1 do I f ( RowUpd [ I ] < > 0 ) then W r i t e l n ( VideoLog , Row , i , : ,RowUpd [ I ] : 3 , colums changed ) ; end ; end ; Procedure LogUpdateScreen ( Force : Boolean ) ; begin I f Logging then D u m p S c r e e n S t a t i s t i c s ( Force ) ; O l d V i d e o D r i v e r . UpdateScreen ( Force ) ; end ; Procedure L o g I n i t V i d e o ; begin OldVideoDriver . I n i t D r i v e r ( ) ;
1731
Assign ( VideoLog , logFileName ) ; Rewrite ( VideoLog ) ; A c t i v e : = True ; StartVideoLogging ; end ; Procedure LogDoneVideo ; begin StopVideoLogging ; Close ( VideoLog ) ; A c t i v e : = False ; O l d V i d e o D r i v e r . DoneDriver ( ) ; end ; Procedure SetVideoLogFileName ( FileName : S t r i n g ) ; begin I f Not A c t i v e then LogFileName : = FileName ; end ; Initialization GetVideoDriver ( OldVideoDriver ) ; NewVideoDriver : = O l d V i d e o D r i v e r ; NewVideoDriver . UpdateScreen : = @LogUpdateScreen ; NewVideoDriver . I n i t D r i v e r : = @LogInitVideo ; NewVideoDriver . DoneDriver : = @LogDoneVideo ; LogFileName : = Video . l o g ; Logging : = False ; S e t V i d e o D r i v e r ( NewVideoDriver ) ; end .
44.4
44.4.1
Black = 0 Black color attribute Blink = 128 Blink attribute Blue = 1 Blue color attribute Brown = 6 Brown color attribute cpBlink = $0002 1732
Video driver supports blink attribute cpChangeCursor = $0020 Video driver supports changing cursor shape. cpChangeFont = $0008 Video driver supports changing screen font. cpChangeMode = $0010 Video driver supports changing mode cpColor = $0004 Video driver supports color cpUnderLine = $0001 Video driver supports underline attribute crBlock = 2 Block cursor crHalfBlock = 3 Half block cursor crHidden = 0 Hide cursor crUnderLine = 1 Underline cursor Cyan = 3 Cyan color attribute DarkGray = 8 Dark gray color attribute errOk = 0 No error ErrorCode : LongInt = ErrOK 1733
Error code returned by the last operation. ErrorHandler : TErrorHandler = @DefaultErrorHandler The ErrorHandler variable can be set to a custom-error handling function. It is set by default to the DefaultErrorHandler (1739) function. ErrorInfo : Pointer = Nil Pointer to extended error information. errVioBase = 1000 Base value for video errors errVioInit = errVioBase + 1 Video driver initialization error. errVioNoSuchMode = errVioBase + 3 Invalid video mode errVioNotSupported = errVioBase + 2 Unsupported video function FVMaxWidth = 240 Maximum screen buffer width. Green = 2 Green color attribute
iso_codepages = [iso01, iso02, iso03, iso04, iso05, iso06, iso07, iso08, iso09, iso10 iso_codepages is a set containing all code pages that use an ISO encoding. LightBlue = 9 Light Blue color attribute LightCyan = 11 Light cyan color attribute LightGray = 7 Light gray color attribute 1734
LightGreen = 10 Light green color attribute LightMagenta = 13 Light magenta color attribute LightRed = 12 Light red color attribute LowAscii = True On some systems, the low 32 values of the DOS code page are necessary for the ASCII control codes and cannot be displayed by programs. If LowAscii is true, you can use the low 32 ASCII values. If it is false, you must avoid using them. LowAscii can be implemented either through a constant, variable or property. You should under no circumstances assume that you can write to LowAscii, or take its address. Magenta = 5 Magenta color attribute NoExtendedFrame = False The VT100 character set only has line drawing characters consisting of a single line. If this value is true, the line drawing characters with two lines will be automatically converted to single lines. NoExtendedFrame can be implemented either through a constant, variable or property. You should under no circumstances assume that you can write to NoExtendedFrame, or take its address. Red = 4 Red color attribute ScreenHeight : Word = 0 Current screen height ScreenWidth : Word = 0 Current screen Width vga_codepages = [cp437, cp850, cp852, cp866] vga_codepages is a set containing all code pages that can be considered a normal vga font (as in use on early VGA cards) Note that KOI8-R has line drawing characters in wrong place. vioOK = 0 No errors occurred White = 15 White color attribute Yellow = 14 Yellow color attribute 1735
44.4.2
Types
PVideoBuf = ^TVideoBuf Pointer type to TVideoBuf (1737) PVideoCell = ^TVideoCell Pointer type to TVideoCell (1737) PVideoMode = ^TVideoMode Pointer to TVideoMode (1737) record. Tencoding = (cp437,cp850,cp852,cp866,koi8r,iso01,iso02,iso03,iso04, iso05,iso06,iso07,iso08,iso09,iso10,iso13,iso14,iso15,utf8)
Table 44.1: Enumeration values for type Tencoding Value cp437 cp850 cp852 cp866 iso01 iso02 iso03 iso04 iso05 iso06 iso07 iso08 iso09 iso10 iso13 iso14 iso15 koi8r utf8 Explanation Codepage 437 Codepage 850 Codepage 852 Codepage 866 ISO 8859-1 ISO 8859-2 ISO 8859-3 ISO 8859-4 ISO 8859-5 ISO 8859-6 ISO 8859-7 ISO 8859-8 ISO 8859-9 ISO 8859-10 ISO 8859-13 ISO 8859-14 ISO 8859-15 KOI8-R codepage UTF-8 encoding
This type is available under Unix-like operating systems only. TErrorHandler = function(Code: LongInt;Info: Pointer) : TErrorHandlerReturnValue The TErrorHandler function is used to register an own error handling function. It should be used when installing a custom error handling function, and must return one of the above values. Code should contain the error code for the error condition, and the Info parameter may contain any data type specic to the error code passed to the function. TErrorHandlerReturnValue = (errRetry,errAbort,errContinue) 1736
Table 44.2: Enumeration values for type TErrorHandlerReturnValue Value errAbort errContinue errRetry Explanation abort and return error code abort without returning an errorcode. retry the operation
Type used to report and respond to error conditions TVideoBuf = Array[0..32759] of TVideoCell The TVideoBuf type represents the screen. TVideoCell = Word TVideoCell describes one character on the screen. One of the bytes contains the color attribute with which the character is drawn on the screen, and the other byte contains the ASCII code of the character to be drawn. The exact position of the different bytes in the record is operating system specic. On most little-endian systems, the high byte represents the color attribute, while the lowbyte represents the ASCII code of the character to be drawn. TVideoDriver = record InitDriver : procedure; DoneDriver : procedure; UpdateScreen : procedure(Force: Boolean); ClearScreen : procedure; SetVideoMode : function(const Mode: TVideoMode) : Boolean; GetVideoModeCount : function : Word; GetVideoModeData : function(Index: Word;var Data: TVideoMode) : Boolean; SetCursorPos : procedure(NewCursorX: Word;NewCursorY: Word); GetCursorType : function : Word; SetCursorType : procedure(NewType: Word); GetCapabilities : function : Word; end
TVideoDriver record can be used to install a custom video driver, with the SetVideoDriver (1747) call. An explanation of all elds can be found there. TVideoMode = record Col : Word; Row : Word; Color : Boolean; end
The TVideoMode record describes a videomode. Its elds are self-explaining: Col,Row describe the number of columns and rows on the screen for this mode. Color is True if this mode supports colors, or False if not. 1737
TVideoModeSelector = function(const VideoMode: TVideoMode; Params: LongInt) : Boolean Video mode selection callback prototype.
44.4.3
Variables
CursorLines : Byte CursorLines is a bitmask which determines which cursor lines are visible and which are not. Each set bit corresponds to a cursorline being shown. This variable is not supported on all platforms, so it should be used sparingly. CursorX : Word Current horizontal position in the screen where items will be written. CursorY : Word Current vertical position in the screen where items will be written. external_codepage : Tencoding This variable is for internal use only and should not be used. internal_codepage : Tencoding This variable is for internal use only and should not be used. OldVideoBuf : PVideoBuf The OldVideoBuf contains the state of the video screen after the last screen update. The UpdateScreen (1748) function uses this array to decide which characters on screen should be updated, and which not. Note that the OldVideoBuf array may be ignored by some drivers, so it should not be used. The Array is in the interface section of the video unit mainly so drivers that need it can make use of it. ScreenColor : Boolean ScreenColor indicates whether the current screen supports colors. VideoBuf : PVideoBuf VideoBuf forms the heart of the Video unit: This variable represents the physical screen. Writing to this array and calling UpdateScreen (1748) will write the actual characters to the screen. VideoBufSize : LongInt Current size of the video buffer pointed to by VideoBuf (1738)
1738
44.5
44.5.1
Synopsis: Clear the video screen. Declaration: procedure ClearScreen Visibility: default Description: ClearScreen clears the entire screen, and calls UpdateScreen (1748) after that. This is done by writing spaces to all character cells of the video buffer in the default color (lightgray on black, color attribute \$07). Errors: None. See also: InitVideo (1745), UpdateScreen (1748) Listing: ./videoex/ex3.pp
program t e s t v i d e o ; uses video , keyboard , v i d u t i l ; Var i : longint ; k : TkeyEvent ; begin InitVideo ; InitKeyboard ; For I : = 1 to 1 0 do TextOut ( i , i , Press any key t o c l e a r screen ) ; UpdateScreen ( f a l s e ) ; K: = GetKeyEvent ; ClearScreen ; TextOut ( 1 , 1 , Cleared screen . Press any key t o end ) ; UpdateScreen ( t r u e ) ; K: = GetKeyEvent ; DoneKeyBoard ; DoneVideo ; end .
44.5.2
DefaultErrorHandler
Synopsis: Default error handling routine. Declaration: function DefaultErrorHandler(AErrorCode: LongInt;AErrorInfo: Pointer) : TErrorHandlerReturnValue Visibility: default Description: DefaultErrorHandler is the default error handler used by the video driver. It simply sets the error code AErrorCode and AErrorInfo in the global variables ErrorCode and ErrorInfo and returns errContinue. Errors: None.
1739
44.5.3
DoneVideo
Synopsis: Disable video driver. Declaration: procedure DoneVideo Visibility: default Description: DoneVideo disables the Video driver if the video driver is active. If the videodriver was already disabled or not yet initialized, it does nothing. Disabling the driver means it will clean up any allocated resources, possibly restore the screen in the state it was before InitVideo was called. Particularly, the VideoBuf and OldVideoBuf arrays are no longer valid after a call to DoneVideo. The DoneVideo should always be called if InitVideo was called. Failing to do so may leave the screen in an unusable state after the program exits. For an example, see most other functions. Errors: Normally none. If the driver reports an error, this is done through the ErrorCode variable. See also: InitVideo (1745)
44.5.4
GetCapabilities
Synopsis: Get current driver capabilities. Declaration: function GetCapabilities : Word Visibility: default Description: GetCapabilities returns the capabilities of the current driver. It is an or-ed combination of the following constants: cpUnderLineVideo driver supports underline attribute cpBlinkVideo driver supports blink attribute cpColorVideo driver supports color cpChangeFontVideo driver supports changing screen font. cpChangeModeVideo driver supports changing mode cpChangeCursorVideo driver supports changing cursor shape. Note that the video driver should not yet be initialized to use this function. It is a property of the driver. Errors: None. See also: GetCursorType (1741), GetVideoDriver (1743) Listing: ./videoex/ex4.pp
Program Example4 ; { Program t o demonstrate t h e G e t C a p a b i l i t i e s f u n c t i o n . } Uses v i d e o ; Var W: Word ; Procedure TestCap ( Cap : Word ; Msg : S t r i n g ) ;
1740
begin Write ( Msg , : ) ; I f (W and Cap=Cap ) then W r i t e l n ( Yes ) else W r i t e l n ( No ) ; end ; begin W: = G e t C a p a b i l i t i e s ; W r i t e l n ( Video d r i v e r s u p p o r t s f o l l o w i n g f u n c t i o n a l i t y ) ; TestCap ( cpUnderLine , U n d e r l i n e d c h a r a c t e r s ) ; TestCap ( c p B l i n k , B l i n k i n g c h a r a c t e r s ) ; TestCap ( cpColor , C o l o r c h a r a c t e r s ) ; TestCap ( cpChangeFont , Changing f o n t ) ; TestCap ( cpChangeMode , Changing v i d e o mode ) ; TestCap ( cpChangeCursor , Changing c u r s o r shape ) ; end .
44.5.5
GetCursorType
Synopsis: Get screen cursor type Declaration: function GetCursorType : Word Visibility: default Description: GetCursorType returns the current cursor type. It is one of the following values: crHiddenHide cursor crUnderLineUnderline cursor crBlockBlock cursor crHalfBlockHalf block cursor Note that not all drivers support all types of cursors. Errors: None. See also: SetCursorType (1747), GetCapabilities (1740) Listing: ./videoex/ex5.pp
Program Example5 ; { Program t o demonstrate t h e GetCursorType f u n c t i o n . } Uses video , keyboard , v i d u t i l ; Const C u r s o r t y p es : Array [ crHidden . . c r H a l f B l o c k ] of s t r i n g = ( Hidden , UnderLine , Block , H a l f B l o c k ) ; begin InitVideo ; InitKeyboard ; TextOut ( 1 , 1 , Cursor t y p e : +CursorTypes [ GetCursorType ] ) ;
1741
TextOut ( 1 , 2 , Press any key t o e x i t . ) ; UpdateScreen ( False ) ; GetKeyEvent ; DoneKeyboard ; DoneVideo ; end .
44.5.6
GetLockScreenCount
Synopsis: Get the screen lock update count. Declaration: function GetLockScreenCount : Integer Visibility: default Description: GetLockScreenCount returns the current lock level. When the lock level is zero, a call to UpdateScreen (1748) will actually update the screen. Errors: None. See also: LockScreenUpdate (1745), UnlockScreenUpdate (1748), UpdateScreen (1748) Listing: ./videoex/ex6.pp
Program Example6 ; { Program t o demonstrate t h e GetLockScreenCount f u n c t i o n . } Uses video , keyboard , v i d u t i l ; Var I : Longint ; S : String ; begin InitVideo ; InitKeyboard ; TextOut ( 1 , 1 , Press key t i l l new t e x t appears . ) ; UpdateScreen ( False ) ; Randomize ; For I : = 0 to Random( 1 0 ) + 1 do LockScreenUpdate ; I :=0; While GetLockScreenCount < >0 do begin Inc ( I ) ; Str ( I ,S ) ; UnlockScreenUpdate ; GetKeyEvent ; TextOut ( 1 , 1 , UnLockScreenUpdate had t o be c a l l e d +S+ t i m e s ) ; UpdateScreen ( False ) ; end ; TextOut ( 1 , 2 , Press any key t o end . ) ; UpdateScreen ( False ) ; GetKeyEvent ; DoneKeyboard ; DoneVideo ; end .
1742
44.5.7
GetVideoDriver
Synopsis: Get a copy of the current video driver. Declaration: procedure GetVideoDriver(var Driver: TVideoDriver) Visibility: default Description: GetVideoDriver returns the currently active video driver record in Driver. It can be used to clone the current video driver, or to override certain parts of it using the SetVideoDriver (1747) call. Errors: None. See also: SetVideoDriver (1747)
44.5.8
GetVideoMode
Synopsis: Return current video mode Declaration: procedure GetVideoMode(var Mode: TVideoMode) Visibility: default Description: GetVideoMode returns the settings of the currently active video mode. The row,col elds indicate the dimensions of the current video mode, and Color is true if the current video supports colors. See also: SetVideoMode (1748), GetVideoModeData (1745) Listing: ./videoex/ex7.pp
Program Example7 ; { Program t o demonstrate t h e GetVideoMode f u n c t i o n . } Uses video , keyboard , v i d u t i l ; Var M : TVideoMode ; S : String ; begin InitVideo ; InitKeyboard ; GetVideoMode (M) ; i f M. C o l o r then TextOut ( 1 , 1 , C u r r e n t else TextOut ( 1 , 1 , C u r r e n t S t r (M. Row, S ) ; TextOut ( 1 , 2 , Number o f S t r (M. Col , S ) ; TextOut ( 1 , 3 , Number o f T e x t o u t ( 1 , 4 , Press any UpdateScreen ( False ) ; GetKeyEvent ; DoneKeyboard ; DoneVideo ; end .
columns : +S ) ; key t o e x i t . ) ;
1743
44.5.9
GetVideoModeCount
Synopsis: Get the number of video modes supported by the driver. Declaration: function GetVideoModeCount : Word Visibility: default Description: GetVideoModeCount returns the number of video modes that the current driver supports. If the driver does not support switching of modes, then 1 is returned. This function can be used in conjunction with the GetVideoModeData (1745) function to retrieve data for the supported video modes. Errors: None. See also: GetVideoModeData (1745), GetVideoMode (1743) Listing: ./videoex/ex8.pp
Program Example8 ; { Program t o demonstrate t h e GetVideoModeCount f u n c t i o n . } Uses video , keyboard , v i d u t i l ; Procedure DumpMode (M : TVideoMode ; Index : I n t e g e r ) ; Var S : String ; begin S t r ( Index : 2 , S ) ; inc ( Index ) ; TextOut ( 1 , Index , Data f o r mode +S+ : ) ; i f M. C o l o r then TextOut ( 1 9 , Index , color , ) else TextOut ( 1 9 , Index , No c o l o r , ) ; S t r (M. Row: 3 , S ) ; TextOut ( 2 8 , Index , S+ rows ) ; S t r (M. Col : 3 , S ) ; TextOut ( 3 6 , index , S+ columns ) ; end ; Var i , Count : I n t e g e r ; m : TVideoMode ; begin InitVideo ; InitKeyboard ; Count : = GetVideoModeCount ; For I : = 1 to Count do begin GetVideoModeData ( I 1,M) ; DumpMode(M, I 1); end ; TextOut ( 1 , Count +1 , Press any key t o e x i t ) ; UpdateScreen ( False ) ;
1744
44.5.10
GetVideoModeData
Synopsis: Get the specications for a video mode Declaration: function GetVideoModeData(Index: Word;var Data: TVideoMode) : Boolean Visibility: default Description: GetVideoModeData returns the characteristics of the Index-th video mode in Data. Index is zero based, and has a maximum value of GetVideoModeCount-1. If the current driver does not support setting of modes (GetVideoModeCount=1) and Index is zero, the current mode is returned. The function returns True if the mode data was retrieved succesfully, False otherwise. For an example, see GetVideoModeCount (1744). Errors: In case Index has a wrong value, False is returned. See also: GetVideoModeCount (1744), SetVideoMode (1748), GetVideoMode (1743)
44.5.11
InitVideo
Synopsis: Initialize video driver. Declaration: procedure InitVideo Visibility: default Description: InitVideo Initializes the video subsystem. If the video system was already initialized, it does nothing. After the driver has been initialized, the VideoBuf and OldVideoBuf pointers are initialized, based on the ScreenWidth and ScreenHeight variables. When this is done, the screen is cleared. For an example, see most other functions. Errors: if the driver fails to initialize, the ErrorCode variable is set. See also: DoneVideo (1740)
44.5.12
LockScreenUpdate
Synopsis: Prevent further screen updates. Declaration: procedure LockScreenUpdate Visibility: default Description: LockScreenUpdate increments the screen update lock count with one. As long as the screen update lock count is not zero, UpdateScreen (1748) will not actually update the screen. This function can be used to optimize screen updating: If a lot of writing on the screen needs to be done (by possibly unknown functions), calling LockScreenUpdate before the drawing, and
1745
UnlockScreenUpdate (1748) after the drawing, followed by a UpdateScreen (1748) call, all writing will be shown on screen at once. For an example, see GetLockScreenCount (1742). Errors: None. See also: UpdateScreen (1748), UnlockScreenUpdate (1748), GetLockScreenCount (1742)
44.5.13
SetCursorPos
Synopsis: Set write cursor position. Declaration: procedure SetCursorPos(NewCursorX: Word;NewCursorY: Word) Visibility: default Description: SetCursorPos positions the cursor on the given position: Column NewCursorX and row NewCursorY. The origin of the screen is the upper left corner, and has coordinates (0,0). The current position is stored in the CursorX and CursorY variables. Errors: None. See also: SetCursorType (1747) Listing: ./videoex/ex2.pp
program example2 ; uses video , keyboard ; Var P , PP,D : I n t e g e r ; K : TKeyEvent ; Procedure PutSquare ( P : I N t e g e r ; C : Char ) ; begin VideoBuf ^ [ P ] : = Ord (C) + ( $07 shl 8 ) ; VideoBuf ^ [ P+ScreenWidth ] : = Ord ( c ) + ( $07 shl 8 ) ; VideoBuf ^ [ P+ 1 ] : = Ord ( c ) + ( $07 shl 8 ) ; VideoBuf ^ [ P+ScreenWidth + 1 ] : = Ord ( c ) + ( $07 shl 8 ) ; end ; begin InitVideo ; InitKeyBoard ; P: = 0 ; PP:= 1; Repeat I f PP<>1 then PutSquare (PP, ) ; PutSquare ( P , # ) ; SetCursorPos ( P Mod ScreenWidth , P div ScreenWidth ) ; UpdateScreen ( False ) ; PP: =P ; Repeat D: = 0 ; K: = TranslateKeyEvent ( GetKeyEvent ) ;
1746
Case GetKeyEventCode (K ) of k b d L e f t : I f ( P Mod ScreenWidth ) < >0 then D:= 1; kbdUp : I f P>=ScreenWidth then D:= ScreenWidth ; kbdRight : I f ( ( P+ 2 ) Mod ScreenWidth ) < >0 then D: = 1 ; kbdDown : i f ( P<( VideoBufSize div 2) ( ScreenWidth 2 ) ) then D: = ScreenWidth ; end ; U n t i l ( D< >0) or ( GetKeyEventChar (K)= q ) ; P: =P+D; u n t i l GetKeyEventChar (K)= q ; DoneKeyBoard ; DoneVideo ; end .
44.5.14
SetCursorType
Synopsis: Set cursor type Declaration: procedure SetCursorType(NewType: Word) Visibility: default Description: SetCursorType sets the cursor to the type specied in NewType. crHiddenHide cursor crUnderLineUnderline cursor crBlockBlock cursor crHalfBlockHalf block cursor Errors: None. See also: SetCursorPos (1746)
44.5.15
SetVideoDriver
Synopsis: Install a new video driver. Declaration: function SetVideoDriver(const Driver: TVideoDriver) : Boolean Visibility: default Description: SetVideoDriver sets the videodriver to be used to Driver. If the current videodriver is initialized (after a call to InitVideo) then it does nothing and returns False. A new driver can only be installed if the previous driver was not yet activated (i.e. before a call to InitVideo (1745)) or after it was deactivated (i.e after a call to DoneVideo). For more information about installing a videodriver, see viddriver (1728). For an example, see the section on writing a custom video driver. Errors: If the current driver is initialized, then False is returned. See also: viddriver (1728)
1747
44.5.16
SetVideoMode
Synopsis: Set current video mode. Declaration: function SetVideoMode(const Mode: TVideoMode) : Boolean Visibility: default Description: SetVideoMode sets the video mode to the mode specied in Mode: If the call was succesful, then the screen will have Col columns and Row rows, and will be displaying in color if Color is True. The function returns True if the mode was set succesfully, False otherwise. Note that the video mode may not always be set. E.g. a console on Linux or a telnet session cannot always set the mode. It is important to check the error value returned by this function if it was not succesful. The mode can be set when the video driver has not yet been initialized (i.e. before InitVideo (1745) was called) In that case, the video mode will be stored, and after the driver was initialized, an attempt will be made to set the requested mode. Changing the video driver before the call to InitVideo will clear the stored video mode. To know which modes are valid, use the GetVideoModeCount (1744) and GetVideoModeData (1745) functions. To retrieve the current video mode, use the GetVideoMode (1743) procedure. Errors: If the specied mode cannot be set, then errVioNoSuchMode may be set in ErrorCode See also: GetVideoModeCount (1744), GetVideoModeData (1745), GetVideoMode (1743)
44.5.17
UnlockScreenUpdate
Synopsis: Unlock screen update. Declaration: procedure UnlockScreenUpdate Visibility: default Description: UnlockScreenUpdate decrements the screen update lock count with one if it is larger than zero. When the lock count reaches zero, the UpdateScreen (1748) will actually update the screen. No screen update will be performed as long as the screen update lock count is nonzero. This mechanism can be used to increase screen performance in case a lot of writing is done. It is important to make sure that each call to LockScreenUpdate (1745) is matched by exactly one call to UnlockScreenUpdate For an example, see GetLockScreenCount (1742). Errors: None. See also: LockScreenUpdate (1745), GetLockScreenCount (1742), UpdateScreen (1748)
44.5.18
UpdateScreen
Synopsis: Update physical screen with internal screen image. Declaration: procedure UpdateScreen(Force: Boolean) Visibility: default
1748
Description: UpdateScreen synchronizes the actual screen with the contents of the VideoBuf internal buffer. The parameter Force species whether the whole screen has to be redrawn (Force=True) or only parts that have changed since the last update of the screen. The Video unit keeps an internal copy of the screen as it last wrote it to the screen (in the OldVideoBuf array). The current contents of VideoBuf are examined to see what locations on the screen need to be updated. On slow terminals (e.g. a linux telnet session) this mechanism can speed up the screen redraw considerably. On platforms where mouse cursor visibility is not guaranteed to be preserved during screen updates this routine has to restore the mouse cursor after the update (usually by calling HideMouse from unit Mouse before the real update and ShowMouse afterwards). For an example, see most other functions. Errors: None. See also: ClearScreen (1739)
1749
Chapter 45
The wincrt unit provides some auxiliary routines for use with the graph (631) unit, namely keyboard support. It has no connection with the crt (421) unit, nor with the Turbo-Pascal for Windows WinCrt unit. As such, it should not be used by end users. Refer to the crt (421) unit instead.
45.2
45.2.1
directvideo : Boolean On windows, this variable is ignored. lastmode : Word Is supposed to contain the last used video mode, but is actually unused.
45.3
45.3.1
Synopsis: Pause program execution Declaration: procedure delay(ms: Word) Visibility: default Description: Delay stops program execution for the indicated number ms of milliseconds. See also: sound (1751), nosound (1751)
45.3.2
keypressed
1750
Declaration: function keypressed : Boolean Visibility: default Description: KeyPressed returns True if the user pressed a key, or False if not. It does not wait for the user to press a key. See also: readkey (1751)
45.3.3
nosound
Synopsis: Stop the speaker Declaration: procedure nosound Visibility: default Description: NoSound does nothing, windows does not support this. See also: sound (1751)
45.3.4
readkey
Synopsis: Read a key from the keyboard Declaration: function readkey : Char Visibility: default Description: ReadKey reads a key from the keyboard, and returns the ASCII value of the key, or the scancode of the key in case it is a special key. The function waits until a key is pressed. See also: KeyPressed (1750)
45.3.5
sound
Synopsis: Sound PC speaker Declaration: procedure sound(hz: Word) Visibility: default Description: Sound sounds the PC speaker. It emits a tone with frequency Hz for 500 milliseconds. (the time argument is required by the windows API) See also: nosound (1751)
45.3.6
textmode
Synopsis: Set indicated text mode Declaration: procedure textmode(mode: Integer) Visibility: default Description: TextMode does nothing.
1751
Chapter 46
46.2
Overview
The x86 unit contains some of the routines that were present in the 1.0.X Linux unit, and which were Intel (PC) architecture specic. These calls have been preserved for compatibility, but should be considered deprecated: they are not portable and may not even work on future linux versions.
46.3
46.3.1
Synopsis: Set permission on IO ports Declaration: function fpIOperm(From: Cardinal;Num: Cardinal;Value: cint) : cint Visibility: default Description: FpIOperm sets permissions on Num ports starting with port From to Value. The function returns zero if the call was successfull, a nonzero value otherwise. Note: This works ONLY as root. Only the rst 0x03ff ports can be set. When doing a FpFork (153), the permissions are reset. When doing a FpExecVE (150) they are kept. 1752
46.3.2
fpIoPL
Synopsis: Set I/O privilege level Declaration: function fpIoPL(Level: cint) : cint Visibility: default Description: FpIoPL sets the I/O privilige level. It is intended for completeness only, one should normally not use it.
46.3.3
ReadPort
Synopsis: Read data from a PC port Declaration: procedure ReadPort(Port: LongInt;var Value: Byte) procedure ReadPort(Port: LongInt;var Value: LongInt) procedure ReadPort(Port: LongInt;var Value: Word) Visibility: default Description: ReadPort reads one Byte, Word or Longint from port Port into Value. Note that you need permission to read a port. This permission can be set by the root user with the FpIOPerm (1752) call. Errors: In case of an error (not enough permissions read this port), runtime 216 (Access Violation) will occur. See also: FpIOPerm (1752), ReadPortB (1753), ReadPortW (1754), ReadPortL (1754), WritePort (1754), WritePortB (1755), WritePortL (1755), WritePortW (1755)
46.3.4
ReadPortB
Synopsis: Read bytes from a PC port Declaration: function ReadPortB(Port: LongInt) : Byte procedure ReadPortB(Port: LongInt;var Buf;Count: LongInt) Visibility: default Description: The procedural form of ReadPortB reads Count bytes from port Port and stores them in Buf. There must be enough memory allocated at Buf to store Count bytes. The functional form of ReadPortB reads 1 byte from port B and returns the byte that was read. Note that you need permission to read a port. This permission can be set by the root user with the FpIOPerm (1752) call. Errors: In case of an error (not enough permissions read this port), runtime 216 (Access Violation) will occur. See also: FpIOPerm (1752), ReadPort (1753), ReadPortW (1754), ReadPortL (1754), WritePort (1754), WritePortB (1755), WritePortL (1755), WritePortW (1755)
1753
46.3.5
ReadPortL
Synopsis: Read longints from a PC port Declaration: function ReadPortL(Port: LongInt) : LongInt procedure ReadPortL(Port: LongInt;var Buf;Count: LongInt) Visibility: default Description: The procedural form of ReadPortL reads Count longints from port Port and stores them in Buf. There must be enough memory allocated at Buf to store Count Longints. The functional form of ReadPortL reads 1 longint from port B and returns the longint that was read. Note that you need permission to read a port. This permission can be set by the root user with the FpIOPerm (1752) call. Errors: In case of an error (not enough permissions read this port), runtime 216 (Access Violation) will occur. See also: FpIOPerm (1752), ReadPort (1753), ReadPortW (1754), ReadPortB (1753), WritePort (1754), WritePortB (1755), WritePortL (1755), WritePortW (1755)
46.3.6
ReadPortW
Synopsis: Read Words from a PC port Declaration: function ReadPortW(Port: LongInt) : Word procedure ReadPortW(Port: LongInt;var Buf;Count: LongInt) Visibility: default Description: The procedural form of ReadPortW reads Count words from port Port and stores them in Buf. There must be enough memory allocated at Buf to store Count words. The functional form of ReadPortW reads 1 word from port B and returns the word that was read. Note that you need permission to read a port. This permission can be set by the root user with the FpIOPerm (1752) call. Errors: In case of an error (not enough permissions read this port), runtime 216 (Access Violation) will occur. See also: FpIOPerm (1752), ReadPort (1753), ReadPortB (1753), ReadPortL (1754), WritePort (1754), WritePortB (1755), WritePortL (1755), WritePortW (1755)
46.3.7
WritePort
Synopsis: Write data to PC port Declaration: procedure WritePort(Port: LongInt;Value: Byte) procedure WritePort(Port: LongInt;Value: LongInt) procedure WritePort(Port: LongInt;Value: Word) Visibility: default Description: WritePort writes Value 1 byte, Word or longint to port Port. Remark: You need permission to write to a port. This permission can be set with root permission with the FpIOPerm (1752) call. 1754
Errors: In case of an error (not enough permissions to write to this port), runtime 216 (Access Violation) will occur. See also: FpIOPerm (1752), WritePortB (1755), WritePortL (1755), WritePortW (1755), ReadPortB (1753), ReadPortL (1754), ReadPortW (1754)
46.3.8
WritePortB
Synopsis: Write byte to PC port Declaration: procedure WritePortB(Port: LongInt;Value: Byte) procedure WritePortB(Port: LongInt;var Buf;Count: LongInt) Visibility: default Description: The rst form of WritePortB writes 1 byte to port Port. The second form writes Count bytes from Buf to port Port. Remark: You need permission to write to a port. This permission can be set with root permission with the FpIOPerm (1752) call. Errors: In case of an error (not enough permissions to write to this port), runtime 216 (Access Violation) will occur. See also: FpIOPerm (1752), WritePort (1754), WritePortL (1755), WritePortW (1755), ReadPortB (1753), ReadPortL (1754), ReadPortW (1754)
46.3.9
WritePortl
Synopsis: Write longint to PC port. Declaration: procedure WritePortL(Port: LongInt;Value: LongInt) procedure WritePortl(Port: LongInt;var Buf;Count: LongInt) Visibility: default Description: The rst form of WritePortB writes 1 byte to port Port. The second form writes Count bytes from Buf to port Port. Remark: You need permission to write to a port. This permission can be set with root permission with the FpIOPerm (1752) call. Errors: In case of an error (not enough permissions to write to this port), runtime 216 (Access Violation) will occur. See also: FpIOPerm (1752), WritePort (1754), WritePortB (1755), WritePortW (1755), ReadPortB (1753), ReadPortL (1754), ReadPortW (1754)
46.3.10
WritePortW
Synopsis: Write Word to PC port Declaration: procedure WritePortW(Port: LongInt;Value: Word) procedure WritePortW(Port: LongInt;var Buf;Count: LongInt) Visibility: default
1755
Description: The rst form of WritePortB writes 1 byte to port Port. The second form writes Count bytes from Buf to port Port. Remark: You need permission to write to a port. This permission can be set with root permission with the FpIOPerm (1752) call. Errors: In case of an error (not enough permissions to write to this port), runtime 216 (Access Violation) will occur. See also: FpIOPerm (1752), WritePort (1754), WritePortL (1755), WritePortB (1755), ReadPortB (1753), ReadPortL (1754), ReadPortW (1754)
1756