home *** CD-ROM | disk | FTP | other *** search
/ Chip 1999 January / Chip_1999-01_cd.bin / zkuste / delphi / D4 / MRECSORT.ZIP / mwCompFrom.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1997-12-03  |  4.6 KB  |  121 lines

  1. {+--------------------------------------------------------------------------+
  2.  | Unit:        mwCompFrom
  3.  | Created:     12.97
  4.  | Author:      Martin Waldenburg
  5.  | Copyright    1997, all rights reserved.
  6.  | Description: Several comparisions methods, no range checking is done,
  7.  |              you are fulli responsible for this.
  8.  | Version:     1.0
  9.  | Status       FreeWare
  10.  | It's provided as is, without a warranty of any kind.
  11.  | You use it at your own risc.
  12.  | E-Mail me at Martin.Waldenburg@t-online.de
  13.  +--------------------------------------------------------------------------+}
  14.  
  15. unit mwCompFrom;
  16.  
  17. interface
  18.  
  19. uses
  20.   Windows, SysUtils;
  21. function CompareFrom(Const Item1, Item2; P, Count: Integer): Integer;
  22. function CompareTextFrom(Const Item1, Item2; P, Count: Integer): Integer;
  23. function StrCompfrom(Const Item1, Item2; P, Count: Integer): Integer;
  24. function IStrCompfrom(Const Item1, Item2; P, Count: Integer): Integer;
  25. function CompIntAt(Const Item1, Item2; P: Integer): Integer;
  26. function CompShortAt(Const Item1, Item2; P: Integer): Integer;
  27. function CompSmallAt(Const Item1, Item2; P: Integer): Integer;
  28. var
  29.   CompTable: array[#0..#255] of Char;
  30. implementation
  31.  
  32. procedure MakeCompTable;
  33. var
  34.   I: Char;
  35. begin
  36.   for I:= #0 to #255 do
  37.   CompTable[I]:= AnsiLowerCase(I)[1];
  38. end;  { MakeCompTable }
  39.  
  40. function CompareFrom(Const Item1, Item2; P, Count: Integer): Integer;
  41. Var
  42.   I: Integer;
  43. begin
  44.   For I:= 1 to Count do
  45.   begin
  46.   if String(Item1)[P] <> String(Item2)[P] then break;
  47.   inc(P);
  48.   end;
  49.   if String(Item1)[P] < String(Item2)[P] then Result:= -1 else
  50.   if String(Item1)[P] = String(Item2)[P] then Result:= 0 else
  51.   if String(Item1)[P] > String(Item2)[P] then Result:= 1;
  52. end;  { CompareFrom }
  53.  
  54. function CompareTextFrom(Const Item1, Item2; P, Count: Integer): Integer;
  55. Var
  56.   I: Integer;
  57. begin
  58.   For I:= 1 to Count do
  59.   begin
  60.   if CompTable[String(Item1)[P]] <> CompTable[String(Item2)[P]] then break;
  61.   inc(P);
  62.   end;
  63.   if CompTable[String(Item1)[P]] < CompTable[String(Item2)[P]] then Result:= -1 else
  64.   if CompTable[String(Item1)[P]] = CompTable[String(Item2)[P]] then Result:= 0 else
  65.   if CompTable[String(Item1)[P]] > CompTable[String(Item2)[P]] then Result:= 1;
  66. end;  { CompareTextFrom }
  67.  
  68. function StrCompfrom(Const Item1, Item2; P, Count: Integer): Integer;
  69. Var
  70.   I: Integer;
  71. begin
  72.   For I:= 1 to Count do
  73.   begin
  74.   if Char(Pointer(Integer(Item1) + P)^) <> Char(Pointer(Integer(Item2) + P)^) then break;
  75.   inc(P);
  76.   end;
  77.   if Char(Pointer(Integer(Item1) + P)^) < Char(Pointer(Integer(Item2) + P)^) then Result:= -1 else
  78.   if Char(Pointer(Integer(Item1) + P)^) = Char(Pointer(Integer(Item2) + P)^) then Result:= 0 else
  79.   if Char(Pointer(Integer(Item1) + P)^) > Char(Pointer(Integer(Item2) + P)^) then Result:= 1;
  80. end;  { StrCompfrom }
  81.  
  82. function IStrCompfrom(Const Item1, Item2; P, Count: Integer): Integer;
  83. Var
  84.   I: Integer;
  85. begin
  86.   For I:= 1 to Count do
  87.   begin
  88.   if CompTable[Char(Pointer(Integer(Item1) + P)^)] <> CompTable[Char(Pointer(Integer(Item2) + P)^)] then break;
  89.   inc(P);
  90.   end;
  91.   if CompTable[Char(Pointer(Integer(Item1) + P)^)] < CompTable[Char(Pointer(Integer(Item2) + P)^)] then Result:= -1 else
  92.   if CompTable[Char(Pointer(Integer(Item1) + P)^)] = CompTable[Char(Pointer(Integer(Item2) + P)^)] then Result:= 0 else
  93.   if CompTable[Char(Pointer(Integer(Item1) + P)^)] > CompTable[Char(Pointer(Integer(Item2) + P)^)] then Result:= 1;
  94. end;  { IStrCompfrom }
  95.  
  96. function CompIntAt(Const Item1, Item2; P: Integer): Integer;
  97. begin
  98.   if Integer(Pointer(Integer(Item1) + P)^) < Integer(Pointer(Integer(Item2) + P)^) then Result:= -1 else
  99.   if Integer(Pointer(Integer(Item1) + P)^) = Integer(Pointer(Integer(Item2) + P)^) then Result:= 0 else
  100.   if Integer(Pointer(Integer(Item1) + P)^) > Integer(Pointer(Integer(Item2) + P)^) then Result:= 1;
  101. end;  { CompIntAt }
  102.  
  103. function CompShortAt(Const Item1, Item2; P: Integer): Integer;
  104. begin
  105.   if ShortInt(Pointer(Integer(Item1) + P)^) < ShortInt(Pointer(Integer(Item2) + P)^) then Result:= -1 else
  106.   if ShortInt(Pointer(Integer(Item1) + P)^) = ShortInt(Pointer(Integer(Item2) + P)^) then Result:= 0 else
  107.   if ShortInt(Pointer(Integer(Item1) + P)^) > ShortInt(Pointer(Integer(Item2) + P)^) then Result:= 1;
  108. end;  { CompShortAt }
  109.  
  110. function CompSmallAt(Const Item1, Item2; P: Integer): Integer;
  111. begin
  112.   if SmallInt(Pointer(Integer(Item1) + P)^) < SmallInt(Pointer(Integer(Item2) + P)^) then Result:= -1 else
  113.   if SmallInt(Pointer(Integer(Item1) + P)^) = SmallInt(Pointer(Integer(Item2) + P)^) then Result:= 0 else
  114.   if SmallInt(Pointer(Integer(Item1) + P)^) > SmallInt(Pointer(Integer(Item2) + P)^) then Result:= 1;
  115. end;  { CompSmallAt }
  116.  
  117. initialization
  118. MakeCompTable;
  119.  
  120. end.
  121.