1 { $O+,F+,I-,S-,R-,V-}
2 Unit MKString;
3
4 Interface
5
6 Uses
7 {$ifndef __GPC__}
8 Dos,
9 {$endif}
10 {$IfDef VirtualPascal}
11 Use32,
12 {$EndIf}
13 GeneralP;
14
15 const
16 hexChars: array [0..$F] of Char = '0123456789ABCDEF';
17
18 Procedure MKStrCat(Var St: String; AStr: String);
LoCasenull19 Function LoCase(Chr: Char): Char;
padrightnull20 Function padright(st:string;ch:char;l:integer):string;
PadLeftnull21 Function PadLeft(St:String;Ch:Char;L:Integer): String;
stripleadnull22 function striplead(st:string;ch:char):string;
StripTrailnull23 Function StripTrail(St:String;Ch:Char):String;
StripBothnull24 Function StripBoth(St:String;Ch:Char):String;
Lowernull25 Function Lower(S : string) : string;
Uppernull26 Function Upper(S : string) : string;
WWrapnull27 Function WWrap(St:String; Max:Byte):String;
ExtractWordnull28 function ExtractWord(Str : String; N : Integer) : String;
WordCountnull29 Function WordCount(Str : String) : Integer;
CommaStrnull30 Function CommaStr(Number: LongInt): String;
Long2Strnull31 Function Long2Str(Number: LongInt): String;
Bin2Strnull32 Function Bin2Str(Number: Byte): String;
Str2Binnull33 Function Str2Bin(St: String): Byte;
Str2Longnull34 Function Str2Long(St: String): LongInt;
HexLongnull35 Function HexLong(Number:LongInt): String;
HexStrnull36 Function HexStr(Number: Word): String;
HexBytenull37 Function HexByte(Number: Byte): String;
DateStrnull38 Function DateStr(DosDate: LongInt): String;
TimeStrnull39 Function TimeStr(DosDate: LongInt): String;
40 Procedure AddBackSlash(Var InPath: String);
WithBackSlashnull41 Function WithBackSlash(InPath: String): String;
42 {$IFDEF WINDOWS}
FormattedDatenull43 Function FormattedDate(DT: TDateTime; Mask: String): String;
44 {$ELSE}
FormattedDatenull45 Function FormattedDate(DT: DateTime; Mask: String): String;
46 {$ENDIF}
FormattedDosDatenull47 Function FormattedDosDate(DosDate: LongInt; Mask:String): String;
DOWStrnull48 Function DOWStr(Dow: Word): String;
DOWShortStrnull49 Function DOWShortStr(DOW: Word): String;
ReformatDatenull50 Function ReformatDate(ODate: String; Mask: String): String;
LongDatenull51 Function LongDate(DStr: String): LongInt;
TimeStr2Wordnull52 Function TimeStr2Word(TS: String): Word;
Word2TimeStrnull53 Function Word2TimeStr(CTime: Word): String;
MonthStrnull54 Function MonthStr(MonthNo: Word): String;
Az2Strnull55 Function Az2Str(Var Str: String; MaxLen: Byte): String; {Convert asciiz to string}
56 Procedure Str2Az(Str: String; MaxLen: Byte; Var AZStr); {Convert string to asciiz}
MKDateToStrnull57 Function MKDateToStr(MKD: String): String; {Convert YYMMDD to MM-DD-YY}
StrToMKDatenull58 Function StrToMKDate(Str: String): String; {Convert MM-DD-YY to YYMMDD}
CleanCharnull59 Function CleanChar(InChar: Char): Char;
IsNumericnull60 Function IsNumeric(Str: String): Boolean;
PosLastCharnull61 Function PosLastChar(Ch: Char; St: String): Word;
Propernull62 Function Proper (Str : String) : String;
MakeNamenull63 Function MakeName (Name : String): String;
64
65
66 Const
67 CommaChar: Char = ',';
68
69 Var
70 ExtraString: String;
71
72 Implementation
73
74
LoCasenull75 function LoCase(Chr: Char): Char;
76 begin
77 case chr of
78 'A'..'Z': LoCase:=char(byte(Chr)+32)
79 else
80 LoCase:=Chr;
81 end;
82 end;
83
84
85 Procedure AddBackSlash(Var InPath: String);
86 Begin
87 If Length(InPath) > 0 Then
88 Begin
89 If InPath[Length(InPath)] <> DirSep Then
90 Begin
91 InPath[0] := Chr(Length(InPath) + 1);
92 InPath[Length(InPath)] := DirSep;
93 End;
94 End;
95 End;
96
97
WithBackSlashnull98 Function WithBackSlash(InPath: String): String;
99 Begin
100 AddBackSlash(InPath);
101 WithBackSlash := InPath;
102 End;
103
104
Bin2Strnull105 Function Bin2Str(Number: Byte): String;
106 Var
107 Temp1: Byte;
108 Temp2: Byte;
109 i: Word;
110 TempStr: String[8];
111
112 Begin
113 Temp1 := 0;
114 Temp2 := $80;
115 For i := 1 to 8 Do
116 Begin
117 If (Number and Temp2) <> 0 Then
118 TempStr[i] := '1'
119 Else
120 TempStr[i] := '0';
121 Temp2 := Temp2 shr 1;
122 End;
123 TempStr[0] := #8;
124 Bin2Str := TempStr;
125 End;
126
127
Str2Binnull128 Function Str2Bin(St: String): Byte;
129 Var
130 i: Word;
131 Temp1: Byte;
132 Temp2: Byte;
133
134 Begin
135 St := StripBoth(St,' ');
136 St := PadLeft(St,'0',8);
137 Temp1 := 0;
138 Temp2 := $80;
139 For i := 1 to 8 Do
140 Begin
141 If St[i] = '1' Then
142 Inc(Temp1,Temp2);
143 Temp2 := Temp2 shr 1;
144 End;
145 Str2Bin := Temp1;
146 End;
147
Str2Longnull148 function Str2Long(St: String): LongInt;
149 var
150 Temp: LongInt;
151 Code: Integer;
152 begin
153 Val(St,Temp,Code);
154 Str2Long:=Temp;
155 end;
156
DateStrnull157 Function DateStr(DosDate: LongInt): String;
158 Var
159 {$IFDEF WINDOWS}
160 DT:TDateTime;
161 {$ELSE}
162 DT: DateTime;
163 {$ENDIF}
164 OutStr: String[8];
165 TempStr: String[8];
166
167 Begin
168 UnPackTime(DosDate,DT);
169 Str(DT.Month:2,TempStr);
170 If TempStr[1] = ' ' Then
171 OutStr[1] := '0'
172 Else
173 OutStr[1] := TempStr[1];
174 OutStr[2] := TempStr[2];
175 OutStr[3] := '-';
176 Str(DT.Day:2,TempStr);
177 If TempStr[1] = ' ' Then
178 OutStr[4] := '0'
179 Else
180 OutStr[4] := TempStr[1];
181 OutStr[5] := TempStr[2];
182 OutStr[6] := '-';
183 Str(DT.Year:4,TempStr);
184 If TempStr[3] = ' ' Then
185 OutStr[7] := '0'
186 Else
187 OutStr[7] := TempStr[3];
188 OutStr[8] := TempStr[4];
189 OutStr[0] := #8;
190 DateStr := OutStr;
191 End;
192
TimeStrnull193 Function TimeStr(DosDate: LongInt): String;
194 Var
195 {$IFDEF WINDOWS}
196 DT: TDateTime;
197 {$ELSE}
198 DT: DateTime;
199 {$ENDIF}
200 OutStr: String[8];
201 TempStr: String[8];
202
203 Begin
204 UnPackTime(DosDate,DT);
205 Str(DT.Hour:2,TempStr);
206 If TempStr[1] = ' ' Then
207 OutStr[1] := '0'
208 Else
209 OutStr[1] := TempStr[1];
210 OutStr[2] := TempStr[2];
211 OutStr[3] := ':';
212 Str(DT.Min:2,TempStr);
213 If TempStr[1] = ' ' Then
214 OutStr[4] := '0'
215 Else
216 OutStr[4] := TempStr[1];
217 OutStr[5] := TempStr[2];
218 OutStr[6] := ':';
219 Str(DT.Sec:2,TempStr);
220 If TempStr[1] = ' ' Then
221 OutStr[7] := '0'
222 Else
223 OutStr[7] := TempStr[1];
224 OutStr[8] := TempStr[2];
225 OutStr[0] := #8;
226 TimeStr := OutStr;
227 End;
228
HexBytenull229 function HexByte(Number: Byte): string;
230 begin
231 HexByte:=hexChars[Number shr 4]+hexChars[Number and $F];
232 end;
233
HexStrnull234 Function HexStr(Number: Word): String;
235 begin
236 HexStr := HexByte(Number Shr 8) + HexByte(Number And $FF);
237 end;
238
HexLongnull239 function HexLong(Number: LongInt): String;
240 begin
241 HexLong := HexStr(Number div $FFFF) + HexStr(Number mod $FFFF);
242 end;
243
244
Long2Strnull245 function Long2Str(Number: LongInt): String;
246 var
247 TempStr: String;
248 begin
249 Str(Number,TempStr);
250 Long2Str := TempStr;
251 end;
252
253
CommaStrnull254 Function CommaStr(Number: LongInt): String;
255 Var
256 StrPos: Integer;
257 NumberStr: String;
258
259 Begin
260 NumberStr := Long2Str(Number);
261 StrPos := Length(NumberStr) - 2;
262 While StrPos > 1 Do
263 Begin
264 Insert(',',NumberStr,StrPos);
265 StrPos := StrPos - 3;
266 End;
267 CommaStr := NumberStr;
268 End;
269
270
271
272
273
wordcountnull274 Function wordcount(str : string) : integer;
275
276 var
277 count : integer;
278 i : integer;
279 len : integer;
280
281 begin
282 len := length(str);
283 count := 0;
284 i := 1;
285 while i <= len do
286 begin
287 while ((i <= len) and ((str[i] = #32) or (str[i] = #9) or (Str[i] = ';'))) do
288 inc(i);
289 if i <= len then
290 inc(count);
291 while ((i <= len) and ((str[i] <> #32) and (str[i] <> #9) and (Str[i] <> ';'))) do
292 inc(i);
293 end;
294 wordcount := count;
295 end;
296
297
extractwordnull298 function extractword(str : string; n : integer) : string;
299 Var
300 count : integer;
301 i : integer;
302 len : integer;
303 done : boolean;
304 retstr : string;
305
306 Begin
307 retstr := '';
308 len := length(str);
309 count := 0;
310 i := 1;
311 done := false;
312 While (i <= len) and (not done) do
313 Begin
314 While ((i <= len) and ((str[i] = #32) or (str[i] = #9) or (Str[i] = ';'))) do
315 inc(i);
316 if i <= len then
317 inc(count);
318 if count = n then
319 begin
320 retstr[0] := #0;
321 If (i > 1) Then
322 If Str[i-1] = ';' Then
323 RetStr := ';';
324 while ((i <= len) and ((str[i] <> #32) and (str[i] <> #9) and (Str[i] <> ';'))) do
325 begin
326 inc(byte(retstr[0]));
327 retstr[ord(retstr[0])] := str[i];
328 inc(i);
329 end;
330 done := true;
331 end
332 Else
333 while ((i <= len) and ((str[i] <> #32) and (str[i] <> #9) and (Str[i] <> ';'))) do
334 inc(i);
335 End;
336 extractword := retstr;
337 End;
338
339
WWrapnull340 Function WWrap(St:String; Max:Byte):String;
341 Var
342 TempStr: String;
343 TempPos: Byte;
344
345 Begin
346 ExtraString := '';
347 TempStr := St;
348 If Length(TempStr) > Max Then
349 Begin
350 TempPos := Max;
351 While ((TempStr[TempPos] <> ' ') And (TempPos > (Max - 20))
352 And (TempPos > 1)) Do
353 Dec(TempPos);
354 If (Length(TempStr) > TempPos) Then
355 ExtraString := Copy(TempStr,TempPos + 1,Length(TempStr) - TempPos);
356 TempStr[0] := Chr(TempPos);
357 End;
358 WWrap := TempStr;
359 End;
360
361
362 {Function Proper(St:String):String;
363 Var
364 TempStr: String;
365 i: Integer;
366 NextUp: Boolean;
367
368 Begin
369 If Length(St) = 0 Then
370 Proper := ''
371 Else
372 Begin
373 i := 1;
374 NextUp := True;
375 TempStr := St;
376 While i <= Length(TempStr) Do
377 Begin
378 If ((TempStr[i] < 'A') Or (TempStr[i] > 'z')
379 Or ((TempStr[i] > 'Z') And (TempStr[i] < 'a')) ) Then
380 Begin
381 NextUp := True;
382 End
383 Else
384 Begin
385 If NextUp = True Then
386 Begin
387 NextUp := False;
388 TempStr[i] := UpCase(TempStr[i]);
389 End
390 Else
391 Begin
392 If TempStr[i] < 'a' Then
393 TempStr[i] := Char(Ord(TempStr[i]) + 32);
394 End;
395 End;
396 i := i + 1;
397 End;
398 Proper := TempStr;
399 End;
400 End;}
401
402
PadLeftnull403 Function PadLeft(St:String;Ch:Char;L:Integer): String;
404 var
405 TempStr: String;
406 i: Word;
407 begin
408 If Length(St) >= L Then
409 PadLeft := Copy(St,1,L)
410 else begin
411 For i := 1 to (L - Length(St)) Do
412 TempStr[i] := Ch;
413 TempStr[0] := Chr(L - Length(St));
414 PadLeft := TempStr + St;
415 end;
416 end;
417
418
padrightnull419 Function padright(st:string;ch:char;l:integer):string;
420 var
421 i: integer;
422 tempstr: string;
423 begin
424 tempstr := st;
425 if length(tempstr) > l then
426 tempstr[0] := chr(l)
427 else if length(tempstr) < l then begin
428 for i := length(tempstr)+1 to l do tempstr[i] := ch;
429 tempstr[0] := chr(l);
430 end;
431 padright := tempstr;
432 end;
433
Lowernull434 function Lower(S : string) : string;
435 var
436 tmp: string;
437 i: integer;
438 begin
439 tmp := '';
440 for i:=1 to length(s) do
441 Case s[i] of
442 'A'..'Z' : tmp := tmp + char(byte(s[i])+32);
443 '�' : tmp := tmp + '�';
444 '�' : tmp := tmp + '�';
445 '�' : tmp := tmp + '�';
446 else
447 tmp := tmp + s[i];
448 end;
449 Lower := tmp;
450 end;
451
Uppernull452 function Upper(S : string) : string;
453 var
454 tmp: string;
455 i: integer;
456 begin
457 tmp := '';
458 for i:=1 to length(s) do
459 Case s[i] of
460 'a'..'z' : tmp := tmp + char(byte(s[i])-32);
461 '�' : tmp := tmp + '�';
462 '�' : tmp := tmp + '�';
463 '�' : tmp := tmp + '�';
464 else
465 tmp := tmp + s[i];
466 end;
467 Upper := tmp;
468 end;
469
stripleadnull470 function striplead(st:string;ch:char):string;
471 var
472 tempstr: string;
473 begin
474 tempstr:=st;
475 while ((TempStr[1]=Ch) and (Length(TempStr)>0)) do
476 tempstr:=copy (tempstr,2,length(tempstr));
477 striplead:=tempstr;
478 end;
479
StripTrailnull480 function StripTrail(St: String; Ch: Char): String;
481 begin
482 while ((length(St)>0) and (St[length(St)]=Ch)) Do Dec(byte(St[0]));
483 StripTrail:=St;
484 end;
485
StripBothnull486 function StripBoth(St: String; Ch: Char): String;
487 begin
488 StripBoth:=StripTrail(StripLead(St,Ch),Ch);
489 end;
490
491
492 {$IFDEF WINDOWS}
FormattedDatenull493 Function FormattedDate(DT: TDateTime; Mask: String): String;
494 {$ELSE}
FormattedDatenull495 Function FormattedDate(DT: DateTime; Mask: String): String;
496 {$ENDIF}
497 Var
498 DStr: String[2];
499 MStr: String[2];
500 MNStr: String[3];
501 YStr: String[4];
502 HourStr: String[2];
503 MinStr: String[2];
504 SecStr: String[2];
505 TmpStr: String;
506 CurrPos: Word;
507 i: Word;
508
509 Begin
510 TmpStr := Mask;
511 Mask := Upper(Mask);
512 DStr := Copy(PadLeft(Long2Str(Dt.Day),'0',2),1,2);
513 MStr := Copy(PadLeft(Long2Str(Dt.Month),'0',2),1,2);
514 YStr := Copy(PadLeft(Long2Str(Dt.Year),'0',4),1,4);
515 HourStr := Copy(PadLeft(Long2Str(Dt.Hour),' ', 2),1,2);
516 MinStr := Copy(PadLeft(Long2Str(Dt.Min), '0',2),1,2);
517 SecStr := Copy(PadLeft(Long2Str(Dt.Sec), '0',2),1,2);
518 MNStr := MonthStr(Dt.Month);
519 If (Pos('YYYY', Mask) = 0) Then
520 YStr := Copy(YStr,3,2);
521 CurrPos := Pos('DD', Mask);
522 If CurrPos > 0 Then
523 For i := 1 to Length(DStr) Do
524 TmpStr[CurrPos + i - 1] := DStr[i];
525 CurrPos := Pos('YY', Mask);
526 If CurrPos > 0 Then
527 For i := 1 to Length(YStr) Do
528 TmpStr[CurrPos + i - 1] := YStr[i];
529 CurrPos := Pos('MM', Mask);
530 If CurrPos > 0 Then
531 For i := 1 to Length(MStr) Do
532 TmpStr[CurrPos + i - 1] := MStr[i];
533 CurrPos := Pos('HH', Mask);
534 If CurrPos > 0 Then
535 For i := 1 to Length(HourStr) Do
536 TmpStr[CurrPos + i - 1] := HourStr[i];
537 CurrPos := Pos('SS', Mask);
538 If CurrPos > 0 Then
539 For i := 1 to Length(SecStr) Do
540 TmpStr[CurrPos + i - 1] := SecStr[i];
541 CurrPos := Pos('II', Mask);
542 If CurrPos > 0 Then
543 For i := 1 to Length(MinStr) Do
544 TmpStr[CurrPos + i - 1] := MinStr[i];
545 CurrPos := Pos('NNN', Mask);
546 If CurrPos > 0 Then
547 For i := 1 to Length(MNStr) Do
548 TmpStr[CurrPos + i - 1] := MNStr[i];
549 FormattedDate := TmpStr;
550 End;
551
552
FormattedDosDatenull553 Function FormattedDosDate(DosDate: LongInt; Mask:String): String;
554 Var
555 {$IFDEF WINDOWS}
556 DT: TDateTime;
557 {$ELSE}
558 DT: DateTime;
559 {$ENDIF}
560
561 Begin
562 UnPackTime(DosDate, DT);
563 FormattedDosDate := FormattedDate(DT, Mask);
564 End;
565
DOWStrnull566 function DOWStr(Dow: Word): String;
567 begin
568 Case DOW of
569 0: DOWStr := 'Sunday';
570 1: DOWStr := 'Monday';
571 2: DOWStr := 'Tuesday';
572 3: DOWStr := 'Wednesday';
573 4: DOWStr := 'Thursday';
574 5: DOWStr := 'Friday';
575 6: DOWStr := 'Saturday';
576 else
577 DOWStr := '?????';
578 end;
579 end;
580
DOWShortStrnull581 function DOWShortStr(DOW: Word): String;
582 begin
583 DOWShortStr := Copy(DOWStr(Dow),1,3);
584 end;
585
ReformatDatenull586 Function ReformatDate(ODate: String; Mask: String): String;
587 Var
588 Code: Word;
589 {$IFDEF WINDOWS}
590 DT: TDateTime;
591 {$ELSE}
592 DT: DateTime;
593 {$ENDIF}
594
595 Begin
596 Val(Copy(ODate,7,2), DT.Year, Code);
597 Val(Copy(ODate,1,2), DT.Month, Code);
598 Val(Copy(ODate,4,2), DT.Day, Code);
599 If DT.Year < 80 Then
600 Inc(DT.Year, 2000)
601 Else
602 Inc(DT.Year, 1900);
603 ReformatDate := FormattedDate(DT, Mask);
604 End;
605
606
Word2TimeStrnull607 Function Word2TimeStr(CTime: Word): String;
608 Begin
609 Word2TimeStr := PadLeft(Long2Str(Hi(CTime)),'0',2) + ':' +
610 PadLeft(Long2Str(Lo(CTime)),'0',2);
611 End;
612
613
TimeStr2Wordnull614 Function TimeStr2Word(TS: String): Word;
615 Var
616 Vr: Word;
617 Vr2: Word;
618 Code: Word;
619
620 Begin
621 Val(Copy(TS,1,2), Vr, Code);
622 Val(Copy(TS,4,2), Vr2, Code);
623 TimeStr2Word := Vr2 + (Vr shl 8);
624 End;
625
626
MonthStrnull627 function MonthStr(MonthNo: Word): String;
628 begin
629 Case MonthNo of
630 01: MonthStr := 'Jan';
631 02: MonthStr := 'Feb';
632 03: MonthStr := 'Mar';
633 04: MonthStr := 'Apr';
634 05: MonthStr := 'May';
635 06: MonthStr := 'Jun';
636 07: MonthStr := 'Jul';
637 08: MonthStr := 'Aug';
638 09: MonthStr := 'Sep';
639 10: MonthStr := 'Oct';
640 11: MonthStr := 'Nov';
641 12: MonthStr := 'Dec';
642 else
643 MonthStr := '???';
644 end;
645 end;
646
Az2Strnull647 function Az2Str(Var Str: String; MaxLen: Byte): String; {Convert asciiz to string}
648 var
649 i: Word;
650 TmpStr: String;
651 begin
652 For i := 1 to MaxLen do TmpStr[i] := Str[i-1];
653 { Move(Str, TmpStr[1], MaxLen);}
654 TmpStr[0] := Chr(MaxLen);
655 i := Pos(#0, TmpStr);
656 If i > 0 Then TmpStr[0] := Chr(i - 1);
657 Az2Str := TmpStr;
658 end;
659
660 procedure Str2Az(Str: String; MaxLen: Byte; Var AZStr); {Convert string to asciiz}
661 begin
662 if Length(Str) >= MaxLen then begin
663 Str[MaxLen] := #0;
664 Move(Str[1], AZStr, MaxLen);
665 end else begin
666 Str[Length(Str) + 1] := #0;
667 Move(Str[1], AZStr, Length(Str) + 1);
668 end;
669 end;
670
MKDateToStrnull671 Function MKDateToStr(MKD: String): String; {Convert YYMMDD to MM-DD-YY}
672 Begin
673 MKDateToStr := Copy(MKD,3,2) + '-' + Copy(MKD,5,2) + '-' +
674 Copy(MKD,1,2);
675 End;
676
677
StrToMKDatenull678 Function StrToMKDate(Str: String): String; {Convert MM-DD-YY to YYMMDD}
679 Begin
680 StrToMKDate := Copy(Str,7,2) + Copy(Str,1,2) + Copy(Str,4,2);
681 End;
682
683
CleanCharnull684 Function CleanChar(InChar: Char): Char;
685 Const
686 CtlChars: String[32] = 'oooooooooXoollo><|!Pg*|^v><-^v';
687 HiChars: String[64] = 'CueaaaageeeiiiAAEaaooouuyOUcLYPfarounNao?--//!<>***|||||||||||||';
688 HiChars2: String[64]= '|--|-+||||=+|=++-=--==-||||*****abcnEduto0nd80En=+><fj/~oo.vn2* ';
689
690 Begin
691 Case InChar of
692 #0..#31: CleanChar := CtlChars[Ord(InChar) + 1];
693 #128..#191: CleanChar := HiChars[Ord(InChar) - 127];
694 #192..#255: CleanChar := HiChars2[Ord(InChar) - 191];
695 Else
696 CleanChar := InChar;
697 End;
698 End;
699
700
IsNumericnull701 Function IsNumeric(Str: String): Boolean;
702 Var
703 i: Word;
704
705 begin
706 IsNumeric := True;
707 for i := 1 To Length(Str) Do
708 If not (Str[i] in ['0'..'9']) Then IsNumeric := False;
709 end;
710
711
LongDatenull712 Function LongDate(DStr: String): LongInt;
713 Var
714 {$IFDEF WINDOWS}
715 DT: TDateTime;
716 {$ELSE}
717 DT: DateTime;
718 {$ENDIF}
719 DosDate: LongInt;
720
721 Begin
722 DT.Year := Str2Long(Copy(DStr,7,2));
723 If Dt.Year < 80 Then
724 Inc(DT.Year, 2000)
725 Else
726 Inc(DT.Year, 1900);
727 DT.Month := Str2Long(Copy(DStr,1,2));
728 DT.Day := Str2Long(Copy(DStr,4,2));
729 DT.Hour := 0;
730 DT.Min := 0;
731 DT.Sec := 0;
732 PackTime(DT, DosDate);
733 LongDate := DosDate;
734 End;
735
736
737 Procedure MKStrCat(Var St: String; AStr: String);
738 Var
739 i: Word;
740
741 Begin
742 i := Length(AStr);
743 If i + Length(St) > 255 Then
744 i := 255 - Length(St);
745 Move(AStr[1], St[Length(St) + 1], i);
746 Inc(byte(St[0]), i);
747 End;
748
749
PosLastCharnull750 Function PosLastChar(Ch: Char; St: String): Word;
751 Var
752 i: Word;
753
754 Begin
755 i := Length(St);
756 While ((i > 0) and (st[i] <> ch)) Do
757 Dec(i);
758 PosLastChar := i;
759 End;
760
Propernull761 function Proper (Str : String) : String;
762 var
763 I : Integer;
764 Space : Boolean;
765 begin
766 Space := True;
767 Str := Lower(Str);
768 for I := 1 to Length (Str) do
769 If Space and (Ord (Str [I]) in [97..122]) then begin
770 Space := False;
771 Str[I] := Upcase (Str [I]);
772 end else If (Space = False) and (Str[I] = ' ') then
773 Space := True;
774 Proper := Str;
775 end;
776
MakeNamenull777 function MakeName (Name : String): String;
778 var
779 Comma : String[2];
780 begin
781 If Pos (' ', Name) > 0 then Comma := ', ' else Comma := '';
782 MakeName := Copy (Name, Pos (' ', Name) + 1, Length (Name) - Pos (' ', Name))
783 + Comma + Copy (Name, 1, Pos (' ', Name) - 1) + #0;
784 end;
785
786 End.
787