Rev 733 | Rev 740 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
733 | daniel-mar | 1 | unit VTSFUNCS; |
2 | |||
3 | (************************************************) |
||
4 | (* VTSFUNCS.PAS *) |
||
5 | (* Author: Daniel Marschall *) |
||
739 | daniel-mar | 6 | (* Revision: 2022-02-14 *) |
733 | daniel-mar | 7 | (* License: Apache 2.0 *) |
8 | (* This file contains: *) |
||
9 | (* - Various functions *) |
||
10 | (************************************************) |
||
11 | |||
12 | interface |
||
13 | |||
739 | daniel-mar | 14 | function Max(a, b: integer): integer; |
15 | function Min(a, b: integer): integer; |
||
16 | |||
733 | daniel-mar | 17 | function CompareEqualLengthString(a, b: string): integer; |
18 | function CompareNumericString(a, b: string): integer; |
||
739 | daniel-mar | 19 | |
733 | daniel-mar | 20 | procedure Beep; |
739 | daniel-mar | 21 | |
733 | daniel-mar | 22 | function Trim(s: string): string; |
23 | function ZeroPad(i: LongInt; n: integer): string; |
||
739 | daniel-mar | 24 | function LeftPadStr(s: string; n: integer; ch: char): string; |
25 | function RightPadStr(s: string; n: integer; ch: char): string; |
||
26 | |||
27 | function DeleteFile(filename: string): boolean; |
||
733 | daniel-mar | 28 | function FileExists(filename: string): boolean; |
739 | daniel-mar | 29 | |
30 | function IsPositiveInteger(s: string): boolean; |
||
733 | daniel-mar | 31 | function StrToInt(s: string): Integer; |
32 | function IntToStr(Value: Integer): string; |
||
33 | |||
34 | implementation |
||
35 | |||
36 | uses |
||
37 | Crt; |
||
38 | |||
739 | daniel-mar | 39 | function Max(a, b: integer): integer; |
40 | begin |
||
41 | if a > b then |
||
42 | Max := a |
||
43 | else |
||
44 | Max := b; |
||
45 | end; |
||
46 | |||
47 | function Min(a, b: integer): integer; |
||
48 | begin |
||
49 | if a < b then |
||
50 | Min := a |
||
51 | else |
||
52 | Min := b; |
||
53 | end; |
||
54 | |||
733 | daniel-mar | 55 | function CompareEqualLengthString(a, b: string): integer; |
56 | var |
||
57 | ao, bo, i: integer; |
||
58 | begin |
||
59 | CompareEqualLengthString := 0; |
||
60 | for i := 1 to Length(a) do |
||
61 | begin |
||
62 | ao := Ord(a[i]); |
||
63 | bo := Ord(b[i]); |
||
64 | if ao > bo then |
||
65 | begin |
||
66 | CompareEqualLengthString := 1; |
||
67 | break; |
||
68 | end; |
||
69 | if ao < bo then |
||
70 | begin |
||
71 | CompareEqualLengthString := -1; |
||
72 | break; |
||
73 | end; |
||
74 | end; |
||
75 | end; |
||
76 | |||
77 | function CompareNumericString(a, b: string): integer; |
||
78 | var |
||
739 | daniel-mar | 79 | EqualLength: integer; |
733 | daniel-mar | 80 | begin |
739 | daniel-mar | 81 | EqualLength := Max(Length(a), Length(b)); |
82 | a := LeftPadStr(a, EqualLength, '0'); |
||
83 | b := LeftPadStr(b, EqualLength, '0'); |
||
84 | CompareNumericString := CompareEqualLengthString(a, b); |
||
733 | daniel-mar | 85 | end; |
86 | |||
87 | procedure Beep; |
||
88 | begin |
||
89 | Sound(220); (*220Hz*) |
||
90 | Delay(200); (*200ms*) |
||
91 | NoSound; |
||
92 | end; |
||
93 | |||
94 | function Trim(s: string): string; |
||
95 | begin |
||
96 | while Length(s) > 0 do |
||
97 | begin |
||
98 | if s[1] in [#9,#10,#13,' '] then |
||
99 | Delete(s,1,1) |
||
100 | else |
||
101 | break; |
||
102 | end; |
||
103 | while Length(s) > 0 do |
||
104 | begin |
||
105 | if s[Length(s)] in [#9,#10,#13,' '] then |
||
106 | Delete(s,Length(s),1) |
||
107 | else |
||
108 | break; |
||
109 | end; |
||
110 | Trim := s; |
||
111 | end; |
||
112 | |||
739 | daniel-mar | 113 | function ZeroPad(i: LongInt; n: integer): string; |
733 | daniel-mar | 114 | var |
739 | daniel-mar | 115 | s: string; |
733 | daniel-mar | 116 | begin |
739 | daniel-mar | 117 | s := IntToStr(i); |
118 | ZeroPad := LeftPadStr(s, n, '0'); |
||
119 | end; |
||
733 | daniel-mar | 120 | |
739 | daniel-mar | 121 | function LeftPadStr(s: string; n: integer; ch: char): string; |
122 | begin |
||
123 | while Length(s) < n do |
||
733 | daniel-mar | 124 | begin |
739 | daniel-mar | 125 | s := ch + s; |
733 | daniel-mar | 126 | end; |
739 | daniel-mar | 127 | LeftPadStr := s; |
733 | daniel-mar | 128 | end; |
129 | |||
739 | daniel-mar | 130 | function RightPadStr(s: string; n: integer; ch: char): string; |
733 | daniel-mar | 131 | begin |
132 | while Length(s) < n do |
||
133 | begin |
||
739 | daniel-mar | 134 | s := s + ch; |
733 | daniel-mar | 135 | end; |
739 | daniel-mar | 136 | RightPadStr := s; |
733 | daniel-mar | 137 | end; |
138 | |||
739 | daniel-mar | 139 | function DeleteFile(filename: string): boolean; |
733 | daniel-mar | 140 | var |
739 | daniel-mar | 141 | F: file; |
142 | Ch: Char; |
||
733 | daniel-mar | 143 | begin |
739 | daniel-mar | 144 | Assign(F, filename); |
145 | {$I-} |
||
146 | Reset(F); |
||
147 | {$I+} |
||
148 | if IOResult <> 0 then |
||
149 | begin |
||
150 | DeleteFile := false; (* cannot find file *) |
||
151 | end |
||
152 | else |
||
153 | begin |
||
154 | Close(F); |
||
155 | {$I-} |
||
156 | Erase(F); |
||
157 | {$I+} |
||
158 | DeleteFile := IOResult = 0; |
||
159 | end; |
||
733 | daniel-mar | 160 | end; |
161 | |||
162 | function FileExists(filename: string): boolean; |
||
163 | var |
||
164 | F: Text; |
||
165 | begin |
||
166 | Assign(F, filename); |
||
167 | {$I-} |
||
168 | Reset(F); |
||
169 | {$I+} |
||
170 | FileExists := IoResult = 0; |
||
171 | end; |
||
172 | |||
739 | daniel-mar | 173 | function IsPositiveInteger(s: string): boolean; |
174 | var |
||
175 | i: integer; |
||
176 | begin |
||
177 | IsPositiveInteger := false; |
||
178 | |||
179 | if Length(s) = 0 then exit; |
||
180 | if (s[1] = '0') and (s <> '0') then exit; |
||
181 | for i := 1 to Length(s) do |
||
182 | begin |
||
183 | if not (s[i] in ['0'..'9']) then exit; |
||
184 | end; |
||
185 | |||
186 | IsPositiveInteger := true; |
||
187 | end; |
||
188 | |||
733 | daniel-mar | 189 | function StrToInt(s: string): Integer; |
190 | var |
||
191 | i, Error: Integer; |
||
192 | begin |
||
193 | Val(s, i, Error); |
||
194 | StrToInt := i; |
||
195 | end; |
||
196 | |||
197 | function IntToStr(Value: Integer): string; |
||
198 | var |
||
199 | s: string; |
||
200 | begin |
||
201 | Str(Value, s); |
||
202 | IntToStr := s; |
||
203 | end; |
||
204 | |||
205 | end. |