-
Notifications
You must be signed in to change notification settings - Fork 0
/
utils.pas
106 lines (91 loc) · 3.15 KB
/
utils.pas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
{ --------------------------------------------------------------------------
godaemon
Utility functions unit
Copyright (c) Michael Nixon 2015.
Please see the LICENSE file for licensing information.
-------------------------------------------------------------------------- }
{ --------------------------------------------------------------------------
-------------------------------------------------------------------------- }
unit utils;
interface
uses baseunix, unix, unixutil, sockets, sysutils, classes, logger, lsignal;
function strtok(s, sep: string; var index: integer; quoted: boolean; var output: string): boolean;
function StringIsInteger(s: ansistring): boolean;
{ --------------------------------------------------------------------------
-------------------------------------------------------------------------- }
implementation
uses btime, settings, strutils, process, email;
{ ---------------------------------------------------------------------------
Check if the string <s> is an integer.
If the string only contains the numbers 0..9, TRUE is returned. Otherwise
FALSE will be returned.
--------------------------------------------------------------------------- }
function StringIsInteger(s: ansistring): boolean;
var
i: longint;
begin
result := false;
for i := 1 to length(s) do begin
if not (char(s[i]) in ['0'..'9']) then begin
exit;
end;
end;
result := true;
end;
{ ----------------------------------------------------------------------------
String tokeniser. Returns the next token from the string. <start> is modified
and always points to the next character to be read, and will > length(s) if
there are no more tokens. Blank tokens are permitted. <quoted> if true will
allow strtok to interpret quotes " " to allow spaces inside tokens.
WARNING: Unsafe! Does not limit length of returned string.
Boolean result: True = more tokens available, False = End reached.
---------------------------------------------------------------------------- }
function strtok(s, sep: string; var index: integer; quoted: boolean; var output: string): boolean;
var
done, inquote: boolean;
start: integer;
begin
inquote := false;
if index > length(s) then begin
{ Illegal start - no tokens }
result := false;
exit;
end;
{ Loop past any whitespace at the beginning. This is required because when a
token is found the index points at whitespace. }
repeat
done := true;
if s[index] = sep then begin
inc(index);
done := false;
end;
if index > length(s) then begin
{ End of string }
result := false;
exit;
end;
until done;
start := index;
done := false;
repeat
if index > length(s) then begin
{ Can't possibly be more tokens }
done := true;
end else begin
if quoted then begin
if s[index] = #34 then begin
if inquote then inquote := false else inquote := true;
end;
end;
if not inquote then begin
if s[index] = sep then begin
done := true;
end;
end;
end;
inc(index);
until done;
output := copy(s, start, index - start - 1);
result := true;
end;
end.