Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Reference guide.
Free Pascal version 3.0.0:
Reference guide for RTL units.
Document version 3.0
November 2015
Contents
0.1
1
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
113
1.1
1.2
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
1.3
1.4
1.3.1
Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
1.3.2
Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
CreateShellArgV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
1.4.2
FpAccess . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
1.4.3
FpAlarm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
1.4.4
FpChdir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
1.4.5
FpChmod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
1.4.6
FpChown . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
1.4.7
FpClose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
1.4.8
FpClosedir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
1.4.9
FpDup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
1.4.10
FpDup2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
1.4.11
FpExecv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
1.4.12
FpExecve . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
1.4.13
FpExit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
1.4.14
FpFcntl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
1.4.15
fpfdfillset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
1.4.16
fpFD_CLR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
1.4.17
fpFD_ISSET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165
1.4.18
fpFD_SET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
1.4.19
fpFD_ZERO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
1.4.20
FpFork . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
1.4.21
FPFStat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
1.4.22
FpFtruncate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
CONTENTS
1.4.23
FpGetcwd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
1.4.24
FpGetegid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
1.4.25
FpGetEnv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
1.4.26
fpgeterrno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
1.4.27
FpGeteuid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
1.4.28
FpGetgid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
1.4.29
FpGetgroups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
1.4.30
FpGetpgrp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
1.4.31
FpGetpid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
1.4.32
FpGetppid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
1.4.33
fpGetPriority . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
1.4.34
FpGetRLimit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
1.4.35
FpGetsid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172
1.4.36
FpGetuid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
1.4.37
FpIOCtl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
1.4.38
FpKill . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
1.4.39
FpLink . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
1.4.40
FpLseek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
1.4.41
fpLstat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
1.4.42
FpMkdir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
1.4.43
FpMkfifo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
1.4.44
Fpmmap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
1.4.45
Fpmunmap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
1.4.46
FpNanoSleep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
1.4.47
fpNice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
1.4.48
FpOpen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
1.4.49
FpOpendir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
1.4.50
FpPause . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
1.4.51
FpPipe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
1.4.52
FpPoll . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
1.4.53
FppRead . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
1.4.54
FppWrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
1.4.55
FpRead . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
1.4.56
FpReaddir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
1.4.57
fpReadLink . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
1.4.58
FpReadV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
1.4.59
FpRename . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
1.4.60
FpRmdir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
1.4.61
fpSelect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
1.4.62
fpseterrno . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
CONTENTS
1.4.63
FpSetgid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
1.4.64
fpSetPriority . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
1.4.65
FpSetRLimit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
1.4.66
FpSetsid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
1.4.67
fpsettimeofday . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
1.4.68
FpSetuid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
1.4.69
FPSigaction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
1.4.70
FpSigAddSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
1.4.71
FpSigDelSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
1.4.72
FpsigEmptySet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
1.4.73
FpSigFillSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
1.4.74
FpSigIsMember . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
1.4.75
FpSignal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
1.4.76
FpSigPending . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
1.4.77
FpSigProcMask . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
1.4.78
FpSigSuspend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
1.4.79
FpSigTimedWait . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
1.4.80
FpSleep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
1.4.81
FpStat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198
1.4.82
fpSymlink . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
1.4.83
fpS_ISBLK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
1.4.84
fpS_ISCHR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
1.4.85
fpS_ISDIR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
1.4.86
fpS_ISFIFO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
1.4.87
fpS_ISLNK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
1.4.88
fpS_ISREG . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
1.4.89
fpS_ISSOCK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
1.4.90
fptime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
1.4.91
FpTimes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
1.4.92
FpUmask . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
1.4.93
FpUname . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
1.4.94
FpUnlink . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
1.4.95
FpUtime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
1.4.96
FpWait . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
1.4.97
FpWaitPid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
1.4.98
FpWrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
1.4.99
FpWriteV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
1.4.100
FreeShellArgV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
1.4.101
wexitStatus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
1.4.102
wifexited . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
CONTENTS
1.4.103
wifsignaled . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
1.4.104
wstopsig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
1.4.105
wtermsig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
210
2.1
2.2
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
2.3
2.4
2.5
Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
ConvertFromUtf32 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
2.4.2
ConvertToUtf32 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
2.4.3
GetNumericValue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
2.4.4
GetUnicodeCategory . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
2.4.5
IsControl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
2.4.6
IsDigit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
2.4.7
IsHighSurrogate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
2.4.8
IsLetter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
2.4.9
IsLetterOrDigit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
2.4.10
IsLower . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
2.4.11
IsLowSurrogate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
2.4.12
IsNumber . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
2.4.13
IsPunctuation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
2.4.14
IsSeparator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
2.4.15
IsSurrogate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
2.4.16
IsSurrogatePair . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
2.4.17
IsSymbol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
2.4.18
IsUpper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
2.4.19
IsWhiteSpace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
2.4.20
ToLower . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
2.4.21
ToUpper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
TCharacter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
2.5.1
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
2.5.2
2.5.3
TCharacter.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
2.5.4
TCharacter.ConvertFromUtf32 . . . . . . . . . . . . . . . . . . . . . . . 218
2.5.5
TCharacter.ConvertToUtf32 . . . . . . . . . . . . . . . . . . . . . . . . . 219
2.5.6
TCharacter.GetNumericValue . . . . . . . . . . . . . . . . . . . . . . . . 219
2.5.7
TCharacter.GetUnicodeCategory . . . . . . . . . . . . . . . . . . . . . . 220
2.5.8
TCharacter.IsControl . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
CONTENTS
TCharacter.IsDigit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
2.5.10
TCharacter.IsSurrogate . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
2.5.11
TCharacter.IsHighSurrogate . . . . . . . . . . . . . . . . . . . . . . . . . 221
2.5.12
TCharacter.IsLowSurrogate . . . . . . . . . . . . . . . . . . . . . . . . . 222
2.5.13
TCharacter.IsSurrogatePair . . . . . . . . . . . . . . . . . . . . . . . . . 222
2.5.14
TCharacter.IsLetter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
2.5.15
TCharacter.IsLetterOrDigit . . . . . . . . . . . . . . . . . . . . . . . . . 223
2.5.16
TCharacter.IsLower . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
2.5.17
TCharacter.IsNumber . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
2.5.18
TCharacter.IsPunctuation . . . . . . . . . . . . . . . . . . . . . . . . . . 224
2.5.19
TCharacter.IsSeparator . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
2.5.20
TCharacter.IsSymbol . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
2.5.21
TCharacter.IsUpper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
2.5.22
TCharacter.IsWhiteSpace . . . . . . . . . . . . . . . . . . . . . . . . . . 226
2.5.23
TCharacter.ToLower . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
2.5.24
TCharacter.ToUpper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
228
3.1
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
3.2
3.3
2.5.9
3.2.1
Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
3.2.2
Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
getascii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
3.3.2
getmap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
3.3.3
getunicode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
3.3.4
loadbinaryunicodemapping . . . . . . . . . . . . . . . . . . . . . . . . . 231
3.3.5
loadunicodemapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
3.3.6
mappingavailable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
3.3.7
registerbinarymapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
3.3.8
registermapping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
233
4.1
4.2
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
4.3
4.4
4.3.1
Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
4.3.2
Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
4.3.3
Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
ActivateClassGroup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
5
CONTENTS
4.4.2
BeginGlobalLoading . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
4.4.3
BinToHex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
4.4.4
Bounds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
4.4.5
CheckSynchronize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
4.4.6
ClassGroupOf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
4.4.7
CollectionsEqual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
4.4.8
EndGlobalLoading . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
4.4.9
ExtractStrings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
4.4.10
FindClass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252
4.4.11
FindGlobalComponent . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
4.4.12
FindIdentToInt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
4.4.13
FindIntToIdent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
4.4.14
FindNestedComponent . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
4.4.15
GetClass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
4.4.16
GetFixupInstanceNames . . . . . . . . . . . . . . . . . . . . . . . . . . 254
4.4.17
GetFixupReferenceNames . . . . . . . . . . . . . . . . . . . . . . . . . 254
4.4.18
GlobalFixupReferences . . . . . . . . . . . . . . . . . . . . . . . . . . . 254
4.4.19
GroupDescendentsWith . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
4.4.20
HexToBin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
4.4.21
IdentToInt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
4.4.22
InitComponentRes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255
4.4.23
InitInheritedComponent . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
4.4.24
IntToIdent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
4.4.25
InvalidPoint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
4.4.26
LineStart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
4.4.27
NotifyGlobalLoading . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
4.4.28
ObjectBinaryToText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
4.4.29
ObjectResourceToText . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
4.4.30
ObjectTextToBinary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
4.4.31
ObjectTextToResource . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
4.4.32
Point . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
4.4.33
PointsEqual . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
4.4.34
ReadComponentRes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258
4.4.35
ReadComponentResEx . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
4.4.36
ReadComponentResFile . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
4.4.37
Rect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259
4.4.38
RedirectFixupReferences . . . . . . . . . . . . . . . . . . . . . . . . . . 259
4.4.39
RegisterClass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
4.4.40
RegisterClassAlias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
4.4.41
RegisterClasses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
CONTENTS
4.5
4.4.42
RegisterComponents . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260
4.4.43
RegisterFindGlobalComponentProc . . . . . . . . . . . . . . . . . . . . 261
4.4.44
RegisterInitComponentHandler . . . . . . . . . . . . . . . . . . . . . . . 261
4.4.45
RegisterIntegerConsts . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
4.4.46
RegisterNoIcon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
4.4.47
RegisterNonActiveX . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
4.4.48
RemoveFixupReferences . . . . . . . . . . . . . . . . . . . . . . . . . . 262
4.4.49
RemoveFixups . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262
4.4.50
SmallPoint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
4.4.51
StartClassGroup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
4.4.52
UnRegisterClass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
4.4.53
UnRegisterClasses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263
4.4.54
UnregisterFindGlobalComponentProc . . . . . . . . . . . . . . . . . . . 264
4.4.55
UnRegisterModuleClasses . . . . . . . . . . . . . . . . . . . . . . . . . 264
4.4.56
WriteComponentResFile . . . . . . . . . . . . . . . . . . . . . . . . . . 264
EBitsError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
4.5.1
4.6
EClassNotFound . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
4.6.1
4.7
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
EFCreateError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
4.8.1
4.9
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
EComponentError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
4.7.1
4.8
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
EFilerError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
4.9.1
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 266
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
CONTENTS
4.17.1
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
4.26.2
4.26.3
IDesignerNotify.Modified . . . . . . . . . . . . . . . . . . . . . . . . . . 269
4.26.4
IDesignerNotify.Notification . . . . . . . . . . . . . . . . . . . . . . . . 269
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269
4.27.2
4.27.3
IFPObserved.FPOAttachObserver . . . . . . . . . . . . . . . . . . . . . 270
4.27.4
IFPObserved.FPODetachObserver . . . . . . . . . . . . . . . . . . . . . 270
4.27.5
IFPObserved.FPONotifyObservers . . . . . . . . . . . . . . . . . . . . . 270
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
4.28.2
4.28.3
IFPObserver.FPOObservedChanged . . . . . . . . . . . . . . . . . . . . 271
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
4.29.2
4.29.3
IInterfaceComponentReference.GetComponent . . . . . . . . . . . . . . 272
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
4.30.2
4.30.3
CONTENTS
4.30.4
IInterfaceList.Get . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
4.30.5
IInterfaceList.GetCapacity . . . . . . . . . . . . . . . . . . . . . . . . . 273
4.30.6
IInterfaceList.GetCount . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
4.30.7
IInterfaceList.Put . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273
4.30.8
IInterfaceList.SetCapacity . . . . . . . . . . . . . . . . . . . . . . . . . . 274
4.30.9
IInterfaceList.SetCount . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
4.30.10
IInterfaceList.Clear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
4.30.11
IInterfaceList.Delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
4.30.12
IInterfaceList.Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
4.30.13
IInterfaceList.First . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
4.30.14
IInterfaceList.IndexOf . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
4.30.15
IInterfaceList.Add . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
4.30.16
IInterfaceList.Insert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275
4.30.17
IInterfaceList.Last . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
4.30.18
IInterfaceList.Remove . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
4.30.19
IInterfaceList.Lock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
4.30.20
IInterfaceList.Unlock . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
4.30.21
IInterfaceList.Capacity . . . . . . . . . . . . . . . . . . . . . . . . . . . 276
4.30.22
IInterfaceList.Count . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
4.30.23
IInterfaceList.Items . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277
4.31.2
4.31.3
IStreamPersist.LoadFromStream . . . . . . . . . . . . . . . . . . . . . . 278
4.31.4
IStreamPersist.SaveToStream . . . . . . . . . . . . . . . . . . . . . . . . 278
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
4.32.2
4.32.3
IStringsAdapter.ReferenceStrings . . . . . . . . . . . . . . . . . . . . . . 278
4.32.4
IStringsAdapter.ReleaseStrings . . . . . . . . . . . . . . . . . . . . . . . 278
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
4.33.2
4.33.3
IVCLComObject.GetTypeInfoCount . . . . . . . . . . . . . . . . . . . . 279
4.33.4
IVCLComObject.GetTypeInfo . . . . . . . . . . . . . . . . . . . . . . . 279
4.33.5
IVCLComObject.GetIDsOfNames . . . . . . . . . . . . . . . . . . . . . 280
4.33.6
IVCLComObject.Invoke . . . . . . . . . . . . . . . . . . . . . . . . . . 280
4.33.7
IVCLComObject.SafeCallException . . . . . . . . . . . . . . . . . . . . 280
4.33.8
IVCLComObject.FreeOnRelease . . . . . . . . . . . . . . . . . . . . . . 280
CONTENTS
4.34.1
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281
4.34.2
4.34.3
TAbstractObjectReader.NextValue . . . . . . . . . . . . . . . . . . . . . 281
4.34.4
TAbstractObjectReader.ReadValue . . . . . . . . . . . . . . . . . . . . . 282
4.34.5
TAbstractObjectReader.BeginRootComponent . . . . . . . . . . . . . . . 282
4.34.6
TAbstractObjectReader.BeginComponent . . . . . . . . . . . . . . . . . 282
4.34.7
TAbstractObjectReader.BeginProperty . . . . . . . . . . . . . . . . . . . 283
4.34.8
TAbstractObjectReader.Read . . . . . . . . . . . . . . . . . . . . . . . . 283
4.34.9
TAbstractObjectReader.ReadBinary . . . . . . . . . . . . . . . . . . . . 283
4.34.10
TAbstractObjectReader.ReadFloat . . . . . . . . . . . . . . . . . . . . . 283
4.34.11
TAbstractObjectReader.ReadSingle . . . . . . . . . . . . . . . . . . . . . 284
4.34.12
TAbstractObjectReader.ReadDate . . . . . . . . . . . . . . . . . . . . . . 284
4.34.13
TAbstractObjectReader.ReadCurrency . . . . . . . . . . . . . . . . . . . 284
4.34.14
TAbstractObjectReader.ReadIdent . . . . . . . . . . . . . . . . . . . . . 285
4.34.15
TAbstractObjectReader.ReadInt8 . . . . . . . . . . . . . . . . . . . . . . 285
4.34.16
TAbstractObjectReader.ReadInt16 . . . . . . . . . . . . . . . . . . . . . 285
4.34.17
TAbstractObjectReader.ReadInt32 . . . . . . . . . . . . . . . . . . . . . 286
4.34.18
TAbstractObjectReader.ReadInt64 . . . . . . . . . . . . . . . . . . . . . 286
4.34.19
TAbstractObjectReader.ReadSet . . . . . . . . . . . . . . . . . . . . . . 286
4.34.20
TAbstractObjectReader.ReadSignature . . . . . . . . . . . . . . . . . . . 287
4.34.21
TAbstractObjectReader.ReadStr . . . . . . . . . . . . . . . . . . . . . . 287
4.34.22
TAbstractObjectReader.ReadString . . . . . . . . . . . . . . . . . . . . . 287
4.34.23
TAbstractObjectReader.ReadWideString . . . . . . . . . . . . . . . . . . 288
4.34.24
TAbstractObjectReader.ReadUnicodeString . . . . . . . . . . . . . . . . 288
4.34.25
TAbstractObjectReader.SkipComponent . . . . . . . . . . . . . . . . . . 288
4.34.26
TAbstractObjectReader.SkipValue . . . . . . . . . . . . . . . . . . . . . 288
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
4.35.2
4.35.3
TAbstractObjectWriter.BeginCollection . . . . . . . . . . . . . . . . . . 289
4.35.4
TAbstractObjectWriter.BeginComponent . . . . . . . . . . . . . . . . . . 289
4.35.5
TAbstractObjectWriter.WriteSignature . . . . . . . . . . . . . . . . . . . 290
4.35.6
TAbstractObjectWriter.BeginList . . . . . . . . . . . . . . . . . . . . . . 290
4.35.7
TAbstractObjectWriter.EndList . . . . . . . . . . . . . . . . . . . . . . . 290
4.35.8
TAbstractObjectWriter.BeginProperty . . . . . . . . . . . . . . . . . . . 290
4.35.9
TAbstractObjectWriter.EndProperty . . . . . . . . . . . . . . . . . . . . 290
4.35.10
TAbstractObjectWriter.Write . . . . . . . . . . . . . . . . . . . . . . . . 290
4.35.11
TAbstractObjectWriter.WriteBinary . . . . . . . . . . . . . . . . . . . . 291
4.35.12
TAbstractObjectWriter.WriteBoolean . . . . . . . . . . . . . . . . . . . . 291
4.35.13
TAbstractObjectWriter.WriteFloat . . . . . . . . . . . . . . . . . . . . . 291
10
CONTENTS
4.35.14
TAbstractObjectWriter.WriteSingle . . . . . . . . . . . . . . . . . . . . . 291
4.35.15
TAbstractObjectWriter.WriteDate . . . . . . . . . . . . . . . . . . . . . . 291
4.35.16
TAbstractObjectWriter.WriteCurrency . . . . . . . . . . . . . . . . . . . 292
4.35.17
TAbstractObjectWriter.WriteIdent . . . . . . . . . . . . . . . . . . . . . 292
4.35.18
TAbstractObjectWriter.WriteInteger . . . . . . . . . . . . . . . . . . . . 292
4.35.19
TAbstractObjectWriter.WriteUInt64 . . . . . . . . . . . . . . . . . . . . 292
4.35.20
TAbstractObjectWriter.WriteVariant . . . . . . . . . . . . . . . . . . . . 292
4.35.21
TAbstractObjectWriter.WriteMethodName . . . . . . . . . . . . . . . . . 293
4.35.22
TAbstractObjectWriter.WriteSet . . . . . . . . . . . . . . . . . . . . . . 293
4.35.23
TAbstractObjectWriter.WriteString . . . . . . . . . . . . . . . . . . . . . 293
4.35.24
TAbstractObjectWriter.WriteWideString . . . . . . . . . . . . . . . . . . 293
4.35.25
TAbstractObjectWriter.WriteUnicodeString . . . . . . . . . . . . . . . . 293
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
4.36.2
4.36.3
4.36.4
TBasicAction.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
4.36.5
TBasicAction.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
4.36.6
TBasicAction.HandlesTarget . . . . . . . . . . . . . . . . . . . . . . . . 295
4.36.7
TBasicAction.UpdateTarget . . . . . . . . . . . . . . . . . . . . . . . . . 295
4.36.8
TBasicAction.ExecuteTarget . . . . . . . . . . . . . . . . . . . . . . . . 295
4.36.9
TBasicAction.Execute . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
4.36.10
TBasicAction.RegisterChanges . . . . . . . . . . . . . . . . . . . . . . . 296
4.36.11
TBasicAction.UnRegisterChanges . . . . . . . . . . . . . . . . . . . . . 296
4.36.12
TBasicAction.Update . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
4.36.13
TBasicAction.ActionComponent . . . . . . . . . . . . . . . . . . . . . . 297
4.36.14
TBasicAction.OnExecute . . . . . . . . . . . . . . . . . . . . . . . . . . 297
4.36.15
TBasicAction.OnUpdate . . . . . . . . . . . . . . . . . . . . . . . . . . 297
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298
4.37.2
4.37.3
4.37.4
TBasicActionLink.Create . . . . . . . . . . . . . . . . . . . . . . . . . . 298
4.37.5
TBasicActionLink.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . 298
4.37.6
TBasicActionLink.Execute . . . . . . . . . . . . . . . . . . . . . . . . . 299
4.37.7
TBasicActionLink.Update . . . . . . . . . . . . . . . . . . . . . . . . . 299
4.37.8
TBasicActionLink.Action . . . . . . . . . . . . . . . . . . . . . . . . . . 299
4.37.9
TBasicActionLink.OnChange . . . . . . . . . . . . . . . . . . . . . . . . 300
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300
11
CONTENTS
4.38.2
4.38.3
TBinaryObjectReader.Create . . . . . . . . . . . . . . . . . . . . . . . . 301
4.38.4
TBinaryObjectReader.Destroy . . . . . . . . . . . . . . . . . . . . . . . 301
4.38.5
TBinaryObjectReader.NextValue . . . . . . . . . . . . . . . . . . . . . . 302
4.38.6
TBinaryObjectReader.ReadValue . . . . . . . . . . . . . . . . . . . . . . 302
4.38.7
TBinaryObjectReader.BeginRootComponent . . . . . . . . . . . . . . . . 302
4.38.8
TBinaryObjectReader.BeginComponent . . . . . . . . . . . . . . . . . . 302
4.38.9
TBinaryObjectReader.BeginProperty . . . . . . . . . . . . . . . . . . . . 302
4.38.10
TBinaryObjectReader.Read . . . . . . . . . . . . . . . . . . . . . . . . . 303
4.38.11
TBinaryObjectReader.ReadBinary . . . . . . . . . . . . . . . . . . . . . 303
4.38.12
TBinaryObjectReader.ReadFloat . . . . . . . . . . . . . . . . . . . . . . 303
4.38.13
TBinaryObjectReader.ReadSingle . . . . . . . . . . . . . . . . . . . . . 303
4.38.14
TBinaryObjectReader.ReadDate . . . . . . . . . . . . . . . . . . . . . . 303
4.38.15
TBinaryObjectReader.ReadCurrency . . . . . . . . . . . . . . . . . . . . 304
4.38.16
TBinaryObjectReader.ReadIdent . . . . . . . . . . . . . . . . . . . . . . 304
4.38.17
TBinaryObjectReader.ReadInt8 . . . . . . . . . . . . . . . . . . . . . . . 304
4.38.18
TBinaryObjectReader.ReadInt16 . . . . . . . . . . . . . . . . . . . . . . 304
4.38.19
TBinaryObjectReader.ReadInt32 . . . . . . . . . . . . . . . . . . . . . . 305
4.38.20
TBinaryObjectReader.ReadInt64 . . . . . . . . . . . . . . . . . . . . . . 305
4.38.21
TBinaryObjectReader.ReadSet . . . . . . . . . . . . . . . . . . . . . . . 305
4.38.22
TBinaryObjectReader.ReadSignature . . . . . . . . . . . . . . . . . . . . 305
4.38.23
TBinaryObjectReader.ReadStr . . . . . . . . . . . . . . . . . . . . . . . 305
4.38.24
TBinaryObjectReader.ReadString . . . . . . . . . . . . . . . . . . . . . . 306
4.38.25
TBinaryObjectReader.ReadWideString . . . . . . . . . . . . . . . . . . . 306
4.38.26
TBinaryObjectReader.ReadUnicodeString . . . . . . . . . . . . . . . . . 306
4.38.27
TBinaryObjectReader.SkipComponent . . . . . . . . . . . . . . . . . . . 306
4.38.28
TBinaryObjectReader.SkipValue . . . . . . . . . . . . . . . . . . . . . . 307
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 307
4.39.2
4.39.3
TBinaryObjectWriter.Create . . . . . . . . . . . . . . . . . . . . . . . . 307
4.39.4
TBinaryObjectWriter.Destroy . . . . . . . . . . . . . . . . . . . . . . . . 308
4.39.5
TBinaryObjectWriter.WriteSignature . . . . . . . . . . . . . . . . . . . . 308
4.39.6
TBinaryObjectWriter.BeginCollection . . . . . . . . . . . . . . . . . . . 308
4.39.7
TBinaryObjectWriter.BeginComponent . . . . . . . . . . . . . . . . . . 308
4.39.8
TBinaryObjectWriter.BeginList . . . . . . . . . . . . . . . . . . . . . . . 308
4.39.9
TBinaryObjectWriter.EndList . . . . . . . . . . . . . . . . . . . . . . . . 308
4.39.10
TBinaryObjectWriter.BeginProperty . . . . . . . . . . . . . . . . . . . . 309
4.39.11
TBinaryObjectWriter.EndProperty . . . . . . . . . . . . . . . . . . . . . 309
4.39.12
TBinaryObjectWriter.Write . . . . . . . . . . . . . . . . . . . . . . . . . 309
12
CONTENTS
4.39.13
TBinaryObjectWriter.WriteBinary . . . . . . . . . . . . . . . . . . . . . 309
4.39.14
TBinaryObjectWriter.WriteBoolean . . . . . . . . . . . . . . . . . . . . 309
4.39.15
TBinaryObjectWriter.WriteFloat . . . . . . . . . . . . . . . . . . . . . . 309
4.39.16
TBinaryObjectWriter.WriteSingle . . . . . . . . . . . . . . . . . . . . . 310
4.39.17
TBinaryObjectWriter.WriteDate . . . . . . . . . . . . . . . . . . . . . . 310
4.39.18
TBinaryObjectWriter.WriteCurrency . . . . . . . . . . . . . . . . . . . . 310
4.39.19
TBinaryObjectWriter.WriteIdent . . . . . . . . . . . . . . . . . . . . . . 310
4.39.20
TBinaryObjectWriter.WriteInteger . . . . . . . . . . . . . . . . . . . . . 310
4.39.21
TBinaryObjectWriter.WriteUInt64 . . . . . . . . . . . . . . . . . . . . . 310
4.39.22
TBinaryObjectWriter.WriteMethodName . . . . . . . . . . . . . . . . . 311
4.39.23
TBinaryObjectWriter.WriteSet . . . . . . . . . . . . . . . . . . . . . . . 311
4.39.24
TBinaryObjectWriter.WriteStr . . . . . . . . . . . . . . . . . . . . . . . 311
4.39.25
TBinaryObjectWriter.WriteString . . . . . . . . . . . . . . . . . . . . . . 311
4.39.26
TBinaryObjectWriter.WriteWideString . . . . . . . . . . . . . . . . . . . 311
4.39.27
TBinaryObjectWriter.WriteUnicodeString . . . . . . . . . . . . . . . . . 311
4.39.28
TBinaryObjectWriter.WriteVariant . . . . . . . . . . . . . . . . . . . . . 312
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
4.40.2
4.40.3
4.40.4
TBits.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
4.40.5
TBits.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
4.40.6
TBits.GetFSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
4.40.7
TBits.SetOn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
4.40.8
TBits.Clear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314
4.40.9
TBits.Clearall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314
4.40.10
TBits.AndBits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314
4.40.11
TBits.OrBits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314
4.40.12
TBits.XorBits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
4.40.13
TBits.NotBits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
4.40.14
TBits.Get . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
4.40.15
TBits.Grow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
4.40.16
TBits.Equals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
4.40.17
TBits.SetIndex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
4.40.18
TBits.FindFirstBit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
4.40.19
TBits.FindNextBit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
4.40.20
TBits.FindPrevBit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
4.40.21
TBits.OpenBit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
4.40.22
TBits.Bits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
4.40.23
TBits.Size . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
13
CONTENTS
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
4.41.2
4.41.3
4.41.4
TBytesStream.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
4.41.5
TBytesStream.Bytes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
4.42.2
4.42.3
4.42.4
TCollection.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320
4.42.5
TCollection.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320
4.42.6
TCollection.Owner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
4.42.7
TCollection.Add . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
4.42.8
TCollection.Assign . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
4.42.9
TCollection.BeginUpdate . . . . . . . . . . . . . . . . . . . . . . . . . . 321
4.42.10
TCollection.Clear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
4.42.11
TCollection.EndUpdate . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
4.42.12
TCollection.Delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
4.42.13
TCollection.GetEnumerator . . . . . . . . . . . . . . . . . . . . . . . . . 323
4.42.14
TCollection.GetNamePath . . . . . . . . . . . . . . . . . . . . . . . . . 323
4.42.15
TCollection.Insert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
4.42.16
TCollection.FindItemID . . . . . . . . . . . . . . . . . . . . . . . . . . . 323
4.42.17
TCollection.Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
4.42.18
TCollection.Sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
4.42.19
TCollection.Count . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
4.42.20
TCollection.ItemClass . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
4.42.21
TCollection.Items . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
4.43.2
4.43.3
4.43.4
TCollectionEnumerator.Create . . . . . . . . . . . . . . . . . . . . . . . 326
4.43.5
TCollectionEnumerator.GetCurrent . . . . . . . . . . . . . . . . . . . . . 326
4.43.6
TCollectionEnumerator.MoveNext . . . . . . . . . . . . . . . . . . . . . 326
4.43.7
TCollectionEnumerator.Current . . . . . . . . . . . . . . . . . . . . . . . 326
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
4.44.2
4.44.3
14
CONTENTS
4.44.4
TCollectionItem.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
4.44.5
TCollectionItem.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . . 327
4.44.6
TCollectionItem.GetNamePath . . . . . . . . . . . . . . . . . . . . . . . 328
4.44.7
TCollectionItem.Collection . . . . . . . . . . . . . . . . . . . . . . . . . 328
4.44.8
TCollectionItem.ID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
4.44.9
TCollectionItem.Index . . . . . . . . . . . . . . . . . . . . . . . . . . . 329
4.44.10
TCollectionItem.DisplayName . . . . . . . . . . . . . . . . . . . . . . . 329
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329
4.45.2
4.45.3
4.45.4
4.45.5
TComponent.Notification . . . . . . . . . . . . . . . . . . . . . . . . . . 331
4.45.6
TComponent.WriteState . . . . . . . . . . . . . . . . . . . . . . . . . . 331
4.45.7
TComponent.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
4.45.8
TComponent.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . . . . 332
4.45.9
TComponent.BeforeDestruction . . . . . . . . . . . . . . . . . . . . . . 332
4.45.10
TComponent.DestroyComponents . . . . . . . . . . . . . . . . . . . . . 332
4.45.11
TComponent.Destroying . . . . . . . . . . . . . . . . . . . . . . . . . . 332
4.45.12
TComponent.ExecuteAction . . . . . . . . . . . . . . . . . . . . . . . . 333
4.45.13
TComponent.FindComponent . . . . . . . . . . . . . . . . . . . . . . . . 333
4.45.14
TComponent.FreeNotification . . . . . . . . . . . . . . . . . . . . . . . 333
4.45.15
TComponent.RemoveFreeNotification . . . . . . . . . . . . . . . . . . . 333
4.45.16
TComponent.FreeOnRelease . . . . . . . . . . . . . . . . . . . . . . . . 334
4.45.17
TComponent.GetEnumerator . . . . . . . . . . . . . . . . . . . . . . . . 334
4.45.18
TComponent.GetNamePath . . . . . . . . . . . . . . . . . . . . . . . . . 334
4.45.19
TComponent.GetParentComponent . . . . . . . . . . . . . . . . . . . . . 334
4.45.20
TComponent.HasParent . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
4.45.21
TComponent.InsertComponent . . . . . . . . . . . . . . . . . . . . . . . 335
4.45.22
TComponent.RemoveComponent . . . . . . . . . . . . . . . . . . . . . . 335
4.45.23
TComponent.SafeCallException . . . . . . . . . . . . . . . . . . . . . . 335
4.45.24
TComponent.SetSubComponent . . . . . . . . . . . . . . . . . . . . . . 336
4.45.25
TComponent.UpdateAction . . . . . . . . . . . . . . . . . . . . . . . . . 336
4.45.26
TComponent.IsImplementorOf . . . . . . . . . . . . . . . . . . . . . . . 336
4.45.27
TComponent.ReferenceInterface . . . . . . . . . . . . . . . . . . . . . . 336
4.45.28
TComponent.ComObject . . . . . . . . . . . . . . . . . . . . . . . . . . 337
4.45.29
TComponent.Components . . . . . . . . . . . . . . . . . . . . . . . . . 337
4.45.30
TComponent.ComponentCount . . . . . . . . . . . . . . . . . . . . . . . 337
4.45.31
TComponent.ComponentIndex . . . . . . . . . . . . . . . . . . . . . . . 337
4.45.32
TComponent.ComponentState . . . . . . . . . . . . . . . . . . . . . . . 338
15
CONTENTS
4.45.33
TComponent.ComponentStyle . . . . . . . . . . . . . . . . . . . . . . . 338
4.45.34
TComponent.DesignInfo . . . . . . . . . . . . . . . . . . . . . . . . . . 338
4.45.35
TComponent.Owner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
4.45.36
TComponent.VCLComObject . . . . . . . . . . . . . . . . . . . . . . . 339
4.45.37
TComponent.Name . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
4.45.38
TComponent.Tag . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340
4.46.2
4.46.3
4.46.4
TComponentEnumerator.Create . . . . . . . . . . . . . . . . . . . . . . 340
4.46.5
TComponentEnumerator.GetCurrent . . . . . . . . . . . . . . . . . . . . 340
4.46.6
TComponentEnumerator.MoveNext . . . . . . . . . . . . . . . . . . . . 341
4.46.7
TComponentEnumerator.Current . . . . . . . . . . . . . . . . . . . . . . 341
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341
4.47.2
4.47.3
4.47.4
TCustomMemoryStream.Read . . . . . . . . . . . . . . . . . . . . . . . 342
4.47.5
TCustomMemoryStream.Seek . . . . . . . . . . . . . . . . . . . . . . . 342
4.47.6
TCustomMemoryStream.SaveToStream . . . . . . . . . . . . . . . . . . 342
4.47.7
TCustomMemoryStream.SaveToFile . . . . . . . . . . . . . . . . . . . . 343
4.47.8
TCustomMemoryStream.Memory . . . . . . . . . . . . . . . . . . . . . 343
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343
4.48.2
4.48.3
4.48.4
TDataModule.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
4.48.5
TDataModule.CreateNew . . . . . . . . . . . . . . . . . . . . . . . . . . 344
4.48.6
TDataModule.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344
4.48.7
TDataModule.AfterConstruction . . . . . . . . . . . . . . . . . . . . . . 345
4.48.8
TDataModule.BeforeDestruction . . . . . . . . . . . . . . . . . . . . . . 345
4.48.9
TDataModule.DesignOffset . . . . . . . . . . . . . . . . . . . . . . . . . 345
4.48.10
TDataModule.DesignSize . . . . . . . . . . . . . . . . . . . . . . . . . . 346
4.48.11
TDataModule.OnCreate . . . . . . . . . . . . . . . . . . . . . . . . . . . 346
4.48.12
TDataModule.OnDestroy . . . . . . . . . . . . . . . . . . . . . . . . . . 346
4.48.13
TDataModule.OldCreateOrder . . . . . . . . . . . . . . . . . . . . . . . 346
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
4.49.2
16
CONTENTS
4.49.3
4.49.4
TFiler.DefineProperty . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347
4.49.5
TFiler.DefineBinaryProperty . . . . . . . . . . . . . . . . . . . . . . . . 347
4.49.6
TFiler.Root . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
4.49.7
TFiler.LookupRoot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
4.49.8
TFiler.Ancestor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
4.49.9
TFiler.IgnoreChildren . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
4.50.2
4.50.3
4.50.4
TFileStream.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
4.50.5
TFileStream.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . . . . 349
4.50.6
TFileStream.FileName . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350
4.51.2
4.51.3
4.51.4
TFPList.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351
4.51.5
TFPList.AddList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351
4.51.6
TFPList.Add . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352
4.51.7
TFPList.Clear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352
4.51.8
TFPList.Delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352
4.51.9
TFPList.Error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352
4.51.10
TFPList.Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
4.51.11
TFPList.Expand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
4.51.12
TFPList.Extract . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
4.51.13
TFPList.First . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353
4.51.14
TFPList.GetEnumerator . . . . . . . . . . . . . . . . . . . . . . . . . . . 354
4.51.15
TFPList.IndexOf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354
4.51.16
TFPList.IndexOfItem . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354
4.51.17
TFPList.Insert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354
4.51.18
TFPList.Last . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355
4.51.19
TFPList.Move . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355
4.51.20
TFPList.Assign . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355
4.51.21
TFPList.Remove . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355
4.51.22
TFPList.Pack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356
4.51.23
TFPList.Sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356
4.51.24
TFPList.ForEachCall . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356
4.51.25
TFPList.Capacity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357
17
CONTENTS
4.51.26
TFPList.Count . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357
4.51.27
TFPList.Items . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357
4.51.28
TFPList.List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358
4.52.2
4.52.3
4.52.4
TFPListEnumerator.Create . . . . . . . . . . . . . . . . . . . . . . . . . 358
4.52.5
TFPListEnumerator.GetCurrent . . . . . . . . . . . . . . . . . . . . . . . 358
4.52.6
TFPListEnumerator.MoveNext . . . . . . . . . . . . . . . . . . . . . . . 358
4.52.7
TFPListEnumerator.Current . . . . . . . . . . . . . . . . . . . . . . . . . 359
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 359
4.53.2
4.53.3
4.53.4
THandleStream.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . 360
4.53.5
THandleStream.Read . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360
4.53.6
THandleStream.Write . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360
4.53.7
THandleStream.Seek . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360
4.53.8
THandleStream.Handle . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 361
4.54.2
4.54.3
4.54.4
TInterfacedPersistent.QueryInterface . . . . . . . . . . . . . . . . . . . . 361
4.54.5
TInterfacedPersistent.AfterConstruction . . . . . . . . . . . . . . . . . . 362
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362
4.55.2
4.55.3
4.55.4
4.55.5
TInterfaceList.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363
4.55.6
TInterfaceList.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . . . 363
4.55.7
TInterfaceList.Clear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363
4.55.8
TInterfaceList.Delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363
4.55.9
TInterfaceList.Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . 364
4.55.10
TInterfaceList.First . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 364
4.55.11
TInterfaceList.GetEnumerator . . . . . . . . . . . . . . . . . . . . . . . 364
4.55.12
TInterfaceList.IndexOf . . . . . . . . . . . . . . . . . . . . . . . . . . . 364
4.55.13
TInterfaceList.Add . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365
18
CONTENTS
4.55.14
TInterfaceList.Insert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365
4.55.15
TInterfaceList.Last . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365
4.55.16
TInterfaceList.Remove . . . . . . . . . . . . . . . . . . . . . . . . . . . 365
4.55.17
TInterfaceList.Lock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366
4.55.18
TInterfaceList.Unlock . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366
4.55.19
TInterfaceList.Expand . . . . . . . . . . . . . . . . . . . . . . . . . . . . 366
4.55.20
TInterfaceList.Capacity . . . . . . . . . . . . . . . . . . . . . . . . . . . 366
4.55.21
TInterfaceList.Count . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
4.55.22
TInterfaceList.Items . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 367
4.56.2
4.56.3
4.56.4
TInterfaceListEnumerator.Create . . . . . . . . . . . . . . . . . . . . . . 368
4.56.5
TInterfaceListEnumerator.GetCurrent . . . . . . . . . . . . . . . . . . . 368
4.56.6
TInterfaceListEnumerator.MoveNext . . . . . . . . . . . . . . . . . . . . 368
4.56.7
TInterfaceListEnumerator.Current . . . . . . . . . . . . . . . . . . . . . 368
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369
4.57.2
4.57.3
4.57.4
4.57.5
TList.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370
4.57.6
TList.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370
4.57.7
TList.FPOAttachObserver . . . . . . . . . . . . . . . . . . . . . . . . . . 370
4.57.8
TList.FPODetachObserver . . . . . . . . . . . . . . . . . . . . . . . . . 370
4.57.9
TList.FPONotifyObservers . . . . . . . . . . . . . . . . . . . . . . . . . 371
4.57.10
TList.AddList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371
4.57.11
TList.Add . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371
4.57.12
TList.Clear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372
4.57.13
TList.Delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372
4.57.14
TList.Error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372
4.57.15
TList.Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372
4.57.16
TList.Expand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372
4.57.17
TList.Extract . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373
4.57.18
TList.First . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373
4.57.19
TList.GetEnumerator . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373
4.57.20
TList.IndexOf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374
4.57.21
TList.Insert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374
4.57.22
TList.Last . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374
19
CONTENTS
4.57.23
TList.Move . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 374
4.57.24
TList.Assign . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375
4.57.25
TList.Remove . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375
4.57.26
TList.Pack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375
4.57.27
TList.Sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375
4.57.28
TList.Capacity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376
4.57.29
TList.Count . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376
4.57.30
TList.Items . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 376
4.57.31
TList.List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377
4.58.2
4.58.3
4.58.4
TListEnumerator.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . 377
4.58.5
TListEnumerator.GetCurrent . . . . . . . . . . . . . . . . . . . . . . . . 377
4.58.6
TListEnumerator.MoveNext . . . . . . . . . . . . . . . . . . . . . . . . 378
4.58.7
TListEnumerator.Current . . . . . . . . . . . . . . . . . . . . . . . . . . 378
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378
4.59.2
4.59.3
TMemoryStream.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . . 379
4.59.4
TMemoryStream.Clear . . . . . . . . . . . . . . . . . . . . . . . . . . . 379
4.59.5
TMemoryStream.LoadFromStream . . . . . . . . . . . . . . . . . . . . . 379
4.59.6
TMemoryStream.LoadFromFile . . . . . . . . . . . . . . . . . . . . . . 380
4.59.7
TMemoryStream.SetSize . . . . . . . . . . . . . . . . . . . . . . . . . . 380
4.59.8
TMemoryStream.Write . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380
4.60.2
4.60.3
TOwnedCollection.Create . . . . . . . . . . . . . . . . . . . . . . . . . . 381
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
4.61.2
4.61.3
4.61.4
TOwnerStream.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381
4.61.5
TOwnerStream.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . . . 382
4.61.6
TOwnerStream.Source . . . . . . . . . . . . . . . . . . . . . . . . . . . 382
4.61.7
TOwnerStream.SourceOwner . . . . . . . . . . . . . . . . . . . . . . . . 382
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382
20
CONTENTS
4.62.2
4.62.3
4.62.4
TParser.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383
4.62.5
TParser.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383
4.62.6
TParser.CheckToken . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384
4.62.7
TParser.CheckTokenSymbol . . . . . . . . . . . . . . . . . . . . . . . . 384
4.62.8
TParser.Error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384
4.62.9
TParser.ErrorFmt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384
4.62.10
TParser.ErrorStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384
4.62.11
TParser.HexToBinary . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385
4.62.12
TParser.NextToken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385
4.62.13
TParser.SourcePos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385
4.62.14
TParser.TokenComponentIdent . . . . . . . . . . . . . . . . . . . . . . . 386
4.62.15
TParser.TokenFloat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386
4.62.16
TParser.TokenInt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386
4.62.17
TParser.TokenString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387
4.62.18
TParser.TokenWideString . . . . . . . . . . . . . . . . . . . . . . . . . . 387
4.62.19
TParser.TokenSymbolIs . . . . . . . . . . . . . . . . . . . . . . . . . . . 387
4.62.20
TParser.FloatType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388
4.62.21
TParser.SourceLine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388
4.62.22
TParser.Token . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 388
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389
4.63.2
4.63.3
4.63.4
TPersistent.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389
4.63.5
TPersistent.Assign . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390
4.63.6
TPersistent.FPOAttachObserver . . . . . . . . . . . . . . . . . . . . . . 390
4.63.7
TPersistent.FPODetachObserver . . . . . . . . . . . . . . . . . . . . . . 391
4.63.8
TPersistent.FPONotifyObservers . . . . . . . . . . . . . . . . . . . . . . 391
4.63.9
TPersistent.GetNamePath . . . . . . . . . . . . . . . . . . . . . . . . . . 391
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391
4.64.2
4.64.3
TProxyStream.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392
4.64.4
TProxyStream.Read . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392
4.64.5
TProxyStream.Write . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392
4.64.6
TProxyStream.Seek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392
4.64.7
TProxyStream.Check . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392
21
CONTENTS
4.65.1
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 393
4.65.2
4.65.3
4.65.4
TReader.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395
4.65.5
TReader.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395
4.65.6
TReader.BeginReferences . . . . . . . . . . . . . . . . . . . . . . . . . . 395
4.65.7
TReader.CheckValue . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396
4.65.8
TReader.DefineProperty . . . . . . . . . . . . . . . . . . . . . . . . . . . 396
4.65.9
TReader.DefineBinaryProperty . . . . . . . . . . . . . . . . . . . . . . . 396
4.65.10
TReader.EndOfList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 396
4.65.11
TReader.EndReferences . . . . . . . . . . . . . . . . . . . . . . . . . . . 396
4.65.12
TReader.FixupReferences . . . . . . . . . . . . . . . . . . . . . . . . . . 397
4.65.13
TReader.NextValue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397
4.65.14
TReader.Read . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397
4.65.15
TReader.ReadBoolean . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397
4.65.16
TReader.ReadChar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 397
4.65.17
TReader.ReadWideChar . . . . . . . . . . . . . . . . . . . . . . . . . . . 398
4.65.18
TReader.ReadUnicodeChar . . . . . . . . . . . . . . . . . . . . . . . . . 398
4.65.19
TReader.ReadCollection . . . . . . . . . . . . . . . . . . . . . . . . . . 398
4.65.20
TReader.ReadComponent . . . . . . . . . . . . . . . . . . . . . . . . . . 398
4.65.21
TReader.ReadComponents . . . . . . . . . . . . . . . . . . . . . . . . . 398
4.65.22
TReader.ReadFloat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399
4.65.23
TReader.ReadSingle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399
4.65.24
TReader.ReadDate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399
4.65.25
TReader.ReadCurrency . . . . . . . . . . . . . . . . . . . . . . . . . . . 399
4.65.26
TReader.ReadIdent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399
4.65.27
TReader.ReadInteger . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400
4.65.28
TReader.ReadInt64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400
4.65.29
TReader.ReadSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400
4.65.30
TReader.ReadListBegin . . . . . . . . . . . . . . . . . . . . . . . . . . . 400
4.65.31
TReader.ReadListEnd . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400
4.65.32
TReader.ReadRootComponent . . . . . . . . . . . . . . . . . . . . . . . 401
4.65.33
TReader.ReadVariant . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401
4.65.34
TReader.ReadSignature . . . . . . . . . . . . . . . . . . . . . . . . . . . 401
4.65.35
TReader.ReadString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 401
4.65.36
TReader.ReadWideString . . . . . . . . . . . . . . . . . . . . . . . . . . 401
4.65.37
TReader.ReadUnicodeString . . . . . . . . . . . . . . . . . . . . . . . . 402
4.65.38
TReader.ReadValue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402
4.65.39
TReader.CopyValue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402
4.65.40
TReader.Driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402
22
CONTENTS
4.65.41
TReader.Owner . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 402
4.65.42
TReader.Parent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403
4.65.43
TReader.OnError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403
4.65.44
TReader.OnPropertyNotFound . . . . . . . . . . . . . . . . . . . . . . . 403
4.65.45
TReader.OnFindMethod . . . . . . . . . . . . . . . . . . . . . . . . . . 403
4.65.46
TReader.OnSetMethodProperty . . . . . . . . . . . . . . . . . . . . . . . 404
4.65.47
TReader.OnSetName . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404
4.65.48
TReader.OnReferenceName . . . . . . . . . . . . . . . . . . . . . . . . 404
4.65.49
TReader.OnAncestorNotFound . . . . . . . . . . . . . . . . . . . . . . . 404
4.65.50
TReader.OnCreateComponent . . . . . . . . . . . . . . . . . . . . . . . 404
4.65.51
TReader.OnFindComponentClass . . . . . . . . . . . . . . . . . . . . . . 405
4.65.52
TReader.OnReadStringProperty . . . . . . . . . . . . . . . . . . . . . . 405
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405
4.66.2
4.66.3
4.66.4
TRecall.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406
4.66.5
TRecall.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406
4.66.6
TRecall.Store . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406
4.66.7
TRecall.Forget . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407
4.66.8
TRecall.Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407
4.67.2
4.67.3
TResourceStream.Create . . . . . . . . . . . . . . . . . . . . . . . . . . 407
4.67.4
TResourceStream.CreateFromID . . . . . . . . . . . . . . . . . . . . . . 408
4.67.5
TResourceStream.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . 408
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408
4.68.2
4.68.3
4.68.4
TStream.Read . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409
4.68.5
TStream.Write . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410
4.68.6
TStream.Seek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410
4.68.7
TStream.ReadBuffer . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411
4.68.8
TStream.WriteBuffer . . . . . . . . . . . . . . . . . . . . . . . . . . . . 411
4.68.9
TStream.CopyFrom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 412
4.68.10
TStream.ReadComponent . . . . . . . . . . . . . . . . . . . . . . . . . . 412
4.68.11
TStream.ReadComponentRes . . . . . . . . . . . . . . . . . . . . . . . . 412
4.68.12
TStream.WriteComponent . . . . . . . . . . . . . . . . . . . . . . . . . 413
23
CONTENTS
4.68.13
TStream.WriteComponentRes . . . . . . . . . . . . . . . . . . . . . . . 413
4.68.14
TStream.WriteDescendent . . . . . . . . . . . . . . . . . . . . . . . . . 413
4.68.15
TStream.WriteDescendentRes . . . . . . . . . . . . . . . . . . . . . . . 413
4.68.16
TStream.WriteResourceHeader . . . . . . . . . . . . . . . . . . . . . . . 414
4.68.17
TStream.FixupResourceHeader . . . . . . . . . . . . . . . . . . . . . . . 414
4.68.18
TStream.ReadResHeader . . . . . . . . . . . . . . . . . . . . . . . . . . 414
4.68.19
TStream.ReadByte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414
4.68.20
TStream.ReadWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415
4.68.21
TStream.ReadDWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415
4.68.22
TStream.ReadQWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415
4.68.23
TStream.ReadAnsiString . . . . . . . . . . . . . . . . . . . . . . . . . . 416
4.68.24
TStream.WriteByte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416
4.68.25
TStream.WriteWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416
4.68.26
TStream.WriteDWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . 416
4.68.27
TStream.WriteQWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417
4.68.28
TStream.WriteAnsiString . . . . . . . . . . . . . . . . . . . . . . . . . . 417
4.68.29
TStream.Position . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 417
4.68.30
TStream.Size . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418
4.69.2
4.69.3
4.69.4
4.69.5
TStreamAdapter.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . 419
4.69.6
TStreamAdapter.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . . 419
4.69.7
TStreamAdapter.Read . . . . . . . . . . . . . . . . . . . . . . . . . . . . 419
4.69.8
TStreamAdapter.Write . . . . . . . . . . . . . . . . . . . . . . . . . . . 419
4.69.9
TStreamAdapter.Seek . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420
4.69.10
TStreamAdapter.SetSize . . . . . . . . . . . . . . . . . . . . . . . . . . 420
4.69.11
TStreamAdapter.CopyTo . . . . . . . . . . . . . . . . . . . . . . . . . . 420
4.69.12
TStreamAdapter.Commit . . . . . . . . . . . . . . . . . . . . . . . . . . 421
4.69.13
TStreamAdapter.Revert . . . . . . . . . . . . . . . . . . . . . . . . . . . 421
4.69.14
TStreamAdapter.LockRegion . . . . . . . . . . . . . . . . . . . . . . . . 421
4.69.15
TStreamAdapter.UnlockRegion . . . . . . . . . . . . . . . . . . . . . . . 421
4.69.16
TStreamAdapter.Stat . . . . . . . . . . . . . . . . . . . . . . . . . . . . 422
4.69.17
TStreamAdapter.Clone . . . . . . . . . . . . . . . . . . . . . . . . . . . 422
4.69.18
TStreamAdapter.Stream . . . . . . . . . . . . . . . . . . . . . . . . . . . 422
4.69.19
TStreamAdapter.StreamOwnership . . . . . . . . . . . . . . . . . . . . . 422
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423
24
CONTENTS
4.70.2
4.70.3
4.70.4
TStringList.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 423
4.70.5
TStringList.Add . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424
4.70.6
TStringList.Clear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424
4.70.7
TStringList.Delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424
4.70.8
TStringList.Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424
4.70.9
TStringList.Find . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425
4.70.10
TStringList.IndexOf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425
4.70.11
TStringList.Insert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425
4.70.12
TStringList.Sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425
4.70.13
TStringList.CustomSort . . . . . . . . . . . . . . . . . . . . . . . . . . . 426
4.70.14
TStringList.Duplicates . . . . . . . . . . . . . . . . . . . . . . . . . . . 426
4.70.15
TStringList.Sorted . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 426
4.70.16
TStringList.CaseSensitive . . . . . . . . . . . . . . . . . . . . . . . . . . 427
4.70.17
TStringList.OnChange . . . . . . . . . . . . . . . . . . . . . . . . . . . 427
4.70.18
TStringList.OnChanging . . . . . . . . . . . . . . . . . . . . . . . . . . 427
4.70.19
TStringList.OwnsObjects . . . . . . . . . . . . . . . . . . . . . . . . . . 427
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 428
4.71.2
4.71.3
4.71.4
TStrings.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429
4.71.5
TStrings.Add . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429
4.71.6
TStrings.AddObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 429
4.71.7
TStrings.Append . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 430
4.71.8
TStrings.AddStrings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 430
4.71.9
TStrings.AddText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 430
4.71.10
TStrings.Assign . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431
4.71.11
TStrings.BeginUpdate . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431
4.71.12
TStrings.Clear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431
4.71.13
TStrings.Delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432
4.71.14
TStrings.EndUpdate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432
4.71.15
TStrings.Equals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432
4.71.16
TStrings.Exchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433
4.71.17
TStrings.GetEnumerator . . . . . . . . . . . . . . . . . . . . . . . . . . 433
4.71.18
TStrings.GetText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433
4.71.19
TStrings.IndexOf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 433
4.71.20
TStrings.IndexOfName . . . . . . . . . . . . . . . . . . . . . . . . . . . 434
4.71.21
TStrings.IndexOfObject . . . . . . . . . . . . . . . . . . . . . . . . . . . 434
25
CONTENTS
4.71.22
TStrings.Insert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 434
4.71.23
TStrings.InsertObject . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435
4.71.24
TStrings.LoadFromFile . . . . . . . . . . . . . . . . . . . . . . . . . . . 435
4.71.25
TStrings.LoadFromStream . . . . . . . . . . . . . . . . . . . . . . . . . 435
4.71.26
TStrings.Move . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 435
4.71.27
TStrings.SaveToFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 436
4.71.28
TStrings.SaveToStream . . . . . . . . . . . . . . . . . . . . . . . . . . . 436
4.71.29
TStrings.SetText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437
4.71.30
TStrings.GetNameValue . . . . . . . . . . . . . . . . . . . . . . . . . . 437
4.71.31
TStrings.ExtractName . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437
4.71.32
TStrings.TextLineBreakStyle . . . . . . . . . . . . . . . . . . . . . . . . 437
4.71.33
TStrings.Delimiter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438
4.71.34
TStrings.DelimitedText . . . . . . . . . . . . . . . . . . . . . . . . . . . 438
4.71.35
TStrings.LineBreak . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438
4.71.36
TStrings.StrictDelimiter . . . . . . . . . . . . . . . . . . . . . . . . . . . 439
4.71.37
TStrings.QuoteChar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 439
4.71.38
TStrings.NameValueSeparator . . . . . . . . . . . . . . . . . . . . . . . 439
4.71.39
TStrings.ValueFromIndex . . . . . . . . . . . . . . . . . . . . . . . . . . 439
4.71.40
TStrings.Capacity . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440
4.71.41
TStrings.CommaText . . . . . . . . . . . . . . . . . . . . . . . . . . . . 440
4.71.42
TStrings.Count . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441
4.71.43
TStrings.Names . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441
4.71.44
TStrings.Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441
4.71.45
TStrings.Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442
4.71.46
TStrings.Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442
4.71.47
TStrings.Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443
4.71.48
TStrings.StringsAdapter . . . . . . . . . . . . . . . . . . . . . . . . . . . 443
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 443
4.72.2
4.72.3
4.72.4
TStringsEnumerator.Create . . . . . . . . . . . . . . . . . . . . . . . . . 444
4.72.5
TStringsEnumerator.GetCurrent . . . . . . . . . . . . . . . . . . . . . . 444
4.72.6
TStringsEnumerator.MoveNext . . . . . . . . . . . . . . . . . . . . . . . 444
4.72.7
TStringsEnumerator.Current . . . . . . . . . . . . . . . . . . . . . . . . 444
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445
4.73.2
4.73.3
4.73.4
TStringStream.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445
26
CONTENTS
4.73.5
TStringStream.Read . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 445
4.73.6
TStringStream.ReadString . . . . . . . . . . . . . . . . . . . . . . . . . 446
4.73.7
TStringStream.Seek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446
4.73.8
TStringStream.Write . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446
4.73.9
TStringStream.WriteString . . . . . . . . . . . . . . . . . . . . . . . . . 446
4.73.10
TStringStream.DataString . . . . . . . . . . . . . . . . . . . . . . . . . . 446
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 447
4.75.2
4.75.3
4.75.4
TThread.Execute . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448
4.75.5
TThread.Synchronize . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448
4.75.6
TThread.Queue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 448
4.75.7
TThread.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449
4.75.8
TThread.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449
4.75.9
TThread.CreateAnonymousThread . . . . . . . . . . . . . . . . . . . . . 449
4.75.10
TThread.NameThreadForDebugging . . . . . . . . . . . . . . . . . . . . 449
4.75.11
TThread.SetReturnValue . . . . . . . . . . . . . . . . . . . . . . . . . . 450
4.75.12
TThread.CheckTerminated . . . . . . . . . . . . . . . . . . . . . . . . . 450
4.75.13
TThread.RemoveQueuedEvents . . . . . . . . . . . . . . . . . . . . . . 450
4.75.14
TThread.SpinWait . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451
4.75.15
TThread.Sleep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451
4.75.16
TThread.Yield . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451
4.75.17
TThread.GetSystemTimes . . . . . . . . . . . . . . . . . . . . . . . . . . 451
4.75.18
TThread.GetTickCount . . . . . . . . . . . . . . . . . . . . . . . . . . . 452
4.75.19
TThread.GetTickCount64 . . . . . . . . . . . . . . . . . . . . . . . . . . 452
4.75.20
TThread.AfterConstruction . . . . . . . . . . . . . . . . . . . . . . . . . 452
4.75.21
TThread.Start . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452
4.75.22
TThread.Resume . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452
4.75.23
TThread.Suspend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453
4.75.24
TThread.Terminate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453
4.75.25
TThread.WaitFor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453
4.75.26
TThread.CurrentThread . . . . . . . . . . . . . . . . . . . . . . . . . . . 453
4.75.27
TThread.ProcessorCount . . . . . . . . . . . . . . . . . . . . . . . . . . 454
4.75.28
TThread.IsSingleProcessor . . . . . . . . . . . . . . . . . . . . . . . . . 454
4.75.29
TThread.FreeOnTerminate . . . . . . . . . . . . . . . . . . . . . . . . . 454
4.75.30
TThread.Handle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454
4.75.31
TThread.ExternalThread . . . . . . . . . . . . . . . . . . . . . . . . . . 455
27
CONTENTS
4.75.32
TThread.Priority . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455
4.75.33
TThread.Suspended . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455
4.75.34
TThread.Finished . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 455
4.75.35
TThread.ThreadID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456
4.75.36
TThread.OnTerminate . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456
4.75.37
TThread.FatalException . . . . . . . . . . . . . . . . . . . . . . . . . . . 456
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456
4.76.2
4.76.3
4.76.4
TThreadList.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457
4.76.5
TThreadList.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457
4.76.6
TThreadList.Add . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457
4.76.7
TThreadList.Clear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457
4.76.8
TThreadList.LockList . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458
4.76.9
TThreadList.Remove . . . . . . . . . . . . . . . . . . . . . . . . . . . . 458
4.76.10
TThreadList.UnlockList . . . . . . . . . . . . . . . . . . . . . . . . . . . 458
4.76.11
TThreadList.Duplicates . . . . . . . . . . . . . . . . . . . . . . . . . . . 458
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459
4.77.2
4.77.3
4.77.4
TWriter.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 460
4.77.5
TWriter.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 460
4.77.6
TWriter.DefineProperty . . . . . . . . . . . . . . . . . . . . . . . . . . . 460
4.77.7
TWriter.DefineBinaryProperty . . . . . . . . . . . . . . . . . . . . . . . 460
4.77.8
TWriter.Write . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461
4.77.9
TWriter.WriteBoolean . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461
4.77.10
TWriter.WriteCollection . . . . . . . . . . . . . . . . . . . . . . . . . . 461
4.77.11
TWriter.WriteComponent . . . . . . . . . . . . . . . . . . . . . . . . . . 461
4.77.12
TWriter.WriteChar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461
4.77.13
TWriter.WriteWideChar . . . . . . . . . . . . . . . . . . . . . . . . . . . 462
4.77.14
TWriter.WriteDescendent . . . . . . . . . . . . . . . . . . . . . . . . . . 462
4.77.15
TWriter.WriteFloat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462
4.77.16
TWriter.WriteSingle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462
4.77.17
TWriter.WriteDate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462
4.77.18
TWriter.WriteCurrency . . . . . . . . . . . . . . . . . . . . . . . . . . . 463
4.77.19
TWriter.WriteIdent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463
4.77.20
TWriter.WriteInteger . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463
4.77.21
TWriter.WriteSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463
28
CONTENTS
TWriter.WriteListBegin . . . . . . . . . . . . . . . . . . . . . . . . . . . 463
4.77.23
TWriter.WriteListEnd . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464
4.77.24
TWriter.WriteSignature . . . . . . . . . . . . . . . . . . . . . . . . . . . 464
4.77.25
TWriter.WriteRootComponent . . . . . . . . . . . . . . . . . . . . . . . 464
4.77.26
TWriter.WriteString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464
4.77.27
TWriter.WriteWideString . . . . . . . . . . . . . . . . . . . . . . . . . . 464
4.77.28
TWriter.WriteUnicodeString . . . . . . . . . . . . . . . . . . . . . . . . 464
4.77.29
TWriter.WriteVariant . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465
4.77.30
TWriter.RootAncestor . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465
4.77.31
TWriter.OnFindAncestor . . . . . . . . . . . . . . . . . . . . . . . . . . 465
4.77.32
TWriter.OnWriteMethodProperty . . . . . . . . . . . . . . . . . . . . . . 465
4.77.33
TWriter.OnWriteStringProperty . . . . . . . . . . . . . . . . . . . . . . 466
4.77.34
TWriter.Driver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466
4.77.35
TWriter.PropertyPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466
4.77.22
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468
6.2
6.3
CAlloc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468
6.3.2
Free . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468
6.3.3
Malloc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469
6.3.4
ReAlloc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 469
470
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 470
Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468
468
6.1
6.2.1
467
471
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471
472
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472
473
474
29
CONTENTS
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
30
CONTENTS
490
491
492
493
494
495
496
497
498
499
500
501
502
503
Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503
40.2.2
Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 506
31
CONTENTS
40.2.3
Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 506
AssignCrt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507
40.3.2
ClrEol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 508
40.3.3
ClrScr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 508
40.3.4
cursorbig . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509
40.3.5
cursoroff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509
40.3.6
cursoron . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509
40.3.7
Delay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 510
40.3.8
DelLine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 510
40.3.9
GotoXY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511
40.3.10
HighVideo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 511
40.3.11
InsLine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512
40.3.12
KeyPressed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512
40.3.13
LowVideo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513
40.3.14
NormVideo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 513
40.3.15
NoSound . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514
40.3.16
ReadKey . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 514
40.3.17
Sound . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515
40.3.18
TextBackground . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 515
40.3.19
TextColor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 516
40.3.20
TextMode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 516
40.3.21
WhereX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517
40.3.22
WhereY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 517
40.3.23
Window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 518
519
SetCThreadManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . 519
520
Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 520
add(clongdouble,Double):Double . . . . . . . . . . . . . . . . . . . . . . 525
42.4.2
add(Double,clongdouble):Double . . . . . . . . . . . . . . . . . . . . . . 525
42.4.3
assign(clongdouble):Double . . . . . . . . . . . . . . . . . . . . . . . . 525
42.4.4
assign(Double):clongdouble . . . . . . . . . . . . . . . . . . . . . . . . 526
32
CONTENTS
42.4.5
divide(clongdouble,Double):Double . . . . . . . . . . . . . . . . . . . . 526
42.4.6
divide(Double,clongdouble):Double . . . . . . . . . . . . . . . . . . . . 526
42.4.7
equal(clongdouble,Double):Boolean . . . . . . . . . . . . . . . . . . . . 526
42.4.8
equal(Double,clongdouble):Boolean . . . . . . . . . . . . . . . . . . . . 526
42.4.9
greaterthan(clongdouble,Double):Boolean . . . . . . . . . . . . . . . . . 527
42.4.10
greaterthan(Double,clongdouble):Boolean . . . . . . . . . . . . . . . . . 527
42.4.11
greaterthanorequal(clongdouble,Double):Boolean . . . . . . . . . . . . . 527
42.4.12
greaterthanorequal(Double,clongdouble):Boolean . . . . . . . . . . . . . 527
42.4.13
lessthan(clongdouble,Double):Boolean . . . . . . . . . . . . . . . . . . . 527
42.4.14
lessthan(Double,clongdouble):Boolean . . . . . . . . . . . . . . . . . . . 528
42.4.15
lessthanorequal(clongdouble,Double):Boolean . . . . . . . . . . . . . . . 528
42.4.16
lessthanorequal(Double,clongdouble):Boolean . . . . . . . . . . . . . . . 528
42.4.17
multiply(clongdouble,Double):Double . . . . . . . . . . . . . . . . . . . 528
42.4.18
multiply(Double,clongdouble):Double . . . . . . . . . . . . . . . . . . . 528
42.4.19
subtract(clongdouble,Double):Double . . . . . . . . . . . . . . . . . . . 529
42.4.20
subtract(Double,clongdouble):Double . . . . . . . . . . . . . . . . . . . 529
530
SetCWidestringManager . . . . . . . . . . . . . . . . . . . . . . . . . . 530
531
Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 531
CompareDate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533
44.4.2
CompareDateTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 534
44.4.3
CompareTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535
44.4.4
DateOf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536
44.4.5
DateTimeToDosDateTime . . . . . . . . . . . . . . . . . . . . . . . . . 537
44.4.6
DateTimeToJulianDate . . . . . . . . . . . . . . . . . . . . . . . . . . . 537
44.4.7
DateTimeToMac . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 537
44.4.8
DateTimeToModifiedJulianDate . . . . . . . . . . . . . . . . . . . . . . 538
44.4.9
DateTimeToUnix . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 538
44.4.10
DayOf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 538
44.4.11
DayOfTheMonth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 538
44.4.12
DayOfTheWeek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539
44.4.13
DayOfTheYear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539
33
CONTENTS
44.4.14
DaysBetween . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540
44.4.15
DaysInAMonth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 540
44.4.16
DaysInAYear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 541
44.4.17
DaysInMonth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 542
44.4.18
DaysInYear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 542
44.4.19
DaySpan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543
44.4.20
DecodeDateDay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543
44.4.21
DecodeDateMonthWeek . . . . . . . . . . . . . . . . . . . . . . . . . . 544
44.4.22
DecodeDateTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545
44.4.23
DecodeDateWeek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 545
44.4.24
DecodeDayOfWeekInMonth . . . . . . . . . . . . . . . . . . . . . . . . 546
44.4.25
DosDateTimeToDateTime . . . . . . . . . . . . . . . . . . . . . . . . . 546
44.4.26
EncodeDateDay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547
44.4.27
EncodeDateMonthWeek . . . . . . . . . . . . . . . . . . . . . . . . . . 547
44.4.28
EncodeDateTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 547
44.4.29
EncodeDateWeek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548
44.4.30
EncodeDayOfWeekInMonth . . . . . . . . . . . . . . . . . . . . . . . . 548
44.4.31
EncodeTimeInterval . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548
44.4.32
EndOfADay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 549
44.4.33
EndOfAMonth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 549
44.4.34
EndOfAWeek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 550
44.4.35
EndOfAYear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 551
44.4.36
EndOfTheDay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 551
44.4.37
EndOfTheMonth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552
44.4.38
EndOfTheWeek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552
44.4.39
EndOfTheYear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553
44.4.40
HourOf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553
44.4.41
HourOfTheDay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554
44.4.42
HourOfTheMonth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554
44.4.43
HourOfTheWeek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 554
44.4.44
HourOfTheYear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555
44.4.45
HoursBetween . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 555
44.4.46
HourSpan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 556
44.4.47
IncDay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 557
44.4.48
IncHour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 557
44.4.49
IncMilliSecond . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558
44.4.50
IncMinute . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 558
44.4.51
IncSecond . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 559
44.4.52
IncWeek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 559
44.4.53
IncYear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 560
34
CONTENTS
44.4.54
InvalidDateDayError . . . . . . . . . . . . . . . . . . . . . . . . . . . . 560
44.4.55
InvalidDateMonthWeekError . . . . . . . . . . . . . . . . . . . . . . . . 561
44.4.56
InvalidDateTimeError . . . . . . . . . . . . . . . . . . . . . . . . . . . . 561
44.4.57
InvalidDateWeekError . . . . . . . . . . . . . . . . . . . . . . . . . . . . 561
44.4.58
InvalidDayOfWeekInMonthError . . . . . . . . . . . . . . . . . . . . . . 562
44.4.59
IsInLeapYear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 562
44.4.60
IsPM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563
44.4.61
IsSameDay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563
44.4.62
IsSameMonth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564
44.4.63
IsToday . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564
44.4.64
IsValidDate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 564
44.4.65
IsValidDateDay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 565
44.4.66
IsValidDateMonthWeek . . . . . . . . . . . . . . . . . . . . . . . . . . . 565
44.4.67
IsValidDateTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566
44.4.68
IsValidDateWeek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 567
44.4.69
IsValidTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 568
44.4.70
JulianDateToDateTime . . . . . . . . . . . . . . . . . . . . . . . . . . . 568
44.4.71
LocalTimeToUniversal . . . . . . . . . . . . . . . . . . . . . . . . . . . 569
44.4.72
MacTimeStampToUnix . . . . . . . . . . . . . . . . . . . . . . . . . . . 569
44.4.73
MacToDateTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569
44.4.74
MilliSecondOf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 569
44.4.75
MilliSecondOfTheDay . . . . . . . . . . . . . . . . . . . . . . . . . . . 570
44.4.76
MilliSecondOfTheHour . . . . . . . . . . . . . . . . . . . . . . . . . . . 570
44.4.77
MilliSecondOfTheMinute . . . . . . . . . . . . . . . . . . . . . . . . . . 570
44.4.78
MilliSecondOfTheMonth . . . . . . . . . . . . . . . . . . . . . . . . . . 571
44.4.79
MilliSecondOfTheSecond . . . . . . . . . . . . . . . . . . . . . . . . . . 571
44.4.80
MilliSecondOfTheWeek . . . . . . . . . . . . . . . . . . . . . . . . . . 571
44.4.81
MilliSecondOfTheYear . . . . . . . . . . . . . . . . . . . . . . . . . . . 572
44.4.82
MilliSecondsBetween . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572
44.4.83
MilliSecondSpan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573
44.4.84
MinuteOf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 574
44.4.85
MinuteOfTheDay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 574
44.4.86
MinuteOfTheHour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 574
44.4.87
MinuteOfTheMonth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575
44.4.88
MinuteOfTheWeek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575
44.4.89
MinuteOfTheYear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 575
44.4.90
MinutesBetween . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576
44.4.91
MinuteSpan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 577
44.4.92
ModifiedJulianDateToDateTime . . . . . . . . . . . . . . . . . . . . . . 577
44.4.93
MonthOf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 578
35
CONTENTS
44.4.94
MonthOfTheYear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 578
44.4.95
MonthsBetween . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 578
44.4.96
MonthSpan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 579
44.4.97
NthDayOfWeek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 580
44.4.98
PeriodBetween . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 581
44.4.99
PreviousDayOfWeek . . . . . . . . . . . . . . . . . . . . . . . . . . . . 581
36
CONTENTS
623
37
CONTENTS
Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 626
45.9.2
Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 627
45.9.3
Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 630
AddDisk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 630
45.10.2
DiskFree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 631
45.10.3
DiskSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 631
45.10.4
DosExitCode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 632
45.10.5
DosVersion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 632
45.10.6
DTToUnixDate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 633
45.10.7
EnvCount . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 633
45.10.8
EnvStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634
45.10.9
Exec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634
38
CONTENTS
649
dxe_load . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 649
650
Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 650
47.2.2
Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 650
FreeLibrary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 651
47.3.2
GetLoadErrorStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 651
47.3.3
GetProcAddress . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 651
47.3.4
GetProcedureAddress . . . . . . . . . . . . . . . . . . . . . . . . . . . . 651
47.3.5
LoadLibrary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 652
47.3.6
SafeLoadLibrary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 652
47.3.7
UnloadLibrary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 652
653
npxsetup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 653
654
Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654
PError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654
49.4.2
StrError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 655
656
39
CONTENTS
Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 656
CloseExeFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 657
50.3.2
FindExeSection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 657
50.3.3
GetModuleByAddr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 657
50.3.4
OpenExeFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 657
50.3.5
ReadDebugLink . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 658
659
Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 659
51.3.2
Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 659
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 660
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 660
51.5.2
51.5.3
51.5.4
TFPGInterfacedObjectList.Create . . . . . . . . . . . . . . . . . . . . . 661
51.5.5
TFPGInterfacedObjectList.Add . . . . . . . . . . . . . . . . . . . . . . . 661
51.5.6
TFPGInterfacedObjectList.Extract . . . . . . . . . . . . . . . . . . . . . 661
51.5.7
TFPGInterfacedObjectList.GetEnumerator . . . . . . . . . . . . . . . . . 661
51.5.8
TFPGInterfacedObjectList.IndexOf . . . . . . . . . . . . . . . . . . . . . 662
51.5.9
TFPGInterfacedObjectList.Insert . . . . . . . . . . . . . . . . . . . . . . 662
51.5.10
TFPGInterfacedObjectList.Assign . . . . . . . . . . . . . . . . . . . . . 662
51.5.11
TFPGInterfacedObjectList.Remove . . . . . . . . . . . . . . . . . . . . . 662
51.5.12
TFPGInterfacedObjectList.Sort . . . . . . . . . . . . . . . . . . . . . . . 663
51.5.13
TFPGInterfacedObjectList.First . . . . . . . . . . . . . . . . . . . . . . . 663
51.5.14
TFPGInterfacedObjectList.Last . . . . . . . . . . . . . . . . . . . . . . . 663
51.5.15
TFPGInterfacedObjectList.Items . . . . . . . . . . . . . . . . . . . . . . 664
51.5.16
TFPGInterfacedObjectList.List . . . . . . . . . . . . . . . . . . . . . . . 664
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 664
51.6.2
51.6.3
51.6.4
TFPGList.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 665
40
CONTENTS
51.6.5
TFPGList.Add . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 665
51.6.6
TFPGList.Extract . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 665
51.6.7
TFPGList.GetEnumerator . . . . . . . . . . . . . . . . . . . . . . . . . . 665
51.6.8
TFPGList.IndexOf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 666
51.6.9
TFPGList.Insert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 666
51.6.10
TFPGList.Assign . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 666
51.6.11
TFPGList.Remove . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 666
51.6.12
TFPGList.Sort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 667
51.6.13
TFPGList.First . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 667
51.6.14
TFPGList.Last . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 667
51.6.15
TFPGList.Items . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 667
51.6.16
TFPGList.List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 668
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 668
51.7.2
51.7.3
51.7.4
TFPGListEnumerator.Create . . . . . . . . . . . . . . . . . . . . . . . . 668
51.7.5
TFPGListEnumerator.MoveNext . . . . . . . . . . . . . . . . . . . . . . 669
51.7.6
TFPGListEnumerator.Current . . . . . . . . . . . . . . . . . . . . . . . . 669
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 669
51.8.2
51.8.3
51.8.4
TFPGMap.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 670
51.8.5
TFPGMap.Add . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 670
51.8.6
TFPGMap.Find . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 670
51.8.7
TFPGMap.IndexOf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 671
51.8.8
TFPGMap.IndexOfData . . . . . . . . . . . . . . . . . . . . . . . . . . . 671
51.8.9
TFPGMap.InsertKey . . . . . . . . . . . . . . . . . . . . . . . . . . . . 671
51.8.10
TFPGMap.InsertKeyData . . . . . . . . . . . . . . . . . . . . . . . . . . 671
51.8.11
TFPGMap.Remove . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672
51.8.12
TFPGMap.Keys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672
51.8.13
TFPGMap.Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672
51.8.14
TFPGMap.KeyData . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672
51.8.15
TFPGMap.OnCompare . . . . . . . . . . . . . . . . . . . . . . . . . . . 673
51.8.16
TFPGMap.OnKeyCompare . . . . . . . . . . . . . . . . . . . . . . . . . 673
51.8.17
TFPGMap.OnDataCompare . . . . . . . . . . . . . . . . . . . . . . . . 673
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 674
51.9.2
41
CONTENTS
51.9.3
51.9.4
TFPGMapInterfacedObjectData.Create . . . . . . . . . . . . . . . . . . . 674
51.9.5
TFPGMapInterfacedObjectData.Add . . . . . . . . . . . . . . . . . . . . 675
51.9.6
TFPGMapInterfacedObjectData.Find . . . . . . . . . . . . . . . . . . . . 675
51.9.7
TFPGMapInterfacedObjectData.IndexOf . . . . . . . . . . . . . . . . . . 675
51.9.8
TFPGMapInterfacedObjectData.IndexOfData . . . . . . . . . . . . . . . 676
51.9.9
TFPGMapInterfacedObjectData.InsertKey . . . . . . . . . . . . . . . . . 676
51.9.10
TFPGMapInterfacedObjectData.InsertKeyData . . . . . . . . . . . . . . 676
51.9.11
TFPGMapInterfacedObjectData.Remove . . . . . . . . . . . . . . . . . . 676
51.9.12
TFPGMapInterfacedObjectData.Keys . . . . . . . . . . . . . . . . . . . 677
51.9.13
TFPGMapInterfacedObjectData.Data . . . . . . . . . . . . . . . . . . . . 677
51.9.14
TFPGMapInterfacedObjectData.KeyData . . . . . . . . . . . . . . . . . 677
51.9.15
TFPGMapInterfacedObjectData.OnCompare . . . . . . . . . . . . . . . . 678
51.9.16
TFPGMapInterfacedObjectData.OnKeyCompare . . . . . . . . . . . . . 678
51.9.17
TFPGMapInterfacedObjectData.OnDataCompare . . . . . . . . . . . . . 678
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 679
51.10.2
51.10.3
51.10.4
TFPGObjectList.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . 679
51.10.5
TFPGObjectList.Add . . . . . . . . . . . . . . . . . . . . . . . . . . . . 679
51.10.6
TFPGObjectList.Extract . . . . . . . . . . . . . . . . . . . . . . . . . . 680
51.10.7
TFPGObjectList.GetEnumerator . . . . . . . . . . . . . . . . . . . . . . 680
51.10.8
TFPGObjectList.IndexOf . . . . . . . . . . . . . . . . . . . . . . . . . . 680
51.10.9
TFPGObjectList.Insert . . . . . . . . . . . . . . . . . . . . . . . . . . . 681
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 683
51.11.2
51.11.3
51.11.4
TFPSList.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 684
51.11.5
TFPSList.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 684
51.11.6
TFPSList.Add . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 685
42
CONTENTS
51.11.7
TFPSList.Clear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 685
51.11.8
TFPSList.Delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 685
51.11.9
TFPSList.Error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 685
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 691
51.12.2
51.12.3
51.12.4
TFPSMap.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 691
51.12.5
TFPSMap.Add . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 692
51.12.6
TFPSMap.Find . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 692
51.12.7
TFPSMap.IndexOf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 692
51.12.8
TFPSMap.IndexOfData . . . . . . . . . . . . . . . . . . . . . . . . . . . 693
51.12.9
TFPSMap.Insert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 693
43
CONTENTS
698
Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 699
GetActiveCollation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 699
52.4.2
SetActiveCollation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 699
700
Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 700
53.2.2
Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 701
53.2.3
Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 701
GetLongOpts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 702
53.3.2
GetOpt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 702
705
44
CONTENTS
Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 712
54.17.2
Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 715
54.17.3
Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 717
allocate_ldt_descriptors . . . . . . . . . . . . . . . . . . . . . . . . . . . 718
54.18.2
allocate_memory_block . . . . . . . . . . . . . . . . . . . . . . . . . . . 720
54.18.3
copyfromdos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 720
54.18.4
copytodos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 721
54.18.5
create_code_segment_alias_descriptor . . . . . . . . . . . . . . . . . . . 721
54.18.6
disable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 721
54.18.7
dpmi_dosmemfillchar . . . . . . . . . . . . . . . . . . . . . . . . . . . . 722
54.18.8
dpmi_dosmemfillword . . . . . . . . . . . . . . . . . . . . . . . . . . . 722
54.18.9
dpmi_dosmemget . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 722
45
CONTENTS
749
Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 749
55.3.2
Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 751
55.3.3
Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 753
46
CONTENTS
Gpm_AnyDouble . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 754
55.4.2
Gpm_AnySingle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 754
55.4.3
Gpm_AnyTriple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 754
55.4.4
gpm_close . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 755
55.4.5
gpm_fitvalues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 755
55.4.6
gpm_fitvaluesM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 755
55.4.7
gpm_getevent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 755
55.4.8
gpm_getsnapshot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 757
55.4.9
gpm_lowerroi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 757
55.4.10
gpm_open . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 757
55.4.11
gpm_poproi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 758
55.4.12
gpm_pushroi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 758
55.4.13
gpm_raiseroi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 758
55.4.14
gpm_repeat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 758
55.4.15
Gpm_StrictDouble . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 759
55.4.16
Gpm_StrictSingle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 759
55.4.17
Gpm_StrictTriple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 759
760
Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 769
56.12.2
Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 785
56.12.3
Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 790
Arc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 793
56.13.2
Bar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 793
56.13.3
Bar3D . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 793
56.13.4
ClearDevice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 794
47
CONTENTS
56.13.5
Closegraph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 794
56.13.6
DetectGraph . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 794
56.13.7
DrawPoly . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 794
56.13.8
Ellipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 795
56.13.9
FillEllipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 795
48
CONTENTS
812
Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 814
57.4.2
Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 815
CheckPointer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 815
57.5.2
DumpHeap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 816
57.5.3
SetHeapExtraInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 816
57.5.4
SetHeapTraceOutput . . . . . . . . . . . . . . . . . . . . . . . . . . . . 817
818
Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 818
49
CONTENTS
58.3.2
Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 820
ftok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 823
58.4.2
msgctl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 824
58.4.3
msgget . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 826
58.4.4
msgrcv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 827
58.4.5
msgsnd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 827
58.4.6
semctl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 828
58.4.7
semget . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 833
58.4.8
semop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 833
58.4.9
shmat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 834
58.4.10
shmctl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 834
58.4.11
shmdt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 837
58.4.12
shmget . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 837
838
Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 844
59.5.2
Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 849
AddSequence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 850
59.6.2
AddSpecialSequence . . . . . . . . . . . . . . . . . . . . . . . . . . . . 850
59.6.3
DoneKeyboard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 851
59.6.4
FindSequence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 851
59.6.5
FunctionKeyName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 851
59.6.6
GetKeyboardDriver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 852
59.6.7
GetKeyEvent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 852
59.6.8
GetKeyEventChar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 853
59.6.9
GetKeyEventCode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 853
59.6.10
GetKeyEventFlags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 854
59.6.11
GetKeyEventShiftState . . . . . . . . . . . . . . . . . . . . . . . . . . . 855
59.6.12
GetKeyEventUniCode . . . . . . . . . . . . . . . . . . . . . . . . . . . . 855
59.6.13
InitKeyboard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 856
59.6.14
IsFunctionKey . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 856
59.6.15
KeyEventToString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 857
59.6.16
KeyPressed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 857
50
CONTENTS
59.6.17
PollKeyEvent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 857
59.6.18
PollShiftStateEvent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 858
59.6.19
PutKeyEvent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 859
59.6.20
RawReadKey . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 860
59.6.21
RawReadString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 860
59.6.22
RestoreStartMode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 860
59.6.23
SetKeyboardDriver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 860
59.6.24
ShiftStateToString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 861
59.6.25
TranslateKeyEvent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 861
59.6.26
TranslateKeyEventUniCode . . . . . . . . . . . . . . . . . . . . . . . . . 861
862
CloseStabs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 862
60.2.2
GetLineInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 862
60.2.3
StabBackTraceStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 862
864
Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 864
61.3.2
Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 878
capget . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 880
61.4.2
capset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 881
61.4.3
clock_getres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 881
61.4.4
clock_gettime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 881
61.4.5
clock_settime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 881
61.4.6
clone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 882
61.4.7
epoll_create . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 884
61.4.8
epoll_ctl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 884
61.4.9
epoll_wait . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 885
61.4.10
fdatasync . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 885
61.4.11
futex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 885
61.4.12
futex_op . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 886
61.4.13
inotify_add_watch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 886
61.4.14
inotify_init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 887
61.4.15
inotify_init1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 887
61.4.16
inotify_rm_watch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 888
51
CONTENTS
61.4.17
sched_yield . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 888
61.4.18
setregid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 888
61.4.19
setreuid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 888
61.4.20
sync_file_range . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 888
61.4.21
Sysinfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 889
891
GetLineInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 891
892
Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 896
63.12.2
Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 897
arccos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 898
63.13.2
arccosh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 899
63.13.3
arcosh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 899
63.13.4
arcsin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 900
63.13.5
arcsinh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 900
63.13.6
arctan2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 901
63.13.7
arctanh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 901
63.13.8
arsinh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 901
63.13.9
artanh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 902
CONTENTS
53
CONTENTS
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 941
942
54
CONTENTS
64.2.1
Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 943
add(Tmatrix2_double,Double):Tmatrix2_double . . . . . . . . . . . . . . 945
64.3.2
add(Tmatrix2_double,Tmatrix2_double):Tmatrix2_double . . . . . . . . 945
64.3.3
add(Tmatrix2_extended,extended):Tmatrix2_extended . . . . . . . . . . 946
64.3.4
add(Tmatrix2_extended,Tmatrix2_extended):Tmatrix2_extended . . . . . 946
64.3.5
add(Tmatrix2_single,single):Tmatrix2_single . . . . . . . . . . . . . . . 946
64.3.6
add(Tmatrix2_single,Tmatrix2_single):Tmatrix2_single . . . . . . . . . . 946
64.3.7
add(Tmatrix3_double,Double):Tmatrix3_double . . . . . . . . . . . . . . 946
64.3.8
add(Tmatrix3_double,Tmatrix3_double):Tmatrix3_double . . . . . . . . 947
64.3.9
add(Tmatrix3_extended,extended):Tmatrix3_extended . . . . . . . . . . 947
64.3.10
add(Tmatrix3_extended,Tmatrix3_extended):Tmatrix3_extended . . . . . 947
64.3.11
add(Tmatrix3_single,single):Tmatrix3_single . . . . . . . . . . . . . . . 947
64.3.12
add(Tmatrix3_single,Tmatrix3_single):Tmatrix3_single . . . . . . . . . . 947
64.3.13
add(Tmatrix4_double,Double):Tmatrix4_double . . . . . . . . . . . . . . 948
64.3.14
add(Tmatrix4_double,Tmatrix4_double):Tmatrix4_double . . . . . . . . 948
64.3.15
add(Tmatrix4_extended,extended):Tmatrix4_extended . . . . . . . . . . 948
64.3.16
add(Tmatrix4_extended,Tmatrix4_extended):Tmatrix4_extended . . . . . 948
64.3.17
add(Tmatrix4_single,single):Tmatrix4_single . . . . . . . . . . . . . . . 948
64.3.18
add(Tmatrix4_single,Tmatrix4_single):Tmatrix4_single . . . . . . . . . . 949
64.3.19
add(Tvector2_double,Double):Tvector2_double . . . . . . . . . . . . . . 949
64.3.20
add(Tvector2_double,Tvector2_double):Tvector2_double . . . . . . . . . 949
64.3.21
add(Tvector2_extended,extended):Tvector2_extended . . . . . . . . . . . 949
64.3.22
add(Tvector2_extended,Tvector2_extended):Tvector2_extended . . . . . 949
64.3.23
add(Tvector2_single,single):Tvector2_single . . . . . . . . . . . . . . . . 950
64.3.24
add(Tvector2_single,Tvector2_single):Tvector2_single . . . . . . . . . . 950
64.3.25
add(Tvector3_double,Double):Tvector3_double . . . . . . . . . . . . . . 950
64.3.26
add(Tvector3_double,Tvector3_double):Tvector3_double . . . . . . . . . 950
64.3.27
add(Tvector3_extended,extended):Tvector3_extended . . . . . . . . . . . 950
64.3.28
add(Tvector3_extended,Tvector3_extended):Tvector3_extended . . . . . 951
64.3.29
add(Tvector3_single,single):Tvector3_single . . . . . . . . . . . . . . . . 951
64.3.30
add(Tvector3_single,Tvector3_single):Tvector3_single . . . . . . . . . . 951
64.3.31
add(Tvector4_double,Double):Tvector4_double . . . . . . . . . . . . . . 951
64.3.32
add(Tvector4_double,Tvector4_double):Tvector4_double . . . . . . . . . 951
64.3.33
add(Tvector4_extended,extended):Tvector4_extended . . . . . . . . . . . 952
64.3.34
add(Tvector4_extended,Tvector4_extended):Tvector4_extended . . . . . 952
64.3.35
add(Tvector4_single,single):Tvector4_single . . . . . . . . . . . . . . . . 952
64.3.36
add(Tvector4_single,Tvector4_single):Tvector4_single . . . . . . . . . . 952
64.3.37
assign(Tmatrix2_double):Tmatrix2_extended . . . . . . . . . . . . . . . 952
64.3.38
assign(Tmatrix2_double):Tmatrix2_single . . . . . . . . . . . . . . . . . 953
55
CONTENTS
64.3.39
assign(Tmatrix2_double):Tmatrix3_double . . . . . . . . . . . . . . . . 953
64.3.40
assign(Tmatrix2_double):Tmatrix3_extended . . . . . . . . . . . . . . . 953
64.3.41
assign(Tmatrix2_double):Tmatrix3_single . . . . . . . . . . . . . . . . . 953
64.3.42
assign(Tmatrix2_double):Tmatrix4_double . . . . . . . . . . . . . . . . 953
64.3.43
assign(Tmatrix2_double):Tmatrix4_extended . . . . . . . . . . . . . . . 954
64.3.44
assign(Tmatrix2_double):Tmatrix4_single . . . . . . . . . . . . . . . . . 954
64.3.45
assign(Tmatrix2_extended):Tmatrix2_double . . . . . . . . . . . . . . . 954
64.3.46
assign(Tmatrix2_extended):Tmatrix2_single . . . . . . . . . . . . . . . . 954
64.3.47
assign(Tmatrix2_extended):Tmatrix3_double . . . . . . . . . . . . . . . 955
64.3.48
assign(Tmatrix2_extended):Tmatrix3_extended . . . . . . . . . . . . . . 955
64.3.49
assign(Tmatrix2_extended):Tmatrix3_single . . . . . . . . . . . . . . . . 955
64.3.50
assign(Tmatrix2_extended):Tmatrix4_double . . . . . . . . . . . . . . . 955
64.3.51
assign(Tmatrix2_extended):Tmatrix4_extended . . . . . . . . . . . . . . 956
64.3.52
assign(Tmatrix2_extended):Tmatrix4_single . . . . . . . . . . . . . . . . 956
64.3.53
assign(Tmatrix2_single):Tmatrix2_double . . . . . . . . . . . . . . . . . 956
64.3.54
assign(Tmatrix2_single):Tmatrix2_extended . . . . . . . . . . . . . . . . 956
64.3.55
assign(Tmatrix2_single):Tmatrix3_double . . . . . . . . . . . . . . . . . 956
64.3.56
assign(Tmatrix2_single):Tmatrix3_extended . . . . . . . . . . . . . . . . 957
64.3.57
assign(Tmatrix2_single):Tmatrix3_single . . . . . . . . . . . . . . . . . 957
64.3.58
assign(Tmatrix2_single):Tmatrix4_double . . . . . . . . . . . . . . . . . 957
64.3.59
assign(Tmatrix2_single):Tmatrix4_extended . . . . . . . . . . . . . . . . 957
64.3.60
assign(Tmatrix2_single):Tmatrix4_single . . . . . . . . . . . . . . . . . 957
64.3.61
assign(Tmatrix3_double):Tmatrix2_double . . . . . . . . . . . . . . . . 958
64.3.62
assign(Tmatrix3_double):Tmatrix2_extended . . . . . . . . . . . . . . . 958
64.3.63
assign(Tmatrix3_double):Tmatrix2_single . . . . . . . . . . . . . . . . . 958
64.3.64
assign(Tmatrix3_double):Tmatrix3_extended . . . . . . . . . . . . . . . 958
64.3.65
assign(Tmatrix3_double):Tmatrix3_single . . . . . . . . . . . . . . . . . 958
64.3.66
assign(Tmatrix3_double):Tmatrix4_double . . . . . . . . . . . . . . . . 959
64.3.67
assign(Tmatrix3_double):Tmatrix4_extended . . . . . . . . . . . . . . . 959
64.3.68
assign(Tmatrix3_double):Tmatrix4_single . . . . . . . . . . . . . . . . . 959
64.3.69
assign(Tmatrix3_extended):Tmatrix2_double . . . . . . . . . . . . . . . 959
64.3.70
assign(Tmatrix3_extended):Tmatrix2_extended . . . . . . . . . . . . . . 960
64.3.71
assign(Tmatrix3_extended):Tmatrix2_single . . . . . . . . . . . . . . . . 960
64.3.72
assign(Tmatrix3_extended):Tmatrix3_double . . . . . . . . . . . . . . . 960
64.3.73
assign(Tmatrix3_extended):Tmatrix3_single . . . . . . . . . . . . . . . . 960
64.3.74
assign(Tmatrix3_extended):Tmatrix4_double . . . . . . . . . . . . . . . 961
64.3.75
assign(Tmatrix3_extended):Tmatrix4_extended . . . . . . . . . . . . . . 961
64.3.76
assign(Tmatrix3_extended):Tmatrix4_single . . . . . . . . . . . . . . . . 961
64.3.77
assign(Tmatrix3_single):Tmatrix2_double . . . . . . . . . . . . . . . . . 961
64.3.78
assign(Tmatrix3_single):Tmatrix2_extended . . . . . . . . . . . . . . . . 961
56
CONTENTS
64.3.79
assign(Tmatrix3_single):Tmatrix2_single . . . . . . . . . . . . . . . . . 962
64.3.80
assign(Tmatrix3_single):Tmatrix3_double . . . . . . . . . . . . . . . . . 962
64.3.81
assign(Tmatrix3_single):Tmatrix3_extended . . . . . . . . . . . . . . . . 962
64.3.82
assign(Tmatrix3_single):Tmatrix4_double . . . . . . . . . . . . . . . . . 962
64.3.83
assign(Tmatrix3_single):Tmatrix4_extended . . . . . . . . . . . . . . . . 963
64.3.84
assign(Tmatrix3_single):Tmatrix4_single . . . . . . . . . . . . . . . . . 963
64.3.85
assign(Tmatrix4_double):Tmatrix2_double . . . . . . . . . . . . . . . . 963
64.3.86
assign(Tmatrix4_double):Tmatrix2_extended . . . . . . . . . . . . . . . 963
64.3.87
assign(Tmatrix4_double):Tmatrix2_single . . . . . . . . . . . . . . . . . 963
64.3.88
assign(Tmatrix4_double):Tmatrix3_double . . . . . . . . . . . . . . . . 964
64.3.89
assign(Tmatrix4_double):Tmatrix3_extended . . . . . . . . . . . . . . . 964
64.3.90
assign(Tmatrix4_double):Tmatrix3_single . . . . . . . . . . . . . . . . . 964
64.3.91
assign(Tmatrix4_double):Tmatrix4_extended . . . . . . . . . . . . . . . 964
64.3.92
assign(Tmatrix4_double):Tmatrix4_single . . . . . . . . . . . . . . . . . 964
64.3.93
assign(Tmatrix4_extended):Tmatrix2_double . . . . . . . . . . . . . . . 965
64.3.94
assign(Tmatrix4_extended):Tmatrix2_extended . . . . . . . . . . . . . . 965
64.3.95
assign(Tmatrix4_extended):Tmatrix2_single . . . . . . . . . . . . . . . . 965
64.3.96
assign(Tmatrix4_extended):Tmatrix3_double . . . . . . . . . . . . . . . 965
64.3.97
assign(Tmatrix4_extended):Tmatrix3_extended . . . . . . . . . . . . . . 966
64.3.98
assign(Tmatrix4_extended):Tmatrix3_single . . . . . . . . . . . . . . . . 966
64.3.99
assign(Tmatrix4_extended):Tmatrix4_double . . . . . . . . . . . . . . . 966
57
CONTENTS
58
CONTENTS
59
CONTENTS
60
CONTENTS
61
CONTENTS
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1011
64.4.2
64.4.3
Tmatrix2_double.init_zero . . . . . . . . . . . . . . . . . . . . . . . . . 1012
64.4.4
Tmatrix2_double.init_identity . . . . . . . . . . . . . . . . . . . . . . . 1012
64.4.5
Tmatrix2_double.init . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1012
64.4.6
Tmatrix2_double.get_column . . . . . . . . . . . . . . . . . . . . . . . . 1012
64.4.7
Tmatrix2_double.get_row . . . . . . . . . . . . . . . . . . . . . . . . . . 1012
64.4.8
Tmatrix2_double.set_column . . . . . . . . . . . . . . . . . . . . . . . . 1012
62
CONTENTS
64.4.9
Tmatrix2_double.set_row . . . . . . . . . . . . . . . . . . . . . . . . . . 1013
64.4.10
Tmatrix2_double.determinant . . . . . . . . . . . . . . . . . . . . . . . . 1013
64.4.11
Tmatrix2_double.inverse . . . . . . . . . . . . . . . . . . . . . . . . . . 1013
64.4.12
Tmatrix2_double.transpose . . . . . . . . . . . . . . . . . . . . . . . . . 1013
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1013
64.5.2
64.5.3
Tmatrix2_extended.init_zero . . . . . . . . . . . . . . . . . . . . . . . . 1014
64.5.4
Tmatrix2_extended.init_identity . . . . . . . . . . . . . . . . . . . . . . 1014
64.5.5
Tmatrix2_extended.init . . . . . . . . . . . . . . . . . . . . . . . . . . . 1014
64.5.6
Tmatrix2_extended.get_column . . . . . . . . . . . . . . . . . . . . . . . 1014
64.5.7
Tmatrix2_extended.get_row . . . . . . . . . . . . . . . . . . . . . . . . 1015
64.5.8
Tmatrix2_extended.set_column . . . . . . . . . . . . . . . . . . . . . . . 1015
64.5.9
Tmatrix2_extended.set_row . . . . . . . . . . . . . . . . . . . . . . . . . 1015
64.5.10
Tmatrix2_extended.determinant . . . . . . . . . . . . . . . . . . . . . . 1015
64.5.11
Tmatrix2_extended.inverse . . . . . . . . . . . . . . . . . . . . . . . . . 1015
64.5.12
Tmatrix2_extended.transpose . . . . . . . . . . . . . . . . . . . . . . . . 1015
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1016
64.6.2
64.6.3
Tmatrix2_single.init_zero . . . . . . . . . . . . . . . . . . . . . . . . . . 1016
64.6.4
Tmatrix2_single.init_identity . . . . . . . . . . . . . . . . . . . . . . . . 1016
64.6.5
Tmatrix2_single.init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1016
64.6.6
Tmatrix2_single.get_column . . . . . . . . . . . . . . . . . . . . . . . . 1017
64.6.7
Tmatrix2_single.get_row . . . . . . . . . . . . . . . . . . . . . . . . . . 1017
64.6.8
Tmatrix2_single.set_column . . . . . . . . . . . . . . . . . . . . . . . . 1017
64.6.9
Tmatrix2_single.set_row . . . . . . . . . . . . . . . . . . . . . . . . . . 1017
64.6.10
Tmatrix2_single.determinant . . . . . . . . . . . . . . . . . . . . . . . . 1017
64.6.11
Tmatrix2_single.inverse . . . . . . . . . . . . . . . . . . . . . . . . . . . 1017
64.6.12
Tmatrix2_single.transpose . . . . . . . . . . . . . . . . . . . . . . . . . 1018
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1018
64.7.2
64.7.3
Tmatrix3_double.init_zero . . . . . . . . . . . . . . . . . . . . . . . . . 1018
64.7.4
Tmatrix3_double.init_identity . . . . . . . . . . . . . . . . . . . . . . . 1018
64.7.5
Tmatrix3_double.init . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1019
64.7.6
Tmatrix3_double.get_column . . . . . . . . . . . . . . . . . . . . . . . . 1019
64.7.7
Tmatrix3_double.get_row . . . . . . . . . . . . . . . . . . . . . . . . . . 1019
64.7.8
Tmatrix3_double.set_column . . . . . . . . . . . . . . . . . . . . . . . . 1019
64.7.9
Tmatrix3_double.set_row . . . . . . . . . . . . . . . . . . . . . . . . . . 1019
63
CONTENTS
64.7.10
Tmatrix3_double.determinant . . . . . . . . . . . . . . . . . . . . . . . . 1020
64.7.11
Tmatrix3_double.inverse . . . . . . . . . . . . . . . . . . . . . . . . . . 1020
64.7.12
Tmatrix3_double.transpose . . . . . . . . . . . . . . . . . . . . . . . . . 1020
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1020
64.8.2
64.8.3
Tmatrix3_extended.init_zero . . . . . . . . . . . . . . . . . . . . . . . . 1021
64.8.4
Tmatrix3_extended.init_identity . . . . . . . . . . . . . . . . . . . . . . 1021
64.8.5
Tmatrix3_extended.init . . . . . . . . . . . . . . . . . . . . . . . . . . . 1021
64.8.6
Tmatrix3_extended.get_column . . . . . . . . . . . . . . . . . . . . . . . 1021
64.8.7
Tmatrix3_extended.get_row . . . . . . . . . . . . . . . . . . . . . . . . 1021
64.8.8
Tmatrix3_extended.set_column . . . . . . . . . . . . . . . . . . . . . . . 1022
64.8.9
Tmatrix3_extended.set_row . . . . . . . . . . . . . . . . . . . . . . . . . 1022
64.8.10
Tmatrix3_extended.determinant . . . . . . . . . . . . . . . . . . . . . . 1022
64.8.11
Tmatrix3_extended.inverse . . . . . . . . . . . . . . . . . . . . . . . . . 1022
64.8.12
Tmatrix3_extended.transpose . . . . . . . . . . . . . . . . . . . . . . . . 1022
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1022
64.9.2
64.9.3
Tmatrix3_single.init_zero . . . . . . . . . . . . . . . . . . . . . . . . . . 1023
64.9.4
Tmatrix3_single.init_identity . . . . . . . . . . . . . . . . . . . . . . . . 1023
64.9.5
Tmatrix3_single.init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1023
64.9.6
Tmatrix3_single.get_column . . . . . . . . . . . . . . . . . . . . . . . . 1023
64.9.7
Tmatrix3_single.get_row . . . . . . . . . . . . . . . . . . . . . . . . . . 1024
64.9.8
Tmatrix3_single.set_column . . . . . . . . . . . . . . . . . . . . . . . . 1024
64.9.9
Tmatrix3_single.set_row . . . . . . . . . . . . . . . . . . . . . . . . . . 1024
64.9.10
Tmatrix3_single.determinant . . . . . . . . . . . . . . . . . . . . . . . . 1024
64.9.11
Tmatrix3_single.inverse . . . . . . . . . . . . . . . . . . . . . . . . . . . 1024
64.9.12
Tmatrix3_single.transpose . . . . . . . . . . . . . . . . . . . . . . . . . 1024
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1025
64.10.2
64.10.3
Tmatrix4_double.init_zero . . . . . . . . . . . . . . . . . . . . . . . . . 1025
64.10.4
Tmatrix4_double.init_identity . . . . . . . . . . . . . . . . . . . . . . . 1025
64.10.5
Tmatrix4_double.init . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1025
64.10.6
Tmatrix4_double.get_column . . . . . . . . . . . . . . . . . . . . . . . . 1026
64.10.7
Tmatrix4_double.get_row . . . . . . . . . . . . . . . . . . . . . . . . . . 1026
64.10.8
Tmatrix4_double.set_column . . . . . . . . . . . . . . . . . . . . . . . . 1026
64.10.9
Tmatrix4_double.set_row . . . . . . . . . . . . . . . . . . . . . . . . . . 1026
64
CONTENTS
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1027
64.11.2
64.11.3
Tmatrix4_extended.init_zero . . . . . . . . . . . . . . . . . . . . . . . . 1027
64.11.4
Tmatrix4_extended.init_identity . . . . . . . . . . . . . . . . . . . . . . 1028
64.11.5
Tmatrix4_extended.init . . . . . . . . . . . . . . . . . . . . . . . . . . . 1028
64.11.6
Tmatrix4_extended.get_column . . . . . . . . . . . . . . . . . . . . . . . 1028
64.11.7
Tmatrix4_extended.get_row . . . . . . . . . . . . . . . . . . . . . . . . 1028
64.11.8
Tmatrix4_extended.set_column . . . . . . . . . . . . . . . . . . . . . . . 1028
64.11.9
Tmatrix4_extended.set_row . . . . . . . . . . . . . . . . . . . . . . . . . 1029
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1029
64.12.2
64.12.3
Tmatrix4_single.init_zero . . . . . . . . . . . . . . . . . . . . . . . . . . 1030
64.12.4
Tmatrix4_single.init_identity . . . . . . . . . . . . . . . . . . . . . . . . 1030
64.12.5
Tmatrix4_single.init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1030
64.12.6
Tmatrix4_single.get_column . . . . . . . . . . . . . . . . . . . . . . . . 1030
64.12.7
Tmatrix4_single.get_row . . . . . . . . . . . . . . . . . . . . . . . . . . 1031
64.12.8
Tmatrix4_single.set_column . . . . . . . . . . . . . . . . . . . . . . . . 1031
64.12.9
Tmatrix4_single.set_row . . . . . . . . . . . . . . . . . . . . . . . . . . 1031
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1032
64.13.2
64.13.3
Tvector2_double.init_zero . . . . . . . . . . . . . . . . . . . . . . . . . 1032
64.13.4
Tvector2_double.init_one . . . . . . . . . . . . . . . . . . . . . . . . . . 1032
64.13.5
Tvector2_double.init . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1032
64.13.6
Tvector2_double.length . . . . . . . . . . . . . . . . . . . . . . . . . . . 1033
64.13.7
Tvector2_double.squared_length . . . . . . . . . . . . . . . . . . . . . . 1033
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1033
64.14.2
64.14.3
Tvector2_extended.init_zero . . . . . . . . . . . . . . . . . . . . . . . . 1033
65
CONTENTS
64.14.4
Tvector2_extended.init_one . . . . . . . . . . . . . . . . . . . . . . . . . 1033
64.14.5
Tvector2_extended.init . . . . . . . . . . . . . . . . . . . . . . . . . . . 1034
64.14.6
Tvector2_extended.length . . . . . . . . . . . . . . . . . . . . . . . . . . 1034
64.14.7
Tvector2_extended.squared_length . . . . . . . . . . . . . . . . . . . . . 1034
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1034
64.15.2
64.15.3
Tvector2_single.init_zero . . . . . . . . . . . . . . . . . . . . . . . . . . 1034
64.15.4
Tvector2_single.init_one . . . . . . . . . . . . . . . . . . . . . . . . . . 1035
64.15.5
Tvector2_single.init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1035
64.15.6
Tvector2_single.length . . . . . . . . . . . . . . . . . . . . . . . . . . . 1035
64.15.7
Tvector2_single.squared_length . . . . . . . . . . . . . . . . . . . . . . 1035
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1035
64.16.2
64.16.3
Tvector3_double.init_zero . . . . . . . . . . . . . . . . . . . . . . . . . 1036
64.16.4
Tvector3_double.init_one . . . . . . . . . . . . . . . . . . . . . . . . . . 1036
64.16.5
Tvector3_double.init . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1036
64.16.6
Tvector3_double.length . . . . . . . . . . . . . . . . . . . . . . . . . . . 1036
64.16.7
Tvector3_double.squared_length . . . . . . . . . . . . . . . . . . . . . . 1036
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1036
64.17.2
64.17.3
Tvector3_extended.init_zero . . . . . . . . . . . . . . . . . . . . . . . . 1037
64.17.4
Tvector3_extended.init_one . . . . . . . . . . . . . . . . . . . . . . . . . 1037
64.17.5
Tvector3_extended.init . . . . . . . . . . . . . . . . . . . . . . . . . . . 1037
64.17.6
Tvector3_extended.length . . . . . . . . . . . . . . . . . . . . . . . . . . 1037
64.17.7
Tvector3_extended.squared_length . . . . . . . . . . . . . . . . . . . . . 1037
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1038
64.18.2
64.18.3
Tvector3_single.init_zero . . . . . . . . . . . . . . . . . . . . . . . . . . 1038
64.18.4
Tvector3_single.init_one . . . . . . . . . . . . . . . . . . . . . . . . . . 1038
64.18.5
Tvector3_single.init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1038
64.18.6
Tvector3_single.length . . . . . . . . . . . . . . . . . . . . . . . . . . . 1038
64.18.7
Tvector3_single.squared_length . . . . . . . . . . . . . . . . . . . . . . 1039
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1039
64.19.2
64.19.3
Tvector4_double.init_zero . . . . . . . . . . . . . . . . . . . . . . . . . 1039
66
CONTENTS
64.19.4
Tvector4_double.init_one . . . . . . . . . . . . . . . . . . . . . . . . . . 1039
64.19.5
Tvector4_double.init . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1039
64.19.6
Tvector4_double.length . . . . . . . . . . . . . . . . . . . . . . . . . . . 1040
64.19.7
Tvector4_double.squared_length . . . . . . . . . . . . . . . . . . . . . . 1040
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1040
64.20.2
64.20.3
Tvector4_extended.init_zero . . . . . . . . . . . . . . . . . . . . . . . . 1040
64.20.4
Tvector4_extended.init_one . . . . . . . . . . . . . . . . . . . . . . . . . 1040
64.20.5
Tvector4_extended.init . . . . . . . . . . . . . . . . . . . . . . . . . . . 1041
64.20.6
Tvector4_extended.length . . . . . . . . . . . . . . . . . . . . . . . . . . 1041
64.20.7
Tvector4_extended.squared_length . . . . . . . . . . . . . . . . . . . . . 1041
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1041
64.21.2
64.21.3
Tvector4_single.init_zero . . . . . . . . . . . . . . . . . . . . . . . . . . 1041
64.21.4
Tvector4_single.init_one . . . . . . . . . . . . . . . . . . . . . . . . . . 1042
64.21.5
Tvector4_single.init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1042
64.21.6
Tvector4_single.length . . . . . . . . . . . . . . . . . . . . . . . . . . . 1042
64.21.7
Tvector4_single.squared_length . . . . . . . . . . . . . . . . . . . . . . 1042
1043
Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1043
65.2.2
Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1044
emms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1045
65.3.2
femms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1045
1046
Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1048
66.3.2
Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1049
66.3.3
Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1050
DetectMouse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1050
66.4.2
DoneMouse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1051
66.4.3
GetMouseButtons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1051
67
CONTENTS
66.4.4
GetMouseDriver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1052
66.4.5
GetMouseEvent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1052
66.4.6
GetMouseX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1053
66.4.7
GetMouseY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1053
66.4.8
HideMouse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1054
66.4.9
InitMouse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1054
66.4.10
PollMouseEvent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1055
66.4.11
PutMouseEvent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1055
66.4.12
SetMouseDriver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1055
66.4.13
SetMouseXY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1056
66.4.14
ShowMouse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1056
1057
Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1057
67.2.2
Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1059
67.2.3
Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1063
Abstract . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1063
67.3.2
CallPointerConstructor . . . . . . . . . . . . . . . . . . . . . . . . . . . 1063
67.3.3
CallPointerLocal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1064
67.3.4
CallPointerMethod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1064
67.3.5
CallPointerMethodLocal . . . . . . . . . . . . . . . . . . . . . . . . . . 1064
67.3.6
CallVoidConstructor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1065
67.3.7
CallVoidLocal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1065
67.3.8
CallVoidMethod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1065
67.3.9
CallVoidMethodLocal . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1066
67.3.10
DisposeStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1066
67.3.11
LongDiv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1066
67.3.12
LongMul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1066
67.3.13
NewStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1067
67.3.14
RegisterObjects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1067
67.3.15
RegisterType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1068
67.3.16
SetStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1069
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1070
67.4.2
67.4.3
TBufStream.Init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1070
67.4.4
TBufStream.Done . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1071
68
CONTENTS
67.4.5
TBufStream.Close . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1071
67.4.6
TBufStream.Flush . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1071
67.4.7
TBufStream.Truncate . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1072
67.4.8
TBufStream.Seek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1072
67.4.9
TBufStream.Open . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1073
67.4.10
TBufStream.Read . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1073
67.4.11
TBufStream.Write . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1073
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1074
67.5.2
67.5.3
TCollection.Init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1074
67.5.4
TCollection.Load . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1075
67.5.5
TCollection.Done . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1075
67.5.6
TCollection.At . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1076
67.5.7
TCollection.IndexOf . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1076
67.5.8
TCollection.GetItem . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1077
67.5.9
TCollection.LastThat . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1078
67.5.10
TCollection.FirstThat . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1078
67.5.11
TCollection.Pack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1079
67.5.12
TCollection.FreeAll . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1080
67.5.13
TCollection.DeleteAll . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1081
67.5.14
TCollection.Free . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1082
67.5.15
TCollection.Insert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1082
67.5.16
TCollection.Delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1083
67.5.17
TCollection.AtFree . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1083
67.5.18
TCollection.FreeItem . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1084
67.5.19
TCollection.AtDelete . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1084
67.5.20
TCollection.ForEach . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1085
67.5.21
TCollection.SetLimit . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1086
67.5.22
TCollection.Error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1086
67.5.23
TCollection.AtPut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1087
67.5.24
TCollection.AtInsert . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1087
67.5.25
TCollection.Store . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1088
67.5.26
TCollection.PutItem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1088
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1088
67.6.2
67.6.3
TDosStream.Init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1089
67.6.4
TDosStream.Done . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1089
67.6.5
TDosStream.Close . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1090
69
CONTENTS
67.6.6
TDosStream.Truncate . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1090
67.6.7
TDosStream.Seek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1091
67.6.8
TDosStream.Open . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1092
67.6.9
TDosStream.Read . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1092
67.6.10
TDosStream.Write . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1093
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1093
67.7.2
67.7.3
TMemoryStream.Init . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1093
67.7.4
TMemoryStream.Done . . . . . . . . . . . . . . . . . . . . . . . . . . . 1094
67.7.5
TMemoryStream.Truncate . . . . . . . . . . . . . . . . . . . . . . . . . 1094
67.7.6
TMemoryStream.Read . . . . . . . . . . . . . . . . . . . . . . . . . . . 1095
67.7.7
TMemoryStream.Write . . . . . . . . . . . . . . . . . . . . . . . . . . . 1095
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1095
67.8.2
67.8.3
TObject.Init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1095
67.8.4
TObject.Free . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1096
67.8.5
TObject.Is_Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1096
67.8.6
TObject.Done . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1097
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1097
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1097
67.10.2
67.10.3
TRect.Empty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1098
67.10.4
TRect.Equals . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1099
67.10.5
TRect.Contains . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1099
67.10.6
TRect.Copy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1099
67.10.7
TRect.Union . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1100
67.10.8
TRect.Intersect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1100
67.10.9
TRect.Move . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1101
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1103
67.11.2
67.11.3
TResourceCollection.KeyOf . . . . . . . . . . . . . . . . . . . . . . . . 1103
67.11.4
TResourceCollection.GetItem . . . . . . . . . . . . . . . . . . . . . . . . 1104
67.11.5
TResourceCollection.FreeItem . . . . . . . . . . . . . . . . . . . . . . . 1104
70
CONTENTS
67.11.6
TResourceCollection.PutItem . . . . . . . . . . . . . . . . . . . . . . . . 1104
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1104
67.12.2
67.12.3
TResourceFile.Init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1105
67.12.4
TResourceFile.Done . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1105
67.12.5
TResourceFile.Count . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1105
67.12.6
TResourceFile.KeyAt . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1106
67.12.7
TResourceFile.Get . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1106
67.12.8
TResourceFile.SwitchTo . . . . . . . . . . . . . . . . . . . . . . . . . . 1106
67.12.9
TResourceFile.Flush . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1106
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1107
67.13.2
67.13.3
TSortedCollection.Init . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1108
67.13.4
TSortedCollection.Load . . . . . . . . . . . . . . . . . . . . . . . . . . . 1108
67.13.5
TSortedCollection.KeyOf . . . . . . . . . . . . . . . . . . . . . . . . . . 1108
67.13.6
TSortedCollection.IndexOf . . . . . . . . . . . . . . . . . . . . . . . . . 1109
67.13.7
TSortedCollection.Compare . . . . . . . . . . . . . . . . . . . . . . . . 1109
67.13.8
TSortedCollection.Search . . . . . . . . . . . . . . . . . . . . . . . . . . 1110
67.13.9
TSortedCollection.Insert . . . . . . . . . . . . . . . . . . . . . . . . . . 1111
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1113
67.14.2
67.14.3
TStrCollection.Compare . . . . . . . . . . . . . . . . . . . . . . . . . . 1113
67.14.4
TStrCollection.GetItem . . . . . . . . . . . . . . . . . . . . . . . . . . . 1114
67.14.5
TStrCollection.FreeItem . . . . . . . . . . . . . . . . . . . . . . . . . . 1114
67.14.6
TStrCollection.PutItem . . . . . . . . . . . . . . . . . . . . . . . . . . . 1114
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1115
67.15.2
67.15.3
TStream.Init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1115
67.15.4
TStream.Get . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1115
67.15.5
TStream.StrRead . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1116
67.15.6
TStream.GetPos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1117
67.15.7
TStream.GetSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1117
67.15.8
TStream.ReadStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1118
71
CONTENTS
67.15.9
TStream.Open . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1119
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1123
67.16.2
67.16.3
TStringCollection.GetItem . . . . . . . . . . . . . . . . . . . . . . . . . 1124
67.16.4
TStringCollection.Compare . . . . . . . . . . . . . . . . . . . . . . . . . 1124
67.16.5
TStringCollection.FreeItem . . . . . . . . . . . . . . . . . . . . . . . . . 1125
67.16.6
TStringCollection.PutItem . . . . . . . . . . . . . . . . . . . . . . . . . 1125
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1125
67.17.2
67.17.3
TStringList.Load . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1126
67.17.4
TStringList.Done . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1126
67.17.5
TStringList.Get . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1126
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1127
67.18.2
67.18.3
TStrListMaker.Init . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1127
67.18.4
TStrListMaker.Done . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1127
67.18.5
TStrListMaker.Put . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1127
67.18.6
TStrListMaker.Store . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1128
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1128
67.19.2
67.19.3
TUnSortedStrCollection.Insert . . . . . . . . . . . . . . . . . . . . . . . 1128
1130
72
CONTENTS
Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1130
68.2.2
Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1130
1132
Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1132
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1133
69.3.2
69.3.3
tport.pp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1133
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1134
69.4.2
69.4.3
tportl.pp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1134
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1134
69.5.2
69.5.3
tportw.pp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1134
1135
Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1135
AssignLst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1135
70.3.2
InitPrinter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1136
70.3.3
IsLstAvailable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1136
1137
1138
Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1138
72.3.2
Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1159
Accept . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1163
73
CONTENTS
72.4.2
Bind . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1164
72.4.3
CloseSocket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1165
72.4.4
Connect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1165
72.4.5
fpaccept . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1167
72.4.6
fpbind . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1168
72.4.7
fpconnect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1169
72.4.8
fpgetpeername . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1170
72.4.9
fpgetsockname . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1171
72.4.10
fpgetsockopt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1171
72.4.11
fplisten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1172
72.4.12
fprecv . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1172
72.4.13
fprecvfrom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1173
72.4.14
fpsend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1173
72.4.15
fpsendto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1174
72.4.16
fpsetsockopt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1174
72.4.17
fpshutdown . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1174
72.4.18
fpsocket . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1175
72.4.19
fpsocketpair . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1175
72.4.20
HostAddrToStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1176
72.4.21
HostAddrToStr6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1176
72.4.22
HostToNet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1176
72.4.23
htonl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1176
72.4.24
htons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1177
72.4.25
NetAddrToStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1177
72.4.26
NetAddrToStr6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1177
72.4.27
NetToHost . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1177
72.4.28
NToHl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1178
72.4.29
NToHs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1178
72.4.30
ShortHostToNet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1178
72.4.31
ShortNetToHost . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1178
72.4.32
Sock2File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1179
72.4.33
Sock2Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1179
72.4.34
socketerror . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1179
72.4.35
Str2UnixSockAddr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1179
72.4.36
StrToHostAddr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1180
72.4.37
StrToHostAddr6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1180
72.4.38
StrToNetAddr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1180
72.4.39
StrToNetAddr6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1180
1181
74
CONTENTS
stralloc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1181
73.2.2
strcat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1181
73.2.3
strcomp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1182
73.2.4
strcopy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1182
73.2.5
strdispose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1183
73.2.6
strecopy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1183
73.2.7
strend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1184
73.2.8
stricomp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1185
73.2.9
stripos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1185
73.2.10
striscan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1186
73.2.11
strlcat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1186
73.2.12
strlcomp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1187
73.2.13
strlcopy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1187
73.2.14
strlen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1188
73.2.15
strlicomp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1188
73.2.16
strlower . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1189
73.2.17
strmove . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1189
73.2.18
strnew . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1190
73.2.19
strpas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1191
73.2.20
strpcopy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1191
73.2.21
strpos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1192
73.2.22
strriscan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1192
73.2.23
strrscan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1193
73.2.24
strscan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1193
73.2.25
strupper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1193
1194
74.2.2
Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1194
74.2.3
Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1195
AddChar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1196
74.3.2
AddCharR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1196
74.3.3
AnsiContainsStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1197
74.3.4
AnsiContainsText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1197
74.3.5
AnsiEndsStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1197
75
CONTENTS
74.3.6
AnsiEndsText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1197
74.3.7
AnsiIndexStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1198
74.3.8
AnsiIndexText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1198
74.3.9
AnsiLeftStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1198
74.3.10
AnsiMatchStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1199
74.3.11
AnsiMatchText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1199
74.3.12
AnsiMidStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1199
74.3.13
AnsiProperCase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1199
74.3.14
AnsiReplaceStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1200
74.3.15
AnsiReplaceText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1200
74.3.16
AnsiResemblesText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1200
74.3.17
AnsiReverseString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1200
74.3.18
AnsiRightStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1201
74.3.19
AnsiStartsStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1201
74.3.20
AnsiStartsText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1201
74.3.21
BinToHex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1201
74.3.22
Copy2Space . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1202
74.3.23
Copy2SpaceDel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1202
74.3.24
Copy2Symb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1202
74.3.25
Copy2SymbDel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1203
74.3.26
Dec2Numb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1203
74.3.27
DecodeSoundexInt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1203
74.3.28
DecodeSoundexWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1204
74.3.29
DelChars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1204
74.3.30
DelSpace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1204
74.3.31
DelSpace1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1204
74.3.32
DupeString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1205
74.3.33
ExtractDelimited . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1205
74.3.34
ExtractSubstr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1205
74.3.35
ExtractWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1206
74.3.36
ExtractWordPos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1206
74.3.37
FindPart . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1206
74.3.38
GetCmdLineArg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1207
74.3.39
Hex2Dec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1207
74.3.40
HexToBin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1208
74.3.41
IfThen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1208
74.3.42
IntToBin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1208
74.3.43
IntToRoman . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1209
74.3.44
IsEmptyStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1209
74.3.45
IsWild . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1209
76
CONTENTS
74.3.46
IsWordPresent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1210
74.3.47
LeftBStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1210
74.3.48
LeftStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1210
74.3.49
MidBStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1211
74.3.50
MidStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1211
74.3.51
NPos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1211
74.3.52
Numb2Dec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1212
74.3.53
Numb2USA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1212
74.3.54
PadCenter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1212
74.3.55
PadLeft . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1212
74.3.56
PadRight . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1213
74.3.57
PosEx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1213
74.3.58
PosSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1213
74.3.59
PosSetEx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1213
74.3.60
RandomFrom . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1214
74.3.61
Removeleadingchars . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1214
74.3.62
RemovePadChars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1214
74.3.63
RemoveTrailingChars . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1215
74.3.64
ReplaceStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1215
74.3.65
ReplaceText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1215
74.3.66
ReverseString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1215
74.3.67
RightBStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1216
74.3.68
RightStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1216
74.3.69
RomanToInt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1216
74.3.70
RomanToIntDef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1217
74.3.71
RPos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1217
74.3.72
RPosex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1217
74.3.73
SearchBuf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1217
74.3.74
Soundex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1218
74.3.75
SoundexCompare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1218
74.3.76
SoundexInt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1219
74.3.77
SoundexProc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1219
74.3.78
SoundexSimilar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1219
74.3.79
SoundexWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1220
74.3.80
StringsReplace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1220
74.3.81
StuffString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1220
74.3.82
Tab2Space . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1221
74.3.83
TrimLeftSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1221
74.3.84
TrimRightSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1221
74.3.85
TrimSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1221
77
CONTENTS
74.3.86
TryRomanToInt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1222
74.3.87
WordCount . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1222
74.3.88
WordPosition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1222
74.3.89
XorDecode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1223
74.3.90
XorEncode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1223
74.3.91
XorString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1223
1224
Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1229
75.10.2
Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1254
75.10.3
Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1288
abs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1292
75.11.2
AbstractError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1292
75.11.3
AcquireExceptionObject . . . . . . . . . . . . . . . . . . . . . . . . . . 1292
75.11.4
add(variant,variant):variant . . . . . . . . . . . . . . . . . . . . . . . . . 1293
75.11.5
AddExitProc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1293
75.11.6
Addr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1293
75.11.7
Align . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1294
75.11.8
AllocMem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1294
75.11.9
AnsiToUtf8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1294
78
CONTENTS
79
CONTENTS
80
CONTENTS
81
CONTENTS
75.11.139BsrDWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1322
75.11.140BsrQWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1322
75.11.141BsrWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1322
75.11.142CaptureBacktrace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1322
75.11.143chdir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1323
75.11.144chr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1323
75.11.145Close . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1324
75.11.146CloseThread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1324
75.11.147CompareByte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1324
75.11.148CompareChar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1325
75.11.149CompareChar0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1327
75.11.150CompareDWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1327
75.11.151CompareWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1328
75.11.152Concat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1329
75.11.153Continue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1330
75.11.154Copy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1331
75.11.155CopyArray . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1331
75.11.156cos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1332
75.11.157Cseg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1332
75.11.158Dec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1333
75.11.159Default . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1333
75.11.160DefaultAnsi2UnicodeMove . . . . . . . . . . . . . . . . . . . . . . . . . 1334
75.11.161DefaultAnsi2WideMove . . . . . . . . . . . . . . . . . . . . . . . . . . 1334
75.11.162DefaultUnicode2AnsiMove . . . . . . . . . . . . . . . . . . . . . . . . . 1334
75.11.163Delete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1334
75.11.164Dispose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1335
75.11.165divide(variant,variant):variant . . . . . . . . . . . . . . . . . . . . . . . . 1336
75.11.166DoneCriticalsection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1336
75.11.167DoneThread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1337
75.11.168Dseg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1337
75.11.169DumpExceptionBackTrace . . . . . . . . . . . . . . . . . . . . . . . . . 1337
75.11.170Dump_Stack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1338
75.11.171DynArrayBounds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1338
75.11.172DynArrayClear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1338
75.11.173DynArrayDim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1338
75.11.174DynArrayIndex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1339
75.11.175DynArraySetLength . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1339
75.11.176DynArraySize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1339
75.11.177EmptyMethod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1339
75.11.178EndThread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1340
82
CONTENTS
75.11.179EnterCriticalsection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1340
75.11.180EnumResourceLanguages . . . . . . . . . . . . . . . . . . . . . . . . . . 1340
75.11.181EnumResourceNames . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1341
75.11.182EnumResourceTypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1341
75.11.183EOF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1341
75.11.184EOLn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1342
75.11.185equal(variant,variant):Boolean . . . . . . . . . . . . . . . . . . . . . . . 1343
75.11.186Erase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1343
75.11.187Error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1344
75.11.188Exclude . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1344
75.11.189Exit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1345
75.11.190exp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1346
75.11.191Fail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1347
75.11.192FilePos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1347
75.11.193FileSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1348
75.11.194FillByte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1349
75.11.195FillChar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1350
75.11.196FillDWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1350
75.11.197FillQWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1351
75.11.198FillWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1351
75.11.199Finalize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1352
75.11.200FinalizeArray . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1352
75.11.201FindResource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1352
75.11.202FindResourceEx . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1353
75.11.203float_raise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1353
75.11.204Flush . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1353
75.11.205FlushThread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1354
75.11.206FMADouble . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1354
75.11.207FMAExtended . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1354
75.11.208FMASingle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1355
75.11.209fpc_dynarray_rangecheck . . . . . . . . . . . . . . . . . . . . . . . . . . 1355
75.11.210fpc_SarInt64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1355
75.11.211FPower10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1355
75.11.212frac . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1355
75.11.213Freemem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1356
75.11.214Freememory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1356
75.11.215FreeResource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1357
75.11.216GetCPUCount . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1357
75.11.217GetCurrentThreadId . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1357
75.11.218getdir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1357
83
CONTENTS
75.11.219GetFPCHeapStatus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1358
75.11.220GetHeapStatus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1358
75.11.221GetMem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1358
75.11.222GetMemory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1359
75.11.223GetMemoryManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1359
75.11.224GetProcessID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1359
75.11.225GetResourceManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1359
75.11.226GetTextCodePage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1360
75.11.227GetThreadID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1360
75.11.228GetThreadManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1360
75.11.229GetUnicodeStringManager . . . . . . . . . . . . . . . . . . . . . . . . . 1360
75.11.230GetVariantManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1361
75.11.231GetWideStringManager . . . . . . . . . . . . . . . . . . . . . . . . . . . 1361
75.11.232get_caller_addr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1361
75.11.233get_caller_frame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1361
75.11.234get_caller_stackinfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1362
75.11.235get_cmdline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1362
75.11.236get_frame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1362
75.11.237Get_pc_addr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1362
75.11.238greaterthan(variant,variant):Boolean . . . . . . . . . . . . . . . . . . . . 1363
75.11.239greaterthanorequal(variant,variant):Boolean . . . . . . . . . . . . . . . . 1363
75.11.240halt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1363
75.11.241hexStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1364
75.11.242hi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1364
75.11.243High . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1365
75.11.244HINSTANCE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1366
75.11.245Inc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1366
75.11.246Include . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1367
75.11.247IndexByte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1367
75.11.248IndexChar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1368
75.11.249IndexChar0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1369
75.11.250IndexDWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1369
75.11.251IndexQWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1370
75.11.252Indexword . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1370
75.11.253InitCriticalSection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1371
75.11.254Initialize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1371
75.11.255InitializeArray . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1373
75.11.256InitThread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1374
75.11.257InitThreadVars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1374
75.11.258Insert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1374
84
CONTENTS
75.11.259int . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1375
75.11.260intdivide(variant,variant):variant . . . . . . . . . . . . . . . . . . . . . . 1375
75.11.261InterlockedCompareExchange . . . . . . . . . . . . . . . . . . . . . . . 1375
75.11.262InterLockedDecrement . . . . . . . . . . . . . . . . . . . . . . . . . . . 1376
75.11.263InterLockedExchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1376
75.11.264InterLockedExchangeAdd . . . . . . . . . . . . . . . . . . . . . . . . . . 1377
75.11.265InterLockedIncrement . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1377
75.11.266IOResult . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1377
75.11.267IsDynArrayRectangular . . . . . . . . . . . . . . . . . . . . . . . . . . . 1379
75.11.268IsMemoryManagerSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1379
75.11.269Is_IntResource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1379
75.11.270KillThread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1379
75.11.271LeaveCriticalsection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1380
75.11.272leftshift(variant,variant):variant . . . . . . . . . . . . . . . . . . . . . . . 1380
75.11.273Length . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1380
75.11.274lessthan(variant,variant):Boolean . . . . . . . . . . . . . . . . . . . . . . 1381
75.11.275lessthanorequal(variant,variant):Boolean . . . . . . . . . . . . . . . . . . 1381
75.11.276LEtoN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1382
75.11.277ln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1382
75.11.278lo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1382
75.11.279LoadResource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1383
75.11.280LockResource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1383
75.11.281logicaland(variant,variant):variant . . . . . . . . . . . . . . . . . . . . . 1384
75.11.282logicalnot(variant):variant . . . . . . . . . . . . . . . . . . . . . . . . . . 1384
75.11.283logicalor(variant,variant):variant . . . . . . . . . . . . . . . . . . . . . . 1384
75.11.284logicalxor(variant,variant):variant . . . . . . . . . . . . . . . . . . . . . . 1385
75.11.285longjmp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1385
75.11.286Low . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1385
75.11.287lowerCase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1386
75.11.288MakeLangID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1386
75.11.289MemSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1386
75.11.290mkdir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1387
75.11.291modulus(variant,variant):variant . . . . . . . . . . . . . . . . . . . . . . 1387
75.11.292Move . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1387
75.11.293MoveChar0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1388
75.11.294multiply(variant,variant):variant . . . . . . . . . . . . . . . . . . . . . . 1388
75.11.295negative(variant):variant . . . . . . . . . . . . . . . . . . . . . . . . . . . 1389
75.11.296New . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1389
75.11.297NtoBE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1389
75.11.298NtoLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1390
85
CONTENTS
75.11.299Null . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1390
75.11.300OctStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1390
75.11.301odd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1391
75.11.302Ofs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1391
75.11.303Ord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1392
75.11.304Pack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1392
75.11.305Paramcount . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1393
75.11.306ParamStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1393
75.11.307pi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1394
75.11.308PopCnt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1394
75.11.309Pos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1394
75.11.310Power . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1395
75.11.311power(variant,variant):variant . . . . . . . . . . . . . . . . . . . . . . . . 1396
75.11.312Pred . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1396
75.11.313prefetch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1397
75.11.314ptr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1397
75.11.315RaiseList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1397
75.11.316Random . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1398
75.11.317Randomize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1398
75.11.318Read . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1399
75.11.319ReadBarrier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1399
75.11.320ReadDependencyBarrier . . . . . . . . . . . . . . . . . . . . . . . . . . 1400
75.11.321ReadLn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1400
75.11.322ReadStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1400
75.11.323ReadWriteBarrier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1401
75.11.324Real2Double . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1401
75.11.325ReAllocMem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1402
75.11.326ReAllocMemory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1402
75.11.327ReleaseExceptionObject . . . . . . . . . . . . . . . . . . . . . . . . . . 1402
75.11.328Rename . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1403
75.11.329Reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1403
75.11.330ResumeThread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1404
75.11.331Rewrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1404
75.11.332rightshift(variant,variant):variant . . . . . . . . . . . . . . . . . . . . . . 1405
75.11.333rmdir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1406
75.11.334RolByte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1406
75.11.335RolDWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1407
75.11.336RolQWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1407
75.11.337RolWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1407
75.11.338RorByte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1407
86
CONTENTS
75.11.339RorDWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1408
75.11.340RorQWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1408
75.11.341RorWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1408
75.11.342round . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1409
75.11.343RTLEventCreate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1409
75.11.344RTLeventdestroy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1409
75.11.345RTLeventResetEvent . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1410
75.11.346RTLeventSetEvent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1410
75.11.347RTLeventWaitFor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1410
75.11.348RunError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1410
75.11.349SarInt64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1411
75.11.350SarLongint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1411
75.11.351SarShortint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1411
75.11.352SarSmallint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1412
75.11.353Seek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1412
75.11.354SeekEOF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1413
75.11.355SeekEOLn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1413
75.11.356Seg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1414
75.11.357SemaphoreDestroy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1414
75.11.358SemaphoreInit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1415
75.11.359SemaphorePost . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1415
75.11.360SemaphoreWait . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1415
75.11.361SetCodePage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1416
75.11.362Setjmp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1416
75.11.363SetLength . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1417
75.11.364SetMemoryManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1417
75.11.365SetMultiByteConversionCodePage . . . . . . . . . . . . . . . . . . . . . 1417
75.11.366SetMultiByteFileSystemCodePage . . . . . . . . . . . . . . . . . . . . . 1418
75.11.367SetMultiByteRTLFileSystemCodePage . . . . . . . . . . . . . . . . . . . 1418
75.11.368SetResourceManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1419
75.11.369SetString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1419
75.11.370SetTextBuf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1419
75.11.371SetTextCodePage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1420
75.11.372SetTextLineEnding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1421
75.11.373SetThreadManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1421
75.11.374SetUnicodeStringManager . . . . . . . . . . . . . . . . . . . . . . . . . 1421
75.11.375SetVariantManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1422
75.11.376SetWideStringManager . . . . . . . . . . . . . . . . . . . . . . . . . . . 1422
75.11.377ShortCompareText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1422
75.11.378sin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1423
87
CONTENTS
75.11.379SizeOf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1423
75.11.380SizeofResource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1424
75.11.381Slice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1424
75.11.382Space . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1424
75.11.383Sptr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1425
75.11.384sqr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1425
75.11.385sqrt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1426
75.11.386Sseg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1426
75.11.387StackTop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1426
75.11.388Str . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1427
75.11.389StringCodePage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1427
75.11.390StringElementSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1428
75.11.391StringOfChar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1428
75.11.392StringRefCount . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1429
75.11.393StringToPPChar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1429
75.11.394StringToUnicodeChar . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1429
75.11.395StringToWideChar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1430
75.11.396strlen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1430
75.11.397strpas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1430
75.11.398subtract(variant,variant):variant . . . . . . . . . . . . . . . . . . . . . . . 1430
75.11.399Succ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1431
75.11.400SuspendThread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1431
75.11.401Swap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1431
75.11.402SwapEndian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1432
75.11.403SysAllocMem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1432
75.11.404SysAssert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1432
75.11.405SysBackTraceStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1433
75.11.406SysFlushStdIO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1433
75.11.407SysFreemem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1433
75.11.408SysFreememSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1433
75.11.409SysGetFPCHeapStatus . . . . . . . . . . . . . . . . . . . . . . . . . . . 1434
75.11.410SysGetHeapStatus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1434
75.11.411SysGetmem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1434
75.11.412SysInitExceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1434
75.11.413SysInitFPU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1435
75.11.414SysInitStdIO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1435
75.11.415SysMemSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1435
75.11.416SysReAllocMem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1435
75.11.417SysResetFPU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1435
75.11.418SysSetCtrlBreakHandler . . . . . . . . . . . . . . . . . . . . . . . . . . 1436
88
CONTENTS
75.11.419SysTryResizeMem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1436
75.11.420ThreadGetPriority . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1436
75.11.421ThreadSetPriority . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1436
75.11.422ThreadSwitch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1437
75.11.423ToSingleByteFileSystemEncodedFileName . . . . . . . . . . . . . . . . 1437
75.11.424trunc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1437
75.11.425Truncate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1438
75.11.426TryEnterCriticalsection . . . . . . . . . . . . . . . . . . . . . . . . . . . 1438
75.11.427TypeInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1439
75.11.428TypeOf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1439
75.11.429UCS4StringToUnicodeString . . . . . . . . . . . . . . . . . . . . . . . . 1439
75.11.430UCS4StringToWideString . . . . . . . . . . . . . . . . . . . . . . . . . . 1439
75.11.431Unassigned . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1439
75.11.432UnicodeCharLenToString . . . . . . . . . . . . . . . . . . . . . . . . . . 1440
75.11.433UnicodeCharLenToStrVar . . . . . . . . . . . . . . . . . . . . . . . . . . 1440
75.11.434UnicodeCharToString . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1440
75.11.435UnicodeCharToStrVar . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1441
75.11.436UnicodeStringToUCS4String . . . . . . . . . . . . . . . . . . . . . . . . 1441
75.11.437UnicodeToUtf8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1441
75.11.438UniqueString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1441
75.11.439UnlockResource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1442
75.11.440UnPack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1442
75.11.441upCase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1442
75.11.442Utf8CodePointLen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1443
75.11.443UTF8Decode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1443
75.11.444UTF8Encode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1444
75.11.445Utf8ToAnsi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1444
75.11.446Utf8ToUnicode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1444
75.11.447Val . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1445
75.11.448VarArrayGet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1445
75.11.449VarArrayPut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1446
75.11.450VarArrayRedim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1446
75.11.451VarCast . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1446
75.11.452WaitForThreadTerminate . . . . . . . . . . . . . . . . . . . . . . . . . . 1447
75.11.453WideCharLenToString . . . . . . . . . . . . . . . . . . . . . . . . . . . 1447
75.11.454WideCharLenToStrVar . . . . . . . . . . . . . . . . . . . . . . . . . . . 1447
75.11.455WideCharToString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1448
75.11.456WideCharToStrVar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1448
75.11.457WideStringToUCS4String . . . . . . . . . . . . . . . . . . . . . . . . . . 1448
75.11.458Write . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1448
89
CONTENTS
75.11.459WriteBarrier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1449
75.11.460WriteLn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1449
75.11.461WriteStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1450
75.12 TDoubleRec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1451
75.12.1
75.12.2
75.12.3
TDoubleRec.Mantissa . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1452
75.12.4
TDoubleRec.Fraction . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1452
75.12.5
TDoubleRec.Exponent . . . . . . . . . . . . . . . . . . . . . . . . . . . 1452
75.12.6
TDoubleRec.SpecialType . . . . . . . . . . . . . . . . . . . . . . . . . . 1452
75.12.7
TDoubleRec.Sign . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1452
75.12.8
TDoubleRec.Exp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1453
75.12.9
TDoubleRec.Frac . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1453
75.13.2
75.13.3
TExtended80Rec.Mantissa . . . . . . . . . . . . . . . . . . . . . . . . . 1454
75.13.4
TExtended80Rec.Fraction . . . . . . . . . . . . . . . . . . . . . . . . . . 1454
75.13.5
TExtended80Rec.Exponent . . . . . . . . . . . . . . . . . . . . . . . . . 1454
75.13.6
TExtended80Rec.SpecialType . . . . . . . . . . . . . . . . . . . . . . . 1455
75.13.7
TExtended80Rec.Sign . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1455
75.13.8
TExtended80Rec.Exp . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1455
75.14.2
75.14.3
TSingleRec.Mantissa . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1456
75.14.4
TSingleRec.Fraction . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1456
75.14.5
TSingleRec.Exponent . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1457
75.14.6
TSingleRec.SpecialType . . . . . . . . . . . . . . . . . . . . . . . . . . 1457
75.14.7
TSingleRec.Sign . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1457
75.14.8
TSingleRec.Exp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1457
75.14.9
TSingleRec.Frac . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1457
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1458
75.15.2
75.15.3
IDispatch.GetTypeInfoCount . . . . . . . . . . . . . . . . . . . . . . . . 1458
75.15.4
IDispatch.GetTypeInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . 1458
75.15.5
IDispatch.GetIDsOfNames . . . . . . . . . . . . . . . . . . . . . . . . . 1458
75.15.6
IDispatch.Invoke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1458
90
CONTENTS
75.16.1
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1459
75.16.2
75.16.3
IEnumerable.GetEnumerator . . . . . . . . . . . . . . . . . . . . . . . . 1459
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1459
75.17.2
75.17.3
75.17.4
IEnumerator.GetCurrent . . . . . . . . . . . . . . . . . . . . . . . . . . . 1460
75.17.5
IEnumerator.MoveNext . . . . . . . . . . . . . . . . . . . . . . . . . . . 1460
75.17.6
IEnumerator.Reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1461
75.17.7
IEnumerator.Current . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1461
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1461
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1461
75.19.2
75.19.3
IUnknown.QueryInterface . . . . . . . . . . . . . . . . . . . . . . . . . . 1462
75.19.4
IUnknown._AddRef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1462
75.19.5
IUnknown._Release . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1462
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1462
75.20.2
75.20.3
75.20.4
TAggregatedObject.Create . . . . . . . . . . . . . . . . . . . . . . . . . 1463
75.20.5
TAggregatedObject.Controller . . . . . . . . . . . . . . . . . . . . . . . 1463
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1463
75.21.2
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1463
75.22.2
75.22.3
75.22.4
75.22.5
TInterfacedObject.AfterConstruction . . . . . . . . . . . . . . . . . . . . 1464
75.22.6
TInterfacedObject.BeforeDestruction . . . . . . . . . . . . . . . . . . . . 1464
75.22.7
TInterfacedObject.NewInstance . . . . . . . . . . . . . . . . . . . . . . . 1464
75.22.8
TInterfacedObject.RefCount . . . . . . . . . . . . . . . . . . . . . . . . 1465
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1465
75.23.2
91
CONTENTS
75.23.3
TObject.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1466
75.23.4
TObject.Destroy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1467
75.23.5
TObject.newinstance . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1467
75.23.6
TObject.FreeInstance . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1467
75.23.7
TObject.SafeCallException . . . . . . . . . . . . . . . . . . . . . . . . . 1467
75.23.8
TObject.DefaultHandler . . . . . . . . . . . . . . . . . . . . . . . . . . . 1468
75.23.9
TObject.Free . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1468
1476
92
CONTENTS
Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1484
76.13.2
Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1491
76.13.3
Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1500
AbandonSignalHandler . . . . . . . . . . . . . . . . . . . . . . . . . . . 1504
76.14.2
Abort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1505
76.14.3
AddDisk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1505
76.14.4
AddTerminateProc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1505
76.14.5
AdjustLineBreaks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1506
76.14.6
AnsiCompareFileName . . . . . . . . . . . . . . . . . . . . . . . . . . . 1506
76.14.7
AnsiCompareStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1507
76.14.8
AnsiCompareText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1508
76.14.9
AnsiDequotedStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1509
93
CONTENTS
94
CONTENTS
95
CONTENTS
76.14.107FileSeek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1556
76.14.108FileSetAttr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1557
76.14.109FileSetDate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1557
76.14.110FileTruncate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1558
76.14.111FileWrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1558
76.14.112FindClose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1558
76.14.113FindCmdLineSwitch . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1559
76.14.114FindFirst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1559
76.14.115FindNext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1560
76.14.116FloattoCurr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1561
76.14.117FloatToDateTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1561
76.14.118FloatToDecimal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1561
76.14.119FloatToStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1562
76.14.120FloatToStrF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1563
76.14.121FloatToText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1565
76.14.122FloatToTextFmt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1566
76.14.123FmtStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1566
76.14.124ForceDirectories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1567
76.14.125Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1567
76.14.126FormatBuf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1574
76.14.127FormatCurr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1574
76.14.128FormatDateTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1575
76.14.129FormatFloat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1575
76.14.130FreeAndNil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1577
76.14.131GetAppConfigDir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1577
76.14.132GetAppConfigFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1578
76.14.133GetCurrentDir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1578
76.14.134GetDirs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1579
76.14.135GetEnvironmentString . . . . . . . . . . . . . . . . . . . . . . . . . . . 1580
76.14.136GetEnvironmentVariable . . . . . . . . . . . . . . . . . . . . . . . . . . 1580
76.14.137GetEnvironmentVariableCount . . . . . . . . . . . . . . . . . . . . . . . 1580
76.14.138GetFileHandle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1581
76.14.139GetLastOSError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1581
76.14.140GetLocalTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1581
76.14.141GetLocalTimeOffset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1582
76.14.142GetModuleName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1582
76.14.143GetTempDir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1582
76.14.144GetTempFileName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1583
76.14.145GetTickCount . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1583
76.14.146GetTickCount64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1583
96
CONTENTS
76.14.147GetUserDir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1584
76.14.148GuidCase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1584
76.14.149GUIDToString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1584
76.14.150HashName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1584
76.14.151HookSignal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1585
76.14.152IncAMonth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1585
76.14.153IncludeLeadingPathDelimiter . . . . . . . . . . . . . . . . . . . . . . . . 1585
76.14.154IncludeTrailingBackslash . . . . . . . . . . . . . . . . . . . . . . . . . . 1586
76.14.155IncludeTrailingPathDelimiter . . . . . . . . . . . . . . . . . . . . . . . . 1586
76.14.156IncMonth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1586
76.14.157InquireSignal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1587
76.14.158IntToHex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1587
76.14.159IntToStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1588
76.14.160IsDelimiter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1589
76.14.161IsEqualGUID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1589
76.14.162IsLeapYear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1589
76.14.163IsPathDelimiter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1590
76.14.164IsValidIdent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1590
76.14.165LastDelimiter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1591
76.14.166LeftStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1591
76.14.167LoadStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1592
76.14.168LowerCase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1592
76.14.169MSecsToTimeStamp . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1592
76.14.170NewStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1593
76.14.171Now . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1593
76.14.172OutOfMemoryError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1594
76.14.173QuotedStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1594
76.14.174RaiseLastOSError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1595
76.14.175RemoveDir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1595
76.14.176RenameFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1595
76.14.177ReplaceDate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1596
76.14.178ReplaceTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1596
76.14.179RightStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1596
76.14.180SafeLoadLibrary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1597
76.14.181SameFileName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1597
76.14.182SameText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1597
76.14.183SetCurrentDir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1598
76.14.184SetDirSeparators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1598
76.14.185ShowException . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1598
76.14.186Sleep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1599
97
CONTENTS
76.14.187SScanf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1599
76.14.188StrAlloc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1600
76.14.189StrBufSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1600
76.14.190StrByteType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1601
76.14.191strcat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1601
76.14.192StrCharLength . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1601
76.14.193strcomp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1602
76.14.194StrCopy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1602
76.14.195StrDispose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1603
76.14.196strecopy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1603
76.14.197strend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1603
76.14.198StrFmt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1604
76.14.199stricomp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1605
76.14.200StringReplace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1605
76.14.201StringToGUID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1606
76.14.202strlcat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1606
76.14.203strlcomp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1607
76.14.204StrLCopy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1607
76.14.205StrLen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1608
76.14.206StrLFmt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1608
76.14.207strlicomp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1609
76.14.208strlower . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1609
76.14.209strmove . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1610
76.14.210strnew . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1611
76.14.211StrNextChar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1611
76.14.212StrPas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1611
76.14.213StrPCopy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1612
76.14.214StrPLCopy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1612
76.14.215strpos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1612
76.14.216strrscan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1613
76.14.217strscan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1613
76.14.218StrToBool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1613
76.14.219StrToBoolDef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1614
76.14.220StrToCurr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1614
76.14.221StrToCurrDef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1614
76.14.222StrToDate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1615
76.14.223StrToDateDef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1615
76.14.224StrToDateTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1616
76.14.225StrToDateTimeDef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1617
76.14.226StrToFloat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1617
98
CONTENTS
76.14.227StrToFloatDef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1618
76.14.228StrToInt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1618
76.14.229StrToInt64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1619
76.14.230StrToInt64Def . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1620
76.14.231StrToIntDef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1620
76.14.232StrToQWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1621
76.14.233StrToQWordDef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1621
76.14.234StrToTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1621
76.14.235StrToTimeDef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1622
76.14.236strupper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1622
76.14.237Supports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1622
76.14.238SysErrorMessage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1623
76.14.239SystemTimeToDateTime . . . . . . . . . . . . . . . . . . . . . . . . . . 1623
76.14.240TextToFloat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1624
76.14.241Time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1625
76.14.242TimeStampToDateTime . . . . . . . . . . . . . . . . . . . . . . . . . . . 1626
76.14.243TimeStampToMSecs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1626
76.14.244TimeToStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1627
76.14.245Trim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1627
76.14.246TrimLeft . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1628
76.14.247TrimRight . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1628
76.14.248TryEncodeDate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1629
76.14.249TryEncodeTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1629
76.14.250TryFloatToCurr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1630
76.14.251TryStringToGUID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1630
76.14.252TryStrToBool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1630
76.14.253TryStrToCurr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1631
76.14.254TryStrToDate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1631
76.14.255TryStrToDateTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1631
76.14.256TryStrToFloat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1632
76.14.257TryStrToInt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1632
76.14.258TryStrToInt64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1633
76.14.259TryStrToQWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1633
76.14.260TryStrToTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1633
76.14.261UnhookSignal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1634
76.14.262UpperCase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1634
76.14.263VendorName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1634
76.14.264WideCompareStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1635
76.14.265WideCompareText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1635
76.14.266WideFmtStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1635
99
CONTENTS
76.14.267WideFormat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1636
76.14.268WideFormatBuf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1636
76.14.269WideLowerCase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1636
76.14.270WideSameStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1637
76.14.271WideSameText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1637
76.14.272WideUpperCase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1637
76.14.273WrapText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1637
76.15 EAbort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1638
76.15.1
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1638
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1638
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1638
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1638
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1638
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1639
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1639
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1639
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1639
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1639
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1639
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1639
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1640
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1640
76.28.2
76.28.3
EHeapMemoryError.FreeInstance . . . . . . . . . . . . . . . . . . . . . 1640
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1640
100
CONTENTS
76.30.1
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1640
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1641
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1641
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1641
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1641
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1641
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1641
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1641
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1642
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1642
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1642
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1642
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1642
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1642
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1643
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1643
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1643
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1643
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1643
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1643
101
CONTENTS
76.50.1
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1644
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1644
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1644
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1644
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1644
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1644
76.55.2
76.55.3
EVariantError.CreateCode . . . . . . . . . . . . . . . . . . . . . . . . . . 1645
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1645
76.56.2
76.56.3
76.56.4
Exception.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1645
76.56.5
Exception.CreateFmt . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1646
76.56.6
Exception.CreateRes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1646
76.56.7
Exception.CreateResFmt . . . . . . . . . . . . . . . . . . . . . . . . . . 1646
76.56.8
Exception.CreateHelp . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1646
76.56.9
Exception.CreateFmtHelp . . . . . . . . . . . . . . . . . . . . . . . . . . 1647
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1648
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1648
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1648
76.59.2
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1649
76.60.2
1650
102
CONTENTS
Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1650
77.2.2
Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1655
Bounds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1661
77.3.2
CenterPoint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1661
77.3.3
EqualRect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1662
77.3.4
InflateRect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1662
77.3.5
IntersectRect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1662
77.3.6
IsRectEmpty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1662
77.3.7
OffsetRect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1663
77.3.8
Point . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1663
77.3.9
PtInRect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1663
77.3.10
Rect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1663
77.3.11
Size . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1664
77.3.12
UnionRect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1664
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1664
77.4.2
77.4.3
IClassFactory.CreateInstance . . . . . . . . . . . . . . . . . . . . . . . . 1664
77.4.4
IClassFactory.LockServer . . . . . . . . . . . . . . . . . . . . . . . . . . 1665
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1665
77.5.2
77.5.3
ISequentialStream.Read . . . . . . . . . . . . . . . . . . . . . . . . . . . 1665
77.5.4
ISequentialStream.Write . . . . . . . . . . . . . . . . . . . . . . . . . . 1665
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1665
77.6.2
77.6.3
IStream.Seek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1666
77.6.4
IStream.SetSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1666
77.6.5
IStream.CopyTo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1666
77.6.6
IStream.Commit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1667
77.6.7
IStream.Revert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1667
77.6.8
IStream.LockRegion . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1667
77.6.9
IStream.UnlockRegion . . . . . . . . . . . . . . . . . . . . . . . . . . . 1667
77.6.10
IStream.Stat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1668
77.6.11
IStream.Clone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1668
103
CONTENTS
1669
Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1671
78.6.2
Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1672
FindPropInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1686
78.7.2
GetEnumName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1687
78.7.3
GetEnumNameCount . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1688
78.7.4
GetEnumProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1688
78.7.5
GetEnumValue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1689
78.7.6
GetFloatProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1689
78.7.7
GetInt64Prop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1690
78.7.8
GetInterfaceProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1691
78.7.9
GetMethodProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1691
78.7.10
GetObjectProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1693
78.7.11
GetObjectPropClass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1694
78.7.12
GetOrdProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1695
78.7.13
GetPropInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1696
78.7.14
GetPropInfos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1696
78.7.15
GetPropList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1697
78.7.16
GetPropValue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1698
78.7.17
GetRawInterfaceProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1699
78.7.18
GetSetProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1699
78.7.19
GetStrProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1700
78.7.20
GetTypeData . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1701
78.7.21
GetUnicodeStrProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1702
78.7.22
GetVariantProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1702
78.7.23
GetWideStrProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1702
78.7.24
IsPublishedProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1703
78.7.25
IsStoredProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1703
78.7.26
PropIsType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1704
78.7.27
PropType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1705
78.7.28
SetEnumProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1706
78.7.29
SetFloatProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1706
78.7.30
SetInt64Prop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1707
104
CONTENTS
78.7.31
SetInterfaceProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1707
78.7.32
SetMethodProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1708
78.7.33
SetObjectProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1708
78.7.34
SetOrdProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1709
78.7.35
SetPropValue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1709
78.7.36
SetRawInterfaceProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1709
78.7.37
SetSetProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1710
78.7.38
SetStrProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1710
78.7.39
SetToString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1711
78.7.40
SetUnicodeStrProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1712
78.7.41
SetVariantProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1712
78.7.42
SetWideStrProp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1712
78.7.43
StringToSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1713
78.8.2
TProcedureSignature.GetParam . . . . . . . . . . . . . . . . . . . . . . . 1713
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1714
Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1714
1715
79.2.2
Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1716
79.2.3
Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1719
CanonicalOrder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1721
79.3.2
CompareSortKey . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1722
79.3.3
ComputeSortKey . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1722
79.3.4
FindCollation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1722
79.3.5
FreeCollation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1723
79.3.6
FromUCS4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1723
79.3.7
GetCollationCount . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1723
79.3.8
GetProps . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1723
79.3.9
GetPropUCA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1724
79.3.10
IncrementalCompareString . . . . . . . . . . . . . . . . . . . . . . . . . 1724
79.3.11
LoadCollation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1724
79.3.12
NormalizeNFD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1725
105
CONTENTS
79.3.13
PrepareCollation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1725
79.3.14
RegisterCollation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1725
79.3.15
ToUCS4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1726
79.3.16
UnicodeIsHighSurrogate . . . . . . . . . . . . . . . . . . . . . . . . . . 1726
79.3.17
UnicodeIsLowSurrogate . . . . . . . . . . . . . . . . . . . . . . . . . . 1726
79.3.18
UnicodeIsSurrogatePair . . . . . . . . . . . . . . . . . . . . . . . . . . . 1727
79.3.19
UnicodeToLower . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1727
79.3.20
UnicodeToUpper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1727
79.3.21
UnregisterCollation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1728
79.3.22
UnregisterCollations . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1728
79.4.2
TUCA_DataBook.IsVariable . . . . . . . . . . . . . . . . . . . . . . . . 1729
79.5.2
TUCA_PropItemContextRec.GetCodePoints . . . . . . . . . . . . . . . . 1729
79.5.3
TUCA_PropItemContextRec.GetWeights . . . . . . . . . . . . . . . . . 1730
79.6.2
TUCA_PropItemContextTreeNodeRec.GetLeftNode . . . . . . . . . . . 1730
79.6.3
TUCA_PropItemContextTreeNodeRec.GetRightNode . . . . . . . . . . . 1730
79.7.2
79.7.3
TUCA_PropItemContextTreeRec.GetData . . . . . . . . . . . . . . . . . 1731
79.7.4
TUCA_PropItemContextTreeRec.Find . . . . . . . . . . . . . . . . . . . 1731
79.7.5
TUCA_PropItemContextTreeRec.Data . . . . . . . . . . . . . . . . . . . 1731
79.8.2
79.8.3
TUCA_PropItemRec.HasCodePoint . . . . . . . . . . . . . . . . . . . . 1733
79.8.4
TUCA_PropItemRec.IsValid . . . . . . . . . . . . . . . . . . . . . . . . 1733
79.8.5
TUCA_PropItemRec.GetWeightArray . . . . . . . . . . . . . . . . . . . 1733
79.8.6
TUCA_PropItemRec.GetSelfOnlySize . . . . . . . . . . . . . . . . . . . 1733
79.8.7
TUCA_PropItemRec.GetContextual . . . . . . . . . . . . . . . . . . . . 1733
79.8.8
TUCA_PropItemRec.GetContext . . . . . . . . . . . . . . . . . . . . . . 1733
79.8.9
TUCA_PropItemRec.IsDeleted . . . . . . . . . . . . . . . . . . . . . . . 1734
79.8.10
TUCA_PropItemRec.IsWeightCompress_1 . . . . . . . . . . . . . . . . 1734
79.8.11
TUCA_PropItemRec.IsWeightCompress_2 . . . . . . . . . . . . . . . . 1734
79.8.12
TUCA_PropItemRec.CodePoint . . . . . . . . . . . . . . . . . . . . . . 1734
106
CONTENTS
79.8.13
TUCA_PropItemRec.Contextual . . . . . . . . . . . . . . . . . . . . . . 1734
79.9.2
TUC_Prop.Category . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1735
79.9.3
TUC_Prop.WhiteSpace . . . . . . . . . . . . . . . . . . . . . . . . . . . 1735
79.9.4
TUC_Prop.HangulSyllable . . . . . . . . . . . . . . . . . . . . . . . . . 1736
79.9.5
TUC_Prop.NumericValue . . . . . . . . . . . . . . . . . . . . . . . . . . 1736
79.10.2
TUInt24Rec.implicit(TUInt24Rec):Cardinal . . . . . . . . . . . . . . . . 1740
79.10.3
TUInt24Rec.implicit(TUInt24Rec):LongInt . . . . . . . . . . . . . . . . 1740
79.10.4
TUInt24Rec.implicit(TUInt24Rec):Word . . . . . . . . . . . . . . . . . . 1740
79.10.5
TUInt24Rec.implicit(TUInt24Rec):Byte . . . . . . . . . . . . . . . . . . 1740
79.10.6
TUInt24Rec.implicit(Cardinal):TUInt24Rec . . . . . . . . . . . . . . . . 1741
79.10.7
TUInt24Rec.equal(TUInt24Rec,TUInt24Rec):Boolean . . . . . . . . . . 1741
79.10.8
TUInt24Rec.equal(TUInt24Rec,Cardinal):Boolean . . . . . . . . . . . . 1741
79.10.9
TUInt24Rec.equal(Cardinal,TUInt24Rec):Boolean . . . . . . . . . . . . 1741
1746
107
CONTENTS
1747
Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1747
81.2.2
Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1754
81.2.3
Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1763
AssignPipe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1763
81.3.2
AssignStream . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1764
81.3.3
FpExecL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1765
81.3.4
FpExecLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1766
81.3.5
FpExecLP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1767
81.3.6
FpExecLPE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1768
81.3.7
FpExecV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1768
81.3.8
FpExecVP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1769
81.3.9
FpExecVPE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1770
81.3.10
fpFlock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1771
81.3.11
fpfStatFS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1771
81.3.12
fpfsync . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1772
81.3.13
fpgettimeofday . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1772
81.3.14
fpStatFS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1772
81.3.15
fpSystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1773
81.3.16
FSearch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1773
81.3.17
GetDomainName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1774
81.3.18
GetHostName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1774
81.3.19
GetLocalTimezone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1775
81.3.20
GetTimezoneFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1775
81.3.21
PClose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1776
81.3.22
POpen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1776
81.3.23
ReadTimezoneFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1777
81.3.24
ReReadLocalTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1777
81.3.25
SeekDir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1778
81.3.26
SelectText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1778
81.3.27
SigRaise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1778
81.3.28
TellDir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1779
81.3.29
WaitProcess . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1779
81.3.30
WIFSTOPPED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1780
81.3.31
W_EXITCODE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1780
108
CONTENTS
81.3.32
W_STOPCODE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1780
1781
Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1781
82.3.2
Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1782
GetCodepageByName . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1782
82.4.2
GetCodepageData . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1782
82.4.3
GetSystemCodepage . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1782
1784
Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1784
83.2.2
Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1786
1799
Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1799
84.2.2
Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1799
ArrayStringToPPchar . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1800
84.3.2
EpochToLocal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1800
84.3.3
GetFS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1801
84.3.4
GregorianToJulian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1801
84.3.5
JulianToGregorian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1802
84.3.6
LocalToEpoch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1802
84.3.7
StringToPPChar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1802
1804
Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1809
85.4.2
Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1813
85.4.3
Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1815
109
CONTENTS
ClearScreen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1816
85.5.2
DefaultErrorHandler . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1816
85.5.3
DoneVideo
85.5.4
GetCapabilities . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1817
85.5.5
GetCursorType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1818
85.5.6
GetLockScreenCount . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1819
85.5.7
GetVideoDriver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1820
85.5.8
GetVideoMode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1820
85.5.9
GetVideoModeCount . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1821
85.5.10
GetVideoModeData . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1822
85.5.11
InitVideo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1822
85.5.12
LockScreenUpdate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1822
85.5.13
SetCursorPos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1823
85.5.14
SetCursorType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1824
85.5.15
SetVideoDriver . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1824
85.5.16
SetVideoMode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1825
85.5.17
UnlockScreenUpdate . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1825
85.5.18
UpdateScreen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1825
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1817
1827
Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1827
delay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1827
86.3.2
keypressed . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1827
86.3.3
nosound . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1828
86.3.4
readkey . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1828
86.3.5
sound . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1828
86.3.6
textmode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1828
1829
Constants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1829
GetWindowsSpecialDir . . . . . . . . . . . . . . . . . . . . . . . . . . . 1832
1833
110
CONTENTS
fpIOperm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1833
88.3.2
fpIoPL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1834
88.3.3
ReadPort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1834
88.3.4
ReadPortB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1834
88.3.5
ReadPortL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1835
88.3.6
ReadPortW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1835
88.3.7
WritePort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1835
88.3.8
WritePortB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1836
88.3.9
WritePortl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1836
88.3.10
WritePortW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1836
111
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 specific units that implement the specifics 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.
112
Chapter 1
Used units
Table 1.1: Used units by unit BaseUnix
Name
System
unixtype
1.2
Page
1224
1784
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 only implements a cleaned up,
portable subset of that unit.
For porting FPC to new unix-like platforms, it should be sufficient to implement the functionality in
this unit for the new platform.
1.3
1.3.1
No medium present
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
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
120
SEEK_END = 2
fpLSeek (175) option: Set position relative to end of file.
SEEK_SET = 0
fpLSeek (175) 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)
131
SIGKILL = 9
Signal: KILL (unblockable)
SIGPIPE = 13
Signal: PIPE (Broken pipe
SIGPOLL = SIGIO
Signal: POLL (Pollable event)
SIGPROF = 27
Signal: PROF (Profiling 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)
132
SIGTTOU = 22
Signal: TTOU (Terminal output, background)
SIGUNUSED = 31
Signal: Unused
SIGURG = 23
Signal: URG (Socket urgent condition)
SIGUSR1 = 10
Signal: USR1 (User-defined signal 1)
SIGUSR2 = 12
Signal: USR2 (User-defined 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 flags: 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
133
S_IRGRP = %0000100000
Mode flag: Read by group.
S_IROTH = %0000000100
Mode flag: Read by others.
S_IRUSR = %0100000000
Mode flag: Read by owner.
S_IRWXG = S_IRGRP or S_IWGRP or S_IXGRP
Mode flag: Read, write, execute by groups.
S_IRWXO = S_IROTH or S_IWOTH or S_IXOTH
Mode flag: Read, write, execute by others.
S_IRWXU = S_IRUSR or S_IWUSR or S_IXUSR
Mode flag: Read, write, execute by user.
S_IWGRP = %0000010000
Mode flag: Write by group.
S_IWOTH = %0000000010
Mode flag: Write by others.
S_IWUSR = %0010000000
Mode flag: Write by owner.
S_IXGRP = %0000001000
Mode flag: Execute by group.
S_IXOTH = %0000000001
Mode flag: Execute by others.
S_IXUSR = %0001000000
Mode flag: Execute by owner.
UTSNAME_DOMAIN_LENGTH = UTSNAME_LENGTH
Max length of utsname (155) domain name.
135
UTSNAME_LENGTH = SYS_NMLN
Max length of utsname (155) system name, release, version, machine.
UTSNAME_NODENAME_LENGTH = UTSNAME_LENGTH
Max length of utsname (155) node name.
WNOHANG = 1
#rtl.baseunix.fpWaitpid (206) option: Do not wait for processes to terminate.
wordsinfdset = FD_MAXFDSET div BITSINWORD
Number of words in a TFDSet (149) array
wordsinsigset = SIG_MAXSIG div BITSINWORD
Number of words in a signal set.
WUNTRACED = 2
#rtl.baseunix.fpWaitpid (206) option: Also report children wich were stopped but not yet reported
W_OK = 2
fpAccess (155) call test: write allowed
X_OK = 1
fpAccess (155) call test: execute allowed
_STAT_VER = _STAT_VER_LINUX
Stat version number
_STAT_VER_KERNEL = 0
Current version of stat record
_STAT_VER_LINUX = 1
Version of linux stat record
1.3.2
Types
Blkcnt64_t = cuint64
64-bit block count
136
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 (1786)
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)
137
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 (137).
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 (138).
csshort = UnixType.csshort
Short signed integer type
cuchar = UnixType.cuchar
Alias for #rtl.UnixType.cuchar (1787)
cuint = UnixType.cuint
C type: unsigned integer (natural size)
cuint16 = UnixType.cuint16
C type: 16 bits sized, unsigned integer.
138
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 (1788)
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
Dirent = record
d_fileno : ino64_t;
d_off : off_t;
d_reclen : cushort;
d_type : cuchar;
d_name : Array[0..4095-sizeof(ino64_t)-sizeof(off_t)-sizeof(cushort)-sizeof(cuchar)
end
139
iovec is used in fpreadv (188) 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.
kernel_loff_t = clonglong
Long kernel offset type
kernel_mode_t = cuint
kernel_mode_t may differ from the libc type used to describe file 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
140
pollfd is used in the fpPoll (185) call to describe the various actions.
pPid = UnixType.pPid
Pointer to TPid (151) type.
144
ppollfd = ^pollfd
Pointer to tpollfd.
PRLimit = ^TRLimit
Pointer to TRLimit (151) record
psigactionrec = ^sigactionrec
Pointer to SigActionRec (147) record type.
PSigContext = ^TSigContext
Pointer to #rtl.baseunix.TSigContext (152) record type.
psiginfo = ^tsiginfo
Pointer to #rtl.baseunix.TSigInfo (153) record type.
psigset = ^tsigset
Pointer to SigSet (147) type.
pSize = UnixType.pSize
Pointer to TSize (153) type.
pSize_t = UnixType.pSize_t
Pointer to Size_t
pSocklen = UnixType.pSocklen
Pointer to TSockLen (153) type.
psSize = UnixType.psSize
Pointer to TsSize (153) type
PStat = ^Stat
Pointer to TStat (153) type.
pstatfs = UnixType.PStatFs
This is an alias for the type defined in the #rtl.unixtype (1784) unit.
pthread_cond_t = UnixType.pthread_cond_t
Thread conditional variable type.
145
pthread_mutex_t = UnixType.pthread_mutex_t
Thread mutex type.
pthread_t = UnixType.pthread_t
Posix thread type.
pTime = UnixType.pTime
Pointer to TTime (154) type.
ptimespec = UnixType.ptimespec
Pointer to timespec (150) type.
ptimeval = UnixType.ptimeval
Pointer to timeval (150) type.
ptimezone = ^timezone
Pointer to TimeZone (150) record.
ptime_t = UnixType.ptime_t
Pointer to time_t (150) type.
PTms = ^tms
Pointer to TTms (154) type.
Pucontext = ^Tucontext
Pointer to TUContext (154) type.
pUid = UnixType.pUid
Pointer to TUid (154) type.
pUtimBuf = ^UTimBuf
Pointer to TUTimBuf (154) type.
PUtsName = ^TUtsName
Pointer to TUtsName (154) type.
rlim_t = culong
rlim_t is used as the type for the various fields in the TRLimit (151) record.
146
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)
Standard signal action handler prototype
sigactionrec = record
sa_handler : sigactionhandler_t;
sa_flags : culong;
sa_restorer : sigrestorerhandler_t;
sa_mask : sigset_t;
end
ssize_t = UnixType.ssize_t
Small size type.
Stat = packed record
case Byte of
0: (
dev : QWorddeprecated;
__pad0 : Array[0..3] of Bytedeprecated;
__ino : Cardinaldeprecated;
mode : Cardinaldeprecated;
nlink : Cardinaldeprecated;
uid : Cardinaldeprecated;
gid : Cardinaldeprecated;
rdev : QWorddeprecated;
__pad3 : Array[0..3] of Bytedeprecated;
size : QWorddeprecated;
blksize : Cardinaldeprecated;
blocks : QWorddeprecated;
atime : Cardinaldeprecated;
atime_nsec : Cardinaldeprecated;
mtime : Cardinaldeprecated;
mtime_nsec : Cardinaldeprecated;
ctime : Cardinaldeprecated;
ctime_nsec : Cardinaldeprecated;
ino : QWorddeprecated;
);
1: (
st_dev : QWord;
__pad0_ : Array[0..3] of Byte;
__st_ino_ : Cardinal;
st_mode : Cardinal;
st_nlink : Cardinal;
st_uid : Cardinal;
st_gid : Cardinal;
st_rdev : QWord;
__pad3_ : Array[0..3] of Byte;
st_size : QWord;
st_blksize : Cardinal;
st_blocks : QWord;
st_atime : Cardinal;
st_atime_nsec : Cardinal;
st_mtime : Cardinal;
st_mtime_nsec : Cardinal;
st_ctime : Cardinal;
st_ctime_nsec : Cardinal;
st_ino : QWord;
);
end
TGid = UnixType.TGid
Alias for gid_t (140) type.
TGrpArr = Array[0..0] of TGid
Array of gid_t (140) IDs
timespec = UnixType.timespec
Short time specification type.
timeval = UnixType.timeval
Time specification type.
timezone = record
tz_minuteswest : cint;
tz_dsttime : cint;
end
150
TRLimit is the structure used by the kernel to return resource limit information in.
tsigactionhandler = sigactionhandler_t
Alias for sigactionhandler_t (147) type.
tsigaltstack = record
ss_sp : pointer;
ss_flags : LongInt;
ss_size : LongInt;
end
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;
_sifields : record
case LongInt of
0: (
_pad : Array[0..(SI_PAD_SIZE)-1] of LongInt;
);
1: (
_kill : record
_pid : pid_t;
_uid : uid_t;
end;
);
2: (
_timer : record
_timer1 : DWord;
_timer2 : DWord;
end;
);
3: (
_rt : record
_pid : pid_t;
_uid : uid_t;
_sigval : pointer;
end;
);
4: (
_sigchld : record
_pid : pid_t;
_uid : uid_t;
_status : LongInt;
152
_utime : clock_t;
_stime : clock_t;
end;
);
5: (
_sigfault : record
_addr : pointer;
end;
);
6: (
_sigpoll : record
_band : LongInt;
_fd : LongInt;
end;
);
end;
end
TTime = UnixType.TTime
Alias for TTime (154) type.
Ttimespec = UnixType.Ttimespec
Alias for TimeSpec (150) type.
TTimeVal = UnixType.TTimeVal
Alias for timeval (150) type.
TTimeZone = timezone
Alias for TimeZone (150) record.
TTms = tms
Alias for Tms (151) 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 (154) type.
TUtimBuf = UTimBuf
Alias for UtimBuf (155) type.
TUtsName = UtsName
Alias for UtsName (155) type.
uid_t = UnixType.uid_t
User ID type
UTimBuf = record
actime : time_t;
modtime : time_t;
end
154
Record used in fpUtime (205) to set file access and modification 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 Charplatform;
end
The elements of this record are null-terminated C style strings, you cannot access them directly. Note
that the Domain field is a GNU extension, and may not be available on all platforms.
1.4
1.4.1
CreateShellArgV
1.4.2
FpAccess
sys_eaccessThe requested access is denied, either to the file 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_enomemInsufficient kernel memory.
sys_eloopPath has a circular symbolic link.
See also: FpChown (158), FpChmod (157)
Listing: ./bunixex/ex26.pp
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
156
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 .
1.4.4
FpChdir
1.4.5
FpChmod
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 file, and is not zero. Owner or
group were not specified 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_enomemInsufficient kernel memory.
sys_erofsThe file is on a read-only filesystem.
sys_eloopPath has a reference to a circular symbolic link, i.e. a symbolic link, whose expansion
points to itself.
See also: fpChown (158), fpAccess (155)
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
158
Description: fpChown sets the User ID and Group ID of the file 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 file, and is not zero. Owner or
group were not specified 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_enomemInsufficient kernel memory.
sys_erofsThe file is on a read-only filesystem.
sys_eloopPath has a reference to a circular symbolic link, i.e. a symbolic link, whose expansion
points to itself.
See also: fpChmod (157), fpAccess (155)
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
Visibility: default
Description: FpClose closes a file with file descriptor Fd. The function returns zero if the file was closed
successfully, a nonzero return value indicates an error.
For an example, see FpOpen (181).
Errors: Extended error information can be retrieved using fpGetErrno (169).
See also: FpOpen (181), FpRead (186), FpWrite (207), FpFTruncate (168), FpLSeek (175)
1.4.8
FpClosedir
1.4.9
FpDup
160
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 )= 1 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 .
1.4.10
FpDup2
161
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 .
1.4.11
FpExecv
162
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 .
1.4.12
FpExecve
163
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 .
1.4.13
FpExit
1.4.14
FpFcntl
1.4.15
fpfdfillset
1.4.16
fpFD_CLR
1.4.17
fpFD_ISSET
165
1.4.18
fpFD_SET
1.4.19
fpFD_ZERO
1.4.20
FpFork
1.4.21
FPFStat
166
Description: FpFStat gets information about the file specified in one of the following:
Fda valid file descriptor.
Fan opened text file or untyped file.
and stores it in Info, which is of type stat (148). The function returns zero if the call was succesfull,
a nonzero return value indicates failure.
Errors: Extended error information can be retrieved using fpGetErrno (169).
sys_enoentPath does not exist.
See also: FpStat (198), FpLStat (176)
Listing: ./bunixex/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 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 .
167
1.4.22
FpFtruncate
1.4.23
FpGetcwd
1.4.24
FpGetegid
168
1.4.25
FpGetEnv
1.4.26
, fpGetenv ( PATH ) ) ;
fpgeterrno
1.4.27
FpGeteuid
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.28
FpGetgid
1.4.29
FpGetgroups
170
1.4.30
FpGetpgrp
1.4.31
FpGetpid
1.4.32
FpGetppid
171
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.33
fpGetPriority
1.4.34
FpGetRLimit
1.4.35
FpGetsid
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 (171), FpGetpid (171), FpGetPpid (171)
1.4.36
FpGetuid
1.4.37
FpIOCtl
173
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 (
WriteLn (
WriteLn (
WriteLn (
end .
1.4.38
I n p u t Flags
:
Output Flags :
L i n e Flags
:
C o n t r o l Flags :
$
$
$
$
, hexstr (
, hexstr (
, hexstr (
, hexstr (
tios
tios
tios
tios
. c_iflag
. c_oflag
. c_lflag
. c_cflag
,8));
,8));
,8));
,8));
FpKill
1.4.39
FpLink
174
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_enomemInsufficient kernel memory.
sys_erofsThe files are on a read-only filesystem.
sys_eexistNewOne already exists.
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 (199), fpUnLink (204)
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
1.4.41
fpLstat
Synopsis: Return information about symbolic link. Do not follow the link
Declaration: function
function
function
function
fpLstat(path:
fpLstat(const
fpLstat(path:
fpLstat(const
Visibility: default
Description: FpLstat gets information about the link specified in Path (or FileName, and stores it in Info,
which points to a record of type TStat. Contrary to FpFstat (166), it stores information about the
link, not about the file 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 (169) function.
sys_enoentPath does not exist.
See also: FpFStat (166), #rtl.unixtype.TStatFS (1797)
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 ) ;
176
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 ) ;
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 ) ;
If
if
1.4.42
FpMkdir
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 specific code. System.mkdir will work on all operating systems.
Errors: Extended error information can be retrieved using fpGetErrno (169).
See also: fpGetCWD (168), fpChDir (157)
1.4.43
FpMkfifo
1.4.44
Fpmmap
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 .
179
1.4.45
Fpmunmap
1.4.46
FpNanoSleep
180
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 .
1.4.47
fpNice
1.4.48
FpOpen
Visibility: default
Description: FpOpen opens a file in Path with flags 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 flags may beOR-ed with one of the following constants:
O_CreatFile is created if it doesnt exist.
O_ExclIf the file is opened with O_Creat and it already exists, the call wil fail.
O_NoCttyIf the file is a terminal device, it will NOT become the process controlling terminal.
O_TruncIf the file exists, it will be truncated.
O_Appendthe file is opened in append mode. Before each write, the file pointer is positioned at the
end of the file.
O_NonBlockThe file is opened in non-blocking mode. No operation on the file descriptor will cause
the calling process to wait till.
O_NDelayIdem as O_NonBlock
O_SyncThe file is opened for synchronous IO. Any write operation on the file will not return untill
the data is physically written to disk.
O_NoFollowif the file is a symbolic link, the open fails. (linux 2.1.126 and higher only)
O_Directoryif the file 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 specifies the permissions
to set when opening the file. This is modified by the umask setting. The real permissions are Mode
and not umask. The return value of the function is the filedescriptor, or a negative value if there
was an error.
Errors: Extended error information can be retrieved using fpGetErrno (169).
See also: FpClose (159), FpRead (186), FpWrite (207), FpFTruncate (168), FpLSeek (175)
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 .
182
1.4.49
FpOpendir
183
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 .
1.4.50
FpPause
1.4.51
FpPipe
184
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 .
1.4.52
FpPoll
1.4.53
FppRead
1.4.54
FppWrite
Visibility: default
Description: FpPWrite writes nbytes bytes from buffer buf into file descriptor fd starting at offset offset.
Offset is measured from the start of the file. This function can only be used on files, not on pipes
or sockets (i.e. any seekable file descriptor).
The function returns the number of bytes actually written, or -1 on error.
Errors: On error, -1 is returned.
See also: FpPRead (185), FpWriteV (207)
1.4.55
FpRead
186
1.4.56
FpReaddir
1.4.57
fpReadLink
187
1.4.58
FpReadV
188
1.4.59
FpRename
1.4.60
FpRmdir
1.4.61
fpSelect
190
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 . ) ;
{ 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
1.4.63
FpSetgid
1.4.64
fpSetPriority
1.4.65
FpSetRLimit
1.4.66
FpSetsid
1.4.67
fpsettimeofday
1.4.68
FpSetuid
1.4.69
FPSigaction
1.4.70
FpSigAddSet
194
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 (195), FpSigFillSet (195), FpSigDelSet (195), FpSigIsMember (195)
1.4.71
FpSigDelSet
1.4.72
FpsigEmptySet
1.4.73
FpSigFillSet
1.4.74
FpSigIsMember
1.4.75
FpSignal
1.4.76
FpSigPending
Errors: None
See also: fpSigAction (193), fpSigProcMask (197), fpSigSuspend (197), fpSignal (196), fpKill (174)
1.4.77
FpSigProcMask
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 (193), fpSigProcMask (197), fpSigPending (196), fpSignal (196), fpKill (174)
1.4.79
FpSigTimedWait
Errors: On error, -1 is returned, and extended error information can be obtained with fpGetErrno.
See also: FpSigSuspend (197)
1.4.80
FpSleep
1.4.81
: , res ) ;
FpStat
198
1.4.82
fpSymlink
200
1.4.83
fpS_ISBLK
1.4.84
fpS_ISCHR
1.4.85
fpS_ISDIR
1.4.86
fpS_ISFIFO
201
1.4.87
fpS_ISLNK
1.4.88
fpS_ISREG
202
1.4.89
fpS_ISSOCK
1.4.90
fptime
1.4.91
FpTimes
203
1.4.92
FpUmask
1.4.93
FpUname
1.4.94
FpUnlink
1.4.95
FpUtime
205
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
1.4.97
FpWaitPid
206
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 (166).
Errors: Extended error information can be retrieved using fpgetErrno (169).
See also: fpFork (166), fpExecve (163), fpWait (206)
1.4.98
FpWrite
1.4.99
FpWriteV
1.4.100
FreeShellArgV
207
1.4.101
wexitStatus
Synopsis: Extract the exit status from the fpWaitPID (206) 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
(206) call.
See also: FpWaitPID (206), WTERMSIG (209), WSTOPSIG (208), WIFEXITED (208), WIFSIGNALED
(208)
1.4.102
wifexited
1.4.103
wifsignaled
1.4.104
wstopsig
208
1.4.105
wtermsig
209
Chapter 2
Used units
Table 2.1: Used units by unit character
Name
System
unicodedata
2.2
Page
1224
1715
Overview
The character unit contains the TCharacter (217) class, which consists mainly of class functions. It
should not be constructed, but its class methods can be used. All class methods also exist as regular
methods.
Many routines depend on unicode collation data to be present in the binary (or distributed on disc
with the application. This data can be loaded using the routines in the unicodedata (1715) unit.. The
FPC project distributes some unicode collation data in .bco files which can be loaded using the
LoadCollation (1724) routine from that unit.
2.3
2.3.1
TCharacterOption = (coIgnoreInvalidSequence)
Explanation
Ignore invalid unicodecode sequences
TCharacterOption is used in the toUpper (217) and toLower (217) functions to control the
behaviour of the function.
210
Explanation
Punctuation, close (Pe)
Mark, spacing combining (Mc)
Punctuation, connector (Pc)
Other, control (Cc)
Symbol, currency (Sc)
Punctuation, dash (Pd)
Number, decimal digit (Nd)
Mark, enclosing (Me)
Punctuation, final quote (Pf, may behave like Ps or Pe depending on usage)
Other, format (Cf)
Punctuation, initial quote (Pi, may behave like Ps or Pe depending on usage)
Number, letter (Nl)
Separator, line (Zl)
Letter, lowercase (Ll)
Symbol, math (Sm)
Letter, modifier (Lm)
Symbol, modifier (Sk)
Mark, nonspacing (Mn)
Punctuation, open (Ps)
Letter, other (Lo)
Number, other (No)
Punctuation, other (Po)
Symbol, other (So)
Separator, paragraph (Zp)
Other, private use (Co)
Separator, space (Zs)
Other, surrogate (Cs)
Letter, titlecase (Lt)
Other, not assigned (including noncharacters) (Cn)
Letter, uppercase (Lu)
211
This enumeration type contains the characterization of all possible unicode characters. It is used in
the GetUnicodeCategory (213) and TCharacter.GetUnicodeCategory (220) functions.
TUnicodeCategorySet = Set of TUnicodeCategory
TUnicodeCategorySet is the set of TUnicodeCategory (211). It is used internally in the TCharacter (217) class.
2.4
2.4.1
ConvertFromUtf32
2.4.2
ConvertToUtf32
2.4.3
GetNumericValue
212
2.4.4
GetUnicodeCategory
2.4.5
IsControl
2.4.6
IsDigit
2.4.7
IsHighSurrogate
213
2.4.8
IsLetter
2.4.9
IsLetterOrDigit
2.4.10
IsLower
2.4.11
IsLowSurrogate
214
2.4.12
IsNumber
2.4.13
IsPunctuation
2.4.14
IsSeparator
2.4.15
IsSurrogate
215
2.4.16
IsSurrogatePair
2.4.17
IsSymbol
2.4.18
IsUpper
2.4.19
IsWhiteSpace
216
2.4.20
ToLower
2.4.21
ToUpper
2.5
2.5.1
TCharacter
Description
TCharacter is provided for Delphi compatibility. All its class functions and methods are also
available as regular functions.
217
2.5.2
Method overview
Page
218
219
218
219
220
220
220
221
222
223
223
222
224
224
224
221
222
Method
ConvertFromUtf32
ConvertToUtf32
Create
GetNumericValue
GetUnicodeCategory
IsControl
IsDigit
IsHighSurrogate
IsLetter
IsLetterOrDigit
IsLower
IsLowSurrogate
IsNumber
IsPunctuation
IsSeparator
IsSurrogate
IsSurrogatePair
225
225
226
226
226
IsSymbol
IsUpper
IsWhiteSpace
ToLower
ToUpper
2.5.3
Description
Convert a UTF32 character to UnicodeString
Convert a UTF16 character to a UTF32 character
Constructor (do not call)
Get the numeric value of the character
Get the unicode category of a character
Check whether a unicode character is a unicode control character
Check whether a unicode character is a digit
Check whether a unicode character is a surrogate in the high range
Check if a unicode character is a letter.
Check if a unicode character is a letter or digit
Check if a unicode character is a lowercase letter
Check whether a unicode character is a surrogate in the low range
Check if a unicode character is a number
Check if a unicode character is a punctuation character
Check if a unicode character is a separator character
Check whether a unicode character is a surrogate
Check if a pair of characters is a set of high/low surrorgate characters
Check if a unicode character is a symbol character
Check whether a unicode character is an uppercase letter
Check whether a unicode character is a whitespace character
Convert a character or string to lowercase
Convert a character or string to uppercase
TCharacter.Create
2.5.4
TCharacter.ConvertFromUtf32
Static
Visibility: public
Description: TCharacter.ConvertFromUtf32 converts a single UTF32 character AChar to a UTF16
string. This is the opposite of TCharacter.ConvertToUtf32 (219).
The result is a string, since multiple UTF16 characters can be needed to encode a single UTF32
character.
Errors: If AChar is not in the valid range of UTF32 characters, an EArgumentOutOfRangeException (210)
exception is raised.
See also: EArgumentOutOfRangeException (210), TCharacter.ConvertToUtf32 (219)
218
2.5.5
TCharacter.ConvertToUtf32
2.5.6
TCharacter.GetNumericValue
219
2.5.7
TCharacter.GetUnicodeCategory
2.5.8
TCharacter.IsControl
2.5.9
TCharacter.IsDigit
220
Errors: If AIndex is not a valid character index in the string AString, an EArgumentOutOfRangeException (210) exception is raised. If the character at that position is not complete, an EArgumentException (210) exception is raised.
See also: IsControl (220), IsDigit (220), IsSurrogate (221), IsHighSurrogate (221), IsLowSurrogate (222), IsSurrogatePair (222), IsLetter (222), IsLetterOrDigit (223), IsLower (223), IsNumber (224), IsPunctuation (224), IsSeparator (224), IsSymbol (225), IsUpper (225), IsWhiteSpace (226)
2.5.10
TCharacter.IsSurrogate
2.5.11
TCharacter.IsHighSurrogate
221
2.5.12
TCharacter.IsLowSurrogate
2.5.13
TCharacter.IsSurrogatePair
2.5.14
TCharacter.IsLetter
222
Description: IsLetter returns True if a unicode character has category that is one of the letter categories
(ucUppercaseLetter, ucLowercaseLetter, ucTitlecaseLetter, ucModifierLetter,
ucOtherLetter). The character can be specified as a UTF16 character AChar or a UTF16 encoded character starting at position AIndex in string AString.
Errors: If AIndex is not a valid character index in the string AString, an EArgumentOutOfRangeException (210) exception is raised. If the character at that position is not complete, an
See also: EArgumentException (210), IsControl (220), IsDigit (220), IsSurrogate (221), IsHighSurrogate
(221), IsLowSurrogate (222), IsSurrogatePair (222), IsLetter (222), IsLetterOrDigit (223), IsLower
(223), IsNumber (224), IsPunctuation (224), IsSymbol (225), IsUpper (225), IsWhiteSpace (226)
2.5.15
TCharacter.IsLetterOrDigit
2.5.16
TCharacter.IsLower
2.5.17
TCharacter.IsNumber
2.5.18
TCharacter.IsPunctuation
2.5.19
TCharacter.IsSeparator
224
Description: IsSeparator returns True if a unicode character has category that is one of the separator categories (ucSpaceSeparator, ucLineSeparator, ucParagraphSeparator). The character can be specified as a UTF16 character AChar or a UTF16 encoded character starting at position
AIndex in string AString.
Errors: If AIndex is not a valid character index in the string AString, an EArgumentOutOfRangeException (210) exception is raised. If the character at that position is not complete, an EArgumentException (210) exception is raised.
See also: IsControl (220), IsDigit (220), IsSurrogate (221), IsHighSurrogate (221), IsLowSurrogate (222), IsSurrogatePair (222), IsLetter (222), IsLetterOrDigit (223), IsLower (223), IsNumber (224), IsPunctuation (224), IsSymbol (225), IsUpper (225), IsWhiteSpace (226)
2.5.20
TCharacter.IsSymbol
2.5.21
TCharacter.IsUpper
2.5.22
TCharacter.IsWhiteSpace
2.5.23
TCharacter.ToLower
2.5.24
TCharacter.ToUpper
226
Description: ToUpper converts the unicode character AChar or string AString to uppercase. Options determines the behaviour of the conversion: if AOptions contains coIgnoreInvalidSequence
then no exception will be raised when the string or character contains an invalid unicode sequence.
The default behaviour is to raise an EArgumentException (210) exception when this happens.
Errors: If an invalid character is encountered, an EArgumentException (210) exception is raised, unless
coIgnoreInvalidSequence is specified in the options.
See also: TCharacter.ToUpper (226), TCharacter.IsLower (223), TCharacter.IsUpper (225)
227
Chapter 3
Overview
The charset unit can be used to load single-byte character set (code page) descriptions. It is used
in the fpwidestring (228) unit to add support for converting single-byte codepage strings to unicode
strings (and vice versa).
Data of a code page may be included using one of the ready-made units, or can be loaded (in a binary
form) at runtime with the loadbinaryunicodemapping (231) function. The binary files have the .bcm
extension and are produced by the creumap utility distributed with Free Pascal.
Pre-made units are available for the following codepages: cp895 (228), cp932 (228), cp936 (228),
cp949 (228) and cp950 (228).
3.2
3.2.1
BINARY_MAPPING_FILE_EXT = .bcm
BINARY_MAPPING_FILE_EXT contains the default extension of a file containing a binary-coded
map.
3.2.2
Types
preversecharmapping = ^treversecharmapping
Pointer to treversecharmapping
punicodecharmapping = ^tunicodecharmapping
Pointer to tunicodecharmapping
punicodemap = ^tunicodemap
Pointer to tunicodemap
228
TSerializedMapHeader is a record describing the binary map data file. The contents of this
record can be found at offset zero of a (.bcm) file containing a single-byte unicode map.
tunicodechar = Word
tunicodechar is a type used to represent unicode characters in this file, it should not be used for
other unicode routines.
tunicodecharmapping = packed record
unicode : tunicodechar;
flag : tunicodecharmappingflag;
reserved : Byte;
end
Explanation
Unicode character uses leading byte
No extra information about unicode character
Currently unused
Unused position in code page
tunicodemap = record
cpname : string;
cp : Word;
map : punicodecharmapping;
lastchar : LongInt;
reversemap : preversecharmapping;
reversemaplength : LongInt;
next : punicodemap;
internalmap : Boolean;
end
tunicodemap describes a complete mapping between a single-byte code page and a unicode character set. It contains both a forward and backward mapping.
tunicodestring = ^tunicodechar
tunicodestring is a type used to represent unicode strings in this file, it should not be used for
other unicode routines.
3.3
3.3.1
getascii
3.3.2
getmap
3.3.3
getunicode
3.3.4
loadbinaryunicodemapping
Synopsis: Load binary single-byte codepage to unicode map from file or memory
Declaration: function loadbinaryunicodemapping(const directory: string;
const cpname: string) : punicodemap
; Overload
function loadbinaryunicodemapping(const filename: string) : punicodemap
; Overload
function loadbinaryunicodemapping(const AData: Pointer;
const ADataLength: Integer)
: punicodemap; Overload
Visibility: default
Description: loadbinaryunicodemapping loads a binary description of a single-byte unicode mapping.
The mapping can reside in a file, in which case the file to load can be specified using a filename
filename or using a directory directory and codepage name cpname. In the latter case, a
suffix consisting of _le or _be depending on the endianness of the current platform will be appended,
and the filename extension is .bcm. Note that the file names may be case sensitive.
The data can also be loaded from a memory block AData with size ADataLength.
It will produce an in-memory map of the file. It returns a pointer to the map, or Nil if something
went wrong. The resulting mapping can be registered using registermapping (232).
Errors: On error, Nil is returned.
See also: loadunicodemapping (231), registermapping (232)
3.3.5
loadunicodemapping
Visibility: default
Description: loadunicodemapping loads a text description of a single-byte unicode mapping. It will analyse
the textual description in file f, and produce an in-memory map of the file. It returns a pointer to the
map, or Nil if something went wrong. The unicode map name must be specified in cpName, and
the numerical identifier in cp
The resulting mapping can be registered using registermapping (232).
Errors: On error, Nil is returned.
See also: loadbinaryunicodemapping (231), registermapping (232)
3.3.6
mappingavailable
3.3.7
registerbinarymapping
Synopsis: Load and register binary single-byte codepage to unicode map from file
Declaration: function registerbinarymapping(const directory: string;
const cpname: string) : Boolean
Visibility: default
Description: registerbinarymapping calls loadbinaryunicodemapping (231) using directory and cpname
and registers the resulting mapping, if any was succesfully loaded, using registermapping (232). It
returns True if the operation was succesful.
Errors: On error, False is returned.
See also: loadbinaryunicodemapping (231), registermapping (232)
3.3.8
registermapping
232
Chapter 4
Used units
Table 4.1: Used units by unit Classes
Name
rtlconsts
System
sysutils
Types
typinfo
4.2
Page
??
1224
1476
1650
1669
Overview
This documentation describes the FPC classes unit. The Classes unit contains basic classes for the
Free Component Library (FCL):
a TList (369) class for maintaining lists of pointers,
TStringList (423) for lists of strings,
TCollection (319) to manage collections of objects
TStream (408) classes to support streaming.
Furthermore it introduces methods for object persistence, and classes that understand an ownerowned relationship, with automatic memory management.
4.3
4.3.1
BITSHIFT = 5
Used to calculate the size of a bits array
233
4.3.2
Types
HMODULE = PtrInt
FPC doesnt support modules yet, so this is a dummy type.
HRSRC = TFPResourceHandle deprecated
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 (247) record.
PStringItemList = ^TStringItemList
Pointer to a TStringItemList (247).
TActiveXRegType = (axrComponentOnly,axrIncludeDescendants)
Explanation
This type is provided for compatibility only, and is currently not used in Free Pascal.
TAlignment = (taLeftJustify,taRightJustify,taCenter)
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
236
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
Explanation
An item is added to the collection.
An item is deleted from the collection.
An item is extracted from the collection.
Explanation
The component is being streamed as part of a frame (?)
The component is being designed in an IDE.
??
The component is being destroyed.
The components references to other components are being fixed.
Indicates whether the component has freenotifications
Component is part of a frame (?).
The component is being loaded from the stream.
Properties are being read from the stream.
The component is being updated.
Properties are being written to the stream.
Explanation
??
The component can be on inherited forms.
Subcomponent - streamed as part of the owning component
Transient component
239
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 (240)
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 find a component in a global scope. It is used
when the streaming system needs to find 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 (253) 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.
TFindMethodEvent = procedure(Reader: TReader;const MethodName: string;
var Address: CodePointer;
var Error: Boolean) of object
240
If a TReader (393) instance needs to locate a method and it doesnt find it in the streamed form, then
the OnFindMethod (403) 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.
TFPObservedOperation = (ooChange,ooFree,ooAddItem,ooDeleteItem,ooCustom)
Explanation
An item is added to the observed object (generally a list).
The observed object has changed.
Custom event.
An item is deleted from the observed object (generally a list).
The observed object is being freed.
Explanation
Help type: Context ID help.
Help type: Keyword help
241
TIdentMapEntry is used internally by the IdentToInt (255) and IntToIdent (256) calls to store the
mapping between the identifiers and the integers they represent.
TIdentToInt = function(const Ident: string;var Int: LongInt) : Boolean
TIdentToInt is a callback used to look up identifiers (Ident) and return an integer value corresponding to this identifier (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 specified when an integer is registered using the RegisterIntegerConsts (261) call.
TInitComponentHandler = function(Instance: TComponent;
RootAncestor: TClass) : Boolean
TInitComponentHandler is a callback type. It is used in the InitInheritedComponent (256)
call to initialize a component. Callbacks of this type are registered with the RegisterInitComponentHandler (261) call.
TIntToIdent = function(Int: LongInt;var Ident: string) : Boolean
TIdentToInt is a callback used to look up integers (Ident) and return an identifier (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 specified when an integer is registered using the RegisterIntegerConsts (261) call.
TLeftRight = taLeftJustify..taRightJustify
TLeftRight is a subrange type based on the TAlignment (236) enumerated type. It contains only
the left and right alignment constants.
TListAssignOp = (laCopy,laAnd,laOr,laXor,laSrcUnique,laDestUnique)
Explanation
Remove all elements not first 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 first list
This type determines what operation TList.Assign (375) or TFPList.assign (355) performs.
242
TListCallback = Types.TListCallback
TListCallback is the method callback prototype for the function that is passed to the TFPList.ForEachCall (356) call. The data argument will be filled 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)
Explanation
List change notification: Element added to the list.
List change notification: Element deleted from the list.
List change notification: Element extracted from the list.
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 file. It is needed for correct encoding when reading string values in the text
stream.
TOperation = (opInsert,opRemove)
243
Explanation
A new component is being inserted in the child component list.
A component is being removed from the child component list.
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.
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)
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
Same as TPoint (244), only the X and Y ranges are limited to 2-byte integers instead of 4-byte
integers.
TStreamOwnership = (soReference,soOwned)
246
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 (418) acts, when the adapter is freed.
TStreamProc = procedure(Stream: TStream) of object
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 (423) 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)
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.
247
Explanation
Binary data follows.
Collection follows
Currency value follows
Date value follows
Extended value.
Boolean False value.
Identifier.
Integer value, 16 bits long.
Integer value, 32 bits long.
Integer value, 64 bits long.
Integer value, 8 bits long.
Identifies 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.
The TWriterProc writer procedure is a callback procedure which will be used by a TPersistent
(389) 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.
4.3.3
Variables
249
4.4
4.4.1
ActivateClassGroup
4.4.2
BeginGlobalLoading
4.4.3
BinToHex
Errors: No length checking is done, so if an invalid size is specified, an exception may follow.
See also: HexToBin (255)
4.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 (245) record with the given origin (ALeft,ATop) and dimensions
(AWidth,AHeight) filled 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 (259)
4.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 (448) calls that may be waiting for execution by the main thread. If any such
calls are waiting for execution by the main thread, they are executed at once, in the order that they
were scheduled.
The function returns True if any Synchronize method was executed.
TimeOut is the maximum amount of time (in milliseconds) that the CheckSynchronize routine
will wait for synchronisation requests to appear in the queue.
Calling this routine more often will ensure that synchronize requests are handled faster.
This routine may not be called from any thread other than the main thread, as it will execute the
waiting requests.
Threads may call the WakeMainThread (250) to signal the main thread that the synchronisation queue
contains items, and thus speed up the execution of the synchronize calls.
See also: TThread.Synchronize (448), WakeMainThread (250)
4.4.6
ClassGroupOf
4.4.7
CollectionsEqual
4.4.8
EndGlobalLoading
4.4.9
ExtractStrings
4.4.10
FindClass
252
4.4.11
FindGlobalComponent
4.4.12
FindIdentToInt
4.4.13
FindIntToIdent
4.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 (254)
253
4.4.15
GetClass
4.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 filling it.
See also: GetFixupReferenceNames (254), GlobalFixupReferences (254)
4.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 filling it.
See also: GetFixupInstanceNames (254), GlobalFixupReferences (254)
4.4.18
GlobalFixupReferences
4.4.19
GroupDescendentsWith
4.4.20
HexToBin
4.4.21
IdentToInt
4.4.22
InitComponentRes
4.4.23
InitInheritedComponent
4.4.24
IntToIdent
4.4.25
InvalidPoint
4.4.26
LineStart
256
4.4.27
NotifyGlobalLoading
4.4.28
ObjectBinaryToText
4.4.29
ObjectResourceToText
4.4.30
ObjectTextToBinary
4.4.31
ObjectTextToResource
257
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 (257), ObjectResourceToText (257)
4.4.32
Point
4.4.33
PointsEqual
4.4.34
ReadComponentRes
258
4.4.35
ReadComponentResEx
4.4.36
ReadComponentResFile
4.4.37
Rect
4.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
259
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 (262)
4.4.39
RegisterClass
4.4.40
RegisterClassAlias
4.4.41
RegisterClasses
4.4.42
RegisterComponents
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 (260), RegisterNoIcon (262)
4.4.43
RegisterFindGlobalComponentProc
4.4.44
RegisterInitComponentHandler
4.4.45
RegisterIntegerConsts
separate type declared using the type integer syntax. If a type of integer is defined 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 identifier and
integer value and vice versa. The functions IdentToInt (255) and IntToIdent (256) can be used to
implement these callback functions.
See also: TIdentToInt (242), TIntToIdent (242), IdentToInt (255), IntToIdent (256)
4.4.46
RegisterNoIcon
4.4.47
RegisterNonActiveX
4.4.48
RemoveFixupReferences
4.4.49
RemoveFixups
262
Description: RemoveFixups removes all entries for component Instance from the list of unresolved references.a
See also: RedirectFixupReferences (259), RemoveFixupReferences (262)
4.4.50
SmallPoint
4.4.51
StartClassGroup
4.4.52
UnRegisterClass
4.4.53
UnRegisterClasses
263
4.4.54
UnregisterFindGlobalComponentProc
4.4.55
UnRegisterModuleClasses
4.4.56
WriteComponentResFile
4.5
4.5.1
EBitsError
Description
When an index of a bit in a TBits (312) is out of the valid range (0 to Count-1) then a EBitsError
exception is raised.
264
4.6
EClassNotFound
4.6.1
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 (265)
4.7
EComponentError
4.7.1
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 (329), TComponent.Name (339)
4.8
EFCreateError
4.8.1
Description
When the operating system reports an error during creation of a new file in the Filestream Constructor
(349), a EFCreateError is raised.
See also: EStreamError (267), EFOpenError (265)
4.9
EFilerError
4.9.1
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 (267), EReadError (267)
4.10
4.10.1
EFOpenError
Description
When the operating system reports an error during the opening of a file in the Filestream Constructor
(349), a EFOpenError is raised.
See also: EStreamError (267), EFCreateError (265)
265
4.11
4.11.1
EInvalidImage
Description
This exception is not used by Free Pascal but is provided for Delphi compatibility.
4.12
4.12.1
EInvalidOperation
Description
This exception is not used in Free Pascal, it is defined for Delphi compatibiliy purposes only.
4.13
4.13.1
EListError
Description
If an error occurs in one of the TList (369) or TStrings (428) 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 (369), TStrings (428)
4.14
4.14.1
EMethodNotFound
Description
This exception is no longer used in the streaming system. This error is replaced by a EReadError
(267).
See also: EFilerError (265), EReadError (267)
4.15
4.15.1
EObserver
Description
EObserver is an error that is raised when an object is registered as an observer, and it does not
implement the IFPObserver (271) interface.
See also: IFPObserver (271), IFPObserved.FPOAttachObserver (270)
266
4.16
4.16.1
EOutOfResources
Description
This exception is not used in Free Pascal, it is defined for Delphi compatibiliy purposes only.
4.17
4.17.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 (382)
4.18
4.18.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 (265), EWriteError (268)
4.19
4.19.1
EResNotFound
Description
This exception is not used by Free Pascal but is provided for Delphi compatibility.
4.20
4.20.1
EStreamError
Description
An EStreamError is raised when an error occurs during reading from or writng to a stream:
Possible causes are
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 (265)
267
4.21
4.21.1
EStringListError
Description
When an error occurs in one of the methods of TStrings (428) 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 (423) when TStringList.Duplicates
(426) is False.
See also: TStrings (428), TStringList (423)
4.22
4.22.1
EThread
Description
4.23
4.23.1
EThreadDestroyCalled
Description
4.24
4.24.1
EThreadExternalException
Description
4.25
4.25.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 (265), EReadError (267)
268
4.26
4.26.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 notifications when the component is destroyed.
4.26.2
Page
269
269
4.26.3
Method overview
Method
Modified
Notification
Description
Notify that the component is modified.
Notification of owner changes
IDesignerNotify.Modified
4.26.4
IDesignerNotify.Notification
4.27
4.27.1
IFPObserved
Description
IFPObserved is an interface which can be implemented in objects that must be observable. Objects that wish to observe the object can register themselves with the FPOAttachObserver (233) call,
and must be detached using the FPODetachObserver (233) call.
This interface is not reference counted, so care must be taken that the ooFree message is sent with
FPONotifyObservers (233) when the object is freed.
See also: FPONotifyObservers (233)
269
4.27.2
Page
270
270
270
4.27.3
Method overview
Method
FPOAttachObserver
FPODetachObserver
FPONotifyObservers
Description
Attach a new observer to the object
Remove an observer from the list of observers.
Notify all observers
IFPObserved.FPOAttachObserver
4.27.4
IFPObserved.FPODetachObserver
4.27.5
IFPObserved.FPONotifyObservers
270
Description: FPONotifyObservers notifies all observers of the object that a change has occurred. It calls
FPOObservedChanged (271) on the IFPObserver (271) interface of all attached objects, and passes
on ASender (normally this is Self), AOperation and Data. What Data is, depends on the
implementor of the interface.
There is no guaranteed order in which the change notifications are delivered to the observers. This is
an implementation-specific detail, which should not be relied upon in any way.
See also: IFPObserver (271), FPOObservedChanged (271), FPODetachObserver (233), FPOAttachObserver
(233)
4.28
4.28.1
IFPObserver
Description
IFPObserver is the interface an object must implement if it wishes to receive change notifications
from another object. The presence of this interface will be checked when the object registers itself
using IFPObserver.FPOAttachObserver (271). The change notifications arrive because the FPOObservedChanged (233) method is called by the observed object.
See also: IFPObserved (269), FPOAttachObserver (270)
4.28.2
Page
271
4.28.3
Method overview
Method
FPOObservedChanged
Description
Entry point for change notifications
IFPObserver.FPOObservedChanged
4.29
4.29.1
IInterfaceComponentReference
Description
271
4.29.2
Page
272
4.29.3
Method overview
Method
GetComponent
Description
Return component instance
IInterfaceComponentReference.GetComponent
4.30
4.30.1
IInterfaceList
Description
IInterfaceList is an interface for maintaining a list of interfaces, strongly resembling the standard TList (369) 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 (369)
4.30.2
Page
275
274
274
275
275
273
273
273
275
275
276
276
273
276
274
274
276
Method overview
Method
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 first 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.
272
4.30.3
Page
276
277
277
4.30.4
Property overview
Properties
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.
IInterfaceList.Get
4.30.5
IInterfaceList.GetCapacity
4.30.6
IInterfaceList.GetCount
4.30.7
IInterfaceList.Put
4.30.8
IInterfaceList.SetCapacity
4.30.9
IInterfaceList.SetCount
4.30.10
IInterfaceList.Clear
4.30.11
IInterfaceList.Delete
274
4.30.12
IInterfaceList.Exchange
4.30.13
IInterfaceList.First
4.30.14
IInterfaceList.IndexOf
4.30.15
IInterfaceList.Add
4.30.16
IInterfaceList.Insert
4.30.17
IInterfaceList.Last
4.30.18
IInterfaceList.Remove
4.30.19
IInterfaceList.Lock
4.30.20
IInterfaceList.Unlock
4.30.21
IInterfaceList.Capacity
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 (376), IInterfaceList.Count (277)
4.30.22
IInterfaceList.Count
4.30.23
IInterfaceList.Items
4.31
4.31.1
IStreamPersist
Description
IStreamPersist defines 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 (389), TComponent (329), TStream (408)
4.31.2
Page
278
278
Method overview
Method
LoadFromStream
SaveToStream
Description
Load persistent data from stream.
Save persistent data to stream.
277
4.31.3
IStreamPersist.LoadFromStream
4.31.4
IStreamPersist.SaveToStream
4.32
4.32.1
IStringsAdapter
Description
4.32.2
Page
278
278
4.32.3
Method overview
Method
ReferenceStrings
ReleaseStrings
Description
Add a reference to the indicated strings.
Release the reference to the strings.
IStringsAdapter.ReferenceStrings
4.32.4
IStringsAdapter.ReleaseStrings
278
4.33
4.33.1
IVCLComObject
Description
4.33.2
Page
280
280
279
279
280
280
4.33.3
Method overview
Method
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
IVCLComObject.GetTypeInfoCount
4.33.4
IVCLComObject.GetTypeInfo
279
4.33.5
IVCLComObject.GetIDsOfNames
4.33.6
IVCLComObject.Invoke
4.33.7
IVCLComObject.SafeCallException
4.33.8
IVCLComObject.FreeOnRelease
280
Description: FreeOnRelease is called by TComponent.FreeOnRelease (334) for the IVCLComObject interface implemented by TComponent.
See also: TComponent.FreeOnRelease (334)
4.34
4.34.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 (300) 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 (300)
4.34.2
Page
282
283
282
281
283
283
284
284
283
285
285
286
286
285
286
287
284
287
287
288
282
288
288
288
4.34.3
Method overview
Method
BeginComponent
BeginProperty
BeginRootComponent
NextValue
Read
ReadBinary
ReadCurrency
ReadDate
ReadFloat
ReadIdent
ReadInt16
ReadInt32
ReadInt64
ReadInt8
ReadSet
ReadSignature
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 float value from the stream.
Read an identifier 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.
TAbstractObjectReader.NextValue
281
Virtual;
Abstract
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 (282)
4.34.4
TAbstractObjectReader.ReadValue
Virtual;
Abstract
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 (282)
4.34.5
TAbstractObjectReader.BeginRootComponent
Virtual;
Abstract
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 immediately followed by a call to BeginComponent (282).
See also: TAbstractObjectReader.BeginComponent (282)
4.34.6
TAbstractObjectReader.BeginComponent
282
4.34.7
TAbstractObjectReader.BeginProperty
Virtual;
Abstract
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 (282)
4.34.8
TAbstractObjectReader.Read
Virtual;
Abstract
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 (303), TReader.Read (397)
4.34.9
TAbstractObjectReader.ReadBinary
Virtual;
Abstract
Visibility: public
Description: ReadBinary is called when binary data should be read from the stream (i.e. after ReadValue (282)
returned a valuetype of vaBinary). The data should be stored in the DestData memory stream
by descendent classes.
See also: TAbstractObjectReader.ReadFloat (283), TAbstractObjectReader.ReadDate (284), TAbstractObjectReader.ReadSingle (284), TAbstractObjectReader.ReadIdent (285), TAbstractObjectReader.ReadInt8
(285), TAbstractObjectReader.ReadInt16 (285), TAbstractObjectReader.ReadInt32 (286), TAbstractObjectReader.ReadInt64 (286), TabstractObjectReader.ReadSet (286), TabstractObjectReader.ReadStr
(287), TabstractObjectReader.ReadString (287)
4.34.10
TAbstractObjectReader.ReadFloat
Virtual;
Abstract
Visibility: public
Description: ReadFloat is called by the streaming system when it wants to read a float from the stream (i.e.
after ReadValue (282) returned a valuetype of vaExtended). The return value should be the value
of the float.
283
See also: TAbstractObjectReader.ReadFloat (283), TAbstractObjectReader.ReadDate (284), TAbstractObjectReader.ReadSingle (284), TAbstractObjectReader.ReadIdent (285), TAbstractObjectReader.ReadInt8
(285), TAbstractObjectReader.ReadInt16 (285), TAbstractObjectReader.ReadInt32 (286), TAbstractObjectReader.ReadInt64 (286), TabstractObjectReader.ReadSet (286), TabstractObjectReader.ReadStr
(287), TabstractObjectReader.ReadString (287)
4.34.11
TAbstractObjectReader.ReadSingle
Virtual;
Abstract
Visibility: public
Description: ReadSingle is called by the streaming system when it wants to read a single-type float from the
stream (i.e. after ReadValue (282) returned a valuetype of vaSingle). The return value should be
the value of the float.
See also: TAbstractObjectReader.ReadFloat (283), TAbstractObjectReader.ReadDate (284), TAbstractObjectReader.ReadSingle (284), TAbstractObjectReader.ReadIdent (285), TAbstractObjectReader.ReadInt8
(285), TAbstractObjectReader.ReadInt16 (285), TAbstractObjectReader.ReadInt32 (286), TAbstractObjectReader.ReadInt64 (286), TabstractObjectReader.ReadSet (286), TabstractObjectReader.ReadStr
(287), TabstractObjectReader.ReadString (287)
4.34.12
TAbstractObjectReader.ReadDate
Virtual;
Abstract
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 (282) returned a valuetype of vaDate). The return value should be the
date/time value. (This value can be stored as a float, since TDateTime is nothing but a float.)
See also: TAbstractObjectReader.ReadFloat (283), TAbstractObjectReader.ReadSingle (284), TAbstractObjectReader.ReadIdent (285), TAbstractObjectReader.ReadInt8 (285), TAbstractObjectReader.ReadInt16
(285), TAbstractObjectReader.ReadInt32 (286), TAbstractObjectReader.ReadInt64 (286), TabstractObjectReader.ReadSet (286), TabstractObjectReader.ReadStr (287), TabstractObjectReader.ReadString
(287)
4.34.13
TAbstractObjectReader.ReadCurrency
Virtual;
Abstract
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 (292)
284
4.34.14
TAbstractObjectReader.ReadIdent
Virtual;
Abstract
Visibility: public
Description: ReadIdent is called by the streaming system if it expects to read an identifier of type ValueType
from the stream after a call to ReadValue (282) returned vaIdent. The identifier should be returned
as a string. Note that in some cases the identifier does not actually have to be in the stream. The
following table indicates which identifiers must actually be read:
Table 4.20:
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 (283), TAbstractObjectReader.ReadDate (284), TAbstractObjectReader.ReadSingle (284), TAbstractObjectReader.ReadInt8 (285), TAbstractObjectReader.ReadInt16
(285), TAbstractObjectReader.ReadInt32 (286), TAbstractObjectReader.ReadInt64 (286), TabstractObjectReader.ReadSet (286), TabstractObjectReader.ReadStr (287), TabstractObjectReader.ReadString
(287)
4.34.15
TAbstractObjectReader.ReadInt8
Virtual;
Abstract
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 (282) 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 (283), TAbstractObjectReader.ReadDate (284), TAbstractObjectReader.ReadSingle (284), TAbstractObjectReader.ReadIdent (285), TAbstractObjectReader.ReadInt16
(285), TAbstractObjectReader.ReadInt32 (286), TAbstractObjectReader.ReadInt64 (286), TabstractObjectReader.ReadSet (286), TabstractObjectReader.ReadStr (287), TabstractObjectReader.ReadString
(287)
4.34.16
TAbstractObjectReader.ReadInt16
Virtual;
Visibility: public
285
Abstract
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 (282) 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 (283), TAbstractObjectReader.ReadDate (284), TAbstractObjectReader.ReadSingle (284), TAbstractObjectReader.ReadIdent (285), TAbstractObjectReader.ReadInt8
(285), TAbstractObjectReader.ReadInt32 (286), TAbstractObjectReader.ReadInt64 (286), TabstractObjectReader.ReadSet (286), TabstractObjectReader.ReadStr (287), TabstractObjectReader.ReadString
(287)
4.34.17
TAbstractObjectReader.ReadInt32
Virtual;
Abstract
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 (282) 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 (283), TAbstractObjectReader.ReadDate (284), TAbstractObjectReader.ReadSingle (284), TAbstractObjectReader.ReadIdent (285), TAbstractObjectReader.ReadInt8
(285), TAbstractObjectReader.ReadInt16 (285), TAbstractObjectReader.ReadInt64 (286), TabstractObjectReader.ReadSet (286), TabstractObjectReader.ReadStr (287), TabstractObjectReader.ReadString
(287)
4.34.18
TAbstractObjectReader.ReadInt64
Virtual;
Abstract
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 (282) 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 (283), TAbstractObjectReader.ReadDate (284), TAbstractObjectReader.ReadSingle (284), TAbstractObjectReader.ReadIdent (285), TAbstractObjectReader.ReadInt8
(285), TAbstractObjectReader.ReadInt16 (285), TAbstractObjectReader.ReadInt32 (286), TabstractObjectReader.ReadSet (286), TabstractObjectReader.ReadStr (287), TabstractObjectReader.ReadString
(287)
4.34.19
TAbstractObjectReader.ReadSet
Virtual;
Abstract
Description: This method is called by the streaming system if it expects to read a set from the stream (i.e. after
ReadValue (282) 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 (283), TAbstractObjectReader.ReadDate (284), TAbstractObjectReader.ReadSingle (284), TAbstractObjectReader.ReadIdent (285), TAbstractObjectReader.ReadInt8
(285), TAbstractObjectReader.ReadInt16 (285), TAbstractObjectReader.ReadInt32 (286), TAbstractObjectReader.ReadInt64 (286), TabstractObjectReader.ReadStr (287), TabstractObjectReader.ReadString
(287)
4.34.20
TAbstractObjectReader.ReadSignature
Virtual;
Abstract
Visibility: public
4.34.21
TAbstractObjectReader.ReadStr
Virtual;
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 (282) returned a valuetype of vaLString,vaWstring or vaString). The return
value is the string.
See also: TAbstractObjectReader.ReadFloat (283), TAbstractObjectReader.ReadDate (284), TAbstractObjectReader.ReadSingle (284), TAbstractObjectReader.ReadIdent (285), TAbstractObjectReader.ReadInt8
(285), TAbstractObjectReader.ReadInt16 (285), TAbstractObjectReader.ReadInt32 (286), TAbstractObjectReader.ReadInt64 (286), TabstractObjectReader.ReadSet (286), TabstractObjectReader.ReadString
(287)
4.34.22
TAbstractObjectReader.ReadString
Virtual
Visibility: public
Description: ReadStr is called by the streaming system if it expects to read a string from the stream (i.e. after
ReadValue (282) returned a valuetype of vaLString,vaWstring or vaString). The return
value is the string.
See also: TAbstractObjectReader.ReadFloat (283), TAbstractObjectReader.ReadDate (284), TAbstractObjectReader.ReadSingle (284), TAbstractObjectReader.ReadIdent (285), TAbstractObjectReader.ReadInt8
(285), TAbstractObjectReader.ReadInt16 (285), TAbstractObjectReader.ReadInt32 (286), TAbstractObjectReader.ReadInt64 (286), TabstractObjectReader.ReadSet (286), TabstractObjectReader.ReadStr
(287)
287
4.34.23
TAbstractObjectReader.ReadWideString
Virtual;
Abstract
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 (293)
4.34.24
TAbstractObjectReader.ReadUnicodeString
Virtual;
Abstract
Visibility: public
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 (311), TAbstractObjectReader.ReadWideString (288)
4.34.25
TAbstractObjectReader.SkipComponent
Virtual
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 (282), TAbstractObjectReader.SkipValue (288)
4.34.26
TAbstractObjectReader.SkipValue
Virtual;
Abstract
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 (288)
288
4.35
4.35.1
TAbstractObjectWriter
Description
4.35.2
Page
289
289
290
290
290
290
290
291
291
292
291
291
292
292
293
293
290
291
293
292
293
292
293
4.35.3
Method overview
Method
BeginCollection
BeginComponent
BeginList
BeginProperty
EndList
EndProperty
Write
WriteBinary
WriteBoolean
WriteCurrency
WriteDate
WriteFloat
WriteIdent
WriteInteger
WriteMethodName
WriteSet
WriteSignature
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 float value to the stream.
Writes an identifier 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
TAbstractObjectWriter.BeginCollection
Virtual;
Abstract
Visibility: public
Description: Start writing a collection.
4.35.4
TAbstractObjectWriter.BeginComponent
289
4.35.5
TAbstractObjectWriter.WriteSignature
Virtual;
Abstract
Visibility: public
4.35.6
TAbstractObjectWriter.BeginList
Virtual;
Abstract
Visibility: public
Description: Start writing a list.
4.35.7
TAbstractObjectWriter.EndList
Virtual;
Abstract
Visibility: public
Description: Mark the end of a list.
4.35.8
TAbstractObjectWriter.BeginProperty
Virtual;
Abstract
Visibility: public
Description: Start writing a property
4.35.9
TAbstractObjectWriter.EndProperty
Virtual;
Abstract
Visibility: public
Description: Marks the end of writing of a property.
4.35.10
TAbstractObjectWriter.Write
Virtual;
Abstract
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 (309), TWriter.Write (461)
290
4.35.11
TAbstractObjectWriter.WriteBinary
Virtual;
Abstract
Visibility: public
Description: Writes binary data to the stream.
4.35.12
TAbstractObjectWriter.WriteBoolean
Virtual;
Abstract
Visibility: public
Description: Writes a boolean value to the stream.
4.35.13
TAbstractObjectWriter.WriteFloat
Virtual;
Abstract
Visibility: public
Description: Writes a float value to the stream.
4.35.14
TAbstractObjectWriter.WriteSingle
Virtual;
Abstract
Visibility: public
Description: Writes a single-type real value to the stream.
4.35.15
TAbstractObjectWriter.WriteDate
291
Virtual;
Abstract
4.35.16
TAbstractObjectWriter.WriteCurrency
Virtual;
Abstract
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 (284)
4.35.17
TAbstractObjectWriter.WriteIdent
Virtual;
Abstract
Visibility: public
Description: Writes an identifier to the stream.
4.35.18
TAbstractObjectWriter.WriteInteger
Virtual;
Abstract
Visibility: public
Description: Writes an integer value to the stream
4.35.19
TAbstractObjectWriter.WriteUInt64
Virtual;
Abstract
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 (310)
4.35.20
TAbstractObjectWriter.WriteVariant
Virtual;
Abstract
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 (312)
292
4.35.21
TAbstractObjectWriter.WriteMethodName
Virtual;
Abstract
Visibility: public
Description: Writes a methodname to the stream.
4.35.22
TAbstractObjectWriter.WriteSet
Virtual;
Abstract
Visibility: public
Description: Writes a set value to the stream.
4.35.23
TAbstractObjectWriter.WriteString
Virtual;
Abstract
Visibility: public
Description: Writes a string value to the stream.
4.35.24
TAbstractObjectWriter.WriteWideString
Virtual;
Abstract
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 (288)
4.35.25
TAbstractObjectWriter.WriteUnicodeString
Virtual
Visibility: public
Description: WriteUnicodeString must be overridden by descendent classes to write a unicodestring (valuetype vaUString) value to the stream.
See also: TBinaryObjectWriter.WriteUnicodeString (311)
293
4.36
4.36.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 (298), TComponent (329)
4.36.2
Page
294
294
296
295
295
296
296
296
295
4.36.3
Page
297
297
297
4.36.4
Method overview
Method
Create
Destroy
Execute
ExecuteTarget
HandlesTarget
RegisterChanges
UnRegisterChanges
Update
UpdateTarget
Description
Creates a new instance of a TBasicAction (294) class.
Destroys the action.
Triggers the OnExecute (297) 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 (297) event
Notify client controls when the action updates itself.
Property overview
Properties
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.
TBasicAction.Create
Override
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 (294), AssignClient (294)
4.36.5
TBasicAction.Destroy
Override
294
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.
4.36.6
TBasicAction.HandlesTarget
Virtual
Visibility: public
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 (295), ExecuteTarget (295)
4.36.7
TBasicAction.UpdateTarget
Virtual
Visibility: public
Description: UpdateTarget should update the client control specified 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 (295), ExecuteTarget (295)
4.36.8
TBasicAction.ExecuteTarget
Virtual
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 (295), UpdateTarget (295), Execute (296)
295
4.36.9
TBasicAction.Execute
Dynamic
Visibility: public
Description: Execute triggers the OnExecute event, if one is assigned. It returns True if the event handler
was called, False otherwise.
4.36.10
TBasicAction.RegisterChanges
4.36.11
TBasicAction.UnRegisterChanges
4.36.12
TBasicAction.Update
Virtual
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 (297) event, and perform any checks in that handler.
See also: OnUpdate (297), Execute (296), UpdateTarget (295)
296
4.36.13
TBasicAction.ActionComponent
4.36.14
TBasicAction.OnExecute
4.36.15
TBasicAction.OnUpdate
297
4.37
4.37.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 (294)
4.37.2
Page
298
298
299
299
4.37.3
Page
299
300
4.37.4
Method overview
Method
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
Property overview
Properties
Action
OnChange
Access
rw
rw
Description
The action to which the link was assigned.
Event handler triggered when the actions properties change
TBasicActionLink.Create
Virtual
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 (298)
4.37.5
TBasicActionLink.Destroy
Override
Visibility: public
298
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 (298)
4.37.6
TBasicActionLink.Execute
Virtual
Visibility: public
Description: Execute sets the ActionComponent (297) property of the associated Action (299) to AComponent
and then calls the Actions execute (296) 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 (299), TBasicAction.ActionComponent (297), TBasicAction.Execute (296), TBasicAction.onExecute
(297)
4.37.7
TBasicActionLink.Update
Virtual
Visibility: public
Description: Update calls the associated Actions Update (296) methoda.
Component programmers can override the Update method to provide additional processing when
the Update method occurs.
4.37.8
TBasicActionLink.Action
299
4.37.9
TBasicActionLink.OnChange
4.38
4.38.1
TBinaryObjectReader
Description
The TBinaryObjectReader class reads component data stored in binary form in a file. For
this, it overrides or implements all abstract methods from TAbstractObjectReader (281). 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
(413) call should be used.
See also: TAbstractObjectReader (281), TBinaryObjectWriter (307)
300
4.38.2
Page
302
302
302
301
301
302
303
303
304
303
303
304
304
305
305
304
305
305
303
305
306
306
302
306
306
307
4.38.3
Method overview
Method
BeginComponent
BeginProperty
BeginRootComponent
Create
Destroy
NextValue
Read
ReadBinary
ReadCurrency
ReadDate
ReadFloat
ReadIdent
ReadInt16
ReadInt32
ReadInt64
ReadInt8
ReadSet
ReadSignature
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 float value
Read an identifier
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 float 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
TBinaryObjectReader.Create
4.38.4
TBinaryObjectReader.Destroy
Override
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 (301)
301
4.38.5
TBinaryObjectReader.NextValue
Override
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 (281)
4.38.6
TBinaryObjectReader.ReadValue
Override
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 (281)
4.38.7
TBinaryObjectReader.BeginRootComponent
Override
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 (281)
4.38.8
TBinaryObjectReader.BeginComponent
4.38.9
TBinaryObjectReader.BeginProperty
Override
Visibility: public
Description: This method is simply the implementation for a binary stream of the abstract method introduced in
TAbstractObjectReader (281)
302
4.38.10
TBinaryObjectReader.Read
Override
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 (283), TReader.Read (397)
4.38.11
TBinaryObjectReader.ReadBinary
Override
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 (281)
4.38.12
TBinaryObjectReader.ReadFloat
Override
Visibility: public
Description: ReadFloat reads a float value from a binary stream.
This method is simply the implementation for a binary stream of the abstract method introduced in
TAbstractObjectReader (281)
4.38.13
TBinaryObjectReader.ReadSingle
Override
Visibility: public
Description: ReadSingle reads a single-sized float value from a binary stream.
This method is simply the implementation for a binary stream of the abstract method introduced in
TAbstractObjectReader (281)
4.38.14
TBinaryObjectReader.ReadDate
Override
Visibility: public
303
4.38.15
TBinaryObjectReader.ReadCurrency
Override
Visibility: public
Description: var>ReadCurrency reads a currency-typed value from a binary stream. It is the implementation
of the method introduced in TAbstractObjectReader (281).
See also: TAbstractObjectReader.ReadCurrency (284), TBinaryObjectWriter.WriteCurrency (310)
4.38.16
TBinaryObjectReader.ReadIdent
Override
Visibility: public
Description: ReadIdent reads an identifier from a binary stream.
This method is simply the implementation for a binary stream of the abstract method introduced in
TAbstractObjectReader (281)
4.38.17
TBinaryObjectReader.ReadInt8
Override
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 (281)
4.38.18
TBinaryObjectReader.ReadInt16
Override
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 (281)
304
4.38.19
TBinaryObjectReader.ReadInt32
Override
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 (281)
4.38.20
TBinaryObjectReader.ReadInt64
Override
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 (281)
4.38.21
TBinaryObjectReader.ReadSet
Override
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 (281)
4.38.22
TBinaryObjectReader.ReadSignature
Override
Visibility: public
4.38.23
TBinaryObjectReader.ReadStr
Override
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 (281)
305
4.38.24
TBinaryObjectReader.ReadString
Override
Visibility: public
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 (281)
4.38.25
TBinaryObjectReader.ReadWideString
Override
Visibility: public
Description: var>ReadWideString reads a widestring-typed value from a binary stream. It is the implementation of the method introduced in TAbstractObjectReader (281).
See also: TAbstractObjectReader.ReadWideString (288), TBinaryObjectWriter.WriteWideString (311)
4.38.26
TBinaryObjectReader.ReadUnicodeString
Override
Visibility: public
Description: ReadUnicodeString is overridden by TBinaryObjectReaderto read a UnicodeString value
from the binary stream.
See also: TAbstractObjectReader.ReadUnicodeString (288)
4.38.27
TBinaryObjectReader.SkipComponent
Override
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 (281).
306
4.38.28
TBinaryObjectReader.SkipValue
Override
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 (281)
4.39
4.39.1
TBinaryObjectWriter
Description
4.39.2
Page
308
308
308
309
307
308
308
309
309
309
309
310
310
309
310
310
311
311
308
310
311
311
310
311
312
311
4.39.3
Method overview
Method
BeginCollection
BeginComponent
BeginList
BeginProperty
Create
Destroy
EndList
EndProperty
Write
WriteBinary
WriteBoolean
WriteCurrency
WriteDate
WriteFloat
WriteIdent
WriteInteger
WriteMethodName
WriteSet
WriteSignature
WriteSingle
WriteStr
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 float value to the stream.
Writes an identifier 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.
Write a string to the binary 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
TBinaryObjectWriter.Create
307
Visibility: public
Description: Creates a new instance of a binary object writer.
4.39.4
TBinaryObjectWriter.Destroy
Override
Visibility: public
Description: Destroys an instance of the binary object writer.
4.39.5
TBinaryObjectWriter.WriteSignature
Override
Visibility: public
4.39.6
TBinaryObjectWriter.BeginCollection
Override
Visibility: public
4.39.7
TBinaryObjectWriter.BeginComponent
4.39.8
TBinaryObjectWriter.BeginList
Override
Visibility: public
4.39.9
TBinaryObjectWriter.EndList
Override
Visibility: public
308
4.39.10
TBinaryObjectWriter.BeginProperty
Override
Visibility: public
4.39.11
TBinaryObjectWriter.EndProperty
Override
Visibility: public
4.39.12
TBinaryObjectWriter.Write
Override
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 (290), TWriter.Write (461)
4.39.13
TBinaryObjectWriter.WriteBinary
Override
Visibility: public
4.39.14
TBinaryObjectWriter.WriteBoolean
Override
Visibility: public
4.39.15
TBinaryObjectWriter.WriteFloat
309
Override
4.39.16
TBinaryObjectWriter.WriteSingle
Override
Visibility: public
4.39.17
TBinaryObjectWriter.WriteDate
Override
Visibility: public
4.39.18
TBinaryObjectWriter.WriteCurrency
Override
Visibility: public
Description: WriteCurrency writes a currency-typed value to a binary stream. It is the implementation of the
method introduced in TAbstractObjectWriter (289).
See also: TAbstractObjectWriter.WriteCurrency (292)
4.39.19
TBinaryObjectWriter.WriteIdent
Override
Visibility: public
4.39.20
TBinaryObjectWriter.WriteInteger
Override
Visibility: public
4.39.21
TBinaryObjectWriter.WriteUInt64
Override
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 (292)
310
4.39.22
TBinaryObjectWriter.WriteMethodName
Override
Visibility: public
4.39.23
TBinaryObjectWriter.WriteSet
Override
Visibility: public
4.39.24
TBinaryObjectWriter.WriteStr
4.39.25
TBinaryObjectWriter.WriteString
Override
Visibility: public
4.39.26
TBinaryObjectWriter.WriteWideString
Override
Visibility: public
Description: WriteWidestring writes a widestring-typed value to a binary stream. It is the implementation
of the method introduced in TAbstractObjectWriter (289).
See also: TAbstractObjectWriter.WriteWidestring (293)
4.39.27
TBinaryObjectWriter.WriteUnicodeString
Override
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 (293)
311
4.39.28
TBinaryObjectWriter.WriteVariant
Override
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)
float and string types are written.
Errors: If a non-supported type is written, then an EWriteError exception is.
4.40
4.40.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
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 store them in a conventional array.
TBits introduces methods to store and retrieve bit values, apply masks, and search for bits.
4.40.2
Page
314
314
314
313
313
316
316
317
317
315
313
316
315
317
314
316
313
315
4.40.3
Page
318
318
Method overview
Method
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 first 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 first bit that is set to False.
Performs an or operation on the bits.
Sets the start position for FindNextBit (317) and FindPrevBit (317)
Turn a particular bit on.
Performs a xor operation on the bits.
Property overview
Properties
Bits
Size
Access
rw
rw
Description
Access to all bits in the array.
Current size of the array of bits.
312
4.40.4
TBits.Create
Virtual
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 (313)
4.40.5
TBits.Destroy
Override
Visibility: public
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 (313)
4.40.6
TBits.GetFSize
4.40.7
TBits.SetOn
4.40.8
TBits.Clear
4.40.9
TBits.Clearall
4.40.10
TBits.AndBits
4.40.11
TBits.OrBits
Errors: None.
See also: ClearAll (314), andBits (314), XOrBits (315), NotBits (315)
4.40.12
TBits.XorBits
4.40.13
TBits.NotBits
4.40.14
TBits.Get
315
4.40.15
TBits.Grow
4.40.16
TBits.Equals
Overload
Visibility: public
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 (314), andBits (314), OrBits (314), XOrBits (315)
4.40.17
TBits.SetIndex
Synopsis: Sets the start position for FindNextBit (317) and FindPrevBit (317)
Declaration: procedure SetIndex(Index: LongInt)
Visibility: public
Description: SetIndex sets the search start position forFindNextBit (317) and FindPrevBit (317) to Index.
This means that these calls will start searching from position Index.
This mechanism provides an alternative to FindFirstBit (316) which can also be used to position for
the FindNextBit and FindPrevBit calls.
Errors: None.
See also: FindNextBit (317), FindPrevBit (317), FindFirstBit (316), OpenBit (317)
4.40.18
TBits.FindFirstBit
316
Description: FindFirstBit searches for the first 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 first search returned a positive result, the found
position is saved, and the FindNextBit (317) and FindPrevBit (317) 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
(316) instead.
Errors: None.
See also: FindNextBit (317), FindPrevBit (317), OpenBit (317), SetIndex (316)
4.40.19
TBits.FindNextBit
4.40.20
TBits.FindPrevBit
4.40.21
TBits.OpenBit
Synopsis: Returns the position of the first bit that is set to False.
Declaration: function OpenBit : LongInt
Visibility: public
317
Description: OpenBit returns the position of the first 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 (316), FindPrevBit (317), FindFirstBit (316), SetIndex (316)
4.40.22
TBits.Bits
4.40.23
TBits.Size
4.41
4.41.1
TBytesStream
Description
TBytesStream is a stream that uses an array of byte (TBytes (233)) to keep the stream data. it
overrides the TMemoryStream (378) memory allocation routine to use the array of bytes. The array
of bytes is exposed through the Bytes (233) property.
See also: TBytes (233), TMemoryStream (378), Bytes (233)
4.41.2
Page
319
Method overview
Method
Create
Description
Create a new instance of the stream, initializing it with an array of bytes
318
4.41.3
Page
319
4.41.4
Property overview
Properties
Bytes
Access
r
Description
The stream data as an array of bytes.
TBytesStream.Create
Synopsis: Create a new instance of the stream, initializing it with an array of bytes
Declaration: constructor Create(const ABytes: TBytes);
Overload
Visibility: public
Description: Create creates a new instance and initializes the memory with the data in ABytes.
See also: TBytes (233), TMemoryStream (378), Bytes (233)
4.41.5
TBytesStream.Bytes
4.42
4.42.1
TCollection
Description
319
4.42.2
Method overview
Page
321
321
321
322
320
322
320
322
324
323
Method
Add
Assign
BeginUpdate
Clear
Create
Delete
Destroy
EndUpdate
Exchange
FindItemID
323
323
323
321
324
GetEnumerator
GetNamePath
Insert
Owner
Sort
4.42.3
Page
324
325
325
4.42.4
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
(328) property.
Create an IEnumerator instance
Overrides TPersistent.GetNamePath (391) to return a proper pathname.
Insert an item in the collection.
Owner of the collection.
Sort the items in the collection
Property overview
Properties
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.
TCollection.Create
4.42.5
TCollection.Destroy
Synopsis: Destroys the collection and frees all the objects it manages.
Declaration: destructor Destroy;
Override
Visibility: public
Description: Destroy first clears the collection, and then frees all memory allocated to this instance.
Dont call Destroy directly, call Free instead.
See also: TCollection.Create (320)
320
4.42.6
TCollection.Owner
4.42.7
TCollection.Add
4.42.8
TCollection.Assign
Override
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 (390), TCollectionItem (327)
4.42.9
TCollection.BeginUpdate
Virtual
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 (319) 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:
321
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 (322), even in case of an exception.
See also: TCollection.EndUpdate (322), TCollection.Changed (319), TCollection.Update (319)
4.42.10
TCollection.Clear
4.42.11
TCollection.EndUpdate
Virtual
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 (319) it should always be used in conjunction with TCollection.BeginUpdate (321),
preferably in the Finally section of a Try ... Finally block.
See also: TCollection.BeginUpdate (321), TCollection.Changed (319), TCollection.Update (319)
4.42.12
TCollection.Delete
322
4.42.13
TCollection.GetEnumerator
4.42.14
TCollection.GetNamePath
Override
Visibility: public
Description: GetNamePath returns the name path for this collection. If the following conditions are satisfied:
1.There is an owner object.
2.The owner object returns a non-empty name path.
3.The TCollection.Propname (319) 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 satisfied, then the classname is returned.
See also: TCollection.GetOwner (319), TCollection.Propname (319)
4.42.15
TCollection.Insert
4.42.16
TCollection.FindItemID
Synopsis: Searches for an Item in the collection, based on its TCollectionItem.ID (328) property.
Declaration: function FindItemID(ID: Integer) : TCollectionItem
Visibility: public
323
Description: FindItemID searches through the collection for the item that has a value of ID for its TCollectionItem.ID (328) 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 (325), TCollectionItem.ID (328)
4.42.17
TCollection.Exchange
4.42.18
TCollection.Sort
4.42.19
TCollection.Count
324
4.42.20
TCollection.ItemClass
4.42.21
TCollection.Items
4.43
4.43.1
TCollectionEnumerator
Description
TCollectionEnumerator implements the #rtl.system.IEnumerator (1459) interface for the TCollection (319) class, so the TCollection class can be used in a for ... in loop. It is returned
by the TCollection.GetEnumerator (323) method of TCollection.
See also: TCollection (319), TCollection.GetEnumerator (323), #rtl.system.IEnumerator (1459)
4.43.2
Page
326
326
326
Method overview
Method
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.
325
4.43.3
Page
326
4.43.4
Property overview
Properties
Current
Access
r
Description
Current pointer in the list
TCollectionEnumerator.Create
4.43.5
TCollectionEnumerator.GetCurrent
4.43.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 (326)
4.43.7
TCollectionEnumerator.Current
4.44
4.44.1
TCollectionItem
Description
TCollectionItem and TCollection (319) 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 (329), TCollection.Index (319) and TCollectionItem.ID (328).
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 (319) 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 (319)
4.44.2
Page
327
327
328
4.44.3
Page
328
329
328
329
4.44.4
Method overview
Method
Create
Destroy
GetNamePath
Description
Creates a new instance of this collection item.
Destroyes this collection item.
Returns the namepath of this collection item.
Property overview
Properties
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
(325) property.
TCollectionItem.Create
Virtual
Visibility: public
Description: Create instantiates a new item in a TCollection (319). It is called by the TCollection.Add (321)
function and should under normal circumstances never be called directly. called
See also: TCollectionItem.Destroy (327)
4.44.5
TCollectionItem.Destroy
Override
Visibility: public
327
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 (327)
4.44.6
TCollectionItem.GetNamePath
Override
Visibility: public
Description: GetNamePath overrides the TPersistent.GetNamePath (391) method to return the name of the
managing collection and appends its TCollectionItem.Index (329) property.
See also: TCollectionItem.Collection (328), TPersistent.GetNamePath (391), TCollectionItem.Index (329)
4.44.7
TCollectionItem.Collection
4.44.8
TCollectionItem.ID
328
4.44.9
TCollectionItem.Index
Synopsis: Index of the item in its managing collection TCollection.Items (325) 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 (325) 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 first 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 (328) property does not form a continuous series, but can also be used to
identify an item.
See also: TCollectionItem.ID (328), TCollection.Items (325)
4.44.10
TCollectionItem.DisplayName
4.45
4.45.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 notifications 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 first.
329
4.45.2
Interfaces overview
Page
271
1461
Interfaces
IInterfaceComponentReference
IUnknown
4.45.3
Method overview
Page
332
331
332
332
332
333
333
Method
BeforeDestruction
Create
Destroy
DestroyComponents
Destroying
ExecuteAction
FindComponent
333
334
334
334
334
335
335
336
FreeNotification
FreeOnRelease
GetEnumerator
GetNamePath
GetParentComponent
HasParent
InsertComponent
IsImplementorOf
331
Notification
336
335
ReferenceInterface
RemoveComponent
333
335
336
336
331
RemoveFreeNotification
SafeCallException
SetSubComponent
UpdateAction
WriteState
4.45.4
Page
337
337
337
337
338
338
338
339
339
339
339
Description
Interface for checking component references
Basic interface for all COM-based interfaces
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
Called by components that are freed and which received a
FreeNotification.
Interface implementation of Notification
Remove the given component from the list of owned components.
Remove a component from the Free Notification list.
Part of the IVCLComObject Interface.
Sets the csSubComponent style.
Updates the state of an action.
Writes the component to a stream.
Property overview
Properties
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.
330
4.45.5
TComponent.Notification
Synopsis: Called by components that are freed and which received a FreeNotification.
Declaration: procedure Notification(AComponent: TComponent;Operation: TOperation)
; Virtual
Visibility: protected
Description: Notification is called whenever a child component is destroyed, inserted or removed from the
list of owned component. Components that were requested to send a notification when they are freed
((with FreeNotification (333)) will also call Notification when they are freed.
The AComponent parameter specifies which component sends the notification, and Operation
specifies whether the component is being inserted into or removed from the child component list, or
whether it is being destroyed.
Descendents of TComponent can use FreeNotification (333) to request notification of the destruction of another object. By overriding the Notification method, they can do special processing (typically, set a reference to this component to Nil) when this component is destroyed. The
Notification method is called quite often in the streaming process, so speed should be a consideration when overriding this method.
See also: TOperation (244), TComponent.FreeNotification (333), TComponent.RemoveFreeNotification (333)
4.45.6
TComponent.WriteState
Virtual
Visibility: public
Description: WriteState writes the components current state to a stream through the writer (459) 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 (329) implementation of WriteState simply calls TWriter.WriteData (459).
Descendent classes can, however, override WriteStateto provide additional processing of stream
data.
See also: ReadState (329), TStream.WriteComponent (413), TWriter.WriteData (459)
4.45.7
TComponent.Create
Virtual
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 (329), Owner (339)
331
4.45.8
TComponent.Destroy
Override
Visibility: public
Description: Destroy sends a opRemove notification to all components in the free-notification list. After that,
all owned components are destroyed by calling DestroyComponents (332) (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: Notification (331), Owner (339), DestroyComponents (332), Components (337)
4.45.9
TComponent.BeforeDestruction
Override
Visibility: public
Description: BeforeDestruction is overridden by TComponent to set the csDestroying flag in TComponent.ComponentState (338)
See also: TComponent.ComponentState (338)
4.45.10
TComponent.DestroyComponents
4.45.11
TComponent.Destroying
4.45.12
TComponent.ExecuteAction
Dynamic
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 (294), TBasicAction.ExecuteAction (294), TBasicAction.HandlesTarget (295), TComponent.UpdateAction (336)
4.45.13
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 (337), Name (339)
4.45.14
TComponent.FreeNotification
4.45.15
TComponent.RemoveFreeNotification
333
4.45.16
TComponent.FreeOnRelease
4.45.17
TComponent.GetEnumerator
4.45.18
TComponent.GetNamePath
Override
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 (339) property of the component.
See also: Name (339), TPersistent.GetNamePath (391)
4.45.19
TComponent.GetParentComponent
Dynamic
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 (335), Owner (339)
334
4.45.20
TComponent.HasParent
Dynamic
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 (334) will return the parent component.
See also: HasParent (335), Owner (339)
4.45.21
TComponent.InsertComponent
4.45.22
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 notification to AComponent and will then proceed
to remove AComponent from the list of owned components.
See also: InsertComponent (335), Remove (329), ValidateRename (329), Notification (331)
4.45.23
TComponent.SafeCallException
335
Override
4.45.24
TComponent.SetSubComponent
4.45.25
TComponent.UpdateAction
Dynamic
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 (294), TBasicAction.UpdateTarget (295), TBasicAction.HandlesTarget (295), TBasicAction.ExecuteAction (294)
4.45.26
TComponent.IsImplementorOf
4.45.27
TComponent.ReferenceInterface
336
4.45.28
TComponent.ComObject
4.45.29
TComponent.Components
4.45.30
TComponent.ComponentCount
4.45.31
TComponent.ComponentIndex
337
4.45.32
TComponent.ComponentState
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 freenotifications.
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 (329), SetDesigning (329), SetInline (329), SetDesignInstance (329), Updating (329),
Updated (329), Loaded (329)
4.45.33
TComponent.ComponentStyle
4.45.34
TComponent.DesignInfo
4.45.35
TComponent.Owner
4.45.36
TComponent.VCLComObject
4.45.37
TComponent.Name
4.45.38
TComponent.Tag
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 (339)
4.46
4.46.1
TComponentEnumerator
Description
TComponentEnumerator implements the #rtl.system.IEnumerator (1459) interface for the TComponent (329) class, so the TComponent class can be used in a for ... in loop over the
TComponent.Components (337) child components of the component. It is returned by the TComponent.GetEnumerator (334) method of TComponent.
See also: TComponent (329), TComponent.GetEnumerator (334), #rtl.system.IEnumerator (1459)
4.46.2
Page
340
340
341
4.46.3
Page
341
4.46.4
Method overview
Method
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.
Property overview
Properties
Current
Access
r
Description
Current pointer in the list
TComponentEnumerator.Create
4.46.5
TComponentEnumerator.GetCurrent
4.46.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 (340)
4.46.7
TComponentEnumerator.Current
4.47
4.47.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 (343) 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 (378). 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 fixed 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 (378).
See also: TMemoryStream (378), TStream (408)
4.47.2
Page
342
343
342
342
Method overview
Method
Read
SaveToFile
SaveToStream
Seek
Description
Reads Count bytes from the stream into buffer.
Writes the contents of the stream to a file.
Writes the contents of the memory stream to another stream.
Sets a new position in the stream.
341
4.47.3
Page
343
4.47.4
Property overview
Properties
Memory
Access
r
Description
Pointer to the data kept in the memory stream.
TCustomMemoryStream.Read
Override
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 (409) method of TStream (408). It will read as much bytes
as are still available in the memory area pointer to by Memory (343). After the bytes are read, the
internal stream position is updated.
See also: TCustomMemoryStream.Memory (343), TStream.Read (409)
4.47.5
TCustomMemoryStream.Seek
4.47.6
TCustomMemoryStream.SaveToStream
4.47.7
TCustomMemoryStream.SaveToFile
4.47.8
TCustomMemoryStream.Memory
4.48
4.48.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 (346)
343
4.48.2
Page
345
345
344
344
344
4.48.3
Method overview
Method
AfterConstruction
BeforeDestruction
Create
CreateNew
Destroy
Description
Overrides standard TObject (1465) behaviour.
Create a new instance of a TDataModule.
Destroys the TDataModule instance.
Property overview
Page
345
346
346
Properties
DesignOffset
DesignSize
OldCreateOrder
Access
rw
rw
rw
346
346
OnCreate
OnDestroy
rw
rw
4.48.4
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.
TDataModule.Create
Override
Visibility: public
Description: Create creates a new instance of the TDatamodule and calls TDatamodule.CreateNew (344).
After that it reads the published properties from a stream using InitInheritedComponent (256) if
a descendent class is instantiated. If the OldCreateOrder (346) property is True, the TDataModule.OnCreate (346) event is called.
Errors: An exception can be raised during the streaming operation.
See also: TDataModule.CreateNew (344)
4.48.5
TDataModule.CreateNew
Synopsis:
Declaration: constructor CreateNew(AOwner: TComponent)
constructor CreateNew(AOwner: TComponent;CreateMode: Integer);
Virtual
Visibility: public
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
(249) handler is set, then it is called, with the newly created instance as an argument.
See also: TDataModule.Create (344), AddDataModule (249), TDataModule.OnCreate (346)
4.48.6
TDataModule.Destroy
Override
344
Visibility: public
Description: Destroy destroys the TDataModule instance. If the OldCreateOrder (346) property is True the
OnDestroy (346) event handler is called prior to destroying the data module.
Before calling the inherited destroy, the RemoveDataModule (249) 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 (346), RemoveDataModule (249)
4.48.7
TDataModule.AfterConstruction
Override
Visibility: public
Description: AfterConstruction calls the OnCreate (346) handler if the OldCreateOrder (346) property is
False.
See also: TDataModule.OldCreateOrder (346), TDataModule.OnCreate (346)
4.48.8
TDataModule.BeforeDestruction
Synopsis:
Declaration: procedure BeforeDestruction;
Override
Visibility: public
Description: BeforeDestruction calls the OnDestroy (346) handler if the OldCreateOrder (346) property is
False.
See also: TDataModule.OldCreateOrder (346), TDataModule.OnDestroy (346)
4.48.9
TDataModule.DesignOffset
345
4.48.10
TDataModule.DesignSize
4.48.11
TDataModule.OnCreate
4.48.12
TDataModule.OnDestroy
4.48.13
TDataModule.OldCreateOrder
346
Description: OldCreateOrder determines when exactly the OnCreate (346) and OnDestroy (346) 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 (346), TDataModule.OnCreate (346), TDataModule.Destroy (344), TDataModule.Create (344), TDataModule.CreateNew (344), TDataModule.OldCreateOrder (346)
4.49
4.49.1
TFiler
Description
4.49.2
Page
347
347
4.49.3
Method overview
Method
DefineBinaryProperty
DefineProperty
Description
Property overview
Page
348
Properties
Ancestor
Access
rw
348
348
348
IgnoreChildren
LookupRoot
Root
rw
r
rw
4.49.4
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.
TFiler.DefineProperty
Synopsis:
Declaration: procedure DefineProperty(const Name: string;ReadData: TReaderProc;
WriteData: TWriterProc;HasData: Boolean)
; Virtual; Abstract
Visibility: public
Description:
4.49.5
TFiler.DefineBinaryProperty
Synopsis:
Declaration: procedure DefineBinaryProperty(const Name: string;ReadData: TStreamProc;
WriteData: TStreamProc;HasData: Boolean)
; Virtual; Abstract
347
Visibility: public
Description:
4.49.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 (348)
4.49.7
TFiler.LookupRoot
4.49.8
TFiler.Ancestor
4.49.9
TFiler.IgnoreChildren
4.50
TFileStream
4.50.1
Description
TFileStream is a TStream (408) descdendent that stores or reads its data from a named file in
the filesystem of the operating system.
To this end, it overrides some of the methods in TStream and implements them for the case of files
on disk, and it adds the FileName (350) property to the list of public properties.
See also: TFileStream.Create (349), TStream (408)
4.50.2
Page
349
349
Method overview
Method
Create
Destroy
4.50.3
Page
350
Description
Creates a file stream.
Destroys the file stream.
Property overview
Properties
FileName
4.50.4
Access
r
Description
The filename of the stream.
TFileStream.Create
After the file 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 file could not be opened in the requested mode, an EFOpenError (265) exception is raised.
See also: TStream (408), TFileStream.FileName (350), THandleStream.Create (360)
4.50.5
TFileStream.Destroy
349
Override
Visibility: public
Description: Destroy closes the file (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 (349)
4.50.6
TFileStream.FileName
4.51
4.51.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 (369), TFPList has no notification
mechanism. If no notification 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 (428) descendent such as TStringList
(423). To manage general objects, a TCollection (319) class exists, from which a descendent can be
made to manage collections of various kinds.
See also: TStrings (428), TCollection (319)
350
4.51.2
Page
352
351
355
352
352
351
352
353
353
353
353
356
354
354
354
354
355
355
356
355
356
4.51.3
Method overview
Method
Add
AddList
Assign
Clear
Delete
Destroy
Error
Exchange
Expand
Extract
First
ForEachCall
GetEnumerator
IndexOf
IndexOfItem
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 (266) exception.
Exchanges two pointers in the list.
Increases the capacity of the list if needed.
Remove the first occurrence of a pointer from the list.
Returns the first 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.
Search an item in the list
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.
Property overview
Page
357
Properties
Capacity
Access
rw
357
357
357
Count
Items
List
rw
rw
r
4.51.4
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.
TFPList.Destroy
Synopsis: Destroys the list and releases the memory used to store the list elements.
Declaration: destructor Destroy;
Override
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.
4.51.5
TFPList.AddList
351
Description: AddList adds all pointers from AList to the list. If a pointer is already present, it is added a
second time.
See also: TFPList.Assign (355), TList.AddList (371)
4.51.6
TFPList.Add
4.51.7
TFPList.Clear
4.51.8
TFPList.Delete
4.51.9
TFPList.Error
352
4.51.10
TFPList.Exchange
4.51.11
TFPList.Expand
4.51.12
TFPList.Extract
4.51.13
TFPList.First
353
4.51.14
TFPList.GetEnumerator
4.51.15
TFPList.IndexOf
4.51.16
TFPList.IndexOfItem
4.51.17
TFPList.Insert
354
4.51.18
TFPList.Last
4.51.19
TFPList.Move
4.51.20
TFPList.Assign
4.51.21
TFPList.Remove
355
4.51.22
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 (352)
4.51.23
TFPList.Sort
4.51.24
TFPList.ForEachCall
356
4.51.25
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 (352) or insert (354), 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 filling the list, it is a good idea to
set the capacity first before filling. This ensures that the list doesnt need to grow, and will speed up
filling the list.
See also: SetCapacity (350), Count (357)
4.51.26
TFPList.Count
4.51.27
TFPList.Items
4.51.28
TFPList.List
4.52
4.52.1
TFPListEnumerator
Description
4.52.2
Page
358
358
358
4.52.3
Page
359
4.52.4
Method overview
Method
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.
Property overview
Properties
Current
Access
r
Description
Current pointer in the list
TFPListEnumerator.Create
4.52.5
TFPListEnumerator.GetCurrent
4.52.6
TFPListEnumerator.MoveNext
Synopsis: Move the position of the enumerator to the next position in the list.
Declaration: function MoveNext : Boolean
358
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 (358)
4.52.7
TFPListEnumerator.Current
4.53
4.53.1
THandleStream
Description
THandleStream is an abstract descendent of the TStream (408) 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 (360) and Write (360) 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 (408), TFileStream (349)
4.53.2
Page
360
360
360
360
4.53.3
Page
361
Method overview
Method
Create
Read
Seek
Write
Description
Create a handlestream from an OS Handle.
Overrides standard read method.
Overrides the Seek method.
Overrides standard write method.
Property overview
Properties
Handle
Access
r
Description
The OS handle of the stream.
359
4.53.4
THandleStream.Create
4.53.5
THandleStream.Read
Override
Visibility: public
Description: Read overrides the Read (409) method of TStream. It uses the Handle (361) 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 (409), THandleStream.Write (360), THandleStream.Handle (361)
4.53.6
THandleStream.Write
Override
Visibility: public
Description: Write overrides the Write (410) method of TStream. It uses the Handle (361) 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 (409), THandleStream.Write (360), THandleStream.Handle (361)
4.53.7
THandleStream.Seek
360
4.53.8
THandleStream.Handle
4.54
4.54.1
TInterfacedPersistent
Description
4.54.2
Page
1256
4.54.3
Page
362
361
4.54.4
Interfaces overview
Interfaces
IInterface
Description
Basic interface for all COM based interfaces
Method overview
Method
AfterConstruction
QueryInterface
Description
Overrides the standard AfterConstruction method.
Implementation of IInterface.QueryInterface
TInterfacedPersistent.QueryInterface
Virtual
Visibility: public
Description: QueryInterface simply calls GetInterface using the specified IID, and returns the correct
values.
See also: TObject.GetInterface (1473)
361
4.54.5
TInterfacedPersistent.AfterConstruction
Override
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).
4.55
4.55.1
TInterfaceList
Description
4.55.2
Page
272
4.55.3
Page
365
363
363
363
363
364
366
364
364
364
365
365
366
365
366
4.55.4
Page
366
367
367
Interfaces overview
Interfaces
IInterfaceList
Description
Interface for maintaining a list of interfaces.
Method overview
Method
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 first 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
Property overview
Properties
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.
362
4.55.5
TInterfaceList.Create
4.55.6
TInterfaceList.Destroy
Override
Visibility: public
Description: Destroy first calls Clear (363) and then frees the TInterfaceList instance from memory.
Note that the Clear method decreases the reference count of all interfaces.
See also: Create (363), Clear (363)
4.55.7
TInterfaceList.Clear
4.55.8
TInterfaceList.Delete
363
4.55.9
TInterfaceList.Exchange
4.55.10
TInterfaceList.First
4.55.11
TInterfaceList.GetEnumerator
4.55.12
TInterfaceList.IndexOf
364
4.55.13
TInterfaceList.Add
4.55.14
TInterfaceList.Insert
4.55.15
TInterfaceList.Last
4.55.16
TInterfaceList.Remove
365
4.55.17
TInterfaceList.Lock
4.55.18
TInterfaceList.Unlock
4.55.19
TInterfaceList.Expand
4.55.20
TInterfaceList.Capacity
366
4.55.21
TInterfaceList.Count
4.55.22
TInterfaceList.Items
4.56
4.56.1
TInterfaceListEnumerator
Description
4.56.2
Page
368
368
368
4.56.3
Page
368
Method overview
Method
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.
Property overview
Properties
Current
Access
r
Description
Current pointer in the list
367
4.56.4
TInterfaceListEnumerator.Create
4.56.5
TInterfaceListEnumerator.GetCurrent
4.56.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 (368)
4.56.7
TInterfaceListEnumerator.Current
368
4.57
4.57.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 notification mechanism which allows to
notify of list changes. This slows down some of TList mechanisms, and if no notification is used,
TFPList (350) may be used instead.
To manage collections of strings, it is better to use a TStrings (428) descendent such as TStringList
(423). To manage general objects, a TCollection (319) class exists, from which a descendent can be
made to manage collections of various kinds.
See also: TStrings (428), TCollection (319)
4.57.2
Page
269
4.57.3
Interfaces overview
Interfaces
IFPObserved
Description
Interface implemented by an object that can be observed.
Method overview
Page
371
371
375
372
370
372
370
Method
Add
AddList
Assign
Clear
Create
Delete
Destroy
372
372
372
373
373
370
370
371
373
374
374
374
374
375
375
375
Error
Exchange
Expand
Extract
First
FPOAttachObserver
FPODetachObserver
FPONotifyObservers
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 (266) exception.
Exchanges two pointers in the list.
Increases the capacity of the list if needed.
Remove the first occurrence of a pointer from the list.
Returns the first non-nil pointer in the list.
Add an observer to the list of observers
Remove an observer from the list of observers
Notify observers of changes 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.
369
4.57.4
Property overview
Page
376
Properties
Capacity
Access
rw
376
376
377
Count
Items
List
rw
rw
r
4.57.5
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.
TList.Create
4.57.6
TList.Destroy
Synopsis: Destroys the list and releases the memory used to store the list elements.
Declaration: destructor Destroy;
Override
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.
4.57.7
TList.FPOAttachObserver
4.57.8
TList.FPODetachObserver
Description: FPODetachObserver is part of the implementation of the IFPObserved (269) interface in Tlist.
It removes the first found instance of the observer from the list of observers.
See also: IFPObserved (269), IFPObserved.FPODetachObserver (270), IFPObserver (271)
4.57.9
TList.FPONotifyObservers
4.57.10
TList.AddList
4.57.11
TList.Add
371
4.57.12
TList.Clear
Virtual
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 (370)
4.57.13
TList.Delete
4.57.14
TList.Error
Virtual
Visibility: public
Description: Error raises an EListError (266) exception, with a message formatted with Msg and Data.
4.57.15
TList.Exchange
4.57.16
TList.Expand
4.57.17
TList.Extract
4.57.18
TList.First
4.57.19
TList.GetEnumerator
373
4.57.20
TList.IndexOf
4.57.21
TList.Insert
4.57.22
TList.Last
4.57.23
TList.Move
374
4.57.24
TList.Assign
4.57.25
TList.Remove
4.57.26
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 (372)
4.57.27
TList.Sort
375
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.
4.57.28
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 (371) or insert (374), 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 filling the list, it is a good idea to
set the capacity first before filling. This ensures that the list doesnt need to grow, and will speed up
filling the list.
See also: SetCapacity (369), Count (376)
4.57.29
TList.Count
4.57.30
TList.Items
376
4.57.31
TList.List
4.58
4.58.1
TListEnumerator
Description
TListEnumerator implements the #rtl.system.IEnumerator (1459) interface for the TList (369)
class, so the TList class can be used in a for ... in loop. It is returned by the TList.GetEnumerator
(373) method of TList.
See also: TList (369), TList.GetEnumerator (373), #rtl.system.IEnumerator (1459)
4.58.2
Page
377
377
378
4.58.3
Page
378
4.58.4
Method overview
Method
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.
Property overview
Properties
Current
Access
r
Description
Current pointer in the list
TListEnumerator.Create
4.58.5
TListEnumerator.GetCurrent
4.58.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 (377)
4.58.7
TListEnumerator.Current
4.59
4.59.1
TMemoryStream
Description
TMemoryStream is a TStream (408) descendent that stores its data in memory. It descends directly
from TCustomMemoryStream (341) and implements the necessary to allocate and de-allocate memory directly from the heap. It implements the Write (380) method which is missing in TCustomMemoryStream.
TMemoryStream also introduces methods to load the contents of another stream or a file 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 (341), TStream (408)
378
4.59.2
Page
379
379
380
379
380
380
4.59.3
Method overview
Method
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 file into memory.
Loads the contents of a stream into memory.
Sets the size for the memory stream.
Writes data to the streams memory.
TMemoryStream.Destroy
Synopsis: Frees any allocated memory and destroys the memory stream.
Declaration: destructor Destroy;
Override
Visibility: public
Description: Destroy clears the memory stream, thus in effect freeing any memory allocated for it, and then
frees the memory stream.
4.59.4
TMemoryStream.Clear
4.59.5
TMemoryStream.LoadFromStream
4.59.6
TMemoryStream.LoadFromFile
4.59.7
TMemoryStream.SetSize
Override
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 (417), TStream.Size (418)
4.59.8
TMemoryStream.Write
Override
Visibility: public
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 (410) method.
Errors: If no more memory could be allocated, then an exception will be raised.
See also: TCustomMemoryStream.Read (342)
4.60
4.60.1
TOwnedCollection
Description
4.60.2
Page
381
4.60.3
Method overview
Method
Create
Description
Create a new TOwnerCollection instance.
TOwnedCollection.Create
4.61
4.61.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 (382) property is set to True).
See also: TStream (408), TOwnerStream.Source (382), TOwnerStream.SourceOwner (382)
4.61.2
Page
381
382
4.61.3
Page
382
382
4.61.4
Method overview
Method
Create
Destroy
Description
Create a new instance of TOwnerStream.
Destroys the TOwnerStream instance and the source stream.
Property overview
Properties
Source
SourceOwner
Access
r
rw
Description
Reference to the source stream.
Indicates whether the ownerstream owns its source
TOwnerStream.Create
381
4.61.5
TOwnerStream.Destroy
Override
Visibility: public
Description: Destroy frees the source stream if the SourceOwner property is True.
See also: TOwnerStream.Create (381), TOwnerStream.Source (382), TOwnerStream.SourceOwner (382)
4.61.6
TOwnerStream.Source
4.61.7
TOwnerStream.SourceOwner
4.62
4.62.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 file (usually a file 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 (388) property.
Various methods are provided to obtain the token value in the desired format.
To advance to the next token, invoke NextToken (385) method.
See also: TParser.Token (388), TParser.NextToken (385)
382
4.62.2
Method overview
Page
384
384
383
383
384
384
Method
CheckToken
CheckTokenSymbol
Create
Destroy
Error
ErrorFmt
384
385
385
385
386
ErrorStr
HexToBinary
NextToken
SourcePos
TokenComponentIdent
386
386
387
387
387
TokenFloat
TokenInt
TokenString
TokenSymbolIs
TokenWideString
4.62.3
Page
388
388
388
4.62.4
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 (267) exception with the given message
Raises an EParserError (267) exception and formats the message.
Raises an EParserError (267) 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 float.
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
Property overview
Properties
FloatType
SourceLine
Token
Access
r
r
r
Description
The type of a float token.
Current source line number.
The type of the current token.
TParser.Create
4.62.5
TParser.Destroy
Override
Visibility: public
Description: Destroys the parser instance.
Errors: None.
383
4.62.6
TParser.CheckToken
4.62.7
TParser.CheckTokenSymbol
4.62.8
TParser.Error
4.62.9
TParser.ErrorFmt
4.62.10
TParser.ErrorStr
384
4.62.11
TParser.HexToBinary
4.62.12
TParser.NextToken
4.62.13
TParser.SourcePos
385
4.62.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 (235), TokenComponentIdent tries to find 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 (387) or TokenWideString (387)
return the same value returned by TokenComponentIdent.
Example
If source stream contains a.b.c and TParser is positioned on the first token (a), this method
returns a.b.c.
Errors: If Token (388) isnt toSymbol (235), or no valid symbol is found after a dot, an EParserError (267)
exception is raised.
See also: TParser.NextToken (385), TParser.Token (388), TParser.TokenString (387), TParser.TokenWideString
(387), toSymbol (235)
4.62.15
TParser.TokenFloat
4.62.16
TParser.TokenInt
4.62.17
TParser.TokenString
4.62.18
TParser.TokenWideString
4.62.19
TParser.TokenSymbolIs
387
4.62.20
TParser.FloatType
Value is a single.
Value is a currency.
Value is a date.
If Token (388) isnt toFloat (235) or one of the above characters wasnt specified, FloatType is
the null character (zero).
See also: TParser.NextToken (385), TParser.Token (388), TParser.TokenFloat (386), toFloat (235)
4.62.21
TParser.SourceLine
4.62.22
TParser.Token
388
Table 4.24:
toEOF (235)
toSymbol (235)
toString (235)
toInteger (235)
toFloat (235)
toWString (235)
Value returned by TParser.Token (388) when the end of the input stream was reached.
Value returned by TParser.Token (388) when a symbol was found in the input stream.
Value returned by TParser.Token (388) when a string was found in the input stream.
Value returned by TParser.Token (388) when an integer was found in the input stream.
Value returned by TParser.Token (388) when a floating point value was found in the input stream.
Value returned by TParser.Token (388) when a widestring was found in the input stream.
4.63
4.63.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.
TPersistent implements the IFPObserved (269) interface for the benefit of descendent classes,
but does not call IFPObserved.FPONotifyObservers (270). Descendents such as TStrings (428) and
TCollection (319) and TCollectionItem (327) do use it.
See also: TComponent (329), IFPObserved (269), TStrings (428), TCollection (319), TCollectionItem (327)
4.63.2
Page
269
4.63.3
Page
390
389
390
391
391
391
4.63.4
Interfaces overview
Interfaces
IFPObserved
Description
Interface implemented by an object that can be observed.
Method overview
Method
Assign
Destroy
FPOAttachObserver
FPODetachObserver
FPONotifyObservers
GetNamePath
Description
Assign the contents of one class to another.
Destroys the TPersistent instance.
Add an observer to the list of observers.
Remove an observer from the list of observers
Notify observers of changes.
Returns a string that can be used to identify the class instance.
TPersistent.Destroy
Override
389
Visibility: public
Description: Destroy disposes of the persistent object. This method should never be called directly. Instead the
Free method should be used.
4.63.5
TPersistent.Assign
Virtual
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 (389) 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 (389)
4.63.6
TPersistent.FPOAttachObserver
390
4.63.7
TPersistent.FPODetachObserver
4.63.8
TPersistent.FPONotifyObservers
4.63.9
TPersistent.GetNamePath
Synopsis: Returns a string that can be used to identify the class instance.
Declaration: function GetNamePath : string;
Virtual
Visibility: public
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 (389)
4.64
4.64.1
TProxyStream
Description
TProxyStream is a proxy class for the #rtl.types.IStream (1665) interface. It implements all
stream methods by relaying them to the IStream interface.
See also: #rtl.types.IStream (1665), TStreamAdapter (418)
391
4.64.2
Page
392
392
392
392
392
4.64.3
Method overview
Method
Check
Create
Read
Seek
Write
Description
Check errors
Create a new instance of the TProxyStream class.
TProxyStream.Create
4.64.4
TProxyStream.Read
Override
Visibility: public
4.64.5
TProxyStream.Write
Override
Visibility: public
4.64.6
TProxyStream.Seek
4.64.7
TProxyStream.Check
Virtual
Visibility: public
Description: Check will check the result of the IStream interface. This method must be overridden by descendent classes to return interface-specific errors.
See also: #rtl.types.IStream (1665)
392
4.65
4.65.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
(281) 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
(412) call should be used.
See also: TFiler (347), TWriter (459), TAbstractObjectReader (281)
393
4.65.2
Method overview
Page
395
396
Method
BeginReferences
CheckValue
402
395
396
396
395
396
396
397
397
397
397
397
398
398
398
399
399
399
399
400
400
400
400
401
400
401
399
401
398
402
402
401
398
401
CopyValue
Create
DefineBinaryProperty
DefineProperty
Destroy
EndOfList
EndReferences
FixupReferences
NextValue
Read
ReadBoolean
ReadChar
ReadCollection
ReadComponent
ReadComponents
ReadCurrency
ReadDate
ReadFloat
ReadIdent
ReadInt64
ReadInteger
ReadListBegin
ReadListEnd
ReadRootComponent
ReadSet
ReadSignature
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-defined binary property from the stream.
Reads a user-defined 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 float from the stream.
Reads an identifier 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.
394
4.65.3
Property overview
Page
402
404
Properties
Driver
OnAncestorNotFound
Access
r
rw
404
OnCreateComponent
rw
403
405
OnError
OnFindComponentClass
rw
rw
403
403
405
OnFindMethod
OnPropertyNotFound
OnReadStringProperty
rw
rw
rw
404
OnReferenceName
rw
404
404
402
403
OnSetMethodProperty
OnSetName
Owner
Parent
rw
rw
rw
rw
4.65.4
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 find 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.
TReader.Create
4.65.5
TReader.Destroy
Override
Visibility: public
Description: Destroys a reader class.
4.65.6
TReader.BeginReferences
395
4.65.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
4.65.8
TReader.DefineProperty
4.65.9
TReader.DefineBinaryProperty
4.65.10
TReader.EndOfList
4.65.11
TReader.EndReferences
396
4.65.12
TReader.FixupReferences
4.65.13
TReader.NextValue
4.65.14
TReader.Read
Virtual
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 (283), TBinaryObjectReader.Read (303)
4.65.15
TReader.ReadBoolean
4.65.16
TReader.ReadChar
397
4.65.17
TReader.ReadWideChar
4.65.18
TReader.ReadUnicodeChar
4.65.19
TReader.ReadCollection
4.65.20
TReader.ReadComponent
4.65.21
TReader.ReadComponents
398
4.65.22
TReader.ReadFloat
4.65.23
TReader.ReadSingle
4.65.24
TReader.ReadDate
4.65.25
TReader.ReadCurrency
4.65.26
TReader.ReadIdent
399
4.65.27
TReader.ReadInteger
4.65.28
TReader.ReadInt64
4.65.29
TReader.ReadSet
4.65.30
TReader.ReadListBegin
4.65.31
TReader.ReadListEnd
400
4.65.32
TReader.ReadRootComponent
4.65.33
TReader.ReadVariant
4.65.34
TReader.ReadSignature
4.65.35
TReader.ReadString
4.65.36
TReader.ReadWideString
401
4.65.37
TReader.ReadUnicodeString
4.65.38
TReader.ReadValue
4.65.39
TReader.CopyValue
4.65.40
TReader.Driver
4.65.41
TReader.Owner
402
4.65.42
TReader.Parent
4.65.43
TReader.OnError
4.65.44
TReader.OnPropertyNotFound
4.65.45
TReader.OnFindMethod
403
4.65.46
TReader.OnSetMethodProperty
4.65.47
TReader.OnSetName
4.65.48
TReader.OnReferenceName
4.65.49
TReader.OnAncestorNotFound
4.65.50
TReader.OnCreateComponent
4.65.51
TReader.OnFindComponentClass
4.65.52
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 fly, when a form is loaded. See
TReadWriteStringPropertyEvent (245) for a description of the various parameters.
See also: TReader.OnPropertyNotFound (403), TReader.OnSetMethodProperty (404), TReadWriteStringPropertyEvent (245)
4.66
4.66.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
immediately stores the properties of the reference object in the storage object.
The Store (406) 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 (407)
can be called.
See also: TRecall.Create (406), TRecall.Destroy (406), TRecall.Forget (407), TRecall.Store (406), TPersistent.Assign (390)
405
4.66.2
Method overview
Page
406
406
Method
Create
Destroy
407
406
Forget
Store
4.66.3
Page
407
4.66.4
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.
Property overview
Properties
Reference
Access
r
Description
The reference object.
TRecall.Create
4.66.5
TRecall.Destroy
Synopsis: Copies the stored properties to the reference object and destroys the TRecall instance.
Declaration: destructor Destroy;
Override
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 (407) instance is still valid. If the reference pointer
was invalidated, call TRecall.Forget (407) to clear the reference instance.
See also: TRecall.Store (406), TRecall.Forget (407)
4.66.6
TRecall.Store
4.66.7
TRecall.Forget
4.66.8
TRecall.Reference
4.67
4.67.1
TResourceStream
Description
4.67.2
Page
407
408
408
4.67.3
Method overview
Method
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.
TResourceStream.Create
407
4.67.4
TResourceStream.CreateFromID
4.67.5
TResourceStream.Destroy
Override
Visibility: public
Description: Destroys the instance of the resource stream.
4.68
4.68.1
TStream
Description
TStream is the base class for all streaming classes. It defines methods for reading (409), writing
(410) 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 (378) or TFileStream (349) then override these methods
to write streams to memory or file.
See also: TMemoryStream (378), TFileStream (349), TStringStream (445)
408
4.68.2
Method overview
Page
412
414
409
Method
CopyFrom
FixupResourceHeader
Read
416
411
414
412
412
415
415
414
415
410
410
ReadAnsiString
ReadBuffer
ReadByte
ReadComponent
ReadComponentRes
ReadDWord
ReadQWord
ReadResHeader
ReadWord
Seek
Write
417
411
416
413
413
413
413
WriteAnsiString
WriteBuffer
WriteByte
WriteComponent
WriteComponentRes
WriteDescendent
WriteDescendentRes
416
417
414
416
WriteDWord
WriteQWord
WriteResourceHeader
WriteWord
4.68.3
Page
417
418
4.68.4
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
Writes data from a buffer to the stream and returns the number
of bytes written.
Write an ansistring to the stream.
Writes data from a buffer to the stream
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.
Property overview
Properties
Position
Size
Access
rw
rw
Description
The current position in the stream.
The current size of the stream.
TStream.Read
Synopsis: Reads data from the stream to a buffer and returns the number of bytes read.
Declaration: function Read(var Buffer;Count: LongInt) : LongInt;
Virtual
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 specific number of
bytes is expected, use TSTream.ReadBuffer (411) instead.
As implemented in TStream, Read does nothing but raises an EStreamError (267) exception to
indicate that reading is not supported. Descendent classes that allow reading must override this
method to do the actual reading.
409
Descendent classes should (if they dont explicitly raise an exception) return a positive value (>=0),
where zero indicates an error.
Errors: In case a descendent class does not allow reading from the stream, an exception is raised.
See also: TStream.Write (410), TStream.ReadBuffer (411)
4.68.5
TStream.Write
Synopsis: Writes data from a buffer to the stream and returns the number of bytes written.
Declaration: function Write(const Buffer;Count: LongInt) : LongInt;
Virtual
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
specific number of bytes should be written, use TSTream.WriteBuffer (411) instead.
As implemented in TStream, Write does nothing but raises EStreamError (267) exception to indicate that writing is not supported. Descendent classes that allow writing must override this method
to do the actual writing.
Descendent classes should (if they dont explicitly raise an exception) return a positive value (>=0),
where zero indicates an error.
Errors: In case a descendent class does not allow writing to the stream, an exception is raised.
See also: TStream.Read (409), TStream.WriteBuffer (411)
4.68.6
TStream.Seek
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.
The Origin parameter for the 64-bit version has one of the following values:
Table 4.26:
Value
soBeginning
soCurrent
soEnd
Meaning
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.
Offset should be negative when the origin is SoFromEnd (soEnd). 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.
Remark: Internally, all calls are re-routed to the 64-bit version of the call. When creating a descendent of
TStream, the 64-bit version of the call should be overridden.
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 (or soBeginning).
See also: TStream.Position (417)
4.68.7
TStream.ReadBuffer
4.68.8
TStream.WriteBuffer
4.68.9
TStream.CopyFrom
4.68.10
TStream.ReadComponent
4.68.11
TStream.ReadComponentRes
412
4.68.12
TStream.WriteComponent
4.68.13
TStream.WriteComponentRes
4.68.14
TStream.WriteDescendent
4.68.15
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
(413) 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.
413
4.68.16
TStream.WriteResourceHeader
4.68.17
TStream.FixupResourceHeader
4.68.18
TStream.ReadResHeader
4.68.19
TStream.ReadByte
Synopsis: Read a byte from the stream and return its value.
Declaration: function ReadByte : Byte
Visibility: public
414
Description: ReadByte reads one byte from the stream and returns its value.
Errors: If the byte cannot be read, a EStreamError (267) exception will be raised. This is a utility function
which symply calls the Read (409) function.
See also: TStream.Read (409), TStream.WriteByte (416), TStream.ReadWord (415), TStream.ReadDWord
(415), TStream.ReadAnsiString (416)
4.68.20
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 (409) function.
Errors: If the word cannot be read, a EStreamError (267) exception will be raised.
See also: TStream.Read (409), TStream.WriteWord (416), TStream.ReadByte (414), TStream.ReadDWord
(415), TStream.ReadAnsiString (416)
4.68.21
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 (409) function.
Errors: If the DWord cannot be read, a EStreamError (267) exception will be raised.
See also: TStream.Read (409), TStream.WriteDWord (416), TStream.ReadByte (414), TStream.ReadWord
(415), TStream.ReadAnsiString (416)
4.68.22
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 (267) exception will be raised.
See also: TStream.Read (409), TStream.WriteByte (416), TStream.ReadWord (415), TStream.ReadDWord
(415), TStream.ReadAnsiString (416)
415
4.68.23
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
(417) function writes an ansistring in such a format.
Errors: If the AnsiString cannot be read, a EStreamError (267) exception will be raised.
See also: TStream.Read (409), TStream.WriteAnsiString (417), TStream.ReadByte (414), TStream.ReadWord
(415), TStream.ReadDWord (415)
4.68.24
TStream.WriteByte
4.68.25
TStream.WriteWord
4.68.26
TStream.WriteDWord
416
Description: WriteDWord writes the DWord D (i.e. 4 bytes) to the stream. This is a utility function which simply
calls the Write (410) function. The DWord can be read from the stream using the ReadDWord (415)
function.
Errors: If an error occurs when attempting to write, an EStreamError (267) exception will be raised.
See also: TStream.Write (410), TStream.ReadDWord (415), TStream.WriteByte (416), TStream.WriteWord
(416), TStream.WriteAnsiString (417)
4.68.27
TStream.WriteQWord
4.68.28
TStream.WriteAnsiString
4.68.29
TStream.Position
Errors: Some descendents may raise an EStreamError (267) exception if they do not support setting the
stream position.
See also: TStream.Size (418), TStream.Seek (410)
4.68.30
TStream.Size
4.69
4.69.1
TStreamAdapter
Description
4.69.2
Page
1665
4.69.3
Page
422
421
420
419
419
421
419
421
420
420
422
421
419
Interfaces overview
Interfaces
IStream
Description
COM stream abstraction
Method overview
Method
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
418
4.69.4
Page
422
422
4.69.5
Property overview
Properties
Stream
StreamOwnership
Access
r
rw
Description
Stream on which adaptor works
Determines what happens with the stream when the adaptor is freed
TStreamAdapter.Create
4.69.6
TStreamAdapter.Destroy
Override
Visibility: public
Description: Explicitly free the TStreamAdapter instance. Normally, this is done automatically if a reference
to the IStream interface is freed.
4.69.7
TStreamAdapter.Read
Virtual
Visibility: public
Description: Read implements #rtl.types.ISequentialStream.Read (1665) by reading from the stream specified at
creation.
Errors: This function must be overridden and will raise a runerror 217 when called directly.
See also: #rtl.types.ISequentialStream.Read (1665)
4.69.8
TStreamAdapter.Write
419
4.69.9
TStreamAdapter.Seek
Virtual
Visibility: public
Description: Seek implements #rtl.types.IStream.Seek (1666) by setting the position of the stream specified at
creation.
Errors: This function must be overridden and will raise a runerror 217 when called directly.
See also: #rtl.types.IStream.Seek (1666)
4.69.10
TStreamAdapter.SetSize
Virtual
Visibility: public
Description: SetSize implements #rtl.types.IStream.Setsize (1666) by setting the size of the stream specified
at creation.
Errors: This function must be overridden and will raise a runerror 217 when called directly.
See also: #rtl.types.IStream.Setsize (1666)
4.69.11
TStreamAdapter.CopyTo
420
4.69.12
TStreamAdapter.Commit
Virtual
Visibility: public
Description: Commit implements #rtl.types.IStream.Commit (1667).
Errors: This function must be overridden and will raise a runerror 217 when called directly.
See also: #rtl.types.IStream.Commit (1667)
4.69.13
TStreamAdapter.Revert
Virtual
Visibility: public
Description: Revert implements #rtl.types.IStream.Revert (1667).
Errors: This function must be overridden and will raise a runerror 217 when called directly.
See also: #rtl.types.IStream.Revert (1667)
4.69.14
TStreamAdapter.LockRegion
4.69.15
TStreamAdapter.UnlockRegion
421
4.69.16
TStreamAdapter.Stat
4.69.17
TStreamAdapter.Clone
Virtual
Visibility: public
Description: Clone implements #rtl.types.IStream.Clone (1668).
Errors: This function must be overridden and will raise a runerror 217 when called directly.
See also: #rtl.types.IStream.Clone (1668)
4.69.18
TStreamAdapter.Stream
4.69.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
422
4.70
4.70.1
TStringList
Description
TStringList is a descendent class of TStrings (428) 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
Notification of changes in the list
See also: TStrings (428), TStringList.Duplicates (426), TStringList.Sorted (426)
4.70.2
Page
424
424
426
424
423
424
425
425
425
425
4.70.3
Method overview
Method
Add
Clear
CustomSort
Delete
Destroy
Exchange
Find
IndexOf
Insert
Sort
Description
Implements the TStrings.Add (429) function.
Implements the TStrings.Clear (431) function.
Sort the stringlist using a custom sort algorithm
Implements the TStrings.Delete (432) function.
Destroys the stringlist.
Implements the TStrings.Exchange (433) function.
Locates the index for a given string in sorted lists.
Overrides the TStrings.IndexOf (433) property.
Overrides the TStrings.Insert (434) method.
Sorts the strings in the list.
Property overview
Page
427
426
Properties
CaseSensitive
Duplicates
Access
rw
rw
427
427
427
426
OnChange
OnChanging
OwnsObjects
Sorted
rw
rw
rw
rw
4.70.4
Description
Describes the behaviour of a sorted list with respect to duplicate strings.
Event triggered after the list was modified.
Event triggered when the list is about to be modified.
Determines whether the stringlist owns its objects or not.
Determines whether the list is sorted or not.
TStringList.Destroy
Override
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.
423
4.70.5
TStringList.Add
Override
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 (426) is dupError then an EStringListError (268) exception is raised. If
Duplicates is set to dupIgnore then the return value is the index of the previous entry.
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 (426) is
dupError then an EStringListError (268) exception is raised.
See also: TStringList.Insert (425), TStringList.Duplicates (426)
4.70.6
TStringList.Clear
Override
Visibility: public
Description: Implements the TStrings.Clear (431) function.
4.70.7
TStringList.Delete
Override
Visibility: public
Description: Implements the TStrings.Delete (432) function.
4.70.8
TStringList.Exchange
Override
Visibility: public
Description: Exchange will exchange two items in the list as described in TStrings.Exchange (433).
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 (426), TStrings.Exchange (433)
424
4.70.9
TStringList.Find
Virtual
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 (425) instead.
2.Find uses a binary search method to locate the string
4.70.10
TStringList.IndexOf
Override
Visibility: public
Description: IndexOf overrides the ancestor method TStrings.indexOf (433). 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 (433), TStringList.Find (425)
4.70.11
TStringList.Insert
Override
Visibility: public
Description: Insert will insert the string S at position Index in the list. If the list is sorted, an EStringListError
(268) 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 (268) exception will be raised.
See also: TStringList.Add (424), TStrings.Insert (434), TStrings.InsertObject (435)
4.70.12
TStringList.Sort
Virtual
Visibility: public
Description: Sort will sort the strings in the list using the quicksort algorithm. If the list has its TStringList.Sorted
(426) property set to True then nothing will be done.
See also: TStringList.Sorted (426)
425
4.70.13
TStringList.CustomSort
Virtual
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 first 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 first.
See also: TStringList.Sorted (426), TStringList.Sort (425)
4.70.14
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 4.27:
dupIgnore
dupError
dupAccept
Duplicate values will not 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 (268) exception is raised.
Duplicate values can be added to the list.
4.70.15
TStringList.Sorted
4.70.16
TStringList.CaseSensitive
Synopsis:
Declaration: Property CaseSensitive : Boolean
Visibility: public
Access: Read,Write
Description: Indicates whether locating strings happens in a case sensitive manner.
4.70.17
TStringList.OnChange
4.70.18
TStringList.OnChanging
4.70.19
TStringList.OwnsObjects
4.71
4.71.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 configuration files.
An instance of TStrings is never created directly, instead a descendent class such as TStringList
(423) 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 (423).
TStrings implements the IFPObserved (269) interface: when the stringlist is changed, a ooChanged
notification is sent to all observers.
See also: TStringList (423), IFPObserved (269)
4.71.2
Page
429
429
430
430
430
431
431
431
432
429
432
432
433
437
433
437
433
433
434
434
434
435
435
435
435
436
436
437
Method overview
Method
Add
AddObject
AddStrings
AddText
Append
Assign
BeginUpdate
Clear
Delete
Destroy
EndUpdate
Equals
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 text to the string 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.
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 file 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 file.
Save the contents of the string to a stream.
Set the contents of the list from a PChar.
428
4.71.3
Property overview
Page
440
Properties
Capacity
Access
rw
440
441
438
438
438
441
439
441
CommaText
Count
DelimitedText
Delimiter
LineBreak
Names
NameValueSeparator
Objects
rw
r
rw
rw
rw
r
rw
rw
439
439
QuoteChar
StrictDelimiter
rw
rw
442
443
443
437
Strings
StringsAdapter
Text
TextLineBreakStyle
rw
rw
rw
rw
439
442
ValueFromIndex
Values
rw
rw
4.71.4
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 (438).
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 (438).
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 (443)
property
Return the value part of a string based on its index.
Value parts of the name-value pairs in the list.
TStrings.Destroy
Synopsis: Frees all strings and objects, and removes the list from memory.
Declaration: destructor Destroy;
Override
Visibility: public
Description: Destroy is the destructor of TStrings it does nothing except calling the inherited destructor.
4.71.5
TStrings.Add
4.71.6
TStrings.AddObject
429
Virtual
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 (429), TStrings.Strings (442), TStrings.Objects (441), TStrings.InsertObject (435)
4.71.7
TStrings.Append
4.71.8
TStrings.AddStrings
4.71.9
TStrings.AddText
Virtual
Visibility: public
Description: AddText adds S to the strings. It is identical in function to setting Text (233) but does not clear the
list of strings first: S is split into lines, and each line is added to the list.
See also: TString.Text (233)
430
4.71.10
TStrings.Assign
Override
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 (429), TStrings.AddStrings (430), TPersistent.Assign (390)
4.71.11
TStrings.BeginUpdate
4.71.12
TStrings.Clear
Synopsis: Removes all strings and associated objects from the list.
Declaration: procedure Clear;
Virtual;
Abstract
Visibility: public
Description: Clear will remove all strings and their associated objects from the list. After a call to clear,
TStrings.Count (441) is zero.
Since it is an abstract method, TStrings itself does not implement Clear. Descendent classes
such as TStringList (423) implement this method.
See also: TStrings.Objects (441), TStrings.Strings (442), TStrings.Delete (432), TStrings.Count (441)
431
4.71.13
TStrings.Delete
Virtual;
Abstract
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 (423) implement this method.
Errors: If Index is not in the allowed range, an EStringListError (268) is raised.
See also: TStrings.Insert (434), TStrings.Objects (441), TStrings.Strings (442), TStrings.Clear (431)
4.71.14
TStrings.EndUpdate
4.71.15
TStrings.Equals
432
4.71.16
TStrings.Exchange
Virtual
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 (268) exception is raised.
See also: TStrings.Move (435), TStrings.Strings (442), TStrings.Count (441)
4.71.17
TStrings.GetEnumerator
4.71.18
TStrings.GetText
Virtual
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.
4.71.19
TStrings.IndexOf
Virtual
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 first occurrence of the string is returned.
2.The returned position is zero-based, i.e. 0 indicates the first string in the list.
See also: TStrings.IndexOfObject (434), TStrings.IndexOfName (434), TStrings.Strings (442)
433
4.71.20
TStrings.IndexOfName
Virtual
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 first occurrence of a matching name-value pair is returned.
2.The returned position is zero-based, i.e. 0 indicates the first string in the list.
See also: TStrings.IndexOf (433), TStrings.IndexOfObject (434), TStrings.Strings (442)
4.71.21
TStrings.IndexOfObject
Virtual
Visibility: public
Description: IndexOfObject searchs through the list of strings till it find 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 first 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 first string in the list.
4.71.22
TStrings.Insert
Virtual;
Abstract
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 (435) instead.
Errors: If Index is less than zero or larger than Count then an EStringListError (268) exception is raised.
See also: TStrings.Add (429), TStrings.InsertObject (435), TStrings.Append (430), TStrings.Delete (432)
434
4.71.23
TStrings.InsertObject
4.71.24
TStrings.LoadFromFile
Virtual
Visibility: public
Description: LoadFromFile loads the contents of a file into the stringlist. Each line in the file (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 file stream (349) with the given filename, and then executes
TStrings.LoadfromStream (435); after that the file stream object is destroyed again.
See also: TStrings.LoadFromStream (435), TStrings.SaveToFile (436), Tstrings.SaveToStream (436)
4.71.25
TStrings.LoadFromStream
Virtual
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 (435), TStrings.SaveToFile (436), Tstrings.SaveToStream (436)
4.71.26
TStrings.Move
435
Virtual
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);
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 (268) is raised.
See also: TStrings.Exchange (433)
4.71.27
TStrings.SaveToFile
Virtual
Visibility: public
Description: SaveToFile saves the contents of the stringlist to the file with name FileName. It writes the
strings to the file, separated by end-of-line markers, so each line in the file will contain 1 string from
the stringlist.
SaveToFile creates a file stream (349) with name FileName, calls TStrings.SaveToStream (436)
and then destroys the file stream object.
Errors: An EStreamError (267) exception can be raised if the file FileName cannot be opened, or if it
cannot be written to.
See also: TStrings.SaveToStream (436), Tstrings.LoadFromStream (435), TStrings.LoadFromFile (435)
4.71.28
TStrings.SaveToStream
436
Virtual
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 (267) exception can be raised if the stream cannot be written to.
See also: TStrings.SaveToFile (436), Tstrings.LoadFromStream (435), TStrings.LoadFromFile (435)
4.71.29
TStrings.SetText
Virtual
Visibility: public
Description: SetText parses the contents of TheText and fills 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 (443)
4.71.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.
4.71.31
TStrings.ExtractName
4.71.32
TStrings.TextLineBreakStyle
Synopsis: Determines which line breaks to use in the Text (443) 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 files:
437
4.71.33
TStrings.Delimiter
4.71.34
TStrings.DelimitedText
4.71.35
TStrings.LineBreak
438
4.71.36
TStrings.StrictDelimiter
4.71.37
TStrings.QuoteChar
4.71.38
TStrings.NameValueSeparator
4.71.39
TStrings.ValueFromIndex
4.71.40
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 (441) when read. Trying to set the capacity has no effect. Descendent classes such as TStringlist (423) can override this property such that it actually sets the new
capacity.
See also: TStringList (423), TStrings.Count (441)
4.71.41
TStrings.CommaText
4.71.42
TStrings.Count
4.71.43
TStrings.Names
4.71.44
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 specified, an EStringListError (268) exception will be raised.
See also: TStrings.Strings (442), TStrings.IndexOfObject (434), TStrings.Names (441), TStrings.Values (442)
441
4.71.45
TStrings.Values
4.71.46
TStrings.Strings
442
4.71.47
TStrings.Text
4.71.48
TStrings.StringsAdapter
4.72
4.72.1
TStringsEnumerator
Description
4.72.2
Page
444
444
444
4.72.3
Page
444
Method overview
Method
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.
Property overview
Properties
Current
Access
r
Description
Current pointer in the list
443
4.72.4
TStringsEnumerator.Create
4.72.5
TStringsEnumerator.GetCurrent
4.72.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 (444)
4.72.7
TStringsEnumerator.Current
444
4.73
4.73.1
TStringStream
Description
TStringStream stores its data in an ansistring. The contents of this string is available as the
DataString (446) 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 (408), TStringStream.DataString (446), TStringStream.ReadString (446), TStringStream.WriteString
(446)
4.73.2
Page
445
445
446
446
446
446
4.73.3
Page
446
4.73.4
Method overview
Method
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 (410) method.
WriteString writes a string to the stream.
Property overview
Properties
DataString
Access
r
Description
Contains the contents of the stream in string form
TStringStream.Create
4.73.5
TStringStream.Read
Override
Visibility: public
Description: Read overrides the Read (409) from TStream (408). 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 (446), then the reading
stops, i.e. it is not possible to read beyond the end of the datastring.
See also: TStream.Read (409), TStringStream.Write (446), TStringStream.DataString (446)
445
4.73.6
TStringStream.ReadString
4.73.7
TStringStream.Seek
Override
Visibility: public
Description: Seek implements the abstract Seek (410) method.
4.73.8
TStringStream.Write
4.73.9
TStringStream.WriteString
4.73.10
TStringStream.DataString
446
Override
4.74
4.74.1
TTextObjectWriter
Description
4.75
4.75.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 (448) 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 (268), TThread.Execute (448)
4.75.2
Method overview
Page
452
450
449
449
449
448
Method
AfterConstruction
CheckTerminated
Create
CreateAnonymousThread
Destroy
Execute
451
452
452
449
448
450
452
GetSystemTimes
GetTickCount
GetTickCount64
NameThreadForDebugging
Queue
RemoveQueuedEvents
Resume
450
451
451
452
453
448
SetReturnValue
Sleep
SpinWait
Start
Suspend
Synchronize
453
453
451
Terminate
WaitFor
Yield
Description
Code to be executed after construction but before execute.
Check if the current thread has finished executing.
Creates a new thread.
Execute code in an anonymous thread
Destroys the thread object.
Execute method. Must be overridden in a descendent
thread.
Return CPU stats
Return tick count (32-bit)
Return tick count (64-bit)
Set a thread name
Queue a method for execution in the main thread
Remove methods scheduled for execution from queue
Resumes the threads execution.
Deprecated, see
TThread.Start
Set return value of a thread
Prevent thread execution
Prevent thread execution in a spin-wait loop
Starts a 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.
Yield execution to other threads
447
4.75.3
Property overview
Page
453
455
456
455
454
Properties
CurrentThread
ExternalThread
FatalException
Finished
FreeOnTerminate
Access
r
r
r
r
rw
454
454
456
455
454
455
456
Handle
IsSingleProcessor
OnTerminate
Priority
ProcessorCount
Suspended
ThreadID
r
r
rw
rw
r
rw
r
4.75.4
Description
Return current thread instance
Is the thread instance an external thread ?
Exception that occured during thread execution
Has the thread finished executing
Indicates whether the thread should free itself when it stops
executing.
Returns the thread handle.
Is the current system single processor or not
Event called when the thread terminates.
Returns the thread priority.
Return the processor count for this system
Indicates whether the thread is suspended.
Returns the thread ID.
TThread.Execute
Virtual;
Abstract
Visibility: protected
Description: Execute is a method that must be overridden in descendent classes of the thread. It must contain the code that must execute in the thread. The Execute method is responsible for checking
Terminated (233) at regular intervals: when it is set to True the execute method must exit.
See also: Terminated (233)
4.75.5
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: protected
Description: Synchronizes the thread by executing the method in the main thread.
4.75.6
TThread.Queue
Static
Visibility: protected
Description: Queue schedules a method aMethod for execution in the main thread. In difference with TThread.Synchronize
(448), Queue just posts the method for execution in a queue, and does not wait for it to be executed,
so this call returns at once.
448
In the class procedure overloaded version of this call, the thread for which the method must be posted
is the first argument. In the protected version of this call (used in the tthread instance), this argument
is not there, and the thread instance is used.
When a thread finishes its execution, all its queued calls are removed from the queue list.
See also: TThread.Synchronize (448), TThread.RemoveQueuedEvents (450)
4.75.7
TThread.Create
4.75.8
TThread.Destroy
Override
Visibility: public
Description: Destroys the thread object.
4.75.9
TThread.CreateAnonymousThread
Static
Visibility: public
Description: CreateAnonymousThread will create an instance of a TThread descendent and calls aProc
in this procedure. This can be used to quickly execute a method in another thread without having to
expliticly declare a thread for such purposes. It returns the created TThread instance, which can be
checked for termination etc.
Note that this method differs slightly from Delphi in that FPC does not yet support anonymous
methods, so the signature of aProc differs slightly.
See also: TThread.CheckTerminated (450)
4.75.10
TThread.NameThreadForDebugging
449
4.75.11
TThread.SetReturnValue
Static
Visibility: public
Description: TThread.SetReturnValue sets the return value of an internally created thread.
Errors: If the thread was not created by the FPC program, an EThreadExternalException (268) exception is
raised.
See also: EThreadExternalException (268), TThread.CheckTerminated (450)
4.75.12
TThread.CheckTerminated
Static
Visibility: public
Description: TThread.CheckTerminated can be used to check if the current thread has finished executing
(i.e. Execute has finished. This can be called from methods in other classes where the current
thread instance is not available.
Errors: If the thread was not created by the FPC program, an EThreadExternalException (268) exception is
raised.
See also: EThreadExternalException (268), TThread.SetReturnValue (450)
4.75.13
TThread.RemoveQueuedEvents
450
4.75.14
TThread.SpinWait
Static
Visibility: public
Description: SpinWait blocks the execution of the thread in a spin-wait loop: it simply executes some simple
instructions.
This can be used to create short time delays without an immediate thread switch (e.g. SysUtils.Sleep
(233) can cause a thread switch). The input parameter (aIterations) specifies the number of spin
loops.
See also: SysUtils.Sleep (233), TThread.Sleep (451)
4.75.15
TThread.Sleep
Static
Visibility: public
Description: Sleep blocks the execution of the thread for aMilliseconds. This function simply calls sysutils.sleep (233)
In difference with TThread.SpinWait (451), a thread switch may occur during the sleep.
See also: SysUtils.Sleep (233), TThread.SpinWait (451)
4.75.16
TThread.Yield
Static
Visibility: public
Description: TThread.Yield yields the processor to other threads. It can be called from methods outside the
thread class itself.
4.75.17
TThread.GetSystemTimes
Static
Visibility: public
Description: GetSystemTimes is provided for Delphi compatibility only, it currently returns empty values
only.
See also: TSystemTimes (233)
451
4.75.18
TThread.GetTickCount
Static
Visibility: public
Description: GetTickCount is deprecated and should not be used. Use TThread.GetTickCount64 (452) instead.
See also: TThread.GetTickCount64 (452)
4.75.19
TThread.GetTickCount64
Static
Visibility: public
Description: GetTickCount64 simply calls SysUtils.GetTickCount64 (233) and is implemented for Delphi
compatibility only.
See also: SysUtils.GetTickCount64 (233)
4.75.20
TThread.AfterConstruction
Override
Visibility: public
Description: AfterConstruction is overridden in TThread, it starts the thread if it was created in a suspended state. When overriding this method, the inherited method must be called.
4.75.21
TThread.Start
4.75.22
TThread.Resume
4.75.23
TThread.Suspend
4.75.24
TThread.Terminate
4.75.25
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.
4.75.26
TThread.CurrentThread
453
4.75.27
TThread.ProcessorCount
4.75.28
TThread.IsSingleProcessor
4.75.29
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.
4.75.30
TThread.Handle
454
4.75.31
TThread.ExternalThread
4.75.32
TThread.Priority
4.75.33
TThread.Suspended
4.75.34
TThread.Finished
455
4.75.35
TThread.ThreadID
4.75.36
TThread.OnTerminate
4.75.37
TThread.FatalException
4.76
4.76.1
TThreadList
Description
TThreadList is a thread-safe Tlist (369) 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 (369)
4.76.2
Page
457
457
457
457
458
458
458
Method overview
Method
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.
456
4.76.3
Page
458
4.76.4
Property overview
Properties
Duplicates
Access
rw
Description
Describes what to do with duplicates
TThreadList.Create
4.76.5
TThreadList.Destroy
Override
Visibility: public
Description: Destroy finalizes the critical section, clears the internal list object and calls the inherited destructor.
See also: TThreadList.Create (457)
4.76.6
TThreadList.Add
4.76.7
TThreadList.Clear
457
4.76.8
TThreadList.LockList
4.76.9
TThreadList.Remove
4.76.10
TThreadList.UnlockList
4.76.11
TThreadList.Duplicates
458
4.77
4.77.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
(289) 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
(413) call should be used.
See also: TFiler (347), TWriter (459), TAbstractObjectReader (281)
4.77.2
Page
460
460
460
460
461
461
461
461
461
463
462
462
462
463
463
463
464
464
463
464
462
464
464
465
462
464
Method overview
Method
Create
DefineBinaryProperty
DefineProperty
Destroy
Write
WriteBoolean
WriteChar
WriteCollection
WriteComponent
WriteCurrency
WriteDate
WriteDescendent
WriteFloat
WriteIdent
WriteInteger
WriteListBegin
WriteListEnd
WriteRootComponent
WriteSet
WriteSignature
WriteSingle
WriteString
WriteUnicodeString
WriteVariant
WriteWideChar
WriteWideString
Description
Creates a new Writer with a stream and bufsize.
Callback used when defining and streaming custom properties.
Callback used when defining 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 float to the stream.
Write an identifier 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
459
4.77.3
Property overview
Page
466
465
Properties
Driver
OnFindAncestor
Access
r
rw
465
466
OnWriteMethodProperty
OnWriteStringProperty
rw
rw
466
465
PropertyPath
RootAncestor
r
rw
4.77.4
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.
TWriter.Create
4.77.5
TWriter.Destroy
Override
Visibility: public
Description: Destroys the writer instance.
4.77.6
TWriter.DefineProperty
4.77.7
TWriter.DefineBinaryProperty
460
4.77.8
TWriter.Write
Virtual
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 (309), TAbstractObjectWriter.Write (290)
4.77.9
TWriter.WriteBoolean
4.77.10
TWriter.WriteCollection
4.77.11
TWriter.WriteComponent
4.77.12
TWriter.WriteChar
461
4.77.13
TWriter.WriteWideChar
4.77.14
TWriter.WriteDescendent
4.77.15
TWriter.WriteFloat
4.77.16
TWriter.WriteSingle
4.77.17
TWriter.WriteDate
462
4.77.18
TWriter.WriteCurrency
4.77.19
TWriter.WriteIdent
4.77.20
TWriter.WriteInteger
4.77.21
TWriter.WriteSet
4.77.22
TWriter.WriteListBegin
4.77.23
TWriter.WriteListEnd
4.77.24
TWriter.WriteSignature
4.77.25
TWriter.WriteRootComponent
4.77.26
TWriter.WriteString
4.77.27
TWriter.WriteWideString
4.77.28
TWriter.WriteUnicodeString
4.77.29
TWriter.WriteVariant
4.77.30
TWriter.RootAncestor
4.77.31
TWriter.OnFindAncestor
4.77.32
TWriter.OnWriteMethodProperty
465
4.77.33
TWriter.OnWriteStringProperty
4.77.34
TWriter.Driver
4.77.35
TWriter.PropertyPath
466
Chapter 5
Overview
The clocale offers no API by itself: it just initializes the internationalization settings of the sysutils
(1476) 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
first 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;
467
Chapter 6
Overview
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 (469),
Free (468) and ReAlloc (469). For this reason, the cmem unit should be the first 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.
6.2
6.2.1
Constants
LibName = c
LibName is the name of the library that is actually used. On most systems, this is simply "libc.so".
6.3
6.3.1
CAlloc
6.3.2
Free
6.3.3
Malloc
6.3.4
ReAlloc
469
Chapter 7
Overview
The collation_de unit registers the German Unicode collation (de). This collation bases itself on the
DUCET collation, so that collation will be included as well.
This unit does not contain any routines. It simply registers the collation in the initialization section
of the unit, so including the unit in the uses clause of the program is sufficient.
470
Chapter 8
Overview
The collation_es unit registers the Spanish Unicode collation (de). This collation bases itself on the
DUCET collation, so that collation will be included as well.
This unit does not contain any routines. It simply registers the collation in the initialization section
of the unit, so including the unit in the uses clause of the program is sufficient.
471
Chapter 9
Overview
The collation_fr_ca unit registers the French Unicode collation (fr). This collation bases itself on
the DUCET collation, so that collation will be included as well.
This unit does not contain any routines. It simply registers the collation in the initialization section
of the unit, so including the unit in the uses clause of the program is sufficient.
472
Chapter 10
Overview
The collation_ja unit registers the Japanese Unicode collation (ja). This collation bases itself on the
DUCET collation, so that collation will be included as well.
This unit does not contain any routines. It simply registers the collation in the initialization section
of the unit, so including the unit in the uses clause of the program is sufficient.
473
Chapter 11
Overview
The collation_ko unit registers the Korean Unicode collation (ko). This collation bases itself on the
DUCET collation, so that collation will be included as well.
This unit does not contain any routines. It simply registers the collation in the initialization section
of the unit, so including the unit in the uses clause of the program is sufficient.
474
Chapter 12
Overview
The collation_ru unit registers the Russian Unicode collation (ru). This collation bases itself on the
DUCET collation, so that collation will be included as well.
This unit does not contain any routines. It simply registers the collation in the initialization section
of the unit, so including the unit in the uses clause of the program is sufficient.
475
Chapter 13
Overview
The collation_sv unit registers the Swedish Unicode collation (sv). This collation bases itself on the
DUCET collation, so that collation will be included as well.
This unit does not contain any routines. It simply registers the collation in the initialization section
of the unit, so including the unit in the uses clause of the program is sufficient.
476
Chapter 14
Overview
The collation_zh unit registers the Chinese Unicode collation (zh). This collation bases itself on the
DUCET collation, so that collation will be included as well.
This unit does not contain any routines. It simply registers the collation in the initialization section
of the unit, so including the unit in the uses clause of the program is sufficient.
477
Chapter 15
Overview
The cp1250 unit registers single-byte codepage 1250. This is necessary to convert single-byte
strings using codepage 1250 to unicode strings.
This unit does not contain any routines. It simply registers the code page data in the initialization
section of the unit, so including the unit in the uses clause of the program is sufficient.
478
Chapter 16
Overview
The cp1251 unit registers single-byte codepage 1251. This is necessary to convert single-byte
strings using codepage 1251 to unicode strings.
This unit does not contain any routines. It simply registers the code page data in the initialization
section of the unit, so including the unit in the uses clause of the program is sufficient.
479
Chapter 17
Overview
The cp1252 unit registers single-byte codepage 1252. This is necessary to convert single-byte
strings using codepage 1252 to unicode strings.
This unit does not contain any routines. It simply registers the code page data in the initialization
section of the unit, so including the unit in the uses clause of the program is sufficient.
480
Chapter 18
Overview
The cp1253 unit registers single-byte codepage 1253. This is necessary to convert single-byte
strings using codepage 1253 to unicode strings.
This unit does not contain any routines. It simply registers the code page data in the initialization
section of the unit, so including the unit in the uses clause of the program is sufficient.
481
Chapter 19
Overview
The cp1254 unit registers single-byte codepage 1254. This is necessary to convert single-byte
strings using codepage 1254 to unicode strings.
This unit does not contain any routines. It simply registers the code page data in the initialization
section of the unit, so including the unit in the uses clause of the program is sufficient.
482
Chapter 20
Overview
The cp1255 unit registers single-byte codepage 1255. This is necessary to convert single-byte
strings using codepage 1255 to unicode strings.
This unit does not contain any routines. It simply registers the code page data in the initialization
section of the unit, so including the unit in the uses clause of the program is sufficient.
483
Chapter 21
Overview
The cp1256 unit registers single-byte codepage 1256. This is necessary to convert single-byte
strings using codepage 1256 to unicode strings.
This unit does not contain any routines. It simply registers the code page data in the initialization
section of the unit, so including the unit in the uses clause of the program is sufficient.
484
Chapter 22
Overview
The cp1257 unit registers single-byte codepage 1257. This is necessary to convert single-byte
strings using codepage 1257 to unicode strings.
This unit does not contain any routines. It simply registers the code page data in the initialization
section of the unit, so including the unit in the uses clause of the program is sufficient.
485
Chapter 23
Overview
The cp1258 unit registers single-byte codepage 1258. This is necessary to convert single-byte
strings using codepage 1258 to unicode strings.
This unit does not contain any routines. It simply registers the code page data in the initialization
section of the unit, so including the unit in the uses clause of the program is sufficient.
486
Chapter 24
Overview
The cp437 unit registers single-byte codepage 437. This is necessary to convert single-byte strings
using codepage 437 to unicode strings.
This unit does not contain any routines. It simply registers the code page data in the initialization
section of the unit, so including the unit in the uses clause of the program is sufficient.
487
Chapter 25
Overview
The cp646 unit registers single-byte codepage 646. This is necessary to convert single-byte strings
using codepage 646 to unicode strings.
This unit does not contain any routines. It simply registers the code page data in the initialization
section of the unit, so including the unit in the uses clause of the program is sufficient.
488
Chapter 26
Overview
The cp850 unit registers single-byte codepage 850. This is necessary to convert single-byte strings
using codepage 850 to unicode strings.
This unit does not contain any routines. It simply registers the code page data in the initialization
section of the unit, so including the unit in the uses clause of the program is sufficient.
489
Chapter 27
Overview
The cp852 unit registers single-byte codepage 852. This is necessary to convert single-byte strings
using codepage 852 to unicode strings.
This unit does not contain any routines. It simply registers the code page data in the initialization
section of the unit, so including the unit in the uses clause of the program is sufficient.
490
Chapter 28
Overview
The cp856 unit registers single-byte codepage 856. This is necessary to convert single-byte strings
using codepage 856 to unicode strings.
This unit does not contain any routines. It simply registers the code page data in the initialization
section of the unit, so including the unit in the uses clause of the program is sufficient.
491
Chapter 29
Overview
The cp866 unit registers single-byte codepage 866. This is necessary to convert single-byte strings
using codepage 866 to unicode strings.
This unit does not contain any routines. It simply registers the code page data in the initialization
section of the unit, so including the unit in the uses clause of the program is sufficient.
492
Chapter 30
Overview
The cp874 unit registers single-byte codepage 874. This is necessary to convert single-byte strings
using codepage 874 to unicode strings.
This unit does not contain any routines. It simply registers the code page data in the initialization
section of the unit, so including the unit in the uses clause of the program is sufficient.
493
Chapter 31
Overview
The cp8859_1 unit registers single-byte codepage 8859-1. This is necessary to convert single-byte
strings using codepage 8859-1 to unicode strings.
This unit does not contain any routines. It simply registers the code page data in the initialization
section of the unit, so including the unit in the uses clause of the program is sufficient.
494
Chapter 32
Overview
The cp8859_2 unit registers single-byte codepage 8859-2. This is necessary to convert single-byte
strings using codepage 8859-2 to unicode strings.
This unit does not contain any routines. It simply registers the code page data in the initialization
section of the unit, so including the unit in the uses clause of the program is sufficient.
495
Chapter 33
Overview
The cp8859_5 unit registers single-byte codepage 8859-5. This is necessary to convert single-byte
strings using codepage 8859-5 to unicode strings.
This unit does not contain any routines. It simply registers the code page data in the initialization
section of the unit, so including the unit in the uses clause of the program is sufficient.
496
Chapter 34
Overview
The cp895 unit registers single-byte codepage 895. This is necessary to convert single-byte strings
using codepage 895 to unicode strings.
This unit does not contain any routines. It simply registers the code page data in the initialization
section of the unit, so including the unit in the uses clause of the program is sufficient.
497
Chapter 35
Overview
The cp932 unit registers single-byte codepage 932. This is necessary to convert single-byte strings
using codepage 932 to unicode strings.
This unit does not contain any routines. It simply registers the code page data in the initialization
section of the unit, so including the unit in the uses clause of the program is sufficient.
498
Chapter 36
Overview
The cp936 unit registers single-byte codepage 936. This is necessary to convert single-byte strings
using codepage 936 to unicode strings.
This unit does not contain any routines. It simply registers the code page data in the initialization
section of the unit, so including the unit in the uses clause of the program is sufficient.
499
Chapter 37
Overview
The cp949 unit registers single-byte codepage 949. This is necessary to convert single-byte strings
using codepage 949 to unicode strings.
This unit does not contain any routines. It simply registers the code page data in the initialization
section of the unit, so including the unit in the uses clause of the program is sufficient.
500
Chapter 38
Overview
The cp950 unit registers single-byte codepage 950. This is necessary to convert single-byte strings
using codepage 950 to unicode strings.
This unit does not contain any routines. It simply registers the code page data in the initialization
section of the unit, so including the unit in the uses clause of the program is sufficient.
501
Chapter 39
Used units
Table 39.1: Used units by unit cpall
Name
cp1250
cp1251
cp1252
cp1253
cp1254
cp1255
cp1256
cp1257
cp1258
cp437
cp646
cp850
cp852
cp856
cp866
cp874
cp8859_1
cp8859_2
cp8859_5
System
39.2
Page
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
1224
Overview
The cpall unit registers all known single-byte codepages: 1251 (502), 866 (502), ISO 8856-5
(502) (cyrillic), 8859-1 (502), 8859-2 (502), 1253 (502) (greek), 850 (502), 437 (502), 1252 (502),
646 (502), 874 (502), 856 (502), 1250 (502), 1254 (502), 1255 (502), 1256 (502), 1257 (502), 1258
(502), 852 (502).
This unit does not contain any routines. It simply uses the other units so all corresponding code pages
are registered.
502
Chapter 40
Overview
This chapter describes the CRT unit for Free Pascal, both under dos linux and Windows. The unit was
first written for dos by Florian klaempfl. 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.
The CRT unit stems from the TP/Dos area. It is designed to work with single-byte character
sets, where 1 char = 1 byte. That means that widestrings or UTF-8 encoded (ansi)strings will
not correctly work.
40.2
40.2.1
Black = 0
Black color attribute
Blink = 128
Blink attribute
503
Blue = 1
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
Font8x8 = 256
Internal ROM font mode
504
Green = 2
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
505
40.2.2
Types
PConsoleBuf = ^TConsoleBuf
tcrtcoord = 1..255
tcrtcoord is a subrange type for denoting CRT coordinates. It supports coordinates ranging from
1 to 255. Using this type together with range-checking turned on can be used to debug CRT code.
40.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
DirectVideo : Boolean
The DirectVideo variable controls the writing to the screen. If it is True, the cursor is set via
direct port access. If False, then the BIOS is used. This is defined under dos only.
LastMode : Word = 3
The Lastmode variable tells you which mode was last selected for the screen. It is defined on DOS
only.
TextAttr : Byte = $07
The TextAttr variable controls the attributes with which characters are written to screen.
WindMax : Word = $184f
506
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 defined window
WindMaxY : DWord
Y coordinate of lower right corner of the defined 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 defined window
WindMinY : DWord
Y coordinate of upper left corner of the defined window
40.3
40.3.1
507
40.3.2
ClrEol
40.3.3
ClrScr
508
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 .
40.3.4
cursorbig
40.3.5
cursoroff
40.3.6
cursoron
509
40.3.7
Delay
40.3.8
DelLine
510
WriteLn (
WriteLn (
WriteLn (
WriteLn ;
WriteLn (
Line 2 ) ;
Line 2 ) ;
Line 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 .
40.3.9
GotoXY
40.3.10
HighVideo
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 .
40.3.11
InsLine
40.3.12
KeyPressed
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 (514)
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 .
40.3.13
LowVideo
40.3.14
NormVideo
40.3.15
NoSound
40.3.16
ReadKey
514
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 .
40.3.17
Sound
40.3.18
TextBackground
515
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 .
40.3.19
TextColor
40.3.20
i n the d e f a u l t c o l o r ) ;
i n Red ) ;
i n White ) ;
i n L i g h t Blue ) ;
TextMode
516
40.3.21
WhereX
40.3.22
WhereY
517
40.3.23
Window
518
Chapter 41
Overview
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 (1224) unit. This is done using the SetCThreadManager (519) call
The cthreads unit simply needs to be included in the uses clause of the program, preferably the very
first 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.
41.2
41.2.1
519
Chapter 42
Used units
Table 42.1: Used units by unit ctypes
Name
System
unixtype
42.2
Page
1224
1784
Overview
The ctypes unit contains the definitions of commonly found C types. It can be used when interfaces
to C libraries need to be defined. The types here are correct on all platforms, 32 or 64 bit.
The main advantage of using this file is to make sure that all C header import units use the same
definitions 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.
42.3
42.3.1
cbool = UnixType.cbool
C boolean (longbool)
cchar = UnixType.cchar
C character type (No signedness specification, 8 bit integer)
cdouble = UnixType.cdouble
Double precision floating point type (double)
520
cfloat = UnixType.cfloat
Single precision floating 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 floating 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)
521
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
522
cunsigned = UnixType.cunsigned
Unsigned integer (commonly 32 bit)
cushort = UnixType.cushort
Short unsigned integer (16 bit)
pcbool = UnixType.pcbool
Pointer to cbool (520) type.
pcchar = UnixType.pcchar
Pointer to cchar (520) type.
pcdouble = UnixType.pcdouble
Pointer to cdouble (520) type.
pcfloat = UnixType.pcfloat
Pointer to cfloat (521) type.
pcint = UnixType.pcint
Pointer to cint (521) type.
pcint16 = UnixType.pcint16
Pointer to cint16 (521) type.
pcint32 = UnixType.pcint32
Pointer to cint32 (521) type.
pcint64 = UnixType.pcint64
Pointer to cint64 (521) type.
pcint8 = UnixType.pcint8
Pointer to cint8 (521) type.
pclong = UnixType.pclong
Pointer to clong (521) type.
Pclongdouble = ^clongdouble
Pointer to clongdouble (521) type.
523
pclonglong = UnixType.pclonglong
Pointer to clonglong (521) type.
pcschar = UnixType.pcschar
Pointer to cschar (521) type.
pcshort = UnixType.pcshort
Pointer to cshort (521) type.
pcsigned = UnixType.pcsigned
Pointer to csigned (521) type.
pcsint = UnixType.pcsint
Pointer to csint (522) type.
pcsize_t = UnixType.psize_t
Pointer to generic size type
pcslong = UnixType.pcslong
Pointer to cslong (522) type.
pcslonglong = UnixType.pcslonglong
Pointer to cslonglong (522) type.
pcsshort = UnixType.pcsshort
Pointer to csshort (522) type.
pcuchar = UnixType.pcuchar
Pointer to cuchar (522) type.
pcuint = UnixType.pcuint
Pointer to cuint (522) type.
pcuint16 = UnixType.pcuint16
Pointer to cuint16 (522) type.
pcuint32 = UnixType.pcuint32
Pointer to cuint32 (522) type.
524
pcuint64 = UnixType.pcuint64
Pointer to cuint64 (522) type.
pcuint8 = UnixType.pcuint8
Pointer to cuint8 (522) type.
pculong = UnixType.pculong
Pointer to culong (522) type.
pculonglong = UnixType.pculonglong
Pointer to culonglong (522) type.
pcunsigned = UnixType.pcunsigned
Pointer to cunsigned (523) type.
pcushort = UnixType.pcushort
Pointer to cushort (523) type.
42.4
42.4.1
Synopsis:
Declaration: operator +(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.
42.4.2
add(Double,clongdouble):Double
42.4.3
assign(clongdouble):Double
42.4.4
assign(Double):clongdouble
42.4.5
divide(clongdouble,Double):Double
42.4.6
divide(Double,clongdouble):Double
42.4.7
equal(clongdouble,Double):Boolean
42.4.8
equal(Double,clongdouble):Boolean
526
42.4.9
greaterthan(clongdouble,Double):Boolean
42.4.10
greaterthan(Double,clongdouble):Boolean
42.4.11
greaterthanorequal(clongdouble,Double):Boolean
Synopsis: Implement greater than or equal comparison between double and clongdouble.
Declaration: operator >=(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.
42.4.12
greaterthanorequal(Double,clongdouble):Boolean
Synopsis: Implement greater than or equal comparison between clongdouble and double.
Declaration: operator >=(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.
42.4.13
lessthan(clongdouble,Double):Boolean
527
42.4.14
lessthan(Double,clongdouble):Boolean
42.4.15
lessthanorequal(clongdouble,Double):Boolean
Synopsis: Implement greater than or equal comparison between double and clongdouble.
Declaration: operator <=(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.
42.4.16
lessthanorequal(Double,clongdouble):Boolean
Synopsis: Implement less than or equal comparison between clongdouble and double.
Declaration: operator <=(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.
42.4.17
multiply(clongdouble,Double):Double
42.4.18
multiply(Double,clongdouble):Double
528
42.4.19
subtract(clongdouble,Double):Double
42.4.20
subtract(Double,clongdouble):Double
529
Chapter 43
Overview
The cwstring unit offers no API by itself: it just initializes the widestring manager record of the
system (1224) 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
first 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;
43.2
43.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.
530
Chapter 44
Used units
Table 44.1: Used units by unit dateutils
Name
math
System
sysutils
44.2
Page
892
1224
1476
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.
44.3
44.3.1
44.4
44.4.1
533
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 .
44.4.2
CompareDateTime
534
);
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 .
44.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 (534), CompareDate (533), SameDate (588), SameTime (590), SameDateTime
(589)
Listing: ./datutex/ex100.pp
535
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 .
44.4.4
DateOf
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 .
44.4.5
DateTimeToDosDateTime
44.4.6
DateTimeToJulianDate
44.4.7
DateTimeToMac
Errors: None.
See also: UnixTimeStampToMac (606), MacToDateTime (569), MacTimeStampToUnix (569)
44.4.8
DateTimeToModifiedJulianDate
44.4.9
DateTimeToUnix
44.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 (619)
See also: YearOf (619), WeekOf (607), MonthOf (578), HourOf (553), MinuteOf (574), SecondOf (591),
MilliSecondOf (569)
44.4.11
DayOfTheMonth
538
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 first day of the month will return
1.
For an example, see the WeekOfTheMonth (607) function.
See also: DayOfTheYear (539), WeekOfTheMonth (607), HourOfTheMonth (554), MinuteOfTheMonth (575),
SecondOfTheMonth (592), MilliSecondOfTheMonth (571)
44.4.12
DayOfTheWeek
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 ) ) ;
:
:
:
:
:
, DayOfTheWeek (N ) ) ;
, HourOfTheWeek (N ) ) ;
, MinuteOfTheWeek (N ) ) ;
, SecondOfTheWeek (N ) ) ;
,
End .
44.4.13
DayOfTheYear
44.4.14
DaysBetween
44.4.15
DaysInAMonth
540
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 (609), WeeksInYear (610), DaysInYear (542), DaysInAYear (541), DaysInMonth
(542)
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 .
44.4.16
DaysInAYear
541
44.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 (609), WeeksInYear (610), DaysInYear (542), DaysInAYear (541), DaysInAMonth
(540)
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 .
44.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 (609), WeeksInYear (610), DaysInAYear (541), DaysInMonth (542), DaysInAMonth
(540)
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 .
542
44.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 (621), MonthSpan (579), WeekSpan (610), HourSpan (556), MinuteSpan (577), SecondSpan (594), MilliSecondSpan (573), DaysBetween (540)
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 .
44.4.20
DecodeDateDay
543
Description: DecodeDateDay decomposes the date indication in AValue and returns the various components
in AYear, ADayOfYear.
See also: EncodeDateTime (547), EncodeDateMonthWeek (547), EncodeDateWeek (548), EncodeDateDay
(547), DecodeDateTime (545), DecodeDateWeek (545), DecodeDateMonthWeek (544)
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 .
44.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 (547), EncodeDateMonthWeek (547), EncodeDateWeek (548), EncodeDateDay
(547), DecodeDateTime (545), DecodeDateWeek (545), DecodeDateDay (543)
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 .
544
44.4.22
DecodeDateTime
44.4.23
DecodeDateWeek
545
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 .
44.4.24
DecodeDayOfWeekInMonth
44.4.25
DosDateTimeToDateTime
44.4.26
EncodeDateDay
44.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 (544).
Errors: If any of the arguments is not valid, then an EConvertError exception is raised.
See also: DecodeDateMonthWeek (544), EncodeDateTime (547), EncodeDateWeek (548), EncodeDateDay
(547), TryEncodeDateTime (602), TryEncodeDateWeek (603), TryEncodeDateMonthWeek (601),
TryEncodeDateDay (601), NthDayOfWeek (580)
44.4.28
EncodeDateTime
44.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 (545).
Errors: If any of the arguments is not valid, then an EConvertError exception is raised.
See also: EncodeDateMonthWeek (547), DecodeDateWeek (545), EncodeDateTime (547), EncodeDateDay
(547), TryEncodeDateTime (602), TryEncodeDateWeek (603), TryEncodeDateMonthWeek (601)
44.4.30
EncodeDayOfWeekInMonth
Synopsis: Encodes a year, month, week, day of week specification 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 (546).
Errors: If any of the values is not in range, then an EConvertError exception will be raised.
See also: NthDayOfWeek (580), EncodeDateMonthWeek (547), #rtl.sysutils.DayOfWeek (1534), DecodeDayOfWeekInMonth (546), TryEncodeDayOfWeekInMonth (604)
44.4.31
EncodeTimeInterval
Errors: If Min, Sec, MSec do not contain a valid time indication, then an EConvertError exception is
raised.
See also: TryEncodeTimeInterval (604)
44.4.32
EndOfADay
44.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.
549
See also: StartOfTheMonth (598), StartOfAMonth (596), EndOfTheMonth (552), EndOfTheYear (553), EndOfAYear (551), StartOfAWeek (596), StartOfTheWeek (599)
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 .
44.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 (599), EndOfTheWeek (552), EndOfAWeek (550), StartOfAMonth (596), EndOfTheYear (553), EndOfAYear (551), EndOfTheMonth (552), EndOfAMonth (549)
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 ) ;
550
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 .
44.4.35
EndOfAYear
44.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 (598), StartOfADay (595), StartOfTheWeek (599), StartOfAWeek (596), StartOfAMonth (596), StartOfTheMonth (598), EndOfTheWeek (552), EndOfAWeek (550), EndOfTheYear
(553), EndOfAYear (551), EndOfTheMonth (552), EndOfAMonth (549), EndOfADay (549)
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 ;
551
Const
Fmt = " End o f t h e day : " dd mmmm yyyy hh : nn : ss ;
Begin
W r i t e l n ( FormatDateTime ( Fmt , EndOfTheDay ( Today ) ) ) ;
End .
44.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 first day of that year and month as the EndOfAMonth (549) function.
See also: StartOfAMonth (596), StartOfTheMonth (598), EndOfAMonth (549), EndOfTheYear (553), EndOfAYear (551), StartOfAWeek (596), StartOfTheWeek (599)
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 .
44.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 (550) function.
See also: StartOfAWeek (596), StartOfTheWeek (599), EndOfAWeek (550), StartOfAMonth (596), EndOfTheYear
(553), EndOfAYear (551), EndOfTheMonth (552), EndOfAMonth (549)
Listing: ./datutex/ex33.pp
552
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 .
44.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 (551) function.
See also: StartOfAYear (597), StartOfTheYear (599), EndOfTheMonth (552), EndOfAMonth (549), StartOfAWeek (596), StartOfTheWeek (599), EndOfAYear (551)
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 .
44.4.40
HourOf
44.4.41
HourOfTheDay
Hour o f t h e Day
Minute o f t h e Day
Second o f t h e Day
M i l l i S e c o n d o f t h e Day
MilliSecondOfTheDay (N ) ) ;
:
:
:
:
, HourOfTheDay (N ) ) ;
, MinuteOfTheDay (N ) ) ;
, SecondOfTheDay (N ) ) ;
,
End .
44.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 first day of the
month will return 0.
For an example, see the WeekOfTheMonth (607) function.
See also: WeekOfTheMonth (607), DayOfTheMonth (538), MinuteOfTheMonth (575), SecondOfTheMonth
(592), MilliSecondOfTheMonth (571)
44.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
554
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 first day of the
week will return 0.
For an example, see the DayOfTheWeek (539) function.
See also: HourOfTheYear (555), HourOfTheMonth (554), HourOfTheDay (554), DayOfTheWeek (539), MinuteOfTheWeek (575), SecondOfTheWeek (593), MilliSecondOfTheWeek (571)
44.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 (608) function.
See also: WeekOfTheYear (608), DayOfTheYear (539), MinuteOfTheYear (575), SecondOfTheYear (593),
MilliSecondOfTheYear (572)
44.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 (620), MonthsBetween (578), WeeksBetween (608), DaysBetween (540), MinutesBetween (576), SecondsBetween (593), MilliSecondsBetween (572)
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 ;
555
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 .
44.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 (621), MonthSpan (579), WeekSpan (610), DaySpan (543), MinuteSpan (577), SecondSpan (594), MilliSecondSpan (573), HoursBetween (555)
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 ) ;
556
Test ( D1 , D2 ) ;
D2: =D1(306OneMinute ) ;
Test ( D1 , D2 ) ;
D2: =D1(5.4OneHour ) ;
Test ( D1 , D2 ) ;
D2: =D1(2.5OneHour ) ;
Test ( D1 , D2 ) ;
End .
44.4.47
IncDay
44.4.48
IncHour
557
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 .
44.4.49
IncMilliSecond
44.4.50
IncMinute
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 .
44.4.51
IncSecond
44.4.52
IncWeek
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 .
44.4.53
IncYear
44.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 (1639) 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 (561), InvalidDateTimeError (561), InvalidDateMonthWeekError (561), InvalidDayOfWeekInMonthError (562)
560
44.4.55
InvalidDateMonthWeekError
44.4.56
InvalidDateTimeError
44.4.57
InvalidDateWeekError
Synopsis: Raise an EConvertError with an invalid Year, WeekOfyear and DayOfWeek specification
Declaration: procedure InvalidDateWeekError(const AYear: Word;
const AWeekOfYear: Word;
const ADayOfWeek: Word)
Visibility: default
561
Description: InvalidDateWeekError raises an EConvertError (1639) 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 (561), InvalidDateDayError (560), InvalidDateMonthWeekError (561), InvalidDayOfWeekInMonthError (562)
44.4.58
InvalidDayOfWeekInMonthError
44.4.59
IsInLeapYear
562
44.4.60
IsPM
44.4.61
, IsPM (Now ) ) ;
IsSameDay
563
44.4.62
IsSameMonth
44.4.63
IsToday
44.4.64
IsValidDate
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 .
44.4.65
IsValidDateDay
44.4.66
IsValidDateMonthWeek
Synopsis: Check whether a given year/month/week/day of the week combination is a valid day
565
44.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
566
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 (564), IsValidTime (568), IsValidDateDay (565), IsValidDateWeek (567), IsValidDateMonthWeek (565)
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 .
44.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 (564), IsValidTime (568), IsValidDateTime (566), IsValidDateDay (565), IsValidDateMonthWeek (565)
Listing: ./datutex/ex10.pp
567
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 .
44.4.69
IsValidTime
44.4.70
JulianDateToDateTime
568
44.4.71
LocalTimeToUniversal
44.4.72
MacTimeStampToUnix
44.4.73
MacToDateTime
44.4.74
MilliSecondOf
44.4.75
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 (554) function.
See also: MilliSecondOfTheYear (572), MilliSecondOfTheMonth (571), MilliSecondOfTheWeek (571), MilliSecondOfTheHour (570), MilliSecondOfTheMinute (570), MilliSecondOfTheSecond (571), HourOfTheDay (554), MinuteOfTheDay (574), SecondOfTheDay (591)
44.4.76
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 (574) function.
See also: MilliSecondOfTheYear (572), MilliSecondOfTheMonth (571), MilliSecondOfTheWeek (571), MilliSecondOfTheDay (570), MilliSecondOfTheMinute (570), MilliSecondOfTheSecond (571), MinuteOfTheHour (574), SecondOfTheHour (592)
44.4.77
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 (592) function.
See also: MilliSecondOfTheYear (572), MilliSecondOfTheMonth (571), MilliSecondOfTheWeek (571), MilliSecondOfTheDay (570), MilliSecondOfTheHour (570), MilliSecondOfTheMinute (570), MilliSecondOfTheSecond (571), SecondOfTheMinute (592)
570
44.4.78
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 first of the month will return 0.
For an example, see the WeekOfTheMonth (607) function.
See also: WeekOfTheMonth (607), DayOfTheMonth (538), HourOfTheMonth (554), MinuteOfTheMonth
(575), SecondOfTheMonth (592), MilliSecondOfTheMonth (571)
44.4.79
MilliSecondOfTheSecond
Synopsis: Calculate the number of milliseconds elapsed since the start of the second
Declaration: function MilliSecondOfTheSecond(const AValue: TDateTime) : Word
Visibility: default
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 (572), MilliSecondOfTheMonth (571), MilliSecondOfTheWeek (571), MilliSecondOfTheDay (570), MilliSecondOfTheHour (570), MilliSecondOfTheMinute (570), SecondOfTheMinute (592)
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 .
44.4.80
MilliSecondOfTheWeek
Synopsis: Calculate the number of milliseconds elapsed since the start of the week
Declaration: function MilliSecondOfTheWeek(const AValue: TDateTime) : LongWord
Visibility: default
571
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 first of the Week will return 0.
For an example, see the DayOfTheWeek (539) function.
See also: MilliSecondOfTheYear (572), MilliSecondOfTheMonth (571), MilliSecondOfTheDay (570), MilliSecondOfTheHour (570), MilliSecondOfTheMinute (570), MilliSecondOfTheSecond (571), DayOfTheWeek (539), HourOfTheWeek (554), MinuteOfTheWeek (575), SecondOfTheWeek (593)
44.4.81
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 (608) function.
See also: WeekOfTheYear (608), DayOfTheYear (539), HourOfTheYear (555), MinuteOfTheYear (575), SecondOfTheYear (593), MilliSecondOfTheYear (572)
44.4.82
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 (620), MonthsBetween (578), WeeksBetween (608), DaysBetween (540), HoursBetween (555), MinutesBetween (576), SecondsBetween (593)
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
572
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 .
44.4.83
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.
See also: YearSpan (621), MonthSpan (579), WeekSpan (610), DaySpan (543), HourSpan (556), MinuteSpan
(577), SecondSpan (594), MilliSecondsBetween (572)
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 ) ;
573
44.4.84
MinuteOf
44.4.85
MinuteOfTheDay
Synopsis: Calculate the number of minutes elapsed since the start of the day
Declaration: function MinuteOfTheDay(const AValue: TDateTime) : Word
Visibility: default
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 (554) function.
See also: MinuteOfTheYear (575), MinuteOfTheMonth (575), MinuteOfTheWeek (575), MinuteOfTheHour
(574), HourOfTheDay (554), SecondOfTheDay (591), MilliSecondOfTheDay (570)
44.4.86
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 (575), MinuteOfTheMonth (575), MinuteOfTheWeek (575), MinuteOfTheDay
(574), SecondOfTheHour (592), MilliSecondOfTheHour (570)
Listing: ./datutex/ex44.pp
574
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 .
44.4.87
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
first day of the month will return 0.
For an example, see the WeekOfTheMonth (607) function.
See also: WeekOfTheMonth (607), DayOfTheMonth (538), HourOfTheMonth (554), MinuteOfTheMonth
(575), SecondOfTheMonth (592), MilliSecondOfTheMonth (571)
44.4.88
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
first day of the week will return 0.
For an example, see the DayOfTheWeek (539) function.
See also: MinuteOfTheYear (575), MinuteOfTheMonth (575), MinuteOfTheDay (574), MinuteOfTheHour
(574), DayOfTheWeek (539), HourOfTheWeek (554), SecondOfTheWeek (593), MilliSecondOfTheWeek (571)
44.4.89
MinuteOfTheYear
Synopsis: Calculate the number of minutes elapsed since the start of the year
Declaration: function MinuteOfTheYear(const AValue: TDateTime) : LongWord
575
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 (608) function.
See also: WeekOfTheYear (608), DayOfTheYear (539), HourOfTheYear (555), MinuteOfTheYear (575), SecondOfTheYear (593), MilliSecondOfTheYear (572)
44.4.90
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 (620), MonthsBetween (578), WeeksBetween (608), DaysBetween (540), HoursBetween (555), SecondsBetween (593), MilliSecondsBetween (572)
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 ) ;
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 .
576
44.4.91
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 (621), MonthSpan (579), WeekSpan (610), DaySpan (543), HourSpan (556), SecondSpan
(594), MilliSecondSpan (573), MinutesBetween (576)
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
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 .
44.4.92
ModifiedJulianDateToDateTime
44.4.93
MonthOf
44.4.94
MonthOfTheYear
44.4.95
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 (620), WeeksBetween (608), DaysBetween (540), HoursBetween (555), MinutesBetween (576), SecondsBetween (593), MilliSecondsBetween (572)
Listing: ./datutex/ex56.pp
578
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 .
44.4.96
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 (621), WeekSpan (610), DaySpan (543), HourSpan (556), MinuteSpan (577), SecondSpan
(594), MilliSecondSpan (573), MonthsBetween (578)
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 ;
579
44.4.97
NthDayOfWeek
Synopsis: Calculate which occurrence of weekday in the month a given day represents
Declaration: function NthDayOfWeek(const AValue: TDateTime) : Word
Visibility: default
Description: NthDayOfWeek returns the occurrence 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 (547), #rtl.sysutils.DayOfWeek (1534), DecodeDayOfWeekInMonth (546),
EncodeDayOfWeekInMonth (548), TryEncodeDayOfWeekInMonth (604)
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 .
580
44.4.98
PeriodBetween
Synopsis: Return the period (in years, months, days) between two dates
Declaration: procedure PeriodBetween(const ANow: TDateTime;const AThen: TDateTime;
out Years: Word;out months: Word;out days: Word)
Visibility: default
Description: PeriodBetween returns the timespan between 2 dates (ANow and AThen), expressed as a number of years, months and days in the parameters Years, months and days. Only complete years,
months and days are reported.
If ANow is before AThen, their values are reversed so the result is always positive.
See also: YearsBetween (620), MonthsBetween (578), WeeksBetween (608), DaysBetween (540)
44.4.99
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 first 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 (621)
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 .
44.4.100
, PreviousDayOfWeek (D ) ) ;
RecodeDate
Errors: If one of the AYear, AMonth, ADay values is not within a valid range then an EConvertError
exception is raised.
See also: RecodeYear (587), RecodeMonth (585), RecodeDay (583), RecodeHour (583), RecodeMinute (585),
RecodeSecond (586), RecodeDate (581), RecodeTime (587), RecodeDateTime (582)
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 .
44.4.101
,S ) ;
RecodeDateTime
582
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 .
44.4.102
RecodeDay
44.4.103
,S ) ;
RecodeHour
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 (587), RecodeMonth (585), RecodeDay (583), RecodeMinute (585), RecodeSecond
(586), RecodeMilliSecond (584), RecodeDate (581), RecodeTime (587), RecodeDateTime (582)
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 .
44.4.104
RecodeMilliSecond
584
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 .
44.4.105
RecodeMinute
44.4.106
RecodeMonth
Errors: If the AMonth value is not within a valid range (1..12) then an EConvertError exception is
raised.
See also: RecodeYear (587), RecodeDay (583), RecodeHour (583), RecodeMinute (585), RecodeSecond (586),
RecodeMilliSecond (584), RecodeDate (581), RecodeTime (587), RecodeDateTime (582)
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 .
44.4.107
RecodeSecond
586
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 .
44.4.108
RecodeTime
44.4.109
RecodeYear
587
Errors: If the AYear value is not within a valid range (1..9999) then an EConvertError exception is
raised.
See also: RecodeMonth (585), RecodeDay (583), RecodeHour (583), RecodeMinute (585), RecodeSecond
(586), RecodeMilliSecond (584), RecodeDate (581), RecodeTime (587), RecodeDateTime (582)
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 .
44.4.110
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 (533) returns zero.
See also: CompareDateTime (534), CompareDate (533), CompareTime (535), SameDateTime (589), SameTime (590)
Listing: ./datutex/ex102.pp
Program Example102 ;
{ T h i s program demonstrates t h e SameDate 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 date as ) ;
W r i t e l n ( FormatDateTime ( Fmt , D2 ) , : , SameDate ( D1 , D2 ) ) ;
end ;
588
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 .
44.4.111
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 (534) returns zero.
See also: CompareDateTime (534), CompareDate (533), CompareTime (535), SameDate (588), SameTime
(590)
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 ) ) ;
end ;
Var
D, N : TDateTime ;
Begin
D: = Today ;
N: =Now;
Test (D,D ) ;
Test (N,N ) ;
Test (N+1 ,N ) ;
589
Test (N1,N ) ;
Test (N+OneSecond ,N ) ;
Test (NOneSecond ,N ) ;
End .
44.4.112
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 (535) returns zero.
See also: CompareDateTime (534), CompareDate (533), CompareTime (535), SameDateTime (589), SameDate (588)
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 ) ;
Test (N+1 ,N ) ;
Test (N1,N ) ;
Test (N+OneSecond ,N ) ;
Test (NOneSecond ,N ) ;
End .
44.4.113
ScanDateTime
Synopsis: Scans a string for a DateTime pattern and returns the date/time
590
44.4.114
SecondOf
44.4.115
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 (554) function.
See also: SecondOfTheYear (593), SecondOfTheMonth (592), SecondOfTheWeek (593), SecondOfTheHour
(592), SecondOfTheMinute (592), HourOfTheDay (554), MinuteOfTheDay (574), MilliSecondOfTheDay (570)
591
44.4.116
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 (574) function.
See also: SecondOfTheYear (593), SecondOfTheMonth (592), SecondOfTheWeek (593), SecondOfTheDay
(591), SecondOfTheMinute (592), MinuteOfTheHour (574), MilliSecondOfTheHour (570)
44.4.117
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 (593), SecondOfTheMonth (592), SecondOfTheWeek (593), SecondOfTheDay
(591), SecondOfTheHour (592), MilliSecondOfTheMinute (570)
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 .
44.4.118
SecondOfTheMonth
Synopsis: Calculate number of seconds elapsed since the start of the month.
Declaration: function SecondOfTheMonth(const AValue: TDateTime) : LongWord
Visibility: default
592
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 first day of the month will return 0.
For an example, see the WeekOfTheMonth (607) function.
See also: WeekOfTheMonth (607), DayOfTheMonth (538), HourOfTheMonth (554), MinuteOfTheMonth
(575), MilliSecondOfTheMonth (571)
44.4.119
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 first day of the week will return 0.
For an example, see the DayOfTheWeek (539) function.
See also: SecondOfTheYear (593), SecondOfTheMonth (592), SecondOfTheDay (591), SecondOfTheHour
(592), SecondOfTheMinute (592), DayOfTheWeek (539), HourOfTheWeek (554), MinuteOfTheWeek (575), MilliSecondOfTheWeek (571)
44.4.120
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 (608) function.
See also: WeekOfTheYear (608), DayOfTheYear (539), HourOfTheYear (555), MinuteOfTheYear (575), SecondOfTheYear (593), MilliSecondOfTheYear (572)
44.4.121
SecondsBetween
Synopsis: Calculate the number of whole seconds between two DateTime values.
Declaration: function SecondsBetween(const ANow: TDateTime;const AThen: TDateTime)
: Int64
Visibility: default
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 (620), MonthsBetween (578), WeeksBetween (608), DaysBetween (540), HoursBetween (555), MinutesBetween (576), MilliSecondsBetween (572)
593
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 .
44.4.122
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 (621), MonthSpan (579), WeekSpan (610), DaySpan (543), HourSpan (556), MinuteSpan
(577), MilliSecondSpan (573), SecondsBetween (593)
Listing: ./datutex/ex69.pp
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 ;
594
44.4.123
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 (598), StartOfTheWeek (599), StartOfAWeek (596), StartOfAMonth (596), StartOfTheMonth (598), EndOfTheWeek (552), EndOfAWeek (550), EndOfTheYear (553), EndOfAYear (551),
EndOfTheMonth (552), EndOfAMonth (549), EndOfTheDay (551), EndOfADay (549)
Listing: ./datutex/ex38.pp
Program Example38 ;
{ 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 ;
595
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 .
44.4.124
StartOfAMonth
44.4.125
StartOfAWeek
Synopsis: Return a day of the week, given a year, week and day in the week.
Declaration: function StartOfAWeek(const AYear: Word;const AWeekOfYear: Word;
const ADayOfWeek: Word) : TDateTime
function StartOfAWeek(const AYear: Word;const AWeekOfYear: Word)
: TDateTime
Visibility: default
596
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 (599), EndOfTheWeek (552), EndOfAWeek (550), StartOfAMonth (596), EndOfTheYear (553), EndOfAYear (551), EndOfTheMonth (552), EndOfAMonth (549)
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 .
44.4.126
StartOfAYear
597
44.4.127
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 (595), StartOfTheWeek (599), StartOfAWeek (596), StartOfAMonth (596), StartOfTheMonth (598), EndOfTheWeek (552), EndOfAWeek (550), EndOfTheYear (553), EndOfAYear (551),
EndOfTheMonth (552), EndOfAMonth (549), EndOftheDay (551), EndOfADay (549)
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 ;
Begin
W r i t e l n ( FormatDateTime ( Fmt , StartOfTheDay ( Today ) ) ) ;
End .
44.4.128
StartOfTheMonth
Synopsis: Calculate the first 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 first day of that year and month as the StartOfAMonth (596) function.
See also: StartOfAMonth (596), EndOfTheYear (553), EndOfAYear (551), EndOfTheMonth (552), EndOfAMonth (549), StartOfAWeek (596), StartOfTheWeek (599)
Listing: ./datutex/ex28.pp
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 .
598
44.4.129
StartOfTheWeek
44.4.130
StartOfTheYear
Synopsis: Return the first 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 first day of that year (January 1), as the StartOfAYear (597) function.
See also: StartOfAYear (597), EndOfTheYear (553), EndOfAYear (551)
Listing: ./datutex/ex24.pp
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 .
599
44.4.131
TimeOf
44.4.132
Today
44.4.133
Tomorrow
600
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 .
44.4.134
TryEncodeDateDay
44.4.135
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
601
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 (544), EncodeDateTime (547), EncodeDateWeek (548), EncodeDateDay
(547), EncodeDateMonthWeek (547), TryEncodeDateTime (602), TryEncodeDateWeek (603), TryEncodeDateDay (601), NthDayOfWeek (580)
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 .
44.4.136
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
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 (547), EncodeDateMonthWeek (547), EncodeDateWeek (548), EncodeDateDay
(547), TryEncodeDateDay (601), TryEncodeDateWeek (603), TryEncodeDateMonthWeek (601)
Listing: ./datutex/ex80.pp
Program Example79 ;
{ T h i s program demonstrates t h e TryEncodeDateTime f u n c t i o n }
602
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 .
44.4.137
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 (547), EncodeDateWeek (548), EncodeDateTime (547), EncodeDateDay
(547), TryEncodeDateTime (602), TryEncodeDateMonthWeek (601), TryEncodeDateDay (601)
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 ;
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 .
603
44.4.138
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 (580), EncodeDateMonthWeek (547), #rtl.sysutils.DayOfWeek (1534), DecodeDayOfWeekInMonth (546), EncodeDayOfWeekInMonth (548)
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 .
44.4.139
TryEncodeTimeInterval
604
44.4.140
TryJulianDateToDateTime
44.4.141
TryModifiedJulianDateToDateTime
44.4.142
TryRecodeDateTime
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 .
44.4.143
UniversalTimeToLocal
44.4.144
UnixTimeStampToMac
606
44.4.145
UnixToDateTime
44.4.146
WeekOf
44.4.147
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 first week of the year is the week with at least 4 days in it.
See also: WeekOfTheYear (608), DayOfTheMonth (538), HourOfTheMonth (554), MinuteOfTheMonth (575),
SecondOfTheMonth (592), MilliSecondOfTheMonth (571)
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
607
N: =Now;
Writeln (
Writeln (
Writeln (
Writeln (
Writeln (
Writeln (
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 ) ) ;
:
:
:
:
:
:
, WeekOfTheMonth (N ) ) ;
, DayOfTheMonth (N ) ) ;
, HourOfTheMonth (N ) ) ;
, MinuteOfTheMonth (N ) ) ;
, SecondOfTheMonth (N ) ) ;
,
End .
44.4.148
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 (607).
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 first week of the year is the week with at least 4 days in it.
See also: WeekOf (607), MonthOfTheYear (578), DayOfTheYear (539), HourOfTheYear (555), MinuteOfTheYear
(575), SecondOfTheYear (593), MilliSecondOfTheYear (572)
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 (
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 ) ) ;
:
:
:
:
:
:
:
, MonthOfTheYear (N ) ) ;
, WeekOfTheYear (N ) ) ;
, DayOfTheYear (N ) ) ;
, HourOfTheYear (N ) ) ;
, MinuteOfTheYear (N ) ) ;
, SecondOfTheYear (N ) ) ;
,
End .
44.4.149
WeeksBetween
Synopsis: Calculate the number of whole weeks between two DateTime values
608
44.4.150
WeeksInAYear
See also: WeeksInYear (610), DaysInYear (542), DaysInAYear (541), DaysInMonth (542), DaysInAMonth
(540)
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 .
44.4.151
WeeksInYear
44.4.152
WeekSpan
Synopsis: Calculate the approximate number of weeks between two DateTime values.
Declaration: function WeekSpan(const ANow: TDateTime;const AThen: TDateTime) : Double
610
Visibility: default
Description: WeekSpan returns the number of weeks between ANow and AThen, including any fractional parts
of a week.
See also: YearSpan (621), MonthSpan (579), DaySpan (543), HourSpan (556), MinuteSpan (577), SecondSpan
(594), MilliSecondSpan (573), WeeksBetween (608)
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 .
44.4.153
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 (540) 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
611
See also: WithinPastYears (618), WithinPastMonths (615), WithinPastWeeks (617), WithinPastHours (612),
WithinPastMinutes (614), WithinPastSeconds (616), WithinPastMilliSeconds (613)
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 .
44.4.154
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 (555) 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 (618), WithinPastMonths (615), WithinPastWeeks (617), WithinPastDays (611),
WithinPastMinutes (614), WithinPastSeconds (616), WithinPastMilliSeconds (613)
612
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 .
44.4.155
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 (572) 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 (618), WithinPastMonths (615), WithinPastWeeks (617), WithinPastDays (611),
WithinPastHours (612), WithinPastMinutes (614), WithinPastSeconds (616)
613
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 .
44.4.156
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 (576) 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 (618), WithinPastMonths (615), WithinPastWeeks (617), WithinPastDays (611),
WithinPastHours (612), WithinPastSeconds (616), WithinPastMilliSeconds (613)
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 }
614
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 .
44.4.157
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 (578) 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 (618), WithinPastWeeks (617), WithinPastDays (611), WithinPastHours (612),
WithinPastMinutes (614), WithinPastSeconds (616), WithinPastMilliSeconds (613)
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 ;
615
44.4.158
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 (593) 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 (618), WithinPastMonths (615), WithinPastWeeks (617), WithinPastDays (611),
WithinPastHours (612), WithinPastMinutes (614), WithinPastMilliSeconds (613)
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 ) ;
616
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 .
44.4.159
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 (608) 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 (618), WithinPastMonths (615), WithinPastDays (611), WithinPastHours (612),
WithinPastMinutes (614), WithinPastSeconds (616), WithinPastMilliSeconds (613)
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 ) ) ;
617
44.4.160
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 (620) 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 (615), WithinPastWeeks (617), WithinPastDays (611), WithinPastHours (612),
WithinPastMinutes (614), WithinPastSeconds (616), WithinPastMilliSeconds (613)
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 ) ) ;
618
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 .
44.4.161
YearOf
Year
Month
Day
Week
Hour
Minute
Second
:
:
:
:
:
:
:
, YearOf (D ) ) ;
, MonthOf (D ) ) ;
, DayOf (D ) ) ;
, WeekOf (D ) ) ;
, HourOf (D ) ) ;
, MinuteOf (D ) ) ;
, SecondOf (D ) ) ;
619
Writeln ( MilliSecond :
End .
44.4.162
, M i l l i S e c o n d O f (D ) ) ;
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 (578), WeeksBetween (608), DaysBetween (540), HoursBetween (555), MinutesBetween (576), SecondsBetween (593), MilliSecondsBetween (572), YearSpan (621)
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 .
620
44.4.163
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 (579), WeekSpan (610), DaySpan (543), HourSpan (556), MinuteSpan (577), SecondSpan (594), MilliSecondSpan (573), YearsBetween (620)
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 .
44.4.164
Yesterday
621
Description: Yesterday returns yesterdays date. Yesterday is determined from the system clock, i.e. it is
Today (600) -1.
See also: Today (600), Tomorrow (600)
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 .
622
Chapter 45
Used units
Table 45.1: Used units by unit Dos
Name
BaseUnix
System
45.2
Page
113
1224
Overview
The DOS unit gives access to some operating system calls related to files, the file system, date and
time. Except for the PalmOS target, this unit is available to all supported platforms.
The unit was first written for dos by Florian Klaempfl. 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 (1476) unit instead.
45.3
System information
Functions for retrieving and setting general system information such as date and time.
623
Table 45.2:
Name
DosVersion (1)
GetCBreak (638)
GetDate (638)
GetIntVec (641)
GetTime (642)
GetVerify (643)
Intr (643)
Keep (643)
MSDos (644)
PackTime (644)
SetCBreak (645)
SetDate (645)
SetIntVec (646)
SetTime (647)
SetVerify (647)
SwapVectors (647)
UnPackTime (648)
45.4
Description
Get OS version
Get setting of control-break handling flag
Get system date
Get interrupt vector status
Get system time
Get verify flag
Execute an interrupt
Keep process in memory and exit
Execute MS-dos function call
Pack time for file time
Set control-break handling flag
Set system date
Set interrupt vectors
Set system time
Set verify flag
Swap interrupt vectors
Unpack file time
Process handling
45.5
Description
Exit code of last executed program
Return number of environment variables
Return environment string pair
Execute program
Return specified environment string
Description
Add disk to list of disks (UNIX only)
Return size of free disk space
Return total disk size
624
45.6
File handling
45.7
Description
Expand filename to full path
Close finfirst/findnext session
Start find of file
Find next file
Search for file in a path
Split filename in parts
Return file attributes
Return file time
Convert short filename to long filename (DOS only)
Convert long filename to short filename (DOS only)
Set file attributes
Set file time
These constants are used in the Mode field of the TextRec record. Gives information on the filemode of the text I/O. For their definitions consult the following table:
Table 45.6: Possible mode constants
Constant
fmclosed
fminput
fmoutput
fminout
45.8
Description
File is closed
File is read only
File is write only
File is read and write
Value
$D7B0
$D7B1
$D7B2
$D7B3
File attributes
The File Attribute constants are used in FindFirst (635), FindNext (636) to determine what type of
special file to search for in addition to normal files. These flags are also used in the SetFAttr (645) and
GetFAttr (639) routines to set and retrieve attributes of files. For their definitions consult fileattributes
(625).
625
45.9
45.9.1
Description
Read-Only file attribute
Hidden file attribute
System file attribute
Volumd ID file attribute
Directory file attribute
Archive file attribute
Match any file attribute
anyfile = $3F
Match any file attribute
archive = $20
Archive file attribute
directory = $10
Directory file attribute
fauxiliary = $0010
CPU auxiliary flag. Not used.
fcarry = $0001
CPU carry flag. Not used.
FileNameLen = 255
Maximum length of a filename
fmclosed = $D7B0
File is closed
fminout = $D7B3
File is read and write
fminput = $D7B1
626
Value
$01
$02
$04
$08
$10
$20
$3F
45.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
627
The DateTime type is used in PackTime (644) and UnPackTime (648) for setting/reading file times
with GetFTime (640) and SetFTime (646).
DirStr = string
Full directory string type.
ExtStr = string
Filename extension string type.
NameStr = string
Fill filename string type.
PathStr = string
Full File path string type.
Registers = packed record
case i : Integer of
0: (
ax : Word;
f1 : Word;
bx : Word;
f2 : Word;
cx : Word;
f3 : Word;
dx : Word;
f4 : Word;
bp : Word;
f5 : Word;
si : Word;
f51 : Word;
di : Word;
f6 : Word;
ds : Word;
f7 : Word;
es : Word;
f8 : Word;
flags : Word;
fs : Word;
gs : Word;
);
1: (
al : Byte;
ah : Byte;
f9 : Byte;
f10 : Byte;
bl : Byte;
bh : Byte;
f11 : Byte;
628
f12 : Byte;
cl : Byte;
ch : Byte;
f13 : Byte;
f14 : Byte;
dl : Byte;
dh : Byte;
);
2: (
eax : LongInt;
ebx : LongInt;
ecx : LongInt;
edx : LongInt;
ebp : LongInt;
esi : LongInt;
edi : LongInt;
);
end
This structure is only defined on a i386 compatible 32-bit platform, and is not used anywhere: it is
defined for Turbo Pascal backwards compatibility only.
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 filled by the FindFirst (635) call and can be used in subsequent FindNext (636) calls
to search for files. The structure of this record depends on the platform. Only the following fields are
present on all platforms:
Attr File attributes.
Time File modification time.
Size File size
Name File name (name part only, no path)
Mode File access mode (linux only)
629
45.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 45.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 files.
45.10
45.10.1
630
45.10.2
DiskFree
45.10.3
DiskSize
45.10.4
DosExitCode
45.10.5
DosVersion
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 .
45.10.6
, Lo ( V e r s i o n ) , . , Hi ( V e r s i o n ) ) ;
DTToUnixDate
45.10.7
EnvCount
633
Visibility: default
Description: EnvCount returns the number of environment variables.
Errors: None.
See also: EnvStr (634), GetEnv (639)
45.10.8
EnvStr
45.10.9
Exec
634
45.10.10
FExpand
45.10.11
, FExpand ( ParamStr ( 0 ) ) ) ;
FindClose
45.10.12
FindFirst
Description: FindFirst searches the file specified in Path. Normal files, as well as all special files which
have the attributes specified 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 first file which matches the specified criteria. If DosError is different
from zero, no file(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 (635) before starting a new one. Failure to do so will end in a
Run-Time Error 6 (Invalid file handle)
Errors: Errors are reported in DosError.
See also: FindNext (636), FindClose (635)
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 .
45.10.13
FindNext
45.10.14
FSearch
Visibility: default
Description: FSearch searches the file Path in all directories listed in DirList. The full name of the found
file is returned. DirList must be a list of directories, separated by semi-colons. When no file 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 (635)
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 .
45.10.15
FSplit
637
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 .
45.10.16
GetCBreak
45.10.17
GetDate
638
45.10.18
GetEnv
45.10.19
, GetEnv ( PATH ) ) ;
GetFAttr
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 .
45.10.20
GetFTime
640
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 .
45.10.21
GetIntVec
45.10.22
GetLongName
45.10.23
GetMsCount
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 specific calls for timings.
See also: GetTime (642)
45.10.24
GetShortName
45.10.25
GetTime
642
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 .
45.10.26
GetVerify
45.10.27
Intr
45.10.28
Keep
643
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.
45.10.29
MSDos
45.10.30
PackTime
644
45.10.31
SetCBreak
45.10.32
SetDate
45.10.33
SetFAttr
645
Description: SetFAttr sets the file attributes of the file-variable F. F can be a untyped or typed file, 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 (639)
45.10.34
SetFTime
45.10.35
SetIntVec
646
45.10.36
SetTime
45.10.37
SetVerify
45.10.38
SwapVectors
647
45.10.39
UnixDateToDt
45.10.40
UnpackTime
45.10.41
weekday
648
Chapter 46
Overview
The dxeload unit was implemented by Pierre Mueller for dos, it allows to load a DXE file (an object
file with 1 entry point) into memory and return a pointer to the entry point.
It exists only for dos.
46.2
46.2.1
649
Chapter 47
Overview
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.
47.2
47.2.1
NilHandle = (0)
Correctly typed Nil handle - returned on error by LoadLibrary (652)
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.
47.2.2
Types
HModule = TLibHandle
Alias for TLibHandle (650) type.
TLibHandle = PtrInt
TLibHandle should be considered an opaque type. It is defined differently on various platforms.
The definition shown here depends on the platform for which the documentation was generated.
TOrdinalEntry = SizeUInt
650
TOrdinalEntry is mainly used on Windows and OS/2 operating systems to retrieve the address
of a procedure using the index (ordinal) of the procedure. On these operating systems, entry points
can be loaded using name or ordinal value.
47.3
47.3.1
47.3.2
GetLoadErrorStr
47.3.3
GetProcAddress
47.3.4
GetProcedureAddress
Description: GetProcedureAddress returns a pointer to the location in memory of the symbol ProcName
or ordinal value Ordinal in the dynamically loaded library specified 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.
Only windows and OS/2 support getting the address of a function using an ordinal value.
Errors: If the symbol cannot be found, Nil is returned.
See also: LoadLibrary (652), UnLoadLibrary (652)
47.3.5
LoadLibrary
47.3.6
SafeLoadLibrary
47.3.7
UnloadLibrary
652
Chapter 48
Overview
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.
48.2
48.2.1
653
Chapter 49
Used units
Table 49.1: Used units by unit errors
Name
System
unixtype
49.2
Page
1224
1784
Overview
The errors unit contains routines to convert a unix system call error code to an error message: StrError
(655). It is only available on unix platforms.
49.3
49.3.1
49.4
49.4.1
49.4.2
StrError
655
Chapter 50
Overview
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 (862) and lnfodwrf (891) unit to examine the binary for debug info.
50.2
50.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 file descriptor, and various
fields 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.
656
50.3
50.3.1
50.3.2
FindExeSection
50.3.3
GetModuleByAddr
50.3.4
OpenExeFile
657
Description: OpenExeFile opens the executable file fn and initializes the structure e for subsequent calls to
routines in the exeinfo unit.
The function returns True if the file was opened succesfully, false otherwise.
See also: FindExeSection (657), CloseExeFile (657), ReadDebugLink (658)
50.3.5
ReadDebugLink
658
Chapter 51
Used units
Table 51.1: Used units by unit fgl
Name
System
sysutils
Types
51.2
Page
1224
1476
1650
Overview
51.3
51.3.1
51.3.2
Types
If the result of this function is negative, the first key (key1) is assumed to be less than the
second key (key2) and will be moved before the second in the list.
If the function result is positive, the first key (key1) pointer is assumed to be greater than
the second key (key2)and will be moved after the second in the list.
if the function result is zero, the keys are assumed to be equal and no moving will take place.
51.4
51.4.1
EListError
Description
EListError is the exception used in the TFPSList (683) class to indicate errors such as a list index
out of bounds, wrong capacity etc.
See also: TFPSList.Capacity (689), TFPSList.Exchange (686), TFPSList.Items (689)
51.5
51.5.1
TFPGInterfacedObjectList
Description
TFPGList can be used to specialize a list for any class type T that requires reference counting (all
objects that implement IInterface or IUnknown)). It will specialize to a list with the same
methods as TFPSList (683) or classes.TFPList (659) or TFPObjectList
Classes that implement IInterface or IUnknown require special care to maintain the reference
count. The TFPGInterfacedObjectList list provides the necessary functionality to deal with
this.
See also: TFPSList (683), classes.TFPList (659)
51.5.2
Page
661
662
661
661
661
662
662
662
663
51.5.3
Page
663
664
663
664
Method overview
Method
Add
Assign
Create
Extract
GetEnumerator
IndexOf
Insert
Remove
Sort
Description
Add new object of class T to the list.
Copy objects from Source list
Instantiate a new interfaced object list.
Extract an item from the list
Return a list enumerator for T
Index of object
Insert a new object in the list
Remove an object from the list.
Sort the objects in the list
Property overview
Properties
First
Items
Last
List
Access
rw
rw
rw
r
Description
First non-nil object
Indexed access to objects in the list.
Last non-Nil object
Internal list pointer
660
51.5.4
TFPGInterfacedObjectList.Create
51.5.5
TFPGInterfacedObjectList.Add
51.5.6
TFPGInterfacedObjectList.Extract
51.5.7
TFPGInterfacedObjectList.GetEnumerator
661
51.5.8
TFPGInterfacedObjectList.IndexOf
51.5.9
TFPGInterfacedObjectList.Insert
51.5.10
TFPGInterfacedObjectList.Assign
51.5.11
TFPGInterfacedObjectList.Remove
51.5.12
TFPGInterfacedObjectList.Sort
51.5.13
TFPGInterfacedObjectList.First
51.5.14
TFPGInterfacedObjectList.Last
663
51.5.15
TFPGInterfacedObjectList.Items
51.5.16
TFPGInterfacedObjectList.List
51.6
51.6.1
TFPGList
Description
TFPGList can be used to specialize a list for any type T that does not require reference counting
(such as interfaced objects). It will specialize to a list with the same methods as TFPSList (683) or
classes.TFPList (659)
See also: TFPSList (683), classes.TFPList (659)
51.6.2
Page
665
666
665
665
665
666
666
666
667
Method overview
Method
Add
Assign
Create
Extract
GetEnumerator
IndexOf
Insert
Remove
Sort
Description
Add new item of type T to the list.
Copy elements from Source list
Instantiate a new list
Extract an item from the list
Return a list enumerator for T.
Index of item
Insert a new item in the list
Remove an item from the list.
Sort the list
664
51.6.3
Page
667
667
667
668
51.6.4
Property overview
Properties
First
Items
Last
List
Access
rw
rw
rw
r
Description
First non-empty item
Indexed access to items in the list
Last non-empty item
Internal list object
TFPGList.Create
51.6.5
TFPGList.Add
51.6.6
TFPGList.Extract
51.6.7
TFPGList.GetEnumerator
51.6.8
TFPGList.IndexOf
51.6.9
TFPGList.Insert
51.6.10
TFPGList.Assign
51.6.11
TFPGList.Remove
666
51.6.12
TFPGList.Sort
51.6.13
TFPGList.First
51.6.14
TFPGList.Last
51.6.15
TFPGList.Items
667
Description: Items provides indexed access to the items in the list. The items can be get or set.
The index Index is zero based, and has a maximum value of Count-1 (689).
Errors: If an invalid index is used, an EListError (660) exception is raised.
See also: TFPSList.Count (689)
51.6.16
TFPGList.List
51.7
51.7.1
TFPGListEnumerator
Description
51.7.2
Page
668
669
51.7.3
Page
669
51.7.4
Method overview
Method
Create
MoveNext
Description
Create a new list enumerator
Move to next element in the list
Property overview
Properties
Current
Access
r
Description
Current enumerated element
TFPGListEnumerator.Create
51.7.5
TFPGListEnumerator.MoveNext
51.7.6
TFPGListEnumerator.Current
51.8
51.8.1
TFPGMap
Description
TFPGMap is a generic map class. It can be used to specialize a map for any key type and data type
that do not require manual reference counting: For reference counted interface objects, TFPGMapInterfacedObjectData (674) must be used.
See also: TFPGMapInterfacedObjectData (674)
51.8.2
Page
670
670
670
671
671
671
671
672
Method overview
Method
Add
Create
Find
IndexOf
IndexOfData
InsertKey
InsertKeyData
Remove
Description
Add a key and value to the map
Create a new instance of the map
Find item based on key
Find index of a key in the list.
Find index of data value in the list.
Insert a new key in the list
Insert a new key with associated data in the list
Remove a key from the list
669
51.8.3
Page
672
672
672
673
673
673
51.8.4
Property overview
Properties
Data
KeyData
Keys
OnCompare
OnDataCompare
OnKeyCompare
Access
rw
rw
rw
rw
rw
rw
Description
Indexed access to the data in the list
Access to data based on key
Indexed access to the keys in the list.
Alias for OnKeyCompare
Compare function for data values.
Compare function for key values.
TFPGMap.Create
51.8.5
TFPGMap.Add
51.8.6
TFPGMap.Find
670
51.8.7
TFPGMap.IndexOf
51.8.8
TFPGMap.IndexOfData
51.8.9
TFPGMap.InsertKey
51.8.10
TFPGMap.InsertKeyData
51.8.11
TFPGMap.Remove
51.8.12
TFPGMap.Keys
51.8.13
TFPGMap.Data
51.8.14
TFPGMap.KeyData
Description: KeyData allows access to the data based on the key value AKey. The data can be read and written.
When writing, writing using an existing key will overwrite the current data. If it does not exist yet, it
will be created. When reading, if the key is not present, an EListError (660) will be raised.
Errors: If the key does not exist, an EListError (660) exception will be raised.
See also: TFPSList.Count (689), TFPGMap.Keys (672), TFPGMap.Data (672)
51.8.15
TFPGMap.OnCompare
51.8.16
TFPGMap.OnKeyCompare
51.8.17
TFPGMap.OnDataCompare
If the result of this function is negative, the first data item (Data1) is assumed to be less than
the second data item (Data2) and will be moved before the second in the list.
If the function result is positive, the first data item (Data1) pointer is assumed to be greater
than the second data item (Data2)and will be moved after the second in the list.
if the function result is zero, the data items are assumed to be equal and no moving will take
place.
See also: TFPGMap.OnKeyCompare (673)
51.9
51.9.1
TFPGMapInterfacedObjectData
Description
51.9.2
Page
675
674
675
675
676
676
676
676
51.9.3
Page
677
677
677
678
678
678
51.9.4
Method overview
Method
Add
Create
Find
IndexOf
IndexOfData
InsertKey
InsertKeyData
Remove
Description
Add a key and value to the map
Create a new instance of the map
Find item based on key
Find index of a key in the list.
Find index of data value in the list.
Insert a new key in the list
Insert a new key with associated data in the list
Remove a key from the list
Property overview
Properties
Data
KeyData
Keys
OnCompare
OnDataCompare
OnKeyCompare
Access
rw
rw
rw
rw
rw
rw
Description
Indexed access to the data in the list
Access to data based on key
Indexed access to the keys in the list.
Alias for OnKeyCompare
Compare function for data values.
Compare function for key values.
TFPGMapInterfacedObjectData.Create
674
Description: Create instantiates a new map. It mainly initializes the TFPSMap (691) parent with the sized of
the key and data.
See also: TFPSMap.Create (691)
51.9.5
TFPGMapInterfacedObjectData.Add
51.9.6
TFPGMapInterfacedObjectData.Find
51.9.7
TFPGMapInterfacedObjectData.IndexOf
675
51.9.8
TFPGMapInterfacedObjectData.IndexOfData
51.9.9
TFPGMapInterfacedObjectData.InsertKey
51.9.10
TFPGMapInterfacedObjectData.InsertKeyData
51.9.11
TFPGMapInterfacedObjectData.Remove
Errors: None.
See also: TFPGMap.InsertKey (671), TFPGMap.InsertKeyData (671), TFPGMap.Add (670), TFPGMapInterfacedObjectData.Delete (674)
51.9.12
TFPGMapInterfacedObjectData.Keys
51.9.13
TFPGMapInterfacedObjectData.Data
51.9.14
TFPGMapInterfacedObjectData.KeyData
51.9.15
TFPGMapInterfacedObjectData.OnCompare
51.9.16
TFPGMapInterfacedObjectData.OnKeyCompare
51.9.17
TFPGMapInterfacedObjectData.OnDataCompare
51.10
TFPGObjectList
51.10.1
Description
TFPGList can be used to specialize a list for any class type T that does not require reference
counting (such as interfaced objects). It will specialize to a list with the same methods as TFPSList
(683) or classes.TFPList (659) or TFPObjectList
See also: TFPSList (683), classes.TFPList (659)
51.10.2
Page
679
681
679
680
680
680
681
681
681
Method
Add
Assign
Create
Extract
GetEnumerator
IndexOf
Insert
Remove
Sort
51.10.3
Page
682
683
682
682
683
Method overview
Property overview
Properties
First
FreeObjects
Items
Last
List
51.10.4
Description
Add new object of class T to the list.
Copy objects from Source list
Instantiate a new object list.
Extract an item from the list
Return a list enumerator for T.
Index of item
Insert a new object in the list
Remove an object from the list.
Sort the objects in the list
Access
rw
rw
rw
rw
r
Description
First non-nil item
Does the list own the objects or not?
Indexed access to objects in the list.
Last non-Nil object
Internal list pointer
TFPGObjectList.Create
51.10.5
TFPGObjectList.Add
679
Visibility: public
Description: Add adds a new item Item of class type T to the list and returns the position at which the item was
added.
Errors: If the item could not be added, an EListError (660) exception is raised.
See also: TFPGObjectList.Extract (680), TFPGObjectList.Items (682), TFPGObjectList.IndexOf (680)
51.10.6
TFPGObjectList.Extract
51.10.7
TFPGObjectList.GetEnumerator
51.10.8
TFPGObjectList.IndexOf
680
51.10.9
TFPGObjectList.Insert
51.10.10
TFPGObjectList.Assign
51.10.11
TFPGObjectList.Remove
51.10.12
TFPGObjectList.Sort
681
If the result of this function is negative, the first object (Item1) is assumed to be less than
the second object (Item2) and will be moved before the second in the list.
If the function result is positive, the first object (Item1) is assumed to be greater than the
second object (Item2)and will be moved after the second in the list.
if the function result is zero, the objects are assumed to be equal and no moving will take
place.
Errors: None.
51.10.13
TFPGObjectList.First
51.10.14
TFPGObjectList.Last
51.10.15
TFPGObjectList.Items
682
51.10.16
TFPGObjectList.List
51.10.17
TFPGObjectList.FreeObjects
51.11
51.11.1
TFPSList
Description
TFPSList can be seen as the generalized equivalent of the classes unit TFPList (659) list. It is used
as a base class for the TFPGList (664), TFPGMap (669), TFPGObjectList (679), TFPGInterfacedObjectList (660) and TFPGMapInterfacedObjectData (674) generic classes.
This list is not meant to be used directly, it is an auxiliary class for the actual generic list classes.
See also: classes.TFPList (659), TFPGMap (669), TFPGObjectList (679), TFPGInterfacedObjectList (660),
TFPGMapInterfacedObjectData (674)
683
51.11.2
Page
685
687
685
684
685
684
685
686
686
686
686
687
687
688
688
688
Method
Add
Assign
Clear
Create
Delete
Destroy
Error
Exchange
Expand
Extract
IndexOf
Insert
Move
Pack
Remove
Sort
51.11.3
Page
689
689
690
689
690
690
690
Method overview
Description
Add a new item to the list
Copy one list to another
Clear the list
Create a new instance of TFPSList
Delete an item from the list
Destroy the list instance.
Raise an EListError exception.
Exchange two items in the list
Expand the capacity of the list
delete an element from the list
Search an item in the list
Insert a new item in the list.
Moves an item from one position in the list to another.
Remove empty items from the list
Remove the item from the list
Sort the list
Property overview
Properties
Capacity
Count
First
Items
ItemSize
Last
List
51.11.4
Access
rw
rw
rw
rw
r
rw
r
Description
Current capacity of the list
Current element count
Pointer to first non-empty item in the list
Items in the list
Size of the items in the list
Pointer to last non-empty item in the list
Internal list pointer
TFPSList.Create
51.11.5
TFPSList.Destroy
Override
Visibility: public
Description: Destroy clears and cleans up the list instance. Depending on the descendant, this may also remove
the items in the list from memory.
See also: TFPSList.Clear (685)
684
51.11.6
TFPSList.Add
51.11.7
TFPSList.Clear
51.11.8
TFPSList.Delete
51.11.9
TFPSList.Error
685
51.11.10
TFPSList.Exchange
51.11.11
TFPSList.Expand
51.11.12
TFPSList.Extract
51.11.13
TFPSList.IndexOf
686
51.11.14
TFPSList.Insert
51.11.15
TFPSList.Move
51.11.16
TFPSList.Assign
687
51.11.17
TFPSList.Remove
51.11.18
TFPSList.Pack
51.11.19
TFPSList.Sort
688
51.11.20
TFPSList.Capacity
51.11.21
TFPSList.Count
51.11.22
TFPSList.Items
689
51.11.23
TFPSList.ItemSize
51.11.24
TFPSList.List
51.11.25
TFPSList.First
51.11.26
TFPSList.Last
690
51.12
TFPSMap
51.12.1
Description
TFPSMap can be used to create a map for any type T that does not require reference counting (such
as interfaced objects). It will specialize to a map which is a generalized list with an arbitrary type as
the list index (called the key).
This class should normally not be used directly, instead use one of the generic map objects such as
TFPGMap (669).
See also: TFPGMap (669)
51.12.2
Page
692
691
692
692
693
693
693
693
694
694
Method
Add
Create
Find
IndexOf
IndexOfData
Insert
InsertKey
InsertKeyData
Remove
Sort
51.12.3
Page
695
695
694
696
695
695
697
696
696
696
Method overview
Description
Add a key, value pair to the map.
Create a new map with given key and data size.
Find data using the associated key
Index of key pointed to by AKey
Index of data item AData
Insert a new slot for key and associated data item in the list
Insert a key in the list
Insert a key and associated in the list
Remove a key/value pair from the map.
Sort the list according to key
Property overview
Properties
Data
DataSize
Duplicates
KeyData
Keys
KeySize
OnDataPtrCompare
OnKeyPtrCompare
OnPtrCompare
Sorted
51.12.4
Access
rw
r
rw
rw
rw
r
rw
rw
rw
rw
Description
Indexed access to the locations of all data items
Size (in bytes) for the data associated with keys
What to do with duplicate key values
Access to data locations using key
Indexed access to the locations of all keys
Size (in bytes) for the key
Callback to compare 2 data items
Callback to compare 2 keys
Alias for OnKeyPtrCompare
Is the map permanently sorted on key ?
TFPSMap.Create
Synopsis: Create a new map with given key and data size.
Declaration: constructor Create(AKeySize: Integer;ADataSize: Integer)
Visibility: public
Description: Create instantiates a new TFPSMap instance and initializes TFPSMap.KeySize (695) and TFPSMap.DataSize (695) with AKeySize and ADataSize, respectively. It also initializes the TFPSMap.OnDataPtrCompare (697) and TFPSMap.OnKeyPtrCompare (696) properties to functions
that compare memory blocks.
Errors: None.
691
51.12.5
TFPSMap.Add
51.12.6
TFPSMap.Find
51.12.7
TFPSMap.IndexOf
692
51.12.8
TFPSMap.IndexOfData
51.12.9
TFPSMap.Insert
Synopsis: Insert a new slot for key and associated data item in the list
Declaration: function Insert(Index: Integer) : Pointer
procedure Insert(Index: Integer;out AKey: Pointer;out AData: Pointer)
Visibility: public
Description: Insert will allocate a new slot in the list. It returns a pointer to the new slot. If Akey and AData
are given, then they will point to the positions in the slot for the key and data items.
Errors: If the maximum amount of values is reached or an invalid index is specified, Insert will raise an
EListError (660) exception.
See also: TFPSMap.Add (692), TFPSMap.InsertKey (693), TFPSMap.InsertKeyData (693)
51.12.10
TFPSMap.InsertKey
51.12.11
TFPSMap.InsertKeyData
51.12.12
TFPSMap.Remove
51.12.13
TFPSMap.Sort
51.12.14
TFPSMap.Duplicates
694
51.12.15
TFPSMap.KeySize
51.12.16
TFPSMap.DataSize
Synopsis: Size (in bytes) for the data associated with keys
Declaration: Property DataSize : Integer
Visibility: public
Access: Read
Description: DataSize is the size (in bytes) for the data in the map. This size is initialized during list construction and defaults to the size of a pointer.
See also: TFPSMap.Create (691), TFPSMap.KeySize (695), TFPSMap.Keys (695), TFPSMap.KeyData (696),
TFPSMap.Data (695)
51.12.17
TFPSMap.Keys
51.12.18
TFPSMap.Data
51.12.19
TFPSMap.KeyData
51.12.20
TFPSMap.Sorted
51.12.21
TFPSMap.OnPtrCompare
51.12.22
TFPSMap.OnKeyPtrCompare
696
Description: OnKeyPtrCompare is used to compare the values of 2 keys. By default it simply compares the
byte values of the key memory block. It can be set to any function that performs another comparison.
(e.g. a function that treats the memory blocks as a string pointer and compare the actual strings).
This function is used to sort the list or find a key.
See also: TFPSListCompareFunc (659), TFPSMap.OnDataPtrCompare (697), TFPSMap.Sort (694), TFPSMap.Find
(692), TFPSMap.IndexOf (692)
51.12.23
TFPSMap.OnDataPtrCompare
697
Chapter 52
Used units
Table 52.1: Used units by unit fpwidestring
Name
System
unicodedata
52.2
Page
1224
1715
Overview
fpwidestring implements unicode string support for the Free Pascal RTL using native Object
Pascal routines. It is meant to be used on operating systems where the operating system does not
natively support Unicode transformations and operations.
In general, it is sufficient to include the unit in the uses clause of a program. The initialization code
of the unit will set the unicode string manager of the system unit to the object pascal implementation
contained in this unit.
This unit needs unicode collation and character set tables in order to be able to do its work correctly.
These must be registered using the routines of the unicodedata (698) unit: the FPC project distributes
some unicode collation data in .bco files which can be loaded using the LoadCollation (1724)
routine.
In order for sorting and comparing of strings to work, a collation must be used. The collation in
general depends on the internationalization of the application. Since the system unit does not know
about collations, the collation must be set in the fpWideString unit using the SetActiveCollation
(699) function. The collation can be set on a per-thread basis.
New threads get DefaultCollationName (699) as the active collation name.
The fpwidestring unit performs conversions between unicode and single-byte ansistring conversions
(excluding UTF8). Support for various single-byte encodings are based on the charset (698) unit.
This unit can be used to load single byte code pages. Various code page units such as cp895, cp932,
cp950 are provided by the "rtl-unicode" package.
The fpwidestring requires at least the Default Unicode Collation Element Table to be registered
(called DUCET). The DUCET encoding is provided by the unicodeducet unit. More information
can be found in the unicodedata (698) unit.
698
52.3
52.3.1
DefaultCollationName : TCollationName =
DefaultCollationName is the collation name for new threads. It is empty by default.
52.4
52.4.1
Synopsis: Return the currently active collation for the current thread
Declaration: function GetActiveCollation : PUCA_DataBook
Visibility: default
Description: GetActiveCollation returns the currently active collation, for the current thread, as set using
the SetActiveCollation (699) function.
New threads get DefaultCollationName (699) as the active collation name. The collation can be
changed per thread using the SetActiveCollation (699) function.
Errors: None.
See also: SetActiveCollation (699), DefaultCollationName (699)
52.4.2
SetActiveCollation
699
Chapter 53
Overview
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 define the valid options for you program, and the
unit will then parse the command-line options for you, and inform you of any errors.
53.2
53.2.1
EndOfOptions = #255
Returned by getopt (702),getlongopts (702) to indicate that there are no more options.
No_Argument = 0
Specifies that a long option does not take an argument.
Optional_Argument = 2
Specifies that a long option optionally takes an argument.
OptSpecifier : Set of Char = [-]
Character indicating an option on the command-line.
Required_Argument = 1
Specifies that a long option needs an argument.
700
53.2.2
Types
Orderings = (require_order,permute,return_in_order)
Explanation
Change command-line options.
Dont touch the ordering of the command-line options
Return options in the correct order.
The TOption type is used to communicate the long options to GetLongOpts (702). The Name field
is the name of the option. Has_arg specifies if the option wants an argument, Flag is a pointer to
a char, which is set to Value, if it is non-nil.
53.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 first 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.
701
53.3
53.3.1
53.3.2
GetOpt
702
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 ;
703
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 .
704
Chapter 54
Overview
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 first written for
dos by Florian Klaempfl.
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
54.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 first 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 specified in the original call to get_rm_callback (729)
%DS:%ESI = 48 bit pointer 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 undefined
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
705
register fields 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 fields 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 finally 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 (729), free_rm_callback (724), lock_code (737), lock_data (737)
54.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 first 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 (747) and its linear address via transfer_buffer (747). Another way is
to allocate a completely new dos memory area via the global_dos_alloc (734) function for your use
and supply its real mode address.
See also: tb_size (747), transfer_buffer (747), global_dos_alloc (734), global_dos_free (735), realintr (740)
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 ;
706
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 ) ;
707
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 .
54.4
Software interrupts
Ordinarily, a handler installed with set_pm_interrupt (744) only services software interrupts that are
executed in protected mode; real mode software interrupts can be redirected by set_rm_interrupt
(745).
See also: set_rm_interrupt (745), get_rm_interrupt (732), set_pm_interrupt (744), get_pm_interrupt (728),
lock_data (737), lock_code (737), enable (723), disable (721), outportb (738)
54.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 first 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 first 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 ;
708
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 ) ) ;
709
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 .
54.6
Disabling interrupts
The GO32 unit provides the two procedures disable() and enable() to disable and enable all interrupts.
54.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.
54.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.
54.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 reflects 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 flags are passed to the real mode handler and
the modified registers and flags are returned to the protected mode handler. Segment registers and
stack pointer are not passed between modes.
710
54.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.
54.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 (724), get_ds (725), get_ss (734)
54.12
The I/O port access is done via the various inportb (736), outportb (738) 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 (738), inportb (736)
54.13
Dos memory is accessed by the predefined 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 (713), dosmemput (713), dosmemmove (713), dosmemfillchar (712), dosmemfillword
(713), seg_move (742), seg_fillchar (741), seg_fillword (742)
54.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 (724), get_ds (725), get_ss (734), allocate_ldt_descriptors (718), free_ldt_descriptor (723),
segment_to_descriptor (741), get_next_selector_increment_value (727), get_segment_base_address
(733), set_segment_base_address (745), set_segment_limit (746), create_code_segment_alias_descriptor
(721)
711
54.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 sufficient 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.
54.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.
54.17
54.17.1
Constants
auxcarryflag = $010
Check for auxiliary carry flag in trealregs (717)
carryflag = $001
Check for carry flag in trealregs (717)
directionflag = $400
Check for direction flag in trealregs (717)
712
54.17.2
Types
registers = trealregs
Alias for trealregs (717)
tdpmiversioninfo = record
major : Byte;
minor : Byte;
flags : Word;
cpu : Byte;
master_pic : Byte;
slave_pic : Byte;
end
trealregs = record
case Integer of
1: (
EDI : LongInt;
ESI : LongInt;
EBP : LongInt;
Res : LongInt;
EBX : LongInt;
EDX : LongInt;
ECX : LongInt;
EAX : LongInt;
Flags : Word;
ES : Word;
DS : Word;
FS : Word;
GS : Word;
IP : Word;
CS : Word;
SP : Word;
SS : Word;
);
2: (
DI : Word;
DI2 : Word;
SI : Word;
SI2 : Word;
BP : Word;
BP2 : Word;
R1 : Word;
R2 : Word;
BX : Word;
BX2 : Word;
DX : Word;
DX2 : Word;
CX : Word;
CX2 : Word;
AX : Word;
AX2 : Word;
);
3: (
stuff : Array[1..4] of LongInt;
BL : Byte;
BH : Byte;
BL2 : Byte;
BH2 : Byte;
DL : Byte;
DH : Byte;
DL2 : Byte;
DH2 : Byte;
CL : Byte;
CH : Byte;
CL2 : Byte;
CH2 : Byte;
AL : Byte;
716
AH : Byte;
AL2 : Byte;
AH2 : Byte;
);
4: (
RealEDI : LongInt;
RealESI : LongInt;
RealEBP : LongInt;
RealRES : LongInt;
RealEBX : LongInt;
RealEDX : LongInt;
RealECX : LongInt;
RealEAX : LongInt;
RealFlags : Word;
RealES : Word;
RealDS : Word;
RealFS : Word;
RealGS : Word;
RealIP : Word;
RealCS : Word;
RealSP : Word;
RealSS : Word;
);
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
54.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.
717
54.18
54.18.1
allocate_ldt_descriptors
718
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 ) ;
719
free_ldt_descriptor ( text_sel ) ;
seg_move ( get_ds , l o n g i n t ( @text_save ) , dosmemselector ,
linB8000 , s c r e e n s i z e ) ;
gotoxy ( t e x t _ o l d x , t e x t _ o l d y ) ;
end .
54.18.2
allocate_memory_block
54.18.3
copyfromdos
720
54.18.4
copytodos
54.18.5
create_code_segment_alias_descriptor
54.18.6
disable
721
54.18.7
dpmi_dosmemfillchar
54.18.8
dpmi_dosmemfillword
54.18.9
dpmi_dosmemget
54.18.10
dpmi_dosmemmove
722
54.18.11
dpmi_dosmemput
54.18.12
enable
54.18.13
free_ldt_descriptor
54.18.14
free_linear_addr_mapping
54.18.15
free_memory_block
54.18.16
free_rm_callback
54.18.17
get_cs
724
54.18.18
get_descriptor_access_right
54.18.19
get_dpmi_version
54.18.20
get_ds
54.18.21
get_exception_handler
54.18.22
get_linear_addr
54.18.23
get_meminfo
726
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
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 ) ;
i f ( 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 ) ;
i f ( unlocked_pages < > 1) then
W r i t e l n ( T o t a l number o f unlocked pages : ,
unlocked_pages ) ;
i f ( 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 ) ;
i f ( 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 ) ;
i f ( 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 ) ;
i f ( 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 ) ;
end ;
end ;
end .
54.18.24
get_next_selector_increment_value
727
54.18.25
get_page_attributes
54.18.26
get_page_size
54.18.27
get_pm_exception_handler
54.18.28
get_pm_interrupt
54.18.29
get_rm_callback
729
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 :
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 ;
730
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 ;
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
731
gotoxy ( 1 , wherey ) ;
w r i t e ( MouseX : , mouse_x : 2 , MouseY :
B u t t o n s : , mouse_b : 2 ) ;
, mouse_y : 2 ,
end ;
remove_mouse ;
end .
54.18.30
get_rm_interrupt
54.18.31
get_run_mode
732
end ;
end .
54.18.32
get_segment_base_address
54.18.33
get_segment_limit
733
54.18.34
get_ss
54.18.35
global_dos_alloc
734
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 ;
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 .
54.18.36
global_dos_free
54.18.37
inportb
54.18.38
inportl
54.18.39
inportw
54.18.40
lock_code
54.18.41
lock_data
737
54.18.42
lock_linear_region
54.18.43
map_device_in_memory_block
54.18.44
outportb
738
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 .
54.18.45
outportl
54.18.46
outportw
739
54.18.47
realintr
54.18.48
request_linear_region
740
54.18.49
segment_to_descriptor
54.18.50
seg_fillchar
741
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 .
54.18.51
seg_fillword
54.18.52
seg_move
742
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 (718).
Errors: None.
See also: seg_fillchar (741), seg_fillword (742), dosmemfillchar (712), dosmemfillword (713), dosmemget
(713), dosmemput (713), dosmemmove (713)
54.18.53
set_descriptor_access_right
54.18.54
set_exception_handler
54.18.55
set_page_attributes
743
54.18.56
set_pm_exception_handler
54.18.57
set_pm_interrupt
744
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 ) ;
, int1c_counter ) ;
end .
54.18.58
set_rm_interrupt
54.18.59
set_segment_base_address
745
54.18.60
set_segment_limit
54.18.61
tb_offset
54.18.62
tb_segment
54.18.63
tb_size
54.18.64
transfer_buffer
54.18.65
unlock_code
747
54.18.66
unlock_data
54.18.67
unlock_linear_region
748
Chapter 55
Used units
Table 55.1: Used units by unit gpm
Name
BaseUnix
System
55.2
Page
113
1224
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.
55.3
55.3.1
GPM_BOT = 2
Bottom of area.
GPM_B_LEFT = 4
Left mouse button identifier.
GPM_B_MIDDLE = 2
Middle mouse button identifier.
GPM_B_RIGHT = 1
749
55.3.2
Types
Pgpmconnect = Pgpm_connect
Pointer to TGpmConnect (752) record.
Pgpmevent = Pgpm_event
751
752
55.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
753
55.4
55.4.1
55.4.2
Gpm_AnySingle
55.4.3
Gpm_AnyTriple
754
55.4.4
gpm_close
55.4.5
gpm_fitvalues
55.4.6
gpm_fitvaluesM
55.4.7
gpm_getevent
755
Description: Gpm_GetEvent Reads an event from the file descriptor gpm_fd. This file 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 (757)
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 .
756
55.4.8
gpm_getsnapshot
55.4.9
gpm_lowerroi
55.4.10
gpm_open
757
55.4.11
gpm_poproi
55.4.12
gpm_pushroi
55.4.13
gpm_raiseroi
55.4.14
gpm_repeat
Errors: None.
See also: Gpm_GetEvent (755)
55.4.15
Gpm_StrictDouble
55.4.16
Gpm_StrictSingle
55.4.17
Gpm_StrictTriple
759
Chapter 56
Overview
This document describes the GRAPH unit for Free Pascal, for all platforms. The unit was first written
for dos by Florian Klaempfl, 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.
56.2
56.3
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 justification
Set text style
Set text size
Calculate height of text
Calculate width of text
760
Table 56.2:
Name
Bar3D (793)
Bar (793)
FloodFill (795)
FillEllipse (795)
FillPoly (795)
GetFillPattern (797)
GetFillSettings (797)
SetFillPattern (807)
SetFillStyle (807)
56.4
Description
Draw a filled 3D-style bar
Draw a filled rectangle
Fill starting from coordinate
Draw a filled ellipse
Draw a filled polygone
Get current fill pattern
Get current fill settings
Set current fill pattern
Set current fill settings
56.5
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-filled rectangle
Draw a sector
Set current line drawing style
761
Table 56.4:
Name
GetBkColor (791)
GetColor (796)
GetDefaultPalette (796)
GetMaxColor (798)
GetPaletteSize (800)
GetPixel (791)
GetPalette (800)
SetAllPalette (792)
SetBkColor (792)
SetColor (807)
SetPalette (809)
SetRGBPalette (793)
56.6
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
56.7
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
762
Table 56.6:
Name
ClearDevice (794)
CloseGraph (794)
DetectGraph (794)
GetAspectRatio (796)
GetModeRange (799)
GraphDefaults (1)
GetDriverName (797)
GetGraphMode (798)
GetMaxMode (798)
GetModeName (799)
GraphErrorMsg (1)
GraphResult (1)
InitGraph (802)
InstallUserDriver (803)
RegisterBGIDriver (805)
RestoreCRTMode (806)
SetGraphMode (808)
56.8
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
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 fine.
763
56.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.
56.10
The graph unit was implemented for compatibility with the old Turbo Pascal graph unit. For this
reason, the mode constants as they were defined 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 specific platform the program runs on.
In this section we give a short explanation of the new mode system. the following drivers were
defined:
D1bit = 11;
D2bit = 12;
D4bit = 13;
D6bit = 14;
D8bit = 15;
D12bit = 16;
D15bit = 17;
D16bit = 18;
D24bit = 19;
D32bit = 20;
D64bit = 21;
lowNewDriver = 11;
highNewDriver = 21;
Each of these drivers specifies a desired color-depth.
The following modes have been defined:
detectMode
m320x200 =
m320x256 =
m320x400 =
m512x384 =
m640x200 =
m640x256 =
m640x350 =
= 30000;
30001;
30002; {
30003; {
30004; {
30005; {
30006; {
30007; {
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 specified 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 }
765
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
766
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 }
767
56.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).
768
56.12
56.12.1
Constants
AndPut = 3
Draw operation: use AND
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
770
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.
771
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
772
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
773
EGAYellow = 62
Color code: EGA yellow
EmptyFill = 0
Fill style: Do not fill
EuroFont = 9
Font number: ?
fillpatternTable : Array[0..12] of FillPatternType = (($00, $00, $00, $00, $00, $00,
Table with standard fill 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
774
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
775
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
776
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
777
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 file not found.
grInvalidDriver = -4
Error: Invalid driver specified
grInvalidFont = -13
Error: Invalid font description
grInvalidFontNum = -14
Error: Invalid font number
grInvalidMode = -10
Error: Invalid mode specified.
grInvalidVersion = -18
Error: Invalid version.
grIOerror = -12
Error: Unspecified Input/Output error.
778
grNoFloodMem = -7
Error: Could not allocate memory for flood 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 = m2048x1536
Mode: Highest possible value of the new modes.
HorizDir = 0
Text write direction: Horizontal
779
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 = m320x200
Mode: Lowest possible value of the new modes.
LowRes = 6
Mode: Low resolution.
780
LtBkSlashFill = 6
Fill style: Light diagonal (backslash) lines
LtSlashFill = 3
Fill style: Light diagonal (slash) lines
m1024x768 = detectMode + 12
Mode: Resolution 1024x768
m1280x1024 = detectMode + 13
Mode: Resolution 1280x1024
m1600x1200 = detectMode + 14
Mode: Resolution 1600x1200
m2048x1536 = detectMode + 15
Mode: Resolution 2048x1536
m320x200 = detectMode + 1
Mode: Resolution 320x200
m320x256 = detectMode + 2
Mode: Resolution 320x256
m320x400 = detectMode + 3
Mode: Resolution 320x400
m512x384 = detectMode + 4
Mode: Resolution 512x384
m640x200 = detectMode + 5
Mode: Resolution 640x200
m640x256 = detectMode + 6
Mode: Resolution 640x256
m640x350 = detectMode + 7
Mode: Resolution 640x350
781
m640x400 = detectMode + 8
Mode: Resolution 640x400
m640x480 = detectMode + 9
Mode: Resolution 640x480
m800x600 = detectMode + 10
Mode: Resolution 800x600
m832x624 = detectMode + 11
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
782
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
SolidFill = 1
Fill style: Solid fill.
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 defined
UserCharSize = 0
User character size
UserFill = 12
Fill style: User-defined fill.
VertDir = 1
Text write direction: Vertical
VESA = 10
Mode: VESA graphics adaptor.
784
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
56.12.2
Types
ArcCoordsType = record
x : SmallInt;
y : SmallInt;
xstart : SmallInt;
ystart : SmallInt;
xend : SmallInt;
yend : SmallInt;
end
This routine is used for FloodFill (795) 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 floating 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 (791) 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
787
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
56.12.3
Variables
Circle : CircleProc
Circle draws a complete circle with center at (X,Y), radius radius.
ClearViewPort : clrviewproc
790
Clears the current viewport. The current background color is used as filling 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 defined by
(X1,Y1) and (X2,Y2).
InternalEllipse : ellipseproc
Hook to draw an ellipse
Line : lineproc
791
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
SetBkColor : SetBkColorProc
Sets the background color to Color.
SetRGBPalette : setrgbpaletteproc
792
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
56.13
56.13.1
56.13.2
Bar
56.13.3
Bar3D
56.13.4
ClearDevice
56.13.5
Closegraph
56.13.6
DetectGraph
56.13.7
DrawPoly
794
56.13.8
Ellipse
56.13.9
FillEllipse
56.13.10
FillPoly
56.13.11
FloodFill
56.13.12
GetArcCoords
56.13.13
GetAspectRatio
56.13.14
GetColor
56.13.15
GetDefaultPalette
796
56.13.16
GetDirectVideo
56.13.17
GetDriverName
56.13.18
GetFillPattern
56.13.19
GetFillSettings
797
56.13.20
GetGraphMode
56.13.21
GetLineSettings
56.13.22
GetMaxColor
56.13.23
GetMaxMode
798
56.13.24
GetMaxX
56.13.25
GetMaxY
56.13.26
GetModeName
56.13.27
GetModeRange
799
56.13.28
GetPalette
56.13.29
GetPaletteSize
56.13.30
GetTextSettings
56.13.31
GetViewSettings
800
56.13.32
GetX
56.13.33
GetY
56.13.34
GraphDefaults
56.13.35
GraphErrorMsg
801
56.13.36
GraphResult
56.13.37
InitGraph
Errors: None.
See also: Modes (764), DetectGraph (794), CloseGraph (794), GraphResult (1)
56.13.38
InstallUserDriver
56.13.39
InstallUserFont
56.13.40
LineRel
803
56.13.41
LineTo
56.13.42
MoveRel
56.13.43
MoveTo
56.13.44
OutText
804
56.13.45
PieSlice
56.13.46
queryadapterinfo
56.13.47
Rectangle
56.13.48
RegisterBGIDriver
805
56.13.49
RegisterBGIfont
56.13.50
RestoreCrtMode
56.13.51
Sector
56.13.52
SetAspectRatio
806
56.13.53
SetColor
56.13.54
SetDirectVideo
56.13.55
SetFillPattern
56.13.56
SetFillStyle
56.13.57
SetGraphMode
56.13.58
SetLineStyle
808
56.13.59
SetPalette
56.13.60
SetTextJustify
56.13.61
SetTextStyle
56.13.62
SetUserCharSize
56.13.63
SetViewPort
810
56.13.64
SetWriteMode
56.13.65
TextHeight
56.13.66
TextWidth
811
Chapter 57
Overview
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.
57.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 (814) variable is set to True
disabled If this string occurs, then the UseHeapTrace (815) 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 (814) variable is set to False, so the program
continues executing even in case of a heap error.
log=filename If this string occurs, then the output of heaptrc is sent to the specified Filename.
(see also SetHeapTraceOutput (817))
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.
812
57.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 first 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
filenames 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 filename/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
813
/ / 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 .
57.4
57.4.1
814
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 (814) 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
significantly, so by default it is set to True.
tracesize = 8
Tracesize specifies 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.
57.4.2
Types
57.5
57.5.1
57.5.2
DumpHeap
57.5.3
SetHeapExtraInfo
816
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 ) ;
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 .
57.5.4
SetHeapTraceOutput
817
Chapter 58
Used units
Table 58.1: Used units by unit ipc
Name
BaseUnix
System
unixtype
58.2
Page
113
1224
1784
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.
58.3
58.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
818
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
MSG_NOERROR = 1 shl 12
Internal Message control code. Do not use
SEM_A = 2 shl 6
Constant to describe alter permissions on Semaphores
SEM_R = 4 shl 6
Constant to describe read permissions on Semaphores
SEM_UNDO = 1 shl 12
Constant for use in semop (833)
SHM_LOCK = 11
This constant is used in the shmctl (834) call.
SHM_R = IPC_R
This constant is used in the shmctl (834) call.
SHM_RDONLY = 1 shl 12
This constant is used in the shmctl (834) call.
SHM_RND = 2 shl 12
This constant is used in the shmctl (834) call.
SHM_UNLOCK = 12
This constant is used in the shmctl (834) call.
SHM_W = IPC_W
This constant is used in the shmctl (834) call.
819
58.3.2
Types
key_t = TKey
Alias for TKey (821) type
msglen_t = culong
Message length type
msgqnum_t = culong
Message queue number type
PIPC_Perm = ^TIPC_Perm
Pointer to TIPC_Perm (821) record.
PMSG = ^TMSG
Pointer to TMSG (821) record
PMSGbuf = ^TMSGbuf
Pointer to TMsgBuf (821) rcord
PMSGinfo = ^TMSGinfo
Pointer to TMSGinfo (822) record
PMSQid_ds = ^TMSQid_ds
Pointer to TMSQid_ds (822)
PSEM = ^TSEM
Pointer to TSEM
PSEMbuf = ^TSEMbuf
Pointer to TSembuf (822) record.
PSEMid_ds = ^TSEMid_ds
Pointer to TSEMid_ds (823) record.
PSEMinfo = ^TSEMinfo
Pointer to TSEMinfo (823) record.
PSEMun = ^TSEMun
820
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 (823) key generating function.
TMSG = record
end
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 field should always
be present, and should always be filled.
TMSGinfo
msgmax
msgmni
msgmnb
msgtql
msgssz
msgseg
end
=
:
:
:
:
:
:
record
cint;
cint;
cint;
cint;
cint;
cint;
821
This record should never be used directly, it is an internal kernel record. Its fields may change at any
time.
TSEM = record
end
TSEM is a semaphore description record. It should be considered opaque, its structure is highly OS
and CPU dependent.
TSEMbuf = record
sem_num : cushort;
sem_op : cshort;
sem_flg : cshort;
end
The TSEMbuf record is used in the semop (833) call, and is used to specify which operations you
want to do.
TSEMid_ds = record
sem_perm : TIPC_Perm;
sem_base : PSEM;
sem_nsems : cushort;
sem_otime : time_t;
sem_pad1 : cint;
sem_ctime : time_t;
sem_pad2 : cint;
sem_pad3 : Array[0..3] of cint;
end
822
Structure returned by the semctl (828) 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
cint;
cint;
cint;
cint;
cint;
58.4
58.4.1
Visibility: default
Description: ftok returns a key that can be used in a semget (833)shmget (837) or msgget (826) call to access a
new or existing IPC resource.
Path is the name of a file in the file 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 (824), semctl (828) or shmctl (834).
Errors: ftok returns -1 if the file in Path doesnt exist.
See also: semget (833), shmget (837), msgget (826)
58.4.2
msgctl
= ^ TMyMsgBuf ;
= record
Longint ;
string [ 2 5 5 ] ;
, fpgeterrno ) ;
824
end ;
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 ;
begin
Writeln (
Writeln (
Writeln (
Writeln (
halt ( 1 ) ;
d( elete ) ) ;
825
end ;
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 ;
+S ) ;
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 .
58.4.3
msgget
826
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 flags can be ORed with a permission mode, which is the same mode that can be used
in the file system.
For an example, see msgctl (824).
Errors: On error, -1 is returned, and IPCError is set.
See also: ftok (823), msgsnd (827), msgrcv (827), msgctl (824)
58.4.4
msgrcv
58.4.5
msgsnd
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 immediately.
The function returns True if the message was sent successfully, False otherwise.
For an example, see msgctl (824).
Errors: In case of error, the call returns False, and IPCerror is set.
See also: msgget (826), msgrcv (827), msgctl (824)
58.4.6
semctl
GETZCNTsemctl returns the number of processes waiting for semaphores that reach value zero.
SETALLIn this case, the arr field 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 field 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 (833), semop (833)
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 ) ) ;
Function GetMemberCount ( ID : L o n g i n t ) : l o n g i n t ;
Var o p t s : TSEMun ;
semds : TSEMid_ds ;
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;
829
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 ;
Procedure UnlockSem ( ID , Member : L o n g i n t ) ;
Var Unlock : TSEMbuf ;
begin
830
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 ;
831
end ;
Procedure USage ;
begin
Writeln (
Writeln (
Writeln (
Writeln (
Writeln (
Writeln (
halt ( 1 ) ;
end ;
u ( n l o c k ) < member> ) ;
d( elete ) ) ;
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 ;
+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 ) ;
ChangeMode ( ID , s t r t o i n t ( paramstr ( 2 ) ) ) ;
end ;
D : Begin
ID : =OpenSem( Key ) ;
RemoveSem( I d ) ;
end ;
832
P : begin
ID : =OpenSem( Key ) ;
PrintSem ( I d ) ;
end ;
else
Usage
end ;
end .
58.4.7
semget
58.4.8
semop
833
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 specified, then
the process is suspended until the specified semaphore reaches zero. If a negative number
is specified, 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 specified in the sem_flg.
sem_flgOptional flags: if IPC_NOWAIT is specified, 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 (833), semctl (828)
58.4.9
shmat
58.4.10
shmctl
IPC_STATshmctl fills 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 (837), shmat (834), shmdt (837)
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 ;
Usage : shmtool w( r i t e ) t e x t ) ;
r ( ead ) ) ;
d( elete ) ) ;
, 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 ;
835
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 : , fpgeterrno ) ;
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 ) ;
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 .
836
58.4.11
shmdt
58.4.12
shmget
837
Chapter 59
Overview
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 (852) function, which will return a driver-dependent key event. This key event can
be translated to a interpretable event by the TranslateKeyEvent (861) 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 (860) function. The current
keyboard driver can be retrieved using the GetKeyboardDriver (852) function. The last section of
this chapter demonstrates how to make a keyboard driver.
59.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 configurable. 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.
838
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 prefix:
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.
59.3
Writing a keyboard driver means that hooks must be created for most of the keyboard unit functions.
The TKeyBoardDriver record contains a field 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;
839
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 ;
840
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 ;
841
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 .
59.4
Special physical keys are encoded with the DOS scan codes for these keys in the second byte of
the TKeyEvent (849) 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.
842
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
843
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
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 59.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
59.5
59.5.1
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
CTRL-Key
Alt-Key
54
55
56
57
58
59
5A
5B
5C
5D
87
88
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
68
69
6A
6B
6C
6D
6E
6F
70
71
8B
8C
97
98
99
9B
05
07
0F
AltPrefix : Byte = 0
Keycode for alternate prefix key for Alt key. Unix Only
CtrlPrefix : Byte = 0
Keycode for alternate prefix key for Ctrl key. Unix only
errKbdBase = 1010
Base of keyboard routine error reporting constants.
errKbdInitError = errKbdBase + 0
844
9D
9F
A0
A1
A2
A3
A5
4E
This constant describes the various modifier 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.
59.5.2
Types
PTreeElement = ^TTreeElement
Pointer to TTreeElement (850) 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 (860) function.
The various fields correspond to the different functions of the keyboard unit interface. For more
information about this record see kbddriver (839)
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 fields of the key stroke
encoding can be obtained by typecasting the TKeyEvent type to the TKeyRecord (849) type.
TKeyRecord = packed record
Flags : Byte;
ShiftState : Byte;
KeyCode : Word;
end
849
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 flags 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 find 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 defined 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 (850) on unix platforms. There should be no need to handle
records of this type.
59.6
59.6.1
59.6.2
AddSpecialSequence
Description: AddSpecialSequence adds a sequence of key combinations to the keyboard handler. When the
key combination specified 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 (850)
59.6.3
DoneKeyboard
59.6.4
FindSequence
59.6.5
FunctionKeyName
851
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 .
59.6.6
GetKeyboardDriver
59.6.7
GetKeyEvent
See also: PutKeyEvent (859), PollKeyEvent (857), TranslateKeyEvent (861), TranslateKeyEventUniCode (861)
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 .
59.6.8
GetKeyEventChar
59.6.9
GetKeyEventCode
853
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 (855), GetKeyEventShiftState (855), GetKeyEventFlags (854), GetKeyEventChar
(853), GetKeyEvent (852)
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 .
59.6.10
GetKeyEventFlags
854
59.6.11
GetKeyEventShiftState
59.6.12
GetKeyEventUniCode
855
Description: GetKeyEventUniCode returns the unicode part of the given KeyEvent if it contains a translated unicode character.
Errors: None.
See also: GetKeyEventShiftState (855), GetKeyEventFlags (854), GetKeyEventCode (853), GetKeyEventChar
(853), GetKeyEvent (852)
59.6.13
InitKeyboard
59.6.14
IsFunctionKey
856
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 .
59.6.15
KeyEventToString
59.6.16
KeyPressed
59.6.17
PollKeyEvent
Errors: None.
See also: PutKeyEvent (859), GetKeyEvent (852)
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 .
59.6.18
PollShiftStateEvent
858
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 .
59.6.19
PutKeyEvent
859
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 .
59.6.20
RawReadKey
59.6.21
RawReadString
59.6.22
RestoreStartMode
59.6.23
SetKeyboardDriver
860
59.6.24
ShiftStateToString
59.6.25
TranslateKeyEvent
59.6.26
TranslateKeyEventUniCode
861
Chapter 60
Overview
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 undefined if multiple threads try to write a
backtrace at the same time.
For DWARF debug information, the lnfodwrf (891) unit must be used.
60.2
60.2.1
60.2.2
GetLineInfo
60.2.3
StabBackTraceStr
Visibility: default
863
Chapter 61
Used units
Table 61.1: Used units by unit Linux
Name
BaseUnix
System
unixtype
61.2
Page
113
1224
1784
Overview
61.3
61.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
Perform chown operation
864
CAP_DAC_OVERRIDE = 1
Bypass file operation (rwx) checks
CAP_DAC_READ_SEARCH = 2
Bypass file read-only operation checks
CAP_FOWNER = 3
Bypass owner ID checks
CAP_FSETID = 4
Do not clear SUID/GUID bits on modified files
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 file leases
CAP_LINUX_IMMUTABLE = 9
Allow setting ext2 file attributes
CAP_MKNOD = 27
Allow creation of special files through mknod calls
CAP_NET_ADMIN = 12
Allow network operations (e.g. setting socket options)
CAP_NET_BIND_SERVICE = 10
Allow binding to ports less than 1024
865
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
Allow raw I/O port operations
866
CAP_SYS_RESOURCE = 24
Allow use of special resources or raising of resource limits
CAP_SYS_TIME = 25
Allow system or real-time clock modification
CAP_SYS_TTY_CONFIG = 26
Allow vhangup calls
CLOCKS_MASK = CLOCK_REALTIME or CLOCK_MONOTONIC
Mask for supported clocks
CLOCKS_MONO = CLOCK_MONOTONIC
Monotonic clocks mask
CLOCK_MONOTONIC = 1
Monotonic system time since some undetermined start point. Can change if time is set.
CLOCK_MONOTONIC_COARSE = 6
Less precise (but faster) version of CLOCK_MONOTONIC
CLOCK_MONOTONIC_RAW = 4
Like CLOCK_MONOTONIC, not subject to NTP adjustments
CLOCK_PROCESS_CPUTIME_ID = 2
Processs-specific high-resolution timer from the CPU.
CLOCK_REALTIME = 0
System wide real-time clock. Can only be set by root.
CLOCK_REALTIME_COARSE = 5
Less precise (but faster) version of CLOCK_REALTIME
CLOCK_SGI_CYCLE = 10
High resolution timer
CLOCK_THREAD_CPUTIME_ID = 3
Thread-specific high-resolution timer from the CPU.
867
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 (882) option: open files shared between processes
CLONE_FS = $00000200
Clone (882) option: fs info shared between processes
CLONE_NEWNS = $00020000
Clone options: Start child in new (filesystem) 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 (882) option: PID shared between processes
CLONE_PTRACE = $00002000
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 (882) option: signal handlers shared between processes
CLONE_STOPPED = $02000000
Clone option: Start child in stopped state.
868
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 (882) option: VM shared between processes
CSIGNAL = $000000ff
Clone (882) option: Signal mask to be sent at exit
EPOLLERR = $08
event_wait error condition on file descriptor
EPOLLET = $80000000
Set event_wait edge trigger behaviour on file descriptor
EPOLLHUP = $10
event_wait hang up event
EPOLLIN = $01
event_wait input file descriptor ready event
EPOLLONESHOT = $40000000
Set single-shot behaviour on epoll_wait.
EPOLLOUT = $04
event_wait output file descriptor ready event
EPOLLPRI = $02
event_wait high priority data available on input file descriptor
869
EPOLL_CTL_ADD = 1
Add filedescriptor to list of events
EPOLL_CTL_DEL = 2
Delete event for filedescriptor
EPOLL_CTL_MOD = 3
Modify event for filedescriptor
FUTEX_CMP_REQUEUE = 4
Futex option: requeue waiting processes on other futex, but check its value first
FUTEX_FD = 2
Futex option: Associate file 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
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
870
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
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.
871
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
IN_ACCESS = $00000001
Data was read from file.
IN_DELETE_SELF = $00000400
Directory or file under observation was deleted.
IN_DONT_FOLLOW = $02000000
Do not follow symlinks
IN_IGNORED = $00008000
Watch was ignored (removed). Only reported.
IN_ISDIR = $40000000
Event subject is a directory (reported only)
IN_MASK_ADD = $20000000
Add events to existing watch (OR-ing the sets) if one exists.
IN_MODIFY = $00000002
Data was written to file.
IN_MOVE = IN_MOVED_FROM or IN_MOVED_TO
File was moved (in or out of directory)
IN_MOVED_FROM = $00000040
File was moved away from watched directory
IN_MOVED_TO = $00000080
File was moved into watched directory
IN_MOVE_SELF = $00000800
Directory or file under observation was moved.
IN_NONBLOCK = &00004000
IN_NONBLOCK can be set to indicate that the inotify file handle should not block read operations.
IN_ONESHOT = $80000000
Only report one event, then remove the watch.
IN_ONLYDIR = $01000000
Only watch filename if it is a directory.
873
IN_OPEN = $00000020
File was opened
IN_Q_OVERFLOW = $00004000
Queue overflowed. Only reported.
IN_UNMOUNT = $00002000
File system on which file resides was unmounted. Only reported.
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
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
874
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
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
875
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
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
MAX_CLOCKS = 16
Maximum number of clocks in the system
876
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
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
877
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 specified pages in the range after performing any write.
SYNC_FILE_RANGE_WAIT_BEFORE = 1
Wait for write-out of previously-submitted specified pages before writing more data.
SYNC_FILE_RANGE_WRITE = 2
Initiate write of all dirty pages in the specified range.
61.3.2
Types
clockid_t = cint
Clock id type
EPoll_Data = record
case Integer of
0: (
ptr : pointer;
);
1: (
fd : cint;
);
2: (
u32 : cuint;
);
3: (
u64 : cuint64;
);
end
inotify_event = record
wd : cint;
mask : cuint32;
cookie : cuint32;
len : cuint32;
name : Char;
end
inotify_event is the structure used to report changes in a directory. When reading a inotify file
descriptor, one or more inotify_event records can be read from the file descriptor.
PEPoll_Data = ^EPoll_Data
Pointer to EPoll_Data (878) record
PEpoll_Event = ^EPoll_Event
Pointer to EPoll_Event (878) type
Pinotify_event = ^inotify_event
Pointer to inotify_event (879) structure.
PSysInfo = ^TSysInfo
Pointer to TSysInfo (880) record.
Puser_cap_data = ^user_cap_data
Pointer to user_cap_data (880) record
Puser_cap_header = ^user_cap_header
Pointer to user_cap_header (880) record
TCloneFunc = function(args: pointer) : LongInt
Clone function prototype.
TEPoll_Data = EPoll_Data
Alias for EPoll_Data (878) type
TEPoll_Event = EPoll_Event
Alias for EPoll_Event (878) type
879
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
= record
cuint32;
cuint32;
: cuint32;
user_cap_header describes the root user capabilities for the current thread, as set by capget
(880) and capset (881)
61.4
61.4.1
61.4.2
capset
61.4.3
clock_getres
61.4.4
clock_gettime
61.4.5
clock_settime
61.4.6
clone
882
begin
WriteLn ( H e l l o from t h e c l o n e , PChar ( Arg ) ) ;
repeat
Write ( aChar ) ;
Select (0 ,0 ,0 ,0 ,600);
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 ,0 ,0 ,0 ,300);
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 ;
883
end ;
FreeMem ( theStack , StackSze ) ;
{ $else }
begin
{ $endif }
end .
61.4.7
epoll_create
61.4.8
epoll_ctl
61.4.9
epoll_wait
61.4.10
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 flush the metadata, unless it is vital to the
correct reading/writing of the file. In practice, this means that unless the file size changed, the file
metadata will not be synced.
See also: #rtl.unix.fsync (1747)
61.4.11
futex
61.4.12
futex_op
61.4.13
inotify_add_watch
886
61.4.14
inotify_init
61.4.15
inotify_init1
61.4.16
inotify_rm_watch
61.4.17
sched_yield
61.4.18
setregid
61.4.19
setreuid
61.4.20
sync_file_range
888
61.4.21
Sysinfo
889
{ $ 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 .
890
Chapter 62
Overview
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 undefined if multiple threads try to write a
backtrace at the same time.
For stabs debug information, the lineinfo (862) unit must be used.
62.2
62.2.1
891
Chapter 63
Used units
Table 63.1: Used units by unit math
Name
System
sysutils
63.2
Page
1224
1476
Overview
This document describes the math unit. The math unit was initially written by Florian Klaempfl. It
provides mathematical functions which arent covered by the system unit.
This chapter starts out with a definition of all types and constants that are defined, 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 floats. 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.
63.3
The cash flow functions in the math unit resolve the following equation:
FV + PV * q^n + PMT (q^n - 1) / (q - 1) = 0
In this formula, the following variables are present:
892
FV Future value
PV Present value
PMT Payment per period
n Number of payments (number of periods)
q> Interest Rate (return rate)
The financial functions FutureValue (909), NumberOfPeriods (925), Payment (925), PresentValue
(928) and InterestRate (912) solve this equation for one of the variables, when the other variables are
known.
See also: FutureValue (909), NumberOfPeriods (925), Payment (925), PresentValue (928), TPaymentTime
(898)
63.4
Geometrical functions
Table 63.2:
Name
hypot (911)
norm (924)
63.5
Description
Hypotenuse of triangle
Euclidian norm
Statistical functions
Table 63.3:
Name
mean (919)
meanandstddev (920)
momentskewkurtosis (923)
popnstddev (925)
popnvariance (926)
randg (930)
stddev (934)
sum (935)
sumofsquares (936)
sumsandsquares (937)
totalvariance (939)
variance (940)
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
893
63.6
Number converting
Table 63.4:
Name
ceil (902)
floor (908)
frexp (908)
63.7
Description
Round to infinity
Round to minus infinity
Return mantissa and exponent
63.8
Description
Raise float to integer power
Calculate $2p x$
calculate log(x+1)
calculate 10-base log
calculate 2-base log
calculate N-base log
raise float to arbitrary power
Hyperbolic functions
Table 63.6:
Name
arcosh (899)
arsinh (901)
artanh (902)
cosh (904)
sinh (934)
tanh (939)
Description
caculate reverse hyperbolic cosine
caculate reverse hyperbolic sine
caculate reverse hyperbolic tangent
calculate hyperbolic cosine
calculate hyperbolic sine
calculate hyperbolic tangent
894
63.9
Trigoniometric functions
Table 63.7:
Name
arccos (898)
arcsin (900)
arctan2 (901)
cotan (905)
sincos (933)
tan (938)
63.10
Description
calculate reverse cosine
calculate reverse sine
calculate reverse tangent
calculate cotangent
calculate sine and cosine
calculate tangent
63.11
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
Min/max determination
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
895
63.12
63.12.1
EqualsValue = 0
Values are the same
GreaterThanValue = (TValueRelationship)
First values is greater than second value
Infinity = 1.0 / 0.0
Value is infinity
LessThanValue = (TValueRelationship)
First value is less than second value
MaxComp = 9.223372036854775807e + 18
MinComp = -9.223372036854775807e + 18
896
63.12.2
Types
Float = MaxFloatType
All calculations are done with the Float type which is the largest float type available for the current
CPU. This allows to recompile the unit with a different float type to obtain a desired precision. The
pointer type PFloat (897) is used in functions that accept an array of values of arbitrary length.
Float = MaxFloatType
All calculations are done with the Float type which is the largest float type available for the current
CPU. This allows to recompile the unit with a different float type to obtain a desired precision. The
pointer type PFloat (897) is used in functions that accept an array of values of arbitrary length.
PFloat = ^Float
Pointer to Float (897) type.
PInteger = ObjPas.PInteger
Pointer to integer type
TFPUException = system.TFPUException
Type describing Floating Point processor exceptions.
TFPUExceptionMask = system.TFPUExceptionMask
Type to set the Floating Point Unit exception mask.
TFPUPrecisionMode = system.TFPUPrecisionMode
897
Type describing the default precision for the Floating Point processor.
TFPURoundingMode = system.TFPURoundingMode
Type describing the rounding mode for the Floating Point processor.
tpaymenttime = (ptendofperiod,ptstartofperiod)
Explanation
End of period.
Start of period.
63.13
63.13.1
898
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 .
63.13.2
( arccos ( 1 ) ) ;
( arccos ( s q r t ( 3 ) / 2 ) ) ;
( arccos ( s q r t ( 2 ) / 2 ) ) ;
( arccos ( 1 / 2 ) ) ;
( arccos ( 0 ) ) ;
( arccos ( 1 ) ) ;
arccosh
63.13.3
arcosh
899
begin
W r i t e l n ( arcosh ( 1 ) ) ;
W r i t e l n ( arcosh ( 2 ) ) ;
end .
63.13.4
arcsin
63.13.5
(
(
(
(
(
(
arcsin ( 1 ) ) ;
a r c s i n ( sqrt ( 3 ) / 2 ) ) ;
a r c s i n ( sqrt ( 2 ) / 2 ) ) ;
arcsin ( 1 / 2 ) ) ;
arcsin ( 0 ) ) ;
arcsin ( 1));
arcsinh
900
63.13.6
arctan2
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.
See also: arccos (898), arcosh (899), arsinh (901), artanh (902)
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 .
63.13.7
arctanh
63.13.8
arsinh
See also: arcosh (899), arccos (898), arcsin (900), artanh (902)
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 .
63.13.9
artanh
63.13.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 overflow error will occur.
See also: floor (908)
902
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 .
63.13.11
ClearExceptions
63.13.12
CompareValue
903
63.13.13
cosecant
63.13.14
cosh
63.13.15
cot
904
63.13.16
cotan
63.13.17
csc
63.13.18
cycletorad
905
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 .
63.13.19
DegNormalize
63.13.20
degtograd
906
63.13.21
degtorad
63.13.22
DivMod
63.13.23
EnsureRange
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 (912)
63.13.24
floor
63.13.25
Frexp
908
begin
//
dofrexp ( 1 . 0 0 ) ;
d o f r e x p ( 1 . 0 2 e 1);
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 .
63.13.26
FutureValue
63.13.27
GetExceptionMask
63.13.28
GetPrecisionMode
909
Visibility: default
Description: Return the Floating Point Unit precision mode.
63.13.29
GetRoundMode
63.13.30
gradtodeg
63.13.31
gradtorad
910
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 .
63.13.32
hypot
63.13.33
ifthen
911
63.13.34
InRange
63.13.35
InterestRate
63.13.36
intpower
912
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 .
63.13.37
IsInfinite
63.13.38
IsNan
63.13.39
IsZero
913
Declaration: function
function
function
function
function
Visibility: default
Description: IsZero checks whether the float 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 (913), IsInfinite (913), SameValue (931)
63.13.40
ldexp
63.13.41
lnxp1
914
See also: ldexp (914), log10 (915), log2 (915), logn (916)
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 .
63.13.42
log10
63.13.43
log2
Errors: If x is less than or equal to 0 an invalid fpu operation error will occur.
See also: ldexp (914), lnxp1 (914), log10 (915), logn (916)
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 .
63.13.44
logn
916
63.13.45
Max
Max(a:
Max(a:
Max(a:
Max(a:
Max(a:
Visibility: default
Description: Max returns the maximum of Int1 and Int2.
Errors: None.
See also: min (921), maxIntValue (917), maxvalue (918)
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 .
63.13.46
MaxIntValue
917
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 ( 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 .
63.13.47
maxvalue
maxvalue(const
maxvalue(const
maxvalue(const
maxvalue(const
maxvalue(const
maxvalue(const
maxvalue(const
maxvalue(const
data:
data:
data:
data:
data:
data:
data:
data:
Visibility: default
Description: Maxvalue returns the largest value in the data array with integer or float 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 float values.
Errors: None.
See also: maxIntValue (917), minvalue (922), minIntValue (921)
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
918
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 .
Max
Max
Max
Max
63.13.48
mean
Float
Float
(b )
Integer
Integer ( b )
:
:
:
:
, MaxValue ( f _ a r r a y ) : 8 : 4 ) ;
, MaxValue ( P f _ a r r a y , 1 0 0 ) : 8 : 4 ) ;
, MaxValue ( i _ a r r a y ) : 8 ) ;
, MaxValue ( P i _ a r r a y , 1 0 0 ) : 8 ) ;
mean(const
mean(const
mean(const
mean(const
mean(const
mean(const
data:
data:
data:
data:
data:
data:
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 (920), momentskewkurtosis (923), sum (935)
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 ) ;
919
W r i t e l n ( Mean ( b ) :
end .
63.13.49
,Mean ( @ExArray [ 1 ] , 1 0 0 ) : 8 : 4 ) ;
meanandstddev
920
63.13.50
Min
Min(a:
Min(a:
Min(a:
Min(a:
Min(a:
Visibility: default
Description: min returns the smallest value of Int1 and Int2;
Errors: None.
See also: max (917)
Listing: ./mathex/ex29.pp
Program Example29 ;
{ Program t o demonstrate t h e min 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 ( min ( a , b ) ) ;
end .
63.13.51
MinIntValue
921
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 .
63.13.52
minvalue
minvalue(const
minvalue(const
minvalue(const
minvalue(const
minvalue(const
minvalue(const
minvalue(const
MinValue(const
data:
data:
data:
data:
data:
data:
data:
Data:
Visibility: default
Description: Minvalue returns the smallest value in the data array with integer or float 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 float values.
Errors: None.
See also: maxIntValue (917), maxvalue (918), minIntValue (921)
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
922
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
63.13.53
momentskewkurtosis
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 ) ;
923
63.13.54
(
(
(
(
(
(
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);
norm
norm(const
norm(const
norm(const
norm(const
norm(const
norm(const
data:
data:
data:
data:
data:
data:
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 (936)
Listing: ./mathex/ex33.pp
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 .
924
63.13.55
NumberOfPeriods
63.13.56
Payment
63.13.57
popnstddev
popnstddev(const
popnstddev(const
popnstddev(const
popnstddev(const
popnstddev(const
popnstddev(const
data:
data:
data:
data:
data:
data:
925
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 (926), mean (919), meanandstddev (920), stddev (934), momentskewkurtosis (923)
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
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 .
63.13.58
popnvariance
popnvariance(const
popnvariance(const
popnvariance(const
popnvariance(const
popnvariance(const
popnvariance(const
data:
data:
data:
data:
data:
data:
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 (925), mean (919), meanandstddev (920), stddev (934), momentskewkurtosis (923)
Listing: ./mathex/ex36.pp
926
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 .
63.13.59
power
927
63.13.60
power(Float,Float):Float
63.13.61
power(Int64,Int64):Int64
63.13.62
PresentValue
Synopsis: Calculate the present value given the future value of an investment.
Declaration: function PresentValue(ARate: Float;NPeriods: Integer;APayment: Float;
AFutureValue: Float;APaymentTime: tpaymenttime)
: Float
Visibility: default
Description: PresentValue calculates the present (start) value of an investment (PV) in the cash flow formula
(see CashFlowFunctions (892)) The function result is the start value of an investment, when the
future value is AFutureValue (FV) and APayment (PMT) is invested for NPeriods (n) at the
rate of ARate (q) per period.
The APaymentTime parameter determines whether the investment (payment) is an ordinary annuity or an annuity due: ptEndOfPeriod must be used if payments are at the end of each period. If
the payments are at the beginning of the periode, ptStartOfPeriod must be used.
See also: FutureValue (909), InterestRate (912), NumberOfPeriods (925), Payment (925), TPaymentTime
(898), CashFlowFunctions (892)
63.13.63
radtocycle
928
w r i t e l n ( r a d t o c y c l e (2 p i ) : 8 : 6 ) ;
writeln ( radtocycle ( pi ) : 8 : 6 ) ;
writeln ( radtocycle ( pi / 2 ) : 8 : 6 ) ;
end .
63.13.64
radtodeg
63.13.65
radtograd
929
begin
w r i t e l n ( r a d t o g r a d (2 p i ) : 8 : 6 ) ;
writeln ( radtograd ( pi ) : 8 : 6 ) ;
writeln ( radtograd ( pi / 2 ) : 8 : 6 ) ;
end .
63.13.66
randg
63.13.67
RandomFrom
63.13.68
RandomRange
63.13.69
RoundTo
63.13.70
SameValue
931
63.13.71
sec
63.13.72
secant
63.13.73
SetExceptionMask
63.13.74
SetPrecisionMode
63.13.75
SetRoundMode
932
63.13.76
Sign
Sign(const
Sign(const
Sign(const
Sign(const
Sign(const
AValue:
AValue:
AValue:
AValue:
AValue:
Visibility: default
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.
63.13.77
SimpleRoundTo
63.13.78
sincos
933
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 ;
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 .
63.13.79
sinh
63.13.80
stddev
Declaration: function
function
function
function
function
function
stddev(const
stddev(const
stddev(const
stddev(const
stddev(const
stddev(const
data:
data:
data:
data:
data:
data:
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.
See also: mean (919), meanandstddev (920), variance (940), totalvariance (939)
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 .
63.13.81
sum
sum(const
sum(const
sum(const
sum(const
sum(const
sum(const
data:
data:
data:
data:
data:
data:
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 (936), sumsandsquares (937), totalvariance (939), variance (940)
935
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 .
63.13.82
sumInt
63.13.83
sumofsquares
sumofsquares(const
sumofsquares(const
sumofsquares(const
sumofsquares(const
sumofsquares(const
sumofsquares(const
data:
data:
data:
data:
data:
data:
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 (935), sumsandsquares (937), totalvariance (939), variance (940)
Listing: ./mathex/ex45.pp
936
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 .
63.13.84
sumsandsquares
937
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 .
63.13.85
tan
938
63.13.86
tanh
63.13.87
totalvariance
totalvariance(const
totalvariance(const
totalvariance(const
totalvariance(const
totalvariance(const
totalvariance(const
data:
data:
data:
data:
data:
data:
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 (940), stddev (934), mean (919)
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
939
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 .
63.13.88
variance
variance(const
variance(const
variance(const
variance(const
variance(const
variance(const
data:
data:
data:
data:
data:
data:
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 (939), stddev (934), mean (919)
Listing: ./mathex/ex50.pp
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 ) ;
940
V: = Variance ( @ExArray [ 1 ] , 1 0 0 ) ;
W r i t e l n ( Variance ( b ) : ,V : 8 : 4 ) ;
end .
63.14
63.14.1
EInvalidArgument
Description
941
Chapter 64
Overview
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 benfit from such a unit in the
runtime library.
Design goals:
Provide common dimensions, two three and four.
Provide multiple floating 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.
942
64.2
64.2.1
944
This is the vector internal data for a vector. It uses a simple array structure so data from other libraries
that define 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 field in the object, the object itself can be used just as
fine 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 define 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 field in the object, the object itself can be used just as
fine 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 define 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 field in the object, the object itself can be used just as
fine 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 define 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 field in the object, the object itself can be used just as
fine for typecasting purposes etc.
64.3
64.3.1
64.3.2
add(Tmatrix2_double,Tmatrix2_double):Tmatrix2_double
945
64.3.3
add(Tmatrix2_extended,extended):Tmatrix2_extended
64.3.4
add(Tmatrix2_extended,Tmatrix2_extended):Tmatrix2_extended
64.3.5
add(Tmatrix2_single,single):Tmatrix2_single
64.3.6
add(Tmatrix2_single,Tmatrix2_single):Tmatrix2_single
64.3.7
add(Tmatrix3_double,Double):Tmatrix3_double
946
64.3.8
add(Tmatrix3_double,Tmatrix3_double):Tmatrix3_double
64.3.9
add(Tmatrix3_extended,extended):Tmatrix3_extended
64.3.10
add(Tmatrix3_extended,Tmatrix3_extended):Tmatrix3_extended
64.3.11
add(Tmatrix3_single,single):Tmatrix3_single
64.3.12
add(Tmatrix3_single,Tmatrix3_single):Tmatrix3_single
64.3.13
add(Tmatrix4_double,Double):Tmatrix4_double
64.3.14
add(Tmatrix4_double,Tmatrix4_double):Tmatrix4_double
64.3.15
add(Tmatrix4_extended,extended):Tmatrix4_extended
64.3.16
add(Tmatrix4_extended,Tmatrix4_extended):Tmatrix4_extended
64.3.17
add(Tmatrix4_single,single):Tmatrix4_single
948
64.3.18
add(Tmatrix4_single,Tmatrix4_single):Tmatrix4_single
64.3.19
add(Tvector2_double,Double):Tvector2_double
64.3.20
add(Tvector2_double,Tvector2_double):Tvector2_double
64.3.21
add(Tvector2_extended,extended):Tvector2_extended
64.3.22
add(Tvector2_extended,Tvector2_extended):Tvector2_extended
949
64.3.23
add(Tvector2_single,single):Tvector2_single
64.3.24
add(Tvector2_single,Tvector2_single):Tvector2_single
64.3.25
add(Tvector3_double,Double):Tvector3_double
64.3.26
add(Tvector3_double,Tvector3_double):Tvector3_double
64.3.27
add(Tvector3_extended,extended):Tvector3_extended
950
64.3.28
add(Tvector3_extended,Tvector3_extended):Tvector3_extended
64.3.29
add(Tvector3_single,single):Tvector3_single
64.3.30
add(Tvector3_single,Tvector3_single):Tvector3_single
64.3.31
add(Tvector4_double,Double):Tvector4_double
64.3.32
add(Tvector4_double,Tvector4_double):Tvector4_double
951
64.3.33
add(Tvector4_extended,extended):Tvector4_extended
64.3.34
add(Tvector4_extended,Tvector4_extended):Tvector4_extended
64.3.35
add(Tvector4_single,single):Tvector4_single
64.3.36
add(Tvector4_single,Tvector4_single):Tvector4_single
64.3.37
assign(Tmatrix2_double):Tmatrix2_extended
Synopsis: Allow assignment of two-dimensional double precision matrix to two-dimensional extended precision matrix
Declaration: operator :=(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.
952
64.3.38
assign(Tmatrix2_double):Tmatrix2_single
Synopsis: Allow assignment of two-dimensional double precision matrix to two-dimensional single precision
matrix
Declaration: operator :=(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.
64.3.39
assign(Tmatrix2_double):Tmatrix3_double
Synopsis: Allow assignment of two-dimensional double precision matrix to three-dimensional double precision matrix
Declaration: operator :=(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 fields are set to 0.
64.3.40
assign(Tmatrix2_double):Tmatrix3_extended
Synopsis: Allow assignment of two-dimensional double precision matrix to three-dimensional extended precision matrix
Declaration: operator :=(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 fields are set to 0.
64.3.41
assign(Tmatrix2_double):Tmatrix3_single
Synopsis: Allow assignment of two-dimensional single precision matrix to three-dimensional single precision
matrix
Declaration: operator :=(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 fields are set to 0 and some
accuracy is lost because of the conversion.
64.3.42
assign(Tmatrix2_double):Tmatrix4_double
Synopsis: Allow assignment of two-dimensional double precision matrix to four-dimensional double precision
matrix
Declaration: operator :=(const v: Tmatrix2_double) : Tmatrix4_double
953
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 fields are set to 0.
64.3.43
assign(Tmatrix2_double):Tmatrix4_extended
Synopsis: Allow assignment of two-dimensional double precision matrix to four-dimensional extended precision matrix
Declaration: operator :=(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 fields are set to 0.
64.3.44
assign(Tmatrix2_double):Tmatrix4_single
Synopsis: Allow assignment of two-dimensional double precision matrix to four-dimensional single precision
matrix
Declaration: operator :=(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 fields are set to 0 and some
precision is lost because of the conversion.
64.3.45
assign(Tmatrix2_extended):Tmatrix2_double
Synopsis: Allow assignment of two-dimensional extended precision matrix to two-dimensional double precision matrix
Declaration: operator :=(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.
64.3.46
assign(Tmatrix2_extended):Tmatrix2_single
Synopsis: Allow assignment of two-dimensional extended precision matrix to two-dimensional single precision matrix
Declaration: operator :=(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.
954
64.3.47
assign(Tmatrix2_extended):Tmatrix3_double
Synopsis: Allow assignment of two-dimensional extended precision matrix to three-dimensional double precision matrix
Declaration: operator :=(const v: Tmatrix2_extended) : Tmatrix3_double
Visibility: default
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 fields are set to 0 and some
accuracy is lost because of the conversion.
64.3.48
assign(Tmatrix2_extended):Tmatrix3_extended
Synopsis: Allow assignment of two-dimensional extended precision matrix to three-dimensional extended precision matrix
Declaration: operator :=(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 fields are set to 0.
64.3.49
assign(Tmatrix2_extended):Tmatrix3_single
Synopsis: Allow assignment of two-dimensional extended precision matrix to three-dimensional single precision matrix
Declaration: operator :=(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 fields are set to 0 and some
accuracy is lost because of the conversion.
64.3.50
assign(Tmatrix2_extended):Tmatrix4_double
Synopsis: Allow assignment of two-dimensional extended precision matrix to four-dimensional double precision matrix
Declaration: operator :=(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 fields are set to 0 and some
accuracy is lost because of the conversion.
955
64.3.51
assign(Tmatrix2_extended):Tmatrix4_extended
Synopsis: Allow assignment of two-dimensional extended precision matrix to four-dimensional extended precision matrix
Declaration: operator :=(const v: Tmatrix2_extended) : Tmatrix4_extended
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 fields are set to 0.
64.3.52
assign(Tmatrix2_extended):Tmatrix4_single
Synopsis: Allow assignment of two-dimensional extended precision matrix to four-dimensional single precision matrix
Declaration: operator :=(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 fields are set to 0 and some
precision is lost because of the conversion.
64.3.53
assign(Tmatrix2_single):Tmatrix2_double
Synopsis: Allow assignment of two-dimensional single precision matrix to two-dimensional double precision
matrix
Declaration: operator :=(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.
64.3.54
assign(Tmatrix2_single):Tmatrix2_extended
Synopsis: Allow assignment of two-dimensional single precision matrix to two-dimensional extended precision matrix
Declaration: operator :=(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.
64.3.55
assign(Tmatrix2_single):Tmatrix3_double
Synopsis: Allow assignment of two-dimensional single precision matrix to three-dimensional double precision
matrix
Declaration: operator :=(const v: Tmatrix2_single) : Tmatrix3_double
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 fields are set to 0.
956
64.3.56
assign(Tmatrix2_single):Tmatrix3_extended
Synopsis: Allow assignment of two-dimensional single precision matrix to three-dimensional extended precision matrix
Declaration: operator :=(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 fields are set to 0.
64.3.57
assign(Tmatrix2_single):Tmatrix3_single
Synopsis: Allow assignment of two-dimensional single precision matrix to three-dimensional single precision
matrix
Declaration: operator :=(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 fields are set to 0.
64.3.58
assign(Tmatrix2_single):Tmatrix4_double
Synopsis: Allow assignment of two-dimensional single precision matrix to four-dimensional double precision
matrix
Declaration: operator :=(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 fields are set to 0.
64.3.59
assign(Tmatrix2_single):Tmatrix4_extended
Synopsis: Allow assignment of two-dimensional single precision matrix to four-dimensional extended precision matrix
Declaration: operator :=(const v: Tmatrix2_single) : Tmatrix4_extended
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 fields are set to 0.
64.3.60
assign(Tmatrix2_single):Tmatrix4_single
Synopsis: Allow assignment of two-dimensional single precision matrix to four-dimensional single precision
matrix
Declaration: operator :=(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 fields are set to 0.
957
64.3.61
assign(Tmatrix3_double):Tmatrix2_double
Synopsis: Allow assignment of three-dimensional double precision matrix to two-dimensional double precision matrix
Declaration: operator :=(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 fields are thrown away.
64.3.62
assign(Tmatrix3_double):Tmatrix2_extended
Synopsis: Allow assignment of three-dimensional double precision matrix to two-dimensional extended precision matrix
Declaration: operator :=(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 fields are thrown away.
64.3.63
assign(Tmatrix3_double):Tmatrix2_single
Synopsis: Allow assignment of three-dimensional double precision matrix to two-dimensional single precision
matrix
Declaration: operator :=(const v: Tmatrix3_double) : Tmatrix2_single
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 fields are thrown away and
some accuracy is lost because of the conversion.
64.3.64
assign(Tmatrix3_double):Tmatrix3_extended
Synopsis: Allow assignment of three-dimensional double precision matrix to three-dimensional extended precision matrix
Declaration: operator :=(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.
64.3.65
assign(Tmatrix3_double):Tmatrix3_single
Synopsis: Allow assignment of three-dimensional double precision matrix to three-dimensional single precision matrix
Declaration: operator :=(const v: Tmatrix3_double) : Tmatrix3_single
Visibility: default
958
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.
64.3.66
assign(Tmatrix3_double):Tmatrix4_double
Synopsis: Allow assignment of three-dimensional double precision matrix to four-dimensional double precision matrix
Declaration: operator :=(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.
64.3.67
assign(Tmatrix3_double):Tmatrix4_extended
Synopsis: Allow assignment of three-dimensional double precision matrix to four-dimensional extended precision matrix
Declaration: operator :=(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.
64.3.68
assign(Tmatrix3_double):Tmatrix4_single
Synopsis: Allow assignment of three-dimensional double precision matrix to four-dimensional single precision
matrix
Declaration: operator :=(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.
64.3.69
assign(Tmatrix3_extended):Tmatrix2_double
Synopsis: Allow assignment of three-dimensional extended precision matrix to two-dimensional double precision matrix
Declaration: operator :=(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 fields are thrown away and
some accuracy is lost becuase of the conversion.
959
64.3.70
assign(Tmatrix3_extended):Tmatrix2_extended
Synopsis: Allow assignment of three-dimensional extended precision matrix to two-dimensional extended precision matrix
Declaration: operator :=(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 fields are thrown away.
64.3.71
assign(Tmatrix3_extended):Tmatrix2_single
Synopsis: Allow assignment of three-dimensional extended precision matrix to two-dimensional single precision matrix
Declaration: operator :=(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 fields are thrown away and
some precision is lost because of the conversion.
64.3.72
assign(Tmatrix3_extended):Tmatrix3_double
Synopsis: Allow assignment of three-dimensional extended precision matrix to three-dimensional double precision matrix
Declaration: operator :=(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.
64.3.73
assign(Tmatrix3_extended):Tmatrix3_single
Synopsis: Allow assignment of three-dimensional extended precision matrix to three-dimensional single precision matrix
Declaration: operator :=(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.
960
64.3.74
assign(Tmatrix3_extended):Tmatrix4_double
Synopsis: Allow assignment of three-dimensional extended precision matrix to four-dimensional double precision matrix
Declaration: operator :=(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.
64.3.75
assign(Tmatrix3_extended):Tmatrix4_extended
Synopsis: Allow assignment of three-dimensional extended precision matrix to four-dimensional extended precision matrix
Declaration: operator :=(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.
64.3.76
assign(Tmatrix3_extended):Tmatrix4_single
Synopsis: Allow assignment of three-dimensional extended precision matrix to four-dimensional single precision matrix
Declaration: operator :=(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.
64.3.77
assign(Tmatrix3_single):Tmatrix2_double
Synopsis: Allow assignment of three-dimensional single precision matrix to two-dimensional double precision
matrix
Declaration: operator :=(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 fields are thrown away.
64.3.78
assign(Tmatrix3_single):Tmatrix2_extended
Synopsis: Allow assignment of three-dimensional single precision matrix to two-dimensional extended precision matrix
Declaration: operator :=(const v: Tmatrix3_single) : Tmatrix2_extended
961
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 fields are thrown away.
64.3.79
assign(Tmatrix3_single):Tmatrix2_single
Synopsis: Allow assignment of three-dimensional single precision matrix to two-dimensional single precision
matrix
Declaration: operator :=(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 fields are thrown away.
64.3.80
assign(Tmatrix3_single):Tmatrix3_double
Synopsis: Allow assignment of three-dimensional single precision matrix to three-dimensional double precision matrix
Declaration: operator :=(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.
64.3.81
assign(Tmatrix3_single):Tmatrix3_extended
Synopsis: Allow assignment of three-dimensional single precision matrix to three-dimensional extended precision matrix
Declaration: operator :=(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.
64.3.82
assign(Tmatrix3_single):Tmatrix4_double
Synopsis: Allow assignment of three-dimensional single precision matrix to four-dimensional double precision
matrix
Declaration: operator :=(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.
962
64.3.83
assign(Tmatrix3_single):Tmatrix4_extended
Synopsis: Allow assignment of three-dimensional single precision matrix to four-dimensional extended precision matrix
Declaration: operator :=(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.
64.3.84
assign(Tmatrix3_single):Tmatrix4_single
Synopsis: Allow assignment of three-dimensional single precision matrix to four-dimensional single precision
matrix
Declaration: operator :=(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.
64.3.85
assign(Tmatrix4_double):Tmatrix2_double
Synopsis: Allow assignment of four-dimensional double precision matrix to two-dimensional double precision
matrix
Declaration: operator :=(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 fields are thrown away.
64.3.86
assign(Tmatrix4_double):Tmatrix2_extended
Synopsis: Allow assignment of four-dimensional double precision matrix to two-dimensional extended precision matrix
Declaration: operator :=(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 fields are thrown away.
64.3.87
assign(Tmatrix4_double):Tmatrix2_single
Synopsis: Allow assignment of four-dimensional double precision matrix to two-dimensional single precision
matrix
Declaration: operator :=(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 fields are thrown away and
some precision is lost in the conversion.
963
64.3.88
assign(Tmatrix4_double):Tmatrix3_double
Synopsis: Allow assignment of four-dimensional double precision matrix to three-dimensional double precision matrix
Declaration: operator :=(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 fields are thrown away.
64.3.89
assign(Tmatrix4_double):Tmatrix3_extended
Synopsis: Allow assignment of four-dimensional double precision matrix to three-dimensional extended precision matrix
Declaration: operator :=(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 fields are thrown away.
64.3.90
assign(Tmatrix4_double):Tmatrix3_single
Synopsis: Allow assignment of four-dimensional double precision matrix to three-dimensional single precision
matrix
Declaration: operator :=(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 fields are thrown away and
some precision is lost because of the conversion.
64.3.91
assign(Tmatrix4_double):Tmatrix4_extended
Synopsis: Allow assignment of four-dimensional double precision matrix to four-dimensional extended precision matrix
Declaration: operator :=(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.
64.3.92
assign(Tmatrix4_double):Tmatrix4_single
Synopsis: Allow assignment of four-dimensional single precision matrix to four-dimensional single precision
matrix
Declaration: operator :=(const v: Tmatrix4_double) : Tmatrix4_single
Visibility: default
964
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.
64.3.93
assign(Tmatrix4_extended):Tmatrix2_double
Synopsis: Allow assignment of four-dimensional extended precision matrix to two-dimensional double precision matrix
Declaration: operator :=(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 fields are thrown away and
some precision is lost in the conversion.
64.3.94
assign(Tmatrix4_extended):Tmatrix2_extended
Synopsis: Allow assignment of four-dimensional extended precision matrix to two-dimensional extended precision matrix
Declaration: operator :=(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 fields are thrown away.
64.3.95
assign(Tmatrix4_extended):Tmatrix2_single
Synopsis: Allow assignment of four-dimensional extended precision matrix to two-dimensional single precision matrix
Declaration: operator :=(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 fields are thrown away and
some precision is lost in the conversion.
64.3.96
assign(Tmatrix4_extended):Tmatrix3_double
Synopsis: Allow assignment of four-dimensional extended precision matrix to three-dimensional double precision matrix
Declaration: operator :=(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 fields are thrown away.
965
64.3.97
assign(Tmatrix4_extended):Tmatrix3_extended
Synopsis: Allow assignment of four-dimensional extended precision matrix to three-dimensional extended precision matrix
Declaration: operator :=(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 fields are thrown away.
64.3.98
assign(Tmatrix4_extended):Tmatrix3_single
Synopsis: Allow assignment of four-dimensional extended precision matrix to three-dimensional single precision matrix
Declaration: operator :=(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 fields are thrown away and
some precision is lost because of the conversion.
64.3.99
assign(Tmatrix4_extended):Tmatrix4_double
Synopsis: Allow assignment of four-dimensional extended precision matrix to four-dimensional double precision matrix
Declaration: operator :=(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.
64.3.100
assign(Tmatrix4_extended):Tmatrix4_single
Synopsis: Allow assignment of four-dimensional extended precision matrix to four-dimensional single precision matrix
Declaration: operator :=(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.
64.3.101
assign(Tmatrix4_single):Tmatrix2_double
Synopsis: Allow assignment of four-dimensional single precision matrix to two-dimensional double precision
matrix
Declaration: operator :=(const v: Tmatrix4_single) : Tmatrix2_double
966
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 fields are thrown away.
64.3.102
assign(Tmatrix4_single):Tmatrix2_extended
Synopsis: Allow assignment of four-dimensional single precision matrix to two-dimensional extended precision matrix
Declaration: operator :=(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 fields are thrown away.
64.3.103
assign(Tmatrix4_single):Tmatrix2_single
Synopsis: Allow assignment of four-dimensional single precision matrix to two-dimensional single precision
matrix
Declaration: operator :=(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 fields are thrown away.
64.3.104
assign(Tmatrix4_single):Tmatrix3_double
Synopsis: Allow assignment of four-dimensional single precision matrix to three-dimensional double precision
matrix
Declaration: operator :=(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 fields are thrown away.
64.3.105
assign(Tmatrix4_single):Tmatrix3_extended
Synopsis: Allow assignment of four-dimensional single precision matrix to three-dimensional extended precision matrix
Declaration: operator :=(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 fields are thrown away.
967
64.3.106
assign(Tmatrix4_single):Tmatrix3_single
Synopsis: Allow assignment of four-dimensional single precision matrix to three-dimensional single precision
matrix
Declaration: operator :=(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 fields are thrown away.
64.3.107
assign(Tmatrix4_single):Tmatrix4_double
Synopsis: Allow assignment of four-dimensional single precision matrix to four-dimensional double precision
matrix
Declaration: operator :=(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.
64.3.108
assign(Tmatrix4_single):Tmatrix4_extended
Synopsis: Allow assignment of four-dimensional single precision matrix to four-dimensional extended precision matrix
Declaration: operator :=(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.
64.3.109
assign(Tvector2_double):Tvector2_extended
64.3.110
assign(Tvector2_double):Tvector2_single
968
64.3.111
assign(Tvector2_double):Tvector3_double
Synopsis: Allow assignment of two-dimensional double precision vector to three-dimensional double precision
vector
Declaration: operator :=(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.
64.3.112
assign(Tvector2_double):Tvector3_extended
Synopsis: Allow assignment of two-dimensional double precision vector to three-dimensional extended precision vector
Declaration: operator :=(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.
64.3.113
assign(Tvector2_double):Tvector3_single
Synopsis: Allow assignment of two-dimensional double precision vector to three-dimensional single precision
vector
Declaration: operator :=(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.
64.3.114
assign(Tvector2_double):Tvector4_double
Synopsis: Allow assignment of two-dimensional double precision vector to four-dimensional double precision
vector
Declaration: operator :=(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.
64.3.115
assign(Tvector2_double):Tvector4_extended
Synopsis: Allow assignment of two-dimensional double precision vector to four-dimensional extended precision vector
Declaration: operator :=(const v: Tvector2_double) : Tvector4_extended
969
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.
64.3.116
assign(Tvector2_double):Tvector4_single
Synopsis: Allow assignment of two-dimensional double precision vector to four-dimensional single precision
vector
Declaration: operator :=(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.
64.3.117
assign(Tvector2_extended):Tvector2_double
64.3.118
assign(Tvector2_extended):Tvector2_single
64.3.119
assign(Tvector2_extended):Tvector3_double
Synopsis: Allow assignment of two-dimensional extended precision vector to three-dimensional double precision vector
Declaration: operator :=(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.
970
64.3.120
assign(Tvector2_extended):Tvector3_extended
Synopsis: Allow assignment of two-dimensional extened precision vector to three-dimensional extended precision vector
Declaration: operator :=(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.
64.3.121
assign(Tvector2_extended):Tvector3_single
Synopsis: Allow assignment of two-dimensional extended precision vector to three-dimensional single precision vector
Declaration: operator :=(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.
64.3.122
assign(Tvector2_extended):Tvector4_double
Synopsis: Allow assignment of two-dimensional extended precision vector to four-dimensional double precision vector
Declaration: operator :=(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.
64.3.123
assign(Tvector2_extended):Tvector4_extended
Synopsis: Allow assignment of two-dimensiona extended precision vector to four-dimensional extended precision vector
Declaration: operator :=(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.
971
64.3.124
assign(Tvector2_extended):Tvector4_single
Synopsis: Allow assignment of two-dimensional extended precision vector to four-dimensional single precision vector
Declaration: operator :=(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.
64.3.125
assign(Tvector2_single):Tvector2_double
64.3.126
assign(Tvector2_single):Tvector2_extended
64.3.127
assign(Tvector2_single):Tvector3_double
Synopsis: Allow assignment of two-dimensional single precision vector to three-dimensional double precision
vector
Declaration: operator :=(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.
64.3.128
assign(Tvector2_single):Tvector3_extended
Synopsis: Allow assignment of two-dimensional single precision vector to three-dimensional extended precision vector
Declaration: operator :=(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.
972
64.3.129
assign(Tvector2_single):Tvector3_single
Synopsis: Allow assignment of two-dimensional single precision vector to three-dimensional single precision
vector
Declaration: operator :=(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.
64.3.130
assign(Tvector2_single):Tvector4_double
Synopsis: Allow assignment of two-dimensional single precision vector to four-dimensional double precision
vector
Declaration: operator :=(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.
64.3.131
assign(Tvector2_single):Tvector4_extended
Synopsis: Allow assignment of two-dimensional single precision vector to four-dimensional extended precision vector
Declaration: operator :=(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.
64.3.132
assign(Tvector2_single):Tvector4_single
Synopsis: Allow assignment of two-dimensional single precision vector to four-dimensional single precision
vector
Declaration: operator :=(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.
973
64.3.133
assign(Tvector3_double):Tvector2_double
Synopsis: Allow assignment of three-dimensional double precision vector to two-dimensional double precision
vector
Declaration: operator :=(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.
64.3.134
assign(Tvector3_double):Tvector2_extended
Synopsis: Allow assignment of three-dimensional double precision vector to two-dimensional extended precision vector
Declaration: operator :=(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.
64.3.135
assign(Tvector3_double):Tvector2_single
Synopsis: Allow assignment of three-dimensional double precision vector to two-dimensional single precision
vector
Declaration: operator :=(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.
64.3.136
assign(Tvector3_double):Tvector3_extended
Synopsis: Allow assignment of three-dimensional double precision vector to three-dimensional extended precision vector
Declaration: operator :=(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.
64.3.137
assign(Tvector3_double):Tvector3_single
Synopsis: Allow assignment of three-dimensional double precision vector to three-dimensional single precision vector
Declaration: operator :=(const v: Tvector3_double) : Tvector3_single
Visibility: default
974
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.
64.3.138
assign(Tvector3_double):Tvector4_double
Synopsis: Allow assignment of three-dimensional double precision vector to four-dimensional double precision vector
Declaration: operator :=(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.
64.3.139
assign(Tvector3_double):Tvector4_extended
Synopsis: Allow assignment of three-dimensional double precision vector to four-dimensional extended precision vector
Declaration: operator :=(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.
64.3.140
assign(Tvector3_double):Tvector4_single
Synopsis: Allow assignment of three-dimensional double precision vector to four-dimensional single precision
vector
Declaration: operator :=(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.
64.3.141
assign(Tvector3_extended):Tvector2_double
Synopsis: Allow assignment of three-dimensional extended precision vector to two-dimensional double precision vector
Declaration: operator :=(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.
975
64.3.142
assign(Tvector3_extended):Tvector2_extended
Synopsis: Allow assignment of three-dimensional extended precision vector to two-dimensional extended precision vector
Declaration: operator :=(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.
64.3.143
assign(Tvector3_extended):Tvector2_single
Synopsis: Allow assignment of three-dimensional extended precision vector to two-dimensional single precision vector
Declaration: operator :=(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.
64.3.144
assign(Tvector3_extended):Tvector3_double
Synopsis: Allow assignment of three-dimensional extended precision vector to three-dimensional double precision vector
Declaration: operator :=(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.
64.3.145
assign(Tvector3_extended):Tvector3_single
Synopsis: Allow assignment of three-dimensional single precision vector to three-dimensional double precision vector
Declaration: operator :=(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.
976
64.3.146
assign(Tvector3_extended):Tvector4_double
Synopsis: Allow assignment of three-dimensional extended precision vector to four-dimensional double precision vector
Declaration: operator :=(const v: Tvector3_extended) : Tvector4_double
Visibility: default
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.
64.3.147
assign(Tvector3_extended):Tvector4_extended
Synopsis: Allow assignment of three-dimensional extended precision vector to four-dimensional extended precision vector
Declaration: operator :=(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.
64.3.148
assign(Tvector3_extended):Tvector4_single
Synopsis: Allow assignment of three-dimensional extended precision vector to four-dimensional single precision vector
Declaration: operator :=(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.
64.3.149
assign(Tvector3_single):Tvector2_double
Synopsis: Allow assignment of three-dimensional single precision vector to two-dimensional double precision
vector
Declaration: operator :=(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.
64.3.150
assign(Tvector3_single):Tvector2_extended
Synopsis: Allow assignment of three-dimensional single precision vector to two-dimensional extended precision vector
Declaration: operator :=(const v: Tvector3_single) : Tvector2_extended
977
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.
64.3.151
assign(Tvector3_single):Tvector2_single
Synopsis: Allow assignment of three-dimensional single precision vector to two-dimensional single precision
vector
Declaration: operator :=(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.
64.3.152
assign(Tvector3_single):Tvector3_double
Synopsis: Allow assignment of three-dimensional single precision vector to three-dimensional double precision vector
Declaration: operator :=(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.
64.3.153
assign(Tvector3_single):Tvector3_extended
Synopsis: Allow assignment of three-dimensional single precision vector to three-dimensional extended precision vector
Declaration: operator :=(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.
64.3.154
assign(Tvector3_single):Tvector4_double
Synopsis: Allow assignment of three-dimensional single precision vector to four-dimensional double precision
vector
Declaration: operator :=(const v: Tvector3_single) : Tvector4_double
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.
978
64.3.155
assign(Tvector3_single):Tvector4_extended
Synopsis: Allow assignment of three-dimensional single precision vector to four-dimensional extended precision vector
Declaration: operator :=(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.
64.3.156
assign(Tvector3_single):Tvector4_single
Synopsis: Allow assignment of three-dimensional single precision vector to four-dimensional single precision
vector
Declaration: operator :=(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.
64.3.157
assign(Tvector4_double):Tvector2_double
Synopsis: Allow assignment of four-dimensional double precision vector to two-dimensional double precision
vector
Declaration: operator :=(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.
64.3.158
assign(Tvector4_double):Tvector2_extended
Synopsis: Allow assignment of four-dimensional double precision vector to two-dimensional extended precision vector
Declaration: operator :=(const v: Tvector4_double) : Tvector2_extended
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.
64.3.159
assign(Tvector4_double):Tvector2_single
Synopsis: Allow assignment of four-dimensional double precision vector to two-dimensional single precision
vector
Declaration: operator :=(const v: Tvector4_double) : Tvector2_single
979
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.
64.3.160
assign(Tvector4_double):Tvector3_double
Synopsis: Allow assignment of four-dimensional double precision vector to three-dimensional double precision vector
Declaration: operator :=(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.
64.3.161
assign(Tvector4_double):Tvector3_extended
Synopsis: Allow assignment of four-dimensional double precision vector to three-dimensional extended precision vector
Declaration: operator :=(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.
64.3.162
assign(Tvector4_double):Tvector3_single
Synopsis: Allow assignment of four-dimensional double precision vector to three-dimensional single precision
vector
Declaration: operator :=(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.
64.3.163
assign(Tvector4_double):Tvector4_extended
Synopsis: Allow assignment of four-dimensional single precision vector to four-dimensional extended precision vector
Declaration: operator :=(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.
980
64.3.164
assign(Tvector4_double):Tvector4_single
Synopsis: Allow assignment of four-dimensional double precision vector to four-dimensional single precision
vector
Declaration: operator :=(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.
64.3.165
assign(Tvector4_extended):Tvector2_double
Synopsis: Allow assignment of four-dimensional extended precision vector to two-dimensional double precision vector
Declaration: operator :=(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.
64.3.166
assign(Tvector4_extended):Tvector2_extended
Synopsis: Allow assignment of four-dimensional extended precision vector to two-dimensional extended precision vector
Declaration: operator :=(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.
64.3.167
assign(Tvector4_extended):Tvector2_single
Synopsis: Allow assignment of four-dimensional extended precision vector to two-dimensional single precision vector
Declaration: operator :=(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.
981
64.3.168
assign(Tvector4_extended):Tvector3_double
Synopsis: Allow assignment of four-dimensional extended precision vector to three-dimensional double precision vector
Declaration: operator :=(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.
64.3.169
assign(Tvector4_extended):Tvector3_extended
Synopsis: Allow assignment of four-dimensional extended precision vector to three-dimensional extended precision vector
Declaration: operator :=(const v: Tvector4_extended) : Tvector3_extended
Visibility: default
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.
64.3.170
assign(Tvector4_extended):Tvector3_single
Synopsis: Allow assignment of four-dimensional extended precision vector to three-dimensional single precision vector
Declaration: operator :=(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.
64.3.171
assign(Tvector4_extended):Tvector4_double
Synopsis: Allow assignment of four-dimensional single precision vector to four-dimensional double precision
vector
Declaration: operator :=(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.
982
64.3.172
assign(Tvector4_extended):Tvector4_single
Synopsis: Allow assignment of four-dimensional extended precision vector to four-dimensional single precision vector
Declaration: operator :=(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.
64.3.173
assign(Tvector4_single):Tvector2_double
Synopsis: Allow assignment of four-dimensional single precision vector to two-dimensional double precision
vector
Declaration: operator :=(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.
64.3.174
assign(Tvector4_single):Tvector2_extended
Synopsis: Allow assignment of four-dimensional single precision vector to two-dimensional extended precision vector
Declaration: operator :=(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.
64.3.175
assign(Tvector4_single):Tvector2_single
Synopsis: Allow assignment of four-dimensional single precision vector to two-dimensional single precision
vector
Declaration: operator :=(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.
983
64.3.176
assign(Tvector4_single):Tvector3_double
Synopsis: Allow assignment of four-dimensional single precision vector to three-dimensional double precision
vector
Declaration: operator :=(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.
64.3.177
assign(Tvector4_single):Tvector3_extended
Synopsis: Allow assignment of four-dimensional single precision vector to three-dimensional extended precision vector
Declaration: operator :=(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.
64.3.178
assign(Tvector4_single):Tvector3_single
Synopsis: Allow assignment of four-dimensional single precision vector to three-dimensional single precision
vector
Declaration: operator :=(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.
64.3.179
assign(Tvector4_single):Tvector4_double
Synopsis: Allow assignment of four-dimensional single precision vector to four-dimensional double precision
vector
Declaration: operator :=(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.
64.3.180
assign(Tvector4_single):Tvector4_extended
Synopsis: Allow assignment of four-dimensional single precision vector to four-dimensional extended precision vector
Declaration: operator :=(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.
984
64.3.181
divide(Tmatrix2_double,Double):Tmatrix2_double
64.3.182
divide(Tmatrix2_extended,extended):Tmatrix2_extended
64.3.183
divide(Tmatrix2_single,single):Tmatrix2_single
64.3.184
divide(Tmatrix3_double,Double):Tmatrix3_double
64.3.185
divide(Tmatrix3_extended,extended):Tmatrix3_extended
985
64.3.186
divide(Tmatrix3_single,single):Tmatrix3_single
64.3.187
divide(Tmatrix4_double,Double):Tmatrix4_double
64.3.188
divide(Tmatrix4_extended,extended):Tmatrix4_extended
64.3.189
divide(Tmatrix4_single,single):Tmatrix4_single
64.3.190
divide(Tvector2_double,Double):Tvector2_double
986
64.3.191
divide(Tvector2_extended,extended):Tvector2_extended
64.3.192
divide(Tvector2_single,single):Tvector2_single
64.3.193
divide(Tvector3_double,Double):Tvector3_double
64.3.194
divide(Tvector3_extended,extended):Tvector3_extended
64.3.195
divide(Tvector3_single,single):Tvector3_single
987
64.3.196
divide(Tvector4_double,Double):Tvector4_double
64.3.197
divide(Tvector4_extended,extended):Tvector4_extended
64.3.198
divide(Tvector4_single,single):Tvector4_single
64.3.199
multiply(Tmatrix2_double,Double):Tmatrix2_double
64.3.200
multiply(Tmatrix2_double,Tmatrix2_double):Tmatrix2_double
988
64.3.201
multiply(Tmatrix2_double,Tvector2_double):Tvector2_double
64.3.202
multiply(Tmatrix2_extended,extended):Tmatrix2_extended
64.3.203
multiply(Tmatrix2_extended,Tmatrix2_extended):Tmatrix2_extended
64.3.204
multiply(Tmatrix2_extended,Tvector2_extended):Tvector2_extended
989
64.3.205
multiply(Tmatrix2_single,single):Tmatrix2_single
64.3.206
multiply(Tmatrix2_single,Tmatrix2_single):Tmatrix2_single
64.3.207
multiply(Tmatrix2_single,Tvector2_single):Tvector2_single
64.3.208
multiply(Tmatrix3_double,Double):Tmatrix3_double
64.3.209
multiply(Tmatrix3_double,Tmatrix3_double):Tmatrix3_double
64.3.210
multiply(Tmatrix3_double,Tvector3_double):Tvector3_double
64.3.211
multiply(Tmatrix3_extended,extended):Tmatrix3_extended
64.3.212
multiply(Tmatrix3_extended,Tmatrix3_extended):Tmatrix3_extended
64.3.213
multiply(Tmatrix3_extended,Tvector3_extended):Tvector3_extended
991
64.3.214
multiply(Tmatrix3_single,single):Tmatrix3_single
64.3.215
multiply(Tmatrix3_single,Tmatrix3_single):Tmatrix3_single
64.3.216
multiply(Tmatrix3_single,Tvector3_single):Tvector3_single
64.3.217
multiply(Tmatrix4_double,Double):Tmatrix4_double
64.3.218
multiply(Tmatrix4_double,Tmatrix4_double):Tmatrix4_double
64.3.219
multiply(Tmatrix4_double,Tvector4_double):Tvector4_double
64.3.220
multiply(Tmatrix4_extended,extended):Tmatrix4_extended
64.3.221
multiply(Tmatrix4_extended,Tmatrix4_extended):Tmatrix4_extended
64.3.222
multiply(Tmatrix4_extended,Tvector4_extended):Tvector4_extended
993
64.3.223
multiply(Tmatrix4_single,single):Tmatrix4_single
64.3.224
multiply(Tmatrix4_single,Tmatrix4_single):Tmatrix4_single
64.3.225
multiply(Tmatrix4_single,Tvector4_single):Tvector4_single
64.3.226
multiply(Tvector2_double,Double):Tvector2_double
64.3.227
multiply(Tvector2_double,Tvector2_double):Tvector2_double
64.3.228
multiply(Tvector2_extended,extended):Tvector2_extended
64.3.229
multiply(Tvector2_extended,Tvector2_extended):Tvector2_extended
64.3.230
multiply(Tvector2_single,single):Tvector2_single
64.3.231
multiply(Tvector2_single,Tvector2_single):Tvector2_single
64.3.232
multiply(Tvector3_double,Double):Tvector3_double
995
64.3.233
multiply(Tvector3_double,Tvector3_double):Tvector3_double
64.3.234
multiply(Tvector3_extended,extended):Tvector3_extended
64.3.235
multiply(Tvector3_extended,Tvector3_extended):Tvector3_extended
64.3.236
multiply(Tvector3_single,single):Tvector3_single
64.3.237
multiply(Tvector3_single,Tvector3_single):Tvector3_single
996
64.3.238
multiply(Tvector4_double,Double):Tvector4_double
64.3.239
multiply(Tvector4_double,Tvector4_double):Tvector4_double
64.3.240
multiply(Tvector4_extended,extended):Tvector4_extended
64.3.241
multiply(Tvector4_extended,Tvector4_extended):Tvector4_extended
64.3.242
multiply(Tvector4_single,single):Tvector4_single
997
64.3.243
multiply(Tvector4_single,Tvector4_single):Tvector4_single
64.3.244
negative(Tmatrix2_double):Tmatrix2_double
64.3.245
negative(Tmatrix2_extended):Tmatrix2_extended
64.3.246
negative(Tmatrix2_single):Tmatrix2_single
64.3.247
negative(Tmatrix3_double):Tmatrix3_double
998
64.3.248
negative(Tmatrix3_extended):Tmatrix3_extended
64.3.249
negative(Tmatrix3_single):Tmatrix3_single
64.3.250
negative(Tmatrix4_double):Tmatrix4_double
64.3.251
negative(Tmatrix4_extended):Tmatrix4_extended
64.3.252
negative(Tmatrix4_single):Tmatrix4_single
64.3.253
negative(Tvector2_double):Tvector2_double
64.3.254
negative(Tvector2_extended):Tvector2_extended
64.3.255
negative(Tvector2_single):Tvector2_single
64.3.256
negative(Tvector3_double):Tvector3_double
64.3.257
negative(Tvector3_extended):Tvector3_extended
64.3.258
negative(Tvector3_single):Tvector3_single
1000
64.3.259
negative(Tvector4_double):Tvector4_double
64.3.260
negative(Tvector4_extended):Tvector4_extended
64.3.261
negative(Tvector4_single):Tvector4_single
64.3.262
power(Tvector2_double,Tvector2_double):Double
64.3.263
power(Tvector2_extended,Tvector2_extended):extended
1001
64.3.264
power(Tvector2_single,Tvector2_single):single
64.3.265
power(Tvector3_double,Tvector3_double):Double
64.3.266
power(Tvector3_extended,Tvector3_extended):extended
64.3.267
power(Tvector3_single,Tvector3_single):single
64.3.268
power(Tvector4_double,Tvector4_double):Double
1002
64.3.269
power(Tvector4_extended,Tvector4_extended):extended
64.3.270
power(Tvector4_single,Tvector4_single):single
64.3.271
subtract(Tmatrix2_double,Double):Tmatrix2_double
64.3.272
subtract(Tmatrix2_double,Tmatrix2_double):Tmatrix2_double
64.3.273
subtract(Tmatrix2_extended,extended):Tmatrix2_extended
1003
64.3.274
subtract(Tmatrix2_extended,Tmatrix2_extended):Tmatrix2_extended
64.3.275
subtract(Tmatrix2_single,single):Tmatrix2_single
64.3.276
subtract(Tmatrix2_single,Tmatrix2_single):Tmatrix2_single
64.3.277
subtract(Tmatrix3_double,Double):Tmatrix3_double
64.3.278
subtract(Tmatrix3_double,Tmatrix3_double):Tmatrix3_double
1004
64.3.279
subtract(Tmatrix3_extended,extended):Tmatrix3_extended
64.3.280
subtract(Tmatrix3_extended,Tmatrix3_extended):Tmatrix3_extended
64.3.281
subtract(Tmatrix3_single,single):Tmatrix3_single
64.3.282
subtract(Tmatrix3_single,Tmatrix3_single):Tmatrix3_single
64.3.283
subtract(Tmatrix4_double,Double):Tmatrix4_double
1005
64.3.284
subtract(Tmatrix4_double,Tmatrix4_double):Tmatrix4_double
64.3.285
subtract(Tmatrix4_extended,extended):Tmatrix4_extended
64.3.286
subtract(Tmatrix4_extended,Tmatrix4_extended):Tmatrix4_extended
64.3.287
subtract(Tmatrix4_single,single):Tmatrix4_single
64.3.288
subtract(Tmatrix4_single,Tmatrix4_single):Tmatrix4_single
64.3.289
subtract(Tvector2_double,Double):Tvector2_double
64.3.290
subtract(Tvector2_double,Tvector2_double):Tvector2_double
64.3.291
subtract(Tvector2_extended,extended):Tvector2_extended
64.3.292
subtract(Tvector2_extended,Tvector2_extended):Tvector2_extended
64.3.293
subtract(Tvector2_single,single):Tvector2_single
64.3.294
subtract(Tvector2_single,Tvector2_single):Tvector2_single
64.3.295
subtract(Tvector3_double,Double):Tvector3_double
64.3.296
subtract(Tvector3_double,Tvector3_double):Tvector3_double
64.3.297
subtract(Tvector3_extended,extended):Tvector3_extended
64.3.298
subtract(Tvector3_extended,Tvector3_extended):Tvector3_extended
64.3.299
subtract(Tvector3_single,single):Tvector3_single
64.3.300
subtract(Tvector3_single,Tvector3_single):Tvector3_single
64.3.301
subtract(Tvector4_double,Double):Tvector4_double
64.3.302
subtract(Tvector4_double,Tvector4_double):Tvector4_double
64.3.303
subtract(Tvector4_extended,extended):Tvector4_extended
64.3.304
subtract(Tvector4_extended,Tvector4_extended):Tvector4_extended
64.3.305
subtract(Tvector4_single,single):Tvector4_single
64.3.306
subtract(Tvector4_single,Tvector4_single):Tvector4_single
64.3.307
symmetricaldifference(Tvector3_double,Tvector3_double):Tvector3_double
1010
64.3.308
symmetricaldifference(Tvector3_extended,Tvector3_extended):Tvector3_exten
64.3.309
symmetricaldifference(Tvector3_single,Tvector3_single):Tvector3_single
64.4
64.4.1
Tmatrix2_double
Description
64.4.2
Method overview
Page
1013
1012
1012
1012
Method
determinant
get\_column
get\_row
init
1012
1012
1013
1012
1013
1013
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.
1011
64.4.3
Tmatrix2_double.init_zero
64.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.
64.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.
64.4.6
Tmatrix2_double.get_column
64.4.7
Tmatrix2_double.get_row
64.4.8
Tmatrix2_double.set_column
64.4.9
Tmatrix2_double.set_row
64.4.10
Tmatrix2_double.determinant
64.4.11
Tmatrix2_double.inverse
64.4.12
Tmatrix2_double.transpose
64.5
64.5.1
Tmatrix2_extended
Description
1013
64.5.2
Method overview
Page
1015
1014
1015
1014
Method
determinant
get\_column
get\_row
init
1014
1014
1015
1015
1015
1015
init\_identity
init\_zero
inverse
set\_column
set\_row
transpose
64.5.3
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.
Tmatrix2_extended.init_zero
64.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.
64.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.
64.5.6
Tmatrix2_extended.get_column
1014
64.5.7
Tmatrix2_extended.get_row
64.5.8
Tmatrix2_extended.set_column
64.5.9
Tmatrix2_extended.set_row
64.5.10
Tmatrix2_extended.determinant
64.5.11
Tmatrix2_extended.inverse
64.5.12
Tmatrix2_extended.transpose
64.6
64.6.1
Tmatrix2_single
Description
64.6.2
Method overview
Page
1017
1017
1017
1016
Method
determinant
get\_column
get\_row
init
1016
1016
1017
1017
1017
1018
init\_identity
init\_zero
inverse
set\_column
set\_row
transpose
64.6.3
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.
Tmatrix2_single.init_zero
64.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.
64.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.
1016
64.6.6
Tmatrix2_single.get_column
64.6.7
Tmatrix2_single.get_row
64.6.8
Tmatrix2_single.set_column
64.6.9
Tmatrix2_single.set_row
64.6.10
Tmatrix2_single.determinant
64.6.11
Tmatrix2_single.inverse
64.6.12
Tmatrix2_single.transpose
64.7
64.7.1
Tmatrix3_double
Description
64.7.2
Method overview
Page
1020
1019
1019
1019
Method
determinant
get\_column
get\_row
init
1018
1018
1020
1019
1019
1020
init\_identity
init\_zero
inverse
set\_column
set\_row
transpose
64.7.3
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.
Tmatrix3_double.init_zero
64.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.
1018
64.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.
64.7.6
Tmatrix3_double.get_column
64.7.7
Tmatrix3_double.get_row
64.7.8
Tmatrix3_double.set_column
64.7.9
Tmatrix3_double.set_row
1019
64.7.10
Tmatrix3_double.determinant
64.7.11
Tmatrix3_double.inverse
64.7.12
Tmatrix3_double.transpose
64.8
64.8.1
Tmatrix3_extended
Description
64.8.2
Method overview
Page
1022
1021
1021
1021
Method
determinant
get\_column
get\_row
init
1021
1021
1022
1022
1022
1022
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.
1020
64.8.3
Tmatrix3_extended.init_zero
64.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.
64.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.
64.8.6
Tmatrix3_extended.get_column
64.8.7
Tmatrix3_extended.get_row
1021
64.8.8
Tmatrix3_extended.set_column
64.8.9
Tmatrix3_extended.set_row
64.8.10
Tmatrix3_extended.determinant
64.8.11
Tmatrix3_extended.inverse
64.8.12
Tmatrix3_extended.transpose
64.9
64.9.1
Tmatrix3_single
Description
64.9.2
Method overview
Page
1024
1023
1024
1023
Method
determinant
get\_column
get\_row
init
1023
1023
1024
1024
1024
1024
init\_identity
init\_zero
inverse
set\_column
set\_row
transpose
64.9.3
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.
Tmatrix3_single.init_zero
64.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.
64.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.
64.9.6
Tmatrix3_single.get_column
1023
64.9.7
Tmatrix3_single.get_row
64.9.8
Tmatrix3_single.set_column
64.9.9
Tmatrix3_single.set_row
64.9.10
Tmatrix3_single.determinant
64.9.11
Tmatrix3_single.inverse
64.9.12
Tmatrix3_single.transpose
64.10
Tmatrix4_double
64.10.1
Description
64.10.2
Method overview
Page
1026
1026
1026
1025
Method
determinant
get\_column
get\_row
init
1025
1025
1027
1026
1026
1027
init\_identity
init\_zero
inverse
set\_column
set\_row
transpose
64.10.3
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.
Tmatrix4_double.init_zero
64.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.
64.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.
1025
64.10.6
Tmatrix4_double.get_column
64.10.7
Tmatrix4_double.get_row
64.10.8
Tmatrix4_double.set_column
64.10.9
Tmatrix4_double.set_row
64.10.10
Tmatrix4_double.determinant
1026
64.10.11
Tmatrix4_double.inverse
64.10.12
Tmatrix4_double.transpose
64.11
Tmatrix4_extended
64.11.1
Description
64.11.2
Method overview
Page
1029
1028
1028
1028
Method
determinant
get\_column
get\_row
init
1028
1027
1029
1028
1029
1029
init\_identity
init\_zero
inverse
set\_column
set\_row
transpose
64.11.3
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.
Tmatrix4_extended.init_zero
1027
64.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.
64.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.
64.11.6
Tmatrix4_extended.get_column
64.11.7
Tmatrix4_extended.get_row
64.11.8
Tmatrix4_extended.set_column
1028
64.11.9
Tmatrix4_extended.set_row
64.11.10
Tmatrix4_extended.determinant
64.11.11
Tmatrix4_extended.inverse
64.11.12
Tmatrix4_extended.transpose
64.12
64.12.1
Tmatrix4_single
Description
1029
64.12.2
Method overview
Page
1031
1030
1031
1030
Method
determinant
get\_column
get\_row
init
1030
1030
1031
1031
1031
1032
init\_identity
init\_zero
inverse
set\_column
set\_row
transpose
64.12.3
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.
Tmatrix4_single.init_zero
64.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.
64.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.
64.12.6
Tmatrix4_single.get_column
64.12.7
Tmatrix4_single.get_row
64.12.8
Tmatrix4_single.set_column
64.12.9
Tmatrix4_single.set_row
64.12.10
Tmatrix4_single.determinant
64.12.11
Tmatrix4_single.inverse
1031
64.12.12
Tmatrix4_single.transpose
64.13
Tvector2_double
64.13.1
Description
64.13.2
Method overview
Page
1032
Method
init
1032
1032
1033
1033
init\_one
init\_zero
length
squared\_length
64.13.3
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.
Tvector2_double.init_zero
64.13.4
Tvector2_double.init_one
64.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
1032
64.13.6
Tvector2_double.length
64.13.7
Tvector2_double.squared_length
64.14
Tvector2_extended
64.14.1
Description
64.14.2
Method overview
Page
1034
Method
init
1033
1033
1034
1034
init\_one
init\_zero
length
squared\_length
64.14.3
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.
Tvector2_extended.init_zero
64.14.4
Tvector2_extended.init_one
1033
64.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
64.14.6
Tvector2_extended.length
64.14.7
Tvector2_extended.squared_length
64.15
Tvector2_single
64.15.1
Description
64.15.2
Method overview
Page
1035
Method
init
1035
1034
1035
1035
init\_one
init\_zero
length
squared\_length
64.15.3
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.
Tvector2_single.init_zero
1034
64.15.4
Tvector2_single.init_one
64.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
64.15.6
Tvector2_single.length
64.15.7
Tvector2_single.squared_length
64.16
Tvector3_double
64.16.1
Description
64.16.2
Method overview
Page
1036
Method
init
1036
1036
1036
1036
init\_one
init\_zero
length
squared\_length
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.
1035
64.16.3
Tvector3_double.init_zero
64.16.4
Tvector3_double.init_one
64.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
64.16.6
Tvector3_double.length
64.16.7
Tvector3_double.squared_length
64.17
64.17.1
Tvector3_extended
Description
1036
64.17.2
Method overview
Page
1037
Method
init
1037
1037
1037
1037
init\_one
init\_zero
length
squared\_length
64.17.3
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.
Tvector3_extended.init_zero
64.17.4
Tvector3_extended.init_one
64.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
64.17.6
Tvector3_extended.length
64.17.7
Tvector3_extended.squared_length
1037
64.18
Tvector3_single
64.18.1
Description
64.18.2
Method overview
Page
1038
Method
init
1038
1038
1038
1039
init\_one
init\_zero
length
squared\_length
64.18.3
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.
Tvector3_single.init_zero
64.18.4
Tvector3_single.init_one
64.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
64.18.6
Tvector3_single.length
1038
64.18.7
Tvector3_single.squared_length
64.19
Tvector4_double
64.19.1
Description
64.19.2
Method overview
Page
1039
Method
init
1039
1039
1040
1040
init\_one
init\_zero
length
squared\_length
64.19.3
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.
Tvector4_double.init_zero
64.19.4
Tvector4_double.init_one
64.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
1039
64.19.6
Tvector4_double.length
64.19.7
Tvector4_double.squared_length
64.20
Tvector4_extended
64.20.1
Description
64.20.2
Method overview
Page
1041
Method
init
1040
1040
1041
1041
init\_one
init\_zero
length
squared\_length
64.20.3
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.
Tvector4_extended.init_zero
64.20.4
Tvector4_extended.init_one
1040
64.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
64.20.6
Tvector4_extended.length
64.20.7
Tvector4_extended.squared_length
64.21
Tvector4_single
64.21.1
Description
64.21.2
Method overview
Page
1042
Method
init
1042
1041
1042
1042
init\_one
init\_zero
length
squared\_length
64.21.3
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.
Tvector4_single.init_zero
1041
64.21.4
Tvector4_single.init_one
64.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
64.21.6
Tvector4_single.length
64.21.7
Tvector4_single.squared_length
1042
Chapter 65
Overview
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 Klaempfl for the I386 processor. It should work on all
platforms that use the Intel processor.
65.2
65.2.1
65.2.2
Types
pmmxbyte = ^tmmxbyte
Pointer to tmmxbyte (1044) array type
pmmxcardinal = ^tmmxcardinal
Pointer to tmmxcardinal (1044) array type
pmmxinteger = ^tmmxinteger
Pointer to tmmxinteger (1044) array type
pmmxlongint = ^tmmxlongint
Pointer to tmmxlongint (1044) array type
pmmxshortint = ^tmmxshortint
Pointer to tmmxshortint (1044) array type
pmmxsingle = ^tmmxsingle
Pointer to tmmxsingle (1044) array type
pmmxword = ^tmmxword
Pointer to tmmxword (1044) 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
1044
65.3
65.3.1
65.3.2
femms
1045
Chapter 66
Overview
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.
66.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 ;
1046
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 ;
1047
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 .
66.3
66.3.1
errMouseBase = 1030
Base for mouse error codes.
errMouseInitError = errMouseBase + 0
Mouse initialization error
errMouseNotImplemented = errMouseBase + 1
Mouse driver not implemented.
1048
MouseActionDown = $0001
Mouse button down event signal.
MouseActionMove = $0004
Mouse cursor move event signal.
MouseActionUp = $0002
Mouse button up event signal.
MouseButton4 = $08
4th mouse button event
MouseButton5 = $10
5th mouse button event
MouseEventBufSize = 16
The mouse unit has a mechanism to buffer mouse events. This constant defines the size of the event
buffer.
MouseLeftButton = $01
Left mouse button event.
MouseMiddleButton = $04
Middle mouse button event.
MouseRightButton = $02
Right mouse button event.
66.3.2
Types
PMouseEvent = ^TMouseEvent
Pointer to TMouseEvent (1050) record.
TMouseDriver = record
UseDefaultQueue : Boolean;
InitDriver : procedure;
DoneDriver : procedure;
DetectMouse : function : Byte;
ShowMouse : procedure;
HideMouse : procedure;
GetMouseX : function : Word;
1049
The TMouseDriver record is used to implement a mouse driver in the SetMouseDriver (1055)
function. Its fields must be filled in before calling the SetMouseDriver (1055) 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 field describes which buttons were down when the event occurred. The x,y fields
describe where the event occurred on the screen. The Action describes what action was going on
when the event occurred. The Buttons and Action field can be examined using the constants
defined in the unit interface.
66.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.
66.4
66.4.1
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 (1054), DoneMouse (1051)
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 .
66.4.2
DoneMouse
66.4.3
GetMouseButtons
1051
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 (1052), GetMouseX (1053), GetMouseY (1053)
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 .
66.4.4
GetMouseDriver
66.4.5
GetMouseEvent
Errors: None.
See also: GetMouseButtons (1051), GetMouseX (1053), GetMouseY (1053)
66.4.6
GetMouseX
66.4.7
GetMouseY
1053
66.4.8
HideMouse
66.4.9
InitMouse
1054
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 (1051) 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 (1051), DetectMouse (1050)
66.4.10
PollMouseEvent
66.4.11
PutMouseEvent
66.4.12
SetMouseDriver
66.4.13
SetMouseXY
66.4.14
ShowMouse
1056
Chapter 67
Overview
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 fields that are in a Private part of an object declaration have been left out of this
documentation.
67.2
67.2.1
coIndexError = -1
Collection list error: Index out of range
coOverflow = -2
Collection list error: Overflow
DefaultTPCompatible : Boolean = False
DefaultTPCompatible is used to initialize tstream.tpcompatible (??).
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)
1057
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)
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 : CodePointer = 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).
67.2.2
Types
1059
PResourceCollection = ^TResourceCollection
Pointer to TResourceCollection (1103) object.
PResourceFile = ^TResourceFile
Pointer to TResourceFile (1104) object.
PSortedCollection = ^TSortedCollection
Pointer to TSortedCollection (1107) object.
PStrCollection = ^TStrCollection
Pointer to TStrCollection (1113) object.
PStream = ^TStream
Pointer type to TStream (1115)
PStreamRec = ^TStreamRec
Pointer to TStreamRec (1062)
PStrIndex = ^TStrIndex
Pointer to TStrIndex (1062) array.
PString = PShortString
Pointer to a shortstring.
PStringCollection = ^TStringCollection
Pointer to TStringCollection (1123) object.
PStringList = ^TStringList
Pointer to TStringList (1125) object.
PStrListMaker = ^TStrListMaker
Pointer to TStrListMaker (1127) object.
PtrRec = packed record
Ofs : Word;
Seg : Word;
end
PUnSortedStrCollection = ^TUnSortedStrCollection
Pointer to TUnSortedStrCollection (1128) object.
PWordArray = ^TWordArray
Pointer to TWordArray (1063)
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 (1074)
TPointerArray = Array[0..MaxPtrs-1] of Pointer
Array with maxmimum allowed number of pointers
TStreamRec = packed record
ObjType : Sw_Word;
VmtLink : pointer;
Load : CodePointer;
Store : CodePointer;
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 (1125)
1062
67.2.3
Variables
invalidhandle : THandle
Value for invalid handle. Initial value for file stream handles or when the stream is closed.
67.3
67.3.1
67.3.2
CallPointerConstructor
1063
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 (1065), CallPointerMethod (1064), CallVoidLocal (1065), CallPointerLocal
(1064), CallVoidMethodLocal (1066), CallPointerMethodLocal (1064)
67.3.3
CallPointerLocal
67.3.4
CallPointerMethod
67.3.5
CallPointerMethodLocal
1064
Errors: If the local function expects other parameters than a pointer, the stack may become corrupted.
See also: CallPointerMethod (1064), CallVoidMethod (1065), CallPointerLocal (1064), CallVoidLocal (1065),
CallVoidMethodLocal (1066), CallVoidConstructor (1065), CallPointerConstructor (1063)
67.3.6
CallVoidConstructor
67.3.7
CallVoidLocal
67.3.8
CallVoidMethod
1065
67.3.9
CallVoidMethodLocal
67.3.10
DisposeStr
67.3.11
LongDiv
67.3.12
LongMul
67.3.13
NewStr
67.3.14
RegisterObjects
1067
67.3.15
RegisterType
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 ;
1068
67.3.16
SetStr
67.4
67.4.1
TBufStream
Description
Bufstream implements a buffered file stream. That is, all data written to the stream is written to
memory first. Only when the buffer is full, or on explicit request, the data is written to disk.
Also, when reading from the stream, first the buffer is checked if there is any unread data in it. If so,
this is read first. If not the buffer is filled again, and then the data is read from the buffer.
The size of the buffer is fixed and is set when constructing the file.
This is useful if you need heavy throughput for your stream, because it speeds up operations.
67.4.2
Page
1071
1071
1071
1070
1073
1073
1072
1072
1073
67.4.3
Method overview
Method
Close
Done
Flush
Init
Open
Read
Seek
Truncate
Write
Description
Flush data and Close the file.
Close the file and cleans up the instance.
FLush data from buffer, and write it to stream.
Initialize an instance of TBufStream and open the file.
Open the file if it is closed.
Read data from the file to a buffer in memory.
Set current position in file.
Flush buffer, and truncate the file at current position.
Write data to the file from a buffer in memory.
TBufStream.Init
1070
67.4.4
TBufStream.Done
Virtual
Visibility: default
Description: Done flushes and closes the file if it was open and cleans up the instance of TBufStream.
For an example see TBufStream.Flush (1071).
Errors: None.
See also: TDosStream.Done (1089), TBufStream.Init (1070), TBufStream.Close (1071)
67.4.5
TBufStream.Close
Virtual
Visibility: default
Description: Close flushes and closes the file if it was open, and sets Handle to -1. Contrary to Done (1071) it
does not clean up the instance of TBufStream
For an example see TBufStream.Flush (1071).
Errors: None.
See also: TStream.Close (1119), TBufStream.Init (1070), TBufStream.Done (1071)
67.4.6
TBufStream.Flush
Virtual
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 file was in write mode. see Write (1073) for more info on the errors.
See also: TStream.Close (1119), TBufStream.Init (1070), TBufStream.Done (1071)
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
1071
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 .
67.4.7
TBufStream.Truncate
Virtual
Visibility: default
Description: If the status of the stream is stOK, then Truncate tries to flush the buffer, and then truncates the
stream size to the current file position.
For an example, see TDosStream.Truncate (1090).
Errors: Errors can be those of Flush (1071) or TDosStream.Truncate (1090).
See also: TStream.Truncate (1120), TDosStream.Truncate (1090), TStream.GetSize (1117)
67.4.8
TBufStream.Seek
Virtual
Visibility: default
Description: If the streams status is stOK, then Seek sets the file position to Pos. Pos is a zero-based offset,
counted from the beginning of the file.
For an example, see TStream.Seek (1121);
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 (1121), TStream.GetPos (1117)
1072
67.4.9
TBufStream.Open
Virtual
Visibility: default
Description: If the streams status is stOK, and the stream is closed then Open re-opens the file stream with
mode OpenMode. This call can be used after a Close (1071) call.
For an example, see TDosStream.Open (1092).
Errors: If an error occurs when re-opening the file, then Status is set to stOpenError, and the OS error
code is stored in ErrorInfo
See also: TStream.Open (1119), TBufStream.Close (1071)
67.4.10
TBufStream.Read
Virtual
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 first try to read the data from the streams internal buffer. If insufficient data is available,
the buffer will be filled before contiunuing to read. This process is repeated until all needed data has
been read.
For an example, see TStream.Read (1122).
Errors: In case of an error, Status is set to StReadError, and ErrorInfo gets the OS specific error,
or 0 when an attempt was made to read beyond the end of the stream.
See also: TStream.Read (1122), TBufStream.Write (1073)
67.4.11
TBufStream.Write
Virtual
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 first 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 (1122).
Errors: In case of an error, Status is set to StWriteError, and ErrorInfo gets the OS specific error.
See also: TStream.Write (1122), TBufStream.Read (1073)
1073
67.5
67.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 flavors,
one for objects, one for pointers.
67.5.2
Page
1076
1084
1083
1087
1087
1083
1081
1075
1086
1078
1085
1082
1080
1084
1077
1076
1074
1082
1078
1075
1079
1088
1086
1088
67.5.3
Method overview
Method
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 first 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.
TCollection.Init
1074
67.5.4
TCollection.Load
:
:
:
:
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 .
67.5.5
TCollection.Done
Virtual
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 (1085).
1075
Errors: None.
See also: TCollection.Init (1074), TCollection.FreeAll (1080)
67.5.6
TCollection.At
67.5.7
,M^ . G e t F i e l d ) ;
TCollection.IndexOf
Virtual
Visibility: default
Description: IndexOf returns the index of Item in the collection. If Item isnt present in the collection, -1 is
returned.
1076
67.5.8
TCollection.GetItem
Virtual
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 (1115).
See also: TStream.Get (1115), TCollection.Store (1088)
1077
67.5.9
TCollection.LastThat
67.5.10
TCollection.FirstThat
1078
Description: This function returns the first 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 (1078)
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 .
67.5.11
TCollection.Pack
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 .
67.5.12
TCollection.FreeAll
1080
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 .
67.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 (1080), DeletAll doesnt call the destructor of the objects.
Errors: None.
See also: TCollection.FreeAll (1080), TCollection.Delete (1083)
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 . ) ;
1081
C^ . D e l e t e A l l ;
W r i t e l n ( Deleted a l l o b j e c t s . ) ;
Dispose (C, Done ) ;
end .
67.5.14
TCollection.Free
67.5.15
TCollection.Insert
Virtual
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.
1082
Errors: None.
See also: TCollection.AtInsert (1087), TCollection.AtPut (1087)
67.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 (1082) call is provided.
Errors: If the Item is not in the collection, Error will be called with coIndexError.
See also: TCollection.AtDelete (1084), TCollection.Free (1082)
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 .
67.5.17
TCollection.AtFree
1083
Errors: If Index isnt valid then Error (1086) is called with CoIndexError.
See also: TCollection.Free (1082), TCollection.AtDelete (1084)
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 .
67.5.18
TCollection.FreeItem
Virtual
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 (1082), TCollection.AtFree (1083)
67.5.19
TCollection.AtDelete
Errors: If Index isnt valid then Error (1086) is called with CoIndexError.
See also: TCollection.Delete (1083)
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 .
67.5.20
TCollection.ForEach
1085
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
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 .
67.5.21
TCollection.SetLimit
Virtual
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 (1079).
Errors: None.
See also: TCollection.Init (1074)
67.5.22
TCollection.Error
Virtual
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 (1063)
1086
67.5.23
TCollection.AtPut
67.5.24
TCollection.AtInsert
,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)
1087
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 .
67.5.25
TCollection.Store
67.5.26
TCollection.PutItem
Virtual
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 (1120).
See also: Store (1088), GetItem (1077)
67.6
67.6.1
TDosStream
Description
TDosStream is a stream that stores its contents in a file. it overrides a couple of methods of
TStream (1115) for this.
In addition to the fields inherited from TStream (see TStream (1115)), there are some extra fields,
that describe the file. (mainly the name and the OS file handle)
No buffering in memory is done when using TDosStream. All data are written directly to the file.
For a stream that buffers in memory, see TBufStream (1070).
1088
67.6.2
Page
1090
1089
1089
1092
1092
1091
1090
1093
67.6.3
Method overview
Method
Close
Done
Init
Open
Read
Seek
Truncate
Write
Description
Close the file.
Closes the file and cleans up the instance.
Instantiate a new instance of TDosStream.
Open the file stream
Read data from the stream to a buffer.
Set file position.
Truncate the file on the current position.
Write data from a buffer to the stream.
TDosStream.Init
67.6.4
TDosStream.Done
Virtual
Visibility: default
Description: Done closes the file if it was open and cleans up the instance of TDosStream.
for an example, see e.g. TDosStream.Truncate (1090).
Errors: None.
See also: TDosStream.Init (1089), TDosStream.Close (1090)
1089
67.6.5
TDosStream.Close
Virtual
Visibility: default
Description: Close closes the file if it was open, and sets Handle to -1. Contrary to Done (1089) it does not
clean up the instance of TDosStream
For an example, see TDosStream.Open (1092).
Errors: None.
See also: TStream.Close (1119), TDosStream.Init (1089), TDosStream.Done (1089)
67.6.6
TDosStream.Truncate
Virtual
Visibility: default
Description: If the status of the stream is stOK, then Truncate tries to truncate the stream size to the current
file 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 (1120), TStream.GetSize (1117)
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 ) ;
1090
S ^ . Truncate ;
W r i t e l n ( Truncated stream . Size i s :
S ^ . Close ;
Dispose ( S , Done ) ;
end .
67.6.7
,S ^ . GetSize ) ;
TDosStream.Seek
Virtual
Visibility: default
Description: If the streams status is stOK, then Seek sets the file position to Pos. Pos is a zero-based offset,
counted from the beginning of the file.
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 (1121), TStream.GetPos (1117)
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 .
1091
67.6.8
TDosStream.Open
Virtual
Visibility: default
Description: If the streams status is stOK, and the stream is closed then Open re-opens the file stream with
mode OpenMode. This call can be used after a Close (1090) call.
Errors: If an error occurs when re-opening the file, then Status is set to stOpenError, and the OS error
code is stored in ErrorInfo
See also: TStream.Open (1119), TDosStream.Close (1090)
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 .
67.6.9
TDosStream.Read
Virtual
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 (1122).
Errors: In case of an error, Status is set to StReadError, and ErrorInfo gets the OS specific error,
or 0 when an attempt was made to read beyond the end of the stream.
See also: TStream.Read (1122), TDosStream.Write (1093)
1092
67.6.10
TDosStream.Write
Virtual
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 (1122).
Errors: In case of an error, Status is set to StWriteError, and ErrorInfo gets the OS specific error.
See also: TStream.Write (1122), TDosStream.Read (1092)
67.7
67.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 size of the memory
blocks being used.
See also: TStream (1115)
67.7.2
Page
1094
1093
1095
1094
1095
67.7.3
Method overview
Method
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.
TMemoryStream.Init
1093
67.7.4
TMemoryStream.Done
Virtual
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 (1123).
Errors: None.
See also: TMemoryStream.Init (1093)
67.7.5
TMemoryStream.Truncate
Virtual
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 first 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 (1120)
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 .
1094
67.7.6
TMemoryStream.Read
Virtual
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 (1122).
Errors: If there is not enough data available, no data is read, and the streams status is set to stReadError.
See also: TStream.Read (1122), TMemoryStream.Write (1095)
67.7.7
TMemoryStream.Write
Virtual
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 specified in the constuctor call Init (1093)) as
needed.
For an example, see TStream.Read (1122).
Errors: If the stream cannot allocate more memory, then the status is set to stWriteError
See also: TStream.Write (1122), TMemoryStream.Read (1095)
67.8
67.8.1
TObject
Description
This type serves as the basic object for all other objects in the Objects unit.
67.8.2
Page
1097
1096
1095
1096
67.8.3
Method overview
Method
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.
TObject.Init
1095
Description: Instantiates a new object of type TObject. It fills the instance up with Zero bytes.
For an example, see Free (1096)
Errors: None.
See also: TObject.Free (1096), TObject.Done (1097)
67.8.4
TObject.Free
67.8.5
TObject.Is_Object
1096
67.8.6
TObject.Done
Virtual
Visibility: default
Description: Done, the destructor of TObject does nothing. It is mainly intended to be used in the TObject.Free
(1096) method.
The destructore Done does not free the memory occupied by the object.
Errors: None.
See also: TObject.Free (1096), TObject.Init (1095)
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 .
67.9
TPoint
67.9.1
Description
67.10
TRect
67.10.1
Description
67.10.2
Page
1102
1099
1099
1098
1099
1102
1100
1101
1100
Method overview
Method
Assign
Contains
Copy
Empty
Equals
Grow
Intersect
Move
Union
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.
1097
67.10.3
TRect.Empty
1098
67.10.4
TRect.Equals
67.10.5
TRect.Contains
67.10.6
TRect.Copy
1099
67.10.7
TRect.Union
67.10.8
TRect.Intersect
1100
Errors: None.
See also: TRect.Union (1100)
Listing: ./objectex/ex4.pp
Program ex4 ;
{ Program t o demonstrate TRect . I n t e r s e c t }
Uses o b j e c t s ;
67.10.9
TRect.Move
1101
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 .
67.10.10
TRect.Grow
67.10.11
TRect.Assign
67.11
TResourceCollection
67.11.1
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.
67.11.2
Page
1104
1104
1103
1104
Method overview
Method
FreeItem
GetItem
KeyOf
PutItem
67.11.3
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.
TResourceCollection.KeyOf
Virtual
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 (1124)
1103
67.11.4
TResourceCollection.GetItem
Virtual
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 (1075) method.
Errors: Errors returned are those by TStream.Read (1122)
See also: TCollection.Load (1075), TStream.Read (1122)
67.11.5
TResourceCollection.FreeItem
Virtual
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 (1084)
67.11.6
TResourceCollection.PutItem
Virtual
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 (1088) method.
Errors: Errors returned are those by TStream.Write (1122).
See also: TCollection.Store (1088)
67.12
67.12.1
TResourceFile
Description
1104
67.12.2
Page
1105
1107
1105
1106
1106
1105
1106
1107
1106
Method overview
Method
Count
Delete
Done
Flush
Get
Init
KeyAt
Put
SwitchTo
67.12.3
Description
Number of resources in the file
Delete a resource from the file
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.
TResourceFile.Init
67.12.4
TResourceFile.Done
Virtual
Visibility: default
Description: Done cleans up the instance of the TResourceFile Object. If Stream was specified at initialization, then Stream is disposed of too.
Errors: None.
See also: TResourceFile.Init (1105)
67.12.5
TResourceFile.Count
67.12.6
TResourceFile.KeyAt
67.12.7
TResourceFile.Get
67.12.8
TResourceFile.SwitchTo
67.12.9
TResourceFile.Flush
67.12.10
TResourceFile.Delete
67.12.11
TResourceFile.Put
67.13
67.13.1
TSortedCollection
Description
1107
67.13.2
Method overview
Page
1109
1109
1108
1111
1108
1108
Method
Compare
IndexOf
Init
Insert
KeyOf
Load
1110
1112
Search
Store
67.13.3
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.
TSortedCollection.Init
67.13.4
TSortedCollection.Load
67.13.5
TSortedCollection.KeyOf
1108
Virtual
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 (1109), TSortedCollection.Compare (1109)
67.13.6
TSortedCollection.IndexOf
Virtual
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 (1076)
Errors: None.
See also: TSortedCollection.Search (1110), TSortedCollection.Compare (1109)
67.13.7
TSortedCollection.Compare
Virtual
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 (1110) method and in the Insert (1111)
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 (1109), TSortedCollection.Search (1110)
Listing: ./objectex/mysortc.pp
1109
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 .
67.13.8
TSortedCollection.Search
Virtual
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 (1109) function to implement this search.
If the item is found, Search returns True, otherwise False is returned.
Errors: None.
See also: TCollection.IndexOf (1076)
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 ) ;
1110
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 ) ) ;
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 .
67.13.9
TSortedCollection.Insert
Virtual
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 (1087), 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 (1087)
Listing: ./objectex/ex35.pp
1111
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 .
67.13.10
TSortedCollection.Store
1112
67.14
TStrCollection
67.14.1
Description
The TStrCollection object manages a sorted collection of null-terminated strings (pchar strings).
To this end, it overrides the Compare (1109) method of TSortedCollection, and it introduces
methods to read/write strings from a stream.
67.14.2
Page
1113
1114
1114
1114
Method overview
Method
Compare
FreeItem
GetItem
PutItem
67.14.3
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.
TStrCollection.Compare
Virtual
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 first string is alphabetically earlier than the second string.
0if the two strings are equal.
1if the first string is alphabetically later than the second string.
Errors: None.
See also: TSortedCollection.Compare (1109)
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 ;
begin
Randomize ;
C: =New( P S t r 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 ) ;
1113
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 .
67.14.4
, I );
TStrCollection.GetItem
Virtual
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 (1116).
See also: TStrCollection.PutItem (1114)
67.14.5
TStrCollection.FreeItem
Virtual
Visibility: default
Description: TStrCollection overrides FreeItem so that the string pointed to by Item is disposed from
memory.
Errors: None.
See also: TCollection.FreeItem (1084)
67.14.6
TStrCollection.PutItem
Virtual
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 (1121).
See also: TStrCollection.GetItem (1114)
1114
67.15
TStream
67.15.1
Description
The TStream object is the ancestor for all streaming objects, i.e. objects that have the capability to
store and retrieve data.
It defines 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 (1061), TDosStream (1088), TMemoryStream (1093)
67.15.2
Page
1119
1123
1121
1120
1115
1117
1117
1115
1119
1120
1122
1118
1119
1121
1116
1121
1120
1122
1121
Method overview
Method
Close
CopyFrom
Error
Flush
Get
GetPos
GetSize
Init
Open
Put
Read
ReadStr
Reset
Seek
StrRead
StrWrite
Truncate
Write
WriteStr
67.15.3
Description
Close the stream
Copy data from another stream.
Set stream status
Flush the stream data from the buffer, if any.
Read an object definition 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.
TStream.Init
67.15.4
TStream.Get
1115
Description: Get reads an object definition from a stream, and returns a pointer to an instance of this object.
Errors: On error, TStream.Status (??) is set, and NIL is returned.
See also: TStream.Put (1120)
Listing: ./objectex/ex9.pp
Program ex9 ;
{ Program t o demonstrate TStream . Get and TStream . Put }
Uses Objects , MyObject ;
{ 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 }
67.15.5
TStream.StrRead
1116
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 .
67.15.6
TStream.GetPos
Virtual
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 (1121), TStream.GetSize (1117)
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 .
67.15.7
TStream.GetSize
Virtual
1117
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 (1121), TStream.GetPos (1117)
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 .
67.15.8
TStream.ReadStr
1118
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 .
67.15.9
TStream.Open
Virtual
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 (1092).
Errors: None.
See also: TStream.Close (1119), TStream.Reset (1119)
67.15.10
TStream.Close
Virtual
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 (1092).
Errors: None.
See also: TStream.Open (1119), TStream.Reset (1119)
67.15.11
TStream.Reset
67.15.12
TStream.Flush
Virtual
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 (1071).
Errors: None.
See also: TStream.Truncate (1120)
67.15.13
TStream.Truncate
Virtual
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 file position.
For an example, see TDosStream.Truncate (1090).
Errors: None.
See also: TStream.Seek (1121)
67.15.14
TStream.Put
1120
67.15.15
TStream.StrWrite
67.15.16
TStream.WriteStr
67.15.17
TStream.Seek
Virtual
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 first byte of the stream)
For an example, see TDosStream.Seek (1091).
Errors: If Pos is larger than the stream size, Status is set to StSeekError.
See also: TStream.GetPos (1117), TStream.GetSize (1117)
67.15.18
TStream.Error
Virtual
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.
1121
67.15.19
TStream.Read
Virtual
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 (1122), TStream.ReadStr (1118), TStream.StrRead (1116)
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 .
67.15.20
, I );
TStream.Write
Virtual
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 (1122).
Errors: No checking is done to see if Buf actually contains Count bytes.
See also: TStream.Read (1122), TStream.WriteStr (1121), TStream.StrWrite (1121)
1122
67.15.21
TStream.CopyFrom
67.16
67.16.1
TStringCollection
Description
The TStringCollection object manages a sorted collection of pascal strings. To this end, it
overrides the Compare (1109) method of TSortedCollection, and it introduces methods to
read/write strings from a stream.
1123
67.16.2
Page
1124
1125
1124
1125
Method overview
Method
Compare
FreeItem
GetItem
PutItem
67.16.3
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.
TStringCollection.GetItem
Virtual
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 (1118).
See also: TStringCollection.PutItem (1125)
67.16.4
TStringCollection.Compare
Virtual
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 first string is alphabetically earlier than the second string.
0if the two strings are equal.
1if the first string is alphabetically later than the second string.
Errors: None.
See also: TSortedCollection.Compare (1109)
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 ;
1124
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 .
67.16.5
TStringCollection.FreeItem
Virtual
Visibility: default
Description: TStringCollection overrides FreeItem so that the string pointed to by Item is disposed
from memory.
Errors: None.
See also: TCollection.FreeItem (1084)
67.16.6
TStringCollection.PutItem
Virtual
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 (1121).
See also: TStringCollection.GetItem (1124)
67.17
67.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 (1068) function, you cannot register the TStrListMaker object.
1125
67.17.2
Page
1126
1126
1126
Method overview
Method
Done
Get
Load
67.17.3
Description
Clean up the instance
Return a string by key name
Load stringlist from stream.
TStringList.Load
67.17.4
TStringList.Done
Virtual
Visibility: default
Description: The Done destructor frees the memory occupied by the string descriptions, and destroys the object.
Errors: None.
See also: Load (1126), TObject.Done (1097)
67.17.5
TStringList.Get
1126
67.18
TStrListMaker
67.18.1
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 (1068) function, you
cannot register the TStringList object.
67.18.2
Page
1127
1127
1127
1128
Method overview
Method
Done
Init
Put
Store
67.18.3
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.
TStrListMaker.Init
67.18.4
TStrListMaker.Done
Virtual
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 (1097), TStrListMaker.Init (1127)
67.18.5
TStrListMaker.Put
1127
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 (1128) method.
Errors: None.
See also: TStrListMaker.Store (1128)
67.18.6
TStrListMaker.Store
67.19
TUnSortedStrCollection
67.19.1
Description
The TUnSortedStrCollection object manages an unsorted list of strings. To this end, it overrides the TSortedCollection.Insert (1111) method to add strings at the end of the collection, rather
than in the alphabetically correct position.
Take care, the Search (1110) and IndexOf (1076) methods will not work on an unsorted string collection.
67.19.2
Page
1128
Method overview
Method
Insert
67.19.3
Description
Insert a new string in the collection.
TUnSortedStrCollection.Insert
Virtual
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 (1082)
Listing: ./objectex/ex39.pp
1128
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 .
1129
Chapter 68
Overview
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 redefines 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.
68.2
68.2.1
MaxInt = MaxLongint
Maximum value for Integer (1130) type.
68.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 (1130)
PInteger = ^Integer
Pointer to Integer (1130) type.
PIntegerArray = ^IntegerArray
Pointer to TIntegerArray (1131) type.
1130
1131
Chapter 69
Overview
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.
69.2
69.2.1
port : tport
Default instance of type TPort (1133). Do not free. This variable is initialized in the unit initialization
code, and freed at finalization.
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 defined as a variable of type tport
portb : tport
Default instance of type TPort (1133). Do not free. This variable is initialized in the unit initialization
code, and freed at finalization.
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 defined as a variable of type tport
1132
portl : tportl
Default instance of type TPortL (1134). Do not free. This variable is initialized in the unit initialization code, and freed at finalization.
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 defined as a variable of type tport
portw : tportw
Default instance of type TPortW (1134). Do not free. This variable is initialized in the unit initialization code, and freed at finalization.
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 defined as a variable of type tport
69.3
69.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 (1132), TPortW (1134), TPortL (1134)
69.3.2
Page
1133
69.3.3
Property overview
Properties
pp
Access
rw
Description
Access integer-sized port by port number
tport.pp
1133
69.4
69.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 (1133), TPort (1133), TPortL (1134)
69.4.2
Page
1134
69.4.3
Property overview
Properties
pp
Access
rw
Description
Access Longint-sized port by port number
tportl.pp
69.5
69.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 (1133), TPort (1133), TPortL (1134)
69.5.2
Page
1134
69.5.3
Property overview
Properties
pp
Access
rw
Description
Access word-sized port by port number
tportw.pp
1134
Chapter 70
Overview
This chapter describes the printer unit for Free Pascal. It was written for DOS by Florian Klaempfl,
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 all supported systems, although there are minor differences on Linux and UNIX.
70.2
70.2.1
Lst : text
Lst is the standard printing device.
On Linux, Lst is set up using AssignLst(/tmp/PID.lst).
70.3
70.3.1
70.3.2
InitPrinter
70.3.3
IsLstAvailable
1136
Chapter 71
Overview
sharemem implements a shared memory manager. Including this unit will replace the standard
memory manager with a memory manager which uses shared memory. This means the memory
allocated by this unit can be managed by a program and a DLL if they both use the shared memory
manager: it allows, amongst other things, to pass ansistrings or unicode strings from a program to a
DLL and vice versa.
This unit does not implement any routines: all actions to replace the memory manager are performed
in the initialization section of the unit. The unit should be placed as the first unit in a program or
DLLs uses section, memory corruption may occur if the unit is not placed first.
This unit requires the fpcmemdll.dll library to be distributed with both program and dll that use this
unit. This DLL is distributed with the windows Free Pascal distribution.
1137
Chapter 72
Used units
Table 72.1: Used units by unit Sockets
Name
BaseUnix
System
unixtype
72.2
Page
113
1224
1784
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 Klaempfl.
72.3
72.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
1138
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
1139
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 specified
AF_WANPIPE = 25
Address family: Wanpipe API Sockets
1140
AF_X25 = 9
Address family Reserved for X.25 project
EsockEACCESS = ESysEAcces
Access forbidden error
EsockEBADF = EsysEBADF
Alias: bad file descriptor
EsockEFAULT = EsysEFAULT
Alias: an error occurred
EsockEINTR = EsysEINTR
Alias : operation interrupted
EsockEINVAL = EsysEINVAL
Alias: Invalid value specified
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
1141
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.
1142
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.
1143
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 ?
1144
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.
1145
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
1146
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
1147
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 ?
1148
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
1149
MCAST_MSFILTER = 48
Undocumented ?
MCAST_UNBLOCK_SOURCE = 44
unblock from given group
MSG_CONFIRM = $0800
Send flags: Conform connection
MSG_CTRUNC = $0008
Receive flags: Control Data was discarded (buffer too small)
MSG_DONTROUTE = $0004
Send flags: dont use gateway
MSG_DONTWAIT = $0040
Receive flags: Non-blocking operation request.
MSG_EOF = MSG_FIN
Alias for MSG_FIN
MSG_EOR = $0080
Receive flags: End of record
MSG_ERRQUERE = $2000
Receive flags: ?
MSG_FIN = $0200
Receive flags: ?
MSG_MORE = $8000
Receive flags: ?
MSG_NOSIGNAL = $4000
Receive flags: Suppress SIG_PIPE signal.
MSG_OOB = $0001
Receive flags: receive out-of-band data.
1150
MSG_PEEK = $0002
Receive flags: peek at data, dont remove from buffer.
MSG_PROXY = $0010
Receive flags: ?
MSG_RST = $1000
Receive flags: ?
MSG_SYN = $0400
Receive flags: ?
MSG_TRUNC = $0020
Receive flags: packet Data was discarded (buffer too small)
MSG_TRYHARD = MSG_DONTROUTE
Receive flags: ?
MSG_WAITALL = $0100
Receive flags: 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
1151
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
1152
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
1153
PF_UNSPEC = AF_UNSPEC
Protocol family: Unspecified
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 (1164) 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
1154
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 specifiable 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: ?
1155
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: ?
1156
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
1157
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 flag
TCP_MAXSEG = 2
Get/Set Maximum segment size
TCP_MD5SIG = 14
Get/Set TCP MD5 signature option
TCP_NODELAY = 1
Get/Set No delay flag: 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
1158
UDP_ENCAP = 100
Get/Set UDP encapsulation flag 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
72.3.2
Types
This record is used in the fpsetsockopt (1174) call to specify linger options.
PIn6Addr = pin6_addr
Pointer to in6_addr (1159) type.
pin6_addr = ^in6_addr
Pointer to Tin6_addr (1162)
PInAddr = pin_addr
Alias for pin_addr (1160)
PInetSockAddr = psockaddr_in
Pointer to sockaddr_in (1161)
PInetSockAddr6 = psockaddr_in6
Pointer to sockaddr_in6 (1161) type
pin_addr = ^in_addr
Pointer to in_addr (1160) record.
plinger = ^linger
Pointer to linger (1160) type.
psockaddr = ^sockaddr
Pointer to TSockAddr (1162)
psockaddr_in = ^sockaddr_in
Pointer to sockaddr_in (1161)
1160
psockaddr_in6 = ^sockaddr_in6
Pointer to sockaddr_in6 (1161)
psockaddr_un = ^sockaddr_un
Pointer to sockaddr_un (1162) type.
sa_family_t = cushort
Address family type
sockaddr = packed record
case Integer of
0: (
sa_family : sa_family_t;
sa_data : packed Array[0..13] of cuint8;
);
1: (
sin_family : sa_family_t;
sin_port : cushort;
sin_addr : in_addr;
sin_zero : packed Array[0..7] of cuint8;
);
end
sockaddr is used to store a general socket addres for the FPBind (1168), FPRecv (1172) and
FPSend (1173) calls.
sockaddr_in = packed record
sin_family : sa_family_t;
sin_port : cushort;
sin_addr : in_addr;
xpad : Array[0..7] of Char;
end
sockaddr_in is used to store a INET socket addres for the FPBind (1168), FPRecv (1172) and
FPSend (1173) calls.
sockaddr_in6 = packed record
sin6_family : sa_family_t;
sin6_port : cuint16;
sin6_flowinfo : cuint32;
sin6_addr : in6_addr;
sin6_scope_id : cuint32;
end
1161
sockaddr_un is used to store a UNIX socket addres for the FPBind (1168), FPRecv (1172) and
FPSend (1173) calls.
TIn6Addr = in6_addr
Alias for in6_addr (1159) type.
Tin6_addr = in6_addr
Alias for sockaddr_in6 (1161)
TInAddr = in_addr
Alias for in_addr (1160) record type.
TInetSockAddr = sockaddr_in
Alias for sockaddr_in (1161)
TInetSockAddr6 = sockaddr_in6
Alias for sockaddr_in6 (1161)
TIn_addr = in_addr
Alias for in_addr (1160) record type.
TLinger = linger
Alias for linger (1160)
TSockAddr = sockaddr
72.4
72.4.1
Visibility: default
Description: Accept accepts a connection from a socket Sock, which was listening for a connection. If a
connection is accepted, a file 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 fills 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 (1163) command, with the Text or File parameters are equivalent to subsequently calling the regular Accept (1163) function and the Sock2Text (1179) or Sock2File
(1179) 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:
ESockEBADF (1141)The socket descriptor is invalid.
ESockENOTSOCK (1141)The descriptor is not a socket.
SYS_EOPNOTSUPPThe socket type doesnt support the Listen operation.
ESockEFAULT (1141)Addr points outside your address space.
ESockEWOULDBLOCK (1141)The requested operation would block the process.
See also: FPListen (1172), Connect (1165), FPConnect (1169), FPBind (1168)
Listing: ./sockex/socksvr.pp
1163
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
:
:
:
:
:
string ;
string [ 2 5 5 ] ;
Longint ;
Text ;
TInetSockAddr ;
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 .
72.4.2
Bind
1164
Description: Bind is an alias for fpBind (1168) which binds to either a socket struct (Addr) or a string indicating
a unix socket file (unix socket).
This function is deprecated, use fpBind instead.
See also: FPBind (1168)
72.4.3
CloseSocket
72.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
Visibility: default
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 (1165) command with the Text or File arguments are equivalent to
subsequently calling the regular Connect function and the Sock2Text (1179) or Sock2File (1179)
functions. These functions return True if successfull, False otherwise.
The Connect function returns a file 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: FPListen (1172), FPBind (1168), Accept (1163), FPAccept (1167)
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
1165
}
uses Sockets ;
procedure P E r r o r ( const S : s t r i n g ) ;
begin
writeln (S, SocketError ) ;
halt (100);
end ;
Var
SAddr
Buffer
S
Sin , Sout
i
:
:
:
:
:
TInetSockAddr ;
string [ 2 5 5 ] ;
Longint ;
Text ;
integer ;
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/pfinger.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 ) ;
1166
72.4.5
fpaccept
1167
uses Sockets ;
Var
FromName
Buffer
S
Sin , Sout
SAddr
:
:
:
:
:
string ;
string [ 2 5 5 ] ;
Longint ;
Text ;
TInetSockAddr ;
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 .
72.4.6
fpbind
72.4.7
fpconnect
Var
SAddr
Buffer
S
Sin , Sout
i
:
:
:
:
:
TInetSockAddr ;
string [ 2 5 5 ] ;
Longint ;
Text ;
integer ;
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 : ) ;
1169
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/pfinger.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 .
72.4.8
fpgetpeername
1170
Description: fpGetPeerName returns the name of the entity connected to the specified 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 filled with the name, and Name
will be set to the length of Name.
Errors: Errors are reported in SocketError, and include the following:
ESockEBADF (1141)The socket descriptor is invalid.
ESockENOBUFS (1141)The system doesnt have enough buffers to perform the operation.
ESockENOTSOCK (1141)The descriptor is not a socket.
ESockEFAULT (1141)Addr points outside your address space.
ESockENOTCONN (1141)The socket isnt connected.
See also: fpConnect (1169), fpSocket (1175)
72.4.9
fpgetsockname
72.4.10
fpgetsockopt
1171
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:
ESockEBADF (1141)The socket descriptor is invalid.
ESockENOTSOCK (1141)The descriptor is not a socket.
ESockEFAULT (1141)OptVal points outside your address space.
See also: fpSetSockOpt (1174)
72.4.11
fplisten
72.4.12
fprecv
72.4.13
fprecvfrom
72.4.14
fpsend
1173
72.4.15
fpsendto
72.4.16
fpsetsockopt
72.4.17
fpshutdown
72.4.18
fpsocket
72.4.19
fpsocketpair
1175
72.4.20
HostAddrToStr
72.4.21
HostAddrToStr6
72.4.22
HostToNet
72.4.23
htonl
Overload
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 (1177), ntohl (1178), ntohs (1178)
1176
72.4.24
htons
72.4.25
NetAddrToStr
72.4.26
NetAddrToStr6
72.4.27
NetToHost
1177
72.4.28
NToHl
Overload
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 (1176), htons (1177), ntohs (1178)
72.4.29
NToHs
72.4.30
ShortHostToNet
72.4.31
ShortNetToHost
1178
72.4.32
Sock2File
72.4.33
Sock2Text
72.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.
72.4.35
Str2UnixSockAddr
1179
72.4.36
StrToHostAddr
72.4.37
StrToHostAddr6
72.4.38
StrToNetAddr
72.4.39
StrToNetAddr6
1180
Chapter 73
Overview
This chapter describes the STRINGS unit for Free Pascal. This unit is system independent, and
therefore works on all supported platforms.
73.2
73.2.1
73.2.2
strcat
1181
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 .
73.2.3
strcomp
73.2.4
strcopy
Overload
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 (1191), StrLCopy (1187), StrECopy (1183)
Listing: ./stringex/ex4.pp
1182
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 .
73.2.5
strdispose
73.2.6
strecopy
1183
73.2.7
strend
1184
else
Writeln ( A l l i s w e l l . . ) ;
end .
73.2.8
stricomp
73.2.9
stripos
1185
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 (1186), strpos (1192)
73.2.10
striscan
73.2.11
strlcat
1186
73.2.12
strlcomp
73.2.13
strlcopy
1187
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 .
73.2.14
, StrLCopy ( PP, P , 1 0 ) ) ;
strlen
73.2.15
strlicomp
1188
73.2.16
strlower
73.2.17
, StrUpper ( P2 ) ) ;
,P1 ) ;
strmove
1189
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 . ;
Var P2 : Pchar ;
begin
P2 : = S t r A l l o c ( StrLen ( P1 ) + 1 ) ;
StrMove ( P2 , P1 , StrLen ( P1 ) + 1 ) ; { P2 : = P1 }
W r i t e l n ( P2 = ,P2 ) ;
StrDispose ( P2 ) ;
end .
73.2.18
strnew
1190
73.2.19
strpas
73.2.20
strpcopy
1191
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 .
73.2.21
strpos
73.2.22
strriscan
1192
73.2.23
strrscan
73.2.24
strscan
73.2.25
strupper
1193
Chapter 74
Used units
Table 74.1: Used units by unit strutils
Name
System
sysutils
74.2
74.2.1
Page
1224
1476
74.2.2
Constants
74.2.3
Types
Explanation
Do not check correctness
Like rcsStrict but allow more than 3 consecutive identical letters.
Only accept correct roman numerals.
There is an typo error in the original Borland StrUtils unit. This type just refers to the correct
TStringSearchOption (1196) and is provided for compatibility only.
TStringSearchOption = (soDown,soMatchCase,soWholeWord)
Explanation
Search in down direction.
Match case
Search whole words only.
74.3
74.3.1
74.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 (1196)
1196
74.3.3
AnsiContainsStr
74.3.4
AnsiContainsText
74.3.5
AnsiEndsStr
74.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.
1197
Errors: None
See also: AnsiStartsText (1201), AnsiEndsStr (1197), AnsiIndexText (1198), AnsiContainsText (1197)
74.3.7
AnsiIndexStr
74.3.8
AnsiIndexText
74.3.9
AnsiLeftStr
1198
74.3.10
AnsiMatchStr
74.3.11
AnsiMatchText
74.3.12
AnsiMidStr
74.3.13
AnsiProperCase
Synopsis: Pretty-Print a string: make lowercase and capitalize first 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 first 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
(1195) can be used for this.
1199
74.3.14
AnsiReplaceStr
74.3.15
AnsiReplaceText
74.3.16
AnsiResemblesText
74.3.17
AnsiReverseString
74.3.18
AnsiRightStr
74.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 (1197), AnsiStartsStr (1201), AnsiIndexStr (1198), AnsiContainsStr (1197)
74.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 (1197), AnsiStartsStr (1201), AnsiIndexText (1198), AnsiContainsText (1197)
74.3.21
BinToHex
Description: BinToHex converts the byte values in BinValue to a string consisting of 2-charachter hexadecimal strings in HexValue. BufSize specifies 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 specified, an exception may follow.
See also: HexToBin (1208)
74.3.22
Copy2Space
Synopsis: Returns all characters in a string till the first space character (not included).
Declaration: function Copy2Space(const S: string) : string
Visibility: default
Description: Copy2Space determines the position of the first 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 (1202) with the space (ASCII code 32) as the symbol argument.
Errors: None.
See also: Copy2Symb (1202), Copy2SpaceDel (1202)
74.3.23
Copy2SpaceDel
Synopsis: Deletes and returns all characters in a string till the first space character (not included).
Declaration: function Copy2SpaceDel(var S: string) : string
Visibility: default
Description: Copy2SpaceDel determines the position of the first 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 (1203) with the space (ASCII code 32) as the symbol
argument.
Errors: None.
See also: Copy2SymbDel (1203), Copy2Space (1202)
74.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 first 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.
1202
Errors: None.
See also: Copy2Space (1202), Copy2SymbDel (1203)
74.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 first 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 (1202), Copy2Symb (1202)
74.3.26
Dec2Numb
74.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 (1219) function. The result is the soundex string corresponding
to AValue. .
Errors: None.
See also: SoundexInt (1219), DecodeSoundexWord (1204), Soundex (1218)
1203
74.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 (1220) function. The result is the soundex string corresponding
to AValue .
Errors: None.
See also: SoundexInt (1219), DecodeSoundexInt (1203), Soundex (1218)
74.3.29
DelChars
74.3.30
DelSpace
74.3.31
DelSpace1
1204
74.3.32
DupeString
74.3.33
ExtractDelimited
74.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 first 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 first non-delimiter character in S. If Pos is larger than the Length
of S, an empty string is returned.
The pre-defined constant StdWordDelims (1195) can be used for the Delims argument.
Errors: None.
See also: ExtractDelimited (1205), ExtractWord (1206), ExtractWordPos (1206)
1205
74.3.35
ExtractWord
74.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 defined
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 (1205), 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-defined constant StdWordDelims (1195) can be used for the WordDelims argument.
Errors: None.
See also: ExtractWord (1206), ExtractSubStr (1205), IsWordPresent (1210), WordCount (1222), WordPosition (1222)
74.3.37
FindPart
1206
Description: FindPart searches the string InputStr and returns the first string that matches the wildcards
specification 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 (1217)
74.3.38
GetCmdLineArg
74.3.39
Hex2Dec
1207
74.3.40
HexToBin
74.3.41
IfThen
74.3.42
IntToBin
Synopsis: Converts an integer to a binary string representation, inserting spaces at fixed 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 (1207), IntToRoman (1209)
1208
74.3.43
IntToRoman
74.3.44
IsEmptyStr
74.3.45
IsWild
1209
74.3.46
IsWordPresent
74.3.47
LeftBStr
74.3.48
LeftStr
1210
74.3.49
MidBStr
74.3.50
MidStr
Visibility: default
Description: MidStr returns a string containing the first 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 (1210), AnsiMidStr (1199), RightStr (1216), MidBStr (1211)
74.3.51
NPos
1211
74.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 (1207), Numb2USA (1212)
74.3.53
Numb2USA
74.3.54
PadCenter
74.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-justified on length Len.
Errors: None.
See also: PadLeft (1212), PadCenter (1212), AddChar (1196), AddCharR (1196)
1212
74.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-justified on length Len.
Errors: None.
See also: PadLeft (1212), PadCenter (1212), AddChar (1196), AddCharR (1196)
74.3.57
PosEx
Synopsis: Search for the occurrence 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 first 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 (1211), AnsiContainsText (1197), AnsiContainsStr (1197)
74.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 first 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 (1213), PosSetEx (1213), #rtl.system.pos (1394), RPosEx (1217)
74.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
1213
Visibility: default
Description: PosSetEx returns the position in s of the first 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 (1213), PosSet (1213), #rtl.system.pos (1394), RPosEx (1217)
74.3.60
RandomFrom
Overload
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 (1199), AnsiMatchText (1199)
74.3.61
Removeleadingchars
74.3.62
RemovePadChars
1214
74.3.63
RemoveTrailingChars
74.3.64
ReplaceStr
74.3.65
ReplaceText
74.3.66
ReverseString
1215
74.3.67
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 (1210), AnsiRightStr (1201), RightStr (1216), MidBStr (1211)
74.3.68
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
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 (1210), AnsiRightStr (1201), RightBStr (1216), MidStr (1211)
74.3.69
RomanToInt
1216
74.3.70
RomanToIntDef
74.3.71
RPos
74.3.72
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 (1217)
74.3.73
SearchBuf
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 (1196) specifies how the
search is conducted. It is a set of the following options:
Table 74.4:
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 (1195) is used to mark the boundaries of words.
The SelStart parameter is zero based.
Errors: Buflen must be the real length of the string, no checking on this is performed.
See also: FindPart (1206), ExtractWord (1206), ExtractWordPos (1206), ExtractSubStr (1205), IsWordPresent
(1210)
74.3.74
Soundex
74.3.75
SoundexCompare
Errors: None.
See also: Soundex (1218), SoundexInt (1219), SoundexProc (1219), SoundexWord (1220), SoundexSimilar
(1219)
74.3.76
SoundexInt
74.3.77
SoundexProc
74.3.78
SoundexSimilar
74.3.79
SoundexWord
74.3.80
StringsReplace
74.3.81
StuffString
1220
74.3.82
Tab2Space
74.3.83
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 (1214), but returns the resulting
string.
Errors: None.
See also: TrimLeft (1628), RemoveLeadingChars (1214), RemoveTrailingChars (1215), RemovePadChars
(1214), TrimSet (1221), TrimRightSet (1221)
74.3.84
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
Description: TrimLeftSet performs the same action as RemoveTrailingChars (1215), but returns the resulting
string.
Errors: None.
See also: TrimRight (1628), RemoveLeadingChars (1214), RemoveTrailingChars (1215), RemovePadChars
(1214), TrimSet (1221), TrimLeftSet (1221)
74.3.85
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 (1214), but returns the resulting string.
Errors: None.
See also: Trim (1627), RemoveLeadingChars (1214), RemoveTrailingChars (1215), RemovePadChars (1214),
TrimRightSet (1221), TrimLeftSet (1221)
1221
74.3.86
TryRomanToInt
74.3.87
WordCount
74.3.88
WordPosition
1222
74.3.89
XorDecode
74.3.90
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 (1223) function will result in
the original Source string.
This function can be used e.g. to trivially encode a password in a configuration file.
Errors: None.
See also: XorDecode (1223), XorString (1223), Hex2Dec (1207)
74.3.91
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 (1223) 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 (1223), XorDecode (1223)
1223
Chapter 75
Overview
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-defined constants and variables are listed in the first section. The second section contains
an overview of all functions, grouped by functionality, and the last section contains the supported
functions and procedures.
75.2
The system unit works with Short-, Ansi-, and UnicodeString routines for all string related operations.
Ansistrings are code-page aware, which means that code page information is associated with them.
For most routines, the support for converting these code pages is natural. For some routines, care
must be taken when converting from codepage-aware strings to widestring.
The codepage conversion support is influenced by the following variables:
Table 75.1:
Name
DefaultSystemCodePage (1289)
DefaultUnicodeCodePage (1289)
DefaultFileSystemCodePage (1288)
DefaultRTLFileSystemCodePage (1288)
Description
Actual code page to use when CP_ACP (1230) is encountered
Code page for new unicode strings
Codepage to use when sending strings to single-byte OS filesystem routines.
Codepage to use when receiving strings from single-byte OS filesystem routines.
The windows code page identifiers are used. There are 3 special codepage identifiers:
1224
Table 75.2:
Name
CP_ACP (1230)
CP_OEMCP (1230)
CP_NONE (1230)
DefaultRTLFileSystemCodePage (1288)
Description
Currently set default syststem cpdepage
OEM (console) code page (only on windows)
Indicates absence of code page information for a string
Description
Return lowercase version of a string.
Convert a string to all uppercase.
Return the current directory
Create a new directory.
Change current working directory.
Remove directory when empty.
Assign a name to a file
Delete a file from disk
Rename file on disk
Read from a text file into variable
Read from a text file into variable and goto next line
Write variable to a text file
Write variable to a text file and append newline
Read variables from a string
Write variables to a string
Insert one string in another.
Copy part of a string.
Delete part of a string.
Set length of a string and copy buffer.
75.3
Miscellaneous functions
1225
Table 75.4:
Name
Assert (1296)
Break (1319)
Continue (1330)
Exclude (1344)
Exit (1345)
Include (1367)
LongJmp (1385)
Ord (1392)
Pred (1396)
SetJmp (1416)
SizeOf (1423)
Succ (1431)
75.4
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
75.5
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
String handling
1226
Table 75.6:
Name
BinStr (1317)
Chr (1323)
Concat (1329)
Copy (1331)
Delete (1334)
HexStr (1364)
Insert (1374)
Length (1380)
Lowercase (1386)
OctStr (1390)
Pos (1394)
SetLength (1417)
SetString (1419)
Str (1427)
StringOfChar (1428)
Upcase (1442)
Val (1445)
75.6
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
Mathematical routines
Description
Calculate absolute value
Calculate inverse tangent
Calculate cosine of angle
Decrease value of variable
Exponentiate
Return fractional part of floating point value
Return high byte/word of value
Increase value of variable
Calculate integer part of floating point value
Calculate logarithm
Return low byte/word of value
Is a value odd or even ?
Return the value of pi
Generate random number
Initialize random number generator
Round floating 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 floating point value
1227
75.7
75.8
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 first 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
1228
Table 75.9:
Name
Append (1295)
Assign (1296)
Blockread (1318)
Blockwrite (1319)
Close (1324)
Eof (1341)
Eoln (1342)
Erase (1343)
Filepos (1347)
Filesize (1348)
Flush (1353)
IOresult (1377)
Read (1399)
Readln (1400)
Rename (1403)
Reset (1403)
Rewrite (1404)
Seek (1412)
SeekEof (1413)
SeekEoln (1413)
SetTextBuf (1419)
Truncate (1438)
Write (1448)
WriteLn (1449)
75.9
Description
Open a file in append mode
Assign a name to a file
Read data from a file into memory
Write data from memory to a file
Close a file
Check for end of file
Check for end of line
Delete file from disk
Position in file
Size of file
Write file buffers to disk
Return result of last file IO operation
Read from file into variable
Read from file into variable and goto next line
Rename file on disk
Open file for reading
Open file for writing
Set file position
Set file position to end of file
Set file position to end of line
Set size of file buffer
Truncate the file at position
Write variable to file
Write variable to file and append newline
The sytem unit handles errors by default by generating a run-time error, and halting the program with
an exit code equal to the run-time error number.
This behaviour changes when the SysUtils (1476) unit is used. In that case, all run-time errors are
converted to exceptions: most run-time errors have their own exception class.
If these exceptions are caught, the program code decides what to do with it. If the exception is not
caught, the program will exit through the default exception handler.
When the system unit documentation refers to run-time errors, the above should be kept in mind.
75.10
75.10.1
1229
AllFilesMask = *
AllFilesMask is the wildcard that can be used to return all files in a directory. Do not assume
that this is * or *.* based on the platform only. The actual value on DOS/Windows based systems
can be influenced by e.g. LFNSupport (1243).
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 = [\,/];
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 filenames (splitting filenames, extracting parts of the filename 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 filename. 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.
CP_ACP = 0
CP_ACP is the default Windows codepage identifier.
CP_ASCII = 20127
CP_ASCII is the Windows ASCII encoding codepage identifier.
CP_NONE = $FFFF
CP_NONE is used when no code page information is available.
CP_OEMCP = 1
CP_ACP is the default Windows OEM (MS-DOS) codepage identifier.
1230
CP_UTF16 = 1200
CP_UTF16 is the default Windows unicode codepage identifier (little endian).
CP_UTF16BE = 1201
CP_UTF16BE is the Windows unicode codepage identifier (big endian).
CP_UTF7 = 65000
CP_UTF7 is the Windows unicode 7-Bit encoding codepage identifier.
CP_UTF8 = 65001
CP_UTF8 is the Windows unicode 8-Bit encoding codepage identifier.
CtrlZMarksEOF : Boolean = False
CtrlZMarksEOF indicates whether on this system, an CTRL-Z character (ordinal 26) in a file
marks the end of the file. 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
(1278) type. It is initizliaed by the system unit, and is used to determine the default line ending when
writing to text files.
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 =
On systems that support driveletters, the DriveSeparator constant denotes the character that
separates the drive indicator from the directory part in a filename 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 : CodePointer = Nil
1231
1232
E_UNEXPECTED = ($8000FFFF)
Interface call result: Unexpected error
Filemode : Byte = 2
Default file mode for untyped files.
FileNameCasePreserving : Boolean = True
FileNameCasePreserving is True if case of letters in file and directory entries is preserved
and may be later retrieved exactly as supplied when creating or renaming these entries. Note that this
may depend on the filesystem: Unix operating systems that access a DOS or Windows partition will
have this constant set to true, but when writing to the DOS partition, all letters may be automatically
converted to uppercase.
This constant is part of a set of constants that describe the OS characteristics. These constants should
be used instead of hardcoding OS characteristics.
FileNameCaseSensitive : Boolean = True
FileNameCaseSensitive is True if case is important when using filenames on the current OS.
In this case, the OS will treat files with different cased names as different files. Note that this may
depend on the filesystem: 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.
filerecnamelength = 255
filerecnamelength is the maximum filename size for untyped files.
float_flag_denormal = exDenormalized
IEC/IEEE floating-point exception flag: ?
float_flag_divbyzero = exZeroDivide
IEC/IEEE floating-point exception flag: Division by zero error
float_flag_inexact = exPrecision
IEC/IEEE floating-point exception flag: ?
float_flag_invalid = exInvalidOp
IEC/IEEE floating-point exception flag: Invalid operation error
float_flag_overflow = exOverflow
IEC/IEEE floating-point exception flag: Overflow error
1233
float_flag_underflow = exUnderflow
IEC/IEEE floating-point exception flag: Underflow error
float_round_down = rmDown
Round down
float_round_nearest_even = rmNearest
Round to nearest even number
float_round_to_zero = rmTruncate
Round in the direction of zero (down for positive, up for negative)
float_round_up = rmUp
Round up
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
1234
fpc_in_aligned_x = 80
FPC compiler internal procedure index: aligned
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_box_x = 77
FPC compiler internal procedure index: box
fpc_in_break = 39
FPC compiler internal procedure index: break
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
1235
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
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_default_x = 76
FPC compiler internal procedure index: default
fpc_in_dispose_x = 47
FPC compiler internal procedure index: dispose
fpc_in_exclude_x_y = 38
FPC compiler internal procedure index: exclude
1236
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_fillchar_x
fpc_in_finalize_x = 45
FPC compiler internal procedure index: finalize
fpc_in_fma_double = 134
FPC compiler internal procedure index: fma (double)
fpc_in_fma_extended = 135
FPC compiler internal procedure index: fma (extended)
fpc_in_fma_float128 = 136
FPC compiler internal procedure index: fma (float 128)
fpc_in_fma_single = 133
FPC compiler internal procedure index: fma (single)
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
fpc_in_high_x = 28
FPC compiler internal procedure index: high
1237
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)
fpc_in_lo_qword = 106
FPC compiler internal procedure index: lo (qword)
1238
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
fpc_in_pi_real = 126
FPC internal compiler routine: in_pi_real
1239
fpc_in_popcnt_x = 79
FPC compiler internal procedure index: popcnt
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
1240
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_setstring_x_y_z = 81
FPC compiler internal procedure index: setstring
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
1241
fpc_in_succ_x = 31
FPC compiler internal procedure index: succ
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_unbox_x_y = 78
FPC compiler internal procedure index: unbox
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
1242
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
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.
1244
RaiseMaxFrameCount : LongInt = 16
Maximum number of frames to include in TExceptObject (1268)
RaiseProc : TExceptProc = Nil
Procedure to raise an exception.
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".
1245
RT_ICON = (3)
Constant identifying an icon resource
RT_MANIFEST = (24)
This constant can be used to specify a resource of type "Manifest".
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
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.
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 float
varempty = 0
Variant type: Empty variant
varerror = 10
Variant type: Error type
varint64 = 20
Variant type: Integer (64-Bit)
1248
varinteger = 3
Variant type: Integer (32-bit)
varlongword = 19
Variant type: Word (32 bit)
varnull = 1
Variant type: Null (1390) variant
varolestr = 8
Variant type: OLE string (widestring)
varqword = 21
Variant type: Word (64-bit)
varrecord = 36
Record variant type
varshortint = 16
Variant type: Shortint (16 bit)
varsingle = 4
Variant type: Single float
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.
1249
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 field of the variant record tvardata (1282).
varunknown = 13
Variant type: Unknown
varustrarg = $49
varustrarg denotes a unicode string argument in DispInvoke call. It will 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
field of the variant record tvardata (1282).
varvariant = 12
Variant type: Variant (arrays only)
varword = 18
Variant type: Word (16 bit)
varword64 = varqword
Variant type: Word (64-bit)
vmtAfterConstruction = vmtMethodStart + ((codepointer) * 5)
VMT Layout: ?
vmtAutoTable = vmtParent + ((pointer) * 7)
VMT layout: ?
vmtBeforeDestruction = vmtMethodStart + ((codepointer) * 6)
VMT Layout: ?
vmtClassName = vmtParent + (pointer)
VMT Layout: location of class name.
1250
vtVariant = 13
TVarRec type: Variant
vtWideChar = 9
TVarRec type: Widechar
vtWideString = 15
TVarRec type: WideString
75.10.2
Types
AnsiChar = Char
Alias for 1-byte sized char.
Byte = 0..255
An unsigned 8-bits integer
Cardinal = LongWord
An unsigned 32-bits integer.
Char = #0..#255
Char is the basic ANSI character type, with a range of [#0..#255].
CodePointer = Pointer
CodePointer is used in 8/16-bit targets to indicate pointers to code segments. On all other platforms this equals Pointer.
CodePtrInt = PtrInt
CodePtrInt is a signed integer with the same size as CodePointer (1254)
CodePtrUInt = PtrUInt
CodePtrUInt is an unsigned integer with the same size as CodePointer (1254)
DWord = LongWord
An unsigned 32-bits integer
EnumResLangProc = function(ModuleHandle: TFPResourceHMODULE;
ResourceType: PChar;ResourceName: PChar;
IDLanguage: Word;lParam: PtrInt) : LongBool
1254
EnumResNameProcs used in the EnumResourceLanguages (1340) call. It is called for all languages for a resource of the specified type and name, and is passed the ModuleHandle, ResourceName,
ResourceName and IDLanguage values for each language encountered for the specified resource. Additionally, the lParam parameter from the EnumResourceLanguages is passed unaltered.
EnumResNameProc = function(ModuleHandle: TFPResourceHMODULE;
ResourceType: PChar;ResourceName: PChar;
lParam: PtrInt) : LongBool
EnumResNameProcs used in the EnumResourceNames (1341) call. It is called for all resources of
the specified 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
EnumResTypeProc is used in the EnumResourceTypes (1341) 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.
FarPointer = Pointer
FarPointer is used in 8/16-bit targets to indicate far pointers (over segments). On all other platforms this equals Pointer.
FileRec = 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 TFileTextRecChar;
end
FileRec is the underlying type used in untyped files. It should be treated as opaque and never
manipulated directly.
HGLOBAL = PtrUInt
This is an opaque type.
HMODULE = PtrUInt
This is an opaque type.
HRESULT = LongInt
32-Bit signed integer.
1255
IInterface = IUnknown
IInterface is the basic interface from which all COM style interfaces descend.
Int16 = SmallInt
A signed 16-bits integer
Int32 = LongInt
A signed 32-bits integer
Int64 = -9223372036854775808..9223372036854775807
Int64 is a 64-bit, signed integer type, with range [-9223372036854775808..9223372036854775807].
Int8 = ShortInt
A signed 8-bits integer
Integer = SmallInt
The system unit defines Integer as a signed 16-bit integer. But when DELPHI or OBJFPC mode
are active, then the objpas unit redefines Integer as a 32-bit integer.
IntegerArray = Array[0..$effffff] of Integer
Generic array of integer.
IntPtr = PtrInt
A signed integer with the same size in bytes as pointer
jmp_buf = packed record
ebx : LongInt;
esi : LongInt;
edi : LongInt;
bp : Pointer;
sp : Pointer;
pc : Pointer;
end
1256
The base 32-bit unsigned type. See the reference manual for more details
MAKEINTRESOURCE = PChar
Alias for the PChar (1257) type.
NativeInt = PtrInt
NativeInt is defined 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 defined 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 (1257) type.
PAnsiString = ^AnsiString
Pointer to an ansistring type.
PBoolean = ^Boolean
Pointer to a Boolean type.
PByte = ^Byte
Pointer to byte (1254) type
pcalldesc = ^tcalldesc
Pointer to TCallDesc (1267) record.
PCardinal = ^Cardinal
Pointer to Cardinal (1254) 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 (1267)
PCodePointer = ^CodePointer
1257
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);
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 (1263) instead.
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 (1286) character.
PUCS4Char = ^UCS4Char
Pointer to UCS4Char (1286)
PUCS4CharArray = ^TUCS4CharArray
Pointer to array of UCS4Char (1286) characters.
pUInt16 = PWord
Pointer to UInt16 (1286) type
pUInt32 = PDWord
Pointer to UInt32 (1287) type
pUInt8 = PByte
Pointer to UInt8 (1287) type
PUintPtr = PPtrUInt
Pointer to UIntPtr (1287) type
PUnicodeChar = ^UnicodeChar
PUnicodeChar is a pointer to a unicode character, just like PChar is a pointer to a Char ansistring character.
1263
PUnicodeString = ^UnicodeString
PUnicodeString is a pointer to a UnicodeString string.
PUnknown = ^IUnknown
Untyped pointer
PUTF8String = ^UTF8String
Pointer to UTF8String (1287)
pvararray = ^tvararray
Pointer to TVarArray (1280) type.
pvararraybound = ^tvararraybound
Pointer to tvararraybound (1280) type.
pvararrayboundarray = ^tvararrayboundarray
Pointer to tvararrayboundarray (1281) type.
pvararraycoorarray = ^tvararraycoorarray
Pointer to tvararraycoorarray (1281) type.
pvardata = ^tvardata
Pointer to TVarData (1282) record.
PVariant = ^Variant
Pointer to Variant type.
pvariantmanager = ^tvariantmanager
Pointer to TVariantManager (1283) record.
PVarRec = ^TVarRec
Pointer to TVarRec (1285) type.
PVmt = ^TVmt
Pointer to TVMT (1286) record
PWideChar = ^WideChar
Pointer to WChar (1287).
1264
PWideString = ^WideString
Pointer to widestring type
PWord = ^Word
Pointer to word (1287) type
PWordBool = ^WordBool
Pointer to a WordBool type.
QWord = 0..18446744073709551615
QWord is a 64-bit, unsigned integer type, with range [0..18446744073709551615].
RawByteString = ansistring
RawByteString is a single-byte character string which does not have any codepage assigned it.
Assigning a single-byte character string to this kind of string will not change the codepage of the
string.
Real = Double
Alias for real type
real48 = Array[0..5] of Byte
TP compatible real type (6 bytes) definition
Shortint = -128..127
A signed 8-bits integer
SizeInt = LongInt
SizeInt is used to describe sizes of structures in FPC using a signed integer. The actual type of this
type depends on the architecture: its size reflects the maximum addressable memory on the current
architecture, thus it is 64-bit on 64-bit platforms, 32-bit on 32-bit platforms, and 16 bit on 16 bit
platforms.
SizeUInt = DWord
SizeUInt is used to describe sizes of structures in FPC using an unsigned integer. The actual type
of this type depends on the architecture: its size reflects the maximum addressable memory on the
current architecture, thus it is 64-bit on 64-bit platforms, 32-bit on 32-bit platforms, and 16 bit on 16
bit platforms.
Smallint = -32768..32767
A signed 16-bits integer
1265
TAbstractErrorProc = procedure
Abstract error handler procedural type.
TAllocateThreadVarsHandler = procedure
Threadvar allocation callback type for TThreadManager (1279).
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: CodePointer) : 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 (1279).
TBasicEventHandler = procedure(state: PEventState)
Generic callback type for handling eventstate in TThreadManager (1279).
TBasicEventWaitForHandler = function(timeout: Cardinal;
state: PEventState) : LongInt
Wait for basic event callback type for TThreadManager (1279).
TBeginThreadHandler = function(sa: Pointer;stacksize: PtrUInt;
ThreadFunction: TThreadFunc;p: pointer;
creationFlags: DWord;
var ThreadId: TThreadID) : TThreadID
Callback for thread start in TThreadManager (1279).
TBoundArray = Array of SizeInt
Dynamic array of integer.
1266
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 (1465).
TCriticalSectionHandler = procedure(var cs)
Generic callback type for critical section handling in TThreadManager (1279).
TCriticalSectionHandlerTryEnter = function(var cs) : LongInt
TCriticalSectionHandlerTryEnter is the function prototype for the TryEnterCriticalsection (1438) function, in the TThreadManager (1279) records TryEnterCriticalSection
field.
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 defined for Delphi compatibility. This type is deprecated, use TDateTime (1267) 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
1267
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
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: CodePointer;
Frame: Pointer)
Standard error handler procedural type.
TExceptObject = record
FObject : TObject;
Addr : CodePointer;
Next : PExceptObject;
refcount : LongInt;
Framecount : LongInt;
Frames : PCodePointer;
end
TExceptObject is the exception description record which is found on the exception stack.
1268
TextRec is the underlying type used in text files. It should be treated as opaque and never manipulated directly.
TFileTextRecChar = UnicodeChar
TFileTextRecChar is the type of character used in TextRec (1269) or FileRec (1255) file types.
It is an alias type, depending on platform and RTL compilation flags. No assumptions should be
made on the actual character type.
TFloatSpecial = (fsZero,fsNZero,fsDenormal,fsNDenormal,fsPositive,
fsNegative,fsInf,fsNInf,fsNaN,fsInvalidOp)
1269
Explanation
Denormal value
Infinity
Invalid operation
Not a number
Negative enormal value
Negative value
Negative infinity
Negative zero
Positive value
Zero
TFPCHeapStatus describes the state of the FPC heap manager. This is not equivalent to the
THeapStatus (1272) record defined by Delphi, which contains information not meaningful for the
FPC heap manager. The heap status can be retrieved by the GetFPCHeapStatus (1358) 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.
TFPUException = (exInvalidOp,exDenormalized,exZeroDivide,exOverflow,
exUnderflow,exPrecision)
1270
Explanation
Invalid operation error
Float overflow error
Precision error
Float underflow error
Division by zero error.
TFPUException describes what floating point errors raise exceptions. It has been moved here
from the Math unit.
TFPUExceptionMask = Set of TFPUException
TFPUExceptionMask is a set of TFPUException constants
TFPUPrecisionMode = (pmSingle,pmReserved,pmDouble,pmExtended)
Explanation
Double-type precision
Extended-type precision
?
Single-type precision
TFPUPrecisionMode describes the possible default precisions for the software Floating Point
math routines. It has been moved here from the math unit.
TFPURoundingMode = (rmNearest,rmDown,rmUp,rmTruncate)
Explanation
Round to biggest integer smaller than value.
Round to nearest integer
Cut off fractional part
Round to smallest integer larger than value
TFPURoundingMode enumerates the possible values for software floating point math rounding. It
has been moved here from the math unit.
TGetCurrentThreadIdHandler = function : TThreadID
Callback type for retrieving thread ID in TThreadManager (1279).
1271
THeapStatus is the record describing the current heap status. It is returned by the GetHeapStatus
(1358) call.
TInitThreadVarHandler = procedure(var offset: DWord;size: DWord)
Threadvar initialization callback type for TThreadManager (1279).
TInterfacedClass = Class of TInterfacedObject
1272
TInterfacedClass is a descendent of
tinterfaceentry = record
IID : PGuid;
VTable : Pointer;
IOffset : SizeUInt;
IIDStr : PShortString;
case Boolean of
True: (
IType : tinterfaceentrytype;
);
False: (
__pad_dummy : SizeInt;
);
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)
Explanation
Field value
Interface provided by a class field
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 : SizeUInt;
Entries : Array[0..0] of tinterfaceentry;
end
TMemoryManager = record
NeedLock : Boolean;
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 : CodePointer;
Data : Pointer;
end
TMethod describes a general method pointer, and is used in Run-Time Type Information handling.
TMsgStrTable = record
name : PShortString;
method : CodePointer;
end
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 (1279).
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 (1279).
TRTLEventHandlerTimeout = procedure(AEvent: PRTLEvent;timeout: LongInt)
TRTLEvent timeout handling type for TThreadManager (1279).
trtlmethod = procedure of object
1275
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 overflow error
Invalid (class) typecast error
Invalid operation error
Invalid pointer error
No error
Out of memory error
Overflow error
Privileged instruction error
Quit signal error
Range check error
Safecall (IDispInterface) error
Stack overflow error
Underflow 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 (1344) 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.
TSemaphoreDestroyHandler = procedure(const sem: Pointer)
1276
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.
TStandardCodePageEnum = (scpAnsi,scpConsoleInput,scpConsoleOutput,
scpFileSystemSingleByte)
Explanation
Ansi codepage (CP_ACP)
Console input codepage
Console output codepage
File system single byte codepage.
Record used to describe the string messages handled by a class. It consists of a count, followed by
an array of TMsgStrTable (1274) records.
TSystemCodePage = Word
TSystemCodePage is a type used to indicate code pages. It should be treated as an opaque type.
TTextBuf = TextBuf
1277
Explanation
Carriage-return (#13, Mac-OS style)
Carriage-return, line-feed (#13#30, Windows style)
Line-feed only (#10, unix style)
AllocateThreadVars : TAllocateThreadVarsHandler;
ReleaseThreadVars : TReleaseThreadVarsHandler;
BasicEventCreate : TBasicEventCreateHandler;
BasicEventDestroy : TBasicEventHandler;
BasicEventResetEvent : TBasicEventHandler;
BasicEventSetEvent : TBasicEventHandler;
BasiceventWaitFOr : TBasicEventWaitForHandler;
RTLEventCreate : TRTLCreateEventHandler;
RTLEventDestroy : TRTLEventHandler;
RTLEventSetEvent : TRTLEventHandler;
RTLEventResetEvent : TRTLEventHandler;
RTLEventWaitFor : TRTLEventHandler;
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 (1421)
procedure, and the current thread manager can be retrieved with the GetThreadManager (1360) 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 (1279).
TThreadSwitchHandler = procedure
Callback type for thread switch in TThreadManager (1279).
TTime = TDateTime
TTime is defined for Delphi compatibility. This type is deprecated, use TDateTime (1267) instead.
TUCS4CharArray = Array[0..$effffff] of UCS4Char
Array of UCS4Char (1286) characters.
TUnicodeStringManager = record
Wide2AnsiMoveProc : procedure(source: PWideChar;var dest: RawByteString;cp: TSystem
len: SizeInt);
Ansi2WideMoveProc : procedure(source: PChar;cp: TSystemCodePage;var dest: widestrin
len: SizeInt);
1279
tvararray is a record describing a variant array. It contains some general data, followed by a number of TVarArrayBound (1280) records equal to the number of dimensions in the array (dimcoun).
tvararraybound = record
elementcount : LongInt;
lowbound : LongInt;
end
);
varbyte: (
vbyte : Byte;
);
varword: (
vword : Word;
);
varlongword: (
vlongword : DWord;
);
varint64: (
vint64 : Int64;
);
varqword: (
vqword : QWord;
);
varword64: (
vword64 : QWord;
);
varstring: (
vstring : pointer;
);
varany: (
vany : pointer;
);
vararray: (
varray : pvararray;
);
varbyref: (
vpointer : pointer;
);
);
1: (
vlongs : Array[0..2] of LongInt;
);
);
1: (
vwords : Array[0..6] of Word;
);
2: (
vbytes : Array[0..13] of Byte;
);
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;
1282
opnot,opcmpeq,opcmpne,opcmplt,opcmple,opcmpgt,opcmpge,oppower)
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
case VType : SizeInt of
vtInteger: (
VInteger : LongInt;
);
vtBoolean: (
VBoolean : Boolean;
);
vtChar: (
VChar : Char;
);
vtWideChar: (
VWideChar : WideChar;
);
vtExtended: (
VExtended : PExtended;
);
vtString: (
VString : PShortString;
);
vtPointer: (
1284
VPointer : Pointer;
);
vtPChar: (
VPChar : PAnsiChar;
);
vtObject: (
VObject : TObject;
);
vtClass: (
VClass : TClass;
);
vtPWideChar: (
VPWideChar : PWideChar;
);
vtAnsiString: (
VAnsiString : Pointer;
);
vtCurrency: (
VCurrency : PCurrency;
);
vtVariant: (
VVariant : PVariant;
);
vtInterface: (
VInterface : Pointer;
);
vtWideString: (
VWideString : Pointer;
);
vtInt64: (
VInt64 : PInt64;
);
vtUnicodeString: (
VUnicodeString : Pointer;
);
vtQWord: (
VQWord : PQWord;
);
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;
1285
vParent : PVmt;
vClassName : PShortString;
vDynamicTable : Pointer;
vMethodTable : Pointer;
vFieldTable : Pointer;
vTypeInfo : Pointer;
vInitTable : Pointer;
vAutoTable : Pointer;
vIntfTable : pinterfacetable;
vMsgStrPtr : pstringmessagetable;
vDestroy : CodePointer;
vNewInstance : CodePointer;
vFreeInstance : CodePointer;
vSafeCallException : CodePointer;
vDefaultHandler : CodePointer;
vAfterConstruction : CodePointer;
vBeforeDestruction : CodePointer;
vDefaultHandlerStr : CodePointer;
vDispatch : CodePointer;
vDispatchStr : CodePointer;
vEquals : CodePointer;
vGetHashCode : CodePointer;
vToString : CodePointer;
end
TVMT is a record describing the VMT of a class. Its various fields 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 (1279).
TWideStringManager = TUnicodeStringManager
TWideStringManager contains the definition of the widestring manager.
UCS2Char = WideChar
UCS2 unicode character.
UCS4Char =
UCS unicode character (unsigned 32 bit word)
UCS4String = Array of UCS4Char
String of UCS4Char (1286) characters.
UInt16 = Word
An unsigned 16-bits integer
1286
UInt32 = Cardinal
An unsigned 32-bits integer
UInt64 = QWord
Unsigned 64-bit integer
UInt8 = Byte
An unsigned 8-bits integer
UIntPtr = PtrUInt
Alias for PtrUInt (1263) type for compatibility with later Delphi versions.
UnicodeChar = WideChar
UnicodeChar is a single character from a UnicodeString. It equals WideChar in all respects.
UnicodeString = UnicodeString
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.
UTF8String = ansistring
UTF-8 unicode (ansi) string.
ValReal = Extended
ValReal is an alias for the largest available floating 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 (1445) function.
ValUInt = Cardinal
Integer with the same size as the return code of the Val (1445) function.
WChar = WideChar
Wide char (16-bit sized char)
WideChar = #$0000..#$FFFF
This type is the base unit for all two byte character types, like UnicodeString (1287) and WideString
(1287)
WideString = WideString
Word = 0..65535
An unsigned 16-bits integer
1287
75.10.3
Variables
DefaultFileSystemCodePage : TSystemCodePage
DefaultFileSystemCodePage determines the code page to which file/path names are translated before they are passed to OS API calls, if the RTL uses a single byte OS API for this purpose
on the current platform.
This code page is also used for intermediate operations on file paths inside the RTL before making
OS API calls.
This variable does not exist in Delphi, and has been introduced in FPC to make it possible to change
the value of DefaultSystemCodePage without breaking RTL interfaces with the OS file system
API calls.
The initiali value of this variable depends on the platform:
Windows: UTF-8, because the RTL uses UTF-16 OS API calls (so no data is lost in intermediate operations).
OS X and iOS: UTF-8 (as defined by Apple)
Unix (excluding OS X and iOS): equals DefaultSystemCodePage (1289). This is because the
encoding of file names is undefined on Unix platforms: it is an untyped array of bytes that can
be interpreted in any way; Specifically, it is not guaranteed to be valid UTF-8.
Other platforms: same as DefaultSystemCodePage (1289).
The value of this variable may be changed using the SetMultiByteFileSystemCodePage (1418) procedure.
Remark: The Unix/OS X/iOS settings only apply in case the cwstring widestring manager is installed, otherwise DefaultFileSystemCodePage will have the same value as DefaultSystemCodePage
after program startup.
DefaultRTLFileSystemCodePage : TSystemCodePage
DefaultRTLFileSystemCodePage determines the code page to which file/path names are
translated before they are returned from RawByteString (1265) file/path RTL routines.
Examples include the file/path names returned by the RawbyteString versions of SysUtils.FindFirst
(1224) and GetDir (1357).
The main reason for its existence is to enable the RTL to provide backward compatibility with earlier
versions of FPC, as these always returned strings encoded in whatever the OS single byte API used
(normally DefaultSystemCodePage (1289)).
The initial value of this variable depends on the platform:
Windows: DefaultSystemCodePage, for backward compatibility.
OS X and iOS: UTF-8, for backward compatibility. It was already always UTF-8 in the past,
since thats what the OS file APIs returned, and the data was never converted.
Other Unixes: DefaultSystemCodePage, for the same reason as DefaultFileSystemCodePage (1288). Setting this to a different value than DefaultFileSystemCodePage
is a bad idea on these platforms, since any code page conversion can corrupt these strings as
their initial encoding is unknown.
Other platforms: same as DefaultSystemCodePage.
1288
The value of this variable can be set using the SetMultiByteRTLFileSystemCodePage (1418) call.
DefaultSystemCodePage : TSystemCodePage
DefaultSystemCodePage is used to determine how CP_ACP is interpreted; it is what the program considers to be the current system codepage.
It is initialized to the default system codepage.
On windows, this is the result of the GetACP operating call, which returns the Windows ANSI
code page.
On iOS, this is UTF-8
on other unixes this will be based on the currently set LANG or LC_CTYPE environment variables. Normally this is UTF-8, but that is not guaranteed to be the case.
For all other platforms it is set to CP_ACP, as these platforms currently do not support multiple
code pages, and are hardcoded to use their OS-specific code page in all cases.
The DefaultSystemCodePage value may be set using SetMultiByteConversionCodePage (1417).
That means that it is not a good idea to use its value to determine the real OS "default system code
page".
DefaultUnicodeCodePage : TSystemCodePage
DefaultUnicodeCodePage is the unicode code page for a new unicode string. On most platforms, this is CP_UTF16 (1231).
DispCallByIDProc : CodePointer
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.
ErrOutput : Text
ErrOutput is provided for Delphi compatibility.
ExitCode : LongInt;public name operatingsystem_result
Exit code for the program, will be communicated to the OS on exit.
FirstDotAtFileNameStartIsExtension : Boolean = False
1289
1291
75.11
75.11.1
75.11.2
{ r :=1.0 }
{ i :=21 }
AbstractError
75.11.3
AcquireExceptionObject
1292
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 (1402) 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 (1402)
75.11.4
add(variant,variant):variant
75.11.5
AddExitProc
75.11.6
Addr
1293
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 .
75.11.7
{ P points to i t s e l f }
{ P points to I }
{ P p o i n t s t o Zero }
Align
75.11.8
AllocMem
75.11.9
AnsiToUtf8
75.11.10
Append
75.11.11
arctan
1295
begin
R: = ArcTan ( 0 ) ;
R: = ArcTan ( 1 ) / p i ;
end .
75.11.12
{ R: = 0 }
{ R: = 0 . 2 5 }
ArrayStringToPPchar
75.11.13
Assert
75.11.14
Assign
Assign(out
Assign(out
Assign(out
Assign(out
Assign(out
f:
f:
f:
f:
f:
File;const
File;const
File;const
File;const
File;const
Name: ShortString)
p: PAnsiChar)
c: AnsiChar)
Name: UnicodeString)
Name: RawByteString)
1296
procedure
procedure
procedure
procedure
procedure
procedure
procedure
procedure
procedure
procedure
Assign(out
Assign(out
Assign(out
Assign(out
Assign(out
Assign(out
Assign(out
Assign(out
Assign(out
Assign(out
f:
f:
f:
f:
f:
t:
t:
t:
t:
t:
Visibility: default
Description: Assign assigns a name to F, which can be any file type. This call doesnt open the file, it just
assigns a name to a file variable, and marks the file as closed.
Errors: None.
See also: Reset (1403), Rewrite (1404), Append (1295)
Listing: ./refex/ex5.pp
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 .
75.11.15
assign(ansistring):olevariant
Synopsis:
Declaration: operator :=(const source: ansistring) : olevariant
Visibility: default
Description:
75.11.16
assign(ansistring):variant
Synopsis:
Declaration: operator :=(const source: ansistring) : variant
1297
Visibility: default
Description:
75.11.17
assign(Boolean):olevariant
Synopsis:
Declaration: operator :=(const source: Boolean) : olevariant
Visibility: default
Description:
75.11.18
assign(Boolean):variant
Synopsis:
Declaration: operator :=(const source: Boolean) : variant
Visibility: default
Description:
75.11.19
assign(Byte):olevariant
Synopsis:
Declaration: operator :=(const source: Byte) : olevariant
Visibility: default
Description:
75.11.20
assign(Byte):variant
Synopsis:
Declaration: operator :=(const source: Byte) : variant
Visibility: default
Description:
75.11.21
assign(Char):olevariant
Synopsis:
Declaration: operator :=(const source: Char) : olevariant
Visibility: default
Description:
1298
75.11.22
assign(Char):variant
Synopsis:
Declaration: operator :=(const source: Char) : variant
Visibility: default
Description:
75.11.23
assign(comp):olevariant
75.11.24
assign(comp):variant
75.11.25
assign(currency):olevariant
Synopsis:
Declaration: operator :=(const source: currency) : olevariant
Visibility: default
Description:
75.11.26
assign(currency):variant
Synopsis:
Declaration: operator :=(const source: currency) : variant
Visibility: default
Description:
75.11.27
assign(Double):olevariant
Synopsis:
Declaration: operator :=(const source: Double) : olevariant
Visibility: default
Description:
1299
75.11.28
assign(Double):variant
Synopsis:
Declaration: operator :=(const source: Double) : variant
Visibility: default
Description:
75.11.29
assign(DWord):olevariant
Synopsis:
Declaration: operator :=(const source: DWord) : olevariant
Visibility: default
Description:
75.11.30
assign(DWord):variant
Synopsis:
Declaration: operator :=(const source: DWord) : variant
Visibility: default
Description:
75.11.31
assign(extended):olevariant
75.11.32
assign(extended):variant
75.11.33
assign(Int64):olevariant
Synopsis:
Declaration: operator :=(const source: Int64) : olevariant
Visibility: default
Description:
1300
75.11.34
assign(Int64):variant
Synopsis:
Declaration: operator :=(const source: Int64) : variant
Visibility: default
Description:
75.11.35
assign(longbool):olevariant
Synopsis:
Declaration: operator :=(const source: longbool) : olevariant
Visibility: default
Description:
75.11.36
assign(longbool):variant
Synopsis:
Declaration: operator :=(const source: longbool) : variant
Visibility: default
Description:
75.11.37
assign(LongInt):olevariant
Synopsis:
Declaration: operator :=(const source: LongInt) : olevariant
Visibility: default
Description:
75.11.38
assign(LongInt):variant
Synopsis:
Declaration: operator :=(const source: LongInt) : variant
Visibility: default
Description:
75.11.39
assign(olevariant):ansistring
Synopsis:
Declaration: operator :=(const source: olevariant) : ansistring
Visibility: default
Description:
1301
75.11.40
assign(olevariant):Boolean
Synopsis:
Declaration: operator :=(const source: olevariant) : Boolean
Visibility: default
Description:
75.11.41
assign(olevariant):Byte
Synopsis:
Declaration: operator :=(const source: olevariant) : Byte
Visibility: default
Description:
75.11.42
assign(olevariant):Char
Synopsis:
Declaration: operator :=(const source: olevariant) : Char
Visibility: default
Description:
75.11.43
assign(olevariant):comp
75.11.44
assign(olevariant):currency
Synopsis:
Declaration: operator :=(const source: olevariant) : currency
Visibility: default
Description:
75.11.45
assign(olevariant):Double
Synopsis:
Declaration: operator :=(const source: olevariant) : Double
Visibility: default
Description:
1302
75.11.46
assign(olevariant):DWord
Synopsis:
Declaration: operator :=(const source: olevariant) : DWord
Visibility: default
Description:
75.11.47
assign(olevariant):extended
75.11.48
assign(olevariant):Int64
Synopsis:
Declaration: operator :=(const source: olevariant) : Int64
Visibility: default
Description:
75.11.49
assign(olevariant):longbool
Synopsis:
Declaration: operator :=(const source: olevariant) : longbool
Visibility: default
Description:
75.11.50
assign(olevariant):LongInt
Synopsis:
Declaration: operator :=(const source: olevariant) : LongInt
Visibility: default
Description:
75.11.51
assign(olevariant):QWord
Synopsis:
Declaration: operator :=(const source: olevariant) : QWord
Visibility: default
Description:
1303
75.11.52
assign(olevariant):Real
75.11.53
assign(olevariant):ShortInt
Synopsis:
Declaration: operator :=(const source: olevariant) : ShortInt
Visibility: default
Description:
75.11.54
assign(olevariant):shortstring
Synopsis:
Declaration: operator :=(const source: olevariant) : shortstring
Visibility: default
Description:
75.11.55
assign(olevariant):single
75.11.56
assign(olevariant):SmallInt
Synopsis:
Declaration: operator :=(const source: olevariant) : SmallInt
Visibility: default
Description:
75.11.57
assign(olevariant):TDateTime
Synopsis:
Declaration: operator :=(const source: olevariant) : TDateTime
Visibility: default
Description:
1304
75.11.58
assign(olevariant):TError
Synopsis:
Declaration: operator :=(const source: olevariant) : TError
Visibility: default
Description:
75.11.59
assign(olevariant):UnicodeString
75.11.60
assign(olevariant):variant
Synopsis:
Declaration: operator :=(const source: olevariant) : variant
Visibility: default
Description:
75.11.61
assign(olevariant):WideChar
Synopsis:
Declaration: operator :=(const source: olevariant) : WideChar
Visibility: default
Description:
75.11.62
assign(olevariant):widestring
Synopsis:
Declaration: operator :=(const source: olevariant) : widestring
Visibility: default
Description:
75.11.63
assign(olevariant):Word
Synopsis:
Declaration: operator :=(const source: olevariant) : Word
Visibility: default
Description:
1305
75.11.64
assign(olevariant):wordbool
Synopsis:
Declaration: operator :=(const source: olevariant) : wordbool
Visibility: default
Description:
75.11.65
assign(QWord):olevariant
Synopsis:
Declaration: operator :=(const source: QWord) : olevariant
Visibility: default
Description:
75.11.66
assign(QWord):variant
Synopsis:
Declaration: operator :=(const source: QWord) : variant
Visibility: default
Description:
75.11.67
assign(Real):olevariant
75.11.68
assign(Real):variant
75.11.69
assign(real48):Double
Synopsis:
Declaration: operator :=(b: real48) : Double
Visibility: default
Description:
75.11.70
assign(real48):extended
75.11.71
assign(ShortInt):olevariant
Synopsis:
Declaration: operator :=(const source: ShortInt) : olevariant
Visibility: default
Description:
75.11.72
assign(ShortInt):variant
Synopsis:
Declaration: operator :=(const source: ShortInt) : variant
Visibility: default
Description:
75.11.73
assign(shortstring):olevariant
Synopsis:
Declaration: operator :=(const source: shortstring) : olevariant
Visibility: default
Description:
75.11.74
assign(shortstring):variant
Synopsis:
Declaration: operator :=(const source: shortstring) : variant
Visibility: default
Description:
75.11.75
assign(single):olevariant
75.11.76
assign(single):variant
1307
75.11.77
assign(SmallInt):olevariant
Synopsis:
Declaration: operator :=(const source: SmallInt) : olevariant
Visibility: default
Description:
75.11.78
assign(SmallInt):variant
Synopsis:
Declaration: operator :=(const source: SmallInt) : variant
Visibility: default
Description:
75.11.79
assign(TDateTime):olevariant
Synopsis:
Declaration: operator :=(const source: TDateTime) : olevariant
Visibility: default
Description:
75.11.80
assign(TDateTime):variant
Synopsis:
Declaration: operator :=(const source: TDateTime) : variant
Visibility: default
Description:
75.11.81
assign(TError):olevariant
Synopsis:
Declaration: operator :=(const source: TError) : olevariant
Visibility: default
Description:
75.11.82
assign(TError):variant
Synopsis:
Declaration: operator :=(const source: TError) : variant
Visibility: default
Description:
1308
75.11.83
assign(UCS4String):variant
75.11.84
assign(UnicodeString):olevariant
75.11.85
assign(UnicodeString):variant
75.11.86
assign(UTF8String):variant
75.11.87
assign(variant):ansistring
Synopsis:
Declaration: operator :=(const source: variant) : ansistring
Visibility: default
Description:
75.11.88
assign(variant):Boolean
Synopsis:
Declaration: operator :=(const source: variant) : Boolean
Visibility: default
Description:
75.11.89
assign(variant):Byte
Synopsis:
Declaration: operator :=(const source: variant) : Byte
Visibility: default
Description:
1309
75.11.90
assign(variant):Char
Synopsis:
Declaration: operator :=(const source: variant) : Char
Visibility: default
Description:
75.11.91
assign(variant):comp
75.11.92
assign(variant):currency
Synopsis:
Declaration: operator :=(const source: variant) : currency
Visibility: default
Description:
75.11.93
assign(variant):Double
Synopsis:
Declaration: operator :=(const source: variant) : Double
Visibility: default
Description:
75.11.94
assign(variant):DWord
Synopsis:
Declaration: operator :=(const source: variant) : DWord
Visibility: default
Description:
75.11.95
assign(variant):extended
1310
75.11.96
assign(variant):Int64
Synopsis:
Declaration: operator :=(const source: variant) : Int64
Visibility: default
Description:
75.11.97
assign(variant):longbool
Synopsis:
Declaration: operator :=(const source: variant) : longbool
Visibility: default
Description:
75.11.98
assign(variant):LongInt
Synopsis:
Declaration: operator :=(const source: variant) : LongInt
Visibility: default
Description:
75.11.99
assign(variant):olevariant
Synopsis:
Declaration: operator :=(const source: variant) : olevariant
Visibility: default
Description:
75.11.100
assign(variant):QWord
Synopsis:
Declaration: operator :=(const source: variant) : QWord
Visibility: default
Description:
75.11.101
assign(variant):Real
1311
75.11.102
assign(variant):ShortInt
Synopsis:
Declaration: operator :=(const source: variant) : ShortInt
Visibility: default
Description:
75.11.103
assign(variant):shortstring
Synopsis:
Declaration: operator :=(const source: variant) : shortstring
Visibility: default
Description:
75.11.104
assign(variant):single
75.11.105
assign(variant):SmallInt
Synopsis:
Declaration: operator :=(const source: variant) : SmallInt
Visibility: default
Description:
75.11.106
assign(variant):TDateTime
Synopsis:
Declaration: operator :=(const source: variant) : TDateTime
Visibility: default
Description:
75.11.107
assign(variant):TError
Synopsis:
Declaration: operator :=(const source: variant) : TError
Visibility: default
Description:
1312
75.11.108
assign(variant):unicodestring
75.11.109
assign(variant):UTF8String
75.11.110
assign(variant):WideChar
Synopsis:
Declaration: operator :=(const source: variant) : WideChar
Visibility: default
Description:
75.11.111
assign(variant):widestring
Synopsis:
Declaration: operator :=(const source: variant) : widestring
Visibility: default
Description:
75.11.112
assign(variant):Word
Synopsis:
Declaration: operator :=(const source: variant) : Word
Visibility: default
Description:
75.11.113
assign(variant):wordbool
Synopsis:
Declaration: operator :=(const source: variant) : wordbool
Visibility: default
Description:
1313
75.11.114
assign(WideChar):olevariant
Synopsis:
Declaration: operator :=(const source: WideChar) : olevariant
Visibility: default
Description:
75.11.115
assign(WideChar):variant
Synopsis:
Declaration: operator :=(const source: WideChar) : variant
Visibility: default
Description:
75.11.116
assign(widestring):olevariant
Synopsis:
Declaration: operator :=(const source: widestring) : olevariant
Visibility: default
Description:
75.11.117
assign(widestring):variant
Synopsis:
Declaration: operator :=(const source: widestring) : variant
Visibility: default
Description:
75.11.118
assign(Word):olevariant
Synopsis:
Declaration: operator :=(const source: Word) : olevariant
Visibility: default
Description:
75.11.119
assign(Word):variant
Synopsis:
Declaration: operator :=(const source: Word) : variant
Visibility: default
Description:
1314
75.11.120
assign(wordbool):olevariant
Synopsis:
Declaration: operator :=(const source: wordbool) : olevariant
Visibility: default
Description:
75.11.121
assign(wordbool):variant
Synopsis:
Declaration: operator :=(const source: wordbool) : variant
Visibility: default
Description:
75.11.122
Assigned
1315
75.11.123
BasicEventCreate
75.11.124
basiceventdestroy
75.11.125
basiceventResetEvent
75.11.126
basiceventSetEvent
75.11.127
basiceventWaitFor
75.11.128
BeginThread
75.11.129
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
Visibility: default
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 (1382), NtoBE (1389), NtoLE (1390)
75.11.130
binStr
1317
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 (1427), Val (1445), HexStr (1364), OctStr (1390)
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 .
75.11.131
BlockRead
Visibility: default
Description: Blockread reads count or less records from file F. A record is a block of bytes with size specified
by the Rewrite (1404) or Reset (1403) statement. The result is placed in Buffer, which must contain
enough room for Count records. The function cannot read partial records. If Result is specified, it
contains the number of records actually read. If Result isnt specified, 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 (1319), Close (1324), Reset (1403), Assign (1296)
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 . }
1318
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 .
75.11.132
BlockWrite
Int64;
LongInt;
Cardinal;
Word;var Result: Word)
Word;
LongInt)
Visibility: default
Description: BlockWrite writes count records from buffer to the file F.A record is a block of bytes with
size specified by the Rewrite (1404) or Reset (1403) 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 (1318), Close (1324), Rewrite (1404), Assign (1296)
75.11.133
Break
1319
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 redefined.
Errors: None.
See also: Continue (1330), Exit (1345)
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 .
75.11.134
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 first set bit. The position is measured from the 0-th, rightmost bit.
See also: BsrByte (1321), BsfWord (1321), BsfDWord (1321), BsfQWord (1321)
1320
75.11.135
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 position 0 (rightmost position) , and returns the
index of the first set bit. The position is measured from the 0-th, rightmost bit.
See also: BsfByte (1320), BsfWord (1321), BsrDWord (1322), BsfQWord (1321)
75.11.136
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 position 0 (rightmost position) , and returns the
index of the first set bit. The position is measured from the 0-th, rightmost bit.
See also: BsfByte (1320), BsfWord (1321), BsfDWord (1321), BsrQWord (1322)
75.11.137
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 position 0 (rightmost position) , and returns the index
of the first set bit. The position is measured from the 0-th, rightmost bit.
See also: BsfByte (1320), BsrWord (1322), BsfDWord (1321), BsfQWord (1321)
75.11.138
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 first set bit. The position is measured from the 0-th, rightmost bit.
See also: BsfByte (1320), BsrWord (1322), BsrDWord (1322), BsrQWord (1322)
1321
75.11.139
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 first set bit. The position is measured from the 0-th, rightmost
bit.
See also: BsrByte (1321), BsrWord (1322), BsfDWord (1321), BsrQWord (1322)
75.11.140
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 first set bit. The position is measured from the 0-th, rightmost
bit.
See also: BsfByte (1320), BsfWord (1321), BsfDWord (1321), BsrQWord (1322)
75.11.141
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 first set bit. The position is measured from the 0-th, rightmost bit.
See also: BsrByte (1321), BsfWord (1321), BsrDWord (1322), BsrQWord (1322)
75.11.142
CaptureBacktrace
1322
75.11.143
chdir
75.11.144
, paramstr ( 1 ) ) ;
chr
1323
75.11.145
Close
75.11.146
CloseThread
75.11.147
CompareByte
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 first len bytes, and the first such byte is
smaller in buf1 than the byte at the same position in buf2.
0if the first len bytes in buf1 and buf2 are equal.
greater than 0if buf1 and buf2 contain different bytes in the first len bytes, and the first such
byte is larger in buf1 than the byte at the same position in buf2.
Errors: None.
See also: CompareChar (1325), CompareChar0 (1327), CompareWord (1328), CompareDWord (1327)
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 .
75.11.148
CompareChar
1326
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 ) ;
CheckNullPos ( H a l f A r r a y S i z e ) ;
CheckNullPos ( H a l f A r r a y S i z e + 1 ) ;
CheckNullPos ( 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 .
75.11.149
CompareChar0
75.11.150
CompareDWord
Errors: None.
See also: CompareChar (1325), CompareByte (1324), CompareWord (1328)
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 ;
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 .
75.11.151
CompareWord
0if the first len Words in buf1 and buf2 are equal.
1if buf1 and buf2 contain different Words in the first len Words, and the first such Word is larger
in buf1 than the Word at the same position in buf2.
Errors: None.
See also: CompareChar (1325), CompareByte (1324), CompareDWord (1327)
Listing: ./refex/ex102.pp
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 .
75.11.152
Concat
Errors: None.
See also: Copy (1331), Delete (1334), Insert (1374), Pos (1394), Length (1380)
Listing: ./refex/ex10.pp
Program Example10 ;
{ 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 .
75.11.153
Continue
1330
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 .
75.11.154
Copy
75.11.155
{ S: = 12
}
{ S: = 45
}
{ S: = 4 5 6 7 }
CopyArray
See also: InitializeArray (1373), FinalizeArray (1352), DynArraySize (1339), DynArrayClear (1338), DynArrayDim (1338), DynArrayBounds (1338)
75.11.156
cos
75.11.157
{ R:= 1 }
{ R: = 0 }
{ R: = 1 }
Cseg
1332
75.11.158
Dec
:
:
:
:
:
Integer ;
Longint ;
Word ;
Byte ;
ShortInt ;
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 .
75.11.159
{
{
{
{
{
i :=0
L:=0
W: = 1
B: = 6
Si : = 5
}
}
}
}
}
Default
1333
75.11.160
DefaultAnsi2UnicodeMove
75.11.161
DefaultAnsi2WideMove
75.11.162
DefaultUnicode2AnsiMove
75.11.163
Delete
Delete(var
Delete(var
Delete(var
Delete(var
s:
S:
S:
S:
Visibility: default
1334
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 (1331), Pos (1394), Insert (1374)
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 .
75.11.164
Dispose
1335
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 .
75.11.165
divide(variant,variant):variant
75.11.166
DoneCriticalsection
1336
75.11.167
DoneThread
75.11.168
Dseg
75.11.169
DumpExceptionBackTrace
1337
75.11.170
Dump_Stack
75.11.171
DynArrayBounds
75.11.172
DynArrayClear
75.11.173
DynArrayDim
1338
75.11.174
DynArrayIndex
75.11.175
DynArraySetLength
75.11.176
DynArraySize
75.11.177
EmptyMethod
75.11.178
EndThread
75.11.179
EnterCriticalsection
75.11.180
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
1340
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 specified resource type and module, or True if there are resources available.
Errors: None.
See also: EnumResourceTypes (1341), EnumResourceNames (1341), EnumResourceLanguages (1340)
75.11.181
EnumResourceNames
75.11.182
EnumResourceTypes
75.11.183
EOF
1341
Visibility: default
Description: Eof returns True if the file-pointer has reached the end of the file, or if the file is empty. In all
other cases Eof returns False. If no file F is specified, 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 file descriptor is not a real file (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 file 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.
See also: Eoln (1342), Assign (1296), Reset (1403), Rewrite (1404)
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 .
75.11.184
EOLn
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 .
75.11.185
equal(variant,variant):Boolean
75.11.186
Erase
1343
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 .
75.11.187
Error
75.11.188
Exclude
1344
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 ) ;
P r i n t S e t (SA ) ;
end .
75.11.189
Exit
1345
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
W r i t e l n ( The c o m p i l e r i s nuts , 1 i s n o t p o s i t i v e . )
else
W r i t e l n ( The c o m p i l e r i s n o t so bad , 1 seems t o be n e g a t i v e . ) ;
end .
75.11.190
exp
Synopsis: Exponentiate
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 (1382), Power (1395)
Listing: ./refex/ex22.pp
1346
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 .
75.11.191
Fail
75.11.192
FilePos
1347
Description: Filepos returns the current record position of the file-pointer in file F. It cannot be invoked with
a file of type Text. A compiler error will be generated if this is attempted. Untyped files have a
default record size of 128, if the second parameter to Reset (1403) isnt specified.
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 (1348)
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 ! }
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 .
75.11.193
FileSize
1348
75.11.194
FillByte
1349
75.11.195
FillChar
75.11.196
FillDWord
1350
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 .
75.11.197
FillQWord
75.11.198
FillWord
1351
75.11.199
Finalize
75.11.200
FinalizeArray
75.11.201
FindResource
1352
75.11.202
FindResourceEx
75.11.203
float_raise
75.11.204
Flush
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 .
75.11.205
FlushThread
75.11.206
FMADouble
75.11.207
FMAExtended
1354
75.11.208
FMASingle
75.11.209
fpc_dynarray_rangecheck
75.11.210
fpc_SarInt64
75.11.211
FPower10
75.11.212
frac
1355
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 .
75.11.213
Freemem
75.11.214
Freememory
1356
75.11.215
FreeResource
75.11.216
GetCPUCount
75.11.217
GetCurrentThreadId
75.11.218
getdir
1357
Errors: An error is returned under dos, if the drive requested isnt ready.
See also: Chdir (1323)
Listing: ./refex/ex29.pp
Program Example29 ;
{ Program t o demonstrate t h e G e t D i r f u n c t i o n . }
Var S : S t r i n g ;
begin
GetDir ( 0 , S ) ;
Writeln ( Current d i r e c t o r y i s :
end .
75.11.219
,S ) ;
GetFPCHeapStatus
75.11.220
GetHeapStatus
75.11.221
GetMem
1358
75.11.222
GetMemory
75.11.223
GetMemoryManager
75.11.224
GetProcessID
75.11.225
GetResourceManager
1359
75.11.226
GetTextCodePage
75.11.227
GetThreadID
75.11.228
GetThreadManager
75.11.229
GetUnicodeStringManager
75.11.230
GetVariantManager
75.11.231
GetWideStringManager
75.11.232
get_caller_addr
75.11.233
get_caller_frame
1361
75.11.234
get_caller_stackinfo
75.11.235
get_cmdline
75.11.236
get_frame
75.11.237
Get_pc_addr
1362
75.11.238
greaterthan(variant,variant):Boolean
75.11.239
greaterthanorequal(variant,variant):Boolean
75.11.240
halt
1363
75.11.241
hexStr
hexStr(Val:
hexStr(Val:
hexStr(Val:
hexStr(Val:
Visibility: default
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 (1427), Val (1445), BinStr (1317)
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 .
75.11.242
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
Visibility: default
Description: Hi returns the high nibble, 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. If the size is 1, the high
nibble is returned.
Errors: None
See also: Lo (1382)
Listing: ./refex/ex31.pp
1364
Program Example31 ;
{ Program t o demonstrate t h e Hi f u n c t i o n . }
var
L : Longint ;
W : Word ;
B : Byte ;
begin
L : = 1 Shl 1 6 ;
W: = 1 Shl 8 ;
B : = 1 Shl 4 ;
W r i t e l n ( Hi ( L ) ) ;
W r i t e l n ( Hi (W) ) ;
W r i t e l n ( Hi (B ) ) ;
end .
75.11.243
{
{
{
{
{
{
= $10000
= $100 }
= $10 }
Prints 1
Prints 1
Prints 1
}
}
}
High
1365
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 ;
begin
W r i t e l n ( TEnum goes from : , Ord (Low(TEnum ) ) , t o , Ord ( high (TEnum ) ) , . ) ;
W r i t e l n ( A
goes from : , Ord (Low(A ) ) , t o , Ord ( high (A ) ) , . ) ;
W r i t e l n ( TRange goes from : , Ord (Low( TRange ) ) , t o , Ord ( high ( TRange ) ) , . ) ;
W r i t e l n ( B
goes from : , Ord (Low(B ) ) , t o , Ord ( high (B ) ) , . ) ;
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 .
75.11.244
HINSTANCE
75.11.245
Inc
1366
(C) ;
(L,5);
( I , 3);
(W, 3 ) ;
( B, 1 0 0 ) ;
( SI , 3 ) ;
( CH, 1 ) ;
75.11.246
=
=
=
=
=
=
=
{
{
{
{
{
{
{
1;
1;
1;
1;
1;
1;
A ;
C: = 2
L:=6
I := 2
W: = 4
B: = 1 0 1
S i := 2
ch : = B
}
}
}
}
}
}
}
Include
75.11.247
IndexByte
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 (1368), IndexDWord (1369), IndexWord (1370), CompareByte (1324)
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 ;
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 .
75.11.248
IndexChar
1368
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 ) ;
end ;
end .
75.11.249
IndexChar0
75.11.250
IndexDWord
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
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 .
75.11.251
IndexQWord
75.11.252
Indexword
Errors: Buf and Len are not checked to see if they are valid values.
See also: IndexByte (1367), IndexDWord (1369), IndexChar (1368), CompareWord (1328)
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
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 .
75.11.253
InitCriticalSection
75.11.254
Initialize
1371
Description: Initialize is a compiler intrinsic: it initializes a memory area T for any kind of managed variable. Initializing means zeroeing out the memory area. In this sense it is close in functionality to
Default (1333), but Default requires an already initialized variable. It performs the opposite operation of finalize (1352), which should be used to clean up the memory block when it is no longer
needed.
The optional ACount parameter can be used to initialize an array. It then specifies the number of
elements in the array.
See also: finalize (1352), Default (1333), TypeInfo (1439)
Listing: ./refex/ex117.pp
{
T h i s example demonstrates t h e use o f t h e I n i t i a l i z e and F i n a l i z e f u n c t i o n s
used t o i n i t i a l i z e ( and c l e a n up ) any RTTIenabled data n o t a l l o c a t e d w i t h
New o r Create .
}
{ $mode o b j f p c }
{ $h+ } / / use a n s i s t r i n g s , t h e y need t o be i n i t i a l i z e d .
Type
PData = ^ TData ;
TData = record
S t r e e t , C i t y , Zip , Country , T e l : S t r i n g ;
StreetNumber : I n t e g e r ;
end ;
var
Data : PData ;
begin
/ / Do n o t use New .
GetMem( Data , SizeOf ( TData ) ) ;
Try
{ I n i t i a l i z e t h e s t r u c t u r e i n memory , u s i n g RunTime Type I n f o r m a t i o n }
I n i t i a l i z e ( Data ^ ) ;
{ Assign some s t r i n g data t o t h e a n s i s t r i n g c o n t e n t s .
Note t h a t t h i s o n l y works because t h e r e c o r d was zeroed o u t by I n i t i a l i z e }
Data ^ . S t r e e t : = Sesame S t r e e t ;
Data ^ . C i t y : = Heaven ;
Data ^ . Z i p : = 7777777 ;
Data ^ . Country : = Spain ;
Data ^ . StreetNumber : = 3 ;
Finally
{ Clean up t h e r e c o r d c o n t e n t s .
Again , t h e s t r u c t u r e o f t h e r e c o r d i s d e t e c t e d t h r o u g h
Runt i m e Type I n f o r m a t i o n }
F i n a l i z e ( Data ^ ) ;
FreeMem ( Data ) ;
end ;
end .
Listing: ./refex/ex118.pp
{
T h i s example demonstrates t h e use o f t h e I n i t i a l i z e and F i n a l i z e f u n c t i o n s
used t o i n i t i a l i z e ( and c l e a n up ) any RTTIenabled data n o t a l l o c a t e d w i t h
New o r Create .
1372
}
{ $mode o b j f p c }
{ $h+ } / / use a n s i s t r i n g s , t h e y need t o be i n i t i a l i z e d .
Type
PData = ^ TData ;
TData = record
S t r e e t , C i t y , Zip , Country , T e l : S t r i n g ;
StreetNumber : I n t e g e r ;
end ;
var
Data : PData ;
begin
/ / We use t h e f a c t t h a t a p o i n t e r i s a l s o usable as an a r r a y .
GetMem( Data , SizeOf ( TData ) 2 ) ;
Try
{ I n i t i a l i z e t h e s t r u c t u r e i n memory , u s i n g RunTime Type I n f o r m a t i o n }
I n i t i a l i z e ( Data ^ , 2 ) ;
{ Assign some s t r i n g data t o t h e a n s i s t r i n g c o n t e n t s .
Note t h a t t h i s o n l y works because t h e r e c o r d was zeroed o u t by I n i t i a l i z e }
Data [ 0 ] . S t r e e t : = Sesame S t r e e t ;
Data [ 0 ] . C i t y : = Heaven ;
Data [ 0 ] . Z i p : = 7777777 ;
Data [ 0 ] . Country : = Spain ;
Data [ 0 ] . StreetNumber : = 3 ;
/ / Second , w e l l known s t r e e t
Data [ 1 ] . S t r e e t : = Wall S t r e e t ;
Data [ 1 ] . C i t y : = New York ;
Data [ 1 ] . Z i p : = 10005 ;
Data [ 1 ] . Country : = USA ;
Data [ 1 ] . StreetNumber : = 1 1 ;
Finally
{ Clean up t h e r e c o r d c o n t e n t s .
Again , t h e s t r u c t u r e o f t h e r e c o r d i s d e t e c t e d t h r o u g h
Runt i m e Type I n f o r m a t i o n }
F i n a l i z e ( Data ^ ) ;
FreeMem ( Data ) ;
end ;
end .
75.11.255
InitializeArray
75.11.256
InitThread
75.11.257
InitThreadVars
75.11.258
Insert
1374
writeln ( s ) ;
end .
75.11.259
int
75.11.260
intdivide(variant,variant):variant
75.11.261
InterlockedCompareExchange
Visibility: default
Description: InterlockedCompareExchange does an compare-and-exchange operation on the specified
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 (1376), InterLockedIncrement (1377), InterLockedExchange (1376), InterLockedExchangeAdd (1377)
75.11.262
InterLockedDecrement
75.11.263
InterLockedExchange
1376
75.11.264
InterLockedExchangeAdd
75.11.265
InterLockedIncrement
75.11.266
IOResult
1378
75.11.267
IsDynArrayRectangular
75.11.268
IsMemoryManagerSet
75.11.269
Is_IntResource
75.11.270
KillThread
1379
75.11.271
LeaveCriticalsection
75.11.272
leftshift(variant,variant):variant
75.11.273
Length
1380
Program Example36 ;
{ Program t o demonstrate t h e Length f u n c t i o n . }
type
somebytes = array [ 6 . . 1 0 ] of b y t e ;
somewords = array [ 3 . . 1 0 ] of word ;
Var
S : String ;
I : Integer ;
b y t e s : somebytes ;
words : somewords ;
begin
S: = ;
f o r i : = 1 to 1 0 do
begin
S: =S+ ;
W r i t e l n ( Length (S ) : 2 , : , s ) ;
end ;
W r i t e l n ( Bytes : , length ( b y t e s ) ) ;
W r i t e l n ( Words : , length ( words ) ) ;
end .
75.11.274
lessthan(variant,variant):Boolean
75.11.275
lessthanorequal(variant,variant):Boolean
75.11.276
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
Visibility: default
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 (1317), NtoBE (1389), NtoLE (1390)
75.11.277
ln
75.11.278
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
Visibility: default
1382
Description: Lo returns the low byte of its argument if this is of size 2 (such as Word or SmallInt), or the
low nibble if the size is 1 (such as byte). It returns the low word of its argument if this is of type
Longint or Cardinal.
Errors: None.
See also: Ord (1392), Chr (1323), Hi (1364)
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 ;
B : Byte ;
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) ) ;
B: = $EF ;
W r i t e l n ( Lo (B ) ) ;
end .
75.11.279
{
{
{
{
$10010
Prints
$110
Prints
}
16 }
}
16 }
{ Prints 15 }
LoadResource
75.11.280
LockResource
75.11.281
logicaland(variant,variant):variant
75.11.282
logicalnot(variant):variant
75.11.283
logicalor(variant,variant):variant
1384
75.11.284
logicalxor(variant,variant):variant
75.11.285
longjmp
75.11.286
Low
75.11.287
lowerCase
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.
Lowercase does not change the number of characters (or bytes) in an ansistring.
Errors: None.
See also: Upcase (1442)
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 .
75.11.288
MakeLangID
75.11.289
MemSize
75.11.290
mkdir
75.11.291
modulus(variant,variant):variant
75.11.292
Move
1387
S2 : = Bye , bye
! ;
Move ( S1 , S2 , Sizeof ( S1 ) ) ;
W r i t e l n ( S2 ) ;
end .
75.11.293
MoveChar0
75.11.294
multiply(variant,variant):variant
75.11.295
negative(variant):variant
75.11.296
New
75.11.297
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
Visibility: default
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.
See also: BEtoN (1317), LEtoN (1382), NtoLE (1390)
1389
75.11.298
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
Visibility: default
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 (1317), LEtoN (1382), NtoBE (1389)
75.11.299
Null
75.11.300
OctStr
1390
75.11.301
odd
odd(l:
odd(l:
odd(l:
odd(l:
LongInt) : Boolean
LongWord) : Boolean
Int64) : Boolean
QWord) : Boolean
Visibility: default
Description: Odd returns True if X is odd, or False otherwise.
Errors: None.
See also: Abs (1292), Ord (1392)
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 .
75.11.302
Ofs
begin
W: = P o i n t e r ( Ofs (W) ) ; { W c o n t a i n s i t s own o f f s e t . }
end .
1391
75.11.303
Ord
75.11.304
{ Prints 125 }
{ prints 124 }
{ Prints 1 }
{ Prints 2 }
Pack
75.11.305
Paramcount
75.11.306
ParamStr
75.11.307
pi
75.11.308
{ 3.1415926 }
PopCnt
PopCnt(const
PopCnt(const
PopCnt(const
PopCnt(const
AValue:
AValue:
AValue:
AValue:
Byte) : Byte
Word) : Word
DWord) : DWord
QWord) : QWord
Visibility: default
Description: PopCnt (population count) counts the number of set bits in AValue.
75.11.309
Pos
75.11.310
Power
1395
Description: Power returns the value of base to the power expon. Base and expon can be of type Longint,
in which case the result will also be a Longint.
The function actually returns Exp(expon*Ln(base))
Errors: None.
See also: Exp (1346), Ln (1382)
Listing: ./refex/ex78.pp
Program Example78 ;
{ Program t o demonstrate t h e Power f u n c t i o n . }
begin
W r i t e l n ( Power ( exp ( 1 . 0 ) , 1 . 0 ) : 8 : 2 ) ; { Should p r i n t 2 . 7 2 }
end .
75.11.311
power(variant,variant):variant
75.11.312
Pred
1396
75.11.313
prefetch
75.11.314
ptr
75.11.315
RaiseList
75.11.316
Random
75.11.317
Randomize
Errors: None.
See also: Random (1398)
75.11.318
Read
75.11.319
ReadBarrier
);
75.11.320
ReadDependencyBarrier
75.11.321
ReadLn
Synopsis: Read from a text file 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 file F, and stores the result in V1, V2, etc. After that it goes
to the next line in the file. The end of the line is marked by any of the supported line ending styles,
independent of the platform on which the code is running (supported line ending styles are CRLF,
LF or CR). The end-of-line marker is not considered part of the line and is ignored.
If no file F is specified, 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 (1399).
Errors: If no data is available, empty values are returned (0 for ordinal values, empty strings for string
values)
See also: Read (1399), Blockread (1318), Write (1448), Blockwrite (1319)
75.11.322
ReadStr
1400
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 file.
ReadStr is defined 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 (1399).
See also: Read (1399), WriteStr (1450), Write (1448)
75.11.323
ReadWriteBarrier
75.11.324
Real2Double
1401
E : Extended ;
F : F i l e of Real48 ;
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 .
75.11.325
ReAllocMem
75.11.326
ReAllocMemory
75.11.327
ReleaseExceptionObject
1402
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 (1292) 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 (1292)
75.11.328
Rename
Rename(var
Rename(var
Rename(var
Rename(var
Rename(var
Rename(var
Rename(var
Rename(var
Rename(var
Rename(var
f:
f:
f:
f:
f:
t:
t:
t:
t:
t:
File;const
File;const
File;const
File;const
File;const
Text;const
Text;const
Text;const
Text;const
Text;const
s:
p:
c:
s:
s:
s:
p:
c:
s:
s:
ShortString)
PAnsiChar)
AnsiChar)
UnicodeString)
RawByteString)
shortstring)
PAnsiChar)
AnsiChar)
unicodestring)
RawByteString)
Visibility: default
Description: Rename changes the name of the assigned file 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 (1343)
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 .
75.11.329
Reset
Reset(var
Reset(var
Reset(var
Reset(var
f:
f:
f:
t:
File;l: LongInt)
File)
TypedFile)
Text)
Visibility: default
1403
Description: Reset opens a file F for reading. F can be any file type. If F is a text file, or refers to standard I/O
(e.g : ) then it is opened read-only, otherwise it is opened using the mode specified in filemode.
If F is an untyped file, the record size can be specified 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 (1404), Assign (1296), Close (1324), Append (1295)
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 ) ;
end ;
begin
I f F i l e E x i s t s ( Paramstr ( 1 ) ) then
W r i t e l n ( F i l e found )
else
W r i t e l n ( F i l e NOT found ) ;
end .
75.11.330
ResumeThread
75.11.331
Rewrite
1404
Declaration: procedure
procedure
procedure
procedure
Rewrite(var
Rewrite(var
Rewrite(var
Rewrite(var
f:
f:
f:
t:
File;l: LongInt)
File)
TypedFile)
Text)
Visibility: default
Description: Rewrite opens a file F for writing. F can be any file type. If F is an untyped or typed file, then
it is opened for reading and writing. If F is an untyped file, the record size can be specified in the
optional parameter L. Default a value of 128 is used. if Rewrite finds a file with the same name
as F, this file is truncated to length 0. If it doesnt find such a file, a new file is created. Contrary to
Turbo Pascal, Free Pascal opens the file with mode fmoutput. If it should be opened in fminout
mode, an extra call to Reset (1403) 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 (1403), Assign (1296), Close (1324), Flush (1353), Append (1295)
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 ;
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 .
75.11.332
rightshift(variant,variant):variant
1405
75.11.333
rmdir
75.11.334
RolByte
1406
75.11.335
RolDWord
75.11.336
RolQWord
75.11.337
RolWord
75.11.338
RorByte
Errors: None.
See also: RolByte (1406), RorWord (1408), RorDWord (1408), RorQWord (1408)
75.11.339
RorDWord
75.11.340
RorQWord
75.11.341
RorWord
1408
75.11.342
round
( Round ( 1 2 3 4 . 5 6 ) ) ;
( Round( 1 2 3 4 . 5 6 ) ) ;
( Round ( 1 2 . 3 4 5 6 ) ) ;
( Round( 1 2 . 3 4 5 6 ) ) ;
( Round ( 2 . 5 ) ) ;
( Round ( 3 . 5 ) ) ;
{
{
{
{
{
{
Prints
Prints
Prints
Prints
Prints
Prints
1235
1235
12
12
2 ( down )
4 ( up )
}
}
}
}
}
}
end .
75.11.343
RTLEventCreate
75.11.344
RTLeventdestroy
Description: RTLeventdestroy destroys the RTL event State. After a call to RTLeventdestroy, the
State RTL event may no longer be used.
See also: RTLEventCreate (1409), RTLEventResetEvent (1410), RTLEventSetEvent (1410)
75.11.345
RTLeventResetEvent
75.11.346
RTLeventSetEvent
75.11.347
RTLeventWaitFor
75.11.348
RunError
Description: Runerror stops the execution of the program, and generates a run-time error ErrorCode.
Errors: None.
See also: Exit (1345), Halt (1363)
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 .
75.11.349
SarInt64
75.11.350
SarLongint
75.11.351
SarShortint
75.11.352
SarSmallint
75.11.353
Seek
1412
Close ( f ) ;
end .
75.11.354
SeekEOF
75.11.355
SeekEOLn
75.11.356
Seg
75.11.357
{ W c o n t a i n s i t s own Segment }
SemaphoreDestroy
75.11.358
SemaphoreInit
75.11.359
SemaphorePost
75.11.360
SemaphoreWait
1415
75.11.361
SetCodePage
75.11.362
Setjmp
1416
75.11.363
SetLength
75.11.364
SetMemoryManager
75.11.365
SetMultiByteConversionCodePage
Synopsis: Set codepage for conversions from multi-byte strings to single-byte strings
Declaration: procedure SetMultiByteConversionCodePage(CodePage: TSystemCodePage)
Visibility: default
1417
75.11.366
SetMultiByteFileSystemCodePage
Synopsis: Set codepage used when passing strings to OS single-byte filesystem APIs
Declaration: procedure SetMultiByteFileSystemCodePage(CodePage: TSystemCodePage)
Visibility: default
Description: SetMultiByteFileSystemCodePage sets the codepage used in single-byte OS filesystem
APIs to CodePage. The effect of this change is that the default codepage used to translate multibyte (UTF-16) strings to single-byte codepage-aware strings used in Filesystem APIs changes, and
strings passed to the codepage-aware filesystem APIs will be passed using the new codepage.
This constant is not used if the filesystem API of the OS is multi-byte (such as on Windows).
Do not set DefaultFileSystemCodePage directly, as additional actions may need to be done
when changing the code page.
See also: DefaultFileSystemCodePage (1288), SetMultiByteConversionCodePage (1417), SetMultiByteRTLFileSystemCodePage (1418)
75.11.367
SetMultiByteRTLFileSystemCodePage
Synopsis: Set codepage used when interpreting strings from OS single-byte filesystem APIs
Declaration: procedure SetMultiByteRTLFileSystemCodePage(CodePage: TSystemCodePage)
Visibility: default
Description: SetMultiByteRTLFileSystemCodePage sets the codepage used to interprete strings returned by single-byte OS filesystem APIs to CodePage.
The effect of this change is that the default codepage used to translate single byte strings obtained
from the OS to single-byte codepage-aware strings or multi-byte strings changes, and strings obtained
from the codepage-aware filesystem APIs will be interpreted using the new codepage.
his constant is not used if the filesystem API of the OS is multi-byte (such as on Windows).
Do not set DefaultRTLFileSystemCodePage directly, as additional actions may need to be
done when changing the code page.
See also: SetMultiByteFileSystemCodePage (1418), SetMultiByteConversionCodePage (1417), SetMultiByteRTLFileSystemCodePage (1418)
1418
75.11.368
SetResourceManager
75.11.369
SetString
SetString(out
SetString(out
SetString(out
SetString(out
SetString(out
SetString(out
SetString(out
S:
S:
S:
S:
S:
S:
S:
Visibility: default
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 (1417)
75.11.370
SetTextBuf
1419
Never assign a new buffer to an opened file. A new buffer can be assigned immediately after
a call to Rewrite (1404), Reset (1403) or Append, but not after the file 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 file should be flushed first. 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 (1296), Reset (1403), Rewrite (1404), Append (1295)
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 .
75.11.371
SetTextCodePage
75.11.372
SetTextLineEnding
Synopsis: Set the end-of-line character for the given text file.
Declaration: procedure SetTextLineEnding(var f: Text;Ending: string)
Visibility: default
Description: SetTextLineEnding sets the end-of-line character for the text file F to Ending. By default,
this is the string indicated by DefaultTextLineBreakStyle (1231).
Errors: None.
See also: DefaultTextLineBreakStyle (1231), TTextLineBreakStyle (1278)
75.11.373
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 (1360), TThreadManager (1279)
75.11.374
SetUnicodeStringManager
1421
75.11.375
SetVariantManager
75.11.376
SetWideStringManager
75.11.377
ShortCompareText
1422
75.11.378
sin
75.11.379
SizeOf
{ Prints 4 }
{ Prints 11 }
1423
75.11.380
SizeofResource
75.11.381
Slice
75.11.382
Space
75.11.383
Sptr
75.11.384
sqr
sqr(l:
sqr(l:
sqr(l:
sqr(d:
LongInt)
Int64) :
QWord) :
ValReal)
: LongInt
Int64
QWord
: ValReal
Visibility: default
Description: Sqr returns the square of its argument X.
Errors: None.
See also: Sqrt (1426), Ln (1382), Exp (1346)
Listing: ./refex/ex65.pp
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 .
1425
75.11.385
sqrt
75.11.386
Sseg
75.11.387
StackTop
Description: 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.
See also: StackBottom (1291), StackLength (1291)
75.11.388
Str
75.11.389
StringCodePage
Visibility: default
Description: StringCodePage returns the code page of a string (S), regardless of the string type. It accesses
the internal structures of the string to retrieve this information. For an empty string, DefaultSystemCodePage (1289) is returned.
See also: DefaultSystemCodePage (1289), StringElementSize (1428), StringRefCount (1429), SetCodePage
(1416)
75.11.390
StringElementSize
75.11.391
StringOfChar
1428
75.11.392
StringRefCount
75.11.393
StringToPPChar
75.11.394
StringToUnicodeChar
1429
75.11.395
StringToWideChar
75.11.396
strlen
75.11.397
strpas
75.11.398
subtract(variant,variant):variant
1430
75.11.399
Succ
75.11.400
SuspendThread
75.11.401
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
Visibility: default
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 (1382), Hi (1364)
Listing: ./refex/ex69.pp
1431
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) ;
i f 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 .
75.11.402
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
Visibility: default
Description: SwapEndian will swap the endianness of the bytes in its argument.
Errors: None.
See also: hi (1364), lo (1382), swap (1431), BEToN (1317), NToBE (1389), NToLE (1390), LEToN (1382)
75.11.403
SysAllocMem
75.11.404
SysAssert
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 filename
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)
75.11.405
SysBackTraceStr
75.11.406
SysFlushStdIO
Synopsis:
Declaration: procedure SysFlushStdIO
Visibility: default
Description:
75.11.407
SysFreemem
75.11.408
SysFreememSize
1433
75.11.409
SysGetFPCHeapStatus
75.11.410
SysGetHeapStatus
75.11.411
SysGetmem
75.11.412
SysInitExceptions
1434
75.11.413
SysInitFPU
75.11.414
SysInitStdIO
75.11.415
SysMemSize
75.11.416
SysReAllocMem
75.11.417
SysResetFPU
75.11.418
SysSetCtrlBreakHandler
75.11.419
SysTryResizeMem
75.11.420
ThreadGetPriority
75.11.421
ThreadSetPriority
1436
75.11.422
ThreadSwitch
75.11.423
ToSingleByteFileSystemEncodedFileName
75.11.424
trunc
1437
W r i t e l n ( Trunc ( 1 2 . 3 4 5 6 ) ) ; { P r i n t s 1 2
W r i t e l n ( Trunc ( 1 2 . 3 4 5 6 ) ) ; { P r i n t s 12
end .
75.11.425
}
}
Truncate
75.11.426
TryEnterCriticalsection
1438
75.11.427
TypeInfo
75.11.428
TypeOf
75.11.429
UCS4StringToUnicodeString
75.11.430
UCS4StringToWideString
Synopsis:
Declaration: function UCS4StringToWideString(const s: UCS4String) : WideString
Visibility: default
Description:
75.11.431
Unassigned
1439
75.11.432
UnicodeCharLenToString
75.11.433
UnicodeCharLenToStrVar
75.11.434
UnicodeCharToString
1440
75.11.435
UnicodeCharToStrVar
75.11.436
UnicodeStringToUCS4String
75.11.437
UnicodeToUtf8
Synopsis:
Declaration: function UnicodeToUtf8(Dest: PChar;Source: PUnicodeChar;
MaxBytes: SizeInt) : SizeInt
function UnicodeToUtf8(Dest: PChar;MaxDestBytes: SizeUInt;
Source: PUnicodeChar;SourceChars: SizeUInt)
: SizeUInt
Visibility: default
Description:
75.11.438
UniqueString
75.11.439
UnlockResource
75.11.440
UnPack
75.11.441
upCase
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.
UpCase does not change the number of characters in the string.
Errors: None.
See also: Lowercase (1386)
Listing: ./refex/ex72.pp
1442
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 .
75.11.442
Utf8CodePointLen
75.11.443
UTF8Decode
1443
75.11.444
UTF8Encode
75.11.445
Utf8ToAnsi
75.11.446
Utf8ToUnicode
75.11.447
Val
75.11.448
, code , :
, Paramstr ( 1 ) [ Code ] )
VarArrayGet
Synopsis:
Declaration: function VarArrayGet(const A: Variant;const Indices: Array of LongInt)
: Variant
Visibility: default
Description:
1445
75.11.449
VarArrayPut
75.11.450
VarArrayRedim
75.11.451
VarCast
1446
75.11.452
WaitForThreadTerminate
75.11.453
WideCharLenToString
75.11.454
WideCharLenToStrVar
1447
75.11.455
WideCharToString
75.11.456
WideCharToStrVar
75.11.457
WideStringToUCS4String
75.11.458
Write
1448
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 influenced through the following modifiers: 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 fits. If the representation requires less than NumChars characters then the output is filled up
with spaces, to the left of the generated string, thus resulting in a right-aligned representation. If no
formatting is specified, 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 scientific
notation.
Remark: When writing string variables, no codepage conversions are done. The string is copied as-is to the
file descriptor. In particular, for console output, it is the programmers responsibility to make sure
that the codepage of the string matches the codepage of the console.
Errors: If an error occurs, a run-time error is generated. This behavior can be controlled with the {$I}
switch.
See also: WriteLn (1449), Read (1399), Readln (1400), Blockwrite (1319)
75.11.459
WriteBarrier
75.11.460
WriteLn
1449
See also: Write (1448), Read (1399), Readln (1400), Blockwrite (1319), slinebreak (1246)
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 .
75.11.461
WriteStr
1450
75.12
TDoubleRec
TDoubleRec models the memory layout of a double value when using software floating point math.
75.12.1
Page
1452
1452
1452
1452
Method
Exponent
Fraction
Mantissa
SpecialType
75.12.2
Page
1453
1453
1452
Method overview
Description
Exponent of the floating point value
Fraction of the floating point value
Mantissa of the floating point value
Is the floating point value special ?
Property overview
Properties
Exp
Frac
Sign
Access
rw
rw
rw
Description
Exponent
Sign of the floating point value
1451
75.12.3
TDoubleRec.Mantissa
75.12.4
TDoubleRec.Fraction
75.12.5
TDoubleRec.Exponent
75.12.6
TDoubleRec.SpecialType
75.12.7
TDoubleRec.Sign
1452
75.12.8
TDoubleRec.Exp
Synopsis: Exponent
Declaration: Property Exp : QWord
Visibility: public
Access: Read,Write
Description: ?
See also: TDoubleRec.Sign (1452), TDoubleRec.Exponent (1452)
75.12.9
TDoubleRec.Frac
75.13
TExtended80Rec
TExtended80Rec models the memory layout of an extended value when using software floating
point math.
1453
75.13.1
Page
1454
1454
1454
1455
Method
Exponent
Fraction
Mantissa
SpecialType
75.13.2
Page
1455
1455
Method overview
Property overview
Properties
Exp
Sign
75.13.3
Description
Exponent of the floating point value
Fraction of the floating point value
Mantissa of the floating point value
Is the floating point value special ?
Access
rw
rw
Description
Exponent
Sign of the floating point value
TExtended80Rec.Mantissa
75.13.4
TExtended80Rec.Fraction
75.13.5
TExtended80Rec.Exponent
1454
75.13.6
TExtended80Rec.SpecialType
75.13.7
TExtended80Rec.Sign
75.13.8
TExtended80Rec.Exp
Synopsis: Exponent
Declaration: Property Exp : QWord
Visibility: public
Access: Read,Write
Description: ?
See also: TExtended80Rec.Sign (1455), TExtended80Rec.Exponent (1454)
75.14
TSingleRec
0: (
Bytes : Array[0..3] of Byte;
);
1: (
Words : Array[0..1] of Word;
);
2: (
Data : DWord;
);
3: (
Value : Single;
);
end
TsingleRec models the memory layout of a double value when using software floating point math.
75.14.1
Page
1457
1456
1456
1457
Method
Exponent
Fraction
Mantissa
SpecialType
75.14.2
Page
1457
1457
1457
Method overview
Property overview
Properties
Exp
Frac
Sign
75.14.3
Description
Exponent of the floating point value
Fraction of the floating point value
Mantissa of the floating point value
Is the floating point value special ?
Access
rw
rw
rw
Description
Exponent
Sign of the floating point value
TSingleRec.Mantissa
75.14.4
TSingleRec.Fraction
75.14.5
TSingleRec.Exponent
75.14.6
TSingleRec.SpecialType
75.14.7
TSingleRec.Sign
75.14.8
TSingleRec.Exp
Synopsis: Exponent
Declaration: Property Exp : QWord
Visibility: public
Access: Read,Write
Description: ?
See also: TsingleRec.Sign (1457), TsingleRec.Exponent (1457)
75.14.9
TSingleRec.Frac
1457
75.15
IDispatch
75.15.1
Description
75.15.2
Page
1458
1458
1458
1458
Method overview
Method
GetIDsOfNames
GetTypeInfo
GetTypeInfoCount
Invoke
75.15.3
Description
Return IDs of named procedures
Return type information about properties
Return number of properties.
Invoke a dispatch method
IDispatch.GetTypeInfoCount
75.15.4
IDispatch.GetTypeInfo
75.15.5
IDispatch.GetIDsOfNames
75.15.6
IDispatch.Invoke
1458
75.16
IEnumerable
75.16.1
Description
IEnumerable can be used to get an enumerator from a class. If a class implements IEnumerable,
it can return an enumerator interface IEnumerator (1459).
See also: IEnumerator (1459)
75.16.2
Page
1459
Method overview
Method
GetEnumerator
75.16.3
Description
Return an enumerator interface for this class
IEnumerable.GetEnumerator
75.17
75.17.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
1459
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 (1459)
75.17.2
Page
1460
1460
1461
75.17.3
Page
1461
Method overview
Method
GetCurrent
MoveNext
Reset
Property overview
Properties
Current
75.17.4
Description
Returns the current element in the iteration cycle
Move to the next value
Reset the pointer
Access
r
Description
Return the current item
IEnumerator.GetCurrent
75.17.5
IEnumerator.MoveNext
1460
75.17.6
IEnumerator.Reset
75.17.7
IEnumerator.Current
75.18
IInvokable
75.18.1
Description
IInvokable is a descendent of IInterface (1256), compiled in the {$M+} state, so Run-Time Type
Information (RTTI) is generated for it.
See also: IDispatch (1458), IInterface (1256)
75.19
IUnknown
75.19.1
Description
IUnknown is defined by windows. Its the basic interface which all COM objects must implement.
The definition does not contain any code.
See also: IInterface (1256), IDispatch (1458), IInvokable (1461)
75.19.2
Page
1462
1462
1462
Method overview
Method
\_AddRef
QueryInterface
\_Release
Description
Increase reference count of the interface
Return pointer to VMT table of interface
Decrease reference count of the interface
1461
75.19.3
IUnknown.QueryInterface
75.19.4
IUnknown._AddRef
75.19.5
IUnknown._Release
75.20
TAggregatedObject
75.20.1
Description
75.20.2
Page
1463
Method
Create
75.20.3
Page
1463
Method overview
Description
Create a new instance of TAggregatedObject
Property overview
Properties
Controller
Access
r
Description
Controlling instance
1462
75.20.4
TAggregatedObject.Create
75.20.5
TAggregatedObject.Controller
75.21
TContainedObject
75.21.1
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 specifically, the
QueryInterface method of IUnknown.
See also: IInterface (1256)
75.21.2
Page
1256
Interfaces overview
Interfaces
IInterface
75.22
75.22.1
Description
Basic interface for all COM based interfaces
TInterfacedObject
Description
75.22.2
Page
1461
Interfaces
IUnknown
75.22.3
Page
1464
1464
1464
Description
Basic interface for all COM-based interfaces
Method overview
Method
AfterConstruction
BeforeDestruction
NewInstance
75.22.4
Page
1465
Interfaces overview
Property overview
Properties
RefCount
75.22.5
Description
Handle reference count properly.
Check reference count.
Create a new instance
Access
r
Description
Return the current reference count
TInterfacedObject.AfterConstruction
Override
Visibility: public
Description: AfterConstruction overrides the basic method in TObject and adds some additional reference count handling.
Errors: None.
See also: BeforeDestruction (1464)
75.22.6
TInterfacedObject.BeforeDestruction
Override
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 (1464)
75.22.7
TInterfacedObject.NewInstance
Override
Visibility: public
Description: NewInstance initializes a new instance of TInterfacedObject (1463)
Errors: None.
1464
75.22.8
TInterfacedObject.RefCount
75.23
75.23.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 (1267)
1465
75.23.2
Method overview
Page
1471
1472
1469
1469
1469
1470
1469
1468
1466
1468
1472
1467
1472
1472
1475
1471
1468
1467
Method
AfterConstruction
BeforeDestruction
ClassInfo
ClassName
ClassNameIs
ClassParent
ClassType
CleanupInstance
Create
DefaultHandler
DefaultHandlerStr
Destroy
Dispatch
DispatchStr
Equals
FieldAddress
Free
FreeInstance
1475
1473
1473
1474
1474
1474
GetHashCode
GetInterface
GetInterfaceByStr
GetInterfaceEntry
GetInterfaceEntryByStr
GetInterfaceTable
1473
GetInterfaceWeak
1470
1468
1470
1471
1471
1467
1467
1470
1475
1474
InheritsFrom
InitInstance
InstanceSize
MethodAddress
MethodName
newinstance
SafeCallException
StringMessageTable
ToString
UnitName
75.23.3
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 field.
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
TObject.Create
1466
75.23.4
TObject.Destroy
Virtual
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 (1468) method,
because that one will check first 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 (1577)
function.
See also: Create (1466), Free (1468)
75.23.5
TObject.newinstance
Virtual
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 (1468). 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 (1466), InitInstance (1468), InstanceSize (1470), FreeInstance (1467)
75.23.6
TObject.FreeInstance
Synopsis: Clean up instance and free the memory reserved for the instance.
Declaration: procedure FreeInstance;
Virtual
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 (1467), InitInstance (1468), NewInstance (1467)
75.23.7
TObject.SafeCallException
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.
1467
75.23.8
TObject.DefaultHandler
Virtual
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 (1472) method.
See also: Dispatch (1472), DefaultHandlerStr (1472)
75.23.9
TObject.Free
75.23.10
TObject.InitInstance
75.23.11
TObject.CleanupInstance
75.23.12
TObject.ClassType
75.23.13
TObject.ClassInfo
75.23.14
TObject.ClassName
75.23.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 (1469), ClassType (1469), ClassName (1469)
1469
75.23.16
TObject.ClassParent
75.23.17
TObject.InstanceSize
75.23.18
TObject.InheritsFrom
75.23.19
TObject.StringMessageTable
1470
75.23.20
TObject.MethodAddress
75.23.21
TObject.MethodName
75.23.22
TObject.FieldAddress
75.23.23
TObject.AfterConstruction
Virtual
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 specific
behaviour that is executed after the constructor has finished executing. (for instance, call an event
handler)
Errors: None.
See also: BeforeDestruction (1472), Create (1466)
1471
75.23.24
TObject.BeforeDestruction
Virtual
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 specific behaviour that is executed before the destructor has finished executing. (for instance, call an event
handler)
Errors: None.
See also: AfterConstruction (1471), Destroy (1467), Free (1468)
75.23.25
TObject.DefaultHandlerStr
Virtual
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 specific message handling
behaviour.
See also: DispatchStr (1472), Dispatch (1472), DefaultHandler (1468)
75.23.26
TObject.Dispatch
Virtual
Visibility: public
Description: Dispatch looks in the message handler table for a handler that handles message. The message
is identified by the first dword (cardinal) in the message structure.
If no matching message handler is found, the message is passed to the DefaultHandler (1468) method,
which can be overridden by descendent classes to add custom handling of messages.
See also: DispatchStr (1472), DefaultHandler (1468)
75.23.27
TObject.DispatchStr
Virtual
Visibility: public
Description: DispatchStr extracts the message identifier 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 (1472) is called.
1472
Errors: None.
See also: DefaultHandlerStr (1472), Dispatch (1472), DefaultHandler (1468)
75.23.28
TObject.GetInterface
75.23.29
TObject.GetInterfaceByStr
75.23.30
TObject.GetInterfaceWeak
1473
75.23.31
TObject.GetInterfaceEntry
75.23.32
TObject.GetInterfaceEntryByStr
75.23.33
TObject.GetInterfaceTable
75.23.34
TObject.UnitName
1474
75.23.35
TObject.Equals
Virtual
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 (1475), TObject.ToString (1475)
75.23.36
TObject.GetHashCode
Virtual
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 (1475), TObject.Equals (1475)
75.23.37
TObject.ToString
Virtual
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 (1475), TObject.Equals (1475)
1475
Chapter 76
Used units
Table 76.1: Used units by unit sysutils
Name
errors
Linux
sysconst
System
Unix
unixtype
76.2
Page
654
864
??
1224
1747
1784
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.
76.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.
1476
76.4
The many functions that deal with filenames in the sysutils routines have been changed from AnsiString
to RawByteString so they do not perform implict codepage conversions to the ansi code page. At the
same time, overloaded versions that accept a unicode string have been created.
For routines that access actual OS functions using single-byte string APIS, the strings are converted
to ensure that the OS routine receives a string with the correct encoding when using single-byte
strings. This encoding is normally the DefaultFileSystemCodePage (1288) encoding.
On systems with a unicode I/O API (2-byte strings), the native API is used, meaning that unicode
strings will be passed on as-is, but single-byte strings will be converted (implicitly) to Unicode.
The following is a minimal list of functions that have been changed and duplicated:
Table 76.2:
Name
FileCreate (1550)
FileOpen (1554)
FileExists (1551)
DirectoryExists (1536)
FileSetDate (1557)
FileGetAttr (1552)
FileSetAttr (1557)
DeleteFile (1536)
RenameFile (1595)
FileSearch (1555)
ExeSearch (1543)
FindFirst (1559)
FindNext (1560)
FindClose (1558)
FileIsReadOnly (1554)
GetCurrentDir (1578)
SetCurrentDir (1598)
Description
Create a new file and return a handle to it.
Open an existing file and return a filehandle
Check whether a particular file exists in the filesystem.
Check whether a directory exists in the file system.
Set the date of a file.
Return attributes of a file.
Set the attributes of a file.
Delete a file from the filesystem.
Rename a file.
Search for a file in a path.
Search for an executable
Start a file search and return a findhandle
Find the next entry in a findhandle.
Close a find handle
Check whether a file is read-only.
Return the current working directory of the application.
Set the current directory of the application.
The following functions do not interact with the OS, but may nevertheless change the codepage of
the strings involved in their operation:
1477
Table 76.3:
Name
ChangeFileExt (1523)
ExtractFilePath (1547)
ExtractFileDrive (1546)
ExtractFileName (1547)
ExtractFileExt (1546)
ExtractFileDir (1545)
ExtractShortPathName (1548)
ExpandFileName (1543)
ExpandFileNameCase (1544)
ExtractRelativepath (1547)
ExpandUNCFileName (1545)
IncludeTrailingPathDelimiter (1586)
IncludeTrailingBackslash (1586)
ExcludeTrailingBackslash (1542)
ExcludeTrailingPathDelimiter (1542)
IncludeLeadingPathDelimiter (1585)
ExcludeLeadingPathDelimiter (1541)
IsPathDelimiter (1590)
DoDirSeparators (1538)
SetDirSeparators (1598)
GetDirs (1579)
ConcatPaths (1527)
GetEnvironmentVariable (1580)
76.5
Description
Change the extension of a filename.
Extract the path from a filename.
Extract the drive part from a filename.
Extract the filename part from a full path filename.
Return the extension from a filename.
Extract the drive and directory part of a filename.
Returns a 8.3 path name
Expand a relative filename to an absolute filename.
Expand a filename entered as case insensitive to the full path as stored on the disk.
Extract a relative path from a filename, given a base directory.
Expand a relative filename to an absolute UNC filename.
Add trailing directory separator to a pathname, if needed.
Add trailing directory separator to a pathname, if needed.
Strip trailing directory separator from a pathname, if needed.
Strip trailing directory separator from a pathname, if needed.
Prepend a path delimiter if there is not already one.
Strip the leading path delimiter of a path
Is the character at the given position a pathdelimiter ?
Convert known directory separators to the current directory separator.
Set the directory separators to the known directory separators.
Return a list of directory names from a path.
Concatenate an array of paths to form a single path
Return the value of an environment variable.
Description
Convert BCD number to integer
Compare two memory regions
Convert float to formatted string
Convert float to string
Convert float to string
Format a floating 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 float
Convert null-terminated string to float
1478
76.6
Date/time routines
76.7
Description
Convert DateTime type to file 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 time
1479
Table 76.6:
Name
AnsiCompareFileName (1506)
AnsiLowerCaseFileName (1511)
AnsiUpperCaseFileName (1519)
AddDisk (1505)
ChangeFileExt (1523)
CreateDir (1527)
DeleteFile (1536)
DiskFree (1537)
DiskSize (1537)
ExpandFileName (1543)
ExpandFileNameCase (1544)
ExpandUNCFileName (1545)
ExtractFileDir (1545)
ExtractFileDrive (1546)
ExtractFileExt (1546)
ExtractFileName (1547)
ExtractFilePath (1547)
ExtractRelativePath (1547)
FileAge (1548)
FileDateToDateTime (1551)
FileExists (1551)
FileGetAttr (1552)
FileGetDate (1553)
FileSearch (1555)
FileSetAttr (1557)
FileSetDate (1557)
FindFirst (1559)
FindNext (1560)
GetCurrentDir (1578)
RemoveDir (1595)
RenameFile (1595)
SameFileName (1597)
SetCurrentDir (1598)
SetDirSeparators (1598)
FindClose (1558)
DoDirSeparators (1538)
76.8
Description
Compare 2 filenames
Create lowercase filename
Create uppercase filename
Add disk to list of disk drives
Change extension of file name
Create a directory
Delete a file
Free space on disk
Total size of disk
Create full file name
Create full file name case insensitively
Create full UNC file name
Extract drive and directory part of filename
Extract drive part of filename
Extract extension part of filename
Extract name part of filename
Extrct path part of filename
Construct relative path between two files
Return file age
Convert file date to system date
Determine whether a file exists on disk
Get attributes of file
Get date of last file modification
Search for file in path
Get file attributes
Get file dates
Start finding a file
Find next file
Return current working directory
Remove a directory from disk
Rename a file on disk
Check whether 2 filenames are the same
Set current working directory
Set directory separator characters
Stop searching a file
Replace directory separator characters
1480
Table 76.7:
Name
FileCreate (1550)
FileOpen (1554)
FileRead (1555)
FileSeek (1556)
FileTruncate (1558)
FileWrite (1558)
FileClose (1549)
76.9
Description
Create a file and return handle
Open file end return handle
Read from file
Set file position
Truncate file length
Write to file
Close file handle
Most PChar functions are the same as their counterparts in the STRINGS unit. The following functions are the same :
1. StrCat (1601) : Concatenates two PChar strings.
2. StrComp (1602) : Compares two PChar strings.
3. StrCopy (1602) : Copies a PChar string.
4. StrECopy (1603) : Copies a PChar string and returns a pointer to the terminating null byte.
5. StrEnd (1603) : Returns a pointer to the terminating null byte.
6. StrIComp (1605) : Case insensitive compare of 2 PChar strings.
7. StrLCat (1606) : Appends at most L characters from one PChar to another PChar.
8. StrLComp (1607) : Case sensitive compare of at most L characters of 2 PChar strings.
9. StrLCopy (1607) : Copies at most L characters from one PChar to another.
10. StrLen (1608) : Returns the length (exclusive terminating null byte) of a PChar string.
11. StrLIComp (1609) : Case insensitive compare of at most L characters of 2 PChar strings.
12. StrLower (1609) : Converts a PChar to all lowercase letters.
13. StrMove (1610) : Moves one PChar to another.
14. StrNew (1611) : Makes a copy of a PChar on the heap, and returns a pointer to this copy.
15. StrPos (1612) : Returns the position of one PChar string in another?
16. StrRScan (1613) : returns a pointer to the last occurrence of on PChar string in another one.
17. StrScan (1613) : returns a pointer to the first occurrence of on PChar string in another one.
18. StrUpper (1622) : Converts a PChar to all uppercase letters.
The subsequent functions are different from their counterparts in STRINGS, although the same
examples can be used.
1481
76.10
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 Formats date using shortdateformat and formats time using longtimeformat if the time
is not zero.
f Same as c, but adds the time even if it is zero.
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
1482
z milliseconds
zzz milliseconds(leading zero)
The date and time separators are taken from the DefaultFormatSettings (1500) record, unless a TFormatSettings (1496) record is passed to the FormatDateTime (1575) function.
Note that to include any of the above characters literally in the result string, they must be enclosed in
double quotes.
See also: DefaultFormatSettings (1500), TFormatSettings (1496), FormatDateTime (1575)
76.11
Formatting strings
76.12
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
String functions
1483
Table 76.9:
Name
AnsiCompareStr (1507)
AnsiCompareText (1508)
AnsiExtractQuotedStr (1509)
AnsiLastChar (1509)
AnsiLowerCase (1510)
AnsiQuotedStr (1511)
AnsiStrComp (1512)
AnsiStrIComp (1513)
AnsiStrLComp (1514)
AnsiStrLIComp (1515)
AnsiStrLastChar (1514)
AnsiStrLower (1516)
AnsiStrUpper (1517)
AnsiUpperCase (1518)
AppendStr (1519)
AssignStr (1520)
CompareStr (1525)
CompareText (1526)
DisposeStr (1538)
IsValidIdent (1590)
LastDelimiter (1591)
LeftStr (1591)
LoadStr (1592)
LowerCase (1592)
NewStr (1593)
RightStr (1596)
StrAlloc (1600)
StrBufSize (1600)
StrDispose (1603)
StrPas (1611)
StrPCopy (1612)
StrPLCopy (1612)
UpperCase (1634)
76.13
76.13.1
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 identifier
Last occurance of character in a string
Get first 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
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 (1559) call to find all matching files.
faArchive = $00000020
Attribute of a file, meaning the file has the archive bit set. Used in TSearchRec (1497) and FindFirst
(1559)
faDirectory = $00000010
Attribute of a file, meaning the file is a directory. Used in TSearchRec (1497) and FindFirst (1559)
faHidden = $00000002
Attribute of a file, meaning the file is read-only. Used in TSearchRec (1497) and FindFirst (1559)
faReadOnly = $00000001
Attribute of a file, meaning the file is read-only. Used in TSearchRec (1497) and FindFirst (1559)
faSymLink = $00000040
faSymLink means the file (as returned e.g. by FindFirst (1559)/FindNext (1560)), is a symlink.
Its ignored under Windows.
faSysFile = $00000004
Attribute of a file, meaning the file is a system file. Used in TSearchRec (1497) and FindFirst (1559)
faVolumeId = $00000008
Attribute of a file, meaning the entry contains the volume ID. Used in TSearchRec (1497) and FindFirst (1559)
feInvalidHandle : THandle = (-1)
feInvalidHandle is the return value of FileOpen (1554) in case of an error.
fmOpenRead = $0000
1485
fmOpenRead is used in the FileOpen (1554) call to open a file in read-only mode.
fmOpenReadWrite = $0002
fmOpenReadWrite is used in the FileOpen (1554) call to open a file in read-write mode.
fmOpenWrite = $0001
fmOpenWrite is used in the FileOpen (1554) call to open a file in write-only mode.
fmShareCompat = $0000
fmOpenShareCompat is used in the FileOpen (1554) call OR-ed together with one of fmOpenReadWrite (1486), fmOpenRead (1486) or fmOpenWrite (1486),to open a file in a sharing modus
that is equivalent to sharing implemented in MS-DOS.
fmShareDenyNone = $0040
fmShareDenyNone is used in the FileOpen (1554) call OR-ed together with one of fmOpenReadWrite (1486), fmOpenRead (1486) or fmOpenWrite (1486), to open a file so other processes can
read/write the file as well.
fmShareDenyRead = $0030
fmOpenShareRead is used in the FileOpen (1554) call OR-ed together with one of fmOpenReadWrite (1486), fmOpenRead (1486) or fmOpenWrite (1486), to open a file 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 (1554) call OR-ed together with one of fmOpenReadWrite (1486), fmOpenRead (1486) or fmOpenWrite (1486), to open a file so other processes
cannot write to it, they can only read.
fmShareExclusive = $0010
fmOpenShareExclusive is used in the FileOpen (1554) call OR-ed together with one of fmOpenReadWrite (1486), fmOpenRead (1486) or fmOpenWrite (1486), to open a file exclusively.
fsFromBeginning = 0
fsFromBeginning is used to indicate in the FileSeek (1556) call that a seek operation should be
started at the start of the file.
fsFromCurrent = 1
fsFromBeginning is used to indicate in the FileSeek (1556) call that a seek operation should be
started at the current position in the file.
fsFromEnd = 2
1486
fsFromBeginning is used to indicate in the FileSeek (1556) call that a seek operation should be
started at the last position in the file.
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 prefix 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 filename (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
Number of minutes per day.
MinsPerHour = 60
1487
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
pfLibraryModule = $80000000
Package is a library
1488
pfModuleTypeMask = $C0000000
Mask for module type flags
pfNeverBuild = $00000001
Never-build flag was specified when compiling package
pfPackageModule = $40000000
Package is a real package (not exe)
pfProducerMask = $0C000000
Mask for producer flags
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)
RTL_SIGLAST = RTL_SIGQUIT
Last signal number (Unix only)
1489
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 (1559) function to determine
whether a command-line argument is a switch (an option) or a value. If the first character of an
argument is in SwitchChars, it will be considered an option or switch.
SysConfigDir : string =
SysConfigDir is the default system configuration directory. It is set at application startup by the
sysutils initialization routines.
This directory may be returned by the GetAppConfigDir (1577) call on some systems.
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
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)
1490
76.13.2
Types
EHeapException = EHeapMemoryError
EHeapMemoryError is raised when an error occurs in the heap management routines.
ExceptClass = Class of Exception
ExceptClass is a Exception (1645) class reference.
Int128Rec = packed record
case Integer of
0: (
Hi : QWord;
Lo : QWord;
);
1: (
DWords : Array[0..3] of DWord;
);
2: (
Words : Array[0..7] of Word;
);
3: (
Bytes : Array[0..15] of Byte;
);
end
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
case Integer of
0: (
1491
Hi : Word;
Lo : Word;
);
1: (
Bytes : Array[0..3] of Byte;
);
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
case Integer of
0: (
Hi : QWord;
Lo : QWord;
);
1: (
DWords : Array[0..3] of DWord;
);
2: (
Words : Array[0..7] of Word;
);
3: (
Bytes : Array[0..15] of Byte;
);
end
TBeepHandler = procedure
TBeepHandler is the prototype used by the OnBeep (1502) handler. This in turn is called by the
Beep (1521) call to actually implement the beep functionality. The call takes no arguments.
TByteArray = Array[0..32767] of Byte
TByteArray is a generic array definition, mostly for use as a base type of the PByteArray (1492)
type.
TBytes = Array of Byte
TBytes defines a dynamic array of bytes. This can be used to typecast e.g. strings to manipulate
them byte for byte.
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)
Explanation
Custom log event, with application-specific meaning
Debug message.
Error condition message
General information event message
Warning message
1493
Explanation
The new process inherits all (file) handles owned by the current process
TExecuteFlags is a set of flags to influence the behaviour of the ExecuteProcess (1543) call.
TFilename = String
TFileName is used in the TSearchRec (1497) definition.
TFileRec = FileRec
Alias for FileRec (1476) for Delphi compatibility.
TFileSearchOption = (sfoImplicitCurrentDir,sfoStripQuotes)
Explanation
Always search the current directory first, even if it is not specified.
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 (1494) values, used in the FileSearch (1555)
call when searching for files.
TFloatFormat = (ffGeneral,ffExponent,ffFixed,ffNumber,ffCurrency)
Explanation
Monetary format.
Scientific format.
Fixed point format.
General number format.
Fixed point format with thousand separatord
TFloatFormat is used to determine how a float value should be formatted in the FloatToText
(1565) function.
1494
TFloatRec = record
Exponent : Integer;
Negative : Boolean;
Digits : Array[0..18] of Char;
end
TFloatRec is used to descibe a floating point value by the FloatToDecimal (1561) function.
TFloatValue = (fvExtended,fvCurrency,fvSingle,fvReal,fvDouble,fvComp)
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 (1624) function.
TFormatDateTimeOption = (fdoInterval)
Explanation
Format the time as an interval, 24+hours are presented as such
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.
TGetAppNameEvent = function : string
This callback type is used by the OnGetApplicationName (1502) to return an alternative application
name.
TGetTempDirEvent = function(Global: Boolean) : string
Function prototype for OnGetTempDir (1503) handler.
TGetTempFileEvent = function(const Dir: string;const Prefix: string)
: string
Function prototype for OnGetTempFile (1503) handler.
TGetVendorNameEvent = function : string
TGetVendorNameEvent is the function prototype for the OnGetVendorName (1503) callback,
used by the VendorName (1634) function.
THandle = System.THandle
THandle refers to the definition of THandle in the system unit, and is provided for backward
compatibility only.
TIntegerSet = Set of
TIntegerSet is a generic integer subrange set definition whose size fits in a single integer.
TMbcsByteType = (mbSingleByte,mbLeadByte,mbTrailByte)
Explanation
Uses lead-byte
Single bytes
Uses trailing byte
1496
TRawbyteSearchRec is a search handle description record using single-byte strings. It is initialized by a call to FindFirst (1559) and can be used to do subsequent calls to FindNext (1560). It
contains the result of these function calls. It must be used to close the search sequence with a call to
FindClose (1558).
Remark: Not all fields of this record should be used. Some of the fields are for internal use only. (PathOnly
for example, is only provided for Kylix compatibility)
Remark: Note that for files with unicode filenames this is a converted value from the unicode filename.
Depending on the codepage, this may or may not be a correct rendering of the correct unicode
filename.
TReplaceFlags= Set of (rfReplaceAll,rfIgnoreCase)
Explanation
Search case insensitive.
Replace all occurrences of the search string with the replacement string.
1497
TSignalState = (ssNotHooked,ssHooked,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 AnsiChar
Generic set of characters type.
TSysLocale = record
DefaultLCID : Integer;
PriLangID : Integer;
SubLangID : Integer;
case Byte of
1: (
FarEast : Boolean;
MiddleEast : Boolean;
);
2: (
MBCS : Boolean;
RightToLeft : Boolean;
);
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.
TSystemTime = record
Year : Word;
Month : Word;
Day : Word;
DayOfWeek : Word;
Hour : Word;
Minute : Word;
Second : Word;
MilliSecond : Word;
end
TTerminateProc is the procedural type which should be used when adding exit procedures.
TTextRec = TextRec
Alias for TextRec (1476) for Delphi compatibility.
TTimeStamp = record
Time : LongInt;
Date : LongInt;
end
TTimeStamp contains a timestamp, with the date and time parts specified as separate TDateTime
values.
TUnicodeSearchRec = record
Time : LongInt;
Size : Int64;
Attr : LongInt;
Name : UnicodeString;
ExcludeAttr : LongInt;
FindHandle : THandle;
Mode : TMode;
end
TRawbyteSearchRec is a search handle description record using multi-byte strings. It is initialized by a call to FindFirst (1559) and can be used to do subsequent calls to FindNext (1560). It
contains the result of these function calls. It must be used to close the search sequence with a call to
FindClose (1558).
Remark: Not all fields of this record should be used. Some of the fields are for internal use only. (PathOnly
for example, is only provided for Kylix compatibility)
TWeekNameArray = Array[1..7] of string
TWeekNameArray is used in the day long and short name arrays.
TWordArray = Array[0..16383] of Word
TWordArray is a generic array definition, mostly for use as a base type of the PWordArray (1492)
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.
1499
76.13.3
Variables
CurrencyDecimals : Bytedeprecated
CurrencyDecimals is the number of decimals to be used when formatting a currency. It is used
by the float 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.
This constant is deprecated. You should use DefaultFormatSettings.CurrencyFormat (1500) instead.
CurrencyFormat : Bytedeprecated
CurrencyFormat is the default format string for positive currencies. It is used by the float 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.
This constant is deprecated. You should use DefaultFormatSettings.CurrencyFormat (1500) instead.
CurrencyString : stringdeprecated
CurrencyString is the currency symbol for the current locale. It is used by the float 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.
This constant is deprecated. You should use DefaultFormatSettings.CurrencyString (1500) instead.
DateSeparator : Chardeprecated
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.
This constant is deprecated. You should use DefaultFormatSettings.DateSeparator (1500) instead.
DecimalSeparator : Chardeprecated
DecimalSeparator is used to display the decimal symbol in floating point numbers or currencies. It is used by the float 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.
This constant is deprecated. You should use DefaultFormatSettings.DecimalSeparator (1500) instead.
FormatSettings : TFormatSettings
FormatSettings is provided for Delphi compatibility, and refers to the DefaultFormatSettings
(1500) variable.
ListSeparator : Chardeprecated
ListSeparator is the character used in lists of values. It is locale dependent.
LongDateFormat : stringdeprecated
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.
This constant is deprecated. You should use DefaultFormatSettings.LongDateFormat (1500) instead.
LongDayNames : TWeekNameArraydeprecated
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.
The array is indexed by values as returned by the DayOfWeek function.
This constant is deprecated. You should use DefaultFormatSettings.LongDayNames (1500) instead.
LongMonthNames : TMonthNameArraydeprecated
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.
This constant is deprecated. You should use DefaultFormatSettings.LongMonthNames (1500) instead.
LongTimeFormat : stringdeprecated
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.
This constant is deprecated. You should use DefaultFormatSettings.LongTimeFormat (1500) instead.
NegCurrFormat : Bytedeprecated
CurrencyFormat is the default format string for negative currencies. It is used by the float 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
1501
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
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 (1528) 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 configuration file routines GetAppConfigDir (1577) and GetAppConfigFile (1578)
use a default application name to construct a directory or filename. This callback can be used to
provide an alternative application name.
Since the result of this callback will be used to construct a filename, care should be taken that the
returned name does not contain directory separator characters or characters that cannot appear in a
filename.
OnGetTempDir : TGetTempDirEvent
1502
OnGetTempDir can be used to provide custom behaviour for the GetTempDir (1582) 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 (1583) function. Note that the values for Prefix and Dir should be observed.
OnGetVendorName : TGetVendorNameEvent
OnGetVendorName must be set in order for VendorName (1634) to return a value. It will then
be used in GetAppConfigDir (1577) and GetAppConfigFile (1578) to determine the configuration
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 (1598) 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 : stringdeprecated
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.
This constant is deprecated. You should use DefaultFormatSettings.ShortDateFormat (1500) instead.
ShortDayNames : TWeekNameArraydeprecated
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.
The array is indexed by values as returned by the DayOfWeek function.
This constant is deprecated. You should use DefaultFormatSettings.ShortDayNames (1500) instead.
ShortMonthNames : TMonthNameArraydeprecated
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.
This constant is deprecated. You should use DefaultFormatSettings.ShortMonthNames (1500) instead.
ShortTimeFormat : stringdeprecated
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.
This constant is deprecated. You should use DefaultFormatSettings.ShortTimeFormat (1500) instead.
1503
SysLocale : TSysLocale
SysLocale is initialized by the initialization code of the SysUtils unit. For an explanation of the
fields, see TSysLocale (1498)
ThousandSeparator : Chardeprecated
ThousandSeparator is used to separate groups of thousands in floating point numbers or currencies. It is used by the float 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.
This constant is deprecated. You should use DefaultFormatSettings.ThousandSeparator (1500) instead.
TimeAMString : stringdeprecated
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.
This constant is deprecated. You should use DefaultFormatSettings.TimeAMString (1500) instead.
TimePMString : stringdeprecated
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.
This constant is deprecated. You should use DefaultFormatSettings.TimePMString (1500) instead.
TimeSeparator : Chardeprecated
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 string
TrueBoolStrs contains the strings that will result in a True return value by StrToBool (1613).
TwoDigitYearCenturyWindow : Word
Window to determine what century 2 digit years are in.
76.14
76.14.1
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.
76.14.2
Abort
76.14.3
AddDisk
76.14.4
AddTerminateProc
76.14.5
AdjustLineBreaks
76.14.6
AnsiCompareFileName
1506
76.14.7
AnsiCompareStr
One
One
One
One
string
string
string
string
,
,
,
,
One
one
One
One
smaller s t r i n g ) ;
string );
string );
t a l l string );
1507
76.14.8
AnsiCompareText
One
One
One
One
string
string
string
string
,
,
,
,
One
one
One
One
smaller s t r i n g ) ;
string );
string );
t a l l string );
1508
76.14.9
AnsiDequotedStr
Synopsis:
Declaration: function AnsiDequotedStr(const S: string;AQuote: Char) : string
Visibility: default
Description:
76.14.10
AnsiExtractQuotedStr
76.14.11
AnsiLastChar
1509
Errors: None.
See also: AnsiStrLastChar (1514)
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 .
76.14.12
AnsiLowerCase
1510
76.14.13
AnsiLowerCaseFileName
76.14.14
AnsiPos
76.14.15
AnsiQuotedStr
76.14.16
AnsiSameStr
76.14.17
AnsiSameText
76.14.18
AnsiStrComp
1512
Begin
Testit (
Testit (
Testit (
Testit (
End .
One
One
One
One
76.14.19
string
string
string
string
,
,
,
,
One
one
One
One
smaller s t r i n g ) ;
string );
string );
t a l l string );
AnsiStrIComp
1513
T e s t i t ( One s t r i n g , one s t r i n g ) ;
T e s t i t ( One s t r i n g , One s t r i n g ) ;
T e s t i t ( One s t r i n g , One t a l l s t r i n g ) ;
End .
76.14.20
AnsiStrLastChar
76.14.21
One
One
One
One
string
string
string
string
,
,
,
,
One s m a l l e r s t r i n g , 2 5 5 ) ;
One S t r i n g , 4 ) ;
1 string ,0);
One s t r i n g . , 9 ) ;
AnsiStrLComp
1514
76.14.22
AnsiStrLIComp
1515
end ;
Begin
Testit (
Testit (
Testit (
Testit (
End .
76.14.23
One
ONE
One
One
string
STRING
string
STRING
,
,
,
,
One s m a l l e r s t r i n g , 2 5 5 ) ;
one S t r i n g , 4 ) ;
1 STRING , 0 ) ;
one s t r i n g . , 9 ) ;
AnsiStrLower
76.14.24
AnsiStrPos
1516
Description: AnsiStrPos returns a pointer to the first 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 (1511), AnsiStrScan (1517), AnsiStrRScan (1517)
76.14.25
AnsiStrRScan
76.14.26
AnsiStrScan
76.14.27
AnsiStrUpper
1517
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 .
76.14.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 (1517), AnsiStrLower (1516), AnsiLowerCase (1510)
Listing: ./sysutex/ex61.pp
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 .
1518
76.14.29
AnsiUpperCaseFileName
76.14.30
AppendStr
76.14.31
ApplicationName
Errors: None.
See also: GetAppConfigDir (1577), OnGetApplicationName (1502), GetAppConfigFile (1578), ConfigExtension (1484)
76.14.32
AssignStr
76.14.33
BCDToInt
1520
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 .
76.14.34
Beep
76.14.35
BoolToStr
76.14.36
BytesOf
76.14.37
ByteToCharIndex
76.14.38
ByteToCharLen
76.14.39
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 (1496), StrByteType (1601)
76.14.40
CallTerminateProcs
1522
76.14.41
ChangeFileExt
UnicodeString;
UnicodeString) : UnicodeString
RawByteString;
RawByteString) : RawByteString
Visibility: default
Description: ChangeFileExt changes the file 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: ExtractFileExt (1546), ExtractFileName (1547), ExtractFilePath (1547), ExpandFileName (1543)
76.14.42
CharInSet
76.14.43
CharToByteLen
1523
76.14.44
CodePageNameToCodePage
76.14.45
CodePageToCodePageName
76.14.46
CompareMem
76.14.47
CompareMemRange
76.14.48
CompareStr
One
One
One
One
string
string
string
string
,
,
,
,
One
one
One
One
smaller s t r i n g ) ;
string );
string );
t a l l string );
1525
76.14.49
CompareText
76.14.50
One
One
One
One
string
string
string
string
,
,
,
,
One
one
One
One
smaller s t r i n g ) ;
string );
string );
t a l l string );
ComposeDateTime
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 (547)
76.14.51
ConcatPaths
76.14.52
CreateDir
1527
76.14.53
! )
)
! )
);
CreateGUID
76.14.54
CurrentYear
Errors: None.
See also: Date (1529), Time (1625), Now (1593)
76.14.55
CurrToStr
76.14.56
CurrToStrF
76.14.57
Date
1529
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 .
76.14.58
DateTimeToFileDate
76.14.59
DateTimeToStr
1530
Description: DateTimeToStr returns a string representation of DateTime using the formatting specified in
LongDateTimeFormat. It corresponds to a call to FormatDateTime(c,DateTime) (see
formatchars (1482)).
Note that if the time part is 0 (i.e. midnight), no time is appended.
Errors: None.
See also: FormatDateTime (1575)
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 .
76.14.60
, DateTimeToStr (Now ) ) ;
, FormatDateTime ( c ,Now ) ) ;
DateTimeToString
1531
Var S : A n s i S t r i n g ;
begin
DateTimeToString ( S , Fmt , Date ) ;
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 .
76.14.61
" Today i s
" Today i s
" Today i s
The t i m e
The t i m e
The t i m e
DateTimeToSystemTime
1532
End .
76.14.62
DateTimeToTimeStamp
76.14.63
DateToStr
1533
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 ;
Begin
W r i t e l n ( Format ( Today i s : % s , [ DateToStr ( Date ) ] ) ) ;
End .
76.14.64
DayOfWeek
76.14.65
DecodeDate
1534
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 ;
Begin
DecodeDate ( Date , YY,MM,DD ) ;
W r i t e l n ( Format ( Today i s %d/%d/%d , [ dd ,mm, yy ] ) ) ;
End .
76.14.66
DecodeDateFully
76.14.67
DecodeTime
1535
76.14.68
DeleteFile
76.14.69
DirectoryExists
1536
76.14.70
DiskFree
76.14.71
Size o f c u r r e n t d i s k
:
( ( = , DiskSize ( 0 ) div 1 0 2 4 ,
Free space o f c u r r e n t d i s k :
( ( = , Diskfree ( 0 ) div 1 0 2 4 ,
, DiskSize ( 0 ) ) ;
k) );
, Diskfree ( 0 ) ) ;
k) );
DiskSize
Remark: Under Linux, and Unix in general, the concept of disk is different than the dos one, since the
filesystem is seen as one big directory tree. For this reason, the DiskFree (1537) and DiskSize
functions must be mimicked using filenames that reside on the partitions. For more information, see
AddDisk (1505)
For an example, see DiskFree (1537).
Errors: On error, -1 is returned.
See also: DiskFree (1537), AddDisk (1505)
76.14.72
DisposeStr
76.14.73
DoDirSeparators
1538
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 .
76.14.74
(
(
(
(
GetCurrentDir ) ;
c : \ pp \ b i n \ win32 ) ;
/ usr / l i b / fpc ) ;
\ usr \ l i b \ fpc ) ;
EncodeDate
76.14.75
EncodeTime
1539
Visibility: default
Description: EncodeTime encodes the Hour, Minute, Second, MilliSecond variables to a TDateTime
format result. It does the opposite of the DecodeTime (1535) 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 (1639) exception is raised.
See also: EncodeDate (1539), DecodeTime (1535)
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 .
76.14.76
ExceptAddr
76.14.77
ExceptFrameCount
76.14.78
ExceptFrames
Synopsis:
Declaration: function ExceptFrames : PCodePointer
Visibility: default
Description:
See also: ExceptFrameCount (1540), ExceptAddr (1540), ExceptObject (1541), #rtl.system.ExceptProc (1232)
76.14.79
ExceptionErrorMessage
76.14.80
ExceptObject
76.14.81
ExcludeLeadingPathDelimiter
See also: IncludeTrailingPathDelimiter (1586), IncludeLeadingPathDelimiter (1585), ExcludeTrailingPathDelimiter (1542), ConcatPaths (1527)
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
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 .
76.14.82
ExcludeTrailingBackslash
76.14.83
ExcludeTrailingPathDelimiter
1542
76.14.84
ExecuteProcess
76.14.85
ExeSearch
76.14.86
ExpandFileName
Description: ExpandFileName expands the filename to an absolute filename. It changes all directory separator
characters to the one appropriate for the system first.
If an empty filename is passed, it is expanded to the current directory.
Errors: None.
See also: ExpandFileNameCase (1544), ExtractFileName (1547), ExtractFilePath (1547), ExtractFileDir (1545),
ExtractFileDrive (1546), ExtractFileExt (1546), ExtractRelativePath (1547)
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 ) ) ;
Begin
T e s t i t ( ex33 . pp ) ;
T e s t i t ( ParamStr ( 0 ) ) ;
T e s t i t ( / pp / b i n / win32 / ppc386 ) ;
T e s t i t ( \ pp \ b i n \ win32 \ ppc386 ) ;
Testit ( . );
End .
76.14.87
ExpandFileNameCase
Synopsis: Expand a filename entered as case insensitive to the full path as stored on the disk.
Declaration: function ExpandFileNameCase(const FileName: UnicodeString;
out MatchFound: TFilenameCaseMatch)
: UnicodeString
function ExpandFileNameCase(const FileName: RawByteString;
out MatchFound: TFilenameCaseMatch)
: RawByteString
Visibility: default
Description: On case insensitive platforms, ExpandFileNameCase behaves similarly to ExpandFileName
(1543) except for the fact that it returns the final part of the path with the same case of letters as
found on the disk (if it exists - otherwise the case equals the one provided on input). On case sensitive
platforms it also checks whether one or more full paths exist on disk which would correspond to the
provided input if treated case insensitively and returns the first such match found and information
whether the match is unique or not.
Note that the behaviour is basically undefined if the input includes wildcards characters. Normally,
wildcards in the last part of path provided on input are resolved to the first corresponding item found
on the disk, but it is better not to rely on that and use other more suitable functions if working with
wildcards like FindFirst (1559)/FindNext (1560).
Errors: None.
1544
See also: ExpandFileName (1543), ExtractFileName (1547), ExtractFilePath (1547), ExtractFileDir (1545),
ExtractFileDrive (1546), ExtractFileExt (1546), ExtractRelativePath (1547)
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 ) ) ;
Begin
T e s t i t ( ex33 . pp ) ;
T e s t i t ( ParamStr ( 0 ) ) ;
T e s t i t ( / pp / b i n / win32 / ppc386 ) ;
T e s t i t ( \ pp \ b i n \ win32 \ ppc386 ) ;
Testit ( . );
End .
76.14.88
ExpandUNCFileName
76.14.89
ExtractFileDir
See also: ExtractFileName (1547), ExtractFilePath (1547), ExtractFileDir (1545), ExtractFileDrive (1546),
ExtractFileExt (1546), ExtractRelativePath (1547)
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 .
( Paramstr ( 0 ) ) ;
( / u s r / l o c a l / b i n / mysqld ) ;
( c : \ pp \ b i n \ win32 \ ppc386 . exe ) ;
( / pp / b i n / win32 / ppc386 . exe ) ;
76.14.90
FileName
Has Name
Has Path
Has E x t e n s i on
Has D i r e c t o r y
Has D r i v e
:
:
:
:
:
:
,F ) ;
, ExtractFileName ( F ) ) ;
, ExtractFilePath (F ) ) ;
, ExtractFileExt (F ) ) ;
, ExtractFileDir (F ) ) ;
, ExtractFileDrive (F ) ) ;
ExtractFileDrive
76.14.91
ExtractFileExt
Errors: None.
See also: ChangeFileExt (1523), ExtractFileName (1547), ExtractFilePath (1547), ExtractFileDir (1545), ExtractFileDrive (1546), ExtractFileExt (1546), ExtractRelativePath (1547)
76.14.92
ExtractFileName
76.14.93
ExtractFilePath
76.14.94
ExtractRelativepath
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 (1547), ExtractFilePath (1547), ExtractFileDir (1545), ExtractFileDrive (1546),
ExtractFileExt (1546)
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 .
(
(
(
(
76.14.95
/ pp / s r c / c o m p i l e r , / pp / b i n / win32 / ppc386 ) ;
/ pp / b i n / win32 / ppc386 , / pp / s r c / c o m p i l e r ) ;
e : / pp / b i n / win32 / ppc386 , d : / pp / s r c / c o m p i l e r ) ;
e : \ pp \ b i n \ win32 \ ppc386 , d : \ pp \ s r c \ c o m p i l e r ) ;
ExtractShortPathName
76.14.96
FileAge
1548
: Boolean
function FileAge(const FileName: RawByteString;
out FileDateTime: TDateTime;FollowLink: Boolean)
: Boolean
function FileAge(const FileName: RawByteString) : LongInt
Visibility: default
Description: FileAge returns the last modification time of file FileName. The FileDate format can be transformed to TDateTime format with the FileDateToDateTime (1551) function.
Fileage cannot be used on directories, it will return -1 if FileName indicates a directory.
Errors: In case of errors, -1 is returned.
See also: FileDateToDateTime (1551), FileExists (1551), FileGetAttr (1552)
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 .
76.14.97
FileClose
1549
76.14.98
FileCreate
UnicodeString) : THandle
UnicodeString;Rights: Integer)
UnicodeString;ShareMode: Integer;
: THandle
RawByteString) : THandle
RawByteString;Rights: Integer)
RawByteString;ShareMode: Integer;
: THandle
Visibility: default
Description: FileCreate creates a new file with name FileName on the disk and returns a file handle which
can be used to read or write from the file with the FileRead (1555) and FileWrite (1558) functions.
If a file 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 flags) of the created file to the specified 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 THandle(-1).
See also: FileClose (1549), FileWrite (1558), FileOpen (1554), FileRead (1555), FileTruncate (1558), FileSeek (1556)
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 ) ) ;
1550
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 .
76.14.99
FileDateToDateTime
76.14.100
FileExists
Note that this function accepts a single filename as an argument, without wildcards. To check for the
existence of multiple files, see the FindFirst (1559) function.
Errors: None.
See also: FindFirst (1559), FileAge (1548), FileGetAttr (1552), FileSetAttr (1557)
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 .
76.14.101
FileGetAttr
1552
F : = F i l e G e t A t t r (Name ) ;
I f F<>1 then
begin
W r i t e l n ( T e s t i n g : ,Name ) ;
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 ) ) ;
( . );
( / );
76.14.102
FileGetDate
1553
FileClose ( F ) ;
DeleteFile ( t e s t . dat ) ;
End .
76.14.103
FileIsReadOnly
76.14.104
FileOpen
4.File locking is advisory on Unix platforms. This means that the locks are only checked when
a file is opened using a file 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 file using
this mode will always succeed under Unix as far as the locking is concerned, even if the file has
already been opened using fmShareExclusive.
5.Under Solaris, closing a single file handle associated with a file will result in all locks on that
file (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 (1550)
Errors: On Error, THandle(-1) is returned.
See also: fmOpenRead (1486), fmOpenWrite (1486), fmOpenReadWrite (1486), fmShareDenyWrite (1486),
fmShareExclusive (1486), fmShareDenyRead (1486), fmShareDenyNone (1486), fmShareCompat
(1486), FileClose (1549), FileWrite (1558), FileCreate (1550), FileRead (1555), FileTruncate (1558),
FileSeek (1556)
76.14.105
FileRead
76.14.106
FileSearch
UnicodeString
UnicodeString
RawByteString
RawByteString
Visibility: default
Description: FileSearch looks for the file Name in DirList, where dirlist is a list of directories, separated
by semicolons or colons. It returns the full filename of the first match found. The optional Options
parameter may be specified to influence the behaviour of the search algorithm. It is a set of the
following options:
sfoImplicitCurrentDirAlways search the current directory first, even if it is not specified.
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.
Errors: On error, an empty string is returned.
See also: ExpandFileName (1543), FindFirst (1559)
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 .
76.14.107
, FileSearch ( FN, P ) ) ;
FileSeek
fsFromEndOffset is relative to the end of the file. This means that Offset can only be zero or
negative in this case.
If successfull, the function returns the new file position, relative to the beginning of the file.
Remark: The abovementioned constants do not exist in Delphi.
Errors: On error, -1 is returned.
See also: FileClose (1549), FileWrite (1558), FileCreate (1550), FileOpen (1554), FileRead (1555), FileTruncate (1558)
Listing: ./sysutex/ex42.pp
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 .
76.14.108
FileSetAttr
76.14.109
FileSetDate
Description: FileSetDate sets the file date of the open file with handle Handle or to Age, where Age is a
DOS date-and-time stamp value.
Alternatively, the filename may be specified with the FileName argument. This variant of the call
is mandatory on unices, since there is no OS support for setting a file timestamp based on a handle.
(the handle may not be a real file 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.
76.14.110
FileTruncate
76.14.111
FileWrite
76.14.112
FindClose
Description: FindClose ends a series of FindFirst (1559)/FindNext (1560) 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 (1559).
Errors: None.
See also: FindFirst (1559), FindNext (1560)
76.14.113
FindCmdLineSwitch
76.14.114
FindFirst
1559
It is a common misconception that Attr specifies a set of attributes which must be matched in order
for a file to be included in the list. This is not so: The value of Attr specifies additional attributes,
this means that the returned files are either normal files or have an attribute which is present in Attr.
Specifically: specifying faDirectory as a value for Attr does not mean that only directories
will be returned. Normal files and directories will be returned.
The Rslt record can be fed to subsequent calls to FindNext, in order to find other files matching
the specifications.
Remark: A FindFirst call must always be followed by a FindClose (1558) 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 (1558), FindNext (1560)
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 ;
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 .
76.14.115
FindNext
1560
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 (1559)
Errors: On error (no more file is found), a nonzero constant is returned.
See also: FindFirst (1559), FindClose (1558)
76.14.116
FloattoCurr
76.14.117
FloatToDateTime
76.14.118
FloatToDecimal
76.14.119
FloatToStr
(0.0);
(1.1);
( 1 . 1 e 3);
( 1 . 1 e 20);
1562
Testit
Testit
Testit
Testit
End .
( 1 . 1 e 200);
(1.1 e+3);
( 1 . 1 e+20);
( 1 . 1 e+200);
76.14.120
FloatToStrF
Value, rounded off to Digits numbers. If the number is too large then the result will be in
scientific 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 scientific 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 (1562), FloatToText (1565)
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 ;
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 :
Extended ) ;
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 .
(1.1);
( 1 . 1 E1 ) ;
( 1 . 1 E1);
( 1 . 1 E5 ) ;
( 1 . 1 E5);
( 1 . 1 E10 ) ;
( 1 . 1 E10);
( 1 . 1 E15 ) ;
( 1 . 1 E15);
( 1 . 1 E100 ) ;
( 1 . 1 E100);
1564
76.14.121
FloatToText
Extended ) ;
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
(1.1);
( 1 . 1 E1 ) ;
( 1 . 1 E1);
( 1 . 1 E5 ) ;
( 1 . 1 E5);
1565
Testit
Testit
Testit
Testit
Testit
Testit
End .
( 1 . 1 E10 ) ;
( 1 . 1 E10);
( 1 . 1 E15 ) ;
( 1 . 1 E15);
( 1 . 1 E100 ) ;
( 1 . 1 E100);
76.14.122
FloatToTextFmt
76.14.123
FmtStr
1566
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 .
76.14.124
ForceDirectories
76.14.125
Format
1567
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 specified, then the string will have at least
Precision digits in it. If needed, the string is (left) padded with zeroes.
EScientific format. The next argument in the Args array should be a Floating point value. The
argument is converted to a decimal string using scientific notation, using FloatToStrF (1563),
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 specifier formats its argument as follows:
FloatToStrF(Argument,ffexponent,Precision,3)
FFixed point format. The next argument in the Args array should be a floating point value. The argument is converted to a decimal string, using fixed notation (see FloatToStrF (1563)). Precision
indicates the number of digits following the decimal point.
In short, the F specifier formats its argument as follows:
FloatToStrF(Argument,ffFixed,ffixed,9999,Precision)
GGeneral number format. The next argument in the Args array should be a floating point value.
The argument is converted to a decimal string using fixed point notation or scientific notation,
depending on which gives the shortest result. Precision is used to determine the number of
digits after the decimal point.
In short, the G specifier formats its argument as follows:
FloatToStrF(Argument,ffGeneral,Precision,3)
MCurrency format. the next argument in the Args array must be a floating point value. The argument is converted to a decimal string using currency notation. This means that fixed-point
notation is used, but that the currency symbol is appended. If precision is specified, then then it
overrides the CurrencyDecimals global variable used in the FloatToStrF (1563)
In short, the M specifier formats its argument as follows:
FloatToStrF(Argument,ffCurrency,9999,Precision)
NNumber format. This is the same as fixed 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 specified, 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 specified, 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 specified then the resulting hexadecimal representation will have at
least Precision characters in it (with a maximum value of 32).
1568
1569
{ 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 ) ;
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 :
[ 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
1570
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 :
end ;
end ;
w r i t e l n ( Press e n t e r ) ;
readln ;
end ;
,E . Message ) ;
{ 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 ) ;
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 ) ;
1571
1572
1573
TestNegativeExponential ;
TestSmallExponential ;
TestSmallNegExponential ;
end .
76.14.126
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 (1567) and stores the result in Buf.
See also: Format (1567)
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 =
Begin
S: = ;
SetLength ( S , FormatBuf ( S[ 1 ] , 2 5 5 , Fmt [ 1 ] , Length ( Fmt ) , [ Format ] ) ) ;
Writeln ( S ) ;
End .
76.14.127
FormatCurr
76.14.128
FormatDateTime
76.14.129
FormatFloat
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 first . 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 scientific notation. If E+ or E- (or their lowercase counterparts) are
present then scientific notation is used. The number of digits in the output string is determined
by the number of 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 (1562)
Listing: ./sysutex/ex89.pp
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
1576
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 .
76.14.130
FreeAndNil
76.14.131
GetAppConfigDir
Synopsis: Return the appropriate directory for the applications configuration files.
Declaration: function GetAppConfigDir(Global: Boolean) : string
Visibility: default
Description: GetAppConfigDir returns the name of a directory in which the application should store its configuration files 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 specific for the user who is executing the program. On systems that do not support
multi-user environments, these two directories may be the same.
The directory which is returned is the name of the directory where the application is supposed to
store files. This does not mean that the directory exists, or that the user can write in this directory
(especially if Global=True). It just returns the name of the appropriate location. Also note that
the returned name always contains an 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 reflects common practice
on that system.
The application name is deduced from the binary name via the ApplicationName (1519) call, but can
be configured by means of the OnGetApplicationName (1502) callback.
If VendorName (1634) is not-empty, then VendorName will also be inserted before the applicationspecific directory.
Errors: None.
See also: GetAppConfigFile (1578), ApplicationName (1519), OnGetApplicationName (1502), CreateDir
(1527), SysConfigDir (1490), VendorName (1634)
1577
76.14.132
GetAppConfigFile
76.14.133
GetCurrentDir
1578
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 .
76.14.134
, GetCurrentDir ) ;
GetDirs
1579
76.14.135
GetEnvironmentString
76.14.136
GetEnvironmentVariable
76.14.137
GetEnvironmentVariableCount
1580
Var
I : Integer ;
begin
For I : = 1 to GetEnvironmentVariableCount do
Writeln ( i : 3 , : , GetEnvironmentString ( i ) ) ;
end .
76.14.138
GetFileHandle
76.14.139
GetLastOSError
76.14.140
GetLocalTime
1581
76.14.141
GetLocalTimeOffset
76.14.142
GetModuleName
76.14.143
GetTempDir
1582
76.14.144
GetTempFileName
76.14.145
GetTickCount
76.14.146
GetTickCount64
1583
76.14.147
GetUserDir
76.14.148
GuidCase
76.14.149
GUIDToString
76.14.150
HashName
1584
76.14.151
HookSignal
76.14.152
IncAMonth
76.14.153
IncludeLeadingPathDelimiter
1585
76.14.154
IncludeTrailingBackslash
76.14.155
IncludeTrailingPathDelimiter
76.14.156
IncMonth
1586
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 ) ) ;
W r i t e l n ( 6 months ago : , DateToStr ( IncMonth ( ThisDay , 6 ) ) ) ;
W r i t e l n ( 6 months from now : , DateToStr ( IncMonth ( ThisDay , 6 ) ) ) ;
W r i t e l n ( 1 2 months ago : , DateToStr ( IncMonth ( ThisDay , 1 2 ) ) ) ;
W r i t e l n ( 1 2 months from now : , DateToStr ( IncMonth ( ThisDay , 1 2 ) ) ) ;
W r i t e l n ( 1 8 months ago : , DateToStr ( IncMonth ( ThisDay , 1 8 ) ) ) ;
W r i t e l n ( 1 8 months from now : , DateToStr ( IncMonth ( ThisDay , 1 8 ) ) ) ;
End .
76.14.157
InquireSignal
76.14.158
IntToHex
1587
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
begin
W r i t e l n ( IntToHex ( 1 shl I , 8 ) ) ;
W r i t e l n ( IntToHex ( 1 5 shl I , 8 ) )
end ;
End .
76.14.159
IntToStr
1588
76.14.160
IsDelimiter
76.14.161
IsEqualGUID
76.14.162
IsLeapYear
, IsLeapYear (Y ) ) ;
Begin
1589
76.14.163
IsPathDelimiter
76.14.164
IsValidIdent
1590
Testit
Testit
Testit
Testit
Testit
Testit
End .
(
(
(
(
(
(
76.14.165
_MyObj ) ;
My__Obj1 ) ;
My_1_Obj ) ;
1MyObject ) ;
My@Object ) ;
M123 ) ;
LastDelimiter
76.14.166
LeftStr
1591
Writeln ( L e f t S t r ( abcdefghijklmnopqrstuvwxyz , 1 5 ) ) ;
Writeln ( L e f t S t r ( abcdefghijklmnopqrstuvwxyz , 1 ) ) ;
Writeln ( L e f t S t r ( abcdefghijklmnopqrstuvwxyz , 2 0 0 ) ) ;
End .
76.14.167
LoadStr
76.14.168
LowerCase
76.14.169
MSecsToTimeStamp
Errors: None.
See also: TimeStampToMSecs (1626), DateTimeToTimeStamp (1533)
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 ) ;
W r i t e l n ( Now minus 1 day : , DateTimeToStr (DT ) ) ;
End .
76.14.170
NewStr
Overload
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 (1520).
Errors: If not enough memory is present, an EOutOfMemory exception will be raised.
See also: AssignStr (1520), DisposeStr (1538)
76.14.171
Now
1593
76.14.172
, DateTimeToStr (Now ) ) ;
OutOfMemoryError
76.14.173
QuotedStr
1594
W r i t e l n ( becomes ) ;
W r i t e l n ( QuotedStr (S ) ) ;
End .
76.14.174
RaiseLastOSError
Synopsis: Raise an exception with the last Operating System error code.
Declaration: procedure RaiseLastOSError; Overload
procedure RaiseLastOSError(LastError: Integer);
Overload
Visibility: default
Description: RaiseLastOSError raises an EOSError (1643) 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 (1645)
will be raised.
See also: EOSError (1643), GetLastOSError (1581), Exception (1645)
76.14.175
RemoveDir
76.14.176
RenameFile
76.14.177
ReplaceDate
76.14.178
ReplaceTime
76.14.179
RightStr
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.
1596
Errors: None.
See also: LeftStr (1591), Trim (1627), TrimLeft (1628), TrimRight (1628)
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 .
76.14.180
(
(
(
(
RightStr (
RightStr (
RightStr (
RightStr (
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
,20));
,15));
,1));
,200));
SafeLoadLibrary
76.14.181
SameFileName
76.14.182
SameText
76.14.183
SetCurrentDir
76.14.184
SetDirSeparators
76.14.185
ShowException
1598
Errors: If, for a GUI application, OnShowException (1503) 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 (1541), ExceptAddr (1540), ExceptionErrorMessage (1541)
76.14.186
Sleep
76.14.187
SScanf
1599
76.14.188
StrAlloc
76.14.189
StrBufSize
= Some n i c e s t r i n g ;
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 .
1600
76.14.190
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 (1496), ByteType (1522)
76.14.191
strcat
76.14.192
StrCharLength
76.14.193
strcomp
76.14.194
StrCopy
1602
76.14.195
StrDispose
76.14.196
strecopy
76.14.197
strend
1603
Visibility: default
Description: Returns a pointer to the end of P. (i.e. to the terminating null-character.
Errors: None.
See also: StrLen (1608)
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 .
76.14.198
StrFmt
Synopsis: Format a string with given arguments, store the result in a buffer.
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 (1567) 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 (1567).
See also: StrLFmt (1608), FmtStr (1566), Format (1567), FormatBuf (1574)
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 .
1604
76.14.199
stricomp
76.14.200
StringReplace
76.14.201
StringToGUID
76.14.202
strlcat
1606
76.14.203
strlcomp
76.14.204
StrLCopy
1607
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 .
76.14.205
, StrLCopy ( PP, P , 1 0 ) ) ;
StrLen
76.14.206
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
1608
Visibility: default
Description: StrLFmt will format fmt with Args, as the Format (1567) 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 (1567).
See also: StrFmt (1604), FmtStr (1566), Format (1567), FormatBuf (1574)
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 ;
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 .
76.14.207
strlicomp
76.14.208
strlower
76.14.209
, StrUpper ( P2 ) ) ;
,P1 ) ;
strmove
Var P2 : Pchar ;
begin
P2 : = S t r A l l o c ( StrLen ( P1 ) + 1 ) ;
StrMove ( P2 , P1 , StrLen ( P1 ) + 1 ) ; { P2 : = P1 }
W r i t e l n ( P2 = ,P2 ) ;
StrDispose ( P2 ) ;
end .
1610
76.14.210
strnew
Overload
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 (1602), StrDispose (1603)
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 .
76.14.211
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.
76.14.212
StrPas
Overload
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 system units version.
Errors: None.
See also: StrPCopy (1612), StrPLCopy (1612)
1611
76.14.213
StrPCopy
Overload
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 (1612), StrPas (1611)
76.14.214
StrPLCopy
76.14.215
strpos
1612
76.14.216
strrscan
76.14.217
strscan
Overload
Visibility: default
Description: Returns a pointer to the first occurrence of the character C in the null-terminated string P. If C does
not occur, returns Nil.
Errors: None.
See also: StrRScan (1613), StrPos (1612)
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 .
76.14.218
StrToBool
76.14.219
StrToBoolDef
76.14.220
StrToCurr
76.14.221
StrToCurrDef
1614
76.14.222
StrToDate
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.
Errors: On error (e.g. an invalid date or invalid character), an EConvertError exception is raised.
See also: StrToTime (1621), DateToStr (1533), TimeToStr (1627)
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 ;
, DateToStr ( StrToDate (S ) ) ) ;
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 .
76.14.223
StrToDateDef
1615
76.14.224
StrToDateTime
, DateTimeToStr ( StrToDateTime (S ) ) ) ;
1616
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 .
76.14.225
StrToDateTimeDef
76.14.226
StrToFloat
1617
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
DecimalSeparator : = , ;
Testit ;
DecimalSeparator : = . ;
Testit ;
End .
76.14.227
StrToFloatDef
76.14.228
StrToInt
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.
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.
For hexadecimal values, the prefix 0x or x (case insensitive) may be used as well.
Errors: In case of error, an EConvertError is raised.
See also: IntToStr (1588), StrToIntDef (1620)
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
W r i t e l n ( I n v a l i d number encountered ) ;
end ;
End .
76.14.229
StrToInt64
1619
76.14.230
StrToInt64Def
76.14.231
StrToIntDef
1620
76.14.232
StrToQWord
76.14.233
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 (1621), TryStrToQWord (1633), StrToInt64Def (1620), StrToIntDef (1620)
76.14.234
StrToTime
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 (1615), StrToDateTime (1616), TimeToStr (1627)
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 ;
1621
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 .
76.14.235
, TimeToStr ( StrToTime (S ) ) ) ;
( TimeToStr ( Time ) ) ;
( 12:00 ) ;
( 15:30 ) ;
( 3:30PM ) ;
StrToTimeDef
76.14.236
strupper
76.14.237
Supports
1622
76.14.238
SysErrorMessage
76.14.239
SystemTimeToDateTime
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 .
76.14.240
TextToFloat
1624
76.14.241
Time
, TimeToStr ( Time ) ) ;
1625
76.14.242
TimeStampToDateTime
76.14.243
TimeStampToMSecs
1626
76.14.244
TimeToStr
76.14.245
, TimeToStr ( Time ) ) ;
Trim
1627
76.14.246
TrimLeft
76.14.247
TrimRight
1628
Description: Trim strips blank characters (spaces and control characters) at the end of S and returns the resulting
string. All characters with ordinal values less than or equal to 32 (a space) are stripped.
If the string contains only spaces, an empty string is returned.
Errors: None.
See also: Trim (1627), TrimLeft (1628)
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 .
76.14.248
TryEncodeDate
76.14.249
TryEncodeTime
76.14.250
TryFloatToCurr
Synopsis: Try to convert a float 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 floating 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 (1487) and
MaxCurrency (1487)). If not, False is returned.
Errors: If Value is out of range, False is returned.
See also: FloatToCurr (1561), MinCurrency (1487), MaxCurrency (1487)
76.14.251
TryStringToGUID
76.14.252
TryStrToBool
1630
76.14.253
TryStrToCurr
76.14.254
TryStrToDate
76.14.255
TryStrToDateTime
1631
76.14.256
TryStrToFloat
76.14.257
TryStrToInt
1632
76.14.258
TryStrToInt64
76.14.259
TryStrToQWord
76.14.260
TryStrToTime
1633
76.14.261
UnhookSignal
76.14.262
UpperCase
Overload
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 (1510), LowerCase (1592), AnsiUpperCase (1518)
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 .
76.14.263
VendorName
1634
76.14.264
WideCompareStr
76.14.265
WideCompareText
76.14.266
WideFmtStr
76.14.267
WideFormat
76.14.268
WideFormatBuf
76.14.269
WideLowerCase
1636
76.14.270
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 (1635) returns 0 (zero), i.e. when S1 and S2 are
the same string (taking into account case).
See also: WideSameText (1637), WideCompareStr (1635), WideCompareText (1635), AnsiSameStr (1511)
76.14.271
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 (1635) returns 0 (zero), i.e. when S1 and S2
are the same string (taking into account case).
See also: WideSameStr (1637), WideCompareStr (1635), WideCompareText (1635), AnsiSameText (1512)
76.14.272
WideUpperCase
76.14.273
WrapText
76.15
76.15.1
EAbort
Description
Abort is raised by the Abort (1505) procedure. It is not displayed in GUI applications, and serves
only to immediately abort the current procedure, and return control to the main program loop.
See also: Abort (1505)
76.16
76.16.1
EAbstractError
Description
EAbstractError is raised when an abstract error occurs, i.e. when an unimplemented abstract
method is called.
76.17
76.17.1
EAccessViolation
Description
EAccessViolation is raised when the OS reports an Access Violation, i.e. when invalid memory
is accessed.
See also: EObjectCheck (1642)
76.18
76.18.1
EArgumentException
Description
76.19
76.19.1
EArgumentOutOfRangeException
Description
1638
76.20
76.20.1
EAssertionFailed
Description
76.21
76.21.1
EBusError
Description
76.22
76.22.1
EControlC
Description
EControlC is raised when the user has pressed CTRL-C in a console application.
76.23
76.23.1
EConvertError
Description
EConvertError is raised by the various conversion routines in the SysUtils unit. The message
will contain more specific error information.
76.24
76.24.1
EDivByZero
Description
EDivByZero is used when the operating system or CPU signals a division by zero error.
76.25
76.25.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 (1640), EExternal (1639), EMathError (1642), EExternalException (1639), EAccessViolation (1638), EPrivilege (1643), EStackOverflow (1644), EControlC (1639)
76.26
76.26.1
EExternalException
Description
76.27
EFormatError
76.27.1
Description
EformatError is raised in case of an error in one of the various Format (1567) functions.
See also: Format (1567)
76.28
EHeapMemoryError
76.28.1
Description
76.28.2
Page
1640
Method overview
Method
FreeInstance
76.28.3
Description
Free the exception instance
EHeapMemoryError.FreeInstance
Override
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.
76.29
76.29.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 (??).
See also: EInOutError.ErrorCode (??)
76.30
76.30.1
EInterror
Description
EInterror is used when the operating system or CPU signals an integer operation error, e.g., an
overflow.
1640
76.31
76.31.1
EIntfCastError
Description
76.32
76.32.1
EIntOverflow
Description
EIntOverflow is used when the operating system or CPU signals a integer overflow error.
See also: EIntError (1640), EDivByZero (1639), ERangeError (1644)
76.33
76.33.1
EInvalidCast
Description
EInvalidCast is raised when an invalid typecast error (using the as operator) is encountered.
See also: EIntfCastError (1641)
76.34
76.34.1
EInvalidContainer
Description
EInvalidContainer is not yet used by Free Pascal, and is provided for Delphi compatibility
only.
76.35
76.35.1
EInvalidInsert
Description
EInvalidInsert is not yet used by Free Pascal, and is provided for Delphi compatibility only.
76.36
76.36.1
EInvalidOp
Description
76.37
76.37.1
EInvalidPointer
Description
76.38
76.38.1
EMathError
Description
EMathError is used when the operating system or CPU signals a floating point overflow error.
See also: EIntError (1640), EIntOverflow (1641), EDivByZero (1639), ERangeError (1644)
76.39
76.39.1
ENoConstructException
Description
76.40
76.40.1
ENoThreadSupport
Description
ENoThreadSupport is raised when some thread routines are invoked, and thread support was not
enabled when the program was compiled.
76.41
76.41.1
ENotImplemented
Description
ENotImplemented can be used to raise an exception when a particular call had been defined, but
was not implemented.
76.42
76.42.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.
76.43
76.43.1
EObjectCheck
Description
EObjectCheck is raised when the -CR (check object references) command-line option or {$OBJECTCHECKS
ON} directive is in effect and a Nil reference to an object or class was encountered.
See also: EAccessViolation (1638)
1642
76.44
76.44.1
EOSError
Description
EOSError is raised when some Operating System call fails. The ErrorCode (??) property contains
the operating system error code.
See also: EOSError.ErrorCode (??)
76.45
76.45.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 (1491), EHeapMemoryError (1640), EInvalidPointer (1641)
76.46
76.46.1
EOverflow
Description
EOverflow occurs when a float operation overflows. (i.e. result is too big to represent).
See also: EIntError (1640), EIntOverflow (1641), EDivByZero (1639), ERangeError (1644), EUnderFlow
(1644)
76.47
76.47.1
EPackageError
Description
EPackageError is not yet used by Free Pascal, and is provided for Delphi compatibility only.
76.48
76.48.1
EPrivilege
Description
EPrivilege is raised when the OS reports that an invalid instruction was executed.
76.49
76.49.1
EPropReadOnly
Description
1643
76.50
EPropWriteOnly
76.50.1
Description
76.51
ERangeError
76.51.1
Description
ERangeError is raised by the Free Pascal runtime library if range checking is on, and a range
check error occurs.
See also: EIntError (1640), EDivByZero (1639), EIntOverflow (1641)
76.52
ESafecallException
76.52.1
Description
ESafecallException is not yet used by Free Pascal, and is provided for Delphi compatibility
only.
76.53
EStackOverflow
76.53.1
Description
EStackOverflow occurs when the stack has grown too big (e.g. by infinite recursion).
76.54
EUnderflow
76.54.1
Description
EOverflow occurs when a float operation underflows (i.e. result is too small to represent).
See also: EIntError (1640), EIntOverflow (1641), EDivByZero (1639), ERangeError (1644), EOverFlow (1643)
76.55
EVariantError
76.55.1
Description
76.55.2
Page
1645
Method overview
Method
CreateCode
Description
Create an instance of EVariantError with a particular error code.
1644
76.55.3
EVariantError.CreateCode
76.56
Exception
76.56.1
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 (1541), ExceptAddr (1540), ExceptionErrorMessage (1541), ShowException (1598),
Abort (1505)
76.56.2
Method overview
Page
1645
1646
1647
Method
Create
CreateFmt
CreateFmtHelp
1646
1646
CreateHelp
CreateRes
1646
CreateResFmt
1647
CreateResFmtHelp
1647
CreateResHelp
1647
ToString
76.56.3
Page
1648
1648
Property overview
Properties
HelpContext
Message
76.56.4
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
Nicely formatted version of the exception message
Access
rw
rw
Description
Help context associated with the exception.
Message associated with the exception.
Exception.Create
1645
76.56.5
Exception.CreateFmt
76.56.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.
See also: Exception.Create (1645), Exception.CreateFmt (1646), Exception.CreateResFmt (1646), Exception.Message (1648)
76.56.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 (1646), 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 (1645), Exception.CreateFmt (1646), Exception.CreateRes (1646), Exception.Message
(1648)
76.56.8
Exception.CreateHelp
Synopsis: Constructs a new exception object and sets the help context.
Declaration: constructor CreateHelp(const Msg: string;AHelpContext: LongInt)
Visibility: public
Description: CreateHelp does the same as the Create (1645) constructor, but additionally stores AHelpContext
in the HelpContext (1648) property.
See also: Exception.Create (1645)
1646
76.56.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: LongInt)
Visibility: public
Description: CreateFmtHelp does the same as the CreateFmt (1646) constructor, but additionally stores
AHelpContext in the HelpContext (1648) property.
See also: Exception.CreateFmt (1646)
76.56.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: LongInt)
Visibility: public
Description: CreateResHelp does the same as the CreateRes (1646) constructor, but additionally stores AHelpContext
in the HelpContext (1648) property.
See also: Exception.CreateRes (1646)
76.56.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: LongInt)
Visibility: public
Description: CreateResFmtHelp does the same as the CreateResFmt (1646) constructor, but additionally
stores AHelpContext in the HelpContext (1648) property.
See also: Exception.CreateResFmt (1646)
76.56.12
Exception.ToString
Override
Visibility: public
Description: ToString overrides the ToString method to return a concatenation of classname and Exception.Message (1648).
See also: Exception.Message (1648)
1647
76.56.13
Exception.HelpContext
76.56.14
Exception.Message
76.57
76.57.1
EZeroDivide
Description
76.58
76.58.1
IReadWriteSync
Description
76.59
76.59.1
TMultiReadExclusiveWriteSynchronizer
Description
76.59.2
Page
1648
Interfaces overview
Interfaces
IReadWriteSync
76.60
Description
Read/Write synchronizer
TSimpleRWSync
76.60.1
Description
76.60.2
Page
1648
Interfaces overview
Interfaces
IReadWriteSync
Description
Read/Write synchronizer
1649
Chapter 77
Overview
Starting with D6, types from Windows specific 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.
77.2
77.2.1
E_FAIL = ($80004005)
Defined for Delphi compatibility, this should not be used.
E_INVALIDARG = ($80070057)
Defined for Delphi compatibility, this should not be used.
GUID_NULL : TGUID = {00000000-0000-0000-0000-000000000000}
GUID_NULL is the definition of the NULL (empty) GUID.
LOCK_EXCLUSIVE = 2
Defined for Delphi compatibility, this should not be used.
LOCK_ONLYONCE = 4
Defined for Delphi compatibility, this should not be used.
LOCK_WRITE = 1
Defined for Delphi compatibility, this should not be used.
STATFLAG_DEFAULT = 0
1650
1654
77.2.2
Types
ArgList = Pointer
ArgList is defined 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 defined in the system unit. This is an alias for Delphi/Kylix
compatibility.
LargeUint = QWord
LargeUInt is an alias for the QWord type defined in the system unit. This is an alias for Delphi/Kylix compatibility.
LARGE_INT = Largeint
LARGE_INT is an alias for the Int64 type defined in the system unit. This is an alias for Delphi/Kylix
compatibility.
LARGE_UINT = LargeUint
LARGE_UINT is an alias for the QWord type defined in the system unit. This is an alias for Delphi/Kylix compatibility.
PByte = System.PByte
PByte is defined 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 defined for Delphi/Kylix compatibility and should not be used.
PDouble = System.PDouble
PDouble is defined in the system unit. This is an alias for Delphi/Kylix compatibility.
PDWord = ^DWORD
1655
PStatStg = ^TStatStg
Pointer to TStatStg record.
PXrmOptionDescRec = ^TXrmOptionDescRec
PXrmOptionDescRec is defined for Delphi/Kylix compatibility and should not be used.
Region = Pointer
Region is defined 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 (1659)
tagSIZE = TSize
tagSize is an alias for the TSize (1660) 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 (1668) call. It describes a storage medium (typically a
file).
TBooleanDynArray = Array of Boolean
TBooleanDynArray is a standard definition of a dynamical array of booleans.
TByteDynArray = Array of Byte
TByteDynArray is a standard definition of a dynamical array of (8-bit, unsigned) bytes.
TCardinalDynArray = Array of Cardinal
1657
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 definition of a dynamical array of (64-bit, signed) int64s.
TIntegerDynArray = Array of Integer
TIntegerDynArray is a standard definition 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 (1659)
TListStaticCallback = procedure(data: pointer;arg: pointer)
1658
TPoint is a generic definition 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 definition of a dynamical array of (64-bit, unsigned) QWords.
TRect = packed record
case Integer of
0: (
Left : LongInt;
Top : LongInt;
Right : LongInt;
Bottom : LongInt;
);
1: (
TopLeft : TPoint;
BottomRight : TPoint;
);
end
1659
TRect defines 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 definition of a dynamical array of (8-bit, signed) shortints.
TSingleDynArray = Array of Single
TSingleDynArray is a standard definition of a dynamical array of singles. (smallest floating
point type)
TSize = packed record
cx : LongInt;
cy : LongInt;
end
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 definition of a dynamical array of (16-bit, unsigned) integers.
TSmallPoint = packed record
x : SmallInt;
y : SmallInt;
end
TSmallPoint defines a point in a 2-dimensional plane, just like TPoint (1659), 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 (1668)
function.
TStringDynArray = Array of AnsiString
TStringDynArray is a standard definition of a dynamical array of Ansistrings.
TWideStringDynArray = Array of WideString
TWideStringDynArray is a standard definition of a dynamical array of WideStrings.
TWordDynArray = Array of Word
TWordDynArray is a standard definition of a dynamical array of (16-bit, unsigned) words.
1660
TXrmOptionDescRec = record
end
_FILETIME describes a file time stamp. It is defined or Delphi/Kylix compatibility and should not
be used except when implementing or accessing the IStream interface. The TDateTime type
should be used instead.
77.3
77.3.1
77.3.2
CenterPoint
77.3.3
EqualRect
77.3.4
InflateRect
77.3.5
IntersectRect
77.3.6
IsRectEmpty
1662
77.3.7
OffsetRect
77.3.8
Point
77.3.9
PtInRect
77.3.10
Rect
77.3.11
Size
77.3.12
UnionRect
77.4
77.4.1
IClassFactory
Description
77.4.2
Page
1664
1665
77.4.3
Method overview
Method
CreateInstance
LockServer
Description
Create a new instance of an interface.
Lock ActiveX server object.
IClassFactory.CreateInstance
1664
77.4.4
IClassFactory.LockServer
77.5
77.5.1
ISequentialStream
Description
ISequentialStream is the interface for streams which only support sequential reading of chunks
of data. It is defined for Delphi/Kylix compatibility and should not be used.
See also: IStream (1665)
77.5.2
Page
1665
1665
77.5.3
Method overview
Method
Read
Write
Description
Read data from the stream
Write data to the stream
ISequentialStream.Read
77.5.4
ISequentialStream.Write
77.6
77.6.1
IStream
Description
An abstract interface for an external (non pascal) stream, as defined in Microsoft COM interfaces
1665
77.6.2
Page
1668
1667
1666
1667
1667
1666
1666
1668
1667
77.6.3
Method overview
Method
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
IStream.Seek
77.6.4
IStream.SetSize
77.6.5
IStream.CopyTo
1666
77.6.6
IStream.Commit
77.6.7
IStream.Revert
77.6.8
IStream.LockRegion
77.6.9
IStream.UnlockRegion
1667
77.6.10
IStream.Stat
77.6.11
IStream.Clone
1668
Chapter 78
Used units
Table 78.1: Used units by unit typinfo
Name
System
sysutils
78.2
Page
1224
1476
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 definitions. This unit is
included in the documentation sources, in the directory typinfex.
78.3
Auxiliary functions
1669
Table 78.2:
Name
GetEnumName (1687)
GetEnumValue (1689)
GetEnumNameCount (1688)
GetTypeData (1701)
SetToString (1711)
StringToSet (1713)
78.4
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
78.5
Description
Return the value of an enumerated type property
Return the value of a float 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 float 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
1670
Table 78.4:
Name
FindPropInfo (1686)
GetPropInfo (1696)
GetPropInfos (1696)
GetObjectPropClass (1694)
GetPropList (1697)
IsPublishedProp (1703)
IsStoredProp (1703)
PropIsType (1704)
PropType (1705)
78.6
78.6.1
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
78.6.2
Types
PManagedField = ^TManagedField
PManagedField is a pointer to TManagedField (1675). It is used to describe automatically managed fields in records when the type kind is tkRecord.
PProcedureParam = ^TProcedureParam
PProcedureParam is a pointer to TProcedureParam. It is used in TProcedureSignature
(1713).
PPropInfo = ^TPropInfo
Pointer to TPropInfo (1677) record
PPropList = ^TPropList
Pointer to TPropList (1677)
PPTypeInfo = ^PTypeInfo
1672
TArrayTypeData is used to describe arrays in RTTI. It can be encountered when the type kind
is tkArray, and is used for both static and dynamic arrays and single or multi-dimensional arrays.
The type of the array elements is described in elType, and the ranges for each of the dimensions
(specified in DimCount in Dims.
TCallConv = (ccReg,ccCdecl,ccPascal,ccStdCall,ccSafeCall,ccCppdecl,
ccFar16,ccOldFPCCall,ccInternProc,ccSysCall,ccSoftFloat,
ccMWPascal)
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.
Softfloat calling convention.
stdcall calling convention.
SysCall calling convention.
1673
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)
Explanation
Comp-type float
Currency-type float
Double-sized float
Extended-size float
Single-sized float
Explanation
Interface is a dispatch interface
Interface is a dual dispatch interface
Interface has GUID identifier
Interface has a string GUID identifier
Type of interface.
TIntfFlags = Set of TIntfFlag
Set of TIntfFlag (1674).
TIntfFlagsBase = Set of TIntfFlag
Set of TIntfFlag (1674).
1674
Explanation
Class constructor method.
Class destructor method.
Class function
Class procedure
Class constructor
Class Desctructor
Function method
Operator overloader
Procedure method.
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)
1675
Explanation
Parameter is passed by address
Parameter is an array parameter
Parameter is a const parameter (i.e. cannot be modified)
Parameter is a string parameter
Parameter is passed by reference
Parameter is a var parameter (passed by reference)
The TPropData record is not used, but is provided for completeness and compatibility with Delphi.
TPropInfo = packed record
PropType : PTypeInfo;
GetProc : CodePointer;
SetProc : CodePointer;
StoredProc : CodePointer;
Index : Integer;
Default : LongInt;
NameIndex : SmallInt;
PropProcs : Byte;
Name : ShortString;
end
1676
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 field 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
case TTypeKind of
tkUnKnown: (
);, tkLString: (
);, tkWString: (
);, tkVariant: (
);, tkUString: (
);
tkAString: (
CodePage : Word;
);
tkInteger: (
OrdType : TOrdType;
case TTypeKind of
tkInteger: (
MinValue : LongInt;
MaxValue : LongInt;
case TTypeKind of
tkEnumeration: (
BaseType : PTypeInfo;
NameList : ShortString;
);
);, tkChar: (
MinValue : LongInt;
MaxValue : LongInt;
case TTypeKind of
tkEnumeration: (
BaseType : PTypeInfo;
NameList : ShortString;
);
);, tkEnumeration: (
MinValue : LongInt;
MaxValue : LongInt;
case TTypeKind of
1677
tkEnumeration: (
BaseType : PTypeInfo;
NameList : ShortString;
);
);, tkBool: (
MinValue : LongInt;
MaxValue : LongInt;
case TTypeKind of
tkEnumeration: (
BaseType : PTypeInfo;
NameList : ShortString;
);
);, tkWChar: (
MinValue : LongInt;
MaxValue : LongInt;
case TTypeKind of
tkEnumeration: (
BaseType : PTypeInfo;
NameList : ShortString;
);
);
tkSet: (
CompType : PTypeInfo;
);
);, tkChar: (
OrdType : TOrdType;
case TTypeKind of
tkInteger: (
MinValue : LongInt;
MaxValue : LongInt;
case TTypeKind of
tkEnumeration: (
BaseType : PTypeInfo;
NameList : ShortString;
);
);, tkChar: (
MinValue : LongInt;
MaxValue : LongInt;
case TTypeKind of
tkEnumeration: (
BaseType : PTypeInfo;
NameList : ShortString;
);
);, tkEnumeration: (
MinValue : LongInt;
MaxValue : LongInt;
case TTypeKind of
tkEnumeration: (
BaseType : PTypeInfo;
NameList : ShortString;
);
);, tkBool: (
MinValue : LongInt;
MaxValue : LongInt;
1678
case TTypeKind of
tkEnumeration: (
BaseType : PTypeInfo;
NameList : ShortString;
);
);, tkWChar: (
MinValue : LongInt;
MaxValue : LongInt;
case TTypeKind of
tkEnumeration: (
BaseType : PTypeInfo;
NameList : ShortString;
);
);
tkSet: (
CompType : PTypeInfo;
);
);, tkEnumeration: (
OrdType : TOrdType;
case TTypeKind of
tkInteger: (
MinValue : LongInt;
MaxValue : LongInt;
case TTypeKind of
tkEnumeration: (
BaseType : PTypeInfo;
NameList : ShortString;
);
);, tkChar: (
MinValue : LongInt;
MaxValue : LongInt;
case TTypeKind of
tkEnumeration: (
BaseType : PTypeInfo;
NameList : ShortString;
);
);, tkEnumeration: (
MinValue : LongInt;
MaxValue : LongInt;
case TTypeKind of
tkEnumeration: (
BaseType : PTypeInfo;
NameList : ShortString;
);
);, tkBool: (
MinValue : LongInt;
MaxValue : LongInt;
case TTypeKind of
tkEnumeration: (
BaseType : PTypeInfo;
NameList : ShortString;
);
);, tkWChar: (
MinValue : LongInt;
1679
MaxValue : LongInt;
case TTypeKind of
tkEnumeration: (
BaseType : PTypeInfo;
NameList : ShortString;
);
);
tkSet: (
CompType : PTypeInfo;
);
);, tkBool: (
OrdType : TOrdType;
case TTypeKind of
tkInteger: (
MinValue : LongInt;
MaxValue : LongInt;
case TTypeKind of
tkEnumeration: (
BaseType : PTypeInfo;
NameList : ShortString;
);
);, tkChar: (
MinValue : LongInt;
MaxValue : LongInt;
case TTypeKind of
tkEnumeration: (
BaseType : PTypeInfo;
NameList : ShortString;
);
);, tkEnumeration: (
MinValue : LongInt;
MaxValue : LongInt;
case TTypeKind of
tkEnumeration: (
BaseType : PTypeInfo;
NameList : ShortString;
);
);, tkBool: (
MinValue : LongInt;
MaxValue : LongInt;
case TTypeKind of
tkEnumeration: (
BaseType : PTypeInfo;
NameList : ShortString;
);
);, tkWChar: (
MinValue : LongInt;
MaxValue : LongInt;
case TTypeKind of
tkEnumeration: (
BaseType : PTypeInfo;
NameList : ShortString;
);
);
1680
tkSet: (
CompType : PTypeInfo;
);
);, tkWChar: (
OrdType : TOrdType;
case TTypeKind of
tkInteger: (
MinValue : LongInt;
MaxValue : LongInt;
case TTypeKind of
tkEnumeration: (
BaseType : PTypeInfo;
NameList : ShortString;
);
);, tkChar: (
MinValue : LongInt;
MaxValue : LongInt;
case TTypeKind of
tkEnumeration: (
BaseType : PTypeInfo;
NameList : ShortString;
);
);, tkEnumeration: (
MinValue : LongInt;
MaxValue : LongInt;
case TTypeKind of
tkEnumeration: (
BaseType : PTypeInfo;
NameList : ShortString;
);
);, tkBool: (
MinValue : LongInt;
MaxValue : LongInt;
case TTypeKind of
tkEnumeration: (
BaseType : PTypeInfo;
NameList : ShortString;
);
);, tkWChar: (
MinValue : LongInt;
MaxValue : LongInt;
case TTypeKind of
tkEnumeration: (
BaseType : PTypeInfo;
NameList : ShortString;
);
);
tkSet: (
CompType : PTypeInfo;
);
);, tkSet: (
OrdType : TOrdType;
case TTypeKind of
tkInteger: (
1681
MinValue : LongInt;
MaxValue : LongInt;
case TTypeKind of
tkEnumeration: (
BaseType : PTypeInfo;
NameList : ShortString;
);
);, tkChar: (
MinValue : LongInt;
MaxValue : LongInt;
case TTypeKind of
tkEnumeration: (
BaseType : PTypeInfo;
NameList : ShortString;
);
);, tkEnumeration: (
MinValue : LongInt;
MaxValue : LongInt;
case TTypeKind of
tkEnumeration: (
BaseType : PTypeInfo;
NameList : ShortString;
);
);, tkBool: (
MinValue : LongInt;
MaxValue : LongInt;
case TTypeKind of
tkEnumeration: (
BaseType : PTypeInfo;
NameList : ShortString;
);
);, tkWChar: (
MinValue : LongInt;
MaxValue : LongInt;
case TTypeKind of
tkEnumeration: (
BaseType : PTypeInfo;
NameList : ShortString;
);
);
tkSet: (
CompType : PTypeInfo;
);
);
tkFloat: (
FloatType : TFloatType;
);
tkSString: (
MaxLength : Byte;
);
tkClass: (
ClassType : TClass;
ParentInfo : PTypeInfo;
PropCount : SmallInt;
1682
UnitName : ShortString;
);
tkRecord: (
RecSize : Integer;
ManagedFldCount : Integer;
);
tkHelper: (
HelperParent : PTypeInfo;
ExtendedInfo : PTypeInfo;
HelperProps : SmallInt;
HelperUnit : ShortString;
);
tkMethod: (
MethodKind : TMethodKind;
ParamCount : Byte;
ParamList : Array[0..1023] of Char;
);
tkProcVar: (
ProcSig : TProcedureSignature;
);
tkInt64: (
MinInt64Value : Int64;
MaxInt64Value : Int64;
);
tkQWord: (
MinQWordValue : QWord;
MaxQWordValue : QWord;
);
tkInterface: (
IntfParent : PTypeInfo;
IntfFlags : TIntfFlagsBase;
GUID : TGuid;
IntfUnit : ShortString;
);
tkInterfaceRaw: (
RawIntfParent : PTypeInfo;
RawIntfFlags : TIntfFlagsBase;
IID : TGuid;
RawIntfUnit : ShortString;
IIDStr : ShortString;
);
tkArray: (
ArrayData : TArrayTypeData;
);
tkDynArray: (
elSize : PtrUInt;
elType2 : PTypeInfo;
varType : LongInt;
elType : PTypeInfo;
DynUnitName : ShortStringBase;
);
tkClassRef: (
InstanceType : PTypeInfo;
);
1683
tkPointer: (
RefType : PTypeInfo;
);
end
If the typeinfo kind is tkClass, then the property information follows the UnitName string, as an
array of TPropInfo (1677) records.
TTypeInfo = record
Kind : TTypeKind;
Name : ShortString;
end
1684
Explanation
Array property.
Ansistring property.
Boolean property.
Char property.
Class property.
Class of type
Dynamical array property.
Enumeration type property.
File type (both text and binary)
Float property.
Helper class type.
Int64 property.
Integer property.
Interface property.
Raw interface property.
Longstring property.
Method property.
Object property.
Pointer type
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 (1684) enumeration.
TVmtFieldEntry = packed record
FieldOffset : PtrUInt;
TypeIndex : Word;
Name : ShortString;
end
TVmtFieldEntry records are generated by the compiler for all fields of a record or class that have
RTTI associated with them. They describe the field as known to the compiler.
TVmtFieldTable = packed record
1685
Count : Word;
ClassTab : Pointer;
Fields : Array[0..0] of TVmtFieldEntry;
end
TVmtFieldTable describes the fields 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 (1685) values.
78.7
78.7.1
Var
O : TMyTestObject ;
PT : PTypeData ;
1686
PI :
I ,J
PP :
prI
PPropInfo ;
: Longint ;
PPropList ;
: PPropInfo ;
begin
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 .
78.7.2
, PI ^ .Name ) ;
: , PI ^ .Name ) ;
: );
" w i t h message :
,E . Message ) ;
GetEnumName
1687
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 .
78.7.3
GetEnumNameCount
78.7.4
GetEnumProp
1688
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
:
W r i t e l n ( Get ( name )
:
W r i t e l n ( Get ( p r o p i n f o )
:
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 )
:
SetEnumProp (O, PI , meSecond ) ;
W r i t e l n ( Set ( p r o p i n f o , meSecond ) :
O. Free ;
end .
78.7.5
GetEnumValue
78.7.6
GetFloatProp
1689
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 ;
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 .
78.7.7
GetInt64Prop
1690
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 ;
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 .
78.7.8
GetInterfaceProp
78.7.9
GetMethodProp
1691
Visibility: default
Description: GetMethodProp returns the method the property described by PropInfo or with name Propname
for object Instance. The return type TMethod is defined in the SysUtils unit as:
TMethod = packed record
Code, Data: Pointer;
end;
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 (1708), GetOrdProp (1695), GetStrProp (1700), GetFloatProp (1689), GetInt64Prop
(1690), GetSetProp (1699), GetObjectProp (1693), GetEnumProp (1688)
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 :
TMyTestObject ;
: PPropInfo ;
: TNotifyObject ;
TMethod ;
1692
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 .
78.7.10
);
);
);
);
);
);
);
);
GetObjectProp
Visibility: default
Description: GetObjectProp returns the object which the property described by PropInfo with name Propname
points to for object Instance.
If MinClass is specified, 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
method property of Instance. Specifying an invalid property name in PropName will result
in an EPropertyError exception.
See also: SetMethodProp (1708), GetOrdProp (1695), GetStrProp (1700), GetFloatProp (1689), GetInt64Prop
(1690), GetSetProp (1699), GetObjectProp (1693), GetEnumProp (1688)
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 .
78.7.11
GetObjectPropClass
78.7.12
GetOrdProp
1695
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
: ,O. B o o l e a n F i e l d ) ;
W r i t e l n ( Ord ( Value )
: , Ord (O. B o o l e a n F i e l d ) ) ;
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 .
78.7.13
GetPropInfo
78.7.14
GetPropInfos
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.
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 (1696), GetPropList (1697)
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 .
78.7.15
GetPropList
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 .
78.7.16
GetPropValue
78.7.17
GetRawInterfaceProp
78.7.18
GetSetProp
1699
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 }
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 .
78.7.19
, S e t A s S t r i n g (O. S e t F i e l d ) ) ;
, L o n g i n t (O. S e t F i e l d ) ) ;
, GetSetProp (O, S e t F i e l d ) ) ;
, GetSetProp (O, PI , f a l s e ) ) ;
);
);
GetStrProp
1700
78.7.20
GetTypeData
1701
78.7.21
GetUnicodeStrProp
78.7.22
GetVariantProp
78.7.23
GetWideStrProp
1702
78.7.24
IsPublishedProp
78.7.25
IsStoredProp
Visibility: default
Description: IsStoredProp returns True if the Stored modifier 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 modifier in the declaration of the property, True will be returned.
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 (1703), PropIsType (1704)
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 .
78.7.26
);
);
);
);
));
PropIsType
78.7.27
PropType
1705
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
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 .
78.7.28
SetEnumProp
78.7.29
SetFloatProp
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 (1689).
Errors: No checking is done whether Instance is non-nil, or whether PropInfo describes a valid
float property of Instance. Specifying an invalid property name in PropName will result in
an EPropertyError exception.
See also: GetFloatProp (1689), SetOrdProp (1709), SetStrProp (1710), SetInt64Prop (1707), SetMethodProp
(1708)
78.7.30
SetInt64Prop
78.7.31
SetInterfaceProp
1707
78.7.32
SetMethodProp
78.7.33
SetObjectProp
1708
78.7.34
SetOrdProp
78.7.35
SetPropValue
78.7.36
SetRawInterfaceProp
Errors: If the property PropName does not exist, an EPropertyError exception is raised.
See also: SetInterfaceProp (1707), GetRawInterfaceProp (1699)
78.7.37
SetSetProp
78.7.38
SetStrProp
1710
78.7.39
SetToString
1711
78.7.40
SetUnicodeStrProp
78.7.41
SetVariantProp
78.7.42
SetWideStrProp
1712
78.7.43
StringToSet
78.8
TProcedureSignature
78.8.1
Page
1713
78.8.2
Method overview
Method
GetParam
Description
Get parameter signature
TProcedureSignature.GetParam
78.9
EPropertyConvertError
78.9.1
Description
EPropertyConvertError is not used in the Free Pascal implementation of the typinfo unit, but
is declared for Delphi compatibility.
78.10
78.10.1
EPropertyError
Description
1714
Chapter 79
Overview
The fpwidestring (1715) unit relies on having relevant unicode collation data linked in the binary. The
unicode data is managed using the routines in the unicodedata unit. The FPC project distributes
some unicode collation data in .bco files which can be loaded using the LoadCollation (1724)
routines. The LoadCollation is the main routine of this unit.
All collation data requires at least the Default Unicode Collation Element Table to be registered
(called DUCET). The DUCET encoding is provided by the unicodeducet unit, part of the rtl-unicode
package.
There are two ways to register collations :
1. at compile time: by including the desired collation unit, for example for Russian and Japanese
languages to be available you will have to include collation_ru and collation_ja from package
"rtl-unicode".
2. at runtime using the abovementioned LoadCollation function.
The two ways can co-exist: some collations may be compile time included (for example for most
used collations) and others can be loaded at runtime in the same application.
The binary collation files are endian sensitive:
there are files for little endian systems named collation__le.bco (such as collation_ru_le.bco
and collation_ja_le.bco)
there are files for big endian systems named collation__be.bco (such as collation_ru_be.bco
and collation_ja_be.bco).
Note that the compile time units collation units (collation_lang.pas) include already the unicodeducet.pas (DUCET) unit so it is not necessary to include it manually, contrary to the binary files. So
an application that only uses the binary collation files should at least include the unicodeducet unit
or manually load the binary collation collation_ducet_le.bco or collation_ducet_be.bco, depending
on the endianness of the platform. The LoadCollation (1724) call using a directory and the language
ducet automatically select the correct file.
1715
79.2
79.2.1
79.2.2
Constants
UCS4_HALF_BASE = ($10000)
Offset for UCS4 character encoding
UCS4_HALF_MASK = ($3FF)
Unused currently
UGC_ClosePunctuation = 14
Unicode token category: Close punctuation
UGC_CombiningMark = 6
Unicode token category: Uppercase letter
UGC_ConnectPunctuation = 11
Unicode token category: Connect punctuation
UGC_Control = 25
Unicode token category: control token
UGC_CurrencySymbol = 19
Unicode token category: Currency symbol
UGC_DashPunctuation = 12
Unicode token category: Dash punctuation
UGC_DecimalNumber = 8
Unicode token category: Uppercase letter
UGC_EnclosingMark = 7
Unicode token category: Uppercase letter
UGC_FinalPunctuation = 16
Unicode token category: Final punctuation
UGC_Format = 26
Unicode token category: Formatting token
UGC_InitialPunctuation = 15
Unicode token category: Initial punctuation
1717
UGC_LetterNumber = 9
Unicode token category: Letter-number
UGC_LineSeparator = 23
Unicode token category: Line separator
UGC_LowercaseLetter = 1
Unicode general category: Lowercase letter
UGC_MathSymbol = 18
Unicode token category: Math symbol
UGC_ModifierLetter = 3
Unicode general category: modifier letter
UGC_ModifierSymbol = 20
Unicode token category: modifier symbol
UGC_NonSpacingMark = 5
Unicode general category: Non-spacing mark
UGC_OpenPunctuation = 13
Unicode token category: Open puntctuation
UGC_OtherLetter = 4
Unicode general category: Other letter
UGC_OtherNumber = 10
Unicode token category: Other number
UGC_OtherPunctuation = 17
Unicode token category: Other punctuation
UGC_OtherSymbol = 21
Unicode token category: Other symbol
UGC_ParagraphSeparator = 24
Unicode token category: Paragraph separator
1718
UGC_PrivateUse = 28
Unicode token category: For private use
UGC_SpaceSeparator = 22
Unicode token category: Space separator
UGC_Surrogate = 27
Unicode token category: Surrogate token
UGC_TitlecaseLetter = 2
Unicode general category: Titlecase letter
UGC_Unassigned = 29
Unicode token category: As yet unassigned
UGC_UppercaseLetter = 0
Unicode general category: Uppercase letter
ZERO_UINT24 : UInt24 = (byte2: 0; byte1: 0; byte0: 0)
TUInt24Rec value with all bytes zero.
79.2.3
Types
PUCA_DataBook = ^TUCA_DataBook
Pointer to TUCA_DataBook type.
PUCA_PropItemContextRec = ^TUCA_PropItemContextRec
Pointer to TUCA_PropItemContextRec
PUCA_PropItemContextTreeNodeRec = ^TUCA_PropItemContextTreeNodeRec
Pointer to TUCA_PropItemContextTreeNodeRec
PUCA_PropItemContextTreeRec = ^TUCA_PropItemContextTreeRec
Pointer to TUCA_PropItemContextTreeRec
PUCA_PropItemRec = ^TUCA_PropItemRec
Pointer to TUCA_PropItemRec
1719
PUCA_PropWeights = ^TUCA_PropWeights
Pointer to TUCA_PropWeights
PUC_Prop = ^TUC_Prop
Pointer to TUC_Prop record
PUInt24 = ^UInt24
Pointer to TUInt24Rec
TCollationField = (BackWard,VariableLowLimit,VariableHighLimit)
Explanation
Backwards encoded
Has upper bound on variable weights
Has lower bound on variable weights
Explanation
Big-endian platform
Little-endian platform
Explanation
Variable collation elements and any subsequent ignorable collation elements are reset so that all weigh
Not implemented (variant of Shifted that reduces the set of variable collation elements to include only
Variable collation elements are not reset to be quaternary collation elements
Variable collation elements are reset to zero at levels one through three
This option is the same as Shifted, except that all trailing FFFFs are trimmed from the sort key.
79.3
79.3.1
1721
79.3.2
CompareSortKey
79.3.3
ComputeSortKey
79.3.4
FindCollation
1722
79.3.5
FreeCollation
79.3.6
FromUCS4
79.3.7
GetCollationCount
79.3.8
GetProps
79.3.9
GetPropUCA
79.3.10
IncrementalCompareString
79.3.11
LoadCollation
Description: LoadCollation loads collation data from file AFileName, or from a memory block AData
with length ADataLength. If successful, it returns a pointer which can be used to register the
collation using RegisterCollation (1725). if there is a problem with the data, Nil is returned.
The filename can also be specified as a Directory and language name ALanguage. The latter is
prepended with collation_ and appended with the native endianness of the current platform, and
has extension .bco
Errors: If the file containing data does not exist or has a size which is less than the encoded header size, Nil
is returned.
See also: RegisterCollation (1725)
79.3.12
NormalizeNFD
79.3.13
PrepareCollation
79.3.14
RegisterCollation
Description: RegisterCollation registers a new collation ACollation in the list of known collations.
The collation data can be specified directly (ACollation) or a name of a language (ALanguage)
in a directory (ADirectory). The latter option will load the binary encodeded collation from file
using LoadCollation (1724).
If the collation is loaded correctly, True is returned, otherwise False is returned (for instance when
a collation with the same name is already loaded).
See also: UnRegisterCollation (1728), UnRegisterCollations (1728), LoadCollation (1724)
79.3.15
ToUCS4
79.3.16
UnicodeIsHighSurrogate
79.3.17
UnicodeIsLowSurrogate
1726
79.3.18
UnicodeIsSurrogatePair
79.3.19
UnicodeToLower
79.3.20
UnicodeToUpper
79.3.21
UnregisterCollation
79.3.22
UnregisterCollations
79.4
TUCA_DataBook
TUCA_DataBook = record
public
Base : PUCA_DataBook;
Version : TCollationName;
CollationName : TCollationName;
VariableWeight : TUCA_VariableKind;
Backwards : Array[0..3] of Boolean;
BMP_Table1 : PByte;
BMP_Table2 : PUInt24;
OBMP_Table1 : PWord;
OBMP_Table2 : PUInt24;
PropCount : Integer;
Props : PUCA_PropItemRec;
VariableLowLimit : Word;
VariableHighLimit : Word;
Dynamic : Boolean;
function IsVariable(const AWeight: PUCA_PropWeights) : Boolean;
end
1728
TUCA_DataBook describes a Unicode Collation Alghorithm data set. data sets can be registered
using the RegisterCollation (1725) function or loaded from file using LoadCollation (1724). A collation data book must be specified when comparing unicode strings.
79.4.1
Page
1729
79.4.2
Method overview
Method
IsVariable
Description
Check if a weight is a variable weight
TUCA_DataBook.IsVariable
79.5
TUCA_PropItemContextRec
This is an internal structure which should not be used directly, the actual structure is subject to
change.
79.5.1
Page
1729
1730
79.5.2
Method overview
Method
GetCodePoints
GetWeights
Description
get the address of actual code points.
Get the Address of actual weights.
TUCA_PropItemContextRec.GetCodePoints
1729
79.5.3
TUCA_PropItemContextRec.GetWeights
79.6
TUCA_PropItemContextTreeNodeRec
This is an internal structure for the tree which should not be used directly, the actual structure is
subject to change.
79.6.1
Page
1730
1730
79.6.2
Method overview
Method
GetLeftNode
GetRightNode
Description
Access to left tree node data
Access to right tree node data
TUCA_PropItemContextTreeNodeRec.GetLeftNode
79.6.3
TUCA_PropItemContextTreeNodeRec.GetRightNode
79.7
TUCA_PropItemContextTreeRec
This is an internal tree structure for storing unicode collation data which should not be used directly,
the actual structure is subject to change.
79.7.1
Page
1731
1731
79.7.2
Page
1731
79.7.3
Method overview
Method
Find
GetData
Description
Find data for encoded character
Access to tree data (getter for Data property)
Property overview
Properties
Data
Access
r
Description
Read-only access to tree data
TUCA_PropItemContextTreeRec.GetData
79.7.4
TUCA_PropItemContextTreeRec.Find
79.7.5
TUCA_PropItemContextTreeRec.Data
1731
79.8
TUCA_PropItemRec
TUCA_PropItemRec encodes 1 entry from the Unicode Collation data in an encoded form.
79.8.1
Method overview
Page
1733
1733
Method
GetContext
GetContextual
1733
1733
1733
1734
1733
1734
1734
GetSelfOnlySize
GetWeightArray
HasCodePoint
IsDeleted
IsValid
IsWeightCompress\_1
IsWeightCompress\_2
79.8.2
Page
1734
1734
Description
Access to context data
Check if the contextual bit is set in the flags (getter for Contextual)
Size of this item data (in bytes).
Return an array of weights
Check flags whether a codepoint is present.
Check flags if deleted bit is set
Check flags for validity
Check whether weight compression flag 1 is set
Check whether weight compression flag 2 is set
Property overview
Properties
CodePoint
Contextual
Access
r
r
Description
Get the codepoint
Check if the contextual bit is set in the flags
1732
79.8.3
TUCA_PropItemRec.HasCodePoint
79.8.4
TUCA_PropItemRec.IsValid
79.8.5
TUCA_PropItemRec.GetWeightArray
79.8.6
TUCA_PropItemRec.GetSelfOnlySize
79.8.7
TUCA_PropItemRec.GetContextual
Synopsis: Check if the contextual bit is set in the flags (getter for Contextual)
Declaration: function GetContextual : Boolean
Visibility: public
79.8.8
TUCA_PropItemRec.GetContext
1733
79.8.9
TUCA_PropItemRec.IsDeleted
79.8.10
TUCA_PropItemRec.IsWeightCompress_1
79.8.11
TUCA_PropItemRec.IsWeightCompress_2
79.8.12
TUCA_PropItemRec.CodePoint
79.8.13
TUCA_PropItemRec.Contextual
79.9
TUC_Prop
1734
79.9.1
Page
1735
1736
1736
1735
79.9.2
Property overview
Properties
Category
HangulSyllable
NumericValue
WhiteSpace
Access
rw
rw
r
rw
Description
Get the category
Is the character a hangul syllable
Numeric value
Is the character considered whitespace
TUC_Prop.Category
79.9.3
TUC_Prop.WhiteSpace
1735
79.9.4
TUC_Prop.HangulSyllable
79.9.5
TUC_Prop.NumericValue
79.10
TUInt24Rec
1736
Unicode data exists mostly of 24-bit data (3 bytes). This type is meant to deal efficiently with this
data. it has members to split out the data in bytes, and functions to query the various properties stored
in the data.
1737
1738
79.10.1
Method overview
Page
1742
Method
equal(Byte,TUInt24Rec):Boolean
1741
equal(Cardinal,TUInt24Rec):Boolean
1742
equal(LongInt,TUInt24Rec):Boolean
1742
equal(TUInt24Rec,Byte):Boolean
1741
equal(TUInt24Rec,Cardinal):Boolean
1741
equal(TUInt24Rec,LongInt):Boolean
1741
equal(TUInt24Rec,TUInt24Rec):Boolean
1742
equal(TUInt24Rec,Word):Boolean
1742
equal(Word,TUInt24Rec):Boolean
1743
greaterthan(Cardinal,TUInt24Rec):Boolean
1744
greaterthanorequal(Cardinal,TUInt24Rec):Boolean
1744
greaterthanorequal(TUInt24Rec,Cardinal):Boolean
1744
greaterthanorequal(TUInt24Rec,TUInt24Rec):Boolean
1743
greaterthan(TUInt24Rec,Cardinal):Boolean
1743
greaterthan(TUInt24Rec,TUInt24Rec):Boolean
1741
implicit(Cardinal):TUInt24Rec
1740
1740
implicit(TUInt24Rec):Byte
implicit(TUInt24Rec):Cardinal
1740
implicit(TUInt24Rec):LongInt
1740
1745
implicit(TUInt24Rec):Word
1739
lessthan(Cardinal,TUInt24Rec):Boolean
1745
lessthanorequal(Cardinal,TUInt24Rec):Boolean
Description
Check
whether
a
TUInt24Rec value equals a
byte value.
Check
whether
a
TUInt24Rec value equals a
cardinal value.
Check
whether
a
TUInt24Rec value equals a
longint value.
Check
whether
a
TUInt24Rec value equals a
byte value.
Check
if
cardinal
and
TUInt24Rec are equal
Check
whether
a
TUInt24Rec value equals a
longint value.
Determine equality of 2
TUInt24Rec records
Check
whether
a
TUInt24Rec value equals a
word value.
Check
whether
a
TUInt24Rec value equals a
word value.
Check whether a cardinal value
is greater than a TUInt24Rec
value
Check whether a cardinal value
is greater than or equal to a
TUInt24Rec value
Check
whether
a
TUInt24Rec
value
is
greater than or equal to a
cardinal value
Check
whether
a
TUInt24Rec
value
is
greater than or equal to a
cardinal value
Check
whether
a
TUInt24Rec
value
is
greater than a cardinal value
Check
whether
a
TUInt24Rec value is greater
than another TUInt24Rec
value
Assign
TUInt24Recfrom
Cardinal
Assign TUInt24Rec to byte
Assign TUInt24Rec to cardinal
Assign TUInt24Rec to
longint
Assign TUInt24Rec to word
Check whether a cardinal value
is less than a TUInt24Rec
value
Check whether a cardinal value
is less than or equal to a
79.10.2
TUInt24Rec.implicit(TUInt24Rec):Cardinal
79.10.3
TUInt24Rec.implicit(TUInt24Rec):LongInt
79.10.4
TUInt24Rec.implicit(TUInt24Rec):Word
79.10.5
TUInt24Rec.implicit(TUInt24Rec):Byte
79.10.6
TUInt24Rec.implicit(Cardinal):TUInt24Rec
79.10.7
TUInt24Rec.equal(TUInt24Rec,TUInt24Rec):Boolean
79.10.8
TUInt24Rec.equal(TUInt24Rec,Cardinal):Boolean
79.10.9
TUInt24Rec.equal(Cardinal,TUInt24Rec):Boolean
79.10.10
TUInt24Rec.equal(TUInt24Rec,LongInt):Boolean
79.10.11
TUInt24Rec.equal(LongInt,TUInt24Rec):Boolean
79.10.12
TUInt24Rec.equal(TUInt24Rec,Word):Boolean
79.10.13
TUInt24Rec.equal(Word,TUInt24Rec):Boolean
79.10.14
TUInt24Rec.equal(TUInt24Rec,Byte):Boolean
79.10.15
TUInt24Rec.equal(Byte,TUInt24Rec):Boolean
79.10.16
TUInt24Rec.notequal(TUInt24Rec,TUInt24Rec):Boolean
79.10.17
TUInt24Rec.notequal(TUInt24Rec,Cardinal):Boolean
79.10.18
TUInt24Rec.notequal(Cardinal,TUInt24Rec):Boolean
79.10.19
TUInt24Rec.greaterthan(TUInt24Rec,TUInt24Rec):Boolean
Synopsis: Check whether a TUInt24Rec value is greater than another TUInt24Rec value
Declaration: TUInt24Rec.class operator greaterthan(a: TUInt24Rec;b: TUInt24Rec)
: Boolean
Visibility: public
Description: The comparison is done by comparing 3 bytes byte0, byte1 and byte2
79.10.20
TUInt24Rec.greaterthan(TUInt24Rec,Cardinal):Boolean
79.10.21
TUInt24Rec.greaterthan(Cardinal,TUInt24Rec):Boolean
1743
79.10.22
TUInt24Rec.greaterthanorequal(TUInt24Rec,TUInt24Rec):Boolean
Synopsis: Check whether a TUInt24Rec value is greater than or equal to a cardinal value
Declaration: TUInt24Rec.class operator greaterthanorequal(a: TUInt24Rec;
b: TUInt24Rec) : Boolean
Visibility: public
Description: The comparison is done by comparing 3 first bytes of the cardinal value with bytes byte0, byte1
and byte2.
79.10.23
TUInt24Rec.greaterthanorequal(TUInt24Rec,Cardinal):Boolean
Synopsis: Check whether a TUInt24Rec value is greater than or equal to a cardinal value
Declaration: TUInt24Rec.class operator greaterthanorequal(a: TUInt24Rec;b: Cardinal)
: Boolean
Visibility: public
Description: The comparison is done by comparing 3 first bytes of the cardinal value with bytes byte0, byte1
and byte2.
79.10.24
TUInt24Rec.greaterthanorequal(Cardinal,TUInt24Rec):Boolean
Synopsis: Check whether a cardinal value is greater than or equal to a TUInt24Rec value
Declaration: TUInt24Rec.class operator greaterthanorequal(a: Cardinal;b: TUInt24Rec)
: Boolean
Visibility: public
Description: The comparison is done by comparing 3 first bytes of the cardinal value with bytes byte0, byte1
and byte2.
79.10.25
TUInt24Rec.lessthan(TUInt24Rec,TUInt24Rec):Boolean
Synopsis: Check whether a TUInt24Rec value is less than another TUInt24Rec value
Declaration: TUInt24Rec.class operator lessthan(a: TUInt24Rec;b: TUInt24Rec)
: Boolean
Visibility: public
Description: The comparison is done by comparing the bytes byte0, byte1 and byte2.
79.10.26
TUInt24Rec.lessthan(TUInt24Rec,Cardinal):Boolean
1744
79.10.27
TUInt24Rec.lessthan(Cardinal,TUInt24Rec):Boolean
79.10.28
TUInt24Rec.lessthanorequal(TUInt24Rec,TUInt24Rec):Boolean
Synopsis: Check whether a TUInt24Rec value is less than or equal to another TUInt24Rec value
Declaration: TUInt24Rec.class operator lessthanorequal(a: TUInt24Rec;b: TUInt24Rec)
: Boolean
Visibility: public
Description: The comparison is done by comparing the bytes byte0, byte1 and byte2.
79.10.29
TUInt24Rec.lessthanorequal(TUInt24Rec,Cardinal):Boolean
Synopsis: Check whether a TUInt24Rec value is less than or equal to a cardinal value
Declaration: TUInt24Rec.class operator lessthanorequal(a: TUInt24Rec;b: Cardinal)
: Boolean
Visibility: public
Description: The comparison is done by comparing 3 first bytes of the cardinal value with bytes byte0, byte1
and byte2.
79.10.30
TUInt24Rec.lessthanorequal(Cardinal,TUInt24Rec):Boolean
Synopsis: Check whether a cardinal value is less than or equal to a TUInt24Rec value
Declaration: TUInt24Rec.class operator lessthanorequal(a: Cardinal;b: TUInt24Rec)
: Boolean
Visibility: public
Description: The comparison is done by comparing 3 first bytes of the cardinal value with bytes byte0, byte1
and byte2.
1745
Chapter 80
Overview
The unicodeducet unit registers the root Unicode collation (DUCET). This collation is needed by
all other collations, so any collation unit will include this file.
This unit does not contain any routines. It simply registers the collation in the initialization section
of the unit, so including the unit in the uses clause of the program is sufficient.
1746
Chapter 81
Used units
Table 81.1: Used units by unit Unix
Name
BaseUnix
System
unixtype
81.2
81.2.1
Page
113
1224
1784
1753
81.2.2
Types
cbool = UnixType.cbool
Boolean type
cchar = UnixType.cchar
Alias for #rtl.UnixType.cchar (1786)
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
1754
Explanation
Search the current directory first, 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 specified in the search path.
81.2.3
Variables
tzdaylight : Boolean
Indicates whether daylight savings time is active.
tzname : Array[boolean] of PChar
Timezone name.
81.3
81.3.1
1763
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 .
81.3.2
AssignStream
1764
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 .
81.3.3
FpExecL
81.3.4
FpExecLE
81.3.5
FpExecLP
1767
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 .
81.3.6
FpExecLPE
81.3.7
FpExecV
See also: FpExecve (163), FpExecvp (1769), FpExecle (1766), FpExecl (1765), FpExeclp (1767), FpFork
(166)
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 .
81.3.8
FpExecVP
1769
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 .
81.3.9
FpExecVPE
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 .
81.3.10
fpFlock
81.3.11
fpfStatFS
1771
Description: fpStatFS returns in Info information about the filesystem on which the open file 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 (1772), #rtl.baseunix.fpfStat (166)
81.3.12
fpfsync
81.3.13
fpgettimeofday
81.3.14
fpStatFS
1772
81.3.15
fpSystem
81.3.16
,S ) ;
FSearch
81.3.17
GetDomainName
81.3.18
, GetDomainName ) ;
GetHostName
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 .
81.3.19
, GetHostName ) ;
GetLocalTimezone
81.3.20
GetTimezoneFile
1775
81.3.21
PClose
81.3.22
POpen
POpen(var
POpen(var
POpen(var
POpen(var
F:
F:
F:
F:
text;const
File;const
text;const
File;const
Prog:
Prog:
Prog:
Prog:
RawByteString;rw:
RawByteString;rw:
UnicodeString;rw:
UnicodeString;rw:
Char)
Char)
Char)
Char)
:
:
:
:
cint
cint
cint
cint
Visibility: default
Description: POpen runs the command specified 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 file opened with POpen can be closed with
Close, but also with PClose (1776). The result is the same, but PClose returns the exit status of
the command Prog.
Errors: Extended error information is returned by the FpGetErrno (169) function. Errors are essentially
those of the Execve, Dup and AssignPipe commands.
See also: AssignPipe (1763), PClose (1776)
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
writeln (
writeln (
assign ( f
rewrite (
writeln (
1776
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 .
81.3.23
ReadTimezoneFile
81.3.24
ReReadLocalTime
1777
81.3.25
SeekDir
81.3.26
SelectText
81.3.27
SigRaise
1778
81.3.28
TellDir
81.3.29
WaitProcess
1779
Errors: None.
See also: #rtl.baseunix.FpWaitPID (206), #rtl.baseunix.WTERMSIG (209), #rtl.baseunix.WSTOPSIG (208),
#rtl.baseunix.WIFEXITED (208), WIFSTOPPED (1780), #rtl.baseunix.WIFSIGNALED (208), W_EXITCODE
(1780), W_STOPCODE (1780), #rtl.baseunix.WEXITSTATUS (208)
81.3.30
WIFSTOPPED
81.3.31
W_EXITCODE
81.3.32
W_STOPCODE
1780
Chapter 82
Used units
Table 82.1: Used units by unit unixcp
Name
BaseUnix
System
82.2
Page
113
1224
Overview
The unixcp unit provides routines to handle mapping of code page names to numerical values as
used in libiconv>. The GetCodepageByName (1782) function is the main function for this. The
GetCodepageData (1782) can be used to map a code page number to a name. These function can be
used for instance to map code page information in environment variables to code page numbers used
in string encodings. The supported code page names are the ones commonly in use in libiconv.
This unit is used for example in unit cwstring (530).
82.3
82.3.1
82.3.2
Types
TUnixCpData = record
cp : Word;
name : ansistring;
end
TUnixCpData contains 2 fields necessary to construct a map between code page number (cp) and
name (name).
82.4
82.4.1
82.4.2
GetCodepageData
82.4.3
GetSystemCodepage
Synopsis: Return the system code page based on the program environment.
Declaration: function GetSystemCodepage : TSystemCodePage
Visibility: default
Description: GetSystemCodepage returns the system code page, based on one of the environment variables
LC_ALL, LC_CTYPE or LANG. The first non-empty variable (in the order mentioned here) is used.
1782
Errors: If none is found, then a system default is used: Linux and Darwin use CP_UTF8, others use
CP_ASCII.
See also: UnixCpMap (1781), GetSystemCodepage (1782), GetCodepageByName (1782)
1783
Chapter 83
Overview
The unixtype unit contains the definitions 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.
83.2
83.2.1
ARG_MAX = 131072
Max number of command-line arguments.
NAME_MAX = 255
Max length (in bytes) of filename
PATH_MAX = 4095
Max length (in bytes) of pathname
Prio_PGrp = 1
#rtl.baseunix.fpGetPriority (172) option: Get process group priority.
Prio_Process = 0
#rtl.baseunix.fpGetPriority (172) option: Get process priority.
Prio_User = 2
#rtl.baseunix.fpGetPriority (172) option: Get user priority.
1784
pthreadrwlocksize = 56
Size of pthread_rwlock_t _data structure
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: ?
1785
83.2.2
Types
cbool = longbool
Boolean type
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 = cuint64
Clock ticks type
clong = Int64
C type: long signed integer (double sized)
clongdouble = extended
Usually translates to an extended, but is CPU dependent.
clonglong = cint64
1786
1788
mbstate_value_t = record
case Byte of
0: (
__wch : wint_t;
);
1: (
__wchb : Array[0..3] of Char;
);
end
This type should never be used directly. It is part of the mbstate_t (1788) type.
mode_t = cint
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 (1786)
pcchar = ^cchar
Pointer to #rtl.UnixType.cchar (1786)
pcdouble = ^cdouble
Pointer to cdouble (1786) type.
pcfloat = ^cfloat
Pointer to cfloat (1786) type.
pcint = ^cint
Pointer to cInt (1786) type.
pcint16 = ^cint16
1789
pthread_attr_t describes the thread attributes. It should be considered an opaque record, the
names of the fields can change anytime. Use the appropriate functions to set the thread attributes.
pthread_condattr_t = record
__dummy : cint;
end
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
1793
pthread_rwlock_t describes a lock. It should be considered an opaque record, the names of the
fields can change anytime.
pthread_t = culong
Thread description record
pTime = ^time_t
Pointer to TTime (1797) type.
ptimespec = ^timespec
Pointer to timespec (1796) record.
ptimeval = ^timeval
1794
sem_t describes a thread semaphore. It should be considered an opaque record, the names of the
fields can change anytime.
size_t = cuint64
Size specification type.
socklen_t = cuint32
Socket address length type.
ssize_t = cint64
Small size type.
TClock = clock_t
Alias for clock_t (1786) type.
TDev = dev_t
Alias for dev_t (1788) type.
1795
TGid = gid_t
Alias for gid_t (1788) type.
timespec = record
tv_sec : time_t;
tv_nsec : clong;
end
TOff64 = off64_t
Alias for off64_t type.
TPid = pid_t
Alias for pid_t (1792) type.
TSize = size_t
Alias for size_t (1795) type
TSockLen = socklen_t
Alias for socklen_t (1795) type.
TSSize = ssize_t
Alias for ssize_t (1795) type
TStatfs = record
fstype : clong;
bsize : clong;
blocks : culong;
bfree : culong;
bavail : culong;
files : culong;
ffree : culong;
fsid : Array[0..1] of cint;
namelen : clong;
frsize : clong;
spare : Array[0..4] of clong;
end
1797
1798
Chapter 84
Overview
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 (1747) or baseunix (113) units.
Most of the functions described here have cross-platform counterparts in the SysUtils (1476) unit. It
is therefore recommended to use that unit.
84.2
84.2.1
84.2.2
Variables
Tzseconds : LongInt
Seconds west of GMT
1799
84.3
84.3.1
84.3.2
EpochToLocal
1800
84.3.3
GetFS
84.3.4
GregorianToJulian
1801
84.3.5
JulianToGregorian
84.3.6
LocalToEpoch
84.3.7
StringToPPChar
1802
1803
Chapter 85
Overview
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 (1822), 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 first 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 (1825) 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 modified: 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 efficient as possible.
1804
The updating of the screen can be prohibited to optimize performance; To this end, the LockScreenUpdate (1822) function can be used: This will increment an internal counter. As long as the counter
differs from zero, calling UpdateScreen (1825) will not do anything. The counter can be lowered
with UnlockScreenUpdate (1825). When it reaches zero, the next call to UpdateScreen (1825) 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 (1824) call. The current
video driver can be retrieved using the GetVideoDriver (1820) 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.
85.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 .
85.3
Writing a custom video driver is not difficult, and generally means implementing a couple of functions, which whould be registered with the SetVideoDriver (1824) function. The various functions
that can be implemented are located in the TVideoDriver (1814) record:
TVideoDriver = Record
1805
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.
1806
The following unit shows how to override a video driver, with a driver that writes debug information
to a file. 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 ;
1807
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 ( ) ;
1808
85.4
85.4.1
Black = 0
Black color attribute
Blink = 128
Blink attribute
Blue = 1
Blue color attribute
Brown = 6
Brown color attribute
cpBlink = $0002
1809
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
1811
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
1812
85.4.2
Types
PVideoBuf = ^TVideoBuf
Pointer type to TVideoBuf (1814)
PVideoCell = ^TVideoCell
Pointer type to TVideoCell (1814)
PVideoMode = ^TVideoMode
Pointer to TVideoMode (1814) record.
Tencoding = (cp437,cp850,cp852,cp866,koi8r,iso01,iso02,iso03,iso04,
iso05,iso06,iso07,iso08,iso09,iso10,iso13,iso14,iso15,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
Explanation
abort and return error code
abort without returning an errorcode.
retry the operation
TVideoDriver record can be used to install a custom video driver, with the SetVideoDriver (1824)
call.
An explanation of all fields can be found there.
TVideoMode = record
Col : Word;
Row : Word;
Color : Boolean;
end
The TVideoMode record describes a videomode. Its fields 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.
1814
85.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 (1825) 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 (1825) will write the actual characters to the screen.
VideoBufSize : LongInt
Current size of the video buffer pointed to by VideoBuf (1815)
1815
85.5
85.5.1
85.5.2
DefaultErrorHandler
1816
85.5.3
DoneVideo
85.5.4
GetCapabilities
1817
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 .
85.5.5
GetCursorType
1818
85.5.6
GetLockScreenCount
1819
85.5.7
GetVideoDriver
85.5.8
GetVideoMode
mode has c o l o r )
mode does n o t have c o l o r ) ;
rows
: +S ) ;
columns : +S ) ;
key t o e x i t . ) ;
1820
85.5.9
GetVideoModeCount
1821
GetKeyEvent ;
DoneKeyboard ;
DoneVideo ;
end .
85.5.10
GetVideoModeData
85.5.11
InitVideo
85.5.12
LockScreenUpdate
1822
UnlockScreenUpdate (1825) after the drawing, followed by a UpdateScreen (1825) call, all writing
will be shown on screen at once.
For an example, see GetLockScreenCount (1819).
Errors: None.
See also: UpdateScreen (1825), UnlockScreenUpdate (1825), GetLockScreenCount (1819)
85.5.13
SetCursorPos
1823
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 .
85.5.14
SetCursorType
85.5.15
SetVideoDriver
1824
85.5.16
SetVideoMode
85.5.17
UnlockScreenUpdate
85.5.18
UpdateScreen
1825
Description: UpdateScreen synchronizes the actual screen with the contents of the VideoBuf internal buffer.
The parameter Force specifies 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 (1816)
1826
Chapter 86
Overview
The wincrt unit provides some auxiliary routines for use with the graph (760) unit, namely keyboard
support. It has no connection with the crt (503) unit, nor with the Turbo-Pascal for Windows WinCrt
unit. As such, it should not be used by end users. Refer to the crt (503) unit instead.
86.2
86.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.
86.3
86.3.1
86.3.2
keypressed
1827
86.3.3
nosound
86.3.4
readkey
86.3.5
sound
86.3.6
textmode
1828
Chapter 87
Used units
Table 87.1: Used units by unit windirs
Name
System
windows
87.2
Page
1224
??
Overview
This unit contains only one function: GetWindowsSpecialDir (1832). It is a simple pascal wrapper
around the shfolder.dll library, and is available under Windows only.
87.3
87.3.1
CSIDL_ADMINTOOLS = $0030
ID for the personal "Start Menu\Programs\Administrative tools" folder (In the users personal folder)
CSIDL_APPDATA = $001A
ID for the roaming "Application Data" folder (in the users personal folder)
CSIDL_CDBURN_AREA = $003B
ID for the personal "Local Settings\Application Data\Microsoft\CD Burning" folder (Under "All
users" folder)
CSIDL_COMMON_ADMINTOOLS = $002F
ID for the common "Start Menu\Programs\Administrative tools" folder (Under "All users" folder)
1829
CSIDL_COMMON_APPDATA = $0023
ID for the common "Application Data" folder (Under "All users" folder)
CSIDL_COMMON_DESKTOPDIRECTORY = $0019
ID for the public "Desktop" folder (Under "All users" folder)
CSIDL_COMMON_DOCUMENTS = $002E
ID for the common "Documents" folder (Under "All users" folder)
CSIDL_COMMON_FAVORITES = $001F
ID for the public "Favorites" folder (Under "All users" folder)
CSIDL_COMMON_MUSIC = $0035
ID for the common "Documents\My Music" folder (Under "All users" folder)
CSIDL_COMMON_PICTURES = $0036
ID for the common "Documents\My Pictures" folder (Under "All users" folder)
CSIDL_COMMON_PROGRAMS = $0017
ID for the public "Programs" folder (Under "All users" Start menu folder)
CSIDL_COMMON_STARTMENU = $0016
ID for the public "Start Menu" folder (Under "All users")
CSIDL_COMMON_STARTUP = $0018
ID for the public "Startup" folder (Under "All users\Start menu\Programs" folder)
CSIDL_COMMON_TEMPLATES = $002D
ID for the common "Templates" folder (Under "All users" folder)
CSIDL_COMMON_VIDEO = $0037
ID for the common "Documents\My Video" folder (Under "All users" folder)
CSIDL_COOKIES = $0021
ID for the "Cookies" folder (in the users personal folder)
CSIDL_DESKTOPDIRECTORY = $0010
ID for the "Desktop" folder (in the users personal folder)
1830
CSIDL_FAVORITES = $0006
ID for the "Favourites" folder (in the users personal folder)
CSIDL_FLAG_CREATE = $8000
Flag to specify if the requested folder must be created if it didnt exist yet.
CSIDL_HISTORY = $0022
ID for the "History" folder (in the users personal folder)
CSIDL_INTERNET_CACHE = $0020
ID for the "Temporary Internet Files" folder (in the users personal folder)
CSIDL_LOCAL_APPDATA = $001C
ID for the local "Application Data" folder (in the users personal folder)
CSIDL_MYMUSIC = $000D
ID for the "My Music" folder (in the users personal folder)
CSIDL_MYPICTURES = $0027
ID for the "My Pictures" folder (in the users personal folder)
CSIDL_MYVIDEO = $000E
ID for the "My Videos" folder (in the users personal folder)
CSIDL_NETHOOD = $0013
ID for the "Nethood" folder (in the users personal folder)
CSIDL_PERSONAL = $0005
ID for the "My Documents" folder (in the users personal folder)
CSIDL_PRINTHOOD = $001B
ID for the "Printhood" folder (in the users personal folder)
CSIDL_PROFILE = $0028
ID for the users personal folder
CSIDL_PROFILES = $003E
ID for the parent folder for the users folders
1831
CSIDL_PROGRAMS = $0002
ID for the "Program files" folder
CSIDL_PROGRAM_FILES = $0026
ID for the "Program Files" folder (alias for CSIDL_PROGRAMS)
CSIDL_PROGRAM_FILES_COMMON = $002B
ID for the Common folder under the "Program Files" folder.
CSIDL_RECENT = $0008
ID for the "Recent" folder (in the users personal folder)
CSIDL_SENDTO = $0009
ID for the "Send to" folder (in the users personal folder)
CSIDL_STARTMENU = $000B
ID for the "Start menu" folder (in the users personal folder)
CSIDL_STARTUP = $0007
ID for the "Startup" menu folder (in the users personal folder)
CSIDL_SYSTEM = $0025
ID for the Windows System32 dir.
CSIDL_TEMPLATES = $0015
ID for the "Templates" folder (in the users personal folder)
CSIDL_WINDOWS = $0024
ID for the Windows installation dir.
87.4
87.4.1
1832
Chapter 88
Used units
Table 88.1: Used units by unit x86
Name
BaseUnix
System
88.2
Page
113
1224
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 specific.
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.
88.3
88.3.1
88.3.2
fpIoPL
88.3.3
ReadPort
88.3.4
ReadPortB
1834
88.3.5
ReadPortL
88.3.6
ReadPortW
88.3.7
WritePort
Errors: In case of an error (not enough permissions to write to this port), runtime 216 (Access Violation) will
occur.
See also: FpIOPerm (1833), WritePortB (1836), WritePortL (1836), WritePortW (1836), ReadPortB (1834),
ReadPortL (1835), ReadPortW (1835)
88.3.8
WritePortB
88.3.9
WritePortl
88.3.10
WritePortW
1836
Description: The first 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 (1833) call.
Errors: In case of an error (not enough permissions to write to this port), runtime 216 (Access Violation) will
occur.
See also: FpIOPerm (1833), WritePort (1835), WritePortL (1836), WritePortB (1836), ReadPortB (1834),
ReadPortL (1835), ReadPortW (1835)
1837