1 { $O+,F+,I-,S-,R-,V-}
2 Unit MKString;
3
4 Interface
5
6 Uses {Objects, }Dos,
7 {$IfDef VirtualPascal}
8 Use32,
9 {$EndIf}
10 GeneralP;
11
12 const
13 hexChars: array [0..$F] of Char = '0123456789ABCDEF';
14
15 Procedure MKStrCat(Var St: String; AStr: String);
LoCasenull16 Function LoCase(Chr: Char): Char;
padrightnull17 Function padright(st:string;ch:char;l:integer):string;
PadLeftnull18 Function PadLeft(St:String;Ch:Char;L:Integer): String;
stripleadnull19 function striplead(st:string;ch:char):string;
StripTrailnull20 Function StripTrail(St:String;Ch:Char):String;
StripBothnull21 Function StripBoth(St:String;Ch:Char):String;
Lowernull22 Function Lower(S : string) : string;
Uppernull23 Function Upper(S : string) : string;
WWrapnull24 Function WWrap(St:String; Max:Byte):String;
ExtractWordnull25 function ExtractWord(Str : String; N : Integer) : String;
WordCountnull26 Function WordCount(Str : String) : Integer;
CommaStrnull27 Function CommaStr(Number: LongInt): String;
Long2Strnull28 Function Long2Str(Number: LongInt): String;
Bin2Strnull29 Function Bin2Str(Number: Byte): String;
Str2Binnull30 Function Str2Bin(St: String): Byte;
Str2Longnull31 Function Str2Long(St: String): LongInt;
HexLongnull32 Function HexLong(Number:LongInt): String;
HexStrnull33 Function HexStr(Number: Word): String;
HexBytenull34 Function HexByte(Number: Byte): String;
DateStrnull35 Function DateStr(DosDate: LongInt): String;
TimeStrnull36 Function TimeStr(DosDate: LongInt): String;
37 Procedure AddBackSlash(Var InPath: String);
WithBackSlashnull38 Function WithBackSlash(InPath: String): String;
39 {$IFDEF WINDOWS}
FormattedDatenull40 Function FormattedDate(DT: TDateTime; Mask: String): String;
41 {$ELSE}
FormattedDatenull42 Function FormattedDate(DT: DateTime; Mask: String): String;
43 {$ENDIF}
FormattedDosDatenull44 Function FormattedDosDate(DosDate: LongInt; Mask:String): String;
DOWStrnull45 Function DOWStr(Dow: Word): String;
DOWShortStrnull46 Function DOWShortStr(DOW: Word): String;
ReformatDatenull47 Function ReformatDate(ODate: String; Mask: String): String;
LongDatenull48 Function LongDate(DStr: String): LongInt;
TimeStr2Wordnull49 Function TimeStr2Word(TS: String): Word;
Word2TimeStrnull50 Function Word2TimeStr(CTime: Word): String;
MonthStrnull51 Function MonthStr(MonthNo: Word): String;
Az2Strnull52 Function Az2Str(Var Str: String; MaxLen: Byte): String; {Convert asciiz to string}
53 Procedure Str2Az(Str: String; MaxLen: Byte; Var AZStr); {Convert string to asciiz}
MKDateToStrnull54 Function MKDateToStr(MKD: String): String; {Convert YYMMDD to MM-DD-YY}
StrToMKDatenull55 Function StrToMKDate(Str: String): String; {Convert MM-DD-YY to YYMMDD}
CleanCharnull56 Function CleanChar(InChar: Char): Char;
IsNumericnull57 Function IsNumeric(Str: String): Boolean;
PosLastCharnull58 Function PosLastChar(Ch: Char; St: String): Word;
Propernull59 Function Proper (Str : String) : String;
MakeNamenull60 Function MakeName (Name : String): String;
61
62
63 Const
64 CommaChar: Char = ',';
65
66 Var
67 ExtraString: String;
68
69 Implementation
70
71
LoCasenull72 function LoCase(Chr: Char): Char;
73 begin
74 case chr of
75 'A'..'Z': LoCase:=char(byte(Chr)+32)
76 else
77 LoCase:=Chr;
78 end;
79 end;
80
81
82 Procedure AddBackSlash(Var InPath: String);
83 Begin
84 If Length(InPath) > 0 Then
85 Begin
86 If InPath[Length(InPath)] <> DirSep Then
87 Begin
88 InPath[0] := Chr(Length(InPath) + 1);
89 InPath[Length(InPath)] := DirSep;
90 End;
91 End;
92 End;
93
94
WithBackSlashnull95 Function WithBackSlash(InPath: String): String;
96 Begin
97 AddBackSlash(InPath);
98 WithBackSlash := InPath;
99 End;
100
101
Bin2Strnull102 Function Bin2Str(Number: Byte): String;
103 Var
104 Temp1: Byte;
105 Temp2: Byte;
106 i: Word;
107 TempStr: String[8];
108
109 Begin
110 Temp1 := 0;
111 Temp2 := $80;
112 For i := 1 to 8 Do
113 Begin
114 If (Number and Temp2) <> 0 Then
115 TempStr[i] := '1'
116 Else
117 TempStr[i] := '0';
118 Temp2 := Temp2 shr 1;
119 End;
120 TempStr[0] := #8;
121 Bin2Str := TempStr;
122 End;
123
124
Str2Binnull125 Function Str2Bin(St: String): Byte;
126 Var
127 i: Word;
128 Temp1: Byte;
129 Temp2: Byte;
130
131 Begin
132 St := StripBoth(St,' ');
133 St := PadLeft(St,'0',8);
134 Temp1 := 0;
135 Temp2 := $80;
136 For i := 1 to 8 Do
137 Begin
138 If St[i] = '1' Then
139 Inc(Temp1,Temp2);
140 Temp2 := Temp2 shr 1;
141 End;
142 Str2Bin := Temp1;
143 End;
144
Str2Longnull145 function Str2Long(St: String): LongInt;
146 var
147 Temp: LongInt;
148 Code: Integer;
149 begin
150 Val(St,Temp,Code);
151 Str2Long:=Temp;
152 end;
153
DateStrnull154 Function DateStr(DosDate: LongInt): String;
155 Var
156 {$IFDEF WINDOWS}
157 DT:TDateTime;
158 {$ELSE}
159 DT: DateTime;
160 {$ENDIF}
161 OutStr: String[8];
162 TempStr: String[8];
163
164 Begin
165 UnPackTime(DosDate,DT);
166 Str(DT.Month:2,TempStr);
167 If TempStr[1] = ' ' Then
168 OutStr[1] := '0'
169 Else
170 OutStr[1] := TempStr[1];
171 OutStr[2] := TempStr[2];
172 OutStr[3] := '-';
173 Str(DT.Day:2,TempStr);
174 If TempStr[1] = ' ' Then
175 OutStr[4] := '0'
176 Else
177 OutStr[4] := TempStr[1];
178 OutStr[5] := TempStr[2];
179 OutStr[6] := '-';
180 Str(DT.Year:4,TempStr);
181 If TempStr[3] = ' ' Then
182 OutStr[7] := '0'
183 Else
184 OutStr[7] := TempStr[3];
185 OutStr[8] := TempStr[4];
186 OutStr[0] := #8;
187 DateStr := OutStr;
188 End;
189
TimeStrnull190 Function TimeStr(DosDate: LongInt): String;
191 Var
192 {$IFDEF WINDOWS}
193 DT: TDateTime;
194 {$ELSE}
195 DT: DateTime;
196 {$ENDIF}
197 OutStr: String[8];
198 TempStr: String[8];
199
200 Begin
201 UnPackTime(DosDate,DT);
202 Str(DT.Hour:2,TempStr);
203 If TempStr[1] = ' ' Then
204 OutStr[1] := '0'
205 Else
206 OutStr[1] := TempStr[1];
207 OutStr[2] := TempStr[2];
208 OutStr[3] := ':';
209 Str(DT.Min:2,TempStr);
210 If TempStr[1] = ' ' Then
211 OutStr[4] := '0'
212 Else
213 OutStr[4] := TempStr[1];
214 OutStr[5] := TempStr[2];
215 OutStr[6] := ':';
216 Str(DT.Sec:2,TempStr);
217 If TempStr[1] = ' ' Then
218 OutStr[7] := '0'
219 Else
220 OutStr[7] := TempStr[1];
221 OutStr[8] := TempStr[2];
222 OutStr[0] := #8;
223 TimeStr := OutStr;
224 End;
225
HexBytenull226 function HexByte(Number: Byte): string;
227 begin
228 HexByte:=hexChars[Number shr 4]+hexChars[Number and $F];
229 end;
230
HexStrnull231 Function HexStr(Number: Word): String;
232 begin
233 HexStr := HexByte(Number Shr 8) + HexByte(Number And $FF);
234 end;
235
HexLongnull236 function HexLong(Number: LongInt): String;
237 begin
238 HexLong := HexStr(Number div $FFFF) + HexStr(Number mod $FFFF);
239 end;
240
241
Long2Strnull242 function Long2Str(Number: LongInt): String;
243 var
244 TempStr: String;
245 begin
246 Str(Number,TempStr);
247 Long2Str := TempStr;
248 end;
249
250
CommaStrnull251 Function CommaStr(Number: LongInt): String;
252 Var
253 StrPos: Integer;
254 NumberStr: String;
255
256 Begin
257 NumberStr := Long2Str(Number);
258 StrPos := Length(NumberStr) - 2;
259 While StrPos > 1 Do
260 Begin
261 Insert(',',NumberStr,StrPos);
262 StrPos := StrPos - 3;
263 End;
264 CommaStr := NumberStr;
265 End;
266
267
268
269
270
wordcountnull271 Function wordcount(str : string) : integer;
272
273 var
274 count : integer;
275 i : integer;
276 len : integer;
277
278 begin
279 len := length(str);
280 count := 0;
281 i := 1;
282 while i <= len do
283 begin
284 while ((i <= len) and ((str[i] = #32) or (str[i] = #9) or (Str[i] = ';'))) do
285 inc(i);
286 if i <= len then
287 inc(count);
288 while ((i <= len) and ((str[i] <> #32) and (str[i] <> #9) and (Str[i] <> ';'))) do
289 inc(i);
290 end;
291 wordcount := count;
292 end;
293
294
extractwordnull295 function extractword(str : string; n : integer) : string;
296 Var
297 count : integer;
298 i : integer;
299 len : integer;
300 done : boolean;
301 retstr : string;
302
303 Begin
304 retstr := '';
305 len := length(str);
306 count := 0;
307 i := 1;
308 done := false;
309 While (i <= len) and (not done) do
310 Begin
311 While ((i <= len) and ((str[i] = #32) or (str[i] = #9) or (Str[i] = ';'))) do
312 inc(i);
313 if i <= len then
314 inc(count);
315 if count = n then
316 begin
317 retstr[0] := #0;
318 If (i > 1) Then
319 If Str[i-1] = ';' Then
320 RetStr := ';';
321 while ((i <= len) and ((str[i] <> #32) and (str[i] <> #9) and (Str[i] <> ';'))) do
322 begin
323 inc(byte(retstr[0]));
324 retstr[ord(retstr[0])] := str[i];
325 inc(i);
326 end;
327 done := true;
328 end
329 Else
330 while ((i <= len) and ((str[i] <> #32) and (str[i] <> #9) and (Str[i] <> ';'))) do
331 inc(i);
332 End;
333 extractword := retstr;
334 End;
335
336
WWrapnull337 Function WWrap(St:String; Max:Byte):String;
338 Var
339 TempStr: String;
340 TempPos: Byte;
341
342 Begin
343 ExtraString := '';
344 TempStr := St;
345 If Length(TempStr) > Max Then
346 Begin
347 TempPos := Max;
348 While ((TempStr[TempPos] <> ' ') And (TempPos > (Max - 20))
349 And (TempPos > 1)) Do
350 Dec(TempPos);
351 If (Length(TempStr) > TempPos) Then
352 ExtraString := Copy(TempStr,TempPos + 1,Length(TempStr) - TempPos);
353 TempStr[0] := Chr(TempPos);
354 End;
355 WWrap := TempStr;
356 End;
357
358
359 {Function Proper(St:String):String;
360 Var
361 TempStr: String;
362 i: Integer;
363 NextUp: Boolean;
364
365 Begin
366 If Length(St) = 0 Then
367 Proper := ''
368 Else
369 Begin
370 i := 1;
371 NextUp := True;
372 TempStr := St;
373 While i <= Length(TempStr) Do
374 Begin
375 If ((TempStr[i] < 'A') Or (TempStr[i] > 'z')
376 Or ((TempStr[i] > 'Z') And (TempStr[i] < 'a')) ) Then
377 Begin
378 NextUp := True;
379 End
380 Else
381 Begin
382 If NextUp = True Then
383 Begin
384 NextUp := False;
385 TempStr[i] := UpCase(TempStr[i]);
386 End
387 Else
388 Begin
389 If TempStr[i] < 'a' Then
390 TempStr[i] := Char(Ord(TempStr[i]) + 32);
391 End;
392 End;
393 i := i + 1;
394 End;
395 Proper := TempStr;
396 End;
397 End;}
398
399
PadLeftnull400 Function PadLeft(St:String;Ch:Char;L:Integer): String;
401 var
402 TempStr: String;
403 i: Word;
404 begin
405 If Length(St) >= L Then
406 PadLeft := Copy(St,1,L)
407 else begin
408 For i := 1 to (L - Length(St)) Do
409 TempStr[i] := Ch;
410 TempStr[0] := Chr(L - Length(St));
411 PadLeft := TempStr + St;
412 end;
413 end;
414
415
padrightnull416 Function padright(st:string;ch:char;l:integer):string;
417 var
418 i: integer;
419 tempstr: string;
420 begin
421 tempstr := st;
422 if length(tempstr) > l then
423 tempstr[0] := chr(l)
424 else if length(tempstr) < l then begin
425 for i := length(tempstr)+1 to l do tempstr[i] := ch;
426 tempstr[0] := chr(l);
427 end;
428 padright := tempstr;
429 end;
430
Lowernull431 function Lower(S : string) : string;
432 var
433 tmp: string;
434 i: integer;
435 begin
436 tmp := '';
437 for i:=1 to length(s) do
438 Case s[i] of
439 'A'..'Z' : tmp := tmp + char(byte(s[i])+32);
440 '�' : tmp := tmp + '�';
441 '�' : tmp := tmp + '�';
442 '�' : tmp := tmp + '�';
443 else
444 tmp := tmp + s[i];
445 end;
446 Lower := tmp;
447 end;
448
Uppernull449 function Upper(S : string) : string;
450 var
451 tmp: string;
452 i: integer;
453 begin
454 tmp := '';
455 for i:=1 to length(s) do
456 Case s[i] of
457 'a'..'z' : tmp := tmp + char(byte(s[i])-32);
458 '�' : tmp := tmp + '�';
459 '�' : tmp := tmp + '�';
460 '�' : tmp := tmp + '�';
461 else
462 tmp := tmp + s[i];
463 end;
464 Upper := tmp;
465 end;
466
stripleadnull467 function striplead(st:string;ch:char):string;
468 var
469 tempstr: string;
470 begin
471 tempstr:=st;
472 while ((TempStr[1]=Ch) and (Length(TempStr)>0)) do
473 tempstr:=copy (tempstr,2,length(tempstr));
474 striplead:=tempstr;
475 end;
476
StripTrailnull477 function StripTrail(St: String; Ch: Char): String;
478 begin
479 while ((length(St)>0) and (St[length(St)]=Ch)) Do Dec(byte(St[0]));
480 StripTrail:=St;
481 end;
482
StripBothnull483 function StripBoth(St: String; Ch: Char): String;
484 begin
485 StripBoth:=StripTrail(StripLead(St,Ch),Ch);
486 end;
487
488
489 {$IFDEF WINDOWS}
FormattedDatenull490 Function FormattedDate(DT: TDateTime; Mask: String): String;
491 {$ELSE}
FormattedDatenull492 Function FormattedDate(DT: DateTime; Mask: String): String;
493 {$ENDIF}
494 Var
495 DStr: String[2];
496 MStr: String[2];
497 MNStr: String[3];
498 YStr: String[4];
499 HourStr: String[2];
500 MinStr: String[2];
501 SecStr: String[2];
502 TmpStr: String;
503 CurrPos: Word;
504 i: Word;
505
506 Begin
507 TmpStr := Mask;
508 Mask := Upper(Mask);
509 DStr := Copy(PadLeft(Long2Str(Dt.Day),'0',2),1,2);
510 MStr := Copy(PadLeft(Long2Str(Dt.Month),'0',2),1,2);
511 YStr := Copy(PadLeft(Long2Str(Dt.Year),'0',4),1,4);
512 HourStr := Copy(PadLeft(Long2Str(Dt.Hour),' ', 2),1,2);
513 MinStr := Copy(PadLeft(Long2Str(Dt.Min), '0',2),1,2);
514 SecStr := Copy(PadLeft(Long2Str(Dt.Sec), '0',2),1,2);
515 MNStr := MonthStr(Dt.Month);
516 If (Pos('YYYY', Mask) = 0) Then
517 YStr := Copy(YStr,3,2);
518 CurrPos := Pos('DD', Mask);
519 If CurrPos > 0 Then
520 For i := 1 to Length(DStr) Do
521 TmpStr[CurrPos + i - 1] := DStr[i];
522 CurrPos := Pos('YY', Mask);
523 If CurrPos > 0 Then
524 For i := 1 to Length(YStr) Do
525 TmpStr[CurrPos + i - 1] := YStr[i];
526 CurrPos := Pos('MM', Mask);
527 If CurrPos > 0 Then
528 For i := 1 to Length(MStr) Do
529 TmpStr[CurrPos + i - 1] := MStr[i];
530 CurrPos := Pos('HH', Mask);
531 If CurrPos > 0 Then
532 For i := 1 to Length(HourStr) Do
533 TmpStr[CurrPos + i - 1] := HourStr[i];
534 CurrPos := Pos('SS', Mask);
535 If CurrPos > 0 Then
536 For i := 1 to Length(SecStr) Do
537 TmpStr[CurrPos + i - 1] := SecStr[i];
538 CurrPos := Pos('II', Mask);
539 If CurrPos > 0 Then
540 For i := 1 to Length(MinStr) Do
541 TmpStr[CurrPos + i - 1] := MinStr[i];
542 CurrPos := Pos('NNN', Mask);
543 If CurrPos > 0 Then
544 For i := 1 to Length(MNStr) Do
545 TmpStr[CurrPos + i - 1] := MNStr[i];
546 FormattedDate := TmpStr;
547 End;
548
549
FormattedDosDatenull550 Function FormattedDosDate(DosDate: LongInt; Mask:String): String;
551 Var
552 {$IFDEF WINDOWS}
553 DT: TDateTime;
554 {$ELSE}
555 DT: DateTime;
556 {$ENDIF}
557
558 Begin
559 UnPackTime(DosDate, DT);
560 FormattedDosDate := FormattedDate(DT, Mask);
561 End;
562
DOWStrnull563 function DOWStr(Dow: Word): String;
564 begin
565 Case DOW of
566 0: DOWStr := 'Sunday';
567 1: DOWStr := 'Monday';
568 2: DOWStr := 'Tuesday';
569 3: DOWStr := 'Wednesday';
570 4: DOWStr := 'Thursday';
571 5: DOWStr := 'Friday';
572 6: DOWStr := 'Saturday';
573 else
574 DOWStr := '?????';
575 end;
576 end;
577
DOWShortStrnull578 function DOWShortStr(DOW: Word): String;
579 begin
580 DOWShortStr := Copy(DOWStr(Dow),1,3);
581 end;
582
ReformatDatenull583 Function ReformatDate(ODate: String; Mask: String): String;
584 Var
585 Code: Word;
586 {$IFDEF WINDOWS}
587 DT: TDateTime;
588 {$ELSE}
589 DT: DateTime;
590 {$ENDIF}
591
592 Begin
593 Val(Copy(ODate,7,2), DT.Year, Code);
594 Val(Copy(ODate,1,2), DT.Month, Code);
595 Val(Copy(ODate,4,2), DT.Day, Code);
596 If DT.Year < 80 Then
597 Inc(DT.Year, 2000)
598 Else
599 Inc(DT.Year, 1900);
600 ReformatDate := FormattedDate(DT, Mask);
601 End;
602
603
Word2TimeStrnull604 Function Word2TimeStr(CTime: Word): String;
605 Begin
606 Word2TimeStr := PadLeft(Long2Str(Hi(CTime)),'0',2) + ':' +
607 PadLeft(Long2Str(Lo(CTime)),'0',2);
608 End;
609
610
TimeStr2Wordnull611 Function TimeStr2Word(TS: String): Word;
612 Var
613 Vr: Word;
614 Vr2: Word;
615 Code: Word;
616
617 Begin
618 Val(Copy(TS,1,2), Vr, Code);
619 Val(Copy(TS,4,2), Vr2, Code);
620 TimeStr2Word := Vr2 + (Vr shl 8);
621 End;
622
623
MonthStrnull624 function MonthStr(MonthNo: Word): String;
625 begin
626 Case MonthNo of
627 01: MonthStr := 'Jan';
628 02: MonthStr := 'Feb';
629 03: MonthStr := 'Mar';
630 04: MonthStr := 'Apr';
631 05: MonthStr := 'May';
632 06: MonthStr := 'Jun';
633 07: MonthStr := 'Jul';
634 08: MonthStr := 'Aug';
635 09: MonthStr := 'Sep';
636 10: MonthStr := 'Oct';
637 11: MonthStr := 'Nov';
638 12: MonthStr := 'Dec';
639 else
640 MonthStr := '???';
641 end;
642 end;
643
Az2Strnull644 function Az2Str(Var Str: String; MaxLen: Byte): String; {Convert asciiz to string}
645 var
646 i: Word;
647 TmpStr: String;
648 begin
649 For i := 1 to MaxLen do TmpStr[i] := Str[i-1];
650 { Move(Str, TmpStr[1], MaxLen);}
651 TmpStr[0] := Chr(MaxLen);
652 i := Pos(#0, TmpStr);
653 If i > 0 Then TmpStr[0] := Chr(i - 1);
654 Az2Str := TmpStr;
655 end;
656
657 procedure Str2Az(Str: String; MaxLen: Byte; Var AZStr); {Convert string to asciiz}
658 begin
659 if Length(Str) >= MaxLen then begin
660 Str[MaxLen] := #0;
661 Move(Str[1], AZStr, MaxLen);
662 end else begin
663 Str[Length(Str) + 1] := #0;
664 Move(Str[1], AZStr, Length(Str) + 1);
665 end;
666 end;
667
MKDateToStrnull668 Function MKDateToStr(MKD: String): String; {Convert YYMMDD to MM-DD-YY}
669 Begin
670 MKDateToStr := Copy(MKD,3,2) + '-' + Copy(MKD,5,2) + '-' +
671 Copy(MKD,1,2);
672 End;
673
674
StrToMKDatenull675 Function StrToMKDate(Str: String): String; {Convert MM-DD-YY to YYMMDD}
676 Begin
677 StrToMKDate := Copy(Str,7,2) + Copy(Str,1,2) + Copy(Str,4,2);
678 End;
679
680
CleanCharnull681 Function CleanChar(InChar: Char): Char;
682 Const
683 CtlChars: String[32] = 'oooooooooXoollo><|!Pg*|^v><-^v';
684 HiChars: String[64] = 'CueaaaageeeiiiAAEaaooouuyOUcLYPfarounNao?--//!<>***|||||||||||||';
685 HiChars2: String[64]= '|--|-+||||=+|=++-=--==-||||*****abcnEduto0nd80En=+><fj/~oo.vn2* ';
686
687 Begin
688 Case InChar of
689 #0..#31: CleanChar := CtlChars[Ord(InChar) + 1];
690 #128..#191: CleanChar := HiChars[Ord(InChar) - 127];
691 #192..#255: CleanChar := HiChars2[Ord(InChar) - 191];
692 Else
693 CleanChar := InChar;
694 End;
695 End;
696
697
IsNumericnull698 Function IsNumeric(Str: String): Boolean;
699 Var
700 i: Word;
701
702 begin
703 IsNumeric := True;
704 for i := 1 To Length(Str) Do
705 If not (Str[i] in ['0'..'9']) Then IsNumeric := False;
706 end;
707
708
LongDatenull709 Function LongDate(DStr: String): LongInt;
710 Var
711 {$IFDEF WINDOWS}
712 DT: TDateTime;
713 {$ELSE}
714 DT: DateTime;
715 {$ENDIF}
716 DosDate: LongInt;
717
718 Begin
719 DT.Year := Str2Long(Copy(DStr,7,2));
720 If Dt.Year < 80 Then
721 Inc(DT.Year, 2000)
722 Else
723 Inc(DT.Year, 1900);
724 DT.Month := Str2Long(Copy(DStr,1,2));
725 DT.Day := Str2Long(Copy(DStr,4,2));
726 DT.Hour := 0;
727 DT.Min := 0;
728 DT.Sec := 0;
729 PackTime(DT, DosDate);
730 LongDate := DosDate;
731 End;
732
733
734 Procedure MKStrCat(Var St: String; AStr: String);
735 Var
736 i: Word;
737
738 Begin
739 i := Length(AStr);
740 If i + Length(St) > 255 Then
741 i := 255 - Length(St);
742 Move(AStr[1], St[Length(St) + 1], i);
743 Inc(byte(St[0]), i);
744 End;
745
746
PosLastCharnull747 Function PosLastChar(Ch: Char; St: String): Word;
748 Var
749 i: Word;
750
751 Begin
752 i := Length(St);
753 While ((i > 0) and (st[i] <> ch)) Do
754 Dec(i);
755 PosLastChar := i;
756 End;
757
Propernull758 function Proper (Str : String) : String;
759 var
760 I : Integer;
761 Space : Boolean;
762 begin
763 Space := True;
764 Str := Lower(Str);
765 for I := 1 to Length (Str) do
766 If Space and (Ord (Str [I]) in [97..122]) then begin
767 Space := False;
768 Str[I] := Upcase (Str [I]);
769 end else If (Space = False) and (Str[I] = ' ') then
770 Space := True;
771 Proper := Str;
772 end;
773
MakeNamenull774 function MakeName (Name : String): String;
775 var
776 Comma : String[2];
777 begin
778 If Pos (' ', Name) > 0 then Comma := ', ' else Comma := '';
779 MakeName := Copy (Name, Pos (' ', Name) + 1, Length (Name) - Pos (' ', Name))
780 + Comma + Copy (Name, 1, Pos (' ', Name) - 1) + #0;
781 end;
782
783 End.
784