Units Reference Guide
Units Reference Guide
Reference guide.
Free Pascal version 3.2.2:
Reference guide for RTL units.
Document version 3.2.2
May 2021
1
CONTENTS
2
CONTENTS
3
CONTENTS
4
CONTENTS
5
CONTENTS
6
CONTENTS
7
CONTENTS
8
CONTENTS
9
CONTENTS
10
CONTENTS
11
CONTENTS
12
CONTENTS
13
CONTENTS
14
CONTENTS
15
CONTENTS
16
CONTENTS
17
CONTENTS
18
CONTENTS
19
CONTENTS
20
CONTENTS
21
CONTENTS
22
CONTENTS
23
CONTENTS
24
CONTENTS
25
CONTENTS
26
CONTENTS
27
CONTENTS
28
CONTENTS
29
CONTENTS
30
CONTENTS
31
CONTENTS
32
CONTENTS
33
CONTENTS
34
CONTENTS
35
CONTENTS
36
CONTENTS
37
CONTENTS
38
CONTENTS
39
CONTENTS
40
CONTENTS
41
CONTENTS
42
CONTENTS
43
CONTENTS
44
CONTENTS
45
CONTENTS
46
CONTENTS
47
CONTENTS
48
CONTENTS
49
CONTENTS
50
CONTENTS
51
CONTENTS
52
CONTENTS
53
CONTENTS
54
CONTENTS
55
CONTENTS
56
CONTENTS
57
CONTENTS
58
CONTENTS
59
CONTENTS
60
CONTENTS
61
CONTENTS
62
CONTENTS
63
CONTENTS
64
CONTENTS
65
CONTENTS
66
CONTENTS
67
CONTENTS
68
CONTENTS
69
CONTENTS
70
CONTENTS
71
CONTENTS
72
CONTENTS
73
CONTENTS
74
CONTENTS
75
CONTENTS
76
CONTENTS
77
CONTENTS
78
CONTENTS
79
CONTENTS
80
CONTENTS
81
CONTENTS
82
CONTENTS
83
CONTENTS
84
CONTENTS
85
CONTENTS
86
CONTENTS
87
CONTENTS
75.11.133GetCurrentThreadId . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1468
75.11.134GetDir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1468
75.11.135GetDynLibsManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1468
75.11.136GetFPCHeapStatus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1469
75.11.137GetHeapStatus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1469
75.11.138GetLoadErrorStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1469
75.11.139GetMem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1469
75.11.140GetMemory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1470
75.11.141GetMemoryManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1470
75.11.142GetMXCSR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1470
75.11.143GetProcAddress . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1470
75.11.144GetProcedureAddress . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1470
75.11.145GetProcessID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1471
75.11.146GetResourceManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1471
75.11.147GetSSECSR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1471
75.11.148GetTextCodePage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1471
75.11.149GetThreadID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1472
75.11.150GetThreadManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1472
75.11.151GetTypeKind . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1472
75.11.152GetUnicodeStringManager . . . . . . . . . . . . . . . . . . . . . . . . . 1472
75.11.153GetVariantManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1473
75.11.154GetWideStringManager . . . . . . . . . . . . . . . . . . . . . . . . . . . 1473
75.11.155get_caller_addr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1473
75.11.156get_caller_frame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1474
75.11.157get_caller_stackinfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1474
75.11.158get_cmdline . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1474
75.11.159get_frame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1474
75.11.160Get_pc_addr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1475
75.11.161greaterthan(variant,variant):Boolean . . . . . . . . . . . . . . . . . . . . 1475
75.11.162greaterthanorequal(variant,variant):Boolean . . . . . . . . . . . . . . . . 1475
75.11.163Halt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1475
75.11.164HexStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1476
75.11.165Hi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1476
75.11.166High . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1477
75.11.167HINSTANCE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1479
75.11.168Inc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1479
75.11.169Include . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1480
75.11.170IndexByte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1480
75.11.171IndexChar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1481
75.11.172IndexChar0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1482
88
CONTENTS
75.11.173IndexDWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1482
75.11.174IndexQWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1483
75.11.175Indexword . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1483
75.11.176InitCriticalSection . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1484
75.11.177Initialize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1484
75.11.178InitializeArray . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1486
75.11.179InitThread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1486
75.11.180InitThreadVars . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1486
75.11.181Insert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1487
75.11.182Int . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1487
75.11.183intdivide(variant,variant):variant . . . . . . . . . . . . . . . . . . . . . . 1488
75.11.184InterlockedCompareExchange . . . . . . . . . . . . . . . . . . . . . . . 1488
75.11.185InterlockedCompareExchange64 . . . . . . . . . . . . . . . . . . . . . . 1489
75.11.186InterlockedCompareExchangePointer . . . . . . . . . . . . . . . . . . . . 1489
75.11.187InterlockedDecrement . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1489
75.11.188InterlockedDecrement64 . . . . . . . . . . . . . . . . . . . . . . . . . . 1489
75.11.189InterlockedExchange . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1489
75.11.190InterlockedExchange64 . . . . . . . . . . . . . . . . . . . . . . . . . . . 1490
75.11.191InterlockedExchangeAdd . . . . . . . . . . . . . . . . . . . . . . . . . . 1490
75.11.192InterlockedExchangeAdd64 . . . . . . . . . . . . . . . . . . . . . . . . . 1490
75.11.193InterlockedIncrement . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1491
75.11.194InterlockedIncrement64 . . . . . . . . . . . . . . . . . . . . . . . . . . . 1491
75.11.195IOResult . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1491
75.11.196IsDynArrayRectangular . . . . . . . . . . . . . . . . . . . . . . . . . . . 1492
75.11.197IsMemoryManagerSet . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1493
75.11.198Is_IntResource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1493
75.11.199KillThread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1493
75.11.200LeaveCriticalSection . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1493
75.11.201leftshift(variant,variant):variant . . . . . . . . . . . . . . . . . . . . . . . 1494
75.11.202Length . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1494
75.11.203lessthan(variant,variant):Boolean . . . . . . . . . . . . . . . . . . . . . . 1495
75.11.204lessthanorequal(variant,variant):Boolean . . . . . . . . . . . . . . . . . . 1495
75.11.205LEtoN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1495
75.11.206Ln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1496
75.11.207Lo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1496
75.11.208LoadLibrary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1497
75.11.209LoadResource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1497
75.11.210LockResource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1498
75.11.211logicaland(variant,variant):variant . . . . . . . . . . . . . . . . . . . . . 1498
75.11.212logicalnot(variant):variant . . . . . . . . . . . . . . . . . . . . . . . . . . 1498
89
CONTENTS
75.11.213logicalor(variant,variant):variant . . . . . . . . . . . . . . . . . . . . . . 1498
75.11.214logicalxor(variant,variant):variant . . . . . . . . . . . . . . . . . . . . . . 1499
75.11.215longjmp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1499
75.11.216Low . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1499
75.11.217LowerCase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1500
75.11.218MakeLangID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1500
75.11.219MemSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1501
75.11.220MkDir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1501
75.11.221modulus(variant,variant):variant . . . . . . . . . . . . . . . . . . . . . . 1501
75.11.222Move . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1501
75.11.223MoveChar0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1502
75.11.224multiply(variant,variant):variant . . . . . . . . . . . . . . . . . . . . . . 1503
75.11.225negative(variant):variant . . . . . . . . . . . . . . . . . . . . . . . . . . . 1503
75.11.226New . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1503
75.11.227NtoBE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1504
75.11.228NtoLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1504
75.11.229Null . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1504
75.11.230OctStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1504
75.11.231Odd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1505
75.11.232Ofs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1505
75.11.233Ord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1506
75.11.234Pack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1507
75.11.235ParamCount . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1507
75.11.236ParamStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1508
75.11.237Pi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1508
75.11.238PopCnt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1509
75.11.239Pos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1509
75.11.240power(variant,variant):variant . . . . . . . . . . . . . . . . . . . . . . . . 1510
75.11.241Pred . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1510
75.11.242Prefetch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1511
75.11.243Ptr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1511
75.11.244RaiseList . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1512
75.11.245Random . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1512
75.11.246Randomize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1513
75.11.247Read . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1513
75.11.248ReadBarrier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1514
75.11.249ReadDependencyBarrier . . . . . . . . . . . . . . . . . . . . . . . . . . 1514
75.11.250ReadLn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1514
75.11.251ReadStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1515
75.11.252ReadWriteBarrier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1515
90
CONTENTS
75.11.253Real2Double . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1516
75.11.254ReAllocMem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1516
75.11.255ReAllocMemory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1517
75.11.256ReleaseExceptionObject . . . . . . . . . . . . . . . . . . . . . . . . . . 1517
75.11.257Rename . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1517
75.11.258Reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1518
75.11.259ResumeThread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1519
75.11.260Rewrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1519
75.11.261rightshift(variant,variant):variant . . . . . . . . . . . . . . . . . . . . . . 1520
75.11.262RmDir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1520
75.11.263RolByte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1521
75.11.264RolDWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1521
75.11.265RolQWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1521
75.11.266RolWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1522
75.11.267RorByte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1522
75.11.268RorDWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1522
75.11.269RorQWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1522
75.11.270RorWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1523
75.11.271Round . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1523
75.11.272RTLEventCreate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1523
75.11.273RTLEventDestroy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1524
75.11.274RTLEventResetEvent . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1524
75.11.275RTLEventSetEvent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1524
75.11.276RTLEventWaitFor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1525
75.11.277RunError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1525
75.11.278SafeLoadLibrary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1525
75.11.279SarInt64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1526
75.11.280SarLongint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1526
75.11.281SarShortint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1526
75.11.282SarSmallint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1526
75.11.283Seek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1527
75.11.284SeekEOF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1527
75.11.285SeekEOLn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1528
75.11.286Seg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1529
75.11.287Set8087CW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1529
75.11.288SetCodePage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1529
75.11.289SetDynLibsManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1530
75.11.290Setjmp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1530
75.11.291SetLength . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1531
75.11.292SetMemoryManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1532
91
CONTENTS
75.11.293SetMultiByteConversionCodePage . . . . . . . . . . . . . . . . . . . . . 1532
75.11.294SetMultiByteFileSystemCodePage . . . . . . . . . . . . . . . . . . . . . 1532
75.11.295SetMultiByteRTLFileSystemCodePage . . . . . . . . . . . . . . . . . . . 1533
75.11.296SetMXCSR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1533
75.11.297SetResourceManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1533
75.11.298SetSSECSR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1533
75.11.299SetString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1534
75.11.300SetTextBuf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1534
75.11.301SetTextCodePage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1535
75.11.302SetTextLineEnding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1535
75.11.303SetThreadDebugName . . . . . . . . . . . . . . . . . . . . . . . . . . . 1536
75.11.304SetThreadManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1536
75.11.305SetUnicodeStringManager . . . . . . . . . . . . . . . . . . . . . . . . . 1536
75.11.306SetVariantManager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1537
75.11.307SetWideStringManager . . . . . . . . . . . . . . . . . . . . . . . . . . . 1537
75.11.308ShortCompareText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1537
75.11.309Sin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1538
75.11.310SizeOf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1538
75.11.311SizeofResource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1539
75.11.312Slice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1539
75.11.313Space . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1539
75.11.314SPtr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1540
75.11.315Sqr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1540
75.11.316Sqrt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1541
75.11.317SSeg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1541
75.11.318StackTop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1541
75.11.319Str . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1542
75.11.320StringCodePage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1543
75.11.321StringElementSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1544
75.11.322StringOfChar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1544
75.11.323StringRefCount . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1544
75.11.324StringToPPChar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1545
75.11.325StringToUnicodeChar . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1545
75.11.326StringToWideChar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1545
75.11.327StrLen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1546
75.11.328StrPas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1546
75.11.329subtract(variant,variant):variant . . . . . . . . . . . . . . . . . . . . . . . 1546
75.11.330Succ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1546
75.11.331SuspendThread . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1547
75.11.332Swap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1547
92
CONTENTS
75.11.333SwapEndian . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1548
75.11.334SysAllocMem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1548
75.11.335SysAssert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1548
75.11.336SysBacktraceStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1549
75.11.337SysFlushStdIO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1549
75.11.338SysFreemem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1549
75.11.339SysFreememSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1549
75.11.340SysGetFPCHeapStatus . . . . . . . . . . . . . . . . . . . . . . . . . . . 1549
75.11.341SysGetHeapStatus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1550
75.11.342SysGetmem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1550
75.11.343SysInitExceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1550
75.11.344SysInitFPU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1550
75.11.345SysInitStdIO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1551
75.11.346SysMemSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1551
75.11.347SysReAllocMem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1551
75.11.348SysResetFPU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1551
75.11.349SysSetCtrlBreakHandler . . . . . . . . . . . . . . . . . . . . . . . . . . 1551
75.11.350SysTryResizeMem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1552
75.11.351ThreadGetPriority . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1552
75.11.352ThreadSetPriority . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1552
75.11.353ThreadSwitch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1552
75.11.354ToSingleByteFileSystemEncodedFileName . . . . . . . . . . . . . . . . 1553
75.11.355Trunc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1553
75.11.356Truncate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1553
75.11.357TryEnterCriticalSection . . . . . . . . . . . . . . . . . . . . . . . . . . . 1554
75.11.358TypeInfo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1554
75.11.359TypeOf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1555
75.11.360UCS4StringToUnicodeString . . . . . . . . . . . . . . . . . . . . . . . . 1555
75.11.361UCS4StringToWideString . . . . . . . . . . . . . . . . . . . . . . . . . . 1555
75.11.362Unassigned . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1555
75.11.363UnicodeCharLenToString . . . . . . . . . . . . . . . . . . . . . . . . . . 1555
75.11.364UnicodeCharLenToStrVar . . . . . . . . . . . . . . . . . . . . . . . . . . 1556
75.11.365UnicodeCharToString . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1556
75.11.366UnicodeCharToStrVar . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1556
75.11.367UnicodeStringToUCS4String . . . . . . . . . . . . . . . . . . . . . . . . 1557
75.11.368UnicodeToUtf8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1557
75.11.369UniqueString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1557
75.11.370UnloadLibrary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1557
75.11.371UnlockResource . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1558
75.11.372UnPack . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1558
93
CONTENTS
75.11.373UpCase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1558
75.11.374Utf8CodePointLen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1559
75.11.375UTF8Decode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1559
75.11.376UTF8Encode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1560
75.11.377Utf8ToAnsi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1560
75.11.378UTF8ToString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1560
75.11.379Utf8ToUnicode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1561
75.11.380Val . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1561
75.11.381VarArrayGet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1562
75.11.382VarArrayPut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1562
75.11.383VarArrayRedim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1562
75.11.384VarCast . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1563
75.11.385WaitForThreadTerminate . . . . . . . . . . . . . . . . . . . . . . . . . . 1563
75.11.386WideCharLenToString . . . . . . . . . . . . . . . . . . . . . . . . . . . 1563
75.11.387WideCharLenToStrVar . . . . . . . . . . . . . . . . . . . . . . . . . . . 1563
75.11.388WideCharToString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1564
75.11.389WideCharToStrVar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1564
75.11.390WideStringToUCS4String . . . . . . . . . . . . . . . . . . . . . . . . . . 1564
75.11.391Write . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1565
75.11.392WriteBarrier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1566
75.11.393WriteLn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1566
75.11.394WriteStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1567
75.12 TDoubleRec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1567
75.12.1 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1568
75.12.2 Property overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1568
75.12.3 TDoubleRec.Mantissa . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1568
75.12.4 TDoubleRec.Fraction . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1569
75.12.5 TDoubleRec.Exponent . . . . . . . . . . . . . . . . . . . . . . . . . . . 1569
75.12.6 TDoubleRec.SpecialType . . . . . . . . . . . . . . . . . . . . . . . . . . 1569
75.12.7 TDoubleRec.BuildUp . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1569
75.12.8 TDoubleRec.Sign . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1570
75.12.9 TDoubleRec.Exp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1570
75.12.10 TDoubleRec.Frac . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1570
75.13 TExtended80Rec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1570
75.13.1 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1571
75.13.2 Property overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1571
75.13.3 TExtended80Rec.Mantissa . . . . . . . . . . . . . . . . . . . . . . . . . 1571
75.13.4 TExtended80Rec.Fraction . . . . . . . . . . . . . . . . . . . . . . . . . . 1572
75.13.5 TExtended80Rec.Exponent . . . . . . . . . . . . . . . . . . . . . . . . . 1572
75.13.6 TExtended80Rec.SpecialType . . . . . . . . . . . . . . . . . . . . . . . 1572
94
CONTENTS
95
CONTENTS
96
CONTENTS
97
CONTENTS
98
CONTENTS
99
CONTENTS
100
CONTENTS
76.15.115FileWrite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1686
76.15.116FindClose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1686
76.15.117FindCmdLineSwitch . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1687
76.15.118FindFirst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1687
76.15.119FindNext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1688
76.15.120FloattoCurr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1689
76.15.121FloatToDateTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1689
76.15.122FloatToDecimal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1689
76.15.123FloatToStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1690
76.15.124FloatToStrF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1691
76.15.125FloatToText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1693
76.15.126FloatToTextFmt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1694
76.15.127FmtStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1694
76.15.128ForceDirectories . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1695
76.15.129Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1695
76.15.130FormatBuf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1702
76.15.131FormatCurr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1703
76.15.132FormatDateTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1703
76.15.133FormatFloat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1704
76.15.134FreeAndNil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1705
76.15.135FreeMemAndNil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1705
76.15.136GetAppConfigDir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1706
76.15.137GetAppConfigFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1706
76.15.138GetCurrentDir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1707
76.15.139GetDirs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1707
76.15.140GetDriveIDFromLetter . . . . . . . . . . . . . . . . . . . . . . . . . . . 1708
76.15.141GetEnvironmentString . . . . . . . . . . . . . . . . . . . . . . . . . . . 1708
76.15.142GetEnvironmentVariable . . . . . . . . . . . . . . . . . . . . . . . . . . 1709
76.15.143GetEnvironmentVariableCount . . . . . . . . . . . . . . . . . . . . . . . 1709
76.15.144GetFileAsString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1709
76.15.145GetFileContents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1710
76.15.146GetFileHandle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1710
76.15.147GetLastOSError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1710
76.15.148GetLocalTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1710
76.15.149GetLocalTimeOffset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1710
76.15.150GetModuleName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1711
76.15.151GetTempDir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1711
76.15.152GetTempFileName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1712
76.15.153GetTickCount . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1712
76.15.154GetTickCount64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1712
101
CONTENTS
76.15.155GetUserDir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1713
76.15.156GuidCase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1713
76.15.157GUIDToString . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1713
76.15.158HashName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1713
76.15.159HookSignal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1714
76.15.160IncAMonth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1714
76.15.161IncludeLeadingPathDelimiter . . . . . . . . . . . . . . . . . . . . . . . . 1714
76.15.162IncludeTrailingBackslash . . . . . . . . . . . . . . . . . . . . . . . . . . 1715
76.15.163IncludeTrailingPathDelimiter . . . . . . . . . . . . . . . . . . . . . . . . 1715
76.15.164IncMonth . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1715
76.15.165InquireSignal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1716
76.15.166IntToHex . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1716
76.15.167IntToStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1717
76.15.168IsDelimiter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1718
76.15.169IsEqualGUID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1718
76.15.170IsLeadChar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1718
76.15.171IsLeapYear . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1718
76.15.172IsPathDelimiter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1719
76.15.173IsValidIdent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1719
76.15.174LastDelimiter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1720
76.15.175LeftStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1720
76.15.176LoadStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1721
76.15.177LowerCase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1721
76.15.178MSecsToTimeStamp . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1722
76.15.179NewStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1722
76.15.180Now . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1723
76.15.181OutOfMemoryError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1723
76.15.182QuotedStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1724
76.15.183RaiseLastOSError . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1724
76.15.184RemoveDir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1724
76.15.185RenameFile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1725
76.15.186ReplaceDate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1725
76.15.187ReplaceTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1726
76.15.188RightStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1726
76.15.189SafeLoadLibrary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1726
76.15.190SameFileName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1727
76.15.191SameStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1727
76.15.192SameText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1727
76.15.193SetCurrentDir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1727
76.15.194SetDirSeparators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1728
102
CONTENTS
76.15.195ShowException . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1728
76.15.196Sleep . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1729
76.15.197SScanf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1729
76.15.198StrAlloc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1730
76.15.199StrBufSize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1730
76.15.200StrByteType . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1731
76.15.201strcat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1731
76.15.202StrCharLength . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1732
76.15.203strcomp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1732
76.15.204StrCopy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1732
76.15.205StrDispose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1733
76.15.206strecopy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1733
76.15.207strend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1734
76.15.208StrFmt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1734
76.15.209stricomp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1735
76.15.210StringOf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1736
76.15.211StringReplace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1736
76.15.212StringToGUID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1736
76.15.213strlcat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1737
76.15.214strlcomp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1737
76.15.215StrLCopy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1738
76.15.216StrLen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1739
76.15.217StrLFmt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1739
76.15.218strlicomp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1740
76.15.219strlower . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1740
76.15.220StrMove . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1741
76.15.221strnew . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1741
76.15.222StrNextChar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1742
76.15.223StrPas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1742
76.15.224StrPCopy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1743
76.15.225StrPLCopy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1743
76.15.226strpos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1743
76.15.227strrscan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1744
76.15.228StrScan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1744
76.15.229StrToBool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1745
76.15.230StrToBoolDef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1745
76.15.231StrToCurr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1745
76.15.232StrToCurrDef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1746
76.15.233StrToDate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1746
76.15.234StrToDateDef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1747
103
CONTENTS
76.15.235StrToDateTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1747
76.15.236StrToDateTimeDef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1748
76.15.237StrToDWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1748
76.15.238StrToDWordDef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1749
76.15.239StrToFloat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1749
76.15.240StrToFloatDef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1750
76.15.241StrToInt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1750
76.15.242StrToInt64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1751
76.15.243StrToInt64Def . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1751
76.15.244StrToIntDef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1752
76.15.245StrToQWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1752
76.15.246StrToQWordDef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1753
76.15.247StrToTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1753
76.15.248StrToTimeDef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1754
76.15.249StrToUInt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1754
76.15.250StrToUInt64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1754
76.15.251StrToUInt64Def . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1754
76.15.252StrToUIntDef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1754
76.15.253strupper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1754
76.15.254Supports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1755
76.15.255SysErrorMessage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1755
76.15.256SystemTimeToDateTime . . . . . . . . . . . . . . . . . . . . . . . . . . 1756
76.15.257TextToFloat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1756
76.15.258Time . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1757
76.15.259TimeStampToDateTime . . . . . . . . . . . . . . . . . . . . . . . . . . . 1758
76.15.260TimeStampToMSecs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1758
76.15.261TimeToStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1759
76.15.262Trim . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1759
76.15.263TrimLeft . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1760
76.15.264TrimRight . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1761
76.15.265TryEncodeDate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1761
76.15.266TryEncodeTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1762
76.15.267TryFloatToCurr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1762
76.15.268TryStringToGUID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1762
76.15.269TryStrToBool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1763
76.15.270TryStrToCurr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1763
76.15.271TryStrToDate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1763
76.15.272TryStrToDateTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1764
76.15.273TryStrToDWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1764
76.15.274TryStrToFloat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1765
104
CONTENTS
76.15.275TryStrToInt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1765
76.15.276TryStrToInt64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1765
76.15.277TryStrToQWord . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1766
76.15.278TryStrToTime . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1766
76.15.279TryStrToUInt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1766
76.15.280TryStrToUInt64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1766
76.15.281UIntToStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1766
76.15.282UnhookSignal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1767
76.15.283UnicodeCompareStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1767
76.15.284UnicodeCompareText . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1767
76.15.285UnicodeFmtStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1768
76.15.286UnicodeFormat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1768
76.15.287UnicodeFormatBuf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1768
76.15.288UnicodeLowerCase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1769
76.15.289UnicodeSameStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1769
76.15.290UnicodeSameText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1769
76.15.291UnicodeStringReplace . . . . . . . . . . . . . . . . . . . . . . . . . . . 1770
76.15.292UnicodeUpperCase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1770
76.15.293UpperCase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1770
76.15.294VendorName . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1771
76.15.295WideBytesOf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1771
76.15.296WideCompareStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1771
76.15.297WideCompareText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1772
76.15.298WideFmtStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1772
76.15.299WideFormat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1772
76.15.300WideFormatBuf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1773
76.15.301WideLowerCase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1773
76.15.302WideSameStr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1773
76.15.303WideSameText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1774
76.15.304WideStrAlloc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1774
76.15.305WideStringOf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1774
76.15.306WideStringReplace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1774
76.15.307WideUpperCase . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1775
76.15.308WrapText . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1775
76.16 TRawbyteSearchRec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1776
76.16.1 Property overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1776
76.16.2 TRawbyteSearchRec.TimeStamp . . . . . . . . . . . . . . . . . . . . . . 1776
76.17 TRawbyteSymLinkRec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1776
76.17.1 Property overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1777
76.17.2 TRawbyteSymLinkRec.TimeStamp . . . . . . . . . . . . . . . . . . . . 1777
105
CONTENTS
106
CONTENTS
107
CONTENTS
108
CONTENTS
109
CONTENTS
110
CONTENTS
111
CONTENTS
112
CONTENTS
113
CONTENTS
114
CONTENTS
115
CONTENTS
116
CONTENTS
117
CONTENTS
118
CONTENTS
119
CONTENTS
76.103TUTF8Encoding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1893
76.103.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1893
76.103.2 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1893
76.103.3 TUTF8Encoding.Create . . . . . . . . . . . . . . . . . . . . . . . . . . . 1893
76.103.4 TUTF8Encoding.Clone . . . . . . . . . . . . . . . . . . . . . . . . . . . 1894
76.103.5 TUTF8Encoding.GetMaxByteCount . . . . . . . . . . . . . . . . . . . . 1894
76.103.6 TUTF8Encoding.GetMaxCharCount . . . . . . . . . . . . . . . . . . . . 1894
76.103.7 TUTF8Encoding.GetPreamble . . . . . . . . . . . . . . . . . . . . . . . 1894
76.104TWordBoolHelper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1895
76.104.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1895
76.104.2 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1895
76.104.3 TWordBoolHelper.Parse . . . . . . . . . . . . . . . . . . . . . . . . . . 1895
76.104.4 TWordBoolHelper.Size . . . . . . . . . . . . . . . . . . . . . . . . . . . 1895
76.104.5 TWordBoolHelper.ToString . . . . . . . . . . . . . . . . . . . . . . . . . 1895
76.104.6 TWordBoolHelper.TryToParse . . . . . . . . . . . . . . . . . . . . . . . 1896
76.104.7 TWordBoolHelper.ToInteger . . . . . . . . . . . . . . . . . . . . . . . . 1896
76.105TWordHelper . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1896
76.105.1 Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1896
76.105.2 Method overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1897
76.105.3 TWordHelper.Parse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1897
76.105.4 TWordHelper.Size . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1897
76.105.5 TWordHelper.ToString . . . . . . . . . . . . . . . . . . . . . . . . . . . 1897
76.105.6 TWordHelper.TryParse . . . . . . . . . . . . . . . . . . . . . . . . . . . 1898
76.105.7 TWordHelper.ToBoolean . . . . . . . . . . . . . . . . . . . . . . . . . . 1898
76.105.8 TWordHelper.ToDouble . . . . . . . . . . . . . . . . . . . . . . . . . . . 1898
76.105.9 TWordHelper.ToExtended . . . . . . . . . . . . . . . . . . . . . . . . . . 1898
76.105.10TWordHelper.ToBinString . . . . . . . . . . . . . . . . . . . . . . . . . 1899
76.105.11TWordHelper.ToHexString . . . . . . . . . . . . . . . . . . . . . . . . . 1899
76.105.12TWordHelper.ToSingle . . . . . . . . . . . . . . . . . . . . . . . . . . . 1899
76.105.13TWordHelper.SetBit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1899
76.105.14TWordHelper.ClearBit . . . . . . . . . . . . . . . . . . . . . . . . . . . 1899
76.105.15TWordHelper.ToggleBit . . . . . . . . . . . . . . . . . . . . . . . . . . . 1900
76.105.16TWordHelper.TestBit . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1900
120
CONTENTS
121
CONTENTS
122
CONTENTS
123
CONTENTS
124
CONTENTS
125
CONTENTS
126
CONTENTS
127
CONTENTS
128
CONTENTS
129
CONTENTS
130
CONTENTS
131
CONTENTS
132
CONTENTS
133
CONTENTS
134
CONTENTS
135
CONTENTS
136
CONTENTS
137
CONTENTS
138
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 usu-
ally 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.
139
Chapter 1
Name Page
unixtype 2087
1.2 Overview
The BaseUnix unit was implemented by Marco Van de Voort. It contains basic Unix functionality.
It supersedes the Linux unit of version 1.0.X of the compiler, but 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.
AT_EMPTY_PATH = $1000
AT_FDCWD = - 100
AT_NO_AUTOMOUNT = $800
140
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
AT_RECURSIVE = $8000
AT_REMOVEDIR = $200
AT_STATX_DONT_SYNC = $4000
AT_STATX_FORCE_SYNC = $2000
AT_STATX_SYNC_AS_STAT = $0000
AT_STATX_SYNC_TYPE = $6000
AT_SYMLINK_FOLLOW = $400
AT_SYMLINK_NOFOLLOW = $100
BITSINWORD = 8 * sizeof(cuLong)
clone_flags_fork = $01200011
ESysE2BIG = 7
ESysEACCES = 13
ESysEADDRINUSE = 98
ESysEADDRNOTAVAIL = 99
ESysEADV = 68
141
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
ESysEAFNOSUPPORT = 97
ESysEAGAIN = 11
ESysEALREADY = 114
ESysEBADE = 52
ESysEBADF = 9
ESysEBADFD = 77
ESysEBADMSG = 74
ESysEBADR = 53
ESysEBADRQC = 56
ESysEBADSLT = 57
ESysEBFONT = 59
ESysEBUSY = 16
ESysECANCELED = 125
Operation canceled
142
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
ESysECHILD = 10
ESysECHRNG = 44
ESysECOMM = 70
ESysECONNABORTED = 103
ESysECONNREFUSED = 111
ESysECONNRESET = 104
ESysEDEADLK = 35
ESysEDEADLOCK = ESysEDEADLK
ESysEDESTADDRREQ = 89
ESysEDOM = 33
ESysEDOTDOT = 73
ESysEDQUOT = 122
ESysEEXIST = 17
143
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
ESysEFAULT = 14
ESysEFBIG = 27
ESysEHOSTDOWN = 112
ESysEHOSTUNREACH = 113
ESysEIDRM = 43
ESysEILSEQ = 84
ESysEINPROGRESS = 115
ESysEINTR = 4
ESysEINVAL = 22
ESysEIO = 5
ESysEISCONN = 106
ESysEISDIR = 21
ESysEISNAM = 120
144
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
ESysEKEYEXPIRED = 127
ESysEKEYREJECTED = 129
ESysEKEYREVOKED = 128
ESysEL2HLT = 51
ESysEL2NSYNC = 45
ESysEL3HLT = 46
ESysEL3RST = 47
ESysELIBACC = 79
ESysELIBBAD = 80
ESysELIBEXEC = 83
ESysELIBMAX = 82
ESysELIBSCN = 81
ESysELNRNG = 48
145
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
ESysELOOP = 40
ESysEMEDIUMTYPE = 124
ESysEMFILE = 24
ESysEMLINK = 31
ESysEMSGSIZE = 90
ESysEMULTIHOP = 72
ESysENAMETOOLONG = 36
ESysENAVAIL = 119
ESysENETDOWN = 100
ESysENETRESET = 102
ESysENETUNREACH = 101
ESysENFILE = 23
ESysENOANO = 55
146
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
ESysENOBUFS = 105
ESysENOCSI = 50
ESysENODATA = 61
ESysENODEV = 19
ESysENOENT = 2
ESysENOEXEC = 8
ESysENOKEY = 126
ESysENOLCK = 37
ESysENOLINK = 67
ESysENOMEDIUM = 123
No medium present
ESysENOMEM = 12
ESysENOMSG = 42
ESysENONET = 64
147
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
ESysENOPKG = 65
ESysENOPROTOOPT = 92
ESysENOSPC = 28
ESysENOSR = 63
ESysENOSTR = 60
ESysENOSYS = 38
ESysENOTBLK = 15
ESysENOTCONN = 107
ESysENOTDIR = 20
ESysENOTEMPTY = 39
ESysENOTNAM = 118
ESysENOTRECOVERABLE = 131
ESysENOTSOCK = 88
148
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
ESysENOTTY = 25
ESysENOTUNIQ = 76
ESysENXIO = 6
ESysEOPNOTSUPP = 95
ESysEOVERFLOW = 75
ESysEOWNERDEAD = 130
ESysEPERM = 1
ESysEPFNOSUPPORT = 96
ESysEPIPE = 32
ESysEPROTO = 71
ESysEPROTONOSUPPORT = 93
ESysEPROTOTYPE = 91
ESysERANGE = 34
149
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
ESysEREMCHG = 78
ESysEREMOTE = 66
ESysEREMOTEIO = 121
ESysERESTART = 85
ESysERFKILL = 132
ESysEROFS = 30
ESysESHUTDOWN = 108
ESysESOCKTNOSUPPORT = 94
ESysESPIPE = 29
ESysESRCH = 3
ESysESRMNT = 69
ESysESTALE = 116
ESysESTRPIPE = 86
150
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
ESysETIME = 62
ESysETIMEDOUT = 110
ESysETOOMANYREFS = 109
ESysETXTBSY = 26
ESysEUCLEAN = 117
ESysEUNATCH = 49
ESysEUSERS = 87
ESysEWOULDBLOCK = ESysEAGAIN
ESysEXDEV = 18
ESysEXFULL = 54
FD_MAXFDSET = 1024
FPE_FLTDIV = 3
FPE_FLTINV = 7
151
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
FPE_FLTOVF = 4
FPE_FLTRES = 6
FPE_FLTSUB = 8
Value signalling floating point subscript out of range in case of SIGFPE signal
FPE_FLTUND = 5
FPE_INTDIV = 1
FPE_INTOVF = 2
F_GetFd = 1
F_GetFl = 3
F_GetLk = 5
F_GetOwn = 9
F_OK = 0
F_SetFd = 2
F_SetFl = 4
152
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
F_SetLk = 6
F_SetLkW = 7
F_SetOwn = 8
ln2bitsinword = 6
MAP_ANON = MAP_ANONYMOUS
MAP_ANONYMOUS = $20
MAP_DENYWRITE = $800
MAP_EXECUTABLE = $1000
MAP_FAILED = pointer(- 1)
MAP_FIXED = $10
MAP_GROWSDOWN = $100
MAP_LOCKED = $2000
153
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
MAP_NORESERVE = $4000
FpMMap (201) option: Do not reserve swap pages for this memory.
MAP_PRIVATE = $2
MAP_SHARED = $1
MAP_TYPE = $f
NAME_MAX = UnixType.NAME_MAX
O_APPEND = $400
O_CREAT = $40
fpOpen (204) file open mode: Create if file does not yet exist.
O_DIRECT = $4000
O_DIRECTORY = $10000
O_EXCL = $80
O_NDELAY = O_NONBLOCK
O_NOCTTY = $100
O_NOFOLLOW = $20000
154
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
O_NONBLOCK = $800
O_RDONLY = 0
O_RDWR = 2
O_SYNC = $1000
O_TRUNC = $200
O_WRONLY = 1
PATH_MAX = UnixType.PATH_MAX
POLLERR = $0008
POLLHUP = $0010
Hang up
POLLIN = $0001
POLLNVAL = $0020
POLLOUT = $0004
POLLPRI = $0002
155
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
POLLRDBAND = $0080
POLLRDNORM = $0040
Same as POLLIN.
POLLWRBAND = $0200
POLLWRNORM = $0100
Equivalent to POLLOUT.
PRIO_PGRP = UnixType.PRIO_PGRP
PRIO_PROCESS = UnixType.PRIO_PROCESS
PRIO_USER = UnixType.PRIO_USER
PROT_EXEC = $4
PROT_NONE = $0
PROT_READ = $1
PROT_WRITE = $2
RLIMIT_AS = 9
RLIMIT_CORE = 4
156
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
RLIMIT_CPU = 0
RLIMIT_DATA = 2
RLIMIT_FSIZE = 1
RLIMIT_LOCKS = 10
RLIMIT_MEMLOCK = 8
RLIMIT_NOFILE = 7
RLIMIT_NPROC = 6
RLIMIT_RSS = 5
RLIMIT_STACK = 3
R_OK = 4
SA_INTERRUPT = $20000000
Sigaction options: ?
SA_NOCLDSTOP = 1
SA_NOCLDWAIT = 2
Sigaction options: ?
157
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
SA_NODEFER = $40000000
SA_NOMASK = SA_NODEFER
Sigaction options: Do not prevent the signal from being received when it is handled.
SA_ONESHOT = SA_RESETHAND
SA_ONSTACK = $08000000
SA_ONSTACK is used in the fpsigaction (216) to indicate the signal handler must be called on an
alternate signal stack provided by sigaltstack(2) If an alternate stack is not available, the default
stack will be used.
SA_RESETHAND = $80000000
Sigaction options: Restore signal action to default state when signal handler exits.
SA_RESTART = $10000000
SA_RESTORER = $04000000
SA_SIGINFO = 4
SEEK_CUR = 1
SEEK_END = 2
SEEK_SET = 0
SIGABRT = 6
SIGALRM = 14
158
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
SIGBUS = 7
SIGCHLD = 17
SIGCONT = 18
SIGFPE = 8
SIGHUP = 1
SIGILL = 4
SIGINT = 2
SIGIO = 29
SIGIOT = 6
SIGKILL = 9
SIGPIPE = 13
SIGPOLL = SIGIO
SIGPROF = 27
159
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
SIGPWR = 30
SIGQUIT = 3
Signal: QUIT
SIGSEGV = 11
SIGSTKFLT = 16
SIGSTOP = 19
SIGTERM = 15
SIGTRAP = 5
SIGTSTP = 20
SIGTTIN = 21
SIGTTOU = 22
SIGUNUSED = 31
Signal: Unused
SIGURG = 23
SIGUSR1 = 10
160
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
SIGUSR2 = 12
SIGVTALRM = 26
SIGWINCH = 28
SIGXCPU = 24
SIGXFSZ = 25
SIG_BLOCK = 0
SIG_DFL = 0
SIG_ERR = - 1
SIG_IGN = 1
SIG_MAXSIG = UnixType.SIG_MAXSIG
SIG_SETMASK = 2
SIG_UNBLOCK = 1
Sigprocmask flags: Remove signals from the set set of blocked signals.
161
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
SYS_NMLN = UnixType.SYS_NMLN
S_IFBLK = 24576
S_IFCHR = 8192
S_IFDIR = 16384
S_IFIFO = 4096
S_IFLNK = 40960
S_IFMT = 61440
S_IFREG = 32768
S_IFSOCK = 49152
S_IRGRP = %0000100000
S_IROTH = %0000000100
S_IRUSR = %0100000000
162
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
S_ISGID = &2000
S_ISUID = &4000
S_ISVTX = &1000
S_IWGRP = %0000010000
S_IWOTH = %0000000010
S_IWUSR = %0010000000
S_IXGRP = %0000001000
S_IXOTH = %0000000001
S_IXUSR = %0001000000
UTSNAME_DOMAIN_LENGTH = UTSNAME_LENGTH
UTSNAME_LENGTH = SYS_NMLN
163
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
UTSNAME_NODENAME_LENGTH = UTSNAME_LENGTH
WNOHANG = 1
WUNTRACED = 2
#rtl.baseunix.fpWaitpid (229) option: Also report children which were stopped but not yet reported
W_OK = 2
X_OK = 1
_STAT_VER = _STAT_VER_LINUX
_STAT_VER_KERNEL = 1
_STAT_VER_LINUX = 3
_STAT_VER_LINUX_OLD = 1
_STAT_VER_SVR4 = 2
164
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
1.3.2 Types
Blkcnt64_t = cuint64
Blkcnt_t = cuint
Blksize_t = cuint
cbool = UnixType.cbool
Boolean type
cchar = UnixType.cchar
cdouble = UnixType.cdouble
cfloat = UnixType.cfloat
cint = UnixType.cint
cint16 = UnixType.cint16
cint32 = UnixType.cint32
cint64 = UnixType.cint64
cint8 = UnixType.cint8
clock_t = UnixType.clock_t
165
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
clong = UnixType.clong
clonglong = UnixType.clonglong
coff_t = UnixType.TOff
cschar = UnixType.cschar
cshort = UnixType.cshort
csigned = UnixType.csigned
csint = UnixType.csint
Signed integer
csize_t = UnixType.size_t
cslong = UnixType.cslong
cslonglong = UnixType.cslonglong
csshort = UnixType.csshort
cuchar = UnixType.cuchar
cuint = UnixType.cuint
166
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
cuint16 = UnixType.cuint16
cuint32 = UnixType.cuint32
cuint64 = UnixType.cuint64
cuint8 = UnixType.cuint8
culong = UnixType.culong
culonglong = UnixType.culonglong
cunsigned = UnixType.cunsigned
cushort = UnixType.cushort
dev_t = UnixType.dev_t
gid_t = UnixType.gid_t
Group ID type.
ino_t = UnixType.ino_t
Inode type.
kernel_gid_t = cuint
kernel_gid_t may differ from the libc type used to describe group IDs.
kernel_loff_t = clonglong
167
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
kernel_mode_t = cuint
kernel_mode_t may differ from the libc type used to describe file modes.
kernel_off_t = clong
kernel_uid_t = cuint
kernel_uid_t may differ from the libc type used to describe user IDs.
mode_t = UnixType.mode_t
nlink_t = UnixType.nlink_t
off_t = UnixType.off_t
Offset type.
PBlkCnt = ^Blkcnt_t
PBlkSize = ^Blksize_t
pcbool = UnixType.pcbool
pcchar = UnixType.pcchar
pcdouble = UnixType.pcdouble
pcfloat = UnixType.pcfloat
pcint = UnixType.pcint
168
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
pcint16 = UnixType.pcint16
pcint32 = UnixType.pcint32
pcint64 = UnixType.pcint64
pcint8 = UnixType.pcint8
pClock = UnixType.pClock
pclong = UnixType.pclong
pclonglong = UnixType.pclonglong
pcschar = UnixType.pcschar
pcshort = UnixType.pcshort
pcsigned = UnixType.pcsigned
pcsint = UnixType.pcsint
pcsize_t = UnixType.psize_t
Pointer to csize_t
pcslong = UnixType.pcslong
169
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
pcslonglong = UnixType.pcslonglong
pcsshort = UnixType.pcsshort
pcuchar = UnixType.pcuchar
pcuint = UnixType.pcuint
pcuint16 = UnixType.pcuint16
pcuint32 = UnixType.pcuint32
pcuint64 = UnixType.pcuint64
pcuint8 = UnixType.pcuint8
pculong = UnixType.pculong
pculonglong = UnixType.pculonglong
pcunsigned = UnixType.pcunsigned
pcushort = UnixType.pcushort
pDev = UnixType.pDev
170
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
pDir = ^Dir
pDirent = ^Dirent
pFDSet = ^TFDSet
pFilDes = ^TFilDes
pfpstate = ^tfpstate
pGid = UnixType.pGid
pGrpArr = ^TGrpArr
pid_t = UnixType.pid_t
Process ID type.
pIno = UnixType.pIno
piovec = ^tiovec
pMode = UnixType.pMode
pnLink = UnixType.pnLink
pOff = UnixType.pOff
171
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
pPid = UnixType.pPid
ppollfd = ^pollfd
Pointer to tpollfd.
PRLimit = ^TRLimit
psigactionrec = ^sigactionrec
PSigContext = ^TSigContext
psiginfo = ^tsiginfo
psigset = ^tsigset
pSize = UnixType.pSize
pSize_t = UnixType.pSize_t
Pointer to Size_t
pSocklen = UnixType.pSocklen
psSize = UnixType.psSize
PStat = ^Stat
pstatfs = UnixType.PStatFs
172
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
This is an alias for the type defined in the #rtl.unixtype (2087) unit.
pthread_cond_t = UnixType.pthread_cond_t
pthread_mutex_t = UnixType.pthread_mutex_t
pthread_t = UnixType.pthread_t
pTime = UnixType.pTime
ptimespec = UnixType.ptimespec
ptimeval = UnixType.ptimeval
ptimezone = ^timezone
ptime_t = UnixType.ptime_t
PTms = ^tms
Pucontext = ^Tucontext
pUid = UnixType.pUid
pUtimBuf = ^UTimBuf
PUtsName = ^TUtsName
173
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
rlim_t = culong
rlim_t is used as the type for the various fields in the TRLimit (236) record.
sigactionhandler = sigactionhandler_t
When installing a signal handler, the actual signal handler must be of type SigActionHandler.
signalhandler = signalhandler_t
sigrestorerhandler = sigrestorerhandler_t
sigrestorerhandler_t = procedure
sigset = sigset_t
size_t = UnixType.size_t
socklen_t = UnixType.socklen_t
ssize_t = UnixType.ssize_t
174
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
TBlkCnt = Blkcnt_t
TBlkSize = Blksize_t
TClock = UnixType.TClock
TDev = UnixType.TDev
TDir = Dir
TDirent = Dirent
TFDSetEl = culong
TGid = UnixType.TGid
timespec = UnixType.timespec
timeval = UnixType.timeval
175
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
time_t = UnixType.time_t
TIno = UnixType.TIno
TIOCtlRequest = UnixType.TIOCtlRequest
tiovec = iovec
TMode = UnixType.TMode
TnLink = UnixType.TnLink
TOff = UnixType.TOff
TPid = UnixType.TPid
tpollfd = pollfd
tsigactionhandler = sigactionhandler_t
tsignalhandler = signalhandler_t
tsigrestorerhandler = sigrestorerhandler_t
tsigset = sigset_t
176
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
TSize = UnixType.TSize
TSocklen = UnixType.TSocklen
TsSize = UnixType.TsSize
TStat = Stat
tstatfs = UnixType.TStatFs
TTime = UnixType.TTime
Ttimespec = UnixType.Ttimespec
TTimeVal = UnixType.TTimeVal
TTimeZone = timezone
TTms = tms
TUid = UnixType.TUid
TUtimBuf = UTimBuf
TUtsName = UtsName
uid_t = UnixType.uid_t
User ID type
177
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
Visibility: default
Description: CreateShellArgV creates a command-line string for executing a shell command using ’sh -c’.
The result is a null-terminated array of null-terminated strings suitable for use in fpExecv (185) and
friends.
Errors: If no more memory is available, a heap error may occur.
1.4.2 FpAccess
Synopsis: Check file access
Declaration: function FpAccess(pathname: pChar; aMode: cint) : cint
function FpAccess(const pathname: RawByteString; aMode: cint) : cint
Visibility: default
Description: FpAccess tests user’s access rights on the specified file. Mode is a mask existing of one or more
of the following:
The test is done with the real user ID, instead of the effective user ID. If the user has the requested
rights, zero is returned. If access is denied, or an error occurred, a nonzero value is returned.
Errors: Extended error information can be retrieved using fpGetErrno (192).
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 doesn’t 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.
Listing: ./bunixex/ex26.pp
178
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
Program Example26 ;
Uses BaseUnix ;
begin
i f fpAccess ( ' / e t c / passwd ' ,W_OK)=0 then
begin
W r i t e l n ( ' B e t t e r check your system . ' ) ;
W r i t e l n ( ' I can w r i t e t o t h e / e t c / passwd f i l e ! ' ) ;
end ;
end .
1.4.3 FpAlarm
Synopsis: Schedule an alarm signal to be delivered
Listing: ./bunixex/ex59.pp
Program Example59 ;
Uses BaseUnix ;
begin
W r i t e l n ( ' Got t o alarm h a n d l e r ' ) ;
end ;
begin
W r i t e l n ( ' S e t t i n g alarm h a n d l e r ' ) ;
f p S i g n a l (SIGALRM, S i g n a l H a n d l e r ( @AlarmHandler ) ) ;
W r i t e l n ( ' Scheduling Alarm i n 10 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 .
179
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
1.4.4 FpChdir
Synopsis: Change current working directory.
1.4.5 FpChmod
Synopsis: Change file permission bits
Declaration: function FpChmod(path: pChar; Mode: TMode) : cint
function FpChmod(const path: RawByteString; Mode: TMode) : cint
Visibility: default
Description: fpChmod sets the Mode bits of the file in Path to Mode. Mode can be specified by ’or’-ing the
following values:
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 doesn’t match the ownership of the file, and is not zero. Owner or
group were not specified correctly.
180
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
Listing: ./bunixex/ex23.pp
Program Example23 ;
Var F : Text ;
begin
{ Create a f i l e }
Assign ( f , ' t e s t e x 2 1 ' ) ;
Rewrite ( F ) ;
W r i t e l n ( f , ' # ! / b i n / sh ' ) ;
W r i t e l n ( f , ' echo Some t e x t f o r t h i s f i l e ' ) ;
Close ( F ) ;
fpChmod ( ' t e s t e x 2 1 ' , & 7 7 7 ) ;
{ F i l e i s now e x e c u t a b l e }
fpexecl ( ' . / testex21 ' , [ ] ) ;
end .
1.4.6 FpChown
Synopsis: Change owner of file
Declaration: function FpChown(path: pChar; owner: TUid; group: TGid) : cint
function FpChown(const path: RawByteString; owner: TUid; group: TGid)
: cint
Visibility: default
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 successful, a nonzero return value indicates an error.
Errors: The following error codes are returned:
sys_epermThe effective UID doesn’t 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.
181
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
Listing: ./bunixex/ex24.pp
Program Example24 ;
Uses BaseUnix ;
begin
1.4.7 FpClose
Synopsis: Close file descriptor
182
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
1.4.8 FpClosedir
Synopsis: Close directory file descriptor
1.4.9 FpDup
Synopsis: Duplicate a file handle
Declaration: function FpDup(fildes: cint) : cint
function FpDup(var oldfile: text; var newfile: text) : cint
function FpDup(var oldfile: File; var newfile: File) : cint
Visibility: default
Description: FpDup returns a file descriptor that is a duplicate of the file descriptor fildes.
The second and third forms make NewFile an exact copy of OldFile, after having flushed the
buffer of OldFile in case it is a Text file or untyped file. Due to the buffering mechanism of Pascal,
these calls do not have the same functionality as the dup call in C. The internal Pascal buffers are not
the same after this call, but when the buffers are flushed (e.g. after output), the output is sent to the
same file. Doing an lseek will, however, work as in C, i.e. doing a lseek will change the file position
in both files.
The function returns a negative value in case of an error, a positive value is a file handle, and indicates
success.
Listing: ./bunixex/ex31.pp
program Example31 ;
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 . ' ) ;
183
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
1.4.10 FpDup2
Synopsis: Duplicate one file handle to another
Declaration: function FpDup2(fildes: cint; fildes2: cint) : cint
function FpDup2(var oldfile: text; var newfile: text) : cint
function FpDup2(var oldfile: File; var newfile: File) : cint
Visibility: default
Description: Makes fildes2 or NewFile an exact copy of fildes or OldFile, after having flushed the
buffer of OldFile in the case of text or untyped files.
After a call to fdup2, the 2 file descriptors point to the same physical device (a file, socket, or a
terminal).
NewFile can be an assigned file. If newfile or fildes was open, it is closed first. Due to the
buffering mechanism of Pascal, this has not the same functionality as the dup2 call in C. The internal
Pascal buffers are not the same after this call, but when the buffers are flushed (e.g. after output), the
output is sent to the same file. Doing an lseek will, however, work as in C, i.e. doing a lseek will
change the file position in both files.
The function returns the new file descriptor number, on error -1 is returned, and the error can be
retrieved with fpgeterrno (192)
Errors: In case of error, the following error codes can be reported:
Listing: ./bunixex/ex32.pp
program Example32 ;
uses BaseUnix ;
var f : t e x t ;
i : longint ;
begin
Assign ( f , ' t e x t . t x t ' ) ;
Rewrite ( F ) ;
For i :=1 to 10 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 . }
184
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
1.4.11 FpExecv
Synopsis: Execute process
Declaration: function FpExecv(path: pChar; argv: ppChar) : cint
function FpExecv(const path: RawByteString; argv: ppchar) : cint
Visibility: default
Description: Replaces the currently running program with the program, specified in path. It gives the program
the options in argvp. This is a pointer to an array of pointers to null-terminated strings. The last
pointer in this array should be nil. The current environment is passed to the program. On success,
execv does not return.
Errors: On error, -1 is returned. Extended error information can be retrieved with fpGetErrNo (192)
sys_eaccesFile is not a regular file, or has no execute permission. A component of the path has no
search permission.
sys_epermThe file system is mounted .
sys_e2bigArgument list too big.
sys_enoexecThe magic number in the file is incorrect.
sys_enoentThe file does not exist.
sys_enomemNot enough memory for kernel.
sys_enotdirA component of the path is not a directory.
sys_eloopThe path contains a circular reference (via symlinks).
Listing: ./bunixex/ex8.pp
Program Example8 ;
Uses Unix , s t r i n g s ;
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 .
185
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
1.4.12 FpExecve
Synopsis: Execute process using environment
Description: Replaces the currently running program with the program, specified in path. It gives the program
the options in argv, and the environment in envp. They are pointers to an array of pointers to
null-terminated strings. The last pointer in this array should be nil. On success, execve does not
return.
Errors: Extended error information can be retrieved with fpGetErrno (192), and includes the following:
sys_eaccesFile is not a regular file, or has no execute permission. A component of the path has no
search permission.
sys_epermThe file system is mounted .
sys_e2bigArgument list too big.
sys_enoexecThe magic number in the file is incorrect.
sys_enoentThe file does not exist.
sys_enomemNot enough memory for kernel.
sys_enotdirA component of the path is not a directory.
sys_eloopThe path contains a circular reference (via symlinks).
Listing: ./bunixex/ex7.pp
Program Example7 ;
Uses BaseUnix , s t r i n g s ;
Var PP : PPchar ;
begin
GetMem (PP, 3 * SizeOf ( Pchar ) ) ;
PP [ 0 ] : = Arg0 ;
PP [ 1 ] : = Arg1 ;
PP [ 3 ] : = N i l ;
{ Execute ' / b i n / l s −l ' , w i t h c u r r e n t environment }
{ Envp i s d e f i n e d i n system . i n c }
fpExecVe ( ' / b i n / l s ' , pp , envp ) ;
end .
186
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
1.4.13 FpExit
Synopsis: Exit the current process
1.4.14 FpFcntl
Synopsis: File control operations.
Declaration: function FpFcntl(fildes: cint; cmd: cint) : cint
function FpFcntl(fildes: cint; cmd: cint; arg: cint) : cint
function FpFcntl(fildes: cint; cmd: cint; var arg: FLock) : cint
Visibility: default
Description: Read/set a file’s attributes. Fildes a valid file descriptor. Cmd specifies what to do, and is one of
the following:
F_GetFdRead the close_on_exec flag. If the low-order bit is 0, then the file will remain open across
execve calls.
F_GetFlRead the descriptor’s flags.
F_GetOwnGet the Process ID of the owner of a socket.
F_SetFdSet the close_on_exec flag of fildes. (only the least significant bit is used).
F_GetLkReturn the flock record that prevents this process from obtaining the lock, or set the
l_type field of the lock of there is no obstruction. Arg is the flock record.
F_SetLkSet the lock or clear it (depending on l_type in the flock structure). if the lock is held
by another process, an error occurs.
F_GetLkwSame as for F_Setlk, but wait until the lock is released.
F_SetOwnSet the Process or process group that owns a socket.
187
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
1.4.15 fpfdfillset
Synopsis: Set all file descriptors in the set.
See also: FpSelect (213), FpFD_ZERO (189), FpFD_IsSet (188), FpFD_Clr (188), FpFD_Set (188)
1.4.16 fpFD_CLR
Synopsis: Clears a file descriptor in a set
Declaration: function fpFD_CLR(fdno: cint; var nset: TFDSet) : cint
Visibility: default
Description: FpFD_Clr clears file descriptor fdno in file descriptor set nset.
For an example, see FpSelect (213).
Errors: None.
See also: FpSelect (213), FpFD_ZERO (189), FpFD_Set (188), FpFD_IsSet (188)
1.4.17 fpFD_ISSET
Synopsis: Check whether a file descriptor is set
Declaration: function fpFD_ISSET(fdno: cint; const nset: TFDSet) : cint
Visibility: default
Description: FpFD_Set Checks whether file descriptor fdNo in file descriptor set fds is set. It returns zero if
the descriptor is not set, 1 if it is set. If the number of the file descriptor it wrong, -1 is returned.
For an example, see FpSelect (213).
Errors: If an invalid file descriptor number is passed, -1 is returned.
See also: FpSelect (213), FpFD_ZERO (189), FpFD_Clr (188), FpFD_Set (188)
1.4.18 fpFD_SET
Synopsis: Set a file descriptor in a set
Declaration: function fpFD_SET(fdno: cint; var nset: TFDSet) : cint
Visibility: default
Description: FpFD_Set sets file descriptor fdno in file descriptor set nset.
For an example, see FpSelect (213).
Errors: None.
See also: FpSelect (213), FpFD_ZERO (189), FpFD_Clr (188), FpFD_IsSet (188)
188
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
1.4.19 fpFD_ZERO
Synopsis: Clear all file descriptors in set
Declaration: function fpFD_ZERO(out nset: TFDSet) : cint
Visibility: default
Description: FpFD_ZERO clears all the file descriptors in the file descriptor set nset.
For an example, see FpSelect (213).
Errors: None.
See also: FpSelect (213), FpFD_Clr (188), FpFD_Set (188), FpFD_IsSet (188)
1.4.20 FpFork
Synopsis: Create child process
Declaration: function FpFork : TPid
Visibility: default
Description: FpFork creates a child process which is a copy of the parent process. FpFork returns the process
ID in the parent process, and zero in the child’s process. (you can get the parent’s PID with fpGetPPid
(194)).
Errors: On error, -1 is returned to the parent, and no child is created.
1.4.21 FPFStat
Synopsis: Retrieve file information about a file descriptor.
Declaration: function FpFStat(fd: cint; var sb: Stat) : cint
function FPFStat(var F: Text; var Info: Stat) : Boolean
function FPFStat(var F: File; var Info: Stat) : Boolean
Visibility: default
Description: FpFStat gets information about the file specified in one of the following:
and stores it in Info, which is of type stat (234). The function returns zero if the call was successful,
a nonzero return value indicates failure.
Errors: Extended error information can be retrieved using fpGetErrno (192).
Listing: ./bunixex/ex28.pp
189
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
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 10 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 : ' , i n f o . s t _ b l o c k s ) ;
w r i t e l n ( ' atime : ' , i n f o . st_atime ) ;
w r i t e l n ( ' mtime : ' , i n f o . st_mtime ) ;
writeln ( ' ctime : ' , i n f o . st_ctime ) ;
{ Remove f i l e }
erase ( f ) ;
end .
1.4.22 FpFtruncate
Synopsis: Truncate file on certain size.
Declaration: function FpFtruncate(fd: cint; flength: TOff) : cint
Visibility: default
Description: FpFTruncate sets the length of a file in fd on flength bytes, where flength must be less
than or equal to the current length of the file in fd.
The function returns zero if the call was successful, a nonzero return value indicates that an error
occurred.
190
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
1.4.23 FpGetcwd
Synopsis: Retrieve the current working directory.
1.4.24 FpGetegid
Synopsis: Return effective group ID
Declaration: function FpGetegid : TGid
Visibility: default
Description: FpGetegid returns the effective group ID of the currently running process.
Errors: None.
See also: FpGetGid (193), FpGetUid (196), FpGetEUid (192), FpGetPid (194), FpGetPPid (194), fpSetUID
(216), FpSetGid (214)
Listing: ./bunixex/ex18.pp
Program Example18 ;
Uses BaseUnix ;
begin
w r i t e l n ( ' Group I d = ' , f p g e t g i d , ' E f f e c t i v e group I d = ' , f p g e t e g i d ) ;
end .
1.4.25 FpGetEnv
Synopsis: Return value of environment variable.
Declaration: function FpGetEnv(name: pChar) : pChar
function FpGetEnv(name: string) : pChar
Visibility: default
Description: FPGetEnv returns the value of the environment variable in Name. If the variable is not defined, nil
is returned. The value of the environment variable may be the empty string. A PChar is returned to
accommodate for strings longer than 255 bytes, TERMCAP and LS_COLORS, for instance.
191
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
Errors: None.
Listing: ./bunixex/ex41.pp
Program Example41 ;
Uses BaseUnix ;
begin
W r i t e l n ( ' Path i s : ' , fpGetenv ( 'PATH ' ) ) ;
end .
1.4.26 fpgeterrno
Synopsis: Retrieve extended error information.
Declaration: function fpgeterrno : LongInt
Visibility: default
Description: fpgeterrno returns extended information on the latest error. It is set by all functions that com-
municate with the kernel or C library.
Errors: None.
1.4.27 FpGeteuid
Synopsis: Return effective user ID
Declaration: function FpGeteuid : TUid
Visibility: default
Description: FpGeteuid returns the effective user ID of the currently running process.
Errors: None.
See also: FpGetUid (196), FpGetGid (193), FpGetEGid (191), FpGetPid (194), FpGetPPid (194), fpSetUID
(216), FpSetGid (214)
Listing: ./bunixex/ex17.pp
Program Example17 ;
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 .
192
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
1.4.28 FpGetgid
Synopsis: Return real group ID
Errors: None.
See also: FpGetEGid (191), FpGetUid (196), FpGetEUid (192), FpGetPid (194), FpGetPPid (194), fpSetUID
(216), FpSetGid (214)
Listing: ./bunixex/ex18.pp
Program Example18 ;
Uses BaseUnix ;
begin
w r i t e l n ( ' Group I d = ' , f p g e t g i d , ' E f f e c t i v e group I d = ' , f p g e t e g i d ) ;
end .
1.4.29 FpGetgroups
Synopsis: Get the list of supplementary groups.
1.4.30 FpGetpgrp
Synopsis: Get process group ID
Declaration: function FpGetpgrp : TPid
Visibility: default
Description: FpGetpgrp returns the process group ID of the current process.
Errors: None.
See also: fpGetPID (194), fpGetPPID (194), FpGetGID (193), FpGetUID (196)
193
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
1.4.31 FpGetpid
Synopsis: Return current process ID
Listing: ./bunixex/ex16.pp
Program Example16 ;
Uses BaseUnix ;
begin
W r i t e l n ( ' Process I d = ' , f p g e t p i d , ' Parent process I d = ' , f p g e t p p i d ) ;
end .
1.4.32 FpGetppid
Synopsis: Return parent process ID
Declaration: function FpGetppid : TPid
Visibility: default
Listing: ./bunixex/ex16.pp
Program Example16 ;
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 .
194
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
1.4.33 fpGetPriority
Synopsis: Return process priority
1.4.34 FpGetRLimit
Synopsis: Get process resource limits
1.4.35 FpGetsid
Synopsis: Get current session ID
Declaration: function FpGetsid(pid: TPid) : TPid
Visibility: default
Description: FpGetsid returns the session ID of the process pid. The return value is the session ID of the
process. (it equals the PID of the session leader). The process pid must be in the same session as the
current process.
Errors: On error, -1 is returned, and extended error information can be obtained with fpGetErrno.
195
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
1.4.36 FpGetuid
Synopsis: Return current user ID
Declaration: function FpGetuid : TUid
Visibility: default
Description: FpGetuid returns the real user ID of the currently running process.
Errors: None.
See also: FpGetGid (193), FpGetEUid (192), FpGetEGid (191), FpGetPid (194), FpGetPPid (194), fpSetUID
(216)
Listing: ./bunixex/ex17.pp
Program Example17 ;
Uses BaseUnix ;
begin
w r i t e l n ( ' User I d = ' , f p g e t u i d , ' E f f e c t i v e user I d = ' , f p g e t e u i d ) ;
end .
1.4.37 FpIOCtl
Synopsis: General kernel IOCTL call.
Declaration: function FpIOCtl(Handle: cint; Ndx: TIOCtlRequest; Data: Pointer) : cint
Visibility: default
Description: This is a general interface to the Unix/ Linux ioctl call. It performs various operations on the file
descriptor Handle. Ndx describes the operation to perform. Data points to data needed for the
Ndx function. The structure of this data is function-dependent, so we don’t elaborate on this here.
For more information on this, see various manual pages under Linux.
Errors: Extended error information can be retrieved using fpGetErrno (192).
Listing: ./bunixex/ex54.pp
Program Example54 ;
{ Program t o demonstrate t h e I O C t l f u n c t i o n . }
var
t i o s : Termios ;
begin
{ $ i f d e f FreeBSD }
f p I O C t l ( 1 ,TIOCGETA, @tios ) ; / / these c o n s t a n t s are v e r y OS dependant .
/ / see t h e t c g e t a t t r example f o r a b e t t e r way
{ $endif }
WriteLn ( ' I n p u t Flags : $ ' , hexstr ( t i o s . c_iflag , 8 ) ) ;
196
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
1.4.38 FpKill
Synopsis: Send a signal to a process
Declaration: function FpKill(pid: TPid; sig: cint) : cint
Visibility: default
Description: fpKill sends a signal Sig to a process or process group. If Pid>0 then the signal is sent to Pid,
if it equals -1, then the signal is sent to all processes except process 1. If Pid<-1 then the signal is
sent to process group -Pid.
The return value is zero, except in case three, where the return value is the number of processes to
which the signal was sent.
Errors: Extended error information can be retrieved using fpGetErrno (192):
1.4.39 FpLink
Synopsis: Create a hard link to a file
197
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
Listing: ./bunixex/ex21.pp
Program Example21 ;
Uses BaseUnix ;
Var F : Text ;
S : String ;
begin
Assign ( F , ' t e s t . t x t ' ) ;
Rewrite ( F ) ;
Writeln (F , ' This i s w r i t t e n to t e s t . t x t ' ) ;
Close ( f ) ;
{ new . t x t and t e s t . t x t are now t h e same f i l e }
i f f p L i n k ( ' t e s t . t x t ' , ' new . t x t ' )<>0 then
w r i t e l n ( ' E r r o r when l i n k i n g ! ' ) ;
{ Removing t e s t . t x t s t i l l l e a v e s new . t x t }
I f f p U n l i n k ( ' t e s t . t x t ' )<>0 then
W r i t e l n ( ' E r r o r when u n l i n k i n g ! ' ) ;
Assign ( f , ' new . t x t ' ) ;
Reset ( F ) ;
While not EOF( f ) do
begin
Readln ( F , S ) ;
Writeln ( ' > ' , s ) ;
end ;
Close ( f ) ;
{ Remove new . t x t a l s o }
I f not FPUnlink ( ' new . t x t ' )<>0 then
W r i t e l n ( ' E r r o r when u n l i n k i n g ! ' ) ;
end .
1.4.40 FpLseek
Synopsis: Set file pointer position.
Declaration: function FpLseek(fd: cint; offset: TOff; whence: cint) : TOff
Visibility: default
Description: FpLSeek sets the current file position of file fd to Offset, starting from Whence, which can be
one of the following:
198
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
1.4.41 fpLstat
Synopsis: Return information about symbolic link. Do not follow the link
Declaration: function fpLstat(path: pchar; Info: PStat) : cint
function fpLstat(const path: RawByteString; Info: PStat) : cint
function fpLstat(path: pchar; var Info: Stat) : cint
function fpLstat(const Filename: RawByteString; var Info: Stat) : cint
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 (189), it stores information about the
link, not about the file the link points to. The function returns zero if the call was successful, a
nonzero return value indicates failure. failed.
Errors: Extended error information is returned by the FpGetErrno (192) function.
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 . }
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 10 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 ;
199
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
1.4.42 FpMkdir
Synopsis: Create a new directory
Declaration: function FpMkdir(path: pChar; Mode: TMode) : cint
function FpMkdir(const path: RawByteString; Mode: TMode) : cint
Visibility: default
Description: FpMkDir creates a new directory Path, and sets the new directory’s 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 success, 0 is returned. if the function fails, -1 is returned.
Note: There exist a portable alternative to fpMkDir: system.mkdir. Please use fpMkDir only if you
are writing Unix specific code. System.mkdir will work on all operating systems.
200
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
1.4.43 FpMkfifo
Synopsis: Create FIFO (named pipe) in file system
Declaration: function FpMkfifo(path: pChar; Mode: TMode) : cint
function FpMkfifo(const path: RawByteString; Mode: TMode) : cint
Visibility: default
Description: fpMkFifo creates named a named pipe in the file system, with name Path and mode Mode.
The function returns zero if the command was successful, and nonzero if it failed.
Errors: The error codes include:
1.4.44 Fpmmap
Synopsis: Create memory map of a file
Declaration: function Fpmmap(start: pointer; len: size_t; prot: cint; flags: cint;
fd: cint; offst: off_t) : pointer
Visibility: default
Description: FpMMap maps or unmaps files or devices into memory. The different arguments determine what
and how the file is mapped:
adrAddress where to mmap the device. This address is a hint, and may not be followed.
lenSize (in bytes) of area to be mapped.
protProtection of mapped memory. This is a OR-ed combination of the following constants:
PROT_EXECThe memory can be executed.
PROT_READThe memory can be read.
PROT_WRITEThe memory can be written.
PROT_NONEThe memory can not be accessed.
flagsContains some options for the mmap call. It is an OR-ed combination of the following constants:
MAP_FIXEDDo not map at another address than the given address. If the address cannot be
used, MMap will fail.
MAP_SHAREDShare this map with other processes that map this object.
MAP_PRIVATECreate a private map with copy-on-write semantics.
MAP_ANONYMOUSfd does not have to be a file descriptor.
One of the options MAP_SHARED and MAP_PRIVATE must be present, but not both at the
same time.
fdFile descriptor from which to map.
offOffset to be used in file descriptor fd.
201
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
Errors: On error, -1 is returned and extended error information is returned by the FpGetErrno (192) function.
Sys_EBADFfd is not a valid file descriptor and MAP_ANONYMOUS was not specified.
Sys_EACCESMAP_PRIVATE was specified, but fd is not open for reading. Or MAP_SHARED was
asked and PROT_WRITE is set, fd is not open for writing
Sys_EINVALOne of the record fields Start, length or offset is invalid.
Sys_ETXTBUSYMAP_DENYWRITE was set but the object specified by fd is open for writing.
Sys_EAGAINfd is locked, or too much memory is locked.
Sys_ENOMEMNot enough memory for this operation.
Listing: ./unixex/ex66.pp
Program Example66 ;
Var S : String ;
fd : cint ;
Len : longint ;
// args : tmmapargs ;
P : PChar ;
begin
s := ' This i s the s t r i n g ' ;
Len : = Length (S ) ;
f d : = fpOpen ( ' t e s t f i l e . t x t ' , O_wrOnly or o _ c r e a t ) ;
I f f d=−1 then
Halt ( 1 ) ;
I f f p W r i t e ( fd , S [ 1 ] , Len)=−1 then
Halt ( 2 ) ;
fpClose ( fd ) ;
f d : = fpOpen ( ' t e s t f i l e . t x t ' , O_rdOnly ) ;
i f f d=−1 then
Halt ( 3 ) ;
P: = Pchar ( fpmmap ( n i l , l e n +1 ,PROT_READ or PROT_WRITE, MAP_PRIVATE, fd , 0 ) ) ;
I f l o n g i n t (P)=−1 then
Halt ( 4 ) ;
W r i t e l n ( ' Read i n memory : ' ,P ) ;
fpclose ( fd ) ;
i f fpMUnMap ( P , Len)<>0 Then
Halt ( fpgeterrno ) ;
end .
1.4.45 Fpmprotect
Declaration: function Fpmprotect(start: pointer; len: size_t; prot: cint) : cint
Visibility: default
202
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
1.4.46 Fpmunmap
Synopsis: Unmap previously mapped memory block
1.4.47 FpNanoSleep
Synopsis: Suspend process for a short time
Declaration: function FpNanoSleep(req: ptimespec; rem: ptimespec) : cint
Visibility: default
Description: FpNanoSleep suspends the process till a time period as specified in req has passed. Then the
function returns. If the call was interrupted (e.g. by some signal) then the function may return earlier,
and rem will contain the remaining time till the end of the intended period. In this case the return
value will be -1, and ErrNo will be set to EINTR
If the function returns without error, the return value is zero.
Errors: If an error occurred or the call was interrupted, -1 is returned. Extended error information can be
retrieved using fpGetErrno (192).
See also: FpPause (207), FpAlarm (179)
Listing: ./bunixex/ex72.pp
program example72 ;
uses BaseUnix ;
Var
Req ,Rem : TimeSpec ;
Res : L o n g i n t ;
begin
With Req do
begin
tv_sec :=10;
tv_nsec : = 1 0 0 ;
end ;
Write ( ' NanoSleep r e t u r n e d : ' ) ;
Flush ( Output ) ;
Res : = ( fpNanoSleep (@Req,@rem ) ) ;
203
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
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.48 fpNice
Synopsis: Set process priority
Declaration: function fpNice(N: cint) : cint
Visibility: default
Description: Nice adds -N to the priority of the running process. The lower the priority numerically, the less the
process is favored. Only the superuser can specify a negative N, i.e. increase the rate at which the
process is run.
If the function is successful, zero is returned. On error, a nonzero value is returned.
Errors: Extended error information is returned by the FpGetErrno (192) function.
Listing: ./unixex/ex15.pp
Program Example15 ;
begin
writeln ( ' Setting p r i o r i t y to 5 ' ) ;
f p s e t p r i o r i t y ( prio_process , fpgetpid , 5 ) ;
w r i t e l n ( 'New p r i o r i t y = ' , f p g e t p r i o r i t y ( p r i o _ p r o c e s s , f p g e t p i d ) ) ;
w r i t e l n ( ' Doing n i c e 10 ' ) ;
fpnice (10);
w r i t e l n ( 'New P r i o r i t y = ' , f p g e t p r i o r i t y ( p r i o _ p r o c e s s , f p g e t p i d ) ) ;
end .
1.4.49 FpOpen
Synopsis: Open file and return file descriptor
Declaration: function FpOpen(path: pChar; flags: cint; Mode: TMode) : cint
function FpOpen(path: pChar; flags: cint) : cint
function FpOpen(const path: RawByteString; flags: cint) : cint
function FpOpen(const path: RawByteString; flags: cint; Mode: TMode)
: cint
function FpOpen(path: ShortString; flags: cint) : cint
function FpOpen(path: ShortString; flags: cint; Mode: TMode) : cint
204
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
Visibility: default
Description: FpOpen opens a file in Path with flags flags and mode Mode One of the following:
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 file descriptor, or a negative value if there
was an error.
Errors: Extended error information can be retrieved using fpGetErrno (192).
See also: FpClose (182), FpRead (209), FpWrite (230), FpFTruncate (190), FpLSeek (198)
Listing: ./bunixex/ex19.pp
Program Example19 ;
Uses BaseUnix ;
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 .
205
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
1.4.50 FpOpendir
Synopsis: Open a directory for reading
Declaration: function FpOpendir(dirname: pChar) : pDir
function FpOpendir(const dirname: RawByteString) : pDir
function FpOpendir(dirname: ShortString) : pDir
Visibility: default
Description: FpOpenDir opens the directory DirName, and returns a pdir pointer to a Dir (232) record, which
can be used to read the directory structure. If the directory cannot be opened, nil is returned.
Errors: Extended error information can be retrieved using fpGetErrno (192).
See also: FpCloseDir (183), FpReadDir (210)
Listing: ./bunixex/ex35.pp
Program Example35 ;
{ Program t o demonstrate t h e
OpenDir , ReadDir , SeekDir and T e l l D i r f u n c t i o n s . }
Uses BaseUnix ;
begin
TheDir : = fpOpenDir ( ' . / . ' ) ;
Repeat
// E n t r y : = f p T e l l D i r ( TheDir ) ;
A D i r e n t : = fpReadDir ( TheDir ^ ) ;
I f ADirent <> N i l then
With A D i r e n t ^ do
begin
W r i t e l n ( ' E n t r y No : ' , E n t r y ) ;
W r i t e l n ( ' Inode : ' , d_fileno ) ;
// Writeln ( ' Offset : ' , d_off ) ;
W r i t e l n ( ' Reclen : ' , d_reclen ) ;
W r i t e l n ( 'Name : ' , pchar (@d_name [ 0 ] ) ) ;
end ;
Until ADirent=Nil ;
Repeat
Write ( ' E n t r y No . you would l i k e t o see again (−1 t o s t o p ) : ' ) ;
ReadLn ( E n t r y ) ;
I f Entry <>−1 then
begin
// f p S e e k D i r ( TheDir , E n t r y ) ; / / n o t implemented f o r v a r i o u s p l a t f o r m s
A D i r e n t : = fpReadDir ( TheDir ^ ) ;
I f ADirent <> N i l then
With A D i r e n t ^ do
begin
W r i t e l n ( ' E n t r y No : ' , E n t r y ) ;
W r i t e l n ( ' Inode : ' , d_fileno ) ;
// Writeln ( ' Offset : ' , off );
W r i t e l n ( ' Reclen : ' , d_reclen ) ;
W r i t e l n ( 'Name : ' , pchar (@d_name [ 0 ] ) ) ;
206
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
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.51 FpPause
Synopsis: Wait for a signal to arrive
Declaration: function FpPause : cint
Visibility: default
Description: FpPause puts the process to sleep and waits until the application receives a signal. If a signal
handler is installed for the received signal, the handler will be called and after that pause will return
control to the process.
For an example, see fpAlarm (179).
1.4.52 FpPipe
Synopsis: Create a set of pipe file handlers
Declaration: function FpPipe(var fildes: TFilDes) : cint
Visibility: default
Description: FpPipe creates a pipe, i.e. two file objects, one for input, one for output. The file handles are
returned in the array fildes. The input handle is in the 0-th element of the array, the output handle
is in the 1-st element.
The function returns zero if everything went successfully, a nonzero return value indicates an error.
Errors: In case the function fails, the following return values are possible:
Listing: ./bunixex/ex36.pp
Program Example36 ;
Var p i p i , p i p o : Text ;
s : String ;
begin
W r i t e l n ( ' A s s i g n i n g Pipes . ' ) ;
I f a s s i g n p i p e ( p i p i , p i p o )<>0 then
Writeln ( ' Error assigning pipes ! ' , fpgeterr no ) ;
W r i t e l n ( ' W r i t i n g t o pipe , and f l u s h i n g . ' ) ;
W r i t e l n ( pipo , ' T h i s i s a t e x t s t r i n g ' ) ; c l o s e ( p i p o ) ;
207
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
1.4.53 FpPoll
Synopsis: Poll a file descriptor for events.
1.4.54 FpPRead
Synopsis: Positional read: read from file descriptor at a certain position.
Declaration: function FpPRead(fd: cint; buf: pChar; nbytes: TSize; offset: TOff)
: TsSize
Visibility: default
Description: FpPRead reads nbytes bytes from file descriptor fd into buffer buf 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 read, or -1 on error.
1.4.55 FpPWrite
Synopsis: Positional write: write to file descriptor at a certain position.
Declaration: function FpPWrite(fd: cint; buf: pChar; nbytes: TSize; offset: TOff)
: TsSize
Visibility: default
208
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
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 (208), FpWriteV (230)
1.4.56 FpRead
Synopsis: Read data from file descriptor
Declaration: function FpRead(fd: cint; buf: pChar; nbytes: TSize) : TsSize
function FpRead(fd: cint; var buf; nbytes: TSize) : TsSize
Visibility: default
Description: FpdRead reads at most nbytes bytes from the file descriptor fd, and stores them in buf.
The function returns the number of bytes actually read, or -1 if an error occurred. No checking on
the length of buf is done.
Errors: Extended error information can be retrieved using fpGetErrno (192).
See also: FpOpen (204), FpClose (182), FpWrite (230), FpFTruncate (190), FpLSeek (198)
Listing: ./bunixex/ex20.pp
Program Example20 ;
Uses BaseUnix ;
Var FD : c i n t ;
l : longint ;
begin
FD: = fpOpen ( ' t e s t . d a t ' , o_wronly or o_creat , & 6 6 6 ) ;
i f fd >0 then
begin
{ F i l l f i l e w i t h data }
f o r l :=1 to 10 do
i f f p W r i t e ( FD, Data [1] ,10) < >10 then
begin
w r i t e l n ( ' E r r o r when w r i t i n g ! ' ) ;
halt ( 1 ) ;
end ;
f p C l o s e (FD ) ;
FD: = fpOpen ( ' t e s t . d a t ' , o _ r d o n l y ) ;
{ Read data again }
I f FD>0 then
begin
For l :=1 to 5 do
i f fpRead (FD, Data [1] ,10) < >10 then
begin
209
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
1.4.57 FpReaddir
Synopsis: Read entry from directory
Declaration: function FpReaddir(var dirp: Dir) : pDirent
Visibility: default
Description: FpReadDir reads the next entry in the directory pointed to by dirp. It returns a pdirent pointer
to a dirent (232) record describing the entry. If the next entry can’t be read, Nil is returned.
For an example, see FpOpenDir (206).
Errors: Extended error information can be retrieved using fpGetErrno (192).
See also: FpCloseDir (183), FpOpenDir (206)
1.4.58 fpReadLink
Synopsis: Read destination of symbolic link
Declaration: function fpReadLink(name: pchar; linkname: pchar; maxlen: size_t) : cint
function fpReadLink(const Name: RawByteString) : RawByteString
Visibility: default
Description: FpReadLink returns the file the symbolic link name is pointing to. The first form of this function
accepts a buffer linkname of length maxlen where the filename will be stored. It returns the
actual number of characters stored in the buffer.
The second form of the function returns simply the name of the file.
Errors: On error, the first form of the function returns -1; the second one returns an empty string. Extended
error information is returned by the FpGetErrno (192) function.
210
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
Listing: ./unixex/ex62.pp
Program Example62 ;
Var F : Text ;
S : String ;
begin
Assign ( F , ' t e s t . t x t ' ) ;
Rewrite ( F ) ;
Writeln (F , ' This i s w r i t t e n to t e s t . t x t ' ) ;
Close ( f ) ;
{ new . t x t and t e s t . t x t are now t h e same f i l e }
i f fpSymLink ( ' t e s t . t x t ' , ' new . t x t ' )<>0 then
w r i t e l n ( ' E r r o r when s y m l i n k i n g ! ' ) ;
S: = fpReadLink ( ' new . t x t ' ) ;
I f S= ' ' then
Writeln ( ' Error reading l i n k ! ' )
Else
W r i t e l n ( ' L i n k p o i n t s t o : ' ,S ) ;
{ Now remove l i n k s }
I f f p U n l i n k ( ' new . t x t ' )<>0 then
W r i t e l n ( ' E r r o r when u n l i n k i n g ! ' ) ;
I f f p U n l i n k ( ' t e s t . t x t ' )<>0 then
W r i t e l n ( ' E r r o r when u n l i n k i n g ! ' ) ;
end .
1.4.59 FpReadV
Synopsis: Vector read: Read into multiple buffers
Declaration: function FpReadV(fd: cint; const iov: piovec; iovcnt: cint) : TsSize
Visibility: default
Description: FpReadV reads data from file descriptor fd and writes it into iovcnt buffers described by the
tiovec (176) buffers pointed to by iov. It works like fpRead (209) only on multiple buffers.
Errors: On error, -1 is returned.
See also: FpWriteV (230), FpPWrite (208), FpPRead (208)
211
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
1.4.60 FpRename
Synopsis: Rename file
Declaration: function FpRename(old: pChar; newpath: pChar) : cint
function FpRename(const old: RawByteString;
const newpath: RawByteString) : cint
Visibility: default
Description: FpRename renames the file Old to NewPath. NewPath can be in a different directory than Old,
but it cannot be on another partition (device). Any existing file on the new location will be replaced.
If the operation fails, then the Old file will be preserved.
The function returns zero on success, a nonzero value indicates failure.
Note: There exist a portable alternative to fpRename: system.rename. Please use fpRename only if
you are writing Unix specific code. System.rename will work on all operating systems.
Errors: Extended error information can be retrieved using fpGetErrno (192).
sys_eisdirNewPath exists and is a directory, but Old is not a directory.
sys_exdevNewPath and Old are on different devices.
sys_enotempty or sys_eexistNewPath is an existing, non-empty directory.
sys_ebusyOld or NewPath is a directory and is in use by another process.
sys_einvalNewPath is part of Old.
sys_emlinkOldPath or NewPath already have the maximum amount of links pointing to them.
sys_enotdirpart of Old or NewPath is not directory.
sys_efaultFor the pchar case: One of the pointers points to an invalid address.
sys_eaccessaccess is denied when attempting to move the file.
sys_enametoolongEither Old or NewPath is too long.
sys_enoenta directory component in Old or NewPath didn’t exist.
sys_enomemnot enough kernel memory.
sys_erofsNewPath or Old is on a read-only file system.
sys_elooptoo many symbolic links were encountered trying to expand Old or NewPath
sys_enospcthe file system has no room for the new directory entry.
See also: FpUnLink (227)
1.4.61 FpRmdir
Synopsis: Remove a directory.
Declaration: function FpRmdir(path: pChar) : cint
function FpRmdir(const path: RawByteString) : cint
Visibility: default
Description: FpRmdir removes the directory Path from the system. The directory must be empty for this call
to succeed, and the user must have the necessary permissions in the parent directory. Only the last
component of the directory is removed, i.e. higher-lying directories are not removed.
On success, zero is returned. A nonzero return value indicates failure.
Note: There exist a portable alternative to fpRmDir: system.rmdir. Please use fpRmDir only if you
are writing Unix specific code. System.rmdir will work on all operating systems.
Errors: Extended error information can be retrieved using fpGetErrno (192).
212
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
1.4.62 fpSelect
Synopsis: Wait for events on file descriptors
1.TimeOut is of type ptimeval and contains a zero time, the call returns immediately. If
TimeOut is Nil, the kernel will wait forever, or until a status changed.
2.TimeOut is of type cint. If it is -1, this has the same effect as a Timeout of type PTime
which is Nil. Otherwise, TimeOut contains a time in milliseconds.
When the TimeOut is reached, or one of the file descriptors has changed, the Select call returns.
On return, it will have modified the entries in the array which have actually changed, and it returns
the number of entries that have been changed. If the timeout was reached, and no descriptor changed,
zero is returned; The arrays of indexes are undefined after that. On error, -1 is returned.
The variant with the text file will execute the FpSelect call on the file descriptor associated with
the text file T
Errors: On error, the function returns -1. Extended error information can be retrieved using fpGetErrno
(192).
See also: fpFD_ZERO (189), fpFD_Clr (188), fpFD_Set (188), fpFD_IsSet (188)
Listing: ./bunixex/ex33.pp
213
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
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 ,2000) >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.63 fpseterrno
Synopsis: Set extended error information.
Declaration: procedure fpseterrno(err: LongInt)
Visibility: default
Description: fpseterrno sets the extended information on the latest error. It is called by all functions that
communicate with the kernel or C library.
Unless a direct kernel call is performed, there should never be any need to call this function.
See also: fpgeterrno (192)
1.4.64 FpSetgid
Synopsis: Set the current group ID
Declaration: function FpSetgid(gid: TGid) : cint
Visibility: default
Description: fpSetUID sets the group ID of the current process. This call will only work if it is executed as
root, or the program is setgid root.
On success, zero is returned, on error -1 is returned.
Errors: Extended error information can be retrieved with fpGetErrNo (192).
See also: FpSetUid (216), FpGetGid (193), FpGetUid (196), FpGetEUid (192), FpGetEGid (191), FpGetPid
(194), FpGetPPid (194)
214
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
1.4.65 fpSetPriority
Synopsis: Set process priority
Declaration: function fpSetPriority(Which: cint; Who: cint; What: cint) : cint
Visibility: default
Description: fpSetPriority sets the priority with which a process is running. Which process(es) is deter-
mined by the Which and Who variables. Which can be one of the predefined constants:
1.4.66 FpSetRLimit
Synopsis: Set process resource limits
Declaration: function FpSetRLimit(Resource: cint; rlim: PRLimit) : cint
Visibility: default
Description: FpGetRLimit sets the resource limits for the current process: resource determines the resource
of which the kernel should set the limits (one of the many RLIMIT_* constants). rlim should point
to a TRLimit (236) record which contains the new limits for the resource indicated in resource.
The function returns zero if the resource limits were successfully set.
Errors: On error, -1 is returned and fpgeterrno (192) can be used to retrieve the error code.
See also: FpGetRLimit (195)
1.4.67 FpSetsid
Synopsis: Create a new session.
Declaration: function FpSetsid : TPid
Visibility: default
Description: FpSetsid creates a new session (process group). It returns the new process group id (as returned
by FpGetpgrp (193). This call will fail if the current process is already the process group leader.
Errors: On error, -1 is returned. Extended error information can be retrieved with fpGetErrNo (192)
215
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
1.4.68 fpsettimeofday
Synopsis: Set kernel time
Declaration: function fpsettimeofday(tp: ptimeval; tzp: ptimezone) : cint
Visibility: default
Description: FpSetTimeOfDay sets the kernel time to the number of seconds since 00:00, January 1 1970,
GMT specified in the tp record. This time NOT corrected any way, not taking into account time-
zones, daylight savings time and so on.
It is simply a wrapper to the kernel system call.
See also: #rtl.unix.FPGetTimeOfDay (2074)
1.4.69 FpSetuid
Synopsis: Set the current user ID
Declaration: function FpSetuid(uid: TUid) : cint
Visibility: default
Description: fpSetUID sets the user ID of the current process. This call will only work if it is executed as root,
or the program is setuid root.
On success, zero is returned, on error -1 is returned.
Errors: Extended error information can be retrieved with fpGetErrNo (192).
See also: FpGetGid (193), FpGetUid (196), FpGetEUid (192), FpGetEGid (191), FpGetPid (194), FpGetPPid
(194), FpSetGid (214)
1.4.70 FPSigaction
Synopsis: Install signal handler
Declaration: function FPSigaction(sig: cint; act: psigactionrec; oact: psigactionrec)
: cint
Visibility: default
Description: FPSigaction changes the action to take upon receipt of a signal. Act and Oact are pointers to
a SigActionRec (233) record. Sig specifies the signal, and can be any signal except SIGKILL or
SIGSTOP.
If Act is non-nil, then the new action for signal Sig is taken from it. If OAct is non-nil, the old
action is stored there. Sa_Handler may be SIG_DFL for the default action or SIG_IGN to ignore
the signal. Sa_Mask Specifies which signals should be ignored during the execution of the signal
handler. Sa_Flags Specifies a series of flags which modify the behaviour of the signal handler.
You can ’or’ none or more of the following :
SA_NOCLDSTOPIf sig is SIGCHLD do not receive notification when child processes stop.
SA_ONESHOT or SA_RESETHANDRestore the signal action to the default state once the signal
handler has been called.
SA_RESTARTFor compatibility with BSD signals.
SA_NOMASK or SA_NODEFERDo not prevent the signal from being received from within its
own signal handler.
216
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
See also: FpSigProcMask (220), FpSigPending (219), FpSigSuspend (220), FpKill (197)
Listing: ./bunixex/ex57.pp
Program example57 ;
{ Program t o demonstrate t h e S i g A c t i o n f u n c t i o n . }
{
do a k i l l −USR1 p i d from a n o t h e r t e r m i n a l t o see what happens .
r e p l a c e p i d w i t h t h e r e a l p i d o f t h i s program .
You can g e t t h i s p i d by r u n n i n g ' ps ' .
}
uses BaseUnix ;
Var
oa , na : PSigActionRec ;
begin
writeln ( ' Receiving s i g n a l : ' , sig ) ;
end ;
begin
new( na ) ;
new( oa ) ;
na ^ . sa_Handler : = S i g A c t i o n H a n d l e r ( @DoSig ) ;
f i l l c h a r ( na ^ . Sa_Mask , s i z e o f ( na ^ . sa_mask ) , # 0 ) ;
na ^ . Sa_Flags : = 0 ;
{ $ i f d e f Linux } / / Linux s p e c i f i c
na ^ . Sa_Restorer : = N i l ;
{ $endif }
i f f p S i g A c t i o n ( SigUsr1 , na , oa)<>0 then
begin
writeln ( ' Error : ' , fpgeterrno , ' . ' ) ;
halt ( 1 ) ;
end ;
W r i t e l n ( ' Send USR1 s i g n a l o r press <ENTER> t o e x i t ' ) ;
readln ;
end .
1.4.71 FpSigAddSet
Synopsis: Set a signal in a signal set.
217
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
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 (218), FpSigFillSet (218), FpSigDelSet (218), FpSigIsMember (218)
1.4.72 FpSigDelSet
Synopsis: Remove a signal from a signal set.
Declaration: function FpSigDelSet(var nset: tsigset; signo: cint) : cint
Visibility: default
Description: FpSigDelSet removes signal Signo to the signal set nset. The function returns 0 on success.
Errors: If an invalid signal number is given, -1 is returned.
See also: FpSigEmptySet (218), FpSigFillSet (218), FpSigAddSet (217), FpSigIsMember (218)
1.4.73 FpsigEmptySet
Synopsis: Clear all signals from signal set.
Declaration: function FpsigEmptySet(var nset: tsigset) : cint
Visibility: default
Description: FpSigEmptySet clears all signals from the signal set nset.
Errors: None. This function always returns zero.
See also: FpSigFillSet (218), FpSigAddSet (217), FpSigDelSet (218), FpSigIsMember (218)
1.4.74 FpSigFillSet
Synopsis: Set all signals in signal set.
Declaration: function FpSigFillSet(var nset: tsigset) : cint
Visibility: default
Description: FpSigFillSet sets all signals in the signal set nset.
Errors: None. This function always returns zero.
See also: FpSigEmptySet (218), FpSigAddSet (217), FpSigDelSet (218), FpSigIsMember (218)
1.4.75 FpSigIsMember
Synopsis: Check whether a signal appears in a signal set.
Declaration: function FpSigIsMember(const nset: tsigset; signo: cint) : cint
Visibility: default
Description: FpSigIsMember checks whether SigNo appears in the set nset. If it is a member, then 1 is
returned. If not, zero is returned.
Errors: If an invalid signal number is given, -1 is returned.
See also: FpSigEmptySet (218), FpSigFillSet (218), FpSigAddSet (217), FpSigDelSet (218)
218
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
1.4.76 FpSignal
Synopsis: Install signal handler (deprecated)
Declaration: function FpSignal(signum: LongInt; Handler: signalhandler)
: signalhandler
Visibility: default
Description: FPSignal installs a new signal handler (specified by Handler) for signal SigNum.
This call has a subset of the functionality provided by the FpSigAction (216) call. The return value
for FpSignal is the old signal handler, or nil on error.
Errors: Extended error information can be retrieved using fpGetErrno (192).
Listing: ./bunixex/ex58.pp
Program example58 ;
{ Program t o demonstrate t h e S i g n a l f u n c t i o n . }
{
do a k i l l −USR1 p i d from a n o t h e r t e r m i n a l t o see what happens .
r e p l a c e p i d w i t h t h e r e a l p i d o f t h i s program .
You can g e t t h i s p i d by r u n n i n g ' ps ' .
}
uses BaseUnix ;
begin
writeln ( ' Receiving s i g n a l : ' , sig ) ;
end ;
begin
i f f p S i g n a l ( SigUsr1 , S i g n a l H a n d l e r ( @DoSig ) ) = s i g n a l h a n d l e r ( SIG_ERR ) then
begin
w r i t e l n ( ' E r r o r : ' , fpGetErrno , ' . ' ) ;
halt ( 1 ) ;
end ;
W r i t e l n ( ' Send USR1 s i g n a l o r press <ENTER> t o e x i t ' ) ;
readln ;
end .
1.4.77 FpSigPending
Synopsis: Return set of currently pending signals
Declaration: function FpSigPending(var nset: tsigset) : cint
Visibility: default
Description: fpSigpending allows the examination of pending signals (which have been raised while blocked.)
The signal mask of pending signals is returned.
219
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
Errors: None
See also: fpSigAction (216), fpSigProcMask (220), fpSigSuspend (220), fpSignal (219), fpKill (197)
1.4.78 FpSigProcMask
Synopsis: Set list of blocked signals
Declaration: function FpSigProcMask(how: cint; nset: psigset; oset: psigset) : cint
function FpSigProcMask(how: cint; constref nset: tsigset;
var oset: tsigset) : cint
Visibility: default
Description: Changes the list of currently blocked signals. The behaviour of the call depends on How :
SIG_BLOCKThe set of blocked signals is the union of the current set and the nset argument.
SIG_UNBLOCKThe signals in nset are removed from the set of currently blocked signals.
SIG_SETMASKThe list of blocked signals is set so nset.
See also: fpSigAction (216), fpSigPending (219), fpSigSuspend (220), fpKill (197)
1.4.79 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 (216), fpSigProcMask (220), fpSigPending (219), fpSignal (219), fpKill (197)
1.4.80 FpSigTimedWait
Synopsis: Wait for signal, with timeout
Declaration: function FpSigTimedWait(const sigset: tsigset; info: psiginfo;
timeout: ptimespec) : cint
Visibility: default
Description: FpSigTimedWait will suspend the current thread and wait for one of the signals in sigset to
be delivered. information on the delivered signal is placed in the location provided by info (or in
info itself, if the Var variant of the call is used). If the signal is not delivered within the time limit
set in timeout, then the call will return -1, and fpGetErrno will return EAGAIN.
On success, the signal number is returned.
220
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
Errors: On error, -1 is returned, and extended error information can be obtained with fpGetErrno.
See also: FpSigSuspend (220)
1.4.81 FpSleep
Synopsis: Suspend process for several seconds
Listing: ./bunixex/ex73.pp
program example73 ;
uses BaseUnix ;
Var
Res : L o n g i n t ;
begin
Write ( ' Sleep r e t u r n e d : ' ) ;
Flush ( Output ) ;
Res : = ( f p S l e e p ( 1 0 ) ) ;
Writeln ( res ) ;
I f ( res < >0) then
W r i t e l n ( ' Remaining seconds : ' , res ) ;
end .
1.4.82 FpStat
Synopsis: Retrieve file information about a file descriptor.
Declaration: function FpStat(path: pChar; var buf: Stat) : cint
function FpStat(const path: RawByteString; var buf: Stat) : cint
function FpStat(path: ShortString; var buf: Stat) : cint
Visibility: default
Description: FpFStat gets information about the file specified in Path, and stores it in Info, which is of
type stat (234). The function returns zero if the call was successful, a nonzero return value indicates
failure.
Errors: Extended error information can be retrieved using fpGetErrno (192).
221
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
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 10 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 : ' , i n f o . s t _ b l o c k s ) ;
w r i t e l n ( ' atime : ' , i n f o . st_atime ) ;
w r i t e l n ( ' mtime : ' , i n f o . st_mtime ) ;
writeln ( ' ctime : ' , i n f o . st_ctime ) ;
{ Remove f i l e }
erase ( f ) ;
end .
1.4.83 fpSymlink
Synopsis: Create a symbolic link
Declaration: function fpSymlink(oldname: pchar; newname: pchar) : cint
Visibility: default
Description: SymLink makes NewName point to the file in OldName, which doesn’t necessarily exist. The two
files DO NOT have the same inode number. This is known as a ’soft’ link.
The permissions of the link are irrelevant, as they are not used when following the link. Ownership
of the file is only checked in case of removal or renaming of the link.
The function returns zero if the call was successful, a nonzero value if the call failed.
222
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
sys_epermThe file system containing oldpath and newpath does not support linking files.
sys_eaccessWrite access for the directory containing Newpath is disallowed, or one of the directo-
ries in OldPath or NewPath has no search (=execute) permission.
sys_enoentA directory entry in OldPath or NewPath does not exist or is a symbolic link pointing
to a non-existent directory.
sys_enotdirA directory entry in OldPath or NewPath is nor a directory.
sys_enomemInsufficient kernel memory.
sys_erofsThe files are on a read-only file system.
sys_eexistNewPath already exists.
sys_eloopOldPath or NewPath has a reference to a circular symbolic link, i.e. a symbolic link,
whose expansion points to itself.
sys_enospcThe device containing NewPath has no room for another entry.
Listing: ./unixex/ex22.pp
Program Example22 ;
Var F : Text ;
S : String ;
begin
Assign ( F , ' t e s t . t x t ' ) ;
Rewrite ( F ) ;
Writeln (F , ' This i s w r i t t e n to t e s t . t x t ' ) ;
Close ( f ) ;
{ new . t x t and t e s t . t x t are now t h e same f i l e }
i f fpSymLink ( ' t e s t . t x t ' , ' new . t x t ' )<>0 then
w r i t e l n ( ' E r r o r when s y m l i n k i n g ! ' ) ;
{ Removing t e s t . t x t s t i l l l e a v e s new . t x t
P o i n t i n g now t o a non−e x i s t e n t f i l e ! }
I f f p U n l i n k ( ' t e s t . t x t ' )<>0 then
W r i t e l n ( ' E r r o r when u n l i n k i n g ! ' ) ;
Assign ( f , ' new . t x t ' ) ;
{ T h i s should f a i l , s i n c e t h e s y m b o l i c l i n k
p o i n t s t o a non−e x i s t e n t f i l e ! }
{ $ i −}
Reset ( F ) ;
{ $i+}
I f IOResult=0 then
W r i t e l n ( ' T h i s shouldn ' ' t happen ' ) ;
{ Now remove new . t x t a l s o }
I f f p U n l i n k ( ' new . t x t ' )<>0 then
W r i t e l n ( ' E r r o r when u n l i n k i n g ! ' ) ;
end .
223
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
1.4.84 fpS_ISBLK
Synopsis: Is file a block device
See also: FpFStat (189), FpS_ISLNK (225), FpS_ISREG (225), FpS_ISDIR (224), FpS_ISCHR (224), FpS_ISFIFO
(224), FpS_ISSOCK (226)
1.4.85 fpS_ISCHR
Synopsis: Is file a character device
See also: FpFStat (189), FpS_ISLNK (225), FpS_ISREG (225), FpS_ISDIR (224), FpS_ISBLK (223), FpS_ISFIFO
(224), FpS_ISSOCK (226)
1.4.86 fpS_ISDIR
Synopsis: Is file a directory
Declaration: function fpS_ISDIR(m: TMode) : Boolean
Visibility: default
Description: fpS_ISDIR checks the file mode m to see whether the file is a directory. If so, it returns True
See also: FpFStat (189), FpS_ISLNK (225), FpS_ISREG (225), FpS_ISCHR (224), FpS_ISBLK (223), fpS_ISFIFO
(224), FpS_ISSOCK (226)
1.4.87 fpS_ISFIFO
Synopsis: Is file a FIFO
Declaration: function fpS_ISFIFO(m: TMode) : Boolean
Visibility: default
Description: FpS_ISFIFO checks the file mode m to see whether the file is a fifo (a named pipe). If so it returns
True.
See also: FpFStat (189), FpS_ISLNK (225), FpS_ISREG (225), FpS_ISCHR (224), FpS_ISBLK (223), FpS_ISDIR
(224), FpS_ISSOCK (226)
224
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
1.4.88 fpS_ISLNK
Synopsis: Is file a symbolic link
See also: FpFStat (189), FpS_ISFIFO (224), FpS_ISREG (225), FpS_ISCHR (224), FpS_ISBLK (223), FpS_ISDIR
(224), FpS_ISSOCK (226)
Listing: ./bunixex/ex53.pp
Program Example53 ;
Var I n f o : S t a t ;
begin
i f f p L S t a t ( paramstr ( 1 ) , @info )=0 then
begin
i f fpS_ISLNK ( i n f o . st_mode ) then
Writeln ( ' F i l e i s a l i n k ' ) ;
i f fpS_ISREG ( i n f o . st_mode ) then
Writeln ( ' F i l e i s a r e g u l a r f i l e ' ) ;
i f fpS_ISDIR ( i n f o . st_mode ) then
Writeln ( ' F i l e i s a d i r e c t o r y ' ) ;
i f fpS_ISCHR ( i n f o . st_mode ) then
Writeln ( ' F i l e i s a character device f i l e ' ) ;
i f fpS_ISBLK ( i n f o . st_mode ) then
Writeln ( ' F i l e i s a block device f i l e ' ) ;
i f fpS_ISFIFO ( i n f o . st_mode ) then
W r i t e l n ( ' F i l e i s a named p i p e ( FIFO ) ' ) ;
i f fpS_ISSOCK ( i n f o . st_mode ) then
Writeln ( ' F i l e i s a socket ' ) ;
end ;
end .
1.4.89 fpS_ISREG
Synopsis: Is file a regular file
See also: FpFStat (189), FpS_ISFIFO (224), FpS_ISLNK (225), FpS_ISCHR (224), FpS_ISBLK (223), FpS_ISDIR
(224), FPS_ISSOCK (226)
225
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
1.4.90 fpS_ISSOCK
Synopsis: Is file a Unix socket
See also: FpFStat (189), FpS_ISFIFO (224), FpS_ISLNK (225), FpS_ISCHR (224), FpS_ISBLK (223), FpS_ISDIR
(224), FpS_ISREG (225)
1.4.91 fptime
Synopsis: Return the current Unix time
Declaration: function FpTime(var tloc: TTime) : TTime
function fptime : time_t
Visibility: default
Description: FpTime returns the number of seconds since 00:00:00 GMT, january 1, 1970. it is adjusted to the
local time zone, but not to DST. The result is also stored in tloc, if it is specified.
Errors: On error, -1 is returned. Extended error information can be retrieved using fpGetErrno (192).
Listing: ./bunixex/ex1.pp
Program Example1 ;
{ Program t o demonstrate t h e f p t i m e f u n c t i o n . }
Uses baseunix ;
begin
Write ( ' Secs p a s t t h e s t a r t o f t h e Epoch ( 0 0 : 0 0 1 / 1 / 1 9 8 0 ) : ' );
Writeln ( fptime ) ;
end .
1.4.92 FpTimes
Synopsis: Return execution times for the current process
Declaration: function FpTimes(var buffer: tms) : TClock
Visibility: default
Description: fpTimes stores the execution time of the current process and child processes in buffer.
The return value (on Linux) is the number of clock ticks since boot time. On error, -1 is returned,
and extended error information can be retrieved with fpGetErrno (192).
See also: fpUTime (228)
226
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
1.4.93 FpUmask
Synopsis: Set file creation mask.
Declaration: function FpUmask(cmask: TMode) : TMode
Visibility: default
Description: fpUmask changes the file creation mask for the current user to cmask. The current mask is re-
turned.
See also: fpChmod (180)
Listing: ./bunixex/ex27.pp
Program Example27 ;
Uses BaseUnix ;
begin
W r i t e l n ( ' Old Umask was : ' , fpUmask ( & 1 1 1 ) ) ;
WRiteln ( 'New Umask i s : ' ,&111);
end .
1.4.94 FpUname
Synopsis: Return system name.
Declaration: function FpUname(var name: UtsName) : cint
Visibility: default
Description: Uname gets the name and configuration of the current Linux kernel, and returns it in the name
record.
On success, 0 is returned, on error, -1 is returned.
Errors: Extended error information can be retrieved using fpGetErrno (192).
See also: FpUTime (228)
1.4.95 FpUnlink
Synopsis: Unlink (i.e. remove) a file.
Declaration: function FpUnlink(path: pChar) : cint
function FpUnlink(const path: RawByteString) : cint
Visibility: default
Description: FpUnlink decreases the link count on file Path. Path can be of type AnsiString or PChar.
If the link count is zero, the file is removed from the disk.
The function returns zero if the call was successful, a nonzero value indicates failure.
Note: There exist a portable alternative to erase files: system.erase. Please use fpUnlink only if you
are writing Unix specific code. System.erase will work on all operating systems.
For an example, see FpLink (197).
227
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
sys_eaccessYou have no write access right in the directory containing Path, or you have no search
permission in one of the directory components of Path.
sys_epermThe directory containing pathname has the sticky-bit set and the process’s effective uid is
neither the uid of the file to be deleted nor that of the directory containing it.
sys_enoentA component of the path doesn’t exist.
sys_enotdirA directory component of the path is not a directory.
sys_eisdirPath refers to a directory.
sys_enomemInsufficient kernel memory.
sys_erofsPath is on a read-only file system.
1.4.96 FpUtime
Synopsis: Set access and modification times of a file (touch).
Declaration: function FpUtime(path: pChar; times: pUtimBuf) : cint
function FpUtime(const path: RawByteString; times: pUtimBuf) : cint
Visibility: default
Description: FpUtime sets the access and modification times of the file specified in Path. the times record
contains 2 fields, actime, and modtime, both of type time_t (commonly a longint). They
should be filled with an epoch-like time, specifying, respectively, the last access time, and the last
modification time. For some file systems (most notably, FAT), these times are the same.
The function returns zero on success, a nonzero return value indicates failure.
Errors: Extended error information can be retrieved using fpGetErrno (192).
Listing: ./bunixex/ex25.pp
Program Example25 ;
Var u t i m : u t i m b u f ;
dow , msec , year , month , day , hour , minute , second : Word ;
begin
{ Set access and m o d i f i c a t i o n t i m e o f e x e c u t a b l e source }
GetTime ( hour , minute , second , msec ) ;
GetDate ( year , month , day , dow ) ;
u t i m . actime : = LocalToEpoch ( year , month , day , hour , minute , second ) ;
228
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
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.97 FpWait
Synopsis: Wait for a child to exit.
1.4.98 FpWaitPid
Synopsis: Wait for a process to terminate
Declaration: function FpWaitpid(pid: TPid; stat_loc: pcint; options: cint) : TPid
function FpWaitPid(pid: TPid; var Status: cint; Options: cint) : TPid
Visibility: default
Description: fpWaitPid waits for a child process with process ID Pid to exit. The value of Pid can be one of
the following:
Pid < -1Causes fpWaitPid to wait for any child process whose process group ID equals the abso-
lute value of pid.
Pid = -1Causes fpWaitPid to wait for any child process.
Pid = 0Causes fpWaitPid to wait for any child process whose process group ID equals the one of
the calling process.
Pid > 0Causes fpWaitPid to wait for the child whose process ID equals the value of Pid.
The Options parameter can be used to specify further how fpWaitPid behaves:
229
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
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 (189).
1.4.99 FpWrite
Synopsis: Write data to file descriptor
Declaration: function FpWrite(fd: cint; buf: pChar; nbytes: TSize) : TsSize
function FpWrite(fd: cint; const buf; nbytes: TSize) : TsSize
Visibility: default
Description: FpWrite writes at most nbytes bytes from buf to file descriptor fd.
The function returns the number of bytes actually written, or -1 if an error occurred.
1.4.100 FpWriteV
Synopsis: Vector write: Write from multiple buffers to a file descriptor
Declaration: function FpWriteV(fd: cint; const iov: piovec; iovcnt: cint) : TsSize
Visibility: default
Description: FpWriteV writes data to file descriptor fd. The data is taken from iovcnt buffers described by
the tiovec (176) buffers pointed to by iov. It works like fpWrite (230) only from multiple buffers.
1.4.101 FreeShellArgV
Synopsis: Free the result of a CreateShellArgV (178) function
Errors: None.
See also: CreateShellArgV (178)
230
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
1.4.102 wexitStatus
Synopsis: Extract the exit status from the fpWaitPID (229) result.
See also: FpWaitPID (229), WTERMSIG (232), WSTOPSIG (231), WIFEXITED (231), WIFSIGNALED
(231)
1.4.103 wifexited
Synopsis: Check whether the process exited normally
See also: FpWaitPID (229), WTERMSIG (232), WSTOPSIG (231), WIFSIGNALED (231), WEXITSTATUS
(231)
1.4.104 wifsignaled
Synopsis: Check whether the process was exited by a signal.
Declaration: function wifsignaled(Status: cint) : Boolean
Visibility: default
Description: WIFSIGNALED returns True if Status indicates that the process exited because it received a
signal.
See also: FpWaitPID (229), WTERMSIG (232), WSTOPSIG (231), WIFEXITED (231), WEXITSTATUS
(231)
1.4.105 wstopsig
Synopsis: Return the exit code from the process.
Declaration: function wstopsig(Status: cint) : cint
Visibility: default
231
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
1.4.106 wtermsig
Synopsis: Return the signal that caused a process to exit.
See also: FpWaitPID (229), WSTOPSIG (231), WIFEXITED (231), WIFSIGNALED (231), WEXITSTATUS
(231)
1.5 Dir
Dir = record
dd_fd : LongInt;
dd_loc : LongInt;
dd_size : LongInt
;
dd_buf : pDirent;
dd_nextoff : Cardinal;
dd_max : Integer
;
dd_lock : pointer;
end
1.6 Dirent
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)] of Char;
end
1.7 FLock
FLock = record
l_type : cshort;
l_whence : cshort;
l_start
: kernel_off_t;
l_len : kernel_off_t;
232
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
l_pid : pid_t;
end
1.8 iovec
iovec = record
iov_base : pointer;
iov_len : size_t;
end
iovec is used in fpreadv (211) for IO to multiple buffers to describe a buffer location.
1.9 pollfd
pollfd = record
fd : cint;
events : cshort;
revents : cshort
;
end
pollfd is used in the fpPoll (208) call to describe the various actions.
1.10 sigactionrec
sigactionrec = record
sa_handler : sigactionhandler_t;
sa_flags
: culong;
sa_restorer : sigrestorerhandler_t;
sa_mask : sigset_t
;
end
1.11 Stat
Stat = packed record
st_dev : QWord;
__pad0_ : Array[0..3] of
Byte;
__st_ino_ : Cardinal;
st_mode : Cardinal;
st_nlink :
233
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
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
1.12 tfpreg
tfpreg = record
significand : Array[0..3] of Word;
exponent :
Word;
end
1.13 tfpstate
tfpstate = record
cw : Cardinal;
sw : Cardinal;
tag : Cardinal
;
ipoff : Cardinal;
cssel : Cardinal;
dataoff : Cardinal;
datasel : Cardinal;
st : Array[0..7] of tfpreg;
status : Word
;
magic : Word;
fxsr_env : Array[0..5] of dword;
mxcsr : dword
;
234
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
reserved : dword;
fxsr_st : Array[0..7] of tfpxreg;
xmmreg
: Array[0..7] of txmmreg;
case Byte of
1: (
padding : Array[0.
.43] of dword;
case Byte of
1: (
padding2 : Array[0..11] of dword
;
);
2: (
sw_reserved : tfpx_sw_bytes;
);
);
2: (
padding1 : Array
[0..43] of dword;
);
end
1.14 tfpxreg
tfpxreg = record
significand : Array[0..3] of Word;
exponent
: Word;
padding : Array[0..2] of Word;
end
1.15 tfpx_sw_bytes
tfpx_sw_bytes = record
magic1 : dword;
extended_size : dword;
xfeatures : QWord;
xstate_size : dword;
padding : Array[0.
.6] of dword;
end
1.16 timezone
timezone = record
235
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
tz_minuteswest : cint;
tz_dsttime : cint;
end
1.17 tms
tms = record
tms_utime : clock_t;
tms_stime : clock_t;
tms_cutime
: clock_t;
tms_cstime : clock_t;
end
1.18 TRLimit
TRLimit = record
rlim_cur : rlim_t;
rlim_max : rlim_t;
end
TRLimit is the structure used by the kernel to return resource limit information in.
1.19 tsigaltstack
tsigaltstack = record
ss_sp : pointer;
ss_flags : LongInt;
ss_size
: LongInt;
end
1.20 TSigContext
TSigContext = record
gs : Word;
__gsh : Word;
fs : Word;
__fsh
: Word;
236
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
es : Word;
__esh : Word;
ds : Word;
__dsh : Word
;
edi : Cardinal;
esi : Cardinal;
ebp : Cardinal;
esp : Cardinal
;
ebx : Cardinal;
edx : Cardinal;
ecx : Cardinal;
eax : Cardinal
;
trapno : Cardinal;
err : Cardinal;
eip : Cardinal;
cs :
Word;
__csh : Word;
eflags : Cardinal;
esp_at_signal : Cardinal
;
ss : Word;
__ssh : Word;
fpstate : pfpstate;
oldmask : Cardinal
;
cr2 : Cardinal;
end
This type is CPU dependent. Cross-platform code should not use the contents of this record.
1.21 tsiginfo
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;
237
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
);
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;
_utime : clock_t;
_stime : clock_t;
end
;
);
5: (
_sigfault : record
_addr : pointer;
end
;
);
6: (
_sigpoll : record
_band : LongInt;
_fd
: LongInt;
end;
);
end;
end
1.22 TUcontext
TUcontext = record
uc_flags : Cardinal;
uc_link : Pucontext;
uc_stack : tsigaltstack;
uc_mcontext : TSigContext;
238
CHAPTER 1. REFERENCE FOR UNIT ’BASEUNIX’
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.
1.23 txmmreg
txmmreg = record
element : Array[0..3] of dword;
end
1.24 UTimBuf
UTimBuf = record
actime : time_t;
modtime : time_t;
end
Record used in fpUtime (228) to set file access and modification times.
1.25 UtsName
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.
239
Chapter 2
Name Page
System 1331
unicodedata 2012
2.2 Overview
The character unit contains the TCharacter (248) 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 (2012) unit.. The
FPC project distributes some Unicode collation data in .bco files which can be loaded using the
LoadCollation (2023) routine from that unit.
Value Explanation
coIgnoreInvalidSequence Ignore invalid unicodecode sequences
TCharacterOption is used in the toUpper (248) and toLower (247) functions to control the
behaviour of the function.
240
CHAPTER 2. REFERENCE FOR UNIT ’CHARACTER’
TUnicodeCategory = (ucUppercaseLetter,ucLowercaseLetter,
ucTitlecaseLetter,ucModifierLetter,ucOtherLetter,
ucNonSpacingMark,ucCombiningMark,ucEnclosingMark
,
ucDecimalNumber,ucLetterNumber,ucOtherNumber
,
ucConnectPunctuation,ucDashPunctuation,
ucOpenPunctuation,ucClosePunctuation,
ucInitialPunctuation,ucFinalPunctuation,
ucOtherPunctuation,ucMathSymbol,ucCurrencySymbol,
ucModifierSymbol,ucOtherSymbol,ucSpaceSeparator,
ucLineSeparator,ucParagraphSeparator,ucControl,
ucFormat,ucSurrogate,ucPrivateUse,ucUnassigned)
241
CHAPTER 2. REFERENCE FOR UNIT ’CHARACTER’
Value Explanation
ucClosePunctuation Punctuation, close (Pe)
ucCombiningMark Mark, spacing combining (Mc)
ucConnectPunctuation Punctuation, connector (Pc)
ucControl Other, control (Cc)
ucCurrencySymbol Symbol, currency (Sc)
ucDashPunctuation Punctuation, dash (Pd)
ucDecimalNumber Number, decimal digit (Nd)
ucEnclosingMark Mark, enclosing (Me)
ucFinalPunctuation Punctuation, final quote (Pf, may behave like Ps or Pe depending on usage)
ucFormat Other, format (Cf)
ucInitialPunctuation Punctuation, initial quote (Pi, may behave like Ps or Pe depending on usage)
ucLetterNumber Number, letter (Nl)
ucLineSeparator Separator, line (Zl)
ucLowercaseLetter Letter, lowercase (Ll)
ucMathSymbol Symbol, math (Sm)
ucModifierLetter Letter, modifier (Lm)
ucModifierSymbol Symbol, modifier (Sk)
ucNonSpacingMark Mark, nonspacing (Mn)
ucOpenPunctuation Punctuation, open (Ps)
ucOtherLetter Letter, other (Lo)
ucOtherNumber Number, other (No)
ucOtherPunctuation Punctuation, other (Po)
ucOtherSymbol Symbol, other (So)
ucParagraphSeparator Separator, paragraph (Zp)
ucPrivateUse Other, private use (Co)
ucSpaceSeparator Separator, space (Zs)
ucSurrogate Other, surrogate (Cs)
ucTitlecaseLetter Letter, titlecase (Lt)
ucUnassigned Other, not assigned (including noncharacters) (Cn)
ucUppercaseLetter Letter, uppercase (Lu)
This enumeration type contains the characterization of all possible Unicode characters. It is used in
the GetUnicodeCategory (243) and TCharacter.GetUnicodeCategory (250) functions.
242
CHAPTER 2. REFERENCE FOR UNIT ’CHARACTER’
2.4.2 ConvertToUtf32
Synopsis: alias for TCharacter.ConvertToUtf32
2.4.3 GetNumericValue
Synopsis: Alias for TCharacter.GetNumericValue
Declaration: function GetNumericValue(AChar: UnicodeChar) : Double; Overload
function GetNumericValue(const AString: UnicodeString; AIndex: Integer)
: Double; Overload
Visibility: default
Description: GetNumericValue is a shortcut for TCharacter.GetNumericValue (250).
See also: TCharacter.GetNumericValue (250)
2.4.4 GetUnicodeCategory
Synopsis: Alias for TCharacter.GetUnicodeCategory
Declaration: function GetUnicodeCategory(AChar: UnicodeChar) : TUnicodeCategory
; Overload
function GetUnicodeCategory(const AString: UnicodeString;
AIndex: Integer) : TUnicodeCategory
; Overload
Visibility: default
Description: GetUnicodeCategory is a shortcut for TCharacter.GetUnicodeCategory (250).
See also: TCharacter.GetUnicodeCategory (250)
243
CHAPTER 2. REFERENCE FOR UNIT ’CHARACTER’
2.4.5 IsControl
Synopsis: Alias for TCharacter.IsControl
2.4.6 IsDigit
Synopsis: Alias for TCharacter.IsDigit
2.4.7 IsHighSurrogate
Synopsis: Alias for TCharacter.IsHighSurrogate
Declaration: function IsHighSurrogate(AChar: UnicodeChar) : Boolean; Overload
function IsHighSurrogate(const AString: UnicodeString; AIndex: Integer)
: Boolean; Overload
Visibility: default
Description: IsHighSurrogate is a shortcut for TCharacter.IsHighSurrogate (252)
2.4.8 IsLetter
Synopsis: Alias for TCharacter.IsLetter
Declaration: function IsLetter(AChar: UnicodeChar) : Boolean; Overload
function IsLetter(const AString: UnicodeString; AIndex: Integer)
: Boolean; Overload
Visibility: default
Description: IsLetter is a shortcut for TCharacter.IsLetter (253)
See also: TCharacter.IsLetter (253)
244
CHAPTER 2. REFERENCE FOR UNIT ’CHARACTER’
2.4.9 IsLetterOrDigit
Synopsis: Alias for TCharacter.IsLetterOrDigit
2.4.10 IsLower
Synopsis: Alias for TCharacter.IsLower
2.4.11 IsLowSurrogate
Synopsis: Alias for TCharacter.IsLowSurrogate
Declaration: function IsLowSurrogate(AChar: UnicodeChar) : Boolean; Overload
function IsLowSurrogate(const AString: UnicodeString; AIndex: Integer)
: Boolean; Overload
Visibility: default
Description: IsLowSurrogate is a shortcut for TCharacter.IsLowSurrogate (252)
2.4.12 IsNumber
Synopsis: Alias for TCharacter.IsNumber
Declaration: function IsNumber(AChar: UnicodeChar) : Boolean; Overload
function IsNumber(const AString: UnicodeString; AIndex: Integer)
: Boolean; Overload
Visibility: default
Description: IsNumber is a shortcut for TCharacter.IsNumber (254)
See also: TCharacter.IsNumber (254)
245
CHAPTER 2. REFERENCE FOR UNIT ’CHARACTER’
2.4.13 IsPunctuation
Synopsis: Alias for TCharacter.IsPunctuation
2.4.14 IsSeparator
Synopsis: Alias for TCharacter.IsSeparator
2.4.15 IsSurrogate
Synopsis: Alias for TCharacter.IsSurrogate
Declaration: function IsSurrogate(AChar: UnicodeChar) : Boolean; Overload
function IsSurrogate(const AString: UnicodeString; AIndex: Integer)
: Boolean; Overload
Visibility: default
Description: IsSurrogate is a shortcut for TCharacter.IsSurrogate (251).
2.4.16 IsSurrogatePair
Synopsis: Alias for TCharacter.IsSurrogatePair
Declaration: function IsSurrogatePair(const AHighSurrogate: UnicodeChar;
const ALowSurrogate: UnicodeChar) : Boolean
; Overload
function IsSurrogatePair(const AString: UnicodeString; AIndex: Integer)
: Boolean; Overload
Visibility: default
Description: IsSurrogatePair is a shortcut for TCharacter.IsSurrogatePair (252)
246
CHAPTER 2. REFERENCE FOR UNIT ’CHARACTER’
2.4.17 IsSymbol
Synopsis: Alias for TCharacter.IsSymbol
2.4.18 IsUpper
Synopsis: Alias for TCharacter.IsUpper
2.4.19 IsWhiteSpace
Synopsis: Alias for TCharacter.IsWhiteSpace
Declaration: function IsWhiteSpace(AChar: UnicodeChar) : Boolean; Overload
function IsWhiteSpace(const AString: UnicodeString; AIndex: Integer)
: Boolean; Overload
Visibility: default
Description: IsWhiteSpace is a shortcut for TCharacter.IsWhiteSpace (256)
2.4.20 ToLower
Synopsis: Alias for TCharacter.ToLower
Declaration: function ToLower(AChar: UnicodeChar) : UnicodeChar; Overload
function ToLower(const AString: UnicodeString) : UnicodeString
; Overload
Visibility: default
Description: ToLower is a shortcut for TCharacter.ToLower (257)
See also: TCharacter.ToLower (257)
247
CHAPTER 2. REFERENCE FOR UNIT ’CHARACTER’
2.4.21 ToUpper
Synopsis: Alias for TCharacter.ToUpper
2.5 TCharacter
2.5.1 Description
TCharacter is provided for Delphi compatibility. All it’s class functions and methods are also
available as regular functions.
2.5.3 TCharacter.Create
Synopsis: Constructor (do not call)
Declaration: constructor Create
248
CHAPTER 2. REFERENCE FOR UNIT ’CHARACTER’
Visibility: public
Description: Create is provided for completeness and Delphi compatibility, but should not be called in FPC
code, it will raise an exception.
Errors: Any attempt to call Create will result in an exception being raised.
2.5.4 TCharacter.ConvertFromUtf32
Synopsis: Convert a UTF32 character to UnicodeString
Declaration: class function ConvertFromUtf32(AChar: UCS4Char) : UnicodeString
; Static
Visibility: public
Description: TCharacter.ConvertFromUtf32 converts a single UTF32 character AChar to a UTF16
string. This is the opposite of TCharacter.ConvertToUtf32 (249).
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 (240)
exception is raised.
See also: EArgumentOutOfRangeException (240), TCharacter.ConvertToUtf32 (249)
2.5.5 TCharacter.ConvertToUtf32
Synopsis: Convert a UTF16 character to a UTF32 character
Declaration: class function ConvertToUtf32(const AString: UnicodeString;
AIndex: Integer) : UCS4Char; Overload
; Static
class function ConvertToUtf32(const AString: UnicodeString;
AIndex: Integer; out ACharLength: Integer)
: UCS4Char; Overload; Static
class function ConvertToUtf32(const AHighSurrogate: UnicodeChar;
const ALowSurrogate: UnicodeChar)
: UCS4Char; Overload; Static
Visibility: public
Description: TCharacter.ConvertToUtf32 converts a UTF16-encoded Unicode character to a Unicode32
character. This is the opposite of TCharacter.ConvertFromUtf32 (249). The function exists in several
overloaded versions, to be able to present the Unicode character in one of 2 ways:
1.As a position AIndex (in unicodechar units) in a string AString to a Unicode32 charac-
ter. The source is a string, since multiple UTF16 characters can be needed to encode a single
UTF32 character. In this form, Optionally, the character length (1 or 2) can be returned in
ACharLength.
2.As 2 UTF16 Unicode characters, representing the high and low surrogate pairs: AHighSurrogate
and ALowSurrogate.
Errors: If AIndex is not a valid character index in the string AString, an EArgumentOutOfRangeExcep-
tion (240) exception is raised. If the character at that position is not complete, an EArgumentExcep-
tion (240) exception is raised.
249
CHAPTER 2. REFERENCE FOR UNIT ’CHARACTER’
2.5.6 TCharacter.GetNumericValue
Synopsis: Get the numeric value of the character
Declaration: class function GetNumericValue(AChar: UnicodeChar) : Double; Overload
; Static
class function GetNumericValue(const AString: UnicodeString;
AIndex: Integer) : Double; Overload
; Static
Visibility: public
Description: TCharacter.GetNumericValue returns the numerical value (ID) of the Unicode character.
The character can be presented in 2 ways: AChar, a UTF16 Unicode character, or a surrogate pair
in a Unicode string AString starting at position AIndex.
Errors: If AIndex is not a valid character index in the string AString, an EArgumentOutOfRangeExcep-
tion (240) exception is raised. If the character at that position is not complete, an EArgumentExcep-
tion (240) exception is raised.
See also: TCharacter.GetUnicodeCategory (250)
2.5.7 TCharacter.GetUnicodeCategory
Synopsis: Get the Unicode category of a character
Visibility: public
Description: TCharacter.GetUnicodeCategory returns the Unicode category of a character. The charac-
ter can be presented in 2 ways: AChar, a UTF16 Unicode character, or a surrogate pair in a Unicode
string AString starting at position AIndex.
Errors: If AIndex is not a valid character index in the string AString, an EArgumentOutOfRangeExcep-
tion (240) exception is raised. If the character at that position is not complete, an EArgumentExcep-
tion (240) exception is raised.
See also: TUnicodeCategory (241)
2.5.8 TCharacter.IsControl
Synopsis: Check whether a Unicode character is a Unicode control character
Declaration: class function IsControl(AChar: UnicodeChar) : Boolean; Overload
; Static
class function IsControl(const AString: UnicodeString; AIndex: Integer)
: Boolean; Overload; Static
250
CHAPTER 2. REFERENCE FOR UNIT ’CHARACTER’
Visibility: public
Description: IsControl returns True if a Unicode character has category ucControl. 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 EArgumentOutOfRangeExcep-
tion (240) exception is raised. If the character at that position is not complete, an EArgumentExcep-
tion (240) exception is raised.
See also: GetUnicodeCategory (250), IsDigit (251), IsSurrogate (251), IsHighSurrogate (252), IsLowSurro-
gate (252), IsSurrogatePair (252), IsLetter (253), IsLetterOrDigit (253), IsLower (254), IsNumber
(254), IsPunctuation (255), IsSeparator (255), IsSymbol (255), IsUpper (256), IsWhiteSpace (256)
2.5.9 TCharacter.IsDigit
Synopsis: Check whether a Unicode character is a digit
Declaration: class function IsDigit(AChar: UnicodeChar) : Boolean; Overload; Static
class function IsDigit(const AString: UnicodeString; AIndex: Integer)
: Boolean; Overload; Static
Visibility: public
Description: IsDigit returns True if a Unicode character has category ucDecimalNumber. 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 EArgumentOutOfRangeExcep-
tion (240) exception is raised. If the character at that position is not complete, an EArgumentExcep-
tion (240) exception is raised.
See also: IsControl (250), IsDigit (251), IsSurrogate (251), IsHighSurrogate (252), IsLowSurrogate (252), Is-
SurrogatePair (252), IsLetter (253), IsLetterOrDigit (253), IsLower (254), IsNumber (254), IsPunc-
tuation (255), IsSeparator (255), IsSymbol (255), IsUpper (256), IsWhiteSpace (256)
2.5.10 TCharacter.IsSurrogate
Synopsis: Check whether a Unicode character is a surrogate
Declaration: class function IsSurrogate(AChar: UnicodeChar) : Boolean; Overload
; Static
class function IsSurrogate(const AString: UnicodeString;
AIndex: Integer) : Boolean; Overload; Static
Visibility: public
Description: IsSurrogate returns True if a Unicode character has category ucSurrogate. 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 EArgumentOutOfRangeExcep-
tion (240) exception is raised. If the character at that position is not complete, an EArgumentExcep-
tion (240) exception is raised.
See also: EArgumentException (240), IsControl (250), IsDigit (251), IsHighSurrogate (252), IsLowSurrogate
(252), IsLetter (253), IsLetterOrDigit (253), IsLower (254), IsNumber (254), IsPunctuation (255),
IsSymbol (255), IsUpper (256), IsWhiteSpace (256)
251
CHAPTER 2. REFERENCE FOR UNIT ’CHARACTER’
2.5.11 TCharacter.IsHighSurrogate
Synopsis: Check whether a Unicode character is a surrogate in the high range
Visibility: public
Description: IsHighSurrogate returns True if a Unicode character has category ucSurrogate and is in
the high range of the surrogate characters (between HIGH_SURROGATE_BEGIN and HIGH_SURROGATE_END).
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 EArgumentOutOfRangeExcep-
tion (240) exception is raised. If the character at that position is not complete, an EArgumentExcep-
tion (240) exception is raised.
See also: EArgumentException (240), IsControl (250), IsDigit (251), IsSurrogate (251), IsLowSurrogate (252),
IsLetter (253), IsLetterOrDigit (253), IsLower (254), IsNumber (254), IsPunctuation (255), IsSym-
bol (255), IsUpper (256), IsWhiteSpace (256)
2.5.12 TCharacter.IsLowSurrogate
Synopsis: Check whether a Unicode character is a surrogate in the low range
Declaration: class function IsLowSurrogate(AChar: UnicodeChar) : Boolean; Overload
; Static
class function IsLowSurrogate(const AString: UnicodeString;
AIndex: Integer) : Boolean; Overload
; Static
Visibility: public
Description: IsLowSurrogate returns True if a Unicode character has category ucSurrogate and is in the
low range of the surrogate characters (between LOW_SURROGATE_BEGIN and LOW_SURROGATE_END).
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 EArgumentOutOfRangeExcep-
tion (240) exception is raised. If the character at that position is not complete, an EArgumentExcep-
tion (240) exception is raised.
See also: EArgumentException (240), IsControl (250), IsDigit (251), IsSurrogate (251), IsHighSurrogate
(252), IsLetter (253), IsLetterOrDigit (253), IsLower (254), IsNumber (254), IsPunctuation (255),
IsSymbol (255), IsUpper (256), IsWhiteSpace (256)
2.5.13 TCharacter.IsSurrogatePair
Synopsis: Check if a pair of characters is a set of high/low surrogate characters
Declaration: class function IsSurrogatePair(const AHighSurrogate: UnicodeChar;
const ALowSurrogate: UnicodeChar)
: Boolean; Overload; Static
252
CHAPTER 2. REFERENCE FOR UNIT ’CHARACTER’
2.5.14 TCharacter.IsLetter
Synopsis: Check if a Unicode character is a letter.
Declaration: class function IsLetter(AChar: UnicodeChar) : Boolean; Overload
; Static
class function IsLetter(const AString: UnicodeString; AIndex: Integer)
: Boolean; Overload; Static
Visibility: public
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 en-
coded character starting at position AIndex in string AString.
Errors: If AIndex is not a valid character index in the string AString, an EArgumentOutOfRangeExcep-
tion (240) exception is raised. If the character at that position is not complete, an
See also: EArgumentException (240), IsControl (250), IsDigit (251), IsSurrogate (251), IsHighSurrogate
(252), IsLowSurrogate (252), IsSurrogatePair (252), IsLetter (253), IsLetterOrDigit (253), IsLower
(254), IsNumber (254), IsPunctuation (255), IsSymbol (255), IsUpper (256), IsWhiteSpace (256)
2.5.15 TCharacter.IsLetterOrDigit
Synopsis: Check if a Unicode character is a letter or digit
Declaration: class function IsLetterOrDigit(AChar: UnicodeChar) : Boolean; Overload
; Static
class function IsLetterOrDigit(const AString: UnicodeString;
AIndex: Integer) : Boolean; Overload
; Static
Visibility: public
Description: IsLetterOrDigit returns True if a Unicode character has category that is one of the letter cate-
gories (ucUppercaseLetter, ucLowercaseLetter, ucTitlecaseLetter, ucModifierLetter,
ucOtherLetter,ucDecimalNumber,ucLetterNumber). The character can be specified as
253
CHAPTER 2. REFERENCE FOR UNIT ’CHARACTER’
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 EArgumentOutOfRangeExcep-
tion (240) exception is raised. If the character at that position is not complete, an EArgumentExcep-
tion (240) exception is raised.
See also: IsControl (250), IsDigit (251), IsSurrogate (251), IsHighSurrogate (252), IsLowSurrogate (252),
IsSurrogatePair (252), IsLetter (253), IsLower (254), IsNumber (254), IsPunctuation (255), IsSymbol
(255), IsUpper (256), IsWhiteSpace (256)
2.5.16 TCharacter.IsLower
Synopsis: Check if a Unicode character is a lowercase letter
Description: IsLower returns True if a Unicode character has category ucLowercaseLetter. The charac-
ter 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 EArgumentOutOfRangeExcep-
tion (240) exception is raised. If the character at that position is not complete, an EArgumentExcep-
tion (240) exception is raised.
See also: IsControl (250), IsDigit (251), IsSurrogate (251), IsHighSurrogate (252), IsLowSurrogate (252),
IsSurrogatePair (252), IsLetter (253), IsLetterOrDigit (253), IsNumber (254), IsPunctuation (255),
IsSymbol (255), IsUpper (256), IsWhiteSpace (256)
2.5.17 TCharacter.IsNumber
Synopsis: Check if a Unicode character is a number
Declaration: class function IsNumber(AChar: UnicodeChar) : Boolean; Overload
; Static
class function IsNumber(const AString: UnicodeString; AIndex: Integer)
: Boolean; Overload; Static
Visibility: public
Description: IsNumber returns True if a Unicode character has category that is one of the number categories
(ucDecimalNumber, ucLetterNumber, ucOtherNumber). 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 EArgumentOutOfRangeExcep-
tion (240) exception is raised. If the character at that position is not complete, an EArgumentExcep-
tion (240) exception is raised.
See also: IsControl (250), IsDigit (251), IsSurrogate (251), IsHighSurrogate (252), IsLowSurrogate (252), Is-
SurrogatePair (252), IsLetter (253), IsLetterOrDigit (253), IsLower (254), IsNumber (254), IsPunc-
tuation (255), IsSymbol (255), IsUpper (256), IsWhiteSpace (256)
254
CHAPTER 2. REFERENCE FOR UNIT ’CHARACTER’
2.5.18 TCharacter.IsPunctuation
Synopsis: Check if a Unicode character is a punctuation character
Declaration: class function IsPunctuation(AChar: UnicodeChar) : Boolean; Overload
; Static
class function IsPunctuation(const AString: UnicodeString;
AIndex: Integer) : Boolean; Overload
; Static
Visibility: public
Description: IsPunctuation returns True if a Unicode character has category that is one of the punctua-
tion categories (ucConnectPunctuation, ucDashPunctuation, ucOpenPunctuation,
ucClosePunctuation, ucInitialPunctuation, ucFinalPunctuation, ucOtherPunctuation).
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 EArgumentOutOfRangeExcep-
tion (240) exception is raised. If the character at that position is not complete, an EArgumentExcep-
tion (240) exception is raised.
See also: IsControl (250), IsDigit (251), IsSurrogate (251), IsHighSurrogate (252), IsLowSurrogate (252), Is-
SurrogatePair (252), IsLetter (253), IsLetterOrDigit (253), IsLower (254), IsNumber (254), IsSymbol
(255), IsUpper (256), IsWhiteSpace (256)
2.5.19 TCharacter.IsSeparator
Synopsis: Check if a Unicode character is a separator character
Declaration: class function IsSeparator(AChar: UnicodeChar) : Boolean; Overload
; Static
class function IsSeparator(const AString: UnicodeString;
AIndex: Integer) : Boolean; Overload; Static
Visibility: public
Description: IsSeparator returns True if a Unicode character has category that is one of the separator cat-
egories (ucSpaceSeparator, ucLineSeparator, ucParagraphSeparator). The char-
acter 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 EArgumentOutOfRangeExcep-
tion (240) exception is raised. If the character at that position is not complete, an EArgumentExcep-
tion (240) exception is raised.
See also: IsControl (250), IsDigit (251), IsSurrogate (251), IsHighSurrogate (252), IsLowSurrogate (252), Is-
SurrogatePair (252), IsLetter (253), IsLetterOrDigit (253), IsLower (254), IsNumber (254), IsPunc-
tuation (255), IsSymbol (255), IsUpper (256), IsWhiteSpace (256)
2.5.20 TCharacter.IsSymbol
Synopsis: Check if a Unicode character is a symbol character
Declaration: class function IsSymbol(AChar: UnicodeChar) : Boolean; Overload
; Static
class function IsSymbol(const AString: UnicodeString; AIndex: Integer)
: Boolean; Overload; Static
255
CHAPTER 2. REFERENCE FOR UNIT ’CHARACTER’
Visibility: public
Description: IsSymbol returns True if a Unicode character has category that is one of the symbol cate-
gories (ucMathSymbol, ucCurrencySymbol, ucModifierSymbol, ucOtherSymbol).
The character can be specified as a UTF16 character AChar or a UTF16 encoded character start-
ing at position AIndex in string AString.
Errors: If AIndex is not a valid character index in the string AString, an EArgumentOutOfRangeExcep-
tion (240) exception is raised. If the character at that position is not complete, an EArgumentExcep-
tion (240) exception is raised.
See also: IsControl (250), IsDigit (251), IsSurrogate (251), IsHighSurrogate (252), IsLowSurrogate (252), Is-
SurrogatePair (252), IsLetter (253), IsLetterOrDigit (253), IsLower (254), IsNumber (254), IsPunc-
tuation (255), IsSeparator (255), IsUpper (256), IsWhiteSpace (256)
2.5.21 TCharacter.IsUpper
Synopsis: Check whether a Unicode character is an uppercase letter
Declaration: class function IsUpper(AChar: UnicodeChar) : Boolean; Overload; Static
class function IsUpper(const AString: UnicodeString; AIndex: Integer)
: Boolean; Overload; Static
Visibility: public
Description: IsUpper returns True if a Unicode character has category ucUppercaseLetter. The charac-
ter 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 EArgumentOutOfRangeExcep-
tion (240) exception is raised. If the character at that position is not complete, an EArgumentExcep-
tion (240) exception is raised.
See also: IsControl (250), IsDigit (251), IsSurrogate (251), IsHighSurrogate (252), IsLowSurrogate (252), Is-
SurrogatePair (252), IsLetter (253), IsLetterOrDigit (253), IsLower (254), IsNumber (254), IsPunc-
tuation (255), IsSeparator (255), IsSymbol (255), IsWhiteSpace (256)
2.5.22 TCharacter.IsWhiteSpace
Synopsis: Check whether a Unicode character is a whitespace character
Description: IsUpper returns True if a Unicode character has is a whitespace character. It checks the char-
acter properties. 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 EArgumentOutOfRangeExcep-
tion (240) exception is raised. If the character at that position is not complete, an EArgumentExcep-
tion (240) exception is raised.
256
CHAPTER 2. REFERENCE FOR UNIT ’CHARACTER’
See also: IsControl (250), IsDigit (251), IsSurrogate (251), IsHighSurrogate (252), IsLowSurrogate (252), Is-
SurrogatePair (252), IsLetter (253), IsLetterOrDigit (253), IsLower (254), IsNumber (254), IsPunc-
tuation (255), IsSeparator (255), IsSymbol (255), IsUpper (256)
2.5.23 TCharacter.ToLower
Synopsis: Convert a character or string to lowercase
2.5.24 TCharacter.ToUpper
Synopsis: Convert a character or string to uppercase
Declaration: class function ToUpper(AChar: UnicodeChar) : UnicodeChar; Overload
; Static
class function ToUpper(const AString: UnicodeString) : UnicodeString
; Overload; Static
class function ToUpper(const AString: UnicodeString;
const AOptions: TCharacterOptions) : UnicodeString
; Overload; Static
Visibility: public
Description: ToUpper converts the Unicode character AChar or string AString to uppercase. Options de-
termines 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 (240) exception when this happens.
257
Chapter 3
Name Page
System 1331
3.2 Overview
The charset unit can be used to load single-byte character set (code page) descriptions. It is used
in the fpwidestring (258) 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 (260) 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 (258), cp932 (258), cp936 (258),
cp949 (258) and cp950 (258).
3.3.2 Types
preversecharmapping = ^treversecharmapping
Pointer to treversecharmapping
258
CHAPTER 3. REFERENCE FOR UNIT ’CHARSET’
punicodecharmapping = ^tunicodecharmapping
Pointer to tunicodecharmapping
punicodemap = ^tunicodemap
Pointer to tunicodemap
tunicodechar = Word
tunicodechar is a type used to represent Unicode characters in this file, it should not be used for
other Unicode routines.
tunicodecharmappingflag = (umf_noinfo,umf_leadbyte,umf_undefined,
umf_unused)
Value Explanation
umf_leadbyte Unicode character uses leading byte
umf_noinfo No extra information about Unicode character
umf_undefined Currently unused
umf_unused Unused position in code page
tunicodestring = ^tunicodechar
tunicodestring is a type used to represent Unicode strings in this file, it should not be used for
other Unicode routines.
259
CHAPTER 3. REFERENCE FOR UNIT ’CHARSET’
3.4.2 getmap
Synopsis: Find a codepage map
3.4.3 getunicode
Synopsis: Map single-byte character to Unicode character.
Declaration: function getunicode(c: Char; p: punicodemap) : tunicodechar
function getunicode(AAnsiStr: PAnsiChar; AAnsiLen: LongInt;
AMap: punicodemap; ADest: tunicodestring) : LongInt
Visibility: default
Description: The first form of getunicode will map a single character c to its Unicode equivalent for mapping
p. If no equivalent can be found, 0 is returned.
The second form of getunicode will transform a string (specified using a pointer AAnsiStr to a
buffer with length AAnsiLen) to a Unicode string using single byte codepage map AMap. It returns
the number of Unicode characters. If ADest is Nil then just the number of characters is returned.
If ADest is not nil, it must point to a buffer large enough to contain the Unicode string, and the
converted string will be copied to it.
Errors: No checking on the validity of the buffers is done.
3.4.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
260
CHAPTER 3. REFERENCE FOR UNIT ’CHARSET’
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 (262).
Errors: On error, Nil is returned.
See also: loadunicodemapping (261), registermapping (262)
3.4.5 loadunicodemapping
Synopsis: Load textual single-byte codepage to Unicode map from file
Declaration: function loadunicodemapping(const cpname: string; const f: string;
cp: Word) : punicodemap
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 (262).
Errors: On error, Nil is returned.
See also: loadbinaryunicodemapping (260), registermapping (262)
3.4.6 mappingavailable
Synopsis: Check if a mapping is available for a specified code page.
Declaration: function mappingavailable(const s: string) : Boolean
function mappingavailable(cp: Word) : Boolean
Visibility: default
Description: mappingavailable returns True if a mapping for a specified code page (using name s or
numerical identifier cp) is available, or False if it is not.
See also: registermapping (262), registerbinarymapping (261), getmap (260)
3.4.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 (260) using directory and cpname
and registers the resulting mapping, if any was successfully loaded, using registermapping (262). It
returns True if the operation was successful.
Errors: On error, False is returned.
See also: loadbinaryunicodemapping (260), registermapping (262)
261
CHAPTER 3. REFERENCE FOR UNIT ’CHARSET’
3.4.8 registermapping
Synopsis: Register mapping
3.5 treversecharmapping
treversecharmapping = packed record
unicode : tunicodechar;
char1
: Byte;
char2 : Byte;
end
3.6 TSerializedMapHeader
TSerializedMapHeader = packed record
cpName : string;
cp : UInt16
;
mapLength : UInt32;
lastChar : Int32;
reverseMapLength : UInt32
;
end
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.
3.7 tunicodecharmapping
tunicodecharmapping = packed record
unicode : tunicodechar;
flag
: tunicodecharmappingflag;
reserved : Byte;
end
262
CHAPTER 3. REFERENCE FOR UNIT ’CHARSET’
3.8 tunicodemap
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 char-
acter set. It contains both a forward and backward mapping.
263
Chapter 4
Name Page
rtlconsts ??
System 1331
sysutils 1598
Types 1901
TypInfo 1937
4.2 Overview
This documentation describes the FPC classes unit. The Classes unit contains basic classes for the
Free Component Library (FCL):
Furthermore it introduces methods for object persistence, and classes that understand an owner-
owned relationship, with automatic memory management.
264
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
dupAccept = Types.dupAccept
dupError = Types.dupError
If an attempt is made to add a duplicate value to the list, an EStringListError (303) exception is
raised.
dupIgnore = Types.dupIgnore
Duplicate values will not be added to the list, but no error will be triggered.
Constant that is found at the start of a binary stream containing a streamed component.
fmCreate = $FF00
fmOpenRead = 0
fmOpenReadWrite = 2
fmOpenWrite = 1
MASK = 31
MaxBitFlags = $7FFFFFE0
scAlt = $8000
265
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
scCtrl = $4000
scNone = 0
scShift = $2000
SGUIDObserved = '{663C603C-3F3C-4CC5-823C-AC8079F979E5}'
SGUIDObserver = '{BC7376EA-199C-4C2A-8684-F4805F0691CA}'
soFromBeginning = 0
soFromCurrent = 1
soFromEnd = 2
toEOF = Char(0)
Value returned by TParser.Token (426) when the end of the input stream was reached.
toFloat = Char(4)
Value returned by TParser.Token (426) when a floating point value was found in the input stream.
toInteger = Char(3)
Value returned by TParser.Token (426) when an integer was found in the input stream.
toString = Char(2)
Value returned by TParser.Token (426) when a string was found in the input stream.
toSymbol = Char(1)
Value returned by TParser.Token (426) when a symbol was found in the input stream.
toWString = Char(5)
Value returned by TParser.Token (426) when a widestring was found in the input stream.
266
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.3.2 Types
HMODULE = PtrInt
This type is provided for Delphi compatibility, it is used for resource streams.
PPointerList = ^TPointerList
PStringItem = ^TStringItem
PStringItemList = ^TStringItemList
TActiveXRegType = (axrComponentOnly,axrIncludeDescendants)
Value Explanation
axrComponentOnly
axrIncludeDescendants
This type is provided for compatibility only, and is currently not used in Free Pascal.
TAlignment = (taLeftJustify,taRightJustify,taCenter)
Value Explanation
taCenter Text is displayed centered.
taLeftJustify Text is displayed aligned to the left
taRightJustify 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.
267
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
TBiDiMode = (bdLeftToRight,bdRightToLeft,bdRightToLeftNoAlign,
bdRightToLeftReadingOnly)
Value Explanation
bdLeftToRight Texts read from left to right.
bdRightToLeft Texts read from right to left.
bdRightToLeftNoAlign Texts read from right to left, but not right-aligned
bdRightToLeftReadingOnly Texts read from right to left
TCollectionNotification = (cnAdded,cnExtracting,cnDeleting)
Value Explanation
cnAdded An item is added to the collection.
cnDeleting An item is deleted from the collection.
cnExtracting An item is extracted from the collection.
268
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
The TComponentClass type is used when constructing TComponent (366) descendant instances
and when registering components.
TComponentName = String
Names of components are of type TComponentName. By specifying a different type, the Object
inspector can handle this property differently than a standard string property.
Value Explanation
csAncestor The component is being streamed as part of a frame (?)
csDesigning The component is being designed in an IDE.
csDesignInstance ??
csDestroying The component is being destroyed.
csFixups The component’s references to other components are being fixed.
csFreeNotification Indicates whether the component has freenotifications
csInline Component is part of a frame (?).
csLoading The component is being loaded from the stream.
csReading Properties are being read from the stream.
csUpdating The component is being updated.
csWriting Properties are being written to the stream.
csLoading The component (and all child components) are being loaded from a stream. This means
that a TReader (430) instance is reading properties from this and child components from a
stream and is applying the values found in the stream to the properties.
csReading The properties of this component are being read from a stream. This means that a
TReader (430) instance is reading properties from this component from a stream and is ap-
plying the values.
269
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
csWriting The properties of this component are being written to a stream. This means that a TWriter
(510) instance is writing properties from this component to a stream.
csDestroying The component is being destroyed.
csDesigning The component is being designed in an IDE.
csAncestor The component has a design ancestor. This is used to record differences between a com-
ponent and it’s design ancestor. For example a form TForm2 inherited from a form TForm1.
TForm1 and all its components are copied to TForm2. TForm2 and all its inherited compo-
nents have csAncestor set. Only differences between TForm1 and TForm2 are stored in
the stream of TForm2. The child components of a frame put onto a form have csAncestor
too.
csInline The component is a nested top level component. For example a frame on a form. The
children of the frame do not have csInline, unless they are other frames.
csDesignInstance The component is designed (csDesigning) and is a root component, meaning
it has no owner (Owner=nil).
csFixups The component’s references to other components are being fixed. While reading a compo-
nent from stream, it can happen that the stream contains a component reference property with
a name of a component that was not yet created and read from the stream. Such properties
are saved, and the missing references are resolved when the complete stream was read. This
resolving step is called fixing up references, and the csFixups flags is set during this step.
csFreeNotification This flag indicates that the component has free notifications registered with
TComponent.FreeNotification (370)
Value Explanation
csCheckPropAvail ??
csInheritable The component can be on inherited forms.
csSubComponent Subcomponent - streamed as part of the owning component
csTransient Transient component
Event handler type, occurs when a component instance must be created when a component is read
from a stream.
270
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
TDuplicates = Types.TDuplicates
TExceptionClass is the class pointer for the Exception (1787) class, defined in the SysUtils
(1598) unit.
TFilerFlag = (ffInherited,ffChildPos,ffInline)
Value Explanation
ffChildPos The position of the child on it’s parent is included.
ffInherited Stored object is an inherited object.
ffInline 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.
Event handler type, occurs when a component class pointer must be found when reading a component
from a stream.
271
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
If a TReader (430) instance needs to locate a method and it doesn’t find it in the streamed form, then
the OnFindMethod (441) 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
)
Value Explanation
ooAddItem An item is added to the observed object (generally a list).
ooChange The observed object has changed.
ooCustom Custom event.
ooDeleteItem An item is deleted from the observed object (generally a list).
ooFree The observed object is being freed.
This event is used as a callback to retrieve string values. It is used, among other things, to pass along
string properties in property editors.
THandle = System.THandle
This type is used as the handle for THandleStream (397) stream descendants
THelpContext = - MaxLongint..MaxLongint
THelpType = (htKeyword,htContext)
272
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
Value Explanation
htContext Help type: Context ID help.
htKeyword Help type: Keyword help
TIdentToInt is a callback used to look up identifiers (Ident) and return an integer value cor-
responding 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 Reg-
isterIntegerConsts (296) call.
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 Reg-
isterIntegerConsts (296) call.
TLeftRight = taLeftJustify..taRightJustify
TLeftRight is a subrange type based on the TAlignment (267) enumerated type. It contains only
the left and right alignment constants.
TListAssignOp = (laCopy,laAnd,laOr,laXor,laSrcUnique,laDestUnique
)
Value Explanation
laAnd Remove all elements not first second list
laCopy Clear list and copy all strings from second list.
laDestUnique Keep all elements that exists only in list2
laOr Add all elements from second (and optional third) list, eliminate duplicates
laSrcUnique Just keep all elements that exist only in source list
laXor Remove elements in second lists, Add all elements from second list not in first list
273
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
This type determines what operation TList.Assign (412) or TFPList.assign (393) performs.
TListCallback = Types.TListCallback
TListCallback is the method callback prototype for the function that is passed to the TF-
PList.ForEachCall (394) 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)
Value Explanation
lnAdded List change notification: Element added to the list.
lnDeleted List change notification: Element deleted from the list.
lnExtracted List change notification: Element extracted from the list.
TListStaticCallback = Types.TListStaticCallback
TListCallback is the procedurald callback prototype for the function that is passed to the TF-
PList.ForEachCall (394) 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.
TMissingNameValueSeparatorAction = (mnvaValue,mnvaName,mnvaEmpty,
mnvaError)
Value Explanation
mnvaEmpty
mnvaError
mnvaName
mnvaValue
TMissingNameValueSeparatorActions = Set of
TMissingNameValueSeparatorAction
274
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
TNotifyCallBack is used to notify about thread termination when using static callbacks. When
called, the Sender will contain the thread which is terminating, and AData is the AData parameter
passed to TThread.ExecuteInThread (499).
Most event handlers are implemented as a property of type TNotifyEvent. When this is set to
a certain method of a class, when the event occurs, the method will be called, and the class that
generated the event will pass itself along as the Sender argument.
TObjectTextEncoding = (oteDFM,oteLFM)
Value Explanation
oteDFM Characters are in DFM (Delphi) format: widechar encoded.
oteLFM Characters are in LFM format: UTF-8 encoded.
TObjectTextEncoding is an enumerated type which denotes the encoding of non ASCII char-
acters in an object stream file. It is needed for correct encoding when reading string values in the text
stream.
TOperation = (opInsert,opRemove)
Value Explanation
opInsert A new component is being inserted in the child component list.
opRemove A component is being removed from the child component list.
TPersistentClass is the class reference type for the TPersistent (426) class.
TPoint = Types.TPoint
This record describes a coordinate. It is used to handle the Top (366) and Left (366) properties of
TComponent (366).
X represents the X-Coordinate of the point described by the record. Y represents the Y-Coordinate of
the point described by the record.
275
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
Event handler type, called when an error occurs during the streaming.
The TReaderProc reader procedure is a callback procedure which will be used by a TPersistent
(426) descendant to read user properties from a stream during the streaming process. The Reader
argument is the writer object which can be used read properties from the stream.
TRect = Types.TRect
TRect describes a rectangle in space with its upper-left (in (Top,Left>)) and lower-right (in
(Bottom ,Right)) corners.
276
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
TSeekOrigin = (soBeginning,soCurrent,soEnd)
Value Explanation
soBeginning Offset is interpreted relative to the start of the stream.
soCurrent Offset is interpreted relative to the current position in the stream.
soEnd 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
)
277
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
Value Explanation
ssAlt Alt key pressed
ssAltGr Alt-GR key pressed.
ssCaps Caps lock key pressed
ssCtrl Ctrl key pressed
ssDouble Double mouse click.
ssExtra1 Extra key 1
ssExtra2 Extra key 2
ssHyper Hyper key pressed.
ssLeft Left mouse button pressed.
ssMeta Meta key pressed.
ssMiddle Middle mouse button pressed.
ssNum Num lock key pressed
ssQuad Quadruple mouse click
ssRight Right mouse button pressed.
ssScroll Scroll lock key pressed
ssShift Shift key pressed
ssSuper Super key pressed.
ssTriple Triple mouse click
TShortCut = (Word)..(Word)
TSmallPoint = Types.TSmallPoint
Same as TPoint (275), only the X and Y ranges are limited to 2-byte integers instead of 4-byte
integers.
TStreamOwnership = (soReference,soOwned)
Value Explanation
soOwned Stream is owned: it will be freed when the adapter is freed.
soReference 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 TStrea-
mAdapter (455) acts, when the adapter is freed.
278
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
This declaration is provided for Delphi compatibility, it is not used in Free Pascal.
TStringsOption = (soStrictDelimiter,soWriteBOM,soTrailingLineBreak
,
soUseLocale,soPreserveBOM)
Value Explanation
soPreserveBOM If this option is enabled, TStrings.WriteBOM (487) is set in TStrings.LoadFromStream (476) or TStr
soStrictDelimiter See TStrings.StrictDelimiter (484).
soTrailingLineBreak See TStrings.TrailingLineBreak (484).
soUseLocale See TStrings.UseLocale (486).
soWriteBOM See TStrings.WriteBOM (487).
TStringsOption is the type used in the TStrings.Options (483) set property, and it lists various
strings options. It has the following values:
279
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
TStringsSortStyle = (sslNone,sslUser,sslAuto)
Value Explanation
sslAuto The TStrings instance keeps the strings sorted.
sslNone The strings are not sorted
sslUser The strings are kept sorted by the user.
TStringsSortStyle is the type used in the TStringList.SortStyle (465) property, and describes
how the strings are sorted when the TStringList.Sorted (463) property is True. It has the following
values:
TSynchronizeProcVar = procedure
TThreadExecuteHandler = TThreadMethod
280
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
TThreadExecuteStatusHandler = procedure
(ReportStatus: TThreadReportStatus)
of object
TThreadPriority = (tpIdle,tpLowest,tpLower,tpNormal,tpHigher,tpHighest
,
tpTimeCritical)
Value Explanation
tpHigher Thread runs at high priority
tpHighest Thread runs at highest possible priority.
tpIdle Thread only runs when other processes are idle.
tpLower Thread runs at a lower priority.
tpLowest Thread runs at the lowest priority.
tpNormal Thread runs at normal process priority.
tpTimeCritical Thread runs at realtime priority.
281
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
TTopBottom = taAlignTop..taAlignBottom
TValueType = (vaNull,vaList,vaInt8,vaInt16,vaInt32,vaExtended,vaString
,
vaIdent,vaFalse,vaTrue,vaBinary,vaSet,vaLString,vaNil
,
vaCollection,vaSingle,vaCurrency,vaDate,vaWString
,vaInt64,
vaUTF8String,vaUString,vaQWord)
282
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
Value Explanation
vaBinary Binary data follows.
vaCollection Collection follows
vaCurrency Currency value follows
vaDate Date value follows
vaExtended Extended value.
vaFalse Boolean False value.
vaIdent Identifier.
vaInt16 Integer value, 16 bits long.
vaInt32 Integer value, 32 bits long.
vaInt64 Integer value, 64 bits long.
vaInt8 Integer value, 8 bits long.
vaList Identifies the start of a list of values
vaLString Ansistring data follows.
vaNil Nil pointer.
vaNull Empty value. Ends a list.
vaQWord QWord (64-bit word) value
vaSet Set data follows.
vaSingle Single type follows.
vaString String value.
vaTrue Boolean True value.
vaUString UnicodeString value
vaUTF8String UTF8 encoded Unicode string.
vaWString Widestring value follows.
TVerticalAlignment = (taAlignTop,taAlignBottom,taVerticalCenter)
Value Explanation
taAlignBottom
taAlignTop
taVerticalCenter
283
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
value of the property (Nil or the parent value). Handled should be set to True if the handler set
the property successfully.
The TWriterProc writer procedure is a callback procedure which will be used by a TPersistent
(426) descendant 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
AddDataModule : procedure(DataModule: TDataModule) of object
Unused.
GlobalNameSpace : IReadWriteSync
An interface protecting the global namespace. Used when reading/writing to the global namespace
list during streaming of forms.
MainThreadID : TThreadID
RegisterComponentsProc can be set by an IDE to be notified when new components are being
registered. Application programmers should never have to set RegisterComponentsProc
RegisterNoIconProc can be set by an IDE to be notified when new components are being
registered, and which do not need an Icon in the component palette. Application programmers should
never have to set RegisterComponentsProc
284
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
WakeMainThread is a handler, which, when set, is called by the TThread.Synchronize (495) rou-
tine to signal the main thread that a synchronization routine is waiting in the queue.
This handler is by default empty. An actual implementation depends on the main program logic
(usually an event loop) and must be provided by the event loop logic: the event loop will normally call
CheckSynchronize (286) at regular intervals. The WakeMainThread can make sure this happens
as soon as possible.
While this handle should alert the main program thread that a thread is waiting for synchronization,
the call is executed by the thread, and should therefore NOT synchronize the thread, but should
somehow signal the main thread that a thread is waiting for synchronization. For example, by sending
a message.
Visibility: default
Description: ActivateClassGroup activates the group of classes to which AClass belongs. The function
returns the class that was last used to activate the class group.
The class registration and streaming mechanism allows to organize the classes in groups. This allows
an IDE to form groups of classes, which can be enabled or disabled. It is not needed at Run-Time.
Errors: If AClass does not belong to a class group, an exception is raised.
See also: StartClassGroup (298), GroupDescendentsWith (290), ClassGroupOf (287)
4.4.2 BeginGlobalLoading
Synopsis: Not yet implemented
4.4.3 BinToHex
Synopsis: Convert a binary buffer to a hexadecimal string
Declaration: procedure BinToHex(BinValue: PChar; HexValue: PChar;
BinBufSize: Integer)
285
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
Visibility: default
Description: BinToHex converts the byte values in BinValue to a string consisting of 2-charachter hex-
adecimal 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 (290)
4.4.4 Bounds
Synopsis: Returns a TRect structure with the bounding rect of the given location and size.
4.4.5 CheckSynchronize
Synopsis: Check whether there are any synchronize calls in the synchronize queue.
286
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.4.6 ClassGroupOf
Synopsis: Returns the class group to which an instance or class belongs
4.4.7 CollectionsEqual
Synopsis: Returns True if two collections are equal.
4.4.8 EndGlobalLoading
Synopsis: Not yet implemented.
Declaration: procedure EndGlobalLoading
Visibility: default
Description: Not yet implemented.
4.4.9 ExtractStrings
Synopsis: Split a string in different words.
Description: ExtractStrings splits Content (a null-terminated string) into words, and adds the words to
the Strings stringlist. The words are separated by Separators and any characters in whitespace
are stripped from the strings. The space and CR/LF characters are always considered whitespace.
Errors: No length checking is performed on Content. If no null-termination character is present, an access
violation may occur. Likewise, if Strings is not valid, an access violation may occur.
287
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.4.10 FindClass
Synopsis: Returns the class pointer of a class with given name.
Declaration: function FindClass(const AClassName: string) : TPersistentClass
Visibility: default
Description: FindClass searches for the class named ClassName in the list of registered classes and returns a
class pointer to the definition. If no class with the given name could be found, an exception is raised.
The GetClass (289) function does not raise an exception when it does not find the class, but returns a
Nil pointer instead.
See also: RegisterClass (295), GetClass (289)
4.4.11 FindGlobalComponent
Synopsis: Callback used when a component must be found.
Declaration: function FindGlobalComponent(const Name: string) : TComponent
Visibility: default
Description: FindGlobalComponent is a callback of type TFindGlobalComponent (271). It can be set by the
IDE when an unknown reference is found, to offer the user to redirect the link to a new component.
It is a callback used to 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.
See also: TFindGlobalComponent (271)
4.4.12 FindIdentToInt
Synopsis: Return the string to integer converter for an integer type
Declaration: function FindIdentToInt(AIntegerType: Pointer) : TIdentToInt
Visibility: default
Description: FindIdentToInt returns the handler that handles the conversion of a string representation to an
integer that can be used in component streaming, when IdentToInt (290) is called.
Errors: Nil is returned if no handler is registered for the given type.
4.4.13 FindIntToIdent
Synopsis: Return the integer to string converter for an integer type
Declaration: function FindIntToIdent(AIntegerType: Pointer) : TIntToIdent
Visibility: default
Description: FindIntToIdent returns the handler that handles the conversion of an integer to a string repre-
sentation that can be used in component streaming, when IntToIdent (291) is called.
Errors: Nil is returned if no handler is registered for the given type.
See also: IntToIdent (291), TIntToIdent (273), FindIdentToInt (288)
288
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
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 char-
acters . (dot), - (dash) and > (greater than) can be used
See also: GlobalFixupReferences (290)
4.4.15 GetClass
Synopsis: Returns the class pointer of a class with given name.
Declaration: function GetClass(const AClassName: string) : TPersistentClass
Visibility: default
Description: GetClass searches for the class named ClassName in the list of registered classes and returns a
class pointer to the definition. If no class with the given name could be found, Nil is returned.
The FindClass (288) function will raise an exception if the does not find the class.
See also: RegisterClass (295), GetClass (289)
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 (289), GlobalFixupReferences (290)
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 (289), GlobalFixupReferences (290)
289
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.4.18 GlobalFixupReferences
Synopsis: Called to resolve unresolved references after forms are loaded.
Declaration: procedure GlobalFixupReferences
Visibility: default
Description: GlobalFixupReferences runs over the list of unresolved references and tries to resolve them.
This routine should under normal circumstances not be called in an application programmer’s code.
It is called automatically by the streaming system after a component has been instantiated and its
properties read from a stream. It will attempt to resolve references to other global components.
See also: GetFixupReferenceNames (289), GetFixupInstanceNames (289)
4.4.19 GroupDescendentsWith
Synopsis: Provided for Delphi compatibility
Declaration: procedure GroupDescendentsWith(AClass: TPersistentClass;
AClassGroup: TPersistentClass)
Visibility: default
Description: GroupDescendentsWith exists for Delphi compatibility, it doesn’t actually do anything in Free
Pascal.
See also: RegisterClasses (295)
4.4.20 HexToBin
Synopsis: Convert a hexadecimal string to a binary buffer
Declaration: function HexToBin(HexValue: PChar; BinValue: PChar; BinBufSize: Integer)
: Integer
Visibility: default
Description: HexToBin scans the hexadecimal string representation in HexValue and transforms every 2 char-
acter hexadecimal number to a byte and stores it in BinValue. The buffer size is the size of the
binary buffer. Scanning will stop if the size of the binary buffer is reached or when an invalid char-
acter is encountered. The return value is the number of stored bytes.
Errors: No length checking is done, so if an invalid size is specified, an exception may follow.
See also: BinToHex (285)
4.4.21 IdentToInt
Synopsis: Looks up an integer value in a integer-to-identifier map list.
Declaration: function IdentToInt(const Ident: string; out Int: LongInt;
const Map: Array of TIdentMapEntry) : Boolean
Visibility: default
Description: IdentToInt searches Map for an entry whose Name field matches Ident and returns the corre-
sponding integer value in Int. If a match was found, the function returns True, otherwise, False
is returned.
See also: TIdentToInt (273), TIntToIdent (273), IntToIdent (291), TIdentMapEntry (299)
290
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.4.22 InitComponentRes
Synopsis: Provided for Delphi compatibility only
Declaration: function InitComponentRes(const ResName: string; Instance: TComponent)
: Boolean
Visibility: default
Description: This function is provided for Delphi compatibility. It always returns false.
See also: ReadComponentRes (293)
4.4.23 InitInheritedComponent
Synopsis: Initializes a component descending from RootAncestor
Declaration: function InitInheritedComponent(Instance: TComponent;
RootAncestor: TClass) : Boolean
Visibility: default
Description: InitInheritedComponent should be called from a constructor to read properties of the com-
ponent Instance from the streaming system. The RootAncestor class is the root class from
which Instance is a descendant. This must be one of TDatamodule, TCustomForm or TFrame.
The function returns True if the properties were successfully read from a stream or False if some
error occurred.
See also: ReadComponentRes (293), ReadComponentResEx (294), ReadComponentResFile (294)
4.4.24 IntToIdent
Synopsis: Looks up an identifier for an integer value in a identifier-to-integer map list.
Declaration: function IntToIdent(Int: LongInt; var Ident: string;
const Map: Array of TIdentMapEntry) : Boolean
Visibility: default
Description: IdentToInt searches Map for an entry whose Value field matches Int and returns the corre-
sponding identifier in Ident. If a match was found, the function returns True, otherwise, False
is returned.
See also: TIdentToInt (273), TintToIdent (273), IdentToInt (290), TIdentMapEntry (299)
4.4.25 InvalidPoint
Synopsis: Check whether a point is invalid.
Declaration: function InvalidPoint(X: Integer; Y: Integer) : Boolean
function InvalidPoint(const At: TPoint) : Boolean
function InvalidPoint(const At: TSmallPoint) : Boolean
Visibility: default
Description: InvalidPoint returns True if the X and Y coordinates (of the TPoint or TSmallPoint
records, if one of these versions is used) are -1.
See also: TPoint (275), TSmallPoint (278), PointsEqual (293)
291
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.4.26 LineStart
Synopsis: Finds the start of a line in Buffer before BufPos.
Declaration: function LineStart(Buffer: PChar; BufPos: PChar) : PChar
Visibility: default
Description: LineStart reversely scans Buffer starting at BufPos for a linefeed character. It returns a
pointer at the linefeed character.
4.4.27 NotifyGlobalLoading
Synopsis: Not yet implemented.
Declaration: procedure NotifyGlobalLoading
Visibility: default
Description: Not yet implemented.
4.4.28 ObjectBinaryToText
Synopsis: Converts an object stream from a binary to a text format.
Declaration: procedure ObjectBinaryToText(Input: TStream; Output: TStream;
Encoding: TObjectTextEncoding)
procedure ObjectBinaryToText(Input: TStream; Output: TStream)
Visibility: default
Description: ObjectBinaryToText reads an object stream in binary format from Input and writes the
object stream in text format to Output. No components are instantiated during the process, this is a
pure conversion routine.
See also: ObjectTextToBinary (292)
4.4.29 ObjectResourceToText
Synopsis: Converts an object stream from a (windows) resource to a text format.
Declaration: procedure ObjectResourceToText(Input: TStream; Output: TStream)
Visibility: default
Description: ObjectResourceToText reads the resource header from the Input stream and then passes the
streams to ObjectBinaryToText (292)
See also: ObjectBinaryToText (292), ObjectTextToResource (293)
4.4.30 ObjectTextToBinary
Synopsis: Converts an object stream from a text to a binary format.
Declaration: procedure ObjectTextToBinary(Input: TStream; Output: TStream)
Visibility: default
Description: Converts an object stream from a text to a binary format.
292
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.4.31 ObjectTextToResource
Synopsis: Converts an object stream from a text to a (windows) resource format.
4.4.32 Point
Synopsis: Returns a TPoint record with the given coordinates.
Declaration: function Point(AX: Integer; AY: Integer) : TPoint
Visibility: default
Description: Point returns a TPoint (275) record with the given coordinates AX and AY filled in.
See also: TPoint (275), SmallPoint (298), Rect (294), Bounds (286)
4.4.33 PointsEqual
Synopsis: Check whether two TPoint variables are equal.
Declaration: function PointsEqual(const P1: TPoint; const P2: TPoint) : Boolean
function PointsEqual(const P1: TSmallPoint; const P2: TSmallPoint)
: Boolean
Visibility: default
Description: PointsEqual compares the P1 and P2 points (of type TPoint (275) or TSmallPoint (278)) and
returns True if the X and Y coordinates of the points are equal, or False otherwise.
4.4.34 ReadComponentRes
Synopsis: Read component properties from a resource in the current module
Declaration: function ReadComponentRes(const ResName: string; Instance: TComponent)
: TComponent
Visibility: default
Description: ReadComponentRes will read the component’s properties from the resource ResName in the
current module (always program module). It returns Nil if the resource was not found. It returns
Instance if the resource was found and successfully applied to the component.
Errors: The function may raise an exception if the stream contains wrong data.
See also: ReadComponentResEx (294)
293
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.4.35 ReadComponentResEx
Synopsis: Read component properties from a resource in the specified module
4.4.36 ReadComponentResFile
Synopsis: Read component properties from a specified resource file
Declaration: function ReadComponentResFile(const FileName: string;
Instance: TComponent) : TComponent
Visibility: default
Description: ReadComponentResFile starts reading properties for Instance from the file FileName. It
creates a filestream from FileName and then calls the TStream.ReadComponentRes (449) method
to read the state of the component from the stream.
4.4.37 Rect
Synopsis: Returns a TRect record with the given coordinates.
Declaration: function Rect(ALeft: Integer; ATop: Integer; ARight: Integer;
ABottom: Integer) : TRect
Visibility: default
Description: Rect returns a TRect (276) record with the given top-left (ALeft,ATop) and bottom-right
(ABottom,ARight) corners filled in.
No checking is done to see whether the coordinates are valid.
See also: TRect (276), Point (293), SmallPoint (298), Bounds (286)
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
294
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
Description: RedirectFixupReferences examines the list of unresolved references and replaces refer-
ences to a root object named OldRootName with references to root object NewRootName.
An application programmer should never need to call RedirectFixupReferences. This func-
tion can be used by an IDE to support redirection of broken component links.
See also: RemoveFixupReferences (297)
4.4.39 RegisterClass
Synopsis: Registers a class with the streaming system.
Declaration: procedure RegisterClass(AClass: TPersistentClass)
Visibility: default
Description: RegisterClass registers the class AClass in the streaming system. After the class has been
registered, it can be read from a stream when a reference to this class is encountered.
See also: RegisterClasses (295), RegisterClassAlias (295), RegisterComponents (295), UnregisterClass (298)
4.4.40 RegisterClassAlias
Synopsis: Registers a class alias with the streaming system.
Declaration: procedure RegisterClassAlias(AClass: TPersistentClass;
const Alias: string)
Visibility: default
Description: RegisterClassAlias registers a class alias in the streaming system. If a reference to a class
Alias is encountered in a stream, then an instance of the class AClass will be created instead by
the streaming code.
See also: RegisterClass (295), RegisterClasses (295), RegisterComponents (295), UnregisterClass (298)
4.4.41 RegisterClasses
Synopsis: Registers multiple classes with the streaming system.
Declaration: procedure RegisterClasses(AClasses: Array of TPersistentClass)
Visibility: default
Description: RegisterClasses registers the specified classes AClass in the streaming system. After the
classes have been registered, they can be read from a stream when a reference to this class is encoun-
tered.
See also: RegisterClass (295), RegisterClassAlias (295), RegisterComponents (295), UnregisterClass (298)
4.4.42 RegisterComponents
Synopsis: Registers components for the component palette.
Declaration: procedure RegisterComponents(const Page: string;
ComponentClasses: Array of TComponentClass)
Visibility: default
295
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
Description: RegisterComponents registers the component on the appropriate component page. The com-
ponent 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 Delphi’s behaviour
where an exception will be raised if the procedural variable is not set.
See also: RegisterClass (295), RegisterNoIcon (297)
4.4.43 RegisterFindGlobalComponentProc
Synopsis: Register a component searching handler
Declaration: procedure RegisterFindGlobalComponentProc
(AFindGlobalComponent: TFindGlobalComponent)
Visibility: default
Description: RegisterFindGlobalComponentProc registers a global component search callback AFindGlobalComponent.
When FindGlobalComponent (288) is called, then this callback will be used to search for the com-
ponent.
Errors: None.
See also: FindGlobalComponent (288), UnRegisterFindGlobalComponentProc (299)
4.4.44 RegisterInitComponentHandler
Synopsis: Register a component initialization handler
4.4.45 RegisterIntegerConsts
Synopsis: Registers some integer-to-identifier mappings.
Declaration: procedure RegisterIntegerConsts(IntegerType: Pointer;
IdentToIntFn: TIdentToInt;
IntToIdentFn: TIntToIdent)
Visibility: default
296
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
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 (290) and IntToIdent (291) can be used to
implement these callback functions.
See also: TIdentToInt (273), TIntToIdent (273), IdentToInt (290), IntToIdent (291)
4.4.46 RegisterNoIcon
Synopsis: Registers components that have no icon on the component palette.
Declaration: procedure RegisterNoIcon(ComponentClasses: Array of TComponentClass)
Visibility: default
Description: RegisterNoIcon performs the same function as RegisterComponents (295) except that it calls
RegisterNoIconProc (284) instead of RegisterComponentsProc (284)
See also: RegisterNoIconProc (284), RegisterComponents (295)
4.4.47 RegisterNonActiveX
Synopsis: Register non-activex component.
Declaration: procedure RegisterNonActiveX
(ComponentClasses: Array of TComponentClass;
AxRegType: TActiveXRegType)
Visibility: default
Description: Not yet implemented in Free Pascal
4.4.48 RemoveFixupReferences
Synopsis: Removes references to rootname from the fixup list.
297
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.4.49 RemoveFixups
Synopsis: Removes Instance from the fixup list.
Declaration: procedure RemoveFixups(Instance: TPersistent)
Visibility: default
Description: RemoveFixups removes all entries for component Instance from the list of unresolved refer-
ences.a
See also: RedirectFixupReferences (294), RemoveFixupReferences (297)
4.4.50 SmallPoint
Synopsis: Returns a TSmallPoint record with the given coordinates.
Declaration: function SmallPoint(AX: SmallInt; AY: SmallInt) : TSmallPoint
Visibility: default
Description: SmallPoint returns a TSmallPoint (278) record with the given coordinates AX and AY filled in.
See also: TSmallPoint (278), Point (293), Rect (294), Bounds (286)
4.4.51 StartClassGroup
Synopsis: Start new class group.
Declaration: procedure StartClassGroup(AClass: TPersistentClass)
Visibility: default
Description: StartClassGroup starts a new class group and adds AClass to it.
The class registration and streaming mechanism allows to organize the classes in groups. This allows
an IDE to form groups of classes, which can be enabled or disabled. It is not needed at Run-Time.
See also: GroupDescendentsWith (290), ActivateClassGroup (285), ClassGroupOf (287)
4.4.52 UnRegisterClass
Synopsis: Unregisters a class from the streaming system.
Declaration: procedure UnRegisterClass(AClass: TPersistentClass)
Visibility: default
Description: UnregisterClass removes the class AClass from the class definitions in the streaming system.
See also: UnRegisterClasses (298), UnRegisterModuleClasses (299), RegisterClass (295)
4.4.53 UnRegisterClasses
Synopsis: Unregisters multiple classes from the streaming system.
Declaration: procedure UnRegisterClasses(AClasses: Array of TPersistentClass)
Visibility: default
Description: UnregisterClasses removes the classes in AClasses from the class definitions in the stream-
ing system.
298
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.4.54 UnregisterFindGlobalComponentProc
Synopsis: Remove a previously registered component searching handler.
4.4.55 UnRegisterModuleClasses
Synopsis: Unregisters classes registered by module.
Declaration: procedure UnRegisterModuleClasses(Module: HMODULE)
Visibility: default
Description: UnRegisterModuleClasses unregisters all classes which reside in the module Module. For
each registered class, the definition pointer is checked to see whether it resides in the module, and if
it does, the definition is removed.
See also: UnRegisterClass (298), UnRegisterClasses (298), RegisterClasses (295)
4.4.56 WriteComponentResFile
Synopsis: Write component properties to a specified resource file
Declaration: procedure WriteComponentResFile(const FileName: string;
Instance: TComponent)
Visibility: default
4.5 TIdentMapEntry
TIdentMapEntry = record
Value : Integer;
Name : string;
end
TIdentMapEntry is used internally by the IdentToInt (290) and IntToIdent (291) calls to store the
mapping between the identifiers and the integers they represent.
299
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.6 TStringItem
TStringItem = record
FString : string;
FObject : TObject;
end
The TStringItem is used to store the string and object items in a TStringList (460) string list
instance. It should never be used directly.
4.7 EBitsError
4.7.1 Description
When an index of a bit in a TBits (349) is out of the valid range (0 to Count-1) then a EBitsError
exception is raised.
4.8 EClassNotFound
4.8.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.
4.9 EComponentError
4.9.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:
4.10 EFCreateError
4.10.1 Description
When the operating system reports an error during creation of a new file in the Filestream Constructor
(387), a EFCreateError is raised.
300
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.11 EFilerError
4.11.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.
4.12 EFOpenError
4.12.1 Description
When the operating system reports an error during the opening of a file in the Filestream Constructor
(387), a EFOpenError is raised.
4.13 EInvalidImage
4.13.1 Description
This exception is not used by Free Pascal but is provided for Delphi compatibility.
4.14 EInvalidOperation
4.14.1 Description
This exception is not used in Free Pascal, it is defined for Delphi compatibility purposes only.
4.15 EListError
4.15.1 Description
If an error occurs in one of the TList (406) or TStrings (465) methods, then a EListError excep-
tion is raised. This can occur in one of the following cases:
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 list’s bounds.
301
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.16 EMethodNotFound
4.16.1 Description
This exception is no longer used in the streaming system. This error is replaced by a EReadError
(302).
4.17 EObserver
4.17.1 Description
EObserver is an error that is raised when an object is registered as an observer, and it does not
implement the IFPObserver (306) interface.
4.18 EOutOfResources
4.18.1 Description
This exception is not used in Free Pascal, it is defined for Delphi compatibility purposes only.
4.19 EParserError
4.19.1 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
wasn’t the expected token.
4.20 EReadError
4.20.1 Description
If an error occurs when reading from a stream, a EReadError exception is raised. Possible causes
for this are:
302
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.21 EResNotFound
4.21.1 Description
This exception is not used by Free Pascal but is provided for Delphi compatibility.
4.22 EStreamError
4.22.1 Description
An EStreamError is raised when an error occurs during reading from or writing to a stream:
Possible causes are
4.23 EStringListError
4.23.1 Description
When an error occurs in one of the methods of TStrings (465) then an EStringListError is
raised. This can have one of the following causes:
4.24 EThread
4.24.1 Description
Thread error exception.
4.25 EThreadDestroyCalled
4.25.1 Description
Exception raised when a thread is destroyed illegally.
303
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.26 EThreadExternalException
4.26.1 Description
EThreadExternalException is raised by for example TThread.CheckTerminated (496) and
TThread.SetReturnValue (496) when the thread was not created by the Free Pascal program, but by
an external code base (for example a DLL, or the calling application in a DLL).
4.27 EWriteError
4.27.1 Description
If an error occurs when writing to a stream, a EWriteError exception is raised. Possible causes
for this are:
4.28 IDesignerNotify
4.28.1 Description
IDesignerNotify is an interface that can be used to communicate changes to a designer mech-
anism. It offers functionality for detecting changes, and notifications when the component is de-
stroyed.
4.28.3 IDesignerNotify.Modified
Synopsis: Notify that the component is modified.
4.28.4 IDesignerNotify.Notification
Synopsis: Notification of owner changes
304
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.29 IFPObserved
4.29.1 Description
IFPObserved is an interface which can be implemented in objects that must be observable. Ob-
jects that wish to observe the object can register themselves with the FPOAttachObserver (264) call,
and must be detached using the FPODetachObserver (264) call.
This interface is not reference counted, so care must be taken that the ooFree message is sent with
FPONotifyObservers (264) when the object is freed.
4.29.3 IFPObserved.FPOAttachObserver
Synopsis: Attach a new observer to the object
Declaration: procedure FPOAttachObserver(AObserver: TObject)
Visibility: default
Description: FPOAttachObserver must be called with an object instance AObserver that implements the
IFPObserver (306) interface. The FPOObservedChanged (306) method of the interface will be called
whenever FPONotifyObservers (264) is used to notify observers of a change. Objects implementing
this interface should check that AObserver actually implements the IFPObserver (306) interface.
Do not make assumptions on how the interface behaves if FPOAttachObserver is called more
than once with the same interface. It may add the object to the list of observers unconditionally (in
which case it will be notified twice) or it may check that it is not yet in the list.
Errors: If AObserver does not implement the IFPObserver (306) interface, an EObserver (302) exception
must be raised. No other errors should be raised, other than a possible out of memory error.
See also: IFPObserver (306), FPOObservedChanged (306), FPONotifyObservers (264)
4.29.4 IFPObserved.FPODetachObserver
Synopsis: Remove an observer from the list of observers.
Declaration: procedure FPODetachObserver(AObserver: TObject)
305
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
Visibility: default
Description: FPODetachObserver removes the AObserver object from the list of observers. If it was not
in the list, then this is silently accepted. Once removed, it will no longer receive notifications when
FPOObservedChanged (306) is called.
If the object was added more than once using FPOAttachObserver (264), then it depends on the
implementor of the interface whether or FPODetachObserver must be called an equal number
of times.
See also: IFPObserver (306), FPOObservedChanged (306), FPONotifyObservers (264), FPOAttachObserver
(264)
4.29.5 IFPObserved.FPONotifyObservers
Synopsis: Notify all observers
Declaration: procedure FPONotifyObservers(ASender: TObject;
AOperation: TFPObservedOperation;
Data: Pointer)
Visibility: default
Description: FPONotifyObservers notifies all observers of the object that a change has occurred. It calls
FPOObservedChanged (306) on the IFPObserver (306) 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 (306), FPOObservedChanged (306), FPODetachObserver (264), FPOAttachObserver
(264)
4.30 IFPObserver
4.30.1 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 (306). The change notifications arrive because the FPOOb-
servedChanged (264) method is called by the observed object.
4.30.3 IFPObserver.FPOObservedChanged
Synopsis: Entry point for change notifications
306
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
Description: FPOObservedChanged is the method that is called by an observed object (IFPObserved (305))
when it calls FPONotifyObservers (306) The Sender is the object under observation, the Operation
and Data are the parameters used in the call to FPONotifyObservers.
See also: IFPObserved (305), FPONotifyObservers (306)
4.31 IInterfaceComponentReference
4.31.1 Description
IInterfaceComponentReference is an interface to return the component that implements a
given interface. It is implemented by TComponent (366).
4.31.3 IInterfaceComponentReference.GetComponent
Synopsis: Return component instance
Declaration: function GetComponent : TComponent
Visibility: default
4.32 IInterfaceList
4.32.1 Description
IInterfaceList is an interface for maintaining a list of interfaces, strongly resembling the stan-
dard TList (406) 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.
307
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.32.4 IInterfaceList.Get
Synopsis: Retrieve an interface pointer from the list.
Declaration: function Get(i: Integer) : IUnknown
Visibility: default
Description: Get returns the interface pointer at position i in the list. It serves as the Read method for the Items
(313) property.
See also: IInterfaceList.Items (313), TList.Items (414)
4.32.5 IInterfaceList.GetCapacity
Synopsis: Return the capacity of the list.
Declaration: function GetCapacity : Integer
Visibility: default
Description: GetCapacity returns the current capacity of the list. It serves as the Read method for the Capac-
ity (312) property.
See also: IInterfaceList.Capacity (312), TList.Capacity (413)
308
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.32.6 IInterfaceList.GetCount
Synopsis: Return the current number of elements in the list.
4.32.7 IInterfaceList.Put
Synopsis: Write an item to the list
Declaration: procedure Put(i: Integer; item: IUnknown)
Visibility: default
Description: Put writes the interface Item at position I in the list. It servers as the Write method for the Items
(313) property.
See also: IInterfaceList.Items (313), TList.Items (414)
4.32.8 IInterfaceList.SetCapacity
Synopsis: Set the capacity of the list
Declaration: procedure SetCapacity(NewCapacity: Integer)
Visibility: default
Description: SetCapacity sets the capacity of the list to NewCapacity. It serves as the Write method for
the Capacity (312) property.
See also: IInterfaceList.Capacity (312), TList.Capacity (413)
4.32.9 IInterfaceList.SetCount
Synopsis: Set the number of items in the list
309
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.32.10 IInterfaceList.Clear
Synopsis: Clear the list
4.32.11 IInterfaceList.Delete
Synopsis: Remove an interface from the list
Declaration: procedure Delete(index: Integer)
Visibility: default
Description: Delete removes the interface at position Index from the list. It does this by explicitly clearing
the interface and then removing the slot.
See also: TList.Clear (409), IInterfaceList.Add (311), IInterfaceList.Delete (310), IInterfaceList.Insert (311)
4.32.12 IInterfaceList.Exchange
Synopsis: Exchange 2 interfaces in the list
Declaration: procedure Exchange(index1: Integer; index2: Integer)
Visibility: default
Description: Exchange exchanges 2 interfaces in the list at locations index1 and Index2.
See also: TList.Exchange (410), IInterfaceList.Add (311), IInterfaceList.Delete (310), IInterfaceList.Insert
(311)
4.32.13 IInterfaceList.First
Synopsis: Return the first non-empty interface in the list.
310
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.32.14 IInterfaceList.IndexOf
Synopsis: Return the index of an interface.
Declaration: function IndexOf(const item: IUnknown) : Integer
Visibility: default
Description: IndexOf returns the location in the list of the interface Item. If there is no such interface in the
list, then -1 is returned.
See also: TList.IndexOf (411), IInterfaceList.First (310), IInterfaceList.Last (311)
4.32.15 IInterfaceList.Add
Synopsis: Add an interface to the list
Declaration: function Add(item: IUnknown) : Integer
Visibility: default
Description: Add adds the interface Item to the list, and returns the position at which it has been added.
See also: TList.Add (409), IInterfaceList.Insert (311), IInterfaceList.Delete (310)
4.32.16 IInterfaceList.Insert
Synopsis: Insert an interface in the list.
Declaration: procedure Insert(i: Integer; item: IUnknown)
Visibility: default
Description: Insert inserts the interface Item in the list, at position I, shifting all items one position.
See also: TList.Insert (411), IInterfaceList.Add (311), IInterfaceList.Delete (310)
4.32.17 IInterfaceList.Last
Synopsis: Returns the last non-nil interface in the list.
Declaration: function Last : IUnknown
Visibility: default
Description: Last returns the last non-empty interface in the list.
See also: TList.Last (412), IInterfaceList.First (310), IInterfaceList.IndexOf (311)
4.32.18 IInterfaceList.Remove
Synopsis: Remove an interface from the list
Declaration: function Remove(item: IUnknown) : Integer
Visibility: default
Description: Remove searches for the first occurrence of Item in the list and deletes it.
See also: TList.Remove (412), IInterfaceList.Delete (310), IInterfaceList.IndexOf (311)
311
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.32.19 IInterfaceList.Lock
Synopsis: Lock the list
4.32.20 IInterfaceList.Unlock
Synopsis: Unlock the list.
Declaration: procedure Unlock
Visibility: default
Description: Unlock unlocks a locked list. After a call to UnLock, other threads are again able to access the
list.
See also: TInterfaceList.UnLock (403), IInterfaceList.Lock (312)
4.32.21 IInterfaceList.Capacity
Synopsis: Capacity of the list
Declaration: Property Capacity : Integer
Visibility: default
Access: Read,Write
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 (413), IInterfaceList.Count (312)
4.32.22 IInterfaceList.Count
Synopsis: Current number of elements in the list.
Declaration: Property Count : Integer
Visibility: default
Access: Read,Write
Description: Count is the current number of elements in the list. Setting it to a larger number will allocate empty
slots. Setting it to a smaller number will clear any interfaces that fall outside the new border.
See also: IInterfaceList.Capacity (312), TList.Count (414)
312
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.32.23 IInterfaceList.Items
Synopsis: Provides Index-based, sequential, access to the interfaces in the list.
Description: Items is the default property of the interface list and provides index-based array access to the
interfaces in the list. Allowed values for Index include 0 to Count-1
See also: IInterfaceList.Count (312), TList.Items (414)
4.33 IStreamPersist
4.33.1 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 it’s state from or to a stream.
4.33.3 IStreamPersist.LoadFromStream
Synopsis: Load persistent data from stream.
Declaration: procedure LoadFromStream(Stream: TStream)
Visibility: default
Description: LoadFromStream is the method called when the object should load it’s state from the stream
stream. It should be able to read the data which was written using the SavetoStream method.
See also: TPersistent (426), TComponent (366), TStream (445), IStreamPersist.SaveToStream (313)
4.33.4 IStreamPersist.SaveToStream
Synopsis: Save persistent data to stream.
See also: TPersistent (426), TComponent (366), TStream (445), IStreamPersist.LoadFromStream (313)
313
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.34 IStringsAdapter
4.34.1 Description
Is not yet supported in Free Pascal.
4.34.3 IStringsAdapter.ReferenceStrings
Synopsis: Add a reference to the indicated strings.
Declaration: procedure ReferenceStrings(S: TStrings)
Visibility: default
4.34.4 IStringsAdapter.ReleaseStrings
Synopsis: Release the reference to the strings.
Declaration: procedure ReleaseStrings
Visibility: default
4.35 IVCLComObject
4.35.1 Description
IVCLComObject is used by TComponent to implement the IUnknown interface used by COM
automation servers. Partially, it is the translation to pascal of the IDispatch interface definition by
Microsoft. If TComponent needs to return an IUnknown interface, it creates a IVCLComObject
interface instead.
314
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.35.3 IVCLComObject.GetTypeInfoCount
Synopsis: The IDispatch:GetTypeInfoCount call for automation servers
Errors: On error, a nonzero (different from S_OK) return value must be returned.
See also: IVCLComObject.GetTypeInfo (315)
4.35.4 IVCLComObject.GetTypeInfo
Synopsis: The IDispatch:GetTypeInfo call for automation servers
4.35.5 IVCLComObject.GetIDsOfNames
Synopsis: The IDispatch:GetIDsOfNames call for automation servers.
Declaration: function GetIDsOfNames(const IID: TGuid; Names: Pointer;
NameCount: Integer; LocaleID: Integer;
DispIDs: Pointer) : HRESULT
Visibility: default
Description: GetIDsOfNames must return in DispIDs the dispatch Ids for the NameCount names of the
methods listed in Names. The LocaleID indicates the locale of the caller.
Errors: On error, a nonzero (different from S_OK) return value must be returned.
4.35.6 IVCLComObject.Invoke
Synopsis: The IDispatch:Invoke call for automation servers.
Declaration: function Invoke(DispID: Integer; const IID: TGuid; LocaleID: Integer;
Flags: Word; var Params; VarResult: Pointer;
ExcepInfo: Pointer; ArgErr: Pointer) : HRESULT
Visibility: default
315
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
Description: Invoke must invoke the method designated by DispID. IID can be ignored. LocaleID is
used by the caller to indicate the locale it is using. The Flags argument describes the context in
which Invoke is called: a method, or property getter/setter. The Params argument contains the
parameters to the call. The result should be in VarResult. On error, ExcepInfo and ArgError
should be filled.
The function should return 0 (S_OK) if all went well.
See also: IVCLComObject.GetIDsOfNames (315)
4.35.7 IVCLComObject.SafeCallException
Synopsis: This method can be invoked if an exception occurs during Invoke
Declaration: function SafeCallException(ExceptObject: TObject;
ExceptAddr: CodePointer) : HRESULT
Visibility: default
Description: SafeCallException is called to handle an exception during invocation of the Invoke method.
The TObject implementation of this method returns E_UNEXPECTED.
4.35.8 IVCLComObject.FreeOnRelease
Synopsis: Is called by TComponent.FreeOnRelease
Declaration: procedure FreeOnRelease
Visibility: default
Description: FreeOnRelease is called by TComponent.FreeOnRelease (370) for the IVCLComObject in-
terface implemented by TComponent.
See also: TComponent.FreeOnRelease (370)
4.36 TAbstractObjectReader
4.36.1 Description
The Free Pascal streaming mechanism, while compatible with Delphi’s 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 descendant classes.
Different streaming mechanisms can be implemented by making a descendant from TAbstractObjectReader.
The TBinaryObjectReader (336) class is such a descendant class, which streams data in binary (Del-
phi compatible) format.
All methods described in this class, must be implemented by descendant classes.
316
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.36.3 TAbstractObjectReader.FlushBuffer
Synopsis: Flush the buffer
4.36.4 TAbstractObjectReader.NextValue
Synopsis: Returns the type of the next value in the stream.
Declaration: function NextValue : TValueType; 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 (318)
317
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.36.5 TAbstractObjectReader.ReadValue
Synopsis: Reads the type of the next value.
Declaration: function ReadValue : TValueType; 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 (318)
4.36.6 TAbstractObjectReader.BeginRootComponent
Synopsis: Starts the reading of the root component.
Declaration: procedure 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 (318).
See also: TAbstractObjectReader.BeginComponent (318)
4.36.7 TAbstractObjectReader.BeginComponent
Synopsis: Marks the reading of a new component.
Declaration: procedure BeginComponent(var Flags: TFilerFlags;
var AChildPos: Integer;
var CompClassName: string; var CompName: string)
; Virtual; Abstract
Visibility: public
Description: This method is called when the streaming process wants to start reading a new component.
Descendant classes should override this method to read the start of a component new component
definition and return the needed arguments. Flags should be filled with any flags that were found
at the component definition, as well as AChildPos. The CompClassName should be filled with
the class name of the streamed component, and the CompName argument should be filled with the
name of the component.
AChildPos is used to change the ordering in which components appear below their parent compo-
nent when streaming descendant forms.
See also: TAbstractObjectReader.BeginRootComponent (318), TAbstractObjectReader.BeginProperty (318)
4.36.8 TAbstractObjectReader.BeginProperty
Synopsis: Marks the reading of a property value.
Declaration: function BeginProperty : string; 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 (318)
318
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.36.9 TAbstractObjectReader.Read
Synopsis: Read raw data from stream
4.36.10 TAbstractObjectReader.ReadBinary
Synopsis: Read binary data from the stream.
Declaration: procedure ReadBinary(const DestData: TMemoryStream); Virtual; Abstract
Visibility: public
Description: ReadBinary is called when binary data should be read from the stream (i.e. after ReadValue (318)
returned a value type of vaBinary). The data should be stored in the DestData memory stream
by descendant classes.
4.36.11 TAbstractObjectReader.ReadFloat
Synopsis: Read a float value from the stream.
Declaration: function ReadFloat : Extended; 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 (318) returned a value type of vaExtended). The return value should be the value
of the float.
See also: TAbstractObjectReader.ReadFloat (319), TAbstractObjectReader.ReadDate (320), TAbstractObjec-
tReader.ReadSingle (319), TAbstractObjectReader.ReadIdent (320), TAbstractObjectReader.ReadInt8
(321), TAbstractObjectReader.ReadInt16 (321), TAbstractObjectReader.ReadInt32 (322), TAbstrac-
tObjectReader.ReadInt64 (322), TabstractObjectReader.ReadSet (322), TabstractObjectReader.ReadStr
(323), TabstractObjectReader.ReadString (323)
4.36.12 TAbstractObjectReader.ReadSingle
Synopsis: Read a single (real-type) value from the stream.
Declaration: function ReadSingle : Single; Virtual; Abstract
Visibility: public
319
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
Description: ReadSingle is called by the streaming system when it wants to read a single-type float from the
stream (i.e. after ReadValue (318) returned a value type of vaSingle). The return value should be
the value of the float.
See also: TAbstractObjectReader.ReadFloat (319), TAbstractObjectReader.ReadDate (320), TAbstractObjec-
tReader.ReadSingle (319), TAbstractObjectReader.ReadIdent (320), TAbstractObjectReader.ReadInt8
(321), TAbstractObjectReader.ReadInt16 (321), TAbstractObjectReader.ReadInt32 (322), TAbstrac-
tObjectReader.ReadInt64 (322), TabstractObjectReader.ReadSet (322), TabstractObjectReader.ReadStr
(323), TabstractObjectReader.ReadString (323)
4.36.13 TAbstractObjectReader.ReadDate
Synopsis: Read a date value from the stream.
4.36.14 TAbstractObjectReader.ReadCurrency
Synopsis: Read a currency value from the stream.
Declaration: function ReadCurrency : Currency; Virtual; Abstract
Visibility: public
Description: ReadCurrency is called when a currency-typed value should be read from the stream. This
abstract method should be overridden by descendant classes, and should return the currency value
read from the stream.
See also: TAbstractObjectWriter.WriteCurrency (328)
4.36.15 TAbstractObjectReader.ReadIdent
Synopsis: Read an identifier from the stream.
Declaration: function ReadIdent(ValueType: TValueType) : string; 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 (318) 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:
320
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
Table 4.24:
ValueType Expected value
vaIdent Read from stream.
vaNil ’Nil’. This does not have to be read from the stream.
vaFalse ’False’. This does not have to be read from the stream.
vaTrue ’True’. This does not have to be read from the stream.
vaNull ’Null’. This does not have to be read from the stream.
4.36.16 TAbstractObjectReader.ReadInt8
Synopsis: Read an 8-bit integer from the stream.
Declaration: function ReadInt8 : ShortInt; 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 (318) 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 (319), TAbstractObjectReader.ReadDate (320), TAbstractObjec-
tReader.ReadSingle (319), TAbstractObjectReader.ReadIdent (320), TAbstractObjectReader.ReadInt16
(321), TAbstractObjectReader.ReadInt32 (322), TAbstractObjectReader.ReadInt64 (322), Tabstrac-
tObjectReader.ReadSet (322), TabstractObjectReader.ReadStr (323), TabstractObjectReader.ReadString
(323)
4.36.17 TAbstractObjectReader.ReadInt16
Synopsis: Read a 16-bit integer from the stream.
Declaration: function ReadInt16 : SmallInt; Virtual; Abstract
Visibility: public
Description: ReadInt16 is called by the streaming process if it expects to read an integer value with a size of
16 bits (2 bytes) from the stream (i.e. after ReadValue (318) 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 (319), TAbstractObjectReader.ReadDate (320), TAbstractObjec-
tReader.ReadSingle (319), TAbstractObjectReader.ReadIdent (320), TAbstractObjectReader.ReadInt8
(321), TAbstractObjectReader.ReadInt32 (322), TAbstractObjectReader.ReadInt64 (322), Tabstrac-
tObjectReader.ReadSet (322), TabstractObjectReader.ReadStr (323), TabstractObjectReader.ReadString
(323)
321
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.36.18 TAbstractObjectReader.ReadInt32
Synopsis: Read a 32-bit integer from the stream.
4.36.19 TAbstractObjectReader.ReadInt64
Synopsis: Read a 64-bit integer from the stream.
Declaration: function ReadInt64 : Int64; 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 (318) 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.
4.36.20 TAbstractObjectReader.ReadSet
Synopsis: Reads a set from the stream.
Declaration: function ReadSet(EnumType: Pointer) : Integer; Virtual; Abstract
Visibility: public
Description: This method is called by the streaming system if it expects to read a set from the stream (i.e. after
ReadValue (318) 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).
322
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.36.21 TAbstractObjectReader.ReadSignature
Synopsis: Read resource signature
4.36.22 TAbstractObjectReader.ReadStr
Synopsis: Read a shortstring from the stream
Declaration: function ReadStr : string; 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 (318) returned a valuetype of vaLString,vaWstring or vaString). The return
value is the string.
4.36.23 TAbstractObjectReader.ReadString
Synopsis: Read a string of type StringType from the stream.
Declaration: function ReadString(StringType: TValueType) : string; 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 (318) returned a valuetype of vaLString,vaWstring or vaString). The return
value is the string.
See also: TAbstractObjectReader.ReadFloat (319), TAbstractObjectReader.ReadDate (320), TAbstractObjec-
tReader.ReadSingle (319), TAbstractObjectReader.ReadIdent (320), TAbstractObjectReader.ReadInt8
(321), TAbstractObjectReader.ReadInt16 (321), TAbstractObjectReader.ReadInt32 (322), TAbstrac-
tObjectReader.ReadInt64 (322), TabstractObjectReader.ReadSet (322), TabstractObjectReader.ReadStr
(323)
4.36.24 TAbstractObjectReader.ReadWideString
Synopsis: Read a widestring value from the stream.
323
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
Description: ReadWideString is called when a widestring-typed value should be read from the stream. This
abstract method should be overridden by descendant classes.
See also: TAbstractObjectWriter.WriteWideString (329)
4.36.25 TAbstractObjectReader.ReadUnicodeString
Synopsis: Read a Unicode string value
4.36.26 TAbstractObjectReader.SkipComponent
Synopsis: Skip till the end of the component.
4.36.27 TAbstractObjectReader.SkipValue
Synopsis: Skip the current value.
4.37 TAbstractObjectWriter
4.37.1 Description
Abstract driver class for writing component data.
324
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.37.3 TAbstractObjectWriter.BeginCollection
Synopsis: Start writing a collection.
Declaration: procedure BeginCollection; Virtual; Abstract
Visibility: public
Description: Start writing a collection.
4.37.4 TAbstractObjectWriter.BeginComponent
Synopsis: Start writing a component
Declaration: procedure BeginComponent(Component: TComponent; Flags: TFilerFlags;
ChildPos: Integer); Virtual; Abstract
Visibility: public
Description: Start writing a component
4.37.5 TAbstractObjectWriter.WriteSignature
Synopsis: Write stream signature to the stream
Declaration: procedure WriteSignature; Virtual; Abstract
Visibility: public
325
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
Description: WriteSignature writes the streaming signature to a stream. This method does nothing, it must
be implemented by descendents that have a signature header in the stream. (such as binary streams)
See also: TAbstractObjectReader.ReadSignature (323), TBinaryObjectWriter.WriteSignature (344)
4.37.6 TAbstractObjectWriter.BeginList
Synopsis: Start writing a list.
4.37.7 TAbstractObjectWriter.EndList
Synopsis: Mark the end of a list.
Declaration: procedure EndList; Virtual; Abstract
Visibility: public
4.37.8 TAbstractObjectWriter.BeginProperty
Synopsis: Start writing a property
Declaration: procedure BeginProperty(const PropName: string); Virtual; Abstract
Visibility: public
4.37.9 TAbstractObjectWriter.EndProperty
Synopsis: Marks the end of writing of a property.
Declaration: procedure EndProperty; Virtual; Abstract
Visibility: public
Description: Marks the end of writing of a property.
4.37.10 TAbstractObjectWriter.FlushBuffer
Synopsis: Flush the buffer
326
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.37.11 TAbstractObjectWriter.Write
Synopsis: Write raw data to stream
4.37.12 TAbstractObjectWriter.WriteBinary
Synopsis: Writes binary data to the stream.
Declaration: procedure WriteBinary(const Buffer; Count: LongInt); Virtual; Abstract
Visibility: public
Description: Writes binary data to the stream.
4.37.13 TAbstractObjectWriter.WriteBoolean
Synopsis: Writes a boolean value to the stream.
4.37.14 TAbstractObjectWriter.WriteFloat
Synopsis: Writes a float value to the stream.
Declaration: procedure WriteFloat(const Value: Extended); Virtual; Abstract
Visibility: public
Description: Writes a float value to the stream.
4.37.15 TAbstractObjectWriter.WriteSingle
Synopsis: Writes a single-type real value to the stream.
Declaration: procedure WriteSingle(const Value: Single); Virtual; Abstract
Visibility: public
327
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.37.16 TAbstractObjectWriter.WriteDate
Synopsis: Writes a date type to the stream.
4.37.17 TAbstractObjectWriter.WriteCurrency
Synopsis: Write a currency value to the stream
Declaration: procedure WriteCurrency(const Value: Currency); Virtual; Abstract
Visibility: public
Description: WriteCurrency is called when a currency-typed value should be written to the stream. This
abstract method should be overridden by descendant classes.
See also: TAbstractObjectReader.ReadCurrency (320)
4.37.18 TAbstractObjectWriter.WriteIdent
Synopsis: Writes an identifier to the stream.
4.37.19 TAbstractObjectWriter.WriteInteger
Synopsis: Writes an integer value to the stream
Declaration: procedure WriteInteger(Value: Int64); Virtual; Abstract
Visibility: public
Description: Writes an integer value to the stream
4.37.20 TAbstractObjectWriter.WriteUInt64
Synopsis: Write an unsigned 64-bit integer
Declaration: procedure WriteUInt64(Value: QWord); Virtual; Abstract
Visibility: public
Description: WriteUInt64 must be overridden by descendant classes to write a 64-bit unsigned Value (val-
uetype vaQWord) to the stream.
Errors: None.
See also: TBinaryObjectWriter.WriteUInt64 (347)
328
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.37.21 TAbstractObjectWriter.WriteVariant
Synopsis: Write a variant to the stream
4.37.22 TAbstractObjectWriter.WriteMethodName
Synopsis: Writes a methodname to the stream.
Declaration: procedure WriteMethodName(const Name: string); Virtual; Abstract
Visibility: public
Description: Writes a methodname to the stream.
4.37.23 TAbstractObjectWriter.WriteSet
Synopsis: Writes a set value to the stream.
4.37.24 TAbstractObjectWriter.WriteString
Synopsis: Writes a string value to the stream.
Declaration: procedure WriteString(const Value: string); Virtual; Abstract
Visibility: public
4.37.25 TAbstractObjectWriter.WriteWideString
Synopsis: Write a widestring value to the stream
Declaration: procedure WriteWideString(const Value: WideString); Virtual; Abstract
Visibility: public
Description: WriteCurrency is called when a currency-typed value should be written to the stream. This
abstract method should be overridden by descendant classes.
See also: TAbstractObjectReader.ReadWideString (323)
329
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.37.26 TAbstractObjectWriter.WriteUnicodeString
Synopsis: Write a Unicode string to the stream.
4.38 TBasicAction
4.38.1 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 descendant class and create an instance
of this class instead.
4.38.4 TBasicAction.Create
Synopsis: Creates a new instance of a TBasicAction (330) class.
Declaration: constructor Create(AOwner: TComponent); Override
Visibility: public
330
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
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 descendant
manually, actions are created in an IDE.
See also: Destroy (331), AssignClient (330)
4.38.5 TBasicAction.Destroy
Synopsis: Destroys the action.
Declaration: destructor Destroy; Override
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.38.6 TBasicAction.HandlesTarget
Synopsis: Determines whether Target can be handled by this action
4.38.7 TBasicAction.UpdateTarget
Synopsis: Notify client controls when the action updates itself.
Declaration: procedure UpdateTarget(Target: TObject); 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. Descendant 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.
331
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.38.8 TBasicAction.ExecuteTarget
Synopsis: Executes the action on the Target object
4.38.9 TBasicAction.Execute
Synopsis: Triggers the OnExecute (333) event
Declaration: function Execute : Boolean; 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.38.10 TBasicAction.RegisterChanges
Synopsis: Registers a new client with the action.
Declaration: procedure RegisterChanges(Value: TBasicActionLink)
Visibility: public
4.38.11 TBasicAction.UnRegisterChanges
Synopsis: Unregisters a client from the list of clients
332
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.38.12 TBasicAction.Update
Synopsis: Triggers the OnUpdate (334) event
4.38.13 TBasicAction.ActionComponent
Synopsis: Returns the component that initiated the action.
Declaration: Property ActionComponent : TComponent
Visibility: public
Access: Read,Write
Description: ActionComponent is set to the component that caused the action to execute, e.g. a toolbutton or
a menu item. The property is set just before the action executes, and is reset to nil after the action
was executed.
See also: Execute (332), OnExecute (333)
4.38.14 TBasicAction.OnExecute
Synopsis: Event triggered when the action executes.
Declaration: Property OnExecute : TNotifyEvent
Visibility: public
Access: Read,Write
Description: OnExecute is the event triggered when the action is activated (executed). The event is triggered
e.g. when the user clicks e.g. on a menu item or a button associated to the action. The application
programmer should provide a OnExecute event handler to execute whatever code is necessary
when the button is pressed or the menu item is chosen.
Note that assigning an OnExecute handler will result in the Execute (332) method returning a
True value. Predefined actions (such as dataset actions) will check the result of Execute and will
not perform their normal task if the OnExecute handler was called.
See also: Execute (332), OnUpdate (334)
333
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.38.15 TBasicAction.OnUpdate
Synopsis: Event triggered when the application is idle.
Description: OnUpdate is the event triggered when the application is idle, and the action is being updated. The
OnUpdate event can be used to set the state of the action, for instance disable it if the action cannot
be executed at this point in time.
See also: Update (333), OnExecute (333)
4.39 TBasicActionLink
4.39.1 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 descendants of TBasicActionLink which communicate changes in the
action to the component.
4.39.4 TBasicActionLink.Create
Synopsis: Creates a new instance of the TBasicActionLink class
Declaration: constructor Create(AClient: TObject); Virtual
Visibility: public
334
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
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 in-
stance is created automatically when an action is assigned to a control (client).
Component programmers can override the create constructor to initialize further properties.
4.39.5 TBasicActionLink.Destroy
Synopsis: Destroys the TBasicActionLink instance.
Declaration: destructor Destroy; Override
Visibility: public
Description: Destroy unregisters the TBasicActionLink with the action, and then calls the inherited de-
structor.
Application programmers should never call Destroy directly. If a link should be destroyed at all,
the Free method should be called instead.
4.39.6 TBasicActionLink.Execute
Synopsis: Calls the action’s Execute method.
Declaration: function Execute(AComponent: TComponent) : Boolean; Virtual
Visibility: public
Description: Execute sets the ActionComponent (333) property of the associated Action (336) to AComponent
and then calls the Action’s execute (332) method. After the action has executed, the ActionComponent
property is cleared again.
The return value of the function is the return value of the Action’s execute method.
Application programmers should never call Execute directly. This method will be called automat-
ically 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 (336), TBasicAction.ActionComponent (333), TBasicAction.Execute (332), TBasicAction.onExecute
(333)
4.39.7 TBasicActionLink.Update
Synopsis: Calls the action’s Update method
Declaration: function Update : Boolean; Virtual
Visibility: public
335
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.39.8 TBasicActionLink.Action
Synopsis: The action to which the link was assigned.
Description: Action represents the Action (330) which was assigned to the client. Setting this property will
unregister the client at the old action (if one existed) and registers the client at the new action.
See also: TBasicAction (330)
4.39.9 TBasicActionLink.OnChange
Synopsis: Event handler triggered when the action’s properties change
Description: OnChange is the event triggered when the action’s properties change.
Application programmers should never need to assign this event. Component programmers can
assign this event to have a client control reflect any changes in an Action’s properties.
See also: Change (334), TBasicAction.Change (330)
4.40 TBinaryObjectReader
4.40.1 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 (316). 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
(450) call should be used.
336
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.40.3 TBinaryObjectReader.Create
Synopsis: Creates a new binary data reader instance.
Declaration: constructor Create(Stream: TStream; BufSize: Integer)
Visibility: public
Description: Create instantiates a new binary component data reader. The Stream stream is the stream from
which data will be read. The BufSize argument is the size of the internal buffer that will be used
by the reader. This can be used to optimize the reading process.
See also: TAbstractObjectReader (316)
4.40.4 TBinaryObjectReader.Destroy
Synopsis: Destroys the binary data reader.
Declaration: destructor 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 (337)
337
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.40.5 TBinaryObjectReader.NextValue
Synopsis: Return the type of the next value.
4.40.6 TBinaryObjectReader.ReadValue
Synopsis: Read the next value in the stream
Declaration: function ReadValue : TValueType; 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 (316)
4.40.7 TBinaryObjectReader.BeginRootComponent
Synopsis: Start reading the root component.
Declaration: procedure 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 (316)
4.40.8 TBinaryObjectReader.BeginComponent
Synopsis: Start reading a component.
Description: This method is simply the implementation for a binary stream of the abstract method introduced in
TAbstractObjectReader (316)
338
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.40.9 TBinaryObjectReader.BeginProperty
Synopsis: Start reading a property.
Declaration: function BeginProperty : string; Override
Visibility: public
Description: This method is simply the implementation for a binary stream of the abstract method introduced in
TAbstractObjectReader (316)
4.40.10 TBinaryObjectReader.Read
Synopsis: Read raw data from stream
Declaration: procedure Read(var Buf; Count: LongInt); 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 (319), TReader.Read (434)
4.40.11 TBinaryObjectReader.ReadBinary
Synopsis: Start reading a binary value.
Declaration: procedure ReadBinary(const DestData: TMemoryStream); Override
Visibility: public
Description: ReadBinary reads a binary value from a binary stream.
This method is simply the implementation for a binary stream of the abstract method introduced in
TAbstractObjectReader (316)
4.40.12 TBinaryObjectReader.ReadFloat
Synopsis: Read a float value
Declaration: function ReadFloat : Extended; 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 (316)
4.40.13 TBinaryObjectReader.ReadSingle
Synopsis: Read a single-size float value
Declaration: function ReadSingle : Single; 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 (316)
339
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.40.14 TBinaryObjectReader.ReadDate
Synopsis: Read a date.
4.40.15 TBinaryObjectReader.ReadCurrency
Synopsis: Read a currency value from the stream.
Declaration: function ReadCurrency : Currency; 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 (316).
See also: TAbstractObjectReader.ReadCurrency (320), TBinaryObjectWriter.WriteCurrency (347)
4.40.16 TBinaryObjectReader.ReadIdent
Synopsis: Read an identifier
Declaration: function ReadIdent(ValueType: TValueType) : string; Override
Visibility: public
4.40.17 TBinaryObjectReader.ReadInt8
Synopsis: Read an 8-bits integer.
4.40.18 TBinaryObjectReader.ReadInt16
Synopsis: Read a 16-bits integer.
Declaration: function ReadInt16 : SmallInt; Override
Visibility: public
340
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.40.19 TBinaryObjectReader.ReadInt32
Synopsis: Read a 32-bits integer.
4.40.20 TBinaryObjectReader.ReadInt64
Synopsis: Read a 64-bits integer.
Declaration: function ReadInt64 : Int64; 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 (316)
4.40.21 TBinaryObjectReader.ReadSet
Synopsis: Read a set
Declaration: function ReadSet(EnumType: Pointer) : Integer; 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 (316)
4.40.22 TBinaryObjectReader.ReadSignature
Synopsis: Reads the filer signature
Declaration: procedure ReadSignature; Override
Visibility: public
Description: ReadSignature is overridden by TBinaryObjectReader to read the signature (TPF0) from
binary streams.
Errors: If the stream does not start with the correct signature, an EReadError (302) exception is raised.
341
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.40.23 TBinaryObjectReader.ReadStr
Synopsis: Read a short string
4.40.24 TBinaryObjectReader.ReadString
Synopsis: Read a string
Declaration: function ReadString(StringType: TValueType) : string; 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 (316)
4.40.25 TBinaryObjectReader.ReadWideString
Synopsis: Read a widestring value from the stream.
Declaration: function ReadWideString : WideString; Override
Visibility: public
Description: var>ReadWideString reads a widestring-typed value from a binary stream. It is the implemen-
tation of the method introduced in TAbstractObjectReader (316).
See also: TAbstractObjectReader.ReadWideString (323), TBinaryObjectWriter.WriteWideString (348)
4.40.26 TBinaryObjectReader.ReadUnicodeString
Synopsis: Read a Unicode string value
342
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.40.27 TBinaryObjectReader.SkipComponent
Synopsis: Skip a component’s data
4.40.28 TBinaryObjectReader.SkipValue
Synopsis: Skip a value’s data
Declaration: procedure 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 (316)
4.41 TBinaryObjectWriter
4.41.1 Description
Driver class which stores component data in binary form.
343
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.41.3 TBinaryObjectWriter.Create
Synopsis: Creates a new instance of a binary object writer.
Declaration: constructor Create(Stream: TStream; BufSize: Integer)
Visibility: public
4.41.4 TBinaryObjectWriter.Destroy
Synopsis: Destroys an instance of the binary object writer.
Declaration: destructor Destroy; Override
Visibility: public
Description: Destroys an instance of the binary object writer.
4.41.5 TBinaryObjectWriter.WriteSignature
Synopsis: Write stream signature to the stream
344
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.41.6 TBinaryObjectWriter.FlushBuffer
Synopsis: Flush the buffer
Declaration: procedure FlushBuffer; Override
Visibility: public
Description: FlushBuffer flushes the buffer. It is provided for Delphi compatibility, and is not used in FPC.
See also: TFiler.FlushBuffer (385), TWriter.FlushBuffer (512), TAbstractObjectWriter.FlushBuffer (326)
4.41.7 TBinaryObjectWriter.BeginCollection
Synopsis: Start writing a collection.
Declaration: procedure BeginCollection; Override
Visibility: public
4.41.8 TBinaryObjectWriter.BeginComponent
Synopsis: Start writing a component
Declaration: procedure BeginComponent(Component: TComponent; Flags: TFilerFlags;
ChildPos: Integer); Override
Visibility: public
4.41.9 TBinaryObjectWriter.BeginList
Synopsis: Start writing a list.
Declaration: procedure BeginList; Override
Visibility: public
4.41.10 TBinaryObjectWriter.EndList
Synopsis: Mark the end of a list.
Declaration: procedure EndList; Override
Visibility: public
345
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.41.11 TBinaryObjectWriter.BeginProperty
Synopsis: Start writing a property
4.41.12 TBinaryObjectWriter.EndProperty
Synopsis: Marks the end of writing of a property.
4.41.13 TBinaryObjectWriter.Write
Synopsis: Write raw data to stream
4.41.14 TBinaryObjectWriter.WriteBinary
Synopsis: Writes binary data to the stream.
Declaration: procedure WriteBinary(const Buffer; Count: LongInt); Override
Visibility: public
4.41.15 TBinaryObjectWriter.WriteBoolean
Synopsis: Writes a boolean value to the stream.
Declaration: procedure WriteBoolean(Value: Boolean); Override
Visibility: public
4.41.16 TBinaryObjectWriter.WriteFloat
Synopsis: Writes a float value to the stream.
Declaration: procedure WriteFloat(const Value: Extended); Override
Visibility: public
346
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.41.17 TBinaryObjectWriter.WriteSingle
Synopsis: Writes a single-type real value to the stream.
Declaration: procedure WriteSingle(const Value: Single); Override
Visibility: public
4.41.18 TBinaryObjectWriter.WriteDate
Synopsis: Writes a date type to the stream.
Declaration: procedure WriteDate(const Value: TDateTime); Override
Visibility: public
4.41.19 TBinaryObjectWriter.WriteCurrency
Synopsis: Write a currency-valued type to a stream
Declaration: procedure WriteCurrency(const Value: Currency); Override
Visibility: public
Description: WriteCurrency writes a currency-typed value to a binary stream. It is the implementation of the
method introduced in TAbstractObjectWriter (324).
See also: TAbstractObjectWriter.WriteCurrency (328)
4.41.20 TBinaryObjectWriter.WriteIdent
Synopsis: Writes an identifier to the stream.
Declaration: procedure WriteIdent(const Ident: string); Override
Visibility: public
4.41.21 TBinaryObjectWriter.WriteInteger
Synopsis: Writes an integer value to the stream.
Declaration: procedure WriteInteger(Value: Int64); Override
Visibility: public
4.41.22 TBinaryObjectWriter.WriteUInt64
Synopsis: Write an unsigned 64-bit integer
Declaration: procedure WriteUInt64(Value: QWord); 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 (328)
347
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.41.23 TBinaryObjectWriter.WriteMethodName
Synopsis: Writes a methodname to the stream.
Declaration: procedure WriteMethodName(const Name: string); Override
Visibility: public
4.41.24 TBinaryObjectWriter.WriteSet
Synopsis: Writes a set value to the stream.
Declaration: procedure WriteSet(Value: LongInt; SetType: Pointer); Override
Visibility: public
4.41.25 TBinaryObjectWriter.WriteStr
Synopsis: Write a string to the binary stream
Declaration: procedure WriteStr(const Value: string)
Visibility: public
Description: WriteStr writes a string value to the binary stream. It is exposed so it can be used in DefineProperties.
4.41.26 TBinaryObjectWriter.WriteString
Synopsis: Writes a string value to the stream.
Declaration: procedure WriteString(const Value: string); Override
Visibility: public
4.41.27 TBinaryObjectWriter.WriteWideString
Synopsis: Write a widestring-valued type to a stream
Declaration: procedure WriteWideString(const Value: WideString); Override
Visibility: public
Description: WriteWidestring writes a widestring-typed value to a binary stream. It is the implementation
of the method introduced in TAbstractObjectWriter (324).
See also: TAbstractObjectWriter.WriteWidestring (329)
4.41.28 TBinaryObjectWriter.WriteUnicodeString
Synopsis: Write a Unicode string to the stream.
Declaration: procedure WriteUnicodeString(const Value: UnicodeString); Override
Visibility: public
Description: WriteUnicodeString is overridden TBinaryObjectWriter to write a unicodestring (val-
uetype vaUString) value to the stream. It simply writes the character length and then all widechar-
acters.
See also: TAbstractObjectWriter.WriteUnicodeString (330)
348
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.41.29 TBinaryObjectWriter.WriteVariant
Synopsis: Write a variant to the stream
4.42 TBits
4.42.1 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.
349
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.42.4 TBits.Create
Synopsis: Creates a new bits collection.
Declaration: constructor Create(TheSize: LongInt); 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 (350)
4.42.5 TBits.Destroy
Synopsis: Destroys a bit collection
Declaration: destructor 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 (350)
4.42.6 TBits.GetFSize
Synopsis: Returns the number of records used to store the bits.
Declaration: function GetFSize : LongInt
Visibility: public
Description: GetFSize returns the number of records used to store the current number of bits.
Errors: None.
See also: Size (355)
4.42.7 TBits.SetOn
Synopsis: Turn a particular bit on.
Declaration: procedure SetOn(Bit: LongInt)
Visibility: public
Description: SetOn turns on the bit at position bit, i.e. sets it to 1. If bit is at a position bigger than the
current size, the collection is expanded to the required size using Grow (353).
Errors: If bit is larger than the maximum allowed bits array size or is negative, an EBitsError (300) excep-
tion is raised.
See also: Bits (355), Clear (351)
350
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.42.8 TBits.Clear
Synopsis: Clears a particular bit.
Declaration: procedure Clear(Bit: LongInt)
Visibility: public
Description: Clear clears the bit at position bit. If the array If bit is at a position bigger than the current size,
the collection is expanded to the required size using Grow (353).
Errors: If bit is larger than the maximum allowed bits array size or is negative, an EBitsError (300) excep-
tion is raised.
See also: Bits (355), seton (351)
4.42.9 TBits.Clearall
Synopsis: Clears all bits in the array.
Declaration: procedure Clearall
Visibility: public
Description: ClearAll clears all bits in the array, i.e. sets them to zero. ClearAll works faster than clearing
all individual bits, since it uses the packed nature of the bits.
Errors: None.
See also: Bits (355), clear (351)
4.42.10 TBits.CopyBits
Synopsis: Copy bits from one bits set to another
Declaration: procedure CopyBits(BitSet: TBits)
Visibility: public
Description: CopyBits copies the bits from BitSet to the current Bits. Existing bits will be overwritten. The
two sets of bits will be equal after this operation.
Errors: None.
See also: TBits.Equals (353)
4.42.11 TBits.AndBits
Synopsis: Performs an and operation on the bits.
Declaration: procedure AndBits(BitSet: TBits)
Visibility: public
Description: andbits performs an and operation on the bits in the array with the bits of array BitSet. If
BitSet contains less bits than the current array, then all bits which have no counterpart in BitSet
are cleared.
Errors: None.
See also: ClearAll (351), OrBits (352), XOrBits (352), NotBits (352)
351
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.42.12 TBits.OrBits
Synopsis: Performs an or operation on the bits.
See also: ClearAll (351), andBits (351), XOrBits (352), NotBits (352)
4.42.13 TBits.XorBits
Synopsis: Performs a xor operation on the bits.
Declaration: procedure XorBits(BitSet: TBits)
Visibility: public
Description: XorBits performs a xor operation on the bits in the array with the bits of array BitSet.
If BitSet contains less bits than the current array, then all bits which have no counterpart in
BitSet are left untouched.
If the current array contains less bits than BitSet then it is grown to the size of BitSet before the
xor operation is performed.
Errors: None.
See also: ClearAll (351), andBits (351), OrBits (352), NotBits (352)
4.42.14 TBits.NotBits
Synopsis: Performs a not operation on the bits.
Declaration: procedure NotBits(BitSet: TBits)
Visibility: public
Description: NotBits performs a not operation on the bits in the array with the bits of array Bitset.
If BitSet contains less bits than the current array, then all bits which have no counterpart in
BitSet are left untouched.
Errors: None.
See also: ClearAll (351), andBits (351), OrBits (352), XOrBits (352)
352
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.42.15 TBits.Get
Synopsis: Retrieve the value of a particular bit
Declaration: function Get(Bit: LongInt) : Boolean
Visibility: public
Description: Get returns True if the bit at position bit is set, or False if it is not set.
Errors: If bit is not a valid bit index then an EBitsError (300) exception is raised.
See also: Bits (355), FindFirstBit (354), seton (350)
4.42.16 TBits.Grow
Synopsis: Expands the bits array to the requested size.
Declaration: procedure Grow(NBit: LongInt)
Visibility: public
Description: Grow expands the bit array so it can at least contain nbit bits. If nbit is less than the current size,
nothing happens.
Errors: If there is not enough memory to complete the operation, then an EBitsError (300)is raised.
See also: Size (355)
4.42.17 TBits.Equals
Synopsis: Determines whether the bits of 2 arrays are equal.
Declaration: function Equals(Obj: TObject) : Boolean; Override; Overload
function Equals(BitSet: TBits) : Boolean; 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 (351), andBits (351), OrBits (352), XOrBits (352)
4.42.18 TBits.SetIndex
Synopsis: Sets the start position for FindNextBit (354) and FindPrevBit (354)
Declaration: procedure SetIndex(Index: LongInt)
Visibility: public
Description: SetIndex sets the search start position forFindNextBit (354) and FindPrevBit (354) to Index.
This means that these calls will start searching from position Index.
This mechanism provides an alternative to FindFirstBit (354) which can also be used to position for
the FindNextBit and FindPrevBit calls.
353
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
Errors: None.
See also: FindNextBit (354), FindPrevBit (354), FindFirstBit (354), OpenBit (355)
4.42.19 TBits.FindFirstBit
Synopsis: Find first bit with a particular value
Declaration: function FindFirstBit(State: Boolean) : LongInt
Visibility: public
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 (354) and FindPrevBit (354) 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
(353) instead.
Errors: None.
See also: FindNextBit (354), FindPrevBit (354), OpenBit (355), SetIndex (353)
4.42.20 TBits.FindNextBit
Synopsis: Searches the next bit with a particular value.
Declaration: function FindNextBit : LongInt
Visibility: public
Description: FindNextBit resumes a previously started search. It searches for the next bit with the value
specified in the FindFirstBit (354). The search is done towards the end of the array and starts at the
position last reported by one of the Find calls or at the position set with SetIndex (353).
If another bit with the same value is found, its position is returned. If no more bits with the same
value are present in the array, -1 is returned.
Errors: None.
See also: FindFirstBit (354), FindPrevBit (354), OpenBit (355), SetIndex (353)
4.42.21 TBits.FindPrevBit
Synopsis: Searches the previous bit with a particular value.
Declaration: function FindPrevBit : LongInt
Visibility: public
Description: FindPrevBit resumes a previously started search. It searches for the previous bit with the value
specified in the FindFirstBit (354). The search is done towards the beginning of the array and starts
at the position last reported by one of the Find calls or at the position set with SetIndex (353).
If another bit with the same value is found, its position is returned. If no more bits with the same
value are present in the array, -1 is returned.
Errors: None.
See also: FindFirstBit (354), FindNextBit (354), OpenBit (355), SetIndex (353)
354
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.42.22 TBits.OpenBit
Synopsis: Returns the position of the first bit that is set to False.
Declaration: function OpenBit : LongInt
Visibility: public
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 doesn’t set the position
for the next searches.
Errors: None.
See also: FindNextBit (354), FindPrevBit (354), FindFirstBit (354), SetIndex (353)
4.42.23 TBits.Bits
Synopsis: Access to all bits in the array.
Declaration: Property Bits[Bit: LongInt]: Boolean; default
Visibility: public
Access: Read,Write
Description: Bits allows indexed access to all of the bits in the array. It gives True if the bit is 1, False
otherwise; Assigning to this property will set, respectively clear the bit.
Errors: If an index is specified which is out of the allowed range then an EBitsError (300) exception is
raised.
See also: Size (355)
4.42.24 TBits.Size
Synopsis: Current size of the array of bits.
Declaration: Property Size : LongInt
Visibility: public
Access: Read,Write
Description: Size is the current size of the bit array. Setting this property will adjust the size; this is equivalent
to calling Grow(Value-1)
Errors: If an invalid size (negative or too large) is specified, a EBitsError (300) exception is raised.
See also: Bits (355)
4.43 TBytesStream
4.43.1 Description
TBytesStream is a stream that uses an array of byte (TBytes (264)) to keep the stream data. it
overrides the TMemoryStream (416) memory allocation routine to use the array of bytes. The array
of bytes is exposed through the Bytes (264) property.
355
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.43.4 TBytesStream.Create
Synopsis: Create a new instance of the stream, initializing it with an array of bytes
Declaration: constructor Create(const ABytes: TBytes); Virtual; Overload
Visibility: public
Description: Create creates a new instance and initializes the memory with the data in ABytes.
See also: TBytes (264), TMemoryStream (416), Bytes (264)
4.43.5 TBytesStream.Bytes
Synopsis: The stream data as an array of bytes.
4.44 TCollection
4.44.1 Description
TCollection implements functionality to manage a collection of named objects. Each of these
objects needs to be a descendant of the TCollectionItem (364) class. Exactly which type of object is
managed can be seen from the TCollection.ItemClass (362) property.
Normally, no TCollection is created directly. Instead, a descendants of TCollection and
TCollectionItem (364) are created as a pair.
356
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.44.4 TCollection.Create
Synopsis: Creates a new collection.
Declaration: constructor Create(AItemClass: TCollectionItemClass)
Visibility: public
Description: Create instantiates a new instance of the TCollection class which will manage objects of class
AItemClass. It creates the list used to hold all objects, and stores the AItemClass for the adding
of new objects to the collection.
See also: TCollection.ItemClass (362), TCollection.Destroy (357)
4.44.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.
Don’t call Destroy directly, call Free instead.
See also: TCollection.Create (357)
357
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.44.6 TCollection.Owner
Synopsis: Owner of the collection.
4.44.7 TCollection.Add
Synopsis: Creates and adds a new item to the collection.
Declaration: function Add : TCollectionItem
Visibility: public
Description: Add instantiates a new item of class TCollection.ItemClass (362) and adds it to the list. The newly
created object is returned.
See also: TCollection.ItemClass (362), TCollection.Clear (359)
4.44.8 TCollection.Assign
Synopsis: Assigns one collection to another.
4.44.9 TCollection.BeginUpdate
Synopsis: Start an update batch.
Declaration: procedure 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 (356) 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:
358
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
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 (359), even in case of an exception.
See also: TCollection.EndUpdate (359), TCollection.Changed (356), TCollection.Update (356)
4.44.10 TCollection.Clear
Synopsis: Removes all items from the collection.
4.44.11 TCollection.EndUpdate
Synopsis: Ends an update batch.
Declaration: procedure 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 TCollec-
tion.Changed (356) it should always be used in conjunction with TCollection.BeginUpdate (358),
preferably in the Finally section of a Try ... Finally block.
4.44.12 TCollection.Delete
Synopsis: Delete an item from the collection.
Declaration: procedure Delete(Index: Integer)
Visibility: public
Description: Delete deletes the item at (zero based) position Index from the collection. This will result in a
cnDeleted notification.
Errors: If an invalid index is specified, an EListError exception is raised.
359
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.44.13 TCollection.GetEnumerator
Synopsis: Create an IEnumerator instance
4.44.14 TCollection.GetNamePath
Synopsis: Overrides TPersistent.GetNamePath (428) to return a proper pathname.
Declaration: function GetNamePath : string; Override
Visibility: public
Description: GetNamePath returns the name path for this collection. If the following conditions are satisfied:
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 (356), TCollection.Propname (356)
4.44.15 TCollection.Insert
Synopsis: Insert an item in the collection.
Declaration: function Insert(Index: Integer) : TCollectionItem
Visibility: public
Description: Insert creates a new item instance and inserts it in the collection at position Index, and returns
the new instance.
In contrast, TCollection.Add (358) adds a new item at the end.
Errors: None.
4.44.16 TCollection.FindItemID
Synopsis: Searches for an Item in the collection, based on its TCollectionItem.ID (365) property.
Declaration: function FindItemID(ID: Integer) : TCollectionItem
Visibility: public
360
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
Description: FindItemID searches through the collection for the item that has a value of ID for its TCollec-
tionItem.ID (365) 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 (362), TCollectionItem.ID (365)
4.44.17 TCollection.Exchange
Synopsis: Exchange 2 items in the collection
Declaration: procedure Exchange(const Index1: Integer; const index2: Integer)
Visibility: public
Description: Exchange exchanges the items at indexes Index1 and Index2 in the collection.
Errors: If one of the two indexes is invalid (less than zero or larger than the number of items) an EListError
exception is raised.
See also: Items (362), TCollectionItem.Index (366)
4.44.18 TCollection.Move
Declaration: procedure Move(const Index1: Integer; const index2: Integer)
Visibility: public
4.44.19 TCollection.Sort
Synopsis: Sort the items in the collection
Declaration: procedure Sort(const Compare: TCollectionSortCompare)
Visibility: public
Description: Sort sorts the items in the collection, and uses the Compare procedure to compare 2 items in the
collection. It is more efficient do use this method than to perform the sort manually, because the list
items are manipulated directly.
For more information on how the Compare function should behave, see the TCollectionSortCom-
pare (269) type.
See also: TCollectionSortCompare (269)
4.44.20 TCollection.Count
Synopsis: Number of items in the collection.
Declaration: Property Count : Integer
Visibility: public
Access: Read
Description: Count contains the number of items in the collection.
Remark The items in the collection are identified by their TCollectionItem.Index (366) property, which is a
zero-based index, meaning that it can take values between 0 and Count-1, borders included.
See also: TCollectionItem.Index (366), TCollection.Items (362)
361
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.44.21 TCollection.ItemClass
Synopsis: Class pointer for each item in the collection.
Description: ItemClass is the class pointer with which each new item in the collection is created. It is the
value that was passed to the collection’s constructor when it was created, and does not change during
the lifetime of the collection.
See also: TCollectionItem (364), TCollection.Items (362)
4.44.22 TCollection.Items
Synopsis: Indexed array of items in the collection.
Declaration: Property Items[Index: Integer]: TCollectionItem
Visibility: public
Access: Read,Write
Description: Items provides indexed access to the items in the collection. Since the array is zero-based, Index
should be an integer between 0 and Count-1.
It is possible to set or retrieve an element in the array. When setting an element of the array, the
object that is assigned should be compatible with the class of the objects in the collection, as given
by the TCollection.ItemClass (362) property.
Adding an element to the array can be done with the TCollection.Add (358) method. The array can
be cleared with the TCollection.Clear (359) method. Removing an element of the array should be
done by freeing that element.
See also: TCollection.Count (361), TCollection.ItemClass (362), TCollection.Clear (359), TCollection.Add
(358)
4.45 TCollectionEnumerator
4.45.1 Description
TCollectionEnumerator implements the #rtl.system.IEnumerator (1580) interface for the TCol-
lection (356) class, so the TCollection class can be used in a for ... in loop. It is returned
by the TCollection.GetEnumerator (360) method of TCollection.
362
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.45.4 TCollectionEnumerator.Create
Synopsis: Initialize a new instance of TCollectionEnumerator
Declaration: constructor Create(ACollection: TCollection)
Visibility: public
Description: Create initializes a new instance of TCollectionEnumerator and keeps a reference to the
collection ACollection that will be enumerated.
See also: TCollection (356)
4.45.5 TCollectionEnumerator.GetCurrent
Synopsis: Return the current pointer in the list
Declaration: function GetCurrent : TCollectionItem
Visibility: public
Description: GetCurrent returns the current TCollectionItem (364) instance in the enumerator.
Errors: No checking is done on the validity of the current position.
See also: MoveNext (363), TCollectionItem (364)
4.45.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 (363)
4.45.7 TCollectionEnumerator.Current
Synopsis: Current pointer in the list
Declaration: Property Current : TCollectionItem
Visibility: public
Access: Read
Description: Current redefines GetCurrent (363) as a property.
See also: GetCurrent (363)
363
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.46 TCollectionItem
4.46.1 Description
TCollectionItem and TCollection (356) 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: TCollection-
Item.DisplayName (366), TCollection.Index (356) and TCollectionItem.ID (365).
A TCollectionItem object is never created directly. To manage a set of named items, it is
necessary to make a descendant of TCollectionItem to which needed properties and methods
are added. This descendant can then be managed with a TCollection (356) class. The managing
collection will create and destroy it’s items by itself, it should therefore never be necessary to create
TCollectionItem descendants manually.
4.46.4 TCollectionItem.Create
Synopsis: Creates a new instance of this collection item.
4.46.5 TCollectionItem.Destroy
Synopsis: Destroys this collection item.
Declaration: destructor Destroy; Override
Visibility: public
364
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
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 (364)
4.46.6 TCollectionItem.GetNamePath
Synopsis: Returns the namepath of this collection item.
Declaration: function GetNamePath : string; Override
Visibility: public
Description: GetNamePath overrides the TPersistent.GetNamePath (428) method to return the name of the
managing collection and appends its TCollectionItem.Index (366) property.
See also: TCollectionItem.Collection (365), TPersistent.GetNamePath (428), TCollectionItem.Index (366)
4.46.7 TCollectionItem.Collection
Synopsis: Pointer to the collection managing this item.
Declaration: Property Collection : TCollection
Visibility: public
Access: Read,Write
Description: Collection points to the collection managing this item. This property can be set to point to a
new collection. If this is done, the old collection will be notified that the item should no longer be
managed, and the new collection is notified that it should manage this item as well.
See also: TCollection (356)
4.46.8 TCollectionItem.ID
Synopsis: Initial index of this item.
365
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.46.9 TCollectionItem.Index
Synopsis: Index of the item in its managing collection TCollection.Items (362) property.
Declaration: Property Index : Integer
Visibility: public
Access: Read,Write
Description: Index is the current index of the item in its managing collection’s TCollection.Items (362) 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 (365) property does not form a continuous series, but can also be used to
identify an item.
See also: TCollectionItem.ID (365), TCollection.Items (362)
4.46.10 TCollectionItem.DisplayName
Synopsis: Name of the item, displayed in the object inspector.
Declaration: Property DisplayName : string
Visibility: public
Access: Read,Write
Description: DisplayName contains the name of this item as shown in the object inspector. For TCollectionItem
this returns always the class name of the managing collection, followed by the index of the item.
TCollectionItem does not implement any functionality to store the DisplayName property.
The property can be set, but this will have no effect other than that the managing collection is no-
tified of a change. The actual displayname will remain unchanged. To store the DisplayName
property,TCollectionItem descendants should override the TCollectionItem.SetDisplayName
(364) and TCollectionItem.GetDisplayName (364) to add storage functionality.
See also: TCollectionItem.Index (366), TCollectionItem.ID (365), TCollectionItem.GetDisplayName (364),
TCollectionItem.SetDisplayName (364)
4.47 TComponent
4.47.1 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 (Inte-
grated 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 altogether is also introduced in TComponent
TComponent introduces a form of automatic memory management: When a component is de-
stroyed, all its child components will be destroyed first.
366
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
367
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.47.5 TComponent.Notification
Synopsis: Called by components that are freed and which received a FreeNotification.
4.47.6 TComponent.WriteState
Synopsis: Writes the component to a stream.
Declaration: procedure WriteState(Writer: TWriter); Virtual
Visibility: public
Description: WriteState writes the component’s current state to a stream through the writer (510) 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 (366) implementation of WriteState simply calls TWriter.WriteData (510).
Descendant classes can, however, override WriteStateto provide additional processing of stream
data.
See also: ReadState (366), TStream.WriteComponent (450), TWriter.WriteData (510)
4.47.7 TComponent.Create
Synopsis: Creates a new instance of the component.
368
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.47.8 TComponent.Destroy
Synopsis: Destroys the instance of the component.
Declaration: destructor 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 (369) (and hence removed from
the list of owned components). When this is done, the component removes itself from its owner’s
child component list. After that, the parent’s destroy method is called.
See also: Notification (368), Owner (375), DestroyComponents (369), Components (374)
4.47.9 TComponent.BeforeDestruction
Synopsis: Overrides standard BeforeDestruction.
Declaration: procedure BeforeDestruction; Override
Visibility: public
Description: BeforeDestruction is overridden by TComponent to set the csDestroying flag in TCom-
ponent.ComponentState (374)
See also: TComponent.ComponentState (374)
4.47.10 TComponent.DestroyComponents
Synopsis: Destroy child components.
Declaration: procedure DestroyComponents
Visibility: public
Description: DestroyComponents calls the destructor of all owned components, till no more components are
left in the Components (374) array.
Calling the destructor of an owned component has as the effect that the component will remove itself
from the list of owned components, if nothing has disrupted the sequence of destructors.
Errors: If an overridden ’destroy’ method does not call it’s inherited destructor or raises an exception, it’s
TComponent.Destroy (369) destructor will not be called, which may result in an endless loop.
See also: Destroy (369), Components (374)
4.47.11 TComponent.Destroying
Synopsis: Called when the component is being destroyed
Declaration: procedure Destroying
Visibility: public
Description: Destroying sets the csDestroying flag in the component’s state (366) property, and does the
same for all owned components.
It is not necessary to call Destroying directly, the destructor Destroy (369) does this automatically.
See also: State (366), Destroy (369)
369
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.47.12 TComponent.ExecuteAction
Synopsis: Standard action execution method.
Declaration: function ExecuteAction(Action: TBasicAction) : Boolean; 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 (330), TBasicAction.ExecuteAction (330), TBasicAction.HandlesTarget (331), TCom-
ponent.UpdateAction (373)
4.47.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 (374), Name (376)
4.47.14 TComponent.FreeNotification
Synopsis: Ask the component to notify called when it is being destroyed.
Declaration: procedure FreeNotification(AComponent: TComponent)
Visibility: public
Description: FreeNotification inserts AComponent in the freenotification list. When the component is
destroyed, the Notification (368) method is called for all components in the freenotification list.
See also: Components (374), Notification (368), TComponent.RemoveFreeNotification (370)
4.47.15 TComponent.RemoveFreeNotification
Synopsis: Remove a component from the Free Notification list.
Declaration: procedure RemoveFreeNotification(AComponent: TComponent)
Visibility: public
Description: RemoveFreeNotification removes AComponent from the freenotification list.
See also: TComponent.FreeNotification (370)
4.47.16 TComponent.FreeOnRelease
Synopsis: Part of the IVCLComObject interface.
Declaration: procedure FreeOnRelease
Visibility: public
Description: Provided for Delphi compatibility, but is not yet implemented.
370
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.47.17 TComponent.GetEnumerator
Synopsis: Create an IEnumerator instance
4.47.18 TComponent.GetNamePath
Synopsis: Returns the name path of this component.
4.47.19 TComponent.GetParentComponent
Synopsis: Returns the parent component.
Declaration: function GetParentComponent : TComponent; 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. Descendant classes must
override this method to return the visual parent of the component.
See also: HasParent (371), Owner (375)
4.47.20 TComponent.HasParent
Synopsis: Does the component have a parent ?
Declaration: function HasParent : Boolean; Dynamic
Visibility: public
Description: HasParent can be implemented to return whether the parent of the component exists. The im-
plementation of this method in TComponent always returns False, and should be overridden by
descendant classes to return True when a parent is available. If HasParent returns True, then
GetParentComponent (371) will return the parent component.
See also: HasParent (371), Owner (375)
371
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.47.21 TComponent.InsertComponent
Synopsis: Insert the given component in the list of owned components.
4.47.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 (372), Remove (366), ValidateRename (366), Notification (368)
4.47.23 TComponent.SafeCallException
Synopsis: Part of the IVCLComObject Interface.
4.47.24 TComponent.SetSubComponent
Synopsis: Sets the csSubComponent style.
Declaration: procedure SetSubComponent(ASubComponent: Boolean)
Visibility: public
372
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.47.25 TComponent.UpdateAction
Synopsis: Updates the state of an action.
Declaration: function UpdateAction(Action: TBasicAction) : Boolean; 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 (330), TBasicAction.UpdateTarget (331), TBasicAction.HandlesTarget (331), TBasi-
cAction.ExecuteAction (330)
4.47.26 TComponent.IsImplementorOf
Synopsis: Checks if the current component is the implementor of the interface
Declaration: function IsImplementorOf(const Intf: IInterface) : Boolean
Visibility: public
Description: IsImplementorOf returns True if the current component implements the given interface. The
interface should descend from IInterfaceComponentReference (307) and the GetComponent method
should return the current instance.
See also: IInterfaceComponentReference (307)
4.47.27 TComponent.ReferenceInterface
Synopsis: Interface implementation of Notification
Declaration: procedure ReferenceInterface(const intf: IInterface; op: TOperation)
Visibility: public
Description: ReferenceInterface can be used to notify an interface of a component operation: it is the
equivalent of the TComponent.Notification (368) method of TComponent for interfaces. If the
interface implements IInterfaceComponentReference (307), then the component that implements the
interface is notified of the given operation Op.
Errors: None.
See also: TComponent.Notification (368), IInterfaceComponentReference (307)
4.47.28 TComponent.ComObject
Synopsis: Interface reference implemented by the component
Declaration: Property ComObject : IUnknown
Visibility: public
Access: Read
Description: ComObject returns the COM interface represented by the component. If the component does not
represent a COM interface, reading this property will raise an EComponentError (300).
See also: EComponentError (300)
373
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.47.29 TComponent.Components
Synopsis: Indexed list (zero-based) of all owned components.
Description: Components provides indexed access to the list of owned components. Index can range from 0
to ComponentCount-1 (374).
See also: ComponentCount (374), Owner (375)
4.47.30 TComponent.ComponentCount
Synopsis: Count of owned components
Description: ComponentCount returns the number of components that the current component owns. It can be
used to determine the valid index range in the Component (374) array.
See also: Components (374), Owner (375)
4.47.31 TComponent.ComponentIndex
Synopsis: Index of component in it’s owner’s list.
4.47.32 TComponent.ComponentState
Synopsis: Current component’s state.
374
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
Description: ComponentState indicates the current state of the component. It is a set of flags which indicate
the various stages in the lifetime of a component. The following values can occur in this set:
Flag Meaning
csLoading The component is being loaded from stream
csReading Component properties are being read from stream.
csWriting Component properties are being written to stream.
csDestroying The component or one of it’s owners is being destroyed.
csAncestor The component is being streamed as part of a frame
csUpdating The component is being updated
csFixups References to other components are being resolved
csFreeNotification The component has freenotifications.
csInline The component is being loaded as part of a frame
csDesignInstance ? not used.
The component state is set by various actions such as reading it from stream, destroying it etc.
See also: SetAncestor (366), SetDesigning (366), SetInline (366), SetDesignInstance (366), Updating (366),
Updated (366), Loaded (366)
4.47.33 TComponent.ComponentStyle
Synopsis: Current component’s style.
4.47.34 TComponent.DesignInfo
Synopsis: Information for IDE designer.
Declaration: Property DesignInfo : LongInt
Visibility: public
Access: Read,Write
Description: DesignInformation can be used by an IDE to store design information in the component. It
should not be used by an application programmer.
See also: Tag (376)
4.47.35 TComponent.Owner
Synopsis: Owner of this component.
Declaration: Property Owner : TComponent
375
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
Visibility: public
Access: Read
Description: Owner returns the owner of this component. The owner cannot be set except by explicitly inserting
the component in another component’s owned components list using that component’s InsertCom-
ponent (372) method, or by removing the component from it’s owner’s owned component list using
the RemoveComponent (372) method.
See also: Components (374), InsertComponent (372), RemoveComponent (372)
4.47.36 TComponent.VCLComObject
Synopsis: Not implemented.
Declaration: Property VCLComObject : Pointer
Visibility: public
Access: Read,Write
Description: VCLComObject is not yet implemented in Free Pascal.
4.47.37 TComponent.Name
Synopsis: Name of the component.
Declaration: Property Name : TComponentName
Visibility: published
Access: Read,Write
Description: Name is the name of the component. This name should be a valid identifier, i.e. must start with
a letter or underscore, and can contain only letters, numbers and the underscore character. When
attempting to set the name of a component, the name will be checked for validity. Furthermore,
when a component is owned by another component, the name must be either empty or must be
unique among the child component names.
By "letters", 7-bit letters are meant.
Errors: Attempting to set the name to an invalid value will result in an exception being raised.
See also: ValidateRename (366), Owner (375)
4.47.38 TComponent.Tag
Synopsis: Tag value of the component.
Declaration: Property Tag : PtrInt
Visibility: published
Access: Read,Write
Description: Tag can be used to store an integer value in the component. This value is streamed together with all
other published properties. It can be used for instance to quickly identify a component in an event
handler.
See also: Name (376)
376
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.48 TComponentEnumerator
4.48.1 Description
TComponentEnumerator implements the #rtl.system.IEnumerator (1580) interface for the TCom-
ponent (366) class, so the TComponent class can be used in a for ... in loop over the
TComponent.Components (374) child components of the component. It is returned by the TCompo-
nent.GetEnumerator (371) method of TComponent.
4.48.4 TComponentEnumerator.Create
Synopsis: Initialize a new instance of TComponentEnumerator
Declaration: constructor Create(AComponent: TComponent)
Visibility: public
Description: Create initializes a new instance of TComponentEnumerator and keeps a reference to the
component AComponent that will be enumerated.
See also: TComponent (366)
4.48.5 TComponentEnumerator.GetCurrent
Synopsis: Return the current pointer in the list
Declaration: function GetCurrent : TComponent
Visibility: public
Description: GetCurrent returns the current TComponent (366) child component instance in the enumerator.
Errors: No checking is done on the validity of the current position.
See also: MoveNext (378), TComponent.Components (374)
377
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.48.6 TComponentEnumerator.MoveNext
Synopsis: Move the position of the enumerator to the next position in the children of the component.
Errors: Note that if False is returned, calling GetCurrent will result in an exception.
See also: GetCurrent (377)
4.48.7 TComponentEnumerator.Current
Synopsis: Current pointer in the list
4.49 TCustomMemoryStream
4.49.1 Description
TCustomMemoryStream is the parent class for streams that stored their data in memory. It intro-
duces all needed functions to handle reading from and navigating through the memory, and introduces
a Memory (380) 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 descendant streams such
as TMemoryStream (416). The reason for this approach is that this way it is possible to create e.g.
read-only descendants 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 descendants such as TMemoryStream (416).
378
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.49.4 TCustomMemoryStream.Read
Synopsis: Reads Count bytes from the stream into buffer.
Declaration: function Read(var Buffer; Count: LongInt) : LongInt; 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 (446) method of TStream (445). It will read as much bytes
as are still available in the memory area pointer to by Memory (380). After the bytes are read, the
internal stream position is updated.
See also: TCustomMemoryStream.Memory (380), TStream.Read (446)
4.49.5 TCustomMemoryStream.Seek
Synopsis: Sets a new position in the stream.
Declaration: function Seek(const Offset: Int64; Origin: TSeekOrigin) : Int64
; Override
Visibility: public
Description: Seek overrides the abstract TStream.Seek (447) method. It simply updates the internal stream
position, and returns the new position.
Errors: No checking is done whether the new position is still a valid position, i.e. whether the position is
still within the range 0..Size. Attempting a seek outside the valid memory range of the stream
may result in an exception at the next read or write operation.
See also: TStream.Position (454), TStream.Size (455), TCustomMemoryStream.Memory (380)
4.49.6 TCustomMemoryStream.SaveToStream
Synopsis: Writes the contents of the memory stream to another stream.
Declaration: procedure SaveToStream(Stream: TStream)
Visibility: public
Description: SaveToStream writes the contents of the memory stream to Stream. The content of Stream is
not cleared first. The current position of the memory stream is not changed by this action.
Remark This method will work much faster than the use of the TStream.CopyFrom (449) method:
Seek(0,soFromBeginning);
Stream.CopyFrom(Self,Size);
because the CopyFrom method copies the contents in blocks, while SaveToStream writes the
contents of the memory as one big block.
Errors: If an error occurs when writing to Stream an EStreamError (303) exception will be raised.
See also: TCustomMemoryStream.SaveToFile (380), TStream.CopyFrom (449)
379
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.49.7 TCustomMemoryStream.SaveToFile
Synopsis: Writes the contents of the stream to a file.
Declaration: procedure SaveToFile(const FileName: string)
Visibility: public
Description: SaveToFile writes the contents of the stream to a file with name FileName. It simply creates a
filestream and writes the contents of the memorystream to this file stream using TCustomMemoryS-
tream.SaveToStream (379).
Remark This method will work much faster than the use of the TStream.CopyFrom (449) method:
Stream:=TFileStream.Create(fmCreate,FileName);
Seek(0,soFromBeginning);
Stream.CopyFrom(Self,Size);
because the CopyFrom method copies the contents in blocks, while SaveToFile writes the con-
tents of the memory as one big block.
Errors: If an error occurs when creating or writing to the file, an EStreamError (303) exception may occur.
See also: TCustomMemoryStream.SaveToStream (379), TFileStream (386), TStream.CopyFrom (449)
4.49.8 TCustomMemoryStream.Memory
Synopsis: Pointer to the data kept in the memory stream.
Declaration: Property Memory : Pointer
Visibility: public
Access: Read
Description: Memory points to the memory area where stream keeps it’s data. The property is read-only, so the
pointer cannot be set this way.
Remark Do not write to the memory pointed to by Memory, since the memory content may be read-only,
and thus writing to it may cause errors.
See also: TStream.Size (455)
4.50 TDataModule
4.50.1 Description
TDataModule is a container for non-visual objects which can be used in an IDE to group non-
visual 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 descendants 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 descendant of TDataModule which contains non-visual
components in it’s published property list.
380
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.50.4 TDataModule.Create
Synopsis: Create a new instance of a TDataModule.
4.50.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
(284) handler is set, then it is called, with the newly created instance as an argument.
See also: TDataModule.Create (381), AddDataModule (284), TDataModule.OnCreate (383)
381
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.50.6 TDataModule.Destroy
Synopsis: Destroys the TDataModule instance.
4.50.7 TDataModule.AfterConstruction
Synopsis: Overrides standard TObject (1586) behaviour.
Declaration: procedure AfterConstruction; Override
Visibility: public
Description: AfterConstruction calls the OnCreate (383) handler if the OldCreateOrder (384) property is
False.
See also: TDataModule.OldCreateOrder (384), TDataModule.OnCreate (383)
4.50.8 TDataModule.BeforeDestruction
Synopsis:
4.50.9 TDataModule.DesignOffset
Synopsis: Position property needed for manipulation in an IDE.
Declaration: Property DesignOffset : TPoint
Visibility: public
Access: Read,Write
Description: DesignOffset is the position of the datamodule when displayed in an IDE. It is streamed to the
form file, and should not be used at run-time.
382
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.50.10 TDataModule.DesignSize
Synopsis: Size property needed for manipulation in an IDE.
Description: DesignSize is the size of the datamodule when displayed in an IDE. It is streamed to the form
file, and should not be used at run-time.
See also: TDataModule.DesignOffset (382)
4.50.11 TDataModule.DesignPPI
Synopsis: Design Time PPI
Description: DesignPPI exists for the benefit of graphical designers, to store the PPI at which the module was
designed. It is not used in FPC itself.
4.50.12 TDataModule.OnCreate
Synopsis: Event handler, called when the datamodule is created.
Declaration: Property OnCreate : TNotifyEvent
Visibility: published
Access: Read,Write
Description: The OnCreate event is triggered when the datamodule is created and streamed. The exact moment
of triggering is dependent on the value of the OldCreateOrder (384) property.
4.50.13 TDataModule.OnDestroy
Synopsis: Event handler, called when the datamodule is destroyed.
Declaration: Property OnDestroy : TNotifyEvent
Visibility: published
Access: Read,Write
Description: The OnDestroy event is triggered when the datamodule is destroyed The exact moment of trig-
gering is dependent on the value of the OldCreateOrder (384) property.
383
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.50.14 TDataModule.OldCreateOrder
Synopsis: Determines when OnCreate and OnDestroy are triggered.
Declaration: Property OldCreateOrder : Boolean
Visibility: published
Access: Read,Write
Description: OldCreateOrder determines when exactly the OnCreate (383) and OnDestroy (383) event han-
dlers 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 (383), TDataModule.OnCreate (383), TDataModule.Destroy (382), TData-
Module.Create (381), TDataModule.CreateNew (381), TDataModule.OldCreateOrder (384)
4.51 TFiler
4.51.1 Description
Class responsible for streaming of components.
4.51.4 TFiler.DefineProperty
Synopsis:
Declaration: procedure DefineProperty(const Name: string; ReadData: TReaderProc;
WriteData: TWriterProc; HasData: Boolean)
; Virtual; Abstract
Visibility: public
Description:
384
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.51.5 TFiler.DefineBinaryProperty
Synopsis:
Visibility: public
Description:
4.51.6 TFiler.FlushBuffer
Synopsis: Flush the buffer
Declaration: procedure FlushBuffer; Virtual; Abstract
Visibility: public
Description: FlushBuffer flushes the buffer by calling the flushbuffer on the driver. It is provided for Delphi
compatibility, and is not used in FPC.
See also: TAbstractObjectReader.FlushBuffer (317)
4.51.7 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 (385)
4.51.8 TFiler.LookupRoot
Synopsis: Component used to look up ancestor components.
Declaration: Property LookupRoot : TComponent
Visibility: public
Access: Read
Description: When comparing inherited component’s values against parent values, the values are compared with
the component in LookupRoot. Initially, it is set to Root (385).
See also: Root (385)
385
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.51.9 TFiler.Ancestor
Synopsis: Ancestor component from which an inherited component is streamed.
Description: When streaming a component, this is the parent component. Only properties that differ from the
parent’s property value will be streamed.
See also: Root (385), LookupRoot (385)
4.51.10 TFiler.IgnoreChildren
Synopsis: Determines whether children will be streamed as well.
Description: By default, all children (i.e. owned objects) will also be streamed when streaming a component.
This property can be used to prevent owned objects from being streamed.
4.52 TFileStream
4.52.1 Description
TFileStream is a TStream (445) descendant that stores or reads it’s data from a named file in the
file system 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 (388) property to the list of public properties.
386
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.52.4 TFileStream.Create
Synopsis: Creates a file stream.
Declaration: constructor Create(const AFileName: string; Mode: Word)
constructor Create(const AFileName: string; Mode: Word;
Rights: Cardinal)
Visibility: public
Description: Create creates a new instance of a TFileStream class. It opens the file AFileName with
mode Mode, which can have one of the following values:
Table 4.26:
fmCreate TFileStream.Create (387) creates a new file if needed.
fmOpenRead TFileStream.Create (387) opens a file with read-only access.
fmOpenWrite TFileStream.Create (387) opens a file with write-only access.
fmOpenReadWrite TFileStream.Create (387) opens a file with read-write access.
These constants (except fmCreate) can be OR-ed with the following to specify how sharing and
file locking is supposed to be handled:
Table 4.27:
fmShareCompat Open file in DOS share-compatibility mode
fmShareExclusive Lock file for exclusive use
fmShareDenyWrite Lock file so other processes can only read.
fmShareDenyRead Lock file so other processes cannot read.
fmShareDenyNone Do not lock file.
4.52.5 TFileStream.Destroy
Synopsis: Destroys the file stream.
Declaration: destructor Destroy; 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 (387)
387
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.52.6 TFileStream.FileName
Synopsis: The filename of the stream.
Declaration: Property FileName : string
Visibility: public
Access: Read
Description: FileName is the name of the file that the stream reads from or writes to. It is the name as passed in
the constructor of the stream; it cannot be changed. To write to another file, the stream must be freed
and created again with the new filename.
See also: TFileStream.Create (387)
4.53 TFPList
4.53.1 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 (406), 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 (465) descendant such as TStringList
(460). To manage general objects, a TCollection (356) class exists, from which a descendant can be
made to manage collections of various kinds.
388
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.53.4 TFPList.Destroy
Synopsis: Destroys the list and releases the memory used to store the list elements.
4.53.5 TFPList.AddList
Synopsis: Add all pointers from another list
Declaration: procedure AddList(AList: TFPList)
Visibility: public
Description: AddList adds all pointers from AList to the list. If a pointer is already present, it is added a
second time.
See also: TFPList.Assign (393), TList.AddList (409)
4.53.6 TFPList.Add
Synopsis: Adds a new pointer to the list.
Declaration: function Add(Item: Pointer) : Integer
Visibility: public
Description: Add adds a new pointer to the list after the last pointer (i.e. at position Count, thus increasing the
item count with 1. If the list is at full capacity, the capacity of the list is expanded, using the Expand
(390) method.
To insert a pointer at a certain position in the list, use the Insert (392) method instead.
See also: Delete (390), Grow (406), Insert (392)
4.53.7 TFPList.Clear
Synopsis: Clears the pointer list.
Declaration: procedure Clear
Visibility: public
389
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
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 (389)
4.53.8 TFPList.Delete
Synopsis: Removes a pointer from the list.
Declaration: procedure Delete(Index: Integer)
Visibility: public
Description: Delete removes the pointer at position Index from the list, shifting all following pointers one
position up (or to the left).
The memory the pointer is pointing to is not deallocated.
4.53.9 TFPList.Error
Synopsis: Raises an EListError (301) exception.
Declaration: class procedure Error(const Msg: string; Data: PtrInt)
Visibility: public
Description: Error raises an EListError (301) exception, with a message formatted with Msg and Data.
4.53.10 TFPList.Exchange
Synopsis: Exchanges two pointers in the list.
Declaration: procedure Exchange(Index1: Integer; Index2: Integer)
Visibility: public
Description: Exchange exchanges the pointers at positions Index1 and Index2. Both pointers must be
withing the current range of the list, or an EListError (301) exception will be raised.
4.53.11 TFPList.Expand
Synopsis: Increases the capacity of the list if needed.
Declaration: function Expand : TFPList
Visibility: public
Description: Expand increases the capacity of the list if the current element count matches the current list ca-
pacity.
The capacity is increased according to the following algorithm:
390
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.53.12 TFPList.Extract
Synopsis: Remove the first occurrence of a pointer from the list.
4.53.13 TFPList.First
Synopsis: Returns the first non-nil pointer in the list.
Declaration: function First : Pointer
Visibility: public
Description: First returns the value of the first non-nil pointer in the list.
If there are no pointers in the list or all pointers equal Nil, then Nil is returned.
See also: Last (392)
4.53.14 TFPList.GetEnumerator
Synopsis: Create an IEnumerator instance
Declaration: function GetEnumerator : TFPListEnumerator
Visibility: public
Description: GetEnumerator is the implementation of the IEnumerable (1579) interface for TFPList. It
creates a TFPListEnumerator (395) instance and returns it’s IEnumerator (1580) interface.
See also: TFPListEnumerator (395), IEnumerator (1580), IEnumerable (1579)
4.53.15 TFPList.IndexOf
Synopsis: Returns the index of a given pointer.
391
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.53.16 TFPList.IndexOfItem
Synopsis: Search an item in the list
Declaration: function IndexOfItem(Item: Pointer; Direction: TDirection) : Integer
Visibility: public
Description: IndexOfItem has the same function as the IndexOf (264) function: it searches for Item in the
list, and returns the index of the first found matching pointer. If none is found, -1 is returned.
In difference with the IndexOf function, it accepts a parameter Direction indicating the search
direction: from the beginning of the list till the end of the list, or from the end of the list till the
beginning. The IndexOf function starts at the beginning of the list. The search direction is only
important if the item can appear multiple times in the list.
See also: TFPList.TDirection (??), TFPList.IndexOf (391)
4.53.17 TFPList.Insert
Synopsis: Inserts a new pointer in the list at a given position.
Declaration: procedure Insert(Index: Integer; Item: Pointer)
Visibility: public
Description: Insert inserts pointer Item at position Index in the list. All pointers starting from Index are
shifted to the right.
If Index is not a valid position, then a EListError (301) exception is raised.
See also: Add (389), Delete (390)
4.53.18 TFPList.Last
Synopsis: Returns the last non-nil pointer in the list.
Declaration: function Last : Pointer
Visibility: public
Description: Last returns the value of the last non-nil pointer in the list.
If there are no pointers in the list or all pointers equal Nil, then Nil is returned.
See also: First (391)
4.53.19 TFPList.Move
Synopsis: Moves a pointer from one position in the list to another.
Declaration: procedure Move(CurIndex: Integer; NewIndex: Integer)
Visibility: public
Description: Move moves the pointer at position CurIndex to position NewIndex. This is done by storing the
value at position CurIndex, deleting the pointer at position CurIndex, and reinserting the value
at position NewIndex
If CurIndex or Newindex are not inside the valid range of indices, an EListError (301) exception
is raised.
See also: Exchange (390)
392
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.53.20 TFPList.Assign
Synopsis: Assign performs the given operation on the list.
Declaration: procedure Assign(ListA: TFPList; AOperator: TListAssignOp;
ListB: TFPList)
Visibility: public
Description: Assign can be used to merge or assign lists It is an extended version of the usual TPersistent.Assign
mechanism. The arguments ListA and ListB are used as sources of pointers to add or remove el-
ements from the current list, depending on the operation AOperation. The available operations
are documented in the TListAssignOp (273) type.
See also: TFPList.Add (389), TFPList.Clear (389)
4.53.21 TFPList.Remove
Synopsis: Removes a value from the list.
Declaration: function Remove(Item: Pointer) : Integer
Visibility: public
Description: Remove searches Item in the list, and, if it finds it, deletes the item from the list. Only the first
occurrence of Item is removed.
See also: Delete (390), IndexOf (391), Insert (392)
4.53.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 (389)
4.53.23 TFPList.Sort
Synopsis: Sorts the pointers in the list.
Declaration: procedure Sort(Compare: TListSortCompare)
Visibility: public
Description: Sort> sorts the pointers in the list. Two pointers are compared by passing them to the Compare
function. The result of this function determines how the pointers will be sorted:
•If the result of this function is negative, the first pointer is assumed to be ’less’ than the second
and will be moved before the second in the list.
•If the function result is positive, the first pointer is assumed to be ’greater than’ the second and
will be moved after the second in the list.
393
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
•if the function result is zero, the pointers are assumed to be ’equal’ and no moving will take
place.
4.53.24 TFPList.ForEachCall
Synopsis: Call a procedure or method for each pointer in the list.
Declaration: procedure ForEachCall(proc2call: TListCallback; arg: pointer)
procedure ForEachCall(proc2call: TListStaticCallback; arg: pointer)
Visibility: public
Description: ForEachCall iterates over all pointers in the list and calls proc2call, passing it the pointer
and the additional arg data pointer. Proc2Call can be a method or a static procedure.
Errors: None.
4.53.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 (389) or insert (392), 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 doesn’t need to grow, and will speed up
filling the list.
4.53.26 TFPList.Count
Synopsis: Current number of pointers in the list.
Declaration: Property Count : Integer
Visibility: public
Access: Read,Write
Description: Count is the current number of (possibly Nil) pointers in the list. Since the list is zero-based, the
index of the largest pointer is Count-1.
394
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.53.27 TFPList.Items
Synopsis: Provides access to the pointers in the list.
Description: Items is used to access the pointers in the list. It is the default property of the TFPList class, so
it can be omitted.
The list is zero-based, so Index must be in the range 0 to Count-1.
4.53.28 TFPList.List
Synopsis: Memory array where pointers are stored.
4.54 TFPListEnumerator
4.54.1 Description
TFPListEnumerator implements the #rtl.system.IEnumerator (1580) interface for the TFPList
(388) class, so the TFPList class can be used in a for ... in loop. It is returned by the
TFPList.GetEnumerator (391) method of TFPList.
4.54.4 TFPListEnumerator.Create
Synopsis: Initialize a new instance of TFPListEnumerator
Declaration: constructor Create(AList: TFPList)
395
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
Visibility: public
Description: Create initializes a new instance of TFPListEnumerator and keeps a reference to the list
AList that will be enumerated.
See also: TFPList (388)
4.54.5 TFPListEnumerator.GetCurrent
Synopsis: Return the current pointer in the list
Declaration: function GetCurrent : Pointer
Visibility: public
4.54.6 TFPListEnumerator.MoveNext
Synopsis: Move the position of the enumerator to the next position in the list.
Declaration: function MoveNext : Boolean
Visibility: public
Description: MoveNext puts the pointer on the next item in the list, and returns True if this succeeded, or
False if the pointer is past the last element in the list.
Errors: Note that if False is returned, calling GetCurrent will result in an exception.
See also: GetCurrent (396)
4.54.7 TFPListEnumerator.Current
Synopsis: Current pointer in the list
396
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.55 THandleStream
4.55.1 Description
THandleStream is an abstract descendant of the TStream (445) 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 (397) and Write (398) 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; Descendant
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 descendant methods that support it.
4.55.4 THandleStream.Create
Synopsis: Create a handlestream from an OS Handle.
Declaration: constructor Create(AHandle: THandle)
Visibility: public
Description: Create creates a new instance of a THandleStream class. It stores AHandle in an internal
variable and then calls the inherited constructor.
See also: TStream (445)
4.55.5 THandleStream.Read
Synopsis: Overrides standard read method.
397
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
Description: Read overrides the Read (446) method of TStream. It uses the Handle (398) 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.
4.55.6 THandleStream.Write
Synopsis: Overrides standard write method.
Declaration: function Write(const Buffer; Count: LongInt) : LongInt; Override
Visibility: public
Description: Write overrides the Write (447) method of TStream. It uses the Handle (398) 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.
4.55.7 THandleStream.Seek
Synopsis: Overrides the Seek method.
Declaration: function Seek(const Offset: Int64; Origin: TSeekOrigin) : Int64
; Override
Visibility: public
Description: seek uses the FileSeek (1684) method to position the stream on the desired position. Note that
handle stream descendants (notably pipes) can override the method to prevent the seek.
4.55.8 THandleStream.Handle
Synopsis: The OS handle of the stream.
Declaration: Property Handle : THandle
Visibility: public
Access: Read
Description: Handle represents the Operating system handle to which reading and writing is done. The handle
can be read only, i.e. it cannot be set after the THandlestream instance was created. It should be
passed to the constructor THandleStream.Create (397)
See also: THandleStream (397), THandleStream.Create (397)
398
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.56 TInterfacedPersistent
4.56.1 Description
TInterfacedPersistent is a direct descendant of TPersistent (426) which implements the
#rtl.system.IInterface (1366) interface. In particular, it implements the QueryInterface as a
public method.
4.56.4 TInterfacedPersistent.QueryInterface
Synopsis: Implementation of IInterface.QueryInterface
4.56.5 TInterfacedPersistent.AfterConstruction
Synopsis: Overrides the standard AfterConstruction method.
Declaration: procedure 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.57 TInterfaceList
4.57.1 Description
TInterfaceList is a standard implementation of the IInterfaceList (307) interface. It uses a
TThreadList (508) instance to store the list of interfaces.
399
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.57.5 TInterfaceList.Create
Synopsis: Create a new instance of TInterfaceList
Declaration: constructor Create
Visibility: public
Description: Create creates a new instance of the TInterfaceList class. It sets up the internal structures
needed to store the list of interfaces.
See also: Destroy (400)
4.57.6 TInterfaceList.Destroy
Synopsis: Destroys the list of interfaces
Declaration: destructor Destroy; Override
Visibility: public
Description: Destroy first calls Clear (401) and then frees the TInterfaceList instance from memory.
Note that the Clear method decreases the reference count of all interfaces.
See also: Create (400), Clear (401)
400
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.57.7 TInterfaceList.Clear
Synopsis: Removes all interfaces from the list.
4.57.8 TInterfaceList.Delete
Synopsis: Delete an interface from the list.
4.57.9 TInterfaceList.Exchange
Synopsis: Exchange 2 interfaces in the list
Declaration: procedure Exchange(index1: Integer; index2: Integer)
Visibility: public
Description: Exchange is the implementation of the IInterfaceList.Exchange (310) method. It exchanges the
position of 2 interfaces in the list.
See also: IInterfaceList.Exchange (310), TInterfaceList.Delete (401), TInterfaceList.Add (402), TList.Exchange
(410), TFPList.Exchange (390)
4.57.10 TInterfaceList.First
Synopsis: Returns the first non-Nil element in the list.
Declaration: function First : IUnknown
Visibility: public
Description: First is the implementation of the IInterfaceList.First (310) method. It returns the first non-Nil
element from the list.
See also: IInterfaceList.First (310), TList.First (411)
401
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.57.11 TInterfaceList.GetEnumerator
Synopsis: Create an IEnumerator instance
4.57.12 TInterfaceList.IndexOf
Synopsis: Returns the index of an interface.
4.57.13 TInterfaceList.Add
Synopsis: Add an interface to the list
Declaration: function Add(item: IUnknown) : Integer
Visibility: public
Description: Add is the implementation of the IInterfaceList.Add (311) method. It adds an interface to the list,
and returns the location of the new element in the list. This operation will increment the reference
count of the interface.
See also: IInterfaceList.Add (311), TInterfaceList.Delete (401), TInterfaceList.Insert (402), TList.Add (409),
TFPList.Add (389)
4.57.14 TInterfaceList.Insert
Synopsis: Insert an interface to the list
Declaration: procedure Insert(i: Integer; item: IUnknown)
Visibility: public
Description: Insert is the implementation of the IInterfaceList.Insert (311) method. It inserts an interface in
the list at the indicated position. This operation will increment the reference count of the interface.
See also: IInterfaceList.Insert (311), TInterfaceList.Delete (401), TInterfaceList.Add (402), TList.Insert (411),
TFPList.Insert (392)
402
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.57.15 TInterfaceList.Last
Synopsis: Returns the last non-Nil element in the list.
See also: IInterfaceList.Last (311), TInterfaceList.First (401), TList.Last (412), TFPList.Last (392)
4.57.16 TInterfaceList.Remove
Synopsis: Remove an interface from the list
Declaration: function Remove(item: IUnknown) : Integer
Visibility: public
Description: Remove is the implementation of the IInterfaceList.Remove (311) method. It removes the first
occurrence of the interface from the list.
See also: IInterfaceList.Remove (311), TInterfaceList.Delete (401), TInterfaceList.IndexOf (402), TList.Remove
(412), TFPList.Remove (393)
4.57.17 TInterfaceList.Lock
Synopsis: Lock the list
Declaration: procedure Lock
Visibility: public
Description: Lock locks the list. It is the implementation of the IInterfaceList.Lock (312) method. It limits
access to the list to the current thread.
See also: IInterfaceList.Lock (312), TInterfaceList.UnLock (403), TThreadList.LockList (509)
4.57.18 TInterfaceList.Unlock
Synopsis: UnLocks a locked list
Declaration: procedure Unlock
Visibility: public
Description: UnLock unlocks the list. It is the implementation of the IInterfaceList.UnLock (312) method. After
a call to unlock, the current thread releases the list for manipulation by other threads.
See also: IInterfaceList.UnLock (312), TInterfaceList.Lock (403), TThreadList.UnLockList (510)
403
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.57.19 TInterfaceList.Expand
Synopsis: Expands the list
4.57.20 TInterfaceList.Capacity
Synopsis: The current capacity of the list.
Declaration: Property Capacity : Integer
Visibility: public
Access: Read,Write
Description: Capacity is the number of elements that the list can contain without needing to allocate more
memory.
See also: IInterfaceList.Capacity (312), TInterfaceList.Count (404), TList.Capacity (413), TFPList.Capacity
(394)
4.57.21 TInterfaceList.Count
Synopsis: The current number of elements in the list.
Declaration: Property Count : Integer
Visibility: public
Access: Read,Write
Description: Count is the number of elements in the list. This can include Nil elements. Note that the elements
are zero-based, and thus are indexed from 0 to Count-1.
4.57.22 TInterfaceList.Items
Synopsis: Array-based access to the list’s items.
Declaration: Property Items[Index: Integer]: IUnknown; default
Visibility: public
Access: Read,Write
Description: Items provides indexed access to the elements in the list. Note that the elements are zero-based,
and thus are indexed from 0 to Count-1. The items are read-write. It is not possible to add elements
to the list by accessing an element with index larger or equal to Count (404).
See also: IInterfaceList.Items (313), TInterfaceList.Count (404), TList.Items (414), TFPList.Items (395)
404
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.58 TInterfaceListEnumerator
4.58.1 Description
TInterfaceListEnumerator implements the #rtl.system.IEnumerator (1580) interface for the
TInterfaceList (399) class, so the TInterfaceList class can be used in a for ... in loop
over the TInterfaceList.Components (399) child components of the component. It is returned by the
TInterfaceList.GetEnumerator (402) method of TInterfaceList.
4.58.4 TInterfaceListEnumerator.Create
Synopsis: Initialize a new instance of TInterfaceListEnumerator
Declaration: constructor Create(AList: TInterfaceList)
Visibility: public
Description: Create initializes a new instance of TInterfaceListEnumerator and keeps a reference to
the component AComponent that will be enumerated.
See also: TInterfaceList (399)
4.58.5 TInterfaceListEnumerator.GetCurrent
Synopsis: Return the current pointer in the list
Declaration: function GetCurrent : IUnknown
Visibility: public
Description: GetCurrent returns the current interface in the TInterfaceList (399) list.
Errors: No checking is done on the validity of the current position.
See also: MoveNext (406), TInterfaceList.Components (399)
405
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.58.6 TInterfaceListEnumerator.MoveNext
Synopsis: Move the position of the enumerator to the next position in the children of the component.
Errors: Note that if False is returned, calling GetCurrent will result in an exception.
See also: GetCurrent (405)
4.58.7 TInterfaceListEnumerator.Current
Synopsis: Current pointer in the list
4.59 TList
4.59.1 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 (388) may be used instead.
To manage collections of strings, it is better to use a TStrings (465) descendant such as TStringList
(460). To manage general objects, a TCollection (356) class exists, from which a descendant can be
made to manage collections of various kinds.
406
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.59.5 TList.Create
Synopsis: Class to manage collections of pointers.
4.59.6 TList.Destroy
Synopsis: Destroys the list and releases the memory used to store the list elements.
Declaration: destructor Destroy; Override
407
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
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 memory they point to must be explicitly released before
calling the destructor.
4.59.7 TList.FPOAttachObserver
Synopsis: Add an observer to the list of observers
Declaration: procedure FPOAttachObserver(AObserver: TObject)
Visibility: public
Description: FPOAttachObserver is part of the implementation of the IFPObserved (305) interface in Tlist.
It adds a new observer to the list of observers. Calling this multiple times will add the observed object
multiple times to the list.
Errors: An EObserver exception may be raised if AObject does not implement the IFPObserver (306)
interface.
4.59.8 TList.FPODetachObserver
Synopsis: Remove an observer from the list of observers
Declaration: procedure FPODetachObserver(AObserver: TObject)
Visibility: public
Description: FPODetachObserver is part of the implementation of the IFPObserved (305) interface in Tlist.
It removes the first found instance of the observer from the list of observers.
See also: IFPObserved (305), IFPObserved.FPODetachObserver (305), IFPObserver (306)
4.59.9 TList.FPONotifyObservers
Synopsis: Notify observers of changes in the list
Declaration: procedure FPONotifyObservers(ASender: TObject;
AOperation: TFPObservedOperation;
Data: Pointer)
Visibility: public
Description: FPONotifyObservers is called to notify observers of changes in the list. The following notifi-
cations are sent:
See also: FPODetachObserver (264), FPOAttachObserver (264), Add (264), Exchange (264), Delete (264),
Extract (264)
408
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.59.10 TList.AddList
Synopsis: Add all pointers from another list
4.59.11 TList.Add
Synopsis: Adds a new pointer to the list.
Declaration: function Add(Item: Pointer) : Integer
Visibility: public
Description: Add adds a new pointer to the list after the last pointer (i.e. at position Count, thus increasing the
item count with 1. If the list is at full capacity, the capacity of the list is expanded, using the Grow
(406) method.
To insert a pointer at a certain position in the list, use the Insert (411) method instead.
4.59.12 TList.Clear
Synopsis: Clears the pointer list.
Declaration: procedure 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 (407)
4.59.13 TList.Delete
Synopsis: Removes a pointer from the list.
Declaration: procedure Delete(Index: Integer)
Visibility: public
Description: Delete removes the pointer at position Index from the list, shifting all following pointers one
position up (or to the left).
The memory the pointer is pointing to is not deallocated.
409
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.59.14 TList.Error
Synopsis: Raises an EListError (301) exception.
4.59.15 TList.Exchange
Synopsis: Exchanges two pointers in the list.
Declaration: procedure Exchange(Index1: Integer; Index2: Integer)
Visibility: public
Description: Exchange exchanges the pointers at positions Index1 and Index2. Both pointers must be
withing the current range of the list, or an EListError (301) exception will be raised.
4.59.16 TList.Expand
Synopsis: Increases the capacity of the list if needed.
Declaration: function Expand : TList
Visibility: public
Description: Expand increases the capacity of the list if the current element count matches the current list ca-
pacity.
The capacity is increased according to the following algorithm:
4.59.17 TList.Extract
Synopsis: Remove the first occurrence of a pointer from the list.
Declaration: function Extract(item: Pointer) : Pointer
Visibility: public
Description: Extract searched for an occurrence of item, and if a match is found, the match is deleted from
the list. If no match is found, nothing is deleted. If Item was found, the result is Item. If Item
was not found, the result is Nil. A lnExtracted notification event is triggered if an element is
extracted from the list.
410
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.59.18 TList.First
Synopsis: Returns the first non-nil pointer in the list.
4.59.19 TList.GetEnumerator
Synopsis: Create an IEnumerator instance
Declaration: function GetEnumerator : TListEnumerator
Visibility: public
Description: GetEnumerator is the implementation of the IEnumerable (1579) interface for TList. It creates
a TListEnumerator (414) instance and returns it’s IEnumerator (1580) interface.
See also: TListEnumerator (414), IEnumerator (1580), IEnumerable (1579)
4.59.20 TList.IndexOf
Synopsis: Returns the index of a given pointer.
Declaration: function IndexOf(Item: Pointer) : Integer
Visibility: public
Description: IndexOf searches for the pointer Item in the list of pointers, and returns the index of the pointer,
if found.
If no pointer with the value Item was found, -1 is returned.
4.59.21 TList.Insert
Synopsis: Inserts a new pointer in the list at a given position.
411
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.59.22 TList.Last
Synopsis: Returns the last non-nil pointer in the list.
4.59.23 TList.Move
Synopsis: Moves a pointer from one position in the list to another.
Declaration: procedure Move(CurIndex: Integer; NewIndex: Integer)
Visibility: public
Description: Move moves the pointer at position CurIndex to position NewIndex. This is done by storing the
value at position CurIndex, deleting the pointer at position CurIndex, and reinserting the value
at position NewIndex
If CurIndex or Newindex are not inside the valid range of indices, an EListError (301) exception
is raised.
See also: Exchange (410)
4.59.24 TList.Assign
Synopsis: Copy the contents of other lists.
4.59.25 TList.Remove
Synopsis: Removes a value from the list.
412
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.59.26 TList.Pack
Synopsis: Removes Nil pointers from the list and frees unused memory.
4.59.27 TList.Sort
Synopsis: Sorts the pointers in the list.
•If the result of this function is negative, the first pointer is assumed to be ’less’ than the second
and will be moved before the second in the list.
•If the function result is positive, the first pointer is assumed to be ’greater than’ the second and
will be moved after the second in the list.
•if the function result is zero, the pointers are assumed to be ’equal’ and no moving will take
place.
4.59.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 (409) or insert (411), 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 doesn’t need to grow, and will speed up
filling the list.
413
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.59.29 TList.Count
Synopsis: Current number of pointers in the list.
Declaration: Property Count : Integer
Visibility: public
Access: Read,Write
Description: Count is the current number of (possibly Nil) pointers in the list. Since the list is zero-based, the
index of the largest pointer is Count-1.
4.59.30 TList.Items
Synopsis: Provides access to the pointers in the list.
Declaration: Property Items[Index: Integer]: Pointer; default
Visibility: public
Access: Read,Write
Description: Items is used to access the pointers in the list. It is the default property of the TList class, so it
can be omitted.
The list is zero-based, so Index must be in the range 0 to Count-1.
4.59.31 TList.List
Synopsis: Memory array where pointers are stored.
Declaration: Property List : PPointerList
Visibility: public
Access: Read
Description: List points to the memory space where the pointers are stored. This can be used to quickly copy
the list of pointers to another location.
4.60 TListEnumerator
4.60.1 Description
TListEnumerator implements the #rtl.system.IEnumerator (1580) interface for the TList (406)
class, so the TList class can be used in a for ... in loop. It is returned by the TList.GetEnumerator
(411) method of TList.
414
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.60.4 TListEnumerator.Create
Synopsis: Initialize a new instance of TListEnumerator
Declaration: constructor Create(AList: TList)
Visibility: public
Description: Create initializes a new instance of TListEnumerator and keeps a reference to the list AList
that will be enumerated.
See also: TList (406)
4.60.5 TListEnumerator.GetCurrent
Synopsis: Return the current pointer in the list
Declaration: function GetCurrent : Pointer
Visibility: public
Description: GetCurrent returns the current pointer in the enumerator.
Errors: No checking is done on the validity of the current position.
See also: MoveNext (415)
4.60.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 (415)
4.60.7 TListEnumerator.Current
Synopsis: Current pointer in the list
Declaration: Property Current : Pointer
Visibility: public
Access: Read
Description: Current redefines GetCurrent (415) as a property.
See also: GetCurrent (415)
415
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.61 TMemoryStream
4.61.1 Description
TMemoryStream is a TStream (445) descendant that stores it’s data in memory. It descends directly
from TCustomMemoryStream (378) and implements the necessary to allocate and de-allocate mem-
ory directly from the heap. It implements the Write (417) 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.
4.61.3 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.61.4 TMemoryStream.Clear
Synopsis: Zeroes the position, capacity and size of the stream.
4.61.5 TMemoryStream.LoadFromStream
Synopsis: Loads the contents of a stream into memory.
Declaration: procedure LoadFromStream(Stream: TStream)
416
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
Visibility: public
Description: LoadFromStream loads the contents of Stream into the memorybuffer of the stream. Any
previous contents of the memory stream are overwritten. Memory is allocated as needed.
Remark The LoadFromStream uses the Size (455) property of Stream to determine how much memory
must be allocated. Some streams do not allow the stream size to be determined, so care must be taken
when using this method.
This method will work much faster than the use of the TStream.CopyFrom (449) method:
Seek(0,soFromBeginning);
CopyFrom(Stream,Stream.Size);
because the CopyFrom method copies the contents in blocks, while LoadFromStream reads the
contents of the stream as one big block.
Errors: If an error occurs when reading from the stream, an EStreamError (303) may occur.
4.61.6 TMemoryStream.LoadFromFile
Synopsis: Loads the contents of a file into memory.
Declaration: procedure LoadFromFile(const FileName: string)
Visibility: public
Description: LoadFromFile loads the contents of the file with name FileName into the memory stream. The
current contents of the memory stream is replaced by the contents of the file. Memory is allocated as
needed.
The LoadFromFile method simply creates a filestream and then calls the TMemoryStream.LoadFromStream
(416) method.
4.61.7 TMemoryStream.SetSize
Synopsis: Sets the size for the memory stream.
Declaration: procedure SetSize(const NewSize: Int64); 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 (454), TStream.Size (455)
4.61.8 TMemoryStream.Write
Synopsis: Writes data to the stream’s memory.
Declaration: function Write(const Buffer; Count: LongInt) : LongInt; Override
Visibility: public
417
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
Description: Write writes Count bytes from Buffer to the stream’s 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 (447) method.
4.62 TOwnedCollection
4.62.1 Description
TOwnedCollection automatically maintains owner information, so it can be displayed in an IDE.
Collections that should be displayed in an IDE should descend from TOwnedCollection or must
implement a GetOwner function.
4.62.3 TOwnedCollection.Create
Synopsis: Create a new TOwnerCollection instance.
Declaration: constructor Create(AOwner: TPersistent;
AItemClass: TCollectionItemClass)
Visibility: public
Description: Create creates a new instance of TOwnedCollection and stores the AOwner references. It
will the value returned in the TCollection.Owner (358) property of the collection. The ItemClass
class reference is passed on to the inherited constructor, and will be used to create new instances in
the Insert (360) and Add (358) methods.
4.63 TOwnerStream
4.63.1 Description
TOwnerStream can be used when creating stream chains such as when using encryption and com-
pression streams. It keeps a reference to the source stream and will automatically free the source
stream when ready (if the SourceOwner (420) property is set to True).
418
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.63.4 TOwnerStream.Create
Synopsis: Create a new instance of TOwnerStream.
Declaration: constructor Create(ASource: TStream)
Visibility: public
Description: Create instantiates a new instance of TOwnerStream and stores the reference to AStream. If
SourceOwner is True, the source stream will also be freed when the instance is destroyed.
See also: TOwnerStream.Destroy (419), TOwnerStream.Source (419), TOwnerStream.SourceOwner (420)
4.63.5 TOwnerStream.Destroy
Synopsis: Destroys the TOwnerStream instance and the source stream.
Declaration: destructor Destroy; Override
Visibility: public
Description: Destroy frees the source stream if the SourceOwner property is True.
See also: TOwnerStream.Create (419), TOwnerStream.Source (419), TOwnerStream.SourceOwner (420)
4.63.6 TOwnerStream.Source
Synopsis: Reference to the source stream.
Declaration: Property Source : TStream
Visibility: public
Access: Read
Description: Source is the source stream. It should be used by descendant streams to access the source stream
to read from or write to.
Do not free the Source reference directly if SourceOwner is True. In that case the owner stream
instance will free the source stream itself.
See also: TOwnerStream.Create (419)
419
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.63.7 TOwnerStream.SourceOwner
Synopsis: Indicates whether the ownerstream owns it’s source
Description: SourceOwner indicates whether the TOwnerStream owns it’s Source stream or not. If this
property is True then the Source stream is freed when the TOwnerStream instance is freed.
See also: TOwnerStream.Source (419), TOwnerStream.Destroy (419)
4.64 TParser
4.64.1 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 isn’t suitable to be
used as a general parser.
The parser is always positioned on a certain token, whose type is stored in the Token (426) property.
Various methods are provided to obtain the token value in the desired format.
To advance to the next token, invoke NextToken (423) method.
420
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.64.4 TParser.Create
Synopsis: Creates a new parser instance.
Declaration: constructor Create(Stream: TStream)
Visibility: public
Description: Create creates a new TParser instance, using Stream as the stream to read data from, and
reads the first token from the stream.
Errors: If an error occurs while parsing the first token, an EParserError (302) exception is raised.
See also: TParser.NextToken (423), TParser.Token (426)
4.64.5 TParser.Destroy
Synopsis: Destroys the parser instance.
Declaration: destructor Destroy; Override
Visibility: public
Description: Destroys the parser instance.
Errors: None.
4.64.6 TParser.CheckToken
Synopsis: Checks whether the token if of the given type.
Declaration: procedure CheckToken(T: Char)
Visibility: public
Description: Checks whether the token if of the given type.
Errors: If current token isn’t of type T, an EParserError (302) exception is raised.
See also: TParser.Token (426)
4.64.7 TParser.CheckTokenSymbol
Synopsis: Checks whether the token equals the given symbol
Declaration: procedure CheckTokenSymbol(const S: string)
Visibility: public
Description: CheckTokenSymbol performs a case-insensitive comparison of current token value with S.
Current token must be of type toSymbol (266), otherwise an EParserError (302) exception is raised.
421
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
Errors: If the comparison fails, or current token isn’t a symbol, an EParserError (302) exception is raised.
See also: TParser.TokenSymbolIs (425), toSymbol (266)
4.64.8 TParser.Error
Synopsis: Raises an EParserError (302) exception with the given message
4.64.9 TParser.ErrorFmt
Synopsis: Raises an EParserError (302) exception and formats the message.
Declaration: procedure ErrorFmt(const Ident: string; const Args: Array of const)
Visibility: public
Description: Raises an EParserError (302) exception and formats the message.
4.64.10 TParser.ErrorStr
Synopsis: Raises an EParserError (302) exception with the given message
Declaration: procedure ErrorStr(const Message: string)
Visibility: public
4.64.11 TParser.HexToBinary
Synopsis: Writes hexadecimal data to a stream.
Declaration: procedure HexToBinary(Stream: TStream)
Visibility: public
Description: HexToBinary reads a sequence of hexadecimal characters from the input stream and converts
them to a sequence of bytes which is written to Stream. Each byte is represented by two contiguous
hexadecimal characters.
Whitespace is allowed between hexadecimal characters if it doesn’t appear between two characters
that form the same byte.
HexToBinary stops when the first non-hexadecimal and non-whitespace character is found, or the
end of the input stream is reached.
Remark This method begins reading after the current token: that is, current token, even if it’s a valid hex-
adecimal value, isn’t included.
422
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.64.12 TParser.NextToken
Synopsis: Reads the next token and returns its type.
4.64.13 TParser.SourcePos
Synopsis: Returns the current position in the stream.
Declaration: function SourcePos : LongInt
Visibility: public
Description:
Remark This is not the character position relative to the current source line, but the byte offset from the
beginning of the stream.
Errors: None.
See also: TParser.SourceLine (426)
4.64.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 (266), 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 (424) or TokenWideString (425)
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 (426) isn’t toSymbol (266), or no valid symbol is found after a dot, an EParserError (302)
exception is raised.
423
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.64.15 TParser.TokenFloat
Synopsis: Returns the current token as a float.
See also: TParser.FloatType (425), TParser.NextToken (423), TParser.Token (426), toFloat (266)
4.64.16 TParser.TokenInt
Synopsis: Returns the current token as an integer.
Declaration: function TokenInt : Int64
Visibility: public
Description: If current token type is toInteger (266), this method returns the token value as an integer.
In the input stream an integer can be an hexadecimal (prefixed by ’$’ character) or decimal number.
Decimal numbers can be prefixed by an unary minus: if this is the case, no space must exist between
minus and number.
Errors: If Token (426) isn’t toInteger (266), an EConvertError (264) exception is raised.
See also: TParser.NextToken (423), TParser.Token (426), toInteger (266)
4.64.17 TParser.TokenString
Synopsis: Returns the current token as a string.
424
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.64.18 TParser.TokenWideString
Synopsis: Returns the current token as a widestring
Declaration: function TokenWideString : WideString
Visibility: public
Description: If current token type is toWString (266), this method returns the contents of the string. That is,
enclosing quotes are removed, embedded quotes are unescaped and control strings are converted to
the appropriate sequence of characters.
If current token isn’t a widestring, TokenWideString behaviour is the same as TokenString (424).
Errors: None.
See also: TParser.NextToken (423), TokenString (424), TParser.Token (426), toWString (266)
4.64.19 TParser.TokenSymbolIs
Synopsis: Returns True if the token equals the given symbol.
Declaration: function TokenSymbolIs(const S: string) : Boolean
Visibility: public
Description: TokenSymbolIs performs a case-insensitive comparison of current token value with S.
If current token isn’t of type toSymbol (266), or comparison fails, False is returned.
Errors: None.
See also: TParser.CheckTokenSymbol (421), TParser.Token (426)
4.64.20 TParser.FloatType
Synopsis: The type of a float token.
Declaration: Property FloatType : Char
Visibility: public
Access: Read
Description: Floating point numbers can be postfixed with a character specifying the type of floating point value.
When specified, this property holds the character postfixed to the number.
It can be one of the following values:
Table 4.28:
s or S Value is a single.
c or C Value is a currency.
d or D Value is a date.
If Token (426) isn’t toFloat (266) or one of the above characters wasn’t specified, FloatType is
the null character (zero).
See also: TParser.NextToken (423), TParser.Token (426), TParser.TokenFloat (424), toFloat (266)
425
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.64.21 TParser.SourceLine
Synopsis: Current source line number.
Declaration: Property SourceLine : Integer
Visibility: public
Access: Read
Description: Current source line number.
See also: TParser.SourcePos (423)
4.64.22 TParser.Token
Synopsis: The type of the current token.
Declaration: Property Token : Char
Visibility: public
Access: Read
Description: This property holds the type of the current token. When Token isn’t one of the special token types
(whose value can be retrieved with specific methods) it is the character representing the current token.
Special token types:
Table 4.29:
toEOF (266) Value returned by TParser.Token (426) when the end of the input stream was reached.
toSymbol (266) Value returned by TParser.Token (426) when a symbol was found in the input stream.
toString (266) Value returned by TParser.Token (426) when a string was found in the input stream.
toInteger (266) Value returned by TParser.Token (426) when an integer was found in the input stream.
toFloat (266) Value returned by TParser.Token (426) when a floating point value was found in the input stream.
toWString (266) Value returned by TParser.Token (426) when a widestring was found in the input stream.
4.65 TPersistent
4.65.1 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 (305) interface for the benefit of descendant classes,
but does not call IFPObserved.FPONotifyObservers (306). Descendants such as TStrings (465) and
TCollection (356) and TCollectionItem (364) do use it.
See also: TComponent (366), IFPObserved (305), TStrings (465), TCollection (356), TCollectionItem (364)
426
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.65.4 TPersistent.Destroy
Synopsis: Destroys the TPersistent instance.
4.65.5 TPersistent.Assign
Synopsis: Assign the contents of one class to another.
Declaration: procedure Assign(Source: TPersistent); 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 (426) 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 assigned 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 statement will copy the contents of the Source class to the Destination class.
See also: AssignTo (426)
427
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.65.6 TPersistent.FPOAttachObserver
Synopsis: Add an observer to the list of observers.
Declaration: procedure FPOAttachObserver(AObserver: TObject)
Visibility: public
Description: FPOAttachObserver is part of the implementation of the IFPObserved (305) interface in TPersistent.
It adds a new observer to the list of observers. Calling this multiple times will add the observed object
multiple times to the list.
Errors: An EObserver exception may be raised if AObject does not implement the IFPObserver (306)
interface.
See also: IFPObserver (306), IFPObserved.FPOAttachObserver (305), IFPObserved (305)
4.65.7 TPersistent.FPODetachObserver
Synopsis: Remove an observer from the list of observers
Declaration: procedure FPODetachObserver(AObserver: TObject)
Visibility: public
Description: FPODetachObserver is part of the implementation of the IFPObserved (305) interface in TPersistent.
It removes the first found instance of the observer from the list of observers.
See also: IFPObserved (305), IFPObserved.FPODetachObserver (305), IFPObserver (306)
4.65.8 TPersistent.FPONotifyObservers
Synopsis: Notify observers of changes.
Declaration: procedure FPONotifyObservers(ASender: TObject;
AOperation: TFPObservedOperation;
Data: Pointer)
Visibility: public
Description: FPONotifyObservers can be called to notify observers of changes in the object. This method
simply passes on the parameters that it receives to all attached IFPObserver (306) interfaces.
TPersistent does not call FPONotifyObservers. It is implemented for the benefit of de-
scendant classes.
See also: IFPObserved (305), IFPObserved.FPONotifyObservers (306), IFPObserver (306)
4.65.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 in-
stance to the Classname of this instance, separated by a dot.
See also: TPersistent.GetOwner (426)
428
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.66 TProxyStream
4.66.1 Description
TProxyStream is a proxy class for the #rtl.types.IStream (1932) interface. It implements all
stream methods by relaying them to the IStream interface.
4.66.3 TProxyStream.Create
Synopsis: Create a new instance of the TProxyStream class.
Declaration: constructor Create(const Stream: IStream)
Visibility: public
Description: Create initializes a new instance of the TProxyStream class. It saves var stream for use in the
other methods.
See also: #rtl.types.IStream (1932)
4.66.4 TProxyStream.Read
Declaration: function Read(var Buffer; Count: LongInt) : LongInt; Override
Visibility: public
4.66.5 TProxyStream.Write
Declaration: function Write(const Buffer; Count: LongInt) : LongInt; Override
Visibility: public
4.66.6 TProxyStream.Seek
Declaration: function Seek(const Offset: Int64; Origin: TSeekOrigin) : Int64
; Override
Visibility: public
429
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.66.7 TProxyStream.Check
Synopsis: Check errors
4.67 TRawByteStringStream
4.67.1 Method overview
Page Method Description
430 Create
430 DataString
430 ReadString
430 WriteString
4.67.2 TRawByteStringStream.Create
Declaration: constructor Create(const aData: RawByteString); Overload
Visibility: public
4.67.3 TRawByteStringStream.DataString
Declaration: function DataString : RawByteString
Visibility: public
4.67.4 TRawByteStringStream.ReadString
Declaration: function ReadString(Count: LongInt) : RawByteString
Visibility: public
4.67.5 TRawByteStringStream.WriteString
Declaration: procedure WriteString(const AString: RawByteString)
Visibility: public
4.68 TReader
4.68.1 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
430
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
(316) 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
(449) call should be used.
431
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.68.4 TReader.Create
Synopsis: Creates a new reader class
Declaration: constructor Create(Stream: TStream; BufSize: Integer)
Visibility: public
Description: Creates a new reader class
4.68.5 TReader.Destroy
Synopsis: Destroys a reader class.
Declaration: destructor Destroy; Override
Visibility: public
4.68.6 TReader.FlushBuffer
Synopsis: Flush the buffer
Declaration: procedure FlushBuffer; Override
Visibility: public
Description: FlushBuffer flushes the buffer. It is provided for Delphi compatibility, and is not used in FPC.
See also: TFiler.FlushBuffer (385), TAbstractObjectReader.FlushBuffer (317)
432
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.68.7 TReader.BeginReferences
Synopsis: Initializes the component referencing mechanism.
4.68.8 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.68.9 TReader.DefineProperty
Synopsis: Reads a user-defined property from the stream.
Declaration: procedure DefineProperty(const Name: string; AReadData: TReaderProc;
WriteData: TWriterProc; HasData: Boolean)
; Override
Visibility: public
Description: Reads a user-defined property from the stream.
4.68.10 TReader.DefineBinaryProperty
Synopsis: Reads a user-defined binary property from the stream.
Declaration: procedure DefineBinaryProperty(const Name: string;
AReadData: TStreamProc;
WriteData: TStreamProc; HasData: Boolean)
; Override
Visibility: public
Description: Reads a user-defined binary property from the stream.
4.68.11 TReader.EndOfList
Synopsis: Returns true if the stream contains an end-of-list marker.
433
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.68.12 TReader.EndReferences
Synopsis: Finalizes the component referencing mechanism.
4.68.13 TReader.FixupReferences
Synopsis: Tries to resolve all unresolved component references.
Declaration: procedure FixupReferences
Visibility: public
4.68.14 TReader.NextValue
Synopsis: Returns the type of the next value.
Declaration: function NextValue : TValueType
Visibility: public
Description: Returns the type of the next value.
4.68.15 TReader.Read
Synopsis: Read raw data from stream
Declaration: procedure Read(var Buf; Count: LongInt); 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 (319), TBinaryObjectReader.Read (339)
4.68.16 TReader.ReadBoolean
Synopsis: Reads a boolean from the stream.
Declaration: function ReadBoolean : Boolean
Visibility: public
434
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.68.17 TReader.ReadChar
Synopsis: Reads a character from the stream.
4.68.18 TReader.ReadWideChar
Synopsis: Read widechar from the stream
Declaration: function ReadWideChar : WideChar
Visibility: public
Description: TReader.ReadWideChar reads a widechar from the stream. This actually reads a widestring
and returns the first character.
See also: TReader.ReadWideString (439), TWriter.WriteWideChar (513)
4.68.19 TReader.ReadUnicodeChar
Synopsis: Read Unicode character
Errors: If the string has a length different from 1, an EReadError exception will occur.
See also: TReader.ReadUnicodeString (439)
4.68.20 TReader.ReadCollection
Synopsis: Reads a collection from the stream.
4.68.21 TReader.ReadComponent
Synopsis: Starts reading a component from the stream.
Declaration: function ReadComponent(Component: TComponent) : TComponent
Visibility: public
Description: Starts reading a component from the stream.
435
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.68.22 TReader.ReadComponents
Synopsis: Starts reading child components from the stream.
4.68.23 TReader.ReadFloat
Synopsis: Reads a float from the stream.
Declaration: function ReadFloat : Extended
Visibility: public
4.68.24 TReader.ReadSingle
Synopsis: Reads a single-type real from the stream.
Declaration: function ReadSingle : Single
Visibility: public
Description: Reads a single-type real from the stream.
4.68.25 TReader.ReadDate
Synopsis: Reads a date from the stream
Declaration: function ReadDate : TDateTime
Visibility: public
Description: Reads a date from the stream
4.68.26 TReader.ReadCurrency
Synopsis: Read a currency value from the stream.
436
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.68.27 TReader.ReadIdent
Synopsis: Reads an identifier from the stream.
4.68.28 TReader.ReadInteger
Synopsis: Reads an integer from the stream
Declaration: function ReadInteger : LongInt
Visibility: public
4.68.29 TReader.ReadInt64
Synopsis: Reads a 64-bit integer from the stream.
Declaration: function ReadInt64 : Int64
Visibility: public
4.68.30 TReader.ReadSet
Synopsis: Read a set value from the stream
Declaration: function ReadSet(EnumType: Pointer) : Integer
Visibility: public
Description: ReadSet reads a set of elements with type EnumType and returns them as an integer where each
element is encoded in a bit of the integer. Thus, at most an enumerated type with 32 elements can be
read with this function.
4.68.31 TReader.ReadListBegin
Synopsis: Checks for the beginning of a list.
437
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.68.32 TReader.ReadListEnd
Synopsis: Checks for the end of a list.
Declaration: procedure ReadListEnd
Visibility: public
Description: Checks for the end of a list.
4.68.33 TReader.ReadRootComponent
Synopsis: Starts reading a root component.
Declaration: function ReadRootComponent(ARoot: TComponent) : TComponent
Visibility: public
Description: Starts reading a root component.
4.68.34 TReader.ReadVariant
Synopsis: Read a variant from the stream
Declaration: function ReadVariant : Variant
Visibility: public
Description: ReadVariant reads the next value from the stream and returns it as a variant. No variant array
can be read from the stream, only single values.
Errors: If no variant manager is installed, the function will raise an EReadError exception. If the next
value is not a simple value, again an EReadError exception is raised. exception is
See also: TBinaryObjectWriter.WriteVariant (349)
4.68.35 TReader.ReadSignature
Synopsis: Read stream signature from the stream
Declaration: procedure ReadSignature
Visibility: public
Description: ReadSignature is called when starting to read a root component from a stream. Some streams
contain a signature (header) to detect whether the stream contains correct data.
Errors: If the stream does not start with the correct signature, an EReadError (302) exception will be raised.
See also: TAbstractObjectReader.ReadSignature (323), TAbstractObjectWriter.WriteSignature (325)
4.68.36 TReader.ReadString
Synopsis: Reads a string from the stream.
Declaration: function ReadString : string
Visibility: public
Description: Reads a string from the stream.
438
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.68.37 TReader.ReadWideString
Synopsis: Read a WideString value from the stream.
4.68.38 TReader.ReadUnicodeString
Synopsis: Read a UnicodeString value from the stream
Declaration: function ReadUnicodeString : UnicodeString
Visibility: public
Description: ReadUnicodeString reads a UnicodeString string from the stream. The stream can contain
a string from any type, it will be converted to UniCodeString.
See also: TAbstractObjectReader.ReadUnicodeString (324), TWriter.WriteUnicodeString (516)
4.68.39 TReader.ReadValue
Synopsis: Reads the next value type from the stream.
Declaration: function ReadValue : TValueType
Visibility: public
4.68.40 TReader.CopyValue
Synopsis: Copy a value to a writer.
Declaration: procedure CopyValue(Writer: TWriter)
Visibility: public
Description: CopyValue reads the next value from the reader stream, and writes it to the passed Writer.
4.68.41 TReader.Driver
Synopsis: The driver in use for streaming the data.
Declaration: Property Driver : TAbstractObjectReader
Visibility: public
Access: Read
Description: The driver in use for streaming the data.
439
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.68.42 TReader.Owner
Synopsis: Owner of the component being read
4.68.43 TReader.Parent
Synopsis: Parent of the component being read.
Declaration: Property Parent : TComponent
Visibility: public
Access: Read,Write
Description: Parent of the component being read.
4.68.44 TReader.OnError
Synopsis: Handler called when an error occurs.
4.68.45 TReader.OnPropertyNotFound
Synopsis: Handler for treating missing properties.
Declaration: Property OnPropertyNotFound : TPropertyNotFoundEvent
Visibility: public
Access: Read,Write
Description: OnPropertyNotFound can be used to take appropriate action when a property is read from a
stream and no such property is found in the RTTI information of the Instance that is being read from
the stream. It can be set at runtime, or at designtime by an IDE.
For more information about the meaning of the various arguments to the event handler, see TProper-
tyNotFoundEvent (276).
See also: TPropertyNotFoundEvent (276), TReader.OnSetMethodProperty (441), TReader.OnReadStringProperty
(442)
440
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.68.46 TReader.OnFindMethod
Synopsis: Handler to find or change a method address.
Declaration: Property OnFindMethod : TFindMethodEvent
Visibility: public
Access: Read,Write
Description: Handler to find or change a method address.
4.68.47 TReader.OnSetMethodProperty
Synopsis: Handler for setting method properties.
Declaration: Property OnSetMethodProperty : TSetMethodPropertyEvent
Visibility: public
Access: Read,Write
Description: OnSetMethodProperty can be set to handle the setting of method properties. This handler can
be used by an IDE to prevent methods from actually being assigned when an object is being streamed
in the designer.
See also: TReader.OnReadStringProperty (442), TReader.OnPropertyNotFound (440)
4.68.48 TReader.OnSetName
Synopsis: Handler called when setting a component name.
Declaration: Property OnSetName : TSetNameEvent
Visibility: public
Access: Read,Write
Description: Handler called when setting a component name.
4.68.49 TReader.OnReferenceName
Synopsis: Handler called when another component is referenced.
Declaration: Property OnReferenceName : TReferenceNameEvent
Visibility: public
Access: Read,Write
Description: Handler called when another component is referenced.
4.68.50 TReader.OnAncestorNotFound
Synopsis: Handler called when the ancestor component cannot be found.
Declaration: Property OnAncestorNotFound : TAncestorNotFoundEvent
Visibility: public
Access: Read,Write
Description: Handler called when the ancestor component cannot be found.
441
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.68.51 TReader.OnCreateComponent
Synopsis: Handler called when a component needs to be created.
Declaration: Property OnCreateComponent : TCreateComponentEvent
Visibility: public
Access: Read,Write
Description: Handler called when a component needs to be created.
4.68.52 TReader.OnFindComponentClass
Synopsis: Handler called when a component class reference needs to be found.
Declaration: Property OnFindComponentClass : TFindComponentClassEvent
Visibility: public
Access: Read,Write
Description: Handler called when a component class reference needs to be found.
4.68.53 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 (276) for a description of the various parameters.
See also: TReader.OnPropertyNotFound (440), TReader.OnSetMethodProperty (441), TReadWriteStringProp-
ertyEvent (276)
4.69 TRecall
4.69.1 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 (443) 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 (444)
can be called.
442
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
See also: TRecall.Create (443), TRecall.Destroy (443), TRecall.Forget (444), TRecall.Store (443), TPersis-
tent.Assign (427)
4.69.4 TRecall.Create
Synopsis: Creates a new instance of TRecall.
Declaration: constructor Create(AStorage: TPersistent; AReference: TPersistent)
Visibility: public
Description: Create creates a new instance of TRecall and initializes the Reference and Storage instances. It
calls Store (443) to assign the reference object properties to the storage instance.
See also: TRecall.Store (443), TRecall.Destroy (443)
4.69.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 (444) instance is still valid. If the reference pointer
was invalidated, call TRecall.Forget (444) to clear the reference instance.
4.69.6 TRecall.Store
Synopsis: Assigns the reference instance to the storage instance.
Declaration: procedure Store
Visibility: public
443
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
Description: Store assigns the reference instance to the storage instance. This will only work if the two classes
can be assigned to each other.
This method can be used to refresh the storage.
Errors: Store does not check whether the reference (444) instance is still valid. If the reference pointer
was invalidated, call TRecall.Forget (444) to clear the reference instance.
4.69.7 TRecall.Forget
Synopsis: Clear the reference property.
Declaration: procedure Forget
Visibility: public
Description: Forget sets the Reference (444) property to Nil. When the TRecall instance is destroyed, the
reference instance will not be restored.
Note that after a call to Forget, a call to Store (443) has no effect.
Errors: None.
4.69.8 TRecall.Reference
Synopsis: The reference object.
Declaration: Property Reference : TPersistent
Visibility: public
Access: Read
Description: Reference is the instance of the reference object. Do not free the reference directly. Call Forget
(444) to clear the reference and then free the reference object.
4.70 TResourceStream
4.70.1 Description
Stream that reads its data from a resource object.
444
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.70.3 TResourceStream.Create
Synopsis: Creates a new instance of a resource stream.
4.70.4 TResourceStream.CreateFromID
Synopsis: Creates a new instance of a resource stream with a resource
Declaration: constructor CreateFromID(Instance: TFPResourceHMODULE; ResID: Integer;
ResType: PChar)
Visibility: public
Description: The resource is loaded from the loaded module (identified by the handle Instance), identifier
ResID and type ResType.
4.70.5 TResourceStream.Destroy
Synopsis: Destroys the instance of the resource stream.
4.71 TStream
4.71.1 Description
TStream is the base class for all streaming classes. It defines methods for reading (446), writing
(447) from and to streams, as well as functions to determine the size of the stream as well as the
current position of the stream.
Descendant classes such as TMemoryStream (416) or TFileStream (386) then override these methods
to write streams to memory or file.
445
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.71.4 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; Overload
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 (448) instead.
As implemented in TStream, Read does nothing but raises an EStreamError (303) exception to
indicate that reading is not supported. Descendant classes that allow reading must override this
method to do the actual reading.
Descendant classes should (if they don’t explicitly raise an exception) return a positive value (>=0),
where zero indicates an error.
446
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
Errors: In case a descendant class does not allow reading from the stream, an exception is raised.
See also: TStream.Write (447), TStream.ReadBuffer (448)
4.71.5 TStream.Write
Synopsis: Writes data from a buffer to the stream and returns the number of bytes written.
4.71.6 TStream.Seek
Synopsis: Sets the current position in the stream
Declaration: function Seek(Offset: LongInt; Origin: Word) : LongInt; Virtual
; Overload
function Seek(const Offset: Int64; Origin: TSeekOrigin) : Int64
; Virtual; Overload
Visibility: public
Description: Seek sets the position of the stream to Offset bytes from Origin. There is a 32-bit variant
of this function and a 64-bit variant. The difference can be made by choosing the correct Offset
parameter: the integer-typed parameter selects the 32-bit variant, the parameter of type TSeekOrigin
(277) selects the 64-bit variant of the function.
The Origin parameter for the 32-bit version can have one of the following values:
Table 4.30:
Constant Meaning
soFromBeginning Set the position relative to the start of the stream.
soFromCurrent Set the position relative to the current position in the stream.
soFromEnd Set the position relative to the end of the stream.
447
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
The Origin parameter for the 64-bit version has one of the following values:
Table 4.31:
Value Meaning
soBeginning Offset is interpreted relative to the start of the stream.
soCurrent Offset is interpreted relative to the current position in the stream.
soEnd 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 descendant 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 descendant 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 (454)
4.71.7 TStream.ReadBuffer
Synopsis: Reads data from the stream to a buffer
Declaration: procedure ReadBuffer(var Buffer; Count: LongInt)
Visibility: public
Description: ReadBuffer reads Count bytes of the stream into Buffer. If the stream does not contain
Count bytes, then an exception is raised.
ReadBuffer should be used to read in a fixed number of bytes, such as when reading structures or
the content of variables. If the number of bytes is not determined, use TStream.Read (446) instead.
ReadBuffer uses Read internally to do the actual reading.
Errors: If the stream does not allow to read Count bytes, then an exception is raised.
See also: TStream.Read (446), TStream.WriteBuffer (448)
4.71.8 TStream.WriteBuffer
Synopsis: Writes data from a buffer to the stream
Declaration: procedure WriteBuffer(const Buffer; Count: LongInt)
Visibility: public
Description: WriteBuffer writes Count bytes to the stream from Buffer. If the stream does not allow
Count bytes to be written, then an exception is raised.
WriteBuffer should be used to write a fixed number of bytes, such as when writing structures or
the content of variables. If the number of bytes is not determined, use TStream.Write (447) instead.
WriteBuffer uses Write internally to do the actual writing.
Errors: If the stream does not allow to write Count bytes, then an exception is raised.
See also: TStream.Write (447), TStream.ReadBuffer (448)
448
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.71.9 TStream.CopyFrom
Synopsis: Copy data from one stream to another
4.71.10 TStream.ReadComponent
Synopsis: Reads component data from a stream
Declaration: function ReadComponent(Instance: TComponent) : TComponent
Visibility: public
Description: ReadComponent reads a component state from the stream and transfers this state to Instance.
If Instance is nil, then it is created first based on the type stored in the stream. ReadComponent
returns the component as it is read from the stream.
ReadComponent simply creates a TReader (430) object and calls its ReadRootComponent (438)
method.
Errors: If an error occurs during the reading of the component, an EFilerError (301) exception is raised.
See also: TStream.WriteComponent (450), TStream.ReadComponentRes (449), TReader.ReadRootComponent
(438)
4.71.11 TStream.ReadComponentRes
Synopsis: Reads component data and resource header from a stream
Declaration: function ReadComponentRes(Instance: TComponent) : TComponent
Visibility: public
Description: ReadComponentRes reads a resource header from the stream, and then calls ReadComponent
(449) to read the component state from the stream into Instance.
This method is usually called by the global streaming method when instantiating forms and datamod-
ules as created by an IDE. It should be used mainly on Windows, to store components in Windows
resources.
Errors: If an error occurs during the reading of the component, an EFilerError (301) exception is raised.
See also: TStream.ReadComponent (449), TStream.WriteComponentRes (450)
449
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.71.12 TStream.WriteComponent
Synopsis: Write component data to the stream
4.71.13 TStream.WriteComponentRes
Synopsis: Write resource header and component data to a stream
Declaration: procedure WriteComponentRes(const ResName: string; Instance: TComponent)
Visibility: public
Description: WriteComponentRes writes a ResName resource header to the stream and then calls Write-
Component (450) to write the published properties of Instance to the stream.
This method is intended for use by an IDE that can use it to store forms or datamodules as designed
in a Windows resource stream.
See also: TStream.WriteComponent (450), TStream.ReadComponentRes (449)
4.71.14 TStream.WriteDescendent
Synopsis: Write descendent of a component
Declaration: procedure WriteDescendent(Instance: TComponent; Ancestor: TComponent)
Visibility: public
Description: WriteDescendent will create a TWriter (510) writer class and write Instance as a descen-
dent of Ancestor using the writer. This is used to create diff streams: only the properties where
Instance differs from Ancestor are written to the stream.
See also: TWriter.WriteDescendent (514)
4.71.15 TStream.WriteDescendentRes
Synopsis: Write descendent of a component as resource
450
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.71.16 TStream.WriteResourceHeader
Synopsis: Write resource header to the stream
Declaration: procedure WriteResourceHeader(const ResName: string;
var FixupInfo: LongInt)
Visibility: public
Description: WriteResourceHeader writes a resource-file header for a resource called ResName. It returns
in FixupInfo the argument that should be passed on to TStream.FixupResourceHeader (451).
WriteResourceHeader should not be used directly. It is called by the TStream.WriteComponentRes
(450) and TStream.WriteDescendantRes (445) methods.
See also: TStream.FixupResourceHeader (451), TStream.WriteComponentRes (450), TStream.WriteDescendantRes
(445)
4.71.17 TStream.FixupResourceHeader
Synopsis: Not implemented in FPC
Declaration: procedure FixupResourceHeader(FixupInfo: LongInt)
Visibility: public
Description: FixupResourceHeader is used to write the size of the resource after a component was written
to stream. The size is determined from the current position, and it is written at position FixupInfo.
After that the current position is restored.
FixupResourceHeader should never be called directly; it is handled by the streaming system.
See also: TStream.WriteResourceHeader (451), TStream.WriteComponentRes (450), TStream.WriteDescendantRes
(445)
4.71.18 TStream.ReadResHeader
Synopsis: Read a resource header from the stream.
Declaration: procedure ReadResHeader
Visibility: public
Description: ReadResourceHeader reads a resource file header from the stream. It positions the stream just
beyond the header.
ReadResourceHeader should not be called directly, it is called by the streaming system when
needed.
Errors: If the resource header is invalid an EInvalidImage (301) exception is raised.
See also: TStream.ReadComponentRes (449), EInvalidImage (301)
4.71.19 TStream.ReadByte
Synopsis: Read a byte from the stream and return its value.
Declaration: function ReadByte : Byte
Visibility: public
451
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
Description: ReadByte reads one byte from the stream and returns its value.
Errors: If the byte cannot be read, a EStreamError (303) exception will be raised. This is a utility function
which simply calls the Read (446) function.
See also: TStream.Read (446), TStream.WriteByte (453), TStream.ReadWord (452), TStream.ReadDWord
(452), TStream.ReadAnsiString (453)
4.71.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 simply calls the Read (446) function.
Errors: If the word cannot be read, a EStreamError (303) exception will be raised.
See also: TStream.Read (446), TStream.WriteWord (453), TStream.ReadByte (451), TStream.ReadDWord
(452), TStream.ReadAnsiString (453)
4.71.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 (446) function.
Errors: If the DWord cannot be read, a EStreamError (303) exception will be raised.
4.71.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 it’s value.
Errors: If not enough bytes are available on the stream, an EStreamError (303) exception will be raised.
452
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.71.23 TStream.ReadAnsiString
Synopsis: Read an ansistring from the stream and return its value.
4.71.24 TStream.WriteByte
Synopsis: Write a byte to the stream.
Declaration: procedure WriteByte(b: Byte)
Visibility: public
Description: WriteByte writes the byte B to the stream. This is a utility function which simply calls the Write
(447) function. The byte can be read from the stream using the ReadByte (451) function.
Errors: If an error occurs when attempting to write, an EStreamError (303) exception will be raised.
See also: TStream.Write (447), TStream.ReadByte (451), TStream.WriteWord (453), TStream.WriteDWord
(453), TStream.WriteAnsiString (454)
4.71.25 TStream.WriteWord
Synopsis: Write a word to the stream.
Declaration: procedure WriteWord(w: Word)
Visibility: public
Description: WriteWord writes the word W (i.e. 2 bytes) to the stream. This is a utility function which simply
calls the Write (447) function. The word can be read from the stream using the ReadWord (452)
function.
Errors: If an error occurs when attempting to write, an EStreamError (303) exception will be raised.
4.71.26 TStream.WriteDWord
Synopsis: Write a DWord to the stream.
453
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
Description: WriteDWord writes the DWord D (i.e. 4 bytes) to the stream. This is a utility function which simply
calls the Write (447) function. The DWord can be read from the stream using the ReadDWord (452)
function.
Errors: If an error occurs when attempting to write, an EStreamError (303) exception will be raised.
See also: TStream.Write (447), TStream.ReadDWord (452), TStream.WriteByte (453), TStream.WriteWord
(453), TStream.WriteAnsiString (454)
4.71.27 TStream.WriteQWord
Synopsis: Write a QWord value to the stream
Declaration: procedure WriteQWord(q: QWord)
Visibility: public
Description: WriteQWord writes the word W (i.e. 8 bytes) to the stream. This is a utility function which simply
calls the Write (447) function. The word can be read from the stream using the ReadQWord (452)
function.
Errors: If an error occurs when attempting to write, an EStreamError (303) exception will be raised.
See also: TStream.Write (447), TStream.ReadByte (451), TStream.WriteWord (453), TStream.WriteDWord
(453), TStream.WriteAnsiString (454)
4.71.28 TStream.WriteAnsiString
Synopsis: Write an ansistring to the stream.
Declaration: procedure WriteAnsiString(const S: string); Virtual
Visibility: public
Description: WriteAnsiString writes the AnsiString S (i.e. 4 bytes) to the stream. This is a utility function
which simply calls the Write (447) function. The ansistring is written as a 4 byte length specifier,
followed by the ansistring’s content. The ansistring can be read from the stream using the ReadAn-
siString (453) function.
Errors: If an error occurs when attempting to write, an EStreamError (303) exception will be raised.
See also: TStream.Write (447), TStream.ReadAnsiString (453), TStream.WriteByte (453), TStream.WriteWord
(453), TStream.WriteDWord (453)
4.71.29 TStream.Position
Synopsis: The current position in the stream.
Declaration: Property Position : Int64
Visibility: public
Access: Read,Write
Description: Position can be read to determine the current position in the stream. It can be written to set the
(absolute) position in the stream. The position is zero-based, so to set the position at the beginning
of the stream, the position must be set to zero.
Remark Not all TStream descendants support setting the position in the stream, so this should be used with
care.
454
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
Errors: Some descendants may raise an EStreamError (303) exception if they do not support setting the
stream position.
See also: TStream.Size (455), TStream.Seek (447)
4.71.30 TStream.Size
Synopsis: The current size of the stream.
Description: Size can be read to determine the stream size or to set the stream size.
Remark Not all descendants of TStream support getting or setting the stream size; they may raise an
exception if the Size property is read or set.
See also: TStream.Position (454), TStream.Seek (447)
4.72 TStreamAdapter
4.72.1 Description
Implements IStream for TStream (445) descendants
455
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.72.5 TStreamAdapter.Create
Synopsis: Create a new instance of TStreamAdapter
Declaration: constructor Create(Stream: TStream; Ownership: TStreamOwnership)
Visibility: public
Description: Create creates a new instance of TStreamAdaptor. It initializes TStreamAdapter.Stream (459)
with Stream and initializes StreamOwnerShip (459) with Ownership.
TStreamAdapter is an abstract class: descendants must be created that implement the actual
functionality.
See also: StreamOwnerShip (459), TStreamAdapter.Stream (459)
4.72.6 TStreamAdapter.Destroy
Synopsis: Free the TStreamAdapter instance
Declaration: destructor 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.72.7 TStreamAdapter.Read
Synopsis: Read from the stream.
Declaration: function Read(pv: Pointer; cb: DWORD; pcbRead: PDWord) : HRESULT
; Virtual
Visibility: public
Description: Read implements #rtl.types.ISequentialStream.Read (1932) 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 (1932)
4.72.8 TStreamAdapter.Write
Synopsis: Write to the stream
Declaration: function Write(pv: Pointer; cb: DWORD; pcbWritten: PDWord) : HRESULT
; Virtual
Visibility: public
456
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.72.9 TStreamAdapter.Seek
Synopsis: Set the stream position
Declaration: function Seek(dlibMove: Largeint; dwOrigin: DWORD;
out libNewPosition: LargeUint) : HRESULT; Virtual
Visibility: public
Description: Seek implements #rtl.types.IStream.Seek (1933) 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 (1933)
4.72.10 TStreamAdapter.SetSize
Synopsis: Set the stream size
Declaration: function SetSize(libNewSize: LargeUint) : HRESULT; Virtual
Visibility: public
Description: SetSize implements #rtl.types.IStream.Setsize (1933) 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 (1933)
4.72.11 TStreamAdapter.CopyTo
Synopsis: Copy data to destination stream
Declaration: function CopyTo(stm: IStream; cb: LargeUint; out cbRead: LargeUint;
out cbWritten: LargeUint) : HRESULT; Virtual
Visibility: public
Description: CopyTo implements #rtl.types.IStream.CopyTo (1933).
Errors: This function must be overridden and will raise a runerror 217 when called directly.
457
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.72.12 TStreamAdapter.Commit
Synopsis: Commit data to the stream
Errors: This function must be overridden and will raise a runerror 217 when called directly.
See also: #rtl.types.IStream.Commit (1934)
4.72.13 TStreamAdapter.Revert
Synopsis: Revert operations on the stream
Declaration: function Revert : HRESULT; Virtual
Visibility: public
Description: Revert implements #rtl.types.IStream.Revert (1934).
Errors: This function must be overridden and will raise a runerror 217 when called directly.
4.72.14 TStreamAdapter.LockRegion
Synopsis: Lock a region of the stream
Declaration: function LockRegion(libOffset: LargeUint; cb: LargeUint;
dwLockType: DWORD) : HRESULT; Virtual
Visibility: public
Description: LockRegion implements #rtl.types.IStream.LockRegion (1934).
Errors: This function must be overridden and will raise a runerror 217 when called directly.
4.72.15 TStreamAdapter.UnlockRegion
Synopsis: Unlock a region of the stream
Declaration: function UnlockRegion(libOffset: LargeUint; cb: LargeUint;
dwLockType: DWORD) : HRESULT; Virtual
Visibility: public
Description: UnLockRegion implements #rtl.types.IStream.UnLockRegion (1934).
Errors: This function must be overridden and will raise a runerror 217 when called directly.
See also: #rtl.types.IStream.UnLockRegion (1934)
458
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.72.16 TStreamAdapter.Stat
Synopsis: Return statistical data about the stream
Errors: This function must be overridden and will raise a runerror 217 when called directly.
See also: #rtl.types.IStream.Stat (1935)
4.72.17 TStreamAdapter.Clone
Synopsis: Clone the stream
Errors: This function must be overridden and will raise a runerror 217 when called directly.
See also: #rtl.types.IStream.Clone (1935)
4.72.18 TStreamAdapter.Stream
Synopsis: Stream on which adaptor works
Declaration: Property Stream : TStream
Visibility: public
Access: Read
Description: This is the stream on which the adaptor works. It was specified at creation.
4.72.19 TStreamAdapter.StreamOwnership
Synopsis: Determines what happens with the stream when the adaptor is freed
Declaration: Property StreamOwnership : TStreamOwnership
Visibility: public
Access: Read,Write
459
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.73 TStringList
4.73.1 Description
TStringList is a descendant class of TStrings (465) that implements all of the abstract methods
introduced there. It also introduces some additional methods:
4.73.4 TStringList.Destroy
Synopsis: Destroys the stringlist.
Declaration: destructor 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 responsibility of the caller
to destroy all objects associated with strings in the list.
460
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.73.5 TStringList.Add
Synopsis: Implements the TStrings.Add (468) function.
4.73.6 TStringList.Clear
Synopsis: Implements the TStrings.Clear (471) function.
Declaration: procedure Clear; Override
Visibility: public
Description: Implements the TStrings.Clear (471) function.
4.73.7 TStringList.Delete
Synopsis: Implements the TStrings.Delete (471) function.
4.73.8 TStringList.Exchange
Synopsis: Implements the TStrings.Exchange (472) function.
Declaration: procedure Exchange(Index1: Integer; Index2: Integer); Override
Visibility: public
Description: Exchange will exchange two items in the list as described in TStrings.Exchange (472).
Remark Exchange will not check whether the list is 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 (463), TStrings.Exchange (472)
461
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.73.9 TStringList.Find
Synopsis: Locates the index for a given string in sorted lists.
Declaration: function Find(const S: string; out Index: Integer) : Boolean; 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 (462) instead.
2.Find uses a binary search method to locate the string
4.73.10 TStringList.IndexOf
Synopsis: Overrides the TStrings.IndexOf (474) property.
Declaration: function IndexOf(const S: string) : Integer; Override
Visibility: public
Description: IndexOf overrides the ancestor method TStrings.indexOf (474). 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 (474), TStringList.Find (462)
4.73.11 TStringList.Insert
Synopsis: Overrides the TStrings.Insert (475) method.
Declaration: procedure Insert(Index: Integer; const S: string); Override
Visibility: public
Description: Insert will insert the string S at position Index in the list. If the list is sorted, an EStringListError
(303) 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 (303) exception will be raised.
See also: TStringList.Add (461), TStrings.Insert (475), TStrings.InsertObject (475)
4.73.12 TStringList.Sort
Synopsis: Sorts the strings in the list.
Declaration: procedure Sort; Virtual
Visibility: public
Description: Sort will sort the strings in the list using the quicksort algorithm. If the list has its TStringList.Sorted
(463) property set to True then nothing will be done.
See also: TStringList.Sorted (463)
462
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.73.13 TStringList.CustomSort
Synopsis: Sort the stringlist using a custom sort algorithm
Declaration: procedure CustomSort(CompareFn: TStringListSortCompare); 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 (463), TStringList.Sort (462)
4.73.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.32:
dupIgnore Duplicate values will not be added to the list, but no error will be triggered.
dupError If an attempt is made to add a duplicate value to the list, an EStringListError (303) exception is raised.
dupAccept Duplicate values can be added to the list.
4.73.15 TStringList.Sorted
Synopsis: Determines whether the list is sorted or not.
Declaration: Property Sorted : Boolean
Visibility: public
Access: Read,Write
Description: Sorted can be set to True in order to cause the list of strings to be sorted. Further additions to the
list will be inserted at the correct position so the list remains sorted at all times. Setting the property
to False has no immediate effect, but will allow strings to be inserted at any position.
Remark
1.When Sorted is True, TStringList.Insert (462) cannot be used. For sorted lists, TStringList.Add
(461) should be used instead.
2.If Sorted is True, the TStringList.Duplicates (463) setting has effect. This setting is ignored
when Sorted is False.
See also: TStringList.Sort (462), TStringList.Duplicates (463), TStringList.Add (461), TstringList.Insert (462)
463
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.73.16 TStringList.CaseSensitive
Synopsis: Indicates whether comparing strings happens in a case sensitive manner.
Description: CaseSensitive indicates how string values are compared: When True this happens case sensi-
tively, and when False, the comparison is done in a case insensitive manner.
This property influences IndexOf (474), Find (462), IndexOfName (474) and Sort (462).
See also: IndexOf (474), Find (462), IndexOfName (474), Sort (462)
4.73.17 TStringList.OnChange
Synopsis: Event triggered after the list was modified.
Declaration: Property OnChange : TNotifyEvent
Visibility: public
Access: Read,Write
Description: OnChange can be assigned to respond to changes that have occurred in the list. The handler is
called whenever strings are added, moved, modified or deleted from the list.
The Onchange event is triggered after the modification took place. When the modification is about
to happen, an TstringList.OnChanging (464) event occurs.
4.73.18 TStringList.OnChanging
Synopsis: Event triggered when the list is about to be modified.
Declaration: Property OnChanging : TNotifyEvent
Visibility: public
Access: Read,Write
Description: OnChanging can be assigned to respond to changes that will occurred in the list. The handler is
called whenever strings will be added, moved, modified or deleted from the list.
The Onchanging event is triggered before the modification will take place. When the modification
has happened, an TstringList.OnChange (464) event occurs.
See also: TStringList.OnChange (464)
464
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.73.19 TStringList.OwnsObjects
Synopsis: Determines whether the stringlist owns it’s objects or not.
Description: OwnsObjects can be set to true to let the stringlist instance own the objects in the list: if an
element is removed from the list, the associated object (if there is any) will be freed as well. The
same is true if the list is cleared or destroyed.
See also: TStrings.Objects (483)
4.73.20 TStringList.SortStyle
Synopsis: Sort style for strings
Declaration: Property SortStyle : TStringsSortStyle
Visibility: public
Access: Read,Write
Description: SortStyle sets the sort style for the TStringList instance. Setting it to sslAuto will keep
the list sorted automatically at all times.
Find (462) (and hence IndexOf (474)) will use a binary search if SortStyle differs from sslNone.
if SortStyle is sslNone, then it will raise an exception.
4.74 TStrings
4.74.1 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 configu-
ration files.
An instance of TStrings is never created directly, instead a descendant class such as TStringList
(460) should be created. This is because TStrings is an abstract class which does not imple-
ment all methods; TStrings also doesn’t store any strings, this is the functionality introduced in
descendants such as TStringList (460).
TStrings implements the IFPObserved (305) interface: when the stringlist is changed, a ooChanged
notification is sent to all observers.
465
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
466
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.74.4 TStrings.Create
Synopsis: Initializ a new TStrings instance
Declaration: constructor Create
Visibility: public
Description: Create initializes the codepage variables of a new TStrings instance. Note that TStrings is
467
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
an abstract class, you must always instantiate a descendent such as TStringList (460)
Errors: Only an EOutOfMemory exception can occur.
See also: TStringList (460)
4.74.5 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.74.6 TStrings.ToObjectArray
Declaration: function ToObjectArray(aStart: Integer; aEnd: Integer) : TObjectDynArray
; Overload
function ToObjectArray : TObjectDynArray; Overload
Visibility: public
4.74.7 TStrings.ToStringArray
Declaration: function ToStringArray(aStart: Integer; aEnd: Integer) : TStringDynArray
; Overload
function ToStringArray : TStringDynArray; Overload
Visibility: public
4.74.8 TStrings.Add
Synopsis: Add a string to the list
Declaration: function Add(const S: string) : Integer; Virtual; Overload
function Add(const Fmt: string; const Args: Array of const) : Integer
; Overload
Visibility: public
Description: Add adds S at the end of the list and returns the index of S in the list (which should equal Tstrings.Count
(480)
See also: TStrings.Objects (483), TStrings.AddObject (468), TStrings.Insert (475), TStrings.Delete (471),
TStrings.Strings (485), TStrings.Count (480)
4.74.9 TStrings.AddObject
Synopsis: Add a string and associated object to the list.
Declaration: function AddObject(const S: string; AObject: TObject) : Integer
; Virtual; Overload
function AddObject(const Fmt: string; Args: Array of const;
AObject: TObject) : Integer; Overload
468
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
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 when 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 (468), TStrings.Strings (485), TStrings.Objects (483), TStrings.InsertObject (475)
4.74.10 TStrings.AddPair
Synopsis: Add a name-value pair
Declaration: function AddPair(const AName: string; const AValue: string) : TStrings
; Overload
function AddPair(const AName: string; const AValue: string;
AObject: TObject) : TStrings; Overload
Visibility: public
Description: AddPair adds a Name=Value pair with the AName and AValue parameters, optionally with
object AObject. It uses the correct NameValueSeparator (264) character to do so.
AddPair does not test whether aName already exists, so it is possible to add duplicate names.
Errors: None.
See also: TStrings.GetNameValue (473), TStrings.NameValueSeparator (483), TStrings.Add (468), TStrings.AddObject
(468)
4.74.11 TStrings.AddStrings
Synopsis: Add contents of another stringlist to this list.
Declaration: procedure AddStrings(TheStrings: TStrings); Virtual; Overload
procedure AddStrings(TheStrings: TStrings; ClearFirst: Boolean)
; Overload
procedure AddStrings(const TheStrings: Array of string); Virtual
; Overload
procedure AddStrings(const TheStrings: Array of string;
ClearFirst: Boolean); Overload
Visibility: public
Description: AddStrings adds the contents of TheStrings to the stringlist. Any associated objects are
added as well.
See also: TStrings.Add (468), TStrings.Assign (470)
4.74.12 TStrings.SetStrings
Declaration: procedure SetStrings(TheStrings: TStrings); Virtual; Overload
procedure SetStrings(TheStrings: Array of string); Virtual; Overload
Visibility: public
469
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.74.13 TStrings.AddText
Synopsis: Add text to the string list.
4.74.14 TStrings.AddCommaText
Declaration: procedure AddCommaText(const S: string)
Visibility: public
4.74.15 TStrings.AddDelimitedtext
Declaration: procedure AddDelimitedText(const S: string; ADelimiter: Char;
AStrictDelimiter: Boolean); Overload
procedure AddDelimitedtext(const S: string); Overload
Visibility: public
4.74.16 TStrings.Append
Synopsis: Add a string to the list.
Declaration: procedure Append(const S: string)
Visibility: public
Description: Append does the same as TStrings.Add (468), only it does not return the index of the inserted
string.
See also: TStrings.Add (468)
4.74.17 TStrings.Assign
Synopsis: Assign the contents of another stringlist to this one.
470
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.74.18 TStrings.BeginUpdate
Synopsis: Mark the beginning of an update batch.
Declaration: procedure BeginUpdate
Visibility: public
Description: BeginUpdate increases the update count by one. It is advisable to call BeginUpdate before
lengthy operations on the stringlist. At the end of these operation, TStrings.EndUpdate (472) should
be called to mark the end of the operation. Descendant classes may use this information to perform
optimizations. e.g. updating the screen only once after many strings were added to the list.
All TStrings methods that modify the string list call BeginUpdate before the actual operation,
and call endUpdate when the operation is finished. Descendant classes should also call these
methods when modifying the string list.
Remark Always put the corresponding call to TStrings.EndUpdate (472) in the context of a Finally block,
to ensure that the update count is always decreased at the end of the operation, even if an exception
occurred:
With MyStrings do
try
BeginUpdate;
// Some lengthy operation.
Finally
EndUpdate
end;
4.74.19 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 (480) is zero.
Since it is an abstract method, TStrings itself does not implement Clear. Descendant classes
such as TStringList (460) implement this method.
See also: TStrings.Objects (483), TStrings.Strings (485), TStrings.Delete (471), TStrings.Count (480)
4.74.20 TStrings.Delete
Synopsis: Delete a string from the list.
Declaration: procedure Delete(Index: Integer); 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. Descendant classes
such as TStringList (460) implement this method.
471
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.74.21 TStrings.EndUpdate
Synopsis: Mark the end of an update batch.
Declaration: procedure EndUpdate
Visibility: public
Description: EndUpdate should be called at the end of a lengthy operation on the stringlist, but only if there was
a call to BeginUpdate before the operation was started. It is best to put the call to EndUpdate
in the context of a Finally block, so it will be called even if an exception occurs.
For more information, see TStrings.BeginUpdate (471).
TStrings implements the IFPObserved (305) interface: when EndUpdate is called, a ooChanged
notification is sent to all observers.
See also: TStrings.BeginUpdate (471), IFPObserved (305)
4.74.22 TStrings.Equals
Synopsis: Compares the contents of two stringlists.
Declaration: function Equals(Obj: TObject) : Boolean; Override; Overload
function Equals(TheStrings: TStrings) : Boolean; Overload
Visibility: public
Description: Equals compares the contents of the stringlist with the contents of TheStrings. If the contents
match, i.e. the stringlist contain an equal amount of strings, and all strings match, then True is
returned. If the number of strings in the lists is unequal, or they contain one or more different strings,
False is returned.
Remark
1.The strings are compared case-insensitively.
2.The associated objects are not compared
See also: TStrings.Objects (483), TStrings.Strings (485), TStrings.Count (480), TStrings.Assign (470)
4.74.23 TStrings.Exchange
Synopsis: Exchanges two strings in the list.
Declaration: procedure Exchange(Index1: Integer; Index2: Integer); 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 (303) excep-
tion is raised.
See also: TStrings.Move (476), TStrings.Strings (485), TStrings.Count (480)
472
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.74.24 TStrings.ExtractName
Synopsis: Extract the name part of a string
Declaration: function ExtractName(const S: string) : string
Visibility: public
Description: ExtractName returns the name part (the part before the NameValueSeparator (483) character) of
the string. If the character is not present, an empty string is returned. The resulting string is not
trimmed, it can end or start with spaces.
See also: NameValueSeparator (483)
4.74.25 TStrings.Filter
Declaration: procedure Filter(aFilter: TStringsFilterMethod; aList: TStrings)
function Filter(aFilter: TStringsFilterMethod) : TStrings
Visibility: public
4.74.26 TStrings.Fill
Declaration: procedure Fill(const aValue: string; aStart: Integer; aEnd: Integer)
Visibility: public
4.74.27 TStrings.ForEach
Declaration: procedure ForEach(aCallback: TStringsForEachMethod)
procedure ForEach(aCallback: TStringsForEachMethodEx)
procedure ForEach(aCallback: TStringsForEachMethodExObj)
Visibility: public
4.74.28 TStrings.GetEnumerator
Synopsis: Create an IEnumerator instance
Declaration: function GetEnumerator : TStringsEnumerator
Visibility: public
Description: GetEnumerator is the implementation of the IEnumerable (1579) interface for TStrings. It
creates a TStringsEnumerator (488) instance and returns it’s IEnumerator (1580) interface.
See also: TStringsEnumerator (488), IEnumerator (1580), IEnumerable (1579)
4.74.29 TStrings.GetNameValue
Synopsis: Return both name and value of a name,value pair based on it’s 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 it’s index.
473
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.74.30 TStrings.GetText
Synopsis: Returns the contents as a PChar
4.74.31 TStrings.IndexOf
Synopsis: Find a string in the list and return its position.
Declaration: function IndexOf(const S: string) : Integer; Virtual
function IndexOf(const S: string; aStart: Integer) : Integer; 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
4.74.32 TStrings.IndexOfName
Synopsis: Finds the index of a name in the name-value pairs.
Declaration: function IndexOfName(const Name: string) : Integer; 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.
4.74.33 TStrings.IndexOfObject
Synopsis: Finds an object in the list and returns its index.
Declaration: function IndexOfObject(AObject: TObject) : Integer; Virtual
Visibility: public
474
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
Description: IndexOfObject searches 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.74.34 TStrings.Insert
Synopsis: Insert a string in the list.
Declaration: procedure Insert(Index: Integer; const S: string); 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 (475) instead.
Errors: If Index is less than zero or larger than Count then an EStringListError (303) exception is raised.
See also: TStrings.Add (468), TStrings.InsertObject (475), TStrings.Append (470), TStrings.Delete (471)
4.74.35 TStrings.InsertObject
Synopsis: Insert a string and associated object in the list.
Declaration: procedure InsertObject(Index: Integer; const S: string;
AObject: TObject)
Visibility: public
Description: InsertObject inserts the string S and its associated objectAObject at position Index in the
list. Index is a zero-based position, and can have values from 0 to Count. If Index equals Count
then the string is appended to the list.
Errors: If Index is less than zero or larger than Count then an EStringListError (303) exception is raised.
See also: TStrings.Insert (475), TStrings.AddObject (468), TStrings.Append (470), TStrings.Delete (471)
4.74.36 TStrings.LastIndexOf
Declaration: function LastIndexOf(const S: string; aStart: Integer) : Integer
; Virtual
function LastIndexOf(const S: string) : Integer
Visibility: public
475
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.74.37 TStrings.LoadFromFile
Synopsis: Load the contents of a file as a series of strings.
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 (386) with the given filename, and then executes
TStrings.LoadfromStream (476); after that the file stream object is destroyed again.
See also: TStrings.LoadFromStream (476), TStrings.SaveToFile (478), Tstrings.SaveToStream (478)
4.74.38 TStrings.LoadFromStream
Synopsis: Load the contents of a stream as a series of strings.
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.
4.74.39 TStrings.Map
Declaration: procedure Map(aMap: TStringsMapMethod; aList: TStrings)
function Map(aMap: TStringsMapMethod) : TStrings
Visibility: public
4.74.40 TStrings.Move
Synopsis: Move a string from one place in the list to another.
Declaration: procedure Move(CurIndex: Integer; NewIndex: Integer); Virtual
Visibility: public
476
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
Description: Move moves the string at position CurIndex so it has position NewIndex after the move opera-
tion. 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
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 (303) is raised.
See also: TStrings.Exchange (472)
4.74.41 TStrings.Pop
Declaration: function Pop : string
Visibility: public
4.74.42 TStrings.Reduce
Declaration: function Reduce(aReduceMethod: TStringsReduceMethod;
const startingValue: string) : string
Visibility: public
4.74.43 TStrings.Reverse
Declaration: function Reverse : TStrings
procedure Reverse(aList: TStrings)
Visibility: public
477
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.74.44 TStrings.SaveToFile
Synopsis: Save the contents of the list to a file.
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 (386) with name FileName, calls TStrings.SaveToStream (478)
and then destroys the file stream object.
Errors: An EStreamError (303) exception can be raised if the file FileName cannot be opened, or if it
cannot be written to.
See also: TStrings.SaveToStream (478), Tstrings.LoadFromStream (476), TStrings.LoadFromFile (476)
4.74.45 TStrings.SaveToStream
Synopsis: Save the contents of the string to a stream.
Declaration: procedure SaveToStream(Stream: TStream); Virtual; Overload
procedure SaveToStream(Stream: TStream; IgnoreEncoding: Boolean)
; Overload
procedure SaveToStream(Stream: TStream; AEncoding: TEncoding); Virtual
; Overload
Visibility: public
Description: SaveToStream saves the contents of the stringlist to Stream. It writes the strings to the stream,
separated by end-of-line markers, so each ’line’ in the stream will contain 1 string from the stringlist.
Errors: An EStreamError (303) exception can be raised if the stream cannot be written to.
See also: TStrings.SaveToFile (478), Tstrings.LoadFromStream (476), TStrings.LoadFromFile (476)
4.74.46 TStrings.Shift
Declaration: function Shift : string
Visibility: public
4.74.47 TStrings.Slice
Declaration: procedure Slice(fromIndex: Integer; aList: TStrings)
function Slice(fromIndex: Integer) : TStrings
Visibility: public
478
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.74.48 TStrings.SetText
Synopsis: Set the contents of the list from a PChar.
Declaration: procedure SetText(TheText: PChar); 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 (485)
4.74.49 TStrings.AlwaysQuote
Synopsis: Always quote strings in DelimitedText
Declaration: Property AlwaysQuote : Boolean
Visibility: public
Access: Read,Write
Description: AlwaysQuote tells the stringlist instance to quote strings in DelimitedText (481) . The default is
to quote strings only when they have whitespace in them.
See also: DelimitedText (481), CommaText (481), StrictDelimiter (484)
4.74.50 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 (480) when read. Trying to set the capacity has no effect. De-
scendant classes such as TStringlist (460) can override this property such that it actually sets the new
capacity.
See also: TStringList (460), TStrings.Count (480)
4.74.51 TStrings.CommaText
Synopsis: Contents of the list as a comma-separated string.
Declaration: Property CommaText : string
Visibility: public
Access: Read,Write
Description: CommaText represents the stringlist as a single string, consisting of a comma-separated concate-
nation of the strings in the list. If one of the strings contains spaces, comma’s or quotes it will be
enclosed by double quotes. Any double quotes in a string will be doubled. For instance the following
strings:
479
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
Comma,string
Quote"string
Space string
NormalSttring
is converted to
"Comma,string","Quote""String","Space string",NormalString
Conversely, when setting the CommaText property, the text will be parsed according to the rules
outlined above, and the strings will be set accordingly. Note that spaces will in this context be
regarded as string separators, unless the string as a whole is contained in double quotes. Spaces that
occur next to a delimiter will be ignored. The following string:
Will be converted to
Comma,String
Quote"String
Space
String
NormalString
This is a special case of the TStrings.DelimitedText (481) property where the quote character is
always the double quote, and the delimiter is always the colon.
See also: TStrings.Text (485), TStrings.SetText (479)
4.74.52 TStrings.Count
Synopsis: Number of strings in the list.
Description: Count is the current number of strings in the list. TStrings does not implement this property;
descendant classes should override the property read handler to return the correct value.
Strings in the list are always uniquely identified by their Index; the index of a string is zero-based,
i.e. it’s supported range is 0 to Count-1. trying to access a string with an index larger than or equal
to Count will result in an error. Code that iterates over the list in a stringlist should always take into
account the zero-based character of the list index.
480
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.74.53 TStrings.DefaultEncoding
Synopsis: Default encoding of stringlist
Description: DefaultEncoding is the default encoding used by the TStrings instance. It is not the actual
encoding, as specified by Encoding (482).
See also: Encoding (482)
4.74.54 TStrings.DelimitedText
Synopsis: Get or set all strings in the list in a delimited form.
Description: DelimitedText returns all strings, properly quoted with QuoteChar (484) and separated by the
Delimiter (481) character.
Strings are quoted if they contain a space or any character with ASCII value less than 32.
The CommaText (479) property is a special case of delimited text where the delimiter character is a
comma and the quote character is a double quote.
If StrictDelimiter (484) is set to True, then no quoting is done (The QuoteChar property is dis-
regarded completely): the returned text will contain the items in the stringlist, separated by the
Delimiter character. When writing the DelimitedText property, the text will be split at all
occurrences of the Delimiter character; however, when reading, the QuoteChar property will
be taken into account.
See also: TStrings.Delimiter (481), TStrings.Text (485), TStrings.QuoteChar (484), TStrings.CommaText (479)
4.74.55 TStrings.Delimiter
Synopsis: Delimiter character used in DelimitedText (481).
Declaration: Property Delimiter : Char
Visibility: public
Access: Read,Write
Description: Delimiter is the delimiter character used to separate the different strings in the stringlist when
they are read or set through the DelimitedText (481) property.
See also: TStrings.DelimitedText (481)
481
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.74.56 TStrings.Encoding
Synopsis: Current encoding of stringlist
Description: Encoding is the current encoding used by the TStrings instance, and which was specified in
the constructor. It is not the default encoding, as specified by DefaultEncoding (481).
See also: DefaultEncoding (481)
4.74.57 TStrings.LineBreak
Synopsis: LineBreak character to use
Description: LineBreak is the character used to separate lines when reading or writing TStrings.Text (485),
and it is also used when reading from file.
See also: TStrings.Text (485)
4.74.58 TStrings.MissingNameValueSeparatorAction
Declaration: Property MissingNameValueSeparatorAction : TMissingNameValueSeparatorAction
Visibility: public
Access: Read,Write
4.74.59 TStrings.Names
Synopsis: Name parts of the name-value pairs in the list.
482
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.74.60 TStrings.NameValueSeparator
Synopsis: Value of the character used to separate name,value pairs
Description: NameValueSeparator is the character used to separate name,value pair. By default, this is the
equal sign (=), resulting in Name=Value pairs.
It can be set to a colon for Name : Value pairs.
4.74.61 TStrings.Objects
Synopsis: Indexed access to the objects associated with the strings in the list.
4.74.62 TStrings.Options
Synopsis: A set of TStringsOption (279) - various boolean properties.
Declaration: Property Options : TStringsOptions
Visibility: public
Access: Read,Write
483
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.74.63 TStrings.QuoteChar
Synopsis: Quote character used in DelimitedText (481).
Declaration: Property QuoteChar : Char
Visibility: public
Access: Read,Write
Description: QuoteChar is the character used by the DelimitedText (481) property to quote strings that have a
space or non-printing character in it.
4.74.64 TStrings.SkipLastLineBreak
Synopsis: Do not add a linebreak to the last item
Declaration: Property SkipLastLineBreak : Boolean
Visibility: public
Access: Read,Write
Description: SkipLastLineBreak can be set to True to omit a linebreak character after the last string in the
TStrings.Text (485). This also means when writing to file, that the file will not have a terminating
linebreak character.
Note that SkipLastLineBreak has the opposite meaning to TStrings.TrailingLineBreak (484).
See also: TStrings.TrailingLineBreak (484), TStrings.LineBreak (482), TStrings.Text (485), TStrings.Options
(483)
4.74.65 TStrings.TrailingLineBreak
Synopsis: Add a linebreak to the last item
Declaration: Property TrailingLineBreak : Boolean
Visibility: public
Access: Read,Write
Description: TrailingLineBreak can be set to False to omit a linebreak character after the last string in
the TStrings.Text (485). This also means when writing to file, that the file will not have a terminating
linebreak character.
Note that TrailingLineBreak has the opposite meaning to TStrings.SkipLastLineBreak (484).
See also: TStrings.SkipLastLineBreak (484), TStrings.LineBreak (482), TStrings.Text (485), TStrings.Options
(483)
4.74.66 TStrings.StrictDelimiter
Synopsis: Should only the delimiter character be considered a delimiter
Declaration: Property StrictDelimiter : Boolean
Visibility: public
Access: Read,Write
484
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
Description: StrictDelimiter can be used to indicate that only the delimiter character should be considered
a delimiter when setting DelimitedText (481): under normal circumstances, quotes and spaces are
considered specially (see the TStrings.CommaText (479) property for more information).
When StrictDelimiter is set to True then only the Delimiter (481) character is considered
when splitting the text in items: no quoting whatsoever is performed when writing the DelimitedText
property. However, when reading the DelimitedText property, quoted strings are taken into ac-
count (so a quoted string can contain a delimiter that is treated as text instead of a delimiter).
See also: DelimitedText (481), CommaText (479), Delimiter (481), TStrings.Options (483)
4.74.67 TStrings.Strings
Synopsis: Indexed access to the strings in the list.
Description: Strings is the default property of TStrings. It provides indexed read-write access to the list of
strings. Reading it will return the string at position Index in the list. Writing it will set the string at
position Index.
Index is the position of the string in the list. It is zero-based, i.e. valued values range from 0 (the
first string in the list) till Count-1 (the last string in the list). When browsing through the strings in
the list, this fact must be taken into account.
To access the objects associated with the strings in the list, use the TStrings.Objects (483) property.
The name parts of name-value pairs can be accessed with the TStrings.Names (482) property, and
the values can be set or read through the TStrings.Values (487) property.
Searching through the list can be done using the TStrings.IndexOf (474) method.
Errors: If Index is outside the allowed range, an EStringListError (303) exception is raised.
See also: TStrings.Count (480), TStrings.Objects (483), TStrings.Names (482), TStrings.Values (487), TStrings.IndexOf
(474)
4.74.68 TStrings.StringsAdapter
Synopsis: Not implemented in Free Pascal.
4.74.69 TStrings.Text
Synopsis: Contents of the list as one big string.
Declaration: Property Text : string
Visibility: public
485
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
Access: Read,Write
Description: Text returns, when read, the contents of the stringlist as one big string consisting of all strings in
the list, separated by an end-of-line marker. When this property is set, the string will be cut into
smaller strings, based on the positions of end-of-line markers in the string. Any previous content of
the stringlist will be lost.
Remark If any of the strings in the list contains an end-of-line marker, then the resulting string will ap-
pear to contain more strings than actually present in the list. To avoid this ambiguity, use the
TStrings.CommaText (479) property instead.
See also: TStrings.Strings (485), TStrings.Count (480), TStrings.CommaText (479)
4.74.70 TStrings.TextLineBreakStyle
Synopsis: Determines which line breaks to use in the Text (485) 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:
4.74.71 TStrings.UseLocale
Synopsis: Determines what methods are used in strings comparison.
Declaration: Property UseLocale : Boolean
Visibility: public
Access: Read,Write
Description: Set UseLocale to True to use AnsiCompareStr (264) and AnsiCompareText (264) for comparing
strings in the TStrings object.
Set UseLocale to False to use CompareStr (264) and CompareText (264) for comparing strings
in the TStrings object.
The default value is True.
See also: TStrings.Options (483)
486
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.74.72 TStrings.ValueFromIndex
Synopsis: Return the value part of a string based on it’s index.
Description: ValueFromIndex returns the value part of a string based on the string index. The value part
are all characters in the string after the NameValueSeparator (483) character, or all characters if the
NameValueSeparator character is not present.
4.74.73 TStrings.Values
Synopsis: Value parts of the name-value pairs in the list.
4.74.74 TStrings.WriteBOM
Synopsis: Write BOM when writing stringlist to stream
Declaration: Property WriteBOM : Boolean
Visibility: public
Access: Read,Write
Description: WriteBOM signals the stringlist to write a BOM Marker to the stream if the stringlist is written to
stream using TStrings.SaveToStream (478) or TStrings.SaveToFile (478)
See also: TStrings.SaveToStream (478), TStrings.SaveToFile (478), TStrings.Options (483)
487
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.75 TStringsEnumerator
4.75.1 Description
TStringsEnumerator implements the #rtl.system.IEnumerator (1580) interface for the TStrings
(465) class, so the TStrings class can be used in a for ... in loop. It is returned by the
TStrings.GetEnumerator (473) method of TStrings.
4.75.4 TStringsEnumerator.Create
Synopsis: Initialize a new instance of TStringsEnumerator
Declaration: constructor Create(AStrings: TStrings)
Visibility: public
Description: Create initializes a new instance of TStringsEnumerator and keeps a reference to the stringlist
AStrings that will be enumerated.
See also: TStrings (465)
4.75.5 TStringsEnumerator.GetCurrent
Synopsis: Return the current pointer in the list
4.75.6 TStringsEnumerator.MoveNext
Synopsis: Move the position of the enumerator to the next position in the list.
488
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
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.
4.75.7 TStringsEnumerator.Current
Synopsis: Current pointer in the list
Declaration: Property Current : string
Visibility: public
Access: Read
Description: Current redefines GetCurrent (488) as a property.
See also: GetCurrent (488)
4.76 TStringStream
4.76.1 Description
TStringStream stores its data in an ansistring. The contents of this string is available as the
DataString (492) property. It also introduces some methods to read or write parts of the stringstream’s
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.
489
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.76.4 TStringStream.Create
Synopsis: Creates a new stringstream and sets its initial content.
Description: Create creates a new TStringStream instance and sets its initial content to Astring. The
position is still 0 but the size of the stream will equal the length of the string.
The Encoding argument specifies the codepage with which the bytes in the string will be inter-
preted. If it is not specified (or Nil) the system default encoding will be used. The correct encoding
can be detected from the string by using the TStringStream.CreateRaw (490) constructor.
4.76.5 TStringStream.CreateRaw
Synopsis: Create stringstream using codepage of string
Declaration: constructor CreateRaw(const AString: RawByteString); Overload
Visibility: public
Description: CreateRaw will create the stream using the codepage of the string passed on in the constructor.
The default constructor uses the default codepage of the system.
See also: TStringStream.Create (490)
4.76.6 TStringStream.Destroy
Synopsis: Free the instance of the stream
Declaration: destructor Destroy; Override
Visibility: public
Description: Destroy frees the encoding if it owns it and calls the inherited destructor.
490
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.76.7 TStringStream.ReadUnicodeString
Synopsis: Read a unicode string from the stream
4.76.8 TStringStream.WriteUnicodeString
Synopsis: Write a unicode string to the stream
Declaration: procedure WriteUnicodeString(const AString: UnicodeString)
Visibility: public
Description: WriteUnicodeString will write a unicodestring and correctly handle the codepage translation
if necessary.
See also: TStream.ReadString (445), TStringStream.ReadUnicodeString (491), TStringStream.ReadAnsiString
(491), TStringStream.WriteAnsiString (491)
4.76.9 TStringStream.ReadAnsiString
Synopsis: Read an ansistring from the stream
Declaration: function ReadAnsiString(Count: LongInt) : AnsiString; Overload
Visibility: public
Description: ReadAnsiString will read an ansistring and correctly handle the codepage translation if neces-
sary..
See also: TStream.ReadString (445), TStringStream.WriteUnicodeString (491), TStringStream.WriteAnsiString
(491), TStringStream.ReadUnicodeString (491)
4.76.10 TStringStream.WriteAnsiString
Synopsis: Write an ansistring to the stream
Declaration: procedure WriteAnsiString(const AString: AnsiString); Override
Visibility: public
Description: WriteAnsiString will write an ansistring and correctly handle the codepage translation if nec-
essary.
See also: TStream.ReadString (445), TStringStream.ReadUnicodeString (491), TStringStream.ReadAnsiString
(491), TStringStream.WriteUnicodeString (491)
491
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.76.11 TStringStream.ReadString
Synopsis: Reads a string of length Count
4.76.12 TStringStream.WriteString
Synopsis: WriteString writes a string to the stream.
Declaration: procedure WriteString(const AString: string)
Visibility: public
4.76.13 TStringStream.DataString
Synopsis: Contains the contents of the stream in string form
Declaration: Property DataString : string
Visibility: public
Access: Read
Description: Contains the contents of the stream in string form
4.76.14 TStringStream.UnicodeDataString
Synopsis: Datastring as unicode string
492
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.76.15 TStringStream.OwnsEncoding
Synopsis: Does the stream instance owns the encoding
Description: OwnsEncoding indicates whether the stream instance owns the encoding or not. If it owns the
encoding, it will be freed when the stream instance is freed.
See also: TStringStream.Encoding (493)
4.76.16 TStringStream.Encoding
Synopsis: Encoding of the string with the data
Description: Encoding is the encoding of the string which contains the data. If the encoding was not specified
(or detected) in the constructor, this is the default system encoding.
See also: TStringStream.OwnsEncoding (493), TStringStream.Create (490), TStringStream.CreateRaw (490)
4.77 TTextObjectWriter
4.77.1 Description
Not yet implemented.
4.78 TThread
4.78.1 Description
The TThread class encapsulates the native thread support of the operating system. To create a
thread, declare a descendant of the TThread object and override the Execute (494) method. In this
method, the tthread’s code should be executed. To run a thread, create an instance of the tthread
descendant, and call it’s execute method.
It is also possible to simply execute a method or static procedure in a thread using the TThread.ExecuteInThread
(499) class method.
493
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.78.4 TThread.Execute
Synopsis: Execute method. Must be overridden in a descendant thread.
Declaration: procedure Execute; Virtual; Abstract
Visibility: protected
494
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
Description: Execute is a method that must be overridden in descendant classes of the thread. It must con-
tain the code that must execute in the thread. The Execute method is responsible for checking
Terminated (264) at regular intervals: when it is set to True the execute method must exit.
See also: Terminated (264)
4.78.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.78.6 TThread.Queue
Synopsis: Queue a method for execution in the main thread
Declaration: procedure Queue(aMethod: TThreadMethod)
class procedure Queue(aThread: TThread; aMethod: TThreadMethod); Static
Visibility: protected
Description: Queue schedules a method aMethod for execution in the main thread. In difference with TThread.Synchronize
(495), 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.
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 object is destroyed (after it has finished executing) all its queued calls are removed
from the queue list.
See also: TThread.Synchronize (495), TThread.RemoveQueuedEvents (497)
4.78.7 TThread.Create
Synopsis: Creates a new thread.
Declaration: constructor Create(CreateSuspended: Boolean; const StackSize: SizeUInt)
Visibility: public
Description: Creates a new thread.
4.78.8 TThread.Destroy
Synopsis: Destroys the thread object.
Declaration: destructor Destroy; Override
Visibility: public
Description: Destroys the thread object.
495
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.78.9 TThread.CreateAnonymousThread
Synopsis: Execute code in an anonymous thread
4.78.10 TThread.NameThreadForDebugging
Synopsis: Set a thread name
Declaration: class procedure NameThreadForDebugging(aThreadName: UnicodeString;
aThreadID: TThreadID); Static
class procedure NameThreadForDebugging(aThreadName: AnsiString;
aThreadID: TThreadID); Static
Visibility: public
Description: NameThreadForDebugging sets the name of thread aThreadID to aThreadName. The
thread name can be Unicode or ansistring. This is mainly useful for debugging purposes, as thread
names are more easily recognizable than IDs.
Note that this requires OS support, so at the moment it is Windows and Unix only.
4.78.11 TThread.SetReturnValue
Synopsis: Set return value of a thread
4.78.12 TThread.CheckTerminated
Synopsis: Check if the current thread has finished executing.
496
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
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 (304) exception is
raised.
4.78.13 TThread.RemoveQueuedEvents
Synopsis: Remove methods scheduled for execution from queue
Declaration: class procedure RemoveQueuedEvents(aThread: TThread;
aMethod: TThreadMethod); Static
class procedure RemoveQueuedEvents(aMethod: TThreadMethod); Static
class procedure RemoveQueuedEvents(aThread: TThread); Static
Visibility: public
Description: RemoveQueuedEvents removes methods from the list of methods waiting for execution in the
main thread. If only aThread is specified, all methods scheduled for execution by that thread are
removed.
If only aMethod is specified, then all calls to that method are removed, regardless of the thread.
The methods are compared with both the Code and Data pointers (method code and method object).
If both arguments are specified, then all calls to the given method by the given thread are removed.
This is a known difference to Delphi that deletes all given methods or all methods by the given thread.
See also: TThread.Synchronize (495), TThread.Queue (495)
4.78.14 TThread.SpinWait
Synopsis: Prevent thread execution in a spin-wait loop
Declaration: class procedure SpinWait(aIterations: LongWord); 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
(264) can cause a thread switch). The input parameter (aIterations) specifies the number of spin
loops.
See also: SysUtils.Sleep (264), TThread.Sleep (497)
4.78.15 TThread.Sleep
Synopsis: Prevent thread execution
497
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
Description: Sleep blocks the execution of the thread for aMilliseconds. This function simply calls sysu-
tils.sleep (264)
In difference with TThread.SpinWait (497), a thread switch may occur during the sleep.
See also: SysUtils.Sleep (264), TThread.SpinWait (497)
4.78.16 TThread.Yield
Synopsis: Yield execution to other threads
Declaration: class procedure 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.78.17 TThread.GetSystemTimes
Synopsis: Return CPU stats
Declaration: class procedure GetSystemTimes(out aSystemTimes: TSystemTimes); Static
Visibility: public
Description: GetSystemTimes is provided for Delphi compatibility only, it currently returns empty values
only.
See also: TSystemTimes (264)
4.78.18 TThread.GetTickCount
Synopsis: Return tick count (32-bit)
Declaration: class function GetTickCount : LongWord; Static
Visibility: public
Description: GetTickCount is deprecated and should not be used. Use TThread.GetTickCount64 (498) in-
stead.
See also: TThread.GetTickCount64 (498)
4.78.19 TThread.GetTickCount64
Synopsis: Return tick count (64-bit)
498
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.78.20 TThread.ExecuteInThread
Synopsis: Execute a method or static procedure in a thread
Visibility: public
Description: TThread.ExecuteInThread is a class method which allows to quickly execute a method or
procedure in a thread. The method or procedure to be executed is passed in Method, this can be a
method or a plain (static) procedure.
The caller can be notified of thread termination: In the optional argument AOnTerminate a call-
back (procedure or method, depending on the signature) can be specified that will be called when the
thread terminated. This callback is executed in the main thread.
The signature of AMethod determines whether status reporting is enabled or not. If the method
of type TThreadExecuteStatusHandler (281) or TThreadExecuteStatusCallback (281), then an extra
AOnStatus callback must be specified. This callback will be called in the main thread whenever
the thread wishes to be report its status. The status callback should not do extensive work, because
while the status callback is called, thread execution is suspended.
When using a plain procedure, extra data can be passed on to the procedure in AData. The AData
pointer will be passed to the thread method, and also to the thread status callback and thread termi-
nation callback.
Listing: ./classesex/tthrc.pp
program t t h r c ;
uses cthreads , s y s u t i l s , c l a s s e s ;
Var
D : Integer ;
begin
W r i t e l n ( ' Thread ' , TThread ( Sender ) . ThreadID , ' done . D i s c u r r e n t l y : ' , P I n t e g e r ( AData ) ^ ) ;
end ;
499
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
Var
I : integer ;
begin
f o r I :=1 to 10 do
begin
Sleep ( 1 0 * Random ( 3 0 ) ) ;
W r i t e l n ( ' Thread ' , TThread . CurrentThread . ThreadID , ' p i n g ' , I ) ;
Inc ( P I n t e g e r ( AData ) ^ , i ) ;
end ;
end ;
Var
T1 , T2 : TThread ;
begin
T1 : = TThread . ExecuteInThread ( @DoThread ,@D, @DoneThread ) ;
T2 : = TThread . ExecuteInThread ( @DoThread ,@D, @DoneThread ) ;
W r i t e l n ( ' Main t h r e a d done ' ) ;
T1 . WaitFor ;
T2 . WaitFor ;
end .
Listing: ./classesex/tthre.pp
program t t h r e ;
{ $mode o b j f p c }
{ $H+ }
uses cthreads , s y s u t i l s , c l a s s e s ;
Type
TTestThread = Class ( TObject )
D : Integer ;
Procedure DoneThread ( Sender : TObject ) ;
Procedure DoThread ;
Procedure Run ;
end ;
begin
W r i t e l n ( ' Thread ' , TThread ( Sender ) . ThreadID , ' done . D i s c u r r e n t l y : ' , D) ;
end ;
Var
I : integer ;
begin
f o r I :=1 to 10 do
begin
500
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
Sleep ( 1 0 * Random ( 3 0 ) ) ;
W r i t e l n ( ' Thread ' , TThread . CurrentThread . ThreadID , ' p i n g ' , I ) ;
Inc (D, i ) ;
end ;
end ;
Var
T1 , T2 : TThread ;
begin
T1 : = TThread . ExecuteInThread ( @DoThread , @DoneThread ) ;
T2 : = TThread . ExecuteInThread ( @DoThread , @DoneThread ) ;
W r i t e l n ( ' Main t h r e a d done ' ) ;
T1 . WaitFor ;
T2 . WaitFor ;
end ;
begin
With TTestThread . Create do
try
Run ;
finally
Free ;
end ;
end .
Listing: ./classesex/tthrcs.pp
program t t h r c s ;
{ $h+ }
uses cthreads , s y s u t i l s , c l a s s e s ;
Var
D : Integer ;
DoneThreads : I N t e g e r ;
begin
Inc ( DoneThreads ) ;
W r i t e l n ( ' Thread ' , TThread ( Sender ) . ThreadID , ' done . D i s c u r r e n t l y : ' , P I n t e g e r ( Data ) ^ ) ;
end ;
begin
W r i t e l n ( ' Thread ' , Sender . ThreadID , ' S t a t u s r e p o r t : ' , Status ) ;
end ;
Var
I : integer ;
begin
501
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
f o r I :=1 to 10 do
begin
Sleep ( 1 0 * Random ( 3 0 ) ) ;
Report ( ' Ping ' + I n t T o S t r ( i ) ) ;
Inc ( P I n t e g e r ( AData ) ^ , i ) ;
end ;
end ;
Var
T1 , T2 : TThread ;
begin
DoneThreads : = 0 ;
T1 : = TThread . ExecuteInThread ( @DoThread , @ReportThreadStatus ,@D, @DoneThread ) ;
T2 : = TThread . ExecuteInThread ( @DoThread , @ReportThreadStatus ,@D, @DoneThread ) ;
W r i t e l n ( ' Main t h r e a d l o o p ' ) ;
While DoneThreads <2 do
begin
Sleep ( 1 0 ) ;
CheckSynchronize ;
end ;
T1 . WaitFor ;
T2 . WaitFor ;
end .
Listing: ./classesex/tthres.pp
program t t h r c ;
{ $mode o b j f p c }
{ $H+ }
uses cthreads , s y s u t i l s , c l a s s e s ;
Type
TTestThread = Class ( TObject )
D : Integer ;
DoneThreads : i n t e g e r ;
Procedure DoneThread ( Sender : TObject ) ;
Procedure ReportThreadStatus ( Sender : TThread ; Const s t a t u s : S t r i n g ) ;
Procedure DoThread ( Report : TThreadReportStatus ) ;
Procedure Run ;
end ;
begin
Inc ( DoneThreads ) ;
W r i t e l n ( ' Thread ' , TThread ( Sender ) . ThreadID , ' done . D i s c u r r e n t l y : ' , D) ;
end ;
begin
W r i t e l n ( ' Thread ' , Sender . ThreadID , ' S t a t u s r e p o r t : ' , Status ) ;
end ;
502
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
Var
I : integer ;
begin
f o r I :=1 to 10 do
begin
Sleep ( 1 0 * Random ( 3 0 ) ) ;
Report ( ' Ping ' + I n t T o S t r ( i ) ) ;
Inc (D, i ) ;
end ;
end ;
Var
T1 , T2 : TThread ;
begin
DoneThreads : = 0 ;
T1 : = TThread . ExecuteInThread ( @DoThread , @ReportThreadStatus , @DoneThread ) ;
T2 : = TThread . ExecuteInThread ( @DoThread , @ReportThreadStatus , @DoneThread ) ;
W r i t e l n ( ' Main t h r e a d l o o p ' ) ;
While DoneThreads <2 do
begin
Sleep ( 1 0 ) ;
CheckSynchronize ;
end ;
T1 . WaitFor ;
T2 . WaitFor ;
end ;
begin
With TTestThread . Create do
try
Run ;
finally
Free ;
end ;
end .
4.78.21 TThread.AfterConstruction
Synopsis: Code to be executed after construction but before execute.
Declaration: procedure AfterConstruction; Override
Visibility: public
Description: AfterConstruction is overridden in TThread, it actually starts the thread if it was created
with CreateSuspended equal to False, i.e. not suspended. When overriding this method, the
inherited method must be called, or the thread will never be started.
4.78.22 TThread.Start
Synopsis: Starts a thread that was created in a suspended state.
503
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.78.23 TThread.Resume
Synopsis: Resumes the thread’s execution. Deprecated, see TThread.Start
Declaration: procedure Resume
Visibility: public
Description: Resumes the thread’s execution. Deprecated, see TThread.Start
See also: TThread.Start (503), TThread.Suspend (504)
4.78.24 TThread.Suspend
Synopsis: Suspends the thread’s execution.
Declaration: procedure Suspend
Visibility: public
Description: On non-Windows platforms, a thread can only suspend itself. Other threads can wake up a suspended
thread by calling TThread.Start.
See also: TThread.Resume (504), TThread.Start (503)
4.78.25 TThread.Terminate
Synopsis: Signals the thread it should terminate.
4.78.26 TThread.WaitFor
Synopsis: Waits for the thread to terminate and returns the exit status.
504
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
Description: WaitFor waits for the thread to terminate, and returns the exit status. Note that when executed in
the main thread, this method calls CheckSynchronize (286), this is done to avoid deadlocks: if the
thread is waiting for a synchronize (495), then the synchronize methods will be executed and then
the WaitFor will return.
See also: TThread.Terminated (493), TThread.WaitFor (504), TThread.FreeOnTerminate (506), TThread.Synchronize
(495)
4.78.27 TThread.CurrentThread
Synopsis: Return current thread instance
Declaration: Property CurrentThread : TThread
Visibility: public
Access: Read
Description: TThread.CurrentThread can be used to get the current thread instance. This is useful in code
that is not inside a TThread implementation, but which needs access to the current thread.
For threads that were created outside of FPC code (DLLs or a calling program) this will return a
dummy TThread instance.
See also: TThread.ExternalThread (506)
4.78.28 TThread.ProcessorCount
Synopsis: Return the processor count for this system
Declaration: Property ProcessorCount : LongWord
Visibility: public
Access: Read
Description: ProcessorCount returns the processor count for this system.
Whether this is the number of cores or the number of CPUs present in the hardware, is deliberately
unspecified. The number of cores can also vary during the lifetime of the program, and the FPC
implementation does not guarantee that this will always match, the value is set at program start.
As such, the number specified should only be used as an indication of how many threads can be
executed at once by the system.
See also: TThread.IsSingleProcessor (505)
4.78.29 TThread.IsSingleProcessor
Synopsis: Is the current system single processor or not
Declaration: Property IsSingleProcessor : Boolean
Visibility: public
Access: Read
Description: Thread.IsSingleProcessor returns True if TThread.ProcessorCount (505) is less than or
equal to 1, False otherwise.
See also: TThread.ProcessorCount (505)
505
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.78.30 TThread.FreeOnTerminate
Synopsis: Indicates whether the thread should free itself when it stops executing.
Declaration: Property FreeOnTerminate : Boolean
Visibility: public
Access: Read,Write
Description: FreeOnTerminate, when set to True indicates that the tread instance will freed automatically as
soon as the thread stops executing. You can use the OnTerminate (507) property to get a notification
of when the thread has terminated and will be freed.
When setting this property to True, in general you may not read or write any property of the
TThread instance from a different thread, because there is no guarantee that the thread instance
still exists in memory. This implies 2 things:
1.The OnTerminate event handler should be set before setting FreeOnTerminate to True
2.The properties can still be read and set in the OnTerminate event handler, as the thread
instance is then still guaranteed to exist.
See also: OnTerminate (507)
4.78.31 TThread.Handle
Synopsis: Returns the thread handle.
Declaration: Property Handle : TThreadID
Visibility: public
Access: Read
Description: Returns the thread handle.
4.78.32 TThread.ExternalThread
Synopsis: Is the thread instance an external thread ?
Declaration: Property ExternalThread : Boolean
Visibility: public
Access: Read
Description: ExternalThread returns True if the thread is an externally created thread. If the thread was
created by the FPC program, this returns False. This is useful for examining instances returned by
TThread.CurrentThread (505).
See also: TThread.CurrentThread (505)
4.78.33 TThread.Priority
Synopsis: Returns the thread priority.
Declaration: Property Priority : TThreadPriority
Visibility: public
Access: Read,Write
Description: Returns the thread priority.
506
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.78.34 TThread.Suspended
Synopsis: Indicates whether the thread is suspended.
4.78.35 TThread.Finished
Synopsis: Has the thread finished executing
Declaration: Property Finished : Boolean
Visibility: public
Access: Read
Description: Finished is True when TThread.Execue (493) has finished executing, but the thread is still
cleaning up (calling OnTerminate, etc).
See also: TThread.Execue (493), TThread.OnTerminate (507)
4.78.36 TThread.ThreadID
Synopsis: Returns the thread ID.
Declaration: Property ThreadID : TThreadID
Visibility: public
Access: Read
Description: Returns the thread ID.
4.78.37 TThread.OnTerminate
Synopsis: Event called when the thread terminates.
507
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.78.38 TThread.FatalException
Synopsis: Exception that occurred during thread execution
Description: FatalException contains the exception that occurred during the thread’s execution.
4.79 TThreadList
4.79.1 Description
TThreadList is a thread-safe Tlist (406) implementation. Unlike TList, it can be accessed read-
write by multiple threads: the list implementation will take care of locking the list when adding or
removing items from the list.
4.79.4 TThreadList.Create
Synopsis: Creates a new thread-safe list.
Declaration: constructor Create
Visibility: public
Description: Create instantiates a new TThreadList instance. It initializes a critical section and an internal
list object.
See also: TThreadList.Destroy (509)
508
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.79.5 TThreadList.Destroy
Synopsis: Destroys the list instance.
4.79.6 TThreadList.Add
Synopsis: Adds an element to the list.
Declaration: procedure Add(Item: Pointer)
Visibility: public
Description: Add attempts to lock the list and adds the pointer Item to the list. After the pointer was added, the
list is unlocked again.
See also: LockList (509), Clear (509), Remove (510), UnlockList (510)
4.79.7 TThreadList.Clear
Synopsis: Removes all elements from the list.
Declaration: procedure Clear
Visibility: public
Description: Clear attempts to lock the list and then clears the list; all items are removed from the list. After
the list is cleared, it is again unlocked.
See also: LockList (509), Add (509), Remove (510), UnlockList (510)
4.79.8 TThreadList.LockList
Synopsis: Locks the list for exclusive access.
See also: Clear (509), Add (509), Remove (510), UnlockList (510)
509
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.79.9 TThreadList.Remove
Synopsis: Removes an item from the list.
Declaration: procedure Remove(Item: Pointer)
Visibility: public
Description: Remove attempts to lock the list and then removes Item from the list. After the item is removed,
the list is again unlocked.
See also: LockList (509), Add (509), Clear (509), UnlockList (510)
4.79.10 TThreadList.UnlockList
Synopsis: Unlocks the list after it was locked.
Declaration: procedure UnlockList
Visibility: public
Description: UnLockList unlocks the list when it was locked for exclusive access. UnLocklist and LockList
use an internal critical section, so all rules for multiple locking/unlocking of critical sections apply.
See also: Clear (509), Add (509), Remove (510), lockList (509)
4.79.11 TThreadList.Duplicates
Synopsis: Describes what to do with duplicates
Declaration: Property Duplicates : TDuplicates
Visibility: public
Access: Read,Write
Description: Duplicates describes what the threadlist should do when a duplicate pointer is added to the list.
It is identical in behaviour to the Duplicates (463) property of TStringList (460).
See also: TDuplicates (271)
4.80 TWriter
4.80.1 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
(324) 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
(450) call should be used.
510
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.80.4 TWriter.Create
Synopsis: Creates a new Writer with a stream and bufsize.
511
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.80.5 TWriter.Destroy
Synopsis: Destroys the writer instance.
Declaration: destructor Destroy; Override
Visibility: public
Description: Destroys the writer instance.
4.80.6 TWriter.FlushBuffer
Synopsis: Flush the buffer
Declaration: procedure FlushBuffer; Override
Visibility: public
Description: FlushBuffer flushes the buffer. It is provided for Delphi compatibility, and is not used in FPC.
See also: TFiler.FlushBuffer (385), TBinaryObjectWriter.FlushBuffer (345), TAbstractObjectWriter.FlushBuffer
(326)
4.80.7 TWriter.DefineProperty
Synopsis: Callback used when defining and streaming custom properties.
Declaration: procedure DefineProperty(const Name: string; ReadData: TReaderProc;
AWriteData: TWriterProc; HasData: Boolean)
; Override
Visibility: public
Description: Callback used when defining and streaming custom properties.
4.80.8 TWriter.DefineBinaryProperty
Synopsis: Callback used when defining and streaming custom properties.
Declaration: procedure DefineBinaryProperty(const Name: string;
ReadData: TStreamProc;
AWriteData: TStreamProc; HasData: Boolean)
; Override
Visibility: public
Description: Callback used when defining and streaming custom properties.
4.80.9 TWriter.Write
Synopsis: Write raw data to stream
Declaration: procedure Write(const Buffer; Count: LongInt); 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 (346), TAbstractObjectWriter.Write (327)
512
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.80.10 TWriter.WriteBoolean
Synopsis: Write boolean value to the stream.
4.80.11 TWriter.WriteCollection
Synopsis: Write a collection to the stream.
Declaration: procedure WriteCollection(Value: TCollection)
Visibility: public
4.80.12 TWriter.WriteComponent
Synopsis: Stream a component to the stream.
Declaration: procedure WriteComponent(Component: TComponent)
Visibility: public
4.80.13 TWriter.WriteChar
Synopsis: Write a character to the stream.
Declaration: procedure WriteChar(Value: Char)
Visibility: public
Description: Write a character to the stream.
4.80.14 TWriter.WriteWideChar
Synopsis: Write widechar to stream
513
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.80.15 TWriter.WriteDescendent
Synopsis: Write descendent to stream
4.80.16 TWriter.WriteFloat
Synopsis: Write a float to the stream.
Declaration: procedure WriteFloat(const Value: Extended)
Visibility: public
Description: Write a float to the stream.
4.80.17 TWriter.WriteSingle
Synopsis: Write a single-type real to the stream.
4.80.18 TWriter.WriteDate
Synopsis: Write a date to the stream.
Declaration: procedure WriteDate(const Value: TDateTime)
Visibility: public
Description: Write a date to the stream.
4.80.19 TWriter.WriteCurrency
Synopsis: Write a currency value to the stream
Declaration: procedure WriteCurrency(const Value: Currency)
Visibility: public
Description: WriteCurrency writes a currency typed value to the stream. This method does nothing except
call the driver method of the driver being used.
See also: TReader.ReadCurrency (436)
514
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.80.20 TWriter.WriteIdent
Synopsis: Write an identifier to the stream.
4.80.21 TWriter.WriteInteger
Synopsis: Write an integer to the stream.
Declaration: procedure WriteInteger(Value: LongInt); Overload
procedure WriteInteger(Value: Int64); Overload
Visibility: public
4.80.22 TWriter.WriteSet
Synopsis: Write a set value to the stream
Declaration: procedure WriteSet(Value: LongInt; SetType: Pointer)
Visibility: public
Description: WriteSet writes a set Value consisting of elements with type EnumType. The set must be
encoded as an integer where each element is encoded in a bit of the integer. Thus, at most an
enumerated type with 32 elements can be written with this method.
Errors: No checking is performed on the validity of EnumType. It is assumed to be a valid PTypeInfo
pointer.
See also: TReader.ReadSet (437)
4.80.23 TWriter.WriteListBegin
Synopsis: Write a start-of-list marker to the stream.
4.80.24 TWriter.WriteListEnd
Synopsis: Write an end-of-list marker to the stream.
Declaration: procedure WriteListEnd
Visibility: public
Description: Write an end-of-list marker to the stream.
515
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.80.25 TWriter.WriteSignature
Synopsis: Write a signature to the stream
4.80.26 TWriter.WriteRootComponent
Synopsis: Write a root component to the stream.
Declaration: procedure WriteRootComponent(ARoot: TComponent)
Visibility: public
Description: Write a root component to the stream.
4.80.27 TWriter.WriteString
Synopsis: Write a string to the stream.
4.80.28 TWriter.WriteWideString
Synopsis: Write a widestring value to the stream
Declaration: procedure WriteWideString(const Value: WideString)
Visibility: public
Description: WriteWidestring writes a currency typed value to the stream. This method does nothing except
call the driver method of the driver being used.
See also: TReader.ReadWideString (439)
4.80.29 TWriter.WriteUnicodeString
Synopsis: Write a Unicode string to the stream.
Declaration: procedure WriteUnicodeString(const Value: UnicodeString)
Visibility: public
Description: WriteUnicodeString writes Value, a UnicodeString string to the stream. It simply passes the
string on to the WriteUnicodeString method of the writer driver class.
See also: TBinaryObjectWriter.WriteUnicodeString (348), TReader.ReadUnicodeString (439)
516
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.80.30 TWriter.WriteVariant
Synopsis: Write a variant to the stream
4.80.31 TWriter.RootAncestor
Synopsis: Ancestor of root component.
Declaration: Property RootAncestor : TComponent
Visibility: public
Access: Read,Write
Description: Ancestor of root component.
4.80.32 TWriter.OnFindAncestor
Synopsis: Event occurring when an ancestor component must be found.
Declaration: Property OnFindAncestor : TFindAncestorEvent
Visibility: public
Access: Read,Write
4.80.33 TWriter.OnWriteMethodProperty
Synopsis: Handler from writing method properties.
Declaration: Property OnWriteMethodProperty : TWriteMethodPropertyEvent
Visibility: public
Access: Read,Write
Description: OnWriteMethodProperty can be set by an IDE or some streaming mechanism which han-
dles dummy values for method properties; It can be used to write a real value to the stream which
will be interpreted correctly when the stream is read. See TWriteMethodPropertyEvent (283) for a
description of the arguments.
See also: TWriteMethodPropertyEvent (283), TReader.OnSetMethodProperty (441)
517
CHAPTER 4. REFERENCE FOR UNIT ’CLASSES’
4.80.34 TWriter.OnWriteStringProperty
Synopsis: Event handler for translating strings written to stream.
Description: OnWriteStringProperty is called whenever a string property is written to the stream. It can
be used e.g. by a translation mechanism to translate the strings on the fly, when a form is written.
See TReadWriteStringPropertyEvent (276) for a description of the various parameters.
See also: TReader.OnPropertyNotFound (440), TReader.OnSetMethodProperty (441), TReadWriteStringProp-
ertyEvent (276)
4.80.35 TWriter.Driver
Synopsis: Driver used when writing to the stream.
Declaration: Property Driver : TAbstractObjectWriter
Visibility: public
Access: Read
Description: Driver used when writing to the stream.
4.80.36 TWriter.PropertyPath
Synopsis: Path to the property that is currently being written
518
Chapter 5
Name Page
System 1331
5.2 Overview
The clocale offers no API by itself: it just initializes the internationalization settings of the sysutils
(1598) 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;
519
Chapter 6
Name Page
System 1331
6.2 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 (521),
Free (521) and ReAlloc (521). 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.
Remark Note that specifying the -gv command-line option, to enable valgrind debugging info will implicitly
add this unit to your program.
LibName is the name of the library that is actually used. On most systems, this is simply "libc.so".
520
CHAPTER 6. REFERENCE FOR UNIT ’CMEM’
6.4.2 Free
Synopsis: Free a previously allocated block
Declaration: procedure Free(P: pointer)
Visibility: default
Description: Free returns the memory block pointed to by P to the system. After Free was called, the pointer
P is no longer valid.
See also: Malloc (521), ReAlloc (521)
6.4.3 Malloc
Synopsis: Malloc external declaration.
Declaration: function Malloc(Size: PtrUInt) : Pointer
Visibility: default
Description: Malloc is the external declaration of the C libraries malloc call. It accepts a size parameter,
and returns a pointer to a memory block of the requested size or Nil if no more memory could be
allocated.
See also: Free (521), ReAlloc (521)
6.4.4 ReAlloc
Synopsis: Reallocates a memory block
Declaration: function ReAlloc(P: Pointer; Size: PtrUInt) : pointer
Visibility: default
Description: ReAlloc re-allocates a block of memory pointed to by p. The new block will have size Size, and
as much data as was available or as much data as fits is copied from the old to the new location.
See also: Malloc (521), Free (521)
521
Chapter 7
Name Page
System 1331
7.2 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.
522
Chapter 8
Name Page
System 1331
8.2 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.
523
Chapter 9
Name Page
System 1331
9.2 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.
524
Chapter 10
Name Page
System 1331
10.2 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.
525
Chapter 11
Name Page
System 1331
11.2 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.
526
Chapter 12
Name Page
System 1331
12.2 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.
527
Chapter 13
Name Page
System 1331
13.2 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.
528
Chapter 14
Name Page
System 1331
14.2 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.
529
Chapter 15
Name Page
System 1331
15.2 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.
530
Chapter 16
Name Page
System 1331
16.2 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.
531
Chapter 17
Name Page
System 1331
17.2 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.
532
Chapter 18
Name Page
System 1331
18.2 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.
533
Chapter 19
Name Page
System 1331
19.2 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.
534
Chapter 20
Name Page
System 1331
20.2 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.
535
Chapter 21
Name Page
System 1331
21.2 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.
536
Chapter 22
Name Page
System 1331
22.2 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.
537
Chapter 23
Name Page
System 1331
23.2 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.
538
Chapter 24
Name Page
System 1331
24.2 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.
539
Chapter 25
Name Page
System 1331
25.2 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.
540
Chapter 26
Name Page
System 1331
26.2 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.
541
Chapter 27
Name Page
System 1331
27.2 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.
542
Chapter 28
Name Page
System 1331
28.2 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.
543
Chapter 29
Name Page
System 1331
29.2 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.
544
Chapter 30
Name Page
System 1331
30.2 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.
545
Chapter 31
Name Page
System 1331
31.2 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.
546
Chapter 32
Name Page
System 1331
32.2 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.
547
Chapter 33
Name Page
System 1331
33.2 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.
548
Chapter 34
Name Page
System 1331
34.2 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.
549
Chapter 35
Name Page
System 1331
35.2 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.
550
Chapter 36
Name Page
System 1331
36.2 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.
551
Chapter 37
Name Page
System 1331
37.2 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.
552
Chapter 38
Name Page
System 1331
38.2 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.
553
554
CHAPTER 39. REFERENCE FOR UNIT ’CPALL’
Chapter 39
Name Page
cp1250 530
cp1251 531
cp1252 532
cp1253 533
cp1254 534
cp1255 535
cp1256 536
cp1257 537
cp1258 538
cp3021 ??
cp437 539
cp646 540
cp737 ??
cp775 ??
cp850 541
cp852 542
cp855 ??
cp856 543
cp857 ??
cp860 ??
cp861 ??
cp862 ??
cp863 ??
cp864 ??
cp865 ??
cp866 544
cp869 ??
cp874 545
cp8859_1 546
cp8859_10 ??
cp8859_11 ??
cp8859_13 ??
cp8859_14 ??
cp8859_15555 ??
cp8859_16 ??
cp8859_2 547
cp8859_3 ??
cp8859_4 ??
cp8859_5 548
CHAPTER 39. REFERENCE FOR UNIT ’CPALL’
39.2 Overview
The cpall unit registers all known single-byte codepages: 1251 (555), 866 (555), ISO 8856-5
(555) (cyrillic), 8859-1 (555), 8859-2 (555), 1253 (555) (greek), 850 (555), 437 (555), 1252 (555),
646 (555), 874 (555), 856 (555), 1250 (555), 1254 (555), 1255 (555), 1256 (555), 1257 (555), 1258
(555), 852 (555).
This unit does not contain any routines. It simply uses the other units so all corresponding code pages
are registered.
556
Chapter 40
Name Page
System 1331
40.2 Overview
This chapter describes the CRT unit for Free Pascal, under all of 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 work correctly.
557
CHAPTER 40. REFERENCE FOR UNIT ’CRT’
Blink = 128
Blink attribute
Blue = 1
Brown = 6
BW40 = 0
BW80 = 2
C40 = CO40
C80 = CO80
CO40 = 1
CO80 = 3
ConsoleMaxX = 1024
ConsoleMaxY = 1024
Cyan = 3
558
CHAPTER 40. REFERENCE FOR UNIT ’CRT’
DarkGray = 8
Flushing = False
Font8x8 = 256
Green = 2
LightBlue = 9
LightCyan = 11
LightGray = 7
LightGreen = 10
LightMagenta = 13
LightRed = 12
Magenta = 5
Mono = 7
Red = 4
559
CHAPTER 40. REFERENCE FOR UNIT ’CRT’
ScreenHeight : LongInt = 25
ScreenWidth : LongInt = 80
White = 15
Yellow = 14
40.3.2 Types
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.3.3 Variables
CheckBreak : Boolean
CheckEOF : Boolean
CheckSnow : Boolean
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.
560
CHAPTER 40. REFERENCE FOR UNIT ’CRT’
The TextAttr variable controls the attributes with which characters are written to screen.
The upper byte of WindMax contains the Y coordinate while the lower byte contains the X coordi-
nate. The use of this variable is deprecated, use WindMaxX and WindMaxY instead.
WindMaxX : DWord
WindMaxY : DWord
WindMin : Word = $0
The upper byte of WindMin contains the Y coordinate while the lower byte contains the X coordi-
nate. The use of this variable is deprecated, use WindMinX and WindMinY instead.
WindMinX : DWord
WindMinY : DWord
Description: AssignCrt Assigns a file F to the console. Everything written to the file F goes to the console
instead. If the console contains a window, everything is written to the window instead.
Errors: None.
See also: Window (572)
Listing: ./crtex/ex1.pp
561
CHAPTER 40. REFERENCE FOR UNIT ’CRT’
Program Example1 ;
uses C r t ;
{ Program t o demonstrate t h e A s s i g n C r t f u n c t i o n . }
var
F : Text ;
begin
AssignCrt ( F ) ;
Rewrite ( F ) ; { Don ' t f o r g e t t o open f o r o u t p u t ! }
WriteLn ( F , ' T h i s i s w r i t t e n t o t h e Assigned F i l e ' ) ;
Close ( F ) ;
end .
40.4.2 ClrEol
Synopsis: Clear from cursor position till end of line.
Errors: None.
See also: DelLine (564), InsLine (566), ClrScr (563)
Listing: ./crtex/ex9.pp
Program Example9 ;
uses C r t ;
{ Program t o demonstrate t h e C l r E o l f u n c t i o n . }
var
I , J : integer ;
begin
For I :=1 to 15 do
For J :=1 to 80 do
begin
gotoxy ( j , i ) ;
Write ( j mod 1 0 ) ;
end ;
Window ( 5 , 5 , 7 5 , 1 2 ) ;
Write ( ' T h i s l i n e w i l l be c l e a r e d from ' ,
' here t i l l t h e r i g h t o f t h e window ' ) ;
GotoXY ( 2 7 ,WhereY ) ;
ReadKey ;
ClrEol ;
WriteLn ;
end .
562
CHAPTER 40. REFERENCE FOR UNIT ’CRT’
40.4.3 ClrScr
Synopsis: Clear current window.
Errors: None.
See also: Window (572)
Listing: ./crtex/ex8.pp
Program Example8 ;
uses C r t ;
{ Program t o demonstrate t h e C l r S c r f u n c t i o n . }
begin
W r i t e l n ( ' Press any key t o c l e a r t h e screen ' ) ;
ReadKey ;
ClrScr ;
W r i t e l n ( ' Have f u n w i t h t h e c l e a r e d screen ' ) ;
end .
40.4.4 cursorbig
Synopsis: Show big cursor
40.4.5 cursoroff
Synopsis: Hide cursor
Declaration: procedure cursoroff
Visibility: default
Description: CursorOff switches the cursor off (i.e. the cursor is no longer visible). Not implemented on
unixes.
Errors: None.
563
CHAPTER 40. REFERENCE FOR UNIT ’CRT’
40.4.6 cursoron
Synopsis: Display cursor
Declaration: procedure cursoron
Visibility: default
Description: CursorOn switches the cursor on. Not implemented on unixes.
Errors: None.
See also: CursorBig (563), CursorOff (563)
40.4.7 Delay
Synopsis: Delay program execution.
Declaration: procedure Delay(MS: Word)
Visibility: default
Description: Delay waits a specified number of milliseconds. The number of specified seconds is an approxi-
mation, and may be off a lot, if system load is high.
Errors: None
See also: Sound (569), NoSound (568)
Listing: ./crtex/ex15.pp
Program Example15 ;
uses C r t ;
40.4.8 DelLine
Synopsis: Delete line at cursor position.
Declaration: procedure DelLine
Visibility: default
Description: DelLine removes the current line. Lines following the current line are scrolled 1 line up, and an
empty line is inserted at the bottom of the current window. The cursor doesn’t move.
Errors: None.
564
CHAPTER 40. REFERENCE FOR UNIT ’CRT’
Listing: ./crtex/ex11.pp
Program Example10 ;
uses C r t ;
{ Program t o demonstrate t h e I n s L i n e f u n c t i o n . }
begin
ClrScr ;
WriteLn ;
WriteLn ( ' Line 1' );
WriteLn ( ' Line 2' );
WriteLn ( ' Line 2' );
WriteLn ( ' Line 3' );
WriteLn ;
WriteLn ( ' 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.4.9 GotoXY
Synopsis: Set cursor position on screen.
Declaration: procedure GotoXY(X: tcrtcoord; Y: tcrtcoord)
Visibility: default
Description: GotoXY positions the cursor at (X,Y), X in horizontal, Y in vertical direction relative to the origin
of the current window. The origin is located at (1,1), the upper-left corner of the window.
Errors: None.
Listing: ./crtex/ex6.pp
Program Example6 ;
uses C r t ;
begin
ClrScr ;
GotoXY ( 1 0 , 1 0 ) ;
Write ( ' 10 ,10 ' ) ;
GotoXY ( 7 0 , 2 0 ) ;
Write ( ' 70 ,20 ' ) ;
GotoXY ( 1 , 2 2 ) ;
end .
565
CHAPTER 40. REFERENCE FOR UNIT ’CRT’
40.4.10 HighVideo
Synopsis: Switch to highlighted text mode
Errors: None.
See also: TextColor (570), TextBackground (569), LowVideo (567), NormVideo (568)
Listing: ./crtex/ex14.pp
Program Example14 ;
uses C r t ;
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.4.11 InsLine
Synopsis: Insert an empty line at cursor position
Declaration: procedure InsLine
Visibility: default
Description: InsLine inserts an empty line at the current cursor position. Lines following the current line are
scrolled 1 line down, causing the last line to disappear from the window. The cursor doesn’t move.
Errors: None.
Listing: ./crtex/ex10.pp
Program Example10 ;
uses C r t ;
{ Program t o demonstrate t h e I n s L i n e f u n c t i o n . }
begin
ClrScr ;
WriteLn ;
WriteLn ( ' L i n e 1 ' ) ;
WriteLn ( ' L i n e 3 ' ) ;
WriteLn ;
566
CHAPTER 40. REFERENCE FOR UNIT ’CRT’
40.4.12 KeyPressed
Synopsis: Check if there is a keypress in the keybuffer
Declaration: function KeyPressed : Boolean
Visibility: default
Description: Keypressed scans the keyboard buffer and sees if a key has been pressed. If this is the case, True
is returned. If not, False is returned. The Shift, Alt, Ctrl keys are not reported. The key is
not removed from the buffer, and can hence still be read after the KeyPressed function has been
called.
Errors: None.
Listing: ./crtex/ex2.pp
Program Example2 ;
uses C r t ;
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.4.13 LowVideo
Synopsis: Switch to low intensity colors.
Declaration: procedure LowVideo
Visibility: default
Description: LowVideo switches the output to non-highlighted text. (It clears the high intensity bit of the video
attribute)
For an example, see HighVideo (566)
Errors: None.
See also: TextColor (570), TextBackground (569), HighVideo (566), NormVideo (568)
567
CHAPTER 40. REFERENCE FOR UNIT ’CRT’
40.4.14 NormVideo
Synopsis: Return to normal (startup) modus
40.4.15 NoSound
Synopsis: Stop system speaker
Declaration: procedure NoSound
Visibility: default
Description: NoSound stops the speaker sound. This call is not supported on all operating systems.
Errors: None.
See also: Sound (569)
Listing: ./crtex/ex16.pp
Program Example16 ;
uses C r t ;
var
i : longint ;
begin
WriteLn ( ' You w i l l hear some tones from your speaker ' ) ;
i :=0;
while ( i <15000) do
begin
inc ( i , 5 0 0 ) ;
Sound ( i ) ;
Delay ( 1 0 0 ) ;
end ;
WriteLn ( ' Q u i e t now ! ' ) ;
NoSound ; { Stop n o i s e }
end .
40.4.16 ReadKey
Synopsis: Read key from keybuffer
568
CHAPTER 40. REFERENCE FOR UNIT ’CRT’
Visibility: default
Description: ReadKey reads 1 key from the keyboard buffer, and returns this. If an extended or function key has
been pressed, then the zero ASCII code is returned. You can then read the scan code of the key with
a second ReadKey call.
Key mappings under Linux can cause the wrong key to be reported by ReadKey, so caution is
needed when using ReadKey.
Errors: None.
See also: KeyPressed (567)
Listing: ./crtex/ex3.pp
Program Example3 ;
uses C r t ;
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
#75 : WriteLn ( ' L e f t ' ) ;
#77 : WriteLn ( ' R i g h t ' ) ;
end ;
end ;
#27 : WriteLn ( 'ESC ' ) ;
end ;
u n t i l ch=#27 { Esc }
end .
40.4.17 Sound
Synopsis: Sound system speaker
Errors: None.
See also: NoSound (568)
40.4.18 TextBackground
Synopsis: Set text background
569
CHAPTER 40. REFERENCE FOR UNIT ’CRT’
Listing: ./crtex/ex13.pp
Program Example13 ;
uses C r t ;
begin
T e x t C o l o r ( White ) ;
WriteLn ( ' T h i s i s w r i t t e n i n w i t h t h e d e f a u l t background c o l o r ' ) ;
TextBackground ( Green ) ;
WriteLn ( ' T h i s i s w r i t t e n i n w i t h a Green background ' ) ;
TextBackground ( Brown ) ;
WriteLn ( ' T h i s i s w r i t t e n i n w i t h a Brown background ' ) ;
TextBackground ( Black ) ;
WriteLn ( ' Back w i t h a b l a c k background ' ) ;
end .
40.4.19 TextColor
Synopsis: Set text color
Declaration: procedure TextColor(Color: Byte)
Visibility: default
Description: TextColor sets the foreground color to CL. CL can be one of the predefined color constants.
Errors: None.
See also: TextBackground (569), HighVideo (566), LowVideo (567), NormVideo (568)
Listing: ./crtex/ex12.pp
Program Example12 ;
uses C r t ;
{ Program t o demonstrate t h e T e x t C o l o r f u n c t i o n . }
begin
WriteLn ( ' T h i s i s w r i t t e n i n the d e f a u l t c o l o r ' ) ;
T e x t C o l o r ( Red ) ;
WriteLn ( ' T h i s i s w r i t t e n i n Red ' ) ;
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 White ' ) ;
TextColor ( LightBlue ) ;
WriteLn ( ' T h i s i s w r i t t e n i n L i g h t Blue ' ) ;
end .
570
CHAPTER 40. REFERENCE FOR UNIT ’CRT’
40.4.20 TextMode
Synopsis: Set screen mode.
40.4.21 WhereX
Synopsis: Return X (horizontal) cursor position
Declaration: function WhereX : tcrtcoord
Visibility: default
Description: WhereX returns the current X-coordinate of the cursor, relative to the current window. The origin
is (1,1), in the upper-left corner of the window.
Errors: None.
See also: GotoXY (565), WhereY (571), Window (572)
Listing: ./crtex/ex7.pp
Program Example7 ;
uses C r t ;
begin
W r i t e l n ( ' Cursor p o s t i o n : X= ' ,WhereX , ' Y= ' ,WhereY ) ;
end .
40.4.22 WhereY
Synopsis: Return Y (vertical) cursor position
Declaration: function WhereY : tcrtcoord
Visibility: default
Description: WhereY returns the current Y-coordinate of the cursor, relative to the current window. The origin is
(1,1), in the upper-left corner of the window.
Errors: None.
See also: GotoXY (565), WhereX (571), Window (572)
Listing: ./crtex/ex7.pp
571
CHAPTER 40. REFERENCE FOR UNIT ’CRT’
Program Example7 ;
uses C r t ;
begin
W r i t e l n ( ' Cursor p o s t i o n : X= ' ,WhereX , ' Y= ' ,WhereY ) ;
end .
40.4.23 Window
Synopsis: Create new window on screen.
Declaration: procedure Window(X1: Byte; Y1: Byte; X2: Byte; Y2: Byte)
Visibility: default
Description: Window creates a window on the screen, to which output will be sent. (X1,Y1) are the coordinates
of the upper left corner of the window, (X2,Y2) are the coordinates of the bottom right corner of the
window. These coordinates are relative to the entire screen, with the top left corner equal to (1,1).
Further coordinate operations, except for the next Window call, are relative to the window’s top left
corner.
Errors: None.
See also: GotoXY (565), WhereX (571), WhereY (571), ClrScr (563)
Listing: ./crtex/ex5.pp
Program Example5 ;
uses C r t ;
begin
ClrScr ;
WriteLn ( ' C r e a t i n g a window from 30 ,10 t o 50 ,20 ' ) ;
Window ( 3 0 , 1 0 , 5 0 , 2 0 ) ;
WriteLn ( 'We are now w r i t i n g i n t h i s s m a l l window we j u s t created , we ' +
' can ' ' t g e t o u t s i d e i t when w r i t i n g l o n g l i n e s l i k e t h i s one ' ) ;
Write ( ' Press any key t o c l e a r t h e window ' ) ;
ReadKey ;
ClrScr ;
Write ( ' The window i s c l e a r e d , press any key t o r e s t o r e t o f u l l s c r e e n ' ) ;
ReadKey ;
{ F u l l Screen i s 80x25 }
Window ( 1 , 1 , 8 0 , 2 5 ) ;
Clrscr ;
W r i t e l n ( ' Back i n F u l l Screen ' ) ;
end .
40.5 TCharAttr
TCharAttr = packed record
572
CHAPTER 40. REFERENCE FOR UNIT ’CRT’
ch : Char;
attr : Byte;
end
573
Chapter 41
Name Page
System 1331
41.2 Overview
The CThreads unit initializes the system unit’s 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 doesn’t offer any API by itself: the initialization section of the unit just initializes the ThreadManager
record in the System (1331) unit. This is done using the SetCThreadManager (575) 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.
574
CHAPTER 41. REFERENCE FOR UNIT ’CTHREADS’
Description: SetCThreadManager actually sets the thread manager to the C thread manager. It can be called
to re-set the thread manager if the thread manager was set to some other thread manager during the
life-time of the program.
575
Chapter 42
Name Page
System 1331
unixtype 2087
42.2 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.
C boolean (longbool)
cchar = UnixType.cchar
cdouble = UnixType.cdouble
576
CHAPTER 42. REFERENCE FOR UNIT ’CTYPES’
cfloat = UnixType.cfloat
cint = UnixType.cint
cint16 = UnixType.cint16
cint32 = UnixType.cint32
cint64 = UnixType.cint64
64-bit integer
cint8 = UnixType.cint8
clong = UnixType.clong
clongdouble = Double
clonglong = UnixType.clonglong
coff_t = UnixType.TOff
cschar = UnixType.cschar
cshort = UnixType.cshort
csigned = UnixType.csigned
577
CHAPTER 42. REFERENCE FOR UNIT ’CTYPES’
csint = UnixType.csint
csize_t = UnixType.size_t
cslong = UnixType.cslong
cslonglong = UnixType.cslonglong
csshort = UnixType.csshort
cuchar = UnixType.cuchar
cuint = UnixType.cuint
cuint16 = UnixType.cuint16
cuint32 = UnixType.cuint32
cuint64 = UnixType.cuint64
cuint8 = UnixType.cuint8
culong = UnixType.culong
culonglong = UnixType.culonglong
578
CHAPTER 42. REFERENCE FOR UNIT ’CTYPES’
cunsigned = UnixType.cunsigned
cushort = UnixType.cushort
pcbool = UnixType.pcbool
pcchar = UnixType.pcchar
pcdouble = UnixType.pcdouble
pcfloat = UnixType.pcfloat
pcint = UnixType.pcint
pcint16 = UnixType.pcint16
pcint32 = UnixType.pcint32
pcint64 = UnixType.pcint64
pcint8 = UnixType.pcint8
pclong = UnixType.pclong
Pclongdouble = ^clongdouble
579
CHAPTER 42. REFERENCE FOR UNIT ’CTYPES’
pclonglong = UnixType.pclonglong
pcschar = UnixType.pcschar
pcshort = UnixType.pcshort
pcsigned = UnixType.pcsigned
pcsint = UnixType.pcsint
pcsize_t = UnixType.psize_t
pcslong = UnixType.pcslong
pcslonglong = UnixType.pcslonglong
pcsshort = UnixType.pcsshort
pcuchar = UnixType.pcuchar
pcuint = UnixType.pcuint
pcuint16 = UnixType.pcuint16
pcuint32 = UnixType.pcuint32
580
CHAPTER 42. REFERENCE FOR UNIT ’CTYPES’
pcuint64 = UnixType.pcuint64
pcuint8 = UnixType.pcuint8
pculong = UnixType.pculong
pculonglong = UnixType.pculonglong
pcunsigned = UnixType.pcunsigned
pcushort = UnixType.pcushort
581
Chapter 43
Name Page
System 1331
43.2 Overview
The cwstring unit offers no API by itself: it just initializes the widestring manager record of the
system (1331) 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;
582
CHAPTER 43. REFERENCE FOR UNIT ’CWSTRING’
Description: SetCWidestringManager actually sets the widestring manager record of the system unit. It is
called automatically by the initialization section of the unit.
583
Chapter 44
Name Page
Math 980
System 1331
sysutils 1598
44.2 Overview
DateUtils contains a large number of date/time manipulation routines, all based on the TDateTime
type. There are routines for date/time math, for comparing dates and times, for composing dates and
decomposing dates in their constituent parts.
Average number of days in a month, measured over a year. Used in MonthsBetween (634).
Average number of days in a year, measured over 4 years. Used in YearsBetween (679).
DayFriday = 5
DayMonday = 1
584
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
DaySaturday = 6
DaysPerWeek = 7
Array with number of days in a year. The Boolean index indicates whether it is a leap year or not.
DaySunday = 7
DayThursday = 4
DayTuesday = 2
DayWednesday = 3
MonthApril = 4
MonthAugust = 8
MonthDecember = 12
MonthFebruary = 2
MonthJanuary = 1
MonthJuly = 7
MonthJune = 6
MonthMarch = 3
585
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
MonthMay = 5
MonthNovember = 11
MonthOctober = 10
MonthSeptember = 9
MonthsPerYear = 12
RecodeLeaveFieldAsIs = High(Word)
WeeksPerFortnight = 2
YearsPerCentury = 100
YearsPerDecade = 10
YearsPerMillennium = 1000
586
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
< 0if the day part of A is earlier than the day part of B.
0if A and B are the on same day (times may differ) .
> 0if the day part of A is later than the day part of B.
See also: CompareTime (589), CompareDateTime (588), SameDate (644), SameTime (646), SameDateTime
(645)
Listing: ./datutex/ex99.pp
Program Example99 ;
Uses S y s U t i l s , D a t e U t i l s ;
Const
Fmt = ' dddd dd mmmm yyyy ' ;
Var
Cmp : I n t e g e r ;
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 ) ;
587
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
Test (D−1,D ) ;
Test (D+OneSecond ,D ) ;
Test (D−OneSecond ,D ) ;
Test (N+OneSecond ,N ) ;
Test (N−OneSecond ,N ) ;
End .
44.4.2 CompareDateTime
Synopsis: Compare 2 dates, taking into account the time of day
Declaration: function CompareDateTime(const A: TDateTime; const B: TDateTime)
: TValueRelationship
Visibility: default
Description: CompareDateTime compares two timestamps A and B and returns the following results:
See also: CompareTime (589), CompareDate (587), SameDate (644), SameTime (646), SameDateTime (645)
Listing: ./datutex/ex98.pp
Program Example98 ;
Uses S y s U t i l s , D a t e U t i l s ;
Const
Fmt = ' dddd dd mmmm yyyy hh : nn : ss . zzz ' ;
Var
Cmp : I n t e g e r ;
begin
Write ( FormatDateTime ( Fmt , D1 ) , ' i s ' );
Cmp: = CompareDateTime ( D1 , D2 ) ;
I f Cmp<0 then
w r i t e ( ' e a r l i e r than ' )
else i f Cmp>0 then
Write ( ' l a t e r than ' )
else
Write ( ' equal t o ' ) ;
W r i t e l n ( FormatDateTime ( Fmt , D2 ) ) ;
end ;
Var
D, N : TDateTime ;
Begin
588
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
D: = Today ;
N: =Now;
Test (D,D ) ;
Test (N,N ) ;
Test (D+1 ,D ) ;
Test (D−1,D ) ;
Test (D+OneSecond ,D ) ;
Test (D−OneSecond ,D ) ;
Test (N+OneSecond ,N ) ;
Test (N−OneSecond ,N ) ;
End .
44.4.3 CompareTime
Synopsis: Compares two times of the day, disregarding the date part.
< 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 (588), CompareDate (587), SameDate (644), SameTime (646), SameDateTime
(645)
Listing: ./datutex/ex100.pp
Program Example100 ;
Uses S y s U t i l s , D a t e U t i l s ;
Const
Fmt = ' dddd dd mmmm yyyy hh : nn : ss . zzz ' ;
Var
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 ' ) ;
589
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
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 (N−1,N ) ;
Test (N+OneSecond ,N ) ;
Test (N−OneSecond ,N ) ;
End .
44.4.4 DateInRange
Synopsis: Checks whether a date value is in a given rang
Declaration: function DateInRange(ADate: TDate; AStartDate: TDate; AEndDate: TDate;
AInclusive: Boolean) : Boolean
Visibility: default
Description: DateInRange checks whether the value ADate lies between AStartDate and AEndDate,
and returns True if it is. When AInclusive is True (the default), then the limits are included.
When AInclusive is False, the limits are excluded. Only the date part of the 3 parameters is
considered.
Errors: The AStartDate value must be before AEndDate, but no check is performed.
See also: TimeInRange (656), DateTimeInRange (591)
44.4.5 DateOf
Synopsis: Extract the date part from a TDateTime indication.
Declaration: function DateOf(const AValue: TDateTime) : TDateTime
Visibility: default
Description: DateOf extracts the date part from AValue and returns the result.
Since the TDateTime is actually a double with the date part encoded in the integer part, this oper-
ation corresponds to a call to Trunc.
See also: TimeOf (656), YearOf (678), MonthOf (634), DayOf (593), HourOf (608), MinuteOf (630), Secon-
dOf (647), MilliSecondOf (625)
Listing: ./datutex/ex1.pp
Program Example1 ;
Uses S y s U t i l s , D a t e U t i l s ;
590
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
Begin
W r i t e l n ( ' Date i s : ' , DateTimeToStr ( DateOf (Now ) ) ) ;
End .
44.4.6 DateTimeInRange
Synopsis: Checks whether a date/time value is in a given range
Declaration: function DateTimeInRange(ADateTime: TDateTime;
AStartDateTime: TDateTime;
AEndDateTime: TDateTime; aInclusive: Boolean)
: Boolean
Visibility: default
Description: DateTimeInRange checks whether the value ADateTime lies between AStartDateTime
and AEndDateTime, and returns True if it is. When AInclusive is True (the default), then
the limits are included. When AInclusive is False, the limits are excluded.
Errors: The AStartDateTime value must be before AEndDateTime, but no check is performed.
See also: DateInRange (590), TimeInRange (656)
44.4.7 DateTimeToDosDateTime
Synopsis: Convert TDateTime format to DOS date/time format
Declaration: function DateTimeToDosDateTime(const AValue: TDateTime) : LongInt
Visibility: default
Description: DateTimeToDosDatetime takes Value, a TDateTime formatted timestamp, and recodes it
to a MS-DOS encoded date/time value. This is a longint with the date/time encoded in the bits as:
0-4Seconds divided by 2
5-10Minutes
11-15Hours
16-20Day
21-24Month
25-31Years since 1980
See also: DosDateTimeToDateTime (601)
44.4.8 DateTimeToJulianDate
Synopsis: Converts a TDateTime value to a Julian date representation
Declaration: function DateTimeToJulianDate(const AValue: TDateTime) : Double
Visibility: default
Description: DateTimeToJulianDate converts the AValue date/time indication to a Julian (as opposed to
Gregorian) date.
See also: JulianDateToDateTime (624), TryJulianDateToDateTime (664), DateTimeToModifiedJulianDate (592),
TryModifiedJulianDateToDateTime (664)
591
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
44.4.9 DateTimeToMac
Synopsis: Convert a TDateTime timestamp to a Mac timestamp
Declaration: function DateTimeToMac(const AValue: TDateTime) : Int64
Visibility: default
Description: DateTimeToMac converts the TDateTime value AValue to a valid Mac timestamp indication
and returns the result.
Errors: None.
See also: UnixTimeStampToMac (665), MacToDateTime (625), MacTimeStampToUnix (625)
44.4.10 DateTimeToModifiedJulianDate
Synopsis: Convert a TDateTime value to a modified Julian date representation
Declaration: function DateTimeToModifiedJulianDate(const AValue: TDateTime) : Double
Visibility: default
Description: Not yet implemented.
Errors: Currently, trying to use this function will raise an exception.
See also: DateTimeToJulianDate (591), JulianDateToDateTime (624), TryJulianDateToDateTime (664), Try-
ModifiedJulianDateToDateTime (664)
44.4.11 DateTimeToUnix
Synopsis: Convert a TDateTime value to Unix epoch time
Declaration: function DateTimeToUnix(const AValue: TDateTime; AInputIsUTC: Boolean)
: Int64
Visibility: default
Description: DateTimeToUnix converts a TDateTime value to a epoch time (i.e. the number of seconds
elapsed since 1/1/1970).
See also: UnixToDateTime (666)
44.4.12 DateToISO8601
Synopsis: Converts a TDateTime value to ISO 8601 date/time format
Declaration: function DateToISO8601(const ADate: TDateTime; AInputIsUTC: Boolean)
: string
Visibility: default
Description: DateToISO8601 is a String function used to convert the TDateTime value in ADate to ISO
8601 date/time notation.
ADate contains the native TDateTime value converted in the function.
AInputisUTC indicates if the value in ADate represents a date/time value for the UTC time
zone. When AInputIsUTC contains True, the ’Z’ (Zulu time) time zone designation is used in the
592
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
converted ISO 8601 value. Otherwise, the time zone is expressed as a positive or negative number of
hours and minutes (such as "-04:00") in the return value.
DateToISO8601 calls GetLocalTimeOffset to determine the time zone offset in use on the
local computer. The integer offset is used to adjust the value in ADate to the UTC time zone when
necessary.
The return value contains the adjusted value in ADate formatted using the notation:
•yyyy-mm-ddThh:nn:ss.zzz±hh:nn or
•yyyy-mm-ddThh:nn:ss.zzzZ for Zulu time
Use ISO8601ToDate to convert the return value back to a native TDateTime type.
See also: ISO8601ToDate (617)
44.4.13 DayOf
Synopsis: Extract the day (of month) part from a TDateTime 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 (678)
See also: YearOf (678), WeekOf (666), MonthOf (634), HourOf (608), MinuteOf (630), SecondOf (647),
MilliSecondOf (625)
44.4.14 DayOfTheMonth
Synopsis: Extract the day (of month) part of a TDateTime value
Declaration: function DayOfTheMonth(const AValue: TDateTime) : Word
Visibility: default
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 (666) function.
See also: DayOfTheYear (594), WeekOfTheMonth (666), HourOfTheMonth (609), MinuteOfTheMonth (631),
SecondOfTheMonth (648), MilliSecondOfTheMonth (627)
44.4.15 DayOfTheWeek
Synopsis: Extracts the day of the week from a TDateTime value
Declaration: function DayOfTheWeek(const AValue: TDateTime) : Word
Visibility: default
Description: DayOfTheWeek returns the number of days that have passed since the start of the week till the
moment indicated by AValue. This is a one-based number, i.e. the first day of the week will return
1.
593
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
See also: DayOfTheYear (594), DayOfTheMonth (593), HourOfTheWeek (609), MinuteOfTheWeek (631),
SecondOfTheWeek (649), MilliSecondOfTheWeek (627)
Listing: ./datutex/ex42.pp
Program Example42 ;
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 ( ' Day o f t h e Week : ' , DayOfTheWeek (N ) ) ;
Writeln ( ' Hour o f t h e Week : ' , HourOfTheWeek (N ) ) ;
Writeln ( ' Minute o f t h e Week : ' , MinuteOfTheWeek (N ) ) ;
Writeln ( ' Second o f t h e Week : ' , SecondOfTheWeek (N ) ) ;
Writeln ( ' M i l l i S e c o n d o f t h e Week : ' ,
MilliSecondOfTheWeek (N ) ) ;
End .
44.4.16 DayOfTheYear
Synopsis: Extracts the day of the year from a TDateTime value
44.4.17 DaysBetween
Synopsis: Number of whole days between two TDateTime values.
Listing: ./datutex/ex58.pp
594
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
Program Example58 ;
Uses S y s U t i l s , D a t e U t i l s ;
begin
Write ( ' Number o f days between ' ) ;
Write ( DateTimeToStr ( AThen ) , ' and ' , DateTimeToStr (ANow ) ) ;
W r i t e l n ( ' : ' , DaysBetween (ANow, AThen ) ) ;
end ;
Var
D1 , D2 : TDateTime ;
Begin
D1: =Now;
D2: = Today −23/24;
Test ( D1 , D2 ) ;
D2: = Today −1;
Test ( D1 , D2 ) ;
D2: = Today −25/24;
Test ( D1 , D2 ) ;
D2: = Today −26/24;
Test ( D1 , D2 ) ;
D2: = Today −5.4;
Test ( D1 , D2 ) ;
D2: = Today −2.5;
Test ( D1 , D2 ) ;
End .
44.4.18 DaysInAMonth
Synopsis: Number of days in a month of a certain year.
Declaration: function DaysInAMonth(const AYear: Word; const AMonth: Word) : Word
Visibility: default
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 (668), WeeksInYear (669), DaysInYear (597), DaysInAYear (596), DaysInMonth
(596)
Listing: ./datutex/ex17.pp
Program Example17 ;
Uses S y s U t i l s , D a t e U t i l s ;
Var
Y ,M : Word ;
595
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
Begin
For Y:=1992 to 2010 do
For M:=1 to 12 do
W r i t e l n ( LongMonthNames [m] , ' ' ,Y , ' has ' , DaysInAMonth ( Y ,M) , ' days . ' ) ;
End .
44.4.19 DaysInAYear
Synopsis: Number of days in a particular year.
Declaration: function DaysInAYear(const AYear: Word) : Word
Visibility: default
Description: DaysInAYear returns the number of weeks in the year AYear. The return value is either 365 or
366.
See also: WeeksInAYear (668), WeeksInYear (669), DaysInYear (597), DaysInMonth (596), DaysInAMonth
(595)
Listing: ./datutex/ex15.pp
Program Example15 ;
Uses S y s U t i l s , D a t e U t i l s ;
Var
Y : Word ;
Begin
For Y:=1992 to 2010 do
W r i t e l n ( Y , ' has ' , DaysInAYear (Y ) , ' days . ' ) ;
End .
44.4.20 DaysInMonth
Synopsis: Return the number of days in the month in which a date occurs.
See also: WeeksInAYear (668), WeeksInYear (669), DaysInYear (597), DaysInAYear (596), DaysInAMonth
(595)
Listing: ./datutex/ex16.pp
Program Example16 ;
596
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
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:=1992 to 2010 do
For M:=1 to 12 do
W r i t e l n ( LongMonthNames [m] , ' ' ,Y , ' has ' , DaysInMonth ( EncodeDate ( Y ,M, 1 ) ) , ' days . ' ) ;
End .
44.4.21 DaysInYear
Synopsis: Return the number of days in the year in which a date occurs.
See also: WeeksInAYear (668), WeeksInYear (669), DaysInAYear (596), DaysInMonth (596), DaysInAMonth
(595)
Listing: ./datutex/ex14.pp
Program Example14 ;
Uses S y s U t i l s , D a t e U t i l s ;
Var
Y : Word ;
Begin
For Y:=1992 to 2010 do
W r i t e l n ( Y , ' has ' , DaysInYear ( EncodeDate ( Y , 1 , 1 ) ) , ' days . ' ) ;
End .
44.4.22 DaySpan
Synopsis: Calculate the approximate number of days between two TDateTime 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 (680), MonthSpan (635), WeekSpan (670), HourSpan (611), MinuteSpan (633), Sec-
ondSpan (650), MilliSecondSpan (629), DaysBetween (594)
597
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
Listing: ./datutex/ex66.pp
Program Example66 ;
Uses S y s U t i l s , D a t e U t i l s ;
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.23 DecodeDateDay
Synopsis: Decode a TDateTime value in year and year of day.
Declaration: procedure DecodeDateDay(const AValue: TDateTime; out AYear: Word;
out ADayOfYear: Word)
Visibility: default
Description: DecodeDateDay decomposes the date indication in AValue and returns the various components
in AYear, ADayOfYear.
See also: EncodeDateTime (602), EncodeDateMonthWeek (602), EncodeDateWeek (603), EncodeDateDay
(601), DecodeDateTime (599), DecodeDateWeek (600), DecodeDateMonthWeek (599)
Listing: ./datutex/ex83.pp
Program Example83 ;
Uses S y s U t i l s , D a t e U t i l s ;
598
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
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.24 DecodeDateMonthWeek
Synopsis: Decode a TDateTime 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 (602), EncodeDateMonthWeek (602), EncodeDateWeek (603), EncodeDateDay
(601), DecodeDateTime (599), DecodeDateWeek (600), DecodeDateDay (598)
Listing: ./datutex/ex85.pp
Program Example85 ;
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 .
44.4.25 DecodeDateTime
Synopsis: Decode a TDateTime value in a date and time value
Declaration: procedure DecodeDateTime(const AValue: TDateTime; out AYear: Word;
out AMonth: Word; out ADay: Word;
out AHour: Word; out AMinute: Word;
out ASecond: Word; out AMilliSecond: Word)
Visibility: default
599
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
Description: DecodeDateTime decomposes the date/time indication in AValue and returns the various com-
ponents in AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond
See also: EncodeDateTime (602), EncodeDateMonthWeek (602), EncodeDateWeek (603), EncodeDateDay
(601), DecodeDateWeek (600), DecodeDateDay (598), DecodeDateMonthWeek (599)
Listing: ./datutex/ex79.pp
Program Example79 ;
Uses S y s U t i l s , D a t e U t i l s ;
Var
Y , Mo, D, H, Mi , S ,MS : Word ;
TS : TDateTime ;
Begin
DecodeDateTime (Now, Y , Mo, D, H, Mi , S ,MS) ;
TS: = EncodeDateTime ( Y , Mo, D, H, Mi , S ,MS) ;
W r i t e l n ( 'Now i s : ' , DateTimeToStr ( TS ) ) ;
End .
44.4.26 DecodeDateWeek
Synopsis: Decode a TDateTime value in a week of year and day of week.
Declaration: procedure DecodeDateWeek(const AValue: TDateTime; out AYear: Word;
out AWeekOfYear: Word; out ADayOfWeek: Word)
Visibility: default
Description: DecodeDateWeek decomposes the date indication in AValue and returns the various compo-
nents in AYear, AWeekOfYear, ADayOfWeek.
Listing: ./datutex/ex81.pp
Program Example81 ;
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 ) ;
TS: = EncodeDateWeek ( Y ,W, Dow ) ;
W r i t e l n ( ' Today i s : ' , DateToStr ( TS ) ) ;
End .
600
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
44.4.27 DecodeDayOfWeekInMonth
Synopsis: Decode a TDateTime value in year, month, day of week parts
Visibility: default
Description: DecodeDayOfWeekInMonth decodes the date AValue in a AYear, AMonth, ADayOfweek
and ANthDayOfweek. (This is the N-th time that this weekday occurs in the month, e.g. the third
Saturday of the month.)
See also: NthDayOfWeek (636), EncodeDateMonthWeek (602), #rtl.sysutils.DayOfWeek (1660), Encode-
DayOfWeekInMonth (603), TryEncodeDayOfWeekInMonth (660)
Listing: ./datutex/ex105.pp
Program Example105 ;
Uses S y s U t i l s , D a t e U t i l s ;
Var
Y ,M,NDoW,DoW : Word ;
D : TDateTime ;
Begin
DecodeDayOfWeekInMonth ( Date , Y ,M,NDoW,DoW) ;
D: = EncodeDayOfWeekInMonth ( Y ,M,NDoW,DoW) ;
Write ( DateToStr (D) , ' i s t h e ' ,NDow, '−t h ' ) ;
W r i t e l n ( formatdateTime ( ' dddd ' ,D) , ' o f t h e month . ' ) ;
End .
44.4.28 DosDateTimeToDateTime
Synopsis: Convert DOS date/time format to TDateTime format
44.4.29 EncodeDateDay
Synopsis: Encodes a year and day of year to a TDateTime value
601
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
Visibility: default
Description: EncodeDateDay encodes the values AYear and ADayOfYear to a date value and returns this
value.
For an example, see DecodeDateDay (598).
Errors: If any of the arguments is not valid, then an EConvertError exception is raised.
See also: EncodeDateMonthWeek (602), DecodeDateDay (598), EncodeDateTime (602), EncodeDateWeek
(603), TryEncodeDateTime (658), TryEncodeDateMonthWeek (658), TryEncodeDateWeek (659)
44.4.30 EncodeDateMonthWeek
Synopsis: Encodes a year, month, week of month and day of week to a TDateTime value
44.4.31 EncodeDateTime
Synopsis: Encodes a TDateTime value from all its parts
602
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
44.4.32 EncodeDateWeek
Synopsis: Encode a TDateTime value from a year, week and day of week triplet
Visibility: default
Description: EncodeDateWeek encodes the values AYear, AWeekOfYear and ADayOfWeek to a date
value and returns this value.
For an example, see DecodeDateWeek (600).
Errors: If any of the arguments is not valid, then an EConvertError exception is raised.
44.4.33 EncodeDayOfWeekInMonth
Synopsis: Encodes a year, month, week, day of week specification to a TDateTime value
Errors: If any of the values is not in range, then an EConvertError exception will be raised.
See also: NthDayOfWeek (636), EncodeDateMonthWeek (602), #rtl.sysutils.DayOfWeek (1660), Decode-
DayOfWeekInMonth (601), TryEncodeDayOfWeekInMonth (660)
44.4.34 EncodeTimeInterval
Synopsis: Encode an interval as a TDateTime value.
603
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
44.4.35 EndOfADay
Synopsis: Calculates a TDateTime value representing the end of a specified day
Visibility: default
Description: EndOfADay returns a TDateTime value with the date/time indication of the last moment (23:59:59.999)
of the day given by AYear, AMonth, ADay.
The day may also be indicated with a AYear, ADayOfYear pair.
See also: StartOfTheDay (654), StartOfADay (651), StartOfTheWeek (655), StartOfAWeek (652), StartOfA-
Month (652), StartOfTheMonth (654), EndOfTheWeek (607), EndOfAWeek (605), EndOfTheYear
(608), EndOfAYear (606), EndOfTheMonth (607), EndOfAMonth (604), EndOfTheDay (606)
Listing: ./datutex/ex39.pp
Program Example39 ;
Uses S y s U t i l s , D a t e U t i l s ;
Const
Fmt = ' " End o f t h e day : " dd mmmm yyyy hh : nn : ss ' ;
Var
Y ,M, D : Word ;
Begin
Y: = YearOf ( Today ) ;
M: = MonthOf ( Today ) ;
D: = DayOf ( Today ) ;
W r i t e l n ( FormatDateTime ( Fmt , EndOfADay ( Y ,M,D ) ) ) ;
DecodeDateDay ( Today , Y ,D ) ;
W r i t e l n ( FormatDateTime ( Fmt , EndOfADay ( Y ,D ) ) ) ;
End .
44.4.36 EndOfAMonth
Synopsis: Calculate a TDateTime 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.
See also: StartOfTheMonth (654), StartOfAMonth (652), EndOfTheMonth (607), EndOfTheYear (608), End-
OfAYear (606), StartOfAWeek (652), StartOfTheWeek (655)
Listing: ./datutex/ex31.pp
604
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
Program Example31 ;
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.37 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 (655), EndOfTheWeek (607), EndOfAWeek (605), StartOfAMonth (652), End-
OfTheYear (608), EndOfAYear (606), EndOfTheMonth (607), EndOfAMonth (604)
Listing: ./datutex/ex35.pp
Program Example35 ;
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 ) ;
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 .
605
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
44.4.38 EndOfAYear
Synopsis: Calculate a TDateTime value representing the last day of a year
Declaration: function EndOfAYear(const AYear: Word) : TDateTime
Visibility: default
Description: StartOfAYear returns a TDateTime value with the date of the last day of the year AYear
(December 31).
See also: StartOfTheYear (655), EndOfTheYear (608), EndOfAYear (606), EndOfTheMonth (607), EndOfA-
Month (604), StartOfAWeek (652), StartOfTheWeek (655)
Listing: ./datutex/ex27.pp
Program Example27 ;
Uses S y s U t i l s , D a t e U t i l s ;
Const
Fmt = ' " L a s t day o f t h i s year : " dd mmmm yyyy ' ;
Begin
W r i t e l n ( FormatDateTime ( Fmt , EndOfAYear ( YearOf ( Today ) ) ) ) ;
End .
44.4.39 EndOfTheDay
Synopsis: Calculate a TDateTime 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 (654), StartOfADay (651), StartOfTheWeek (655), StartOfAWeek (652), StartOfA-
Month (652), StartOfTheMonth (654), EndOfTheWeek (607), EndOfAWeek (605), EndOfTheYear
(608), EndOfAYear (606), EndOfTheMonth (607), EndOfAMonth (604), EndOfADay (604)
Listing: ./datutex/ex37.pp
Program Example37 ;
Uses S y s U t i l s , D a t e U t i l s ;
Const
Fmt = ' " End o f t h e day : " dd mmmm yyyy hh : nn : ss ' ;
Begin
W r i t e l n ( FormatDateTime ( Fmt , EndOfTheDay ( Today ) ) ) ;
End .
606
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
44.4.40 EndOfTheMonth
Synopsis: Calculate a TDateTime value representing the last day of the month, given a day in that month.
See also: StartOfAMonth (652), StartOfTheMonth (654), EndOfAMonth (604), EndOfTheYear (608), EndO-
fAYear (606), StartOfAWeek (652), StartOfTheWeek (655)
Listing: ./datutex/ex29.pp
Program Example29 ;
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.41 EndOfTheWeek
Synopsis: Calculate a TDateTime 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 (605) function.
See also: StartOfAWeek (652), StartOfTheWeek (655), EndOfAWeek (605), StartOfAMonth (652), EndOfTheYear
(608), EndOfAYear (606), EndOfTheMonth (607), EndOfAMonth (604)
Listing: ./datutex/ex33.pp
Program Example33 ;
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 .
607
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
44.4.42 EndOfTheYear
Synopsis: Calculate a TDateTime value representing the last day of a year, given a date in that year.
See also: StartOfAYear (653), StartOfTheYear (655), EndOfTheMonth (607), EndOfAMonth (604), StartO-
fAWeek (652), StartOfTheWeek (655), EndOfAYear (606)
Listing: ./datutex/ex25.pp
Program Example25 ;
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.43 HourOf
Synopsis: Extract the hour part from a TDateTime value.
Declaration: function HourOf(const AValue: TDateTime) : Word
Visibility: default
Description: HourOf returns the hour of the day part of the AValue date/time indication. It is a number between
0 and 23.
For an example, see YearOf (678)
See also: YearOf (678), WeekOf (666), MonthOf (634), DayOf (593), MinuteOf (630), SecondOf (647), Mil-
liSecondOf (625)
44.4.44 HourOfTheDay
Synopsis: Calculate the hour of a given TDateTime value
Declaration: function HourOfTheDay(const AValue: TDateTime) : Word
Visibility: default
Description: HourOfTheDay returns the number of hours that have passed since the start of the day till the
moment indicated by AValue. This is a zero-based number, i.e. 00:59:59 will return 0.
See also: HourOfTheYear (610), HourOfTheMonth (609), HourOfTheWeek (609), MinuteOfTheDay (630),
SecondOfTheDay (647), MilliSecondOfTheDay (626)
608
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
Listing: ./datutex/ex43.pp
Program Example43 ;
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 ( ' Hour o f t h e Day : ' , HourOfTheDay (N ) ) ;
Writeln ( ' Minute o f t h e Day : ' , MinuteOfTheDay (N ) ) ;
Writeln ( ' Second o f t h e Day : ' , SecondOfTheDay (N ) ) ;
Writeln ( ' M i l l i S e c o n d o f t h e Day : ' ,
MilliSecondOfTheDay (N ) ) ;
End .
44.4.45 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 (666) function.
44.4.46 HourOfTheWeek
Synopsis: Calculate the number of hours elapsed since the start of the week.
609
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
44.4.47 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 (667) function.
See also: WeekOfTheYear (667), DayOfTheYear (594), MinuteOfTheYear (631), SecondOfTheYear (649),
MilliSecondOfTheYear (628)
44.4.48 HoursBetween
Synopsis: Calculate the number of whole hours between two TDateTime 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 (679), MonthsBetween (634), WeeksBetween (668), DaysBetween (594), Minutes-
Between (632), SecondsBetween (649), MilliSecondsBetween (628)
Listing: ./datutex/ex59.pp
Program Example59 ;
Uses S y s U t i l s , D a t e U t i l s ;
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 ;
Begin
D1: =Now;
D2: =D1−(59 * OneMinute ) ;
Test ( D1 , D2 ) ;
D2: =D1−(61 * OneMinute ) ;
Test ( D1 , D2 ) ;
D2: =D1−(122 * OneMinute ) ;
Test ( D1 , D2 ) ;
D2: =D1−(306 * OneMinute ) ;
610
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
Test ( D1 , D2 ) ;
D2: =D1−(5.4 * OneHour ) ;
Test ( D1 , D2 ) ;
D2: =D1−(2.5 * OneHour ) ;
Test ( D1 , D2 ) ;
End .
44.4.49 HourSpan
Synopsis: Calculate the approximate number of hours between two TDateTime 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 (680), MonthSpan (635), WeekSpan (670), DaySpan (597), MinuteSpan (633), Sec-
ondSpan (650), MilliSecondSpan (629), HoursBetween (610)
Listing: ./datutex/ex67.pp
Program Example67 ;
Uses S y s U t i l s , D a t e U t i l s ;
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−(59 * OneMinute ) ;
Test ( D1 , D2 ) ;
D2: =D1−(61 * OneMinute ) ;
Test ( D1 , D2 ) ;
D2: =D1−(122 * OneMinute ) ;
Test ( D1 , D2 ) ;
D2: =D1−(306 * OneMinute ) ;
Test ( D1 , D2 ) ;
D2: =D1−(5.4 * OneHour ) ;
Test ( D1 , D2 ) ;
D2: =D1−(2.5 * OneHour ) ;
Test ( D1 , D2 ) ;
End .
611
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
44.4.50 IncDay
Synopsis: Increase a TDateTime value with a number of days.
Declaration: function IncDay(const AValue: TDateTime; const ANumberOfDays: Integer)
: TDateTime
function IncDay(const AValue: TDateTime) : TDateTime
Visibility: default
Description: IncDay adds ANumberOfDays days to AValue and returns the resulting date/time.ANumberOfDays
can be positive or negative.
See also: IncYear (615), #rtl.sysutils.IncMonth (1715), IncWeek (614), IncHour (612), IncMinute (613), Inc-
Second (614), IncMilliSecond (613)
Listing: ./datutex/ex74.pp
Program Example74 ;
Uses S y s U t i l s , D a t e U t i l s ;
Begin
W r i t e l n ( ' One Day from today i s ' , DateToStr ( IncDay ( Today , 1 ) ) ) ;
W r i t e l n ( ' One Day ago from today i s ' , DateToStr ( IncDay ( Today , − 1 ) ) ) ;
End .
44.4.51 IncHour
Synopsis: Increase a TDateTime value with a number of hours.
Declaration: function IncHour(const AValue: TDateTime; const ANumberOfHours: Int64)
: TDateTime
function IncHour(const AValue: TDateTime) : TDateTime
Visibility: default
Description: IncHour adds ANumberOfHours hours to AValue and returns the resulting date/time.ANumberOfHours
can be positive or negative.
See also: IncYear (615), #rtl.sysutils.IncMonth (1715), IncWeek (614), IncDay (612), IncMinute (613), Inc-
Second (614), IncMilliSecond (613)
Listing: ./datutex/ex75.pp
Program Example75
;
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 .
612
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
44.4.52 IncMilliSecond
Synopsis: Increase a TDateTime value with a number of milliseconds.
Declaration: function IncMilliSecond(const AValue: TDateTime;
const ANumberOfMilliSeconds: Int64) : TDateTime
function IncMilliSecond(const AValue: TDateTime) : TDateTime
Visibility: default
Description: IncMilliSecond adds ANumberOfMilliSeconds milliseconds to AValue and returns the
resulting date/time.ANumberOfMilliSeconds can be positive or negative.
See also: IncYear (615), #rtl.sysutils.IncMonth (1715), IncWeek (614), IncDay (612), IncHour (612), IncSec-
ond (614), IncMilliSecond (613)
Listing: ./datutex/ex78.pp
Program Example78 ;
{ T h i s program demonstrates t h e I n c M i l l i S e c o n d f u n c t i o n }
Uses S y s U t i l s , D a t e U t i l s ;
Begin
W r i t e l n ( ' One M i l l i S e c o n d from now i s ' , TimeToStr ( I n c M i l l i S e c o n d (Now, 1 ) ) ) ;
W r i t e l n ( ' One M i l l i S e c o n d ago from now i s ' , TimeToStr ( I n c M i l l i S e c o n d (Now, − 1 ) ) ) ;
End .
44.4.53 IncMinute
Synopsis: Increase a TDateTime value with a number of minutes.
Declaration: function IncMinute(const AValue: TDateTime;
const ANumberOfMinutes: Int64) : TDateTime
function IncMinute(const AValue: TDateTime) : TDateTime
Visibility: default
Description: IncMinute adds ANumberOfMinutes minutes to AValue and returns the resulting date/-
time.ANumberOfMinutes can be positive or negative.
See also: IncYear (615), #rtl.sysutils.IncMonth (1715), IncWeek (614), IncDay (612), IncHour (612), IncSec-
ond (614), IncMilliSecond (613)
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 .
613
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
44.4.54 IncSecond
Synopsis: Increase a TDateTime value with a number of seconds.
Declaration: function IncSecond(const AValue: TDateTime;
const ANumberOfSeconds: Int64) : TDateTime
function IncSecond(const AValue: TDateTime) : TDateTime
Visibility: default
Description: IncSecond adds ANumberOfSeconds seconds to AValue and returns the resulting date/-
time.ANumberOfSeconds can be positive or negative.
See also: IncYear (615), #rtl.sysutils.IncMonth (1715), IncWeek (614), IncDay (612), IncHour (612), IncSec-
ond (614), IncMilliSecond (613)
Listing: ./datutex/ex77.pp
Program Example77 ;
Uses S y s U t i l s , D a t e U t i l s ;
Begin
W r i t e l n ( ' One Second from now i s ' , TimeToStr ( IncSecond ( Time , 1 ) ) ) ;
W r i t e l n ( ' One Second ago from now i s ' , TimeToStr ( IncSecond ( Time , − 1 ) ) ) ;
End .
44.4.55 IncWeek
Synopsis: Increase a TDateTime value with a number of weeks.
Declaration: function IncWeek(const AValue: TDateTime; const ANumberOfWeeks: Integer)
: TDateTime
function IncWeek(const AValue: TDateTime) : TDateTime
Visibility: default
Description: IncWeek adds ANumberOfWeeks weeks to AValue and returns the resulting date/time.ANumberOfWeeks
can be positive or negative.
See also: IncYear (615), #rtl.sysutils.IncMonth (1715), IncDay (612), IncHour (612), IncMinute (613), Inc-
Second (614), IncMilliSecond (613)
Listing: ./datutex/ex73.pp
Program Example73 ;
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 .
614
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
44.4.56 IncYear
Synopsis: Increase a TDateTime value with a number of years.
Description: IncYear adds ANumberOfYears years to AValue and returns the resulting date/time. ANumberOfYears
can be positive or negative.
See also: #rtl.sysutils.IncMonth (1715), IncWeek (614), IncDay (612), IncHour (612), IncMinute (613), Inc-
Second (614), IncMilliSecond (613)
Listing: ./datutex/ex71.pp
Program Example71 ;
Uses S y s U t i l s , D a t e U t i l s ;
Begin
W r i t e l n ( ' One year from today i s ' , DateToStr ( IncYear ( Today , 1 ) ) ) ;
W r i t e l n ( ' One year ago from today i s ' , DateToStr ( IncYear ( Today , − 1 ) ) ) ;
End .
44.4.57 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 (1780) exception and formats the error mes-
sage 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 (616), InvalidDateTimeError (616), InvalidDateMonthWeekError (615), In-
validDayOfWeekInMonthError (617)
44.4.58 InvalidDateMonthWeekError
Synopsis: Raise an EConvertError exception when a Year,Month,WeekOfMonth,DayofWeek is invalid.
Declaration: procedure InvalidDateMonthWeekError(const AYear: Word;
const AMonth: Word;
const AWeekOfMonth: Word;
const ADayOfWeek: Word)
Visibility: default
615
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
Description: InvalidDateMonthWeekError raises an EConvertError (1780) exception and formats the er-
ror message with an appropriate description made up from the parts AYear, Amonth, AWeekOfMonth
and ADayOfWeek.
Normally this function should not be needed, the conversion routines call it when they have received
invalid arguments.
44.4.59 InvalidDateTimeError
Synopsis: Raise an EConvertError about an invalid date-time specification.
Declaration: procedure InvalidDateTimeError(const AYear: Word; const AMonth: Word;
const ADay: Word; const AHour: Word;
const AMinute: Word; const ASecond: Word;
const AMilliSecond: Word;
const ABaseDate: TDateTime)
procedure InvalidDateTimeError(const AYear: Word; const AMonth: Word;
const ADay: Word; const AHour: Word;
const AMinute: Word; const ASecond: Word;
const AMilliSecond: Word)
Visibility: default
Description: InvalidDateTimeError raises an EConvertError (1780) exception and formats the error mes-
sage with an appropriate description made up from the parts AYear, AMonth, ADay,AHour,
AMinute, ASecond and AMilliSecond.
Normally this function should not be needed, the conversion routines call it when they have received
invalid arguments.
See also: InvalidDateWeekError (616), InvalidDateDayError (615), InvalidDateMonthWeekError (615), In-
validDayOfWeekInMonthError (617)
44.4.60 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
Description: InvalidDateWeekError raises an EConvertError (1780) exception and formats the error mes-
sage 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 (616), InvalidDateDayError (615), InvalidDateMonthWeekError (615), In-
validDayOfWeekInMonthError (617)
616
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
44.4.61 InvalidDayOfWeekInMonthError
Synopsis: Raise an EConvertError exception when a Year,Month,NthDayofWeek,DayofWeek is invalid.
Visibility: default
Description: InvalidDayOfWeekInMonthError raises an EConvertError (1780) exception and formats the
error message with an appropriate description made up from the parts AYear, Amonth, ANthDayOfWeek
and ADayOfWeek.
Normally this function should not be needed, the conversion routines call it when they have received
invalid arguments.
See also: InvalidDateWeekError (616), InvalidDateTimeError (616), InvalidDateDayError (615), InvalidDate-
MonthWeekError (615)
44.4.62 IsInLeapYear
Synopsis: Determine whether a date is in a leap year.
See also: YearOf (678), IsPM (619), IsToday (620), IsSameDay (619)
Listing: ./datutex/ex3.pp
Program Example3 ;
Uses S y s U t i l s , D a t e U t i l s ;
Begin
W r i t e l n ( ' C u r r e n t year i s l e a p year : ' , IsInLeapYear ( Date ) ) ;
End .
44.4.63 ISO8601ToDate
Synopsis: Converts a date/time value in ISO 8601 notation to a native TDateTime type
Declaration: function ISO8601ToDate(const DateString: string; ReturnUTC: Boolean)
: TDateTime
Visibility: default
Description: ISO8601ToDate is a function used to convert a string using ISO 8601 date/time notation to a
native TDateTime type.
DateString contains the date/time value expressed using ISO 8601 notation.
617
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
ReturnUTC indicates if the TDateTime value should be adjusted to reflect the UTC (Coordinated
Universal Time) time zone. The default value for the argument is True.
ISO8601ToDate calls the TryISO8601ToDate function to perform the conversion, and raises
an EConvertError exception if DateString contains an invalid ISO 8601 date/time value.
The return value contains the native TDateTime value for the timestamp (adjusted to UTC when
requested).
Use DateToISO8601 to convert the native date/time value back to its representation using ISO
8601 date/time notation.
See also: TryISO8601ToDate (661), DateToISO8601 (592)
44.4.64 ISO8601ToDateDef
Synopsis: Converts an ISO 8601 date/time string to a TDateTime type
Declaration: function ISO8601ToDateDef(const DateString: string; ReturnUTC: Boolean;
aDefault: TDateTime) : TDateTime
function ISO8601ToDateDef(const DateString: string;
aDefault: TDateTime; ReturnUTC: Boolean)
: TDateTime
Visibility: default
Description: ISO8601ToDateDef is used to convert a date/time string in ISO 8601 format to its representation
as a TDateTime value. DateString contains the ISO 8601-formatted date/time value converted in
the routine. It can use one of the supported ISO 8601 date/time formats, and may contain an optional
time zone offset. DateString uses the format returned from the DateToISO8601 function. Each of
the following represent the date/time for Noon on July 4, 2019:
•20190714 12:00
•2019-07-14 12:00
•20190714 12:00:00
•2019-07-14 12:00:00
•20190714T12:00
•20190714T12:00:00
•2019-07-14T12:00
•2019-07-14T12:00:00
•20190714T12:00:00-04:00
•2019-07-14T12:00:00-04:00
Time values in DateString specified without a time zone offset are assumed to be in the local time
zone.
ReturnUTC indicates if the value in DateString is adjusted to UTC (Coordinated Universal Time) in
the return value.
aDefault contains the default TDateTime value used as the return value when DateString cannot be
successfully parsed and converted.
Please note than that the overloaded variant which uses String, Boolean, and TDateTime arguments
has been deprecated. Use the variant with String, TDateTime, and Boolean arguments (in that order)
instead.
ISO8601ToDateDef calls the TryISO8601ToDate function in its implementation.
See also: DateToISO8601 (592), TryISO8601ToDate (661)
618
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
44.4.65 IsPM
Synopsis: Determine whether a time is PM or AM.
Declaration: function IsPM(const AValue: TDateTime) : Boolean
Visibility: default
Description: IsPM returns True if the time part of AValue is later then 12:00 (PM, or afternoon).
See also: YearOf (678), IsInLeapYear (617), IsToday (620), IsSameDay (619)
Listing: ./datutex/ex4.pp
Program Example4 ;
Uses S y s U t i l s , D a t e U t i l s ;
Begin
W r i t e l n ( ' C u r r e n t t i m e i s PM : ' , IsPM (Now ) ) ;
End .
44.4.66 IsSameDay
Synopsis: Check if two date/time indications are the same day.
Declaration: function IsSameDay(const AValue: TDateTime; const ABasis: TDateTime)
: Boolean
Visibility: default
Description: IsSameDay checks whether AValue and ABasis have the same date part, and returns True if
they do, False if not.
See also: Today (656), Yesterday (681), Tomorrow (657), IsToday (620)
Listing: ./datutex/ex21.pp
Program Example21 ;
Uses S y s U t i l s , D a t e U t i l s ;
Var
I : Integer ;
D : TDateTime ;
Begin
For I :=1 to 3 do
begin
D: = Today+Random(3) −1;
Write ( FormatDateTime ( ' dd mmmm yyyy " i s today : " ' ,D ) ) ;
W r i t e l n ( IsSameDay (D, Today ) ) ;
end ;
End .
619
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
44.4.67 IsSameMonth
Synopsis: Check if 2 dates are in the same month.
Declaration: function IsSameMonth(const Avalue: TDateTime; const ABasis: TDateTime)
: Boolean
Visibility: default
Description: IsSameMonth will return True if the two dates Avalue and ABasis occur in the same year
and month. (i.e. if their month and year parts match). Otherwise, False is returned.
See also: IsSameDay (619), IsToday (620), SameDate (644)
44.4.68 IsToday
Synopsis: Check whether a given date is today.
Declaration: function IsToday(const AValue: TDateTime) : Boolean
Visibility: default
Description: IsToday returns True if AValue is today’s date, and False otherwise.
See also: Today (656), Yesterday (681), Tomorrow (657), IsSameDay (619)
Listing: ./datutex/ex20.pp
Program Example20 ;
Uses S y s U t i l s , D a t e U t i l s ;
Begin
W r i t e l n ( ' Today : ' , IsToday ( Today ) ) ;
W r i t e l n ( ' Tomorrow : ' , IsToday ( Tomorrow ) ) ;
W r i t e l n ( ' Yesterday : ' , IsToday ( Yesterday ) ) ;
End .
44.4.69 IsValidDate
Synopsis: Check whether a set of values is a valid date indication.
Declaration: function IsValidDate(const AYear: Word; const AMonth: Word;
const ADay: Word) : Boolean
Visibility: default
Description: IsValidDate returns True when the values AYear, AMonth, ADay form a valid date indica-
tion. If one of the values is not valid (e.g. the day is invalid or does not exist in that particular month),
False is returned.
AYear must be in the range 1..9999 to be valid.
See also: IsValidTime (624), IsValidDateTime (622), IsValidDateDay (621), IsValidDateWeek (623), IsValid-
DateMonthWeek (621)
Listing: ./datutex/ex5.pp
620
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
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:=2000 to 2004 do
For M:=1 to 12 do
For D:=1 to 31 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.70 IsValidDateDay
Synopsis: Check whether a given year/day of year combination is a valid date.
Declaration: function IsValidDateDay(const AYear: Word; const ADayOfYear: Word)
: Boolean
Visibility: default
Description: IsValidDateDay returns True if AYear and ADayOfYear form a valid date indication, or
False otherwise.
AYear must be in the range 1..9999 to be valid.
The ADayOfYear value is checked to see whether it falls within the valid range of dates for AYear.
See also: IsValidDate (620), IsValidTime (624), IsValidDateTime (622), IsValidDateWeek (623), IsValidDate-
MonthWeek (621)
Listing: ./datutex/ex9.pp
Program Example9 ;
{ T h i s program demonstrates t h e Is V al id D at eD a y f u n c t i o n }
Uses S y s U t i l s , D a t e U t i l s ;
Var
Y : Word ;
Begin
For Y:=1996 to 2004 do
i f I sV al i dD at e Da y ( Y, 3 6 6 ) then
W r i t e l n ( Y , ' i s a l e a p year ' ) ;
End .
44.4.71 IsValidDateMonthWeek
Synopsis: Check whether a given year/month/week/day of the week combination is a valid day
621
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
See also: IsValidDate (620), IsValidTime (624), IsValidDateTime (622), IsValidDateDay (621), IsValidDate-
Week (623)
Listing: ./datutex/ex11.pp
Program Example11 ;
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:=2000 to 2004 do
begin
B: = True ;
For W:=4 to 6 do
For D:=1 to 7 do
I f B then
begin
B: = IsValidDateMonthWeek ( Y, 1 2 ,W,D ) ;
I f Not B then
i f (D=1) then
W r i t e l n ( ' December ' ,Y , ' has e x a c t l y ' ,W, ' weeks . ' )
else
W r i t e l n ( ' December ' ,Y , ' has ' ,W, ' weeks and ' ,D−1, ' days . ' ) ;
end ;
end ;
End .
44.4.72 IsValidDateTime
Synopsis: Check whether a set of values is a valid date and time indication.
Visibility: default
622
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
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 (620), IsValidTime (624), IsValidDateDay (621), IsValidDateWeek (623), IsValidDate-
MonthWeek (621)
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 10 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.73 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 (620), IsValidTime (624), IsValidDateTime (622), IsValidDateDay (621), IsValidDate-
MonthWeek (621)
Listing: ./datutex/ex10.pp
623
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
Program Example10 ;
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:=2000 to 2004 do
begin
B: = True ;
For W:=51 to 54 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 ' ,D−1, ' days . ' ) ;
end ;
end ;
End .
44.4.74 IsValidTime
Synopsis: Check whether a set of values is a valid time indication.
Declaration: function IsValidTime(const AHour: Word; const AMinute: Word;
const ASecond: Word; const AMilliSecond: Word)
: Boolean
Visibility: default
Description: Check whether a set of values is a valid time indication.
44.4.75 JulianDateToDateTime
Synopsis: Convert a Julian date representation to a TDateTime value.
Declaration: function JulianDateToDateTime(const AValue: Double) : TDateTime
Visibility: default
Description: JulianDateToDateTime converts the Julian AValue date/time indication to a regular TDateTime
date/time indication.
See also: DateTimeToJulianDate (591), TryJulianDateToDateTime (664), DateTimeToModifiedJulianDate (592),
TryModifiedJulianDateToDateTime (664)
624
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
44.4.76 LocalTimeToUniversal
Synopsis: Convert local time to UTC time
Description: LocalTimeToUniversal converts a local time indication to a universal time indication: it un-
does the TZOffset time zone offset from the UT Universal time (UTC). If no TZOffset is spec-
ified, the local time offset as returned by GetLocalTimeOffset (584) is used.
Note that for times in the past or in the future, or for time zones with DST, omitting the TZoffset
may lead to wrong results depending on GetLocalTimeOffset being able to compute the correct offset
for the UT on the target platform. Currently only Windows Vista and newer return correct offsets for
a given date. Older Windows systems or Linux/Unix return always the offset for the current date.
See also: GetLocalTimeOffset (584), UniversalTimeToLocal (665)
44.4.77 MacTimeStampToUnix
Synopsis: Convert a Mac timestamp to a Unix timestamp
Errors: None.
See also: UnixTimeStampToMac (665), DateTimeToMac (592), MacToDateTime (625)
44.4.78 MacToDateTime
Synopsis: Convert a Mac timestamp to a TDateTime timestamp
Errors: None.
See also: UnixTimeStampToMac (665), DateTimeToMac (592), MacTimeStampToUnix (625)
44.4.79 MilliSecondOf
Synopsis: Extract the millisecond part from a TDateTime value.
625
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
Description: MillisecondOf returns the second of the minute part of the AValue date/time indication. It is
a number between 0 and 999.
For an example, see YearOf (678)
See also: YearOf (678), WeekOf (666), MonthOf (634), DayOf (593), HourOf (608), MinuteOf (630), Mil-
liSecondOf (625)
44.4.80 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 (608) function.
See also: MilliSecondOfTheYear (628), MilliSecondOfTheMonth (627), MilliSecondOfTheWeek (627), Mil-
liSecondOfTheHour (626), MilliSecondOfTheMinute (626), MilliSecondOfTheSecond (627), HourOfThe-
Day (608), MinuteOfTheDay (630), SecondOfTheDay (647)
44.4.81 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 (630) function.
See also: MilliSecondOfTheYear (628), MilliSecondOfTheMonth (627), MilliSecondOfTheWeek (627), Mil-
liSecondOfTheDay (626), MilliSecondOfTheMinute (626), MilliSecondOfTheSecond (627), Minu-
teOfTheHour (630), SecondOfTheHour (648)
44.4.82 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 (648) function.
See also: MilliSecondOfTheYear (628), MilliSecondOfTheMonth (627), MilliSecondOfTheWeek (627), Mil-
liSecondOfTheDay (626), MilliSecondOfTheHour (626), MilliSecondOfTheMinute (626), MilliSec-
ondOfTheSecond (627), SecondOfTheMinute (648)
626
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
44.4.83 MilliSecondOfTheMonth
Synopsis: Calculate number of milliseconds elapsed since the start of the month.
44.4.84 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 (628), MilliSecondOfTheMonth (627), MilliSecondOfTheWeek (627), Mil-
liSecondOfTheDay (626), MilliSecondOfTheHour (626), MilliSecondOfTheMinute (626), Second-
OfTheMinute (648)
Listing: ./datutex/ex46.pp
Program Example46 ;
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.85 MilliSecondOfTheWeek
Synopsis: Calculate the number of milliseconds elapsed since the start of the week
627
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
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 (593) function.
See also: MilliSecondOfTheYear (628), MilliSecondOfTheMonth (627), MilliSecondOfTheDay (626), Mil-
liSecondOfTheHour (626), MilliSecondOfTheMinute (626), MilliSecondOfTheSecond (627), Day-
OfTheWeek (593), HourOfTheWeek (609), MinuteOfTheWeek (631), SecondOfTheWeek (649)
44.4.86 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 (667) function.
See also: WeekOfTheYear (667), DayOfTheYear (594), HourOfTheYear (610), MinuteOfTheYear (631), Sec-
ondOfTheYear (649), MilliSecondOfTheYear (628)
44.4.87 MilliSecondsBetween
Synopsis: Calculate the number of whole milliseconds between two TDateTime 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 (679), MonthsBetween (634), WeeksBetween (668), DaysBetween (594), HoursBe-
tween (610), MinutesBetween (632), SecondsBetween (649)
Listing: ./datutex/ex62.pp
Program Example62 ;
Uses S y s U t i l s , D a t e U t i l s ;
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
628
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
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.88 MilliSecondSpan
Synopsis: Calculate the approximate number of milliseconds between two TDateTime 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 mil-
lisecond is the smallest fraction of a TDateTime indication, the returned number will always be an
integer value.
See also: YearSpan (680), MonthSpan (635), WeekSpan (670), DaySpan (597), HourSpan (611), MinuteSpan
(633), SecondSpan (650), MilliSecondsBetween (628)
Listing: ./datutex/ex70.pp
Program Example70 ;
Uses S y s U t i l s , D a t e U t i l s ;
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 ) ;
629
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
44.4.89 MinuteOf
Synopsis: Extract the minute part from a TDateTime value.
Declaration: function MinuteOf(const AValue: TDateTime) : Word
Visibility: default
Description: MinuteOf returns the minute of the hour part of the AValue date/time indication. It is a number
between 0 and 59.
For an example, see YearOf (678)
See also: YearOf (678), WeekOf (666), MonthOf (634), DayOf (593), HourOf (608), SecondOf (647), Mil-
liSecondOf (625)
44.4.90 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 (608) function.
See also: MinuteOfTheYear (631), MinuteOfTheMonth (631), MinuteOfTheWeek (631), MinuteOfTheHour
(630), HourOfTheDay (608), SecondOfTheDay (647), MilliSecondOfTheDay (626)
44.4.91 MinuteOfTheHour
Synopsis: Calculate the number of minutes elapsed since the start of the hour
Listing: ./datutex/ex44.pp
630
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
Program Example44 ;
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.92 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 (666) function.
See also: WeekOfTheMonth (666), DayOfTheMonth (593), HourOfTheMonth (609), MinuteOfTheMonth
(631), SecondOfTheMonth (648), MilliSecondOfTheMonth (627)
44.4.93 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 (593) function.
See also: MinuteOfTheYear (631), MinuteOfTheMonth (631), MinuteOfTheDay (630), MinuteOfTheHour
(630), DayOfTheWeek (593), HourOfTheWeek (609), SecondOfTheWeek (649), MilliSecondOfThe-
Week (627)
44.4.94 MinuteOfTheYear
Synopsis: Calculate the number of minutes elapsed since the start of the year
Declaration: function MinuteOfTheYear(const AValue: TDateTime) : LongWord
631
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
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. Jan-
uary 1 00:00:59 will return 0.
For an example, see the WeekOfTheYear (667) function.
See also: WeekOfTheYear (667), DayOfTheYear (594), HourOfTheYear (610), MinuteOfTheYear (631), Sec-
ondOfTheYear (649), MilliSecondOfTheYear (628)
44.4.95 MinutesBetween
Synopsis: Calculate the number of whole minutes between two TDateTime 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 (679), MonthsBetween (634), WeeksBetween (668), DaysBetween (594), HoursBe-
tween (610), SecondsBetween (649), MilliSecondsBetween (628)
Listing: ./datutex/ex60.pp
Program Example60 ;
Uses S y s U t i l s , D a t e U t i l s ;
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−(59 * OneSecond ) ;
Test ( D1 , D2 ) ;
D2: =D1−(61 * OneSecond ) ;
Test ( D1 , D2 ) ;
D2: =D1−(122 * OneSecond ) ;
Test ( D1 , D2 ) ;
D2: =D1−(306 * OneSecond ) ;
Test ( D1 , D2 ) ;
D2: =D1−(5.4 * OneMinute ) ;
Test ( D1 , D2 ) ;
D2: =D1−(2.5 * OneMinute ) ;
Test ( D1 , D2 ) ;
End .
632
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
44.4.96 MinuteSpan
Synopsis: Calculate the approximate number of minutes between two TDateTime 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 (680), MonthSpan (635), WeekSpan (670), DaySpan (597), HourSpan (611), SecondSpan
(650), MilliSecondSpan (629), MinutesBetween (632)
Listing: ./datutex/ex68.pp
Program Example68 ;
Uses S y s U t i l s , D a t e U t i l s ;
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−(59 * OneSecond ) ;
Test ( D1 , D2 ) ;
D2: =D1−(61 * OneSecond ) ;
Test ( D1 , D2 ) ;
D2: =D1−(122 * OneSecond ) ;
Test ( D1 , D2 ) ;
D2: =D1−(306 * OneSecond ) ;
Test ( D1 , D2 ) ;
D2: =D1−(5.4 * OneMinute ) ;
Test ( D1 , D2 ) ;
D2: =D1−(2.5 * OneMinute ) ;
Test ( D1 , D2 ) ;
End .
44.4.97 ModifiedJulianDateToDateTime
Synopsis: Convert a modified Julian date representation to a TDateTime value.
Declaration: function ModifiedJulianDateToDateTime(const AValue: Double) : TDateTime
Visibility: default
Description: Not yet implemented.
633
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
44.4.98 MonthOf
Synopsis: Extract the month from a given date.
44.4.99 MonthOfTheYear
Synopsis: Extract the month of a TDateTime indication.
Declaration: function MonthOfTheYear(const AValue: TDateTime) : Word
Visibility: default
Description: MonthOfTheYear extracts the month part of Avalue and returns it. It is an alias for MonthOf
(634), and is provided for completeness only, corresponding to the other PartOfTheYear func-
tions.
For an example, see the WeekOfTheYear (667) function.
See also: MonthOf (634), WeekOfTheYear (667), DayOfTheYear (594), HourOfTheYear (610), MinuteOfTheYear
(631), SecondOfTheYear (649), MilliSecondOfTheYear (628)
44.4.100 MonthsBetween
Synopsis: Calculate the number of whole months between two TDateTime values
Declaration: function MonthsBetween(const ANow: TDateTime; const AThen: TDateTime;
AExact: Boolean) : 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 (679), WeeksBetween (668), DaysBetween (594), HoursBetween (610), MinutesBe-
tween (632), SecondsBetween (649), MilliSecondsBetween (628)
Listing: ./datutex/ex56.pp
634
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
Program Example56 ;
Uses S y s U t i l s , D a t e U t i l s ;
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.101 MonthSpan
Synopsis: Calculate the approximate number of months between two TDateTime 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 (680), WeekSpan (670), DaySpan (597), HourSpan (611), MinuteSpan (633), SecondSpan
(650), MilliSecondSpan (629), MonthsBetween (634)
Listing: ./datutex/ex64.pp
Program Example64 ;
Uses S y s U t i l s , D a t e U t i l s ;
635
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
begin
Write ( ' Number o f months between ' ) ;
Write ( DateToStr ( AThen ) , ' and ' , DateToStr (ANow ) ) ;
W r i t e l n ( ' : ' , MonthSpan (ANow, AThen ) ) ;
end ;
Var
D1 , D2 : TDateTime ;
Begin
D1: = Today ;
D2: = Today −364;
Test ( D1 , D2 ) ;
D2: = Today −365;
Test ( D1 , D2 ) ;
D2: = Today −366;
Test ( D1 , D2 ) ;
D2: = Today −390;
Test ( D1 , D2 ) ;
D2: = Today −368;
Test ( D1 , D2 ) ;
D2: = Today −1000;
Test ( D1 , D2 ) ;
End .
44.4.102 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 (602), #rtl.sysutils.DayOfWeek (1660), DecodeDayOfWeekInMonth (601),
EncodeDayOfWeekInMonth (603), TryEncodeDayOfWeekInMonth (660)
Listing: ./datutex/ex104.pp
Program Example104 ;
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 .
636
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
44.4.103 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 num-
ber 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 (679), MonthsBetween (634), WeeksBetween (668), DaysBetween (594)
44.4.104 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 (681)
Listing: ./datutex/ex22.pp
Program Example22 ;
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 : ' , PreviousDayOfWeek (D ) ) ;
End .
44.4.105 RecodeDate
Synopsis: Replace date part of a TDateTime value with another date.
Declaration: function RecodeDate(const AValue: TDateTime; const AYear: Word;
const AMonth: Word; const ADay: Word) : TDateTime
Visibility: default
Description: RecodeDate replaces the date part of the timestamp AValue with the date specified in AYear,
AMonth, ADay. All other parts (the time part) of the date/time stamp are left untouched.
637
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
Errors: If one of the AYear, AMonth, ADay values is not within a valid range then an EConvertError
exception is raised.
See also: RecodeYear (643), RecodeMonth (641), RecodeDay (639), RecodeHour (639), RecodeMinute (641),
RecodeSecond (642), RecodeDate (637), RecodeTime (643), RecodeDateTime (638)
Listing: ./datutex/ex94.pp
Program Example94 ;
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 : ' ,S ) ;
End .
44.4.106 RecodeDateTime
Synopsis: Replace selected parts of a TDateTime value with other values
Declaration: function RecodeDateTime(const AValue: TDateTime; const AYear: Word;
const AMonth: Word; const ADay: Word;
const AHour: Word; const AMinute: Word;
const ASecond: Word; const AMilliSecond: Word)
: TDateTime
Visibility: default
Description: RecodeDateTime replaces selected parts of the timestamp AValue with the date/time values
specified in AYear, AMonth, ADay, AHour, AMinute, ASecond and AMilliSecond. If any
of these values equals the predefined constant RecodeLeaveFieldAsIs (586), then the corresponding
part of the date/time stamp is left untouched.
Errors: If one of the values AYear, AMonth, ADay, AHour, AMinute, ASecondAMilliSecond is
not within a valid range (RecodeLeaveFieldAsIs excepted) then an EConvertError excep-
tion is raised.
See also: RecodeYear (643), RecodeMonth (641), RecodeDay (639), RecodeHour (639), RecodeMinute (641),
RecodeSecond (642), RecodeMilliSecond (640), RecodeDate (637), RecodeTime (643), TryRecode-
DateTime (664)
Listing: ./datutex/ex96.pp
Program Example96 ;
Uses S y s U t i l s , D a t e U t i l s ;
638
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
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 2000 : ' ,S ) ;
End .
44.4.107 RecodeDay
Synopsis: Replace day part of a TDateTime value with another day.
Declaration: function RecodeDay(const AValue: TDateTime; const ADay: Word)
: TDateTime
Visibility: default
Description: RecodeDay replaces the Day part of the timestamp AValue with ADay. All other parts of the
date/time stamp are left untouched.
Errors: If the ADay value is not within a valid range (1 till the number of days in the month) then an
EConvertError exception is raised.
See also: RecodeYear (643), RecodeMonth (641), RecodeHour (639), RecodeMinute (641), RecodeSecond
(642), RecodeMilliSecond (640), RecodeDate (637), RecodeTime (643), RecodeDateTime (638)
Listing: ./datutex/ex89.pp
Program Example89 ;
Uses S y s U t i l s , D a t e U t i l s ;
Const
Fmt = ' dddd dd mmmm yyyy hh : nn : ss ' ;
Var
S : AnsiString ;
Begin
S: = FormatDateTime ( Fmt , RecodeDay (Now, 1 ) ) ;
W r i t e l n ( ' T h i s moment on t h e f i r s t o f t h e month : ' ,S ) ;
End .
44.4.108 RecodeHour
Synopsis: Replace hours part of a TDateTime value with another hour.
639
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
Listing: ./datutex/ex90.pp
Program Example90 ;
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.109 RecodeMilliSecond
Synopsis: Replace milliseconds part of a TDateTime value with another millisecond.
Declaration: function RecodeMilliSecond(const AValue: TDateTime;
const AMilliSecond: Word) : TDateTime
Visibility: default
Description: RecodeMilliSecond replaces the millisecond part of the timestamp AValue with AMilliSecond.
All other parts of the date/time stamp are left untouched.
Errors: If the AMilliSecond value is not within a valid range (0..999) then an EConvertError excep-
tion is raised.
See also: RecodeYear (643), RecodeMonth (641), RecodeDay (639), RecodeHour (639), RecodeMinute (641),
RecodeSecond (642), RecodeDate (637), RecodeTime (643), RecodeDateTime (638)
Listing: ./datutex/ex93.pp
Program Example93 ;
Uses S y s U t i l s , D a t e U t i l s ;
640
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
Const
Fmt = ' dddd dd mmmm yyyy hh : nn : ss . zzz ' ;
Var
S : AnsiString ;
Begin
S: = FormatDateTime ( Fmt , RecodeMilliSecond (Now, 0 ) ) ;
W r i t e l n ( ' T h i s moment , m i l l i s e c o n d s s t r i p p e d : ' ,S ) ;
End .
44.4.110 RecodeMinute
Synopsis: Replace minutes part of a TDateTime value with another minute.
Listing: ./datutex/ex91.pp
Program Example91 ;
Uses S y s U t i l s , D a t e U t i l s ;
Const
Fmt = ' dddd dd mmmm yyyy hh : nn : ss ' ;
Var
S : AnsiString ;
Begin
S: = FormatDateTime ( Fmt , RecodeMinute (Now, 0 ) ) ;
W r i t e l n ( ' T h i s moment i n t h e f i r s t minute o f t h e hour : ' ,S ) ;
End .
44.4.111 RecodeMonth
Synopsis: Replace month part of a TDateTime value with another month.
641
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
Description: RecodeMonth replaces the Month part of the timestamp AValue with AMonth. All other parts
of the date/time stamp are left untouched.
Errors: If the AMonth value is not within a valid range (1..12) then an EConvertError exception is
raised.
See also: RecodeYear (643), RecodeDay (639), RecodeHour (639), RecodeMinute (641), RecodeSecond (642),
RecodeMilliSecond (640), RecodeDate (637), RecodeTime (643), RecodeDateTime (638)
Listing: ./datutex/ex88.pp
Program Example88 ;
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.112 RecodeSecond
Synopsis: Replace seconds part of a TDateTime value with another second.
Declaration: function RecodeSecond(const AValue: TDateTime; const ASecond: Word)
: TDateTime
Visibility: default
Description: RecodeSecond replaces the Second part of the timestamp AValue with ASecond. All other
parts of the date/time stamp are left untouched.
Errors: If the ASecond value is not within a valid range (0..59) then an EConvertError exception is
raised.
See also: RecodeYear (643), RecodeMonth (641), RecodeDay (639), RecodeHour (639), RecodeMinute (641),
RecodeMilliSecond (640), RecodeDate (637), RecodeTime (643), RecodeDateTime (638)
Listing: ./datutex/ex92.pp
Program Example92 ;
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
642
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
S : AnsiString ;
Begin
S: = FormatDateTime ( Fmt , RecodeSecond (Now, 0 ) ) ;
W r i t e l n ( ' T h i s moment , seconds s t r i p p e d : ' ,S ) ;
End .
44.4.113 RecodeTime
Synopsis: Replace time part of a TDateTime value with another time.
Declaration: function RecodeTime(const AValue: TDateTime; const AHour: Word;
const AMinute: Word; const ASecond: Word;
const AMilliSecond: Word) : TDateTime
Visibility: default
Description: RecodeTime replaces the time part of the timestamp AValue with the date specified in AHour,
AMinute, ASecond and AMilliSecond. All other parts (the date part) of the date/time stamp
are left untouched.
Errors: If one of the values AHour, AMinute, ASecondAMilliSecond is not within a valid range then
an EConvertError exception is raised.
See also: RecodeYear (643), RecodeMonth (641), RecodeDay (639), RecodeHour (639), RecodeMinute (641),
RecodeSecond (642), RecodeMilliSecond (640), RecodeDate (637), RecodeDateTime (638)
Listing: ./datutex/ex95.pp
Program Example95 ;
Uses S y s U t i l s , D a t e U t i l s ;
Const
Fmt = ' dddd dd mmmm yyyy hh : nn : ss ' ;
Var
S : AnsiString ;
Begin
S: = FormatDateTime ( Fmt , RecodeTime (Now, 8 , 0 , 0 , 0 ) ) ;
W r i t e l n ( ' Today , 8 AM : ' ,S ) ;
End .
44.4.114 RecodeYear
Synopsis: Replace year part of a TDateTime value with another year.
Declaration: function RecodeYear(const AValue: TDateTime; const AYear: Word)
: TDateTime
Visibility: default
Description: RecodeYear replaces the year part of the timestamp AValue with AYear. All other parts of the
date/time stamp are left untouched.
643
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
Errors: If the AYear value is not within a valid range (1..9999) then an EConvertError exception is
raised.
See also: RecodeMonth (641), RecodeDay (639), RecodeHour (639), RecodeMinute (641), RecodeSecond
(642), RecodeMilliSecond (640), RecodeDate (637), RecodeTime (643), RecodeDateTime (638)
Listing: ./datutex/ex87.pp
Program Example87 ;
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 1999 : ' ,S ) ;
End .
44.4.115 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 (587) returns zero.
See also: CompareDateTime (588), CompareDate (587), CompareTime (589), SameDateTime (645), Same-
Time (646)
Listing: ./datutex/ex102.pp
Program Example102 ;
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 ' ;
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 ;
644
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
Var
D, N : TDateTime ;
Begin
D: = Today ;
N: =Now;
Test (D,D ) ;
Test (N,N ) ;
Test (N+1 ,N ) ;
Test (N−1,N ) ;
Test (N+OneSecond ,N ) ;
Test (N−OneSecond ,N ) ;
End .
44.4.116 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 (588) returns zero.
See also: CompareDateTime (588), CompareDate (587), CompareTime (589), SameDate (644), SameTime
(646)
Listing: ./datutex/ex101.pp
Program Example101 ;
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 ' ;
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 ) ;
645
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
Test (N−1,N ) ;
Test (N+OneSecond ,N ) ;
Test (N−OneSecond ,N ) ;
End .
44.4.117 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 (589) returns zero.
See also: CompareDateTime (588), CompareDate (587), CompareTime (589), SameDateTime (645), Same-
Date (644)
Listing: ./datutex/ex103.pp
Program Example102 ;
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 ' ;
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 (N−1,N ) ;
Test (N+OneSecond ,N ) ;
Test (N−OneSecond ,N ) ;
End .
44.4.118 ScanDateTime
Synopsis: Scans a string for a TDateTime pattern and returns the date/time
646
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
Visibility: default
Description: ScanDateTime scans string S for the date/time pattern Pattern, starting at position StartPos
(default 1). Optionally, the format settings fmt can be specified.
In effect, this function does the opposite of what FormatDateTime (1703) does. The Pattern
variable must contain a valid date/time pattern: note that not all possible formatdatetime patterns can
be recognized, e.g., hn cannot be detected properly.
•There is a special placeholder: a ’?’ will match any character in the input string.
•Note that the / and : character will be replaced by the actual date and time separator.
•Similarly, the ’am/pm’ and ’a/p’ will be replaced with the actual AM/PM indicators.
•a TAB character (ASCII Code 9) will match any whitespace block
44.4.119 SecondOf
Synopsis: Extract the second part from a TDateTime value.
Declaration: function SecondOf(const AValue: TDateTime) : Word
Visibility: default
Description: SecondOf returns the second of the minute part of the AValue date/time indication. It is a number
between 0 and 59.
For an example, see YearOf (678)
See also: YearOf (678), WeekOf (666), MonthOf (634), DayOf (593), HourOf (608), MinuteOf (630), Mil-
liSecondOf (625)
44.4.120 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 (608) function.
See also: SecondOfTheYear (649), SecondOfTheMonth (648), SecondOfTheWeek (649), SecondOfTheHour
(648), SecondOfTheMinute (648), HourOfTheDay (608), MinuteOfTheDay (630), MilliSecond-
OfTheDay (626)
647
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
44.4.121 SecondOfTheHour
Synopsis: Calculate the number of seconds elapsed since the start of the hour
44.4.122 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 (649), SecondOfTheMonth (648), SecondOfTheWeek (649), SecondOfTheDay
(647), SecondOfTheHour (648), MilliSecondOfTheMinute (626)
Listing: ./datutex/ex45.pp
Program Example45 ;
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.123 SecondOfTheMonth
Synopsis: Calculate number of seconds elapsed since the start of the month.
Declaration: function SecondOfTheMonth(const AValue: TDateTime) : LongWord
Visibility: default
648
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
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 (666) function.
See also: WeekOfTheMonth (666), DayOfTheMonth (593), HourOfTheMonth (609), MinuteOfTheMonth
(631), MilliSecondOfTheMonth (627)
44.4.124 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 (593) function.
44.4.125 SecondOfTheYear
Synopsis: Calculate the number of seconds elapsed since the start of the year.
44.4.126 SecondsBetween
Synopsis: Calculate the number of whole seconds between two TDateTime 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 (679), MonthsBetween (634), WeeksBetween (668), DaysBetween (594), HoursBe-
tween (610), MinutesBetween (632), MilliSecondsBetween (628)
649
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
Listing: ./datutex/ex61.pp
Program Example61 ;
Uses S y s U t i l s , D a t e U t i l s ;
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.4 * OneSecond ) ;
Test ( D1 , D2 ) ;
D2: =D1−(2.5 * OneSecond ) ;
Test ( D1 , D2 ) ;
End .
44.4.127 SecondSpan
Synopsis: Calculate the approximate number of seconds between two TDateTime 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 (680), MonthSpan (635), WeekSpan (670), DaySpan (597), HourSpan (611), MinuteSpan
(633), MilliSecondSpan (629), SecondsBetween (649)
Listing: ./datutex/ex69.pp
Program Example69 ;
Uses S y s U t i l s , D a t e U t i l s ;
650
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
begin
Write ( ' Number o f seconds between ' ) ;
Write ( TimeToStr ( AThen ) , ' and ' , TimeToStr (ANow ) ) ;
W r i t e l n ( ' : ' , SecondSpan (ANow, AThen ) ) ;
end ;
Var
D1 , D2 : TDateTime ;
Begin
D1: =Now;
D2: =D1−(999 * OneMilliSecond ) ;
Test ( D1 , D2 ) ;
D2: =D1−(1001 * OneMilliSecond ) ;
Test ( D1 , D2 ) ;
D2: =D1−(2001 * OneMilliSecond ) ;
Test ( D1 , D2 ) ;
D2: =D1−(5001 * OneMilliSecond ) ;
Test ( D1 , D2 ) ;
D2: =D1−(5.4 * OneSecond ) ;
Test ( D1 , D2 ) ;
D2: =D1−(2.5 * OneSecond ) ;
Test ( D1 , D2 ) ;
End .
44.4.128 StartOfADay
Synopsis: Return the start of a day as a TDateTime 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 (654), StartOfTheWeek (655), StartOfAWeek (652), StartOfAMonth (652), StartOfThe-
Month (654), EndOfTheWeek (607), EndOfAWeek (605), EndOfTheYear (608), EndOfAYear (606),
EndOfTheMonth (607), EndOfAMonth (604), EndOfTheDay (606), EndOfADay (604)
Listing: ./datutex/ex38.pp
Program Example38 ;
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 ' ;
651
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
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.129 StartOfAMonth
Synopsis: Return first date of month, given a year/month pair.
Declaration: function StartOfAMonth(const AYear: Word; const AMonth: Word)
: TDateTime
Visibility: default
Description: StartOfAMonth e returns a TDateTime value with the date of the first day of the month indi-
cated by the AYear, AMonth pair.
See also: StartOfTheMonth (654), EndOfTheMonth (607), EndOfAMonth (604), EndOfTheYear (608), End-
OfAYear (606), StartOfAWeek (652), StartOfTheWeek (655)
Listing: ./datutex/ex30.pp
Program Example30 ;
Uses S y s U t i l s , D a t e U t i l s ;
Const
Fmt = ' " F i r s t day o f t h i s month : " dd mmmm yyyy ' ;
Var
Y ,M : Word ;
Begin
Y: = YearOf ( Today ) ;
M: = MonthOf ( Today ) ;
W r i t e l n ( FormatDateTime ( Fmt , StartOfAMonth ( Y ,M ) ) ) ;
End .
44.4.130 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
652
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
Description: StartOfAWeek returns a TDateTime value with the date of the indicated day of the week indi-
cated by the AYear, AWeek, ADayOfWeek values.
The default value for ADayOfWeek is 1.
See also: StartOfTheWeek (655), EndOfTheWeek (607), EndOfAWeek (605), StartOfAMonth (652), End-
OfTheYear (608), EndOfAYear (606), EndOfTheMonth (607), EndOfAMonth (604)
Listing: ./datutex/ex34.pp
Program Example34 ;
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.131 StartOfAYear
Synopsis: Return the first day of a given year.
Declaration: function StartOfAYear(const AYear: Word) : TDateTime
Visibility: default
Description: StartOfAYear returns a TDateTime value with the date of the first day of the year AYear
(January 1).
See also: StartOfTheYear (655), EndOfTheYear (608), EndOfAYear (606), EndOfTheMonth (607), EndOfA-
Month (604), StartOfAWeek (652), StartOfTheWeek (655)
Listing: ./datutex/ex26.pp
Program Example26 ;
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 , StartOfAYear ( YearOf ( Today ) ) ) ) ;
End .
653
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
44.4.132 StartOfTheDay
Synopsis: Calculate the start of the day as a TDateTime 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 (651), StartOfTheWeek (655), StartOfAWeek (652), StartOfAMonth (652), StartOfThe-
Month (654), EndOfTheWeek (607), EndOfAWeek (605), EndOfTheYear (608), EndOfAYear (606),
EndOfTheMonth (607), EndOfAMonth (604), EndOftheDay (606), EndOfADay (604)
Listing: ./datutex/ex36.pp
Program Example36 ;
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.133 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 (652) function.
See also: StartOfAMonth (652), EndOfTheYear (608), EndOfAYear (606), EndOfTheMonth (607), EndOfA-
Month (604), StartOfAWeek (652), StartOfTheWeek (655)
Listing: ./datutex/ex28.pp
Program Example28 ;
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 .
654
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
44.4.134 StartOfTheWeek
Synopsis: Return the first day of the week, given a date.
See also: StartOfAWeek (652), EndOfTheWeek (607), EndOfAWeek (605), StartOfAMonth (652), EndOfTheYear
(608), EndOfAYear (606), EndOfTheMonth (607), EndOfAMonth (604)
Listing: ./datutex/ex32.pp
Program Example32 ;
Uses S y s U t i l s , D a t e U t i l s ;
Const
Fmt = ' " F i r s t day o f t h i s week : " dd mmmm yyyy ' ;
Begin
W r i t e l n ( FormatDateTime ( Fmt , StartOfTheWeek ( Today ) ) ) ;
End .
44.4.135 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 (653) function.
See also: StartOfAYear (653), EndOfTheYear (608), EndOfAYear (606)
Listing: ./datutex/ex24.pp
Program Example24 ;
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 .
655
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
44.4.136 TimeInRange
Synopsis: Checks whether a time value is in a given range
44.4.137 TimeOf
Synopsis: Extract the time part from a TDateTime indication.
Declaration: function TimeOf(const AValue: TDateTime) : TDateTime
Visibility: default
Description: TimeOf extracts the time part from AValue and returns the result.
Since the TDateTime is actually a double with the time part encoded in the fractional part, this
operation corresponds to a call to Frac.
See also: DateOf (590), YearOf (678), MonthOf (634), DayOf (593), HourOf (608), MinuteOf (630), Secon-
dOf (647), MilliSecondOf (625)
Listing: ./datutex/ex2.pp
Program Example2 ;
Uses S y s U t i l s , D a t e U t i l s ;
Begin
W r i t e l n ( ' Time i s : ' , TimeToStr ( TimeOf (Now ) ) ) ;
End .
44.4.138 Today
Synopsis: Return the current date
Declaration: function Today : TDateTime
Visibility: default
Description: Today is an alias for the Date (1655) function in the sysutils (1598) unit.
For an example, see Yesterday (681)
See also: Date (1655), Yesterday (681), Tomorrow (657)
656
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
44.4.139 Tomorrow
Synopsis: Return the next day
Declaration: function Tomorrow : TDateTime
Visibility: default
Description: Tomorrow returns tomorrow’s date. Tomorrow is determined from the system clock, i.e. it is Today
(656) +1.
See also: Today (656), Yesterday (681)
Listing: ./datutex/ex19.pp
Program Example19 ;
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.140 TryEncodeDateDay
Synopsis: Encode a year and day of year to a TDateTime value
Declaration: function TryEncodeDateDay(const AYear: Word; const ADayOfYear: Word;
out AValue: TDateTime) : Boolean
Visibility: default
Description: TryEncodeDateDay encodes the values AYear and ADayOfYear to a date value and returns
this value in AValue.
If the encoding was successful, True is returned. False is returned if any of the arguments is not
valid.
See also: EncodeDateDay (601), EncodeDateTime (602), EncodeDateMonthWeek (602), EncodeDateWeek
(603), TryEncodeDateTime (658), TryEncodeDateMonthWeek (658), TryEncodeDateWeek (659)
Listing: ./datutex/ex84.pp
Program Example84 ;
Uses S y s U t i l s , D a t e U t i l s ;
Var
Y , DoY : Word ;
TS : TDateTime ;
Begin
DecodeDateDay (Now, Y , DoY ) ;
I f TryEncodeDateDay ( Y , DoY , TS ) then
657
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
44.4.141 TryEncodeDateMonthWeek
Synopsis: Encode a year, month, week of month and day of week to a TDateTime value
Declaration: function TryEncodeDateMonthWeek(const AYear: Word; const AMonth: Word;
const AWeekOfMonth: Word;
const ADayOfWeek: Word;
out AValue: TDateTime) : Boolean
Visibility: default
Description: TryEncodeDateTime encodes the values AYearAMonth, WeekOfMonth,ADayOfWeek, to
a date value and returns this value in AValue.
If the encoding was successful, True is returned, False if any of the arguments is not valid.
See also: DecodeDateMonthWeek (599), EncodeDateTime (602), EncodeDateWeek (603), EncodeDateDay
(601), EncodeDateMonthWeek (602), TryEncodeDateTime (658), TryEncodeDateWeek (659), TryEn-
codeDateDay (657), NthDayOfWeek (636)
Listing: ./datutex/ex86.pp
Program Example86 ;
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.142 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
658
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
Listing: ./datutex/ex80.pp
Program Example79 ;
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.143 TryEncodeDateWeek
Synopsis: Encode a year, week and day of week triplet to a TDateTime value
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 successful, True is returned. False is returned if any of the arguments is not
valid.
Listing: ./datutex/ex82.pp
Program Example82 ;
Uses S y s U t i l s , D a t e U t i l s ;
659
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
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 .
44.4.144 TryEncodeDayOfWeekInMonth
Synopsis: Encode a year, month, week, day of week triplet to a TDateTime value
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 successful, False if any of the values is not in range.
See also: NthDayOfWeek (636), EncodeDateMonthWeek (602), #rtl.sysutils.DayOfWeek (1660), Decode-
DayOfWeekInMonth (601), EncodeDayOfWeekInMonth (603)
Listing: ./datutex/ex106.pp
Program Example105 ;
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 .
660
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
44.4.145 TryEncodeTimeInterval
Synopsis: Try to encode an interval as a TDateTime value.
Declaration: function TryEncodeTimeInterval(Hour: Word; Min: Word; Sec: Word;
MSec: Word; out Time: TDateTime) : Boolean
Visibility: default
Description: TryEncodeTimeInterval encodes a time interval expressed in Hour, Min, Sec, MSec as a
TDateTime value and returns the value in Time. It returns True if Min, Sec, MSec contain valid
time values (i.e. less than 60, 60 resp. MSec). The number of hours may be larger than 24.
See also: EncodeTimeInterval (603)
44.4.146 TryISO8601ToDate
Synopsis: Attempts to convert an ISO 8601-formatted date/time value to a TDateTime type
Declaration: function TryISO8601ToDate(const DateString: string;
out ADateTime: TDateTime; ReturnUTC: Boolean)
: Boolean
Visibility: default
Description: TryISO8601ToDate is a Boolean function which attempts to convert an ISO 8601-formatted date/-
time value to a TDateTime type.
DateString contains the ISO 8601 date/time value converted in the function. DateString must
contain one of the supported ISO 8601 date/time notations supported in the routine. It is separated
into date, time, and time zone values, and is converted by calling both the TryISOStrToDateTime
and TryISOTZStrToTZOffset functions. See TryISOStrToDateTime (662) for more informa-
tion about supported ISO 8601 notations.
ReturnUTC indicates if the native date/time value needs to be adjusted to the UTC (Coordinated
Universal Time) time zone. The default value for the argument is True, and causes GetLocalTimeOffset
to be called to get and apply the time zone offset for the local computer.
ADateTime contains the native TDateTime value for the converted timestamp adjusted to the
UTC time zone when ReturnUTC contains True.
Use DateToISO8601 to convert a native date/time value back to its representation in ISO 8601
notation.
See also: DateToISO8601 (592)
44.4.147 TryISOStrToDate
Synopsis: Attempts to convert an ISO 8601-formatted date value to a TDateTime type
Declaration: function TryISOStrToDate(const aString: string; out outDate: TDateTime)
: Boolean
Visibility: default
Description: TryISOStrToDate is a Boolean function which attempts to convert an ISO 8601-formatted
date value in aString to a TDateTime type. The return value is True if the string is successfully
converted into a native date value.
aString contains the date value converted in the function, and can use one of the following ISO
8601 notations :
661
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
•YYYYMMDD
•YYYY-MM-DD
outDate is an output parameter where the converted TDateTime value is stored in the function.
The return value is False (and outDate is set to an empty date value) if aString cannot be converted
in the routine.The time portion of the TDateTime value is not used or updated in the function.
Use TryISOStrToTime to convert a time value to a native TDateTime type.
Use TryISOStrToDateTime to convert a string which contains both date and time values to a
TDateTime type.
See also: TryISOStrToTime (662), TryISOStrToDateTime (662)
44.4.148 TryISOStrToDateTime
Synopsis: Attempts to convert an ISO 8601-formatted date/time value to a TDateTime type
44.4.149 TryISOStrToTime
Synopsis: Converts an ISO 8601-formatted time value to a TDateTime type
•HHNN
•HHNNSS
662
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
•HHNNSS.ZZZ
•HH:NN
•HH:NN:SS
•HH:NN:SS.ZZZ
aString may contain an optional time zone designation at the end of the string value, like ’Z’ for Zulu
time zone or a time zone offset expressed using either positive or negative hours and minutes. For
example:
•16:00:00Z
•12:00:00-04:00
The return value is True if the time value in aString is successfully converted in the function.
outTime is a TDateTime type used to store the time value converted in the function. When the
return value is False, outTime contains 0 for an empty time value.
Use TryISOStrToDate to convert an ISO 8601 date value to a TDateTime type.
Use TryISOStrToDateTime to convert a string which contains both date and time values to a
TDateTime type.
44.4.150 TryISOTZStrToTZOffset
Synopsis: Attempts to convert an ISO 8601 time zone designation to an offset in minutes
Declaration: function TryISOTZStrToTZOffset(const TZ: string; out TZOffset: Integer)
: Boolean
Visibility: default
Description: TryISOTZStrToTZOffset is a Boolean function which attempts to convert the ISO 8601 time
zone designation to a time zone offset expressed as a positive or negative number of minutes. TZ
contains the time zone designation examined in the function. It should not contain any other portion
of a date/time value using ISO 8601 notation - just the time zone designation.
TryISOTZStrToTZOffset recognizes the following values in the TZ argument:
ZRepresents time zone Zulu (short for "Zulu time") as used by the military and in navigation. Refers
to UTC (Coordinated Universal Time), formerly known as Greenwich Mean Time.
±HHNN or ±HH:NN time zone designation expressed as a positive or negative number of hours
and minutes for a given time value.
TZOffset is an Integer updated to contains the number of minutes needed to adjust a time value
for a given time zone back to UTC (Zulu time). The hour and minute component values in TZ are
converted to minutes and complemented (multiplied by -1) to derive the offset value. The derived
value in TZOffset is 0 when TZ contains Zulu time, an empty string (”), or cannot be converted
successfully.
The return value is True if the time zone designation in TZ is successfully converted to a time zone
offset.
Use ISOTZStrToTZOffset to convert the time zone designation and raise an exception for an
invalid time zone designation.
663
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
44.4.151 TryJulianDateToDateTime
Synopsis: Convert a Julian date representation to a TDateTime value.
44.4.152 TryModifiedJulianDateToDateTime
Synopsis: Convert a modified Julian date representation to a TDateTime value.
44.4.153 TryRecodeDateTime
Synopsis: Replace selected parts of a TDateTime value with other values
Declaration: function TryRecodeDateTime(const AValue: TDateTime; const AYear: Word;
const AMonth: Word; const ADay: Word;
const AHour: Word; const AMinute: Word;
const ASecond: Word;
const AMilliSecond: Word;
out AResult: TDateTime) : Boolean
Visibility: default
Description: TryRecodeDateTime replaces selected parts of the timestamp AValue with the date/time val-
ues specified in AYear, AMonth, ADay, AHour, AMinute, ASecond and AMilliSecond.
If any of these values equals the predefined constant RecodeLeaveFieldAsIs (586), then the corre-
sponding part of the date/time stamp is left untouched.
The resulting date/time is returned in AValue.
The function returns True if the encoding was successful. It returns False if one of the val-
ues AYear, AMonth, ADay, AHour, AMinute, ASecondAMilliSecond is not within a valid
range.
See also: RecodeYear (643), RecodeMonth (641), RecodeDay (639), RecodeHour (639), RecodeMinute (641),
RecodeSecond (642), RecodeMilliSecond (640), RecodeDate (637), RecodeTime (643), Recode-
DateTime (638)
664
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
Listing: ./datutex/ex97.pp
Program Example97 ;
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 2000 : ' ,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.154 UniversalTimeToLocal
Synopsis: Convert UTC time to local time
Declaration: function UniversalTimeToLocal(UT: TDateTime) : TDateTime
function UniversalTimeToLocal(UT: TDateTime; TZOffset: Integer)
: TDateTime
Visibility: default
Description: UniversalTimeToLocal converts a universal time indication to a local time: it applies the
TZOffset time zone offset to the UT Universal time (UTC). If no TZOffset is specified, the
local time offset as returned by GetLocalTimeOffset (584) is used.
Note that for times in the past or in the future, or for time zones with DST, omitting the TZoffset
may lead to wrong results depending on GetLocalTimeOffset being able to compute the correct offset
for the LT on the target platform. Currently only Windows Vista and newer return correct offsets for
a given date. Older Windows systems or Linux/Unix return always the offset for the current date.
See also: GetLocalTimeOffset (584), LocalTimeToUniversal (625)
44.4.155 UnixTimeStampToMac
Synopsis: Convert Unix Timestamp to a Mac Timestamp
Declaration: function UnixTimeStampToMac(const AValue: Int64) : Int64
Visibility: default
Description: UnixTimeStampToMac converts the UNIX epoch time in AValue to a valid Mac timestamp
indication and returns the result.
Errors: None.
See also: DateTimeToMac (592), MacToDateTime (625), MacTimeStampToUnix (625)
665
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
44.4.156 UnixToDateTime
Synopsis: Convert Unix epoch time to a TDateTime value
Declaration: function UnixToDateTime(const AValue: Int64; aReturnUTC: Boolean)
: TDateTime
Visibility: default
Description: UnixToDateTime converts epoch time (seconds elapsed since 1/1/1970) to a TDateTime value.
See also: DateTimeToUnix (592)
44.4.157 WeekOf
Synopsis: Extract week (of the year) from a given date.
Declaration: function WeekOf(const AValue: TDateTime) : Word
Visibility: default
Description: WeekOf returns the week-of-the-year part of the AValue date/time indication. It is a number
between 1 and 53.
For an example, see YearOf (678)
See also: YearOf (678), DayOf (593), MonthOf (634), HourOf (608), MinuteOf (630), SecondOf (647), Mil-
liSecondOf (625)
44.4.158 WeekOfTheMonth
Synopsis: Extract the week of the month (and optionally month and year) from a TDateTime 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 (667), DayOfTheMonth (593), HourOfTheMonth (609), MinuteOfTheMonth (631),
SecondOfTheMonth (648), MilliSecondOfTheMonth (627)
Listing: ./datutex/ex41.pp
Program Example41 ;
Uses S y s U t i l s , D a t e U t i l s ;
Var
N : TDateTime ;
666
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
Begin
N: =Now;
Writeln ( ' Week o f t h e Month : ' , WeekOfTheMonth (N ) ) ;
Writeln ( ' Day o f t h e Month : ' , DayOfTheMonth (N ) ) ;
Writeln ( ' Hour o f t h e Month : ' , HourOfTheMonth (N ) ) ;
Writeln ( ' Minute o f t h e Month : ' , MinuteOfTheMonth (N ) ) ;
Writeln ( ' Second o f t h e Month : ' , SecondOfTheMonth (N ) ) ;
Writeln ( ' M i l l i S e c o n d o f t h e Month : ' ,
MilliSecondOfTheMonth (N ) ) ;
End .
44.4.159 WeekOfTheYear
Synopsis: Extract the week of the year (and optionally year) of a TDateTime indication.
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 (666).
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 (666), MonthOfTheYear (634), DayOfTheYear (594), HourOfTheYear (610), MinuteOfTheYear
(631), SecondOfTheYear (649), MilliSecondOfTheYear (628)
Listing: ./datutex/ex40.pp
Program Example40 ;
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 ( ' Month o f t h e year : ' , MonthOfTheYear (N ) ) ;
Writeln ( ' Week o f t h e year : ' , WeekOfTheYear (N ) ) ;
Writeln ( ' Day o f t h e year : ' , DayOfTheYear (N ) ) ;
Writeln ( ' Hour o f t h e year : ' , HourOfTheYear (N ) ) ;
Writeln ( ' Minute o f t h e year : ' , MinuteOfTheYear (N ) ) ;
Writeln ( ' Second o f t h e year : ' , SecondOfTheYear (N ) ) ;
Writeln ( ' M i l l i S e c o n d o f t h e year : ' ,
MilliSecondOfTheYear (N ) ) ;
End .
667
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
44.4.160 WeeksBetween
Synopsis: Calculate the number of whole weeks between two TDateTime values
Listing: ./datutex/ex57.pp
Program Example57 ;
Uses S y s U t i l s , D a t e U t i l s ;
begin
Write ( ' Number o f weeks between ' ) ;
Write ( DateToStr ( AThen ) , ' and ' , DateToStr (ANow ) ) ;
W r i t e l n ( ' : ' , WeeksBetween (ANow, AThen ) ) ;
end ;
Var
D1 , D2 : TDateTime ;
Begin
D1: = Today ;
D2: = Today −7;
Test ( D1 , D2 ) ;
D2: = Today −8;
Test ( D1 , D2 ) ;
D2: = Today −14;
Test ( D1 , D2 ) ;
D2: = Today −35;
Test ( D1 , D2 ) ;
D2: = Today −36;
Test ( D1 , D2 ) ;
D2: = Today −17;
Test ( D1 , D2 ) ;
End .
44.4.161 WeeksInAYear
Synopsis: Return the number of weeks in a given year
668
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
Description: WeeksInAYear returns the number of weeks in the year AYear. The return value is either 52 or
53.
Remark The first week of the year is determined according to the ISO 8601 standard: It is the first week that
has at least 4 days in it, i.e. it includes a Thursday.
See also: WeeksInYear (669), DaysInYear (597), DaysInAYear (596), DaysInMonth (596), DaysInAMonth
(595)
Listing: ./datutex/ex13.pp
Program Example13 ;
Uses S y s U t i l s , D a t e U t i l s ;
Var
Y : Word ;
Begin
For Y:=1992 to 2010 do
W r i t e l n ( Y , ' has ' , WeeksInAYear (Y ) , ' weeks . ' ) ;
End .
44.4.162 WeeksInYear
Synopsis: return the number of weeks in the year, given a date
Declaration: function WeeksInYear(const AValue: TDateTime) : Word
Visibility: default
Description: WeeksInYear returns the number of weeks in the year part of AValue. The return value is either
52 or 53.
Remark The first week of the year is determined according to the ISO 8601 standard: It is the first week that
has at least 4 days in it, i.e. it includes a Thursday.
See also: WeeksInAYear (668), DaysInYear (597), DaysInAYear (596), DaysInMonth (596), DaysInAMonth
(595)
Listing: ./datutex/ex12.pp
Program Example12 ;
Uses S y s U t i l s , D a t e U t i l s ;
Var
Y : Word ;
Begin
For Y:=1992 to 2010 do
W r i t e l n ( Y , ' has ' , WeeksInYear ( EncodeDate ( Y , 2 , 1 ) ) , ' weeks . ' ) ;
End .
669
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
44.4.163 WeekSpan
Synopsis: Calculate the approximate number of weeks between two TDateTime values.
Listing: ./datutex/ex65.pp
Program Example57 ;
Uses S y s U t i l s , D a t e U t i l s ;
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.164 WithinPastDays
Synopsis: Check whether two TDateTimes are only a number of days apart
670
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
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 (594) 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
See also: WithinPastYears (677), WithinPastMonths (674), WithinPastWeeks (676), WithinPastHours (671),
WithinPastMinutes (673), WithinPastSeconds (675), WithinPastMilliSeconds (672)
Listing: ./datutex/ex50.pp
Program Example50 ;
Uses S y s U t i l s , D a t e U t i l s ;
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.165 WithinPastHours
Synopsis: Check whether two TDateTimes 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 differ-
ence between them is at most AHours hours apart, or False if they are further apart.
671
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
Remark Since this function uses the HoursBetween (610) 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 (677), WithinPastMonths (674), WithinPastWeeks (676), WithinPastDays (670),
WithinPastMinutes (673), WithinPastSeconds (675), WithinPastMilliSeconds (672)
Listing: ./datutex/ex51.pp
Program Example51 ;
Uses S y s U t i l s , D a t e U t i l s ;
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−(59 * OneMinute ) ;
Test ( D1 , D2 , 1 ) ;
D2: =D1−(61 * OneMinute ) ;
Test ( D1 , D2 , 1 ) ;
D2: =D1−(122 * OneMinute ) ;
Test ( D1 , D2 , 1 ) ;
D2: =D1−(306 * OneMinute ) ;
Test ( D1 , D2 , 5 ) ;
D2: =D1−(5.4 * OneHour ) ;
Test ( D1 , D2 , 5 ) ;
D2: =D1−(2.5 * OneHour ) ;
Test ( D1 , D2 , 1 ) ;
Test ( D1 , D2 , 2 ) ;
Test ( D1 , D2 , 3 ) ;
End .
44.4.166 WithinPastMilliSeconds
Synopsis: Check whether two TDateTimes are only a number of milliseconds apart
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.
672
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
Remark Since this function uses the MilliSecondsBetween (628) function to calculate the difference in mil-
liseconds, 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 (677), WithinPastMonths (674), WithinPastWeeks (676), WithinPastDays (670),
WithinPastHours (671), WithinPastMinutes (673), WithinPastSeconds (675)
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 ;
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.167 WithinPastMinutes
Synopsis: Check whether two TDateTimes 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 dif-
ference between them is at most AMinutes minutes apart, or False if they are further apart.
Remark Since this function uses the MinutesBetween (632) 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
673
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
See also: WithinPastYears (677), WithinPastMonths (674), WithinPastWeeks (676), WithinPastDays (670),
WithinPastHours (671), WithinPastSeconds (675), WithinPastMilliSeconds (672)
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 }
Uses S y s U t i l s , D a t e U t i l s ;
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−(59 * OneSecond ) ;
Test ( D1 , D2 , 1 ) ;
D2: =D1−(61 * OneSecond ) ;
Test ( D1 , D2 , 1 ) ;
D2: =D1−(122 * OneSecond ) ;
Test ( D1 , D2 , 1 ) ;
D2: =D1−(306 * OneSecond ) ;
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.168 WithinPastMonths
Synopsis: Check whether two TDateTimes 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 differ-
ence between them is at most AMonths months apart, or False if they are further apart.
Remark Since this function uses the MonthsBetween (634) 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
674
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
See also: WithinPastYears (677), WithinPastWeeks (676), WithinPastDays (670), WithinPastHours (671),
WithinPastMinutes (673), WithinPastSeconds (675), WithinPastMilliSeconds (672)
Listing: ./datutex/ex48.pp
Program Example48 ;
Uses S y s U t i l s , D a t e U t i l s ;
begin
Write ( DateToStr ( AThen ) , ' and ' , DateToStr (ANow ) ) ;
Write ( ' are w i t h i n ' , AMonths , ' months : ' ) ;
W r i t e l n ( WithinPastMonths (ANow, AThen , AMonths ) ) ;
end ;
Var
D1 , D2 : TDateTime ;
Begin
D1: = Today ;
D2: = Today −364;
Test ( D1 , D2 , 1 2 ) ;
D2: = Today −365;
Test ( D1 , D2 , 1 2 ) ;
D2: = Today −366;
Test ( D1 , D2 , 1 2 ) ;
D2: = Today −390;
Test ( D1 , D2 , 1 2 ) ;
D2: = Today −368;
Test ( D1 , D2 , 1 1 ) ;
D2: = Today −1000;
Test ( D1 , D2 , 3 1 ) ;
Test ( D1 , D2 , 3 2 ) ;
Test ( D1 , D2 , 3 3 ) ;
End .
44.4.169 WithinPastSeconds
Synopsis: Check whether two TDateTimes 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 dif-
ference between them is at most ASeconds seconds apart, or False if they are further apart.
Remark Since this function uses the SecondsBetween (649) 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
675
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
See also: WithinPastYears (677), WithinPastMonths (674), WithinPastWeeks (676), WithinPastDays (670),
WithinPastHours (671), WithinPastMinutes (673), WithinPastMilliSeconds (672)
Listing: ./datutex/ex53.pp
Program Example53 ;
Uses S y s U t i l s , D a t e U t i l s ;
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.4 * OneSecond ) ;
Test ( D1 , D2 , 5 ) ;
D2: =D1−(2.5 * OneSecond ) ;
Test ( D1 , D2 , 1 ) ;
Test ( D1 , D2 , 2 ) ;
Test ( D1 , D2 , 3 ) ;
End .
44.4.170 WithinPastWeeks
Synopsis: Check whether two TDateTimes 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 differ-
ence between them is at most AWeeks weeks apart, or False if they are further apart.
Remark Since this function uses the WeeksBetween (668) 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 (677), WithinPastMonths (674), WithinPastDays (670), WithinPastHours (671),
WithinPastMinutes (673), WithinPastSeconds (675), WithinPastMilliSeconds (672)
676
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
Listing: ./datutex/ex49.pp
Program Example49 ;
Uses S y s U t i l s , D a t e U t i l s ;
begin
Write ( DateToStr ( AThen ) , ' and ' , DateToStr (ANow ) ) ;
Write ( ' are w i t h i n ' ,AWeeks , ' weeks : ' ) ;
W r i t e l n ( WithinPastWeeks (ANow, AThen , AWeeks ) ) ;
end ;
Var
D1 , D2 : TDateTime ;
Begin
D1: = Today ;
D2: = Today −7;
Test ( D1 , D2 , 1 ) ;
D2: = Today −8;
Test ( D1 , D2 , 1 ) ;
D2: = Today −14;
Test ( D1 , D2 , 1 ) ;
D2: = Today −35;
Test ( D1 , D2 , 5 ) ;
D2: = Today −36;
Test ( D1 , D2 , 5 ) ;
D2: = Today −17;
Test ( D1 , D2 , 1 ) ;
Test ( D1 , D2 , 2 ) ;
Test ( D1 , D2 , 3 ) ;
End .
44.4.171 WithinPastYears
Synopsis: Check whether two TDateTimes are only a number of years apart
See also: WithinPastMonths (674), WithinPastWeeks (676), WithinPastDays (670), WithinPastHours (671),
WithinPastMinutes (673), WithinPastSeconds (675), WithinPastMilliSeconds (672)
Listing: ./datutex/ex47.pp
677
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
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 ;
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 ) ) ;
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.172 YearOf
Synopsis: Extract the year from a given date.
Declaration: function YearOf(const AValue: TDateTime) : Word
Visibility: default
Description: YearOf returns the year part of the AValue date/time indication. It is a number between 1 and
9999.
See also: MonthOf (634), DayOf (593), WeekOf (666), HourOf (608), MinuteOf (630), SecondOf (647),
MilliSecondOf (625)
Listing: ./datutex/ex23.pp
Program Example23 ;
Uses S y s U t i l s , D a t e U t i l s ;
678
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
Var
D : TDateTime ;
Begin
D: =Now;
Writeln ( ' Year : ' , YearOf (D ) ) ;
Writeln ( ' Month : ' , MonthOf (D ) ) ;
Writeln ( ' Day : ' , DayOf (D ) ) ;
Writeln ( ' Week : ' , WeekOf (D ) ) ;
Writeln ( ' Hour : ' , HourOf (D ) ) ;
Writeln ( ' Minute : ' , MinuteOf (D ) ) ;
Writeln ( ' Second : ' , SecondOf (D ) ) ;
Writeln ( ' MilliSecond : ' , M i l l i S e c o n d O f (D ) ) ;
End .
44.4.173 YearsBetween
Synopsis: Calculate the number of whole years between two TDateTime values
Declaration: function YearsBetween(const ANow: TDateTime; const AThen: TDateTime;
AExact: Boolean) : 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 (634), WeeksBetween (668), DaysBetween (594), HoursBetween (610), Minutes-
Between (632), SecondsBetween (649), MilliSecondsBetween (628), YearSpan (680)
Listing: ./datutex/ex55.pp
Program Example55 ;
Uses S y s U t i l s , D a t e U t i l s ;
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;
679
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
Test ( D1 , D2 ) ;
D2: = Today −390;
Test ( D1 , D2 ) ;
D2: = Today −368;
Test ( D1 , D2 ) ;
D2: = Today −1000;
Test ( D1 , D2 ) ;
End .
44.4.174 YearSpan
Synopsis: Calculate the approximate number of years between two TDateTime 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 (635), WeekSpan (670), DaySpan (597), HourSpan (611), MinuteSpan (633), Sec-
ondSpan (650), MilliSecondSpan (629), YearsBetween (679)
Listing: ./datutex/ex63.pp
Program Example63 ;
Uses S y s U t i l s , D a t e U t i l s ;
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;
680
CHAPTER 44. REFERENCE FOR UNIT ’DATEUTILS’
Test ( D1 , D2 ) ;
End .
44.4.175 Yesterday
Synopsis: Return the previous day.
Declaration: function Yesterday : TDateTime
Visibility: default
Description: Yesterday returns yesterday’s date. Yesterday is determined from the system clock, i.e. it is
Today (656) -1.
See also: Today (656), Tomorrow (657)
Listing: ./datutex/ex18.pp
Program Example18 ;
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 .
681
Chapter 45
Name Page
BaseUnix 140
System 1331
45.2 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 (1598) unit instead.
682
CHAPTER 45. REFERENCE FOR UNIT ’DOS’
Table 45.2:
Name Description
DosVersion (1) Get OS version
GetCBreak (696) Get setting of control-break handling flag
GetDate (697) Get system date
GetIntVec (699) Get interrupt vector status
GetTime (701) Get system time
GetVerify (701) Get verify flag
Intr (702) Execute an interrupt
Keep (702) Keep process in memory and exit
MSDos (702) Execute MS-Dos function call
PackTime (703) Pack time for file time
SetCBreak (703) Set control-break handling flag
SetDate (704) Set system date
SetIntVec (705) Set interrupt vectors
SetTime (705) Set system time
SetVerify (705) Set verify flag
SwapVectors (706) Swap interrupt vectors
UnPackTime (706) Unpack file time
Table 45.3:
Name Description
DosExitCode (1) Exit code of last executed program
EnvCount (692) Return number of environment variables
EnvStr (692) Return environment string pair
Exec (693) Execute program
GetEnv (697) Return specified environment string
Table 45.4:
Name Description
AddDisk (688) Add disk to list of disks (UNIX only)
DiskFree (689) Return size of free disk space
DiskSize (690) Return total disk size
683
CHAPTER 45. REFERENCE FOR UNIT ’DOS’
Table 45.5:
Name Description
FExpand (693) Expand filename to full path
FindClose (693) Close finfirst/findnext session
FindFirst (694) Start find of file
FindNext (695) Find next file
FSearch (695) Search for file in a path
FSplit (696) Split filename in parts
GetFAttr (698) Return file attributes
GetFTime (699) Return file time
GetLongName (700) Convert short filename to long filename (DOS only)
GetShortName (700) Convert long filename to short filename (DOS only)
SetFAttr (704) Set file attributes
SetFTime (705) Set file time
684
CHAPTER 45. REFERENCE FOR UNIT ’DOS’
archive = $20
directory = $10
fauxiliary = $0010
fcarry = $0001
FileNameLen = 255
fmclosed = $D7B0
File is closed
fminout = $D7B3
fminput = $D7B1
685
CHAPTER 45. REFERENCE FOR UNIT ’DOS’
fmoutput = $D7B2
foverflow = $0800
fparity = $0004
fsign = $0080
fzero = $0040
hidden = $02
readonly = $01
sysfile = $04
volumeid = $08
45.9.2 Types
ComStr = string
DirStr = string
ExtStr = string
686
CHAPTER 45. REFERENCE FOR UNIT ’DOS’
NameStr = string
PathStr = string
687
CHAPTER 45. REFERENCE FOR UNIT ’DOS’
);
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.
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 :
688
CHAPTER 45. REFERENCE FOR UNIT ’DOS’
The first call to AddDisk will therefore add a name for the second harddisk, The second call for the
third drive, and so on until 23 drives have been added (corresponding to drives ’D:’ to ’Z:’)
Errors: None
See also: DiskFree (689), DiskSize (690)
45.10.2 DiskFree
Synopsis: Get free size on Disk.
Declaration: function DiskFree(drive: Byte) : Int64
Visibility: default
Description: DiskFree returns the number of free bytes on a disk. The parameter Drive indicates which disk
should be checked. This parameter is 1 for floppy a:, 2 for floppy b:, etc. A value of 0 returns the
free space on the current drive.
Remark For Unices: The diskfree and disksize functions need a file on the specified drive, since this
is required for the statfs system call. These filenames are set in the initialization of the Dos unit,
and have been preset to :
There is room for 1-26 drives. You can add a drive with the AddDisk (688) procedure. These settings
can be coded in dos.pp, in the initialization part.
Listing: ./dosex/ex6.pp
Program Example6 ;
uses Dos ;
begin
WriteLn ( ' T h i s p a r t i t i o n s i z e has ' , DiskSize ( 0 ) , ' b y t e s ' ) ;
WriteLn ( ' C u r r e n t l y ' , DiskFree ( 0 ) , ' b y t e s are f r e e ' ) ;
end .
689
CHAPTER 45. REFERENCE FOR UNIT ’DOS’
45.10.3 DiskSize
Synopsis: Get total size of disk.
Declaration: function DiskSize(drive: Byte) : Int64
Visibility: default
Description: DiskSize returns the total size (in bytes) of a disk. The parameter Drive indicates which disk
should be checked. This parameter is 1 for floppy a:, 2 for floppy b:, etc. A value of 0 returns the
size of the current drive.
Remark For Unix only: The diskfree and disksize functions need a file on the specified drive, since
this is required for the statfs system call. These filenames are set in the initialization of the Dos
unit, and have been preset to :
•’.’ for the current drive,
•’/fd0/.’ for the first floppy-drive (Linux only).
•’/fd1/.’ for the second floppy-drive (Linux only).
•’/’ for the first hard disk.
There is room for 1-26 drives. You can add a drive with the AddDisk (688) procedure. These settings
can be coded in dos.pp, in the initialization part.
For an example, see DiskFree (689).
Errors: -1 when a failure occurs, or an invalid drive number is given.
See also: DiskFree (689), AddDisk (688)
45.10.4 DosExitCode
Synopsis: Exit code of last executed program.
Declaration: function DosExitCode : Word
Visibility: default
Description: DosExitCode contains (in the low byte) the exit-code of a program executed with the Exec call.
Errors: None.
See also: Exec (693)
Listing: ./dosex/ex5.pp
Program Example5 ;
uses Dos ;
begin
{ $IFDEF Unix }
WriteLn ( ' E x e c u t i n g / b i n / l s −l a ' ) ;
Exec ( ' / b i n / l s ' , '−l a ' ) ;
{ $ELSE }
WriteLn ( ' E x e c u t i n g D i r ' ) ;
Exec ( GetEnv ( 'COMSPEC ' ) , ' /C d i r ' ) ;
{ $ENDIF }
WriteLn ( ' Program r e t u r n e d w i t h ExitCode ' , Lo ( DosExitCode ) ) ;
end .
690
CHAPTER 45. REFERENCE FOR UNIT ’DOS’
45.10.5 DosVersion
Synopsis: Current OS version
Declaration: function DosVersion : Word
Visibility: default
Description: DosVersion returns the operating system or kernel version. The low byte contains the major
version number, while the high byte contains the minor version number.
Remark On systems where versions consists of more then two numbers, only the first two numbers will be
returned. For example Linux version 2.1.76 will give you DosVersion 2.1. Some operating systems,
such as FreeBSD, do not have system calls to return the kernel version, in that case a value of 0 will
be returned.
Errors: None.
Listing: ./dosex/ex1.pp
Program Example1 ;
uses Dos ;
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 ' , Lo ( V e r s i o n ) , ' . ' , Hi ( V e r s i o n ) ) ;
end .
45.10.6 DTToUnixDate
Synopsis: Convert a DateTime to Unix timestamp
Declaration: function DTToUnixDate(DT: DateTime) : LongInt
Visibility: default
691
CHAPTER 45. REFERENCE FOR UNIT ’DOS’
Description: DTToUnixDate converts the DateTime value in DT to a Unix timestamp. It is an internal function,
implemented on Unix platforms, and should not be used.
Errors: None.
See also: UnixDateToDT (706), PackTime (703), UnpackTime (706), GetTime (701), SetTime (705)
45.10.7 EnvCount
Synopsis: Return the number of environment variables
Declaration: function EnvCount : LongInt
Visibility: default
45.10.8 EnvStr
Synopsis: Return environment variable by index
Declaration: function EnvStr(Index: LongInt) : string
Visibility: default
Description: EnvStr returns the Index-th Name=Value pair from the list of environment variables. The index
of the first pair is zero.
Errors: The length is limited to 255 characters.
See also: EnvCount (692), GetEnv (697)
Listing: ./dosex/ex13.pp
Program Example13 ;
uses Dos ;
var
i : Longint ;
begin
WriteLn ( ' C u r r e n t Environment i s : ' ) ;
f o r i :=1 to EnvCount do
WriteLn ( EnvStr ( i ) ) ;
end .
692
CHAPTER 45. REFERENCE FOR UNIT ’DOS’
45.10.9 Exec
Synopsis: Execute another program, and wait for it to finish.
45.10.10 FExpand
Synopsis: Expand a relative path to an absolute path
Declaration: function FExpand(const path: PathStr) : PathStr
Visibility: default
Description: FExpand takes its argument and expands it to a complete filename, i.e. a filename starting from the
root directory of the current drive, prepended with the drive-letter or volume name (when supported).
Remark On case sensitive file systems (such as Unix and Linux), the resulting name is left as it is, otherwise
it is converted to uppercase.
Errors: FSplit (696)
Listing: ./dosex/ex11.pp
Program Example11 ;
uses Dos ;
begin
WriteLn ( ' Expanded Name o f t h i s program i s ' , FExpand ( ParamStr ( 0 ) ) ) ;
end .
45.10.11 FindClose
Synopsis: Dispose resources allocated by a FindFirst (694)/FindNext (695) sequence.
693
CHAPTER 45. REFERENCE FOR UNIT ’DOS’
Description: FindClose frees any resources associated with the search record F.
This call is needed to free any internal resources allocated by the FindFirst (694) or FindNext (695)
calls.
The Unix implementation of the Dos unit therefore keeps a table of open directories, and when the
table is full, closes one of the directories, and reopens another. This system is adequate but slow if
you use a lot of searchrecs.
So, to speed up the findfirst/findnext system, the FindClose call was implemented. When you
don’t need a searchrec any more, you can tell this to the Dos unit by issuing a FindClose call.
The directory which is kept open for this searchrec is then closed, and the table slot freed.
Remark It is recommended to use the Linux call Glob when looking for files on Linux.
Errors: Errors are reported in DosError.
See also: FindFirst (694), FindNext (695)
45.10.12 FindFirst
Synopsis: Start search for one or more files.
Declaration: procedure FindFirst(const path: PathStr; attr: Word; var f: SearchRec)
Visibility: default
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 the EMX target, you cannot issue two different FindFirst calls. That is, you must close any
previous search operation with FindClose (693) 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 (695), FindClose (693)
Listing: ./dosex/ex7.pp
Program Example7 ;
uses Dos ;
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(40−Length ( D i r .Name ) ) , D i r . Size : 9 ) ;
FindNext ( D i r ) ;
end ;
FindClose ( D i r ) ;
end .
694
CHAPTER 45. REFERENCE FOR UNIT ’DOS’
45.10.13 FindNext
Synopsis: Find next matching file after FindFirst (694)
45.10.14 FSearch
Synopsis: Search a file in searchpath
Declaration: function FSearch(path: PathStr; dirlist: string) : PathStr
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.
Listing: ./dosex/ex10.pp
program Example10 ;
uses Dos ;
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 .
695
CHAPTER 45. REFERENCE FOR UNIT ’DOS’
45.10.15 FSplit
Synopsis: Split a full-path filename in parts.
Declaration: procedure FSplit(path: PathStr; var dir: DirStr; var name: NameStr;
var ext: ExtStr)
Visibility: default
Description: FSplit splits a full file name into 3 parts : A Path, a Name and an extension (in ext.) The
extension is taken to be all letters after the last dot (.). For Dos, however, an exception is made when
LFNSupport=False, then the extension is defined as all characters after the first dot.
Errors: None.
See also: FSearch (695)
Listing: ./dosex/ex12.pp
program Example12 ;
uses Dos ;
{ Program t o demonstrate t h e F S p l i t f u n c t i o n . }
var d i r : d i r s t r ;
name : namestr ;
ext : e x t s t r ;
begin
F S p l i t ( ParamStr ( 1 ) , d i r , name, e x t ) ;
WriteLn ( ' S p l i t t e d ' , ParamStr ( 1 ) , ' i n : ' ) ;
WriteLn ( ' Path : ' , dir );
WriteLn ( 'Name : ' ,name ) ;
WriteLn ( ' E x t e n s i o n : ' , e x t ) ;
end .
45.10.16 GetCBreak
Synopsis: Get control-Break flag
Declaration: procedure GetCBreak(var breakvalue: Boolean)
Visibility: default
Description: GetCBreak gets the status of CTRL-Break checking under Dos and Amiga. When BreakValue
is false, then Dos only checks for the CTRL-Break key-press when I/O is performed. When it is
set to True, then a check is done at every system call.
Remark Under non-Dos and non-Amiga operating systems, BreakValue always returns True.
Errors: None
See also: SetCBreak (703)
696
CHAPTER 45. REFERENCE FOR UNIT ’DOS’
45.10.17 GetDate
Synopsis: Get the current date
Declaration: procedure GetDate(var year: Word; var month: Word; var mday: Word;
var wday: Word)
Visibility: default
Description: GetDate returns the system’s date. Year is a number in the range 1980..2099.mday is the day of
the month, wday is the day of the week, starting with Sunday as day 0.
Errors: None.
See also: GetTime (701), SetDate (704)
Listing: ./dosex/ex2.pp
Program Example2 ;
uses Dos ;
const
DayStr : array [ 0 . . 6 ] of s t r i n g [ 3 ] = ( ' Sun ' , 'Mon ' , ' Tue ' , 'Wed ' , ' Thu ' , ' F r i ' , ' Sat ' ) ;
MonthStr : array [ 1 . . 1 2 ] of s t r i n g [ 3 ] = ( ' Jan ' , ' Feb ' , ' Mar ' , ' Apr ' , ' May ' , ' Jun ' ,
' J u l ' , ' Aug ' , ' Sep ' , ' Oct ' , ' Nov ' , ' Dec ' ) ;
var
Year , Month , Day ,WDay : word ;
begin
GetDate ( Year , Month , Day ,WDay ) ;
WriteLn ( ' C u r r e n t date ' ) ;
WriteLn ( DayStr [WDay] , ' , ' , Day , ' ' , MonthStr [ Month ] , ' ' , Year , ' . ' ) ;
end .
45.10.18 GetEnv
Synopsis: Get environment variable by name.
Declaration: function GetEnv(envvar: string) : string
Visibility: default
Description: Getenv returns the value of the environment variable EnvVar. When there is no environment
variable EnvVar defined, an empty string is returned.
Remark Under some operating systems (such as Unix), case is important when looking for EnvVar.
Errors: None.
See also: EnvCount (692), EnvStr (692)
Listing: ./dosex/ex14.pp
Program Example14 ;
uses Dos ;
begin
697
CHAPTER 45. REFERENCE FOR UNIT ’DOS’
45.10.19 GetFAttr
Synopsis: Get file attributes
Declaration: procedure GetFAttr(var f; var attr: Word)
Visibility: default
Description: GetFAttr returns 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 examined with the
following constants :
•ReadOnly
•Hidden
•SysFile
•VolumeId
•Directory
•Archive
•Directory
•ReadOnly if the current process doesn’t have access to the file.
•Hidden for files whose name starts with a dot (’.’).
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 ( '− Read−Only ' ) ;
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 .
698
CHAPTER 45. REFERENCE FOR UNIT ’DOS’
45.10.20 GetFTime
Synopsis: Get file last modification time.
Listing: ./dosex/ex9.pp
Program Example9 ;
uses Dos ;
var
f : File ;
Time : L o n g i n t ;
DT : DateTime ;
begin
i f Paramcount>0 then
Assign ( f , ParamStr ( 1 ) )
else
Assign ( f , ' ex9 . pp ' ) ;
Reset ( f ) ;
GetFTime ( f , Time ) ;
Close ( f ) ;
UnPackTime ( Time , DT ) ;
Write ( ' F i l e ' , ParamStr ( 1 ) , ' i s l a s t m o d i f i e d on ' ) ;
W r i t e l n ( L0 (DT . Month ) , '− ' , L0 (DT . Day ) , '− ' ,DT . Year ,
' a t ' , L0 (DT . Hour ) , ' : ' , L0 (DT . Min ) ) ;
end .
45.10.21 GetIntVec
Synopsis: Get interrupt vector
Declaration: procedure GetIntVec(intno: Byte; var vector: pointer)
Visibility: default
699
CHAPTER 45. REFERENCE FOR UNIT ’DOS’
45.10.22 GetLongName
Synopsis: Get the long filename of a DOS 8.3 filename.
Declaration: function GetLongName(var p: string) : Boolean
Visibility: default
Description: This function is only implemented in the GO32V2 and Win32 versions of Free Pascal.
GetLongName changes the filename p to a long filename if the API call to do this is successful.
The resulting string is the long file name corresponding to the short filename p.
The function returns True if the API call was successful, False otherwise.
This function should only be necessary when using the DOS extender under Windows 95 and higher.
Errors: If the API call was not successful, False is returned.
See also: GetShortName (700)
45.10.23 GetMsCount
Synopsis: Number of milliseconds since a starting point.
Declaration: function GetMsCount : Int64
Visibility: default
Description: GetMSCount returns a number of milliseconds elapsed since a certain moment in time. This
moment in time is implementation dependent. This function is used for timing purposes: Subtracting
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 (701)
45.10.24 GetShortName
Synopsis: Get the short (8.3) filename of a long filename.
Declaration: function GetShortName(var p: string) : Boolean
Visibility: default
Description: This function is only implemented in the GO32V2 and Win32 versions of Free Pascal.
GetShortName changes the filename p to a short filename if the API call to do this is successful.
The resulting string is the short file name corresponding to the long filename p.
The function returns True if the API call was successful, False otherwise.
This function should only be necessary when using the DOS extender under Windows 95 and higher.
700
CHAPTER 45. REFERENCE FOR UNIT ’DOS’
45.10.25 GetTime
Synopsis: Return the current time
Declaration: procedure GetTime(var hour: Word; var minute: Word; var second: Word;
var sec100: Word)
Visibility: default
Description: GetTime returns the system’s time. Hour is a on a 24-hour time scale. sec100 is in hundredth
of a second.
Remark Certain operating systems (such as Amiga), always set the sec100 field to zero.
Errors: None.
See also: GetDate (697), SetTime (705)
Listing: ./dosex/ex3.pp
Program Example3 ;
uses Dos ;
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
Synopsis: Get verify flag
701
CHAPTER 45. REFERENCE FOR UNIT ’DOS’
Description: GetVerify returns the status of the verify flag under Dos. When Verify is True, then Dos
checks data which are written to disk, by reading them after writing. If Verify is False, then data
written to disk are not verified.
Remark Under non-Dos systems (excluding EMX applications running under vanilla DOS), Verify is always
True.
Errors: None.
See also: SetVerify (705)
45.10.27 Intr
Synopsis: Execute interrupt
45.10.28 Keep
Synopsis: Terminate and stay resident.
45.10.29 MSDos
Synopsis: Execute MS-DOS system call
702
CHAPTER 45. REFERENCE FOR UNIT ’DOS’
45.10.30 PackTime
Synopsis: Pack DateTime value to a packed-time format.
Errors: None.
See also: SetFTime (705), FindFirst (694), FindNext (695), UnPackTime (706)
Listing: ./dosex/ex4.pp
Program Example4 ;
uses Dos ;
var
DT : DateTime ;
Time : l o n g i n t ;
begin
with DT do
begin
Year : = 2 0 0 8 ;
Month : = 1 1 ;
Day : = 1 1 ;
Hour : = 1 1 ;
Min : = 1 1 ;
Sec : = 1 1 ;
end ;
PackTime (DT, Time ) ;
WriteLn ( ' Packed Time : ' , Time ) ;
UnPackTime ( Time , DT ) ;
WriteLn ( ' Unpacked Again : ' ) ;
with DT do
begin
WriteLn ( ' Year ' , Year ) ;
WriteLn ( ' Month ' , Month ) ;
WriteLn ( ' Day ' , Day ) ;
WriteLn ( ' Hour ' , Hour ) ;
WriteLn ( ' Min ' , Min ) ;
WriteLn ( ' Sec ' , Sec ) ;
end ;
end .
45.10.31 SetCBreak
Synopsis: Set Control-Break flag status
Declaration: procedure SetCBreak(breakvalue: Boolean)
Visibility: default
703
CHAPTER 45. REFERENCE FOR UNIT ’DOS’
Description: SetCBreak sets the status of CTRL-Break checking. When BreakValue is false, then Dos
only checks for the CTRL-Break key-press when I/O is performed. When it is set to True, then a
check is done at every system call.
Remark Under non-Dos and non-Amiga operating systems, this call does nothing.
Errors: None.
45.10.32 SetDate
Synopsis: Set system date
Declaration: procedure SetDate(year: Word; month: Word; day: Word)
Visibility: default
Description: SetDate sets the system’s internal date. Year is a number between 1980 and 2099.
Remark On a Unix machine, there must be root privileges, otherwise this routine will do nothing. On other
Unix systems, this call currently does nothing.
Errors: None.
See also: GetDate (697), SetTime (705)
45.10.33 SetFAttr
Synopsis: Set file attributes
•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.
704
CHAPTER 45. REFERENCE FOR UNIT ’DOS’
45.10.34 SetFTime
Synopsis: Set file modification time.
45.10.35 SetIntVec
Synopsis: Set interrupt vector
Declaration: procedure SetIntVec(intno: Byte; vector: pointer)
Visibility: default
Description: SetIntVec sets interrupt vector IntNo to Vector. Vector should point to an interrupt proce-
dure.
Remark This call does nothing, it is present for compatibility only.
Errors: None.
45.10.36 SetTime
Synopsis: Set system time
Declaration: procedure SetTime(hour: Word; minute: Word; second: Word; sec100: Word)
Visibility: default
Description: SetTime sets the system’s internal clock. The Hour parameter is on a 24-hour time scale.
Remark On a Linux machine, there must be root privileges, otherwise this routine will do nothing. On other
Unix systems, this call currently does nothing.
Errors: None.
45.10.37 SetVerify
Synopsis: Set verify flag
Declaration: procedure SetVerify(verify: Boolean)
Visibility: default
705
CHAPTER 45. REFERENCE FOR UNIT ’DOS’
Description: SetVerify sets the status of the verify flag under Dos. When Verify is True, then Dos checks
data which are written to disk, by reading them after writing. If Verify is False, then data written
to disk are not verified.
Remark Under non-Dos operating systems (excluding EMX applications running under vanilla Dos), Verify
is always True.
Errors: None.
See also: SetVerify (705)
45.10.38 SwapVectors
Synopsis: Swap interrupt vectors
45.10.39 UnixDateToDt
Synopsis: Convert a Unix timestamp to a DateTime record
Errors: None.
See also: DTToUnixDate (691), PackTime (703), UnpackTime (706), GetTime (701), SetTime (705)
45.10.40 UnpackTime
Synopsis: Unpack packed file time to a DateTime value
706
CHAPTER 45. REFERENCE FOR UNIT ’DOS’
45.10.41 weekday
Synopsis: Return the day of the week
Declaration: function weekday(y: LongInt; m: LongInt; d: LongInt) : LongInt
Visibility: default
Description: WeekDay returns the day of the week on which the day Y/M/D falls. Sunday is represented by 0,
Saturday is 6.
Errors: On error, -1 is returned.
See also: PackTime (703), UnpackTime (706), GetTime (701), SetTime (705)
45.11 DateTime
DateTime = packed record
Year : Word;
Month : Word;
Day : Word
;
Hour : Word;
Min : Word;
Sec : Word;
end
The DateTime type is used in PackTime (703) and UnPackTime (706) for setting/reading file times
with GetFTime (699) and SetFTime (705).
45.12 SearchRec
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 (694) call and can be used in subsequent FindNext (695) calls
to search for files. The structure of this record depends on the platform. Only the following fields are
present on all platforms:
707
CHAPTER 45. REFERENCE FOR UNIT ’DOS’
708
Chapter 46
Name Page
System 1331
46.2 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.
709
Chapter 47
Name Page
System 1331
47.2 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.
SharedSuffix = System.SharedSuffix
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.3.2 Types
HModule = TLibHandle
710
CHAPTER 47. REFERENCE FOR UNIT ’DYNLIBS’
TLibHandle = System.TLibHandle
47.4.2 GetLoadErrorStr
Synopsis: Return a description of the last error during load/get procedure address operations.
47.4.3 GetProcAddress
Synopsis: For compatibility with Delphi/Windows: Get the address of a procedure
Declaration: function GetProcAddress(Lib: TLibHandle; const ProcName: AnsiString)
: Pointer
Visibility: default
Description: GetProcAddress provides the same functionality as GetProcedureAddress (712), and is pro-
vided for compatibility with Delphi.
711
CHAPTER 47. REFERENCE FOR UNIT ’DYNLIBS’
47.4.4 GetProcedureAddress
Synopsis: Get the address of a procedure or symbol in a dynamic library.
Visibility: default
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 it’s 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 (712), UnLoadLibrary (713)
47.4.5 LoadLibrary
Synopsis: Load a dynamic library and return a handle to it.
Declaration: function LoadLibrary(const Name: RawByteString) : TLibHandle
function LoadLibrary(const Name: UnicodeString) : TLibHandle
Visibility: default
Description: LoadLibrary loads a dynamic library in file Name and returns a handle to it. If the library cannot
be loaded, NilHandle (710) is returned.
No assumptions should be made about the location of the loaded library if a relative pathname is
specified. The behaviour is dependent on the platform. Therefore it is best to specify an absolute
pathname if possible.
47.4.6 SafeLoadLibrary
Synopsis: Saves the control word and loads a library
712
CHAPTER 47. REFERENCE FOR UNIT ’DYNLIBS’
47.4.7 UnloadLibrary
Synopsis: Unload a previously loaded library
713
Chapter 48
Name Page
System 1331
48.2 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 shouldn’t 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.
Visibility: default
Description: npxsetup checks whether a coprocessor is found. If not, it loads the file wmemu387.dxe into
memory and initializes the code in it.
If the environment variable 387 is set to N, then the emulation will be loaded, even if there is a
coprocessor present. If the variable doesn’t exist, or is set to any other value, the unit will try to
detect the presence of a coprocessor unit.
The function searches the file wmemu387.dxe in the following way:
714
CHAPTER 48. REFERENCE FOR UNIT ’EMU387’
1.If the environment variable EMU387 is set, then it is assumed to point at the wmemu387.dxe
file.
2.if the environment variable EMU387 does not exist, then the function will take the path part of
prog_name and look in that directory for the file wmemu387.dxe.
It should never be necessary to call this function, because the initialization code of the unit contains
a call to the function with as an argument paramstr(0). This means that you should deliver the
file wmemu387.dxe together with your program.
Errors: If there is an error, an error message is printed to standard error, and the program is halted, since any
floating-point code is bound to fail anyhow.
715
Chapter 49
Name Page
unixtype 2087
49.2 Overview
The errors unit contains routines to convert a UNIX system call error code to an error message:
StrError (718). It is only available on UNIX platforms.
716
CHAPTER 49. REFERENCE FOR UNIT ’ERRORS’
, 'No anode', 'Invalid request code', 'Invalid slot', 'File locking deadlock error'
, 'Bad font file format', 'Device not a stream', 'No data available'
, 'Timer expired', 'Out of streams resources', 'Machine is not on the network'
, 'Package not installed', 'Object is remote', 'Link has been severed'
, 'Advertise error', 'Srmount error', 'Communication error on send'
, 'Protocol error', 'Multihop attempted', 'RFS specific error', 'Not a data message
, 'Value too large for defined data type', 'Name not unique on network'
, 'File descriptor in bad state', 'Remote address changed', 'Can not access a neede
, 'Accessing a corrupted shared library', '.lib section in a.out corrupted'
, 'Attempting to link in too many shared libraries', 'Cannot exec a shared library
, 'Illegal byte sequence', 'Interrupted system call should be restarted'
, 'Streams pipe error', 'Too many users', 'Socket operation on non-socket'
, 'Destination address required', 'Message too long', 'Protocol wrong type for sock
, 'Protocol not available', 'Protocol not supported', 'Socket type not supported'
, 'Operation not supported on transport endpoint', 'Protocol family not supported'
, 'Address family not supported by protocol', 'Address already in use'
, 'Cannot assign requested address', 'Network is down', 'Network is unreachable'
, 'Network dropped connection because of reset', 'Software caused connection abort'
, 'Connection reset by peer', 'No buffer space available', 'Transport endpoint is a
, 'Transport endpoint is not connected', 'Cannot send after transport endpoint shut
, 'Too many references: cannot splice', 'Connection timed out', 'Connection refused
, 'Host is down', 'No route to host', 'Operation already in progress'
, 'Operation now in progress', 'Stale NFS file handle', 'Structure needs cleaning'
, 'Not a XENIX named type file', 'No XENIX semaphores available',
'Is a named type file', 'Remote I/O error', 'Quota exceeded', 'No medium found'
, 'Wrong medium type')
sys_errn is an array with then error codes for the current operating system. It should not be used
directly, instead use StrError (718).
sys_errn = 125
sys_errn is the number of error codes for the current operating system. It should not be used
directly, instead use StrError (718).
Errors: None.
See also: StrError (718)
717
CHAPTER 49. REFERENCE FOR UNIT ’ERRORS’
49.4.2 StrError
Synopsis: Convert an error code to a string
Errors: If the error code is unknown or out of bounds, an ’Unknown error (err)’ string will be returned.
See also: PError (717)
718
Chapter 50
Name Page
System 1331
50.2 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 (949) and lnfodwrf (978) unit to examine the binary for debug info.
719
CHAPTER 50. REFERENCE FOR UNIT ’EXEINFO’
50.4.2 FindExeSection
Synopsis: Find a section in the binary image.
Declaration: function FindExeSection(var e: TExeFile; const secname: string;
var secofs: LongInt; var seclen: LongInt)
: Boolean
Visibility: default
Description: FindExeSection examines the binary that was opened with OpenExeFile (720) (represented by
e) and searches for the section named secname. If found, the section offset is returned in secofs
and the section length (in bytes) is returned in seclen.
The function returns True if the section was found, False if not.
See also: OpenExeFile (720)
50.4.3 GetModuleByAddr
Synopsis: Return the module name by address
Declaration: procedure GetModuleByAddr(addr: pointer; var baseaddr: pointer;
var filename: string)
Visibility: default
Description: GetModuleByAddr returns the name of the module that contains address addr. If successful, it
returns True and returns the filename in FileName and the base address at which it is loaded in
BaseAddr.
50.4.4 OpenExeFile
Synopsis: Open an executable file
Declaration: function OpenExeFile(var e: TExeFile; const fn: string) : Boolean
Visibility: default
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 successfully, false otherwise.
See also: FindExeSection (720), CloseExeFile (719), ReadDebugLink (720)
50.4.5 ReadDebugLink
Synopsis: Read the location of a debug info filename
Declaration: function ReadDebugLink(var e: TExeFile; var dbgfn: string) : Boolean
Visibility: default
Description: ReadDebugLink examines the .gnu_debuglink section to see if the debug information is
stored in an external file. If so, then the name of the file with the debug information is returned in the
dbgfn parameter.
The function returns false if there is no external debug information file, or if the file with debug
information does not exist. It is searched next to the binary file or in the current directory.
See also: OpenExeFile (720), CloseExeFile (719)
720
CHAPTER 50. REFERENCE FOR UNIT ’EXEINFO’
50.5 TExeFile
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 shouldn’t rely on the exactness of this structure,
it may change any time in the future.
721
Chapter 51
Name Page
System 1331
sysutils 1598
Types 1901
51.2 Overview
The fgl unit contains some basic list-related generic classes.
MaxListSize is the maximum number of elements a list can contain before the memory runs out.
51.3.2 Types
TFPSListCompareFunc = function(Key1: Pointer; Key2: Pointer) : Integer
of object
722
CHAPTER 51. REFERENCE FOR UNIT ’FGL’
• 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 EListError
51.4.1 Description
EListError is the exception used in the TFPSList (753) class to indicate errors such as a list index
out of bounds, wrong capacity etc.
51.5 TFPGInterfacedObjectList
51.5.1 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 (753) or classes.TFPList (722) 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.
723
CHAPTER 51. REFERENCE FOR UNIT ’FGL’
51.5.4 TFPGInterfacedObjectList.Create
Synopsis: Instantiate a new interfaced object list.
51.5.5 TFPGInterfacedObjectList.Add
Synopsis: Add new object of class T to the list.
Declaration: function Add(const Item: T) : Integer
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. Add will increase the reference count of the object.
Errors: If the item could not be added, an EListError (723) exception is raised.
51.5.6 TFPGInterfacedObjectList.Extract
Synopsis: Extract an item from the list
Declaration: function Extract(const Item: T) : T
Visibility: public
Description: Extract removes Item from the list and returns the removed item, or Nil if it was not found.
The extracted object will not be destroyed.
Errors: None.
See also: TFPSList.Delete (755)
51.5.7 TFPGInterfacedObjectList.GetEnumerator
Synopsis: Return a list enumerator for T
Declaration: function GetEnumerator : TFPGListEnumeratorSpec
Visibility: public
Description: GetEnumerator returns an enumerator for the elements in the list. It is a specialized version of
TFPGListEnumerator (732).
See also: TFPGListEnumerator (732)
724
CHAPTER 51. REFERENCE FOR UNIT ’FGL’
51.5.8 TFPGInterfacedObjectList.IndexOf
Synopsis: Index of object
Errors: None.
See also: TFPGInterfacedObjectList.Items (727), TFPGInterfacedObjectList.Insert (725), TFPGInterfacedOb-
jectList.Add (724)
51.5.9 TFPGInterfacedObjectList.Insert
Synopsis: Insert a new object in the list
51.5.10 TFPGInterfacedObjectList.Assign
Synopsis: Copy objects from Source list
51.5.11 TFPGInterfacedObjectList.AddList
Synopsis: Adds the elements from another list
Declaration: procedure AddList(Source: TFPGInterfacedObjectList)
Visibility: public
Description: AddList adds all the elements from list Source to the current list.
See also: TFPGList.AddList (730), TFPSList.AddList (758), TFPGObjectList.AddList (751), TFPGInterface-
dObjectList.Add (724)
725
CHAPTER 51. REFERENCE FOR UNIT ’FGL’
51.5.12 TFPGInterfacedObjectList.Remove
Synopsis: Remove an object from the list.
51.5.13 TFPGInterfacedObjectList.Sort
Synopsis: Sort the objects in the list
Declaration: procedure Sort(Compare: TCompareFunc)
Visibility: public
Description: Sort sorts the elements in the list using the provided Compare function. The list passes 2 items
to the compare function. The result of this function determines how the items will be sorted:
•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.5.14 TFPGInterfacedObjectList.First
Synopsis: First non-nil object
Declaration: Property First : T
Visibility: public
Access: Read,Write
Description: First returns the first non-nil object. If no such element is present, Nil is returned.
See also: TFPSList.First (761), TFPGInterfacedObjectList.Last (727), TFPSList.Pack (759)
726
CHAPTER 51. REFERENCE FOR UNIT ’FGL’
51.5.15 TFPGInterfacedObjectList.Last
Synopsis: Last non-Nil object
Description: Last returns the last non-Nil object. If no such element is present, Nil is returned.
See also: TFPGInterfacedObjectList.First (726), TFPSList.Last (761)
51.5.16 TFPGInterfacedObjectList.Items
Synopsis: Indexed access to objects in the list.
Declaration: Property Items[Index: Integer]: T; default
Visibility: public
Access: Read,Write
Description: Items provides indexed access to the objects in the list. The objects can be get or set.
The index Index is zero based, and has a maximum value of Count-1 (760).
The previous object at position Index may be freed when setting the property, depending on its
reference count.
Errors: If an invalid index is used, an EListError (723) exception is raised.
51.5.17 TFPGInterfacedObjectList.List
Synopsis: Internal list pointer
Declaration: Property List : PTypeList
Visibility: public
Access: Read
Description: List is the internal list of objects. It should not be used directly.
See also: TFPGInterfacedObjectList.Items (727)
51.6 TFPGList
51.6.1 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 (753) or
classes.TFPList (722)
727
CHAPTER 51. REFERENCE FOR UNIT ’FGL’
51.6.4 TFPGList.Create
Synopsis: Instantiate a new list
Declaration: constructor Create
Visibility: public
Description: Create instantiates a new list. It will simply call the inherited constructor with the correct item
size: sizeof(T).
51.6.5 TFPGList.ItemIsManaged
Declaration: class function ItemIsManaged : Boolean; Override
Visibility: public
51.6.6 TFPGList.Add
Synopsis: Add new item of type T to the list.
Declaration: function Add(const Item: T) : Integer
Visibility: public
Description: Add adds a new item Item of generic 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 (723) exception is raised.
728
CHAPTER 51. REFERENCE FOR UNIT ’FGL’
51.6.7 TFPGList.Extract
Synopsis: Extract an item from the list
Errors: None.
See also: TFPSList.Delete (755)
51.6.8 TFPGList.GetEnumerator
Synopsis: Return a list enumerator for T.
51.6.9 TFPGList.IndexOf
Synopsis: Index of item
Declaration: function IndexOf(const Item: T) : Integer
Visibility: public
Description: IndexOf returns the index of Item in the list, or -1 if the item does not appear in the list.
Errors: None.
See also: TFPGList.Items (731), TFPGList.Insert (729), TFPSList.Add (755)
51.6.10 TFPGList.Insert
Synopsis: Insert a new item in the list
Declaration: procedure Insert(Index: Integer; const Item: T)
Visibility: public
Description: Insert inserts a new item in the list at position Index. The index is zero based and must be less
than Count (760).
Errors: If an invalid index is specified, an EListError (723) exception is raised.
See also: TFPGList.Items (731), TFPGList.Insert (729), TFPSList.Add (755)
729
CHAPTER 51. REFERENCE FOR UNIT ’FGL’
51.6.11 TFPGList.Assign
Synopsis: Copy elements from Source list
51.6.12 TFPGList.AddList
Synopsis: Adds the elements from another list
Declaration: procedure AddList(Source: TFPGList)
Visibility: public
Description: AddList adds all the elements from list Source to the current list.
See also: TFPGList.Add (728), TFPSList.AddList (758), TFPGObjectList.AddList (751)
51.6.13 TFPGList.Remove
Synopsis: Remove an item from the list.
Declaration: function Remove(const Item: T) : Integer
Visibility: public
Description: Remove removes the item Item from the list, and returns the index of the removed item. If no item
was removed, -1 is returned. Only the first item is removed.
Errors: None.
See also: TFPGList.IndexOf (729)
51.6.14 TFPGList.Sort
Synopsis: Sort the list
Declaration: procedure Sort(Compare: TCompareFunc)
Visibility: public
Description: Sort sorts the elements in the list using the provided Compare function. The list passes 2 items
to the compare function. The result of this function determines how the items will be sorted:
•If the result of this function is negative, the first item (Item1) is assumed to be ’less’ than the
second item (Item2) and will be moved before the second in the list.
•If the function result is positive, the first item (Item1) is assumed to be ’greater than’ the
second item (Item2)and will be moved after the second in the list.
•if the function result is zero, the items are assumed to be ’equal’ and no moving will take place.
730
CHAPTER 51. REFERENCE FOR UNIT ’FGL’
51.6.15 TFPGList.First
Synopsis: First non-empty item
Declaration: Property First : T
Visibility: public
Access: Read,Write
Description: First returns the first non-empty item, which means the first item not equal to T(0). If no such
element is present, T(0). is returned.
See also: TFPSList.First (761), TFPGList.Last (731)
51.6.16 TFPGList.Last
Synopsis: Last non-empty item
Declaration: Property Last : T
Visibility: public
Access: Read,Write
Description: Last returns the last non-empty item, which means the last item not equal to T(0). If no such
element is present, T(0). is returned.
See also: TFPGList.First (731), TFPSList.Last (761)
51.6.17 TFPGList.Items
Synopsis: Indexed access to items in the list
Declaration: Property Items[Index: Integer]: T; default
Visibility: public
Access: Read,Write
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 (760).
Errors: If an invalid index is used, an EListError (723) exception is raised.
See also: TFPSList.Count (760)
51.6.18 TFPGList.List
Synopsis: Internal list object
Declaration: Property List : PTypeList
Visibility: public
Access: Read
Description: List is the internal list of items. It should not be used directly.
See also: TFPGList.Items (731)
731
CHAPTER 51. REFERENCE FOR UNIT ’FGL’
51.7 TFPGListEnumerator
51.7.1 Description
TFPGListEnumerator is a generic list enumerator. It is used in the TFPGList (727) class to
implement the enumerator for the list.
Normally there should be no need to instantiate or use this class directly.
51.7.4 TFPGListEnumerator.Create
Synopsis: Create a new list enumerator
Declaration: constructor Create(AList: TFPSList)
Visibility: public
Description: Create is called by the list AList to initialize a new enumerator. There should be no need to call
this directly.
See also: TFPGList (727)
51.7.5 TFPGListEnumerator.MoveNext
Synopsis: Move to next element in the list
Declaration: function MoveNext : Boolean
Visibility: public
Description: MoveNext moves to the next element in the list.
See also: TFPGListEnumerator.Current (732)
51.7.6 TFPGListEnumerator.Current
Synopsis: Current enumerated element
Declaration: Property Current : T
Visibility: public
Access: Read
732
CHAPTER 51. REFERENCE FOR UNIT ’FGL’
Description: Current returns the currently enumerated element. It is only valid after TFPGListEnumera-
tor.MoveNext (732) was called and returned True.
See also: TFPGListEnumerator.MoveNext (732)
51.8 TFPGMap
51.8.1 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, TFPGMap-
InterfacedObjectData (738) must be used.
51.8.4 TFPGMap.Create
Synopsis: Create a new instance of the map
Declaration: constructor Create
Visibility: public
Description: Create instantiates a new map. It mainly initializes the TFPSMap (761) parent with the sized of
the key and data.
See also: TFPSMap.Create (762)
733
CHAPTER 51. REFERENCE FOR UNIT ’FGL’
51.8.5 TFPGMap.Add
Synopsis: Add a key and value to the map
Declaration: function Add(const AKey: TKey; const AData: TData) : Integer
function Add(const AKey: TKey) : Integer
Visibility: public
Description: Add adds a new key AKey of generic type TKey with data value AData to the list and returns the
position at which the key was added.
Errors: If the item could not be added, an EListError (723) exception is raised. If Duplicates (765) is set to
dupError and a duplicate key is added, an EListError (723) exception is raised.
See also: TFPGMap.Keys (736), TFPGMap.IndexOf (735), TFPGMap.KeyData (737), TFPGMap.Data (736),
TFPSMap.Duplicates (765)
51.8.6 TFPGMap.Find
Synopsis: Find item based on key
Declaration: function Find(const AKey: TKey; out Index: Integer) : Boolean
Visibility: public
Description: Find will search the key equal to AKey and return its index in AIndex. The return value of the
function is True if an exact match for AKey is found, False otherwise.
The behaviour of Find is undefined if the map is not sorted. For unsorted maps, use IndexOf (735)
instead.
See also: TFPGMap.IndexOf (735), TFPGMap.IndexOfData (735)
51.8.7 TFPGMap.TryGetData
Synopsis: Find data or return default
Declaration: function TryGetData(const AKey: TKey; out AData: TData) : Boolean
Visibility: public
Description: TryGetData will search the map for AKey and return True or False depending on whether the
value with the given key was found. If the key was found, the associated value is returned in AData,
if it is not found a default value (using Default) is returned.
Errors: None.
See also: TFPGMap.Find (734)
51.8.8 TFPGMap.AddOrSetData
Synopsis: Add data with given or set value if the key already exists.
Declaration: procedure AddOrSetData(const AKey: TKey; const AData: TData)
Visibility: public
Description: AddOrSetData will check if key AKey already exists. if yes, the value associated with it will be
replaced with AData. If the key does not yet exist, it will be added with value AData.
734
CHAPTER 51. REFERENCE FOR UNIT ’FGL’
Errors: None.
See also: TFPGMap.TryGetData (734), TFPGMap.Add (734), TFPGMap.Find (734)
51.8.9 TFPGMap.IndexOf
Synopsis: Find index of a key in the list.
51.8.10 TFPGMap.IndexOfData
Synopsis: Find index of data value in the list.
Declaration: function IndexOfData(const AData: TData) : Integer
Visibility: public
Description: IndexOfData returns the index of AData in the list, or -1 if the data was not found in the list.
Errors: None.
See also: TFPGMap.Find (734), TFPGMap.IndexOf (735)
51.8.11 TFPGMap.InsertKey
Synopsis: Insert a new key in the list
Declaration: procedure InsertKey(Index: Integer; const AKey: TKey)
Visibility: public
Description: InsertKey inserts key AKey at position Index in the list. It is not allowed to insert a key in a
sorted list.
Errors: If the index AIndex is out of range [0..Count-1], or the list is sorted, an EListError (723) exception
will be raised.
51.8.12 TFPGMap.InsertKeyData
Synopsis: Insert a new key with associated data in the list
Declaration: procedure InsertKeyData(Index: Integer; const AKey: TKey;
const AData: TData)
Visibility: public
735
CHAPTER 51. REFERENCE FOR UNIT ’FGL’
Description: InsertKey inserts key AKey with associated data AData at position Index in the list. It is not
allowed to insert a key in a sorted list.
Errors: If the index AIndex is out of range [0..Count-1], or the list is sorted, an EListError (723) exception
will be raised.
See also: TFPGMap.InsertKey (735), TFPGMap.Add (734), TFPSMap.Delete (761), TFPGMap.Remove (736)
51.8.13 TFPGMap.Remove
Synopsis: Remove a key from the list
Declaration: function Remove(const AKey: TKey) : Integer
Visibility: public
Description: Remove removes the key AKey from the list, together with its associated data. The function returns
the index of AKey prior to removal from the list, or -1 if AKey was not present in the list.
Errors: None.
See also: TFPGMap.InsertKey (735), TFPGMap.InsertKeyData (735), TFPGMap.Add (734), TFPSMap.Delete
(761)
51.8.14 TFPGMap.Keys
Synopsis: Indexed access to the keys in the list.
Declaration: Property Keys[Index: Integer]: TKey
Visibility: public
Access: Read,Write
Description: Keys provides indexed access to the key values in the list. Valid values for Index are in the range
[0..Count-1]. Key values can always be read, but can only be written if the list is unsorted.
Errors: If the index AIndex is out of range [0..Count-1], an EListError (723) exception will be raised. The
same exception is raised if a key is written and the list is sorted.
See also: TFPSList.Count (760), TFPGMap.Data (736), TFPGMap.KeyData (737)
51.8.15 TFPGMap.Data
Synopsis: Indexed access to the data in the list
Description: Data provides indexed access to the data values in the list. Valid values for Index are in the range
[0..Count-1]. Data can always be read or written.
Errors: If the index AIndex is out of range [0..Count-1], an EListError (723) exception will be raised.
See also: TFPSList.Count (760), TFPGMap.Keys (736), TFPGMap.KeyData (737)
736
CHAPTER 51. REFERENCE FOR UNIT ’FGL’
51.8.16 TFPGMap.KeyData
Synopsis: Access to data based on key
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 (723) will be raised.
Errors: If the key does not exist, an EListError (723) exception will be raised.
See also: TFPSList.Count (760), TFPGMap.Keys (736), TFPGMap.Data (736)
51.8.17 TFPGMap.OnCompare
Synopsis: Alias for OnKeyCompare
Declaration: Property OnCompare : TKeyCompareFunc
Visibility: public
Access: Read,Write
Description: OnCompare is a deprecated property, use TFPGMap.OnKeyCompare (737) instead.
See also: TFPGMap.OnKeyCompare (737)
51.8.18 TFPGMap.OnKeyCompare
Synopsis: Compare function for key values.
Declaration: Property OnKeyCompare : TKeyCompareFunc
Visibility: public
Access: Read,Write
Description: OnKeyCompare can be set to a function that compares key values. The default value for this event
is a function that compares keys based on a byte-by-byte comparison of the memory block. The
function must have the following semantics:
•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.
737
CHAPTER 51. REFERENCE FOR UNIT ’FGL’
51.8.19 TFPGMap.OnDataCompare
Synopsis: Compare function for data values.
Description: OnDataCompare can be set to a function that compares data values. The default value for this
event is a function that compares data based on a byte-by-byte comparison of the memory block.
The function must have the following semantics:
•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.
51.9 TFPGMapInterfacedObjectData
51.9.1 Description
TFPGInterfacedObjectMap is a generic map class. It can be used to specialize a map for
any key type, with associated data type that requires manual reference counting: any type which
implements IInterface. For non-reference counted objects, TFPGMap (733) should be used.
This map class is entirely equivalent to TFPGMap (733), but operates on data items that require
additional reference counting code on the data.
738
CHAPTER 51. REFERENCE FOR UNIT ’FGL’
51.9.4 TFPGMapInterfacedObjectData.Create
Synopsis: Create a new instance of the map
Declaration: constructor Create
Visibility: public
Description: Create instantiates a new map. It mainly initializes the TFPSMap (761) parent with the sized of
the key and data.
See also: TFPSMap.Create (762)
51.9.5 TFPGMapInterfacedObjectData.Add
Synopsis: Add a key and value to the map
Errors: If the item could not be added, an EListError (723) exception is raised. If Duplicates (765) is set to
dupError and a duplicate key is added, an EListError (723) exception is raised.
See also: TFPGMapInterfacedObjectData.Keys (741), TFPGMapInterfacedObjectData.IndexOf (740), TFPGMap-
InterfacedObjectData.KeyData (742), TFPGMapInterfacedObjectData.Data (742), TFPS.Duplicates
(722)
51.9.6 TFPGMapInterfacedObjectData.Find
Synopsis: Find item based on key
Declaration: function Find(const AKey: TKey; out Index: Integer) : Boolean
Visibility: public
Description: Find will search the first key smaller than or equal to AKey and return its index in AIndex. If the
key was not found then -1 is returned. The return value of the function is True if an exact match for
AKey is found, False otherwise.
See also: TFPGMapInterfacedObjectData.IndexOf (740), TFPGMapInterfacedObjectData.IndexOfData (740)
739
CHAPTER 51. REFERENCE FOR UNIT ’FGL’
51.9.7 TFPGMapInterfacedObjectData.TryGetData
Synopsis: Find data or return default
51.9.8 TFPGMapInterfacedObjectData.AddOrSetData
Synopsis: Add data with given or set value if the key already exists.
Declaration: procedure AddOrSetData(const AKey: TKey; const AData: TData)
Visibility: public
Description: AddOrSetData will check if key AKey already exists. if yes, the value associated with it will be
replaced with AData. If the key does not yet exist, it will be added with value AData.
Errors: None.
See also: TFPGMapInterfacedObjectData.TryGetData (740), TFPGMapInterfacedObjectData.Add (739), TF-
PGMapInterfacedObjectData.Find (739)
51.9.9 TFPGMapInterfacedObjectData.IndexOf
Synopsis: Find index of a key in the list.
Declaration: function IndexOf(const AKey: TKey) : Integer
Visibility: public
Description: IndexOf returns the index of AKey in the list, or -1 if the key was not found in the list.
Errors: None.
See also: TFPGMapInterfacedObjectData.Find (739), TFPGMapInterfacedObjectData.IndexOfData (740)
51.9.10 TFPGMapInterfacedObjectData.IndexOfData
Synopsis: Find index of data value in the list.
Errors: None.
See also: TFPGMapInterfacedObjectData.Find (739), TFPGMapInterfacedObjectData.IndexOf (740)
740
CHAPTER 51. REFERENCE FOR UNIT ’FGL’
51.9.11 TFPGMapInterfacedObjectData.InsertKey
Synopsis: Insert a new key in the list
Errors: If the index AIndex is out of range [0..Count-1], or the list is sorted, an EListError (723) exception
will be raised.
See also: TFPGMapInterfacedObjectData.InsertKeyData (741), TFPGMapInterfacedObjectData.Add (739),
TFPSMapInterfacedObjectData.Delete (722), TFPSMapInterfacedObjectData.Remove (722)
51.9.12 TFPGMapInterfacedObjectData.InsertKeyData
Synopsis: Insert a new key with associated data in the list
Declaration: procedure InsertKeyData(Index: Integer; const AKey: TKey;
const AData: TData)
Visibility: public
Description: InsertKey inserts key AKey with associated data AData at position Index in the list. It is not
allowed to insert a key in a sorted list.
Errors: If the index AIndex is out of range [0..Count-1], or the list is sorted, an EListError (723) exception
will be raised.
51.9.13 TFPGMapInterfacedObjectData.Remove
Synopsis: Remove a key from the list
Declaration: function Remove(const AKey: TKey) : Integer
Visibility: public
Description: Remove removes the key AKey from the list, together with its associated data. The function returns
the index of AKey prior to removal from the list, or -1 if AKey was not present in the list.
Errors: None.
51.9.14 TFPGMapInterfacedObjectData.Keys
Synopsis: Indexed access to the keys in the list.
741
CHAPTER 51. REFERENCE FOR UNIT ’FGL’
Access: Read,Write
Description: Keys provides indexed access to the key values in the list. Valid values for Index are in the range
[0..Count-1]. Key values can always be read, but can only be written if the list is unsorted.
Errors: If the index AIndex is out of range [0..Count-1], an EListError (723) exception will be raised. The
same exception is raised if a key is written and the list is sorted.
See also: TFPSList.Count (760), TFPGMapInterfacedObjectData.Data (742), TFPGMapInterfacedObjectData.KeyData
(742)
51.9.15 TFPGMapInterfacedObjectData.Data
Synopsis: Indexed access to the data in the list
Declaration: Property Data[Index: Integer]: TData
Visibility: public
Access: Read,Write
Description: Data provides indexed access to the data values in the list. Valid values for Index are in the range
[0..Count-1]. Data can always be read or written.
Errors: If the index AIndex is out of range [0..Count-1], an EListError (723) exception will be raised.
See also: TFPSList.Count (760), TFPGMapInterfacedObjectData.Keys (741), TFPGMapInterfacedObjectData.KeyData
(742)
51.9.16 TFPGMapInterfacedObjectData.KeyData
Synopsis: Access to data based on key
Declaration: Property KeyData[AKey: TKey]: TData; default
Visibility: public
Access: Read,Write
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 (723) will be raised.
Errors: If the key does not exist, an EListError (723) exception will be raised.
See also: TFPSList.Count (760), TFPGMapInterfacedObjectData.Keys (741), TFPGMapInterfacedObjectData.Data
(742)
51.9.17 TFPGMapInterfacedObjectData.OnCompare
Synopsis: Alias for OnKeyCompare
Declaration: Property OnCompare : TKeyCompareFunc
Visibility: public
Access: Read,Write
Description: OnCompare is a deprecated property, use TFPGMapInterfacedObjectData.OnKeyCompare (743)
instead.
See also: TFPGMapInterfacedObjectData.OnKeyCompare (743)
742
CHAPTER 51. REFERENCE FOR UNIT ’FGL’
51.9.18 TFPGMapInterfacedObjectData.OnKeyCompare
Synopsis: Compare function for key values.
Description: OnKeyCompare can be set to a function that compares key values. The default value for this event
is a function that compares keys based on a byte-by-byte comparison of the memory block. The
function must have the following semantics:
•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.9.19 TFPGMapInterfacedObjectData.OnDataCompare
Synopsis: Compare function for data values.
Declaration: Property OnDataCompare : TDataCompareFunc
Visibility: public
Access: Read,Write
Description: OnDataCompare can be set to a function that compares data values. The default value for this
event is a function that compares data based on a byte-by-byte comparison of the memory block.
The function must have the following semantics:
•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.
51.10 TFPGMapObject
51.10.1 Description
TFPGMapObject is a generic map class. It can be used to specialize a map for object types, but
not objects with automated reference counting: For reference counted interface objects, TFPGMap-
InterfacedObjectData (738) must be used.
743
CHAPTER 51. REFERENCE FOR UNIT ’FGL’
51.10.4 TFPGMapObject.Create
Synopsis: Create a new instance of the map
Declaration: constructor Create(AFreeObjects: Boolean)
constructor Create
Visibility: public
Description: Create instantiates a new map. It mainly initializes the TFPSMap (761) parent with the sized of
the key and data.
51.10.5 TFPGMapObject.Add
Synopsis: Add a key and value to the map
Declaration: function Add(const AKey: TKey; const AData: TData) : Integer
function Add(const AKey: TKey) : Integer
Visibility: public
Description: Add adds a new key AKey of generic type TKey with data object AData to the list and returns the
position at which the key was added.
Errors: If the item could not be added, an EListError (723) exception is raised. If Duplicates (765) is set to
dupError and a duplicate key is added, an EListError (723) exception is raised.
See also: TFPGMapObject.Keys (747), TFPGMapObject.IndexOf (745), TFPGMapObject.KeyData (747),
TFPGMapObject.Data (747), TFPSMap.Duplicates (765)
744
CHAPTER 51. REFERENCE FOR UNIT ’FGL’
51.10.6 TFPGMapObject.Find
Synopsis: Find item based on key
51.10.7 TFPGMapObject.TryGetData
Synopsis: Find data or return default
Errors: None.
See also: TFPGMapObject.Find (745)
51.10.8 TFPGMapObject.AddOrSetData
Synopsis: Add data with given or set value if the key already exists.
Errors: None.
See also: TFPGMapObject.TryGetData (745), TFPGMapObject.Add (744), TFPGMapObject.Find (745)
51.10.9 TFPGMapObject.IndexOf
Synopsis: Find index of a key in the list.
745
CHAPTER 51. REFERENCE FOR UNIT ’FGL’
51.10.10 TFPGMapObject.IndexOfData
Synopsis: Find index of data value in the list.
Errors: None.
See also: TFPGMapObject.Find (745), TFPGMapObject.IndexOf (745)
51.10.11 TFPGMapObject.InsertKey
Synopsis: Insert a new key in the list
Errors: If the index AIndex is out of range [0..Count-1], or the list is sorted, an EListError (723) exception
will be raised.
See also: TFPGMapObject.InsertKeyData (746), TFPGMapObject.Add (744), TFPSMap.Delete (761), TF-
PSMap.Remove (764)
51.10.12 TFPGMapObject.InsertKeyData
Synopsis: Insert a new key with associated data in the list
Declaration: procedure InsertKeyData(Index: Integer; const AKey: TKey;
const AData: TData)
Visibility: public
Description: InsertKey inserts key AKey with associated data AData at position Index in the list. It is not
allowed to insert a key in a sorted list.
Errors: If the index AIndex is out of range [0..Count-1], or the list is sorted, an EListError (723) exception
will be raised.
51.10.13 TFPGMapObject.Remove
Synopsis: Remove a key from the list
Declaration: function Remove(const AKey: TKey) : Integer
Visibility: public
746
CHAPTER 51. REFERENCE FOR UNIT ’FGL’
Description: Remove removes the key AKey from the list, together with its associated data. The function returns
the index of AKey prior to removal from the list, or -1 if AKey was not present in the list.
Errors: None.
See also: TFPGMapObject.InsertKey (746), TFPGMapObject.InsertKeyData (746), TFPGMapObject.Add (744),
TFPSMap.Delete (761)
51.10.14 TFPGMapObject.Keys
Synopsis: Indexed access to the keys in the list.
Declaration: Property Keys[Index: Integer]: TKey
Visibility: public
Access: Read,Write
Description: Keys provides indexed access to the key values in the list. Valid values for Index are in the range
[0..Count-1]. Key values can always be read, but can only be written if the list is unsorted.
Errors: If the index AIndex is out of range [0..Count-1], an EListError (723) exception will be raised. The
same exception is raised if a key is written and the list is sorted.
See also: TFPSList.Count (760), TFPGMapObject.Data (747), TFPGMapObject.KeyData (747)
51.10.15 TFPGMapObject.Data
Synopsis: Indexed access to the data in the list
Declaration: Property Data[Index: Integer]: TData
Visibility: public
Access: Read,Write
Description: Data provides indexed access to the data values in the list. Valid values for Index are in the range
[0..Count-1]. Data can always be read or written.
Errors: If the index AIndex is out of range [0..Count-1], an EListError (723) exception will be raised.
See also: TFPSList.Count (760), TFPGMapObject.Keys (747), TFPGMapObject.KeyData (747)
51.10.16 TFPGMapObject.KeyData
Synopsis: Access to data based on key
Declaration: Property KeyData[AKey: TKey]: TData; default
Visibility: public
Access: Read,Write
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 (723) will be raised.
Errors: If the key does not exist, an EListError (723) exception will be raised.
See also: TFPSList.Count (760), TFPGMapObject.Keys (747), TFPGMapObject.Data (747)
747
CHAPTER 51. REFERENCE FOR UNIT ’FGL’
51.10.17 TFPGMapObject.OnCompare
Synopsis: Alias for OnKeyCompare
Declaration: Property OnCompare : TKeyCompareFunc
Visibility: public
Access: Read,Write
Description: OnCompare is a deprecated property, use TFPGMapObject.OnKeyCompare (748) instead.
See also: TFPGMapObject.OnKeyCompare (748)
51.10.18 TFPGMapObject.OnKeyCompare
Synopsis: Compare function for key values.
Declaration: Property OnKeyCompare : TKeyCompareFunc
Visibility: public
Access: Read,Write
Description: OnKeyCompare can be set to a function that compares key values. The default value for this event
is a function that compares keys based on a byte-by-byte comparison of the memory block. The
function must have the following semantics:
•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.10.19 TFPGMapObject.OnDataCompare
Synopsis: Compare function for data values.
Declaration: Property OnDataCompare : TDataCompareFunc
Visibility: public
Access: Read,Write
Description: OnDataCompare can be set to a function that compares data values. The default value for this
event is a function that compares data based on a byte-by-byte comparison of the memory block.
The function must have the following semantics:
•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.
748
CHAPTER 51. REFERENCE FOR UNIT ’FGL’
51.11 TFPGObjectList
51.11.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
(753) or classes.TFPList (722) or TFPObjectList
51.11.4 TFPGObjectList.Create
Synopsis: Instantiate a new object list.
Declaration: constructor Create(FreeObjects: Boolean)
Visibility: public
Description: Create instantiates a new object list. It will simply call the inherited constructor with the correct
item size and will initialize TFPGObjectList.FreeObjects (753) with FreeObjects.
If FreeObjects is true, then the list owns the objects. Freeing or clearing the list will remove all
objects from memory by calling the destructor. Deleting or removing an item from the list will also
dispose of the element.
See also: TFPGObjectList.FreeObjects (753)
51.11.5 TFPGObjectList.Add
Synopsis: Add new object of class T to the list.
Declaration: function Add(const Item: T) : Integer
749
CHAPTER 51. REFERENCE FOR UNIT ’FGL’
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 (723) exception is raised.
51.11.6 TFPGObjectList.Extract
Synopsis: Extract an item from the list
Declaration: function Extract(const Item: T) : T
Visibility: public
Description: Extract removes Item from the list and returns the removed item, or Nil if it was not found.
The extracted object will not be destroyed even if the list owns the objects.
Errors: None.
51.11.7 TFPGObjectList.GetEnumerator
Synopsis: Return a list enumerator for T.
Declaration: function GetEnumerator : TFPGListEnumeratorSpec
Visibility: public
Description: GetEnumerator returns an enumerator for the elements in the list. It is a specialized version of
TFPGListEnumerator (732).
See also: TFPGListEnumerator (732)
51.11.8 TFPGObjectList.IndexOf
Synopsis: Index of item
Declaration: function IndexOf(const Item: T) : Integer
Visibility: public
Description: IndexOf returns the index of Item in the list, or -1 if the item does not appear in the list.
Errors: None.
See also: TFPGObjectList.Items (752), TFPGObjectList.Insert (751), TFPGObjectList.Add (749)
750
CHAPTER 51. REFERENCE FOR UNIT ’FGL’
51.11.9 TFPGObjectList.Insert
Synopsis: Insert a new object in the list
51.11.10 TFPGObjectList.AddList
Synopsis: Adds the elements from another list
51.11.11 TFPGObjectList.Assign
Synopsis: Copy objects from Source list
Declaration: procedure Assign(Source: TFPGObjectList)
Visibility: public
Description: Assign clears the list and copies all items in Source to the list. The source list must be of the
same type as the destination list.
Take care if both the list owns the objects (i.e. have TFPGObjectList.FreeObjects (753) set to True),
this may result to access violations.
51.11.12 TFPGObjectList.Remove
Synopsis: Remove an object from the list.
Declaration: function Remove(const Item: T) : Integer
Visibility: public
Description: Remove removes the object Item from the list, and returns the index of the removed item. If no
item was removed, -1 is returned. Only the first object is removed.
If the list owns the objects, (TFPGObjectList.FreeObjects (753) is set to True) then the object is
freed.
Errors: None.
See also: TFPGObjectList.IndexOf (750), TFPSList.Delete (755), TFPGObjectList.FreeObjects (753)
751
CHAPTER 51. REFERENCE FOR UNIT ’FGL’
51.11.13 TFPGObjectList.Sort
Synopsis: Sort the objects in the list
•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.11.14 TFPGObjectList.First
Synopsis: First non-nil item
Description: First returns the first non-nil item. If no such element is present, Nil is returned.
See also: TFPSList.First (761), TFPGList.Last (731), TFPSList.Pack (759)
51.11.15 TFPGObjectList.Last
Synopsis: Last non-Nil object
Declaration: Property Last : T
Visibility: public
Access: Read,Write
Description: Last returns the last non-Nil object. If no such element is present, Nil. is returned.
51.11.16 TFPGObjectList.Items
Synopsis: Indexed access to objects in the list.
Declaration: Property Items[Index: Integer]: T; default
Visibility: public
Access: Read,Write
752
CHAPTER 51. REFERENCE FOR UNIT ’FGL’
Description: Items provides indexed access to the objects in the list. The objects can be get or set.
The index Index is zero based, and has a maximum value of Count-1 (760).
If the list owns the objects, (TFPGObjectList.FreeObjects (753) is set to True) then the previous
object at position Index is freed when setting the property.
51.11.17 TFPGObjectList.List
Synopsis: Internal list pointer
Declaration: Property List : PTypeList
Visibility: public
Access: Read
Description: List is the internal list of objects. It should not be used directly.
51.11.18 TFPGObjectList.FreeObjects
Synopsis: Does the list own the objects or not?
Declaration: Property FreeObjects : Boolean
Visibility: public
Access: Read,Write
Description: FreeObjects indicates whether the list owns the objects or not. If set to True, freeing or clearing
the list will remove all objects from memory by calling the destructor. Deleting or removing an item
from the list will also dispose of the element.
The initial value for this property is set in the constructor and is True by default.
See also: TFPGObjectList.FreeObjects (753)
51.12 TFPSList
51.12.1 Description
TFPSList can be seen as the generalized equivalent of the classes unit TFPList (722) list. It is used
as a base class for the TFPGList (727), TFPGMap (733), TFPGObjectList (749), TFPGInterface-
dObjectList (723) and TFPGMapInterfacedObjectData (738) 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 (722), TFPGMap (733), TFPGObjectList (749), TFPGInterfacedObjectList (723),
TFPGMapInterfacedObjectData (738)
753
CHAPTER 51. REFERENCE FOR UNIT ’FGL’
51.12.4 TFPSList.Create
Synopsis: Create a new instance of TFPSList
Declaration: constructor Create(AItemSize: Integer)
Visibility: public
Description: Create creates a new instance of TFPSList, and initializes the item size to ItemSize, which
defaults to the size of a pointer.
See also: TFPSList.ItemSize (760), TFPSList.Destroy (754)
51.12.5 TFPSList.Destroy
Synopsis: Destroy the list instance.
754
CHAPTER 51. REFERENCE FOR UNIT ’FGL’
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 (755)
51.12.6 TFPSList.ItemIsManaged
Declaration: class function ItemIsManaged : Boolean; Virtual
Visibility: public
51.12.7 TFPSList.Add
Synopsis: Add a new item to the list
Declaration: function Add(Item: Pointer) : Integer
Visibility: public
Description: Add adds the item pointed to by Item to the list. It is not the pointer Item itself which is added to
the list, but rather the TFPSList.ItemSize (760) bytes of memory to which Item is pointing.
The function returns the index of the newly added item.
51.12.8 TFPSList.Clear
Synopsis: Clear the list
51.12.9 TFPSList.Delete
Synopsis: Delete an item from the list
Declaration: procedure Delete(Index: Integer)
Visibility: public
Description: Delete deletes the item at position Index from the list. Depending on the descendent, the list
items itself may be cleared as well.
Errors: If Index is out of bounds, an EListError (723) exception is raised.
See also: TFPSList.Clear (755), TFPSList.Items (760), TFPSList.Add (755)
755
CHAPTER 51. REFERENCE FOR UNIT ’FGL’
51.12.10 TFPSList.DeleteRange
Synopsis: Delete a range of elements
51.12.11 TFPSList.Error
Synopsis: Raise an EListError exception.
Declaration: class procedure Error(const Msg: string; Data: PtrInt)
Visibility: public
Description: Error is an auxiliary routine which raises an EListError (723) exception formatted from Msg and
Data.
See also: EListError (723)
51.12.12 TFPSList.Exchange
Synopsis: Exchange two items in the list
Errors: If Index1 or Index2 are out of bounds, an EListError (723) exception is raised.
51.12.13 TFPSList.Expand
Synopsis: Expand the capacity of the list
Declaration: function Expand : TFPSList
Visibility: public
Description: Expand will expand the capacity of the list, and returns itself.
Errors: If the size will become larger than MaxListSize (722) an EListError (723) exception will be raised.
See also: MaxListSize (722), TFPSList.Capacity (759)
756
CHAPTER 51. REFERENCE FOR UNIT ’FGL’
51.12.14 TFPSList.Extract
Synopsis: delete an element from the list
51.12.15 TFPSList.IndexOf
Synopsis: Search an item in the list
Declaration: function IndexOf(Item: Pointer) : Integer
Visibility: public
Description: IndexOf searches in the list for the item pointed to by Item, and returns the position (0-based
index) of the item in the list, or -1 if it was not found. The items are compared using sysu-
tils.CompareMem (722), so an exact memory layout match.
See also: TFPSList.Extract (757)
51.12.16 TFPSList.Insert
Synopsis: Insert a new item in the list.
Declaration: procedure Insert(Index: Integer; Item: Pointer)
function Insert(Index: Integer) : Pointer
Visibility: public
Description: Insert comes in 2 overloaded version. The version without Item creates a slot for a new item
at position Index in the list, and returns a pointer to the new slot. The slot will be of size TFP-
SList.ItemSize (760).
The version with Item argument will allocate a slot in the list at position Index and will copy the
item pointed to by Item to the slot in the list.
In both cases, Index must be 0-based.
Errors: If Index is invalid, an EListError (723) exception will be raised.
See also: TFPSList.Add (755), TFPSList.Delete (755), TFPSList.Extract (757)
757
CHAPTER 51. REFERENCE FOR UNIT ’FGL’
51.12.17 TFPSList.Move
Synopsis: Moves an item from one position in the list to another.
Declaration: procedure Move(CurIndex: Integer; NewIndex: Integer)
Visibility: public
Description: Move moves the item at position CurIndex to position NewIndex. This is done by storing the
value at position CurIndex, deleting the pointer at position CurIndex, and reinserting the value
at position NewIndex
Errors: If CurIndex or Newindex are not inside the valid range of indices, an EListError (723) exception
is raised.
See also: Exchange (756)
51.12.18 TFPSList.Assign
Synopsis: Copy one list to another
Declaration: procedure Assign(Obj: TFPSList)
Visibility: public
Description: Assign clears the list and will add all items from Obj to the list. The items are copied one by one.
Errors: If the TFPSList.ItemSize (760) differs for the two lists, an EListError (723) exception is raised.
See also: TFPSList.Add (755)
51.12.19 TFPSList.AddList
Synopsis: Adds the elements from another list
Declaration: procedure AddList(Obj: TFPSList)
Visibility: public
Description: AddList adds all the elements from list Obj to the current list. A check is done that the 2 lists
have the same element size.
Errors: If the lists have different element size, an EListError (723) exception will be raised.
See also: TFPSList.Add (755), EListError (723)
51.12.20 TFPSList.Remove
Synopsis: Remove the item from the list
Declaration: function Remove(Item: Pointer) : Integer
Visibility: public
Description: Remove searches Item in the list, and deletes it from the list. It returns the index of the item that
was removed, or -1 if it was not found. Only the first match is removed.
If a descendent of TFPSList owns the object of the list, the item is removed from memory. If this
is not desired, then TFPSList.Extract (757) must be used instead.
See also: TFPSList.Extract (757), TFPSList.IndexOf (757)
758
CHAPTER 51. REFERENCE FOR UNIT ’FGL’
51.12.21 TFPSList.Pack
Synopsis: Remove empty items from the list
51.12.22 TFPSList.Sort
Synopsis: Sort the list
Declaration: procedure Sort(Compare: TFPSListCompareFunc)
Visibility: public
Description: Sort> sorts the items in the list. Two pointers are compared by passing them to the Compare
function. The result of this function determines how the pointers will be sorted:
•If the result of this function is negative, the first item is assumed to be ’less’ than the second
and will be moved before the second item in the list.
•If the function result is positive, the first item is assumed to be ’greater than’ the second and
will be moved after the second item in the list.
•if the function result is zero, the pointers are assumed to be ’equal’ and no moving will take
place.
51.12.23 TFPSList.Capacity
Synopsis: Current capacity of the list
759
CHAPTER 51. REFERENCE FOR UNIT ’FGL’
51.12.24 TFPSList.Count
Synopsis: Current element count
Declaration: Property Count : Integer
Visibility: public
Access: Read,Write
Description: Count is the current amount of elements in the list. It is initially zero. A valid item index is always
a value between zero and Count-1.
See also: TFPSList.Items (760), TFPSList.Capacity (759)
51.12.25 TFPSList.Items
Synopsis: Items in the list
Declaration: Property Items[Index: Integer]: Pointer; default
Visibility: public
Access: Read,Write
Description: Items provides indexed access to the items in the list, the returned pointers are not the actual list
items, but pointers to the elements in the list. The items can be get or set.
When assigning to the Items property, the memory area pointed to by the assigned pointer is copied
to the list. Exactly TFPSList.ItemSize (760) bytes are copied.
The index Index is zero based, and has a maximum value of Count-1 (760).
Errors: If an invalid index is used, an EListError (723) exception is raised.
See also: TFPSList.ItemSize (760), TFPSList.Count (760)
51.12.26 TFPSList.ItemSize
Synopsis: Size of the items in the list
Declaration: Property ItemSize : Integer
Visibility: public
Access: Read
Description: ItemSize is the memory size of the items in the list. It is specified in the constructor and cannot
be changed during the lifetime of the list.
See also: TFPSList.Create (754)
51.12.27 TFPSList.List
Synopsis: Internal list pointer
Declaration: Property List : PByte
Visibility: public
Access: Read
Description: List is a pointer to the memory area used for the items in the list. It should not be manipulated.
760
CHAPTER 51. REFERENCE FOR UNIT ’FGL’
51.12.28 TFPSList.First
Synopsis: Pointer to first non-empty item in the list
Declaration: Property First : Pointer
Visibility: public
Access: Read,Write
Description: First returns the value of the first non-empty item in the list. An item is considered empty if
consists of TFPSList.ItemSize (760) zero bytes.
If there are no non-empty items in the list, then Nil is returned.
See also: TFPSList.Last (761), TFPSList.Pack (759)
51.12.29 TFPSList.Last
Synopsis: Pointer to last non-empty item in the list
Declaration: Property Last : Pointer
Visibility: public
Access: Read,Write
Description: Last returns the value of the last non-empty item in the list. An item is considered empty if consists
of TFPSList.ItemSize (760) zero bytes.
If there are no non-empty items in the list, then Nil is returned.
See also: TFPSList.Last (761), TFPSList.Pack (759)
51.13 TFPSMap
51.13.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 (733).
761
CHAPTER 51. REFERENCE FOR UNIT ’FGL’
51.13.4 TFPSMap.Create
Synopsis: Create a new map with given key and data size.
51.13.5 TFPSMap.Add
Synopsis: Add a key, value pair to the map.
Declaration: function Add(AKey: Pointer; AData: Pointer) : Integer
function Add(AKey: Pointer) : Integer
Visibility: public
Description: Add adds the memory pointed to by AData to the map using the memory pointed to by AKey as
the key. If no data is specified, it allocates a slot for AKey and returns a pointer to that slot.
Errors: If the maximum amount of values is reached, Add will raise an EListError (723) exception.
See also: TFPSMap.Insert (763), TFPSMap.IndexOf (763)
51.13.6 TFPSMap.Find
Synopsis: Find data using the associated key
Declaration: function Find(AKey: Pointer; out Index: Integer) : Boolean
Visibility: public
762
CHAPTER 51. REFERENCE FOR UNIT ’FGL’
Description: Find searches for the first key less than or equal to AKey and returns its index in the list in Index.
It returns True if an exact match for the key was found. It returns False if the key was not found,
and Index is then set to -1
This function performs a binary search using the key comparing function specified in OnKeyPtrCom-
pare (767).
51.13.7 TFPSMap.IndexOf
Synopsis: Index of key pointed to by AKey
51.13.8 TFPSMap.IndexOfData
Synopsis: Index of data item AData
Declaration: function IndexOfData(AData: Pointer) : Integer
Visibility: public
Description: IndexOfData returns the index of the element with data pointed to by AData. It returns -1 if the
data item was not found. The search is always performed using a linear search.
See also: TFPSMap.Find (762), TFPSMap.IndexOf (763), TFPSMap.Keys (766), TFPSMap.Data (766)
51.13.9 TFPSMap.Insert
Synopsis: Insert a new slot for key and associated data item in the list
763
CHAPTER 51. REFERENCE FOR UNIT ’FGL’
51.13.10 TFPSMap.InsertKey
Synopsis: Insert a key in the list
Declaration: procedure InsertKey(Index: Integer; AKey: Pointer)
Visibility: public
Description: InsertKey will allocate a new slot in the list for a key value as pointed to by AKey, and copy the
key pointed to by AKey to the slot.
Errors: If the maximum amount of values is reached or an invalid index is specified, InsertKey will raise
an EListError (723) exception.
See also: TFPSMap.Add (762), TFPSMap.Insert (763), TFPSMap.InsertKeyData (764)
51.13.11 TFPSMap.InsertKeyData
Synopsis: Insert a key and associated in the list
Declaration: procedure InsertKeyData(Index: Integer; AKey: Pointer; AData: Pointer)
Visibility: public
Description: InsertKeyData will allocate a new slot in the list for a key value as pointed to by AKey, and
copy the key pointed to by AKey as well as the data pointed to by AData to the newly allocated slot.
Errors: If the maximum amount of values is reached or an invalid index is specified, InsertKeyData
will raise an EListError (723) exception.
See also: TFPSMap.Add (762), TFPSMap.Insert (763), TFPSMap.InsertKey (764)
51.13.12 TFPSMap.Remove
Synopsis: Remove a key/value pair from the map.
Declaration: function Remove(AKey: Pointer) : Integer
Visibility: public
Description: Remove removes the key/value pair pointing to by AKey from the map. It returns the index of
Akey prior to removal from the list. If AKey was not found, -1 is returned.
Errors: None.
See also: TFPSList.Delete (755), TFPSMap.IndexOf (763)
51.13.13 TFPSMap.Sort
Synopsis: Sort the list according to key
Declaration: procedure Sort
Visibility: public
Description: Sort sorts the list according to the key value, using the compare function provided in TFPSMap.OnKeyPtrCompare
(767)
Errors: None.
See also: TFPSMap.OnKeyPtrCompare (767), TFPSMap.OnDataPtrCompare (767)
764
CHAPTER 51. REFERENCE FOR UNIT ’FGL’
51.13.14 TFPSMap.Duplicates
Synopsis: What to do with duplicate key values
Description: Duplicates can be set to determine what to do with duplicate key values in the map:
51.13.15 TFPSMap.KeySize
Synopsis: Size (in bytes) for the key
51.13.16 TFPSMap.DataSize
Synopsis: Size (in bytes) for the data associated with keys
765
CHAPTER 51. REFERENCE FOR UNIT ’FGL’
51.13.17 TFPSMap.Keys
Synopsis: Indexed access to the locations of all keys
Declaration: Property Keys[Index: Integer]: Pointer
Visibility: public
Access: Read,Write
Description: Keys provides indexed access to all keys. It does not return the key, but returns a pointer to the key
value. When setting the Keys property, a pointer to the key value must be set, and the key value is
copied from the pointer.
See also: TFPSMap.KeySize (765), TFPSMap.KeyData (766), TFPSMap.Data (766)
51.13.18 TFPSMap.Data
Synopsis: Indexed access to the locations of all data items
Declaration: Property Data[Index: Integer]: Pointer
Visibility: public
Access: Read,Write
Description: Data provides indexed access to all data. It does not return the actual data, but returns a pointer to
the data. When setting the Data property, a pointer to the data value must be set, and the data value
is copied from the pointer.
See also: TFPSMap.DataSize (765), TFPSMap.KeyData (766), TFPSMap.Keys (766)
51.13.19 TFPSMap.KeyData
Synopsis: Access to data locations using key
Declaration: Property KeyData[Key: Pointer]: Pointer; default
Visibility: public
Access: Read,Write
Description: KeyData provides access to the data items, using their key value (as pointed to by AKey) as an
index. When reading a non-existent key value, Nil is returned. If the key is found, a pointer to the
associated data’s location is returned. When writing, the key pointed to by Key is added if it was not
present, and the data data is copied from the written pointer.
See also: TFPSMap.DataSize (765), TFPSMap.KeyData (766), TFPSMap.Data (766), TFPSMap.Keys (766),
TFPSMap.KeySize (765)
51.13.20 TFPSMap.Sorted
Synopsis: Is the map permanently sorted on key ?
Declaration: Property Sorted : Boolean
Visibility: public
Access: Read,Write
766
CHAPTER 51. REFERENCE FOR UNIT ’FGL’
Description: Sorted can be set to true to keep the map permanently sorted on key value. The sorting happens
using TFPSMap.OnKeyPtrCompare (767).
See also: TFPSMap.OnKeyPtrCompare (767), TFPSMap.Sort (764), TFPSMap.Duplicates (765)
51.13.21 TFPSMap.OnPtrCompare
Synopsis: Alias for OnKeyPtrCompare
51.13.22 TFPSMap.OnKeyPtrCompare
Synopsis: Callback to compare 2 keys
51.13.23 TFPSMap.OnDataPtrCompare
Synopsis: Callback to compare 2 data items
Declaration: Property OnDataPtrCompare : TFPSListCompareFunc
Visibility: public
Access: Read,Write
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 find a data item (IndexOf (763)).
767
Chapter 52
Name Page
System 1331
unicodedata 2012
52.2 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 (768) unit: the FPC project distributes
some Unicode collation data in .bco files which can be loaded using the LoadCollation (2023)
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
(769) function. The collation can be set on a per-thread basis.
New threads get DefaultCollationName (769) 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 (768) 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 (768) unit.
768
CHAPTER 52. REFERENCE FOR UNIT ’FPWIDESTRING’
52.4.2 SetActiveCollation
Synopsis: Set the active collation for the current thread.
Declaration: function SetActiveCollation(const AName: UnicodeString) : Boolean
function SetActiveCollation(const ACollation: PUCA_DataBook) : Boolean
Visibility: default
Description: SetActiveCollation sets the collation used in the current thread of the application. This can
be done using the name of the collation (AName) as registered or in the unicodedata (768) unit or
using the actual collation data (ACollation).
Errors: If the collation AName was not found, or ACollation is nil, then False is returned.
769
Chapter 53
Name Page
System 1331
53.2 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.
Returned by getopt (772),getlongopts (771) to indicate that there are no more options.
No_Argument = 0
Optional_Argument = 2
770
CHAPTER 53. REFERENCE FOR UNIT ’GETOPTS’
Required_Argument = 1
53.3.2 Types
Orderings = (require_order,permute,return_in_order)
Value Explanation
permute Change command-line options.
require_order Don’t touch the ordering of the command-line options
return_in_order Return options in the correct order.
POption = ^TOption
53.3.3 Variables
OptArg : string
OptErr : Boolean
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
771
CHAPTER 53. REFERENCE FOR UNIT ’GETOPTS’
53.4.2 GetOpt
Synopsis: Get next short option.
Declaration: function GetOpt(ShortOpts: string) : Char
Visibility: default
Description: Returns the next option found on the command-line. If no more options are found, returns EndOfOptions.
If the option requires an argument, it is returned in the OptArg variable.
ShortOptions is a string containing all possible one-letter options. If a letter is followed by a
colon (:), then that option needs an argument. If a letter is followed by 2 colons, the option has
an optional argument. If the first character of shortoptions is a ’+’ then options following
a non-option are regarded as non-options (standard Unix behavior). If it is a ’-’, then all non-
options are treated as arguments of a option with character #0. This is useful for applications that
require their options in the exact order as they appear on the command-line. If the first character of
shortoptions is none of the above, options and non-options are permuted, so all non-options are
behind all options. This allows options and non-options to be in random order on the command line.
Errors: Errors are reported through giving back a ’?’ character. OptOpt then gives the character which
caused the error. If OptErr is True then getopt prints an error-message to stdout.
See also: GetLongOpts (771)
Listing: ./optex/optex.pp
772
CHAPTER 53. REFERENCE FOR UNIT ’GETOPTS’
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 ;
f l a g := n i l ;
773
CHAPTER 53. REFERENCE FOR UNIT ’GETOPTS’
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 : ' , o p t a r g )
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 .
53.5 TOption
TOption = record
public
Name : string;
Has_arg : Integer;
Flag
: PChar;
Value : Char;
procedure SetOption(const aName: string
; AHas_Arg: Integer;
AFlag: PChar; AValue: Char
);
774
CHAPTER 53. REFERENCE FOR UNIT ’GETOPTS’
end
The TOption type is used to communicate the long options to GetLongOpts (771). 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.5.2 TOption.SetOption
Declaration: procedure SetOption(const aName: string; AHas_Arg: Integer;
AFlag: PChar; AValue: Char)
Visibility: public
775
Chapter 54
Name Page
System 1331
54.2 Overview
This document describes the GO32 unit for the Free Pascal compiler under dos. It was donated by
Thomas Schatzl ([email protected]), 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 shouldn’t
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 aren’t too confusing at all. If you notice an error or bug send it to the FPC mailing
list or directly to me. So let’s get started and happy and error free coding I wish you.... Thomas
Schatzl, 25. August 1998
• interrupts disabled
776
CHAPTER 54. REFERENCE FOR UNIT ’GO32’
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
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 (802), free_rm_callback (797), lock_code (813), lock_data (813)
See also: tb_size (823), transfer_buffer (824), global_dos_alloc (809), global_dos_free (811), realintr (815)
Listing: ./go32ex/softint.pp
{ Executes a r e a l mode s o f t w a r e i n t e r r u p t
E x a c t l y t h e i n t e r r u p t c a l l t o g e t t h e DOS v e r s i o n .
777
CHAPTER 54. REFERENCE FOR UNIT ’GO32’
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 , ' detected ' ) ;
end .
Listing: ./go32ex/rmpmint.pp
{ T h i s example shows t h e d i f f e r e n c e between p r o t e c t e d and r e a l mode
i n t e r r u p t s ; i t r e d i r e c t s t h e p r o t e c t e d mode h a n d l e r t o an own h a n d l e r
which r e t u r n s an i m p o s s i b l e f u n c t i o n r e s u l t and c a l l s i t a f t e r w a r d s .
Then t h e r e a l mode h a n d l e r i s c a l l e d d i r e c t l y , t o show t h e d i f f e r e n c e
between t h e two .
Used I n t e r r u p t :
g e t DOS v e r s i o n I n t 21h / f u n c t i o n 30h
I n p u t : AH = $30
AL = $1
Return : AL = major v e r s i o n number
AH = minor v e r s i o n number
}
uses
crt ,
go32 ;
var
r : trealregs ;
{ temporary v a r i a b l e used f o r t h e p r o t e c t e d mode i n t c a l l }
axreg : Word ;
oldint21h : tseginfo ;
newint21h : t s e g i n f o ;
. LCallOld :
l j m p %cs : o l d i n t 2 1 h
end ;
778
CHAPTER 54. REFERENCE FOR UNIT ’GO32’
begin
Writeln ;
Write ( '−− press any key t o resume −− ' ) ; readkey ;
gotoxy ( 1 , wherey ) ; c l r e o l ;
end ;
begin
{ see t h e t e x t messages f o r f u r t h e r d e t a i l }
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 ) ;
779
CHAPTER 54. REFERENCE FOR UNIT ’GO32’
end .
See also: set_rm_interrupt (822), get_rm_interrupt (806), set_pm_interrupt (820), get_pm_interrupt (801),
lock_data (813), lock_code (813), enable (796), disable (794), outportb (814)
{$ASMMODE ATT }
{$MODE FPC}
uses
crt ,
go32 ;
const
{ keyboard i s IRQ 1 −> i n t e r r u p t 9 }
k b d i n t = $9 ;
var
{ h o l d s o l d PM i n t e r r u p t h a n d l e r address }
oldint9_handler : tseginfo ;
{ new PM i n t e r r u p t h a n d l e r }
780
CHAPTER 54. REFERENCE FOR UNIT ’GO32’
newint9_handler : t s e g i n f o ;
{ p o i n t e r to i n t e r r u p t handler }
clickproc : pointer ;
{ t h e data segment s e l e c t o r }
backupDS : Word ; e x t e r n a l name ' _ _ _ v 2 p r t 0 _ d s _ a l i a s ' ;
{ i n t e r r u p t handler }
procedure i n t 9 _ h a n d l e r ; assembler ;
asm
cli
{ save a l l r e g i s t e r s , because we don ' t know which t h e c o m p i l e r
uses f o r t h e c a l l e d procedure }
p u s h l %ds
p u s h l %es
p u s h l %f s
p u s h l %gs
pushal
{ s e t up t o c a l l a FPC procedure }
movw %cs : backupDS , %ax
movw %ax , %ds
movw %ax , %es
movw dosmemselector , %ax
movw %ax , %f s
{ c a l l user procedure }
call * clickproc
{ restore a l l registers }
popal
p o p l %gs
p o p l %f s
p o p l %es
p o p l %ds
{ note : i n go32v2 mode %cs=%ds=%es ! ! ! }
l j m p %cs : o l d i n t 9 _ h a n d l e r { c a l l o l d h a n d l e r }
{ we don ' t need t o do a n y t h i n g more , because t h e o l d i n t e r r u p t
h a n d l e r does t h i s f o r us ( send EOI command , i r e t , s t i . . . ) }
end ;
{ dummy procedure t o r e t r i e v e e x a c t l e n g t h o f handler , f o r l o c k i n g
and u n l o c k i n g f u n c t i o n s }
procedure int9_dummy ; begin end ;
{ i n s t a l l s our new h a n d l e r }
procedure i n s t a l l _ c l i c k ;
begin
c l i c k p r o c := @clicker ;
{ l o c k used code and data }
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 ) ) ;
781
CHAPTER 54. REFERENCE FOR UNIT ’GO32’
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 ) ) ;
{ f i l l i n new handler ' s 48 b i t p o i n t e r }
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 ;
{ g e t o l d PM i n t e r r u p t h a n d l e r }
get_pm_interrupt ( kbdint , oldint9_handler ) ;
{ s e t t h e new i n t e r r u p t h a n d l e r }
set_pm_interrupt ( kbdint , newint9_handler ) ;
end ;
{ d e i n s t a l l s our i n t e r r u p t h a n d l e r }
procedure r e m o v e _ c l i c k ;
begin
{ set old handler }
set_pm_interrupt ( kbdint , oldint9_handler ) ;
{ u n l o c k used code & data }
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 ) ) ;
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 <> #13) do begin
ch : = readkey ; w r i t e ( ch ) ;
end ;
remove_click ;
end .
782
CHAPTER 54. REFERENCE FOR UNIT ’GO32’
783
CHAPTER 54. REFERENCE FOR UNIT ’GO32’
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 shouldn’t 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 (785), dosmemput (786), dosmemmove (786), dosmemfillchar (785), dosmemfillword
(785), seg_move (819), seg_fillchar (817), seg_fillword (818)
See also: get_cs (797), get_ds (798), get_ss (808), allocate_ldt_descriptors (789), free_ldt_descriptor (796),
segment_to_descriptor (817), get_next_selector_increment_value (800), get_segment_base_address
(808), set_segment_base_address (822), set_segment_limit (822), create_code_segment_alias_descriptor
(794)
784
CHAPTER 54. REFERENCE FOR UNIT ’GO32’
carryflag = $001
directionflag = $400
785
CHAPTER 54. REFERENCE FOR UNIT ’GO32’
Copies count bytes of data between two dos real mode memory locations.
Parameters:
interruptflag = $200
overflowflag = $800
parityflag = $004
786
CHAPTER 54. REFERENCE FOR UNIT ’GO32’
rm_dpmi = 4
rm_raw = 1
rm_unknown = 0
rm_vcpi = 3
rm_xms = 2
signflag = $080
trapflag = $100
zeroflag = $040
54.18.2 Types
registers = trealregs
trealregs = record
case Integer of
1: (
EDI : LongInt;
ESI : LongInt
;
EBP : LongInt;
Res : LongInt;
EBX : LongInt;
EDX : LongInt
;
ECX : LongInt;
EAX : LongInt;
787
CHAPTER 54. REFERENCE FOR UNIT ’GO32’
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
;
AH : Byte;
AL2 : Byte;
AH2 : Byte;
);
788
CHAPTER 54. REFERENCE FOR UNIT ’GO32’
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.
54.18.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 recommended 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.
789
CHAPTER 54. REFERENCE FOR UNIT ’GO32’
Listing: ./go32ex/seldes.pp
{
T h i s example demonstrates t h e usage o f d e s c r i p t o r s and t h e e f f e c t s o f
changing i t s l i m i t and base address .
I n more d e t a i l , t h e program f i l l s t h e r e g i o n d e s c r i b e d by an
a l l o c a t e d d e s c r i p t o r i n t e x t screen memory w i t h v a r i o u s c h a r a c t e r s .
Before doing t h i s i t saves t h e e n t i r e screen c o n t e n t s t o t h e heap and
restores i t afterwards .
Some a d d i t i o n a l background :
Y * columns * 2 + X * 2
const
{ screen x and y dimensions }
maxx = 8 0 ;
maxy = 2 5 ;
{ b y t e s used f o r every c h a r a c t e r c e l l }
bytespercell = 2;
{ screen s i z e i n b y t e s }
s c r e e n s i z e = maxx * maxy * b y t e s p e r c e l l ;
{ t h e l i n e a r address o f $B800 : 0 }
l i n B 8 0 0 0 = $B800 * 1 6 ;
type
string80 = string [ 8 0 ] ;
790
CHAPTER 54. REFERENCE FOR UNIT ’GO32’
var
{ h o l d s t h e o l d screen c o n t e n t s }
t e x t _ s a v e : array [ 0 . . s c r e e n s i z e −1] of b y t e ;
{ o l d c u r s o r x and y c o o r d i n a t e s }
t e x t _ o l d x , t e x t _ o l d y : Word ;
{ s e l e c t o r t o t h e t e x t mode screen }
t e x t _ s e l : Word ;
{ w r i t e s some d e s c r i p t o r i n f o on t h e l a s t 2 l i n e s }
procedure s e l i n f o ( s e l : Word ) ;
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 ;
{ r e t u r n s a 2 b y t e c h a r a c t e r c e l l , which i n c l u d e s c h a r a c t e r data
and i t s c o l o r a t t r i b u t e s }
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
{ save o r i g i n a l screen c o n t e n t s t o v a r i a b l e , t h i s t i m e by u s i n g
seg_move ( ) and t h e dosmemselector v a r i a b l e }
seg_move ( dosmemselector , linB8000 , get_ds , l o n g i n t ( @text_save ) ,
screensize ) ;
{ a d d i t i o n a l l y we have t o save t h e o l d screen c u r s o r
coordinates }
t e x t _ o l d x : = wherex ; t e x t _ o l d y : = wherey ;
{ c l e a r t h e whole screen }
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 ) ) ) ;
{ o u t p u t message }
status ( ' Creating selector ' ' t e x t _ s e l ' ' to a part of ' +
' t e x t screen memory ' ) ;
{ allocate descriptor }
t e x t _ s e l := a l l o c a t e _ l d t _ d e s c r i p t o r s ( 1 ) ;
{ s e t i t s base address t o t h e l i n e a r address o f t h e t e x t screen
+ t h e b y t e s i z e o f one l i n e (=maxx * b y t e s p e r c e l l * 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 ) ;
{ t h e l i m i t i s s e t t o t h e s c r e e n s i z e reduced by one ( a must be )
and t h e number o f l i n e s we don ' t want t o have touched ( f i r s t
l i n e + lower 2 l i n e s ) }
set_segment_limit ( text_sel , screensize − 1 − bytespercell *
maxx * 3 ) ;
791
CHAPTER 54. REFERENCE FOR UNIT ’GO32’
54.19.2 allocate_memory_block
Synopsis: Allocate a block of linear memory
Declaration: function allocate_memory_block(size: LongInt) : LongInt
Visibility: default
792
CHAPTER 54. REFERENCE FOR UNIT ’GO32’
Returned values: blockhandle - the memory handle to this memory block. Linear address of the
requested memory.
Remark warning According to my DPMI docs this function is not implemented correctly. Normally you
should also get a blockhandle to this block after successful operation. This handle can then be
used to free the memory block afterwards or use this handle for other purposes. Since the function
isn’t implemented correctly, and doesn’t return a blockhandle, the block can’t be deallocated and is
hence unusable ! This function doesn’t allocate any descriptors for this block, it’s the applications
responsibility to allocate and initialize for accessing this memory.
Errors: Check the int31error (789) variable.
See also: free_memory_block (796)
54.19.3 copyfromdos
Synopsis: Copy data from DOS to heap
Declaration: procedure copyfromdos(var addr; len: LongInt)
Visibility: default
Description: Copies data from the pre-allocated dos memory transfer buffer to the heap.
Parameters:
Notes: Can only be used in conjunction with the dos memory transfer buffer.
Errors: Check the int31error (789) variable.
See also: tb_size (823), transfer_buffer (824), copytodos (793)
54.19.4 copytodos
Synopsis: Copy data from heap to DOS memory
Declaration: procedure copytodos(var addr; len: LongInt)
Visibility: default
Description: Copies data from heap to the pre-allocated dos memory buffer.
Parameters:
Notes: This function fails if you try to copy more bytes than the transfer buffer is in size. It can only
be used in conjunction with the transfer buffer.
Errors: Check the int31error (789) variable.
See also: tb_size (823), transfer_buffer (824), copyfromdos (793)
793
CHAPTER 54. REFERENCE FOR UNIT ’GO32’
54.19.5 create_code_segment_alias_descriptor
Synopsis: Create new descriptor from existing descriptor
segDescriptor.
54.19.6 disable
Synopsis: Disable hardware interrupts
Declaration: procedure disable
Visibility: default
54.19.7 dpmi_dosmemfillchar
Synopsis: Fill DOS memory with a character
Declaration: procedure dpmi_dosmemfillchar(seg: Word; ofs: Word; count: LongInt;
c: Char)
Visibility: default
Description: dpmi_dosmemfillchar fills the DOS memory region indicated by seg,ofs with count char-
acters c.
See also: dpmi_dosmemput (795), dpmi_dosmemget (795), dpmi_dosmemmove (795), dpmi_dosmemfillword
(795)
794
CHAPTER 54. REFERENCE FOR UNIT ’GO32’
54.19.8 dpmi_dosmemfillword
Synopsis: Fill DOS memory with a word value
54.19.9 dpmi_dosmemget
Synopsis: Move data from DOS memory to DPMI memory
Declaration: procedure dpmi_dosmemget(seg: Word; ofs: Word; var data; count: LongInt)
Visibility: default
Description: dpmi_dosmemput moves count bytes of data from the DOS memory location indicated by seg
and ofs to DPMI memory indicated by data.
54.19.10 dpmi_dosmemmove
Synopsis: Move DOS memory
54.19.11 dpmi_dosmemput
Synopsis: Move data from DPMI memory to DOS memory.
Declaration: procedure dpmi_dosmemput(seg: Word; ofs: Word; var data; count: LongInt)
Visibility: default
Description: dpmi_dosmemput moves count bytes of data from data to the DOS memory location indicated
by seg and ofs.
See also: dpmi_dosmemget (795), dpmi_dosmemmove (795), dpmi_dosmemfillchar (794), dpmi_dosmemfillword
(795)
795
CHAPTER 54. REFERENCE FOR UNIT ’GO32’
54.19.12 enable
Synopsis: Enable hardware interrupts
Errors: None.
See also: disable (794)
54.19.13 free_ldt_descriptor
Synopsis: Free a descriptor
Declaration: function free_ldt_descriptor(d: Word) : Boolean
Visibility: default
Description: Frees a previously allocated descriptor.
Parameters:
Return value: True if successful, False otherwise. Notes: After this call this selector is invalid
and must not be used for any memory operations anymore. Each descriptor allocated with allo-
cate_ldt_descriptors (789) must be freed individually with this function, even if it was previously
allocated as a part of a contiguous array of descriptors.
For an example, see allocate_ldt_descriptors (789).
Errors: Check the int31error (789) variable.
See also: allocate_ldt_descriptors (789), get_next_selector_increment_value (800)
54.19.14 free_linear_addr_mapping
Synopsis: ? No description available
Declaration: function free_linear_addr_mapping(linear_addr: DWord) : Boolean
Visibility: default
54.19.15 free_memory_block
Synopsis: Free allocated memory block
796
CHAPTER 54. REFERENCE FOR UNIT ’GO32’
Return value: True if successful, false otherwise. Notes: Frees memory that was previously
allocated with allocate_memory_block (792) . This function doesn’t free any descriptors mapped to
this block, it’s the application’s responsibility.
Errors: Check int31error (789) variable.
54.19.16 free_rm_callback
Synopsis: Release real mode callback.
Declaration: function free_rm_callback(var intaddr: tseginfo) : Boolean
Visibility: default
Description: Releases a real mode callback address that was previously allocated with the get_rm_callback (802)
function.
Parameters:
54.19.17 get_cs
Synopsis: Get CS selector
Declaration: function get_cs : Word
Visibility: default
54.19.18 get_descriptor_access_right
Synopsis: Get descriptor’s access rights
Declaration: function get_descriptor_access_right(d: Word) : LongInt
Visibility: default
Description: Gets the access rights of a descriptor.
Parameters:
797
CHAPTER 54. REFERENCE FOR UNIT ’GO32’
dselector to descriptor.
54.19.19 get_dpmi_version
Synopsis: Return DPMI information
Errors: The call returns false if the information could not be retrieved.
See also: tdpmiversioninfo (825)
54.19.20 get_ds
Synopsis: Get DS Selector
Errors: None.
See also: get_cs (797), get_ss (808)
54.19.21 get_exception_handler
Synopsis: Return current exception handler
798
CHAPTER 54. REFERENCE FOR UNIT ’GO32’
54.19.22 get_linear_addr
Synopsis: Convert physical to linear address
Declaration: function get_linear_addr(phys_addr: DWord; size: LongInt) : DWord
Visibility: default
Description: Converts a physical address into a linear address.
Parameters:
Return value: Linear address that can be used to access the physical memory. Notes: It’s the ap-
plications responsibility to allocate and set up a descriptor for access to the memory. This function
shouldn’t be used to map real mode addresses.
Errors: Check the int31error (789) variable.
See also: allocate_ldt_descriptors (789), set_segment_limit (822), set_segment_base_address (822)
54.19.23 get_meminfo
Synopsis: Return information on the available memory
Declaration: function get_meminfo(var meminfo: tmeminfo) : Boolean
Visibility: default
Description: Returns information about the amount of available physical memory, linear address space, and disk
space for page swapping.
Parameters:
Return values: Due to an implementation bug this function always returns False, but it always
succeeds.
Remark Notes: Only the first field of the returned structure is guaranteed to contain a valid value. Any fields
that are not supported by the DPMI host will be set by the host to -1 (0FFFFFFFFH) to indicate
that the information is not available. The size of the pages used by the DPMI host can be obtained
with the get_page_size (801) function.
Errors: Check the int31error (789) variable.
See also: get_page_size (801)
Listing: ./go32ex/meminfo.pp
{ Shows how t o o b t a i n memory i n f o r m a t i o n v i a get_meminfo ( ) ;
uses
go32 ;
var
799
CHAPTER 54. REFERENCE FOR UNIT ’GO32’
meminfo : tmeminfo ;
begin
get_meminfo ( meminfo ) ;
i f ( i n t 3 1 e r r o r <> 0 ) then begin
W r i t e l n ( ' E r r o r g e t t i n g DPMI memory i n f o r m a t i o n . . . H a l t i n g ' ) ;
W r i t e l n ( ' DPMI e r r o r number : ' , i n t 3 1 e r r o r ) ;
end else begin
with meminfo do begin
Writeln ( ' Largest a v a i l a b l e f r e e block : ' ,
available_memory div 1024 , ' 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 1024 , ' 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 1024 ,
' kbytes ' ) ;
i f ( max_ pages _in_p aging _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_ pagin g_fi le * get_page_size div 1024 ,
' kbytes ' ) ;
end ;
end ;
end .
54.19.24 get_next_selector_increment_value
Synopsis: Return selector increment value
Declaration: function get_next_selector_increment_value : Word
Visibility: default
Description: Returns the selector increment value when allocating multiple subsequent descriptors via allocate_ldt_descriptors
(789).
Return value: Selector increment value.
Remark Notes: Because allocate_ldt_descriptors (789) only returns the selector for the first descriptor and so
the value returned by this function can be used to calculate the selectors for subsequent descriptors
in the array.
Errors: Check the int31error (789) variable.
800
CHAPTER 54. REFERENCE FOR UNIT ’GO32’
54.19.25 get_page_attributes
Synopsis: ? No description available
Declaration: function get_page_attributes(handle: DWord; offset: DWord;
pagecount: DWord; buf: pointer) : Boolean
Visibility: default
54.19.26 get_page_size
Synopsis: Return the page size
Declaration: function get_page_size : LongInt
Visibility: default
Description: Returns the size of a single memory page.
Return value: Size of a single page in bytes.
Remark The returned size is typically 4096 bytes.
For an example, see get_meminfo (799).
Errors: Check the int31error (789) variable.
See also: get_meminfo (799)
54.19.27 get_pm_exception_handler
Synopsis: Get protected mode exception handler
Declaration: function get_pm_exception_handler(e: Byte; var intaddr: tseginfo)
: Boolean
Visibility: default
Description: get_pm_exception_handler returns the protected mode exception handler for exception E
in intaddr. It returns True if the call was successful, False if not.
See also: get_exception_handler (798), set_pm_exception_handler (820)
54.19.28 get_pm_interrupt
Synopsis: Return protected mode interrupt handler
Declaration: function get_pm_interrupt(vector: Byte; var intaddr: tseginfo) : Boolean
Visibility: default
Description: Returns the address of a current protected mode interrupt handler.
Parameters:
801
CHAPTER 54. REFERENCE FOR UNIT ’GO32’
54.19.29 get_rm_callback
Synopsis: Return real mode callback
Declaration: function get_rm_callback(pm_func: pointer; const reg: trealregs;
var rmcb: tseginfo) : Boolean
Visibility: default
Description: Returns a unique real mode segment:offset address, known as a "real mode callback," that will
transfer control from real mode to a protected mode procedure.
Parameters:
Listing: ./go32ex/callback.pp
{ T h i s program t r i e s t o g i v e an example how t o i n s t a l l a c a l l b a c k
procedure w i t h t h e h e l p o f t h e GO32 u n i t .
I t i n s t a l l s a c a l l b a c k which i s s u p p l i e d by any 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 ; a t a s p e c i f i e d mouse a c t i o n t h i s r o u t i n e i s c a l l e d .
T h i s c a l l b a c k must p r o v i d e t h e s e r v i c e s e x p l a i n e d i n t h e docs . The
main c a l l b a c k has t o be i n assembly , because i t i s n ' t p o s s i b l e t o do
these s e r v i c e s w i t h p a s c a l alone . But i s w r i t t e n as g e n e r a l as
p o s s i b l e t o p r o v i d e maximum re−u s a b i l i t y f o r o t h e r a p p l i c a t i o n s and
hence i t s i m p l y c a l l s a normal p a s c a l user procedure i n a d d i t i o n t o
some i n i t i a l i z a t i o n and c a l l b a c k s e r v i c e code , so you don ' t need t o
h a s s l e around w i t h i t t o o much .
802
CHAPTER 54. REFERENCE FOR UNIT ’GO32’
uses
crt ,
go32 ;
const
{ t h e mouse i n t e r r u p t number }
mouseint = $33 ;
var
{ supplied r e g i s t e r s t r u c t u r e to the callback }
mouse_regs : t r e a l r e g s ; e x t e r n a l name ' ___v2prt0_rmcb_regs ' ;
{ r e a l mode 48 b i t p o i n t e r t o t h e c a l l b a c k }
mouse_seginfo : t s e g i n f o ;
var
{ number o f mouse b u t t o n s }
mouse_numbuttons : l o n g i n t ;
{ b i t mask f o r t h e a c t i o n which t r i g g e r e d t h e c a l l b a c k }
mouse_action : word ;
{ c u r r e n t mouse x and y c o o r d i n a t e s }
mouse_x , mouse_y : Word ;
803
CHAPTER 54. REFERENCE FOR UNIT ’GO32’
{ button state }
mouse_b : Word ;
{ i s an a d d i t i o n a l user procedure i n s t a l l e d }
u s e r p r o c _ i n s t a l l e d : Longbool ;
{ l e n g t h o f a d d i t i o n a l user procedure }
userproc_length : Longint ;
{ p o i n t e r t o user proc }
u se r pr o c_ pr o c : p o i n t e r ;
p o p l %eax
popw %ds
p u s h l %eax
movl (% e s i ) , %eax
movl %eax , %es : 42(% e d i ) { a d j u s t s t a c k }
addw $4 , %es :46(% e d i )
p o p l %eax
iret
end ;
{ T h i s dummy i s used t o o b t a i n t h e l e n g t h o f t h e c a l l b a c k c o n t r o l
f u n c t i o n . I t has t o be r i g h t a f t e r t h e c a l l b a c k _ h a n d l e r ( ) f u n c t i o n .
}
procedure mouse_dummy ; begin end ;
{ D e s c r i p t i o n : I n s t a l l s t h e mouse c a l l b a c k c o n t r o l h a n d l e r and
handles a l l necessary mouse r e l a t e d i n i t i a l i z a t i o n .
804
CHAPTER 54. REFERENCE FOR UNIT ’GO32’
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 ) ) ;
{ a l l o c a t e c a l l b a c k ( supply r e g i s t e r s s t r u c t u r e ) }
g e t _ r m _ c a l l b a c k ( @callback_handler , mouse_regs , mouse_seginfo ) ;
{ i n s t a l l callback }
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 ) ;
{ show mouse c u r s o r }
r . eax : = $01 ;
r e a l i n t r ( mouseint , r ) ;
end ;
805
CHAPTER 54. REFERENCE FOR UNIT ’GO32’
procedure remove_mouse ;
var
r : trealregs ;
begin
{ h i d e mouse c u r s o r }
r . eax : = $02 ; r e a l i n t r ( mouseint , r ) ;
{ remove c a l l b a c k h a n d l e r }
r . eax : = $0c ; r . ecx : = 0 ; r . edx : = 0 ; r . es : = 0 ;
r e a l i n t r ( mouseint , r ) ;
{ free callback }
f r e e _ r m _ c a l l b a c k ( mouse_seginfo ) ;
{ check i f a d d i t i o n a l u s e r p r o c i s i n s t a l l e d , and c l e a n up i f
needed }
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 := f a l s e ;
end ;
{ u n l o c k used code & data }
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
{ w r i t e mouse s t a t e i n f o }
gotoxy ( 1 , wherey ) ;
w r i t e ( ' MouseX : ' , mouse_x : 2 , ' MouseY : ' , mouse_y : 2 ,
' B u t t o n s : ' , mouse_b : 2 ) ;
end ;
remove_mouse ;
end .
54.19.30 get_rm_interrupt
Synopsis: Get real mode interrupt vector
Declaration: function get_rm_interrupt(vector: Byte; var intaddr: tseginfo) : Boolean
Visibility: default
Description: Returns the contents of the current machine’s real mode interrupt vector for the specified interrupt.
806
CHAPTER 54. REFERENCE FOR UNIT ’GO32’
Parameters:
54.19.31 get_run_mode
Synopsis: Return current run mode
Declaration: function get_run_mode : Word
Visibility: default
Description: Returns the current mode your application runs with.
Return values: One of the constants used by this function.
Errors: None.
See also: get_run_mode (807)
Listing: ./go32ex/getrunmd.pp
{ Simply w r i t e a message a c c o r d i n g t o t h e c u r r e n t environment }
uses
go32 ;
begin
{ depending on t h e d e t e c t e d environment we s i m p l y w r i t e
a n o t h e r message Note : i n go32v2 t h i s w i l l always be rm_dpmi . }
case ( get_run_mode ) of
rm_unknown :
W r i t e l n ( ' Unknown environment found ' ) ;
rm_raw :
W r i t e l n ( ' You are c u r r e n t l y r u n n i n g i n raw mode ' ,
' ( w i t h o u t HIMEM) ' ) ;
rm_xms :
W r i t e l n ( ' You are c u r r e n t l y u s i n g HIMEM . SYS o n l y ' ) ;
rm_vcpi :
W r i t e l n ( ' VCPI s e r v e r d e t e c t e d . You ' ' r e u s i n g HIMEM and ' ,
'EMM386 ' ) ;
rm_dpmi :
W r i t e l n ( ' DPMI d e t e c t e d . You ' ' r e u s i n g a DPMI h o s t l i k e ' ,
' a windows DOS box o r CWSDPMI ' ) ;
end ;
end .
807
CHAPTER 54. REFERENCE FOR UNIT ’GO32’
54.19.32 get_segment_base_address
Synopsis: Return base address from descriptor table
54.19.33 get_segment_limit
Synopsis: Return segment limits from descriptor
dselector.
54.19.34 get_ss
Synopsis: Return SS selector
Declaration: function get_ss : Word
Visibility: default
Description: Returns the ss selector.
Return values: The content of the ss segment register.
Errors: None.
See also: get_ds (798), get_cs (797)
808
CHAPTER 54. REFERENCE FOR UNIT ’GO32’
54.19.35 global_dos_alloc
Synopsis: Allocate DOS real mode memory
Declaration: function global_dos_alloc(bytes: LongInt) : LongInt
Visibility: default
Description: Allocates a block of dos real mode memory.
Parameters:
Return values: The low word of the returned value contains the selector to the allocated dos memory
block, the high word the corresponding real mode segment value. The offset value is always zero.
This function allocates memory from dos memory pool, i.e. memory below the 1 MB boundary
that is controlled by dos. Such memory blocks are typically used to exchange data with real mode
programs, TSRs, or device drivers. The function returns both the real mode segment base address
of the block and one descriptor that can be used by protected mode applications to access the block.
This function should only used for temporary buffers to get real mode information (e.g. interrupts
that need a data structure in ES:(E)DI), because every single block needs an unique selector. The
returned selector should only be freed by a global_dos_free (811) call.
Errors: Check the int31error (789) variable.
See also: global_dos_free (811)
Listing: ./go32ex/buffer.pp
{ T h i s program demonstrates t h e usage o f DOS r e a l mode memory by
e x e c u t i n g a s o f t w a r e i n t e r r u p t which needs a b u f f e r t o s t o r e data
i n t o . Because these i n t e r r u p t s are r e a l mode funcs , t h e b u f f e r must
be l o c a t e d i n r e a l mode memory space ( f i r s t MB o f memory ) . Such
memory can o n l y be a l l o c a t e d by t h e g l o b a l _ d o s _ a l l o c ( ) and
g l o b a l _ d o s _ f r e e ( ) f u n c t i o n s o f t h e GO32 u n i t .
B u f f e r s t r u c t u r e : ( r e l e v a n t t o t h i s example )
Note : t o r e q u e s t VBE 2 . 0 i n f o r m a t i o n , t h e f i r s t 4 b y t e s o f t h e
b u f f e r must c o n t a i n ' VBE2 ' p r i o r t o t h e i n t e r r u p t c a l l .
809
CHAPTER 54. REFERENCE FOR UNIT ’GO32’
uses
go32 ;
{ Function : dosalloc }
{ Input : s i z e o f a r e a l mode l o c a t i o n }
{ Output : s e l e c t o r and segment o f a r e a l mode l o c a t i o n }
procedure d o s a l l o c ( var s e l e c t o r : word ;
var segment : word ; s i z e : l o n g i n t ) ;
var
res : l o n g i n t ;
begin
{ t r y t o a l l o c a t e r e a l mode memory }
res := global_dos_alloc ( size ) ;
{ t h e l o w e r 16 b i t s o f t h e r e s u l t c o n t a i n t h e s e l e c t o r t o t h e
a l l o c a t e d memory b l o c k }
s e l e c t o r : = word ( r e s ) ;
{ t h e upper 16 b i t s c o n t a i n t h e r e a l mode segment address o f
t h i s b l o c k ; t h e o f f s e t i s always 0 , so we don ' t need t o r e t u r n
this }
segment : = word ( r e s shr 1 6 ) ;
end ;
{ Function : dosfree }
{ Input : s e l e c t o r o f a r e a l mode b l o c k }
{ Output : none }
{ D e s c r i p t i o n : de−a l l o c a t e s a p r e v i o u s l y a l l o c a t e d r e a l mode
memory }
procedure d o s f r e e ( s e l e c t o r : word ) ;
begin
{ c a l l t h e GO32 f u n c t i o n w i t h t h e s e l e c t o r }
global_dos_free ( selector ) ;
end ;
type
VBEInfoBuf = packed record
{ c o n t a i n s 'VESA ' i f s u c c e s s f u l }
S i g n a t u r e : array [ 0 . . 3 ] of char ;
V e r s i o n : Word ;
{ pad t o 512 b y t e s l e n g t h }
r e s e r v e d : array [ 0 . . 5 0 5 ] of b y t e ;
end ;
var
{ s e l e c t o r t o our r e a l mode b u f f e r }
selector ,
{ r e a l mode segment address o f b u f f e r }
segment : Word ;
{ r e g i s t e r s t r u c t u r e to issue a software i n t e r r u p t }
r : trealregs ;
i n f o b u f : VBEInfoBuf ;
begin
{ f i r s t we r e s e t t h e r e g i s t e r s and i n f o b u f v a r i a b l e }
810
CHAPTER 54. REFERENCE FOR UNIT ’GO32’
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 ) ;
{ a l l o c a t e r e a l mode memory }
d o s a l l o c ( s e l e c t o r , segment , s i z e o f ( VBEInfoBuf ) ) ;
{ check i f an e r r o r o c c u r r e d d u r i n g a l l o c a t i o n }
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 ;
{ r e q u e s t VBE 2 . 0 i n f o r m a t i o n , f i l l o u t i n f o r m a t i o n b u f f e r }
i n f o b u f . S i g n a t u r e : = ' VBE2 ' ;
{ copy b u f f e r t o t h e a l l o c a t e d r e a l mode memory }
dosmemput ( segment , 0 , i n f o b u f , s i z e o f ( i n f o b u f ) ) ;
{ i s s u e t h e i n t e r r u p t ; remember : DI = 0 }
r . ax : = $4f00 ; r . es : = segment ;
r e a l i n t r ( $10 , r ) ;
{ copy b u f f e r t o our i n f o b u f v a r i a b l e again }
dosmemget ( segment , 0 , i n f o b u f , s i z e o f ( i n f o b u f ) ) ;
{ f r e e a l l o c a t e d r e a l mode memory , because we don ' t need i t
anymore }
dosfree ( s e l e c t o r ) ;
{ check i f i n t e r r u p t c a l l was s u c c e s s f u l }
i f ( r . ax <> $ 4 f ) then begin
{ w r i t e message and e x i t , because t h e i n f o b u f doesn ' t c o n t a i n
any u s e f u l data we c o u l d t e l l t h e user }
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 ;
{ check i f b u f f e r i s v a l i d }
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.19.36 global_dos_free
Synopsis: Free DOS memory block
Declaration: function global_dos_free(selector: Word) : Boolean
Visibility: default
811
CHAPTER 54. REFERENCE FOR UNIT ’GO32’
54.19.37 inportb
Synopsis: Read byte from I/O port
Declaration: function inportb(port: Word) : Byte
Visibility: default
Description: Reads 1 byte from the selected I/O port.
Parameters:
54.19.38 inportl
Synopsis: Read longint from I/O port
Declaration: function inportl(port: Word) : LongInt
Visibility: default
Description: Reads 1 longint from the selected I/O port.
Parameters:
54.19.39 inportw
Synopsis: Read word from I/O port
Declaration: function inportw(port: Word) : Word
Visibility: default
Description: Reads 1 word from the selected I/O port.
Parameters:
812
CHAPTER 54. REFERENCE FOR UNIT ’GO32’
54.19.40 lock_code
Synopsis: Lock code memory range
Declaration: function lock_code(functionaddr: pointer; size: LongInt) : Boolean
Visibility: default
Description: Locks a memory range which is in the code segment selector.
Parameters:
54.19.41 lock_data
Synopsis: Lock data memory range
Declaration: function lock_data(var data; size: LongInt) : Boolean
Visibility: default
Description: Locks a memory range which resides in the data segment selector.
Parameters:
54.19.42 lock_linear_region
Synopsis: Lock linear memory region
Declaration: function lock_linear_region(linearaddr: LongInt; size: LongInt)
: Boolean
Visibility: default
Description: Locks a memory region to prevent swapping of it.
Parameters:
813
CHAPTER 54. REFERENCE FOR UNIT ’GO32’
54.19.43 map_device_in_memory_block
Synopsis: Map a device into program’s memory space
Declaration: function map_device_in_memory_block(handle: DWord; offset: DWord;
pagecount: DWord; device: DWord)
: Boolean
Visibility: default
Description: map_device_in_memory_block allows to map a device in memory. This function is a direct
call of the extender. For more information about it’s arguments, see the extender documentation.
54.19.44 outportb
Synopsis: Write byte to I/O port
Declaration: procedure outportb(port: Word; data: Byte)
Visibility: default
Description: Sends 1 byte of data to the specified I/O port.
Parameters:
portthe I/O port number to send data to.
datavalue sent to I/O port.
Return values: None.
Errors: None.
See also: inportb (812), outportl (815), outportw (815)
Listing: ./go32ex/outport.pp
{ T h i s example demonstrates t h e use o f t h e o u t p o r t f u n c t i o n s .
begin
{ t u r n on speaker }
o u t p o r t b ( $61 , $ f f ) ;
{ wait a l i t t l e b i t }
delay ( 5 0 ) ;
{ t u r n i t o f f again }
o u t p o r t b ( $61 , $0 ) ;
end .
814
CHAPTER 54. REFERENCE FOR UNIT ’GO32’
54.19.45 outportl
Synopsis: Write longint to I/O port
54.19.46 outportw
Synopsis: Write word to I/O port
Declaration: procedure outportw(port: Word; data: Word)
Visibility: default
Description: Sends 1 word of data to the specified I/O port.
Parameters:
54.19.47 realintr
Synopsis: Simulate interrupt
Declaration: function realintr(intnr: Word; var regs: trealregs) : Boolean
Visibility: default
Description: Simulates an interrupt in real mode.
Parameters:
815
CHAPTER 54. REFERENCE FOR UNIT ’GO32’
Return values: The supplied registers data structure contains the values that were returned by the real
mode interrupt. True if successful, False if not.
Remark The function transfers control to the address specified by the real mode interrupt vector of intnr. The
real mode handler must return by executing an IRET.
Errors: Check the int31error (789) variable.
Listing: ./go32ex/flags.pp
{ T h i s example demonstrates t h e use o f t h e f l a g c o n s t a n t s i n
c o n j u n c t i o n w i t h an i n t e r r u p t c a l l
uses
go32 ;
var
r : trealregs ;
begin
{ s e t r e g i s t e r v a l u e s and i s s u e r e a l mode i n t e r r u p t c a l l }
r . ax : = $5300 ;
r . bx : = 0 ;
r e a l i n t r ( $15 , r ) ;
{ check i f c a r r y c l e a r and w r i t e a s u i t e d message }
i f ( ( r . f l a g s and c a r r y f l a g ) = 0 ) then begin
W r i t e l n ( 'APM v ' , ( r . ah and $ f ) , ' . ' ,
( r . a l shr 4 ) , ( r . a l and $ f ) , ' d e t e c t e d ' ) ;
end else
W r i t e l n ( 'APM n o t p r e s e n t ' ) ;
end .
54.19.48 request_linear_region
Synopsis: Request linear address region.
Declaration: function request_linear_region(linearaddr: LongInt; size: LongInt;
var blockhandle: LongInt) : Boolean
Visibility: default
Description: request_linear_region requests a linear range of addresses of size Size, starting at linearaddr.
If successful, True is returned, and a handle to the address region is returned in blockhandle.
Errors: On error, False is returned.
816
CHAPTER 54. REFERENCE FOR UNIT ’GO32’
54.19.49 segment_to_descriptor
Synopsis: Map segment address to descriptor
54.19.50 seg_fillchar
Synopsis: Fill segment with byte value
Listing: ./go32ex/vgasel.pp
817
CHAPTER 54. REFERENCE FOR UNIT ’GO32’
uses go32 ;
var
v g a s e l : Word ;
r : trealregs ;
begin
{ s e t VGA mode 13h }
r . eax : = $13 ; r e a l i n t r ( $10 , r ) ;
{ a l l o c a t e d e s c r i p t o r t o VGA memory q u i c k l y ; i t c o u l d be done
w i t h a l l o c a t e _ l d t _ d e s c r i p t o r s ( ) too , b u t we would have t o
i n i t i a l i z e i t by o u r s e l v e s . . . u n l i k e s e g m e n t _ t o _ d e s c r i p t o r ( )
which a u t o m a t i c a l l y s e t s t h e l i m i t and t h e base address
correctly }
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 i m p l y f i l l t h e screen memory w i t h c o l o r 15 }
s e g _ f i l l c h a r ( vgasel , 0 , 64000 , # 1 5 ) ;
{ w a i t f o r a r e t u r n press }
readln ;
{ back t o t e x t mode }
r . eax : = $3 ; r e a l i n t r ( $10 , r ) ;
{ don ' t d e a l l o c a t e vgasel , t h a t can ' t be done }
end .
54.19.51 seg_fillword
Synopsis: Fill segment with word value
Declaration: procedure seg_fillword(seg: Word; ofs: LongInt; count: LongInt; w: Word)
Visibility: default
Description: Sets a memory area to a specific value.
Parameters:
818
CHAPTER 54. REFERENCE FOR UNIT ’GO32’
54.19.52 seg_move
Synopsis: Move data between 2 locations
ssegsource selector.
sourcesource offset.
dsegdestination selector.
destdestination offset.
countsize in bytes to copy.
54.19.53 set_descriptor_access_right
Synopsis: Set access rights to memory descriptor
Declaration: function set_descriptor_access_right(d: Word; w: Word) : Boolean
Visibility: default
54.19.54 set_exception_handler
Synopsis: Set exception handler
Declaration: function set_exception_handler(e: Byte; const intaddr: tseginfo)
: Boolean
Visibility: default
Description: set_exception_handler sets the exception handler for exception E to intaddr. It returns
True if the call was successful, False if not.
819
CHAPTER 54. REFERENCE FOR UNIT ’GO32’
54.19.55 set_page_attributes
Synopsis: ? No description available
Declaration: function set_page_attributes(handle: DWord; offset: DWord;
pagecount: DWord; buf: pointer) : Boolean
Visibility: default
54.19.56 set_pm_exception_handler
Synopsis: Set protected mode exception handler
Declaration: function set_pm_exception_handler(e: Byte; const intaddr: tseginfo)
: Boolean
Visibility: default
Description: set_pm_exception_handler sets the protected mode exception handler for exception E to
intaddr. It returns True if the call was successful, False if not.
See also: set_exception_handler (819), get_pm_exception_handler (801)
54.19.57 set_pm_interrupt
Synopsis: Set protected mode interrupt handler
Declaration: function set_pm_interrupt(vector: Byte; const intaddr: tseginfo)
: Boolean
Visibility: default
Description: Sets the address of the protected mode handler for an interrupt.
Parameters:
Listing: ./go32ex/intpm.pp
{ T h i s example shows how t o r e d i r e c t a s o f t w a r e i n t e r r u p t by
changing t h e p r o t e c t e d mode h a n d l e r o f t h e DPMI h o s t .
uses
820
CHAPTER 54. REFERENCE FOR UNIT ’GO32’
crt ,
go32 ;
const
{ i n t e r r u p t number we want t o hook }
i n t 1 c = $1c ;
var
{ 48 b i t p o i n t e r to old i n t e r r u p t handler }
oldint1c : tseginfo ;
{ 48 b i t p o i n t e r t o new i n t e r r u p t h a n d l e r }
newint1c : tseginfo ;
{ i n c r e a s e d every t i m e t h e i n t e r r u p t i s c a l l e d }
int1c_counter : Longint ;
{ t h e c u r r e n t data s e l e c t o r }
i n t 1 c _ d s : Word ; e x t e r n a l name ' _ _ _ v 2 p r t 0 _ d s _ a l i a s ' ;
{ t h e a c t u a l h a n d l e r code }
procedure i n t 1 c _ h a n d l e r ; assembler ;
asm
cli
{ save a l l r e g i s t e r s }
pushw %ds
pushw %ax
{ prepare segment r e g i s t e r s f o r FPC procedure }
movw %cs : i n t 1 c _ d s , %ax
movw %ax , %ds
{ s i m p l y i n c r e a s e t h e c o u n t e r by one }
i n c l int1c_counter
{ restore registers }
popw %ax
popw %ds
sti
iret
end ;
var i : L o n g i n t ;
begin
{ i n s e r t r i g h t h a n d l e r data i n t o new h a n d l e r v a r i a b l e }
newint1c . o f f s e t : = @int1c_handler ;
newint1c . segment : = get_cs ;
{ get the old handler }
get_pm_interrupt ( int1c , oldint1c ) ;
W r i t e l n ( '−− Press any key t o e x i t −− ' ) ;
{ s e t new h a n d l e r }
s e t _ p m _ i n t e r r u p t ( i n t 1 c , newint1c ) ;
{ w r i t e t h e number o f i n t e r r u p t s o c c u r r e d }
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 o c c u r r e d : ' , i n t 1 c _ c o u n t e r ) ;
end ;
{ restore old handler }
set_pm_interrupt ( int1c , oldint1c ) ;
end .
821
CHAPTER 54. REFERENCE FOR UNIT ’GO32’
54.19.58 set_rm_interrupt
Synopsis: Set real mode interrupt handler
Declaration: function set_rm_interrupt(vector: Byte; const intaddr: tseginfo)
: Boolean
Visibility: default
Description: Sets a real mode interrupt handler.
Parameters:
54.19.59 set_segment_base_address
Synopsis: Set descriptor’s base address
Declaration: function set_segment_base_address(d: Word; s: DWord) : Boolean
Visibility: default
Description: Sets the 32-bit linear base address of a descriptor.
Parameters:
dselector.
snew base address of the descriptor.
54.19.60 set_segment_limit
Synopsis: Set descriptor limit
Declaration: function set_segment_limit(d: Word; s: DWord) : Boolean
Visibility: default
Description: Sets the limit of a descriptor.
Parameters:
dselector.
snew limit of the descriptor.
822
CHAPTER 54. REFERENCE FOR UNIT ’GO32’
54.19.61 tb_offset
Synopsis: Return DOS transfer buffer offset
54.19.62 tb_segment
Synopsis: Return DOS transfer buffer segment
Declaration: function tb_segment : LongInt
Visibility: default
54.19.63 tb_size
Synopsis: Return DOS transfer memory buffer size
823
CHAPTER 54. REFERENCE FOR UNIT ’GO32’
54.19.64 transfer_buffer
Synopsis: Return offset of DOS transfer buffer
Errors: None.
See also: tb_size (823)
54.19.65 unlock_code
Synopsis: Unlock code segment
Declaration: function unlock_code(functionaddr: pointer; size: LongInt) : Boolean
Visibility: default
Description: Unlocks a memory range which resides in the code segment selector.
Parameters:
54.19.66 unlock_data
Synopsis: Unlock data segment
824
CHAPTER 54. REFERENCE FOR UNIT ’GO32’
54.19.67 unlock_linear_region
Synopsis: Unlock linear memory region
54.20 tdpmiversioninfo
tdpmiversioninfo = record
major : Byte;
minor : Byte;
flags
: Word;
cpu : Byte;
master_pic : Byte;
slave_pic : Byte;
end
$02H 80286
$03H 80386
$04H 80486
$05H- Newer than 80486
825
CHAPTER 54. REFERENCE FOR UNIT ’GO32’
54.21 tmeminfo
tmeminfo = record
available_memory : LongInt;
available_pages
: LongInt;
available_lockable_pages : LongInt;
linear_space
: LongInt;
unlocked_pages : LongInt;
available_physical_pages
: LongInt;
total_physical_pages : LongInt;
free_linear_space
: LongInt;
max_pages_in_paging_file : LongInt;
reserved0 : LongInt
;
reserved1 : LongInt;
reserved2 : LongInt;
end
54.22 tseginfo
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
826
Chapter 55
Name Page
BaseUnix 140
System 1331
55.2 Overview
The GPM unit implements an interface to libgpm, the console program for mouse handling. This
unit was created by Peter Vreman, and is only available on Linux.
When this unit is used, your program is linked to the C libraries, so you must take care of the C
library version. Also, it will only work with version 1.17 or higher of the libgpm library.
Bottom of area.
GPM_B_LEFT = 4
GPM_B_MIDDLE = 2
GPM_B_RIGHT = 1
827
CHAPTER 55. REFERENCE FOR UNIT ’GPM’
GPM_DOUBLE = 32
GPM_DOWN = 4
GPM_DRAG = 2
GPM_ENTER = 512
GPM_HARD = 256
GPM_LEAVE = 1024
GPM_LFT = 4
GPM_MAGIC = $47706D4C
GPM_MFLAG = 128
Motion flag.
GPM_MOVE = 1
GPM_NODE_CTL = GPM_NODE_DEV
Control socket
GPM_NODE_DEV = '/dev/gpmctl'
GPM_NODE_DIR = _PATH_VARRUN
828
CHAPTER 55. REFERENCE FOR UNIT ’GPM’
GPM_NODE_DIR_MODE = 0775
Mode of socket.
GPM_NODE_FIFO = '/dev/gpmdata'
FIFO name
GPM_NODE_PID = '/var/run/gpm.pid'
GPM_RGT = 8
GPM_SINGLE = 16
GPM_TOP = 1
Top of area.
GPM_TRIPLE = 64
GPM_UP = 8
_PATH_DEV = '/dev/'
_PATH_VARRUN = '/var/run/'
55.3.2 Types
Pgpmconnect = Pgpm_connect
Pgpmevent = Pgpm_event
829
CHAPTER 55. REFERENCE FOR UNIT ’GPM’
Pgpmroi = Pgpm_roi
Pgpm_connect = ^TGpm_connect
Pgpm_event = ^Tgpm_event
Pgpm_roi = ^Tgpm_roi
Tgpmconnect = Tgpm_connect
TGpmEtype = LongInt
Tgpmevent = Tgpm_event
TGpmMargin = LongInt
Tgpmroi = Tgpm_roi
55.3.3 Variables
gpm_current_roi : Pgpm_roi
gpm_handler : TGpmHandler
830
CHAPTER 55. REFERENCE FOR UNIT ’GPM’
gpm_roi : Pgpm_roi
gpm_roi_data : pointer
gpm_roi_handler : TGpmHandler
55.4.2 Gpm_AnySingle
Synopsis: Check whether event has a single click event.
Declaration: function Gpm_AnySingle(EventType: LongInt) : Boolean
Visibility: default
Description: Gpm_AnySingle returns True if EventType contains the GPM_SINGLE flag, False other-
wise.
Errors: None.
See also: Gpm_StrictSingle (836), Gpm_AnyDouble (831), Gpm_StrictDouble (836), Gpm_StrictTriple (836),
Gpm_AnyTriple (831)
55.4.3 Gpm_AnyTriple
Synopsis: Check whether event has a triple click event.
Declaration: function Gpm_AnyTriple(EventType: LongInt) : Boolean
Visibility: default
831
CHAPTER 55. REFERENCE FOR UNIT ’GPM’
Description: Gpm_AnySingle returns True if EventType contains the GPM_TRIPLE flag, False other-
wise.
Errors: None.
See also: Gpm_StrictSingle (836), Gpm_AnyDouble (831), Gpm_StrictDouble (836), Gpm_StrictTriple (836),
Gpm_AnySingle (831)
55.4.4 gpm_close
Synopsis: Close connection to GPM server.
Declaration: function gpm_close : LongInt
Visibility: default
Description: Gpm_Close closes the current connection, and pops the connection stack; this means that the
previous connection becomes active again.
The function returns -1 if the current connection is not the last one, and it returns 0 if the current
connection is the last one.
for an example, see Gpm_GetEvent (833).
Errors: None.
See also: Gpm_Open (834)
55.4.5 gpm_fitvalues
Synopsis: Change coordinates to fit physical screen.
Errors: None.
See also: Gpm_FitValuesM (832)
55.4.6 gpm_fitvaluesM
Synopsis: Change coordinates to fit margin.
832
CHAPTER 55. REFERENCE FOR UNIT ’GPM’
55.4.7 gpm_getevent
Synopsis: Get event from event queue.
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 ;
833
CHAPTER 55. REFERENCE FOR UNIT ’GPM’
Writeln ;
end ;
U n t i l ( Event . B u t t o n s and gpm_b_right ) < >0;
gpm_close ;
end .
55.4.8 gpm_getsnapshot
Synopsis: Return servers’ current image of mouse state.
Declaration: function gpm_getsnapshot(eptr: Pgpmevent) : LongInt
function gpm_getsnapshot(var eptr: Tgpmevent) : LongInt
Visibility: default
Description: Gpm_GetSnapshot returns the picture that the server has of the current situation in Event. This
call will not read the current situation from the mouse file descriptor, but returns a buffered version.
The function returns the number of mouse buttons, or -1 if this information is not available.
Errors: None.
See also: Gpm_GetEvent (833)
55.4.9 gpm_lowerroi
Synopsis: Lower a region of interest in the stack.
Declaration: function gpm_lowerroi(which: Pgpm_roi; after: Pgpm_roi) : Pgpm_roi
Visibility: default
Description: Gpm_LowerRoi lowers the region of interest which after after. If after is Nil, the region
of interest is moved to the bottom of the stack.
The return value is the new top of the region-of-interest stack.
Errors: None.
See also: Gpm_RaiseRoi (835), Gpm_PopRoi (835), Gpm_PushRoi (835)
55.4.10 gpm_open
Synopsis: Open connection to GPM server.
Declaration: function gpm_open(var conn: Tgpm_connect; flag: LongInt) : LongInt
Visibility: default
Description: Gpm_Open opens a new connection to the mouse server. The connection is described by the fields
of the conn record of type TGPMConnect (830).
if Flag is 0, then the application only receives events that come from its own terminal device. If it
is negative it will receive all events. If the value is positive then it is considered a console number to
which to connect.
The return value is -1 on error, or the file descriptor used to communicate with the client. Under an
X-Term the return value is -2.
for an example, see Gpm_GetEvent (833).
834
CHAPTER 55. REFERENCE FOR UNIT ’GPM’
55.4.11 gpm_poproi
Synopsis: Pop region of interest from the stack.
Errors: None.
See also: Gpm_RaiseRoi (835), Gpm_LowerRoi (834), Gpm_PushRoi (835)
55.4.12 gpm_pushroi
Synopsis: Push region of interest on the stack.
55.4.13 gpm_raiseroi
Synopsis: Raise region of interest in the stack.
Declaration: function gpm_raiseroi(which: Pgpm_roi; before: Pgpm_roi) : Pgpm_roi
Visibility: default
Description: Gpm_RaiseRoi raises the region of interestwhich till it is on top of region before. If before
is nil then the region is put on top of the stack. The returned value is the top of the stack.
Errors: None.
See also: Gpm_PushRoi (835), Gpm_PopRoi (835), Gpm_LowerRoi (834)
835
CHAPTER 55. REFERENCE FOR UNIT ’GPM’
55.4.14 gpm_repeat
Synopsis: Check for presence of mouse event.
Declaration: function gpm_repeat(millisec: LongInt) : LongInt
Visibility: default
Description: Gpm_Repeat returns 1 of no mouse event arrives in the next millisec miiliseconds, it returns 0
otherwise.
Errors: None.
See also: Gpm_GetEvent (833)
55.4.15 Gpm_StrictDouble
Synopsis: Check whether event contains only a double-click event.
Declaration: function Gpm_StrictDouble(EventType: LongInt) : Boolean
Visibility: default
Description: Gpm_StrictDouble returns true if EventType contains only a doubleclick event, False oth-
erwise.
Errors: None.
See also: Gpm_StrictSingle (836), Gpm_AnyTriple (831), Gpm_AnyDouble (831), Gpm_StrictTriple (836),
Gpm_AnySingle (831)
55.4.16 Gpm_StrictSingle
Synopsis: Check whether event contains only a single-click event.
Declaration: function Gpm_StrictSingle(EventType: LongInt) : Boolean
Visibility: default
Description: Gpm_StrictDouble returns True if EventType contains only a singleclick event, False
otherwise.
Errors: None.
See also: Gpm_AnyTriple (831), Gpm_StrictDouble (836), Gpm_AnyDouble (831), Gpm_StrictTriple (836),
Gpm_AnySingle (831)
55.4.17 Gpm_StrictTriple
Synopsis: Check whether event contains only a triple-click event.
Declaration: function Gpm_StrictTriple(EventType: LongInt) : Boolean
Visibility: default
Description: Gpm_StrictTriple returns true if EventType contains only a triple click event, False oth-
erwise.
Errors: None.
See also: Gpm_AnyTriple (831), Gpm_StrictDouble (836), Gpm_AnyDouble (831), Gpm_StrictSingle (836),
Gpm_AnySingle (831)
836
CHAPTER 55. REFERENCE FOR UNIT ’GPM’
55.5 Tgpm_connect
Tgpm_connect = record
eventMask : Word;
defaultMask : Word;
minMod : Word;
maxMod : Word;
pid : LongInt;
vc : LongInt;
end
55.6 Tgpm_event
Tgpm_event = record
buttons : Byte;
modifiers : Byte;
vc : Word
;
dx : Word;
dy : Word;
x : Word;
y : Word;
EventType :
TGpmEtype;
clicks : LongInt;
margin : TGpmMargin;
wdx : Word
;
wdy : Word;
end
55.7 Tgpm_roi
Tgpm_roi = record
xmin : Integer;
xmax : Integer;
ymin : Integer
;
ymax : Integer;
minmod : Word;
maxmod : Word;
eventmask
: Word;
owned : Word;
handler : TGpmHandler;
clientdata : pointer
;
837
CHAPTER 55. REFERENCE FOR UNIT ’GPM’
prev : Pgpm_roi;
next : Pgpm_roi;
end
838
Chapter 56
Name Page
System 1331
56.2 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 graph-
ical systems. The graph unit will allow to recompile old programs. They will work to some extent,
but if the application has heavy graphical needs, it’s recommended to use another set of graphical
routines, suited to the platform the program should work on.
839
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
Table 56.2:
Name Description
GetTextSettings (878) Get current text settings
InstallUserFont (881) Install a new font
OutText (882) Write text at current cursor position
OutTextXY (870) Write text at coordinates X,Y
RegisterBGIFont (884) Register a new font
SetTextJustify (887) Set text justification
SetTextStyle (887) Set text style
SetUserCharSize (888) Set text size
TextHeight (889) Calculate height of text
TextWidth (889) Calculate width of text
Table 56.3:
Name Description
Bar3D (871) Draw a filled 3D-style bar
Bar (871) Draw a filled rectangle
FloodFill (873) Fill starting from coordinate
FillEllipse (873) Draw a filled ellipse
FillPoly (873) Draw a filled polygon
GetFillPattern (875) Get current fill pattern
GetFillSettings (875) Get current fill settings
SetFillPattern (885) Set current fill pattern
SetFillStyle (885) Set current fill settings
840
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
Table 56.4:
Name Description
Arc (871) Draw an arc
Circle (868) Draw a complete circle
DrawPoly (872) Draw a polygon with N points
Ellipse (873) Draw an ellipse
GetArcCoords (874) Get arc coordinates
GetLineSettings (876) Get current line drawing settings
Line (870) Draw line between 2 points
LineRel (881) Draw line relative to current position
LineTo (882) Draw line from current position to absolute position
MoveRel (882) Move cursor relative to current position
MoveTo (882) Move cursor to absolute position
PieSlice (883) Draw a pie slice
PutPixel (870) Draw 1 pixel
Rectangle (883) Draw a non-filled rectangle
Sector (884) Draw a sector
SetLineStyle (886) Set current line drawing style
Table 56.5:
Name Description
GetBkColor (869) Get current background color
GetColor (874) Get current foreground color
GetDefaultPalette (874) Get default palette entries
GetMaxColor (876) Get maximum valid color
GetPaletteSize (878) Get size of palette for current mode
GetPixel (869) Get color of selected pixel
GetPalette (878) Get palette entry
SetAllPalette (870) Set all colors in palette
SetBkColor (870) Set background color
SetColor (885) Set foreground color
SetPalette (887) Set palette entry
SetRGBPalette (871) Set palette entry with RGB values
841
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
Table 56.6:
Name Description
ClearViewPort (869) Clear the current viewport
GetImage (869) Copy image from screen to memory
GetMaxX (877) Get maximum X coordinate
GetMaxY (877) Get maximum Y coordinate
GetX (879) Get current X position
GetY (879) Get current Y position
ImageSize (869) Get size of selected image
GetViewSettings (878) Get current viewport settings
PutImage (870) Copy image from memory to screen
SetActivePage (870) Set active video page
SetAspectRatio (884) Set aspect ratio for drawing routines
SetViewPort (888) Set current viewport
SetVisualPage (871) Set visual page
SetWriteMode (889) Set write mode for screen operations
Table 56.7:
Name Description
ClearDevice (872) Empty the graphics screen
CloseGraph (872) Finish drawing session, return to text mode
DetectGraph (872) Detect graphical modes
GetAspectRatio (874) Get aspect ratio of screen
GetModeRange (877) Get range of valid modes for current driver
GraphDefaults (1) Set defaults
GetDriverName (875) Return name of graphical driver
GetGraphMode (876) Return current or last used graphics mode
GetMaxMode (876) Get maximum mode for current driver
GetModeName (877) Get name of current mode
GraphErrorMsg (1) String representation of graphical error
GraphResult (1) Result of last drawing operation
InitGraph (880) Initialize graphics drivers
InstallUserDriver (881) Install a new driver
RegisterBGIDriver (883) Register a new driver
RestoreCRTMode (884) Go back to text mode
SetGraphMode (886) Set graphical mode
842
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
This can mean one of two things: either libvga and it’s 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 com-
pile 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:
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. It’s 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.
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;
843
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
D4bit = 13;
D6bit = 14; { 64 colors Half-brite mode - Amiga }
D8bit = 15;
D12bit = 16; { 4096 color modes HAM mode - Amiga }
D15bit = 17;
D16bit = 18;
D24bit = 19; { not yet supported }
D32bit = 20; { not yet supported }
D64bit = 21; { not yet supported }
lowNewDriver = 11;
highNewDriver = 21;
detectMode = 30000;
m320x200 = 30001;
m320x256 = 30002; { amiga resolution (PAL) }
m320x400 = 30003; { amiga/atari resolution }
m512x384 = 30004; { mac resolution }
m640x200 = 30005; { vga resolution }
m640x256 = 30006; { amiga resolution (PAL) }
m640x350 = 30007; { vga resolution }
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 shouldn’t interfere with the old ones.
The above constants can be used to set a certain color depth and resolution, 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 ;
844
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
uses graph ;
const
TheLine = 'We are now i n 640 x 480 x 256 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 640x480x256 }
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 ;
uses graph ;
const
TheLine = 'We are now i n 640 x 480 x 256 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 }
845
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
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 640x480 }
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 = 639) and ( getmaxy = 479) then
begin
found : = t r u e ;
break ;
end ;
end ;
i f not found then
CloseGraph ( ) ;
begin
w r i t e l n ( ' 640x480x256 i s n o t supported ! ' ) ;
halt (1)
end ;
{ We are now i n 640x480x256 }
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 ;
uses graph ;
const
{ C u r r e n t l y , o n l y 4 , 8 , 15 and 16 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 ' ) ;
846
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
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 }
getModeRange ( gd , low , high ) ;
append ( t ) ;
w r i t e ( t , gdnames [ gd ] ) ;
W r i t e l n ( t , ' : low modenr = ' , low , ' , h i g h modenr = ' , high ) ;
close ( t ) ;
{ I f h i g h i s −1,
no r e s o l u t i o n s are supported f o r t h i s b i t d e p t h }
i f high = −1 then
begin
append ( t ) ;
w r i t e l n ( t , ' No modes supported ! ' ) ;
writeln ( t ) ;
close ( t ) ;
end
else
{ E n t e r a l l supported r e s o l u t i o n s f o r t h i s b i t d e p t h
and w r i t e t h e i r c h a r a c t e r i s t i c s t o t h e f i l e }
f o r c : = low to high do
begin
append ( t ) ;
w r i t e l n ( t , ' t e s t i n g mode n r ' , c ) ;
close ( t ) ;
i n i t g r a p h ( gd , c , ' ' ) ;
res := g r a p h r e s u l t ;
append ( t ) ;
{ An e r r o r o c c u r r e d when e n t e r i n g t h e mode? }
i f r e s <> grok then
w r i t e l n ( t , grapherrormsg ( r e s ) )
else
begin
w r i t e ( t , ' maxx : ' , getmaxx , ' , maxy : ' , getmaxy ) ;
847
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
56.12 Requirements
The unit Graph exports functions and procedures for graphical output. It requires at least a VGA-
compatible Card or a VGA-Card with software-driver (min. 512Kb video memory).
848
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
BkSlashFill = 5
black = 0
blue = 1
BoldFont = 10
BottomText = 0
brown = 6
CenterLn = 2
CenterText = 1
CGA = 1
CGAC0 = 0
CGAC1 = 1
CGAC2 = 2
CGAC3 = 3
849
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
CGAHi = 4
ClipOff = False
ClipOn = True
Viewport clipping on
CloseDotFill = 11
CopyPut = 0
CurrentDriver = - 128
cyan = 3
D12bit = 16
D15bit = 17
D16bit = 18
D1bit = 11
D24bit = 19
D2bit = 12
850
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
D32bit = 20
D4bit = 13
D64bit = 21
D6bit = 14
D8bit = 15
darkgray = 8
DashedLn = 3
Default = 0
Default mode
DefaultFont = 0
Detect = 0
detectMode = 30000
DottedLn = 1
851
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
EGA = 3
EGA64 = 4
EGA64Hi = 1
EGA64Lo = 0
EGABlack = 0
EGABlue = 1
EGABrown = 20
EGACyan = 3
EGADarkgray = 56
EGAGreen = 2
EGAHi = 1
EGALightblue = 57
EGALightcyan = 59
852
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
EGALightgray = 7
EGALightgreen = 58
EGALightmagenta = 61
EGALightred = 60
EGALo = 0
EGAMagenta = 5
EGAMono = 5
EGAMonoHi = 3
EGARed = 4
EGAWhite = 63
EGAYellow = 62
EmptyFill = 0
EuroFont = 9
Font number: ?
853
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
G1024x768x16 = 30
G1024x768x16M = 25
G1024x768x16M32 = 36
G1024x768x256 = 12
G1024x768x32K = 23
G1024x768x64K = 24
G1152x864x16 = 38
G1152x864x16M = 42
G1152x864x16M32 = 43
G1152x864x256 = 39
854
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
G1152x864x32K = 40
G1152x864x64K = 41
G1280x1024x16 = 31
G1280x1024x16M = 28
G1280x1024x16M32 = 37
G1280x1024x256 = 13
G1280x1024x32K = 26
G1280x1024x64K = 27
G1600x1200x16 = 44
G1600x1200x16M = 48
G1600x1200x16M32 = 49
G1600x1200x256 = 45
G1600x1200x32K = 46
855
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
G1600x1200x64K = 47
G320x200x16 = 1
G320x200x16M = 16
G320x200x16M32 = 33
G320x200x256 = 5
G320x200x32K = 14
G320x200x64K = 15
G320x240x256 = 6
G320x400x256 = 7
G360x480x256 = 8
G640x200x16 = 2
G640x350x16 = 3
G640x480x16 = 4
856
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
G640x480x16M = 19
G640x480x16M32 = 34
G640x480x2 = 9
G640x480x256 = 10
G640x480x32K = 17
G640x480x64K = 18
G720x348x2 = 32
G800x600x16 = 29
G800x600x16M = 22
G800x600x16M32 = 35
G800x600x256 = 11
G800x600x32K = 20
G800x600x64K = 21
857
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
GothicFont = 4
green = 2
grError = - 11
grFileNotFound = - 3
grFontNotFound = - 8
grInvalidDriver = - 4
grInvalidFont = - 13
grInvalidFontNum = - 14
grInvalidMode = - 10
grInvalidVersion = - 18
grIOerror = - 12
grNoFloodMem = - 7
858
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
grNoFontMem = - 9
grNoInitGraph = - 1
grNoLoadMem = - 5
grNoScanMem = - 6
grNotDetected = - 2
grOk = 0
HatchFill = 7
HercMono = 7
HercMonoHi = 0
highNewDriver = 21
highNewMode = m2048x1536
HorizDir = 0
InterleaveFill = 9
859
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
LCOMFont = 8
Font number: ?
LeftText = 0
lightblue = 9
lightcyan = 11
lightgray = 7
lightgreen = 10
lightmagenta = 13
lightred = 12
LineFill = 2
lowNewDriver = 11
lowNewMode = m320x200
LowRes = 6
LtBkSlashFill = 6
860
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
LtSlashFill = 3
m1024x768 = detectMode + 12
m1280x1024 = detectMode + 13
m1600x1200 = detectMode + 14
m2048x1536 = detectMode + 15
m320x200 = detectMode + 1
m320x256 = detectMode + 2
m320x400 = detectMode + 3
m512x384 = detectMode + 4
m640x200 = detectMode + 5
m640x256 = detectMode + 6
m640x350 = detectMode + 7
m640x400 = detectMode + 8
861
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
m640x480 = detectMode + 9
m800x600 = detectMode + 10
m832x624 = detectMode + 11
magenta = 5
MaxColors = 255
maxsmallint = high(smallint)
MCGA = 2
MCGAC0 = 0
MCGAC1 = 1
MCGAC2 = 2
MCGAC3 = 3
MCGAHi = 5
MCGAMed = 4
862
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
NormalPut = 0
NormWidth = 1
NotPut = 4
OrPut = 2
red = 4
RightText = 2
SansSerifFont = 3
ScriptFont = 5
SimpleFont = 6
SlashFill = 4
SmallFont = 2
863
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
SolidFill = 1
SolidLn = 0
ThickWidth = 3
TopOff = False
Top off
TopOn = True
Top on
TopText = 2
TriplexFont = 1
TSCRFont = 7
UserBitLn = 4
UserCharSize = 0
UserFill = 12
VertDir = 1
VESA = 10
864
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
VGA = 9
VGAHi = 2
VGALo = 0
VGAMed = 1
white = 15
WideDotFill = 10
XHatchFill = 8
XORPut = 1
yellow = 14
56.13.2 Types
CircleProc = procedure(X: SmallInt; Y: SmallInt; Radius: Word)
clrviewproc = procedure
ColorType = Word
865
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
This is the standard putpixel routine used by all function drawing routines, it will use the viewport
settings, as well as clip, and use the current foreground color to plot the desired pixel.
Bit pattern used when drawing lines. Set bits are drawn.
GetBkColorProc is the procedure prototype for the GetBkColor (869) method handler in TMod-
eInfo (892). The function should return the color code of the background color.
This routine is used for FloodFill (873) It returns an entire screen scan line with a word for each pixel
in the scanline. Also handy for GetImage.
Procedure prototype, used when heap memory is freed by the graph routines.
866
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
Procedure prototype, used when heap memory is needed by the graph routines.
graph_float = single
The platform’s preferred floating point size for fast graph operations
initmodeproc = procedure
PCharsetTransTable = ^TCharsetTransTable
PModeInfo = ^TModeInfo
867
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
restorestateproc = procedure
savestateproc = procedure
Standard routine prototype to save the graphical state before a mode is set.
SetBkColorProc is the procedure prototype for the SetBkColor (870) method handler in TMod-
eInfo (892). The procedure gets passed the color code for the color to set as background color.
56.13.3 Variables
Circle : CircleProc
ClearViewPort : clrviewproc
868
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
Clears the current viewport. The current background color is used as filling color. The pointer is set
at (0,0).
DirectPutPixel : defpixelproc
GetBkColor : GetBkColorProc
GetImage : getimageproc
GetPixel : getpixelproc
GetRGBPalette : getrgbpaletteproc
GetScanLine : getscanlineproc
GraphFreeMemPtr : graphfreememprc
GraphGetMemPtr : graphgetmemprc
HLine : hlineproc
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
Line : lineproc
869
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
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
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
RestoreVideoState : restorestateproc
SaveVideoState : savestateproc
SetActivePage : setactivepageproc
SetAllPalette : SetAllPaletteProc
Sets the current palette to Palette. Palette is an untyped variable, usually pointing to a record
of type PaletteType
SetBkColor : SetBkColorProc
SetRGBPalette : setrgbpaletteproc
870
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
SetRGBPalette sets the ColorNr-th entry in the palette to the color with RGB-values Red,
Green Blue.
SetVisualPage : setvisualpageproc
VLine : vlineproc
56.14.2 Bar
Synopsis: Draw filled rectangle
Declaration: procedure Bar(x1: SmallInt; y1: SmallInt; x2: SmallInt; y2: SmallInt)
Visibility: default
Description: Draws a rectangle with corners at (X1,Y1) and (X2,Y2) and fills it with the current color and
fill-style.
Errors: None.
See also: Bar3D (871), Rectangle (883)
56.14.3 Bar3D
Synopsis: Draw filled 3-dimensional rectangle
Declaration: procedure Bar3D(x1: SmallInt; y1: SmallInt; x2: SmallInt; y2: SmallInt;
depth: Word; top: Boolean)
Visibility: default
Description: Bar3d draws a 3-dimensional Bar with corners at (X1,Y1) and (X2,Y2) and fills it with the
current color and fill-style. Depth specifies the number of pixels used to show the depth of the bar.
If Top is true; then a 3-dimensional top is drawn.
Errors: None.
See also: Bar (871), Rectangle (883)
871
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
56.14.4 ClearDevice
Synopsis: Clear the complete screen
Declaration: procedure ClearDevice
Visibility: default
Description: Clears the graphical screen (with the current background color), and sets the pointer at (0,0).
Errors: None.
See also: ClearViewPort (869), SetBkColor (870)
56.14.5 Closegraph
Synopsis: Close graphical system.
Declaration: procedure Closegraph
Visibility: default
Description: Closes the graphical system, and restores the screen modus which was active before the graphical
modus was activated.
Errors: None.
See also: InitGraph (880)
56.14.6 DetectGraph
Synopsis: Detect correct graphical driver to use
Declaration: procedure DetectGraph(var GraphDriver: SmallInt;
var GraphMode: SmallInt)
Visibility: default
Description: DetectGraph checks the hardware in the PC and determines the driver and screen-modus to
be used. These are returned in Driver and Modus, and can be fed to InitGraph. See the
InitGraph for a list of drivers and modi.
Errors: None.
See also: InitGraph (880)
56.14.7 DrawPoly
Synopsis: Draw a polygon
Declaration: procedure DrawPoly(NumPoints: Word; var polypoints)
Visibility: default
Description: DrawPoly draws a polygon with NumberOfPoints corner points, using the current color and
line-style. PolyPoints is an array of type PointType (891).
Errors: None.
See also: Bar (871), Bar3D (871), Rectangle (883)
872
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
56.14.8 Ellipse
Synopsis: Draw an ellipse
Declaration: procedure Ellipse(X: SmallInt; Y: SmallInt; stAngle: Word;
EndAngle: Word; XRadius: Word; YRadius: Word)
Visibility: default
Description: Ellipse draws part of an ellipse with center at (X,Y). XRadius and Yradius are the horizon-
tal and vertical radii of the ellipse. Start and Stop are the starting and stopping angles of the part
of the ellipse. They are measured counterclockwise from the X-axis (3 o’clock is equal to 0 degrees).
Only positive angles can be specified.
Errors: None.
See also: Arc (871), Circle (868), FillEllipse (873)
56.14.9 FillEllipse
Synopsis: Draw and fill an ellipse
Declaration: procedure FillEllipse(X: SmallInt; Y: SmallInt; XRadius: Word;
YRadius: Word)
Visibility: default
Description: Ellipse draws an ellipse with center at (X,Y). XRadius and Yradius are the horizontal and
vertical radii of the ellipse. The ellipse is filled with the current color and fill-style.
Errors: None.
See also: Arc (871), Circle (868), GetArcCoords (874), PieSlice (883), Sector (884)
56.14.10 FillPoly
Synopsis: Draw, close and fill a polygon
Declaration: procedure FillPoly(NumPoints: Word; var PolyPoints)
Visibility: default
Description: FillPoly draws a polygon with NumberOfPoints corner points and fills it using the current
color and line-style. PolyPoints is an array of type PointType.
Errors: None.
See also: Bar (871), Bar3D (871), Rectangle (883)
56.14.11 FloodFill
Synopsis: Fill an area with a given color
Declaration: procedure FloodFill(x: SmallInt; y: SmallInt; Border: ColorType)
Visibility: default
Description: Fills the area containing the point (X,Y), bounded by the color BorderColor.
Errors: None
See also: SetColor (885), SetBkColor (870)
873
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
56.14.12 GetArcCoords
Synopsis: Return coordinates of last drawn arc or ellipse.
Errors: None.
See also: Arc (871), Ellipse (873)
56.14.13 GetAspectRatio
Synopsis: Return screen resolution
Declaration: procedure GetAspectRatio(var Xasp: Word; var Yasp: Word)
Visibility: default
Description: GetAspectRatio determines the effective resolution of the screen. The aspect ration can then be
calculated as Xasp/Yasp.
Errors: None.
56.14.14 GetColor
Synopsis: Return current drawing color
Declaration: function GetColor : ColorType
Visibility: default
Description: GetColor returns the current drawing color (the palette entry).
Errors: None.
56.14.15 GetDefaultPalette
Synopsis: Return default palette
Declaration: procedure GetDefaultPalette(var Palette: PaletteType)
Visibility: default
874
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
56.14.16 GetDirectVideo
Synopsis: Determine whether direct video mode is active.
56.14.17 GetDriverName
Synopsis: Return current driver name
Declaration: function GetDriverName : string
Visibility: default
Description: GetDriverName returns a string containing the name of the current driver.
Errors: None.
See also: GetModeName (877), InitGraph (880)
56.14.18 GetFillPattern
Synopsis: Return current fill pattern
Errors: None
See also: SetFillPattern (885)
56.14.19 GetFillSettings
Synopsis: Return current fill settings
Declaration: procedure GetFillSettings(var Fillinfo: FillSettingsType)
Visibility: default
Description: GetFillSettings returns the current fill-settings in FillInfo
Errors: None.
875
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
56.14.20 GetGraphMode
Synopsis: Get current graphical modus
Errors: None.
See also: InitGraph (880)
56.14.21 GetLineSettings
Synopsis: Get current line drawing settings
Declaration: procedure GetLineSettings(var ActiveLineInfo: LineSettingsType)
Visibility: default
Description: GetLineSettings returns the current Line settings in LineInfo
Errors: None.
56.14.22 GetMaxColor
Synopsis: return maximum number of colors
Declaration: function GetMaxColor : ColorType
Visibility: default
Description: GetMaxColor returns the maximum color-number which can be set with SetColor. Contrary
to Turbo Pascal, this color isn’t always guaranteed to be white (for instance in 256+ color modes).
Errors: None.
56.14.23 GetMaxMode
Synopsis: Return biggest mode for the current driver
Declaration: function GetMaxMode : SmallInt
Visibility: default
Description: GetMaxMode returns the highest modus for the current driver.
Errors: None.
See also: InitGraph (880)
876
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
56.14.24 GetMaxX
Synopsis: Return maximal X coordinate
Errors: None.
See also: GetMaxY (877)
56.14.25 GetMaxY
Synopsis: Return maximal Y coordinate
Declaration: function GetMaxY : SmallInt
Visibility: default
Description: GetMaxY returns the maximum number of screen lines
Errors: None.
56.14.26 GetModeName
Synopsis: Return description a modus
Declaration: function GetModeName(ModeNumber: SmallInt) : string
Visibility: default
Description: GetModeName Returns a string with the name of modus Modus
Errors: None.
See also: GetDriverName (875), InitGraph (880)
56.14.27 GetModeRange
Synopsis: Return lowest and highest modus of current driver
Declaration: procedure GetModeRange(GraphDriver: SmallInt; var LoMode: SmallInt;
var HiMode: SmallInt)
Visibility: default
Description: GetModeRange returns the Lowest and Highest modus of the currently installed driver. If no
modes are supported for this driver, HiModus will be -1.
Errors: None.
See also: InitGraph (880)
877
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
56.14.28 GetPalette
Synopsis: Return current palette
Errors: None.
See also: GetPaletteSize (878), SetPalette (887)
56.14.29 GetPaletteSize
Synopsis: Return maximal number of entries in current palette
Declaration: function GetPaletteSize : SmallInt
Visibility: default
Description: GetPaletteSize returns the maximum number of entries in the current palette.
Errors: None.
56.14.30 GetTextSettings
Synopsis: Return current text style
Declaration: procedure GetTextSettings(var TextInfo: TextSettingsType)
Visibility: default
Description: GetTextSettings returns the current text style settings : The font, direction, size and placement
as set with SetTextStyle and SetTextJustify
Errors: None.
56.14.31 GetViewSettings
Synopsis: Return current viewport
Declaration: procedure GetViewSettings(var viewport: ViewPortType)
Visibility: default
Description: GetViewSettings returns the current viewport and clipping settings in ViewPort.
Errors: None.
See also: SetViewPort (888)
878
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
56.14.32 GetX
Synopsis: Return current cursor X position
Errors: None.
See also: GetY (879)
56.14.33 GetY
Synopsis: Return current cursor Y position
Declaration: function GetY : SmallInt
Visibility: default
Description: GetY returns the Y-coordinate of the current position of the graphical pointer
Errors: None.
56.14.34 GraphDefaults
Synopsis: Reset graphical mode to defaults
Declaration: procedure GraphDefaults
Visibility: default
Description: GraphDefaults resets all settings for viewport, palette, foreground and background pattern, line-
style and pattern, filling style, filling color and pattern, font, text-placement and text size.
Errors: None.
See also: SetViewPort (888), SetFillStyle (885), SetColor (885), SetBkColor (870), SetLineStyle (886)
56.14.35 GraphErrorMsg
Synopsis: Return a description of an error
Declaration: function GraphErrorMsg(ErrorCode: SmallInt) : string
Visibility: default
Description: GraphErrorMsg returns a string describing the error Errorcode. This string can be used to let
the user know what went wrong.
Errors: None.
See also: GraphResult (1)
879
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
56.14.36 GraphResult
Synopsis: Result of last graphical operation
Declaration: function GraphResult : SmallInt
Visibility: default
Description: GraphResult returns an error-code for the last graphical operation. If the returned value is zero,
all went well. A value different from zero means an error has occurred. besides all operations which
draw something on the screen, the following procedures also can produce a GraphResult different
from zero:
•InstallUserFont (881)
•SetLineStyle (886)
•SetWriteMode (889)
•SetFillStyle (885)
•SetTextJustify (887)
•SetGraphMode (886)
•SetTextStyle (887)
Errors: None.
See also: GraphErrorMsg (1)
56.14.37 InitGraph
Synopsis: Initialize graphical system
Declaration: procedure InitGraph(var GraphDriver: SmallInt; var GraphMode: SmallInt;
const PathToDriver: string)
Visibility: default
Description: InitGraph initializes the graph package. GraphDriver has two valid values: GraphDriver=0
which performs an auto detect and initializes the highest possible mode with the most colors. 1024x768x64K
is the highest possible resolution supported by the driver, if you need a higher resolution, you must
edit MODES.PPI. If you need another mode, then set GraphDriver to a value different from
zero and graphmode to the mode you wish (VESA modes where 640x480x256 is 101h etc.).
PathToDriver is only needed, if you use the BGI fonts from Borland. Free Pascal does not offer
BGI fonts like Borland, these must be obtained separately.
Example code:
var
gd,gm : integer;
PathToDriver : string;
begin
gd:=detect; { highest possible resolution }
gm:=0; { not needed, auto detection }
PathToDriver:='C:\PP\BGI'; { path to BGI fonts,
drivers aren't needed }
InitGraph(gd,gm,PathToDriver);
if GraphResult<>grok then
halt; ..... { whatever you need }
CloseGraph; { restores the old graphics mode }
end.
880
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
Errors: None.
See also: Modes (843), DetectGraph (872), CloseGraph (872), GraphResult (1)
56.14.38 InstallUserDriver
Synopsis: Install a user driver
Errors: None.
See also: InitGraph (880), InstallUserFont (881)
56.14.39 InstallUserFont
Synopsis: Install a user-defined font
Errors: None.
See also: InitGraph (880), InstallUserDriver (881)
56.14.40 LineRel
Synopsis: Draw a line starting from current position in given direction
Declaration: procedure LineRel(Dx: SmallInt; Dy: SmallInt)
Visibility: default
Description: LineRel draws a line starting from the current pointer position to the point(DX,DY), relative to
the current position, in the current line style and color. The Current Position is set to the endpoint of
the line.
Errors: None.
See also: Line (870), LineTo (882)
881
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
56.14.41 LineTo
Synopsis: Draw a line starting from current position to a given point
56.14.42 MoveRel
Synopsis: Move cursor relative to current position
Declaration: procedure MoveRel(Dx: SmallInt; Dy: SmallInt)
Visibility: default
Description: MoveRel moves the pointer to the point (DX,DY), relative to the current pointer position
Errors: None.
See also: MoveTo (882)
56.14.43 MoveTo
Synopsis: Move cursor to absolute position.
56.14.44 OutText
Synopsis: Write text on the screen at the current location.
Declaration: procedure OutText(const TextString: string)
Visibility: default
Description: OutText puts TextString on the screen, at the current pointer position, using the current font
and text settings. The current position is moved to the end of the text.
Errors: None.
882
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
56.14.45 PieSlice
Synopsis: Draw a pie-slice
56.14.46 queryadapterinfo
Synopsis: Function called to retrieve the current video adapter settings.
Declaration: function queryadapterinfo : PModeInfo
Visibility: default
56.14.47 Rectangle
Synopsis: Draw a rectangle on the screen.
Declaration: procedure Rectangle(x1: SmallInt; y1: SmallInt; x2: SmallInt;
y2: SmallInt)
Visibility: default
Description: Draws a rectangle with corners at (X1,Y1) and (X2,Y2), using the current color and style.
Errors: None.
See also: Bar (871), Bar3D (871)
56.14.48 RegisterBGIDriver
Synopsis: Register a new BGI driver.
Errors: None.
See also: InstallUserDriver (881), RegisterBGIFont (884)
883
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
56.14.49 RegisterBGIfont
Synopsis: Register a new BGI font
Errors: None.
See also: InstallUserFont (881), RegisterBGIDriver (883)
56.14.50 RestoreCrtMode
Synopsis: Restore text screen
Declaration: procedure RestoreCrtMode
Visibility: default
Description: Restores the screen modus which was active before the graphical modus was started.
To get back to the graph mode you were last in, you can use SetGraphMode(GetGraphMode)
Errors: None.
See also: InitGraph (880)
56.14.51 Sector
Synopsis: Draw and fill a sector of an ellipse
Declaration: procedure Sector(x: SmallInt; y: SmallInt; StAngle: Word;
EndAngle: Word; XRadius: Word; YRadius: Word)
Visibility: default
Description: Sector draws and fills a sector of an ellipse with center (X,Y) and radii XRadius and YRadius,
starting at angle Start and ending at angle Stop.
Errors: None.
See also: Arc (871), Circle (868), PieSlice (883)
56.14.52 SetAspectRatio
Synopsis: Set aspect ration of the screen
884
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
56.14.53 SetColor
Synopsis: Set foreground drawing color
Declaration: procedure SetColor(Color: ColorType)
Visibility: default
Description: Sets the foreground color to Color.
Errors: None.
See also: GetColor (874), SetBkColor (870), SetWriteMode (889)
56.14.54 SetDirectVideo
Synopsis: Attempt to enter direct video mode.
Declaration: procedure SetDirectVideo(DirectAccess: Boolean)
Visibility: default
Description: SetDirectVideo attempts to enter direct video mode. In that mode, everything is drawn straight
in the video buffer.
56.14.55 SetFillPattern
Synopsis: Set drawing fill pattern
Declaration: procedure SetFillPattern(Pattern: FillPatternType; Color: ColorType)
Visibility: default
Description: SetFillPattern sets the current fill-pattern to FillPattern, and the filling color to Color
The pattern is an 8x8 raster, corresponding to the 64 bits in FillPattern.
Errors: None
See also: GetFillPattern (875), SetFillStyle (885), SetWriteMode (889)
56.14.56 SetFillStyle
Synopsis: Set drawing fill style
Declaration: procedure SetFillStyle(Pattern: Word; Color: ColorType)
Visibility: default
Description: SetFillStyle sets the filling pattern and color to one of the predefined filling patterns. Pattern
can be one of the following predefined constants :
EmptyFillUses backgroundcolor.
SolidFillUses filling color
LineFillFills with horizontal lines.
ltSlashFillFills with lines from left-under to top-right.
SlashFillIdem as previous, thick lines.
BkSlashFillFills with thick lines from left-Top to bottom-right.
885
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
Errors: None.
See also: SetFillPattern (885), SetWriteMode (889)
56.14.57 SetGraphMode
Synopsis: Set graphical mode
Errors: None.
See also: InitGraph (880)
56.14.58 SetLineStyle
Synopsis: Set line drawing style
Declaration: procedure SetLineStyle(LineStyle: Word; Pattern: Word; Thickness: Word)
Visibility: default
Description: SetLineStyle sets the drawing style for lines. You can specify a LineStyle which is one of
the following predefined constants:
If UserBitln is specified then Pattern contains the bit pattern. In all another cases, Pattern
is ignored. The parameter Width indicates how thick the line should be. You can specify one of the
following predefined constants:
Errors: None.
See also: GetLineSettings (876), SetWriteMode (889)
886
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
56.14.59 SetPalette
Synopsis: Set palette entry using color constant
Declaration: procedure SetPalette(ColorNum: Word; Color: ShortInt)
Visibility: default
Description: SetPalette changes the ColorNr-th entry in the palette to NewColor
Errors: None.
See also: SetAllPalette (870), SetRGBPalette (871)
56.14.60 SetTextJustify
Synopsis: Set text placement style
Declaration: procedure SetTextJustify(horiz: Word; vert: Word)
Visibility: default
Description: SetTextJustify controls the placement of new text, relative to the (graphical) cursor position.
Horizontal controls horizontal placement, and can be one of the following predefined constants:
Vertical controls the vertical placement of the text, relative to the (graphical) cursor position. Its
value can be one of the following predefined constants :
Errors: None.
See also: OutText (882), OutTextXY (870)
56.14.61 SetTextStyle
Synopsis: Set text style
Declaration: procedure SetTextStyle(font: Word; direction: Word; charsize: Word)
Visibility: default
Description: SetTextStyle controls the style of text to be put on the screen. predefined constants for Font
are:
887
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
HorizDirWrite horizontal
VertDirWrite vertical
Errors: None.
56.14.62 SetUserCharSize
Synopsis: Set user character size for vector font
Declaration: procedure SetUserCharSize(Multx: Word; Divx: Word; Multy: Word;
Divy: Word)
Visibility: default
Description: Sets the width and height of vector-fonts. The horizontal size is given by Xasp1/Xasp2, and the
vertical size by Yasp1/Yasp2.
Errors: None.
56.14.63 SetViewPort
Synopsis: Set the graphical drawing window
Declaration: procedure SetViewPort(X1: SmallInt; Y1: SmallInt; X2: SmallInt;
Y2: SmallInt; Clip: Boolean)
Visibility: default
Description: Sets the current graphical viewport (window) to the rectangle defined by the top-left corner (X1,Y1)
and the bottom-right corner (X2,Y2). If Clip is true, anything drawn outside the viewport (win-
dow) will be clipped (i.e. not drawn). Coordinates specified after this call are relative to the top-left
corner of the viewport.
Errors: None.
See also: GetViewSettings (878)
888
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
56.14.64 SetWriteMode
Synopsis: Specify binary operation to perform when drawing on screen
Declaration: procedure SetWriteMode(WriteMode: SmallInt)
Visibility: default
Description: SetWriteMode controls the drawing of lines on the screen. It controls the binary operation used
when drawing lines on the screen. Mode can be one of the following predefined constants:
Errors: None.
See also: SetColor (885), SetBkColor (870), SetLineStyle (886), SetFillStyle (885)
56.14.65 SetWriteModeEx
Synopsis: Set write mode (extended version)
Declaration: procedure SetWriteModeEx(WriteMode: SmallInt)
Visibility: default
Description: SetWriteModeEx sets the graph write mode similar to SetWriteMode (889) but only if the
WriteMode is in the range CopyPut..NotPut. If the provided value is outside this range, it
is not set.
See also: SetWriteMode (889)
56.14.66 TextHeight
Synopsis: Return height (in pixels) of the given string
Declaration: function TextHeight(const TextString: string) : Word
Visibility: default
Description: TextHeight returns the height (in pixels) of the string S in the current font and text-size.
Errors: None.
See also: TextWidth (889)
56.14.67 TextWidth
Synopsis: Return width (in pixels) of the given string
Declaration: function TextWidth(const TextString: string) : Word
Visibility: default
Description: TextHeight returns the width (in pixels) of the string S in the current font and text-size.
Errors: None.
See also: TextHeight (889)
889
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
56.15 ArcCoordsType
ArcCoordsType = record
x : SmallInt;
y : SmallInt;
xstart :
SmallInt;
ystart : SmallInt;
xend : SmallInt;
yend : SmallInt
;
end
56.16 FillSettingsType
FillSettingsType = record
pattern : Word;
color : ColorType;
end
56.17 LineSettingsType
LineSettingsType = record
linestyle : Word;
pattern : Word;
thickness : Word;
end
56.18 PaletteType
PaletteType = record
Size : LongInt;
Colors : Array[0..MaxColors
] of RGBRec;
end
56.19 PointType
PointType = record
890
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
x : SmallInt;
y : SmallInt;
end
56.20 RGBRec
RGBRec = packed record
Red : SmallInt;
Green : SmallInt;
Blue
: SmallInt;
end
56.21 TextSettingsType
TextSettingsType = record
font : Word;
direction : Word;
charsize
: Word;
horiz : Word;
vert : Word;
end
56.22 TModeInfo
TModeInfo = record
DriverNumber : SmallInt;
ModeNumber : SmallInt
;
internModeNumber : SmallInt;
MaxColor : LongInt;
PaletteSize
: LongInt;
XAspect : Word;
YAspect : Word;
MaxX : Word;
MaxY
: Word;
DirectColor : Boolean;
Hardwarepages : Byte;
ModeName
891
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
: string;
DirectPutPixel : defpixelproc;
GetPixel : getpixelproc
;
PutPixel : putpixelproc;
SetRGBPalette : setrgbpaletteproc;
GetRGBPalette : getrgbpaletteproc;
SetAllPalette : SetAllPaletteProc
;
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.23 TResolutionRec
TResolutionRec = record
x : LongInt;
y : LongInt;
end
56.24 ViewPortType
ViewPortType = record
x1 : SmallInt;
892
CHAPTER 56. REFERENCE FOR UNIT ’GRAPH’
y1 : SmallInt;
x2 : SmallInt
;
y2 : SmallInt;
Clip : Boolean;
end
893
Chapter 57
Name Page
System 1331
57.2 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.
Do not use this unit directly, instead use the -gh switch, to let the compiler insert the unit in the uses
clause.
keepreleased If this string occurs, then the KeepReleased (896) variable is set to True
disabled If this string occurs, then the UseHeapTrace (897) variable is set to False and the heap
trace is disabled. It does not make sense to combine this value with other values.
894
CHAPTER 57. REFERENCE FOR UNIT ’HEAPTRC’
nohalt If this string occurs, then the HaltOnError (896) 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 (900))
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.
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:
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
Compile t h i s program w i t h t h e −gh command−l i n e o p t i o n
}
895
CHAPTER 57. REFERENCE FOR UNIT ’HEAPTRC’
Var P1 : ^ L o n g i n t ;
P2 : P o i n t e r ;
I : longint ;
begin
{ $IF NOT DECLARED( h e a p t r c ) }
{$ERROR You mmust compile t h i s program w i t h −gh }
{ $ENDIF }
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 de−a l l o c a t e d
New( P1 ) ;
Dispose ( P1 ) ;
For I :=1 to 10 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
/ / 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 .
If add\_tail is True (the default) then a check is also performed on the memory location just
behind the allocated memory.
GlobalSkipIfNoLeaks will, when set to true, disable the output of the heaptrc unit if no
memory leaks will detected, i.e. there will only be output if there were actual memory leaks.
If HaltOnError is set to True then an illegal call to FreeMem will cause the memory manager
to execute a halt(1) instruction, causing a memory dump. By Default it is set to True.
HaltOnNotReleased can be set to True to make the DumpHeap (898) procedure halt (exit
code 203) the program if any memory was not released when the dump is made. If it is False (the
default) then DumpHeap just returns.
If keepreleased is set to true, then a list of freed memory blocks is kept. This is useful if you
suspect that the same memory block is released twice. However, this option is very memory intensive,
so use it sparingly, and only when it’s really necessary.
896
CHAPTER 57. REFERENCE FOR UNIT ’HEAPTRC’
printleakedblock can be set to True to print a memory dump of faulty memory blocks (in case
a memory override occurs) The block is printed as a series of hexadecimal numbers, representing the
bytes in the memory block. At most maxprintedblocklength (897) bytes of the memory block will be
printed.
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 (897) bytes
of the memory block will be printed.
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.
This is the size of the tail block added to every memory block when add_tail (896) is True.
tracesize = 16
Tracesize specifies how many levels of calls are displayed of the call stack during the mem-
ory 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 will be dumped for the FreeMem call. If you want to change this
value, you must recode the heaptrc unit.
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.
This variable must be set at program startup, through the help of an environment variable.
897
CHAPTER 57. REFERENCE FOR UNIT ’HEAPTRC’
57.5.2 Types
tdisplayextrainfoProc = procedure(var ptext: text; p: pointer)
The TFillExtraInfoProc is a procedural type used in the SetHeapExtraInfo (898) call to fill a
memory location with extra data for displaying.
57.6.2 DumpHeap
Synopsis: Dump memory usage report to stderr.
Declaration: procedure DumpHeap
procedure DumpHeap(SkipIfNoLeaks: Boolean)
Visibility: default
Description: DumpHeap dumps to standard output a summary of memory usage. It is called automatically by
the heaptrc unit when your program exits (by installing an exit procedure), but it can be called at any
time.
Errors: None.
57.6.3 SetHeapExtraInfo
Synopsis: Store extra information in blocks.
Declaration: procedure SetHeapExtraInfo(size: PtrUInt; fillproc: tFillExtraInfoProc;
displayproc: tdisplayextrainfoProc)
Visibility: default
Description: You can use SetHeapExtraInfo to store extra info in the blocks that the heaptrc unit reserves
when tracing getmem calls. Size indicates the size (in bytes) that the trace mechanism should
reserve for your extra information. For each call to getmem, FillProc will be called, and passed
a pointer to the memory reserved.
When dumping the memory summary, the extra info is shown by calling displayproc and passing
it the memory location which was filled by fillproc. It should write the information in readable
form to the text file provided in the call to displayproc
898
CHAPTER 57. REFERENCE FOR UNIT ’HEAPTRC’
Errors: You can only call SetHeapExtraInfo if no memory has been allocated yet. If memory was
already allocated prior to the call to SetHeapExtraInfo, then an error will be displayed on
standard error output, and a DumpHeap (898) is executed.
See also: DumpHeap (898), SetHeapTraceOutput (900)
Listing: ./heapex/setinfo.pp
Program heapex ;
Uses h e a p t r c ;
Var P1 : ^ L o n g i n t ;
P2 : P o i n t e r ;
I : longint ;
Marker : L o n g i n t ;
Procedure SetMarker (P : p o i n t e r ) ;
Type PLongint = ^ L o n g i n t ;
begin
PLongint (P ) ^ : = Marker ;
end ;
Procedure Part1 ;
begin
/ / Blocks a l l o c a t e d here are marked w i t h $FFAAFFAA = −5570646
Marker : = $FFAAFFAA ;
New( P1 ) ;
New( P1 ) ;
Dispose ( P1 ) ;
For I :=1 to 10 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 10 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 ;
899
CHAPTER 57. REFERENCE FOR UNIT ’HEAPTRC’
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.6.4 SetHeapTraceOutput
Synopsis: Specify filename for heap trace output.
Declaration: procedure SetHeapTraceOutput(const name: string); Overload
procedure SetHeapTraceOutput(var ATextOutput: Text); Overload
Visibility: default
Description: SetHeapTraceOutput sets the filename into which heap trace info will be written. By default
information is written to standard output, this function allows you to redirect the information to a file
with full filename name.
Errors: If the file cannot be written to, errors will occur when writing the trace.
900
Chapter 58
Name Page
BaseUnix 140
System 1331
unixtype 2087
58.2 Overview
This document describes the IPC unit for Free Pascal. It was written for Linux by Michael Van
Canneyt. It gives all the functionality of System V Inter-Process Communication: shared memory,
semaphores and messages. It works only on the Linux operating system.
Many constants here are provided for completeness only, and should under normal circumstances not
be used by the programmer.
IPC_EXCL = 2 shl 9
IPC_INFO = 3
901
CHAPTER 58. REFERENCE FOR UNIT ’IPC’
IPC_NOWAIT = 4 shl 9
IPC_PRIVATE = TKey(0)
IPC_RMID = 0
Remove resource
IPC_SET = 1
IPC_STAT = 2
MSGMAX = 4056
MSGMNB = 16384
MSGMNI = 128
MSG_EXCEPT = 2 shl 12
MSG_NOERROR = 1 shl 12
SEM_GETALL = 13
SEM_GETNCNT = 14
SEM_GETPID = 11
902
CHAPTER 58. REFERENCE FOR UNIT ’IPC’
SEM_GETVAL = 12
SEM_GETZCNT = 15
Semaphore operation: Get number of processes waiting for semaphores to reach zero
SEM_SEMMNI = 128
Semaphore operation: ?
Semaphore operation: ?
SEM_SEMMSL = 32
Semaphore operation: ?
SEM_SEMOPM = 32
Semaphore operation: ?
SEM_SEMVMX = 32767
Semaphore operation: ?
SEM_SETALL = 17
SEM_SETVAL = 16
SEM_UNDO = $1000
SHM_LOCK = 11
SHM_R = 4 shl 6
SHM_RDONLY = 1 shl 12
903
CHAPTER 58. REFERENCE FOR UNIT ’IPC’
SHM_REMAP = 4 shl 12
SHM_RND = 2 shl 12
SHM_UNLOCK = 12
SHM_W = 2 shl 6
58.3.2 Types
key_t = TKey
msglen_t = culong
msgqnum_t = culong
PIPC_Perm = ^TIPC_Perm
PMSG = ^TMSG
PMSGbuf = ^TMSGbuf
PMSQid_ds = ^TMSQid_ds
PSEMbuf = ^TSEMbuf
904
CHAPTER 58. REFERENCE FOR UNIT ’IPC’
PSEMid_ds = ^TSEMid_ds
PSEMinfo = ^TSEMinfo
PSEMun = ^TSEMun
PShmid_DS = ^TShmid_ds
PSHM_info = ^TSHM_info
TKey = cint
TSEMun = record
case cint of
0: (
val : cint;
);
1: (
buf : PSEMid_ds
;
);
2: (
arr : PWord;
);
3: (
padbuf : PSEMinfo;
);
4: (
padpad
: pointer;
);
end
905
CHAPTER 58. REFERENCE FOR UNIT ’IPC’
58.4.2 msgctl
Synopsis: Perform various operations on a message queue
Declaration: function msgctl(msqid: cint; cmd: cint; buf: PMSQid_ds) : cint
Visibility: default
Description: msgctl performs various operations on the message queue with id ID. Which operation is per-
formed, depends on the cmd parameter, which can have one of the following values:
IPC_STATIn this case, the msgctl call fills the TMSQid_ds structure with information about the
message queue.
IPC_SETin this case, the msgctl call sets the permissions of the queue as specified in the ipc_perm
record inside buf.
IPC_RMIDIf this is specified, the message queue will be removed from the system.
buf contains the data that are needed by the call. It can be Nil in case the message queue should
be removed.
The function returns True if success full, False otherwise.
Errors: On error, False is returned, and IPCerror is set accordingly.
See also: msgget (908), msgsnd (909), msgrcv (909)
Listing: ./ipcex/msgtool.pp
program msgtool ;
Uses i p c , baseunix ;
Type
PMyMsgBuf = ^TMyMsgBuf ;
TMyMsgBuf = record
mtype : Longint ;
mtext : string [ 2 5 5 ] ;
end ;
begin
W r i t e l n ( msg , ' r e t u r n e d an e r r o r : ' , fpgeterrno ) ;
906
CHAPTER 58. REFERENCE FOR UNIT ’IPC’
halt ( 1 ) ;
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 ;
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 ( ' Usage : msgtool s ( end ) <type > < t e x t > ( max 255 c h a r a c t e r s ) ' ) ;
Writeln ( ' r ( e c e i v e ) <type > ' ) ;
Writeln ( ' d( elete ) ' ) ;
Writeln ( ' m( ode ) <decimal mode> ' ) ;
907
CHAPTER 58. REFERENCE FOR UNIT ’IPC’
halt ( 1 ) ;
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 ) ;
S t r T o I n t : =M;
end ;
Var
Key : TKey ;
ID : l o n g i n t ;
Buf : TMyMsgBuf ;
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
Synopsis: Return message queue ID, possibly creating the queue
Declaration: function msgget(key: TKey; msgflg: cint) : cint
Visibility: default
Description: msgget returns the ID of the message queue described by key. Depending on the flags in msgflg,
a new queue is created.
908
CHAPTER 58. REFERENCE FOR UNIT ’IPC’
msgflg can have one or more of the following values (combined by ORs):
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 (906).
Errors: On error, -1 is returned, and IPCError is set.
See also: ftok (905), msgsnd (909), msgrcv (909), msgctl (906)
58.4.4 msgrcv
Synopsis: Retrieve a message from the queue
Declaration: function msgrcv(msqid: cint; msgp: PMSGbuf; msgsz: size_t;
msgtyp: clong; msgflg: cint) : cint
Visibility: default
Description: msgrcv retrieves a message of type msgtyp from the message queue with ID msqid. msgtyp
corresponds to the mtype field of the TMSGbuf record. The message is stored in the MSGbuf
structure pointed to by msgp.
The msgflg parameter can be used to control the behaviour of the msgrcv call. It consists of an
ORed combination of the following flags:
The function returns True if the message was received correctly, False otherwise.
For an example, see msgctl (906).
Errors: In case of error, False is returned, and IPCerror is set.
See also: msgget (908), msgsnd (909), msgctl (906)
58.4.5 msgsnd
Synopsis: Send a message to the message queue
Declaration: function msgsnd(msqid: cint; msgp: PMSGbuf; msgsz: size_t; msgflg: cint)
: cint
Visibility: default
Description: msgsend sends a message to a message queue with ID msqid. msgp is a pointer to a message
buffer, that should be based on the TMsgBuf type. msgsiz is the size of the message (NOT of the
message buffer record !)
The msgflg can have a combination of the following values (ORed together):
909
CHAPTER 58. REFERENCE FOR UNIT ’IPC’
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 (906).
Errors: In case of error, the call returns False, and IPCerror is set.
58.4.6 semctl
Synopsis: Perform various control operations on a semaphore set
Declaration: function semctl(semid: cint; semnum: cint; cmd: cint; var arg: TSEMun)
: cint
Visibility: default
Description: semctl performs various operations on the semaphore semnum w ith semaphore set id ID.
The arg parameter supplies the data needed for each call. This is a variant record that should be
filled differently, according to the command:
Type
TSEMun = record
case longint of
0 : ( val : longint );
1 : ( buf : PSEMid_ds );
2 : ( arr : PWord );
3 : ( padbuf : PSeminfo );
4 : ( padpad : pointer );
end;
Which operation is performed, depends on the cmd parameter, which can have one of the following
values:
IPC_STATIn this case, the arg record should have it’s buf field set to the address of a TSEMid_ds
record. The semctl call fills this TSEMid_ds structure with information about the semaphore
set.
IPC_SETIn this case, the arg record should have it’s buf field set to the address of a TSEMid_ds
record. The semctl call sets the permissions of the queue as specified in the ipc_perm
record.
IPC_RMIDIf this is specified, the semaphore set is removed from from the system.
GETALLIn this case, the arr field of arg should point to a memory area where the values of the
semaphores will be stored. The size of this memory area is SizeOf(Word) * Number of
semaphores in the set. This call will then fill the memory array with all the values of
the semaphores.
GETNCNTThis will fill the val field of the arg union with the number of processes waiting for
resources.
GETPIDsemctl returns the process ID of the process that performed the last semop (915) call.
GETVALsemctl returns the value of the semaphore with number semnum.
910
CHAPTER 58. REFERENCE FOR UNIT ’IPC’
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 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.
Listing: ./ipcex/semtool.pp
Program semtool ;
Uses i p c , baseunix ;
Const MaxSemValue = 5 ;
Var S : TSEMun ;
begin
GetSemVal : = SemCtl ( i d , member , SEM_GETVAL, S ) ;
end ;
begin
w r i t e l n ( ' Value f o r member ' ,member , ' i s ' , GetSemVal ( ID , Member ) ) ;
end ;
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;
911
CHAPTER 58. REFERENCE FOR UNIT ’IPC’
end ;
begin
OpenSem: = semget ( Key , 0 , 4 3 8 ) ;
I f OpenSem=−1 then
DoError ( 'OpenSem ' ) ;
end ;
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 Members−1 do
s e m c t l ( CreateSem , count , SEM_SETVAL, semopts ) ;
end ;
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 ;
begin
912
CHAPTER 58. REFERENCE FOR UNIT ’IPC’
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 ;
Var r c : l o n g i n t ;
o p t s : TSEMun ;
semds : TSEMid_ds ;
begin
o p t s . b u f : =@semds ;
I f not s e m c t l ( Id , 0 , IPC_STAT , o p t s )<>−1 then
DoError ( ' Couldn ' ' t s t a t semaphore ' ) ;
W r i t e l n ( ' Old p e r m i s s i o n s were : ' , semds . sem_perm . mode ) ;
semds . sem_perm . mode: =mode ;
I f s e m c t l ( i d , 0 , IPC_SET , o p t s )<>−1 then
W r i t e l n ( ' Set p e r m i s s i o n s t o ' ,mode )
else
DoError ( ' Couldn ' ' t s e t p e r m i s s i o n s ' ) ;
end ;
Procedure PrintSem ( ID : l o n g i n t ) ;
Var I , c n t : l o n g i n t ;
begin
c n t : = getmembercount ( ID ) ;
W r i t e l n ( ' Semaphore ' , ID , ' has ' , cnt , ' Members ' ) ;
For I :=0 to cnt −1 Do
DispVal ( i d , i ) ;
913
CHAPTER 58. REFERENCE FOR UNIT ’IPC’
end ;
Procedure USage ;
begin
Writeln ( ' Usage : semtool c ( r e a t e ) <count > ' ) ;
Writeln ( ' l ( ock ) <member> ' ) ;
Writeln ( ' u ( n l o c k ) <member> ' ) ;
Writeln ( ' d( elete ) ' ) ;
Writeln ( ' m( ode ) <mode> ' ) ;
Writeln ( ' p( r i n t ) ' );
halt ( 1 ) ;
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 ) ;
S t r T o I n t : =M;
end ;
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 ;
914
CHAPTER 58. REFERENCE FOR UNIT ’IPC’
58.4.7 semget
Synopsis: Return the ID of a semaphore set, possibly creating the set
Declaration: function semget(key: TKey; nsems: cint; semflg: cint) : cint
Visibility: default
Description: msgget returns the ID of the semaphore set described by key. Depending on the flags in semflg,
a new queue is created.
semflg can have one or more of the following values (combined by ORs):
Optionally, the flags can be ORed with a permission mode, which is the same mode that can be used
in the file system.
if a new set of semaphores is created, then there will be nsems semaphores in it.
58.4.8 semop
Synopsis: Perform semaphore operation.
Declaration: function semop(semid: cint; sops: PSEMbuf; nsops: cuint) : cint
Visibility: default
Description: semop performs a set of operations on a message queue. sops points to an array of type TSEMbuf.
The array should contain nsops elements.
The fields of the TSEMbuf (921) structure
TSEMbuf = record
sem_num : word;
sem_op : integer;
sem_flg : integer;
sem_numThe number of the semaphore in the set on which the operation must be performed.
915
CHAPTER 58. REFERENCE FOR UNIT ’IPC’
sem_opThe operation to be performed. The operation depends on the sign of sem_op: A posi-
tive 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 num-
ber is specified, it is subtracted 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 sus-
pended.
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 (915), semctl (910)
58.4.9 semtimedop
Synopsis: Perform semaphore operation using timeout.
Declaration: function semtimedop(semid: cint; sops: PSEMbuf; nsops: cuint;
timeOut: ptimespec) : cint
Visibility: default
Description: semop performs a set of operations on a message queue, just as semop (915). sops points to an
array of type TSEMbuf. The array should contain nsops elements. The timeOut argument points
to a time specification: if the operations cannot be performed withing the specified, time, the function
will return with an error.
For more information on the actual operations, see semop (915).
58.4.10 shmat
Synopsis: Attach a shared memory block.
Declaration: function shmat(shmid: cint; shmaddr: pointer; shmflg: cint) : pointer
Visibility: default
Description: shmat attaches a shared memory block with identified shmid to the current process. The function
returns a pointer to the shared memory block.
If shmaddr is Nil, then the system chooses a free unmapped memory region, as high up in memory
space as possible.
If shmaddr is non-nil, and SHM_RND is in shmflg, then the returned address is shmaddr,
rounded down to SHMLBA. If SHM_RND is not specified, then shmaddr must be a page-aligned
address.
The parameter shmflg can be used to control the behaviour of the shmat call. It consists of a
ORed combination of the following constants:
916
CHAPTER 58. REFERENCE FOR UNIT ’IPC’
58.4.11 shmctl
Synopsis: Perform control operations on a shared memory block.
Declaration: function shmctl(shmid: cint; cmd: cint; buf: PShmid_DS) : cint
Visibility: default
Description: shmctl performs various operations on the shared memory block identified by identifier shmid.
The buf parameter points to a TSHMid_ds record. The cmd parameter is used to pass which
operation is to be performed. It can have one of the following values :
IPC_STATshmctl 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).
Errors: If an error occurs, the function returns False, and IPCerror is set.
See also: shmget (919), shmat (916), shmdt (919)
Listing: ./ipcex/shmtool.pp
Program shmtool ;
uses i p c , s t r i n g s , Baseunix ;
Procedure USage ;
begin
Writeln ( ' Usage : shmtool w( r i t e ) t e x t ' ) ;
writeln ( ' r ( ead ) ' ) ;
writeln ( ' d( elete ) ' ) ;
writeln ( ' m( ode change ) mode ' ) ;
halt ( 1 ) ;
end ;
begin
strpcopy ( ptr , s ) ;
917
CHAPTER 58. REFERENCE FOR UNIT ’IPC’
end ;
begin
W r i t e l n ( ' Read : ' , ptr ) ;
end ;
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 ;
Var m : word ;
code : i n t e g e r ;
data : TSHMid_ds ;
begin
v a l ( mode ,m, code ) ;
i f code<>0 then
usage ;
I f s h m c t l ( shmid , IPC_STAT , @data)=−1 then
begin
writeln ( ' Error : shmctl : ' , fpgeterrn o ) ;
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 : ' , fpgeterrn o ) ;
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 ;
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 . ' ) ;
918
CHAPTER 58. REFERENCE FOR UNIT ’IPC’
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 .
58.4.12 shmdt
Synopsis: Detach shared memory block.
Declaration: function shmdt(shmaddr: pointer) : cint
Visibility: default
Description: shmdt detaches the shared memory at address shmaddr. This shared memory block is unavailable
to the current process, until it is attached again by a call to shmat (916).
The function returns True if the memory block was detached successfully, False otherwise.
Errors: On error, False is returned, and IPCerror is set.
See also: shmget (919), shmat (916), shmctl (917)
58.4.13 shmget
Synopsis: Return the ID of a shared memory block, possibly creating it
Declaration: function shmget(key: TKey; size: size_t; flag: cint) : cint
Visibility: default
Description: shmget returns the ID of a shared memory block, described by key. Depending on the flags in
flag, a new memory block is created.
flag can have one or more of the following values (combined by ORs):
Optionally, the flags can be ORed with a permission mode, which is the same mode that can be used
in the file system.
if a new memory block is created, then it will have size Size bytes in it.
Errors: On error, -1 is returned, and IPCError is set.
919
CHAPTER 58. REFERENCE FOR UNIT ’IPC’
58.5 TIPC_Perm
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
;
__pad1 : Array[1..4-sizeof(mode_t)] of Byte;
seq : cushort;
__pad2 : cushort;
__unused1 : culong;
__unused2 : culong;
end
TIPC_Perm is used in all IPC systems to specify the permissions. It should never be used directly.
58.6 TMSG
TMSG = record
msg_next : PMSG;
msg_type : LongInt;
msg_spot
: PChar;
msg_stime : LongInt;
msg_ts : Integer;
end
58.7 TMSGbuf
TMSGbuf = record
mtype : clong;
mtext : Array[0..0] of Char;
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 accommodate your messages. The mtype field should always
be present, and should always be filled.
58.8 TMSGinfo
TMSGinfo = record
920
CHAPTER 58. REFERENCE FOR UNIT ’IPC’
msgpool : cint;
msgmap : cint;
msgmax : cint
;
msgmnb : cint;
msgmni : cint;
msgssz : cint;
msgtql : cint
;
msgseg : cushort;
end
58.9 TMSQid_ds
TMSQid_ds = record
msg_perm : TIPC_Perm;
msg_stime : time_t;
msg_rtime : time_t;
msg_ctime : time_t;
msg_cbytes : QWord;
msg_qnum : QWord;
msg_qbytes : QWord;
msg_lspid : ipc_pid_t
;
msg_lrpid : ipc_pid_t;
pad1 : QWord;
pad2 : QWord;
end
This record should never be used directly, it is an internal kernel record. It’s fields may change at any
time.
58.10 TSEMbuf
TSEMbuf = record
sem_num : cushort;
sem_op : cshort;
sem_flg
: cshort;
end
The TSEMbuf record is used in the semop (915) call, and is used to specify which operations you
want to do.
58.11 TSEMid_ds
TSEMid_ds = record
921
CHAPTER 58. REFERENCE FOR UNIT ’IPC’
sem_perm : TIPC_Perm;
sem_otime : time_t;
unused1 : culong;
sem_ctime : time_t;
unused2 : culong;
sem_nsems
: culong;
unused3 : culong;
unused4 : culong;
end
Structure returned by the semctl (910) call, contains all data of a semaphore
58.12 TSEMinfo
TSEMinfo = record
semmap : cint;
semmni : cint;
semmns : cint
;
semmnu : cint;
semmsl : cint;
semopm : cint;
semume : cint
;
semusz : cint;
semvmx : cint;
semaem : cint;
end
58.13 TShmid_ds
TShmid_ds = record
shm_perm : TIPC_Perm;
shm_segsz : size_t;
shm_atime : time_t;
shm_dtime : time_t;
shm_ctime : time_t;
shm_cpid : pid_t;
shm_lpid : pid_t;
shm_nattch : culong;
__unused4 : culong;
__unused5 : culong;
end
Record used in the shmctl (917) call to set or retrieve settings for shared memory.
922
CHAPTER 58. REFERENCE FOR UNIT ’IPC’
58.14 TSHMinfo
TSHMinfo = record
shmmax : cint;
shmmin : cint;
shmmni : cint
;
shmseg : cint;
shmall : cint;
end
58.15 TSHM_info
TSHM_info = record
used_ids : cint;
shm_tot : culong;
shm_rss
: culong;
shm_swp : culong;
swap_attempts : culong;
swap_successes
: culong;
end
923
Chapter 59
Name Page
System 1331
59.2 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 (938) function, which will return a driver-dependent key event. This key event can
be translated to a interpretable event by the TranslateKeyEvent (946) 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 (945) function. The current
keyboard driver can be retrieved using the GetKeyboardDriver (937) function. The last section of
this chapter demonstrates how to make a keyboard driver.
924
CHAPTER 59. REFERENCE FOR UNIT ’KEYBOARD’
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.
• The keyboard is reprogrammed. If the keyboard is for whatever reason not restored in its
original state, please load your keymap to reinitialize it.
• Alt+function keys generate keycodes for those keys. To switch virtual consoles, use ctrl+alt+function
key.
• Unlike what you’re used to with other Unix software, escape works as you intuitively expect,
it generates the keycode for an escape key without a delay.
– 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 se-
quences.
– Ctrl+function keys will generate the keycodes for the function keys without ctrl
• In Xterm:
• In Konsole:
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:
In such cases, if the terminal does output an escape sequence for those keys, please submit a bug
report so we can add them.
925
CHAPTER 59. REFERENCE FOR UNIT ’KEYBOARD’
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;
InitDriver Called to initialize and enable the driver. Guaranteed to be called only once. This should
initialize all needed things for the driver.
DoneDriver Called to disable and clean up the driver. Guaranteed to be called after a call to
initDriver. This should clean up all things initialized by InitDriver.
GetKeyEvent Called by GetKeyEvent (938). Must wait for and return the next key event. It should
NOT store keys.
PollKeyEvent Called by PollKeyEvent (943). It must return the next key event if there is one.
Should not store keys.
GetShiftState Called by PollShiftStateEvent (943). Must return the current shift state.
TranslateKeyEvent Should translate a raw key event to a correct key event, i.e. should fill in the
shiftstate and convert function key scancodes to function key keycodes. If the TranslateKeyEvent
is not filled in, a default translation function will be called which converts the known scancodes
from the tables in the previous section to a correct keyevent.
TranslateKeyEventUniCode Should translate a key event to a UNICode key representation.
Strictly speaking, only the GetKeyEvent and PollKeyEvent hooks must be implemented for
the driver to function correctly.
The example unit demonstrates how a keyboard driver can be installed. It takes the installed driver,
and hooks into the GetKeyEvent function to register and log the key events in a file. This driver
can work on top of any other driver, as long as it is inserted in the uses clause after the real driver
unit, and the real driver unit should set the driver record in its initialization section.
Note that with a simple extension of this unit could be used to make a driver that is capable of
recording and storing a set of keyboard strokes, and replaying them at a later time, so a ’keyboard
macro’ capable driver. This driver could sit on top of any other driver.
Listing: ./kbdex/logkeys.pp
unit logkeys ;
interface
Procedure St ar tK ey Log gi ng ;
Procedure StopKeyLogging ;
926
CHAPTER 59. REFERENCE FOR UNIT ’KEYBOARD’
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 ;
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 ;
begin
IsKeyLogging : = Logging ;
end ;
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 tKe yB oa rd ;
927
CHAPTER 59. REFERENCE FOR UNIT ’KEYBOARD’
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 ;
begin
I f Not A c t i v e then
LogFileName : = FileName ;
end ;
Initialization
GetKeyBoardDriver ( OldKeyBoardDriver ) ;
NewKeyBoardDriver : = OldKeyBoardDriver ;
NewKeyBoardDriver . GetKeyEvent : = @LogGetKeyEvent ;
NewKeyBoardDriver . I n i t D r i v e r : = @LogInitKeyboard ;
NewKeyBoardDriver . DoneDriver : = @LogDoneKeyboard ;
LogFileName : = ' keyboard . l o g ' ;
Logging : = False ;
SetKeyboardDriver ( NewKeyBoardDriver ) ;
end .
Listing: ./kbdex/ex9.pp
program example9 ;
{ T h i s program demonstrates t h e l o g k e y s u n i t }
uses keyboard , l o g k e y s ;
Var
K : TKeyEvent ;
begin
InitKeyBoard ;
W r i t e l n ( ' Press keys , press " q " t o end , " s " t o g g l e s l o g g i n g . ' ) ;
Repeat
K: = GetKeyEvent ;
K: = TranslateKeyEvent (K ) ;
W r i t e l n ( ' Got key : ' , KeyEventToString (K ) ) ;
i f GetKeyEventChar (K)= ' s ' then
i f IsKeyLogging then
StopKeyLogging
else
St ar tK ey Log gi ng ;
U n t i l ( GetKeyEventChar (K)= ' q ' ) ;
928
CHAPTER 59. REFERENCE FOR UNIT ’KEYBOARD’
DoneKeyBoard ;
end .
929
CHAPTER 59. REFERENCE FOR UNIT ’KEYBOARD’
930
CHAPTER 59. REFERENCE FOR UNIT ’KEYBOARD’
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.
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
errKbdInitError = errKbdBase + 0
931
CHAPTER 59. REFERENCE FOR UNIT ’KEYBOARD’
errKbdNotImplemented = errKbdBase + 1
kbAlt = 8
kbASCII = $00
kbCtrl = 4
kbdApps = $FF17
kbdDelete = $FF2A
kbdDown = $FF27
kbdEnd = $FF26
kbdF1 = $FF01
kbdF10 = $FF0A
kbdF11 = $FF0B
kbdF12 = $FF0C
kbdF13 = $FF0D
932
CHAPTER 59. REFERENCE FOR UNIT ’KEYBOARD’
kbdF14 = $FF0E
kbdF15 = $FF0F
kbdF16 = $FF10
kbdF17 = $FF11
kbdF18 = $FF12
kbdF19 = $FF13
kbdF2 = $FF02
kbdF20 = $FF14
kbdF3 = $FF03
kbdF4 = $FF04
kbdF5 = $FF05
kbdF6 = $FF06
kbdF7 = $FF07
933
CHAPTER 59. REFERENCE FOR UNIT ’KEYBOARD’
kbdF8 = $FF08
kbdF9 = $FF09
kbdHome = $FF20
kbdInsert = $FF29
kbdLeft = $FF23
kbdLWin = $FF15
kbdMiddle = $FF24
kbdPgDn = $FF28
kbdPgUp = $FF22
kbdRight = $FF25
kbdRWin = $FF16
kbdUp = $FF21
kbFnKey = $02
934
CHAPTER 59. REFERENCE FOR UNIT ’KEYBOARD’
kbLeftShift = 1
kbPhys = $03
kbReleased = $04
kbRightShift = 2
kbUniCode = $01
This constant is used as the ’And’ word in key descriptions. This constant is used by the key event
description routines. It can be changed to localize the key descriptions when needed.
ShiftPrefix : Byte = 0
Keycode for alternate prefix key for Shift key. Unix Only
This constant describes all keypad keys. This constant is used by the key event description routines.
It can be changed to localize the key descriptions when needed.
This constant contains strings to describe left and right keys. This constant is used by the key event
description routines. It can be changed to localize the key descriptions when needed.
This constant contains a string to denote a scancode key event. This constant is used by the key event
description routines. It can be changed to localize the key descriptions when needed.
935
CHAPTER 59. REFERENCE FOR UNIT ’KEYBOARD’
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.
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.
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.6.2 Types
PTreeElement = ^TTreeElement
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 (947) type.
Tprocedure = procedure
Procedure prototype
936
CHAPTER 59. REFERENCE FOR UNIT ’KEYBOARD’
59.7.2 FunctionKeyName
Synopsis: Return string representation of a function key code.
Errors: In case KeyCode does not contain a function code, the SUnknownFunctionKey string is re-
turned, appended with the KeyCode.
See also: ShiftStateToString (945), KeyEventToString (942)
Listing: ./kbdex/ex8.pp
Program Example8 ;
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.7.3 GetKeyboardDriver
Synopsis: Return the current keyboard driver record.
Errors: None.
See also: SetKeyboardDriver (945)
937
CHAPTER 59. REFERENCE FOR UNIT ’KEYBOARD’
59.7.4 GetKeyEvent
Synopsis: Get the next raw key event, wait if needed.
See also: PutKeyEvent (944), PollKeyEvent (943), TranslateKeyEvent (946), TranslateKeyEventUniCode (946)
Listing: ./kbdex/ex1.pp
program example1 ;
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.7.5 GetKeyEventChar
Synopsis: Get the character key part of a key event.
938
CHAPTER 59. REFERENCE FOR UNIT ’KEYBOARD’
Description: GetKeyEventChar returns the charcode part of the given KeyEvent, if it contains a translated
character key keycode. The charcode is simply the ascii code of the character key that was pressed.
It returns the null character if the key was not a character key, but e.g. a function key.
For an example, see GetKeyEvent (938)
Errors: None.
See also: GetKeyEventUniCode (941), GetKeyEventShiftState (940), GetKeyEventFlags (940), GetKeyEvent-
Code (939), GetKeyEvent (938)
59.7.6 GetKeyEventCode
Synopsis: Translate function key part of a key event code.
Listing: ./kbdex/ex2.pp
Program Example2 ;
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 .
939
CHAPTER 59. REFERENCE FOR UNIT ’KEYBOARD’
59.7.7 GetKeyEventFlags
Synopsis: Extract the flags from a key event.
Declaration: function GetKeyEventFlags(KeyEvent: TKeyEvent) : Byte
Visibility: default
Description: GetKeyEventFlags returns the flags part of the given KeyEvent.
For an example, see GetKeyEvent (938)
Errors: None.
See also: GetKeyEventUniCode (941), GetKeyEventShiftState (940), GetKeyEventCode (939), GetKeyEventChar
(938), GetKeyEvent (938)
59.7.8 GetKeyEventShiftState
Synopsis: Return the current state of the shift keys.
Declaration: function GetKeyEventShiftState(KeyEvent: TKeyEvent) : Byte
Visibility: default
Description: GetKeyEventShiftState returns the shift-state values of the given KeyEvent. This can be
used to detect which of the modifier keys Shift, Alt or Ctrl were pressed. If none were pressed,
zero is returned.
Note that this function does not always return expected results; In a UNIX X-Term, the modifier keys
do not always work.
Errors: None.
See also: GetKeyEventUniCode (941), GetKeyEventFlags (940), GetKeyEventCode (939), GetKeyEventChar
(938), GetKeyEvent (938)
Listing: ./kbdex/ex3.pp
Program Example3 ;
{ Program t o demonstrate t h e G e t K e y E v e n t S h i f t S t a t e f u n c t i o n . }
Uses keyboard ;
Var
K : TKeyEvent ;
S : Byte ;
begin
InitKeyBoard ;
Write ( ' Press keys combined w i t h CTRL / SHIFT / ALT ' ) ;
W r i t e l n ( ' , o r press " q " t o end . ' ) ;
Repeat
K: = GetKeyEvent ;
K: = TranslateKeyEvent (K ) ;
S: = G e t K e y E v e n t S h i f t S t a t e (K ) ;
I f (S=0) then
W r i t e l n ( ' No s p e c i a l keys pressed ' )
else
begin
940
CHAPTER 59. REFERENCE FOR UNIT ’KEYBOARD’
59.7.9 GetKeyEventUniCode
Synopsis: Return the Unicode key event.
Declaration: function GetKeyEventUniCode(KeyEvent: TKeyEvent) : Word
Visibility: default
Description: GetKeyEventUniCode returns the Unicode part of the given KeyEvent if it contains a trans-
lated Unicode character.
Errors: None.
See also: GetKeyEventShiftState (940), GetKeyEventFlags (940), GetKeyEventCode (939), GetKeyEventChar
(938), GetKeyEvent (938)
59.7.10 InitKeyboard
Synopsis: Initialize the keyboard driver.
Declaration: procedure InitKeyboard
Visibility: default
Description: InitKeyboard initializes the keyboard driver. If the driver is already active, it does nothing.
When the driver is initialized, it will do everything necessary to ensure the functioning of the key-
board, including allocating memory, initializing the terminal etc.
This function should be called once, before using any of the keyboard functions. When it is called,
the DoneKeyboard (936) function should also be called before exiting the program or changing the
keyboard driver with SetKeyboardDriver (945).
On Unix, the default keyboard driver sets terminal in raw mode. In raw mode the line feed behaves
as an actual linefeed, i.e. the cursor is moved down one line. while the x coordinate does not change.
To compensate, the default keyboard sets driver line ending of system.output to #13#10.
For an example, see most other functions.
Errors: None.
See also: DoneKeyboard (936), SetKeyboardDriver (945)
59.7.11 IsFunctionKey
Synopsis: Check whether a given event is a function key event.
941
CHAPTER 59. REFERENCE FOR UNIT ’KEYBOARD’
Errors: None.
See also: GetKeyEvent (938)
Listing: ./kbdex/ex7.pp
program example1 ;
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 ) ;
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.7.12 KeyEventToString
Synopsis: Return a string describing the key event.
Declaration: function KeyEventToString(KeyEvent: TKeyEvent) : string
Visibility: default
Description: KeyEventToString translates the key event in KeyEvent to a human-readable description of
the pressed key. It will use the constants described in the constants section to do so.
For an example, see most other functions.
Errors: If an unknown key is passed, the scancode is returned, prefixed with the SScanCode string.
See also: FunctionKeyName (937), ShiftStateToString (945)
59.7.13 KeyPressed
Synopsis: Check event queue for key press
Declaration: function KeyPressed : Boolean
Visibility: default
Description: KeyPressed checks the keyboard event queue to see whether a key event is present, and returns
True if a key event is available. This function simply calls PollKeyEvent (943) and checks for a
valid result.
Errors: None.
See also: PollKeyEvent (943), GetKeyEvent (938)
942
CHAPTER 59. REFERENCE FOR UNIT ’KEYBOARD’
59.7.14 PollKeyEvent
Synopsis: Get next key event, but does not wait.
Listing: ./kbdex/ex4.pp
program example4 ;
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.7.15 PollShiftStateEvent
Synopsis: Check current shift state.
Declaration: function PollShiftStateEvent : TKeyEvent
Visibility: default
Description: PollShiftStateEvent returns the current shiftstate in a keyevent. This will return 0 if there is
no key event pending.
Errors: None.
943
CHAPTER 59. REFERENCE FOR UNIT ’KEYBOARD’
Listing: ./kbdex/ex6.pp
program example6 ;
{ T h i s program demonstrates t h e P o l l S h i f t S t a t e E v e n t f u n c t i o n }
uses keyboard ;
Var
K : TKeyEvent ;
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.7.16 PutKeyEvent
Synopsis: Put a key event in the event queue.
Declaration: procedure PutKeyEvent(KeyEvent: TKeyEvent)
Visibility: default
Description: PutKeyEvent adds the given KeyEvent to the input queue. Please note that depending on the
implementation this can hold only one value, i.e. when calling PutKeyEvent multiple times, only
the last pushed key will be remembered.
Errors: None
See also: PollKeyEvent (943), GetKeyEvent (938)
Listing: ./kbdex/ex5.pp
program example5 ;
uses keyboard ;
Var
K , k2 : TKeyEvent ;
944
CHAPTER 59. REFERENCE FOR UNIT ’KEYBOARD’
begin
InitKeyBoard ;
W r i t e l n ( ' Press keys , press " q " t o end . ' ) ;
K2 : = 0 ;
Repeat
K: = GetKeyEvent ;
I f k<>0 then
begin
i f ( k2 mod 2)=0 then
K2 : =K+1
else
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.7.17 SetKeyboardDriver
Synopsis: Set a new keyboard driver.
Declaration: function SetKeyboardDriver(const Driver: TKeyboardDriver) : Boolean
Visibility: default
Description: SetKeyBoardDriver sets the keyboard driver to Driver, if the current keyboard driver is not
yet initialized. If the current keyboard driver is initialized, then SetKeyboardDriver does noth-
ing. Before setting the driver, the currently active driver should be disabled with a call to DoneKey-
board (936).
The function returns True if the driver was set, False if not.
For more information on setting the keyboard driver, see kbddriver (926).
Errors: None.
See also: GetKeyboardDriver (937), DoneKeyboard (936)
59.7.18 ShiftStateToString
Synopsis: Return description of key event shift state
Declaration: function ShiftStateToString(KeyEvent: TKeyEvent; UseLeftRight: Boolean)
: string
Visibility: default
945
CHAPTER 59. REFERENCE FOR UNIT ’KEYBOARD’
Description: ShiftStateToString returns a string description of the shift state of the key event KeyEvent.
This can be an empty string.
The shift state is described using the strings in the SShift constant.
For an example, see PollShiftStateEvent (943).
Errors: None.
See also: FunctionKeyName (937), KeyEventToString (942)
59.7.19 TranslateKeyEvent
Synopsis: Translate raw event to ascii key event
Declaration: function TranslateKeyEvent(KeyEvent: TKeyEvent) : TKeyEvent
Visibility: default
Description: TranslateKeyEvent performs ASCII translation of the KeyEvent. It translates a physical key
to a function key if the key is a function key, and translates the physical key to the ordinal of the ascii
character if there is an equivalent character key.
For an example, see GetKeyEvent (938)
Errors: None.
See also: TranslateKeyEventUniCode (946)
59.7.20 TranslateKeyEventUniCode
Synopsis: Translate raw event to UNICode key event
Declaration: function TranslateKeyEventUniCode(KeyEvent: TKeyEvent) : TKeyEvent
Visibility: default
Description: TranslateKeyEventUniCode performs Unicode translation of the KeyEvent. It is not yet
implemented for all platforms.
Errors: If the function is not yet implemented, then the ErrorCode of the system unit will be set to
errKbdNotImplemented
See also: TranslateKeyEvent (946)
59.8 TKeyboardDriver
TKeyboardDriver = record
InitDriver : procedure;
DoneDriver :
procedure;
GetKeyEvent : function : TKeyEvent;
PollKeyEvent
: function : TKeyEvent;
GetShiftState : function : Byte;
TranslateKeyEvent
: function(KeyEvent: TKeyEvent) : TKeyEvent;
946
CHAPTER 59. REFERENCE FOR UNIT ’KEYBOARD’
TranslateKeyEventUniCode
: function(KeyEvent: TKeyEvent) : TKeyEvent;
end
The TKeyboardDriver record can be used to install a custom keyboard driver with the SetKey-
boardDriver (945) function.
The various fields correspond to the different functions of the keyboard unit interface. For more
information about this record see kbddriver (926)
59.9 TKeyRecord
TKeyRecord = packed record
Flags : Byte;
ShiftState : Byte;
KeyCode : Word;
end
Field Meaning
KeyCode Depending on flags either the physical representation of a key (under DOS scancode, ASCII code pair), or the
ShiftState Shift-state when this key was pressed (or shortly after)
Flags 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, there’s 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 possibly having the same name (but different value).
59.10 TTreeElement
TTreeElement = record
Next : PTreeElement;
Parent : PTreeElement
;
Child : PTreeElement;
CanBeTerminal : Boolean;
char : Byte
;
ScanValue : Byte;
CharValue : Byte;
SpecialHandler : Tprocedure
;
end
947
CHAPTER 59. REFERENCE FOR UNIT ’KEYBOARD’
TTreeELement is used to describe key scancode sequences, and is used to handle special key
combinations in AddSpecialSequence (??) on UNIX platforms. There should be no need to handle
records of this type.
948
Chapter 60
Name Page
System 1331
60.2 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 (978) unit must be used.
60.3.2 Variables
AllowReuseOfLineInfoData : Boolean = True
AllowReuseOfLineInfoData can be set to True to keep the last opened file open. When
regularly creating backtraces (e.g. in a program log), this will significantly speed up operations.
949
CHAPTER 60. REFERENCE FOR UNIT ’LINEINFO’
Description: CloseStabs will close the file descriptor that was used to read STABS debug information. This
is useful if AllowReuseOfLineInfoData (949) is used to cache STABS information.
Errors: None.
See also: AllowReuseOfLineInfoData (949)
60.4.2 GetLineInfo
Synopsis: Return source line information about an address.
Declaration: function GetLineInfo(addr: PtrUInt; var func: string;
var source: string; var line: LongInt) : Boolean
Visibility: default
Description: GetLineInfo returns source line information about the address addr. It searches this informa-
tion in the stabs debugging information found in the binary: If the file was compiled without debug
information, nothing will be returned. Upon successful retrieval of the debug information, True is
returned, and the func parameter is filled with the name of the function in which the address is lo-
cated. The source parameter contains the name of the file in which the function was implemented,
and line contains the line number in the source file for addr.
Errors: If no debug information is found, False is returned.
60.4.3 StabBackTraceStr
Synopsis: Get a backtrace from an address
Errors: None.
See also: GetLineInfo (950)
950
Chapter 61
Name Page
BaseUnix 140
System 1331
unixtype 2087
61.2 Overview
The linux unit contains Linux specific operating system calls.
The platform independent functionality of the FPC 1.0.X version of the linux unit has been split out
over the UNIX (2049), baseunix (140) and unixutil (2103) units.
The X86-specific parts have been moved to the X86 (2186) unit.
CAP_AUDIT_WRITE = 29
CAP_CHOWN = 0
951
CHAPTER 61. REFERENCE FOR UNIT ’LINUX’
CAP_DAC_OVERRIDE = 1
CAP_DAC_READ_SEARCH = 2
CAP_FOWNER = 3
CAP_FSETID = 4
CAP_FS_MASK = $1f
CAP_IPC_LOCK = 14
CAP_IPC_OWNER = 15
CAP_KILL = 5
CAP_LEASE = 28
CAP_LINUX_IMMUTABLE = 9
CAP_MKNOD = 27
CAP_NET_ADMIN = 12
CAP_NET_BIND_SERVICE = 10
952
CHAPTER 61. REFERENCE FOR UNIT ’LINUX’
CAP_NET_BROADCAST = 11
CAP_NET_RAW = 13
CAP_SETGID = 6
CAP_SETPCAP = 8
CAP_SETUID = 7
CAP_SYS_ADMIN = 21
CAP_SYS_BOOT = 22
CAP_SYS_CHROOT = 18
CAP_SYS_MODULE = 16
CAP_SYS_NICE = 23
CAP_SYS_PACCT = 20
CAP_SYS_PTRACE = 19
CAP_SYS_RAWIO = 17
953
CHAPTER 61. REFERENCE FOR UNIT ’LINUX’
CAP_SYS_RESOURCE = 24
CAP_SYS_TIME = 25
CAP_SYS_TTY_CONFIG = 26
CLOCKS_MONO = CLOCK_MONOTONIC
CLOCK_MONOTONIC = 1
Monotonic system time since some undetermined start point. Can change if time is set.
CLOCK_MONOTONIC_COARSE = 6
CLOCK_MONOTONIC_RAW = 4
CLOCK_PROCESS_CPUTIME_ID = 2
CLOCK_REALTIME = 0
CLOCK_REALTIME_COARSE = 5
CLOCK_SGI_CYCLE = 10
CLOCK_THREAD_CPUTIME_ID = 3
954
CHAPTER 61. REFERENCE FOR UNIT ’LINUX’
CLONE_CHILD_CLEARTID = $00200000
Clone option: Erase child thread ID in child memory space when child exits.
CLONE_CHILD_SETTID = $01000000
CLONE_DETACHED = $00400000
CLONE_FILES = $00000400
CLONE_FS = $00000200
CLONE_NEWNS = $00020000
CLONE_PARENT = $00008000
CLONE_PARENT_SETTID = $00100000
Clone option: Store child thread ID in memory in both parent and child.
CLONE_PID = $00001000
CLONE_PTRACE = $00002000
CLONE_SETTLS = $00080000
Clone option: The newtls parameter is the TLS descriptor of the child
CLONE_SIGHAND = $00000800
CLONE_STOPPED = $02000000
955
CHAPTER 61. REFERENCE FOR UNIT ’LINUX’
CLONE_SYSVSEM = $00040000
Clone option: Caller and child share the same semaphore undo values
CLONE_THREAD = $00010000
CLONE_UNTRACED = $00800000
CLONE_VFORK = $00004000
CLONE_VM = $00000100
CSIGNAL = $000000ff
EPOLLERR = $08
EPOLLET = $80000000
EPOLLHUP = $10
EPOLLIN = $01
EPOLLONESHOT = $40000000
EPOLLOUT = $04
EPOLLPRI = $02
956
CHAPTER 61. REFERENCE FOR UNIT ’LINUX’
EPOLL_CTL_ADD = 1
EPOLL_CTL_DEL = 2
EPOLL_CTL_MOD = 3
FUTEX_CMP_REQUEUE = 4
Futex option: requeue waiting processes on other futex, but check it’s value first
FUTEX_FD = 2
FUTEX_LOCK_PI = 6
FUTEX_OP_ADD = 1
FUTEX_OP_ANDN = 3
FUTEX_OP_CMP_EQ = 0
FUTEX_OP_CMP_GE = 5
FUTEX_OP_CMP_GT = 4
FUTEX_OP_CMP_LE = 3
FUTEX_OP_CMP_LT = 2
957
CHAPTER 61. REFERENCE FOR UNIT ’LINUX’
FUTEX_OP_CMP_NE = 1
FUTEX_OP_OPARG_SHIFT = 8
FUTEX_OP_OR = 2
FUTEX_OP_SET = 0
FUTEX_OP_XOR = 4
FUTEX_REQUEUE = 3
FUTEX_TRYLOCK_PI = 8
FUTEX_UNLOCK_PI = 7
FUTEX_WAIT = 0
FUTEX_WAKE = 1
FUTEX_WAKE_OP = 5
GIO_CMAP = $4B70
GIO_FONT = $4B60
958
CHAPTER 61. REFERENCE FOR UNIT ’LINUX’
GIO_FONTX = $4B6B
GIO_SCRNMAP = $4B40
GIO_UNIMAP = $4B66
GIO_UNISCRNMAP = $4B69
IN_ACCESS = $00000001
IN_ATTRIB = $00000004
IN_CLOEXEC = &02000000
IN_CLOEXEC can be set to indicate that the inotify file handle must be closed on exec.
IN_CLOSE_NOWRITE = $00000010
IN_CLOSE_WRITE = $00000008
IN_CREATE = $00000100
IN_DELETE = $00000200
959
CHAPTER 61. REFERENCE FOR UNIT ’LINUX’
IN_DELETE_SELF = $00000400
IN_DONT_FOLLOW = $02000000
IN_IGNORED = $00008000
IN_ISDIR = $40000000
IN_MASK_ADD = $20000000
IN_MODIFY = $00000002
IN_MOVED_FROM = $00000040
IN_MOVED_TO = $00000080
IN_MOVE_SELF = $00000800
IN_NONBLOCK = &00004000
IN_NONBLOCK can be set to indicate that the inotify file handle should not block read operations.
IN_ONESHOT = $80000000
IN_ONLYDIR = $01000000
960
CHAPTER 61. REFERENCE FOR UNIT ’LINUX’
IN_OPEN = $00000020
IN_Q_OVERFLOW = $00004000
IN_UNMOUNT = $00002000
KB_101 = 2
KB_84 = 1
KB_OTHER = 3
KDADDIO = $4B34
KDDELIO = $4B35
KDDISABIO = $4B37
KDENABIO = $4B36
KDFONTOP = $4B72
KDGETKEYCODE = $4B4C
KDGETLED = $4B31
961
CHAPTER 61. REFERENCE FOR UNIT ’LINUX’
KDGETMODE = $4B3B
KDGKBDIACR = $4B4A
KDGKBTYPE = $4B33
KDMAPDISP = $4B3C
KDMKTONE = $4B30
KDSETKEYCODE = $4B4D
KDSETLED = $4B32
KDSETMODE = $4B3A
KDSIGACCEPT = $4B4E
KDSKBDIACR = $4B4B
KDUNMAPDISP = $4B3D
KD_GRAPHICS = 1
KD_TEXT = 0
962
CHAPTER 61. REFERENCE FOR UNIT ’LINUX’
KD_TEXT0 = 2
KD_TEXT1 = 3
KIOCSOUND = $4B2F
LED_CAP = 4
LED_NUM = 2
LED_SCR = 1
LINUX_CAPABILITY_VERSION = $19980330
MAP_DENYWRITE = $800
Read-only
MAP_EXECUTABLE = $1000
MAP_GROWSDOWN = $100
MAP_LOCKED = $2000
MAP_NORESERVE = $4000
MAX_CLOCKS = 16
963
CHAPTER 61. REFERENCE FOR UNIT ’LINUX’
MODIFY_LDT_CONTENTS_CODE = 2
MODIFY_LDT_CONTENTS_DATA = 0
MODIFY_LDT_CONTENTS_STACK = 1
O_CLOEXEC = $80000
PIO_CMAP = $4B71
PIO_FONT = $4B61
PIO_FONTRESET = $4B6D
PIO_FONTX = $4B6C
PIO_SCRNMAP = $4B41
PIO_UNIMAP = $4B67
PIO_UNIMAPCLR = $4B68
PIO_UNISCRNMAP = $4B6A
POLLMSG = $0400
964
CHAPTER 61. REFERENCE FOR UNIT ’LINUX’
Unused in Linux
POLLRDHUP = $2000
POLLREMOVE = $1000
SPLICE_F_GIFT = 8
SPLICE_F_MORE = 4
SPLICE_F_MOVE = 1
SPLICE_F_NONBLOCK = 2
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
UD_LIMIT_IN_PAGES = $10
965
CHAPTER 61. REFERENCE FOR UNIT ’LINUX’
UD_LM = $80
UD_READ_EXEC_ONLY = $08
UD_SEG_32BIT = $01
UD_SEG_NOT_PRESENT = $20
UD_USEABLE = $40
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
PEPoll_Data = ^EPoll_Data
966
CHAPTER 61. REFERENCE FOR UNIT ’LINUX’
PEpoll_Event = ^EPoll_Event
Pinotify_event = ^inotify_event
PSysInfo = ^TSysInfo
Puser_cap_data = ^user_cap_data
Puser_cap_header = ^user_cap_header
PUser_Desc = ^user_desc
TEPoll_Data = EPoll_Data
TEPoll_Event = EPoll_Event
TUser_Desc = user_desc
967
CHAPTER 61. REFERENCE FOR UNIT ’LINUX’
61.4.2 capset
Synopsis: Set the capabilities for the indicated thread
Declaration: function capset(header: Puser_cap_header; data: Puser_cap_data) : cint
Visibility: default
Description: capget sets the capabilities of the indicated thread in header. The thread is identified by the
process ID, or -1 for all caller (and child) process ID’s.
Refer to the Linux man pages (7 capabilities) for more info.
Errors: On success, zero is returned, on error -1 is returned, and fperrno is set to the error.
See also: capget (967)
61.4.3 clock_getres
Synopsis: Get clock resolution
Declaration: function clock_getres(clk_id: clockid_t; res: ptimespec) : cint
Visibility: default
Description: clock_getres returns the resolution of the clock specified in clk_id in the res structure. It
can be Nil. if the clock exists and the resolution can be retrieved, 0 is returned.
Errors: On Error, -1 is returned. fpgeterrno can be used to get more detailed error information.
See also: clock_gettime (968), clock_settime (968)
61.4.4 clock_gettime
Synopsis: Get the time of a clock
Declaration: function clock_gettime(clk_id: clockid_t; tp: ptimespec) : cint
Visibility: default
Description: clock_gettime returns the current time of the clock specified in clk_id in the tp structure. If
the clock exists and the time can be retrieved, 0 is returned.
Errors: On Error, -1 is returned. fpgeterrno can be used to get more detailed error information.
See also: clock_getres (968), clock_settime (968)
61.4.5 clock_settime
Synopsis: Set the time of a clock
Declaration: function clock_settime(clk_id: clockid_t; tp: ptimespec) : cint
Visibility: default
Description: clock_settime sets the current time of the clock specified in clk_id. The time is specified in
the tp structure. If the clock exists and the time can be retrieved, 0 is returned. The resolution is
truncated to the resolution supported by the specified clock. Note that not all clocks can be set.
Errors: On Error, -1 is returned. fpgeterrno can be used to get more detailed error information.
See also: clock_getres (968), clock_gettime (968)
968
CHAPTER 61. REFERENCE FOR UNIT ’LINUX’
61.4.6 clone
Synopsis: Clone current process (create new thread)
Declaration: function clone(func: TCloneFunc; sp: pointer; flags: LongInt;
args: pointer) : LongInt
Visibility: default
Description: Clone creates a child process which is a copy of the parent process, just like FpFork (189) does. In
difference with Fork, however, the child process shares some parts of it’s execution context with its
parent, so it is suitable for the implementation of threads: many instances of a program that share the
same memory.
When the child process is created, it starts executing the function Func, and passes it Args. The
return value of Func is either the explicit return value of the function, or the exit code of the child
process.
The sp pointer points to the memory reserved as stack space for the child process. This address
should be the top of the memory block to be used as stack.
The Flags determine the behaviour of the Clone call. The low byte of the Flags contains the
number of the signal that will be sent to the parent when the child dies. This may be bitwise OR’ed
with the following constants:
CLONE_VMParent and child share the same memory space, including memory (un)mapped with
subsequent mmap calls.
CLONE_FSParent and child have the same view of the file system; the chroot, chdir and
umask calls affect both processes.
CLONE_FILESthe file descriptor table of parent and child is shared.
CLONE_SIGHANDthe parent and child share the same table of signal handlers. The signal masks
are different, though.
CLONE_PIDParent and child have the same process ID.
Clone returns the process ID in the parent process, and -1 if an error occurred.
Errors: On error, -1 is returned to the parent, and no child is created.
61.4.7 epoll_create
Synopsis: Create new epoll file descriptor
Declaration: function epoll_create(size: cint) : cint
Visibility: default
Description: epoll_create creates a new epoll file descriptor. The size argument indicates to the kernel
approximately how many structures should be allocated, but is by no means an upper limit.
On success, a file descriptor is returned that can be used in subsequent epoll_ctl (970) or epoll_wait
(970) calls, and should be closed using the fpClose (182) call.
Errors: On error, -1 is returned, and errno (192) is set.
See also: epoll_ctl (970), epoll_wait (970), fpClose (182)
969
CHAPTER 61. REFERENCE FOR UNIT ’LINUX’
61.4.8 epoll_ctl
Synopsis: Modify an epoll file descriptor
Declaration: function epoll_ctl(epfd: cint; op: cint; fd: cint; event: PEpoll_Event)
: cint
Visibility: default
Description: epoll_ctl performs the op operation on epoll file descriptor epfd. The operation will be moni-
tored on file descriptor fd, and is optionally controlled by event.
op can be one of the following values:
The events field in event_data is a bitmask of one or more of the following values:
61.4.9 epoll_wait
Synopsis: Wait for an event on an epoll file descriptor.
Declaration: function epoll_wait(epfd: cint; events: PEpoll_Event; maxevents: cint;
timeout: cint) : cint
Visibility: default
Description: epoll_wait waits for timeout milliseconds for an event to occur on epoll file descriptor epfd.
If timeout is -1, it waits indefinitely, if timeour is zero, it does not wait, but returns immediately,
even if no events were detected.
On return, data for at most maxevents will be returned in the memory pointed to by events. The
function returns the number of file descriptors for which events were reported. This can be zero if
the timeout was reached.
Errors: On error -1 is returned, and errno is set accordingly.
See also: epoll_create (969), epoll_ctl (970), fpClose (182)
970
CHAPTER 61. REFERENCE FOR UNIT ’LINUX’
61.4.10 fdatasync
Synopsis: Synchronize the data in memory with the data on storage device
61.4.11 futex
Synopsis: Perform a futex operation
Declaration: function futex(uaddr: pcint; op: cint; val: cint; timeout: ptimespec;
addr2: pcint; val3: cint) : cint
function futex(var uaddr; op: cint; val: cint; timeout: ptimespec;
var addr2; val3: cint) : cint
function futex(var uaddr; op: cint; val: cint; var timeout: TTimeSpec;
var addr2; val3: cint) : cint
function futex(uaddr: pcint; op: cint; val: cint; timeout: ptimespec)
: cint
function futex(var uaddr; op: cint; val: cint; timeout: ptimespec)
: cint
function futex(var uaddr; op: cint; val: cint; var timeout: TTimeSpec)
: cint
Visibility: default
Description: futex performs an operation on a memory futex as described in the kernel manual page for futex.
The mutex is located at uaddr, the operation op is one of the following constants:
The value to check for is indicated in val, and a timeout can be specified in timeout. The optional
arguments addr2 and val3 are used only with the FUTEX_REQUEUE and FUTEX_CMP_REQUEUE
operations.
In case of an error, -1 is return. All other return values must be interpreted according to the operation
performed.
This call directly interfaces with the Linux kernel, more information can be found in the kernel
manual pages.
Errors: On error, -1 is returned. Use #rtl.baseunix.fpgeterrno (192) to get the error code.
971
CHAPTER 61. REFERENCE FOR UNIT ’LINUX’
61.4.12 futex_op
Synopsis: Futex operation:
Declaration: function futex_op(op: cint; oparg: cint; cmp: cint; cmparg: cint) : cint
Visibility: default
Description: FUTEX_OP Performs an operation on a futex:
61.4.13 inotify_add_watch
Synopsis: Add a watch to a notify file descriptor
Declaration: function inotify_add_watch(fd: cint; name: PChar; mask: cuint32) : cint
Visibility: default
Description: inotify_add_watch can be used to add a watch to an initialized inotify file descriptor (fd).
The file or directory to watch can be specified in the name parameter, and the events that must be
reported can be specified in mask. The following flags can be specified:
IN_ACCESSData was read from file.
IN_MODIFYData was written to file.
IN_ATTRIBFile attributes changed.
IN_CLOSE_WRITEFile opened for write was closed
IN_CLOSE_NOWRITEFile opened for read was closed
IN_CLOSEFile was closed (read or write)
IN_OPENFile was opened
IN_MOVED_FROMFile was moved away from watched directory
IN_MOVED_TOFile was moved into watched directory
IN_MOVEFile was moved (in or out of directory)
IN_CREATEA file was created in the directory.
IN_DELETEA file was deleted from the directory.
IN_DELETE_SELFDirectory or file under observation was deleted.
IN_MOVE_SELFDirectory or file under observation was moved.
IN_ALL_EVENTSAll possible events OR-ed together.
These events can be OR-ed with some flags, controlling the behaviour of the watch:
IN_ONLYDIROnly watch filename if it is a directory.
IN_ISDIREvent occurred against directory.
IN_DONT_FOLLOWDo not follow symlinks
IN_MASK_ADDAdd events to existing watch (OR-ing the sets) if one exists.
IN_ONESHOTOnly report one event, then remove the watch.
On return, the function returns a watch descriptor, which will be reported in the inotify_event (976)
structure’s wd.
Errors: On Error, -1 is returned. fpgeterrno can be used to get more detailed error information.
See also: inotify_init (973), inotify_init1 (973), inotify_rm_watch (973), inotify_event (976)
972
CHAPTER 61. REFERENCE FOR UNIT ’LINUX’
61.4.14 inotify_init
Synopsis: Initialize a new inotify file descriptor
Errors: On Error, -1 is returned. fpgeterrno can be used to get more detailed error information
See also: inotify_init1 (973), inotify_add_watch (972), inotify_rm_watch (973)
61.4.15 inotify_init1
Synopsis: Initialize a new inotify file descriptor with extra options.
Errors: On Error, -1 is returned. fpgeterrno can be used to get more detailed error information.
See also: inotify_init (973), inotify_add_watch (972), inotify_rm_watch (973)
61.4.16 inotify_rm_watch
Synopsis: Remove watch from Inotify file descriptor.
Declaration: function inotify_rm_watch(fd: cint; wd: cint) : cint
Visibility: default
Description: inotify_rm_watch removes watch descriptor wd from inotify descriptor fd. On success, 0 is
returned.
Errors: On Error, -1 is returned. fpgeterrno can be used to get more detailed error information.
See also: inotify_init (973), inotify_init1 (973), inotify_add_watch (972), inotify_event (976)
61.4.17 modify_ldt
Declaration: function modify_ldt(func: cint; p: pointer; bytecount: culong) : cint
Visibility: default
973
CHAPTER 61. REFERENCE FOR UNIT ’LINUX’
61.4.18 sched_yield
Synopsis: Yield the processor to another thread.
Declaration: procedure sched_yield
Visibility: default
Description: sched_yield yields the processor to another thread. The current thread is put at the back of its
queue. If there is only 1 thread in the application, the thread continues to run. The call always returns
zero.
61.4.19 setregid
Synopsis: Set Real and Effective Group ID
Declaration: function setregid(rgid: uid_t; egid: uid_t) : cint
Visibility: default
Description: setregid sets the real group ID to rgid and the effective group ID to egid. Passing a value of
-1 tells the system not to change that value.
Errors: On Error, -1 is returned. fpgeterrno can be used to get more detailed error information.
See also: setreuid (974)
61.4.20 setreuid
Declaration: function setreuid(ruid: uid_t; euid: uid_t) : cint
Visibility: default
Description: setreuid sets the real user ID to ruid and the effective user ID to euid. Passing a value of -1
tells the system not to change that value.
Errors: On Error, -1 is returned. fpgeterrno can be used to get more detailed error information.
See also: setregid (974)
61.4.21 sync_file_range
Synopsis: Force committing of data to disk
Declaration: function sync_file_range(fd: cint; offset: off64_t; nbytes: off64_t;
flags: cuint) : cint
Visibility: default
Description: sync_file_range forces the Linux kernel to write any data pages of a specified file (file de-
scriptor fd) to disk. The range of the file is specified by the offset offset and the number of bytes
nbytes. Options is an OR-ed combination of
974
CHAPTER 61. REFERENCE FOR UNIT ’LINUX’
61.4.22 Sysinfo
Synopsis: Return kernel system information
Declaration: function Sysinfo(Info: PSysInfo) : cint
Visibility: default
Description: SysInfo returns system information in Info. Returned information in Info includes:
Errors: None.
See also: #rtl.baseunix.fpUname (227)
Listing: ./linuxex/ex64.pp
program Example64 ;
{ Example t o demonstrate t h e S y s I n f o f u n c t i o n .
S y s i n f o i s Linux−o n l y . }
{ $ i f d e f Linux }
Uses L i n u x ;
Function Mb( L : L o n g i n t ) : l o n g i n t ;
begin
Mb: = L div ( 1 0 2 4 * 1 0 2 4 ) ;
end ;
Var I n f o : TSysInfo ;
D,M, Secs ,H : l o n g i n t ;
{ $endif }
begin
{ $ i f d e f Linux }
I f Not ( S y s I n f o ( @Info ) = 0 ) then
Halt ( 1 ) ;
975
CHAPTER 61. REFERENCE FOR UNIT ’LINUX’
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 3600;
uptime : = uptime mod 3600;
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 .
61.5 EPoll_Event
EPoll_Event = packed record
Events : cuint32;
Data : TEPoll_Data
;
end
61.6 inotify_event
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.
61.7 TSysInfo
TSysInfo = record
uptime : clong;
loads : Array[0..2] of culong
;
976
CHAPTER 61. REFERENCE FOR UNIT ’LINUX’
totalram : culong;
freeram : culong;
sharedram : culong;
bufferram : culong;
totalswap : culong;
freeswap : culong;
procs : cushort;
pad : cushort;
totalhigh : culong;
freehigh
: culong;
mem_unit : cuint;
end
61.8 user_cap_data
user_cap_data = record
effective : cuint32;
permitted : cuint32
;
inheritable : cuint32;
end
61.9 user_cap_header
user_cap_header = record
version : cuint32;
pid : cint;
end
user_cap_header describes the root user capabilities for the current thread, as set by capget
(967) and capset (968)
61.10 user_desc
user_desc = record
entry_number : cuint;
base_addr : cuint;
limit : cuint;
flags : cuint;
end
user_desc is the TLS (Thread Local Storage) segment descriptor used in the Clone call. It
should not be used, as it contains highly kernel-specific data.
977
Chapter 62
Name Page
System 1331
62.2 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 (949) unit must be used.
62.3.2 Variables
AllowReuseOfLineInfoData : Boolean = True
AllowReuseOfLineInfoData can be set to True to keep the last opened file open. When
regularly creating backtraces (e.g. in a program log), this will significantly speed up operations.
978
CHAPTER 62. REFERENCE FOR UNIT ’LNFODWRF’
Description: CloseDwarf will close the file descriptor that was used to read DWARF debug information. This
is useful if AllowReuseOfLineInfoData (978) is used to cache DWARF information.
Errors: None.
See also: AllowReuseOfLineInfoData (978)
62.4.2 DwarfBackTraceStr
Synopsis: Get a backtrace from an address
Declaration: function DwarfBackTraceStr(addr: CodePointer) : string
Visibility: default
62.4.3 GetLineInfo
Synopsis: Return source line information about an address.
Declaration: function GetLineInfo(addr: CodePtrUInt; var func: string;
var source: string; var line: LongInt) : Boolean
Visibility: default
Description: GetLineInfo returns source line information about the address addr. It searches this informa-
tion in the DWARF debugging information found in the binary: If the file was compiled without
debug information, nothing will be returned. Upon successful retrieval of the debug information,
True is returned, and the func parameter is filled with the name of the function in which the ad-
dress is located. The source parameter contains the name of the file in which the function was
implemented, and line contains the line number in the source file for addr.
Errors: If no debug information is found, False is returned.
979
Chapter 63
Name Page
System 1331
sysutils 1598
63.2 Overview
This document describes the math unit. The math unit was initially written by Florian Klaempfl. It
provides mathematical functions which aren’t 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.
980
CHAPTER 63. REFERENCE FOR UNIT ’MATH’
FV Future value
PV Present value
PMT Payment per period
n Number of payments (number of periods)
The financial functions FutureValue (997), NumberOfPeriods (1013), Payment (1014), PresentValue
(1017) and InterestRate (1000) solve this equation for one of the variables, when the other variables
are known.
See also: FutureValue (997), NumberOfPeriods (1013), Payment (1014), PresentValue (1017), TPayment-
Time (985)
Table 63.2:
Name Description
hypot (999) Hypotenuse of triangle
norm (1013) Euclidean norm
Table 63.3:
Name Description
mean (1007) Mean of values
meanandstddev (1008) Mean and standard deviation of values
momentskewkurtosis (1011) Moments, skew and kurtosis
popnstddev (1014) Population standard deviation
popnvariance (1015) Population variance
randg (1018) Gaussian distributed random value
stddev (1023) Standard deviation
sum (1024) Sum of values
sumofsquares (1025) Sum of squared values
sumsandsquares (1026) Sum of values and squared values
totalvariance (1028) Total variance of values
variance (1029) variance of values
981
CHAPTER 63. REFERENCE FOR UNIT ’MATH’
Table 63.4:
Name Description
ceil (990) Round to infinity
floor (995) Round to minus infinity
frexp (997) Return mantissa and exponent
Table 63.5:
Name Description
intpower (1001) Raise float to integer power
ldexp (1002) Calculate $2p̂ x$
lnxp1 (1003) calculate log(x+1)
log10 (1003) calculate 10-base log
log2 (1004) calculate 2-base log
logn (1004) calculate N-base log
power (1016) raise float to arbitrary power
Table 63.6:
Name Description
arcosh (987) calculate reverse hyperbolic cosine
arsinh (989) calculate reverse hyperbolic sine
artanh (989) calculate reverse hyperbolic tangent
cosh (992) calculate hyperbolic cosine
sinh (1023) calculate hyperbolic sine
tanh (1028) calculate hyperbolic tangent
982
CHAPTER 63. REFERENCE FOR UNIT ’MATH’
Table 63.7:
Name Description
arccos (986) calculate reverse cosine
arcsin (987) calculate reverse sine
arctan2 (988) calculate reverse tangent
cotan (992) calculate cotangent
sincos (1022) calculate sine and cosine
tan (1027) calculate tangent
Table 63.8:
Name Description
cycletorad (993) convert cycles to radians
degtograd (994) convert degrees to grads
degtorad (994) convert degrees to radians
gradtodeg (998) convert grads to degrees
gradtorad (999) convert grads to radians
radtocycle (1017) convert radians to cycles
radtodeg (1017) convert radians to degrees
radtograd (1018) convert radians to grads
Table 63.9:
Name Description
max (1005) Maximum of 2 values
maxIntValue (1005) Maximum of an array of integer values
maxvalue (1006) Maximum of an array of values
min (1009) Minimum of 2 values
minIntValue (1009) Minimum of an array of integer values
minvalue (1010) Minimum of an array of values
983
CHAPTER 63. REFERENCE FOR UNIT ’MATH’
GreaterThanValue = High(TValueRelationship)
Value is infinity
LessThanValue = Low(TValueRelationship)
MaxFloat = 0
MinFloat = 0
NegativeValue = Low(TValueSign)
Value is negative
PositiveValue = High(TValueSign)
Value is positive
ZeroValue = 0
Value is zero
984
CHAPTER 63. REFERENCE FOR UNIT ’MATH’
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 (985) is used in functions that accept an array of values of arbitrary length.
PFloat = ^Float
PInteger = ObjPas.PInteger
TFPUException = system.TFPUException
TFPUExceptionMask = system.TFPUExceptionMask
TFPUPrecisionMode = system.TFPUPrecisionMode
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)
Value Explanation
ptEndOfPeriod End of period.
ptStartOfPeriod Start of period.
TRoundToRange = - 37..37
TRoundToRange is the range of valid digits to be used in the RoundTo (1020) function.
TValueRelationship = - 1..1
TValueSign = - 1..1
985
CHAPTER 63. REFERENCE FOR UNIT ’MATH’
Description: Arccos returns the inverse cosine of its argument x. The argument x should lie between -1 and 1
(borders included).
Errors: If the argument x is not in the allowed range, an EInvalidArgument exception is raised.
See also: arcsin (987), arcosh (987), arsinh (989), artanh (989)
Listing: ./mathex/ex1.pp
Program Example1 ;
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 ( arccos ( 1 ) ) ;
WriteRadDeg ( arccos ( s q r t ( 3 ) / 2 ) ) ;
WriteRadDeg ( arccos ( s q r t ( 2 ) / 2 ) ) ;
WriteRadDeg ( arccos ( 1 / 2 ) ) ;
WriteRadDeg ( arccos ( 0 ) ) ;
WriteRadDeg ( arccos ( − 1 ) ) ;
end .
63.13.2 ArcCosH
Synopsis: Return inverse hyperbolic cosine
Declaration: function ArcCosH(x: Float) : Float
Visibility: default
986
CHAPTER 63. REFERENCE FOR UNIT ’MATH’
63.13.3 ArCosH
Synopsis: Return inverse hyperbolic cosine
Errors: If the argument x is not in the allowed range, an EInvalidArgument exception is raised.
See also: cosh (992), sinh (1023), arcsin (987), arsinh (989), artanh (989), tanh (1028)
Listing: ./mathex/ex3.pp
Program Example3 ;
Uses math ;
begin
W r i t e l n ( arcosh ( 1 ) ) ;
W r i t e l n ( arcosh ( 2 ) ) ;
end .
63.13.4 ArcSin
Synopsis: Return inverse sine
See also: arccos (986), arcosh (987), arsinh (989), artanh (989)
Listing: ./mathex/ex2.pp
Program Example1 ;
{ Program t o demonstrate t h e a r c s i n f u n c t i o n . }
Uses math ;
Procedure WriteRadDeg (X : f l o a t ) ;
begin
W r i t e l n (X : 8 : 5 , ' rad = ' , radtodeg ( x ) : 8 : 5 , ' degrees . ' )
end ;
begin
WriteRadDeg ( a r c s i n ( 1 ) ) ;
WriteRadDeg ( a r c s i n ( s q r t ( 3 ) / 2 ) ) ;
987
CHAPTER 63. REFERENCE FOR UNIT ’MATH’
WriteRadDeg ( a r c s i n ( sqrt ( 2 ) / 2 ) ) ;
WriteRadDeg ( arcsin ( 1 / 2 ) ) ;
WriteRadDeg ( arcsin ( 0 ) ) ;
WriteRadDeg ( arcsin ( −1));
end .
63.13.5 ArcSinH
Synopsis: Return inverse hyperbolic sine
Declaration: function ArcSinH(x: Float) : Float
Visibility: default
63.13.6 ArcTan2
Synopsis: Return arctangent of (y/x)
Declaration: function ArcTan2(y: Float; x: Float) : Float
Visibility: default
Description: arctan2 calculates arctan(y/x), and returns an angle in the correct quadrant. The returned
ˆ
angle will be in the range $-\pi$ to $\pi$ radians. The values of x and y must be between -2\{}64
ˆ
and 2\{}64, moreover x should be different from zero. On Intel systems this function is implemented
with the native intel fpatan instruction.
See also: arccos (986), arcosh (987), arsinh (989), artanh (989)
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 .
988
CHAPTER 63. REFERENCE FOR UNIT ’MATH’
63.13.7 ArcTanH
Synopsis: Return inverse hyperbolic tangent
63.13.8 ArSinH
Synopsis: Return inverse hyperbolic sine
Declaration: function ArSinH(x: Float) : Float
Visibility: default
Description: arsinh returns the inverse hyperbolic sine of its argument x. The arscsinh variant of this
function is supplied for Delphi compatibility.
Errors: None.
See also: arcosh (987), arccos (986), arcsin (987), artanh (989)
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
Synopsis: Return inverse hyperbolic tangent
Declaration: function ArTanH(x: Float) : Float
Visibility: default
Description: artanh returns the inverse hyperbolic tangent of its argument x, where x should lie in the interval
[-1,1], borders included. The arctanh variant of this function is supplied for Delphi compatibility.
Errors: In case x is not in the interval [-1,1], an EInvalidArgument exception is raised.
See also: arcosh (987), arccos (986), arcsin (987), artanh (989)
Listing: ./mathex/ex5.pp
989
CHAPTER 63. REFERENCE FOR UNIT ’MATH’
Program Example5 ;
{ Program t o demonstrate t h e a r t a n h f u n c t i o n . }
Uses math ;
begin
Writeln ( artanh ( 0 ) ) ;
Writeln ( artanh ( 0 . 5 ) ) ;
end .
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 absolute value of x is larger than maxint, an overflow error will occur.
See also: floor (995)
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 Ceil64
Synopsis: Round to the nearest bigger int64 value
Errors: None.
See also: ceil (990), floor64 (996)
990
CHAPTER 63. REFERENCE FOR UNIT ’MATH’
63.13.12 ClearExceptions
Synopsis: Clear Floating Point Unit exceptions
63.13.13 CompareValue
Synopsis: Compare 2 values
Declaration: function CompareValue(const A: Integer; const B: Integer)
: TValueRelationship
function CompareValue(const A: Int64; const B: Int64)
: TValueRelationship
function CompareValue(const A: QWord; const B: QWord)
: TValueRelationship
function CompareValue(const A: Single; const B: Single; delta: Single)
: TValueRelationship
function CompareValue(const A: Double; const B: Double; delta: Double)
: TValueRelationship
function CompareValue(const A: Extended; const B: Extended;
delta: Extended) : TValueRelationship
Visibility: default
Description: CompareValue compares 2 integer or floating point values A and B and returns one of the follow-
ing values:
-1if A<B
0if A=B
1if A>B
63.13.14 Cosecant
Synopsis: Calculate cosecant
Declaration: function Cosecant(x: Float) : Float
Visibility: default
Description: cosecant calculates the cosecant (1/sin(x)) of its argument x.
Errors: If 0 or 180 degrees is specified, an exception will be raised.
See also: secant (1021)
991
CHAPTER 63. REFERENCE FOR UNIT ’MATH’
63.13.15 CosH
Synopsis: Return hyperbolic cosine
Errors: None.
See also: arcosh (987), sinh (1023), arsinh (989)
Listing: ./mathex/ex8.pp
Program Example8 ;
Uses math ;
begin
W r i t e l n ( Cosh ( 0 ) ) ;
W r i t e l n ( Cosh ( 1 ) ) ;
end .
63.13.16 Cot
Synopsis: Alias for Cotan
Declaration: function Cot(x: Float) : Float
Visibility: default
Description: cot is an alias for the cotan (992) function.
See also: cotan (992)
63.13.17 Cotan
Synopsis: Return cotangent
Declaration: function Cotan(x: Float) : Float
Visibility: default
Description: Cotan returns the cotangent of it’s argument x. The argument x must be in radians. x should be
different from zero.
Errors: If x is zero then a overflow error will occur.
See also: tanh (1028)
Listing: ./mathex/ex9.pp
992
CHAPTER 63. REFERENCE FOR UNIT ’MATH’
Program Example9 ;
Uses math ;
begin
w r i t e l n ( cotan ( p i / 2 ) ) ;
W r i t e l n ( cotan ( p i / 3 ) ) ;
W r i t e l n ( cotan ( p i / 4 ) ) ;
end .
63.13.18 Csc
Synopsis: Alias for cosecant
Declaration: function Csc(x: Float) : Float
Visibility: default
Description: csc is an alias for the cosecant (991) function.
63.13.19 CycleToRad
Synopsis: Convert cycle angle to radians angle
Declaration: function CycleToRad(cycle: Float) : Float
Visibility: default
Description: Cycletorad transforms it’s argument cycle (an angle expressed in cycles) to radians. (1 cycle
is $2 \pi$ radians).
Errors: None.
See also: degtograd (994), degtorad (994), radtodeg (1017), radtograd (1018), radtocycle (1017)
Listing: ./mathex/ex10.pp
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 .
993
CHAPTER 63. REFERENCE FOR UNIT ’MATH’
63.13.20 DegNormalize
Synopsis: Normalize an angle measured in degrees
Description: DegNormalize returns the angle deg as a positive angle between 0 and 360 degrees.
63.13.21 DegToGrad
Synopsis: Convert degree angle to grads angle
Declaration: function DegToGrad(deg: Float) : Float
Visibility: default
Description: Degtograd transforms it’s argument deg (an angle in degrees) to grads. (90 degrees is 100 grad.)
Errors: None.
See also: cycletorad (993), degtorad (994), radtodeg (1017), radtograd (1018), radtocycle (1017)
Listing: ./mathex/ex11.pp
Program Example11 ;
Uses math ;
begin
w r i t e l n ( degtograd ( 9 0 ) ) ;
w r i t e l n ( degtograd ( 1 8 0 ) ) ;
w r i t e l n ( degtograd ( 2 7 0 ) )
end .
63.13.22 DegToRad
Synopsis: Convert degree angle to radians angle.
Declaration: function DegToRad(deg: Float) : Float
Visibility: default
Description: Degtorad converts it’s argument deg (an angle in degrees) to radians. (pi radians is 180 degrees)
Errors: None.
See also: cycletorad (993), degtograd (994), radtodeg (1017), radtograd (1018), radtocycle (1017)
Listing: ./mathex/ex12.pp
994
CHAPTER 63. REFERENCE FOR UNIT ’MATH’
Program Example12 ;
Uses math ;
begin
w r i t e l n ( degtorad ( 4 5 ) ) ;
w r i t e l n ( degtorad ( 9 0 ) ) ;
w r i t e l n ( degtorad ( 1 8 0 ) ) ;
w r i t e l n ( degtorad ( 2 7 0 ) ) ;
w r i t e l n ( degtorad ( 3 6 0 ) ) ;
end .
63.13.23 DivMod
Synopsis: Return DIV and MOD of arguments
Declaration: procedure DivMod(Dividend: LongInt; Divisor: Word; var Result: Word;
var Remainder: Word)
procedure DivMod(Dividend: LongInt; Divisor: Word;
var Result: SmallInt; var Remainder: SmallInt)
procedure DivMod(Dividend: DWord; Divisor: DWord; var Result: DWord;
var Remainder: DWord)
procedure DivMod(Dividend: LongInt; Divisor: LongInt;
var Result: LongInt; var Remainder: LongInt)
Visibility: default
Description: DivMod returns Dividend DIV Divisor in Result, and Dividend MOD Divisor in
Remainder
63.13.24 EnsureRange
Synopsis: Change value so it fits in a specified range.
Declaration: function EnsureRange(const AValue: Integer; const AMin: Integer;
const AMax: Integer) : Integer; Overload
function EnsureRange(const AValue: Int64; const AMin: Int64;
const AMax: Int64) : Int64; Overload
function EnsureRange(const AValue: Double; const AMin: Double;
const AMax: Double) : Double; Overload
Visibility: default
Description: EnsureRange returns Value if AValue is in the range AMin..AMax. It returns AMin if the
value is less than AMin, or AMax if the value is larger than AMax.
See also: InRange (1000)
63.13.25 Floor
Synopsis: Return the largest integer smaller than or equal to argument
Declaration: function Floor(x: Float) : Integer
995
CHAPTER 63. REFERENCE FOR UNIT ’MATH’
Visibility: default
Description: Floor returns the largest integer smaller than or equal to x. The absolute value of x should be less
than maxint.
Errors: If x is larger than maxint, an overflow will occur.
Listing: ./mathex/ex13.pp
Program Example13 ;
{ Program t o demonstrate t h e f l o o r f u n c t i o n . }
Uses math ;
begin
W r i t e l n ( F l o o r ( − 3 . 7 ) ) ; / / should be −4
Writeln ( Floor ( 3 . 7 ) ) ; / / should be 3
W r i t e l n ( F l o o r ( − 4 . 0 ) ) ; / / should be −4
end .
63.13.26 Floor64
Synopsis: Round to the nearest smaller int64 value
Declaration: function Floor64(x: Float) : Int64
Visibility: default
Description: Floor64 rounds the value Xto the nearest smaller int64 value. The result is always smaller than X.
Errors: None.
See also: floor (995), ceil64 (990)
63.13.27 FMod
Synopsis: Floatin point modulo
Declaration: function FMod(const a: Single; const b: Single) : Single; Overload
function FMod(const a: Double; const b: Double) : Double; Overload
function FMod(const a: Extended; const b: Extended) : Extended
; Overload
Visibility: default
Description: FMod is the floating-point equivalent of the modulo operation a mod b. It returns the result of
a-b * Int(a/b)
Errors: b may not be zero, but no check is performed.
996
CHAPTER 63. REFERENCE FOR UNIT ’MATH’
63.13.28 Frexp
Synopsis: Return mantissa and exponent.
Declaration: procedure Frexp(X: Float; var Mantissa: Float; var Exponent: Integer)
Visibility: default
Description: Frexp returns the mantissa and exponent of it’s argument x in mantissa and exponent.
Errors: None
Listing: ./mathex/ex14.pp
Program Example14 ;
{ Program t o demonstrate t h e f r e x p f u n c t i o n . }
Uses math ;
begin
man : = 0 ;
exp : = 0 ;
f r e x p ( x , man , exp ) ;
w r i t e ( x , ' has ' ) ;
W r i t e l n ( ' mantissa ' ,man , ' and exponent ' , exp ) ;
end ;
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.29 FutureValue
Synopsis: Calculate the future value of an investment.
Declaration: function FutureValue(ARate: Float; NPeriods: Integer; APayment: Float;
APresentValue: Float; APaymentTime: TPaymentTime)
: Float
Visibility: default
Description: FutureValue calculates the future value of an investment (FV) in the cash flow formula (see Cash-
FlowFunctions (980)) The function result is the future value of an investment of APresentValue
(PV), where 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 annu-
ity 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.
997
CHAPTER 63. REFERENCE FOR UNIT ’MATH’
See also: InterestRate (1000), NumberOfPeriods (1013), Payment (1014), PresentValue (1017), TPayment-
Time (985), CashFlowFunctions (980)
63.13.30 GetExceptionMask
Synopsis: Get the Floating Point Unit exception mask.
Declaration: function GetExceptionMask : TFPUExceptionMask
Visibility: default
Description: Get the Floating Point Unit exception mask.
63.13.31 GetPrecisionMode
Synopsis: Return the Floating Point Unit precision mode.
63.13.32 GetRoundMode
Synopsis: Return the Floating Point Unit rounding mode.
Declaration: function GetRoundMode : TFPURoundingMode
Visibility: default
Description: Return the Floating Point Unit rounding mode.
63.13.33 GradToDeg
Synopsis: Convert grads angle to degrees angle
Declaration: function GradToDeg(grad: Float) : Float
Visibility: default
Description: Gradtodeg converts its argument grad (an angle in grads) to degrees. (100 grad is 90 degrees)
Errors: None.
See also: cycletorad (993), degtograd (994), radtodeg (1017), radtograd (1018), radtocycle (1017), gradtorad
(999)
Listing: ./mathex/ex15.pp
Program Example15 ;
Uses math ;
begin
998
CHAPTER 63. REFERENCE FOR UNIT ’MATH’
w r i t e l n ( gradtodeg ( 1 0 0 ) ) ;
w r i t e l n ( gradtodeg ( 2 0 0 ) ) ;
w r i t e l n ( gradtodeg ( 3 0 0 ) ) ;
end .
63.13.34 GradToRad
Synopsis: Convert grads angle to radians angle
Declaration: function GradToRad(grad: Float) : Float
Visibility: default
Description: Gradtorad converts its argument grad (an angle in grads) to radians. (200 grad is pi degrees).
Errors: None.
See also: cycletorad (993), degtograd (994), radtodeg (1017), radtograd (1018), radtocycle (1017), gradtodeg
(998)
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.35 Hypot
Synopsis: Return hypotenuse of triangle
Declaration: function Hypot(x: Float; y: Float) : Float
Visibility: default
Description: Hypot returns the hypotenuse of the triangle where the sides adjacent to the square angle have
lengths x and y. The function uses Pythagoras’ rule for this.
Errors: None.
Listing: ./mathex/ex17.pp
Program Example17 ;
Uses math ;
begin
W r i t e l n ( hypot ( 3 , 4 ) ) ; / / should be 5
end .
999
CHAPTER 63. REFERENCE FOR UNIT ’MATH’
63.13.36 IfThen
Synopsis: Return one of two values, depending on a boolean condition
63.13.37 InRange
Synopsis: Check whether value is in range.
Declaration: function InRange(const AValue: Integer; const AMin: Integer;
const AMax: Integer) : Boolean; Overload
function InRange(const AValue: Int64; const AMin: Int64;
const AMax: Int64) : Boolean; Overload
function InRange(const AValue: Double; const AMin: Double;
const AMax: Double) : Boolean; Overload
Visibility: default
Description: InRange returns True if AValue is in the range AMin..AMax. It returns False if Value lies
outside the specified range.
See also: EnsureRange (995)
63.13.38 InterestRate
Synopsis: Calculate the interest rate value of an investment
1000
CHAPTER 63. REFERENCE FOR UNIT ’MATH’
63.13.39 IntPower
Synopsis: Return integer power.
Errors: If base is zero and the exponent is negative, then an overflow error will occur.
See also: power (1016)
Listing: ./mathex/ex18.pp
Program Example18 ;
{ Program t o demonstrate t h e i n t p o w e r f u n c t i o n . }
Uses math ;
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.40 IsInfinite
Synopsis: Check whether value is infinite
Declaration: function IsInfinite(const d: Single) : Boolean; Overload
function IsInfinite(const d: Double) : Boolean; Overload
function IsInfinite(const d: Extended) : Boolean; Overload
Visibility: default
Description: IsInfinite returns True if the double d contains the infinite value.
See also: IsZero (1002), IsInfinite (1001)
63.13.41 IsNan
Synopsis: Check whether value is Not a Number
1001
CHAPTER 63. REFERENCE FOR UNIT ’MATH’
63.13.42 IsZero
Synopsis: Check whether value is zero
Declaration: function IsZero(const A: Single; Epsilon: Single) : Boolean; Overload
function IsZero(const A: Single) : Boolean; Overload
function IsZero(const A: Double; Epsilon: Double) : Boolean; Overload
function IsZero(const A: Double) : Boolean; Overload
function IsZero(const A: Extended; Epsilon: Extended) : Boolean
; Overload
function IsZero(const A: Extended) : Boolean; Overload
Visibility: default
Description: IsZero checks whether the 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 (1001), IsInfinite (1001), SameValue (1020)
63.13.43 Ldexp
Synopsis: Return (2 to the power p) times x
Declaration: function Ldexp(x: Float; const p: Integer) : Float
Visibility: default
Description: Ldexp returns (2 to the power p) times x.
Errors: None.
See also: lnxp1 (1003), log10 (1003), log2 (1004), logn (1004)
Listing: ./mathex/ex19.pp
Program Example19 ;
{ Program t o demonstrate t h e l d e x p f u n c t i o n . }
Uses math ;
begin
writeln ( ldexp ( 2 , 4 ) : 8 : 4 ) ;
writeln ( ldexp ( 0 . 5 , 3 ) : 8 : 4 ) ;
end .
1002
CHAPTER 63. REFERENCE FOR UNIT ’MATH’
63.13.44 LnXP1
Synopsis: Return natural logarithm of 1+X
Declaration: function LnXP1(x: Float) : Float
Visibility: default
Description: Lnxp1 returns the natural logarithm of 1+X. The result is more precise for small values of x. x
should be larger than -1.
Errors: If $x\leq -1$ then an EInvalidArgument exception will be raised.
See also: ldexp (1002), log10 (1003), log2 (1004), logn (1004)
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.45 Log10
Synopsis: Return 10-Based logarithm.
Declaration: function Log10(x: Float) : Float
Visibility: default
Description: Log10 returns the 10-base logarithm of X.
Errors: If x is less than or equal to 0 an ’invalid fpu operation’ error will occur.
See also: ldexp (1002), lnxp1 (1003), log2 (1004), logn (1004)
Listing: ./mathex/ex21.pp
Program Example21 ;
Uses math ;
begin
W r i t e l n ( Log10 ( 1 0 ) : 8 : 4 ) ;
W r i t e l n ( Log10 ( 1 0 0 ) : 8 : 4 ) ;
W r i t e l n ( Log10 ( 1 0 0 0 ) : 8 : 4 ) ;
W r i t e l n ( Log10 ( 1 ) : 8 : 4 ) ;
W r i t e l n ( Log10 ( 0 . 1 ) : 8 : 4 ) ;
W r i t e l n ( Log10 ( 0 . 0 1 ) : 8 : 4 ) ;
W r i t e l n ( Log10 ( 0 . 0 0 1 ) : 8 : 4 ) ;
end .
1003
CHAPTER 63. REFERENCE FOR UNIT ’MATH’
63.13.46 Log2
Synopsis: Return 2-based logarithm
Errors: If x is less than or equal to 0 an ’invalid fpu operation’ error will occur.
See also: ldexp (1002), lnxp1 (1003), log10 (1003), logn (1004)
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.47 LogN
Synopsis: Return N-based logarithm.
Declaration: function LogN(n: Float; x: Float) : Float
Visibility: default
Listing: ./mathex/ex23.pp
Program Example23 ;
{ Program t o demonstrate t h e l o g n f u n c t i o n . }
Uses math ;
begin
W r i t e l n ( Logn ( 3 , 4 ) : 8 : 4 ) ;
W r i t e l n ( Logn ( 2 , 4 ) : 8 : 4 ) ;
W r i t e l n ( Logn ( 6 , 9 ) : 8 : 4 ) ;
W r i t e l n ( Logn ( exp ( 1 ) , exp ( 1 ) ) : 8 : 4 ) ;
1004
CHAPTER 63. REFERENCE FOR UNIT ’MATH’
W r i t e l n ( Logn ( 0 . 5 , 1 ) : 8 : 4 ) ;
W r i t e l n ( Logn ( 0 . 2 5 , 3 ) : 8 : 4 ) ;
W r i t e l n ( Logn ( 0 . 1 2 5 , 5 ) : 8 : 4 ) ;
end .
63.13.48 Max
Synopsis: Return largest of 2 values
Declaration: function Max(a: Integer; b: Integer) : Integer; Overload
function Max(a: Int64; b: Int64) : Int64; Overload
function Max(a: QWord; b: QWord) : QWord; Overload
function Max(a: Single; b: Single) : Single; Overload
function Max(a: Double; b: Double) : Double; Overload
function Max(a: Extended; b: Extended) : Extended; Overload
Visibility: default
Description: Max returns the maximum of Int1 and Int2.
Errors: None.
See also: min (1009), maxIntValue (1005), maxvalue (1006)
Listing: ./mathex/ex24.pp
Program Example24 ;
Uses math ;
Var
A,B : Cardinal ;
begin
A: = 1 ; b : = 2 ;
w r i t e l n ( max ( a , b ) ) ;
end .
63.13.49 MaxIntValue
Synopsis: Return largest element in integer array
Declaration: function MaxIntValue(const Data: Array of Integer) : Integer
Visibility: default
Description: MaxIntValue returns the largest integer out of the Data array.
This function is provided for Delphi compatibility, use the maxvalue (1006) function instead.
Errors: None.
See also: maxvalue (1006), minvalue (1010), minIntValue (1009)
Listing: ./mathex/ex25.pp
1005
CHAPTER 63. REFERENCE FOR UNIT ’MATH’
Program Example25 ;
{ Make sore i n t e g e r i s 32 b i t }
{ $mode o b j f p c }
Uses math ;
Type
TExArray = Array [ 1 . . 1 0 0 ] of I n t e g e r ;
Var
I : Integer ;
ExArray : TExArray ;
begin
Randomize ;
f o r I : = low ( 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.50 MaxValue
Synopsis: Return largest value in array
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.
Listing: ./mathex/ex26.pp
program Example26 ;
{ Make sore i n t e g e r i s 32 b i t }
{ $mode o b j f p c }
uses math ;
1006
CHAPTER 63. REFERENCE FOR UNIT ’MATH’
var i : 1 . . 1 0 0 ;
f _ a r r a y : array [ 1 . . 1 0 0 ] of F l o a t ;
i _ a r r a y : array [ 1 . . 1 0 0 ] of I n t e g e r ;
Pf_array : P f l o a t ;
PI_array : Pinteger ;
begin
randomize ;
P f _ a r r a y : = @f_array [ 1 ] ;
P i _ a r r a y : = @i_array [ 1 ] ;
f o r i : = low ( f _ a r r a y ) to high ( f _ a r r a y ) do
f _ a r r a y [ i ] : = ( random−random ) * 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 ) ;
63.13.51 Mean
Synopsis: Return mean value of array
Declaration: function Mean(const data: Array of Single) : Float
function Mean(const data: PSingle; const N: LongInt) : Float
function Mean(const data: Array of Double) : Float
function Mean(const data: PDouble; const N: LongInt) : Float
function Mean(const data: Array of Extended) : Float
function Mean(const data: PExtended; const N: LongInt) : Float
function Mean(const data: PInt64; const N: LongInt) : Float
function Mean(const data: Array of Int64) : Float
function Mean(const data: PInteger; const N: LongInt) : Float
function Mean(const data: Array of Integer) : Float
Visibility: default
Description: Mean returns the average value of data. The second form accepts a pointer to an array of N values.
Errors: None.
See also: meanandstddev (1008), momentskewkurtosis (1011), sum (1024)
Listing: ./mathex/ex27.pp
Program Example27 ;
Type
1007
CHAPTER 63. REFERENCE FOR UNIT ’MATH’
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 ] : = ( Random−Random) * 1 0 0 ;
W r i t e l n ( ' Max : ' , MaxValue ( ExArray ) : 8 : 4 ) ;
W r i t e l n ( ' Min : ' , MinValue ( ExArray ) : 8 : 4 ) ;
W r i t e l n ( ' Mean : ' ,Mean ( ExArray ) : 8 : 4 ) ;
W r i t e l n ( ' Mean ( b ) : ' ,Mean ( PExtended ( @ExArray [ 1 ] ) , 1 0 0 ) : 8 : 4 ) ;
end .
63.13.52 MeanAndStdDev
Synopsis: Return mean and standard deviation of array
Declaration: procedure MeanAndStdDev(const data: Array of Single; var mean: Float;
var stddev: Float)
procedure MeanAndStdDev(const data: PSingle; const N: LongInt;
var mean: Float; var stddev: Float)
procedure MeanAndStdDev(const data: Array of Double; var mean: Float;
var stddev: Float)
procedure MeanAndStdDev(const data: PDouble; const N: LongInt;
var mean: Float; var stddev: Float)
procedure MeanAndStdDev(const data: Array of Extended; var mean: Float;
var stddev: Float)
procedure MeanAndStdDev(const data: PExtended; const N: LongInt;
var mean: Float; var stddev: Float)
Visibility: default
Description: meanandstddev calculates the mean and standard deviation of data and returns the result in
mean and stddev, respectively. Stddev is zero if there is only one value. The second form accepts
a pointer to an array of N values.
Errors: None.
See also: mean (1007), sum (1024), sumofsquares (1025), momentskewkurtosis (1011)
Listing: ./mathex/ex28.pp
Program Example28 ;
Uses math ;
Type
TExArray = Array [ 1 . . 1 0 0 ] of Extended ;
Var
1008
CHAPTER 63. REFERENCE FOR UNIT ’MATH’
I : Integer ;
ExArray : TExArray ;
Mean , stddev : Extended ;
begin
Randomize ;
f o r I : = low ( ExArray ) to high ( ExArray ) do
ExArray [ i ] : = ( Random−Random) * 1 0 0 ;
MeanAndStdDev ( ExArray , Mean , StdDev ) ;
W r i t e l n ( ' Mean : ' ,Mean : 8 : 4 ) ;
W r i t e l n ( ' StdDev : ' , StdDev : 8 : 4 ) ;
MeanAndStdDev ( @ExArray [ 1 ] , 1 0 0 , Mean , StdDev ) ;
W r i t e l n ( ' Mean ( b ) : ' ,Mean : 8 : 4 ) ;
W r i t e l n ( ' StdDev ( b ) : ' , StdDev : 8 : 4 ) ;
end .
63.13.53 Min
Synopsis: Return smallest of two values.
Declaration: function Min(a: Integer; b: Integer) : Integer; Overload
function Min(a: Int64; b: Int64) : Int64; Overload
function Min(a: QWord; b: QWord) : QWord; Overload
function Min(a: Single; b: Single) : Single; Overload
function Min(a: Double; b: Double) : Double; Overload
function Min(a: Extended; b: Extended) : Extended; Overload
Visibility: default
Description: min returns the smallest value of Int1 and Int2;
Errors: None.
See also: max (1005)
Listing: ./mathex/ex29.pp
Program Example29 ;
Uses math ;
Var
A,B : Cardinal ;
begin
A: = 1 ; b : = 2 ;
w r i t e l n ( min ( a , b ) ) ;
end .
63.13.54 MinIntValue
Synopsis: Return smallest value in integer array
Declaration: function MinIntValue(const Data: Array of Integer) : Integer
1009
CHAPTER 63. REFERENCE FOR UNIT ’MATH’
Visibility: default
Description: MinIntvalue returns the smallest value in the Data array.
This function is provided for Delphi compatibility, use minvalue instead.
Errors: None
Listing: ./mathex/ex30.pp
Program Example30 ;
{ Program t o demonstrate t h e M i n I n t V a l u e f u n c t i o n . }
{ Make sore i n t e g e r i s 32 b i t }
{ $mode o b j f p c }
Uses math ;
Type
TExArray = Array [ 1 . . 1 0 0 ] of I n t e g e r ;
Var
I : Integer ;
ExArray : TExArray ;
begin
Randomize ;
f o r I : = low ( ExArray ) to high ( ExArray ) do
ExArray [ i ] : = Random( I )−Random( 1 0 0 ) ;
W r i t e l n ( M i n I n t V a l u e ( ExArray ) ) ;
end .
63.13.55 MinValue
Synopsis: Return smallest value in array
Declaration: function MinValue(const data: Array of Single) : Single
function MinValue(const data: PSingle; const N: Integer) : Single
function MinValue(const data: Array of Double) : Double
function MinValue(const data: PDouble; const N: Integer) : Double
function MinValue(const data: Array of Extended) : Extended
function MinValue(const data: PExtended; const N: Integer) : Extended
function MinValue(const data: Array of Integer) : Integer
function MinValue(const Data: PInteger; const N: Integer) : Integer
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 (1005), maxvalue (1006), minIntValue (1009)
1010
CHAPTER 63. REFERENCE FOR UNIT ’MATH’
Listing: ./mathex/ex31.pp
program Example31 ;
{ Make sure i n t e g e r i s 32 b i t }
{ $mode o b j f p c }
uses math ;
var i : 1 . . 1 0 0 ;
f _ a r r a y : array [ 1 . . 1 0 0 ] of F l o a t ;
i _ a r r a y : array [ 1 . . 1 0 0 ] of I n t e g e r ;
Pf_array : P f l o a t ;
PI_array : Pinteger ;
begin
randomize ;
P f _ a r r a y : = @f_array [ 1 ] ;
P i _ a r r a y : = @i_array [ 1 ] ;
f o r i : = low ( f _ a r r a y ) to high ( f _ a r r a y ) do
f _ a r r a y [ i ] : = ( random−random ) * 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 ) ;
63.13.56 modulus(Float,Float):Float
Synopsis: Floating point modulo
Declaration: operator mod(const a: Float; const b: Float) : Float
Visibility: default
Description: Modulus is the floating-point equivalent of the modulo operation a mod b. It returns the result
of
a-b * Int(a/b)
Errors: b may not be zero, but no check is performed.
See also: FMod (996)
63.13.57 MomentSkewKurtosis
Synopsis: Return 4 first moments of distribution
Declaration: procedure MomentSkewKurtosis(const data: Array of Single;
out m1: Float; out m2: Float;
out m3: Float; out m4: Float;
1011
CHAPTER 63. REFERENCE FOR UNIT ’MATH’
Description: momentskewkurtosis calculates the 4 first moments of the distribution of value in data and
returns them in m1,m2,m3 and m4, as well as the skew and kurtosis.
Errors: None.
See also: mean (1007), meanandstddev (1008)
Listing: ./mathex/ex32.pp
program Example32 ;
uses math ;
var d i s t a r r a y : array [ 1 . . 1 0 0 0 ] of f l o a t ;
I : longint ;
m1, m2, m3, m4, skew , k u r t o s i s : f l o a t ;
begin
randomize ;
f o r I : = low ( d i s t a r r a y ) to high ( d i s t a r r a y ) do
d i s t a r r a y [ i ] : = random ;
momentskewkurtosis ( D i s t A r r a y , m1, m2, m3, m4, skew , k u r t o s i s ) ;
1012
CHAPTER 63. REFERENCE FOR UNIT ’MATH’
63.13.58 Norm
Synopsis: Return Euclidean norm
Declaration: function Norm(const data: Array of Single) : Float
function Norm(const data: PSingle; const N: Integer) : Float
function Norm(const data: Array of Double) : Float
function Norm(const data: PDouble; const N: Integer) : Float
function Norm(const data: Array of Extended) : Float
function Norm(const data: PExtended; const N: Integer) : Float
Visibility: default
Description: Norm calculates the Euclidean 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 (1025)
Listing: ./mathex/ex33.pp
program Example33 ;
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 .
63.13.59 NumberOfPeriods
Synopsis: Calculate the number of periods for an investment
Declaration: function NumberOfPeriods(ARate: Float; APayment: Float;
APresentValue: Float; AFutureValue: Float;
APaymentTime: TPaymentTime) : Float
Visibility: default
Description: NumberOfPeriods calculates the number of periods (n) needed to obtain future value of an
investment in the cash flow formula (see CashFlowFunctions (980)). The function result is the
number of periods a payment APayment (PMT) must be paid in order to obtain a future value
AFutureValue for an investment of a start value APresentValue (PV), where APayment
(PMT) is invested at a rate ARate (q).
The APaymentTime parameter determines whether the investment (payment) is an ordinary annu-
ity or an annuity due: ptEndOfPeriod NumberOfPeriods 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 (997), InterestRate (1000), Payment (1014), PresentValue (1017), TPaymentTime (985),
CashFlowFunctions (980)
1013
CHAPTER 63. REFERENCE FOR UNIT ’MATH’
63.13.60 Payment
Synopsis: Calculate the payment for an investment
63.13.61 PopnStdDev
Synopsis: Return Population standard deviation
Declaration: function PopnStdDev(const data: Array of Single) : Float
function PopnStdDev(const data: PSingle; const N: Integer) : Float
function PopnStdDev(const data: Array of Double) : Float
function PopnStdDev(const data: PDouble; const N: Integer) : Float
function PopnStdDev(const data: Array of Extended) : Float
function PopnStdDev(const data: PExtended; const N: Integer) : Float
Visibility: default
Description: Popnstddev returns the square root of the population variance of the values in the Data array. It
returns zero if there is only one value.
The second form of this function accepts a pointer to an array of N values.
Errors: None.
See also: popnvariance (1015), mean (1007), meanandstddev (1008), stddev (1023), momentskewkurtosis
(1011)
Listing: ./mathex/ex35.pp
Program Example35 ;
Uses Math ;
Type
TExArray = Array [ 1 . . 1 0 0 ] of F l o a t ;
1014
CHAPTER 63. REFERENCE FOR UNIT ’MATH’
Var
I : Integer ;
ExArray : TExArray ;
begin
Randomize ;
f o r I : = low ( ExArray ) to high ( ExArray ) do
ExArray [ i ] : = ( Random−Random) * 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.62 PopnVariance
Synopsis: Return population variance
Declaration: function PopnVariance(const data: PSingle; const N: Integer) : Float
function PopnVariance(const data: Array of Single) : Float
function PopnVariance(const data: PDouble; const N: Integer) : Float
function PopnVariance(const data: Array of Double) : Float
function PopnVariance(const data: PExtended; const N: Integer) : Float
function PopnVariance(const data: Array of Extended) : Float
Visibility: default
Description: Popnvariance the population variance of the values in the Data array. It returns zero if there is
only one value.
The second form of this function accepts a pointer to an array of N values.
Errors: None.
See also: popnstddev (1014), mean (1007), meanandstddev (1008), stddev (1023), momentskewkurtosis (1011)
Listing: ./mathex/ex36.pp
Program Example36 ;
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 ] : = ( Random−Random) * 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 .
1015
CHAPTER 63. REFERENCE FOR UNIT ’MATH’
63.13.63 Power
Synopsis: Return real power.
Errors: Any number of floating point math exceptions may be raised, if they are not masked by SetExcep-
tionMask (1021).
See also: intpower (1001)
Listing: ./mathex/ex34.pp
Program Example34 ;
Uses Math ;
procedure dopower ( x , y : f l o a t ) ;
begin
w r i t e l n ( x : 8 : 6 , ' ^ ' , y : 8 : 6 , ' = ' , power ( x , y ) : 8 : 6 )
end ;
begin
dopower ( 2 , 2 ) ;
dopower ( 2 , − 2 ) ;
dopower ( 2 , 0 . 0 ) ;
end .
63.13.64 power(Float,Float):Float
Synopsis: Raise base to the power exponent
Declaration: operator **(bas: Float; expo: Float) : Float
Visibility: default
Description: Power raises base to the power exponent, i.e., it calculates baseêxponent.
63.13.65 power(Int64,Int64):Int64
Synopsis: Raise base to the power exponent
Declaration: operator **(bas: Int64; expo: Int64) : Int64
Visibility: default
Description: Power raises base to the power exponent, i.e., it calculates baseêxponent.
1016
CHAPTER 63. REFERENCE FOR UNIT ’MATH’
63.13.66 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 (980)) 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 annu-
ity 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 (997), InterestRate (1000), NumberOfPeriods (1013), Payment (1014), TPaymentTime
(985), CashFlowFunctions (980)
63.13.67 RadToCycle
Synopsis: Convert radians angle to cycle angle
Declaration: function RadToCycle(rad: Float) : Float
Visibility: default
Description: Radtocycle converts its argument rad (an angle expressed in radians) to an angle in cycles.
(1 cycle equals 2 pi radians)
Errors: None.
See also: degtograd (994), degtorad (994), radtodeg (1017), radtograd (1018), cycletorad (993)
Listing: ./mathex/ex37.pp
Program Example37 ;
{ Program t o demonstrate t h e r a d t o c y c l e f u n c t i o n . }
Uses math ;
begin
writeln ( radtocycle (2* pi ) : 8 : 6 ) ;
writeln ( radtocycle ( pi ) : 8 : 6 ) ;
writeln ( radtocycle ( pi / 2 ) : 8 : 6 ) ;
end .
63.13.68 RadToDeg
Synopsis: Convert radians angle to degrees angle
Declaration: function RadToDeg(rad: Float) : Float
Visibility: default
1017
CHAPTER 63. REFERENCE FOR UNIT ’MATH’
Description: Radtodeg converts its argument rad (an angle expressed in radians) to an angle in degrees. (180
degrees equals pi radians)
Errors: None.
See also: degtograd (994), degtorad (994), radtocycle (1017), radtograd (1018), cycletorad (993)
Listing: ./mathex/ex38.pp
Program Example38 ;
Uses math ;
begin
w r i t e l n ( radtodeg ( 2 * p i ) : 8 : 6 ) ;
w r i t e l n ( radtodeg ( p i ) : 8 : 6 ) ;
w r i t e l n ( radtodeg ( p i / 2 ) : 8 : 6 ) ;
end .
63.13.69 RadToGrad
Synopsis: Convert radians angle to grads angle
Declaration: function RadToGrad(rad: Float) : Float
Visibility: default
Description: Radtodeg converts its argument rad (an angle expressed in radians) to an angle in grads.
(200 grads equals pi radians)
Errors: None.
See also: degtograd (994), degtorad (994), radtocycle (1017), radtodeg (1017), cycletorad (993)
Listing: ./mathex/ex39.pp
Program Example39 ;
{ Program t o demonstrate t h e r a d t o g r a d f u n c t i o n . }
Uses math ;
begin
writeln ( radtograd (2* pi ) : 8 : 6 ) ;
writeln ( radtograd ( pi ) : 8 : 6 ) ;
writeln ( radtograd ( pi / 2 ) : 8 : 6 ) ;
end .
63.13.70 RandG
Synopsis: Return gaussian distributed random number.
Declaration: function RandG(mean: Float; stddev: Float) : Float
Visibility: default
1018
CHAPTER 63. REFERENCE FOR UNIT ’MATH’
Description: randg returns a random number which - when produced in large quantities - has a Gaussian distri-
bution with mean mean and standarddeviation stddev.
Errors: None.
See also: mean (1007), stddev (1023), meanandstddev (1008)
Listing: ./mathex/ex40.pp
Program Example40 ;
Uses Math ;
Var
I : Integer ;
ExArray : Array [ 1 . . 1 0 0 0 0 ] of F l o a t ;
Mean , stddev : F l o a t ;
begin
Randomize ;
f o r I : = low ( ExArray ) to high ( ExArray ) do
ExArray [ i ] : = Randg ( 1 , 0 . 2 ) ;
MeanAndStdDev ( ExArray , Mean , StdDev ) ;
W r i t e l n ( ' Mean : ' ,Mean : 8 : 4 ) ;
W r i t e l n ( ' StdDev : ' , StdDev : 8 : 4 ) ;
end .
63.13.71 RandomFrom
Synopsis: Return a random element of an array of numbers
Declaration: function RandomFrom(const AValues: Array of Double) : Double; Overload
function RandomFrom(const AValues: Array of Integer) : Integer
; Overload
function RandomFrom(const AValues: Array of Int64) : Int64; Overload
Visibility: default
Description: RandomFrom returns a random element from the array AValues. The return value has the same
type as the type of the array elements.
See also: #rtl.system.Random (1512), RandomRange (1019)
63.13.72 RandomRange
Synopsis: Return a random number in a range
Declaration: function RandomRange(const aFrom: Integer; const aTo: Integer) : Integer
function RandomRange(const aFrom: Int64; const aTo: Int64) : Int64
Visibility: default
Description: RandomRange returns a random value in the range AFrom to ATo. AFrom and ATo do not need
to be in increasing order. The upper border is not included in the generated value, but the lower
border is.
See also: #rtl.system.Random (1512), RandomFrom (1019)
1019
CHAPTER 63. REFERENCE FOR UNIT ’MATH’
63.13.73 RoundTo
Synopsis: Round to the specified number of digits
Errors: An exception may occur if the value AValue is not inside a valid integer (or Int64) range.
See also: TRoundToRange (985), SimpleRoundTo (1022), SetRoundMode (1021), TFPURoundingMode (985)
63.13.74 SameValue
Synopsis: Check whether 2 float values are the same
Visibility: default
Description: SameValue returns True if the floating-point values A and B are the same, i.e. whether the
absolute value of their their difference is smaller than Epsilon. If their difference is larger, then
False is returned.
If unspecified, the default value for Epsilon is 0.0.
See also: MinFloat (984), IsZero (1002)
63.13.75 Sec
Synopsis: Alias for secant
Declaration: function Sec(x: Float) : Float
Visibility: default
Description: sec is an alias for the secant (1021) function.
See also: secant (1021)
1020
CHAPTER 63. REFERENCE FOR UNIT ’MATH’
63.13.76 Secant
Synopsis: Calculate secant
63.13.77 SetExceptionMask
Synopsis: Set the Floating Point Unit exception mask.
Declaration: function SetExceptionMask(const Mask: TFPUExceptionMask)
: TFPUExceptionMask
Visibility: default
Description: Set the Floating Point Unit exception mask.
63.13.78 SetPrecisionMode
Synopsis: Set the Floating Point Unit precision mode.
Declaration: function SetPrecisionMode(const Precision: TFPUPrecisionMode)
: TFPUPrecisionMode
Visibility: default
63.13.79 SetRoundMode
Synopsis: Set the Floating Point Unit rounding mode.
Declaration: function SetRoundMode(const RoundMode: TFPURoundingMode)
: TFPURoundingMode
Visibility: default
Description: SetRoundMode sets the floating point unit rounding mode. It also returns the previous rounding
mode.
1021
CHAPTER 63. REFERENCE FOR UNIT ’MATH’
63.13.80 Sign
Synopsis: Return sign of argument
Visibility: default
Description: Sign returns the sign of it’s 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.81 SimpleRoundTo
Synopsis: Round to the specified number of digits (rounding up if needed)
Declaration: function SimpleRoundTo(const AValue: Single;
const Digits: TRoundToRange) : Single
function SimpleRoundTo(const AValue: Double;
const Digits: TRoundToRange) : Double
function SimpleRoundTo(const AValue: Extended;
const Digits: TRoundToRange) : Extended
Visibility: default
Description: SimpleRoundTo rounds the specified float AValue to the specified number of digits using
symmetric arithmetic rounding (rounding up for positive or down for negative) and returns the result.
This result is accurate to "10 to the power Digits". It uses the standard Round function for this.
Errors: An exception may occur if the value AValue is not inside a valid integer (or Int64) range.
See also: TRoundToRange (985), RoundTo (1020)
63.13.82 SinCos
Synopsis: Return sine and cosine of argument
Declaration: procedure SinCos(theta: single; out sinus: single; out cosinus: single)
procedure SinCos(theta: Double; out sinus: Double; out cosinus: Double)
procedure SinCos(theta: extended; out sinus: extended;
out cosinus: extended)
Visibility: default
Description: Sincos calculates the sine and cosine of the angle theta, and returns the result in sinus and
cosinus.
On Intel hardware, This calculation will be faster than making 2 calls to calculate the sine and cosine
separately.
Errors: None.
See also: arcsin (987), arccos (986)
Listing: ./mathex/ex41.pp
1022
CHAPTER 63. REFERENCE FOR UNIT ’MATH’
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 ;
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.83 SinH
Synopsis: Return hyperbolic sine
Declaration: function SinH(x: Float) : Float
Visibility: default
Description: Sinh returns the hyperbolic sine of its argument x.
See also: cosh (992), arsinh (989), tanh (1028), artanh (989)
Listing: ./mathex/ex42.pp
Program Example42 ;
{ Program t o demonstrate t h e s i n h f u n c t i o n . }
Uses math ;
begin
writeln ( sinh ( 0 ) ) ;
writeln ( sinh ( 1 ) ) ;
writeln ( sinh ( −1));
end .
63.13.84 StdDev
Synopsis: Return standard deviation of data
1023
CHAPTER 63. REFERENCE FOR UNIT ’MATH’
Errors: None.
See also: mean (1007), meanandstddev (1008), variance (1029), totalvariance (1028)
Listing: ./mathex/ex43.pp
Program Example40 ;
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 [ 1 ] , 1 0 0 0 0 ) : 8 : 4 ) ;
end .
63.13.85 Sum
Synopsis: Return sum of values
Errors: None.
1024
CHAPTER 63. REFERENCE FOR UNIT ’MATH’
See also: sumofsquares (1025), sumsandsquares (1026), totalvariance (1028), variance (1029)
Listing: ./mathex/ex44.pp
Program Example44 ;
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 ] : = ( Random−Random) * 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.86 SumInt
Synopsis: Return the sum of an array of integers
Declaration: function SumInt(const data: PInt64; const N: LongInt) : Int64
function SumInt(const data: Array of Int64) : Int64
function SumInt(const data: PInteger; const N: LongInt) : Int64
function SumInt(const data: Array of Integer) : Int64
Visibility: default
Description: SumInt returns the sum of the N integers in the Data array, where this can be an open array or a
pointer to an array.
Errors: An overflow may occur.
63.13.87 SumOfSquares
Synopsis: Return sum of squares of values
Declaration: function SumOfSquares(const data: Array of Single) : Float
function SumOfSquares(const data: PSingle; const N: Integer) : Float
function SumOfSquares(const data: Array of Double) : Float
function SumOfSquares(const data: PDouble; const N: Integer) : Float
function SumOfSquares(const data: Array of Extended) : Float
function SumOfSquares(const data: PExtended; const N: Integer) : Float
Visibility: default
Description: Sumofsquares returns the sum of the squares of the values in the data array.
The second form of the function accepts a pointer to an array of N values.
1025
CHAPTER 63. REFERENCE FOR UNIT ’MATH’
Errors: None.
See also: sum (1024), sumsandsquares (1026), totalvariance (1028), variance (1029)
Listing: ./mathex/ex45.pp
Program Example45 ;
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 ] : = ( Random−Random) * 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.88 SumsAndSquares
Synopsis: Return sum and sum of squares of values.
Declaration: procedure SumsAndSquares(const data: Array of Single; var sum: Float;
var sumofsquares: Float)
procedure SumsAndSquares(const data: PSingle; const N: Integer;
var sum: Float; var sumofsquares: Float)
procedure SumsAndSquares(const data: Array of Double; var sum: Float;
var sumofsquares: Float)
procedure SumsAndSquares(const data: PDouble; const N: Integer;
var sum: Float; var sumofsquares: Float)
procedure SumsAndSquares(const data: Array of Extended; var sum: Float;
var sumofsquares: Float)
procedure SumsAndSquares(const data: PExtended; const N: Integer;
var sum: Float; var sumofsquares: Float)
Visibility: default
Description: sumsandsquares calculates the sum of the values and the sum of the squares of the values in the
data array and returns the results in sum and sumofsquares.
The second form of the function accepts a pointer to an array of N values.
Errors: None.
See also: sum (1024), sumofsquares (1025), totalvariance (1028), variance (1029)
Listing: ./mathex/ex46.pp
1026
CHAPTER 63. REFERENCE FOR UNIT ’MATH’
Program Example45 ;
Uses math ;
Var
I : 1..100;
ExArray : Array [ 1 . . 1 0 0 ] of F l o a t ;
s , ss : f l o a t ;
begin
Randomize ;
f o r I : = low ( ExArray ) to high ( ExArray ) do
ExArray [ i ] : = ( Random−Random) * 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.89 Tan
Synopsis: Return tangent
Declaration: function Tan(x: Float) : Float
Visibility: default
Description: Tan returns the tangent of x. The argument x must be in radians.
Errors: If x (normalized) is pi/2 or 3pi/2 then an overflow will occur.
See also: tanh (1028), arcsin (987), sincos (1022), arccos (986)
Listing: ./mathex/ex47.pp
Program Example47 ;
Uses math ;
begin
Write ( ' Angle : ' , RadToDeg ( Angle ) : 8 : 6 ) ;
W r i t e l n ( ' Tangent : ' , Tan ( Angle ) : 8 : 6 ) ;
end ;
begin
1027
CHAPTER 63. REFERENCE FOR UNIT ’MATH’
DoTan ( 0 ) ;
DoTan ( Pi ) ;
DoTan ( Pi / 3 ) ;
DoTAn ( Pi / 4 ) ;
DoTan ( Pi / 6 ) ;
end .
63.13.90 TanH
Synopsis: Return hyperbolic tangent
Declaration: function TanH(x: Float) : Float
Visibility: default
Listing: ./mathex/ex48.pp
Program Example48 ;
Uses math ;
begin
w r i t e l n ( tanh ( 0 ) ) ;
w r i t e l n ( tanh ( 1 ) ) ;
w r i t e l n ( tanh ( − 1 ) ) ;
end .
63.13.91 TotalVariance
Synopsis: Return total variance of values
1028
CHAPTER 63. REFERENCE FOR UNIT ’MATH’
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 . }
{ @ should r e t u r n typed p o i n t e r }
{ $T+ }
Uses math ;
Type
TExArray = Array [ 1 . . 1 0 0 ] of F l o a t ;
Var
I : Integer ;
ExArray : TExArray ;
TV : f l o a t ;
begin
Randomize ;
f o r I :=1 to 100 do
ExArray [ i ] : = ( Random−Random) * 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.92 Variance
Synopsis: Return variance of values
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 (1028), stddev (1023), mean (1007)
Listing: ./mathex/ex50.pp
Program Example50 ;
1029
CHAPTER 63. REFERENCE FOR UNIT ’MATH’
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 ] : = ( Random−Random) * 1 0 0 ;
V: = Variance ( ExArray ) ;
W r i t e l n ( ' Variance : ' ,V : 8 : 4 ) ;
V: = Variance ( @ExArray [ 1 ] , 1 0 0 ) ;
W r i t e l n ( ' Variance ( b ) : ' ,V : 8 : 4 ) ;
end .
Listing: ./mathex/ex51.pp
Program Example51 ;
{
Program t o demonstrate t h e Variance f u n c t i o n .
I t demonstrates t h e absence o f l a r g e e r r o r s i n t h e c a l c u l a t i o n .
}
Uses math ;
const
Size = 1000000;
var
dataS : array of S i n g l e ;
dataD : array of Double ;
dataE : array of Extended ;
i ,n: longint ;
begin
WriteLn ( ' Each run should r e t u r n a v a l u e near u n i t y . ' ) ;
WriteLn ( ' S i n g l e : ' ) ;
SetLength ( dataS , Size ) ;
f o r n : = 1 to 4 do
begin
f o r i : = 0 to Size − 1 do
begin
dataS [ i ] : = 10000000 + RandG ( 0 , 1 ) ;
end ;
WriteLn ( Math . Variance ( dataS ) : 5 : 3 ) ;
end ;
1030
CHAPTER 63. REFERENCE FOR UNIT ’MATH’
end ;
63.14 EInvalidArgument
63.14.1 Description
Exception raised when invalid arguments are passed to a function.
1031
Chapter 64
Name Page
System 1331
64.2 Overview
The unit matrix is a unit that provides objects for the common two, three and four dimensional
vectors matrices. These vectors and matrices 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 matrices. The functionality needs of a general matrix
unit varies from application to application; one can think of reduced memory usage tricks for matrices
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 benefit from such a unit in
the runtime library.
Design goals:
Design decisions:
1032
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
• 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. Macro’s have been used in
the source to take care of this.
This is the matrix internal data for a matrix. It uses a simple array structure so data from other
libraries that define their own matrix type as a simple array structure can simply be moved to and
from this data, or typecasted into it. As this is the only field in the object, the object itself can be used
just as fine for typecasting purposes etc.
This is the matrix internal data for a matrix. It uses a simple array structure so data from other
libraries that define their own matrix type as a simple array structure can simply be moved to and
from this data, or typecasted into it. As this is the only field in the object, the object itself can be used
just as fine for typecasting purposes etc.
This is the matrix internal data for a matrix. It uses a simple array structure so data from other
libraries that define their own matrix type as a simple array structure can simply be moved to and
from this data, or typecasted into it. As this is the only field in the object, the object itself can be used
just as fine for typecasting purposes etc.
This is the matrix internal data for a matrix. It uses a simple array structure so data from other
libraries that define their own matrix type as a simple array structure can simply be moved to and
from this data, or typecasted into it. As this is the only field in the object, the object itself can be used
just as fine for typecasting purposes etc.
This is the matrix internal data for a matrix. It uses a simple array structure so data from other
libraries that define their own matrix type as a simple array structure can simply be moved to and
from this data, or typecasted into it. As this is the only field in the object, the object itself can be used
just as fine for typecasting purposes etc.
This is the matrix internal data for a matrix. It uses a simple array structure so data from other
libraries that define their own matrix type as a simple array structure can simply be moved to and
from this data, or typecasted into it. As this is the only field in the object, the object itself can be used
just as fine for typecasting purposes etc.
1033
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
This is the matrix internal data for a matrix. It uses a simple array structure so data from other
libraries that define their own matrix type as a simple array structure can simply be moved to and
from this data, or typecasted into it. As this is the only field in the object, the object itself can be used
just as fine for typecasting purposes etc.
This is the matrix internal data for a matrix. It uses a simple array structure so data from other
libraries that define their own matrix type as a simple array structure can simply be moved to and
from this data, or typecasted into it. As this is the only field in the object, the object itself can be used
just as fine for typecasting purposes etc.
This is the matrix internal data for a matrix. It uses a simple array structure so data from other
libraries that define their own matrix type as a simple array structure can simply be moved to and
from this data, or typecasted into it. As this is the only field in the object, the object itself can be used
just as fine for typecasting purposes etc.
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.
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.
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.
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.
1034
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
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.
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.
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.
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.
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.4.2 add(Tmatrix2_double,Tmatrix2_double):Tmatrix2_double
Synopsis: Add two two-dimensional double precision matrices together.
Declaration: operator +(const m1: Tmatrix2_double; const m2: Tmatrix2_double)
: Tmatrix2_double
Visibility: default
Description: This operator allows you to add two two-dimensional double precision matrices together. A new
matrix is returned with all elements of the two matrices added together.
1035
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.3 add(Tmatrix2_extended,extended):Tmatrix2_extended
Synopsis: Add scalar to two-dimensional extended precision matrix
64.4.4 add(Tmatrix2_extended,Tmatrix2_extended):Tmatrix2_extended
Synopsis: Add two two-dimensional extended precision matrices together.
Declaration: operator +(const m1: Tmatrix2_extended; const m2: Tmatrix2_extended)
: Tmatrix2_extended
Visibility: default
Description: This operator allows you to add two two-dimensional extended precision matrices together. A new
matrix is returned with all elements of the two matrices added together.
64.4.5 add(Tmatrix2_single,single):Tmatrix2_single
Synopsis: Add scalar to two-dimensional single precision matrix
Declaration: operator +(const m: Tmatrix2_single; const x: single) : Tmatrix2_single
Visibility: default
Description: This operator allows you to add a scalar value to a matrix. The scalar is added to all elements of the
matrix, the result is returned as a new vector.
64.4.6 add(Tmatrix2_single,Tmatrix2_single):Tmatrix2_single
Synopsis: Add two two-dimensional single precision matrices together.
Declaration: operator +(const m1: Tmatrix2_single; const m2: Tmatrix2_single)
: Tmatrix2_single
Visibility: default
Description: This operator allows you to add two two-dimensional single precision matrices together. A new
matrix is returned with all elements of the two matrices added together.
64.4.7 add(Tmatrix3_double,Double):Tmatrix3_double
Synopsis: Add scalar to three-dimensional double precision matrix
1036
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.8 add(Tmatrix3_double,Tmatrix3_double):Tmatrix3_double
Synopsis: Add two three-dimensional double precision matrices together.
Declaration: operator +(const m1: Tmatrix3_double; const m2: Tmatrix3_double)
: Tmatrix3_double
Visibility: default
Description: This operator allows you to add two three-dimensional double precision matrices together. A new
matrix is returned with all elements of the two matrices added together.
64.4.9 add(Tmatrix3_extended,extended):Tmatrix3_extended
Synopsis: Add scalar to three-dimensional extended precision matrix
Declaration: operator +(const m: Tmatrix3_extended; const x: extended)
: Tmatrix3_extended
Visibility: default
Description: This operator allows you to add a scalar value to a matrix. The scalar is added to all elements of the
matrix, the result is returned as a new vector.
64.4.10 add(Tmatrix3_extended,Tmatrix3_extended):Tmatrix3_extended
Synopsis: Add two three-dimensional extended precision matrices together.
Declaration: operator +(const m1: Tmatrix3_extended; const m2: Tmatrix3_extended)
: Tmatrix3_extended
Visibility: default
Description: This operator allows you to add two three-dimensional extended precision matrices together. A new
matrix is returned with all elements of the two matrices added together.
64.4.11 add(Tmatrix3_single,single):Tmatrix3_single
Synopsis: Add scalar to three-dimensional single precision matrix
Declaration: operator +(const m: Tmatrix3_single; const x: single) : Tmatrix3_single
Visibility: default
Description: This operator allows you to add a scalar value to a matrix. The scalar is added to all elements of the
matrix, the result is returned as a new vector.
64.4.12 add(Tmatrix3_single,Tmatrix3_single):Tmatrix3_single
Synopsis: Add two three-dimensional single precision matrices together.
Declaration: operator +(const m1: Tmatrix3_single; const m2: Tmatrix3_single)
: Tmatrix3_single
Visibility: default
Description: This operator allows you to add two three-dimensional single precision matrices together. A new
matrix is returned with all elements of the two matrices added together.
1037
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.13 add(Tmatrix4_double,Double):Tmatrix4_double
Synopsis: Add scalar to four-dimensional double precision matrix
64.4.14 add(Tmatrix4_double,Tmatrix4_double):Tmatrix4_double
Synopsis: Add two four-dimensional double precision matrices together.
Declaration: operator +(const m1: Tmatrix4_double; const m2: Tmatrix4_double)
: Tmatrix4_double
Visibility: default
Description: This operator allows you to add two four-dimensional double precision matrices together. A new
matrix is returned with all elements of the two matrices added together.
64.4.15 add(Tmatrix4_extended,extended):Tmatrix4_extended
Synopsis: Add scalar to four-dimensional extended precision matrix
64.4.16 add(Tmatrix4_extended,Tmatrix4_extended):Tmatrix4_extended
Synopsis: Add two four-dimensional extended precision matrices together.
Declaration: operator +(const m1: Tmatrix4_extended; const m2: Tmatrix4_extended)
: Tmatrix4_extended
Visibility: default
Description: This operator allows you to add two four-dimensional extended precision matrices together. A new
matrix is returned with all elements of the two matrices added together.
64.4.17 add(Tmatrix4_single,single):Tmatrix4_single
Synopsis: Add scalar to four-dimensional single precision matrix
1038
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.18 add(Tmatrix4_single,Tmatrix4_single):Tmatrix4_single
Synopsis: Add two four-dimensional single precision matrices together.
64.4.19 add(Tvector2_double,Double):Tvector2_double
Synopsis: Add scalar to two-dimensional double precision vector
Declaration: operator +(const x: Tvector2_double; y: Double) : Tvector2_double
Visibility: default
Description: This operator allows you to add a scalar value to a vector. The scalar is added to all elements of the
vector, the result is returned as a new vector.
64.4.20 add(Tvector2_double,Tvector2_double):Tvector2_double
Synopsis: Add two-dimensional double precision vectors together
64.4.21 add(Tvector2_extended,extended):Tvector2_extended
Synopsis: Add scalar to two-dimensional extended precision vector
Declaration: operator +(const x: Tvector2_extended; y: extended) : Tvector2_extended
Visibility: default
Description: This operator allows you to add a scalar value to a vector. The scalar is added to all elements of the
vector, the result is returned as a new vector.
64.4.22 add(Tvector2_extended,Tvector2_extended):Tvector2_extended
Synopsis: Add two-dimensional extended precision vectors together
1039
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.23 add(Tvector2_single,single):Tvector2_single
Synopsis: Add scalar to two-dimensional single precision vector
64.4.24 add(Tvector2_single,Tvector2_single):Tvector2_single
Synopsis: Add two-dimensional single precision vectors together
Declaration: operator +(const x: Tvector2_single; const y: Tvector2_single)
: Tvector2_single
Visibility: default
Description: This operator allows you to add two two-dimensional vectors with single precision together. The
result is a new vector which consists of the sums of the individual elements of the two vectors.
64.4.25 add(Tvector3_double,Double):Tvector3_double
Synopsis: Add scalar to three-dimensional double precision vector
64.4.26 add(Tvector3_double,Tvector3_double):Tvector3_double
Synopsis: Add three-dimensional double precision vectors together
Declaration: operator +(const x: Tvector3_double; const y: Tvector3_double)
: Tvector3_double
Visibility: default
Description: This operator allows you to add two three-dimensional vectors with double precision together. The
result is a new vector which consists of the sums of the individual elements of the two vectors.
64.4.27 add(Tvector3_extended,extended):Tvector3_extended
Synopsis: Add scalar to three-dimensional extended precision vector
1040
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.28 add(Tvector3_extended,Tvector3_extended):Tvector3_extended
Synopsis: Add three-dimensional extended precision vectors together
64.4.29 add(Tvector3_single,single):Tvector3_single
Synopsis: Add scalar to three-dimensional single precision vector
Declaration: operator +(const x: Tvector3_single; y: single) : Tvector3_single
Visibility: default
Description: This operator allows you to add a scalar value to a vector. The scalar is added to all elements of the
vector, the result is returned as a new vector.
64.4.30 add(Tvector3_single,Tvector3_single):Tvector3_single
Synopsis: Add three-dimensional extended precision vectors together
64.4.31 add(Tvector4_double,Double):Tvector4_double
Synopsis: Add scalar to four-dimensional double precision vector
Declaration: operator +(const x: Tvector4_double; y: Double) : Tvector4_double
Visibility: default
Description: This operator allows you to add a scalar value to a vector. The scalar is added to all elements of the
vector, the result is returned as a new vector.
64.4.32 add(Tvector4_double,Tvector4_double):Tvector4_double
Synopsis: Add four-dimensional double precision vectors together
1041
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.33 add(Tvector4_extended,extended):Tvector4_extended
Synopsis: Add scalar to four-dimensional extended precision vector
64.4.34 add(Tvector4_extended,Tvector4_extended):Tvector4_extended
Synopsis: Add four-dimensional extended precision vectors together
Declaration: operator +(const x: Tvector4_extended; const y: Tvector4_extended)
: Tvector4_extended
Visibility: default
Description: This operator allows you to add two two-dimensional vectors with extended precision together. The
result is a new vector which consists of the sums of the individual elements of the two vectors.
64.4.35 add(Tvector4_single,single):Tvector4_single
Synopsis: Add scalar to four-dimensional single precision vector
64.4.36 add(Tvector4_single,Tvector4_single):Tvector4_single
Synopsis: Add four-dimensional single precision vectors together
Declaration: operator +(const x: Tvector4_single; const y: Tvector4_single)
: Tvector4_single
Visibility: default
Description: This operator allows you to add two four-dimensional vectors with single precision together. The
result is a new vector which consists of the sums of the individual elements of the two vectors.
64.4.37 assign(Tmatrix2_double):Tmatrix2_extended
Synopsis: Allow assignment of two-dimensional double precision matrix to two-dimensional extended preci-
sion matrix
1042
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.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 accuracy is lost because of the
conversion.
64.4.39 assign(Tmatrix2_double):Tmatrix3_double
Synopsis: Allow assignment of two-dimensional double precision matrix to three-dimensional double preci-
sion matrix
64.4.40 assign(Tmatrix2_double):Tmatrix3_extended
Synopsis: Allow assignment of two-dimensional double precision matrix to three-dimensional extended preci-
sion 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.4.41 assign(Tmatrix2_double):Tmatrix3_single
Synopsis: Allow assignment of two-dimensional single precision matrix to three-dimensional single precision
matrix
64.4.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
1043
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
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.4.43 assign(Tmatrix2_double):Tmatrix4_extended
Synopsis: Allow assignment of two-dimensional double precision matrix to four-dimensional extended preci-
sion 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.4.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.4.45 assign(Tmatrix2_extended):Tmatrix2_double
Synopsis: Allow assignment of two-dimensional extended precision matrix to two-dimensional double preci-
sion 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.4.46 assign(Tmatrix2_extended):Tmatrix2_single
Synopsis: Allow assignment of two-dimensional extended precision matrix to two-dimensional single preci-
sion 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.
1044
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.47 assign(Tmatrix2_extended):Tmatrix3_double
Synopsis: Allow assignment of two-dimensional extended precision matrix to three-dimensional double preci-
sion 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.4.48 assign(Tmatrix2_extended):Tmatrix3_extended
Synopsis: Allow assignment of two-dimensional extended precision matrix to three-dimensional extended pre-
cision matrix
64.4.49 assign(Tmatrix2_extended):Tmatrix3_single
Synopsis: Allow assignment of two-dimensional extended precision matrix to three-dimensional single preci-
sion 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.4.50 assign(Tmatrix2_extended):Tmatrix4_double
Synopsis: Allow assignment of two-dimensional extended precision matrix to four-dimensional double preci-
sion 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.
1045
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.51 assign(Tmatrix2_extended):Tmatrix4_extended
Synopsis: Allow assignment of two-dimensional extended precision matrix to four-dimensional extended pre-
cision 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.4.52 assign(Tmatrix2_extended):Tmatrix4_single
Synopsis: Allow assignment of two-dimensional extended precision matrix to four-dimensional single preci-
sion 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.4.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.4.54 assign(Tmatrix2_single):Tmatrix2_extended
Synopsis: Allow assignment of two-dimensional single precision matrix to two-dimensional extended preci-
sion 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.4.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.
1046
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.56 assign(Tmatrix2_single):Tmatrix3_extended
Synopsis: Allow assignment of two-dimensional single precision matrix to three-dimensional extended preci-
sion 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.4.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.4.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.4.59 assign(Tmatrix2_single):Tmatrix4_extended
Synopsis: Allow assignment of two-dimensional single precision matrix to four-dimensional extended preci-
sion 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.4.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.
1047
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.61 assign(Tmatrix3_double):Tmatrix2_double
Synopsis: Allow assignment of three-dimensional double precision matrix to two-dimensional double preci-
sion 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.4.62 assign(Tmatrix3_double):Tmatrix2_extended
Synopsis: Allow assignment of three-dimensional double precision matrix to two-dimensional extended preci-
sion 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.4.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.4.64 assign(Tmatrix3_double):Tmatrix3_extended
Synopsis: Allow assignment of three-dimensional double precision matrix to three-dimensional extended pre-
cision matrix
64.4.65 assign(Tmatrix3_double):Tmatrix3_single
Synopsis: Allow assignment of three-dimensional double precision matrix to three-dimensional single preci-
sion matrix
Declaration: operator :=(const v: Tmatrix3_double) : Tmatrix3_single
Visibility: default
1048
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
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.4.66 assign(Tmatrix3_double):Tmatrix4_double
Synopsis: Allow assignment of three-dimensional double precision matrix to four-dimensional double preci-
sion 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.4.67 assign(Tmatrix3_double):Tmatrix4_extended
Synopsis: Allow assignment of three-dimensional double precision matrix to four-dimensional extended pre-
cision 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.4.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.4.69 assign(Tmatrix3_extended):Tmatrix2_double
Synopsis: Allow assignment of three-dimensional extended precision matrix to two-dimensional double preci-
sion matrix
1049
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.70 assign(Tmatrix3_extended):Tmatrix2_extended
Synopsis: Allow assignment of three-dimensional extended precision matrix to two-dimensional extended pre-
cision 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.4.71 assign(Tmatrix3_extended):Tmatrix2_single
Synopsis: Allow assignment of three-dimensional extended precision matrix to two-dimensional single preci-
sion 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.4.72 assign(Tmatrix3_extended):Tmatrix3_double
Synopsis: Allow assignment of three-dimensional extended precision matrix to three-dimensional double pre-
cision 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.4.73 assign(Tmatrix3_extended):Tmatrix3_single
Synopsis: Allow assignment of three-dimensional extended precision matrix to three-dimensional single pre-
cision 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.
1050
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.74 assign(Tmatrix3_extended):Tmatrix4_double
Synopsis: Allow assignment of three-dimensional extended precision matrix to four-dimensional double pre-
cision 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.4.75 assign(Tmatrix3_extended):Tmatrix4_extended
Synopsis: Allow assignment of three-dimensional extended precision matrix to four-dimensional extended pre-
cision matrix
64.4.76 assign(Tmatrix3_extended):Tmatrix4_single
Synopsis: Allow assignment of three-dimensional extended precision matrix to four-dimensional single preci-
sion 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.4.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.4.78 assign(Tmatrix3_single):Tmatrix2_extended
Synopsis: Allow assignment of three-dimensional single precision matrix to two-dimensional extended preci-
sion matrix
Declaration: operator :=(const v: Tmatrix3_single) : Tmatrix2_extended
1051
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
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.4.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.4.80 assign(Tmatrix3_single):Tmatrix3_double
Synopsis: Allow assignment of three-dimensional single precision matrix to three-dimensional double preci-
sion 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.4.81 assign(Tmatrix3_single):Tmatrix3_extended
Synopsis: Allow assignment of three-dimensional single precision matrix to three-dimensional extended pre-
cision 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.4.82 assign(Tmatrix3_single):Tmatrix4_double
Synopsis: Allow assignment of three-dimensional single precision matrix to four-dimensional double precision
matrix
1052
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.83 assign(Tmatrix3_single):Tmatrix4_extended
Synopsis: Allow assignment of three-dimensional single precision matrix to four-dimensional extended preci-
sion 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.4.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.4.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.4.86 assign(Tmatrix4_double):Tmatrix2_extended
Synopsis: Allow assignment of four-dimensional double precision matrix to two-dimensional extended preci-
sion 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.4.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.
1053
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.88 assign(Tmatrix4_double):Tmatrix3_double
Synopsis: Allow assignment of four-dimensional double precision matrix to three-dimensional double preci-
sion 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.4.89 assign(Tmatrix4_double):Tmatrix3_extended
Synopsis: Allow assignment of four-dimensional double precision matrix to three-dimensional extended pre-
cision 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.4.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.4.91 assign(Tmatrix4_double):Tmatrix4_extended
Synopsis: Allow assignment of four-dimensional double precision matrix to four-dimensional extended preci-
sion matrix
64.4.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
1054
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
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.4.93 assign(Tmatrix4_extended):Tmatrix2_double
Synopsis: Allow assignment of four-dimensional extended precision matrix to two-dimensional double preci-
sion 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.4.94 assign(Tmatrix4_extended):Tmatrix2_extended
Synopsis: Allow assignment of four-dimensional extended precision matrix to two-dimensional extended pre-
cision matrix
64.4.95 assign(Tmatrix4_extended):Tmatrix2_single
Synopsis: Allow assignment of four-dimensional extended precision matrix to two-dimensional single preci-
sion 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.4.96 assign(Tmatrix4_extended):Tmatrix3_double
Synopsis: Allow assignment of four-dimensional extended precision matrix to three-dimensional double pre-
cision 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.
1055
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.97 assign(Tmatrix4_extended):Tmatrix3_extended
Synopsis: Allow assignment of four-dimensional extended precision matrix to three-dimensional extended pre-
cision 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.4.98 assign(Tmatrix4_extended):Tmatrix3_single
Synopsis: Allow assignment of four-dimensional extended precision matrix to three-dimensional single preci-
sion 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.4.99 assign(Tmatrix4_extended):Tmatrix4_double
Synopsis: Allow assignment of four-dimensional extended precision matrix to four-dimensional double preci-
sion 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.4.100 assign(Tmatrix4_extended):Tmatrix4_single
Synopsis: Allow assignment of four-dimensional extended precision matrix to four-dimensional single preci-
sion matrix
64.4.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
1056
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
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.4.102 assign(Tmatrix4_single):Tmatrix2_extended
Synopsis: Allow assignment of four-dimensional single precision matrix to two-dimensional extended preci-
sion 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.4.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.4.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.4.105 assign(Tmatrix4_single):Tmatrix3_extended
Synopsis: Allow assignment of four-dimensional single precision matrix to three-dimensional extended preci-
sion matrix
1057
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.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.4.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.4.108 assign(Tmatrix4_single):Tmatrix4_extended
Synopsis: Allow assignment of four-dimensional single precision matrix to four-dimensional extended preci-
sion 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.4.109 assign(Tvector2_double):Tvector2_extended
Synopsis: Allow assignment of double precision vector to extended precision vector
Declaration: operator :=(const v: Tvector2_double) : Tvector2_extended
Visibility: default
Description: This operator allows you to use a vector with double precision values wherever an extended precision
vector is expected.
64.4.110 assign(Tvector2_double):Tvector2_single
Synopsis: Allow assignment of double precision vector to single precision vector
1058
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.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.4.112 assign(Tvector2_double):Tvector3_extended
Synopsis: Allow assignment of two-dimensional double precision vector to three-dimensional extended preci-
sion 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.4.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.4.114 assign(Tvector2_double):Tvector4_double
Synopsis: Allow assignment of two-dimensional double precision vector to four-dimensional double precision
vector
64.4.115 assign(Tvector2_double):Tvector4_extended
Synopsis: Allow assignment of two-dimensional double precision vector to four-dimensional extended preci-
sion vector
Declaration: operator :=(const v: Tvector2_double) : Tvector4_extended
1059
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
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.4.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 accuracy is lost because of the
conversion and the third and fourth dimensions are set to 0.0.
64.4.117 assign(Tvector2_extended):Tvector2_double
Synopsis: Allow assignment of extended precision vector to double precision vector
64.4.118 assign(Tvector2_extended):Tvector2_single
Synopsis: Allow assignment of extended precision vector to single precision vector
Declaration: operator :=(const v: Tvector2_extended) : Tvector2_single
Visibility: default
Description: This operator allows you to use a vector with extended precision values wherever a single precision
vector is expected, at the cost of loosing some precision.
64.4.119 assign(Tvector2_extended):Tvector3_double
Synopsis: Allow assignment of two-dimensional extended precision vector to three-dimensional double preci-
sion vector
1060
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.120 assign(Tvector2_extended):Tvector3_extended
Synopsis: Allow assignment of two-dimensional extended precision vector to three-dimensional extended pre-
cision 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.4.121 assign(Tvector2_extended):Tvector3_single
Synopsis: Allow assignment of two-dimensional extended precision vector to three-dimensional single preci-
sion 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.4.122 assign(Tvector2_extended):Tvector4_double
Synopsis: Allow assignment of two-dimensional extended precision vector to four-dimensional double preci-
sion 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.4.123 assign(Tvector2_extended):Tvector4_extended
Synopsis: Allow assignment of two-dimensional extended precision vector to four-dimensional extended pre-
cision 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.
1061
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.124 assign(Tvector2_extended):Tvector4_single
Synopsis: Allow assignment of two-dimensional extended precision vector to four-dimensional single preci-
sion 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.4.125 assign(Tvector2_single):Tvector2_double
Synopsis: Allow assignment of single precision vector to double precision vector
Declaration: operator :=(const v: Tvector2_single) : Tvector2_double
Visibility: default
Description: This operator allows you to use a vector with single precision values wherever a double precision
vector is expected.
64.4.126 assign(Tvector2_single):Tvector2_extended
Synopsis: Allow assignment of single precision vector to extended precision vector
Declaration: operator :=(const v: Tvector2_single) : Tvector2_extended
Visibility: default
Description: This operator allows you to use a vector with single precision values wherever an extended precision
vector is expected.
64.4.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.4.128 assign(Tvector2_single):Tvector3_extended
Synopsis: Allow assignment of two-dimensional single precision vector to three-dimensional extended preci-
sion 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.
1062
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.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.4.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.4.131 assign(Tvector2_single):Tvector4_extended
Synopsis: Allow assignment of two-dimensional single precision vector to four-dimensional extended preci-
sion 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.4.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.
1063
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.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.4.134 assign(Tvector3_double):Tvector2_extended
Synopsis: Allow assignment of three-dimensional double precision vector to two-dimensional extended preci-
sion 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.4.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.4.136 assign(Tvector3_double):Tvector3_extended
Synopsis: Allow assignment of three-dimensional double precision vector to three-dimensional extended pre-
cision vector
64.4.137 assign(Tvector3_double):Tvector3_single
Synopsis: Allow assignment of three-dimensional double precision vector to three-dimensional single preci-
sion vector
Declaration: operator :=(const v: Tvector3_double) : Tvector3_single
Visibility: default
1064
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
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.4.138 assign(Tvector3_double):Tvector4_double
Synopsis: Allow assignment of three-dimensional double precision vector to four-dimensional double preci-
sion 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.4.139 assign(Tvector3_double):Tvector4_extended
Synopsis: Allow assignment of three-dimensional double precision vector to four-dimensional extended preci-
sion 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.4.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.4.141 assign(Tvector3_extended):Tvector2_double
Synopsis: Allow assignment of three-dimensional extended precision vector to two-dimensional double preci-
sion vector
1065
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.142 assign(Tvector3_extended):Tvector2_extended
Synopsis: Allow assignment of three-dimensional extended precision vector to two-dimensional extended pre-
cision 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.4.143 assign(Tvector3_extended):Tvector2_single
Synopsis: Allow assignment of three-dimensional extended precision vector to two-dimensional single preci-
sion 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.4.144 assign(Tvector3_extended):Tvector3_double
Synopsis: Allow assignment of three-dimensional extended precision vector to three-dimensional double pre-
cision 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.4.145 assign(Tvector3_extended):Tvector3_single
Synopsis: Allow assignment of three-dimensional single precision vector to three-dimensional double preci-
sion 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.
1066
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.146 assign(Tvector3_extended):Tvector4_double
Synopsis: Allow assignment of three-dimensional extended precision vector to four-dimensional double preci-
sion 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.4.147 assign(Tvector3_extended):Tvector4_extended
Synopsis: Allow assignment of three-dimensional extended precision vector to four-dimensional extended pre-
cision vector
64.4.148 assign(Tvector3_extended):Tvector4_single
Synopsis: Allow assignment of three-dimensional extended precision vector to four-dimensional single preci-
sion 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.4.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.4.150 assign(Tvector3_single):Tvector2_extended
Synopsis: Allow assignment of three-dimensional single precision vector to two-dimensional extended preci-
sion vector
Declaration: operator :=(const v: Tvector3_single) : Tvector2_extended
1067
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
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.4.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.4.152 assign(Tvector3_single):Tvector3_double
Synopsis: Allow assignment of three-dimensional single precision vector to three-dimensional double preci-
sion 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.4.153 assign(Tvector3_single):Tvector3_extended
Synopsis: Allow assignment of three-dimensional single precision vector to three-dimensional extended preci-
sion 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.4.154 assign(Tvector3_single):Tvector4_double
Synopsis: Allow assignment of three-dimensional single precision vector to four-dimensional double precision
vector
1068
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.155 assign(Tvector3_single):Tvector4_extended
Synopsis: Allow assignment of three-dimensional single precision vector to four-dimensional extended preci-
sion 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.4.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.4.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.4.158 assign(Tvector4_double):Tvector2_extended
Synopsis: Allow assignment of four-dimensional double precision vector to two-dimensional extended preci-
sion vector
64.4.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
1069
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
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.4.160 assign(Tvector4_double):Tvector3_double
Synopsis: Allow assignment of four-dimensional double precision vector to three-dimensional double preci-
sion 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.4.161 assign(Tvector4_double):Tvector3_extended
Synopsis: Allow assignment of four-dimensional double precision vector to three-dimensional extended preci-
sion vector
64.4.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.4.163 assign(Tvector4_double):Tvector4_extended
Synopsis: Allow assignment of four-dimensional single precision vector to four-dimensional extended preci-
sion 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.
1070
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.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.4.165 assign(Tvector4_extended):Tvector2_double
Synopsis: Allow assignment of four-dimensional extended precision vector to two-dimensional double preci-
sion vector
64.4.166 assign(Tvector4_extended):Tvector2_extended
Synopsis: Allow assignment of four-dimensional extended precision vector to two-dimensional extended pre-
cision 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.4.167 assign(Tvector4_extended):Tvector2_single
Synopsis: Allow assignment of four-dimensional extended precision vector to two-dimensional single preci-
sion 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 lost because of the conversion.
1071
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.168 assign(Tvector4_extended):Tvector3_double
Synopsis: Allow assignment of four-dimensional extended precision vector to three-dimensional double preci-
sion 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.4.169 assign(Tvector4_extended):Tvector3_extended
Synopsis: Allow assignment of four-dimensional extended precision vector to three-dimensional extended pre-
cision vector
64.4.170 assign(Tvector4_extended):Tvector3_single
Synopsis: Allow assignment of four-dimensional extended precision vector to three-dimensional single preci-
sion 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 lost because of the conversion.
64.4.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.
1072
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.172 assign(Tvector4_extended):Tvector4_single
Synopsis: Allow assignment of four-dimensional extended precision vector to four-dimensional single preci-
sion 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.4.173 assign(Tvector4_single):Tvector2_double
Synopsis: Allow assignment of four-dimensional single precision vector to two-dimensional double precision
vector
64.4.174 assign(Tvector4_single):Tvector2_extended
Synopsis: Allow assignment of four-dimensional single precision vector to two-dimensional extended preci-
sion 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.4.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.
1073
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.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.4.177 assign(Tvector4_single):Tvector3_extended
Synopsis: Allow assignment of four-dimensional single precision vector to three-dimensional extended preci-
sion 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.4.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.4.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.4.180 assign(Tvector4_single):Tvector4_extended
Synopsis: Allow assignment of four-dimensional single precision vector to four-dimensional extended preci-
sion 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.
1074
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.181 divide(Tmatrix2_double,Double):Tmatrix2_double
Synopsis: Divide a two-dimensional single precision matrix by a scalar
64.4.182 divide(Tmatrix2_extended,extended):Tmatrix2_extended
Synopsis: Divide a two-dimensional single precision matrix by a scalar
Declaration: operator /(const m: Tmatrix2_extended; const x: extended)
: Tmatrix2_extended
Visibility: default
Description: This operator allows you to divide a matrix by a scalar. All elements in the matrix are divided by the
scalar, the result is returned as a new matrix.
64.4.183 divide(Tmatrix2_single,single):Tmatrix2_single
Synopsis: Divide a two-dimensional single precision matrix by a scalar
64.4.184 divide(Tmatrix3_double,Double):Tmatrix3_double
Synopsis: Divide a two-dimensional single precision matrix by a scalar
Declaration: operator /(const m: Tmatrix3_double; const x: Double) : Tmatrix3_double
Visibility: default
Description: This operator allows you to divide a matrix by a scalar. All elements in the matrix are divided by the
scalar, the result is returned as a new matrix.
64.4.185 divide(Tmatrix3_extended,extended):Tmatrix3_extended
Synopsis: Divide a two-dimensional single precision matrix by a scalar
Declaration: operator /(const m: Tmatrix3_extended; const x: extended)
: Tmatrix3_extended
Visibility: default
Description: This operator allows you to divide a matrix by a scalar. All elements in the matrix are divided by the
scalar, the result is returned as a new matrix.
1075
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.186 divide(Tmatrix3_single,single):Tmatrix3_single
Synopsis: Divide a two-dimensional single precision matrix by a scalar
64.4.187 divide(Tmatrix4_double,Double):Tmatrix4_double
Synopsis: Divide a two-dimensional single precision matrix by a scalar
Declaration: operator /(const m: Tmatrix4_double; const x: Double) : Tmatrix4_double
Visibility: default
Description: This operator allows you to divide a matrix by a scalar. All elements in the matrix are divided by the
scalar, the result is returned as a new matrix.
64.4.188 divide(Tmatrix4_extended,extended):Tmatrix4_extended
Synopsis: Divide a two-dimensional single precision matrix by a scalar
Declaration: operator /(const m: Tmatrix4_extended; const x: extended)
: Tmatrix4_extended
Visibility: default
Description: This operator allows you to divide a matrix by a scalar. All elements in the matrix are divided by the
scalar, the result is returned as a new matrix.
64.4.189 divide(Tmatrix4_single,single):Tmatrix4_single
Synopsis: Divide a two-dimensional single precision matrix by a scalar
Declaration: operator /(const m: Tmatrix4_single; const x: single) : Tmatrix4_single
Visibility: default
Description: This operator allows you to divide a matrix by a scalar. All elements in the matrix are divided by the
scalar, the result is returned as a new matrix.
64.4.190 divide(Tvector2_double,Double):Tvector2_double
Synopsis: Divide a two-dimensional double precision vector by a scalar
Declaration: operator /(const x: Tvector2_double; y: Double) : Tvector2_double
Visibility: default
Description: This operator allows you to divide a vector by a scalar value. Each vector element is divided by the
scalar value; the result is returned as a new vector.
1076
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.191 divide(Tvector2_extended,extended):Tvector2_extended
Synopsis: Divide a two-dimensional extended precision vector by a scalar
64.4.192 divide(Tvector2_single,single):Tvector2_single
Synopsis: Divide a two-dimensional single precision vector by a scalar
Declaration: operator /(const x: Tvector2_single; y: single) : Tvector2_single
Visibility: default
Description: This operator allows you to divide a vector by a scalar value. Each vector element is divided by the
scalar value; the result is returned as a new vector.
64.4.193 divide(Tvector3_double,Double):Tvector3_double
Synopsis: Divide a three-dimensional double precision vector by a scalar
Declaration: operator /(const x: Tvector3_double; y: Double) : Tvector3_double
Visibility: default
Description: This operator allows you to divide a vector by a scalar value. Each vector element is divided by the
scalar value; the result is returned as a new vector.
64.4.194 divide(Tvector3_extended,extended):Tvector3_extended
Synopsis: Divide a three-dimensional extended precision vector by a scalar
Declaration: operator /(const x: Tvector3_extended; y: extended) : Tvector3_extended
Visibility: default
Description: This operator allows you to divide a vector by a scalar value. Each vector element is divided by the
scalar value; the result is returned as a new vector.
64.4.195 divide(Tvector3_single,single):Tvector3_single
Synopsis: Divide a three-dimensional single precision vector by a scalar
Declaration: operator /(const x: Tvector3_single; y: single) : Tvector3_single
Visibility: default
Description: This operator allows you to divide a vector by a scalar value. Each vector element is divided by the
scalar value; the result is returned as a new vector.
1077
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.196 divide(Tvector4_double,Double):Tvector4_double
Synopsis: Divide a four-dimensional double precision vector by a scalar
64.4.197 divide(Tvector4_extended,extended):Tvector4_extended
Synopsis: Divide a four-dimensional extended precision vector by a scalar
Declaration: operator /(const x: Tvector4_extended; y: extended) : Tvector4_extended
Visibility: default
Description: This operator allows you to divide a vector by a scalar value. Each vector element is divided by the
scalar value; the result is returned as a new vector.
64.4.198 divide(Tvector4_single,single):Tvector4_single
Synopsis: Divide a four-dimensional single precision vector by a scalar
Declaration: operator /(const x: Tvector4_single; y: single) : Tvector4_single
Visibility: default
Description: This operator allows you to divide a vector by a scalar value. Each vector element is divided by the
scalar value; the result is returned as a new vector.
64.4.199 multiply(Tmatrix2_double,Double):Tmatrix2_double
Synopsis: Multiply a two-dimensional double precision matrix by a scalar
Declaration: operator *(const m: Tmatrix2_double; const x: Double) : Tmatrix2_double
Visibility: default
Description: This operator allows you to multiply a matrix with a scalar. All elements in the matrix are multiplied
by the scalar, the result is returned as a new matrix.
64.4.200 multiply(Tmatrix2_double,Tmatrix2_double):Tmatrix2_double
Synopsis: Give product of two two-dimensional double precision matrices
Declaration: operator *(const m1: Tmatrix2_double; const m2: Tmatrix2_double)
: Tmatrix2_double
Visibility: default
Description: This operator allows you to multiply two two-dimensional single precision matrices. A new matrix
is returned which is the product of both matrices. The product is calculated using the well known
matrix multiplication algorithm.
1078
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.201 multiply(Tmatrix2_double,Tvector2_double):Tvector2_double
Synopsis: Give product of a two-dimensional double precision matrix and vector
64.4.202 multiply(Tmatrix2_extended,extended):Tmatrix2_extended
Synopsis: Multiply a two-dimensional extended precision matrix by a scalar
Declaration: operator *(const m: Tmatrix2_extended; const x: extended)
: Tmatrix2_extended
Visibility: default
Description: This operator allows you to multiply a matrix with a scalar. All elements in the matrix are multiplied
by the scalar, the result is returned as a new matrix.
64.4.203 multiply(Tmatrix2_extended,Tmatrix2_extended):Tmatrix2_extended
Synopsis: Give product of two two-dimensional extended precision matrices
Declaration: operator *(const m1: Tmatrix2_extended; const m2: Tmatrix2_extended)
: Tmatrix2_extended
Visibility: default
Description: This operator allows you to multiply two two-dimensional single precision matrices. A new matrix
is returned which is the product of both matrices. The product is calculated using the well known
matrix multiplication algorithm.
64.4.204 multiply(Tmatrix2_extended,Tvector2_extended):Tvector2_extended
Synopsis: Give product of a two-dimensional extended precision matrix and vector
1079
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.205 multiply(Tmatrix2_single,single):Tmatrix2_single
Synopsis: Multiply a two-dimensional single precision matrix by a scalar
Declaration: operator *(const m: Tmatrix2_single; const x: single) : Tmatrix2_single
Visibility: default
Description: This operator allows you to multiply a matrix with a scalar. All elements in the matrix are multiplied
by the scalar, the result is returned as a new matrix.
64.4.206 multiply(Tmatrix2_single,Tmatrix2_single):Tmatrix2_single
Synopsis: Give product of two two-dimensional single precision matrices
Declaration: operator *(const m1: Tmatrix2_single; const m2: Tmatrix2_single)
: Tmatrix2_single
Visibility: default
Description: This operator allows you to multiply two two-dimensional single precision matrices. A new matrix
is returned which is the product of both matrices. The product is calculated using the well known
matrix multiplication algorithm.
64.4.207 multiply(Tmatrix2_single,Tvector2_single):Tvector2_single
Synopsis: Give product of a two-dimensional single precision matrix and vector
Declaration: operator *(const m: Tmatrix2_single; const v: Tvector2_single)
: Tvector2_single
Visibility: default
Description: This operator allows you to multiply a two-dimensional single precision matrices with a two dimen-
sional single precision vector. A new vector is returned which is the product of the matrix and the
vector. The product is calculated using the well known matrix-vector multiplication algorithm.
64.4.208 multiply(Tmatrix3_double,Double):Tmatrix3_double
Synopsis: Multiply a three-dimensional double precision matrix by a scalar
Declaration: operator *(const m: Tmatrix3_double; const x: Double) : Tmatrix3_double
Visibility: default
Description: This operator allows you to multiply a matrix with a scalar. All elements in the matrix are multiplied
by the scalar, the result is returned as a new matrix.
64.4.209 multiply(Tmatrix3_double,Tmatrix3_double):Tmatrix3_double
Synopsis: Give product of two three-dimensional double precision matrices
Declaration: operator *(const m1: Tmatrix3_double; const m2: Tmatrix3_double)
: Tmatrix3_double
Visibility: default
Description: This operator allows you to multiply two two-dimensional single precision matrices. A new matrix
is returned which is the product of both matrices. The product is calculated using the well known
matrix multiplication algorithm.
1080
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.210 multiply(Tmatrix3_double,Tvector3_double):Tvector3_double
Synopsis: Give product of a three-dimensional double precision matrix and vector
64.4.211 multiply(Tmatrix3_extended,extended):Tmatrix3_extended
Synopsis: Multiply a three-dimensional extended precision matrix by a scalar
Declaration: operator *(const m: Tmatrix3_extended; const x: extended)
: Tmatrix3_extended
Visibility: default
Description: This operator allows you to multiply a matrix with a scalar. All elements in the matrix are multiplied
by the scalar, the result is returned as a new matrix.
64.4.212 multiply(Tmatrix3_extended,Tmatrix3_extended):Tmatrix3_extended
Synopsis: Give product of two three-dimensional extended precision matrices
Declaration: operator *(const m1: Tmatrix3_extended; const m2: Tmatrix3_extended)
: Tmatrix3_extended
Visibility: default
Description: This operator allows you to multiply two two-dimensional single precision matrices. A new matrix
is returned which is the product of both matrices. The product is calculated using the well known
matrix multiplication algorithm.
64.4.213 multiply(Tmatrix3_extended,Tvector3_extended):Tvector3_extended
Synopsis: Give product of a three-dimensional extended precision matrix and vector
1081
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.214 multiply(Tmatrix3_single,single):Tmatrix3_single
Synopsis: Multiply a three-dimensional single precision matrix by a scalar
Declaration: operator *(const m: Tmatrix3_single; const x: single) : Tmatrix3_single
Visibility: default
Description: This operator allows you to multiply a matrix with a scalar. All elements in the matrix are multiplied
by the scalar, the result is returned as a new matrix.
64.4.215 multiply(Tmatrix3_single,Tmatrix3_single):Tmatrix3_single
Synopsis: Give product of two three-dimensional single precision matrices
Declaration: operator *(const m1: Tmatrix3_single; const m2: Tmatrix3_single)
: Tmatrix3_single
Visibility: default
Description: This operator allows you to multiply two two-dimensional single precision matrices. A new matrix
is returned which is the product of both matrices. The product is calculated using the well known
matrix multiplication algorithm.
64.4.216 multiply(Tmatrix3_single,Tvector3_single):Tvector3_single
Synopsis: Give product of a three-dimensional single precision matrix and vector
Declaration: operator *(const m: Tmatrix3_single; const v: Tvector3_single)
: Tvector3_single
Visibility: default
Description: This operator allows you to multiply a three-dimensional single precision matrices with a three
dimensional single precision vector. A new vector is returned which is the product of the matrix and
the vector. The product is calculated using the well known matrix-vector multiplication algorithm.
64.4.217 multiply(Tmatrix4_double,Double):Tmatrix4_double
Synopsis: Multiply a four-dimensional double precision matrix by a scalar
Declaration: operator *(const m: Tmatrix4_double; const x: Double) : Tmatrix4_double
Visibility: default
Description: This operator allows you to multiply a matrix with a scalar. All elements in the matrix are multiplied
by the scalar, the result is returned as a new matrix.
64.4.218 multiply(Tmatrix4_double,Tmatrix4_double):Tmatrix4_double
Synopsis: Give product of two four-dimensional double precision matrices
Declaration: operator *(const m1: Tmatrix4_double; const m2: Tmatrix4_double)
: Tmatrix4_double
Visibility: default
Description: This operator allows you to multiply two two-dimensional single precision matrices. A new matrix
is returned which is the product of both matrices. The product is calculated using the well known
matrix multiplication algorithm.
1082
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.219 multiply(Tmatrix4_double,Tvector4_double):Tvector4_double
Synopsis: Give product of a four-dimensional double precision matrix and vector
64.4.220 multiply(Tmatrix4_extended,extended):Tmatrix4_extended
Synopsis: Multiply a four-dimensional extended precision matrix by a scalar
Declaration: operator *(const m: Tmatrix4_extended; const x: extended)
: Tmatrix4_extended
Visibility: default
Description: This operator allows you to multiply a matrix with a scalar. All elements in the matrix are multiplied
by the scalar, the result is returned as a new matrix.
64.4.221 multiply(Tmatrix4_extended,Tmatrix4_extended):Tmatrix4_extended
Synopsis: Give product of two four-dimensional extended precision matrices
Declaration: operator *(const m1: Tmatrix4_extended; const m2: Tmatrix4_extended)
: Tmatrix4_extended
Visibility: default
Description: This operator allows you to multiply two two-dimensional single precision matrices. A new matrix
is returned which is the product of both matrices. The product is calculated using the well known
matrix multiplication algorithm.
64.4.222 multiply(Tmatrix4_extended,Tvector4_extended):Tvector4_extended
Synopsis: Give product of a four-dimensional extended precision matrix and vector
1083
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.223 multiply(Tmatrix4_single,single):Tmatrix4_single
Synopsis: Multiply a four-dimensional single precision matrix by a scalar
Declaration: operator *(const m: Tmatrix4_single; const x: single) : Tmatrix4_single
Visibility: default
Description: This operator allows you to multiply a matrix with a scalar. All elements in the matrix are multiplied
by the scalar, the result is returned as a new matrix.
64.4.224 multiply(Tmatrix4_single,Tmatrix4_single):Tmatrix4_single
Synopsis: Give product of two four-dimensional single precision matrices
Declaration: operator *(const m1: Tmatrix4_single; const m2: Tmatrix4_single)
: Tmatrix4_single
Visibility: default
Description: This operator allows you to multiply two two-dimensional single precision matrices. A new matrix
is returned which is the product of both matrices. The product is calculated using the well known
matrix multiplication algorithm.
64.4.225 multiply(Tmatrix4_single,Tvector4_single):Tvector4_single
Synopsis: Give product of a four-dimensional single precision matrix and vector
Declaration: operator *(const m: Tmatrix4_single; const v: Tvector4_single)
: Tvector4_single
Visibility: default
Description: This operator allows you to multiply a four-dimensional single precision matrices with a four di-
mensional single precision vector. A new vector is returned which is the product of the matrix and
the vector. The product is calculated using the well known matrix-vector multiplication algorithm.
64.4.226 multiply(Tvector2_double,Double):Tvector2_double
Synopsis: Multiply a two-dimensional double precision vector by a scalar
Declaration: operator *(const x: Tvector2_double; y: Double) : Tvector2_double
Visibility: default
Description: This operator allows you to multiply a vector by a scalar value. Each vector element is multiplied
by the scalar value; the result is returned as a new vector.
64.4.227 multiply(Tvector2_double,Tvector2_double):Tvector2_double
Synopsis: Multiply two vectors element wise
Declaration: operator *(const x: Tvector2_double; const y: Tvector2_double)
: Tvector2_double
Visibility: default
Description: This operator returns a vector that contains the element by element multiplication of the two multi-
plied vectors.
1084
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.228 multiply(Tvector2_extended,extended):Tvector2_extended
Synopsis: Multiply a two-dimensional extended precision vector by a scalar
64.4.229 multiply(Tvector2_extended,Tvector2_extended):Tvector2_extended
Synopsis: Multiply two vectors element wise
Declaration: operator *(const x: Tvector2_extended; const y: Tvector2_extended)
: Tvector2_extended
Visibility: default
Description: This operator returns a vector that contains the element by element multiplication of the two multi-
plied vectors.
64.4.230 multiply(Tvector2_single,single):Tvector2_single
Synopsis: Multiply a two-dimensional single precision vector by a scalar
64.4.231 multiply(Tvector2_single,Tvector2_single):Tvector2_single
Synopsis: Multiply two vectors element wise
Declaration: operator *(const x: Tvector2_single; const y: Tvector2_single)
: Tvector2_single
Visibility: default
Description: This operator returns a vector that contains the element by element multiplication of the two multi-
plied vectors.
64.4.232 multiply(Tvector3_double,Double):Tvector3_double
Synopsis: Multiply a three-dimensional double precision vector by a scalar
1085
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.233 multiply(Tvector3_double,Tvector3_double):Tvector3_double
Synopsis: Multiply two vectors element wise
64.4.234 multiply(Tvector3_extended,extended):Tvector3_extended
Synopsis: Multiply a three-dimensional extended precision vector by a scalar
Declaration: operator *(const x: Tvector3_extended; y: extended) : Tvector3_extended
Visibility: default
Description: This operator allows you to multiply a vector by a scalar value. Each vector element is multiplied
by the scalar value; the result is returned as a new vector.
64.4.235 multiply(Tvector3_extended,Tvector3_extended):Tvector3_extended
Synopsis: Multiply two vectors element wise
64.4.236 multiply(Tvector3_single,single):Tvector3_single
Synopsis: Multiply a three-dimensional single precision vector by a scalar
Declaration: operator *(const x: Tvector3_single; y: single) : Tvector3_single
Visibility: default
Description: This operator allows you to multiply a vector by a scalar value. Each vector element is multiplied
by the scalar value; the result is returned as a new vector.
64.4.237 multiply(Tvector3_single,Tvector3_single):Tvector3_single
Synopsis: Multiply two vectors element wise
1086
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.238 multiply(Tvector4_double,Double):Tvector4_double
Synopsis: Multiply a four-dimensional double precision vector by a scalar
64.4.239 multiply(Tvector4_double,Tvector4_double):Tvector4_double
Synopsis: Multiply two vectors element wise
Declaration: operator *(const x: Tvector4_double; const y: Tvector4_double)
: Tvector4_double
Visibility: default
Description: This operator returns a vector that contains the element by element multiplication of the two multi-
plied vectors.
64.4.240 multiply(Tvector4_extended,extended):Tvector4_extended
Synopsis: Multiply a four-dimensional extended precision vector by a scalar
64.4.241 multiply(Tvector4_extended,Tvector4_extended):Tvector4_extended
Synopsis: Multiply two vectors element wise
Declaration: operator *(const x: Tvector4_extended; const y: Tvector4_extended)
: Tvector4_extended
Visibility: default
Description: This operator returns a vector that contains the element by element multiplication of the two multi-
plied vectors.
64.4.242 multiply(Tvector4_single,single):Tvector4_single
Synopsis: Multiply a four-dimensional single precision vector by a scalar
1087
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.243 multiply(Tvector4_single,Tvector4_single):Tvector4_single
Synopsis: Multiply two vectors element wise
Declaration: operator *(const x: Tvector4_single; const y: Tvector4_single)
: Tvector4_single
Visibility: default
Description: This operator returns a vector that contains the element by element multiplication of the two multi-
plied vectors.
64.4.244 negative(Tmatrix2_double):Tmatrix2_double
Synopsis: Negate two-dimensional double precision matrix.
Declaration: operator -(const m1: Tmatrix2_double) : Tmatrix2_double
Visibility: default
Description: This operation returns a matrix with all elements negated.
64.4.245 negative(Tmatrix2_extended):Tmatrix2_extended
Synopsis: Negate two-dimensional extended precision matrix.
Declaration: operator -(const m1: Tmatrix2_extended) : Tmatrix2_extended
Visibility: default
Description: This operation returns a matrix with all elements negated.
64.4.246 negative(Tmatrix2_single):Tmatrix2_single
Synopsis: Negate two-dimensional single precision matrix.
Declaration: operator -(const m1: Tmatrix2_single) : Tmatrix2_single
Visibility: default
Description: This operation returns a matrix with all elements negated.
64.4.247 negative(Tmatrix3_double):Tmatrix3_double
Synopsis: Negate three-dimensional double precision matrix.
Declaration: operator -(const m1: Tmatrix3_double) : Tmatrix3_double
Visibility: default
Description: This operation returns a matrix with all elements negated.
64.4.248 negative(Tmatrix3_extended):Tmatrix3_extended
Synopsis: Negate three-dimensional extended precision matrix.
Declaration: operator -(const m1: Tmatrix3_extended) : Tmatrix3_extended
Visibility: default
Description: This operation returns a matrix with all elements negated.
1088
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.249 negative(Tmatrix3_single):Tmatrix3_single
Synopsis: Negate three-dimensional single precision matrix.
Declaration: operator -(const m1: Tmatrix3_single) : Tmatrix3_single
Visibility: default
Description: This operation returns a matrix with all elements negated.
64.4.250 negative(Tmatrix4_double):Tmatrix4_double
Synopsis: Negate four-dimensional double precision matrix.
Declaration: operator -(const m1: Tmatrix4_double) : Tmatrix4_double
Visibility: default
Description: This operation returns a matrix with all elements negated.
64.4.251 negative(Tmatrix4_extended):Tmatrix4_extended
Synopsis: Negate four-dimensional extended precision matrix.
Declaration: operator -(const m1: Tmatrix4_extended) : Tmatrix4_extended
Visibility: default
Description: This operation returns a matrix with all elements negated.
64.4.252 negative(Tmatrix4_single):Tmatrix4_single
Synopsis: Negate four-dimensional single precision matrix.
Declaration: operator -(const m1: Tmatrix4_single) : Tmatrix4_single
Visibility: default
Description: This operation returns a matrix with all elements negated.
64.4.253 negative(Tvector2_double):Tvector2_double
Synopsis: Negate two-dimensional vector.
Declaration: operator -(const x: Tvector2_double) : Tvector2_double
Visibility: default
Description: This operation returns a vector in the opposite direction of the vector that is passed. In order to do
so, all values in the vector are negated.
64.4.254 negative(Tvector2_extended):Tvector2_extended
Synopsis: Negate two-dimensional vector.
Declaration: operator -(const x: Tvector2_extended) : Tvector2_extended
Visibility: default
Description: This operation returns a vector in the opposite direction of the vector that is passed. In order to do
so, all values in the vector are negated.
1089
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.255 negative(Tvector2_single):Tvector2_single
Synopsis: Negate two-dimensional vector.
64.4.256 negative(Tvector3_double):Tvector3_double
Synopsis: Negate three-dimensional vector.
Declaration: operator -(const x: Tvector3_double) : Tvector3_double
Visibility: default
Description: This operation returns a vector in the opposite direction of the vector that is passed. In order to do
so, all values in the vector are negated.
64.4.257 negative(Tvector3_extended):Tvector3_extended
Synopsis: Negate three-dimensional vector.
Declaration: operator -(const x: Tvector3_extended) : Tvector3_extended
Visibility: default
Description: This operation returns a vector in the opposite direction of the vector that is passed. In order to do
so, all values in the vector are negated.
64.4.258 negative(Tvector3_single):Tvector3_single
Synopsis: Negate three-dimensional vector.
Declaration: operator -(const x: Tvector3_single) : Tvector3_single
Visibility: default
Description: This operation returns a vector in the opposite direction of the vector that is passed. In order to do
so, all values in the vector are negated.
64.4.259 negative(Tvector4_double):Tvector4_double
Synopsis: Negate four-dimensional vector.
Declaration: operator -(const x: Tvector4_double) : Tvector4_double
Visibility: default
Description: This operation returns a vector in the opposite direction of the vector that is passed. In order to do
so, all values in the vector are negated.
1090
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.260 negative(Tvector4_extended):Tvector4_extended
Synopsis: Negate four-dimensional vector.
64.4.261 negative(Tvector4_single):Tvector4_single
Synopsis: Negate four-dimensional vector.
Declaration: operator -(const x: Tvector4_single) : Tvector4_single
Visibility: default
Description: This operation returns a vector in the opposite direction of the vector that is passed. In order to do
so, all values in the vector are negated.
64.4.262 power(Tvector2_double,Tvector2_double):Double
Synopsis: Calculate the internal product of two vectors.
Declaration: operator **(const x: Tvector2_double; const y: Tvector2_double) : Double
Visibility: default
Description: This operator returns the internal product of the two vectors, that is, the elements of the two vectors
are element-wise multiplied, and then added together.
64.4.263 power(Tvector2_extended,Tvector2_extended):extended
Synopsis: Calculate the internal product of two vectors.
Declaration: operator **(const x: Tvector2_extended; const y: Tvector2_extended)
: extended
Visibility: default
Description: This operator returns the internal product of the two vectors, that is, the elements of the two vectors
are element-wise multiplied, and then added together.
64.4.264 power(Tvector2_single,Tvector2_single):single
Synopsis: Calculate the internal product of two vectors.
Declaration: operator **(const x: Tvector2_single; const y: Tvector2_single) : single
Visibility: default
Description: This operator returns the internal product of the two vectors, that is, the elements of the two vectors
are element-wise multiplied, and then added together.
1091
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.265 power(Tvector3_double,Tvector3_double):Double
Synopsis: Calculate the internal product of two vectors.
64.4.266 power(Tvector3_extended,Tvector3_extended):extended
Synopsis: Calculate the internal product of two vectors.
Declaration: operator **(const x: Tvector3_extended; const y: Tvector3_extended)
: extended
Visibility: default
Description: This operator returns the internal product of the two vectors, that is, the elements of the two vectors
are element-wise multiplied, and then added together.
64.4.267 power(Tvector3_single,Tvector3_single):single
Synopsis: Calculate the internal product of two vectors.
64.4.268 power(Tvector4_double,Tvector4_double):Double
Synopsis: Calculate the internal product of two vectors.
Declaration: operator **(const x: Tvector4_double; const y: Tvector4_double) : Double
Visibility: default
Description: This operator returns the internal product of the two vectors, that is, the elements of the two vectors
are element-wise multiplied, and then added together.
64.4.269 power(Tvector4_extended,Tvector4_extended):extended
Synopsis: Calculate the internal product of two vectors.
Declaration: operator **(const x: Tvector4_extended; const y: Tvector4_extended)
: extended
Visibility: default
Description: This operator returns the internal product of the two vectors, that is, the elements of the two vectors
are element-wise multiplied, and then added together.
1092
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.270 power(Tvector4_single,Tvector4_single):single
Synopsis: Calculate the internal product of two vectors.
64.4.271 subtract(Tmatrix2_double,Double):Tmatrix2_double
Synopsis: Subtract scalar to two-dimensional double precision matrix
Declaration: operator -(const m: Tmatrix2_double; const x: Double) : Tmatrix2_double
Visibility: default
Description: This operator allows you to subtract a scalar value from a matrix. The scalar is subtracted from all
elements of the matrix, the result is returned as a new matrix.
64.4.272 subtract(Tmatrix2_double,Tmatrix2_double):Tmatrix2_double
Synopsis: Subtract a two-dimensional double precision matrix from another.
Declaration: operator -(const m1: Tmatrix2_double; const m2: Tmatrix2_double)
: Tmatrix2_double
Visibility: default
Description: This operator allows you to subtract a two-dimensional double precision matrix from another. A
new matrix is returned with all elements of the two matrices subtracted from each other.
64.4.273 subtract(Tmatrix2_extended,extended):Tmatrix2_extended
Synopsis: Add scalar to two-dimensional extended precision matrix
Declaration: operator -(const m: Tmatrix2_extended; const x: extended)
: Tmatrix2_extended
Visibility: default
Description: This operator allows you to subtract a scalar value from a matrix. The scalar is subtracted from all
elements of the matrix, the result is returned as a new matrix.
64.4.274 subtract(Tmatrix2_extended,Tmatrix2_extended):Tmatrix2_extended
Synopsis: Subtract a two-dimensional extended precision matrix from another.
1093
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.275 subtract(Tmatrix2_single,single):Tmatrix2_single
Synopsis: Subtract scalar to two-dimensional single precision matrix
64.4.276 subtract(Tmatrix2_single,Tmatrix2_single):Tmatrix2_single
Synopsis: Subtract a two-dimensional single precision matrix from another.
Declaration: operator -(const m1: Tmatrix2_single; const m2: Tmatrix2_single)
: Tmatrix2_single
Visibility: default
Description: This operator allows you to subtract a two-dimensional single precision matrix from another. A new
matrix is returned with all elements of the two matrices subtracted from each other.
64.4.277 subtract(Tmatrix3_double,Double):Tmatrix3_double
Synopsis: Add scalar to three-dimensional double precision matrix
64.4.278 subtract(Tmatrix3_double,Tmatrix3_double):Tmatrix3_double
Synopsis: Subtract a three-dimensional double precision matrix from another.
Declaration: operator -(const m1: Tmatrix3_double; const m2: Tmatrix3_double)
: Tmatrix3_double
Visibility: default
Description: This operator allows you to subtract a three-dimensional double precision matrix from another. A
new matrix is returned with all elements of the two matrices subtracted from each other.
64.4.279 subtract(Tmatrix3_extended,extended):Tmatrix3_extended
Synopsis: Add scalar to three-dimensional extended precision matrix
1094
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.280 subtract(Tmatrix3_extended,Tmatrix3_extended):Tmatrix3_extended
Synopsis: Subtract a three-dimensional extended precision matrix from another.
64.4.281 subtract(Tmatrix3_single,single):Tmatrix3_single
Synopsis: Add scalar to three-dimensional single precision matrix
Declaration: operator -(const m: Tmatrix3_single; const x: single) : Tmatrix3_single
Visibility: default
Description: This operator allows you to subtract a scalar value from a matrix. The scalar is subtracted from all
elements of the matrix, the result is returned as a new matrix.
64.4.282 subtract(Tmatrix3_single,Tmatrix3_single):Tmatrix3_single
Synopsis: Subtract a three-dimensional single precision matrix from another.
64.4.283 subtract(Tmatrix4_double,Double):Tmatrix4_double
Synopsis: Add scalar to four-dimensional double precision matrix
Declaration: operator -(const m: Tmatrix4_double; const x: Double) : Tmatrix4_double
Visibility: default
Description: This operator allows you to subtract a scalar value from a matrix. The scalar is subtracted from all
elements of the matrix, the result is returned as a new matrix.
64.4.284 subtract(Tmatrix4_double,Tmatrix4_double):Tmatrix4_double
Synopsis: Subtract a four-dimensional double precision matrix from another.
1095
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.285 subtract(Tmatrix4_extended,extended):Tmatrix4_extended
Synopsis: Add scalar to four-dimensional extended precision matrix
64.4.286 subtract(Tmatrix4_extended,Tmatrix4_extended):Tmatrix4_extended
Synopsis: Subtract a four-dimensional extended precision matrix from another.
Declaration: operator -(const m1: Tmatrix4_extended; const m2: Tmatrix4_extended)
: Tmatrix4_extended
Visibility: default
Description: This operator allows you to subtract a four-dimensional extended precision matrix from another. A
new matrix is returned with all elements of the two matrices subtracted from each other.
64.4.287 subtract(Tmatrix4_single,single):Tmatrix4_single
Synopsis: Add scalar to four-dimensional single precision matrix
Declaration: operator -(const m: Tmatrix4_single; const x: single) : Tmatrix4_single
Visibility: default
Description: This operator allows you to subtract a scalar value from a matrix. The scalar is subtracted from all
elements of the matrix, the result is returned as a new matrix.
64.4.288 subtract(Tmatrix4_single,Tmatrix4_single):Tmatrix4_single
Synopsis: Subtract a four-dimensional single precision matrix from another.
Declaration: operator -(const m1: Tmatrix4_single; const m2: Tmatrix4_single)
: Tmatrix4_single
Visibility: default
Description: This operator allows you to subtract a four-dimensional single precision matrix from another. A new
matrix is returned with all elements of the two matrices subtracted from each other.
64.4.289 subtract(Tvector2_double,Double):Tvector2_double
Synopsis: Subtract scalar from two-dimensional double precision vector
1096
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.290 subtract(Tvector2_double,Tvector2_double):Tvector2_double
Synopsis: Subtract two-dimensional double precision vectors from each other
Declaration: operator -(const x: Tvector2_double; const y: Tvector2_double)
: Tvector2_double
Visibility: default
Description: This operator allows you to subtract two two-dimensional vectors with double precision from each
other. The result is a new vector which consists of the difference of the individual elements of the
two vectors.
64.4.291 subtract(Tvector2_extended,extended):Tvector2_extended
Synopsis: Subtract scalar from two-dimensional extended precision vector
Declaration: operator -(const x: Tvector2_extended; y: extended) : Tvector2_extended
Visibility: default
Description: This operator allows you to subtract a scalar value from a vector. The scalar is subtracted from all
elements of the vector, the result is returned as a new vector.
64.4.292 subtract(Tvector2_extended,Tvector2_extended):Tvector2_extended
Synopsis: Subtract two-dimensional extended precision vectors from each other
Declaration: operator -(const x: Tvector2_extended; const y: Tvector2_extended)
: Tvector2_extended
Visibility: default
Description: This operator allows you to subtract two two-dimensional vectors with extended precision from each
other. The result is a new vector which consists of the difference of the individual elements of the
two vectors.
64.4.293 subtract(Tvector2_single,single):Tvector2_single
Synopsis: Subtract scalar from two-dimensional single precision vector
Declaration: operator -(const x: Tvector2_single; y: single) : Tvector2_single
Visibility: default
Description: This operator allows you to subtract a scalar value from a vector. The scalar is subtracted from all
elements of the vector, the result is returned as a new vector.
64.4.294 subtract(Tvector2_single,Tvector2_single):Tvector2_single
Synopsis: Subtract two-dimensional single precision vectors from each other
Declaration: operator -(const x: Tvector2_single; const y: Tvector2_single)
: Tvector2_single
Visibility: default
Description: This operator allows you to subtract two two-dimensional vectors with single precision from each
other. The result is a new vector which consists of the difference of the individual elements of the
two vectors.
1097
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.295 subtract(Tvector3_double,Double):Tvector3_double
Synopsis: Subtract scalar from three-dimensional double precision vector
Declaration: operator -(const x: Tvector3_double; y: Double) : Tvector3_double
Visibility: default
Description: This operator allows you to subtract a scalar value from a vector. The scalar is subtracted from all
elements of the vector, the result is returned as a new vector.
64.4.296 subtract(Tvector3_double,Tvector3_double):Tvector3_double
Synopsis: Subtract three-dimensional double precision vectors from each other
Declaration: operator -(const x: Tvector3_double; const y: Tvector3_double)
: Tvector3_double
Visibility: default
Description: This operator allows you to subtract two two-dimensional vectors with double precision from each
other. The result is a new vector which consists of the difference of the individual elements of the
two vectors.
64.4.297 subtract(Tvector3_extended,extended):Tvector3_extended
Synopsis: Subtract scalar from three-dimensional extended precision vector
Declaration: operator -(const x: Tvector3_extended; y: extended) : Tvector3_extended
Visibility: default
Description: This operator allows you to subtract a scalar value from a vector. The scalar is subtracted from all
elements of the vector, the result is returned as a new vector.
64.4.298 subtract(Tvector3_extended,Tvector3_extended):Tvector3_extended
Synopsis: Subtract three-dimensional extended precision vectors from each other
Declaration: operator -(const x: Tvector3_extended; const y: Tvector3_extended)
: Tvector3_extended
Visibility: default
Description: This operator allows you to subtract two three-dimensional vectors with extended precision from
each other. The result is a new vector which consists of the difference of the individual elements of
the two vectors.
64.4.299 subtract(Tvector3_single,single):Tvector3_single
Synopsis: Subtract scalar from three-dimensional single precision vector
Declaration: operator -(const x: Tvector3_single; y: single) : Tvector3_single
Visibility: default
Description: This operator allows you to subtract a scalar value from a vector. The scalar is subtracted from all
elements of the vector, the result is returned as a new vector.
1098
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.300 subtract(Tvector3_single,Tvector3_single):Tvector3_single
Synopsis: Subtract three-dimensional single precision vectors from each other
Declaration: operator -(const x: Tvector3_single; const y: Tvector3_single)
: Tvector3_single
Visibility: default
Description: This operator allows you to subtract two three-dimensional vectors with single precision from each
other. The result is a new vector which consists of the difference of the individual elements of the
two vectors.
64.4.301 subtract(Tvector4_double,Double):Tvector4_double
Synopsis: Subtract scalar from four-dimensional double precision vector
Declaration: operator -(const x: Tvector4_double; y: Double) : Tvector4_double
Visibility: default
Description: This operator allows you to subtract a scalar value from a vector. The scalar is subtracted from all
elements of the vector, the result is returned as a new vector.
64.4.302 subtract(Tvector4_double,Tvector4_double):Tvector4_double
Synopsis: Subtract four-dimensional double precision vectors from each other
Declaration: operator -(const x: Tvector4_double; const y: Tvector4_double)
: Tvector4_double
Visibility: default
Description: This operator allows you to subtract two four-dimensional vectors with double precision from each
other. The result is a new vector which consists of the difference of the individual elements of the
two vectors.
64.4.303 subtract(Tvector4_extended,extended):Tvector4_extended
Synopsis: Subtract scalar from four-dimensional extended precision vector
Declaration: operator -(const x: Tvector4_extended; y: extended) : Tvector4_extended
Visibility: default
Description: This operator allows you to subtract a scalar value from a vector. The scalar is subtracted from all
elements of the vector, the result is returned as a new vector.
64.4.304 subtract(Tvector4_extended,Tvector4_extended):Tvector4_extended
Synopsis: Subtract four-dimensional extended precision vectors from each other
Declaration: operator -(const x: Tvector4_extended; const y: Tvector4_extended)
: Tvector4_extended
Visibility: default
Description: This operator allows you to subtract two four-dimensional vectors with extended precision from
each other. The result is a new vector which consists of the difference of the individual elements of
the two vectors.
1099
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.305 subtract(Tvector4_single,single):Tvector4_single
Synopsis: Subtract scalar from four-dimensional single precision vector
64.4.306 subtract(Tvector4_single,Tvector4_single):Tvector4_single
Synopsis: Subtract four-dimensional single precision vectors from each other
Declaration: operator -(const x: Tvector4_single; const y: Tvector4_single)
: Tvector4_single
Visibility: default
Description: This operator allows you to subtract two four-dimensional vectors with single precision from each
other. The result is a new vector which consists of the difference of the individual elements of the
two vectors.
64.4.307 symmetricaldifference(Tvector3_double,Tvector3_double):Tvector3_double
Synopsis: Calculate the external product of two three-dimensional vectors
Declaration: operator ><(const x: Tvector3_double; const y: Tvector3_double)
: Tvector3_double
Visibility: default
Description: This operator returns the external product of two three dimensional vector. It is a vector orthonormal
to the two multiplied vectors. The length of that vector is equal to the surface area of a parallelogram
with the two vectors as sides.
The external product is often used to get a vector orthonormal to two other vectors, but of a predefined
length. In order to do so, the result vector from the external product, is divided by its length, and then
multiplied by the desired size.
64.4.308 symmetricaldifference(Tvector3_extended,Tvector3_extended):Tvector3_exten
Synopsis: Calculate the external product of two three-dimensional vectors
Declaration: operator ><(const x: Tvector3_extended; const y: Tvector3_extended)
: Tvector3_extended
Visibility: default
Description: This operator returns the external product of two three dimensional vector. It is a vector orthonormal
to the two multiplied vectors. The length of that vector is equal to the surface area of a parallelogram
with the two vectors as sides.
The external product is often used to get a vector orthonormal to two other vectors, but of a predefined
length. In order to do so, the result vector from the external product, is divided by its length, and then
multiplied by the desired size.
1100
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.4.309 symmetricaldifference(Tvector3_single,Tvector3_single):Tvector3_single
Synopsis: Calculate the external product of two three-dimensional vectors
Declaration: operator ><(const x: Tvector3_single; const y: Tvector3_single)
: Tvector3_single
Visibility: default
Description: This operator returns the external product of two three dimensional vector. It is a vector orthonormal
to the two multiplied vectors. The length of that vector is equal to the surface area of a parallelogram
with the two vectors as sides.
The external product is often used to get a vector orthonormal to two other vectors, but of a predefined
length. In order to do so, the result vector from the external product, is divided by its length, and then
multiplied by the desired size.
64.5 Tmatrix2_double
64.5.1 Description
The Tmatrix2_double object provides a matrix of 2*2 double precision scalars.
64.5.3 Tmatrix2_double.init_zero
Synopsis: Initializes the matrix and sets its elements to zero
Declaration: constructor init_zero
Visibility: default
64.5.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 left-
upper to right-lower diagonal, the rest zero.
1101
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.5.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.5.6 Tmatrix2_double.get_column
Synopsis: Returns the c-th column of the matrix as vector.
Declaration: function get_column(c: Byte) : Tvector2_double
Visibility: default
Description: Returns the c-th column of the matrix as vector. The column numbering starts at 0.
64.5.7 Tmatrix2_double.get_row
Synopsis: Returns the r-th row of the matrix as vector.
Declaration: function get_row(r: Byte) : Tvector2_double
Visibility: default
Description: Returns the r-th row of the matrix as vector. The row numbering starts at 0.
64.5.8 Tmatrix2_double.set_column
Synopsis: Sets c-th column of the matrix with a vector.
Declaration: procedure set_column(c: Byte; const v: Tvector2_double)
Visibility: default
Description: Replaces the c-th column of the matrix with vector v. The column numbering starts at 0.
64.5.9 Tmatrix2_double.set_row
Synopsis: Sets r-th row of the matrix with a vector.
Declaration: procedure set_row(r: Byte; const v: Tvector2_double)
Visibility: default
Description: Replaces the r-th row of the matrix with vector v. The row numbering starts at 0.
64.5.10 Tmatrix2_double.determinant
Synopsis: Calculates the determinant of the matrix.
Declaration: function determinant : Double
Visibility: default
Description: Returns the determinant of the matrix.
1102
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.5.11 Tmatrix2_double.inverse
Synopsis: Calculates the inverse of the matrix.
64.5.12 Tmatrix2_double.transpose
Synopsis: Returns the transposition of the matrix.
Declaration: function transpose : Tmatrix2_double
Visibility: default
Description: Tmatrix2_double.transpose returns a new matrix that is the transposition of the matrix, that is, the
matrix with the x and y coordinates of the values swapped.
64.6 Tmatrix2_extended
64.6.1 Description
The Tmatrix2_extended object provides a matrix of 2*2 extended precision scalars.
64.6.3 Tmatrix2_extended.init_zero
Synopsis: Initializes the matrix and sets its elements to zero
1103
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.6.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 left-
upper to right-lower diagonal, the rest zero.
64.6.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.6.6 Tmatrix2_extended.get_column
Synopsis: Returns the c-th column of the matrix as vector.
Declaration: function get_column(c: Byte) : Tvector2_extended
Visibility: default
Description: Returns the c-th column of the matrix as vector. The column numbering starts at 0.
64.6.7 Tmatrix2_extended.get_row
Synopsis: Returns the r-th row of the matrix as vector.
Declaration: function get_row(r: Byte) : Tvector2_extended
Visibility: default
Description: Returns the r-th row of the matrix as vector. The row numbering starts at 0.
64.6.8 Tmatrix2_extended.set_column
Synopsis: Sets c-th column of the matrix with a vector.
Declaration: procedure set_column(c: Byte; const v: Tvector2_extended)
Visibility: default
Description: Replaces the c-th column of the matrix with vector v. The column numbering starts at 0.
64.6.9 Tmatrix2_extended.set_row
Synopsis: Sets r-th row of the matrix with a vector.
Declaration: procedure set_row(r: Byte; const v: Tvector2_extended)
Visibility: default
Description: Replaces the r-th row of the matrix with vector v. The row numbering starts at 0.
1104
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.6.10 Tmatrix2_extended.determinant
Synopsis: Calculates the determinant of the matrix.
64.6.11 Tmatrix2_extended.inverse
Synopsis: Calculates the inverse of the matrix.
Declaration: function inverse(Adeterminant: extended) : Tmatrix2_extended
Visibility: default
Description: Tmatrix2_extended.inverse returns a new matrix that is the inverse of the matrix. You must pass the
determinant of the matrix as parameter.
64.6.12 Tmatrix2_extended.transpose
Synopsis: Returns the transposition of the matrix.
Declaration: function transpose : Tmatrix2_extended
Visibility: default
Description: Tmatrix2_extended.transpose returns a new matrix that is the transposition of the matrix, that is, the
matrix with the x and y coordinates of the values swapped.
64.7 Tmatrix2_single
64.7.1 Description
The Tmatrix2_single object provides a matrix of 2*2 single precision scalars.
1105
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.7.3 Tmatrix2_single.init_zero
Synopsis: Initializes the matrix and sets its elements to zero
Declaration: constructor init_zero
Visibility: default
64.7.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 left-
upper to right-lower diagonal, the rest zero.
64.7.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.
64.7.6 Tmatrix2_single.get_column
Synopsis: Returns the c-th column of the matrix as vector.
Declaration: function get_column(c: Byte) : Tvector2_single
Visibility: default
Description: Returns the c-th column of the matrix as vector. The column numbering starts at 0.
64.7.7 Tmatrix2_single.get_row
Synopsis: Returns the r-th row of the matrix as vector.
Declaration: function get_row(r: Byte) : Tvector2_single
Visibility: default
Description: Returns the r-th row of the matrix as vector. The row numbering starts at 0.
64.7.8 Tmatrix2_single.set_column
Synopsis: Sets c-th column of the matrix with a vector.
Declaration: procedure set_column(c: Byte; const v: Tvector2_single)
Visibility: default
Description: Replaces the c-th column of the matrix with vector v. The column numbering starts at 0.
1106
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.7.9 Tmatrix2_single.set_row
Synopsis: Sets r-th row of the matrix with a vector.
64.7.10 Tmatrix2_single.determinant
Synopsis: Calculates the determinant of the matrix.
Declaration: function determinant : single
Visibility: default
64.7.11 Tmatrix2_single.inverse
Synopsis: Calculates the inverse of the matrix.
Declaration: function inverse(Adeterminant: single) : Tmatrix2_single
Visibility: default
Description: Tmatrix2_single.inverse returns a new matrix that is the inverse of the matrix. You must pass the
determinant of the matrix as parameter.
64.7.12 Tmatrix2_single.transpose
Synopsis: Returns the transposition of the matrix.
64.8 Tmatrix3_double
64.8.1 Description
The Tmatrix3_double object provides a matrix of 3*3 double precision scalars.
1107
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.8.3 Tmatrix3_double.init_zero
Synopsis: Initializes the matrix and sets its elements to zero
Declaration: constructor init_zero
Visibility: default
64.8.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 left-
upper to right-lower diagonal, the rest zero.
64.8.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.8.6 Tmatrix3_double.get_column
Synopsis: Returns the c-th column of the matrix as vector.
Declaration: function get_column(c: Byte) : Tvector3_double
Visibility: default
Description: Returns the c-th column of the matrix as vector. The column numbering starts at 0.
1108
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.8.7 Tmatrix3_double.get_row
Synopsis: Returns the r-th row of the matrix as vector.
Declaration: function get_row(r: Byte) : Tvector3_double
Visibility: default
Description: Returns the r-th row of the matrix as vector. The row numbering starts at 0.
64.8.8 Tmatrix3_double.set_column
Synopsis: Sets c-th column of the matrix with a vector.
Declaration: procedure set_column(c: Byte; const v: Tvector3_double)
Visibility: default
Description: Replaces the c-th column of the matrix with vector v. The column numbering starts at 0.
64.8.9 Tmatrix3_double.set_row
Synopsis: Sets r-th row of the matrix with a vector.
Declaration: procedure set_row(r: Byte; const v: Tvector3_double)
Visibility: default
Description: Replaces the r-th row of the matrix with vector v. The row numbering starts at 0.
64.8.10 Tmatrix3_double.determinant
Synopsis: Calculates the determinant of the matrix.
Declaration: function determinant : Double
Visibility: default
Description: Returns the determinant of the matrix.
64.8.11 Tmatrix3_double.inverse
Synopsis: Calculates the inverse of the matrix.
Declaration: function inverse(Adeterminant: Double) : Tmatrix3_double
Visibility: default
Description: Tmatrix3_double.inverse returns a new matrix that is the inverse of the matrix. You must pass the
determinant of the matrix as parameter.
64.8.12 Tmatrix3_double.transpose
Synopsis: Returns the transposition of the matrix.
Declaration: function transpose : Tmatrix3_double
Visibility: default
Description: Tmatrix2_double.transpose returns a new matrix that is the transposition of the matrix, that is, the
matrix with the x and y coordinates of the values swapped.
1109
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.9 Tmatrix3_extended
64.9.1 Description
The Tmatrix3_extended object provides a matrix of 3*3 extended precision scalars.
64.9.3 Tmatrix3_extended.init_zero
Synopsis: Initializes the matrix and sets its elements to zero
Declaration: constructor init_zero
Visibility: default
64.9.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 left-
upper to right-lower diagonal, the rest zero.
64.9.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.
1110
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.9.6 Tmatrix3_extended.get_column
Synopsis: Returns the c-th column of the matrix as vector.
Declaration: function get_column(c: Byte) : Tvector3_extended
Visibility: default
Description: Returns the c-th column of the matrix as vector. The column numbering starts at 0.
64.9.7 Tmatrix3_extended.get_row
Synopsis: Returns the r-th row of the matrix as vector.
Declaration: function get_row(r: Byte) : Tvector3_extended
Visibility: default
Description: Returns the r-th row of the matrix as vector. The row numbering starts at 0.
64.9.8 Tmatrix3_extended.set_column
Synopsis: Sets r-th column of the matrix with a vector.
Declaration: procedure set_column(c: Byte; const v: Tvector3_extended)
Visibility: default
Description: Replaces the c-th column of the matrix with vector v. The column numbering starts at 0.
64.9.9 Tmatrix3_extended.set_row
Synopsis: Sets r-th row of the matrix with a vector.
Declaration: procedure set_row(r: Byte; const v: Tvector3_extended)
Visibility: default
Description: Replaces the r-th row of the matrix with vector v. The row numbering starts at 0.
64.9.10 Tmatrix3_extended.determinant
Synopsis: Calculates the determinant of the matrix.
Declaration: function determinant : extended
Visibility: default
Description: Returns the determinant of the matrix.
64.9.11 Tmatrix3_extended.inverse
Synopsis: Calculates the inverse of the matrix.
Declaration: function inverse(Adeterminant: extended) : Tmatrix3_extended
Visibility: default
Description: Tmatrix3_extended.inverse returns a new matrix that is the inverse of the matrix. You must pass the
determinant of the matrix as parameter.
1111
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.9.12 Tmatrix3_extended.transpose
Synopsis: Returns the transposition of the matrix.
64.10 Tmatrix3_single
64.10.1 Description
The Tmatrix3_single object provides a matrix of 3*3 single precision scalars.
64.10.3 Tmatrix3_single.init_zero
Synopsis: Initializes the matrix and sets its elements to zero
Declaration: constructor init_zero
Visibility: default
64.10.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 left-
upper to right-lower diagonal, the rest zero.
1112
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.10.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.10.6 Tmatrix3_single.get_column
Synopsis: Returns the c-th column of the matrix as vector.
Declaration: function get_column(c: Byte) : Tvector3_single
Visibility: default
Description: Returns the c-th column of the matrix as vector. The column numbering starts at 0.
64.10.7 Tmatrix3_single.get_row
Synopsis: Returns the r-th row of the matrix as vector.
64.10.8 Tmatrix3_single.set_column
Synopsis: Sets c-th column of the matrix with a vector.
Declaration: procedure set_column(c: Byte; const v: Tvector3_single)
Visibility: default
Description: Replaces the c-th column of the matrix with vector v. The column numbering starts at 0.
64.10.9 Tmatrix3_single.set_row
Synopsis: Sets r-th row of the matrix with a vector.
Declaration: procedure set_row(r: Byte; const v: Tvector3_single)
Visibility: default
Description: Replaces the r-th row of the matrix with vector v. The row numbering starts at 0.
1113
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.10.10 Tmatrix3_single.determinant
Synopsis: Calculates the determinant of the matrix.
64.10.11 Tmatrix3_single.inverse
Synopsis: Calculates the inverse of the matrix.
Declaration: function inverse(Adeterminant: single) : Tmatrix3_single
Visibility: default
Description: Tmatrix3_single.inverse returns a new matrix that is the inverse of the matrix. You must pass the
determinant of the matrix as parameter.
64.10.12 Tmatrix3_single.transpose
Synopsis: Returns the transposition of the matrix.
Declaration: function transpose : Tmatrix3_single
Visibility: default
Description: Tmatrix2_single.transpose returns a new matrix that is the transposition of the matrix, that is, the
matrix with the x and y coordinates of the values swapped.
64.11 Tmatrix4_double
64.11.1 Description
The Tmatrix4_double object provides a matrix of 4*4 double precision scalars.
1114
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.11.3 Tmatrix4_double.init_zero
Synopsis: Initializes the matrix and sets its elements to zero
64.11.4 Tmatrix4_double.init_identity
Synopsis: Initializes the matrix and sets its elements to the identity matrix.
64.11.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.
64.11.6 Tmatrix4_double.get_column
Synopsis: Returns the c-th column of the matrix as vector.
Declaration: function get_column(c: Byte) : Tvector4_double
Visibility: default
Description: Returns the c-th column of the matrix as vector. The column numbering starts at 0.
64.11.7 Tmatrix4_double.get_row
Synopsis: Returns the r-th row of the matrix as vector.
Declaration: function get_row(r: Byte) : Tvector4_double
Visibility: default
Description: Returns the r-th row of the matrix as vector. The row numbering starts at 0.
1115
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.11.8 Tmatrix4_double.set_column
Synopsis: Sets c-th column of the matrix with a vector.
64.11.9 Tmatrix4_double.set_row
Synopsis: Sets r-th row of the matrix with a vector.
Declaration: procedure set_row(r: Byte; const v: Tvector4_double)
Visibility: default
Description: Replaces the r-th row of the matrix with vector v. The row numbering starts at 0.
64.11.10 Tmatrix4_double.determinant
Synopsis: Calculates the determinant of the matrix.
Declaration: function determinant : Double
Visibility: default
Description: Returns the determinant of the matrix. Note: Calculating the determinant of a 4*4 matrix requires
quite a few operations.
64.11.11 Tmatrix4_double.inverse
Synopsis: Calculates the inverse of the matrix.
64.11.12 Tmatrix4_double.transpose
Synopsis: Returns the transposition of the matrix.
Declaration: function transpose : Tmatrix4_double
Visibility: default
Description: Tmatrix2_double.transpose returns a new matrix that is the transposition of the matrix, that is, the
matrix with the x and y coordinates of the values swapped.
1116
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.12 Tmatrix4_extended
64.12.1 Description
The Tmatrix4_extended object provides a matrix of 4*4 extended precision scalars.
64.12.3 Tmatrix4_extended.init_zero
Synopsis: Initializes the matrix and sets its elements to zero
Declaration: constructor init_zero
Visibility: default
64.12.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 left-
upper to right-lower diagonal, the rest zero.
64.12.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.
1117
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.12.6 Tmatrix4_extended.get_column
Synopsis: Returns the c-th column of the matrix as vector.
64.12.7 Tmatrix4_extended.get_row
Synopsis: Returns the r-th row of the matrix as vector.
Declaration: function get_row(r: Byte) : Tvector4_extended
Visibility: default
Description: Returns the r-th row of the matrix as vector. The row numbering starts at 0.
64.12.8 Tmatrix4_extended.set_column
Synopsis: Sets c-th column of the matrix with a vector.
Declaration: procedure set_column(c: Byte; const v: Tvector4_extended)
Visibility: default
Description: Replaces the c-th column of the matrix with vector v. The column numbering starts at 0.
64.12.9 Tmatrix4_extended.set_row
Synopsis: Sets r-th row of the matrix with a vector.
Declaration: procedure set_row(r: Byte; const v: Tvector4_extended)
Visibility: default
Description: Replaces the r-th row of the matrix with vector v. The row numbering starts at 0.
64.12.10 Tmatrix4_extended.determinant
Synopsis: Calculates the determinant of the matrix.
1118
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.12.11 Tmatrix4_extended.inverse
Synopsis: Calculates the inverse of the matrix.
64.12.12 Tmatrix4_extended.transpose
Synopsis: Returns the transposition of the matrix.
Declaration: function transpose : Tmatrix4_extended
Visibility: default
Description: Tmatrix2_extended.transpose returns a new matrix that is the transposition of the matrix, that is, the
matrix with the x and y coordinates of the values swapped.
64.13 Tmatrix4_single
64.13.1 Description
The Tmatrix4_single object provides a matrix of 4*4 single precision scalars.
64.13.3 Tmatrix4_single.init_zero
Synopsis: Initializes the matrix and sets its elements to zero
1119
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.13.4 Tmatrix4_single.init_identity
Synopsis: Initializes the matrix and sets its elements to the identity matrix.
64.13.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.13.6 Tmatrix4_single.get_column
Synopsis: Returns the c-th column of the matrix as vector.
Declaration: function get_column(c: Byte) : Tvector4_single
Visibility: default
Description: Returns the c-th column of the matrix as vector. The column numbering starts at 0.
64.13.7 Tmatrix4_single.get_row
Synopsis: Returns the r-th row of the matrix as vector.
Declaration: function get_row(r: Byte) : Tvector4_single
Visibility: default
Description: Returns the r-th row of the matrix as vector. The row numbering starts at 0.
64.13.8 Tmatrix4_single.set_column
Synopsis: Sets c-th column of the matrix with a vector.
Declaration: procedure set_column(c: Byte; const v: Tvector4_single)
Visibility: default
Description: Replaces the c-th column of the matrix with vector v. The column numbering starts at 0.
1120
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.13.9 Tmatrix4_single.set_row
Synopsis: Sets r-th row of the matrix with a vector.
64.13.10 Tmatrix4_single.determinant
Synopsis: Calculates the determinant of the matrix.
Declaration: function determinant : single
Visibility: default
Description: Returns the determinant of the matrix. Note: Calculating the determinant of a 4*4 matrix requires
quite a few operations.
64.13.11 Tmatrix4_single.inverse
Synopsis: Calculates the inverse of the matrix.
Declaration: function inverse(Adeterminant: single) : Tmatrix4_single
Visibility: default
Description: Tmatrix4_single.inverse returns a new matrix that is the inverse of the matrix. You must pass the
determinant of the matrix as parameter. Note: Calculating the inverse of a 4*4 matrix requires quite
a few operations.
64.13.12 Tmatrix4_single.transpose
Synopsis: Returns the transposition of the matrix.
Declaration: function transpose : Tmatrix4_single
Visibility: default
Description: Tmatrix2_single.transpose returns a new matrix that is the transposition of the matrix, that is, the
matrix with the x and y coordinates of the values swapped.
64.14 Tvector2_double
64.14.1 Description
The Tvector2_double object provides a vector of two double precision scalars.
1121
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.14.3 Tvector2_double.init_zero
Synopsis: Initializes the vector and sets its elements to zero
64.14.4 Tvector2_double.init_one
Synopsis: Initializes the vector and sets its elements to one
Declaration: constructor init_one
Visibility: default
64.14.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
64.14.6 Tvector2_double.length
Synopsis: Calculates the length of the vector.
Declaration: function &length : Double
Visibility: default
Description: Calculate the length of the vector: length=sqrt(data[0]**2+data[1]**2). Try to use squared_length
(1122) if you are able to, as it is faster.
64.14.7 Tvector2_double.squared_length
Synopsis: Calculates the squared length of the vector.
1122
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.15 Tvector2_extended
64.15.1 Description
The Tvector2_extended object provides a vector of two extended precision scalars.
64.15.3 Tvector2_extended.init_zero
Synopsis: Initializes the vector and sets its elements to zero
Declaration: constructor init_zero
Visibility: default
64.15.4 Tvector2_extended.init_one
Synopsis: Initializes the vector and sets its elements to one
Declaration: constructor init_one
Visibility: default
64.15.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.15.6 Tvector2_extended.length
Synopsis: Calculates the length of the vector.
Declaration: function &length : extended
Visibility: default
Description: Calculate the length of the vector: length=sqrt(data[0]**2+data[1]**2). Try to use squared_length
(1124) if you are able to, as it is faster.
1123
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.15.7 Tvector2_extended.squared_length
Synopsis: Calculates the squared length of the vector.
64.16 Tvector2_single
64.16.1 Description
The Tvector2_single object provides a vector of two single precision scalars.
64.16.3 Tvector2_single.init_zero
Synopsis: Initializes the vector and sets its elements to zero
Declaration: constructor init_zero
Visibility: default
64.16.4 Tvector2_single.init_one
Synopsis: Initializes the vector and sets its elements to one
Declaration: constructor init_one
Visibility: default
64.16.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
1124
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.16.6 Tvector2_single.length
Synopsis: Calculates the length of the vector.
64.16.7 Tvector2_single.squared_length
Synopsis: Calculates the squared length of the vector.
Declaration: function squared_length : single
Visibility: default
64.17 Tvector3_double
64.17.1 Description
The Tvector3_double object provides a vector of three double precision scalars.
64.17.3 Tvector3_double.init_zero
Synopsis: Initializes the vector and sets its elements to zero
64.17.4 Tvector3_double.init_one
Synopsis: Initializes the vector and sets its elements to one
Declaration: constructor init_one
Visibility: default
1125
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.17.5 Tvector3_double.init
Synopsis: Initializes the vector, setting its elements to the values passed to the constructor.
64.17.6 Tvector3_double.length
Synopsis: Calculates the length of the vector.
64.17.7 Tvector3_double.squared_length
Synopsis: Calculates the squared length of the vector.
Declaration: function squared_length : Double
Visibility: default
64.18 Tvector3_extended
64.18.1 Description
The Tvector3_extended object provides a vector of three extended precision scalars.
64.18.3 Tvector3_extended.init_zero
Synopsis: Initializes the vector and sets its elements to zero
Declaration: constructor init_zero
Visibility: default
1126
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.18.4 Tvector3_extended.init_one
Synopsis: Initializes the vector and sets its elements to one
64.18.5 Tvector3_extended.init
Synopsis: Initializes the vector, setting its elements to the values passed to the constructor.
64.18.6 Tvector3_extended.length
Synopsis: Calculates the length of the vector.
64.18.7 Tvector3_extended.squared_length
Synopsis: Calculates the squared length of the vector.
Declaration: function squared_length : extended
Visibility: default
64.19 Tvector3_single
64.19.1 Description
The Tvector3_single object provides a vector of three single precision scalars.
1127
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.19.3 Tvector3_single.init_zero
Synopsis: Initializes the vector and sets its elements to zero
64.19.4 Tvector3_single.init_one
Synopsis: Initializes the vector and sets its elements to one
64.19.5 Tvector3_single.init
Synopsis: Initializes the vector, setting its elements to the values passed to the constructor.
64.19.6 Tvector3_single.length
Synopsis: Calculates the length of the vector.
64.19.7 Tvector3_single.squared_length
Synopsis: Calculates the squared length of the vector.
Declaration: function squared_length : single
Visibility: default
Description: Calculate the squared length of the vector: squared_length=data[0]**2+data[1]**2+data[2]**2.
64.20 Tvector4_double
64.20.1 Description
The Tvector4_double object provides a vector of four double precision scalars.
1128
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.20.3 Tvector4_double.init_zero
Synopsis: Initializes the vector and sets its elements to zero
64.20.4 Tvector4_double.init_one
Synopsis: Initializes the vector and sets its elements to one
Declaration: constructor init_one
Visibility: default
64.20.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
64.20.6 Tvector4_double.length
Synopsis: Calculates the length of the vector.
Declaration: function &length : Double
Visibility: default
Description: Calculate the length of the vector: length=sqrt(data[0]**2+data[1]**2+data[2]**2+data[3]**2). Try
to use squared_length (1129) if you are able to, as it is faster.
64.20.7 Tvector4_double.squared_length
Synopsis: Calculates the squared length of the vector.
1129
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.21 Tvector4_extended
64.21.1 Description
The Tvector4_extended object provides a vector of four extended precision scalars.
64.21.3 Tvector4_extended.init_zero
Synopsis: Initializes the vector and sets its elements to zero
Declaration: constructor init_zero
Visibility: default
64.21.4 Tvector4_extended.init_one
Synopsis: Initializes the vector and sets its elements to one
Declaration: constructor init_one
Visibility: default
64.21.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.21.6 Tvector4_extended.length
Synopsis: Calculates the length of the vector.
Declaration: function &length : extended
Visibility: default
1130
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.21.7 Tvector4_extended.squared_length
Synopsis: Calculates the squared length of the vector.
64.22 Tvector4_single
64.22.1 Description
The Tvector4_single object provides a vector of four single precision scalars.
64.22.3 Tvector4_single.init_zero
Synopsis: Initializes the vector and sets its elements to zero
Declaration: constructor init_zero
Visibility: default
64.22.4 Tvector4_single.init_one
Synopsis: Initializes the vector and sets its elements to one
Declaration: constructor init_one
Visibility: default
64.22.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
1131
CHAPTER 64. REFERENCE FOR UNIT ’MATRIX’
64.22.6 Tvector4_single.length
Synopsis: Calculates the length of the vector.
64.22.7 Tvector4_single.squared_length
Synopsis: Calculates the squared length of the vector.
Declaration: function squared_length : single
Visibility: default
1132
Chapter 65
Name Page
System 1331
65.2 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.
The is_amd_3d_cpu initialized constant allows you to determine if the computer has the AMD
3D extensions. It is set correctly in the unit’s initialization code.
The is_amd_3d_dsp_cpu initialized constant allows you to determine if the computer has the
AMD 3D DSP extensions. It is set correctly in the unit’s initialization code.
The is_amd_3d_mmx_cpu initialized constant allows you to determine if the computer has the
AMD 3D MMX extensions. It is set correctly in the unit’s initialization code.
1133
CHAPTER 65. REFERENCE FOR UNIT ’MMX’
The is_mmx_cpu initialized constant allows you to determine if the computer has MMX extensions.
It is set correctly in the unit’s initialization code.
The is_sse2_cpu initialized constant allows you to determine if the computer has the SSE2 ex-
tensions. It is set correctly in the unit’s initialization code.
The is_sse_cpu initialized constant allows you to determine if the computer has the SSE exten-
sions. It is set correctly in the unit’s initialization code.
65.3.2 Types
pmmxbyte = ^tmmxbyte
pmmxcardinal = ^tmmxcardinal
pmmxinteger = ^tmmxinteger
pmmxlongint = ^tmmxlongint
pmmxshortint = ^tmmxshortint
pmmxsingle = ^tmmxsingle
pmmxword = ^tmmxword
1134
CHAPTER 65. REFERENCE FOR UNIT ’MMX’
Program MMXDemo;
uses mmx;
var
d : double;
a : array[0..10000] of double;
i : longint;
begin
d:=1.0;
{$mmx+}
{ floating point data is used, but we do _no_ arithmetic }
for i:=0 to 10000 do
a[i]:=d; { this is done with 64 bit moves }
{$mmx-}
emms; { clear fpu }
{ now we can do floating point arithmetic again }
end.
1135
CHAPTER 65. REFERENCE FOR UNIT ’MMX’
65.4.2 femms
Synopsis: Reset floating point registers - AMD version
1136
Chapter 66
Name Page
System 1331
66.2 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.
interface
Procedure StartMouseLogging ;
Procedure StopMouseLogging ;
Function IsMouseLogging : Boolean ;
Procedure SetMouseLogFileName ( FileName : S t r i n g ) ;
1137
CHAPTER 66. REFERENCE FOR UNIT ’MOUSE’
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 ;
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 ;
begin
IsMouseLogging : = Logging ;
end ;
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
1138
CHAPTER 66. REFERENCE FOR UNIT ’MOUSE’
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 ;
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 .
1139
CHAPTER 66. REFERENCE FOR UNIT ’MOUSE’
errMouseInitError = errMouseBase + 0
errMouseNotImplemented = errMouseBase + 1
MouseActionDown = $0001
MouseActionMove = $0004
MouseActionUp = $0002
MouseButton4 = $08
MouseButton5 = $10
MouseEventBufSize = 16
The mouse unit has a mechanism to buffer mouse events. This constant defines the size of the event
buffer.
MouseLeftButton = $01
MouseMiddleButton = $04
MouseRightButton = $02
66.4.2 Types
PMouseEvent = ^TMouseEvent
1140
CHAPTER 66. REFERENCE FOR UNIT ’MOUSE’
66.4.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.
Listing: ./mouseex/ex1.pp
Program Example1 ;
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 .
1141
CHAPTER 66. REFERENCE FOR UNIT ’MOUSE’
66.5.2 DoneMouse
Synopsis: Deinitialize mouse driver.
66.5.3 GetMouseButtons
Synopsis: Get the state of the mouse buttons
Declaration: function GetMouseButtons : Word
Visibility: default
Description: GetMouseButtons returns the current button state of the mouse, i.e. it returns a or-ed combina-
tion of the following constants:
Errors: None.
See also: GetMouseEvent (1143), GetMouseX (1143), GetMouseY (1144)
Listing: ./mouseex/ex2.pp
Program Example2 ;
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 .
1142
CHAPTER 66. REFERENCE FOR UNIT ’MOUSE’
66.5.4 GetMouseDriver
Synopsis: Get a copy of the currently active mouse driver.
66.5.5 GetMouseEvent
Synopsis: Get next mouse event from the queue.
Declaration: procedure GetMouseEvent(var MouseEvent: TMouseEvent)
Visibility: default
Description: GetMouseEvent returns the next mouse event (a movement, button press or button release), and
waits for one if none is available in the queue.
Some mouse drivers can implement a mouse event queue which can hold multiple events till they
are fetched. Others don’t, and in that case, a one-event queue is implemented for use with Poll-
MouseEvent (1145).
Errors: None.
See also: GetMouseButtons (1142), GetMouseX (1143), GetMouseY (1144)
66.5.6 GetMouseX
Synopsis: Query the current horizontal position of the mouse cursor.
Declaration: function GetMouseX : Word
Visibility: default
Description: GetMouseX returns the current X position of the mouse. X is measured in characters, starting at 0
for the left side of the screen.
Errors: None.
See also: GetMouseButtons (1142), GetMouseEvent (1143), GetMouseY (1144)
Listing: ./mouseex/ex4.pp
Program Example4 ;
Uses mouse ;
1143
CHAPTER 66. REFERENCE FOR UNIT ’MOUSE’
Var
X , Y : Word ;
begin
InitMouse ;
W r i t e l n ( ' Move mouse c u r s o r t o square 10 ,10 t o end ' ) ;
Repeat
X: = GetMouseX ;
Y: = GetMouseY ;
W r i t e l n ( ' X , Y= ( ' ,X , ' , ' ,Y , ' ) ' ) ;
U n t i l (X=9) and (Y= 9 ) ;
DoneMouse ;
end .
66.5.7 GetMouseY
Synopsis: Query the current vertical position of the mouse cursor.
Declaration: function GetMouseY : Word
Visibility: default
Description: GetMouseY returns the current Y position of the mouse. Y is measured in characters, starting at 0
for the top of the screen.
For an example, see GetMouseX (1143)
Errors: None.
See also: GetMouseButtons (1142), GetMouseEvent (1143), GetMouseX (1143)
66.5.8 HideMouse
Synopsis: Hide the mouse cursor.
Declaration: procedure HideMouse
Visibility: default
Description: HideMouse hides the mouse cursor. This may or may not be implemented on all systems, and
depends on the driver.
Errors: None.
Listing: ./mouseex/ex5.pp
Program Example5 ;
Uses mouse ;
Var
Event : TMouseEvent ;
V i s i b l e : Boolean ;
1144
CHAPTER 66. REFERENCE FOR UNIT ’MOUSE’
begin
InitMouse ;
ShowMouse ;
V i s i b l e : = True ;
W r i t e l n ( ' Press l e f t mouse b u t t o n t o h i d e / show , r i g h t b u t t o n q u i t s ' ) ;
Repeat
GetMouseEvent ( Event ) ;
With Event do
I f ( B u t t o n s = MouseLeftbutton ) and
( A c t i o n =MouseActionDown ) then
begin
I f V i s i b l e then
HideMouse
else
ShowMouse ;
V i s i b l e : = Not V i s i b l e ;
end ;
U n t i l ( Event . B u t t o n s =MouseRightButton ) and
( Event . A c t i o n =MouseActionDown ) ;
DoneMouse ;
end .
66.5.9 InitMouse
Synopsis: Initialize the FPC mouse driver.
Declaration: procedure InitMouse
Visibility: default
Description: InitMouse Initializes the mouse driver. This will allocate any data structures needed for the
mouse to function. All mouse functions can be used after a call to InitMouse.
A call to InitMouse must always be followed by a call to DoneMouse (1142) 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 (1142), DetectMouse (1141)
66.5.10 PollMouseEvent
Synopsis: Query next mouse event. Do not wait if none available.
Declaration: function PollMouseEvent(var MouseEvent: TMouseEvent) : Boolean
Visibility: default
Description: PollMouseEvent checks whether a mouse event is available, and returns it in MouseEvent if
one is found. The function result is True in that case. If no mouse event is pending, the function
result is False, and the contents of MouseEvent is undefined.
Note that after a call to PollMouseEvent, the event should still be removed from the mouse event
queue with a call to GetMouseEvent.
Errors: None.
See also: GetMouseEvent (1143), PutMouseEvent (1146)
1145
CHAPTER 66. REFERENCE FOR UNIT ’MOUSE’
66.5.11 PutMouseEvent
Synopsis: Put a mouse event in the event queue.
66.5.12 SetMouseDriver
Synopsis: Set a new mouse driver.
Declaration: procedure SetMouseDriver(const Driver: TMouseDriver)
Visibility: default
Description: SetMouseDriver sets the mouse driver to Driver. This function should be called before Init-
Mouse (1145) is called, or after DoneMouse is called. If it is called after the mouse has been
initialized, it does nothing.
For more information on setting the mouse driver, mousedrv (1137).
For an example, see mousedrv (1137)
66.5.13 SetMouseXY
Synopsis: Set the mouse cursor position.
Declaration: procedure SetMouseXY(x: Word; y: Word)
Visibility: default
Description: SetMouseXY places the mouse cursor on X,Y. X and Y are zero based character coordinates: 0,0
is the top-left corner of the screen, and the position is in character cells (i.e. not in pixels).
Errors: None.
See also: GetMouseX (1143), GetMouseY (1144)
Listing: ./mouseex/ex7.pp
Program Example7 ;
Uses mouse ;
begin
InitMouse ;
W r i t e l n ( ' C l i c k r i g h t mouse b u t t o n t o q u i t . ' ) ;
1146
CHAPTER 66. REFERENCE FOR UNIT ’MOUSE’
SetMouseXY ( 4 0 , 1 2 ) ;
Repeat
W r i t e l n ( GetMouseX , ' , ' , GetMouseY ) ;
I f ( GetMouseX>70) then
SetMouseXY ( 1 0 , GetMouseY ) ;
I f ( GetMouseY>20) then
SetMouseXY ( GetMouseX , 5 ) ;
U n t i l ( GetMouseButtons=MouseRightButton ) ;
DoneMouse ;
end .
66.5.14 ShowMouse
Synopsis: Show the mouse cursor.
66.6 TMouseDriver
TMouseDriver = record
UseDefaultQueue : Boolean;
InitDriver :
procedure;
DoneDriver : procedure;
DetectMouse : function : Byte
;
ShowMouse : procedure;
HideMouse : procedure;
GetMouseX :
function : Word;
GetMouseY : function : Word;
GetMouseButtons
: function : Word;
SetMouseXY : procedure(x: Word; y: Word);
GetMouseEvent : procedure(var MouseEvent: TMouseEvent);
PollMouseEvent
: function(var MouseEvent: TMouseEvent) : Boolean;
PutMouseEvent
: procedure(const MouseEvent: TMouseEvent);
end
The TMouseDriver record is used to implement a mouse driver in the SetMouseDriver (1146)
function. Its fields must be filled in before calling the SetMouseDriver (1146) function.
1147
CHAPTER 66. REFERENCE FOR UNIT ’MOUSE’
66.7 TMouseEvent
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.
1148
Chapter 67
Name Page
System 1331
67.2 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.
coOverflow = - 2
1149
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
MaxReadBytes = $7fffffff
stCreate = $3C00
1150
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
stError = - 1
stGetError = - 5
stInitError = - 2
stOk = 0
stOpen = $3D02
stOpenError = - 8
stOpenRead = $3D00
stOpenWrite = $3D01
stPutError = - 6
stReadError = - 3
stSeekError = - 7
stWriteError = - 4
vmtHeaderSize = 8
1151
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
67.3.2 Types
AsciiZ = Array[0..255] of Char
FNameStr = String
PBufStream = ^TBufStream
PByteArray = ^TByteArray
PCharSet = ^TCharSet
PCollection = ^TCollection
PDosStream = ^TDosStream
PItemList = ^TItemList
PMemoryStream = ^TMemoryStream
PObject = ^TObject
PPoint = ^TPoint
PPointerArray = ^TPointerArray
PRect = ^TRect
1152
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
PResourceCollection = ^TResourceCollection
PResourceFile = ^TResourceFile
PSortedCollection = ^TSortedCollection
PStrCollection = ^TStrCollection
PStream = ^TStream
PStreamRec = ^TStreamRec
PStrIndex = ^TStrIndex
PString = PShortString
Pointer to a shortstring.
PStringCollection = ^TStringCollection
PStringList = ^TStringList
PStrListMaker = ^TStrListMaker
PUnSortedStrCollection = ^TUnSortedStrCollection
PWordArray = ^TWordArray
1153
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
Sw_Integer = LongInt
Sw_Word = Cardinal
67.3.3 Variables
invalidhandle : THandle
Value for invalid handle. Initial value for file stream handles or when the stream is closed.
1154
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
67.4.2 CallPointerConstructor
Synopsis: Call a constructor with a pointer argument.
67.4.3 CallPointerLocal
Synopsis: Call a local nested function with a pointer argument
67.4.4 CallPointerMethod
Synopsis: Call a method with a single pointer argument
Declaration: function CallPointerMethod(Method: CodePointer; Obj: pointer;
Param1: pointer) : pointer
Visibility: default
Description: CallPointerMethod calls the method with address Method for instance Obj. It passes Param1
to the method as the single argument. It returns a pointer to the instance.
Errors: If the method expects other parameters than a single pointer, the stack may become corrupted.
See also: CallVoidMethod (1157), CallVoidLocal (1156), CallPointerLocal (1155), CallVoidMethodLocal (1157),
CallPointerMethodLocal (1156), CallVoidConstructor (1156), CallPointerConstructor (1155)
1155
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
67.4.5 CallPointerMethodLocal
Synopsis: Call a local procedure of a method with a pointer argument
67.4.6 CallVoidConstructor
Synopsis: Call a constructor with no arguments
Declaration: function CallVoidConstructor(Ctor: CodePointer; Obj: pointer;
VMT: pointer) : pointer
Visibility: default
Description: CallVoidConstructor calls the constructor of an object. Ctor is the address of the construc-
tor, Obj is a pointer to the instance. If it is Nil, then a new instance is allocated. VMT is a pointer to
the object’s VMT. The return value is a pointer to the instance.
Note that this can only be used on constructors that require no arguments.
67.4.7 CallVoidLocal
Synopsis: Call a local nested procedure.
Errors: If the local function expects parameters, the stack may become corrupted.
See also: CallPointerMethod (1155), CallVoidMethod (1157), CallPointerLocal (1155), CallVoidMethodLo-
cal (1157), CallPointerMethodLocal (1156), CallVoidConstructor (1156), CallPointerConstructor
(1155)
1156
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
67.4.8 CallVoidMethod
Synopsis: Call an object method
Declaration: function CallVoidMethod(Method: CodePointer; Obj: pointer) : pointer
Visibility: default
Description: CallVoidMethod calls the method with address Method for instance Obj. It returns a pointer
to the instance.
Errors: If the method expects parameters, the stack may become corrupted.
See also: CallPointerMethod (1155), CallVoidLocal (1156), CallPointerLocal (1155), CallVoidMethodLo-
cal (1157), CallPointerMethodLocal (1156), CallVoidConstructor (1156), CallPointerConstructor
(1155)
67.4.9 CallVoidMethodLocal
Synopsis: Call a local procedure of a method
Declaration: function CallVoidMethodLocal(Func: CodePointer; Frame: Pointer;
Obj: pointer) : pointer
Visibility: default
Description: CallVoidMethodLocal calls the local procedure with address Func, where Frame is the frame
of the wrapping method.
Errors: If the local function expects parameters, the stack may become corrupted.
See also: CallPointerMethod (1155), CallVoidMethod (1157), CallPointerLocal (1155), CallVoidLocal (1156),
CallPointerMethodLocal (1156), CallVoidConstructor (1156), CallPointerConstructor (1155)
67.4.10 DisposeStr
Synopsis: Dispose of a shortstring which was allocated on the heap.
Declaration: procedure DisposeStr(P: PString)
Visibility: default
Description: DisposeStr removes a dynamically allocated string from the heap.
For an example, see NewStr (1158).
Errors: None.
See also: NewStr (1158), SetStr (1161)
67.4.11 LongDiv
Synopsis: Overflow safe divide
Declaration: function LongDiv(X: LongInt; Y: Integer) : Integer
Visibility: default
Description: LongDiv divides X by Y. The result is of type Integer instead of type Longint, as you would
get normally.
1157
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
67.4.12 LongMul
Synopsis: Overflow safe multiply.
Errors: None.
See also: LongDiv (1157)
67.4.13 NewStr
Synopsis: Allocate a copy of a shortstring on the heap.
Listing: ./objectex/ex40.pp
Program ex40 ;
Uses O b j e c t s ;
Var S : S t r i n g ;
P : PString ;
begin
S: = 'Some r e a l l y c u t e s t r i n g ' ;
P: = NewStr (S ) ;
I f P^<>S then
W r i t e l n ( ' Oh−oh . . . Something i s wrong ! ! ' ) ;
DisposeStr (P ) ;
end .
1158
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
67.4.14 RegisterObjects
Synopsis: Register standard objects.
Declaration: procedure RegisterObjects
Visibility: default
Description: RegisterObjects registers the following objects for streaming:
Errors: None.
See also: RegisterType (1159)
67.4.15 RegisterType
Synopsis: Register new object for streaming.
Declaration: procedure RegisterType(var S: TStreamRec)
Visibility: default
Description: RegisterType registers a new type for streaming. An object cannot be streamed unless it has
been registered first. The stream record S needs to have the following fields set:
ObjType: Sw_WordThis should be a unique identifier. Each possible type should have it’s own
identifier.
VmtLink: pointerThis should contain a pointer to the VMT (Virtual Method Table) of the object
you try to register.
Load : Pointeris a pointer to a method that initializes an instance of that object, and reads the ini-
tial values from a stream. This method should accept as it’s sole argument a PStream type
variable.
Store: Pointeris a pointer to a method that stores an instance of the object to a stream. This method
should accept as it’s sole argument a PStream type variable.
The VMT of the object can be retrieved with the following expression:
VmtLink: Ofs(TypeOf(MyType)^);
Errors: In case of error (if a object with the same ObjType) is already registered), run-time error 212
occurs.
Listing: ./objectex/myobject.pp
Unit MyObject ;
Interface
Uses O b j e c t s ;
Type
1159
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
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 ;
begin
Stream . Read ( F i e l d , Sizeof ( F i e l d ) ) ;
end ;
begin
end ;
Function TMyObject . G e t F i e l d : L o n g i n t ;
begin
GetField := Field ;
end ;
begin
F i e l d : = Value ;
end ;
begin
Stream . Write ( F i e l d , SizeOf ( F i e l d ) ) ;
end ;
begin
RegisterObjects ;
1160
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
RegisterType ( MyObjectRec ) ;
end .
67.4.16 SetStr
Synopsis: Allocate a copy of a shortstring on the heap.
Declaration: procedure SetStr(var p: PString; const s: string)
Visibility: default
Description: SetStr makes a copy of the string S on the heap and returns the pointer to this copy in P. If P
pointed to another string (i.e. was not Nil, the memory is released first. Contrary to NewStr (1158),
if the string is empty then a pointer to an empty string is returned.
The allocated memory is not based on the declared size of the string passed to NewStr, but is based
on the actual length of the string.
Errors: If not enough memory is available, an ’out of memory’ error will occur.
See also: DisposeStr (1157), NewStr (1158)
67.5 LongRec
LongRec = packed record
Hi : Word;
Lo : Word;
end
67.6 PtrRec
PtrRec = packed record
Ofs : Word;
Seg : Word;
end
67.7 TStreamRec
TStreamRec = packed record
ObjType : Sw_Word;
VmtLink : pointer
;
Load : CodePointer;
Store : CodePointer;
1161
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
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.
67.8 TStrIndexRec
TStrIndexRec = packed record
Key : Sw_Word;
Count : Word;
Offset
: Word;
end
67.9 WordRec
WordRec = packed record
Hi : Byte;
Lo : Byte;
end
67.10 TBufStream
67.10.1 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.
1162
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
67.10.3 TBufStream.Init
Synopsis: Initialize an instance of TBufStream and open the file.
Declaration: constructor Init(FileName: FNameStr; Mode: Word; Size: Word)
Visibility: default
Description: Init instantiates an instance of TBufStream. The name of the file that contains (or will contain)
the data of the stream is given in FileName. The Mode parameter determines whether a new file
should be created and what access rights you have on the file. It can be one of the following constants:
The Size parameter determines the size of the buffer that will be created. It should be different from
zero.
For an example see TBufStream.Flush (1164).
Errors: On error, Status is set to stInitError, and ErrorInfo is set to the dos error code.
See also: TDosStream.Init (1182), TBufStream.Done (1163)
67.10.4 TBufStream.Done
Synopsis: Close the file and cleans up the instance.
Declaration: destructor 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 (1164).
Errors: None.
See also: TDosStream.Done (1182), TBufStream.Init (1163), TBufStream.Close (1164)
1163
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
67.10.5 TBufStream.Close
Synopsis: Flush data and Close the file.
67.10.6 TBufStream.Flush
Synopsis: FLush data from buffer, and write it to stream.
Declaration: procedure 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 (1166) for more info on the errors.
See also: TStream.Close (1212), TBufStream.Init (1163), TBufStream.Done (1163)
Listing: ./objectex/ex15.pp
Program ex15 ;
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
L : = 'Some c o n s t a n t s t r i n g ' ;
{ B u f f e r s i z e o f 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 ^ ;
1164
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
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.10.7 TBufStream.Truncate
Synopsis: Flush buffer, and truncate the file at current position.
Declaration: procedure 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 (1183).
Errors: Errors can be those of Flush (1164) or TDosStream.Truncate (1183).
67.10.8 TBufStream.Seek
Synopsis: Set current position in file.
Declaration: procedure Seek(Pos: LongInt); Virtual
Visibility: default
Description: If the stream’s 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 (1214);
Errors: In case an error occurs, the stream’s status is set to stSeekError, and the OS error code is stored
in ErrorInfo.
See also: TStream.Seek (1214), TStream.GetPos (1210)
67.10.9 TBufStream.Open
Synopsis: Open the file if it is closed.
1165
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
67.10.10 TBufStream.Read
Synopsis: Read data from the file to a buffer in memory.
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 (1215), TBufStream.Write (1166)
67.10.11 TBufStream.Write
Synopsis: Write data to the file from a buffer in memory.
67.11 TCollection
67.11.1 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.
1166
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
67.11.3 TCollection.Init
Synopsis: Instantiate a new collection.
67.11.4 TCollection.Load
Synopsis: Initialize a new collection and load collection from a stream.
Declaration: constructor Load(var S: TStream)
Visibility: default
Description: Load initializes a new instance of a collection. It reads from stream S the item count, the item limit
count, and the increase size. After that, it reads the specified number of items from the stream.
1167
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
Listing: ./objectex/ex22.pp
Program ex22 ;
Var C : PCollection ;
M : PMyObject ;
I : Longint ;
S : 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 100 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.11.5 TCollection.Done
Synopsis: Clean up collection, release all memory.
Declaration: destructor 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 (1178).
Errors: None.
See also: TCollection.Init (1167), TCollection.FreeAll (1173)
67.11.6 TCollection.At
Synopsis: Return the item at a certain index.
Declaration: function At(Index: Sw_Integer) : Pointer
1168
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
Visibility: default
Description: At returns the item at position Index.
Errors: If Index is less than zero or larger than the number of items in the collection, seepl{Error}{TCollection.Error}
is called with coIndexError and Index as arguments, resulting in a run-time error.
Listing: ./objectex/ex23.pp
Program ex23 ;
Var C : P C o l l e c t i o n ;
M : PMyObject ;
I : Longint ;
begin
C: =New( P C o l l e c t i o n , I n i t ( 1 0 0 , 1 0 ) ) ;
For I :=1 to 100 do
begin
M: =New( PMyObject , I n i t ) ;
M^ . S e t F i e l d (100− I ) ;
C^ . I n s e r t (M) ;
end ;
For I :=0 to C^ . Count−1 do
begin
M: =C^ . At ( I ) ;
W r i t e l n ( ' O b j e c t ' , i , ' has f i e l d : ' ,M^ . G e t F i e l d ) ;
end ;
C^ . F r e e A l l ;
Dispose (C, Done ) ;
end .
67.11.7 TCollection.IndexOf
Synopsis: Find the position of a certain item.
Listing: ./objectex/ex24.pp
Program ex24 ;
1169
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
Var C : P C o l l e c t i o n ;
M, Keep : PMyObject ;
I : Longint ;
begin
Randomize ;
C: =New( P C o l l e c t i o n , I n i t ( 1 0 0 , 1 0 ) ) ;
Keep : = N i l ;
For I :=1 to 100 do
begin
M: =New( PMyObject , I n i t ) ;
M^ . S e t F i e l d ( I −1);
I f Random<0.1 then
Keep : =M;
C^ . I n s e r t (M) ;
end ;
I f Keep= N i l then
begin
W r i t e l n ( ' Please run again . No o b j e c t s e l e c t e d ' ) ;
Halt ( 1 ) ;
end ;
W r i t e l n ( ' S e l e c t e d o b j e c t has f i e l d : ' , Keep ^ . G e t F i e l d ) ;
Write ( ' S e l e c t e d o b j e c t has i n d e x : ' ,C^ . IndexOf ( Keep ) ) ;
W r i t e l n ( ' should match i t ' ' s f i e l d . ' ) ;
C^ . F r e e A l l ;
Dispose (C, Done ) ;
end .
67.11.8 TCollection.GetItem
Synopsis: Read one item off the stream.
Declaration: function GetItem(var S: TStream) : Pointer; 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 (1208).
See also: TStream.Get (1208), TCollection.Store (1181)
67.11.9 TCollection.LastThat
Synopsis: Return last item which matches a test.
Declaration: function LastThat(Test: CodePointer) : Pointer
Visibility: default
Description: This function returns the last item in the collection for which Test returns a non-nil result. Test
is a function that accepts 1 argument: a pointer to an object, and that returns a pointer as a result.
Errors: None.
1170
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
Listing: ./objectex/ex25.pp
Program ex21 ;
Var C : P C o l l e c t i o n ;
M : PMyObject ;
I : Longint ;
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 100 do
begin
M: =New( PMyObject , I n i t ) ;
M^ . S e t F i e l d ( I ) ;
C^ . I n s e r t (M) ;
end ;
W r i t e l n ( ' I n s e r t e d ' ,C^ . Count , ' o b j e c t s ' ) ;
W r i t e l n ( ' L a s t one f o r which F i e l d <56 has i n d e x ( should be 54) : ',
C^ . IndexOf (C^ . L a s t T h a t ( @CheckField ) ) ) ;
C^ . F r e e A l l ;
Dispose (C, Done ) ;
end .
67.11.10 TCollection.FirstThat
Synopsis: Return first item which matches a test.
Declaration: function FirstThat(Test: CodePointer) : Pointer
Visibility: default
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 (1170)
Listing: ./objectex/ex26.pp
Program ex21 ;
1171
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
Var C : P C o l l e c t i o n ;
M : PMyObject ;
I : Longint ;
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 100 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 56) : ',
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.11.11 TCollection.Pack
Synopsis: Remove all >Nil pointers from the collection.
Declaration: procedure Pack
Visibility: default
Description: Pack removes all Nil pointers from the collection, and adjusts Count to reflect this change. No
memory is freed as a result of this call. In order to free any memory, you can call SetLimit with
an argument of Count after a call to Pack.
Errors: None.
See also: TCollection.SetLimit (1179)
Listing: ./objectex/ex26.pp
Program ex21 ;
Var C : P C o l l e c t i o n ;
M : PMyObject ;
I : Longint ;
1172
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
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 100 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 56) : ',
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.11.12 TCollection.FreeAll
Synopsis: Release all objects from the collection.
Declaration: procedure FreeAll
Visibility: default
Description: FreeAll calls the destructor of each object in the collection. It doesn’t release any memory occu-
pied by the collection itself, but it does set Count to zero.
See also: TCollection.DeleteAll (1174), TCollection.FreeItem (1177)
Listing: ./objectex/ex28.pp
Program ex28 ;
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 100 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) ;
1173
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
end ;
W r i t e l n ( ' Added 100 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.11.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. Con-
trary to FreeAll (1173), DeletAll doesn’t call the destructor of the objects.
Errors: None.
See also: TCollection.FreeAll (1173), TCollection.Delete (1175)
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 28 , where F r e e A l l i s used .
}
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 100 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 100 Items . ' ) ;
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.11.14 TCollection.Free
Synopsis: Free item from collection, calling it’s destructor.
1174
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
Listing: ./objectex/ex30.pp
Program ex30 ;
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 100 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 100 Items . ' ) ;
With C^ do
While Count >0 do Free ( At ( Count − 1 ) ) ;
W r i t e l n ( ' Freed a l l o b j e c t s . ' ) ;
Dispose (C, Done ) ;
end .
67.11.15 TCollection.Insert
Synopsis: Insert a new item in the collection at the end.
Declaration: procedure Insert(Item: Pointer); 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.
Errors: None.
See also: TCollection.AtInsert (1180), TCollection.AtPut (1179)
67.11.16 TCollection.Delete
Synopsis: Delete an item from the collection, but does not destroy it.
Declaration: procedure Delete(Item: Pointer)
1175
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
Visibility: default
Description: Delete deletes Item from the collection. It doesn’t call the item’s destructor, though. For this the
Free (1174) call is provided.
Errors: If the Item is not in the collection, Error will be called with coIndexError.
Listing: ./objectex/ex31.pp
Program ex31 ;
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 100 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 100 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.11.17 TCollection.AtFree
Synopsis: Free an item at the indicates position, calling it’s destructor.
Declaration: procedure AtFree(Index: Sw_Integer)
Visibility: default
Description: AtFree deletes the item at position Index in the collection, and calls the item’s destructor if it is
not Nil.
Errors: If Index isn’t valid then Error (1179) is called with CoIndexError.
See also: TCollection.Free (1174), TCollection.AtDelete (1177)
Listing: ./objectex/ex32.pp
Program ex32 ;
1176
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
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 100 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 100 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.11.18 TCollection.FreeItem
Synopsis: Destroy a non-nil item.
Errors: None.
See also: TCollection.Free (1174), TCollection.AtFree (1176)
67.11.19 TCollection.AtDelete
Synopsis: Delete item at certain position.
Errors: If Index isn’t valid then Error (1179) is called with CoIndexError.
See also: TCollection.Delete (1175)
Listing: ./objectex/ex33.pp
1177
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
Program ex33 ;
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 100 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 100 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.11.20 TCollection.ForEach
Synopsis: Execute procedure for each item in the list.
Declaration: procedure ForEach(Action: CodePointer)
Visibility: default
Description: ForEach calls Action for each element in the collection, and passes the element as an argument
to Action.
Action is a procedural type variable that accepts a pointer as an argument.
Errors: None.
See also: TCollection.FirstThat (1171), TCollection.LastThat (1170)
Listing: ./objectex/ex21.pp
Program ex21 ;
Var C : P C o l l e c t i o n ;
M : PMyObject ;
I : Longint ;
begin
1178
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
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 100 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.11.21 TCollection.SetLimit
Synopsis: Set maximum number of elements in the collection.
Declaration: procedure SetLimit(ALimit: Sw_Integer); 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 (1172).
Errors: None.
67.11.22 TCollection.Error
Synopsis: Set error code.
Declaration: procedure Error(Code: Integer; Info: Integer); 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.
67.11.23 TCollection.AtPut
Synopsis: Set collection item, overwriting an existing value.
Declaration: procedure AtPut(Index: Sw_Integer; Item: Pointer)
Visibility: default
1179
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
Description: AtPut sets the element at position Index in the collection to Item. Any previous value is over-
written.
For an example, see Pack (1172).
Errors: If Index isn’t valid then Error (1179) is called with CoIndexError.
67.11.24 TCollection.AtInsert
Synopsis: Insert an element at a certain position in the collection.
Declaration: procedure AtInsert(Index: Sw_Integer; Item: Pointer)
Visibility: default
Description: AtInsert inserts Item in the collection at position Index, shifting all elements by one position.
In case the current limit is reached, the collection will try to expand with a call to SetLimit
Errors: If Index isn’t valid then Error (1179) is called with CoIndexError. If the collection fails to
expand, then coOverFlow is passed to Error.
See also: TCollection.Insert (1175)
Listing: ./objectex/ex34.pp
Program ex34 ;
Var C : P C o l l e c t i o n ;
M : PMyObject ;
I : Longint ;
begin
Writeln ( ' F i e l d : ' ,P ^ . G e t F i e l d ) ;
end ;
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 100 r e c o r d s a t random p l a c e s . ' ) ;
For I :=1 to 100 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)
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 .
1180
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
67.11.25 TCollection.Store
Synopsis: Write collection to a stream.
67.11.26 TCollection.PutItem
Synopsis: Put one item on the stream
Declaration: procedure PutItem(var S: TStream; Item: Pointer); Virtual
Visibility: default
Description: PutItem writes Item to stream S. This method is used internally by the TCollection object,
and should not be called directly.
Errors: Errors are those returned by TStream.Put (1213).
See also: Store (1181), GetItem (1170)
67.12 TDosStream
67.12.1 Description
TDosStream is a stream that stores it’s contents in a file. it overrides a couple of methods of
TStream (1208) for this.
In addition to the fields inherited from TStream (see TStream (1208)), 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 (1162).
1181
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
67.12.3 TDosStream.Init
Synopsis: Instantiate a new instance of TDosStream.
67.12.4 TDosStream.Done
Synopsis: Closes the file and cleans up the instance.
Declaration: destructor 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 (1183).
Errors: None.
See also: TDosStream.Init (1182), TDosStream.Close (1182)
67.12.5 TDosStream.Close
Synopsis: Close the file.
Declaration: procedure Close; Virtual
Visibility: default
Description: Close closes the file if it was open, and sets Handle to -1. Contrary to Done (1182) it does not
clean up the instance of TDosStream
For an example, see TDosStream.Open (1184).
Errors: None.
1182
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
67.12.6 TDosStream.Truncate
Synopsis: Truncate the file on the current position.
Declaration: procedure 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 stream’s status is set to stError and ErrorInfo is set to the OS error
code.
See also: TStream.Truncate (1213), TStream.GetSize (1210)
Listing: ./objectex/ex16.pp
Program ex16 ;
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 ' ;
{ B u f f e r s i z e o f 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 ) ;
S ^ . Truncate ;
W r i t e l n ( ' Truncated stream . Size i s : ' ,S ^ . GetSize ) ;
S ^ . Close ;
Dispose ( S , Done ) ;
end .
67.12.7 TDosStream.Seek
Synopsis: Set file position.
Declaration: procedure Seek(Pos: LongInt); Virtual
Visibility: default
Description: If the stream’s status is stOK, then Seek sets the file position to Pos. Pos is a zero-based offset,
counted from the beginning of the file.
1183
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
Errors: In case an error occurs, the stream’s status is set to stSeekError, and the OS error code is stored
in ErrorInfo.
See also: TStream.Seek (1214), TStream.GetPos (1210)
Listing: ./objectex/ex17.pp
Program ex17 ;
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 ' ;
{ B u f f e r s i z e o f 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 .
67.12.8 TDosStream.Open
Synopsis: Open the file stream
Declaration: procedure Open(OpenMode: Word); Virtual
Visibility: default
Description: If the stream’s 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 (1182) 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 (1212), TDosStream.Close (1182)
1184
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
Listing: ./objectex/ex14.pp
Program ex14 ;
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.12.9 TDosStream.Read
Synopsis: Read data from the stream to a buffer.
67.12.10 TDosStream.Write
Synopsis: Write data from a buffer to the stream.
Declaration: procedure Write(var Buf; Count: LongInt); 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 (1215).
1185
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
Errors: In case of an error, Status is set to StWriteError, and ErrorInfo gets the OS specific error.
See also: TStream.Write (1215), TDosStream.Read (1185)
67.13 TMemoryStream
67.13.1 Description
The TMemoryStream object implements a stream that stores it’s data in memory. The data is stored
on the heap, with the possibility to specify the maximum amount of data, and the size of the memory
blocks being used.
67.13.3 TMemoryStream.Init
Synopsis: Initialize memory stream, reserves memory for stream data.
Declaration: constructor Init(ALimit: LongInt; ABlockSize: Word)
Visibility: default
Description: Init instantiates a new TMemoryStream object. The memorystreamobject will initially allocate
at least ALimit bytes memory, divided into memory blocks of size ABlockSize. The number of
blocks needed to get to ALimit bytes is rounded up.
By default, the number of blocks is 1, and the size of a block is 8192. This is selected if you specify
0 as the blocksize.
For an example, see e.g TStream.CopyFrom (1216).
Errors: If the stream cannot allocate the initial memory needed for the memory blocks, then the stream’s
status is set to stInitError.
See also: TMemoryStream.Done (1186)
67.13.4 TMemoryStream.Done
Synopsis: Clean up memory and destroy the object instance.
Declaration: destructor 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 (1216).
1186
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
Errors: None.
See also: TMemoryStream.Init (1186)
67.13.5 TMemoryStream.Truncate
Synopsis: Set the stream size to the current position.
Declaration: procedure 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 stream’s status is set to stError
See also: TStream.Truncate (1213)
Listing: ./objectex/ex20.pp
Program ex20 ;
Uses O b j e c t s ;
Var L : String ;
P : PString ;
S : PMemoryStream ;
I : Longint ;
begin
L : = 'Some c o n s t a n t s t r i n g ' ;
{ B u f f e r s i z e o f 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 100 t i m e s " ' , L , ' " t o stream . ' ) ;
For I :=1 to 100 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 100. ' ) ;
Dispose ( S , Done ) ;
Writeln ( ' Finished . ' ) ;
end .
67.13.6 TMemoryStream.Read
Synopsis: Read data from the stream to a location in memory.
Declaration: procedure Read(var Buf; Count: LongInt); 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 (1215).
1187
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
Errors: If there is not enough data available, no data is read, and the stream’s status is set to stReadError.
See also: TStream.Read (1215), TMemoryStream.Write (1188)
67.13.7 TMemoryStream.Write
Synopsis: Write data to the stream.
67.14 TObject
67.14.1 Description
This type serves as the basic object for all other objects in the Objects unit.
67.14.3 TObject.Init
Synopsis: Construct (initialize) a new object
Declaration: constructor Init
Visibility: default
Description: Instantiates a new object of type TObject. It fills the instance up with Zero bytes.
For an example, see Free (1189)
Errors: None.
See also: TObject.Free (1189), TObject.Done (1189)
1188
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
67.14.4 TObject.Free
Synopsis: Destroy an object and release all memory.
Errors: No checking is performed to see whether self is nil and whether the object is indeed allocated
on the heap.
See also: TObject.Init (1188), TObject.Done (1189)
Listing: ./objectex/ex7.pp
program ex7 ;
Uses O b j e c t s ;
Var O : PObject ;
begin
/ / A l l o c a t e memory f o r o b j e c t .
O: =New( PObject , I n i t ) ;
/ / Free memory o f o b j e c t .
O^ . f r e e ;
end .
67.14.5 TObject.Is_Object
Synopsis: Check whether a pointer points to an object.
Declaration: function Is_Object(P: Pointer) : Boolean
Visibility: default
Description: Is_Object returns True if the pointer P points to an instance of a TObject descendent, it
returns false otherwise.
67.14.6 TObject.Done
Synopsis: Destroy an object.
1189
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
Listing: ./objectex/ex8.pp
program ex8 ;
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.15 TPoint
67.15.1 Description
Record describing a point in a 2 dimensional plane.
67.16 TRect
67.16.1 Description
Describes a rectangular region in a plane.
67.16.3 TRect.Empty
Synopsis: Is the surface of the rectangle zero
Declaration: function Empty : Boolean
Visibility: default
Description: Empty returns True if the rectangle defined by the corner points A, B has zero or negative surface.
1190
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
Errors: None.
See also: TRect.Equals (1191), TRect.Contains (1192)
Listing: ./objectex/ex1.pp
Program ex1 ;
Uses o b j e c t s ;
begin
With ARect . A do
begin
X: = 1 0 ;
Y: = 1 0 ;
end ;
With ARect . B do
begin
X: = 2 0 ;
Y: = 2 0 ;
end ;
{ O f f s e t B by ( 5 , 5 ) }
With BRect . A do
begin
X: = 1 5 ;
Y: = 1 5 ;
end ;
With BRect . B do
begin
X: = 2 5 ;
Y: = 2 5 ;
end ;
{ Point }
With P do
begin
X: = 1 5 ;
Y: = 1 5 ;
end ;
W r i t e l n ( ' A empty : ' , ARect . Empty ) ;
W r i t e l n ( ' B empty : ' , BRect . Empty ) ;
W r i t e l n ( ' A Equals B : ' , ARect . Equals ( BRect ) ) ;
W r i t e l n ( ' A Contains ( 1 5 , 1 5 ) : ' , ARect . Contains (P ) ) ;
end .
67.16.4 TRect.Equals
Synopsis: Do the corners of the rectangles match
Declaration: function Equals(R: TRect) : Boolean
Visibility: default
1191
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
Description: Equals returns True if the rectangle has the same corner points A,B as the rectangle R, and
False otherwise.
For an example, see TRect.Empty (1190)
Errors: None.
67.16.5 TRect.Contains
Synopsis: Determine if a point is inside the rectangle
Declaration: function Contains(P: TPoint) : Boolean
Visibility: default
Description: Contains returns True if the point P is contained in the rectangle (including borders), False
otherwise.
Errors: None.
67.16.6 TRect.Copy
Synopsis: Copy cornerpoints from another rectangle.
Declaration: procedure Copy(R: TRect)
Visibility: default
Description: Assigns the rectangle R to the object. After the call to Copy, the rectangle R has been copied to the
object that invoked Copy.
Errors: None.
See also: TRect.Assign (1195)
Listing: ./objectex/ex2.pp
Program ex2 ;
Uses o b j e c t s ;
begin
ARect . Assign ( 1 0 , 1 0 , 2 0 , 2 0 ) ;
BRect . Assign ( 1 5 , 1 5 , 2 5 , 2 5 ) ;
CRect . Copy ( ARect ) ;
I f ARect . Equals ( CRect ) Then
W r i t e l n ( ' ARect equals CRect ' )
Else
W r i t e l n ( ' ARect does n o t equal CRect ! ' ) ;
end .
1192
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
67.16.7 TRect.Union
Synopsis: Enlarges rectangle to encompass another rectangle.
Errors: None.
See also: TRect.Intersect (1193)
Listing: ./objectex/ex3.pp
Program ex3 ;
Uses o b j e c t s ;
begin
ARect . Assign ( 1 0 , 1 0 , 2 0 , 2 0 ) ;
BRect . Assign ( 1 5 , 1 5 , 2 5 , 2 5 ) ;
{ CRect i s union o f ARect and BRect }
CRect . Assign ( 1 0 , 1 0 , 2 5 , 2 5 ) ;
{ Calculate i t e x p l i c i t l y }
ARect . Union ( BRect ) ;
I f ARect . Equals ( CRect ) Then
W r i t e l n ( ' ARect equals CRect ' )
Else
W r i t e l n ( ' ARect does n o t equal CRect ! ' ) ;
end .
67.16.8 TRect.Intersect
Synopsis: Reduce rectangle to intersection with another rectangle
Errors: None.
See also: TRect.Union (1193)
Listing: ./objectex/ex4.pp
1193
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
Program ex4 ;
Uses o b j e c t s ;
begin
ARect . Assign ( 1 0 , 1 0 , 2 0 , 2 0 ) ;
BRect . Assign ( 1 5 , 1 5 , 2 5 , 2 5 ) ;
{ CRect i s i n t e r s e c t i o n o f ARect and BRect }
CRect . Assign ( 1 5 , 1 5 , 2 0 , 2 0 ) ;
{ Calculate i t e x p l i c i t l y }
ARect . I n t e r s e c t ( BRect ) ;
I f ARect . Equals ( CRect ) Then
W r i t e l n ( ' ARect equals CRect ' )
Else
W r i t e l n ( ' ARect does n o t equal CRect ! ' ) ;
BRect . Assign ( 2 5 , 2 5 , 3 0 , 3 0 ) ;
A r e c t . I n t e r s e c t ( BRect ) ;
I f ARect . Empty Then
W r i t e l n ( ' ARect i s empty ' ) ;
end .
67.16.9 TRect.Move
Synopsis: Move rectangle along a vector.
Declaration: procedure Move(ADX: Sw_Integer; ADY: Sw_Integer)
Visibility: default
Description: Move moves the current rectangle along a vector with components (ADX,ADY). It adds ADX to the
X-coordinate of both corner points, and ADY to both end points.
Errors: None.
Listing: ./objectex/ex5.pp
Program ex5 ;
Uses o b j e c t s ;
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 ) ;
1194
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
67.16.10 TRect.Grow
Synopsis: Expand rectangle with certain size.
Declaration: procedure Grow(ADX: Sw_Integer; ADY: Sw_Integer)
Visibility: default
Description: Grow expands the rectangle with an amount ADX in the X direction (both on the left and right side
of the rectangle, thus adding a length 2*ADX to the width of the rectangle), and an amount ADY in
the Y direction (both on the top and the bottom side of the rectangle, adding a length 2*ADY to the
height of the rectangle.
ADX and ADY can be negative. If the resulting rectangle is empty, it is set to the empty rectangle at
(0,0).
Errors: None.
See also: TRect.Move (1194)
Listing: ./objectex/ex6.pp
Program ex6 ;
Uses o b j e c t s ;
begin
ARect . Assign ( 1 0 , 1 0 , 2 0 , 2 0 ) ;
ARect . Grow ( 5 , 5 ) ;
/ / B r e c t should be where new ARect i s .
BRect . Assign ( 5 , 5 , 2 5 , 2 5 ) ;
I f ARect . Equals ( BRect ) Then
W r i t e l n ( ' ARect equals BRect ' )
Else
W r i t e l n ( ' ARect does n o t equal BRect ! ' ) ;
end .
67.16.11 TRect.Assign
Synopsis: Set rectangle corners.
Declaration: procedure Assign(XA: Sw_Integer; YA: Sw_Integer; XB: Sw_Integer;
YB: Sw_Integer)
Visibility: default
1195
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
Description: Assign sets the corner points of the rectangle to (XA,YA) and (Xb,Yb).
For an example, see TRect.Copy (1192).
Errors: None.
See also: TRect.Copy (1192)
67.17 TResourceCollection
67.17.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;
67.17.3 TResourceCollection.KeyOf
Synopsis: Return the key of an item in the collection.
Declaration: function KeyOf(Item: Pointer) : Pointer; 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.
1196
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
67.17.4 TResourceCollection.GetItem
Synopsis: Read an item from the stream.
67.17.5 TResourceCollection.FreeItem
Synopsis: Release memory occupied by item.
Declaration: procedure FreeItem(Item: Pointer); Virtual
Visibility: default
Description: FreeItem releases the memory occupied by Item. It de-allocates the name, and then the resour-
ceitem record.
It does NOT remove the item from the collection.
Errors: None.
67.17.6 TResourceCollection.PutItem
Synopsis: Write an item to the stream.
Declaration: procedure PutItem(var S: TStream; Item: Pointer); 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 (1181) method.
Errors: Errors returned are those by TStream.Write (1215).
67.18 TResourceFile
67.18.1 Description
TResourceFile (1197) represents the resources in a binary file image.
1197
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
67.18.3 TResourceFile.Init
Synopsis: Instantiate a new instance.
Declaration: constructor Init(AStream: PStream)
Visibility: default
Description: Init instantiates a new instance of a TResourceFile object. If AStream is not nil then it is
considered as a stream describing an executable image on disk.
Init will try to position the stream on the start of the resources section, and read all resources from
the stream.
Errors: None.
See also: TResourceFile.Done (1198)
67.18.4 TResourceFile.Done
Synopsis: Destroy the instance and remove it from memory.
Declaration: destructor Done; Virtual
Visibility: default
Description: Done cleans up the instance of the TResourceFile Object. If Stream was specified at initial-
ization, then Stream is disposed of too.
Errors: None.
See also: TResourceFile.Init (1198)
67.18.5 TResourceFile.Count
Synopsis: Number of resources in the file
Declaration: function Count : Sw_Integer
Visibility: default
Description: Count returns the number of resources. If no resources were read, zero is returned.
Errors: None.
See also: TResourceFile.Init (1198)
1198
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
67.18.6 TResourceFile.KeyAt
Synopsis: Return the key of the item at a certain position.
Declaration: function KeyAt(I: Sw_Integer) : string
Visibility: default
Description: KeyAt returns the key (the name) of the I-th resource.
Errors: In case I is invalid, TCollection.Error will be executed.
See also: TResourceFile.Get (1199)
67.18.7 TResourceFile.Get
Synopsis: Return a resource by key name.
Declaration: function Get(Key: string) : PObject
Visibility: default
Description: Get returns a pointer to a instance of a resource identified by Key. If Key cannot be found in the
list of resources, then Nil is returned.
Errors: Errors returned may be those by TStream.Get
67.18.8 TResourceFile.SwitchTo
Synopsis: Write resources to a new stream.
Declaration: function SwitchTo(AStream: PStream; Pack: Boolean) : PStream
Visibility: default
Description: SwitchTo switches to a new stream to hold the resources in. AStream will be the new stream
after the call to SwitchTo.
If Pack is true, then all the known resources will be copied from the current stream to the new stream
(AStream). If Pack is False, then only the current resource is copied.
The return value is the value of the original stream: Stream.
The Modified flag is set as a consequence of this call.
Errors: Errors returned can be those of TStream.Read (1215) and TStream.Write (1215).
See also: TResourceFile.Flush (1199)
67.18.9 TResourceFile.Flush
Synopsis: Writes the resources to the stream.
Declaration: procedure Flush
Visibility: default
Description: If the Modified flag is set to True, then Flush writes the resources to the stream Stream. It
sets the Modified flag to true after that.
Errors: Errors can be those by TStream.Seek (1214) and TStream.Write (1215).
See also: TResourceFile.SwitchTo (1199)
1199
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
67.18.10 TResourceFile.Delete
Synopsis: Delete a resource from the file
Errors: None.
See also: TResourceFile.Flush (1199)
67.18.11 TResourceFile.Put
Synopsis: Set a resource by key name.
67.19 TSortedCollection
67.19.1 Description
TSortedCollection is an abstract class, implementing a sorted collection. You should never
use an instance of TSortedCollection directly, instead you should declare a descendent type,
and override the Compare (1202) method.
Because the collection is ordered, TSortedCollection overrides some TCollection meth-
ods, to provide faster routines for lookup.
The Compare (1202) method decides how elements in the collection should be ordered. Since
TCollection has no way of knowing how to order pointers, you must override the compare
method.
Additionally, TCollection provides a means to filter out duplicates. if you set Duplicates to
False (the default) then duplicates will not be allowed.
The example below defines a descendent of TSortedCollection which is used in the examples.
1200
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
67.19.3 TSortedCollection.Init
Synopsis: Instantiates a new instance of a TSortedCollection
Declaration: constructor Init(ALimit: Sw_Integer; ADelta: Sw_Integer)
Visibility: default
Description: Init calls the inherited constructor (see TCollection.Init (1167)) and sets the Duplicates flag
to false.
You should not call this method directly, since TSortedCollection is a abstract class. Instead,
the descendent classes should call it via the inherited keyword.
Errors: None.
67.19.4 TSortedCollection.Load
Synopsis: Instantiates a new instance of a TSortedCollection and loads it from stream.
Declaration: constructor Load(var S: TStream)
Visibility: default
Description: Load calls the inherited constructor (see TCollection.Load (1167)) and reads the Duplicates
flag from the stream..
You should not call this method directly, since TSortedCollection is a abstract class. Instead,
the descendent classes should call it via the inherited keyword.
For an example, see TCollection.Load (1167).
Errors: None.
See also: TSortedCollection.Init (1201), TCollection.Done (1168)
67.19.5 TSortedCollection.KeyOf
Synopsis: Return the key of an item
Declaration: function KeyOf(Item: Pointer) : Pointer; Virtual
Visibility: default
1201
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
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 (1202), TSortedCollection.Compare (1202)
67.19.6 TSortedCollection.IndexOf
Synopsis: Return index of an item in the collection.
67.19.7 TSortedCollection.Compare
Synopsis: Compare two items in the collection.
Declaration: function Compare(Key1: Pointer; Key2: Pointer) : Sw_Integer; 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 (1203) method and in the Insert (1204)
method to determine the ordering of the objects.
The function should compare the two keys of items and return the following function results:
Errors: An ’abstract run-time error’ will be generated if you call TSortedCollection.Compare di-
rectly.
Listing: ./objectex/mysortc.pp
1202
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
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 ;
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.19.8 TSortedCollection.Search
Synopsis: Search for item with given key.
Listing: ./objectex/ex36.pp
Program ex36 ;
Var C : P S o r t e d C o l l e c t i o n ;
M : PMyObject ;
I : Longint ;
1203
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
begin
Writeln ( ' F i e l d : ' ,P ^ . G e t F i e l d ) ;
end ;
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 100 r e c o r d s a t random p l a c e s . ' ) ;
For I :=1 to 100 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.19.9 TSortedCollection.Insert
Synopsis: Insert new item in collection.
Declaration: procedure Insert(Item: Pointer); 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 (1180), 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 (1180)
Listing: ./objectex/ex35.pp
1204
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
Program ex35 ;
Var C : P S o r t e d C o l l e c t i o n ;
M : PMyObject ;
I : Longint ;
begin
Writeln ( ' F i e l d : ' ,P ^ . G e t F i e l d ) ;
end ;
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 100 r e c o r d s a t random p l a c e s . ' ) ;
For I :=1 to 100 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.19.10 TSortedCollection.Store
Synopsis: Write the collection to the stream.
Declaration: procedure Store(var S: TStream)
Visibility: default
Description: Store writes the collection to the stream S. It does this by calling the inherited TCollection.Store
(1181), and then writing the Duplicates flag to the stream.
After a Store, the collection can be loaded from the stream with the constructor Load (1201)
For an example, see TCollection.Load (1167).
Errors: Errors can be those of TStream.Put (1213).
1205
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
67.20 TStrCollection
67.20.1 Description
The TStrCollection object manages a sorted collection of null-terminated strings (pchar strings).
To this end, it overrides the Compare (1202) method of TSortedCollection, and it introduces
methods to read/write strings from a stream.
67.20.3 TStrCollection.Compare
Synopsis: Compare two strings in the collection.
Declaration: function Compare(Key1: Pointer; Key2: Pointer) : Sw_Integer; 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 (1202)
Listing: ./objectex/ex38.pp
Program ex38 ;
Uses Objects , S t r i n g s ;
Var C : PStrCollection ;
S : String ;
I : longint ;
P : 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 100 r e c o r d s a t random p l a c e s . ' ) ;
For I :=1 to 100 do
begin
S t r (Random( 1 0 0 ) ,S ) ;
1206
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
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 98 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.20.4 TStrCollection.GetItem
Synopsis: Read a null-terminated string from the stream.
67.20.5 TStrCollection.FreeItem
Synopsis: Free null-terminated string from the collection.
Declaration: procedure FreeItem(Item: Pointer); 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 (1177)
67.20.6 TStrCollection.PutItem
Synopsis: Write a null-terminated string to the stream.
Declaration: procedure PutItem(var S: TStream; Item: Pointer); 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 (1214).
See also: TStrCollection.GetItem (1207)
1207
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
67.21 TStream
67.21.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.
67.21.3 TStream.Init
Synopsis: Constructor for TStream instance
Declaration: constructor Init
Visibility: default
Description: Init initializes a TStream instance. Descendent streams should always call the inherited Init.
67.21.4 TStream.Get
Synopsis: Read an object definition from the stream.
Declaration: function Get : PObject
Visibility: default
1208
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
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 (1213)
Listing: ./objectex/ex9.pp
Program ex9 ;
begin
Obj : =New( PMyObject , I n i t ) ;
Obj ^ . S e t F i e l d ( $1111 ) ;
W r i t e l n ( ' F i e l d v a l u e : ' , Obj ^ . G e t F i e l d ) ;
{ Since Stream i s an a b s t r a c t type , we i n s t a n t i a t e a TMemoryStream }
S: =New( PMemoryStream , I n i t ( 1 0 0 , 1 0 ) ) ;
S ^ . Put ( Obj ) ;
Writeln ( ' Disposing o b j e c t ' ) ;
S ^ . Seek ( 0 ) ;
Dispose ( Obj , Done ) ;
W r i t e l n ( ' Reading o b j e c t ' ) ;
Obj : = PMyObject (S ^ . Get ) ;
W r i t e l n ( ' F i e l d Value : ' , Obj ^ . G e t F i e l d ) ;
Dispose ( Obj , Done ) ;
end .
67.21.5 TStream.StrRead
Synopsis: Read a null-terminated string from the stream.
Declaration: function StrRead : PChar
Visibility: default
Description: StrRead reads a string from the stream, allocates memory for it, and returns a pointer to a null-
terminated copy of the string on the heap.
Errors: On error, Nil is returned.
Listing: ./objectex/ex10.pp
Program ex10 ;
{
Program t o demonstrate t h e TStream . StrRead TStream . S t r W r i t e f u n c t i o n s
}
Uses o b j e c t s ;
1209
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
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.21.6 TStream.GetPos
Synopsis: Return current position in the stream
Declaration: function GetPos : LongInt; Virtual
Visibility: default
Description: If the stream’s 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.
Listing: ./objectex/ex11.pp
Program ex11 ;
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.21.7 TStream.GetSize
Synopsis: Return the size of the stream.
Declaration: function GetSize : LongInt; Virtual
1210
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
Visibility: default
Description: If the stream’s 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 (1214), TStream.GetPos (1210)
Listing: ./objectex/ex12.pp
Program ex12 ;
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.21.8 TStream.ReadStr
Synopsis: Read a shortstring from the stream.
Declaration: function ReadStr : PString
Visibility: default
Description: ReadStr reads a string from the stream, copies it to the heap and returns a pointer to this copy.
The string is saved as a pascal string, and hence is NOT null terminated.
Errors: On error (e.g. not enough memory), Nil is returned.
Listing: ./objectex/ex13.pp
Program ex13 ;
{
Program t o demonstrate t h e TStream . ReadStr TStream . W r i t e S t r f u n c t i o n s
}
Uses o b j e c t s ;
Var P : P S t r i n g ;
L : String ;
S : PStream ;
begin
1211
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
67.21.9 TStream.Open
Synopsis: Open the stream
Declaration: procedure Open(OpenMode: Word); Virtual
Visibility: default
Description: Open is an abstract method, that should be overridden by descendent objects. Since opening a
stream depends on the stream’s type this is not surprising.
For an example, see TDosStream.Open (1184).
Errors: None.
See also: TStream.Close (1212), TStream.Reset (1212)
67.21.10 TStream.Close
Synopsis: Close the stream
Declaration: procedure Close; Virtual
Visibility: default
Description: Close is an abstract method, that should be overridden by descendent objects. Since Closing a
stream depends on the stream’s type this is not surprising.
for an example, see TDosStream.Open (1184).
Errors: None.
See also: TStream.Open (1212), TStream.Reset (1212)
67.21.11 TStream.Reset
Synopsis: Reset the stream
Declaration: procedure Reset
Visibility: default
Description: Reset sets the stream’s status to 0, as well as the ErrorInfo
Errors: None.
See also: TStream.Open (1212), TStream.Close (1212)
1212
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
67.21.12 TStream.Flush
Synopsis: Flush the stream data from the buffer, if any.
67.21.13 TStream.Truncate
Synopsis: Truncate the stream size on current position.
Declaration: procedure 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 (1183).
Errors: None.
See also: TStream.Seek (1214)
67.21.14 TStream.Put
Synopsis: Write an object to the stream.
Declaration: procedure Put(P: PObject)
Visibility: default
Description: Put writes the object pointed to by P. P should be non-nil. The object type must have been registered
with RegisterType (1159).
After the object has been written, it can be read again with Get (1208).
For an example, see TStream.Get (1208);
Errors: No check is done whether P is Nil or not. Passing Nil will cause a run-time error 216 to be
generated. If the object has not been registered, the status of the stream will be set to stPutError.
See also: TStream.Get (1208)
1213
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
67.21.15 TStream.StrWrite
Synopsis: Write a null-terminated string to the stream.
Declaration: procedure StrWrite(P: PChar)
Visibility: default
Description: StrWrite writes the null-terminated string P to the stream. P can only be 65355 bytes long.
For an example, see TStream.StrRead (1209).
Errors: None.
See also: TStream.WriteStr (1214), TStream.StrRead (1209), TStream.ReadStr (1211)
67.21.16 TStream.WriteStr
Synopsis: Write a pascal string to the stream.
Declaration: procedure WriteStr(P: PString)
Visibility: default
Description: StrWrite writes the pascal string pointed to by P to the stream.
For an example, see TStream.ReadStr (1211).
Errors: None.
See also: TStream.StrWrite (1214), TStream.StrRead (1209), TStream.ReadStr (1211)
67.21.17 TStream.Seek
Synopsis: Set stream position.
Declaration: procedure Seek(Pos: LongInt); Virtual
Visibility: default
Description: Seek sets the position to Pos. This position is counted from the beginning, and is zero based. (i.e.
seek(0) sets the position pointer on the first byte of the stream)
For an example, see TDosStream.Seek (1183).
Errors: If Pos is larger than the stream size, Status is set to StSeekError.
See also: TStream.GetPos (1210), TStream.GetSize (1210)
67.21.18 TStream.Error
Synopsis: Set stream status
Declaration: procedure Error(Code: Integer; Info: Integer); Virtual
Visibility: default
Description: Error sets the stream’s status to Code and ErrorInfo to Info. If the StreamError proce-
dural 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.
1214
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
67.21.19 TStream.Read
Synopsis: Read data from stream to buffer.
Declaration: procedure Read(var Buf; Count: LongInt); 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 it’s
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 (1215), TStream.ReadStr (1211), TStream.StrRead (1209)
Listing: ./objectex/ex18.pp
program ex18 ;
Uses O b j e c t s ;
begin
For I :=1 to 1000 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 1000 do
Buf1 [ I ] : = 0 ;
S ^ . Read ( Buf1 , SizeOf ( Buf1 ) ) ;
For I :=1 to 1000 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 ' , I );
Dispose ( S , Done ) ;
end .
67.21.20 TStream.Write
Synopsis: Write a number of bytes to the stream.
Declaration: procedure Write(var Buf; Count: LongInt); 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 it’s
value with Count.
For an example, see TStream.Read (1215).
Errors: No checking is done to see if Buf actually contains Count bytes.
See also: TStream.Read (1215), TStream.WriteStr (1214), TStream.StrWrite (1214)
1215
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
67.21.21 TStream.CopyFrom
Synopsis: Copy data from another stream.
Errors: None.
See also: Read (1215), Write (1215)
Listing: ./objectex/ex19.pp
Program ex19 ;
Uses o b j e c t s ;
Var P : P S t r i n g ;
L : String ;
S1 , S2 : PStream ;
begin
L : = ' Constant s t r i n g l i n e ' ;
W r i t e l n ( ' W r i t i n g t o stream 1 : " ' , L , ' " ' ) ;
S1 : =New( PMemoryStream , I n i t ( 1 0 0 , 1 0 ) ) ;
S2 : =New( PMemoryStream , I n i t ( 1 0 0 , 1 0 ) ) ;
S1 ^ . W r i t e S t r (@L) ;
S1 ^ . Seek ( 0 ) ;
W r i t e l n ( ' Copying c o n t e n t s o f stream 1 t o stream 2 ' ) ;
S2 ^ . Copyfrom ( S1 ^ , S1 ^ . GetSize ) ;
S2 ^ . Seek ( 0 ) ;
P: = S2 ^ . ReadStr ;
L : =P ^ ;
DisposeStr (P ) ;
Dispose ( S1 , Done ) ;
Dispose ( S2 , Done ) ;
W r i t e l n ( ' Read from stream 2 : " ' , L , ' " ' ) ;
end .
67.22 TStringCollection
67.22.1 Description
The TStringCollection object manages a sorted collection of pascal strings. To this end, it
overrides the Compare (1202) method of TSortedCollection, and it introduces methods to
read/write strings from a stream.
1216
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
67.22.3 TStringCollection.GetItem
Synopsis: Get string from the stream.
Declaration: function GetItem(var S: TStream) : Pointer; Virtual
Visibility: default
Description: GetItem reads a string from the stream S and returns a pointer to it. It doesn’t 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 (1211).
67.22.4 TStringCollection.Compare
Synopsis: Compare two strings in the collection.
Declaration: function Compare(Key1: Pointer; Key2: Pointer) : Sw_Integer; 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 (1202)
Listing: ./objectex/ex37.pp
Program ex37 ;
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 ;
1217
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
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 100 r e c o r d s a t random p l a c e s . ' ) ;
For I :=1 to 100 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 98 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.22.5 TStringCollection.FreeItem
Synopsis: Dispose a string in the collection from memory.
Declaration: procedure FreeItem(Item: Pointer); Virtual
Visibility: default
Description: TStringCollection overrides FreeItem so that the string pointed to by Item is disposed
from memory.
Errors: None.
67.22.6 TStringCollection.PutItem
Synopsis: Write a string to the stream.
Declaration: procedure PutItem(var S: TStream; Item: Pointer); Virtual
Visibility: default
67.23 TStringList
67.23.1 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 (1159) function, you cannot register the TStrListMaker object.
1218
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
67.23.3 TStringList.Load
Synopsis: Load stringlist from stream.
Declaration: constructor Load(var S: TStream)
Visibility: default
Description: The Load constructor reads the TStringList object from the stream S. It also reads the descrip-
tions of the strings from the stream. The string descriptions are stored as an array of TstrIndexrec
records, where each record describes a string on the stream. These records are kept in memory.
Errors: If an error occurs, a stream error is triggered.
67.23.4 TStringList.Done
Synopsis: Clean up the instance
Declaration: destructor 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 (1219), TObject.Done (1189)
67.23.5 TStringList.Get
Synopsis: Return a string by key name
Declaration: function Get(Key: Sw_Word) : string
Visibility: default
Description: Get reads the string with key Key from the list of strings on the stream, and returns this string. If
there is no string with such a key, an empty string is returned.
Errors: If no string with key Key is found, an empty string is returned. A stream error may result if the
stream doesn’t contain the needed strings.
See also: TStrListMaker.Put (1220)
1219
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
67.24 TStrListMaker
67.24.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 (1159) function, you
cannot register the TStringList object.
67.24.3 TStrListMaker.Init
Synopsis: Instantiate a new instance of TStrListMaker
Declaration: constructor Init(AStrSize: Sw_Word; AIndexSize: Sw_Word)
Visibility: default
Description: The Init constructor creates a new instance of the TstrListMaker object. It allocates AStrSize
bytes on the heap to hold all the strings you wish to store. It also allocates enough room for
AIndexSize key description entries (of the type TStrIndexrec).
AStrSize must be large enough to contain all the strings you wish to store. If not enough memory
is allocated, other memory will be overwritten. The same is true for AIndexSize : maximally
AIndexSize strings can be written to the stream.
Errors: None.
See also: TObject.Init (1188), TStrListMaker.Done (1220)
67.24.4 TStrListMaker.Done
Synopsis: Clean up the instance and free all related memory.
Declaration: destructor 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 (1189), TStrListMaker.Init (1220)
67.24.5 TStrListMaker.Put
Synopsis: Add a new string to the list with associated key.
Declaration: procedure Put(Key: Sw_Word; S: string)
1220
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
Visibility: default
Description: Put adds they string S with key Key to the collection of strings. This action doesn’t write the string
to a stream. To write the strings to the stream, see the Store (1221) method.
Errors: None.
67.24.6 TStrListMaker.Store
Synopsis: Write the strings to the stream.
Declaration: procedure Store(var S: TStream)
Visibility: default
Description: Store writes the collection of strings to the stream S. The collection can then be read with the
TStringList object.
Errors: A stream error may occur when writing the strings to the stream.
67.25 TUnSortedStrCollection
67.25.1 Description
The TUnSortedStrCollection object manages an unsorted list of strings. To this end, it over-
rides the TSortedCollection.Insert (1204) method to add strings at the end of the collection, rather
than in the alphabetically correct position.
Take care, the Search (1203) and IndexOf (1169) methods will not work on an unsorted string col-
lection.
67.25.3 TUnSortedStrCollection.Insert
Synopsis: Insert a new string in the collection.
Errors: None.
See also: TCollection.Insert (1175)
Listing: ./objectex/ex39.pp
1221
CHAPTER 67. REFERENCE FOR UNIT ’OBJECTS’
Program ex39 ;
Uses Objects , S t r i n g s ;
Var C : PUnsortedStrCollection ;
S : String ;
I : longint ;
P : 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 100 r e c o r d s a t random p l a c e s . ' ) ;
For I :=1 to 100 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 99 do
W r i t e l n ( I : 2 , ' : ' , P S t r i n g (C^ . At ( i ) ) ^ ) ;
Dispose (C, Done ) ;
end .
1222
Chapter 68
Name Page
System 1331
68.2 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 Delphi’s sys-
tem unit, and introduces some methods for the management of the resource string tables.
68.3.2 Types
FixedInt = Int32
FixedUInt = UInt32
1223
CHAPTER 68. REFERENCE FOR UNIT ’OBJPAS’
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.
PInteger = ^Integer
PIntegerArray = ^IntegerArray
PPointerArray = ^PointerArray
PString = PAnsiString
TEndian = (Little,Big)
Value Explanation
Big Big endian byte order
Little Little endian byte order
TIntegerArray = IntegerArray
TPointerArray = PointerArray
1224
Chapter 69
Name Page
System 1331
69.2 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.
Default instance of type TPort (1226). 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
1225
CHAPTER 69. REFERENCE FOR UNIT ’PORTS’
Default instance of type TPort (1226). 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
portl : tportl
Default instance of type TPortL (1227). Do not free. This variable is initialized in the unit initializa-
tion 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 (1227). Do not free. This variable is initialized in the unit initial-
ization 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.4 tport
69.4.1 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 initial-
ization.
69.4.3 tport.pp
Synopsis: Access integer-sized port by port number
Declaration: Property pp[w: Word]: Byte; default
Visibility: public
Access: Read,Write
Description: Access integer-sized port by port number
1226
CHAPTER 69. REFERENCE FOR UNIT ’PORTS’
69.5 tportl
69.5.1 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.
69.5.3 tportl.pp
Synopsis: Access Longint-sized port by port number
Declaration: Property pp[w: Word]: LongInt; default
Visibility: public
Access: Read,Write
Description: Access Longint-sized port by port number
69.6 tportw
69.6.1 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.
69.6.3 tportw.pp
Synopsis: Access word-sized port by port number
Declaration: Property pp[w: Word]: Word; default
Visibility: public
Access: Read,Write
Description: Access word-sized port by port number
1227
Chapter 70
Name Page
System 1331
70.2 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 differ-
ences on Linux and UNIX.
1228
CHAPTER 70. REFERENCE FOR UNIT ’PRINTER’
Description: AssignLst assigns to F a printing device - UNIX only. ToFile is a string with the following
form:
•’|filename options’: This sets up a pipe with the program filename, with the given
options, such as in the popen() call.
•’filename’: Prints to file filename. Filename can contain the string ’PID’ (No Quotes),
which will be replaced by the PID of your program. When closing lst, the file will be sent to
lpr and deleted. (lpr should be in PATH)
•{’filename|’}: Same as previous, only the file is not sent to lpr, nor is it deleted. (useful
for opening /dev/printer or for later printing)
Listing: ./printex/printex.pp
program t e s t p r n ;
uses p r i n t e r ;
var i : i n t e g e r ;
f : text ;
begin
w r i t e l n ( ' Test o f p r i n t e r u n i t ' ) ;
writeln ( ' Writing to l s t . . . ' ) ;
f o r i :=1 to 80 do w r i t e l n ( l s t , ' T h i s i s l i n e ' , i , ' . ' # 1 3 ) ;
close ( l s t ) ;
w r i t e l n ( ' Done . ' ) ;
{ $ i f d e f Unix }
writeln ( ' W r i t i n g to pipe . . . ' ) ;
a s s i g n l s t ( f , ' | / u s r / b i n / l p r −m ' ) ;
rewrite ( f ) ;
f o r i :=1 to 80 do w r i t e l n ( f , ' T h i s i s l i n e ' , i , ' . ' # 1 3 ) ;
close ( f ) ;
w r i t e l n ( ' Done . ' )
{ $endif }
end .
70.4.2 InitPrinter
Synopsis: Initialize the printer
Declaration: procedure InitPrinter(const PrinterName: string)
Visibility: default
Description: Initialize the printer
70.4.3 IsLstAvailable
Synopsis: Determine whether printer is available.
Declaration: function IsLstAvailable : Boolean
Visibility: default
Description: Determine whether printer is available.
1229
Chapter 71
Name Page
System 1331
71.2 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
DLL’s 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.
1230
Chapter 72
Name Page
BaseUnix 140
System 1331
unixtype 2087
72.2 Overview
This document describes the SOCKETS unit for Free Pascal. it was written for Linux by Michael
Van Canneyt, and ported to Windows by Florian Klaempfl.
AF_APPLETALK = 5
AF_ASH = 18
AF_ATMPVC = 8
1231
CHAPTER 72. REFERENCE FOR UNIT ’SOCKETS’
AF_ATMSVC = 20
AF_AX25 = 3
AF_BLUETOOTH = 31
AF_BRIDGE = 7
AF_CAIF = 37
AF_CAN = 29
AF_DECnet = 12
AF_ECONET = 19
AF_IB = 27
AF_IEEE802154 = 36
AF_INET = 2
AF_INET6 = 10
AF_IPX = 4
AF_IRDA = 23
1232
CHAPTER 72. REFERENCE FOR UNIT ’SOCKETS’
AF_ISDN = 34
Address family: ?
AF_IUCV = 32
AF_KCM = 41
AF_KEY = 15
AF_LLC = 26
AF_LOCAL = 1
AF_MAX = 45
AF_MPLS = 28
AF_NETBEUI = 13
AF_NETLINK = 16
Address family: ?
AF_NETROM = 6
AF_NFC = 39
AF_PACKET = 17
AF_PHONET = 35
AF_PPPOX = 24
1233
CHAPTER 72. REFERENCE FOR UNIT ’SOCKETS’
AF_QIPCRTR = 42
AF_RDS = 21
AF_ROSE = 11
AF_ROUTE = AF_NETLINK
AF_RXRPC = 33
AF_SECURITY = 14
AF_SMC = 43
AF_SNA = 22
AF_TIPC = 30
AF_UNIX = 1
AF_UNSPEC = 0
AF_VSOCK = 40
AF_WANPIPE = 25
AF_X25 = 9
1234
CHAPTER 72. REFERENCE FOR UNIT ’SOCKETS’
AF_XDP = 44
EsockADDRINUSE = ESysEADDRINUSE
EsockADDRINUSE is the error reported by fpBind (1265) when the socket is already in use.
EsockEACCESS = ESysEAcces
EsockEBADF = EsysEBADF
EsockEFAULT = EsysEFAULT
EsockEINTR = EsysEINTR
EsockEINVAL = EsysEINVAL
EsockEMFILE = ESysEmfile
Error code ?
EsockEMSGSIZE = ESysEMsgSize
EsockENOBUFS = ESysENoBufs
EsockENOTCONN = ESysENotConn
EsockENOTSOCK = ESysENotSock
EsockEPROTONOSUPPORT = ESysEProtoNoSupport
1235
CHAPTER 72. REFERENCE FOR UNIT ’SOCKETS’
EsockEWOULDBLOCK = ESysEWouldBlock
INADDR_ANY = CARDINAL(0)
INADDR_NONE = CARDINAL($FFFFFFFF)
IPPROTO_AH = 51
authentication header.
IPPROTO_COMP = 108
IPPROTO_DSTOPTS = 60
IPPROTO_EGP = 8
IPPROTO_ENCAP = 98
Encapsulation Header.
IPPROTO_ESP = 50
IPPROTO_FRAGMENT = 44
IPPROTO_GRE = 47
IPPROTO_HOPOPTS = 0
IPPROTO_ICMP = 1
1236
CHAPTER 72. REFERENCE FOR UNIT ’SOCKETS’
IPPROTO_ICMPV6 = 58
ICMPv6.
IPPROTO_IDP = 22
IPPROTO_IGMP = 2
IPPROTO_IP = 0
IPPROTO_IPIP = 4
IPPROTO_IPV6 = 41
IPv6 header.
IPPROTO_MAX = 255
IPPROTO_MTP = 92
IPPROTO_NONE = 59
IPPROTO_PIM = 103
IPPROTO_PUP = 12
PUP protocol.
IPPROTO_RAW = 255
Raw IP packets.
IPPROTO_ROUTING = 43
1237
CHAPTER 72. REFERENCE FOR UNIT ’SOCKETS’
IPPROTO_RSVP = 46
Reservation Protocol.
IPPROTO_SCTP = 132
IPPROTO_TCP = 6
IPPROTO_TP = 29
IPPROTO_UDP = 17
IPV6_ADDRFORM = 1
IPV6_ADD_MEMBERSHIP = IPV6_JOIN_GROUP
IPV6_AUTHHDR = 10
IPV6_CHECKSUM = 7
IPV6_DROP_MEMBERSHIP = IPV6_LEAVE_GROUP
IPV6_DSTOPTS = 4
IPV6_HOPLIMIT = 8
IPV6_HOPOPTS = 3
1238
CHAPTER 72. REFERENCE FOR UNIT ’SOCKETS’
IPV6_IPSEC_POLICY = 34
IPV6_JOIN_ANYCAST = 27
IPV6_JOIN_GROUP = 20
IPV6_LEAVE_ANYCAST = 28
IPV6_LEAVE_GROUP = 21
IPV6_MTU = 24
IPV6_MTU_DISCOVER = 23
IPV6_MULTICAST_HOPS = 18
IPV6_MULTICAST_IF = 17
IPV6_MULTICAST_LOOP = 19
GetSockOpt/SetSockopt: Control whether socket sees multicast packages that it has sent itself
IPV6_NEXTHOP = 9
IPV6_PKTINFO = 2
IPV6_PKTOPTIONS = 6
1239
CHAPTER 72. REFERENCE FOR UNIT ’SOCKETS’
IPV6_PMTUDISC_DO = 2
Always DF.
IPV6_PMTUDISC_DONT = 0
IPV6_PMTUDISC_WANT = 1
IPV6_RECVERR = 25
IPV6_ROUTER_ALERT = 22
GetSockOpt/SetSockopt: Get/Set Pass all forwarded packets containing router alert option
IPV6_RTHDR = 5
IPV6_RTHDR_LOOSE = 0
IPV6_RTHDR_STRICT = 1
IPV6_RTHDR_TYPE_0 = 0
IPV6_RXDSTOPTS = IPV6_DSTOPTS
IPV6_RXHOPOPTS = IPV6_HOPOPTS
IPV6_RXSRCRT = IPV6_RTHDR
IPV6_UNICAST_HOPS = 16
1240
CHAPTER 72. REFERENCE FOR UNIT ’SOCKETS’
IPV6_V6ONLY = 26
IPV6_XFRM_POLICY = 35
IPX_TYPE = 1
IP_ADD_MEMBERSHIP = 35
IP_ADD_SOURCE_MEMBERSHIP = 39
IP_BLOCK_SOURCE = 38
IP_DEFAULT_MULTICAST_LOOP = 1
Undocumented ?
IP_DEFAULT_MULTICAST_TTL = 1
Undocumented ?
IP_DROP_MEMBERSHIP = 36
IP_DROP_SOURCE_MEMBERSHIP = 40
IP_HDRINCL = 3
IP_MAX_MEMBERSHIPS = 20
IP_MSFILTER = 41
Undocumented ?
1241
CHAPTER 72. REFERENCE FOR UNIT ’SOCKETS’
IP_MTU_DISCOVER = 10
Undocumented ?
IP_MULTICAST_IF = 32
IP_MULTICAST_LOOP = 34
IP_MULTICAST_TTL = 33
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
IP_PMTUDISC_WANT = 1
IP_RECVERR = 11
Undocumented ?
IP_RECVOPTS = 6
1242
CHAPTER 72. REFERENCE FOR UNIT ’SOCKETS’
IP_RECVRETOPTS = IP_RETOPTS
IP_RECVTOS = 13
Undocumented ?
IP_RECVTTL = 12
Undocumented ?
IP_RETOPTS = 7
IP_ROUTER_ALERT = 5
Undocumented ?
IP_TOS = 1
IP_TTL = 2
IP time to live.
IP_UNBLOCK_SOURCE = 37
MCAST_BLOCK_SOURCE = 43
MCAST_EXCLUDE = 0
Undocumented ?
MCAST_INCLUDE = 1
Undocumented ?
MCAST_JOIN_GROUP = 42
MCAST_JOIN_SOURCE_GROUP = 46
1243
CHAPTER 72. REFERENCE FOR UNIT ’SOCKETS’
MCAST_LEAVE_GROUP = 45
MCAST_LEAVE_SOURCE_GROUP = 47
MCAST_MSFILTER = 48
Undocumented ?
MCAST_UNBLOCK_SOURCE = 44
MSG_BATCH = $00040000
MSG_CMSG_CLOEXEC = $40000000
MSG_CMSG_COMPAT = $0
MSG_CONFIRM = $00000800
MSG_CTRUNC = $00000008
MSG_DONTROUTE = $00000004
MSG_DONTWAIT = $00000040
MSG_EOF = MSG_FIN
MSG_EOR = $00000080
MSG_ERRQUERE = $00002000
Receive flags: ?
1244
CHAPTER 72. REFERENCE FOR UNIT ’SOCKETS’
MSG_FASTOPEN = $20000000
MSG_FIN = $00000200
Receive flags: ?
MSG_MORE = $00008000
Receive flags: ?
MSG_NOSIGNAL = $00004000
MSG_NO_SHARED_FRAGS = $00080000
MSG_OOB = $00000001
MSG_PEEK = $00000002
MSG_PROBE = MSG_PROXY
MSG_PROXY = $00000010
Receive flags: ?
MSG_RST = $00001000
Receive flags: ?
MSG_SENDPAGE_DECRYPTED = $00100000
MSG_SENDPAGE_NOPOLICY = $00010000
MSG_SENDPAGE_NOTLAST = $00020000
MSG_SYN = $00000400
Receive flags: ?
MSG_TRUNC = $00000020
1245
CHAPTER 72. REFERENCE FOR UNIT ’SOCKETS’
MSG_TRYHARD = MSG_DONTROUTE
Receive flags: ?
MSG_WAITALL = $00000100
MSG_WAITFORONE = $00010000
MSG_ZEROCOPY = $04000000
PF_ALG = AF_ALG
PF_APPLETALK = AF_APPLETALK
PF_ASH = AF_ASH
PF_ATMPVC = AF_ATMPVC
PF_ATMSVC = AF_ATMSVC
PF_AX25 = AF_AX25
1246
CHAPTER 72. REFERENCE FOR UNIT ’SOCKETS’
PF_BLUETOOTH = AF_BLUETOOTH
PF_BRIDGE = AF_BRIDGE
PF_CAIF = AF_CAIF
PF_CAN = AF_CAN
PF_DECnet = AF_DECnet
PF_ECONET = AF_ECONET
PF_IB = AF_IB
PF_IEEE802154 = AF_IEEE802154
PF_INET = AF_INET
PF_INET6 = AF_INET6
PF_IPX = AF_IPX
PF_IRDA = AF_IRDA
PF_ISDN = AF_ISDN
Protocol Family: ?
PF_IUCV = AF_IUCV
1247
CHAPTER 72. REFERENCE FOR UNIT ’SOCKETS’
PF_KCM = AF_KCM
PF_KEY = AF_KEY
PF_LLC = AF_LLC
PF_LOCAL = AF_LOCAL
PF_MAX = AF_MAX
PF_MPLS = AF_MPLS
PF_NETBEUI = AF_NETBEUI
PF_NETLINK = AF_NETLINK
Protocol family: ?
PF_NETROM = AF_NETROM
PF_NFC = AF_NFC
PF_PACKET = AF_PACKET
PF_PHONET = AF_PHONET
PF_PPPOX = AF_PPPOX
PF_QIPCRTR = AF_QIPCRTR
PF_RDS = AF_RDS
1248
CHAPTER 72. REFERENCE FOR UNIT ’SOCKETS’
PF_ROSE = AF_ROSE
PF_ROUTE = AF_ROUTE
Protocol Family: ?
PF_RXRPC = AF_RXRPC
PF_SECURITY = AF_SECURITY
PF_SMC = AF_SMC
PF_SNA = AF_SNA
PF_TIPC = AF_TIPC
PF_UNIX = AF_UNIX
PF_UNSPEC = AF_UNSPEC
PF_VSOCK = AF_VSOCK
PF_WANPIPE = AF_WANPIPE
PF_X25 = AF_X25
PF_XDP = AF_XDP
SCM_CREDENTIALS = $02
SCM_RIGHTS = $01
1249
CHAPTER 72. REFERENCE FOR UNIT ’SOCKETS’
SCM_SECURITY = $03
SCM_SRCRT = IPV6_RXSRCRT
SCM_TIMESTAMP = SO_TIMESTAMP
Socket option: ?
SHUT_RD = 0
SHUT_RDWR = 2
SHUT_WR = 1
SOCK_DGRAM = 2
SOCK_MAXADDRLEN = 255
SOCK_RAW = 3
SOCK_RDM = 4
SOCK_SEQPACKET = 5
SOCK_STREAM = 1
SOL_AAL = 265
SOL_ALG = 279
1250
CHAPTER 72. REFERENCE FOR UNIT ’SOCKETS’
SOL_ATALK = 258
SOL_ATM = 264
SOL_AX25 = 257
SOL_BLUETOOTH = 274
SOL_CAIF = 278
SOL_DCCP = 269
SOL_DECNET = 261
SOL_ICMPV6 = 58
SOL_IP = 0
Undocumented ?
SOL_IPV6 = 41
SOL_IPX = 256
SOL_IRDA = 266
SOL_IUCV = 277
SOL_KCM = 281
SOL_LLC = 268
SOL_NETBEUI = 267
SOL_NETLINK = 270
SOL_NETROM = 259
1251
CHAPTER 72. REFERENCE FOR UNIT ’SOCKETS’
SOL_NFC = 280
SOL_PACKET = 263
SOL_PNPIPE = 275
SOL_PPPOL2TP = 273
SOL_RAW = 255
SOL_RDS = 276
SOL_ROSE = 260
SOL_RXRPC = 272
SOL_SCTP = 132
SOL_SOCKET = 1
SOL_TCP = 6
SOL_TIPC = 271
SOL_TLS = 282
SOL_UDP = 17
SOL_UDPLITE = 136
SOL_X25 = 262
SOL_XDP = 283
SOMAXCONN = 4096
1252
CHAPTER 72. REFERENCE FOR UNIT ’SOCKETS’
SO_ACCEPTCONN = 30
Socket option: ?
SO_ATTACH_FILTER = 26
Socket option: ?
SO_BINDTODEVICE = 25
Socket option: ?
SO_BROADCAST = 6
SO_BSDCOMPAT = 14
Socket option: ?
SO_DEBUG = 1
SO_DETACH_FILTER = 27
Socket option: ?
SO_DONTROUTE = 5
SO_ERROR = 4
SO_KEEPALIVE = 9
SO_LINGER = 13
Socket option: ?
SO_NO_CHECK = 11
Socket option: ?
SO_OOBINLINE = 10
Socket option: ?
1253
CHAPTER 72. REFERENCE FOR UNIT ’SOCKETS’
SO_PASSCRED = 16
Socket option: ?
SO_PEERCRED = 17
Socket option: ?
SO_PEERNAME = 28
Socket option: ?
SO_PRIORITY = 12
Socket option: ?
SO_RCVBUF = 8
SO_RCVLOWAT = 18
Socket option: ?
SO_RCVTIMEO = 20
Socket option: ?
SO_REUSEADDR = 2
SO_REUSEPORT = 15
SO_SECURITY_AUTHENTICATION = 22
Socket option: ?
SO_SECURITY_ENCRYPTION_NETWORK = 24
Socket option: ?
SO_SECURITY_ENCRYPTION_TRANSPORT = 23
Socket option: ?
SO_SNDBUF = 7
1254
CHAPTER 72. REFERENCE FOR UNIT ’SOCKETS’
SO_SNDLOWAT = 19
Socket option: ?
SO_SNDTIMEO = 21
Socket option: ?
SO_TIMESTAMP = 29
Socket option: ?
SO_TYPE = 3
S_IN = 0
S_OUT = 1
TCP_CONGESTION = 13
TCP_CORK = 3
TCP_DEFER_ACCEPT = 9
TCP_INFO = 11
TCP_KEEPCNT = 6
TCP_KEEPIDLE = 4
TCP_KEEPINTVL = 5
1255
CHAPTER 72. REFERENCE FOR UNIT ’SOCKETS’
TCP_LINGER2 = 8
TCP_MAXSEG = 2
TCP_MD5SIG = 14
TCP_NODELAY = 1
TCP_QUICKACK = 12
TCP_SYNCNT = 7
TCP_WINDOW_CLAMP = 10
UDP_CORK = 1
UDP_ENCAP = 100
UDP_ENCAP_ESPINUDP = 2
UDP_ENCAP_ESPINUDP_NON_IKE = 1
UDP_ENCAP_L2TPINUDP = 3
1256
CHAPTER 72. REFERENCE FOR UNIT ’SOCKETS’
72.3.2 Types
in6_addr = packed record
case Byte of
0: (
u6_addr8 : Array[0..15
] of Byte;
);
1: (
u6_addr16 : Array[0..7] of Word;
);
2: (
u6_addr32
: Array[0..3] of Cardinal;
);
3: (
s6_addr8 : Array[0..15] of ShortInt
;
);
4: (
s6_addr : Array[0..15] of ShortInt;
);
5: (
s6_addr16
: Array[0..7] of SmallInt;
);
6: (
s6_addr32 : Array[0..3] of LongInt
;
);
end
PIn6Addr = pin6_addr
pin6_addr = ^in6_addr
1257
CHAPTER 72. REFERENCE FOR UNIT ’SOCKETS’
PInAddr = pin_addr
PInetSockAddr = psockaddr_in
PInetSockAddr6 = psockaddr_in6
pin_addr = ^in_addr
plinger = ^linger
psockaddr = ^sockaddr
PSockAddr6 = ^TSockAddr6
psockaddr_in = ^sockaddr_in
psockaddr_in6 = ^sockaddr_in6
psockaddr_un = ^sockaddr_un
Pucred = ^ucred
sa_family_t = cushort
1258
CHAPTER 72. REFERENCE FOR UNIT ’SOCKETS’
sockaddr is used to store a general socket address for the FPBind (1265), FPRecv (1269) and
FPSend (1270) calls.
TIn6Addr = in6_addr
Tin6_addr = in6_addr
TInAddr = in_addr
TInetSockAddr = sockaddr_in
TInetSockAddr6 = sockaddr_in6
TIn_addr = in_addr
TLinger = linger
TSockAddr = sockaddr
TSockAddr6 = sockaddr_in6
1259
CHAPTER 72. REFERENCE FOR UNIT ’SOCKETS’
Tsocket = LongInt
TSockLen = BaseUnix.TSocklen
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 (1260) command, with the Text or File parameters are equiva-
lent to subsequently calling the regular Accept (1260) function and the Sock2Text (1276) or Sock2File
(1276) 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:
1260
CHAPTER 72. REFERENCE FOR UNIT ’SOCKETS’
Listing: ./sockex/socksvr.pp
Program s e r v e r ;
{
Program t o t e s t Sockets u n i t by Michael van Canneyt and P e t e r Vreman
Server Version , F i r s t Run sock_svr t o l e t i t c r e a t e a s o c k e t and then
s o c k _ c l i t o connect t o t h a t s o c k e t
}
{ $mode f p c }
uses Sockets ;
Var
FromName : string ;
Buffer : string [ 2 5 5 ] ;
S : Longint ;
Sin , Sout : Text ;
SAddr : 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 50000 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
Synopsis: Alias for fpBind.
1261
CHAPTER 72. REFERENCE FOR UNIT ’SOCKETS’
72.4.3 CloseSocket
Synopsis: Closes a socket handle.
72.4.4 Connect
Synopsis: Open a connection to a server socket (deprecated).
Declaration: function Connect(Sock: LongInt; const addr: TInetSockAddr;
var SockIn: text; var SockOut: text) : Boolean
function Connect(Sock: LongInt; const addr: TInetSockAddr;
var SockIn: File; var SockOut: File) : Boolean
function Connect(Sock: LongInt; const addr: string; var SockIn: text;
var SockOut: text) : Boolean
function Connect(Sock: LongInt; const addr: string; var SockIn: File;
var SockOut: 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 you’re trying to make,
but is generally one of TSockAddr or TUnixSockAddr.
The forms of the Connect (1262) command with the Text or File arguments are equivalent to
subsequently calling the regular Connect function and the Sock2Text (1276) or Sock2File (1276)
functions. These functions return True if success full, False otherwise.
The Connect function returns a file descriptor if the call was success full, -1 in case of error.
Listing: ./sockex/sockcli.pp
1262
CHAPTER 72. REFERENCE FOR UNIT ’SOCKETS’
Program C l i e n t ;
{
Program t o t e s t Sockets u n i t by Michael van Canneyt and P e t e r Vreman
C l i e n t Version , F i r s t Run sock_svr t o l e t i t c r e a t e a s o c k e t and then
s o c k _ c l i t o connect t o t h a t s o c k e t
}
uses Sockets ;
procedure P E r r o r ( const S : s t r i n g ) ;
begin
writeln (S, SocketError ) ;
halt (100);
end ;
Var
SAddr : TInetSockAddr ;
Buffer : string [ 2 5 5 ] ;
S : Longint ;
Sin , Sout : Text ;
i : 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 50000 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 24) 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 10 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 ;
1263
CHAPTER 72. REFERENCE FOR UNIT ’SOCKETS’
begin
Addr . s i n _ f a m i l y : = AF_INET ;
{ p o r t 79 i n network o r d e r }
Addr . s i n _ p o r t :=79 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 24) 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.5 fpaccept
Synopsis: Accept a connection from a socket.
Declaration: function fpaccept(s: cint; addrx: psockaddr; addrlen: pSockLen) : cint
Visibility: default
Description: Accept accepts a connection from a socket S, which was listening for a connection. If a connection
is accepted, a file descriptor is returned (positive number). On error -1 is returned. The returned
socket may NOT be used to accept more connections. The original socket remains open.
The Accept call fills the address of the connecting entity in Addrx, and sets its length in Addrlen.
Addrx should be pointing to enough space, and Addrlen should be set to the amount of space
available, prior to the call.
Errors: On error, -1 is returned, and errors are reported in SocketError, and include the following:
Listing: ./sockex/socksvr.pp
1264
CHAPTER 72. REFERENCE FOR UNIT ’SOCKETS’
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 : string ;
Buffer : string [ 2 5 5 ] ;
S : Longint ;
Sin , Sout : Text ;
SAddr : 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 50000 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
Synopsis: Bind a socket to an address.
Declaration: function fpbind(s: cint; addrx: psockaddr; addrlen: TSockLen) : cint
Visibility: default
1265
CHAPTER 72. REFERENCE FOR UNIT ’SOCKETS’
Description: fpBind binds the socket s to address Addrx. Addrx has length Addrlen. The function returns
0 if the call was successful, -1 if not.
Errors: Errors are returned in SocketError and include the following:
72.4.7 fpconnect
Synopsis: Open a connection to a server socket.
Declaration: function fpconnect(s: cint; name: psockaddr; namelen: TSockLen) : cint
Visibility: default
Description: fpConnect uses the socket s to open a connection to a peer, whose address is described by Name.
NameLen contains the length of the address. The type of Name depends on the kind of connection
you are trying to make, but is generally one of TSockAddr or TUnixSockAddr.
The fpConnect function returns zero if the call was success full, -1 in case of error.
Errors: On error, -1 is returned and errors are reported in SocketError.
Listing: ./sockex/sockcli.pp
Program C l i e n t ;
{
Program t o t e s t Sockets u n i t by Michael van Canneyt and P e t e r Vreman
C l i e n t Version , F i r s t Run sock_svr t o l e t i t c r e a t e a s o c k e t and then
s o c k _ c l i t o connect t o t h a t s o c k e t
}
uses Sockets ;
procedure P E r r o r ( const S : s t r i n g ) ;
begin
writeln (S, SocketError ) ;
halt (100);
end ;
Var
SAddr : TInetSockAddr ;
Buffer : string [ 2 5 5 ] ;
S : Longint ;
Sin , Sout : Text ;
i : integer ;
begin
1266
CHAPTER 72. REFERENCE FOR UNIT ’SOCKETS’
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 50000 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 24) 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 10 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 79 i n network o r d e r }
Addr . s i n _ p o r t :=79 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 24) 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 .
1267
CHAPTER 72. REFERENCE FOR UNIT ’SOCKETS’
72.4.8 fpgetpeername
Synopsis: Return the name (address) of the connected peer.
Declaration: function fpgetpeername(s: cint; name: psockaddr; namelen: pSockLen)
: cint
Visibility: default
Description: fpGetPeerName returns the name of the entity connected to the 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 successfully, Name will be filled with the name, and Name
will be set to the length of Name.
72.4.9 fpgetsockname
Synopsis: Return name of socket.
Description: fpGetSockName returns the current name of the specified socket S. Name should point to enough
space to store the name, the amount of space pointed to should be set in Namelen. When the
function returns successfully, Name will be filled with the name, and Namelen will be set to the
length of Name.
Errors: Errors are reported in SocketError, and include the following:
1268
CHAPTER 72. REFERENCE FOR UNIT ’SOCKETS’
72.4.10 fpgetsockopt
Synopsis: Get current socket options
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:
72.4.11 fplisten
Synopsis: Listen for connections on a socket.
Declaration: function fplisten(s: cint; backlog: cint) : cint
Visibility: default
Description: fpListen listens for up to backlog connections from socket S. The socket S must be of type
SOCK_STREAM or Sock_SEQPACKET.
The function returns 0 if a connection was accepted, -1 if an error occurred.
Errors: Errors are reported in SocketError, and include the following:
72.4.12 fprecv
Synopsis: Receive data on socket
Declaration: function fprecv(s: cint; buf: pointer; len: size_t; flags: cint)
: ssize_t
Visibility: default
1269
CHAPTER 72. REFERENCE FOR UNIT ’SOCKETS’
Description: fpRecv reads at most len bytes from socket S into address buf. The socket must be in a connected
state. Flags can be one of the following:
The functions returns the number of bytes actually read from the socket, or -1 if a detectable error
occurred.
Errors: Errors are reported in SocketError, and include the following:
72.4.13 fprecvfrom
Synopsis: Receive data from an unconnected socket
Declaration: function fprecvfrom(s: cint; buf: pointer; len: size_t; flags: cint;
from: psockaddr; fromlen: pSockLen) : ssize_t
Visibility: default
Description: fpRecvFrom receives data in buffer Buf with maximum length Len from socket S. Receipt is
controlled by options in Flags. The location pointed to by from will be filled with the address
from the sender, and it’s length will be stored in fromlen. The function returns the number of
bytes received, or -1 on error. AddrLen.
Errors: On error, -1 is returned.
72.4.14 fpsend
Synopsis: Send data through socket
Declaration: function fpsend(s: cint; msg: pointer; len: size_t; flags: cint)
: ssize_t
Visibility: default
Description: fpSend sends Len bytes starting from address Msg to socket S. S must be in a connected state.
Options can be passed in Flags.
The function returns the number of bytes sent, or -1 if a detectable error occurred.
Flags can be one of the following:
1270
CHAPTER 72. REFERENCE FOR UNIT ’SOCKETS’
72.4.15 fpsendto
Synopsis: Send data through an unconnected socket to an address.
Declaration: function fpsendto(s: cint; msg: pointer; len: size_t; flags: cint;
tox: psockaddr; tolen: TSockLen) : ssize_t
Visibility: default
Description: fpSendTo sends data from buffer Msg with length len through socket S with options Flags.
The data is sent to address tox, which has length toLen
Errors: On error, -1 is returned.
See also: fpSocket (1272), fpSend (1270), fpRecvFrom (1270)
72.4.16 fpsetsockopt
Synopsis: Set socket options.
Declaration: function fpsetsockopt(s: cint; level: cint; optname: cint;
optval: pointer; optlen: TSockLen) : cint
Visibility: default
Description: fpSetSockOpt sets the connection options for socket S. The socket may be manipulated at dif-
ferent levels, indicated by Level, which can be one of the following:
The actual option is stored in a buffer pointed to by optval, with length optlen.
For more information on this call, refer to the UNIX manual page setsockopt
Errors: Errors are reported in SocketError, and include the following:
1271
CHAPTER 72. REFERENCE FOR UNIT ’SOCKETS’
72.4.17 fpshutdown
Synopsis: Close one end of full duplex connection.
72.4.18 fpsocket
Synopsis: Create new socket
1272
CHAPTER 72. REFERENCE FOR UNIT ’SOCKETS’
72.4.19 fpsocketpair
Synopsis: Create socket pair.
Declaration: function fpsocketpair(d: cint; xtype: cint; protocol: cint; sv: pcint)
: cint
Visibility: default
Description: fpSocketPair creates 2 sockets in domain D, from type xType and using protocol Protocol.
The pair is returned in sv, and they are indistinguishable. The function returns -1 upon error and 0
upon success.
Errors: Errors are reported in SocketError, and are the same as in FPSocket (1272)
See also: Str2UnixSockAddr (1277)
72.4.20 HostAddrToStr
Synopsis: Convert a host address to a string.
Declaration: function HostAddrToStr(Entry: in_addr) : AnsiString
Visibility: default
Description: HostAddrToStr converts the host address in Entry to a string representation in human-readable
form (a dotted quad).
Basically, it is the same as NetAddrToStr (1274), but with the bytes in correct order.
See also: NetAddrToStr (1274), StrToHostAddr (1277), StrToNetAddr (1277)
72.4.21 HostAddrToStr6
Synopsis: Convert a IPV6 host address to a string representation.
Declaration: function HostAddrToStr6(Entry: Tin6_addr) : AnsiString
Visibility: default
Description: HostAddrToStr6 converts the IPV6 host address in Entry to a string representation in human-
readable form.
Basically, it is the same as NetAddrToStr6 (1274), but with the bytes in correct order.
See also: NetAddrToStr (1274), StrToHostAddr (1277), StrToNetAddr (1277), StrToHostAddr6 (1277)
72.4.22 HostToNet
Synopsis: Convert a host address to a network address
Declaration: function HostToNet(Host: in_addr) : in_addr
function HostToNet(Host: LongInt) : LongInt
Visibility: default
Description: HostToNet converts a host address to a network address. It takes care of endianness of the host
machine. The address can be specified as a dotted quad or as a longint.
Errors: None.
See also: NetToHost (1275), NToHS (1275), HToNS (1274), ShortHostToNet (1275), ShortNetToHost (1276)
1273
CHAPTER 72. REFERENCE FOR UNIT ’SOCKETS’
72.4.23 htonl
Synopsis: Convert long integer from host ordered to network ordered
72.4.24 htons
Synopsis: Convert short integer from host ordered to network ordered
Declaration: function htons(host: Word) : Word
Visibility: default
Description: htons makes sure that the bytes in host are ordered in the correct way for sending over the
network and returns the correctly ordered result.
See also: htonl (1274), ntohl (1275), ntohs (1275)
72.4.25 NetAddrToStr
Synopsis: Convert a network address to a string.
Declaration: function NetAddrToStr(Entry: in_addr) : AnsiString
Visibility: default
Description: NetAddrToStr converts the network address in Entry to a string representation in human-
readable form (a dotted quad).
See also: HostAddrToStr (1273), StrToNetAddr (1277), StrToHostAddr (1277)
72.4.26 NetAddrToStr6
Synopsis: Convert a IPV6 network address to a string.
1274
CHAPTER 72. REFERENCE FOR UNIT ’SOCKETS’
72.4.27 NetToHost
Synopsis: Convert a network address to a host address.
72.4.28 NToHl
Synopsis: Convert long integer from network ordered to host ordered
Declaration: function NToHl(Net: Cardinal) : Cardinal; 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 machine, and returns the correctly ordered result.
See also: htonl (1274), htons (1274), ntohs (1275)
72.4.29 NToHs
Synopsis: Convert short integer from network ordered to host ordered
72.4.30 ShortHostToNet
Synopsis: Convert a host port number to a network port number
Declaration: function ShortHostToNet(Host: Word) : Word
Visibility: default
Description: ShortHostToNet converts a host port number to a network port number. It takes care of endian-
ness of the host machine.
Errors: None.
See also: ShortNetToHost (1276), HostToNet (1273), NToHS (1275), HToNS (1274)
1275
CHAPTER 72. REFERENCE FOR UNIT ’SOCKETS’
72.4.31 ShortNetToHost
Synopsis: Convert a network port number to a host port number
Errors: None.
See also: ShortNetToHost (1276), HostToNet (1273), NToHS (1275), HToNS (1274)
72.4.32 Sock2File
Synopsis: Convert socket to untyped file descriptors
Declaration: procedure Sock2File(Sock: LongInt; var SockIn: File; var SockOut: File)
Visibility: default
Description: Sock2File transforms a socket Sock into 2 Pascal file descriptors of type File, one for reading
from the socket (SockIn), one for writing to the socket (SockOut).
Errors: None.
See also: FPSocket (1272), Sock2Text (1276)
72.4.33 Sock2Text
Synopsis: Convert socket to text file descriptors
Declaration: procedure Sock2Text(Sock: LongInt; var SockIn: Text; var SockOut: Text)
Visibility: default
Description: Sock2Text transforms a socket Sock into 2 Pascal file descriptors of type Text, one for reading
from the socket (SockIn), one for writing to the socket (SockOut).
Errors: None.
See also: FPSocket (1272), Sock2File (1276)
72.4.34 socketerror
Synopsis: Contains the error code for the last socket operation.
1276
CHAPTER 72. REFERENCE FOR UNIT ’SOCKETS’
72.4.35 Str2UnixSockAddr
Synopsis: Convert path to TUnixSockAddr (1279)
Declaration: procedure Str2UnixSockAddr(const addr: string; var t: TUnixSockAddr;
var len: LongInt)
Visibility: default
Description: Str2UnixSockAddr transforms a Unix socket address in a string to a TUnixSockAddr struc-
ture which can be passed to the Bind (1261) call.
Errors: None.
See also: FPSocket (1272), FPBind (1265)
72.4.36 StrToHostAddr
Synopsis: Convert a string to a host address.
Declaration: function StrToHostAddr(IP: AnsiString) : in_addr
Visibility: default
Description: StrToHostAddr converts the string representation in IP to a host address and returns the host
address.
Errors: On error, the host address is filled with zeroes.
See also: NetAddrToStr (1274), HostAddrToStr (1273), StrToNetAddr (1277)
72.4.37 StrToHostAddr6
Synopsis: Convert a string to a IPV6 host address.
Declaration: function StrToHostAddr6(IP: AnsiString) : Tin6_addr
Visibility: default
Description: StrToHostAddr6 converts the string representation in IP to a IPV6 host address and returns the
host address.
Errors: On error, the address is filled with zeroes.
See also: NetAddrToStr6 (1274), HostAddrToStr6 (1273), StrToHostAddr (1277)
72.4.38 StrToNetAddr
Synopsis: Convert a string to a network address.
Declaration: function StrToNetAddr(IP: AnsiString) : in_addr
Visibility: default
Description: StrToNetAddr converts the string representation in IP to a network address and returns the
network address.
Errors: On error, the network address is filled with zeroes.
See also: NetAddrToStr (1274), HostAddrToStr (1273), StrToHostAddr (1277)
1277
CHAPTER 72. REFERENCE FOR UNIT ’SOCKETS’
72.4.39 StrToNetAddr6
Synopsis: Convert a string to a IPV6 network address
72.4.40 TryStrToHostAddr
Declaration: function TryStrToHostAddr(IP: AnsiString; out ip4: in_addr) : Boolean
Visibility: default
72.4.41 TryStrToHostAddr6
Declaration: function TryStrToHostAddr6(IP: AnsiString; out ip6: in6_addr) : Boolean
Visibility: default
72.5 linger
linger = packed record
l_onoff : cint;
l_linger : cint;
end
This record is used in the fpsetsockopt (1271) call to specify linger options.
72.6 sockaddr_in
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 address for the FPBind (1265), FPRecv (1269) and
FPSend (1270) calls.
1278
CHAPTER 72. REFERENCE FOR UNIT ’SOCKETS’
72.7 sockaddr_in6
sockaddr_in6 = packed record
sin6_family : sa_family_t;
sin6_port
: cuint16;
sin6_flowinfo : cuint32;
sin6_addr : in6_addr;
sin6_scope_id
: cuint32;
end
72.8 sockaddr_un
sockaddr_un = packed record
sun_family : sa_family_t;
sun_path
: Array[0..107] of Char;
end
sockaddr_un is used to store a UNIX socket address for the FPBind (1265), FPRecv (1269) and
FPSend (1270) calls.
72.9 TUnixSockAddr
TUnixSockAddr = packed record
family : sa_family_t;
path : Array
[0..107] of Char;
end
72.10 ucred
ucred = record
pid : cuint32;
uid : cuint32;
gid : cuint32;
end
1279
Chapter 73
Name Page
System 1331
73.2 Overview
This chapter describes the STRINGS unit for Free Pascal. This unit is system independent, and
therefore works on all supported platforms.
Visibility: default
Description: StrAlloc reserves memory on the heap for a string with length Len, terminating #0 included,
and returns a pointer to it.
Errors: If there is not enough memory, a run-time error occurs.
73.3.2 strcat
Synopsis: Concatenate 2 null-terminated strings.
Declaration: function strcat(dest: PChar; source: PChar) : PChar
1280
CHAPTER 73. REFERENCE FOR UNIT ’STRINGS’
Visibility: default
Description: Attaches Source to Dest and returns Dest.
Errors: No length checking is performed.
See also: StrLCat (1285)
Listing: ./stringex/ex11.pp
Program Example11 ;
Uses s t r i n g s ;
{ Program t o demonstrate t h e S t r C a t f u n c t i o n . }
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.3.3 strcomp
Synopsis: Compare 2 null-terminated strings, case sensitive.
Declaration: function strcomp(str1: PChar; str2: PChar) : SizeInt
Visibility: default
Description: Compares the null-terminated strings S1 and S2. The result is
73.3.4 strcopy
Synopsis: Copy a null-terminated string
Declaration: function strcopy(dest: PChar; source: PChar) : PChar; 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.
1281
CHAPTER 73. REFERENCE FOR UNIT ’STRINGS’
Listing: ./stringex/ex4.pp
Program Example4 ;
Uses s t r i n g s ;
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 ( ' Oh−oh problems . . . ' )
else
W r i t e l n ( ' A l l i s w e l l : PP= ' ,PP ) ;
StrDispose (PP ) ;
end .
73.3.5 strdispose
Synopsis: disposes of a null-terminated string on the heap
Declaration: procedure strdispose(p: PChar)
Visibility: default
Description: Removes the string in P from the heap and releases the memory.
Errors: None.
See also: StrNew (1289)
Listing: ./stringex/ex17.pp
Program Example17 ;
Uses s t r i n g s ;
{ Program t o demonstrate t h e S t r D i s po s e f u n c t i o n . }
var P2 : PChar ;
begin
P2 : = StrNew ( P1 ) ;
W r i t e l n ( ' P2 : ' ,P2 ) ;
StrDispose ( P2 ) ;
end .
1282
CHAPTER 73. REFERENCE FOR UNIT ’STRINGS’
73.3.6 strecopy
Synopsis: Copy a null-terminated string, return a pointer to the end.
Listing: ./stringex/ex6.pp
Program Example6 ;
Uses s t r i n g s ;
Var PP : PChar ;
begin
PP: = S t r A l l o c ( StrLen (P ) + 1 ) ;
I f L o n g i n t ( StrECopy (PP, P)) − L o n g i n t (PP)<> StrLen (P) then
W r i t e l n ( ' Something i s wrong here ! ' )
else
W r i t e l n ( 'PP= ' ,PP ) ;
StrDispose (PP ) ;
end .
73.3.7 strend
Synopsis: Return a pointer to the end of a null-terminated string
Declaration: function strend(p: PChar) : PChar
Visibility: default
Description: Returns a pointer to the end of P. (i.e. to the terminating null-character.
Errors: None.
See also: StrLen (1287)
Listing: ./stringex/ex7.pp
Program Example6 ;
Uses s t r i n g s ;
1283
CHAPTER 73. REFERENCE FOR UNIT ’STRINGS’
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 .
73.3.8 stricomp
Synopsis: Compare 2 null-terminated strings, case insensitive.
Declaration: function stricomp(str1: PChar; str2: PChar) : SizeInt
Visibility: default
Description: Compares the null-terminated strings S1 and S2, ignoring case. The result is
Errors: None.
See also: StrLComp (1286), StrComp (1281), StrLIComp (1287)
Listing: ./stringex/ex8.pp
Program Example8 ;
Uses s t r i n g s ;
Var L : L o n g i n t ;
begin
Write ( ' P1 and P2 are ' ) ;
I f StrComp ( P1 , P2)<>0 then w r i t e ( 'NOT ' ) ;
w r i t e ( ' equal . The f i r s t ' ) ;
L:=1;
While StrLComp ( P1 , P2 , L )=0 do inc ( L ) ;
dec ( l ) ;
W r i t e l n ( l , ' c h a r a c t e r s are t h e same . ' ) ;
end .
73.3.9 stripos
Synopsis: Return the position of a substring in a string, case insensitive.
Declaration: function stripos(str1: PChar; str2: PChar) : PChar
Visibility: default
1284
CHAPTER 73. REFERENCE FOR UNIT ’STRINGS’
Description: stripos returns the position of str2 in str1. It searches in a case-insensitive manner, and if it
finds a match, it returns a pointer to the location of the match. If no match is found, Nil is returned.
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.
73.3.10 striscan
Synopsis: Scan a string for a character, case-insensitive
Declaration: function striscan(p: PChar; c: Char) : PChar
Visibility: default
Description: striscan does the same as strscan (1292) but compares the characters case-insensitively. It returns
a pointer to the first occurrence of the character c in the null-terminated string p, or Nil if c is not
present in the string.
See also: strscan (1292), strriscan (1291)
73.3.11 strlcat
Synopsis: Concatenate 2 null-terminated strings, with length boundary.
Declaration: function strlcat(dest: PChar; source: PChar; l: SizeInt) : PChar
Visibility: default
Description: Adds L characters from Source to Dest, and adds a terminating null-character. Returns Dest.
Errors: None.
See also: StrCat (1280)
Listing: ./stringex/ex12.pp
Program Example12 ;
Uses s t r i n g s ;
{ Program t o demonstrate t h e S t r L C a t f u n c t i o n . }
Var P2 : PChar ;
begin
P2 : = S t r A l l o c ( StrLen ( P1 ) * 2 + 1 ) ;
P2 ^ : = # 0 ; { Zero l e n g t h }
StrCat ( P2 , P1 ) ;
StrLCat ( P2 , P1 , 5 ) ;
W r i t e l n ( ' P2 = ' ,P2 ) ;
StrDispose ( P2 )
end .
1285
CHAPTER 73. REFERENCE FOR UNIT ’STRINGS’
73.3.12 strlcomp
Synopsis: Compare limited number of characters of 2 null-terminated strings
Errors: None.
Listing: ./stringex/ex8.pp
Program Example8 ;
Uses s t r i n g s ;
Var L : L o n g i n t ;
begin
Write ( ' P1 and P2 are ' ) ;
I f StrComp ( P1 , P2)<>0 then w r i t e ( 'NOT ' ) ;
w r i t e ( ' equal . The f i r s t ' ) ;
L:=1;
While StrLComp ( P1 , P2 , L )=0 do inc ( L ) ;
dec ( l ) ;
W r i t e l n ( l , ' c h a r a c t e r s are t h e same . ' ) ;
end .
73.3.13 strlcopy
Synopsis: Copy a null-terminated string, limited in length.
Declaration: function strlcopy(dest: PChar; source: PChar; maxlen: SizeInt) : PChar
; Overload
Visibility: default
Description: Copies MaxLen characters from Source to Dest, and makes Dest a null terminated string.
Errors: No length checking is performed.
Listing: ./stringex/ex5.pp
1286
CHAPTER 73. REFERENCE FOR UNIT ’STRINGS’
Program Example5 ;
Uses s t r i n g s ;
var PP : PCHar ;
begin
PP: = S t r A l l o c ( 1 1 ) ;
W r i t e l n ( ' F i r s t 10 c h a r a c t e r s o f P : ' , StrLCopy (PP, P , 1 0 ) ) ;
StrDispose (PP ) ;
end .
73.3.14 strlen
Synopsis: Length of a null-terminated string.
Declaration: function strlen(p: PChar) : SizeInt
Visibility: default
Description: Returns the length of the null-terminated string P. If P equals Nil, then zero (0) is returned.
Errors: None.
Listing: ./stringex/ex1.pp
Program Example1 ;
Uses s t r i n g s ;
begin
Writeln ( 'P : ' ,p ) ;
W r i t e l n ( ' l e n g t h (P) : ' , StrLen (P ) ) ;
end .
73.3.15 strlicomp
Synopsis: Compare limited number of characters in 2 null-terminated strings, ignoring case.
Declaration: function strlicomp(str1: PChar; str2: PChar; l: SizeInt) : SizeInt
Visibility: default
Description: Compares maximum L characters of the null-terminated strings S1 and S2, ignoring case. The
result is
1287
CHAPTER 73. REFERENCE FOR UNIT ’STRINGS’
73.3.16 strlower
Synopsis: Convert null-terminated string to all-lowercase.
Declaration: function strlower(p: PChar) : PChar
Visibility: default
Description: Converts P to an all-lowercase string. Returns P.
Errors: None.
See also: StrUpper (1292)
Listing: ./stringex/ex14.pp
Program Example14 ;
Uses s t r i n g s ;
Const
P1 : PChar = ' THIS IS AN UPPERCASE PCHAR STRING ' ;
P2 : PChar = ' t h i s i s a lowercase s t r i n g ' ;
begin
P1 : = StrNew ( P1 ) ;
P2 : = strNew ( P2 ) ;
W r i t e l n ( ' Uppercase : ' , StrUpper ( P2 ) ) ;
StrLower ( P1 ) ;
W r i t e l n ( ' Lowercase : ' ,P1 ) ;
StrDispose ( P1 ) ;
StrDispose ( P2 ) ;
end .
73.3.17 strmove
Synopsis: Move a null-terminated string to new location.
Declaration: function strmove(dest: PChar; source: PChar; l: SizeInt) : PChar
Visibility: default
Description: Copies MaxLen characters from Source to Dest. No terminating null-character is copied. Re-
turns Dest
1288
CHAPTER 73. REFERENCE FOR UNIT ’STRINGS’
Errors: None.
See also: StrLCopy (1286), StrCopy (1281)
Listing: ./stringex/ex10.pp
Program Example10 ;
Uses s t r i n g s ;
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.3.18 strnew
Synopsis: Allocate room for new null-terminated string.
Declaration: function strnew(p: PChar) : PChar
Visibility: default
Description: Copies P to the Heap, and returns a pointer to the copy.
Errors: Returns Nil if no memory was available for the copy.
See also: StrCopy (1281), StrDispose (1282)
Listing: ./stringex/ex16.pp
Program Example16 ;
Uses s t r i n g s ;
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 .
1289
CHAPTER 73. REFERENCE FOR UNIT ’STRINGS’
73.3.19 strpas
Synopsis: Convert a null-terminated string to a shortstring.
Errors: None.
See also: StrPCopy (1290)
Listing: ./stringex/ex3.pp
Program Example3 ;
Uses s t r i n g s ;
var S : s t r i n g ;
begin
S: = StrPas (P ) ;
W r i t e l n ( ' S : ' ,S ) ;
end .
73.3.20 strpcopy
Synopsis: Copy a pascal string to a null-terminated string
Declaration: function strpcopy(d: PChar; const s: string) : PChar
Visibility: default
Description: Converts the Pascal string in Se to a Null-terminated string, and copies it to D. D needs enough room
to contain the string Source, i.e. Length(S)+1 bytes.
Errors: No length checking is performed.
Listing: ./stringex/ex2.pp
Program Example2 ;
Uses s t r i n g s ;
Var P : Pchar ;
1290
CHAPTER 73. REFERENCE FOR UNIT ’STRINGS’
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
w r i t e l n (P ) ;
StrDispose (P ) ;
end .
73.3.21 strpos
Synopsis: Search for a null-terminated substring in a null-terminated string
Declaration: function strpos(str1: PChar; str2: PChar) : PChar
Visibility: default
Description: Returns a pointer to the first occurrence of S2 in S1. If S2 does not occur in S1, returns Nil.
Errors: None.
See also: StrScan (1292), StrRScan (1292)
Listing: ./stringex/ex15.pp
Program Example15 ;
Uses s t r i n g s ;
73.3.22 strriscan
Synopsis: Scan a string reversely for a character, case-insensitive
1291
CHAPTER 73. REFERENCE FOR UNIT ’STRINGS’
73.3.23 strrscan
Synopsis: Find last occurrence of a character in a null-terminated string.
Declaration: function strrscan(p: PChar; c: Char) : PChar
Visibility: default
Description: Returns a pointer to the last occurrence of the character C in the null-terminated string P. If C does
not occur, returns Nil.
For an example, see StrScan (1292).
Errors: None.
See also: StrScan (1292), StrPos (1291)
73.3.24 strscan
Synopsis: Find first occurrence of a character in a null-terminated string.
Declaration: function strscan(p: PChar; c: Char) : PChar
Visibility: default
Description: Returns a pointer to the first occurrence of the character C in the null-terminated string P. If C does
not occur, returns Nil.
Errors: None.
See also: StrRScan (1292), StrPos (1291)
Listing: ./stringex/ex13.pp
Program Example13 ;
Uses s t r i n g 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 .
73.3.25 strupper
Synopsis: Convert null-terminated string to all-uppercase
Declaration: function strupper(p: PChar) : PChar
Visibility: default
Description: Converts P to an all-uppercase string. Returns P.
For an example, see StrLower (1288)
Errors: None.
See also: StrLower (1288)
1292
Chapter 74
Name Page
System 1331
sysutils 1598
Types 1901
Error string shown in exception raised when invalid roman numeral is encountered
74.2.2 Constants
AnsiResemblesProc : TCompareTextProc = @ SoundexProc
This procedural variable is standard set to SoundexProc (1324) but can be overriden with a user-
defined algorithm. This algorithm should return True if AText resembles AOtherText, or
False otherwise. The standard routine compares the soundexes of the two strings and returns
True if they are equal.
1293
CHAPTER 74. REFERENCE FOR UNIT ’STRUTILS’
DigitChars = ['0'..'9']
StdWordDelims = [#0..' ', ',', '.', ';', '/', '\', ':', '''', '"'
, '`'] + Brackets
74.2.3 Types
SizeIntArray = Array of SizeInt
TRomanConversionStrictness = (rcsStrict,rcsRelaxed,rcsDontCare)
Value Explanation
rcsDontCare Do not check correctness
rcsRelaxed Like rcsStrict but allow more than 3 consecutive identical letters.
rcsStrict Only accept correct roman numerals.
1294
CHAPTER 74. REFERENCE FOR UNIT ’STRUTILS’
TSoundexIntLength = 1..8
TSoundexLength = 1..MaxInt
TStringReplaceAlgorithm = (sraDefault,sraManySmall,sraBoyerMoore)
Value Explanation
sraBoyerMoore Use a Boyer-Moore search algorithm
sraDefault Use the sysutils algorithm, which does a straightforward linear search and replace
sraManySmall Use an approach which is suitable for a string with many occurrences of the same small text
sraDefault Use the sysutils algorithm, which does a straightforward linear search and replace
sraManySmall Use an approach which is suitable for a string with many occurrences of the same
small text
sraBoyerMoore Use a Boyer-Moore search algorithm
Depending on the kind of data that is being treated, one or the other of these algorithms may produce
faster results.
TStringSeachOption = TStringSearchOption
There is an typo error in the original Borland StrUtils unit. This type just refers to the correct
TStringSearchOption (1295) and is provided for compatibility only.
TStringSearchOption = (soDown,soMatchCase,soWholeWord)
Value Explanation
soDown Search in down direction.
soMatchCase Match case
soWholeWord Search whole words only.
1295
CHAPTER 74. REFERENCE FOR UNIT ’STRUTILS’
Visibility: default
Description: AddChar adds characters (C) to the left of S till the length N is reached, and returns the resulting
string. If the length of S is already equal to or larger than N, then no characters are added. The
resulting string can be thought of as a right-aligned version of S, with length N.
Errors: None
See also: AddCharR (1296), PadLeft (1316), PadRight (1317), PadCenter (1316)
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 (1296)
74.3.3 AnsiContainsStr
Synopsis: Checks whether a string contains a given substring
Errors: None
See also: AnsiContainsText (1297), AnsiEndsStr (1297), AnsiIndexStr (1297), AnsiStartsStr (1301)
1296
CHAPTER 74. REFERENCE FOR UNIT ’STRUTILS’
74.3.4 AnsiContainsText
Synopsis: Check whether a string contains a certain substring, ignoring case.
74.3.5 AnsiEndsStr
Synopsis: Check whether a string ends with a certain substring
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.
Errors: None
See also: AnsiStartsText (1301), AnsiEndsStr (1297), AnsiIndexText (1298), AnsiContainsText (1297)
74.3.7 AnsiIndexStr
Synopsis: Searches, observing case, for a string in an array of strings.
Declaration: function AnsiIndexStr(const AText: string;
const AValues: Array of string) : Integer
Visibility: default
1297
CHAPTER 74. REFERENCE FOR UNIT ’STRUTILS’
Description: AnsiIndexStr matches AText against each string in AValues. If a match is found, the corre-
sponding index (zero-based) in the AValues array is returned. If no match is found, -1 is returned.
The strings are matched observing case.
Errors: None.
74.3.8 AnsiIndexText
Synopsis: Searches, case insensitive, for a string in an array of strings.
Declaration: function AnsiIndexText(const AText: string;
const AValues: Array of string) : Integer
Visibility: default
Description: AnsiIndexText matches AText against each string in AValues. If a match is found, the
corresponding index (zero-based) in the AValues array is returned. If no match is found, -1 is
returned. The strings are matched ignoring case.
Errors: None
See also: AnsiIndexStr (1297), AnsiMatchStr (1298), IndexStr (1311), MatchStr (1314), AnsiMatchText (1299)
74.3.9 AnsiLeftStr
Synopsis: Copies a number of characters starting at the left of a string
Declaration: function AnsiLeftStr(const AText: AnsiString; const ACount: SizeInt)
: AnsiString
Visibility: default
Description: AnsiLeftStr returns the ACount leftmost characters from AText. If ACount is larger than
the length of AText, only as much characters as available in AText will be copied. If ACount is
zero or negative, no characters will be copied. The characters are counted as characters, not as Bytes.
This function corresponds to the Visual Basic LeftStr function.
Errors: None.
See also: AnsiMidStr (1299), AnsiRightStr (1301), LeftStr (1313), RightStr (1320), MidStr (1315), LeftBStr
(1313), RightBStr (1320), MidBStr (1314)
74.3.10 AnsiMatchStr
Synopsis: Check whether a string occurs in an array of strings, observing case.
Declaration: function AnsiMatchStr(const AText: string;
const AValues: Array of string) : Boolean
Visibility: default
Description: AnsiMatchStr matches AText against each string in AValues. If a match is found, it returns
True, otherwise False is returned. The strings are matched observing case.
This function simply calls AnsiIndexStr (1297) and checks whether it returns -1 or not.
1298
CHAPTER 74. REFERENCE FOR UNIT ’STRUTILS’
74.3.11 AnsiMatchText
Synopsis: Check whether a string occurs in an array of strings, disregarding case.
74.3.12 AnsiMidStr
Synopsis: Returns a number of characters copied from a given location in a string
See also: AnsiLeftStr (1298), AnsiRightStr (1301), LeftStr (1313), RightStr (1320), MidStr (1315), LeftBStr
(1313), RightBStr (1320), MidBStr (1314)
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
(1294) can be used for this.
74.3.14 AnsiReplaceStr
Synopsis: Search and replace all occurrences of a string, case sensitive.
Declaration: function AnsiReplaceStr(const AText: string; const AFromText: string;
const AToText: string) : string
Visibility: default
1299
CHAPTER 74. REFERENCE FOR UNIT ’STRUTILS’
Description: AnsiReplaceString searches AText for all occurrences of the string AFromText and re-
places them with AToText, and returns the resulting string. The search is performed observing
case.
Errors: None.
74.3.15 AnsiReplaceText
Synopsis: Search and replace all occurrences of a string, case insensitive.
Declaration: function AnsiReplaceText(const AText: string; const AFromText: string;
const AToText: string) : string
Visibility: default
Description: AnsiReplaceString searches AText for all occurrences of the string AFromText and re-
places them with AToText , and returns the resulting string. The search is performed ignoring
case.
Errors: None.
See also: AnsiReplaceStr (1299), SearchBuf (1322)
74.3.16 AnsiResemblesText
Synopsis: Check whether 2 strings resemble each other.
Declaration: function AnsiResemblesText(const AText: string; const AOther: string)
: Boolean
Visibility: default
Description: AnsiResemblesText will check whether AnsiResemblesProc (1293) is set. If it is not set,
False is returned. If it is set, AText and AOtherText are passed to it and it’s result is returned.
Errors: None.
See also: AnsiResemblesProc (1293), SoundexProc (1324)
74.3.17 AnsiReverseString
Synopsis: Reverse the letters in a string.
Errors: None.
1300
CHAPTER 74. REFERENCE FOR UNIT ’STRUTILS’
74.3.18 AnsiRightStr
Synopsis: Copies a number of characters starting at the right of a string
See also: AnsiLeftStr (1298), AnsiMidStr (1299), LeftStr (1313), RightStr (1320), MidStr (1315), LeftBStr
(1313), RightBStr (1320), MidBStr (1314)
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 (1297), AnsiStartsStr (1301), AnsiIndexStr (1297), AnsiContainsStr (1296)
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 (1297), AnsiStartsStr (1301), AnsiIndexText (1298), AnsiContainsText (1297)
74.3.21 BinToHex
Synopsis: Convert a binary buffer to a hexadecimal string
1301
CHAPTER 74. REFERENCE FOR UNIT ’STRUTILS’
Description: BinToHex converts the byte values in BinValue to a string consisting of 2-charachter hex-
adecimal 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.
74.3.22 ContainsStr
Synopsis: Check whether one text contains another (case sensitive)
Declaration: function ContainsStr(const AText: string; const ASubText: string)
: Boolean
Visibility: default
Description: ContainsStr is an alias for AnsiContainsStr (1296)
See also: AnsiContainsStr (1296)
74.3.23 ContainsText
Synopsis: Check whether one text contains another (case insensitive)
Declaration: function ContainsText(const AText: string; const ASubText: string)
: Boolean
Visibility: default
Description: ContainsText is an alias for AnsiContainsText (1297)
See also: AnsiContainsText (1297)
1302
CHAPTER 74. REFERENCE FOR UNIT ’STRUTILS’
74.3.24 Copy2Space
Synopsis: Returns all characters in a string till the first space character (not included).
74.3.25 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 charac-
ters 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 (1304) with the space (ASCII code 32) as the symbol
argument.
Errors: None.
See also: Copy2SymbDel (1304), Copy2Space (1303)
74.3.26 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.
Errors: None.
See also: Copy2Space (1303), Copy2SymbDel (1304)
1303
CHAPTER 74. REFERENCE FOR UNIT ’STRUTILS’
74.3.27 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 right-
trimmed. If Symb does not appear in S, then the whole of S is returned, and S itself is emptied.
Errors: None.
See also: Copy2SpaceDel (1303), Copy2Symb (1303)
74.3.28 Dec2Numb
Synopsis: Convert a decimal number to a string representation, using given a base.
Declaration: function Dec2Numb(N: LongInt; Len: Byte; Base: Byte) : string
Visibility: default
Description: Dec2Numb converts N to its representation using base Base. N must be a positive integer. The
resulting string is left-padded with zeroes till it has length Len. Base must be in the range 2-36 to
be meaningful, but no checking on this is performed.
Errors: If Base is out of range, the resulting string will contain unreadable (non-alphanumeric) characters.
See also: Hex2Dec (1310), IntToBin (1312), intToRoman (1312), RomanToInt (1321)
74.3.29 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 (1323) function. The result is the soundex string corresponding
to AValue. .
Errors: None.
See also: SoundexInt (1323), DecodeSoundexWord (1304), Soundex (1323)
74.3.30 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 re-
verse operation of the SoundexWord (1324) function. The result is the soundex string corresponding
to AValue .
1304
CHAPTER 74. REFERENCE FOR UNIT ’STRUTILS’
Errors: None.
See also: SoundexInt (1323), DecodeSoundexInt (1304), Soundex (1323)
74.3.31 DelChars
Synopsis: Delete all occurrences of a given character from a string.
74.3.32 DelSpace
Synopsis: Delete all occurrences of a space from a string.
Declaration: function DelSpace(const S: string) : string
Visibility: default
Description: DelSpace returns a copy of S with all spaces (ASCII code 32) removed from it.
Errors: None.
See also: DelChars (1305), DelSpace1 (1305)
74.3.33 DelSpace1
Synopsis: Reduces sequences of space characters to 1 space character.
Declaration: function DelSpace1(const S: string) : string
Visibility: default
Description: DelSpace1 returns a copy of S with all sequences of spaces reduced to 1 space.
Errors: None.
See also: DelChars (1305), DelSpace (1305)
74.3.34 DupeString
Synopsis: Creates and concatenates N copies of a string
Declaration: function DupeString(const AText: string; ACount: Integer) : string
Visibility: default
Description: DupeString returns a string consisting of ACount concatenations of AText. Thus
DupeString('1234567890',3);
1305
CHAPTER 74. REFERENCE FOR UNIT ’STRUTILS’
'123456789012345678901234567890'
Errors: None.
74.3.35 EndsStr
Synopsis: Check whether one string ends with another
Declaration: function EndsStr(const ASubText: string; const AText: string) : Boolean
Visibility: default
Description: StarsText checks whether aText ends with aSubText and returns True if it does. i.e. it
returns true if the last characters of aText are aSubText. It follows that the length of aText
must be at least the length of aSubText. The comparison is made case-sensitive. If you wish to
compare case-insensitively, use EndsText (1306) instead.
See also: AnsiEndsStr (1297), EndsText (1306), StartsText (1325)
74.3.36 EndsText
Synopsis: Check whether one text ends with another
Declaration: function EndsText(const ASubText: string; const AText: string) : Boolean
Visibility: default
Description: StarsText checks whether aText ends with aSubText and returns True if it does. i.e. it
returns true if the last characters of aText are aSubText. It follows that the length of aText
must be at least the length of aSubText. The comparison is made case-insensitive. If you wish to
compare case-sensitively, use EndsStr (1306) instead.
See also: AnsiEndsStr (1297), EndsStr (1306), StartsText (1325)
74.3.37 ExtractDelimited
Synopsis: Extract the N-th delimited part from a string.
Declaration: function ExtractDelimited(N: Integer; const S: string;
const Delims: TSysCharSet) : string
Visibility: default
Description: ExtractDelimited extracts the N-th part from the string S. The set of characters in Delims
are used to mark part boundaries. When a delimiter is encountered, a new part is started and the old
part is ended. Another way of stating this is that any (possibly empty) series of characters not in
Delims, situated between 2 characters in Delims, it is considered as piece of a part. This means
that if 2 delimiter characters appear next to each other, there is an empty part between it. If an N-th
part cannot be found, an empty string is returned. However, unlike ExtractWord (1307), an empty
string is a valid return value, i.e. a part can be empty.
The predefined constant StdWordDelims (1294) can be used for the Delims argument. The prede-
fined constant Brackets (1293) would be better suited the Delims argument e.g. in case factors in a
mathematical expression are searched.
Errors: None.
See also: ExtractSubStr (1307), ExtractWord (1307), ExtractWordPos (1307)
1306
CHAPTER 74. REFERENCE FOR UNIT ’STRUTILS’
74.3.38 ExtractSubstr
Synopsis: Extract a word from a string, starting at a given position in the string.
74.3.39 ExtractWord
Synopsis: Extract the N-th word out of a string.
Declaration: function ExtractWord(N: Integer; const S: string;
const WordDelims: TSysCharSet) : string
Visibility: default
Description: ExtractWord extracts the N-th word from the string S. The set of characters in WordDelims are
used to mark word boundaries. A word is 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.
Unlike ExtractDelimited (1306), 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 predefined constant StdWordDelims (1294) can be used for the WordDelims argument.
Errors: None.
See also: ExtractWordPos (1307), ExtractSubStr (1307), ExtractDelimited (1306), IsWordPresent (1313), Word-
Count (1328), WordPosition (1329)
74.3.40 ExtractWordPos
Synopsis: Extract a word from a string, and return the position where it was located in the string.
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.
1307
CHAPTER 74. REFERENCE FOR UNIT ’STRUTILS’
Unlike ExtractDelimited (1306), 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 predefined constant StdWordDelims (1294) can be used for the WordDelims argument.
Errors: None.
See also: ExtractWord (1307), ExtractSubStr (1307), IsWordPresent (1313), WordCount (1328), WordPosi-
tion (1329)
74.3.41 FindMatchesBoyerMooreCaseInSensitive
Synopsis: Find case-insensitive matches of a string using a Boyer-Moore algorithm
Declaration: function FindMatchesBoyerMooreCaseInSensitive(const S: PChar;
const OldPattern: PChar;
const SSize: SizeInt;
const OldPatternSize: SizeInt;
out aMatches: SizeIntArray;
const aMatchAll: Boolean)
: Boolean
function FindMatchesBoyerMooreCaseInSensitive(const S: string;
const OldPattern: string;
out aMatches: SizeIntArray;
const aMatchAll: Boolean)
: Boolean
Visibility: default
Description: FindMatchesBoyerMooreCaseInSensitive finds occurrences of OldPattern (with length
OldPatternSize) in S (with length SSize). The search is performed case-insensitively, and all
(zero based) positions are reported in aMatches. If aMatchAll is True, all positions will be
reported. If aMatchAll is False, only the first position is reported.
Errors: None.
See also: FindMatchesBoyerMooreCaseSensitive (1308), StringReplace (1326)
74.3.42 FindMatchesBoyerMooreCaseSensitive
Synopsis: Find case-sensitive matches of a string using a Boyer-Moore algorithm
1308
CHAPTER 74. REFERENCE FOR UNIT ’STRUTILS’
74.3.43 FindPart
Synopsis: Search for a substring in a string, using wildcards.
Declaration: function FindPart(const HelpWilds: string; const InputStr: string)
: SizeInt
Visibility: default
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 (1322)
74.3.44 GetCmdLineArg
Synopsis: Returns the command-line argument following the given switch.
Errors: The GetCmdLineArg does not check whether the value of the option does not start with a switch
character. i.e.
will result in "-option2" as the result of the GetCmdLineArg call for option1.
See also: StdSwitchChars (1294)
1309
CHAPTER 74. REFERENCE FOR UNIT ’STRUTILS’
74.3.45 Hex2Dec
Synopsis: Converts a hexadecimal string to a decimal value
Declaration: function Hex2Dec(const S: string) : LongInt
Visibility: default
Description: Hex2Dec converts the hexadecimal value in the string S to its decimal value. Unlike the standard
Valor StrToInt functions, there need not be a $ sign in front of the hexadecimal value to indicate
that it is indeed a hexadecimal value.
Errors: If S does not contain a valid hexadecimal value, an EConvertError exception will be raised.
See also: Dec2Numb (1304), IntToBin (1312), intToRoman (1312), RomanToInt (1321)
74.3.46 Hex2Dec64
Synopsis: Convert hexadecimal value to 64-bit integer
Declaration: function Hex2Dec64(const S: string) : Int64
Visibility: default
Description: Hex2Dec64 converts the hexadecimal number in S to a 64-bit value and returns the result. It is
equivalent to StrToInt(’$’+S).
See also: Hex2Dec (1310)
74.3.47 HexToBin
Synopsis: Convert a hexadecimal string to a binary buffer
Declaration: function HexToBin(HexValue: PChar; BinValue: PChar; BinBufSize: Integer)
: Integer
Visibility: default
Description: HexToBin scans the hexadecimal string representation in HexValue and transforms every 2 char-
acter hexadecimal number to a byte and stores it in BinValue. The buffer size is the size of the
binary buffer. Scanning will stop if the size of the binary buffer is reached or when an invalid char-
acter is encountered. The return value is the number of stored bytes.
Errors: No length checking is done, so if an invalid size is specified, an exception may follow.
See also: BinToHex (1301)
74.3.48 IfThen
Synopsis: Returns one of two strings, depending on a boolean expression
Declaration: function IfThen(AValue: Boolean; const ATrue: string;
const AFalse: string) : string; Overload
Visibility: default
Description: IfThen returns ATrue if AValue is True, and returns AFalse if AValue is false.
Errors: None.
See also: AnsiMatchStr (1298), AnsiMatchText (1299)
1310
CHAPTER 74. REFERENCE FOR UNIT ’STRUTILS’
74.3.49 in(string,):Boolean
Synopsis: Check presence of string in an array of strings
Declaration: operator in(const AText: string; const AValues: Array of string)
: Boolean
Visibility: default
Description: This is the (string) operator equivalent of IndexStr (1311)
See also: IndexStr (1311)
74.3.50 in(UnicodeString,):Boolean
Synopsis: Check presence of string in an array of strings
Declaration: operator in(const AText: UnicodeString;
const AValues: Array of UnicodeString) : Boolean
Visibility: default
Description: This is the (unicode string) operator equivalent of IndexStr (1311)
See also: IndexStr (1311)
74.3.51 IndexStr
Synopsis: Searches, observing case, for a string in an array of strings.
Declaration: function IndexStr(const AText: UnicodeString;
const AValues: Array of UnicodeString) : Integer
function IndexStr(const AText: string; const AValues: Array of string)
: Integer
Visibility: default
Description: IndexStr matches AText against each Unicode string in AValues. If a match is found, the
corresponding index (zero-based) in the AValues array is returned. If no match is found, -1 is
returned. The strings are matched observing case.
Errors: None.
See also: AnsiIndexText (1298), MatchStr (1314), AnsiIndexStr (1297)
74.3.52 IndexText
Synopsis: Index of text in a list of values
Declaration: function IndexText(const AText: string; const AValues: Array of string)
: Integer
function IndexText(const AText: UnicodeString;
const AValues: Array of UnicodeString) : Integer
Visibility: default
Description: IndexText returns the index of the string in the array aValues that matches aText, and -1
otherwise. The comparison is done case insensitively. If you wish to compare case sensitively, use
IndexStr (1311) instead.
See also: IndexStr (1311), MatchText (1314), AnsiIndexText (1298)
1311
CHAPTER 74. REFERENCE FOR UNIT ’STRUTILS’
74.3.53 IntToBin
Synopsis: Converts an integer to a binary string representation, inserting spaces at fixed locations.
Visibility: default
Description: IntToBin converts Value to a string with it’s binary (base 2) representation. The resulting string
contains Digits digits, with spaces inserted every Spaces digits. Spaces equal to zero yields a
result without spacing. If Digits is larger than 32, it is truncated to 32.
See also: Hex2Dec (1310), IntToRoman (1312)
74.3.54 IntToRoman
Synopsis: Represent an integer with roman numerals
Declaration: function IntToRoman(Value: LongInt) : string
Visibility: default
Description: IntToRoman converts Value to a string with the Roman representation of Value. Number up
to 1 million can be represented this way.
Errors: None.
See also: RomanToInt (1321), Hex2Dec (1310), IntToBin (1312)
74.3.55 IsEmptyStr
Synopsis: Check whether a string is empty, disregarding whitespace characters
Declaration: function IsEmptyStr(const S: string; const EmptyChars: TSysCharSet)
: Boolean
Visibility: default
Description: IsEmptyStr returns True if the string S only contains characters whitespace characters, all
characters in EmptyChars are considered whitespace characters. If a character not present in
EmptyChars is found in S, False is returned.
Errors: None.
74.3.56 IsWild
Synopsis: Check whether a string matches a wildcard search expression.
Declaration: function IsWild(InputStr: string; Wilds: string; IgnoreCase: Boolean)
: Boolean
Visibility: default
1312
CHAPTER 74. REFERENCE FOR UNIT ’STRUTILS’
Description: IsWild checks InputStr for the presence of the Wilds string. Wilds may contain "?" and "*"
wildcard characters, which have their usual meaning: "*" matches any series of characters, possibly
empty. "?" matches any single character. The function returns True if a string is found that matches
Wilds, False otherwise.
If IgnoreCase is True, the non-wildcard characters are matched case insensitively. If it is False,
case is observed when searching.
Errors: None.
See also: SearchBuf (1322), FindPart (1309)
74.3.57 IsWordPresent
Synopsis: Check for the presence of a word in a string.
Declaration: function IsWordPresent(const W: string; const S: string;
const WordDelims: TSysCharSet) : Boolean
Visibility: default
Description: IsWordPresent checks for the presence of the word W in the string S. Words are delimited by
the characters found in WordDelims. The function returns True if a match is found, False
otherwise. The search is performed case sensitive.
This function is equivalent to the SearchBuf (1322) function with the soWholeWords option spec-
ified.
Errors: None.
See also: SearchBuf (1322)
74.3.58 LeftBStr
Synopsis: Copies Count characters starting at the left of a string.
Declaration: function LeftBStr(const AText: AnsiString; const AByteCount: SizeInt)
: AnsiString
Visibility: default
Description: LeftBStr returns a string containing the leftmost AByteCount bytes from the string AText .
If AByteCount is larger than the length (in bytes) of AText , only as many bytes as available are
returned.
Errors: None.
See also: LeftStr (1313), AnsiLeftStr (1298), RightBStr (1320), MidBStr (1314)
74.3.59 LeftStr
Synopsis: Copies Count characters starting at the left of a string.
Declaration: function LeftStr(const AText: AnsiString; const ACount: SizeInt)
: AnsiString
function LeftStr(const AText: WideString; const ACount: SizeInt)
: WideString
Visibility: default
1313
CHAPTER 74. REFERENCE FOR UNIT ’STRUTILS’
Description: LeftStr returns a string containing the leftmost ACount characters from the string AText . If
ACount is larger than the length (in characters) of AText , only as many characters as available are
returned.
Errors: None.
See also: LeftBStr (1313), AnsiLeftStr (1298), RightStr (1320), MidStr (1315)
74.3.60 MatchStr
Synopsis: Check whether a string occurs in an array of strings, observing case.
Declaration: function MatchStr(const AText: UnicodeString;
const AValues: Array of UnicodeString) : Boolean
function MatchStr(const AText: string; const AValues: Array of string)
: Boolean
Visibility: default
Description: MatchStr matches AText against each Unicode string in AValues. If a match is found, it
returns True, otherwise False is returned. The strings are matched observing case.
This function simply calls IndexStr (1311) and checks whether it returns -1 or not.
74.3.61 MatchText
Synopsis: Check if a string is in a list of values
Declaration: function MatchText(const AText: string; const AValues: Array of string)
: Boolean
function MatchText(const AText: UnicodeString;
const AValues: Array of UnicodeString) : Boolean
Visibility: default
Description: MatchText returns True if aText equals one of the strings in aValues. The comparison is
done case insensitively. If you wish to compare case sensitively, use MatchStr (1314) instead.
See also: MatchStr (1314), AnsiMatchText (1299), IndexText (1311)
74.3.62 MidBStr
Synopsis: Copies a number of characters starting at a given position in a string.
Declaration: function MidBStr(const AText: AnsiString; const AByteStart: SizeInt;
const AByteCount: SizeInt) : AnsiString
Visibility: default
Description: MidBStr returns a string containing the first AByteCount bytes from the string AText starting
at position AByteStart. If AByteStart+AByteCount is larger than the length (in bytes) of
AText, only as many bytes as available are returned. If AByteStart is less than 1 or larger than
the length of AText, then no characters are returned.
Errors: None.
See also: LeftBStr (1313), AnsiMidStr (1299), RightBStr (1320), MidStr (1315)
1314
CHAPTER 74. REFERENCE FOR UNIT ’STRUTILS’
74.3.63 MidStr
Synopsis: Copies a number of characters starting at a given position in a string.
Declaration: function MidStr(const AText: AnsiString; const AStart: SizeInt;
const ACount: SizeInt) : AnsiString
function MidStr(const AText: WideString; const AStart: SizeInt;
const ACount: SizeInt) : WideString
Visibility: default
Description: MidStr returns a string containing the first ACount bytes from the string AText starting at posi-
tion 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 (1313), AnsiMidStr (1299), RightStr (1320), MidBStr (1314)
74.3.64 NaturalCompareText
Synopsis: Compare using natural sort
Declaration: function NaturalCompareText(const S1: string; const S2: string)
: Integer
function NaturalCompareText(const Str1: string; const Str2: string;
const ADecSeparator: Char;
const AThousandSeparator: Char) : Integer
Visibility: default
Description: NaturalCompareText will compare 2 strings and return one of the following values:
When S1 and S2 are integer or floating point values, the actual values are compared. Thus ’12’ will
come after ’2’. If either of the values is not a valid integer or floating point values, the strings are
compared case insensitively as texts using CompareText (1652)
A decimal separator and thousands separator can optionally be specified in ADecSeparator,
AThousandSeparator. If none are specified, the defaults from the system unit will be used.
See also: CompareText (1293)
74.3.65 NPos
Synopsis: Returns the position of the N-th occurrence of a substring in a string.
Declaration: function NPos(const C: string; S: string; N: Integer) : SizeInt
Visibility: default
Description: NPos checks S for the position of the N-th occurrence of C. If C occurs less than N times in S, or
does not occur in S at all, 0 is returned. If N is less than 1, zero is returned.
1315
CHAPTER 74. REFERENCE FOR UNIT ’STRUTILS’
Errors: None.
See also: WordPosition (1329), FindPart (1309)
74.3.66 Numb2Dec
Synopsis: Converts a string representation of a number to its numerical value, given a certain base.
Errors: None.
See also: Hex2Dec (1310), Numb2USA (1316)
74.3.67 Numb2USA
Synopsis: Insert thousand separators.
74.3.68 PadCenter
Synopsis: Pad the string to a certain length, so the string is centered.
Errors: None.
See also: PadLeft (1316), PadRight (1317), AddChar (1296), AddCharR (1296)
74.3.69 PadLeft
Synopsis: Add spaces to the left of a string till a certain length is reached.
1316
CHAPTER 74. REFERENCE FOR UNIT ’STRUTILS’
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 larger 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 (1316), PadCenter (1316), AddChar (1296), AddCharR (1296)
74.3.70 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 right of the string S till the result reaches length Len. If the string S
has length equal to or larger 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 (1316), PadCenter (1316), AddChar (1296), AddCharR (1296)
74.3.71 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: SizeUInt)
: SizeInt
function PosEx(const SubStr: string; const S: string) : SizeInt
function PosEx(c: Char; const S: string; Offset: SizeUInt) : SizeInt
function PosEx(const SubStr: UnicodeString; const S: UnicodeString;
Offset: SizeUInt) : SizeInt
function PosEx(c: WideChar; const S: UnicodeString; Offset: SizeUInt)
: SizeInt
function PosEx(const SubStr: UnicodeString; const S: UnicodeString)
: SizeInt
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 (1315), AnsiContainsText (1297), AnsiContainsStr (1296)
74.3.72 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) : SizeInt
function PosSet(const c: string; const s: ansistring) : SizeInt
Visibility: default
1317
CHAPTER 74. REFERENCE FOR UNIT ’STRUTILS’
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 (1317), PosSetEx (1318), #rtl.system.pos (1509), RPosEx (1322)
74.3.73 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) : SizeInt
function PosSetEx(const c: string; const s: ansistring; count: Integer)
: SizeInt
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 (1317), PosSet (1317), #rtl.system.pos (1509), RPosEx (1322)
74.3.74 RandomFrom
Synopsis: Choose a random string from an array of strings.
Declaration: function RandomFrom(const AValues: Array of string) : string; 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.
74.3.75 Removeleadingchars
Synopsis: Remove any leading characters in a set from a string
Declaration: procedure Removeleadingchars(var S: AnsiString; const CSet: TSysCharSet)
Visibility: default
Description: Removeleadingchars removes any starting characters from S that appear in the set CSet. It
stops removing characters as soon as a character not in CSet is encountered. This is similar in
behaviour to TrimLeft (1760) which used whitespace as the set.
Errors: None.
See also: TrimLeft (1760), RemoveTrailingChars (1319), RemovePadChars (1319), TrimLeftSet (1327)
1318
CHAPTER 74. REFERENCE FOR UNIT ’STRUTILS’
74.3.76 RemovePadChars
Synopsis: Remove any trailing or leading characters in a set from a string
Declaration: procedure RemovePadChars(var S: AnsiString; const CSet: TSysCharSet)
Visibility: default
Description: RemovePadChars removes any leading trailing characters from S that appear in the set CSet,
i.e. it starts with the last character and works its way to the start of the string, and it stops removing
characters as soon as a character not in CSet is encountered. Then the same procedure is repeated
starting from the beginning of the string. This is similar in behaviour to Trim (1759) which used
whitespace as the set.
Errors: None.
See also: Trim (1759), RemoveLeadingChars (1318), RemoveTrailingChars (1319), TrimSet (1328), Trim-
LeftSet (1327), TrimRightSet (1327)
74.3.77 RemoveTrailingChars
Synopsis: Remove any trailing characters in a set from a string
Declaration: procedure RemoveTrailingChars(var S: AnsiString;
const CSet: TSysCharSet)
Visibility: default
Description: RemoveTrailingChars removes any trailing characters from S that appear in the set CSet, i.e.
it starts with the last character and works its way to the start of the string. It stops removing characters
as soon as a character not in CSet is encountered. This is similar in behaviour to TrimRight (1761)
which used whitespace as the set.
See also: TrimRight (1760), RemoveLeadingChars (1318), TrimRightSet (1327)
74.3.78 ReplaceStr
Synopsis: Replace strings case-sensitively
Declaration: function ReplaceStr(const AText: string; const AFromText: string;
const AToText: string) : string
Visibility: default
Description: ReplaceStr is a utility function that scans AText and replaces all occurrences of AFromText
with AToText and returns the resulting string. It simply calls StringReplace (1736) with the appro-
priate options.
See also: StringReplace (1736), ReplaceText (1319)
74.3.79 ReplaceText
Synopsis: Replace strings case-insensitively
Declaration: function ReplaceText(const AText: string; const AFromText: string;
const AToText: string) : string
Visibility: default
1319
CHAPTER 74. REFERENCE FOR UNIT ’STRUTILS’
Description: ReplaceText is a utility function that scans AText and replaces all occurrences of AFromText
(case insensitive) with AToTextand returns the resulting string. It simply calls StringReplace (1736)
with the appropriate options.
See also: StringReplace (1736), ReplaceText (1319)
74.3.80 ResemblesText
Synopsis: Check whether 2 strings resemble each other
Declaration: function ResemblesText(const AText: string; const AOther: string)
: Boolean
Visibility: default
Description: ResemblesText is an alias for AnsiResemblesText (1300)
See also: AnsiResemblesText (1300)
74.3.81 ReverseString
Synopsis: Reverse characters in a string
Declaration: function ReverseString(const AText: string) : string
Visibility: default
Description: ReverseString returns a string, made up of the characters in string AText, in reverse order.
Errors: None.
See also: RandomFrom (1318)
74.3.82 RightBStr
Synopsis: Copy a given number of characters (bytes), counting from the right of a string.
Declaration: function RightBStr(const AText: AnsiString; const AByteCount: SizeInt)
: 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 (1313), AnsiRightStr (1301), RightStr (1320), MidBStr (1314)
74.3.83 RightStr
Synopsis: Copy a given number of characters, counting from the right of a string.
Declaration: function RightStr(const AText: AnsiString; const ACount: SizeInt)
: AnsiString
function RightStr(const AText: WideString; const ACount: SizeInt)
: WideString
1320
CHAPTER 74. REFERENCE FOR UNIT ’STRUTILS’
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 (1313), AnsiRightStr (1301), RightBStr (1320), MidStr (1315)
74.3.84 RomanToInt
Synopsis: Convert a string with a Roman number to it’s decimal value.
Declaration: function RomanToInt(const S: string;
Strictness: TRomanConversionStrictness) : LongInt
Visibility: default
Description: RomanToInt returns the decimal equivalent of the Roman numerals in the string S. Invalid char-
acters are dropped from S. A negative numeral is supported as well. The level of error checking is
determined by the strictness parameter, the values are described in the type TRomanConver-
sionStrictness (1294).
Errors: On error, a EConvertError (1293) exception is raised.
See also: TRomanConversionStrictness (1294), IntToRoman (1312), Hex2Dec (1310), Numb2Dec (1316)
74.3.85 RomanToIntDef
Synopsis: Convert a roman numeral to an integer value
Declaration: function RomanToIntDef(const S: string; const ADefault: LongInt;
Strictness: TRomanConversionStrictness) : LongInt
Visibility: default
Description: RomanToInt converts the roman numeral in S to an integer and returns the integer value. The
strictness of the conversion algorithm is determined by Strictness. If the conversion fails,
ADefault is returned.
See also: TRomanConversionStrictness (1294), TryRomanToInt (1328), RomanToInt (1321), IntToRoman
(1312)
74.3.86 RPos
Synopsis: Find last occurrence of substring or character in a string
Declaration: function RPos(c: Char; const S: AnsiString) : SizeInt; Overload
function RPos(c: UnicodeChar; const S: UnicodeString) : SizeInt
; Overload
function RPos(const Substr: AnsiString; const Source: AnsiString)
: SizeInt; Overload
function RPos(const Substr: UnicodeString; const Source: UnicodeString)
: SizeInt; Overload
Visibility: default
1321
CHAPTER 74. REFERENCE FOR UNIT ’STRUTILS’
Description: RPos looks in S for the character C or the string SubStr. It starts looking at the end of the string,
and searches towards the beginning of the string. If a match is found, it returns the position of the
match.
See also: RPosEx (1322)
74.3.87 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) : SizeInt
; Overload
function RPosEx(C: UnicodeChar; const S: UnicodeString; offs: Cardinal)
: SizeInt; Overload
function RPosEx(const Substr: AnsiString; const Source: AnsiString;
offs: Cardinal) : SizeInt; Overload
function RPosEx(const Substr: UnicodeString;
const Source: UnicodeString; offs: Cardinal) : SizeInt
; 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 (1321)
74.3.88 SearchBuf
Synopsis: Search a buffer for a certain string.
Declaration: function SearchBuf(Buf: PChar; BufLen: SizeInt; SelStart: SizeInt;
SelLength: SizeInt; SearchString: string;
Options: TStringSearchOptions) : PChar
function SearchBuf(Buf: PChar; BufLen: SizeInt; SelStart: SizeInt;
SelLength: SizeInt; SearchString: string) : PChar
Visibility: default
Description: SearchBuf searches the buffer Buf for the occurrence of SearchString. At must Buflen
characters are searched, and the search is started at SelStart+SelLength. If a match is found,
a pointer to the position of the match is returned. The parameter Options (1295) specifies how the
search is conducted. It is a set of the following options:
Table 74.5:
Option Effect
soDown Searches forward, starting at the end of the selection. Default is searching up
soMatchCase Observe case when searching. Default is to ignore case.
soWholeWord Match only whole words. Default also returns parts of words
The standard constant WordDelimiters (1294) is used to mark the boundaries of words.
The SelStart parameter is zero based.
1322
CHAPTER 74. REFERENCE FOR UNIT ’STRUTILS’
Errors: Buflen must be the real length of the string, no checking on this is performed.
See also: FindPart (1309), ExtractWord (1307), ExtractWordPos (1307), ExtractSubStr (1307), IsWordPresent
(1313)
74.3.89 Soundex
Synopsis: Compute the soundex of a string
See also: SoundexCompare (1323), SoundexInt (1323), SoundexProc (1324), SoundexWord (1324), SoundexSim-
ilar (1324)
74.3.90 SoundexCompare
Synopsis: Compare soundex values of 2 strings.
Declaration: function SoundexCompare(const AText: string; const AOther: string;
ALength: TSoundexLength) : Integer
function SoundexCompare(const AText: string; const AOther: string)
: Integer
Visibility: default
Description: SoundexCompare computes the soundex codes of AText and AOther and feeds these to CompareText.
It will return -1 if the soundex code of AText is less than the soundex code of AOther, 0 if they
are equal, and 1 if the code of AOther is larger than the code of AText.
Errors: None.
See also: Soundex (1323), SoundexInt (1323), SoundexProc (1324), SoundexWord (1324), SoundexSimilar
(1324)
74.3.91 SoundexInt
Synopsis: Soundex value as an integer.
Declaration: function SoundexInt(const AText: string; ALength: TSoundexIntLength)
: Integer
function SoundexInt(const AText: string) : Integer
Visibility: default
Description: SoundexInt computes the Soundex (1323) code (with length ALength, default 4) of AText,
and converts the code to an integer value.
1323
CHAPTER 74. REFERENCE FOR UNIT ’STRUTILS’
Errors: None.
See also: Soundex (1323), SoundexCompare (1323), SoundexProc (1324), SoundexWord (1324), SoundexSim-
ilar (1324)
74.3.92 SoundexProc
Synopsis: Default AnsiResemblesText implementation.
Declaration: function SoundexProc(const AText: string; const AOther: string)
: Boolean
Visibility: default
Description: SoundexProc is the standard implementation for the AnsiResemblesText (1300) procedure: By
default, AnsiResemblesProc is set to this function. It compares the soundex codes of AOther
and AText and returns True if they are equal, or False if they are not.
Errors: None.
See also: Soundex (1323), SoundexCompare (1323), SoundexInt (1323), SoundexWord (1324), SoundexSim-
ilar (1324)
74.3.93 SoundexSimilar
Synopsis: Check whether 2 strings have equal soundex values
Declaration: function SoundexSimilar(const AText: string; const AOther: string;
ALength: TSoundexLength) : Boolean
function SoundexSimilar(const AText: string; const AOther: string)
: Boolean
Visibility: default
Description: SoundexSimilar returns True if the soundex codes (with length ALength) of AText and
AOther are equal, and False if they are not.
Errors: None.
See also: Soundex (1323), SoundexCompare (1323), SoundexInt (1323), SoundexProc (1324), SoundexWord
(1324), Soundex (1323)
74.3.94 SoundexWord
Synopsis: Calculate a word-sized soundex value
Declaration: function SoundexWord(const AText: string) : Word
Visibility: default
Description: SoundexInt computes the Soundex (1323) code (with length 4) of AText, and converts the code
to a word-sized value.
AText may not contain null characters.
Errors: None.
See also: Soundex (1323), SoundexCompare (1323), SoundexInt (1323), SoundexProc (1324), SoundexSim-
ilar (1324)
1324
CHAPTER 74. REFERENCE FOR UNIT ’STRUTILS’
74.3.95 SplitCommandLine
Declaration: function SplitCommandLine(S: RawByteString) : TRawByteStringArray
function SplitCommandLine(S: UnicodeString) : TUnicodeStringArray
Visibility: default
74.3.96 SplitString
Synopsis: Split a string in words
74.3.97 StartsStr
Synopsis: Check whether one string starts with another
74.3.98 StartsText
Synopsis: Check whether one text starts with another
Declaration: function StartsText(const ASubText: string; const AText: string)
: Boolean
Visibility: default
Description: StarsText checks whether aText starts with aSubText and returns True if it does. i.e. it
returns true if the first characters of aText are aSubText. It follows that the length of aText
must be at least the length of aSubText. The comparison is made case-insensitive. If you wish to
compare case-sensitively, use StartsStr (1325) instead.
See also: AnsiStartsText (1301), EndsText (1306), StartsStr (1325)
1325
CHAPTER 74. REFERENCE FOR UNIT ’STRUTILS’
74.3.99 StringReplace
Synopsis: Optimized search-and-replace algorithm
74.3.100 StringsReplace
Synopsis: Replace occurrences of a set of strings to another set of strings
Declaration: function StringsReplace(const S: string; OldPattern: Array of string;
NewPattern: Array of string;
Flags: TReplaceFlags) : string
Visibility: default
Description: StringsReplace scans S for the occurrence of one of the strings in OldPattern and replaces
it with the corresponding string in NewPattern. It takes into account Flags, which has the same
meaning as in StringReplace (1736).
Corresponding strings are matched by location: the N-th string in OldPattern is replaced by the
N-th string in NewPattern. Note that this means that the number of strings in both arrays must be
the same.
Errors: If the number of strings in both arrays is different, then an exception is raised.
1326
CHAPTER 74. REFERENCE FOR UNIT ’STRUTILS’
74.3.101 StuffString
Synopsis: Replace part of a string with another string.
See also: FindPart (1309), DelChars (1305), DelSpace (1305), ExtractSubStr (1307), DupeString (1305)
74.3.102 Tab2Space
Synopsis: Convert tab characters to a number of spaces
Declaration: function Tab2Space(const S: string; Numb: Byte) : string
Visibility: default
Description: Tab2Space returns a copy of S with all tab characters (ASCII character 9) converted to Numb
spaces.
Errors: None.
See also: StuffString (1327), FindPart (1309), ExtractWord (1307), DelChars (1305), DelSpace (1305), DelSpace1
(1305), DupeString (1305)
74.3.103 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 (1318), but returns the resulting
string.
Errors: None.
74.3.104 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
1327
CHAPTER 74. REFERENCE FOR UNIT ’STRUTILS’
Description: TrimLeftSet performs the same action as RemoveTrailingChars (1319), but returns the resulting
string.
Errors: None.
See also: TrimRight (1761), RemoveLeadingChars (1318), RemoveTrailingChars (1319), RemovePadChars
(1319), TrimSet (1328), TrimLeftSet (1327)
74.3.105 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 (1319), but returns the resulting string.
Errors: None.
See also: Trim (1759), RemoveLeadingChars (1318), RemoveTrailingChars (1319), RemovePadChars (1319),
TrimRightSet (1327), TrimLeftSet (1327)
74.3.106 TryRomanToInt
Synopsis: Try to convert a roman numeral to an integer value.
Declaration: function TryRomanToInt(S: string; out N: LongInt;
Strictness: TRomanConversionStrictness) : Boolean
Visibility: default
Description: TryRomanToInt will try to convert the roman numeral in S to an integer and returns the inte-
ger value in N. The strictness of the conversion algorithm is determined by Strictness. If the
conversion succeeds, then True is returned, or else False.
See also: TRomanConversionStrictness (1294), RomanToIntDef (1321), RomanToInt (1321), IntToRoman
(1312)
74.3.107 WordCount
Synopsis: Count the number of words in a string.
Declaration: function WordCount(const S: string; const WordDelims: TSysCharSet)
: SizeInt
Visibility: default
Description: WordCount returns the number of words in the string S. A word is a non-empty string of characters
bounded by one of the characters in WordDelims.
The predefined StdWordDelims (1294) constant can be used for the WordDelims argument.
Errors: None.
See also: WordPosition (1329), StdWordDelims (1294), ExtractWord (1307), ExtractWordPos (1307)
1328
CHAPTER 74. REFERENCE FOR UNIT ’STRUTILS’
74.3.108 WordPosition
Synopsis: Search position of Nth word in a string.
See also: WordCount (1328), StdWordDelims (1294), ExtractWord (1307), ExtractWordPos (1307)
74.3.109 XorDecode
Synopsis: Decode a string encoded with XorEncode (1329)
Declaration: function XorDecode(const Key: string; const Source: string) : string
Visibility: default
Description: XorDecode decodes Source and returns the original string that was encrypted using XorEncode
(1329) with key Key. If a different key is used than the key used to encode the string, the result will
be unreadable.
Errors: If the string Source is not a valid XorEncode result (e.g. contains non-numerical characters), then
a EConversionError exception will be raised.
See also: XorEncode (1329), XorString (1330)
74.3.110 XorEncode
Synopsis: Encode a string by XOR-ing its characters using characters of a given key, representing the result as
hex values.
Errors: None.
See also: XorDecode (1329), XorString (1330), Hex2Dec (1310)
1329
CHAPTER 74. REFERENCE FOR UNIT ’STRUTILS’
74.3.111 XorString
Synopsis: Encode a string by XOR-ing its characters using characters of a given key.
Errors: None.
See also: XorEncode (1329), XorDecode (1329)
1330
Chapter 75
75.1 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 predefined 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.
Table 75.1:
Name Description
DefaultSystemCodePage (1410) Actual code page to use when CP_ACP (1337) is encountered
DefaultUnicodeCodePage (1410) Code page for new Unicode strings
DefaultFileSystemCodePage (1409) Codepage to use when sending strings to single-byte OS file system routines.
DefaultRTLFileSystemCodePage (1409) Codepage to use when receiving strings from single-byte OS file system routines.
The windows code page identifiers are used. There are 3 special codepage identifiers:
1331
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Table 75.2:
Name Description
CP_ACP (1337) Currently set default system codepage
CP_OEMCP (1338) OEM (console) code page (only on windows)
CP_NONE (1338) Indicates absence of code page information for a string
DefaultRTLFileSystemCodePage (1409)
Table 75.3:
Name Description
LowerCase (1500) Return lowercase version of a string.
UpCase (1558) Convert a string to all uppercase.
GetDir (1468) Return the current directory
MkDir (1501) Create a new directory.
ChDir (1431) Change current working directory.
RmDir (1520) Remove directory when empty.
Assign (1418) Assign a name to a file
Erase (1453) Delete a file from disk
Rename (1517) Rename file on disk
Read (1513) Read from a text file into variable
ReadLn (1514) Read from a text file into variable and goto next line
Write (1565) Write variable to a text file or standard output
WriteLn (1566) Write variable to a text file or standard output and append newline
ReadStr (1515) Read variables from a string
WriteStr (1567) Write variables to a string
Insert (1487) Insert one string or dynamic array in another.
Copy (1440) Copy part of a string.
Delete (1444) Delete elements (characters) from a string or dynamic array.
SetString (1534) Set length of a string and copy buffer.
1332
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Table 75.4:
Name Description
Assert (1418) Conditionally abort program with error
Break (1427) Abort current loop
Continue (1438) Next cycle in current loop
Exclude (1454) Exclude an element from a set
Exit (1455) Exit current function or procedure
Include (1480) Include an element into a set
LongJmp (1499) Jump to execution point
Ord (1506) Return ordinal value of enumerated type
Pred (1510) Return previous value of ordinal type
SetJmp (1530) Mark execution point for jump
SizeOf (1538) Return size of variable or type
Succ (1546) Return next value of ordinal type
Table 75.5:
Name Description
Chdir (1431) Change working directory
Getdir (1468) Return current working directory
Halt (1475) Halt program execution
Paramcount (1507) Number of parameters with which program was called
Paramstr (1508) Retrieve parameters with which program was called
Mkdir (1501) Make a directory
Rmdir (1520) Remove a directory
Runerror (1525) Abort program execution with error condition
1333
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Table 75.6:
Name Description
BinStr (1425) Construct binary representation of integer
Chr (1432) Convert ASCII code to character
Concat (1438) Concatenate two strings
Copy (1440) Copy part of a string
Delete (1444) Delete part of a string
HexStr (1476) Construct hexadecimal representation of integer
Insert (1487) Insert one string in another
Length (1494) Return length of string
Lowercase (1500) Convert string to all-lowercase
OctStr (1504) Construct octal representation of integer
Pos (1509) Calculate position of one string in another
SetLength (1531) Set length of a string
SetString (1534) Set contents and length of a string or dynamic array
Str (1542) Convert number to string representation
StringOfChar (1544) Create string consisting of a number of characters
Upcase (1558) Convert string to all-uppercase
Val (1561) Convert string to number
Table 75.7:
Name Description
Abs (1413) Calculate absolute value
Arctan (1417) Calculate inverse tangent
Cos (1441) Calculate cosine of angle
Dec (1442) Decrease value of variable
Exp (1457) Exponentiate
Frac (1465) Return fractional part of floating point value
Hi (1476) Return high byte/word of value
Inc (1479) Increase value of variable
Int (1487) Calculate integer part of floating point value
Ln (1496) Calculate logarithm
Lo (1496) Return low byte/word of value
Odd (1505) Is a value odd or even ?
Pi (1508) Return the value of pi
Random (1512) Generate random number
Randomize (1513) Initialize random number generator
Round (1523) Round floating point value to nearest integer number
Sin (1538) Calculate sine of angle
Sqr (1540) Calculate the square of a value
Sqrt (1541) Calculate the square root of a value
Swap (1547) Swap high and low bytes/words of a variable
Trunc (1553) Truncate a floating point value
1334
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Table 75.8:
Name Description
Addr (1415) Return address of variable
Assigned (1422) Check if a pointer is valid
CompareByte (1433) Compare 2 memory buffers byte per byte
CompareChar (1434) Compare 2 memory buffers byte per byte
CompareDWord (1436) Compare 2 memory buffers byte per byte
CompareWord (1437) Compare 2 memory buffers byte per byte
CSeg (1441) Return code segment
Dispose (1445) Free dynamically allocated memory
DSeg (1446) Return data segment
FillByte (1459) Fill memory region with 8-bit pattern
FillChar (1460) Fill memory region with certain character
FillDWord (1461) Fill memory region with 32-bit pattern
FillQWord (??) Fill memory region with 64-bit pattern
FillWord (1461) Fill memory region with 16-bit pattern
Freemem (1466) Release allocated memory
Getmem (1469) Allocate new memory
GetMemoryManager (1470) Return current memory manager
High (1477) Return highest index of open array or enumerated
IndexByte (1480) Find byte-sized value in a memory range
IndexChar (1481) Find char-sized value in a memory range
IndexDWord (1482) Find DWord-sized (32-bit) value in a memory range
IndexQWord (1483) Find QWord-sized value in a memory range
IndexWord (1483) Find word-sized value in a memory range
IsMemoryManagerSet (1493) Is the memory manager set
MemSize (1501) Get size of allocation
Low (1499) Return lowest index of open array or enumerated
Move (1501) Move data from one location in memory to another
MoveChar0 (1502) Move data till first zero character
New (1503) Dynamically allocate memory for variable
Ofs (1505) Return offset of variable
Ptr (1511) Combine segment and offset to pointer
ReAllocMem (1516) Resize a memory block on the heap
Seg (1529) Return segment
SetMemoryManager (1532) Set a memory manager
Sptr (1540) Return current stack pointer
SSeg (1541) Return stack segment register value
1335
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Table 75.9:
Name Description
Append (1416) Open a file in append mode
Assign (1418) Assign a name to a file
Blockread (1426) Read data from a file into memory
Blockwrite (1427) Write data from memory to a file
Close (1432) Close a file
Eof (1451) Check for end of file
Eoln (1452) Check for end of line
Erase (1453) Delete file from disk
Filepos (1458) Position in file
Filesize (1459) Size of file
Flush (1464) Write file buffers to disk
IOresult (1491) Return result of last file IO operation
Read (1513) Read from file into variable
Readln (1514) Read from file into variable and goto next line
Rename (1517) Rename file on disk
Reset (1518) Open file for reading
Rewrite (1519) Open file for writing
Seek (1527) Set file position
SeekEof (1527) Set file position to end of file
SeekEoln (1528) Set file position to end of line
SetTextBuf (1534) Set size of file buffer
Truncate (1553) Truncate the file at position
Write (1565) Write variable to file
WriteLn (1566) Write variable to file and append newline
If set, the AbstractErrorProc constant is used when an abstract error occurs. If it is not set,
then the standard error handling is done: A stack dump is performed, and the program exits with
error code 211.
The SysUtils unit sets this procedure and raises an exception in its handler.
1336
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
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 (1353).
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 (split-
ting filenames, extracting parts of the filename and so on) will use that character only.
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.
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.
This handler is called to get a standard format for the backtrace routine.
CatchAllExceptions = PtrInt(- 1)
cExceptionFrame = 1
cFinalizeFrame = 2
CP_ACP = 0
1337
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
CP_ASCII = 20127
CP_NONE = $FFFF
CP_OEMCP = 1
CP_UTF16 = 1200
CP_UTF16BE = 1201
CP_UTF7 = 65000
CP_UTF8 = 65001
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
1338
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
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 drive letters, 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.
ErrorCode : Word = 0
If set, the ErrorProc constant is used when a run-time error occurs. If it is not set, then the
standard error handling is done: a stack dump is performed, and the program exits with the indicated
error code.
The SysUtils unit sets this procedure and raises an exception in its handler.
This constant points to the current exception handling procedure. This routine is called when an
unhandled exception occurs, i.e. an exception that is not stopped by a except block.
If the handler is not set, the RTL will emit a run-time error 217 when an unhandler exception occurs.
It is set by the sysutils (1598) unit.
1339
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
ExtensionSeparator = '.'
ExtensionSeparator is the character which separates the filename from the file extension. On
all current platforms, this is the . (dot) character. All RTL filename handling routines use this
constant.
E_NOINTERFACE = hresult($80004002)
E_NOTIMPL = hresult($80004001)
E_UNEXPECTED = hresult($8000FFFF)
FileMode : Byte = 2
FileMode determines how untyped files are opened for reading with Reset (1518). It can have the
following values:
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 file system: 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
1340
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
float_flag_denormal = exDenormalized
float_flag_divbyzero = exZeroDivide
float_flag_inexact = exPrecision
float_flag_invalid = exInvalidOp
float_flag_overflow = exOverflow
float_flag_underflow = exUnderflow
float_round_down = rmDown
Round down
float_round_nearest_even = rmNearest
float_round_to_zero = rmTruncate
float_round_up = rmUp
Round up
fmAppend = $D7B4
fmClosed = $D7B0
fmInOut = $D7B3
1341
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
fmInput = $D7B1
fmOutput = $D7B2
FPC_EXCEPTION = 1
fpc_in_abs_long = 64
fpc_in_abs_real = 127
fpc_in_addr_x = 42
fpc_in_aligned_x = 80
fpc_in_and_assign_x_y = 86
fpc_in_arctan_real = 130
fpc_in_assert_x_y = 41
fpc_in_assigned_x = 19
fpc_in_bitsizeof_x = 61
fpc_in_box_x = 77
1342
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
fpc_in_break = 39
fpc_in_bsf_x = 74
fpc_in_bsr_x = 75
fpc_in_chr_byte = 7
fpc_in_concat_x = 18
fpc_in_const_abs = 101
fpc_in_const_odd = 102
fpc_in_const_ptr = 103
fpc_in_const_sqr = 100
fpc_in_const_swap_long = 105
fpc_in_const_swap_qword = 108
fpc_in_const_swap_word = 104
fpc_in_continue = 40
1343
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
fpc_in_copy_x = 49
fpc_in_cos_real = 125
fpc_in_cpu_first = 10000
fpc_in_cycle = 52
fpc_in_dec_x = 36
fpc_in_default_x = 76
fpc_in_delete_x_y_z = 83
fpc_in_dispose_x = 47
fpc_in_exclude_x_y = 38
fpc_in_exit = 48
fpc_in_exp_real = 124
fpc_in_faraddr_x = 97
fpc_in_fillchar_x = 55
fpc_in_finalize_x = 45
1344
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
fpc_in_fma_double = 134
fpc_in_fma_extended = 135
fpc_in_fma_float128 = 136
fpc_in_fma_single = 133
fpc_in_frac_real = 122
fpc_in_get_caller_addr = 57
fpc_in_get_caller_frame = 58
fpc_in_get_frame = 56
fpc_in_high_x = 28
fpc_in_hi_long = 4
fpc_in_hi_qword = 107
fpc_in_hi_word = 2
fpc_in_include_x_y = 37
1345
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
fpc_in_inc_x = 35
fpc_in_initialize_x = 50
fpc_in_insert_x_y_z = 82
fpc_in_int_real = 123
fpc_in_leave = 51
fpc_in_length_string = 6
fpc_in_ln_real = 131
fpc_in_low_x = 27
fpc_in_lo_long = 3
fpc_in_lo_qword = 106
fpc_in_lo_word = 1
fpc_in_mmx_pcmpeqb = 200
fpc_in_mmx_pcmpeqd = 202
1346
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
fpc_in_mmx_pcmpeqw = 201
fpc_in_mmx_pcmpgtb = 203
fpc_in_mmx_pcmpgtd = 205
fpc_in_mmx_pcmpgtw = 204
fpc_in_move_x = 54
fpc_in_neg_assign_x = 94
fpc_in_new_x = 46
fpc_in_not_assign_x = 95
fpc_in_ofs_x = 21
fpc_in_ord_x = 5
fpc_in_or_assign_x_y = 87
fpc_in_pack_x_y_z = 59
fpc_in_pi_real = 126
fpc_in_popcnt_x = 79
1347
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
fpc_in_pred_x = 30
fpc_in_prefetch_var = 109
fpc_in_readln_x = 17
fpc_in_readstr_x = 63
fpc_in_read_x = 16
fpc_in_reset_typedfile = 32
fpc_in_reset_typedfile_name = 84
fpc_in_reset_x = 25
fpc_in_rewrite_typedfile = 33
fpc_in_rewrite_typedfile_name = 85
fpc_in_rewrite_x = 26
fpc_in_rol_assign_x_y = 92
fpc_in_rol_x = 67
fpc_in_rol_x_x = 68
1348
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
fpc_in_ror_assign_x_y = 93
fpc_in_ror_x = 65
fpc_in_ror_x_x = 66
fpc_in_round_real = 121
fpc_in_sar_assign_x_y = 89
fpc_in_sar_x = 73
fpc_in_sar_x_y = 72
fpc_in_seg_x = 29
fpc_in_setlength_x = 44
fpc_in_setstring_x_y_z = 81
fpc_in_settextbuf_file_x = 34
fpc_in_shl_assign_x_y = 90
fpc_in_shr_assign_x_y = 91
fpc_in_sin_real = 132
fpc_in_sizeof_x = 22
1349
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
fpc_in_slice = 53
fpc_in_sqrt_real = 129
fpc_in_sqr_real = 128
fpc_in_str_x_string = 20
fpc_in_succ_x = 31
fpc_in_trunc_real = 120
fpc_in_typeinfo_x = 43
fpc_in_typeof_x = 23
fpc_in_unbox_x_y = 78
fpc_in_unpack_x_y_z = 60
fpc_in_val_x = 24
fpc_in_writeln_x = 15
fpc_in_writestr_x = 62
1350
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
fpc_in_write_x = 14
fpc_in_x86_cli = fpc_in_cpu_first + 6
fpc_in_x86_get_cs = fpc_in_cpu_first + 8
fpc_in_x86_get_ds = fpc_in_cpu_first + 10
fpc_in_x86_get_es = fpc_in_cpu_first + 11
fpc_in_x86_get_fs = fpc_in_cpu_first + 12
fpc_in_x86_get_gs = fpc_in_cpu_first + 13
fpc_in_x86_get_ss = fpc_in_cpu_first + 9
fpc_in_x86_inportb = fpc_in_cpu_first
fpc_in_x86_inportl = fpc_in_cpu_first + 2
fpc_in_x86_inportw = fpc_in_cpu_first + 1
fpc_in_x86_outportb = fpc_in_cpu_first + 3
fpc_in_x86_outportl = fpc_in_cpu_first + 5
fpc_in_x86_outportw = fpc_in_cpu_first + 4
fpc_in_x86_sti = fpc_in_cpu_first + 7
fpc_in_xor_assign_x_y = 88
fpc_objc_encode_x = 71
fpc_objc_protocol_x = 70
1351
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
fpc_objc_selector_x = 69
InitProc is a routine that can be called after all units were initialized. It can be set by units to
execute code that can be initialized after all units were initialized.
Remark When setting the value of InitProc, the previous value should always be saved, and called when
the installed initialization routine has finished executing.
IObjectInstance : TGuid =
'{D91C9AF4-3C93-420F-A303-BF5BA82BFD23}'
IObjectInstance is an internal GUID, which should not be used in end-user code. It is used in
the as operator.
LFNSupport = True
1352
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
LFNSupport determines whether the current OS supports long file names, i.e. filenames that are
not of the form 8.3 as on ancient DOS systems. If the value of this constant is True then long
filenames are supported. If it is false, then not.
This constant is part of a set of constants that describe the OS characteristics. These constants should
be used instead of hardcoding OS characteristics.
LineEnding = #10
LineEnding is a constant which contains the current line-ending character. This character is sys-
tem dependent, and is initialized by the system. It should not be set.
This constant is part of a set of constants that describe the OS characteristics. These constants should
be used instead of hardcoding OS characteristics.
maxExitCode = 255
MaxInt = maxsmallint
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
MaxPathLen = 4096
MaxSIntValue = High(ValSInt)
MaxSmallint = 32767
MaxUIntValue = High(ValUInt)
Max_Frame_Dump : Word = 8
1353
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
ModuleIsCpp is always false for FPC programs, it is provided for Delphi compatibility only.
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).
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).
NilHandle = TLibHandle(0)
PathSeparator = ':'
PathSeparator is the character used commonly on the current operating system to separate paths
in a list of paths, such as the PATH environment variable.
This constant is part of a set of constants that describe the OS characteristics. These constants should
be used instead of hardcoding OS characteristics.
RaiseMaxFrameCount : LongInt = 16
RT_ACCELERATOR = MAKEINTRESOURCE(9)
RT_ANICURSOR = MAKEINTRESOURCE(21)
RT_ANIICON = MAKEINTRESOURCE(22)
RT_BITMAP = MAKEINTRESOURCE(2)
RT_CURSOR = MAKEINTRESOURCE(1)
1354
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
RT_DIALOG = MAKEINTRESOURCE(5)
RT_FONT = MAKEINTRESOURCE(8)
RT_FONTDIR = MAKEINTRESOURCE(7)
RT_GROUP_CURSOR = MAKEINTRESOURCE(12)
RT_GROUP_ICON = MAKEINTRESOURCE(14)
RT_HTML = MAKEINTRESOURCE(23)
RT_ICON = MAKEINTRESOURCE(3)
RT_MANIFEST = MAKEINTRESOURCE(24)
RT_MENU = MAKEINTRESOURCE(4)
RT_MESSAGETABLE = MAKEINTRESOURCE(11)
RT_RCDATA = MAKEINTRESOURCE(10)
RT_STRING = MAKEINTRESOURCE(6)
RT_VERSION = MAKEINTRESOURCE(16)
1355
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
This array is used by the Error (1454) routine to convert a TRuntimeError (1392) enumeration type
to a process exit code.
SharedSuffix = 'so'
sLineBreak = LineEnding
sLineBreak is an alias for LineEnding (1353) and is supplied for Delphi compatibility.
This constant is part of a set of constants that describe the OS characteristics. These constants should
be used instead of hardcoding OS characteristics.
StdErrorHandle = 2
StdInputHandle = 0
StdOutputHandle = 1
S_FALSE = 1
S_OK = 0
Test8086 : Byte = 2
1356
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Test8087 : Byte = 3
TextRecBufSize = 256
TextRecBufSize is the default buffer size for text files. The actual buffer can be set to another
size using SetTextBuf (1534).
TextRecNameLength = 256
tkAnsiChar = tkChar
tkAnsiString = tkAString
tkShortString = tkSString
tkUnicodeString = tkUString
tkWideChar = tkWChar
tkWideString = tkWString
UnusedHandle = - 1
1357
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
varAny = $101
varArray = $2000
varBoolean = 11
varByRef = $4000
varByte = 17
varCurrency = 6
varDate = 7
varDecimal = 14
varDispatch = 9
varDouble = 5
1358
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
varEmpty = 0
varError = 10
varInt64 = 20
varInteger = 3
varLongWord = 19
varNull = 1
varOleStr = 8
varQWord = 21
varRecord = 36
varShortInt = 16
varSingle = 4
varSmallInt = 2
varStrArg = $48
1359
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
varString = $100
varTypeMask = $fff
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 (1402).
varUnknown = 13
varUStrArg = $49
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 (1402).
varVariant = 12
varWord = 18
varWord64 = varQWord
1360
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
VMT Layout: ?
VMT layout: ?
VMT Layout: ?
VMT Layout: ?
VMT Layout: ?
vmtDestroy = vmtMethodStart
vmtDispatch is the offset from the VMT start, in bytes to the dispatch table for a class.The
dispatch table is used when dispatching messages in TObject.Dispatch (1593)
vmtDispatchStr is the offset from the VMT start, in bytes to the dispatch table for a class.The
dispatch table is used when dispatching messages in TObject.DispatchStr (1594)
vmtEquals contains the offset from the VMT start, of the location of the TObject.Equals (1596)
method pointer.
1361
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
vmtGetHashCode contains the offset from the VMT start, of the location of the TObject.GetHashCode
(1596) method pointer.
VMT Layout: ?
vmtInstanceSize = 0
vmtParent = sizeof(SizeInt) * 2
VMT Layout: ?
vmtToString contains the offset from the VMT start, of the location of the TObject.ToString
(1597) method pointer.
1362
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
vtAnsiString = 11
vtBoolean = 1
vtChar = 2
vtClass = 8
vtCurrency = 12
vtExtended = 3
vtInt64 = 16
vtInteger = 0
vtInterface = 14
vtObject = 7
vtPChar = 6
vtPointer = 5
vtPWideChar = 10
1363
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
vtQWord = 17
vtString = 4
vtUnicodeString = 18
vtUnicodeString denotes a Unicode string argument in the array of const. The TVarRec.VUnicodeString
field will contain the actual value.
vtVariant = 13
vtWideChar = 9
vtWideString = 15
75.10.2 Types
AnsiChar = Char
Byte = 0..255
Cardinal = LongWord
Char = #0..#255
CodePointer = Pointer
CodePointer is used in 8/16-bit targets to indicate pointers to code segments. On all other plat-
forms this equals Pointer.
CodePointer = Pointer
1364
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
CodePointer is used in 8/16-bit targets to indicate pointers to code segments. On all other plat-
forms this equals Pointer.
CodePtrInt = PtrInt
CodePtrInt = PtrInt
CodePtrUInt = PtrUInt
CodePtrUInt = PtrUInt
Comp = Int64
DWord = LongWord
EnumResNameProcs used in the EnumResourceLanguages (1450) call. It is called for all lan-
guages 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 re-
source. Additionally, the lParam parameter from the EnumResourceLanguages is passed un-
altered.
EnumResNameProcs used in the EnumResourceNames (1451) 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 is used in the EnumResourceTypes (1451) call. It is called for all resources,
and is passed the ModuleHandle, ResourceType values for each resource encountered. Addi-
tionally, the lParam parameter from the EnumResourceTypes is passed unaltered.
1365
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
FarPointer = Pointer
FarPointer is used in 8/16-bit targets to indicate far pointers (over segments). On all other plat-
forms this equals Pointer.
FileRec = record
public
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
HMODULE = PtrUInt
HRESULT = LongInt
IInterface = IUnknown
IInterface is the basic interface from which all COM style interfaces descend.
Int16 = SmallInt
Int32 = LongInt
Int64 = - 9223372036854775808..9223372036854775807
Int8 = ShortInt
1366
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
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.
Remark Note that due to the way the language modes are implemented, if you refer to integer with the
fully qualified name System.Integer, you will still get a 16-bit integer.
IntPtr = PtrInt
Longint = - 2147483648..2147483647
Longword = 0..4294967295
The base 32-bit unsigned type. See the reference manual for more details
MAKEINTRESOURCE = PChar
MarshaledAString = PAnsiChar
MarshaledString = PWideChar
NativeInt = PtrInt
1367
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
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. It is advisable to use unsigned variants of this
type. See PtrUInt (1375) for details.
NativeUInt = PtrUInt
NativeUInt 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.
OpaquePointer = POpaqueData
PAnsiChar = PChar
PAnsiString = ^AnsiString
PBoolean = ^Boolean
PBoolean16 = ^Boolean16
PBoolean32 = ^Boolean32
PBoolean64 = ^Boolean64
PBoolean8 = ^Boolean8
PByte = ^Byte
PByteBool = ^ByteBool
pcalldesc = ^tcalldesc
PCardinal = ^Cardinal
1368
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
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
PCodePointer = ^CodePointer
PCurrency = ^Currency
PDate = ^TDateTime
PDateTime = ^TDateTime
Pointer to TDatetime
PDispatch = ^IDispatch
pdispdesc = ^tdispdesc
PDouble = ^Double
PDWord = ^DWord
pdynarrayindex = ^tdynarrayindex
pdynarraytypeinfo = ^tdynarraytypeinfo
PError = ^TError
1369
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
PEventState = pointer
PExceptAddr = ^TExceptAddr
PExceptObject = ^TExceptObject
PExtended = ^Extended
PFileTextRecChar = ^TFileTextRecChar
PGuid = ^TGuid
PInt16 = PSmallInt
PInt32 = PLongint
PInt64 = ^Int64
PInt8 = PShortInt
PInteger = ^Integer
PIntegerArray = ^IntegerArray
PInterface = PUnknown
1370
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
pinterfaceentry = ^tinterfaceentry
pinterfacetable = ^tinterfacetable
PIntPtr = PPtrInt
PJmp_buf = ^jmp_buf
PLongBool = ^LongBool
PLongint = ^LongInt
PLongWord = ^LongWord
PMarshaledAString = ^PAnsiChar
Pointer to PWideChar
PMarshaledString = ^PWideChar
Pointer to PWideChar
PMemoryManager = ^TMemoryManager
PMethod = ^TMethod
Pointer to method
PMsgStrTable = ^TMsgStrTable
PNativeInt = ^NativeInt
1371
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
PNativeUInt = ^NativeUInt
POleVariant = ^OleVariant
POpaqueData = ^TOpaqueData
POpaqueData represents a pointer to data for which the internal structure must not be known. You
can make type aliases from this pointer.
PPAnsiChar = PPChar
PPByte = ^PByte
PPChar = ^PChar
PPCharArray = ^TPCharArray
PPCodePointer = ^PCodePointer
PPDispatch = ^PDispatch
PPDouble = ^PDouble
ppdynarraytypeinfo = ^pdynarraytypeinfo
Pointer to pdynarraytypeinfo
1372
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
PPLongint = ^PLongint
PPointer = ^Pointer
PPointerArray = ^PointerArray
PPPAnsiChar = PPPChar
PPPChar = ^PPChar
PPPointer = ^PPointer
PPPWideChar = ^PPWideChar
PPtrInt = ^PtrInt
PPtrUInt = ^PtrUInt
PPUnknown = ^PUnknown
PPVmt = ^PVmt
PPWideChar = ^PWideChar
PQWord = ^QWord
1373
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
PQWordBool = ^QWordBool
PRawByteString = ^RawByteString
Pointer to RawByteString
PRTLCriticalSection = ^TRTLCriticalSection
PRTLEvent = pointer
PShortInt = ^ShortInt
PShortString = ^ShortString
PSingle = ^Single
PSizeInt = ^SizeInt
PSizeUInt = ^SizeUInt
PSmallInt = ^SmallInt
pstringmessagetable = ^TStringMessageTable
PText = ^Text
PtrInt = LongInt
Ptrint is a signed integer type which has always the same size as a pointer. Ptrint is considered
harmful and should almost never be used in actual code, because pointers are normally unsigned. For
example, consider the following code:
1374
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Ptrint might have a valid use when two pointers are subtracted 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 (1375) instead.
PtrInt = Int64
Ptrint is a signed integer type which has always the same size as a pointer. Ptrint is considered
harmful and should almost never be used in actual code, because pointers are normally unsigned. For
example, consider the following code:
Ptrint might have a valid use when two pointers are subtracted 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 (1375) instead.
PtrUInt = QWord
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.
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
PUCS4Char = ^UCS4Char
PUCS4CharArray = ^TUCS4CharArray
PUInt16 = PWord
PUInt32 = PDWord
1375
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
PUInt64 = ^UInt64
PUInt8 = PByte
PUintPtr = PPtrUInt
PUnicodeChar = ^UnicodeChar
PUnicodeChar is a pointer to a Unicode character, just like PChar is a pointer to a Char an-
sistring character.
PUnicodeString = ^UnicodeString
PUnknown = ^IUnknown
Untyped pointer
PUTF8Char = PAnsiChar
Pointer to UTF8Char
PUTF8String = ^UTF8String
pvararray = ^tvararray
pvararraybound = ^tvararraybound
pvararrayboundarray = ^tvararrayboundarray
pvararraycoorarray = ^tvararraycoorarray
1376
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
pvardata = ^tvardata
PVariant = ^Variant
pvariantmanager = ^tvariantmanager
PVarRec = ^TVarRec
PVmt = ^TVmt
PWideChar = ^WideChar
PWideString = ^WideString
PWord = ^Word
PWordBool = ^WordBool
QWord = 0..18446744073709551615
RawByteString = ansistring
RawByteString is a single-byte character string which does not have any codepage associated
with it.
This means that assigning a single-byte character string to this kind of string will not change the
codepage of the string.
Inversely, when assigning a RawByteString to a single-byte string, the codepage of the desti-
nation is simply set to the codepage of the rawbytestring: no codepage conversion happens, the
reference count is simply increased.
1377
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Real = Double
Shortint = - 128..127
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.
SizeInt = Int64
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 = QWord
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.
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
TAbstractErrorProc = procedure
TAllocateThreadVarsHandler = procedure
1378
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
TAnsiChar = Char
1379
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
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.
TCompareOption = (coIgnoreCase)
Value Explanation
coIgnoreCase Ignore case (usually identical to coLingIgnoreCase)
TCompareOption indicates how 2 strings should be compared. This option is used in the WideString-
Manager (1407) implementation when comparing 2 strings. The following options exist:
1380
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
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 (1381) instead.
TDateTime = Double
tcalldesc is used to encode a dispatch call to an OLE dispatch interface. It is used on windows
only. It describes the dispatch call call.
tdynarrayindex = SizeInt
A variable of type tdynarrayindex will always have the correct size, suitable for serving as an
index in a dynamic array.
TDynLibsManager = record
public
LoadLibraryU : TLoadLibraryUHandler
;
LoadLibraryA : TLoadLibraryAHandler;
GetProcAddress : TGetProcAddressHandler
;
1381
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
GetProcAddressOrdinal : TGetProcAddressOrdinalHandler;
UnloadLibrary
: TUnloadLibraryHandler;
GetLoadErrorStr : TGetLoadErrorStrHandler
;
end
TDynLibsManager contains all the callbacks needed to load and manage dynamic libraries. The
system unit does not contain dynamic loading library support on all supported platforms. Like the
unicode string support, heap support and thread support, support for loading dnamic libraries is
pluggable. This record contains the necessary callbacks that the system unit needs to implement
loading of dynamic libraries (needed for example for run-time package support).
Including the dynlibs (710) unit will enable support for dynamically loadable libraries on all plat-
forms that support this.
TEntryInformation = record
public
InitFinalTable : Pointer;
ThreadvarTablesTable
: Pointer;
ResourceStringTables : Pointer;
ResStrInitTables
: Pointer;
ResLocation : Pointer;
PascalMain : procedure;
valgrind_used
: Boolean;
OS : TEntryInformationOS;
end
TEntryInformation is used to initialize a Free Pascal program or library. Under normal cir-
cumstances, there should be no need to use this structure directly: it is used by the system unit and
special linking units.
TEntryInformationOS = record
public
argc : LongInt;
argv : PPChar
;
envp : PPChar;
stkptr : pointer;
stklen : SizeUInt;
haltproc
: procedure(e: LongInt);
end
TEntryInformationOS represents executable entry information for the current OS. This struc-
ture is OS dependent.
1382
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
TError = LongInt
TExceptAddr = record
public
buf : PJmp_buf;
next : PExceptAddr
;
frametype : LongInt;
end
TExceptAddr describes an exception frame on the exception address frame stack. It is used in
structured stack exception handling.
TExceptObject = record
public
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.
TextFile = Text
TextRec = record
public
Handle : THandle;
Mode : LongInt;
bufsize
1383
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
: SizeInt;
_private : SizeInt;
bufpos : SizeInt;
bufend : SizeInt
;
bufptr : ^TextBuf;
openfunc : CodePointer;
inoutfunc : CodePointer
;
flushfunc : CodePointer;
closefunc : CodePointer;
UserData
: Array[1..32] of Byte;
name : Array[0..textrecnamelength-1] of
TFileTextRecChar;
LineEnd : TLineEndStr;
buffer : TextBuf;
end
TextRec is the underlying type used in text files. It should be treated as opaque and never manipu-
lated directly.
TFileTextRecChar = UnicodeChar
TFileTextRecChar is the type of character used in TextRec (1384) or FileRec (1366) 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)
Value Explanation
fsDenormal Denormal value
fsInf Infinity
fsInvalidOp Invalid operation
fsNaN Not a number
fsNDenormal Negative enormal value
fsNegative Negative value
fsNInf Negative infinity
fsNZero Negative zero
fsPositive Positive value
fsZero Zero
TFPCHeapStatus = record
public
1384
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
MaxHeapSize : PtrUInt;
MaxHeapUsed
: PtrUInt;
CurrHeapSize : PtrUInt;
CurrHeapUsed : PtrUInt;
CurrHeapFree : PtrUInt;
end
TFPCHeapStatus describes the state of the FPC heap manager. This is not equivalent to the
THeapStatus (1387) record defined by Delphi, which contains information not meaningful for the
FPC heap manager. The heap status can be retrieved by the GetFPCHeapStatus (1469) 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 across platforms.
TFPResourceHGLOBAL = PtrUInt
TFPResourceHMODULE = PtrUInt
TFPUException = (exInvalidOp,exDenormalized,exZeroDivide,exOverflow
,
exUnderflow,exPrecision)
Value Explanation
exDenormalized
exInvalidOp Invalid operation error
exOverflow Float overflow error
exPrecision Precision error
exUnderflow Float underflow error
exZeroDivide Division by zero error.
TFPUException describes what floating point errors raise exceptions. It has been moved here
from the Math unit.
TFPUPrecisionMode = (pmSingle,pmReserved,pmDouble,pmExtended)
1385
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Value Explanation
pmDouble Double-type precision
pmExtended Extended-type precision
pmReserved ?
pmSingle 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)
Value Explanation
rmDown Round to biggest integer smaller than value.
rmNearest Round to nearest integer
rmTruncate Cut off fractional part
rmUp 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.
TGetProcAddressHandler is the type for the GetProcAddress call using ansistring names
in the TDynLibsManager (1382) dynamic library loading manager.
1386
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
1: (
public
Data1 : DWord
;
Data2 : Word;
Data3 : Word;
Data4 : Array[0..7] of Byte;
);
2: (
public
D1 : DWord;
D2 : Word;
D3 : Word;
D4 : Array
[0..7] of Byte;
);
3: (
public
time_low : DWord;
time_mid : Word
;
time_hi_and_version : Word;
clock_seq_hi_and_reserved : Byte
;
clock_seq_low : Byte;
node : Array[0..5] of Byte;
);
end
THandle = LongInt
This type should be considered opaque. It is used to describe file and other handles.
THeapStatus = record
public
TotalAddrSpace : Cardinal;
TotalUncommitted
: Cardinal;
TotalCommitted : Cardinal;
TotalAllocated : Cardinal
;
TotalFree : Cardinal;
FreeSmall : Cardinal;
FreeBig : Cardinal
;
Unused : Cardinal;
Overhead : Cardinal;
HeapErrorCode : Cardinal
;
end
1387
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
THeapStatus is the record describing the current heap status. It is returned by the GetHeapStatus
(1469) call.
TInterfacedClass is a descendent of
tinterfaceentrytype = (etStandard,etVirtualMethodResult,
etStaticMethodResult,etFieldValue,
etVirtualMethodClass,etStaticMethodClass,
etFieldValueClass)
Value Explanation
etFieldValue Field value
etFieldValueClass Interface provided by a class field
etStandard Standard entry
etStaticMethodClass Interface provided by a static class method
etStaticMethodResult Static method
etVirtualMethodClass Interface provided by a virtual class method
etVirtualMethodResult Virtual method
This is an internal type for the compiler to encode calls to dispatch interfaces.
tinterfacetable = record
public
EntryCount : SizeUInt;
Entries
: Array[0..0] of tinterfaceentry;
end
TLibHandle = PtrInt
TLineEndStr = string
TLineEndStr is an alias for the actual line ending string type, used in TextRec (1384). It should
be treated as opaque.
1388
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
TLoadLibraryAHandler is the type for the loadlibrary call using ansistring names in the TDyn-
LibsManager (1382) dynamic library loading manager.
TLoadLibraryUHandler is the type for the loadlibrary call using unicode names in the TDyn-
LibsManager (1382) dynamic library loading manager.
TMemoryManager = record
public
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 man-
ager, see the programmer’s reference.
TMethod = record
public
Code : CodePointer;
Data : Pointer;
end
TMethod describes a general method pointer, and is used in Run-Time Type Information handling.
TMsgStrTable = record
public
name : PShortString;
method : CodePointer
;
end
TOpaqueData = record
end
1389
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
TOpaqueData represents data for which the internal structure must not be known. It is mustly
useful for the pointer definition POpaqueData (1372).
TOrdinalEntry = SizeUInt
Array of PChar
TProcedure = procedure
TReleaseThreadVarsHandler = procedure
TResourceHandle = PtrUInt
TResourceManager = record
public
HINSTANCEFunc : function : TFPResourceHMODULE
;
EnumResourceTypesFunc : function(ModuleHandle: TFPResourceHMODULE
; EnumFunc: EnumResTypeProc;
lParam: PtrInt) : LongBool
;
EnumResourceNamesFunc : function(ModuleHandle: TFPResourceHMODULE
; ResourceType: PChar;
EnumFunc: EnumResNameProc; lParam
: PtrInt) : LongBool;
EnumResourceLanguagesFunc : function(ModuleHandle
: TFPResourceHMODULE; ResourceType: PChar;
ResourceName
: PChar; EnumFunc: EnumResLangProc; lParam: PtrInt)
:
LongBool;
FindResourceFunc : function(ModuleHandle: TFPResourceHMODULE
; ResourceName: PChar;
ResourceType: PChar) : TFPResourceHandle
;
FindResourceExFunc : function(ModuleHandle: TFPResourceHMODULE
; ResourceType: PChar;
1390
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
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 plat-
form, this may be an internal or an external resource manager.
TRuntimeError = (reNone,reOutOfMemory,reInvalidPtr,reDivByZero,
reRangeError,reIntOverflow,reInvalidOp,reZeroDivide
,
1391
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
reOverflow,reUnderflow,reInvalidCast,reAccessViolation
,
rePrivInstruction,reControlBreak,reStackOverflow
,
reVarTypeCast,reVarInvalidOp,reVarDispatch,
reVarArrayCreate,reVarNotArray,reVarArrayBounds,
reAssertionFailed,reExternalException,reIntfCastError
,
reSafeCallError,reQuit,reCodesetConversion,
reNoDynLibsSupport,reThreadError)
Value Explanation
reAccessViolation Access Violation
reAssertionFailed Assertion failed error
reCodesetConversion Code set conversion error
reControlBreak User pressed CTRL-C
reDivByZero Division by zero error
reExternalException An external exception occurred
reIntfCastError Interface typecast error
reIntOverflow Integer overflow error
reInvalidCast Invalid (class) typecast error
reInvalidOp Invalid operation error
reInvalidPtr Invalid pointer error
reNoDynLibsSupport Runtime error if no dynamic library support is available
reNone No error
reOutOfMemory Out of memory error
reOverflow Overflow error
rePrivInstruction Privileged instruction error
reQuit Quit signal error
reRangeError Range check error
reSafeCallError Safecall (IDispInterface) error
reStackOverflow Stack overflow error
reThreadError Runtime error if no thread support is available
reUnderflow Underflow error
reVarArrayBounds Variant array bounds error
reVarArrayCreate Variant array creation error
reVarDispatch Variant Dispatch error.
reVarInvalidOp Invalid variant operation error
reVarNotArray Variant is not an array error.
reVarTypeCast Invalid typecase from variant
reZeroDivide Division by zero error
TRuntimeError is used in the Error (1454) procedure to indicate what kind of error should be
reported.
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.
1392
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
TStandardCodePageEnum = (scpAnsi,scpConsoleInput,scpConsoleOutput
,
scpFileSystemSingleByte)
Value Explanation
scpAnsi Ansi codepage (CP_ACP)
scpConsoleInput Console input codepage
scpConsoleOutput Console output codepage
scpFileSystemSingleByte File system single byte codepage.
TStringMessageTable = record
public
count : LongInt;
msgstrtable
: Array[0..0] of TMsgStrTable;
end
Record used to describe the string messages handled by a class. It consists of a count, followed by
an array of TMsgStrTable (1389) records.
TSystemCodePage = Word
1393
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
TSystemCodePage is a type used to indicate code pages. It should be treated as an opaque type.
TTextBuf = TextBuf
TTextLineBreakStyle = (tlbsLF,tlbsCRLF,tlbsCR)
Value Explanation
tlbsCR Carriage-return (#13, Mac-OS style)
tlbsCRLF Carriage-return, line-feed (#13#30, Windows style)
tlbsLF Line-feed only (#10, Unix style)
TThreadID = PtrUInt
This is an opaque type, it can differ from operating system to operating system.
TThreadManager = record
public
InitManager : function : Boolean
;
DoneManager : function : Boolean;
BeginThread : TBeginThreadHandler
;
EndThread : TEndThreadHandler;
SuspendThread : TThreadHandler
;
ResumeThread : TThreadHandler;
KillThread : TThreadHandler;
CloseThread : TThreadHandler;
ThreadSwitch : TThreadSwitchHandler
;
WaitForThreadTerminate : TWaitForThreadTerminateHandler;
1394
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
ThreadSetPriority
: TThreadSetPriorityHandler;
ThreadGetPriority : TThreadGetPriorityHandler
;
GetCurrentThreadId : TGetCurrentThreadIdHandler;
SetThreadDebugNameA
: TThreadSetThreadDebugNameHandlerA;
SetThreadDebugNameU : TThreadSetThreadDebugNameHandlerU
;
InitCriticalSection : TCriticalSectionHandler;
DoneCriticalSection
: TCriticalSectionHandler;
EnterCriticalSection : TCriticalSectionHandler
;
TryEnterCriticalSection : TCriticalSectionHandlerTryEnter;
LeaveCriticalSection
: TCriticalSectionHandler;
InitThreadVar : TInitThreadVarHandler
;
RelocateThreadVar : TRelocateThreadVarHandler;
AllocateThreadVars
: TAllocateThreadVarsHandler;
ReleaseThreadVars : TReleaseThreadVarsHandler
;
BasicEventCreate : TBasicEventCreateHandler;
BasicEventDestroy
: TBasicEventHandler;
BasicEventResetEvent : TBasicEventHandler
;
BasicEventSetEvent : TBasicEventHandler;
BasiceventWaitFOr
: TBasicEventWaitForHandler;
RTLEventCreate : TRTLCreateEventHandler
;
RTLEventDestroy : TRTLEventHandler;
RTLEventSetEvent : TRTLEventHandler
;
RTLEventResetEvent : TRTLEventHandler;
RTLEventWaitFor : TRTLEventHandler
;
RTLEventWaitForTimeout : TRTLEventHandlerTimeout;
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 (1536)
procedure, and the current thread manager can be retrieved with the GetThreadManager (1472) pro-
cedure.
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 programmer’s guide.
1395
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
TThreadSwitchHandler = procedure
TTime = TDateTime
TTime is defined for Delphi compatibility. This type is deprecated, use TDateTime (1381) instead.
TTypeKind = (tkUnknown,tkInteger,tkChar,tkEnumeration,tkFloat,tkSet
,
tkMethod,tkSString,tkLString,tkAString,tkWString,tkVariant
,
tkArray,tkRecord,tkInterface,tkClass,tkObject,tkWChar
,
tkBool,tkInt64,tkQWord,tkDynArray,tkInterfaceRaw,tkProcVar
,
tkUString,tkUChar,tkHelper,tkFile,tkClassRef,tkPointer
)
1396
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Value Explanation
tkArray Array property.
tkAString Ansistring property.
tkBool Boolean property.
tkChar Char property.
tkClass Class property.
tkClassRef Class reference type
tkDynArray Dynamic array property.
tkEnumeration Enumeration type property.
tkFile File type
tkFloat Float property.
tkHelper Helper type
tkInt64 Int64 property.
tkInteger Integer property.
tkInterface Interface property.
tkInterfaceRaw Raw interface property.
tkLString Longstring property.
tkMethod Method property.
tkObject Object property.
tkPointer Generic pointer type
tkProcVar Procedural variable
tkQWord QWord property.
tkRecord Record property.
tkSet Set property.
tkSString Shortstring property.
tkUChar Unicode character
tkUnknown Unknown property type.
tkUString Unicode string
tkVariant Variant property.
tkWChar Widechar property.
tkWString Widestring property.
TUnicodeStringManager = record
public
Wide2AnsiMoveProc : procedure
(source: PWideChar; var dest: RawByteString;
cp: TSystemCodePage
; len: SizeInt);
Ansi2WideMoveProc : procedure(source: PChar; cp
: TSystemCodePage; var dest: widestring;
len: SizeInt
);
UpperWideStringProc : function(const S: WideString) : WideString
;
1397
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
1398
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
TUnloadLibraryHandler is the type for the UnloadLibrary call using ansistring names in
the TDynLibsManager (1382) dynamic library loading manager.
tvararray = record
public
dimcount : Word;
flags : Word;
elementsize
: LongInt;
lockcount : LongInt;
data : pointer;
bounds : tvararrayboundarray
;
end
tvararray is a record describing a variant array. It contains some general data, followed by a num-
ber of TVarArrayBound (1399) records equal to the number of dimensions in the array (dimcoun).
tvararraybound = record
public
elementcount : LongInt;
lowbound
: LongInt;
end
1399
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
public
vsmallint :
SmallInt;
);
varinteger: (
public
vinteger : LongInt;
);
varsingle
: (
public
vsingle : single;
);
vardouble: (
public
vdouble :
Double;
);
vardate: (
public
vdate : TDateTime;
);
varcurrency
: (
public
vcurrency : currency;
);
varolestr: (
public
volestr
: PWideChar;
);
vardispatch: (
public
vdispatch : pointer;
);
varerror
: (
public
verror : HRESULT;
);
varboolean: (
public
vboolean
: wordbool;
);
varunknown: (
public
vunknown : pointer;
);
varustring
: (
public
vustring : pointer;
1400
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
);
varshortint: (
public
vshortint
: ShortInt;
);
varbyte: (
public
vbyte : Byte;
);
varword: (
public
vword : Word;
);
varlongword: (
public
vlongword : DWord;
);
varint64: (
public
vint64 : Int64;
);
varqword: (
public
vqword
: QWord;
);
varword64: (
public
vword64 : QWord;
);
varstring:
(
public
vstring : pointer;
);
varany: (
public
vany : pointer
;
);
vararray: (
public
varray : pvararray;
);
varbyref: (
public
vpointer : pointer;
);
varrecord: (
public
vrecord : pointer
;
precinfo : pointer;
1401
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
);
);
1: (
public
vlongs : Array[0..2] of
LongInt;
);
);
1: (
public
vwords : Array[0..6] of Word;
);
2:
(
public
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
public
vartoint : function(const v: variant
) : LongInt;
vartoint64 : function(const v: variant) : Int64;
vartoword64 : function(const v: variant) : QWord;
vartobool : function
(const v: variant) : Boolean;
vartoreal : function(const v: variant
) : extended;
vartotdatetime : function(const v: variant) : TDateTime
;
vartocurr : function(const v: variant) : currency;
vartopstr
: procedure(var s; const v: variant);
vartolstr : procedure(var
s: ansistring; const v: variant);
vartowstr : procedure(var s:
widestring; const v: variant);
vartointf : procedure(var intf:
IInterface; const v: variant);
vartodisp : procedure(var disp:
IDispatch; const v: variant);
vartodynarray : procedure(var dynarr
: pointer; const v: variant; typeinfo: pointer);
varfrombool : procedure
(var dest: variant; const source: Boolean);
varfromint : procedure
(var dest: variant; const source: LongInt;
const Range
: LongInt);
varfromint64 : procedure(var dest: variant; const source
1402
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
: Int64);
varfromword64 : procedure(var dest: variant; const source
: QWord);
varfromreal : procedure(var dest: variant; const source
: extended);
varfromtdatetime : procedure(var dest: Variant; const
source: TDateTime);
varfromcurr : procedure(var dest: Variant;
const source: Currency);
varfrompstr : procedure(var dest: variant
; const source: ShortString);
varfromlstr : procedure(var dest:
variant; const source: ansistring);
varfromwstr : procedure(var
dest: variant; const source: WideString);
varfromintf : procedure
(var dest: variant; const source: IInterface);
varfromdisp : procedure
(var dest: variant; const source: IDispatch);
varfromdynarray :
procedure(var dest: variant; const source: pointer; typeinfo: pointer
);
olevarfrompstr : procedure(var dest: olevariant; const source
: shortstring);
olevarfromlstr : procedure(var dest: olevariant
; const source: ansistring);
olevarfromvar : procedure(var dest
: olevariant; const source: variant);
olevarfromint : procedure
(var dest: olevariant; const source: Int64;
const range
: ShortInt);
varop : procedure(var left: variant; const right: variant
; opcode: tvarop);
cmpop : function(const left: variant; const right
: variant;
const opcode: tvarop) : Boolean;
varneg
: procedure(var v: variant);
varnot : procedure(var v: variant)
;
varinit : procedure(var v: variant);
varclear : procedure(var
v: variant);
varaddref : procedure(var v: variant);
varcopy
: procedure(var dest: variant; const source: variant);
varcast
: procedure(var dest: variant; const source: variant; vartype: LongInt
);
varcastole : procedure(var dest: variant; const source: variant
; vartype: LongInt);
dispinvoke : procedure(dest: pvardata; var
source: tvardata; calldesc: pcalldesc;
1403
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
params: pointer
);
vararrayredim : procedure(var a: variant; highbound: SizeInt
);
vararrayget : function(const a: variant; indexcount: SizeInt
; indices: PLongint)
: variant;
vararrayput : procedure
(var a: variant; const value: variant; indexcount: SizeInt;
indices: PLongint);
writevariant : function(var t: text
; const v: variant; width: LongInt) : Pointer;
write0Variant : function
(var t: text; const v: Variant) : Pointer;
end
tvarop = (opadd,opsubtract,opmultiply,opdivide,opintdivide,opmodulus
,
opshiftleft,opshiftright,opand,opor,opxor,opcompare,opnegate
,
opnot,opcmpeq,opcmpne,opcmplt,opcmple,opcmpgt,opcmpge
,oppower)
Value Explanation
opadd Variant operation: Addition.
opand Variant operation: Binary AND operation
opcmpeq Variant operation: Compare equal.
opcmpge Variant operation: Compare larger than or equal
opcmpgt Variant operation: Compare larger than
opcmple Variant operation: Compare less than or equal to
opcmplt Variant operation: Compare less than.
opcmpne Variant operation: Compare not equal
opcompare Variant operation: Compare
opdivide Variant operation: division
opintdivide Variant operation: integer divide
opmodulus Variant operation: Modulus
opmultiply Variant operation: multiplication
opnegate Variant operation: negation.
opnot Variant operation: Binary NOT operation.
opor Variant operation: Binary OR operation
oppower Variant operation: Power
opshiftleft Variant operation: Shift left
opshiftright Variant operation: Shift right
opsubtract Variant operation: Subtraction
opxor Variant operation: binary XOR operation.
1404
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
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: (
public
VInteger
: LongInt;
);
vtBoolean: (
public
VBoolean : Boolean;
);
vtChar
: (
public
VChar : Char;
);
vtWideChar: (
public
VWideChar : WideChar
;
);
vtExtended: (
public
VExtended : PExtended;
);
vtString: (
public
VString : PShortString;
);
vtPointer: (
public
VPointer
: Pointer;
);
vtPChar: (
public
VPChar : PAnsiChar;
);
vtObject
: (
public
VObject : TObject;
);
vtClass: (
public
VClass : TClass
;
);
vtPWideChar: (
public
VPWideChar : PWideChar;
1405
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
);
vtAnsiString
: (
public
VAnsiString : Pointer;
);
vtCurrency: (
public
VCurrency
: PCurrency;
);
vtVariant: (
public
VVariant : PVariant;
);
vtInterface
: (
public
VInterface : Pointer;
);
vtWideString: (
public
VWideString
: Pointer;
);
vtInt64: (
public
VInt64 : PInt64;
);
vtUnicodeString
: (
public
VUnicodeString : Pointer;
);
vtQWord: (
public
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
1406
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
TWideStringManager = TUnicodeStringManager
UCS2Char = WideChar
UCS4Char =
UInt16 = Word
UInt32 = Cardinal
UInt64 = QWord
UInt8 = Byte
UIntPtr = PtrUInt
Alias for PtrUInt (1375) type for compatibility with later Delphi versions.
UnicodeChar = WideChar
UnicodeString = UnicodeString
UnicodeString is a string of WideChars. The main difference with WideString is that unicode-
string is reference counted, and WideString is not reference counted on Windows.
UTF8Char = AnsiChar
1407
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
UTF8String = ansistring
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 = Int64
Integer with the same size as the return code of the Val (1561) function.
ValSInt = LongInt
Integer with the same size as the return code of the Val (1561) function.
ValUInt = QWord
Integer with the same size as the return code of the Val (1561) function.
ValUInt = Cardinal
Integer with the same size as the return code of the Val (1561) function.
WChar = WideChar
WideChar = #$0000..#$FFFF
This type is the base unit for all two byte character types, like UnicodeString (1407) and WideString
(1408)
WideString = WideString
Word = 0..65535
75.10.3 Variables
argc : LongInt;external 'operatingsystem_parameter_argc'
argc contains the number of command-line arguments passed to the program by the OS. It is not
available on all systems.
1408
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
argv contains a pointer to a nil-terminated array of null-terminated strings, containing the command-
line arguments passed to the program by the OS. It is not available on all systems.
DefaultFileSystemCodePage : TSystemCodePage
DefaultFileSystemCodePage determines the code page to which file/path names are trans-
lated 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 initial 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 interme-
diate operations).
• OS X and iOS: UTF-8 (as defined by Apple)
• Unix (excluding OS X and iOS): equals DefaultSystemCodePage (1410). 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 (1410).
The value of this variable may be changed using the SetMultiByteFileSystemCodePage (1532) pro-
cedure.
Remark The Unix/OS X/iOS settings only apply in case the cwstring widestring manager is installed, oth-
erwise DefaultFileSystemCodePage will have the same value as DefaultSystemCodePage
after program startup.
DefaultRTLFileSystemCodePage : TSystemCodePage
1409
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
The value of this variable can be set using the SetMultiByteRTLFileSystemCodePage (1533) call.
DefaultSystemCodePage : TSystemCodePage
• 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.
DefaultUnicodeCodePage : TSystemCodePage
DefaultUnicodeCodePage is the unicode code page for a new unicode string. On most plat-
forms, this is CP_UTF16 (1338).
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.
envp contains a pointer to a nil-terminated array of null-terminated strings, containing the envi-
ronment variables passed to the program by the OS. It is not available on all systems.
ErrOutput : Text
1410
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
InOutRes : Word
InOutRes contains the result of the last I/O operation using one of the file I/O routines. When I/O
checks are enabled, this variable is checked and if it is nonzero, a runtime error is raised.
Although it is a variable for historical reasons, it is not meant to be written to by user code, outside
of routines that implement some form of file I/O.
Input : Text
mem is an array of bytes, representing the computer’s memory. This array is available only when
compiling for the Dos Go32V2 target. It’s use is not recommended, and it is not even available on
other platforms.
memw is an array of longints, representing the computer’s memory as 32-bit signed integers. This
array is available only when compiling for the Dos Go32V2 target. It’s use is not recommended, and
it is not even available on other platforms.
memw is an array of words, representing the computer’s memory as 2-byte words. This array is
available only when compiling for the Dos Go32V2 target It’s use is not recommended, and it is not
even available on other platforms.
1411
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Output : Text
RandSeed : Cardinal
ReturnNilIfGrowHeapFails : Boolean
softfloat_exception_flags : TFPUExceptionMask
softfloat_exception_mask : TFPUExceptionMask
softfloat_rounding_mode : TFPURoundingMode
StackBottom : Pointer
StackLength : SizeUInt
StdErr : Text
StdOut : Text
1412
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
ThreadID : TThreadID
UTF8CompareLocale : TSystemCodePage
UTF8CompareLocale is currently present for Delphi compatibility only, it is not used in FPC
code.
widestringmanager : TUnicodeStringManager
WriteErrorsToStdErr can be set to True to write error messages (run-time errors, exceptions)
to StdErr instead of to standard output. This is the default behaviour. When set to False, error
message will be written to standard output.
Errors: None.
See also: Round (1523)
Listing: ./refex/ex1.pp
Program Example1 ;
Var
r : real ;
i : integer ;
begin
r : = abs ( − 1 . 0 ) ; { r :=1.0 }
i : = abs ( −21); { i :=21 }
end .
1413
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.2 AbstractError
Synopsis: Generate an abstract error.
75.11.3 AcquireExceptionObject
Synopsis: Obtain a reference to the current exception object
75.11.4 add(variant,variant):variant
Synopsis: Implement addition (+) operation on variants.
Declaration: operator +(const op1: variant; const op2: variant) : variant
Visibility: default
Description: The implementation of the addition + operation is delegated to the variant manager with operation
opadd.
Errors: Execution of this operator may result in an exception if no variant manager is installed or if the types
of the operand are not suitable for the operation.
See also: operator -(variant, variant): variant (1331)
75.11.5 AddExitProc
Synopsis: Add an exit procedure to the exit procedure chain.
Declaration: procedure AddExitProc(Proc: TProcedure)
Visibility: default
1414
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Description: AddExitProc adds Proc to the exit procedure chain. At program exit, all procedures added in
this way will be called in reverse order.
Errors: None.
See also: ExitProc (1340)
75.11.6 Addr
Synopsis: Return address of a variable
Declaration: function Addr(X: TAnytype) : Pointer
Visibility: default
Description: Addr returns a pointer to its argument, which can be any type, or a function or procedure name. The
returned pointer isn’t typed. The same result can be obtained by the @ operator, which can return a
typed pointer (see the programmer’s guide).
Errors: None
Listing: ./refex/ex2.pp
Program Example2 ;
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 points to i t s e l f }
p : = Addr ( I ) ; { P points to I }
p : = Addr ( Zero ) ; { P p o i n t s t o ' Zero ' }
end .
75.11.7 Align
Synopsis: Return aligned version of an address
Errors: None.
1415
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.8 AllocMem
Synopsis: Allocate and clear memory.
Declaration: function AllocMem(Size: PtrUInt) : pointer
Visibility: default
Description: AllocMem calls getmem GetMem (1469), and clears the allocated memory, i.e. the allocated mem-
ory is filled with Size zero bytes.
See also: GetMem (1469)
75.11.9 AnsiToUtf8
Synopsis: Convert ansi string to UTF-8 string
Declaration: function AnsiToUtf8(const s: RawByteString) : RawByteString
Visibility: default
Description: AnsiToUtf8 converts the ansistring S to a UTF-8 format, that is, it converts the string from what-
ever codepage is currently in use, to UTF-8.
The current codepage is fetched from the system, if internationalization support is enabled. It can be
UTF-8, in which case the function simply returns S.
Errors: None.
See also: Utf8toAnsi (1560)
75.11.10 Append
Synopsis: Open a file in append mode
Declaration: procedure Append(var t: Text)
Visibility: default
Description: Append opens an existing file in append mode. Any data written to F will be appended to the file.
Only text files can be opened in append mode. After a call to Append, the file F becomes write-only.
File sharing is not taken into account when calling Append.
Errors: If the file doesn’t exist when appending, a run-time error will be generated. This behaviour has
changed on Windows and Linux platforms, where in versions prior to 1.0.6, the file would be created
in append mode.
See also: Rewrite (1519), Close (1432), Reset (1518)
Listing: ./refex/ex3.pp
Program Example3 ;
Var f : t e x t ;
begin
Assign ( f , ' t e s t . t x t ' ) ;
Rewrite ( f ) ; { f i l e i s opened f o r w r i t e , and emptied }
1416
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.11 ArcTan
Synopsis: Calculate inverse tangent
Declaration: function ArcTan(d: ValReal) : ValReal
Visibility: default
Description: Arctan returns the Arctangent of X, which can be any Real type. The resulting angle is in radial
units.
Errors: None
See also: Sin (1538), Cos (1441)
Listing: ./refex/ex4.pp
Program Example4 ;
Var R : Real ;
begin
R: = ArcTan ( 0 ) ; { R:=0 }
R: = ArcTan ( 1 ) / p i ; { R: = 0 . 2 5 }
end .
75.11.12 ArrayStringToPPchar
Synopsis: Concert an array of string to an array of null-terminated strings
Declaration: function ArrayStringToPPchar(const S: Array of AnsiString;
reserveentries: LongInt) : PPChar
Visibility: default
Description: ArrayStringToPPchar creates an array of null-terminated strings that point to strings which
are the same as the strings in the array S. The function returns a pointer to this array. The array and
the strings it contains must be disposed of after being used, because it they are allocated on the heap.
The ReserveEntries parameter tells ArrayStringToPPchar to allocate room at the end of
the array for another ReserveEntries entries.
1417
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.13 Assert
Synopsis: Check validity of a given condition.
Declaration: procedure Assert(Expr: Boolean)
procedure Assert(Expr: Boolean; const Msg: string)
Visibility: default
Description: With assertions on, Assert tests if expr is false, and if so, aborts the application with a Runtime
error 227 and an optional error message in msg. If expr is true, program execution continues
normally. If assertions are not enabled at compile time, this routine does nothing, and no code is
generated for the Assert call. Enabling and disabling assertions at compile time is done via the
\$C or \$ASSERTIONS compiler switches. These are local switches. The default behavior of the
assert call can be changed by setting a new handler in the AssertErrorProc variable. Sysutils
overrides the default handler to raise a EAssertionFailed exception.
Errors: None.
See also: Halt (1475), Runerror (1525)
75.11.14 Assign
Synopsis: Assign a name to a file
Declaration: procedure Assign(out f: File; const Name: ShortString)
procedure Assign(out f: File; const p: PAnsiChar)
procedure Assign(out f: File; const c: AnsiChar)
procedure Assign(out f: File; const Name: UnicodeString)
procedure Assign(out f: File; const Name: RawByteString)
procedure Assign(out f: TypedFile; const Name: shortstring)
procedure Assign(out f: TypedFile; const p: PAnsiChar)
procedure Assign(out f: TypedFile; const c: AnsiChar)
procedure Assign(out f: TypedFile; const Name: unicodestring)
procedure Assign(out f: TypedFile; const Name: RawByteString)
procedure Assign(out t: Text; const s: shortstring)
procedure Assign(out t: Text; const p: PAnsiChar)
procedure Assign(out t: Text; const c: AnsiChar)
procedure Assign(out t: Text; const s: unicodestring)
procedure Assign(out t: Text; const s: RawByteString)
Visibility: default
Description: Assign assigns a name to F, which can be any file type. This call doesn’t open the file, it just
assigns a name to a file variable, and marks the file as closed.
Note that the filename (including path) can be only 255 characters long.
Errors: None.
See also: Reset (1518), Rewrite (1519), Append (1416)
Listing: ./refex/ex5.pp
Program Example5 ;
Var F : t e x t ;
1418
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
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(Comp):olevariant
Synopsis: Assign a comp-precision float to an ole-variant
Declaration: operator :=(const source: Comp) : olevariant
Visibility: default
75.11.16 assign(Comp):variant
Synopsis: Assign a comp-precision float to a variant
Declaration: operator :=(const source: Comp) : variant
Visibility: default
Description: The resulting variant is a double-precision value.
75.11.17 assign(extended):olevariant
Synopsis: Assign an extended-precision float to an ole-variant
Declaration: operator :=(const source: extended) : olevariant
Visibility: default
75.11.18 assign(extended):variant
Synopsis: Assign an extended-precision float to a variant
Declaration: operator :=(const source: extended) : variant
Visibility: default
Description: The resulting variant is a double-precision value
75.11.19 assign(olevariant):Comp
Synopsis: Assign an ole- variant to a comp-precision float
Declaration: operator :=(const source: olevariant) : Comp
Visibility: default
1419
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.20 assign(olevariant):extended
Synopsis: Assign an ole- variant to an extended-precision float
Declaration: operator :=(const source: olevariant) : extended
Visibility: default
75.11.21 assign(olevariant):Real
Synopsis: Assign an ole- variant to a real-precision float
Declaration: operator :=(const source: olevariant) : Real
Visibility: default
75.11.22 assign(olevariant):single
Synopsis: Assign an ole- variant to a single-precision float
Declaration: operator :=(const source: olevariant) : single
Visibility: default
75.11.23 assign(olevariant):UnicodeString
Synopsis: Assign an ole-variant to a unicode string
Declaration: operator :=(const source: olevariant) : UnicodeString
Visibility: default
75.11.24 assign(Real):olevariant
Synopsis: Assign a real-precision float to an ole-variant
Declaration: operator :=(const source: Real) : olevariant
Visibility: default
75.11.25 assign(Real):variant
Synopsis: Assign a real-precision float to a variant
Declaration: operator :=(const source: Real) : variant
Visibility: default
Description: The resulting variant is a double-precision value.
75.11.26 assign(Real48):extended
Synopsis:
Declaration: operator :=(b: Real48) : extended
Visibility: default
1420
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.27 assign(single):olevariant
Synopsis: Assign a single-precision float to an ole-variant
75.11.28 assign(single):variant
Synopsis: Assign a single-precision float to a variant
75.11.29 assign(UCS4String):variant
Synopsis: Assign UCS4String to a variant, performing the necessary conversions
Declaration: operator :=(const source: UCS4String) : variant
Visibility: default
Description: The resulting variant is a widestring.
75.11.30 assign(UnicodeString):olevariant
Synopsis: Assign a unicodestring to an ole-variant
Declaration: operator :=(const source: UnicodeString) : olevariant
Visibility: default
75.11.31 assign(UnicodeString):variant
Synopsis: Assign UnicodeString to a variant, performing the necessary conversions
Declaration: operator :=(const source: UnicodeString) : variant
Visibility: default
75.11.32 assign(UTF8String):variant
Synopsis: Assign an UTF-8 string to a variant, performing the necessary conversions
Declaration: operator :=(const source: UTF8String) : variant
Visibility: default
1421
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.33 assign(variant):Comp
Synopsis: Assign a variant to a comp-precision float
75.11.34 assign(variant):extended
Synopsis: Assign a variant to a extended-precision float
75.11.35 assign(variant):Real
Synopsis: Assign a variant to a real-precision float
75.11.36 assign(variant):single
Synopsis: Assign a variant to a single-precision float
75.11.37 assign(variant):unicodestring
Synopsis: Assign a variant to a unicodestring
Declaration: operator :=(const source: variant) : unicodestring
Visibility: default
75.11.38 assign(variant):UTF8String
Synopsis: Assign a variant to an UTF8String
Declaration: operator :=(const source: variant) : UTF8String
Visibility: default
75.11.39 Assigned
Synopsis: Check if a pointer is valid
Declaration: function Assigned(P: Pointer) : Boolean
Visibility: default
1422
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Description: Assigned returns True if P is non-nil and returns False of P is nil. The main use of As-
signed is that Procedural variables, method variables and class-type variables also can be passed to
Assigned.
Errors: None
Listing: ./refex/ex96.pp
Program Example96 ;
Var P : P o i n t e r ;
begin
I f Not Assigned (P) then
W r i t e l n ( ' P o i n t e r i s i n i t i a l l y NIL ' ) ;
P: =@P;
I f Not Assigned (P) then
Writeln ( ' I n t e r n a l inconsistency ' )
else
W r i t e l n ( ' A l l i s w e l l i n FPC ' )
end .
75.11.40 BasicEventCreate
Synopsis: Obsolete. Don’t use
75.11.41 BasicEventDestroy
Synopsis: Obsolete. Don’t use
Declaration: procedure BasicEventDestroy(state: PEventState)
Visibility: default
Description: basiceventdestroy is obsolete. Use RTLEventDestroy (1524) instead.
See also: RTLEventDestroy (1524)
1423
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.42 BasicEventResetEvent
Synopsis: Obsolete. Don’t use
75.11.43 BasicEventSetEvent
Synopsis: Obsolete. Don’t use
Declaration: procedure BasicEventSetEvent(state: PEventState)
Visibility: default
75.11.44 BasicEventWaitFor
Synopsis: Obsolete. Don’t use
75.11.45 BeginThread
Synopsis: Start a new thread.
Declaration: function BeginThread(sa: Pointer; stacksize: SizeUInt;
ThreadFunction: TThreadFunc; p: pointer;
creationFlags: DWord; var ThreadId: TThreadID)
: TThreadID
function BeginThread(ThreadFunction: TThreadFunc) : TThreadID
function BeginThread(ThreadFunction: TThreadFunc; p: pointer)
: TThreadID
function BeginThread(ThreadFunction: TThreadFunc; p: pointer;
var ThreadId: TThreadID) : TThreadID
function BeginThread(ThreadFunction: TThreadFunc; p: pointer;
var ThreadId: TThreadID; const stacksize: SizeUInt)
: TThreadID
Visibility: default
1424
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Description: BeginThread starts a new thread and executes ThreadFunction in the new thread. If P is
specified, then it is passed to ThreadFunction. If ThreadId is specified, it is filled with the
thread ID of the newly started thread. If StackSize is specified, it is set as the stack size for the
new thread. If none is specified, a default stack size of 4MiB is used.
The function returns the thread handle (or ID, on some other operating systems like Linux or OS/2)
on success, or 0 if an error occurred. Note that the thread ID and handle are the same on Unix
processes, and that the thread ID and thread handle are different on windows systems.
Errors: On error, the value "0" is returned.
See also: EndThread (1449)
75.11.46 BEtoN
Synopsis: Convert Big Endian-ordered integer to Native-ordered integer
Declaration: function BEtoN(const AValue: SmallInt) : SmallInt
function BEtoN(const AValue: Word) : Word
function BEtoN(const AValue: LongInt) : LongInt
function BEtoN(const AValue: DWord) : DWord
function BEtoN(const AValue: Int64) : Int64
function BEtoN(const AValue: 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 (1495), NtoBE (1504), NtoLE (1504)
75.11.47 BinStr
Synopsis: Convert integer to string with binary representation.
Declaration: function BinStr(Val: LongInt; cnt: Byte) : shortstring
function BinStr(Val: Int64; cnt: Byte) : shortstring
function BinStr(Val: QWord; cnt: Byte) : shortstring
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 (1542), Val (1561), HexStr (1476), OctStr (1504)
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 }
1425
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Var I : l o n g i n t ;
begin
For I :=8 to 20 do
W r i t e l n ( B i n S t r ( Value , I ) : 2 0 ) ;
end .
75.11.48 BlockRead
Synopsis: Read data from an untyped file into memory
Declaration: procedure BlockRead(var f: File; var Buf; count: Int64;
var Result: Int64)
procedure BlockRead(var f: File; var Buf; count: LongInt;
var Result: LongInt)
procedure BlockRead(var f: File; var Buf; count: Cardinal;
var Result: Cardinal)
procedure BlockRead(var f: File; var Buf; count: Word; var Result: Word)
procedure BlockRead(var f: File; var Buf; count: Word;
var Result: Integer)
procedure BlockRead(var f: File; var Buf; count: Int64)
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 (1519) or Reset (1518) 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 isn’t 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 (1427), Close (1432), Reset (1518), Assign (1418)
Listing: ./refex/ex6.pp
Program Example6 ;
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 ) ;
1426
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.49 BlockWrite
Synopsis: Write data from memory to an untyped file
Declaration: procedure BlockWrite(var f: File; const Buf; Count: Int64;
var Result: Int64)
procedure BlockWrite(var f: File; const Buf; Count: LongInt;
var Result: LongInt)
procedure BlockWrite(var f: File; const Buf; Count: Cardinal;
var Result: Cardinal)
procedure BlockWrite(var f: File; const Buf; Count: Word;
var Result: Word)
procedure BlockWrite(var f: File; const Buf; Count: Word;
var Result: Integer)
procedure BlockWrite(var f: File; const Buf; Count: 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 (1519) or Reset (1518) statement. If the records couldn’t 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 (1426), Close (1432), Rewrite (1519), Assign (1418)
75.11.50 Break
Synopsis: Exit current loop construct.
Declaration: procedure Break
Visibility: default
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 although Break is a compiler intrinsic (i.e. is treated specially) it is defined as a procedure
in the system unit, and hence can be redefined.
Errors: None.
See also: Continue (1438), Exit (1455)
Listing: ./refex/ex87.pp
1427
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Program Example87 ;
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 10 do
begin
I f I >5 Then
Break ;
Writeln ( i ) ;
end ;
end .
Listing: ./refex/ex121.pp
{
Example 121:
Continue , break and e x i t are system procedures .
They can be r e d e f i n e d
}
procedure continue ;
begin
W r i t e l n ( ' Continue ' ) ;
end ;
Procedure E x i t ;
begin
Writeln ( ' e x i t ' ) ;
end ;
Procedure Break ;
begin
W r i t e l n ( ' Break ' ) ;
end ;
begin
Repeat
1428
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Continue ;
Break ;
exit ;
U n t i l True ;
end .
75.11.51 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.
When the input is 0, the result is 255 (unsigned equivalent of -1).
See also: BsrByte (1430), BsfWord (1429), BsfDWord (1429), BsfQWord (1429)
75.11.52 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.
When the input is 0, the result is 255 (unsigned equivalent of -1).
See also: BsfByte (1429), BsfWord (1429), BsrDWord (1430), BsfQWord (1429)
75.11.53 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.
When the input is 0, the result is 255 (unsigned equivalent of -1).
See also: BsfByte (1429), BsfWord (1429), BsfDWord (1429), BsrQWord (1430)
75.11.54 BsfWord
Synopsis: Return the position of the rightmost set bit in a 16-bit value
Declaration: function BsfWord(const AValue: Word) : Cardinal
Visibility: default
1429
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
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.
When the input is 0, the result is 255 (unsigned equivalent of -1).
See also: BsfByte (1429), BsrWord (1431), BsfDWord (1429), BsfQWord (1429)
75.11.55 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.
When the input is 0, the result is 255 (unsigned equivalent of -1).
See also: BsfByte (1429), BsrWord (1431), BsrDWord (1430), BsrQWord (1430)
75.11.56 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 posi-
tion 0, and returns the index of the first set bit. The position is measured from the 0-th, rightmost
bit.
When the input is 0, the result is 255 (unsigned equivalent of -1).
See also: BsrByte (1430), BsrWord (1431), BsfDWord (1429), BsrQWord (1430)
75.11.57 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 posi-
tion 0, and returns the index of the first set bit. The position is measured from the 0-th, rightmost
bit.
When the input is 0, the result is 255 (unsigned equivalent of -1).
See also: BsfByte (1429), BsfWord (1429), BsfDWord (1429), BsrQWord (1430)
1430
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.58 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.
When the input is 0, the result is 255 (unsigned equivalent of -1).
See also: BsrByte (1430), BsfWord (1429), BsrDWord (1430), BsrQWord (1430)
75.11.59 CaptureBacktrace
Synopsis: Return stack trace
Declaration: function CaptureBacktrace(skipframes: SizeInt; count: SizeInt;
frames: PCodePointer) : SizeInt
Visibility: default
Description: CaptureBacktrace will fill the array pointed to by frames with the addresses of a backtrace.
It will skip skipframes frames, and will write at most count addresses. Frames must point to
enough memory to hold the stacktrace, which is count*sizeof(codepointer) bytes.
See also: Get_pc_addr (1475), get_caller_stackinfo (1474), get_caller_addr (1473), get_caller_frame (1474)
75.11.60 ChDir
Synopsis: Change current working directory.
Declaration: procedure ChDir(const s: shortstring); Overload
procedure ChDir(const s: RawByteString); Overload
procedure ChDir(const s: unicodestring); Overload
Visibility: default
Description: Chdir changes the working directory of the process to S.
Errors: Depending on the state of the {$I} switch, a runtime error can be generated if there is an error. In
the {$I-} state, use IOResult to check for errors.
See also: Mkdir (1501), Rmdir (1520)
Listing: ./refex/ex7.pp
Program Example7 ;
begin
{ $I−}
ChDir ( ParamStr ( 1 ) ) ;
i f I O r e s u l t <>0 then
W r i t e l n ( ' Cannot change t o d i r e c t o r y : ' , paramstr ( 1 ) ) ;
end .
1431
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.61 Chr
Synopsis: Convert byte value to character value
Declaration: function Chr(b: Byte) : Char
Visibility: default
Description: Chr returns the character which has ASCII value X.
Historical note:
Originally, Pascal did not have typecasts and chr was a necessary function in order to do certain
operations on ASCII values of characters. With the arrival of typecasting a generic approach became
possible, making chr mostly obsolete. However, chr is not considered deprecated and remains in
wide use today.
Errors: None.
See also: Ord (1506), Str (1542)
Listing: ./refex/ex8.pp
Program Example8 ;
begin
Write ( chr ( 1 0 ) , chr ( 1 3 ) ) ; { The same e f f e c t as W r i t e l n ; }
end .
75.11.62 Close
Synopsis: Close a file
Declaration: procedure Close(var f: File)
procedure Close(var t: Text)
Visibility: default
Description: Close flushes the buffer of the file F and closes F. After a call to Close, data can no longer be
read from or written to F. To reopen a file closed with Close, it isn’t necessary to assign the file
again. A call to Reset (1518) or Rewrite (1519) is sufficient.
Errors: Depending on the state of the {$I} switch, a runtime error can be generated if there is an error. In
the {$I-} state, use IOResult to check for errors.
See also: Assign (1418), Reset (1518), Rewrite (1519), Flush (1464)
Listing: ./refex/ex9.pp
Program Example9 ;
Var F : t e x t ;
begin
Assign ( f , ' Test . t x t ' ) ;
ReWrite ( F ) ;
1432
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.63 CloseThread
Synopsis: Close a thread and free up resources used by the thread
Declaration: function CloseThread(threadHandle: TThreadID) : DWord
Visibility: default
Description: CloseThread must be called on any thread started with BeginThread (1424). It must be called
after the thread has ended (either by exiting the thread function or after calling EndThread (1449)).
Errors: If no threadmanager is installed, an exception may be raised or runtime error 232 may occur if no
exceptions are used.
See also: BeginThread (1424), EndThread (1449)
75.11.64 CompareByte
Synopsis: Compare 2 memory buffers byte per byte
Declaration: function CompareByte(const buf1; const buf2; len: SizeInt) : SizeInt
Visibility: default
Description: CompareByte compares two memory regions buf1,buf2 on a byte-per-byte basis for a total of
len bytes.
The function returns one of the following values:
less than 0if buf1 and buf2 contain different bytes in the 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 (1434), CompareChar0 (1435), CompareWord (1437), CompareDWord (1436)
Listing: ./refex/ex99.pp
Program Example99 ;
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 ;
1433
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
I : longint ;
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.65 CompareChar
Synopsis: compare 2 memory buffers character per character
Declaration: function CompareChar(const buf1; const buf2; len: SizeInt) : SizeInt
Visibility: default
Description: CompareChar compares two memory regions buf1,buf2 on a character-per-character basis for
a total of len characters.
The CompareChar0 variant compares len bytes, or until a zero character is found.
The function returns one of the following values:
-1if buf1 and buf2 contain different characters in the first len positions, and the first such char-
acter is smaller in buf1 than the character at the same position in buf2.
0if the first len characters in buf1 and buf2 are equal.
1if buf1 and buf2 contain different characters in the first len positions, and the first such character
is larger in buf1 than the character at the same position in buf2.
Errors: None.
See also: CompareByte (1433), CompareChar0 (1435), CompareWord (1437), CompareDWord (1436)
Listing: ./refex/ex100.pp
Program Example100 ;
1434
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Const
ArraySize = 100;
H a l f A r r a y S i z e = A r r a y S i z e Div 2 ;
Var
Buf1 , Buf2 : Array [ 1 . . A r r a y S i z e ] of char ;
I : longint ;
Begin
Write ( ' F i r s t ' , Len , ' c h a r a c t e r s are ' ) ;
i f CompareChar ( Buf1 , Buf2 , Len)<>0 then
Write ( 'NOT ' ) ;
W r i t e l n ( ' equal ' ) ;
end ;
Begin
Write ( ' F i r s t ' , Len , ' non−n u l l c h a r a c t e r s are ' ) ;
i f CompareChar0 ( Buf1 , Buf2 , Len)<>0 then
Write ( 'NOT ' ) ;
W r i t e l n ( ' equal ' ) ;
end ;
begin
For I :=1 to A r r a y S i z e do
begin
Buf1 [ i ] : = chr ( I ) ;
I f I <= H a l f A r r a y S i z e Then
Buf2 [ I ] : = chr ( I )
else
Buf2 [ i ] : = chr ( H a l f A r r a y S i z e −I ) ;
end ;
CheckPos ( H a l f A r r a y S i z e div 2 ) ;
CheckPos ( H a l f A r r a y S i z e ) ;
CheckPos ( H a l f A r r a y S i z e + 1 ) ;
CheckPos ( H a l f A r r a y S i z e + H a l f A r r a y S i z e Div 2 ) ;
For I :=1 to 4 do
begin
buf1 [ Random( A r r a y S i z e ) + 1 ] : = Chr ( 0 ) ;
buf2 [ Random( A r r a y S i z e ) + 1 ] : = Chr ( 0 ) ;
end ;
Randomize ;
CheckNullPos ( H a l f A r r a y S i z e div 2 ) ;
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.66 CompareChar0
Synopsis: Compare two buffers character by character till a null-character is reached.
Declaration: function CompareChar0(const buf1; const buf2; len: SizeInt) : SizeInt
Visibility: default
1435
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Description: CompareChar0 compares 2 buffers buf1 and buf2 for a maximum length of len or till a null
character is reached in either buffer. The result depends on the contents of the buffers:
< 0If buf1 contains a character less than the corresponding character in buf2.
0If both buffers are equal
> 0If buf1 contains a character greater than the corresponding character in buf2.
Errors: None.
See also: CompareByte (1433), CompareChar (1434), CompareDWord (1436), CompareWord (1437)
75.11.67 CompareDWord
Synopsis: Compare 2 memory buffers DWord per DWord
Declaration: function CompareDWord(const buf1; const buf2; len: SizeInt) : SizeInt
Visibility: default
Description: CompareDWord compares two memory regions buf1,buf2 on a DWord-per-DWord basis for a
total of len DWords. (A DWord is 4 bytes).
The function returns one of the following values:
-1if buf1 and buf2 contain different DWords in the first len DWords, and the first such DWord is
smaller in buf1 than the DWord at the same position in buf2.
0if the first len DWords in buf1 and buf2 are equal.
1if buf1 and buf2 contain different DWords in the first len DWords, and the first such DWord is
larger in buf1 than the DWord at the same position in buf2.
Errors: None.
See also: CompareChar (1434), CompareByte (1433), CompareWord (1437)
Listing: ./refex/ex101.pp
Program Example101 ;
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 ;
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 ;
1436
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
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.68 CompareWord
Synopsis: Compare 2 memory buffers word per word
Declaration: function CompareWord(const buf1; const buf2; len: SizeInt) : SizeInt
Visibility: default
Description: CompareWord compares two memory regions buf1,buf2 on a Word-per-Word basis for a total
of len Words. (A Word is 2 bytes).
The function returns one of the following values:
-1if buf1 and buf2 contain different Words in the first len Words, and the first such Word is
smaller in buf1 than the Word at the same position in buf2.
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 (1434), CompareByte (1433), CompareDWord (1436)
Listing: ./refex/ex102.pp
Program Example102 ;
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 ;
Begin
Write ( ' F i r s t ' , Len , ' words are ' ) ;
1437
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
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.69 Concat
Synopsis: Append one string or dynamic array to another.
Declaration: function Concat(const S1: string; const S2: string; const S3: string;
const Sn: string) : string
Visibility: default
Description: Concat concatenates the strings S1,S2 etc. to one long string. The same operation can be per-
formed with the + operation.
Concat can also be used to concatenate 2 dynamic arrays of any type, resulting in a new dynamic
array containing all the elements of the dynamic arrays used in the call.
Errors: None.
See also: Copy (1440), Delete (1444), Insert (1487), Pos (1509), Length (1494)
Listing: ./refex/ex10.pp
Program Example10 ;
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.70 Continue
Synopsis: Continue with next loop cycle.
Declaration: procedure Continue
1438
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Visibility: default
Description: Continue jumps to the end of the current repetitive statement. The code between the Continue
call and the end of the repetitive statement is skipped. The condition of the repetitive statement is
then checked again.
This can be used with For, repeat and While statements.
Note that although Continue is a compiler intrinsic (i.e. is treated specially) it is defined as an
identifier in the system unit, hence it can be redefined.
Errors: None.
See also: Break (1427), Exit (1455)
Listing: ./refex/ex86.pp
Program Example86 ;
Var I : l o n g i n t ;
begin
I :=0;
While I <10 Do
begin
Inc ( I ) ;
I f I <5 Then
Continue ;
Writeln ( i ) ;
end ;
I :=0;
Repeat
Inc ( I ) ;
I f I <5 Then
Continue ;
Writeln ( i ) ;
U n t i l I >=10;
For I :=1 to 10 do
begin
I f I <5 Then
Continue ;
Writeln ( i ) ;
end ;
end .
Listing: ./refex/ex121.pp
{
Example 121:
Continue , break and e x i t are system procedures .
They can be r e d e f i n e d
}
procedure continue ;
begin
W r i t e l n ( ' Continue ' ) ;
end ;
1439
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Procedure E x i t ;
begin
Writeln ( ' e x i t ' ) ;
end ;
Procedure Break ;
begin
W r i t e l n ( ' Break ' ) ;
end ;
begin
Repeat
Continue ;
Break ;
exit ;
U n t i l True ;
end .
75.11.71 Copy
Synopsis: Copy part of a string.
Declaration: function Copy(S: AStringType; Index: SizeInt; Count: SizeInt) : string
function Copy(A: DynArrayType; Index: SizeInt; Count: SizeInt)
: DynArray
Visibility: default
Description: Copy returns a string which is a copy if the Count characters in S, starting at position Index. If
Count is larger than the length of the string S, the result is truncated. If Index is larger than the
length of the string S, then an empty string is returned. Index is 1-based.
For dynamic arrays, Copy returns a new dynamic array of the same type as the original one, and
copies Count elements from the old array, starting at the position in Index.
The Count argument can be omitted. In that case, the string (or dynamic array) is copied from the
position Index till the end of the string or array.
Errors: None.
See also: Delete (1444), Insert (1487), Pos (1509)
Listing: ./refex/ex11.pp
Program Example11 ;
Var S , T : S t r i n g ;
begin
T : = ' 1234567 ' ;
S: =Copy ( T , 1 , 2 ) ; { S: = ' 1 2 ' }
S: =Copy ( T , 4 , 2 ) ; { S: = ' 4 5 ' }
S: =Copy ( T , 4 , 8 ) ; { S: = ' 4 5 6 7 ' }
end .
1440
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.72 CopyArray
Synopsis: Copy managed-type elements in array
75.11.73 Cos
Synopsis: Calculate cosine of angle
Declaration: function Cos(d: ValReal) : ValReal
Visibility: default
Description: Cos returns the cosine of X, where X is an angle, in radians. If the absolute value of the argument is
larger than 26̂3, then the result is undefined.
Errors: None.
Listing: ./refex/ex12.pp
Program Example12 ;
Var R : Real ;
begin
R: =Cos ( Pi ) ; { R:=−1 }
R: =Cos ( Pi / 2 ) ; { R:=0 }
R: =Cos ( 0 ) ; { R:=1 }
end .
75.11.74 CSeg
Synopsis: Return code segment
Declaration: function CSeg : Word
Visibility: default
Description: CSeg returns the Code segment register. In Free Pascal, it returns always a zero, since Free Pascal
is a 32/64 bit compiler.
1441
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Errors: None.
See also: DSeg (1446), Seg (1529), Ofs (1505), Ptr (1511)
Listing: ./refex/ex13.pp
Program Example13 ;
var W : word ;
begin
W: =CSeg ; {W: = 0 , p r o v i d e d f o r c o m p a t i b i l i t y ,
FPC i s 32 b i t . }
end .
75.11.75 Dec
Synopsis: Decrease value of variable
Listing: ./refex/ex14.pp
Program Example14 ;
Var
I : Integer ;
L : Longint ;
W : Word ;
B : Byte ;
Si : ShortInt ;
begin
I :=1;
L:=2;
W: = 3 ;
B: = 4 ;
Si : = 5 ;
Dec ( i ) ; { i :=0 }
1442
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.76 Default
Synopsis: Return Default initialized value
Declaration: function Default(const T: AnyType) : AnyType
Visibility: default
Description: Default is a compiler intrinsic: it returns for every type T a default value. In essence, this is
a block of memory that is zeroed out. It can be used to correctly initialize any type, and more
importantly, a managed type. It also works using a generic type template.
This function cannot be used on any of the file types or complex types that contain a file type.
75.11.77 DefaultAnsi2UnicodeMove
Synopsis: Standard widestring manager callback
Declaration: procedure DefaultAnsi2UnicodeMove(source: PChar; cp: TSystemCodePage;
var dest: unicodestring; len: SizeInt)
Visibility: default
Description: DefaultAnsi2UnicodeMove is the standard callback used for the widestring manager when
an ansistring must be converted to a unicodestring. It simply copies over all characters from the
ansistring to the unicodestring, no conversion whatsoever is performed.
75.11.78 DefaultAnsi2WideMove
Synopsis: Standard implementation of Ansi to Widestring conversion routine
Declaration: procedure DefaultAnsi2WideMove(source: PChar; cp: TSystemCodePage;
var dest: widestring; len: SizeInt)
Visibility: default
Description: DefaultAnsi2WideMove simply copies each character of the null-terminated ansi-string Source
to the corresponding WideChar in Dest. At most Len characters will be copied.
Errors: None.
See also: DefaultUnicode2AnsiMove (1444)
1443
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.79 DefaultUnicode2AnsiMove
Synopsis: Standard widestring manager callback
Description: DefaultUnicode2AnsiMove is the standard callback used for the widestring manager when a
Unicode string must be converted to an ansistring. It replaces all words with value < 256 with their
value as ASCII code.
Errors: None.
75.11.80 Delete
Synopsis: Delete elements (characters) from a string or dynamic array.
Declaration: procedure Delete(var S: string; const Index: Integer;
const Count: Integer)
procedure Delete(var A: DynArrayType; const Index: Integer;
const Count: Integer)
Visibility: default
Description: Delete removes Count characters from string S, starting at position Index. Index is 1-based.
All characters after the deleted characters are shifted Count positions to the left, and the length of
the string is adjusted.
For dynamic arrays, Delete removes Count elements from the array A, starting at position Index.
Index is 0-based. All elements after the deleted elements are shifted Count positions to the left, and
the length of the array is adjusted.
If the sum of Index and Count exceeds the length of the string or array, Delete removes the end
of the string or array, starting at Index.
If Index is less than 1 or greater than the length of the string or array, or if Count is negative or
zero, Delete does nothing.
See also: Copy (1440), Pos (1509), Insert (1487)
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 .
1444
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.81 Dispose
Synopsis: Free dynamically allocated memory
Listing: ./refex/ex16.pp
Program Example16 ;
Type SS = S t r i n g [ 2 0 ] ;
AnObj = Object
I : integer ;
Constructor I n i t ;
Destructor Done ;
end ;
Var
P : ^SS ;
T : ^ AnObj ;
Constructor Anobj . I n i t ;
begin
W r i t e l n ( ' I n i t i a l i z i n g an i n s t a n c e o f AnObj ! ' ) ;
end ;
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 .
1445
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.82 divide(variant,variant):variant
Synopsis: Implement division (/) operation on variants.
Errors: Execution of this operator may result in an exception if no variant manager is installed or if the types
of the operand are not suitable for the operation.
See also: operator *(variant, variant): variant (1331)
75.11.83 DoneCriticalSection
Synopsis: Clean up a critical section.
Declaration: procedure DoneCriticalSection(var cs: TRTLCRITICALSECTION)
Visibility: default
Description: DoneCriticalsection cleans up the critical section CS. After a call to DoneCriticalsection,
the critical section can no longer be used with EnterCriticalsection (1450) or LeaveCriticalsection
(1493), unless it is again initialized with InitCriticalSection (1484)
See also: InitCriticalsection (1484), EnterCriticalsection (1450), LeaveCriticalsection (1493)
75.11.84 DoneThread
Synopsis: End the current thread
75.11.85 DSeg
Synopsis: Return data segment
Errors: None.
See also: CSeg (1441), Seg (1529), Ofs (1505), Ptr (1511)
1446
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Listing: ./refex/ex17.pp
Program Example17 ;
Var
W : Word ;
begin
W: =DSeg ; {W: = 0 , T h i s f u n c t i o n i s p r o v i d e d f o r c o m p a t i b i l i t y ,
FPC i s a 32 b i t c o m p i l e r . }
end .
75.11.86 DumpExceptionBacktrace
Synopsis: Create backtrace
Declaration: procedure DumpExceptionBacktrace(var f: text)
Visibility: default
Description: DumpExceptionBackTrace writes a backtrace of the current exception to the file f. If no
exception is currently being raised, nothing is written. As much frames as available are written. If
debug info is available, then file names and line numbers will be written as well.
Errors: No check is done to see whether f is opened for writing.
See also: dump_stack (1447)
75.11.87 Dump_Stack
Synopsis: Dump stack to the given text file.
Declaration: procedure Dump_Stack(var f: text; fp: pointer; addr: CodePointer)
procedure Dump_Stack(var f: text; skipframes: LongInt)
Visibility: default
Description: Dump_Stack prints a stack dump to the file f, with base frame pointer bp
Errors: The file f must be opened for writing or an error will occur.
See also: get_caller_addr (1473), get_caller_frame (1474), get_frame (1474)
75.11.88 DynArrayBounds
Synopsis: Return the bounds of the dynamic array
Declaration: function DynArrayBounds(a: Pointer; typeInfo: Pointer) : TBoundArray
Visibility: default
Description: DynArrayBounds returns the bounds of all the dimensions of the dynamic array a with type
information typeInfo.
The result is an array (zero-based) with the maximum valid index for each dimension in the array:
the lower bound is not present in the result, it is always zero.
See also: InitializeArray (1486), FinalizeArray (1462), CopyArray (1441), DynArraySize (1449), DynArray-
Clear (1448), DynArrayDim (1448)
1447
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.89 DynArrayClear
Synopsis: Clears a dynamic array
See also: InitializeArray (1486), FinalizeArray (1462), CopyArray (1441), DynArraySize (1449), DynArray-
Dim (1448), DynArrayBounds (1447)
75.11.90 DynArrayDim
Synopsis: Return the number of dimensions in a dynamic array
See also: InitializeArray (1486), FinalizeArray (1462), CopyArray (1441), DynArraySize (1449), DynArray-
Clear (1448), DynArrayBounds (1447)
75.11.91 DynArrayIndex
Synopsis: Return pointer to indicated element
Declaration: function DynArrayIndex(a: Pointer; const indices: Array of SizeInt;
typeInfo: Pointer) : Pointer
Visibility: default
Description: DynArrayIndex returns a pointer to the element indicated by indices in dynamic array a with
type information typinfo. The length of indices must equal the number of dimensions of the
array (as returned by DynArrayDim (1448)).
Errors: No bounds checking is performed, it is therefor possible to get an access violation if one of the
indexes is out of range.
See also: InitializeArray (1486), FinalizeArray (1462), CopyArray (1441), DynArraySize (1449), DynArray-
Clear (1448), DynArrayBounds (1447), DynArrayDim (1448), IsDynArrayRectangular (1492)
75.11.92 DynArraySetLength
Synopsis: Set the length of a dynamic array
Declaration: procedure DynArraySetLength(var a: Pointer; typeInfo: Pointer;
dimCnt: SizeInt; lengthVec: PSizeInt)
Visibility: default
1448
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Description: DynArraySetLength sets the length of the dynamic array a to the first dimCnt lengths speci-
fied in the array lengthVec. The dynamic array type is described in typeInfo which points to a
record of type TDynArrayTypeInfo (1381)
It should never be necessary to call this function directly, the standard SetLength (1531) function
should be used instead.
75.11.93 DynArraySize
Synopsis: Return length of dynamic array
See also: InitializeArray (1486), FinalizeArray (1462), CopyArray (1441), DynArrayClear (1448), DynAr-
rayDim (1448), DynArrayBounds (1447)
75.11.94 EmptyMethod
Synopsis: Empty method alias
Declaration: procedure EmptyMethod
Visibility: default
Description: Emptymethod is meant for the compiler only. It should not be used directly.
75.11.95 EndThread
Synopsis: End the current thread.
1449
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.96 EnterCriticalSection
Synopsis: Enter a critical section
EnterCriticalSection(Section);
Try
// Code to be protected goes here.
Finally
LeaveCriticalSection(Section);
end;
For performance reasons it is best to limit the code between the entering and leaving of a critical
section as short as possible.
See also: InitCriticalsection (1484), DoneCriticalsection (1446), LeaveCriticalsection (1493)
75.11.97 EnumResourceLanguages
Synopsis: Enumerate available languages for a resource of given type and name
Declaration: function EnumResourceLanguages(ModuleHandle: TFPResourceHMODULE;
ResourceType: PChar; ResourceName: PChar;
EnumFunc: EnumResLangProc; lParam: PtrInt)
: LongBool
Visibility: default
Description: EnumResourceLanguages enumerates the available languages for a resource of given ResourceName
and type ResourceType in the module ModuleHandle. For each language available, 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 (1451), EnumResourceNames (1451), EnumResourceLanguages (1450)
1450
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.98 EnumResourceNames
Synopsis: Enumerate available resource names for a specified resource type
Visibility: default
Description: EnumResourceNames enumerates the names of all resources of type ResourceType in the
module ModuleHandle. For each resource available it calls EnumFunc and passes it ModuleHandle,
the type of the resource ResourceType, the name of the resource, and lParam. It returns False
if no resources are available for the specified resource type and module, or True if there are re-
sources available.
Errors: None.
See also: EnumResourceTypes (1451), EnumResourceLanguages (1450)
75.11.99 EnumResourceTypes
Synopsis: Enumerate available resource types
Description: EnumResourceTypes enumerates the types of all resources in the module ModuleHandle. For
each resource available it calls EnumFunc and passes it ModuleHandle, the type of the resource,
and lParam. It returns False if no resources are available for the specified module, or True if
there are resources available.
Errors: None.
75.11.100 EOF
Synopsis: Check for end of file
Declaration: function EOF(var f: File) : Boolean
function EOF(var t: Text) : Boolean
function EOF : Boolean
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.
1451
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
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 (1452), Assign (1418), Reset (1518), Rewrite (1519)
Listing: ./refex/ex18.pp
Program Example18 ;
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.101 EOLn
Synopsis: Check for end of line
Declaration: function EOLn(var t: Text) : Boolean
function EOLn : Boolean
Visibility: default
Description: EoLn returns True if the file pointer has reached the end of a line, which is demarcated by a line-
feed character (ASCII value 10), or if the end of the file is reached. In all other cases EoLn returns
False. If no file F is specified, standard input is assumed. It can only be used on files of type Text.
Errors: None.
See also: Eof (1451), Assign (1418), Reset (1518), Rewrite (1519)
Listing: ./refex/ex19.pp
Program Example19 ;
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 non−empty 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 . }
1452
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.102 equal(variant,variant):Boolean
Synopsis: Implement = (equality) operation on variants.
Declaration: operator =(const op1: variant; const op2: variant) : Boolean
Visibility: default
Description: The implementation of the equality (=) operation is delegated to the variant manager with operation
opcmpeq.
Errors: Execution of this operator may result in an exception if no variant manager is installed or if the types
of the operand are not suitable for the operation.
See also: operator <(variant, variant): boolean (1331)
75.11.103 Erase
Synopsis: Delete a file from disk
Declaration: procedure Erase(var f: File)
procedure Erase(var t: Text)
Visibility: default
Description: Erase removes an unopened file from disk. The file should be assigned with Assign, but not
opened with Reset or Rewrite
Errors: Depending on the state of the {$I} switch, a runtime error can be generated if there is an error. In
the {$I-} state, use IOResult to check for errors.
See also: Assign (1418)
Listing: ./refex/ex20.pp
Program Example20 ;
Var F : Text ;
begin
{ Create a f i l e w i t h a l i n e o f t e x t i n i t }
Assign ( F , ' t e s t . t x t ' ) ;
Rewrite ( F ) ;
W r i t e l n ( F , ' Try and f i n d t h i s when I ' 'm f i n i s h e d ! ' ) ;
close ( f ) ;
{ Now remove t h e f i l e }
Erase ( f ) ;
end .
1453
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.104 Error
Synopsis: Generate run-time error
75.11.105 Exclude
Synopsis: Exclude element from a set if it is present.
Declaration: procedure Exclude(var S: TSetType; E: TSetElement)
Visibility: default
Description: Exclude removes E from the set S if it is included in the set. E should be of the same type as the
base type of the set S.
Thus, the two following statements do the same thing:
S:=S-[E];
Exclude(S,E);
Errors: If the type of the element E is not equal to the base type of the set S, the compiler will generate an
error.
Listing: ./refex/ex111.pp
program Example111 ;
Type
TEnumA = ( aOne , aTwo , aThree ) ;
TEnumAs = Set of TEnumA ;
Var
SA : TEnumAs ;
Procedure P r i n t S e t (S : TEnumAs ) ;
var
B : Boolean ;
begin
I f A i n S then
begin
I f B then
Write ( ' , ' ) ;
1454
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
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.106 Exit
Synopsis: Exit current subroutine.
Declaration: procedure &Exit(const X: TAnyType)
procedure &Exit
Visibility: default
Description: Exit exits the current subroutine, and returns control to the calling routine. If invoked in the main
program routine, exit stops the program. The optional argument X allows to specify a return value,
in the case Exit is invoked in a function. The function result will then be equal to X.
In Object Pascal or Delphi modes, if the Exit statement is surrounded by one or more Try ..
Finally constructs, the Finally blocks are executed, which means that if the finally blocks are
used to free resources, then these resources will also be freed when Exit is called.
Note that although Exit is a compiler intrinsic (i.e. is treated specially) it is defined as an identifier
in the system unit, hence it can be redefined.
Errors: None.
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 . }
1455
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
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 ;
{ 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 .
Listing: ./refex/ex121.pp
{
Example 121:
Continue , break and e x i t are system procedures .
They can be r e d e f i n e d
}
procedure continue ;
begin
W r i t e l n ( ' Continue ' ) ;
end ;
Procedure E x i t ;
begin
Writeln ( ' e x i t ' ) ;
end ;
Procedure Break ;
1456
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
begin
W r i t e l n ( ' Break ' ) ;
end ;
begin
Repeat
Continue ;
Break ;
exit ;
U n t i l True ;
end .
75.11.107 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 (1496)
Listing: ./refex/ex22.pp
Program Example22 ;
begin
W r i t e l n ( Exp ( 1 ) : 8 : 2 ) ; { Should p r i n t 2.72 }
end .
75.11.108 Fail
Synopsis: Fail a constructor
Declaration: procedure Fail
Visibility: default
Description: Fail can be used in a constructor for an object or class. It will exit the constructor at once, and the
memory allocated for the constructor is freed. This mean that for objects allocated with New (1503),
the resulting pointer is Nil and for classes, the object instance will be Nil.
See also: TypeOf (1555), New (1503), Initialize (1484), Finalize (1462)
Listing: ./refex/ex116.pp
program t e s t f a i l ;
{ $mode o b j f p c }
Type
1457
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
TMyClass = Class
Constructor Create ;
end ;
begin
Fail ;
end ;
var
M : TMyClass ;
begin
M: = TMyClass . Create ;
W r i t e l n ( 'M i s n i l : ' , Not Assigned (M) ) ;
end .
75.11.109 FilePos
Synopsis: Get position in file
Declaration: function FilePos(var f: File) : Int64
Visibility: default
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 (1518) isn’t 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 (1459)
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 100 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 . }
1458
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.110 FileSize
Synopsis: Size of file
Listing: ./refex/ex24.pp
Program Example24 ;
{ Program t o demonstrate t h e F i l e S i z e f u n c t i o n . }
Var F : F i l e Of b y t e ;
L : F i l e Of L o n g i n t ;
begin
Assign ( F , paramstr ( 1 ) ) ;
Reset ( F ) ;
Writeln ( ' F i l e size i n bytes : ' , FileSize (F ) ) ;
Close ( F ) ;
Assign ( L , paramstr ( 1 ) ) ;
Reset ( L ) ;
Writeln ( ' F i l e size i n Longints : ' , FileSize ( L ) ) ;
Close ( f ) ;
end .
75.11.111 FillByte
Synopsis: Fill memory region with 8-bit pattern
1459
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Visibility: default
Description: FillByte fills the memory starting at X with Count bytes with value equal to Value. This is
useful for quickly zeroing out a memory location. When the size of the memory location to be filled
out is a multiple of 2 bytes, it is better to use Fillword (1461), and if it is a multiple of 4 bytes it is
better to use FillDWord (1461), these routines are optimized for their respective sizes.
Errors: No checking on the size of X is done.
See also: Fillchar (1460), FillDWord (1461), Fillword (1461), Move (1501)
Listing: ./refex/ex103.pp
Program Example103 ;
{ Program t o demonstrate t h e F i l l B y t e f u n c t i o n . }
Var S : S t r i n g [ 1 0 ] ;
I : Byte ;
begin
For i :=10 downto 0 do
begin
{ F i l l S with i bytes }
F i l l B y t e ( S , SizeOf (S ) , 3 2 ) ;
{ Set Length }
SetLength ( S , I ) ;
Writeln ( s , ' * ' ) ;
end ;
end .
75.11.112 FillChar
Synopsis: Fill memory region with certain character
Declaration: procedure FillChar(var x; count: SizeInt; Value: Byte)
procedure FillChar(var x; count: SizeInt; Value: Boolean)
procedure FillChar(var x; count: SizeInt; Value: Char)
Visibility: default
Description: Fillchar fills the memory starting at X with Count bytes or characters with value equal to
Value.
Errors: No checking on the size of X is done.
See also: Fillword (1461), Move (1501), FillByte (1459), FillDWord (1461)
Listing: ./refex/ex25.pp
Program Example25 ;
{ Program t o demonstrate t h e F i l l C h a r f u n c t i o n . }
Var S : S t r i n g [ 1 0 ] ;
I : Byte ;
begin
For i :=10 downto 0 do
1460
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
begin
{ F i l l S w i t h i spaces }
F i l l C h a r ( S , SizeOf (S ) , ' ' ) ;
{ Set Length }
SetLength ( S , I ) ;
Writeln ( s , ' * ' ) ;
end ;
end .
75.11.113 FillDWord
Synopsis: Fill memory region with 32-bit pattern
Declaration: procedure FillDWord(var x; count: SizeInt; value: DWord)
Visibility: default
Description: Fillword fills the memory starting at X with Count DWords with value equal to Value. A
DWord is 4 bytes in size.
Errors: No checking on the size of X is done.
See also: FillByte (1459), Fillchar (1460), Fillword (1461), Move (1501)
Listing: ./refex/ex104.pp
Program Example104 ;
{ Program t o demonstrate t h e F i l l D W o r d f u n c t i o n . }
Const
A r r a y S i z e = 1000;
Var
S : Array [ 1 . . A r r a y S i z e ] of DWord ;
I : longint ;
begin
F i l l D W o r d ( S , ArraySize , 0 ) ;
For I :=1 to A r r a y S i z e do
I f S [ i ] < >0 then
W r i t e l n ( ' P o s i t i o n ' , i , ' n o t zeroed o u t ' ) ;
end .
75.11.114 FillWord
Synopsis: Fill memory region with 16-bit pattern
Declaration: procedure FillWord(var x; count: SizeInt; Value: Word)
Visibility: default
Description: Fillword fills the memory starting at X with Count words with value equal to Value. A word
is 2 bytes in size.
Errors: No checking on the size of X is done.
1461
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Listing: ./refex/ex76.pp
Program Example76 ;
{ Program t o demonstrate t h e F i l l W o r d f u n c t i o n . }
begin
{ Quick i n i t i a l i z a t i o n o f a r r a y W }
F i l l W o r d (W, 1 0 0 , 0 ) ;
end .
75.11.115 Finalize
Synopsis: Finalize (clean up) memory block using RTTI
Declaration: procedure Finalize(var T: TAnyType; ACount: SizeInt)
Visibility: default
Description: Finalize is a compiler intrinsic: it cleans up (finalizes) a memory area T for any kind of managed
variable. Finalizing means decreasing reference counts where necessary and generally zeroing out
the memory area. It performs the opposite operation of initialize (1484).
The optional ACount parameter can be used to finalize an array of values.
For examples, see initialize (1484).
See also: initialize (1484), Default (1443), TypeInfo (1554)
75.11.116 FinalizeArray
Synopsis: Finalize managed-type elements in array
Declaration: procedure FinalizeArray(p: Pointer; typeInfo: Pointer; count: SizeInt)
Visibility: default
Description: FinalizeArray dereferences and clears managed types in the array pointed to by p. For this, it
uses the type information of the elements as specified in typeinfo.
Under normal circumstances, this procedure should not be used, it is called automatically by the
compiler when an array-typed variable containing managed types goes out of scope.
See also: InitializeArray (1486), CopyArray (1441), DynArraySize (1449), DynArrayClear (1448), DynAr-
rayDim (1448), DynArrayBounds (1447)
75.11.117 FindResource
Synopsis: Locate a resource and return a handle to it.
Declaration: function FindResource(ModuleHandle: TFPResourceHMODULE;
ResourceName: PChar; ResourceType: PChar)
: TFPResourceHandle
function FindResource(ModuleHandle: TFPResourceHMODULE;
1462
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.118 FindResourceEx
Synopsis: Find a resource based on type, name, language
Declaration: function FindResourceEx(ModuleHandle: TFPResourceHMODULE;
ResourceType: PChar; ResourceName: PChar;
Language: Word) : TFPResourceHandle
function FindResourceEx(ModuleHandle: TFPResourceHMODULE;
const ResourceType: AnsiString;
const ResourceName: AnsiString; Language: Word)
: TFPResourceHandle
function FindResourceEx(ModuleHandle: TFPResourceHMODULE;
ResourceType: PChar;
const ResourceName: AnsiString; Language: Word)
: TFPResourceHandle
function FindResourceEx(ModuleHandle: TFPResourceHMODULE;
const ResourceType: AnsiString;
ResourceName: PChar; Language: Word)
: TFPResourceHandle
Visibility: default
Description: FindResourceEx looks in module ModuleHandle for a resource of type ResourceType
and name ResourceName with language ID Language. Both Resourcename and ResourceName
can be specified as a null-terminated array of characters, or as an AnsiString.
If the requested language/sublanguage is not found, then the search is conducted
If none of these has returned a match, then the first available language is returned.
If a match is found, a handle to the resource is returned. If none is found, an empty handle (nil or 0)
is returned.
Errors: None.
1463
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.119 float_raise
Synopsis: Raise floating point exception
75.11.120 Flush
Synopsis: Write file buffers to disk
Declaration: procedure Flush(var t: Text)
Visibility: default
Description: Flush empties the internal buffer of an opened file F and writes the contents to disk. The file is not
closed as a result of this call.
Errors: Depending on the state of the {$I} switch, a runtime error can be generated if there is an error. In
the {$I-} state, use IOResult to check for errors.
See also: Close (1432)
Listing: ./refex/ex26.pp
Program Example26 ;
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 .
1464
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.121 FlushThread
Synopsis: Flush all standard files
75.11.122 FMADouble
Synopsis: Internal function, do not use
Declaration: function FMADouble(d1: Double; d2: Double; d3: Double) : Double
Visibility: default
75.11.123 FMAExtended
Synopsis: Internal function, do not use
Declaration: function FMAExtended(e1: extended; e2: extended; e3: extended)
: extended
Visibility: default
75.11.124 FMASingle
Synopsis: Internal function, do not use
Declaration: function FMASingle(s1: single; s2: single; s3: single) : single
Visibility: default
75.11.125 FPower10
Synopsis: Fast multiply with a power of 10
Declaration: function FPower10(val: Extended; Power: LongInt) : Extended
Visibility: default
Description: FPower10 multplies val with 10 to the power Power. It uses a fast algorithm to calculate the
result.
75.11.126 Frac
Synopsis: Return fractional part of floating point value.
1465
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Listing: ./refex/ex27.pp
Program Example27 ;
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.456 }
W r i t e l n ( Frac ( − 1 2 3 . 4 5 6 ) : 0 : 3 ) ; { P r i n t s −O.456 }
end .
75.11.127 FreeLibrary
Synopsis: For compatibility with Delphi/Windows: Unload a library
Declaration: function FreeLibrary(Lib: TLibHandle) : Boolean
Visibility: default
Description: FreeLibrary provides the same functionality as UnloadLibrary (1557), and is provided for com-
patibility with Delphi.
See also: UnloadLibrary (1557)
75.11.128 Freemem
Synopsis: Release allocated memory
Declaration: procedure Freemem(p: pointer; Size: PtrUInt)
function Freemem(p: pointer) : PtrUInt
Visibility: default
Description: Freemem releases the memory occupied by the pointer P, of size Count (in bytes), and returns it
to the heap. P should point to the memory allocated to a dynamic variable.
Errors: An error will occur when P doesn’t point to the heap.
See also: Getmem (1469), New (1503), Dispose (1445)
Listing: ./refex/ex28.pp
Program Example28 ;
Var P : P o i n t e r ;
MM : L o n g i n t ;
begin
1466
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
{ Get memory f o r P }
GetMem ( P , 8 0 ) ;
F i l l C h a r (P^ , 8 0 , ' ' ) ;
FreeMem ( P , 8 0 ) ;
end .
75.11.129 Freememory
Synopsis: Alias for FreeMem (1466)
Declaration: procedure Freememory(p: pointer; Size: PtrUInt)
function Freememory(p: pointer) : PtrUInt
Visibility: default
Description: FreeMemory is an alias for FreeMem (1466).
See also: FreeMem (1466)
75.11.130 FreeResource
Synopsis: Free a loaded resource
Declaration: function FreeResource(ResData: TFPResourceHGLOBAL) : LongBool
Visibility: default
Description: FreeResource unloads the resource identified by ResData from memory. The resource must
have been loaded by LoadResource (1497). It returns True if the operation was successful, False
otherwise.
Errors: On error, False is returned.
See also: FindResource (1462), LoadResource (1497), SizeofResource (1539), LockResource (1498), Un-
lockResource (1558), FreeResource (1467)
75.11.131 Get8087CW
Declaration: function Get8087CW : Word
Visibility: default
75.11.132 GetCPUCount
Synopsis: Return the number of cores on the system
1467
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.133 GetCurrentThreadId
Synopsis: Return the id of the currently running thread.
Errors: None.
See also: KillThread (1493), ThreadSetPriority (1552)
75.11.134 GetDir
Synopsis: Return the current directory
Description: Getdir returns in dir the current directory on the drive drivenr, where {drivenr} is 1 for the
first floppy drive, 3 for the first hard disk etc. A value of 0 returns the directory on the current disk.
On Linux and Unix systems, drivenr is ignored, as there is only one directory tree.
Errors: An error is returned under dos, if the drive requested isn’t ready.
See also: Chdir (1431)
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 : ' ,S ) ;
end .
75.11.135 GetDynLibsManager
Synopsis: Return currently active dynamic library support handler
Declaration: procedure GetDynLibsManager(var Manager: TDynLibsManager)
Visibility: default
Description: GetDynLibsManager returns the currently active dynamic library support handler. This handler
has normally been set by inclusion of the #rtl.dynlibs (710) unit.
See also: #rtl.dynlibs (710), SetDynLibsManager (1530)
1468
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.136 GetFPCHeapStatus
Synopsis: Return FPC heap manager status information
75.11.137 GetHeapStatus
Synopsis: Return the memory manager heap status.
Declaration: function GetHeapStatus : THeapStatus
Visibility: default
75.11.138 GetLoadErrorStr
Synopsis: Return an error describing the last library loading error
Declaration: function GetLoadErrorStr : string
Visibility: default
Description: GetLoadErrorStr returns an error string describing the last library loading error. This function
must be called before any other OS calls are performed.
Errors: None.
See also: LoadLibrary (1497), SafeLoadLibrary (1525)
75.11.139 GetMem
Synopsis: Allocate new memory on the heap
Declaration: procedure Getmem(out p: pointer; Size: PtrUInt)
function GetMem(size: PtrUInt) : pointer
Visibility: default
Description: Getmem reserves Size bytes memory on the heap, and returns a pointer to this memory in p. What
happens if no more memory is available, depends on the value of the variable ReturnNilIfGrowHeap-
fails (1412): if the variable is True then Nil is returned. If the variable is False, a run-time error
is generated. The default value is False, so by default an error is generated.
The newly allocated memory is not initialized in any way, and may contain garbage data. It must be
cleared with a call to FillChar (1460) or FillWord (1461).
For an example, see Freemem (1466).
Errors: None.
See also: Freemem (1466), Dispose (1445), New (1503), returnnilifgrowheapfails (1412), MemSize (1501)
1469
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.140 GetMemory
Synopsis: Alias for GetMem (1469)
75.11.141 GetMemoryManager
Synopsis: Return current memory manager
Declaration: procedure GetMemoryManager(var MemMgr: TMemoryManager)
Visibility: default
Description: GetMemoryManager stores the current Memory Manager record in MemMgr.
For an example, see the programmer’s guide.
Errors: None.
75.11.142 GetMXCSR
Declaration: function GetMXCSR : DWord
Visibility: default
75.11.143 GetProcAddress
Synopsis: For compatibility with Delphi/Windows: Get the address of a procedure
Declaration: function GetProcAddress(Lib: TLibHandle; const ProcName: AnsiString)
: Pointer
Visibility: default
Description: GetProcAddress provides the same functionality as GetProcedureAddress (1470), and is pro-
vided for compatibility with Delphi.
75.11.144 GetProcedureAddress
Synopsis: Get the address of a procedure or symbol in a dynamic library.
1470
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
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 it’s 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 (1497), UnLoadLibrary (1557)
75.11.145 GetProcessID
Synopsis: Get the current process ID
Declaration: function GetProcessID : SizeUInt
Visibility: default
Description: GetProcessID returns the current process ID. The meaning of the return value of this call is
system dependent.
Errors: None.
See also: GetThreadID (1472)
75.11.146 GetResourceManager
Synopsis: Return the currently active resource manager
Declaration: procedure GetResourceManager(var Manager: TResourceManager)
Visibility: default
Description: GetResourceManager returns the currently active resource manager record in Manager. There
is always an active resource manager record.
Errors: None.
See also: TResourceManager (1391), SetResourceManager (1533)
75.11.147 GetSSECSR
Declaration: function GetSSECSR : DWord
Visibility: default
75.11.148 GetTextCodePage
Synopsis: Get the codepage used in a text file.
Declaration: function GetTextCodePage(var T: Text) : TSystemCodePage
Visibility: default
Description: GetTextCodePage returns the codepage that the text file T uses. All strings written to the file
will be converted to the indicated codepage. By default, the codepage is set to CP_ACP.
1471
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Errors: None.
See also: TextRec (1384), SetTextCodePage (1535)
75.11.149 GetThreadID
Synopsis: Get the current Thread ID.
75.11.150 GetThreadManager
Synopsis: Return the current thread manager
Declaration: function GetThreadManager(var TM: TThreadManager) : Boolean
Visibility: default
Description: GetThreadManager returns the currently used thread manager in TM.
For more information about thread programming, see the programmer’s guide.
See also: SetThreadManager (1536), TThreadManager (1395)
75.11.151 GetTypeKind
Synopsis: Return type kind for a type
Declaration: function GetTypeKind(const T: AnyType) : TTypeKind
Visibility: default
Description: GetTypeKind is a compiler intrinsic: it returns the type kind for the type T. In difference with the
TypeInfo (1554), if no type information was yet generated for the type, this statement will not ensure
that the type information is available: the compiler knows the correct value, and will directly insert
it into the code as a constant.
See also: Default (1443), TypeInfo (1554), TypeOf (1555), Initialize (1484), Finalize (1462)
75.11.152 GetUnicodeStringManager
Synopsis: Return a copy of the currently active UnicodeString manager.
Declaration: procedure GetUnicodeStringManager(var Manager: TUnicodeStringManager)
Visibility: default
1472
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Description: GetUnicodeStringManager returns a copy of the currently active Unicode string manager in
Old
UnicodeStrings are implemented in different ways on different platforms. Therefore, the Free Pascal
Runtime library has no fixed implementation of widestring routines. Instead, it defines a Unicode-
StringManager record, with callbacks that can be set to an implementation which is most efficient on
the current platform. On windows, standard Windows routines will be used. On Unix and Linux, an
implementation based on the C library is available (in unit cwstring).
It is possible to implement a custom unicodestring manager, optimized for the current application,
without having to recompile the complete Run-Time Library.
See also: SetUnicodeStringManager (1536), TUnicodeStringManager (1398)
75.11.153 GetVariantManager
Synopsis: Return the current variant manager.
Declaration: procedure GetVariantManager(var VarMgr: tvariantmanager)
Visibility: default
Description: GetVariantManager returns the current variant manager in varmgr.
See also: SetVariantManager (1537)
75.11.154 GetWideStringManager
Synopsis: Return a copy of the currently active widestring manager.
Declaration: procedure GetWideStringManager(var Manager: TUnicodeStringManager)
Visibility: default
Description: GetWideStringManager returns a copy of the currently active heap manager in Old
WideStrings are implemented in different ways on different platforms. Therefore, the Free Pascal
Runtime library has no fixed implementation of widestring routines. Instead, it defines a WideString
manager record, with callbacks that can be set to an implementation which is most efficient on the
current platform. On windows, standard Windows routines will be used. On Unix and Linux, an
implementation based on the C library is available (in unit cwstring).
It is possible to implement a custom widestring manager, optimized for the current application, with-
out having to recompile the complete Run-Time Library.
See also: SetWideStringManager (1537), TWideStringManager (1407)
75.11.155 get_caller_addr
Synopsis: Return the address of the caller.
Declaration: function get_caller_addr(framebp: pointer; addr: CodePointer)
: CodePointer
Visibility: default
Description: get_caller_frame returns a pointer to address ( the return address) of the caller of the routine
which has as frame framebp.
See also: get_frame (1474), get_caller_frame (1474), Dump_Stack (1447)
1473
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.156 get_caller_frame
Synopsis: Return the frame pointer of the caller
75.11.157 get_caller_stackinfo
Synopsis: Return caller stack infomation
Declaration: procedure get_caller_stackinfo(var framebp: pointer;
var addr: CodePointer)
Visibility: default
Description: get_caller_stackinfo returns caller address in addr and frame base pointer in framebp.
See also: CaptureBacktrace (1431), Get_pc_addr (1475), get_caller_addr (1473), get_caller_frame (1474)
75.11.158 get_cmdline
Synopsis: Return the command-line as a null-terminated string
Declaration: function get_cmdline : PChar
Visibility: default
Description: get_cmdline returns the complete command-line as a null-terminated string. It is not recom-
mended to use this function, since it builds a complete value from the actual command-line argu-
ments. Instead, ParamCount (1507) and ParamStr (1508) should be used.
See also: ParamCount (1507), ParamStr (1508)
75.11.159 get_frame
Synopsis: Return the current frame
Declaration: function get_frame : pointer
Visibility: default
Description: get_frame returns a pointer to the current stack frame.
1474
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.160 Get_pc_addr
Synopsis: Get Program Counter address
75.11.161 greaterthan(variant,variant):Boolean
Synopsis: Implement > (greater than) operation on variants.
Declaration: operator >(const op1: variant; const op2: variant) : Boolean
Visibility: default
Description: The implementation of the "greater than" comparison (>) operation is delegated to the variant
manager with operation opcmpgt.
Errors: Execution of this operator may result in an exception if no variant manager is installed or if the types
of the operand are not suitable for the operation.
See also: operator <(variant, variant): boolean (1331)
75.11.162 greaterthanorequal(variant,variant):Boolean
Synopsis: Implement >= (greater than or equal) operation on variants.
Declaration: operator >=(const op1: variant; const op2: variant) : Boolean
Visibility: default
Description: The implementation of the "greater than or equal" comparison (>=) operation is delegated to the
variant manager with operation opcmpge.
Errors: Execution of this operator may result in an exception if no variant manager is installed or if the types
of the operand are not suitable for the operation.
See also: operator <(variant, variant): boolean (1331)
75.11.163 Halt
Synopsis: Stop program execution.
1475
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Errors: None.
See also: Exit (1455)
Listing: ./refex/ex30.pp
Program Example30 ;
{ Program t o demonstrate t h e H a l t f u n c t i o n . }
begin
W r i t e l n ( ' Before H a l t . ' ) ;
H a l t ( 1 ) ; { Stop w i t h e x i t code 1 }
W r i t e l n ( ' A f t e r H a l t doesn ' ' t g e t executed . ' ) ;
end .
75.11.164 HexStr
Synopsis: Convert integer value to string with hexadecimal representation.
Description: HexStr returns a string with the hexadecimal representation of Value. The string has exactly
cnt characters. (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.
Listing: ./refex/ex81.pp
Program example81 ;
Var I : l o n g i n t ;
begin
For I :=1 to 10 do
W r i t e l n ( HexStr ( Value , I ) ) ;
end .
75.11.165 Hi
Synopsis: Return high byte/word/nibble of value.
1476
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Table 75.21:
Size Return value
8 Byte, High nibble
16 Byte, High byte
32 Word, High word
64 Cardinal, High DWord
Note that in Delphi or TP, this function always treats its argument as if it was a Word, so the results
may differ from FPC.
Errors: None.
See also: Lo (1496)
Listing: ./refex/ex31.pp
Program Example31 ;
{ Program t o demonstrate t h e Hi f u n c t i o n . }
var
L : Longint ;
W : Word ;
B : Byte ;
begin
L :=1 Shl 1 6 ; { = $10000 }
W:=1 Shl 8 ; { = $100 }
B:=1 Shl 4 ; { = $10 }
W r i t e l n ( Hi ( L ) ) ; { Prints 1 }
W r i t e l n ( Hi (W) ) ; { Prints 1 }
W r i t e l n ( Hi (B ) ) ; { Prints 1 }
end .
75.11.166 High
Synopsis: Return highest index of open array or enumerated
1477
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
1.If the argument is an ordinal type, High returns the highest value in the range of the given
ordinal type.
2.If the argument is an array type or an array type variable then High returns the highest possible
value of it’s index. For dynamic arrays, it returns the same as Length -1, meaning that it
reports -1 for empty arrays.
3.If the argument is an open array identifier in a function or procedure, then High returns the
highest index of the array, as if the array has a zero-based index. If the array is empty, then -1
is returned.
4.If the argument is a set type then it returns the highest value of the underlying ordinal type.
The return type is always the same type as the type of the argument (This can lead to some nasty
surprises !).
Errors: None.
See also: Low (1499), Ord (1506), Pred (1510), Succ (1546)
Listing: ./refex/ex80.pp
Program example80 ;
Var I : l o n g i n t ;
Temp : Real ;
begin
Temp : = Row [ 0 ] ;
For I : = 1 to High (Row) do
Temp : = Temp + Row [ i ] ;
Average : = Temp / ( High (Row ) + 1 ) ;
end ;
Var A : TEnum ;
B : TRange ;
C : TArray ;
I : longint ;
begin
W r i t e l n ( 'TEnum goes from : ' , Ord (Low(TEnum ) ) , ' t o ' , Ord ( high (TEnum ) ) , ' . ' ) ;
Writeln ( '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 ) ) , ' . ' ) ;
Writeln ( '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 ) ) ;
1478
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.167 HINSTANCE
Synopsis: Windows compatibility type for use in resources
Declaration: function HINSTANCE : TFPResourceHMODULE
Visibility: default
Description: This is an opaque type.
75.11.168 Inc
Synopsis: Increase value of integer variable
Declaration: procedure Inc(var X: TOrdinal)
procedure Inc(var X: TOrdinal; Increment: TOrdinal)
Visibility: default
Description: Inc increases the value of X with Increment. If Increment isn’t specified, then 1 is taken as a
default.
Inc can be used on typed pointers: in that case it increases the value with Increment the size
of the type the pointer points to. This works independently of the setting of the $POINTERMATH
directive.
Errors: If range checking is on, then A range check can occur, or an overflow error, when an attempt is made
to increase X over its maximum value.
See also: Dec (1442)
Listing: ./refex/ex32.pp
Program Example32 ;
{ Program t o demonstrate t h e I n c f u n c t i o n . }
Const
C : Cardinal = 1;
L : Longint = 1;
I : Integer = 1;
W : Word = 1;
B : Byte = 1;
SI : S h o r t I n t = 1;
CH : Char = 'A ' ;
begin
Inc (C ) ; { C:=2 }
Inc (L ,5); { L :=6 }
Inc ( I , −3); { I :=−2 }
Inc (W, 3 ) ; { W:=4 }
Inc (B, 1 0 0 ) ; { B:=101 }
Inc ( SI , − 3 ) ; { S i :=−2 }
Inc (CH, 1 ) ; { ch : = ' B ' }
end .
1479
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.169 Include
Synopsis: Include element in set if it was not yet present.
Declaration: procedure Include(var S: TSetType; E: TSetElement)
Visibility: default
Description: Include includes E in the set S if it is not yet part of the set. E should be of the same type as the
base type of the set S.
Thus, the two following statements do the same thing:
S:=S+[E];
Include(S,E);
75.11.170 IndexByte
Synopsis: Search for a byte in a memory range.
Declaration: function IndexByte(const buf; len: SizeInt; b: Byte) : SizeInt
Visibility: default
Description: IndexByte searches the memory at buf for maximally len positions for the byte b and returns
it’s 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 (1481), IndexDWord (1482), IndexWord (1483), CompareByte (1433)
Listing: ./refex/ex105.pp
Program Example105 ;
Const
A r r a y S i z e = 256;
MaxValue = 256;
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 10 do
begin
K: =Random( MaxValue ) ;
1480
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
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.171 IndexChar
Synopsis: Search for a character in a memory range.
Declaration: function IndexChar(const buf; len: SizeInt; b: Char) : SizeInt
Visibility: default
Description: IndexChar searches the memory at buf for maximally len positions for the character b and
returns it’s position if it found one. If b is not found then -1 is returned. The position is zero-based.
The IndexChar0 variant stops looking if a null character is found, and returns -1 in that case.
Errors: Buf and Len are not checked to see if they are valid values.
See also: IndexByte (1480), IndexDWord (1482), IndexWord (1483), CompareChar (1434)
Listing: ./refex/ex108.pp
Program Example108 ;
Const
A r r a y S i z e = 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 10 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 .
1481
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.172 IndexChar0
Synopsis: Return index of a character in null-terminated array of char.
Declaration: function IndexChar0(const buf; len: SizeInt; b: Char) : SizeInt
Visibility: default
Description: IndexChar0 returns the index of the character b in the null-terminated array Buf. At most len
characters will be searched, or the null character if it is encountered first. If the character is not found,
-1 is returned.
Errors: On error, -1 is returned.
See also: IndexByte (1480), IndexChar (1481), IndexWord (1483), IndexDWord (1482), CompareChar0 (1435)
75.11.173 IndexDWord
Synopsis: Search for a DWord value in a memory range.
Declaration: function IndexDWord(const buf; len: SizeInt; b: DWord) : SizeInt
Visibility: default
Description: IndexDWord searches the memory at buf for maximally len positions for the DWord DW and
returns it’s position if it found one. If DW is not found then -1 is returned. The position is zero-based.
Errors: Buf and Len are not checked to see if they are valid values.
See also: IndexByte (1480), IndexChar (1481), IndexWord (1483), CompareDWord (1436)
Listing: ./refex/ex106.pp
Program Example106 ;
Const
A r r a y S i z e = 1000;
MaxValue = 1000;
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 10 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 .
1482
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.174 IndexQWord
Synopsis: Return the position of a QWord in a memory range
75.11.175 Indexword
Synopsis: Search for a WORD value in a memory range.
Declaration: function Indexword(const buf; len: SizeInt; b: Word) : SizeInt
Visibility: default
Description: IndexWord searches the memory at buf for maximally len positions for the Word W and returns
it’s position if it found one. If W is not found then -1 is returned.
Errors: Buf and Len are not checked to see if they are valid values.
See also: IndexByte (1480), IndexDWord (1482), IndexChar (1481), CompareWord (1437)
Listing: ./refex/ex107.pp
Program Example107 ;
Const
A r r a y S i z e = 1000;
MaxValue = 1000;
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 10 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
1483
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.176 InitCriticalSection
Synopsis: Initialize a critical section
Declaration: procedure InitCriticalSection(var cs: TRTLCRITICALSECTION)
Visibility: default
Description: InitCriticalSection initializes a critical section CS for use. Before using a critical section
with EnterCriticalsection (1450) or LeaveCriticalsection (1493) the critical section should be initial-
ized with InitCriticalSection.
When a critical section is no longer used, it should be disposed of with DoneCriticalsection (1446)
See also: DoneCriticalsection (1446), EnterCriticalsection (1450), LeaveCriticalsection (1493)
75.11.177 Initialize
Synopsis: Initialize memory block using RTTI
Declaration: procedure Initialize(var T: TAnyType; ACount: SizeInt)
Visibility: default
Description: Initialize is a compiler intrinsic: it initializes a memory area T for any kind of managed vari-
able. Initializing means zeroing out the memory area. In this sense it is close in functionality to
Default (1443), but Default requires an already initialized variable. It performs the opposite op-
eration of finalize (1462), 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 (1462), Default (1443), TypeInfo (1554)
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 RTTI−enabled 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 ;
1484
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
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 Run−Time 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
Run−t 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 RTTI−enabled 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
/ / 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 Run−Time 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 ' ;
1485
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.178 InitializeArray
Synopsis: Initialize managed-type elements in array
75.11.179 InitThread
Synopsis: Initialize a thread
Declaration: procedure InitThread(stklen: SizeUInt)
Visibility: default
Description: Do not use, this is used internally by the thread manager.
75.11.180 InitThreadVars
Synopsis: Initialize threadvars
Declaration: procedure InitThreadVars(RelocProc: TRelocateThreadVarHandler)
Visibility: default
Description: This routine should be called when threading is started. It is called by the compiler and should never
be called manually, only from a thread manager.
Errors: None.
See also: TThreadManager (1395)
1486
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.181 Insert
Synopsis: Insert one string or dynamic array in another.
Visibility: default
Description: Insert inserts string Source in string S, at position Index, shifting all characters after Index
to the right. The resulting string is truncated at 255 characters, if needed. (i.e. for shortstrings)
Index is a 1-based index. if Index is less than 1, the insert of Source happens at the start of the
string, as if the value 1 was specified.
If the value of Index is larger than the length of the string S, Source is appended to the string S.
For dynamic arrays, Insert inserts the elements of array Source in array S, at position Index,
shifting all elements after Index to the right.
Index is a 0-based index. if Index is less than 0, the insert of Source happens at position0.
If the value of Index is larger than the length of the array S, Source is appended to the array S.
Errors: None.
See also: Delete (1444), Copy (1440), Pos (1509)
Listing: ./refex/ex33.pp
Program Example33 ;
{ Program t o demonstrate t h e I n s e r t f u n c t i o n . }
Var S : S t r i n g ;
begin
S: = ' Free Pascal i s d i f f i c u l t t o use ! ' ;
I n s e r t ( 'NOT ' ,S , pos ( ' d i f f i c u l t ' ,S ) ) ;
writeln ( s ) ;
end .
75.11.182 Int
Synopsis: Calculate integer part of floating point value.
Declaration: function Int(d: ValReal) : ValReal
Visibility: default
Description: Int returns the integer part of any Real X, as a Real.
Errors: None.
Listing: ./refex/ex34.pp
1487
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Program Example34 ;
{ Program t o demonstrate t h e I n t f u n c t i o n . }
begin
W r i t e l n ( I n t ( 1 2 3 . 4 5 6 ) : 0 : 1 ) ; { P r i n t s 123.0 }
W r i t e l n ( I n t ( − 1 2 3 . 4 5 6 ) : 0 : 1 ) ; { P r i n t s −123.0 }
end .
75.11.183 intdivide(variant,variant):variant
Synopsis: Implement div (integer division) operation on variants.
Declaration: operator div(const op1: variant; const op2: variant) : variant
Visibility: default
Description: The implementation of the integer division Div operation is delegated to the variant manager with
operation opintdivide.
Errors: Execution of this operator may result in an exception if no variant manager is installed or if the types
of the operand are not suitable for the operation.
75.11.184 InterlockedCompareExchange
Synopsis: Conditional exchange
Declaration: function InterlockedCompareExchange(var Target: LongInt;
NewValue: LongInt;
Comperand: LongInt) : LongInt
function InterlockedCompareExchange(var Target: Pointer;
NewValue: Pointer;
Comperand: Pointer) : Pointer
function InterlockedCompareExchange(var Target: Cardinal;
NewValue: Cardinal;
Comperand: Cardinal) : Cardinal
Visibility: default
Description: InterlockedCompareExchange does an compare-and-exchange operation on the specified
values in a thread-safe way. The function compares Target and Comperand and exchanges
Target with NewValue if Target and Comperand 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 (1489), InterLockedIncrement (1491), InterLockedExchange (1489), Inter-
LockedExchangeAdd (1490)
1488
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.185 InterlockedCompareExchange64
Declaration: function InterlockedCompareExchange64(var Target: Int64;
NewValue: Int64; Comperand: Int64)
: Int64
function InterlockedCompareExchange64(var Target: QWord;
NewValue: QWord; Comperand: QWord)
: QWord
Visibility: default
75.11.186 InterlockedCompareExchangePointer
Synopsis: Compare pointers in an atomic operation
Declaration: function InterlockedCompareExchangePointer(var Target: Pointer;
NewValue: Pointer;
Comperand: Pointer) : Pointer
Visibility: default
Description: InterlockedCompareExchangePointer compares Comparand with Target. if they are
equal, replaces Target with NewValue. This is done in a single atomic operation.
75.11.187 InterlockedDecrement
Synopsis: Thread-safe decrement
Declaration: function InterlockedDecrement(var Target: LongInt) : LongInt
function InterlockedDecrement(var Target: Pointer) : Pointer
function InterlockedDecrement(var Target: Cardinal) : Cardinal
Visibility: default
Description: InterLockedDecrement decrements Target with 1 and returns the result. This is done in a
thread-safe way. (i.e. only one processor is accessing the variable at a time).
Errors: None.
See also: InterLockedIncrement (1491), InterLockedExchange (1489), InterLockedExchangeAdd (1490), In-
terlockedCompareExchange (1488)
75.11.188 InterlockedDecrement64
Declaration: function InterlockedDecrement64(var Target: Int64) : Int64
function InterlockedDecrement64(var Target: QWord) : QWord
Visibility: default
75.11.189 InterlockedExchange
Synopsis: Exchange 2 integers in a thread-safe way
1489
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Errors: None.
See also: InterLockedDecrement (1489), InterLockedIncrement (1491), InterLockedExchangeAdd (1490), In-
terlockedCompareExchange (1488)
75.11.190 InterlockedExchange64
Declaration: function InterlockedExchange64(var Target: Int64; Source: Int64) : Int64
function InterlockedExchange64(var Target: QWord; Source: QWord) : QWord
Visibility: default
75.11.191 InterlockedExchangeAdd
Synopsis: Thread-safe add and exchange of 2 values
Declaration: function InterlockedExchangeAdd(var Target: LongInt; Source: LongInt)
: LongInt
function InterlockedExchangeAdd(var Target: Pointer; Source: Pointer)
: Pointer
function InterlockedExchangeAdd(var Target: Cardinal; Source: Cardinal)
: Cardinal
Visibility: default
Description: InterLockedExchangeAdd adds to Target the value of Source in a thread-safe way, and
returns the old value of Target.This is done in a thread-safe way, i.e., only one processor is access-
ing the Target variable at a time.
Errors: None.
See also: InterLockedDecrement (1489), InterLockedIncrement (1491), InterLockedExchange (1489), Inter-
lockedCompareExchange (1488)
75.11.192 InterlockedExchangeAdd64
Declaration: function InterlockedExchangeAdd64(var Target: Int64; Source: Int64)
: Int64
function InterlockedExchangeAdd64(var Target: QWord; Source: QWord)
: QWord
Visibility: default
1490
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.193 InterlockedIncrement
Synopsis: Thread-safe increment
Description: InterLockedIncrement increments Target with 1 and returns the result. This is done in a
thread-safe way (i.e. only one processor is accessing the variable at a time).
Errors: None.
See also: InterLockedDecrement (1489), InterLockedExchange (1489), InterLockedExchangeAdd (1490), In-
terlockedCompareExchange (1488)
75.11.194 InterlockedIncrement64
Declaration: function InterlockedIncrement64(var Target: Int64) : Int64
function InterlockedIncrement64(var Target: QWord) : QWord
Visibility: default
75.11.195 IOResult
Synopsis: Return result of last file IO operation
Declaration: function IOResult : Word
Visibility: default
Description: IOresult contains the result of any input/output call, when the {\$i-} compiler directive is active,
disabling IO checking. When the flag is read, it is reset to zero. If IOresult is zero, the operation
completed successfully. If non-zero, an error occurred. The following errors can occur:
dos errors :
I/O errors :
1491
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Listing: ./refex/ex35.pp
Program Example35 ;
{ Program t o demonstrate t h e I O R e s u l t f u n c t i o n . }
Var F : t e x t ;
begin
Assign ( f , paramstr ( 1 ) ) ;
{ $ i −}
Reset ( f ) ;
{ $i+}
I f I O r e s u l t <>0 then
w r i t e l n ( ' F i l e ' , paramstr ( 1 ) , ' doesn ' ' t e x i s t ' )
else
w r i t e l n ( ' F i l e ' , paramstr ( 1 ) , ' e x i s t s ' ) ;
end .
75.11.196 IsDynArrayRectangular
Synopsis: Check whether all dimensions have the same size
Declaration: function IsDynArrayRectangular(a: Pointer; typeInfo: Pointer) : Boolean
Visibility: default
Description: IsDynArrayRectangular returns True if all dimensions of the dynamic array a with type
information typinfo have the same bounds. It returns True if the array is empty.
See also: InitializeArray (1486), FinalizeArray (1462), CopyArray (1441), DynArraySize (1449), DynArray-
Clear (1448), DynArrayBounds (1447), DynArrayDim (1448)
1492
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.197 IsMemoryManagerSet
Synopsis: Is the memory manager set
Errors: None.
See also: SetMemoryManager (1532), GetMemoryManager (1470)
75.11.198 Is_IntResource
Synopsis: Check whether a resource is an internal resource
Errors: None.
75.11.199 KillThread
Synopsis: Kill a running thread
Declaration: function KillThread(threadHandle: TThreadID) : DWord
Visibility: default
Description: KillThread causes a running thread to be aborted. The thread is identified by it’s handle or ID
threadHandle.
The function returns zero if successful. A nonzero return value indicates failure.
Errors: If a failure occurred, a nonzero result is returned. The meaning is system dependent.
See also: WaitForThreadTerminate (1563), EndThread (1449), SuspendThread (1547)
75.11.200 LeaveCriticalSection
Synopsis: Leave a critical section
Declaration: procedure LeaveCriticalSection(var cs: TRTLCRITICALSECTION)
Visibility: default
Description: LeaveCriticalSection signals that the current thread is exiting the critical section CS it has
entered with EnterCriticalSection (1450).
The critical section must have been initialized with InitCriticalSection (1484) prior to a call to
EnterCriticalsection and LeaveCriticalSection.
See also: InitCriticalsection (1484), DoneCriticalsection (1446), EnterCriticalsection (1450)
1493
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.201 leftshift(variant,variant):variant
Synopsis: Implement binary shl operation on variants.
Errors: Execution of this operator may result in an exception if no variant manager is installed or if the types
of the operand are not suitable for the operation.
See also: operator shr(variant, variant): variant (1331)
75.11.202 Length
Synopsis: Returns length of a string or array.
Listing: ./refex/ex36.pp
Program Example36 ;
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 10 do
1494
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
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.203 lessthan(variant,variant):Boolean
Synopsis: Implement < (less than) operation on variants.
Declaration: operator <(const op1: variant; const op2: variant) : Boolean
Visibility: default
Description: The implementation of the "less than" comparison (<) operation is delegated to the variant manager
with operation opcmplt.
Errors: Execution of this operator may result in an exception if no variant manager is installed or if the types
of the operand are not suitable for the operation.
See also: operator >(variant, variant): boolean (1331)
75.11.204 lessthanorequal(variant,variant):Boolean
Synopsis: Implement <= (less than or equal) operation on variants.
Declaration: operator <=(const op1: variant; const op2: variant) : Boolean
Visibility: default
Description: The implementation of the "less than or equal" comparison (<=) operation is delegated to the
variant manager with operation opcmple.
Errors: Execution of this operator may result in an exception if no variant manager is installed or if the types
of the operand are not suitable for the operation.
See also: operator <(variant, variant): boolean (1331)
75.11.205 LEtoN
Synopsis: Convert Little Endian-ordered integer to Native-ordered integer
Declaration: function LEtoN(const AValue: SmallInt) : SmallInt
function LEtoN(const AValue: Word) : Word
function LEtoN(const AValue: LongInt) : LongInt
function LEtoN(const AValue: DWord) : DWord
function LEtoN(const AValue: Int64) : Int64
function LEtoN(const AValue: QWord) : QWord
Visibility: default
Description: LEToN will rearrange the bytes in a Little-Endian number to the native order for the current proces-
sor. 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 (1425), NtoBE (1504), NtoLE (1504)
1495
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.206 Ln
Synopsis: Calculate logarithm
Listing: ./refex/ex37.pp
Program Example37 ;
{ Program t o demonstrate t h e Ln f u n c t i o n . }
begin
W r i t e l n ( Ln ( 1 ) ) ; { Prints 0 }
W r i t e l n ( Ln ( Exp ( 1 ) ) ) ; { P r i n t s 1 }
end .
75.11.207 Lo
Synopsis: Return low nibble/byte/word of value.
Table 75.22:
Size Return value
8 Byte, low nibble
16 Byte, low byte
32 Word, low word
64 Cardinal, low DWord
Errors: None.
See also: Ord (1506), Chr (1432), Hi (1476)
Listing: ./refex/ex38.pp
1496
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
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 16) + ( 1 Shl 4 ) ; { $10010 }
W r i t e l n ( Lo ( L ) ) ; { Prints 16 }
W: = ( 1 Shl 8 ) + ( 1 Shl 4 ) ; { $110 }
W r i t e l n ( Lo (W) ) ; { Prints 16 }
B: = $EF ;
W r i t e l n ( Lo (B ) ) ; { P r i n t s 15 }
end .
75.11.208 LoadLibrary
Synopsis: Load a dynamic library and return a handle to it.
Declaration: function LoadLibrary(const Name: RawByteString) : TLibHandle
function LoadLibrary(const Name: UnicodeString) : TLibHandle
Visibility: default
Description: LoadLibrary loads a dynamic library in file Name and returns a handle to it. If the library cannot
be loaded, NilHandle (1354) is returned.
No assumptions should be made about the location of the loaded library if a relative pathname is
specified. The behaviour is dependent on the platform. Therefore it is best to specify an absolute
pathname if possible.
Errors: On error, NilHandle (1354) is returned.
See also: UnloadLibrary (1557), GetProcedureAddress (1470)
75.11.209 LoadResource
Synopsis: Load a resource for use
Declaration: function LoadResource(ModuleHandle: TFPResourceHMODULE;
ResHandle: TFPResourceHandle) : TFPResourceHGLOBAL
Visibility: default
Description: LoadResource loads a resource identified by ResHandle from a module identified by ModuleHandleinto
memory. It returns a handle to the resource.
Loaded resources must be unloaded again using the FreeResource (1467) function.
Errors: On error, 0 is returned.
See also: FindResource (1462), FreeResource (1467), SizeofResource (1539), LockResource (1498), Unlock-
Resource (1558), FreeResource (1467)
1497
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.210 LockResource
Synopsis: Lock a resource
Declaration: function LockResource(ResData: TFPResourceHGLOBAL) : Pointer
Visibility: default
Description: LockResource locks a resource previously loaded by LoadResource into memory. This
means that any attempt to modify the resource will fail while it is locked. The function returns a
pointer to the resource location in memory.
The resource can be freed again using the UnlockResource (1558) function.
Errors: if the function fails, Nil is returned.
See also: FindResource (1462), FreeResource (1467), SizeofResource (1539), LoadResource (1497), Unlock-
Resource (1558), FreeResource (1467)
75.11.211 logicaland(variant,variant):variant
Synopsis: Implement logical/binary and operation on variants
Declaration: operator and(const op1: variant; const op2: variant) : variant
Visibility: default
Description: The implementation of the and operation is delegated to the variant manager with operation opand.
Errors: Execution of this operator may result in an exception if no variant manager is installed or if the types
of the operand are not suitable for the operation.
See also: operator or(variant, variant): variant (1331), operator xor(variant, variant): variant (1331), operator
not(variant): variant (1331)
75.11.212 logicalnot(variant):variant
Synopsis: Implement logical/binary not operation on variants
Declaration: operator not(const op: variant) : variant
Visibility: default
Description: The implementation of the not operation is delegated to the variant manager with operation opnot.
Errors: Execution of this operator may result in an exception if no variant manager is installed or if the types
of the operand are not suitable for the operation.
See also: operator and(variant, variant): variant (1331), operator or(variant, variant): variant (1331), operator
xor(variant, variant): variant (1331)
75.11.213 logicalor(variant,variant):variant
Synopsis: Implement logical/binary or operation on variants
Declaration: operator or(const op1: variant; const op2: variant) : variant
Visibility: default
Description: The implementation of the or operation is delegated to the variant manager with operation opor.
1498
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Errors: Execution of this operator may result in an exception if no variant manager is installed or if the types
of the operand are not suitable for the operation.
See also: operator and(variant, variant): variant (1331), operator xor(variant, variant): variant (1331), operator
not(variant): variant (1331)
75.11.214 logicalxor(variant,variant):variant
Synopsis: Implement logical/binary xor operation on variants
Declaration: operator xor(const op1: variant; const op2: variant) : variant
Visibility: default
Description: The implementation of the xor operation is delegated to the variant manager with operation opxor.
Errors: Execution of this operator may result in an exception if no variant manager is installed or if the types
of the operand are not suitable for the operation.
See also: operator or(variant, variant): variant (1331), operator and(variant, variant): variant (1331), operator
not(variant): variant (1331)
75.11.215 longjmp
Synopsis: Jump to address.
Declaration: procedure longjmp(var S: jmp_buf; value: LongInt)
Visibility: default
Description: LongJmp jumps to the address in the envjmp_buf, and restores the registers that were stored in
it at the corresponding SetJmp (1530) call. In effect, program flow will continue at the SetJmp call,
which will return value instead of 0. If a value equal to zero is passed, it will be converted to 1
before passing it on. The call will not return, so it must be used with extreme care. This can be used
for error recovery, for instance when a segmentation fault occurred.
For an example, see SetJmp (1530)
Errors: None.
See also: SetJmp (1530)
75.11.216 Low
Synopsis: Return lowest index of open array or enumerated
Declaration: function Low(Arg: TypeOrVariable) : TOrdinal
Visibility: default
Description: The return value of Low depends on it’s argument:
1.If the argument is an ordinal type, Low returns the lowest value in the range of the given ordinal
type.
2.If the argument is an array type or an array type variable then Low returns the lowest possible
value of it’s index.
3.If the argument is an open array identifier in a function or procedure, then Low returns the
lowest element of the array, which is always zero.
1499
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
4.If the argument is a set type then it returns the lowest value of the underlying ordinal type.
The return type is always the same type as the type of the argument.
for an example, see High (1477).
Errors: None.
See also: High (1477), Ord (1506), Pred (1510), Succ (1546)
75.11.217 LowerCase
Synopsis: Return lowercase version of a string.
Declaration: function LowerCase(const s: shortstring) : shortstring; Overload
function LowerCase(c: Char) : Char; Overload
function LowerCase(const s: ansistring) : ansistring
function LowerCase(const s: UnicodeString) : UnicodeString
function LowerCase(c: UnicodeChar) : UnicodeChar
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 (1558)
Listing: ./refex/ex73.pp
program Example73 ;
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.218 MakeLangID
Synopsis: Create a language ID
1500
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.219 MemSize
Synopsis: Return the size of a memory block.
Errors: Passing an invalid pointer may lead to run-time errors (access violations).
See also: GetMem (1469), FreeMem (1466)
75.11.220 MkDir
Synopsis: Create a new directory.
Declaration: procedure MkDir(const s: shortstring); Overload
procedure MkDir(const s: RawByteString); Overload
procedure MkDir(const s: unicodestring); Overload
Visibility: default
Description: Mkdir creates a new directory S.
For an example, see Rmdir (1520).
Errors: Depending on the state of the {$I} switch, a runtime error can be generated if there is an error. In
the {$I-} state, use IOResult to check for errors.
See also: Chdir (1431), Rmdir (1520)
75.11.221 modulus(variant,variant):variant
Synopsis: Implement mod (modulo) operation on variants.
Declaration: operator mod(const op1: variant; const op2: variant) : variant
Visibility: default
Description: The implementation of the modulo Mod operation is delegated to the variant manager with operation
opModulus.
Errors: Execution of this operator may result in an exception if no variant manager is installed or if the types
of the operand are not suitable for the operation.
See also: operator div(variant, variant): variant (1331)
75.11.222 Move
Synopsis: Move data from one location in memory to another
Declaration: procedure Move(const source; var dest; count: SizeInt)
Visibility: default
1501
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Errors: If either Dest or Source is outside the accessible memory for the process, then a run-time error
will be generated.
See also: Fillword (1461), Fillchar (1460)
Listing: ./refex/ex42.pp
Program Example42 ;
Var S1 , S2 : S t r i n g [ 3 0 ] ;
begin
S1 : = ' H e l l o World ! ' ;
S2 : = ' Bye , bye ! ';
Move ( S1 , S2 , Sizeof ( S1 ) ) ;
W r i t e l n ( S2 ) ;
end .
75.11.223 MoveChar0
Synopsis: Move data till first zero character
Declaration: procedure MoveChar0(const buf1; var buf2; len: SizeInt)
Visibility: default
Description: MoveChar0 moves Count bytes from buf1 to buf2, and stops moving if a zero character is
found.
Errors: No checking is done to see if Count stays within the memory allocated to the process.
Listing: ./refex/ex109.pp
Program Example109 ;
Var
Buf1 , Buf2 : Array [ 1 . . 8 0 ] of char ;
I : longint ;
begin
Randomize ;
For I : = low ( buf1 ) to high ( buf1 ) do
Buf1 [ i ] : = chr (Random( 1 6 ) + Ord ( ' A ' ) ) ;
Writeln ( ' O r i g i n a l b u f f e r ' ) ;
w r i t e l n ( Buf1 ) ;
Buf1 [ Random( 8 0 ) + 1 ] : = # 0 ;
MoveChar0 ( Buf1 , Buf2 , 8 0 ) ;
W r i t e l n ( ' Randomly zero−t e r m i n a t e d B u f f e r ' ) ;
W r i t e l n ( Buf2 ) ;
end .
1502
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.224 multiply(variant,variant):variant
Synopsis: Implement multiplication (*) operation on variants.
Errors: Execution of this operator may result in an exception if no variant manager is installed or if the types
of the operand are not suitable for the operation.
See also: operator /(variant, variant): variant (1331)
75.11.225 negative(variant):variant
Synopsis: Implement - (unary minus, negation) operation on variants.
Declaration: operator -(const op: variant) : variant
Visibility: default
Description: The implementation of the unary minus (-) operation is delegated to the variant manager with
operation varNeg.
Errors: Execution of this operator may result in an exception if no variant manager is installed or if the types
of the operand are not suitable for the operation.
See also: operator -(variant, variant): variant (1331)
75.11.226 New
Synopsis: Dynamically allocate memory for variable
Declaration: procedure &New(var P: Pointer)
procedure &New(var P: Pointer; Cons: TProcedure)
Visibility: default
Description: New allocates a new instance of the type pointed to by P, and puts the address in P. If P is an object,
then it is possible to specify the name of the constructor with which the instance will be created.
The newly allocated memory is not initialized in any way, and may contain garbage data. It must be
cleared with a call to FillChar (1460) or FillWord (1461).
For an example, see Dispose (1445).
Errors: What happens if no more memory is available, depends on the value of the variable ReturnNilIf-
GrowHeapfails (1412): if the variable is True then Nil is returned. If the variable is False, a
run-time error is generated.
See also: Dispose (1445), Freemem (1466), Getmem (1469), ReturnNilIfGrowHeapfails (1412)
1503
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.227 NtoBE
Synopsis: Convert Native-ordered integer to a Big Endian-ordered integer
Declaration: function NtoBE(const AValue: SmallInt) : SmallInt
function NtoBE(const AValue: Word) : Word
function NtoBE(const AValue: LongInt) : LongInt
function NtoBE(const AValue: DWord) : DWord
function NtoBE(const AValue: Int64) : Int64
function NtoBE(const AValue: 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 (1425), LEtoN (1495), NtoLE (1504)
75.11.228 NtoLE
Synopsis: Convert Native-ordered integer to a Little Endian-ordered integer
Declaration: function NtoLE(const AValue: SmallInt) : SmallInt
function NtoLE(const AValue: Word) : Word
function NtoLE(const AValue: LongInt) : LongInt
function NtoLE(const AValue: DWord) : DWord
function NtoLE(const AValue: Int64) : Int64
function NtoLE(const AValue: 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 (1425), LEtoN (1495), NtoBE (1504)
75.11.229 Null
Synopsis: Null variant
Declaration: function Null : Variant
Visibility: default
75.11.230 OctStr
Synopsis: Convert integer to a string with octal representation.
Declaration: function OctStr(Val: LongInt; cnt: Byte) : shortstring
function OctStr(Val: Int64; cnt: Byte) : shortstring
function OctStr(Val: QWord; cnt: Byte) : shortstring
Visibility: default
Description: OctStr returns a string with the octal representation of Value. The string has exactly cnt char-
acters.
1504
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Errors: None.
See also: Str (1542), Val (1561), BinStr (1425), HexStr (1476)
Listing: ./refex/ex112.pp
Program example112 ;
{ Program t o demonstrate t h e O c t S t r f u n c t i o n }
Var I : l o n g i n t ;
begin
For I :=1 to 10 do
W r i t e l n ( O c t S t r ( Value , I ) ) ;
For I :=1 to 16 do
Writeln ( OctStr ( I , 3 ) ) ;
end .
75.11.231 Odd
Synopsis: Is a value odd or even ?
Declaration: function Odd(l: LongInt) : Boolean
function Odd(l: LongWord) : Boolean
function Odd(l: Int64) : Boolean
function Odd(l: QWord) : Boolean
Visibility: default
Description: Odd returns True if X is odd, or False otherwise.
Errors: None.
Listing: ./refex/ex43.pp
Program Example43 ;
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.232 Ofs
Synopsis: Return offset of a variable.
Declaration: function Ofs(var X) : LongInt
1505
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Visibility: default
Description: Ofs returns the offset of the address of a variable. This function is only supported for compatibility.
In Free Pascal, it returns always the complete address of the variable, since Free Pascal is a 32/64 bit
compiler.
Errors: None.
See also: DSeg (1446), CSeg (1441), Seg (1529), Ptr (1511)
Listing: ./refex/ex44.pp
Program Example44 ;
Var W : P o i n t e r ;
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 .
75.11.233 Ord
Synopsis: Return ordinal value of an ordinal type.
Declaration: function Ord(X: TOrdinal) : LongInt
Visibility: default
Description: Ord returns the Ordinal value of a ordinal-type variable X.
Historical note:
Originally, Pascal did not have typecasts and ord was a necessary function in order to do certain
operations on non-integer ordinal types. With the arrival of typecasting a generic approach became
possible, making ord mostly obsolete. However ord is not considered deprecated and remains in wide
use today.
Errors: None.
See also: Chr (1432), Succ (1546), Pred (1510), High (1477), Low (1499)
Listing: ./refex/ex45.pp
Program Example45 ;
Type
TEnum = ( Zero , One , Two , Three , Four ) ;
Var
X : Longint ;
Y : TEnum ;
begin
X: = 1 2 5 ;
1506
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
W r i t e l n ( Ord (X ) ) ; { P r i n t s 125 }
X: = Pred (X ) ;
W r i t e l n ( Ord (X ) ) ; { p r i n t s 124 }
Y: = One ;
W r i t e l n ( Ord ( y ) ) ; { Prints 1 }
Y: = Succ (Y ) ;
W r i t e l n ( Ord (Y ) ) ; { Prints 2}
end .
75.11.234 Pack
Synopsis: Create packed array from normal array
Declaration: procedure Pack(const A: UnpackedArrayType; StartIndex: TIndexType;
out Z: PackedArrayType)
Visibility: default
Description: Pack will copy the elements of an unpacked array (A) to a packed array (Z). It will start the copy at
the index denoted by StartIndex. The type of the index variable StartIndex must match the
type of the index of A. The elements are always transferred to the beginning of the packed array Z.
(i.e. it starts at Low(Z)).
Obviously, the type of the elements of the arrays A and Z must match.
75.11.235 ParamCount
Synopsis: Return number of command-line parameters passed to the program.
Declaration: function ParamCount : LongInt
Visibility: default
Description: Paramcount returns the number of command-line arguments. If no arguments were given to the
running program, 0 is returned.
Errors: None.
Listing: ./refex/ex46.pp
Program Example46 ;
begin
W r i t e l n ( paramstr ( 0 ) , ' : Got ' , ParamCount , ' command−l i n e parameters : ' );
For i :=1 to ParamCount do
W r i t e l n ( ParamStr ( i ) ) ;
end .
1507
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.236 ParamStr
Synopsis: Return value of a command-line argument.
75.11.237 Pi
Synopsis: Return the value of PI.
Declaration: function Pi : ValReal
Visibility: default
Description: Pi returns the value of Pi (3.1415926535897932385).
Errors: None.
See also: Cos (1441), Sin (1538)
Listing: ./refex/ex47.pp
Program Example47 ;
{ Program t o demonstrate t h e P i f u n c t i o n . }
begin
W r i t e l n ( Pi ) ; { 3.1415926 }
W r i t e l n ( Sin ( Pi ) ) ;
end .
1508
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.238 PopCnt
Synopsis: Count number of set bits
Visibility: default
Description: PopCnt (population count) counts the number of set bits in AValue.
75.11.239 Pos
Synopsis: Search for substring in a string.
Declaration: function Pos(const substr: shortstring; const s: shortstring;
Offset: SizeInt) : SizeInt
function Pos(C: Char; const s: shortstring; Offset: SizeInt) : SizeInt
function Pos(const Substr: ShortString; const Source: RawByteString;
Offset: SizeInt) : SizeInt
function Pos(const substr: shortstring; c: Char; Offset: SizeInt)
: SizeInt
function Pos(const Substr: RawByteString; const Source: RawByteString;
Offset: SizeInt) : SizeInt
function Pos(c: AnsiChar; const s: RawByteString; Offset: SizeInt)
: SizeInt
function Pos(const Substr: UnicodeString; const Source: UnicodeString;
Offset: SizeInt) : SizeInt
function Pos(c: Char; const s: UnicodeString; Offset: SizeInt) : SizeInt
function Pos(c: UnicodeChar; const s: UnicodeString; Offset: SizeInt)
: SizeInt
function Pos(const c: RawByteString; const s: UnicodeString;
Offset: SizeInt) : SizeInt
function Pos(const c: UnicodeString; const s: RawByteString;
Offset: SizeInt) : SizeInt
function Pos(const c: ShortString; const s: UnicodeString;
Offset: SizeInt) : SizeInt
function Pos(const Substr: WideString; const Source: WideString;
Offset: SizeInt) : SizeInt
function Pos(c: Char; const s: WideString; Offset: SizeInt) : SizeInt
function Pos(c: WideChar; const s: WideString; Offset: SizeInt)
: SizeInt
function Pos(c: WideChar; const s: RawByteString; Offset: SizeInt)
: SizeInt
function Pos(const c: RawByteString; const s: WideString;
Offset: SizeInt) : SizeInt
function Pos(const c: WideString; const s: RawByteString;
Offset: SizeInt) : SizeInt
function Pos(const c: ShortString; const s: WideString; Offset: SizeInt)
: SizeInt
function Pos(c: Char; const v: Variant) : SizeInt
function Pos(s: ShortString; const v: Variant) : SizeInt
function Pos(const a: AnsiString; const v: Variant) : SizeInt
1509
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Listing: ./refex/ex48.pp
Program Example48 ;
Var
S : String ;
begin
S: = ' The f i r s t space i n t h i s sentence i s a t p o s i t i o n : ' ;
W r i t e l n ( S , pos ( ' ' ,S ) ) ;
S: = ' The l a s t l e t t e r o f t h e a l p h a b e t doesn ' ' t appear i n t h i s sentence ' ;
I f ( Pos ( ' Z ' ,S) = 0 ) and ( Pos ( ' z ' ,S) = 0 ) then
W r i t e l n (S ) ;
end .
75.11.240 power(variant,variant):variant
Synopsis: Implement power (**) operation on variants.
Declaration: operator **(const op1: variant; const op2: variant) : variant
Visibility: default
Description: The implementation of the power ** operation is delegated to the variant manager with operation
opPower.
Errors: Execution of this operator may result in an exception if no variant manager is installed or if the types
of the operand are not suitable for the operation.
75.11.241 Pred
Synopsis: Return previous element for an ordinal type.
Declaration: function Pred(X: TOrdinal) : TOrdinal
1510
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Visibility: default
Description: Pred returns the element that precedes the element that was passed to it. If it is applied to the first
value of the ordinal type, and the program was compiled with range checking on ({$R+}), then a
run-time error will be generated.
For an example, see Ord (1506)
Errors: Run-time error 201 is generated when the result is out of range.
See also: Ord (1506), Succ (1546), High (1477), Low (1499)
75.11.242 Prefetch
Synopsis: Prefetch a memory location
Declaration: procedure Prefetch(const mem)
Visibility: default
Description: Prefetch can be used to optimize the CPU behaviour by already loading a memory location. It is
mainly used as a hint for those processors that support it.
Errors: None.
75.11.243 Ptr
Synopsis: Combine segment and offset to pointer
Declaration: function Ptr(sel: LongInt; off: LongInt) : FarPointer
Visibility: default
Description: Ptr returns a pointer, pointing to the address specified by segment Sel and offset Off.
Remark
1.In the 32/64-bit flat-memory model supported by Free Pascal, this function is obsolete.
2.The returned address is simply the offset.
Errors: None.
See also: Addr (1415)
Listing: ./refex/ex59.pp
Program Example59 ;
{ Program t o demonstrate t h e P t r ( c o m p a t i b i l i t y ) f u n c t i o n . }
type p S t r i n g = ^ S t r i n g ;
Var P : p S t r i n g ;
S : String ;
begin
S: = ' H e l l o , World ! ' ;
P: = p S t r i n g ( P t r ( Seg (S ) , L o n g i n t ( Ofs (S ) ) ) ) ;
{P now p o i n t s t o S ! }
W r i t e l n (P ^ ) ;
end .
1511
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.244 RaiseList
Synopsis: List of currently raised exceptions.
Declaration: function RaiseList : PExceptObject
Visibility: default
Description: RaiseList returns a pointer to the list of currently raised exceptions (i.e. a pointer to the first
exception block.
75.11.245 Random
Synopsis: Generate random number
Declaration: function Random(l: LongInt) : LongInt
function Random(l: Int64) : Int64
function Random : extended
Visibility: default
Description: Random returns a random number larger or equal to 0 and strictly less than L. For negative values
of L the behaviour is undefined. If the argument L is omitted, a Real number between 0 and 1 is
returned (0 included, 1 excluded).
Remark The Free Pascal implementation of the Random routine uses a Mersenne Twister algorithm to sim-
ulate randomness. This implementation has a better statistical distribution than for example a Linear
Congruential generator algorithm, but is considerably slower than the latter. If speed is an issue, then
alternate random number generators should be considered.
Note that the fact that a Mersenne Twister is used is an implementation detail, which can be changed
at any point. The only guarantee Random() offers is that setting randseed to particular value will
result in the same sequence of random numbers in a particular version the RTL. A newer version of
the RTL may result in a different sequence for the same randseed.
Errors: None.
See also: Randomize (1513)
Listing: ./refex/ex49.pp
Program Example49 ;
begin
Randomize ; { T h i s way we generate a new sequence every t i m e
t h e program i s run }
Count : = 0 ;
For i :=1 to 1000 do
I f Random>0.5 then inc ( Count ) ;
W r i t e l n ( ' Generated ' , Count , ' numbers > 0 . 5 ' ) ;
W r i t e l n ( ' o u t o f 1000 generated numbers . ' ) ;
count : = 0 ;
For i :=1 to 5 do
begin
w r i t e ( ' Guess a number between 1 and 5 : ' ) ;
1512
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
readln ( Guess ) ;
I f Guess=Random( 5 ) + 1 then inc ( count ) ;
end ;
W r i t e l n ( ' You guessed ' , Count , ' o u t o f 5 c o r r e c t . ' ) ;
end .
75.11.246 Randomize
Synopsis: Initialize random number generator
Declaration: procedure Randomize
Visibility: default
Description: Randomize initializes the random number generator of Free Pascal, by giving a value to Randseed,
calculated with the system clock.
For an example, see Random (1512).
Errors: None.
75.11.247 Read
Synopsis: Read from a text file into variable
Declaration: procedure Read(var F: Text; Args: Arguments)
procedure Read(Args: Arguments)
Visibility: default
Description: Read reads one or more values from a file F, and stores the result in V1, V2, etc.; If no file F is
specified, then standard input is read. If F is of type Text, then the variables V1, V2 etc. must be
of type Char, Integer, Real, String. If F is a typed file, then each of the variables must be of
the type specified in the declaration of F. Untyped files are not allowed as an argument.
In earlier versions of FPC, it was also allowed to read Pchar null-terminated strings, but this has
been removed, since there is no buffer checking possible.
Errors: If no data is available, empty values are returned (0 for ordinal values, empty strings for string
values)
See also: Readln (1514), Blockread (1426), Write (1565), Blockwrite (1427)
Listing: ./refex/ex50.pp
Program Example50 ;
Var S : S t r i n g ;
C : Char ;
F : F i l e of char ;
begin
Assign ( F , ' ex50 . pp ' ) ;
Reset ( F ) ;
1513
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
C: = ' A ' ;
W r i t e l n ( ' The c h a r a c t e r s b e f o r e t h e f i r s t space i n ex50 . pp are : ' );
While not Eof ( f ) and (C<> ' ' ) do
Begin
Read ( F ,C ) ;
Write (C ) ;
end ;
Writeln ;
Close ( F ) ;
W r i t e l n ( ' Type some words . An empty l i n e ends t h e program . ' ) ;
repeat
Readln (S ) ;
u n t i l S= ' ' ;
end .
75.11.248 ReadBarrier
Synopsis: Memory Read Barrier
Declaration: procedure ReadBarrier
Visibility: default
Description: ReadBarrier is a low-level instruction to force a read barrier in the CPU: all memory reads before
the instruction will be finished before this instruction, before memory reads after the instruction
occur.
See also: ReadDependencyBarrier (1514), ReadWriteBarrier (1515), WriteBarrier (1566)
75.11.249 ReadDependencyBarrier
Synopsis: Memory Read Dependency Barrier
Declaration: procedure ReadDependencyBarrier
Visibility: default
Description: ReadDependencyBarrier is a low-level instruction to force a read barrier in the CPU: all mem-
ory reads (loads) depending on previous loads are separate from the ones following the instruction.
See also: ReadBarrier (1514), ReadWriteBarrier (1515), WriteBarrier (1566)
75.11.250 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.
1514
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
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 (1513).
Errors: If no data is available, empty values are returned (0 for ordinal values, empty strings for string
values)
See also: Read (1513), Blockread (1426), Write (1565), Blockwrite (1427)
75.11.251 ReadStr
Synopsis: Read variables from a string
Declaration: procedure ReadStr(const S: string; Args: Arguments)
Visibility: default
Description: ReadStr behaves like Read (1513), except that it reads its input from the string variable S instead
of a file. Semantically, the ReadStr call is equivalent to writing the string to a file using the Write
call, and then reading them into the various arguments Arg using the Read call from the same file:
var
F : Text;
begin
Rewrite(F);
Write(F,S);
Close(F);
Reset(F);
Read(F,Args);
Close(F);
end;
75.11.252 ReadWriteBarrier
Synopsis: Memory read/write barrier
Declaration: procedure ReadWriteBarrier
Visibility: default
Description: ReadWriteBarrier is a low-level instruction to force a read/write barrier in the CPU: both read
(Loads) and write (stores) operations before and after the barrier are separate.
See also: ReadBarrier (1514), ReadDependencyBarrier (1514), WriteBarrier (1566)
1515
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.253 Real2Double
Synopsis: Convert Turbo Pascal style real to double.
Declaration: function Real2Double(r: Real48) : Double
Visibility: default
Description: The Real2Double function converts a Turbo Pascal style real (6 bytes long) to a native Free Pascal
double type. It can be used e.g. to read old binary TP files with FPC and convert them to Free Pascal
binary files.
Note that the assignment operator has been overloaded so a Real48 type can be assigned directly
to a double or extended.
Errors: None.
Listing: ./refex/ex110.pp
program Example110 ;
Var
i : integer ;
R : Real48 ;
D : Double ;
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 10 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.254 ReAllocMem
Synopsis: Re-allocate memory on the heap
Declaration: function ReAllocMem(var p: pointer; Size: PtrUInt) : pointer
Visibility: default
Description: ReAllocMem resizes the memory pointed to by P so it has size Size. The value of P may change
during this operation. The contents of the memory pointed to by P (if any) will be copied to the new
location, but may be truncated if the newly allocated memory block is smaller in size. If a larger
block is allocated, only the used memory is initialized, extra memory will not be zeroed out.
Note that P may be nil, in that case the behaviour of ReAllocMem is equivalent to Getmem.
1516
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.255 ReAllocMemory
Synopsis: Alias for ReAllocMem (1516)
Declaration: function ReAllocMemory(p: pointer; Size: PtrUInt) : pointer
Visibility: default
Description: ReAllocMemory is an alias for ReAllocMem (1516).
See also: ReAllocMem (1516)
75.11.256 ReleaseExceptionObject
Synopsis: Decrease the reference count of the current exception object.
75.11.257 Rename
Synopsis: Rename file on disk
Declaration: procedure Rename(var f: File; const s: ShortString)
procedure Rename(var f: File; const p: PAnsiChar)
procedure Rename(var f: File; const c: AnsiChar)
procedure Rename(var f: File; const s: UnicodeString)
procedure Rename(var f: File; const s: RawByteString)
procedure Rename(var t: Text; const s: shortstring)
procedure Rename(var t: Text; const p: PAnsiChar)
procedure Rename(var t: Text; const c: AnsiChar)
procedure Rename(var t: Text; const s: unicodestring)
procedure Rename(var t: Text; const s: 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 (1453)
Listing: ./refex/ex77.pp
1517
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Program Example77 ;
begin
Assign ( F , paramstr ( 1 ) ) ;
Rename ( F , paramstr ( 2 ) ) ;
end .
75.11.258 Reset
Synopsis: Open file for reading
Declaration: procedure Reset(var f: File; l: LongInt)
procedure Reset(var f: File)
procedure Reset(var f: TypedFile)
procedure Reset(var t: Text)
Visibility: default
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
(1340).
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.
Note that the path can be only 255 characters long.
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 (1519), Assign (1418), Close (1432), Append (1416), FileMode (1340)
Listing: ./refex/ex51.pp
Program Example51 ;
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<> ' ' ) ;
i f F i l e E x i s t s then
Close ( f ) ;
end ;
begin
1518
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
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.259 ResumeThread
Synopsis: Resume a suspended thread.
Declaration: function ResumeThread(threadHandle: TThreadID) : DWord
Visibility: default
Description: ResumeThread causes a suspended thread (using SuspendThread (1547)) to resume it’s execution.
The thread is identified with it’s handle or ID threadHandle.
The function returns zero if successful. A nonzero return value indicates failure.
Errors: If a failure occurred, a nonzero result is returned. The meaning is system dependent.
75.11.260 Rewrite
Synopsis: Open file for writing
Declaration: procedure Rewrite(var f: File; l: LongInt)
procedure Rewrite(var f: File)
procedure Rewrite(var f: TypedFile)
procedure Rewrite(var t: 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 doesn’t 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 (1518) is needed.
File sharing is not taken into account when calling Rewrite.
Note that the path can be only 255 characters long.
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 (1518), Assign (1418), Close (1432), Flush (1464), Append (1416)
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 ;
1519
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
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 10 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
10 l o n g i n t s going from 1 t o 10 }
end .
75.11.261 rightshift(variant,variant):variant
Synopsis: Implement binary shr operation on variants.
75.11.262 RmDir
Synopsis: Remove directory when empty.
Errors: Depending on the state of the {$I} switch, a runtime error can be generated if there is an error. In
the {$I-} state, use IOResult to check for errors.
See also: Chdir (1431), Mkdir (1501)
Listing: ./refex/ex53.pp
Program Example53 ;
Var S : S t r i n g ;
begin
W r i t e l n ( ' Making d i r e c t o r y ' ,D ) ;
Mkdir (D ) ;
1520
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.263 RolByte
Synopsis: Rotate bits of a byte value to the left
Declaration: function RolByte(const AValue: Byte) : Byte
function RolByte(const AValue: Byte; const Dist: Byte) : Byte
Visibility: default
Description: RolByte rotates the bits of the byte AValue with Dist positions to the left. If Dist is not
specified, then 1 is assumed.
Errors: None.
See also: RorByte (1522), RolWord (1522), RolDWord (1521), RolQWord (1521)
75.11.264 RolDWord
Synopsis: Rotate bits of a DWord (cardinal) value to the left
Declaration: function RolDWord(const AValue: DWord) : DWord
function RolDWord(const AValue: DWord; const Dist: Byte) : DWord
Visibility: default
Description: RolDWord rotates the bits of the DWord (cardinal) AValue with Dist positions to the left. If
Dist is not specified, then 1 is assumed.
Errors: None.
See also: RolByte (1521), RolWord (1522), RorDWord (1522), RolQWord (1521)
75.11.265 RolQWord
Synopsis: Rotate bits of a QWord (64-bit) value to the left
Declaration: function RolQWord(const AValue: QWord) : QWord
function RolQWord(const AValue: QWord; const Dist: Byte) : QWord
Visibility: default
Description: RorQWord rotates the bits of the QWord (64-bit) AValue with Dist positions to the left. If Dist
is not specified, then 1 is assumed.
Errors: None.
See also: RolByte (1521), RolWord (1522), RolDWord (1521), RorQWord (1522)
1521
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.266 RolWord
Synopsis: Rotate bits of a word value to the left
Declaration: function RolWord(const AValue: Word) : Word
function RolWord(const AValue: Word; const Dist: Byte) : Word
Visibility: default
Description: RolWord rotates the bits of the word AValue with Dist positions to the right. If Dist is not
specified, then 1 is assumed.
Errors: None.
See also: RolByte (1521), RorWord (1523), RolDWord (1521), RolQWord (1521)
75.11.267 RorByte
Synopsis: Rotate bits of a byte value to the right
Declaration: function RorByte(const AValue: Byte) : Byte
function RorByte(const AValue: Byte; const Dist: Byte) : Byte
Visibility: default
Description: RorByte rotates the bits of the byte AValue with Dist positions to the right. If Dist is not
specified, then 1 is assumed.
Errors: None.
See also: RolByte (1521), RorWord (1523), RorDWord (1522), RorQWord (1522)
75.11.268 RorDWord
Synopsis: Rotate bits of a DWord (cardinal) value to the right
Declaration: function RorDWord(const AValue: DWord) : DWord
function RorDWord(const AValue: DWord; const Dist: Byte) : DWord
Visibility: default
Description: RorDWord rotates the bits of the DWord (cardinal) AValue with Dist positions to the right. If
Dist is not specified, then 1 is assumed.
Errors: None.
See also: RorByte (1522), RolDWord (1521), RorWord (1523), RorQWord (1522)
75.11.269 RorQWord
Synopsis: Rotate bits of a QWord (64-bit) value to the right
Declaration: function RorQWord(const AValue: QWord) : QWord
function RorQWord(const AValue: QWord; const Dist: Byte) : QWord
Visibility: default
Description: RorQWord rotates the bits of the QWord (64-bit) AValue with Dist positions to the right. If
Dist is not specified, then 1 is assumed.
Errors: None.
See also: RorByte (1522), RorWord (1523), RorDWord (1522), RolQWord (1521)
1522
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.270 RorWord
Synopsis: Rotate bits of a word value to the right
75.11.271 Round
Synopsis: Round floating point value to nearest integer number.
Declaration: function Round(d: ValReal) : Int64
Visibility: default
Description: Round rounds X to the closest integer, which may be bigger or smaller than X.
In the case of .5, the algorithm uses "banker’s rounding": .5 values are always rounded towards the
even number.
Errors: None.
See also: Frac (1465), Int (1487), Trunc (1553)
Listing: ./refex/ex54.pp
Program Example54 ;
begin
Writeln ( Round ( 1 2 3 4 . 5 6 ) ) ; { Prints 1235 }
Writeln ( Round( − 1 2 3 4 . 5 6 ) ) ; { Prints −1235 }
Writeln ( Round ( 1 2 . 3 4 5 6 ) ) ; { Prints 12 }
Writeln ( Round( − 1 2 . 3 4 5 6 ) ) ; { Prints −12 }
Writeln ( Round ( 2 . 5 ) ) ; { Prints 2 ( down ) }
Writeln ( Round ( 3 . 5 ) ) ; { Prints 4 ( up ) }
end .
75.11.272 RTLEventCreate
Synopsis: Create a new RTL event
1523
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Description: RTLEventCreate creates and initializes a new RTL event. RTL events are used to notify other
threads that a certain condition is met, and to notify other threads of condition changes (conditional
variables).
The function returns an initialized RTL event, which must be disposed of with RTLEventdestroy
(1524)
RTLEvent is used mainly for the synchronize method.
See also: RTLEventDestroy (1524), RTLEventSetEvent (1524), RTLEventReSetEvent (1524), RTLEvent-
WaitFor (1525)
75.11.273 RTLEventDestroy
Synopsis: Destroy a RTL Event
75.11.274 RTLEventResetEvent
Synopsis: Reset an event
Declaration: procedure RTLEventResetEvent(state: PRTLEvent)
Visibility: default
Description: RTLeventResetEvent resets the event: this should be used to undo the signaled state of an
event. Resetting an event that is not set (or was already reset) has no effect.
See also: RTLEventCreate (1523), RTLEventDestroy (1524), RTLEventSetEvent (1524), RTLEventWaitFor
(1525)
75.11.275 RTLEventSetEvent
Synopsis: Notify threads of the event.
Declaration: procedure RTLEventSetEvent(state: PRTLEvent)
Visibility: default
Description: RTLeventSetEvent notifies other threads which are listening, that the event has occurred.
See also: RTLEventCreate (1523), RTLEventResetEvent (1524), RTLEventDestroy (1524), RTLEventWait-
For (1525)
1524
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.276 RTLEventWaitFor
Synopsis: Wait for an event.
75.11.277 RunError
Synopsis: Generate a run-time error.
Declaration: procedure RunError(w: Word)
procedure RunError
Visibility: default
Description: Runerror stops the execution of the program, and generates a run-time error ErrorCode.
Errors: None.
See also: Exit (1455), Halt (1475)
Listing: ./refex/ex55.pp
Program Example55 ;
begin
{ The program w i l l s t o p end e m i t a run−e r r o r 106 }
RunError ( 1 0 6 ) ;
end .
75.11.278 SafeLoadLibrary
Synopsis: Load a library safely
Declaration: function SafeLoadLibrary(const Name: RawByteString) : TLibHandle
function SafeLoadLibrary(const Name: UnicodeString) : TLibHandle
Visibility: default
Description: SafeLoadLibrary calls LoadLibrary (1497) but restores the current FPU control word and ex-
ception mask to their current value after the library was loaded, thus preventing the loaded library
initialization code from modifying their current values.
1525
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.279 SarInt64
Synopsis: 64-bit Shift Arithmetic Right
75.11.280 SarLongint
Synopsis: 32-bit Shift Arithmetic Right
75.11.281 SarShortint
Synopsis: 8-bit Shift Arithmetic Right
75.11.282 SarSmallint
Synopsis: 16-bit Shift Arithmetic Right
1526
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.283 Seek
Synopsis: Set file position
Declaration: procedure Seek(var f: File; Pos: Int64)
Visibility: default
Description: Seek sets the file-pointer for file F to record Nr. Count. The first record in a file has Count=0.
F can be any file type, except Text. If F is an untyped file, with no record size specified in Reset
(1518) or Rewrite (1519), 128 is assumed.
Errors: Depending on the state of the {$I} switch, a runtime error can be generated if there is an error. In
the {$I-} state, use IOResult to check for errors.
See also: Eof (1451), SeekEof (1527), SeekEoln (1528)
Listing: ./refex/ex56.pp
Program Example56 ;
Var
F : File ;
I , j : longint ;
begin
{ Create a f i l e and f i l l i t w i t h data }
Assign ( F , ' t e s t . tmp ' ) ;
Rewrite ( F ) ; { Create f i l e }
Close ( f ) ;
FileMode : = 2 ;
ReSet ( F , Sizeof ( i ) ) ; { Opened read / w r i t e }
For I :=0 to 10 do
BlockWrite ( F , I , 1 ) ;
{ Go Back t o t h e b e g i n i n g o f t h e f i l e }
Seek ( F , 0 ) ;
For I :=0 to 10 do
begin
BlockRead ( F , J , 1 ) ;
I f J<> I then
W r i t e l n ( ' E r r o r : expected ' , i , ' , g o t ' , j ) ;
end ;
Close ( f ) ;
end .
75.11.284 SeekEOF
Synopsis: Set file position to end of file
Declaration: function SeekEOF(var t: Text) : Boolean
function SeekEOF : Boolean
Visibility: default
Description: SeekEof returns True is the file-pointer is at the end of the file. It ignores all whitespace. Calling
this function has the effect that the file-position is advanced until the first non-whitespace character
or the end-of-file marker is reached.
1527
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Listing: ./refex/ex57.pp
Program Example57 ;
begin
{ t h i s w i l l p r i n t a l l c h a r a c t e r s from s t a n d a r d i n p u t except
Whitespace c h a r a c t e r s . }
While Not SeekEof do
begin
Read (C ) ;
Write (C ) ;
end ;
end .
75.11.285 SeekEOLn
Synopsis: Set file position to end of line
Declaration: function SeekEOLn(var t: Text) : Boolean
function SeekEOLn : Boolean
Visibility: default
Description: SeekEoln returns True is the file-pointer is at the end of the current line. It ignores all whitespace.
Calling this function has the effect that the file-position is advanced until the first non-whitespace
character or the end-of-line marker is reached. If the end-of-line marker is reached, True is returned.
Otherwise, False is returned. The end-of-line marker is defined as #10, the LineFeed character. If
the parameter F is omitted, standard Input is assumed.
Errors: A run-time error is generated if the file F isn’t opened.
See also: Eof (1451), SeekEof (1527), Seek (1527)
Listing: ./refex/ex58.pp
Program Example58 ;
begin
{ T h i s w i l l read t h e f i r s t l i n e o f s t a n d a r d o u t p u t and p r i n t
a l l c h a r a c t e r s except whitespace . }
1528
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.286 Seg
Synopsis: Return segment
Declaration: function Seg(var X) : LongInt
Visibility: default
Description: Seg returns the segment of the address of a variable. This function is only supported for compati-
bility. In Free Pascal, it returns always 0, since Free Pascal uses a flat 32/64 bit memory model. In
such a memory model segments have no meaning.
Errors: None.
See also: DSeg (1446), CSeg (1441), Ofs (1505), Ptr (1511)
Listing: ./refex/ex60.pp
Program Example60 ;
begin
W: = Seg (W) ; { W c o n t a i n s i t s own Segment }
end .
75.11.287 Set8087CW
Declaration: procedure Set8087CW(cw: Word)
Visibility: default
75.11.288 SetCodePage
Synopsis: Set the codepage of a string
Declaration: procedure SetCodePage(var s: RawByteString; CodePage: TSystemCodePage;
Convert: Boolean)
Visibility: default
Description: SetCodePage sets the codepage of a string S to CodePage. If Convert is True then the string
will be transcoded to the new codepage. The resulting string will have reference count 1.
See also: StringCodePage (1543)
1529
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.289 SetDynLibsManager
Synopsis: Set a new handler for dynamic library support
Declaration: procedure SetDynLibsManager(const &New: TDynLibsManager)
procedure SetDynLibsManager(const &New: TDynLibsManager;
var Old: TDynLibsManager)
Visibility: default
Description: SetDynLibsManager sets the handler for dynamic library support to New. Optionally, it returns
the currently active handler in Old.
This is the routine used by the #rtl.dynlibs (710) unit to set the default handler.
See also: #rtl.dynlibs (710), GetDynLibsManager (1468)
75.11.290 Setjmp
Synopsis: Save current execution point.
Declaration: function Setjmp(var S: jmp_buf) : LongInt
Visibility: default
Description: SetJmp fills env with the necessary data for a jump back to the point where it was called. It returns
zero if called in this way. If the function returns nonzero, then it means that a call to LongJmp (1499)
with env as an argument was made somewhere in the program.
Errors: None.
See also: LongJmp (1499)
Listing: ./refex/ex79.pp
program example79 ;
begin
value : = 2 ;
W r i t e l n ( ' Going t o jump ! ' ) ;
{ T h i s w i l l r e t u r n t o t h e setjmp c a l l ,
and r e t u r n v a l u e i n s t e a d o f 0 }
longjmp ( env , v a l u e ) ;
end ;
begin
i f setjmp ( env )=0 then
begin
w r i t e l n ( ' Passed f i r s t t i m e . ' ) ;
dojmp ( env , 2 ) ;
end
else
w r i t e l n ( ' Passed second t i m e . ' ) ;
end .
1530
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.291 SetLength
Synopsis: Set length of a string or dynamic array.
Declaration: procedure &SetLength(var S: AStringType; Len: SizeInt)
procedure &SetLength(var A: DynArrayType; Len: SizeInt)
Visibility: default
Description: SetLength for strings sets the length of the string S to Len. S can be an ansistring, a short string
or a widestring. For ShortStrings, Len can maximally be 255. For AnsiStrings it can have
any value. For AnsiString strings, SetLengthmust be used to set the length of the string.
In the case of a dynamic array A, SetLength sets the number of elements. The elements are
numbered from index 0, so the count runs from 0 to Len-1. If Zero is specified, the array is cleared
and removed from memory.
In case the length is set to a smaller length than the current one, the elements 0-(Len-1) (or
characters 1-Len in case of a string) are kept. The elements that fall outside the new length are
finalized if the array element is a managed type.
In case the length is set to a larger length than the current one, the new elements are zeroed out for a
dynamic array. For a string, the string is zero-terminated at the correct length.
Note that SetLength is governed by the Copy-On-Write principle for strings and dynamic arrays:
the reference count after a call to SetLength will be 1 (except when the length is zero, then the
array is removed from memory).
For multi-dimensional arrays, SetLength can be used to specify all dimensions at once:
Var
arr : Array of Array of Integer;
begin
SetLength(arr, 10, 20);
end;
This will create a dynamic array with 10 elements, where each element in itself is a dynamic array of
20 elements. SetLength will of course always create "rectangular" arrays: all elements will have
the same size.
Var
arr : Array of Integer;
begin
SetLength(arr,0);
end;
Listing: ./refex/ex85.pp
Program Example85 ;
1531
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Var S : S t r i n g ;
begin
Setlength (S, 1 0 0 ) ;
F i l l C h a r (S [ 1 ] , 1 0 0 , # 3 2 ) ;
W r i t e l n ( ' " ' ,S , ' " ' ) ;
end .
75.11.292 SetMemoryManager
Synopsis: Set a memory manager
Declaration: procedure SetMemoryManager(const MemMgr: TMemoryManager)
Visibility: default
75.11.293 SetMultiByteConversionCodePage
Synopsis: Set codepage for conversions from multi-byte strings to single-byte strings
Declaration: procedure SetMultiByteConversionCodePage(CodePage: TSystemCodePage)
Visibility: default
75.11.294 SetMultiByteFileSystemCodePage
Synopsis: Set codepage used when passing strings to OS single-byte file system APIs
Declaration: procedure SetMultiByteFileSystemCodePage(CodePage: TSystemCodePage)
Visibility: default
1532
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
This constant is not used if the file system 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 (1409), SetMultiByteConversionCodePage (1532), SetMultiByteRTL-
FileSystemCodePage (1533)
75.11.295 SetMultiByteRTLFileSystemCodePage
Synopsis: Set codepage used when interpreting strings from OS single-byte file system APIs
Declaration: procedure SetMultiByteRTLFileSystemCodePage(CodePage: TSystemCodePage)
Visibility: default
Description: SetMultiByteRTLFileSystemCodePage sets the codepage used to interpreted strings re-
turned by single-byte OS file system 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 file system APIs will be interpreted using the new codepage.
his constant is not used if the file system 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 (1532), SetMultiByteConversionCodePage (1532), SetMultiByteRTL-
FileSystemCodePage (1533)
75.11.296 SetMXCSR
Declaration: procedure SetMXCSR(w: DWord)
Visibility: default
75.11.297 SetResourceManager
Synopsis: Set the resource manager
Declaration: procedure SetResourceManager(const &New: TResourceManager)
Visibility: default
Description: SetResourceManager sets the active resource manager to Manager. After a call to SetResourceManager,
the functions in the Manager record will be used to handle resources.
Note that it is not supported to change resource managers on-the-fly: any resources or information
about resources obtained should be discarded prior to a call to SetResourceManager. Typically,
SetResourceManager should be called once, at program startup.
Errors: None.
See also: TResourceManager (1391), GetResourceManager (1471)
75.11.298 SetSSECSR
Declaration: procedure SetSSECSR(w: DWord)
Visibility: default
1533
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.299 SetString
Synopsis: Set length of a string and copy buffer.
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 (1531)
75.11.300 SetTextBuf
Synopsis: Set size of text file internal buffer
Declaration: procedure SetTextBuf(var f: Text; var Buf)
procedure SetTextBuf(var f: Text; var Buf; Size: SizeInt)
Visibility: default
Description: SetTextBuf assigns an I/O buffer to a text file. The new buffer is located at Buf and is Size
bytes long. If Size is omitted, then SizeOf(Buf) is assumed. The standard buffer of any text file
is 128 bytes long. For heavy I/O operations this may prove too slow. The SetTextBuf procedure
allows to set a bigger buffer for the I/O of the application, thus reducing the number of system calls,
and thus reducing the load on the system resources. The maximum size of the newly assigned buffer
is 65355 bytes.
Remark
•Never assign a new buffer to an opened file. A new buffer can be assigned immediately after
a call to Rewrite (1519), Reset (1518) 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.
Listing: ./refex/ex61.pp
1534
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Program Example61 ;
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.301 SetTextCodePage
Synopsis: Set the codepage used in a text file.
Declaration: procedure SetTextCodePage(var T: Text; CodePage: TSystemCodePage)
Visibility: default
Description: GetTextCodePage sets the codepage that the text file T uses. All strings written to the file will
be converted to the indicated codepage. By default, the codepage is set to CP_ACP.
Errors: None.
See also: TextRec (1384), GetTextCodePage (1471)
75.11.302 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 (1338).
Errors: None.
See also: DefaultTextLineBreakStyle (1338), TTextLineBreakStyle (1394)
1535
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.303 SetThreadDebugName
Declaration: procedure SetThreadDebugName(threadHandle: TThreadID;
const ThreadName: AnsiString)
procedure SetThreadDebugName(threadHandle: TThreadID;
const ThreadName: UnicodeString)
Visibility: default
75.11.304 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 successfully, False if an error occurred.
For more information about thread programming, see the programmer’s 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 (1472), TThreadManager (1395)
75.11.305 SetUnicodeStringManager
Synopsis: Set the unicodestring manager
Declaration: procedure SetUnicodeStringManager(const &New: TUnicodeStringManager)
procedure SetUnicodeStringManager(const &New: TUnicodeStringManager;
var Old: TUnicodeStringManager)
Visibility: default
1536
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.306 SetVariantManager
Synopsis: Set the current variant manager.
75.11.307 SetWideStringManager
Synopsis: Set the widestring manager
Declaration: procedure SetWideStringManager(const &New: TUnicodeStringManager)
procedure SetWideStringManager(const &New: TUnicodeStringManager;
var Old: TUnicodeStringManager)
Visibility: default
Description: SetWideStringManager sets the current widestring manager to New. Optionally, it returns the
currently active widestring manager in Old.
WideStrings are implemented in different ways on different platforms. Therefore, the Free Pascal
Runtime library has no fixed implementation of widestring routines. Instead, it defines a WideString
manager record, with callbacks that can be set to an implementation which is most efficient on the
current platform. On windows, standard Windows routines will be used. On Unix and Linux, an
implementation based on the C library is available (in unit cwstring).
It is possible to implement a custom widestring manager, optimized for the current application, with-
out having to recompile the complete Run-Time Library.
See also: TWideStringManager (1407)
75.11.308 ShortCompareText
Synopsis: Compare 2 shortstrings
<0if S1<S2.
0if S1=S2.
>0if S1>S2.
The comparison of the two strings is case-insensitive. The function does not take internationalization
settings into account, it simply compares ASCII values.
Errors: None.
See also: CompareText (1652)
1537
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.309 Sin
Synopsis: Calculate sine of angle
Errors: None.
See also: Cos (1441), Pi (1508), Exp (1457), Ln (1496)
Listing: ./refex/ex62.pp
Program Example62 ;
begin
W r i t e l n ( Sin ( Pi ) : 0 : 1 ) ; { P r i n t s 0.0 }
W r i t e l n ( Sin ( Pi / 2 ) : 0 : 1 ) ; { P r i n t s 1 . 0 }
end .
75.11.310 SizeOf
Synopsis: Return size of a variable or type.
Declaration: function SizeOf(X: TAnyType) : LongInt
Visibility: default
Description: SizeOf returns the size, in bytes, of any variable or type-identifier.
Remark This isn’t really a RTL function. Its result is calculated at compile-time, and hard-coded in the
executable.
Errors: None.
See also: Addr (1415)
Listing: ./refex/ex63.pp
Program Example63 ;
begin
W r i t e l n ( SizeOf ( I ) ) ; { Prints 4 }
W r i t e l n ( SizeOf (S ) ) ; { P r i n t s 11 }
end .
1538
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.311 SizeofResource
Synopsis: Return the size of a particular resource
Declaration: function SizeofResource(ModuleHandle: TFPResourceHMODULE;
ResHandle: TFPResourceHandle) : LongWord
Visibility: default
Description: SizeOfResource returns the size of the resource identified by ResHandle in module identified
by ModuleHandle. ResHandle should be obtained from a call to LoadResource (1497)
Errors: In case of an error, 0 is returned.
See also: FindResource (1462), FreeResource (1467), LoadResource (1497), LockResource (1498), Unlock-
Resource (1558), FreeResource (1467)
75.11.312 Slice
Synopsis: Return part of an array
Declaration: function Slice(const A: ArrayType; ACount: Integer) : ArrayType2
Visibility: default
Description: Slice returns the first ACount elements from the array A. It returns an array with the same element
type as A, but this array is not assignment compatible to any other array, and can therefor only be
used in open array arguments to functions.
See also: Length (1494), SetLength (1531)
Listing: ./refex/ex113.pp
Program Example113 ;
{ Program t o demonstrate t h e S l i c e f u n c t i o n . }
begin
ShowArray ( S l i c e ( [ 1 , 2 , 3 , 4 ] , 2 ) ) ;
end .
75.11.313 Space
Synopsis: Return a string of spaces
Declaration: function Space(b: Byte) : shortstring
Visibility: default
Description: Space returns a shortstring with length B, consisting of spaces.
See also: StringOfChar (1544)
1539
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.314 SPtr
Synopsis: Return current stack pointer
Errors: None.
See also: SSeg (1541)
Listing: ./refex/ex64.pp
program Example64 ;
{ Program t o demonstrate t h e s p t r f u n c t i o n . }
var p : p t r u i n t ;
begin
p : = ofs ( s t a ck b o tt o m ) ; { P Contains now t h e c u r r e n t s t a c k p o s i t i o n . }
end .
75.11.315 Sqr
Synopsis: Calculate the square of a value.
Listing: ./refex/ex65.pp
Program Example65 ;
begin
For i :=1 to 10 do
w r i t e l n ( Sqr ( i ) : 3 ) ;
end .
1540
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.316 Sqrt
Synopsis: Calculate the square root of a value
Declaration: function Sqrt(d: ValReal) : ValReal
Visibility: default
Description: Sqrt returns the square root of its argument X, which must be positive.
Errors: If X is negative, then a run-time error is generated.
See also: Sqr (1540), Ln (1496), Exp (1457)
Listing: ./refex/ex66.pp
Program Example66 ;
{ Program t o demonstrate t h e S q r t f u n c t i o n . }
begin
W r i t e l n ( Sqrt ( 4 ) : 0 : 3 ) ; { P r i n t s 2.000 }
W r i t e l n ( Sqrt ( 2 ) : 0 : 3 ) ; { P r i n t s 1.414 }
end .
75.11.317 SSeg
Synopsis: Return stack segment register value.
Declaration: function SSeg : Word
Visibility: default
Description: SSeg returns the Stack Segment. This function is only supported for compatibility reasons, as Sptr
returns the correct contents of the stackpointer.
Errors: None.
See also: Sptr (1540)
Listing: ./refex/ex67.pp
Program Example67 ;
begin
W: =SSeg ;
end .
75.11.318 StackTop
Synopsis: Top location of the stack.
Declaration: function StackTop : Pointer
Visibility: default
1541
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
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 (1412), StackLength (1412)
75.11.319 Str
Synopsis: Convert a numerical or enumeration value to a string.
Declaration: procedure Str(var X: TNumericType; var S: string)
Visibility: default
Description: Str returns a string which represents the value of X. X can be any numerical or enumerated type.
The actual declaration of Str is not according to pascal syntax, and should be
Where the optional NumPlaces and Decimals specifiers control the formatting of the string:
NumPlaces gives the total width of the string, and Decimals the number of decimals after the
decimal separator char.
Str can also be used to convert an enumerated type value to a string representation of the declared
enumeration value. That means that the following will work:
Type
TMyEnum = (OnE);
Var
S : String;
begin
Str(one, s);
Writeln(S);
end.
This will write OnE on the screen, which is consistent with the following - equivalent - program:
Type
TMyEnum = (OnE);
Var
S : String;
E : TMyEnum;
begin
E:=one;
Str(E,s);
Writeln(S);
end.
For scoped enumerated types, only the value is written, which means the following program will
have the same output:
1542
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
{$SCOPEDENUMS+}
Type
TMyEnum = (OnE);
Var
S : String;
begin
Str(one, s);
Writeln(S);
end.
Errors: None.
Listing: ./refex/ex68.pp
Program Example68 ;
{ Program t o demonstrate t h e S t r f u n c t i o n . }
Var S : S t r i n g ;
Function I n t T o S t r ( I : L o n g i n t ) : S t r i n g ;
Var S : S t r i n g ;
begin
Str ( I ,S ) ;
I n t T o S t r : =S ;
end ;
begin
S: = ' * ' + I n t T o S t r ( −233)+ ' * ' ;
W r i t e l n (S ) ;
end .
75.11.320 StringCodePage
Synopsis: Get the code page of a string
Declaration: function StringCodePage(const S: RawByteString) : TSystemCodePage
; Overload
function StringCodePage(const S: UnicodeString) : TSystemCodePage
; Overload
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, DefaultSystem-
CodePage (1410) is returned.
See also: DefaultSystemCodePage (1410), StringElementSize (1544), StringRefCount (1544), SetCodePage
(1529)
1543
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.321 StringElementSize
Synopsis: Get the character size of a string.
75.11.322 StringOfChar
Synopsis: Return a string consisting of 1 character repeated N times.
SetLength(StringOfChar,l);
FillChar(Pointer(StringOfChar)^,Length(StringOfChar),c);
Errors: None.
Listing: ./refex/ex97.pp
Program Example97 ;
{ $H+ }
{ Program t o demonstrate t h e S t r i n g O f C h a r f u n c t i o n . }
Var S : S t r i n g ;
begin
S: = S t r i n g O f C h a r ( ' ' ,40)+ ' A l i g n e d a t column 4 1 . ' ;
Writeln ( s ) ;
end .
75.11.323 StringRefCount
Synopsis: Get the reference count of a string
Declaration: function StringRefCount(const S: RawByteString) : SizeInt; Overload
function StringRefCount(const S: UnicodeString) : SizeInt; Overload
Visibility: default
1544
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Description: StringRefCount returns the reference count 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, 0 is
returned.
See also: StringCodePage (1543), StringElementSize (1544)
75.11.324 StringToPPChar
Synopsis: Split string in list of null-terminated strings
Declaration: function StringToPPChar(var S: AnsiString; ReserveEntries: Integer)
: PPChar
function StringToPPChar(S: PChar; ReserveEntries: Integer) : PPChar
Visibility: default
Description: StringToPPChar splits the string S in words, replacing any whitespace with zero characters. It
returns a pointer to an array of pchars that point to the first letters of the words in S. This array is
terminated by a Nil pointer.
The function does not add a zero character to the end of the string unless it ends on whitespace.
The function reserves memory on the heap to store the array of PChar; The caller is responsible for
freeing this memory.
This function is only available on certain platforms.
Errors: None.
75.11.325 StringToUnicodeChar
Synopsis: Convert an ansistring to a null-terminated array of Unicode characters.
Declaration: function StringToUnicodeChar(const Src: RawByteString;
Dest: PUnicodeChar; DestSize: SizeInt)
: PUnicodeChar
Visibility: default
Description: StringToUnicodeChar converts the ansistring S to a unicodestring and places the result in
Dest. The size of the memory location pointed to by Dest must be given in DestSize. If the
result string is longer than the available size, the result string will be truncated.
The function always returns Dest.
Errors: No check is performed to see whether Dest points to a valid memory location.
See also: UnicodeCharToString (1556), UnicodeCharLenToString (1555)
75.11.326 StringToWideChar
Synopsis: Convert a string to an array of widechars.
Declaration: function StringToWideChar(const Src: RawByteString; Dest: PWideChar;
DestSize: SizeInt) : PWideChar
Visibility: default
1545
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.327 StrLen
Synopsis: Length of a null-terminated string.
Declaration: function StrLen(p: PChar) : SizeInt
Visibility: default
Description: Returns the length of the null-terminated string P.
Errors: None.
75.11.328 StrPas
Synopsis: Convert a null-terminated string to a shortstring.
Declaration: function StrPas(p: PChar) : shortstring
Visibility: default
Description: Converts a null terminated string in P to a Pascal string, and returns this string. The string is truncated
at 255 characters.
Errors: None.
75.11.329 subtract(variant,variant):variant
Synopsis: Implement subtraction (-) operation on variants.
Errors: Execution of this operator may result in an exception if no variant manager is installed or if the types
of the operand are not suitable for the operation.
See also: operator -(variant, variant): variant (1331)
75.11.330 Succ
Synopsis: Return next element of ordinal type.
1546
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Description: Succ returns the element that succeeds the element that was passed to it. If it is applied to the last
value of the ordinal type, and the program was compiled with range checking on ({$R+}), then a
run-time error will be generated.
for an example, see Ord (1506).
Errors: Run-time error 201 is generated when the result is out of range.
See also: Ord (1506), Pred (1510), High (1477), Low (1499)
75.11.331 SuspendThread
Synopsis: Suspend a running thread.
Declaration: function SuspendThread(threadHandle: TThreadID) : DWord
Visibility: default
Description: SuspendThread suspends a running thread. The thread is identified with it’s handle or ID
threadHandle.
The function returns zero if successful. A nonzero return value indicates failure.
Errors: If a failure occurred, a nonzero result is returned. The meaning is system dependent.
See also: ResumeThread (1519), KillThread (1493)
75.11.332 Swap
Synopsis: Swap high and low bytes/words of a variable
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.
Listing: ./refex/ex69.pp
Program Example69 ;
begin
W: = $1234 ;
W: =Swap(W) ;
i f W<>$3412 then
1547
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.333 SwapEndian
Synopsis: Swap endianness of the argument
Declaration: function SwapEndian(const AValue: SmallInt) : SmallInt
function SwapEndian(const AValue: Word) : Word
function SwapEndian(const AValue: LongInt) : LongInt
function SwapEndian(const AValue: DWord) : DWord
function SwapEndian(const AValue: Int64) : Int64
function SwapEndian(const AValue: QWord) : QWord
Visibility: default
Description: SwapEndian will swap the endianness of the bytes in its argument.
Errors: None.
See also: hi (1476), lo (1496), swap (1547), BEToN (1425), NToBE (1504), NToLE (1504), LEToN (1495)
75.11.334 SysAllocMem
Synopsis: System memory manager: Allocate memory
75.11.335 SysAssert
Synopsis: Standard Assert failure implementation
Declaration: procedure SysAssert(const Msg: ShortString; const FName: ShortString;
LineNo: LongInt; ErrorAddr: Pointer)
Visibility: default
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.
1548
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.336 SysBacktraceStr
Synopsis: Format an address suitable for inclusion in a backtrace
Errors: None.
75.11.337 SysFlushStdIO
Synopsis: Flush all standard IO file descriptors
Declaration: procedure SysFlushStdIO
Visibility: default
Description: SysFlushStdIO calls flush (1464) on all standard file descriptors: output (1412), stdout (1412),
stderr (1412), erroutput (1411)
See also: output (1412), stdout (1412), stderr (1412), erroutput (1411), flush (1464)
75.11.338 SysFreemem
Synopsis: System memory manager free routine.
Declaration: function SysFreemem(p: pointer) : PtrUInt
Visibility: default
Description: SysFreeem is the system memory manager implementation for FreeMem (1466)
See also: FreeMem (1466)
75.11.339 SysFreememSize
Synopsis: System memory manager free routine.
75.11.340 SysGetFPCHeapStatus
Synopsis: Return the status of the FPC heapmanager
Declaration: function SysGetFPCHeapStatus : TFPCHeapStatus
Visibility: default
1549
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Description: SysGetFPCHeapStatus returns the status of the default FPC heapmanager. It is set as the default
value of the corresponding GetFPCHeapStatus (1469) function.
Errors: None. The result of this function is bogus information if the current heapmanager is not the standard
FPC heapmanager.
75.11.341 SysGetHeapStatus
Synopsis: System implementation of GetHeapStatus (1469)
Declaration: function SysGetHeapStatus : THeapStatus
Visibility: default
75.11.342 SysGetmem
Synopsis: System memory manager memory allocator.
75.11.343 SysInitExceptions
Synopsis: Initialize exceptions.
Declaration: procedure SysInitExceptions
Visibility: default
Description: SysInitExceptions initializes the exception system. This procedure should never be called
directly, it is taken care of by the RTL.
75.11.344 SysInitFPU
Synopsis: Initialize the FPU
1550
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.345 SysInitStdIO
Synopsis: Initialize standard input and output.
Declaration: procedure SysInitStdIO
Visibility: default
Description: SysInitStdIO initializes the standard input and output files: Output (1412), Input (1411) and
StdErr (1412). This routine is called by the initialization code of the system unit, there should be no
need to call it directly.
75.11.346 SysMemSize
Synopsis: System memory manager: free size.
Declaration: function SysMemSize(p: pointer) : PtrUInt
Visibility: default
Description: SysFreemSize is the system memory manager implementation for MemSize (1501)
See also: MemSize (1501)
75.11.347 SysReAllocMem
Synopsis: System memory manager: Reallocate memory
Declaration: function SysReAllocMem(var p: pointer; size: PtrUInt) : Pointer
Visibility: default
Description: SysReallocMem is a help routine for the system memory manager implementation for ReAl-
locMem (1516).
See also: ReAllocMem (1516)
75.11.348 SysResetFPU
Synopsis: Reset the floating point unit.
Declaration: procedure SysResetFPU
Visibility: default
Description: SysResetFPU resets the floating point unit. There should normally be no need to call this unit;
the compiler itself takes care of this.
75.11.349 SysSetCtrlBreakHandler
Synopsis: System CTRL-C handler
Declaration: function SysSetCtrlBreakHandler(Handler: TCtrlBreakHandler)
: TCtrlBreakHandler
Visibility: default
Description: SysSetCtrlBreakHandler sets the CTRL-C handler to the Handler callback, and returns
the previous value of the handler.
See also: TCtrlBreakHandler (1381)
1551
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.350 SysTryResizeMem
Synopsis: System memory manager: attempt to resize memory.
75.11.351 ThreadGetPriority
Synopsis: Return the priority of a thread.
Declaration: function ThreadGetPriority(threadHandle: TThreadID) : LongInt
Visibility: default
Description: ThreadGetPriority returns the priority of thread TThreadID to Prio. The returned priority
is a value between -15 and 15.
Errors: None.
75.11.352 ThreadSetPriority
Synopsis: Set the priority of a thread.
Declaration: function ThreadSetPriority(threadHandle: TThreadID; Prio: LongInt)
: Boolean
Visibility: default
Description: ThreadSetPriority sets the priority of thread TThreadID to Prio. Priority is a value be-
tween -15 and 15.
Errors: None.
75.11.353 ThreadSwitch
Synopsis: Signal possibility of thread switch
Declaration: procedure ThreadSwitch
Visibility: default
Description: ThreadSwitch signals the operating system that the thread should be suspended and that another
thread should be executed.
This call is a hint only, and may be ignored.
1552
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.354 ToSingleByteFileSystemEncodedFileName
Synopsis: Convert string to encoding for use in single-byte file system API
75.11.355 Trunc
Synopsis: Truncate a floating point value.
Declaration: function Trunc(d: ValReal) : Int64
Visibility: default
Description: Trunc returns the integer part of X, which is always smaller than (or equal to) X in absolute value.
Errors: None.
See also: Frac (1465), Int (1487), Round (1523)
Listing: ./refex/ex70.pp
Program Example70 ;
begin
Writeln ( Trunc ( 1 2 3 . 4 5 6 ) ) ; { Prints 123 }
Writeln ( Trunc ( − 1 2 3 . 4 5 6 ) ) ; { Prints −123 }
Writeln ( Trunc ( 1 2 . 3 4 5 6 ) ) ; { Prints 12 }
Writeln ( Trunc ( − 1 2 . 3 4 5 6 ) ) ; { Prints −12 }
end .
75.11.356 Truncate
Synopsis: Truncate the file at position
Declaration: procedure Truncate(var F: File)
Visibility: default
Description: Truncate truncates the (opened) file F at the current file position.
1553
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Errors: Depending on the state of the {$I} switch, a runtime error can be generated if there is an error. In
the {$I-} state, use IOResult to check for errors.
See also: Append (1416), Filepos (1458), Seek (1527)
Listing: ./refex/ex71.pp
Program Example71 ;
Var F : F i l e of l o n g i n t ;
I , L : Longint ;
begin
Assign ( F , ' t e s t . tmp ' ) ;
Rewrite ( F ) ;
For I :=1 to 10 Do
Write ( F , I ) ;
W r i t e l n ( ' F i l e s i z e b e f o r e Truncate : ' , FileSize (F ) ) ;
Close ( f ) ;
Reset ( F ) ;
Repeat
Read ( F , I ) ;
U n t i l i =5;
Truncate ( F ) ;
W r i t e l n ( ' F i l e s i z e a f t e r Truncate : ' , Filesize (F ) ) ;
Close ( f ) ;
end .
75.11.357 TryEnterCriticalSection
Synopsis: Try entering a critical section
75.11.358 TypeInfo
Synopsis: Return pointer to type information for type
Declaration: function TypeInfo(const T: AnyType) : Pointer
Visibility: default
Description: TypeInfo is a compiler intrinsic: it returns a pointer to the generated type information (RTTI) for
the type T. If no type information was yet generated for the type, this statement will ensure that type
information is available, i.e. the result is always non-nil.
See also: Default (1443), TypeOf (1555), GetTypeKind (1472), Initialize (1484), Finalize (1462)
1554
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.359 TypeOf
Synopsis: Return pointer to VMT of an object
Declaration: function TypeOf(T: TObjectType) : Pointer
Visibility: default
Description: TypeOf is a compiler intrinsic: it returns a pointer to the VMT of the object type T.
See also: Default (1443), TypeInfo (1554), GetTypeKind (1472)
75.11.360 UCS4StringToUnicodeString
Synopsis: Convert a UCS-4 encoded string to a Unicode string
Declaration: function UCS4StringToUnicodeString(const s: UCS4String) : UnicodeString
Visibility: default
Description: UCS4StringToUnicodeString converts the UCS-4 encoded string S to a Unicode string and
returns the resulting string.
This function requires the widestring manager.
See also: UnicodeStringToUCS4String (1557)
75.11.361 UCS4StringToWideString
Synopsis:
Declaration: function UCS4StringToWideString(const s: UCS4String) : WideString
Visibility: default
Description:
75.11.362 Unassigned
Synopsis: Unassigned variant.
Declaration: function Unassigned : Variant
Visibility: default
75.11.363 UnicodeCharLenToString
Synopsis: Convert a memory buffer with Unicode characters to a unicodestring
Declaration: function UnicodeCharLenToString(S: PUnicodeChar; Len: SizeInt)
: UnicodeString
Visibility: default
Description: UnicodeCharLenToString converts the Unicode characters in buffer S with at most len bytes
length, to a unicodestring and returns the result.
This function requires the use of a widestring manager.
Errors: No checking is done to see if the pointer S or length len are valid.
See also: StringToUnicodeChar (1545), UnicodeCharToString (1556)
1555
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.364 UnicodeCharLenToStrVar
Synopsis: Convert a memory buffer with Unicode characters to an ansistring
Visibility: default
Description: UnicodeCharLenToString converts the Unicode characters in buffer S with at most len bytes
length, to an ansistring and returns the result in Dest
This function does the same as UnicodeCharLenToString (1555).
Errors: No checking is done to see if the pointer S or length len are valid.
75.11.365 UnicodeCharToString
Synopsis: Convert Unicode character to string
75.11.366 UnicodeCharToStrVar
Synopsis: Convert a null-terminated memory buffer with Unicode characters to an ansistring
Declaration: procedure UnicodeCharToStrVar(S: PUnicodeChar; out Dest: AnsiString)
Visibility: default
Description: UnicodeCharLenToString converts the Unicode characters in buffer S up to the first null
word, to an ansistring and returns the result in Dest
This function does the same as UnicodeCharToString (1556).
Errors: No checking is done to see if the pointer S is valid.
See also: StringToUnicodeChar (1545), UnicodeCharToString (1556), UnicodeCharLenToString (1555), Uni-
codeCharToString (1556)
1556
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.367 UnicodeStringToUCS4String
Synopsis: Convert a Unicode string to a UCS-4 string.
75.11.368 UnicodeToUtf8
Synopsis:
Visibility: default
Description:
75.11.369 UniqueString
Synopsis: Make sure reference count of string is 1
75.11.370 UnloadLibrary
Synopsis: Unload a previously loaded library
1557
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.371 UnlockResource
Synopsis: Unlock a previously locked resource
75.11.372 UnPack
Synopsis: Create unpacked array from packed array
Declaration: procedure UnPack(const Z: PackedArrayType; out A: UnpackedArrayType;
StartIndex: TIndexType)
Visibility: default
Description: UnPack will copy the elements of a packed array (Z) to an unpacked array (A). All elements in Z
are copied to A, starting at index StartIndex in A. The type of the index variable StartIndex
must match the type of the index of A.
Obviously, the type of the elements of the arrays A and Z must match.
See also: Pack (1507)
75.11.373 UpCase
Synopsis: Convert a string to all uppercase.
Declaration: function UpCase(const s: shortstring) : shortstring
function UpCase(c: Char) : Char
function UpCase(const s: ansistring) : ansistring
function UpCase(const s: UnicodeString) : UnicodeString
function UpCase(c: UnicodeChar) : UnicodeChar
function UpCase(const s: WideString) : WideString
Visibility: default
Description: Upcase returns the uppercase version of its argument C. If its argument is a string, then the com-
plete 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.
Listing: ./refex/ex72.pp
1558
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
program Example72 ;
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.374 Utf8CodePointLen
Synopsis: Length of an UTF-8 codepoint.
Description: Utf8CodePointLen returns the length of the UTF-8 codepoint starting at the beginning of P. It
will look at at most MaxLookAhead bytes to do create this codepoint. If IncludeCombiningDiacriticalMarks
is true, combining diacritical marks trailing the first codepoint (which itself can also be such a mark)
will be considered to be part of the codepoint.
If the function returns a value > 0, then this is the number of bytes occupied by the codepoint and, if
requested, the trailing combining diacritical marks. If the result = 0, this means that all bytes within
the requested MaxLookAhead could be part of a single valid codepoint and, if requested, its trailing
diacritical marks, but that the codepoint is incomplete and more bytes need to be looked at. If the
result is < 0, then the function determined that the codepoint was invalid after processing the number
of bytes equal to the absolute value of the function result.
If IncludeCombiningDiacriticalMarks is True, then
•If the function processes all MaxLookAhead bytes, it will return the value MaxLookAhead
rather than 0, even though in theory more combining diacritical marks might follow if more
bytes would be looked at. Therefore, in order to ascertain that all combining diacritical marks
are processed, pass all bytes at once to this function.
•If an invalid sequence is detected while processing a potential combining diacritical mark after
a valid codepoint has been found already, the function will return the length of this valid code-
point (plus that of any preceding valid combining diacritical marks) as a positive value. The
idea is that this invalid sequence at the end is by definition not a combining diacritical mark
(since all of those are valid sequences) and hence should not render the preceding codepoint
invalid.
Errors: None.
75.11.375 UTF8Decode
Synopsis: Convert an UTF-8 encoded ansistring to a unicodestring
1559
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
See also: UTF8Encode (1560), Utf8ToAnsi (1560), SetWideStringManager (1537), Utf8ToUnicode (1561)
75.11.376 UTF8Encode
Synopsis: Convert a widestring or unicodestring to an UTF-8 encoded ansistring
Declaration: function UTF8Encode(const s: RawByteString) : RawByteString
function UTF8Encode(const s: UnicodeString) : RawByteString
function UTF8Encode(const s: WideString) : RawByteString
Visibility: default
Description: UTF8Encode converts an ansistring or widestring S to the equivalent UTF-8 encoded Unicode
string and returns this resulting string. It calls the low-level UnicodeToUTF8 (1557) function to do
the actual work.
The resulting string has code page CP_UTF8.
See also: UTF8Decode (1559), Utf8ToAnsi (1560), UnicodeToUtf8 (1557), SetWideStringManager (1537)
75.11.377 Utf8ToAnsi
Synopsis: Convert a UTF-8 encoded Unicode string to an ansistring
75.11.378 UTF8ToString
Synopsis: Convert UTF8 to Unicode String
Visibility: default
Description: UTF8ToString converts a UTF8 single byte string to a UTF16 encoded unicodestring. The source
string S is interpreted as an array of UTF8 characters.
1560
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.379 Utf8ToUnicode
Synopsis: Convert a buffer with UTF-8 characters to widestring characters
Declaration: function Utf8ToUnicode(Dest: PUnicodeChar; Source: PChar;
MaxChars: SizeInt) : SizeInt
function Utf8ToUnicode(Dest: PUnicodeChar; MaxDestChars: SizeUInt;
Source: PChar; SourceBytes: SizeUInt) : SizeUInt
Visibility: default
Description: Utf8ToUnicode converts the buffer in Source with a length of SourceBytes or for a maxi-
mum length of MaxChars (or MaxDestChars) widestring characters to the buffer pointed to by
Dest.
The function returns the number of copied widestring characters.
Errors: On error, -1 is returned.
See also: UTF8Encode (1560), UTF8Decode (1559), Utf8ToAnsi (1560), SetWideStringManager (1537)
75.11.380 Val
Synopsis: Calculate numerical/enumerated value of a string.
Declaration: procedure Val(const S: string; var V; var Code: Word)
Visibility: default
Description: Val converts the value represented in the string S to a numerical value or an enumerated value,
and stores this value in the variable V, which can be of type Longint, Real and Byte or any
enumerated type. If the conversion isn’t successful, then the parameter Code contains the index of
the character in S which prevented the conversion. The string S is allowed to contain spaces in the
beginning.
The string S can contain a number in decimal, hexadecimal, binary or octal format, as described in
the language reference. For enumerated values, the string must be the name of the enumerated value.
The name is searched case insensitively.
For hexadecimal values, the prefix ’0x’ or ’x’ (case insensitive) may be used as well.
The conversion to enumerated exists only as of version 2.3.1 (or later) of the compiler.
Errors: If the conversion doesn’t succeed, the value of Code indicates the position where the conversion
went wrong. The value of V is then undefined.
See also: Str (1542)
Listing: ./refex/ex74.pp
Program Example74 ;
begin
Val ( ParamStr ( 1 ) , I , Code ) ;
I f Code<>0 then
Writeln ( ' Error at p o s i t i o n ' , code , ' : ' , Paramstr ( 1 ) [ Code ] )
else
W r i t e l n ( ' Value : ' , I ) ;
end .
1561
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.381 VarArrayGet
Synopsis: Get a value from a single cell of a variant array
Declaration: function VarArrayGet(const A: Variant; const Indices: Array of LongInt)
: Variant
Visibility: default
Description: VarArrayGet returns the value in the variant array A at the location indicated by Indices. Thus
the statement
B:=VarArrayGet(A,[2,1]);
is equivalent to
B:=A[2,1];
The difference is that the previous is usable when the amount of indices is not known at compile
time.
Errors: If the number of indices is wrong (or out of range) an exception may be raised.
See also: VarArrayPut (1562)
75.11.382 VarArrayPut
Synopsis: Put a value in a single cell of a variant array
Declaration: procedure VarArrayPut(var A: Variant; const Value: Variant;
const Indices: Array of LongInt)
Visibility: default
Description: VarArrayPut puts Value in the variant array A at the location indicated by Indices. Thus the
statement
VarArrayPut(A,B,[2,1]);
is equivalent to
A[2,1]:=B;
The difference is that the previous is usable when the amount of indices is not known at compile
time.
Errors: If the number of indices is wrong (or out of range) an exception may be raised.
See also: VarArrayGet (1562)
75.11.383 VarArrayRedim
Synopsis: Redimension a variant array
Declaration: procedure VarArrayRedim(var A: Variant; HighBound: SizeInt)
Visibility: default
Description: VarArrayRedim re-sizes the first dimension of the variant array A, giving it a new high bound
HighBound. Obviously, A must be a variant array for this function to work.
1562
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.384 VarCast
Synopsis: Cast a variant to a certain type
Declaration: procedure VarCast(var dest: variant; const source: variant;
vartype: LongInt)
Visibility: default
Description: VarCast converts the variant in Source to the type indicated in VarType and returns the result
in dest. The VarType must be one of the predefined VarNNN constants.
Errors: If the conversion is not possible because the value cannot be correctly casted, then a run-time error
or an exception may occur.
75.11.385 WaitForThreadTerminate
Synopsis: Wait for a thread to terminate.
Declaration: function WaitForThreadTerminate(threadHandle: TThreadID;
TimeoutMs: LongInt) : DWord
Visibility: default
Description: WaitForThreadTerminate waits for a thread to finish its execution. The thread is identified
by it’s handle or ID threadHandle. If the thread does not exit within TimeoutMs milliseconds,
the function will return with an error value.
The function returns the exit code of the thread.
Not all platforms support the timeout parameter: the Unix platforms (with threads support based on
pthreads) do not support timeout, and will wait indefinitely for the thread to exit.
See also: EndThread (1449), KillThread (1493)
75.11.386 WideCharLenToString
Synopsis: Convert a length-limited array of widechar to an unicodestring
Declaration: function WideCharLenToString(S: PWideChar; Len: SizeInt) : UnicodeString
Visibility: default
Description: WideCharLenToString converts at most Len widecharacters from the null-terminated widechar
array S to an unicodestring, and returns the unicodestring.
Errors: No validity checking is performed on S. Passing an invalid pointer may lead to access violations.
See also: StringToWideChar (1545), WideCharToString (1564), WideCharToStrVar (1564), WideCharLen-
ToStrVar (1563)
75.11.387 WideCharLenToStrVar
Synopsis: Convert a length-limited array of widechar to an ansistring
Declaration: procedure WideCharLenToStrVar(Src: PWideChar; Len: SizeInt;
out Dest: UnicodeString)
procedure WideCharLenToStrVar(Src: PWideChar; Len: SizeInt;
out Dest: AnsiString)
1563
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Visibility: default
Description: WideCharLenToString converts at most Len widecharacters from the null-terminated widechar
array Src to an ansistring or Unicode string, and returns the resulting in Dest.
Errors: No validity checking is performed on Src. Passing an invalid pointer may lead to access violations.
75.11.388 WideCharToString
Synopsis: Convert a null-terminated array of widechar to an unicodestring
Declaration: function WideCharToString(S: PWideChar) : UnicodeString
Visibility: default
Description: WideCharToString converts the null-terminated widechar array S to an unicodestring, and re-
turns the unicodestring.
Errors: No validity checking is performed on Src. Passing an invalid pointer, or an improperly terminated
array may lead to access violations.
See also: StringToWideChar (1545), WideCharToStrVar (1564), WideCharLenToStrVar (1563), WideCharLen-
ToString (1563)
75.11.389 WideCharToStrVar
Synopsis: Convert a null-terminated array of widechar to an ansistring
75.11.390 WideStringToUCS4String
Synopsis: Convert a widestring to a UCS-4 encoded string.
Declaration: function WideStringToUCS4String(const s: WideString) : UCS4String
Visibility: default
1564
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.391 Write
Synopsis: Write variable to a text file or standard output
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 conver-
sion 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 represen-
tation 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 it’s positive, and a minus sign if it’s 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 programmer’s responsibility to make sure
that the codepage of the string matches the codepage of the console.
Remark Note that on MS Windows GUI applications do not have a standard output by default: Standard file
descriptors are available only when the
{$APPPTYPE CONSOLE}
Errors: If an error occurs, a run-time error is generated. This behavior can be controlled with the {$I}
switch.
See also: WriteLn (1566), Read (1513), Readln (1514), Blockwrite (1427)
1565
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.11.392 WriteBarrier
Synopsis: Memory write barrier
75.11.393 WriteLn
Synopsis: Write variable to a text file or standard output and append newline
Declaration: procedure WriteLn(V1: Type1)
procedure WriteLn(V1: Type1; V2: type2)
procedure WriteLn(V1: Type1; V2: Type2; V3: Type3)
procedure WriteLn(var F: Text; V1: Type1)
procedure WriteLn(var F: Text; V1: Type1; V2: type2)
procedure WriteLn(var F: Text; V1: Type1; V2: Type2; V3: Type3)
Visibility: default
Description: WriteLn does the same as Write (1565) for text files, and emits a Carriage Return - LineFeed
character pair after that. If the parameter F is omitted, standard output is assumed. If no variables
are specified, a newline character sequence is emitted, resulting in a new line in the file F.
Remark The newline character is determined by the slinebreak (1356) constant.
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 programmer’s responsibility to make sure
that the codepage of the string matches the codepage of the console.
More details can be found in the Write (1565) description.
Errors: If an error occurs, a run-time error is generated. This behavior can be controlled with the {$I}
switch.
See also: Write (1565), Read (1513), Readln (1514), Blockwrite (1427), slinebreak (1356)
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 10 do
1566
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
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.394 WriteStr
Synopsis: Write variables to a string
Declaration: procedure WriteStr(out S: string; Args: Arguments)
Visibility: default
Description: WriteStr behaves like Write (1565), except that it stores its output in the string variable S instead
of a file. Semantically, the WriteStr call is equivalent to writing the arguments to a file using the
Write call, and then reading them into S using the Read call from the same file:
var
F : Text;
begin
Rewrite(F);
Write(F,Args);
Close(F);
Reset(F);
Read(F,S);
Close(F);
end;
75.12 TDoubleRec
TDoubleRec = packed record
private
Bias = $3FF;
function GetExp
: QWord;
procedure SetExp(e: QWord);
function GetSign : Boolean
;
procedure SetSign(s: Boolean);
function GetFrac : QWord;
procedure
SetFrac(e: QWord);
public
function Mantissa(IncludeHiddenBit: Boolean
) : QWord;
function Fraction : ValReal;
function Exponent : LongInt
1567
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
;
property Sign : Boolean;
property Exp : QWord;
property Frac
: QWord;
function SpecialType : TFloatSpecial;
procedure BuildUp
(const _Sign: Boolean; const _Mantissa: QWord;
const _Exponent: LongInt);
case Byte of
0: (
public
Bytes : Array
[0..7] of Byte;
);
1: (
public
Words : Array[0..3] of Word;
);
2
: (
public
Data : QWord;
);
3: (
public
Value : Double;
);
end
TDoubleRec models the memory layout of a double value when using software floating point math.
75.12.3 TDoubleRec.Mantissa
Synopsis: Mantissa of the floating point value
1568
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.12.4 TDoubleRec.Fraction
Synopsis: Fraction of the floating point value
Declaration: function Fraction : ValReal
Visibility: public
Description: Fraction returns the fraction (value after decimal) of the floating point value.
See also: TDoubleRec.Mantissa (1568), TDoubleRec.Exponent (1569), TDoubleRec.SpecialType (1569)
75.12.5 TDoubleRec.Exponent
Synopsis: Exponent of the floating point value
Declaration: function Exponent : LongInt
Visibility: public
Description: Exponent returns the exponent (X in m*2X̂ representation) of the floating point value.
See also: TDoubleRec.Fraction (1569), TDoubleRec.Mantissa (1568), TDoubleRec.SpecialType (1569)
75.12.6 TDoubleRec.SpecialType
Synopsis: Is the floating point value special ?
Declaration: function SpecialType : TFloatSpecial
Visibility: public
Description: SpecialType returns special characteristics of the floating point value, if any. See TFLoatSpecial
(1384) for an explanation of the various special values.
See also: TDoubleRec.Fraction (1569), TDoubleRec.Mantissa (1568), TDoubleRec.Exponent (1569), TFLoat-
Special (1384)
75.12.7 TDoubleRec.BuildUp
Synopsis: Build a double value
Declaration: procedure BuildUp(const _Sign: Boolean; const _Mantissa: QWord;
const _Exponent: LongInt)
Visibility: public
Description: Buildup will build a double value from the given _Sign, _Mantissa and _Exponent.
See also: TDoubleRec.Mantissa (1568), TDoubleRec.Sign (1570), TDoubleRec.Exp (1570)
1569
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.12.8 TDoubleRec.Sign
Synopsis: Sign of the floating point value
75.12.9 TDoubleRec.Exp
Synopsis: Exponent bitpattern representation
Declaration: Property Exp : QWord
Visibility: public
Access: Read,Write
Description: Exp returns the internal bit representation of the exponent of the floating point value.
See also: TDoubleRec.Sign (1570), TDoubleRec.Exponent (1569)
75.12.10 TDoubleRec.Frac
Synopsis: Fractional part of double
Description: Frac is the fractional part of the Double. This is the bit pattern representing the fractional part
including the preceding 1. (The mantissa is that bit pattern without the preceding 1)
See also: Frac (1465)
75.13 TExtended80Rec
TExtended80Rec = packed record
private
Bias = $3FFF;
function
GetExp : QWord;
procedure SetExp(e: QWord);
function GetSign
: Boolean;
procedure SetSign(s: Boolean);
public
function Mantissa
(IncludeHiddenBit: Boolean) : QWord;
function Fraction : Extended
;
function Exponent : LongInt;
1570
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
TExtended80Rec models the memory layout of an extended value when using software floating
point math.
75.13.3 TExtended80Rec.Mantissa
Synopsis: Mantissa of the floating point value
Declaration: function Mantissa(IncludeHiddenBit: Boolean) : QWord
1571
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Visibility: public
Description: Mantissa returns the Mantissa part (bit pattern of the significand, skipping the hidden bit) of the
floating point value.
See also: TExtended80Rec.Fraction (1572), TExtended80Rec.Exponent (1572), TExtended80Rec.SpecialType
(1572)
75.13.4 TExtended80Rec.Fraction
Synopsis: Fraction of the floating point value
Declaration: function Fraction : Extended
Visibility: public
Description: Fraction returns the fraction (value after decimal) of the floating point value.
See also: TExtended80Rec.Mantissa (1571), TExtended80Rec.Exponent (1572), TExtended80Rec.SpecialType
(1572)
75.13.5 TExtended80Rec.Exponent
Synopsis: Exponent of the floating point value
Declaration: function Exponent : LongInt
Visibility: public
Description: Exponent returns the exponent (the X in the m*2X̂ representation) of the floating point value.
75.13.6 TExtended80Rec.SpecialType
Synopsis: Is the floating point value special ?
Declaration: function SpecialType : TFloatSpecial
Visibility: public
Description: SpecialType returns special characteristics of the floating point value, if any. See TFLoatSpecial
(1384) for an explanation of the various special values.
See also: TExtended80Rec.Fraction (1572), TExtended80Rec.Mantissa (1571), TExtended80Rec.Exponent
(1572), TFLoatSpecial (1384)
75.13.7 TExtended80Rec.BuildUp
Declaration: procedure BuildUp(const _Sign: Boolean; const _Mantissa: QWord;
const _Exponent: LongInt)
Visibility: public
1572
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.13.8 TExtended80Rec.Sign
Synopsis: Sign of the floating point value
75.13.9 TExtended80Rec.Exp
Synopsis: Exponent representation
Declaration: Property Exp : QWord
Visibility: public
Access: Read,Write
Description: Exponent returns the internal bit representation of the exponent of the floating point value.
See also: TExtended80Rec.Sign (1573), TExtended80Rec.Exponent (1572)
75.14 tinterfaceentry
tinterfaceentry = record
private
function GetIID : PGuid;
function
GetIIDStr : PShortString;
public
property IID : PGuid;
property
IIDStr : PShortString;
IIDRef : ^PGuid;
VTable : Pointer;
case
Integer of
1: (
public
IOffset : SizeUInt;
);
2: (
public
IOffsetAsCodePtr
: CodePointer;
IIDStrRef : ^PShortString;
IType : tinterfaceentrytype
;
);
end
tinterfaceentry is used to store the list of Interfaces of a class. This list is stored as an array
of tinterfaceentry records.
1573
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.14.2 tinterfaceentry.IID
Synopsis: Unique GUID for this interface.
Declaration: Property IID : PGuid
Visibility: public
Access: Read
75.14.3 tinterfaceentry.IIDStr
Synopsis: Pointer to GUID string. Always assigned for COM.
Declaration: Property IIDStr : PShortString
Visibility: public
Access: Read
75.15 TSingleRec
TSingleRec = packed record
private
Bias = $7F;
function GetExp
: QWord;
procedure SetExp(e: QWord);
function GetSign : Boolean
;
procedure SetSign(s: Boolean);
function GetFrac : QWord;
procedure
SetFrac(e: QWord);
public
function Mantissa(IncludeHiddenBit: Boolean
) : QWord;
function Fraction : ValReal;
function Exponent : LongInt
;
property Sign : Boolean;
property Exp : QWord;
property Frac
: QWord;
function SpecialType : TFloatSpecial;
procedure BuildUp
(const _Sign: Boolean; const _Mantissa: QWord;
const _Exponent: LongInt);
1574
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
case Byte of
0: (
public
Bytes : Array
[0..3] of Byte;
);
1: (
public
Words : Array[0..1] of Word;
);
2
: (
public
Data : DWord;
);
3: (
public
Value : Single;
);
end
TsingleRec models the memory layout of a double value when using software floating point math.
75.15.3 TSingleRec.Mantissa
Synopsis: Mantissa of the floating point value
Declaration: function Mantissa(IncludeHiddenBit: Boolean) : QWord
Visibility: public
Description: Mantissa returns the Mantissa part (significand bitpattern without hidden bit) of the floating point
value.
See also: TsingleRec.Fraction (1576), TsingleRec.Exponent (1576), TsingleRec.SpecialType (1576)
1575
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.15.4 TSingleRec.Fraction
Synopsis: Fraction of the floating point value
75.15.5 TSingleRec.Exponent
Synopsis: Exponent of the floating point value
Declaration: function Exponent : LongInt
Visibility: public
Description: Exponent returns the exponent (X in m*2X̂ representation) of the floating point value.
See also: TsingleRec.Fraction (1576), TsingleRec.Mantissa (1575), TsingleRec.SpecialType (1576)
75.15.6 TSingleRec.SpecialType
Synopsis: Is the floating point value special ?
75.15.7 TSingleRec.BuildUp
Declaration: procedure BuildUp(const _Sign: Boolean; const _Mantissa: QWord;
const _Exponent: LongInt)
Visibility: public
75.15.8 TSingleRec.Sign
Synopsis: Sign of the floating point value
Declaration: Property Sign : Boolean
Visibility: public
Access: Read,Write
1576
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.15.9 TSingleRec.Exp
Synopsis: Exponent bitpattern representation
Declaration: Property Exp : QWord
Visibility: public
Access: Read,Write
Description: Exp returns the internal bit representation of the exponent of the floating point value.
See also: TsingleRec.Sign (1576), TsingleRec.Exponent (1576)
75.15.10 TSingleRec.Frac
Synopsis: Fractional part of single
Declaration: Property Frac : QWord
Visibility: public
Access: Read,Write
Description: Frac is the fractional part of the Single. his is the bit pattern representing the fractional part includ-
ing the preceding 1. (The mantissa is that bit pattern without the preceding 1)
See also: Frac (1465)
75.16 TVmt
TVmt = record
public
vInstanceSize : SizeInt;
vInstanceSize2
: SizeInt;
vParentRef : PPVmt;
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
1577
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
;
vAfterConstruction : CodePointer;
vBeforeDestruction : CodePointer
;
vDefaultHandlerStr : CodePointer;
vDispatch : CodePointer;
vDispatchStr : CodePointer;
vEquals : CodePointer;
vGetHashCode
: CodePointer;
vToString : CodePointer;
private
function GetvParent
: PVmt;
public
property vParent : PVmt;
end
TVMT is a record describing the VMT of a class. It’s various fields represent the available information
in the VMT, as far as it is common to all classes.
75.16.2 TVmt.vParent
Synopsis: Pointer to parent VMT
75.17 IDispatch
75.17.1 Description
IDispatch is the pascal definition of the Windows Dispatch interface definition.
1578
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.17.3 IDispatch.GetTypeInfoCount
Synopsis: Return number of properties.
75.17.4 IDispatch.GetTypeInfo
Synopsis: Return type information about properties
75.17.5 IDispatch.GetIDsOfNames
Synopsis: Return IDs of named procedures
75.17.6 IDispatch.Invoke
Synopsis: Invoke a dispatch method
Declaration: function Invoke(DispID: LongInt; const iid: TGuid; LocaleID: LongInt;
Flags: Word; var params; VarResult: pointer;
ExcepInfo: pointer; ArgErr: pointer) : HRESULT
Visibility: default
75.18 IEnumerable
75.18.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 (1580).
1579
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.18.3 IEnumerable.GetEnumerator
Synopsis: Return an enumerator interface for this class
75.19 IEnumerator
75.19.1 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;
Var
I : IEnumerator;
O : TObject;
begin
I:=MyObject.GetEnumerator;
While I.MoveNext do
begin
O:=I.GetCurrent;
// Do things
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.
1580
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.19.4 IEnumerator.GetCurrent
Synopsis: Returns the current element in the iteration cycle
Declaration: function GetCurrent : TObject
Visibility: default
Description: getCurrent should return the object instance representing the current value in the for in
loop. GetCurrent will always be called immediately after IEnumerator.MoveNext (1581) re-
turned True.
Remark The actual return type of the interface should not necessarily be TObject, it can be any type. The
compiler will check the actual return type with the type of the loop variable, and they should match.
See also: IEnumerator.MoveNext (1581), IEnumerator.Reset (1581)
75.19.5 IEnumerator.MoveNext
Synopsis: Move to the next value
Declaration: function MoveNext : Boolean
Visibility: default
Description: MoveNext should move the current item pointer to the next available item. It should return True if
an item is available, False if no more items are available. The first time it is called It will be called
at the beginning of the for loop, so it should position the enumerator on the first value (if there is one).
After MoveNext has returned True, IEnumerator.GetCurrent (1581) will be called to retrieve the
item.
See also: IEnumerator.Reset (1581), IEnumerator.GetCurrent (1581)
75.19.6 IEnumerator.Reset
Synopsis: Reset the pointer
Declaration: procedure Reset
Visibility: default
Description: Reset can be implemented to put the pointer at the start of the list. It is not mandatory to implement
this method, the compiler does not use it.
See also: IEnumerator.GetCurrent (1581), IEnumerator.MoveNext (1581)
75.19.7 IEnumerator.Current
Synopsis: Return the current item
Declaration: Property Current : TObject
Visibility: default
1581
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
Access: Read
Description: Current simply is the redefinition of IEnumerator.GetCurrent (1581) as a property. It is read-only.
See also: IEnumerator.GetCurrent (1581), IEnumerator.MoveNext (1581)
75.20 IInvokable
75.20.1 Description
IInvokable is a descendent of IInterface (1366), compiled in the {$M+} state, so Run-Time Type
Information (RTTI) is generated for it.
75.21 IUnknown
75.21.1 Description
IUnknown is defined by windows. It’s the basic interface which all COM objects must implement.
The definition does not contain any code.
75.21.3 IUnknown.QueryInterface
Synopsis: Return pointer to VMT table of interface
75.21.4 IUnknown._AddRef
Synopsis: Increase reference count of the interface
1582
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.21.5 IUnknown._Release
Synopsis: Decrease reference count of the interface
75.22 TAggregatedObject
75.22.1 Description
TAggregatedObject implements an object whose lifetime is governed by an external object (or
interface). It does not implement the IUnknown interface by itself, but delegates all methods to the
controller object, as exposed in the Controller (1584) property. In effect, the reference count of the
aggregated object is the same as that of it’s controller, and additionally, all interfaces of the controller
are exposed by the aggregated object.
Note that the aggregated object maintains a non-counted reference to the controller.
Aggregated objects should be used when using delegation to implement reference counted objects:
the delegated interfaces can be implemented safely by TAggregatedObject descendents.
75.22.4 TAggregatedObject.Create
Synopsis: Create a new instance of TAggregatedObject
Declaration: constructor Create(const aController: IUnknown)
Visibility: public
Description: Create creates a new instance of TAggregatedObject on the heap, and stores a reference to
aController, so it can be exposed in the Controller (1584) property.
Errors: If not enough memory is present on the heap, an exception will be raised. If the aController
is Nil, exceptions will occur when any of the TAggregatedObject methods (actually, the
IUnknown methods) are used.
See also: Controller (1584)
1583
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.22.5 TAggregatedObject.Controller
Synopsis: Controlling instance
Description: Controller exposes the controlling object, with all interfaces it has.
The value of the controller is set when the TAggregatedObject instance is created.
See also: TAggregatedObject.Create (1583)
75.23 TContainedObject
75.23.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.
75.24 TInterfacedObject
75.24.1 Description
TInterfacedObject is a descendent of TObject (1586) which implements the IUnknown (1582)
interface. It can be used as a base class for all classes which need reference counting.
1584
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.24.5 TInterfacedObject.destroy
Synopsis: Destroy interfaced object
Declaration: destructor destroy; Override
Visibility: public
Description: Destroy overrides the default destructor to clean up: it explicitly sets all counters to zero.
See also: IUnknown._Release (1583)
75.24.6 TInterfacedObject.AfterConstruction
Synopsis: Handle reference count properly.
Errors: None.
See also: BeforeDestruction (1585)
75.24.7 TInterfacedObject.BeforeDestruction
Synopsis: Check reference count.
Declaration: procedure 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.
75.24.8 TInterfacedObject.NewInstance
Synopsis: Create a new instance
Declaration: class function NewInstance : TObject; Override
Visibility: public
Description: NewInstance initializes a new instance of TInterfacedObject (1584)
Errors: None.
1585
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.24.9 TInterfacedObject.RefCount
Synopsis: Return the current reference count
Description: RefCount returns the current reference count. This reference count cannot be manipulated, except
through the methods of IUnknown (1582). When it reaches zero, the class instance is destroyed.
See also: IUnknown (1582)
75.25 TObject
75.25.1 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).
1586
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.25.3 TObject.Create
Synopsis: TObject Constructor
Declaration: constructor Create
Visibility: public
Description: Create creates a new instance of TObject. Currently it does nothing (except allocating memory
for the new instance).
Note that allocating the memory for the object instance happens in hidden code generated as part of
every constructor, not only in TObject.Create. The hidden code calls NewInstance (1588).
1587
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.25.4 TObject.Destroy
Synopsis: TObject destructor.
Declaration: destructor Destroy; Virtual
Visibility: public
Description: Destroy is the destructor of TObject. It will clean up the memory assigned to the instance. De-
scendent 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 (1589) method,
because that one will check first if Self is different from Nil.
To clean up an instance and reset the reference to the instance, it is best to use the FreeAndNil (1705)
function.
See also: Create (1587), Free (1589)
75.25.5 TObject.newinstance
Synopsis: Allocate memory on the heap for a new instance
Declaration: class function newinstance : TObject; 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 (1589). The function returns the
newly initialized instance.
This method can be overridden to implement e.g. object pooling. Note that the method is responsible
for correctly initializing the object, i.e. zeroing out the new instance.
Errors: If not enough memory is available, a Nil pointer may be returned, or an exception may be raised.
See also: Create (1587), InitInstance (1589), InstanceSize (1591), FreeInstance (1588)
75.25.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 (1588), InitInstance (1589), NewInstance (1588)
1588
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.25.7 TObject.SafeCallException
Synopsis: Handle exception object
75.25.8 TObject.DefaultHandler
Synopsis: Default handler for integer message handlers.
Declaration: procedure DefaultHandler(var message); 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 (1593) method.
See also: Dispatch (1593), DefaultHandlerStr (1593)
75.25.9 TObject.Free
Synopsis: Check for Nil and call destructor.
Declaration: procedure Free
Visibility: public
Description: Free will check the Self pointer and calls Destroy (1588) if it is different from Nil. This is a
safer method than calling Destroy directly. If a reference to the object must be reset as well (a
recommended technique), then the function FreeAndNil (1705) should be called.
Errors: None.
75.25.10 TObject.InitInstance
Synopsis: Initialize a new class instance.
Declaration: class function InitInstance(instance: pointer) : TObject
Visibility: public
Description: InitInstance initializes the memory pointer to by Instance. This means that the VMT is
initialized, and the interface pointers are set up correctly. The function returns the newly initialized
instance.
See also: NewInstance (1588), Create (1587)
1589
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.25.11 TObject.CleanupInstance
Synopsis: Finalize the class instance.
75.25.12 TObject.ClassType
Synopsis: Return a "class of" pointer for the current class
Declaration: class function ClassType : TClass
Visibility: public
Description: ClassType returns a TClass (1380) class type reference for the current class.
See also: TClass (1380), ClassInfo (1590), ClassName (1590)
75.25.13 TObject.ClassInfo
Synopsis: Return a pointer to the type information for this class.
75.25.14 TObject.ClassName
Synopsis: Return the current class name.
Declaration: class function ClassName : shortstring
Visibility: public
Description: ClassName returns the class name for the current class. To check for the class name, you can use
the ClassNameIs (1591) class method.
Errors: None.
See also: ClassInfo (1590), ClassType (1590), ClassNameIs (1591)
1590
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.25.15 TObject.ClassNameIs
Synopsis: Check whether the class name equals the given name.
75.25.16 TObject.ClassParent
Synopsis: Return the parent class.
Declaration: class function ClassParent : TClass
Visibility: public
Description: ClassParent returns the class of the parent class of the current class. This is always different
from Nil, except for TObject.
Errors: None.
75.25.17 TObject.InstanceSize
Synopsis: Return the size of an instance.
Declaration: class function InstanceSize : SizeInt
Visibility: public
Description: InstanceSize returns the number of bytes an instance takes in memory. This is Just the memory
occupied by the class structure, and does not take into account any additional memory that might be
allocated by the constructor of the class.
Errors: None.
See also: InitInstance (1589), ClassName (1590), ClassInfo (1590), ClassType (1590)
75.25.18 TObject.InheritsFrom
Synopsis: Check whether class is an ancestor.
Declaration: class function InheritsFrom(aclass: TClass) : Boolean
Visibility: public
Description: InheritsFrom returns True if AClass is an ancestor class from the current class, and returns
false if it is not.
See also: ClassName (1590), ClassInfo (1590), ClassType (1590), TClass (1380)
1591
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.25.19 TObject.StringMessageTable
Synopsis: Return a pointer to the string message table.
Declaration: class function StringMessageTable : pstringmessagetable
Visibility: public
Description: StringMessageTable returns a pointer to the string message table, which can be used to look
up methods for dispatching a string message. It is used by the DispatchStr (1594) method.
Errors: If there are no string message handlers, nil is returned.
See also: DispatchStr (1594), Dispatch (1593)
75.25.20 TObject.MethodAddress
Synopsis: Return the address of a method
Declaration: class function MethodAddress(const name: shortstring) : CodePointer
Visibility: public
Description: MethodAddress returns the address of a method, searching the method by its name. The Name
parameter specifies which method should be taken. The search is conducted in a case-insensitive
manner.
Errors: If no matching method is found, Nil is returned.
See also: MethodName (1592), FieldAddress (1592)
75.25.21 TObject.MethodName
Synopsis: Return the name of a method.
Declaration: class function MethodName(address: CodePointer) : shortstring
Visibility: public
Description: MethodName searches the VMT for a method with the specified address and returns the name
of the method.
Errors: If no method with the matching address is found, an empty string is returned.
See also: MethodAddress (1592), FieldAddress (1592)
75.25.22 TObject.FieldAddress
Synopsis: Return the address of a field.
Declaration: function FieldAddress(const name: shortstring) : pointer
Visibility: public
Description: FieldAddress returns the address of the field with name name. The address is the address of
the field in the current class instance.
Errors: If no field with the specified name is found, Nil is returned.
See also: MethodAddress (1592), MethodName (1592)
1592
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.25.23 TObject.AfterConstruction
Synopsis: Method called after the constructor was called.
75.25.24 TObject.BeforeDestruction
Synopsis: Method called before the destructor is called.
Declaration: procedure 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 be-
haviour that is executed before the destructor has finished executing. (for instance, call an event
handler)
Errors: None.
75.25.25 TObject.DefaultHandlerStr
Synopsis: Default handler for string messages.
Declaration: procedure DefaultHandlerStr(var message); 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 must be overridden by descendent classes to provide specific message handling
behaviour.
75.25.26 TObject.Dispatch
Synopsis: Dispatch an integer message
Declaration: procedure Dispatch(var message); Virtual
Visibility: public
1593
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
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 (1589) method,
which can be overridden by descendent classes to add custom handling of messages.
See also: DispatchStr (1594), DefaultHandler (1589)
75.25.27 TObject.DispatchStr
Synopsis: Dispatch a string message.
Declaration: procedure DispatchStr(var message); 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 (1593) is called.
Errors: None.
75.25.28 TObject.GetInterface
Synopsis: Return a reference to an interface
Declaration: function GetInterface(const iid: TGuid; out obj) : Boolean
function GetInterface(const iidstr: shortstring; out obj) : Boolean
Visibility: public
Description: GetInterface scans the interface tables and returns a reference to the interface iid. The ref-
erence is stored in Obj which should be an interface reference. It returns True if the interface was
found, False if not.
The reference count of the interface is increased by this call.
Errors: If no interface was found, False is returned.
See also: GetInterfaceByStr (1594)
75.25.29 TObject.GetInterfaceByStr
Synopsis: Return an interface based on its GUID
1594
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.25.30 TObject.GetInterfaceWeak
Synopsis: Get a reference to an interface, not increasing the reference count
75.25.31 TObject.GetInterfaceEntry
Synopsis: Return the interface table entry by GUID
Declaration: class function GetInterfaceEntry(const iid: TGuid) : pinterfaceentry
Visibility: public
Description: GetInterfaceEntry returns the internal interface table entry for the interface identified by iid
(the GUID used in the declaration of the interface). If the interface is not implemented by the class,
the function returns Nil.
75.25.32 TObject.GetInterfaceEntryByStr
Synopsis: Return the interface table entry by string
Declaration: class function GetInterfaceEntryByStr(const iidstr: shortstring)
: pinterfaceentry
Visibility: public
Description: GetInterfaceEntryByStr returns the internal interface table entry for the interface identified
by iidstr (A string representation of the GUID used in the declaration of the interface). If the
interface is not implemented by the class, the function returns Nil.
75.25.33 TObject.GetInterfaceTable
Synopsis: Return a pointer to the table of implemented interfaces for a class
Declaration: class function GetInterfaceTable : pinterfacetable
Visibility: public
Description: GetInterfaceTable returns a pointer to the internal table of implemented interfaces for a
class. The result will always point to a valid address, if the class implements no interfaces the
EntryCount field of the interface table will be zero.
See also: TObject.GetInterfaceByStr (1594), TObject.GetInterfaceEntry (1595)
1595
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.25.34 TObject.UnitName
Synopsis: Unit name
75.25.35 TObject.QualifiedClassName
Synopsis: Fully qualified classname
Declaration: class function QualifiedClassName : ansistring
Visibility: public
Description: QualifiedClassName is the classname TObject.ClassName (1590) prepended with the unit
name TObject.UnitName (1596) of the unit in which the class is defined. As such, this is a unique
name for each class in the program.
See also: TObject.ClassName (1590), TObject.UnitName (1596)
75.25.36 TObject.Equals
Synopsis: Check if two objects are equal.
Declaration: function Equals(Obj: TObject) : Boolean; 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 (1596), TObject.ToString (1597)
75.25.37 TObject.GetHashCode
Synopsis: Return a hash code for the object
1596
CHAPTER 75. REFERENCE FOR UNIT ’SYSTEM’
75.25.38 TObject.ToString
Synopsis: Return a string representation for the object
1597
Chapter 76
Name Page
errors 716
sysconst ??
Unix 2049
unixtype 2087
76.2 Overview
This documentation describes the sysutils unit. The sysutils unit was started by Gertjan Schouten,
and completed by Michael Van Canneyt. It aims to be compatible to the Delphi sysutils unit, but
in contrast with the latter, it is designed to work on multiple platforms. It is implemented on all
supported platforms.
See also: TGuidHelper (1826), TStringHelper (1865), TByteHelper (1800), TShortIntHelper (1850), TSmall-
IntHelper (1862), TWordHelper (1896), TCardinalHelper (1804), TIntegerHelper (1831), TInt64Helper
(1828), TQWordHelper (1847), TNativeIntHelper (1840), TBooleanHelper (1797), TByteBoolHelper
(1799), TWordBoolHelper (1895), TLongBoolHelper (1834), TSingleHelper (1856), TDoubleHelper
(1807), TExtendedHelper (1820)
1598
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Table 76.2:
Name Description
FileCreate (1676) Create a new file and return a handle to it.
FileOpen (1681) Open an existing file and return a file handle
FileExists (1678) Check whether a particular file exists in the file system.
DirectoryExists (1663) Check whether a directory exists in the file system.
FileSetDate (1685) Set the date of a file.
FileGetAttr (1679) Return attributes of a file.
FileSetAttr (1685) Set the attributes of a file.
DeleteFile (1662) Delete a file from the file system.
RenameFile (1725) Rename a file.
FileSearch (1683) Search for a file in a path.
ExeSearch (1669) Search for an executable
FindFirst (1687) Start a file search and return a findhandle
FindNext (1688) Find the next entry in a findhandle.
FindClose (1686) Close a find handle
FileIsReadOnly (1681) Check whether a file is read-only.
GetCurrentDir (1707) Return the current working directory of the application.
SetCurrentDir (1727) 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:
1599
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Table 76.3:
Name Description
ChangeFileExt (1649) Change the extension of a filename.
ExtractFilePath (1674) Extract the path from a filename.
ExtractFileDrive (1673) Extract the drive part from a filename.
ExtractFileName (1673) Extract the filename part from a full path filename.
ExtractFileExt (1673) Return the extension from a filename.
ExtractFileDir (1672) Extract the drive and directory part of a filename.
ExtractShortPathName (1675) Returns a 8.3 path name
ExpandFileName (1670) Expand a relative filename to an absolute filename.
ExpandFileNameCase (1670) Expand a filename entered as case insensitive to the full path as stored on the disk.
ExtractRelativepath (1674) Extract a relative path from a filename, given a base directory.
ExpandUNCFileName (1671) Expand a relative filename to an absolute UNC filename.
IncludeTrailingPathDelimiter (1715) Add trailing directory separator to a pathname, if needed.
IncludeTrailingBackslash (1715) Add trailing directory separator to a pathname, if needed.
ExcludeTrailingBackslash (1668) Strip trailing directory separator from a pathname, if needed.
ExcludeTrailingPathDelimiter (1668) Strip trailing directory separator from a pathname, if needed.
IncludeLeadingPathDelimiter (1714) Prepend a path delimiter if there is not already one.
ExcludeLeadingPathDelimiter (1668) Strip the leading path delimiter of a path
IsPathDelimiter (1719) Is the character at the given position a pathdelimiter ?
DoDirSeparators (1664) Convert known directory separators to the current directory separator.
SetDirSeparators (1728) Set the directory separators to the known directory separators.
GetDirs (1707) Return a list of directory names from a path.
ConcatPaths (1653) Concatenate an array of paths to form a single path
GetEnvironmentVariable (1709) Return the value of an environment variable.
Table 76.4:
Name Description
BCDToInt (1646) Convert BCD number to integer
CompareMem (1650) Compare two memory regions
FloatToStrF (1691) Convert float to formatted string
FloatToStr (1690) Convert float to string
FloatToText (1693) Convert float to string
FormatFloat (1704) Format a floating point value
GetDirs (1707) Split string in list of directories
IntToHex (1716) return hexadecimal representation of integer
IntToStr (1717) return decimal representation of integer
StrToIntDef (1752) Convert string to integer with default value
StrToInt (1750) Convert string to integer
StrToFloat (1749) Convert string to float
TextToFloat (1756) Convert null-terminated string to float
1600
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Table 76.5:
Name Description
DateTimeToFileDate (1656) Convert DateTime type to file date
DateTimeToStr (1656) Construct string representation of DateTime
DateTimeToString (1657) Construct string representation of DateTime
DateTimeToSystemTime (1658) Convert DateTime to system time
DateTimeToTimeStamp (1659) Convert DateTime to timestamp
DateToStr (1659) Construct string representation of date
Date (1655) Get current date
DayOfWeek (1660) Get day of week
DecodeDate (1661) Decode DateTime to year month and day
DecodeTime (1661) Decode DateTime to hours, minutes and seconds
EncodeDate (1665) Encode year, day and month to DateTime
EncodeTime (1666) Encode hours, minutes and seconds to DateTime
FormatDateTime (1703) Return string representation of DateTime
IncMonth (1715) Add 1 to month
IsLeapYear (1718) Determine if year is leap year
MSecsToTimeStamp (1722) Convert nr of milliseconds to timestamp
Now (1723) Get current date and time
StrToDateTime (1747) Convert string to DateTime
StrToDate (1746) Convert string to date
StrToTime (1753) Convert string to time
SystemTimeToDateTime (1756) Convert system time to datetime
TimeStampToDateTime (1758) Convert time stamp to DateTime
TimeStampToMSecs (1758) Convert Timestamp to number of milliseconds
TimeToStr (1759) return string representation of Time
Time (1757) Get current time
1601
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Table 76.6:
Name Description
AnsiCompareFileName (1631) Compare 2 filenames
AnsiLowerCaseFileName (1636) Create lowercase filename
AnsiUpperCaseFileName (1644) Create uppercase filename
AddDisk (1630) Add disk to list of disk drives
ChangeFileExt (1649) Change extension of file name
CreateDir (1653) Create a directory
DeleteFile (1662) Delete a file
DiskFree (1663) Free space on disk
DiskSize (1664) Total size of disk
ExpandFileName (1670) Create full file name
ExpandFileNameCase (1670) Create full file name case insensitively
ExpandUNCFileName (1671) Create full UNC file name
ExtractFileDir (1672) Extract drive and directory part of filename
ExtractFileDrive (1673) Extract drive part of filename
ExtractFileExt (1673) Extract extension part of filename
ExtractFileName (1673) Extract name part of filename
ExtractFilePath (1674) Extract path part of filename
ExtractRelativePath (1674) Construct relative path between two files
FileAge (1675) Return file age
FileDateToDateTime (1678) Convert file date to system date
FileExists (1678) Determine whether a file exists on disk
FileGetAttr (1679) Get attributes of file
FileGetDate (1680) Get date of last file modification
FileSearch (1683) Search for file in path
FileSetAttr (1685) Get file attributes
FileSetDate (1685) Get file dates
FindFirst (1687) Start finding a file
FindNext (1688) Find next file
GetCurrentDir (1707) Return current working directory
RemoveDir (1724) Remove a directory from disk
RenameFile (1725) Rename a file on disk
SameFileName (1727) Check whether 2 filenames are the same
SetCurrentDir (1727) Set current working directory
SetDirSeparators (1728) Set directory separator characters
FindClose (1686) Stop searching a file
DoDirSeparators (1664) Replace directory separator characters
1602
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Table 76.7:
Name Description
FileCreate (1676) Create a file and return handle
FileOpen (1681) Open file end return handle
FileRead (1682) Read from file
FileSeek (1684) Set file position
FileTruncate (1686) Truncate file length
FileWrite (1686) Write to file
FileClose (1676) Close file handle
15. StrPos (1743) : Returns the position of one PChar string in another?
16. StrRScan (1744) : returns a pointer to the last occurrence of on PChar string in another one.
17. StrScan (1744) : returns a pointer to the first occurrence of on PChar string in another one.
18. StrUpper (1754) : Converts a PChar to all uppercase letters.
The subsequent functions are different from their counterparts in STRINGS, although the same
examples can be used.
1603
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
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 or minutes if preceded by h or hh specifiers.
mm month or minutes if preceded by h or hh specifiers, with 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 separator
: insert time separator
"xx" literal text
’xx’ literal text
1604
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
z milliseconds
zzz milliseconds(leading zero)
[h ] hours including the hours of the full days (i.e. can be > 24).
[hh ] hours with leading zero, including the hours of the full days (i.e. can be > 24)
[ss ] seconds with leading zero, including the seconds of the full minutes, hours and days.
The forms in square brackets are only allowed if the fdoInterval (1619) option is included in the
Options argument of FormatDateTime.
The date and time separators are taken from the DefaultFormatSettings (1626) record, unless a TFor-
matSettings (1620) record is passed to the FormatDateTime (1703) function.
Note that to include any of the above characters literally in the result string, they must be enclosed in
double quotes.
Table 76.8:
Name Description
AdjustLineBreaks (1631) Convert line breaks to line breaks for system
FormatBuf (1702) Format a buffer
Format (1695) Format arguments in string
FmtStr (1694) Format buffer
QuotedStr (1724) Quote a string
StrFmt (1734) Format arguments in a string
StrLFmt (1739) Format maximum L characters in a string
TrimLeft (1760) Remove whitespace at the left of a string
TrimRight (1761) Remove whitespace at the right of a string
Trim (1759) Remove whitespace at both ends of a string
1605
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Table 76.9:
Name Description
AnsiCompareStr (1632) Compare two strings
AnsiCompareText (1633) Compare two strings, case insensitive
AnsiExtractQuotedStr (1634) Removes quotes from string
AnsiLastChar (1635) Get last character of string
AnsiLowerCase (1635) Convert string to all-lowercase
AnsiQuotedStr (1636) Quotes a string
AnsiStrComp (1637) Compare strings case-sensitive
AnsiStrIComp (1638) Compare strings case-insensitive
AnsiStrLComp (1640) Compare L characters of strings case sensitive
AnsiStrLIComp (1640) Compare L characters of strings case insensitive
AnsiStrLastChar (1639) Get last character of string
AnsiStrLower (1641) Convert string to all-lowercase
AnsiStrUpper (1643) Convert string to all-uppercase
AnsiUpperCase (1643) Convert string to all-uppercase
AppendStr (1644) Append 2 strings
AssignStr (1645) Assign value of strings on heap
CompareStr (1651) Compare two strings case sensitive
CompareText (1652) Compare two strings case insensitive
DisposeStr (1664) Remove string from heap
IsValidIdent (1719) Is string a valid pascal identifier
LastDelimiter (1720) Last occurrence of character in a string
LeftStr (1720) Get first N characters of a string
LoadStr (1721) Load string from resources
LowerCase (1721) Convert string to all-lowercase
NewStr (1722) Allocate new string on heap
RightStr (1726) Get last N characters of a string
StrAlloc (1730) Allocate memory for string
StrBufSize (1730) Reserve memory for a string
StrDispose (1733) Remove string from heap
StrPas (1742) Convert PChar to pascal string
StrPCopy (1743) Copy pascal string
StrPLCopy (1743) Copy N bytes of pascal string
UpperCase (1770) Convert string to all-uppercase
ConfigExtension is the default extension used by the GetAppConfigFile (1706) call. It can be
set to any valid extension for the current OS.
CPUEndian = TEndian.Big
DateDelta = 693594
1606
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
DriveDelim = DriveSeparator
DriveDelim refers to the system unit’s DriveSeparator constant, it is for Delphi compatibility
only.
faAnyFile = $000001FF
Use this attribute in the FindFirst (1687) call to find all matching files.
faArchive = $00000020
Attribute of a file, meaning the file has the archive bit set. Used in TSearchRec (1622) and FindFirst
(1687)
faCompressed = $00000800platform
faTemporary can be returned by FindFirst (1687) or FindNext (1688) to indicate that a returned
file is compressed (on file systems that support this).
faDirectory = $00000010
Attribute of a file, meaning the file is a directory. Used in TSearchRec (1622) and FindFirst (1687)
faEncrypted = $00004000platform
faEncrypted can be returned by FindFirst (1687) or FindNext (1688) to indicate that a returned
file is encrypted (on file systems that support this).
faHidden = $00000002platform
Attribute of a file, meaning the file is read-only. Used in TSearchRec (1622) and FindFirst (1687)
faNormal = $00000080
faNormal can be used in FindFirst (1687) to indicate that normal files must be included in the
result.
faReadOnly = $00000001
Attribute of a file, meaning the file is read-only. Used in TSearchRec (1622) and FindFirst (1687)
1607
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
faSymLink = $00000400platform
faSymLink means the file (as returned e.g. by FindFirst (1687)/FindNext (1688)), is a symlink.
It’s ignored under Windows.
faSysFile = $00000004platform
Attribute of a file, meaning the file is a system file. Used in TSearchRec (1622) and FindFirst (1687)
faTemporary = $00000100platform
faTemporary can be returned by FindFirst (1687) or FindNext (1688) to indicate that a returned
file is a temporary file.
faVirtual = $00010000platform
faVirtual can be returned by FindFirst (1687) or FindNext (1688) to indicate that a returned file
is virtual (on file systems that support this).
Attribute of a file, meaning the entry contains the volume ID. Used in TSearchRec (1622) and Find-
First (1687)
feInvalidHandle = THandle(- 1)
fmOpenRead = $0000
fmOpenRead is used in the FileOpen (1681) call to open a file in read-only mode.
fmOpenReadWrite = $0002
fmOpenReadWrite is used in the FileOpen (1681) call to open a file in read-write mode.
fmOpenWrite = $0001
fmOpenWrite is used in the FileOpen (1681) call to open a file in write-only mode.
fmShareCompat = $0000
fmOpenShareCompat is used in the FileOpen (1681) call OR-ed together with one of fmOpen-
ReadWrite (1608), fmOpenRead (1608) or fmOpenWrite (1608),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 (1681) call OR-ed together with one of fmOpenRead-
Write (1608), fmOpenRead (1608) or fmOpenWrite (1608), to open a file so other processes can
read/write the file as well.
1608
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
fmShareDenyRead = $0030
fmOpenShareRead is used in the FileOpen (1681) call OR-ed together with one of fmOpenRead-
Write (1608), fmOpenRead (1608) or fmOpenWrite (1608), 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
fmOpenShareDenyWrite is used in the FileOpen (1681) call OR-ed together with one of fmOpen-
ReadWrite (1608), fmOpenRead (1608) or fmOpenWrite (1608), to open a file so other processes
cannot write to it, they can only read.
fmShareExclusive = $0010
fmOpenShareExclusive is used in the FileOpen (1681) call OR-ed together with one of fmOpen-
ReadWrite (1608), fmOpenRead (1608) or fmOpenWrite (1608), to open a file exclusively.
fsFromBeginning = 0
fsFromBeginning is used to indicate in the FileSeek (1684) call that a seek operation should be
started at the start of the file.
fsFromCurrent = 1
fsFromBeginning is used to indicate in the FileSeek (1684) call that a seek operation should be
started at the current position in the file.
fsFromEnd = 2
fsFromBeginning is used to indicate in the FileSeek (1684) call that a seek operation should be
started at the last position in the file.
HexDisplayPrefix is used by the formatting routines to indicate that the number which follows
the prefix is in Hexadecimal notation.
HoursPerDay = 24
1609
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
LeadBytes contains the set of bytes that serve as lead byte in a MBCS string.
MAX_PATH = MaxPathLen
MAX_PATH is the maximum number of characters that a filename (including path) can contain on
the current operating system.
MinsPerHour = 60
Array with number of days in the months for leap and non-leap years.
MSecsPerSec = 1000
PathDelim = DirectorySeparator
1610
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
PathDelim refers to the system unit’s DirectorySeparator constant, it is for Delphi com-
patibility only.
PathSep = PathSeparator
PathSep refers to the system unit’s PathSeparator constant, it is for Delphi compatibility only.
pfBCB4Produced = $08000000
pfDelphi4Produced = $0C000000
pfDesignOnly = $00000002
pfExeModule = $00000000
Package is an executable
pfIgnoreDupUnits = $00000008
pfLibraryModule = $80000000
Package is a library
pfModuleTypeMask = $C0000000
pfNeverBuild = $00000001
pfPackageModule = $40000000
pfProducerMask = $0C000000
pfProducerUndefined = $04000000
1611
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
pfRunOnly = $00000004
pfV3Produced = $00000000
RTL_SIGBUS = 4
RTL_SIGDEFAULT = - 1
RTL_SIGFPE = 1
RTL_SIGILL = 3
RTL_SIGINT = 0
RTL_SIGLAST = RTL_SIGQUIT
RTL_SIGQUIT = 5
RTL_SIGSEGV = 2
SecsPerMin = 60
1612
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
The characters in this set will be used by the FindCmdLineSwitch (1687) 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 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 (1706) call on some systems.
ufImplicitUnit = $10
Unit was implicitly imported into package (did not appear in package contains list)
ufMainUnit = $01
ufOrgWeakUnit = $08
ufPackageUnit = $02
ufWeakUnit = $04
UnixDateDelta = Trunc(UnixEpoch)
76.14.2 Types
EHeapException = EHeapMemoryError
1613
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
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.
1614
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
case Integer of
0: (
public
Hi : Word;
Lo : Word;
);
1: (
public
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 (or ordering) of High and Low parts
are different on various CPUs, and may differ from what is shown in the declaration: the ordering
depends on the endianness of the CPU.
PByteArray = ^TByteArray
Generic pointer to TByteArray (1616). Use to access memory regions as a byte array.
PDayTable = ^TDayTable
1615
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
PString = ObjPas.PString
Pointer to a ansistring
PSysCharSet = ^TSysCharSet
PWordarray = ^TWordArray
Generic pointer to TWordArray (1624). Use to access memory regions as a word array.
TArray<T> = Array of T
TArray is a generic array. It can be used to define dynamic arrays in generic functions or classes.
This definition is provided for Delphi compatibility only, it is not needed in Free Pascal, where 2
array types are equal if their element types are equal.
TBeepHandler = procedure
TBeepHandler is the prototype used by the OnBeep (1627) handler. This in turn is called by the
Beep (1646) call to actually implement the beep functionality. The call takes no arguments.
TByteArray is a generic array definition, mostly for use as a base type of the PByteArray (1615)
type.
TByteBitIndex = 0..7
TBytes defines a dynamic array of bytes. This can be used to typecast e.g. strings to manipulate
them byte for byte.
TCardinalBitIndex = 0..31
TCompareOption = system.TCompareOption
TCompareOptions = system.TCompareOptions
1616
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
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.
TEndian = ObjPas.TEndian
TEndian indicates whether the platform is little endian (LSB first), or big endian (MSB first).
TEventType = (etCustom,etInfo,etWarning,etError,etDebug)
Value Explanation
etCustom Custom log event, with application-specific meaning
etDebug Debug message.
etError Error condition message
etInfo General information event message
etWarning Warning message
TEventTypes is a set type of TEventType, defined for convenience. It is used in the custom
application classes for logging purposes.
Value Explanation
ExecInheritsHandles 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 (1669) call.
TFileName = string
1617
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
TFilenameCaseMatch = (mkNone,mkExactMatch,mkSingleMatch,mkAmbiguous
)
Value Explanation
mkAmbiguous More than one file will match the filename in a case-insensitive way
mkExactMatch The filename can be used to refer to a file on the system (findfirst will find it).
mkNone No file was found
mkSingleMatch Exactly one match was found, but case didn’t match.
TFilenameCaseMatch = (mkNone,mkExactMatch,mkSingleMatch,mkAmbiguous
)
Value Explanation
mkAmbiguous More than one file will match the filename in a case-insensitive way
mkExactMatch The filename can be used to refer to a file on the system (findfirst will find it).
mkNone No file was found
mkSingleMatch Exactly one match was found, but case didn’t match.
TFileRec = FileRec
TFileSearchOption = (sfoImplicitCurrentDir,sfoStripQuotes)
Value Explanation
sfoImplicitCurrentDir Always search the current directory first, even if it is not specified.
sfoStripQuotes Strip quotes from the components in the search path.
TFileSearchOption enumerates the options that can be used in the FileSearch call to con-
trol the behaviour of the search mechanism
1618
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
TFloatFormat = (ffGeneral,ffExponent,ffFixed,ffNumber,ffCurrency)
Value Explanation
ffCurrency Monetary format.
ffExponent Scientific format.
ffFixed Fixed point format.
ffGeneral General number format.
ffNumber Fixed point format with thousand separator
TFloatFormat is used to determine how a float value should be formatted in the FloatToText
(1693) function.
TFloatRec = record
public
Exponent : Integer;
Negative : Boolean
;
Digits : Array[0..18] of Char;
end
TFloatRec is used to describe a floating point value by the FloatToDecimal (1689) function.
TFloatValue = (fvExtended,fvCurrency,fvSingle,fvReal,fvDouble,fvComp
)
Value Explanation
fvComp Comp value
fvCurrency Currency value
fvDouble Double value
fvExtended Extended value
fvReal Real value
fvSingle Single value
TFloatValue determines which kind of value should be returned in the (untyped) buffer used by
the TextToFloat (1756) function.
TFormatDateTimeOption = (fdoInterval)
Value Explanation
fdoInterval Format the time as an interval, 24+hours are presented as such
1619
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
TFormatSettings = record
public
CurrencyFormat : Byte;
NegCurrFormat
: Byte;
ThousandSeparator : Char;
DecimalSeparator : Char;
CurrencyDecimals : Byte;
DateSeparator : Char;
TimeSeparator
: Char;
ListSeparator : Char;
CurrencyString : string;
ShortDateFormat
: string;
LongDateFormat : string;
TimeAMString : string;
TimePMString
: string;
ShortTimeFormat : string;
LongTimeFormat : string;
ShortMonthNames : TMonthNameArray;
LongMonthNames : TMonthNameArray
;
ShortDayNames : TWeekNameArray;
LongDayNames : TWeekNameArray
;
TwoDigitYearCenturyWindow : Word;
end
TFormatSettings is a record that contains a copy of all variables which determine formatting
in the various string formatting routines. It is used to pass local copies of these values to the various
formatting routines in a thread-safe way.
This callback type is used by the OnGetApplicationName (1628) to return an alternative application
name.
1620
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
THandle = System.THandle
THandle refers to the definition of THandle in the system unit, and is provided for backward
compatibility only.
TInt64BitIndex = 0..63
TIntegerBitIndex = 0..31
TIntegerSet = Set of
TIntegerSet is a generic integer subrange set definition whose size fits in a single integer.
TLocaleOptions = (loInvariantLocale,loUserLocale)
Value Explanation
loInvariantLocale
loUserLocale
TLongIntBitIndex = TIntegerBitIndex
TMbcsByteType = (mbSingleByte,mbLeadByte,mbTrailByte)
Value Explanation
mbLeadByte Uses lead-byte
mbSingleByte Single bytes
mbTrailByte Uses trailing byte
TProcedure = procedure
1621
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
TQwordBitIndex = 0..63
Value Explanation
rfIgnoreCase Search case insensitive.
rfReplaceAll Replace all occurrences of the search string with the replacement string.
TSearchRec = TRawbyteSearchRec
TSearchRec is a search handle description record. It is initialized by a call to FindFirst (1687) and
can be used to do subsequent calls to FindNext (1688). It contains the result of these function calls.
It must be used to close the search sequence with a call to FindClose (1686).
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)
TShortIntBitIndex = 0..7
TSignalState = (ssNotHooked,ssHooked,ssOverridden)
Value Explanation
ssHooked A signal handler is set by the RTL code for the signal.
ssNotHooked No signal handler is set for the signal.
ssOverridden 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.
TSmallIntBitIndex = 0..15
TStringBuilder = TANSISTRINGBUILDER
TStringSplitOptions = (None,ExcludeEmpty,ExcludeLastEmpty)
1622
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Value Explanation
ExcludeEmpty Do not include empty strings in the result.
ExcludeLastEmpty
None No options specified. The default
TSymLinkRec = TRawbyteSymLinkRec
TSysLocale = record
public
DefaultLCID : Integer;
PriLangID :
Integer;
SubLangID : Integer;
case Byte of
1: (
public
FarEast
: Boolean;
MiddleEast : Boolean;
);
2: (
public
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
public
Year : Word;
Month : Word;
Day
: Word;
DayOfWeek : Word;
Hour : Word;
Minute : Word;
Second
1623
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
: Word;
MilliSecond : Word;
end
TTerminateProc is the procedural type which should be used when adding exit procedures.
TTextRec = TextRec
TTimeStamp = record
public
Time : LongInt;
Date : LongInt;
end
TTimeStamp contains a timestamp, with the date and time parts specified as separate TDateTime
values.
TUseBoolStrs = (False,True)
Value Explanation
False Numerical values should be used (0 and 1)
True String representations should be used.
TUseBoolStrs is an enumerated type which indicates whether bool strs must be used when con-
verting boolean to strings.
Because the identifiers True and False are already used for the system boolean type, You must
use the scoped identifiers to get the TUseBoolStrs versions of these 2 identifiers. Failure to do so
will result in an error.
TWordArray is a generic array definition, mostly for use as a base type of the PWordArray (1616)
type.
1624
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
TWordBitIndex = 0..15
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.
76.14.3 Variables
CurrencyDecimals : Bytedeprecated
CurrencyFormat : Bytedeprecated
CurrencyFormat is the default format string for positive currencies. It is used by the float for-
matting 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 (1626) 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 (1626) 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 (1626) instead.
DecimalSeparator : Chardeprecated
DecimalSeparator is used to display the decimal symbol in floating point numbers or curren-
cies. It is used by the float formatting routines. The initialization routines of the SysUtils unit ini-
tialize 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 (1626) in-
stead.
1625
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
DefaultFormatSettings contains the default settings for all type of formatting constants. If
no thread-specific values are specified when a formatting function is called, this record is used as a
default.
All other formatting constants refer to the fields of this variable using absolute addressing.
FalseBoolStrs contains the strings that will result in a False return value by StrToBool (1745).
FormatSettings : TFormatSettings
ListSeparator : Chardeprecated
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 (1626) 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 (1626) 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 (1626) in-
stead.
1626
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
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 (1626) instead.
NegCurrFormat : Bytedeprecated
CurrencyFormat is the default format string for negative currencies. It is used by the float for-
matting 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:
12 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 sym-
bol). 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 be-
fore the currency symbol). Ex: (1.2 $)
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.
1627
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
OnCreateGUID can be set to point to a custom routine that creates GUID values. If set, the Cre-
ateGUID (1654) 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 (1706) and GetAppConfigFile (1706)
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
OnGetTempDir can be used to provide custom behaviour for the GetTempDir (1711) 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 (1712) func-
tion. Note that the values for Prefix and Dir should be observed.
OnGetVendorName : TGetVendorNameEvent
OnGetVendorName must be set in order for VendorName (1771) to return a value. It will then
be used in GetAppConfigDir (1706) and GetAppConfigFile (1706) to determine the configuration
directory. Set it to a callback that returns the actual vendor name for the application.
OnShowException is the callback that ShowException (1728) 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 (1626) 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 (1626) instead.
1628
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
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 (1626) in-
stead.
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 (1626) instead.
SysLocale : TSysLocale
SysLocale is initialized by the initialization code of the SysUtils unit. For an explanation of the
fields, see TSysLocale (1623)
ThousandSeparator : Chardeprecated
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 (1626) 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 (1626) 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.
1629
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
TrueBoolStrs contains the strings that will result in a True return value by StrToBool (1745).
TwoDigitYearCenturyWindow : Word
76.15.2 Abort
Synopsis: Abort program execution.
Declaration: procedure Abort
Visibility: default
Description: Abort raises an EAbort (1778) exception.
See also: EAbort (1778)
76.15.3 AddDisk
Synopsis: Add a disk to the list of known disks (Unix only)
Declaration: function AddDisk(const path: string) : Byte
Visibility: default
Description: On Unix-like platforms both the DiskFree (1663) and DiskSize (1664) functions need a file on the
specified drive, since is required for the statfs system call.
These filenames are set in drivestr[0..26], and the first 4 have been preset to :
Drives 4..26 can be set by your own applications with the AddDisk call.
The AddDisk call adds Path to the names of drive files, and returns the number of the disk that
corresponds to this drive. If you add more than 21 drives, the count is wrapped to 4.
Errors: None.
See also: DiskFree (1663), DiskSize (1664)
1630
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.4 AddTerminateProc
Synopsis: Add a procedure to the exit chain.
76.15.5 AdjustLineBreaks
Synopsis: Convert possible line-endings to the currently valid line ending.
Declaration: function AdjustLineBreaks(const S: string) : string
function AdjustLineBreaks(const S: string; Style: TTextLineBreakStyle)
: string
Visibility: default
Description: AdjustLineBreaks will change all occurrences of #13 and #10 characters with the correct
line-ending characters for the current platform. This is #13#10 on Windows and Dos. On Unix-like
platforms, this is #10 and for Mac OS X it is #13.
Errors: None.
Listing: ./sysutex/ex48.pp
Program Example48 ;
{ T h i s program demonstrates t h e A d j u s t L i n e B r e a k s f u n c t i o n }
Uses s y s u t i l s ;
Const
S = ' T h i s i s a s t r i n g ' #13 ' w i t h embedded ' #10 ' l i n e f e e d and ' +
#13 'CR c h a r a c t e r s ' ;
Begin
W r i t e l n ( A d j u s t L i n e B r e a k s (S ) ) ;
End .
76.15.6 AnsiCompareFileName
Synopsis: Compare 2 filenames.
Declaration: function AnsiCompareFileName(const S1: string; const S2: string)
: SizeInt
Visibility: default
1631
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
The function actually checks FileNameCaseSensitive and returns the result of AnsiCom-
pareStr (1632) or AnsiCompareText (1633) depending on whether FileNameCaseSensitive is
True or False
Errors: None.
See also: AnsiCompareStr (1632), AnsiCompareText (1633), AnsiLowerCaseFileName (1636)
76.15.7 AnsiCompareStr
Synopsis: Compare 2 ansistrings, case sensitive, ignoring accents characters.
Declaration: function AnsiCompareStr(const S1: string; const S2: string) : Integer
Visibility: default
Description: AnsiCompareStr compares two strings and returns the following result:
The comparison takes into account Ansi characters, i.e. it takes care of strange accented characters.
Contrary to AnsiCompareText (1633), the comparison is case sensitive.
Remark A widestring manager must be installed in order for this function to work correctly with various
character sets.
Errors: None.
See also: AdjustLineBreaks (1631), AnsiCompareText (1633)
Listing: ./sysutex/ex49.pp
Program Example49 ;
Uses s y s u t i l s ;
Procedure T e s t I t ( S1 , S2 : S t r i n g ) ;
Var R : L o n g i n t ;
begin
R: = AnsiCompareStr ( S1 , S2 ) ;
Write ( ' " ' , S1 , ' " i s ' ) ;
I f R<0 then
w r i t e ( ' l e s s than ' )
else I f R=0 then
Write ( ' equal t o ' )
1632
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
else
Write ( ' l a r g e r than ' ) ;
W r i t e l n ( ' " ' , S2 , ' " ' ) ;
end ;
Begin
Testit ( ' One string ' , ' One smaller s t r i n g ' ) ;
Testit ( ' One string ' , ' one string ' );
Testit ( ' One string ' , ' One string ' );
Testit ( ' One string ' , ' One t a l l string ' );
End .
76.15.8 AnsiCompareText
Synopsis: Compare 2 ansistrings, case insensitive, ignoring accents characters.
<0if S1<S2.
0if S1=S2.
>0if S1>S2.
the comparison takes into account Ansi characters, i.e. it takes care of strange accented characters.
Contrary to AnsiCompareStr (1632), the comparison is case insensitive.
Remark A widestring manager must be installed in order for this function to work correctly with various
character sets.
Errors: None.
See also: AdjustLineBreaks (1631), AnsiCompareText (1633)
Listing: ./sysutex/ex50.pp
Program Example49 ;
Uses s y s u t i l s ;
Procedure T e s t I t ( S1 , S2 : S t r i n g ) ;
Var R : L o n g i n t ;
begin
R: = AnsiCompareText ( S1 , S2 ) ;
Write ( ' " ' , S1 , ' " i s ' ) ;
I f R<0 then
w r i t e ( ' l e s s than ' )
else I f R=0 then
Write ( ' equal t o ' )
else
1633
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Begin
Testit ( ' One string ' , ' One smaller s t r i n g ' ) ;
Testit ( ' One string ' , ' one string ' );
Testit ( ' One string ' , ' One string ' );
Testit ( ' One string ' , ' One t a l l string ' );
End .
76.15.9 AnsiDequotedStr
Synopsis: Extract string without quotes
76.15.10 AnsiExtractQuotedStr
Synopsis: Removes the first quoted string from a string.
Declaration: function AnsiExtractQuotedStr(var Src: PChar; Quote: Char) : string
Visibility: default
Description: AnsiExtractQuotedStr returns the first quoted string in Src, and deletes the result from Src.
The resulting string has with Quote characters removed from the beginning and end of the string (if
they are present), and double Quote characters replaced by a single Quote characters. As such, it
reverses the action of AnsiQuotedStr (1636).
Errors: None.
See also: AnsiQuotedStr (1636)
Listing: ./sysutex/ex51.pp
Program Example51 ;
{ T h i s program demonstrates t h e AnsiQuotedStr f u n c t i o n }
Uses s y s u t i l s ;
Var
S : AnsiString ;
P : PChar ;
Begin
1634
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.11 AnsiLastChar
Synopsis: Return a pointer to the last character of a string.
Declaration: function AnsiLastChar(const S: string) : PChar
Visibility: default
Listing: ./sysutex/ex52.pp
Program Example52 ;
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.15.12 AnsiLowerCase
Synopsis: Return a lowercase version of a string.
1635
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Errors: None.
See also: AnsiUpperCase (1643), AnsiStrLower (1641), AnsiStrUpper (1643)
Listing: ./sysutex/ex53.pp
Program Example53 ;
Uses s y s u t i l s ;
Procedure T e s t i t (S : S t r i n g ) ;
begin
W r i t e l n ( S , ' −> ' , AnsiLowerCase (S ) )
end ;
Begin
T e s t i t ( 'AN UPPERCASE STRING ' ) ;
T e s t i t ( 'Some mixed STring ' ) ;
T e s t i t ( ' a lowercase s t r i n g ' ) ;
End .
76.15.13 AnsiLowerCaseFileName
Synopsis: Convert filename to lowercase.
Declaration: function AnsiLowerCaseFileName(const s: string) : string
Visibility: default
Description: AnsiLowerCaseFileName simply returns the result of
AnsiLowerCase(S);
76.15.14 AnsiPos
Synopsis: Return Position of one ansistring in another.
Declaration: function AnsiPos(const substr: string; const s: string) : SizeInt
Visibility: default
Description: AnsiPos does the same as the standard Pos function.
76.15.15 AnsiQuotedStr
Synopsis: Return a quoted version of a string.
Declaration: function AnsiQuotedStr(const S: string; Quote: Char) : string
1636
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Visibility: default
Description: AnsiQuotedString quotes the string S and returns the result. This means that it puts the Quote
character at both the beginning and end of the string and replaces any occurrence of Quote in S with
2 Quote characters. The action of AnsiQuotedString can be reversed by AnsiExtractQuotedStr
(1634).
For an example, see AnsiExtractQuotedStr (1634)
Errors: None.
See also: AnsiExtractQuotedStr (1634)
76.15.16 AnsiSameStr
Synopsis: Checks whether 2 strings are the same (case sensitive)
Declaration: function AnsiSameStr(const s1: string; const s2: string) : Boolean
Visibility: default
Description: SameText calls AnsiCompareStr (1632) with S1 and S2 as parameters and returns True if the
result of that call is zero, or False otherwise.
Remark A widestring manager must be installed in order for this function to work correctly with various
character sets.
Errors: None.
76.15.17 AnsiSameText
Synopsis: Checks whether 2 strings are the same (case insensitive)
Declaration: function AnsiSameText(const s1: string; const s2: string) : Boolean
Visibility: default
Description: SameText calls AnsiCompareText (1633) with S1 and S2 as parameters and returns True if the
result of that call is zero, or False otherwise.
See also: AnsiCompareText (1633), SameText (1727), AnsiSameStr (1637)
76.15.18 AnsiStrComp
Synopsis: Compare two null-terminated strings. Case sensitive.
Declaration: function AnsiStrComp(S1: PChar; S2: PChar) : Integer
Visibility: default
Description: AnsiStrComp compares 2 PChar strings, and returns the following result:
<0if S1<S2.
0if S1=S2.
>0if S1>S2.
1637
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Listing: ./sysutex/ex54.pp
Program Example54 ;
Uses s y s u t i l s ;
Procedure T e s t I t ( S1 , S2 : Pchar ) ;
Var R : L o n g i n t ;
begin
R: = AnsiStrComp ( S1 , S2 ) ;
Write ( ' " ' , S1 , ' " i s ' ) ;
I f R<0 then
w r i t e ( ' l e s s than ' )
else I f R=0 then
Write ( ' equal t o ' )
else
Write ( ' l a r g e r than ' ) ;
W r i t e l n ( ' " ' , S2 , ' " ' ) ;
end ;
Begin
Testit ( ' One string ' , ' One smaller s t r i n g ' ) ;
Testit ( ' One string ' , ' one string ' );
Testit ( ' One string ' , ' One string ' );
Testit ( ' One string ' , ' One t a l l string ' );
End .
76.15.19 AnsiStrIComp
Synopsis: Compare two null-terminated strings. Case insensitive.
Declaration: function AnsiStrIComp(S1: PChar; S2: PChar) : Integer
Visibility: default
Description: AnsiStrIComp compares 2 PChar strings, and returns the following result:
<0if S1<S2.
0if S1=S2.
>0if S1>S2.
1638
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Errors: None.
See also: AnsiCompareText (1633), AnsiCompareStr (1632)
Listing: ./sysutex/ex55.pp
Program Example55 ;
Uses s y s u t i l s ;
Procedure T e s t I t ( S1 , S2 : Pchar ) ;
Var R : L o n g i n t ;
begin
R: = AnsiStrIComp ( S1 , S2 ) ;
Write ( ' " ' , S1 , ' " i s ' ) ;
I f R<0 then
w r i t e ( ' l e s s than ' )
else I f R=0 then
Write ( ' equal t o ' )
else
Write ( ' l a r g e r than ' ) ;
W r i t e l n ( ' " ' , S2 , ' " ' ) ;
end ;
Begin
Testit ( ' One string ' , ' One smaller s t r i n g ' ) ;
Testit ( ' One string ' , ' one string ' );
Testit ( ' One string ' , ' One string ' );
Testit ( ' One string ' , ' One t a l l string ' );
End .
76.15.20 AnsiStrLastChar
Synopsis: Return a pointer to the last character of a string.
Declaration: function AnsiStrLastChar(Str: PChar) : PChar
Visibility: default
Description: Return a pointer to the last character of the null-terminated string.
Remark A widestring manager must be installed in order for this function to work correctly with various
character sets. If none is installed, this function is the same as @S[Length[S]].
Errors: None.
See also: AnsiCompareText (1633), AnsiCompareStr (1632)
Listing: ./sysutex/ex56.pp
Program Example56 ;
1639
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Uses s y s u t i l s ;
Procedure T e s t I t ( S1 , S2 : Pchar ; L : l o n g i n t ) ;
Var R : L o n g i n t ;
begin
R: = AnsiStrLComp ( S1 , S2 , L ) ;
Write ( ' F i r s t ' , L , ' c h a r a c t e r s o f " ' , S1 , ' " are ' ) ;
I f R<0 then
w r i t e ( ' l e s s than ' )
else I f R=0 then
Write ( ' equal t o ' )
else
Write ( ' l a r g e r than ' ) ;
W r i t e l n ( ' those o f " ' , S2 , ' " ' ) ;
end ;
Begin
Testit ( ' One string ' , ' One s m a l l e r s t r i n g ' , 2 5 5 ) ;
Testit ( ' One string ' , ' One S t r i n g ' , 4 ) ;
Testit ( ' One string ' , '1 string ' ,0);
Testit ( ' One string ' , ' One s t r i n g . ' , 9 ) ;
End .
76.15.21 AnsiStrLComp
Synopsis: Compare a limited number of characters of 2 strings
Declaration: function AnsiStrLComp(S1: PChar; S2: PChar; MaxLen: SizeUInt) : Integer
Visibility: default
Description: AnsiStrLComp functions the same as AnsiStrComp (1637), but compares at most MaxLen char-
acters. If the first MaxLen characters in both strings are the same, then zero is returned.
Note that this function processes embedded null characters, treating them as a normal character.
Errors: None.
See also: AnsiStrComp (1637), AnsiStrIComp (1638), AnsiStrLIComp (1640)
76.15.22 AnsiStrLIComp
Synopsis: Compares a given number of characters of a string, case insensitive.
<0if S1<S2.
0if S1=S2.
>0if S1>S2.
1640
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Listing: ./sysutex/ex57.pp
Program Example57 ;
Uses s y s u t i l s ;
Procedure T e s t I t ( S1 , S2 : Pchar ; L : l o n g i n t ) ;
Var R : L o n g i n t ;
begin
R: = AnsiStrLIComp ( S1 , S2 , L ) ;
Write ( ' F i r s t ' , L , ' c h a r a c t e r s o f " ' , S1 , ' " are ' ) ;
I f R<0 then
w r i t e ( ' l e s s than ' )
else I f R=0 then
Write ( ' equal t o ' )
else
Write ( ' l a r g e r than ' ) ;
W r i t e l n ( ' those o f " ' , S2 , ' " ' ) ;
end ;
Begin
Testit ( ' One string ' , ' One s m a l l e r s t r i n g ' , 2 5 5 ) ;
Testit ( 'ONE STRING ' , ' one S t r i n g ' , 4 ) ;
Testit ( ' One string ' , ' 1 STRING ' , 0 ) ;
Testit ( ' One STRING ' , ' one s t r i n g . ' , 9 ) ;
End .
76.15.23 AnsiStrLower
Synopsis: Convert a null-terminated string to all-lowercase characters.
Declaration: function AnsiStrLower(Str: PChar) : PChar
Visibility: default
Description: AnsiStrLower converts the PChar Str to lowercase characters and returns the resulting pchar.
Note that Str itself is modified, not a copy, as in the case of AnsiLowerCase (1635). 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 (1643), AnsiLowerCase (1635)
1641
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Listing: ./sysutex/ex59.pp
Program Example59 ;
Uses s y s u t i l s , s t r i n g s ;
Procedure T e s t i t (S : Pchar ) ;
begin
W r i t e l n ( S , ' −> ' , AnsiStrLower ( StrNew (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.15.24 AnsiStrPos
Synopsis: Return position of one null-terminated substring in another
Declaration: function AnsiStrPos(str: PChar; substr: PChar) : PChar
Visibility: default
Description: AnsiStrPos returns a pointer to the 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.
76.15.25 AnsiStrRScan
Synopsis: Find last occurrence of a character in a null-terminated string.
Declaration: function AnsiStrRScan(Str: PChar; Chr: Char) : PChar
Visibility: default
Description: AnsiStrPos returns a pointer to the last occurrence of the character Chr in Str. If Chr does not
occur in Str then Nil is returned.
Errors: An access violation may occur if Str points to invalid memory.
76.15.26 AnsiStrScan
Synopsis: Find first occurrence of a character in a null-terminated string.
Declaration: function AnsiStrScan(Str: PChar; Chr: Char) : PChar
Visibility: default
1642
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Description: AnsiStrPos returns a pointer to the first occurrence of the character Chr in Str. If Chr does
not occur in Str then Nil is returned.
Errors: An access violation may occur if Str points to invalid memory.
See also: AnsiPos (1636), AnsiStrScan (1642), AnsiStrPos (1642)
76.15.27 AnsiStrUpper
Synopsis: Convert a null-terminated string to all-uppercase characters.
Declaration: function AnsiStrUpper(Str: PChar) : PChar
Visibility: default
Description: AnsiStrUpper converts the PCharStr to uppercase characters and returns the resulting string.
Note that Str itself is modified, not a copy, as in the case of AnsiUpperCase (1643). It takes into
account the operating system language settings when doing this, so special characters are converted
correctly as well.
Remark A widestring manager must be installed in order for this function to work correctly with various
character sets.
Errors: None.
See also: AnsiUpperCase (1643), AnsiStrLower (1641), AnsiLowerCase (1635)
Listing: ./sysutex/ex60.pp
Program Example60 ;
Uses s y s u t i l s , s t r i n g s ;
Procedure T e s t i t (S : Pchar ) ;
begin
W r i t e l n ( S , ' −> ' , AnsiStrUpper ( StrNew (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.15.28 AnsiUpperCase
Synopsis: Return an uppercase version of a string, taking into account special characters.
Declaration: function AnsiUpperCase(const s: string) : string
Visibility: default
1643
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
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 (1643), AnsiStrLower (1641), AnsiLowerCase (1635)
Listing: ./sysutex/ex61.pp
Program Example60 ;
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 .
76.15.29 AnsiUpperCaseFileName
Synopsis: Convert filename to uppercase.
Declaration: function AnsiUpperCaseFileName(const s: string) : string
Visibility: default
Description: AnsiUpperCaseFileName simply returns the result of
AnsiUpperCase(S);
76.15.30 AppendStr
Synopsis: Append one ansistring to another.
Declaration: procedure AppendStr(var Dest: string; const S: string)
Visibility: default
Description: AppendStr appends S to Dest.
This function is provided for Delphi compatibility only, since it is completely equivalent to Dest:=Dest+S.
Errors: None.
1644
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Listing: ./sysutex/ex62.pp
Program Example62 ;
Uses s y s u t i l s ;
Var S : A n s i S t r i n g ;
Begin
S: = ' T h i s i s an ' ;
AppendStr ( S , ' A n s i S t r i n g ' ) ;
W r i t e l n ( ' S = " ' ,S , ' " ' ) ;
End .
76.15.31 ApplicationName
Synopsis: Return a default application name
Declaration: function ApplicationName : string
Visibility: default
Description: ApplicationName returns the name of the current application. Standard this is equal to the
filename part minus extension of ParamStr(0), but it can be customized by setting the OnGetAp-
plicationName (1628) callback.
Note that the returned value is only the name portion. It does not contain any path or file extension.
Errors: None.
76.15.32 AssignStr
Synopsis: Assigns an ansistring to a null-terminated string.
Declaration: procedure AssignStr(var P: PString; const S: string)
Visibility: default
Description: AssignStr allocates S to P. The old value of P is disposed of.
This function is provided for Delphi compatibility only. AnsiStrings are managed on the heap
and should be preferred to the mechanism of dynamically allocated strings.
Errors: None.
See also: NewStr (1722), AppendStr (1644), DisposeStr (1664)
Listing: ./sysutex/ex63.pp
1645
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Program Example63 ;
{ T h i s program demonstrates t h e A s s i g n S t r f u n c t i o n }
{ $H+ }
Uses s y s u t i l s ;
Var P : P S t r i n g ;
Begin
P: = NewStr ( ' A f i r s t A n s i S t r i n g ' ) ;
W r i t e l n ( ' Before : P = " ' ,P^ , ' " ' ) ;
A s s i g n S t r ( P , ' A Second a n s i s t r i n g ' ) ;
W r i t e l n ( ' A f t e r : P = " ' ,P^ , ' " ' ) ;
DisposeStr (P ) ;
End .
76.15.33 BCDToInt
Synopsis: Convert a BCD coded integer to a normal integer.
Declaration: function BCDToInt(Value: Integer) : Integer
Visibility: default
Description: BCDToInt converts a BCD coded integer to a normal integer.
Errors: None.
See also: StrToInt (1750), IntToStr (1717)
Listing: ./sysutex/ex64.pp
Program Example64 ;
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.15.34 Beep
Synopsis: Sound the system bell.
Declaration: procedure Beep
1646
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Visibility: default
Description: Beep sounds the system bell, if one is available. The actual beep is produced by the OnBeep (1627)
callback. The Sysutils unit itself contains no implementation of this call.
76.15.35 BoolToStr
Synopsis: Convert a boolean value to a string.
Description: BoolToStr converts the boolean B to one of the strings ’TRUE’ or ’FALSE’
Errors: None.
See also: StrToBool (1745)
76.15.36 ByteLength
Synopsis: Length (in bytes) of a unicodestring
Declaration: function ByteLength(const S: UnicodeString) : Integer
Visibility: default
Description: ByteLength returns the length of a unicodestring in bytes. This equals the character length of the
string (Length (1598)) multiplied by the number of bytes per character (2).
See also: Length (1598)
76.15.37 BytesOf
Synopsis: Return the bytes in a string
Description: BytesOf returns a copy of the string’s content as an array of bytes. For an empty string, zero bytes
are returned (i.e. length(BytesOf(S))=0).
See also: TBytes (1616)
76.15.38 ByteToCharIndex
Synopsis: Convert a character index in Bytes to an Index in characters
1647
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Description: ByteToCharIndex returns the index (in characters) of the Index-th byte in S.
Errors: This function does not take into account MBCS yet.
See also: CharToByteLen (1649), ByteToCharLen (1648)
76.15.39 ByteToCharLen
Synopsis: Convert a length in bytes to a length in characters.
Declaration: function ByteToCharLen(const S: string; MaxLen: SizeInt) : SizeInt
Visibility: default
Description: ByteToCharLen returns the number of bytes in S, but limits the result to MaxLen
Errors: This function does not take into account MBCS yet.
See also: CharToByteLen (1649), ByteToCharIndex (1647)
76.15.40 ByteType
Synopsis: Return the type of byte in an ansistring for a multi-byte character set
76.15.41 CallTerminateProcs
Synopsis: Call the exit chain procedures.
Declaration: function CallTerminateProcs : Boolean
Visibility: default
Description: CallTerminateProcs is run on program exit. It executes all terminate procedures that were
added to the exit chain with AddTerminateProc (1631), and does this in reverse order.
Errors: If one of the exit procedure raises an exception, it is not caught, and the remaining exit procedures
will not be executed.
See also: TTerminateProc (1624), AddTerminateProc (1631)
1648
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.42 ChangeFileExt
Synopsis: Change the extension of a filename.
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 doesn’t have an extension, Extension is just appended.
Errors: None.
See also: ExtractFileExt (1673), ExtractFileName (1673), ExtractFilePath (1674), ExpandFileName (1670)
76.15.43 CharInSet
Synopsis: Check whether a char is in a set of characters
Ch in CSet
76.15.44 CharToByteLen
Synopsis: Convert a length in characters to a length in bytes.
Declaration: function CharToByteLen(const S: string; MaxLen: SizeInt) : SizeInt
Visibility: default
Description: CharToByteLen returns the number of bytes in S, but limits the result to MaxLen
Errors: This function does not take into account MBCS yet.
See also: ByteToCharLen (1648), ByteToCharIndex (1647)
76.15.45 CheckOSError
Declaration: procedure CheckOSError(LastError: Integer)
Visibility: default
1649
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.46 CodePageNameToCodePage
Synopsis: Return a numeric identifier for the codepage.
Declaration: function CodePageNameToCodePage(const cpname: AnsiString)
: TSystemCodePage
Visibility: default
Description: CodePageNameToCodePage returns the code page number for the specified codepage cpname.
Errors: If the code page is not found in the list of code pages, $FFFF is returned.
See also: CodePageToCodePageName (1650)
76.15.47 CodePageToCodePageName
Synopsis: Convert a numeric codepage identifier to a codepage name
Declaration: function CodePageToCodePageName(cp: TSystemCodePage) : AnsiString
Visibility: default
Description: CodePageToCodePageName returns the name of the codepage cp.
Errors: If no matching codepage is found in the list of codepages, an empty string is returned.
See also: CodePageNameToCodePage (1650)
76.15.48 CompareMem
Synopsis: Compare two memory areas.
Declaration: function CompareMem(P1: Pointer; P2: Pointer; &Length: PtrUInt)
: Boolean
Visibility: default
Description: CompareMem compares, byte by byte, 2 memory areas pointed to by P1 and P2, for a length of L
bytes.
The function returns True if all L bytes are the same, and False otherwise.
76.15.49 CompareMemRange
Synopsis: Compare 2 memory locations
Declaration: function CompareMemRange(P1: Pointer; P2: Pointer; &Length: PtrUInt)
: Integer
Visibility: default
Description: CompareMemRange compares the 2 memory locations pointed to by P1 and P2 byte per byte. It
stops comparing after Length bytes have been compared, or when it has encountered 2 different
bytes. The result is then
>0if a byte in range P1 was found that is bigger than the corresponding byte in range P2.
0if all bytes in range P1 are the same as the corresponding bytes in range P2.
<0if a byte in range P1 was found that is less than the corresponding byte in range P2.
1650
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Errors: None.
See also: SameText (1727)
76.15.50 CompareStr
Synopsis: Compare 2 ansistrings case-sensitively, ignoring special characters.
Declaration: function CompareStr(const S1: string; const S2: string) : Integer
; Overload
function CompareStr(const S1: string; const S2: string;
LocaleOptions: TLocaleOptions) : Integer; Overload
Visibility: default
Description: CompareStr compares two strings, S1 and S2, and returns the following result:
<0if S1<S2.
0if S1=S2.
>0if S1>S2.
The comparison of the two strings is case-sensitive. The function does not take internationalization
settings into account, it simply compares ASCII values.
Errors: None.
See also: AnsiCompareText (1633), AnsiCompareStr (1632), CompareText (1652)
Listing: ./sysutex/ex65.pp
Program Example65 ;
Uses s y s u t i l s ;
Procedure T e s t I t ( S1 , S2 : S t r i n g ) ;
Var R : L o n g i n t ;
begin
R: = CompareStr ( S1 , S2 ) ;
Write ( ' " ' , S1 , ' " i s ' ) ;
I f R<0 then
w r i t e ( ' l e s s than ' )
else I f R=0 then
Write ( ' equal t o ' )
else
Write ( ' l a r g e r than ' ) ;
W r i t e l n ( ' " ' , S2 , ' " ' ) ;
end ;
Begin
Testit ( ' One string ' , ' One smaller s t r i n g ' ) ;
Testit ( ' One string ' , ' one string ' );
Testit ( ' One string ' , ' One string ' );
Testit ( ' One string ' , ' One t a l l string ' );
End .
1651
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.51 CompareText
Synopsis: Compare 2 ansistrings case insensitive.
Visibility: default
Description: CompareText compares two strings, S1 and S2, and returns the following result:
<0if S1<S2.
0if S1=S2.
>0if S1>S2.
The comparison of the two strings is case-insensitive. The function does not take internationalization
settings into account, it simply compares ASCII values.
Errors: None.
Listing: ./sysutex/ex66.pp
Program Example66 ;
Uses s y s u t i l s ;
Procedure T e s t I t ( S1 , S2 : S t r i n g ) ;
Var R : L o n g i n t ;
begin
R: = CompareText ( S1 , S2 ) ;
Write ( ' " ' , S1 , ' " i s ' ) ;
I f R<0 then
w r i t e ( ' l e s s than ' )
else I f R=0 then
Write ( ' equal t o ' )
else
Write ( ' l a r g e r than ' ) ;
W r i t e l n ( ' " ' , S2 , ' " ' ) ;
end ;
Begin
Testit ( ' One string ' , ' One smaller s t r i n g ' ) ;
Testit ( ' One string ' , ' one string ' );
Testit ( ' One string ' , ' One string ' );
Testit ( ' One string ' , ' One t a l l string ' );
End .
1652
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.52 ComposeDateTime
Synopsis: Add a date and time
Declaration: function ComposeDateTime(Date: TDateTime; Time: TDateTime) : TDateTime
Visibility: default
Description: ComposeDateTime correctly adds Date and Time, also for dates before 1899-12-31. For dates
after this date, it is just the mathematical addition.
Errors: None.
See also: #rtl.dateutils.EncodeDateTime (602)
76.15.53 ConcatPaths
Synopsis: Concatenate an array of paths to form a single path
Declaration: function ConcatPaths(const Paths: Array of UNICODESTRING)
: UNICODESTRING
function ConcatPaths(const Paths: Array of RAWBYTESTRING)
: RAWBYTESTRING
Visibility: default
Description: ConcatPaths will concatenate the different path components in Paths to a single path. It will
insert directory separators between the various components of the path as needed. No directory
separators will be added to the beginning or the end of the path, and none will be taken away.
See also: IncludeTrailingPathDelimiter (1715), IncludeLeadingPathDelimiter (1714), ExcludeTrailingPathDe-
limiter (1668), IncludeTrailingPathDelimiter (1715)
Listing: ./sysutex/ex96.pp
program ex96 ;
uses s y s u t i l s ;
begin
/ / w i l l w r i t e / t h i s / path / more / l e v e l s /
W r i t e l n ( ConcatPaths ( [ ' / t h i s / ' , ' path ' , ' more / l e v e l s / ' ] ) ) ;
/ / w i l l w r i t e t h i s / path / more / l e v e l s /
W r i t e l n ( ConcatPaths ( [ ' t h i s / ' , ' path ' , ' more / l e v e l s / ' ] ) ) ;
/ / w i l l w r i t e t h i s / path / more / l e v e l s
W r i t e l n ( ConcatPaths ( [ ' t h i s / ' , ' path ' , ' more / l e v e l s ' ] ) ) ;
end .
76.15.54 CreateDir
Synopsis: Create a new directory
Declaration: function CreateDir(const NewDir: RawByteString) : Boolean
function CreateDir(const NewDir: UnicodeString) : Boolean
Visibility: default
1653
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Description: CreateDir creates a new directory with name NewDir. If the directory doesn’t contain an abso-
lute path, then the directory is created below the current working directory.
The function returns True if the directory was successfully created, False otherwise.
Errors: In case of an error, the function returns False.
See also: RemoveDir (1724)
Listing: ./sysutex/ex26.pp
Program Example26 ;
Uses s y s u t i l s ;
Begin
I f Not D i r e c t o r y E x i s t s ( ' NewDir ' ) then
I f Not C r e a t e D i r ( ' NewDir ' ) Then
Writeln ( ' Failed to create d i r e c t o r y ! ')
else
W r i t e l n ( ' Created " NewDir " d i r e c t o r y ')
Else
I f Not RemoveDir ( ' NewDir ' ) Then
W r i t e l n ( ' F a i l e d t o remove d i r e c t o r y ! ')
else
W r i t e l n ( ' Removed " NewDir " d i r e c t o r y ' );
End .
76.15.55 CreateGUID
Synopsis: Create a new GUID
Declaration: function CreateGUID(out GUID: TGUID) : Integer
Visibility: default
Description: CreateGUID can be called to create a new GUID (Globally Unique Identifier) value. The function
returns the new GUID value in GUID and returns zero in case the GUID was created successfully. If
no GUID was created, a nonzero error code is returned.
The default mechanism for creating a new GUID is system dependent. If operating system support
is available, it is used. If none is available, a default implementation using random numbers is used.
The OnCreateGUID callback can be set to hook a custom mechanism behind the CreateGUID
function. This can be used to let the GUID be created by an external GUID creation library.
Errors: On error, a nonzero return value is returned.
See also: GUIDCase (1713), IsEqualGUID (1718), StringToGUID (1736), TryStringToGUID (1762), GUID-
ToString (1713)
76.15.56 CurrentYear
Synopsis: Return the current year
Declaration: function CurrentYear : Word
1654
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Visibility: default
Description: CurrentYear returns the current year as a 4-digit number.
Errors: None.
See also: Date (1655), Time (1757), Now (1723)
76.15.57 CurrToStr
Synopsis: Convert a currency value to a string.
Declaration: function CurrToStr(Value: Currency) : string
function CurrToStr(Value: Currency;
const FormatSettings: TFormatSettings) : string
Visibility: default
Description: CurrToStr will convert a currency value to a string with a maximum of 15 digits, and precision
2. Calling CurrToStr is equivalent to calling FloatToStrF (1691):
FloatToStrF(Value,ffNumber,15,2);
Note that on unix systems, the localization support must be enabled explicitly, see Localization
(1599).
Errors: None.
76.15.58 CurrToStrF
Synopsis: Format a currency to a string
Declaration: function CurrToStrF(Value: Currency; Format: TFloatFormat;
Digits: Integer) : string
function CurrToStrF(Value: Currency; Format: TFloatFormat;
Digits: Integer;
const FormatSettings: TFormatSettings) : string
Visibility: default
Description: CurrToStrF formats the currency Value according to the value in Format, using the number
of digits specified in Digits, and a precision of 19. This function simply calls FloatToStrF (1691).
Note that on unix systems, the localization support must be enabled explicitly, see Localization
(1599).
See also: FloatToStrF (1691), Localization (1599)
76.15.59 Date
Synopsis: Return the current date.
Declaration: function Date : TDateTime
Visibility: default
1655
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Listing: ./sysutex/ex1.pp
Program Example1 ;
uses s y s u t i l s ;
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.15.60 DateTimeToFileDate
Synopsis: Convert a TDateTime value to a file age (integer)
Declaration: function DateTimeToFileDate(DateTime: TDateTime) : LongInt
Visibility: default
Description: DateTimeToFileDate function converts a date/time indication in TDateTime format to a file-
date function, such as returned for instance by the FileAge (1675) function.
Errors: None.
See also: Time (1757), Date (1655), FileDateToDateTime (1678), DateTimeToSystemTime (1658), Date-
TimeToTimeStamp (1659)
Listing: ./sysutex/ex2.pp
Program Example2 ;
Uses s y s u t i l s ;
Begin
W r i t e l n ( ' F i l e T i m e o f now would be : ' , DateTimeToFileDate (Now ) ) ;
End .
76.15.61 DateTimeToStr
Synopsis: Converts a TDateTime value to a string using a predefined format.
1656
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Visibility: default
Description: DateTimeToStr returns a string representation of DateTime using the formatting specified in
ShortDateFormat and LongTimeFormat. It corresponds to a call to FormatDateTime(’c’,DateTime)
(see formatchars (1604)).
Note that if the time part is 0 (i.e. midnight), no time is appended.
Note that on unix systems, the localization support must be enabled explicitly, see Localization
(1599).
Errors: None.
See also: FormatDateTime (1703), DefaultFormatSettings (1626), Localization (1599)
Listing: ./sysutex/ex3.pp
Program Example3 ;
Uses s y s u t i l s ;
Begin
W r i t e l n ( ' Today i s : ' , DateTimeToStr (Now ) ) ;
W r i t e l n ( ' Today i s : ' , FormatDateTime ( ' c ' ,Now ) ) ;
End .
76.15.62 DateTimeToString
Synopsis: Converts a TDateTime value to a string with a given format.
Declaration: procedure DateTimeToString(out Result: string; const FormatStr: string;
const DateTime: TDateTime;
Options: TFormatDateTimeOptions)
procedure DateTimeToString(out Result: string; const FormatStr: string;
const DateTime: TDateTime;
const FormatSettings: TFormatSettings;
Options: TFormatDateTimeOptions)
Visibility: default
Description: DateTimeToString returns in Result a string representation of DateTime using the format-
ting specified in FormatStr.
for a list of characters that can be used in the FormatStr formatting string, see formatchars (1604).
Note that for ’c’, if the time part is 0 (i.e. midnight), no time is appended.
Note that on unix systems, the localization support must be enabled explicitly, see Localization
(1599).
Errors: In case a wrong formatting character is found, an EConvertError (1780) is raised.
1657
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
See also: FormatDateTime (1703), formatchars (1604), EConvertError (1780), Localization (1599)
Listing: ./sysutex/ex4.pp
Program Example4 ;
Uses s y s u t i l s ;
Var S : A n s i S t r i n g ;
begin
DateTimeToString ( S , Fmt , Date ) ;
W r i t e l n (S ) ;
end ;
Var S : A n s i S t r i n g ;
begin
DateTimeToString ( S , Fmt , Time ) ;
W r i t e l n (S ) ;
end ;
Begin
Today ( ' " Today i s " dddd dd mmmm y ' ) ;
Today ( ' " Today i s " d mmm yy ' ) ;
Today ( ' " Today i s " d /mmm/ yy ' ) ;
Now ( ' ' ' The t i m e i s ' 'am/ pmh : n : s ' ) ;
Now ( ' ' ' The t i m e i s ' ' hh : nn : ssam /pm ' ) ;
Now ( ' ' ' The t i m e is ' ' t t ' );
End .
76.15.63 DateTimeToSystemTime
Synopsis: Converts a TDateTime value to a systemtime structure.
Declaration: procedure DateTimeToSystemTime(DateTime: TDateTime;
out SystemTime: TSystemTime)
Visibility: default
Listing: ./sysutex/ex5.pp
1658
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Program Example5 ;
Uses s y s u t i l s ;
Var ST : TSystemTime ;
Begin
DateTimeToSystemTime (Now, ST ) ;
With St do
begin
W r i t e l n ( ' Today i s ' , year , ' / ' , month , ' / ' , Day ) ;
W r i t e l n ( ' The t i m e i s ' , Hour , ' : ' , minute , ' : ' , Second , ' . ' , M i l l i S e c o n d ) ;
end ;
End .
76.15.64 DateTimeToTimeStamp
Synopsis: Converts a TDateTime value to a TimeStamp structure.
Declaration: function DateTimeToTimeStamp(DateTime: TDateTime) : TTimeStamp
Visibility: default
Description: DateTimeToSystemTime converts a date/time pair in DateTime, with TDateTime format to
a TTimeStamp format.
Errors: None.
Listing: ./sysutex/ex6.pp
Program Example6 ;
Uses s y s u t i l s ;
Var TS : TTimeStamp ;
Begin
TS: = DateTimeToTimeStamp (Now ) ;
With TS do
begin
W r i t e l n ( 'Now i s ' , time , ' m i l l i s e c o n d p a s t m i d n i g h t ' ) ;
W r i t e l n ( ' Today i s ' , Date , ' days p a s t 1 / 1 / 00 0 1 ' ) ;
end ;
End .
76.15.65 DateToStr
Synopsis: Converts a TDateTime value to a date string with a predefined format.
1659
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Description: DateToStr converts Date to a string representation. It uses ShortDateFormat as it’s format-
ting string. It is hence completely equivalent to a FormatDateTime(’ddddd’, Date).
Note that on unix systems, the localization support must be enabled explicitly, see Localization
(1599).
Errors: None.
See also: TimeToStr (1759), DateTimeToStr (1656), FormatDateTime (1703), StrToDate (1746), Localization
(1599)
Listing: ./sysutex/ex7.pp
Program Example7 ;
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.15.66 DayOfWeek
Synopsis: Returns the day of the week.
Errors: None.
See also: Date (1655), DateToStr (1659)
Listing: ./sysutex/ex8.pp
Program Example8 ;
Uses s y s u t i l s ;
Begin
W r i t e l n ( ' Today ' ' s day i s ' , LongDayNames [ DayOfWeek ( Date ) ] ) ;
End .
1660
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.67 DecodeDate
Synopsis: Decode a TDateTime to a year,month,day triplet
Declaration: procedure DecodeDate(Date: TDateTime; out Year: Word; out Month: Word;
out Day: Word)
Visibility: default
Description: DecodeDate decodes the Year, Month and Day stored in Date, and returns them in the Year,
Month and Day variables.
Errors: None.
See also: EncodeDate (1665), DecodeTime (1661)
Listing: ./sysutex/ex9.pp
Program Example9 ;
Uses s y s u t i l s ;
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.15.68 DecodeDateFully
Synopsis: Decode a date with additional date of the week.
Declaration: function DecodeDateFully(const DateTime: TDateTime; out Year: Word;
out Month: Word; out Day: Word; out DOW: Word)
: Boolean
Visibility: default
Description: DecodeDateFully, like DecodeDate (1661), decodes DateTime in its parts and returns these
in Year, Month, Day but in addition returns the day of the week in DOW.
Errors: None.
See also: EncodeDate (1665), TryEncodeDate (1761), DecodeDate (1661)
76.15.69 DecodeTime
Synopsis: Decode a TDateTime to a hour,minute,second,millisec quartet
Declaration: procedure DecodeTime(Time: TDateTime; out Hour: Word; out Minute: Word;
out Second: Word; out MilliSecond: Word)
Visibility: default
Description: DecodeTime decodes the hours, minutes, second and milliseconds stored in Time, and returns
them in the Hour, Minute and Second and MilliSecond variables.
1661
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Errors: None.
See also: EncodeTime (1666), DecodeDate (1661)
Listing: ./sysutex/ex10.pp
Program Example10 ;
Uses s y s u t i l s ;
Begin
DecodeTime ( Time ,HH,MM, SS,MS) ;
W r i t e l n ( format ( ' The t i m e i s %d:%d:%d.%d ' , [ hh ,mm, ss , ms ] ) ) ;
End .
76.15.70 DeleteFile
Synopsis: Delete a file from the file system.
Declaration: function DeleteFile(const FileName: UnicodeString) : Boolean
function DeleteFile(const FileName: RawByteString) : Boolean
Visibility: default
Description: DeleteFile deletes file FileName from disk. The function returns True if the file was suc-
cessfully removed, False otherwise.
Errors: On error, False is returned.
Listing: ./sysutex/ex31.pp
Program Example31 ;
{ T h i s program demonstrates t h e D e l e t e F i l e f u n c t i o n }
Uses s y s u t i l s ;
Var
Line : String ;
F , I : Longint ;
Begin
F:= FileCreate ( ' t e s t . t x t ' ) ;
L i n e : = 'Some s t r i n g l i n e . ' #10;
For I :=1 to 10 do
F i l e W r i t e ( F , L i n e [ 1 ] , Length ( L i n e ) ) ;
FileClose ( F ) ;
DeleteFile ( ' t e s t . t x t ' ) ;
End .
1662
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.71 DirectoryExists
Synopsis: Check whether a directory exists in the file system.
Visibility: default
Description: DirectoryExists checks whether Directory exists in the file system and is actually a direc-
tory. If this is the case, the function returns True, otherwise False is returned.
See also: FileExists (1678)
76.15.72 DiskFree
Synopsis: Return the amount of free diskspace
Declaration: function DiskFree(drive: Byte) : Int64
Visibility: default
Description: DiskFree returns the free space (in bytes) on disk Drive. Drive is the number of the disk drive:
Remark Under Linux, and Unix in general, the concept of disk is different than the dos one, since the
file system is seen as one big directory tree. For this reason, the DiskFree and DiskSize (1664)
functions must be mimicked using filenames that reside on the partitions. For more information, see
AddDisk (1630).
Errors: On error, -1 is returned.
See also: DiskSize (1664), AddDisk (1630)
Listing: ./sysutex/ex27.pp
Program Example27 ;
Uses s y s u t i l s ;
Begin
Write ( ' Size o f c u r r e n t d i s k : ' , DiskSize ( 0 ) ) ;
Writeln ( ' (= ' , DiskSize ( 0 ) div 1024 , 'k) ' );
Write ( ' Free space o f c u r r e n t d i s k : ' , Diskfree ( 0 ) ) ;
Writeln ( ' (= ' , Diskfree ( 0 ) div 1024 , 'k) ' );
End .
1663
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.73 DiskSize
Synopsis: Return the total amount of diskspace.
Declaration: function DiskSize(drive: Byte) : Int64
Visibility: default
Description: DiskSize returns the size (in bytes) of disk Drive. Drive is the number of the disk drive:
Remark Under Linux, and Unix in general, the concept of disk is different than the dos one, since the
file system is seen as one big directory tree. For this reason, the DiskFree (1663) and DiskSize
functions must be mimicked using filenames that reside on the partitions. For more information, see
AddDisk (1630)
For an example, see DiskFree (1663).
Errors: On error, -1 is returned.
See also: DiskFree (1663), AddDisk (1630)
76.15.74 DisposeStr
Synopsis: Dispose an ansistring from the heap.
Declaration: procedure DisposeStr(S: PString); Overload
procedure DisposeStr(S: PShortString); Overload
Visibility: default
Description: DisposeStr removes the dynamically allocated string S from the heap, and releases the occupied
memory.
This function is provided for Delphi compatibility only. AnsiStrings are managed on the heap
and should be preferred to the mechanism of dynamically allocated strings.
For an example, see DisposeStr (1664).
Errors: None.
See also: NewStr (1722), AppendStr (1644), AssignStr (1645)
76.15.75 DoDirSeparators
Synopsis: Convert known directory separators to the current directory separator.
Declaration: procedure DoDirSeparators(var FileName: UNICODESTRING)
procedure DoDirSeparators(var FileName: RAWBYTESTRING)
Visibility: default
Description: This function replaces all known directory separators in FileName to the directory separator char-
acter for the current system. The list of known separators is specified in the AllowDirectorySepara-
tors (1337) constant.
1664
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Errors: None.
See also: ExtractFileName (1673), ExtractFilePath (1674)
Listing: ./sysutex/ex32.pp
Program Example32 ;
Uses s y s u t i l s ;
Procedure T e s t i t ( F : S t r i n g ) ;
begin
W r i t e l n ( ' Before : ' , F ) ;
DoDirSeparators ( F ) ;
Writeln ( ' A f t e r : ' ,F ) ;
end ;
Begin
Testit ( GetCurrentDir ) ;
Testit ( ' c : \ pp \ b i n \ win32 ' ) ;
Testit ( ' / usr / l i b / fpc ' ) ;
Testit ( ' \ usr \ l i b \ fpc ' ) ;
End .
76.15.76 EncodeDate
Synopsis: Encode a Year,Month,Day to a TDateTime value.
Declaration: function EncodeDate(Year: Word; Month: Word; Day: Word) : TDateTime
Visibility: default
Description: EncodeDate encodes the Year, Month and Day variables to a date in TDateTime format. It
does the opposite of the DecodeDate (1661) procedure.
The parameters must lie withing valid ranges (boundaries included):
Errors: In case one of the parameters is out of it’s valid range, an EConvertError (1780) exception is raised.
See also: EncodeTime (1666), DecodeDate (1661)
Listing: ./sysutex/ex11.pp
Program Example11 ;
Uses s y s u t i l s ;
1665
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Begin
DecodeDate ( Date , YY,MM,DD ) ;
WriteLn ( ' Today i s : ' , FormatDateTime ( ' dd mmmm yyyy ' , EnCodeDate (YY,Mm, Dd ) ) ) ;
End .
76.15.77 EncodeTime
Synopsis: Encode a Hour,Min,Sec,millisec to a TDateTime value.
Declaration: function EncodeTime(Hour: Word; Minute: Word; Second: Word;
MilliSecond: Word) : TDateTime
Visibility: default
Description: EncodeTime encodes the Hour, Minute, Second, MilliSecond variables to a TDateTime
format result. It does the opposite of the DecodeTime (1661) procedure.
The parameters must have a valid range (boundaries included):
Errors: In case one of the parameters is out of it’s valid range, an EConvertError (1780) exception is raised.
Listing: ./sysutex/ex12.pp
Program Example12 ;
Uses s y s u t i l s ;
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.15.78 ExceptAddr
Synopsis: Current exception address.
Declaration: function ExceptAddr : CodePointer
Visibility: default
Description: ExceptAddr returns the address from the currently treated exception object when an exception is
raised, and the stack is unwound.
See also: ExceptObject (1667), ExceptionErrorMessage (1667), ShowException (1728)
1666
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.79 ExceptFrameCount
Synopsis: Number of frames included in an exception backtrace
Declaration: function ExceptFrameCount : LongInt
Visibility: default
Description: ExceptFrameCount returns the number of frames that are included in an exception stack frame
backtrace. The function returns 0 if there is currently no exception being handled. (i.e. it only makes
sense to call this function in an finally..end or except..end block.
Errors: None.
See also: ExceptFrames (1667), ExceptAddr (1666), ExceptObject (1667), #rtl.system.ExceptProc (1339)
76.15.80 ExceptFrames
Synopsis: Return the current exception stack frames
Declaration: function ExceptFrames : PCodePointer
Visibility: default
Description: ExceptFrames returns the current list frames on the exception stack. If there is no exception in
progress, Nil is returned.
See also: ExceptFrameCount (1667), ExceptAddr (1666), ExceptObject (1667), #rtl.system.ExceptProc (1339)
76.15.81 ExceptionErrorMessage
Synopsis: Return a message describing the exception.
Declaration: function ExceptionErrorMessage(ExceptObject: TObject;
ExceptAddr: Pointer; Buffer: PChar;
Size: Integer) : Integer
Visibility: default
Description: ExceptionErrorMessage creates a string that describes the exception object ExceptObject
at address ExceptAddr. It can be used to display exception messages. The string will be stored in
the memory pointed to by Buffer, and will at most have Size characters.
The routine checks whether ExceptObject is a Exception (1787) object or not, and adapts the
output accordingly.
See also: ExceptObject (1667), ExceptAddr (1666), ShowException (1728)
76.15.82 ExceptObject
Synopsis: Current Exception object.
Declaration: function ExceptObject : TObject
Visibility: default
Description: ExceptObject returns the currently treated exception object when an exception is raised, and the
stack is unwound.
Errors: If there is no exception, the function returns Nil
See also: ExceptAddr (1666), ExceptionErrorMessage (1667), ShowException (1728)
1667
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.83 ExcludeLeadingPathDelimiter
Synopsis: Strip the leading path delimiter of a path
Declaration: function ExcludeLeadingPathDelimiter(const Path: UNICODESTRING)
: UNICODESTRING
function ExcludeLeadingPathDelimiter(const Path: RAWBYTESTRING)
: RAWBYTESTRING
Visibility: default
Description: ExcludeLeadingPathDelimiter will remove any path delimiter on the first position of Path
if there is one. if there is none (or the path is empty), it is left untouched.
See also: IncludeTrailingPathDelimiter (1715), IncludeLeadingPathDelimiter (1714), ExcludeTrailingPathDe-
limiter (1668), ConcatPaths (1653)
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.15.84 ExcludeTrailingBackslash
Synopsis: Strip trailing directory separator from a pathname, if needed.
Declaration: function ExcludeTrailingBackslash(const Path: UNICODESTRING)
: UNICODESTRING
function ExcludeTrailingBackslash(const Path: RAWBYTESTRING)
: RAWBYTESTRING
Visibility: default
Description: ExcludeTrailingBackslash is provided for backwards compatibility with Delphi. Use Ex-
cludeTrailingPathDelimiter (1668) instead.
See also: IncludeTrailingPathDelimiter (1715), ExcludeTrailingPathDelimiter (1668), PathDelim (1611), Is-
PathDelimiter (1719)
76.15.85 ExcludeTrailingPathDelimiter
Synopsis: Strip trailing directory separator from a pathname, if needed.
Declaration: function ExcludeTrailingPathDelimiter(const Path: UNICODESTRING)
: UNICODESTRING
function ExcludeTrailingPathDelimiter(const Path: RAWBYTESTRING)
: RAWBYTESTRING
1668
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Visibility: default
Description: ExcludeTrailingPathDelimiter removes the trailing path delimiter character (PathDelim
(1611)) from Path if it is present, and returns the result.
See also: ExcludeTrailingBackslash (1668), IncludeTrailingPathDelimiter (1715), PathDelim (1611), IsPathDe-
limiter (1719)
76.15.86 ExecuteProcess
Synopsis: Execute another process (program).
Declaration: function ExecuteProcess(const Path: RawByteString;
const ComLine: RawByteString;
Flags: TExecuteFlags) : Integer
function ExecuteProcess(const Path: RawByteString;
const ComLine: Array of RawByteString;
Flags: TExecuteFlags) : Integer
function ExecuteProcess(const Path: UnicodeString;
const ComLine: UnicodeString;
Flags: TExecuteFlags) : Integer
function ExecuteProcess(const Path: UnicodeString;
const ComLine: Array of UnicodeString;
Flags: TExecuteFlags) : Integer
Visibility: default
Description: ExecuteProcess will execute the program in Path, passing it the arguments in ComLine.
ExecuteProcess will then wait for the program to finish, and will return the exit code of the
executed program. In case ComLine is a single string, it will be split out in an array of strings,
taking into account common whitespace and quote rules.
The program specified in Path is not searched in the searchpath specified in the PATH environment
variable, so the full path to the executable must be specified in Path, although some operating
systems may perform this search anyway (notably, windows)
Flags can be used to control the passing of file handles: if ExecInheritsHandles is included,
the file handles of the current process will be passed on to the newly executed process.
Errors: In case the program could not be executed or an other error occurs, an EOSError (1784) exception
will be raised.
See also: TExecuteFlags (1617), EOSError (1784)
76.15.87 ExeSearch
Synopsis: Search for an executable
1669
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Description: ExeSearch searches for an executable Name in the list of directories DirList (a list of direc-
tories, separator by PathSeparator (1354). If the current OS also searches implicitly in the current
working directory, the current directory is searched in the first place.
If the executable is found, then the full path of the executable is returned. If it is not found, an empty
string is returned.
No check is performed whether the found file is actually executable.
See also: FileSearch (1683)
76.15.88 ExpandFileName
Synopsis: Expand a relative filename to an absolute filename.
Listing: ./sysutex/ex33.pp
Program Example33 ;
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 : ' , ExpandFileName ( F ) ) ;
end ;
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.15.89 ExpandFileNameCase
Synopsis: Expand a filename entered as case insensitive to the full path as stored on the disk.
1670
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Listing: ./sysutex/ex33.pp
Program Example33 ;
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 : ' , ExpandFileName ( F ) ) ;
end ;
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.15.90 ExpandUNCFileName
Synopsis: Expand a relative filename to an absolute UNC filename.
Declaration: function ExpandUNCFileName(const FileName: UNICODESTRING)
: UNICODESTRING
function ExpandUNCFileName(const FileName: RAWBYTESTRING)
: RAWBYTESTRING
1671
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Visibility: default
Description: ExpandUNCFileName runs ExpandFileName (1670) on FileName and then attempts to replace
the drive letter by the name of a shared disk.
Errors: If an unexpected error occurs while determining the name of the shared disk, an empty string is
returned.
See also: ExpandFileName (1670), ExtractFileName (1673), ExtractFilePath (1674), ExtractFileDir (1672),
ExtractFileDrive (1673), ExtractFileExt (1673), ExtractRelativePath (1674)
76.15.91 ExtractFileDir
Synopsis: Extract the drive and directory part of a filename.
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 ( ' FileName : ' ,F ) ;
Writeln ( ' Has Name : ' , ExtractFileName ( F ) ) ;
Writeln ( ' Has Path : ' , ExtractFilePath (F ) ) ;
Writeln ( ' Has E x t e n s i o n : ' , ExtractFileExt (F ) ) ;
Writeln ( ' Has D i r e c t o r y : ' , ExtractFileDir (F ) ) ;
Writeln ( ' Has D r i v e : ' , ExtractFileDrive (F ) ) ;
end ;
Begin
Testit ( Paramstr ( 0 ) ) ;
Testit ( ' / u s r / l o c a l / b i n / mysqld ' ) ;
Testit ( ' c : \ pp \ b i n \ win32 \ ppc386 . exe ' ) ;
Testit ( ' / pp / b i n / win32 / ppc386 . exe ' ) ;
End .
1672
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.92 ExtractFileDrive
Synopsis: Extract the drive part from a filename.
76.15.93 ExtractFileExt
Synopsis: Return the extension from a filename.
Declaration: function ExtractFileExt(const FileName: UNICODESTRING) : UNICODESTRING
function ExtractFileExt(const FileName: RAWBYTESTRING) : RAWBYTESTRING
Visibility: default
Description: ExtractFileExt returns the extension (including the .(dot) character) of FileName.
For an example, see ExtractFileDir (1672).
Errors: None.
See also: ChangeFileExt (1649), ExtractFileName (1673), ExtractFilePath (1674), ExtractFileDir (1672), Ex-
tractFileDrive (1673), ExtractFileExt (1673), ExtractRelativePath (1674)
76.15.94 ExtractFileName
Synopsis: Extract the filename part from a full path filename.
Declaration: function ExtractFileName(const FileName: UNICODESTRING) : UNICODESTRING
function ExtractFileName(const FileName: RAWBYTESTRING) : RAWBYTESTRING
Visibility: default
Description: ExtractFileName returns the filename part from FileName. The filename consists of all char-
acters after the last directory separator character (’/’ or ’\’) or drive letter.
The full filename can always be reconstructed by concatenating the result of ExtractFilePath (1674)
and ExtractFileName.
For an example, see ExtractFileDir (1672).
Errors: None.
See also: ExtractFileName (1673), ExtractFilePath (1674), ExtractFileDir (1672), ExtractFileDrive (1673),
ExtractFileExt (1673), ExtractRelativePath (1674)
1673
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.95 ExtractFilePath
Synopsis: Extract the path from a filename.
Declaration: function ExtractFilePath(const FileName: UNICODESTRING) : UNICODESTRING
function ExtractFilePath(const FileName: RAWBYTESTRING) : RAWBYTESTRING
Visibility: default
Description: ExtractFilePath returns the path part (including drive letter) from FileName. The path con-
sists of all characters before the last directory separator character (’/’ or ’\’), including the directory
separator itself. In case there is only a drive letter, that will be returned.
The full filename can always be reconstructed by concatenating the result of ExtractFilePath
and ExtractFileName (1673).
For an example, see ExtractFileDir (1672).
Errors: None.
See also: ExtractFileName (1673), ExtractFilePath (1674), ExtractFileDir (1672), ExtractFileDrive (1673),
ExtractFileExt (1673), ExtractRelativePath (1674)
76.15.96 ExtractRelativePath
Synopsis: Extract a relative path from a filename, given a base directory.
Declaration: function ExtractRelativePath(const BaseName: UNICODESTRING;
const DestName: UNICODESTRING)
: UNICODESTRING
function ExtractRelativePath(const BaseName: RAWBYTESTRING;
const DestName: RAWBYTESTRING)
: RAWBYTESTRING
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 that directories must end on a path delimiter for this function to work correctly. If not, the last
part is stripped and treated as a file name.
Errors: None.
See also: ExtractFileName (1673), ExtractFilePath (1674), ExtractFileDir (1672), ExtractFileDrive (1673),
ExtractFileExt (1673)
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 ;
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 ;
1674
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Begin
Testit ( ' / pp / s r c / c o m p i l e r / ' , ' / pp / b i n / win32 / ppc386 / ' ) ;
Testit ( ' / pp / b i n / win32 / ppc386 / ' , ' / pp / s r c / c o m p i l e r / ' ) ;
Testit ( ' / pp / b i n / win32 / ' , ' / pp / s r c / c o m p i l e r / ppcx386 / ' ) ;
Testit ( ' / pp / b i n / win32 / ' , ' / pp / s r c / c o m p i l e r / ppcx386 ' ) ;
Testit ( ' / pp / b i n / win32 ' , ' / pp / s r c / c o m p i l e r / ppcx386 ' ) ;
Testit ( ' e : / pp / b i n / win32 / ppc386 / ' , ' d : / pp / s r c / c o m p i l e r / ' ) ;
Testit ( ' e : \ pp \ b i n \ win32 \ ppc386 / ' , ' d : \ pp \ s r c \ c o m p i l e r / ' ) ;
Testit ( 'C : \ FPC \ 3 . 0 . 2 \ ' , 'C : \ FPC \ 3 . 0 . 2 \ ' ) ;
Testit ( 'C : \ FPC \ 3 . 0 . 2 \ ' , 'C : \ FPC \ 3 . 0 . 4 r c 1 \ ' ) ;
Testit ( 'Q : \ ' , 'Q : \ FPC \ 3 . 0 . 4 r c 1 \ ' ) ;
End .
76.15.97 ExtractShortPathName
Synopsis: Returns a 8.3 path name
Declaration: function ExtractShortPathName(const FileName: UNICODESTRING)
: UNICODESTRING
function ExtractShortPathName(const FileName: RAWBYTESTRING)
: RAWBYTESTRING
Visibility: default
Description: ExtractShortPathName returns a 8.3 compliant filename that represents the same file as FileName.
On platforms other than windows, this is FileName itself.
See also: ExtractFilePath (1674), ExtractFileName (1673)
76.15.98 FileAge
Synopsis: Return the timestamp of a file.
Listing: ./sysutex/ex36.pp
1675
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
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.15.99 FileClose
Synopsis: Close a file handle.
Declaration: procedure FileClose(Handle: THandle)
Visibility: default
Description: FileClose closes the file handle Handle. After this call, attempting to read or write from the
handle will result in an error.
For an example, see FileCreate (1676)
Errors: None.
See also: FileCreate (1676), FileWrite (1686), FileOpen (1681), FileRead (1682), FileTruncate (1686), File-
Seek (1684)
76.15.100 FileCreate
Synopsis: Create a new file and return a handle to it.
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 (1682) and FileWrite (1686) functions.
If a file with name FileName already existed on the disk, it is overwritten.
1676
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
The ShareMode parameter determines how file sharing is handled for the new file. It can have one
or more of the following values, OR-ed together:
Table 76.24:
Name Description
fmShareCompat Open file in DOS share-compatibility mode
fmShareDenyNone Do not lock file.
fmShareDenyRead Lock file so other processes cannot read.
fmShareDenyWrite Lock file so other processes can only read.
fmShareExclusive Lock file for exclusive use
The optional Rights 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 platforms, the Rights parameter is ignored.
Errors: If an error occurs (e.g. disk full or non-existent path), the function returns THandle(-1).
See also: FileClose (1676), FileWrite (1686), FileOpen (1681), FileRead (1682), FileTruncate (1686), File-
Seek (1684)
Listing: ./sysutex/ex37.pp
Program Example37 ;
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 100 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 100 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 ) ) ;
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 : = 5 0 * 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
1677
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.101 FileDateToDateTime
Synopsis: Convert a FileDate value to a TDateTime value.
Declaration: function FileDateToDateTime(Filedate: LongInt) : TDateTime
Visibility: default
Description: FileDateToDateTime converts the date/time encoded in filedate to a TDateTime en-
coded form. It can be used to convert date/time values returned by the FileAge (1675) or FindFirst
(1687)/FindNext (1688) functions to TDateTime form.
Errors: None.
See also: DateTimeToFileDate (1656)
Listing: ./sysutex/ex13.pp
Program Example13 ;
Uses s y s u t i l s ;
Var
ThisAge : L o n g i n t ;
Begin
Write ( ' ex13 . pp c r e a t e d on : ' ) ;
ThisAge : = FileAge ( ' ex13 . pp ' ) ;
W r i t e l n ( DateTimeToStr ( FileDateToDateTime ( ThisAge ) ) ) ;
End .
76.15.102 FileExists
Synopsis: Check whether a particular file exists in the file system.
Declaration: function FileExists(const FileName: UnicodeString; FollowLink: Boolean)
: Boolean
function FileExists(const FileName: RawByteString; FollowLink: Boolean)
: Boolean
Visibility: default
Description: FileExists returns True if a file with name FileName exists on the disk, False otherwise.
On windows, this function will return False if a directory is passed as FileName.
On Unixes, passing a directory name used to result in True. (The rationale is that on UNIX, a
directory is a file as well). As of version 3.2.0, this behaviour has been changed for a Delphi-
compatible approach.
Note that this function accepts a single filename as an argument, without wildcards. To check for the
existence of multiple files, see the FindFirst (1687) function.
1678
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Errors: None.
See also: FindFirst (1687), FileAge (1675), FileGetAttr (1679), FileSetAttr (1685)
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.15.103 FileFlush
Declaration: function FileFlush(Handle: THandle) : Boolean
Visibility: default
76.15.104 FileGetAttr
Synopsis: Return attributes of a file.
Declaration: function FileGetAttr(const FileName: UnicodeString) : LongInt
function FileGetAttr(const FileName: RawByteString) : LongInt
Visibility: default
Description: FileGetAttr returns the attribute settings of file FileName. The attribute is a OR-ed combina-
tion of the following constants:
Listing: ./sysutex/ex40.pp
Program Example40 ;
{ T h i s program demonstrates t h e F i l e G e t A t t r f u n c t i o n }
Uses s y s u t i l s ;
1679
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Procedure T e s t i t (Name : S t r i n g ) ;
Var F : L o n g i n t ;
Begin
F : = F i l e G e t A t t r (Name ) ;
I f F<>−1 then
begin
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 ( ' ex40 . pp ' ) ;
testit ( ParamStr ( 0 ) ) ;
testit ( ' . ' );
testit ( ' / ' );
End .
76.15.105 FileGetDate
Synopsis: Return the file time of an opened file.
Declaration: function FileGetDate(Handle: THandle) : LongInt
Visibility: default
Description: FileGetdate returns the filetime of the opened file with file handle Handle. It is the same as
FileAge (1675), with this difference that FileAge only needs the file name, while FilegetDate
needs an open file handle.
Errors: On error, -1 is returned.
See also: FileAge (1675)
Listing: ./sysutex/ex39.pp
Program Example39 ;
{ T h i s program demonstrates t h e F i l e G e t D a t e f u n c t i o n }
Uses s y s u t i l s ;
Var F , D : L o n g i n t ;
1680
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Begin
F:= FileCreate ( ' t e s t . dat ' ) ;
D: = FileGetDate ( F ) ;
W r i t e l n ( ' F i l e c r e a t e d on ' , DateTimeToStr ( FileDateToDateTime (D ) ) ) ;
FileClose ( F ) ;
DeleteFile ( ' t e s t . dat ' ) ;
End .
76.15.106 FileGetSymLinkTarget
Declaration: function FileGetSymLinkTarget(const FileName: UnicodeString;
out SymLinkRec: TUnicodeSymLinkRec)
: Boolean
function FileGetSymLinkTarget(const FileName: UnicodeString;
out TargetName: UnicodeString) : Boolean
function FileGetSymLinkTarget(const FileName: RawByteString;
out SymLinkRec: TRawbyteSymLinkRec)
: Boolean
function FileGetSymLinkTarget(const FileName: RawByteString;
out TargetName: RawByteString) : Boolean
Visibility: default
76.15.107 FileIsReadOnly
Synopsis: Check whether a file is read-only.
Declaration: function FileIsReadOnly(const FileName: UnicodeString) : Boolean
function FileIsReadOnly(const FileName: RawByteString) : Boolean
Visibility: default
Description: FileIsReadOnly checks whether FileName exists in the file system and is a read-only file. If
this is the case, the function returns True, otherwise False is returned.
See also: FileExists (1678)
76.15.108 FileOpen
Synopsis: Open an existing file and return a file handle
Declaration: function FileOpen(const FileName: unicodestring; Mode: Integer)
: THandle
function FileOpen(const FileName: RawByteString; Mode: Integer)
: THandle
Visibility: default
Description: FileOpen opens a file with name FileName with mode Mode. Mode can be one of the following
constants:
1681
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Under Windows and Unix, the above mode can be or-ed with one of the following sharing/locking
flags:
If the file has been successfully opened, it can be read from or written to (depending on the Mode
parameter) with the FileRead (1682) and FileWrite functions.
Remark Remark that you cannot open a file if it doesn’t exist yet, i.e. it will not be created for you. If you
want tp create a new file, or overwrite an old one, use the FileCreate (1676) function.
There are some limitations to the sharing modes.
See also: fmOpenRead (1608), fmOpenWrite (1608), fmOpenReadWrite (1608), fmShareDenyWrite (1609),
fmShareExclusive (1609), fmShareDenyRead (1609), fmShareDenyNone (1608), fmShareCompat
(1608), FileClose (1676), FileWrite (1686), FileCreate (1676), FileRead (1682), FileTruncate (1686),
FileSeek (1684)
76.15.109 FileRead
Synopsis: Read data from a file handle in a buffer.
Declaration: function FileRead(Handle: THandle; out Buffer; Count: LongInt) : LongInt
Visibility: default
1682
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Description: FileRead reads Count bytes from file-handle Handle and stores them into Buffer. Buffer
must be at least Count bytes long. No checking on this is performed, so be careful not to overwrite
any memory. Handle must be the result of a FileOpen (1681) call.
The function returns the number of bytes actually read, or -1 on error.
For an example, see FileCreate (1676)
76.15.110 FileSearch
Synopsis: Search for a file in a path.
Declaration: function FileSearch(const Name: UnicodeString;
const DirList: UnicodeString;
Options: TFileSearchOptions) : UnicodeString
function FileSearch(const Name: UnicodeString;
const DirList: UnicodeString;
ImplicitCurrentDir: Boolean) : UnicodeString
function FileSearch(const Name: RawByteString;
const DirList: RawByteString;
Options: TFileSearchOptions) : RawByteString
function FileSearch(const Name: RawByteString;
const DirList: RawByteString;
ImplicitCurrentDir: Boolean) : 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:
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 direc-
tory is searched.
Errors: On error, an empty string is returned.
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 }
1683
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
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 : ' , FileSearch (FN, P ) ) ;
end .
76.15.111 FileSeek
Synopsis: Set the current file position on a file handle.
Declaration: function FileSeek(Handle: THandle; FOffset: LongInt; Origin: LongInt)
: LongInt
function FileSeek(Handle: THandle; FOffset: Int64; Origin: LongInt)
: Int64
Visibility: default
Description: FileSeek sets the file pointer on position Offset, starting from Origin. Origin can be one of
the following values:
fsFromBeginningOffset is relative to the first byte of the file. This position is zero-based. i.e. the
first byte is at offset 0.
fsFromCurrentOffset is relative to the current position.
fsFromEndOffset is relative to the end of the file. This means that Offset can only be zero or
negative in this case.
If successful, the function returns the new file position, relative to the beginning of the file.
Remark The above mentioned constants do not exist in Delphi.
Errors: On error, -1 is returned.
See also: FileClose (1676), FileWrite (1686), FileCreate (1676), FileOpen (1681), FileRead (1682), FileTrun-
cate (1686)
Listing: ./sysutex/ex37.pp
Program Example37 ;
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 100 do
F i l e W r i t e ( F , I , SizeOf ( i ) ) ;
FileClose ( f ) ;
1684
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.112 FileSetAttr
Synopsis: Set the attributes of a file.
Description: FileSetAttr sets the attributes of FileName to Attr. If the function was successful, 0 is
returned, -1 otherwise. Attr can be set to an OR-ed combination of the predefined faXXX constants.
This function is not implemented on Unixes.
Errors: On error, -1 is returned (always on Unixes).
76.15.113 FileSetDate
Synopsis: Set the date of a file.
Declaration: function FileSetDate(const FileName: UnicodeString; Age: LongInt)
: LongInt
function FileSetDate(const FileName: RawByteString; Age: LongInt)
: LongInt
function FileSetDate(Handle: THandle; Age: LongInt) : LongInt
Visibility: default
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.
1685
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Alternatively, the filename may be specified with the FileName argument. This variant of the call
is mandatory on Unixes, 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 successful.
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.15.114 FileTruncate
Synopsis: Truncate an open file to a given size.
Declaration: function FileTruncate(Handle: THandle; Size: Int64) : Boolean
Visibility: default
Description: FileTruncate truncates the file with handle Handle to Size bytes. The file must have been
opened for writing prior to this call. The function returns True is successful, False otherwise.
For an example, see FileCreate (1676).
76.15.115 FileWrite
Synopsis: Write data from a buffer to a given file handle.
See also: FileClose (1676), FileCreate (1676), FileOpen (1681), FileRead (1682), FileTruncate (1686), File-
Seek (1684)
76.15.116 FindClose
Synopsis: Close a find handle
1686
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Description: FindClose ends a series of FindFirst (1687)/FindNext (1688) 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 (1687).
Errors: None.
See also: FindFirst (1687), FindNext (1688)
76.15.117 FindCmdLineSwitch
Synopsis: Check whether a certain switch is present on the command-line.
Declaration: function FindCmdLineSwitch(const Switch: string;
const Chars: TSysCharSet; IgnoreCase: Boolean)
: Boolean
function FindCmdLineSwitch(const Switch: string; IgnoreCase: Boolean)
: Boolean
function FindCmdLineSwitch(const Switch: string) : Boolean
Visibility: default
Description: FindCmdLineSwitch will check all command-line arguments for the presence of the option
Switch. It will return True if it was found, False otherwise. Characters that appear in Chars
(default is SwitchChars (1613)) are assumed to indicate an option (switch). If the parameter IgnoreCase
is True, case will be ignored when looking for the switch. Default is to search case sensitive.
Errors: None.
See also: SwitchChars (1613)
76.15.118 FindFirst
Synopsis: Start a file search and return a findhandle
Declaration: function FindFirst(const Path: UnicodeString; Attr: LongInt;
out Rslt: TUnicodeSearchRec) : LongInt
function FindFirst(const Path: RawByteString; Attr: LongInt;
out Rslt: TRawbyteSearchRec) : LongInt
Visibility: default
Description: FindFirst looks for files that match the name (possibly with wildcards) in Path and extra at-
tributes Attr. It then fills up the Rslt record with data gathered about the file. It returns 0 if a file
matching the specified criteria is found, a nonzero value (-1 on Unix-like platforms) otherwise.
Attr is an or-ed combination of the following constants:
1687
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
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 successful FindFirst call must always be followed by a FindClose (1686) call with the same
Rslt record. Failure to do so will result in memory leaks. If the findfirst call failed (i.e. returned a
nonzero handle) there is no need to call FindClose.
Errors: On error the function returns -1 on Unix-like platforms, a nonzero error code on Windows.
See also: FindClose (1686), FindNext (1688)
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 , 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;
FindClose ( I n f o ) ;
end ;
W r i t e l n ( ' F i n i s h e d search . Found ' , Count , ' matches ' ) ;
End .
76.15.119 FindNext
Synopsis: Find the next entry in a findhandle.
Declaration: function FindNext(var Rslt: TUnicodeSearchRec) : LongInt
function FindNext(var Rslt: TRawbyteSearchRec) : LongInt
Visibility: default
Description: FindNext finds a next occurrence of a search sequence initiated by FindFirst. If another record
matching the criteria in Rslt is found, 0 is returned, a nonzero constant is returned otherwise.
1688
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
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 (1687)
Errors: On error (no more file is found), a nonzero constant is returned.
See also: FindFirst (1687), FindClose (1686)
76.15.120 FloattoCurr
Synopsis: Convert a float to a Currency value.
Declaration: function FloattoCurr(const Value: Extended) : Currency
Visibility: default
Description: FloatToCurr converts the Value floating point value to a Currency value. It checks whether
Value is in the valid range of currencies (determined by MinCurrency (1610) and MaxCurrency
(1610)). If not, an EConvertError (1780) exception is raised.
Errors: If Value is out of range, an EConvertError (1780) exception is raised.
See also: EConvertError (1780), TryFloatToCurr (1762), MinCurrency (1610), MaxCurrency (1610)
76.15.121 FloatToDateTime
Synopsis: Convert a float to a TDateTime value.
Declaration: function FloatToDateTime(const Value: Extended) : TDateTime
Visibility: default
Description: FloatToDateTime converts the Value floating point value to a TDateTime value. It checks
whether Value is in the valid range of dates (determined by MinDateTime (1610) and MaxDateTime
(1610)). If not, an EConvertError (1780) exception is raised.
Errors: If Value is out of range, an EConvertError (1780) exception is raised.
See also: EConvertError (1780), MinDateTime (1610), MaxDateTime (1610)
76.15.122 FloatToDecimal
Synopsis: Convert a float value to a TFloatRec value.
Declaration: procedure FloatToDecimal(out Result: TFloatRec; const Value;
ValueType: TFloatValue; Precision: Integer;
Decimals: Integer)
procedure FloatToDecimal(out Result: TFloatRec; Value: Extended;
Precision: Integer; Decimals: Integer)
Visibility: default
Description: FloatToDecimal converts the float Value to a float description in the ResultTFloatRec
(1619) format. It will store Precision digits in the Digits field, of which at most Decimal
decimals.
Errors: None.
See also: TFloatRec (1619)
1689
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.123 FloatToStr
Synopsis: Convert a float value to a string using a fixed format.
More information on these formats can be found in FloatToStrF (1691). FloatToStr is completely
equivalent to the following call:
Note that on unix systems, the localization support must be enabled explicitly, see Localization
(1599).
Errors: None.
See also: FloatToStrF (1691), FormatFloat (1704), StrToFloat (1749)
Listing: ./sysutex/ex67.pp
Program Example67 ;
{ T h i s program demonstrates t h e F l o a t T o S t r f u n c t i o n }
Uses s y s u t i l s ;
begin
W r i t e l n ( Value , ' −> ' , FloatToStr ( Value ) ) ;
W r i t e l n (−Value , ' −> ' , FloatToStr (−Value ) ) ;
end ;
1690
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Begin
Testit (0.0);
Testit (1.1);
Testit ( 1 . 1 e −3);
Testit ( 1 . 1 e −20);
Testit ( 1 . 1 e −200);
Testit (1.1e+3);
Testit (1.1 e+20);
Testit (1.1 e+200);
End .
76.15.124 FloatToStrF
Synopsis: Convert a float value to a string using a given format.
1691
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
ffcurrencyMoney format. Value is converted to a string using the global variables CurrencyString,
CurrencyFormat and NegCurrFormat. The Digits parameter specifies the number of
digits following the decimal point and should be in the range -1 to 18. If Digits equals -1,
CurrencyDecimals is assumed. The Precision parameter is ignored.
ffExponentScientific format. Value is converted to a string using scientific notation: 1 digit before
the decimal point, possibly preceded by a minus sign if Value is negative. The number of
digits after the decimal point is controlled by Precision and must lie in the range 0 to 15.
ffFixedFixed point format. Value is converted to a string using fixed point notation. The result
is composed of all digits of the integer part of Value, preceded by a minus sign if Value is
negative. Following the integer part is DecimalSeparator and then the fractional part of
Value, rounded off to Digits numbers. If the number is too large then the result will be in
scientific notation.
ffGeneralGeneral number format. The argument is converted to a string using ffExponent or
ffFixed format, depending on which 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 (1690), FloatToText (1693)
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 ;
Var I , J : l o n g i n t ;
FF : TFloatFormat ;
begin
For I :=5 to 15 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 (1.1);
T e s t i t ( 1 . 1 E1 ) ;
T e s t i t ( 1 . 1 E−1);
1692
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Testit ( 1 . 1 E5 ) ;
Testit ( 1 . 1 E−5);
Testit ( 1 . 1 E10 ) ;
Testit ( 1 . 1 E−10);
Testit ( 1 . 1 E15 ) ;
Testit ( 1 . 1 E−15);
Testit ( 1 . 1 E100 ) ;
Testit ( 1 . 1 E−100);
End .
76.15.125 FloatToText
Synopsis: Return a string representation of a float, with a given format.
Declaration: function FloatToText(Buffer: PChar; Value: Extended;
format: TFloatFormat; Precision: Integer;
Digits: Integer) : LongInt
function FloatToText(Buffer: PChar; Value: Extended;
format: TFloatFormat; Precision: Integer;
Digits: Integer;
const FormatSettings: TFormatSettings) : LongInt
Visibility: default
Description: FloatToText converts the floating point variable Value to a string representation and stores it
in Buffer. The conversion is governed by format, Precision and Digits. more information
on these parameters can be found in FloatToStrF (1691). Buffer should point to enough space to
hold the result. No checking on this is performed.
The result is the number of characters that was copied in Buffer.
Errors: None.
See also: FloatToStr (1690), FloatToStrF (1691)
Listing: ./sysutex/ex69.pp
Program Example68 ;
{ T h i s program demonstrates t h e F l o a t T o S t r F f u n c t i o n }
Uses s y s u t i l s ;
Var I , J : l o n g i n t ;
FF : TFloatFormat ;
S : ShortString ;
begin
For I :=5 to 15 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 , ' , fmt : ' , Fmt [ f f ] , ' ) : ' );
1693
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Begin
Testit (1.1);
Testit ( 1 . 1 E1 ) ;
Testit ( 1 . 1 E−1);
Testit ( 1 . 1 E5 ) ;
Testit ( 1 . 1 E−5);
Testit ( 1 . 1 E10 ) ;
Testit ( 1 . 1 E−10);
Testit ( 1 . 1 E15 ) ;
Testit ( 1 . 1 E−15);
Testit ( 1 . 1 E100 ) ;
Testit ( 1 . 1 E−100);
End .
76.15.126 FloatToTextFmt
Synopsis: Convert a float value to a string using a given mask.
Declaration: function FloatToTextFmt(Buffer: PChar; Value: Extended; format: PChar;
FormatSettings: TFormatSettings) : Integer
function FloatToTextFmt(Buffer: PChar; Value: Extended; format: PChar)
: Integer
Visibility: default
Description: FloatToTextFmt returns a textual representation of Value in the memory location pointed to by
Buffer. it uses the formatting specification in Format to do this. The return value is the number
of characters that were written in the buffer.
For a list of valid formatting characters, see FormatFloat (1704)
Errors: No length checking is performed on the buffer. The buffer should point to enough memory to hold
the complete string. If this is not the case, an access violation may occur.
See also: FormatFloat (1704)
76.15.127 FmtStr
Synopsis: Format a string with given arguments.
Declaration: procedure FmtStr(var Res: string; const Fmt: string;
const args: Array of const)
procedure FmtStr(var Res: string; const Fmt: string;
const args: Array of const;
const FormatSettings: TFormatSettings)
Visibility: default
Description: FmtStr calls Format (1695) with Fmt and Args as arguments, and stores the result in Res. For
more information on how the resulting string is composed, see Format (1695).
1694
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Listing: ./sysutex/ex70.pp
Program Example70 ;
Uses s y s u t i l s ;
Var S : A n s i S t r i n g ;
Begin
S: = ' ' ;
FmtStr ( S , ' For some n i c e examples o f f o m a t t i n g see %s . ' , [ ' Format ' ] ) ;
W r i t e l n (S ) ;
End .
76.15.128 ForceDirectories
Synopsis: Create a chain of directories
Declaration: function ForceDirectories(const Dir: RawByteString) : Boolean
function ForceDirectories(const Dir: UnicodeString) : Boolean
Visibility: default
Description: ForceDirectories tries to create any missing directories in Dir till the whole path in Dir
exists. It returns True if Dir already existed or was created successfully. If it failed to create any
of the parts, False is returned.
76.15.129 Format
Synopsis: Format a string with given arguments.
Declaration: function Format(const Fmt: string; const Args: Array of const) : string
function Format(const Fmt: string; const Args: Array of const;
const FormatSettings: TFormatSettings) : string
Visibility: default
Description: Format replaces all placeholders inFmt with the arguments passed in Args and returns the resulting
string. A placeholder looks as follows:
elements between single quotes must be typed as shown without the quotes, and elements between
square brackets [ ] are optional. The meaning of the different elements are shown below:
’%’starts the placeholder. If you want to insert a literal % character, then you must insert two of them
: %%.
Index ’:’takes the Index-th element in the argument array as the element to insert. If index is
omitted, then the zeroth argument is taken.
1695
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
’-’tells Format to left-align the inserted text. The default behaviour is to right-align inserted text.
This can only take effect if the Width element is also specified.
Widththe inserted string must have at least Width characters. If not, the inserted string will be
padded with spaces. By default, the string is left-padded, resulting in a right-aligned string.
This behaviour can be changed by the usage of the ’-’ character.
’.’ PrecisionIndicates the precision to be used when converting the argument. The exact meaning of
this parameter depends on ArgType.
The Index, Width and Precision parameters can be replaced by *, in which case their value
will be read from the next element in the Args array. This value must be an integer, or an EConvert-
Error (1780) 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 (1691),
where the optional precision is used to specify the total number of decimals. (default a value of
15 is used). The exponent is formatted using maximally 3 digits.
In short, the E specifier formats it’s 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 argu-
ment is converted to a decimal string, using fixed notation (see FloatToStrF (1691)). Precision
indicates the number of digits following the decimal point.
In short, the F specifier formats it’s 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 it’s argument as follows:
FloatToStrF(Argument,ffGeneral,Precision,3)
MCurrency format. the next argument in the Args array must be a floating point value. The ar-
gument 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 (1691)
In short, the M specifier formats it’s 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.
1696
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
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).
Listing: ./sysutex/ex71.pp
Program example71 ;
{ $mode o b j f p c }
Uses s y s u t i l s ;
Var P : P o i n t e r ;
fmt , S : s t r i n g ;
{ Expected o u t p u t :
[%d ] => [ 1 0 ]
[%%] => [%]
[%10d ] => [ 10]
[%.4 d ] => [ 0 0 1 0 ]
[%10.4d ] => [ 0010]
[%0: d ] => [ 1 0 ]
[%0:10d ] => [ 10]
[%0:10.4 d ] => [ 0010]
[%0:−10d ] => [ 1 0 ]
[%0: −10.4d ] => [0010 ]
[% − * . * d ] => [ 0 0 0 1 0 ]
}
Procedure T e s t I n t e g e r ;
begin
Try
Fmt : = ' [%d ] ' ; S: = Format ( Fmt , [ 1 0 ] ) ; w r i t e l n ( Fmt : 1 2 , ' => ' , s ) ;
Fmt : = ' [%%] ' ; S: = Format ( Fmt , [ 1 0 ] ) ; w r i t e l n ( Fmt : 1 2 , ' => ' , s ) ;
Fmt : = ' [%10d ] ' ; S: = Format ( Fmt , [ 1 0 ] ) ; w r i t e l n ( Fmt : 1 2 , ' => ' , s ) ;
f m t : = ' [%.4 d ] ' ; S: = Format ( fmt , [ 1 0 ] ) ; w r i t e l n ( Fmt : 1 2 , ' => ' , s ) ;
Fmt : = ' [%10.4d ] ' ; S: = Format ( Fmt , [ 1 0 ] ) ; w r i t e l n ( Fmt : 1 2 , ' => ' , s ) ;
Fmt : = ' [%0: d ] ' ; S: = Format ( Fmt , [ 1 0 ] ) ; w r i t e l n ( Fmt : 1 2 , ' => ' , s ) ;
Fmt : = ' [%0:10d ] ' ; S: = Format ( Fmt , [ 1 0 ] ) ; w r i t e l n ( Fmt : 1 2 , ' => ' , s ) ;
Fmt : = ' [%0:10.4 d ] ' ; S: = Format ( Fmt , [ 1 0 ] ) ; w r i t e l n ( Fmt : 1 2 , ' => ' , s ) ;
1697
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Fmt : = ' [%0:−10d ] ' ; S: = Format ( Fmt , [ 1 0 ] ) ; w r i t e l n ( Fmt : 1 2 , ' => ' , s ) ;
Fmt : = ' [%0: −10.4d ] ' ; S: = Format ( fmt , [ 1 0 ] ) ; w r i t e l n ( Fmt : 1 2 , ' => ' , s ) ;
Fmt : = ' [% − * . * d ] ' ; S: = Format ( fmt , [ 4 , 5 , 1 0 ] ) ; w r i t e l n ( Fmt : 1 2 , ' => ' , s ) ;
except
On E : E x c e p t i o n do
begin
W r i t e l n ( ' E x c e p t i o n caught : ' ,E . Message ) ;
end ;
end ;
w r i t e l n ( ' Press e n t e r ' ) ;
readln ;
end ;
{ Expected o u t p u t :
[%x ] => [ A ]
[%10x ] => [ A]
[%10.4 x ] => [ 000A ]
[%0: x ] => [ A ]
[%0:10 x ] => [ A]
[%0:10.4 x ] => [ 000A ]
[%0:−10x ] => [ A ]
[%0: −10.4 x ] => [000A ]
[% − * . * x ] => [0000A ]
}
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 ] => [0012D687 ]
}
Procedure T e s t P o i n t e r ;
1698
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
begin
P: = P o i n t e r ( 1 2 3 4 5 6 7 ) ;
try
Fmt : = ' [ 0 x%p ] ' ; S: = Format ( Fmt , [ P ] ) ; w r i t e l n ( Fmt : 1 2 , ' => ' , s ) ;
Fmt : = ' [ 0 x%10p ] ' ; S: = Format ( Fmt , [ P ] ) ; w r i t e l n ( Fmt : 1 2 , ' => ' , s ) ;
Fmt : = ' [ 0 x%10.4p ] ' ; S: = Format ( Fmt , [ P ] ) ; w r i t e l n ( Fmt : 1 2 , ' => ' , s ) ;
Fmt : = ' [ 0 x%0:p ] ' ; S: = Format ( Fmt , [ P ] ) ; w r i t e l n ( Fmt : 1 2 , ' => ' , s ) ;
Fmt : = ' [ 0 x%0:10p ] ' ; S: = Format ( Fmt , [ P ] ) ; w r i t e l n ( Fmt : 1 2 , ' => ' , s ) ;
Fmt : = ' [ 0 x %0:10.4p ] ' ; S: = Format ( Fmt , [ P ] ) ; w r i t e l n ( Fmt : 1 2 , ' => ' , s ) ;
Fmt : = ' [ 0 x%0:−10p ] ' ; S: = Format ( Fmt , [ P ] ) ; w r i t e l n ( Fmt : 1 2 , ' => ' , s ) ;
Fmt : = ' [ 0 x%0:−10.4p ] ' ; S: = Format ( fmt , [ P ] ) ; w r i t e l n ( Fmt : 1 2 , ' => ' , s ) ;
Fmt : = ' [% − * . * p ] ' ; S: = Format ( fmt , [ 4 , 5 , P ] ) ; w r i t e l n ( Fmt : 1 2 , ' => ' , s ) ;
except
On E : E x c e p t i o n do
begin
W r i t e l n ( ' E x c e p t i o n caught : ' ,E . Message ) ;
end ;
end ;
w r i t e l n ( ' Press e n t e r ' ) ;
readln ;
end ;
{ Expected o u t p u t :
[%s ]= > [ T h i s i s a s t r i n g ]
[%0: s ]= > [ T h i s i s a s t r i n g ]
[%0:18 s ]= > [ T h i s i s a s t r i n g ]
[%0:−18s ]= > [ T h i s i s a s t r i n g ]
[%0:18.12 s ]= > [ This i s a s t ]
[% − * . * s ]= > [ T h i s i s a s t ]
}
Procedure T e s t S t r i n g ;
begin
try
Fmt : = ' [%s ] ' ; S: = Format ( fmt , [ ' T h i s i s a s t r i n g ' ] ) ; W r i t e l n ( f m t : 1 2 , ' => ' , s ) ;
f m t : = ' [%0: s ] ' ; s : = Format ( fmt , [ ' T h i s i s a s t r i n g ' ] ) ; W r i t e l n ( f m t : 1 2 , ' => ' , s ) ;
f m t : = ' [%0:18 s ] ' ; s : = Format ( fmt , [ ' T h i s i s a s t r i n g ' ] ) ; W r i t e l n ( f m t : 1 2 , ' => ' , s ) ;
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 4E+000]
[%0: e ] => [1.2340000000000000E+000]
[%0:10e ] => [1.2340000000000000E+000]
[%0:10.4 e ] => [ 1 . 2 3 4E+000]
[%0:−10e ] => [1.2340000000000000E+000]
[%0: −10.4e ] => [ 1 . 2 3 4E+000]
1699
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
[% − * . * e ] => [ 1 . 2 3 4 0E+000]
}
Procedure T e s t E x p o n e n t i a l ;
begin
Try
Fmt : = ' [%e ] ' ; S: = Format ( Fmt , [ 1 . 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , ' => ' , s ) ;
Fmt : = ' [%10e ] ' ; S: = Format ( Fmt , [ 1 . 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , ' => ' , s ) ;
Fmt : = ' [%10.4e ] ' ; S: = Format ( Fmt , [ 1 . 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , ' => ' , s ) ;
Fmt : = ' [%0: e ] ' ; S: = Format ( Fmt , [ 1 . 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , ' => ' , s ) ;
Fmt : = ' [%0:10e ] ' ; S: = Format ( Fmt , [ 1 . 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , ' => ' , s ) ;
Fmt : = ' [%0:10.4 e ] ' ; S: = Format ( Fmt , [ 1 . 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , ' => ' , s ) ;
Fmt : = ' [%0:−10e ] ' ; S: = Format ( Fmt , [ 1 . 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , ' => ' , s ) ;
Fmt : = ' [%0: −10.4e ] ' ; S: = Format ( fmt , [ 1 . 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , ' => ' , s ) ;
Fmt : = ' [% − * . * e ] ' ; S: = Format ( fmt , [ 4 , 5 , 1 . 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , ' => ' , s ) ;
except
On E : E x c e p t i o n do
begin
W r i t e l n ( ' E x c e p t i o n caught : ' ,E . Message ) ;
end ;
end ;
w r i t e l n ( ' Press e n t e r ' ) ;
readln ;
end ;
{ Expected o u t p u t :
[%e ] => [ −1.2340000000000000E+000]
[%10e ] => [ −1.2340000000000000E+000]
[%10.4e ] => [ −1.234E+000]
[%0: e ] => [ −1.2340000000000000E+000]
[%0:10e ] => [ −1.2340000000000000E+000]
[%0:10.4 e ] => [ −1.234E+000]
[%0:−10e ] => [ −1.2340000000000000E+000]
[%0: −10.4e ] => [ −1.234E+000]
[% − * . * e ] => [ −1.2340E+000]
}
Procedure T e s t N e g a t i v e E x p o n e n t i a l ;
begin
Try
Fmt : = ' [%e ] ' ; S: = Format ( Fmt , [ − 1 . 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , ' => ' , s ) ;
Fmt : = ' [%10e ] ' ; S: = Format ( Fmt , [ − 1 . 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , ' => ' , s ) ;
Fmt : = ' [%10.4e ] ' ; S: = Format ( Fmt , [ − 1 . 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , ' => ' , s ) ;
Fmt : = ' [%0: e ] ' ; S: = Format ( Fmt , [ − 1 . 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , ' => ' , s ) ;
Fmt : = ' [%0:10e ] ' ; S: = Format ( Fmt , [ − 1 . 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , ' => ' , s ) ;
Fmt : = ' [%0:10.4 e ] ' ; S: = Format ( Fmt , [ − 1 . 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , ' => ' , s ) ;
Fmt : = ' [%0:−10e ] ' ; S: = Format ( Fmt , [ − 1 . 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , ' => ' , s ) ;
Fmt : = ' [%0: −10.4e ] ' ; S: = Format ( fmt , [ − 1 . 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , ' => ' , s ) ;
Fmt : = ' [% − * . * e ] ' ; S: = Format ( fmt , [ 4 , 5 , − 1 . 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , ' => ' , s ) ;
except
On E : E x c e p t i o n do
begin
W r i t e l n ( ' E x c e p t i o n caught : ' ,E . Message ) ;
end ;
end ;
w r i t e l n ( ' Press e n t e r ' ) ;
readln ;
end ;
{ Expected o u t p u t :
1700
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
{ Expected o u t p u t :
[%e ] => [ −1.2340000000000000E−002]
[%10e ] => [ −1.2340000000000000E−002]
[%10.4e ] => [ −1.234E−002]
[%0: e ] => [ −1.2340000000000000E−002]
[%0:10e ] => [ −1.2340000000000000E−002]
[%0:10.4 e ] => [ −1.234E−002]
[%0:−10e ] => [ −1.2340000000000000E−002]
[%0: −10.4e ] => [ −1.234E−002]
[% − * . * e ] => [ −1.2340E−002]
}
Procedure TestSmallNegExponential ;
begin
Try
Fmt : = ' [%e ] ' ; S: = Format ( Fmt , [ − 0 . 0 1 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , ' => ' , s ) ;
Fmt : = ' [%10e ] ' ; S: = Format ( Fmt , [ − 0 . 0 1 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , ' => ' , s ) ;
Fmt : = ' [%10.4e ] ' ; S: = Format ( Fmt , [ − 0 . 0 1 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , ' => ' , s ) ;
Fmt : = ' [%0: e ] ' ; S: = Format ( Fmt , [ − 0 . 0 1 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , ' => ' , s ) ;
Fmt : = ' [%0:10e ] ' ; S: = Format ( Fmt , [ − 0 . 0 1 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , ' => ' , s ) ;
Fmt : = ' [%0:10.4 e ] ' ; S: = Format ( Fmt , [ − 0 . 0 1 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , ' => ' , s ) ;
Fmt : = ' [%0:−10e ] ' ; S: = Format ( Fmt , [ − 0 . 0 1 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , ' => ' , s ) ;
Fmt : = ' [%0: −10.4e ] ' ; S: = Format ( fmt , [ − 0 . 0 1 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , ' => ' , s ) ;
Fmt : = ' [% − * . * e ] ' ; S: = Format ( fmt , [ 4 , 5 , − 0 . 0 1 2 3 4 ] ) ; w r i t e l n ( Fmt : 1 2 , ' => ' , s ) ;
except
On E : E x c e p t i o n do
begin
1701
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
begin
TestInteger ;
TestHexadecimal ;
TestPointer ;
teststring ;
TestExponential ;
TestNegativeExponential ;
TestSmallExponential ;
TestSmallNegExponential ;
end .
76.15.130 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 (1695) and stores the result in Buf.
Listing: ./sysutex/ex72.pp
Program Example72 ;
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 = ' For some n i c e examples o f f o m a t t i n g see %s . ' ;
Begin
S: = ' ' ;
SetLength ( S , FormatBuf (S[ 1 ] , 2 5 5 , Fmt [ 1 ] , Length ( Fmt ) , [ ' Format ' ] ) ) ;
W r i t e l n (S ) ;
End .
1702
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.131 FormatCurr
Synopsis: Format a currency
Declaration: function FormatCurr(const Format: string; Value: Currency) : string
function FormatCurr(const Format: string; Value: Currency;
const FormatSettings: TFormatSettings) : string
Visibility: default
Description: FormatCurr formats the currency Value according to the formatting rule in the Format param-
eter, and returns the resulting string.
For an explanation of the formatting characters usable in the Format parameter, see FormatFloat
(1704).
See also: FormatFloat (1704), FloatToText (1693)
76.15.132 FormatDateTime
Synopsis: Return a string representation of a TDateTime value with a given format.
Declaration: function FormatDateTime(const FormatStr: string; DateTime: TDateTime;
Options: TFormatDateTimeOptions) : string
function FormatDateTime(const FormatStr: string; DateTime: TDateTime;
const FormatSettings: TFormatSettings;
Options: TFormatDateTimeOptions) : string
Visibility: default
Description: FormatDateTime formats the date and time encoded in DateTime according to the format-
ting given in FormatStr. The complete list of formatting characters can be found in formatchars
(1604).
When the format string is empty, ’c’ is used instead.
Note that on unix systems, the localization support must be enabled explicitly, see Localization
(1599).
Errors: On error (such as an invalid character in the formatting string), and EConvertError (1780) exception
is raised.
See also: DateTimeToStr (1656), DateToStr (1659), TimeToStr (1759), StrToDateTime (1747), EConvertEr-
ror (1780), Localization (1599)
Listing: ./sysutex/ex14.pp
Program Example14 ;
Uses s y s u t i l s ;
Begin
ThisMoment : =Now;
W r i t e l n ( 'Now : ' , FormatDateTime ( ' hh : nn ' , ThisMoment ) ) ;
W r i t e l n ( 'Now : ' , FormatDateTime ( 'DD MM YYYY ' , ThisMoment ) ) ;
W r i t e l n ( 'Now : ' , FormatDateTime ( ' c ' , ThisMoment ) ) ;
End .
1703
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.133 FormatFloat
Synopsis: Format a float according to a certain mask.
Declaration: function FormatFloat(const Format: string; Value: Extended) : string
function FormatFloat(const Format: string; Value: Extended;
const FormatSettings: TFormatSettings) : string
Visibility: default
Description: FormatFloat formats the floating-point value given by Value using the format specifications in
Format. The format specifier can give format specifications for positive, negative or zero values
(separated by a semicolon).
If the format specifier is empty or the value needs more than 18 digits to be correctly represented, the
result is formatted with a call to FloatToStrF (1691) with the ffGeneral format option.
The following format specifiers are supported:
0is a digit place holder. If there is a corresponding digit in the value being formatted, then it replaces
the 0. If not, the 0 is left as-is.
#is also a digit place holder. If there is a corresponding digit in the value being formatted, then it
replaces the #. If not, it is removed. by a space.
.determines the location of the decimal point. Only the 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 con-
tains one or more ’,’ characters, 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.
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 ' ,
' #.###E−0 ' ) ;
1704
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
NrValue = 5 ;
FormatValues : Array [ 1 . . NrValue ] of Double =
(1234 , −1234 ,0.5 ,0 , −0.5);
Width = 1 2 ;
FWidth = 2 0 ;
Var
I , J : Integer ;
S : String ;
begin
Write ( ' Format ' : FWidth ) ;
For I :=1 to NrValue do
Write ( FormatValues [ i ] : Width : 2 ) ;
Writeln ;
For I :=1 to NrFormat do
begin
Write ( F o r m a t S t r i n g s [ i ] : FWidth ) ;
For J :=1 to NrValue do
begin
S: = FormatFloat ( F o r m a t S t r i n g s [ I ] , FormatValues [ j ] ) ;
Write (S : Width ) ;
end ;
Writeln ;
end ;
End .
76.15.134 FreeAndNil
Synopsis: Free object if needed, and set object reference to Nil
Declaration: procedure FreeAndNil(var obj)
Visibility: default
Description: FreeAndNil will free the object in Obj and will set the reference in Obj to Nil. The reference
is set to Nil first, so if an exception occurs in the destructor of the object, the reference will be Nil
anyway.
Errors: Exceptions that occur during the destruction of Obj are not caught.
76.15.135 FreeMemAndNil
Synopsis: Free the heap memory pointed to by a pointer and set pointer to nil.
Declaration: procedure FreeMemAndNil(var p)
Visibility: default
Description: FreeMemAndNil will free the memory pointed to by P and will set P to Nil. Note that this function
is not type safe; the programmer is responsible for ensuring that this function is called with a correct
pointer parameter. Failure to do so may result in run-time errors.
See also: FreeAndNil (1705)
1705
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.136 GetAppConfigDir
Synopsis: Return the appropriate directory for the application’s configuration files.
76.15.137 GetAppConfigFile
Synopsis: Return an appropriate name for an application configuration file.
Declaration: function GetAppConfigFile(Global: Boolean) : string
function GetAppConfigFile(Global: Boolean; SubDir: Boolean) : string
Visibility: default
Description: GetAppConfigFile returns the name of a file in which the application can store its configuration
parameters. The exact name and location of the file depends on the customs of the operating system.
The Global parameter determines whether it is a global configuration file (value True) or a per-
sonal configuration file (value False).
The parameter SubDir, in case it is set to True, will insert the name of a directory before the
filename. This can be used in case the application needs to store other data than configuration data
in an application-specific directory. Default behaviour is to set this to False.
Note that on Windows, even when Subdir is False, a subdirectory is created for the application
configuration files, as per the windows specifications. Specifying true will create a subdirectory of
the application settings subdirectory.
The default file extension of the returned file is: .cfg
No assumptions should be made about the existence or writeability of this file, or the directory where
the file should reside. It is best to call ForceDirectories (1695) prior to opening a file with the resulting
filename.
1706
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
On systems where the operating system provides a call to determine the location of configuration
files, this call will be used. On systems where there is no such call, an algorithm is used which
reflects common practice on that system.
The application name is deduced from the binary name via the ApplicationName (1645) call, but can
be configured by means of the OnGetApplicationName (1628) callback.
If VendorName (1771) is not-empty, then VendorName will be inserted in the path for the config
file directory.
Errors: None.
See also: GetAppConfigDir (1706), OnGetApplicationName (1628), ApplicationName (1645), CreateDir (1653),
ConfigExtension (1606), SysConfigDir (1613), VendorName (1771)
76.15.138 GetCurrentDir
Synopsis: Return the current working directory of the application.
Declaration: function GetCurrentDir : AnsiString
Visibility: default
Description: GetCurrentDir returns the current working directory.
Errors: None.
See also: SetCurrentDir (1727), DiskFree (1663), DiskSize (1664)
Listing: ./sysutex/ex28.pp
Program Example28 ;
{ T h i s program demonstrates t h e G e t C u r r e n t D i r f u n c t i o n }
Uses s y s u t i l s ;
Begin
Writeln ( ' Current D i r e c t o r y i s : ' , GetCurrentDir ) ;
End .
76.15.139 GetDirs
Synopsis: Return a list of directory names from a path.
Declaration: function GetDirs(var DirName: UNICODESTRING;
var Dirs: Array of PUNICODECHAR) : LongInt
function GetDirs(var DirName: RAWBYTESTRING;
var Dirs: Array of PANSICHAR) : LongInt
Visibility: default
Description: GetDirs splits DirName in a null-byte separated list of directory names, Dirs is an array of
PChars, pointing to these directory names. The function returns the number of directories found,
or -1 if none were found. DirName must contain only OSDirSeparator as Directory separator chars.
Errors: None.
See also: ExtractRelativePath (1674)
1707
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Listing: ./sysutex/ex45.pp
Program Example45 ;
{ T h i s program demonstrates t h e G e t D i r s f u n c t i o n }
{ $H+ }
Uses s y s u t i l s ;
Begin
Dir := GetCurrentDir ;
Writeln ( ' Dir : ' , Dir ) ;
NewDir : = ' ' ;
count : = G e t D i r s ( D i r , D i r s ) ;
For I :=0 to Count−1 do
begin
NewDir : = NewDir+ ' / ' +StrPas ( D i r s [ I ] ) ;
W r i t e l n ( NewDir ) ;
end ;
End .
76.15.140 GetDriveIDFromLetter
Synopsis: Return the drive ID based on a drive letter
Declaration: function GetDriveIDFromLetter(const ADrive: RawByteString) : Byte
function GetDriveIDFromLetter(const ADrive: UnicodeString) : Byte
Visibility: default
Description: GetDriveIDFromLetter returns the drive ID based on a drive letter. The drive ID can then be
used in the DiskSize (1664) and DiskFree (1663) calls.
See also: DiskSize (1664), DiskFree (1663)
76.15.141 GetEnvironmentString
Synopsis: Return an environment variable by index.
Declaration: function GetEnvironmentString(Index: Integer) : AnsiString
Visibility: default
Description: GetEnvironmentString returns the Index-th environment variable. The index is 1 based,
and is bounded from above by the result of GetEnvironmentVariableCount (1709).
For an example, GetEnvironmentVariableCount (1709).
Remark Note that on Windows, environment strings can start with an equal sign (=). This is a trick used to
pass the current working directory to a newly created process. In this case, extracting the variable
name as the characters before the first equal sign will result in an empty name.
Errors: If there is no environment, an empty string is returned.
See also: GetEnvironmentVariable (1709), GetEnvironmentVariableCount (1709)
1708
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.142 GetEnvironmentVariable
Synopsis: Return the value of an environment variable.
Declaration: function GetEnvironmentVariable(const EnvVar: AnsiString) : AnsiString
function GetEnvironmentVariable(const EnvVar: UnicodeString)
: UnicodeString
Visibility: default
Description: GetEnvironmentVariable returns the value of the EnvVar environment variable. If the spec-
ified variable does not exist or EnvVar is empty, an empty string is returned.
See also: GetEnvironmentString (1708), GetEnvironmentVariableCount (1709)
76.15.143 GetEnvironmentVariableCount
Synopsis: Return the number of variables in the environment.
Declaration: function GetEnvironmentVariableCount : Integer
Visibility: default
Description: GetEnvironmentVariableCount returns the number of variables in the environment. The
number is 1 based, but the result may be zero if there are no environment variables.
Errors: If there is no environment, -1 may be returned.
See also: GetEnvironmentString (1708), GetEnvironmentVariable (1709)
Listing: ./sysutex/ex92.pp
{ $h+ }
program example92 ;
{ T h i s program demonstrates t h e
GetEnvironmentVariableCount f u n c t i o n }
uses s y s u t i l s ;
Var
I : Integer ;
begin
For I :=1 to GetEnvironmentVariableCount do
Writeln ( i : 3 , ' : ' , GetEnvironmentString ( i ) ) ;
end .
76.15.144 GetFileAsString
Declaration: function GetFileAsString(const aFileName: RawByteString) : RawByteString
function GetFileAsString(const aFileName: RawByteString;
aEncoding: TEncoding) : RawByteString
function GetFileAsString(const aFileName: UnicodeString) : UnicodeString
function GetFileAsString(const aFileName: UnicodeString;
aEncoding: TEncoding) : UnicodeString
Visibility: default
1709
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.145 GetFileContents
Declaration: function GetFileContents(const aFileName: RawByteString) : TBytes
function GetFileContents(const aFileName: UnicodeString) : TBytes
function GetFileContents(const aHandle: THandle) : TBytes
Visibility: default
76.15.146 GetFileHandle
Synopsis: Extract OS handle from an untyped file or text file.
76.15.147 GetLastOSError
Synopsis: Return the last code from the OS.
Declaration: function GetLastOSError : Integer
Visibility: default
Description: GetLastOSError returns the error code from the last operating system call. It does not reset this
code. In general, it should be called when an operating system call reported an error condition. In
that case, GetLastOSError gives extended information about the error.
No assumptions should be made about the resetting of the error code by subsequent OS calls. This
may be platform dependent.
See also: RaiseLastOSError (1724)
76.15.148 GetLocalTime
Synopsis: Get the local time.
Declaration: procedure GetLocalTime(var SystemTime: TSystemTime)
Visibility: default
Description: GetLocalTime returns the system time in a TSystemTime (1624) format.
Errors: None.
See also: Now (1723), Date (1655), Time (1757), TSystemTime (1624)
76.15.149 GetLocalTimeOffset
Synopsis: Return local timezone offset
Declaration: function GetLocalTimeOffset : Integer
Visibility: default
1710
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Description: GetLocalTimeOffset returns the local timezone offset in minutes. This is the difference be-
tween UTC time and local time:
The TDateTime-overloads return the offset at the specified DateTime. In case the TDateTime-aware
function is not supported on the current platform, False is returned or it falls back to the offset to
current time (depending on the overload used).
Note that on Linux/Unix, the information returned from the TDateTime-unaware function may be
inaccurate around the DST time changes (for optimization). In that case, the unix.ReReadLocalTime
(2079) unit must be used to re-initialize the timezone information.
The TDateTime-aware overloads are supported currently only on Windows Vista and newer.
See also: unix.ReReadLocalTime (2079), Date (1655), Time (1757), Now (1723)
76.15.150 GetModuleName
Synopsis: Return the name of the current module
76.15.151 GetTempDir
Synopsis: Return name of system’s temporary directory
Declaration: function GetTempDir(Global: Boolean) : string
function GetTempDir : string
Visibility: default
Description: GetTempDir returns the temporary directory of the system. If Global is True (the default
value) it returns the system temporary directory, if it is False then a directory private to the user is
returned. The returned name will end with a directory delimiter character.
These directories may be the same. No guarantee is made that this directory exists or is writeable by
the user.
The OnGetTempDir (1628) handler may be set to provide custom handling of this routine: One could
implement callbacks which take into consideration frameworks like KDE or GNOME, and return a
different value from the default system implementation.
1711
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.152 GetTempFileName
Synopsis: Return the name of a temporary file.
Visibility: default
Description: GetTempFileName returns the name of a temporary file in directory Dir. The name of the file
starts with Prefix.
If Dir is empty, the value returned by GetTempDir is used, and if Prefix is empty, ’TMP’ is
used.
The OnGetTempFile (1628) handler may be set to provide custom handling of this routine: One could
implement callbacks which take into consideration frameworks like KDE or GNOME, and return a
different value from the default system implementation.
Errors: On error, an empty string is returned.
76.15.153 GetTickCount
Synopsis: Get tick count (32-bit, deprecated)
Declaration: function GetTickCount : LongWord
Visibility: default
Description: GetTickCount returns an increasing clock tick count in milliseconds. It is useful for time mea-
surements, but no assumptions should be made as to the interval between the ticks. This function is
provided for Delphi compatibility, use GetTickCount64 (1712) instead.
See also: GetTickCount64 (1712), Now (1723), Time (1757), Sleep (1729)
76.15.154 GetTickCount64
Synopsis: Get tick count (64-bit)
Declaration: function GetTickCount64 : QWord
Visibility: default
Description: GetTickCount64 returns an increasing clock tick count in milliseconds. It is useful for time
measurements, but no assumptions should be made as to the interval between the ticks.
See also: Now (1723), Time (1757), Sleep (1729)
1712
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.155 GetUserDir
Synopsis: Returns the current user’s home directory.
76.15.156 GuidCase
Synopsis: Return the index of a GUID in an array of GUID values
Declaration: function GuidCase(const GUID: TGUID; const List: Array of TGuid)
: Integer
Visibility: default
Description: GuidCase returns the index of GUID in the array List, where 0 denotes the first element in the
list. If GUID is not present in the list, -1 is returned.
See also: IsEqualGUID (1718)
76.15.157 GUIDToString
Synopsis: Convert a TGUID to a string representation.
{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}
See also: Supports (1755), #rtl.system.TGUID (1387), StringToGUID (1736), IsEqualGuid (1718)
76.15.158 HashName
Synopsis: Calculate a hash from a null-terminated string
Declaration: function HashName(Name: PAnsiChar) : LongWord
Visibility: default
Description: HashName calculates a hash value from a null terminated string. The hash value is calculated in
such a way that it returns the same value for strings that only differ in case.
1713
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.159 HookSignal
Synopsis: Hook a specified signal
76.15.160 IncAMonth
Synopsis: Increase a date with a certain amount of months
Declaration: procedure IncAMonth(var Year: Word; var Month: Word; var Day: Word;
NumberOfMonths: Integer)
Visibility: default
Description: IncAMonth increases the date as specified by Year, Month, Day with NumberOfMonths. It
takes care of the number of days in a month when calculating the result.
This function does the same as IncMonth (1715), but operates on an already decoded date.
76.15.161 IncludeLeadingPathDelimiter
Synopsis: Prepend a path delimiter if there is not already one.
Declaration: function IncludeLeadingPathDelimiter(const Path: UNICODESTRING)
: UNICODESTRING
function IncludeLeadingPathDelimiter(const Path: RAWBYTESTRING)
: RAWBYTESTRING
Visibility: default
Description: IncludeLeadingPathDelimiter will insert a path delimiter (#rtl.system.DirectorySeparator
(1339)) in the first position of Path, if there is not already a directory separator at that position.
It will return the resulting string. If the path is empty, a DirectorySeparator character is
returned.
See also: IncludeTrailingPathDelimiter (1715), ExcludeLeadingPathDelimiter (1668), ExcludeTrailingPathDe-
limiter (1668), ConcatPaths (1653)
Listing: ./sysutex/ex94.pp
Program Example94 ;
{ T h i s program demonstrates t h e I n c l u d e L e a d i n g P a t h D e l i m i t e r f u n c t i o n }
Uses s y s u t i l s ;
Begin
End .
1714
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.162 IncludeTrailingBackslash
Synopsis: Add trailing directory separator to a pathname, if needed.
Visibility: default
Description: IncludeTrailingBackslash is provided for backwards compatibility with Delphi. Use In-
cludeTrailingPathDelimiter (1715) instead.
See also: IncludeTrailingPathDelimiter (1715), ExcludeTrailingPathDelimiter (1668), PathDelim (1611), Is-
PathDelimiter (1719)
76.15.163 IncludeTrailingPathDelimiter
Synopsis: Add trailing directory separator to a pathname, if needed.
Declaration: function IncludeTrailingPathDelimiter(const Path: UNICODESTRING)
: UNICODESTRING
function IncludeTrailingPathDelimiter(const Path: RAWBYTESTRING)
: RAWBYTESTRING
Visibility: default
Description: IncludeTrailingPathDelimiter adds a trailing path delimiter character (PathDelim (1611))
to Path if none is present yet, and returns the result.
If Path is empty, a path delimiter is returned, for Delphi compatibility.
See also: IncludeTrailingBackslash (1715), ExcludeTrailingPathDelimiter (1668), PathDelim (1611), IsPathDe-
limiter (1719)
76.15.164 IncMonth
Synopsis: Increases the month in a TDateTime value with a given amount.
Listing: ./sysutex/ex15.pp
1715
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Program Example15 ;
Uses s y s u t i l s ;
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 ( ' 12 months ago : ' , DateToStr ( IncMonth ( ThisDay , − 1 2 ) ) ) ;
W r i t e l n ( ' 12 months from now : ' , DateToStr ( IncMonth ( ThisDay , 1 2 ) ) ) ;
W r i t e l n ( ' 18 months ago : ' , DateToStr ( IncMonth ( ThisDay , − 1 8 ) ) ) ;
W r i t e l n ( ' 18 months from now : ' , DateToStr ( IncMonth ( ThisDay , 1 8 ) ) ) ;
End .
76.15.165 InquireSignal
Synopsis: Check whether a signal handler is set (unix only)
Declaration: function InquireSignal(RtlSigNum: Integer) : TSignalState
Visibility: default
Description: RtlSigNum will check whether the signal RtlSigNum is being handled, and by whom. It returns
a TSignalState result to report the state of the signal, which can be one of the following values:
76.15.166 IntToHex
Synopsis: Convert an integer value to a hexadecimal string.
Visibility: default
1716
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Description: IntToHex converts Value to a hexadecimal string representation. The result will contain at least
Digits characters. If Digits is less than the needed number of characters, the string will NOT
be truncated. If Digits is larger than the needed number of characters, the result is padded with
zeroes.
Errors: None.
See also: IntToStr (1717)
Listing: ./sysutex/ex73.pp
Program Example73 ;
Uses s y s u t i l s ;
Var I : l o n g i n t ;
Begin
For I :=0 to 31 do
begin
W r i t e l n ( IntToHex ( 1 shl I , 8 ) ) ;
W r i t e l n ( IntToHex (15 shl I , 8 ) )
end ;
End .
76.15.167 IntToStr
Synopsis: Convert an integer value to a decimal string.
Declaration: function IntToStr(Value: LongInt) : string
function IntToStr(Value: Int64) : string
function IntToStr(Value: QWord) : string
Visibility: default
Description: IntToStr coverts Value to it’s string representation. The resulting string has only as much
characters as needed to represent the value. If the value is negative a minus sign is prepended to the
string.
Errors: None.
See also: IntToHex (1716), StrToInt (1750)
Listing: ./sysutex/ex74.pp
Program Example74 ;
{ T h i s program demonstrates t h e I n t T o S t r f u n c t i o n }
Uses s y s u t i l s ;
Var I : l o n g i n t ;
Begin
For I :=0 to 31 do
begin
1717
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
W r i t e l n ( I n t T o S t r ( 1 shl I ) ) ;
W r i t e l n ( I n t T o S t r (15 shl I ) ) ;
end ;
End .
76.15.168 IsDelimiter
Synopsis: Check whether a given string is a delimiter character.
Declaration: function IsDelimiter(const Delimiters: string; const S: string;
Index: SizeInt) : Boolean
Visibility: default
Description: IsDelimiter checks whether the Index-th character in the string S is a delimiter character as
passed in Delimiters. If Index is out of range, False is returned.
Errors: None.
76.15.169 IsEqualGUID
Synopsis: Check whether two TGUID variables are equal.
Declaration: function IsEqualGUID(const guid1: TGUID; const guid2: TGUID) : Boolean
Visibility: default
Description: IsEqualGUID checks whether guid1 and guid2 are equal, and returns True if this is the case,
or False otherwise.
See also: Supports (1755), #rtl.system.TGUID (1387), StringToGUID (1736), GuidToString (1713)
76.15.170 IsLeadChar
Declaration: function IsLeadChar(C: AnsiChar) : Boolean; Overload
function IsLeadChar(B: Byte) : Boolean; Overload
function IsLeadChar(Ch: WideChar) : Boolean; Overload
Visibility: default
76.15.171 IsLeapYear
Synopsis: Determine whether a year is a leap year.
Declaration: function IsLeapYear(Year: Word) : Boolean
Visibility: default
1718
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Listing: ./sysutex/ex16.pp
Program Example16 ;
Uses s y s u t i l s ;
begin
W r i t e l n ( Y , ' i s l e a p year : ' , IsLeapYear (Y ) ) ;
end ;
Begin
DeCodeDate ( Date , YY,mm, dd ) ;
TestYear ( yy ) ;
TestYear ( 2 0 0 0 ) ;
TestYear ( 1 9 0 0 ) ;
TestYear ( 1 6 0 0 ) ;
TestYear ( 1 9 9 2 ) ;
TestYear ( 1 9 9 5 ) ;
End .
76.15.172 IsPathDelimiter
Synopsis: Is the character at the given position a pathdelimiter ?
Declaration: function IsPathDelimiter(const Path: UNICODESTRING; Index: Integer)
: Boolean
function IsPathDelimiter(const Path: RAWBYTESTRING; Index: Integer)
: Boolean
Visibility: default
Description: IsPathDelimiter returns True if the character at position Index equals PathDelim (1611),
i.e. if it is a path delimiter character for the current platform.
Errors: IncludeTrailingPathDelimiter (1715)ExcludeTrailingPathDelimiter (1668)PathDelim (1611)
76.15.173 IsValidIdent
Synopsis: Check whether a string is a valid identifier name.
Declaration: function IsValidIdent(const Ident: string; AllowDots: Boolean;
StrictDots: Boolean) : Boolean
Visibility: default
Description: IsValidIdent returns True if Ident can be used as a component name. It returns False
otherwise. Ident must consist of a letter or underscore, followed by a combination of letters,
numbers or underscores to be a valid identifier.
Errors: None.
1719
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Listing: ./sysutex/ex75.pp
Program Example75 ;
{ T h i s program demonstrates t h e I s V a l i d I d e n t f u n c t i o n }
Uses s y s u t i l s ;
Procedure T e s t i t (S : S t r i n g ) ;
begin
Write ( ' " ' ,S , ' " i s ' ) ;
I f not I s V A l i d I d e n t (S) then
Write ( 'NOT ' ) ;
Writeln ( ' a v a l i d i d e n t i f i e r ' ) ;
end ;
Begin
Testit ( ' _MyObj ' ) ;
Testit ( ' My__Obj1 ' ) ;
Testit ( ' My_1_Obj ' ) ;
Testit ( ' 1MyObject ' ) ;
Testit ( ' My@Object ' ) ;
Testit ( ' M123 ' ) ;
End .
76.15.174 LastDelimiter
Synopsis: Return the last occurrence of a set of delimiters in a string.
Declaration: function LastDelimiter(const Delimiters: string; const S: string)
: SizeInt
Visibility: default
Description: LastDelimiter returns the last occurrence of any character in the set Delimiters in the string
S.
Listing: ./sysutex/ex88.pp
Program example88 ;
{ T h i s program demonstrates t h e L a s t D e l i m i t e r f u n c t i o n }
uses S y s U t i l s ;
begin
Writeln ( L a s t D e l i m i t e r ( ' \ . : ' , ' c : \ filename . ext ' ) ) ;
end .
76.15.175 LeftStr
Synopsis: Return a number of characters starting at the left of a string.
Declaration: function LeftStr(const S: string; Count: Integer) : string
Visibility: default
1720
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Description: LeftStr returns the Count leftmost characters of S. It is equivalent to a call to Copy(S,1,Count).
Errors: None.
See also: RightStr (1726), TrimLeft (1760), TrimRight (1761), Trim (1759)
Listing: ./sysutex/ex76.pp
Program Example76 ;
{ T h i s program demonstrates t h e L e f t S t r f u n c t i o n }
Uses s y s u t i l s ;
Begin
Writeln ( LeftStr ( ' abcdefghijklmnopqrstuvwxyz ' ,20));
Writeln ( LeftStr ( ' abcdefghijklmnopqrstuvwxyz ' ,15));
Writeln ( LeftStr ( ' abcdefghijklmnopqrstuvwxyz ' ,1));
Writeln ( LeftStr ( ' abcdefghijklmnopqrstuvwxyz ' ,200));
End .
76.15.176 LoadStr
Synopsis: Load a string from the resource tables.
76.15.177 LowerCase
Synopsis: Return a lowercase version of a string.
Declaration: function LowerCase(const s: string) : string; Overload
function LowerCase(const s: string; LocaleOptions: TLocaleOptions)
: string; Overload
function LowerCase(const V: variant) : string; Overload
function LowerCase(const s: UnicodeString) : UnicodeString; Overload
Visibility: default
Description: LowerCase returns the lowercase equivalent of S. Ansi characters are not taken into account, only
ASCII codes below 127 are converted. It is completely equivalent to the lowercase function of the
system unit, and is provided for compatibility only.
Lowercase does not change the number of characters (or bytes) in an ansistring or shortstring.
Errors: None.
See also: AnsiLowerCase (1635), UpperCase (1770), AnsiUpperCase (1643)
Listing: ./sysutex/ex77.pp
1721
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Program Example77 ;
Uses s y s u t i l s ;
Begin
W r i t e l n ( LowerCase ( ' THIS WILL COME o u t a l l LoWeRcAsE ! ' ) ) ;
End .
76.15.178 MSecsToTimeStamp
Synopsis: Convert a number of milliseconds to a TDateTime value.
Declaration: function MSecsToTimeStamp(MSecs: Comp) : TTimeStamp
Visibility: default
Listing: ./sysutex/ex17.pp
Program Example17 ;
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: =MS−1000 * 3600 * 2;
TS: = MSecsToTimeStamp (MS) ;
DT: = TimeStampToDateTime ( TS ) ;
W r i t e l n ( 'Now minus 1 day : ' , DateTimeToStr (DT ) ) ;
End .
76.15.179 NewStr
Synopsis: Allocate a new ansistring on the heap.
Declaration: function NewStr(const S: string) : PString; Overload
1722
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
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 shouldn’t 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 (1645).
Errors: If not enough memory is present, an EOutOfMemory exception will be raised.
See also: AssignStr (1645), DisposeStr (1664)
76.15.180 Now
Synopsis: Returns the current date and time.
Declaration: function Now : TDateTime
Visibility: default
Description: Now returns the current date and time. It is equivalent to Date+Time.
Errors: None.
See also: Date (1655), Time (1757)
Listing: ./sysutex/ex18.pp
Program Example18 ;
Uses s y s u t i l s ;
Begin
W r i t e l n ( 'Now : ' , DateTimeToStr (Now ) ) ;
End .
76.15.181 OutOfMemoryError
Synopsis: Raise an EOutOfMemory exception
1723
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.182 QuotedStr
Synopsis: Return a quotes version of a string.
Listing: ./sysutex/ex78.pp
Program Example78 ;
Uses s y s u t i l s ;
Var S : A n s i S t r i n g ;
Begin
S: = ' He s a i d ' ' H e l l o ' ' and walked on ' ;
W r i t e l n (S ) ;
W r i t e l n ( ' becomes ' ) ;
W r i t e l n ( QuotedStr (S ) ) ;
End .
76.15.183 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 (1784) 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 (1787)
will be raised.
See also: EOSError (1784), GetLastOSError (1710), Exception (1787)
76.15.184 RemoveDir
Synopsis: Remove a directory from the file system.
Declaration: function RemoveDir(const Dir: RawByteString) : Boolean
function RemoveDir(const Dir: UnicodeString) : Boolean
1724
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Visibility: default
Description: RemoveDir removes directory Dir from the disk. If the directory is not absolute, it is appended
to the current working directory.
For an example, see CreateDir (1653).
Errors: In case of error (e.g. the directory isn’t empty) the function returns False. If successful, True is
returned.
76.15.185 RenameFile
Synopsis: Rename a file.
Declaration: function RenameFile(const OldName: UnicodeString;
const NewName: UnicodeString) : Boolean
function RenameFile(const OldName: RawByteString;
const NewName: RawByteString) : Boolean
Visibility: default
Description: RenameFile renames a file from OldName to NewName. The function returns True if suc-
cessful, False otherwise. For safety, the new name must be a full path specification, including
the directory, otherwise it will be assumed to be a filename relative to the current working directory.
Remark: The implementation of RenameFile relies on the underlying OS’s support for renaming/-
moving a file. Whether or not a file can be renamed across disks or partitions depends entirely on the
OS. On unix-like OS-es, the rename function will fail when used across partitions. On Windows, it
will work.
Errors: On Error, False is returned.
See also: DeleteFile (1662)
Listing: ./sysutex/ex44.pp
Program Example44 ;
Uses s y s u t i l s ;
Var F : L o n g i n t ;
S : String ;
Begin
S: = 'Some s h o r t f i l e . ' ;
F : = F i l e C r e a t e ( ' t e s t . dap ' ) ;
F i l e W r i t e ( F , S [ 1 ] , Length (S ) ) ;
FileClose ( F ) ;
I f RenameFile ( ' t e s t . dap ' , ' t e s t . d a t ' ) then
W r i t e l n ( ' S u c c e s s f u l l y renamed f i l e s . ' ) ;
End .
76.15.186 ReplaceDate
Synopsis: Replace the date part of a date/time stamp
1725
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.187 ReplaceTime
Synopsis: Replace the time part
Declaration: procedure ReplaceTime(var dati: TDateTime; NewTime: TDateTime)
Visibility: default
Description: ReplaceTime replaces the time part in dati with NewTime. The date part remains untouched.
76.15.188 RightStr
Synopsis: Return a number of characters from a string, starting at the end.
Declaration: function RightStr(const S: string; Count: Integer) : string
Visibility: default
Description: RightStr returns the Count rightmost characters of S. It is equivalent to a call to Copy(S,Length(S)+1-Count,Coun
If Count is larger than the actual length of S only the real length will be used.
Errors: None.
See also: LeftStr (1720), Trim (1759), TrimLeft (1760), TrimRight (1761)
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 ( RightStr ( ' abcdefghijklmnopqrstuvwxyz ' ,20));
Writeln ( RightStr ( ' abcdefghijklmnopqrstuvwxyz ' ,15));
Writeln ( RightStr ( ' abcdefghijklmnopqrstuvwxyz ' ,1));
Writeln ( RightStr ( ' abcdefghijklmnopqrstuvwxyz ' ,200));
End .
76.15.189 SafeLoadLibrary
Synopsis: Load a library safely
Declaration: function SafeLoadLibrary(const FileName: AnsiString; ErrorMode: DWord)
: HMODULE
Visibility: default
Description: SafeLoadLibrary saves and restores some registers before and after issuing a call to LoadLibrary.
Errors: None.
1726
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.190 SameFileName
Synopsis: Are two filenames referring to the same file ?
Declaration: function SameFileName(const S1: string; const S2: string) : Boolean
Visibility: default
Description: SameFileName returns True if calling AnsiCompareFileName (1631) with arguments S1 and
S2 returns 0, and returns False otherwise.
Errors: None.
See also: AnsiCompareFileName (1631)
76.15.191 SameStr
Synopsis: Check whether 2 strings are the same, case insensitive
Declaration: function SameStr(const s1: string; const s2: string) : Boolean
; Overload
function SameStr(const s1: string; const s2: string;
LocaleOptions: TLocaleOptions) : Boolean; Overload
Visibility: default
Description: SameStr checks whether S1 and S2 are the same. This is equivalent to checking that CompareStr
(1651) returns 0.
Errors: None.
See also: CompareStr (1651)
76.15.192 SameText
Synopsis: Checks whether 2 strings are the same (case insensitive)
Declaration: function SameText(const s1: string; const s2: string) : Boolean
; Overload
function SameText(const s1: string; const s2: string;
LocaleOptions: TLocaleOptions) : Boolean; Overload
Visibility: default
Description: SameText calls CompareText (1652) with S1 and S2 as parameters and returns True if the result
of that call is zero, or False otherwise.
Errors: None.
See also: CompareText (1652), AnsiSameText (1637), AnsiSameStr (1637)
76.15.193 SetCurrentDir
Synopsis: Set the current directory of the application.
Declaration: function SetCurrentDir(const NewDir: RawByteString) : Boolean
function SetCurrentDir(const NewDir: UnicodeString) : Boolean
Visibility: default
1727
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Description: SetCurrentDir sets the current working directory of your program to NewDir. It returns True
if the function was successful, False otherwise.
Errors: In case of error, False is returned.
See also: GetCurrentDir (1707)
76.15.194 SetDirSeparators
Synopsis: Set the directory separators to the known directory separators.
Declaration: function SetDirSeparators(const FileName: UNICODESTRING) : UNICODESTRING
function SetDirSeparators(const FileName: RAWBYTESTRING) : RAWBYTESTRING
Visibility: default
Description: SetDirSeparators returns FileName with all possible DirSeparators replaced by OSDirSeparator.
Errors: None.
See also: ExpandFileName (1670), ExtractFilePath (1674), ExtractFileDir (1672)
Listing: ./sysutex/ex47.pp
Program Example47 ;
{ T h i s program demonstrates t h e S e t D i r S e p a r a t o r s 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 e t D i r S e p a r a t o r s ( ' / pp \ b i n / win32 \ ppc386 ' ) ) ;
End .
76.15.195 ShowException
Synopsis: Show the current exception to the user.
Declaration: procedure ShowException(ExceptObject: TObject; ExceptAddr: Pointer)
Visibility: default
Description: ShowException shows a message stating that a ExceptObject was raised at address ExceptAddr.
It uses ExceptionErrorMessage (1667) to create the message, and is aware of the fact whether the
application is a console application or a GUI application. For a console application, the message is
written to standard error output. For a GUI application, OnShowException (1628) is executed.
Errors: If, for a GUI application, OnShowException (1628) 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 (1667), ExceptAddr (1666), ExceptionErrorMessage (1667)
1728
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.196 Sleep
Synopsis: Suspend execution of a program for a certain time.
Declaration: procedure Sleep(milliseconds: Cardinal)
Visibility: default
Description: Sleep suspends the execution of the program for the specified number of milliseconds (milliseconds).
After the specified period has expired, program execution resumes.
Remark The indicated time is not exact, i.e. it is a minimum time. No guarantees are made as to the exact
duration of the suspension.
76.15.197 SScanf
Synopsis: Scan a string for substrings and return the content of these substrings as typed values
Declaration: function SScanf(const s: string; const fmt: string;
const Pointers: Array of Pointer) : Integer
Visibility: default
Description: SScanF does in essence the opposite of Format (1695): it scans the string S for the elements
specified in Fmt, and returns the value of the found elements in the memory locations pointed to by
the addresses in Pointers. The Fmt can contain placeholders of the form %X where X can be one
of the following characters:
The Pointers array contains a list of pointers, each pointer should point to a memory location of
a type that corresponds to the type of placeholder in that position:
dA pointer to an integer.
fA pointer to an extended.
sA pointer to an ansistring.
cA pointer to a single character.
On return, these locations will be filled with the actual values found in S for the placeholders in fmt.
The return value of the function is the number of found values.
Errors: No error checking is performed on the type of the memory location.
See also: Format (1695)
Listing: ./sysutex/ex98.pp
Program Example98 ;
{ $mode o b j f p c }
{ $h+ }
{ T h i s program demonstrates t h e function }
Uses s y s u t i l s ;
1729
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
var
count , i : I n t e g e r ;
f : Extended ;
s : String ;
begin
count : = SScanf ( ' 234 32.4 h e l l o ' , '%d %f %s ' , [ @i , @f ,@s ] ) ;
w r i t e l n ( count , ' ' , i , ' ' , f , ' ' , s ) ;
End .
76.15.198 StrAlloc
Synopsis: Allocate a null-terminated string on the heap.
Declaration: function StrAlloc(Size: Cardinal) : PChar
Visibility: default
Description: StrAlloc reserves memory on the heap for a string with length Len, terminating #0 included,
and returns a pointer to it.
Additionally, StrAlloc allocates 4 extra bytes to store the size of the allocated memory. Therefore
this function is NOT compatible with the StrAlloc (1280) function of the Strings unit.
For an example, see StrBufSize (1730).
Errors: None.
See also: StrBufSize (1730), StrDispose (1733), StrAlloc (1280)
76.15.199 StrBufSize
Synopsis: Return the size of a null-terminated string allocated on the heap.
Declaration: function StrBufSize(Str: PChar) : Cardinal
function StrBufSize(str: pwidechar) : Cardinal
Visibility: default
Description: StrBufSize returns the memory allocated for Str. This function ONLY gives the correct result
if Str was allocated using StrAlloc (1730).
Errors: If no more memory is available, a runtime error occurs.
See also: StrAlloc (1730), StrDispose (1733)
Listing: ./sysutex/ex46.pp
Program Example46 ;
{ T h i s program demonstrates t h e S t r B u f S i z e f u n c t i o n }
{ $H+ }
Uses s y s u t i l s ;
Var P : Pchar ;
1730
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
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 .
76.15.200 StrByteType
Synopsis: Return the type of byte in a null-terminated string for a multi-byte character set
Declaration: function StrByteType(Str: PChar; Index: SizeUInt) : 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 (1621), ByteType (1648)
76.15.201 strcat
Synopsis: Concatenate 2 null-terminated strings.
Declaration: function strcat(dest: pchar; source: pchar) : pchar
function strcat(dest: pwidechar; source: pwidechar) : pwidechar
Visibility: default
Description: Attaches Source to Dest and returns Dest.
Errors: No length checking is performed.
See also: StrLCat (1737)
Listing: ./stringex/ex11.pp
Program Example11 ;
Uses s t r i n g s ;
{ Program t o demonstrate t h e S t r C a t f u n c t i o n . }
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 .
1731
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.202 StrCharLength
Synopsis: Return the length of a null-terminated string in characters.
Declaration: function StrCharLength(const Str: PChar) : SizeInt
Visibility: default
Description: StrCharLength returns the length of the null-terminated string Str (a widestring) in characters
(not in bytes). It uses the widestring manager to do this.
76.15.203 strcomp
Synopsis: Compare 2 null-terminated strings, case sensitive.
Declaration: function strcomp(str1: pchar; str2: pchar) : SizeInt
function strcomp(str1: pwidechar; str2: pwidechar) : SizeInt
Visibility: default
Description: Compares the null-terminated strings S1 and S2. The result is
76.15.204 StrCopy
Synopsis: Copy a null-terminated string
Declaration: function strcopy(dest: pchar; source: pchar) : pchar; Overload
function StrCopy(Dest: PWideChar; Source: PWideChar) : PWideChar
; 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 (1743), StrLCopy (1738), StrECopy (1733)
Listing: ./stringex/ex4.pp
Program Example4 ;
Uses s t r i n g s ;
1732
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
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 ( ' Oh−oh problems . . . ' )
else
W r i t e l n ( ' A l l i s w e l l : PP= ' ,PP ) ;
StrDispose (PP ) ;
end .
76.15.205 StrDispose
Synopsis: Dispose of a null-terminated string on the heap.
Declaration: procedure StrDispose(Str: PChar)
procedure StrDispose(str: pwidechar)
Visibility: default
Description: StrDispose frees any memory allocated for Str. This function will only function correctly if
Str has been allocated on the heap, for example using StrAlloc (1730) or StrNew (1741) from the
SysUtils unit.
For an example, see StrBufSize (1730).
Errors: If an invalid pointer is passed, or a pointer not allocated with StrAlloc, an error may occur.
See also: StrBufSize (1730), StrAlloc (1730), StrNew (1741)
76.15.206 strecopy
Synopsis: Copy a null-terminated string, return a pointer to the end.
Declaration: function strecopy(dest: pchar; source: pchar) : pchar
function strecopy(dest: pwidechar; source: pwidechar) : pwidechar
Visibility: default
Description: Copies the Null-terminated string in Source to Dest, and returns a pointer to the end (i.e. the
terminating Null-character) of the copied string.
Errors: No length checking is performed.
See also: StrLCopy (1738), StrCopy (1732)
Listing: ./stringex/ex6.pp
Program Example6 ;
Uses s t r i n g s ;
Var PP : PChar ;
1733
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
begin
PP: = S t r A l l o c ( StrLen (P ) + 1 ) ;
I f L o n g i n t ( StrECopy (PP, P)) − L o n g i n t (PP)<> StrLen (P) then
W r i t e l n ( ' Something i s wrong here ! ' )
else
W r i t e l n ( 'PP= ' ,PP ) ;
StrDispose (PP ) ;
end .
76.15.207 strend
Synopsis: Return a pointer to the end of a null-terminated string
Declaration: function strend(p: pchar) : pchar
function strend(p: pwidechar) : pwidechar
Visibility: default
Listing: ./stringex/ex7.pp
Program Example6 ;
Uses s t r i n g s ;
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.15.208 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 (1695) 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.
1734
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Listing: ./sysutex/ex80.pp
Program Example80 ;
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 .
76.15.209 stricomp
Synopsis: Compare 2 null-terminated strings, case insensitive.
Declaration: function stricomp(str1: pchar; str2: pchar) : SizeInt
function stricomp(str1: pwidechar; str2: pwidechar) : SizeInt
Visibility: default
Description: Compares the null-terminated strings S1 and S2, ignoring case. The result is
Errors: None.
See also: StrLComp (1737), StrComp (1732), StrLIComp (1740)
Listing: ./stringex/ex8.pp
Program Example8 ;
Uses s t r i n g s ;
Var L : L o n g i n t ;
begin
Write ( ' P1 and P2 are ' ) ;
I f StrComp ( P1 , P2)<>0 then w r i t e ( 'NOT ' ) ;
w r i t e ( ' equal . The f i r s t ' ) ;
L:=1;
While StrLComp ( P1 , P2 , L )=0 do inc ( L ) ;
1735
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
dec ( l ) ;
W r i t e l n ( l , ' c h a r a c t e r s are t h e same . ' ) ;
end .
76.15.210 StringOf
Synopsis: Create a Unicode string from an array of bytes
Declaration: function StringOf(const Bytes: TBytes) : UnicodeString
Visibility: default
Description: StringOf converts an array of bytes (Bytes) to a Unicode string. It interprets the bytes as a
single-byte string, using the default codepage.
To create a string where the bytes are interpreted as wide chars, use WideStringOf (1774) instead.
Errors: None.
See also: WideBytesOf (1771), WideStringOf (1774)
76.15.211 StringReplace
Synopsis: Replace occurrences of one substring with another in a string.
Declaration: function StringReplace(const S: string; const OldPattern: string;
const NewPattern: string; Flags: TReplaceFlags;
out aCount: Integer) : string
function StringReplace(const S: string; const OldPattern: string;
const NewPattern: string; Flags: TReplaceFlags)
: string
Visibility: default
Description: StringReplace searches the string S for occurrences of the string OldPattern and, if it is
found, replaces it with NewPattern. It returns the resulting string. The behaviour of StringReplace
can be tuned with Flags, which is of type TReplaceFlags (1622). Standard behaviour is to replace
only the first occurrence of OldPattern, and to search case sensitively.
Errors: None.
See also: TReplaceFlags (1622), WideStringReplace (1774)
76.15.212 StringToGUID
Synopsis: Convert a string to a native TGUID type.
Declaration: function StringToGUID(const S: string) : TGUID
Visibility: default
Description: StringToGUID converts the string S to a valid GUID. The string S should be of the form
{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}
Where each X is a hexadecimal digit. The dashes and braces are required.
Errors: In case S contains an invalid GUID representation, a EConvertError (1780) exception is raised.
See also: Supports (1755), #rtl.system.TGUID (1387), GUIDToString (1713), IsEqualGuid (1718)
1736
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.213 strlcat
Synopsis: Concatenate 2 null-terminated strings, with length boundary.
Description: Adds MaxLen characters from Source to Dest, and adds a terminating null-character. Returns
Dest.
Errors: None.
See also: StrCat (1731)
Listing: ./stringex/ex12.pp
Program Example12 ;
Uses s t r i n g s ;
{ Program t o demonstrate t h e S t r L C a t f u n c t i o n . }
Var P2 : PChar ;
begin
P2 : = S t r A l l o c ( StrLen ( P1 ) * 2 + 1 ) ;
P2 ^ : = # 0 ; { Zero l e n g t h }
StrCat ( P2 , P1 ) ;
StrLCat ( P2 , P1 , 5 ) ;
W r i t e l n ( ' P2 = ' ,P2 ) ;
StrDispose ( P2 )
end .
76.15.214 strlcomp
Synopsis: Compare limited number of characters of 2 null-terminated strings
Declaration: function strlcomp(str1: pchar; str2: pchar; l: SizeInt) : SizeInt
function strlcomp(str1: pwidechar; str2: pwidechar; l: SizeInt)
: SizeInt
Visibility: default
Description: Compares maximum L characters of the null-terminated strings S1 and S2. The result is
Errors: None.
See also: StrComp (1732), StrIComp (1735), StrLIComp (1740)
1737
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Listing: ./stringex/ex8.pp
Program Example8 ;
Uses s t r i n g s ;
Var L : L o n g i n t ;
begin
Write ( ' P1 and P2 are ' ) ;
I f StrComp ( P1 , P2)<>0 then w r i t e ( 'NOT ' ) ;
w r i t e ( ' equal . The f i r s t ' ) ;
L:=1;
While StrLComp ( P1 , P2 , L )=0 do inc ( L ) ;
dec ( l ) ;
W r i t e l n ( l , ' c h a r a c t e r s are t h e same . ' ) ;
end .
76.15.215 StrLCopy
Synopsis: Copy a null-terminated string, limited in length.
Declaration: function strlcopy(dest: pchar; source: pchar; maxlen: SizeInt) : pchar
; Overload
function StrLCopy(Dest: PWideChar; Source: PWideChar; MaxLen: SizeInt)
: PWideChar; Overload
Visibility: default
Description: Copies MaxLen characters from Source to Dest, and makes Dest a null terminated string.
Errors: No length checking is performed.
See also: StrCopy (1732), StrECopy (1733)
Listing: ./stringex/ex5.pp
Program Example5 ;
Uses s t r i n g s ;
var PP : PCHar ;
begin
PP: = S t r A l l o c ( 1 1 ) ;
W r i t e l n ( ' F i r s t 10 c h a r a c t e r s o f P : ' , StrLCopy (PP, P , 1 0 ) ) ;
StrDispose (PP ) ;
end .
1738
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.216 StrLen
Synopsis: Length of a null-terminated string.
Declaration: function strlen(p: pchar) : sizeint; Overload
function StrLen(p: pwidechar) : sizeint; Overload
Visibility: default
Description: Returns the length of the null-terminated string P. If P equals Nil then zero (0) is returned.
Errors: None.
See also: StrNew (1741)
Listing: ./stringex/ex1.pp
Program Example1 ;
Uses s t r i n g s ;
begin
Writeln ( 'P : ' ,p ) ;
W r i t e l n ( ' l e n g t h (P) : ' , StrLen (P ) ) ;
end .
76.15.217 StrLFmt
Synopsis: Format a string with given arguments, but with limited length.
Declaration: function StrLFmt(Buffer: PCHar; Maxlen: Cardinal; Fmt: PChar;
const args: Array of const) : Pchar
function StrLFmt(Buffer: PCHar; Maxlen: Cardinal; Fmt: PChar;
const args: Array of const;
const FormatSettings: TFormatSettings) : Pchar
Visibility: default
Description: StrLFmt will format fmt with Args, as the Format (1695) function does, and it will store max-
imally 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 (1695).
See also: StrFmt (1734), FmtStr (1694), Format (1695), FormatBuf (1702)
Listing: ./sysutex/ex81.pp
Program Example80 ;
Uses s y s u t i l s ;
Var S : A n s i S t r i n g ;
1739
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
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.15.218 strlicomp
Synopsis: Compare limited number of characters in 2 null-terminated strings, ignoring case.
Declaration: function strlicomp(str1: pchar; str2: pchar; l: SizeInt) : SizeInt
function strlicomp(str1: pwidechar; str2: pwidechar; l: SizeInt)
: SizeInt
Visibility: default
Description: Compares maximum L characters of the null-terminated strings S1 and S2, ignoring case. The
result is
76.15.219 strlower
Synopsis: Convert null-terminated string to all-lowercase.
Declaration: function strlower(p: pchar) : pchar
function strlower(p: pwidechar) : pwidechar
Visibility: default
Description: Converts P to an all-lowercase string. Returns P.
Errors: None.
See also: StrUpper (1754)
Listing: ./stringex/ex14.pp
Program Example14 ;
Uses s t r i n g s ;
Const
P1 : PChar = ' THIS IS AN UPPERCASE PCHAR STRING ' ;
P2 : PChar = ' t h i s i s a lowercase s t r i n g ' ;
1740
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
begin
P1 : = StrNew ( P1 ) ;
P2 : = strNew ( P2 ) ;
W r i t e l n ( ' Uppercase : ' , StrUpper ( P2 ) ) ;
StrLower ( P1 ) ;
W r i t e l n ( ' Lowercase : ' ,P1 ) ;
StrDispose ( P1 ) ;
StrDispose ( P2 ) ;
end .
76.15.220 StrMove
Synopsis: Move a null-terminated string to new location.
Declaration: function strmove(dest: pchar; source: pchar; l: SizeInt) : pchar
; Overload
function StrMove(dest: PWideChar; source: PWideChar; l: SizeInt)
: PWideChar; Overload
Visibility: default
Description: Copies MaxLen characters from Source to Dest. No terminating null-character is copied. Re-
turns Dest
Errors: None.
Listing: ./stringex/ex10.pp
Program Example10 ;
Uses s t r i n g s ;
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 .
76.15.221 strnew
Synopsis: Allocate room for new null-terminated string.
1741
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Listing: ./stringex/ex16.pp
Program Example16 ;
Uses s t r i n g s ;
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.15.222 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.15.223 StrPas
Synopsis: Convert a null-terminated string to an ansistring.
Errors: None.
See also: StrPCopy (1743), StrPLCopy (1743)
1742
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.224 StrPCopy
Synopsis: Copy an ansistring to a null-terminated string.
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 (1743), StrPas (1742)
76.15.225 StrPLCopy
Synopsis: Copy a limited number of characters from an ansistring to a null-terminated string.
Declaration: function StrPLCopy(Dest: PChar; const Source: string; MaxLen: SizeUInt)
: PChar; Overload
function StrPLCopy(Dest: PWideChar; const Source: UnicodeString;
MaxLen: SizeUInt) : PWideChar; Overload
Visibility: default
Description: StrPLCopy Converts maximally MaxLen characters of the Ansistring in Source to a Null-
terminated string, and copies it to Dest. Dest needs enough room to contain the characters.
Errors: No checking is performed to see whether Dest points to enough memory to contain L characters of
Source.
See also: StrPCopy (1743)
76.15.226 strpos
Synopsis: Find position of one null-terminated substring in another.
Errors: None.
See also: StrScan (1744), StrRScan (1744)
Listing: ./stringex/ex15.pp
Program Example15 ;
Uses s t r i n g s ;
1743
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.227 strrscan
Synopsis: Find last occurrence of a character in a null-terminated string.
Declaration: function strrscan(p: pchar; c: Char) : pchar
function strrscan(p: pwidechar; c: WideChar) : pwidechar
Visibility: default
Description: Returns a pointer to the last occurrence of the character C in the null-terminated string P. If C does
not occur, returns Nil.
For an example, see StrScan (1744).
Errors: None.
See also: StrScan (1744), StrPos (1743)
76.15.228 StrScan
Synopsis: Find first occurrence of a character in a null-terminated string.
Errors: None.
See also: StrRScan (1744), StrPos (1743)
Listing: ./stringex/ex13.pp
Program Example13 ;
Uses s t r i n g 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 .
1744
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.229 StrToBool
Synopsis: Convert a string to a boolean value
Description: StrToBool will convert the string S to a boolean value. The string S can contain one of ’True’,
’False’ (case is ignored) or a numerical value. If it contains a numerical value, 0 is converted to
False, all other values result in True. If the string S contains no valid boolean, then an EConvert-
Error (1780) exception is raised.
Errors: On error, an EConvertError (1780) exception is raised.
76.15.230 StrToBoolDef
Synopsis: Convert string to boolean value, returning default in case of error
Declaration: function StrToBoolDef(const S: string; Default: Boolean) : Boolean
function StrToBoolDef(const S: string; Default: Boolean;
const FormatSettings: TFormatSettings) : Boolean
Visibility: default
Description: StrToBoolDef tries to convert the string S to a boolean value, and returns the boolean value in
case of success. In case S does not contain a valid boolean string, Default is returned.
76.15.231 StrToCurr
Synopsis: Convert a string to a currency value
Declaration: function StrToCurr(const S: string) : Currency
function StrToCurr(const S: string;
const FormatSettings: TFormatSettings) : Currency
Visibility: default
Description: StrToCurr converts a string to a currency value and returns the value. The string should contain
a valid currency amount, without currency symbol. If the conversion fails, an EConvertError (1780)
exception is raised.
Errors: On error, an EConvertError (1780) exception is raised.
See also: CurrToStr (1655), StrToCurrDef (1746)
1745
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.232 StrToCurrDef
Synopsis: Convert a string to a currency value, using a default value
Declaration: function StrToCurrDef(const S: string; Default: Currency) : Currency
function StrToCurrDef(const S: string; Default: Currency;
const FormatSettings: TFormatSettings) : Currency
Visibility: default
Description: StrToCurrDef converts a string to a currency value and returns the value. The string should
contain a valid currency amount, without currency symbol. If the conversion fails, the fallback
Default value is returned.
Errors: On error, the Default value is returned.
See also: CurrToStr (1655), StrToCurr (1745)
76.15.233 StrToDate
Synopsis: Convert a date string to a TDateTime value.
Declaration: function StrToDate(const S: ShortString) : TDateTime
function StrToDate(const S: Ansistring) : TDateTime
function StrToDate(const S: ShortString; separator: Char) : TDateTime
function StrToDate(const S: AnsiString; separator: Char) : TDateTime
function StrToDate(const S: string; FormatSettings: TFormatSettings)
: TDateTime
function StrToDate(const S: ShortString; const useformat: string;
separator: Char) : TDateTime
function StrToDate(const S: AnsiString; const useformat: string;
separator: Char) : TDateTime
function StrToDate(const S: PChar; Len: Integer;
const useformat: string; separator: Char) : TDateTime
Visibility: default
Description: StrToDate converts the string S to a TDateTime date value. The Date must consist of 1 to three
digits, separated by the DateSeparator character. If two numbers are given, they are supposed to
form the day and month of the current year. If only one number is given, it is supposed to represent
the day of the current month. (This is not supported in Delphi)
The order of the digits (y/m/d, m/d/y, d/m/y) is determined from the ShortDateFormat variable.
Errors: On error (e.g. an invalid date or invalid character), an EConvertError (1780) exception is raised.
See also: StrToTime (1753), DateToStr (1659), TimeToStr (1759), EConvertError (1780)
Listing: ./sysutex/ex19.pp
Program Example19 ;
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
1746
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Begin
76.15.234 StrToDateDef
Synopsis: Convert string to date, returning a default value
76.15.235 StrToDateTime
Synopsis: Convert a date/time string to a TDateTime value.
Declaration: function StrToDateTime(const S: AnsiString) : TDateTime
function StrToDateTime(const s: ShortString;
const FormatSettings: TFormatSettings) : TDateTime
function StrToDateTime(const s: AnsiString;
const FormatSettings: TFormatSettings) : TDateTime
Visibility: default
Description: StrToDateTime converts the string S to a TDateTime date and time value. The date and time
parts must be separated by a space.
For the date part, the same restrictions apply as for the StrToDate (1746) function: The Date must
consist of 1 to three numbers, separated by the DateSeparator character. If two numbers are
given, they are supposed to form the day and month of the current year. If only one number is given,
it is supposed to represent the day of the current month. (This is not supported in Delphi)
The order of the 3 numbers (y/m/d, m/d/y, d/m/y) is determined from the ShortDateFormat
variable.
1747
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Errors: On error (e.g. an invalid date or invalid character), an EConvertError (1780) exception is raised.
See also: StrToDate (1746), StrToTime (1753), DateTimeToStr (1656), EConvertError (1780)
Listing: ./sysutex/ex20.pp
Program Example20 ;
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, ' : ' , DateTimeToStr ( StrToDateTime (S ) ) ) ;
end ;
Begin
76.15.236 StrToDateTimeDef
Synopsis: Convert string to date/time, returning a default value
Errors: None.
See also: StrToTimeDef (1754), StrToDateDef (1747), TryStrToDateTime (1764), StrToDateTime (1747)
76.15.237 StrToDWord
Synopsis: Convert string to DWord (cardinal)
1748
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Description: StrToDWord will convert the string S to a DWord value, and returns the value.
Errors: In case the string S is not a valid number, or is a value outside the DWord range, an EConvertError
exception will be raised.
See also: TryStrToDWord (1764), StrToDWordDef (1749)
76.15.238 StrToDWordDef
Synopsis: Convert string to DWord (cardinal), using default
Declaration: function StrToDWordDef(const S: string; Default: DWord) : DWord
Visibility: default
Description: StrToDWordDef will try to convert the string S to a DWord value. If the conversion was success-
ful, it returns the value.
If the conversion failed, the fallback value in Default is returned.
See also: TryStrToDWord (1764), StrToDWord (1748)
76.15.239 StrToFloat
Synopsis: Convert a string to a floating-point value.
Declaration: function StrToFloat(const S: string) : Extended
function StrToFloat(const S: string;
const FormatSettings: TFormatSettings) : Extended
Visibility: default
Description: StrToFloat converts the string S to a floating point value. S should contain a valid string repre-
sentation of a floating point value (either in decimal or scientific notation). The thousandseparator
character may however not be used.
Up to and including version 2.2.2 of the compiler, if the string contains a decimal value, then the
decimal separator character can either be a ’.’ or the value of the DecimalSeparator variable.
As of version 2.3.1, the string may contain only the DecimalSeparator character. The dot (’.’)
can no longer be used instead of the DecimalSeparator.
Errors: If the string S doesn’t contain a valid floating point string, then an exception will be raised.
See also: TextToFloat (1756), FloatToStr (1690), FormatFloat (1704), StrToInt (1750)
Listing: ./sysutex/ex90.pp
Program Example90 ;
{ T h i s program demonstrates t h e S t r T o F l o a t f u n c t i o n }
{ $mode o b j f p c }
{ $h+ }
Uses S y s U t i l s ;
Const
NrValues = 5 ;
T e s t S t r : Array [ 1 . . NrValues ] of s t r i n g =
( ' 1 ,1 ' , ' −0,2 ' , ' 1 ,2E−4 ' , ' 0 ' , ' 1E4 ' ) ;
1749
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
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.15.240 StrToFloatDef
Synopsis: Convert a string to a float, with a default value.
Declaration: function StrToFloatDef(const S: string; const Default: Extended)
: Extended
function StrToFloatDef(const S: string; const Default: Extended;
const FormatSettings: TFormatSettings) : Extended
Visibility: default
Description: StrToFloatDef tries to convert the string S to a floating point value, and returns this value. If
the conversion fails for some reason, the value Default is returned instead.
Errors: None. On error, the Default value is returned.
76.15.241 StrToInt
Synopsis: Convert a string to an integer value.
Declaration: function StrToInt(const s: string) : LongInt
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 (1780) 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.
1750
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
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.
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.15.242 StrToInt64
Synopsis: Convert a string to an Int64 value.
Declaration: function StrToInt64(const s: string) : Int64
Visibility: default
Description: StrToInt64 converts the string S to a Int64 value, and returns this value. The string can only
contain numerical characters, and optionally a minus sign as the first character. Whitespace is not
allowed.
Hexadecimal values (starting with the $ character) are supported.
Errors: On error, a EConvertError (1780) exception is raised.
See also: TryStrToInt64 (1765), StrToInt64Def (1751), StrToInt (1750), TryStrToInt (1765), StrToIntDef (1752)
76.15.243 StrToInt64Def
Synopsis: Convert a string to an Int64 value, with a default value
Declaration: function StrToInt64Def(const S: string; Default: Int64) : Int64
Visibility: default
1751
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Description: StrToInt64Def tries to convert the string S to a Int64 value, and returns this value. If the
conversion fails for some reason, the value Default is returned instead.
Errors: None. On error, the Default value is returned.
See also: StrToInt64 (1751), TryStrToInt64 (1765), StrToInt (1750), TryStrToInt (1765), StrToIntDef (1752)
76.15.244 StrToIntDef
Synopsis: Convert a string to an integer value, with a default value.
Declaration: function StrToIntDef(const S: string; Default: LongInt) : LongInt
Visibility: default
Description: StrToIntDef will convert a string to an integer. If the string contains invalid characters or has an
invalid format, then Default is returned.
To be successfully converted, a string can contain a combination of numerical characters, possibly
preceded by a minus sign (-). Spaces are not allowed.
Errors: None.
See also: IntToStr (1717), StrToInt (1750)
Listing: ./sysutex/ex83.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 ( StrToIntDef ( ' 1234 ' , 0 ) ) ;
W r i t e l n ( StrToIntDef ( ' −1234 ' , 0 ) ) ;
W r i t e l n ( StrToIntDef ( ' 0 ' , 0 ) ) ;
Try
W r i t e l n ( StrToIntDef ( ' 12345678901234567890 ' , 0 ) ) ;
except
On E : E C on v e rt E rr o r do
W r i t e l n ( ' I n v a l i d number encountered ' ) ;
end ;
End .
76.15.245 StrToQWord
Synopsis: Convert a string to a QWord.
Declaration: function StrToQWord(const s: string) : QWord
Visibility: default
Description: TryStrToQWord converts the string S to a valid QWord (unsigned 64-bit) value, and returns the
result.
Errors: If the string S does not contain a valid QWord value, a EConvertError (1780) exception is raised.
See also: TryStrToQWord (1766), StrToQWordDef (1753), StrToInt64 (1751), StrToInt (1750)
1752
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.246 StrToQWordDef
Synopsis: Try to convert a string to a QWord, returning a default value in case of failure.
See also: StrToQWord (1752), TryStrToQWord (1766), StrToInt64Def (1751), StrToIntDef (1752)
76.15.247 StrToTime
Synopsis: Convert a time string to a TDateTime value.
Declaration: function StrToTime(const S: Shortstring) : TDateTime
function StrToTime(const S: Ansistring) : TDateTime
function StrToTime(const S: ShortString; separator: Char) : TDateTime
function StrToTime(const S: AnsiString; separator: Char) : TDateTime
function StrToTime(const S: string; FormatSettings: TFormatSettings)
: TDateTime
function StrToTime(const S: PChar; Len: Integer; separator: Char)
: TDateTime
Visibility: default
Description: StrToTime converts the string S to a TDateTime time value. The time must consist of 1 to 4
digits, separated by the TimeSeparator character. If two numbers are given, they are supposed
to form the hour and minutes.
Errors: On error (e.g. an invalid date or invalid character), an EConvertError (1780) exception is raised.
See also: StrToDate (1746), StrToDateTime (1747), TimeToStr (1759), EConvertError (1780)
Listing: ./sysutex/ex21.pp
Program Example21 ;
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, ' : ' , TimeToStr ( StrToTime (S ) ) ) ;
end ;
Begin
teststr ( TimeToStr ( Time ) ) ;
teststr ( ' 12:00 ' ) ;
teststr ( ' 15:30 ' ) ;
teststr ( ' 3:30PM ' ) ;
End .
1753
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.248 StrToTimeDef
Synopsis: Convert string to time, returning a default value
Description: StrToTimeDef tries to convert the string S to a valid TDateTime time value, and returns
DefValue if S does not contain a valid time indication.
Errors: None.
See also: StrToTime (1753), TryStrToTime (1766), StrToDateDef (1747)
76.15.249 StrToUInt
Declaration: function StrToUInt(const s: string) : Cardinal
Visibility: default
76.15.250 StrToUInt64
Declaration: function StrToUInt64(const s: string) : UInt64
Visibility: default
76.15.251 StrToUInt64Def
Declaration: function StrToUInt64Def(const S: string; Default: UInt64) : UInt64
Visibility: default
76.15.252 StrToUIntDef
Declaration: function StrToUIntDef(const S: string; Default: Cardinal) : Cardinal
Visibility: default
76.15.253 strupper
Synopsis: Convert null-terminated string to all-uppercase
1754
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.254 Supports
Synopsis: Check whether a class or given interface supports an interface
Declaration: function Supports(const Instance: IInterface; const AClass: TClass;
out Obj) : Boolean; Overload
function Supports(const Instance: IInterface; const IID: TGUID;
out Intf) : Boolean; Overload
function Supports(const Instance: TObject; const IID: TGUID; out Intf)
: Boolean; Overload
function Supports(const Instance: TObject; const IID: Shortstring;
out Intf) : Boolean; Overload
function Supports(const Instance: IInterface; const AClass: TClass)
: Boolean; Overload
function Supports(const Instance: IInterface; const IID: TGUID)
: Boolean; Overload
function Supports(const Instance: TObject; const IID: TGUID) : Boolean
; Overload
function Supports(const Instance: TObject; const IID: Shortstring)
: Boolean; Overload
function Supports(const AClass: TClass; const IID: TGUID) : Boolean
; Overload
function Supports(const AClass: TClass; const IID: Shortstring)
: Boolean; Overload
Visibility: default
Description: Supports checks whether Instance supports the interface identified by IID. It returns True
if it is supported, False. Optionally, a pointer to the interface is returned to Intf.
Errors: None.
76.15.255 SysErrorMessage
Synopsis: Format a system error message.
Declaration: function SysErrorMessage(ErrorCode: Integer) : string
Visibility: default
Description: SysErrorMessage returns a string that describes the operating system error code ErrorCode.
Errors: This routine may not be implemented on all platforms.
See also: EOSError (1784)
1755
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.256 SystemTimeToDateTime
Synopsis: Convert a system time to a TDateTime value.
Errors: None.
See also: DateTimeToSystemTime (1658)
Listing: ./sysutex/ex22.pp
Program Example22 ;
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.15.257 TextToFloat
Synopsis: Convert a buffer to a float value.
Declaration: function TextToFloat(Buffer: PChar; out Value: Extended) : Boolean
function TextToFloat(Buffer: PChar; out Value: Extended;
const FormatSettings: TFormatSettings) : Boolean
function TextToFloat(Buffer: PChar; out Value; ValueType: TFloatValue)
: Boolean
function TextToFloat(Buffer: PChar; out Value; ValueType: TFloatValue;
const FormatSettings: TFormatSettings) : Boolean
Visibility: default
Description: TextToFloat converts the string in Buffer to a floating point value. Buffer should contain a
valid string representation of a floating point value (either in decimal or scientific notation).
If the buffer contains a decimal value, then the decimal separator character must be the value of the
DecimalSeparator variable.
Remark Note that this behaviour has changed, earlier implementations also allowed the use of ’.’ in addition
to the decimal separator character.
The function returns True if the conversion was successful.
1756
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Errors: If there is an invalid character in the buffer, then the function returns False
See also: StrToFloat (1749), FloatToStr (1690), FormatFloat (1704)
Listing: ./sysutex/ex91.pp
Program Example91 ;
{ T h i s program demonstrates t h e T e x t T o F l o a t f u n c t i o n }
{ $mode o b j f p c }
{ $h+ }
Uses S y s U t i l s ;
Const
NrValues = 5 ;
T e s t S t r : Array [ 1 . . NrValues ] of pchar =
( ' 1 ,1 ' , ' −0,2 ' , ' 1 ,2E−4 ' , ' 0 ' , ' 1E4 ' ) ;
Procedure T e s t i t ;
Var
I : Integer ;
E : Extended ;
begin
W r i t e l n ( ' Using DecimalSeparator : ' , DecimalSeparator ) ;
For I :=1 to NrValues do
begin
Writeln ( ' Converting : ' , TestStr [ i ] ) ;
I f TextToFloat ( T e s t S t r [ i ] , E) then
W r i t e l n ( ' Converted v a l u e : ' ,E)
else
W r i t e l n ( ' Unable t o c o n v e r t v a l u e . ' ) ;
end ;
end ;
Begin
DecimalSeparator : = ' , ' ;
Testit ;
DecimalSeparator : = ' . ' ;
Testit ;
End .
76.15.258 Time
Synopsis: Returns the current time.
Declaration: function Time : TDateTime
Visibility: default
Description: Time returns the current time in TDateTime format. The date part of the TDateTimeValue is
set to zero.
Errors: None.
See also: Now (1723), Date (1655)
1757
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Listing: ./sysutex/ex23.pp
Program Example23 ;
Uses s y s u t i l s ;
Begin
W r i t e l n ( ' The t i m e i s : ' , TimeToStr ( Time ) ) ;
End .
76.15.259 TimeStampToDateTime
Synopsis: Convert a TimeStamp value to a TDateTime value.
Declaration: function TimeStampToDateTime(const TimeStamp: TTimeStamp) : TDateTime
Visibility: default
Listing: ./sysutex/ex24.pp
Program Example24 ;
Uses s y s u t i l s ;
Var TS : TTimeStamp ;
DT : TDateTime ;
Begin
TS: = DateTimeToTimeStamp (Now ) ;
With TS do
begin
W r i t e l n ( 'Now i s ' , time , ' m i l l i s e c o n d p a s t m i d n i g h t ' ) ;
W r i t e l n ( ' Today i s ' , Date , ' days p a s t 1 / 1 / 00 0 1 ' ) ;
end ;
DT: = TimeStampToDateTime ( TS ) ;
W r i t e l n ( ' Together t h i s i s : ' , DateTimeToStr (DT ) ) ;
End .
76.15.260 TimeStampToMSecs
Synopsis: Converts a timestamp to a number of milliseconds.
Declaration: function TimeStampToMSecs(const TimeStamp: TTimeStamp) : comp
Visibility: default
1758
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.261 TimeToStr
Synopsis: Convert a TDateTime time to a string using a predefined format.
Declaration: function TimeToStr(Time: TDateTime) : string
function TimeToStr(Time: TDateTime;
const FormatSettings: TFormatSettings) : string
Visibility: default
Description: TimeToStr converts the time in Time to a string. It uses the LongTimeFormat variable to see
what formatting needs to be applied. It is therefor entirely equivalent to a FormatDateTime(’tt’,Time)
call.
Note that on unix systems, the localization support must be enabled explicitly, see Localization
(1599).
Errors: None.
Listing: ./sysutex/ex25.pp
Program Example25 ;
Uses s y s u t i l s ;
Begin
W r i t e l n ( ' The c u r r e n t t i m e i s : ' , TimeToStr ( Time ) ) ;
End .
76.15.262 Trim
Synopsis: Trim whitespace from the ends of a string.
Declaration: function Trim(const S: string) : string
function Trim(const S: widestring) : widestring
function Trim(const S: unicodestring) : unicodestring
Visibility: default
Description: Trim strips blank characters (spaces and control characters) at the beginning and 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: TrimLeft (1760), TrimRight (1761)
1759
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Listing: ./sysutex/ex84.pp
Program Example84 ;
Uses s y s u t i l s ;
{ $H+ }
Procedure T e s t i t (S : S t r i n g ) ;
begin
W r i t e l n ( ' " ' , Trim (S ) , ' " ' ) ;
end ;
Begin
T e s t i t ( ' ha ha what g e t s l o s t ? ' ) ;
T e s t i t (#10#13 ' haha ' ) ;
Testit ( ' ' );
End .
76.15.263 TrimLeft
Synopsis: Trim whitespace from the beginning of a string.
Declaration: function TrimLeft(const S: string) : string
function TrimLeft(const S: widestring) : widestring
function TrimLeft(const S: unicodestring) : unicodestring
Visibility: default
Description: Trim strips blank characters (spaces and control characters) at the beginning 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 (1759), TrimRight (1761)
Listing: ./sysutex/ex85.pp
Program Example85 ;
{ T h i s program demonstrates t h e T r i m L e f t f u n c t i o n }
Uses s y s u t i l s ;
{ $H+ }
Procedure T e s t i t (S : S t r i n g ) ;
begin
W r i t e l n ( ' " ' , T r i m L e f t (S ) , ' " ' ) ;
end ;
Begin
T e s t i t ( ' ha ha what g e t s l o s t ? ' ) ;
T e s t i t (#10#13 ' haha ' ) ;
1760
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.264 TrimRight
Synopsis: Trim whitespace from the end of a string.
Declaration: function TrimRight(const S: string) : string
function TrimRight(const S: widestring) : widestring
function TrimRight(const S: unicodestring) : unicodestring
Visibility: default
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 (1759), TrimLeft (1760)
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.15.265 TryEncodeDate
Synopsis: Try to encode a date, and indicate success.
Declaration: function TryEncodeDate(Year: Word; Month: Word; Day: Word;
out Date: TDateTime) : Boolean
Visibility: default
Description: TryEncodeDate will check the validity of the Year, Month and Day arguments, and if they are
all valid, then they will be encoded as a TDateTime value and returned in Date. The function will
return True in this case. If an invalid argument is passed, then False will be returned.
Errors: None. If an error occurs during the encoding, False is returned.
See also: EncodeDate (1665), DecodeDateFully (1661), DecodeDate (1661), TryEncodeTime (1762)
1761
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.266 TryEncodeTime
Synopsis: Try to encode a time, and indicate success.
Declaration: function TryEncodeTime(Hour: Word; Min: Word; Sec: Word; MSec: Word;
out Time: TDateTime) : Boolean
Visibility: default
Description: TryEncodeTime will check the validity of the Hour, Min, Sec and MSec arguments, and will
encode them in a TDateTime value which is returned in Time. If the arguments are valid, then
True is returned, otherwise False is returned.
Errors: None. If an error occurs during the encoding, False is returned.
See also: EncodeTime (1666), DecodeTime (1661), TryEncodeDate (1761)
76.15.267 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 suc-
cessful, 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 (1610) and
MaxCurrency (1610)). If not, False is returned.
76.15.268 TryStringToGUID
Synopsis: Try to transform a string to a GUID
Declaration: function TryStringToGUID(const S: string; out Guid: TGUID) : Boolean
Visibility: default
Description: TryStringToGUID tries to convert the string S to a TGUID value, returned in GUID. It returns
True if the conversion succeeds, and False if the string S does not contain a valid GUID notation.
The string S must be 38 characters long, must start with { and end on }, and contain a valid GUID
string (hex number grouped using 8-4-4-4-12 digits).
Errors: In case S does not contain a valid GUID number, False is returned.
See also: StringToGUID (1736)
1762
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.269 TryStrToBool
Synopsis: Try to convert a string to a boolean value
Description: TryStrToBool tries to convert the string S to a boolean value, and returns this value in Value.
In this case, the function returns True. If S does not contain a valid boolean string, the function
returns False, and the contents of Value is undetermined.
Valid boolean string constants are in the FalseBoolStrs (1626) (for False values) and TrueBoolStrs
(1630) (for True values) variables.
76.15.270 TryStrToCurr
Synopsis: Try to convert a string to a currency
Declaration: function TryStrToCurr(const S: string; out Value: Currency) : Boolean
function TryStrToCurr(const S: string; out Value: Currency;
const FormatSettings: TFormatSettings) : Boolean
Visibility: default
Description: TryStrToCurr converts the string S to a currency value and returns the value in Value. The
function returns True if it was successful, False if not. This is contrary to StrToCurr (1745),
which raises an exception when the conversion fails.
The function takes into account locale information.
See also: StrToCurr (1745), TextToFloat (1756)
76.15.271 TryStrToDate
Synopsis: Try to convert a string with a date indication to a TDateTime value
1763
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Description: TryStrToDate tries to convert the string S to a TDateTime date value, and stores the date in
Value. The Date must consist of 1 to three digits, separated by the DateSeparator character. If
two numbers are given, they are supposed to form the day and month of the current year. If only one
number is given, it is supposed to represent the day of the current month. (This is not supported in
Delphi)
The order of the digits (y/m/d, m/d/y, d/m/y) is determined from the ShortDateFormat variable.
The function returns True if the string contained a valid date indication, False otherwise.
See also: StrToDate (1746), StrToTime (1753), TryStrToTime (1766), TryStrToDateTime (1764), DateToStr
(1659), TimeToStr (1759)
76.15.272 TryStrToDateTime
Synopsis: Try to convert a string with date/time indication to a TDateTime value
Declaration: function TryStrToDateTime(const S: ShortString; out Value: TDateTime)
: Boolean
function TryStrToDateTime(const S: AnsiString; out Value: TDateTime)
: Boolean
function TryStrToDateTime(const S: string; out Value: TDateTime;
const FormatSettings: TFormatSettings)
: Boolean
Visibility: default
Description: TryStrToDateTime tries to convert the string S to a TDateTime date and time value, and stores
the result in Value. The date must consist of 1 to three digits, separated by the DateSeparator
character. If two numbers are given, they are supposed to form the day and month of the current
year. If only one number is given, it is supposed to represent the day of the current month (This is
not supported in Delphi). The time must consist of 1 to 4 digits, separated by the TimeSeparator
character. If two numbers are given, they are supposed to form the hour and minutes.
The function returns True if the string contained a valid date and time indication, False otherwise.
See also: TryStrToDate (1763), TryStrToTime (1766), StrToDateTime (1747), StrToTime (1753), DateToStr
(1659), TimeToStr (1759)
76.15.273 TryStrToDWord
Synopsis: Try to convert a string to DWord (cardinal)
1764
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.274 TryStrToFloat
Synopsis: Try to convert a string to a float.
Description: TryStrToFloat tries to convert the string S to a floating point value, and stores the result in
Value. It returns True if the operation was successful, and False if it failed. This operation takes
into account the system settings for floating point representations.
Errors: On error, False is returned.
76.15.275 TryStrToInt
Synopsis: Try to convert a string to an integer, and report on success.
Declaration: function TryStrToInt(const s: string; out i: LongInt) : Boolean
Visibility: default
Description: TryStrToInt tries to convert the string S to an integer, and returns True if this was successful.
In that case the converted integer is returned in I. If the conversion failed, (an invalid string, or the
value is out of range) then False is returned.
Errors: None. On error, False is returned.
See also: StrToInt (1750), TryStrToInt64 (1765), StrToIntDef (1752), StrToInt64 (1751), StrToInt64Def (1751)
76.15.276 TryStrToInt64
Synopsis: Try to convert a string to an int64 value, and report on success.
Declaration: function TryStrToInt64(const s: string; out i: Int64) : Boolean
Visibility: default
Description: TryStrToInt64 tries to convert the string S to a Int64 value, and returns this value in I if success-
ful. If the conversion was successful, the function result is True, or False otherwise. The string
can only contain numerical characters, and optionally a minus sign as the first character. Whitespace
is not allowed.
Hexadecimal values (starting with the $ character) are supported.
Errors: None. On error, False is returned.
See also: StrToInt64 (1751), StrToInt64Def (1751), StrToInt (1750), TryStrToInt (1765), StrToIntDef (1752)
1765
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.277 TryStrToQWord
Synopsis: Try to convert a string to a QWord value, and report on success
Declaration: function TryStrToQWord(const s: string; out Q: QWord) : Boolean
Visibility: default
Description: TryStrToQWord tries to convert the string S to a valid QWord (unsigned 64-bit) value, and stores
the result in I. If the conversion fails, the function returns False, else it returns True.
See also: StrToQWord (1752), StrToQWordDef (1753), TryStrToInt64 (1765), TryStrToInt (1765)
76.15.278 TryStrToTime
Synopsis: Try to convert a string with a time indication to a TDateTime value
Declaration: function TryStrToTime(const S: ShortString; out Value: TDateTime)
: Boolean
function TryStrToTime(const S: AnsiString; out Value: TDateTime)
: Boolean
function TryStrToTime(const S: ShortString; out Value: TDateTime;
separator: Char) : Boolean
function TryStrToTime(const S: AnsiString; out Value: TDateTime;
separator: Char) : Boolean
function TryStrToTime(const S: string; out Value: TDateTime;
const FormatSettings: TFormatSettings) : Boolean
Visibility: default
Description: TryStrToTime tries to convert the string S to a TDateTime time value, and stores the result in
Value. The time must consist of 1 to 4 digits, separated by the TimeSeparator character. If two
numbers are given, they are supposed to form the hour and minutes.
The function returns True if the string contained a valid time indication, False otherwise.
See also: TryStrToDate (1763), TryStrToDateTime (1764), StrToDate (1746), StrToTime (1753), DateToStr
(1659), TimeToStr (1759)
76.15.279 TryStrToUInt
Declaration: function TryStrToUInt(const s: string; out C: Cardinal) : Boolean
Visibility: default
76.15.280 TryStrToUInt64
Declaration: function TryStrToUInt64(const s: string; out u: UInt64) : Boolean
Visibility: default
76.15.281 UIntToStr
Declaration: function UIntToStr(Value: QWord) : string
function UIntToStr(Value: Cardinal) : string
Visibility: default
1766
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.282 UnhookSignal
Synopsis: UnHook a specified signal
76.15.283 UnicodeCompareStr
Synopsis: Compare 2 Unicode strings
Declaration: function UnicodeCompareStr(const s1: UnicodeString;
const s2: UnicodeString) : PtrInt
Visibility: default
Description: UnicodeCompareStr compares 2 Unicode strings S1 and S2 in a case sensitive manner. The
result of the function is
This function relies on a widestring manager to perform the actual comparison, as it will take into
account various equivalent code points: it is not a simple byte-by-byte comparison.
See also: UnicodeCompareText (1767), CompareStr (1651), CompareText (1652), UnicodeSameStr (1769)
76.15.284 UnicodeCompareText
Synopsis: Compare 2 strings case insensitively
Declaration: function UnicodeCompareText(const s1: UnicodeString;
const s2: UnicodeString) : PtrInt
Visibility: default
Description: UnicodeCompareText compares 2 Unicode strings S1 and S2, ignoring case. The result of the
function is
This function relies on a widestring manager to perform the actual comparison, as it will take into
account various equivalent code points: it is not a simple byte-by-byte comparison.
See also: UnicodeCompareText (1767), CompareStr (1651), CompareText (1652), UnicodeSameStr (1769)
1767
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.285 UnicodeFmtStr
Synopsis: Format a string with given arguments, procedural version.
Declaration: procedure UnicodeFmtStr(var Res: UnicodeString;
const Fmt: UnicodeString;
const args: Array of const)
procedure UnicodeFmtStr(var Res: UnicodeString;
const Fmt: UnicodeString;
const args: Array of const;
const FormatSettings: TFormatSettings)
Visibility: default
Description: UnicodeFmtStr calls UnicodeFormat (1768) with Fmt and Args as arguments, and stores the
result in Res. For more information on how the resulting string is composed, see UnicodeFormat
(1768).
Errors: In case of error, an EConvertError (1780) exception is raised.
See also: UnicodeFormat (1768), UnicodeFormatBuf (1768)
76.15.286 UnicodeFormat
Synopsis: Format Unicode string
Declaration: function UnicodeFormat(const Fmt: UnicodeString;
const Args: Array of const) : UnicodeString
function UnicodeFormat(const Fmt: UnicodeString;
const Args: Array of const;
const FormatSettings: TFormatSettings)
: UnicodeString
Visibility: default
Description: UnicodeFormat is the Unicode equivalent of Format (1695). It follows the same rules and uses
the same formatting strings.
Errors: In case of error, an EConvertError (1780) exception is raised.
See also: Format (1695), UnicodeFormatBuf (1768)
76.15.287 UnicodeFormatBuf
Synopsis: Format a Unicode string with given arguments and store the result in a unicodebuffer.
Declaration: function UnicodeFormatBuf(var Buffer; BufLen: Cardinal; const Fmt;
fmtLen: Cardinal; const Args: Array of const)
: Cardinal
function UnicodeFormatBuf(var Buffer; BufLen: Cardinal; const Fmt;
fmtLen: Cardinal; const Args: Array of const;
const FormatSettings: TFormatSettings)
: Cardinal
Visibility: default
Description: UnicodeFormatBuf is the Unicode equivalent of FormatBuf (1702). It follows the same rules
and uses the same formatting st
1768
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.288 UnicodeLowerCase
Synopsis: Return lowercase version of a string
76.15.289 UnicodeSameStr
Synopsis: Check whether 2 strings are equal
Declaration: function UnicodeSameStr(const s1: UnicodeString;
const s2: UnicodeString) : Boolean
Visibility: default
Description: UnicodeSameStr checks whether the Unicode strings S1 and S2 are equal, case sensitively. The
function returns True if the strings are equal, False if they are not. This function relies on a
widestring manager to perform the actual comparison, as it will take into account various equivalent
code points: it is not a simple byte-by-byte comparison.
See also: UnicodeCompareText (1767), CompareStr (1651), CompareText (1652), UnicodeSameText (1769),
SameStr (1727)
76.15.290 UnicodeSameText
Synopsis: Check whether 2 strings are the same, ignoring case
1769
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.291 UnicodeStringReplace
Synopsis: Replace one occurrence of a string with another
Description: UnicodeStringReplace is the Unicode version of StringReplace (1736); it follows the same
rules and has the same behaviour, but operates on Unicode strings instead of ansistrings.
See also: StringReplace (1736)
76.15.292 UnicodeUpperCase
Synopsis: Return uppercase version of a string
Declaration: function UnicodeUpperCase(const s: UnicodeString) : UnicodeString
Visibility: default
Description: UnicodeUpperCase returns an all-uppercase version of the unicodestring S. It relies on the Uni-
code manager to do so.
See also: UnicodeLowerCase (1769), LowerCase (1721), UpperCase (1770)
76.15.293 UpperCase
Synopsis: Return an uppercase version of a string.
Declaration: function UpperCase(const s: string) : string; Overload
function UpperCase(const s: string; LocaleOptions: TLocaleOptions)
: string; Overload
function UpperCase(const s: UnicodeString) : UnicodeString; 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 compatibility only.
Errors: None.
See also: AnsiLowerCase (1635), LowerCase (1721), AnsiUpperCase (1643)
Listing: ./sysutex/ex87.pp
1770
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Program Example87 ;
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.15.294 VendorName
Synopsis: Return Application vendor Name
Declaration: function VendorName : string
Visibility: default
Description: VendorName returns the application vendor name. In order to set the application vendor name,
the OnGetVendorName (1628) event must be set, and an appropriate return value must be returned.
The Vendor name is used in GetAppConfigDir (1706) and GetAppConfigFile (1706) to determine
the configuration directory.
Errors: If OnGetVendorName (1628) is not set, an empty string is returned.
76.15.295 WideBytesOf
Synopsis: Returns the contents of a widestring as an array of bytes
Declaration: function WideBytesOf(const Value: UnicodeString) : TBytes
Visibility: default
Description: WideBytesOf returns the contents of the widestring Value as an array of bytes. The array will
have as length twice the length of the wide string, as each wide character contains 2 bytes.
See also: StringOf (1736)
76.15.296 WideCompareStr
Synopsis: Compare two widestrings (case sensitive)
Declaration: function WideCompareStr(const s1: WideString; const s2: WideString)
: PtrInt
Visibility: default
Description: WideCompareStr compares two widestrings and returns the following result:
1771
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
The comparison takes into account wide characters, i.e. it takes care of strange accented characters.
Contrary to WideCompareText (1772), the comparison is case sensitive.
Errors: None.
See also: WideCompareText (1772), WideSameStr (1773), WideSameText (1774)
76.15.297 WideCompareText
Synopsis: Compare two widestrings (ignoring case).
Declaration: function WideCompareText(const s1: WideString; const s2: WideString)
: PtrInt
Visibility: default
Description: WideCompareStr compares two widestrings and returns the following result:
The comparison takes into account wide characters, i.e. it takes care of strange accented characters.
Contrary to WideCompareStr (1771), the comparison is case insensitive.
Errors: None.
76.15.298 WideFmtStr
Synopsis: Widestring format
Declaration: procedure WideFmtStr(var Res: WideString; const Fmt: WideString;
const args: Array of const)
procedure WideFmtStr(var Res: WideString; const Fmt: WideString;
const args: Array of const;
const FormatSettings: TFormatSettings)
Visibility: default
Description: WideFmtStr formats Args according to the format string in Fmt and returns the resulting string
in Res.
See also: WideFormat (1772), WideFormatBuf (1773), Format (1695)
76.15.299 WideFormat
Synopsis: Format a wide string.
1772
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Description: WideFormat does the same as Format (1695) but accepts as a formatting string a WideString. The
resulting string is also a WideString.
For more information about the used formatting characters, see the Format (1695) string.
See also: Format (1695)
76.15.300 WideFormatBuf
Synopsis: Format widestring in a buffer.
Declaration: function WideFormatBuf(var Buffer; BufLen: Cardinal; const Fmt;
fmtLen: Cardinal; const Args: Array of const)
: Cardinal
function WideFormatBuf(var Buffer; BufLen: Cardinal; const Fmt;
fmtLen: Cardinal; const Args: Array of const;
const FormatSettings: TFormatSettings) : Cardinal
Visibility: default
Description: WideFormatBuf calls simply WideFormat (1772) with Fmt (with length FmtLen bytes) and
stores maximum BufLen bytes in the buffer buf. It returns the number of copied bytes.
See also: WideFmtStr (1772), WideFormat (1772), Format (1695), FormatBuf (1702)
76.15.301 WideLowerCase
Synopsis: Change a widestring to all-lowercase.
Declaration: function WideLowerCase(const s: WideString) : WideString
Visibility: default
Description: WideLowerCase converts the string S to lowercase characters and returns the resulting string. It
takes into account the operating system language settings when doing this, so special characters are
converted correctly as well.
Remark On Unix-like platforms, a widestring manager must be installed for this function to work correctly.
Errors: None.
See also: WideUpperCase (1775)
76.15.302 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 (1771) returns 0 (zero), i.e. when S1 and S2 are
the same string (taking into account case).
See also: WideSameText (1774), WideCompareStr (1771), WideCompareText (1772), AnsiSameStr (1637)
1773
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.303 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 (1772) returns 0 (zero), i.e. when S1 and S2
are the same string (taking into account case).
See also: WideSameStr (1773), WideCompareStr (1771), WideCompareText (1772), AnsiSameText (1637)
76.15.304 WideStrAlloc
Synopsis: Allocate a null-terminated widestring on the heap.
Declaration: function WideStrAlloc(size: Cardinal) : pwidechar
Visibility: default
Description: WideStrAlloc reserves memory on the heap for a widestring with length Len, (terminating
#0#0 included), and returns a pointer to it.
Additionally, WideStrAlloc allocates 4 extra bytes to store the size of the allocated memory.
Errors: None.
See also: StrBufSize (1730), StrDispose (1733), StrAlloc (1280)
76.15.305 WideStringOf
Synopsis: Create Unicode string from array of bytes
Declaration: function WideStringOf(const Value: TBytes) : UnicodeString
Visibility: default
Description: WideStringOf converts an array of bytes (Bytes) to a Unicode string. It considers each pair of
bytes in the array as a single wide char. The array should have an even length. If the length is uneven,
the last byte will be ignored.
This function performs the opposite operation of BytesOf (1647).
To create a string where the bytes are interpreted as ansichars, use StringOf (1736) instead.
See also: StringOf (1736), WideBytesOf (1771), BytesOf (1647)
76.15.306 WideStringReplace
Synopsis: Replace occurrences of one substring with another in a widestring.
Declaration: function WideStringReplace(const S: WideString;
const OldPattern: WideString;
const NewPattern: WideString;
Flags: TReplaceFlags) : WideString
function WideStringReplace(const S: WideString;
const OldPattern: WideString;
const NewPattern: WideString;
1774
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.15.307 WideUpperCase
Synopsis: Change a widestring to all-uppercase.
Declaration: function WideUpperCase(const s: WideString) : WideString
Visibility: default
Description: WideUpperCase converts the string S to uppercase characters and returns the resulting string. It
takes into account the operating system language settings when doing this, so special characters are
converted correctly as well.
Remark On Unix-like platforms, a widestring manager must be installed for this function to work correctly.
Errors: None.
See also: WideLowerCase (1773)
76.15.308 WrapText
Synopsis: Word-wrap a text.
Declaration: function WrapText(const Line: string; const BreakStr: string;
const BreakChars: TSysCharSet; MaxCol: Integer)
: string
function WrapText(const Line: string; MaxCol: Integer) : string
Visibility: default
Description: WrapText does a wordwrap at column MaxCol of the string in Line. It breaks the string only at
characters which are in BreakChars (default whitespace and hyphen) and inserts then the string
BreakStr (default the lineending character for the current OS).
Portions of text that are between single or double quotes will be considered single words and the text
will not be broken between the quotes.
1775
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.16 TRawbyteSearchRec
TRawbyteSearchRec = record
public
Time : LongInt;
Size : Int64
;
Attr : LongInt;
Name : RawByteString;
ExcludeAttr : LongInt
;
FindHandle : THandle;
private
function GetTimeStamp : TDateTime
;
public
property TimeStamp : TDateTime;
end
76.16.2 TRawbyteSearchRec.TimeStamp
Declaration: Property TimeStamp : TDateTime
Visibility: public
Access: Read
76.17 TRawbyteSymLinkRec
TRawbyteSymLinkRec = record
public
TargetName : RawByteString;
Size : Int64;
Attr : LongInt;
private
function GetTimeStamp
1776
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
: TDateTime;
public
property TimeStamp : TDateTime;
end
76.17.2 TRawbyteSymLinkRec.TimeStamp
Declaration: Property TimeStamp : TDateTime
Visibility: public
Access: Read
76.18 TUnicodeSearchRec
TUnicodeSearchRec = record
public
Time : LongInt;
Size : Int64
;
Attr : LongInt;
Name : UnicodeString;
ExcludeAttr : LongInt
;
FindHandle : THandle;
private
function GetTimeStamp : TDateTime
;
public
property TimeStamp : TDateTime;
end
1777
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.18.2 TUnicodeSearchRec.TimeStamp
Declaration: Property TimeStamp : TDateTime
Visibility: public
Access: Read
76.19 TUnicodeSymLinkRec
TUnicodeSymLinkRec = record
public
TargetName : UnicodeString;
Attr : LongInt;
Size : Int64;
private
function GetTimeStamp
: TDateTime;
public
property TimeStamp : TDateTime;
end
76.19.2 TUnicodeSymLinkRec.TimeStamp
Declaration: Property TimeStamp : TDateTime
Visibility: public
Access: Read
76.20 EAbort
76.20.1 Description
Abort is raised by the Abort (1630) 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.
76.21 EAbstractError
76.21.1 Description
EAbstractError is raised when an abstract error occurs, i.e. when an unimplemented abstract
method is called.
1778
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.22 EAccessViolation
76.22.1 Description
EAccessViolation is raised when the OS reports an Access Violation, i.e. when invalid memory
is accessed.
76.23 EArgumentException
76.23.1 Description
EArgumentException is raised by many character conversion/handling routines to indicate an
erroneous argument was passed to the function (usually indicating an invalid codepoint in a Unicode
string).
76.24 EArgumentNilException
76.24.1 Description
EArgumentNilException is an exception raised when an argument is Nil when it should not
be Nil.
This exception class is provided for Delphi compatibility, but is not actually used in FPC.
76.25 EArgumentOutOfRangeException
76.25.1 Description
EArgumentOutOfRangeException is raised by many character conversion/handling routines
to indicate an erroneous argument was passed to the function (indicating an invalid character index
in a Unicode string).
76.26 EAssertionFailed
76.26.1 Description
EAssertionFailed is raised when an application that is compiled with assertions, encounters an
invalid assertion.
1779
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.27 EBusError
76.27.1 Description
EBusError is raised in case of a bus error.
76.28 EControlC
76.28.1 Description
EControlC is raised when the user has pressed CTRL-C in a console application.
76.29 EConvertError
76.29.1 Description
EConvertError is raised by the various conversion routines in the SysUtils unit. The message
will contain more specific error information.
76.30 EDirectoryNotFoundException
76.30.1 Description
EDirectoryNotFoundException is an exception raised when a directory is referenced that
does not exist.
This exception class is provided for Delphi compatibility, but is not actually used in FPC.
76.31 EDivByZero
76.31.1 Description
EDivByZero is used when the operating system or CPU signals a division by zero error.
76.32 EEncodingError
76.32.1 Description
EEncodingError is the exception classed used by the TEncoding class to indicate errors.
1780
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.33 EExternal
76.33.1 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 (1782), EExternal (1781), EMathError (1783), EExternalException (1781), EAccessVio-
lation (1779), EPrivilege (1786), EStackOverflow (1786), EControlC (1780)
76.34 EExternalException
76.34.1 Description
EExternalException is raised when an external routine raises an exception.
76.35 EFileNotFoundException
76.35.1 Description
EFileNotFoundException is an exception raised when a file is referenced that does not exist.
This exception class is provided for Delphi compatibility, but is not actually used in FPC.
76.36 EFormatError
76.36.1 Description
EformatError is raised in case of an error in one of the various Format (1695) functions.
76.37 EHeapMemoryError
76.37.1 Description
EHeapMemoryError is raised when an error occurs in heap (dynamically allocated) memory.
1781
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.37.3 EHeapMemoryError.FreeInstance
Synopsis: Free the exception instance
Declaration: procedure 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
occurred, the exception instance is not freed.
76.38 EInOutError
76.38.1 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 (??).
76.39 EIntError
76.39.1 Description
EInterror is used when the operating system or CPU signals an integer operation error, e.g., an
overflow.
76.40 EIntfCastError
76.40.1 Description
EIntfCastError is raised when an invalid interface cast is encountered.
76.41 EIntOverflow
76.41.1 Description
EIntOverflow is used when the operating system or CPU signals a integer overflow error.
76.42 EInvalidCast
76.42.1 Description
EInvalidCast is raised when an invalid typecast error (using the as operator) is encountered.
1782
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.43 EInvalidContainer
76.43.1 Description
EInvalidContainer is not yet used by Free Pascal, and is provided for Delphi compatibility
only.
76.44 EInvalidInsert
76.44.1 Description
EInvalidInsert is not yet used by Free Pascal, and is provided for Delphi compatibility only.
76.45 EInvalidOp
76.45.1 Description
EInvalidOp is raised when an invalid operation is encountered.
76.46 EInvalidOpException
76.47 EInvalidPointer
76.47.1 Description
EInvalidPointer is raised when an invalid heap pointer is used.
76.48 EMathError
76.48.1 Description
EMathError is used when the operating system or CPU signals a floating point overflow error.
See also: EIntError (1782), EIntOverflow (1782), EDivByZero (1780), ERangeError (1786)
76.49 ENoConstructException
76.49.1 Description
ENoConstructException is the exception raised when an instance of type TCharacter is
being created. The TCharacter class only contains static methods, no instances of this class should
be instantiated.
1783
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.50 ENoDynLibsSupport
76.51 ENoThreadSupport
76.51.1 Description
ENoThreadSupport is raised when some thread routines are invoked, and thread support was not
enabled when the program was compiled.
76.52 ENotImplemented
76.52.1 Description
ENotImplemented can be used to raise an exception when a particular call had been defined, but
was not implemented.
76.53 ENotSupportedException
76.53.1 Description
ENotSupportedException is an exception raised when a function or procedure is not supported
for a certain platform.
This exception class is provided for Delphi compatibility, but is not actually used in FPC.
76.54 ENoWideStringSupport
76.54.1 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.55 EObjectCheck
76.55.1 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.
76.56 EOSError
76.56.1 Description
EOSError is raised when some Operating System call fails. The ErrorCode (??) property contains
the operating system error code.
1784
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.57 EOutOfMemory
76.57.1 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.
76.58 EOverflow
76.58.1 Description
EOverflow occurs when a float operation overflows. (i.e. result is too big to represent).
See also: EIntError (1782), EIntOverflow (1782), EDivByZero (1780), ERangeError (1786), EUnderFlow
(1787)
76.59 EPackageError
76.59.1 Description
EPackageError is not yet used by Free Pascal, and is provided for Delphi compatibility only.
76.60 EPathNotFoundException
76.60.1 Description
EPathNotFoundException is an exception raised when a path is referenced that does not exist.
This exception class is provided for Delphi compatibility, but is not actually used in FPC.
76.61 EPathTooLongException
76.61.1 Description
EPathTooLongException is an exception raised when a pathname argument is longer than the
allowed pathname length for files.
This exception class is provided for Delphi compatibility, but is not actually used in FPC.
1785
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.62 EPrivilege
76.62.1 Description
EPrivilege is raised when the OS reports that an invalid instruction was executed.
76.63 EProgrammerNotFound
76.64 EPropReadOnly
76.64.1 Description
EPropReadOnly is raised when an attempt is made to write to a read-only property.
76.65 EPropWriteOnly
76.65.1 Description
EPropWriteOnly is raised when an attempt is made to read from a write-only property.
76.66 ERangeError
76.66.1 Description
ERangeError is raised by the Free Pascal runtime library if range checking is on, and a range
check error occurs.
76.67 ESafecallException
76.67.1 Description
ESafecallException is not yet used by Free Pascal, and is provided for Delphi compatibility
only.
76.68 ESigQuit
76.69 EStackOverflow
76.69.1 Description
EStackOverflow occurs when the stack has grown too big (e.g. by infinite recursion).
1786
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.70 EThreadError
76.71 EUnderflow
76.71.1 Description
EOverflow occurs when a float operation underflows (i.e. result is too small to represent).
See also: EIntError (1782), EIntOverflow (1782), EDivByZero (1780), ERangeError (1786), EOverFlow (1785)
76.72 EVariantError
76.72.1 Description
EVariantError is raised by the internal variant routines.
76.72.3 EVariantError.CreateCode
Synopsis: Create an instance of EVariantError with a particular error code.
Declaration: constructor CreateCode(Code: LongInt)
Visibility: default
Description: CreateCode calls the inherited constructor, and sets the ErrCode (??) property to Code.
See also: ErrCode (??)
76.73 Exception
76.73.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 (1667), ExceptAddr (1666), ExceptionErrorMessage (1667), ShowException (1728),
Abort (1630)
1787
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.73.4 Exception.Create
Synopsis: Constructs a new exception object with a given message.
Declaration: constructor Create(const msg: string)
Visibility: public
Errors: Construction may fail if there is not enough memory on the heap.
See also: Exception.CreateFmt (1788), Exception.Message (1790)
76.73.5 Exception.CreateFmt
Synopsis: Constructs a new exception object and formats a new message.
Declaration: constructor CreateFmt(const msg: string; const args: Array of const)
Visibility: public
Errors: Construction may fail if there is not enough memory on the heap.
76.73.6 Exception.CreateRes
Synopsis: Constructs a new exception object and gets the message from a resource.
Declaration: constructor CreateRes(ResString: PString)
Visibility: public
1788
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Errors: Construction may fail if there is not enough memory on the heap.
See also: Exception.Create (1788), Exception.CreateFmt (1788), Exception.CreateResFmt (1789), Excep-
tion.Message (1790)
76.73.7 Exception.CreateResFmt
Synopsis: Constructs a new exception object and formats the message from a resource.
Declaration: constructor CreateResFmt(ResString: PString; const Args: Array of const)
Visibility: public
Description: CreateResFmt does the same as CreateFmt (1788), 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 (1788), Exception.CreateFmt (1788), Exception.CreateRes (1788), Exception.Message
(1790)
76.73.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 (1788) constructor, but additionally stores AHelpContext
in the HelpContext (1790) property.
See also: Exception.Create (1788)
76.73.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 (1788) constructor, but additionally stores
AHelpContext in the HelpContext (1790) property.
See also: Exception.CreateFmt (1788)
76.73.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 (1788) constructor, but additionally stores AHelpContext
in the HelpContext (1790) property.
See also: Exception.CreateRes (1788)
1789
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.73.11 Exception.CreateResFmtHelp
Synopsis: Constructs a new exception object and sets the help context and formats the message from a resource
Description: CreateResFmtHelp does the same as the CreateResFmt (1789) constructor, but additionally
stores AHelpContext in the HelpContext (1790) property.
See also: Exception.CreateResFmt (1789)
76.73.12 Exception.ToString
Synopsis: Nicely formatted version of the exception message
76.73.13 Exception.HelpContext
Synopsis: Help context associated with the exception.
Declaration: Property HelpContext : LongInt
Visibility: public
Access: Read,Write
Description: HelpContext is the help context associated with the exception, and can be used to provide
context-sensitive help when the exception error message is displayed. It should be set in the ex-
ception constructor.
See also: Exception.CreateHelp (1789), Exception.Message (1790)
76.73.14 Exception.Message
Synopsis: Message associated with the exception.
Declaration: Property Message : string
Visibility: public
Access: Read,Write
Description: Message provides additional information about the exception. It is shown to the user in e.g. the
ShowException (1728) routine, and should be set in the constructor when the exception is raised.
1790
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.74 EZeroDivide
76.74.1 Description
EZeroDivide occurs when a float division by zero occurs.
See also: EIntError (1782), EIntOverflow (1782), EDivByZero (1780), ERangeError (1786)
76.75 IReadWriteSync
76.75.1 Description
IReadWriteSync is an interface for synchronizing read/write operations. Writers are always
guaranteed to have exclusive access: readers may or may not have simultaneous access, depending
on the implementation.
76.75.3 IReadWriteSync.BeginRead
Synopsis: Start a read operation.
Declaration: procedure BeginRead
Visibility: default
Description: BeginRead indicates that a read operation is about to be started. If a write operation is in progress,
then the call will block until the write operation finished. Depending on the implementation the call
may also block if another read operation is in progress.
After BeginRead, any write operation started with BeginWrite (1792) will block until EndRead
(1791) is called.
See also: IReadWriteSync.EndRead (1791), IReadWriteSync.BeginWrite (1792), IReadWriteSync.EndWrite
(1792)
76.75.4 IReadWriteSync.EndRead
Synopsis: End a read operation
Declaration: procedure EndRead
Visibility: default
Description: EndRead signals the end of a read operation. If there was any blocked write operation, that will be
unblocked by a call to EndRead.
See also: IReadWriteSync.BeginRead (1791), IReadWriteSync.BeginWrite (1792), IReadWriteSync.EndWrite
(1792)
1791
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.75.5 IReadWriteSync.BeginWrite
Synopsis: Start a write operation.
76.75.6 IReadWriteSync.EndWrite
Synopsis: End a write operation.
76.76 TANSISTRINGBUILDER
76.76.1 Method overview
Page Method Description
1793 Append
1793 AppendFormat
1793 AppendLine
1794 Clear
1794 CopyTo
1793 Create
1794 EnsureCapacity
1794 Equals
1794 Insert
1795 Remove
1795 Replace
1795 ToString
1792
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.76.3 TANSISTRINGBUILDER.Create
Declaration: constructor Create
constructor Create(aCapacity: Integer)
constructor Create(const AValue: ANSISTRING)
constructor Create(aCapacity: Integer; aMaxCapacity: Integer)
constructor Create(const AValue: ANSISTRING; aCapacity: Integer)
constructor Create(const AValue: ANSISTRING; StartIndex: Integer;
aLength: Integer; aCapacity: Integer)
Visibility: public
76.76.4 TANSISTRINGBUILDER.Append
Declaration: functionAppend(const AValue: Boolean) : TANSISTRINGBUILDER
function Append(const AValue: Byte) : TANSISTRINGBUILDER
function Append(const AValue: ANSICHAR) : TANSISTRINGBUILDER
function Append(const AValue: Currency) : TANSISTRINGBUILDER
function Append(const AValue: Double) : TANSISTRINGBUILDER
function Append(const AValue: SmallInt) : TANSISTRINGBUILDER
function Append(const AValue: LongInt) : TANSISTRINGBUILDER
function Append(const AValue: Int64) : TANSISTRINGBUILDER
function Append(const AValue: TObject) : TANSISTRINGBUILDER
function Append(const AValue: ShortInt) : TANSISTRINGBUILDER
function Append(const AValue: Single) : TANSISTRINGBUILDER
function Append(const AValue: UInt64) : TANSISTRINGBUILDER
function Append(const AValue: Array of ANSICHAR) : TANSISTRINGBUILDER
function Append(const AValue: Word) : TANSISTRINGBUILDER
function Append(const AValue: Cardinal) : TANSISTRINGBUILDER
function Append(const AValue: PANSICHAR) : TANSISTRINGBUILDER
function Append(const AValue: RawByteString) : TANSISTRINGBUILDER
function Append(const AValue: ANSICHAR; RepeatCount: Integer)
: TANSISTRINGBUILDER
function Append(const AValue: Array of ANSICHAR; StartIndex: Integer;
SBCharCount: Integer) : TANSISTRINGBUILDER
function Append(const AValue: ANSISTRING; StartIndex: Integer;
Count: Integer) : TANSISTRINGBUILDER
function Append(const Fmt: ANSISTRING; const Args: Array of const)
: TANSISTRINGBUILDER
Visibility: public
76.76.5 TANSISTRINGBUILDER.AppendFormat
Declaration: function AppendFormat(const Fmt: ANSISTRING; const Args: Array of const)
: TANSISTRINGBUILDER
Visibility: public
76.76.6 TANSISTRINGBUILDER.AppendLine
Declaration: function AppendLine : TANSISTRINGBUILDER
function AppendLine(const AValue: RawByteString) : TANSISTRINGBUILDER
Visibility: public
1793
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.76.7 TANSISTRINGBUILDER.Clear
Declaration: procedure Clear
Visibility: public
76.76.8 TANSISTRINGBUILDER.CopyTo
Declaration: procedure CopyTo(SourceIndex: Integer;
var Destination: Array of ANSICHAR;
DestinationIndex: Integer; Count: Integer)
Visibility: public
76.76.9 TANSISTRINGBUILDER.EnsureCapacity
Declaration: function EnsureCapacity(aCapacity: Integer) : Integer
Visibility: public
76.76.10 TANSISTRINGBUILDER.Equals
Declaration: function Equals(StringBuilder: TANSISTRINGBUILDER) : Boolean
; Reintroduce
Visibility: public
76.76.11 TANSISTRINGBUILDER.Insert
Declaration: function Insert(Index: Integer; const AValue: Boolean)
: TANSISTRINGBUILDER
function Insert(Index: Integer; const AValue: Byte) : TANSISTRINGBUILDER
function Insert(Index: Integer; const AValue: ANSICHAR)
: TANSISTRINGBUILDER
function Insert(Index: Integer; const AValue: Currency)
: TANSISTRINGBUILDER
function Insert(Index: Integer; const AValue: Double)
: TANSISTRINGBUILDER
function Insert(Index: Integer; const AValue: SmallInt)
: TANSISTRINGBUILDER
function Insert(Index: Integer; const AValue: LongInt)
: TANSISTRINGBUILDER
function Insert(Index: Integer; const AValue: Array of ANSICHAR)
: TANSISTRINGBUILDER
function Insert(Index: Integer; const AValue: Int64)
: TANSISTRINGBUILDER
function Insert(Index: Integer; const AValue: TObject)
: TANSISTRINGBUILDER
function Insert(Index: Integer; const AValue: ShortInt)
: TANSISTRINGBUILDER
function Insert(Index: Integer; const AValue: Single)
: TANSISTRINGBUILDER
function Insert(Index: Integer; const AValue: ANSISTRING)
: TANSISTRINGBUILDER
1794
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.76.12 TANSISTRINGBUILDER.Remove
Declaration: function Remove(StartIndex: Integer; RemLength: Integer)
: TANSISTRINGBUILDER
Visibility: public
76.76.13 TANSISTRINGBUILDER.Replace
Declaration: function Replace(const OldChar: ANSICHAR; const NewChar: ANSICHAR)
: TANSISTRINGBUILDER
function Replace(const OldChar: ANSICHAR; const NewChar: ANSICHAR;
StartIndex: Integer; Count: Integer)
: TANSISTRINGBUILDER
function Replace(const OldValue: RAWBYTESTRING;
const NewValue: RAWBYTESTRING) : TANSISTRINGBUILDER
function Replace(const OldValue: RAWBYTESTRING;
const NewValue: RAWBYTESTRING; StartIndex: Integer;
Count: Integer) : TANSISTRINGBUILDER
Visibility: public
76.76.14 TANSISTRINGBUILDER.ToString
Declaration: function ToString : ANSISTRING; Override
function ToString(aStartIndex: Integer; aLength: Integer) : ANSISTRING
; Reintroduce
Visibility: public
76.76.15 TANSISTRINGBUILDER.Chars
Declaration: Property Chars[index: Integer]: ANSICHAR; default
Visibility: public
Access: Read,Write
1795
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.76.16 TANSISTRINGBUILDER.Length
Declaration: Property &Length : Integer
Visibility: public
Access: Read,Write
76.76.17 TANSISTRINGBUILDER.Capacity
Declaration: Property Capacity : Integer
Visibility: public
Access: Read,Write
76.76.18 TANSISTRINGBUILDER.MaxCapacity
Declaration: Property MaxCapacity : Integer
Visibility: public
Access: Read
76.77 TBigEndianUnicodeEncoding
76.77.1 Description
TBigEndianUnicodeEncoding is the encoding class used to represent the UTF-16 big-endian
encoding.
76.77.3 TBigEndianUnicodeEncoding.Clone
Synopsis: Clone a TBigEndianUnicodeEncoding instance
1796
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.77.4 TBigEndianUnicodeEncoding.GetPreamble
Synopsis: Return BOM marker bytes
76.78 TBooleanHelper
76.78.1 Description
TBooleanHelper is a helper type for the Boolean type. It contains mostly conversion routines
to and from other types.
See also: TStringHelper (1865), TShortIntHelper (1850), TSmallIntHelper (1862), TWordHelper (1896), TCar-
dinalHelper (1804), TIntegerHelper (1831), TInt64Helper (1828), TQWordHelper (1847), TNa-
tiveIntHelper (1840), TByteHelper (1800), TByteBoolHelper (1799), TWordBoolHelper (1895), TLong-
BoolHelper (1834)
76.78.3 TBooleanHelper.Parse
Synopsis: Convert string value to boolean value.
Errors: If S does not contain a valid string representation, then an EConvertError (1780) exception is raised.
See also: TBooleanHelper.TryToParse (1798), TBooleanHelper.ToString (1798), TBooleanHelper.ToInteger
(1798)
76.78.4 TBooleanHelper.Size
Synopsis: Return the size (in bytes) of the
Declaration: class function Size : Integer; Static
1797
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Visibility: public
Description: Size returns the size (in bytes) of the boolean value. This is equivalent to SizeOf(Boolean).
See also: SizeOf (1538)
76.78.5 TBooleanHelper.ToString
Synopsis: Convert a boolean value to string.
Declaration: class function ToString(const AValue: Boolean;
UseBoolStrs: TUseBoolStrs) : string; Overload
; Static
function ToString(UseBoolStrs: TUseBoolStrs) : string; Overload
Visibility: public
Description: ToString will, in the class method version, convert the AValue boolean to a string representation.
In the function method version the boolean value itself (Self) will be converted.
If the UseBoolStrs parameter equals TUseBoolStrs.True, then the string representation will
use the boolean strings BoolStrs (1598). The default value for UseBoolStrs is TUseBoolStrs.False.
The conversion is done using the BoolTostr (1647) function.
See also: BoolStrs (1598), BoolToStr (1647)
76.78.6 TBooleanHelper.TryToParse
Synopsis: Try to convert a string to a boolean value
76.78.7 TBooleanHelper.ToInteger
Synopsis: Convert to an integer value
1798
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.79 TByteBoolHelper
76.79.1 Description
TByteBoolHelper is a helper type for the ByteBool type. It contains mostly conversion rou-
tines to and from other types.
See also: TStringHelper (1865), TShortIntHelper (1850), TSmallIntHelper (1862), TWordHelper (1896), TCar-
dinalHelper (1804), TIntegerHelper (1831), TInt64Helper (1828), TQWordHelper (1847), TNa-
tiveIntHelper (1840), TByteHelper (1800), TByteBoolHelper (1799), TWordBoolHelper (1895), TLong-
BoolHelper (1834)
76.79.3 TByteBoolHelper.Parse
Synopsis: Convert string value to ByteBool value.
Declaration: class function Parse(const S: string) : Boolean; Static
Visibility: public
Description: Parse attempts to convert the string S to a ByteBool value. It uses the StrToBool (1745) function
to perform the conversion.
Errors: If S does not contain a valid string representation, then an EConvertError (1780) exception is raised.
See also: TByteBoolHelper.TryToParse (1800), TByteBoolHelper.ToString (1799), TByteBoolHelper.ToInteger
(1800)
76.79.4 TByteBoolHelper.Size
Synopsis: Return the size (in bytes) of the
Declaration: class function Size : Integer; Static
Visibility: public
Description: Size returns the size (in bytes) of the ByteBool value. This is equivalent to SizeOf(ByteBool).
See also: SizeOf (1538)
76.79.5 TByteBoolHelper.ToString
Synopsis: Convert a ByteBool value to string.
Declaration: class function ToString(const AValue: Boolean;
UseBoolStrs: TUseBoolStrs) : string; Overload
; Static
function ToString(UseBoolStrs: TUseBoolStrs) : string; Overload
1799
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Visibility: public
Description: ToString will, in the class method version, convert the AValue ByteBool to a string representa-
tion. In the function method version the ByteBool value itself (Self) will be converted.
If the UseBoolStrs parameter equals TUseBoolStrs.True, then the string representation will
use the ByteBool strings BoolStrs (1598). The default value for UseBoolStrs is TUseBoolStrs.False.
The conversion is done using the BoolTostr (1647) function.
See also: BoolStrs (1598), BoolToStr (1647)
76.79.6 TByteBoolHelper.TryToParse
Synopsis: Try to convert a string to a ByteBool value
76.79.7 TByteBoolHelper.ToInteger
Synopsis: Convert to an integer value
76.80 TByteHelper
76.80.1 Description
TByteHelper contains some auxiliary routines for a byte-typed ordinal value. It consists mainly
of conversion routines to and from other types.
See also: TStringHelper (1865), TShortIntHelper (1850), TSmallIntHelper (1862), TWordHelper (1896), TCar-
dinalHelper (1804), TIntegerHelper (1831), TInt64Helper (1828), TQWordHelper (1847), TNa-
tiveIntHelper (1840), TNativeUIntHelper (1844)
1800
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.80.3 TByteHelper.Parse
Synopsis: Convert from a string
Declaration: class function Parse(const AString: string) : Byte; Static
Visibility: public
Description: Parse will attempt to convert the string AString to a byte value. It uses the StrToInt (1750)
function to perform the conversion, so no localization is taken into account.
Errors: If the string does not contain a valid byte value, an EConvertError (1780) exception is raised.
See also: TByteHelper.ToString (1801), TByteHelper.TryParse (1802), StrToInt (1750)
76.80.4 TByteHelper.Size
Synopsis: Size, in bytes, of the byte value
Declaration: class function Size : Integer; Static
Visibility: public
Description: Size returns the size (in bytes) of the byte value. This is equivalent to SizeOf(Byte).
Errors: None.
See also: SizeOf (1538)
76.80.5 TByteHelper.ToString
Synopsis: Convert the value to string
1801
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Description: ToString will, in the class function variant of this method, convert AValue to a string represen-
tation. In the regular method overloaded version of ToString, the byte value itself is used. The
IntToStr (1717) function is used to do the conversion.
See also: TByteHelper.Parse (1801), IntToStr (1717)
76.80.6 TByteHelper.TryParse
Synopsis: Try to convert a string to a byte, report success or failure
Declaration: class function TryParse(const AString: string; out AValue: Byte)
: Boolean; Static
Visibility: public
Description: TryParse attempts to convert the string AString to a byte, and reports the success of the attempt.
If the attempt is successful, then True is returned, and the actual value of the byte is returned in
AValue.
It uses the val (1598) function to perform the conversion, so no localization is taken into account.
76.80.7 TByteHelper.ToBoolean
Synopsis: Convert to a boolean value
Declaration: function ToBoolean : Boolean
Visibility: public
Description: ToBoolean converts the byte value to a boolean: it returns True if the value is nonzero, False
if it is zero.
See also: TByteHelper.ToSingle (1803), TByteHelper.ToDouble (1802), TByteHelper.ToExtended (1802), TByte-
Helper.ToString (1801), TByteHelper.ToHexString (1803)
76.80.8 TByteHelper.ToDouble
Synopsis: Convert to a double-sized floating point value
Declaration: function ToDouble : Double
Visibility: public
Description: ToDouble converts the byte value to a double-sized floating point value.
See also: TByteHelper.ToBoolean (1802), TByteHelper.ToExtended (1802), TByteHelper.ToSingle (1803),
TByteHelper.ToString (1801), TByteHelper.ToHexString (1803)
76.80.9 TByteHelper.ToExtended
Synopsis: Convert to an extended-sized floating point value
1802
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Description: ToDouble converts the byte value to an extended-sized floating point value
See also: TByteHelper.ToBoolean (1802), TByteHelper.ToSingle (1803), TByteHelper.ToDouble (1802), TByte-
Helper.ToString (1801), TByteHelper.ToHexString (1803)
76.80.10 TByteHelper.ToBinString
Declaration: function ToBinString : string
Visibility: public
76.80.11 TByteHelper.ToHexString
Synopsis: Convert to a hexadecimal string representation
Declaration: function ToHexString(const AMinDigits: Integer) : string; Overload
function ToHexString : string; Overload
Visibility: public
Description: ToHexString converts the byte value to a hexadecimal string representation. The AMinDigits
argument specifies the minimal number of characters in the resulting string. The string will be left-
padded with zeroes if the representation contains less than AMinDigits characters.
76.80.12 TByteHelper.ToSingle
Synopsis: Convert to an single-sized floating point value
76.80.13 TByteHelper.SetBit
Declaration: function SetBit(const Index: TByteBitIndex) : Byte
Visibility: public
76.80.14 TByteHelper.ClearBit
Declaration: function ClearBit(const Index: TByteBitIndex) : Byte
Visibility: public
1803
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.80.15 TByteHelper.ToggleBit
Declaration: function ToggleBit(const Index: TByteBitIndex) : Byte
Visibility: public
76.80.16 TByteHelper.TestBit
Declaration: function TestBit(const Index: TByteBitIndex) : Boolean
Visibility: public
76.81 TCardinalHelper
76.81.1 Description
TCardinalHelper contains some auxiliary routines for a Cardinal-typed ordinal value. It consists
mainly of conversion routines to and from other types.
See also: TStringHelper (1865), TShortIntHelper (1850), TSmallIntHelper (1862), TWordHelper (1896), TByte-
Helper (1800), TIntegerHelper (1831), TInt64Helper (1828), TQWordHelper (1847), TNativeIntHelper
(1840), TNativeUIntHelper (1844)
76.81.3 TCardinalHelper.Parse
Synopsis: Convert from a string
Declaration: class function Parse(const AString: string) : Cardinal; Static
Visibility: public
Description: Parse will attempt to convert the string AString to a Cardinal value. It uses the StrToInt (1750)
function to perform the conversion, so no localization is taken into account.
Errors: If the string does not contain a valid Cardinal value, an EConvertError (1780) exception is raised.
See also: TCardinalHelper.ToString (1805), TCardinalHelper.TryParse (1805), StrToInt (1750)
1804
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.81.4 TCardinalHelper.Size
Synopsis: Size, in bytes, of the Cardinal value
Declaration: class function Size : Integer; Static
Visibility: public
Description: Size returns the size (in Cardinals) of the Cardinal value. This is equivalent to SizeOf(Cardinal).
Errors: None.
See also: SizeOf (1538)
76.81.5 TCardinalHelper.ToString
Synopsis: Convert the value to string
Declaration: class function ToString(const AValue: Cardinal) : string; Overload
; Static
function ToString : string; Overload
Visibility: public
Description: ToString will, in the class function variant of this method, convert AValue to a string represen-
tation. In the regular method overloaded version of ToString, the Cardinal value itself is used.
The IntToStr (1717) function is used to do the conversion.
See also: TCardinalHelper.Parse (1804), IntToStr (1717)
76.81.6 TCardinalHelper.TryParse
Synopsis: Try to convert a string to a Cardinal, report success or failure
Declaration: class function TryParse(const AString: string; out AValue: Cardinal)
: Boolean; Static
Visibility: public
Description: TryParse attempts to convert the string AString to a Cardinal, and reports the success of the
attempt. If the attempt is successful, then True is returned, and the actual value of the Cardinal is
returned in AValue.
It uses the val (1598) function to perform the conversion, so no localization is taken into account.
See also: TCardinalHelper.Parse (1804), Val (1561)
76.81.7 TCardinalHelper.ToBoolean
Synopsis: Convert to a boolean value
Declaration: function ToBoolean : Boolean
Visibility: public
Description: ToBoolean converts the Cardinal value to a boolean: it returns True if the value is nonzero,
False if it is zero.
See also: TCardinalHelper.ToSingle (1806), TCardinalHelper.ToDouble (1806), TCardinalHelper.ToExtended
(1806), TCardinalHelper.ToString (1805), TCardinalHelper.ToHexString (1806)
1805
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.81.8 TCardinalHelper.ToDouble
Synopsis: Convert to a double-sized floating point value
Declaration: function ToDouble : Double
Visibility: public
Description: ToDouble converts the Cardinal value to a double-sized floating point value.
See also: TCardinalHelper.ToBoolean (1805), TCardinalHelper.ToExtended (1806), TCardinalHelper.ToSingle
(1806), TCardinalHelper.ToString (1805), TCardinalHelper.ToHexString (1806)
76.81.9 TCardinalHelper.ToExtended
Synopsis: Convert to an extended-sized floating point value
Declaration: function ToExtended : Extended
Visibility: public
Description: ToDouble converts the Cardinal value to an extended-sized floating point value.
See also: TCardinalHelper.ToBoolean (1805), TCardinalHelper.ToSingle (1806), TCardinalHelper.ToDouble
(1806), TCardinalHelper.ToString (1805), TCardinalHelper.ToHexString (1806)
76.81.10 TCardinalHelper.ToBinString
Declaration: function ToBinString : string
Visibility: public
76.81.11 TCardinalHelper.ToHexString
Synopsis: Convert to a hexadecimal string representation
Declaration: function ToHexString(const AMinDigits: Integer) : string; Overload
function ToHexString : string; Overload
Visibility: public
Description: ToHexString converts the Cardinal value to a hexadecimal string representation. The AMinDigits
argument specifies the minimal number of characters in the resulting string. The string will be left-
padded with zeroes if the representation contains less than AMinDigits characters.
See also: TCardinalHelper.ToBoolean (1805), TCardinalHelper.ToSingle (1806), TCardinalHelper.ToDouble
(1806), TCardinalHelper.ToString (1805), TCardinalHelper.ToExtended (1806)
76.81.12 TCardinalHelper.ToSingle
Synopsis: Convert to an single-sized floating point value
Declaration: function ToSingle : Single
Visibility: public
Description: ToSingle converts the Cardinal value to a single-sized floating point value.
See also: TCardinalHelper.ToBoolean (1805), TCardinalHelper.ToDouble (1806), TCardinalHelper.ToExtended
(1806), TCardinalHelper.ToString (1805), TCardinalHelper.ToHexString (1806)
1806
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.81.13 TCardinalHelper.SetBit
Declaration: function SetBit(const Index: TCardinalBitIndex) : Cardinal
Visibility: public
76.81.14 TCardinalHelper.ClearBit
Declaration: function ClearBit(const Index: TCardinalBitIndex) : Cardinal
Visibility: public
76.81.15 TCardinalHelper.ToggleBit
Declaration: function ToggleBit(const Index: TCardinalBitIndex) : Cardinal
Visibility: public
76.81.16 TCardinalHelper.TestBit
Declaration: function TestBit(const Index: TCardinalBitIndex) : Boolean
Visibility: public
76.82 TDoubleHelper
76.82.1 Description
TDoubleHelper is the helper type for the Double-sized floating point type. It contains some
conversion methods, as well as access to the low-level structure of the floating-point representation
of a Double.
1807
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.82.4 TDoubleHelper.IsInfinity
Synopsis: Check whether a value is positive or negative infinity.
Declaration: class function IsInfinity(const AValue: Double) : Boolean; Overload
; Static
function IsInfinity : Boolean; Overload
Visibility: public
Description: IsInfinity checks whether a Double-sized floating point value represents a positive or negative
infinity. If so, it returns True. When the class function version is used, the value can be specified
using AValue. In the method version, the used value is (Self).
See also: TDoubleHelper.IsNan (1808), TDoubleHelper.IsPositiveInfinity (1809), TDoubleHelper.IsNegativeInfinity
(1808)
76.82.5 TDoubleHelper.IsNan
Synopsis: Check whether a value equals NaN.
Declaration: class function IsNan(const AValue: Double) : Boolean; Overload; Static
function IsNan : Boolean; Overload
Visibility: public
Description: IsNan checks whether a Double-sized floating point value is NaN (Not a Number). If so, it returns
True. When the class function version is used, the value can be specified using AValue. In the
method version, the used value is (Self).
See also: TDoubleHelper.IsInfinity (1808), TDoubleHelper.IsPositiveInfinity (1809), TDoubleHelper.IsNegativeInfinity
(1808)
76.82.6 TDoubleHelper.IsNegativeInfinity
Synopsis: Check whether a value is negative infinity.
Declaration: class function IsNegativeInfinity(const AValue: Double) : Boolean
; Overload; Static
function IsNegativeInfinity : Boolean; Overload
Visibility: public
Description: IsNegativeInfinity checks whether a Double-sized floating point value represents a negative
infinity. If so, it returns True. When the class function version is used, the value can be specified
using AValue. In the method version, the used value is (Self).
See also: TDoubleHelper.IsNan (1808), TDoubleHelper.IsPositiveInfinity (1809), TDoubleHelper.IsInfinity
(1808)
1808
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.82.7 TDoubleHelper.IsPositiveInfinity
Synopsis: Check whether a value is positive infinity.
Declaration: class function IsPositiveInfinity(const AValue: Double) : Boolean
; Overload; Static
function IsPositiveInfinity : Boolean; Overload
Visibility: public
Description: IsPositiveInfinity checks whether a Double-sized floating point value represents a positive
infinity. If so, it returns True. When the class function version is used, the value can be specified
using AValue. In the method version, the used value is (Self).
See also: TDoubleHelper.IsNan (1808), TDoubleHelper.IsNegativeInfinity (1808), TDoubleHelper.IsInfinity
(1808)
76.82.8 TDoubleHelper.Parse
Synopsis: Convert a string to a floating point value
Declaration: class function Parse(const AString: string) : Double; Overload; Static
class function Parse(const AString: string;
const AFormatSettings: TFormatSettings) : Double
; Overload; Static
Visibility: public
Description: Parse will try to convert AString to a Double-sized floating point value. It will take into account
internationalization settings. (it uses FloatToStr).
Errors: If the string AString is not a valid floating-point value, a EConvertError (1780) exception is raised.
See also: FloatToStr (1690), TDoubleHelper.ToString (1809), TDoubleHelper.TryParse (1810)
76.82.9 TDoubleHelper.Size
Synopsis: Size (in bytes) of a Double-sized floating point value.
Declaration: class function Size : Integer; Static
Visibility: public
Description: Size is the size (in bytes) of a Double-sized floating point value. It is equivalent to calling
SizeOf(Double).
See also: SizeOf (1538)
76.82.10 TDoubleHelper.ToString
Synopsis: Convert a Double-sized floating point value to a string
Declaration: class function ToString(const AValue: Double) : string; Overload
; Static
class function ToString(const AValue: Double;
const AFormat: TFloatFormat;
const APrecision: Integer;
const ADigits: Integer) : string; Overload
1809
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
; Static
class function ToString(const AValue: Double;
const AFormat: TFloatFormat;
const APrecision: Integer;
const ADigits: Integer;
const AFormatSettings: TFormatSettings) : string
; Overload; Static
class function ToString(const AValue: Double;
const AFormatSettings: TFormatSettings) : string
; Overload; Static
function ToString(const AFormat: TFloatFormat;
const APrecision: Integer; const ADigits: Integer)
: string; Overload
function ToString(const AFormat: TFloatFormat;
const APrecision: Integer; const ADigits: Integer;
const AFormatSettings: TFormatSettings) : string
; Overload
function ToString(const AFormatSettings: TFormatSettings) : string
; Overload
function ToString : string; Overload
Visibility: public
Description: ToString will convert AValue (or Self in the plain method version) to a string. Optionally
FormatSettings can be specified, to be able to specify the decimal separator character to use.
Additionally, a precision APrecision and number of digits ADigits can be specified, in con-
junction with a AFormat parameter to specify the form in which the floating-point value must be
represented. (see TFloatFormat (1619) for an explanation of the various values). In this case, Float-
ToStrF (1691) is used to format the value. In the absence of these parameters, FloatToStr (1690) is
called.
See also: FloatToStr (1690), FloatToStrF (1691), TFloatFormat (1619)
76.82.11 TDoubleHelper.TryParse
Synopsis: Try to convert a string to a Double-sized floating point value.
Visibility: public
Description: TryParse attempts to convert the string AString to a Double-sized floating point value and
reports True if the conversion was successful. In that case the parsed value is returned in AValue.
If the conversion failed, False is returned.
See also: TDoubleHelper.Parse (1809), TDoubleHelper.ToString (1809)
76.82.12 TDoubleHelper.BuildUp
Synopsis: Build a Double-sized floating point from its composing parts
1810
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.82.13 TDoubleHelper.Exponent
Synopsis: Exponent of the floating-point value
76.82.14 TDoubleHelper.Fraction
Synopsis: Fraction of the floating-point value
Declaration: function Fraction : Extended
Visibility: public
Description: Fraction is the decimal part of the floating-point value.
See also: TDoubleHelper.Sign (1812), TDoubleHelper.Exp (1813), TDoubleHelper.Exponent (1811), TDou-
bleHelper.Frac (1813), TDoubleHelper.Mantissa (1811)
76.82.15 TDoubleHelper.Mantissa
Synopsis: Mantissa of the floating-point
Declaration: function Mantissa : QWord
Visibility: public
Description: Mantissa is the value of the significand without the hidden bit. This means it the plain bit pattern
as it is stored in memory.
See also: TDoubleHelper.Sign (1812), TDoubleHelper.Exp (1813), TDoubleHelper.Exponent (1811), TDou-
bleHelper.Frac (1813), TDoubleHelper.Fraction (1811)
1811
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.82.16 TDoubleHelper.SpecialType
Synopsis: Return the type of the Double-sized floating point value
76.82.17 TDoubleHelper.Bytes
Synopsis: Indexed access to the individual bytes of the floating point value
76.82.18 TDoubleHelper.Words
Synopsis: Indexed access to the words that make up the floating point value
Declaration: Property Words[AIndex: Cardinal]: Word
Visibility: public
Access: Read,Write
Description: Words can be used to get or set the various bytes that make up the Double-sized floating point value.
The index runs from 0 to (Size-1) div 2.
76.82.19 TDoubleHelper.Sign
Synopsis: Sign of the floating point value
Declaration: Property Sign : Boolean
Visibility: public
Access: Read,Write
Description: Sign returns True if the sign bit of the value is set (i.e. it is a negative value) or False if it is not
set (i.e. it is a positive value).
1812
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.82.20 TDoubleHelper.Exp
Synopsis: The bit pattern of the exponent as stored in memory.
76.82.21 TDoubleHelper.Frac
Synopsis: Bitpattern that makes up the fractional part.
Description: Frac is the bit pattern representing the fractional part (significand) including the preceding 1 (the
hidden bit).
See also: TDoubleHelper.Bytes (1812), TDoubleHelper.Sign (1812), TDoubleHelper.Exp (1813), TDouble-
Helper.Mantissa (1811), TDoubleHelper.Fraction (1811), TDoubleHelper.Exponent (1811)
76.83 TEncoding
76.83.1 Description
TEncoding is a mostly abstract class that contains various methods to deal with different encod-
ings in single- and double-byte strings. In practice, one instance of a descendent of this class for
each needed encoding can be instantiated and used. The class contains several class methods and
properties to create such instances, and has several often-used instances available as class properties,
in particular the default encoding.
When using encodings (and in particular TEncoding.Default (1818) or TEncoding.ANSI (1818)), if
the DefaultSystemCodePage (1410) changes, you should call TEncoding.FreeEncodings (1813) to
regenerate the encodings.
1813
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.83.4 TEncoding.Clone
Synopsis: Clone a TEncoding instance
Declaration: function Clone : TEncoding; Virtual
Visibility: public
Description: Clone creates a copy of a TEncoding instance. This method returns Nil in TEncoding and
must be implemented in descendent classes.
See also: TEncoding.Create (1813)
76.83.5 TEncoding.Convert
Synopsis: Convert an array of bytes from one encoding to another
Declaration: class function Convert(Source: TEncoding; Destination: TEncoding;
const Bytes: TBytes) : TBytes; Overload
class function Convert(Source: TEncoding; Destination: TEncoding;
const Bytes: TBytes; StartIndex: Integer;
Count: Integer) : TBytes; Overload
Visibility: public
1814
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Description: Convert will convert the bytes in Bytes from encoding Source to encoding Destination
and returns the converted bytes as an array. If StartIndex and Count are specified, the conver-
sion starts at (zero-based) index StartIndex, and only Count bytes will be converted.
See also: TEncoding.GetBytes (1813), TEncoding.GetChars (1813)
76.83.6 TEncoding.IsStandardEncoding
Synopsis: Check if the encoding is one of the standard encodings
Declaration: class function IsStandardEncoding(AEncoding: TEncoding) : Boolean
; Static
Visibility: public
Description: IsStandardEncoding will return True is one of the standard encoding instances TEncod-
ing.ANSI (1818), TEncoding.ASCII (1818), TEncoding.Default (1818), TEncoding.BigEndianUnicode
(1818), TEncoding.Unicode (1819), TEncoding.UTF7 (1819) or TEncoding.UTF8 (1819). Other-
wise it returns False.
See also: TEncoding.ANSI (1818), TEncoding.ASCII (1818), TEncoding.Default (1818), TEncoding.BigEndianUnicode
(1818), TEncoding.Unicode (1819), TEncoding.UTF7 (1819), TEncoding.UTF8 (1819)
76.83.7 TEncoding.GetBufferEncoding
Synopsis: Attempt to guess the encoding of a buffer
Declaration: class function GetBufferEncoding(const Buffer: TBytes;
var AEncoding: TEncoding) : Integer
; Overload; Static
class function GetBufferEncoding(const Buffer: TBytes;
var AEncoding: TEncoding;
ADefaultEncoding: TEncoding) : Integer
; Overload; Static
Visibility: public
Description: GetBufferEncoding checks the BOM marker of an array of bytes Buffer, and returns the
found encoding in AEncoding. Only the TEncoding.BigEndianUnicode (1818)TEncoding.Unicode
(1819) and TEncoding.UTF8 (1819) encodings will be tried.
If AEncoding is non-Nil on entry, it will be used to check the BOM marker with. No other encoding
will be tried in that case.
If ADefaultEncoding is specified, it will be returned in case no match was found.
The function returns the number of bytes in the BOM Marker.
See also: TEncoding.BigEndianUnicode (1818), TEncoding.Unicode (1819), TEncoding.UTF8 (1819), TEn-
coding.GetPreamble (1816)
76.83.8 TEncoding.GetEncoding
Synopsis: Get an encoding instance for a given codepage.
Declaration: class function GetEncoding(CodePage: Integer) : TEncoding; Overload
; Static
class function GetEncoding(const EncodingName: UnicodeString)
: TEncoding; Overload; Static
1815
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Visibility: public
Description: GetEncoding will return an instance of TEncoding for the given codepage CodePage. The
codepage can also be specified by name EncodingName. The returned instance is an appropriate
descendent of TEncoding and needs to be freed by the caller.
76.83.9 TEncoding.GetMaxByteCount
Synopsis: Returns the maximum number of bytes needed to represent a string
Declaration: function GetMaxByteCount(CharCount: Integer) : Integer; Virtual
; Abstract
Visibility: public
Description: GetMaxByteCount returns the maximum number of bytes needed to represent a string of CharCount
characters in the given encoding.
This is an abstract method, implemented by descendents of TEncoding.
76.83.10 TEncoding.GetMaxCharCount
Synopsis: Return the maximum number of characters that can be represented in a number of bytes
Declaration: function GetMaxCharCount(ByteCount: Integer) : Integer; Virtual
; Abstract
Visibility: public
Description: GetMaxCharCount returns the theoretical maximum number of characters that can be represented
in a buffer of length ByteCount in the given encoding. Note that the actual number of characters
that can be represented may well be much less and depends on the encoding and the actual characters.
This is an abstract method, implemented by descendents of TEncoding.
See also: TEncoding.GetMaxByteCount (1816)
76.83.11 TEncoding.GetPreamble
Synopsis: Return the BOM Marker used by the encoding
1816
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.83.12 TEncoding.GetString
Synopsis: Return a string based on an array of bytes
Declaration: function GetString(const Bytes: TBytes) : UnicodeString; Overload
function GetString(const Bytes: TBytes; ByteIndex: Integer;
ByteCount: Integer) : UnicodeString; Overload
Visibility: public
Description: GetString will return a Unicode string, created from the bytes in the Bytes array. The bytes
array will be interpreted according to the encoding which the TEncoding represents.
If ByteIndex and ByteCount are specified, only the ByteCount bytes starting at position
ByteIndex will be converted.
Errors: In case of invalid bytes, an EEncodingError exception may be raised.
76.83.13 TEncoding.CodePage
Synopsis: Codepage for this encoding
Declaration: Property CodePage : Cardinal
Visibility: public
Access: Read
Description: CodePage is the numerical codepage for this encoding. It is a number as used in the Windows
codepage registry.
See also: TEncoding.EncodingName (1817)
76.83.14 TEncoding.EncodingName
Synopsis: Name of this encoding
Declaration: Property EncodingName : UnicodeString
Visibility: public
Access: Read
Description: EncodingName is the name for this encoding. It’s based on the windows name for the encoding
and is calculated from the codepage.
See also: TEncoding.CodePage (1817)
76.83.15 TEncoding.IsSingleByte
Synopsis: Is the encoding a single-byte encoding or not ?
Declaration: Property IsSingleByte : Boolean
Visibility: public
Access: Read
Description: IsSingleByte determines whether an encoding is single-byte or not. It is false for all standard
encodings.
1817
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.83.16 TEncoding.ANSI
Synopsis: Ansi encoding instance
Description: ANSI is the ANSI codepage encoding instance, it is the default single-byte string codepage on
windows (as returned by DefaultSystemCodePage (1598)). This instance is created and maintained
by the system, it should not be freed.
See also: (??), TEncoding.ASCII (1818), TEncoding.Default (1818), TEncoding.BigEndianUnicode (1818),
TEncoding.Unicode (1819), TEncoding.UTF7 (1819), TEncoding.UTF8 (1819)
76.83.17 TEncoding.ASCII
Synopsis: ASCII encoding instance
Declaration: Property ASCII : TEncoding
Visibility: public
Access: Read
Description: ASCII is the ASCII codepage (CP_ASCII) encoding instance. This instance is created and main-
tained by the system, it should not be freed.
See also: TEncoding.ANSI (1818), TEncoding.ASCII (1818), TEncoding.Default (1818), TEncoding.BigEndianUnicode
(1818), TEncoding.Unicode (1819), TEncoding.UTF7 (1819), TEncoding.UTF8 (1819)
76.83.18 TEncoding.BigEndianUnicode
Synopsis: Big-endian Unicode (UTF16BE) encoding instance
Declaration: Property BigEndianUnicode : TEncoding
Visibility: public
Access: Read
Description: BigEndianUnicode is the Big-endian Unicode encoding instance (CP_UTF16BE) This instance
is created and maintained by the system, it should not be freed.
See also: (??), TEncoding.ANSI (1818), TEncoding.ASCII (1818), TEncoding.Default (1818), TEncoding.Unicode
(1819), TEncoding.UTF7 (1819), TEncoding.UTF8 (1819)
76.83.19 TEncoding.Default
Synopsis: Default codepage
Declaration: Property Default : TEncoding
Visibility: public
Access: Read
1818
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Description: Defaulte is the default encoding instance (it equals the ANSI codepage). This instance is created
and maintained by the system, it should not be freed.
if the DefaultSystemCodePage (1410) changes, you should call TEncoding.FreeEncodings (1813) to
regenerate the default encoding using the new code page.
See also: (??), TEncoding.ANSI (1818), TEncoding.ASCII (1818), TEncoding.BigEndianUnicode (1818),
TEncoding.Unicode (1819), TEncoding.UTF7 (1819), TEncoding.UTF8 (1819)
76.83.20 TEncoding.SystemEncoding
Declaration: Property SystemEncoding : TEncoding
Visibility: public
Access: Read
76.83.21 TEncoding.Unicode
Synopsis: UTF16 encoding instance
Declaration: Property Unicode : TEncoding
Visibility: public
Access: Read
Description: Unicode is the Big-endian Unicode encoding instance (CP_UTF16) This instance is created and
maintained by the system, it should not be freed.
See also: (??), TEncoding.ANSI (1818), TEncoding.ASCII (1818), TEncoding.Default (1818), TEncoding.BigEndianUnicode
(1818), TEncoding.Unicode (1819), TEncoding.UTF7 (1819), TEncoding.UTF8 (1819)
76.83.22 TEncoding.UTF7
Synopsis: UTF7 encoding instance
Declaration: Property UTF7 : TEncoding
Visibility: public
Access: Read
Description: UTF7 is the UTF7 encoding instance (CP_UTF7) This instance is created and maintained by the
system, it should not be freed.
See also: (??), TEncoding.ANSI (1818), TEncoding.ASCII (1818), TEncoding.Default (1818), TEncoding.BigEndianUnicode
(1818), TEncoding.Unicode (1819), TEncoding.UTF8 (1819)
76.83.23 TEncoding.UTF8
Synopsis: UTF8 encoding instance
Declaration: Property UTF8 : TEncoding
Visibility: public
Access: Read
1819
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Description: UTF8 is the UTF7 encoding instance (CP_UTF7) This instance is created and maintained by the
system, it should not be freed.
See also: (??), TEncoding.ANSI (1818), TEncoding.ASCII (1818), TEncoding.Default (1818), TEncoding.BigEndianUnicode
(1818), TEncoding.Unicode (1819), TEncoding.UTF7 (1819)
76.84 TExtendedHelper
76.84.1 Description
TExtendedHelper is the helper type for the Extended-sized floating point type. It contains some
conversion methods, as well as access to the low-level structure of the floating-point representation
of a Extended.
76.84.4 TExtendedHelper.ToString
Synopsis: Convert a Extended-sized floating point value to a string
Declaration: class function ToString(const AValue: Extended) : string; Overload
; Static
class function ToString(const AValue: Extended;
const AFormatSettings: TFormatSettings) : string
; Overload; Static
class function ToString(const AValue: Extended;
1820
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Description: ToString will convert AValue (or Self in the plain method version) to a string. Optionally
FormatSettings can be specified, to be able to specify the decimal separator character to use.
Additionally, a precision APrecision and number of digits ADigits can be specified, in con-
junction with a AFormat parameter to specify the form in which the floating-point value must be
represented. (see TFloatFormat (1619) for an explanation of the various values). In this case, Float-
ToStrF (1691) is used to format the value. In the absence of these parameters, FloatToStr (1690) is
called.
See also: FloatToStr (1690), FloatToStrF (1691), TFloatFormat (1619)
76.84.5 TExtendedHelper.Parse
Synopsis: Convert a string to a floating point value
Visibility: public
Description: Parse will try to convert AString to a Extended-sized floating point value. It will take into
account internationalization settings. (it uses FloatToStr).
Errors: If the string AString is not a valid floating-point value, a EConvertError (1780) exception is raised.
76.84.6 TExtendedHelper.TryParse
Synopsis: Try to convert a string to a Extended-sized floating point value.
1821
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Visibility: public
Description: TryParse attempts to convert the string AString to a Extended-sized floating point value and
reports True if the conversion was successful. In that case the parsed value is returned in AValue.
If the conversion failed, False is returned.
76.84.7 TExtendedHelper.IsNan
Synopsis: Check whether a value equals NaN.
Declaration: class function IsNan(const AValue: Extended) : Boolean; Overload
; Static
function IsNan : Boolean; Overload
Visibility: public
Description: IsNan checks whether a Extended-sized floating point value is NaN (Not a Number). If so, it
returns True. When the class function version is used, the value can be specified using AValue. In
the method version, the used value is (Self).
76.84.8 TExtendedHelper.IsInfinity
Synopsis: Check whether a value is positive or negative infinity.
76.84.9 TExtendedHelper.IsNegativeInfinity
Synopsis: Check whether a value is negative infinity.
Declaration: class function IsNegativeInfinity(const AValue: Extended) : Boolean
; Overload; Static
function IsNegativeInfinity : Boolean; Overload
1822
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Visibility: public
Description: IsNegativeInfinity checks whether a Extended-sized floating point value represents a nega-
tive infinity. If so, it returns True. When the class function version is used, the value can be specified
using AValue. In the method version, the used value is (Self).
76.84.10 TExtendedHelper.IsPositiveInfinity
Synopsis: Check whether a value is positive infinity.
Declaration: class function IsPositiveInfinity(const AValue: Extended) : Boolean
; Overload; Static
function IsPositiveInfinity : Boolean; Overload
Visibility: public
Description: IsPositiveInfinity checks whether a Extended-sized floating point value represents a posi-
tive infinity. If so, it returns True. When the class function version is used, the value can be specified
using AValue. In the method version, the used value is (Self).
See also: TExtendedHelper.IsNan (1822), TExtendedHelper.IsNegativeInfinity (1822), TExtendedHelper.IsInfinity
(1822)
76.84.11 TExtendedHelper.Size
Synopsis: Size (in bytes) of a Extended-sized floating point value.
76.84.12 TExtendedHelper.BuildUp
Synopsis: Build a Extended-sized floating point from its composing parts
Declaration: procedure BuildUp(const ASignFlag: Boolean; const AMantissa: QWord;
const AExponent: Integer)
Visibility: public
Description: BuildUp will compose a Extended-sized floating point value from the sign ASignFlag, mantissa
AMantissa and exponent AExponent. It simply sets the Sign (1825), Exp (1825) and Frac (1826)
properties in 1 call.
1823
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.84.13 TExtendedHelper.Exponent
Synopsis: Exponent of the floating-point value
76.84.14 TExtendedHelper.Fraction
Synopsis: Fraction of the floating-point value
Declaration: function Fraction : Extended
Visibility: public
Description: Fraction is the decimal part of the floating-point value.
See also: TExtendedHelper.Sign (1825), TExtendedHelper.Exp (1825), TExtendedHelper.Exponent (1824),
TExtendedHelper.Frac (1826), TExtendedHelper.Mantissa (1824)
76.84.15 TExtendedHelper.Mantissa
Synopsis: Mantissa of the floating-point
Declaration: function Mantissa : QWord
Visibility: public
Description: Mantissa is the value of the significand without the hidden bit. This means it the plain bit pattern
as it is stored in memory.
See also: TExtendedHelper.Sign (1825), TExtendedHelper.Exp (1825), TExtendedHelper.Exponent (1824),
TExtendedHelper.Frac (1826), TExtendedHelper.Fraction (1824)
76.84.16 TExtendedHelper.SpecialType
Synopsis: Return the type of the Extended-sized floating point value
Declaration: function SpecialType : TFloatSpecial
Visibility: public
Description: SpecialType checks whether the Extended-sized floating point value equals one of several spe-
cial values, and returns an enumerated value describing which value this is. See TFloatSpecial (1598)
for an explanation of the possible values.
See also: TFloatSpecial (1598)
1824
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.84.17 TExtendedHelper.Bytes
Synopsis: Indexed access to the individual bytes of the floating point value
Declaration: Property Bytes[AIndex: Cardinal]: Byte
Visibility: public
Access: Read,Write
Description: Bytes can be used to get or set the various bytes that make up the Extended-sized floating point
value. The index runs from 0 to Size-1.
See also: TExtendedHelper.Words (1825), TExtendedHelper.Size (1823)
76.84.18 TExtendedHelper.Words
Synopsis: Indexed access to the words that make up the floating point value
Declaration: Property Words[AIndex: Cardinal]: Word
Visibility: public
Access: Read,Write
Description: Words can be used to get or set the various bytes that make up the Extended-sized floating point
value. The index runs from 0 to (Size-1) div 2.
See also: TExtendedHelper.Bytes (1825), TExtendedHelper.Size (1823)
76.84.19 TExtendedHelper.Sign
Synopsis: Sign of the floating point value
Declaration: Property Sign : Boolean
Visibility: public
Access: Read,Write
Description: Sign returns True if the sign bit of the value is set (i.e. it is a negative value) or False if it is not
set (i.e. it is a positive value).
See also: TExtendedHelper.Bytes (1825), TExtendedHelper.Exp (1825), TExtendedHelper.Frac (1826), TEx-
tendedHelper.Mantissa (1824), TExtendedHelper.Fraction (1824), TExtendedHelper.Exponent (1824)
76.84.20 TExtendedHelper.Exp
Synopsis: The bit pattern of the exponent as stored in memory.
Declaration: Property Exp : QWord
Visibility: public
Access: Read,Write
Description: Exp is the internal representation of the Exponent (1824).
See also: TExtendedHelper.Bytes (1825), TExtendedHelper.Sign (1825), TExtendedHelper.Frac (1826), TEx-
tendedHelper.Mantissa (1824), TExtendedHelper.Fraction (1824), TExtendedHelper.Exponent (1824)
1825
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.84.21 TExtendedHelper.Frac
Synopsis: Bitpattern that makes up the fractional part.
Declaration: Property Frac : QWord
Visibility: public
Access: Read,Write
Description: Frac is the bit pattern representing the fractional part (significand) including the preceding 1 (the
hidden bit).
See also: TExtendedHelper.Bytes (1825), TExtendedHelper.Sign (1825), TExtendedHelper.Exp (1825), TEx-
tendedHelper.Mantissa (1824), TExtendedHelper.Fraction (1824), TExtendedHelper.Exponent (1824)
76.85 TGuidHelper
76.85.1 Description
TGuidHelper provides various methods for a TGUID (1598) type.
76.85.3 TGuidHelper.Create
Synopsis: Initialize a TGUID instance from data.
Declaration: class function Create(const Data; BigEndian: Boolean) : TGUID; Overload
; Static
class function Create(const Data: Array of Byte; AStartIndex: Cardinal;
BigEndian: Boolean) : TGUID; Overload; Static
class function Create(const Data; DataEndian: TEndian) : TGUID
; Overload; Static
class function Create(const B: TBytes; DataEndian: TEndian) : TGUID
; Overload; Static
class function Create(const B: TBytes; AStartIndex: Cardinal;
DataEndian: TEndian) : TGUID; Overload; Static
class function Create(const S: string) : TGUID; Overload; Static
class function Create(A: Integer; B: SmallInt; C: SmallInt;
const D: TBytes) : TGUID; Overload; Static
class function Create(A: Integer; B: SmallInt; C: SmallInt; D: Byte;
E: Byte; F: Byte; G: Byte; H: Byte; I: Byte;
J: Byte; K: Byte) : TGUID; Overload; Static
class function Create(A: Cardinal; B: Word; C: Word; D: Byte; E: Byte;
F: Byte; G: Byte; H: Byte; I: Byte; J: Byte;
K: Byte) : TGUID; Overload; Static
1826
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Visibility: default
Description: Create will initialize a TGUID (1598) from byte data. The byte-data can come in different forms
Datacan be a plain buffer. The GUID Data will be read from the buffer (SizeOf(TGUID) bytes),
according to the BigEndian argument.
Datacan be an array of bytes. SizeOf(TGUID) bytes will be read from the array, starting at
index StartIndex (default 0). The GUID Data will be read according to the BigEndian
argument.
Scan be a string containing a string representation of the GUID, which is converted using String-
ToGUID (1736).
A,B,C,D (optionally E,F,G,H,I,J,K)where the arguments are simply the various components of the
GUID.
76.85.4 TGuidHelper.NewGuid
Synopsis: Create a new GUID
76.85.5 TGuidHelper.ToByteArray
Synopsis: Convert to array of bytes
Declaration: function ToByteArray(DataEndian: TEndian) : TBytes
Visibility: default
Description: ToByteArray converts the TGUID to an array of bytes (of length SizeOf(TGUID)). The bytes
will be ordered according to DataEndian.
See also: TGUIDHelper.ToString (1827), TGUIDHelper.Create (1826)
76.85.6 TGuidHelper.ToString
Synopsis: Convert to string
Declaration: function ToString(SkipBrackets: Boolean) : string
Visibility: default
Description: ToString will convert the TGUID to a string representation, using GUIDToString (1713)
1827
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.86 TInt64Helper
76.86.1 Description
TInt64Helper contains some auxiliary routines for a Int64-typed ordinal value. It consists mainly
of conversion routines to and from other types.
See also: TStringHelper (1865), TShortIntHelper (1850), TSmallIntHelper (1862), TWordHelper (1896), TCar-
dinalHelper (1804), TIntegerHelper (1831), TByteHelper (1800), TQWordHelper (1847), TNativeIntHelper
(1840), TNativeUIntHelper (1844)
76.86.3 TInt64Helper.Parse
Synopsis: Convert from a string
Declaration: class function Parse(const AString: string) : Int64; Static
Visibility: public
Description: Parse will attempt to convert the string AString to a Int64 value. It uses the StrToInt64 (1751)
function to perform the conversion, so no localization is taken into account.
Errors: If the string does not contain a valid Int64 value, an EConvertError (1780) exception is raised.
See also: TInt64Helper.ToString (1829), TInt64Helper.TryParse (1829), StrToInt64 (1751)
76.86.4 TInt64Helper.Size
Synopsis: Size, in bytes, of the Int64 value
Declaration: class function Size : Integer; Static
Visibility: public
Description: Size returns the size (in Int64s) of the Int64 value. This is equivalent to SizeOf(Int64).
Errors: None.
See also: SizeOf (1538)
1828
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.86.5 TInt64Helper.ToString
Synopsis: Convert the value to string
Declaration: class function ToString(const AValue: Int64) : string; Overload
; Static
function ToString : string; Overload
Visibility: public
Description: ToString will, in the class function variant of this method, convert AValue to a string represen-
tation. In the regular method overloaded version of ToString, the Int64 value itself is used. The
IntToStr (1717) function is used to do the conversion.
See also: TInt64Helper.Parse (1828), IntToStr (1717)
76.86.6 TInt64Helper.TryParse
Synopsis: Try to convert a string to a Int64, report success or failure
Declaration: class function TryParse(const AString: string; out AValue: Int64)
: Boolean; Static
Visibility: public
Description: TryParse attempts to convert the string AString to a Int64, and reports the success of the at-
tempt. If the attempt is successful, then True is returned, and the actual value of the Int64 is returned
in AValue.
It uses the val (1598) function to perform the conversion, so no localization is taken into account.
See also: TInt64Helper.Parse (1828), Val (1561)
76.86.7 TInt64Helper.ToBoolean
Synopsis: Convert to a boolean value
Declaration: function ToBoolean : Boolean
Visibility: public
Description: ToBoolean converts the Int64 value to a boolean: it returns True if the value is nonzero, False
if it is zero.
See also: TInt64Helper.ToSingle (1830), TInt64Helper.ToDouble (1829), TInt64Helper.ToExtended (1830),
TInt64Helper.ToString (1829), TInt64Helper.ToHexString (1830)
76.86.8 TInt64Helper.ToDouble
Synopsis: Convert to a double-sized floating point value
Declaration: function ToDouble : Double
Visibility: public
Description: ToDouble converts the Int64 value to a double-sized floating point value.
See also: TInt64Helper.ToBoolean (1829), TInt64Helper.ToExtended (1830), TInt64Helper.ToSingle (1830),
TInt64Helper.ToString (1829), TInt64Helper.ToHexString (1830)
1829
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.86.9 TInt64Helper.ToExtended
Synopsis: Convert to an extended-sized floating point value
76.86.10 TInt64Helper.ToBinString
Declaration: function ToBinString : string
Visibility: public
76.86.11 TInt64Helper.ToHexString
Synopsis: Convert to a hexadecimal string representation
Declaration: function ToHexString(const AMinDigits: Integer) : string; Overload
function ToHexString : string; Overload
Visibility: public
Description: ToHexString converts the Int64 value to a hexadecimal string representation. The AMinDigits
argument specifies the minimal number of characters in the resulting string. The string will be left-
padded with zeroes if the representation contains less than AMinDigits characters.
See also: TInt64Helper.ToBoolean (1829), TInt64Helper.ToSingle (1830), TInt64Helper.ToDouble (1829),
TInt64Helper.ToString (1829), TInt64Helper.ToExtended (1830)
76.86.12 TInt64Helper.ToSingle
Synopsis: Convert to an single-sized floating point value
Declaration: function ToSingle : Single
Visibility: public
Description: ToSingle converts the Int64 value to a single-sized floating point value.
See also: TInt64Helper.ToBoolean (1829), TInt64Helper.ToDouble (1829), TInt64Helper.ToExtended (1830),
TInt64Helper.ToString (1829), TInt64Helper.ToHexString (1830)
76.86.13 TInt64Helper.SetBit
Declaration: function SetBit(const Index: TInt64BitIndex) : Int64
Visibility: public
1830
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.86.14 TInt64Helper.ClearBit
Declaration: function ClearBit(const Index: TInt64BitIndex) : Int64
Visibility: public
76.86.15 TInt64Helper.ToggleBit
Declaration: function ToggleBit(const Index: TInt64BitIndex) : Int64
Visibility: public
76.86.16 TInt64Helper.TestBit
Declaration: function TestBit(const Index: TInt64BitIndex) : Boolean
Visibility: public
76.87 TIntegerHelper
76.87.1 Description
TIntegerHelper contains some auxiliary routines for a Integer-typed ordinal value. It consists
mainly of conversion routines to and from other types.
See also: TStringHelper (1865), TShortIntHelper (1850), TSmallIntHelper (1862), TWordHelper (1896), TCar-
dinalHelper (1804), TByteHelper (1800), TInt64Helper (1828), TQWordHelper (1847), TNativeIntHelper
(1840), TNativeUIntHelper (1844)
76.87.3 TIntegerHelper.Size
Synopsis: Size, in bytes, of the Integer value
Declaration: class function Size : Integer; Static
1831
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Visibility: public
Description: Size returns the size (in Integers) of the Integer value. This is equivalent to SizeOf(Integer).
Errors: None.
See also: SizeOf (1538)
76.87.4 TIntegerHelper.ToString
Synopsis: Convert the value to string
Declaration: class function ToString(const AValue: Integer) : string; Overload
; Static
function ToString : string; Overload
Visibility: public
Description: ToString will, in the class function variant of this method, convert AValue to a string represen-
tation. In the regular method overloaded version of ToString, the Integer value itself is used. The
IntToStr (1717) function is used to do the conversion.
76.87.5 TIntegerHelper.Parse
Synopsis: Convert from a string
Declaration: class function Parse(const AString: string) : Integer; Static
Visibility: public
Description: Parse will attempt to convert the string AString to a Integer value. It uses the StrToInt (1750)
function to perform the conversion, so no localization is taken into account.
Errors: If the string does not contain a valid Integer value, an EConvertError (1780) exception is raised.
76.87.6 TIntegerHelper.TryParse
Synopsis: Try to convert a string to a Integer, report success or failure
Declaration: class function TryParse(const AString: string; out AValue: Integer)
: Boolean; Static
Visibility: public
Description: TryParse attempts to convert the string AString to a Integer, and reports the success of the
attempt. If the attempt is successful, then True is returned, and the actual value of the Integer is
returned in AValue.
It uses the val (1598) function to perform the conversion, so no localization is taken into account.
See also: TIntegerHelper.Parse (1832), Val (1561)
1832
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.87.7 TIntegerHelper.ToBoolean
Synopsis: Convert to a boolean value
Declaration: function ToBoolean : Boolean
Visibility: public
Description: ToBoolean converts the Integer value to a boolean: it returns True if the value is nonzero, False
if it is zero.
See also: TIntegerHelper.ToSingle (1834), TIntegerHelper.ToDouble (1833), TIntegerHelper.ToExtended (1833),
TIntegerHelper.ToString (1832), TIntegerHelper.ToHexString (1833)
76.87.8 TIntegerHelper.ToDouble
Synopsis: Convert to a double-sized floating point value
Declaration: function ToDouble : Double
Visibility: public
Description: ToDouble converts the Integer value to a double-sized floating point value.
See also: TIntegerHelper.ToBoolean (1833), TIntegerHelper.ToExtended (1833), TIntegerHelper.ToSingle (1834),
TIntegerHelper.ToString (1832), TIntegerHelper.ToHexString (1833)
76.87.9 TIntegerHelper.ToExtended
Synopsis: Convert to an extended-sized floating point value
Declaration: function ToExtended : Extended
Visibility: public
Description: ToDouble converts the Integer value to an extended-sized floating point value.
See also: TIntegerHelper.ToBoolean (1833), TIntegerHelper.ToSingle (1834), TIntegerHelper.ToDouble (1833),
TIntegerHelper.ToString (1832), TIntegerHelper.ToHexString (1833)
76.87.10 TIntegerHelper.ToBinString
Declaration: function ToBinString : string
Visibility: public
76.87.11 TIntegerHelper.ToHexString
Synopsis: Convert to a hexadecimal string representation
Declaration: function ToHexString(const AMinDigits: Integer) : string; Overload
function ToHexString : string; Overload
Visibility: public
Description: ToHexString converts the Integer value to a hexadecimal string representation. The AMinDigits
argument specifies the minimal number of characters in the resulting string. The string will be left-
padded with zeroes if the representation contains less than AMinDigits characters.
See also: TIntegerHelper.ToBoolean (1833), TIntegerHelper.ToSingle (1834), TIntegerHelper.ToDouble (1833),
TIntegerHelper.ToString (1832), TIntegerHelper.ToExtended (1833)
1833
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.87.12 TIntegerHelper.ToSingle
Synopsis: Convert to an single-sized floating point value
76.87.13 TIntegerHelper.SetBit
Declaration: function SetBit(const Index: TIntegerBitIndex) : Integer
Visibility: public
76.87.14 TIntegerHelper.ClearBit
Declaration: function ClearBit(const Index: TIntegerBitIndex) : Integer
Visibility: public
76.87.15 TIntegerHelper.ToggleBit
Declaration: function ToggleBit(const Index: TIntegerBitIndex) : Integer
Visibility: public
76.87.16 TIntegerHelper.TestBit
Declaration: function TestBit(const Index: TIntegerBitIndex) : Boolean
Visibility: public
76.88 TLongBoolHelper
76.88.1 Description
TLongBoolHelper is a helper type for the LongBool type. It contains mostly conversion rou-
tines to and from other types.
See also: TStringHelper (1865), TShortIntHelper (1850), TSmallIntHelper (1862), TWordHelper (1896), TCar-
dinalHelper (1804), TIntegerHelper (1831), TInt64Helper (1828), TQWordHelper (1847), TNa-
tiveIntHelper (1840), TByteHelper (1800), TByteBoolHelper (1799), TWordBoolHelper (1895), TLong-
BoolHelper (1834)
1834
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.88.3 TLongBoolHelper.Parse
Synopsis: Convert string value to LongBool value.
Declaration: class function Parse(const S: string) : Boolean; Static
Visibility: public
Description: Parse attempts to convert the string S to a LongBool value. It uses the StrToBool (1745) function
to perform the conversion.
Errors: If S does not contain a valid string representation, then an EConvertError (1780) exception is raised.
76.88.4 TLongBoolHelper.Size
Synopsis: Return the size (in bytes) of the
Declaration: class function Size : Integer; Static
Visibility: public
Description: Size returns the size (in bytes) of the LongBool value. This is equivalent to SizeOf(LongBool).
See also: SizeOf (1538)
76.88.5 TLongBoolHelper.ToString
Synopsis: Convert a LongBool value to string.
Declaration: class function ToString(const AValue: Boolean;
UseBoolStrs: TUseBoolStrs) : string; Overload
; Static
function ToString(UseBoolStrs: TUseBoolStrs) : string; Overload
Visibility: public
Description: ToString will, in the class method version, convert the AValue LongBool to a string represen-
tation. In the function method version the LongBool value itself (Self) will be converted.
If the UseBoolStrs parameter equals TUseBoolStrs.True, then the string representation will
use the LongBool strings BoolStrs (1598). The default value for UseBoolStrs is TUseBoolStrs.False.
The conversion is done using the BoolTostr (1647) function.
See also: BoolStrs (1598), BoolToStr (1647)
1835
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.88.6 TLongBoolHelper.TryToParse
Synopsis: Try to convert a string to a LongBool value
Declaration: class function TryToParse(const S: string; out AValue: Boolean)
: Boolean; Static
Visibility: public
Description: TryToParse will attempt to convert the string S to a LongBool value. If the attempt is successful,
True is returned, and the actual value is returned in AValue. If the attempt failed, False is
returned.
See also: TLongBoolHelper.Parse (1835), TLongBoolHelper.ToString (1835)
76.88.7 TLongBoolHelper.ToInteger
Synopsis: Convert to an integer value
Declaration: function ToInteger : Integer
Visibility: public
Description: ToInteger will return the LongBool value, typecasted to Integer.
See also: TLongBoolHelper.ToString (1835)
76.89 TMBCSEncoding
76.89.1 Description
TMBCSEncoding is the encoding class used for most of the encodings, except the actual Unicode
encodings. The codepage is specified during creation, and is by default the system codepage.
The name is somewhat misleading, since the MBCS is also used for single-byte encodings.
76.89.3 TMBCSEncoding.Create
Synopsis: Create a new instance of a multi-byte character set encoding
Declaration: constructor Create; Virtual; Overload
constructor Create(ACodePage: Integer); Virtual; Overload
constructor Create(ACodePage: Integer; MBToWCharFlags: Integer;
WCharToMBFlags: Integer); Virtual; Overload
1836
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Visibility: public
Description: Create instantiates a new instance of the multi-byte character set encoding. The ACodePage
parameter is optional, and defaults to DefaultSystemCodePage (1598).
The MBToWCharFlags and WCharToMBFlags parameters are stored but are otherwise unused
in the Free Pascal implementation of TMBCSEncoding
76.89.4 TMBCSEncoding.Clone
Synopsis: Clone a TMBCSEncoding instance
Declaration: function Clone : TEncoding; Override
Visibility: public
Description: Clone overrides TEncoding.Clone (1814) to provide a clone of the TMBCSEncoding instance.
See also: TEncoding.Clone (1814)
76.89.5 TMBCSEncoding.GetMaxByteCount
Synopsis: Return max number of bytes needed to represent a string
76.89.6 TMBCSEncoding.GetMaxCharCount
Synopsis: Return max number of characters that can be represented by an array of bytes
Declaration: function GetMaxCharCount(ByteCount: Integer) : Integer; Override
Visibility: public
Description: GetMaxCharCount overrides TEncoding.GetMaxCharCount (1816) to return the maximum num-
ber of bytes needed to represent a string.
See also: TEncoding.GetMaxCharCount (1816)
76.89.7 TMBCSEncoding.GetPreamble
Synopsis: Return BOM marker bytes
Declaration: function GetPreamble : TBytes; Override
Visibility: public
Description: GetPreamble overrides TEncoding.GetPreamble (1816) to return the BOM Marker bytes (none,
for this implementation).
See also: TEncoding.GetPreamble (1816)
1837
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.90 TMREWException
76.91 TMultiReadExclusiveWriteSynchronizer
76.91.1 Description
TMultiReadExclusiveWriteSynchronizer is a default implementation of the IReadWriteSync
(1791) interface. It uses a single mutex to protect access to the read/write resource, resulting in a sin-
gle thread having access to the resource.
76.91.5 TMultiReadExclusiveWriteSynchronizer.Create
Synopsis: Create a new instance of the TMultiReadExclusiveWriteSynchronizer class
Errors: None.
See also: TRTLCriticalSection (1391)
1838
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.91.6 TMultiReadExclusiveWriteSynchronizer.Destroy
Synopsis: Destroys the TMultiReadExclusiveWriteSynchronizer instance
Errors: None.
See also: TRTLCriticalSection (1391)
76.91.7 TMultiReadExclusiveWriteSynchronizer.Beginwrite
Synopsis: Request write access to the resource.
Errors: None.
See also: IReadWriteSync.BeginWrite (1792), EndWrite (1839)
76.91.8 TMultiReadExclusiveWriteSynchronizer.Endwrite
Synopsis: Release write access to the resource
Errors: None.
See also: IReadWriteSync.EndWrite (1792), BeginWrite (1839)
76.91.9 TMultiReadExclusiveWriteSynchronizer.Beginread
Synopsis: Request read access to the resource
Errors: None.
See also: IReadWriteSync.BeginRead (1791), EndRead (1840)
1839
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.91.10 TMultiReadExclusiveWriteSynchronizer.Endread
Synopsis: Release read access to the resource
Errors: None.
See also: IReadWriteSync.EndRead (1791), BeginRead (1839)
76.91.11 TMultiReadExclusiveWriteSynchronizer.RevisionLevel
Declaration: Property RevisionLevel : Cardinal
Visibility: public
Access: Read
76.91.12 TMultiReadExclusiveWriteSynchronizer.WriterThreadID
Declaration: Property WriterThreadID : TThreadID
Visibility: public
Access: Read
76.92 TNativeIntHelper
76.92.1 Description
TNativeIntHelper contains some auxiliary routines for a NativeInt-typed ordinal value. It con-
sists mainly of conversion routines to and from other types.
See also: TStringHelper (1865), TShortIntHelper (1850), TSmallIntHelper (1862), TWordHelper (1896), TCar-
dinalHelper (1804), TIntegerHelper (1831), TInt64Helper (1828), TQWordHelper (1847), TNa-
tiveIntHelper (1840), TByteHelper (1800)
1840
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.92.3 TNativeIntHelper.Parse
Synopsis: Convert from a string
Declaration: class function Parse(const AString: string) : NativeInt; Static
Visibility: public
Description: Parse will attempt to convert the string AString to a NativeInt value. It uses the StrToInt (1750)
function to perform the conversion, so no localization is taken into account.
Errors: If the string does not contain a valid NativeInt value, an EConvertError (1780) exception is raised.
See also: TNativeIntHelper.ToString (1841), TNativeIntHelper.TryParse (1842), StrToInt (1750)
76.92.4 TNativeIntHelper.Size
Synopsis: Size, in bytes, of the NativeInt value
Declaration: class function Size : Integer; Static
Visibility: public
Description: Size returns the size (in NativeInts) of the NativeInt value. This is equivalent to SizeOf(NativeInt).
Errors: None.
See also: SizeOf (1538)
76.92.5 TNativeIntHelper.ToString
Synopsis: Convert the value to string
1841
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Description: ToString will, in the class function variant of this method, convert AValue to a string represen-
tation. In the regular method overloaded version of ToString, the NativeInt value itself is used.
The IntToStr (1717) function is used to do the conversion.
See also: TNativeIntHelper.Parse (1841), IntToStr (1717)
76.92.6 TNativeIntHelper.TryParse
Synopsis: Try to convert a string to a NativeInt, report success or failure
Declaration: class function TryParse(const AString: string; out AValue: NativeInt)
: Boolean; Static
Visibility: public
Description: TryParse attempts to convert the string AString to a NativeInt, and reports the success of the
attempt. If the attempt is successful, then True is returned, and the actual value of the NativeInt is
returned in AValue.
It uses the val (1598) function to perform the conversion, so no localization is taken into account.
76.92.7 TNativeIntHelper.ToBoolean
Synopsis: Convert to a boolean value
Declaration: function ToBoolean : Boolean
Visibility: public
Description: ToBoolean converts the NativeInt value to a boolean: it returns True if the value is nonzero,
False if it is zero.
See also: TNativeIntHelper.ToSingle (1843), TNativeIntHelper.ToDouble (1842), TNativeIntHelper.ToExtended
(1842), TNativeIntHelper.ToString (1841), TNativeIntHelper.ToHexString (1843)
76.92.8 TNativeIntHelper.ToDouble
Synopsis: Convert to a double-sized floating point value
Declaration: function ToDouble : Double
Visibility: public
Description: ToDouble converts the NativeInt value to a double-sized floating point value.
See also: TNativeIntHelper.ToBoolean (1842), TNativeIntHelper.ToExtended (1842), TNativeIntHelper.ToSingle
(1843), TNativeIntHelper.ToString (1841), TNativeIntHelper.ToHexString (1843)
76.92.9 TNativeIntHelper.ToExtended
Synopsis: Convert to an extended-sized floating point value
1842
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Description: ToDouble converts the NativeInt value to an extended-sized floating point value.
See also: TNativeIntHelper.ToBoolean (1842), TNativeIntHelper.ToSingle (1843), TNativeIntHelper.ToDouble
(1842), TNativeIntHelper.ToString (1841), TNativeIntHelper.ToHexString (1843)
76.92.10 TNativeIntHelper.ToBinString
Declaration: function ToBinString : string
Visibility: public
76.92.11 TNativeIntHelper.ToHexString
Synopsis: Convert to a hexadecimal string representation
Declaration: function ToHexString(const AMinDigits: Integer) : string; Overload
function ToHexString : string; Overload
Visibility: public
Description: ToHexString converts the NativeInt value to a hexadecimal string representation. The AMinDigits
argument specifies the minimal number of characters in the resulting string. The string will be left-
padded with zeroes if the representation contains less than AMinDigits characters.
76.92.12 TNativeIntHelper.ToSingle
Synopsis: Convert to an single-sized floating point value
76.92.13 TNativeIntHelper.SetBit
Declaration: function SetBit(const Index: TNativeIntBitIndex) : NativeInt
Visibility: public
76.92.14 TNativeIntHelper.ClearBit
Declaration: function ClearBit(const Index: TNativeIntBitIndex) : NativeInt
Visibility: public
1843
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.92.15 TNativeIntHelper.ToggleBit
Declaration: function ToggleBit(const Index: TNativeIntBitIndex) : NativeInt
Visibility: public
76.92.16 TNativeIntHelper.TestBit
Declaration: function TestBit(const Index: TNativeIntBitIndex) : Boolean
Visibility: public
76.93 TNativeUIntHelper
76.93.1 Description
NativeUInt contains some auxiliary routines for a NativeUInt-typed ordinal value. It consists
mainly of conversion routines to and from other types.
See also: TStringHelper (1865), TShortIntHelper (1850), TSmallIntHelper (1862), TWordHelper (1896), TCar-
dinalHelper (1804), TIntegerHelper (1831), TInt64Helper (1828), TQWordHelper (1847), TNa-
tiveIntHelper (1840), TByteHelper (1800)
76.93.3 TNativeUIntHelper.Parse
Synopsis: Convert from a string
Declaration: class function Parse(const AString: string) : NativeUInt; Static
Visibility: public
Description: Parse will attempt to convert the string AString to a NativeUInt value. It uses the StrToInt
(1750) function to perform the conversion, so no localization is taken into account.
Errors: If the string does not contain a valid NativeUInt value, an EConvertError (1780) exception is raised.
See also: TNativeUIntHelper.ToString (1845), TNativeUIntHelper.TryParse (1845), StrToInt (1750)
1844
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.93.4 TNativeUIntHelper.Size
Synopsis: Size, in bytes, of the NativeUInt value
Declaration: class function Size : Integer; Static
Visibility: public
Description: Size returns the size (in NativeUInts) of the NativeUInt value. This is equivalent to SizeOf(NativeUInt).
Errors: None.
See also: SizeOf (1538)
76.93.5 TNativeUIntHelper.ToString
Synopsis: Convert the value to string
Declaration: class function ToString(const AValue: NativeUInt) : string; Overload
; Static
function ToString : string; Overload
Visibility: public
Description: ToString will, in the class function variant of this method, convert AValue to a string represen-
tation. In the regular method overloaded version of ToString, the NativeUInt value itself is used.
The IntToStr (1717) function is used to do the conversion.
See also: TNativeUIntHelper.Parse (1844), IntToStr (1717)
76.93.6 TNativeUIntHelper.TryParse
Synopsis: Try to convert a string to a NativeUInt, report success or failure
Declaration: class function TryParse(const AString: string; out AValue: NativeUInt)
: Boolean; Static
Visibility: public
Description: TryParse attempts to convert the string AString to a NativeUInt, and reports the success of the
attempt. If the attempt is successful, then True is returned, and the actual value of the NativeUInt is
returned in AValue.
It uses the val (1598) function to perform the conversion, so no localization is taken into account.
See also: TNativeUIntHelper.Parse (1844), Val (1561)
76.93.7 TNativeUIntHelper.ToBoolean
Synopsis: Convert to a boolean value
Declaration: function ToBoolean : Boolean
Visibility: public
Description: ToBoolean converts the NativeUInt value to a boolean: it returns True if the value is nonzero,
False if it is zero.
See also: TNativeUIntHelper.ToSingle (1846), TNativeUIntHelper.ToDouble (1846), TNativeUIntHelper.ToExtended
(1846), TNativeUIntHelper.ToString (1845), TNativeUIntHelper.ToHexString (1846)
1845
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.93.8 TNativeUIntHelper.ToDouble
Synopsis: Convert to a double-sized floating point value
Declaration: function ToDouble : Double
Visibility: public
Description: ToDouble converts the NativeUInt value to a double-sized floating point value.
See also: TNativeUIntHelper.ToBoolean (1845), TNativeUIntHelper.ToExtended (1846), TNativeUIntHelper.ToSingle
(1846), TNativeUIntHelper.ToString (1845), TNativeUIntHelper.ToHexString (1846)
76.93.9 TNativeUIntHelper.ToExtended
Synopsis: Convert to an extended-sized floating point value
Declaration: function ToExtended : Extended
Visibility: public
Description: ToDouble converts the NativeUInt value to an extended-sized floating point value.
See also: TNativeUIntHelper.ToBoolean (1845), TNativeUIntHelper.ToSingle (1846), TNativeUIntHelper.ToDouble
(1846), TNativeUIntHelper.ToString (1845), TNativeUIntHelper.ToHexString (1846)
76.93.10 TNativeUIntHelper.ToBinString
Declaration: function ToBinString : string
Visibility: public
76.93.11 TNativeUIntHelper.ToHexString
Synopsis: Convert to a hexadecimal string representation
Declaration: function ToHexString(const AMinDigits: Integer) : string; Overload
function ToHexString : string; Overload
Visibility: public
Description: ToHexString converts the NativeUInt value to a hexadecimal string representation. The AMinDigits
argument specifies the minimal number of characters in the resulting string. The string will be left-
padded with zeroes if the representation contains less than AMinDigits characters.
See also: TNativeUIntHelper.ToBoolean (1845), TNativeUIntHelper.ToSingle (1846), TNativeUIntHelper.ToDouble
(1846), TNativeUIntHelper.ToString (1845), TNativeUIntHelper.ToExtended (1846)
76.93.12 TNativeUIntHelper.ToSingle
Synopsis: Convert to an single-sized floating point value
Declaration: function ToSingle : Single
Visibility: public
Description: ToSingle converts the NativeUInt value to a single-sized floating point value.
See also: TNativeUIntHelper.ToBoolean (1845), TNativeUIntHelper.ToDouble (1846), TNativeUIntHelper.ToExtended
(1846), TNativeUIntHelper.ToString (1845), TNativeUIntHelper.ToHexString (1846)
1846
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.93.13 TNativeUIntHelper.SetBit
Declaration: function SetBit(const Index: TNativeUIntBitIndex) : NativeUint
Visibility: public
76.93.14 TNativeUIntHelper.ClearBit
Declaration: function ClearBit(const Index: TNativeUIntBitIndex) : NativeUint
Visibility: public
76.93.15 TNativeUIntHelper.ToggleBit
Declaration: function ToggleBit(const Index: TNativeUIntBitIndex) : NativeUint
Visibility: public
76.93.16 TNativeUIntHelper.TestBit
Declaration: function TestBit(const Index: TNativeUIntBitIndex) : Boolean
Visibility: public
76.94 TQWordHelper
76.94.1 Description
TQWordHelper contains some auxiliary routines for a QWord-typed ordinal value. It consists
mainly of conversion routines to and from other types.
See also: TStringHelper (1865), TShortIntHelper (1850), TSmallIntHelper (1862), TWordHelper (1896), TCar-
dinalHelper (1804), TIntegerHelper (1831), TInt64Helper (1828), TByteHelper (1800), TNativeIntHelper
(1840), TNativeUIntHelper (1844)
1847
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.94.3 TQWordHelper.Parse
Synopsis: Convert from a string
Declaration: class function Parse(const AString: string) : QWord; Static
Visibility: public
Description: Parse will attempt to convert the string AString to a QWord value. It uses the StrToQWord
(1752) function to perform the conversion, so no localization is taken into account.
Errors: If the string does not contain a valid QWord value, an EConvertError (1780) exception is raised.
See also: TQWordHelper.ToString (1848), TQWordHelper.TryParse (1848), StrToQWord (1752)
76.94.4 TQWordHelper.Size
Synopsis: Size, in bytes, of the QWord value
Declaration: class function Size : Integer; Static
Visibility: public
Description: Size returns the size (in QWords) of the QWord value. This is equivalent to SizeOf(QWord).
Errors: None.
See also: SizeOf (1538)
76.94.5 TQWordHelper.ToString
Synopsis: Convert the value to string
Declaration: class function ToString(const AValue: QWord) : string; Overload
; Static
function ToString : string; Overload
Visibility: public
Description: ToString will, in the class function variant of this method, convert AValue to a string represen-
tation. In the regular method overloaded version of ToString, the QWord value itself is used. The
IntToStr (1717) function is used to do the conversion.
See also: TQWordHelper.Parse (1848), IntToStr (1717)
76.94.6 TQWordHelper.TryParse
Synopsis: Try to convert a string to a QWord, report success or failure
Declaration: class function TryParse(const AString: string; out AValue: QWord)
: Boolean; Static
Visibility: public
Description: TryParse attempts to convert the string AString to a QWord, and reports the success of the
attempt. If the attempt is successful, then True is returned, and the actual value of the QWord is
returned in AValue.
It uses the val (1598) function to perform the conversion, so no localization is taken into account.
See also: TQWordHelper.Parse (1848), Val (1561)
1848
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.94.7 TQWordHelper.ToBoolean
Synopsis: Convert to a boolean value
Declaration: function ToBoolean : Boolean
Visibility: public
Description: ToBoolean converts the QWord value to a boolean: it returns True if the value is nonzero, False
if it is zero.
See also: TQWordHelper.ToSingle (1850), TQWordHelper.ToDouble (1849), TQWordHelper.ToExtended (1849),
TQWordHelper.ToString (1848), TQWordHelper.ToHexString (1849)
76.94.8 TQWordHelper.ToDouble
Synopsis: Convert to a double-sized floating point value
Declaration: function ToDouble : Double
Visibility: public
Description: ToDouble converts the QWord value to a double-sized floating point value.
See also: TQWordHelper.ToBoolean (1849), TQWordHelper.ToExtended (1849), TQWordHelper.ToSingle (1850),
TQWordHelper.ToString (1848), TQWordHelper.ToHexString (1849)
76.94.9 TQWordHelper.ToExtended
Synopsis: Convert to an extended-sized floating point value
Declaration: function ToExtended : Extended
Visibility: public
Description: ToDouble converts the QWord value to an extended-sized floating point value.
See also: TQWordHelper.ToBoolean (1849), TQWordHelper.ToSingle (1850), TQWordHelper.ToDouble (1849),
TQWordHelper.ToString (1848), TQWordHelper.ToHexString (1849)
76.94.10 TQWordHelper.ToBinString
Declaration: function ToBinString : string
Visibility: public
76.94.11 TQWordHelper.ToHexString
Synopsis: Convert to a hexadecimal string representation
Declaration: function ToHexString(const AMinDigits: Integer) : string; Overload
function ToHexString : string; Overload
Visibility: public
Description: ToHexString converts the QWord value to a hexadecimal string representation. The AMinDigits
argument specifies the minimal number of characters in the resulting string. The string will be left-
padded with zeroes if the representation contains less than AMinDigits characters.
See also: TQWordHelper.ToBoolean (1849), TQWordHelper.ToSingle (1850), TQWordHelper.ToDouble (1849),
TQWordHelper.ToString (1848), TQWordHelper.ToExtended (1849)
1849
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.94.12 TQWordHelper.ToSingle
Synopsis: Convert to an single-sized floating point value
76.94.13 TQWordHelper.SetBit
Declaration: function SetBit(const Index: TQwordBitIndex) : QWord
Visibility: public
76.94.14 TQWordHelper.ClearBit
Declaration: function ClearBit(const Index: TQwordBitIndex) : QWord
Visibility: public
76.94.15 TQWordHelper.ToggleBit
Declaration: function ToggleBit(const Index: TQwordBitIndex) : QWord
Visibility: public
76.94.16 TQWordHelper.TestBit
Declaration: function TestBit(const Index: TQwordBitIndex) : Boolean
Visibility: public
76.95 TShortIntHelper
76.95.1 Description
TShortIntHelper contains some auxiliary routines for a ShortInt-typed ordinal value. It consists
mainly of conversion routines to and from other types.
See also: TStringHelper (1865), TByteHelper (1800), TSmallIntHelper (1862), TWordHelper (1896), TCar-
dinalHelper (1804), TIntegerHelper (1831), TInt64Helper (1828), TQWordHelper (1847), TNa-
tiveIntHelper (1840), TNativeUIntHelper (1844)
1850
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.95.3 TShortIntHelper.Parse
Synopsis: Convert from a string
Declaration: class function Parse(const AString: string) : ShortInt; Static
Visibility: public
Description: Parse will attempt to convert the string AString to a ShortInt value. It uses the StrToInt (1750)
function to perform the conversion, so no localization is taken into account.
Errors: If the string does not contain a valid ShortInt value, an EConvertError (1780) exception is raised.
See also: TShortIntHelper.ToString (1851), TShortIntHelper.TryParse (1852), StrToInt (1750)
76.95.4 TShortIntHelper.Size
Synopsis: Size, in bytes, of the ShortInt value
Declaration: class function Size : Integer; Static
Visibility: public
Description: Size returns the size (in ShortInts) of the ShortInt value. This is equivalent to SizeOf(Byte).
Errors: None.
See also: SizeOf (1538)
76.95.5 TShortIntHelper.ToString
Synopsis: Convert the value to string
1851
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Description: ToString will, in the class function variant of this method, convert AValue to a string represen-
tation. In the regular method overloaded version of ToString, the ShortInt value itself is used. The
IntToStr (1717) function is used to do the conversion.
See also: TShortIntHelper.Parse (1851), IntToStr (1717)
76.95.6 TShortIntHelper.TryParse
Synopsis: Try to convert a string to a ShortInt, report success or failure
Declaration: class function TryParse(const AString: string; out AValue: ShortInt)
: Boolean; Static
Visibility: public
Description: TryParse attempts to convert the string AString to a ShortInt, and reports the success of the
attempt. If the attempt is successful, then True is returned, and the actual value of the ShortInt is
returned in AValue.
It uses the val (1598) function to perform the conversion, so no localization is taken into account.
76.95.7 TShortIntHelper.ToBoolean
Synopsis: Convert to a boolean value
Declaration: function ToBoolean : Boolean
Visibility: public
Description: ToBoolean converts the ShortInt value to a boolean: it returns True if the value is nonzero,
False if it is zero.
See also: TShortIntHelper.ToSingle (1853), TShortIntHelper.ToDouble (1852), TShortIntHelper.ToExtended
(1852), TShortIntHelper.ToString (1851), TShortIntHelper.ToHexString (1853)
76.95.8 TShortIntHelper.ToDouble
Synopsis: Convert to a double-sized floating point value
Declaration: function ToDouble : Double
Visibility: public
Description: ToDouble converts the ShortInt value to a double-sized floating point value.
See also: TShortIntHelper.ToBoolean (1852), TShortIntHelper.ToExtended (1852), TShortIntHelper.ToSingle
(1853), TShortIntHelper.ToString (1851), TShortIntHelper.ToHexString (1853)
76.95.9 TShortIntHelper.ToExtended
Synopsis: Convert to an extended-sized floating point value
1852
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Description: ToDouble converts the ShortInt value to an extended-sized floating point value.
See also: TShortIntHelper.ToBoolean (1852), TShortIntHelper.ToSingle (1853), TShortIntHelper.ToDouble
(1852), TShortIntHelper.ToString (1851), TShortIntHelper.ToHexString (1853)
76.95.10 TShortIntHelper.ToBinString
Declaration: function ToBinString : string
Visibility: public
76.95.11 TShortIntHelper.ToHexString
Synopsis: Convert to a hexadecimal string representation
Declaration: function ToHexString(const AMinDigits: Integer) : string; Overload
function ToHexString : string; Overload
Visibility: public
Description: ToHexString converts the ShortInt value to a hexadecimal string representation. The AMinDigits
argument specifies the minimal number of characters in the resulting string. The string will be left-
padded with zeroes if the representation contains less than AMinDigits characters.
76.95.12 TShortIntHelper.ToSingle
Synopsis: Convert to an single-sized floating point value
76.95.13 TShortIntHelper.SetBit
Declaration: function SetBit(const Index: TShortIntBitIndex) : ShortInt
Visibility: public
76.95.14 TShortIntHelper.ClearBit
Declaration: function ClearBit(const Index: TShortIntBitIndex) : ShortInt
Visibility: public
1853
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.95.15 TShortIntHelper.ToggleBit
Declaration: function ToggleBit(const Index: TShortIntBitIndex) : ShortInt
Visibility: public
76.95.16 TShortIntHelper.TestBit
Declaration: function TestBit(const Index: TShortIntBitIndex) : Boolean
Visibility: public
76.96 TSimpleRWSync
76.96.1 Description
TSimpleRWSync implements a simple read/write locking mechanism. It controls access to an
object: only a single thread is allowed access to an object for either read or write operations.
Access is controlled through a single critical section.
76.96.4 TSimpleRWSync.Create
Synopsis: Create a new instance of TSimpleRWSync
Declaration: constructor Create; Virtual
Visibility: public
Description: Create allocates a new instance of TSimpleRWSync and initializes the critical section for use in
the various methods.
See also: TSimpleRWSync.Destroy (1855)
1854
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.96.5 TSimpleRWSync.Destroy
Synopsis: Removes the TSimpleRWSync instance from memory
76.96.6 TSimpleRWSync.Beginwrite
Synopsis: Acquire a write lock
Declaration: function Beginwrite : Boolean
Visibility: public
Description: Beginwrite waits till all other threads have released their read or write locks on the object, and
then acquires a write lock on the object.
See also: TSimpleRWSync.BeginRead (1855), TSimpleRWSync.EndWrite (1855)
76.96.7 TSimpleRWSync.Endwrite
Synopsis: Release the write lock
Declaration: procedure Endwrite
Visibility: public
Description: EndWrite releases the current threads lock on the object, allowing other threads to acquire a read
or write lock on the object.
See also: TSimpleRWSync.BeginWrite (1855), TSimpleRWSync.EndRead (1856)
76.96.8 TSimpleRWSync.Beginread
Synopsis: Acquire a read lock
1855
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.96.9 TSimpleRWSync.Endread
Synopsis: Release the read lock
76.97 TSingleHelper
76.97.1 Description
TSingleHelper is the helper type for the single-sized floating point type. It contains some con-
version methods, as well as access to the low-level structure of the floating-point representation of a
single.
76.97.4 TSingleHelper.IsNan
Synopsis: Check whether a value equals NaN.
1856
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.97.5 TSingleHelper.IsInfinity
Synopsis: Check whether a value is positive or negative infinity.
Declaration: class function IsInfinity(const AValue: Single) : Boolean; Overload
; Static
function IsInfinity : Boolean; Overload
Visibility: public
Description: IsInfinity checks whether a single-sized floating point value represents a positive or negative
infinity. If so, it returns True. When the class function version is used, the value can be specified
using AValue. In the method version, the used value is (Self).
See also: TSingleHelper.IsNan (1856), TSingleHelper.IsPositiveInfinity (1857), TSingleHelper.IsNegativeInfinity
(1857)
76.97.6 TSingleHelper.IsNegativeInfinity
Synopsis: Check whether a value is negative infinity.
Declaration: class function IsNegativeInfinity(const AValue: Single) : Boolean
; Overload; Static
function IsNegativeInfinity : Boolean; Overload
Visibility: public
Description: IsNegativeInfinity checks whether a single-sized floating point value represents a negative
infinity. If so, it returns True. When the class function version is used, the value can be specified
using AValue. In the method version, the used value is (Self).
See also: TSingleHelper.IsNan (1856), TSingleHelper.IsPositiveInfinity (1857), TSingleHelper.IsInfinity (1857)
76.97.7 TSingleHelper.IsPositiveInfinity
Synopsis: Check whether a value is positive infinity.
Declaration: class function IsPositiveInfinity(const AValue: Single) : Boolean
; Overload; Static
function IsPositiveInfinity : Boolean; Overload
Visibility: public
Description: IsPositiveInfinity checks whether a single-sized floating point value represents a positive
infinity. If so, it returns True. When the class function version is used, the value can be specified
using AValue. In the method version, the used value is (Self).
See also: TSingleHelper.IsNan (1856), TSingleHelper.IsNegativeInfinity (1857), TSingleHelper.IsInfinity (1857)
1857
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.97.8 TSingleHelper.Parse
Synopsis: Convert a string to a floating point value
Declaration: class function Parse(const AString: string) : Single; Overload; Static
class function Parse(const AString: string;
const AFormatSettings: TFormatSettings) : Single
; Overload; Static
Visibility: public
Description: Parse will try to convert AString to a single-sized floating point value. It will take into account
internationalization settings. (it uses FloatToStr).
Errors: If the string AString is not a valid floating-point value, a EConvertError (1780) exception is raised.
See also: FloatToStr (1690), TSingleHelper.ToString (1858), TSingleHelper.TryParse (1859)
76.97.9 TSingleHelper.Size
Synopsis: Size (in bytes) of a single-sized floating point value.
Declaration: class function Size : Integer; Static
Visibility: public
Description: Size is the size (in bytes) of a single-sized floating point value. It is equivalent to calling SizeOf(Single).
See also: SizeOf (1538)
76.97.10 TSingleHelper.ToString
Synopsis: Convert a single-sized floating point value to a string
Declaration: class function ToString(const AValue: Single) : string; Overload
; Static
class function ToString(const AValue: Single;
const AFormatSettings: TFormatSettings) : string
; Overload; Static
class function ToString(const AValue: Single;
const AFormat: TFloatFormat;
const APrecision: Integer;
const ADigits: Integer) : string; Overload
; Static
class function ToString(const AValue: Single;
const AFormat: TFloatFormat;
const APrecision: Integer;
const ADigits: Integer;
const AFormatSettings: TFormatSettings) : string
; Overload; Static
function ToString(const AFormat: TFloatFormat;
const APrecision: Integer; const ADigits: Integer)
: string; Overload
function ToString(const AFormat: TFloatFormat;
const APrecision: Integer; const ADigits: Integer;
const AFormatSettings: TFormatSettings) : string
; Overload
1858
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Description: ToString will convert AValue (or Self in the plain method version) to a string. Optionally
FormatSettings can be specified, to be able to specify the decimal separator character to use.
Additionally, a precision APrecision and number of digits ADigits can be specified, in con-
junction with a AFormat parameter to specify the form in which the floating-point value must be
represented. (see TFloatFormat (1619) for an explanation of the various values). In this case, Float-
ToStrF (1691) is used to format the value. In the absence of these parameters, FloatToStr (1690) is
called.
See also: FloatToStr (1690), FloatToStrF (1691), TFloatFormat (1619)
76.97.11 TSingleHelper.TryParse
Synopsis: Try to convert a string to a single-sized floating point value.
Visibility: public
Description: TryParse attempts to convert the string AString to a single-sized floating point value and reports
True if the conversion was successful. In that case the parsed value is returned in AValue.
If the conversion failed, False is returned.
76.97.12 TSingleHelper.BuildUp
Synopsis: Build a single-sized floating point from its composing parts
Declaration: procedure BuildUp(const ASignFlag: Boolean; const AMantissa: QWord;
const AExponent: Integer)
Visibility: public
Description: BuildUp will compose a single-sized floating point value from the sign ASignFlag, mantissa
AMantissa and exponent AExponent. It simply sets the Sign (1861), Exp (1861) and Frac
(1861) properties in 1 call.
76.97.13 TSingleHelper.Exponent
Synopsis: Exponent of the floating-point value
Declaration: function Exponent : Integer
Visibility: public
1859
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Description: Exponent is the value X in the representation of the floating-point value in m*2X̂, i.e. the exponent.
See also: TSingleHelper.Sign (1861), TSingleHelper.Exp (1861), TSingleHelper.Frac (1861), TSingleHelper.Fraction
(1860), TSingleHelper.Mantissa (1860)
76.97.14 TSingleHelper.Fraction
Synopsis: Fraction of the floating-point value
Declaration: function Fraction : Extended
Visibility: public
Description: Fraction is the decimal part of the floating-point value.
See also: TSingleHelper.Sign (1861), TSingleHelper.Exp (1861), TSingleHelper.Exponent (1859), TSingle-
Helper.Frac (1861), TSingleHelper.Mantissa (1860)
76.97.15 TSingleHelper.Mantissa
Synopsis: Mantissa of the floating-point
Declaration: function Mantissa : QWord
Visibility: public
Description: Mantissa is the value of the significant without the hidden bit. This means it the plain bit pattern
as it is stored in memory.
See also: TSingleHelper.Sign (1861), TSingleHelper.Exp (1861), TSingleHelper.Exponent (1859), TSingle-
Helper.Frac (1861), TSingleHelper.Fraction (1860)
76.97.16 TSingleHelper.SpecialType
Synopsis: Return the type of the single-sized floating point value
Declaration: function SpecialType : TFloatSpecial
Visibility: public
Description: SpecialType checks whether the single-sized floating point value equals one of several special
values, and returns an enumerated value describing which value this is. See TFloatSpecial (1598) for
an explanation of the possible values.
See also: TFloatSpecial (1598)
76.97.17 TSingleHelper.Bytes
Synopsis: Indexed access to the individual bytes of the floating point value
Declaration: Property Bytes[AIndex: Cardinal]: Byte
Visibility: public
Access: Read,Write
Description: Bytes can be used to get or set the various bytes that make up the single-sized floating point value.
The index runs from 0 to Size-1.
See also: TSingleHelper.Words (1861), TSingleHelper.Size (1858)
1860
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.97.18 TSingleHelper.Words
Synopsis: Indexed access to the words that make up the floating point value
Declaration: Property Words[AIndex: Cardinal]: Word
Visibility: public
Access: Read,Write
Description: Words can be used to get or set the various bytes that make up the single-sized floating point value.
The index runs from 0 to (Size-1) div 2.
See also: TSingleHelper.Bytes (1860), TSingleHelper.Size (1858)
76.97.19 TSingleHelper.Sign
Synopsis: Sign of the floating point value
Declaration: Property Sign : Boolean
Visibility: public
Access: Read,Write
Description: Sign returns True if the sign bit of the value is set (i.e. it is a negative value) or False if it is not
set (i.e. it is a positive value).
See also: TSingleHelper.Bytes (1860), TSingleHelper.Exp (1861), TSingleHelper.Frac (1861), TSingleHelper.Mantissa
(1860), TSingleHelper.Fraction (1860), TSingleHelper.Exponent (1859)
76.97.20 TSingleHelper.Exp
Synopsis: The bit pattern of the exponent as stored in memory.
Declaration: Property Exp : QWord
Visibility: public
Access: Read,Write
Description: Exp is the internal representation of the Exponent (1859).
See also: TSingleHelper.Bytes (1860), TSingleHelper.Sign (1861), TSingleHelper.Frac (1861), TSingleHelper.Mantissa
(1860), TSingleHelper.Fraction (1860), TSingleHelper.Exponent (1859)
76.97.21 TSingleHelper.Frac
Synopsis: Bitpattern that makes up the fractional part.
Declaration: Property Frac : QWord
Visibility: public
Access: Read,Write
Description: Frac is the bit pattern representing the fractional part (significand) including the preceding 1 (the
hidden bit).
See also: TSingleHelper.Bytes (1860), TSingleHelper.Sign (1861), TSingleHelper.Exp (1861), TSingleHelper.Mantissa
(1860), TSingleHelper.Fraction (1860), TSingleHelper.Exponent (1859)
1861
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.98 TSmallIntHelper
76.98.1 Description
TSmallIntHelper contains some auxiliary routines for a SmallInt-typed ordinal value. It consists
mainly of conversion routines to and from other types.
See also: TStringHelper (1865), TShortIntHelper (1850), TByteHelper (1800), TWordHelper (1896), TCar-
dinalHelper (1804), TIntegerHelper (1831), TInt64Helper (1828), TQWordHelper (1847), TNa-
tiveIntHelper (1840), TNativeUIntHelper (1844)
76.98.3 TSmallIntHelper.Parse
Synopsis: Convert from a string
Declaration: class function Parse(const AString: string) : SmallInt; Static
Visibility: public
Description: Parse will attempt to convert the string AString to a SmallInt value. It uses the StrToInt (1750)
function to perform the conversion, so no localization is taken into account.
Errors: If the string does not contain a valid SmallInt value, an EConvertError (1780) exception is raised.
See also: TSmallIntHelper.ToString (1863), TSmallIntHelper.TryParse (1863), StrToInt (1750)
76.98.4 TSmallIntHelper.Size
Synopsis: Size, in bytes, of the SmallInt value
Declaration: class function Size : Integer; Static
Visibility: public
Description: Size returns the size (in SmallInts) of the SmallInt value. This is equivalent to SizeOf(SmallInt).
Errors: None.
See also: SizeOf (1538)
1862
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.98.5 TSmallIntHelper.ToString
Synopsis: Convert the value to string
Description: ToString will, in the class function variant of this method, convert AValue to a string represen-
tation. In the regular method overloaded version of ToString, the SmallInt value itself is used.
The IntToStr (1717) function is used to do the conversion.
See also: TSmallIntHelper.Parse (1862), IntToStr (1717)
76.98.6 TSmallIntHelper.TryParse
Synopsis: Try to convert a string to a SmallInt, report success or failure
Declaration: class function TryParse(const AString: string; out AValue: SmallInt)
: Boolean; Static
Visibility: public
Description: TryParse attempts to convert the string AString to a SmallInt, and reports the success of the
attempt. If the attempt is successful, then True is returned, and the actual value of the SmallInt is
returned in AValue.
It uses the val (1598) function to perform the conversion, so no localization is taken into account.
76.98.7 TSmallIntHelper.ToBoolean
Synopsis: Convert to a boolean value
Declaration: function ToBoolean : Boolean
Visibility: public
Description: ToBoolean converts the SmallInt value to a boolean: it returns True if the value is nonzero,
False if it is zero.
See also: TSmallIntHelper.ToSingle (1864), TSmallIntHelper.ToDouble (1864), TSmallIntHelper.ToExtended
(1864), TSmallIntHelper.ToString (1863), TSmallIntHelper.ToHexString (1864)
76.98.8 TSmallIntHelper.ToBinString
Declaration: function ToBinString : string
Visibility: public
1863
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.98.9 TSmallIntHelper.ToHexString
Synopsis: Convert to a hexadecimal string representation
Declaration: function ToHexString : string; Overload
function ToHexString(const AMinDigits: Integer) : string; Overload
Visibility: public
Description: ToHexString converts the SmallInt value to a hexadecimal string representation. The AMinDigits
argument specifies the minimal number of characters in the resulting string. The string will be left-
padded with zeroes if the representation contains less than AMinDigits characters.
See also: TSmallIntHelper.ToBoolean (1863), TSmallIntHelper.ToSingle (1864), TSmallIntHelper.ToDouble
(1864), TSmallIntHelper.ToString (1863), TSmallIntHelper.ToExtended (1864)
76.98.10 TSmallIntHelper.ToSingle
Synopsis: Convert to an single-sized floating point value
Declaration: function ToSingle : Single
Visibility: public
Description: ToSingle converts the SmallInt value to a single-sized floating point value.
See also: TSmallIntHelper.ToBoolean (1863), TSmallIntHelper.ToDouble (1864), TSmallIntHelper.ToExtended
(1864), TSmallIntHelper.ToString (1863), TSmallIntHelper.ToHexString (1864)
76.98.11 TSmallIntHelper.ToDouble
Synopsis: Convert to a double-sized floating point value
Declaration: function ToDouble : Double
Visibility: public
Description: ToDouble converts the SmallInt value to a double-sized floating point value
See also: TSmallIntHelper.ToBoolean (1863), TSmallIntHelper.ToExtended (1864), TSmallIntHelper.ToSingle
(1864), TSmallIntHelper.ToString (1863), TSmallIntHelper.ToHexString (1864)
76.98.12 TSmallIntHelper.ToExtended
Synopsis: Convert to an extended-sized floating point value
Declaration: function ToExtended : Extended
Visibility: public
Description: ToDouble converts the SmallInt value to an extended-sized floating point value.
See also: TSmallIntHelper.ToBoolean (1863), TSmallIntHelper.ToSingle (1864), TSmallIntHelper.ToDouble
(1864), TSmallIntHelper.ToString (1863), TSmallIntHelper.ToHexString (1864)
76.98.13 TSmallIntHelper.SetBit
Declaration: function SetBit(const Index: TSmallIntBitIndex) : SmallInt
Visibility: public
1864
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.98.14 TSmallIntHelper.ClearBit
Declaration: function ClearBit(const Index: TSmallIntBitIndex) : SmallInt
Visibility: public
76.98.15 TSmallIntHelper.ToggleBit
Declaration: function ToggleBit(const Index: TSmallIntBitIndex) : SmallInt
Visibility: public
76.98.16 TSmallIntHelper.TestBit
Declaration: function TestBit(const Index: TSmallIntBitIndex) : Boolean
Visibility: public
76.99 TStringHelper
76.99.1 Description
TStringHelper adds various helper routines to the string type. These are mostly conversion
routines, and some formatting routines.
For similarity to C-like languages, all the indexes in these helper routines are zero based.
1865
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
1866
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.99.4 TStringHelper.Compare
Synopsis: Compare 2 strings
Declaration: class function Compare(const A: string; const B: string) : Integer
; Overload; Static
class function Compare(const A: string; const B: string;
IgnoreCase: Boolean) : Integer; Overload; Static
class function Compare(const A: string; const B: string;
Options: TCompareOptions) : Integer; Overload
; Static
class function Compare(const A: string; IndexA: SizeInt;
const B: string; IndexB: SizeInt; ALen: SizeInt)
: Integer; Overload; Static
class function Compare(const A: string; IndexA: SizeInt;
const B: string; IndexB: SizeInt; ALen: SizeInt;
IgnoreCase: Boolean) : Integer; Overload; Static
class function Compare(const A: string; IndexA: SizeInt;
const B: string; IndexB: SizeInt; ALen: SizeInt;
Options: TCompareOptions) : Integer; Overload
; Static
Visibility: public
The comparison can be influenced by using the appropriate overloaded version of the function.
•If the IndexA and IndexB parameters are present, the comparison starts at character index
IndexA and IndexB. The indexes are zero-based.
•If the ALen parameters is present, then only the first ALen characters are compared. If not
enough characters are present in either A or B, the comparison will include only as much char-
acters as are present.
•If IgnoreCase is present and used, it determines whether the comparison is done case-
sensitively. This form is deprecated, it is recommended to use the AOptions parameter and
to include coIgnoreCase.
•The AOptions argument can be used to specify additional options. See TCompareOption
(1380) for a list of possible values in this set.
Errors: None.
See also: TStringHelper.CompareOrdinal (1869), TCompareOption (1380), TStringHelper.CompareTo (1875)
1868
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.99.5 TStringHelper.CompareOrdinal
Synopsis: Compare 2 strings byte for byte
Optionally, a zero-based starting index for the compare can be given for each of the strings: IndexA
and IndexB. In this case a maximum amount of characters (ALen) to be compared must also be
specified.
Errors: None.
See also: TStringHelper.Compare (1868), TStringHelper.CompareTo (1875)
76.99.6 TStringHelper.CompareText
Synopsis: Compare 2 strings case insensitively.
Declaration: class function CompareText(const A: string; const B: string) : Integer
; Static
Visibility: public
Description: CompareText simply calls SysUtils (1652) with the 2 passed arguments.
Errors: None.
See also: SysUtils (1652), TStringHelper.CompareTo (1875)
76.99.7 TStringHelper.Copy
Synopsis: Return a unique copy of a string
Declaration: class function Copy(const Str: string) : string; Static
Visibility: public
Description: Copy will copy the string on which it operates, and makes sure the result has reference count 1.
1869
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.99.8 TStringHelper.Create
Synopsis: Create a new string
•A character (ACHar) and a count (ACount, in which case a string is returned of the specified
length, filled with AChar.
•An array of characters AValue. The returned string will have the same length as the array,
and the characters will be copied from the elements in the array. Optionally, a starting index
StartIndex (zero based) and length ALen can be specified, in which case the string will
contain at most ALen characters, which will have been copied starting at index StartIndex.
Errors: None.
See also: StringOfChar (1598)
76.99.9 TStringHelper.EndsText
Synopsis: Check if one string is the ending of another.
76.99.10 TStringHelper.Equals
Synopsis: Check if 2 strings are equal
Declaration: class function Equals(const a: string; const b: string) : Boolean
; Overload; Static
function Equals(const AValue: string) : Boolean; Overload
Visibility: public
Description: Equals returns True if A=B, false otherwise.
1870
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.99.11 TStringHelper.Format
Synopsis: Format a string using provided arguments.
Declaration: class function Format(const AFormat: string; const args: Array of const)
: string; Overload; Static
function Format(const args: Array of const) : string; Overload
Visibility: public
Description: Format just calls Sysutils.Format (1695), passing on AFormat and Args. If AFormat is omit-
ted, the string itself is used as the formatting string.
See also: Sysutils.Format (1695)
76.99.12 TStringHelper.IsNullOrEmpty
Synopsis: Check if a string is empty
76.99.13 TStringHelper.IsNullOrWhiteSpace
Synopsis: Check if a string is empty or contains only whitespace characters.
Declaration: class function IsNullOrWhiteSpace(const AValue: string) : Boolean
; Static
Visibility: public
Description: IsNullOrEmpty returns True if string A has length 0 or contains only whitespace characters
(characters with ASCII code 32 or less).
See also: TStringHelper.IsNullOrEmpty (1871), Trim (1759)
76.99.14 TStringHelper.Join
Synopsis: Join a series of strings, separated using a given separator
Declaration: class function Join(const Separator: string;
const Values: Array of const) : string; Overload
; Static
class function Join(const Separator: string;
const Values: Array of string) : string; Overload
; Static
class function Join(const Separator: string;
const Values: Array of string; StartIndex: SizeInt;
ACount: SizeInt) : string; Overload; Static
Visibility: public
1871
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Description: Join will return a string that consists of all the strings in Values concatenated, with Separator
between them. Values can be an array of strings, but can also be an array of arbitrary values: the
values will first be transformed to a string representation first.
In case an array of strings is passed on, a start index StartIndex and element count ACount can
be passed on as well.
Errors: Classes, pointers or interfaces will not be transformed, but will result in a ’unknown type: NNN’
string being inserted.
See also: TStringHelper.Split (1882)
76.99.15 TStringHelper.LowerCase
Synopsis: Return the lowercase version of a string.
76.99.16 TStringHelper.Parse
Synopsis: Return a string representation of the argument
Declaration: class function Parse(const AValue: Boolean) : string; Overload; Static
class function Parse(const AValue: Extended) : string; Overload
; Static
class function Parse(const AValue: Int64) : string; Overload; Static
class function Parse(const AValue: Integer) : string; Overload; Static
Visibility: public
Description: Parse will return a string representation of the argument AValue. How this is done depends on
the type of the AValueargument:
76.99.17 TStringHelper.ToBoolean
Synopsis: Convert string to boolean
1872
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Description: ToBoolean returns the contents of the string S as a boolean (if possible). It uses StrToBool (1745)
to convert the value to a boolean.
Errors: If the string contains a value that cannot be translated to a boolean, an EConvertError (1780) excep-
tion may be raised.
76.99.18 TStringHelper.ToDouble
Synopsis: Convert string to double-sized floating point value
Declaration: class function ToDouble(const S: string) : Double; Overload; Static
function ToDouble : Double; Overload
Visibility: public
Description: ToDouble returns the contents of the string S as a Double-sized floating point value (if possible).
It uses StrToFloat (1749) to convert the value to a floating point value.
Errors: If the string contains a value that cannot be translated to a floating point value, an EConvertError
(1780) exception may be raised.
See also: StrToFloat (1749), EConvertError (1780), TStringHelper.ToBoolean (1872), TStringHelper.ToExtended
(1873), TStringHelper.ToInt64 (1873), TStringHelper.ToInteger (1874), TStringHelper.ToSingle (1874)
76.99.19 TStringHelper.ToExtended
Synopsis: Convert string to extended-sized floating point value
Declaration: class function ToExtended(const S: string) : Extended; Overload
; Static
function ToExtended : Extended; Overload
Visibility: public
Description: ToExtended returns the contents of the string S as a Extended-sized floating point value (if pos-
sible). It uses StrToFloat (1749) to convert the value to a floating point value.
Errors: If the string contains a value that cannot be translated to a floating point value, an EConvertError
(1780) exception may be raised.
76.99.20 TStringHelper.ToInt64
Synopsis: Convert string to 64-bit signed integer
Declaration: class function ToInt64(const S: string) : Int64; Overload; Static
function ToInt64 : Int64; Overload
Visibility: public
Description: ToInt64 returns the contents of the string S as a 64-bit signed integer value (if possible). It uses
StrToInt64 (1751) to convert the value to an 64-bit sized integer value.
1873
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Errors: If the string contains a value that cannot be translated to an integer value, an EConvertError (1780)
exception may be raised.
See also: StrToInt64 (1751), EConvertError (1780), TStringHelper.ToBoolean (1872), TStringHelper.ToDouble
(1873), TStringHelper.ToExtended (1873), TStringHelper.ToInteger (1874), TStringHelper.ToSingle
(1874)
76.99.21 TStringHelper.ToInteger
Synopsis: Convert string to 32-bit signed integer
Declaration: class function ToInteger(const S: string) : Integer; Overload; Static
function ToInteger : Integer; Overload
Visibility: public
Description: ToInteger returns the contents of the string S as a 32-bit signed integer value (if possible). It uses
StrToInt64 (1751) to convert the value to an 64-bit sized integer value.
Errors: If the string contains a value that cannot be translated to an integer value, an EConvertError (1780)
exception may be raised.
76.99.22 TStringHelper.ToSingle
Synopsis: Convert string to single-sized floating point value
76.99.23 TStringHelper.UpperCase
Synopsis: Return uppercase version of a string
Declaration: class function UpperCase(const S: string) : string; Overload; Static
Visibility: public
Description: UpperCase returns an uppercase version of the string S.
See also: #rtl.sysutils.UpperCase (1770)
1874
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.99.24 TStringHelper.CompareTo
Synopsis: Compare string to another
76.99.25 TStringHelper.Contains
Synopsis: Check is the string contains another
Declaration: function Contains(const AValue: string) : Boolean
Visibility: public
Description: Contains returns True if the string value contains AValue, i.e. it returns Pos(Self,AValue)>0.
See also: Pos (1509)
76.99.26 TStringHelper.CopyTo
Synopsis: Copy part of the string to an array of characters
76.99.27 TStringHelper.CountChar
Synopsis: Count the occurrences of a character
1875
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.99.28 TStringHelper.DeQuotedString
Synopsis: Return a dequoted version of the string
76.99.29 TStringHelper.EndsWith
Synopsis: Check if the string is ended by another.
Declaration: function EndsWith(const AValue: string) : Boolean; Overload
function EndsWith(const AValue: string; IgnoreCase: Boolean) : Boolean
; Overload
Visibility: public
Description: EndsWith returns True if the string (Self) ends on AValue, i.e. whether the last characters in
Self are the ones found in AValue. The comparison is done case insensitively depending on the
IgnoreCase argument (which is false by default).
See also: CompareText (1652), TStringHelper.EndsText (1870)
76.99.30 TStringHelper.GetHashCode
Synopsis: Get a hash code for the string
Declaration: function GetHashCode : Integer
Visibility: public
76.99.31 TStringHelper.IndexOf
Synopsis: Find the position (index) of a string or character
Declaration: function IndexOf(AValue: Char) : SizeInt; Overload
function IndexOf(const AValue: string) : SizeInt; Overload
function IndexOf(AValue: Char; StartIndex: SizeInt) : SizeInt; Overload
function IndexOf(const AValue: string; StartIndex: SizeInt) : SizeInt
; Overload
function IndexOf(AValue: Char; StartIndex: SizeInt; ACount: SizeInt)
: SizeInt; Overload
function IndexOf(const AValue: string; StartIndex: SizeInt;
ACount: SizeInt) : SizeInt; Overload
Visibility: public
1876
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Description: IndexOf returns the zero-based index of AValue in the string (Self). The value to search for
can be a character or string (AValue).
if no match is found, -1 is returned.
The search can be refined by specifying a (zero based) index StartIndex. When specified, the
search will start at the given character. Not specifying this option is equivalent to specifying zero.
If ACount is given, at most ACount characters in the source string will be considered for the search.
This count includes the starting character. Not specifying this argument is equivalent to specifying
the amount of remaining characters.
See also: Pos (1509), TStringHelper.IndexOfUnQuoted (1877), TStringHelper.IndexOfAny (1877), TStringHelper.IndexOfAnyUnquoted
(1878), TStringHelper.LastIndexOf (1879), TStringHelper.LastIndexOfAny (1880)
76.99.32 TStringHelper.IndexOfUnQuoted
Synopsis: Index of string, skipping quoted parts.
Declaration: function IndexOfUnQuoted(const AValue: string; StartQuote: Char;
EndQuote: Char; StartIndex: SizeInt) : SizeInt
; Overload
Visibility: public
Description: IndexOfUnQuoted will return the zero-based index of AValue in the string (Self), but disre-
gards any quoted parts in the string. A quoted part is determined by a starting StartQuote and
end-quote character EndQuote. The search starts at (zero-based) position StartIndex, which is
by default 0.
See also: Pos (1509), TStringHelper.IndexOf (1876), TStringHelper.IndexOfAny (1877), TStringHelper.IndexOfAnyUnquoted
(1878), TStringHelper.LastIndexOf (1879), TStringHelper.LastIndexOfAny (1880)
76.99.33 TStringHelper.IndexOfAny
Synopsis: Find the position (index) of any string or character in a list.
1877
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
The search can be refined by specifying a (zero-based) index StartIndex. When specified, the
search will start at the given character. Not specifying this option is equivalent to specifying zero.
If ACount is given, at most ACount characters in the source string will be considered for the search.
This count includes the starting character. Not specifying this argument is equivalent to specifying
the amount of remaining characters.
If AMatch is specified, on successful return it will contain the index of the element in the array that
contains the found match.
See also: Pos (1509), TStringHelper.IndexOf (1876), TStringHelper.IndexOfUnquoted (1877), TStringHelper.IndexOfAnyUnquoted
(1878), TStringHelper.LastIndexOf (1879), TStringHelper.LastIndexOfAny (1880)
76.99.34 TStringHelper.IndexOfAnyUnquoted
Synopsis: Find the position (index) of any string or character in a list.
Declaration: function IndexOfAnyUnquoted(const AnyOf: Array of Char;
StartQuote: Char; EndQuote: Char) : SizeInt
; Overload
function IndexOfAnyUnquoted(const AnyOf: Array of Char;
StartQuote: Char; EndQuote: Char;
StartIndex: SizeInt) : SizeInt; Overload
function IndexOfAnyUnquoted(const AnyOf: Array of Char;
StartQuote: Char; EndQuote: Char;
StartIndex: SizeInt; ACount: SizeInt)
: SizeInt; Overload
function IndexOfAnyUnquoted(const AnyOf: Array of string;
StartQuote: Char; EndQuote: Char;
StartIndex: SizeInt; out Matched: SizeInt)
: SizeInt; Overload
Visibility: public
Description: IndexOfAnyUnQuoted returns the zero-based index of the first matching element in an array
of characters or strings (AnyOf), but disregards any quoted parts in the string. A quoted part is
determined by a starting StartQuote and end-quote character EndQuote.
if no match is found, -1 is returned.
The search can be refined by specifying a (zero-based) index StartIndex. When specified, the
search will start at the given character. Not specifying this option is equivalent to specifying zero.
If ACount is given, at most ACount characters in the source string will be considered for the search.
This count includes the starting character. Not specifying this argument is equivalent to specifying
the amount of remaining characters.
If AMatch is specified, on successful return it will contain the index of the element in the array that
contains the found match.
See also: Pos (1509), TStringHelper.IndexOf (1876), TStringHelper.IndexOfUnquoted (1877), TStringHelper.IndexOfAny
(1877), TStringHelper.LastIndexOf (1879), TStringHelper.LastIndexOfAny (1880)
76.99.35 TStringHelper.Insert
Synopsis: Insert a string at a given position
1878
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Visibility: public
Description: Insert inserts the string AValue in a string (Self) at the (zero-based) position StartIndex.
It returns the resulting string (Self). If StartIndex is less than zero, it is set to zero. If
StartIndex is higher than the length, AValue is appended to the string.
See also: Insert (1487)
76.99.36 TStringHelper.IsDelimiter
Synopsis: Check whether a character at a given position is a delimiter
Declaration: function IsDelimiter(const Delimiters: string; Index: SizeInt) : Boolean
Visibility: public
Description: IsDelimiter returns True if the character at (zero-based) position Index is one of the delimiter
characters in Delimiters. If Index is out of range, False is returned.
See also: IsDelimiter (1718)
76.99.37 TStringHelper.IsEmpty
Synopsis: Check whether the string is empty.
Declaration: function IsEmpty : Boolean
Visibility: public
Description: IsEmpty returns True if the string has length zero.
See also: TStringHelper.IsNullOrEmpty (1871), TStringHelper.Length (1886), Length (1494)
76.99.38 TStringHelper.LastDelimiter
Synopsis: Return the last position of one of a series of delimiters
Declaration: function LastDelimiter(const Delims: string) : SizeInt
Visibility: public
Description: LastDelimiter searches the string backwards for an occurrence of one of the characters in
Delims, and returns the corresponding (zero-based) index in the string. If no occurrence is found,
-1 is returned.
See also: TStringHelper.isDelimiter (1879), TStringHelper.IndexOf (1876), TStringHelper.IndexOfAny (1877),
TStringHelper.LastIndexOf (1879), TStringHelper.LastIndexOfAny (1880)
76.99.39 TStringHelper.LastIndexOf
Synopsis: Find the last position (index) of a string or character
Declaration: function LastIndexOf(AValue: Char) : SizeInt; Overload
function LastIndexOf(const AValue: string) : SizeInt; Overload
function LastIndexOf(AValue: Char; AStartIndex: SizeInt) : SizeInt
; Overload
function LastIndexOf(const AValue: string; AStartIndex: SizeInt)
1879
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
: SizeInt; Overload
function LastIndexOf(AValue: Char; AStartIndex: SizeInt;
ACount: SizeInt) : SizeInt; Overload
function LastIndexOf(const AValue: string; AStartIndex: SizeInt;
ACount: SizeInt) : SizeInt; Overload
Visibility: public
Description: LasyIndexOf returns the zero-based index of the last occurrence of AValue in the string (Self).
The value to search for can be a character or string (AValue).
if no match is found, -1 is returned.
The search can be refined by specifying a (zero based) index StartIndex. When specified, the
search will start at the given character and proceeds towards the beginning of the string. Not speci-
fying this option is equivalent to specifying length-1.
If ACount is given, at most ACount characters in the source string will be considered for the search.
This count includes the starting character. Not specifying this argument is equivalent to specifying
StartIndex+1.
See also: Pos (1509), TStringHelper.IndexOfUnQuoted (1877), TStringHelper.IndexOfAny (1877), TStringHelper.IndexOfAnyUnquoted
(1878), TStringHelper.IndexOf (1876), TStringHelper.LastIndexOfAny (1880)
76.99.40 TStringHelper.LastIndexOfAny
Synopsis: Find the last position (index) of any string or character in a list.
Declaration: function LastIndexOfAny(const AnyOf: Array of Char) : SizeInt; Overload
function LastIndexOfAny(const AnyOf: Array of Char;
AStartIndex: SizeInt) : SizeInt; Overload
function LastIndexOfAny(const AnyOf: Array of Char;
AStartIndex: SizeInt; ACount: SizeInt) : SizeInt
; Overload
Visibility: public
Description: LastIndexOfAny returns the zero-based index of the first matching element in an array of char-
acters or strings (AnyOf).
if no match is found, -1 is returned.
The search can be refined by specifying a (zero-based) index StartIndex. When specified, the
search will start at the given character and proceeds to the start of the string. Not specifying this
option is equivalent to specifying Length-1.
If ACount is given, at most ACount characters in the source string will be considered for the search.
This count includes the starting character. Not specifying this argument is equivalent to specifying
StartIndex+1.
See also: Pos (1509), TStringHelper.IndexOf (1876), TStringHelper.IndexOfUnquoted (1877), TStringHelper.IndexOfAnyUnquoted
(1878), TStringHelper.LastIndexOf (1879), TStringHelper.IndexOfAny (1877)
76.99.41 TStringHelper.PadLeft
Synopsis: Pad the string on the left with an indicated character
Declaration: function PadLeft(ATotalWidth: SizeInt) : string; Overload
function PadLeft(ATotalWidth: SizeInt; PaddingChar: Char) : string
; Overload
1880
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Visibility: public
Description: PadLeft pads the string (Self) on the left (i.e. at the beginning) till it reaches length ATotalWidth
with character PaddingChar. If PaddingChar is omitted, a space is used.
See also: TStringHelper.PadRight (1881)
76.99.42 TStringHelper.PadRight
Synopsis: Pad the string on the right with an indicated character
Declaration: function PadRight(ATotalWidth: SizeInt) : string; Overload
function PadRight(ATotalWidth: SizeInt; PaddingChar: Char) : string
; Overload
Visibility: public
Description: PadLeft pads the string (Self) on the right (i.e. at the end) till it reaches length ATotalWidth
with character PaddingChar. If PaddingChar is omitted, a space is used.
See also: TStringHelper.PadLeft (1880)
76.99.43 TStringHelper.QuotedString
Synopsis: Return a quoted version of the string
Declaration: function QuotedString : string; Overload
function QuotedString(const AQuoteChar: Char) : string; Overload
Visibility: public
Description: QuotedString returns a quoted version of the string (Self). The quote character is specified in
AQuoteChar, which by default is the double quote ("). Any existing quote characters occurrences
will be doubled.
See also: QuotedStr (1724), AnsiQuotedStr (1636)
76.99.44 TStringHelper.Remove
Synopsis: Remove a number of characters from the string
Declaration: function Remove(StartIndex: SizeInt) : string; Overload
function Remove(StartIndex: SizeInt; ACount: SizeInt) : string
; Overload
Visibility: public
Description: Remove removes ACount characters from the string, starting at (zero-based) index StartIndex.
If ACount is omitted, all remaining characters are removed.
See also: Delete (1444), TStringHelper.Replace (1882), TStringHelper.Insert (1878)
1881
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.99.45 TStringHelper.Replace
Synopsis: Replace occurrences of one string with another.
76.99.46 TStringHelper.Split
Synopsis: Split a string in a number of parts
Declaration: function Split(const Separators: Array of Char) : TStringArray
; Overload
function Split(const Separators: Array of Char; ACount: SizeInt)
: TStringArray; Overload
function Split(const Separators: Array of Char;
Options: TStringSplitOptions) : TStringArray; Overload
function Split(const Separators: Array of Char; ACount: SizeInt;
Options: TStringSplitOptions) : TStringArray; Overload
function Split(const Separators: Array of string) : TStringArray
; Overload
function Split(const Separators: Array of string; ACount: SizeInt)
: TStringArray; Overload
function Split(const Separators: Array of string;
Options: TStringSplitOptions) : TStringArray; Overload
function Split(const Separators: Array of string; ACount: SizeInt;
Options: TStringSplitOptions) : TStringArray; Overload
function Split(const Separators: Array of Char; AQuote: Char)
: TStringArray; Overload
function Split(const Separators: Array of Char; AQuoteStart: Char;
AQuoteEnd: Char) : TStringArray; Overload
function Split(const Separators: Array of Char; AQuoteStart: Char;
AQuoteEnd: Char; Options: TStringSplitOptions)
: TStringArray; Overload
function Split(const Separators: Array of Char; AQuoteStart: Char;
AQuoteEnd: Char; ACount: SizeInt) : TStringArray
; Overload
function Split(const Separators: Array of Char; AQuoteStart: Char;
AQuoteEnd: Char; ACount: SizeInt;
Options: TStringSplitOptions) : TStringArray; Overload
1882
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.99.47 TStringHelper.StartsWith
Synopsis: Check if one string starts with another
Declaration: function StartsWith(const AValue: string) : Boolean; Overload
function StartsWith(const AValue: string; IgnoreCase: Boolean) : Boolean
; Overload
Visibility: public
Description: StartsWith will return True if the first characters of the string (Self) equal the string AValue.
If IgnoreCase is True, then the comparison is done case insensitive. The default is to compare
strings case sensitively.
See also: TStringHelper.EndsWith (1876)
76.99.48 TStringHelper.Substring
Synopsis: Return a part of the string
Declaration: function Substring(AStartIndex: SizeInt) : string; Overload
function Substring(AStartIndex: SizeInt; ALen: SizeInt) : string
; Overload
Visibility: public
1883
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Description: SubString returns the portion of the string starting at (zero-based) index AStartIndex with
length ALen. If ALen is omitted, then all remaining characters are returned.
See also: TStringHelper.Insert (1878), Copy (1440), TStringHelper.ToCharArray (1884)
76.99.49 TStringHelper.ToCharArray
Synopsis: Return the string as an array of characters.
Declaration: function ToCharArray : TCharArray; Overload
function ToCharArray(AStartIndex: SizeInt; ALen: SizeInt) : TCharArray
; Overload
Visibility: public
Description: ToCharArray returns part of the string (Self) as an array of characters. The characters are
copied starting at (zero-based) index AStartIndex and at most ALen characters are copied. If
AStartIndex and ALen are omitted, all the characters are returned.
Errors: If AStartIndex is less than zero, an EAccessViolation (1779) exception may be raised.
See also: TStringHelper.Substring (1883), TStringHelper.Insert (1878), Copy (1440)
76.99.50 TStringHelper.ToLower
Synopsis: Convert to lowercase
Declaration: function ToLower : string; Overload
Visibility: public
Description: ToLower returns a lowercase version of the string.
See also: TStringHelper.LowerCase (1872), TStringHelper.ToUpper (1884), TStringHelper.ToUpperInvariant
(1885)
76.99.51 TStringHelper.ToLowerInvariant
Synopsis: Convert to lowercase
Declaration: function ToLowerInvariant : string
Visibility: public
Description: ToLowerInvariant is equal to TStringHelper.ToLower (1884)
See also: TStringHelper.ToLower (1884), TStringHelper.ToUpper (1884), TStringHelper.ToUpperInvariant
(1885)
76.99.52 TStringHelper.ToUpper
Synopsis: Convert to uppercase.
Declaration: function ToUpper : string; Overload
Visibility: public
Description: >ToUpper returns an uppercase version of the string.
See also: TStringHelper.ToLower (1884), TStringHelper.ToLowerInvariant (1884), TStringHelper.ToUpperInvariant
(1885)
1884
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.99.53 TStringHelper.ToUpperInvariant
Synopsis: Convert to uppercase
76.99.54 TStringHelper.Trim
Synopsis: Strips a set of trim characters from the beginning and end of the string.
Declaration: function Trim : string; Overload
function Trim(const ATrimChars: Array of Char) : string; Overload
Visibility: public
Description: Trim returns the string (Self), removing all characters occurring in ATrimChars from the start
and end of the string. If ATrimChars is not specified, all characters with ASCII code 32 or lower
are assumed.
76.99.55 TStringHelper.TrimLeft
Synopsis: Strips a set of trim characters from the beginning of the string.
Declaration: function TrimLeft : string; Overload
function TrimLeft(const ATrimChars: Array of Char) : string; Overload
Visibility: public
Description: Trim returns the string (Self), removing all characters occurring in ATrimChars from the start
of the string. If ATrimChars is not specified, all characters with ASCII code 32 or lower are
assumed.
76.99.56 TStringHelper.TrimRight
Synopsis: Strips a set of trim characters from the end of the string.
Declaration: function TrimRight : string; Overload
function TrimRight(const ATrimChars: Array of Char) : string; Overload
Visibility: public
Description: Trim returns the string (Self), removing all characters occurring in ATrimChars from the end of
the string. If ATrimChars is not specified, all characters with ASCII code 32 or lower are assumed.
1885
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.99.57 TStringHelper.TrimEnd
Synopsis: Alias for TrimRight
Declaration: function TrimEnd(const ATrimChars: Array of Char) : string
Visibility: public
Description: TrimEnd is an alias for TStringHelper.TrimRight (1885)
See also: TStringHelper.TrimRight (1885), TStringHelper.TrimStart (1886)
76.99.58 TStringHelper.TrimStart
Synopsis: Alias for TrimLeft
Declaration: function TrimStart(const ATrimChars: Array of Char) : string
Visibility: public
Description: TrimStart is an alias for TStringHelper.TrimLeft (1885)
See also: TStringHelper.TrimEnd (1886), TStringHelper.TrimLeft (1885)
76.99.59 TStringHelper.Chars
Synopsis: Zero-based Indexed access to the characters in the string.
Declaration: Property Chars[AIndex: SizeInt]: Char
Visibility: public
Access: Read
Description: Chars provides zero-based indexed access to the characters in the string. The first character is at
index 0, the last at Length-1.
See also: TStringHelper.Length (1886)
76.99.60 TStringHelper.Length
Synopsis: Return the length of the string
Declaration: Property &Length : SizeInt
Visibility: public
Access: Read
Description: Length returns the length (in bytes for single-byte strings) of the string.
See also: Length (1494)
76.100 TUnicodeEncoding
76.100.1 Description
TUnicodeEncoding is the encoding class used to represent the UTF-16 encoding.
1886
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.100.3 TUnicodeEncoding.Create
Synopsis: Create a new instance of the TUnicodeEncoding class
Declaration: constructor Create; Virtual
Visibility: public
Description: Create creates a new instance of the TUnicodeEncoding class and sets the codepage to CP_UTF16.
See also: TEncoding.CodePage (1817), TEncoding (1813)
76.100.4 TUnicodeEncoding.Clone
Synopsis: Clone a TUnicodeEncoding instance
Declaration: function Clone : TEncoding; Override
Visibility: public
Description: CLone overrides TEncoding.Clone (1814) to provide a clone of the TUnicodeEncoding in-
stance.
See also: TEncoding.Clone (1814)
76.100.5 TUnicodeEncoding.GetMaxByteCount
Synopsis: Return max number of bytes needed to represent a string
Declaration: function GetMaxByteCount(CharCount: Integer) : Integer; Override
Visibility: public
Description: GetMaxByteCount overrides TEncoding.GetMaxByteCount (1816) to return the maximum num-
ber of bytes needed to represent a string.
See also: TEncoding.GetMaxByteCount (1816)
76.100.6 TUnicodeEncoding.GetMaxCharCount
Synopsis: Return max number of characters that can be represented by an array of bytes
Declaration: function GetMaxCharCount(ByteCount: Integer) : Integer; Override
Visibility: public
Description: GetMaxCharCount overrides TEncoding.GetMaxCharCount (1816) to return the maximum num-
ber of bytes needed to represent a string.
See also: TEncoding.GetMaxCharCount (1816)
1887
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.100.7 TUnicodeEncoding.GetPreamble
Synopsis: Return BOM marker bytes
Declaration: function GetPreamble : TBytes; Override
Visibility: public
Description: GetPreamble overrides TEncoding.GetPreamble (1816) to return the 2 UTF-16 BOM Marker
bytes ($FF,$FE).
See also: TEncoding.GetPreamble (1816)
76.101 TUNICODESTRINGBUILDER
76.101.1 Method overview
Page Method Description
1888 Append
1889 AppendFormat
1889 AppendLine
1889 Clear
1889 CopyTo
1888 Create
1890 EnsureCapacity
1890 Equals
1890 Insert
1891 Remove
1891 Replace
1891 ToString
76.101.3 TUNICODESTRINGBUILDER.Create
Declaration: constructor Create
constructor Create(aCapacity: Integer)
constructor Create(const AValue: UNICODESTRING)
constructor Create(aCapacity: Integer; aMaxCapacity: Integer)
constructor Create(const AValue: UNICODESTRING; aCapacity: Integer)
constructor Create(const AValue: UNICODESTRING; StartIndex: Integer;
aLength: Integer; aCapacity: Integer)
Visibility: public
76.101.4 TUNICODESTRINGBUILDER.Append
Declaration: function Append(const AValue: Boolean) : TUNICODESTRINGBUILDER
1888
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.101.5 TUNICODESTRINGBUILDER.AppendFormat
Declaration: function AppendFormat(const Fmt: UNICODESTRING;
const Args: Array of const) : TUNICODESTRINGBUILDER
Visibility: public
76.101.6 TUNICODESTRINGBUILDER.AppendLine
Declaration: function AppendLine : TUNICODESTRINGBUILDER
function AppendLine(const AValue: RawByteString) : TUNICODESTRINGBUILDER
Visibility: public
76.101.7 TUNICODESTRINGBUILDER.Clear
Declaration: procedure Clear
Visibility: public
76.101.8 TUNICODESTRINGBUILDER.CopyTo
Declaration: procedure CopyTo(SourceIndex: Integer;
var Destination: Array of WideChar;
DestinationIndex: Integer; Count: Integer)
1889
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Visibility: public
76.101.9 TUNICODESTRINGBUILDER.EnsureCapacity
Declaration: function EnsureCapacity(aCapacity: Integer) : Integer
Visibility: public
76.101.10 TUNICODESTRINGBUILDER.Equals
Declaration: function Equals(StringBuilder: TUNICODESTRINGBUILDER) : Boolean
; Reintroduce
Visibility: public
76.101.11 TUNICODESTRINGBUILDER.Insert
Declaration: function Insert(Index: Integer; const AValue: Boolean)
: TUNICODESTRINGBUILDER
function Insert(Index: Integer; const AValue: Byte)
: TUNICODESTRINGBUILDER
function Insert(Index: Integer; const AValue: WideChar)
: TUNICODESTRINGBUILDER
function Insert(Index: Integer; const AValue: Currency)
: TUNICODESTRINGBUILDER
function Insert(Index: Integer; const AValue: Double)
: TUNICODESTRINGBUILDER
function Insert(Index: Integer; const AValue: SmallInt)
: TUNICODESTRINGBUILDER
function Insert(Index: Integer; const AValue: LongInt)
: TUNICODESTRINGBUILDER
function Insert(Index: Integer; const AValue: Array of WideChar)
: TUNICODESTRINGBUILDER
function Insert(Index: Integer; const AValue: Int64)
: TUNICODESTRINGBUILDER
function Insert(Index: Integer; const AValue: TObject)
: TUNICODESTRINGBUILDER
function Insert(Index: Integer; const AValue: ShortInt)
: TUNICODESTRINGBUILDER
function Insert(Index: Integer; const AValue: Single)
: TUNICODESTRINGBUILDER
function Insert(Index: Integer; const AValue: UNICODESTRING)
: TUNICODESTRINGBUILDER
function Insert(Index: Integer; const AValue: Word)
: TUNICODESTRINGBUILDER
function Insert(Index: Integer; const AValue: Cardinal)
: TUNICODESTRINGBUILDER
function Insert(Index: Integer; const AValue: UInt64)
: TUNICODESTRINGBUILDER
function Insert(Index: Integer; const AValue: UNICODESTRING;
const aRepeatCount: Integer) : TUNICODESTRINGBUILDER
function Insert(Index: Integer; const AValue: Array of WideChar;
startIndex: Integer; SBCharCount: Integer)
1890
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
: TUNICODESTRINGBUILDER
Visibility: public
76.101.12 TUNICODESTRINGBUILDER.Remove
Declaration: function Remove(StartIndex: Integer; RemLength: Integer)
: TUNICODESTRINGBUILDER
Visibility: public
76.101.13 TUNICODESTRINGBUILDER.Replace
Declaration: function Replace(const OldChar: WideChar; const NewChar: WideChar)
: TUNICODESTRINGBUILDER
function Replace(const OldChar: WideChar; const NewChar: WideChar;
StartIndex: Integer; Count: Integer)
: TUNICODESTRINGBUILDER
function Replace(const OldValue: UNICODESTRING;
const NewValue: UNICODESTRING) : TUNICODESTRINGBUILDER
function Replace(const OldValue: UNICODESTRING;
const NewValue: UNICODESTRING; StartIndex: Integer;
Count: Integer) : TUNICODESTRINGBUILDER
Visibility: public
76.101.14 TUNICODESTRINGBUILDER.ToString
Declaration: function ToString : UNICODESTRING
function ToString(aStartIndex: Integer; aLength: Integer)
: UNICODESTRING; Reintroduce
Visibility: public
76.101.15 TUNICODESTRINGBUILDER.Chars
Declaration: Property Chars[index: Integer]: WideChar; default
Visibility: public
Access: Read,Write
76.101.16 TUNICODESTRINGBUILDER.Length
Declaration: Property &Length : Integer
Visibility: public
Access: Read,Write
1891
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.101.17 TUNICODESTRINGBUILDER.Capacity
Declaration: Property Capacity : Integer
Visibility: public
Access: Read,Write
76.101.18 TUNICODESTRINGBUILDER.MaxCapacity
Declaration: Property MaxCapacity : Integer
Visibility: public
Access: Read
76.102 TUTF7Encoding
76.102.1 Description
TUTF7Encoding is the encoding class used to represent the UTF7 encoding. This encoding is not
so often used, and the class is provided mostly for completeness.
76.102.3 TUTF7Encoding.Create
Synopsis: Create a new instance of the TUTF7Encoding class
Declaration: constructor Create; Override
Visibility: public
Description: Create creates a new instance of the TUTF7Encoding class and sets the codepage to CP_UTF7.
See also: TEncoding.CodePage (1817), TEncoding (1813)
76.102.4 TUTF7Encoding.Clone
Synopsis: Clone a TUTF7Encoding instance
Declaration: function Clone : TEncoding; Override
Visibility: public
Description: Clone overrides TEncoding.Clone (1814) to provide a clone of the TUTF7Encoding instance.
See also: TEncoding.Clone (1814)
1892
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.102.5 TUTF7Encoding.GetMaxByteCount
Synopsis: Return max number of bytes needed to represent a string
Declaration: function GetMaxByteCount(CharCount: Integer) : Integer; Override
Visibility: public
Description: GetMaxByteCount overrides TEncoding.GetMaxByteCount (1816) to return the maximum num-
ber of bytes needed to represent a string.
See also: TEncoding.GetMaxByteCount (1816)
76.102.6 TUTF7Encoding.GetMaxCharCount
Synopsis: Return max number of characters that can be represented by an array of bytes
Declaration: function GetMaxCharCount(ByteCount: Integer) : Integer; Override
Visibility: public
Description: GetMaxCharCount overrides TEncoding.GetMaxCharCount (1816) to return the maximum num-
ber of bytes needed to represent a string.
See also: TEncoding.GetMaxCharCount (1816)
76.103 TUTF8Encoding
76.103.1 Description
TUTF8Encoding is the encoding class used to represent the UTF-8 encoding.
76.103.3 TUTF8Encoding.Create
Synopsis: Create a new instance of the TUTF8Encoding class
Declaration: constructor Create; Override
Visibility: public
Description: Create creates a new instance of the TUTF8Encoding class and sets the codepage to CP_UTF8.
See also: TEncoding.CodePage (1817), TEncoding (1813)
1893
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.103.4 TUTF8Encoding.Clone
Synopsis: Clone a TUTF8Encoding instance
76.103.5 TUTF8Encoding.GetMaxByteCount
Synopsis: Return max number of bytes needed to represent a string
Declaration: function GetMaxByteCount(CharCount: Integer) : Integer; Override
Visibility: public
76.103.6 TUTF8Encoding.GetMaxCharCount
Synopsis: Return max number of characters that can be represented by an array of bytes
Declaration: function GetMaxCharCount(ByteCount: Integer) : Integer; Override
Visibility: public
Description: GetMaxCharCount overrides TEncoding.GetMaxCharCount (1816) to return the maximum num-
ber of bytes needed to represent a string.
See also: TEncoding.GetMaxCharCount (1816)
76.103.7 TUTF8Encoding.GetPreamble
Synopsis: Return BOM marker bytes
1894
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.104 TWordBoolHelper
76.104.1 Description
TWordBoolHelper is a helper type for the WordBool type. It contains mostly conversion rou-
tines to and from other types.
See also: TStringHelper (1865), TShortIntHelper (1850), TSmallIntHelper (1862), TWordHelper (1896), TCar-
dinalHelper (1804), TIntegerHelper (1831), TInt64Helper (1828), TQWordHelper (1847), TNa-
tiveIntHelper (1840), TByteHelper (1800), TByteBoolHelper (1799), TWordBoolHelper (1895), TLong-
BoolHelper (1834)
76.104.3 TWordBoolHelper.Parse
Synopsis: Convert string value to WordBool value.
Declaration: class function Parse(const S: string) : Boolean; Static
Visibility: public
Description: Parse attempts to convert the string S to a WordBool value. It uses the StrToBool (1745) function
to perform the conversion.
Errors: If S does not contain a valid string representation, then an EConvertError (1780) exception is raised.
See also: TWordBoolHelper.TryToParse (1896), TWordBoolHelper.ToString (1895), TWordBoolHelper.ToInteger
(1896)
76.104.4 TWordBoolHelper.Size
Synopsis: Return the size (in bytes) of the
Declaration: class function Size : Integer; Static
Visibility: public
Description: Size returns the size (in bytes) of the WordBool value. This is equivalent to SizeOf(WordBool).
See also: SizeOf (1538)
76.104.5 TWordBoolHelper.ToString
Synopsis: Convert a WordBool value to string.
Declaration: class function ToString(const AValue: Boolean;
UseBoolStrs: TUseBoolStrs) : string; Overload
; Static
function ToString(UseBoolStrs: TUseBoolStrs) : string; Overload
1895
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Visibility: public
Description: ToString will, in the class method version, convert the AValue WordBool to a string represen-
tation. In the function method version the WordBool value itself (Self) will be converted.
If the UseBoolStrs parameter equals TUseBoolStrs.True, then the string representation will
use the WordBool strings BoolStrs (1598). The default value for UseBoolStrs is TUseBoolStrs.False.
The conversion is done using the BoolTostr (1647) function.
See also: BoolStrs (1598), BoolToStr (1647)
76.104.6 TWordBoolHelper.TryToParse
Synopsis: Try to convert a string to a WordBool value
76.104.7 TWordBoolHelper.ToInteger
Synopsis: Convert to an integer value
76.105 TWordHelper
76.105.1 Description
TWordHelper contains some auxiliary routines for a Word-typed ordinal value. It consists mainly
of conversion routines to and from other types.
See also: TStringHelper (1865), TShortIntHelper (1850), TSmallIntHelper (1862), TByteHelper (1800), TCar-
dinalHelper (1804), TIntegerHelper (1831), TInt64Helper (1828), TQWordHelper (1847), TNa-
tiveIntHelper (1840), TNativeUIntHelper (1844)
1896
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.105.3 TWordHelper.Parse
Synopsis: Convert from a string
Declaration: class function Parse(const AString: string) : Word; Static
Visibility: public
Description: Parse will attempt to convert the string AString to a Word value. It uses the StrToInt (1750)
function to perform the conversion, so no localization is taken into account.
Errors: If the string does not contain a valid Word value, an EConvertError (1780) exception is raised.
See also: TWordHelper.ToString (1897), TWordHelper.TryParse (1898), StrToInt (1750)
76.105.4 TWordHelper.Size
Synopsis: Size, in bytes, of the Word value
Declaration: class function Size : Integer; Static
Visibility: public
Description: Size returns the size (in Words) of the Word value. This is equivalent to SizeOf(Word).
Errors: None.
See also: SizeOf (1538)
76.105.5 TWordHelper.ToString
Synopsis: Convert the value to string
1897
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Description: ToString will, in the class function variant of this method, convert AValue to a string represen-
tation. In the regular method overloaded version of ToString, the Word value itself is used. The
IntToStr (1717) function is used to do the conversion.
See also: TWordHelper.Parse (1897), IntToStr (1717)
76.105.6 TWordHelper.TryParse
Synopsis: Try to convert a string to a Word, report success or failure
Declaration: class function TryParse(const AString: string; out AValue: Word)
: Boolean; Static
Visibility: public
Description: TryParse attempts to convert the string AString to a Word, and reports the success of the
attempt. If the attempt is successful, then True is returned, and the actual value of the Word is
returned in AValue.
It uses the val (1598) function to perform the conversion, so no localization is taken into account.
76.105.7 TWordHelper.ToBoolean
Synopsis: Convert to a boolean value
Declaration: function ToBoolean : Boolean
Visibility: public
Description: ToBoolean converts the Word value to a boolean: it returns True if the value is nonzero, False
if it is zero.
See also: TWordHelper.ToSingle (1899), TWordHelper.ToDouble (1898), TWordHelper.ToExtended (1898),
TWordHelper.ToString (1897), TWordHelper.ToHexString (1899)
76.105.8 TWordHelper.ToDouble
Synopsis: Convert to a double-sized floating point value
Declaration: function ToDouble : Double
Visibility: public
Description: ToDouble converts the Word value to a double-sized floating point value.
See also: TWordHelper.ToBoolean (1898), TWordHelper.ToExtended (1898), TWordHelper.ToSingle (1899),
TWordHelper.ToString (1897), TWordHelper.ToHexString (1899)
76.105.9 TWordHelper.ToExtended
Synopsis: Convert to an extended-sized floating point value
1898
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
Description: ToDouble converts the Word value to an extended-sized floating point value.
See also: TWordHelper.ToBoolean (1898), TWordHelper.ToSingle (1899), TWordHelper.ToDouble (1898),
TWordHelper.ToString (1897), TWordHelper.ToHexString (1899)
76.105.10 TWordHelper.ToBinString
Declaration: function ToBinString : string
Visibility: public
76.105.11 TWordHelper.ToHexString
Synopsis: Convert to a hexadecimal string representation
Declaration: function ToHexString(const AMinDigits: Integer) : string; Overload
function ToHexString : string; Overload
Visibility: public
Description: ToHexString converts the Word value to a hexadecimal string representation. The AMinDigits
argument specifies the minimal number of characters in the resulting string. The string will be left-
padded with zeroes if the representation contains less than AMinDigits characters.
76.105.12 TWordHelper.ToSingle
Synopsis: Convert to an single-sized floating point value
76.105.13 TWordHelper.SetBit
Declaration: function SetBit(const Index: TWordBitIndex) : Word
Visibility: public
76.105.14 TWordHelper.ClearBit
Declaration: function ClearBit(const Index: TWordBitIndex) : Word
Visibility: public
1899
CHAPTER 76. REFERENCE FOR UNIT ’SYSUTILS’
76.105.15 TWordHelper.ToggleBit
Declaration: function ToggleBit(const Index: TWordBitIndex) : Word
Visibility: public
76.105.16 TWordHelper.TestBit
Declaration: function TestBit(const Index: TWordBitIndex) : Boolean
Visibility: public
1900
Chapter 77
Name Page
System 1331
77.2 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.
E_INVALIDARG = HRESULT($80070057)
LOCK_EXCLUSIVE = 2
LOCK_ONLYONCE = 4
1901
CHAPTER 77. REFERENCE FOR UNIT ’TYPES’
LOCK_WRITE = 1
STATFLAG_DEFAULT = 0
STATFLAG_NONAME = 1
STATFLAG_NOOPEN = 2
STGTY_LOCKBYTES = 3
STGTY_PROPERTY = 4
STGTY_STORAGE = 1
STGTY_STREAM = 2
STG_E_ABNORMALAPIEXIT = HRESULT($800300FA)
STG_E_ACCESSDENIED = HRESULT($80030005)
STG_E_BADBASEADDRESS = HRESULT($80030110)
STG_E_CANTSAVE = HRESULT($80030103)
STG_E_DISKISWRITEPROTECTED = HRESULT($80030013)
1902
CHAPTER 77. REFERENCE FOR UNIT ’TYPES’
STG_E_DOCFILECORRUPT = HRESULT($80030109)
STG_E_EXTANTMARSHALLINGS = HRESULT($80030108)
STG_E_FILEALREADYEXISTS = HRESULT($80030050)
STG_E_FILENOTFOUND = HRESULT($80030002)
STG_E_INCOMPLETE = HRESULT($80030201)
STG_E_INSUFFICIENTMEMORY = HRESULT($80030008)
STG_E_INUSE = HRESULT($80030100)
STG_E_INVALIDFLAG = HRESULT($800300FF)
STG_E_INVALIDFUNCTION = HRESULT($80030001)
STG_E_INVALIDHANDLE = HRESULT($80030006)
STG_E_INVALIDHEADER = HRESULT($800300FB)
STG_E_INVALIDNAME = HRESULT($800300FC)
STG_E_INVALIDPARAMETER = HRESULT($80030057)
1903
CHAPTER 77. REFERENCE FOR UNIT ’TYPES’
STG_E_INVALIDPOINTER = HRESULT($80030009)
STG_E_LOCKVIOLATION = HRESULT($80030021)
STG_E_MEDIUMFULL = HRESULT($80030070)
STG_E_NOMOREFILES = HRESULT($80030012)
STG_E_NOTCURRENT = HRESULT($80030101)
STG_E_OLDDLL = HRESULT($80030105)
STG_E_OLDFORMAT = HRESULT($80030104)
STG_E_PATHNOTFOUND = HRESULT($80030003)
STG_E_PROPSETMISMATCHED = HRESULT($800300F0)
STG_E_READFAULT = HRESULT($8003001E)
STG_E_REVERTED = HRESULT($80030102)
STG_E_SEEKERROR = HRESULT($80030019)
STG_E_SHAREREQUIRED = HRESULT($80030106)
1904
CHAPTER 77. REFERENCE FOR UNIT ’TYPES’
STG_E_SHAREVIOLATION = HRESULT($80030020)
STG_E_TERMINATED = HRESULT($80030202)
STG_E_TOOMANYOPENFILES = HRESULT($80030004)
STG_E_UNIMPLEMENTEDFUNCTION = HRESULT($800300FE)
STG_E_UNKNOWN = HRESULT($800300FD)
STG_E_WRITEFAULT = HRESULT($8003001D)
STG_S_BLOCK = $00030201
STG_S_CONVERTED = $00030200
STG_S_MONITORING = $00030203
STG_S_RETRYNOW = $00030202
STREAM_SEEK_CUR = 1
STREAM_SEEK_END = 2
STREAM_SEEK_SET = 0
1905
CHAPTER 77. REFERENCE FOR UNIT ’TYPES’
77.3.2 Types
ArgList = Pointer
DWORD = LongWord
FILETIME = _FILETIME
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 Del-
phi/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 Del-
phi/Kylix compatibility.
PByte = System.PByte
PByte is defined in the system unit. This is an alias for Delphi/Kylix compatibility.
PCLSID = PGuid
PDisplay = Pointer
PDouble = System.PDouble
PDouble is defined in the system unit. This is an alias for Delphi/Kylix compatibility.
PDWord = ^DWORD
1906
CHAPTER 77. REFERENCE FOR UNIT ’TYPES’
PEvent = Pointer
PFileTime = ^TFileTime
PLargeInt = ^Largeint
PLargeInt is an alias for the PInt64 type defined in the system unit. This is an alias for Del-
phi/Kylix compatibility.
PLargeuInt = ^LargeUint
PLargeUInt is an alias for the PQWord type defined in the system unit. This is an alias for
Delphi/Kylix compatibility.
PLongint = System.PLongint
PLongint is defined in the system unit. This is an alias for Delphi/Kylix compatibility.
POleStr = PWideChar
PPoint = ^TPoint
PPOleStr = ^POleStr
PRect = ^TRect
PSize = ^TSize
PSmallInt = System.PSmallInt
PSmallInt is defined in the system unit. This is an alias for Delphi/Kylix compatibility.
PSmallPoint = ^TSmallPoint
1907
CHAPTER 77. REFERENCE FOR UNIT ’TYPES’
PStatStg = ^TStatStg
PXrmOptionDescRec = ^TXrmOptionDescRec
Region = Pointer
STATSTG = TStatStg
tagSTATSTG = record
public
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 (1935) call. It describes a storage medium (typically a
file).
1908
CHAPTER 77. REFERENCE FOR UNIT ’TYPES’
TCLSID = TGuid
TDirection = (FromBeginning,FromEnd)
Value Explanation
FromBeginning
FromEnd
TDuplicates = (dupIgnore,dupAccept,dupError)
Value Explanation
dupAccept Accept duplicates, adding them to the list.
dupError Raise an error when an attempt is made to add a duplicate.
dupIgnore 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.
1909
CHAPTER 77. REFERENCE FOR UNIT ’TYPES’
TEndian = Objpas.TEndian
TFileTime = _FILETIME
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 (1910)
TOleChar = WideChar
TOleChar is an alias for the WideChar type, defined in the system unit.
1910
CHAPTER 77. REFERENCE FOR UNIT ’TYPES’
TSmallPoint defines a point in a 2-dimensional plane, just like TPoint (1916), but the coor-
dinates have a smaller range: The coordinates are smallints (16-bit, signed) and they run from
-MaxSmallInt to maxSmallint.
TSplitRectType = (srLeft,srRight,srTop,srBottom)
Value Explanation
srBottom
srLeft
srRight
srTop
TStatStg = tagSTATSTG
TStatStg is a record type describing a storage medium. It is uses in the IStream.Stat (1935)
function.
TValueRelationship = - 1..1
1911
CHAPTER 77. REFERENCE FOR UNIT ’TYPES’
TXrmOptionDescRec = record
end
Widget = Pointer
WidgetClass = Pointer
XrmOptionDescRec = TXrmOptionDescRec
_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.
Description: Bounds returns a TRect structure with the indicated position (Left=ALeft and Top=ATop)
and size (Right=ALeft+AWidth and Bottom=ATop+AHeight)
See also: Rect (1915), PtInRect (1914), IntersectRect (1913), UnionRect (1915)
1912
CHAPTER 77. REFERENCE FOR UNIT ’TYPES’
77.4.2 CenterPoint
Synopsis: Return the center point of a rectangle
See also: PtinRect (1914), IntersectRect (1913), IsRectEmpty (1914), OffsetRect (1914), InflateRect (1913),
Size (1915), IsRectEmpty (1914)
77.4.3 EqualRect
Synopsis: Check if two rectangles are equal.
Declaration: function EqualRect(const r1: TRect; const r2: TRect) : Boolean
Visibility: default
Description: EqualRect returns True if the rectangles R1 and R2 are equal (i.e. have the position and size).
If the rectangles differ, the function returns False
See also: Rect (1915), Bounds (1912), PtInRect (1914), IntersectRect (1913), UnionRect (1915), IsRectEmpty
(1914), OffsetRect (1914), InflateRect (1913), Size (1915)
77.4.4 InflateRect
Synopsis: Increase the rectangle in size, keeping it centered
Declaration: function InflateRect(var Rect: TRect; dx: Integer; dy: Integer)
: Boolean
Visibility: default
Description: InflateRect inflates the rectangle horizontally with dx pixels on each side, and vertically with
dy pixels, thus keeping its center point on the same location. It returns true if the operation was
successfully, False if it was not (only possible if the address of Rect is Nil).
See also: PtinRect (1914), IntersectRect (1913), IsRectEmpty (1914), OffsetRect (1914), CenterPoint (1913),
Size (1915), IsRectEmpty (1914)
77.4.5 IntersectRect
Synopsis: Return the intersection of 2 rectangles
Declaration: function IntersectRect(var Rect: TRect; const R1: TRect;
const R2: TRect) : Boolean
Visibility: default
Description: IntersectRect returns the intersection of the 2 rectangles R1 and R2 in Rect. It returns True
if the 2 rectangles have an intersection, otherwise False is returned, and Rect is filled with zero.
See also: PtinRect (1914), UnionRect (1915), IsRectEmpty (1914), OffsetRect (1914), InflateRect (1913),
Size (1915)
1913
CHAPTER 77. REFERENCE FOR UNIT ’TYPES’
77.4.6 IsRectEmpty
Synopsis: Check whether a rectangle is empty
See also: PtinRect (1914), IntersectRect (1913), IsRectEmpty (1914), OffsetRect (1914), InflateRect (1913),
Size (1915)
77.4.7 OffsetRect
Synopsis: Offset the rectangle
Declaration: function OffsetRect(var Rect: TRect; DX: Integer; DY: Integer) : Boolean
Visibility: default
Description: OffsetRect offsets the rectangle Rect by a horizontal distance DX and a vertical distance DY.
The operation returns True if the operation was successful, false if it was not (only possible if
the address of Rect is Nil).
See also: PtinRect (1914), IntersectRect (1913), IsRectEmpty (1914), OffsetRect (1914), InflateRect (1913),
Size (1915), IsRectEmpty (1914)
77.4.8 Point
Synopsis: Create a point
Declaration: function Point(x: Integer; y: Integer) : TPoint
Visibility: default
Description: Point returns a TPoint structure with the given position (X, Y).
See also: Rect (1915), PtInRect (1914)
77.4.9 PtInRect
Synopsis: Check whether a point is inside a rectangle.
Declaration: function PtInRect(const Rect: TRect; const p: TPoint) : Boolean
Visibility: default
Description: PtInRect returns True if p is located inside Rect, and False if it is located outside the rect-
angle.
Remark Note that the bottom, right edges are not considered part of the rectangle, therefor a point lo-
cated on one of these edges will not be considered part of the rectangle, meaning that for a record
(10,10,100,100) the point (90,100) will not be considered part of the record, but 90,10 will be.
See also: IntersectRect (1913), UnionRect (1915), IsRectEmpty (1914), OffsetRect (1914), InflateRect (1913),
Size (1915)
1914
CHAPTER 77. REFERENCE FOR UNIT ’TYPES’
77.4.10 Rect
Synopsis: Create a rectangle record
77.4.11 Size
Synopsis: Return the size of the rectangle
77.4.12 UnionRect
Synopsis: Return the union of 2 rectangles.
Declaration: function UnionRect(var Rect: TRect; const R1: TRect; const R2: TRect)
: Boolean
Visibility: default
Description: UnionRect retuns the rectangle that encompasses both R1 and R2 in Rect. It returns True if the
resulting rectangle is not empty, False if the result is an empty rectangle (in which case the result
is filled with zeroes)
See also: PtinRect (1914), IntersectRect (1913), IsRectEmpty (1914), OffsetRect (1914), InflateRect (1913),
Size (1915)
77.5 TPoint
TPoint = packed record
public
X : LongInt;
Y : LongInt;
class
function Zero : TPoint; Static;
function Add(const apt: TPoint
1915
CHAPTER 77. REFERENCE FOR UNIT ’TYPES’
) : TPoint;
function Distance(const apt: TPoint) : ValReal;
function
IsZero : Boolean;
function Subtract(const apt: TPoint) : TPoint
;
SetLocation;
Offset;
class function PointInCircle(const apt
: TPoint; const acenter: TPoint;
const
aradius: Integer) : Boolean; Static;
TPoint.class operator =(const
apt1: TPoint; const apt2: TPoint)
: Boolean
;
TPoint.class operator <>(const apt1: TPoint; const apt2: TPoint
)
: Boolean;
TPoint.class operator +
(const apt1: TPoint; const apt2: TPoint) : TPoint;
TPoint.class
operator -(const apt1: TPoint; const apt2: TPoint) : TPoint;
TPoint
.class operator :=(const aspt: TSmallPoint) : TPoint;
TPoint.class
operator explicit(const apt: TPoint) : TSmallPoint;
end
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.
1916
CHAPTER 77. REFERENCE FOR UNIT ’TYPES’
77.5.2 TPoint.Zero
Declaration: class function Zero : TPoint; Static
Visibility: public
77.5.3 TPoint.Add
Declaration: function Add(const apt: TPoint) : TPoint
Visibility: public
77.5.4 TPoint.Distance
Declaration: function Distance(const apt: TPoint) : ValReal
Visibility: public
77.5.5 TPoint.IsZero
Declaration: function IsZero : Boolean
Visibility: public
77.5.6 TPoint.Subtract
Declaration: function Subtract(const apt: TPoint) : TPoint
Visibility: public
77.5.7 TPoint.SetLocation
Declaration: procedure SetLocation(const apt: TPoint)
procedure SetLocation(ax: LongInt; ay: LongInt)
Visibility: public
1917
CHAPTER 77. REFERENCE FOR UNIT ’TYPES’
77.5.8 TPoint.Offset
Declaration: procedure Offset(const apt: TPoint)
procedure Offset(dx: LongInt; dy: LongInt)
Visibility: public
77.5.9 TPoint.PointInCircle
Declaration: class function PointInCircle(const apt: TPoint; const acenter: TPoint;
const aradius: Integer) : Boolean; Static
Visibility: public
77.5.10 TPoint.equal(TPoint,TPoint):Boolean
Declaration: TPoint.class operator =(const apt1: TPoint; const apt2: TPoint)
: Boolean
Visibility: public
77.5.11 TPoint.notequal(TPoint,TPoint):Boolean
Declaration: TPoint.class operator <>(const apt1: TPoint; const apt2: TPoint)
: Boolean
Visibility: public
77.5.12 TPoint.add(TPoint,TPoint):TPoint
Declaration: TPoint.class operator +(const apt1: TPoint; const apt2: TPoint) : TPoint
Visibility: public
77.5.13 TPoint.subtract(TPoint,TPoint):TPoint
Declaration: TPoint.class operator -(const apt1: TPoint; const apt2: TPoint) : TPoint
Visibility: public
77.5.14 TPoint.assign(TSmallPoint):TPoint
Declaration: TPoint.class operator :=(const aspt: TSmallPoint) : TPoint
Visibility: public
77.5.15 TPoint.explicit(TPoint):TSmallPoint
Declaration: TPoint.class operator explicit(const apt: TPoint) : TSmallPoint
Visibility: public
1918
CHAPTER 77. REFERENCE FOR UNIT ’TYPES’
77.6 TPointF
TPointF = packed record
public
x : Single;
y : Single;
Add;
function Distance(const apt: TPointF) : Single;
function DotProduct
(const apt: TPointF) : Single;
function IsZero : Boolean;
Subtract
;
SetLocation;
Offset;
function Scale(afactor: Single) : TPointF
;
function Ceiling : TPoint;
function Truncate : TPoint;
function
Floor : TPoint;
function Round : TPoint;
function &Length : Single
;
Create;
TPointF.class operator =(const apt1: TPointF; const
apt2: TPointF)
: Boolean;
TPointF.class
operator <>(const apt1: TPointF; const apt2: TPointF)
: Boolean;
TPointF.class operator +(const apt1
: TPointF; const apt2: TPointF)
: TPointF
;
TPointF.class operator -(const apt1: TPointF; const apt2: TPointF
)
: TPointF;
TPointF.class operator
-(const apt1: TPointF) : TPointF;
TPointF.class operator *(const
apt1: TPointF; const apt2: TPointF)
:
Single;
TPointF.class operator *(const apt1: TPointF; afactor:
single) : TPointF;
TPointF.class operator *(afactor: single; const
apt1: TPointF) : TPointF;
end
1919
CHAPTER 77. REFERENCE FOR UNIT ’TYPES’
77.6.2 TPointF.Add
Declaration: function Add(const apt: TPoint) : TPointF
function Add(const apt: TPointF) : TPointF
Visibility: public
77.6.3 TPointF.Distance
Declaration: function Distance(const apt: TPointF) : Single
Visibility: public
77.6.4 TPointF.DotProduct
Declaration: function DotProduct(const apt: TPointF) : Single
Visibility: public
77.6.5 TPointF.IsZero
Declaration: function IsZero : Boolean
Visibility: public
1920
CHAPTER 77. REFERENCE FOR UNIT ’TYPES’
77.6.6 TPointF.Subtract
Declaration: function Subtract(const apt: TPointF) : TPointF
function Subtract(const apt: TPoint) : TPointF
Visibility: public
77.6.7 TPointF.SetLocation
Declaration: procedure SetLocation(const apt: TPointF)
procedure SetLocation(const apt: TPoint)
procedure SetLocation(ax: LongInt; ay: LongInt)
Visibility: public
77.6.8 TPointF.Offset
Declaration: procedure Offset(const apt: TPointF)
procedure Offset(const apt: TPoint)
procedure Offset(dx: LongInt; dy: LongInt)
Visibility: public
77.6.9 TPointF.Scale
Declaration: function Scale(afactor: Single) : TPointF
Visibility: public
77.6.10 TPointF.Ceiling
Declaration: function Ceiling : TPoint
Visibility: public
77.6.11 TPointF.Truncate
Declaration: function Truncate : TPoint
Visibility: public
77.6.12 TPointF.Floor
Declaration: function Floor : TPoint
Visibility: public
77.6.13 TPointF.Round
Declaration: function Round : TPoint
Visibility: public
1921
CHAPTER 77. REFERENCE FOR UNIT ’TYPES’
77.6.14 TPointF.Length
Declaration: function &Length : Single
Visibility: public
77.6.15 TPointF.Create
Declaration: class function Create(const ax: Single; const ay: Single) : TPointF
; Overload; Static
class function Create(const apt: TPoint) : TPointF; Overload; Static
Visibility: public
77.6.16 TPointF.equal(TPointF,TPointF):Boolean
Declaration: TPointF.class operator =(const apt1: TPointF; const apt2: TPointF)
: Boolean
Visibility: public
77.6.17 TPointF.notequal(TPointF,TPointF):Boolean
Declaration: TPointF.class operator <>(const apt1: TPointF; const apt2: TPointF)
: Boolean
Visibility: public
77.6.18 TPointF.add(TPointF,TPointF):TPointF
Declaration: TPointF.class operator +(const apt1: TPointF; const apt2: TPointF)
: TPointF
Visibility: public
77.6.19 TPointF.subtract(TPointF,TPointF):TPointF
Declaration: TPointF.class operator -(const apt1: TPointF; const apt2: TPointF)
: TPointF
Visibility: public
77.6.20 TPointF.negative(TPointF):TPointF
Declaration: TPointF.class operator -(const apt1: TPointF) : TPointF
Visibility: public
77.6.21 TPointF.multiply(TPointF,TPointF):Single
Declaration: TPointF.class operator *(const apt1: TPointF; const apt2: TPointF)
: Single
Visibility: public
1922
CHAPTER 77. REFERENCE FOR UNIT ’TYPES’
77.6.22 TPointF.multiply(TPointF,single):TPointF
Declaration: TPointF.class operator *(const apt1: TPointF; afactor: single) : TPointF
Visibility: public
77.6.23 TPointF.multiply(single,TPointF):TPointF
Declaration: TPointF.class operator *(afactor: single; const apt1: TPointF) : TPointF
Visibility: public
77.7 TRect
TRect = packed record
private
function getHeight : LongInt;
function
getLocation : TPoint;
function getSize : TSize;
function getWidth
: LongInt;
procedure setHeight(AValue: LongInt);
procedure setSize
(AValue: TSize);
procedure setWidth(AValue: LongInt);
public
Create
;
TRect.class operator =(L: TRect; R: TRect) : Boolean;
TRect
.class operator <>(L: TRect; R: TRect) : Boolean;
TRect.class operator
+(L: TRect; R: TRect) : TRect;
TRect.class operator *(L: TRect
; R: TRect) : TRect;
class function Empty : TRect; Static;
procedure
NormalizeRect;
function IsEmpty : Boolean;
Contains;
function
IntersectsWith(R: TRect) : Boolean;
Intersect;
Union;
Offset
;
SetLocation;
Inflate;
function CenterPoint : TPoint;
SplitRect
;
property Height : LongInt;
1923
CHAPTER 77. REFERENCE FOR UNIT ’TYPES’
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.
1924
CHAPTER 77. REFERENCE FOR UNIT ’TYPES’
77.7.3 TRect.Create
Declaration: constructor Create(Origin: TPoint)
constructor Create(Origin: TPoint; AWidth: LongInt; AHeight: LongInt)
constructor Create(ALeft: LongInt; ATop: LongInt; ARight: LongInt;
ABottom: LongInt)
constructor Create(P1: TPoint; P2: TPoint; Normalize: Boolean)
constructor Create(R: TRect; Normalize: Boolean)
Visibility: public
77.7.4 TRect.equal(TRect,TRect):Boolean
Declaration: TRect.class operator =(L: TRect; R: TRect) : Boolean
Visibility: public
77.7.5 TRect.notequal(TRect,TRect):Boolean
Declaration: TRect.class operator <>(L: TRect; R: TRect) : Boolean
Visibility: public
77.7.6 TRect.add(TRect,TRect):TRect
Declaration: TRect.class operator +(L: TRect; R: TRect) : TRect
Visibility: public
77.7.7 TRect.multiply(TRect,TRect):TRect
Declaration: TRect.class operator *(L: TRect; R: TRect) : TRect
Visibility: public
77.7.8 TRect.Empty
Declaration: class function Empty : TRect; Static
Visibility: public
77.7.9 TRect.NormalizeRect
Declaration: procedure NormalizeRect
Visibility: public
1925
CHAPTER 77. REFERENCE FOR UNIT ’TYPES’
77.7.10 TRect.IsEmpty
Declaration: function IsEmpty : Boolean
Visibility: public
77.7.11 TRect.Contains
Declaration: function Contains(Pt: TPoint) : Boolean
function Contains(R: TRect) : Boolean
Visibility: public
77.7.12 TRect.IntersectsWith
Declaration: function IntersectsWith(R: TRect) : Boolean
Visibility: public
77.7.13 TRect.Intersect
Declaration: class function Intersect(R1: TRect; R2: TRect) : TRect; Static
procedure Intersect(R: TRect)
Visibility: public
77.7.14 TRect.Union
Declaration: class function Union(R1: TRect; R2: TRect) : TRect; Static
procedure Union(R: TRect)
class function Union(const Points: Array of TPoint) : TRect; Static
Visibility: public
77.7.15 TRect.Offset
Declaration: procedure Offset(DX: LongInt; DY: LongInt)
procedure Offset(DP: TPoint)
Visibility: public
77.7.16 TRect.SetLocation
Declaration: procedure SetLocation(X: LongInt; Y: LongInt)
procedure SetLocation(P: TPoint)
Visibility: public
77.7.17 TRect.Inflate
Declaration: procedure Inflate(DX: LongInt; DY: LongInt)
procedure Inflate(DL: LongInt; DT: LongInt; DR: LongInt; DB: LongInt)
Visibility: public
1926
CHAPTER 77. REFERENCE FOR UNIT ’TYPES’
77.7.18 TRect.CenterPoint
Declaration: function CenterPoint : TPoint
Visibility: public
77.7.19 TRect.SplitRect
Declaration: function SplitRect(SplitType: TSplitRectType; ASize: LongInt) : TRect
function SplitRect(SplitType: TSplitRectType; Percent: Double) : TRect
Visibility: public
77.7.20 TRect.Height
Declaration: Property Height : LongInt
Visibility: public
Access: Read,Write
77.7.21 TRect.Width
Declaration: Property Width : LongInt
Visibility: public
Access: Read,Write
77.7.22 TRect.Size
Declaration: Property Size : TSize
Visibility: public
Access: Read,Write
77.7.23 TRect.Location
Declaration: Property Location : TPoint
Visibility: public
Access: Read,Write
77.8 TRectF
TRectF = packed record
private
function GetHeight : Single;
function
GetWidth : Single;
procedure SetHeight(AValue: Single);
procedure
1927
CHAPTER 77. REFERENCE FOR UNIT ’TYPES’
SetWidth(AValue: Single);
public
function Union(const r: TRectF
) : TRectF;
procedure Offset(const dx: Single; const dy: Single
);
property Width : Single;
property Height : Single;
case Integer
of
0: (
public
Left : Single;
Top : Single;
Right : Single
;
Bottom : Single;
);
1: (
public
TopLeft : TPointF;
BottomRight
: TPointF;
);
end
77.8.3 TRectF.Union
Declaration: function Union(const r: TRectF) : TRectF
Visibility: public
77.8.4 TRectF.Offset
Declaration: procedure Offset(const dx: Single; const dy: Single)
Visibility: public
1928
CHAPTER 77. REFERENCE FOR UNIT ’TYPES’
77.8.5 TRectF.Width
Declaration: Property Width : Single
Visibility: public
Access: Read,Write
77.8.6 TRectF.Height
Declaration: Property Height : Single
Visibility: public
Access: Read,Write
77.9 TSize
TSize = packed record
public
cx : LongInt;
cy : LongInt;
function
Add(const asz: TSize) : TSize;
function Distance(const asz: TSize
) : Double;
function IsZero : Boolean;
function Subtract(const
asz: TSize) : TSize;
TSize.class operator =(const asz1: TSize;
const asz2: TSize) : Boolean;
TSize.class operator <>(const asz1
: TSize; const asz2: TSize) : Boolean;
TSize.class operator +(const
asz1: TSize; const asz2: TSize) : TSize;
TSize.class operator
-(const asz1: TSize; const asz2: TSize) : TSize;
property Width
: LongInt;
property Height : 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.
1929
CHAPTER 77. REFERENCE FOR UNIT ’TYPES’
77.9.3 TSize.Add
Declaration: function Add(const asz: TSize) : TSize
Visibility: public
77.9.4 TSize.Distance
Declaration: function Distance(const asz: TSize) : Double
Visibility: public
77.9.5 TSize.IsZero
Declaration: function IsZero : Boolean
Visibility: public
77.9.6 TSize.Subtract
Declaration: function Subtract(const asz: TSize) : TSize
Visibility: public
77.9.7 TSize.equal(TSize,TSize):Boolean
Declaration: TSize.class operator =(const asz1: TSize; const asz2: TSize) : Boolean
Visibility: public
77.9.8 TSize.notequal(TSize,TSize):Boolean
Declaration: TSize.class operator <>(const asz1: TSize; const asz2: TSize) : Boolean
Visibility: public
1930
CHAPTER 77. REFERENCE FOR UNIT ’TYPES’
77.9.9 TSize.add(TSize,TSize):TSize
Declaration: TSize.class operator +(const asz1: TSize; const asz2: TSize) : TSize
Visibility: public
77.9.10 TSize.subtract(TSize,TSize):TSize
Declaration: TSize.class operator -(const asz1: TSize; const asz2: TSize) : TSize
Visibility: public
77.9.11 TSize.Width
Declaration: Property Width : LongInt
Visibility: public
Access: Read,Write
77.9.12 TSize.Height
Declaration: Property Height : LongInt
Visibility: public
Access: Read,Write
77.10 IClassFactory
77.10.1 Description
IClassFactory is defined for Delphi/Kylix compatibility and should not be used.
77.10.3 IClassFactory.CreateInstance
Synopsis: Create a new instance of an interface.
Declaration: function CreateInstance(const unkOuter: IUnknown; const riid: TGuid;
out vObject) : HRESULT
Visibility: default
Description: IClassFactory.CreateInstance is defined for Delphi/Kylix compatibility and should not
be used.
1931
CHAPTER 77. REFERENCE FOR UNIT ’TYPES’
77.10.4 IClassFactory.LockServer
Synopsis: Lock ActiveX server object.
Declaration: function LockServer(fLock: LongBool) : HRESULT
Visibility: default
Description: IClassFactory.LocksServer is defined for Delphi/Kylix compatibility and should not be
used.
77.11 ISequentialStream
77.11.1 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.
77.11.3 ISequentialStream.Read
Synopsis: Read data from the stream
Declaration: function Read(pv: Pointer; cb: DWORD; pcbRead: PDWord) : HRESULT
Visibility: default
Description: Read reads cbCount bytes from the stream into the memory pointed to by pv and returns the
number of bytes read in pcbread. The result is zero for success or an error code.
See also: ISequentialStream.Write (1932)
77.11.4 ISequentialStream.Write
Synopsis: Write data to the stream
Declaration: function Write(pv: Pointer; cb: DWORD; pcbWritten: PDWord) : HRESULT
Visibility: default
Description: Write writes cbCount bytes from the memory pointed to by pv to the stream and returns the
number of bytes written in pcbwritten. The result is zero for success or an error code.
See also: ISequentialStream.Read (1932)
77.12 IStream
77.12.1 Description
An abstract interface for an external (non pascal) stream, as defined in Microsoft COM interfaces
1932
CHAPTER 77. REFERENCE FOR UNIT ’TYPES’
77.12.3 IStream.Seek
Synopsis: Set the stream position
Declaration: function Seek(dlibMove: Largeint; dwOrigin: DWORD;
out libNewPosition: LargeUint) : HRESULT
Visibility: default
Description: Seek sets the stream position at dlibMove bytes from dwOrigin (one of the SEEK_* constants)
and returns the new absolute position in libNewPosition. The function returns zero on success,
or an error code.
Errors: On error, a nonzero exit code is returned.
77.12.4 IStream.SetSize
Synopsis: Set the stream size
Declaration: function SetSize(libNewSize: LargeUint) : HRESULT
Visibility: default
Description: SetSize sets the size of the stream to libNewSize bytes, if the stream allows it. On success,
zero is returned.
Errors: On error, a nonzero exit code is returned.
77.12.5 IStream.CopyTo
Synopsis: Copy data from one stream to another
1933
CHAPTER 77. REFERENCE FOR UNIT ’TYPES’
77.12.6 IStream.Commit
Synopsis: Commit data to the stream
77.12.7 IStream.Revert
Synopsis: Revert changes
Declaration: function Revert : HRESULT
Visibility: default
Description: Revert reverts all changes that were done to a transacted stream, i.e. all changes since the last
commit. The function returns zero on success.
Errors: On error, a nonzero exit code is returned.
77.12.8 IStream.LockRegion
Synopsis: Lock a region of bytes in the stream
Declaration: function LockRegion(libOffset: LargeUint; cb: LargeUint;
dwLockType: DWORD) : HRESULT
Visibility: default
Description: LockRegion locks a region of the storage, starting at libOffset, for cbCount bytes. The
applied lock is of type dwLockType. The function returns zero if the lock was successfully applied.
Errors: On error, a nonzero exit code is returned.
77.12.9 IStream.UnlockRegion
Synopsis: Unlocks a previously locked region of bytes in the stream
Declaration: function UnlockRegion(libOffset: LargeUint; cb: LargeUint;
dwLockType: DWORD) : HRESULT
Visibility: default
Description: UnlockRegion removes the lock on a region of the storage, starting at libOffset, for cbCount
bytes. The lock must be of type dwLockType. The function returns zero if the lock was successfully
removed.
Errors: On error, a nonzero exit code is returned.
1934
CHAPTER 77. REFERENCE FOR UNIT ’TYPES’
77.12.10 IStream.Stat
Synopsis: return information about the stream.
77.12.11 IStream.Clone
Synopsis: Clone the stream instance
Declaration: function Clone(out stm: IStream) : HRESULT
Visibility: default
Description: Clone returns an independent but initially equal copy of the stream in stm. The function returns
zero if the call was successful.
Errors: On error, a nonzero exit code is returned.
77.13 TBitConverter
77.13.1 Method overview
Page Method Description
1935 From
1936 InTo
1935 UnsafeFrom
1936 UnsafeInTo
77.13.2 TBitConverter.UnsafeFrom
Declaration: class procedure UnsafeFrom<T>(const ASrcValue: T;
var ADestination: Array of Byte;
AOffset: Integer); Static
Visibility: default
77.13.3 TBitConverter.From
Declaration: class procedure From<T>(const ASrcValue: T;
var ADestination: Array of Byte;
AOffset: Integer); Static
Visibility: default
1935
CHAPTER 77. REFERENCE FOR UNIT ’TYPES’
77.13.4 TBitConverter.UnsafeInTo
Declaration: class function UnsafeInTo<T>(const ASource: Array of Byte;
AOffset: Integer) : T; Static
Visibility: default
77.13.5 TBitConverter.InTo
Declaration: class function InTo<T>(const ASource: Array of Byte; AOffset: Integer)
: T; Static
Visibility: default
1936
Chapter 78
Name Page
System 1331
sysutils 1598
78.2 Overview
The TypInfo 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 proper-
ties 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 unit with the same name.
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.
1937
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
Table 78.2:
Name Description
GetEnumName (1951) Get an enumerated type element name
GetEnumValue (1953) Get ordinal number of an enumerated type, based on the name.
GetEnumNameCount (1951) Get number of elements in an enumerated type.
GetTypeData (1965) Skip type name and return a pointer to the type data
SetToString (1975) Convert a set to its string representation
StringToSet (1977) Convert a string representation of a set to a set
Table 78.3:
Name Description
GetEnumProp (1952) Return the value of an enumerated type property
GetFloatProp (1953) Return the value of a float property
GetInt64Prop (1954) Return the value of an Int64 property
GetMethodProp (1955) Return the value of a procedural type property
GetObjectProp (1957) Return the value of an object property
GetOrdProp (1959) Return the value of an ordinal type property
GetPropValue (1962) Return the value of a property as a variant
GetSetProp (1963) Return the value of a set property
GetStrProp (1964) Return the value of a string property
GetWideStrProp (1966) Return the value of a widestring property
GetVariantProp (1966) Return the value of a variant property
SetEnumProp (1970) Set the value of an enumerated type property
SetFloatProp (1971) Set the value of a float property
SetInt64Prop (1971) Set the value of an Int64 property
SetMethodProp (1972) Set the value of a procedural type property
SetObjectProp (1973) Set the value of an object property
SetOrdProp (1973) Set the value of an ordinal type property
SetPropValue (1974) Set the value of a property through a variant
SetSetProp (1974) Set the value of a set property
SetStrProp (1975) Set the value of a string property
SetWideStrProp (1977) Set the value of a widestring property
SetVariantProp (1977) Set the value of a variant property
1938
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
Table 78.4:
Name Description
FindPropInfo (1949) Getting property type information, With error checking.
GetPropInfo (1960) Getting property type information, No error checking.
GetPropInfos (1960) Find property information of a certain kind
GetObjectPropClass (1958) Return the declared class of an object property
GetPropList (1961) Get a list of all published properties
IsPublishedProp (1966) Is a property published
IsStoredProp (1967) Is a property stored
PropIsType (1968) Is a property of a certain kind
PropType (1969) Return the type of a property
This callback is set by the variants unit to enable reading of properties as a variant. If set, it is called
by the GetPropValue (1962) function.
This callback is set by the variants unit to enable reading of variant properties If set, it is called by
the GetVariantProp (1966) function.
This callback is set by the variants unit to enable writing of properties as a variant. If set, it is called
by the SetPropValue (1974) function.
This callback is set by the variants unit to enable writing of variant properties. If set, it is called by
the GetVariantProp (1966) function.
ptConst = 3
ptField = 0
1939
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
ptStatic = 1
ptVirtual = 2
tkAny = [Low(TTypeKind)..High(TTypeKind)]
tkArray = System.tkArray
tkAString = System.tkAString
tkBool = System.tkBool
tkChar = System.tkChar
tkClass = System.tkClass
tkClassRef = System.tkClassRef
tkDynArray = System.tkDynArray
tkEnumeration = System.tkEnumeration
tkFile = System.tkFile
tkFloat = System.tkFloat
tkHelper = System.tkHelper
tkInt64 = System.tkInt64
tkInteger = System.tkInteger
tkInterface = System.tkInterface
1940
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
tkInterfaceRaw = System.tkInterfaceRaw
tkLString = System.tkLString
tkMethod = System.tkMethod
tkMethods = [tkMethod]
tkObject = System.tkObject
tkPointer = System.tkPointer
tkProcedure = tkProcVar
Procedure kind
tkProcVar = System.tkProcVar
tkQWord = System.tkQWord
tkRecord = System.tkRecord
tkSet = System.tkSet
tkSString = System.tkSString
tkString = tkSString
tkUChar = System.tkUChar
tkUnknown = System.tkUnknown
tkUString = System.tkUString
tkVariant = System.tkVariant
tkWChar = System.tkWChar
tkWString = System.tkWString
1941
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
78.6.2 Types
PClassData = ^TClassData
PInitManagedField = ^TInitManagedField
PInterfaceData = ^TInterfaceData
PInterfaceRawData = ^TInterfaceRawData
PIntfMethodEntry = ^TIntfMethodEntry
PIntfMethodTable = ^TIntfMethodTable
PManagedField = ^TManagedField
PParameterLocation = ^TParameterLocation
PParameterLocations = ^TParameterLocations
PProcedureParam = ^TProcedureParam
PPropData = ^TPropData
PPropInfo = ^TPropInfo
PPropList = ^TPropList
PPTypeInfo = ^PTypeInfo
PRecInitData = ^TRecInitData
1942
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
PRecOpOffsetTable = ^TRecOpOffsetTable
PTypeData = ^TTypeData
PTypeInfo = ^TTypeInfo
PVmtFieldClassTab = ^TVmtFieldClassTab
PVmtFieldEntry = ^TVmtFieldEntry
PVmtFieldTable = ^TVmtFieldTable
PVmtMethodEntry = ^TVmtMethodEntry
PVmtMethodParam = ^TVmtMethodParam
PVmtMethodTable = ^TVmtMethodTable
ShortStringBase = string
TCallConv = (ccReg,ccCdecl,ccPascal,ccStdCall,ccSafeCall,ccCppdecl
,
ccFar16,ccOldFPCCall,ccInternProc,ccSysCall,ccSoftFloat
,
ccMWPascal)
Value Explanation
ccCdecl Cdecl calling convention.
ccCppdecl Cppdecl calling convention
ccFar16 Far16 calling convention (Delphi compatibility)
ccInternProc InternProc calling convention (compiler internal)
ccMWPascal MWPascal (MetroWerks Pascal) calling convention.
ccOldFPCCall OldFPCCall calling convention (deprecated)
ccPascal Pascal calling convention.
ccReg Register calling convention
ccSafeCall SafeCall calling convention.
ccSoftFloat Softfloat calling convention.
ccStdCall stdcall calling convention.
ccSysCall SysCall calling convention.
1943
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
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)
Value Explanation
ftComp Comp-type float
ftCurr Currency-type float
ftDouble Double-sized float
ftExtended Extended-size float
ftSingle Single-sized float
The callback function must return the property with name PropName of instance Instance. If
PreferStrings is true, it should favour converting the property to a string value. The function
needs to return the variant with the property value.
The callback function must return the variant property with name PropName of instance Instance.
TInitManagedField = TManagedField
TIntfFlag = (ifHasGuid,ifDispInterface,ifDispatch,ifHasStrGUID)
Value Explanation
ifDispatch Interface is a dispatch interface
ifDispInterface Interface is a dual dispatch interface
ifHasGuid Interface has GUID identifier
ifHasStrGUID Interface has a string GUID identifier
Type of interface.
1944
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
TMethodKind = (mkProcedure,mkFunction,mkConstructor,mkDestructor,
mkClassProcedure,mkClassFunction,mkClassConstructor
,
mkClassDestructor,mkOperatorOverload)
Value Explanation
mkClassConstructor Class constructor method.
mkClassDestructor Class destructor method.
mkClassFunction Class function
mkClassProcedure Class procedure
mkConstructor Class constructor
mkDestructor Class Destructor
mkFunction Function method
mkOperatorOverload Operator overloader
mkProcedure Procedure method.
TOrdType = (otSByte,otUByte,otSWord,otUWord,otSLong,otULong,otSQWord
,
otUQWord)
Value Explanation
otSByte Signed byte
otSLong Signed longint
otSQWord
otSWord Signed word
otUByte Unsigned byte
otULong Unsigned longing (Cardinal)
otUQWord
otUWord 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,
pfConstRef,pfHidden,pfHigh,pfSelf,pfVmt,pfResult)
1945
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
Value Explanation
pfAddress Parameter is passed by address
pfArray Parameter is an array parameter
pfConst Parameter is a const parameter (i.e. cannot be modified)
pfConstRef
pfHidden
pfHigh
pfOut Parameter is a string parameter
pfReference Parameter is passed by reference
pfResult
pfSelf
pfVar Parameter is a var parameter (passed by reference)
pfVmt
1946
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
TRegisterType = (Invalid,Int,FP,MMX,MultiMedia,Special,Address)
Value Explanation
Address
FP
Int
Invalid
MMX
MultiMedia
Special
The callback function must set the property with name PropName of instance Instance to Value.
The callback function must set the variant property with name PropName of instance to Value.
TSubRegister = (None,Lo,Hi,Word,DWord,QWord,FloatSingle,FloatDouble
,
FloatQuad,MultiMediaSingle,MultiMediaDouble,
MultiMediaWhole,MultiMediaX,MultiMediaY)
1947
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
Value Explanation
DWord
FloatDouble
FloatQuad
FloatSingle
Hi
Lo
MultiMediaDouble
MultiMediaSingle
MultiMediaWhole
MultiMediaX
MultiMediaY
None
QWord
Word
TTypeInfo = record
public
Kind : TTypeKind;
Name : ShortString
;
end
TTypeKind = System.TTypeKind
Type of a property.
1948
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
78.7.2 AlignPTypeInfo
Declaration: function AlignPTypeInfo(p: Pointer) : Pointer
Visibility: default
78.7.3 AlignTParamFlags
Declaration: function AlignTParamFlags(p: Pointer) : Pointer
Visibility: default
78.7.4 AlignTypeData
Declaration: function AlignTypeData(p: Pointer) : Pointer
Visibility: default
78.7.5 DerefTypeInfoPtr
Declaration: function DerefTypeInfoPtr(Info: PPTypeInfo) : PTypeInfo
Visibility: default
78.7.6 FindPropInfo
Synopsis: Return property information by property name.
1949
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
If the property does not exist, a EPropertyError exception will be raised. The GetPropInfo
(1960) function has the same function as the FindPropInfo function, but returns Nil if the
property does not exist.
Errors: Specifying an invalid property name in PropName will result in an EPropertyError exception.
See also: GetPropInfo (1960), GetPropList (1961), GetPropInfos (1960)
Listing: ./typinfex/ex14.pp
Program example13 ;
{ T h i s program demonstrates t h e F i n d P r o p I n f o f u n c t i o n }
{ $mode o b j f p c }
uses
r t t i o b j , typinfo , sysutils ;
Var
O : TMyTestObject ;
PT : PTypeData ;
PI : PPropInfo ;
I , J : Longint ;
PP : P P r o p L i s t ;
p r I : 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 ^ .Name ) ;
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 ) : ' , PI ^ .Name ) ;
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 , ' " w i t h message : ' ,E . Message ) ;
end ;
O. Free ;
end .
78.7.7 GetDynArrayProp
Declaration: function GetDynArrayProp(Instance: TObject; const PropName: string)
: Pointer
function GetDynArrayProp(Instance: TObject; PropInfo: PPropInfo)
: Pointer
Visibility: default
1950
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
78.7.8 GetEnumeratedAliasValue
Declaration: function GetEnumeratedAliasValue(aTypeInfo: PTypeInfo;
const aName: string) : Integer
Visibility: default
78.7.9 GetEnumName
Synopsis: Return name of enumeration constant.
Listing: ./typinfex/ex9.pp
program example9 ;
{ $mode o b j f p c }
uses r t t i o b j , t y p i n f o ;
Var
O : TMyTestObject ;
T I : PTypeInfo ;
begin
O: = TMyTestObject . Create ;
T I : = G et P ro p In f o (O, ' MyEnumField ' ) ^ . PropType ;
W r i t e l n ( ' GetEnumName : ' ,GetEnumName ( TI , Ord (O. MyEnumField ) ) ) ;
W r i t e l n ( ' GetEnumValue ( m e f i r s t ) : ' ,GetEnumName ( TI , GetEnumValue ( TI , ' m e f i r s t ' ) ) ) ;
O. Free ;
end .
78.7.10 GetEnumNameCount
Synopsis: Return number of names in an enumerated type
Declaration: function GetEnumNameCount(enum1: PTypeInfo) : SizeInt
Visibility: default
1951
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
Description: GetEnumNameCount returns the number of values (names) in the enumerated type, described by
enum1
Errors: No checking is done to see whether Enum1 is really type information of an enumerated type.
See also: GetEnumValue (1953), GetEnumName (1951)
78.7.11 GetEnumProp
Synopsis: Return the value of an enumeration type property.
Declaration: function GetEnumProp(Instance: TObject; const PropName: string) : string
function GetEnumProp(Instance: TObject; const PropInfo: PPropInfo)
: string
Visibility: default
Description: GetEnumProp returns the value of an property of an enumerated type and returns the name of the
enumerated value for the object Instance. The property whose value must be returned can be
specified by its property info in PropInfo or by its name in PropName
Errors: No check is done to determine whether PropInfo really points to the property information for an
enumerated type. Specifying an invalid property name in PropName will result in an EPropertyError
exception.
See also: SetEnumProp (1970), GetOrdProp (1959), GetStrProp (1964), GetInt64Prop (1954), GetMethod-
Prop (1955), GetSetProp (1963), GetObjectProp (1957), GetEnumProp (1952)
Listing: ./typinfex/ex2.pp
program example2 ;
{ $mode o b j f p c }
uses r t t i o b j , t y p i n f o ;
Var
O : TMyTestObject ;
PI : PPropInfo ;
T I : PTypeInfo ;
begin
O: = TMyTestObject . Create ;
PI : = G et P ro p In f o (O, ' MyEnumField ' ) ;
T I : = PI ^ . PropType ;
W r i t e l n ( 'Enum p r o p e r t y : ' );
W r i t e l n ( ' Value : ' ,GetEnumName ( TI , Ord (O. MyEnumField ) ) ) ;
W r i t e l n ( ' Get ( name ) : ' , GetEnumProp (O, ' MyEnumField ' ) ) ;
W r i t e l n ( ' Get ( p r o p i n f o ) : ' , GetEnumProp (O, PI ) ) ;
SetEnumProp (O, ' MyEnumField ' , ' m e F i r s t ' );
W r i t e l n ( ' Set ( name , m e F i r s t ) : ' ,GetEnumName ( TI , Ord (O. MyEnumField ) ) ) ;
SetEnumProp (O, PI , ' meSecond ' ) ;
W r i t e l n ( ' Set ( p r o p i n f o , meSecond ) : ' ,GetEnumName ( TI , Ord (O. MyEnumField ) ) ) ;
O. Free ;
end .
1952
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
78.7.12 GetEnumValue
Synopsis: Get ordinal value for enumerated type by name
78.7.13 GetFloatProp
Synopsis: Return value of floating point property
Declaration: function GetFloatProp(Instance: TObject; PropInfo: PPropInfo) : Extended
function GetFloatProp(Instance: TObject; const PropName: string)
: Extended
Visibility: default
Description: GetFloatProp returns the value of the float property described by PropInfo or with name
Propname for the object Instance. All float types are converted to extended.
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: SetFloatProp (1971), GetOrdProp (1959), GetStrProp (1964), GetInt64Prop (1954), GetMethodProp
(1955), GetSetProp (1963), GetObjectProp (1957), GetEnumProp (1952)
Listing: ./typinfex/ex4.pp
program example4 ;
{ $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 ) ;
1953
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
78.7.14 GetInt64Prop
Synopsis: return value of an Int64 property
Declaration: function GetInt64Prop(Instance: TObject; PropInfo: PPropInfo) : Int64
function GetInt64Prop(Instance: TObject; const PropName: string) : Int64
Visibility: default
Description:
Remark Publishing of Int64 properties is not yet supported by Free Pascal. This function is provided for
Delphi compatibility only at the moment.
GetInt64Prop returns the value of the property of type Int64 that is described by PropInfo
or with name Propname for the object Instance.
Errors: No checking is done whether Instance is non-nil, or whether PropInfo describes a valid
Int64 property of Instance. Specifying an invalid property name in PropName will result
in an EPropertyError exception
See also: SetInt64Prop (1971), GetOrdProp (1959), GetStrProp (1964), GetFloatProp (1953), GetMethodProp
(1955), GetSetProp (1963), GetObjectProp (1957), GetEnumProp (1952)
Listing: ./typinfex/ex15.pp
program example15 ;
{ $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 ' ) ;
1954
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
78.7.15 GetInterfaceProp
Synopsis: Return interface-typed property
Declaration: function GetInterfaceProp(Instance: TObject; const PropName: string)
: IInterface
function GetInterfaceProp(Instance: TObject; PropInfo: PPropInfo)
: IInterface
Visibility: default
Description: GetInterfaceProp returns the interface which the property described by PropInfo or with
name Propname points to for object Instance.
Errors: No checking is done whether Instance is non-nil, or whether PropInfo describes a valid
method property of Instance. Specifying an invalid property name in PropName will result
in an EPropertyError exception.
See also: SetInterfaceProp (1972), GetOrdProp (1959), GetStrProp (1964), GetFloatProp (1953), GetInt64Prop
(1954), GetSetProp (1963), GetObjectProp (1957), GetEnumProp (1952)
78.7.16 GetMethodProp
Synopsis: Return value of a method property
Declaration: function GetMethodProp(Instance: TObject; PropInfo: PPropInfo) : TMethod
function GetMethodProp(Instance: TObject; const PropName: string)
: TMethod
Visibility: default
Description: GetMethodProp returns the method the property described by PropInfo or with name Propname
for object Instance. The return type TMethod is defined in the SysUtils unit as:
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 (1972), GetOrdProp (1959), GetStrProp (1964), GetFloatProp (1953), GetInt64Prop
(1954), GetSetProp (1963), GetObjectProp (1957), GetEnumProp (1952)
1955
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
Listing: ./typinfex/ex6.pp
program example6 ;
{ $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 ;
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 ;
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 : TMyTestObject ;
PI : PPropInfo ;
NO : TNotifyObject ;
M : TMethod ;
begin
I f (M. Data= P o i n t e r (NO) ) Then
I f (M. Code= P o i n t e r ( @TNotifyObject . N o t i f i c a t i o n 1 ) ) then
Writeln ( ' N o t i f i c a t i o n 1 ' )
else I f (M. Code= P o i n t e r ( @TNotifyObject . N o t i f i c a t i o n 2 ) ) then
Writeln ( ' N o t i f i c a t i o n 2 ' )
else
begin
Write ( ' Unknown method adress ( data : ' ) ;
Write ( h e x S t r ( L o n g i n t (M. data ) , 8 ) ) ;
W r i t e l n ( ' , code : ' , h e x s t r ( L o n g i n t (M. Code ) , 8 ) , ' ) ' ) ;
end ;
end ;
begin
O: = TMyTestObject . Create ;
NO: = T N o t i f y O b j e c t . Create ;
O. N o t i f y E v e n t : =@NO. N o t i f i c a t i o n 1 ;
PI : = G et P ro p In f o (O, ' N o t i f y E v e n t ' ) ;
W r i t e l n ( ' Method p r o p e r t y : ' ) ;
1956
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
78.7.17 GetObjectProp
Synopsis: Return value of an object-type property.
Declaration: function GetObjectProp(Instance: TObject; const PropName: string)
: TObject
function GetObjectProp(Instance: TObject; const PropName: string;
MinClass: TClass) : TObject
function GetObjectProp(Instance: TObject; PropInfo: PPropInfo) : TObject
function GetObjectProp(Instance: TObject; PropInfo: PPropInfo;
MinClass: TClass) : TObject
Visibility: default
Description: GetObjectProp returns the object which the property described by PropInfo with name Propname
points to for object Instance.
If MinClass is 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 (1972), GetOrdProp (1959), GetStrProp (1964), GetFloatProp (1953), GetInt64Prop
(1954), GetSetProp (1963), GetObjectProp (1957), GetEnumProp (1952)
Listing: ./typinfex/ex5.pp
1957
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
program example5 ;
{ $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.18 GetObjectPropClass
Synopsis: Return class of property.
Declaration: function GetObjectPropClass(Instance: TObject; const PropName: string)
: TClass
function GetObjectPropClass(AClass: TClass; const PropName: string)
: TClass
Visibility: default
Description: GetObjectPropClass returns the declared class of the property with name PropName. This
may not be the actual class of the property value.
For an example, see GetObjectProp (1957).
Errors: No checking is done whether Instance is non-nil. Specifying an invalid property name in PropName
will result in an EPropertyError exception.
1958
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
See also: SetMethodProp (1972), GetOrdProp (1959), GetStrProp (1964), GetFloatProp (1953), GetInt64Prop
(1954)
78.7.19 GetOrdProp
Synopsis: Get the value of an ordinal property
Declaration: function GetOrdProp(Instance: TObject; PropInfo: PPropInfo) : Int64
function GetOrdProp(Instance: TObject; const PropName: string) : Int64
Visibility: default
Description: GetOrdProp returns the value of the ordinal property described by PropInfo or with name
PropName for the object Instance. The value is returned as a longint, which should be typecast
to the needed type.
Ordinal properties that can be retrieved include:
Integers and subranges of integersThe value of the integer will be returned.
Enumerated types and subranges of enumerated typesThe ordinal value of the enumerated type
will be returned.
SetsIf the base type of the set has less than 31 possible values. If a bit is set in the return value, then
the corresponding element of the base ordinal class of the set type must be included in the set.
Errors: No checking is done whether Instance is non-nil, or whether PropInfo describes a valid or-
dinal property of Instance Specifying an invalid property name in PropName will result in an
EPropertyError exception.
See also: SetOrdProp (1973), GetStrProp (1964), GetFloatProp (1953), GetInt64Prop (1954), GetMethodProp
(1955), GetSetProp (1963), GetObjectProp (1957), GetEnumProp (1952)
Listing: ./typinfex/ex1.pp
program example1 ;
{ $mode o b j f p c }
uses r t t i o b j , t y p i n f o ;
Var
O : TMyTestObject ;
PI : PPropInfo ;
begin
O: = TMyTestObject . Create ;
W r i t e l n ( ' Boolean p r o p e r t y : ' );
W r i t e l n ( ' Value : ' ,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 .
1959
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
78.7.20 GetPropInfo
Synopsis: Return property type information, by property name.
Visibility: default
Description: GetPropInfo returns a pointer to the TPropInfo record for the PropName property of a class.
The class to examine can be specified in one of three ways:
In each of these three ways, if AKinds is specified, if the property has TypeKind which is not
included in Akinds, Nil will be returned.
For an example, see most of the other functions.
Errors: If the property PropName does not exist, Nil is returned.
See also: GetPropInfos (1960), GetPropList (1961)
78.7.21 GetPropInfos
Synopsis: Return a list of published properties.
Declaration: procedure GetPropInfos(TypeInfo: PTypeInfo; PropList: PPropList)
Visibility: default
Description: GetPropInfos stores pointers to the property information of all published properties of a class
with class info TypeInfo in the list pointed to by Proplist. The PropList pointer must point
to a memory location that contains enough space to hold all properties of the class and its parent
classes.
Errors: No checks are done to see whether PropList points to a memory area that is big enough to hold
all pointers.
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 }
1960
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
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 ro 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.22 GetPropList
Synopsis: Return a list of a certain type of published properties.
Declaration: function GetPropList(TypeInfo: PTypeInfo; TypeKinds: TTypeKinds;
PropList: PPropList; Sorted: Boolean) : LongInt
function GetPropList(TypeInfo: PTypeInfo; out PropList: PPropList)
: SizeInt
function GetPropList(AClass: TClass; out PropList: PPropList) : Integer
function GetPropList(Instance: TObject; out PropList: PPropList)
: Integer
Visibility: default
Description: GetPropList stores pointers to property information of the class with class info TypeInfo for
properties of kind TypeKinds in the list pointed to by Proplist. PropList must contain
enough space to hold all properties.
The function returns the number of pointers that matched the criteria and were stored in PropList.
Errors: No checks are done to see whether PropList points to a memory area that is big enough to hold
all pointers.
Listing: ./typinfex/ex13.pp
1961
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
Program example13 ;
{ T h i s program demonstrates t h e G e t P r o p L i s t f u n c t i o n }
uses
rttiobj , typinfo ;
Var
O : TMyTestObject ;
PT : PTypeData ;
PI : PTypeInfo ;
I , J : Longint ;
PP : P P r o p L i s t ;
p r I : PPropInfo ;
begin
O: = TMyTestObject . Create ;
PI : =O. C l a s s I n f o ;
PT: = GetTypeData ( PI ) ;
W r i t e l n ( ' T o t a l p r o p e r t y Count : ' ,PT ^ . PropCount ) ;
GetMem (PP, PT ^ . PropCount * SizeOf ( P o i n t e r ) ) ;
J : = G e t P r o p L i s t ( PI , OrdinalTypes , PP ) ;
W r i t e l n ( ' O r d i n a l p r o p e r t y Count : ' , J ) ;
For I :=0 to J−1 do
begin
With PP ^ [ i ] ^ do
begin
Write ( ' P r o p e r t y ' , i + 1 : 3 , ' : ' ,name : 3 0 ) ;
w r i t e l n ( ' Type : ' , TypeNames [ t y p i n f o . PropType (O,Name ) ] ) ;
end ;
end ;
FreeMem (PP ) ;
O. Free ;
end .
78.7.23 GetPropValue
Synopsis: Get property value as a string.
Declaration: function GetPropValue(Instance: TObject; const PropName: string)
: Variant
function GetPropValue(Instance: TObject; const PropName: string;
PreferStrings: Boolean) : Variant
function GetPropValue(Instance: TObject; PropInfo: PPropInfo) : Variant
function GetPropValue(Instance: TObject; PropInfo: PPropInfo;
PreferStrings: Boolean) : Variant
Visibility: default
Description: Due to missing Variant support, GetPropValue is not yet implemented. The declaration is
provided for compatibility with Delphi.
78.7.24 GetRawByteStrProp
Declaration: function GetRawbyteStrProp(Instance: TObject; PropInfo: PPropInfo)
1962
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
: RawByteString
function GetRawByteStrProp(Instance: TObject; const PropName: string)
: RawByteString
Visibility: default
78.7.25 GetRawInterfaceProp
Synopsis: Get a raw (CORBA) interface property.
Declaration: function GetRawInterfaceProp(Instance: TObject; const PropName: string)
: Pointer
function GetRawInterfaceProp(Instance: TObject; PropInfo: PPropInfo)
: Pointer
Visibility: default
Description: GetRawInterfaceProp can be used to retrieve the value of a published CORBA interface prop-
erty with name PropName from object Instance. Alternatively, the required property information
can be specified by PropInfo instead of the property name. In difference with the GetInterfaceProp
(1955) function, no reference counting is done.
Errors: If the property PropName does not exist, an EPropertyError exception is raised.
See also: GetInterfaceProp (1955), SetRawInterfaceProp (1974)
78.7.26 GetSetProp
Synopsis: Return the value of a set property.
Declaration: function GetSetProp(Instance: TObject; const PropName: string) : string
function GetSetProp(Instance: TObject; const PropName: string;
Brackets: Boolean) : string
function GetSetProp(Instance: TObject; const PropInfo: PPropInfo;
Brackets: Boolean) : string
Visibility: default
Description: GetSetProp returns the contents of a set property as a string. The property to be returned can be
specified by it’s name in PropName or by its property information in PropInfo.
The returned set is a string representation of the elements in the set as returned by SetToString (1975).
The Brackets option can be used to enclose the string representation in square brackets.
Errors: No checking is done whether Instance is non-nil, or whether PropInfo describes a valid or-
dinal property of Instance Specifying an invalid property name in PropName will result in an
EPropertyError exception.
See also: SetSetProp (1974), GetStrProp (1964), GetFloatProp (1953), GetInt64Prop (1954), GetMethodProp
(1955)
Listing: ./typinfex/ex7.pp
program example7 ;
{ $mode o b j f p c }
1963
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
uses r t t i o b j , t y p i n f o ;
Var
O : TMyTestObject ;
PI : PPropInfo ;
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 : ' , S e t A s S t r i n g (O. S e t F i e l d ) ) ;
W r i t e l n ( ' Ord ( Value ) : ' , Byte (O. S e t F i e l d ) ) ;
W r i t e l n ( ' Get ( name ) : ' , GetSetProp (O, ' S e t F i e l d ' ) ) ;
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 ) : ' , GetSetProp (O, PI , f a l s e ) ) ;
S : = [ meFirst , meThird ] ;
SetOrdProp (O, ' S e t F i e l d ' , Byte (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 , Byte (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.27 GetStrProp
Synopsis: Return the value of a string property.
Declaration: function GetStrProp(Instance: TObject; PropInfo: PPropInfo) : Ansistring
function GetStrProp(Instance: TObject; const PropName: string) : string
Visibility: default
Description: GetStrProp returns the value of the string property described by PropInfo or with name
PropName for object Instance.
1964
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
Errors: No checking is done whether Instance is non-nil, or whether PropInfo describes a valid
string property of Instance. Specifying an invalid property name in PropName will result in
an EPropertyError exception.
See also: SetStrProp (1975), SetWideStrProp (1977), GetOrdProp (1959), GetFloatProp (1953), GetInt64Prop
(1954), GetMethodProp (1955)
Listing: ./typinfex/ex3.pp
program example3 ;
{ $mode o b j f p c }
uses r t t i o b j , t y p i n f o ;
Var
O : TMyTestObject ;
PI : PPropInfo ;
begin
O: = TMyTestObject . Create ;
PI : = G et P ro p In f o (O, ' A n s i S t r i n g F i e l d ' ) ;
Writeln ( ' S t r i n g property : ' ) ;
W r i t e l n ( ' Value : ' ,O. A n s i S t r i n g F i e l d ) ;
W r i t e l n ( ' Get ( name ) : ' , GetStrProp (O, ' A n s i S t r i n g F i e l d ' ) ) ;
W r i t e l n ( ' Get ( p r o p i n f o ) : ' , GetStrProp (O, PI ) ) ;
S e t S t r P r op (O, ' A n s i S t r i n g F i e l d ' , ' F i r s t ' ) ;
W r i t e l n ( ' Set ( name , ' ' F i r s t ' ' ) : ' ,O. A n s i S t r i n g F i e l d ) ;
S e t S t r P r op (O, PI , ' Second ' ) ;
W r i t e l n ( ' Set ( p r o p i n f o , ' ' Second ' ' ) : ' ,O. A n s i S t r i n g F i e l d ) ;
O. Free ;
end .
78.7.28 GetTypeData
Synopsis: Return a pointer to type data, based on type information.
Declaration: function GetTypeData(TypeInfo: PTypeInfo) : PTypeData
Visibility: default
Description: GetTypeData returns a pointer to the TTypeData record that follows after the TTypeInfo
record pointed to by TypeInfo. It essentially skips the Kind and Name fields in the TTypeInfo
record.
Errors: None.
78.7.29 GetUnicodeStrProp
Synopsis: Get UnicodeString-valued property
Declaration: function GetUnicodeStrProp(Instance: TObject; PropInfo: PPropInfo)
: UnicodeString
function GetUnicodeStrProp(Instance: TObject; const PropName: string)
: UnicodeString
1965
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
Visibility: default
Description: GetUnicodeStrProp returns the UnicodeString property from Instance, where the property
is identified by the PropInfo pointer or the PropertyName.
Errors: If no property of the indicated name exists, or the value is not a Unicode string, an exception will
occur.
See also: GetStrProp (1964), SetUnicodeStrProp (1976)
78.7.30 GetVariantProp
Synopsis: Return the value of a variant property.
Declaration: function GetVariantProp(Instance: TObject; PropInfo: PPropInfo)
: Variant
function GetVariantProp(Instance: TObject; const PropName: string)
: Variant
Visibility: default
Description: Due to missing Variant support, the GetVariantProp function is not yet implemented. Provided
for Delphi compatibility only.
See also: SetVariantProp (1977)
78.7.31 GetWideStrProp
Synopsis: Read a widestring property
Description: GetWideStrProp returns the value of the widestring property described by PropInfo or with
name PropName for object Instance.
Errors: No checking is done whether Instance is non-nil, or whether PropInfo describes a valid
widestring property of Instance. Specifying an invalid property name in PropName will result
in an EPropertyError exception.
See also: GetStrProp (1964), SetWideStrProp (1977), GetOrdProp (1959), GetFloatProp (1953), GetInt64Prop
(1954), GetMethodProp (1955)
78.7.32 IsPublishedProp
Synopsis: Check whether a published property exists.
1966
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
Description: IsPublishedProp returns true if a class has a published property with name PropName. The
class can be specified in one of two ways:
Errors: No checks are done to ensure Instance or AClass are valid pointers. Specifying an invalid
property name in PropName will result in an EPropertyError exception.
See also: IsStoredProp (1967), PropIsType (1968)
Listing: ./typinfex/ex10.pp
program example10 ;
{ T h i s program demonstrates t h e I s P u b l i s h e d P r o p f u n c t i o n }
{ $mode o b j f p c }
uses r t t i o b j , t y p i n f o ;
Var
O : TMyTestObject ;
PI : PPropInfo ;
begin
O: = TMyTestObject . Create ;
Writeln ( ' Property t e s t s : ' );
Write ( ' I s P u b l i s h e d P r o p (O, B o o l e a n F i e l d ) : ' );
W r i t e l n ( I s P u b l i s h e d P r o p (O, ' B o o l e a n F i e l d ' ) ) ;
Write ( ' I s P u b l i s h e d P r o p ( Class , B o o l e a n F i e l d ) : ' ) ;
W r i t e l n ( I s P u b l i s h e d P r o p (O. ClassType , ' B o o l e a n F i e l d ' ) ) ;
Write ( ' I s P u b l i s h e d P r o p (O, SomeField ) : ' );
W r i t e l n ( I s P u b l i s h e d P r o p (O, ' SomeField ' ) ) ;
Write ( ' I s P u b l i s h e d P r o p ( Class , SomeField ) : ' );
W r i t e l n ( I s P u b l i s h e d P r o p (O. ClassType , ' SomeField ' ) ) ;
O. Free ;
end .
78.7.33 IsReadableProp
Declaration: function IsReadableProp(PropInfo: PPropInfo) : Boolean
function IsReadableProp(Instance: TObject; const PropName: string)
: Boolean
function IsReadableProp(AClass: TClass; const PropName: string)
: Boolean
Visibility: default
78.7.34 IsStoredProp
Synopsis: Check whether a property is stored.
Declaration: function IsStoredProp(Instance: TObject; PropInfo: PPropInfo) : Boolean
function IsStoredProp(Instance: TObject; const PropName: string)
: Boolean
1967
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
Visibility: default
Description: IsStoredProp returns True if the Stored modifier evaluates to True for the property de-
scribed by PropInfo or with name PropName for object Instance. It returns False other-
wise. 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.
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.35 IsWriteableProp
Declaration: function IsWriteableProp(PropInfo: PPropInfo) : Boolean
function IsWriteableProp(Instance: TObject; const PropName: string)
: Boolean
function IsWriteableProp(AClass: TClass; const PropName: string)
: Boolean
Visibility: default
78.7.36 PropIsType
Synopsis: Check the type of a published property.
1968
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
Description: PropIsType returns True if the property with name PropName has type TypeKind. It returns
False otherwise. The class to be examined can be specified in one of two ways:
Errors: No checks are done to ensure Instance or AClass are valid pointers.Specifying an invalid prop-
erty name in PropName will result in an EPropertyError exception.
See also: IsPublishedProp (1966), IsStoredProp (1967), PropType (1969)
Listing: ./typinfex/ex16.pp
program example16 ;
{ $mode o b j f p c }
uses r t t i o b j , t y p i n f o ;
Var
O : TMyTestObject ;
begin
O: = TMyTestObject . Create ;
Writeln ( ' Property t e s t s : ' );
Write ( ' PropIsType (O, BooleanField , t k B o o l ) : ' );
W r i t e l n ( PropIsType (O, ' B o o l e a n F i e l d ' , t k B o o l ) ) ;
Write ( ' PropIsType ( Class , BooleanField , t k B o o l ) : ' ) ;
W r i t e l n ( PropIsType (O. ClassType , ' B o o l e a n F i e l d ' , t k B o o l ) ) ;
Write ( ' PropIsType (O, B y t e F i e l d , t k S t r i n g ) : ' );
W r i t e l n ( PropisType (O, ' B y t e F i e l d ' , t k S t r i n g ) ) ;
Write ( ' PropIsType ( Class , B y t e F i e l d , t k S t r i n g ) : ' ) ;
W r i t e l n ( PropIsType (O. ClassType , ' B y t e F i e l d ' , t k S t r i n g ) ) ;
O. Free ;
end .
78.7.37 PropType
Synopsis: Return the type of a property
Declaration: function PropType(Instance: TObject; const PropName: string) : TTypeKind
function PropType(AClass: TClass; const PropName: string) : TTypeKind
Visibility: default
Description: Proptype returns the type of the property PropName for a class. The class to be examined can
be specified in one of 2 ways:
1969
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
Errors: No checks are done to ensure Instance or AClass are valid pointers. Specifying an invalid
property name in PropName will result in an EPropertyError exception.
See also: IsPublishedProp (1966), IsStoredProp (1967), PropIsType (1968)
Listing: ./typinfex/ex17.pp
program example17 ;
{ $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.38 RemoveEnumElementAliases
Declaration: procedure RemoveEnumElementAliases(aTypeInfo: PTypeInfo)
Visibility: default
78.7.39 SetDynArrayProp
Declaration: procedure SetDynArrayProp(Instance: TObject; const PropName: string;
const Value: Pointer)
procedure SetDynArrayProp(Instance: TObject; PropInfo: PPropInfo;
const Value: Pointer)
Visibility: default
78.7.40 SetEnumProp
Synopsis: Set value of an enumerated-type property
1970
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
Description: SetEnumProp sets the property described by PropInfo or with name PropName to Value.
Value must be a string with the name of the enumerate value, i.e. it can be used as an argument to
GetEnumValue (1953).
For an example, see GetEnumProp (1952).
Errors: No checks are done to ensure Instance or PropInfo are valid pointers. Specifying an invalid
property name in PropName will result in an EPropertyError exception.
See also: GetEnumProp (1952), SetStrProp (1975), SetFloatProp (1971), SetInt64Prop (1971), SetMethod-
Prop (1972)
78.7.41 SetFloatProp
Synopsis: Set value of a float property.
Declaration: procedure SetFloatProp(Instance: TObject; const PropName: string;
Value: Extended)
procedure SetFloatProp(Instance: TObject; PropInfo: PPropInfo;
Value: Extended)
Visibility: default
Description: SetFloatProp assigns Value to the property described by PropInfo or with name Propname
for the object Instance.
For an example, see GetFloatProp (1953).
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 (1953), SetOrdProp (1973), SetStrProp (1975), SetInt64Prop (1971), SetMethodProp
(1972)
78.7.42 SetInt64Prop
Synopsis: Set value of a Int64 property
Declaration: procedure SetInt64Prop(Instance: TObject; PropInfo: PPropInfo;
const Value: Int64)
procedure SetInt64Prop(Instance: TObject; const PropName: string;
const Value: Int64)
Visibility: default
Description: SetInt64Prop assigns Value to the property of type Int64 that is described by PropInfo
or with name Propname for the object Instance.
For an example, see GetInt64Prop (1954).
1971
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
Errors: No checking is done whether Instance is non-nil, or whether PropInfo describes a valid
Int64 property of Instance. Specifying an invalid property name in PropName will result
in an EPropertyError exception.
See also: GetInt64Prop (1954), GetMethodProp (1955), SetOrdProp (1973), SetStrProp (1975), SetFloatProp
(1971)
78.7.43 SetInterfaceProp
Synopsis: Set interface-valued property
Declaration: procedure SetInterfaceProp(Instance: TObject; const PropName: string;
const Value: IInterface)
procedure SetInterfaceProp(Instance: TObject; PropInfo: PPropInfo;
const Value: IInterface)
Visibility: default
Description: SetInterfaceProp assigns Value to the object property described by PropInfo or with
name Propname for the object Instance.
Errors: No checking is done whether Instance is non-nil, or whether PropInfo describes a valid inter-
face property of Instance. Specifying an invalid property name in PropName will result in an
EPropertyError exception.
See also: GetInterfaceProp (1955), SetObjectProp (1973), SetOrdProp (1973), SetStrProp (1975), SetFloat-
Prop (1971), SetInt64Prop (1971), SetMethodProp (1972)
78.7.44 SetMethodProp
Synopsis: Set the value of a method property
Declaration: procedure SetMethodProp(Instance: TObject; PropInfo: PPropInfo;
const Value: TMethod)
procedure SetMethodProp(Instance: TObject; const PropName: string;
const Value: TMethod)
Visibility: default
Description: SetMethodProp assigns Value to the method the property described by PropInfo or with
name Propname for object Instance.
The type TMethod of the Value parameter is defined in the SysUtils unit as:
Data should point to the instance of the class with the method Code.
For an example, see GetMethodProp (1955).
Errors: No checking is done whether Instance is non-nil, or whether PropInfo describes a valid
method property of Instance. Specifying an invalid property name in PropName will result
in an EPropertyError exception.
See also: GetMethodProp (1955), SetOrdProp (1973), SetStrProp (1975), SetFloatProp (1971), SetInt64Prop
(1971)
1972
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
78.7.45 SetObjectProp
Synopsis: Set the value of an object-type property.
Visibility: default
Description: SetObjectProp assigns Value to the object property described by PropInfo or with name
Propname for the object Instance.
For an example, see GetObjectProp (1957).
Errors: No checking is done whether Instance is non-nil, or whether PropInfo describes a valid ob-
ject property of Instance. Specifying an invalid property name in PropName will result in an
EPropertyError exception.
See also: GetObjectProp (1957), SetOrdProp (1973), SetStrProp (1975), SetFloatProp (1971), SetInt64Prop
(1971), SetMethodProp (1972)
78.7.46 SetOrdProp
Synopsis: Set value of an ordinal property
Declaration: procedure SetOrdProp(Instance: TObject; PropInfo: PPropInfo;
Value: Int64)
procedure SetOrdProp(Instance: TObject; const PropName: string;
Value: Int64)
Visibility: default
Description: SetOrdProp assigns Value to the ordinal property described by PropInfo or with name
Propname for the object Instance.
Ordinal properties that can be set include:
Integers and subranges of integersThe actual value of the integer must be passed.
Enumerated types and subranges of enumerated typesThe ordinal value of the enumerated type
must be passed.
Subrange typesof integers or enumerated types. Here the ordinal value must be passed.
SetsIf the base type of the set has less than 31 possible values. For each possible value; the corre-
sponding bit of Value must be set.
1973
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
78.7.47 SetPropValue
Synopsis: Set property value as variant
Visibility: default
Description: Due to missing Variant support, this function is not yet implemented; it is provided for Delphi
compatibility only.
78.7.48 SetRawByteStrProp
Declaration: procedure SetRawByteStrProp(Instance: TObject; const PropName: string;
const Value: RawByteString)
procedure SetRawByteStrProp(Instance: TObject; PropInfo: PPropInfo;
const Value: RawByteString)
Visibility: default
78.7.49 SetRawInterfaceProp
Synopsis: Set a raw (CORBA) interface property.
Declaration: procedure SetRawInterfaceProp(Instance: TObject;
const PropName: string;
const Value: Pointer)
procedure SetRawInterfaceProp(Instance: TObject; PropInfo: PPropInfo;
const Value: Pointer)
Visibility: default
Description: SetRawInterfaceProp can be used to set the value of a published CORBA interface with name
PropName from object Instance to Value. Alternatively, the required property information can
be specified by PropInfo instead of the property name. In difference with the SetInterfaceProp
(1972) procedure, no reference counting is done.
Errors: If the property PropName does not exist, an EPropertyError exception is raised.
See also: SetInterfaceProp (1972), GetRawInterfaceProp (1963)
78.7.50 SetSetProp
Synopsis: Set value of set-typed property.
Declaration: procedure SetSetProp(Instance: TObject; const PropName: string;
const Value: string)
procedure SetSetProp(Instance: TObject; const PropInfo: PPropInfo;
const Value: string)
Visibility: default
1974
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
Description: SetSetProp sets the property specified by PropInfo or PropName for object Instance to
Value. Value is a string which contains a comma-separated list of values, each value being a
string-representation of the enumerated value that should be included in the set. The value should be
accepted by the StringToSet (1977) function.
The value can be formed using the SetToString (1975) function.
For an example, see GetSetProp (1963).
Errors: No checking is done whether Instance is non-nil, or whether PropInfo describes a valid ordinal
property of Instance. No range checking is performed. Specifying an invalid property name in
PropName will result in an EPropertyError exception.
See also: GetSetProp (1963), SetOrdProp (1973), SetStrProp (1975), SetFloatProp (1971), SetInt64Prop (1971),
SetMethodProp (1972), SetToString (1975), StringToSet (1977)
78.7.51 SetStrProp
Synopsis: Set value of a string property
Declaration: procedure SetStrProp(Instance: TObject; const PropName: string;
const Value: AnsiString)
procedure SetStrProp(Instance: TObject; PropInfo: PPropInfo;
const Value: Ansistring)
Visibility: default
Description: SetStrProp assigns Value to the string property described by PropInfo or with name Propname
for object Instance.
For an example, see GetStrProp (1964)
Errors: No checking is done whether Instance is non-nil, or whether PropInfo describes a valid
string property of Instance. Specifying an invalid property name in PropName will result in
an EPropertyError exception.
See also: GetStrProp (1964), SetWideStrProp (1977), SetOrdProp (1973), SetFloatProp (1971), SetInt64Prop
(1971), SetMethodProp (1972)
78.7.52 SetToString
Synopsis: Convert set to a string description
1975
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
brackets. Setting the Brackets parameter to True will surround the string representation with
brackets.
The function returns the string representation of the set.
Errors: No checking is done to see whether PropInfo points to valid property information.
See also: GetEnumName (1951), GetEnumValue (1953), StringToSet (1977)
Listing: ./typinfex/ex18.pp
program example18 ;
{ T h i s program demonstrates t h e S e t T o S t r i n g f u n c t i o n }
{ $mode o b j f p c }
uses r t t i o b j , t y p i n f o ;
Var
O : TMyTestObject ;
PI : PPropInfo ;
I : longint ;
begin
O: = TMyTestObject . Create ;
PI : = G et P ro p In f o (O, ' S e t F i e l d ' ) ;
O. S e t F i e l d : = [ m e f i r s t , meSecond , meThird ] ;
I : = GetOrdProp (O, PI ) ;
W r i t e l n ( ' Set p r o p e r t y t o s t r i n g : ' ) ;
W r i t e l n ( ' Value : ' , S e t T o S t r i n g ( PI , I , False ) ) ;
O. S e t F i e l d : = [ m e f i r s t , meSecond ] ;
I : = GetOrdProp (O, PI ) ;
W r i t e l n ( ' Value : ' , S e t T o S t r i n g ( PI , I , True ) ) ;
I : = S t r i n g T o S e t ( PI , ' m e f i r s t ' ) ;
SetOrdProp (O, PI , I ) ;
I : = GetOrdProp (O, PI ) ;
W r i t e l n ( ' Value : ' , S e t T o S t r i n g ( PI , I , False ) ) ;
I : = S t r i n g T o S e t ( PI , ' [ mesecond , m e t h i r d ] ' ) ;
SetOrdProp (O, PI , I ) ;
I : = GetOrdProp (O, PI ) ;
W r i t e l n ( ' Value : ' , S e t T o S t r i n g ( PI , I , True ) ) ;
O. Free ;
end .
78.7.53 SetUnicodeStrProp
Synopsis: Set UnicodeString-valued property
Declaration: procedure SetUnicodeStrProp(Instance: TObject; const PropName: string;
const Value: UnicodeString)
procedure SetUnicodeStrProp(Instance: TObject; PropInfo: PPropInfo;
const Value: UnicodeString)
Visibility: default
Description: SetUnicodeStrProp sets the UnicodeString property from Instance to Value, where the
property is identified by the PropInfo pointer or the PropertyName.
1976
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
Errors: If no property of the indicated name exists, or it is not of type unicodestring, an exception will occur.
See also: SetStrProp (1975), GetUnicodeStrProp (1965)
78.7.54 SetVariantProp
Synopsis: Set value of a variant property
Description: Due to missing Variant support, this function is not yet implemented. Provided for Delphi compati-
bility only.
78.7.55 SetWideStrProp
Synopsis: Set a widestring property
Declaration: procedure SetWideStrProp(Instance: TObject; const PropName: string;
const Value: WideString)
procedure SetWideStrProp(Instance: TObject; PropInfo: PPropInfo;
const Value: WideString)
Visibility: default
Description: SetWideStrProp assigns Value to the widestring property described by PropInfo or with
name Propname for object Instance.
Errors: No checking is done whether Instance is non-nil, or whether PropInfo describes a valid
widestring property of Instance. Specifying an invalid property name in PropName will result
in an EPropertyError exception.
See also: GetWideStrProp (1966), SetStrProp (1975), SetOrdProp (1973), SetFloatProp (1971), SetInt64Prop
(1971), SetMethodProp (1972)
78.7.56 StringToSet
Synopsis: Convert string description to a set.
Declaration: function StringToSet(PropInfo: PPropInfo; const Value: string) : LongInt
function StringToSet(TypeInfo: PTypeInfo; const Value: string) : LongInt
procedure StringToSet(PropInfo: PPropInfo; const Value: string;
Result: Pointer)
procedure StringToSet(TypeInfo: PTypeInfo; const Value: string;
Result: Pointer)
Visibility: default
Description: StringToSet converts the string representation of a set in Value to a integer representation of
the set, using the property information found in PropInfo. This property information should point
to the property information of a set property. The function returns the integer representation of the
set. (i.e, the set value, typecast to an integer)
1977
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
The string representation can be surrounded with square brackets, and must consist of the names of
the elements of the base type of the set. The base type of the set should be an enumerated type. The
elements should be separated by commas, and may be surrounded by spaces. each of the names will
be fed to the GetEnumValue (1953) function.
For an example, see SetToString (1975).
Errors: No checking is done to see whether PropInfo points to valid property information. If a wrong
name is given for an enumerated value, then an EPropertyError will be raised.
See also: GetEnumName (1951), GetEnumValue (1953), SetToString (1975)
78.8 TArrayTypeData
TArrayTypeData = packed record
private
function GetElType : PTypeInfo
;
function GetDims(aIndex: Byte) : PTypeInfo;
public
property
ElType : PTypeInfo;
property Dims[Index: Byte]: PTypeInfo;
Size
: SizeInt;
ElCount : SizeInt;
ElTypeRef : PPTypeInfo;
DimCount
: Byte;
DimsRef : Array[0..255] of PPTypeInfo;
end
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.
78.8.2 TArrayTypeData.ElType
Synopsis: Type information for an element in the array
1978
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
78.8.3 TArrayTypeData.Dims
Synopsis: Range information for each dimension in the array
78.9 TClassData
TClassData = packed record
private
function GetUnitName : ShortString
;
function GetPropertyTable : PPropData;
public
ClassType : TClass
;
Parent : PPTypeInfo;
PropCount : SmallInt;
property UnitName
: ShortString;
property PropertyTable : PPropData;
private
UnitNameField
: ShortString;
end
78.9.2 TClassData.UnitName
Declaration: Property UnitName : ShortString
Visibility: public
Access: Read
78.9.3 TClassData.PropertyTable
Declaration: Property PropertyTable : PPropData
Visibility: public
Access: Read
1979
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
78.10 TInterfaceData
TInterfaceData = packed record
private
function GetUnitName : ShortString
;
function GetPropertyTable : PPropData;
function GetMethodTable
: PIntfMethodTable;
public
Parent : PPTypeInfo;
Flags : TIntfFlagsBase
;
GUID : TGuid;
property UnitName : ShortString;
property PropertyTable
: PPropData;
property MethodTable : PIntfMethodTable;
private
UnitNameField : ShortString;
end
78.10.2 TInterfaceData.UnitName
Declaration: Property UnitName : ShortString
Visibility: public
Access: Read
78.10.3 TInterfaceData.PropertyTable
Declaration: Property PropertyTable : PPropData
Visibility: public
Access: Read
78.10.4 TInterfaceData.MethodTable
Declaration: Property MethodTable : PIntfMethodTable
Visibility: public
Access: Read
1980
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
78.11 TInterfaceRawData
TInterfaceRawData = packed record
private
function GetUnitName
: ShortString;
function GetIIDStr : ShortString;
function GetPropertyTable
: PPropData;
function GetMethodTable : PIntfMethodTable;
public
Parent : PPTypeInfo;
Flags : TIntfFlagsBase;
IID : TGuid;
property UnitName : ShortString;
property IIDStr : ShortString
;
property PropertyTable : PPropData;
property MethodTable : PIntfMethodTable
;
private
UnitNameField : ShortString;
end
78.11.2 TInterfaceRawData.UnitName
Declaration: Property UnitName : ShortString
Visibility: public
Access: Read
78.11.3 TInterfaceRawData.IIDStr
Declaration: Property IIDStr : ShortString
Visibility: public
Access: Read
78.11.4 TInterfaceRawData.PropertyTable
Declaration: Property PropertyTable : PPropData
1981
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
Visibility: public
Access: Read
78.11.5 TInterfaceRawData.MethodTable
Declaration: Property MethodTable : PIntfMethodTable
Visibility: public
Access: Read
78.12 TIntfMethodEntry
TIntfMethodEntry = packed record
private
function GetParam(Index
: Word) : PVmtMethodParam;
function GetResultLocs : PParameterLocations
;
function GetTail : Pointer;
function GetNext : PIntfMethodEntry
;
function GetName : ShortString;
public
ResultType : PPTypeInfo
;
CC : TCallConv;
Kind : TMethodKind;
ParamCount : Word;
StackSize
: SizeInt;
NamePtr : PShortString;
property Name : ShortString
;
property Param[Index: Word]: PVmtMethodParam;
property ResultLocs
: PParameterLocations;
property Tail : Pointer;
property Next
: PIntfMethodEntry;
end
1982
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
78.12.2 TIntfMethodEntry.Name
Declaration: Property Name : ShortString
Visibility: public
Access: Read
78.12.3 TIntfMethodEntry.Param
Declaration: Property Param[Index: Word]: PVmtMethodParam
Visibility: public
Access: Read
78.12.4 TIntfMethodEntry.ResultLocs
Declaration: Property ResultLocs : PParameterLocations
Visibility: public
Access: Read
78.12.5 TIntfMethodEntry.Tail
Declaration: Property Tail : Pointer
Visibility: public
Access: Read
78.12.6 TIntfMethodEntry.Next
Declaration: Property Next : PIntfMethodEntry
Visibility: public
Access: Read
78.13 TIntfMethodTable
TIntfMethodTable = packed record
private
function GetMethod(Index
: Word) : PIntfMethodEntry;
public
Count : Word;
RTTICount : Word
;
property Method[Index: Word]: PIntfMethodEntry;
end
1983
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
78.13.2 TIntfMethodTable.Method
Declaration: Property Method[Index: Word]: PIntfMethodEntry
Visibility: public
Access: Read
78.14 TManagedField
TManagedField = packed record
private
function GetTypeRef : PTypeInfo
;
public
property TypeRef : PTypeInfo;
TypeRefRef : PPTypeInfo
;
FldOffset : SizeInt;
end
78.14.2 TManagedField.TypeRef
Synopsis: Type information for the field
Declaration: Property TypeRef : PTypeInfo
Visibility: public
Access: Read
78.15 TParameterLocation
TParameterLocation = packed record
private
LocType : Byte;
function
1984
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
GetRegType : TRegisterType;
function GetReference : Boolean;
function GetShiftVal : Int8;
public
RegSub : TSubRegister;
RegNumber
: Word;
Offset : SizeInt;
property Reference : Boolean;
property
RegType : TRegisterType;
property ShiftVal : Int8;
end
78.15.2 TParameterLocation.Reference
Declaration: Property Reference : Boolean
Visibility: public
Access: Read
78.15.3 TParameterLocation.RegType
Declaration: Property RegType : TRegisterType
Visibility: public
Access: Read
78.15.4 TParameterLocation.ShiftVal
Declaration: Property ShiftVal : Int8
Visibility: public
Access: Read
78.16 TParameterLocations
TParameterLocations = packed record
private
function GetLocation
(aIndex: Byte) : PParameterLocation;
1985
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
78.16.2 TParameterLocations.Location
Declaration: Property Location[Index: Byte]: PParameterLocation
Visibility: public
Access: Read
78.16.3 TParameterLocations.Tail
Declaration: Property Tail : Pointer
Visibility: public
Access: Read
78.17 TProcedureParam
TProcedureParam = packed record
private
function GetParamType :
PTypeInfo;
function GetFlags : Byte;
public
property ParamType
: PTypeInfo;
property Flags : Byte;
ParamFlags : TParamFlags
;
ParamTypeRef : PPTypeInfo;
Name : ShortString;
end
1986
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
78.17.2 TProcedureParam.ParamType
Synopsis: Type information for this parameter
Declaration: Property ParamType : PTypeInfo
Visibility: public
Access: Read
78.17.3 TProcedureParam.Flags
Synopsis: Flags for this parameter (see TParamFlags)
Declaration: Property Flags : Byte
Visibility: public
Access: Read
78.18 TProcedureSignature
TProcedureSignature = packed record
private
function GetResultType
: PTypeInfo;
public
property ResultType : PTypeInfo;
Flags :
Byte;
CC : TCallConv;
ResultTypeRef : PPTypeInfo;
ParamCount
: Byte;
function GetParam(ParamIndex: Integer) : PProcedureParam
;
end
1987
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
78.18.3 TProcedureSignature.GetParam
Synopsis: Get parameter signature
Declaration: function GetParam(ParamIndex: Integer) : PProcedureParam
Visibility: public
Description: GetParam can be used to retrieve a pointer to the description of a parameter. The index ParamIndex
is zero-based.
Errors: In case of an invalid parameter index, Nil is returned.
See also: TProcedureParam (1986)
78.18.4 TProcedureSignature.ResultType
Synopsis: Result type info (Nil if no result)
Declaration: Property ResultType : PTypeInfo
Visibility: public
Access: Read
78.19 TPropData
TPropData = packed record
private
function GetProp(Index: Word)
: PPropInfo;
function GetTail : Pointer;
public
PropCount : Word
;
PropList : record
public
_alignmentdummy : PtrInt;
end
;
property Prop[Index: Word]: PPropInfo;
property Tail : Pointer
;
end
The TPropData record is not used, but is provided for completeness and compatibility with Delphi.
1988
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
78.19.2 TPropData.Prop
Declaration: Property Prop[Index: Word]: PPropInfo
Visibility: public
Access: Read
78.19.3 TPropData.Tail
Declaration: Property Tail : Pointer
Visibility: public
Access: Read
78.20 TPropInfo
TPropInfo = packed record
private
function GetPropType : PTypeInfo
;
function GetTail : Pointer;
function GetNext : PPropInfo;
public
PropTypeRef : PPTypeInfo;
GetProc : CodePointer;
SetProc :
CodePointer;
StoredProc : CodePointer;
Index : Integer;
Default
: LongInt;
NameIndex : SmallInt;
PropProcs : Byte;
Name : ShortString
;
property PropType : PTypeInfo;
property Tail : Pointer;
property
Next : PPropInfo;
end
The TPropInfo record describes one published property of a class. The property information of a
class are stored as an array of TPropInfo records.
The Name field is stored not with 255 characters, but with just as many characters as required to store
the name.
1989
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
78.20.2 TPropInfo.PropType
Synopsis: Property type
Declaration: Property PropType : PTypeInfo
Visibility: public
Access: Read
78.20.3 TPropInfo.Tail
Declaration: Property Tail : Pointer
Visibility: public
Access: Read
78.20.4 TPropInfo.Next
Declaration: Property Next : PPropInfo
Visibility: public
Access: Read
78.21 TTypeData
TTypeData = packed record
private
function GetBaseType : PTypeInfo
;
function GetCompType : PTypeInfo;
function GetParentInfo : PTypeInfo
;
function GetRecInitData : PRecInitData;
function GetHelperParent
: PTypeInfo;
function GetExtendedInfo : PTypeInfo;
function GetIntfParent
: PTypeInfo;
function GetRawIntfParent : PTypeInfo;
function
GetIIDStr : ShortString;
function GetElType : PTypeInfo;
function
GetElType2 : PTypeInfo;
1990
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
1991
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
MinValue : LongInt;
MaxValue : LongInt;
case TTypeKind of
tkEnumeration
: (
public
BaseTypeRef : PPTypeInfo;
NameList : ShortString;
);
);, tkEnumeration: (
public
MinValue : LongInt;
MaxValue :
LongInt;
case TTypeKind of
tkEnumeration: (
public
BaseTypeRef
: PPTypeInfo;
NameList : ShortString;
);
);, tkBool: (
public
MinValue : LongInt;
MaxValue : LongInt;
case TTypeKind of
tkEnumeration
: (
public
BaseTypeRef : PPTypeInfo;
NameList : ShortString;
);
);, tkWChar: (
public
MinValue : LongInt;
MaxValue : LongInt
;
case TTypeKind of
tkEnumeration: (
public
BaseTypeRef : PPTypeInfo
;
NameList : ShortString;
);
);
tkInt64: (
public
MinInt64Value
: Int64;
MaxInt64Value : Int64;
);
tkQWord: (
public
MinQWordValue
1992
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
: QWord;
MaxQWordValue : QWord;
);
tkSet: (
public
SetSize :
SizeInt;
CompTypeRef : PPTypeInfo;
);
);, tkQWord: (
public
OrdType
: TOrdType;
case TTypeKind of
tkInteger: (
public
MinValue : LongInt
;
MaxValue : LongInt;
case TTypeKind of
tkEnumeration: (
public
BaseTypeRef : PPTypeInfo;
NameList : ShortString;
);
);, tkChar
: (
public
MinValue : LongInt;
MaxValue : LongInt;
case TTypeKind
of
tkEnumeration: (
public
BaseTypeRef : PPTypeInfo;
NameList
: ShortString;
);
);, tkEnumeration: (
public
MinValue : LongInt
;
MaxValue : LongInt;
case TTypeKind of
tkEnumeration: (
public
BaseTypeRef : PPTypeInfo;
NameList : ShortString;
);
);, tkBool
: (
public
MinValue : LongInt;
MaxValue : LongInt;
1993
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
case TTypeKind
of
tkEnumeration: (
public
BaseTypeRef : PPTypeInfo;
NameList
: ShortString;
);
);, tkWChar: (
public
MinValue : LongInt;
MaxValue
: LongInt;
case TTypeKind of
tkEnumeration: (
public
BaseTypeRef
: PPTypeInfo;
NameList : ShortString;
);
);
tkInt64: (
public
MinInt64Value : Int64;
MaxInt64Value : Int64;
);
tkQWord: (
public
MinQWordValue : QWord;
MaxQWordValue : QWord;
);
tkSet: (
public
SetSize : SizeInt;
CompTypeRef : PPTypeInfo;
);
);, tkInteger
: (
public
OrdType : TOrdType;
case TTypeKind of
tkInteger: (
public
MinValue : LongInt;
MaxValue : LongInt;
case TTypeKind of
tkEnumeration
: (
public
BaseTypeRef : PPTypeInfo;
NameList : ShortString;
);
);, tkChar: (
public
1994
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
MinValue : LongInt;
MaxValue : LongInt
;
case TTypeKind of
tkEnumeration: (
public
BaseTypeRef : PPTypeInfo
;
NameList : ShortString;
);
);, tkEnumeration: (
public
MinValue
: LongInt;
MaxValue : LongInt;
case TTypeKind of
tkEnumeration
: (
public
BaseTypeRef : PPTypeInfo;
NameList : ShortString;
);
);, tkBool: (
public
MinValue : LongInt;
MaxValue : LongInt
;
case TTypeKind of
tkEnumeration: (
public
BaseTypeRef : PPTypeInfo
;
NameList : ShortString;
);
);, tkWChar: (
public
MinValue :
LongInt;
MaxValue : LongInt;
case TTypeKind of
tkEnumeration:
(
public
BaseTypeRef : PPTypeInfo;
NameList : ShortString;
);
);
tkInt64: (
public
MinInt64Value : Int64;
MaxInt64Value : Int64
;
);
tkQWord: (
1995
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
public
MinQWordValue : QWord;
MaxQWordValue :
QWord;
);
tkSet: (
public
SetSize : SizeInt;
CompTypeRef : PPTypeInfo
;
);
);, tkChar: (
public
OrdType : TOrdType;
case TTypeKind of
tkInteger: (
public
MinValue : LongInt;
MaxValue : LongInt;
case
TTypeKind of
tkEnumeration: (
public
BaseTypeRef : PPTypeInfo;
NameList : ShortString;
);
);, tkChar: (
public
MinValue : LongInt
;
MaxValue : LongInt;
case TTypeKind of
tkEnumeration: (
public
BaseTypeRef : PPTypeInfo;
NameList : ShortString;
);
);, tkEnumeration
: (
public
MinValue : LongInt;
MaxValue : LongInt;
case TTypeKind
of
tkEnumeration: (
public
BaseTypeRef : PPTypeInfo;
NameList
: ShortString;
);
);, tkBool: (
public
MinValue : LongInt;
MaxValue
1996
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
: LongInt;
case TTypeKind of
tkEnumeration: (
public
BaseTypeRef
: PPTypeInfo;
NameList : ShortString;
);
);, tkWChar: (
public
MinValue : LongInt;
MaxValue : LongInt;
case TTypeKind of
tkEnumeration
: (
public
BaseTypeRef : PPTypeInfo;
NameList : ShortString;
);
);
tkInt64: (
public
MinInt64Value : Int64;
MaxInt64Value
: Int64;
);
tkQWord: (
public
MinQWordValue : QWord;
MaxQWordValue
: QWord;
);
tkSet: (
public
SetSize : SizeInt;
CompTypeRef :
PPTypeInfo;
);
);, tkEnumeration: (
public
OrdType : TOrdType;
case TTypeKind of
tkInteger: (
public
MinValue : LongInt;
MaxValue
: LongInt;
case TTypeKind of
tkEnumeration: (
public
BaseTypeRef
: PPTypeInfo;
NameList : ShortString;
);
1997
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
);, tkChar: (
public
MinValue : LongInt;
MaxValue : LongInt;
case TTypeKind of
tkEnumeration
: (
public
BaseTypeRef : PPTypeInfo;
NameList : ShortString;
);
);, tkEnumeration: (
public
MinValue : LongInt;
MaxValue :
LongInt;
case TTypeKind of
tkEnumeration: (
public
BaseTypeRef
: PPTypeInfo;
NameList : ShortString;
);
);, tkBool: (
public
MinValue : LongInt;
MaxValue : LongInt;
case TTypeKind of
tkEnumeration
: (
public
BaseTypeRef : PPTypeInfo;
NameList : ShortString;
);
);, tkWChar: (
public
MinValue : LongInt;
MaxValue : LongInt
;
case TTypeKind of
tkEnumeration: (
public
BaseTypeRef : PPTypeInfo
;
NameList : ShortString;
);
);
tkInt64: (
public
MinInt64Value
: Int64;
MaxInt64Value : Int64;
);
tkQWord: (
1998
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
public
MinQWordValue
: QWord;
MaxQWordValue : QWord;
);
tkSet: (
public
SetSize :
SizeInt;
CompTypeRef : PPTypeInfo;
);
);, tkBool: (
public
OrdType
: TOrdType;
case TTypeKind of
tkInteger: (
public
MinValue : LongInt
;
MaxValue : LongInt;
case TTypeKind of
tkEnumeration: (
public
BaseTypeRef : PPTypeInfo;
NameList : ShortString;
);
);, tkChar
: (
public
MinValue : LongInt;
MaxValue : LongInt;
case TTypeKind
of
tkEnumeration: (
public
BaseTypeRef : PPTypeInfo;
NameList
: ShortString;
);
);, tkEnumeration: (
public
MinValue : LongInt
;
MaxValue : LongInt;
case TTypeKind of
tkEnumeration: (
public
BaseTypeRef : PPTypeInfo;
NameList : ShortString;
);
);, tkBool
: (
public
1999
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
MinValue : LongInt;
MaxValue : LongInt;
case TTypeKind
of
tkEnumeration: (
public
BaseTypeRef : PPTypeInfo;
NameList
: ShortString;
);
);, tkWChar: (
public
MinValue : LongInt;
MaxValue
: LongInt;
case TTypeKind of
tkEnumeration: (
public
BaseTypeRef
: PPTypeInfo;
NameList : ShortString;
);
);
tkInt64: (
public
MinInt64Value : Int64;
MaxInt64Value : Int64;
);
tkQWord: (
public
MinQWordValue : QWord;
MaxQWordValue : QWord;
);
tkSet: (
public
SetSize : SizeInt;
CompTypeRef : PPTypeInfo;
);
);, tkWChar:
(
public
OrdType : TOrdType;
case TTypeKind of
tkInteger: (
public
MinValue : LongInt;
MaxValue : LongInt;
case TTypeKind of
tkEnumeration
: (
public
BaseTypeRef : PPTypeInfo;
NameList : ShortString;
);
2000
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
);, tkChar: (
public
MinValue : LongInt;
MaxValue : LongInt
;
case TTypeKind of
tkEnumeration: (
public
BaseTypeRef : PPTypeInfo
;
NameList : ShortString;
);
);, tkEnumeration: (
public
MinValue
: LongInt;
MaxValue : LongInt;
case TTypeKind of
tkEnumeration
: (
public
BaseTypeRef : PPTypeInfo;
NameList : ShortString;
);
);, tkBool: (
public
MinValue : LongInt;
MaxValue : LongInt
;
case TTypeKind of
tkEnumeration: (
public
BaseTypeRef : PPTypeInfo
;
NameList : ShortString;
);
);, tkWChar: (
public
MinValue :
LongInt;
MaxValue : LongInt;
case TTypeKind of
tkEnumeration:
(
public
BaseTypeRef : PPTypeInfo;
NameList : ShortString;
);
);
tkInt64: (
public
MinInt64Value : Int64;
MaxInt64Value : Int64
;
2001
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
);
tkQWord: (
public
MinQWordValue : QWord;
MaxQWordValue :
QWord;
);
tkSet: (
public
SetSize : SizeInt;
CompTypeRef : PPTypeInfo
;
);
);, tkSet: (
public
OrdType : TOrdType;
case TTypeKind of
tkInteger
: (
public
MinValue : LongInt;
MaxValue : LongInt;
case TTypeKind
of
tkEnumeration: (
public
BaseTypeRef : PPTypeInfo;
NameList
: ShortString;
);
);, tkChar: (
public
MinValue : LongInt;
MaxValue
: LongInt;
case TTypeKind of
tkEnumeration: (
public
BaseTypeRef
: PPTypeInfo;
NameList : ShortString;
);
);, tkEnumeration: (
public
MinValue : LongInt;
MaxValue : LongInt;
case TTypeKind of
tkEnumeration
: (
public
BaseTypeRef : PPTypeInfo;
NameList : ShortString;
);
);, tkBool: (
2002
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
public
MinValue : LongInt;
MaxValue : LongInt
;
case TTypeKind of
tkEnumeration: (
public
BaseTypeRef : PPTypeInfo
;
NameList : ShortString;
);
);, tkWChar: (
public
MinValue :
LongInt;
MaxValue : LongInt;
case TTypeKind of
tkEnumeration:
(
public
BaseTypeRef : PPTypeInfo;
NameList : ShortString;
);
);
tkInt64: (
public
MinInt64Value : Int64;
MaxInt64Value : Int64
;
);
tkQWord: (
public
MinQWordValue : QWord;
MaxQWordValue :
QWord;
);
tkSet: (
public
SetSize : SizeInt;
CompTypeRef : PPTypeInfo
;
);
);
tkFloat: (
public
FloatType : TFloatType;
);
tkSString:
(
public
MaxLength : Byte;
);
tkClass: (
public
2003
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
ClassType : TClass
;
ParentInfoRef : PPTypeInfo;
PropCount : SmallInt;
UnitName
: ShortString;
);
tkRecord: (
public
RecInitInfo : Pointer;
RecSize
: Integer;
case Boolean of
False: (
public
ManagedFldCount : Integerdeprecated
;
);
True: (
public
TotalFieldCount : Integer;
);
);
tkHelper:
(
public
HelperParentRef : PPTypeInfo;
ExtendedInfoRef : PPTypeInfo
;
HelperProps : SmallInt;
HelperUnit : ShortString;
);
tkMethod
: (
public
MethodKind : TMethodKind;
ParamCount : Byte;
ParamList
: Array[0..1023] of Char;
);
tkProcVar: (
public
ProcSig : TProcedureSignature
;
);
tkInterface: (
public
IntfParentRef : PPTypeInfo;
IntfFlags
: TIntfFlagsBase;
GUID : TGuid;
IntfUnit : ShortString;
);
tkInterfaceRaw
2004
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
: (
public
RawIntfParentRef : PPTypeInfo;
RawIntfFlags : TIntfFlagsBase
;
IID : TGuid;
RawIntfUnit : ShortString;
);
tkArray: (
public
ArrayData : TArrayTypeData;
);
tkDynArray: (
public
elSize :
PtrUInt;
elType2Ref : PPTypeInfo;
varType : LongInt;
elTypeRef
: PPTypeInfo;
DynUnitName : ShortStringBase;
);
tkClassRef: (
public
InstanceTypeRef : PPTypeInfo;
);
tkPointer: (
public
RefTypeRef
: PPTypeInfo;
);
end
If the typeinfo kind is tkClass, then the property information follows the UnitName string, as an
array of TPropInfo (1989) records.
2005
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
78.21.2 TTypeData.BaseType
Synopsis: Base type on which this type is based.
78.21.3 TTypeData.CompType
Synopsis: Comp type
Declaration: Property CompType : PTypeInfo
Visibility: public
Access: Read
78.21.4 TTypeData.ParentInfo
Synopsis: Parent class type info
Declaration: Property ParentInfo : PTypeInfo
Visibility: public
Access: Read
78.21.5 TTypeData.RecInitData
Declaration: Property RecInitData : PRecInitData
Visibility: public
Access: Read
78.21.6 TTypeData.HelperParent
Synopsis: Type information for parent helper class
Declaration: Property HelperParent : PTypeInfo
Visibility: public
Access: Read
Description: HelperParent points to the type information of the parent helper class. It is Nil if there is no
parent class.
2006
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
78.21.7 TTypeData.ExtendedInfo
Synopsis: Type information for the extended type (record or class).
Description: ExtendedInfo points to the type information of the type that is being extended.
See also: TTypeData.HelperParent (2006)
78.21.8 TTypeData.IntfParent
Synopsis: Parent interface type data.
Declaration: Property IntfParent : PTypeInfo
Visibility: public
Access: Read
78.21.9 TTypeData.RawIntfParent
Synopsis: Raw interface parent.
78.21.10 TTypeData.IIDStr
Synopsis: IID string representation of interface
Declaration: Property IIDStr : ShortString
Visibility: public
Access: Read
78.21.11 TTypeData.ElType2
Synopsis: Dynamical array Element type
Declaration: Property ElType2 : PTypeInfo
Visibility: public
Access: Read
2007
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
78.21.12 TTypeData.ElType
Synopsis: Dynamical array Element type
78.21.13 TTypeData.InstanceType
Synopsis: Pointer to instance type data
Declaration: Property InstanceType : PTypeInfo
Visibility: public
Access: Read
78.21.14 TTypeData.RefType
Synopsis: Type info for referred type (Nil for untyped pointer)
Declaration: Property RefType : PTypeInfo
Visibility: public
Access: Read
78.22 TVmtFieldEntry
TVmtFieldEntry = packed record
private
function GetNext : PVmtFieldEntry
;
function GetTail : Pointer;
public
FieldOffset : PtrUInt;
TypeIndex : Word;
Name : ShortString;
property Tail : Pointer
;
property Next : PVmtFieldEntry;
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.
2008
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
78.22.2 TVmtFieldEntry.Tail
Declaration: Property Tail : Pointer
Visibility: public
Access: Read
78.22.3 TVmtFieldEntry.Next
Declaration: Property Next : PVmtFieldEntry
Visibility: public
Access: Read
78.23 TVmtFieldTable
TVmtFieldTable = packed record
private
function GetField(aIndex
: Word) : PVmtFieldEntry;
public
Count : Word;
ClassTab : PVmtFieldClassTab
;
Fields : Array[0..0] of TVmtFieldEntry;
property Field[aIndex
: Word]: PVmtFieldEntry;
end
TVmtFieldTable describes the fields for which RTTI was generated. A TVmtFieldTable
entry is generated by the compiler in the RTTI information, it is not something one creates manually.
Basically it contains a list of TVmtFieldEntry (2008) values.
78.23.2 TVmtFieldTable.Field
Declaration: Property Field[aIndex: Word]: PVmtFieldEntry
Visibility: public
Access: Read
78.24 TVmtMethodParam
TVmtMethodParam = packed record
private
2009
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
78.24.2 TVmtMethodParam.Name
Declaration: Property Name : ShortString
Visibility: public
Access: Read
78.24.3 TVmtMethodParam.Tail
Declaration: Property Tail : Pointer
Visibility: public
Access: Read
78.24.4 TVmtMethodParam.Next
Declaration: Property Next : PVmtMethodParam
Visibility: public
Access: Read
2010
CHAPTER 78. REFERENCE FOR UNIT ’TYPINFO’
78.25 TVmtMethodTable
TVmtMethodTable = packed record
private
function GetEntry(Index
: LongWord) : PVmtMethodEntry;
public
Count : LongWord;
property
Entry[Index: LongWord]: PVmtMethodEntry;
private
Entries : Array
[0..0] of TVmtMethodEntry;
end
78.25.2 TVmtMethodTable.Entry
Declaration: Property Entry[Index: LongWord]: PVmtMethodEntry
Visibility: public
Access: Read
78.26 EPropertyConvertError
78.26.1 Description
EPropertyConvertError is not used in the Free Pascal implementation of the typinfo unit, but
is declared for Delphi compatibility.
78.27 EPropertyError
78.27.1 Description
Exception raised in case of an error in one of the functions.
2011
Chapter 79
79.1 Overview
The fpwidestring (2012) 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 (2023)
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".
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 unicode-
ducet.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 (2023) call using a directory and the language
ducet automatically select the correct file.
2012
CHAPTER 79. REFERENCE FOR UNIT ’UNICODEDATA’
79.2.2 Constants
DEFAULT_UCA_COMPARISON_STRENGTH = 3
DirectorySeparator = '/'
ENDIAN_NATIVE = TEndianKind.Little
ENDIAN_NON_NATIVE = TEndianKind.Big
ENDIAN_SUFFIX contains the suffixes used in LoadCollation (2023) when constructing a collation
filename for a language.
ERROR_INVALID_CODEPOINT_SEQUENCE = 1
HIGH_SURROGATE_BEGIN = Word($D800)
HIGH_SURROGATE_END = Word($DBFF)
LOW_SURROGATE_BEGIN = Word($DC00)
LOW_SURROGATE_END = Word($DFFF)
2013
CHAPTER 79. REFERENCE FOR UNIT ’UNICODEDATA’
MAX_LEGAL_UTF32 = $10FFFF
MAX_WORD = High(Word)
reCodesetConversion = reRangeError
ROOT_COLLATION_NAME = 'DUCET'
UCS4_HALF_BASE = LongWord($10000)
UCS4_HALF_MASK = Word($3FF)
Unused currently
UGC_ClosePunctuation = 14
UGC_CombiningMark = 6
UGC_ConnectPunctuation = 11
UGC_Control = 25
UGC_CurrencySymbol = 19
UGC_DashPunctuation = 12
UGC_DecimalNumber = 8
2014
CHAPTER 79. REFERENCE FOR UNIT ’UNICODEDATA’
UGC_EnclosingMark = 7
UGC_FinalPunctuation = 16
UGC_Format = 26
UGC_InitialPunctuation = 15
UGC_LetterNumber = 9
UGC_LineSeparator = 23
UGC_LowercaseLetter = 1
UGC_MathSymbol = 18
UGC_ModifierLetter = 3
UGC_ModifierSymbol = 20
UGC_NonSpacingMark = 5
UGC_OpenPunctuation = 13
UGC_OtherLetter = 4
2015
CHAPTER 79. REFERENCE FOR UNIT ’UNICODEDATA’
UGC_OtherNumber = 10
UGC_OtherPunctuation = 17
UGC_OtherSymbol = 21
UGC_ParagraphSeparator = 24
UGC_PrivateUse = 28
UGC_SpaceSeparator = 22
UGC_Surrogate = 27
UGC_TitlecaseLetter = 2
UGC_Unassigned = 29
UGC_UppercaseLetter = 0
2016
CHAPTER 79. REFERENCE FOR UNIT ’UNICODEDATA’
79.2.3 Types
DWord = UInt32
PCollationTableItem = ^TCollationTableItem
PDWord = ^DWord
PtrInt = NativeInt
PtrUInt = NativeUInt
PUCA_DataBook = ^TUCA_DataBook
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
PUCA_PropWeights = ^TUCA_PropWeights
Pointer to TUCA_PropWeights
PUC_Prop = ^TUC_Prop
PUInt24 = ^UInt24
Pointer to TUInt24Rec
PUnicodeChar = ^UnicodeChar
2017
CHAPTER 79. REFERENCE FOR UNIT ’UNICODEDATA’
SizeInt = NativeInt
TCategoryMask = Set of
TCollationField = (BackWard,VariableLowLimit,VariableHighLimit,
Alternate,Normalization,Strength)
Value Explanation
Alternate
BackWard Backwards encoded
Normalization
Strength
VariableHighLimit Has upper bound on variable weights
VariableLowLimit Has lower bound on variable weights
Set of TCollationField
TCollationTableItem = record
public
Collation : PUCA_DataBook;
Aliases : TUnicodeStringArray;
end
TCollationVersion = TCollationName
TEndianKind = (Little,Big)
Value Explanation
Big Big-endian platform
Little Little-endian platform
2018
CHAPTER 79. REFERENCE FOR UNIT ’UNICODEDATA’
Array of TUCASortKeyItem
TUCASortKeyItem = Word
TUCA_VariableKind = (ucaShifted,ucaNonIgnorable,ucaBlanked,
ucaShiftedTrimmed,ucaIgnoreSP)
Value Explanation
ucaBlanked Variable collation elements and any subsequent ignorable collation elements are reset so that all weigh
ucaIgnoreSP Not implemented (variant of Shifted that reduces the set of variable collation elements to include only
ucaNonIgnorable Variable collation elements are not reset to be quaternary collation elements
ucaShifted Variable collation elements are reset to zero at levels one through three
ucaShiftedTrimmed This option is the same as Shifted, except that all trailing FFFFs are trimmed from the sort key.
UInt24 = TUInt24Rec
UnicodeChar = WideChar
2019
CHAPTER 79. REFERENCE FOR UNIT ’UNICODEDATA’
79.3.2 BytesToName
Declaration: function BytesToName(const ABytes: Array of Byte) : UnicodeString
Visibility: default
79.3.3 BytesToString
Declaration: function BytesToString(const ABytes: Array of Byte;
const AValideChars: TSetOfByte) : UnicodeString
Visibility: default
79.3.4 CanonicalOrder
Synopsis: Put unicode string in canonical order.
Declaration: procedure CanonicalOrder(var AString: UnicodeString); Overload
procedure CanonicalOrder(AStr: PUnicodeChar; const ALength: SizeInt)
; Overload
Visibility: default
Description: CanonicalOrder transforms a unicode string AString (or the alternate form using a null-
terminated AStr with length Alength) so it is in canonical order (as defined by the unicode spec-
ification). A string needs to be in canonical order to be able to compare strings. This function is
called as part of NormalizeNFD (2024).
See also: NormalizeNFD (2024)
79.3.5 CompareSortKey
Synopsis: Compare two sort keys.
Sort keys can be constructed from unicode strings using ComputeSortKey (2021).
See also: ComputeSortKey (2021)
2020
CHAPTER 79. REFERENCE FOR UNIT ’UNICODEDATA’
79.3.6 ComputeSortKey
Synopsis: Compute the sort key for a string
Declaration: function ComputeSortKey(const AString: UnicodeString;
const ACollation: PUCA_DataBook) : TUCASortKey
; Overload
function ComputeSortKey(const AStr: PUnicodeChar;
const ALength: SizeInt;
const ACollation: PUCA_DataBook) : TUCASortKey
; Overload
Visibility: default
Description: ComputeSortKey computes the sort key for a unicode string AString (or the alternate form
using a null-terminated AStr with length Alength) using the Unicode Collation Algorithm data in
ACollation. This key can then be used in CompareSortKey (2020) to compare unicode strings.
See also: CompareSortKey (2020)
79.3.7 FilterString
Declaration: function FilterString(const AStr: PUnicodeChar; const ALength: SizeInt;
const AExcludedMask: TCategoryMask) : UnicodeString
; Overload
function FilterString(const AStr: UnicodeString;
const AExcludedMask: TCategoryMask) : UnicodeString
; Overload
Visibility: default
79.3.8 FindCollation
Synopsis: Find a collation by name
Declaration: function FindCollation(AName: UnicodeString) : PUCA_DataBook; Overload
function FindCollation(const AIndex: Integer) : PUCA_DataBook; Overload
Visibility: default
Description: FindCollection searches a collation with name AName or index AIndex in the list of known
collations and returns a pointer to the collation data. If the requested collation is not known, i.e. the
name is not found, or the index is out of range, then Nil is returned. The valid index range is 0 to
GetCollationCount-1.
See also: GetCollationCount (2022)
79.3.9 FreeCollation
Synopsis: Free collation data.
Declaration: procedure FreeCollation(AItem: PUCA_DataBook)
Visibility: default
Description: FreeCollation removes all structures in the collation data from memory. It will not do anything
when the header field Dynamic is false. (collations loaded and registered using LoadCollation
(2023) are always dynamic and must be freed).
2021
CHAPTER 79. REFERENCE FOR UNIT ’UNICODEDATA’
79.3.10 FromUCS4
Synopsis: Convert UCS4 to UNicodeChar
Declaration: procedure FromUCS4(const AValue: UCS4Char; out AHighS: UnicodeChar;
out ALowS: UnicodeChar)
Visibility: default
Description: FromUCS4 converts the UCS4 encoded unicode character AValue to a set of unicode (surrogate
pair) characters encoded in UTF16: AHighS, ALowS.
See also: ToUCS4 (2025), UnicodeIsHighSurrogate (2025), UnicodeIsLowSurrogate (2026), UnicodeIsSur-
rogatePair (2026)
79.3.11 GetCollationCount
Synopsis: Return the number of known collations.
Declaration: function GetCollationCount : Integer
Visibility: default
Description: GetCollationCount returns the number of registered collations. The collation data can be re-
trieved by index using the FindCollation (2021). The maximum index is GetCollationCount-1.
See also: FindCollation (2021)
79.3.12 GetProps
Synopsis: Get unicode character data
Declaration: function GetProps(const ACodePoint: Word) : PUC_Prop; Overload
function GetProps(const AHighS: UnicodeChar; const ALowS: UnicodeChar)
: PUC_Prop; Overload
function GetProps(const ACodePoint: Cardinal) : PUC_Prop; Overload
Visibility: default
Description: GetProps returns a pointer to a general unicode character property data structure. The charac-
ter can be specified using a word or cardinal sized codepoint (ACodePoint), or using a UTF16
encoded surrogate pair (AHighS,ALowS).
The returned pointer must not be freed, it points to part of a static structure.
See also: GetPropUCA (2022)
79.3.13 GetPropUCA
Synopsis: Get unicode collation algorithm properties for a unicode character
2022
CHAPTER 79. REFERENCE FOR UNIT ’UNICODEDATA’
79.3.14 IncrementalCompareString
Synopsis: Compare 2 strings using the specified collation
Declaration: function IncrementalCompareString(const AStrA: PUnicodeChar;
const ALengthA: SizeInt;
const AStrB: PUnicodeChar;
const ALengthB: SizeInt;
const ACollation: PUCA_DataBook)
: Integer; Overload
function IncrementalCompareString(const AStrA: UnicodeString;
const AStrB: UnicodeString;
const ACollation: PUCA_DataBook)
: Integer; Overload
Visibility: default
Description: IncrementalCompareString creates 2 compare keys from the strings AStrA and AStrB
using collation data in ACollation. The keys are computed only to the point where the two
strings differ. This means the keys cannot be reused for other comparisons if the strings differ. The
two strings can be specified as a unicode string or as a pointer to a null-terminated character array
with a length (ALengthA and ALengthB). It returns then the result of CompareSortKey (2020).
Errors: None.
See also: ComputeSortKey (2021), CompareSortKey (2020)
79.3.15 LoadCollation
Synopsis: Load a binary collation data file from file
Declaration: function LoadCollation(const AData: Pointer;
const ADataLength: Integer;
var AAliases: TUnicodeStringArray) : PUCA_DataBook
; Overload
function LoadCollation(const AData: Pointer; const ADataLength: Integer)
: PUCA_DataBook; Overload
function LoadCollation(const AFileName: UnicodeString;
var AAliases: TUnicodeStringArray) : PUCA_DataBook
; Overload
2023
CHAPTER 79. REFERENCE FOR UNIT ’UNICODEDATA’
79.3.16 NormalizeNFD
Synopsis: Perform unicode normalization D on a string
Declaration: function NormalizeNFD(const AString: UnicodeString) : UnicodeString
; Overload
function NormalizeNFD(const AStr: PUnicodeChar; ALength: SizeInt)
: UnicodeString; Overload
Visibility: default
Description: NormalizeNFD normalizes the string AString (or the alternate form using a null-terminated
AStr with length Alength) to Unicode Normalization Form D. The resulting string can be used to
determine equivalence of unicode strings.
See also: CanonicalOrder (2020)
79.3.17 PrepareCollation
Synopsis: Prepare a collation for use in the list
Declaration: procedure PrepareCollation(ACollation: PUCA_DataBook;
const ABaseName: UnicodeString;
const AChangedFields: TCollationFields)
Visibility: default
Description: PrepareCollation will link collation definition ACollation to the base collection with
name ABaseName (if empty, it defaults to the root collation). It will also initialize some fields in the
definition, copying them from the base collation, but excludes the fields enumerated in AChangedFields.
It should normally not be needed to call this function, it is called as part of LoadCollation (2023).
See also: LoadCollation (2023)
2024
CHAPTER 79. REFERENCE FOR UNIT ’UNICODEDATA’
79.3.18 RegisterCollation
Synopsis: Register a new collation
79.3.19 ToUCS4
Synopsis: Encode unicode UTF16 surrogate pair to UCS4 character
Declaration: function ToUCS4(const AHighS: UnicodeChar; const ALowS: UnicodeChar)
: UCS4Char
Visibility: default
Description: ToUCS4 converts set of unicode (surrogate pair) characters encoded in UTF16: AHighS, ALowS
to a UCS4 encoded unicode character.
See also: FromUCS4 (2022), UnicodeIsHighSurrogate (2025), UnicodeIsLowSurrogate (2026), UnicodeIs-
SurrogatePair (2026)
79.3.20 UnicodeIsHighSurrogate
Synopsis: Check if a UTF16 character is the high character in a surrogate pair.
Declaration: function UnicodeIsHighSurrogate(const AValue: UnicodeChar) : Boolean
Visibility: default
2025
CHAPTER 79. REFERENCE FOR UNIT ’UNICODEDATA’
79.3.21 UnicodeIsLowSurrogate
Synopsis: Check if a UTF16 character is the low character in a surrogate pair.
79.3.22 UnicodeIsSurrogatePair
Synopsis: Check if a pair of UTF16 encoded characters is a valid surrogate pair.
79.3.23 UnicodeToLower
Synopsis: Transform unicode string to lowercase
Description: UnicodeToLower transforms a UTF16 unicode string AString to its lowercase equivalent and
returns this in AResultString. If the transformation was successful, then the function returns 0.
A nonzero return value means an error occurred. AResultString will remain untouched in that
case.
If a character in AString cannot be found in the unicode data tables, an error will be reported,
unless AIgnoreInvalidSequence is set to True, in which case the character will be copied
as-is to the output.
Unicode collation data can be loaded using RegisterCollation (2025) or LoadCollation (2023)
Errors: On error, a nonzero value will be returned.
2026
CHAPTER 79. REFERENCE FOR UNIT ’UNICODEDATA’
79.3.24 UnicodeToUpper
Synopsis: Transform unicode string to uppercase
Description: UnicodeToUpper transforms a UTF16 unicode string AString to its uppercase equivalent and
returns this in AResultString. If the transformation was successful, then the function returns 0.
A nonzero return value means an error occurred. AResultString will remain untouched in that
case.
If a character in AString cannot be found in the unicode data tables, an error will be reported,
unless AIgnoreInvalidSequence is set to True, in which case the character will be copied
as-is to the output.
Unicode collation data can be loaded using RegisterCollation (2025) or LoadCollation (2023)
Errors: On error, a nonzero value will be returned.
79.3.25 UnregisterCollation
Synopsis: Remove a collation from the list of known collections.
Declaration: function UnregisterCollation(AName: UnicodeString) : Boolean
Visibility: default
Description: UnRegisterCollation removes a collation AName from the list of known collations. It returns
True if the collation was found and successfully removed.
Errors: If the collation was not found, False is returned.
See also: RegisterCollation (2025), UnRegisterCollations (2027), LoadCollation (2023)
79.3.26 UnregisterCollations
Synopsis: Unregister all collations.
Declaration: procedure UnregisterCollations(const AFreeDynamicCollations: Boolean)
Visibility: default
2027
CHAPTER 79. REFERENCE FOR UNIT ’UNICODEDATA’
79.4 TCollationTable
TCollationTable = record
private
FItems : TCollationTableItemArray
;
FCount : Integer;
function GetCapacity : Integer;
function
GetCount : Integer;
function GetItem(const AIndex: Integer) : PCollationTableItem
;
procedure Grow;
procedure ClearItem(AItem: PCollationTableItem
);
AddAlias;
public
class function NormalizeName(AName: UnicodeString
) : UnicodeString
; Static;
procedure
Clear;
IndexOf;
Find;
function Add(ACollation: PUCA_DataBook
) : Integer;
function Remove(AIndex: Integer) : PUCA_DataBook;
property Item[AIndex: Integer]: PCollationTableItem; default;
property Count : Integer;
property Capacity : Integer;
end
79.4.3 TCollationTable.NormalizeName
Declaration: class function NormalizeName(AName: UnicodeString) : UnicodeString
2028
CHAPTER 79. REFERENCE FOR UNIT ’UNICODEDATA’
; Static
Visibility: public
79.4.4 TCollationTable.Clear
Declaration: procedure Clear
Visibility: public
79.4.5 TCollationTable.IndexOf
Declaration: function IndexOf(AName: UnicodeString) : Integer; Overload
function IndexOf(ACollation: PUCA_DataBook) : Integer; Overload
Visibility: public
79.4.6 TCollationTable.Find
Declaration: function Find(AName: UnicodeString) : PCollationTableItem; Overload
function Find(ACollation: PUCA_DataBook) : PCollationTableItem
; Overload
Visibility: public
79.4.7 TCollationTable.Add
Declaration: function Add(ACollation: PUCA_DataBook) : Integer
Visibility: public
79.4.8 TCollationTable.Remove
Declaration: function Remove(AIndex: Integer) : PUCA_DataBook
Visibility: public
79.4.9 TCollationTable.Item
Declaration: Property Item[AIndex: Integer]: PCollationTableItem; default
Visibility: public
Access: Read
79.4.10 TCollationTable.Count
Declaration: Property Count : Integer
Visibility: public
Access: Read
2029
CHAPTER 79. REFERENCE FOR UNIT ’UNICODEDATA’
79.4.11 TCollationTable.Capacity
Declaration: Property Capacity : Integer
Visibility: public
Access: Read
79.5 TUCA_DataBook
TUCA_DataBook = record
public
Base : PUCA_DataBook;
Version :
TCollationVersion;
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;
NoNormalization : Boolean;
ComparisonStrength : Byte;
Dynamic : Boolean;
function IsVariable
(const AWeight: PUCA_PropWeights) : Boolean;
end
TUCA_DataBook describes a Unicode Collation Algorithm data set. data sets can be registered us-
ing the RegisterCollation (2025) function or loaded from file using LoadCollation (2023). A collation
data book must be specified when comparing unicode strings.
79.5.2 TUCA_DataBook.IsVariable
Synopsis: Check if a weight is a variable weight
Declaration: function IsVariable(const AWeight: PUCA_PropWeights) : Boolean
Visibility: public
2030
CHAPTER 79. REFERENCE FOR UNIT ’UNICODEDATA’
Description: IsVariable checks whether AWeight is between the VariableLowLimit and VariableHighLimit
limits.
79.6 TUCA_PropItemContextRec
TUCA_PropItemContextRec = packed record
public
CodePointCount :
Byte;
WeightCount : Byte;
function GetCodePoints : PUInt24;
function GetWeights : PUCA_PropWeights;
end
This is an internal structure which should not be used directly, the actual structure is subject to
change.
79.6.2 TUCA_PropItemContextRec.GetCodePoints
Synopsis: get the address of actual code points.
Declaration: function GetCodePoints : PUInt24
Visibility: public
79.6.3 TUCA_PropItemContextRec.GetWeights
Synopsis: Get the Address of actual weights.
Declaration: function GetWeights : PUCA_PropWeights
Visibility: public
79.7 TUCA_PropItemContextTreeNodeRec
TUCA_PropItemContextTreeNodeRec = packed record
public
Left : Word
;
Right : Word;
Data : TUCA_PropItemContextRec;
function GetLeftNode
: PUCA_PropItemContextTreeNodeRec;
function GetRightNode : PUCA_PropItemContextTreeNodeRec
;
end
2031
CHAPTER 79. REFERENCE FOR UNIT ’UNICODEDATA’
This is an internal structure for the tree which should not be used directly, the actual structure is
subject to change.
79.7.2 TUCA_PropItemContextTreeNodeRec.GetLeftNode
Synopsis: Access to left tree node data
Declaration: function GetLeftNode : PUCA_PropItemContextTreeNodeRec
Visibility: public
79.7.3 TUCA_PropItemContextTreeNodeRec.GetRightNode
Synopsis: Access to right tree node data
Declaration: function GetRightNode : PUCA_PropItemContextTreeNodeRec
Visibility: public
79.8 TUCA_PropItemContextTreeRec
TUCA_PropItemContextTreeRec = packed record
public
Size : UInt24
;
function GetData : PUCA_PropItemContextTreeNodeRec;
property
Data : PUCA_PropItemContextTreeNodeRec;
function Find(const AChars
: PUInt24; const ACharCount: Integer;
out ANode: PUCA_PropItemContextTreeNodeRec
) : Boolean;
end
This is an internal tree structure for storing unicode collation data which should not be used directly,
the actual structure is subject to change.
2032
CHAPTER 79. REFERENCE FOR UNIT ’UNICODEDATA’
79.8.3 TUCA_PropItemContextTreeRec.GetData
Synopsis: Access to tree data (getter for Data property)
Declaration: function GetData : PUCA_PropItemContextTreeNodeRec
Visibility: public
79.8.4 TUCA_PropItemContextTreeRec.Find
Synopsis: Find data for encoded character
Declaration: function Find(const AChars: PUInt24; const ACharCount: Integer;
out ANode: PUCA_PropItemContextTreeNodeRec) : Boolean
Visibility: public
Description: Find searches the tree for the collation data for the character encoded in AChars (ACharCount).
It returns true if the data was found, false if not. A pointer to the collation data is returned in ANode.
79.8.5 TUCA_PropItemContextTreeRec.Data
Synopsis: Read-only access to tree data
Declaration: Property Data : PUCA_PropItemContextTreeNodeRec
Visibility: public
Access: Read
79.9 TUCA_PropItemRec
TUCA_PropItemRec = packed record
private
FLAG_VALID = 0;
FLAG_CODEPOINT
= 1;
FLAG_CONTEXTUAL = 2;
FLAG_DELETION = 3;
FLAG_COMPRESS_WEIGHT_1
= 6;
FLAG_COMPRESS_WEIGHT_2 = 7;
function GetCodePoint : UInt24
;
public
WeightLength : Byte;
ChildCount : Byte;
Size : Word
;
Flags : Byte;
function HasCodePoint : Boolean;
property CodePoint
: UInt24;
function IsValid : Boolean;
procedure GetWeightArray
2033
CHAPTER 79. REFERENCE FOR UNIT ’UNICODEDATA’
(ADest: PUCA_PropWeights);
function GetSelfOnlySize : Cardinal;
function GetContextual : Boolean;
property Contextual : Boolean
;
function GetContext : PUCA_PropItemContextTreeRec;
function
IsDeleted : Boolean;
function IsWeightCompress_1 : Boolean;
function
IsWeightCompress_2 : Boolean;
end
TUCA_PropItemRec encodes 1 entry from the Unicode Collation data in an encoded form.
79.9.3 TUCA_PropItemRec.HasCodePoint
Synopsis: Check flags whether a codepoint is present.
Declaration: function HasCodePoint : Boolean
Visibility: public
79.9.4 TUCA_PropItemRec.IsValid
Synopsis: Check flags for validity
Declaration: function IsValid : Boolean
Visibility: public
2034
CHAPTER 79. REFERENCE FOR UNIT ’UNICODEDATA’
79.9.5 TUCA_PropItemRec.GetWeightArray
Synopsis: Return an array of weights
79.9.6 TUCA_PropItemRec.GetSelfOnlySize
Synopsis: Size of this item data (in bytes).
Declaration: function GetSelfOnlySize : Cardinal
Visibility: public
79.9.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.9.8 TUCA_PropItemRec.GetContext
Synopsis: Access to context data
Declaration: function GetContext : PUCA_PropItemContextTreeRec
Visibility: public
Description: GetContext returns a pointer to the context data. It is Nil if the context flag is not set.
79.9.9 TUCA_PropItemRec.IsDeleted
Synopsis: Check flags if deleted bit is set
Declaration: function IsDeleted : Boolean
Visibility: public
79.9.10 TUCA_PropItemRec.IsWeightCompress_1
Synopsis: Check whether weight compression flag 1 is set
Declaration: function IsWeightCompress_1 : Boolean
Visibility: public
2035
CHAPTER 79. REFERENCE FOR UNIT ’UNICODEDATA’
79.9.11 TUCA_PropItemRec.IsWeightCompress_2
Synopsis: Check whether weight compression flag 2 is set
79.9.12 TUCA_PropItemRec.CodePoint
Synopsis: Get the codepoint
Description: Access to codepoint if HasCodePoint returns true. If HasCodePoint returns false, an excep-
tion will be raised.
79.9.13 TUCA_PropItemRec.Contextual
Synopsis: Check if the contextual bit is set in the flags
Declaration: Property Contextual : Boolean
Visibility: public
Access: Read
79.10 TUC_Prop
TUC_Prop = packed record
private
function GetCategory : Byte;
procedure SetCategory(AValue: Byte);
function GetWhiteSpace : Boolean
;
procedure SetWhiteSpace(AValue: Boolean);
function GetHangulSyllable
: Boolean;
procedure SetHangulSyllable(AValue: Boolean);
function
GetNumericValue : Double;
public
CategoryData : Byte;
CCC : Byte
;
NumericIndex : Byte;
SimpleUpperCase : UInt24;
SimpleLowerCase
: UInt24;
DecompositionID : SmallInt;
property Category : Byte
2036
CHAPTER 79. REFERENCE FOR UNIT ’UNICODEDATA’
;
property WhiteSpace : Boolean;
property HangulSyllable : Boolean
;
property NumericValue : Double;
end
79.10.2 TUC_Prop.Category
Synopsis: Get the category
Declaration: Property Category : Byte
Visibility: public
Access: Read,Write
Description: CategoryData provides access to the category part of CategoryData (encoded).
79.10.3 TUC_Prop.WhiteSpace
Synopsis: Is the character considered whitespace
Description: Whitespace provides easy access to the Whitespace part of CategoryData (encoded).
79.10.4 TUC_Prop.HangulSyllable
Synopsis: Is the character a hangul syllable
Declaration: Property HangulSyllable : Boolean
Visibility: public
Access: Read,Write
Description: Whitespace provides easy access to the HangulSyllable part of CategoryData (encoded).
2037
CHAPTER 79. REFERENCE FOR UNIT ’UNICODEDATA’
79.10.5 TUC_Prop.NumericValue
Synopsis: Numeric value
79.11 TUInt24Rec
TUInt24Rec = packed record
public
byte0 : Byte;
byte1 : Byte;
byte2 : Byte;
TUInt24Rec.class operator implicit(a: TUInt24Rec
) : Cardinal;
TUInt24Rec.class operator implicit(a: TUInt24Rec)
: LongInt;
TUInt24Rec.class operator implicit(a: TUInt24Rec) :
Word;
TUInt24Rec.class operator implicit(a: TUInt24Rec) : Byte
;
TUInt24Rec.class operator implicit(a: Cardinal) : TUInt24Rec;
TUInt24Rec.class operator equal(a: TUInt24Rec; b: TUInt24Rec)
: Boolean;
TUInt24Rec.class operator equal(a: TUInt24Rec; b: Cardinal
) : Boolean;
TUInt24Rec.class operator equal(a: Cardinal; b: TUInt24Rec
) : Boolean;
TUInt24Rec.class operator equal(a: TUInt24Rec; b: LongInt
) : Boolean;
TUInt24Rec.class operator equal(a: LongInt; b: TUInt24Rec
) : Boolean;
TUInt24Rec.class operator equal(a: TUInt24Rec; b: Word
) : Boolean;
TUInt24Rec.class operator equal(a: Word; b: TUInt24Rec
) : Boolean;
TUInt24Rec.class operator equal(a: TUInt24Rec; b: Byte
) : Boolean;
TUInt24Rec.class operator equal(a: Byte; b: TUInt24Rec
) : Boolean;
TUInt24Rec.class operator notequal(a: TUInt24Rec; b
: TUInt24Rec)
: Boolean;
TUInt24Rec
.class operator notequal(a: TUInt24Rec; b: Cardinal) : Boolean;
TUInt24Rec.class operator notequal(a: Cardinal; b: TUInt24Rec) :
Boolean;
TUInt24Rec.class operator greaterthan(a: TUInt24Rec; b
2038
CHAPTER 79. REFERENCE FOR UNIT ’UNICODEDATA’
: TUInt24Rec)
: Boolean;
TUInt24Rec.class operator greaterthan(a: TUInt24Rec; b: Cardinal
)
: Boolean;
TUInt24Rec
.class operator greaterthan(a: Cardinal; b: TUInt24Rec)
: Boolean;
TUInt24Rec.class operator
greaterthanorequal(a: TUInt24Rec;
b: TUInt24Rec) : Boolean;
TUInt24Rec.class operator
greaterthanorequal(a: TUInt24Rec; b: Cardinal)
: Boolean;
TUInt24Rec.class operator
greaterthanorequal(a: Cardinal; b: TUInt24Rec)
: Boolean;
TUInt24Rec.class operator
lessthan(a: TUInt24Rec; b: TUInt24Rec)
: Boolean;
TUInt24Rec.class operator lessthan(a: TUInt24Rec
; b: Cardinal) : Boolean;
TUInt24Rec.class operator lessthan(a:
Cardinal; b: TUInt24Rec) : Boolean;
TUInt24Rec.class operator lessthanorequal
(a: TUInt24Rec; b: TUInt24Rec)
: Boolean;
TUInt24Rec.class operator lessthanorequal(a
: TUInt24Rec; b: Cardinal)
: Boolean;
TUInt24Rec.class operator lessthanorequal(a: Cardinal
; b: TUInt24Rec)
: Boolean
;
end
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.
2039
CHAPTER 79. REFERENCE FOR UNIT ’UNICODEDATA’
2040
CHAPTER 79. REFERENCE FOR UNIT ’UNICODEDATA’
79.11.2 TUInt24Rec.implicit(TUInt24Rec):Cardinal
Synopsis: Assign TUInt24Rec to cardinal
Declaration: TUInt24Rec.class operator implicit(a: TUInt24Rec) : Cardinal
Visibility: public
Description: Assign to cardinal, byte0 to MSB and so on.
See also: TUInt24Rec.implicit(TUInt24Rec):LongInt (2042), TUInt24Rec.implicit(TUInt24Rec):Word (2042),
TUInt24Rec.implicit(TUInt24Rec):Byte (2042), TUInt24Rec.implicit(Cardinal):TUInt24Rec (2043),
TUInt24Rec.implicit(Longint):TUInt24Rec (2039), TUInt24Rec.implicit(Word):TUInt24Rec (2039),
TUInt24Rec.implicit(Byte):TUInt24Rec (2039)
79.11.3 TUInt24Rec.implicit(TUInt24Rec):LongInt
Synopsis: Assign TUInt24Rec to longint
Declaration: TUInt24Rec.class operator implicit(a: TUInt24Rec) : LongInt
Visibility: public
Description: Assign to cardinal, byte0 to MSB and so on.
See also: TUInt24Rec.implicit(TUInt24Rec):Cardinal (2042), TUInt24Rec.implicit(TUInt24Rec):Word (2042),
TUInt24Rec.implicit(TUInt24Rec):Byte (2042)
79.11.4 TUInt24Rec.implicit(TUInt24Rec):Word
Synopsis: Assign TUInt24Rec to word
Declaration: TUInt24Rec.class operator implicit(a: TUInt24Rec) : Word
Visibility: public
Description: Assign to word, byte0 to MSB, byte1 to MSB.
Errors: If the value is too big (>$FFFF) to be assigned, an overflow error occurs.
See also: TUInt24Rec.implicit(TUInt24Rec):Cardinal (2042), TUInt24Rec.implicit(TUInt24Rec):Longint (2042),
TUInt24Rec.implicit(TUInt24Rec):Byte (2042), TUInt24Rec.implicit(Cardinal):TUInt24Rec (2043),
TUInt24Rec.implicit(Longint):TUInt24Rec (2039), TUInt24Rec.implicit(Word):TUInt24Rec (2039),
TUInt24Rec.implicit(Byte):TUInt24Rec (2039)
79.11.5 TUInt24Rec.implicit(TUInt24Rec):Byte
Synopsis: Assign TUInt24Rec to byte
Declaration: TUInt24Rec.class operator implicit(a: TUInt24Rec) : Byte
Visibility: public
Description: Assign to byte, byte0 is assigned.
Errors: If the value is too big (>$FF) to be assigned, an overflow error occurs.
See also: TUInt24Rec.implicit(TUInt24Rec):Cardinal (2042), TUInt24Rec.implicit(TUInt24Rec):Longint (2042),
TUInt24Rec.implicit(TUInt24Rec):Word (2042), TUInt24Rec.implicit(Cardinal):TUInt24Rec (2043),
TUInt24Rec.implicit(Longint):TUInt24Rec (2039), TUInt24Rec.implicit(Word):TUInt24Rec (2039),
TUInt24Rec.implicit(Byte):TUInt24Rec (2039)
2042
CHAPTER 79. REFERENCE FOR UNIT ’UNICODEDATA’
79.11.6 TUInt24Rec.implicit(Cardinal):TUInt24Rec
Synopsis: Assign TUInt24Recfrom Cardinal
Errors: If the value is too big (>$FFFFFF) to be assigned, an overflow error occurs.
See also: TUInt24Rec.implicit(TUInt24Rec):Longint (2042), TUInt24Rec.implicit(TUInt24Rec):Word (2042),
TUInt24Rec.implicit(TUInt24Rec):Byte (2042), TUInt24Rec.implicit(Longint):TUInt24Rec (2039),
TUInt24Rec.implicit(Word):TUInt24Rec (2039), TUInt24Rec.implicit(Byte):TUInt24Rec (2039)
79.11.7 TUInt24Rec.equal(TUInt24Rec,TUInt24Rec):Boolean
Synopsis: Determine equality of 2 TUInt24Rec records
Declaration: TUInt24Rec.class operator equal(a: TUInt24Rec; b: TUInt24Rec) : Boolean
Visibility: public
Description: The 2 records are considered equal if the 3 bytes are equal.
79.11.8 TUInt24Rec.equal(TUInt24Rec,Cardinal):Boolean
Synopsis: Check if cardinal and TUInt24Rec are equal
Declaration: TUInt24Rec.class operator equal(a: TUInt24Rec; b: Cardinal) : Boolean
Visibility: public
Description: The cardinal b is considered equal to a if the fourth byte (LSB) is zero, and the first three bytes
equal byte0, byte1, and byte2.
79.11.9 TUInt24Rec.equal(Cardinal,TUInt24Rec):Boolean
Synopsis: Check whether a TUInt24Rec value equals a cardinal value.
Declaration: TUInt24Rec.class operator equal(a: Cardinal; b: TUInt24Rec) : Boolean
Visibility: public
Description: The cardinal a is considered equal to b if the fourth byte (LSB) is zero, and the first three bytes
equal byte0, byte1, and byte2.
79.11.10 TUInt24Rec.equal(TUInt24Rec,LongInt):Boolean
Synopsis: Check whether a TUInt24Rec value equals a longint value.
Declaration: TUInt24Rec.class operator equal(a: TUInt24Rec; b: LongInt) : Boolean
Visibility: public
Description: The longint b is considered equal to a if the fourth byte (LSB) is zero, and the first three bytes equal
byte0, byte1, and byte2.
2043
CHAPTER 79. REFERENCE FOR UNIT ’UNICODEDATA’
79.11.11 TUInt24Rec.equal(LongInt,TUInt24Rec):Boolean
Synopsis: Check whether a TUInt24Rec value equals a longint value.
Declaration: TUInt24Rec.class operator equal(a: LongInt; b: TUInt24Rec) : Boolean
Visibility: public
Description: The longint a is considered equal to b if the fourth byte (LSB) is zero, and the first three bytes equal
byte0, byte1, and byte2.
79.11.12 TUInt24Rec.equal(TUInt24Rec,Word):Boolean
Synopsis: Check whether a TUInt24Rec value equals a word value.
Declaration: TUInt24Rec.class operator equal(a: TUInt24Rec; b: Word) : Boolean
Visibility: public
Description: The word b is considered equal to a if its 2 bytes equal byte0, byte1 and byte2 is zero.
79.11.13 TUInt24Rec.equal(Word,TUInt24Rec):Boolean
Synopsis: Check whether a TUInt24Rec value equals a word value.
Declaration: TUInt24Rec.class operator equal(a: Word; b: TUInt24Rec) : Boolean
Visibility: public
Description: The word a is considered equal to b if its 2 bytes equal byte0, byte1 and byte2 is zero.
79.11.14 TUInt24Rec.equal(TUInt24Rec,Byte):Boolean
Synopsis: Check whether a TUInt24Rec value equals a byte value.
Declaration: TUInt24Rec.class operator equal(a: TUInt24Rec; b: Byte) : Boolean
Visibility: public
Description: The byte b is considered equal to a if it equals byte0 and byte1 and byte1 are zero.
79.11.15 TUInt24Rec.equal(Byte,TUInt24Rec):Boolean
Synopsis: Check whether a TUInt24Rec value equals a byte value.
Declaration: TUInt24Rec.class operator equal(a: Byte; b: TUInt24Rec) : Boolean
Visibility: public
Description: The byte b is considered equal to a if it equals byte0 and byte1 and byte1 are zero.
79.11.16 TUInt24Rec.notequal(TUInt24Rec,TUInt24Rec):Boolean
Synopsis: Check whether 2 TUInt24Rec values differ.
Declaration: TUInt24Rec.class operator notequal(a: TUInt24Rec; b: TUInt24Rec)
: Boolean
Visibility: public
Description: The comparison is done by comparing byte0, byte1 and byte2.
2044
CHAPTER 79. REFERENCE FOR UNIT ’UNICODEDATA’
79.11.17 TUInt24Rec.notequal(TUInt24Rec,Cardinal):Boolean
Synopsis: Check whether a TUInt24Rec value differs from a cardinal value.
79.11.18 TUInt24Rec.notequal(Cardinal,TUInt24Rec):Boolean
Synopsis: Check whether a TUInt24Rec value differs from a cardinal value.
Declaration: TUInt24Rec.class operator notequal(a: Cardinal; b: TUInt24Rec) : Boolean
Visibility: public
Description: The cardinal a is considered not equal to b if the fourth byte (LSB) is nonzero, or one of the first
three bytes differ from byte0, byte1, and byte2.
79.11.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.11.20 TUInt24Rec.greaterthan(TUInt24Rec,Cardinal):Boolean
Synopsis: Check whether a TUInt24Rec value is greater than a cardinal value
Declaration: TUInt24Rec.class operator greaterthan(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.11.21 TUInt24Rec.greaterthan(Cardinal,TUInt24Rec):Boolean
Synopsis: Check whether a cardinal value is greater than a TUInt24Rec value
Declaration: TUInt24Rec.class operator greaterthan(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.
2045
CHAPTER 79. REFERENCE FOR UNIT ’UNICODEDATA’
79.11.22 TUInt24Rec.greaterthanorequal(TUInt24Rec,TUInt24Rec):Boolean
Synopsis: Check whether a TUInt24Rec value is greater than or equal to a cardinal value
79.11.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.11.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.11.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.11.26 TUInt24Rec.lessthan(TUInt24Rec,Cardinal):Boolean
Synopsis: Check whether a TUInt24Rec value is less than a cardinal value
2046
CHAPTER 79. REFERENCE FOR UNIT ’UNICODEDATA’
79.11.27 TUInt24Rec.lessthan(Cardinal,TUInt24Rec):Boolean
Synopsis: Check whether a cardinal value is less than a TUInt24Rec value
79.11.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.11.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.11.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.
2047
Chapter 80
Name Page
System 1331
80.2 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.
2048
Chapter 81
Name Page
BaseUnix 140
unixtype 2087
fs_ext = $137d
fs_ext2 = $ef53
fs_iso = $9660
fs_minix = $137f
fs_minix_30 = $138f
2049
CHAPTER 81. REFERENCE FOR UNIT ’UNIX’
fs_minux_V2 = $2468
fs_msdos = $4d44
fs_nfs = $6969
fs_old_ext2 = $ef51
fs_proc = $9fa0
fs_xia = $012FD16D
IOCtl_TCGETS = $5401
LOCK_EX = 2
LOCK_NB = 4
LOCK_SH = 1
LOCK_UN = 8
MAP_FAILED = baseunix.MAP_FAILED
MAP_FIXED = baseunix.MAP_FIXED
2050
CHAPTER 81. REFERENCE FOR UNIT ’UNIX’
MAP_PRIVATE = baseunix.MAP_PRIVATE
MAP_SHARED = baseunix.MAP_SHARED
MAP_TYPE = baseunix.MAP_TYPE
NAME_MAX = UnixType.NAME_MAX
Open_Accmode = 3
Open_Append = 2 shl 9
Open_Creat = 1 shl 6
Open_Direct = 4 shl 12
Open_Directory = 2 shl 15
Open_Excl = 2 shl 6
Open_LargeFile = 1 shl 15
Open_NDelay = Open_NonBlock
Open_NoCtty = 4 shl 6
2051
CHAPTER 81. REFERENCE FOR UNIT ’UNIX’
Open_NoFollow = 4 shl 15
Open_NonBlock = 4 shl 9
Open_RdOnly = 0
Open_RdWr = 2
Open_Sync = 1 shl 12
Open_Trunc = 1 shl 9
Open_WrOnly = 1
PATH_MAX = UnixType.PATH_MAX
PRIO_PGRP = UnixType.PRIO_PGRP
PRIO_PROCESS = UnixType.PRIO_PROCESS
PRIO_USER = UnixType.PRIO_USER
PROT_EXEC = baseunix.PROT_EXEC
PROT_NONE = baseunix.PROT_NONE
2052
CHAPTER 81. REFERENCE FOR UNIT ’UNIX’
PROT_READ = baseunix.PROT_READ
PROT_WRITE = baseunix.PROT_WRITE
P_IN = 1
P_OUT = 2
SIG_MAXSIG = UnixType.SIG_MAXSIG
STAT_IFBLK = $6000
STAT_IFCHR = $2000
STAT_IFDIR = $4000
STAT_IFIFO = $1000
STAT_IFLNK = $a000
STAT_IFMT = $f000
STAT_IFREG = $8000
STAT_IFSOCK = $c000
2053
CHAPTER 81. REFERENCE FOR UNIT ’UNIX’
STAT_IROTH = $4
STAT_IRWXO = $7
STAT_ISGID = $0400
STAT_ISUID = $0800
STAT_ISVTX = $0200
STAT_IWOTH = $2
2054
CHAPTER 81. REFERENCE FOR UNIT ’UNIX’
STAT_IXOTH = $1
SYS_NMLN = UnixType.SYS_NMLN
Wait_Any = - 1
Wait_Clone = $80000000
Wait_MyPGRP = 0
Wait_NoHang = 1
Wait_UnTraced = 2
81.2.2 Types
cbool = UnixType.cbool
Boolean type
cchar = UnixType.cchar
cdouble = UnixType.cdouble
cfloat = UnixType.cfloat
2055
CHAPTER 81. REFERENCE FOR UNIT ’UNIX’
cint = UnixType.cint
cint16 = UnixType.cint16
cint32 = UnixType.cint32
cint64 = UnixType.cint64
cint8 = UnixType.cint8
clock_t = UnixType.clock_t
clong = UnixType.clong
clonglong = UnixType.clonglong
coff_t = UnixType.TOff
cschar = UnixType.cschar
cshort = UnixType.cshort
csigned = UnixType.csigned
csint = UnixType.csint
2056
CHAPTER 81. REFERENCE FOR UNIT ’UNIX’
Signed integer
csize_t = UnixType.size_t
cslong = UnixType.cslong
cslonglong = UnixType.cslonglong
csshort = UnixType.csshort
cuchar = UnixType.cuchar
cuint = UnixType.cuint
cuint16 = UnixType.cuint16
cuint32 = UnixType.cuint32
cuint64 = UnixType.cuint64
cuint8 = UnixType.cuint8
culong = UnixType.culong
culonglong = UnixType.culonglong
cunsigned = UnixType.cunsigned
2057
CHAPTER 81. REFERENCE FOR UNIT ’UNIX’
cushort = UnixType.cushort
dev_t = UnixType.dev_t
gid_t = UnixType.gid_t
Group ID type.
ino_t = UnixType.ino_t
Inode type.
mode_t = UnixType.mode_t
nlink_t = UnixType.nlink_t
off_t = UnixType.off_t
Offset type.
pcbool = UnixType.pcbool
pcchar = UnixType.pcchar
pcdouble = UnixType.pcdouble
pcfloat = UnixType.pcfloat
pcint = UnixType.pcint
pcint16 = UnixType.pcint16
2058
CHAPTER 81. REFERENCE FOR UNIT ’UNIX’
pcint32 = UnixType.pcint32
pcint64 = UnixType.pcint64
pcint8 = UnixType.pcint8
pClock = UnixType.pClock
pclong = UnixType.pclong
pclonglong = UnixType.pclonglong
pcschar = UnixType.pcschar
pcshort = UnixType.pcshort
pcsigned = UnixType.pcsigned
pcsint = UnixType.pcsint
pcsize_t = UnixType.psize_t
pcslong = UnixType.pcslong
pcslonglong = UnixType.pcslonglong
2059
CHAPTER 81. REFERENCE FOR UNIT ’UNIX’
pcsshort = UnixType.pcsshort
pcuchar = UnixType.pcuchar
pcuint = UnixType.pcuint
pcuint16 = UnixType.pcuint16
pcuint32 = UnixType.pcuint32
pcuint64 = UnixType.pcuint64
pcuint8 = UnixType.pcuint8
pculong = UnixType.pculong
pculonglong = UnixType.pculonglong
pcunsigned = UnixType.pcunsigned
pcushort = UnixType.pcushort
pDev = UnixType.pDev
pGid = UnixType.pGid
2060
CHAPTER 81. REFERENCE FOR UNIT ’UNIX’
pid_t = UnixType.pid_t
Process ID type.
pIno = UnixType.pIno
pMode = UnixType.pMode
pnLink = UnixType.pnLink
pOff = UnixType.pOff
pPid = UnixType.pPid
pSize = UnixType.pSize
pSize_t = UnixType.pSize_t
pSocklen = UnixType.pSocklen
psSize = UnixType.psSize
pstatfs = UnixType.PStatFs
pthread_cond_t = UnixType.pthread_cond_t
pthread_mutex_t = UnixType.pthread_mutex_t
2061
CHAPTER 81. REFERENCE FOR UNIT ’UNIX’
pthread_t = UnixType.pthread_t
pTime = UnixType.pTime
ptimespec = UnixType.ptimespec
ptimeval = UnixType.ptimeval
ptime_t = UnixType.ptime_t
pUid = UnixType.pUid
size_t = UnixType.size_t
socklen_t = UnixType.socklen_t
ssize_t = UnixType.ssize_t
TClock = UnixType.TClock
TDev = UnixType.TDev
TFSearchOption = (NoCurrentDirectory,CurrentDirectoryFirst,
CurrentDirectoryLast)
2062
CHAPTER 81. REFERENCE FOR UNIT ’UNIX’
Value Explanation
CurrentDirectoryFirst Search the current directory first, before all directories in the search path.
CurrentDirectoryLast Search the current directory last, after all directories in the search path
NoCurrentDirectory Do not search the current directory unless it is specified in the search path.
TGid = UnixType.TGid
timespec = UnixType.timespec
timeval = UnixType.timeval
time_t = UnixType.time_t
TIno = UnixType.TIno
TIOCtlRequest = UnixType.TIOCtlRequest
TMode = UnixType.TMode
TnLink = UnixType.TnLink
TOff = UnixType.TOff
TPid = UnixType.TPid
2063
CHAPTER 81. REFERENCE FOR UNIT ’UNIX’
TSize = UnixType.TSize
TSocklen = UnixType.TSocklen
TsSize = UnixType.TsSize
tstatfs = UnixType.TStatFs
StatFS returns in Info information about the file system on which the file Path resides. Info is
of type TStatFS (2101).
The function returns zero if the call was successful, a nonzero value is returned if the call failed.
TTime = UnixType.TTime
Ttimespec = UnixType.Ttimespec
TTimeVal = UnixType.TTimeVal
TUid = UnixType.TUid
uid_t = UnixType.uid_t
User ID type
81.2.3 Variables
tzdaylight : Boolean
Timezone name.
2064
CHAPTER 81. REFERENCE FOR UNIT ’UNIX’
Visibility: default
Description: AssignePipe creates a pipe, i.e. two file objects, one for input, one for output. What is written to
Pipe_out, can be read from Pipe_in.
This call is overloaded. The in and out pipe can take three forms: an typed or untyped file, a text file
or a file descriptor.
If a text file is passed then reading and writing from/to the pipe can be done through the usual
Readln(Pipe_in,...) and Writeln(Pipe_out,...) procedures.
The function returns True if everything went successfully, False otherwise.
Errors: In case the function fails and returns False, extended error information is returned by the FpGetEr-
rno (192) function:
Listing: ./unixex/ex36.pp
Program Example36 ;
Var p i p i , p i p o : Text ;
s : String ;
begin
W r i t e l n ( ' A s s i g n i n g Pipes . ' ) ;
I f a s s i g n p i p e ( p i p i , p i p o )<>0 then
Writeln ( ' Error assigning pipes ! ' , fpgeterr no ) ;
W r i t e l n ( ' W r i t i n g t o pipe , and f l u s h i n g . ' ) ;
W r i t e l n ( pipo , ' T h i s i s a t e x t s t r i n g ' ) ; c l o s e ( p i p o ) ;
W r i t e l n ( ' Reading from p i p e . ' ) ;
While not eof ( p i p i ) do
begin
Readln ( p i p i , s ) ;
W r i t e l n ( ' Read from p i p e : ' , s ) ;
end ;
close ( p i p i ) ;
w r i t e l n ( ' Closed p i p e s . ' ) ;
writeln
end .
2065
CHAPTER 81. REFERENCE FOR UNIT ’UNIX’
81.3.2 AssignStream
Synopsis: Assign stream for in and output to a program
Declaration: function AssignStream(var StreamIn: text; var Streamout: text;
const Prog: ansiString;
const args: Array of ansistring) : cint
function AssignStream(var StreamIn: text; var Streamout: text;
var streamerr: text; const Prog: ansiString;
const args: Array of ansistring) : cint
Visibility: default
Description: AssignStream creates a 2 or 3 pipes, i.e. two (or three) file objects, one for input, one for
output,(and one for standard error) the other ends of these pipes are connected to standard input and
output (and standard error) of Prog. Prog is the path of a program (including path). The options
for the program can be specified in Args.
What is written to StreamOut, will go to the standard input of Prog. Whatever is written by Prog
to it’s standard output can be read from StreamIn. Whatever is written by Prog to it’s standard
error read from StreamErr, if present.
Reading and writing happens through the usual Readln(StreamIn,...) and Writeln (StreamOut,...)
procedures.
Remark You should not use Reset or Rewrite on a file opened with POpen. This will close the file
before re-opening it again, thereby closing the connection with the program.
The function returns the process ID of the spawned process, or -1 in case of error.
Errors: Extended error information is returned by the FpGetErrno (192) function.
Other errors include the ones by the fork and exec programs
See also: AssignPipe (2065), POpen (2078)
Listing: ./unixex/ex38.pp
Program Example38 ;
Var Si , So : Text ;
S : String ;
i : longint ;
begin
i f not ( paramstr ( 1 ) = '−son ' ) then
begin
W r i t e l n ( ' C a l l i n g son ' ) ;
Assignstream ( Si , So , paramstr ( 0 ) , [ '−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 ;
2066
CHAPTER 81. REFERENCE FOR UNIT ’UNIX’
81.3.3 FpExecL
Synopsis: Execute process (using argument list, environment)
Declaration: function FpExecL(const PathName: RawByteString;
const S: Array of RawByteString) : cint
Visibility: default
Description: FpExecL replaces the currently running program with the program, specified in PathName. S is
an array of command options. The executable in PathName must be an absolute pathname. The
current process’ environment is passed to the program. On success, FpExecL does not return.
Errors: Extended error information is returned by the FpGetErrno (192) function:
sys_eaccesFile is not a regular file, or has no execute permission. A component of the path has no
search permission.
sys_epermThe file system is mounted noexec.
sys_e2bigArgument list too big.
sys_enoexecThe magic number in the file is incorrect.
sys_enoentThe file does not exist.
sys_enomemNot enough memory for kernel, or to split command line.
sys_enotdirA component of the path is not a directory.
2067
CHAPTER 81. REFERENCE FOR UNIT ’UNIX’
See also: FpExecve (186), FpExecv (2070), FpExecvp (2071), FpExecle (2068), FpExeclp (2069), FpFork
(189)
Listing: ./unixex/ex77.pp
Program Example77 ;
Uses Unix , s t r i n g s ;
begin
{ Execute ' l s −l ' , w i t h c u r r e n t environment . }
{ ' l s ' i s NOT looked f o r i n PATH environment v a r i a b l e . }
FpExecL ( ' / b i n / l s ' , [ '− l ' ] ) ;
end .
81.3.4 FpExecLE
Synopsis: Execute process (using argument list, environment)
Declaration: function FpExecLE(const PathName: RawByteString;
const S: Array of RawByteString; MyEnv: ppchar) : cint
Visibility: default
Description: FpExecLE replaces the currently running program with the program, specified in PathName. S
is an array of command options. The executable in PathName must be an absolute pathname. The
environment in MyEnv is passed to the program. On success, FpExecLE does not return.
Errors: Extended error information is returned by the FpGetErrno (192) function:
sys_eaccesFile is not a regular file, or has no execute permission. A component of the path has no
search permission.
sys_epermThe file system is mounted noexec.
sys_e2bigArgument list too big.
sys_enoexecThe magic number in the file is incorrect.
sys_enoentThe file does not exist.
sys_enomemNot enough memory for kernel, or to split command line.
sys_enotdirA component of the path is not a directory.
sys_eloopThe path contains a circular reference (via symlinks).
See also: FpExecve (186), FpExecv (2070), FpExecvp (2071), FpExecl (2067), FpExeclp (2069), FpFork
(189)
Listing: ./unixex/ex11.pp
Program Example11 ;
Uses Unix , s t r i n g s ;
2068
CHAPTER 81. REFERENCE FOR UNIT ’UNIX’
begin
{ Execute ' l s −l ' , w i t h c u r r e n t environment . }
{ ' l s ' i s NOT looked f o r i n PATH environment v a r i a b l e . }
{ envp i s d e f i n e d i n t h e system u n i t . }
Execle ( ' / b i n / l s − l ' , envp ) ;
end .
81.3.5 FpExecLP
Synopsis: Execute process (using argument list, environment; search path)
Declaration: function FpExecLP(const PathName: RawByteString;
const S: Array of RawByteString) : cint
Visibility: default
Description: FpExecLP replaces the currently running program with the program, specified in PathName. S
is an array of command options. The executable in PathName is searched in the path, if it isn’t an
absolute filename. The current environment is passed to the program. On success, FpExecLP does
not return.
sys_eaccesFile is not a regular file, or has no execute permission. A component of the path has no
search permission.
sys_epermThe file system is mounted noexec.
sys_e2bigArgument list too big.
sys_enoexecThe magic number in the file is incorrect.
sys_enoentThe file does not exist.
sys_enomemNot enough memory for kernel, or to split command line.
sys_enotdirA component of the path is not a directory.
sys_eloopThe path contains a circular reference (via symlinks).
See also: FpExecve (186), FpExecv (2070), FpExecvp (2071), FpExecle (2068), FpExecl (2067), FpFork
(189)
Listing: ./unixex/ex76.pp
Program Example76 ;
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 .
2069
CHAPTER 81. REFERENCE FOR UNIT ’UNIX’
81.3.6 FpExecLPE
Synopsis: Execute a program in the path, and pass it an environment
81.3.7 FpExecV
Synopsis: Execute process
Declaration: function FpExecV(const PathName: RawByteString; args: ppchar) : cint
Visibility: default
Description: FpExecV replaces the currently running program with the program, specified in PathName. It
gives the program the options in args. This is a pointer to an array of pointers to null-terminated
strings. The last pointer in this array should be nil. The current environment is passed to the program.
On success, FpExecV does not return.
Errors: Extended error information is returned by the FpGetErrno (192) function:
sys_eaccesFile is not a regular file, or has no execute permission. A component of the path has no
search permission.
sys_epermThe file system is mounted noexec.
sys_e2bigArgument list too big.
sys_enoexecThe magic number in the file is incorrect.
sys_enoentThe file does not exist.
sys_enomemNot enough memory for kernel.
sys_enotdirA component of the path is not a directory.
sys_eloopThe path contains a circular reference (via symlinks).
See also: FpExecve (186), FpExecvp (2071), FpExecle (2068), FpExecl (2067), FpExeclp (2069), FpFork
(189)
Listing: ./unixex/ex8.pp
Program Example8 ;
Uses Unix , s t r i n g s ;
Var PP : PPchar ;
2070
CHAPTER 81. REFERENCE FOR UNIT ’UNIX’
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
Synopsis: Execute process, search path
sys_eaccesFile is not a regular file, or has no execute permission. A component of the path has no
search permission.
sys_epermThe file system is mounted noexec.
sys_e2bigArgument list too big.
sys_enoexecThe magic number in the file is incorrect.
sys_enoentThe file does not exist.
sys_enomemNot enough memory for kernel.
sys_enotdirA component of the path is not a directory.
sys_eloopThe path contains a circular reference (via symlinks).
See also: FpExecve (186), FpExecv (2070), FpExecle (2068), FpExecl (2067), FpExeclp (2069), FpFork (189)
Listing: ./unixex/ex79.pp
Program Example79 ;
Uses Unix , s t r i n g s ;
Var PP : PPchar ;
begin
2071
CHAPTER 81. REFERENCE FOR UNIT ’UNIX’
81.3.9 FpExecVPE
Synopsis: Execute process, search path using environment
Declaration: function FpExecVPE(const PathName: RawByteString; args: ppchar;
env: ppchar) : cint
Visibility: default
Description: FpExecVP replaces the currently running program with the program, specified in PathName. The
executable in path is searched in the path, if it isn’t an absolute filename. It gives the program the
options in args. This is a pointer to an array of pointers to null-terminated strings. The last pointer
in this array should be nil. The environment in Env is passed to the program. On success, execvp
does not return.
Errors: Extended error information is returned by the FpGetErrno (192) function:
sys_eaccesFile is not a regular file, or has no execute permission. A component of the path has no
search permission.
sys_epermThe file system is mounted noexec.
sys_e2bigArgument list too big.
sys_enoexecThe magic number in the file is incorrect.
sys_enoentThe file does not exist.
sys_enomemNot enough memory for kernel.
sys_enotdirA component of the path is not a directory.
sys_eloopThe path contains a circular reference (via symlinks).
See also: FpExecve (186), FpExecv (2070), FpExecle (2068), FpExecl (2067), FpExeclp (2069), FpFork (189)
Listing: ./unixex/ex79.pp
Program Example79 ;
Uses Unix , s t r i n g s ;
Var PP : PPchar ;
begin
GetMem (PP, 3 * SizeOf ( Pchar ) ) ;
2072
CHAPTER 81. REFERENCE FOR UNIT ’UNIX’
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
Synopsis: Lock a file (advisory lock)
Declaration: function fpFlock(var T: text; mode: cint) : cint
function fpFlock(var F: File; mode: cint) : cint
function fpFlock(fd: cint; mode: cint) : cint
Visibility: default
Description: FpFLock implements file locking. it sets or removes a lock on the file F. F can be of type Text or
File, or it can be a Linux file descriptor (a longint) Mode can be one of the following constants :
The function returns zero if successful, a nonzero return value indicates an error.
Errors: Extended error information is returned by the FpGetErrno (192) function:
See also: #rtl.baseunix.FpFcntl (187), FSync (2049)
81.3.11 fpfStatFS
Synopsis: Retrieve file system information.
2073
CHAPTER 81. REFERENCE FOR UNIT ’UNIX’
81.3.12 fpfsync
Synopsis: Flush cached data to disk
81.3.13 fpgettimeofday
Synopsis: Return kernel time of day in GMT
Declaration: function fpgettimeofday(tp: ptimeval; tzp: ptimezone) : cint
Visibility: default
Description: FpGetTimeOfDay returns the number of seconds since 00:00, January 1 1970, GMT in a timeval
record. This time NOT corrected any way, not taking into account timezones, daylight savings time
and so on.
It is simply a wrapper to the kernel system call.
Errors: None.
81.3.14 fpStatFS
Synopsis: Retrieve file system information.
Declaration: function fpStatFS(Path: pchar; Info: pstatfs) : cint
function fpStatFS(Path: ansistring; Info: pstatfs) : cint
Visibility: default
Description: fpStatFS returns in Info information about the file system on which the file or path Path
resides. Info is of type tstatfs. The function returns 0 if the call was successful, or an error code
if the call failed.
81.3.15 fpSystem
Synopsis: Execute and feed command to system shell
2074
CHAPTER 81. REFERENCE FOR UNIT ’UNIX’
Listing: ./unixex/ex80.pp
program example56 ;
uses Unix ;
{ Program t o demonstrate t h e S h e l l f u n c t i o n }
Var S : L o n g i n t ;
begin
W r i t e l n ( ' Output o f l s − l * . pp ' ) ;
S: = fpSystem ( ' l s − l * . pp ' ) ;
W r i t e l n ( 'Command e x i t e d w i t h s t a t u s : ' ,S ) ;
end .
81.3.16 FSearch
Synopsis: Search for file in search path.
Declaration: function FSearch(const path: RawByteString; dirlist: RawByteString;
CurrentDirStrategy: TFSearchOption) : RawByteString
function FSearch(const path: RawByteString; dirlist: RawByteString)
: RawByteString
function FSearch(const path: UnicodeString; dirlist: UnicodeString;
CurrentDirStrategy: TFSearchOption) : UnicodeString
function FSearch(const path: UnicodeString; dirlist: UnicodeString)
: UnicodeString
Visibility: default
Description: FSearch searches in DirList, a colon separated list of directories, for a file named Path. It
then returns a path to the found file.
The CurrentDirStrategy determines how the current directory is treated when searching:
NoCurrentDirectoryDo not search the current directory unless it is specified in the search path.
CurrentDirectoryFirstSearch the current directory first, before all directories in the search path.
CurrentDirectoryLastSearch the current directory last, after all directories in the search path
It is mainly provided to mimic DOS search path behaviour. Default behaviour is to search the current
directory first.
Errors: An empty string if no such file was found.
See also: #rtl.unixutil.FNMatch (2103)
Listing: ./unixex/ex46.pp
Program Example46 ;
2075
CHAPTER 81. REFERENCE FOR UNIT ’UNIX’
begin
Writeln ( ' l s i s i n : ' , FSearch ( ' l s ' , strpas ( fpGetenv ( 'PATH ' ) ) ) ) ;
end .
81.3.17 GetDomainName
Synopsis: Return current domain name
Declaration: function GetDomainName : string
Visibility: default
Description: Get the domain name of the machine on which the process is running. An empty string is returned
if the domain is not set.
Errors: None.
See also: GetHostName (2076)
Listing: ./unixex/ex39.pp
Program Example39 ;
Uses Unix ;
begin
W r i t e l n ( ' Domain name o f t h i s machine i s : ' , GetDomainName ) ;
end .
81.3.18 GetHostName
Synopsis: Return host name
Declaration: function GetHostName : string
Visibility: default
Description: Get the hostname of the machine on which the process is running. An empty string is returned if
hostname is not set.
Errors: None.
See also: GetDomainName (2076)
Listing: ./unixex/ex40.pp
Program Example40 ;
Uses u n i x ;
begin
W r i t e l n ( 'Name o f t h i s machine i s : ' , GetHostName ) ;
end .
2076
CHAPTER 81. REFERENCE FOR UNIT ’UNIX’
81.3.19 GetLocalTimezone
Synopsis: Return local timezone information
Description: GetLocalTimeZone returns the local timezone information. It also initializes the TZSeconds
variable, which is used to correct the epoch time to local time.
There should never be any need to call this function directly. It is called by the initialization routines
of the Linux unit.
See also: GetTimezoneFile (2077), ReadTimezoneFile (2079)
81.3.20 GetTimezoneFile
Synopsis: Return name of timezone information file
Declaration: function GetTimezoneFile : string
Visibility: default
Description: GetTimezoneFile returns the location of the current timezone file. The location of file is deter-
mined as follows:
1.If /etc/timezone exists, it is read, and the contents of this file is returned. This should work on
Debian systems.
2.If /usr/lib/zoneinfo/localtime exists, then it is returned. (this file is a symlink to the timezone
file on SuSE systems)
3.If /etc/localtime exists, then it is returned. (this file is a symlink to the timezone file on RedHat
systems)
81.3.21 PClose
Synopsis: Close file opened with POpen (2078)
Declaration: function PClose(var F: File) : cint
function PClose(var F: text) : cint
Visibility: default
Description: PClose closes a file opened with POpen (2078). It waits for the command to complete, and then
returns the exit status of the command.
For an example, see POpen (2078)
2077
CHAPTER 81. REFERENCE FOR UNIT ’UNIX’
81.3.22 POpen
Synopsis: Pipe file to standard input/output of program
Declaration: function POpen(var F: text; const Prog: RawByteString; rw: Char) : cint
function POpen(var F: File; const Prog: RawByteString; rw: Char) : cint
function POpen(var F: text; const Prog: UnicodeString; rw: Char) : cint
function POpen(var F: File; const Prog: UnicodeString; rw: Char) : 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 (2077). The result is the same, but PClose returns the exit status of
the command Prog.
Errors: Extended error information is returned by the FpGetErrno (192) function. Errors are essentially
those of the Execve, Dup and AssignPipe commands.
Listing: ./unixex/ex37.pp
Program Example37 ;
var f : t e x t ;
i : longint ;
begin
w r i t e l n ( ' C r e a t i n g a s h e l l s c r i p t t o which echoes i t s arguments ' ) ;
w r i t e l n ( ' and i n p u t back t o s t d o u t ' ) ;
assign ( f , ' test21a ' ) ;
rewrite ( f ) ;
w r i t e l n ( f , ' # ! / b i n / sh ' ) ;
w r i t e l n ( f , ' echo t h i s i s t h e c h i l d speaking . . . . ' ) ;
w r i t e l n ( f , ' echo g o t arguments \ * " $ * " \ * ' ) ;
writeln ( f , ' cat ' ) ;
writeln ( f , ' e x i t 2 ' ) ;
writeln ( f ) ;
close ( f ) ;
fpchmod ( ' t e s t 2 1 a ' , & 7 5 5 ) ;
popen ( f , ' . / t e s t 2 1 a arg1 arg2 ' , 'W ' ) ;
i f f p g e t e r r n o <>0 then
w r i t e l n ( ' e r r o r from POpen : e r r n o : ' , f p g e t e r r n o ) ;
f o r i :=1 to 10 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 ' ) ;
2078
CHAPTER 81. REFERENCE FOR UNIT ’UNIX’
erase ( f )
end .
81.3.23 ReadTimezoneFile
Synopsis: Read the timezone file and initialize time routines
Declaration: procedure ReadTimezoneFile(fn: string)
Visibility: default
Description: ReadTimeZoneFile reads the timezone file fn and initializes the local time routines based on
the information found there.
There should be no need to call this function. The initialization routines of the linux unit call this
routine at unit startup.
Errors: None.
See also: GetTimezoneFile (2077), GetLocalTimezone (2077)
81.3.24 ReReadLocalTime
Synopsis: Re-Read the local time files.
Declaration: procedure ReReadLocalTime
Visibility: default
Description: ReReadLocalTime can be used to re-initialize the local timezone information.
To speed up conversion of epoch (UTC) time to local time, the timezone information is loaded
only once, at program startup. Calling this routine re-reads the timezone information using current
timezone settings.
The EpochToLocal (2104) function uses timezone information to transform epoch time to local time.
This timezone information does not change while the application is running: in particular, on DST
transitions or when the timezone files change, the time returned by local time routines will be wrong.
See also: Date (1655), Time (1757), Now (1723), EpochToLocal (2104)
81.3.25 SeekDir
Synopsis: Seek to position in directory
Declaration: procedure SeekDir(p: pDir; loc: clong)
Visibility: default
Description: SeekDir sets the directory pointer to the loc-th entry in the directory structure pointed to by p.
For an example, see #rtl.baseunix.fpOpenDir (206).
Errors: Extended error information is returned by the FpGetErrno (192) function:
2079
CHAPTER 81. REFERENCE FOR UNIT ’UNIX’
81.3.26 TellDir
Synopsis: Return current location in a directory
81.3.27 WaitProcess
Synopsis: Wait for process to terminate.
Declaration: function WaitProcess(Pid: cint) : cint
Visibility: default
Description: WaitProcess waits for process PID to exit. WaitProcess is equivalent to the #rtl.baseunix.FpWaitPID
(229) call:
FpWaitPid(PID,@result,0)
Handles of Signal interrupts (errno=EINTR), and returns the Exitcode of Process PID (>=0) or -
Status if it was terminated
Errors: None.
See also: #rtl.baseunix.FpWaitPID (229), #rtl.baseunix.WTERMSIG (232), #rtl.baseunix.WSTOPSIG (231),
#rtl.baseunix.WIFEXITED (231), WIFSTOPPED (2080), #rtl.baseunix.WIFSIGNALED (231), W_EXITCODE
(2081), W_STOPCODE (2081), #rtl.baseunix.WEXITSTATUS (231)
81.3.28 WIFSTOPPED
Synopsis: Check whether the process is currently stopped.
Declaration: function WIFSTOPPED(Status: Integer) : Boolean
Visibility: default
Description: WIFSTOPPED checks Status and returns true if the process is currently stopped. This is only
possible if WUNTRACED was specified in the options of FpWaitPID (229).
See also: #rtl.baseunix.FpWaitPID (229), WaitProcess (2080), #rtl.baseunix.WTERMSIG (232), #rtl.baseunix.WSTOPSIG
(231), #rtl.baseunix.WIFEXITED (231), #rtl.baseunix.WIFSIGNALED (231), W_EXITCODE (2081),
W_STOPCODE (2081), #rtl.baseunix.WEXITSTATUS (231)
2080
CHAPTER 81. REFERENCE FOR UNIT ’UNIX’
81.3.29 W_EXITCODE
Synopsis: Construct an exit status based on an return code and signal.
81.3.30 W_STOPCODE
Synopsis: Construct an exit status based on a signal.
2081
Chapter 82
Name Page
BaseUnix 140
System 1331
82.2 Overview
The unixcp unit provides routines to handle mapping of code page names to numerical values as
used in libiconv>. The GetCodepageByName (2085) function is the main function for this. The
GetCodepageData (2086) 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 (582).
2082
CHAPTER 82. REFERENCE FOR UNIT ’UNIXCP’
), (cp: 850; name: 'ibm850'), (cp: 852; name: '852'), (cp: 852; name
: 'CP852'), (cp: 852; name: 'IBM852'), (cp: 852; name: 'CSPCP852'
), (cp: 852; name: 'ibm852'), (cp: 853; name: 'CP853'), (cp: 855;
name: '855'), (cp: 855; name: 'CP855'), (cp: 855; name: 'IBM855'
), (cp: 855; name: 'CSIBM855'), (cp: 855; name: 'IBM855'), (cp: 857
; name: '857'), (cp: 857; name: 'CP857'), (cp: 857; name: 'IBM857'
), (cp: 857; name: 'CSIBM857'), (cp: 857; name: 'ibm857'), (cp: 858
; name: 'CP858'), (cp: 858; name: 'IBM00858'), (cp: 860; name: '860'
), (cp: 860; name: 'CP860'), (cp: 860; name: 'IBM860'), (cp: 860;
name: 'CSIBM860'), (cp: 860; name: 'IBM860'), (cp: 861; name: '861'
), (cp: 861; name: 'CP-IS'), (cp: 861; name: 'CP861'), (cp: 861; name
: 'IBM861'), (cp: 861; name: 'CSIBM861'), (cp: 861; name: 'ibm861'
), (cp: 862; name: '862'), (cp: 862; name: 'CP862'), (cp: 862; name
: 'IBM862'), (cp: 862; name: 'CSPC862LATINHEBREW'), (cp: 862; name
: 'DOS-862'), (cp: 863; name: '863'), (cp: 863; name: 'CP863'), (cp
: 863; name: 'CSIBM863'), (cp: 863; name: 'IBM863'), (cp: 864; name
: 'CP864'), (cp: 864; name: 'CSIBM864'), (cp: 864; name: 'IBM864'
), (cp: 865; name: '865'), (cp: 865; name: 'IBM-865'), (cp: 865; name
: 'CP865'), (cp: 865; name: 'CSIBM865'), (cp: 865; name: 'IBM865'
), (cp: 866; name: '866'), (cp: 866; name: 'CP866'), (cp: 866; name
: 'IBM866'), (cp: 866; name: 'CSIBM866'), (cp: 866; name: 'cp866'
), (cp: 869; name: '869'), (cp: 869; name: 'IBM-869'), (cp: 869; name
: 'CP-GR'), (cp: 869; name: 'CP869'), (cp: 869; name: 'IBM869'),
(cp: 869; name: 'CSIBM869'), (cp: 869; name: 'ibm869'), (cp: 870;
name: 'IBM870'), (cp: 874; name: 'CP874'), (cp: 874; name: 'WINDOWS-874'
), (cp: 874; name: 'windows-874'), (cp: 875; name: 'cp875'), (cp:
932; name: 'CP932'), (cp: 932; name: 'IBM-943'), (cp: 932; name:
'MS932'), (cp: 932; name: 'SHIFFT_JIS'), (cp: 932; name: 'SHIFFT_JIS-MS'
), (cp: 932; name: 'SJIS'), (cp: 932; name: 'SJIS-MS'), (cp: 932;
name: 'SJIS-OPEN'), (cp: 932; name: 'SJIS-WIN'), (cp: 932; name:
'WINDOWS-31J'), (cp: 932; name: 'WINDOWS-932'), (cp: 932; name: 'CSWINDOWS31J'
), (cp: 932; name: 'shift_jis'), (cp: 932; name: 'shift-jis'), (cp
: 936; name: 'CP936'), (cp: 936; name: 'GBK'), (cp: 936; name: 'MS936'
), (cp: 936; name: 'WINDOWS-936'), (cp: 936; name: 'gb2312'), (cp
: 949; name: 'CP949'), (cp: 949; name: 'UHC'), (cp: 949; name: 'EUC-KR'
), (cp: 949; name: 'ks_c_5601-1987'), (cp: 950; name: 'CP950'), (cp
: 950; name: 'BIG5'), (cp: 950; name: 'big5'), (cp: 1026; name: 'IBM1026'
), (cp: 1047; name: 'IBM01047'), (cp: 1125; name: 'CP1125'), (cp:
1125; name: 'IBM-1125'), (cp: 1133; name: 'CP1133'), (cp: 1133; name
: 'IBM-1133'), (cp: 1133; name: 'IBM-CP1133'), (cp: 1140; name: 'IBM01140'
), (cp: 1141; name: 'IBM01141'), (cp: 1142; name: 'IBM01142'), (cp
: 1143; name: 'IBM01143'), (cp: 1144; name: 'IBM01144'), (cp: 1145
; name: 'IBM01145'), (cp: 1146; name: 'IBM01146'), (cp: 1147; name
: 'IBM01147'), (cp: 1148; name: 'IBM01148'), (cp: 1149; name: 'IBM01149'
), (cp: 1200; name: 'UTF-16LE'), (cp: 1200; name: 'UTF16LE'), (cp
: 1200; name: 'UCS-2LE'), (cp: 1200; name: 'CP1200'), (cp: 1201; name
: 'UTF-16BE'), (cp: 1201; name: 'UTF16BE'), (cp: 1201; name: 'UCS-2BE'
), (cp: 1201; name: 'unicodeFFFE'), (cp: 1201; name: 'CP1201'), (cp
: 1250; name: 'CP1250'), (cp: 1250; name: 'MS-EE'), (cp: 1250; name
: 'WINDOWS-1250'), (cp: 1250; name: 'windows-1250'), (cp: 1251; name
: 'CP1251'), (cp: 1251; name: 'MS-CYRL'), (cp: 1251; name: 'WINDOWS-1251'
), (cp: 1251; name: 'windows-1251'), (cp: 1252; name: 'CP1252'),
(cp: 1252; name: 'MS-ANSI'), (cp: 1252; name: 'WINDOWS-1252'), (cp
: 1252; name: 'windows-1252'), (cp: 1253; name: 'CP1253'), (cp: 1253
2083
CHAPTER 82. REFERENCE FOR UNIT ’UNIXCP’
2084
CHAPTER 82. REFERENCE FOR UNIT ’UNIXCP’
UnixCpMap is a fixed structure with codepage number/codepage name pairs. It is used in GetCode-
pageData (2086), GetSystemCodepage (2086) and GetCodepageByName (2085) to map code page
names to numbers and vice versa.
The map is ordered on code page number, and for equal code page numbers, the names are ordered
so the most common one is used first.
UnixCpMapLimit = 406 - 83
82.3.2 Types
82.4 Procedures and functions
82.4.1 GetCodepageByName
Synopsis: Find code page by name
Declaration: function GetCodepageByName(cpname: RawByteString) : TSystemCodePage
Visibility: default
Description: GetCodepageByName returns the code page number matching cpname. The supported code
page names are the ones commonly in use in libiconv. Names are searched case-sensitively, with the
exception that ’cpN’ is converted to ’CPN’, where N is a digit.
Errors: If no matching code page name is found, CP_NONE is returned.
See also: UnixCpMap (2085), GetSystemCodepage (2086), GetCodepageData (2086)
2085
CHAPTER 82. REFERENCE FOR UNIT ’UNIXCP’
82.4.2 GetCodepageData
Synopsis: Return index of codepage.
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.
Errors: If none is found, then a system default is used: Linux and Darwin use CP_UTF8, others use
CP_ASCII.
See also: UnixCpMap (2085), GetSystemCodepage (2086), GetCodepageByName (2085)
82.5 TUnixCpData
TUnixCpData = record
cp : Word;
name : ansistring;
end
TUnixCpData contains 2 fields necessary to construct a map between code page number (cp) and
name (name).
2086
Chapter 83
83.1 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.
NAME_MAX = 255
PATH_MAX = 4095
Prio_PGrp = 1
Prio_Process = 0
Prio_User = 2
2087
CHAPTER 83. REFERENCE FOR UNIT ’UNIXTYPE’
pthreadrwlocksize = 56
SIG_MAXSIG = 128
SYS_NMLN = 65
_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
_PTHREAD_MUTEX_FAST_NP = _PTHREAD_MUTEX_ADAPTIVE_NP
_PTHREAD_MUTEX_NORMAL = _PTHREAD_MUTEX_TIMED_NP
Mutex options:
_PTHREAD_MUTEX_RECURSIVE = _PTHREAD_MUTEX_RECURSIVE_NP
Mutex options:
_PTHREAD_MUTEX_RECURSIVE_NP = 1
_PTHREAD_MUTEX_TIMED_NP = 0
Mutex options: ?
2088
CHAPTER 83. REFERENCE FOR UNIT ’UNIXTYPE’
83.2.2 Types
cbool = longbool
Boolean type
cchar = cint8
cdouble = Double
cfloat = single
cint = cint32
cint16 = SmallInt
cint32 = LongInt
cint64 = Int64
cint8 = ShortInt
clock_t = cuint64
clong = Int64
clongdouble = extended
clonglong = cint64
2089
CHAPTER 83. REFERENCE FOR UNIT ’UNIXTYPE’
cschar = cint8
cshort = cint16
csigned = cint
csint = cint32
Signed integer
cslong = Int64
cslonglong = cint64
csshort = cint16
cuchar = cuint8
cuint = cuint32
cuint16 = Word
cuint32 = LongWord
cuint64 = QWord
cuint8 = Byte
2090
CHAPTER 83. REFERENCE FOR UNIT ’UNIXTYPE’
culong = QWord
culonglong = cuint64
cunsigned = cuint
cushort = cuint16
dev_t = cuint64
gid_t = cuint32
Group ID type.
ino64_t = cuint64
ino_t = clong
Inode type.
ipc_pid_t = cint
Process ID
kDev_t = cushort
mbstate_value_t = record
case Byte of
0: (
__wch : wint_t;
);
1
: (
__wchb : Array[0..3] of Char;
);
end
2091
CHAPTER 83. REFERENCE FOR UNIT ’UNIXTYPE’
This type should never be used directly. It is part of the mbstate_t (2099) type.
mode_t = cint
nlink_t = cuint32
off64_t = cint64
off_t = cint64
Offset type.
pcbool = ^cbool
pcchar = ^cchar
pcdouble = ^cdouble
pcfloat = ^cfloat
pcint = ^cint
pcint16 = ^cint16
pcint32 = ^cint32
pcint64 = ^cint64
pcint8 = ^cint8
2092
CHAPTER 83. REFERENCE FOR UNIT ’UNIXTYPE’
pClock = ^clock_t
pclong = ^clong
pclongdouble = ^clongdouble
pclonglong = ^clonglong
pcschar = ^cschar
pcshort = ^cshort
pcsigned = ^csigned
pcsint = ^csint
pcslong = ^cslong
pcslonglong = ^cslonglong
pcsshort = ^csshort
pcuchar = ^cuchar
pcuint = ^cuint
2093
CHAPTER 83. REFERENCE FOR UNIT ’UNIXTYPE’
pcuint16 = ^cuint16
pcuint32 = ^cuint32
pcuint64 = ^cuint64
pcuint8 = ^cuint8
pculong = ^culong
pculonglong = ^culonglong
pcunsigned = ^cunsigned
pcushort = ^cushort
pDev = ^dev_t
pGid = ^gid_t
pid_t = cint
Process ID type.
pIno = ^ino_t
pIno64 = ^ino64_t
2094
CHAPTER 83. REFERENCE FOR UNIT ’UNIXTYPE’
pkDev = ^kDev_t
pmbstate_t = ^mbstate_t
pMode = ^mode_t
pnLink = ^nlink_t
pOff = ^off_t
pOff64 = ^off64_t
pPid = ^pid_t
pSize = ^size_t
psize_t = pSize
pSockLen = ^socklen_t
pSSize = ^ssize_t
PStatFS = ^TStatfs
pthread_key_t = cuint
2095
CHAPTER 83. REFERENCE FOR UNIT ’UNIXTYPE’
PTHREAD_MUTEX_T = record
case Byte of
1: (
__m_reserved : LongInt
;
__m_count : LongInt;
__m_owner : pointer;
__m_kind : LongInt
;
__m_lock : record
__status : sizeint;
__spinlock : LongInt
;
end;
);
end
pthread_rwlock_t = record
case Boolean of
False: (
_data : Array
[0..pthreadrwlocksize-1] of Char;
);
True: (
align : clong;
);
end
pthread_rwlock_t describes a lock. It should be considered an opaque record, the names of the
fields can change anytime.
pthread_t = culong
pTime = ^time_t
ptimespec = ^timespec
ptimeval = ^timeval
2096
CHAPTER 83. REFERENCE FOR UNIT ’UNIXTYPE’
ptime_t = ^time_t
pUid = ^uid_t
pwchar_t = ^wchar_t
size_t = cuint64
socklen_t = cuint32
ssize_t = cint64
TClock = clock_t
TDev = dev_t
TGid = gid_t
time_t = cint64
TIno = ino_t
TIno64 = ino64_t
TIOCtlRequest = culong
2097
CHAPTER 83. REFERENCE FOR UNIT ’UNIXTYPE’
TkDev = kDev_t
TMode = mode_t
TnLink = nlink_t
TOff = off_t
TOff64 = off64_t
TPid = pid_t
TSize = size_t
TSockLen = socklen_t
TSSize = ssize_t
TTime = time_t
TTimeSpec = timespec
TTimeVal = timeval
TUid = uid_t
2098
CHAPTER 83. REFERENCE FOR UNIT ’UNIXTYPE’
uid_t = cuint32
User ID type
wchar_t = cint32
wint_t = cint32
83.3 mbstate_t
mbstate_t = record
__count : cint;
__value : mbstate_value_t;
end
83.4 pthread_attr_t
pthread_attr_t = record
__detachstate : cint;
__schedpolicy :
cint;
__schedparam : sched_param;
__inheritsched : cint;
__scope
: cint;
__guardsize : size_t;
__stackaddr_set : cint;
__stackaddr
: pointer;
__stacksize : size_t;
end
pthread_attr_t describes the thread attributes. It should be considered an opaque record, the
names of the fields can change anytime. Use the appropriate functions to set the thread attributes.
83.5 pthread_condattr_t
pthread_condattr_t = record
__dummy : cint;
end
2099
CHAPTER 83. REFERENCE FOR UNIT ’UNIXTYPE’
83.6 pthread_cond_t
pthread_cond_t = record
__c_lock : _pthread_fastlock;
__c_waiting
: pointer;
__padding : Array[0..48-1-sizeof(_pthread_fastlock)
-sizeof(pointer)-sizeof(clonglong)] of Byte;
__align : clonglong
;
end
83.7 pthread_mutexattr_t
pthread_mutexattr_t = record
__mutexkind : cint;
end
83.8 pthread_rwlockattr_t
pthread_rwlockattr_t = record
__lockkind : cint;
__pshared : cint
;
end
83.9 sched_param
sched_param = record
__sched_priority : cint;
end
83.10 sem_t
sem_t = record
2100
CHAPTER 83. REFERENCE FOR UNIT ’UNIXTYPE’
__sem_lock : _pthread_fastlock;
__sem_value : cint
;
__sem_waiting : pointer;
end
sem_t describes a thread semaphore. It should be considered an opaque record, the names of the
fields can change anytime.
83.11 timespec
timespec = record
tv_sec : time_t;
tv_nsec : clong;
end
83.12 timeval
timeval = record
tv_sec : time_t;
tv_usec : clong;
end
83.13 TStatfs
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;
flags : clong;
spare : Array[0..3] of clong;
end
2101
CHAPTER 83. REFERENCE FOR UNIT ’UNIXTYPE’
83.14 _pthread_fastlock
_pthread_fastlock = record
__status : clong;
__spinlock : cint
;
end
2102
Chapter 84
Name Page
System 1331
84.2 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 (2049) or baseunix (140) units.
Most of the functions described here have cross-platform counterparts in the SysUtils (1598) unit. It
is therefore recommended to use that unit.
2103
CHAPTER 84. REFERENCE FOR UNIT ’UNIXUTIL’
Description: ArrayStringToPPchar creates an array of null-terminated strings that point to strings which
are the same as the strings in the array S. The function returns a pointer to this array. The array and
the strings it contains must be disposed of after being used, because it they are allocated on the heap.
The ReserveEntries parameter tells ArrayStringToPPchar to allocate room at the end of
the array for another ReserveEntries entries.
Errors: If not enough memory is available, an error may occur.
See also: StringToPPChar (2105)
84.4.2 EpochToLocal
Synopsis: Convert epoch time to local time
Declaration: procedure EpochToLocal(epoch: LongInt; var year: Word; var month: Word;
var day: Word; var hour: Word; var minute: Word;
var second: Word)
Visibility: default
Description: Converts the epoch time (=Number of seconds since 00:00:00, January 1, 1970, corrected for your
time zone) to local date and time.
This function takes into account the timezone settings of your system.
Errors: None
See also: LocalToEpoch (2105)
Listing: ./unutilex/ex3.pp
Program Example3 ;
begin
EpochToLocal ( FPTime , Year , month , day , hour , minute , seconds ) ;
W r i t e l n ( ' C u r r e n t date : ' , Day : 2 , ' / ' , Month : 2 , ' / ' , Year : 4 ) ;
W r i t e l n ( ' C u r r e n t t i m e : ' , Hour : 2 , ' : ' , minute : 2 , ' : ' , seconds : 2 ) ;
end .
84.4.3 GregorianToJulian
Synopsis: Converts a Gregorian date to a Julian date
Declaration: function GregorianToJulian(Year: LongInt; Month: LongInt; Day: LongInt)
: LongInt
Visibility: default
Description: GregorianToJulian takes a Gregorian date and converts it to a Julian day.
Errors: None.
See also: JulianToGregorian (2105)
2104
CHAPTER 84. REFERENCE FOR UNIT ’UNIXUTIL’
84.4.4 JulianToGregorian
Synopsis: Converts a Julian date to a Gregorian date
84.4.5 LocalToEpoch
Synopsis: Convert local time to epoch (UNIX) time
Declaration: function LocalToEpoch(year: Word; month: Word; day: Word; hour: Word;
minute: Word; second: Word) : LongInt
Visibility: default
Description: Converts the Local time to epoch time (=Number of seconds since 00:00:00, January 1, 1970).
Errors: None
See also: EpochToLocal (2104)
Listing: ./unutilex/ex4.pp
Program Example4 ;
Uses U n i x U t i l ;
begin
Write ( ' Year : ' ) ; readln ( Year ) ;
Write ( ' Month : ' ) ; readln ( Month ) ;
Write ( ' Day : ' ) ; readln ( Day ) ;
Write ( ' Hour : ' ) ; readln ( Hour ) ;
Write ( ' Minute : ' ) ; readln ( Minute ) ;
Write ( ' Seonds : ' ) ; readln ( Second ) ;
Write ( ' T h i s i s : ' ) ;
Write ( LocalToEpoch ( year , month , day , hour , minute , second ) ) ;
W r i t e l n ( ' seconds p a s t 00:00 1/ 1 / 1 9 8 0 ' ) ;
end .
84.4.6 StringToPPChar
Synopsis: Split string in list of null-terminated strings
2105
CHAPTER 84. REFERENCE FOR UNIT ’UNIXUTIL’
Description: StringToPPChar splits the string S in words, replacing any whitespace with zero characters. It
returns a pointer to an array of pchars that point to the first letters of the words in S. This array is
terminated by a Nil pointer.
The function does not add a zero character to the end of the string unless it ends on whitespace.
The function reserves memory on the heap to store the array of PChar; The caller is responsible for
freeing this memory.
This function can be called to create arguments for the various Exec calls.
Errors: None.
See also: ArrayStringToPPchar (2103), #rtl.baseunix.FpExecve (186)
Listing: ./unutilex/ex70.pp
Program Example70 ;
Uses U n i x U t i l ;
Var S : S t r i n g ;
P : PPChar ;
I : longint ;
begin
/ / remark whitespace a t end .
S: = ' T h i s i s a s t r i n g w i t h words . ';
P: = StringToPPChar ( S , 0 ) ;
I :=0;
While P [ i ] < > N i l do
begin
W r i t e l n ( ' Word ' , i , ' : ' ,P [ i ] ) ;
Inc ( I ) ;
end ;
FreeMem ( P , i * SizeOf ( Pchar ) ) ;
end .
2106
Chapter 85
Name Page
rtlconsts ??
sysconst ??
System 1331
sysutils 1598
TypInfo 1937
85.2 Overview
The compiler has built-in support for variants, and for many operations, variants can be used without
thinking about it. The system unit has built-in support for some of the basic operations on a variant, as
well as some compiler helper routines. However, some operations and definitions are implemented in
the Variants unit so as not to burden the system unit with routines that may not always be needed.
There is a basic set of variants that are defined by the Windows OS, these are supported by the
compiler and the routines in the Variants unit. Additional variant types can be registered using
the TCustomVariantType (2136) type.
The variants unit also registers a handler for setting published properties (using RTTI) using variant-
typed values. Nothing needs to be done for this except including the variants unit in your program.
CFirstUserType is the first allocated value for vType when registering a variant type by the
RTL, when instantiating a TCustomVariantType (2136) to register a variant type. It is better not to
specify a custom variant type value, but let the system allocate a custom variant type.
2107
CHAPTER 85. REFERENCE FOR UNIT ’VARIANTS’
CIncVarType = $000F
CIncVarType specifies the width of the gap after CMinVarType (2108). No user types are regis-
tered between CMinVarType and CMinVarType+CIncVarType.
CMaxNumberOfCustomVarTypes = $0EFF
CMaxVarType is the maximum allowed value for vType when registering a variant type, instanti-
ating a TCustomVariantType (2136) to register a variant type. It is better not to specify a value, but
let the system allocate a custom variant type.
CMinVarType = $0100
CMinVarType is the first allowed value for vType when registering a variant type by the OS,
instantiating a TCustomVariantType (2136) to register a variant type. It is better not to specify a
custom variant type value, but let the system allocate a custom variant type.
FloatlVarTypes is used in VarIsFloat (2125) to decide which variant types are considered ordi-
nals.
OrdinalVarTypes is used in VarIsOrdinal (2125) to decide which variant types are considered
ordinals.
85.3.2 Types
TAnyProc = procedure(var V: tvardata)
TAnyProc is the type for the ClearAnyProc (2110), ChangeAnyProc (2110) and RefAnyProx
(2107) callbacks. It accepts a reference to a variant record. The operation to be performed depends
on the callback.
TBooleanToStringRule = (bsrAsIs,bsrLower,bsrUpper)
2108
CHAPTER 85. REFERENCE FOR UNIT ’VARIANTS’
Value Explanation
bsrAsIs Leave casing as is
bsrLower Convert to lowercase
bsrUpper Convert to uppercase
TNullCompareRule = (ncrError,ncrStrict,ncrLoose)
Value Explanation
ncrError Raise an error when one of the values is Null.
ncrLoose Attempt to compare anyway
ncrStrict Act as if the comparison is false
TNullCompareRule is the type for the NullEqualityRule (2111) and NullMagnitudeRule (2111)
variables. It can have the following values:
TVarCompareResult = (crLessThan,crEqual,crGreaterThan)
Value Explanation
crEqual Both values are equal
crGreaterThan The first value is greater than the second value
crLessThan The first value is less than the second value
2109
CHAPTER 85. REFERENCE FOR UNIT ’VARIANTS’
TVarDispProc is the type for the VarDispProc (2112) callback handler. It accepts a destination
variant (Dest) for a result. Source is the variant on which the operation was invoked, CallDesc
Describes the arguments to the call and Params points to the parameters provided in the call.
TVariantRelationship = (vrEqual,vrLessThan,vrGreaterThan,vrNotEqual
)
Value Explanation
vrEqual Are the 2 variants equal
vrGreaterThan Is the first variant (strictly) greater than the second
vrLessThan Is the first variant (strictly) less than the second
vrNotEqual Are the 2 variants unequal
85.3.3 Variables
ChangeAnyProc : TAnyProc
ClearAnyProc : TAnyProc
ClearAnyProc is called when the system needs to clear a variant of type varAny. it must clear
the variant.
EmptyParam : OleVariant
2110
CHAPTER 85. REFERENCE FOR UNIT ’VARIANTS’
EmptyParam is an initialized variant with type varError and error value VAR_PARAMNOTFOUND.
In difference with Null (2114) and UnAssigned (2115) it is a variable. You should take care never to
write to it.
InvalidCustomVariantType : TCustomVariantType
NullAsStringValue is the value used when converting a Null to a string. It is only used when
NullStrictConvert (2111) is False, if NullStrictConvert (2111) is True, the value of NullAsStringValue
is ignored.
NullEqualityRule is checked when the system needs to compare the equality of variants with
Null values (operations opCmpEq, opCmpNe). Check TNullCompareRule (2109) for a list of
allowed values. The default is ncrLoose.
For determining the order (less than, greater than etc.) see NullMagnitudeRule (2111).
NullEqualityRule is checked when the system needs to determine the ordering of variants with
Null values (operations like opCmpGe, opCmpLe). Check TNullCompareRule (2109) for a list of
allowed values. The default is ncrLoose.
For determining equality (opCmpEq, opCmpNe) of Null values, see NullEqualityRule (2111).
PackVarCreation determines what to do when a variant array is created for elements with an
integer type (varSmallint, varByte and the like). A value of False means the array will contain
varInteger elements. This can result in better memory alignment. When PackVarCreation
is True then the smallest possible size is selected for the elements.
RefAnyProc : TAnyProc
2111
CHAPTER 85. REFERENCE FOR UNIT ’VARIANTS’
RefAnyProc is called when the system needs to obtain a reference to a variant of type varAny. it
must replace the variant with a reference to the variant.
VarDispProc : TVarDispProc
VarDispProc is the handler invoked when a dispatch invoke is handled on a variant of type
varDispatch, varAny or varUnknown.
Visibility: default
Description: DynArrayFromVariant transforms a variant array to a dynamic array. It uses TypInfo to
calculate the length, element type and dimension of the array.
The opposite transformation can be performed with DynArrayToVariant (2112).
See also: VarArrayCreateError (2116), VarArrayCreate (2115), VarArrayOf (2118), DynArrayToVariant (2112)
85.4.2 DynArrayToVariant
Synopsis: Convert a Dynamic Array To a Variant
Declaration: procedure DynArrayToVariant(var V: Variant; const DynArray: Pointer;
TypeInfo: Pointer)
Visibility: default
Description: DynArrayToVariant converts the dynamic array DynArray to a variant array V. It uses the
type information in TypeInfo to calculate the number of dimensions, array lengths and type of the
element. The dynamic array can only contain basic types.
If there is no data, an empty variant will be returned.
The opposite transformation can be performed with DynArrayFromVariant (2112).
See also: VarArrayCreateError (2116), VarArrayCreate (2115), VarArrayOf (2118), DynArrayFromVariant
(2112)
85.4.3 FindCustomVariantType
Synopsis: Find a custom variant class on vartype
2112
CHAPTER 85. REFERENCE FOR UNIT ’VARIANTS’
Visibility: default
Description: FindCustomVariantType searches the registry of known TCustomVariantType (2136) classes
and returns the instance registered for the variant type aVarType or the class name TypeName in
CustomVariantType if found.
It returns True if it found a matching definition, or False otherwise.
85.4.4 FindVarData
Synopsis: Return a pointer to variant data
Declaration: function FindVarData(const V: Variant) : pvardata
Visibility: default
Description: FindVarData returns a pointer to the argument V if it is not a reference. If it is a reference, then
the reference pointer is returned.
85.4.5 GetPropValue
Synopsis: Return a property value as a variant
Declaration: function GetPropValue(Instance: TObject; PropInfo: PPropInfo;
PreferStrings: Boolean) : Variant; Overload
Visibility: default
Description: GetPropValue returns the value of the property described by PropInfo from the Instance.
The property value is returned as a variant type.
when PreferStrings is true, the implementation will tend to cast to a string-valued variant when
a conversion must be done.
This function is used as the value for the TypInfo (2107) unit’s OnGetPropValue (2107) callback.
This callback is automatically initialized with the function when the variants unit is used.
See also: TypInfo (2107), TypInfo.OnGetPropValue (2107), SetPropValue (2114)
85.4.6 GetVariantProp
Synopsis: Get variant valued property
Declaration: function GetVariantProp(Instance: TObject; PropInfo: PPropInfo)
: Variant
function GetVariantProp(Instance: TObject; const PropName: string)
: Variant
Visibility: default
Description: GetVariantProp returns the value of the variant-types property described by PropInfo or
PropName from the Instance.
This function is used as the value for the TypInfo (2107) unit’s OnGetVariantProp (2107) callback.
This callback is automatically initialized with the function when the variants unit is used.
See also: TypInfo (2107), TypInfo.OnGetVariantProp (2107), SetVariantProp (2115), GetPropValue (2113)
2113
CHAPTER 85. REFERENCE FOR UNIT ’VARIANTS’
85.4.7 HandleConversionException
Synopsis: Convert an exception to a variant exception
Declaration: procedure HandleConversionException(const ASourceType: tvartype;
const ADestType: tvartype)
Visibility: default
Description: HandleConversionException converts a RTL exception (EConvertError (2107) or ERangeEr-
ror (2107) or EOverFlow (2107)) to an appropriate variant error (varCastError (2120) and varOver-
FlowError (2127)). Other exceptions are re-raised. If a source and destination type ASourceType
and aDestType are specified they are included in the error message.
See also: EConvertError (2107), ERangeError (2107), varCastError (2120), varOverFlowError (2127), EOver-
Flow (2107)
85.4.8 Null
Synopsis: Return a null variant
Declaration: function Null : Variant
Visibility: default
Description: UnAssigned returns a Null variant (type = varNull). It can be used to test for equality with
a Null variant.
See also: UnAssigned (2115), EmptyParam (2111)
85.4.9 SetClearVarToEmptyParam
Synopsis: Create an error variant with value VAR_PARAMNOTFOUND
Declaration: procedure SetClearVarToEmptyParam(var V: tvardata)
Visibility: default
Description: SetClearVarToEmptyParam clears the variant Vvar> and sets it’s type to varError and
value to VAR_PARAMNOTFOUND. VarIsEmptyParam(SetClearVarToEmptyParam(V))
will return True.
Errors: None.
See also: VarIsEmptyParam (2124), VarIsError (2124)
85.4.10 SetPropValue
Synopsis: Set a property value as a variant
Declaration: procedure SetPropValue(Instance: TObject; PropInfo: PPropInfo;
const Value: Variant); Overload
Visibility: default
Description: SetPropValue sets the value of the property described by PropInfo from the Instance. The
property value is set from the variant-typed value Value.
This function is used as the value for the TypInfo (2107) unit’s OnSetPropValue (2107) callback.
This callback is automatically initialized with the function when the variants unit is used.
See also: TypInfo (2107), TypInfo.OnSetPropValue (2107), GetPropValue (2113)
2114
CHAPTER 85. REFERENCE FOR UNIT ’VARIANTS’
85.4.11 SetVariantProp
Synopsis: Set variant valued property
Visibility: default
Description: SetVariantProp sets the value of the variant-types property described by PropInfo or PropName
from the Instance to Value.
This function is used as the value for the TypInfo (2107) unit’s OnSetVariantProp (2107) callback.
This callback is automatically initialized with the function when the variants unit is used.
See also: TypInfo (2107), TypInfo.OnSetVariantProp (2107), GetVariantProp (2113), GetPropValue (2113)
85.4.12 Unassigned
Synopsis: Return an unassigned variant
Declaration: function Unassigned : Variant
Visibility: default
Description: UnAssigned returns an unassigned variant (type = varEmpty). It can be used to test for
equality with an empty variant.
See also: Null (2114), EmptyParam (2111)
85.4.13 VarArrayAsPSafeArray
Synopsis: Return internal array of variant value
Declaration: function VarArrayAsPSafeArray(const A: Variant) : pvararray
Visibility: default
Description: VarArrayAsPSafeArray returns the internal array of the variant A if it is a variant array. If not,
an exception is raised.
Errors: if the variant A is not an array, an EVariantInvalidArgError (2132) exception is raised.
See also: VarIsArray (2123), EVariantInvalidArgError (2132)
85.4.14 VarArrayCreate
Synopsis: Create a variant array
Declaration: function VarArrayCreate(const Bounds: Array of SizeInt;
aVarType: tvartype) : Variant
function VarArrayCreate(const Bounds: pvararrayboundarray;
Dims: SizeInt; aVarType: tvartype) : Variant
Visibility: default
2115
CHAPTER 85. REFERENCE FOR UNIT ’VARIANTS’
Description: VarArrayCreate creates a (optionally multidimensional) array with upper,lower bounds speci-
fied in Bounds. The number of bounds (in case of a single array) must be even: 2 bounds for every
dimension of the array are required. All elements of the array are of the same type. The following
examples create a one-dimensional array with 10 elements
VarArrayCreate([0,9],varInteger);
VarArrayCreate([1,10],varInteger);
The first array is 0-based, the second is 1-based. The following creates a 2-dimensional array:
VarArrayCreate([0,9,0,1],varInteger);
VarArrayCreate([1,10,1,2],varInteger);
The first array is 0-based, the second is 1-based. Each array consists of an array of 2 elements.
The array can also be specified as a pointer to array of system.tvararraybound (2107) records, and a
number of dimensions. The above 1-dimensional arrays can be specified as:
var
B : tvararraybound;
begin
b.elementcount:=10;
B.lowbound:=0;
VarArrayCreate(@B,1,varInteger);
b.elementcount:=10;
B.lowbound:=1;
VarArrayCreate(@B,1,varInteger);
Errors: If an uneven amount of bounds is specified or the operating system failed to create the array, an
exception is raised using VarArrayCreateError (2116)
See also: VarArrayCreateError (2116), VarArrayOf (2118)
85.4.15 VarArrayCreateError
Synopsis: Raise an EVariantArrayCreateError error
85.4.16 VarArrayDimCount
Synopsis: Return the number of dimensions of the array.
Declaration: function VarArrayDimCount(const A: Variant) : LongInt
Visibility: default
2116
CHAPTER 85. REFERENCE FOR UNIT ’VARIANTS’
Description: VarArrayDimCount returns the number of dimensions of the array A. If A is not an array, zero is
returned.
Errors: None.
See also: VarArrayCreate (2115), VarArrayLowBound (2118), VarArrayHighBound (2117)
85.4.17 VarArrayHighBound
Synopsis: Return lower bound of an array
Declaration: function VarArrayHighBound(const A: Variant; Dim: LongInt) : LongInt
Visibility: default
Description: VarArrayHighBound returns the high bound (max index) of dimension Dim of array A. The
dimension Dim is 1-based.
Errors: If the dimension is out of range, or A is not a variant array, an exception will be raised.
See also: VarArrayCreate (2115), VarArrayDimCount (2116), VarArrayLowBound (2118)
85.4.18 VarArrayLock
Synopsis: get a pointer to data of a variant array
Declaration: function VarArrayLock(const A: Variant) : Pointer
Visibility: default
Description: VarArrayLock returns a pointer to the data of an array-typed variant A and locks the variant. The
pointer can then be used to manipulate the data of the array and be sure that the data is not modified
by another process or thread. While the data is not released using VarArrayUnlock (2118) the variant
cannot be changed or released, it is therefor impperative that the variant is again released. Memory
leaks will be the result if this is not done.
85.4.19 VarArrayLockedError
Synopsis: Raise an EVariantArrayLockedError error
Declaration: procedure VarArrayLockedError
Visibility: default
2117
CHAPTER 85. REFERENCE FOR UNIT ’VARIANTS’
85.4.20 VarArrayLowBound
Synopsis: Return lower bound of an array
Errors: If the dimension is out of range, or A is not a variant array, an exception will be raised.
See also: VarArrayCreate (2115), VarArrayDimCount (2116), VarArrayHighBound (2117)
85.4.21 VarArrayOf
Synopsis: Create a variants array of a series of values
85.4.22 VarArrayRef
Synopsis: Get a reference to a variant array
85.4.23 VarArrayUnlock
Synopsis: Release data captured by VarArrayLock
Declaration: procedure VarArrayUnlock(const A: Variant)
Visibility: default
Description: VarArrayUnlock unlocks the variant array A that was previously locked using VarArrayLock
(2117).
See also: VarArrayLock (2117)
2118
CHAPTER 85. REFERENCE FOR UNIT ’VARIANTS’
85.4.24 VarAsError
Synopsis: Create an error-typed variant
Errors: None.
See also: SetClearVarToEmptyParam (2114), VarIsError (2124)
85.4.25 VarAsType
Synopsis: Attempt to cast a variant to another type
Declaration: function VarAsType(const V: Variant; aVarType: tvartype) : Variant
Visibility: default
Description: VarAsType attempts to cast the variant V to a new variant of type aVarType and returns the new
variant.
Errors: If the requested type cast is not supported or possible, an EVariantTypeCastError (2134) exception
may be raised.
See also: EVariantTypeCastError (2134), VarIsType (2126), VarAsType (2119)
85.4.26 VarBadIndexError
Synopsis: Raise an EVariantBadIndexError error
85.4.27 VarBadTypeError
Synopsis: Raise an EVariantBadVarTypeError error
Declaration: procedure VarBadTypeError
Visibility: default
Description: VarBadTypeError raises an EVariantBadVarTypeError (2132) exception.
See also: EVariantBadVarTypeError (2132), VarInvalidNullOp (2122), VarInvalidOp (2122)
2119
CHAPTER 85. REFERENCE FOR UNIT ’VARIANTS’
85.4.28 VarCastError
Synopsis: Raise a variant type cast error EVariantTypeCastError
Description: VarCastError raises an EVariantTypeCastError (2134) exception. If the source and destination
types are specified, then a description of the types is included in the error message.
See also: EVariantTypeCastError (2134), VarCastErrorOle (2120)
85.4.29 VarCastErrorOle
Synopsis: Raise a variant type cast error EVariantTypeCastError
85.4.30 VarCheckEmpty
Synopsis: Raise exception if a variant is empty.
Declaration: procedure VarCheckEmpty(const V: Variant)
Visibility: default
Description: VarCheckEmpty will raise an EVariantError (2107) exception if the variant V is empty (it uses
VarIsEmpty (2124) to check this.)
Errors: if the variant is empty an EVariantError (2107) exception is raised.
85.4.31 VarClear
Synopsis: Clear the variant value
Declaration: procedure VarClear(var V: Variant)
procedure VarClear(var V: OleVariant)
Visibility: default
Description: VarClear clears the variant, possibly freeing any memory taken by the value
Errors: None.
2120
CHAPTER 85. REFERENCE FOR UNIT ’VARIANTS’
85.4.32 VarCompareValue
Synopsis: Compare 2 variant values
Declaration: function VarCompareValue(const A: Variant; const B: Variant)
: TVariantRelationship
Visibility: default
Description: VarCompareValue compares 2 variants A and B. It returns one of the following values:
85.4.33 VarCopyNoInd
Synopsis: Not supported
Declaration: procedure VarCopyNoInd(var Dest: Variant; const Source: Variant)
Visibility: default
Description: VarCopyNoInd is currently not supported.
Errors: An EVariantError exception is always raised.
85.4.34 VarEnsureRange
Synopsis: Make sure the variant is within a specified range.
Declaration: function VarEnsureRange(const AValue: Variant; const AMin: Variant;
const AMax: Variant) : Variant
Visibility: default
Description: VarEnsureRange checks AValue and returns it if it is in the range specified by AMin, AMax.
If it is less than AMin, then AMin is returned. If it is larger than AMax, then AMax is returned.
Errors: If the variants are of different types and they cannot be converted, an exception will be raised.
See also: VarInRange (2122)
85.4.35 VarFromDateTime
Synopsis: Create variant from TDateTime value.
Declaration: function VarFromDateTime(const DateTime: TDateTime) : Variant
Visibility: default
Description: VarFromDateTime creates a variant with type varDate and value DateTime.
Errors: None.
See also: varToDateTime (2128)
2121
CHAPTER 85. REFERENCE FOR UNIT ’VARIANTS’
85.4.36 VarInRange
Synopsis: Check if a variant is in a range of values
Declaration: function VarInRange(const AValue: Variant; const AMin: Variant;
const AMax: Variant) : Boolean
Visibility: default
Description: VarInRange is an auxiliary function which checks whether AValue is in the range defined by
AMin and AMax, borders included.
Errors: If the variants are of different types and they cannot be converted, an exception will be raised.
See also: VarEnsureRange (2121)
85.4.37 VarInvalidArgError
Synopsis: Raise an EVariantInvalidArgError error
Declaration: procedure VarInvalidArgError
procedure VarInvalidArgError(AType: tvartype)
Visibility: default
Description: VarInvalidArgError raises an EVariantInvalidArgError (2132) exception with a standard error
message. If the AType argument is specified, a description of the argument type is included in the
error message.
See also: EVariantInvalidArgError (2132), VarInvalidNullOp (2122), VarInvalidOp (2122), VarBadIndexError
(2119), VarArrayLockedError (2117)
85.4.38 VarInvalidNullOp
Synopsis: Raise an EVariantInvalidOpError error
Declaration: procedure VarInvalidNullOp
Visibility: default
Description: VarInvalidNullOp raises an EVariantInvalidOpError (2132) exception including null type de-
scription.
See also: EVariantInvalidOpError (2132), VarInvalidOp (2122)
85.4.39 VarInvalidOp
Synopsis: Raise a EVariantInvalidOpError error
Declaration: procedure VarInvalidOp
procedure VarInvalidOp(const aLeft: tvartype; const aRight: tvartype;
aOpCode: tvarop)
procedure VarInvalidOp(const aRight: tvartype; aOpCode: tvarop)
Visibility: default
Description: VarInvalidOp raises an EVariantInvalidOpError (2132) exception. when the left and/or right
operand types (aLeft, aRight and the operation are specified, a description of the operand types
and operation is included in the error message.
See also: EVariantInvalidOpError (2132), VarCastError (2120)
2122
CHAPTER 85. REFERENCE FOR UNIT ’VARIANTS’
85.4.40 VarIsArray
Synopsis: Check whether a variant is an array
85.4.41 VarIsBool
Synopsis: Check if the variant is a boolean
Declaration: function VarIsBool(const V: Variant) : Boolean
Visibility: default
Description: VarIsCustom returns True if the variant V is a boolean value.
See also: VarIsEmpty (2124), VarIsNull (2125), VarIsCustom (2124), VarIsOrdinal (2125), VarIsFloat (2125),
VarIsStr (2126)
85.4.42 VarIsByRef
Synopsis: Check if the variant is a reference to a value.
See also: VarType (2130), VarAsType (2119), VarIsType (2126), VarIsEmpty (2124), VarIsNull (2125)
85.4.43 VarIsClear
Synopsis: Check if a variant is clear
Declaration: function VarIsClear(const V: Variant) : Boolean
Visibility: default
Description: VarIsClear returns True if the variant V is empty, or it is a dispatch type with value Nil. For
custom types, the decision is left to the custom type.
See also: VarIsEmpty (2124), VarIsNull (2125), VarIsNumeric (2125), VarIsStr (2126)
2123
CHAPTER 85. REFERENCE FOR UNIT ’VARIANTS’
85.4.44 VarIsCustom
Synopsis: Check if the variant is a custom value.
See also: VarIsEmpty (2124), VarIsNull (2125), VarIsOrdinal (2125), VarIsNumeric (2125), VarIsStr (2126)
85.4.45 VarIsEmpty
Synopsis: Check if the variant is empty
Declaration: function VarIsEmpty(const V: Variant) : Boolean
Visibility: default
Description: VarIsEmpty checks whether the variant V is empty (i.e. the type is varEmpty).
See also: VarType (2130), VarAsType (2119), VarIsType (2126), VarIsEmpty (2124), VarCheckEmpty (2120),
VarIsNull (2125)
85.4.46 VarIsEmptyParam
Synopsis: Check if the variant is an error value for VAR_PARAMNOTFOUND
Declaration: function VarIsEmptyParam(const V: Variant) : Boolean
Visibility: default
Description: VarIsEmptyParam returns True if the variant V is an error typed variant with value VAR_PARAMNOTFOUND,
or False otherwise.
See also: VarIsError (2124), SetClearVarToEmptyParam (2114)
85.4.47 VarIsError
Synopsis: Check if the variant has type varError
See also: VarIsNull (2125), VarIsEmpty (2124), VarIsOrdinal (2125), VarIsEmptyParam (2124)
2124
CHAPTER 85. REFERENCE FOR UNIT ’VARIANTS’
85.4.48 VarIsFloat
Synopsis: Check if the variant is a floating-point value.
See also: VarIsEmpty (2124), VarIsNull (2125), VarIsCustom (2124), VarIsOrdinal (2125), VarIsNumeric
(2125), VarIsStr (2126)
85.4.49 VarIsNull
Synopsis: Check if a variant is null
85.4.50 VarIsNumeric
Synopsis: Check if the variant is a numerical value
Declaration: function VarIsNumeric(const V: Variant) : Boolean
Visibility: default
Description: VarIsCustom returns True if the variant V is of one of the ordinal or floating point types: Float-
VarTypes (2108), OrdinalVarTypes (2108)
See also: VarIsEmpty (2124), VarIsNull (2125), VarIsCustom (2124), VarIsOrdinal (2125), VarIsFloat (2125),
VarIsStr (2126)
85.4.51 VarIsOrdinal
Synopsis: Check if the variant is an ordinal value.
Declaration: function VarIsOrdinal(const V: Variant) : Boolean
Visibility: default
Description: VarIsCustom returns True if the variant V is of one of the ordinal types: OrdinalVarTypes (2108)
(varSmallInt,varInteger, varBoolean,varShortInt,varByte,varWord, varLongWord,varInt64)
See also: VarIsEmpty (2124), VarIsNull (2125), VarIsCustom (2124), VarIsFloat (2125), VarIsNumeric (2125),
VarIsStr (2126)
2125
CHAPTER 85. REFERENCE FOR UNIT ’VARIANTS’
85.4.52 VarIsStr
Synopsis: Check if the variant is a string
See also: VarIsEmpty (2124), VarIsNull (2125), VarIsCustom (2124), VarIsOrdinal (2125), VarIsFloat (2125),
VarIsBool (2123)
85.4.53 VarIsType
Synopsis: Check if a variant is of certain type
Description: VarIsType will return True if the variant V is of type aVarType or is in aVarTypes.
See also: VarType (2130), VarAsType (2119), VarIsByRef (2123), VarIsNull (2125), VarIsEmpty (2124)
85.4.54 VarNotImplError
Synopsis: Raise an EVariantNotImplError error
85.4.55 VarOutOfMemoryError
Synopsis: Raise an EVariantOutOfMemoryError error
Declaration: procedure VarOutOfMemoryError
Visibility: default
Description: VarOutOfMemoryError raises an EVariantOutOfMemoryError (2133) exception with a stan-
dard error message.
See also: EVariantOutOfMemoryError (2133), VarInvalidNullOp (2122), VarInvalidOp (2122), VarBadIndex-
Error (2119), VarArrayLockedError (2117)
2126
CHAPTER 85. REFERENCE FOR UNIT ’VARIANTS’
85.4.56 VarOverflowError
Synopsis: Raise an EVariantOverflowError error.
Declaration: procedure VarOverflowError
procedure VarOverflowError(const ASourceType: tvartype;
const ADestType: tvartype)
Visibility: default
Description: VarOverflowError raises a EVariantOverflowError (2133) exception with a description of the
ASourceType and ADestType types in the message.
See also: EVariantOverflowError (2133), VarInvalidNullOp (2122), VarInvalidOp (2122)
85.4.57 VarRangeCheckError
Synopsis: Raise an EVariantOverflowError error
Declaration: procedure VarRangeCheckError(const AType: tvartype)
procedure VarRangeCheckError(const ASourceType: tvartype;
const ADestType: tvartype)
Visibility: default
Description: VarRangeCheckError raises an EVariantOverflowError (2133) exception with a standard er-
ror message. A description of the type AType is included in the error message, similarly if a
ASourceType and aDestType source and destination types are provided.
See also: EVariantOverflowError (2133), VarOverflowError (2127), VarInvalidNullOp (2122), VarInvalidOp
(2122), VarBadIndexError (2119), VarArrayLockedError (2117)
85.4.58 VarResultCheck
Synopsis: Check the result of an operation and raise exception if not OK.
Declaration: procedure VarResultCheck(AResult: HRESULT)
procedure VarResultCheck(AResult: HRESULT; ASourceType: tvartype;
ADestType: tvartype)
Visibility: default
Description: VarResultCheck checks the result aResult. If it difers from VAR_OK then an appropriate
exception is raised based on the error code. If a source and destination type ASourceType and
aDestType are specified they are included in the error message.
See also: VarOverflowError (2127), VarInvalidNullOp (2122), VarInvalidOp (2122), VarBadIndexError (2119),
VarArrayLockedError (2117)
85.4.59 VarSameValue
Synopsis: Check if 2 variants are the same
Declaration: function VarSameValue(const A: Variant; const B: Variant) : Boolean
Visibility: default
Description: varSameValue checks whether A and B have the same value. Here empty variants equal empty
variants, and null variants equal null variants. For all other cases, the actual values are compared.
Errors: If the variants are of different types and they cannot be converted, an exception will be raised.
2127
CHAPTER 85. REFERENCE FOR UNIT ’VARIANTS’
85.4.60 VarSupports
Synopsis: Check if a variant supports an interface.
Description: VarSupports checks if the variant V contains an interface (types Unknown, varDispatch)
and the interface supports the specified interface IID. If it does, True is returned, False otherwise.
If Intf is specified, and the variant supports the requested interface, the interface instance is returned
in Intf.
See also: #rtl.sysutils.Supports (1755)
85.4.61 VarToDateTime
Synopsis: Convert a variant to datetime value
Declaration: function VarToDateTime(const V: Variant) : TDateTime
Visibility: default
85.4.62 VarToStr
Synopsis: Convert a variant to string value
Declaration: function VarToStr(const V: Variant) : string
Visibility: default
Description: VarToStr attempts to convert the variant V to a string. If the value is Null, the result is an empty
string.
See also: VarToStrDef (2128), VarIsStr (2126), VarToWideStr (2129)
85.4.63 VarToStrDef
Synopsis: Convert a variant to string value, specifying a default
2128
CHAPTER 85. REFERENCE FOR UNIT ’VARIANTS’
85.4.64 VarToUnicodeStr
Synopsis: Convert a variant to string value
See also: VarToWideStr (2129), VarToUnicodeStrDef (2129), VarIsStr (2126), VarToStr (2128), VarToUni-
codeStr (2129)
85.4.65 VarToUnicodeStrDef
Synopsis: Convert a variant to string value, specifying a default
85.4.66 VarToWideStr
Synopsis: Convert a variant to string value
See also: VarToWideStrDef (2129), VarIsStr (2126), VarToStr (2128), VarToUnicodeStr (2129)
85.4.67 VarToWideStrDef
Synopsis: Convert a variant to string value, specifying a default
Declaration: function VarToWideStrDef(const V: Variant; const ADefault: WideString)
: WideString
Visibility: default
Description: VarToWideStr attempts to convert the variant V to a string. If the value is Null, the result is the
specified aDefault string.
See also: VarToWideStrDef (2129), VarIsStr (2126), VarToWideStr (2129), VarToUnicodeStrDef (2129)
2129
CHAPTER 85. REFERENCE FOR UNIT ’VARIANTS’
85.4.68 VarType
Synopsis: Return the type of a variant.
85.4.69 VarTypeAsText
Synopsis: Return a textual description of the variant type
Declaration: function VarTypeAsText(const AType: tvartype) : string
Visibility: default
Description: VarTypeAsText returns a textual description of the variant type aType. It is used in all exception
raising routines to describe types, if a type is provided. For custom variant types, the name of the
class is returned.
See also: VarOpAsText (2108)
85.4.70 VarTypeDeRef
Synopsis: Returns the resolved type of a variant.
Declaration: function VarTypeDeRef(const V: Variant) : tvartype; Overload
function VarTypeDeRef(const V: tvardata) : tvartype; Overload
Visibility: default
Description: VarTypeDeRef will resolve the final type of the variant V: if V is a reference to another variant, the
function will return the type of the referenced variant, recursing as much as needed till a non-variant
type is encountered.
See also: VarType (2130), VarIsType (2126), VarAsType (2119)
85.4.71 VarTypeIsValidArrayType
Synopsis: Check if a variant type can be used in an array
Declaration: function VarTypeIsValidArrayType(const aVarType: tvartype) : Boolean
Visibility: default
Description: VarTypeIsValidArrayType checks if the variant type aVarType can be used as the type of
a variant array. It returns True if it is usable, false otherwise. Currently, the following types are
valid: SmallInt, Integer, Single, Double, Date, Currency, OleStr, Dispatch, Error, Boolean, Variant,
Unknown (interface IUnknown), ShortInt, Byte, Word, LongWord.
See also: VarIsArray (2123), VarTypeIsValidElementType (2131)
2130
CHAPTER 85. REFERENCE FOR UNIT ’VARIANTS’
85.4.72 VarTypeIsValidElementType
Synopsis: Check if a variant type can be used in an array
85.4.73 VarUnexpectedError
Synopsis: Raise an EVariantUnexpectedError error
Declaration: procedure VarUnexpectedError
Visibility: default
Description: VarUnexpectedError raises an EVariantUnexpectedError (2134) exception with a standard er-
ror message.
See also: EVariantUnexpectedError (2134), VarInvalidNullOp (2122), VarInvalidOp (2122), VarBadIndexEr-
ror (2119), VarArrayLockedError (2117)
85.5 EVariantArrayCreateError
85.5.1 Description
EVariantArrayCreateError is the exception raised when a problem is detected during cre-
ation of an array. It can be raised manually by calling VarArrayCreateError (2116).
85.6 EVariantArrayLockedError
85.6.1 Description
EVariantArrayLockedError is the exception raised when the VAR_ARRAYISLOCKED error
is encountered in VarResultCheck (2127)
2131
CHAPTER 85. REFERENCE FOR UNIT ’VARIANTS’
85.7 EVariantBadIndexError
85.7.1 Description
EVariantBadIndexError is the exception raised when the VAR_BADINDEX error is encoun-
tered in VarResultCheck (2127)
85.8 EVariantBadVarTypeError
85.8.1 Description
EVariantBadVarTypeError is the exception raised when the VAR_BADVARTYPE error is en-
countered in VarResultCheck (2127)
85.9 EVariantDispatchError
85.9.1 Description
EVariantDispatchError is the exception raised when a dispatch call fails.
85.10 EVariantInvalidArgError
85.10.1 Description
EVariantInvalidArgError is the exception raised when the VAR_INVALIDARG error is en-
countered in VarResultCheck (2127)
85.11 EVariantInvalidNullOpError
85.11.1 Description
EVariantInvalidNullOpError is defined for Delphi compatibility, but is not used in the FPC
run time.
85.12 EVariantInvalidOpError
85.12.1 Description
EVariantInvalidOpError is the exception raised when the VAR_EXCEPTION error is en-
countered in VarResultCheck (2127)
2132
CHAPTER 85. REFERENCE FOR UNIT ’VARIANTS’
85.13 EVariantNotAnArrayError
85.13.1 Description
EVariantNotAnArrayError is not used in FPC and is defined for Delphi compatibility.
85.14 EVariantNotImplError
85.14.1 Description
EVariantNotImplError is the exception raised when the VAR_NOTIMPL error is encountered
in VarResultCheck (2127)
85.15 EVariantOutOfMemoryError
85.15.1 Description
EVariantOutOfMemoryError is the exception raised when the VAR_OUTOFMEMORY error is
encountered in VarResultCheck (2127) It can be raised manually by calling VarOutOfMemoryError
(2126).
85.16 EVariantOverflowError
85.16.1 Description
EVariantOverflowError is the exception raised when the VAR_OVERFLOW error is encoun-
tered in VarResultCheck (2127)
85.17 EVariantParamNotFoundError
85.17.1 Description
EVariantParamNotFoundError is the exception raised when the VAR_PARAMNOTFOUND
error is encountered in VarResultCheck (2127)
85.18 EVariantRangeCheckError
85.18.1 Description
EVariantRangeCheckError is defined for Delphi compatibility, it is not used in FPC.
2133
CHAPTER 85. REFERENCE FOR UNIT ’VARIANTS’
85.19 EVariantTypeCastError
85.19.1 Description
EVariantTypeCastError is the exception raised when the VAR_TYPEMISMATCH error is en-
countered in VarResultCheck (2127)
85.20 EVariantUnexpectedError
85.20.1 Description
EVariantUnexpectedError is the exception raised when the VAR_UNEXPECTED error is
encountered in VarResultCheck (2127) It can be raised manually by calling VarUnexpectedError
(2131).
85.21 IVarInstanceReference
85.21.1 Description
IVarInstanceReference is used to get the instance of an object from a custom variant. It has
only one method, GetInstance (2134) which is used to retrieve the instance of a variant that contains
an object.
The TPublishableVariantType (2143) descendent of TInvokeableVariantType (2141) uses this inter-
face to implement reading published properties from the instance.
85.21.3 IVarInstanceReference.GetInstance
Synopsis: Return the object instance referenced by the custom variant
Declaration: function GetInstance(const V: tvardata) : TObject
Visibility: default
Description: GetInstance must return the object instance referenced by the custom variant V.
See also: TPublishableVariantType (2143)
2134
CHAPTER 85. REFERENCE FOR UNIT ’VARIANTS’
85.22 IVarInvokeable
85.22.1 Description
IVarInvokeable must be implemented by the TCustomVariantType (2136) descendent if the
custom variant needs to implement dynamic properties and methods.
IVarInvokeable has four functions that must be implemented. Any of these functions can be
called whenever a custom variant’s method is invoked or a property of the variant is read or written
using DispInvoke.
The TCustomVariantType descendent TInvokeableVariantType (2141) implements the needed
DispInvoke to call the IVarInvokeable interface, so you can descend from that type instead
when creating a new custom variant type and override the needed functions.
85.22.3 IVarInvokeable.DoFunction
Synopsis: Called for methods that return a result (functions)
Declaration: function DoFunction(var Dest: tvardata; const V: tvardata;
const Name: string; const Arguments: TVarDataArray)
: Boolean
Visibility: default
Description: DoFunction is called whenever a variant method that returns a result needs to be invoked. The
Dest parameter points to the location where the result of the function must be placed; the result
must be a variant value.
V is the variant on which the method is being executed. The Name is the name of the function to
execute, and Arguments is an array of variant arguments that were passed to the function.
The function must return True if the function was executed correctly, False otherwise.
See also: IVarInvokeable.DoProcedure (2135), IVarInvokeable.GetProperty (2136), IVarInvokeable.SetProperty
(2136)
85.22.4 IVarInvokeable.DoProcedure
Synopsis: Called for methods that do not return a result (procedures)
Declaration: function DoProcedure(const V: tvardata; const Name: string;
const Arguments: TVarDataArray) : Boolean
Visibility: default
2135
CHAPTER 85. REFERENCE FOR UNIT ’VARIANTS’
Description: DoProcedure is called whenever a variant method that does not return a result needs to be in-
voked. V is the variant on which the method is being executed. The Name is the name of the method
to execute, and Arguments is an array of variant arguments that were passed to the method.
The function must return True if the procedure was executed correctly, False otherwise.
See also: IVarInvokeable.DoFunction (2135), IVarInvokeable.GetProperty (2136), IVarInvokeable.SetProperty
(2136)
85.22.5 IVarInvokeable.GetProperty
Synopsis: Called when a property must be read
Declaration: function GetProperty(var Dest: tvardata; const V: tvardata;
const Name: string) : Boolean
Visibility: default
Description: DoFunction is called whenever a variant property is read. Dest must be filled with the value of
the property on success. V is the variant on which the property is read. The Name is the name of the
property to read.
The function must return True if the property was read correctly, False otherwise.
See also: IVarInvokeable.DoFunction (2135), IVarInvokeable.DoProcedure (2135), IVarInvokeable.SetProperty
(2136)
85.22.6 IVarInvokeable.SetProperty
Synopsis: Called when a property must be set
Declaration: function SetProperty(var V: tvardata; const Name: string;
const Value: tvardata) : Boolean
Visibility: default
Description: DoFunction is called whenever a variant property is written. Value is filled with the new value
of the property. V is the variant on which the property is written. The Name is the name of the
property to write.
The function must return True if the property was written correctly, False otherwise.
See also: IVarInvokeable.DoFunction (2135), IVarInvokeable.DoProcedure (2135), IVarInvokeable.GetProperty
(2136)
85.23 TCustomVariantType
85.23.1 Description
TCustomVariantType is used as a base class to implement custom variants. To define a custom
variant type, a descendent of TCustomVariant must be made, and the appropriate methods must
be overridden and implemented according to the specifications of the new type. Typically this means
defining how your new type maps to another variant or a basic type.
Note that the TCustomVariantType descendent does not hold the data of the variant: it just
describes how a variant record (TVarRec (1406)) that contains the new type’s data can be examined
or manipulated.
2136
CHAPTER 85. REFERENCE FOR UNIT ’VARIANTS’
85.23.5 TCustomVariantType.Create
Synopsis: Instantiate a new custom variant type
Declaration: constructor Create; Overload
constructor Create(RequestedVarType: tvartype); Overload
Visibility: public
Description: Create sets up the necessary reference counting mechanisms to act as an interface, and assigns
the new variant type identifier. If specified, the RequestedVarType is the variant type that is
registered. if it is zero, a new identifier is assigned.
See also: TCustomVariantType.Destroy (2137)
85.23.6 TCustomVariantType.Destroy
Synopsis: Unregister variant type
Declaration: destructor Destroy; Override
Visibility: public
Description: Destroy unregisters the custom variant type and removes the instance from memory. After this is
called, variants with the (now unregistered) type can no longer be used.
See also: TCustomVariantType.Create (2137)
2137
CHAPTER 85. REFERENCE FOR UNIT ’VARIANTS’
85.23.7 TCustomVariantType.IsClear
Synopsis: Is the custom value unassigned ?
85.23.8 TCustomVariantType.Cast
Synopsis: Cast a custom variant to another type
Declaration: procedure Cast(var Dest: tvardata; const Source: tvardata); Virtual
Visibility: public
Description: Cast is called when a variant value Source is cast to a custom variant Dest. Descendents must
override this method to provide the desired conversion behaviour.
The TCustomVariantType implementation of Cast calls CastTo on the source variant with
as destination type the custom variant type.
Errors: If the variant type cannot be cast, an exception is raised.
See also: TCustomVariantType.CastTo (2138), TCustomVariantType.CastToOle (2138)
85.23.9 TCustomVariantType.CastTo
Synopsis: Cast a custom variant to another type
Declaration: procedure CastTo(var Dest: tvardata; const Source: tvardata;
const aVarType: tvartype); Virtual
Visibility: public
Description: CastTo is called when a custom variant value Source is cast to a variant type aVarType and
stores the result in Dest. Descendents must override this method to provide the desired conversion
behaviour.
See also: TCustomVariantType.Cast (2138), TCustomVariantType.CastToOle (2138)
85.23.10 TCustomVariantType.CastToOle
Synopsis: Cast variant value to OLE value
Declaration: procedure CastToOle(var Dest: tvardata; const Source: tvardata)
; Virtual
Visibility: public
2138
CHAPTER 85. REFERENCE FOR UNIT ’VARIANTS’
Description: CastToOle is called when a variant must be cast to a value that can be used in OLE variants.
Descendents must override this method to provide the desired conversion behaviour.
The TCustomVariantType implementation of CastToOle raises an ’unsupported’ exception.
See also: TCustomVariantType.Cast (2138), TCustomVariantType.CastTo (2138)
85.23.11 TCustomVariantType.Clear
Synopsis: Clear a value
Declaration: procedure Clear(var V: tvardata); Virtual; Abstract
Visibility: public
Description: Clear is called when a variant value must be cleared, by VarClear. This is an abstract method
that must be overridden and implemented in descendent classes. When the method returns, the type
of the variant record must be varClear
If the custom variant value used some heap memory (for intance in an object) then this is the place
to release that memory.
Errors: If this method is not overridden, an abstract error will be thrown.
See also: TCustomVariantType.IsClear (2138), TCustomVariantType.Copy (2139), VarClear (2120)
85.23.12 TCustomVariantType.Copy
Synopsis: Copy a custom variant value
Declaration: procedure Copy(var Dest: tvardata; const Source: tvardata;
const Indirect: Boolean); Virtual; Abstract
Visibility: public
Description: Copy is used when a custom variant value is assigned to another variant. This is an abstract method
that must be overridden and implemented in descendent classes. When the method returns, the type
of the Dest variant record must be equal to the Source type (the custom varant type value).
If Indirect is True source contains a reference to the custom variant. In that case, dest should
also contain a reference.
Errors: If this method is not overridden, an abstract error will be thrown.
See also: TCustomVariantType.Clear (2139)
85.23.13 TCustomVariantType.BinaryOp
Synopsis: Perform a binary mathematical operation
Declaration: procedure BinaryOp(var Left: tvardata; const Right: tvardata;
const Operation: tvarop); Virtual
Visibility: public
Description: BinaryOp performs Operation on Left and Right and stores the result of the result in Left.
The TCustomVariantType implementation of this method raises an invalid operation error. De-
scendent classes must override this.
Errors: If a descendent does not override this, an invalid operation error is raised.
See also: =TCustomVariantType.UnaryOp (2107), =TCustomVariantType.CompareOp (2107)
2139
CHAPTER 85. REFERENCE FOR UNIT ’VARIANTS’
85.23.14 TCustomVariantType.UnaryOp
Synopsis: Perform a unary mathematical operation
85.23.15 TCustomVariantType.CompareOp
Synopsis: Check result of a comparison between 2 custom variant values
Declaration: function CompareOp(const Left: tvardata; const Right: tvardata;
const Operation: tvarop) : Boolean; Virtual
Visibility: public
Description: CompareOp performs the comparison specified in Operation on left and Right and returns
True if the values satisfy the requested operation. The TCustomVariantType implementation
of this method raises an ’unsupported’ error. Descendent classes must override this method.
Errors: If a descendent does not override this, an ’unsupported’ error is raised.
85.23.16 TCustomVariantType.Compare
Synopsis: Comparison 2 custom variant values
Declaration: procedure Compare(const Left: tvardata; const Right: tvardata;
var Relationship: TVarCompareResult); Virtual
Visibility: public
Description: Compare performs the comparison specified in Operation on left and Right and returns the
result of the comparison. The TCustomVariantType implementation of this method raises an
’unsupported’ error. Descendent classes must override this method.
Errors: If a descendent does not override this, an ’unsupported’ error is raised.
See also: TCustomVariantType.CompareOp (2140), TCustomVariantType.UnaryOp (2140), TCustomVariant-
Type.binaryOp (2139)
2140
CHAPTER 85. REFERENCE FOR UNIT ’VARIANTS’
85.23.17 TCustomVariantType.VarType
Synopsis: Registered type
Declaration: Property VarType : tvartype
Visibility: public
Access: Read
Description: VarType is the custom variant type identifier for the custom variant values. It is assigned by the
system in the consutructor.
See also: TCustomVariantType.Create (2137)
85.24 TInvokeableVariantType
85.24.1 Description
TInvokeableVariantType is a TCustomVariantType (2136) descendent which implements the
TCustomVariantType.DispInvoke (2136) method. It translates the DispInvoke" method to calls
to one or more of the four methods of IVarInvokeable (2135): DoFunction (2135) or DoProcedure
(2135) for method calls (DISPATCH_METHOD) and GetProperty (2136) for property reading (DIS-
PATCH_PROPERTYGET) or SetProperty (2136) for property writing (DISPATCH_PROPERTYSET).
Other combinations are possible. It has empty stubs for these methods, which must be implemented
in a descendent that is used to describe a custom variant.
85.24.4 TInvokeableVariantType.DoFunction
Synopsis: Empty stub for IVarInvokeable.DoFunction, to be implemented in descendents
Declaration: function DoFunction(var Dest: tvardata; const V: tvardata;
const Name: string; const Arguments: TVarDataArray)
: Boolean; Virtual
2141
CHAPTER 85. REFERENCE FOR UNIT ’VARIANTS’
Visibility: public
Description: DoFunction is the default implementation of IVarInvokeable.DoFunction (2135), which always
returns False. It must be overridden in descendent classes to implement actual calling of a function.
See also: IVarInvokeable.DoFunction (2135)
85.24.5 TInvokeableVariantType.DoProcedure
Synopsis: Empty stub for IVarInvokeable.DoProcedure, to be implemented in descendents
Declaration: function DoProcedure(const V: tvardata; const Name: string;
const Arguments: TVarDataArray) : Boolean; Virtual
Visibility: public
85.24.6 TInvokeableVariantType.GetProperty
Synopsis: Empty stub for IVarInvokeable.GetProperty, to be implemented in descendents
Declaration: function GetProperty(var Dest: tvardata; const V: tvardata;
const Name: string) : Boolean; Virtual
Visibility: public
85.24.7 TInvokeableVariantType.SetProperty
Synopsis: Empty stub for IVarInvokeable.SetProperty, to be implemented in descendents
Declaration: function SetProperty(var V: tvardata; const Name: string;
const Value: tvardata) : Boolean; Virtual
Visibility: public
2142
CHAPTER 85. REFERENCE FOR UNIT ’VARIANTS’
85.25 TPublishableVariantType
85.25.1 Description
TPublishableVariantType implements the IVarInvokeable.GetProperty (2136) and IVarIn-
vokeable.SetProperty (2136) methods by getting or setting the published properties of the class in-
stance returned by the IVarInstanceReference interface it implements.
85.25.4 TPublishableVariantType.GetProperty
Synopsis: Read the property
Declaration: function GetProperty(var Dest: tvardata; const V: tvardata;
const Name: string) : Boolean; Override
Visibility: public
Description: GetProperty implements reading the property by looking for the property in the published prop-
erties of the instance returned by the IVarInstanceReference (2134) interface, and returning the value
as a variant.
See also: IVarInstanceReference (2134), IVarInvokeable.GetProperty (2136)
85.25.5 TPublishableVariantType.SetProperty
Synopsis: Write the property
Declaration: function SetProperty(var V: tvardata; const Name: string;
const Value: tvardata) : Boolean; Override
Visibility: public
Description: SetProperty implements writing the property by looking for the property in the published prop-
erties of the instance returned by the IVarInstanceReference (2134) interface, and setting the value
as a variant.
See also: IVarInstanceReference (2134), IVarInvokeable.SetProperty (2136)
2143
Chapter 86
Name Page
System 1331
86.2 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 (2161), 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 (2165) will then copy 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:
2144
CHAPTER 86. REFERENCE FOR UNIT ’VIDEO’
The color attribute can be logically or-ed with the blink attribute to produce a blinking character:
Atrr:=Attr or blink;
Interface
uses
video ;
Implementation
Var
W, P , I ,M : Word ;
begin
P : = ( ( X−1)+(Y−1) * ScreenWidth ) ;
M: = Length (S ) ;
I f P+M>ScreenWidth * ScreenHeight then
M: = ScreenWidth * ScreenHeight−P ;
For I :=1 to M do
VideoBuf ^ [ P+ I −1]:=Ord (S [ i ] ) + ( $07 shl 8 ) ;
end ;
end .
2145
CHAPTER 86. REFERENCE FOR UNIT ’VIDEO’
TVideoDriver = Record
InitDriver : Procedure;
DoneDriver : Procedure;
UpdateScreen : Procedure(Force : Boolean);
ClearScreen : Procedure;
SetVideoMode : Function (Const Mode : TVideoMode) : Boolean;
GetVideoModeCount : Function : Word;
GetVideoModeData : Function(Index : Word; Var Data : TVideoMode) : Boolean;
SetCursorPos : procedure (NewCursorX, NewCursorY: Word);
GetCursorType : function : Word;
SetCursorType : procedure (NewType: Word);
GetCapabilities : Function : Word;
end;
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 func-
tion, 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 array’s 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 sup-
ported, this function should not be implemented; the general routines will return 1. (for the
current mode)
2146
CHAPTER 86. REFERENCE FOR UNIT ’VIDEO’
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.
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 ;
2147
CHAPTER 86. REFERENCE FOR UNIT ’VIDEO’
end ;
Function Is Vi de oL og gi ng : Boolean ;
begin
I s V i de oL og gi ng : = Logging ;
end ;
Var
ColUpd , RowUpd : Array [ 0 . . 1 0 2 4 ] of I n t e g e r ;
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 ;
begin
I f Logging then
2148
CHAPTER 86. REFERENCE FOR UNIT ’VIDEO’
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 ( ) ;
Assign ( VideoLog , logFileName ) ;
Rewrite ( VideoLog ) ;
A c t i v e : = True ;
StartVideoLogging ;
end ;
Procedure LogDoneVideo ;
begin
StopVideoLogging ;
Close ( VideoLog ) ;
A c t i v e : = False ;
O l d V i d e o D r i v e r . DoneDriver ( ) ;
end ;
begin
I f Not A c t i v e then
LogFileName : = FileName ;
end ;
Initialization
GetVideoDriver ( OldVideoDriver ) ;
NewVideoDriver : = O l d V i d e o D r i v e r ;
NewVideoDriver . UpdateScreen : = @LogUpdateScreen ;
NewVideoDriver . I n i t D r i v e r : = @LogInitVideo ;
NewVideoDriver . DoneDriver : = @LogDoneVideo ;
LogFileName : = ' Video . l o g ' ;
Logging : = False ;
S e t V i d e o D r i v e r ( NewVideoDriver ) ;
end .
Blink = 128
Blink attribute
Blue = 1
2149
CHAPTER 86. REFERENCE FOR UNIT ’VIDEO’
Brown = 6
cpBlink = $0002
cpChangeCursor = $0020
cpChangeFont = $0008
cpChangeMode = $0010
cpColor = $0004
cpUnderLine = $0001
crBlock = 2
Block cursor
crHalfBlock = 3
crHidden = 0
Hide cursor
crUnderLine = 1
Underline cursor
Cyan = 3
DarkGray = 8
2150
CHAPTER 86. REFERENCE FOR UNIT ’VIDEO’
errOk = 0
No error
The ErrorHandler variable can be set to a custom-error handling function. It is set by default to
the DefaultErrorHandler (2156) function.
errVioBase = 1000
errVioInit = errVioBase + 1
errVioNoSuchMode = errVioBase + 3
errVioNotSupported = errVioBase + 2
FVMaxWidth = 240
Green = 2
iso_codepages is a set containing all code pages that use an ISO encoding.
LightBlue = 9
2151
CHAPTER 86. REFERENCE FOR UNIT ’VIDEO’
LightCyan = 11
LightGray = 7
LightGreen = 10
LightMagenta = 13
LightRed = 12
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
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
ScreenHeight : Word = 0
ScreenWidth : Word = 0
2152
CHAPTER 86. REFERENCE FOR UNIT ’VIDEO’
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
Yellow = 14
86.5.2 Types
PVideoBuf = ^TVideoBuf
PVideoCell = ^TVideoCell
PVideoMode = ^TVideoMode
The TErrorHandler function is used to register an own error handling function. It should be used
when installing a custom error handling function, and must return one of the above values.
Code should contain the error code for the error condition, and the Info parameter may contain
any data type specific to the error code passed to the function.
TErrorHandlerReturnValue = (errRetry,errAbort,errContinue)
Value Explanation
errAbort abort and return error code
errContinue abort without returning an errorcode.
errRetry retry the operation
2153
CHAPTER 86. REFERENCE FOR UNIT ’VIDEO’
TVideoCell = Word
TVideoCell describes one character on the screen. One of the bytes contains the color attribute
with which the character is drawn on the screen, and the other byte contains the ASCII code of the
character to be drawn. The exact position of the different bytes in the record is operating system
specific. On most little-endian systems, the high byte represents the color attribute, while the low-
byte represents the ASCII code of the character to be drawn.
86.5.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
CursorY : Word
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 Update-
Screen (2165) 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
2154
CHAPTER 86. REFERENCE FOR UNIT ’VIDEO’
VideoBuf : PVideoBuf
VideoBuf forms the heart of the Video unit: This variable represents the physical screen. Writing
to this array and calling UpdateScreen (2165) will write the actual characters to the screen.
VideoBufSize : LongInt
Visibility: default
Description: ClearScreen clears the entire screen, and calls UpdateScreen (2165) after that. This is done by
writing spaces to all character cells of the video buffer in the default color (lightgray on black, color
attribute \$07).
Errors: None.
Listing: ./videoex/ex3.pp
program t e s t v i d e o ;
Var
i : longint ;
k : TkeyEvent ;
begin
InitVideo ;
InitKeyboard ;
For I :=1 to 10 do
TextOut ( i , i , ' Press any key t o c l e a r screen ' ) ;
UpdateScreen ( f a l s e ) ;
K: = GetKeyEvent ;
ClearScreen ;
TextOut ( 1 , 1 , ' Cleared screen . Press any key t o end ' ) ;
UpdateScreen ( t r u e ) ;
K: = GetKeyEvent ;
DoneKeyBoard ;
DoneVideo ;
end .
2155
CHAPTER 86. REFERENCE FOR UNIT ’VIDEO’
86.6.2 DefaultErrorHandler
Synopsis: Default error handling routine.
86.6.3 DoneVideo
Synopsis: Disable video driver.
Errors: Normally none. If the driver reports an error, this is done through the ErrorCode variable.
See also: InitVideo (2161)
86.6.4 GetCapabilities
Synopsis: Get current driver capabilities.
Note that the video driver should not yet be initialized to use this function. It is a property of the
driver.
2156
CHAPTER 86. REFERENCE FOR UNIT ’VIDEO’
Errors: None.
See also: GetCursorType (2157), GetVideoDriver (2159)
Listing: ./videoex/ex4.pp
Program Example4 ;
{ Program t o demonstrate t h e G e t C a p a b i l i t i e s f u n c t i o n . }
Uses v i d e o ;
Var
W: Word ;
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 .
86.6.5 GetCursorType
Synopsis: Get screen cursor type
crHiddenHide cursor
crUnderLineUnderline cursor
crBlockBlock cursor
crHalfBlockHalf block cursor
2157
CHAPTER 86. REFERENCE FOR UNIT ’VIDEO’
Listing: ./videoex/ex5.pp
Program Example5 ;
Const
C u r s o r t y p es : Array [ crHidden . . c r H a l f B l o c k ] of s t r i n g =
( ' Hidden ' , ' UnderLine ' , ' Block ' , ' H a l f B l o c k ' ) ;
begin
InitVideo ;
InitKeyboard ;
TextOut ( 1 , 1 , ' Cursor t y p e : ' +CursorTypes [ GetCursorType ] ) ;
TextOut ( 1 , 2 , ' Press any key t o e x i t . ' ) ;
UpdateScreen ( False ) ;
GetKeyEvent ;
DoneKeyboard ;
DoneVideo ;
end .
86.6.6 GetLockScreenCount
Synopsis: Get the screen lock update count.
Declaration: function GetLockScreenCount : Integer
Visibility: default
Description: GetLockScreenCount returns the current lock level. When the lock level is zero, a call to
UpdateScreen (2165) will actually update the screen.
Errors: None.
See also: LockScreenUpdate (2162), UnlockScreenUpdate (2164), UpdateScreen (2165)
Listing: ./videoex/ex6.pp
Program Example6 ;
Var
I : Longint ;
S : String ;
begin
InitVideo ;
InitKeyboard ;
TextOut ( 1 , 1 , ' Press key t i l l new t e x t appears . ' ) ;
UpdateScreen ( False ) ;
Randomize ;
For I :=0 to Random(10)+1 do
LockScreenUpdate ;
2158
CHAPTER 86. REFERENCE FOR UNIT ’VIDEO’
I :=0;
While GetLockScreenCount <>0 do
begin
Inc ( I ) ;
Str ( I ,S ) ;
UnlockScreenUpdate ;
GetKeyEvent ;
TextOut ( 1 , 1 , ' UnLockScreenUpdate had t o be c a l l e d ' +S+ ' t i m e s ' ) ;
UpdateScreen ( False ) ;
end ;
TextOut ( 1 , 2 , ' Press any key t o end . ' ) ;
UpdateScreen ( False ) ;
GetKeyEvent ;
DoneKeyboard ;
DoneVideo ;
end .
86.6.7 GetVideoDriver
Synopsis: Get a copy of the current video driver.
Declaration: procedure GetVideoDriver(var Driver: TVideoDriver)
Visibility: default
Description: GetVideoDriver returns the currently active video driver record in Driver. It can be used to
clone the current video driver, or to override certain parts of it using the SetVideoDriver (2164) call.
Errors: None.
See also: SetVideoDriver (2164)
86.6.8 GetVideoMode
Synopsis: Return current video mode
Declaration: procedure GetVideoMode(var Mode: TVideoMode)
Visibility: default
Description: GetVideoMode returns the settings of the currently active video mode. The row,col fields
indicate the dimensions of the current video mode, and Color is true if the current video supports
colors.
See also: SetVideoMode (2164), GetVideoModeData (2161)
Listing: ./videoex/ex7.pp
Program Example7 ;
Var
M : TVideoMode ;
S : String ;
2159
CHAPTER 86. REFERENCE FOR UNIT ’VIDEO’
begin
InitVideo ;
InitKeyboard ;
GetVideoMode (M) ;
i f M. C o l o r then
TextOut ( 1 , 1 , ' C u r r e n t mode has c o l o r ' )
else
TextOut ( 1 , 1 , ' C u r r e n t mode does n o t have c o l o r ' ) ;
S t r (M. Row, S ) ;
TextOut ( 1 , 2 , ' Number o f rows : ' +S ) ;
S t r (M. Col , S ) ;
TextOut ( 1 , 3 , ' Number o f columns : ' +S ) ;
T e x t o u t ( 1 , 4 , ' Press any key t o e x i t . ' ) ;
UpdateScreen ( False ) ;
GetKeyEvent ;
DoneKeyboard ;
DoneVideo ;
end .
86.6.9 GetVideoModeCount
Synopsis: Get the number of video modes supported by the driver.
Declaration: function GetVideoModeCount : Word
Visibility: default
Description: GetVideoModeCount returns the number of video modes that the current driver supports. If the
driver does not support switching of modes, then 1 is returned.
This function can be used in conjunction with the GetVideoModeData (2161) function to retrieve
data for the supported video modes.
Errors: None.
Listing: ./videoex/ex8.pp
Program Example8 ;
Var
S : String ;
begin
S t r ( Index : 2 , S ) ;
inc ( Index ) ;
TextOut ( 1 , Index , ' Data f o r mode ' +S+ ' : ' );
i f M. C o l o r then
TextOut ( 1 9 , Index , ' color , ' )
else
2160
CHAPTER 86. REFERENCE FOR UNIT ’VIDEO’
Var
i , Count : I n t e g e r ;
m : TVideoMode ;
begin
InitVideo ;
InitKeyboard ;
Count : = GetVideoModeCount ;
For I :=1 to Count do
begin
GetVideoModeData ( I −1,M) ;
DumpMode(M, I −1);
end ;
TextOut ( 1 , Count +1 , ' Press any key t o e x i t ' ) ;
UpdateScreen ( False ) ;
GetKeyEvent ;
DoneKeyboard ;
DoneVideo ;
end .
86.6.10 GetVideoModeData
Synopsis: Get the specifications for a video mode
Declaration: function GetVideoModeData(Index: Word; var Data: TVideoMode) : Boolean
Visibility: default
Description: GetVideoModeData returns the characteristics of the Index-th video mode in Data. Index
is zero based, and has a maximum value of GetVideoModeCount-1. If the current driver does
not support setting of modes (GetVideoModeCount=1) and Index is zero, the current mode is
returned.
The function returns True if the mode data was retrieved successfully, False otherwise.
For an example, see GetVideoModeCount (2160).
Errors: In case Index has a wrong value, False is returned.
See also: GetVideoModeCount (2160), SetVideoMode (2164), GetVideoMode (2159)
86.6.11 InitVideo
Synopsis: Initialize video driver.
Declaration: procedure InitVideo
Visibility: default
Description: InitVideo Initializes the video subsystem. If the video system was already initialized, it does
nothing. After the driver has been initialized, the VideoBuf and OldVideoBuf pointers are
2161
CHAPTER 86. REFERENCE FOR UNIT ’VIDEO’
initialized, based on the ScreenWidth and ScreenHeight variables. When this is done, the
screen is cleared.
For an example, see most other functions.
Errors: if the driver fails to initialize, the ErrorCode variable is set.
See also: DoneVideo (2156)
86.6.12 LockScreenUpdate
Synopsis: Prevent further screen updates.
Declaration: procedure LockScreenUpdate
Visibility: default
Description: LockScreenUpdate increments the screen update lock count with one. As long as the screen
update lock count is not zero, UpdateScreen (2165) will not actually update the screen.
This function can be used to optimize screen updating: If a lot of writing on the screen needs to
be done (by possibly unknown functions), calling LockScreenUpdate before the drawing, and
UnlockScreenUpdate (2164) after the drawing, followed by a UpdateScreen (2165) call, all writing
will be shown on screen at once.
For an example, see GetLockScreenCount (2158).
Errors: None.
See also: UpdateScreen (2165), UnlockScreenUpdate (2164), GetLockScreenCount (2158)
86.6.13 SetCursorPos
Synopsis: Set write cursor position.
Declaration: procedure SetCursorPos(NewCursorX: Word; NewCursorY: Word)
Visibility: default
Description: SetCursorPos positions the cursor on the given position: Column NewCursorX and row NewCursorY.
The origin of the screen is the upper left corner, and has coordinates (0,0).
The current position is stored in the CursorX and CursorY variables.
Errors: None.
See also: SetCursorType (2163)
Listing: ./videoex/ex2.pp
program example2 ;
Var
P , PP,D : I n t e g e r ;
K : TKeyEvent ;
begin
2162
CHAPTER 86. REFERENCE FOR UNIT ’VIDEO’
begin
InitVideo ;
InitKeyBoard ;
P: = 0 ;
PP:= −1;
Repeat
I f PP<>−1 then
PutSquare (PP, ' ' ) ;
PutSquare ( P , ' # ' ) ;
SetCursorPos ( P Mod ScreenWidth , P div ScreenWidth ) ;
UpdateScreen ( False ) ;
PP: =P ;
Repeat
D: = 0 ;
K: = TranslateKeyEvent ( GetKeyEvent ) ;
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 .
86.6.14 SetCursorType
Synopsis: Set cursor type
Declaration: procedure SetCursorType(NewType: Word)
Visibility: default
crHiddenHide cursor
crUnderLineUnderline cursor
crBlockBlock cursor
crHalfBlockHalf block cursor
Errors: None.
See also: SetCursorPos (2162)
2163
CHAPTER 86. REFERENCE FOR UNIT ’VIDEO’
86.6.15 SetVideoDriver
Synopsis: Install a new video driver.
86.6.16 SetVideoMode
Synopsis: Set current video mode.
Declaration: function SetVideoMode(const Mode: TVideoMode) : Boolean
Visibility: default
Description: SetVideoMode sets the video mode to the mode specified in Mode:
If the call was successful, then the screen will have Col columns and Row rows, and will be display-
ing in color if Color is True.
The function returns True if the mode was set successfully, False otherwise.
Note that the video mode may not always be set. E.g. a console on Linux or a telnet session cannot
always set the mode. It is important to check the error value returned by this function if it was not
successful.
The mode can be set when the video driver has not yet been initialized (i.e. before InitVideo (2161)
was called) In that case, the video mode will be stored, and after the driver was initialized, an attempt
will be made to set the requested mode. Changing the video driver before the call to InitVideo
will clear the stored video mode.
To know which modes are valid, use the GetVideoModeCount (2160) and GetVideoModeData (2161)
functions. To retrieve the current video mode, use the GetVideoMode (2159) procedure.
Errors: If the specified mode cannot be set, then errVioNoSuchMode may be set in ErrorCode
See also: GetVideoModeCount (2160), GetVideoModeData (2161), GetVideoMode (2159)
86.6.17 UnlockScreenUpdate
Synopsis: Unlock screen update.
2164
CHAPTER 86. REFERENCE FOR UNIT ’VIDEO’
Description: UnlockScreenUpdate decrements the screen update lock count with one if it is larger than zero.
When the lock count reaches zero, the UpdateScreen (2165) will actually update the screen. No
screen update will be performed as long as the screen update lock count is nonzero. This mechanism
can be used to increase screen performance in case a lot of writing is done.
It is important to make sure that each call to LockScreenUpdate (2162) is matched by exactly one
call to UnlockScreenUpdate
For an example, see GetLockScreenCount (2158).
Errors: None.
See also: LockScreenUpdate (2162), GetLockScreenCount (2158), UpdateScreen (2165)
86.6.18 UpdateScreen
Synopsis: Update physical screen with internal screen image.
Declaration: procedure UpdateScreen(Force: Boolean)
Visibility: default
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 (2155)
86.7 TVideoDriver
TVideoDriver = record
InitDriver : procedure;
DoneDriver : procedure
;
UpdateScreen : procedure(Force: Boolean);
ClearScreen : procedure
;
SetVideoMode : function(const Mode: TVideoMode) : Boolean;
GetVideoModeCount
: function : Word;
GetVideoModeData : function(Index: Word; var
Data: TVideoMode) : Boolean;
SetCursorPos : procedure(NewCursorX
: Word; NewCursorY: Word);
GetCursorType : function : Word;
2165
CHAPTER 86. REFERENCE FOR UNIT ’VIDEO’
SetCursorType
: procedure(NewType: Word);
GetCapabilities : function : Word;
end
TVideoDriver record can be used to install a custom video driver, with the SetVideoDriver (2164)
call.
An explanation of all fields can be found there.
86.8 TVideoMode
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.
2166
Chapter 87
Name Page
System 1331
87.2 Overview
The wincrt unit provides some auxiliary routines for use with the graph (839) unit, namely keyboard
support. It has no connection with the crt (557) unit, nor with the Turbo-Pascal for Windows WinCrt
unit. As such, it should not be used by end users. Refer to the crt (557) unit instead.
lastmode : Word
Is supposed to contain the last used video mode, but is actually unused.
2167
CHAPTER 87. REFERENCE FOR UNIT ’WINCRT’
Visibility: default
Description: Delay stops program execution for the indicated number ms of milliseconds.
See also: sound (2168), nosound (2168)
87.4.2 keypressed
Synopsis: Check if a key was pressed.
Declaration: function keypressed : Boolean
Visibility: default
Description: KeyPressed returns True if the user pressed a key, or False if not. It does not wait for the user
to press a key.
See also: readkey (2168)
87.4.3 nosound
Synopsis: Stop the speaker
87.4.4 readkey
Synopsis: Read a key from the keyboard
Declaration: function readkey : Char
Visibility: default
Description: ReadKey reads a key from the keyboard, and returns the ASCII value of the key, or the scancode
of the key in case it is a special key.
The function waits until a key is pressed.
See also: KeyPressed (2168)
87.4.5 sound
Synopsis: Sound PC speaker
Declaration: procedure sound(hz: Word)
Visibility: default
Description: Sound sounds the PC speaker. It emits a tone with frequency Hz for 500 milliseconds. (the time
argument is required by the windows API)
See also: nosound (2168)
2168
CHAPTER 87. REFERENCE FOR UNIT ’WINCRT’
87.4.6 textmode
Synopsis: Set indicated text mode
2169
Chapter 88
Name Page
System 1331
88.2 Overview
This unit contains only one function: GetWindowsSpecialDir (2184). It is a simple pascal wrapper
around the shfolder.dll library, and is available under Windows only.
ID for the personal "Start Menu\Programs\Administrative tools" folder (In the user’s personal folder)
CSIDL_APPDATA = $001A
ID for the roaming "Application Data" folder (in the user’s 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)
2170
CHAPTER 88. REFERENCE FOR UNIT ’WINDIRS’
CSIDL_COMMON_APPDATA = $0023
ID for the common "Application Data" folder (Under "All users" folder)
CSIDL_COMMON_DESKTOPDIRECTORY = $0019
CSIDL_COMMON_DOCUMENTS = $002E
CSIDL_COMMON_FAVORITES = $001F
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
CSIDL_COMMON_STARTUP = $0018
ID for the public "Startup" folder (Under "All users\Start menu\Programs" folder)
CSIDL_COMMON_TEMPLATES = $002D
CSIDL_COMMON_VIDEO = $0037
ID for the common "Documents\My Video" folder (Under "All users" folder)
CSIDL_COOKIES = $0021
CSIDL_DESKTOPDIRECTORY = $0010
2171
CHAPTER 88. REFERENCE FOR UNIT ’WINDIRS’
CSIDL_FAVORITES = $0006
CSIDL_FLAG_CREATE = $8000
Flag to specify if the requested folder must be created if it didn’t exist yet.
CSIDL_FONTS = $0014
CSIDL_HISTORY = $0022
CSIDL_INTERNET_CACHE = $0020
ID for the "Temporary Internet Files" folder (in the user’s personal folder)
CSIDL_LOCAL_APPDATA = $001C
ID for the local "Application Data" folder (in the user’s personal folder)
CSIDL_MYMUSIC = $000D
ID for the "My Music" folder (in the user’s personal folder)
CSIDL_MYPICTURES = $0027
ID for the "My Pictures" folder (in the user’s personal folder)
CSIDL_MYVIDEO = $000E
ID for the "My Videos" folder (in the user’s personal folder)
CSIDL_NETHOOD = $0013
CSIDL_PERSONAL = $0005
ID for the "My Documents" folder (in the user’s personal folder)
CSIDL_PRINTHOOD = $001B
CSIDL_PROFILE = $0028
2172
CHAPTER 88. REFERENCE FOR UNIT ’WINDIRS’
CSIDL_PROFILES = $003E
CSIDL_PROGRAMS = $0002
CSIDL_PROGRAM_FILES = $0026
CSIDL_PROGRAM_FILES_COMMON = $002B
CSIDL_RECENT = $0008
CSIDL_SENDTO = $0009
ID for the "Send to" folder (in the user’s personal folder)
CSIDL_STARTMENU = $000B
ID for the "Start menu" folder (in the user’s personal folder)
CSIDL_STARTUP = $0007
ID for the "Startup" menu folder (in the user’s personal folder)
CSIDL_SYSTEM = $0025
CSIDL_TEMPLATES = $0015
CSIDL_WINDOWS = $0024
FOLDERID_AccountPictures : TGuid =
'{008CA0B1-55B4-4C56-B8A8-4DE4B299D3BE}'
FOLDERID_AddNewPrograms : TGuid =
'{DE61D971-5EBC-4F02-A3A9-6C82895E5C04}'
2173
CHAPTER 88. REFERENCE FOR UNIT ’WINDIRS’
FOLDERID_AdminTools : TGuid =
'{724EF170-A42D-4FEF-9F26-B60E846FBA4F}'
FOLDERID_AllAppMods : TGuid =
'{7AD67899-66AF-43BA-9156-6AAD42E6C596}'
FOLDERID_AppCaptures : TGuid =
'{EDC0FE71-98D8-4F4A-B920-C8DC133CB165}'
FOLDERID_AppDataDesktop : TGuid =
'{B2C5E279-7ADD-439F-B28C-C41FE1BBF672}'
FOLDERID_AppDataDocuments : TGuid =
'{7BE16610-1F7F-44AC-BFF0-83E15F2FFCA1}'
FOLDERID_AppDataFavorites : TGuid =
'{7CFBEFBC-DE1F-45AA-B843-A542AC536CC9}'
FOLDERID_AppDataProgramData : TGuid =
'{559D40A3-A036-40FA-AF61-84CB430A4D34}'
FOLDERID_ApplicationShortcuts : TGuid =
'{A3918781-E5F2-4890-B3D9-A7E54332328C}'
FOLDERID_AppsFolder : TGuid =
'{1E87508D-89C2-42F0-8A7E-645A0F50CA58}'
FOLDERID_AppUpdates : TGuid =
'{A305CE99-F527-492B-8B1A-7E76FA98D6E4}'
FOLDERID_CameraRoll : TGuid =
'{AB5FB87B-7CE2-4F83-915D-550846C9537B}'
FOLDERID_CameraRollLibrary : TGuid =
'{2B20DF75-1EDA-4039-8097-38798227D5B7}'
FOLDERID_CDBurning : TGuid =
'{9E52AB10-F80D-49DF-ACB8-4330F5687855}'
FOLDERID_ChangeRemovePrograms : TGuid =
'{DF7266AC-9274-4867-8D55-3BD661DE872D}'
2174
CHAPTER 88. REFERENCE FOR UNIT ’WINDIRS’
FOLDERID_CommonAdminTools : TGuid =
'{D0384E7D-BAC3-4797-8F14-CBA229B392B5}'
FOLDERID_CommonOEMLinks : TGuid =
'{C1BAE2D0-10DF-4334-BEDD-7AA20B227A9D}'
FOLDERID_CommonPrograms : TGuid =
'{0139D44E-6AFE-49F2-8690-3DAFCAE6FFB8}'
FOLDERID_CommonStartMenu : TGuid =
'{A4115719-D62E-491D-AA7C-E74B8BE3B067}'
FOLDERID_CommonStartMenuPlaces : TGuid =
'{A440879F-87A0-4F7D-B700-0207B966194A}'
FOLDERID_CommonStartup : TGuid =
'{82A5EA35-D9CD-47C5-9629-E15D2F714E6E}'
FOLDERID_CommonTemplates : TGuid =
'{B94237E7-57AC-4347-9151-B08C6C32D1F7}'
FOLDERID_ComputerFolder : TGuid =
'{0AC0837C-BBF8-452A-850D-79D08E667CA7}'
FOLDERID_ConflictFolder : TGuid =
'{4BFEFB45-347D-4006-A5BE-AC0CB0567192}'
FOLDERID_ConnectionsFolder : TGuid =
'{6F0CD92B-2E97-45D1-88FF-B0D186B8DEDD}'
FOLDERID_Contacts : TGuid =
'{56784854-C6CB-462B-8169-88E350ACB882}'
FOLDERID_ControlPanelFolder : TGuid =
'{82A74AEB-AEB4-465C-A014-D097EE346D63}'
FOLDERID_Cookies : TGuid =
'{2B0F765D-C0E9-4171-908E-08A611B84FF6}'
FOLDERID_CurrentAppMods : TGuid =
'{3DB40B20-2A30-4DBE-917E-771DD21DD099}'
2175
CHAPTER 88. REFERENCE FOR UNIT ’WINDIRS’
FOLDERID_Desktop : TGuid =
'{B4BFCC3A-DB2C-424C-B029-7FE99A87C641}'
FOLDERID_DevelopmentFiles : TGuid =
'{DBE8E08E-3053-4BBC-B183-2A7B2B191E59}'
FOLDERID_Device : TGuid =
'{1C2AC1DC-4358-4B6C-9733-AF21156576F0}'
FOLDERID_DeviceMetadataStore : TGuid =
'{5CE4A5E9-E4EB-479D-B89F-130C02886155}'
FOLDERID_Documents : TGuid =
'{FDD39AD0-238F-46AF-ADB4-6C85480369C7}'
FOLDERID_DocumentsLibrary : TGuid =
'{7B0DB17D-9CD2-4A93-9733-46CC89022E7C}'
FOLDERID_Downloads : TGuid =
'{374DE290-123F-4565-9164-39C4925E467B}'
FOLDERID_Favorites : TGuid =
'{1777F761-68AD-4D8A-87BD-30B759FA33DD}'
FOLDERID_GameTasks : TGuid =
'{054FAE61-4DD8-4787-80B6-090220C4B700}'
FOLDERID_History : TGuid =
'{D9DC8A3B-B784-432E-A781-5A1130A75963}'
FOLDERID_HomeGroup : TGuid =
'{52528A6B-B9E3-4ADD-B60D-588C2DBA842D}'
FOLDERID_HomeGroupCurrentUser : TGuid =
'{9B74B6A3-0DFD-4F11-9E78-5F7800F2E772}'
2176
CHAPTER 88. REFERENCE FOR UNIT ’WINDIRS’
FOLDERID_ImplicitAppShortcuts : TGuid =
'{BCB5256F-79F6-4CEE-B725-DC34E402FD46}'
FOLDERID_InternetCache : TGuid =
'{352481E8-33BE-4251-BA85-6007CAEDCF9D}'
FOLDERID_InternetFolder : TGuid =
'{4D9F7874-4E0C-4904-967B-40B0D20C3E4B}'
FOLDERID_Libraries : TGuid =
'{1B3EA5DC-B587-4786-B4EF-BD1DC332AEAE}'
FOLDERID_LocalAppData : TGuid =
'{F1B32785-6FBA-4FCF-9D55-7B8E7F157091}'
FOLDERID_LocalAppDataLow : TGuid =
'{A520A1A4-1780-4FF6-BD18-167343C5AF16}'
FOLDERID_LocalDocuments : TGuid =
'{F42EE2D3-909F-4907-8871-4C22FC0BF756}'
FOLDERID_LocalDownloads : TGuid =
'{7D83EE9B-2244-4E70-B1F5-5393042AF1E4}'
FOLDERID_LocalizedResourcesDir : TGuid =
'{2A00375E-224C-49DE-B8D1-440DF7EF3DDC}'
FOLDERID_LocalMusic : TGuid =
'{A0C69A99-21C8-4671-8703-7934162FCF1D}'
FOLDERID_LocalPictures : TGuid =
'{0DDD015D-B06C-45D5-8C4C-F59713854639}'
FOLDERID_LocalVideos : TGuid =
'{35286A68-3C57-41A1-BBB1-0EAE73D76C95}'
2177
CHAPTER 88. REFERENCE FOR UNIT ’WINDIRS’
FOLDERID_MusicLibrary : TGuid =
'{2112AB0A-C86A-4FFE-A368-0DE96E47012E}'
FOLDERID_NetHood : TGuid =
'{C5ABBF53-E17F-4121-8900-86626FC2C973}'
FOLDERID_NetworkFolder : TGuid =
'{D20BEEC4-5CA8-4905-AE3B-BF251EA09B53}'
FOLDERID_Objects3D : TGuid =
'{31C0DD25-9439-4F12-BF41-7FF4EDA38722}'
FOLDERID_OneDrive : TGuid =
'{A52BBA46-E9E1-435F-B3D9-28DAA648C0F6}'
FOLDERID_OriginalImages : TGuid =
'{2C36C0AA-5812-4B87-BFD0-4CD0DFB19B39}'
FOLDERID_PhotoAlbums : TGuid =
'{69D2CF90-FC33-4FB7-9A0C-EBB0F0FCB43C}'
FOLDERID_Pictures : TGuid =
'{33E28130-4E1E-4676-835A-98395C3BC3BB}'
FOLDERID_PicturesLibrary : TGuid =
'{A990AE9F-A03B-4E80-94BC-9912D7504104}'
FOLDERID_Playlists : TGuid =
'{DE92C1C7-837F-4F69-A3BB-86E631204A23}'
FOLDERID_PrintersFolder : TGuid =
'{76FC4E2D-D6AD-4519-A663-37BD56068185}'
FOLDERID_PrintHood : TGuid =
'{9274BD8D-CFD1-41C3-B35E-B13F55A758F4}'
FOLDERID_Profile : TGuid =
'{5E6C858F-0E22-4760-9AFE-EA3317B67173}'
FOLDERID_ProgramData : TGuid =
'{62AB5D82-FDC1-4DC3-A9DD-070D1D495D97}'
2178
CHAPTER 88. REFERENCE FOR UNIT ’WINDIRS’
FOLDERID_ProgramFiles : TGuid =
'{905E63B6-C1BF-494E-B29C-65B732D3D21A}'
FOLDERID_ProgramFilesCommon : TGuid =
'{F7F1ED05-9F6D-47A2-AAAE-29D317C6F066}'
FOLDERID_ProgramFilesCommonX64 : TGuid =
'{6365D5A7-0F0D-45E5-87F6-0DA56B6A4F7D}'
FOLDERID_ProgramFilesCommonX86 : TGuid =
'{DE974D24-D9C6-4D3E-BF91-F4455120B917}'
FOLDERID_ProgramFilesX64 : TGuid =
'{6D809377-6AF0-444B-8957-A3773F02200E}'
FOLDERID_ProgramFilesX86 : TGuid =
'{7C5A40EF-A0FB-4BFC-874A-C0F2E0B9FA8E}'
FOLDERID_Programs : TGuid =
'{A77F5D77-2E2B-44C3-A6A2-ABA601054A51}'
FOLDERID_Public : TGuid =
'{DFDF76A2-C82A-4D63-906A-5644AC457385}'
FOLDERID_PublicDesktop : TGuid =
'{C4AA340D-F20F-4863-AFEF-F87EF2E6BA25}'
FOLDERID_PublicDocuments : TGuid =
'{ED4824AF-DCE4-45A8-81E2-FC7965083634}'
FOLDERID_PublicDownloads : TGuid =
'{3D644C9B-1FB8-4F30-9B45-F670235F79C0}'
FOLDERID_PublicGameTasks : TGuid =
'{DEBF2536-E1A8-4C59-B6A2-414586476AEA}'
FOLDERID_PublicLibraries : TGuid =
'{48DAF80B-E6CF-4F4E-B800-0E69D84EE384}'
FOLDERID_PublicMusic : TGuid =
'{3214FAB5-9757-4298-BB61-92A9DEAA44FF}'
2179
CHAPTER 88. REFERENCE FOR UNIT ’WINDIRS’
FOLDERID_PublicPictures : TGuid =
'{B6EBFB86-6907-413C-9AF7-4FC2ABF07CC5}'
FOLDERID_PublicRingtones : TGuid =
'{E555AB60-153B-4D17-9F04-A5FE99FC15EC}'
FOLDERID_PublicUserTiles : TGuid =
'{0482AF6C-08F1-4C34-8C90-E17EC98B1E17}'
FOLDERID_PublicVideos : TGuid =
'{2400183A-6185-49FB-A2D8-4A392A602BA3}'
FOLDERID_QuickLaunch : TGuid =
'{52A4F021-7B75-48A9-9F6B-4B87A210BC8F}'
FOLDERID_Recent : TGuid =
'{AE50C081-EBD2-438A-8655-8A092E34987A}'
FOLDERID_RecordedCalls : TGuid =
'{2F8B40C2-83ED-48EE-B383-A1F157EC6F9A}'
FOLDERID_RecordedTVLibrary : TGuid =
'{1A6FDBA2-F42D-4358-A798-B74D745926C5}'
FOLDERID_RecycleBinFolder : TGuid =
'{B7534046-3ECB-4C18-BE4E-64CD4CB7D6AC}'
FOLDERID_ResourceDir : TGuid =
'{8AD10C31-2ADB-4296-A8F7-E4701232C972}'
FOLDERID_RetailDemo : TGuid =
'{12D4C69E-24AD-4923-BE19-31321C43A767}'
FOLDERID_Ringtones : TGuid =
'{C870044B-F49E-4126-A9C3-B52A1FF411E8}'
FOLDERID_RoamedTileImages : TGuid =
'{AAA8D5A5-F1D6-4259-BAA8-78E7EF60835E}'
FOLDERID_RoamingAppData : TGuid =
'{3EB685DB-65F9-4CF6-A03A-E3EF65729F3D}'
2180
CHAPTER 88. REFERENCE FOR UNIT ’WINDIRS’
FOLDERID_RoamingTiles : TGuid =
'{00BCFC5A-ED94-4E48-96A1-3F6217F21990}'
FOLDERID_SampleMusic : TGuid =
'{B250C668-F57D-4EE1-A63C-290EE7D1AA1F}'
FOLDERID_SamplePictures : TGuid =
'{C4900540-2379-4C75-844B-64E6FAF8716B}'
FOLDERID_SamplePlaylists : TGuid =
'{15CA69B3-30EE-49C1-ACE1-6B5EC372AFB5}'
FOLDERID_SampleVideos : TGuid =
'{859EAD94-2E85-48AD-A71A-0969CB56A6CD}'
FOLDERID_SavedGames : TGuid =
'{4C5C32FF-BB9D-43B0-B5B4-2D72E54EAAA4}'
FOLDERID_SavedPictures : TGuid =
'{3B193882-D3AD-4EAB-965A-69829D1FB59F}'
FOLDERID_SavedPicturesLibrary : TGuid =
'{E25B5812-BE88-4BD9-94B0-29233477B6C3}'
FOLDERID_SavedSearches : TGuid =
'{7D1D3A04-DEBB-4115-95CF-2F29DA2920DA}'
FOLDERID_Screenshots : TGuid =
'{B7BEDE81-DF94-4682-A7D8-57A52620B86F}'
FOLDERID_SearchHistory : TGuid =
'{0D4C3DB6-03A3-462F-A0E6-08924C41B5D4}'
FOLDERID_SearchHome : TGuid =
'{190337D1-B8CA-4121-A639-6D472D16972A}'
FOLDERID_SearchTemplates : TGuid =
'{7E636BFE-DFA9-4D5E-B456-D7B39851D8A9}'
FOLDERID_SEARCH_CSC : TGuid =
'{EE32E446-31CA-4ABA-814F-A5EBD2FD6D5E}'
2181
CHAPTER 88. REFERENCE FOR UNIT ’WINDIRS’
FOLDERID_SEARCH_MAPI : TGuid =
'{98EC0E18-2098-4D44-8644-66979315A281}'
FOLDERID_SendTo : TGuid =
'{8983036C-27C0-404B-8F08-102D10DCFD74}'
FOLDERID_SidebarDefaultParts : TGuid =
'{7B396E54-9EC5-4300-BE0A-2482EBAE1A26}'
FOLDERID_SidebarParts : TGuid =
'{A75D362E-50FC-4FB7-AC2C-A8BEAA314493}'
FOLDERID_SkyDrive : TGuid =
'{A52BBA46-E9E1-435F-B3D9-28DAA648C0F6}'
FOLDERID_SkyDriveCameraRoll : TGuid =
'{767E6811-49CB-4273-87C2-20F355E1085B}'
FOLDERID_SkyDriveDocuments : TGuid =
'{24D89E24-2F19-4534-9DDE-6A6671FBB8FE}'
FOLDERID_SkyDriveMusic : TGuid =
'{C3F2459E-80D6-45DC-BFEF-1F769F2BE730}'
FOLDERID_SkyDrivePictures : TGuid =
'{339719B5-8C47-4894-94C2-D8F77ADD44A6}'
FOLDERID_StartMenu : TGuid =
'{625B53C3-AB48-4EC1-BA1F-A1EF4146FC19}'
FOLDERID_StartMenuAllPrograms : TGuid =
'{F26305EF-6948-40B9-B255-81453D09C785}'
FOLDERID_Startup : TGuid =
'{B97D20BB-F46A-4C97-BA10-5E3608430854}'
FOLDERID_SyncManagerFolder : TGuid =
'{43668BF8-C14E-49B2-97C9-747784D784B7}'
FOLDERID_SyncResultsFolder : TGuid =
'{289A9A43-BE44-4057-A41B-587A76D7E7F9}'
2182
CHAPTER 88. REFERENCE FOR UNIT ’WINDIRS’
FOLDERID_SyncSetupFolder : TGuid =
'{0F214138-B1D3-4A90-BBA9-27CBC0C5389A}'
FOLDERID_System : TGuid =
'{1AC14E77-02E7-4E5D-B744-2EB1AE5198B7}'
FOLDERID_SystemX86 : TGuid =
'{D65231B0-B2F1-4857-A4CE-A8E7C6EA7D27}'
FOLDERID_Templates : TGuid =
'{A63293E8-664E-48DB-A079-DF759E0509F7}'
FOLDERID_UserPinned : TGuid =
'{9E3995AB-1F9C-4F13-B827-48B24B6C7174}'
FOLDERID_UserProfiles : TGuid =
'{0762D272-C50A-4BB0-A382-697DCD729B80}'
FOLDERID_UserProgramFiles : TGuid =
'{5CD7AEE2-2219-4A67-B85D-6C9CE15660CB}'
FOLDERID_UserProgramFilesCommon : TGuid =
'{BCBD3057-CA5C-4622-B42D-BC56DB0AE516}'
FOLDERID_UsersFiles : TGuid =
'{F3CE0F7C-4901-4ACC-8648-D5D44B04EF8F}'
FOLDERID_UsersLibraries : TGuid =
'{A302545D-DEFF-464B-ABE8-61C8648D939B}'
FOLDERID_Videos : TGuid =
'{18989B1D-99B5-455B-841C-AB7C74E4DDFC}'
FOLDERID_VideosLibrary : TGuid =
'{491E922F-5643-4AF4-A7EB-4E7A138D8174}'
FOLDERID_Windows : TGuid =
'{F38BF404-1D43-42F2-9305-67DE0B28FC23}'
KF_FLAG_CREATE = DWORD($8000)
KF_FLAG_DEFAULT = DWORD(0)
2183
CHAPTER 88. REFERENCE FOR UNIT ’WINDIRS’
88.4.2 ConvertFOLDERIDtoCSIDL
Declaration: function ConvertFOLDERIDtoCSIDL(const FOLDERID: TGuid;
out CSIDL: Integer) : Boolean
Visibility: default
88.4.3 GetWindowsSpecialDir
Synopsis: Get the location of a special directory.
Visibility: default
Description: GetWindowsSpecialDir can be used to to get the path of special folders on the Windows
system. The locations are identified using one of the CSIDL_* constants. If the ID of a location is
or-ed with the CSIDL_FLAG_CREATE constant, then the directory will be created if it didn’t exist
yet (and the user has sufficient rights to do so).
88.4.4 GetWindowsSpecialDirUnicode
Declaration: function GetWindowsSpecialDirUnicode(ID: Integer;
CreateIfNotExists: Boolean)
: UnicodeString
function GetWindowsSpecialDirUnicode(const GUID: TGuid;
CreateIfNotExists: Boolean)
: UnicodeString
Visibility: default
88.4.5 GetWindowsSystemDirectory
Declaration: function GetWindowsSystemDirectory : string
Visibility: default
2184
CHAPTER 88. REFERENCE FOR UNIT ’WINDIRS’
88.4.6 GetWindowsSystemDirectoryUnicode
Declaration: function GetWindowsSystemDirectoryUnicode : UnicodeString
Visibility: default
2185
Chapter 89
Name Page
BaseUnix 140
System 1331
89.2 Overview
The x86 unit contains some of the routines that were present in the 1.0.X Linux unit, and which were
Intel (PC) architecture 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.
2186
CHAPTER 89. REFERENCE FOR UNIT ’X86’
89.3.2 fpIoPL
Synopsis: Set I/O privilege level
89.3.3 ReadPort
Synopsis: Read data from a PC port
Declaration: procedure ReadPort(Port: LongInt; var Value: Byte)
procedure ReadPort(Port: LongInt; var Value: LongInt)
procedure ReadPort(Port: LongInt; var Value: Word)
Visibility: default
Description: ReadPort reads one Byte, Word or Longint from port Port into Value.
Note that you need permission to read a port. This permission can be set by the root user with the
FpIOPerm (2186) call.
Errors: In case of an error (not enough permissions read this port), runtime 216 (Access Violation) will
occur.
See also: FpIOPerm (2186), ReadPortB (2187), ReadPortW (2188), ReadPortL (2188), WritePort (2188),
WritePortB (2189), WritePortL (2189), WritePortW (2189)
89.3.4 ReadPortB
Synopsis: Read bytes from a PC port
Declaration: function ReadPortB(Port: LongInt) : Byte
procedure ReadPortB(Port: LongInt; var Buf; Count: LongInt)
Visibility: default
Description: The procedural form of ReadPortB reads Count bytes from port Port and stores them in Buf.
There must be enough memory allocated at Buf to store Count bytes.
The functional form of ReadPortB reads 1 byte from port B and returns the byte that was read.
Note that you need permission to read a port. This permission can be set by the root user with the
FpIOPerm (2186) call.
Errors: In case of an error (not enough permissions read this port), runtime 216 (Access Violation) will
occur.
See also: FpIOPerm (2186), ReadPort (2187), ReadPortW (2188), ReadPortL (2188), WritePort (2188), WritePortB
(2189), WritePortL (2189), WritePortW (2189)
2187
CHAPTER 89. REFERENCE FOR UNIT ’X86’
89.3.5 ReadPortL
Synopsis: Read longints from a PC port
Errors: In case of an error (not enough permissions read this port), runtime 216 (Access Violation) will
occur.
See also: FpIOPerm (2186), ReadPort (2187), ReadPortW (2188), ReadPortB (2187), WritePort (2188), WritePortB
(2189), WritePortL (2189), WritePortW (2189)
89.3.6 ReadPortW
Synopsis: Read Words from a PC port
Declaration: function ReadPortW(Port: LongInt) : Word
procedure ReadPortW(Port: LongInt; var Buf; Count: LongInt)
Visibility: default
Description: The procedural form of ReadPortW reads Count words from port Port and stores them in Buf.
There must be enough memory allocated at Buf to store Count words.
The functional form of ReadPortW reads 1 word from port B and returns the word that was read.
Note that you need permission to read a port. This permission can be set by the root user with the
FpIOPerm (2186) call.
Errors: In case of an error (not enough permissions read this port), runtime 216 (Access Violation) will
occur.
See also: FpIOPerm (2186), ReadPort (2187), ReadPortB (2187), ReadPortL (2188), WritePort (2188), WritePortB
(2189), WritePortL (2189), WritePortW (2189)
89.3.7 WritePort
Synopsis: Write data to PC port
Declaration: procedure WritePort(Port: LongInt; Value: Byte)
procedure WritePort(Port: LongInt; Value: LongInt)
procedure WritePort(Port: LongInt; Value: Word)
Visibility: default
Description: WritePort writes Value – 1 byte, Word or longint – to port Port.
Remark You need permission to write to a port. This permission can be set with root permission with the
FpIOPerm (2186) call.
2188
CHAPTER 89. REFERENCE FOR UNIT ’X86’
Errors: In case of an error (not enough permissions to write to this port), runtime 216 (Access Violation) will
occur.
See also: FpIOPerm (2186), WritePortB (2189), WritePortL (2189), WritePortW (2189), ReadPortB (2187),
ReadPortL (2188), ReadPortW (2188)
89.3.8 WritePortB
Synopsis: Write byte to PC port
Declaration: procedure WritePortB(Port: LongInt; Value: Byte)
procedure WritePortB(Port: LongInt; var Buf; Count: LongInt)
Visibility: default
Description: The 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 (2186) call.
Errors: In case of an error (not enough permissions to write to this port), runtime 216 (Access Violation) will
occur.
See also: FpIOPerm (2186), WritePort (2188), WritePortL (2189), WritePortW (2189), ReadPortB (2187),
ReadPortL (2188), ReadPortW (2188)
89.3.9 WritePortl
Synopsis: Write longint to PC port.
Declaration: procedure WritePortL(Port: LongInt; Value: LongInt)
procedure WritePortl(Port: LongInt; var Buf; Count: LongInt)
Visibility: default
Description: The 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 (2186) call.
Errors: In case of an error (not enough permissions to write to this port), runtime 216 (Access Violation) will
occur.
See also: FpIOPerm (2186), WritePort (2188), WritePortB (2189), WritePortW (2189), ReadPortB (2187),
ReadPortL (2188), ReadPortW (2188)
89.3.10 WritePortW
Synopsis: Write Word to PC port
2189
CHAPTER 89. REFERENCE FOR UNIT ’X86’
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 (2186) call.
Errors: In case of an error (not enough permissions to write to this port), runtime 216 (Access Violation) will
occur.
See also: FpIOPerm (2186), WritePort (2188), WritePortL (2189), WritePortB (2189), ReadPortB (2187),
ReadPortL (2188), ReadPortW (2188)
2190