home *** CD-ROM | disk | FTP | other *** search
/ World of Shareware - Software Farm 2 / wosw_2.zip / wosw_2 / PASCAL / MKMSG102.ZIP / MKSTRING.PAS < prev    next >
Pascal/Delphi Source File  |  1993-08-15  |  17KB  |  784 lines

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